<?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>229223</bug_id>
          
          <creation_ts>2021-08-17 19:35:45 -0700</creation_ts>
          <short_desc>Build an unlinked baseline JIT</short_desc>
          <delta_ts>2021-09-27 14:53:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=230847</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>230806</dependson>
    
    <dependson>230854</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1785029</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-17 19:35:45 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785331</commentid>
    <comment_count>1</comment_count>
      <attachid>435829</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-18 19:39:43 -0700</bug_when>
    <thetext>Created attachment 435829
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785606</commentid>
    <comment_count>2</comment_count>
      <attachid>435912</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-19 15:59:48 -0700</bug_when>
    <thetext>Created attachment 435912
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1785957</commentid>
    <comment_count>3</comment_count>
      <attachid>436019</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-20 13:10:14 -0700</bug_when>
    <thetext>Created attachment 436019
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786079</commentid>
    <comment_count>4</comment_count>
      <attachid>436054</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-20 19:21:43 -0700</bug_when>
    <thetext>Created attachment 436054
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786646</commentid>
    <comment_count>5</comment_count>
      <attachid>436257</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-23 19:36:49 -0700</bug_when>
    <thetext>Created attachment 436257
WIP

I&apos;ve audited/edited 107/186 opcodes. However, lot of the hard ones left to do, like the ICs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787066</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-24 19:36:55 -0700</bug_when>
    <thetext>&lt;rdar://problem/82321772&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787248</commentid>
    <comment_count>7</comment_count>
      <attachid>436408</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-25 12:09:01 -0700</bug_when>
    <thetext>Created attachment 436408
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787407</commentid>
    <comment_count>8</comment_count>
      <attachid>436449</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-25 17:56:47 -0700</bug_when>
    <thetext>Created attachment 436449
WIP

Did scope operations, probably the biggest change of any bytecodes so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787413</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-25 18:14:11 -0700</bug_when>
    <thetext>Main things left before I can start compiling code are likely the two hardest parts:
- Call ICs
- SSI based ICs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787420</commentid>
    <comment_count>10</comment_count>
      <attachid>436452</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-25 19:00:12 -0700</bug_when>
    <thetext>Created attachment 436452
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787463</commentid>
    <comment_count>11</comment_count>
      <attachid>436469</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-25 22:02:03 -0700</bug_when>
    <thetext>Created attachment 436469
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787697</commentid>
    <comment_count>12</comment_count>
      <attachid>436537</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-26 11:33:09 -0700</bug_when>
    <thetext>Created attachment 436537
WIP

rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787885</commentid>
    <comment_count>13</comment_count>
      <attachid>436591</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-26 17:22:31 -0700</bug_when>
    <thetext>Created attachment 436591
WIP

Implemented call ICs. Now time to do SSI based ICs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787942</commentid>
    <comment_count>14</comment_count>
      <attachid>436606</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-26 20:49:20 -0700</bug_when>
    <thetext>Created attachment 436606
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788235</commentid>
    <comment_count>15</comment_count>
      <attachid>436692</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-27 16:58:07 -0700</bug_when>
    <thetext>Created attachment 436692
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788406</commentid>
    <comment_count>16</comment_count>
      <attachid>436747</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-29 13:11:07 -0700</bug_when>
    <thetext>Created attachment 436747
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788740</commentid>
    <comment_count>17</comment_count>
      <attachid>436831</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-30 17:17:34 -0700</bug_when>
    <thetext>Created attachment 436831
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788762</commentid>
    <comment_count>18</comment_count>
      <attachid>436839</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-30 18:30:33 -0700</bug_when>
    <thetext>Created attachment 436839
WIP

Inline caching opcodes are done. Just a few more left to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788765</commentid>
    <comment_count>19</comment_count>
      <attachid>436840</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-30 18:49:06 -0700</bug_when>
    <thetext>Created attachment 436840
WIP

Only 7 opcodes left to write.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789149</commentid>
    <comment_count>20</comment_count>
      <attachid>436962</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-31 16:22:52 -0700</bug_when>
    <thetext>Created attachment 436962
patch

All opcodes are done (for 64-bit).

Time to start trying to actually compile it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789194</commentid>
    <comment_count>21</comment_count>
      <attachid>436981</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-31 18:52:05 -0700</bug_when>
    <thetext>Created attachment 436981
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789195</commentid>
    <comment_count>22</comment_count>
      <attachid>436982</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-31 18:59:24 -0700</bug_when>
    <thetext>Created attachment 436982
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789196</commentid>
    <comment_count>23</comment_count>
      <attachid>436983</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-31 19:02:58 -0700</bug_when>
    <thetext>Created attachment 436983
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789400</commentid>
    <comment_count>24</comment_count>
      <attachid>437050</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-01 12:01:10 -0700</bug_when>
    <thetext>Created attachment 437050
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789416</commentid>
    <comment_count>25</comment_count>
      <attachid>437053</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-01 12:30:52 -0700</bug_when>
    <thetext>Created attachment 437053
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789425</commentid>
    <comment_count>26</comment_count>
      <attachid>437056</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-01 12:50:53 -0700</bug_when>
    <thetext>Created attachment 437056
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789438</commentid>
    <comment_count>27</comment_count>
      <attachid>437059</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-01 13:11:51 -0700</bug_when>
    <thetext>Created attachment 437059
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789442</commentid>
    <comment_count>28</comment_count>
      <attachid>437060</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-01 13:15:56 -0700</bug_when>
    <thetext>Created attachment 437060
WIP

Rebased. Time to start trying to compile this thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789525</commentid>
    <comment_count>29</comment_count>
      <attachid>437080</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-01 16:29:10 -0700</bug_when>
    <thetext>Created attachment 437080
WIP

Parts of it are starting to compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789573</commentid>
    <comment_count>30</comment_count>
      <attachid>437099</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-01 18:13:15 -0700</bug_when>
    <thetext>Created attachment 437099
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789591</commentid>
    <comment_count>31</comment_count>
      <attachid>437107</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-01 19:26:31 -0700</bug_when>
    <thetext>Created attachment 437107
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789592</commentid>
    <comment_count>32</comment_count>
      <attachid>437108</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-01 19:50:27 -0700</bug_when>
    <thetext>Created attachment 437108
WIP

debug now builds!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789997</commentid>
    <comment_count>33</comment_count>
      <attachid>437224</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-02 17:31:09 -0700</bug_when>
    <thetext>Created attachment 437224
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790010</commentid>
    <comment_count>34</comment_count>
      <attachid>437229</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-02 18:51:59 -0700</bug_when>
    <thetext>Created attachment 437229
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790247</commentid>
    <comment_count>35</comment_count>
      <attachid>437285</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-03 11:00:53 -0700</bug_when>
    <thetext>Created attachment 437285
WIP

Many tests pass now!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790262</commentid>
    <comment_count>36</comment_count>
      <attachid>437290</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-03 11:47:05 -0700</bug_when>
    <thetext>Created attachment 437290
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790272</commentid>
    <comment_count>37</comment_count>
      <attachid>437291</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-03 12:03:10 -0700</bug_when>
    <thetext>Created attachment 437291
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790342</commentid>
    <comment_count>38</comment_count>
      <attachid>437307</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-03 13:48:23 -0700</bug_when>
    <thetext>Created attachment 437307
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790428</commentid>
    <comment_count>39</comment_count>
      <attachid>437324</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-03 16:20:30 -0700</bug_when>
    <thetext>Created attachment 437324
WIP

An initial version of sharing appears to work, but slows down things. Time for the fun part, I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790457</commentid>
    <comment_count>40</comment_count>
      <attachid>437331</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-03 18:09:55 -0700</bug_when>
    <thetext>Created attachment 437331
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791231</commentid>
    <comment_count>41</comment_count>
      <attachid>437559</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-07 14:54:49 -0700</bug_when>
    <thetext>Created attachment 437559
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791337</commentid>
    <comment_count>42</comment_count>
      <attachid>437583</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-07 20:00:18 -0700</bug_when>
    <thetext>Created attachment 437583
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791342</commentid>
    <comment_count>43</comment_count>
      <attachid>437586</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-07 20:25:02 -0700</bug_when>
    <thetext>Created attachment 437586
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791356</commentid>
    <comment_count>44</comment_count>
      <attachid>437591</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-07 22:05:22 -0700</bug_when>
    <thetext>Created attachment 437591
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791358</commentid>
    <comment_count>45</comment_count>
      <attachid>437592</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-07 22:11:43 -0700</bug_when>
    <thetext>Created attachment 437592
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791565</commentid>
    <comment_count>46</comment_count>
      <attachid>437652</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-08 11:55:09 -0700</bug_when>
    <thetext>Created attachment 437652
WIP

Moved ValueProfiles to UnlinkedCodeBlock</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794307</commentid>
    <comment_count>47</comment_count>
      <attachid>438430</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-16 19:10:43 -0700</bug_when>
    <thetext>Created attachment 438430
WIP

rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794309</commentid>
    <comment_count>48</comment_count>
      <attachid>438431</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-16 19:18:57 -0700</bug_when>
    <thetext>Created attachment 438431
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794312</commentid>
    <comment_count>49</comment_count>
      <attachid>438433</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-16 19:29:37 -0700</bug_when>
    <thetext>Created attachment 438433
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794727</commentid>
    <comment_count>50</comment_count>
      <attachid>438541</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-17 19:16:03 -0700</bug_when>
    <thetext>Created attachment 438541
WIP

Resolved some perf issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794957</commentid>
    <comment_count>51</comment_count>
      <attachid>438629</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-19 19:22:44 -0700</bug_when>
    <thetext>Created attachment 438629
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794958</commentid>
    <comment_count>52</comment_count>
      <attachid>438630</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-19 19:31:02 -0700</bug_when>
    <thetext>Created attachment 438630
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795308</commentid>
    <comment_count>53</comment_count>
      <attachid>438736</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-20 15:00:46 -0700</bug_when>
    <thetext>Created attachment 438736
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795333</commentid>
    <comment_count>54</comment_count>
      <attachid>438747</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-20 16:08:46 -0700</bug_when>
    <thetext>Created attachment 438747
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795364</commentid>
    <comment_count>55</comment_count>
      <attachid>438757</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-20 17:11:38 -0700</bug_when>
    <thetext>Created attachment 438757
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795404</commentid>
    <comment_count>56</comment_count>
      <attachid>438774</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-20 21:31:25 -0700</bug_when>
    <thetext>Created attachment 438774
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795413</commentid>
    <comment_count>57</comment_count>
      <attachid>438777</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-20 22:40:23 -0700</bug_when>
    <thetext>Created attachment 438777
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795737</commentid>
    <comment_count>58</comment_count>
      <attachid>438851</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-21 13:48:59 -0700</bug_when>
    <thetext>Created attachment 438851
WIP

Release tests are passing on arm64</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795818</commentid>
    <comment_count>59</comment_count>
      <attachid>438872</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-21 15:44:53 -0700</bug_when>
    <thetext>Created attachment 438872
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795904</commentid>
    <comment_count>60</comment_count>
      <attachid>438901</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-21 19:02:24 -0700</bug_when>
    <thetext>Created attachment 438901
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795921</commentid>
    <comment_count>61</comment_count>
      <attachid>438907</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-21 19:39:36 -0700</bug_when>
    <thetext>Created attachment 438907
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796545</commentid>
    <comment_count>62</comment_count>
      <attachid>439056</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-23 10:12:57 -0700</bug_when>
    <thetext>Created attachment 439056
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796738</commentid>
    <comment_count>63</comment_count>
      <attachid>439110</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-23 17:44:06 -0700</bug_when>
    <thetext>Created attachment 439110
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796742</commentid>
    <comment_count>64</comment_count>
      <attachid>439111</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-23 17:56:15 -0700</bug_when>
    <thetext>Created attachment 439111
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796744</commentid>
    <comment_count>65</comment_count>
      <attachid>439113</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-23 18:09:42 -0700</bug_when>
    <thetext>Created attachment 439113
WIP

rebased

Things seem to now be working both on arm64 and x86_64</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796934</commentid>
    <comment_count>66</comment_count>
      <attachid>439158</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-24 10:16:19 -0700</bug_when>
    <thetext>Created attachment 439158
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796970</commentid>
    <comment_count>67</comment_count>
      <attachid>439173</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-24 11:18:38 -0700</bug_when>
    <thetext>Created attachment 439173
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796999</commentid>
    <comment_count>68</comment_count>
      <attachid>439182</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-24 12:16:27 -0700</bug_when>
    <thetext>Created attachment 439182
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797003</commentid>
    <comment_count>69</comment_count>
      <attachid>439185</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-24 12:58:00 -0700</bug_when>
    <thetext>Created attachment 439185
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797014</commentid>
    <comment_count>70</comment_count>
      <attachid>439189</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-24 13:32:15 -0700</bug_when>
    <thetext>Created attachment 439189
patch

Still tryna make some 32-bit code compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797016</commentid>
    <comment_count>71</comment_count>
      <attachid>439190</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-24 13:41:57 -0700</bug_when>
    <thetext>Created attachment 439190
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797024</commentid>
    <comment_count>72</comment_count>
      <attachid>439194</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-24 13:57:45 -0700</bug_when>
    <thetext>Created attachment 439194
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797038</commentid>
    <comment_count>73</comment_count>
      <attachid>439194</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-09-24 14:42:19 -0700</bug_when>
    <thetext>Comment on attachment 439194
patch

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

r=me
Saam and I discussed about ArithProfile changes. And we agree that we will revert these changes unless that gets a performance improvement because that change increases memory use.
And please fix GTK and WPE builders since they are x64. (And WinCairo and Win).

&gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:606
&gt; +    if (!canBeShared &amp;&amp; ASSERT_ENABLED) {
&gt; +        jit.addPtr(CCallHelpers::TrustedImm32(codeBlock-&gt;stackPointerOffset() * sizeof(Register)), GPRInfo::callFrameRegister, jit.scratchRegister());
&gt; +        auto ok = jit.branchPtr(CCallHelpers::Equal, CCallHelpers::stackPointerRegister, jit.scratchRegister());
&gt; +        jit.breakpoint();
&gt; +        ok.link(&amp;jit);

Nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797061</commentid>
    <comment_count>74</comment_count>
      <attachid>439203</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-24 15:59:11 -0700</bug_when>
    <thetext>Created attachment 439203
patch

Try to fix some of the builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797068</commentid>
    <comment_count>75</comment_count>
      <attachid>439204</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-24 16:14:03 -0700</bug_when>
    <thetext>Created attachment 439204
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797072</commentid>
    <comment_count>76</comment_count>
      <attachid>439206</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-24 16:22:44 -0700</bug_when>
    <thetext>Created attachment 439206
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797077</commentid>
    <comment_count>77</comment_count>
      <attachid>439207</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-24 16:37:19 -0700</bug_when>
    <thetext>Created attachment 439207
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797083</commentid>
    <comment_count>78</comment_count>
      <attachid>439211</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-24 16:52:20 -0700</bug_when>
    <thetext>Created attachment 439211
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797118</commentid>
    <comment_count>79</comment_count>
      <attachid>439230</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-24 19:40:23 -0700</bug_when>
    <thetext>Created attachment 439230
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797132</commentid>
    <comment_count>80</comment_count>
      <attachid>439237</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-24 23:02:11 -0700</bug_when>
    <thetext>Created attachment 439237
patch for landing

Hopefully this fixes the Windows bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797140</commentid>
    <comment_count>81</comment_count>
      <attachid>439240</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-24 23:29:39 -0700</bug_when>
    <thetext>Created attachment 439240
patch for landing

Hopefully windows is actually fixed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797213</commentid>
    <comment_count>82</comment_count>
      <attachid>439266</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-25 11:46:46 -0700</bug_when>
    <thetext>Created attachment 439266
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797235</commentid>
    <comment_count>83</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-25 14:55:49 -0700</bug_when>
    <thetext>Committed r283083 (242141@main): &lt;https://commits.webkit.org/242141@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 439266.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797293</commentid>
    <comment_count>84</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-09-26 11:14:16 -0700</bug_when>
    <thetext>This change broke ENABLE_JIT=OFF in general, because these get added to LLIntDesiredOffsets.h:

  OFFLINE_ASM_OFFSETOF(CodeBlock, m_jitData)
  OFFLINE_ASM_OFFSETOF(CodeBlock::JITData, m_jitConstantPool)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797296</commentid>
    <comment_count>85</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-09-26 13:59:48 -0700</bug_when>
    <thetext>Winodws ports are crashing. the backtrace is broken. This change has to be reverted.
https://ews-build.webkit.org/#/builders/10/builds/107549
https://build.webkit.org/#/builders/60/builds/2759</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797301</commentid>
    <comment_count>86</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2021-09-26 14:17:52 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 230806</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797356</commentid>
    <comment_count>87</comment_count>
      <attachid>439312</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-26 21:29:05 -0700</bug_when>
    <thetext>Created attachment 439312
test windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797380</commentid>
    <comment_count>88</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-27 00:33:14 -0700</bug_when>
    <thetext>So the windows bug turns out to be even worse than imagined.

My patch is calling loadPtr(regT0, xyz). MSVC is coercing the RegisterID of regT0 to nullptr instead of passing it to ImplicitAddress. So instead of calling loadPtr(ImplicitAddress) we&apos;re calling loadPtr(void*) with nullptr. Causing us to emit a constant load of nullptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797382</commentid>
    <comment_count>89</comment_count>
      <attachid>439326</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-27 00:44:00 -0700</bug_when>
    <thetext>Created attachment 439326
[fast-cq] patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797386</commentid>
    <comment_count>90</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-27 00:52:57 -0700</bug_when>
    <thetext>Committed r283102 (242160@main): &lt;https://commits.webkit.org/242160@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 439326.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797410</commentid>
    <comment_count>91</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-09-27 01:55:14 -0700</bug_when>
    <thetext>Committed r283103 (242161@main): &lt;https://commits.webkit.org/242161@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797411</commentid>
    <comment_count>92</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-09-27 02:07:24 -0700</bug_when>
    <thetext>Committed r283104 (242162@main): &lt;https://commits.webkit.org/242162@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797592</commentid>
    <comment_count>93</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2021-09-27 12:30:30 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 230854</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797616</commentid>
    <comment_count>94</comment_count>
      <attachid>439386</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-09-27 13:24:02 -0700</bug_when>
    <thetext>Created attachment 439386
[fast-cq] patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797658</commentid>
    <comment_count>95</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-27 14:53:51 -0700</bug_when>
    <thetext>Committed r283139 (242196@main): &lt;https://commits.webkit.org/242196@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 439386.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435829</attachid>
            <date>2021-08-18 19:39:43 -0700</date>
            <delta_ts>2021-08-19 15:59:48 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>14909</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDE2ICsyMzMsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBo
YXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFsbFZN
VHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGFkZGluZyBi
YWNrIHRoZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJuIHRydWUgaWYgYHJlZ2AgaXMgYHRo
aXNgIGFuZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAgICAgICBpZiAocmVnLmlzQ29uc3Rh
bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2VsbCgpOwotCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNU
ZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHJlZy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fbnVtVmFycyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw2ICsxNzUsNyBAQCBwdWJs
aWM6CiAKICAgICBjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25z
dGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBjb25z
dCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudElu
ZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29u
c3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3Jl
Zy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
KSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBAIC0y
MDcsNiArMjA4LDE0IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3Jp
cHRNb2RlKTsgfQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygp
IGNvbnN0OworICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5k
ZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIoKTsg
fQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbikKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gaW5z
dHJ1Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9u
c0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVn
aW4gJiYgaW5zdHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4gaW5z
dHJ1Y3Rpb24gLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CiAKICAgICB1bnNpZ25lZCBudW1D
YWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogICAgIHVu
c2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KQEAgLTQ1NSw2ICs0
NjQsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZz
ZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9m
ZnNldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91
dE9mTGluZUp1bXBPZmZzZXQob2Zmc2V0KTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcg
T3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQs
IGludD47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRh
ZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMSw5ICsxMDEsMTggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0
MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90Owog
ICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
T3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZzZXRJbk1ldGFkYXRhVGFibGUoT3Bjb2RlJiBvcGNv
ZGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRw
dHJfdCBiYXNlVHlwZU9mZnNldCA9IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6
Om9wY29kZUlEXSA6IG9mZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAg
cmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2Rl
Lm1fbWV0YWRhdGFJRDsKKyAgICB9CisKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNf
b2Zmc2V0VGFibGVFbnRyaWVzID0gTlVNQkVSX09GX0JZVEVDT0RFX1dJVEhfTUVUQURBVEEgKyAx
OyAvLyBvbmUgZXh0cmEgZW50cnkgZm9yIHRoZSAiZW5kIiBvZmZzZXQ7CiAKICAgICAvLyBOb3Qg
dG8gYnJlYWsgYWxpZ25tZW50IG9mIDMyYml0IG9mZnNldCB0YWJsZSwgd2Ugcm91bmQgdXAgc2l6
ZSB3aXRoIHNpemVvZihPZmZzZXQzMikuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL01ldGFkYXRhLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvTWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0
MiwyMiBAQCBjbGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJldHVy
biBpZiBlbXB0eT8KIAotICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcykK
KyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGdlbmVyYXRlT2Zmc2V0
T2YpCiAgICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAg
ICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4
fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVm
aXh9fTsiCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRG
aWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlLCBmYWxzZSl9XG4je3ByZWZpeH19OyIKICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9f
c30gbV8je2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmll
bGQudG9fcworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiI3twcmVmaXh9I3t0eXBlLnRv
X3N9IG1fI3tmaWVsZE5hbWV9OyIKKyAgICAgICAgICAgICAgICAgICAgaWYgZ2VuZXJhdGVPZmZz
ZXRPZgorICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArICJcbiIgKyAicHRy
ZGlmZl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkg
eyByZXR1cm4gT0ZGU0VUT0YoTWV0YWRhdGEsIG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAgICAgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdAogICAgICAgICAgICAg
ICAgIGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAg
ICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBm
aWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAgICAgICIsIEBmaWVsZHMsIHRydWUpCiAKICAgICAg
ICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAmJiAobm90IEBpbml0aWFs
aXplcnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyODEx
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03ODgsNiArNzg4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0UHV0
SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwog
CisgICAgICAgIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSlNW
YWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBp
c09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3Bl
cmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtMTA2OSw4ICsxMDcwLDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0
IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCiAgICAgICAgIC8vIEl0
IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3Qg
cGF0aC4KICAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0
aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAogICAgICAgICBJbnRlcnBy
ZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtMTA5OCw3ICsxMDk3LDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKICAgICAgICAg
SGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7Ci0gICAgICAg
IEhhc2hNYXA8dWludDY0X3QsIEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9jb3BpZWRBcml0aFByb2Zp
bGVzOwogCiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwogICAgICAgICBKdW1w
TGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTMs
MTMgKzUzLDM4IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IEoKIAog
QUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJl
Z2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAg
IGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICht
X3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMp
ID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMy
KCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdp
c3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNv
bnN0YW50KSB7CisgICAgICAgIC8vIE9PUFM6IGZpbmQgYSB3YXkgdG8gYXNzZXJ0IHRoYXQgYWxs
IGxpbmsgdGltZSBjb25zdGFudHMgYXJlIGNlbGxzLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzQ2VsbCgpOwogfQogCiBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lz
dGVyIHNyYykKIHsKICAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7Ci0gICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0gU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKKyAgICByZXR1cm4gbV91
bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAogQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmly
dHVhbFJlZ2lzdGVyIGVudHJ5KQpAQCAtMjAzLDcgKzIyOCw3IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Ns
b3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
VmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2Vs
bChyZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOwogfQogCkBAIC0yMjMsNyArMjQ4LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2lu
dCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1l
dGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlv
biwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwor
ICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9i
eXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIzMyw3ICsyNTgsNyBAQCBpbmxpbmUgdm9pZCBK
SVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xv
d1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVy
aW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMg
c2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAg
IG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
LCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBt
X2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMzExLDcgKzMzNiwx
MSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3Jj
KQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxs
KCkpLT5sZW5ndGgoKSA9PSAxOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlu
a1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjpl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVl
UmVncyB2YWx1ZSkKQEAgLTM4OCw4ICs0MTcsOCBAQCBpbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6
Y2hvb3NlQXJyYXlNb2RlCiAgICAgICAgIHJldHVybiBhcnJheU1vZGVzSW5jbHVkZUlnbm9yaW5n
VHlwZWRBcnJheXMoYXJyYXlNb2RlcywgY2FwYWJpbGl0eSk7CiAgICAgfTsKIAotICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgcHJvZmlsZS0+
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9jb2RlQmxvY2spOworICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9wcm9maWxlZENvZGVCbG9jay0+bV9sb2NrKTsKKyAgICBw
cm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBtX3Byb2ZpbGVkQ29kZUJs
b2NrKTsKICAgICBBcnJheU1vZGVzIGFycmF5TW9kZXMgPSBwcm9maWxlLT5vYnNlcnZlZEFycmF5
TW9kZXMobG9ja2VyKTsKICAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIERvdWJs
ZVNoYXBlKSkKICAgICAgICAgcmV0dXJuIEpJVERvdWJsZTsKQEAgLTQyMCw3ICs0NDksNyBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyCiBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkK
IHsKICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVn
KTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJs
ZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAg
ICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKQEAgLTUzNiw3ICs1NjUs
NyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0CiAKIGlubGluZSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcp
CiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICgh
aXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTU0Niw3ICs1NzUs
NyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAKIGlubGluZSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcs
IFJlZ2lzdGVySUQgdGFnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJl
ZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0Nv
bnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNl
CkBAIC01NTQsMTEgKzU4Myw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50
KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3Rh
bnQpCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKQEAgLTU4NCw3ICs2
MDgsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNT
RVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRl
eCBpcyBzZXQuCiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgICAgIC8vIE9PUFM6
IGhhbmRsZSBsaW5rIHRpbWUgY29uc3RhbnRzIGhlcmUuLi4KKyAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGdldENvbnN0YW50T3BlcmFuZChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVy
KCkpCiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUp
KSwgZHN0KTsKICAgICAgICAgZWxzZQpAQCAtNjA2LDExICs2MzEsNiBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQo
KSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
UmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsK
QEAgLTYzNSw3ICs2NTUsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2Nv
ZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkK
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTY3Nyw3
ICs2OTcsNyBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7CiAg
ICAgaWYgKHRhcmdldCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4gbV9jb2Rl
QmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOworICAgIHJldHVybiBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKIH0KIAog
QUxXQVlTX0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2Nv
cGUgYnl0ZWNvZGUpCkBAIC02ODYsMjMgKzcwNiwxMiBAQCBBTFdBWVNfSU5MSU5FIEdldFB1dElu
Zm8gSklUOjpjb3BpZWRHZXRQCiAgICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkR2V0UHV0SW5m
b3MuZmluZChrZXkpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdldFB1dEluZm9zLmVu
ZCgpKQogICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFsdWUpOworICAgIC8v
IE9PUFMKICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9nZXRQdXRJbmZvOwogICAgIG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwg
Z2V0UHV0SW5mby5vcGVyYW5kKCkpOwogICAgIHJldHVybiBnZXRQdXRJbmZvOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxl
IEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2
NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEp
IDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0g
ICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAg
aWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxl
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1f
Y29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBh
cml0aFByb2ZpbGU7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogQUxXQVlTX0lOTElORSBF
Q01BTW9kZSBKSVQ6OmVjbWFNb2RlKE9wIG9wKQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435912</attachid>
            <date>2021-08-19 15:59:48 -0700</date>
            <delta_ts>2021-08-20 13:10:14 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>30458</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9y
Q2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAyODExNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9p
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjggQEAgVmFsdWVQcm9maWxlKiB2YWx1
ZVByb2ZpbGVGb3JJbXBsKEJ5dGVjbwogICAgICAgICByZXR1cm4gJm1ldGFkYXRhLm1fcHJvZmls
ZTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgordWludHB0cl90IHZhbHVlUHJv
ZmlsZU9mZnNldEZvcih1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCit7CisgICAgVU5VU0VEX1BB
UkFNKGNoZWNrcG9pbnRJbmRleCk7CisgICAgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2Rl
SUQgPT0gb3BfaXRlcmF0b3Jfb3BlbikgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRl
eCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1cm4gQnl0
ZWNvZGU6Om9mZnNldE9mSXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck9wZW46OmdldE5leHQ6IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UHJvZmlsZSgpOwor
ICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisKKyAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRl
cmF0b3JfbmV4dCkgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAgICAg
ICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZz
ZXRPZk5leHRSZXN1bHRQcm9maWxlcigpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpn
ZXREb25lOiByZXR1cm4gQnl0ZWNvZGU6Om9mZnNldE9mRG9uZVByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZW
YWx1ZVByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSAKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpv
ZmZzZXRPZlByb2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVNZXRhZGF0
YT4KIGJvb2wgaGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFkYXRhLCB1
bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMywxNiAr
MjMzLDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMo
KSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3BvaW50cygpOwogCi0gICAgaW5s
aW5lIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAg
IC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYmFjayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdl
IHJldHVybiB0cnVlIGlmIGByZWdgIGlzIGB0aGlzYCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUu
Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAx
NDUKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0
Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHJlZykKICAgICB7CiAgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nh
c3Q8aW50PihtX251bVZhcnMpOwpAQCAtNDc4LDYgKzQ2OCw3IEBAIHB1YmxpYzoKIAogICAgIFN0
cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25l
ZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQo
bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
X251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNp
b24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw2ICsxNzUsNyBAQCBwdWJsaWM6CiAKICAg
ICBjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lz
dGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29u
c3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9
CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVy
biBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBAIC0yMDcsNiArMjA4
LDE0IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsg
fQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0Owor
ICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIoKTsgfQorICAgIHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAg
ICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25z
KCkuYXQoMCkucHRyKCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5z
dHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24g
LSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CiAKICAgICB1bnNpZ25lZCBudW1DYWxsZWVMb2Nh
bHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogICAgIHVuc2lnbmVkIG51
bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KQEAgLTQ1NSw2ICs0NjQsMTEgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1
Y3Rpb24ub2Zmc2V0KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25z
dCBJbnN0cnVjdGlvbiogcGMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1
bXBPZmZzZXQob2Zmc2V0KTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5l
SnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
TWV0YWRhdGFUYWJsZS5oCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
MSw5ICsxMDEsMTggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNp
emU7CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5n
IE9mZnNldDE2ID0gdWludDE2X3Q7CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgor
ICAgIHVpbnRwdHJfdCBvZmZzZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUp
CisgICAgeworICAgICAgICBBU1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJf
dCBiYXNlVHlwZU9mZnNldCA9IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9w
Y29kZUlEXSA6IG9mZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgcmV0
dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1f
bWV0YWRhdGFJRDsKKyAgICB9CisKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfb2Zm
c2V0VGFibGVFbnRyaWVzID0gTlVNQkVSX09GX0JZVEVDT0RFX1dJVEhfTUVUQURBVEEgKyAxOyAv
LyBvbmUgZXh0cmEgZW50cnkgZm9yIHRoZSAiZW5kIiBvZmZzZXQ7CiAKICAgICAvLyBOb3QgdG8g
YnJlYWsgYWxpZ25tZW50IG9mIDMyYml0IG9mZnNldCB0YWJsZSwgd2Ugcm91bmQgdXAgc2l6ZSB3
aXRoIHNpemVvZihPZmZzZXQzMikuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDYgQEAgdGVtcGxhdGU8dW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzQXJndW1lbgogc3RydWN0
IFZhbHVlUHJvZmlsZUJhc2UgewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVy
T2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBudW1iZXJPZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJP
ZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2Zp
bGVCYXNlKCkKQEAgLTEzNCw3ICsxMzMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAg
ICAgICAgIAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAg
IEVuY29kZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBT
cGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTU2LDYgKzE1NSw3
IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZh
bHVlUHJvZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+
IHsKICAgICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tl
dHM8MD4oKSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9
OwogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVl
UHJvZmlsZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRh
LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRh
dGEucmIJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0
b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0MiwyMiBAQCBjbGFzcyBN
ZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJldHVybiBpZiBlbXB0eT8KIAot
ICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcykKKyAgICAgICAgZGVmIGNv
bnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGdlbmVyYXRlT2Zmc2V0T2YpCiAgICAgICAgICAg
ICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAgICAgICBpZiB0eXBlLmtp
bmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29u
dmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCisgICAgICAg
ICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsg
JyAgICAnLCB0eXBlLCBmYWxzZSl9XG4je3ByZWZpeH19OyIKICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkLnRv
X3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmllbGQudG9fcworICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZE5h
bWV9OyIKKyAgICAgICAgICAgICAgICAgICAgaWYgZ2VuZXJhdGVPZmZzZXRPZgorICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArICJcbiIgKyAic3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsxLi5dfSgpIHsgcmV0dXJu
IE9GRlNFVE9GKE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisgICAgICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgICAgICByZXN1bHQKICAgICAgICAgICAgICAgICBlbmQK
ICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVuZAogCi0gICAgICAgIGZpZWxk
cyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcykKKyAgICAgICAgZmllbGRzID0g
Y29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzLCB0cnVlKQogCiAgICAgICAgIGluaXRz
ID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJzLmVt
cHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI4MTE3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Njc1LDE3ICs2NzUsMTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAog
dm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9jb2Rl
QmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOworICAgIC8vIE9PUFM6IE1heWJlIHRoaXMgc2hvdWxk
IGJlIGRvbmUgb24gdW5saW5rZWQgY29kZSBibG9jaz8KKyAgICBERkc6OkNhcGFiaWxpdHlMZXZl
bCBsZXZlbCA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOwogICAgIHN3
aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIERGRzo6Q2Fubm90Q29tcGlsZToKICAgICAgICAgbV9j
YW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVk
ID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZToKICAgICBjYXNlIERGRzo6Q2FuQ29t
cGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IHRydWU7Ci0gICAgICAg
IG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwogICAgICAgICBtX3Nob3VsZEVtaXRQ
cm9maWxpbmcgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtNzYxLDcg
Kzc2MCwxMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAKICAg
ICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAg
IEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxp
bmcoKSkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV9jb2RlQmxv
Y2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID4gMSkp
IHsKKyAgICAgICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jaywgcmVnVDIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qy
LCBDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBGaXhlZFZlY3Rv
cjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7
ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0
b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAg
ICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0
dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVlLgpAQCAtNzc3LDYgKzc3OSw3IEBA
IHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRp
ZgogICAgICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobV9jb2RlQmxvY2stPnZh
bHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAg
ICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdzLCBBZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNp
emVvZihWYWx1ZVByb2ZpbGUpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM3OCw4ICszNzgsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShNZXRhZGF0YSYsIEdQUlJlZyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7Cisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwg
SlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVS
ZWdzKTsKQEAgLTc4OCw2ICs3ODgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lk
IGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdp
c3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAg
ICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJv
b2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC0xMDUyLDExICsx
MDUzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAg
Ym9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAg
ICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1
cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0
aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9y
SW5saW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZh
bHVlIHByb2ZpbGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAg
IC8vIGluIHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBz
aG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEwNjksOCArMTA2OCw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUg
ZmFzdCBhbmQgc2xvdyBwYXRoLCB0aGVuIHlvdSB3YW50IHRvIHVzZSB0aGlzLgogICAgICAgICAv
LyBJdCB3aWxsIGdpdmUgdGhlIHNsb3cgcGF0aCB0aGUgc2FtZSB2YWx1ZSByZWFkIGJ5IHRoZSBm
YXN0IHBhdGguCiAgICAgICAgIEdldFB1dEluZm8gY29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2Nv
cGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLSAgICAgICAgQmluYXJ5
QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKICAgICAgICAgSW50
ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKQEAgLTEwOTgsNyArMTA5NSw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAg
ICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwotICAg
ICAgICBIYXNoTWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQ
cm9maWxlczsKIAogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAg
SnVtcExpc3QgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7CkBAIC0xMTMz
LDcgKzExMjksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBJbnN0
cnVjdGlvbiosIFVuaXF1ZVJlZjxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+PiBtX2luc3RydWN0aW9u
VG9NYXRoSUNHZW5lcmF0aW9uU3RhdGU7CiAKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVk
OwotICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wg
bV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3Qg
T3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25G
b3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3Rl
cigpLCByZWdUMCk7CiB9CiAKQEAgLTQwNCw3ICs0MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
dGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX25leHQpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKQEAgLTQ5
Myw3ICs0OTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAg
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5j
ZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CkBAIC01MTIsNyArNTEyLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgdmFsdWVH
UFIgfSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVS
ZWdzIHsgdmFsdWVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlz
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAy
ODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsMTMgKzUzLDM4IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IEoKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQo
KSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0
ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25z
dGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc0ludDMyKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25D
ZWxsKFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0
YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uOjpMaW5rVGltZUNvbnN0YW50KSB7CisgICAgICAgIC8vIE9PUFM6IGZpbmQgYSB3YXkgdG8g
YXNzZXJ0IHRoYXQgYWxsIGxpbmsgdGltZSBjb25zdGFudHMgYXJlIGNlbGxzLgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
Q2VsbCgpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7
Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKHNyYykgIT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsK
KyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAog
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lz
dGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQpAQCAtMjAzLDcgKzIyOCw3IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKIAogQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJs
b2NrLT5pc0tub3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMjMsNyArMjQ4LDcgQEAgQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNl
VG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2Rl
SW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xk
IHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAg
QVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0No
ZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlv
bkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJ
bmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2lu
dExhYmVscy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIzMyw3ICsyNTgsNyBA
QCBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25s
eSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5
dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNr
cG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAg
ICBhdXRvIGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpA
QCAtMzExLDcgKzMzNiwxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJz
dHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0
dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworICAgIGlmICghc3JjLmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0KIAogaW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQ
cm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKQEAgLTMzMyw3ICszNjIsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlw
ZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQog
ewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKICNlbmRpZgpAQCAtMzQxLDEyICszNzAsMTMgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8
c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVBy
b2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7
CisgICAgcHRyZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCku
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxC
eXRlY29kZT4obV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9m
ZnNldE9mRmlyc3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKG1f
bWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTM1NSw4
ICszODUsOCBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoCiAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJl
ZykpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEdQUlJlZyByZXN1bHRS
ZWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgbWV0YWRhdGEsIEdQUlJlZyByZXN1bHRS
ZWcpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0UmVnKSk7CiB9CkBAIC0zODgsOCArNDE4LDggQEAgaW5saW5lIEpJVEFycmF5TW9kZSBK
SVQ6OmNob29zZUFycmF5TW9kZQogICAgICAgICByZXR1cm4gYXJyYXlNb2Rlc0luY2x1ZGVJZ25v
cmluZ1R5cGVkQXJyYXlzKGFycmF5TW9kZXMsIGNhcGFiaWxpdHkpOwogICAgIH07CiAKLSAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgIHByb2Zp
bGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG1fY29kZUJsb2NrKTsKKyAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fcHJvZmlsZWRDb2RlQmxvY2stPm1fbG9jayk7Cisg
ICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9wcm9maWxlZENv
ZGVCbG9jayk7CiAgICAgQXJyYXlNb2RlcyBhcnJheU1vZGVzID0gcHJvZmlsZS0+b2JzZXJ2ZWRB
cnJheU1vZGVzKGxvY2tlcik7CiAgICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBE
b3VibGVTaGFwZSkpCiAgICAgICAgIHJldHVybiBKSVREb3VibGU7CkBAIC00MjAsNyArNDUwLDcg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQg
SklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFs
dWUpCiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVy
KHJlZyk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWRE
b3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC01MzYsNyAr
NTY2LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBp
ZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01NDYsNyAr
NTc2LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
cmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2Vs
bChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcu
aXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAg
ZWxzZQpAQCAtNTU0LDExICs1ODQsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25z
dGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlT
X0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNv
bnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01ODQs
NyArNjA5LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAg
IEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
SW5kZXggaXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgICAgICAvLyBP
T1BTOiBoYW5kbGUgbGluayB0aW1lIGNvbnN0YW50cyBoZXJlLi4uCisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBnZXRDb25zdGFudE9wZXJhbmQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051
bWJlcigpKQogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlKSksIGRzdCk7CiAgICAgICAgIGVsc2UKQEAgLTYwNiwxMSArNjMyLDYgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENv
bnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0
YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0
KSk7CkBAIC02MzUsNyArNjU2LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93Q2FzZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJl
ZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02
NzcsNyArNjk4LDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAog
ewogICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKKyAgICByZXR1cm4g
bV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7CiB9
CiAKIEFMV0FZU19JTkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRU
b1Njb3BlIGJ5dGVjb2RlKQpAQCAtNjg2LDIzICs3MDcsMTIgQEAgQUxXQVlTX0lOTElORSBHZXRQ
dXRJbmZvIEpJVDo6Y29waWVkR2V0UAogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdldFB1
dEluZm9zLmZpbmQoa2V5KTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZv
cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsKKyAg
ICAvLyBPT1BTCiAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKICAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChr
ZXksIGdldFB1dEluZm8ub3BlcmFuZCgpKTsKICAgICByZXR1cm4gZ2V0UHV0SW5mbzsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJv
ZmlsZSBKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1
aW50NjRfdCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkg
KyAxKSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQp
OwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwot
ICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAg
IHJldHVybiBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJv
ZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAg
ICBtX2NvcGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1
cm4gYXJpdGhQcm9maWxlOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIEFMV0FZU19JTkxJ
TkUgRUNNQU1vZGUgSklUOjplY21hTW9kZShPcCBvcCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODExNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFs
KGNvbnN0IEluc3RyCiAgICAgICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5
VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgfQogCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBKSVQ6
OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdAogICAgICAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7CiAgICAgICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAg
LTIwNiw3ICsyMDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0
CiAgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNTAs
NyArMjUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCkBAIC0xMTczLDcgKzExNzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lk
KGNvbnN0IEluCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMjQyLDcgKzEyNDIsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEyODYsNyArMTI4
Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIApAQCAtMTMyMCw3ICsxMzIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNv
bnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMzQ2LDcgKzEzNDYsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTM4OSw3
ICsxMzg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCkBAIC0xNDc0LDcgKzE0NzQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpCiAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRo
VGhpc09wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIApAQCAtMjM3NSw3ICsyMzc1LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjg5OCw3ICsyODk4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAg
LTI5NjQsNyArMjk2NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChj
b24KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRl
cm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0zMTE1LDcg
KzMxMTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoCiAKICAg
ICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436019</attachid>
            <date>2021-08-20 13:10:14 -0700</date>
            <delta_ts>2021-08-20 19:21:43 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>34100</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjgx
MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzMsMTYgKzIzMyw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3Rh
bGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJl
YWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rl
ciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5nIGJhY2sgdGhl
IG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBgdGhpc2AgYW5k
IHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0KLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFy
eVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gcmVn
Lm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAgLTQ3OCw2ICs0Njgs
NyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgbmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
cik7CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVz
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJv
ZmlsZXMpOyB9CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9udW1QYXJhbWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNlSklU
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNiAr
MTc1LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVu
a25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJz
OyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVn
LnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3Rh
bnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0
ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
Z2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFu
dFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4
ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b247IH0KIApAQCAtMjA3LDYgKzIwOCwxNCBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRN
b2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlw
dE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBp
bnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25B
dChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChp
bmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlv
bnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRv
KiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0
aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGlu
c3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAg
ICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQogCiAgICAg
dW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2Nh
bHM7IH0KICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9
CkBAIC00MTAsNiArNDE5LDkgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1
Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3M7CiAKKyAgICAvLyBPT1BTOiBiaW5kIGEgYmV0
dGVyIHBsYWNlIHRvIHN0b3JlIHRoaXMgc3R1ZmY/CisgICAgVmVjdG9yPEJpbmFyeUFyaXRoUHJv
ZmlsZT4gbV9iaW5hcnlBcml0aFByb2ZpbGVzOworICAgIFZlY3RvcjxVbmFyeUFyaXRoUHJvZmls
ZT4gbV91bmFyeUFyaXRoUHJvZmlsZXM7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6
OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CkBAIC00NTUsNiArNDY3LDI0IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uLm9m
ZnNldCgpKTsKICAgICB9CisgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29uc3QgSW5zdHJ1
Y3Rpb24qIHBjKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSB0aGlz
LT5ieXRlY29kZU9mZnNldChwYyk7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0
KG9mZnNldCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5QXJpdGhQcm9maWxlcy5z
aXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQ
cm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICB1bnNpZ25lZCBh
ZGRVbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBt
X3VuYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVz
LmFwcGVuZChCaW5hcnlBcml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQogCiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1h
cDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2
aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
TWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOSArMTAxLDE4IEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiBzX29mZnNldDE2VGFibGVTaXplOwogICAgIH0KIAorCiAgICAg
dXNpbmcgT2Zmc2V0MzIgPSB1aW50MzJfdDsKICAgICB1c2luZyBPZmZzZXQxNiA9IHVpbnQxNl90
OwogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZT4KKyAgICB1aW50cHRyX3Qgb2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1faXNGaW5hbGl6ZWQpOworICAgICAgICB1aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQgPSBt
X2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bjb2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRUYWJs
ZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07CisgICAgICAgIHJldHVybiBiYXNlVHlwZU9mZnNldCAr
IHNpemVvZihPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7CisgICAgfQor
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX29mZnNldFRhYmxlRW50cmllcyA9IE5V
TUJFUl9PRl9CWVRFQ09ERV9XSVRIX01FVEFEQVRBICsgMTsgLy8gb25lIGV4dHJhIGVudHJ5IGZv
ciB0aGUgImVuZCIgb2Zmc2V0OwogCiAgICAgLy8gTm90IHRvIGJyZWFrIGFsaWdubWVudCBvZiAz
MmJpdCBvZmZzZXQgdGFibGUsIHdlIHJvdW5kIHVwIHNpemUgd2l0aCBzaXplb2YoT2Zmc2V0MzIp
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUu
aAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zh
bHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBAIHRlbXBsYXRlPHVu
c2lnbmVkIG51bWJlck9mQnVja2V0c0FyZ3VtZW4KIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mQnVja2V0cyA9IG51bWJlck9m
QnVja2V0c0FyZ3VtZW50OwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZT
cGVjRmFpbEJ1Y2tldHMgPSAxOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYnVja2V0
SW5kZXhNYXNrID0gbnVtYmVyT2ZCdWNrZXRzIC0gMTsKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIHRvdGFsTnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRzICsgbnVtYmVyT2ZT
cGVjRmFpbEJ1Y2tldHM7CiAgICAgCiAgICAgVmFsdWVQcm9maWxlQmFzZSgpCkBAIC0xMzQsNyAr
MTMzLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICAKICAgICAgICAgcmV0
dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAgICBFbmNvZGVkSlNWYWx1ZSBtX2J1
Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVk
aWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE1Niw2ICsxNTUsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9m
aWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGUgOiBwdWJsaWMg
VmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPiB7CiAgICAgVmFsdWVQcm9maWxl
KCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+KCkgeyB9CisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQogfTsKIAogc3RydWN0IFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk4
LDcgKzE1OTgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFVuYXJ5CiAg
ICAgICAgIGVtaXRVbmFyeU9wPE9wTm90Pihkc3QsIHNyYyk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywg
dHlwZSk7CisgICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0eXBlLCBtX2Nv
ZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2Ugb3BfYml0bm90OgogICAgICAgICBlbWl0VW5hcnlPcDxPcEJpdG5vdD4oZHN0LCBzcmMpOwpA
QCAtMTY5NiwxMyArMTY5NiwxMyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFR5cGVPCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5jKFJlZ2lzdGVy
SUQqIHNyY0RzdCkKIHsKLSAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNEc3QpOworICAgIE9wSW5j
OjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkp
OwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0RGVjKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcERlYzo6ZW1pdCh0aGlzLCBz
cmNEc3QpOworICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFkZFVu
YXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjgyLDcgKzY4Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmVnaXN0ZXJJRCo+CiAgICAgICAgIGVt
aXRCaW5hcnlPcChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlZ2lzdGVySUQq
IHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcykKICAgICAgICAgewotICAgICAgICAgICAgQmluYXJ5
T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcyk7CisgICAgICAgICAgICBCaW5h
cnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzLCBtX2NvZGVCbG9jay0+YWRk
QmluYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICAgICAgcmV0dXJuIGRzdDsKICAgICAgICAg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJ
KHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0
YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0MiwyMiBAQCBjbGFzcyBNZXRhZGF0
YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJldHVybiBpZiBlbXB0eT8KIAotICAgICAg
ICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcykKKyAgICAgICAgZGVmIGNvbnZlcnRG
aWVsZHMocHJlZml4LCBmaWVsZHMsIGdlbmVyYXRlT2Zmc2V0T2YpCiAgICAgICAgICAgICBmaWVs
ZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/
IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZp
ZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCisgICAgICAgICAgICAg
ICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAn
LCB0eXBlLCBmYWxzZSl9XG4je3ByZWZpeH19OyIKICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkLnRvX3N9OyIK
KyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmllbGQudG9fcworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZE5hbWV9OyIK
KyAgICAgICAgICAgICAgICAgICAgaWYgZ2VuZXJhdGVPZmZzZXRPZgorICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHJlc3VsdCArICJcbiIgKyAic3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsxLi5dfSgpIHsgcmV0dXJuIE9GRlNF
VE9GKE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisgICAgICAgICAgICAgICAgICAgIGVu
ZAorICAgICAgICAgICAgICAgICAgICByZXN1bHQKICAgICAgICAgICAgICAgICBlbmQKICAgICAg
ICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVuZAogCi0gICAgICAgIGZpZWxkcyA9IGNv
bnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcykKKyAgICAgICAgZmllbGRzID0gY29udmVy
dEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzLCB0cnVlKQogCiAgICAgICAgIGluaXRzID0gbmls
CiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJzLmVtcHR5PykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI4MTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjc1LDE3
ICs2NzUsMTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogdm9pZCBK
SVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQg
ZWZmb3J0KQogewotICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2st
PmNhcGFiaWxpdHlMZXZlbCgpOworICAgIC8vIE9PUFM6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGRv
bmUgb24gdW5saW5rZWQgY29kZSBibG9jaz8KKyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZl
bCA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOwogICAgIHN3aXRjaCAo
bGV2ZWwpIHsKICAgICBjYXNlIERGRzo6Q2Fubm90Q29tcGlsZToKICAgICAgICAgbV9jYW5CZU9w
dGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFs
c2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFu
ZElubGluZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IHRydWU7Ci0gICAgICAgIG1fY2Fu
QmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxp
bmcgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtNzYxLDcgKzc2MCwx
MCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAKICAgICBpZiAo
bV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VS
VCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
eworICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV9jb2RlQmxvY2stPmlz
Q29uc3RydWN0b3IoKSB8fCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID4gMSkpIHsKKyAg
ICAgICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jaywgcmVnVDIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBDb2Rl
QmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBGaXhlZFZlY3Rvcjo6b2Zm
c2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJn
dW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJn
dW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRo
ZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAg
ICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkg
d2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVlLgpAQCAtNzc3LDYgKzc3OSw3IEBAIHZvaWQg
SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgogICAg
ICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobV9jb2RlQmxvY2stPnZhbHVlUHJv
ZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAg
c3RvcmVWYWx1ZShyZXN1bHRSZWdzLCBBZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihW
YWx1ZVByb2ZpbGUpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM3OCw4ICszNzgsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRh
ZGF0YSYsIEdQUlJlZyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lk
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Y29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRl
Y29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgSlNWYWx1
ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVl
UHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRh
dGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsK
QEAgLTc4OCw2ICs3ODgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQ
dXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7
CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBK
U1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29s
IGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNP
cGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC0xMDUyLDExICsxMDUzLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBj
YW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9v
bCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklu
bGluZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9z
aG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVk
KCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5l
ZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHBy
b2ZpbGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGlu
IHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRF
bWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEwNjksOCArMTA2OCw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAvLyBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFzdCBh
bmQgc2xvdyBwYXRoLCB0aGVuIHlvdSB3YW50IHRvIHVzZSB0aGlzLgogICAgICAgICAvLyBJdCB3
aWxsIGdpdmUgdGhlIHNsb3cgcGF0aCB0aGUgc2FtZSB2YWx1ZSByZWFkIGJ5IHRoZSBmYXN0IHBh
dGguCiAgICAgICAgIEdldFB1dEluZm8gY29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUpOwot
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLSAgICAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKICAgICAgICAgSW50ZXJwcmV0
ZXIqIG1faW50ZXJwcmV0ZXI7CiAKQEAgLTEwOTgsNyArMTA5NSw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCiAgICAgICAgIEhh
c2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwotICAgICAgICBI
YXNoTWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQcm9maWxl
czsKIAogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExp
c3QgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7CkBAIC0xMTMzLDcgKzEx
MjksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBJbnN0cnVjdGlv
biosIFVuaXF1ZVJlZjxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+PiBtX2luc3RydWN0aW9uVG9NYXRo
SUNHZW5lcmF0aW9uU3RhdGU7CiAKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwotICAg
ICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91
bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShy
ZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5
dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0
ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCBy
ZWdUMCk7CiB9CiAKQEAgLTQwNCw3ICs0MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRv
cl9vcGVuKGNvbnN0IEluCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25leHQpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKQEAgLTQ5Myw3ICs0
OTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNW
YWx1ZVJlZ3MgeyBkb25lR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQoKTsKICAgICB9CkBAIC01MTIsNyArNTEyLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSk7
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsg
dmFsdWVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92
YWx1ZSwgdmFsdWVHUFIpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODExNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMsMTMgKzUzLDM4IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IEoKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUo
VmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNf
SU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3Jj
KQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc0ludDMyKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZp
cnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpM
aW5rVGltZUNvbnN0YW50KSB7CisgICAgICAgIC8vIE9PUFM6IGZpbmQgYSB3YXkgdG8gYXNzZXJ0
IHRoYXQgYWxsIGxpbmsgdGltZSBjb25zdGFudHMgYXJlIGNlbGxzLgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzQ2VsbCgp
OwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7Ci0gICAg
cmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgIFJFTEVBU0VfQVNTRVJU
KG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNy
YykgIT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKKyAgICBy
ZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAogQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQg
ZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQpAQCAtMjAzLDcgKzIyOCw3IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5p
c0tub3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMjMsNyArMjQ4LDcgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0
Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgs
ICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9p
bnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVs
cy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIzMyw3ICsyNTgsNyBAQCBpbmxp
bmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
SW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRz
KCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRv
IGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMzEx
LDcgKzMzNiwxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAK
IEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25z
dGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0KIAogaW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxl
LCBKU1ZhbHVlUmVncyB2YWx1ZSkKQEAgLTMzMyw3ICszNjIsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6
TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNl
bmRpZgpAQCAtMzQxLDEyICszNzAsMTMgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjpp
c19zYW1lPGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlBy
b2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwg
SlNWYWx1ZVJlZ3MgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQog
ICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVG
b3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7CisgICAg
cHRyZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29k
ZT4obV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9m
Rmlyc3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKG1fbWV0YWRh
dGFHUFIsIG9mZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTM1NSw4ICszODUs
OCBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoCiAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEdQUlJlZyByZXN1bHRSZWcpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgbWV0YWRhdGEsIEdQUlJlZyByZXN1bHRSZWcpCiB7
CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0
UmVnKSk7CiB9CkBAIC0zODgsOCArNDE4LDggQEAgaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNo
b29zZUFycmF5TW9kZQogICAgICAgICByZXR1cm4gYXJyYXlNb2Rlc0luY2x1ZGVJZ25vcmluZ1R5
cGVkQXJyYXlzKGFycmF5TW9kZXMsIGNhcGFiaWxpdHkpOwogICAgIH07CiAKLSAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgIHByb2ZpbGUtPmNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG1fY29kZUJsb2NrKTsKKyAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fcHJvZmlsZWRDb2RlQmxvY2stPm1fbG9jayk7CisgICAgcHJv
ZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgQXJyYXlNb2RlcyBhcnJheU1vZGVzID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1v
ZGVzKGxvY2tlcik7CiAgICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBEb3VibGVT
aGFwZSkpCiAgICAgICAgIHJldHVybiBKSVREb3VibGU7CkBAIC00MjAsNyArNDUwLDcgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7
CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUo
VHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC01MzYsNyArNTY2LDcg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQog
ewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlz
S25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01NDYsNyArNTc2LDcg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBS
ZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcp
KSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpA
QCAtNTU0LDExICs1ODQsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFu
dEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50
KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01ODQsNyArNjA5
LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VS
VChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgICAgICAvLyBPT1BTOiBo
YW5kbGUgbGluayB0aW1lIGNvbnN0YW50cyBoZXJlLi4uCisgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBnZXRDb25zdGFudE9wZXJhbmQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigp
KQogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSks
IGRzdCk7CiAgICAgICAgIGVsc2UKQEAgLTYwNiwxMSArNjMyLDYgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
MiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkg
JiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJl
Z2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBA
IC02MzUsNyArNjU2LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
UmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2Rl
QmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02NzcsNyAr
Njk4LDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewogICAg
IGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29kZUJs
b2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKKyAgICByZXR1cm4gbV91bmxp
bmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7CiB9CiAKIEFM
V0FZU19JTkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3Bl
IGJ5dGVjb2RlKQpAQCAtNjg2LDIzICs3MDcsMTIgQEAgQUxXQVlTX0lOTElORSBHZXRQdXRJbmZv
IEpJVDo6Y29waWVkR2V0UAogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdldFB1dEluZm9z
LmZpbmQoa2V5KTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5lbmQo
KSkKICAgICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAvLyBP
T1BTCiAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fZ2V0UHV0SW5mbzsKICAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdl
dFB1dEluZm8ub3BlcmFuZCgpKTsKICAgICByZXR1cm4gZ2V0UHV0SW5mbzsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBK
SVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRf
dCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8
PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAg
IGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlm
IChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVy
biBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2Nv
cGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJp
dGhQcm9maWxlOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIEFMV0FZU19JTkxJTkUgRUNN
QU1vZGUgSklUOjplY21hTW9kZShPcCBvcCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODExNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODEsNyArODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RyCiAgICAgICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiAgICAgfQogCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBKSVQ6OmdlbmVy
YXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdAogICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7CiAgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1
cm5WYWx1ZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAgLTIwNiw3
ICsyMDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAg
ICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNTAsNyArMjUw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBA
IC0xMTczLDcgKzExNzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMjQyLDcgKzEyNDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEyODYsNyArMTI4Niw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcs
IHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIApA
QCAtMTMyMCw3ICsxMzIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydQogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOwogfQogCkBAIC0xMzQ2LDcgKzEzNDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTM4OSw3ICsxMzg5
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywg
cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBA
IC0xNDc0LDcgKzE0NzQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpCiAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09w
dGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIApAQCAtMjM3NSw3ICsyMzc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdU
MCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQpAQCAtMjg5OCw3ICsyODk4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1l
bnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6
c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSks
IHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5NjQs
NyArMjk2NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb24KICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZp
ZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0zMTE1LDcgKzMxMTUs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoCiAKICAgICBkb25l
Q2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436054</attachid>
            <date>2021-08-20 19:21:43 -0700</date>
            <delta_ts>2021-08-23 19:36:49 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>49766</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNiArNDY3LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUg
TElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7
IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRh
Lm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRl
Y29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5l
IExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7
IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRh
Lm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVj
b2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygp
OwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkg
ewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpA
QCAtNTI5LDE0ICs1NDIsMTQgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0
ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQot
ICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTkso
T3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19X
SVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5l
Z2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAg
ICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTkso
T3BKbmVxUHRyKQogCkBAIC0zMzE4LDEzICszMzMxLDEzIEBAIEJpbmFyeUFyaXRoUHJvZmlsZSog
Q29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAg
ICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wQWRkPigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfbXVsOgotICAgICAgICBy
ZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BTdWI+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kaXY6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzMzYsMTEg
KzMzNDksMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0aAogewog
ICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAg
ICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9w
SW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMt
PmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bf
ZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzMywxNiArMjMzLDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFz
SW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRy
YXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJl
Z2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYmFj
ayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlzIGB0aGlz
YCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50
KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKLQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVt
cG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAgIHJldHVy
biByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAtNDc4LDYg
KzQ2OCw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJv
ZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFs
dWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxl
cygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgp
ID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1
c2VKSVQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
NSw2ICsxNzUsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdp
c3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
c1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBj
b25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRS
ZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2Nv
bnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBjb25z
dCBGaXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjsgfQogCkBAIC0yMDcsNiArMjA4LDE0IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNj
cmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2Vy
U2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucygpIGNvbnN0OworICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygp
LmF0KGluZGV4KS5wdHIoKTsgfQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3Ry
dWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgICAgIGNvbnN0
IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rp
b24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24g
Pj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNFbmQpOwor
ICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CiAK
ICAgICB1bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxl
ZUxvY2FsczsgfQogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZh
cnM7IH0KQEAgLTQxMCw2ICs0MTksOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bnN0cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVjdGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzczsKIAorICAgIC8vIE9PUFM6IGJpbmQg
YSBiZXR0ZXIgcGxhY2UgdG8gc3RvcmUgdGhpcyBzdHVmZj8KKyAgICBWZWN0b3I8QmluYXJ5QXJp
dGhQcm9maWxlPiBtX2JpbmFyeUFyaXRoUHJvZmlsZXM7CisgICAgVmVjdG9yPFVuYXJ5QXJpdGhQ
cm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAg
IERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKQEAgLTQ1NSw2ICs0NjcsMjggQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rp
b24ub2Zmc2V0KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJ
bnN0cnVjdGlvbiogcGMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBP
ZmZzZXQob2Zmc2V0KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2Zp
bGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9iaW5hcnlBcml0aFByb2Zp
bGVzLnNpemUoKTsKKyAgICAgICAgbV9iaW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5hcnlB
cml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdW5z
aWduZWQgYWRkVW5hcnlBcml0aFByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVz
dWx0ID0gbV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX3VuYXJ5QXJpdGhQ
cm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxl
KHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVu
YXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBt
X3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQogCiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGlu
ZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDEsOSArMTAxLDE4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzX29mZnNldDE2VGFibGVT
aXplOwogICAgIH0KIAorCiAgICAgdXNpbmcgT2Zmc2V0MzIgPSB1aW50MzJfdDsKICAgICB1c2lu
ZyBPZmZzZXQxNiA9IHVpbnQxNl90OwogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZT4K
KyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYgb3Bjb2Rl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQpOworICAgICAgICB1aW50cHRy
X3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bjb2RlOjpv
cGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07CisgICAgICAgIHJl
dHVybiBiYXNlVHlwZU9mZnNldCArIHNpemVvZihPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5t
X21ldGFkYXRhSUQ7CisgICAgfQorCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX29m
ZnNldFRhYmxlRW50cmllcyA9IE5VTUJFUl9PRl9CWVRFQ09ERV9XSVRIX01FVEFEQVRBICsgMTsg
Ly8gb25lIGV4dHJhIGVudHJ5IGZvciB0aGUgImVuZCIgb2Zmc2V0OwogCiAgICAgLy8gTm90IHRv
IGJyZWFrIGFsaWdubWVudCBvZiAzMmJpdCBvZmZzZXQgdGFibGUsIHdlIHJvdW5kIHVwIHNpemUg
d2l0aCBzaXplb2YoT2Zmc2V0MzIpLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw2IEBAIHRlbXBsYXRlPHVuc2lnbmVkIG51bWJlck9mQnVja2V0c0FyZ3VtZW4KIHN0cnVj
dCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJl
ck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0c0FyZ3VtZW50OwogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHMgPSAxOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgYnVja2V0SW5kZXhNYXNrID0gbnVtYmVyT2ZCdWNrZXRzIC0gMTsKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVy
T2ZCdWNrZXRzICsgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHM7CiAgICAgCiAgICAgVmFsdWVQcm9m
aWxlQmFzZSgpCkBAIC0xMzQsNyArMTMzLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ugewog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAg
ICBFbmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAg
U3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE1Niw2ICsxNTUs
NyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBW
YWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czww
PiB7CiAgICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNr
ZXRzPDA+KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQog
fTsKIAogc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1
ZVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTk4LDcgKzE1OTgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFVuYXJ5CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wTm90Pihkc3QsIHNyYyk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICBPcE5lZ2F0ZTo6
ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CisgICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMs
IGRzdCwgc3JjLCB0eXBlLCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfYml0bm90OgogICAgICAgICBlbWl0VW5hcnlPcDxP
cEJpdG5vdD4oZHN0LCBzcmMpOwpAQCAtMTY5NiwxMyArMTY5NiwxMyBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFR5cGVPCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0SW5jKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcEluYzo6ZW1pdCh0aGlz
LCBzcmNEc3QpOworICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFk
ZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVjKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAg
ICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QpOworICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0Rz
dCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNE
c3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNjgyLDcgKzY4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmVn
aXN0ZXJJRCo+CiAgICAgICAgIGVtaXRCaW5hcnlPcChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcykKICAgICAgICAg
ewotICAgICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBl
cyk7CisgICAgICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5
cGVzLCBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICAgICAg
cmV0dXJuIGRzdDsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL01ldGFkYXRhLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvTWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0
MiwyMiBAQCBjbGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJldHVy
biBpZiBlbXB0eT8KIAotICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcykK
KyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGdlbmVyYXRlT2Zmc2V0
T2YpCiAgICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAg
ICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4
fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVm
aXh9fTsiCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRG
aWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlLCBmYWxzZSl9XG4je3ByZWZpeH19OyIKICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9f
c30gbV8je2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmll
bGQudG9fcworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiI3twcmVmaXh9I3t0eXBlLnRv
X3N9IG1fI3tmaWVsZE5hbWV9OyIKKyAgICAgICAgICAgICAgICAgICAgaWYgZ2VuZXJhdGVPZmZz
ZXRPZgorICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArICJcbiIgKyAic3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsx
Li5dfSgpIHsgcmV0dXJuIE9GRlNFVE9GKE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisg
ICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICByZXN1bHQKICAgICAg
ICAgICAgICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVuZAog
Ci0gICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcykKKyAg
ICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzLCB0cnVlKQog
CiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBA
aW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJl
dmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjc1LDE3ICs2NzUsMTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
U2xvd0Nhc2VzKCkKIAogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmco
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6Q2FwYWJpbGl0eUxldmVs
IGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOworICAgIC8vIE9PUFM6IE1h
eWJlIHRoaXMgc2hvdWxkIGJlIGRvbmUgb24gdW5saW5rZWQgY29kZSBibG9jaz8KKyAgICBERkc6
OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmNhcGFiaWxpdHlM
ZXZlbCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIERGRzo6Q2Fubm90Q29tcGls
ZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2NhbkJlT3B0
aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9
IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZToKICAgICBj
YXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9
IHRydWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwogICAgICAg
ICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBkZWZh
dWx0OgpAQCAtNzYxLDcgKzc2MCwxMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluCiAKICAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygp
ICYmICghbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpID4gMSkpIHsKKyAgICAgICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDIpOworICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVz
KCkgKyBGaXhlZFZlY3Rvcjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlz
IGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxp
bmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBi
dXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVlLgpAQCAt
Nzc3LDYgKzc3OSw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4K
ICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRh
Z0dQUigpKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSwgcmVzdWx0UmVn
cyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdzLCBBZGRyZXNzKHJlZ1Qy
LCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkBAIC05OTAsNyArOTkzLDcgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAg
ICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRU
eXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAg
IG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0
eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29kZSA9IGFkb3B0UmVm
KCpuZXcgQmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2spKTsKIAogICAgIGlm
IChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQg
Y29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFi
bGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9y
eSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKQEAgLTEwMDUsNiArMTAwOCw4IEBAIENvbXBpbGF0
aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVu
TWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKKyAgICBtX2ppdENvZGUtPmFkb3B0TWF0
aElDcyhtX21hdGhJQ3MpOworCiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9G
aXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzgsOCArMzc4LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7CiAgICAgICAgIHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRh
dGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNv
bnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVS
ZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBA
IC03ODgsNiArNzg4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0UHV0
SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwog
CisgICAgICAgIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSlNW
YWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBp
c09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3Bl
cmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtMTA1MiwxMSArMTA1Myw5IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2Fu
QmVPcHRpbWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wg
Y2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxp
bmVkOyB9CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hv
dWxkRW1pdFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgp
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQo
KSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9m
aWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3
aGljaCBjYXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1p
dFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xMDY5LDggKzEwNjgsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5k
IHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KICAgICAgICAgLy8gSXQgd2ls
bCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRo
LgogICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCiAgICAgICAgIEludGVycHJldGVy
KiBtX2ludGVycHJldGVyOwogCkBAIC0xMDk4LDcgKzEwOTUsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNo
TWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFz
aE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7
CiAKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0
IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwpAQCAtMTEzMywxMSArMTEy
OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBJbnN0cnVjdGlv
biosIFVuaXF1ZVJlZjxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+PiBtX2luc3RydWN0aW9uVG9NYXRo
SUNHZW5lcmF0aW9uU3RhdGU7CiAKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwotICAg
ICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91
bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleDsKIAotICAgICAgICBSZWZQdHI8RGlyZWN0SklUQ29kZT4gbV9qaXRDb2RlOwor
ICAgICAgICBNYXRoSUNIb2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8QmFzZWxpbmVK
SVRDb2RlPiBtX2ppdENvZGU7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQg
SklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNDA0LDcg
KzQwNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
Z1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CiAKICAg
ICBmYXN0Q2FzZS5saW5rKHRoaXMpOwpAQCAtNDkzLDcgKzQ5Myw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsg
ZG9uZUdQUiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rv
bmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0K
QEAgLTUxMiw3ICs1MTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0
IEluCiAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1f
Z2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CiAKICAg
ICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmgJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNiArMjQ4LDQxIEBAIHByb3RlY3Rl
ZDoKICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1fcmVmOwogfTsKIAorY2xhc3MgTWF0aElD
SG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90
aGVyKQorICAgIHsKKyAgICAgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsK
KyAgICAgICAgbV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAgICAgICAgbV9u
ZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICAgICAgbV9zdWJJQ3MgPSBXVEZN
b3ZlKG90aGVyLm1fc3ViSUNzKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMo
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRkSUNzLmFkZChh
cml0aFByb2ZpbGUpOyB9CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsg
fQorICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSkgeyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKyAgICBKSVROZWdJ
QyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4g
bV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3Nh
bWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUQWRk
SUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJ
VEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3Is
IEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRNdWxJQyogYWRkTWF0aElD
KEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmls
ZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJh
dG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFBy
b2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6
dHlwZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmls
ZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKworcHJpdmF0ZToKKyAgICBCYWc8
SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFn
PEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKwog
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoRGlyZWN0SklUQ29kZSk7CiBj
bGFzcyBEaXJlY3RKSVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CiAgICAgV1RG
X01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKERpcmVjdEpJ
VENvZGUpOwpAQCAtMjY2LDYgKzMwMSwxMiBAQCBwcml2YXRlOgogICAgIENvZGVQdHI8SlNFbnRy
eVB0clRhZz4gbV93aXRoQXJpdHlDaGVjazsKIH07CiAKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6
IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKKyAgICBCYXNlbGlu
ZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IHdpdGhBcml0eUNoZWNrKQorICAgICAgICA6IERpcmVjdEpJVENvZGUoV1RGTW92ZShjb2Rl
KSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgIHsgfQorfTsKKwog
Y2xhc3MgTmF0aXZlSklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgewogcHVibGlj
OgogICAgIE5hdGl2ZUpJVENvZGUoSklUVHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDEzICs1MywzOCBAQCBB
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBKCiAKIEFMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7
Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
aXNEb3VibGUoKTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29u
c3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNEb3VibGUoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVy
YW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0Nv
bnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorewor
ICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihz
cmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAg
ICAgICAvLyBPT1BTOiBmaW5kIGEgd2F5IHRvIGFzc2VydCB0aGF0IGFsbCBsaW5rIHRpbWUgY29u
c3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBK
U1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAg
ICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5j
b25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxv
Y2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQ
dXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBl
bnRyeSkKQEAgLTIwMyw3ICsyMjgsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRD
YWxsV2l0aEV4CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlND
ZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3Rl
ciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKKyAgICBp
ZiAoIWlzS25vd25DZWxsKHJlZykpCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApA
QCAtMjIzLDcgKzI0OCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNl
cygKIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91
bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVj
a3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAg
ICAgYXV0byByZXN1bHQgPSBtX2NoZWNrcG9pbnRMYWJlbHMuYWRkKG1fYnl0ZWNvZGVJbmRleCwg
bGFiZWwoKSk7CkBAIC0yMzMsNyArMjU4LDcgQEAgaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNr
cG9pbnQoSnVtcCBqdW1wKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUlu
ZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBw
YXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFT
U0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVj
a3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byBpdGVyID0gbV9jaGVja3BvaW50TGFi
ZWxzLmZpbmQobV9ieXRlY29kZUluZGV4KTsKQEAgLTMxMSw3ICszMzYsMTEgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklU
Ojppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1
cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygp
ICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkg
PT0gMTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwo
KSktPmxlbmd0aCgpID09IDE7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCkBA
IC0zMzMsNyArMzYyLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBpbmxpbmUgc3RkOjplbmFi
bGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBW
YWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4gSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQ
cm9maWxlZE9wY29kZShPcCBieXRlY29kZSkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdU
MCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogI2Vsc2UK
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKQEAgLTM0MSwxMiArMzcwLDEz
IEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWMKIAogaW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pIHsgfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWVSZWdzIHZhbHVlKQordGVt
cGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKIHsK
ICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOworICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29k
ZSkgKyB2YWx1ZVByb2ZpbGVPZmZzZXRGb3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7CisgICAgc3Rv
cmU2NCh2YWx1ZS5ncHIoKSwgQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBvZmZzZXQpKTsKIH0KIAog
I2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0zNTUsOCArMzg1LDggQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKAogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQ
cm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRh
dGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNv
ZGUmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQogewogICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQpAQCAtMzg4LDggKzQx
OCw4IEBAIGlubGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1vZGUKICAgICAgICAg
cmV0dXJuIGFycmF5TW9kZXNJbmNsdWRlSWdub3JpbmdUeXBlZEFycmF5cyhhcnJheU1vZGVzLCBj
YXBhYmlsaXR5KTsKICAgICB9OwogCi0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2Nv
ZGVCbG9jay0+bV9sb2NrKTsKLSAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
bG9ja2VyLCBtX2NvZGVCbG9jayk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX3By
b2ZpbGVkQ29kZUJsb2NrLT5tX2xvY2spOworICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbihsb2NrZXIsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEFycmF5TW9kZXMgYXJy
YXlNb2RlcyA9IHByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2Rlcyhsb2NrZXIpOwogICAgIGlmIChh
cnJheVByb2ZpbGVTYXcoYXJyYXlNb2RlcywgRG91YmxlU2hhcGUpKQogICAgICAgICByZXR1cm4g
SklURG91YmxlOwpAQCAtNDIwLDcgKzQ1MCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJl
Z2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlmIChyZWcuaXNDb25zdGFu
dCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBt
X2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOworICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRS
ZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3Rh
bnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NG
b3IocmVnKSwgdmFsdWUpOwpAQCAtNTM2LDcgKzU2Niw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1p
dFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2Nr
LT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAg
ICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsKICAgICAgICAgZWxzZQpAQCAtNTQ2LDcgKzU3Niw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0gICAg
aWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNl
bGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTU1NCwxMSArNTg0LDYgQEAgaW5s
aW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogICAgIH0KIH0KIAotQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNy
YykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0
dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTg0LDcgKzYwOSw4IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8g
VGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdl
bmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGlmIChzcmMu
aXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoc3JjKTsKKyAgICAgICAgLy8gT09QUzogaGFuZGxlIGxpbmsgdGltZSBjb25zdGFu
dHMgaGVyZS4uLgorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
Yyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwogICAgICAgICBlbHNlCkBA
IC02MDYsMTEgKzYzMiw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFs
UmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwogfQogCi1BTFdBWVNf
SU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3Jj
KQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAg
c3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNjM1LDcgKzY1Niw3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKIAogQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFs
UmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbCh2UmVn
KSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHZSZWcpKQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAtNjc3LDcgKzY5OCw3IEBAIEFMV0FZU19JTkxJTkUg
aW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBpZiAodGFyZ2V0KQogICAgICAgICBy
ZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNl
dChpbnN0cnVjdGlvbik7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPm91dE9mTGlu
ZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiBBTFdBWVNfSU5MSU5FIEdldFB1dEluZm8g
SklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSBieXRlY29kZSkKQEAgLTY4NiwyMyAr
NzA3LDEyIEBAIEFMV0FZU19JTkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFAKICAgICBh
dXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRHZXRQdXRJbmZvcy5maW5kKGtleSk7CiAgICAgaWYgKGl0
ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0SW5mb3MuZW5kKCkpCiAgICAgICAgIHJldHVybiBHZXRQ
dXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgLy8gT09QUwogICAgIEdldFB1dEluZm8gZ2V0
UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2dldFB1dEluZm87CiAg
ICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBnZXRQdXRJbmZvLm9wZXJhbmQoKSk7CiAg
ICAgcmV0dXJuIGdldFB1dEluZm87CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgot
QUxXQVlTX0lOTElORSBCaW5hcnlBcml0aFByb2ZpbGUgSklUOjpjb3BpZWRBcml0aFByb2ZpbGUo
QmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0gICAgdWludDY0X3Qga2V5ID0gKHN0YXRpY19jYXN0PHVp
bnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpICsgMSkgPDwgMzIgfCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0YUlEKTsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3Bp
ZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRB
cml0aFByb2ZpbGVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwotICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgbV9jb3BpZWRBcml0aFByb2ZpbGVzLmFkZChr
ZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJuIGFyaXRoUHJvZmlsZTsKLX0KLQogdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGUoT3Ag
b3ApCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1
bHRSZWdzKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIH0KIApA
QCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29u
c3QKICAgICAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1p
emUpOwogICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIApAQCAtMTE3Myw3ICsxMTczLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0
UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAt
MTI0Miw3ICsxMjQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25z
dAogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcpOwogfQogCkBAIC0xMjg2LDcgKzEyODYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjCiAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdl
dEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAgLTEzMjAsNyArMTMyMCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTM0
Niw3ICsxMzQ2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkc1dpdGhU
aGlzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEzODksNyArMTM4OSw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIApAQCAtMTQ3NCw3ICsxNDc0LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAg
LTIzNzUsNyArMjM3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTI4OTgsNyAr
Mjg5OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQ2
NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTY0LDcgKzI5NjQsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmll
bGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIApAQCAtMzExNSw3ICszMTE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9nZXRfYnlfdmFsKAogCiAgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTAx
MiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIK
IAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9u
KQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3Qs
IG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBt
YWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6
Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEsIHQyKQogICAg
ICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0MCwg
OF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8gcHJlT3Aob3Bj
b2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGluIHQxLCBzcmNE
c3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAgICAgICAgIHN0
b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFBy
b2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAgICBkaXNwYXRjaCgp
CiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBsbGludE9wV2l0
aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUp
Ci0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsg
VW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1ldGFkYXRhKHQ1
LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
KHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BOZWdhdGVTcmNO
b3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0
MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5h
cnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQzKQogICAgIHJl
dHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJpYSB0MSwgTG93
ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQotICAgIHVwZGF0
ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFBy
b2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAgIHJldHVybih0
MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAgZW5kKQogCiBt
YWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdl
ck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJvZmlsZSh0eXBl
KQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0K
ICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMsIHQyKQogICAgICAg
ICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0
b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJl
ZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcsIC5vcDFOb3RJ
bnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0gICAgICAgIGFyaXRo
UHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBn
ZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDMsIHQxLCB0
MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsxMTI0LDEyIEBA
IG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYmlhIHQy
LCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAub3AxTm90SW50
T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAgICAgICAgYXJp
dGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDQpCiAg
ICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5v
cDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0gICAgICAgIGFy
aXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUs
IHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAg
ICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3JvIGJpbmFyeU9w
Q3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRl
ZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBub3QuCiAg
ICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFnLCAuc2xvdwot
ICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRh
dGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIs
IHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0
MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2
aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwNTEsMTAgKzEwNTEsNiBAQCBzdHJp
Y3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29k
ZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1l
dGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9m
aWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDJdCi0gICAgICAg
IGVuZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGxvYWRxIFtjZnIsIHQw
LCA4XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpAQCAtMTA2NCw3ICsxMDYwLDcgQEAg
bWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICBpbnRlZ2Vy
T3BlcmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51bWJlclRhZywgdDEKICAgICAgICAg
c3RvcmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRo
UHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCBBcml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNs
b3c6CkBAIC0xMTI5LDExICsxMTI1LDYgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRh
LCByZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAg
b3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRo
UHJvZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCiAgICAgbWV0YWRhdGEodDEs
IHQyKQpAQCAtMTE0MSwxMiArMTEzMiwxMiBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0
ZSwgT3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAg
IG5lZ2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShB
cml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFy
aXRoUHJvZmlsZUludCwgdDEsIHQ0KQogICAgIHJldHVybih0MykKIC5vcE5lZ2F0ZU5vdEludDoK
ICAgICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JxIDB4ODAwMDAw
MDAwMDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVy
KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1i
ZXIsIHQxLCB0NCkKICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTU5LDEw
ICsxMTUwLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAg
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0
YSh0NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3Jo
IHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fcmhz
LCB0MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZShzaXplLCB0MCwgdDEpCkBAIC0xMTcyLDcgKzExNTksNyBAQCBtYWNybyBiaW5hcnlPcEN1
c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAg
IGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5zbG93LCB0MikKIAotICAgICAgICBw
cm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9m
aWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDQpCiAgICAgICAgIGRp
c3BhdGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTgyLDEwICsxMTY5LDEwIEBAIG1hY3Jv
IGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYnRxeiB0MSwgbnVt
YmVyVGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0
MSwgZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAg
ICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1i
ZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFO
b3RJbnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAg
ICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVO
dW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgIC5vcDFOb3RJbnRS
ZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEyMDEsNyArMTE4OCw3IEBAIG1hY3Jv
IGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVy
YW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIGlzIGRlZmluaXRlbHkgbm90Lgog
ICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93
Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVC
aW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1
LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEK
ICAgICAgICAgZnEyZCB0MSwgZnQxCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyODExNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTI1MDIsNiArMjUwMiwxNyBAQCBtYWNybyBub3RTdXBwb3J0ZWQoKQogICAg
IGVuZAogZW5kCiAKKworbWFjcm8gdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBVbmFyeUFy
aXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKworbWFjcm8gdXBkYXRlQmluYXJ5QXJpdGhQ
cm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAg
ICBvcmggdHlwZSwgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCiAvLyBG
SVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRoZSBYODZfNjRfV0lOIGNvbmRpdGlvbiBoZXJlLCBz
aW5jZSBXRUJBU1NFTUJMWSBzaG91bGQgYWxyZWFkeSBiZSBmYWxzZSBvbiBXaW5kb3dzCiAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNzE2CiBpZiBXRUJBU1NF
TUJMWSBhbmQgbm90IFg4Nl82NF9XSU4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgxMTc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxl
Rm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVz
dWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUg
PSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmls
ZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmcob3Bl
cmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgp
KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436257</attachid>
            <date>2021-08-23 19:36:49 -0700</date>
            <delta_ts>2021-08-25 12:09:01 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>82914</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNiArNDY3LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUg
TElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7
IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRh
Lm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRl
Y29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5l
IExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7
IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRh
Lm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVj
b2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygp
OwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkg
ewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpA
QCAtNTI5LDE0ICs1NDIsMTQgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0
ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQot
ICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTkso
T3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19X
SVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5l
Z2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAg
ICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTkso
T3BKbmVxUHRyKQogCkBAIC0zMzE4LDEzICszMzMxLDEzIEBAIEJpbmFyeUFyaXRoUHJvZmlsZSog
Q29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAg
ICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wQWRkPigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfbXVsOgotICAgICAgICBy
ZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BTdWI+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kaXY6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzMzYsMTEg
KzMzNDksMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0aAogewog
ICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAg
ICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9w
SW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMt
PmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bf
ZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzMywxNiArMjMzLDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFz
SW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRy
YXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJl
Z2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYmFj
ayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlzIGB0aGlz
YCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50
KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKLQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVt
cG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAgIHJldHVy
biByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAtNDc4LDYg
KzQ2OCw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJv
ZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFs
dWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxl
cygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgp
ID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1
c2VKSVQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
NSw2ICsxNzUsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdp
c3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
c1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBj
b25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRS
ZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2Nv
bnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBjb25z
dCBGaXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjsgfQogCkBAIC0yMDcsNiArMjA4LDE0IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNj
cmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2Vy
U2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucygpIGNvbnN0OworICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygp
LmF0KGluZGV4KS5wdHIoKTsgfQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3Ry
dWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgICAgIGNvbnN0
IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rp
b24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24g
Pj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNFbmQpOwor
ICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CiAK
ICAgICB1bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxl
ZUxvY2FsczsgfQogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZh
cnM7IH0KQEAgLTQxMCw2ICs0MTksOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bnN0cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVjdGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzczsKIAorICAgIC8vIE9PUFM6IGJpbmQg
YSBiZXR0ZXIgcGxhY2UgdG8gc3RvcmUgdGhpcyBzdHVmZj8KKyAgICBWZWN0b3I8QmluYXJ5QXJp
dGhQcm9maWxlPiBtX2JpbmFyeUFyaXRoUHJvZmlsZXM7CisgICAgVmVjdG9yPFVuYXJ5QXJpdGhQ
cm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAg
IERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKQEAgLTQ1NSw2ICs0NjcsMjggQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rp
b24ub2Zmc2V0KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJ
bnN0cnVjdGlvbiogcGMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBP
ZmZzZXQob2Zmc2V0KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2Zp
bGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9iaW5hcnlBcml0aFByb2Zp
bGVzLnNpemUoKTsKKyAgICAgICAgbV9iaW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5hcnlB
cml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdW5z
aWduZWQgYWRkVW5hcnlBcml0aFByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVz
dWx0ID0gbV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX3VuYXJ5QXJpdGhQ
cm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxl
KHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVu
YXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBt
X3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQogCiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGlu
ZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDEsOSArMTAxLDE4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzX29mZnNldDE2VGFibGVT
aXplOwogICAgIH0KIAorCiAgICAgdXNpbmcgT2Zmc2V0MzIgPSB1aW50MzJfdDsKICAgICB1c2lu
ZyBPZmZzZXQxNiA9IHVpbnQxNl90OwogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZT4K
KyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYgb3Bjb2Rl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQpOworICAgICAgICB1aW50cHRy
X3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bjb2RlOjpv
cGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07CisgICAgICAgIHJl
dHVybiBiYXNlVHlwZU9mZnNldCArIHNpemVvZihPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5t
X21ldGFkYXRhSUQ7CisgICAgfQorCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX29m
ZnNldFRhYmxlRW50cmllcyA9IE5VTUJFUl9PRl9CWVRFQ09ERV9XSVRIX01FVEFEQVRBICsgMTsg
Ly8gb25lIGV4dHJhIGVudHJ5IGZvciB0aGUgImVuZCIgb2Zmc2V0OwogCiAgICAgLy8gTm90IHRv
IGJyZWFrIGFsaWdubWVudCBvZiAzMmJpdCBvZmZzZXQgdGFibGUsIHdlIHJvdW5kIHVwIHNpemUg
d2l0aCBzaXplb2YoT2Zmc2V0MzIpLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw2IEBAIHRlbXBsYXRlPHVuc2lnbmVkIG51bWJlck9mQnVja2V0c0FyZ3VtZW4KIHN0cnVj
dCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJl
ck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0c0FyZ3VtZW50OwogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHMgPSAxOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgYnVja2V0SW5kZXhNYXNrID0gbnVtYmVyT2ZCdWNrZXRzIC0gMTsKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVy
T2ZCdWNrZXRzICsgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHM7CiAgICAgCiAgICAgVmFsdWVQcm9m
aWxlQmFzZSgpCkBAIC0xMzQsNyArMTMzLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ugewog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAg
ICBFbmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAg
U3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE1Niw2ICsxNTUs
NyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBW
YWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czww
PiB7CiAgICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNr
ZXRzPDA+KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQog
fTsKIAogc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1
ZVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTk4LDcgKzE1OTgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFVuYXJ5CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wTm90Pihkc3QsIHNyYyk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICBPcE5lZ2F0ZTo6
ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CisgICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMs
IGRzdCwgc3JjLCB0eXBlLCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfYml0bm90OgogICAgICAgICBlbWl0VW5hcnlPcDxP
cEJpdG5vdD4oZHN0LCBzcmMpOwpAQCAtMTY5NiwxMyArMTY5NiwxMyBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFR5cGVPCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0SW5jKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcEluYzo6ZW1pdCh0aGlz
LCBzcmNEc3QpOworICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFk
ZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVjKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAg
ICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QpOworICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0Rz
dCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNE
c3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNjgyLDcgKzY4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmVn
aXN0ZXJJRCo+CiAgICAgICAgIGVtaXRCaW5hcnlPcChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcykKICAgICAgICAg
ewotICAgICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBl
cyk7CisgICAgICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5
cGVzLCBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICAgICAg
cmV0dXJuIGRzdDsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL01ldGFkYXRhLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvTWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0
MiwyMiBAQCBjbGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJldHVy
biBpZiBlbXB0eT8KIAotICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcykK
KyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGdlbmVyYXRlT2Zmc2V0
T2YpCiAgICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAg
ICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4
fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVm
aXh9fTsiCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRG
aWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlLCBmYWxzZSl9XG4je3ByZWZpeH19OyIKICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9f
c30gbV8je2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmll
bGQudG9fcworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiI3twcmVmaXh9I3t0eXBlLnRv
X3N9IG1fI3tmaWVsZE5hbWV9OyIKKyAgICAgICAgICAgICAgICAgICAgaWYgZ2VuZXJhdGVPZmZz
ZXRPZgorICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArICJcbiIgKyAic3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsx
Li5dfSgpIHsgcmV0dXJuIE9GRlNFVE9GKE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisg
ICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICByZXN1bHQKICAgICAg
ICAgICAgICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVuZAog
Ci0gICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcykKKyAg
ICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzLCB0cnVlKQog
CiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBA
aW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJl
dmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBt
X2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsK
KyAgICBtX2dsb2JhbE9iamVjdENvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VmFsdWU6Okdsb2JhbE9iamVjdCk7CiB9CiAKIEpJVDo6fkpJVCgpCkBAIC02NzUs
MTcgKzY3NiwxNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiB2b2lk
IEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9j
ay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgLy8gT09QUzogTWF5YmUgdGhpcyBzaG91bGQgYmUg
ZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJsb2NrPworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxl
dmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dpdGNo
IChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAgICBtX2NhbkJl
T3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBm
YWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21waWxl
QW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgbV9j
YW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC03NjEsNyArNzYx
LDEwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KIAogICAgIGlm
IChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgQVNT
RVJUKCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX2NvZGVCbG9jay0+
aXNDb25zdHJ1Y3RvcigpIHx8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAxKSkgewor
ICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVkVmVjdG9yOjpv
ZmZzZXRPZlN0b3JhZ2UoKSksIHJlZ1QyKTsKKwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKyth
cmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3Rvciwg
dGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwogICAgICAg
ICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxs
eSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCkBAIC03NzcsNiArNzgwLDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxv
YWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCiAg
ICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQ
cm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAg
ICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9m
KFZhbHVlUHJvZmlsZSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTk5
MCw3ICs5OTQsNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICJCYXNlbGluZSBKSVQgY29k
ZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTRW50cnlQdHJUYWc+KG1fYXJpdHlDaGVjayk7Ci0gICAgbV9qaXRDb2RlID0gYWRvcHRS
ZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklUKSk7CisgICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVENv
ZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaykpOwogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAs
ICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgp
LnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2Vk
UHRyKCkpOwpAQCAtMTAwNSw2ICsxMDA5LDggQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5h
bGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5rQnVmZmVyLT5ydW5NYWluVGhyZWFkRmluYWxpemF0
aW9uVGFza3MoKTsKIAorICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisK
ICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1f
bG9jayk7CiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9j
azo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDI1IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisgICAg
Y2xhc3MgSklUQ29uc3RhbnRQb29sIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVzaW5nIENvbnN0
YW50ID0gdW5zaWduZWQ7CisKKyAgICAgICAgZW51bSBjbGFzcyBWYWx1ZSB7CisgICAgICAgICAg
ICBHbG9iYWxPYmplY3QKKyAgICAgICAgfTsKKworICAgICAgICBDb25zdGFudCBhZGQoVmFsdWUg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3Rh
bnRzLnNpemUoKTsKKyAgICAgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZCh2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBWZWN0b3I8VHlwZXM+IG1fY29uc3RhbnRzOworICAgIH07CisKICAgICBlbnVtIE9wY29kZUlE
IDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOwpAQCAtMzA4
LDYgKzMyNywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAg
ICAgdGVtcGxhdGUgPEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Y29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0
ZSA8Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVj
b2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGUgPEJ5dGVjb2Rl
PgorICAgICAgICB2b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRl
Y29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdm9pZCBsb2FkQ29uc3Rh
bnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2FkR2xv
YmFsT2JqZWN0KEdQUlJlZyk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1
bXBUb0hhbmRsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFw
cGVuZChqdW1wVG9IYW5kbGVyKTsKQEAgLTM3NiwxMCArNDA1LDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBp
biByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0
Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBH
UFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICAvL3ZvaWQg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOworICAgICAgICAv
L3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2Rl
JiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFs
dWVSZWdzKTsKQEAgLTcyNiw3ICs3NTUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0
cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC03ODgsNiArODE2
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJh
bWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgICAgIGJv
b2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSlNWYWx1ZSBnZXRDb25z
dGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25z
dGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50
Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtMTA1MiwxMSArMTA4MSw5IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQo
KSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAg
ICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2Zp
bGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBm
YWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRp
ZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFs
bCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygp
IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xMDY5LDggKzEwOTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwg
dGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KICAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBz
bG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgogICAgICAgICBH
ZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRB
cml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJl
dGVyOwogCkBAIC0xMDk4LDcgKzExMjMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVj
dG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAogICAgICAgICBIYXNoTWFwPHVuc2lnbmVk
LCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRf
dCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7CiAKICAgICAgICAg
SnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9u
Q2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwpAQCAtMTEzMywxMSArMTE1NywxNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBJbnN0cnVjdGlvbiosIFVuaXF1ZVJl
ZjxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+PiBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9u
U3RhdGU7CiAKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwotICAgICAgICBib29sIG1f
Y2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmls
aW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsK
IAotICAgICAgICBSZWZQdHI8RGlyZWN0SklUQ29kZT4gbV9qaXRDb2RlOworICAgICAgICBNYXRo
SUNIb2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2pp
dENvZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAgICAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKworICAgICAgICBHUFJSZWcgbV9t
ZXRhZGF0YUdQUjsKKyAgICAgICAgR1BSUmVnIG1fY29uc3RhbnRzR1BSOwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQ
UjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/
IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0zMjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJlZ1QxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDIsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyAr
Mzc1LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0K
IAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjEsOCBAQCB2b2lkIEpJVDo6ZW1p
dEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4o
KS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5l
Z2F0ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51bmFy
eUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJvZmls
ZUluZGV4KTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMo
YXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0
cnVjdGlvbiwgbmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8g
Y2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJl
IGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRo
TmVnYXRlKTsKQEAgLTkwMiw4ICs5MDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNv
bnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJQyog
YWRkSUMgPSBtX21hdGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDgsMTAgKzk1MiwxMSBA
QCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5l
cmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAg
VW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7
CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0
aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwor
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlv
biwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxz
ZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1w
cyk7CiAKQEAgLTEwMjAsMTAgKzEwMjUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJ
VEJpbmFyeU1hdGhJQwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQog
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAg
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2Zp
bGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYg
KGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsK
IApAQCAtMTA2MCwxMyArMTA2NiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5h
cnlNYXRoSUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwog
ICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAg
IGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1Q
dHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihy
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsK
IAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJl
bCgpOwpAQCAtMTEyNSwxMyArMTEzMiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklU
QmluYXJ5TWF0aElDCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0
KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAg
ICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAg
ICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRo
SUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWlj
Pihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2Zp
bGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0
LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9u
KSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0
aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5k
ID0gbGFiZWwoKTsKQEAgLTExNzEsNyArMTE3OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihj
b25zdCBJbnN0cnVjdGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlu
a2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERpdj4oKS5tX3Byb2ZpbGVJbmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFu
ZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCBy
aWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxNiw4
ICsxMjI0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlu
a2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE11bD4oKSk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFy
aXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1
Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwp
OwogfQpAQCAtMTIzMiw4ICsxMjQwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25z
dCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRk
SklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFN1Yj4oKSk7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9tYXRoSUNz
LmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFk
ZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4o
c3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3Qg
T3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25G
b3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3Rl
cigpLCByZWdUMCk7CiB9CiAKQEAgLTQwNCw3ICs0MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
dGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX25leHQpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKQEAgLTQ5
Myw3ICs0OTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAg
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5j
ZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CkBAIC01MTIsNyArNTEyLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgdmFsdWVH
UFIgfSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVS
ZWdzIHsgdmFsdWVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgdmFsdWVHUFIpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlz
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODExNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjQ4LDYgKzI0OCw0MSBAQCBwcm90ZWN0ZWQ6CiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFn
PiBtX3JlZjsKIH07CiAKK2NsYXNzIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBh
ZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fYWRkSUNz
ID0gV1RGTW92ZShvdGhlci5tX2FkZElDcyk7CisgICAgICAgIG1fbXVsSUNzID0gV1RGTW92ZShv
dGhlci5tX211bElDcyk7CisgICAgICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lD
cyk7CisgICAgICAgIG1fc3ViSUNzID0gV1RGTW92ZShvdGhlci5tX3N1YklDcyk7CisgICAgfQor
CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlKSB7IHJldHVybiBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorICAgIEpJVE11bElD
KiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4g
bV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKyAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMo
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChh
cml0aFByb2ZpbGUpOyB9CisgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9
CisKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9y
Pjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9m
aWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5
cGU+CisgICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUp
IHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNf
c2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRO
ZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRK
SVROZWdJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9y
LCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUU3ViSUMqIGFkZE1hdGhJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2Zp
bGUpOyB9CisKK3ByaXZhdGU6CisgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKKyAgICBCYWc8
SklUTXVsSUM+IG1fbXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFn
PEpJVFN1YklDPiBtX3N1YklDczsKK307CisKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKERpcmVjdEpJVENvZGUpOwogY2xhc3MgRGlyZWN0SklUQ29kZSA6IHB1YmxpYyBK
SVRDb2RlV2l0aENvZGVSZWYgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRF9X
SVRIX0hFQVBfSURFTlRJRklFUihEaXJlY3RKSVRDb2RlKTsKQEAgLTI2Niw2ICszMDEsMTIgQEAg
cHJpdmF0ZToKICAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fd2l0aEFyaXR5Q2hlY2s7CiB9
OwogCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSwgcHVibGlj
IE1hdGhJQ0hvbGRlciB7CisgICAgQmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRh
Zz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKKyAgICAgICAg
OiBEaXJlY3RKSVRDb2RlKFdURk1vdmUoY29kZSksIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCkKKyAgICB7IH0KK307CisKIGNsYXNzIE5hdGl2ZUpJVENvZGUgOiBwdWJsaWMg
SklUQ29kZVdpdGhDb2RlUmVmIHsKIHB1YmxpYzoKICAgICBOYXRpdmVKSVRDb2RlKEpJVFR5cGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4
MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MywxMyArNTMsMzggQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgSgogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXND
b25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0
YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNl
bGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAgICAgICAgLy8gT09QUzogZmluZCBhIHdheSB0byBh
c3NlcnQgdGhhdCBhbGwgbGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXND
ZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsK
LSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9B
U1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOwor
ICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0
ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0yMDMsNyArMjI4LDcgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeAogCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIyMyw3ICsyNDgsNyBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VU
b05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJ
bmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBB
U1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hl
Y2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50
TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjMzLDcgKzI1OCw3IEBA
IGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0
ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2tw
b2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAg
IGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBA
IC0zMTEsMjkgKzMzNiwzNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJz
dHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0
dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFs
dWVSZWdzIHZhbHVlKQotewotICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0g
ICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBz
byB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0j
ZWxzZQotICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nh
c3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAg
IHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQp
OwotICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsK
LSNlbmRpZgotfQorICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25z
dGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFz
Q2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30KKworLy8gT09QUworLy9pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFs
dWVSZWdzIHZhbHVlKQorLy97CisvLyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsK
Ky8vCisvLyAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBi
dWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lm
IFVTRShKU1ZBTFVFNjQpCisvLyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUu
bV9idWNrZXRzKTsKKy8vI2Vsc2UKKy8vICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmls
ZS5tX2J1Y2tldHMpOworLy8gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlw
dG9yLT5hc0JpdHMucGF5bG9hZCk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVz
Y3JpcHRvci0+YXNCaXRzLnRhZyk7CisvLyNlbmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpN
ZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2Vu
ZGlmCkBAIC0zNDEsMjQgKzM3MSwyNSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJv
ZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBK
U1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZv
cihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKyAgICBw
dHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2Rl
PihtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZG
aXJzdEJ1Y2tldCgpOworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3MobV9tZXRhZGF0
YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJS
ZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxl
LCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0
UmVnKQorLy97CisvLyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisvL30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFk
YXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Citpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKQEAgLTM4
OCw4ICs0MTksOCBAQCBpbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlCiAg
ICAgICAgIHJldHVybiBhcnJheU1vZGVzSW5jbHVkZUlnbm9yaW5nVHlwZWRBcnJheXMoYXJyYXlN
b2RlcywgY2FwYWJpbGl0eSk7CiAgICAgfTsKIAotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKGxvY2tlciwgbV9jb2RlQmxvY2spOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9wcm9maWxlZENvZGVCbG9jay0+bV9sb2NrKTsKKyAgICBwcm9maWxlLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24obG9ja2VyLCBtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBBcnJheU1v
ZGVzIGFycmF5TW9kZXMgPSBwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMobG9ja2VyKTsKICAg
ICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIERvdWJsZVNoYXBlKSkKICAgICAgICAg
cmV0dXJuIEpJVERvdWJsZTsKQEAgLTQyMCw3ICs0NTEsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0SW5pdFJlZ2lzdGVyCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZp
cnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAocmVnLmlz
Q29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQ
b29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZp
bkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZERvdWJsZShh
ZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKQEAgLTUzNiw3ICs1NjcsNyBAQCBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2Nv
ZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkg
ewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTU0Niw3ICs1NzcsNyBAQCBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQog
ewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlz
S25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01NTQsMTEgKzU4NSw2
IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9CiB9CiAK
LUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdp
c3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRP
cGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9w
MiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKQEAgLTU4NCw3ICs2MTAsOCBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRl
eCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKICAgICBp
ZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KHNyYyk7CisgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBsaW5rIHRpbWUg
Y29uc3RhbnRzIGhlcmUuLi4KKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldENvbnN0YW50T3Bl
cmFuZChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKICAgICAgICAg
ZWxzZQpAQCAtNjA2LDExICs2MzMsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0
VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAot
QUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lz
dGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQog
ewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTYzNSw3ICs2NTcsNyBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAKIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywg
VmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNl
bGwodlJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTY3Nyw3ICs2OTksNyBAQCBBTFdBWVNf
SU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7CiAgICAgaWYgKHRhcmdldCkKICAg
ICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPm91dE9mTGluZUp1
bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5v
dXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKIH0KIAogQUxXQVlTX0lOTElORSBHZXRQ
dXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNvZGUpCkBAIC02
ODYsMjMgKzcwOCwxMiBAQCBBTFdBWVNfSU5MSU5FIEdldFB1dEluZm8gSklUOjpjb3BpZWRHZXRQ
CiAgICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkR2V0UHV0SW5mb3MuZmluZChrZXkpOwogICAg
IGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdldFB1dEluZm9zLmVuZCgpKQogICAgICAgICByZXR1
cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFsdWUpOworICAgIC8vIE9PUFMKICAgICBHZXRQdXRJ
bmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9nZXRQdXRJ
bmZvOwogICAgIG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5mby5vcGVyYW5k
KCkpOwogICAgIHJldHVybiBnZXRQdXRJbmZvOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBCaW5h
cnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJpdGhQ
cm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2NF90IGtleSA9IChzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEpIDw8IDMyIHwgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0byBpdGVyYXRvciA9
IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1f
Y29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1
ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1fY29waWVkQXJpdGhQcm9maWxl
cy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBhcml0aFByb2ZpbGU7Ci19Ci0K
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFN
b2RlKE9wIG9wKQogewpAQCAtNzIxLDYgKzczMiwzNCBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2Rl
IEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAor
dGVtcGxhdGUgPEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21N
ZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyBy
ZXN1bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRD
b2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9m
ZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDxCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNp
emVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3MobV9tZXRh
ZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRh
VGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPEJ5dGVj
b2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3Vs
dCkKK3sKKyAgICBhZGRQdHIobV9tZXRhZGF0YUdQUiwgVHJ1c3RlZEltbVB0cihtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBv
ZmZzZXQpLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29uc3Rh
bnQoSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBHUFJSZWcgcmVzdWx0
KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhtX2NvbnN0YW50c0dQUiwgc3RhdGljX2Nhc3Q8dWlu
dHB0cl90Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZENv
bnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50
KCkpIHsKKyAgICAgICAgLy8gT09QUwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAg
ICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBh
ZGRyZXNzRm9yKGRzdCkpOwpAQCAtODcsMzcgKzg4LDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2pt
cChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0g
ICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUo
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwg
YWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAog
ICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0
b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBS
ZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxw
dHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRv
cjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdElu
aXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0
OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBvZmZzZXRPZkFsbG9jYXRvcigp
LCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3
T2JqZWN0OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBvZmZzZXRPZlN0cnVj
dHVyZSgpLCBzdHJ1Y3R1cmVSZWcpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGF1
dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0QWxsb2NhdGVK
U09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVn
LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBsb2Fk
OChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSwgc2NyYXRjaFJlZyk7CisgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJl
Zywgc2NyYXRjaFJlZyk7CisgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIFJlZ2lzdGVySUQg
c3RydWN0dXJlUmVnID0gcmVnVDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFs
bG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CisgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0
dXJlUmVnKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBA
IC00NjUsOCArNDY0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVj
dGkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0
ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAg
YWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQ
UiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1
Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAg
IGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTUxOSw3
ICs1MjAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAg
Ly8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwog
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWws
IEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCks
IHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1
bXAoKTsKIApAQCAtNTQzLDcgKzU0NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChj
b25zdCBJbnN0cnUKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1Qw
KSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNjI1
LDggKzYyNiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAg
Y29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1
bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2Ny
YXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgp
LCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdU
MSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0
YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFs
dWVJc1RydXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRK
dW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC05MDgsNyArOTEx
LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiB9CiAKQEAgLTkxOCw3ICs5MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Mik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTExNDgsNyArMTE1Myw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzEwLDIzICsxMzE0LDE5IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCog
Y2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVk
U3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
VG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Ny
ZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJh
cnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2Fs
bGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBy
YXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBA
IC0xMzQyLDcgKzEzNDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJ
bnN0CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0
YVRhZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBG
dW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBK
U0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNh
Y2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BDcmVhdGVUaGlzOjpvZmZzZXRPZkNhY2hlZEZ1bmN0aW9uKCksIGNhY2hl
ZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQ
dHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11
bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVx
dWFsLCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxl
Q2FsbGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzcyLDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdz
IHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzgzLDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
cT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVn
VDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJu
VmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwg
cmV0dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxMzk2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQwNyw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJl
Z1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQyMiwxMSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25J
bnN0YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
b25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRH
UFIzKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVy
blZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiB9CkBAIC0xNTY0LDcgKzE1NjksOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVn
ZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BSID0gR1BSUmVnOjphcmd1bWVu
dEdQUjA7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlu
a2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChk
c3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIApAQCAtMTY2NCwxMyArMTY3MSwxMiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2Fy
Z2M7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2Nh
dGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2Nh
dGlvblByb2ZpbGUoKSwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QxLCByZWdUMCwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19h
cnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTE2NzksMTQgKzE2ODUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6
ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisgICAgbWF0ZXJpYWxpemVQ
b2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1l
dGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDApOwogI2Vsc2UKICAg
ICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxs
b2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApAQCAtMTg5Miw3ICsxODk3LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5l
ZCgpLCByZXN1bHRSZWdzKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCkBAIC0xOTE4LDcg
KzE5MjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0CiAgICAg
ZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
c3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
c3VsdFJlZ3MpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcg
KzgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAK
LSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXN1bHRSZWdzKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
ICAgIH0KIApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xv
d0Nhc2UoY29uc3QKICAgICAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemUpOwogICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwog
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0yMDYsNyArMjA2LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgICAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5W
YWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIApAQCAtODc3LDcgKzg3Nyw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0
aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
b3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04ODYsNyArODg3LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRp
b25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1w
bCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBv
cHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVy
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04OTYsNyAr
ODk4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGlu
dDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVy
LCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC05MDYsNyArOTA5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0
cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkxNiw3ICs5MjAs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJf
dCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJC
eVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTExNzMsNyArMTE3OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW4KICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1f
Z2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEyNDIsNyArMTI0Nyw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVn
cyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTI4Niw3ICsx
MjkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgICAg
ICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCkBAIC0xMzIwLDcgKzEzMjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEzNDYsNyArMTM1MSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdz
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMzg5
LDcgKzEzOTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAg
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKQEAgLTE0NzQsNyArMTQ3OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGkKICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZFdp
dGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0yMzc1LDcgKzIzODAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yODk4LDcgKzI5MDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJn
dW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApA
QCAtMjk2NCw3ICsyOTY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KGNvbgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZklu
dGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTMxMTUs
NyArMzEyMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCgKIAog
ICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgx
MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVh
bGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUs
IG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRh
KG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRj
aCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5
cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Fy
aXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAot
CiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAg
ICAgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEw
MjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4K
ICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwgc3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJP
cGVyYXRpb24odDIsIC5zbG93KQogICAgICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2Zy
LCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAg
ICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJ
bnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIy
ICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVn
YXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAg
IG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdh
dGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNb
dDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwg
dDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJp
bmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZm
ZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUo
QXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBB
cml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAgICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5l
Z2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEsIExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAg
IHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxl
TnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2Zp
bGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpA
QCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkKIAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShv
cGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91Ymxl
T3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNv
ZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQot
ICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAl
b3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikK
ICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAgICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYs
NyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAg
ICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAg
ICAgYmluZXEgdDIsIEludDMyVGFnLCAub3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQz
MlRhZywgLm9wMk5vdEludAotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50
KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFBy
b2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50
ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlz
cGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwxMiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3Jl
KG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJpYSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAg
ICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5vdEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0
MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1i
ZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFy
aXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAg
ICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAg
ICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVt
YmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6
CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAgICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0x
MTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9w
CiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29u
ZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAg
ICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRo
UHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29k
ZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQw
LCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9u
KGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDUxLDEwICsxMDUxLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3Rl
cSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVn
ZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9w
Y29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4p
Ci0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3Jo
IHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFy
aXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9zcmNE
c3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQxCiAgICAgICAgIG1ldGFkYXRh
KHQyLCB0MykKQEAgLTEwNjQsNyArMTA2MCw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9w
Y29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MSwgLnNsb3cpCiAgICAg
ICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3JlcSB0MSwgW2NmciwgdDAsIDhdCi0g
ICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0
ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MiwgdDMp
CiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTEyOSwxMSArMTEyNSw2IEBA
IGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotCi0gICAgbWFjcm8gdXBk
YXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRh
dGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICBl
bmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikKQEAgLTExNDEsMTIgKzExMzIsMTIg
QEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLAogICAgIGJ0aXogdDMs
IDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQzCiAgICAgb3JxIG51bWJlclRh
ZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0
ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0NCkKICAg
ICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAgYnRxeiB0MywgbnVtYmVyVGFnLCAu
b3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAwMDAwMDAsIHQzCi0gICAgdXBkYXRl
QXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJv
ZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0MSwgdDQpCiAgICAgcmV0dXJuKHQz
KQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE1OSwxMCArMTE1MCw2IEBAIG1hY3JvIGJpbmFyeU9w
Q3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVv
cGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0
YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQogCi0gICAgICAgIG1hY3Jv
IHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0
YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0g
ICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3JocywgdDApCiAgICAgICAgIGdldChtX2xocywg
dDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQpAQCAtMTE3
Miw3ICsxMTU5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAog
ICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUo
dDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQp
CisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZUludEludCwgdDUsIHQ0KQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAub3AxTm90SW50
OgpAQCAtMTE4MiwxMCArMTE2OSwxMCBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29k
ZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKICAgICAgICAgYWRk
cSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQotICAgICAgICBwcm9maWxlKEFy
aXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxl
KG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgICAg
IGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AySW50OgotICAgICAgICBwcm9m
aWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9m
aWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDQpCiAgICAgICAg
IGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwg
dDIpCkBAIC0xMjAxLDcgKzExODgsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29k
ZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwg
dGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAg
ICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBwcm9maWxlKEFyaXRoUHJv
ZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0
cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBm
dDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAyLDYgKzI1MDIs
MTcgQEAgbWFjcm8gbm90U3VwcG9ydGVkKCkKICAgICBlbmQKIGVuZAogCisKK21hY3JvIHVwZGF0
ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisg
ICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0
YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQor
ZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUs
IG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKwogLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0
aGUgWDg2XzY0X1dJTiBjb25kaXRpb24gaGVyZSwgc2luY2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFs
cmVhZHkgYmUgZmFsc2Ugb24gV2luZG93cwogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMzcxNgogaWYgV0VCQVNTRU1CTFkgYW5kIG5vdCBYODZfNjRfV0lOCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBK
U0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkK
IHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6
TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewot
ICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7
CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQu
aXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436408</attachid>
            <date>2021-08-25 12:09:01 -0700</date>
            <delta_ts>2021-08-25 17:56:47 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>89060</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNiArNDY3LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUg
TElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7
IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRh
Lm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRl
Y29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5l
IExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7
IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRh
Lm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVj
b2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygp
OwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkg
ewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpA
QCAtNTI5LDE0ICs1NDIsMTQgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0
ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQot
ICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTkso
T3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19X
SVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5l
Z2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAg
ICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTkso
T3BKbmVxUHRyKQogCkBAIC0zMzE4LDEzICszMzMxLDEzIEBAIEJpbmFyeUFyaXRoUHJvZmlsZSog
Q29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAg
ICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wQWRkPigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfbXVsOgotICAgICAgICBy
ZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BTdWI+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kaXY6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzMzYsMTEg
KzMzNDksMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0aAogewog
ICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAg
ICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9w
SW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMt
PmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bf
ZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzMywxNiArMjMzLDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFz
SW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRy
YXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJl
Z2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYmFj
ayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlzIGB0aGlz
YCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50
KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKLQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVt
cG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAgIHJldHVy
biByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAtMjY3LDYg
KzI1Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldElDU3RhdHVzTWFwKElDU3RhdHVzTWFwJiBy
ZXN1bHQpOwogICAgIAogI2lmIEVOQUJMRShKSVQpCisgICAgLy8gT09QUzogbW92ZSBhcml0aG1l
dGljIElDcyBhbmQgc3dpdGNoIHRhYmxlcyBvdXQgb2YgaGVyZS4KICAgICBzdHJ1Y3QgSklURGF0
YSB7CiAgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKIApAQCAtNDc4LDYg
KzQ2OSw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJv
ZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFs
dWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxl
cygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgp
ID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1
c2VKSVQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
NSw2ICsxNzUsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdp
c3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
c1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBj
b25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRS
ZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2Nv
bnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBjb25z
dCBGaXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjsgfQogCkBAIC0yMDcsNiArMjA4LDE0IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNj
cmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2Vy
U2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucygpIGNvbnN0OworICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygp
LmF0KGluZGV4KS5wdHIoKTsgfQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3Ry
dWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgICAgIGNvbnN0
IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rp
b24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24g
Pj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNFbmQpOwor
ICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CiAK
ICAgICB1bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxl
ZUxvY2FsczsgfQogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZh
cnM7IH0KQEAgLTQxMCw2ICs0MTksOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bnN0cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVjdGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzczsKIAorICAgIC8vIE9PUFM6IGJpbmQg
YSBiZXR0ZXIgcGxhY2UgdG8gc3RvcmUgdGhpcyBzdHVmZj8KKyAgICBWZWN0b3I8QmluYXJ5QXJp
dGhQcm9maWxlPiBtX2JpbmFyeUFyaXRoUHJvZmlsZXM7CisgICAgVmVjdG9yPFVuYXJ5QXJpdGhQ
cm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAg
IERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKQEAgLTQ1NSw2ICs0NjcsMjggQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rp
b24ub2Zmc2V0KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJ
bnN0cnVjdGlvbiogcGMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBP
ZmZzZXQob2Zmc2V0KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2Zp
bGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9iaW5hcnlBcml0aFByb2Zp
bGVzLnNpemUoKTsKKyAgICAgICAgbV9iaW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5hcnlB
cml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdW5z
aWduZWQgYWRkVW5hcnlBcml0aFByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVz
dWx0ID0gbV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX3VuYXJ5QXJpdGhQ
cm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxl
KHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVu
YXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBt
X3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQogCiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGlu
ZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDEsOSArMTAxLDE4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzX29mZnNldDE2VGFibGVT
aXplOwogICAgIH0KIAorCiAgICAgdXNpbmcgT2Zmc2V0MzIgPSB1aW50MzJfdDsKICAgICB1c2lu
ZyBPZmZzZXQxNiA9IHVpbnQxNl90OwogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZT4K
KyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYgb3Bjb2Rl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQpOworICAgICAgICB1aW50cHRy
X3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bjb2RlOjpv
cGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07CisgICAgICAgIHJl
dHVybiBiYXNlVHlwZU9mZnNldCArIHNpemVvZihPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5t
X21ldGFkYXRhSUQ7CisgICAgfQorCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX29m
ZnNldFRhYmxlRW50cmllcyA9IE5VTUJFUl9PRl9CWVRFQ09ERV9XSVRIX01FVEFEQVRBICsgMTsg
Ly8gb25lIGV4dHJhIGVudHJ5IGZvciB0aGUgImVuZCIgb2Zmc2V0OwogCiAgICAgLy8gTm90IHRv
IGJyZWFrIGFsaWdubWVudCBvZiAzMmJpdCBvZmZzZXQgdGFibGUsIHdlIHJvdW5kIHVwIHNpemUg
d2l0aCBzaXplb2YoT2Zmc2V0MzIpLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw2IEBAIHRlbXBsYXRlPHVuc2lnbmVkIG51bWJlck9mQnVja2V0c0FyZ3VtZW4KIHN0cnVj
dCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJl
ck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0c0FyZ3VtZW50OwogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHMgPSAxOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgYnVja2V0SW5kZXhNYXNrID0gbnVtYmVyT2ZCdWNrZXRzIC0gMTsKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVy
T2ZCdWNrZXRzICsgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHM7CiAgICAgCiAgICAgVmFsdWVQcm9m
aWxlQmFzZSgpCkBAIC0xMzQsNyArMTMzLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ugewog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAg
ICBFbmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAg
U3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE1Niw2ICsxNTUs
NyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBW
YWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czww
PiB7CiAgICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNr
ZXRzPDA+KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQog
fTsKIAogc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1
ZVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTk4LDcgKzE1OTgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFVuYXJ5CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wTm90Pihkc3QsIHNyYyk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICBPcE5lZ2F0ZTo6
ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CisgICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMs
IGRzdCwgc3JjLCB0eXBlLCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfYml0bm90OgogICAgICAgICBlbWl0VW5hcnlPcDxP
cEJpdG5vdD4oZHN0LCBzcmMpOwpAQCAtMTY5NiwxMyArMTY5NiwxMyBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFR5cGVPCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0SW5jKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcEluYzo6ZW1pdCh0aGlz
LCBzcmNEc3QpOworICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFk
ZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVjKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAg
ICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QpOworICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0Rz
dCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNE
c3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNjgyLDcgKzY4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmVn
aXN0ZXJJRCo+CiAgICAgICAgIGVtaXRCaW5hcnlPcChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcykKICAgICAgICAg
ewotICAgICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBl
cyk7CisgICAgICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5
cGVzLCBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICAgICAg
cmV0dXJuIGRzdDsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL01ldGFkYXRhLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvTWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0
MiwyMiBAQCBjbGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJldHVy
biBpZiBlbXB0eT8KIAotICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcykK
KyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGdlbmVyYXRlT2Zmc2V0
T2YpCiAgICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAg
ICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4
fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVm
aXh9fTsiCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRG
aWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlLCBmYWxzZSl9XG4je3ByZWZpeH19OyIKICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9f
c30gbV8je2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmll
bGQudG9fcworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiI3twcmVmaXh9I3t0eXBlLnRv
X3N9IG1fI3tmaWVsZE5hbWV9OyIKKyAgICAgICAgICAgICAgICAgICAgaWYgZ2VuZXJhdGVPZmZz
ZXRPZgorICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArICJcbiIgKyAic3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsx
Li5dfSgpIHsgcmV0dXJuIE9GRlNFVE9GKE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisg
ICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICByZXN1bHQKICAgICAg
ICAgICAgICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVuZAog
Ci0gICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcykKKyAg
ICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzLCB0cnVlKQog
CiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBA
aW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJl
dmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBt
X2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsK
KyAgICBtX2dsb2JhbE9iamVjdENvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VmFsdWU6Okdsb2JhbE9iamVjdCk7CiB9CiAKIEpJVDo6fkpJVCgpCkBAIC02NzUs
MTcgKzY3NiwxNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiB2b2lk
IEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9j
ay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgLy8gT09QUzogTWF5YmUgdGhpcyBzaG91bGQgYmUg
ZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJsb2NrPworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxl
dmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dpdGNo
IChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAgICBtX2NhbkJl
T3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBm
YWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21waWxl
QW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgbV9j
YW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC03NjEsNyArNzYx
LDEwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KIAogICAgIGlm
IChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgQVNT
RVJUKCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX2NvZGVCbG9jay0+
aXNDb25zdHJ1Y3RvcigpIHx8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAxKSkgewor
ICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVkVmVjdG9yOjpv
ZmZzZXRPZlN0b3JhZ2UoKSksIHJlZ1QyKTsKKwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKyth
cmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3Rvciwg
dGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwogICAgICAg
ICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxs
eSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCkBAIC03NzcsNiArNzgwLDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxv
YWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCiAg
ICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQ
cm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAg
ICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9m
KFZhbHVlUHJvZmlsZSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTk5
MCw3ICs5OTQsNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICJCYXNlbGluZSBKSVQgY29k
ZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTRW50cnlQdHJUYWc+KG1fYXJpdHlDaGVjayk7Ci0gICAgbV9qaXRDb2RlID0gYWRvcHRS
ZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklUKSk7CisgICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVENv
ZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaykpOwogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAs
ICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgp
LnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2Vk
UHRyKCkpOwpAQCAtMTAwNSw2ICsxMDA5LDggQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5h
bGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5rQnVmZmVyLT5ydW5NYWluVGhyZWFkRmluYWxpemF0
aW9uVGFza3MoKTsKIAorICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisK
ICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1f
bG9jayk7CiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9j
azo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDI1IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisgICAg
Y2xhc3MgSklUQ29uc3RhbnRQb29sIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVzaW5nIENvbnN0
YW50ID0gdW5zaWduZWQ7CisKKyAgICAgICAgZW51bSBjbGFzcyBWYWx1ZSB7CisgICAgICAgICAg
ICBHbG9iYWxPYmplY3QKKyAgICAgICAgfTsKKworICAgICAgICBDb25zdGFudCBhZGQoVmFsdWUg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3Rh
bnRzLnNpemUoKTsKKyAgICAgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZCh2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBWZWN0b3I8VHlwZXM+IG1fY29uc3RhbnRzOworICAgIH07CisKICAgICBlbnVtIE9wY29kZUlE
IDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOwpAQCAtMzA4
LDYgKzMyNywyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAg
ICAgdGVtcGxhdGUgPEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Y29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBs
YXRlIDxCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDxCeXRl
Y29kZT4KKyAgICAgICAgdm9pZCBsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNp
emVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPEJ5dGVjb2RlPgorICAg
ICAgICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDxCeXRlY29kZT4KKyAgICAgICAgdm9pZCBt
YXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zm
c2V0LCBHUFJSZWcpOworCisgICAgICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVkIGNvbnN0
YW50SW5kZXgsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcp
OworCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAg
ICAgICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxl
cik7CkBAIC0zNzYsMTAgKzQxMywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gVGhp
cyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQg
cmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUm
LCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9m
aWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4g
dm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShN
ZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5
dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsK
ICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUm
LCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lk
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBAIC03MjYs
NyArNzYzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5l
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
ICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNzg4LDYgKzgyNCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVy
SUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgICAgICBib29sIGlzS25vd25DZWxsKFZp
cnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1
YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJl
Z2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lz
dGVyKTsKQEAgLTEwNTIsMTEgKzEwODksOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJM
RShERkdfSklUKQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gbV9jYW5C
ZU9wdGltaXplZDsgfQotICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkgeyBy
ZXR1cm4gbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsgfQogICAgICAgICBib29sIHNob3VsZEVt
aXRQcm9maWxpbmcoKSB7IHJldHVybiBtX3Nob3VsZEVtaXRQcm9maWxpbmc7IH0KICNlbHNlCiAg
ICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICBi
b29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAg
Ly8gRW5hYmxlcyB1c2Ugb2YgdmFsdWUgcHJvZmlsZXIgd2l0aCB0aWVyZWQgY29tcGlsYXRpb24g
dHVybmVkIG9mZiwKICAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSBhbGwgY29kZSBnZXRzIHByb2Zp
bGVkLgogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsg
fQpAQCAtMTA2OSw4ICsxMTA0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGJlIGNv
bnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8g
dXNlIHRoaXMuCiAgICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1l
IHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KICAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRH
ZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFy
eU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFy
eU9wKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtMTA5OCw3
ICsxMTMxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+
IG1fc3dpdGNoZXM7CiAKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29w
aWVkR2V0UHV0SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEJpbmFyeUFyaXRoUHJv
ZmlsZT4gbV9jb3BpZWRBcml0aFByb2ZpbGVzOwogCiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0
aW9uQ2hlY2tzOwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJh
bWVSb2xsYmFjazsKQEAgLTExMzMsMTEgKzExNjUsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlv
blN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAg
IGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJ
bmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0
ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRy
PERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElD
czsKKyAgICAgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAg
IEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBtX2dsb2JhbE9iamVjdENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpIH07CisKKyAgICAgICAgR1BSUmVnIG1fbWV0YWRhdGFHUFI7CisgICAg
ICAgIEdQUlJlZyBtX2NvbnN0YW50c0dQUjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2
aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGlj
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihv
cDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3Vt
ZW50R1BSMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQ
UjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzIw
LDcgKzMyMSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAg
ICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1Qw
LCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQg
PyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7CisgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogfQogCkBAIC03MTcsOCArNzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChj
b25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGUoY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklU
TmVnSUMqIG5lZ2F0ZUlDID0gbV9tYXRoSUNzLmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAg
ICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG5lZ2F0ZUlD
KTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0
aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAogICAgIGVt
aXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CkBAIC05MDIs
OCArOTA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlu
a2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEFkZD4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9tYXRoSUNz
LmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFk
ZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4o
YWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVBZGQpOwogfQpAQCAtOTQ4LDEwICs5NTIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRN
YXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9
IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAg
ICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hH
UFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7CisgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xv
d0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDIwLDEw
ICsxMDI1LDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAg
ICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAgICAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYg
c2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwor
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hH
UFIsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2Fz
ZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwNjAsMTMgKzEw
NjYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogI2VuZGlm
CiAKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFBy
b2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9m
aWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJh
dGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVy
cHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiks
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
c3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVy
cHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiks
IHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0
aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IHJlZ1Q0LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBz
cmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRf
Y2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywg
cmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFU
SF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExMjUsMTMg
KzExMzIsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogI2Vu
ZGlmCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJp
dGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRo
UHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0
d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24p
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3Rl
ZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxK
X0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0
LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5B
QkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0x
MTcxLDcgKzExNzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24q
CiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CiAgICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOworICAgICAgICBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+Ymlu
YXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubV9wcm9maWxl
SW5kZXgpOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVy
YW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVj
b2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKQEAgLTEyMTYsOCArMTIyNCw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
bXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11
bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMq
IG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+Ymlu
YXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkpOworICAgIEpJ
VE11bElDKiBtdWxJQyA9IG1fbWF0aElDcy5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAg
IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAg
ICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJh
dGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KQEAgLTEyMzIsOCAr
MTI0MCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJv
ZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtl
ZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
dWI+KCkpOworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhhcml0
aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0
aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgx
MTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOwogfQog
CkBAIC00MDQsNyArNDA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25z
dCBJbgogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9u
ZXh0KTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CkBAIC00OTMsNyArNDkzLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwog
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsg
ZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNW
YWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50
KCk7CiAgICAgfQpAQCAtNTEyLDcgKzUxMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9y
X25leHQoY29uc3QgSW4KICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
ICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0p
OwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVl
R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0OCw2ICsyNDgsNDEg
QEAgcHJvdGVjdGVkOgogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gbV9yZWY7CiB9OwogCitj
bGFzcyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIHZvaWQgYWRvcHRNYXRoSUNzKE1hdGhJ
Q0hvbGRlciYgb3RoZXIpCisgICAgeworICAgICAgICBtX2FkZElDcyA9IFdURk1vdmUob3RoZXIu
bV9hZGRJQ3MpOworICAgICAgICBtX211bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJQ3MpOwor
ICAgICAgICBtX25lZ0lDcyA9IFdURk1vdmUob3RoZXIubV9uZWdJQ3MpOworICAgICAgICBtX3N1
YklDcyA9IFdURk1vdmUob3RoZXIubV9zdWJJQ3MpOworICAgIH0KKworICAgIEpJVEFkZElDKiBh
ZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9h
ZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKyAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0
aFByb2ZpbGUpOyB9CisgICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQor
ICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
KSB7IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorCisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4K
KyAgICBKSVRBZGRJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyBy
ZXR1cm4gYWRkSklUQWRkSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBH
ZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1l
PEdlbmVyYXRvciwgSklUTXVsR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE11bElD
KiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRN
dWxJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlw
ZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBK
SVROZWdHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUTmVnSUMqIGFkZE1hdGhJQyhV
bmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTmVnSUMocHJvZmlsZSk7
IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUU3ViR2VuZXJhdG9y
Pjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVFN1YklDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9m
aWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRTdWJJQyhwcm9maWxlKTsgfQorCitwcml2YXRl
OgorICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBtX211bElD
czsKKyAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJ
Q3M7Cit9OworCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihEaXJlY3RK
SVRDb2RlKTsKIGNsYXNzIERpcmVjdEpJVENvZGUgOiBwdWJsaWMgSklUQ29kZVdpdGhDb2RlUmVm
IHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJ
RVIoRGlyZWN0SklUQ29kZSk7CkBAIC0yNjYsNiArMzAxLDEyIEBAIHByaXZhdGU6CiAgICAgQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3dpdGhBcml0eUNoZWNrOwogfTsKIAorY2xhc3MgQmFzZWxp
bmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgewor
ICAgIEJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8
SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spCisgICAgICAgIDogRGlyZWN0SklUQ29kZShX
VEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAg
eyB9Cit9OworCiBjbGFzcyBOYXRpdmVKSVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJl
ZiB7CiBwdWJsaWM6CiAgICAgTmF0aXZlSklUQ29kZShKSVRUeXBlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTMg
KzUzLDM4IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IEoKIAogQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lz
dGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlm
ICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7
Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0
YW50KSB7CisgICAgICAgIC8vIE9PUFM6IGZpbmQgYSB3YXkgdG8gYXNzZXJ0IHRoYXQgYWxsIGxp
bmsgdGltZSBjb25zdGFudHMgYXJlIGNlbGxzLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzQ2VsbCgpOwogfQogCiBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVy
IHNyYykKIHsKICAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7Ci0gICAgcmV0dXJuIG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0gU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKKyAgICByZXR1cm4gbV91bmxp
bmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVh
bFJlZ2lzdGVyIGVudHJ5KQpAQCAtMjAzLDcgKzIyOCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXgKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dD
YXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmly
dHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChy
ZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwogfQogCkBAIC0yMjMsNyArMjQ4LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFz
QW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgp
CiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhv
ZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwg
c28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAg
IEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
ICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRl
Y29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIzMyw3ICsyNTgsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6
OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1Rv
SG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSht
X2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBt
X2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2No
ZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMzExLDI5ICszMzYsMzQg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykK
IHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgp
KS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxp
bmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKLXsK
LSAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKLQotICAgIC8vIFdlJ3JlIGluIGEg
c2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8g
YSBkaXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQo
dmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UKLSAgICBFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSAgICBzdG9yZTMyKHZhbHVlLnBh
eWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAgICBzdG9yZTMyKHZh
bHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKLX0KKyAgICBp
ZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9
PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmco
KSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgp
ID09IDE7Cit9CisKKy8vIE9PUFMKKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxp
bmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKy8v
eworLy8gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CisvLworLy8gICAgLy8gV2Un
cmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4g
anVzdCBkbyBhIGRpcmVjdAorLy8gICAgLy8gc3RvcmUuCisvLyNpZiBVU0UoSlNWQUxVRTY0KQor
Ly8gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyNl
bHNlCisvLyAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9j
YXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8v
ICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxv
YWQpOworLy8gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50
YWcpOworLy8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmls
ZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAj
ZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzQxLDI0ICsz
NzEsMjUgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikg
eyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVl
KQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7CisgICAgcHRyZGlmZl90IG9mZnNldCA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5
dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29kZT4obV9ieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKTsKKyAg
ICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG9mZnNldCkpOwog
fQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVz
dWx0UmVnKSk7Ci19CisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShW
YWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKKy8veworLy8gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJl
ZykpOworLy99CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlc3Vs
dFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgR1BSUmVnIHJlc3Vs
dFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVn
cyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1Zh
bHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCkBAIC0zODgsOCArNDE5LDggQEAgaW5s
aW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNob29zZUFycmF5TW9kZQogICAgICAgICByZXR1cm4gYXJy
YXlNb2Rlc0luY2x1ZGVJZ25vcmluZ1R5cGVkQXJyYXlzKGFycmF5TW9kZXMsIGNhcGFiaWxpdHkp
OwogICAgIH07CiAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5t
X2xvY2spOwotICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG1f
Y29kZUJsb2NrKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fcHJvZmlsZWRDb2Rl
QmxvY2stPm1fbG9jayk7CisgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxv
Y2tlciwgbV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQXJyYXlNb2RlcyBhcnJheU1vZGVzID0g
cHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKGxvY2tlcik7CiAgICAgaWYgKGFycmF5UHJvZmls
ZVNhdyhhcnJheU1vZGVzLCBEb3VibGVTaGFwZSkpCiAgICAgICAgIHJldHVybiBKSVREb3VibGU7
CkBAIC00MjAsNyArNDUxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdp
c3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVn
LCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
aW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJl
Zyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2
YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2
YWx1ZSk7CkBAIC01MzYsNyArNTY3LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmly
dHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25D
ZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJl
Zy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAg
ICBlbHNlCkBAIC01NDYsNyArNTc3LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29k
ZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7
CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTU0LDExICs1ODUsNiBAQCBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAg
IHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50
MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3Rl
ciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChvcDEpKSB7CkBAIC01ODQsNyArNjEwLDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhv
ZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwg
c28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50
KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChz
cmMpOworICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbGluayB0aW1lIGNvbnN0YW50cyBoZXJlLi4u
CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRDb25zdGFudE9wZXJhbmQoc3JjKTsKICAgICAg
ICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CiAgICAgICAgIGVsc2UKQEAgLTYwNiwxMSAr
NjMzLDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAg
cmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQz
MigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZy
b20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC02MzUsNyArNjU3LDcgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2
UmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlm
ICghaXNLbm93bkNlbGwodlJlZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWcpOwogfQogCkBAIC02NzcsNyArNjk5LDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpq
dW1wVGFyZ2V0KGNvbnN0IAogewogICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJn
ZXQ7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0
aW9uKTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNl
dChpbnN0cnVjdGlvbik7CiB9CiAKIEFMV0FZU19JTkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGll
ZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQpAQCAtNjg2LDIzICs3MDgsMTIgQEAg
QUxXQVlTX0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UAogICAgIGF1dG8gaXRlcmF0
b3IgPSBtX2NvcGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsKICAgICBpZiAoaXRlcmF0b3IgIT0g
bV9jb3BpZWRHZXRQdXRJbmZvcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRl
cmF0b3ItPnZhbHVlKTsKKyAgICAvLyBPT1BTCiAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKICAgICBtX2NvcGll
ZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1dEluZm8ub3BlcmFuZCgpKTsKICAgICByZXR1cm4g
Z2V0UHV0SW5mbzsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5M
SU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBi
eXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJp
bmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRl
Y29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJv
ZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmls
ZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJp
dGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQ
cm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQcm9maWxlOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZShPcCBvcCkKIHsKQEAg
LTcyMSw2ICs3MzIsNDYgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9w
UAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDxCeXRlY29k
ZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxv
YWRQdHIoQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOwor
fQorCit0ZW1wbGF0ZSA8Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJG
cm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJS
ZWcgcmVzdWx0KQoreworICAgIGxvYWQzMihBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5r
ZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSAr
IG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDxCeXRlY29kZT4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
c2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKG1fbWV0
YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0
YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDxCeXRl
Y29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoR1BSUmVnIHZh
bHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3Rv
cmU4KHZhbHVlLCBBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQor
Cit0ZW1wbGF0ZSA8Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zm
c2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGFkZFB0cihtX21ldGFkYXRhR1BSLCBUcnVzdGVk
SW1tUHRyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRh
YmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5k
ZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKG1fY29uc3RhbnRzR1BS
LCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvbnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3Vs
dCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODExNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw2ICs1NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVj
dGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBp
ZiAoc3JjLmlzQ29uc3RhbnQoKSkgeworICAgICAgICAvLyBPT1BTCiAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1
ZS5pc051bWJlcigpKQogICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC04NywzNyArODgsMzUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmls
ZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0
OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFsbG9j
YXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmlu
YWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2Nh
dG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBS
ZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJl
ZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CiAKLSAgICBp
ZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRy
dXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3Vs
dFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMp
OwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1
cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwotICAg
ICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BOZXdPYmplY3Q6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIG9m
ZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUo
KSArIG9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJlZyk7CisKKyAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwor
ICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJs
ZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93
Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBlbWl0SW5pdGlhbGl6ZUlubGlu
ZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKKyAgICBtdXRhdG9yRmVuY2UoKm1fdm0p
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKKwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1l
dGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0
dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmpl
Y3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiB9CiAKQEAgLTM3NCw3ICszNzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6Omxs
aW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CiAgICAgcmV0KCk7CiAjZWxzZQpAQCAtNDExLDcgKzQxMCw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC00MzQsOSArNDMyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShj
b25zdCAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9mdW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQ2NSw4ICs0NjQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0
aQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3Rl
eHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBh
ZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXko
dm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BS
KSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHVi
KHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAg
YWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNTE5LDcg
KzUyMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICAv
LyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwg
QWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwg
dGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVt
cCgpOwogCkBAIC01NDMsNyArNTQ0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNv
bnN0IEluc3RydQogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBhZGRKdW1wKGJy
YW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFs
LCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDAp
LCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCkBAIC02MjUs
OCArNjI2LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBi
b29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVt
cChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3Jh
dGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCks
IEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1Qx
LCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRh
cmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1
ZUlzVHJ1dGh5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1
bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTY5NSw3ICs2OTgs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMSwgcmVnVDAp
OwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxzZQogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CkBAIC05MDgsNyArOTEy
LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiB9CiAKQEAgLTkxOCw3ICs5MjMsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Mik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTExNDgsNyArMTE1NCw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzEwLDIzICsxMzE1LDE5IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCog
Y2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVk
U3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
VG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2Ny
ZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJh
cnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2Fs
bGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBy
YXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBA
IC0xMzQyLDcgKzEzNDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJ
bnN0CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0
YVRhZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBG
dW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBK
U0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNh
Y2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BDcmVhdGVUaGlzOjpvZmZzZXRPZkNhY2hlZEZ1bmN0aW9uKCksIGNhY2hl
ZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQ
dHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11
bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVx
dWFsLCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxl
Q2FsbGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzczLDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdz
IHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzg0LDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
cT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVn
VDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJu
VmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwg
cmV0dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxMzk3LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQwOCw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJl
Z1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQyMywxMSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25J
bnN0YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
b25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRH
UFIzKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVy
blZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiB9CkBAIC0xNTY0LDcgKzE1NzAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVn
ZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BSID0gR1BSUmVnOjphcmd1bWVu
dEdQUjA7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlu
a2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChk
c3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIApAQCAtMTY2NCwxMyArMTY3MiwxMiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2Fy
Z2M7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2Nh
dGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2Nh
dGlvblByb2ZpbGUoKSwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QxLCByZWdUMCwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19h
cnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTE2NzksMTQgKzE2ODYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6
ZShjbwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisgICAgbWF0ZXJpYWxpemVQ
b2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1l
dGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDApOwogI2Vsc2UKICAg
ICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxs
b2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApAQCAtMTcyNiw4ICsxNzMyLDkgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9m
aWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAv
LyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hp
bmcgd2hlbiB0aGUgdHlwZSBwcm9maWVsciBpcyBlbmFibGVkLgogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBUeXBlTG9j
YXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVh
bFJlZ2lzdGVyOwogCkBAIC0xODIxLDggKzE4MjgsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2df
c2hhZG93X2NoaWNrZW5fdGFpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9m
bG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09Q
UzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdo
ZW4gdGhlIHVzaW5nIHRoZSBjb250cm9sIGZsb3cgcHJvZmlsZXIuCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlQ29udHJvbEZsb3c+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAg
ICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9IG1ldGFkYXRhLm1fYmFz
aWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgYmFzaWNCbG9ja0xvY2F0
aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMpOwpAQCAtMTg5Miw3ICsxOTAwLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIG1vdmVWYWx1ZShqc1VuZGVm
aW5lZCgpLCByZXN1bHRSZWdzKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVn
cyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCkBAIC0xOTE4
LDcgKzE5MjYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0CiAg
ICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0
UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMp
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdFJlZ3MpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgx
LDcgKzgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7
CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwogICAgIH0KIApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFs
U2xvd0Nhc2UoY29uc3QKICAgICAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUpOwogICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIp
OwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0yMDYsNyArMjA2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgICAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1
cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIApAQCAtODc3LDcgKzg3
Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qg
b3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBt
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwo
KSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04ODYsNyArODg3
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBv
cHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
aW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgp
LCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0
dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04OTYs
NyArODk4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAg
IGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0
dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC05MDYsNyArOTA5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwg
YXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEs
IGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkxNiw3ICs5
MjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50
MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0
ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTExNzMsNyArMTE3OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRf
YnlfaWQoY29uc3QgSW4KICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEyNDIsNyArMTI0Nyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTI4Niw3
ICsxMjkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCkBAIC0xMzIwLDcgKzEzMjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEzNDYsNyArMTM1MSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRS
ZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0x
Mzg5LDcgKzEzOTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
CiAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKQEAgLTE0NzQsNyArMTQ3OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGkKICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0yMzc1LDcgKzIzODAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yODk4LDcgKzI5MDMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0
QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IApAQCAtMjk2NCw3ICsyOTY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2Zp
ZWxkKGNvbgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRP
ZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5
ODYsNyArMjk5MSw2IEBAIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3AK
IHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9k
ZTsKQEAgLTMwMDIsNyArMzAwNiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4
dChjb25zdCAKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0
aGUgbW9zdCBjb21tb24gbW9kZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBp
dCBpZiB3ZSBwcm9maWxlIGl0IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVt
ZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVN
b2RlKSB7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1f
ZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0
dXJlTW9kZSkgewogICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOwogICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAg
ICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3Mo
ZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjptb2RlU2V0T2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIofkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9k
ZSkpKTsKQEAgLTMxMTUsNyArMzExOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jf
Z2V0X2J5X3ZhbCgKIAogICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0zMTI0LDEwICszMTI4LDkg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRl
R2V0QnlWYWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5
VmFsPigpLCBpdGVyKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVu
YW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNf
cHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0
IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5
cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBT
bG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1l
cmF0b3I7CkBAIC0zMTM2LDcgKzMxMzksOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hh
c19wcm9wZXJ0eUltCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihtb2RlLCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3Mo
Jm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdGlvbk1ldGFkYXRh
KCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0
YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdGlv
bk1ldGFkYXRhKCkpOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywg
cmVnVDAsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVy
ZU1vZGUpKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODExNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQko
d29ya2luZyBjb3B5KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9w
KGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3Ry
dWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29k
ZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0
YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAg
ICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxl
ICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAg
bWV0YWRhdGEodDEsIHQyKQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5l
cSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5
LDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAj
IE1ldGFkYXRhIGluIHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0
MiwgLnNsb3cpCiAgICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQot
ICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRh
dGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQy
KQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTgg
QEAgZW5kKQogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBk
YXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRh
dGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBl
bmQKLQogICAgIG1ldGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIElu
dDMyVGFnLCAub3BOZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BO
ZWdhdGVTbG93CiAgICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2Zp
bGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmls
ZUludCwgdDUsIHQzKQogICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90
SW50OgogICAgIGJpYSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgw
MDAwMDAwLCB0MQotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisg
ICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwg
dDUsIHQzKQogICAgIHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEw
ICsxMTA3LDYgQEAgZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUs
IG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24p
CiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1h
Y3JvIGFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0
c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBn
ZXQobV9yaHMsIHQyKQogICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcg
QEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0
MiwgSW50MzJUYWcsIC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3Ay
Tm90SW50Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludElu
dCwgdDUsIHQyKQogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0
aW9uQW5kU3RvcmUodDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBA
IC0xMTM2LDEyICsxMTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFt
ZSwgb3AKICAgICAgICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0Mywg
TG93ZXN0VGFnLCAub3AxTm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRh
ZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAg
ICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxl
TnVtYmVySW50LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5v
cDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQx
LCB0MywgZnQxCi0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIp
CisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZU51bWJlck51bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAg
Z2V0KG1fZHN0LCB0MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0
MSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAg
IyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQg
aXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0
MywgTG93ZXN0VGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50
TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBB
cml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAg
ICAgICBmaWkyZCB0MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDAp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEw
NTEsMTAgKzEwNTEsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3Ry
CiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlv
bikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAg
bWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxl
OjptX2JpdHNbdDJdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAg
ICAgICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpA
QCAtMTA2NCw3ICsxMDYwLDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0
LCBpbgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51
bWJlclRhZywgdDEKICAgICAgICAgc3RvcmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBk
YXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0
aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAg
ZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMTI5LDExICsxMTI1LDYgQEAgZW5kKQogCiAK
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFBy
b2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAg
Z2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwg
dDMpCiAgICAgbWV0YWRhdGEodDEsIHQyKQpAQCAtMTE0MSwxMiArMTEzMiwxMiBAQCBsbGludE9w
V2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZm
ZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAg
IHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0
aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQ0KQogICAgIHJldHVybih0
MykKIC5vcE5lZ2F0ZU5vdEludDoKICAgICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNs
b3cKICAgICB4b3JxIDB4ODAwMDAwMDAwMDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2Zp
bGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVn
YXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQxLCB0NCkKICAgICByZXR1cm4odDMpCiAKIC5vcE5l
Z2F0ZVNsb3c6CkBAIC0xMTU5LDEwICsxMTUwLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9y
ZShvcGNvZGVOYW1lLCBvcAogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUl
LCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0
dXJuKQogICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0
eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5k
Ci0KICAgICAgICAgZ2V0KG1fcmhzLCB0MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCkBAIC0xMTcyLDcgKzExNTks
NyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdl
dChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5z
bG93LCB0MikKIAotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50
LCB0NSwgdDQpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTgy
LDEwICsxMTY5LDEwIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AK
ICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRh
ZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxl
TnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3Ry
dWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgam1wIC5vcDFO
b3RJbnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQ
cm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEs
IGZ0MQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEy
MDEsNyArMTE4OCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AK
ICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25k
IGlzIGRlZmluaXRlbHkgbm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6
IHQxLCBudW1iZXJUYWcsIC5zbG93Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVt
YmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0
aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAg
ICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShy
ZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTI1MDIsNiArMjUwMiwxNyBAQCBtYWNy
byBub3RTdXBwb3J0ZWQoKQogICAgIGVuZAogZW5kCiAKKworbWFjcm8gdXBkYXRlVW5hcnlBcml0
aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAl
b3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAor
ICAgIG9yaCB0eXBlLCBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKworbWFj
cm8gdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEs
IHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmls
ZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgQmluYXJ5QXJpdGhQcm9maWxlOjptX2Jp
dHNbdGVtcF0KK2VuZAorCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRoZSBYODZfNjRf
V0lOIGNvbmRpdGlvbiBoZXJlLCBzaW5jZSBXRUJBU1NFTUJMWSBzaG91bGQgYWxyZWFkeSBiZSBm
YWxzZSBvbiBXaW5kb3dzCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjAzNzE2CiBpZiBXRUJBU1NFTUJMWSBhbmQgbm90IFg4Nl82NF9XSU4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2
aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVf
Q09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3RhdGljIHZv
aWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYg
bWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlB
cml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICBVbmFy
eUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKICAgICBw
cm9maWxlLm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigp
IHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436449</attachid>
            <date>2021-08-25 17:56:47 -0700</date>
            <delta_ts>2021-08-25 19:00:12 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>135323</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNiArNDY3LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUg
TElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7
IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRh
Lm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRl
Y29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5l
IExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7
IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRh
Lm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVj
b2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygp
OwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkg
ewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpA
QCAtNTI5LDE0ICs1NDIsMTQgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0
ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQot
ICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTkso
T3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19X
SVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5l
Z2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAg
ICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTkso
T3BKbmVxUHRyKQogCkBAIC0zMzE4LDEzICszMzMxLDEzIEBAIEJpbmFyeUFyaXRoUHJvZmlsZSog
Q29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAg
ICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wQWRkPigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfbXVsOgotICAgICAgICBy
ZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BTdWI+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kaXY6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzMzYsMTEg
KzMzNDksMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0aAogewog
ICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAg
ICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9w
SW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMt
PmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bf
ZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzMywxNiArMjMzLDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFz
SW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRy
YXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJl
Z2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYmFj
ayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlzIGB0aGlz
YCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50
KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKLQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVt
cG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAgIHJldHVy
biByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAtMjY3LDYg
KzI1Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldElDU3RhdHVzTWFwKElDU3RhdHVzTWFwJiBy
ZXN1bHQpOwogICAgIAogI2lmIEVOQUJMRShKSVQpCisgICAgLy8gT09QUzogbW92ZSBhcml0aG1l
dGljIElDcyBhbmQgc3dpdGNoIHRhYmxlcyBvdXQgb2YgaGVyZS4KICAgICBzdHJ1Y3QgSklURGF0
YSB7CiAgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKIApAQCAtNDc4LDYg
KzQ2OSw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJv
ZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFs
dWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxl
cygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgp
ID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1
c2VKSVQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
NSw2ICsxNzUsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdp
c3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
c1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBj
b25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRS
ZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2Nv
bnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBjb25z
dCBGaXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjsgfQogCkBAIC0yMDcsNiArMjA4LDE0IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNj
cmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2Vy
U2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucygpIGNvbnN0OworICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygp
LmF0KGluZGV4KS5wdHIoKTsgfQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3Ry
dWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgICAgIGNvbnN0
IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rp
b24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24g
Pj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNFbmQpOwor
ICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CiAK
ICAgICB1bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxl
ZUxvY2FsczsgfQogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZh
cnM7IH0KQEAgLTQxMCw2ICs0MTksOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bnN0cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVjdGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzczsKIAorICAgIC8vIE9PUFM6IGJpbmQg
YSBiZXR0ZXIgcGxhY2UgdG8gc3RvcmUgdGhpcyBzdHVmZj8KKyAgICBWZWN0b3I8QmluYXJ5QXJp
dGhQcm9maWxlPiBtX2JpbmFyeUFyaXRoUHJvZmlsZXM7CisgICAgVmVjdG9yPFVuYXJ5QXJpdGhQ
cm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAg
IERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKQEAgLTQ1NSw2ICs0NjcsMjggQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rp
b24ub2Zmc2V0KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJ
bnN0cnVjdGlvbiogcGMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBP
ZmZzZXQob2Zmc2V0KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2Zp
bGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9iaW5hcnlBcml0aFByb2Zp
bGVzLnNpemUoKTsKKyAgICAgICAgbV9iaW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5hcnlB
cml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdW5z
aWduZWQgYWRkVW5hcnlBcml0aFByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVz
dWx0ID0gbV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX3VuYXJ5QXJpdGhQ
cm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxl
KHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVu
YXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBt
X3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQogCiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGlu
ZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDEsOSArMTAxLDE4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzX29mZnNldDE2VGFibGVT
aXplOwogICAgIH0KIAorCiAgICAgdXNpbmcgT2Zmc2V0MzIgPSB1aW50MzJfdDsKICAgICB1c2lu
ZyBPZmZzZXQxNiA9IHVpbnQxNl90OwogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZT4K
KyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYgb3Bjb2Rl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQpOworICAgICAgICB1aW50cHRy
X3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bjb2RlOjpv
cGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07CisgICAgICAgIHJl
dHVybiBiYXNlVHlwZU9mZnNldCArIHNpemVvZihPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5t
X21ldGFkYXRhSUQ7CisgICAgfQorCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX29m
ZnNldFRhYmxlRW50cmllcyA9IE5VTUJFUl9PRl9CWVRFQ09ERV9XSVRIX01FVEFEQVRBICsgMTsg
Ly8gb25lIGV4dHJhIGVudHJ5IGZvciB0aGUgImVuZCIgb2Zmc2V0OwogCiAgICAgLy8gTm90IHRv
IGJyZWFrIGFsaWdubWVudCBvZiAzMmJpdCBvZmZzZXQgdGFibGUsIHdlIHJvdW5kIHVwIHNpemUg
d2l0aCBzaXplb2YoT2Zmc2V0MzIpLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw2IEBAIHRlbXBsYXRlPHVuc2lnbmVkIG51bWJlck9mQnVja2V0c0FyZ3VtZW4KIHN0cnVj
dCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJl
ck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0c0FyZ3VtZW50OwogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHMgPSAxOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgYnVja2V0SW5kZXhNYXNrID0gbnVtYmVyT2ZCdWNrZXRzIC0gMTsKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVy
T2ZCdWNrZXRzICsgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHM7CiAgICAgCiAgICAgVmFsdWVQcm9m
aWxlQmFzZSgpCkBAIC0xMzQsNyArMTMzLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ugewog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAg
ICBFbmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAg
U3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE1Niw2ICsxNTUs
NyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBW
YWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czww
PiB7CiAgICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNr
ZXRzPDA+KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQog
fTsKIAogc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1
ZVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MTE3NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTk4LDcgKzE1OTgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFVuYXJ5CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wTm90Pihkc3QsIHNyYyk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICBPcE5lZ2F0ZTo6
ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CisgICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMs
IGRzdCwgc3JjLCB0eXBlLCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfYml0bm90OgogICAgICAgICBlbWl0VW5hcnlPcDxP
cEJpdG5vdD4oZHN0LCBzcmMpOwpAQCAtMTY5NiwxMyArMTY5NiwxMyBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFR5cGVPCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0SW5jKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcEluYzo6ZW1pdCh0aGlz
LCBzcmNEc3QpOworICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFk
ZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVjKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAg
ICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QpOworICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0Rz
dCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNE
c3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNjgyLDcgKzY4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmVn
aXN0ZXJJRCo+CiAgICAgICAgIGVtaXRCaW5hcnlPcChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcykKICAgICAgICAg
ewotICAgICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBl
cyk7CisgICAgICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5
cGVzLCBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICAgICAg
cmV0dXJuIGRzdDsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL01ldGFkYXRhLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvTWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0
MiwyMiBAQCBjbGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJldHVy
biBpZiBlbXB0eT8KIAotICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcykK
KyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGdlbmVyYXRlT2Zmc2V0
T2YpCiAgICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAg
ICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4
fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVm
aXh9fTsiCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRG
aWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlLCBmYWxzZSl9XG4je3ByZWZpeH19OyIKICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9f
c30gbV8je2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmll
bGQudG9fcworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiI3twcmVmaXh9I3t0eXBlLnRv
X3N9IG1fI3tmaWVsZE5hbWV9OyIKKyAgICAgICAgICAgICAgICAgICAgaWYgZ2VuZXJhdGVPZmZz
ZXRPZgorICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArICJcbiIgKyAic3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsx
Li5dfSgpIHsgcmV0dXJuIE9GRlNFVE9GKE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisg
ICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICByZXN1bHQKICAgICAg
ICAgICAgICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVuZAog
Ci0gICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcykKKyAg
ICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzLCB0cnVlKQog
CiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBA
aW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJl
dmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBt
X2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsK
KyAgICBtX2dsb2JhbE9iamVjdENvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VmFsdWU6Okdsb2JhbE9iamVjdCk7CiB9CiAKIEpJVDo6fkpJVCgpCkBAIC0xMTMs
NyArMTE0LDcgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0KgogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJl
c3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KQordm9pZCBKSVQ6OmVtaXRO
b3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCkKIHsKICAgICBhZGRTbG93
Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHBvaW50ZXJUb1NldCwgV2F0Y2hwb2ludFNl
dDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CkBA
IC02NzUsMTcgKzY3NiwxNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
CiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2Nv
ZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgLy8gT09QUzogTWF5YmUgdGhpcyBzaG91
bGQgYmUgZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJsb2NrPworICAgIERGRzo6Q2FwYWJpbGl0eUxl
dmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAg
c3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAgICBt
X2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGlu
ZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5D
b21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAg
ICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1p
dFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC03NjEs
NyArNzYxLDEwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KIAog
ICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAg
ICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2Zp
bGluZygpKSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX2NvZGVC
bG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAx
KSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVkVmVj
dG9yOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlZ1QyKTsKKwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1
Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwog
ICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBh
Y3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCkBAIC03NzcsNiArNzgwLDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAg
ICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2Vu
ZGlmCiAgICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+
dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAg
ICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50ICog
c2l6ZW9mKFZhbHVlUHJvZmlsZSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
QEAgLTk5MCw3ICs5OTQsNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICJCYXNlbGluZSBK
SVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fYXJpdHlDaGVjayk7Ci0gICAgbV9qaXRDb2RlID0g
YWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklUKSk7CisgICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBCYXNlbGlu
ZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaykpOwogCiAgICAgaWYgKEpJVEludGVybmFs
Ojp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBh
dCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5z
dGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVu
dGFnZ2VkUHRyKCkpOwpAQCAtMTAwNSw2ICsxMDA5LDggQEAgQ29tcGlsYXRpb25SZXN1bHQgSklU
OjpmaW5hbGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5rQnVmZmVyLT5ydW5NYWluVGhyZWFkRmlu
YWxpemF0aW9uVGFza3MoKTsKIAorICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElD
cyk7CisKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxv
Y2stPm1fbG9jayk7CiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENv
ZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDI1IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
CisgICAgY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVzaW5n
IENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICAgICAgZW51bSBjbGFzcyBWYWx1ZSB7CisgICAg
ICAgICAgICBHbG9iYWxPYmplY3QKKyAgICAgICAgfTsKKworICAgICAgICBDb25zdGFudCBhZGQo
VmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1f
Y29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZCh2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBWZWN0b3I8VHlwZXM+IG1fY29uc3RhbnRzOworICAgIH07CisKICAgICBlbnVtIE9w
Y29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOwpA
QCAtMzA4LDYgKzMyNywyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlmCiAK
KyAgICAgICAgdGVtcGxhdGUgPEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWRQdHJGcm9tTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAg
IHRlbXBsYXRlIDxCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkMzJGcm9tTWV0YWRhdGEoY29u
c3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRl
IDxCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29k
ZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPEJ5dGVjb2Rl
PgorICAgICAgICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYs
IHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDxCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXpl
X3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVk
IGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChH
UFJSZWcpOworCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVy
KQogICAgICAgICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRv
SGFuZGxlcik7CkBAIC0zNzYsMTAgKzQxMywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ly8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5k
IHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAgICAgICAgLy92b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNv
bnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVS
ZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBA
IC03MjYsNyArNzYzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tf
dHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNzc5LDcgKzgxNSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5v
dGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUo
R1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hw
b2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFy
aWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1
ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKTsKQEAgLTc4OCw2ICs4MjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lk
IGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdp
c3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAg
ICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJv
b2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC04MjksMjYgKzg2
Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUg
PT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNv
bHZlVHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9HRVRf
RlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNv
bHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShE
RUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9GUk9N
X1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBj
aGFyKiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lz
VXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAgICB7
Ci0gICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0
byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2ZWRD
bG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2
ZV9zY29wZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xv
c3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNkZWZp
bmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZl
X3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9S
RVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNM
QVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5
cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhzdGQ6
Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJl
c29sdmVTY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0
aHVua05hbWUpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1RydXRoeUdlbmVyYXRv
cihWTSYpOwpAQCAtMTA1MiwxMSArMTA3MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBtX2Nh
bkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7
IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAgICAgIGJvb2wgc2hvdWxk
RW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsgfQogI2Vsc2UK
ICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAg
IGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAg
ICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlv
biB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFsbCBjb2RlIGdldHMgcHJv
ZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNl
OyB9CkBAIC0xMDY0LDEzICsxMDgxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3Rh
dGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1
dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNo
ZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0g
ICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRo
ZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xv
dyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0
UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJp
dGhQcm9maWxlKEJpbmFyeU9wKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRl
cjsKIApAQCAtMTA5Nyw5ICsxMTA3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29y
ZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9j
b3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQ
cm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNl
cHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxG
cmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTExMzMsMTEg
KzExNDAsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1
Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRv
TWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsK
LSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1f
c2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29k
ZTsKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRyPEJhc2Vs
aW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0
YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVj
dENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKKyAg
ICAgICAgR1BSUmVnIG1fbWV0YWRhdGFHUFI7CisgICAgICAgIEdQUlJlZyBtX2NvbnN0YW50c0dQ
UjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50
Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzIwLDcgKzMyMSw4IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0
OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAg
fQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdU
MSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJv
IDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3Qg
SW50LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDog
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIxLDgg
QEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwot
ICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFBy
b2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtl
ZENvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
Z2F0ZT4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9tYXRo
SUNzLmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElD
LmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG5lZ2F0ZUlDKTsKICAgICAvLyBGSVhNRTogaXQgd291
bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRo
ZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihu
ZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVk
LCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CkBAIC05MDIsOCArOTA2LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMg
PSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0
aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tX3Byb2ZpbGVJbmRleCk7
CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9tYXRoSUNzLmFkZEpJVEFkZElDKGFyaXRoUHJvZmls
ZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFk
ZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQpAQCAt
OTQ4LDEwICs5NTIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElD
PAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUo
KnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVD
b2RlKSB7CiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMt
PmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwog
ICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywg
YXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmls
ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5v
blByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNS
ZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDIwLDEwICsxMDI1LDExIEBAIHZvaWQgSklUOjpl
bWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVy
YW5kLmlzQ29uc3QoKSkKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBy
aWdodFJlZ3MpOwogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1h
dGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQ
Uik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQot
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywg
cmlnaHRSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3Mp
OwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwNjAsMTMgKzEwNjYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRN
YXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogI2VuZGlmCiAKICAgICBVbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRo
UmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9u
X0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9u
X0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBhcml0aFBy
b2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1h
dGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1p
Yz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNs
b3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExMjUsMTMgKzExMzIsMTQgQEAgdm9pZCBKSVQ6OmVt
aXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogI2VuZGlmCiAKICAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93
UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9u
X0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklU
T3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBy
ZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+
KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRo
SUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJl
cGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAg
YXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTcxLDcgKzExNzksNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICBCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmco
KSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+
KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBhcml0aFBy
b2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubV9wcm9maWxlSW5kZXgpOwogCiAgICAgU25pcHBldE9w
ZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAg
U25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29u
ZCgpKTsKQEAgLTEyMTYsOCArMTIyNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJ
bnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFk
ZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fbWF0aElD
cy5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5h
ZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+
KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9w
ZXJhdGlvblZhbHVlTXVsKTsKIH0KQEAgLTEyMzIsOCArMTI0MCw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0g
bV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQ
cm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkpOworICAgIEpJVFN1YklDKiBz
dWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
U3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
KS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOwogfQogCkBAIC00MDQsNyArNDA0LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdU
MCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKIAogICAgIGZhc3RDYXNlLmxp
bmsodGhpcyk7CkBAIC00OTMsNyArNDkzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jf
bmV4dChjb25zdCBJbgogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwog
ICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwog
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7
CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQpAQCAtNTEyLDcgKzUx
Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1Zh
bHVlUmVncyB7IHZhbHVlR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKIAogICAgICAgICBpdGVyYXRp
b25Eb25lLmxpbmsodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENv
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAko
cmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0OCw2ICsyNDgsNDEgQEAgcHJvdGVjdGVkOgogICAgIENvZGVS
ZWY8SlNFbnRyeVB0clRhZz4gbV9yZWY7CiB9OwogCitjbGFzcyBNYXRoSUNIb2xkZXIgeworcHVi
bGljOgorICAgIHZvaWQgYWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCisgICAgewor
ICAgICAgICBtX2FkZElDcyA9IFdURk1vdmUob3RoZXIubV9hZGRJQ3MpOworICAgICAgICBtX211
bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAgICAgICBtX25lZ0lDcyA9IFdURk1v
dmUob3RoZXIubV9uZWdJQ3MpOworICAgICAgICBtX3N1YklDcyA9IFdURk1vdmUob3RoZXIubV9z
dWJJQ3MpOworICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7
IH0KKyAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUpIHsgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisgICAgSklUU3Vi
SUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVy
biBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJ
QyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5hZGQo
YXJpdGhQcm9maWxlKTsgfQorCisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3Is
IEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRBZGRJQyogYWRkTWF0aElD
KEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUQWRkSUMocHJvZmls
ZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTXVsR2VuZXJh
dG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE11bElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQ
cm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRNdWxJQyhwcm9maWxlKTsgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVROZWdHZW5lcmF0b3I+Ojp2YWx1ZT46
OnR5cGU+CisgICAgSklUTmVnSUMqIGFkZE1hdGhJQyhVbmFyeUFyaXRoUHJvZmlsZSogcHJvZmls
ZSkgeyByZXR1cm4gYWRkSklUTmVnSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPEdlbmVyYXRvciwgSklUU3ViR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJ
VFN1YklDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBh
ZGRKSVRTdWJJQyhwcm9maWxlKTsgfQorCitwcml2YXRlOgorICAgIEJhZzxKSVRBZGRJQz4gbV9h
ZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKKyAgICBCYWc8SklUTmVnSUM+IG1f
bmVnSUNzOworICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Cit9OworCiBERUNMQVJFX0FMTE9D
QVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihEaXJlY3RKSVRDb2RlKTsKIGNsYXNzIERpcmVjdEpJ
VENvZGUgOiBwdWJsaWMgSklUQ29kZVdpdGhDb2RlUmVmIHsKICAgICBXVEZfTUFLRV9TVFJVQ1Rf
RkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoRGlyZWN0SklUQ29kZSk7CkBAIC0y
NjYsNiArMzAxLDEyIEBAIHByaXZhdGU6CiAgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3dp
dGhBcml0eUNoZWNrOwogfTsKIAorY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVj
dEpJVENvZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgeworICAgIEJhc2VsaW5lSklUQ29kZShDb2Rl
UmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5
Q2hlY2spCisgICAgICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlD
aGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgeyB9Cit9OworCiBjbGFzcyBOYXRpdmVK
SVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CiBwdWJsaWM6CiAgICAgTmF0aXZl
SklUQ29kZShKSVRUeXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
cy5oCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTMgKzUzLDM4IEBAIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IEoKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNP
cGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4g
c3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOwor
ICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihz
cmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0Rv
dWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudElu
dChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMu
aXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KSB7CisgICAgICAgIC8vIE9PUFM6
IGZpbmQgYSB3YXkgdG8gYXNzZXJ0IHRoYXQgYWxsIGxpbmsgdGltZSBjb25zdGFudHMgYXJlIGNl
bGxzLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzQ2VsbCgpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpn
ZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICBBU1NFUlQoc3Jj
LmlzQ29uc3RhbnQoKSk7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMp
OworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5r
VGltZUNvbnN0YW50KTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoc3JjKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQpAQCAtMjAz
LDcgKzIyOCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKIAog
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93bkNl
bGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMjMsNyArMjQ4
LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZv
aWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNv
ZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwog
ICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3Vs
dCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAg
LTIzMyw3ICsyNTgsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50
CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1
bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1l
dGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlv
biwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwor
ICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5
dGVjb2RlSW5kZXgpOwpAQCAtMzExLDI5ICszMzYsMzQgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRD
b25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29u
c3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5n
KGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQot
aW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFs
dWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKTsKLQotICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9u
bHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4K
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmls
ZS5tX2J1Y2tldHMpOwotI2Vsc2UKLSAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlw
dG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUu
bV9idWNrZXRzKTsKLSAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3It
PmFzQml0cy5wYXlsb2FkKTsKLSAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRv
ci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKLX0KKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Cit9CisKKy8vIE9PUFMKKy8v
aW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFs
dWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKy8veworLy8gICAgQVNTRVJUKHNob3VsZEVt
aXRQcm9maWxpbmcoKSk7CisvLworLy8gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJh
dGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAorLy8gICAg
Ly8gc3RvcmUuCisvLyNpZiBVU0UoSlNWQUxVRTY0KQorLy8gICAgc3RvcmU2NCh2YWx1ZS5ncHIo
KSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyNlbHNlCisvLyAgICBFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vICAgIHN0b3JlMzIodmFsdWUucGF5bG9h
ZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOworLy8gICAgc3RvcmUzMih2YWx1
ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOworLy8jZW5kaWYKKy8vfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2Ft
ZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVl
LCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5
dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzQxLDI0ICszNzEsMjUgQEAgaW5saW5lIHN0ZDo6ZW5h
YmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFk
YXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRl
Y29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAgIGlmICghc2hvdWxkRW1p
dFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkp
LCB2YWx1ZSk7CisgICAgcHRyZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9m
ZnNldEZvcjxCeXRlY29kZT4obV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVBy
b2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBB
ZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
LWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZh
bHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7Ci19CisvL2lubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmls
ZSwgR1BSUmVnIHJlc3VsdFJlZykKKy8veworLy8gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2
YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworLy99CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRl
KE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0
IEJ5dGVjb2RlJiBieXRlY29kZSwgR1BSUmVnIHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0K
ICNlbmRpZgogCkBAIC0zODgsOCArNDE5LDggQEAgaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNo
b29zZUFycmF5TW9kZQogICAgICAgICByZXR1cm4gYXJyYXlNb2Rlc0luY2x1ZGVJZ25vcmluZ1R5
cGVkQXJyYXlzKGFycmF5TW9kZXMsIGNhcGFiaWxpdHkpOwogICAgIH07CiAKLSAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgIHByb2ZpbGUtPmNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG1fY29kZUJsb2NrKTsKKyAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fcHJvZmlsZWRDb2RlQmxvY2stPm1fbG9jayk7CisgICAgcHJv
ZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgQXJyYXlNb2RlcyBhcnJheU1vZGVzID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1v
ZGVzKGxvY2tlcik7CiAgICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBEb3VibGVT
aGFwZSkpCiAgICAgICAgIHJldHVybiBKSVREb3VibGU7CkBAIC00MjAsNyArNDUxLDcgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7
CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUo
VHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC01MzYsNyArNTY3LDcg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQog
ewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlz
S25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01NDYsNyArNTc3LDcg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBS
ZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcp
KSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpA
QCAtNTU0LDExICs1ODUsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFu
dEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50
KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01ODQsNyArNjEw
LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VS
VChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgICAgICAvLyBPT1BTOiBo
YW5kbGUgbGluayB0aW1lIGNvbnN0YW50cyBoZXJlLi4uCisgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBnZXRDb25zdGFudE9wZXJhbmQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigp
KQogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSks
IGRzdCk7CiAgICAgICAgIGVsc2UKQEAgLTYwNiwxMSArNjMzLDYgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
MiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkg
JiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJl
Z2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBA
IC02MzUsNyArNjU3LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
UmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2Rl
QmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02NzcsMzAg
KzY5OSw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAg
ICBpZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVC
bG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2Rl
KQotewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhh
c2hNYXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3Bp
ZWRHZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0
UHV0SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1
ZSk7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdl
dFB1dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBK
SVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRf
dCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8
PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAg
IGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlm
IChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVy
biBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2Nv
cGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJp
dGhQcm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1w
T2Zmc2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC03MjEs
NiArNzIwLDQ2IEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAg
ICByZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8Qnl0ZWNvZGU+CitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRy
KEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5v
ZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwor
dGVtcGxhdGUgPEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDMyRnJvbU1l
dGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJl
c3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29k
ZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZz
ZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDgoQWRkcmVzcyhtX21ldGFkYXRh
R1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJs
ZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8Qnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwg
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlOCh2
YWx1ZSwgQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVt
cGxhdGUgPEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2lu
dGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwg
R1BSUmVnIHJlc3VsdCkKK3sKKyAgICBhZGRQdHIobV9tZXRhZGF0YUdQUiwgVHJ1c3RlZEltbVB0
cihtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
Ojpsb2FkQ29uc3RhbnQoSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBH
UFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhtX2NvbnN0YW50c0dQUiwgc3Rh
dGljX2Nhc3Q8dWludHB0cl90Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7
CisgICAgbG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgxMTc2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQsNiArNTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24q
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgaWYgKHNy
Yy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgLy8gT09QUwogICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNO
dW1iZXIoKSkKICAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtODcsMzcgKzg4LDM1IEBAIHZvaWQgSklU
OjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19v
YmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3Ry
dWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxs
b2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3Ig
YWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2Jq
ZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0
ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSBy
ZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFh
bGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVk
SW1tUHRyKG51bGxwdHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcs
IEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAg
ICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wTmV3T2JqZWN0OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBvZmZzZXRP
ZkFsbG9jYXRvcigpLCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wTmV3T2JqZWN0OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBv
ZmZzZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVSZWcpOworCisgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBl
bWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwg
YWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2Vz
KTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CisgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAg
IFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0
YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7
CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAm
dm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogfQogCkBAIC0zNzQsNyArMzczLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0
IEluc3RydWN0aW9uKgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwor
ICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgp
OwogICAgIHJldCgpOwogI2Vsc2UKQEAgLTM4NSw3ICszODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJH
ZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1p
dFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQxMCw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC00MzQsOSArNDMyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShj
b25zdCAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9mdW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQ2NSw4ICs0NjQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0
aQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3Rl
eHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBh
ZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXko
dm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BS
KSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHVi
KHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAg
YWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcg
KzQ4MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBA
IC01MTksNyArNTIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1
YwogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRy
KEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVp
Z24gPSBqdW1wKCk7CiAKQEAgLTU0Myw3ICs1NDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
X251bGwoY29uc3QgSW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBj
aGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFk
ZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJn
ZXQpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAK
QEAgLTYyNSw4ICs2MjYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1
Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Qy
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29u
c3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAg
ICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0
R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElT
dHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAg
ICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQw
LDcgKzY0Myw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZU
TCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywg
d2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
CkBAIC02OTUsNyArNjk4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1
Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJv
dywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vs
c2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIy
OwpAQCAtNzExLDcgKzcxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3Ry
dWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkK
IHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtOTA4LDcgKzkxMiw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogfQogCkBAIC05MTgsNyArOTIzLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0
ZXEoY29uc3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVn
VDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xMTQ4LDcgKzExNTQsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTMxMCwyMyArMTMxNSwxOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNh
Y2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0
cnVjdHVyZUlELCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRv
VGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVh
dGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJy
aWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxl
ZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFy
ZURhdGFSZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAt
MTM0Miw3ICsxMzQzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5z
dAogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVX
aXRoUHJvdG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFU
YWcpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVu
Y3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNo
ZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wQ3JlYXRlVGhpczo6b2Zmc2V0T2ZDYWNoZWRGdW5jdGlvbigpLCBjYWNoZWRG
dW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRy
KEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0
aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVh
bCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0aXBsZUNh
bGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM3Myw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVn
VDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIsNyArMTM4NCw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+
KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
cmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1Qw
KTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZh
bHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
dHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyArMTM5Nyw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1Qx
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzE0MDgsOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0MjMsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdpc3RlciBj
b25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5z
dGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29u
c3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BS
Myk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5W
YWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogfQpAQCAtMTU2NCw3ICsxNTcwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4
cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IEdQUlJlZzo6YXJndW1lbnRH
UFIwOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtl
ZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTE2NjQsMTMgKzE2NzIsMTIgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Fy
cmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
c1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdj
OwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRp
b25Qcm9maWxlKCksIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMSwgcmVnVDAsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJy
YXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
Njc5LDE0ICsxNjg2LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUo
Y28KICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOworICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRh
ZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QwKTsKICNlbHNlCiAgICAg
ZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9j
YXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE3MjYsOCArMTczMiw5IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmls
ZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8g
T09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5n
IHdoZW4gdGhlIHR5cGUgcHJvZmllbHIgaXMgZW5hYmxlZC4KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0
aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxS
ZWdpc3RlcjsKIApAQCAtMTgyMSw4ICsxODI4LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3No
YWRvd19jaGlja2VuX3RhaQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxv
dyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6
IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVu
IHRoZSB1c2luZyB0aGUgY29udHJvbCBmbG93IHByb2ZpbGVyLgogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAg
QmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2lj
QmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlv
bi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsKQEAgLTE4OTIsNyArMTkwMCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmlu
ZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTkxOCw3
ICsxOTI2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAg
IGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJl
Z3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBy
ZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3
ICs4MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
ICAgICB9CiAKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNs
b3dDYXNlKGNvbnN0CiAgICAgICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eVZhbE9wdGltaXplKTsKICAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsK
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIApAQCAtMjA2LDcgKzIwNiw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICAgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI1MCw3ICsyNTAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgICAgIGNhbGwgPSBhcHBlbmRD
YWxsKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJu
VmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAgLTg3Nyw3ICs4Nzcs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9w
dGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91
bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODg2LDcgKzg4Nyw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0
aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
b3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRl
cl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODk2LDcg
Kzg5OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBp
bnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRl
ciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtOTA2LDcgKzkwOSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
ZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
cHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBh
dHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC05MTYsNyArOTIw
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMy
X3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVy
QnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xMTczLDcgKzExNzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMjQyLDcgKzEyNDcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEyODYsNyAr
MTI5MSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIApAQCAtMTMyMCw3ICsxMzI1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMzQ2LDcgKzEzNTEsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTM4
OSw3ICsxMzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgog
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCkBAIC0xNDc0LDcgKzE0NzksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpCiAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRX
aXRoVGhpc09wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIApAQCAtMTg4NSw2ICsxODkwLDcgQEAgdm9pZCBK
SVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTk5MSw1OSArMTk5Nyw3NyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fcmVzb2x2ZVR5cGU7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVj
b2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jl
c29sdmVUeXBlOwogCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNv
ZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQo
bV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5z
dHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3Owot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0
YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwg
aGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xl
eGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCks
IHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0g
bV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgICAgICBw
dHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgp
Lm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CisKKyAgICAgICAgYXV0byBjbG9zdXJl
VmFyR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJh
dGVPcFJlc29sdmVTY29wZVRodW5rKENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9z
Y29wZSBDbG9zdXJlVmFyIik7CisgICAgICAgIH07CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9H
RU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2Vu
ZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1td
ID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVfR0VO
RVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2Vu
ZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJl
c29sdmVTY29wZVRodW5rKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxp
bmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MiKTsK
ICAgICAgICAgfTsKLSN1bmRlZiBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgorCisgICAgICAgIGF1
dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAg
IHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhzdGQ6Om51bGxvcHQsICJC
YXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7CisgICAgICAgIH07CisKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9m
ZnNldCksIG1ldGFkYXRhR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBj
b2RlOworICAgICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAg
ICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAg
ICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOwor
ICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAgICAgfQogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29w
ZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29s
dmVTY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlz
IGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVj
YXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KKworICAgIENDYWxsSGVscGVycyBqaXQ7CisKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wUmVz
b2x2ZVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0g
cmVnVDc7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2
OyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wUmVzb2x2
ZVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgaml0
LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdU
MywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0
cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKQEAgLTIw
NTIsMjYgKzIwNzYsMjYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09IElu
dmFsaWRHUFJSZWcpIHsKICAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwotICAg
ICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgfQotICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmpl
Y3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNl
LmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZz
ZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2Jh
bE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50
U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAg
ICB9OwogCiAgICAgYXV0byBlbWl0UmVzb2x2ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCBy
ZWdUMCk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09G
RlNFVE9GKE1ldGFkYXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7CiAKLSAgICAgICAg
TGFiZWwgbG9vcCA9IGxhYmVsKCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMiha
ZXJvLCByZWdUMSk7CisgICAgICAgIExhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAgICAg
SnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZWdUMCk7Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAg
ICAgICAgICAgIGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAgICAg
IGppdC5qdW1wKCkubGlua1RvKGxvb3AsICZqaXQpOwogICAgICAgICB9Ci0gICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgIH07CiAKICAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewpAQCAtMjA3OSwxMiAr
MjEwMywxMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNj
b3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAg
ICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmpl
Y3RHUFIpOwotICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsK
LSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhn
bG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5k
aW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQUiwg
cmVnVDApOworICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdU
MSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4
aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKGdsb2Jh
bE9iamVjdEdQUiwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAt
MjA5NCwxMSArMjExOCwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBs
b2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAogICAgICAgICAg
ICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZpcm9u
bWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdU
MywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpCi0gICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9i
amVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAg
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zm
c2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTIxMDYsNyArMjEz
MCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAg
ICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRD
bG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTIxMTYsODMgKzIxNDAsNDUg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7
Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29s
dmVUeXBlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5v
dEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmso
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
KyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVU
eXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID0gQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxz
ZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCBy
ZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCBy
ZWdUMCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OworICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkg
eworICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7CisgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAg
ICAgICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
cik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAg
ICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExl
eGljYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQog
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2Zp
bGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1Yihz
bG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
d0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2
ZV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwog
fQogCi0jZGVmaW5lIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkg
XAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jlc29sdmVf
c2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAg
ICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBl
KSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAot
ICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhyZXNvbHZlVHlw
ZSwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0K
LUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0j
dW5kZWYgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3Io
Vk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBj
YW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIC8vIFRoZSBmYXN0IHBhdGgg
YWxyZWFkeSBwdXNoZWQgdGhlIHJldHVybiBhZGRyZXNzLgogI2lmIENQVShYODZfNjQpCkBAIC0y
MjYyLDYgKzIyNDgsNyBAQCB2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lz
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAv
LyBPT1BTCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAt
MjM3NSw3ICsyMzYyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjQwMywzMSAr
MjM5MCw0MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAg
QVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7
CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkg
PT0gY3VycmVudEluc3RydWN0aW9uKTsKIAorICAgIGF1dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9
IFtdIChWTSYpIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRo
dW5rKENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIp
OworICAgIH07CisKKyAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2Vu
ZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJv
bVNjb3BlVGh1bmsoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTog
b3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAgICBhdXRvIGdlbmVy
aWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6
OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3Bf
Z2V0X2Zyb21fc2NvcGUgZ2VuZXJpYyIpOworICAgIH07CisKICAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJl
Z1Q2OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAot
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsKLSAgICAgICAgdWludHB0cl90KiBv
cGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3Bl
cmFuZCk7Ci0gICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdHJkaWZm
X3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZt
ZXRhZGF0YSk7CisgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVC
bG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0jZGVm
aW5lIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfZ2V0X2Zyb21fc2Nv
cGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSAgICAgICAgfTsKLSN1bmRlZiBHRVRfRlJP
TV9TQ09QRV9HRU5FUkFUT1IKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29w
ZUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFH
UFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BS
KTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFH
UFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5l
cmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICB9Cisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgIGlmIChw
cm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGNvZGUgPSB2bS5nZXRD
VElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGNvZGUg
PSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9y
KTsKKyAgICBlbHNlCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNHZXRGcm9t
U2NvcGVHZW5lcmF0b3IpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRG
cm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtO
YW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRl
T3BHZXRGcm9tU2NvcGVUaHVuayhzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlw
ZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQg
YnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUg
SklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQg
Z2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CkBAIC0yNDM2LDc3ICsyNDMzLDY4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2Vk
Rm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3Mo
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
IAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRh
dGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAg
IGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRh
ZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIp
OwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1
cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0
YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDAp
OwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Cisg
ICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BS
KSB7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpv
ZmZzZXRPZlN0cnVjdHVyZSgpKSwgcmVnVDEpOworICAgICAgICBqaXQubW92ZShzY29wZUdQUiwg
cmVnVDApOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoWmVybywg
cmVnVDEpKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QxKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNr
ID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGlmICghbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRP
RihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAg
ICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldh
dGNocG9pbnQpKSwgcmVnVDMpOwogICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVh
bCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3Rl
ZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKICAgICAKLSAgICBhdXRvIGVtaXRHZXRW
YXJGcm9tUG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAg
IGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRHZXRWYXJGcm9tSW5k
aXJlY3RQb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAg
bG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQogICAgIGF1dG8gZW1pdEdldENsb3N1cmVWYXIg
PSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIG9wZXJhbmRHUFIpIHsKICAgICAgICAgc3Rh
dGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGxzaGlmdDY0
KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGFkZFB0cihzY29wZUdQUiwg
b3BlcmFuZEdQUik7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKKyAgICAgICAgaml0
LmxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQUik7CisgICAgICAgIGppdC5hZGRQ
dHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG9w
ZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVn
VDApOwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgYXV0byBlbWl0Q29k
ZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNv
bHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwg
bV9zdHJ1Y3R1cmUpKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNp
bmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFs
T2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3Ig
dGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayhzY29wZUdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5j
ZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9i
amVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRo
ZSB2YXIgaW5qZWN0aW9uLgogCiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBy
ZWdUMDsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7CiAgICAg
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwogICAgICAgICAgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CiAKLSAgICAgICAgICAgIGppdEFzc2VydChz
Y29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0g
ICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0
cihFcXVhbCwgYmFzZSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmppdEFzc2VydChzY29wZWRM
YW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgeworICAgICAgICAgICAgICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAg
ICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaml0LmJy
YW5jaFB0cihFcXVhbCwgYmFzZSwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0
YSwgbV9vcGVyYW5kKSksIG9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBvZmZzZXQpOwogICAg
ICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091
dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1t
MzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFz
b24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5l
LmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFu
Y2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVRPZmZz
ZXRJc05vdE91dE9mTGluZSk7CisgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluaygmaml0
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9m
ZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0g
ICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwg
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVz
dWx0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBqaXQubmVnMzIob2Zmc2V0
KTsKKyAgICAgICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Cisg
ICAgICAgICAgICBqaXQubG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWln
aHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSks
IHJlc3VsdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEds
b2JhbFZhcjoKQEAgLTI1MTQsMjEgKzI1MDIsMTkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAg
IGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAg
ICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRh
ZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3Bl
cmFuZCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKHJlZ1QwLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIHNsb3dDYXNl
LmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIHJl
Z1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRh
ZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMyk7CiAgICAgICAgICAgICBlbWl0R2V0Q2xv
c3VyZVZhcihzY29wZUdQUiwgcmVnVDMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoK
QEAgLTI1MzgsNzkgKzI1MjQsNTYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
LSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9n
ZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAg
ICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAg
aXNOb3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7
CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1
dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6
dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBq
aXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dElu
Zm8oKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LmFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAg
ICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZh
bHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluaygmaml0KTsK
KworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBqaXQuYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgaXNH
bG9iYWxQcm9wZXJ0eSA9IGppdC5icmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGlzR2xvYmFsUHJv
cGVydHkubGluaygmaml0KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOworICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVl
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9
IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxp
bmsoJmppdCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1
bXAoKSk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAogICAgIHN0YXRpY19hc3Nl
cnQoVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0gMSk7Ci0gICAgc3RvcmU2NChyZWdU
MCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2Zp
bGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFk
YXRhOjpvZmZzZXRPZlByb2ZpbGUoKSkpOwogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwog
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgp
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRj
aEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bSgpLmdldENUSVN0dWIo
c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFn
LCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFU
T1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBc
Ci0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BHZXRGcm9t
U2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAg
IEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcEdldEZyb21TY29w
ZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlXyIgI3Jlc29s
dmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfR0VUX0ZST01f
U0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IK
LQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0
ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxp
bmUgSklUIGJlY2F1c2UKQEAgLTI2NjgsODYgKzI2MzEsNzkgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0
KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihp
bmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEp
OwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJl
Z1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdh
dGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVt
aXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBK
U0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXpl
b2YoUmVnaXN0ZXIpKSk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gY29waWVkR2V0
UHV0SW5mbyhieXRlY29kZSk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJ
bmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFk
YXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAotICAgIGF1
dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0
TG9hZEZvck9wZXJhbmQpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29s
dmVUeXBlKCk7CisKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwg
c3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBz
aW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2Jh
bE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9y
IHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVy
cyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRo
aW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LgorICAgICAgICAgICAgLy8gQWRkaXRpb25hbGx5LCBy
ZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAg
ICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpvZmZz
ZXRPZlN0cnVjdHVyZSgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRy
KFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0
dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QxKSk7CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QyKTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1w
KHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0
cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSk7CisgICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAg
IH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90
LCByZWdUMSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAg
ICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBU
aW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpKTsKKyAgICAgICAgICAgIC8vIE9PUFM6IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZl
cnNpb24gdGhhdCB0b29rIEdQUlJlZ3MKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2Nv
cGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAg
ICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAg
ICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9y
Q29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgZW1p
dFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAgaWYgKCFpc0luaXRp
YWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwg
cmVnVDApOworCisgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNvZGUubV9n
ZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNo
ZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFRE
WiBjaGVja3Mgc3RhdGljYWxseS4KLSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCksIHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZh
bHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigq
b3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsKKyAgICAg
ICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDEpOworCisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBzdG9yZTY0
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxkIGJl
IG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciB2YWx1ZS4KKyAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFJlc29sdmVk
Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAg
ICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEu
bV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9T
Y29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CisgICAgICAgICAgICBl
bWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJbmRl
eChyZWdUMCwgcmVnVDIsIFNjYWxlRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRP
ZlZhcmlhYmxlcygpKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxkIGJlIG5pY2UgdG8g
aGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciBvd25lci92YWx1ZS4KICAgICAg
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yNzYxLDU4
ICsyNzE3LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAg
ICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
Ci0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGlj
YWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVl
IHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAgICAgICBpc0dsb2Jh
bExleGljYWxWYXIubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotCi0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAg
ICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmso
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
KyAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1cmVWYXIvIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21waWxlIHRoaW5ncworICAg
IC8vIHRoYXQgd2F5IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2UndmUgcHJvdmVuIHRoYXQg
aXMgdGhlIHR5cGUgd2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJlVmFyLAorICAgIC8vIGFs
bCBDb2RlQmxvY2tzIHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFyCisgICAgLy8gaWYgdGhl
IHZhciBpbmplY3Rpb24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYgaXQgaXMgZmlyZWQsIHRo
ZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0CisgICAgLy8gbWF0dGVyIHdo
YXQgdHlwZSB3ZSBhcmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PT0gQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcik7CisgICAgZWxzZSBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIpCisgICAgICAgIGVt
aXRDb2RlKFJlc29sdmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgZW1pdENv
ZGUoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVsc2UgewogICAgICAg
ICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJ
bmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1QwKTsKICAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCisgICAgICAg
IEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsodGhpcyk7
CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwog
CiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CiAKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAogICAgICAgICBza2lw
VG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CiAg
ICAgfQogfQogCkBAIC0yODIxLDEzICsyNzcxLDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfdG9fc2NvcGUoY29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVz
b2x2ZVR5cGUoKTsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgUmVz
b2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGlmIChwcm9maWxl
ZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJZiBhbnkgbGlua2VkIENv
ZGVCbG9jayBzYXcgYSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBDb2RlQmxvY2tzIGFyZSBn
dWFyYW50ZWVkCisgICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZhci4KICAgICAgICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAg
ICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29w
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5z
dHJ1Y3Rpb24pOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJndW1lbnRHUFIwLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
CkBAIC0yODk4LDcgKzI4NTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVu
dHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1Qw
KTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zm
c2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjk2NCw3ICsyOTE3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwg
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgp
KSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDAp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5ODYsNyArMjkzOSw2IEBAIHRlbXBs
YXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3AKIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5l
eHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAgLTMwMDIsNyArMjk1NCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKICAgICBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gbW9kZSBz
ZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBwcm9maWxlIGl0IGlu
IHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CisgICAgaWYgKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVyYXRvck1ldGFkYXRhID09
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgewogICAgICAgICBH
UFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5h
cHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjptb2RlU2V0T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIofkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKQEAgLTMxMTUsNyArMzA2
Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCgKIAogICAgIGRv
bmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCkBAIC0zMTI0LDEwICszMDc2LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVyKTsKIH0KIAot
dGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25U
eXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2Rl
LCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9l
bnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBn
ZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0zMTM2LDcgKzMw
ODcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltCiAgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdU
MCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRv
ck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdGlvbk1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMy
KHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5
dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdGlvbk1ldGFkYXRhKCkpOwogCiAgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTAx
MiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIK
IAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9u
KQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3Qs
IG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBt
YWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6
Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEsIHQyKQogICAg
ICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0MCwg
OF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8gcHJlT3Aob3Bj
b2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGluIHQxLCBzcmNE
c3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAgICAgICAgIHN0
b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFBy
b2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAgICBkaXNwYXRjaCgp
CiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBsbGludE9wV2l0
aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUp
Ci0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsg
VW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1ldGFkYXRhKHQ1
LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
KHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BOZWdhdGVTcmNO
b3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0
MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5h
cnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQzKQogICAgIHJl
dHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJpYSB0MSwgTG93
ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQotICAgIHVwZGF0
ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFBy
b2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAgIHJldHVybih0
MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAgZW5kKQogCiBt
YWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdl
ck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJvZmlsZSh0eXBl
KQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0K
ICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMsIHQyKQogICAgICAg
ICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0
b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJl
ZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcsIC5vcDFOb3RJ
bnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0gICAgICAgIGFyaXRo
UHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBn
ZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDMsIHQxLCB0
MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsxMTI0LDEyIEBA
IG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYmlhIHQy
LCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAub3AxTm90SW50
T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAgICAgICAgYXJp
dGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDQpCiAg
ICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5v
cDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0gICAgICAgIGFy
aXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUs
IHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAg
ICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3JvIGJpbmFyeU9w
Q3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRl
ZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBub3QuCiAg
ICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFnLCAuc2xvdwot
ICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRh
dGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIs
IHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0
MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2
aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwNTEsMTAgKzEwNTEsNiBAQCBzdHJp
Y3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29k
ZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1l
dGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9m
aWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDJdCi0gICAgICAg
IGVuZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGxvYWRxIFtjZnIsIHQw
LCA4XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpAQCAtMTA2NCw3ICsxMDYwLDcgQEAg
bWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICBpbnRlZ2Vy
T3BlcmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51bWJlclRhZywgdDEKICAgICAgICAg
c3RvcmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRo
UHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCBBcml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNs
b3c6CkBAIC0xMTI5LDExICsxMTI1LDYgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRh
LCByZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAg
b3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRo
UHJvZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCiAgICAgbWV0YWRhdGEodDEs
IHQyKQpAQCAtMTE0MSwxMiArMTEzMiwxMiBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0
ZSwgT3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAg
IG5lZ2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShB
cml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFy
aXRoUHJvZmlsZUludCwgdDEsIHQ0KQogICAgIHJldHVybih0MykKIC5vcE5lZ2F0ZU5vdEludDoK
ICAgICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JxIDB4ODAwMDAw
MDAwMDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVy
KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1i
ZXIsIHQxLCB0NCkKICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTU5LDEw
ICsxMTUwLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAg
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0
YSh0NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3Jo
IHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fcmhz
LCB0MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZShzaXplLCB0MCwgdDEpCkBAIC0xMTcyLDcgKzExNTksNyBAQCBtYWNybyBiaW5hcnlPcEN1
c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAg
IGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5zbG93LCB0MikKIAotICAgICAgICBw
cm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9m
aWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDQpCiAgICAgICAgIGRp
c3BhdGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTgyLDEwICsxMTY5LDEwIEBAIG1hY3Jv
IGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYnRxeiB0MSwgbnVt
YmVyVGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0
MSwgZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAg
ICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1i
ZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFO
b3RJbnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAg
ICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVO
dW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgIC5vcDFOb3RJbnRS
ZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEyMDEsNyArMTE4OCw3IEBAIG1hY3Jv
IGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVy
YW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIGlzIGRlZmluaXRlbHkgbm90Lgog
ICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93
Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVC
aW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1
LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEK
ICAgICAgICAgZnEyZCB0MSwgZnQxCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyODExNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTI1MDIsNiArMjUwMiwxNyBAQCBtYWNybyBub3RTdXBwb3J0ZWQoKQogICAg
IGVuZAogZW5kCiAKKworbWFjcm8gdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBVbmFyeUFy
aXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKworbWFjcm8gdXBkYXRlQmluYXJ5QXJpdGhQ
cm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAg
ICBvcmggdHlwZSwgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCiAvLyBG
SVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRoZSBYODZfNjRfV0lOIGNvbmRpdGlvbiBoZXJlLCBz
aW5jZSBXRUJBU1NFTUJMWSBzaG91bGQgYWxyZWFkeSBiZSBmYWxzZSBvbiBXaW5kb3dzCiAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNzE2CiBpZiBXRUJBU1NF
TUJMWSBhbmQgbm90IFg4Nl82NF9XSU4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgxMTc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxl
Rm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVz
dWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUg
PSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmls
ZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmcob3Bl
cmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgp
KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436452</attachid>
            <date>2021-08-25 19:00:12 -0700</date>
            <delta_ts>2021-08-25 22:02:03 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>141989</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNiArNDY3LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUg
TElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7
IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRh
Lm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRl
Y29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5l
IExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7
IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRh
Lm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVj
b2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygp
OwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkg
ewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpA
QCAtNTI5LDE0ICs1NDIsMTQgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0
ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQot
ICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTkso
T3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19X
SVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5l
Z2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAg
ICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTkso
T3BKbmVxUHRyKQogCkBAIC0zMzE4LDEzICszMzMxLDEzIEBAIEJpbmFyeUFyaXRoUHJvZmlsZSog
Q29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAg
ICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wQWRkPigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfbXVsOgotICAgICAgICBy
ZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BTdWI+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kaXY6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzMzYsMTEg
KzMzNDksMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0aAogewog
ICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAg
ICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9w
SW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMt
PmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bf
ZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzMywxNiArMjMzLDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFz
SW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRy
YXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJl
Z2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYmFj
ayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlzIGB0aGlz
YCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50
KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKLQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVt
cG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAgIHJldHVy
biByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAtMjY3LDYg
KzI1Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldElDU3RhdHVzTWFwKElDU3RhdHVzTWFwJiBy
ZXN1bHQpOwogICAgIAogI2lmIEVOQUJMRShKSVQpCisgICAgLy8gT09QUzogbW92ZSBhcml0aG1l
dGljIElDcyBhbmQgc3dpdGNoIHRhYmxlcyBvdXQgb2YgaGVyZS4KICAgICBzdHJ1Y3QgSklURGF0
YSB7CiAgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKIApAQCAtNDc4LDYg
KzQ2OSw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJv
ZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFs
dWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxl
cygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgp
ID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1
c2VKSVQoKSk7CkBAIC04MDMsNiArNzk1LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNEZWJ1
Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CiAgICAg
dm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1Z2dlclJlcXVl
c3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVxdWVzdHMpOyB9
CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpOwogICAg
IHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
CShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDYgKzE3NSw3IEBAIHB1Ymxp
YzoKIAogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0
YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIGNvbnN0
IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5k
ZXgoKV07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25z
dGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZp
cnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVn
LnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigp
IHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKQEAgLTIw
Nyw2ICsyMDgsMTQgQEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2Rl
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3Njcmlw
dE1vZGUpOyB9CiAKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkg
Y29uc3Q7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uQXQoQnl0ZWNvZGVJbmRl
eCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5kZXgpLnB0cigpOyB9
CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0
cnVjdGlvbnMoKS5hdCgwKS5wdHIoKTsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25z
RW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihpbnN0cnVjdGlvbnNCZWdpbikgKyBpbnN0cnVjdGlvbnMoKS5zaXplKCkp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0cnVjdGlvbiA+PSBpbnN0cnVjdGlvbnNCZWdp
biAmJiBpbnN0cnVjdGlvbiA8IGluc3RydWN0aW9uc0VuZCk7CisgICAgICAgIHJldHVybiBpbnN0
cnVjdGlvbiAtIGluc3RydWN0aW9uc0JlZ2luOworICAgIH0KIAogICAgIHVuc2lnbmVkIG51bUNh
bGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5z
aWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtNDEwLDYgKzQx
OSw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBt
X2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFjZSB0byBz
dG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5
QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0
aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBt
X2V4aXRQcm9maWxlOwpAQCAtNDU1LDYgKzQ2NywyOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAg
fQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZz
ZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChvZmZzZXQpOworICAg
IH0KKworICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAg
ICBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRo
UHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3VuYXJ5QXJpdGhQ
cm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5h
cnlBcml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
QmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1
cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHVu
YXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlBcml0aFByb2ZpbGVz
W2ldOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNo
TWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShy
ZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw5ICsxMDEsMTggQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAg
ICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2
X3Q7CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZz
ZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBB
U1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9
IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRh
YmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0
ICsgc2l6ZW9mKE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9
CisKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfb2Zmc2V0VGFibGVFbnRyaWVzID0g
TlVNQkVSX09GX0JZVEVDT0RFX1dJVEhfTUVUQURBVEEgKyAxOyAvLyBvbmUgZXh0cmEgZW50cnkg
Zm9yIHRoZSAiZW5kIiBvZmZzZXQ7CiAKICAgICAvLyBOb3QgdG8gYnJlYWsgYWxpZ25tZW50IG9m
IDMyYml0IG9mZnNldCB0YWJsZSwgd2Ugcm91bmQgdXAgc2l6ZSB3aXRoIHNpemVvZihPZmZzZXQz
MikuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmls
ZS5oCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAgdGVtcGxhdGU8
dW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzQXJndW1lbgogc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ug
ewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVy
T2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJP
ZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNr
ZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJP
ZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKQEAgLTEzNCw3
ICsxMzMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIAogICAgICAgICBy
ZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29kZWRKU1ZhbHVlIG1f
YnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxhdGVkVHlwZSBtX3By
ZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTU2LDYgKzE1NSw3IEBAIHN0cnVjdCBWYWx1ZVBy
b2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1Ymxp
YyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAgICBWYWx1ZVByb2Zp
bGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBzdHJ1Y3QgVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnkK
ICAgICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3Jj
LCB0eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUsIG1f
Y29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90Pihkc3QsIHNyYyk7
CkBAIC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbmMoUmVnaXN0
ZXJJRCogc3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BJ
bmM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUo
KSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVjOjplbWl0KHRoaXMs
IHNyY0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRk
VW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODIsNyArNjgy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklEKj4KICAgICAgICAg
ZW1pdEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJ
RCogc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBCaW5h
cnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAgICAgICAgICAgIEJp
bmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1fY29kZUJsb2NrLT5h
ZGRCaW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3NDMsNyArMTQ3NDMs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBz
Y29wZVJlZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIG1faml0LmNvZGVCbG9j
aygpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CiAgICAgbm9SZXN1
bHQobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0
YWRhdGEucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9N
ZXRhZGF0YS5yYgkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dl
bmVyYXRvci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDIyIEBAIGNs
YXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5
PwogCi0gICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAgICBk
ZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcywgZ2VuZXJhdGVPZmZzZXRPZikKICAgICAg
ICAgICAgIGZpZWxkcy5tYXAgZG8gfGZpZWxkLCB0eXBlfAogICAgICAgICAgICAgICAgIGlmIHR5
cGUua2luZF9vZj8gSGFzaAotICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xu
I3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSl9XG4je3ByZWZpeH19OyIKKyAg
ICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVm
aXggKyAnICAgICcsIHR5cGUsIGZhbHNlKX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7Zmll
bGQudG9fc307IgorICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2Zp
ZWxkTmFtZX07IgorICAgICAgICAgICAgICAgICAgICBpZiBnZW5lcmF0ZU9mZnNldE9mCisgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgIlxuIiArICJzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkgeyBy
ZXR1cm4gT0ZGU0VUT0YoTWV0YWRhdGEsIG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdAogICAgICAgICAgICAgICAg
IGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAg
ZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVs
ZHMgPSBjb252ZXJ0RmllbGRzKCIgICAgICAgICIsIEBmaWVsZHMsIHRydWUpCiAKICAgICAgICAg
aW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAmJiAobm90IEBpbml0aWFsaXpl
cnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmNwcAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2Fs
bEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxs
SGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBz
Y29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2Nv
cGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17
Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93
UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsK
LSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1h
cmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhp
c1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNU
X09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgp
KSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZN
JiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJS
ZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNo
YWRvd0NoaWNrZW4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxw
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBl
cnMuaAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2Fs
bEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODQwLDcgKzg0MCwxOCBAQCBwdWJsaWM6CiAg
ICAgLy8gVGhlc2Ugb3BlcmF0aW9ucyBjbG9iYmVyIGFsbCB2b2xhdGlsZSByZWdpc3RlcnMuIFRo
ZXkgYXNzdW1lIHRoYXQgdGhlcmUgaXMgcm9vbSBvbiB0aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sg
dG8gbWFyc2hhbGwgY2FsbCBhcmd1bWVudHMuCiAgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuUHJv
bG9ndWVQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcg
c2NvcGUpOwotICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRv
d1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiwg
Q2FsbFNpdGVJbmRleCk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4K
KyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQs
IEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJs
b2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCisgICAgeworICAgICAgICBzdG9yZVB0
cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVD
VF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOworICAgICAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIGNhbGxlZSkpKTsKKyAgICAgICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1
ZSkpKTsKKyAgICAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKKyAgICAgICAgc3Rv
cmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOworICAgICAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOworICAg
IH0KKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hv
dWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNr
ZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdH
UFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFsc2UpCiAgICAg
LCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkK
IHsKKyAgICBtX2dsb2JhbE9iamVjdENvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VmFsdWU6Okdsb2JhbE9iamVjdCk7CiB9CiAKIEpJVDo6fkpJVCgpCkBAIC0x
MTMsNyArMTE0LDcgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kgog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFk
ZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KQordm9pZCBKSVQ6OmVt
aXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCkKIHsKICAgICBhZGRT
bG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHBvaW50ZXJUb1NldCwgV2F0Y2hwb2lu
dFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9
CkBAIC02NzUsMTcgKzY3NiwxNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQogCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBt
X2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgLy8gT09QUzogTWF5YmUgdGhpcyBz
aG91bGQgYmUgZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJsb2NrPworICAgIERGRzo6Q2FwYWJpbGl0
eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAg
ICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAg
ICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklu
bGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpD
YW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAg
ICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxk
RW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC03
NjEsNyArNzYxLDEwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4K
IAogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKICAg
ICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX2Nv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkg
PiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVk
VmVjdG9yOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlZ1QyKTsKKwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25z
dHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0
bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24n
dCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCkBAIC03NzcsNiArNzgw
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwog
I2VuZGlmCiAgICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9j
ay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAg
ICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50
ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KQEAgLTk5MCw3ICs5OTQsNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICJCYXNlbGlu
ZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fYXJpdHlDaGVjayk7Ci0gICAgbV9qaXRDb2Rl
ID0gYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSk7CisgICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBCYXNl
bGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaykpOwogCiAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAl
cCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgp
LT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgp
LnVudGFnZ2VkUHRyKCkpOwpAQCAtMTAwNSw2ICsxMDA5LDggQEAgQ29tcGlsYXRpb25SZXN1bHQg
SklUOjpmaW5hbGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5rQnVmZmVyLT5ydW5NYWluVGhyZWFk
RmluYWxpemF0aW9uVGFza3MoKTsKIAorICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0
aElDcyk7CisKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2Rl
QmxvY2stPm1fbG9jayk7CiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIs
IENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDI1IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCisgICAgY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVz
aW5nIENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICAgICAgZW51bSBjbGFzcyBWYWx1ZSB7Cisg
ICAgICAgICAgICBHbG9iYWxPYmplY3QKKyAgICAgICAgfTsKKworICAgICAgICBDb25zdGFudCBh
ZGQoVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9
IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZCh2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBWZWN0b3I8VHlwZXM+IG1fY29uc3RhbnRzOworICAgIH07CisKICAgICBlbnVt
IE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxl
OwpAQCAtMzA4LDYgKzMyNywyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlm
CiAKKyAgICAgICAgdGVtcGxhdGUgPEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWRQdHJGcm9t
TWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAg
ICAgIHRlbXBsYXRlIDxCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkMzJGcm9tTWV0YWRhdGEo
Y29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBs
YXRlIDxCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRl
Y29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPEJ5dGVj
b2RlPgorICAgICAgICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29k
ZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDxCeXRlY29kZT4KKyAgICAg
ICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBz
aXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2ln
bmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVj
dChHUFJSZWcpOworCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5k
bGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVt
cFRvSGFuZGxlcik7CkBAIC0zNzYsMTAgKzQxMywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAg
YW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsK
LSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAgICAgICAgLy92b2lkIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0
ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFs
dWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFk
YXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7
CkBAIC03MjYsNyArNzYzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hl
Y2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNzc5LDcgKzgxNSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1p
dE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3Jp
dGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0
Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNW
YWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKTsKQEAgLTc4OCw2ICs4MjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2
b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxS
ZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwog
ICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAg
IGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC04MjksMjYg
Kzg2Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5
cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCBy
ZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9H
RVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNy
ZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQ
RShERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVu
a0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVu
dCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2
ZWRDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVz
b2x2ZV9zY29wZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVk
Q2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNk
ZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNv
bHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFD
SF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBE
RUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2
ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhz
dGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFy
KiB0aHVua05hbWUpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1RydXRoeUdlbmVy
YXRvcihWTSYpOwpAQCAtMTA1MiwxMSArMTA3MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBt
X2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQo
KSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAgICAgIGJvb2wgc2hv
dWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsgfQogI2Vs
c2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
ICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAg
ICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxh
dGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFsbCBjb2RlIGdldHMg
cHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZh
bHNlOyB9CkBAIC0xMDY0LDEzICsxMDgxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
c3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNv
bXB1dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRv
IGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRv
Ci0gICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgs
IHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUg
c2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAg
R2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVk
QXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnBy
ZXRlcjsKIApAQCAtMTA5Nyw5ICsxMTA3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJl
Y29yZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4g
bV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJp
dGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9l
eGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENh
bGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTExMzMs
MTEgKzExNDAsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5z
dHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlv
blRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXpl
ZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29s
IG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0
Q29kZTsKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRyPEJh
c2VsaW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50UG9vbCBtX2Nv
bnN0YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9i
amVjdENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisK
KyAgICAgICAgR1BSUmVnIG1fbWV0YWRhdGFHUFI7CisgICAgICAgIEdQUlJlZyBtX2NvbnN0YW50
c0dQUjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjgxMTc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0
YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzIwLDcgKzMyMSw4IEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcg
KzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAg
ICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCBy
ZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBu
b3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwg
cmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJv
IDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIx
LDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0
aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxp
bmtlZENvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5lZ2F0ZT4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9t
YXRoSUNzLmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0
aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG5lZ2F0ZUlDKTsKICAgICAvLyBGSVhNRTogaXQg
d291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNl
IHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRl
PihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2Zp
bGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CkBAIC05MDIsOCArOTA2LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigp
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRk
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlB
cml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tX3Byb2ZpbGVJbmRl
eCk7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9tYXRoSUNzLmFkZEpJVEFkZElDKGFyaXRoUHJv
ZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQpA
QCAtOTQ4LDEwICs5NTIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0
aElDPAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxp
bmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxp
bmVDb2RlKSB7CiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRo
SUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIp
OwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVn
cywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJv
ZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBz
cmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDIwLDEwICsxMDI1LDExIEBAIHZvaWQgSklU
OjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICAgICAgZWxzZSBpZiAocmlnaHRP
cGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByaWdodFJlZ3MpOwogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRj
aEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBs
ZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwg
bGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVn
cywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJl
Z3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwNjAsMTMgKzEwNjYsMTQgQEAgdm9pZCBKSVQ6OmVt
aXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogI2VuZGlmCiAKICAgICBVbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQ
YXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBz
cmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBhcml0
aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJ
VE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRy
KG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9H
Sk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0
ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRv
IHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExMjUsMTMgKzExMzIsMTQgQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogI2VuZGlmCiAKICAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0
UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRT
bG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0
aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpf
SklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdz
LCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJp
Z2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpN
aWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+
KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAg
ICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTcxLDcgKzExNzksNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxp
bmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
aXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBhcml0
aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubV9wcm9maWxlSW5kZXgpOwogCiAgICAgU25pcHBl
dE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAg
ICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNl
Y29uZCgpKTsKQEAgLTEyMTYsOCArMTIyNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25z
dCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2st
PmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fbWF0
aElDcy5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BN
dWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KQEAgLTEyMzIsOCArMTI0MCw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJp
dGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkpOworICAgIEpJVFN1YklD
KiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1p
dE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQ
dXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOwogfQogCkBAIC00MDQsNyArNDA0LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKIAogICAgIGZhc3RDYXNl
LmxpbmsodGhpcyk7CkBAIC00OTMsNyArNDkzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0
b3JfbmV4dChjb25zdCBJbgogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0p
OwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQ
Uik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQpAQCAtNTEyLDcg
KzUxMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBK
U1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwogICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKIAogICAgICAgICBpdGVy
YXRpb25Eb25lLmxpbmsodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0OCw2ICsyNDgsNDEgQEAgcHJvdGVjdGVkOgogICAgIENv
ZGVSZWY8SlNFbnRyeVB0clRhZz4gbV9yZWY7CiB9OwogCitjbGFzcyBNYXRoSUNIb2xkZXIgewor
cHVibGljOgorICAgIHZvaWQgYWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCisgICAg
eworICAgICAgICBtX2FkZElDcyA9IFdURk1vdmUob3RoZXIubV9hZGRJQ3MpOworICAgICAgICBt
X211bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAgICAgICBtX25lZ0lDcyA9IFdU
Rk1vdmUob3RoZXIubV9uZWdJQ3MpOworICAgICAgICBtX3N1YklDcyA9IFdURk1vdmUob3RoZXIu
bV9zdWJJQ3MpOworICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmls
ZSk7IH0KKyAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUpIHsgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisgICAgSklU
U3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJl
dHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorICAgIEpJVE5lZ0lDKiBhZGRKSVRO
ZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5h
ZGQoYXJpdGhQcm9maWxlKTsgfQorCisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0
b3IsIEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRBZGRJQyogYWRkTWF0
aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUQWRkSUMocHJv
ZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTXVsR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE11bElDKiBhZGRNYXRoSUMoQmluYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRNdWxJQyhwcm9maWxlKTsgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVROZWdHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+CisgICAgSklUTmVnSUMqIGFkZE1hdGhJQyhVbmFyeUFyaXRoUHJvZmlsZSogcHJv
ZmlsZSkgeyByZXR1cm4gYWRkSklUTmVnSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3Rk
Ojppc19zYW1lPEdlbmVyYXRvciwgSklUU3ViR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAg
IEpJVFN1YklDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVy
biBhZGRKSVRTdWJJQyhwcm9maWxlKTsgfQorCitwcml2YXRlOgorICAgIEJhZzxKSVRBZGRJQz4g
bV9hZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKKyAgICBCYWc8SklUTmVnSUM+
IG1fbmVnSUNzOworICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Cit9OworCiBERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihEaXJlY3RKSVRDb2RlKTsKIGNsYXNzIERpcmVj
dEpJVENvZGUgOiBwdWJsaWMgSklUQ29kZVdpdGhDb2RlUmVmIHsKICAgICBXVEZfTUFLRV9TVFJV
Q1RfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoRGlyZWN0SklUQ29kZSk7CkBA
IC0yNjYsNiArMzAxLDEyIEBAIHByaXZhdGU6CiAgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBt
X3dpdGhBcml0eUNoZWNrOwogfTsKIAorY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERp
cmVjdEpJVENvZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgeworICAgIEJhc2VsaW5lSklUQ29kZShD
b2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFy
aXR5Q2hlY2spCisgICAgICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJp
dHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgeyB9Cit9OworCiBjbGFzcyBOYXRp
dmVKSVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CiBwdWJsaWM6CiAgICAgTmF0
aXZlSklUQ29kZShKSVRUeXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTMgKzUzLDM4IEBAIEFMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IEoKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1
cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgp
OworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c0RvdWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFu
dEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25z
dGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Cit9CisKK0FMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFz
cmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KSB7CisgICAgICAgIC8vIE9P
UFM6IGZpbmQgYSB3YXkgdG8gYXNzZXJ0IHRoYXQgYWxsIGxpbmsgdGltZSBjb25zdGFudHMgYXJl
IGNlbGxzLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmlzQ2VsbCgpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklU
OjpnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICBBU1NFUlQo
c3JjLmlzQ29uc3RhbnQoKSk7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChz
cmMpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpM
aW5rVGltZUNvbnN0YW50KTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoc3JjKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2Fs
bEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQpAQCAt
MjAzLDcgKzIyOCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgK
IAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsK
LSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93
bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMjMsNyAr
MjQ4LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5l
IHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0
ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkp
OwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJl
c3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsK
QEAgLTIzMyw3ICsyNTgsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3Bv
aW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1w
IGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlz
IG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJh
dGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkp
OworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNv
ZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZCht
X2J5dGVjb2RlSW5kZXgpOwpAQCAtMzExLDI5ICszMzYsMzQgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlz
Q29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3Ry
aW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0K
LQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYg
dmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hvdWxkRW1p
dFByb2ZpbGluZygpKTsKLQotICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246
IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9y
ZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJv
ZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UKLSAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNj
cmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2Zp
bGUubV9idWNrZXRzKTsKLSAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0
b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3Jp
cHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKLX0KKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29u
c3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Cit9CisKKy8vIE9PUFMK
Ky8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYg
dmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKy8veworLy8gICAgQVNTRVJUKHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSk7CisvLworLy8gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmln
dXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAorLy8g
ICAgLy8gc3RvcmUuCisvLyNpZiBVU0UoSlNWQUxVRTY0KQorLy8gICAgc3RvcmU2NCh2YWx1ZS5n
cHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyNlbHNlCisvLyAgICBFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vICAgIHN0b3JlMzIodmFsdWUucGF5
bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOworLy8gICAgc3RvcmUzMih2
YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOworLy8jZW5kaWYKKy8vfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
c2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZh
bHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9w
IGJ5dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzQxLDI0ICszNzEsMjUgQEAgaW5saW5lIHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1l
dGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBC
eXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBC
eXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAgIGlmICghc2hvdWxk
RW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpLCB2YWx1ZSk7CisgICAgcHRyZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2st
Pm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmls
ZU9mZnNldEZvcjxCeXRlY29kZT4obV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1
ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigp
LCBBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2
NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUm
IHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7Ci19CisvL2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJv
ZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKKy8veworLy8gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworLy99CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVu
YW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgR1BSUmVnIHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsK
IH0KICNlbmRpZgogCkBAIC0zODgsOCArNDE5LDggQEAgaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6
OmNob29zZUFycmF5TW9kZQogICAgICAgICByZXR1cm4gYXJyYXlNb2Rlc0luY2x1ZGVJZ25vcmlu
Z1R5cGVkQXJyYXlzKGFycmF5TW9kZXMsIGNhcGFiaWxpdHkpOwogICAgIH07CiAKLSAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgIHByb2ZpbGUt
PmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG1fY29kZUJsb2NrKTsKKyAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fcHJvZmlsZWRDb2RlQmxvY2stPm1fbG9jayk7CisgICAg
cHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9wcm9maWxlZENvZGVC
bG9jayk7CiAgICAgQXJyYXlNb2RlcyBhcnJheU1vZGVzID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJh
eU1vZGVzKGxvY2tlcik7CiAgICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBEb3Vi
bGVTaGFwZSkpCiAgICAgICAgIHJldHVybiBKSVREb3VibGU7CkBAIC00MjAsNyArNDUxLDcgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklU
OjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUp
CiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJl
Zyk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3Vi
bGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC01MzYsNyArNTY3
LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAo
IWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01NDYsNyArNTc3
LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVn
LCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChy
ZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXND
b25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxz
ZQpAQCAtNTU0LDExICs1ODUsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25z
dGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFu
dCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lO
TElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEs
IFZpcnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0
YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01ODQsNyAr
NjEwLDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgICAgICAvLyBPT1BT
OiBoYW5kbGUgbGluayB0aW1lIGNvbnN0YW50cyBoZXJlLi4uCisgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBnZXRDb25zdGFudE9wZXJhbmQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJl
cigpKQogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KSksIGRzdCk7CiAgICAgICAgIGVsc2UKQEAgLTYwNiwxMSArNjMzLDYgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50
KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7
CkBAIC02MzUsNyArNjU3LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93
Q2FzZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9j
b2RlQmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykp
CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02Nzcs
MzAgKzY5OSw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsK
ICAgICBpZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2Nv
ZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVj
b2RlKQotewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8v
IEhhc2hNYXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9j
b3BpZWRHZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVk
R2V0UHV0SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52
YWx1ZSk7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXks
IGdldFB1dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmls
ZSBKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50
NjRfdCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAx
KSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwot
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAg
IGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmls
ZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBt
X2NvcGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4g
YXJpdGhQcm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVK
dW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC03
MjEsNiArNzIwLDQ2IEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAK
ICAgICByZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8Qnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2Fk
UHRyKEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30K
KwordGVtcGxhdGUgPEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDMyRnJv
bU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVn
IHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBv
ZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNp
emVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDgoQWRkcmVzcyhtX21ldGFk
YXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFU
YWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8Qnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKEdQUlJlZyB2YWx1
ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3Jl
OCh2YWx1ZSwgQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRh
ZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwor
dGVtcGxhdGUgPEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQ
b2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNl
dCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBhZGRQdHIobV9tZXRhZGF0YUdQUiwgVHJ1c3RlZElt
bVB0cihtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJs
ZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpsb2FkQ29uc3RhbnQoSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFudEluZGV4
LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhtX2NvbnN0YW50c0dQUiwg
c3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQp
Cit7CisgICAgbG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgxMTc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNiArNTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rp
b24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgaWYg
KHNyYy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgLy8gT09QUwogICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUu
aXNOdW1iZXIoKSkKICAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtODcsMzcgKzg4LDM1IEBAIHZvaWQg
SklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
c3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6
YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0
b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFs
T2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRv
cklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVn
aXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcg
PSByZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYg
KCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVz
dGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRS
ZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsK
LSAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJl
LT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wTmV3T2JqZWN0OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBvZmZz
ZXRPZkFsbG9jYXRvcigpLCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkg
KyBvZmZzZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVSZWcpOworCisgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAg
ICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUo
KSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nh
c2VzKTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgZW1pdEluaXRpYWxpemVJbmxpbmVT
dG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CisgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAor
ICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CisKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRh
ZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVy
ZSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0
LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogfQogCkBAIC0zNzQsNyArMzczLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNv
bnN0IEluc3RydWN0aW9uKgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OworICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOwogICAgIHJldCgpOwogI2Vsc2UKQEAgLTM4NSw3ICszODQsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRs
ZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQu
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQxMCw2IEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQog
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC00MzQsOSArNDMyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tl
eShjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9mdW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5h
bWUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTQ2NSw4ICs0NjQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3Ry
dWN0aQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Qy
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29u
c3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAg
ICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxz
ZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0
R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElT
dHViKHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAg
ICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgw
LDcgKzQ4MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZU
TCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywg
d2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
CkBAIC01MTksNyArNTIwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5z
dHJ1YwogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1Qx
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNo
UHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24gPSBqdW1wKCk7CiAKQEAgLTU0Myw3ICs1NDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmVxX251bGwoY29uc3QgSW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMg
LSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAg
IGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0
YXJnZXQpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQ
dHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CiAKQEAgLTYyNSw4ICs2MjYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5z
dHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJl
Z1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAg
Y29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsK
LSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZU
cnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2Jq
ZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRD
VElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAt
NjQwLDcgKzY0Myw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0
IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZH
L0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0
cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0g
ICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CkBAIC02OTUsNyArNjk4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5z
dHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2
ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25U
aHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwog
I2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRH
UFIyOwpAQCAtNzExLDcgKzcxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IElu
c3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2
bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtOTA4LDcgKzkx
Miw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogfQogCkBAIC05MTgsNyArOTIzLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3Ry
aWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwg
cmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xMTEyLDcgKzExMTgsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMy
KGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMo
KSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMiha
ZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0
YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dl
clJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0xMTQ4LDcgKzExNTUsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTMxMCwyMyArMTMxNiwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0
cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVy
ZUlELCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRvVGhpczo6
TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJyaWVyQmFz
ZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAg
ICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFS
ZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAtMTM0Miw3
ICsxMzQ0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAg
IGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJv
dG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBh
bGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25S
YXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlv
bjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNoZWRGdW5j
dGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wQ3JlYXRlVGhpczo6b2Zmc2V0T2ZDYWNoZWRGdW5jdGlvbigpLCBjYWNoZWRGdW5jdGlv
blJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFs
LCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNh
bGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgY2Fs
bGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMu
bGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM3NCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9l
cShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVy
blZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qs
IHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIsNyArMTM4NSw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIs
IHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAg
ICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BS
IH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZh
bHVlR1BSKTsKQEAgLTEzOTQsNyArMTM5OCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEo
Y29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzE0MDksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0MjQsMTEgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1
Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0lu
c3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5z
dGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VP
ZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0
b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlciho
YXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAg
ICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQ
UiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
fQpAQCAtMTUwOSw3ICsxNTE2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBz
KGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVU
cmFwcywgYXJndW1lbnRHUFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NjQsNyArMTU3Miw5IEBAIHZvaWQgSklU
OjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVj
b2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPiht
X2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIg
PSBHUFJSZWc6OmFyZ3VtZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0
PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0xNjY0LDEzICsx
Njc0LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19nZW5lcmF0b3JfZnUKIHZvaWQg
SklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
QXJyYXk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6
ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0
Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFk
YXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIG1hdGVyaWFs
aXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9m
ZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QwLCBzaXplKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTY3OSwxNCArMTY4OCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsK
KyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlX
aXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdU
Mik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJ
bmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCBy
ZWdUMCk7CiAjZWxzZQogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1l
dGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmls
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qy
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQogCkBAIC0xNzI2LDggKzE3
MzQsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVyCiAKIHZvaWQg
SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVu
bGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB0eXBlIHByb2ZpZWxyIGlzIGVuYWJsZWQuCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90
eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNv
ZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE4MDksMjAgKzE4MTgsMjQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQo
bm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZl
IHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBz
aGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdH
UFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVn
IHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgp
LCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgeworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBu
b24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1Qy
OworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJl
Zywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9j
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFk
b3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwg
cmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5k
aWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9s
X2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBP
T1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcg
d2hlbiB0aGUgdXNpbmcgdGhlIGNvbnRyb2wgZmxvdyBwcm9maWxlci4KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwog
ICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9i
YXNpY0Jsb2NrTG9jYXRpb247CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9j
YXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7CkBAIC0xODkyLDcgKzE5MDUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5k
ZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE5
MTgsNyArMTkzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QK
ICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCwgcmVzdWx0UmVncyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODEsNyArODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAg
ICAgICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2Vu
KTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CiAgICAgfQogCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlW
YWxTbG93Q2FzZShjb25zdAogICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
R2V0QnlWYWxPcHRpbWl6ZSk7CiAgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAK
LSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIp
OworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAgLTIwNiw3ICsyMDYsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNTAsNyArMjUwLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
dHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC04NzcsNyAr
ODc3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJf
dCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAs
IG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1w
bCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg4Niw3ICs4
ODcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90
IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwg
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9z
ZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg5
Niw3ICs4OTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAg
ICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJT
ZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwNiw3ICs5MDksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWws
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
LCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdU
MSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtOTE2LDcg
KzkyMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBp
bnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNl
dHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTE3Myw3ICsxMTc4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dl
dF9ieV9pZChjb25zdCBJbgogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTI0Miw3ICsxMjQ3LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdz
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMjg2
LDcgKzEyOTEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAg
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKQEAgLTEzMjAsNyArMTMyNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwog
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTM0Niw3ICsxMzUxLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3Vs
dFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAg
LTEzODksNyArMTM5NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3Qg
SW4KICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIApAQCAtMTQ3NCw3ICsxNDc5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF93aXRoX3RoaQogICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAgLTE4ODUsNiArMTg5MCw3IEBAIHZv
aWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE5OTEsNTkgKzE5OTcsNzcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNj
b3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBi
eXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEu
bV9yZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgQVNT
RVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVu
dEluc3RydWN0aW9uKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdU
NzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIC8vIElmIHdlIHByb2ZpbGUg
Y2VydGFpbiByZXNvbHZlIHR5cGVzLCB3ZSdyZSBnYXVyYW50ZWVkIGFsbCBsaW5rZWQgY29kZSB3
aWxsIGhhdmUgdGhlIHNhbWUKKyAgICAvLyByZXNvbHZlIHR5cGUuCiAKLSAgICBpZiAocmVzb2x2
ZVR5cGUgPT0gTW9kdWxlVmFyKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEu
bV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgaWYgKHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKKyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVu
dCgpLCByZWdUMCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNl
dCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICAg
ICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRh
dGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOworCisgICAgICAgIGF1dG8gY2xv
c3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6Omdl
bmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX3Jlc29s
dmVfc2NvcGUgQ2xvc3VyZVZhciIpOworICAgICAgICB9OwogCi0jZGVmaW5lIFJFU09MVkVfU0NP
UEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUj
I0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRv
cnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShSRVNPTFZFX1NDT1BF
X0dFTkVSQVRPUikKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
c0dlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayhDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJh
c2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
Iik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAg
ICBhdXRvIGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAg
ICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3RkOjpudWxsb3B0
LCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgZ2VuZXJpYyIpOworICAgICAgICB9OworCisg
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAgICAgICAgY29u
c3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgc2NvcGVHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRh
dGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY29kZTsKKyAgICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikK
KyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOwor
ICAgICAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9y
KTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogICAgIH0KIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZl
U2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1l
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BS
ZXNvbHZlU2NvcGVUaHVuayhzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkg
dGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklU
IGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBP
cFJlc29sdmVTY29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQ
UiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSBy
ZWdUNjsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gcmVnVDU7IC8vIGluY29taW5nIC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4KICAgICBjb25z
dGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwogICAgIFVOVVNFRF9QQVJBTShi
eXRlY29kZU9mZnNldEdQUik7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcFJl
c29sdmVTY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAg
IGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIo
cmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5h
ZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCkBA
IC0yMDUyLDI2ICsyMDc2LDI2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9
PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsK
LSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFs
T2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6
b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNH
bG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hw
b2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAg
ICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0
YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBqaXQubW92ZShzY29wZUdQ
UiwgcmVnVDApOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOwogCi0gICAg
ICAgIExhYmVsIGxvb3AgPSBsYWJlbCgpOwotICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0
MzIoWmVybywgcmVnVDEpOworICAgICAgICBMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7CisgICAg
ICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOwogICAgICAgICB7
Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4
dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7
Ci0gICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3AsIHRoaXMpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7
CisgICAgICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAgICAg
ICAgICBqaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsKICAgICAgICAgfQotICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluaygmaml0KTsKICAgICB9OwogCiAgICAg
YXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKQEAgLTIwNzks
MTIgKzIxMDMsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkuCi0g
ICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFs
T2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdU
MSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShnbG9iYWxPYmplY3RH
UFIsIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwg
cmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2Jh
bExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubW92ZShn
bG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
QEAgLTIwOTQsMTEgKzIxMTgsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2Nr
KCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAg
ICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9i
YWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7Cisg
ICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6
Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0yMTA2LDcg
KzIxMzAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
ICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAg
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29s
dmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMTE2LDgzICsyMTQw
LDQ1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAg
fQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
ewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVn
VDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShy
ZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAg
ICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5s
aW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9IENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9
IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUp
KSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKKyAgICAgICAgaml0Lmxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgp
KSwgcmVnVDApOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAg
YXV0byBlbWl0Q2FzZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKKyAgICAgICAg
ICAgIEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwor
ICAgICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgIG5v
dENhc2UubGluaygmaml0KTsKKyAgICAgICAgfTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xv
YmFsUHJvcGVydHkpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAg
ICAgZW1pdENhc2UoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVt
aXRDYXNlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVt
aXRDYXNlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxp
bmsoJmppdCk7CiAgICAgfQogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQ
cm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0
dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX3Jl
c29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1l
KTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5
cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNv
bHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAg
ICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZl
VHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7
IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2
ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAg
ICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9S
KQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJh
dG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rp
b24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAg
ICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBi
ZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9G
VEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMs
IHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAg
IEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFzdCBw
YXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQpA
QCAtMjI2Miw2ICsyMjQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxS
ZWdpcwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Cisg
ICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
QEAgLTIzNzUsNyArMjM2Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTI0MDMs
MzEgKzIzOTAsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQog
ICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5k
ZXgpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0
b3IgPSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2Nv
cGVUaHVuayhDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVW
YXIiKTsKKyAgICB9OworCisgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
c0dlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdl
dEZyb21TY29wZVRodW5rKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxp
bmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0byBn
ZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICByZXR1cm4g
SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6
IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OworCiAgICAgY29uc3RleHByIEdQ
UlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7
CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0gICAgICAgIHVpbnRwdHJf
dCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5t
X29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpT
VmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHRy
ZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJs
ZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRD
b2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAot
I2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9t
X3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRo
dW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09M
VkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAgIH07Ci0jdW5kZWYgR0VU
X0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
c2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFk
YXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29w
ZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFk
YXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Z2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0gICAg
fQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBjb2RlID0gdm0u
Z2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJl
c29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBj
b2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVy
YXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0
RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9w
R2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5l
cmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2
ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJh
dGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2Vs
aW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgpAQCAtMjQzNiw3NyArMjQzMyw2OCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6TWV0YWRh
dGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lz
VXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5BZGRy
ZXNzKCk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFk
ZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisK
KyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9m
TWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRh
R1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFkYXRhU3Ry
dWN0dXJlT2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgbWV0
YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJl
Z1QwKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEp
KTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkp
OworICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29w
ZUdQUikgeworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0
YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVH
UFIsIHJlZ1QwKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFpl
cm8sIHJlZ1QxKSk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJl
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25D
aGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAo
IW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7
CisgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rp
b25XYXRjaHBvaW50KSksIHJlZ1QzKTsKICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgo
RXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRy
dXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBlbWl0
R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewot
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAg
ICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0g
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAg
ICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRvIGVtaXRHZXRDbG9zdXJl
VmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7CiAgICAgICAg
IHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBsc2hp
ZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2NvcGVH
UFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CisgICAgICAg
IGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOworICAgICAgICBqaXQu
YWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSks
IHJlZ1QwKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8gZW1p
dENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlv
biBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEds
b2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcg
Zm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24g
c2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9i
YWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZv
ciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwog
ICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKICAgICAgICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAgICAgICAgICBqaXRBc3Nl
cnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAg
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFu
Y2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQoc2Nv
cGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
KyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpp
dC5icmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgb2Zmc2V0KTsK
ICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAg
aXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3Rl
ZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRo
UmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9m
TGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQu
YnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91
dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklU
T2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmso
JmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWcz
MihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQp
OwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWln
aHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSks
IHJlc3VsdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0Lm5lZzMyKG9m
ZnNldCk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQp
OworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1l
c0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBHbG9iYWxWYXI6CkBAIC0yNTE0LDIxICsyNTAyLDE5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkp
LCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAg
TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwogICAgICAgICAgICAgZW1pdEdl
dENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVW
YXI6CkBAIC0yNTM4LDc5ICsyNTI0LDU2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAg
ICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQ
dXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0K
LSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAg
ICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5
cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9n
ZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAg
ICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQ
dXRJbmZvKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0g
ICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0ds
b2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5
LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1w
IG5vdEdsb2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsoJmpp
dCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0LmJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAg
IG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBKdW1w
IGlzR2xvYmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2Jh
bFByb3BlcnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsK
KyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwg
dHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
ci5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqdW1wKCkpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0aWNf
YXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQo
cmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9w
cm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBN
ZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkpKTsKIAotICAgIHJldCgpOworICAgIGppdC5yZXQo
KTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0g
dm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxl
ci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0oKS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VO
RVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2
bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wR2V0
RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAg
ICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9t
U2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZV8iICNy
ZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX0dFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJB
VE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29w
X2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2Vu
ZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJh
c2VsaW5lIEpJVCBiZWNhdXNlCkBAIC0yNjY4LDg2ICsyNjMxLDc5IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRl
KHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQp
Ci17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQ
dHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJl
Z1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0
cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAg
ICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdU
MCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICog
c2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGll
ZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBt
ZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAg
ICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlw
ZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5y
ZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2Nv
cGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBj
b3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBh
bnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxs
eSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4K
KyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6
b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0
cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSkpOworCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMik7CiAKICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8
SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFu
Y2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSkpOworICAgICAgICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAg
ICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMyk7CiAgICAgICAg
ICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5k
U2xvdCwgcmVnVDEpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7
CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIs
IEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNl
dCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdU
MSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7CisgICAgICAgICAgICAvLyBPT1BTOiB3b3VsZCBiZSBuaWNlIHRvIGhhdmUg
YSB2ZXJzaW9uIHRoYXQgdG9vayBHUFJSZWdzCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgog
ICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29w
ZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAg
IGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgIGlmICghaXNJ
bml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2
ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5k
KCksIHJlZ1QwKTsKKworICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2Rl
Lm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFRE
WiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1p
dCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQ
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2lu
dGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7Cisg
ICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3Rv
cmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3Vs
ZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3IgdmFsdWUu
CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSZXNv
bHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAg
ICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFk
YXRhLm1fd2F0Y2hwb2ludFNldCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgp
LCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1
dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAg
ICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNl
SW5kZXgocmVnVDAsIHJlZ1QyLCBTY2FsZUVpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zm
c2V0T2ZWYXJpYWJsZXMoKSkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNl
IHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3Igb3duZXIvdmFsdWUuCiAg
ICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjc2
MSw1OCArMjcxNyw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2
YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAgICAgICAgaXNH
bG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0g
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5s
aW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJlVmFyLyBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGlsZSB0aGluZ3MK
KyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3ZlIHByb3ZlbiB0
aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZhciwKKyAgICAv
LyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgorICAgIC8vIGlm
IHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0IGlzIGZpcmVk
LCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAgIC8vIG1hdHRl
ciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIpOworICAgIGVs
c2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyKQorICAgICAg
ICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGVt
aXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbHNlIHsKICAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0
UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7CiAgICAg
ICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8g
TG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsK
ICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAgZW1pdENvZGUo
R2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAorICAg
ICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKHRo
aXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1
ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlz
KTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAKICAgICAgICAg
c2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFr
OwogICAgIH0KIH0KIApAQCAtMjgyMSwxMyArMjc3MSwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsK
LSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUp
LnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAg
IFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBpZiAocHJv
ZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYgYW55IGxpbmtl
ZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29kZUJsb2NrcyBh
cmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIuCiAgICAgICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3Ip
OwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRv
U2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3VtZW50R1BSMCwg
Y3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMjg5OCw3ICsyODUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJn
dW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBy
ZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFn
ZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1Qw
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5NTYsNyArMjkw
OSw2IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIHZvaWQgSklU
OjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
dW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpAQCAtMjk2NCw3ICsyOTE2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJ
bnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwg
cmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5ODYsNyArMjkzOCw2IEBAIHRlbXBsYXRl
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3AKIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAgLTMwMDIsNyArMjk1Myw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKICAgICBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gbW9kZSBzZXQg
d2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBwcm9maWxlIGl0IGluIHRo
ZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CisgICAgaWYgKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgewogICAgICAgICBHUFJS
ZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBl
bmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjptb2RlU2V0T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIofkpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKQEAgLTMxMTUsNyArMzA2Niw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCgKIAogICAgIGRvbmVD
YXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwogfQogCkBAIC0zMTI0LDEwICszMDc1LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVyKTsKIH0KIAotdGVt
cGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBl
Pgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBT
bG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVt
ZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5l
cmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0zMTM2LDcgKzMwODYs
OSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltCiAgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMCk7
Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1l
dGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdGlvbk1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJl
Z1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdGlvbk1ldGFkYXRhKCkpOwogCiAgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTAxMiwx
MCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAog
bWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQog
ICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1h
Y3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNy
byB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1f
Yml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEsIHQyKQogICAgICAg
ICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0s
IEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2Rl
TmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGluIHQxLCBzcmNEc3Qg
aW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAgICAgICAgIHN0b3Jl
aSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2Zp
bGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAgICBkaXNwYXRjaCgpCiAK
ICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBsbGludE9wV2l0aE1l
dGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBt
ZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0g
ICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5h
cnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1ldGFkYXRhKHQ1LCB0
MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNp
emUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BOZWdhdGVTcmNOb3RJ
bnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0Mgot
ICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlB
cml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQzKQogICAgIHJldHVy
biAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJpYSB0MSwgTG93ZXN0
VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQotICAgIHVwZGF0ZUFy
aXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2Zp
bGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAgIHJldHVybih0MSwg
dDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAgZW5kKQogCiBtYWNy
byBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9w
ZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJvZmlsZSh0eXBlKQot
ICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFBy
b2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAg
ICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMsIHQyKQogICAgICAgICBn
ZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21T
dG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyhz
aXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcsIC5vcDFOb3RJbnQK
ICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0gICAgICAgIGFyaXRoUHJv
ZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBnZXQo
bV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDMsIHQxLCB0MCwg
LnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsxMTI0LDEyIEBAIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYmlhIHQyLCBM
b3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAub3AxTm90SW50T3Ay
RG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQ
cm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQ
cm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDQpCiAgICAg
ICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFO
b3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0gICAgICAgIGFyaXRo
UHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQ0
KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAgICAg
ZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3Vz
dG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmlu
aXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAg
ICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFnLCAuc2xvdwotICAg
ICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVC
aW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1
LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQog
ICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNp
b24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwNTEsMTAgKzEwNTEsNiBAQCBzdHJpY3RF
cXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5h
bWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFk
YXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxl
KHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDJdCi0gICAgICAgIGVu
ZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGxvYWRxIFtjZnIsIHQwLCA4
XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpAQCAtMTA2NCw3ICsxMDYwLDcgQEAgbWFj
cm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICBpbnRlZ2VyT3Bl
cmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51bWJlclRhZywgdDEKICAgICAgICAgc3Rv
cmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJv
ZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBB
cml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6
CkBAIC0xMTI5LDExICsxMTI1LDYgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
bmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBy
ZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3Jo
IHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCiAgICAgbWV0YWRhdGEodDEsIHQy
KQpAQCAtMTE0MSwxMiArMTEzMiwxMiBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwg
T3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5l
Z2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0
aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRo
UHJvZmlsZUludCwgdDEsIHQ0KQogICAgIHJldHVybih0MykKIC5vcE5lZ2F0ZU5vdEludDoKICAg
ICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JxIDB4ODAwMDAwMDAw
MDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQor
ICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIs
IHQxLCB0NCkKICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTU5LDEwICsx
MTUwLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgIGxs
aW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChz
aXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0YSh0
NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5
cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fcmhzLCB0
MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZShzaXplLCB0MCwgdDEpCkBAIC0xMTcyLDcgKzExNTksNyBAQCBtYWNybyBiaW5hcnlPcEN1c3Rv
bVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGlu
dGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5zbG93LCB0MikKIAotICAgICAgICBwcm9m
aWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxl
KG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDQpCiAgICAgICAgIGRpc3Bh
dGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTgyLDEwICsxMTY5LDEwIEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYnRxeiB0MSwgbnVtYmVy
VGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwg
ZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1
cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJO
dW1iZXIsIHQ1LCB0NCkKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJ
bnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAg
ICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1i
ZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgIC5vcDFOb3RJbnRSZWFk
eToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEyMDEsNyArMTE4OCw3IEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVyYW5k
IGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIGlzIGRlZmluaXRlbHkgbm90LgogICAg
ICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93Ci0g
ICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0
NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAg
ICAgICAgZnEyZCB0MSwgZnQxCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTI1MDIsNiArMjUwMiwxNyBAQCBtYWNybyBub3RTdXBwb3J0ZWQoKQogICAgIGVu
ZAogZW5kCiAKKworbWFjcm8gdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0
eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBVbmFyeUFyaXRo
UHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKworbWFjcm8gdXBkYXRlQmluYXJ5QXJpdGhQcm9m
aWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBv
cmggdHlwZSwgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCiAvLyBGSVhN
RTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRoZSBYODZfNjRfV0lOIGNvbmRpdGlvbiBoZXJlLCBzaW5j
ZSBXRUJBU1NFTUJMWSBzaG91bGQgYWxyZWFkeSBiZSBmYWxzZSBvbiBXaW5kb3dzCiAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNzE2CiBpZiBXRUJBU1NFTUJM
WSBhbmQgbm90IFg4Nl82NF9XSU4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3Bh
dGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9y
VW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0
LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBt
ZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9
ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFu
ZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436469</attachid>
            <date>2021-08-25 22:02:03 -0700</date>
            <delta_ts>2021-08-26 11:33:09 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>151574</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNiArNDY3LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUg
TElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7
IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRh
Lm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRl
Y29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5l
IExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7
IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRh
Lm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVj
b2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygp
OwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkg
ewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpA
QCAtNTI5LDE0ICs1NDIsMTQgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0
ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQot
ICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTkso
T3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19X
SVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5l
Z2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAg
ICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTkso
T3BKbmVxUHRyKQogCkBAIC0zMTAyLDcgKzMxMTUsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZy
YW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6
QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0
aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVu
bGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKQEAgLTMzMTgsMTMgKzMzMzEsMTMgQEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2Rl
QmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBj
YXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhp
cykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVy
biAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAg
ICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwog
ICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAg
cmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7Cisg
ICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzMzNiwxMSArMzM0
OSwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAg
c3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICBy
ZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
KyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8
T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6
Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1f
YXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4
MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMjMzLDE2ICsyMzMsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0
YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJy
ZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRo
ZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJuIHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFu
ZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkK
LSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3Jh
cnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJl
Zy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fbnVtVmFycyk7CkBAIC0yNjcsNiArMjU3
LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3Vs
dCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMg
SUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLgogICAgIHN0cnVjdCBKSVREYXRhIHsK
ICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogCkBAIC00NzgsNiArNDY5
LDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5hbWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxl
cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVBy
b2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJ
VCgpKTsKQEAgLTgwMyw2ICs3OTUsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2Vy
UmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lk
KiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAog
ICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9p
ZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNiArMTc1LDcgQEAgcHVibGljOgog
CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRS
ZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgp
XTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVh
bFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9D
b25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyBy
ZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYg
KzIwOCwxNCBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9k
ZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25z
dDsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAg
ICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24p
CisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0
aW9ucygpLmF0KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYm
IGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0
aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQogCiAgICAgdW5zaWduZWQgbnVtQ2FsbGVl
TG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KICAgICB1bnNpZ25l
ZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CkBAIC00MTAsNiArNDE5LDkg
QEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5z
dHJ1Y3Rpb25zOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+
IG1fbGl2ZW5lc3M7CiAKKyAgICAvLyBPT1BTOiBiaW5kIGEgYmV0dGVyIHBsYWNlIHRvIHN0b3Jl
IHRoaXMgc3R1ZmY/CisgICAgVmVjdG9yPEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9iaW5hcnlBcml0
aFByb2ZpbGVzOworICAgIFZlY3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4gbV91bmFyeUFyaXRoUHJv
ZmlsZXM7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhp
dFByb2ZpbGU7CkBAIC00NTUsNiArNDY3LDI4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJl
dHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uLm9mZnNldCgpKTsKICAgICB9Cisg
ICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSB0aGlzLT5ieXRlY29kZU9mZnNldChw
Yyk7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KG9mZnNldCk7CisgICAgfQor
CisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1f
YmluYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9m
aWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2Zp
bGVzLnNpemUoKTsKKyAgICAgICAgbV91bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFy
aXRoUHJvZmlsZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUmIGJpbmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBt
X2JpbmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgdW5hcnlB
cml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1cm4gbV91bmFyeUFyaXRoUHJvZmlsZXNbaV07
IH0KIAogcHJpdmF0ZToKICAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8
SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlz
aW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1l
dGFkYXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDkgKzEwMSwxOCBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gc19vZmZzZXQxNlRhYmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVz
aW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAgICAgdXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsK
IAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNldElu
TWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9p
czMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUx
NigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBz
aXplb2YoT3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc19vZmZzZXRUYWJsZUVudHJpZXMgPSBOVU1C
RVJfT0ZfQllURUNPREVfV0lUSF9NRVRBREFUQSArIDE7IC8vIG9uZSBleHRyYSBlbnRyeSBmb3Ig
dGhlICJlbmQiIG9mZnNldDsKIAogICAgIC8vIE5vdCB0byBicmVhayBhbGlnbm1lbnQgb2YgMzJi
aXQgb2Zmc2V0IHRhYmxlLCB3ZSByb3VuZCB1cCBzaXplIHdpdGggc2l6ZW9mKE9mZnNldDMyKS4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJ
KHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQCB0ZW1wbGF0ZTx1bnNp
Z25lZCBudW1iZXJPZkJ1Y2tldHNBcmd1bWVuCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1
Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3Bl
Y0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldElu
ZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3Bl
Y0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQpAQCAtMTM0LDcgKzEz
Myw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgCiAgICAgICAgIHJldHVy
biBtX3ByZWRpY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNr
ZXRzW3RvdGFsTnVtYmVyT2ZCdWNrZXRzXTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGlj
dGlvbiB7IFNwZWNOb25lIH07CkBAIC0xNTYsNiArMTU1LDcgQEAgc3RydWN0IFZhbHVlUHJvZmls
ZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldAogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZh
bHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgp
IDogVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPigpIHsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0c1swXSk7IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5OCw3
ICsxNTk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRVbmFyeQogICAg
ICAgICBlbWl0VW5hcnlPcDxPcE5vdD4oZHN0LCBzcmMpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5
cGUpOworICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSwgbV9jb2Rl
QmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IG9wX2JpdG5vdDoKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BCaXRub3Q+KGRzdCwgc3JjKTsKQEAg
LTE2OTYsMTMgKzE2OTYsMTMgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRU
eXBlTwogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluYyhSZWdpc3RlcklE
KiBzcmNEc3QpCiB7Ci0gICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcEluYzo6
ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsK
ICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdERlYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BEZWM6OmVtaXQodGhpcywgc3Jj
RHN0KTsKKyAgICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFy
eUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqPgogICAgICAgICBlbWl0
QmluYXJ5T3AoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBz
cmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJpbmFyeU9w
OjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMpOworICAgICAgICAgICAgQmluYXJ5
T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcywgbV9jb2RlQmxvY2stPmFkZEJp
bmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDc0Myw3ICsxNDc0Myw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3Bl
UmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCks
IGNhbGxTaXRlSW5kZXgpOworICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNo
YWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChu
b2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0
YS5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFk
YXRhLnJiCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL01ldGFkYXRhLnJiCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjIgQEAgY2xhc3Mg
TWV0YWRhdGEKICAgICBkZWYgc3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAK
LSAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBj
b252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBnZW5lcmF0ZU9mZnNldE9mKQogICAgICAgICAg
ICAgZmllbGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5r
aW5kX29mPyBIYXNoCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2Nv
bnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAg
ICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCAr
ICcgICAgJywgdHlwZSwgZmFsc2UpfVxuI3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50
b19zfTsiCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGRO
YW1lfTsiCisgICAgICAgICAgICAgICAgICAgIGlmIGdlbmVyYXRlT2Zmc2V0T2YKKyAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyAiXG4iICsgInN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJldHVy
biBPRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0CiAgICAgICAgICAgICAgICAgZW5k
CiAgICAgICAgICAgICBlbmQuam9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVs
ZHMgPSBjb252ZXJ0RmllbGRzKCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkcyA9
IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcywgdHJ1ZSkKIAogICAgICAgICBpbml0
cyA9IG5pbAogICAgICAgICBpZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5l
bXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3Bw
CShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVs
cGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIHZvaWQgQ0NhbGxIZWxw
ZXJzOjpsb2dTaGFkb3dDaGlja2VuUHJvbG8KICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3Bl
KSkpOwogfQogCi12b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
R1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAg
ICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwotICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2Vy
KCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgY2FsbGVlKSkpOwotICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFs
dWUpKSk7Ci0gICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKLSAgICBzdG9yZVB0cihU
cnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7Ci0gICAgc3RvcmUzMihU
cnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwg
T0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsK
LX0KLQogdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mIHZt
LCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBz
Y3JhdGNoMikKIHsKICAgICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93
Q2hpY2tlbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5o
CShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVs
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDE4IEBAIHB1YmxpYzoKICAgICAv
LyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJlZ2lzdGVycy4gVGhleSBh
c3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Agb2YKICAgICAvLyBzdGFjayB0byBt
YXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1
ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY29w
ZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFj
a2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxs
U2l0ZUluZGV4KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAg
IHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxvY2ss
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKKyAgICB7CisgICAgICAgIHN0b3JlUHRyKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgICAgIHN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRy
ZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwg
Y2FsbGVlKSkpOworICAgICAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkp
OworICAgICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOworICAgICAgICBzdG9yZVB0
cihjb2RlQmxvY2ssIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7CisgICAgfQor
CiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQg
d3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBh
Y2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwg
R1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2
aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1f
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogewor
ICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpWYWx1ZTo6R2xvYmFsT2JqZWN0KTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTExMyw3
ICsxMTQsNyBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqCiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVz
c09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5v
dGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KQogewogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0
OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KQEAg
LTEyOSw3ICsxMzAsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICAg
ICBpZiAoIUFTU0VSVF9FTkFCTEVEKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBKdW1wIG9rID0g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGJyZWFr
cG9pbnQoKTsKICAgICBvay5saW5rKHRoaXMpOwpAQCAtNjc1LDE3ICs2NzYsMTYgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERG
Rzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgp
OworICAgIC8vIE9PUFM6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGRvbmUgb24gdW5saW5rZWQgY29k
ZSBibG9jaz8KKyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNl
IERGRzo6Q2Fubm90Q29tcGlsZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwot
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hv
dWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6
Q2FuQ29tcGlsZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAg
bV9jYW5CZU9wdGltaXplZCA9IHRydWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGlu
ZWQgPSB0cnVlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtNzQ1LDcgKzc0NSw3IEBAIHZvaWQgSklUOjpjb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7
CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
OwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Qx
KTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzYxLDcgKzc2MSwxMCBAQCB2b2lk
IEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAKICAgICBpZiAobV9jb2RlQmxv
Y2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRl
Y29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0
b3IoKSB8fCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID4gMSkpIHsKKyAgICAgICAgICAg
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywg
cmVnVDIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9m
ZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBGaXhlZFZlY3Rvcjo6b2Zmc2V0T2ZTdG9y
YWdlKCkpLCByZWdUMik7CisKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAw
OyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsK
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2Fu
dCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAv
LyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byBy
ZWNvcmQgdGhlIGR1bW15IHZhbHVlLgpAQCAtNzc3LDYgKzc4MCw3IEBAIHZvaWQgSklUOjpjb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgogICAgICAgICAgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFy
Z3VtZW50KGFyZ3VtZW50KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1
ZShyZXN1bHRSZWdzLCBBZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2Zp
bGUpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC05OTAsNyArOTk0LDcg
QEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwg
dG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5
UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGly
ZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkp
OworICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgQmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwg
d2l0aEFyaXR5Q2hlY2spKTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAg
ICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBt
X2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0
cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKQEAg
LTEwMDUsNiArMTAwOSw4IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5U
aHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7
CiAKKyAgICBtX2ppdENvZGUtPmFkb3B0TWF0aElDcyhtX21hdGhJQ3MpOworCiAgICAgewogICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwogICAg
ICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01v
ZGU6OkxhdGVTaHJpbmspOwpAQCAtMTA3OSwxNCArMTA4NSwxNCBAQCB2b2lkIEpJVDo6ZG9NYWlu
VGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygp
LT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0aW9u
LiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9j
ayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5r
ZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpID09IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAogICAgIHJldHVybiByb3VuZExvY2FsUmVn
aXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9CiAKLWlu
dCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK2ludCBK
SVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQog
ewogICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRG
b3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwyNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAor
ICAgIGNsYXNzIEpJVENvbnN0YW50UG9vbCB7CisgICAgcHVibGljOgorICAgICAgICB1c2luZyBD
b25zdGFudCA9IHVuc2lnbmVkOworCisgICAgICAgIGVudW0gY2xhc3MgVmFsdWUgeworICAgICAg
ICAgICAgR2xvYmFsT2JqZWN0CisgICAgICAgIH07CisKKyAgICAgICAgQ29uc3RhbnQgYWRkKFZh
bHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2Nv
bnN0YW50cy5zaXplKCk7CisgICAgICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQodmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgVmVjdG9yPFR5cGVzPiBtX2NvbnN0YW50czsKKyAgICB9OworCiAgICAgZW51bSBPcGNv
ZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKQEAg
LTI2MSw4ICsyODAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGppdC5wcml2YXRl
Q29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5
TW9kZSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3Rl
ckNvdW50Rm9yKENvZGVCbG9jayopOwotICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9m
ZnNldEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0
ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOworICAgICAgICBzdGF0aWMgaW50IHN0YWNr
UG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogCiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3Rh
dHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21w
aWxlVGltZSgpOwpAQCAtMzA4LDYgKzMyNywyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
fQogI2VuZGlmCiAKKyAgICAgICAgdGVtcGxhdGUgPEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxv
YWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcp
OworCisgICAgICAgIHRlbXBsYXRlIDxCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkMzJGcm9t
TWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAg
ICAgIHRlbXBsYXRlIDxCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkOEZyb21NZXRhZGF0YShj
b25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxh
dGUgPEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEoR1BSUmVnLCBjb25z
dCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDxCeXRlY29k
ZT4KKyAgICAgICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHZvaWQgbG9hZENvbnN0
YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZEds
b2JhbE9iamVjdChHUFJSZWcpOworCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBq
dW1wVG9IYW5kbGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5h
cHBlbmQoanVtcFRvSGFuZGxlcik7CkBAIC0zNzYsMTAgKzQxMywxMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMg
aW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3Jh
dGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwg
R1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgLy92b2lk
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAgICAgICAg
Ly92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3Mp
OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29k
ZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1Zh
bHVlUmVncyk7CkBAIC03MjYsNyArNzYzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
dHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNzc5LDcgKzgx
NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1
cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAg
IHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0
Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlm
eVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0
UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5k
aXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdhdGNocG9pbnRTZXQqKTsKQEAgLTc4OCw2ICs4MjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20s
IFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7
CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBA
IC04MjksMjYgKzg2Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEo
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3Vy
ZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUg
REVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21f
c2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JF
U09MVkVfVFlQRShERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNM
QVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVU
eXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCB0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3Jl
IGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAgICAgICAg
Ly8gUmVzb2x2ZWRDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdp
dGggb3BfcmVzb2x2ZV9zY29wZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09
IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAg
ICB9Ci0KLSNkZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlw
ZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAg
ICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikK
LSN1bmRlZiBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2Nv
cGVUaHVuayhzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1l
KTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBj
b25zdCBjaGFyKiB0aHVua05hbWUpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1Ry
dXRoeUdlbmVyYXRvcihWTSYpOwpAQCAtMTA1MiwxMSArMTA3MSw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7
IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRP
cklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAgICAg
IGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGlu
ZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBmYWxz
ZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJl
ZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFsbCBj
b2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsg
cmV0dXJuIGZhbHNlOyB9CkBAIC0xMDY0LDEzICsxMDgxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRp
YyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlv
dSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBu
ZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBz
bG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwg
Z2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4K
LSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2Zp
bGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAogICAgICAgICBJbnRlcnByZXRlciog
bV9pbnRlcnByZXRlcjsKIApAQCAtMTA5Nyw5ICsxMTA3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9y
PFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1
bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwg
QmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVt
cExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hl
Y2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
QEAgLTExMzMsMTEgKzExNDAsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9p
bnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5C
ZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAg
ICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBt
X2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENv
ZGU+IG1faml0Q29kZTsKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAg
UmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50
UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBt
X2dsb2JhbE9iamVjdENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpIH07CisKKyAgICAgICAgR1BSUmVnIG1fbWV0YWRhdGFHUFI7CisgICAgICAgIEdQUlJlZyBt
X2NvbnN0YW50c0dQUjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjgxMTc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3Bl
cmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7Ci0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVH
UFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzIwLDcgKzMyMSw4IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdU
Mik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDMs
IHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihp
bnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Qy
LCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZl
cnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03
MTcsOCArNzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cgog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRO
ZWdJQyhhcml0aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSAmbV91bmxpbmtlZENvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5lZ2F0ZT4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUTmVnSUMqIG5lZ2F0
ZUlDID0gbV9tYXRoSUNzLmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVj
dGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG5lZ2F0ZUlDKTsKICAgICAvLyBG
SVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdh
dGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNGYXN0
PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5l
Z2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CkBAIC05MDIsOCArOTA2LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRB
ZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2Nr
LT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tX3By
b2ZpbGVJbmRleCk7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9tYXRoSUNzLmFkZEpJVEFkZElD
KGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVB
ZGQpOwogfQpAQCAtOTQ4LDEwICs5NTIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJ
VFVuYXJ5TWF0aElDPAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2Vu
ZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5l
cmF0ZWRJbmxpbmVDb2RlKSB7CiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNj
cmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3Ms
IGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7CisgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3Jh
dGNoR1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDIwLDEwICsxMDI1LDExIEBA
IHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICAgICAgZWxzZSBp
ZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2Ny
YXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlv
biwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdz
LCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwNjAsMTMgKzEwNjYsMTQgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogI2VuZGlmCiAKICAgICBVbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNo
b3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpf
SklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1
c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpf
SklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3Ms
IHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwor
ICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNS
ZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRf
Y2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVz
dGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1Jl
Z3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykK
ICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExMjUsMTMgKzExMzIsMTQgQEAg
dm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogI2VuZGlmCiAKICAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpf
SklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lz
ZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCBy
ZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRo
SUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQ
cm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJh
dGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3Rl
ZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlv
bl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNf
U1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTcxLDcgKzExNzks
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgaWYgKHNob3VsZEVt
aXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAg
ICAgICBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9m
aWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubV9wcm9maWxlSW5kZXgpOwogCiAg
ICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmly
c3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFu
ZFR5cGVzLnNlY29uZCgpKTsKQEAgLTEyMTYsOCArMTIyNCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9j
b2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9m
aWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkpOworICAgIEpJVE11bElDKiBtdWxJ
QyA9IG1fbWF0aElDcy5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJ
Q0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVs
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KQEAgLTEyMzIsOCArMTI0MCw4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3Vi
SUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+
YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkpOworICAg
IEpJVFN1YklDKiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwog
ICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7
CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDI4MTE3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29u
c3QgT3BDYWxsRXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVn
VDEpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxs
RnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBy
ZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwpAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQg
SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKIAogICAgIGVtaXRMb2FkKGNhbGxl
ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0
ZWNvZGUpOwpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKIAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM1NCw3ICszNTQsNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAy
ODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQog
ewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDAp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9
CiAKQEAgLTEzMCw3ICsxMzAsNyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9w
Q2FsbEV2CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsK
ICAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1l
OjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7CkBAIC0xNTcsNyArMTU3LDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAgbG9hZDY0KEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVT
bG90OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7CiAgICAgZW1p
dFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI1OSw3ICsyNTksNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAKICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2Nh
dGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI4Niw3
ICsyODYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwpAQCAtNDA0LDcgKzQwNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJh
dG9yX29wZW4oY29uc3QgSW4KICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwog
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fbmV4dCk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwpAQCAtNDkzLDcg
KzQ5Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBK
U1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludCgpOwogICAgIH0KQEAgLTUxMiw3ICs1MTIsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9
KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3Mg
eyB2YWx1ZUdQUiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCB2YWx1ZUdQUik7CiAKICAgICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDI4MTE3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDgsNiArMjQ4LDQxIEBAIHByb3RlY3RlZDoKICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1f
cmVmOwogfTsKIAorY2xhc3MgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0
TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9hZGRJQ3MgPSBX
VEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICAgICAgbV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVy
Lm1fbXVsSUNzKTsKKyAgICAgICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsK
KyAgICAgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKKyAgICB9CisKKyAg
ICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUp
IHsgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisgICAgSklUTXVsSUMqIGFk
ZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211
bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRo
UHJvZmlsZSk7IH0KKyAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKwor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2
YWx1ZT46OnR5cGU+CisgICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUq
IHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4K
KyAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyBy
ZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBH
ZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1l
PEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lD
KiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5l
Z0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBl
bmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJ
VFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJp
bmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7
IH0KKworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRN
dWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklU
U3ViSUM+IG1fc3ViSUNzOworfTsKKwogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoRGlyZWN0SklUQ29kZSk7CiBjbGFzcyBEaXJlY3RKSVRDb2RlIDogcHVibGljIEpJVENv
ZGVXaXRoQ29kZVJlZiB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEX1dJVEhf
SEVBUF9JREVOVElGSUVSKERpcmVjdEpJVENvZGUpOwpAQCAtMjY2LDYgKzMwMSwxMiBAQCBwcml2
YXRlOgogICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV93aXRoQXJpdHlDaGVjazsKIH07CiAK
K2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0
aElDSG9sZGVyIHsKKyAgICBCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBj
b2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgICAgICA6IERp
cmVjdEpJVENvZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklUKQorICAgIHsgfQorfTsKKwogY2xhc3MgTmF0aXZlSklUQ29kZSA6IHB1YmxpYyBKSVRD
b2RlV2l0aENvZGVSZWYgewogcHVibGljOgogICAgIE5hdGl2ZUpJVENvZGUoSklUVHlwZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjgxMTc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDEzICs1MywzOCBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBKCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91Ymxl
KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0
YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9j
ay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKK30KKworQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNy
YykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBPT1BTOiBmaW5kIGEgd2F5IHRvIGFzc2Vy
dCB0aGF0IGFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0NlbGwo
KTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwotICAg
IHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihz
cmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7CisgICAg
cmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTIwMyw3ICsyMjgsNyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+
aXNLbm93bkNlbGwocmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpCiAgICAgICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjIzLDcgKzI0OCw3IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcygKIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4
LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VS
VChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3Bv
aW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdCht
X2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byByZXN1bHQgPSBtX2NoZWNrcG9pbnRMYWJl
bHMuYWRkKG1fYnl0ZWNvZGVJbmRleCwgbGFiZWwoKSk7CkBAIC0yMzMsNyArMjU4LDcgQEAgaW5s
aW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludAogaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCBqdW1wKQogewogICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdCht
X2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtl
ZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50
cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0
byBpdGVyID0gbV9jaGVja3BvaW50TGFiZWxzLmZpbmQobV9ieXRlY29kZUluZGV4KTsKQEAgLTMx
MSwyOSArMzM2LDM0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRDb3VudChBYnN0cmEK
IAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxS
ZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJl
Z3MgdmFsdWUpCi17Ci0gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7Ci0KLSAgICAv
LyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdl
IGNhbiBqdXN0IGRvIGEgZGlyZWN0Ci0gICAgLy8gc3RvcmUuCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSNlbHNl
Ci0gICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJpdHdpc2VfY2FzdDxF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0gICAgc3Rv
cmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7Ci0g
ICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOwotI2Vu
ZGlmCi19CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxs
KCkpLT5sZW5ndGgoKSA9PSAxOworfQorCisvLyBPT1BTCisvL2lubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJl
Z3MgdmFsdWUpCisvL3sKKy8vICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOworLy8K
Ky8vICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tl
dCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKKy8vICAgIC8vIHN0b3JlLgorLy8jaWYgVVNF
KEpTVkFMVUU2NCkKKy8vICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1
Y2tldHMpOworLy8jZWxzZQorLy8gICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRv
ciA9IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1f
YnVja2V0cyk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3It
PmFzQml0cy5wYXlsb2FkKTsKKy8vICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlw
dG9yLT5hc0JpdHMudGFnKTsKKy8vI2VuZGlmCisvL30KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFk
YXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4gSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSkKIHsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVnVDApOwogI2Vsc2UKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYK
QEAgLTM0MSwyNCArMzcxLDI1IEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2Ft
ZTxkZWMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxl
ZE9wY29kZSguLi4pIHsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFs
dWVSZWdzIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1Zh
bHVlUmVncyB2YWx1ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1l
dGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOworICAgIHB0cmRp
ZmZfdCBvZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0
YWRhdGFUYWJsZShieXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVPZmZzZXRGb3I8Qnl0ZWNvZGU+KG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0
QnVja2V0KCk7CisgICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgQWRkcmVzcyhtX21ldGFkYXRhR1BS
LCBvZmZzZXQpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyBy
ZXN1bHRSZWcpCi17Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpT
VmFsdWVSZWdzKHJlc3VsdFJlZykpOwotfQorLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyByZXN1bHRSZWcp
CisvL3sKKy8vICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVl
UmVncyhyZXN1bHRSZWcpKTsKKy8vfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEs
IEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CiB9CiAjZW5kaWYKIApAQCAtMzg4LDgg
KzQxOSw4IEBAIGlubGluZSBKSVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1vZGUKICAgICAg
ICAgcmV0dXJuIGFycmF5TW9kZXNJbmNsdWRlSWdub3JpbmdUeXBlZEFycmF5cyhhcnJheU1vZGVz
LCBjYXBhYmlsaXR5KTsKICAgICB9OwogCi0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24obG9ja2VyLCBtX2NvZGVCbG9jayk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X3Byb2ZpbGVkQ29kZUJsb2NrLT5tX2xvY2spOworICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbihsb2NrZXIsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEFycmF5TW9kZXMg
YXJyYXlNb2RlcyA9IHByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2Rlcyhsb2NrZXIpOwogICAgIGlm
IChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2RlcywgRG91YmxlU2hhcGUpKQogICAgICAgICByZXR1
cm4gSklURG91YmxlOwpAQCAtNDIwLDcgKzQ1MSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVh
bFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wg
PSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOworICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29u
c3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJl
c3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNTM2LDcgKzU2Nyw3IEBAIGlubGluZSB2b2lkIEpJVDo6
ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJs
b2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAg
ICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVt
cCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTQ2LDcgKzU3Nyw3IEBAIGlubGluZSB2b2lkIEpJVDo6
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0g
ICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93
bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTU1NCwxMSArNTg1LDYgQEAg
aW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogICAgIH0KIH0KIAotQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVy
IHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJh
bmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBW
aXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTg0LDcgKzYxMCw4IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsg
Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGlmIChz
cmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICAgICAgLy8gT09QUzogaGFuZGxlIGxpbmsgdGltZSBjb25z
dGFudHMgaGVyZS4uLgorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwogICAgICAgICBlbHNl
CkBAIC02MDYsMTEgKzYzMyw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwogfQogCi1BTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7CiAg
ICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNjM1LDcgKzY1Nyw3IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKIAogQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0
dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbCh2
UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHZSZWcpKQogICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAtNjc3LDMwICs2OTksNyBAQCBBTFdBWVNfSU5M
SU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7CiAgICAgaWYgKHRhcmdldCkKICAgICAg
ICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPm91dE9mTGluZUp1bXBP
ZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1BTFdBWVNfSU5MSU5FIEdldFB1dEluZm8gSklUOjpj
b3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSBieXRlY29kZSkKLXsKLSAgICB1bnNpZ25lZCBr
ZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQgKyAxOyAvLyBIYXNoTWFwIGRvZXNuJ3QgbGlrZSAw
IGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkR2V0UHV0SW5mb3MuZmluZChr
ZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdldFB1dEluZm9zLmVuZCgpKQotICAg
ICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFsdWUpOwotICAgIEdldFB1dEluZm8g
Z2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2dldFB1dEluZm87
Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBnZXRQdXRJbmZvLm9wZXJhbmQoKSk7
Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9w
PgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0aFByb2ZpbGUgSklUOjpjb3BpZWRBcml0aFByb2Zp
bGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0gICAgdWludDY0X3Qga2V5ID0gKHN0YXRpY19jYXN0
PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpICsgMSkgPDwgMzIgfCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0YUlEKTsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9j
b3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3Bp
ZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwot
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgbV9jb3BpZWRBcml0aFByb2ZpbGVzLmFk
ZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJuIGFyaXRoUHJvZmlsZTsKKyAgICByZXR1
cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNzIxLDYgKzcyMCw0NiBAQCBBTFdBWVNf
SU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0dXJuIEVDTUFNb2RlOjpz
dHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKG1fbWV0YWRhdGFH
UFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDxCeXRlY29kZT4K
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29k
ZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMy
KEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5v
ZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwor
dGVtcGxhdGUgPEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVz
dWx0KQoreworICAgIGxvYWQ4KEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVC
bG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0
KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6c3RvcmU4VG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTgodmFsdWUsIEFkZHJlc3MobV9tZXRh
ZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRh
VGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDxCeXRlY29kZT4KK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7Cisg
ICAgYWRkUHRyKG1fbWV0YWRhdGFHUFIsIFRydXN0ZWRJbW1QdHIobV91bmxpbmtlZENvZGVCbG9j
ay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwg
cmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvbnN0YW50KEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgY29uc3RhbnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAg
ICBsb2FkUHRyKEFkZHJlc3MobV9jb25zdGFudHNHUFIsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
Y29uc3RhbnRJbmRleCkgKiA4KSwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bG9hZEdsb2JhbE9iamVjdChHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRDb25zdGFudCht
X2dsb2JhbE9iamVjdENvbnN0YW50LCByZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkz
MSw3ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciks
IEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAg
ICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAJKHJldmlzaW9uIDI4MTE3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX3NyYzsKIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CisgICAgICAgIC8vIE9P
UFMKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMp
OwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICBzdG9yZTY0KFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAg
LTg3LDM3ICs4OCwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24q
CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29i
amVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9u
U2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2Fw
YWNpdHkoKSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1
YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3Vs
dFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAg
UmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVS
ZWcgPSByZWdUMzsKIAotICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwotICAgIGVsc2UgewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAg
IGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFs
bG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRv
ciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNj
cmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFn
ZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0
b3JGZW5jZSgqbV92bSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2Fk
UHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSgpICsgb2Zmc2V0T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6b2Zmc2V0T2ZPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgb2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVn
KTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0
ZWRJbW1QdHIobnVsbHB0cik7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBK
SVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlLCBidXR0ZXJm
bHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVS
ZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAg
IGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAg
IG11dGF0b3JGZW5jZSgqbV92bSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1Qz
OworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmpl
Y3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1
Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdP
YmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIApAQCAtMzc0LDcgKzM3Myw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCZSZWdp
c3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAg
ICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKICNlbHNlCkBAIC0zODUsNyAr
Mzg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaml0LmNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CiAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVy
QXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAgLTQx
MSw3ICs0MTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAK
ICAgICBpZiAoZHN0ICE9IHNyYykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM0LDkgKzQzMiwxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVu
Y3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1l
PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIGFyZ3VtZW50R1BSMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIGFyZ3VtZW50R1BSMik7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NjUsOCArNDY0LDEwIEBAIHZvaWQgSklUOjplbWl0
X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVj
dEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1Zh
bHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAg
ICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
Z1QwKSwgdGFyZ2V0KTsKQEAgLTQ4MCw3ICs0ODEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNTE5LDcgKzUyMCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBj
YXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUu
CiAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJv
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qw
KTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1
ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwogCkBAIC01NDMsNyArNTQ0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydQogICAgIC8vIEZpcnN0
LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQg
b24gdGhlIHN0cnVjdHVyZS4KICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDAp
OwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOwogCkBAIC02MjUsOCArNjI2LDEwIEBAIHZvaWQgSklUOjpl
bWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBK
U1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsK
KyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTY0MCw3ICs2NDMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNjk1LDcgKzY5OCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAgICAganVtcFRvRXhj
ZXB0aW9uSGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTcxMSw3ICs3MTUsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfdGhyb3df
aGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBh
cmd1bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB0aHJvd25WYWx1ZUdQUiA9IGFyZ3Vt
ZW50R1BSMTsKQEAgLTkwOCw3ICs5MTIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmlj
dGVxKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qy
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJl
Z1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTE4LDcgKzkyMyw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAt
OTkzLDcgKzk5OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8K
ICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkp
LCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRy
KSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsK
ICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMTcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9y
aW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVn
aXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwotICAgIGlmIChidWZmZXIg
fHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUlu
ZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCks
IG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5j
aFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFn
KTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVmZmVyICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAgICAgICAgIEpTVmFsdWVS
ZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9m
aWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdzKTsKLSAgICAgICAgfSk7
Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBAIC0xMTEyLDcgKzExMDYs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7Ci0g
ICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7
CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qw
KTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkRlYnVnZ2Vy
UmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5j
aFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1Zywg
JnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAg
bm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0xMTQ4LDcgKzExNDMsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTMxMCwyMyArMTMwNCwxOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQq
IGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hl
ZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cFRvVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9j
cmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVC
YXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENh
bGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQg
cmFyZURhdGFSZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpA
QCAtMTM0Miw3ICsxMzMyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3Qg
SW5zdAogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6
b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURh
dGFUYWcpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywg
RnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0g
SlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihj
YWNoZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wQ3JlYXRlVGhpczo6b2Zmc2V0T2ZDYWNoZWRGdW5jdGlvbigpLCBjYWNo
ZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNo
UHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5N
dWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RF
cXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0aXBs
ZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM2Miw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwg
cmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVn
cyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIsNyArMTM3Myw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJl
Z1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVy
blZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qs
IHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyArMTM4Niw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzEzOTcsOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0MTIsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1
cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogfQpAQCAtMTUwOSw3ICsxNTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVU
cmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25IYW5kbGVUcmFwcywgYXJndW1lbnRHUFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NjQsNyArMTU2MCw5IEBA
IHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4
cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVn
ZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxS
ZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgIEdQUlJlZyBn
bG9iYWxHUFIgPSBHUFJSZWc6OmFyZ3VtZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGds
b2JhbEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2JhbEdQ
UiwganNDYXN0PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4
cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0x
NjY0LDEzICsxNjYyLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19nZW5lcmF0b3Jf
ZnUKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAg
ICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZh
bHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheTo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMSk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QwLCBzaXplKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY3OSwxNCArMTY3NiwxMyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5t
X2xlbmd0aDsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
TmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSgpLCByZWdUMik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxl
LCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5k
UHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QyLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJl
Z1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9m
aWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAg
ICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
QW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQogCkBAIC0x
NzI2LDggKzE3MjIsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVy
CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1
cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB0eXBlIHByb2ZpZWxyIGlzIGVu
YWJsZWQuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9m
aWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0
YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxl
ID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE4MDksMjAgKzE4MDYs
MjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIHN0YXRp
Y19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ug
d2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwogICAg
IEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFSZWcg
PSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCi0g
ICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBh
Y2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Cisg
ICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11
c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJl
ZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRv
d1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRv
d0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCBy
ZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QxKTsKKyAg
ICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdz
KHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwog
fQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmls
ZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
KyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2Rl
IGNhY2hpbmcgd2hlbiB0aGUgdXNpbmcgdGhlIGNvbnRyb2wgZmxvdyBwcm9maWxlci4KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxv
dz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2Rl
QmxvY2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0
YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBiYXNp
Y0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7CkBAIC0xODkyLDcgKzE4OTMs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgbW92ZVZh
bHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1
bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9
CiAKQEAgLTE5MTgsNyArMTkxOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVf
b2YoY29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQ
UigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODExNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODEsNyArODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RyCiAgICAgICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiAgICAgfQogCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBKSVQ6OmdlbmVy
YXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdAogICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7CiAgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1
cm5WYWx1ZUdQUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAgLTIwNiw3
ICsyMDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAg
ICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNTAsNyArMjUw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBA
IC04NzcsNyArODc3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25z
dAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAg
ICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCByZWdU
MiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTg4Niw3ICs4ODcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAg
ICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1Qy
LCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTg5Niw3ICs4OTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRl
cl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1Qy
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTkwNiw3ICs5MDksOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Myk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDMsIHJl
Z1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtOTE2LDcgKzkyMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNv
bnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1Qx
KTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1Qy
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdU
Mik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE3Myw3ICsxMTc4LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTI0Miw3ICsxMjQ3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQog
CkBAIC0xMjg2LDcgKzEyOTEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjCiAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RP
cHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKQEAgLTEzMjAsNyArMTMyNSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTM0Niw3ICsxMzUxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChn
ZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
CiB9CiAKQEAgLTEzODksNyArMTM5NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWQoY29uc3QgSW4KICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIApAQCAtMTQ3NCw3ICsxNDc5LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAgLTE4ODUsNiArMTg5
MCw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE5OTEsNTkgKzE5
OTcsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogdm9pZCBK
SVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0g
bWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAg
QVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7
CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkg
PT0gY3VycmVudEluc3RydWN0aW9uKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFH
UFIgPSByZWdUNzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIC8vIElmIHdl
IHByb2ZpbGUgY2VydGFpbiByZXNvbHZlIHR5cGVzLCB3ZSdyZSBnYXVyYW50ZWVkIGFsbCBsaW5r
ZWQgY29kZSB3aWxsIGhhdmUgdGhlIHNhbWUKKyAgICAvLyByZXNvbHZlIHR5cGUuCiAKLSAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgaWYgKHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKKyAgICAgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxF
bnZpcm9ubWVudCgpLCByZWdUMCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRh
ZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRh
KTsKKyAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOworCisgICAgICAg
IGF1dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVy
biBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhDbG9zdXJlVmFyLCAiQmFzZWxpbmU6
IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhciIpOworICAgICAgICB9OwogCi0jZGVmaW5lIFJF
U09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVz
b2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShSRVNP
TFZFX1NDT1BFX0dFTkVSQVRPUikKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6
OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IK
KworICAgICAgICBhdXRvIGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mKSB7
CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3Rk
OjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgZ2VuZXJpYyIpOworICAgICAg
ICB9OworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gY29kZTsKKyAgICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xv
c3VyZVZhcikKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5l
cmF0b3IpOworICAgICAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0
dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljUmVzb2x2ZVNjb3Bl
R2VuZXJhdG9yKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogICAgIH0KIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciog
dGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Omdl
bmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNv
bHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5l
cmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFz
ZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0
YWRhdGEgPSBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBt
ZXRhZGF0YUdQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Nv
cGVHUFIgPSByZWdUNjsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gcmVnVDU7IC8vIGluY29taW5nIC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4K
ICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwogICAgIFVOVVNF
RF9QQVJBTShieXRlY29kZU9mZnNldEdQUik7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1Vz
ZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVz
cygpOworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAg
ICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwor
ICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dD
YXNlOwogCkBAIC0yMDUyLDI2ICsyMDc2LDI2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9i
amVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIg
PSByZWdUNDsKLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0K
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9G
KEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hw
b2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7
CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdU
MywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJl
Z1QwKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBqaXQubW92
ZShzY29wZUdQUiwgcmVnVDApOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEp
OwogCi0gICAgICAgIExhYmVsIGxvb3AgPSBsYWJlbCgpOwotICAgICAgICBKdW1wIGRvbmUgPSBi
cmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOworICAgICAgICBMYWJlbCBsb29wID0gaml0LmxhYmVs
KCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOwog
ICAgICAgICB7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9m
ZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMSk7Ci0gICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3AsIHRoaXMpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZWdUMCk7CisgICAgICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7
CisgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsKICAgICAgICAgfQot
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluaygmaml0KTsKICAgICB9
OwogCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsK
QEAgLTIwNzksMTIgKzIxMDMsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkuCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShnbG9i
YWxPYmplY3RHUFIsIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5n
RXBvY2gpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZz
ZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBq
aXQubW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKQEAgLTIwOTQsMTEgKzIxMTgsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9y
Q29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFy
KiwKICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCBy
ZWdUMCk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9i
YWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBA
IC0yMTA2LDcgKzIxMzAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFt
aWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMTE2
LDgzICsyMTQwLDQ1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5
cGUpKSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBl
bWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29k
ZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNr
aXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9IENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBl
KTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVz
b2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKKyAgICAg
ICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNv
bHZlVHlwZSgpKSwgcmVnVDApOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsK
KyAgICAgICAgYXV0byBlbWl0Q2FzZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsK
KyAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUpOworICAgICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAg
ICAgICAgIG5vdENhc2UubGluaygmaml0KTsKKyAgICAgICAgfTsKIAotICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyKTsKKyAgICAgICAgZW1p
dENhc2UoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFy
KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAg
ICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tp
cFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwog
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgp
LmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1Yihz
bG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
dGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1Io
cmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAg
ICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29w
ZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklU
IGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlw
ZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SKQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Nj
b3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRo
aXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBi
ZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2Jh
bE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAg
IC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2Jh
bE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBU
aGUgZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUo
WDg2XzY0KQpAQCAtMjI2Miw2ICsyMjQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFy
KFZpcnR1YWxSZWdpcwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKQEAgLTIzNzUsNyArMjM2Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdU
MCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
QEAgLTI0MDMsMzEgKzIzOTAsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSQogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5
dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5
dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKKyAgICBhdXRvIGNsb3N1cmVW
YXJHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayhDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3Bl
IENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2Vu
ZXJhdGVPcEdldEZyb21TY29wZVRodW5rKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OworCisg
ICAgYXV0byBnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAg
ICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoc3RkOjpudWxsb3B0LCAi
QmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OworCiAgICAgY29u
c3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NvcGVHUFIgPSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0gICAgICAg
IHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZt
ZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lz
ZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0
YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVj
b2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9w
X2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGlj
IGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9F
QUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAgIH07Ci0j
dW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNl
dCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNl
dCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29k
ZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBj
b2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNlIGlmIChw
cm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQor
ICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1Yihn
ZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKGNv
ZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpn
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0
IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlw
ZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1
bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTElu
dCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJv
dXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgpAQCAtMjQzNiw3NyArMjQzMyw2OCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29w
ZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3Owog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBSRUxFQVNFX0FTU0VS
VCh0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdS
ZXR1cm5BZGRyZXNzKCk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAgIGxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMp
OwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC50YWdSZXR1cm5BZGRy
ZXNzKCk7CisKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMs
IG1ldGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1l
dGFkYXRhU3RydWN0dXJlT2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2Nv
cGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVy
bywgcmVnVDEpKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSkpOworICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQ
UlJlZyBzY29wZUdQUikgeworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1v
dmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hU
ZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwg
U3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAg
ICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkp
LCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBD
b2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92
YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKICAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAg
YXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVn
IHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCBy
ZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcg
cmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJl
Zyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRvIGVtaXRH
ZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7
CiAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAg
ICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQ
dHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFu
ZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7
CisgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOworICAg
ICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSksIHJlZ1QwKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAg
IHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAg
ICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFy
IGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBi
dXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMg
Y2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBp
bmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0
IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNo
ZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9
IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKICAg
ICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAgICAgICAg
ICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAg
ICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5qaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAg
ICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAgICAgIH0p
KTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwg
b2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAg
ICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNl
dCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAg
YWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAg
ICBpc091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxp
bmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0z
MihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhS
ZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0T2ZM
aW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAg
ICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0
LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQs
IFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGJhc2Us
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0
Lm5lZzMyKG9mZnNldCk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0
LCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zm
c2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBHbG9iYWxWYXI6CkBAIC0yNTE0LDIxICsyNTAyLDE5IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2Fs
VmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFu
ZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
b3BlcmFuZCkpLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFk
YXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwogICAgICAgICAg
ICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVt
cCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBNb2R1bGVWYXI6CkBAIC0yNTM4LDc5ICsyNTI0LDU2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJl
c29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9F
bmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBp
bnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENv
ZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwotCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1p
dENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQot
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUg
PT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgq
cmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRh
ZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8g
VDAKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zm
c2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAg
ICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAg
ICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFy
LmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
ID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7
CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKworICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAg
ICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFBy
b3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsK
KyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwor
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7
CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7
CiAKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAg
ICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAg
IHN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRh
ZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFk
YXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkpKTsKIAotICAgIHJldCgpOworICAg
IGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VI
YW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3Ip
OwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dD
YXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVu
ayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0o
KS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBK
SVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfR0VUX0ZST01f
U0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJh
dG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNl
ZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsg
fTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRl
T3BHZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9z
Y29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVG
SU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUg
dGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBM
TEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCkBAIC0yNjY4LDg2ICsyNjMxLDc5IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIH0KICNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1Zh
bHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkK
LXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5v
dGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBK
SVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNo
cG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlm
eVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAg
ICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVW
YXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJl
Z1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRk
cmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBv
cGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5m
byA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVy
ZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVy
YW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFu
ZCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwg
Ym9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRS
ZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAg
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZh
ciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcg
YnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVz
IGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVjdHVy
ZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1
cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8vIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0
VG9TY29wZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworCiAgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAKICAgICAgICAgICAgIGppdEFzc2VydChzY29w
ZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMp
OworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMyk7
CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0
cihvcGVyYW5kU2xvdCwgcmVnVDEpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgICAgICAgICBsb2Fk
UHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Om9mZnNldE9mT3BlcmFuZCgp
LCByZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQ
dHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9m
TGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJl
Z1QzLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICAvLyBPT1BTOiB3b3VsZCBiZSBuaWNl
IHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBHUFJSZWdzCisgICAgICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2Ug
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29u
c3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAg
ICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAg
IGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAm
JiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKworICAgICAgICAgICAgbG9h
ZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZPcGVyYW5kKCksIHJlZ1QwKTsKKworICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9u
KGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5l
ZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGlu
ZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9t
SW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVn
VDApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDAp
OwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAg
ICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAg
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3Bl
cmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBT
aG91bGRGaWx0ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCBy
ZWdUMSk7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKwor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAg
ICAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICAvLyBP
T1BTOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBm
b3IgdmFsdWUuCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFs
dWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hw
b2ludFNldCgpLCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOwor
ICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJl
Z1QxLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBTY2FsZUVpZ2h0LCBKU0xleGljYWxFbnZpcm9u
bWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3Vs
ZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3Igb3duZXIv
dmFsdWUuCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFy
OgpAQCAtMjc2MSw1OCArMjcxNyw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihU
cnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2
ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAg
aXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0
byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAg
ICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxpbmso
dGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNr
aXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJl
VmFyLyBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGls
ZSB0aGluZ3MKKyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3Zl
IHByb3ZlbiB0aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZh
ciwKKyAgICAvLyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgor
ICAgIC8vIGlmIHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0
IGlzIGZpcmVkLCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAg
IC8vIG1hdHRlciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxl
ZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIp
OworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFy
KQorICAgICAgICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisg
ICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBl
bHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdU
MCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJl
Z1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0
aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlz
KTsKIAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIp
OworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZh
ci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlv
biA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAg
ICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIu
bGluayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAK
ICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAg
ICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjgyMSwxMyArMjc3MSwxNiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9T
Y29wZT4oKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8o
Ynl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZh
cikgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAg
ICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYg
YW55IGxpbmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29k
ZUJsb2NrcyBhcmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIu
CiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3Jp
dGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3Vt
ZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtMjg5OCw3ICsyODUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50
czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5
NTYsNyArMjkwOSw2IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIK
IHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpAQCAtMjk2NCw3ICsy
OTE2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQo
aW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5ODYsNyArMjkzOCw2IEBA
IHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3AKIHZvaWQgSklUOjplbWl0
X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVy
YXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAgLTMwMDIsNyAr
Mjk1Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKICAgICBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24g
bW9kZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBwcm9maWxl
IGl0IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEg
PT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CisgICAgaWYg
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVyYXRvck1ldGFk
YXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgewogICAg
ICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOwogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRpb25D
YXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQUiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjptb2RlU2V0T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
fkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKQEAgLTMxMTUs
NyArMzA2Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCgKIAog
ICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0zMTI0LDEwICszMDc1LDkgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVyKTsK
IH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVu
Y3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5
dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6
ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9u
VHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0zMTM2
LDcgKzMwODYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltCiAg
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2Rl
LCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51
bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdGlvbk1ldGFkYXRhKCksIHJlZ1QxKTsKKyAg
ICBvcjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNv
ZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdGlvbk1ldGFkYXRhKCkpOwog
CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODExNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpA
QCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9w
Sm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3Bl
cmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVT
dHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAg
ICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBl
LCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEsIHQy
KQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRbY2Zy
LCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8gcHJl
T3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGluIHQx
LCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAgICAg
ICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVB
cml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAgICBkaXNw
YXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRp
c3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxl
KHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9m
aWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1ldGFk
YXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BOZWdh
dGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAg
bmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBk
YXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQzKQog
ICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJpYSB0
MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQotICAg
IHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlB
cml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAgIHJl
dHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAgZW5k
KQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwg
aW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAg
ZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMsIHQyKQog
ICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmluYXJ5
T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcsIC5v
cDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0gICAgICAg
IGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAg
ICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDMs
IHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsxMTI0
LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAg
YmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAub3Ax
Tm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAgICAg
ICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmlu
YXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwg
dDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQog
ICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0gICAg
ICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJl
ciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MSkK
ICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVyYW5k
IGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBu
b3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFnLCAu
c2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAg
ICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRO
dW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0MSwg
dDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQkocmV2aXNpb24gMjgxMTc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwNTEsMTAgKzEwNTEsNiBA
QCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9w
KG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9w
V2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJp
dGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1l
dGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDJdCi0g
ICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGxvYWRxIFtj
ZnIsIHQwLCA4XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpAQCAtMTA2NCw3ICsxMDYw
LDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICBp
bnRlZ2VyT3BlcmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51bWJlclRhZywgdDEKICAg
ICAgICAgc3RvcmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxl
KEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAgZGlzcGF0Y2goKQogCiAg
ICAgLnNsb3c6CkBAIC0xMTI5LDExICsxMTI1LDYgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1l
dGFkYXRhLCByZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAg
ICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFy
eUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAgZ2V0KG1fb3BlcmFuZCwg
dDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCiAgICAgbWV0YWRh
dGEodDEsIHQyKQpAQCAtMTE0MSwxMiArMTEzMiwxMiBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9w
X25lZ2F0ZSwgT3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xv
dwogICAgIG5lZ2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJv
ZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdh
dGUsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQ0KQogICAgIHJldHVybih0MykKIC5vcE5lZ2F0ZU5v
dEludDoKICAgICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JxIDB4
ODAwMDAwMDAwMDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxl
TnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2Zp
bGVOdW1iZXIsIHQxLCB0NCkKICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0x
MTU5LDEwICsxMTUwLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBv
cAogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3Qs
IG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBt
ZXRhZGF0YSh0NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0eXBlKQotICAgICAgICAg
ICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBC
aW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0
KG1fcmhzLCB0MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCkBAIC0xMTcyLDcgKzExNTksNyBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAg
ICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5zbG93LCB0MikKIAotICAg
ICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDQpCiAgICAg
ICAgIGRpc3BhdGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTgyLDEwICsxMTY5LDEwIEBA
IG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYnRxeiB0
MSwgbnVtYmVyVGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAg
ZnEyZCB0MSwgZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQor
ICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2Zp
bGVOdW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAg
IC5vcDFOb3RJbnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50
KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFBy
b2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgIC5vcDFO
b3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEyMDEsNyArMTE4OCw3IEBA
IG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJz
dCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIGlzIGRlZmluaXRlbHkg
bm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcs
IC5zbG93Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1
cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1i
ZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBhZGRxIG51bWJlclRh
ZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyODExNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTI1MDIsNiArMjUwMiwxNyBAQCBtYWNybyBub3RTdXBwb3J0ZWQo
KQogICAgIGVuZAogZW5kCiAKKworbWFjcm8gdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6
TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBV
bmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKworbWFjcm8gdXBkYXRlQmluYXJ5
QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9h
ZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRl
bXAKKyAgICBvcmggdHlwZSwgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAor
CiAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRoZSBYODZfNjRfV0lOIGNvbmRpdGlvbiBo
ZXJlLCBzaW5jZSBXRUJBU1NFTUJMWSBzaG91bGQgYWxyZWFkeSBiZSBmYWxzZSBvbiBXaW5kb3dz
CiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNzE2CiBpZiBX
RUJBU1NFTUJMWSBhbmQgbm90IFg4Nl82NF9XSU4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgxMTc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQ
cm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFs
dWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHBy
b2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYg
cHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVB
cmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0Jp
Z0ludCgpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436537</attachid>
            <date>2021-08-26 11:33:09 -0700</date>
            <delta_ts>2021-08-26 17:22:31 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>151020</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNiArNDY3LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUg
TElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7
IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRh
Lm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRl
Y29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5l
IExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7
IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRh
Lm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVj
b2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygp
OwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkg
ewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpA
QCAtNTI5LDE0ICs1NDIsMTQgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0
ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQot
ICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTkso
T3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19X
SVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5l
Z2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAg
ICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTkso
T3BKbmVxUHRyKQogCkBAIC0zMTAyLDcgKzMxMTUsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZy
YW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6
QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0
aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVu
bGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKQEAgLTMzMTgsMTMgKzMzMzEsMTMgQEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2Rl
QmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBj
YXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhp
cykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVy
biAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAg
ICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwog
ICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAg
cmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7Cisg
ICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzMzNiwxMSArMzM0
OSwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAg
c3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICBy
ZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
KyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8
T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6
Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1f
YXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4
MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMjMzLDE2ICsyMzMsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0
YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJy
ZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRo
ZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJuIHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFu
ZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkK
LSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3Jh
cnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJl
Zy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fbnVtVmFycyk7CkBAIC0yNjcsNiArMjU3
LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3Vs
dCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMg
SUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLgogICAgIHN0cnVjdCBKSVREYXRhIHsK
ICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogCkBAIC00NzgsNiArNDY5
LDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5hbWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxl
cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVBy
b2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJ
VCgpKTsKQEAgLTgwMyw2ICs3OTUsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2Vy
UmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lk
KiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAog
ICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9p
ZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNiArMTc1LDcgQEAgcHVibGljOgog
CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRS
ZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgp
XTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVh
bFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9D
b25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyBy
ZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYg
KzIwOCwxNCBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9k
ZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25z
dDsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAg
ICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24p
CisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0
aW9ucygpLmF0KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYm
IGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0
aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQogCiAgICAgdW5zaWduZWQgbnVtQ2FsbGVl
TG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KICAgICB1bnNpZ25l
ZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CkBAIC00MTAsNiArNDE5LDkg
QEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5z
dHJ1Y3Rpb25zOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+
IG1fbGl2ZW5lc3M7CiAKKyAgICAvLyBPT1BTOiBiaW5kIGEgYmV0dGVyIHBsYWNlIHRvIHN0b3Jl
IHRoaXMgc3R1ZmY/CisgICAgVmVjdG9yPEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9iaW5hcnlBcml0
aFByb2ZpbGVzOworICAgIFZlY3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4gbV91bmFyeUFyaXRoUHJv
ZmlsZXM7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhp
dFByb2ZpbGU7CkBAIC00NTUsNiArNDY3LDI4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJl
dHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uLm9mZnNldCgpKTsKICAgICB9Cisg
ICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSB0aGlzLT5ieXRlY29kZU9mZnNldChw
Yyk7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KG9mZnNldCk7CisgICAgfQor
CisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1f
YmluYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9m
aWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2Zp
bGVzLnNpemUoKTsKKyAgICAgICAgbV91bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFy
aXRoUHJvZmlsZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUmIGJpbmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBt
X2JpbmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgdW5hcnlB
cml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1cm4gbV91bmFyeUFyaXRoUHJvZmlsZXNbaV07
IH0KIAogcHJpdmF0ZToKICAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8
SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlz
aW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1l
dGFkYXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDkgKzEwMSwxOCBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gc19vZmZzZXQxNlRhYmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVz
aW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAgICAgdXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsK
IAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNldElu
TWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9p
czMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUx
NigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBz
aXplb2YoT3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc19vZmZzZXRUYWJsZUVudHJpZXMgPSBOVU1C
RVJfT0ZfQllURUNPREVfV0lUSF9NRVRBREFUQSArIDE7IC8vIG9uZSBleHRyYSBlbnRyeSBmb3Ig
dGhlICJlbmQiIG9mZnNldDsKIAogICAgIC8vIE5vdCB0byBicmVhayBhbGlnbm1lbnQgb2YgMzJi
aXQgb2Zmc2V0IHRhYmxlLCB3ZSByb3VuZCB1cCBzaXplIHdpdGggc2l6ZW9mKE9mZnNldDMyKS4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJ
KHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQCB0ZW1wbGF0ZTx1bnNp
Z25lZCBudW1iZXJPZkJ1Y2tldHNBcmd1bWVuCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1
Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3Bl
Y0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldElu
ZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3Bl
Y0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQpAQCAtMTM0LDcgKzEz
Myw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgCiAgICAgICAgIHJldHVy
biBtX3ByZWRpY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNr
ZXRzW3RvdGFsTnVtYmVyT2ZCdWNrZXRzXTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGlj
dGlvbiB7IFNwZWNOb25lIH07CkBAIC0xNTYsNiArMTU1LDcgQEAgc3RydWN0IFZhbHVlUHJvZmls
ZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldAogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZh
bHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgp
IDogVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPigpIHsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0c1swXSk7IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5OCw3
ICsxNTk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRVbmFyeQogICAg
ICAgICBlbWl0VW5hcnlPcDxPcE5vdD4oZHN0LCBzcmMpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5
cGUpOworICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSwgbV9jb2Rl
QmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IG9wX2JpdG5vdDoKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BCaXRub3Q+KGRzdCwgc3JjKTsKQEAg
LTE2OTYsMTMgKzE2OTYsMTMgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRU
eXBlTwogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluYyhSZWdpc3RlcklE
KiBzcmNEc3QpCiB7Ci0gICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcEluYzo6
ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsK
ICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdERlYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BEZWM6OmVtaXQodGhpcywgc3Jj
RHN0KTsKKyAgICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFy
eUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqPgogICAgICAgICBlbWl0
QmluYXJ5T3AoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBz
cmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJpbmFyeU9w
OjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMpOworICAgICAgICAgICAgQmluYXJ5
T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcywgbV9jb2RlQmxvY2stPmFkZEJp
bmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDY5NCw3ICsxNDY5NCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3Bl
UmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCks
IGNhbGxTaXRlSW5kZXgpOworICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNo
YWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChu
b2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0
YS5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFk
YXRhLnJiCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL01ldGFkYXRhLnJiCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjIgQEAgY2xhc3Mg
TWV0YWRhdGEKICAgICBkZWYgc3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAK
LSAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBj
b252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBnZW5lcmF0ZU9mZnNldE9mKQogICAgICAgICAg
ICAgZmllbGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5r
aW5kX29mPyBIYXNoCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2Nv
bnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAg
ICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCAr
ICcgICAgJywgdHlwZSwgZmFsc2UpfVxuI3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50
b19zfTsiCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGRO
YW1lfTsiCisgICAgICAgICAgICAgICAgICAgIGlmIGdlbmVyYXRlT2Zmc2V0T2YKKyAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyAiXG4iICsgInN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJldHVy
biBPRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0CiAgICAgICAgICAgICAgICAgZW5k
CiAgICAgICAgICAgICBlbmQuam9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVs
ZHMgPSBjb252ZXJ0RmllbGRzKCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkcyA9
IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcywgdHJ1ZSkKIAogICAgICAgICBpbml0
cyA9IG5pbAogICAgICAgICBpZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5l
bXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3Bw
CShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVs
cGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIHZvaWQgQ0NhbGxIZWxw
ZXJzOjpsb2dTaGFkb3dDaGlja2VuUHJvbG8KICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3Bl
KSkpOwogfQogCi12b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
R1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAg
ICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwotICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2Vy
KCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgY2FsbGVlKSkpOwotICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFs
dWUpKSk7Ci0gICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKLSAgICBzdG9yZVB0cihU
cnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7Ci0gICAgc3RvcmUzMihU
cnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwg
T0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsK
LX0KLQogdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mIHZt
LCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBz
Y3JhdGNoMikKIHsKICAgICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93
Q2hpY2tlbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5o
CShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVs
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDE4IEBAIHB1YmxpYzoKICAgICAv
LyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJlZ2lzdGVycy4gVGhleSBh
c3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Agb2YKICAgICAvLyBzdGFjayB0byBt
YXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1
ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY29w
ZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFj
a2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxs
U2l0ZUluZGV4KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAg
IHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxvY2ss
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKKyAgICB7CisgICAgICAgIHN0b3JlUHRyKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgICAgIHN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRy
ZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwg
Y2FsbGVlKSkpOworICAgICAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkp
OworICAgICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOworICAgICAgICBzdG9yZVB0
cihjb2RlQmxvY2ssIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7CisgICAgfQor
CiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQg
d3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBh
Y2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwg
R1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2
aXNpb24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1f
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogewor
ICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpWYWx1ZTo6R2xvYmFsT2JqZWN0KTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTExMyw3
ICsxMTQsNyBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqCiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVz
c09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5v
dGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KQogewogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0
OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KQEAg
LTEyOSw3ICsxMzAsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICAg
ICBpZiAoIUFTU0VSVF9FTkFCTEVEKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBKdW1wIG9rID0g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGJyZWFr
cG9pbnQoKTsKICAgICBvay5saW5rKHRoaXMpOwpAQCAtNjc3LDE3ICs2NzgsMTYgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERG
Rzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgp
OworICAgIC8vIE9PUFM6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGRvbmUgb24gdW5saW5rZWQgY29k
ZSBibG9jaz8KKyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNl
IERGRzo6Q2Fubm90Q29tcGlsZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwot
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hv
dWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6
Q2FuQ29tcGlsZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAg
bV9jYW5CZU9wdGltaXplZCA9IHRydWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGlu
ZWQgPSB0cnVlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtNzQ3LDcgKzc0Nyw3IEBAIHZvaWQgSklUOjpjb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7
CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
OwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Qx
KTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzYzLDcgKzc2MywxMCBAQCB2b2lk
IEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAKICAgICBpZiAobV9jb2RlQmxv
Y2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRl
Y29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0
b3IoKSB8fCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID4gMSkpIHsKKyAgICAgICAgICAg
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywg
cmVnVDIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9m
ZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBGaXhlZFZlY3Rvcjo6b2Zmc2V0T2ZTdG9y
YWdlKCkpLCByZWdUMik7CisKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAw
OyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsK
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2Fu
dCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAv
LyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byBy
ZWNvcmQgdGhlIGR1bW15IHZhbHVlLgpAQCAtNzc5LDYgKzc4Miw3IEBAIHZvaWQgSklUOjpjb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgogICAgICAgICAgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFy
Z3VtZW50KGFyZ3VtZW50KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1
ZShyZXN1bHRSZWdzLCBBZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2Zp
bGUpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC05OTMsNyArOTk3LDcg
QEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwg
dG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5
UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGly
ZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkp
OworICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgQmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwg
d2l0aEFyaXR5Q2hlY2spKTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAg
ICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBt
X2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0
cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKQEAg
LTEwMDgsNiArMTAxMiw4IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5U
aHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7
CiAKKyAgICBtX2ppdENvZGUtPmFkb3B0TWF0aElDcyhtX21hdGhJQ3MpOworCiAgICAgewogICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwogICAg
ICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01v
ZGU6OkxhdGVTaHJpbmspOwpAQCAtMTA4MiwxNCArMTA4OCwxNCBAQCB2b2lkIEpJVDo6ZG9NYWlu
VGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygp
LT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0aW9u
LiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9j
ayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5r
ZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpID09IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAogICAgIHJldHVybiByb3VuZExvY2FsUmVn
aXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9CiAKLWlu
dCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK2ludCBK
SVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQog
ewogICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRG
b3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwyNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAor
ICAgIGNsYXNzIEpJVENvbnN0YW50UG9vbCB7CisgICAgcHVibGljOgorICAgICAgICB1c2luZyBD
b25zdGFudCA9IHVuc2lnbmVkOworCisgICAgICAgIGVudW0gY2xhc3MgVmFsdWUgeworICAgICAg
ICAgICAgR2xvYmFsT2JqZWN0CisgICAgICAgIH07CisKKyAgICAgICAgQ29uc3RhbnQgYWRkKFZh
bHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2Nv
bnN0YW50cy5zaXplKCk7CisgICAgICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQodmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgVmVjdG9yPFR5cGVzPiBtX2NvbnN0YW50czsKKyAgICB9OworCiAgICAgZW51bSBPcGNv
ZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKQEAg
LTIzMiw4ICsyNTEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGppdC5wcml2YXRl
Q29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVz
cywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBm
cmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7Ci0gICAgICAgIHN0YXRpYyBpbnQgc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOworICAgICAgICBzdGF0aWMgdW5zaWduZWQg
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CisgICAgICAgIHN0YXRp
YyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAKICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gY29t
cGlsZVRpbWVTdGF0cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU2Vjb25k
cyB0b3RhbENvbXBpbGVUaW1lKCk7CkBAIC0yNjksNiArMjg4LDI0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8Qnl0ZWNvZGU+CisgICAg
ICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZz
ZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPEJ5dGVjb2RlPgorICAgICAgICB2b2lk
IGxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJl
Zyk7CisKKyAgICAgICAgdGVtcGxhdGUgPEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQ4RnJv
bU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAg
ICAgICB0ZW1wbGF0ZSA8Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0YShH
UFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxh
dGUgPEJ5dGVjb2RlPgorICAgICAgICB2b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0
YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdm9p
ZCBsb2FkQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BSUmVnKTsKKyAgICAgICAg
dm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25D
aGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5kbGVyKTsKQEAgLTMzNywxMCArMzc0LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8g
cHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAg
ICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
TWV0YWRhdGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4g
dm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAg
ICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcp
OworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBK
U1ZhbHVlUmVncyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNv
bnN0IEJ5dGVjb2RlJiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRh
ZGF0YSYsIEpTVmFsdWVSZWdzKTsKQEAgLTY0OCw3ICs2ODUsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pz
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBA
IC03MDEsNyArNzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBl
bWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
KTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOwotICAgICAg
ICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9p
ZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAg
ICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJl
VmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpAQCAtNzEwLDYgKzc0Niw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lz
dGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgICAgICBib29sIGlzS25vd25DZWxs
KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZp
cnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJl
Z2lzdGVyKTsKQEAgLTc1MSwyNiArNzg4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gUmVz
b2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7CiAgICAgICAgIH0K
IAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkg
XAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBv
cF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAg
Rk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQot
I3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1
bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KLSAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1vZHVsZVZhciBiZWNhdXNl
IGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4gdXNlIGEgdGh1bmsuCi0g
ICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhl
c2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAgICAgICAgICAgcmV0dXJuICEocmVz
b2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZh
cik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9S
KHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZN
Jik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQotICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFy
KiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNv
bHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CiAKICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihW
TSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CkBAIC05NzQsMTEgKzk5Myw5IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRp
bWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVP
cHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9
CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1p
dFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJl
dHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3
aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBj
YXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2Zp
bGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC05ODYsMTMgKzEwMDMsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAg
ICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAgICAgICAKLSAgICAgICAg
Ly8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBh
bmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZh
c3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KLSAgICAgICAgLy8g
SXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFz
dCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3Bl
KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCiAgICAgICAgIEludGVy
cHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC0xMDIwLDkgKzEwMzAsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOwogICAgICAg
ICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCi0gICAgICAgIEhhc2hNYXA8dW5z
aWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwotICAgICAgICBIYXNoTWFwPHVp
bnQ2NF90LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQcm9maWxlczsKLQogICAg
ICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExpc3QgbV9leGNl
cHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQpAQCAtMTA1NywxMSArMTA2NCwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
SGFzaE1hcDxjb25zdCBJbnN0cnVjdGlvbiosIFVuaXF1ZVJlZjxNYXRoSUNHZW5lcmF0aW9uU3Rh
dGU+PiBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGU7CiAKICAgICAgICAgYm9v
bCBtX2NhbkJlT3B0aW1pemVkOwotICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGlu
ZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29k
ZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKIAotICAgICAgICBSZWZQdHI8RGly
ZWN0SklUQ29kZT4gbV9qaXRDb2RlOworICAgICAgICBNYXRoSUNIb2xkZXIgbV9tYXRoSUNzOwor
ICAgICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENvZGU7CisKKyAgICAgICAgSklU
Q29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkgfTsKKworICAgICAgICBHUFJSZWcgbV9tZXRhZGF0YUdQUjsKKyAgICAgICAg
R1BSUmVnIG1fY29uc3RhbnRzR1BSOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lv
biAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkg
fHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRH
UFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMjAsNyAr
MzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAg
ICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFpl
cm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzc1LDggQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKQEAgLTcxNyw4ICs3MjEsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0
IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9jb2RlQmxvY2st
PmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVROZWdJ
QyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBt
X2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOwog
ICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25W
YWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
bkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5
MDMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQg
SklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwot
ICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2Zp
bGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRD
b2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRk
PigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3MuYWRk
SklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRp
b25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk0OSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0
aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBp
ZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1p
dFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmls
ZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwg
c3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2Fz
ZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUsMTAgKzEw
MjAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgICAg
ICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwg
bGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwxMyArMTA2MSwx
NCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAjZW5kaWYKIAog
ICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmls
ZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVn
VDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWlu
dGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1Jl
Z3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0
PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdU
NCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lD
X1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwxMyArMTEy
NywxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAjZW5kaWYK
IAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFBy
b2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9m
aWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJh
dGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNl
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpf
SklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklU
T3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUo
TUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExNjYs
NyArMTE3NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAog
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAgICBpZiAo
c2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlB
cml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tX3Byb2ZpbGVJbmRl
eCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRU
eXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUu
bV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjE5LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigp
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVs
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlB
cml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKSk7CisgICAgSklUTXVs
SUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9p
bnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBl
bWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4ICsxMjM1
LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAg
ICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxl
KTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29k
ZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4o
KSk7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJv
ZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24s
IHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNp
b24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxs
RXZhbChjb25zdCBPcENhbGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCByZWdUMSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVn
VDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFs
dWUoKSksIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTksNyArMjU5LDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAgZW1pdExv
YWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJl
c3VsdChieXRlY29kZSk7CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9j
YWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJl
bCgpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzU0LDcg
KzM1NCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJl
dmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0
ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRl
Y29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJl
Z1QwKTsKIH0KIApAQCAtMTMwLDcgKzEzMCw3IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwo
Y29uc3QgT3BDYWxsRXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlciwg
cmVnVDEpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBD
YWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKQEAgLTE1Nyw3ICsx
NTcsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAKICAgICBs
b2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsK
ICAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
aW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjU5LDcg
KzI1OSw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KIAogICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0g
ZG9uZUxvY2F0aW9uOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpA
QCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3Qg
SW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC00MDQsNyArNDA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CkBA
IC00OTMsNyArNDkzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJ
bgogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFk
dmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQpAQCAtNTEyLDcgKzUxMiw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZh
bHVlR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1Zh
bHVlUmVncyB7IHZhbHVlR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmso
dGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMjgx
NjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI0OCw2ICsyNDgsNDEgQEAgcHJvdGVjdGVkOgogICAgIENvZGVSZWY8SlNFbnRyeVB0
clRhZz4gbV9yZWY7CiB9OwogCitjbGFzcyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIHZv
aWQgYWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCisgICAgeworICAgICAgICBtX2Fk
ZElDcyA9IFdURk1vdmUob3RoZXIubV9hZGRJQ3MpOworICAgICAgICBtX211bElDcyA9IFdURk1v
dmUob3RoZXIubV9tdWxJQ3MpOworICAgICAgICBtX25lZ0lDcyA9IFdURk1vdmUob3RoZXIubV9u
ZWdJQ3MpOworICAgICAgICBtX3N1YklDcyA9IFdURk1vdmUob3RoZXIubV9zdWJJQ3MpOworICAg
IH0KKworICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKyAgICBKSVRN
dWxJQyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0
dXJuIG1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisgICAgSklUU3ViSUMqIGFkZEpJVFN1
YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1YklDcy5h
ZGQoYXJpdGhQcm9maWxlKTsgfQorICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxl
KTsgfQorCisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVEFkZEdlbmVy
YXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRBZGRJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRo
UHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUQWRkSUMocHJvZmlsZSk7IH0KKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTXVsR2VuZXJhdG9yPjo6dmFsdWU+
Ojp0eXBlPgorICAgIEpJVE11bElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9m
aWxlKSB7IHJldHVybiBhZGRKSVRNdWxJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6
OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVROZWdHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAg
SklUTmVnSUMqIGFkZE1hdGhJQyhVbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4g
YWRkSklUTmVnSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0
b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVy
YXRvciwgSklUU3ViR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVFN1YklDKiBhZGRN
YXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRTdWJJQyhw
cm9maWxlKTsgfQorCitwcml2YXRlOgorICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAg
QmFnPEpJVE11bElDPiBtX211bElDczsKKyAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAg
IEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Cit9OworCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihEaXJlY3RKSVRDb2RlKTsKIGNsYXNzIERpcmVjdEpJVENvZGUgOiBwdWJs
aWMgSklUQ29kZVdpdGhDb2RlUmVmIHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FU
RURfV0lUSF9IRUFQX0lERU5USUZJRVIoRGlyZWN0SklUQ29kZSk7CkBAIC0yNjYsNiArMzAxLDEy
IEBAIHByaXZhdGU6CiAgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3dpdGhBcml0eUNoZWNr
OwogfTsKIAorY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1
YmxpYyBNYXRoSUNIb2xkZXIgeworICAgIEJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQ
dHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spCisgICAg
ICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQpCisgICAgeyB9Cit9OworCiBjbGFzcyBOYXRpdmVKSVRDb2RlIDogcHVi
bGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CiBwdWJsaWM6CiAgICAgTmF0aXZlSklUQ29kZShKSVRU
eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lv
biAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNf
SU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5r
VGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6
OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFz
cmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30K
KworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNy
YykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQp
IHsKKyAgICAgICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBhbGwgbGluayB0
aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3Jj
KQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVC
bG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2Vk
Q29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVn
aXN0ZXIgZW50cnkpCkBAIC0xODUsNyArMjEwLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
YXBwZW5kQ2FsbFdpdGhFeAogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykp
CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlT
bG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsK
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0
aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlu
c3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNT
RVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+
aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAx
KTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2Rl
SW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2
YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0
ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsK
LSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+
aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3Ry
dWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2tw
b2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwzNCBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewot
ICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
U3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5s
ZW5ndGgoKSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQotewotICAg
IEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0gICAgLy8gV2UncmUgaW4gYSBzaW1w
bGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRp
cmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1
ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQotICAgIEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3Jp
cHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAgIHN0b3JlMzIodmFsdWUucGF5bG9h
ZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwotICAgIHN0b3JlMzIodmFsdWUu
dGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgotfQorICAgIGlmICgh
c3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYm
IGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0g
MTsKK30KKworLy8gT09QUworLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQorLy97Cisv
LyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKKy8vCisvLyAgICAvLyBXZSdyZSBp
biBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0
IGRvIGEgZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lmIFVTRShKU1ZBTFVFNjQpCisvLyAg
ICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vI2Vsc2UK
Ky8vICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8
RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8gICAg
c3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7
CisvLyAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7
CisvLyNlbmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5h
YmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwg
VmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlm
UHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVn
VDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNl
CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsMjQgKzM1Mywy
NSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKK3Rl
bXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7
CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29k
ZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91
bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNv
ZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0
b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRS
ZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVl
UHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97CisvLyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7
CisvL30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVn
KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVn
KQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJl
c3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVS
ZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKQEAgLTM5MCw3ICs0MjEsNyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAg
ICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKKyAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVz
dGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAgICAg
bG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKQEAgLTUwNiw3ICs1MzcsNyBAQCBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0CiAKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0g
ICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93
bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNiw3ICs1NDcsNyBAQCBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lz
dGVySUQgdGFnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsK
KyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50
KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01
MjQsMTEgKzU1NSw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMK
ICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50
KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVh
bFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCiB7
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKQEAgLTU1NCw3ICs1ODAsOCBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1f
Ynl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJp
bmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBz
ZXQuCiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgICAgIC8vIE9PUFM6IGhhbmRs
ZSBsaW5rIHRpbWUgY29uc3RhbnRzIGhlcmUuLi4KKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdl
dENvbnN0YW50T3BlcmFuZChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCiAg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0
KTsKICAgICAgICAgZWxzZQpAQCAtNTc2LDExICs2MDMsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBk
c3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQo
VmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0
ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTYw
NSw3ICs2MjcsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAK
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdp
c3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9j
ay0+aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTY0NywzMCArNjY5
LDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewogICAgIGlm
ICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2Nr
LT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKLX0KLQotQUxXQVlTX0lOTElORSBH
ZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNvZGUpCi17
Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsgLy8gSGFzaE1h
cCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdl
dFB1dEluZm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJ
bmZvcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsK
LSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9nZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0
SW5mby5vcGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJbmZvOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6
Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2NF90IGtl
eSA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEpIDw8IDMy
IHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0
byBpdGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0
ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0
ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1fY29waWVk
QXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBhcml0aFBy
b2ZpbGU7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZz
ZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY5MSw2ICs2
OTAsNDYgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAogICAgIHJl
dHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDxCeXRlY29kZT4KK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5
dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRk
cmVzcyhtX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNl
dEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1w
bGF0ZSA8Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0YWRh
dGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0
KQoreworICAgIGxvYWQzMihBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxv
Y2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCks
IHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDxCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKG1fbWV0YWRhdGFHUFIs
IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5
dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDxCeXRlY29kZT4KK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZhbHVl
LCBBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCku
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0
ZSA8Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJS
ZWcgcmVzdWx0KQoreworICAgIGFkZFB0cihtX21ldGFkYXRhR1BSLCBUcnVzdGVkSW1tUHRyKG1f
dW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVj
b2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxv
YWRDb25zdGFudChKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJl
ZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKG1fY29uc3RhbnRzR1BSLCBzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KGNvbnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAg
ICBsb2FkQ29uc3RhbnQobV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgxNjM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29u
c3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9y
Q2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVk
SW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZz
ZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Y29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25O
b0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNo
YWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0
MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkg
eworICAgICAgICAvLyBPT1BTCiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAg
ICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJl
c3NGb3IoZHN0KSk7CkBAIC04NywzNyArODgsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNv
bnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxv
Y2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxv
Y2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAg
UmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJl
ZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lz
dGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CiAKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7
Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpj
b25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlh
bGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsK
LSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Om9m
ZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIG9mZnNldE9mQWxsb2NhdG9yKCksIGFs
bG9jYXRvclJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmpl
Y3Q6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIG9mZnNldE9mU3RydWN0dXJl
KCksIHN0cnVjdHVyZVJlZyk7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBi
dXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0
cnVjdHVyZSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFk
ZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBz
Y3JhdGNoUmVnKTsKKyAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBz
Y3JhdGNoUmVnKTsKKyAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1
Y3R1cmVSZWcgPSByZWdUMzsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVS
ZWcpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTM3
NCw3ICszNzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZl
UmVnaXN0ZXJzKCkpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiAj
ZWxzZQpAQCAtMzg1LDcgKzM4NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0
cnVjdGlvbioKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0p
CiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5j
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNh
dmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdp
c3RlcnMoKSk7CkBAIC00MTEsNyArNDEwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0
aXZlKGNvbnN0IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9r
ZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0MzIs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6
OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25O
YW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBh
cmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1l
LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ2NCwxMCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQ
UlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZG
YWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2Jh
bE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVn
cyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vs
c2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNDgxLDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1MjAsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3Qs
IGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBv
biB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Mo
cmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7
CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApA
QCAtNTQzLDcgKzU0NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0
cnUKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0
OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNjI1LDggKzYyNiwx
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHBy
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNo
SWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZw
UmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGds
b2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVl
UmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwog
I2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc1RydXRo
eUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDAsNyArNjQzLDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1Qw
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTY5NSw3ICs2OTgs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMSwgcmVnVDAp
OwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxzZQogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CkBAIC03MTEsNyArNzE1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhyb3du
VmFsdWVHUFIgPSBhcmd1bWVudEdQUjE7CkBAIC05MDgsNyArOTEyLDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3
ICs5MjMsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKQEAgLTk5Myw3ICs5OTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChj
b25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVG
b3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9m
ZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0
Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMDExLDIzICsxMDE3LDExIEBAIHZv
aWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0
eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsK
LSAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZt
KCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1
ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVl
UHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBza2lw
T1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0
aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYg
KGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0gICAg
ICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSwgcmVn
cyk7Ci0gICAgICAgIH0pOwotICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIApA
QCAtMTExMiw3ICsxMTA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25z
dCBJbgogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlYnVnPigpOwotICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0Fk
ZHJlc3MoKSwgcmVnVDApOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2Vy
UmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdI
b29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwpAQCAtMTE0OCw3
ICsxMTQzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzMTAsMjMgKzEzMDQs
MTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0
cnVjdHVyZUlEOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3Qs
IHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwot
ICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVy
ZUlEKCksIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2Fs
bGVlOwotICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0
YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsK
ICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1
bHRSZWcgPSByZWdUMDsKQEAgLTEzNDIsNyArMTMzMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Ny
ZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1
bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpT
RnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJl
c3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0
T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsK
IAotICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBs
b2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcENyZWF0ZVRoaXM6Om9mZnNldE9mQ2FjaGVk
RnVuY3Rpb24oKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxl
Q2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1Q
dHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAg
ICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzNjIsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1
ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcg
KzEzNzMsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0
ZWRJbW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcgKzEzODYsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
cmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxMzk3
LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEw
ICsxNDEyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0
YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1
bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE1MDksNyArMTUwNCw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFyZ3VtZW50R1BSMCk7CiAjZWxzZQogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0x
NTY0LDcgKzE1NjAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3Ry
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkp
KTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BSID0gR1BSUmVnOjphcmd1bWVudEdQUjA7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29kZUJsb2NrLT5n
ZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVl
R1BSKTsKIH0KIApAQCAtMTY2NCwxMyArMTY2MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRl
Y29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7CiAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJl
Z1QwLCBzaXplKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwg
cmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCBy
ZWdUMCwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NzksMTQgKzE2NzYs
MTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUlu
ZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5
QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDApOwogI2Vsc2UKICAgICBlbWl0TG9hZChzaXpl
SW5kZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAj
ZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNjkwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Fy
cmF5X3dpdGhfc2l6ZShjbwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUg
Y2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdHlw
ZSBwcm9maWVsciBpcyBlbmFibGVkLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5
cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCkBA
IC0xNzc3LDIwICsxNzc0LDI0IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tl
bl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BS
MCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlj
a2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7Ci0gICAgR1BS
UmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3Vt
ZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3Vy
ZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywg
c2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJn
R1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgorICAgICAgICBH
UFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBh
Y2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Cisg
ICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJl
Z1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qz
KTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFs
dWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0
UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklU
OjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBv
ZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHVzaW5nIHRoZSBjb250cm9sIGZsb3cg
cHJvZmlsZXIuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
cm9maWxlQ29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxv
Y2tMb2NhdGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMpOwpA
QCAtMTg2MCw3ICsxODYxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0
IElucwogICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAogICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE4ODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFs
dWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsK
ICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNp
b24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAg
ICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIH0KIApAQCAtMTI5LDcgKzEyOSw3IEBA
IHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QKICAgICAgICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpOwogICAgICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdAogICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IApAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9u
YW1lKGMKICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVP
cHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIApAQCAtNzI3LDcgKzcyNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
ZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1Qx
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC03MzYsNyArNzM3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Nl
dHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRT
ZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NDYsNyArNzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0
ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVy
LCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBy
ZWdUMSwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRD
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1
dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NTYsNyArNzU5
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMy
X3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTc2Niw3ICs3NzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
c2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBh
dHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwg
YXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMjMsNyArMTAyOCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAg
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
c3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAK
QEAgLTEwOTIsNyArMTA5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKIH0KIApAQCAtMTEzNiw3ICsxMTQxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRp
b25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0xMTcwLDcgKzExNzUsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3Vs
dFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAg
LTExOTYsNyArMTIwMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y28KICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHNX
aXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMjM5LDcgKzEyNDQsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAgLTEzMjQsNyArMTMyOSw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
ZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
CkBAIC0xNzM1LDYgKzE3NDAsNyBAQCB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1
YWxSZWdpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewor
ICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CkBAIC0xODQxLDU5ICsxODQ3LDc3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUo
Y29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJl
c29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNv
bHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBt
X2J5dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdCht
X2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIg
R1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQ
UiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdU
NTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1
cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2
ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVn
VDApOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAg
IGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAg
ICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0
YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVj
b2RlKTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mKSB7Cisg
ICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoQ2xvc3Vy
ZVZhciwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICAgICAg
fTsKIAotI2RlZmluZSBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVz
b2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25z
dCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9S
RVNPTFZFX1RZUEUoUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCisgICAgICAgIGF1dG8gY2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAg
ICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyIpOwogICAgICAgICB9OwotI3VuZGVmIFJFU09MVkVf
U0NPUEVfR0VORVJBVE9SCisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJh
dG9yID0gW10gKFZNJikgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29s
dmVTY29wZVRodW5rKHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdl
bmVyaWMiKTsKKyAgICAgICAgfTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDc7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsK
KyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwogICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
LSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29s
dmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgICAgIGlmIChwcm9maWxlZFJl
c29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1
YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgIGNv
ZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJh
dG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2Vu
ZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNv
ZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxS
ZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAv
LyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRo
IHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
KwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCiAgICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhy
dSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBy
ZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAg
IHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxl
KCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFi
bGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAg
ICBKdW1wTGlzdCBzbG93Q2FzZTsKIApAQCAtMTkwMiwyNiArMTkyNiwyNiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAg
Z2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxP
YmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RH
UFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIs
IE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50
KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJl
c3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVj
dEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNo
cG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1
YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZl
Q2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBt
b3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsK
KyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29w
ZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAg
ICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwg
bG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QxKTsKICAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29w
LCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6
Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDEpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmpp
dCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxp
bmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlKSB7CkBAIC0xOTI5LDEyICsxOTUzLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2Jq
ZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExl
eGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmpl
Y3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAg
ICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0ds
b2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkp
OworICAgICAgICAgICAgaml0Lm1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xOTQ0LDExICsxOTY4LDExIEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6
Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkgZm9yIEdsb2JhbFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIq
LgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxF
bnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVu
dCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgpAQCAtMTk1Niw3ICsxOTgwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9k
dWxlVmFyOgpAQCAtMTk2Niw4MyArMTk5MCw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsK
LSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFy
KTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2
ZVR5cGUgPSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRD
b2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRv
RW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5Lmxp
bmsodGhpcyk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRh
dGE6Om9mZnNldE9mUmVzb2x2ZVR5cGUoKSksIHJlZ1QwKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CisgICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlKSB7CisgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0
Lmp1bXAoKSk7CisgICAgICAgICAgICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAK
LSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZh
cik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2Uo
R2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJl
YWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAotICAgIHJldCgpOwor
ICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JB
TF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nh
c2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRv
cik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xv
d0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRo
dW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2
bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX1JFU09MVkVf
U0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0
b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2Vk
Rm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9
OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2Nv
cGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklO
RV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfUkVTT0xWRV9TQ09QRV9H
RU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNs
b3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5r
IGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQg
LyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFk
ZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIxMTIsNiArMjA5OCw3IEBAIHZvaWQgSklUOjpl
bWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0yMjI1LDcgKzIyMTIsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCkBAIC0yMjUzLDMxICsyMjQwLDQxIEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29k
ZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlu
c3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCisg
ICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICByZXR1cm4g
SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBv
cF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAg
IHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFy
Iik7CisgICAgfTsKKworICAgIGF1dG8gZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvciA9IFtd
IChWTSYpIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5r
KHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBnZW5lcmljIik7Cisg
ICAgfTsKKwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CiAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2Jh
bFZhcikgewotICAgICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZy
b21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJs
b2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0
YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0
YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9S
KHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3Is
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0g
ICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9S
KQotICAgICAgICB9OwotI3VuZGVmIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7
CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgIGVsc2UKKyAgICAgICAgY29kZSA9
IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0
TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0
aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7
CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdv
cmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KQEAgLTIyODYsNzcgKzIyODMsNjggQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIHVzaW5nIE1ldGFkYXRh
ID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRh
dGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlw
ZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
LSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRh
VGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBq
aXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsK
IAotICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29w
ZUdQUiwgaW50MzJfdCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCkgewotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSwgcmVnVDEpOwot
ICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qx
LCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIpIHsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCkpLCByZWdUMSk7
CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICBqaXQubG9hZDMy
KEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKICAgICB9OwogCiAg
ICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVj
dGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMp
OworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNH
bG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CiAgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50
U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAg
ICB9OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90
IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsK
LQotICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qg
b3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9Owot
CiAgICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJS
ZWcgb3BlcmFuZEdQUikgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2Yo
UmVnaXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BS
KTsKLSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlh
YmxlcygpKSwgcmVnVDApOworICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBv
cGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmFkZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQUik7Cisg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CiAgICAgfTsKIAotICAgIGF1dG8gZW1p
dENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZv
ck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUg
Y2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJl
cyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2
ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAg
ICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSKTsgLy8gU3RydWN0dXJlIGNo
ZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMg
Zm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVf
c2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHBy
IEdQUlJlZyByZXN1bHQgPSByZWdUMDsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zm
c2V0ID0gcmVnVDE7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdU
MjsKIAotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0g
KCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAg
ICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4g
SnVtcCB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7
CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZz
ZXRPZk9wZXJhbmQoKSksIG9mZnNldCk7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQp
IHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRo
YW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwot
ICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7
Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zm
c2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAg
ICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAg
ICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRl
bmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgo
c2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsK
KyAgICAgICAgICAgIGppdC5uZWczMihvZmZzZXQpOworICAgICAgICAgICAgaml0LnNpZ25FeHRl
bmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUlu
ZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgpAQCAtMjM2NCwyMSArMjM1Miwx
OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGly
ZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFu
ZCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAg
ICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hl
Y2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDAp
KTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVn
VDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJl
Z1QzKTsKICAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM4OCw3OSArMjM3NCw1NiBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0g
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExv
YWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7
Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNh
bFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5
cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIg
fHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAg
ICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1w
TGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBS
ZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwgcmVnVDApOworICAgICAgICBqaXQu
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAg
ICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxp
bmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1
bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluaygm
aml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7Cisg
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOwor
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsK
IAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGppdC5qdW1wKCkpOwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZl
VHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmpp
dCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVj
a2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdU
MCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpKSk7CiAK
LSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAg
ICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9t
X3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9j
YXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVM
b2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUg
REVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVz
b2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3Rl
eHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAg
ICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0
dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGlu
ZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hf
UkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVG
SU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0p
CiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5
IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQpAQCAtMjUxOCw4NiAr
MjQ4MSw3OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB9CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklUOjplbWl0UHV0R2xv
YmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVy
YW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVl
KiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0
KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEp
OwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVy
YW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3Rv
cmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRP
ZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KLQogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQ
dXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1
Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAg
IHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZt
ZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29s
dmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENv
ZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRM
b2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJl
IGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVy
ZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29s
dmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAg
ICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisg
ICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2lu
ZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAg
ICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAg
ICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwor
ICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpv
ZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwogICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAg
ICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0Vp
Z2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgc3RvcmVQdHIocmVn
VDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9m
ZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgLy8gT09Q
Uzogd291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgR1BSUmVncworICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
OgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAg
IGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29w
ZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29k
ZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7CiAgICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlw
ZSk7Ci0gICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFs
aXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisK
KyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICgh
aXNJbml0aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2Rl
KCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFs
d2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAg
ICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihv
cGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVy
YW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVn
VDEpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQot
ICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRT
ZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJp
YWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0
YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFu
dFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldh
dGNocG9pbnRTZXQoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hw
b2ludChyZWdUMSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QxKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKwor
ICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0
IHRvb2sgYSBHUFJSZWcgZm9yIHZhbHVlLgorICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihz
Y29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENs
b3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAq
b3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAg
ICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVy
YW5kKCksIHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVn
VDApOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAg
ICAgICAgc3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgU2NhbGVFaWdodCwg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKworICAgICAgICAg
ICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBH
UFJSZWcgZm9yIG93bmVyL3ZhbHVlLgogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29w
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIE1vZHVsZVZhcjoKQEAgLTI2MTEsNTggKzI1NjcsNTIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsK
LSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDAp
OyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkp
OwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikp
OwotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVu
IGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25z
dCBiaW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAg
ICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRy
dWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFs
c2UpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJs
b2NrIHNlZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRo
ZW4gd2UgY2FuIGNvbXBpbGUgdGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxv
Y2tzLCBzaW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3
ZSdyZSBhIENsb3N1cmVWYXIsCisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJl
VmFyLiBJZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3
YXlzIENsb3N1cmVWYXIKKyAgICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlz
bid0IGZpcmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNv
IGl0IGRvZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4K
KyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0
Q29kZShDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJl
c29sdmVkQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsK
KyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7CisgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdl
dFB1dEluZm8oKSwgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAg
ICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2Jh
bFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBm
YWxzZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1p
dENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAg
ICAgICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlz
KTsKKwogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAg
ICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2NzEsMTMgKzI2MjEs
MTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBj
b3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBl
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJl
c29sdmVUeXBlKCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7
CisgICAgICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhl
biBhbGwgbGlua2VkIENvZGVCbG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxz
byBzZWUgTW9kdWxlVmFyLgogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRv
bmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
ICAgICB9IGVsc2UgewogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRUb1Njb3BlLCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAg
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTI3NDgsNyArMjcwMSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1Qw
LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwogfQogCkBAIC0yODA2LDcgKzI3NTksNiBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmll
cihKU0NlbGwqIG93bmVyCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eDsKQEAgLTI4MTQsNyArMjc2Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9m
aWVsZChjb24KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0
T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0y
ODM2LDcgKzI3ODgsNiBAQCB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9w
CiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVudW1lcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21v
ZGU7CkBAIC0yODUyLDcgKzI4MDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25l
eHQoY29uc3QgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMg
dGhlIG1vc3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2Ug
aXQgaWYgd2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51
bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJl
TW9kZSkgeworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5t
X2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVj
dHVyZU1vZGUpIHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAg
ICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6bW9kZVNldE9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1v
ZGUpKSk7CkBAIC0yOTY1LDcgKzI5MTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X2dldF9ieV92YWwoCiAKICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjk3NCwxMCArMjkyNSw5
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0
ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRC
eVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBl
bmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFz
X3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25z
dCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2Up
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25U
eXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
U2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yOwpAQCAtMjk4Niw3ICsyOTM2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9o
YXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNz
KCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRpb25NZXRhZGF0
YSgpLCByZWdUMSk7CisgICAgb3IzMihyZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRh
dGEocmVnVDEsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRp
b25NZXRhZGF0YSgpKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1
cmVNb2RlKSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgxNjM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBP
cChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0
cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNv
ZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRh
dGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAg
ICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmls
ZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAg
IG1ldGFkYXRhKHQxLCB0MikKICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmlu
ZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAx
OSw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAg
IyBNZXRhZGF0YSBpbiB0MSwgc3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24o
dDIsIC5zbG93KQogICAgICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0K
LSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBk
YXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0
MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4
IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNy
byAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVw
ZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFk
YXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAg
ZW5kCi0KICAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJ
bnQzMlRhZywgLm9wTmVnYXRlU3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9w
TmVnYXRlU2xvdwogICAgIG5lZ2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9m
aWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2Zp
bGVJbnQsIHQ1LCB0MykKICAgICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05v
dEludDoKICAgICBiaWEgdDEsIExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4
MDAwMDAwMCwgdDEKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQor
ICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIs
IHQ1LCB0MykKICAgICByZXR1cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwx
MCArMTEwNyw2IEBAIGVuZCkKIAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1l
LCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9u
KQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3Qs
IG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBt
YWNybyBhcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2Jp
dHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAg
Z2V0KG1fcmhzLCB0MikKICAgICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3
IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEg
dDIsIEludDMyVGFnLCAub3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9w
Mk5vdEludAotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAg
ICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJ
bnQsIHQ1LCB0MikKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJh
dGlvbkFuZFN0b3JlKHQzLCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpA
QCAtMTEzNiwxMiArMTEyNCwxMiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5h
bWUsIG9wCiAgICAgICAgIGJpYSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMs
IExvd2VzdFRhZywgLm9wMU5vdEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJU
YWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisg
ICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmls
ZU51bWJlckludCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAu
b3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0
MSwgdDMsIGZ0MQotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVy
KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFBy
b2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAg
IGdldChtX2RzdCwgdDEpCiAgICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzEx
NDEsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAg
ICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5k
IGlzIGRlZmluaXRlbHkgbm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEg
dDMsIExvd2VzdFRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUlu
dE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
QXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAg
ICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQw
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDU2LDEwICsxMDU2LDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0
cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRp
b24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVj
dCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAg
IG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVv
cGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmls
ZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQog
ICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykK
QEAgLTEwNjksNyArMTA2NSw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVj
dCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBu
dW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3JlcSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVw
ZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAg
IGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTEzNCwxMSArMTEzMCw2IEBAIGVuZCkKIAog
CiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQ
cm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJp
dGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAg
IGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAs
IHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikKQEAgLTExNDYsMTIgKzExMzcsMTIgQEAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZm
ZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAg
ICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJp
dGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0NCkKICAgICByZXR1cm4o
dDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAgYnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVT
bG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAwMDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9m
aWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5l
Z2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0MSwgdDQpCiAgICAgcmV0dXJuKHQzKQogCiAub3BO
ZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE1NSw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3Rv
cmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1l
JSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJl
dHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUo
dHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
YXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVu
ZAotCiAgICAgICAgIGdldChtX3JocywgdDApCiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAg
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY0
LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBn
ZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAu
c2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludElu
dCwgdDUsIHQ0KQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4
NywxMCArMTE3NCwxMCBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9w
CiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJU
YWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmls
ZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0
cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGptcCAub3Ax
Tm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRo
UHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29k
ZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQx
LCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0x
MjA2LDcgKzExOTMsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9w
CiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29u
ZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYnRx
eiB0MSwgbnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludE51
bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJp
dGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAg
ICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQko
cmV2aXNpb24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yNDk4LDYgKzI0OTgsMTcgQEAgbWFj
cm8gbm90U3VwcG9ydGVkKCkKICAgICBlbmQKIGVuZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAK
KyAgICBvcmggdHlwZSwgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKK21h
Y3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRh
LCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2Zp
bGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9i
aXRzW3RlbXBdCitlbmQKKwogLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0
X1dJTiBjb25kaXRpb24gaGVyZSwgc2luY2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUg
ZmFsc2Ugb24gV2luZG93cwogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMzcxNgogaWYgV0VCQVNTRU1CTFkgYW5kIG5vdCBYODZfNjRfV0lOCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJl
dmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5F
X0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2
b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEm
IG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5
QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5h
cnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAg
cHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIo
KSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436591</attachid>
            <date>2021-08-26 17:22:31 -0700</date>
            <delta_ts>2021-08-26 20:49:20 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>180351</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IHVubGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxp
bmtlZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRp
b24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
aXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0g
ICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRo
U3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhT
dGFydCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlz
IGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQg
dG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0
aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJz
OjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAg
IHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MjQsNiArNDI0LDEzIEBAIGlubGluZSBDb2RlT3JpZ2lu
IGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBz
byB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNiArNDY3
LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAg
YnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENv
ZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAg
ICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENv
ZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAg
ICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVj
dGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1
Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI5LDE0ICs1NDIsMTQgQEAgYm9vbCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJv
bWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9w
QWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBM
SU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMp
Ci0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVs
KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAg
IExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJ
VEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC0zMTAyLDcgKzMxMTUs
NyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFC
TEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBK
SVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJh
bWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMzMTgsMTMgKzMzMzEsMTMg
QEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRj
aCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZw
Yy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJl
dHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAg
Y2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRo
aXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMzMzNiwxMSArMzM0OSwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29k
ZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAg
IGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0
ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAg
ICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0
aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVj
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFz
PE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDE2ICsyMzMsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0
OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9v
bCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRoZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJu
IHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFuZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAg
ICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFu
dChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+
KG1fbnVtVmFycyk7CkBAIC0yNjcsNiArMjU3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNT
dGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAg
ICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBo
ZXJlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOwogCkBAIC00NzgsNiArNDY5LDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5h
bWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFy
YW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKQEAgLTgwMyw2ICs3OTUsNyBAQCBwdWJs
aWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2Rl
YnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsg
cmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25l
ZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51
bUJyZWFrcG9pbnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzUsNiArMTc1LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVC
YXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50
UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdp
c3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0
YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAg
Y29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIwOCwxNCBAQCBwdWJsaWM6CiAgICAgSlNQYXJz
ZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1Bh
cnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9u
U3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlv
bnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBp
bnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigpOworICAgICAgICBj
b25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3Ry
dWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSAr
IGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0
aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5k
KTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAg
fQogCiAgICAgdW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1D
YWxsZWVMb2NhbHM7IH0KICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1WYXJzOyB9CkBAIC00MTAsNiArNDE5LDkgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3M7CiAKKyAgICAvLyBPT1BTOiBi
aW5kIGEgYmV0dGVyIHBsYWNlIHRvIHN0b3JlIHRoaXMgc3R1ZmY/CisgICAgVmVjdG9yPEJpbmFy
eUFyaXRoUHJvZmlsZT4gbV9iaW5hcnlBcml0aFByb2ZpbGVzOworICAgIFZlY3RvcjxVbmFyeUFy
aXRoUHJvZmlsZT4gbV91bmFyeUFyaXRoUHJvZmlsZXM7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CkBAIC00NTUsNiArNDY3LDI4IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3Ry
dWN0aW9uLm9mZnNldCgpKTsKICAgICB9CisgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29u
c3QgSW5zdHJ1Y3Rpb24qIHBjKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQgPSB0aGlzLT5ieXRlY29kZU9mZnNldChwYyk7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVK
dW1wT2Zmc2V0KG9mZnNldCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQ
cm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5QXJpdGhQ
cm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoQmlu
YXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV91bmFyeUFy
aXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGJpbmFyeUFyaXRoUHJv
ZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX2JpbmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KKyAg
ICBVbmFyeUFyaXRoUHJvZmlsZSYgdW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1
cm4gbV91bmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KIAogcHJpdmF0ZToKICAgICB1c2luZyBPdXRP
ZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50
PjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRh
VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTAxLDkgKzEwMSwxOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc19vZmZzZXQxNlRh
YmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAgICAg
dXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsKIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNv
ZGU+CisgICAgdWludHB0cl90IG9mZnNldEluTWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9w
Y29kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWlu
dHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9pczMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29k
ZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUxNigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAg
ICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YoT3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNv
ZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
c19vZmZzZXRUYWJsZUVudHJpZXMgPSBOVU1CRVJfT0ZfQllURUNPREVfV0lUSF9NRVRBREFUQSAr
IDE7IC8vIG9uZSBleHRyYSBlbnRyeSBmb3IgdGhlICJlbmQiIG9mZnNldDsKIAogICAgIC8vIE5v
dCB0byBicmVhayBhbGlnbm1lbnQgb2YgMzJiaXQgb2Zmc2V0IHRhYmxlLCB3ZSByb3VuZCB1cCBz
aXplIHdpdGggc2l6ZW9mKE9mZnNldDMyKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNyArNDAsNiBAQCB0ZW1wbGF0ZTx1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHNBcmd1bWVuCiBz
dHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBu
dW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51
bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVl
UHJvZmlsZUJhc2UoKQpAQCAtMTM0LDcgKzEzMyw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNl
IHsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247CiAgICAgfQotICAgIAor
CiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNrZXRzW3RvdGFsTnVtYmVyT2ZCdWNrZXRzXTsKIAog
ICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbiB7IFNwZWNOb25lIH07CkBAIC0xNTYsNiAr
MTU1LDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldAogCiBzdHJ1
Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tl
dHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgpIDogVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9m
QnVja2V0czwwPigpIHsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEJ1Y2tl
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0c1swXSk7
IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMg
VmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODE2MzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU5OCw3ICsxNTk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRVbmFyeQogICAgICAgICBlbWl0VW5hcnlPcDxPcE5vdD4oZHN0LCBz
cmMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAgT3BOZWdh
dGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUpOworICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0
aGlzLCBkc3QsIHNyYywgdHlwZSwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIG9wX2JpdG5vdDoKICAgICAgICAgZW1pdFVuYXJ5
T3A8T3BCaXRub3Q+KGRzdCwgc3JjKTsKQEAgLTE2OTYsMTMgKzE2OTYsMTMgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUeXBlTwogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEluYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BJbmM6OmVtaXQo
dGhpcywgc3JjRHN0KTsKKyAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2Nr
LT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7
Ci0gICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcERlYzo6ZW1pdCh0aGlzLCBz
cmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4g
c3JjRHN0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IFJlZ2lzdGVySUQqPgogICAgICAgICBlbWl0QmluYXJ5T3AoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBzcmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwg
dHlwZXMpOworICAgICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMy
LCB0eXBlcywgbV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAg
ICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODE2
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODksNyArODg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBp
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAg
ICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAg
ICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk2LDcgKzg5
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAKICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0g
ICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5v
LCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVT
aHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZs
ZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lv
biAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2OTQsNyArMTQ2OTQsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2Nv
cGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBzY29wZVJlZyA9IHNjb3BlLmdw
cigpOwogCi0gICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0
UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIG1faml0LmNvZGVCbG9jaygpLCBjYWxsU2l0ZUluZGV4
KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcs
IHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNv
ZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJl
dmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyNzAsNyArMTAyNzAsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9j
aygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDAp
OwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1Bh
dGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVn
VDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVm
ZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAg
ICAgIH0pOwpAQCAtMTA2MTMsNyArMTA2MTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAg
ICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6
VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAg
ICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDg5NCw3ICsxMDg5NCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNU
YWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZv
OjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxD
YWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjgxNjM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpA
QCAtNDIsMTcgKzQyLDIyIEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkKICAg
ICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZp
eCwgZmllbGRzKQorICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcywgZ2Vu
ZXJhdGVPZmZzZXRPZikKICAgICAgICAgICAgIGZpZWxkcy5tYXAgZG8gfGZpZWxkLCB0eXBlfAog
ICAgICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAotICAgICAgICAgICAgICAgICAg
ICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlw
ZSl9XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtc
biN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUsIGZhbHNlKX1cbiN7cHJlZml4
fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4
fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307IgorICAgICAgICAgICAgICAgICAgICBmaWVs
ZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICIje3ByZWZp
eH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgorICAgICAgICAgICAgICAgICAgICBpZiBn
ZW5lcmF0ZU9mZnNldE9mCisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsg
IlxuIiArICJzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7
ZmllbGROYW1lWzEuLl19KCkgeyByZXR1cm4gT0ZGU0VUT0YoTWV0YWRhdGEsIG1fI3tmaWVsZE5h
bWV9KTsgfSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdAogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAg
ICAgICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBA
ZmllbGRzKQorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAgICAgICIsIEBmaWVs
ZHMsIHRydWUpCiAKICAgICAgICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVy
cyAmJiAobm90IEBpbml0aWFsaXplcnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgxNjM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OTgsOCArNjk4LDEzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVl
U2F2ZXMKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGVtaXRWaXJ0dWFs
Q2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworfQorCit2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYg
dm0sIENhbGxMaW5rSW5mbyogaW5mbykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyks
IEdQUkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExp
bmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8g
Y2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRp
b25QdHJUYWc+KGNhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzE4LDYgKzE3MTgsNyBA
QCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsKICAgICAKICAgICB2
b2lkIG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25T
dGFja0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVs
cGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhl
bHBlcnMuY3BwCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIHZvaWQg
Q0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuUHJvbG8KICAgICBzdG9yZVB0cihzY29wZSwg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIHNjb3BlKSkpOwogfQogCi12b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJl
ZyBzY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eCkKLXsKLSAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1l
KSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0
YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOwotICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCB0aGlzVmFsdWUpKSk7Ci0gICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0
LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKLSAgICBz
dG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7Ci0gICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRv
d1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJ
bmRleCkpKTsKLX0KLQogdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNr
ZXQoVk0mIHZtLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIs
IEdQUlJlZyBzY3JhdGNoMikKIHsKICAgICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0g
dm0uc2hhZG93Q2hpY2tlbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2Fs
bEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxs
SGVscGVycy5oCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDE4IEBAIHB1Ymxp
YzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJlZ2lzdGVy
cy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Agb2YKICAgICAvLyBz
dGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNr
ZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDEsIEdQ
UlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcg
c2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxv
Y2sqLCBDYWxsU2l0ZUluZGV4KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBj
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKKyAgICB7CisgICAgICAgIHN0
b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwg
T0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2Vy
KCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgY2FsbGVlKSkpOworICAgICAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhp
c1ZhbHVlKSkpOworICAgICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOworICAgICAg
ICBzdG9yZVB0cihjb2RlQmxvY2ssIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7CisgICAgICAgIHN0b3JlMzIo
VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7
CisgICAgfQorCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3
ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93
Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5v
bkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkocmV2aXNpb24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkK
ICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOwogfQogCiBKSVQ6On5KSVQoKQpA
QCAtMTEzLDcgKzExNCw3IEBAIHZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNl
dCoKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0
LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCkKK3ZvaWQgSklU
OjplbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpCiB7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9TZXQsIFdhdGNo
cG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OwogfQpAQCAtMTI5LDcgKzEzMCw3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIEp1
bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CkBAIC02NzcsMTcgKzY3OCwxNiBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiB2b2lkIEpJVDo6Y29tcGls
ZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7
Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0
eUxldmVsKCk7CisgICAgLy8gT09QUzogTWF5YmUgdGhpcyBzaG91bGQgYmUgZG9uZSBvbiB1bmxp
bmtlZCBjb2RlIGJsb2NrPworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9m
aWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewog
ICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0g
ZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAg
ICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgog
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXpl
ZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7
CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC03NDcsNyArNzQ3LDcgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogCiAgICAgTGFiZWwgYmVnaW5MYWJl
bCh0aGlzKTsKIAotICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGludCBmcmFtZVRvcE9mZnNl
dCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXplID0gLWZyYW1lVG9wT2Zmc2V0Owog
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVUb3BPZmZzZXQpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgcmVnVDEpOwogICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CkBAIC03NjMsNyArNzYzLDEw
IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KIAogICAgIGlmICht
X2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgQVNTRVJU
KCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7
CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX2NvZGVCbG9jay0+aXND
b25zdHJ1Y3RvcigpIHx8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAxKSkgeworICAg
ICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIENvZGVC
bG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVkVmVjdG9yOjpvZmZz
ZXRPZlN0b3JhZ2UoKSksIHJlZ1QyKTsKKwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1
bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1
bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhl
biB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwogICAgICAgICAg
ICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3
YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCkBAIC03NzksNiArNzgyLDcgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQz
MihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCiAgICAg
ICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9m
aWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBz
dG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZh
bHVlUHJvZmlsZSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTk1OSwx
MCArOTYzLDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIH0KIAogICAgIGZvciAoYXV0byYgY29t
cGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAgICAgIENhbGxMaW5r
SW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAgICBpbmZv
LnNldENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKLSAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25J
bmZvLmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9
ICpjb21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGluZm8uZG9u
ZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21w
aWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKICAgICB7CkBAIC05OTMsNyArOTk1
LDEwIEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAl
cyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNF
bnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3
IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1
bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9
IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5r
SW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOwogCiAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAl
cCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgp
LT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgp
LnVudGFnZ2VkUHRyKCkpOwpAQCAtMTAwOCw2ICsxMDEzLDggQEAgQ29tcGlsYXRpb25SZXN1bHQg
SklUOjpmaW5hbGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5rQnVmZmVyLT5ydW5NYWluVGhyZWFk
RmluYWxpemF0aW9uVGFza3MoKTsKIAorICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0
aElDcyk7CisKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2Rl
QmxvY2stPm1fbG9jayk7CiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIs
IENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CkBAIC0xMDgyLDE0ICsxMDg5LDE0
IEBAIHZvaWQgSklUOjpkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUMKICAgICAgICAgbV92
bS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKCptX3ZtLCAiUHJlcGFyaW5n
IGZvciBKSVQgY29tcGlsYXRpb24uIl9zKTsKIH0KIAotdW5zaWduZWQgSklUOjpmcmFtZVJlZ2lz
dGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVn
aXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEFTU0VS
VChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkgPT0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSkpOwogCiAgICAg
cmV0dXJuIHJvdW5kTG9jYWxSZWdpc3RlckNvdW50Rm9yRnJhbWVQb2ludGVyT2Zmc2V0KGNvZGVC
bG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbElu
UmVnaXN0ZXJzKTsKIH0KIAotaW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9j
ayogY29kZUJsb2NrKQoraW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2spIC0gMSkub2Zmc2V0KCk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDMxIEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCisgICAgY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHVzaW5nIENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICAgICAgZW51bSBj
bGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgICAgICBHbG9iYWxPYmplY3QsCisgICAgICAg
ICAgICBDYWxsTGlua0luZm8KKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgVmFsdWUgewor
ICAgICAgICAgICAgVHlwZSB0eXBlOworICAgICAgICAgICAgUGFja2VkUHRyPHZvaWQqPiBwYXls
b2FkOworICAgICAgICB9OworCisgICAgICAgIENvbnN0YW50IGFkZChUeXBlIHR5cGUsIFBhY2tl
ZFB0cjx2b2lkKj4gcGF5bG9hZCA9IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgICAgIG1fY29uc3Rh
bnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBWZWN0b3I8VmFsdWU+
IG1fY29uc3RhbnRzOworICAgIH07CisKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAK
ICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOwpAQCAtMTg2LDkgKzIxMSw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2Fs
bExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5m
b0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxl
ZUZ1bmN0aW9uKTsKQEAgLTIzMiw4ICsyNTcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKGJ5VmFsSW5m
bywgcmV0dXJuQWRkcmVzcywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7Ci0gICAgICAg
IHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOworICAgICAgICBz
dGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7
CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJs
b2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmlu
ZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBpbGVUaW1lKCk7CkBAIC0yNjksNiArMjk0LDI0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8
Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29k
ZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPEJ5dGVjb2Rl
PgorICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwg
R1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3Rv
cmU4VG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisK
KyAgICAgICAgdGVtcGxhdGUgPEJ5dGVjb2RlPgorICAgICAgICB2b2lkIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7
CisKKyAgICAgICAgdm9pZCBsb2FkQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BS
UmVnKTsKKyAgICAgICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7CisKICAgICAgICAg
dm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5kbGVyKTsKQEAgLTMwNCwx
NiArMzQ3LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAog
ICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2Rl
SUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAh
PSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQp
OwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6
b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29u
c3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBib29sIGNv
bXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxp
bmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CkBAIC0zMzcsMTAgKzM4MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAg
YW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsK
LSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAgICAgICAgLy92b2lkIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0
ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFs
dWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFk
YXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7
CkBAIC02NDgsNyArNjkxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hl
Y2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNzAxLDcgKzc0Myw3IEBAIG5h
bWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1p
dE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3Jp
dGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0
Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNW
YWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKTsKQEAgLTcxMCw2ICs3NTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2
b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxS
ZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwog
ICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAg
IGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NTEsMjYg
Kzc5NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5
cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCBy
ZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9H
RVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNy
ZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQ
RShERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVu
a0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVu
dCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2
ZWRDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVz
b2x2ZV9zY29wZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVk
Q2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNk
ZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNv
bHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFD
SF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBE
RUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2
ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhz
dGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFy
KiB0aHVua05hbWUpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1RydXRoeUdlbmVy
YXRvcihWTSYpOwpAQCAtOTc0LDExICs5OTksOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVO
QUJMRShERkdfSklUKQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gbV9j
YW5CZU9wdGltaXplZDsgfQotICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkg
eyByZXR1cm4gbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsgfQogICAgICAgICBib29sIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBtX3Nob3VsZEVtaXRQcm9maWxpbmc7IH0KICNlbHNl
CiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAg
ICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAg
ICAgLy8gRW5hYmxlcyB1c2Ugb2YgdmFsdWUgcHJvZmlsZXIgd2l0aCB0aWVyZWQgY29tcGlsYXRp
b24gdHVybmVkIG9mZiwKICAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSBhbGwgY29kZSBnZXRzIHBy
b2ZpbGVkLgogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxz
ZTsgfQpAQCAtOTg2LDEzICsxMDA5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3Rh
dGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1
dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNo
ZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0g
ICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRo
ZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xv
dyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0
UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJp
dGhQcm9maWxlKEJpbmFyeU9wKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRl
cjsKIApAQCAtMTAyMCw5ICsxMDM2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29y
ZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9j
b3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQ
cm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNl
cHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxG
cmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEwNTcsMTEg
KzEwNzAsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1
Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRv
TWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsK
LSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1f
c2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29k
ZTsKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRyPEJhc2Vs
aW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0
YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVj
dENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAg
ICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgICAgICBC
YWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworCisgICAgICAgIEdQUlJlZyBt
X21ldGFkYXRhR1BSOworICAgICAgICBHUFJSZWcgbV9jb25zdGFudHNHUFI7CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewog
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50
R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0
ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmVnVDEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
ICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMiwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3
ICszNzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAg
fQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMSw4IEBAIHZvaWQgSklUOjpl
bWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRl
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyog
bmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBV
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPnVu
YXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubV9wcm9m
aWxlSW5kZXgpOworICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJ
Qyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudElu
c3RydWN0aW9uLCBuZWdhdGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0
byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4g
YmUgYSBCaWdJbnQKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJp
dGhOZWdhdGUpOwpAQCAtODk5LDggKzkwMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQo
Y29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2st
PmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVEFkZElD
KiBhZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1p
dE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTQ5LDEx
IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdl
bmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAg
ICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUo
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFy
aXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBl
bHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1
bXBzKTsKIApAQCAtMTAxNSwxMCArMTAyMCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3Qo
SklUQmluYXJ5TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJv
ZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBp
ZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJl
Z3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UK
ICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMp
OwogCkBAIC0xMDU1LDEzICsxMDYxLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRV
bmFyeU1hdGhJQzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7
CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAg
ICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAg
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAg
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZElt
bVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9
IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+
KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5j
dGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxh
YmVsKCk7CkBAIC0xMTIwLDEzICsxMTI3LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRCaW5hcnlNYXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAg
ICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQot
ICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1h
dGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpN
aWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdz
LCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVn
VDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24p
LCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhF
bmQgPSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsxMTc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2
KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFy
aXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJm1fdW5s
aW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGl2PigpLm1fcHJvZmlsZUluZGV4KTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVy
YW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5k
IHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjEx
LDggKzEyMTksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAK
IHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0
aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5s
aW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTXVsPigpKTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRkSklUTXVsSUMo
YXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0
cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11
bCk7CiB9CkBAIC0xMjI3LDggKzEyMzUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNv
bnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX21hdGhJ
Q3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3Vi
PihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw3ICsyMzIsNyBA
QCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBzdG9yZVB0cihjYWxsRnJh
bWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgp
KSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJl
Z1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1p
dFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTMyNCw3ICszMjQsNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgYWRkU2xvd0Nh
c2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3Vs
dChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxT
bG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0g
ICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0
ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0z
NTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAkocmV2aXNpb24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9w
JiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9y
KGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIo
KSwgcmVnVDApOwogfQogCkBAIC01Myw3ICs1Myw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAg
T3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29u
c3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFy
Z3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2
b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5r
SW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9ieXRl
Y29kZUluZGV4LmNoZWNrcG9pbnQoKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKQEAgLTc4LDcgKzc4LDcgQEAgc3RkOjplbmFibGVfaWZfdDwK
ICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBv
cF9jb25zdHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
CiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2Fs
bExpbmtJbmZvKiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKQEAgLTEw
Niw5ICsxMDYsMTAgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAog
CiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0g
ICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCks
IHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJl
Z1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQs
IHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRP
Zk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RC
aWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdU
MiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAg
Ly8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEyOCwxNiBAQCBib29sIEpJVDo6Y29t
cGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2Fs
bEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdp
c3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxs
RnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1Qx
LCByZWdUMik7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRH
UFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikp
OwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogCkBAIC0xNDgsNyArMTQ5LDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
Q2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENh
bGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5m
byogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwog
CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKQEAgLTE1Niw0MyAr
MTU3LDQ2IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6
ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92
bSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlu
a0luZm8qLCB1bnNpZ25lZCkKLXsKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3Am
LCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50KSB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29t
cGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGlu
Zm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8s
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNh
bGxMaW5rSW5mb0NvbnN0YW50KQogewotICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVE
YXRhOwotICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0g
ICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdp
c3RlcjsKLSAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQorICAgIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNo
dWZmbGVEYXRhPigpOworICAgIHNodWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUu
bV9hcmdjOworICAgIHNodWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51
bWJlclRhZ1JlZ2lzdGVyOworICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBi
eXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0
ZXIpOwotICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAg
c2h1ZmZsZURhdGEtPmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVE
YXRhLmFyZ3NbaV0gPQorICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAg
ICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAgICAgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2
LAogICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRh
LmNhbGxlZSA9Ci0gICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0
SlMpOwotICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9j
ayk7Ci0gICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1
ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0
SlMpOworICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxv
Y2spOwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZd
IHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJl
Z1QyKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2Fs
bERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CisgICAgICAgIENhbGxG
cmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwog
ICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CisKKyAgICBzaHVmZmxlRGF0YS0+
c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVm
ZmxlRGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9j
YXRpb247CiAgICAgCkBAIC0yMTgsMzIgKzIyMiw0MCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBD
OyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVy
IGFmdGVyIHJldHVybi4KICAgICAqLwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7
Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAg
ICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CisKKyAgICBVbmxpbmtlZENhbGxM
aW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBp
bmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFs
KSB7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbV91bmxpbmtlZENhbGxz
LmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2Rl
SUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAgICAgQVNTRVJUKG1f
Y2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Cisg
ICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5saW5rZWRD
YWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50OworCisgICAg
fQorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQpOwogCiAgICAg
Ly8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRo
IEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRlY29kZUluZGV4ID0gbV9j
b2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOworICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7
CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVzcyhjYWxsRnJh
bWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxs
ZWUuCiAgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAt
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChi
eXRlY29kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlv
bkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwo
Q2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxD
b21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwot
Ci0gICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5k
ZXgpKQorICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5m
b0luZGV4LCBpbmZvQ29uc3RhbnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3Rh
bnQoaW5mb0NvbnN0YW50LCByZWdUMik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykg
ewotICAgICAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0
aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Cisg
ICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNG
YXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICAgICAgLy8gT09QUwog
ICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CiAgICAgICAgIH0pOwpAQCAtMjUzLDEzICsyNjUsMTMg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0RmFzdFBhdGgoKnRo
aXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olllcyk7CisgICAgYXV0
byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVn
VDAsIHJlZ1QyKTsKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgYWRkU2xv
d0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1
dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjczLDIwICsyODUsMjIgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1Bh
dGhTdGFydCA9IGxhYmVsKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgbG9h
ZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExp
bmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKIAotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7CisgICAgICAgIC8vIE9PUFMKICAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIH0KIAotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0
aCgqbV92bSwgKnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKCpt
X3ZtLCAqdGhpcywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8
fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERp
ZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2Vk
Q29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpAQCAtNDA0LDcgKzQxOCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CiAKICAgICBmYXN0
Q2FzZS5saW5rKHRoaXMpOwpAQCAtNDkzLDcgKzUwNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0
ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgZG9uZUdQ
UiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRv
bmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KQEAgLTUx
Miw3ICs1MjYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAg
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CiAKICAgICAgICAg
aXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNiArMjQ4LDQxIEBAIHByb3RlY3RlZDoKICAg
ICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1fcmVmOwogfTsKIAorY2xhc3MgTWF0aElDSG9sZGVy
IHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKQor
ICAgIHsKKyAgICAgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICAg
ICAgbV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAgICAgICAgbV9uZWdJQ3Mg
PSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICAgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90
aGVyLm1fc3ViSUNzKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0aFBy
b2ZpbGUpOyB9CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorICAg
IEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkg
eyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKyAgICBKSVROZWdJQyogYWRk
SklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJ
Q3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2Vu
ZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUQWRkSUMqIGFk
ZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElD
KHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFt
ZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11
bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFy
eUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0K
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6
dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUq
IHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4K
KyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyBy
ZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRk
SUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5l
Z0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKwogREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoRGlyZWN0SklUQ29kZSk7CiBjbGFzcyBE
aXJlY3RKSVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CiAgICAgV1RGX01BS0Vf
U1RSVUNUX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKERpcmVjdEpJVENvZGUp
OwpAQCAtMjY2LDYgKzMwMSwxNiBAQCBwcml2YXRlOgogICAgIENvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gbV93aXRoQXJpdHlDaGVjazsKIH07CiAKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1Ymxp
YyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBCYXNl
bGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgICAgICA6IERpcmVjdEpJVENvZGUoV1RGTW92ZShj
b2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgIHsgfQorCisg
ICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgQmFnPENh
bGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsgLy8gT09QUzogbWFrZSBzdXJlIHdlIHZp
c2l0IHRoZXNlIHNvbWVob3cuIE9yIGFzc2VydCB3ZSBkb24ndCBoYXZlIHRvLCBzaW5jZSB0aGV5
J3JlIHZpcnR1YWwgY2FsbHMuCit9OworCiBjbGFzcyBOYXRpdmVKSVRDb2RlIDogcHVibGljIEpJ
VENvZGVXaXRoQ29kZVJlZiB7CiBwdWJsaWM6CiAgICAgTmF0aXZlSklUQ29kZShKSVRUeXBlKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODE2
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQog
ewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNv
bnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3Bl
cmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXND
b25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sK
KyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
c3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAg
ICAgICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBhbGwgbGluayB0aW1lIGNv
bnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewog
ICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+
Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIg
ZW50cnkpCkBAIC0xODUsNyArMjEwLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5k
Q2FsbFdpdGhFeAogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAg
aWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAK
QEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2Fz
ZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1f
Ynl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hl
Y2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAog
ICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgs
IGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRv
TmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVj
a3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJ
bmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBB
U1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hl
Y2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExh
YmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwzNCBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJl
dHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5n
KCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgo
KSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQotewotICAgIEFTU0VS
VChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29u
ZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAot
ICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIo
KSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQotICAgIEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+
KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigp
LCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwotICAgIHN0b3JlMzIodmFsdWUudGFnR1BS
KCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgotfQorICAgIGlmICghc3JjLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3Ry
aW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30K
KworLy8gT09QUworLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQorLy97CisvLyAgICBB
U1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKKy8vCisvLyAgICAvLyBXZSdyZSBpbiBhIHNp
bXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEg
ZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lmIFVTRShKU1ZBTFVFNjQpCisvLyAgICBzdG9y
ZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vI2Vsc2UKKy8vICAg
IEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8gICAgc3RvcmUz
Mih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7CisvLyAg
ICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7CisvLyNl
bmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQ
cm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmls
ZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsMjQgKzM1MywyNSBAQCBp
bmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRl
PHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAg
aWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsg
dmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0b3JlNjQo
dmFsdWUuZ3ByKCksIEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsK
LX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmls
ZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97CisvLyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisvL30K
IAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVt
cGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJl
ZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJl
c3VsdFJlZykpOwogfQogI2VuZGlmCiAKQEAgLTM5MCw3ICs0MjEsNyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91
YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAo
cmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29u
c3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1t
UHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZERv
dWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKQEAgLTUwNiw3ICs1MzcsNyBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYg
KCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwo
cmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNiw3ICs1NDcsNyBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQg
dGFnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBp
ZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MjQsMTEg
KzU1NSw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9
CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklU
OjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKQEAgLTU1NCw3ICs1ODAsOCBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1fYnl0ZWNv
ZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAK
ICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBsaW5r
IHRpbWUgY29uc3RhbnRzIGhlcmUuLi4KKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldENvbnN0
YW50T3BlcmFuZChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKICAg
ICAgICAgZWxzZQpAQCAtNTc2LDExICs2MDMsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsK
IH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBm
cm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTYwNSw3ICs2
MjcsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAKIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklE
IHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNL
bm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTY0NywzMCArNjY5LDcgQEAg
QUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewogICAgIGlmICh0YXJn
ZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vdXRP
ZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKLX0KLQotQUxXQVlTX0lOTElORSBHZXRQdXRJ
bmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNvZGUpCi17Ci0gICAg
dW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsgLy8gSGFzaE1hcCBkb2Vz
bid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdldFB1dElu
Zm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBH
ZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9n
ZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5mby5v
cGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJbmZvOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6Y29waWVk
QXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2NF90IGtleSA9IChz
dGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEpIDw8IDMyIHwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0byBpdGVy
YXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9y
ICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9y
LT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1fY29waWVkQXJpdGhQ
cm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBhcml0aFByb2ZpbGU7
CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5z
dHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY5MSw2ICs2OTAsNDYg
QEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAogICAgIHJldHVybiBF
Q01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDxCeXRlY29kZT4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2Rl
LCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyht
X21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0
YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8
Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQorewor
ICAgIGxvYWQzMihBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlIDxCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxv
YWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwg
R1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2Rl
KSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDxCeXRlY29kZT4KK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZhbHVlLCBBZGRy
ZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8Qnl0
ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVz
dWx0KQoreworICAgIGFkZFB0cihtX21ldGFkYXRhR1BSLCBUcnVzdGVkSW1tUHRyKG1fdW5saW5r
ZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSAr
IG9mZnNldCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25z
dGFudChKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1
bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKG1fY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KGNvbnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2Fk
Q29uc3RhbnQobV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgxNjM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5z
dHJ1Y3RpbwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hP
ZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkp
OwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJs
b2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwg
JnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgeworICAg
ICAgICAvLyBPT1BTCiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAg
c3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3Io
ZHN0KSk7CkBAIC04NywzNyArODgsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IElu
c3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0
YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3Qg
YWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUt
PmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JG
b3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0
ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJl
Z1QxOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQg
c3RydWN0dXJlUmVnID0gcmVnVDM7CiAKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OwotICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAg
ICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFu
dChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0
dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlu
bGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAg
ICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMp
OwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9
CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Om9mZnNldE9m
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIG9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRv
clJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Om9m
ZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIG9mZnNldE9mU3RydWN0dXJlKCksIHN0
cnVjdHVyZVJlZyk7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJm
bHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJl
c3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVy
ZSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Mo
c3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNo
UmVnKTsKKyAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNo
UmVnKTsKKyAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVS
ZWcgPSByZWdUMzsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwog
ICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTM3NCw3ICsz
NzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiAjZWxzZQpA
QCAtMzg1LDcgKzM4NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlv
bioKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0g
ICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9y
KCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMo
KSk7CkBAIC00MTEsNyArNDEwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNv
bnN0IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0MzIsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRf
b3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1
bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVu
Y3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFt
ZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1
bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ2NCwxMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXko
dm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1
ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNDgxLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25z
IGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJl
bG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAg
Ly8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1MjAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRs
ZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUg
c3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAg
SnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQz
LDcgKzU0NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAg
ICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJv
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAg
ICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNjI1LDggKzYyNiwxMCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9i
amVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc1RydXRoeUdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDAsNyArNjQzLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTY5NSw3ICs2OTgsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMSwgcmVnVDApOwogICAg
IGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CkBAIC03MTEsNyArNzE1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhyb3duVmFsdWVH
UFIgPSBhcmd1bWVudEdQUjE7CkBAIC05MDgsNyArOTEyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEs
IHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5MjMs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CiAKQEAgLTk5Myw3ICs5OTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJ
bnN0cnVjdGlvCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRj
aE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgp
KSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2Rl
QmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxl
LCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMDExLDIzICsxMDE3LDExIEBAIHZvaWQgSklU
OjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0eXBlIHBy
b29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKLSAgICBp
ZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1f
Ynl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2Zp
bGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxPcGVyYXRpb25O
b0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmls
ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBza2lwT1NSRW50
cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFu
ZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYgKGJ1ZmZl
ciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsm
XSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSwgcmVncyk7Ci0g
ICAgICAgIH0pOwotICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIApAQCAtMTEx
Miw3ICsxMTA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgog
dm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
YnVnPigpOwotICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3Mo
KSwgcmVnVDApOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0
T2ZEZWJ1Z2dlclJlcXVlc3RzKCkpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVz
dHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlw
ZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwpAQCAtMTE0OCw3ICsxMTQz
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzMTAsMjMgKzEzMDQsMTkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0
cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVy
ZUlEOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1Qx
KTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxv
YWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21NZXRhZGF0YShi
eXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCks
IHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0
ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwot
ICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEu
bV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBS
ZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcg
PSByZWdUMDsKQEAgLTEzNDIsNyArMTMzMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90
aGlzKGNvbnN0IEluc3QKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9u
UmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rp
b246OnJhcmVEYXRhVGFnKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFy
ZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1
Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKIAotICAg
IGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcENyZWF0ZVRoaXM6Om9mZnNldE9mQ2FjaGVkRnVuY3Rp
b24oKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVl
cyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlND
ZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBoYXNT
ZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzNjIsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEzNzMs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0z
MigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcgKzEzODYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIs
IHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxMzk3LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsxNDEy
LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZp
cnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZh
bHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIz
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVS
ZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE1MDksNyArMTUwNCw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFyZ3VtZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTY0LDcg
KzE1NjAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAg
ICBHUFJSZWcgZ2xvYmFsR1BSID0gR1BSUmVnOjphcmd1bWVudEdQUjA7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhw
LCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25z
dGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsK
IH0KIApAQCAtMTY2NCwxMyArMTY2MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5t
X2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7CiAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBz
aXplKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3
QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDEp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCByZWdUMCwg
c2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NzksMTQgKzE2NzYsMTMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0g
Ynl0ZWNvZGUubV9sZW5ndGg7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5
dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2Nh
dGlvblByb2ZpbGUoKSwgcmVnVDIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMiwgcmVnVDApOwogI2Vsc2UKICAgICBlbWl0TG9hZChzaXplSW5kZXgs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYK
IH0KIApAQCAtMTY5NCw4ICsxNjkwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dp
dGhfc2l6ZShjbwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sg
dGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdHlwZSBwcm9m
aWVsciBpcyBlbmFibGVkLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2Nh
dGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCkBAIC0xNzc3
LDIwICsxNzc0LDI0IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkK
ICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSBy
ZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFp
bD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNj
cmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJl
Z2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRv
d0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRj
aDJSZWcpOworICAgIHsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsg
Ly8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgorICAgICAgICBHUFJSZWcg
c2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2
bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgfQog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAg
ICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdz
KHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBK
U1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0
X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5s
aW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHVzaW5nIHRoZSBjb250cm9sIGZsb3cgcHJvZmls
ZXIuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxl
Q29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2Nh
dGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMpOwpAQCAtMTg2
MCw3ICsxODYxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwog
ICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAogICAgIGRvbmUubGlu
ayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE4ODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgx
NjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cgogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9n
ZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIH0KIApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQg
SklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QKICAgICAgICAgICAgIGNhbGwgPSBh
cHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpOwogICAgICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShj
b25zdAogICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4p
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAt
MjUwLDcgKzI1MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMK
ICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIApAQCAtNzI3LDcgKzcyNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC03MzYsNyArNzM3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9i
eV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJC
eUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC03NDYsNyArNzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9zZXR0ZXJfYnlfaQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJl
Z1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdU
Mik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwg
cmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJl
Z1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NTYsNyArNzU5LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWws
IHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTc2Niw3ICs3NzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3Bl
cnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1
dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmli
dXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMjMsNyArMTAyOCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJl
Z3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEw
OTIsNyArMTA5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnKTsKIH0KIApAQCAtMTEzNiw3ICsxMTQxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF9kaXJlY3QoYwogICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0xMTcwLDcgKzExNzUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3Mp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTExOTYs
NyArMTIwMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHNXaXRoVGhp
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOwogfQogCkBAIC0xMjM5LDcgKzEyNDQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAgLTEzMjQsNyArMTMyOSw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0x
NzM1LDYgKzE3NDAsNyBAQCB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdp
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8v
IE9PUFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29s
dmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0x
ODQxLDU5ICsxODQ3LDc3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVU
eXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlw
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVj
b2RlSW5kZXgpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVj
b2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJl
Z1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAg
ICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVl
ZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBl
LgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwor
ICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJk
aWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsK
KworICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAg
ICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoQ2xvc3VyZVZhciwg
IkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICAgICAgfTsKIAot
I2RlZmluZSBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9z
Y29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZF
X1RZUEUoUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCisgICAgICAgIGF1dG8gY2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgICAgICBy
ZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyIpOwogICAgICAgICB9OwotI3VuZGVmIFJFU09MVkVfU0NPUEVf
R0VORVJBVE9SCisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0g
W10gKFZNJikgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29w
ZVRodW5rKHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMi
KTsKKyAgICAgICAgfTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0g
cmVnVDc7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBl
XSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9z
dXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2
bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jl
c29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNv
bnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZl
VHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUg
dGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBM
TEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAg
IHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBz
bG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsK
ICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJU
KHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1Jl
dHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBy
ZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSks
IHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1w
TGlzdCBzbG93Q2FzZTsKIApAQCAtMTkwMiwyNiArMTkyNiwyNiBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlm
IChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFs
T2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RH
UFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwog
ICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVD
VF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJl
Z1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVn
VDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwg
T0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQp
KSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFk
ZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0z
MihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3Vy
ZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNj
b3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKKyAgICAg
ICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRo
KSksIHJlZ1QxKTsKIAotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVt
cCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9
IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QxKTsKICAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlz
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNl
dE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVnVDEpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAg
ICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmpp
dCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKSB7CkBAIC0xOTI5LDEyICsxOTUzLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAg
IC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxC
aW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9m
ZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAg
IG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9i
amVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAg
ICAgICAgICAgaml0Lm1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCkBAIC0xOTQ0LDExICsxOTY4LDExIEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9y
IEdsb2JhbFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAg
ICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9u
bWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwg
cmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyOgpAQCAtMTk1Niw3ICsxOTgwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFy
OgpAQCAtMTk2Niw4MyArMTk5MCw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsK
LSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAg
ICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQot
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUg
PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpy
ZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9m
ZnNldE9mUmVzb2x2ZVR5cGUoKSksIHJlZ1QwKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmso
dGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CisgICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKSB7CisgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlKTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgICAgICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7Cisg
ICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFs
TGV4aWNhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAotICAgIHJldCgpOworICAgIGpp
dC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVO
S19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5k
bGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0g
ICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VI
YW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bSgpLmdl
dENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1
bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0m
IHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BS
ZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0g
ICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcFJlc29s
dmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAj
cmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9SRVNP
TFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFU
T1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3Bf
cmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVy
YXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNl
bGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3Mu
CiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIxMTIsNiArMjA5OCw3IEBAIHZvaWQgSklUOjplbWl0R2V0
Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0yMjI1LDcgKzIyMTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCkBAIC0yMjUzLDMxICsyMjQwLDQxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEkKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNl
dCkgPT0gbV9ieXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCisgICAgYXV0
byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICByZXR1cm4gSklUOjpn
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRf
ZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVy
biBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7Cisg
ICAgfTsKKworICAgIGF1dG8gZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvciA9IFtdIChWTSYp
IHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6
bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBnZW5lcmljIik7CisgICAgfTsK
KwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IHJlZ1Q1OwogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikg
ewotICAgICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2lu
dGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5v
ZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFP
ZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFU
YWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29s
dmVUeXBlKSBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAg
ICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAg
ICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAg
ICAgICB9OwotI3VuZGVmIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0
YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0
YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwotICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGNvZGU7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikK
KyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAg
ZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdl
dENUSVN0dWIoZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWRO
ZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8
UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAg
Ly8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0
aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KQEAgLTIyODYsNzcgKzIyODMsNjggQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BH
ZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIg
PSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVM
RUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwog
Ci0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUo
KSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBqaXQudGFn
UmV0dXJuQWRkcmVzcygpOworCisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRk
UHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAg
IGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwg
aW50MzJfdCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCkgewotICAgICAgICBsb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAg
ICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hU
ZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1
Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFw
cGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
ID0gWyZdIChHUFJSZWcgc2NvcGVHUFIpIHsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAg
ICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKICAgICB9OwogCiAgICAgYXV0
byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldh
dGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxP
YmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CiAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0Ojpv
ZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9Owog
ICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJh
bmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBv
cGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAg
IGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFu
ZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9w
ZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCiAgICAg
YXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3Bl
cmFuZEdQUikgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0
ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAg
ICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
KSwgcmVnVDApOworICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5k
R1BSKTsKKyAgICAgICAgaml0LmFkZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQUik7CisgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CiAgICAgfTsKIAotICAgIGF1dG8gZW1pdENvZGUg
PSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJh
bmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkg
ewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JK
RUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sg
Y292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3Ig
YW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29w
ZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJl
ZyByZXN1bHQgPSByZWdUMDsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0g
cmVnVDE7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKIAot
ICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4g
SnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAgICAgICAg
ICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7
CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAg
ICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CiAgICAg
ICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9w
ZXJhbmQoKSksIG9mZnNldCk7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAg
ICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAg
ICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAg
ICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBKdW1w
IGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBU
cnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQu
YWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAg
ICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gp
OwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRv
UHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRj
aCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICAg
ICAgICAgIGppdC5uZWczMihvZmZzZXQpOworICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRv
UHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KHNj
cmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgpAQCAtMjM2NCwyMSArMjM1MiwxOSBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwg
cmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAg
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0g
ICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAg
ICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsK
ICAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAg
ICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM4OCw3OSArMjM3NCw1NiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAg
c3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNU
X09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVz
b2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0g
ICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwg
dHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJl
c29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAg
ZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0
YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwgcmVnVDApOworICAgICAgICBqaXQuYW5kMzIo
VHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29s
dmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBK
dW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0
Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGpp
dC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmpp
dCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7
CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsK
IAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXIubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0
cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAg
ICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5qdW1wKCkpOwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwg
ZmFsc2UpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAg
ICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9
PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRk
cmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpKSk7CiAKLSAgICBy
ZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlz
LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRv
IHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3Bl
R2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25M
YWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlv
bkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5F
X0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5
cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICgh
dGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAg
IHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGpp
dC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3Bf
Z2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xW
RV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dF
VF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAg
ICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsg
d2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQpAQCAtMjUxOCw4NiArMjQ4MSw3
OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsK
LX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRk
cmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5k
aXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAg
IGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCBy
ZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQ
dXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIo
cmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlh
YmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KLQogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Nj
b3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZv
IGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUq
KiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRw
dHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0
YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBl
IHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBb
Jl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5
cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNr
IGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9y
IGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2Nv
cGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICAv
LyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2Fj
aGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAg
ICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3Ig
dGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdU
MCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAg
ICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAg
ICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpvZmZzZXRP
Zk9wZXJhbmQoKSwgcmVnVDEpOwogICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAg
ICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJh
c2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAt
IDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgLy8gT09QUzogd291
bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgR1BSUmVncworICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAg
ICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2Ug
R2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2Nr
KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7CiAgICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0g
ICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisKKyAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0
aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYm
IChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBw
cm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5k
U2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAg
ICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dh
dGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9p
bnRTZXQoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChy
ZWdUMSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qx
KTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAg
ICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sg
YSBHUFJSZWcgZm9yIHZhbHVlLgorICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFu
ZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBs
b2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCks
IHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOwor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAg
c3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgU2NhbGVFaWdodCwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKworICAgICAgICAgICAgLy8g
T09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcg
Zm9yIG93bmVyL3ZhbHVlLgogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IE1vZHVsZVZhcjoKQEAgLTI2MTEsNTggKzI1NjcsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAg
ICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdl
IGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5k
aW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBl
bWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwot
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNl
ZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2Ug
Y2FuIGNvbXBpbGUgdGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBz
aW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBh
IENsb3N1cmVWYXIsCisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJ
ZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENs
b3N1cmVWYXIKKyAgICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZp
cmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRv
ZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShD
bG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVk
Q2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBl
bHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dElu
Zm8oKSwgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1
bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3Bl
cnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
LmxpbmsodGhpcyk7CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUo
R2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBu
b3RHbG9iYWxWYXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwog
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFs
c2UpOwotICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2NzEsMTMgKzI2MjEsMTYgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRH
ZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVU
eXBlKCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAg
ICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwg
bGlua2VkIENvZGVCbG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUg
TW9kdWxlVmFyLgogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3By
b3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9
IGVsc2UgewogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Nj
b3BlLCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTI3NDgsNyArMjcwMSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCkBAIC0yODA2LDcgKzI3NTksNiBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKQEAg
LTI4MTQsNyArMjc2Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChj
b24KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRl
cm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yODM2LDcg
KzI3ODgsNiBAQCB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CkBA
IC0yODUyLDcgKzI4MDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29u
c3QgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMgdGhlIG1v
c3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2UgaXQgaWYg
d2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51bWVyYXRv
ck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkg
eworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2VudW1l
cmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1v
ZGUpIHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAgICAgICAg
b3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGVudW1l
cmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6bW9kZVNldE9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7
CkBAIC0yOTY1LDcgKzI5MTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9i
eV92YWwoCiAKICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjk3NCwxMCArMjkyNSw5IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5
VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4o
KSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBT
bG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3Bl
cnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNv
ZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgor
dm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1Bh
dGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9y
OwpAQCAtMjk4Niw3ICsyOTM2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJv
cGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRh
ZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRpb25NZXRhZGF0YSgpLCBy
ZWdUMSk7CisgICAgb3IzMihyZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVn
VDEsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRpb25NZXRh
ZGF0YSgpKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2Rl
KSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9u
IDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1MzgsNyArMTUzOCw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0m
IHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5
KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsK
KyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBD
YWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAgIHJl
dmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQkocmV2aXNpb24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTIs
MTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAK
IG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikK
ICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFj
cm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjpt
X2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAg
ICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhd
LCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9wKG9wY29k
ZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwgc3JjRHN0
IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAgICAgICBzdG9y
ZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9m
aWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bj
b2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0Y2goKQog
CiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwg
bWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQot
ICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVu
YXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0YSh0NSwg
dDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShz
aXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90
SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDIK
LSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5
QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAgICByZXR1
cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEsIExvd2Vz
dFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1cGRhdGVB
cml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9m
aWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1cm4odDEs
IHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkKIAogbWFj
cm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJP
cGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRh
dGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3Bh
dGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkK
LSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAg
ICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAgICAgICAg
Z2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9t
U3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWco
c2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAub3AxTm90SW50
CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAgICBhcml0aFBy
b2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZ2V0
KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0MSwgdDAs
IC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwxMiBAQCBt
YWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJpYSB0Miwg
TG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5vdEludE9w
MkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRo
UHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAg
ICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3Ax
Tm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAgICBhcml0
aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlB
cml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0
NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAgICAgICAg
IGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5hcnlPcEN1
c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZp
bml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90LgogICAg
ICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cKLSAg
ICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0
NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEK
ICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlz
aW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU2LDEwICsxMDU2LDYgQEAgc3RyaWN0
RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVO
YW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBl
bmQKLQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwg
OF0sIHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA2NSw3IEBAIG1h
Y3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9w
ZXJhdGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0
b3JlcSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFBy
b2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
QXJpdGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93
OgpAQCAtMTEzNCwxMSArMTEzMCw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9w
X25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
cmV0dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9y
aCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0
MikKQEAgLTExNDYsMTIgKzExMzcsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUs
IE9wTmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBu
ZWdpIHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJp
dGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0
aFByb2ZpbGVJbnQsIHQxLCB0NCkKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAg
ICAgYnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAw
MDAwMDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikK
KyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVy
LCB0MSwgdDQpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCAr
MTE1NSw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBs
bGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEo
dDUsIHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0
eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJp
dGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3Jocywg
dDApCiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUoc2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY0LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0
b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBp
bnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJv
ZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQ0KQogICAgICAgICBkaXNw
YXRjaCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3NCwxMCBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJl
clRhZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEs
IGZ0MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVy
TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90
SW50T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAg
ICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVt
YmVySW50LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVh
ZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA2LDcgKzExOTMsNyBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFu
ZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAg
ICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwot
ICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmlu
YXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwg
dDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAg
ICAgICAgIGZxMmQgdDEsIGZ0MQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgxNjM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC0yNDk4LDYgKzI0OTgsMTcgQEAgbWFjcm8gbm90U3VwcG9ydGVkKCkKICAgICBl
bmQKIGVuZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
dHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgVW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAg
b3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKwogLy8gRklY
TUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0X1dJTiBjb25kaXRpb24gaGVyZSwgc2lu
Y2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUgZmFsc2Ugb24gV2luZG93cwogLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNgogaWYgV0VCQVNTRU1C
TFkgYW5kIG5vdCBYODZfNjRfV0lOCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19w
YXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZv
clVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3Vs
dCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0g
bWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUg
PSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJh
bmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436606</attachid>
            <date>2021-08-26 20:49:20 -0700</date>
            <delta_ts>2021-08-27 16:58:07 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>180351</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IHVubGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxp
bmtlZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRp
b24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
aXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0g
ICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRo
U3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhT
dGFydCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlz
IGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQg
dG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0
aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJz
OjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAg
IHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MjQsNiArNDI0LDEzIEBAIGlubGluZSBDb2RlT3JpZ2lu
IGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBz
byB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNiArNDY3
LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAg
YnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENv
ZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAg
ICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENv
ZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAg
ICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVj
dGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1
Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI5LDE0ICs1NDIsMTQgQEAgYm9vbCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJv
bWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9w
QWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBM
SU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMp
Ci0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVs
KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAg
IExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJ
VEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC0zMTAyLDcgKzMxMTUs
NyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFC
TEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBK
SVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJh
bWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMzMTgsMTMgKzMzMzEsMTMg
QEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRj
aCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZw
Yy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJl
dHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAg
Y2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRo
aXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMzMzNiwxMSArMzM0OSwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29k
ZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAg
IGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0
ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAg
ICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0
aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVj
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFz
PE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDE2ICsyMzMsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0
OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9v
bCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRoZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJu
IHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFuZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAg
ICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFu
dChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+
KG1fbnVtVmFycyk7CkBAIC0yNjcsNiArMjU3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNT
dGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAg
ICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBo
ZXJlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOwogCkBAIC00NzgsNiArNDY5LDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5h
bWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFy
YW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKQEAgLTgwMyw2ICs3OTUsNyBAQCBwdWJs
aWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2Rl
YnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsg
cmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25l
ZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51
bUJyZWFrcG9pbnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzUsNiArMTc1LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVC
YXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50
UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdp
c3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0
YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAg
Y29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIwOCwxNCBAQCBwdWJsaWM6CiAgICAgSlNQYXJz
ZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1Bh
cnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9u
U3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlv
bnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBp
bnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigpOworICAgICAgICBj
b25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3Ry
dWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSAr
IGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0
aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5k
KTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAg
fQogCiAgICAgdW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1D
YWxsZWVMb2NhbHM7IH0KICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1WYXJzOyB9CkBAIC00MTAsNiArNDE5LDkgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3M7CiAKKyAgICAvLyBPT1BTOiBi
aW5kIGEgYmV0dGVyIHBsYWNlIHRvIHN0b3JlIHRoaXMgc3R1ZmY/CisgICAgVmVjdG9yPEJpbmFy
eUFyaXRoUHJvZmlsZT4gbV9iaW5hcnlBcml0aFByb2ZpbGVzOworICAgIFZlY3RvcjxVbmFyeUFy
aXRoUHJvZmlsZT4gbV91bmFyeUFyaXRoUHJvZmlsZXM7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CkBAIC00NTUsNiArNDY3LDI4IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3Ry
dWN0aW9uLm9mZnNldCgpKTsKICAgICB9CisgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29u
c3QgSW5zdHJ1Y3Rpb24qIHBjKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQgPSB0aGlzLT5ieXRlY29kZU9mZnNldChwYyk7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVK
dW1wT2Zmc2V0KG9mZnNldCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQ
cm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5QXJpdGhQ
cm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoQmlu
YXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV91bmFyeUFy
aXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGJpbmFyeUFyaXRoUHJv
ZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX2JpbmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KKyAg
ICBVbmFyeUFyaXRoUHJvZmlsZSYgdW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1
cm4gbV91bmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KIAogcHJpdmF0ZToKICAgICB1c2luZyBPdXRP
ZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50
PjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRh
VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTAxLDkgKzEwMSwxOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc19vZmZzZXQxNlRh
YmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAgICAg
dXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsKIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNv
ZGU+CisgICAgdWludHB0cl90IG9mZnNldEluTWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9w
Y29kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWlu
dHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9pczMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29k
ZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUxNigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAg
ICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YoT3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNv
ZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
c19vZmZzZXRUYWJsZUVudHJpZXMgPSBOVU1CRVJfT0ZfQllURUNPREVfV0lUSF9NRVRBREFUQSAr
IDE7IC8vIG9uZSBleHRyYSBlbnRyeSBmb3IgdGhlICJlbmQiIG9mZnNldDsKIAogICAgIC8vIE5v
dCB0byBicmVhayBhbGlnbm1lbnQgb2YgMzJiaXQgb2Zmc2V0IHRhYmxlLCB3ZSByb3VuZCB1cCBz
aXplIHdpdGggc2l6ZW9mKE9mZnNldDMyKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNyArNDAsNiBAQCB0ZW1wbGF0ZTx1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHNBcmd1bWVuCiBz
dHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBu
dW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51
bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVl
UHJvZmlsZUJhc2UoKQpAQCAtMTM0LDcgKzEzMyw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNl
IHsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247CiAgICAgfQotICAgIAor
CiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNrZXRzW3RvdGFsTnVtYmVyT2ZCdWNrZXRzXTsKIAog
ICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbiB7IFNwZWNOb25lIH07CkBAIC0xNTYsNiAr
MTU1LDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldAogCiBzdHJ1
Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tl
dHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgpIDogVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9m
QnVja2V0czwwPigpIHsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEJ1Y2tl
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0c1swXSk7
IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMg
VmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODE2MzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU5OCw3ICsxNTk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRVbmFyeQogICAgICAgICBlbWl0VW5hcnlPcDxPcE5vdD4oZHN0LCBz
cmMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAgT3BOZWdh
dGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUpOworICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0
aGlzLCBkc3QsIHNyYywgdHlwZSwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIG9wX2JpdG5vdDoKICAgICAgICAgZW1pdFVuYXJ5
T3A8T3BCaXRub3Q+KGRzdCwgc3JjKTsKQEAgLTE2OTYsMTMgKzE2OTYsMTMgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUeXBlTwogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEluYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BJbmM6OmVtaXQo
dGhpcywgc3JjRHN0KTsKKyAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2Nr
LT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7
Ci0gICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcERlYzo6ZW1pdCh0aGlzLCBz
cmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4g
c3JjRHN0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IFJlZ2lzdGVySUQqPgogICAgICAgICBlbWl0QmluYXJ5T3AoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBzcmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwg
dHlwZXMpOworICAgICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMy
LCB0eXBlcywgbV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAg
ICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODE2
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODksNyArODg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBp
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAg
ICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAg
ICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk2LDcgKzg5
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAKICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0g
ICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5v
LCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVT
aHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZs
ZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lv
biAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2OTQsNyArMTQ2OTQsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2Nv
cGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBzY29wZVJlZyA9IHNjb3BlLmdw
cigpOwogCi0gICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0
UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIG1faml0LmNvZGVCbG9jaygpLCBjYWxsU2l0ZUluZGV4
KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcs
IHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNv
ZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJl
dmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyNzAsNyArMTAyNzAsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9j
aygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDAp
OwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1Bh
dGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVn
VDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVm
ZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAg
ICAgIH0pOwpAQCAtMTA2MTMsNyArMTA2MTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAg
ICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6
VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAg
ICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDg5NCw3ICsxMDg5NCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNU
YWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZv
OjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxD
YWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjgxNjM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpA
QCAtNDIsMTcgKzQyLDIyIEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkKICAg
ICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZp
eCwgZmllbGRzKQorICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcywgZ2Vu
ZXJhdGVPZmZzZXRPZikKICAgICAgICAgICAgIGZpZWxkcy5tYXAgZG8gfGZpZWxkLCB0eXBlfAog
ICAgICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAotICAgICAgICAgICAgICAgICAg
ICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlw
ZSl9XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtc
biN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUsIGZhbHNlKX1cbiN7cHJlZml4
fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4
fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307IgorICAgICAgICAgICAgICAgICAgICBmaWVs
ZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICIje3ByZWZp
eH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgorICAgICAgICAgICAgICAgICAgICBpZiBn
ZW5lcmF0ZU9mZnNldE9mCisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsg
IlxuIiArICJzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7
ZmllbGROYW1lWzEuLl19KCkgeyByZXR1cm4gT0ZGU0VUT0YoTWV0YWRhdGEsIG1fI3tmaWVsZE5h
bWV9KTsgfSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdAogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAg
ICAgICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBA
ZmllbGRzKQorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAgICAgICIsIEBmaWVs
ZHMsIHRydWUpCiAKICAgICAgICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVy
cyAmJiAobm90IEBpbml0aWFsaXplcnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgxNjM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OTgsOCArNjk4LDEzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVl
U2F2ZXMKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGVtaXRWaXJ0dWFs
Q2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworfQorCit2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYg
dm0sIENhbGxMaW5rSW5mbyogaW5mbykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyks
IEdQUkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExp
bmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8g
Y2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRp
b25QdHJUYWc+KGNhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzE4LDYgKzE3MTgsNyBA
QCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsKICAgICAKICAgICB2
b2lkIG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25T
dGFja0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVs
cGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhl
bHBlcnMuY3BwCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIHZvaWQg
Q0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuUHJvbG8KICAgICBzdG9yZVB0cihzY29wZSwg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIHNjb3BlKSkpOwogfQogCi12b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJl
ZyBzY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eCkKLXsKLSAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1l
KSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0
YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOwotICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCB0aGlzVmFsdWUpKSk7Ci0gICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0
LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKLSAgICBz
dG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7Ci0gICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRv
d1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJ
bmRleCkpKTsKLX0KLQogdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNr
ZXQoVk0mIHZtLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIs
IEdQUlJlZyBzY3JhdGNoMikKIHsKICAgICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0g
dm0uc2hhZG93Q2hpY2tlbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2Fs
bEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxs
SGVscGVycy5oCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDE4IEBAIHB1Ymxp
YzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJlZ2lzdGVy
cy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Agb2YKICAgICAvLyBz
dGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNr
ZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDEsIEdQ
UlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcg
c2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxv
Y2sqLCBDYWxsU2l0ZUluZGV4KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBj
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKKyAgICB7CisgICAgICAgIHN0
b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwg
T0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2Vy
KCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgY2FsbGVlKSkpOworICAgICAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhp
c1ZhbHVlKSkpOworICAgICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOworICAgICAg
ICBzdG9yZVB0cihjb2RlQmxvY2ssIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7CisgICAgICAgIHN0b3JlMzIo
VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7
CisgICAgfQorCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3
ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93
Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5v
bkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkocmV2aXNpb24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkK
ICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOwogfQogCiBKSVQ6On5KSVQoKQpA
QCAtMTEzLDcgKzExNCw3IEBAIHZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNl
dCoKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0
LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCkKK3ZvaWQgSklU
OjplbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpCiB7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9TZXQsIFdhdGNo
cG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OwogfQpAQCAtMTI5LDcgKzEzMCw3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIEp1
bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CkBAIC02NzcsMTcgKzY3OCwxNiBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiB2b2lkIEpJVDo6Y29tcGls
ZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7
Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0
eUxldmVsKCk7CisgICAgLy8gT09QUzogTWF5YmUgdGhpcyBzaG91bGQgYmUgZG9uZSBvbiB1bmxp
bmtlZCBjb2RlIGJsb2NrPworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9m
aWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewog
ICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0g
ZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAg
ICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgog
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXpl
ZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7
CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC03NDcsNyArNzQ3LDcgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogCiAgICAgTGFiZWwgYmVnaW5MYWJl
bCh0aGlzKTsKIAotICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGludCBmcmFtZVRvcE9mZnNl
dCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXplID0gLWZyYW1lVG9wT2Zmc2V0Owog
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVUb3BPZmZzZXQpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgcmVnVDEpOwogICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CkBAIC03NjMsNyArNzYzLDEw
IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KIAogICAgIGlmICht
X2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgQVNTRVJU
KCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7
CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX2NvZGVCbG9jay0+aXND
b25zdHJ1Y3RvcigpIHx8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAxKSkgeworICAg
ICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIENvZGVC
bG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVkVmVjdG9yOjpvZmZz
ZXRPZlN0b3JhZ2UoKSksIHJlZ1QyKTsKKwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1
bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1
bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhl
biB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwogICAgICAgICAg
ICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3
YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCkBAIC03NzksNiArNzgyLDcgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQz
MihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCiAgICAg
ICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9m
aWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBz
dG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZh
bHVlUHJvZmlsZSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTk1OSwx
MCArOTYzLDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIH0KIAogICAgIGZvciAoYXV0byYgY29t
cGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAgICAgIENhbGxMaW5r
SW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAgICBpbmZv
LnNldENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKLSAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25J
bmZvLmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9
ICpjb21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGluZm8uZG9u
ZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21w
aWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKICAgICB7CkBAIC05OTMsNyArOTk1
LDEwIEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAl
cyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNF
bnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3
IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1
bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9
IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5r
SW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOwogCiAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAl
cCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgp
LT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgp
LnVudGFnZ2VkUHRyKCkpOwpAQCAtMTAwOCw2ICsxMDEzLDggQEAgQ29tcGlsYXRpb25SZXN1bHQg
SklUOjpmaW5hbGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5rQnVmZmVyLT5ydW5NYWluVGhyZWFk
RmluYWxpemF0aW9uVGFza3MoKTsKIAorICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0
aElDcyk7CisKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2Rl
QmxvY2stPm1fbG9jayk7CiAgICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIs
IENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CkBAIC0xMDgyLDE0ICsxMDg5LDE0
IEBAIHZvaWQgSklUOjpkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUMKICAgICAgICAgbV92
bS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKCptX3ZtLCAiUHJlcGFyaW5n
IGZvciBKSVQgY29tcGlsYXRpb24uIl9zKTsKIH0KIAotdW5zaWduZWQgSklUOjpmcmFtZVJlZ2lz
dGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVn
aXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEFTU0VS
VChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkgPT0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSkpOwogCiAgICAg
cmV0dXJuIHJvdW5kTG9jYWxSZWdpc3RlckNvdW50Rm9yRnJhbWVQb2ludGVyT2Zmc2V0KGNvZGVC
bG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbElu
UmVnaXN0ZXJzKTsKIH0KIAotaW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9j
ayogY29kZUJsb2NrKQoraW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2spIC0gMSkub2Zmc2V0KCk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDMxIEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCisgICAgY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHVzaW5nIENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICAgICAgZW51bSBj
bGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgICAgICBHbG9iYWxPYmplY3QsCisgICAgICAg
ICAgICBDYWxsTGlua0luZm8KKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgVmFsdWUgewor
ICAgICAgICAgICAgVHlwZSB0eXBlOworICAgICAgICAgICAgUGFja2VkUHRyPHZvaWQqPiBwYXls
b2FkOworICAgICAgICB9OworCisgICAgICAgIENvbnN0YW50IGFkZChUeXBlIHR5cGUsIFBhY2tl
ZFB0cjx2b2lkKj4gcGF5bG9hZCA9IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgICAgIG1fY29uc3Rh
bnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBWZWN0b3I8VmFsdWU+
IG1fY29uc3RhbnRzOworICAgIH07CisKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAK
ICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOwpAQCAtMTg2LDkgKzIxMSw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2Fs
bExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5m
b0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxl
ZUZ1bmN0aW9uKTsKQEAgLTIzMiw4ICsyNTcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dFByaXZhdGVOYW1lV2l0aENhY2hlZElkKGJ5VmFsSW5m
bywgcmV0dXJuQWRkcmVzcywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7Ci0gICAgICAg
IHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOworICAgICAgICBz
dGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7
CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJs
b2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmlu
ZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBpbGVUaW1lKCk7CkBAIC0yNjksNiArMjk0LDI0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8
Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29k
ZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPEJ5dGVjb2Rl
PgorICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwg
R1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3Rv
cmU4VG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisK
KyAgICAgICAgdGVtcGxhdGUgPEJ5dGVjb2RlPgorICAgICAgICB2b2lkIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7
CisKKyAgICAgICAgdm9pZCBsb2FkQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BS
UmVnKTsKKyAgICAgICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7CisKICAgICAgICAg
dm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5kbGVyKTsKQEAgLTMwNCwx
NiArMzQ3LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAog
ICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2Rl
SUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAh
PSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQp
OwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6
b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29u
c3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBib29sIGNv
bXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxp
bmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CkBAIC0zMzcsMTAgKzM4MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAg
YW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsK
LSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAgICAgICAgLy92b2lkIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0
ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFs
dWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFk
YXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7
CkBAIC02NDgsNyArNjkxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hl
Y2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNzAxLDcgKzc0Myw3IEBAIG5h
bWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1p
dE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3Jp
dGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0
Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNW
YWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKTsKQEAgLTcxMCw2ICs3NTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2
b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxS
ZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwog
ICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAg
IGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC03NTEsMjYg
Kzc5NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5
cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCBy
ZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9H
RVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNy
ZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQ
RShERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVu
a0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVu
dCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2
ZWRDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVz
b2x2ZV9zY29wZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVk
Q2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNk
ZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNv
bHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFD
SF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBE
RUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2
ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhz
dGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFy
KiB0aHVua05hbWUpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1RydXRoeUdlbmVy
YXRvcihWTSYpOwpAQCAtOTc0LDExICs5OTksOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVO
QUJMRShERkdfSklUKQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gbV9j
YW5CZU9wdGltaXplZDsgfQotICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkg
eyByZXR1cm4gbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsgfQogICAgICAgICBib29sIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBtX3Nob3VsZEVtaXRQcm9maWxpbmc7IH0KICNlbHNl
CiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAg
ICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAg
ICAgLy8gRW5hYmxlcyB1c2Ugb2YgdmFsdWUgcHJvZmlsZXIgd2l0aCB0aWVyZWQgY29tcGlsYXRp
b24gdHVybmVkIG9mZiwKICAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSBhbGwgY29kZSBnZXRzIHBy
b2ZpbGVkLgogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxz
ZTsgfQpAQCAtOTg2LDEzICsxMDA5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3Rh
dGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1
dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNo
ZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0g
ICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRo
ZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xv
dyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0
UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJp
dGhQcm9maWxlKEJpbmFyeU9wKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRl
cjsKIApAQCAtMTAyMCw5ICsxMDM2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29y
ZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9j
b3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQ
cm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNl
cHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxG
cmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEwNTcsMTEg
KzEwNzAsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1
Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRv
TWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsK
LSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1f
c2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29k
ZTsKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRyPEJhc2Vs
aW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0
YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVj
dENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAg
ICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgICAgICBC
YWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworCisgICAgICAgIEdQUlJlZyBt
X21ldGFkYXRhR1BSOworICAgICAgICBHUFJSZWcgbV9jb25zdGFudHNHUFI7CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewog
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50
R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0
ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmVnVDEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
ICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMiwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3
ICszNzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAg
fQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMSw4IEBAIHZvaWQgSklUOjpl
bWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRl
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyog
bmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBV
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPnVu
YXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubV9wcm9m
aWxlSW5kZXgpOworICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJ
Qyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudElu
c3RydWN0aW9uLCBuZWdhdGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0
byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4g
YmUgYSBCaWdJbnQKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJp
dGhOZWdhdGUpOwpAQCAtODk5LDggKzkwMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQo
Y29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2st
PmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVEFkZElD
KiBhZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1p
dE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTQ5LDEx
IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdl
bmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAg
ICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUo
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFy
aXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBl
bHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1
bXBzKTsKIApAQCAtMTAxNSwxMCArMTAyMCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3Qo
SklUQmluYXJ5TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJv
ZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBp
ZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJl
Z3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UK
ICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMp
OwogCkBAIC0xMDU1LDEzICsxMDYxLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRV
bmFyeU1hdGhJQzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7
CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAg
ICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAg
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAg
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZElt
bVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9
IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+
KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5j
dGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxh
YmVsKCk7CkBAIC0xMTIwLDEzICsxMTI3LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRCaW5hcnlNYXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAg
ICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQot
ICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1h
dGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpN
aWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdz
LCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVn
VDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24p
LCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhF
bmQgPSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsxMTc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2
KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFy
aXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJm1fdW5s
aW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGl2PigpLm1fcHJvZmlsZUluZGV4KTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVy
YW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5k
IHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjEx
LDggKzEyMTksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAK
IHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0
aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5s
aW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTXVsPigpKTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRkSklUTXVsSUMo
YXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0
cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11
bCk7CiB9CkBAIC0xMjI3LDggKzEyMzUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNv
bnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX21hdGhJ
Q3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3Vi
PihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw3ICsyMzIsNyBA
QCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBzdG9yZVB0cihjYWxsRnJh
bWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgp
KSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJl
Z1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1p
dFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTMyNCw3ICszMjQsNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgYWRkU2xvd0Nh
c2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3Vs
dChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxT
bG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0g
ICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0
ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0z
NTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAkocmV2aXNpb24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9w
JiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9y
KGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIo
KSwgcmVnVDApOwogfQogCkBAIC01Myw3ICs1Myw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAg
T3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29u
c3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFy
Z3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2
b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5r
SW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9ieXRl
Y29kZUluZGV4LmNoZWNrcG9pbnQoKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKQEAgLTc4LDcgKzc4LDcgQEAgc3RkOjplbmFibGVfaWZfdDwK
ICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBv
cF9jb25zdHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
CiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2Fs
bExpbmtJbmZvKiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKQEAgLTEw
Niw5ICsxMDYsMTAgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAog
CiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0g
ICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCks
IHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJl
Z1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQs
IHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRP
Zk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RC
aWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdU
MiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAg
Ly8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEyOCwxNiBAQCBib29sIEpJVDo6Y29t
cGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2Fs
bEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdp
c3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxs
RnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1Qx
LCByZWdUMik7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRH
UFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikp
OwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogCkBAIC0xNDgsNyArMTQ5LDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
Q2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENh
bGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5m
byogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwog
CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKQEAgLTE1Niw0MyAr
MTU3LDQ2IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6
ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92
bSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlu
a0luZm8qLCB1bnNpZ25lZCkKLXsKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3Am
LCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50KSB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29t
cGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGlu
Zm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8s
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNh
bGxMaW5rSW5mb0NvbnN0YW50KQogewotICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVE
YXRhOwotICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0g
ICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdp
c3RlcjsKLSAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQorICAgIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNo
dWZmbGVEYXRhPigpOworICAgIHNodWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUu
bV9hcmdjOworICAgIHNodWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51
bWJlclRhZ1JlZ2lzdGVyOworICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBi
eXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0
ZXIpOwotICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAg
c2h1ZmZsZURhdGEtPmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVE
YXRhLmFyZ3NbaV0gPQorICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAg
ICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAgICAgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2
LAogICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRh
LmNhbGxlZSA9Ci0gICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0
SlMpOwotICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9j
ayk7Ci0gICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1
ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0
SlMpOworICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxv
Y2spOwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZd
IHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJl
Z1QyKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2Fs
bERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CisgICAgICAgIENhbGxG
cmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwog
ICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CisKKyAgICBzaHVmZmxlRGF0YS0+
c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVm
ZmxlRGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9j
YXRpb247CiAgICAgCkBAIC0yMTgsMzIgKzIyMiw0MCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBD
OyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVy
IGFmdGVyIHJldHVybi4KICAgICAqLwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7
Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAg
ICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CisKKyAgICBVbmxpbmtlZENhbGxM
aW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBp
bmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFs
KSB7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbV91bmxpbmtlZENhbGxz
LmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2Rl
SUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAgICAgQVNTRVJUKG1f
Y2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Cisg
ICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5saW5rZWRD
YWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50OworCisgICAg
fQorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQpOwogCiAgICAg
Ly8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRo
IEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRlY29kZUluZGV4ID0gbV9j
b2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOworICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7
CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVzcyhjYWxsRnJh
bWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxs
ZWUuCiAgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAt
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChi
eXRlY29kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlv
bkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwo
Q2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxD
b21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwot
Ci0gICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5k
ZXgpKQorICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5m
b0luZGV4LCBpbmZvQ29uc3RhbnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3Rh
bnQoaW5mb0NvbnN0YW50LCByZWdUMik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykg
ewotICAgICAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0
aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Cisg
ICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNG
YXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICAgICAgLy8gT09QUwog
ICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CiAgICAgICAgIH0pOwpAQCAtMjUzLDEzICsyNjUsMTMg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0RmFzdFBhdGgoKnRo
aXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olllcyk7CisgICAgYXV0
byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVn
VDAsIHJlZ1QyKTsKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgYWRkU2xv
d0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1
dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjczLDIwICsyODUsMjIgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1Bh
dGhTdGFydCA9IGxhYmVsKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgbG9h
ZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExp
bmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKIAotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7CisgICAgICAgIC8vIE9PUFMKICAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIH0KIAotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0
aCgqbV92bSwgKnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKCpt
X3ZtLCAqdGhpcywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8
fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERp
ZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2Vk
Q29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpAQCAtNDA0LDcgKzQxOCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CiAKICAgICBmYXN0
Q2FzZS5saW5rKHRoaXMpOwpAQCAtNDkzLDcgKzUwNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0
ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgZG9uZUdQ
UiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRv
bmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KQEAgLTUx
Miw3ICs1MjYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAg
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CiAKICAgICAgICAg
aXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNiArMjQ4LDQxIEBAIHByb3RlY3RlZDoKICAg
ICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1fcmVmOwogfTsKIAorY2xhc3MgTWF0aElDSG9sZGVy
IHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKQor
ICAgIHsKKyAgICAgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICAg
ICAgbV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAgICAgICAgbV9uZWdJQ3Mg
PSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICAgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90
aGVyLm1fc3ViSUNzKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0aFBy
b2ZpbGUpOyB9CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorICAg
IEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkg
eyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKyAgICBKSVROZWdJQyogYWRk
SklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJ
Q3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2Vu
ZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUQWRkSUMqIGFk
ZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElD
KHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFt
ZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11
bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFy
eUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0K
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6
dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUq
IHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4K
KyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyBy
ZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRk
SUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5l
Z0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKwogREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoRGlyZWN0SklUQ29kZSk7CiBjbGFzcyBE
aXJlY3RKSVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CiAgICAgV1RGX01BS0Vf
U1RSVUNUX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKERpcmVjdEpJVENvZGUp
OwpAQCAtMjY2LDYgKzMwMSwxNiBAQCBwcml2YXRlOgogICAgIENvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gbV93aXRoQXJpdHlDaGVjazsKIH07CiAKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1Ymxp
YyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBCYXNl
bGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgICAgICA6IERpcmVjdEpJVENvZGUoV1RGTW92ZShj
b2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgIHsgfQorCisg
ICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgQmFnPENh
bGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsgLy8gT09QUzogbWFrZSBzdXJlIHdlIHZp
c2l0IHRoZXNlIHNvbWVob3cuIE9yIGFzc2VydCB3ZSBkb24ndCBoYXZlIHRvLCBzaW5jZSB0aGV5
J3JlIHZpcnR1YWwgY2FsbHMuCit9OworCiBjbGFzcyBOYXRpdmVKSVRDb2RlIDogcHVibGljIEpJ
VENvZGVXaXRoQ29kZVJlZiB7CiBwdWJsaWM6CiAgICAgTmF0aXZlSklUQ29kZShKSVRUeXBlKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODE2
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQog
ewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNv
bnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3Bl
cmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXND
b25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sK
KyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
c3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAg
ICAgICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBhbGwgbGluayB0aW1lIGNv
bnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewog
ICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+
Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIg
ZW50cnkpCkBAIC0xODUsNyArMjEwLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5k
Q2FsbFdpdGhFeAogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAg
aWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAK
QEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2Fz
ZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1f
Ynl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hl
Y2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAog
ICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgs
IGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRv
TmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVj
a3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJ
bmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBB
U1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hl
Y2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExh
YmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwzNCBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJl
dHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5n
KCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgo
KSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQotewotICAgIEFTU0VS
VChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29u
ZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAot
ICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIo
KSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQotICAgIEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+
KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigp
LCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwotICAgIHN0b3JlMzIodmFsdWUudGFnR1BS
KCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgotfQorICAgIGlmICghc3JjLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3Ry
aW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30K
KworLy8gT09QUworLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQorLy97CisvLyAgICBB
U1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKKy8vCisvLyAgICAvLyBXZSdyZSBpbiBhIHNp
bXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEg
ZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lmIFVTRShKU1ZBTFVFNjQpCisvLyAgICBzdG9y
ZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vI2Vsc2UKKy8vICAg
IEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8gICAgc3RvcmUz
Mih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7CisvLyAg
ICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7CisvLyNl
bmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQ
cm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmls
ZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsMjQgKzM1MywyNSBAQCBp
bmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRl
PHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAg
aWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsg
dmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0b3JlNjQo
dmFsdWUuZ3ByKCksIEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsK
LX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmls
ZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97CisvLyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisvL30K
IAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVt
cGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJl
ZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJl
c3VsdFJlZykpOwogfQogI2VuZGlmCiAKQEAgLTM5MCw3ICs0MjEsNyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91
YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAo
cmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29u
c3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1t
UHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZERv
dWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKQEAgLTUwNiw3ICs1MzcsNyBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYg
KCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwo
cmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNiw3ICs1NDcsNyBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQg
dGFnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBp
ZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MjQsMTEg
KzU1NSw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9
CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklU
OjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKQEAgLTU1NCw3ICs1ODAsOCBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1fYnl0ZWNv
ZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAK
ICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgICAgIC8vIE9PUFM6IGhhbmRsZSBsaW5r
IHRpbWUgY29uc3RhbnRzIGhlcmUuLi4KKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldENvbnN0
YW50T3BlcmFuZChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKICAg
ICAgICAgZWxzZQpAQCAtNTc2LDExICs2MDMsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsK
IH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBm
cm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTYwNSw3ICs2
MjcsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAKIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklE
IHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNL
bm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTY0NywzMCArNjY5LDcgQEAg
QUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewogICAgIGlmICh0YXJn
ZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vdXRP
ZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKLX0KLQotQUxXQVlTX0lOTElORSBHZXRQdXRJ
bmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNvZGUpCi17Ci0gICAg
dW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsgLy8gSGFzaE1hcCBkb2Vz
bid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdldFB1dElu
Zm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBH
ZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9n
ZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5mby5v
cGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJbmZvOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6Y29waWVk
QXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2NF90IGtleSA9IChz
dGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEpIDw8IDMyIHwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0byBpdGVy
YXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9y
ICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9y
LT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1fY29waWVkQXJpdGhQ
cm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBhcml0aFByb2ZpbGU7
CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5z
dHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY5MSw2ICs2OTAsNDYg
QEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAogICAgIHJldHVybiBF
Q01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDxCeXRlY29kZT4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2Rl
LCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyht
X21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0
YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8
Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQorewor
ICAgIGxvYWQzMihBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlIDxCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxv
YWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwg
R1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2Rl
KSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDxCeXRlY29kZT4KK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZhbHVlLCBBZGRy
ZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8Qnl0
ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVz
dWx0KQoreworICAgIGFkZFB0cihtX21ldGFkYXRhR1BSLCBUcnVzdGVkSW1tUHRyKG1fdW5saW5r
ZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSAr
IG9mZnNldCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25z
dGFudChKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1
bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKG1fY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KGNvbnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2Fk
Q29uc3RhbnQobV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgxNjM1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5z
dHJ1Y3RpbwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hP
ZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkp
OwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJs
b2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwg
JnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODE2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgeworICAg
ICAgICAvLyBPT1BTCiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAg
c3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3Io
ZHN0KSk7CkBAIC04NywzNyArODgsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IElu
c3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0
YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3Qg
YWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUt
PmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JG
b3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0
ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJl
Z1QxOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQg
c3RydWN0dXJlUmVnID0gcmVnVDM7CiAKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OwotICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAg
ICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFu
dChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0
dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlu
bGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAg
ICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMp
OwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9
CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Om9mZnNldE9m
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIG9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRv
clJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Om9m
ZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIG9mZnNldE9mU3RydWN0dXJlKCksIHN0
cnVjdHVyZVJlZyk7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJm
bHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJl
c3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVy
ZSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Mo
c3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNo
UmVnKTsKKyAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNo
UmVnKTsKKyAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVS
ZWcgPSByZWdUMzsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwog
ICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTM3NCw3ICsz
NzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiAjZWxzZQpA
QCAtMzg1LDcgKzM4NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlv
bioKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0g
ICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9y
KCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMo
KSk7CkBAIC00MTEsNyArNDEwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNv
bnN0IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0MzIsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRf
b3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1
bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVu
Y3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFt
ZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1
bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ2NCwxMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXko
dm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1
ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNDgxLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25z
IGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJl
bG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAg
Ly8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1MjAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRs
ZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUg
c3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAg
SnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQz
LDcgKzU0NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAg
ICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJv
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAg
ICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNjI1LDggKzYyNiwxMCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9i
amVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc1RydXRoeUdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDAsNyArNjQzLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTY5NSw3ICs2OTgsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMSwgcmVnVDApOwogICAg
IGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CkBAIC03MTEsNyArNzE1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhyb3duVmFsdWVH
UFIgPSBhcmd1bWVudEdQUjE7CkBAIC05MDgsNyArOTEyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEs
IHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5MjMs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CiAKQEAgLTk5Myw3ICs5OTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJ
bnN0cnVjdGlvCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRj
aE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgp
KSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2Rl
QmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxl
LCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMDExLDIzICsxMDE3LDExIEBAIHZvaWQgSklU
OjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0eXBlIHBy
b29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKLSAgICBp
ZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1f
Ynl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2Zp
bGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxPcGVyYXRpb25O
b0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmls
ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBza2lwT1NSRW50
cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFu
ZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYgKGJ1ZmZl
ciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsm
XSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSwgcmVncyk7Ci0g
ICAgICAgIH0pOwotICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIApAQCAtMTEx
Miw3ICsxMTA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgog
dm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
YnVnPigpOwotICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3Mo
KSwgcmVnVDApOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0
T2ZEZWJ1Z2dlclJlcXVlc3RzKCkpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVz
dHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlw
ZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwpAQCAtMTE0OCw3ICsxMTQz
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzMTAsMjMgKzEzMDQsMTkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0
cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVy
ZUlEOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1Qx
KTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxv
YWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21NZXRhZGF0YShi
eXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCks
IHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0
ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwot
ICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEu
bV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBS
ZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcg
PSByZWdUMDsKQEAgLTEzNDIsNyArMTMzMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90
aGlzKGNvbnN0IEluc3QKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9u
UmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rp
b246OnJhcmVEYXRhVGFnKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFy
ZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1
Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKIAotICAg
IGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcENyZWF0ZVRoaXM6Om9mZnNldE9mQ2FjaGVkRnVuY3Rp
b24oKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVl
cyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlND
ZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBoYXNT
ZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzNjIsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEzNzMs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0z
MigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcgKzEzODYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIs
IHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxMzk3LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsxNDEy
LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZp
cnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZh
bHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIz
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVS
ZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE1MDksNyArMTUwNCw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFyZ3VtZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTY0LDcg
KzE1NjAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAg
ICBHUFJSZWcgZ2xvYmFsR1BSID0gR1BSUmVnOjphcmd1bWVudEdQUjA7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhw
LCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25z
dGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsK
IH0KIApAQCAtMTY2NCwxMyArMTY2MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5t
X2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7CiAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBz
aXplKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3
QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDEp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCByZWdUMCwg
c2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NzksMTQgKzE2NzYsMTMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0g
Ynl0ZWNvZGUubV9sZW5ndGg7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5
dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2Nh
dGlvblByb2ZpbGUoKSwgcmVnVDIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMiwgcmVnVDApOwogI2Vsc2UKICAgICBlbWl0TG9hZChzaXplSW5kZXgs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYK
IH0KIApAQCAtMTY5NCw4ICsxNjkwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dp
dGhfc2l6ZShjbwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sg
dGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdHlwZSBwcm9m
aWVsciBpcyBlbmFibGVkLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2Nh
dGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCkBAIC0xNzc3
LDIwICsxNzc0LDI0IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkK
ICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSBy
ZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFp
bD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNj
cmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJl
Z2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRv
d0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRj
aDJSZWcpOworICAgIHsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsg
Ly8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgorICAgICAgICBHUFJSZWcg
c2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2
bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgfQog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAg
ICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdz
KHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBK
U1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0
X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5s
aW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHVzaW5nIHRoZSBjb250cm9sIGZsb3cgcHJvZmls
ZXIuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxl
Q29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2Nh
dGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMpOwpAQCAtMTg2
MCw3ICsxODYxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwog
ICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAogICAgIGRvbmUubGlu
ayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE4ODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgx
NjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cgogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9n
ZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIH0KIApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQg
SklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QKICAgICAgICAgICAgIGNhbGwgPSBh
cHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpOwogICAgICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShj
b25zdAogICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4p
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAt
MjUwLDcgKzI1MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMK
ICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIApAQCAtNzI3LDcgKzcyNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC03MzYsNyArNzM3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9i
eV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJC
eUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC03NDYsNyArNzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9zZXR0ZXJfYnlfaQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJl
Z1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdU
Mik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwg
cmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJl
Z1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NTYsNyArNzU5LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWws
IHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTc2Niw3ICs3NzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3Bl
cnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1
dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmli
dXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMjMsNyArMTAyOCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJl
Z3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEw
OTIsNyArMTA5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnKTsKIH0KIApAQCAtMTEzNiw3ICsxMTQxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF9kaXJlY3QoYwogICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0xMTcwLDcgKzExNzUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3Mp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTExOTYs
NyArMTIwMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHNXaXRoVGhp
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOwogfQogCkBAIC0xMjM5LDcgKzEyNDQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAgLTEzMjQsNyArMTMyOSw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0x
NzM1LDYgKzE3NDAsNyBAQCB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdp
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8v
IE9PUFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29s
dmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0x
ODQxLDU5ICsxODQ3LDc3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVU
eXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlw
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVj
b2RlSW5kZXgpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVj
b2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJl
Z1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAg
ICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVl
ZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBl
LgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwor
ICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJk
aWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsK
KworICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAg
ICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoQ2xvc3VyZVZhciwg
IkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICAgICAgfTsKIAot
I2RlZmluZSBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9z
Y29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZF
X1RZUEUoUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCisgICAgICAgIGF1dG8gY2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgICAgICBy
ZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyIpOwogICAgICAgICB9OwotI3VuZGVmIFJFU09MVkVfU0NPUEVf
R0VORVJBVE9SCisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0g
W10gKFZNJikgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29w
ZVRodW5rKHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMi
KTsKKyAgICAgICAgfTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0g
cmVnVDc7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBl
XSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9z
dXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2
bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jl
c29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNv
bnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZl
VHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUg
dGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBM
TEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAg
IHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBz
bG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsK
ICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJU
KHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1Jl
dHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBy
ZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSks
IHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1w
TGlzdCBzbG93Q2FzZTsKIApAQCAtMTkwMiwyNiArMTkyNiwyNiBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlm
IChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFs
T2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RH
UFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwog
ICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVD
VF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJl
Z1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVn
VDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwg
T0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQp
KSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFk
ZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0z
MihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3Vy
ZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNj
b3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKKyAgICAg
ICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRo
KSksIHJlZ1QxKTsKIAotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVt
cCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9
IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QxKTsKICAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlz
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNl
dE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVnVDEpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAg
ICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmpp
dCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKSB7CkBAIC0xOTI5LDEyICsxOTUzLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAg
IC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxC
aW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9m
ZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAg
IG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9i
amVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAg
ICAgICAgICAgaml0Lm1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCkBAIC0xOTQ0LDExICsxOTY4LDExIEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9y
IEdsb2JhbFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAg
ICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9u
bWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwg
cmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyOgpAQCAtMTk1Niw3ICsxOTgwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFy
OgpAQCAtMTk2Niw4MyArMTk5MCw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsK
LSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAg
ICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQot
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUg
PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpy
ZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9m
ZnNldE9mUmVzb2x2ZVR5cGUoKSksIHJlZ1QwKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmso
dGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CisgICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKSB7CisgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlKTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgICAgICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7Cisg
ICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFs
TGV4aWNhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAotICAgIHJldCgpOworICAgIGpp
dC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVO
S19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5k
bGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0g
ICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VI
YW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bSgpLmdl
dENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1
bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0m
IHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BS
ZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0g
ICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcFJlc29s
dmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAj
cmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9SRVNP
TFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFU
T1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3Bf
cmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVy
YXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNl
bGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3Mu
CiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIxMTIsNiArMjA5OCw3IEBAIHZvaWQgSklUOjplbWl0R2V0
Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0yMjI1LDcgKzIyMTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCkBAIC0yMjUzLDMxICsyMjQwLDQxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEkKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNl
dCkgPT0gbV9ieXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCisgICAgYXV0
byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICByZXR1cm4gSklUOjpn
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRf
ZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVy
biBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7Cisg
ICAgfTsKKworICAgIGF1dG8gZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvciA9IFtdIChWTSYp
IHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6
bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBnZW5lcmljIik7CisgICAgfTsK
KwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IHJlZ1Q1OwogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikg
ewotICAgICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2lu
dGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5v
ZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFP
ZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFU
YWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29s
dmVUeXBlKSBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAg
ICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAg
ICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAg
ICAgICB9OwotI3VuZGVmIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0
YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0
YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwotICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGNvZGU7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikK
KyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAg
ZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdl
dENUSVN0dWIoZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWRO
ZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8
UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAg
Ly8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0
aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KQEAgLTIyODYsNzcgKzIyODMsNjggQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BH
ZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIg
PSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVM
RUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwog
Ci0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUo
KSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBqaXQudGFn
UmV0dXJuQWRkcmVzcygpOworCisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRk
UHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAg
IGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwg
aW50MzJfdCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCkgewotICAgICAgICBsb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAg
ICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hU
ZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1
Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFw
cGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
ID0gWyZdIChHUFJSZWcgc2NvcGVHUFIpIHsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAg
ICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKICAgICB9OwogCiAgICAgYXV0
byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldh
dGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxP
YmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CiAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0Ojpv
ZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9Owog
ICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJh
bmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBv
cGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAg
IGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFu
ZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9w
ZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCiAgICAg
YXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3Bl
cmFuZEdQUikgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0
ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAg
ICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
KSwgcmVnVDApOworICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5k
R1BSKTsKKyAgICAgICAgaml0LmFkZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQUik7CisgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CiAgICAgfTsKIAotICAgIGF1dG8gZW1pdENvZGUg
PSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJh
bmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkg
ewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JK
RUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sg
Y292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3Ig
YW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29w
ZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJl
ZyByZXN1bHQgPSByZWdUMDsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0g
cmVnVDE7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKIAot
ICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4g
SnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAgICAgICAg
ICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7
CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAg
ICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CiAgICAg
ICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9w
ZXJhbmQoKSksIG9mZnNldCk7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAg
ICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAg
ICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAg
ICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBKdW1w
IGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBU
cnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQu
YWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAg
ICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gp
OwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRv
UHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRj
aCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICAg
ICAgICAgIGppdC5uZWczMihvZmZzZXQpOworICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRv
UHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KHNj
cmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgpAQCAtMjM2NCwyMSArMjM1MiwxOSBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwg
cmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAg
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0g
ICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAg
ICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsK
ICAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAg
ICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM4OCw3OSArMjM3NCw1NiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAg
c3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNU
X09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVz
b2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0g
ICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwg
dHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJl
c29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAg
ZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0
YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwgcmVnVDApOworICAgICAgICBqaXQuYW5kMzIo
VHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29s
dmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBK
dW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0
Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGpp
dC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmpp
dCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7
CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsK
IAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXIubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0
cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAg
ICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5qdW1wKCkpOwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwg
ZmFsc2UpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAg
ICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9
PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRk
cmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpKSk7CiAKLSAgICBy
ZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlz
LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRv
IHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3Bl
R2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25M
YWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlv
bkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5F
X0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5
cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICgh
dGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAg
IHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGpp
dC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3Bf
Z2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xW
RV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dF
VF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAg
ICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsg
d2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQpAQCAtMjUxOCw4NiArMjQ4MSw3
OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsK
LX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRk
cmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5k
aXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAg
IGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCBy
ZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQ
dXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIo
cmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlh
YmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KLQogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Nj
b3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZv
IGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUq
KiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRw
dHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0
YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBl
IHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBb
Jl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5
cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNr
IGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9y
IGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2Nv
cGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICAv
LyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2Fj
aGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAg
ICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3Ig
dGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdU
MCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAg
ICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAg
ICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpvZmZzZXRP
Zk9wZXJhbmQoKSwgcmVnVDEpOwogICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAg
ICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJh
c2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAt
IDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgLy8gT09QUzogd291
bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgR1BSUmVncworICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAg
ICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2Ug
R2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2Nr
KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7CiAgICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0g
ICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisKKyAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0
aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYm
IChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBw
cm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5k
U2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAg
ICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dh
dGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9p
bnRTZXQoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChy
ZWdUMSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qx
KTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAg
ICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sg
YSBHUFJSZWcgZm9yIHZhbHVlLgorICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFu
ZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBs
b2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCks
IHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOwor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAg
c3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgU2NhbGVFaWdodCwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKworICAgICAgICAgICAgLy8g
T09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcg
Zm9yIG93bmVyL3ZhbHVlLgogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IE1vZHVsZVZhcjoKQEAgLTI2MTEsNTggKzI1NjcsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAg
ICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdl
IGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5k
aW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBl
bWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwot
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNl
ZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2Ug
Y2FuIGNvbXBpbGUgdGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBz
aW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBh
IENsb3N1cmVWYXIsCisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJ
ZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENs
b3N1cmVWYXIKKyAgICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZp
cmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRv
ZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShD
bG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVk
Q2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBl
bHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dElu
Zm8oKSwgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1
bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3Bl
cnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
LmxpbmsodGhpcyk7CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUo
R2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBu
b3RHbG9iYWxWYXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwog
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFs
c2UpOwotICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2NzEsMTMgKzI2MjEsMTYgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRH
ZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVU
eXBlKCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAg
ICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwg
bGlua2VkIENvZGVCbG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUg
TW9kdWxlVmFyLgogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3By
b3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9
IGVsc2UgewogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Nj
b3BlLCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTI3NDgsNyArMjcwMSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCkBAIC0yODA2LDcgKzI3NTksNiBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKQEAg
LTI4MTQsNyArMjc2Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChj
b24KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRl
cm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yODM2LDcg
KzI3ODgsNiBAQCB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CkBA
IC0yODUyLDcgKzI4MDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29u
c3QgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMgdGhlIG1v
c3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2UgaXQgaWYg
d2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51bWVyYXRv
ck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkg
eworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2VudW1l
cmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1v
ZGUpIHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAgICAgICAg
b3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGVudW1l
cmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6bW9kZVNldE9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7
CkBAIC0yOTY1LDcgKzI5MTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9i
eV92YWwoCiAKICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjk3NCwxMCArMjkyNSw5IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5
VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4o
KSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBT
bG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3Bl
cnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNv
ZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgor
dm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1Bh
dGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9y
OwpAQCAtMjk4Niw3ICsyOTM2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJv
cGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRh
ZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRpb25NZXRhZGF0YSgpLCBy
ZWdUMSk7CisgICAgb3IzMihyZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVn
VDEsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRpb25NZXRh
ZGF0YSgpKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2Rl
KSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9u
IDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1MzgsNyArMTUzOCw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0m
IHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5
KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsK
KyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBD
YWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAgIHJl
dmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQkocmV2aXNpb24gMjgxNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTIs
MTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAK
IG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikK
ICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFj
cm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjpt
X2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAg
ICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhd
LCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9wKG9wY29k
ZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwgc3JjRHN0
IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAgICAgICBzdG9y
ZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9m
aWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bj
b2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0Y2goKQog
CiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwg
bWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQot
ICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVu
YXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0YSh0NSwg
dDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShz
aXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90
SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDIK
LSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5
QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAgICByZXR1
cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEsIExvd2Vz
dFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1cGRhdGVB
cml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9m
aWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1cm4odDEs
IHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkKIAogbWFj
cm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJP
cGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRh
dGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3Bh
dGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkK
LSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAg
ICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAgICAgICAg
Z2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9t
U3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWco
c2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAub3AxTm90SW50
CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAgICBhcml0aFBy
b2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZ2V0
KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0MSwgdDAs
IC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwxMiBAQCBt
YWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJpYSB0Miwg
TG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5vdEludE9w
MkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRo
UHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAg
ICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3Ax
Tm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAgICBhcml0
aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlB
cml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0
NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAgICAgICAg
IGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5hcnlPcEN1
c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZp
bml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90LgogICAg
ICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cKLSAg
ICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0
NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEK
ICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlz
aW9uIDI4MTYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU2LDEwICsxMDU2LDYgQEAgc3RyaWN0
RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVO
YW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBl
bmQKLQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwg
OF0sIHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA2NSw3IEBAIG1h
Y3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9w
ZXJhdGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0
b3JlcSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFBy
b2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
QXJpdGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93
OgpAQCAtMTEzNCwxMSArMTEzMCw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9w
X25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
cmV0dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9y
aCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0
MikKQEAgLTExNDYsMTIgKzExMzcsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUs
IE9wTmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBu
ZWdpIHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJp
dGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0
aFByb2ZpbGVJbnQsIHQxLCB0NCkKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAg
ICAgYnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAw
MDAwMDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikK
KyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVy
LCB0MSwgdDQpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCAr
MTE1NSw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBs
bGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEo
dDUsIHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0
eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJp
dGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3Jocywg
dDApCiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUoc2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY0LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0
b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBp
bnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJv
ZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQ0KQogICAgICAgICBkaXNw
YXRjaCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3NCwxMCBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJl
clRhZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEs
IGZ0MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVy
TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90
SW50T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAg
ICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVt
YmVySW50LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVh
ZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA2LDcgKzExOTMsNyBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFu
ZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAg
ICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwot
ICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmlu
YXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwg
dDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAg
ICAgICAgIGZxMmQgdDEsIGZ0MQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgxNjM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC0yNDk4LDYgKzI0OTgsMTcgQEAgbWFjcm8gbm90U3VwcG9ydGVkKCkKICAgICBl
bmQKIGVuZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
dHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgVW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAg
b3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKwogLy8gRklY
TUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0X1dJTiBjb25kaXRpb24gaGVyZSwgc2lu
Y2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUgZmFsc2Ugb24gV2luZG93cwogLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNgogaWYgV0VCQVNTRU1C
TFkgYW5kIG5vdCBYODZfNjRfV0lOCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MTYzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19w
YXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZv
clVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3Vs
dCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0g
bWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUg
PSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJh
bmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436692</attachid>
            <date>2021-08-27 16:58:07 -0700</date>
            <delta_ts>2021-08-29 13:11:07 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>191245</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IHVubGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxp
bmtlZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRp
b24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
aXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0g
ICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRo
U3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhT
dGFydCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlz
IGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQg
dG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0
aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJz
OjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAg
IHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MjQsNiArNDI0LDEzIEBAIGlubGluZSBDb2RlT3JpZ2lu
IGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBz
byB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjYsNiArNDY2
LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAg
YnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENv
ZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAg
ICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENv
ZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAg
ICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVj
dGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1
Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4LDE0ICs1NDEsMTQgQEAgYm9vbCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJv
bWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9w
QWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBM
SU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMp
Ci0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVs
KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAg
IExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJ
VEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC0zMDc5LDcgKzMwOTIs
NyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFC
TEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBK
SVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJh
bWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMyOTUsMTMgKzMzMDgsMTMg
QEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRj
aCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZw
Yy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJl
dHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAg
Y2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRo
aXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMzMxMywxMSArMzMyNiwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29k
ZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAg
IGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0
ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAg
ICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0
aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVj
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFz
PE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDE2ICsyMzIsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0
OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9v
bCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRoZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJu
IHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFuZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAg
ICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFu
dChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+
KG1fbnVtVmFycyk7CkBAIC0yNjYsNiArMjU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNT
dGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAg
ICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBo
ZXJlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOwogCkBAIC00NzIsNiArNDYzLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5h
bWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFy
YW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKQEAgLTc5Nyw2ICs3ODksNyBAQCBwdWJs
aWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2Rl
YnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsg
cmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25l
ZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51
bUJyZWFrcG9pbnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODUsNiAr
Mzg1LDggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKAogICAgIHJl
dHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCisvLyBPT1BTOiBNYWtlIHRoaXMgc3R1ZmYgd29y
ayB3aXRoIGRhdGEgaWNzIHRvIG5vdCBhc3N1bWUgaW5saW5lIGFjY2Vzcy4KKwogdm9pZCBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQpCiB7CiAgICAgaWYgKGNvZGVC
bG9jay0+dXNlRGF0YUlDKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMwLDYgKzQzMCwyMiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3Zv
aWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyhVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvKQoreworICAg
IGFjY2Vzc1R5cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1
bmxpbmtlZFN0dWJJbmZvLnN0YXJ0OyAvLyBPT1BTOiBkbyB3ZSBuZWVkIGEgc3RhcnQgZm9yIGRh
dGEgSUNzPworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9u
OworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhT
dGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KHVubGlua2Vk
U3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5s
aW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsKKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkg
eworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVj
a0NvbnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtNzgsNiArNzgsOCBAQCBlbnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CiAgICAg
U3RyaW5nTGVuZ3RoCiB9OwogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKKwog
Y2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cnVj
dHVyZVN0dWJJbmZvKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTk4LDYgKzEw
MCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7
CiAKKyAgICB2b2lkIGluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvJik7CisKICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsK
IAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUg
ZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLApAQCAtNDQ3LDYgKzQ1MSwx
NSBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQog
CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAvLyBPT1BTOiBE
byB3ZSBuZWVkIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRT
dHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0
aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFi
bGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAK
IGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTcxOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzUsNiArMTc1LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4ZWRW
ZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJl
dHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29u
c3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdl
dCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYg
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIwOCwxNCBAQCBwdWJsaWM6
CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVy
biBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBj
b25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigp
OworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0
aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5z
dHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25z
QmVnaW47CisgICAgfQogCiAgICAgdW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1WYXJzOyB9CkBAIC00MTAsNiArNDE5LDkgQEAgcHJpdmF0ZToKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3M7CiAKKyAg
ICAvLyBPT1BTOiBiaW5kIGEgYmV0dGVyIHBsYWNlIHRvIHN0b3JlIHRoaXMgc3R1ZmY/CisgICAg
VmVjdG9yPEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9iaW5hcnlBcml0aFByb2ZpbGVzOworICAgIFZl
Y3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4gbV91bmFyeUFyaXRoUHJvZmlsZXM7CiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CkBAIC00NTUs
NiArNDY3LDI4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1w
T2Zmc2V0KGluc3RydWN0aW9uLm9mZnNldCgpKTsKICAgICB9CisgICAgaW50IG91dE9mTGluZUp1
bXBPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQgPSB0aGlzLT5ieXRlY29kZU9mZnNldChwYyk7CisgICAgICAgIHJldHVy
biBvdXRPZkxpbmVKdW1wT2Zmc2V0KG9mZnNldCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRk
QmluYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1f
YmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxl
cy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAg
ICAgbV91bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGJp
bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX2JpbmFyeUFyaXRoUHJvZmls
ZXNbaV07IH0KKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgdW5hcnlBcml0aFByb2ZpbGUodW5zaWdu
ZWQgaSkgeyByZXR1cm4gbV91bmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KIAogcHJpdmF0ZToKICAg
ICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06
Ok9mZnNldCwgaW50PjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAxLDkgKzEwMSwxOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
c19vZmZzZXQxNlRhYmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0gdWlu
dDMyX3Q7CiAgICAgdXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsKIAorICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNldEluTWV0YWRhdGFUYWJsZShjb25z
dCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2lzRmluYWxpemVkKTsK
KyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9pczMyQml0ID8gb2Zmc2V0VGFi
bGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUxNigpW09wY29kZTo6b3Bjb2Rl
SURdOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YoT3Bjb2RlOjpNZXRh
ZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgc19vZmZzZXRUYWJsZUVudHJpZXMgPSBOVU1CRVJfT0ZfQllURUNPREVfV0lU
SF9NRVRBREFUQSArIDE7IC8vIG9uZSBleHRyYSBlbnRyeSBmb3IgdGhlICJlbmQiIG9mZnNldDsK
IAogICAgIC8vIE5vdCB0byBicmVhayBhbGlnbm1lbnQgb2YgMzJiaXQgb2Zmc2V0IHRhYmxlLCB3
ZSByb3VuZCB1cCBzaXplIHdpdGggc2l6ZW9mKE9mZnNldDMyKS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MTcxOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQCB0ZW1wbGF0ZTx1bnNpZ25lZCBudW1iZXJPZkJ1Y2tl
dHNBcmd1bWVuCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1bWVudDsKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzID0gMTsK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9IG51bWJlck9m
QnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3RhbE51bWJlck9m
QnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzOwogICAg
IAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQpAQCAtMTM0LDcgKzEzMyw3IEBAIHN0cnVjdCBWYWx1
ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247CiAg
ICAgfQotICAgIAorCiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNrZXRzW3RvdGFsTnVtYmVyT2ZC
dWNrZXRzXTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbiB7IFNwZWNOb25lIH07
CkBAIC0xNTYsNiArMTU1LDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1
Y2tldAogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZhbHVlUHJvZmlsZVdpdGhMb2dO
dW1iZXJPZkJ1Y2tldHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgpIDogVmFsdWVQcm9maWxlV2l0
aExvZ051bWJlck9mQnVja2V0czwwPigpIHsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1f
YnVja2V0c1swXSk7IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5OCw3ICsxNTk4LDcgQEAgUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRVbmFyeQogICAgICAgICBlbWl0VW5hcnlPcDxP
cE5vdD4oZHN0LCBzcmMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAg
ICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUpOworICAgICAgICBPcE5l
Z2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJp
dGhQcm9maWxlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIG9wX2JpdG5vdDoKICAgICAg
ICAgZW1pdFVuYXJ5T3A8T3BCaXRub3Q+KGRzdCwgc3JjKTsKQEAgLTE2OTYsMTMgKzE2OTYsMTMg
QEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUeXBlTwogCiBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAg
T3BJbmM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNEc3Qs
IG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0
OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYyhSZWdpc3RlcklE
KiBzcmNEc3QpCiB7Ci0gICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcERlYzo6
ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsK
ICAgICByZXR1cm4gc3JjRHN0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODE3
MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIFJlZ2lzdGVySUQqPgogICAgICAgICBlbWl0QmluYXJ5T3AoUmVnaXN0ZXJJ
RCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBzcmMyLCBPcGVyYW5kVHlwZXMg
dHlwZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwg
c3JjMSwgc3JjMiwgdHlwZXMpOworICAgICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywgZHN0
LCBzcmMxLCBzcmMyLCB0eXBlcywgbV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgp
KTsKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODksNyArODg5LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMg
PSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52
YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBz
bG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9h
ZEdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAg
ICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAg
ICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVw
YXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODk2LDcgKzg5Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAo
aXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpV
c2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2Fs
bEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3NDcsNyArMTQ3NDcsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBzY29wZVJl
ZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
c2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIG1faml0LmNvZGVCbG9jaygpLCBj
YWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFk
b3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CiAgICAgbm9SZXN1bHQobm9k
ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzNTUsNyArMTAzNTUsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0g
aml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BS
SW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5r
SW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQ
UlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAg
IGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwg
R1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENh
bGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwog
ICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA2OTgsNyArMTA2OTgsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFp
bENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENh
bGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xv
d1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6
cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2Fs
bFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDk3OSw3ICsxMDk3OSw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0
aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAg
ICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52
YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
aml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5l
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJl
cGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjgx
NzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29y
a2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDIyIEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0
cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252ZXJ0
RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgs
IGZpZWxkcywgZ2VuZXJhdGVPZmZzZXRPZikKICAgICAgICAgICAgIGZpZWxkcy5tYXAgZG8gfGZp
ZWxkLCB0eXBlfAogICAgICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAotICAgICAg
ICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCAr
ICcgICAgJywgdHlwZSl9XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJl
Zml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUsIGZhbHNl
KX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307IgorICAgICAgICAgICAg
ICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9ICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgorICAgICAgICAgICAg
ICAgICAgICBpZiBnZW5lcmF0ZU9mZnNldE9mCisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gcmVzdWx0ICsgIlxuIiArICJzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5hbWVb
MF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkgeyByZXR1cm4gT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdAogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpv
aW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygi
ICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAg
ICAgICIsIEBmaWVsZHMsIHRydWUpCiAKICAgICAgICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYg
QGluaXRpYWxpemVycyAmJiAobm90IEBpbml0aWFsaXplcnMuZW1wdHk/KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgx
NzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OTgsOCArNjk4LDEzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpy
ZXN0b3JlQ2FsbGVlU2F2ZXMKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2Fs
bChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5m
bykKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAg
IGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworfQor
Cit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2Jh
bE9iamVjdChWTSYgdm0sIENhbGxMaW5rSW5mbyogaW5mbykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgp
OwogICAgIGFkZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAg
ICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzE4
LDYgKzE3MTgsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxD
YWxsKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRW
aXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsK
ICAgICAKICAgICB2b2lkIG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAgIHZvaWQgcmVj
bGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0
Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuUHJvbG8KICAgICBzdG9y
ZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12b2lkIENDYWxsSGVscGVyczo6bG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQ
YWNrZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tl
bjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOwotICAgIHN0b3JlVmFsdWUo
dGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29w
ZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxv
Y2spKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgY2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRv
d0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRj
aDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAgICBTaGFkb3dDaGlja2VuKiBzaGFk
b3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQw
LDE4IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0
aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Ag
b2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxv
Z1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcg
c2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDb2RlQmxvY2tUeXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BS
UmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29k
ZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKKyAgICB7
CisgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUp
KSk7CisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0
Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOworICAgICAgICBzdG9yZVZhbHVlKHRoaXNS
ZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgdGhpc1ZhbHVlKSkpOworICAgICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3Bl
KSkpOworICAgICAgICBzdG9yZVB0cihjb2RlQmxvY2ssIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7CisgICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxT
aXRlSW5kZXgpKSk7CisgICAgfQorCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8g
dGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQg
ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJl
ZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBAIEpJVDo6SklU
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOwogfQogCiBK
SVQ6On5KSVQoKQpAQCAtMTEzLDcgKzExNCw3IEBAIHZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUo
V2F0Y2hwb2ludFNldCoKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1Nl
dCkKK3ZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9T
ZXQpCiB7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVy
VG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0lu
dmFsaWRhdGVkKSkpOwogfQpAQCAtMTI5LDcgKzEzMCw3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFj
a1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Qw
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CkBAIC02NzYs
MTcgKzY3NywxNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiB2b2lk
IEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9j
ay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgLy8gT09QUzogTWF5YmUgdGhpcyBzaG91bGQgYmUg
ZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJsb2NrPworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxl
dmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dpdGNo
IChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAgICBtX2NhbkJl
T3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBm
YWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21waWxl
QW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgbV9j
YW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC03NDYsNyArNzQ2
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogCiAgICAgTGFi
ZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAotICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGludCBm
cmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXplID0gLWZyYW1l
VG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVUb3BPZmZzZXQpLCBjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDEpOwogICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CkBAIC03
NjIsNyArNzYyLDEwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4K
IAogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKICAg
ICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX2Nv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkg
PiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVk
VmVjdG9yOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlZ1QyKTsKKwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25z
dHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0
bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24n
dCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCkBAIC03NzgsNiArNzgx
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwog
I2VuZGlmCiAgICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9j
ay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAg
ICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50
ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KQEAgLTkxOSwxMCArOTIzLDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMsIHBhdGNoQnVmZmVyKTsKIAogICAgIGZv
ciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAg
ICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwot
ICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0
KSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
Y29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5r
SW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAg
ICAgIGluZm8uZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKICAgICB7CkBA
IC05NTMsNyArOTU1LDEwIEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgIkJhc2VsaW5lIEpJ
VCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2ppdENvZGUgPSBh
ZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IEJhc2VsaW5l
SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENvZGUtPm1fdW5s
aW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2ppdENvZGUtPm1f
ZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOwogCiAgICAg
aWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRl
ZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0
YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVt
b3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwpAQCAtOTY4LDYgKzk3Myw4IEBAIENvbXBpbGF0
aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVu
TWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKKyAgICBtX2ppdENvZGUtPmFkb3B0TWF0
aElDcyhtX21hdGhJQ3MpOworCiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9G
aXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwpAQCAtMTA0Miwx
NCArMTA0OSwxNCBAQCB2b2lkIEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAg
ICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwg
IlByZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsK
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCkpID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVy
cygpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkp
KTsKIAogICAgIHJldHVybiByb3VuZExvY2FsUmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9m
ZnNldChjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9CiAKLWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZv
cihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihV
bmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1
MCwzMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAgIGNsYXNzIEpJVENvbnN0YW50UG9vbCB7
CisgICAgcHVibGljOgorICAgICAgICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisgICAg
ICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICAgICAgR2xvYmFsT2JqZWN0
LAorICAgICAgICAgICAgQ2FsbExpbmtJbmZvLAorICAgICAgICAgICAgU3RydWN0dXJlU3R1Yklu
Zm8sCisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IFZhbHVlIHsKKyAgICAgICAgICAgIFR5
cGUgdHlwZTsKKyAgICAgICAgICAgIFBhY2tlZFB0cjx2b2lkKj4gcGF5bG9hZDsKKyAgICAgICAg
fTsKKworICAgICAgICBDb25zdGFudCBhZGQoVHlwZSB0eXBlLCBQYWNrZWRQdHI8dm9pZCo+IHBh
eWxvYWQgPSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQg
PSBtX2NvbnN0YW50cy5zaXplKCk7CisgICAgICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoVmFs
dWUgeyB0eXBlLCBwYXlsb2FkIH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50czsK
KyAgICB9OworCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZTsKQEAgLTE0OSw5ICsxNzUsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICB9OwogCiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhTdGFydDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIGRvbmVMb2NhdGlvbjsKLSAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87
CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAg
ICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKICAg
ICB9OwogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVz
c1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CkBA
IC0xODgsOCArMjE0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gSklU
KHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOwog
ICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZv
cihDb2RlQmxvY2sqKTsKLSAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Q29kZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRG
b3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJP
ZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBjb21waWxlVGltZVN0YXRzKCk7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTZWNvbmRzIHRvdGFsQ29tcGlsZVRpbWUo
KTsKQEAgLTIyMyw2ICsyNDksMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRp
ZgogCisgICAgICAgIHRlbXBsYXRlIDxCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkUHRyRnJv
bU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAg
ICAgICB0ZW1wbGF0ZSA8Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFkYXRh
KGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1w
bGF0ZSA8Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDxCeXRl
Y29kZT4KKyAgICAgICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0ZWNv
ZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8Qnl0ZWNvZGU+CisgICAg
ICAgIHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwg
c2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNp
Z25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmpl
Y3QoR1BSUmVnKTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRvSGFu
ZGxlcikKICAgICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGp1
bXBUb0hhbmRsZXIpOwpAQCAtMjU4LDE2ICszMDIsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2Fs
bF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAg
ICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNv
ZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZv
aWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0g
b3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwog
ICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9w
OjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2
b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAg
ICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJ
bmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVU
YWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsK
ICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI5MSwxMCArMzM1LDEwIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUg
dG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAg
ICAgICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoTWV0YWRhdGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOwor
ICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJS
ZWcpOworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUm
LCBKU1ZhbHVlUmVncyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lk
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGNvbnN0IEJ5dGVjb2RlJiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShN
ZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKQEAgLTU5Miw3ICs2MzYsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9t
b2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CkBAIC02NDUsNyArNjg4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgdm9p
ZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVy
YW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOwotICAg
ICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsKKyAgICAgICAg
dm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogICAg
ICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xv
YmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9z
dXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpAQCAtNjU0LDYgKzY5Nyw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJl
Z2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgICAgICBib29sIGlzS25vd25D
ZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5k
KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVh
bFJlZ2lzdGVyKTsKQEAgLTY5NSwyNiArNzM5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
UmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7CiAgICAgICAg
IH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlw
ZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAg
ICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9S
KQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3Bl
VGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KLSAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1vZHVsZVZhciBiZWNh
dXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4gdXNlIGEgdGh1bmsu
Ci0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3ZSBkb24ndCB1c2Ug
dGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAgICAgICAgICAgcmV0dXJuICEo
cmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVs
ZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJB
VE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9y
KFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX1JFU09MVkVfU0NP
UEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQot
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BS
ZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJh
dGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBj
aGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxS
ZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CiAKICAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRv
cihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CkBAIC05MTgsMTEgKzk0NCw5IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVP
cHRpbWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2Fu
QmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVk
OyB9CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxk
RW1pdFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7
IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxl
ciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGlj
aCBjYXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFBy
b2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC05MzAsMTMgKzk1NCw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAg
ICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7Ci0gICAgICAgIAotICAgICAg
ICAvLyBJZiB5b3UgbmVlZCB0byBjaGVjayBhIHZhbHVlIGZyb20gdGhlIG1ldGFkYXRhIHRhYmxl
IGFuZCB5b3UgbmVlZCBpdCB0bwotICAgICAgICAvLyBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUg
ZmFzdCBhbmQgc2xvdyBwYXRoLCB0aGVuIHlvdSB3YW50IHRvIHVzZSB0aGlzLgotICAgICAgICAv
LyBJdCB3aWxsIGdpdmUgdGhlIHNsb3cgcGF0aCB0aGUgc2FtZSB2YWx1ZSByZWFkIGJ5IHRoZSBm
YXN0IHBhdGguCi0gICAgICAgIEdldFB1dEluZm8gY29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2Nv
cGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLSAgICAgICAgQmluYXJ5
QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKICAgICAgICAgSW50
ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKQEAgLTk2Myw5ICs5ODAsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOwogICAgICAg
ICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCi0gICAgICAgIEhhc2hNYXA8dW5z
aWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwotICAgICAgICBIYXNoTWFwPHVp
bnQ2NF90LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQcm9maWxlczsKLQogICAg
ICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExpc3QgbV9leGNl
cHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQpAQCAtOTk5LDExICsxMDEzLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBI
YXNoTWFwPGNvbnN0IEluc3RydWN0aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0
ZT4+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAogICAgICAgICBib29s
IG1fY2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5l
ZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2Rl
SW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgICAgIFJlZlB0cjxEaXJl
Y3RKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgICAgIE1hdGhJQ0hvbGRlciBtX21hdGhJQ3M7Cisg
ICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1faml0Q29kZTsKKworICAgICAgICBKSVRD
b25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5r
ZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsK
KyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5m
b3M7CisKKyAgICAgICAgR1BSUmVnIG1fbWV0YWRhdGFHUFI7CisgICAgICAgIEdQUlJlZyBtX2Nv
bnN0YW50c0dQUjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjgxNzE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7Ci0gICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzIwLDcgKzMyMSw4IEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkK
ICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMik7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDMsIHJl
Z1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZl
cnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJI
UyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQg
PyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03MTcs
OCArNzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cgogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJ
Qyhhcml0aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAm
bV91bmxpbmtlZENvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5lZ2F0ZT4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUTmVnSUMqIG5lZ2F0ZUlD
ID0gbV9tYXRoSUNzLmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlv
blRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG5lZ2F0ZUlDKTsKICAgICAvLyBGSVhN
RTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUs
IHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNGYXN0PE9w
TmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0
ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CkBAIC04OTksOCArOTAzLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
QWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJ
QyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5i
aW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tX3Byb2Zp
bGVJbmRleCk7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9tYXRoSUNzLmFkZEpJVEFkZElDKGFy
aXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQp
OwogfQpAQCAtOTQ1LDEwICs5NDksMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVu
YXJ5TWF0aElDPAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJh
dGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0
ZWRJbmxpbmVDb2RlKSB7CiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0
Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
c3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFy
aXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7CisgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNo
R1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDE1LDEwICsxMDIwLDExIEBAIHZv
aWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICAgICAgZWxzZSBpZiAo
cmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByaWdodFJlZ3MpOwogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
c2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2Zp
bGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRj
aEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBs
ZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCBy
aWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwNTUsMTMgKzEwNjEsMTQgQEAgdm9pZCBK
SVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogI2VuZGlmCiAKICAgICBVbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVt
aXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3Vs
ZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklU
T3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3Rl
ZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklU
T3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJl
Z1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdz
LCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVk
SW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJh
dGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3Ms
IFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAg
ICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExMjAsMTMgKzExMjcsMTQgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogI2VuZGlmCiAKICAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
aG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklU
T3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMp
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9m
aWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlv
bl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZElt
bVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9H
SkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmln
aHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RB
VFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTY2LDcgKzExNzQsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgaWYgKHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAg
ICBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxl
KGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubV9wcm9maWxlSW5kZXgpOwogCiAgICAg
U25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3Qo
KSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5
cGVzLnNlY29uZCgpKTsKQEAgLTEyMTEsOCArMTIxOSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rp
dihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2Rl
QmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxl
KGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkpOworICAgIEpJVE11bElDKiBtdWxJQyA9
IG1fbWF0aElDcy5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25U
b01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zh
c3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KQEAgLTEyMjcsOCArMTIzNSw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
c3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1
Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMq
IHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+Ymlu
YXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkpOworICAgIEpJ
VFN1YklDKiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwogICAg
IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAg
ICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJh
dGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDI4MTcxOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3Qg
T3BDYWxsRXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEp
OwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJh
bWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAK
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdU
Mik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwpAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQgSklU
Ojpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKIAogICAgIGVtaXRMb2FkKGNhbGxlZSwg
cmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNv
ZGUpOwpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IElu
c3RydWN0aW8KICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
IAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM0MSw3ICszNDEsNiBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgfQogCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgaWYgKG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM1NCw3ICszNTMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2Vk
Q29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1p
dFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3Bv
aW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDcgKzUzLDcgQEAg
c3RkOjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYm
IE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9wOjpvcGNvZGVJ
RCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHVuc2ln
bmVkIGNoZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwpAQCAtNzgsNyArNzgs
NyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFy
Z3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxs
TGlua0luZm9Db25zdGFudCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0
ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVj
b2RlLm1fYXJndW1lbnRzOwpAQCAtMTA2LDkgKzEwNiwxMCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiBieXRlY29kCiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3Vu
dC4KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5
bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJy
YW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFk
ZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25zdGFu
dChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSks
IHJlZ1QzKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJl
Z1QyKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9m
ZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dlc3Qu
bGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywxNiAr
MTI4LDE2IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxhdGU8
PgogYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkK
IHsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAg
IHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNh
bGxlckZyYW1lT2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdp
c3RlciwgYXJndW1lbnRHUFIxKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRk
cmVzcyhhcmd1bWVudEdQUjEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91
bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwg
cmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDApKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJldHVyblZhbHVlR1BSKSk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29k
ZSk7CiAKQEAgLTE0OCw3ICsxNDksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGlu
Zm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQo
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExp
bmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNv
ZGUubV9hcmd2OwpAQCAtMTU2LDQzICsxNTcsNDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQg
KiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXRWaXJ0dWFs
Q2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0
TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBpbmZvKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRl
Y29kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6OmNvbXBpbGVUYWls
Q2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQoteworYm9vbCBKSVQ6OmNv
bXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQs
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRl
bXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0
ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiti
b29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxp
bmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0gICAgQ2FsbEZy
YW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJn
cyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9
IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9
CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9
IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZsZURhdGEtPm51
bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEtPm51bWJlclRh
Z1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAgc2h1ZmZsZURhdGEt
Pm51bUxvY2FscyA9CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUo
Ynl0ZWNvZGUubV9hcmdjKTsKKyAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUoYnl0ZWNvZGUu
bV9hcmdjKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyAr
K2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgIHNodWZmbGVEYXRh
LT5hcmdzW2ldID0KICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFj
aygKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1Ro
aXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsK
ICAgICB9Ci0gICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAgVmFsdWVSZWNvdmVyeTo6
aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVT
YXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRh
KHNodWZmbGVEYXRhKTsKKyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6
aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAgc2h1ZmZsZURhdGEtPnNldHVwQ2FsbGVl
U2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7CiAKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBp
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhp
cywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRDb25zdGFudChj
YWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENh
bGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdU
MiwgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0YSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhz
KTsKKworICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8tPmZyYW1lU2h1
ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9uZUxvY2F0aW9u
ID0gbGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhd
LmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIxOCwzMiArMjIyLDQwIEBA
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxs
ZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVz
dG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0gICAgQ2FsbExp
bmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFs
KQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZv
KTsKKworICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOworICAgIGlmIChv
cGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8q
IGluZm8gPSBtX3VubGlua2VkQ2FsbHMuYWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJ
bmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZv
KTsKKworICAgICAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxs
TGlua0luZm9JbmRleCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2Fs
bENvbXBpbGF0aW9uSW5mbygpKTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS51bmxpbmtlZENhbGxMaW5rSW5mbyA9IGluZm87CisgICAgICAgIG1fY2Fs
bENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQg
PSBpbmZvQ29uc3RhbnQ7CisKKyAgICB9CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUs
IGluZm9Db25zdGFudCk7CiAKICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICBh
dXRvIGJ5dGVjb2RlSW5kZXggPSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlv
bik7Ci0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUlu
ZGV4KS5iaXRzKCk7CisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlv
bkJpdHMpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
KyBUYWdPZmZzZXQpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdU
MCk7IC8vIHJlZ1QwIGhvbGRzIGNhbGxlZS4KICAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAKICAg
ICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
QVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgp
OwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlE
KSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0
aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhd
LmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2Rl
LCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCisgICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRl
Y29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgsIGluZm9Db25zdGFudCkpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIGxvYWRDb25zdGFudChpbmZvQ29uc3RhbnQsIHJlZ1QyKTsKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpV
c2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0lu
Zm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7
CisgICAgICAgICAgICAvLyBPT1BTCiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKICAgICAgICAg
fSk7CkBAIC0yNTMsMTMgKzI2NSwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJ
bnN0cnVjdGlvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9
IGluZm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6WWVzKTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdERh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9uZUxvY2F0aW9u
ID0gbGFiZWwoKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRp
b247CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxp
Z25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0yNzMsMjAg
KzI4NSwyMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOwogCi0gICAgaWYg
KG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFy
YXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCisgICAg
aWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsK
KyAgICAgICAgLy8gT09QUwogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAg
fQogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNh
bGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CisgICAgQ2FsbExpbmtJbmZv
OjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlzLCByZWdUMik7CiAKICAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdz
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewogICAgICAg
ICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CkBAIC00MDQsNyArNDE4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbgogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9uZXh0KTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CkBAIC00OTMsNyArNTA3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVj
a3BvaW50KCk7CiAgICAgfQpAQCAtNTEyLDcgKzUyNiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0
ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHZhbHVl
R1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IHZhbHVlR1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OSwxMCAr
MTU5LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGpp
dFR5cGUpCiAgICAgeworICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlw
ZSkpIC8vIE9PUFMKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAoIU9wdGlv
bnM6OnVzZURhdGFJQygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
SklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpOwog
ICAgIH0KIApAQCAtMjQ4LDYgKzI0OCw0MSBAQCBwcm90ZWN0ZWQ6CiAgICAgQ29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPiBtX3JlZjsKIH07CiAKK2NsYXNzIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6Cisg
ICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcikKKyAgICB7CisgICAgICAg
IG1fYWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2FkZElDcyk7CisgICAgICAgIG1fbXVsSUNzID0g
V1RGTW92ZShvdGhlci5tX211bElDcyk7CisgICAgICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhl
ci5tX25lZ0lDcyk7CisgICAgICAgIG1fc3ViSUNzID0gV1RGTW92ZShvdGhlci5tX3N1YklDcyk7
CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlKSB7IHJldHVybiBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorICAg
IEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkg
eyByZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKyAgICBKSVRTdWJJQyogYWRk
SklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3Vi
SUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0aFBy
b2ZpbGUpOyB9CisKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
ID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRk
R2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5
QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2
YWx1ZT46OnR5cGU+CisgICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUq
IHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4K
KyAgICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJl
dHVybiBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8
R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUU3ViSUMq
IGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1
YklDKHByb2ZpbGUpOyB9CisKK3ByaXZhdGU6CisgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsK
KyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7
CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKK307CisKIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKERpcmVjdEpJVENvZGUpOwogY2xhc3MgRGlyZWN0SklUQ29kZSA6
IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FM
TE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihEaXJlY3RKSVRDb2RlKTsKQEAgLTI2Niw2ICsz
MDEsMTYgQEAgcHJpdmF0ZToKICAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fd2l0aEFyaXR5
Q2hlY2s7CiB9OwogCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29k
ZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2RlKENv
ZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJp
dHlDaGVjaykKKyAgICAgICAgOiBEaXJlY3RKSVRDb2RlKFdURk1vdmUoY29kZSksIHdpdGhBcml0
eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICB7IH0KKworICAgIEJhZzxVbmxpbmtl
ZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1f
ZXZhbENhbGxMaW5rSW5mb3M7IC8vIE9PUFM6IG1ha2Ugc3VyZSB3ZSB2aXNpdCB0aGVzZSBzb21l
aG93LiBPciBhc3NlcnQgd2UgZG9uJ3QgaGF2ZSB0bywgc2luY2UgdGhleSdyZSB2aXJ0dWFsIGNh
bGxzLgorfTsKKwogY2xhc3MgTmF0aXZlSklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVS
ZWYgewogcHVibGljOgogICAgIE5hdGl2ZUpJVENvZGUoSklUVHlwZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00
NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQog
ewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5m
byhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1
YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNv
ZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJ
bmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRS
ZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6
OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0
aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAg
IG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRp
b24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAg
dm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+
c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9z
dGFydCA9IGppdC5sYWJlbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJ
QyhtX2ppdFR5cGUpKTsKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHJ1Y3R1cmVT
dHViSW5mb0dQUik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGlu
ZVB0clRhZyk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0
b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUg
aml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9H
UFIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEx
ICszOCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXI7CiBj
bGFzcyBDYWxsU2l0ZUluZGV4OwogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklUOwogY2xhc3Mg
U3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVu
dW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKK3N0cnVjdCBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDE7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSByZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IHJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gg
PSByZWdUMjsKK307CisKIGNsYXNzIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKIHByb3RlY3Rl
ZDoKICAgICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigpIHsgfQpAQCAtNjIsOSArNzEsMTQgQEAg
cHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZmZXImIGZhc3RQYXRo
TGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAogICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwotICAgIAorCisgICAg
dm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOworCisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2VkU3R1YkluZm8geyBudWxscHRy
IH07CisgICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBwcm90ZWN0ZWQ6Ci0gICAgQ29k
ZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0VHlwZTsKICAgICBTdHJ1Y3R1
cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzggQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91
YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkg
JiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAoIXNyYy5pc0Nv
bnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKK30KKworQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVy
IHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3Rh
bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBPT1BTOiBmaW5kIGEgd2F5IHRvIGFz
c2VydCB0aGF0IGFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0Nl
bGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwot
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7Cisg
ICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE4NSw3ICsyMTAsNyBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4CiAKIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9j
ay0+aXNLbm93bkNlbGwocmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpCiAgICAgICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjA1LDcgKzIzMCw3IEBAIEFMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcygKIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRv
TmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUlu
ZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBw
YXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFT
U0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVj
a3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byByZXN1bHQgPSBtX2NoZWNrcG9pbnRM
YWJlbHMuYWRkKG1fYnl0ZWNvZGVJbmRleCwgbGFiZWwoKSk7CkBAIC0yMTUsNyArMjQwLDcgQEAg
aW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludAogaW5saW5lIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCBqdW1wKQogewogICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRl
Y29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxp
bmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3Bv
aW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAg
YXV0byBpdGVyID0gbV9jaGVja3BvaW50TGFiZWxzLmZpbmQobV9ieXRlY29kZUluZGV4KTsKQEAg
LTI5MywyOSArMzE4LDM0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRDb3VudChBYnN0
cmEKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1
YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1
ZVJlZ3MgdmFsdWUpCi17Ci0gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7Ci0KLSAg
ICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNv
IHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0Ci0gICAgLy8gc3RvcmUuCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSNl
bHNlCi0gICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJpdHdpc2VfY2Fz
dDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0gICAg
c3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7
Ci0gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOwot
I2VuZGlmCi19CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0
YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXND
ZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworfQorCisvLyBPT1BTCisvL2lubGluZSB2b2lkIEpJVDo6
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1
ZVJlZ3MgdmFsdWUpCisvL3sKKy8vICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwor
Ly8KKy8vICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1
Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKKy8vICAgIC8vIHN0b3JlLgorLy8jaWYg
VVNFKEpTVkFMVUU2NCkKKy8vICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5t
X2J1Y2tldHMpOworLy8jZWxzZQorLy8gICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3Jp
cHRvciA9IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxl
Lm1fYnVja2V0cyk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0
b3ItPmFzQml0cy5wYXlsb2FkKTsKKy8vICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNj
cmlwdG9yLT5hc0JpdHMudGFnKTsKKy8vI2VuZGlmCisvL30KIAogdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1l
dGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4gSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSkKIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVnVDApOwogI2Vsc2UKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5k
aWYKQEAgLTMyMywyNCArMzUzLDI1IEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
c2FtZTxkZWMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9m
aWxlZE9wY29kZSguLi4pIHsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGlu
ZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEpT
VmFsdWVSZWdzIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBK
U1ZhbHVlUmVncyB2YWx1ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9y
KG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOworICAgIHB0
cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldElu
TWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVPZmZzZXRGb3I8Qnl0ZWNvZGU+
KG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZp
cnN0QnVja2V0KCk7CisgICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgQWRkcmVzcyhtX21ldGFkYXRh
R1BSLCBvZmZzZXQpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJl
ZyByZXN1bHRSZWcpCi17Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUs
IEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwotfQorLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyByZXN1bHRS
ZWcpCisvL3sKKy8vICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1Zh
bHVlUmVncyhyZXN1bHRSZWcpKTsKKy8vfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4K
LWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRh
dGEsIEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CiB9CiAjZW5kaWYKIApAQCAtMzgw
LDcgKzQxMSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdp
c3RlcklEIHZhbHVlKQogewogICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcihyZWcpOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3Rh
bnRQb29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAg
ICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwog
ICAgIH0gZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpA
QCAtNDk2LDcgKzUyNyw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdp
c3QKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVh
bFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcp
KSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpA
QCAtNTA2LDcgKzUzNyw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVh
bFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+
aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAg
ICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
CiAgICAgICAgIGVsc2UKQEAgLTUxNCwxMSArNTQ1LDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0
SnVtcFNsb3dDYXNlSWZOb3RKUwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4g
c3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19
Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBp
bnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkg
ewpAQCAtNTQ0LDcgKzU3MCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmUKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQg
bV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0g
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAg
ICAgICAgLy8gT09QUzogaGFuZGxlIGxpbmsgdGltZSBjb25zdGFudHMgaGVyZS4uLgorICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyk7CiAgICAgICAgIGlmICgh
dmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwogICAgICAgICBlbHNlCkBAIC01NjYsMTEgKzU5Myw2IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpp
c09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBz
cmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0K
LQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRy
ZXNzRm9yKGRzdCkpOwpAQCAtNTk1LDcgKzYxNyw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRKdW1wU2xvd0Nhc2UKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsK
LSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25v
d25DZWxsKHZSZWcpKQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsK
IH0KIApAQCAtNjM3LDMwICs2NTksNyBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJn
ZXQoY29uc3QgCiB7CiAgICAgaWYgKHRhcmdldCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAg
ICByZXR1cm4gbV9jb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwot
fQotCi1BTFdBWVNfSU5MSU5FIEdldFB1dEluZm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0
VG9TY29wZSBieXRlY29kZSkKLXsKLSAgICB1bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFk
YXRhSUQgKyAxOyAvLyBIYXNoTWFwIGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBp
dGVyYXRvciA9IG1fY29waWVkR2V0UHV0SW5mb3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRv
ciAhPSBtX2NvcGllZEdldFB1dEluZm9zLmVuZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5m
byhpdGVyYXRvci0+dmFsdWUpOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2dldFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJ
bmZvcy5hZGQoa2V5LCBnZXRQdXRJbmZvLm9wZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dElu
Zm87Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5h
cnlBcml0aFByb2ZpbGUgSklUOjpjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUp
Ci17Ci0gICAgdWludDY0X3Qga2V5ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6
b3Bjb2RlSUQpICsgMSkgPDwgMzIgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9t
ZXRhZGF0YUlEKTsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZp
bmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgp
KQotICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7Ci0gICAgbV9jb3BpZWRBcml0aFByb2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7
Ci0gICAgcmV0dXJuIGFyaXRoUHJvZmlsZTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9j
ay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgpAQCAtNjgxLDYgKzY4MCw0NiBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6
ZWNtYU1vZGU8T3BQCiAgICAgcmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxh
dGUgPEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRhZGF0
YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQp
Cit7CisgICAgbG9hZFB0cihBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxv
Y2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCks
IHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDxCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3MobV9tZXRhZGF0YUdQ
UiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Ynl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPEJ5dGVjb2RlPgor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQ4KEFk
ZHJlc3MobV9tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZz
ZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVt
cGxhdGUgPEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRhZGF0
YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkK
K3sKKyAgICBzdG9yZTgodmFsdWUsIEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENv
ZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zm
c2V0KSk7Cit9CisKK3RlbXBsYXRlIDxCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgYWRkUHRyKG1fbWV0YWRhdGFH
UFIsIFRydXN0ZWRJbW1QdHIobV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKworQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6bG9hZENvbnN0YW50KEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
Y29uc3RhbnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3MobV9j
b25zdGFudHNHUFIsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oY29uc3RhbnRJbmRleCkgKiA4KSwg
cmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZEdsb2JhbE9iamVjdChH
UFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRDb25zdGFudChtX2dsb2JhbE9iamVjdENvbnN0YW50
LCByZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDMyKEFkZHJlc3MocmVn
VDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwog
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpj
YWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRD
bGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4
Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI4MTcxOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDYgKzU0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0
aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGlm
IChzcmMuaXNDb25zdGFudCgpKSB7CisgICAgICAgIC8vIE9PUFMKICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVl
LmlzTnVtYmVyKCkpCiAgICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTg3LDM3ICs4OCwzNSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
LnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxsb2Nh
dG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5h
bE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0
b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJl
Z2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVn
ID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKIAotICAgIGlm
ICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVsc2Ugewot
ICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1
c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7
Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVy
ZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7Ci0gICAg
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcE5ld09iamVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgb2Zm
c2V0T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgp
ICsgb2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Cisg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxl
KCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dD
YXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
KyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0
YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1
cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVj
dCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KIApAQCAtMzc0LDcgKzM3Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChj
b25zdCBJbnN0cnVjdGlvbioKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKKyAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoKTsKICAgICByZXQoKTsKICNlbHNlCkBAIC0zODUsNyArMzg0LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5k
bGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgaml0
LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAgLTQxMSw3ICs0MTAsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAKICAgICBpZiAoZHN0ICE9IHNyYykK
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNDM0LDkgKzQzMiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9r
ZXkoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZnVuY3Rpb24sIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX25hbWUsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25O
YW1lLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC00NjUsOCArNDY0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0
cnVjdGkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdU
MjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNv
bnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0g
ICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFs
c2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1Qw
LCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVj
dEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJ
U3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
ICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTQ4
MCw3ICs0ODEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAg
ICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBi
ZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9G
VEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMs
IHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAg
IEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qx
OwpAQCAtNTE5LDcgKzUyMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IElu
c3RydWMKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVtcCBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5j
aFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNG
b3JlaWduID0ganVtcCgpOwogCkBAIC01NDMsNyArNTQ0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
am5lcV9udWxsKGNvbnN0IEluc3RydQogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2Vz
IC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAg
ICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwg
dGFyZ2V0KTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1Qx
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgp
OwogCkBAIC02MjUsOCArNjI2LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IElu
c3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBy
ZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAg
IGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7
Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElm
VHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9i
amVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0
Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAg
LTY0MCw3ICs2NDMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVj
dCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERG
Ry9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVj
dHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJl
Z1QxOwpAQCAtNjk1LDcgKzY5OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IElu
c3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29weUNhbGxlZVNh
dmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
VGhyb3csIHJlZ1QxLCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsK
ICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50
R1BSMjsKQEAgLTcxMSw3ICs3MTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJ
bnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYg
dm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgY29u
c3RleHByIEdQUlJlZyB0aHJvd25WYWx1ZUdQUiA9IGFyZ3VtZW50R1BSMTsKQEAgLTkwOCw3ICs5
MTIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KIApAQCAtOTE4LDcgKzkyMyw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0
cmljdGVxKGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIs
IHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTkzLDcgKzk5OSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhy
ZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7
CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06
OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFu
ZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxl
RXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEw
MTEsMjMgKzEwMTcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVm
ZmVyLCBldGMKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9
IG1ldGFkYXRhLm1fYnVmZmVyOwotICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxp
bmcoKSkKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5
T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBl
bHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9T
UkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0Jp
dHMoKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NS
RW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0
cygpKTsKICAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJu
VmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnku
bGluayh0aGlzKTsKLSAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewot
ICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXImIHByb2ZpbGUpIHsKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7
Ci0gICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJv
ZmlsZSY+KHByb2ZpbGUpLCByZWdzKTsKLSAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQogfQogCkBAIC0xMTEyLDcgKzExMDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygp
LT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsK
ICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGlu
dD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxp
bmsodGhpcyk7CkBAIC0xMTQ4LDcgKzExNDMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxs
KGNvbnN0IEluc3RydWN0CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTMxMCwyMyArMTMwNCwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29u
c3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0g
Jm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwg
RmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7
CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRvVGhpczo6TWV0YWRhdGE6Om9m
ZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2Fs
bGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBj
YWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklE
IGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsK
ICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAtMTM0Miw3ICsxMzMyLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWRQdHIoQWRk
cmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZz
ZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBhbGxvY2F0b3JSZWcp
OwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVX
aXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFU
YWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNoZWRGdW5jdGlvbiwgY2FjaGVk
RnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wQ3JlYXRl
VGhpczo6b2Zmc2V0T2ZDYWNoZWRGdW5jdGlvbigpLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAg
SnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5j
dGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMo
KSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNo
ZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMubGluayh0aGlzKTsK
QEAgLTEzNzIsNyArMTM2Miw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0
cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBi
b3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0p
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVl
R1BSKTsKIH0KQEAgLTEzODIsNyArMTM3Myw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEo
Y29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdU
MSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFu
KHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKQEAg
LTEzOTQsNyArMTM4Niw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1
Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCkBAIC0xNDA0LDcgKzEzOTcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25z
dCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0MTIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVj
b2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUg
PSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rv
ciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwg
cmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJl
Z1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIEdQUkluZm86
OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZh
bHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZD
dXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAgICAgYm94Qm9vbGVh
bihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTUwOSw3
ICsxNTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1l
bnRHUFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9
IGFyZ3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTE1NjQsNyArMTU2MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX25l
d19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhw
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBHUFJSZWc6OmFy
Z3VtZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1f
dW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVD
ZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0xNjY0LDEzICsxNjYyLDEyIEBAIHZv
aWQgSklUOjplbWl0X29wX25ld19hc3luY19nZW5lcmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29w
X25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2Rl
Lm1fYXJnYzsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QwLCBzaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTY3OSwxNCArMTY3NiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0
aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMik7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAg
ICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMCk7CiAjZWxz
ZQogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQogCkBAIC0xNjk0LDggKzE2OTAsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAKIHZvaWQgSklUOjplbWl0X29w
X3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewor
ICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUg
Y2FjaGluZyB3aGVuIHRoZSB0eXBlIHByb2ZpZWxyIGlzIGVuYWJsZWQuCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5
cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRW
aXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE3NzcsMjAgKzE3NzQsMjQgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAh
PSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlm
IHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRS
ZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlz
IG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVn
ID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNr
ZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgeworICAgICAgICBHUFJSZWcg
c2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQg
cmVnaXN0ZXIuCisgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOworICAgICAgICBl
bnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFS
ZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNo
YWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFp
bFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Qx
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpT
VkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUg
Y2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdXNp
bmcgdGhlIGNvbnRyb2wgZmxvdyBwcm9maWxlci4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEJhc2ljQmxv
Y2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9j
YXRpb247CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRF
eGVjdXRlQ29kZSgqdGhpcyk7CkBAIC0xODYwLDcgKzE4NjEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJl
c3VsdFJlZ3MpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE4ODYsNyArMTg4Nyw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QKICAgICBlbWl0TG9h
ZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3Jh
dGNoR1BSLCBzbG93Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVn
cyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgICAgICAgICBh
ZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
c3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgfQog
CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShj
b25zdAogICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRp
bWl6ZSk7CiAgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNTAsNyArMjUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVH
UFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BS
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC02ODAsNyArNjgwLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBv
cHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRD
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25z
LCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY4OSw3ICs2OTAsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0
ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9w
dGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMs
IHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3MDEsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAgaW50MzJfdCBh
dHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
aW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1Qz
LCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTcwOSw3ICs3MTIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5
X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5
LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVz
LCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRl
cywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzE5LDcgKzcyMyw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJp
YnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBy
ZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtODQ1LDIyICs4NTAsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3Bl
cnR5KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dEdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0
dWJJbmZvR1BSLCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFs
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVt
aXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJp
ZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJl
IHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs4OTks
MTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2Rl
LnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSw3ICs5
MTcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIg
R1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKQEAgLTk3Niw3ICs5OTQsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAg
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQog
CkBAIC0xMDQ1LDcgKzEwNjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0
KGNvbnN0CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5
SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwODksNyArMTEwNyw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIApAQCAtMTEyMyw3ICsxMTQxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1
bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBA
IC0xMTQ5LDcgKzExNjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRz
V2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTE5Miw3ICsxMjEwLDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0xMjc3LDcgKzEyOTUsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IApAQCAtMTY4OCw2ICsxNzA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0
dWFsUmVnaQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
KyAgICAvLyBPT1BTCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwpAQCAtMTc5NCw1OSArMTgxMyw3NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3Bl
KGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRS
ZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fcmVz
b2x2ZVR5cGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0g
bV9ieXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHBy
IEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVH
UFIgPSByZWdUNjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVn
VDU7CisgICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdh
dXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29s
dmUgdHlwZS4KIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJl
Z1QwKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6
Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRh
dGFUYWJsZSgmbWV0YWRhdGEpOworICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRl
Y29kZSk7CisKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJikgewor
ICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKENsb3N1
cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgICAg
IH07CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jl
c29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29u
c3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hf
UkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAg
ICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MiKTsKICAgICAgICAgfTsKLSN1bmRlZiBSRVNPTFZF
X1NDT1BFX0dFTkVSQVRPUgorCisgICAgICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVy
YXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayhzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBn
ZW5lcmljIik7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7
CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNv
bHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0
dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICBj
b2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVy
YXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdl
bmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChj
b2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8
UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAg
Ly8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0
aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKworICAgIENDYWxsSGVscGVycyBqaXQ7
CisKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7IC8vIGluY29taW5nCiAgICAgY29u
c3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNzIHRo
cnUgdG8gc2xvdyBwYXRoLgogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
cmVnVDQ7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNF
X0FTU0VSVCh0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAg
ICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJs
ZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRh
YmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAg
ICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKQEAgLTE4NTUsMjYgKzE4OTIsMjYgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgICAg
IGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFs
T2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0
R1BSKTsKICAgICAgICAgfQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2lu
dCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmpl
Y3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRj
aHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVx
dWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0UmVzb2x2
ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAg
bW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7
CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAgIGppdC5sb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2xvY2FsU2Nv
cGVEZXB0aCkpLCByZWdUMSk7CiAKLSAgICAgICAgTGFiZWwgbG9vcCA9IGxhYmVsKCk7Ci0gICAg
ICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CisgICAgICAgIExhYmVs
IGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgSnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3Qz
MihaZXJvLCByZWdUMSk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBzdWIz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICAgICAgICAgIGp1bXAoKS5saW5rVG8obG9v
cCwgdGhpcyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3Bl
OjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5zdWIzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGxvb3AsICZq
aXQpOwogICAgICAgICB9Ci0gICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5s
aW5rKCZqaXQpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSkgewpAQCAtMTg4MiwxMiArMTkxOSwxMiBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAg
ICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9i
amVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQ
Uik7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAgICAgbG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxM
ZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2Jq
ZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAg
ICAgICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOworICAgICAgICAgICAgaml0Lmxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2xv
YmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNH
bG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEp
KTsKKyAgICAgICAgICAgIGppdC5tb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTg5NywxMSArMTkzNCwxMSBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6
OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpIGZvciBHbG9iYWxWYXIqLAogICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFy
Ki4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAg
aWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKQEAgLTE5MDksNyArMTk0Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkp
OworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1v
ZHVsZVZhcjoKQEAgLTE5MTksODMgKzE5NTYsNDUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2
ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRh
ZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVU
eXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7
Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZh
cik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29s
dmVUeXBlID0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0
Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6
b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDApOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
ci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOworICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSkgeworICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGpp
dC5qdW1wKCkpOworICAgICAgICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9Owog
Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxW
YXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNl
KEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAK
LSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICByZXQoKTsK
KyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9C
QUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dD
YXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0
b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNs
b3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpU
aHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwo
dm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9SRVNPTFZF
X1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJh
dG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNl
ZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsg
fTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Nj
b3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJ
TkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpz
bG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVu
ayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50
IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91
dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdp
bmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIAogICAgIC8vIFRoZSBmYXN0IHBhdGggYWxyZWFkeSBwdXNoZWQgdGhlIHJldHVybiBh
ZGRyZXNzLgogI2lmIENQVShYODZfNjQpCkBAIC0yMDY1LDYgKzIwNjQsNyBAQCB2b2lkIEpJVDo6
ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMjE3OCw3ICsyMTc4LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjIwNiwzMSArMjIwNiw0MSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAor
ICAgIGF1dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgcmV0dXJu
IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKENsb3N1cmVWYXIsICJCYXNlbGluZTog
b3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAgICBhdXRvIGNsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAg
ICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZh
ciIpOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBb
XSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVu
ayhzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgZ2VuZXJpYyIpOwor
ICAgIH07CisKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9i
YWxWYXIpIHsKLSAgICAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0gICAgICAgIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVC
bG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgcHRyZGlmZl90IG1l
dGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1l
dGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0jZGVmaW5lIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRP
UihyZXNvbHZlVHlwZSkgb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9y
LAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewot
ICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRP
UikKLSAgICAgICAgfTsKLSN1bmRlZiBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBjb2RlOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1
cmVWYXIpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3Ip
OworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGUg
PSB2bS5nZXRDVElTdHViKGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IpOworCisgICAgZW1p
dE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhzdGQ6Om9w
dGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQog
ewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3
b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCkBAIC0yMjM5LDc3ICsyMjQ5LDY4IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICB1c2luZyBNZXRhZGF0
YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFk
YXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2Owot
ICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5
cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owor
CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFk
ZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAg
aml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7
CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2Nv
cGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsK
LSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
YnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSKSB7CisgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgcmVnVDEp
OworICAgICAgICBqaXQubW92ZShzY29wZUdQUiwgcmVnVDApOworICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgaml0LmxvYWQz
MihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7
CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CiAgICAgfTsKIAog
ICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29k
ZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmpl
Y3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1Qz
KTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpT
R2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwogICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2lu
dFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAg
ICAgfTsKICAgICAKLSAgICBhdXRvIGVtaXRHZXRWYXJGcm9tUG9pbnRlciA9IFsmXSAoaW50MzJf
dCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07
Ci0KLSAgICBhdXRvIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyID0gWyZdIChpbnQzMl90
IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsK
LQogICAgIGF1dG8gZW1pdEdldENsb3N1cmVWYXIgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgR1BS
UmVnIG9wZXJhbmRHUFIpIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9m
KFJlZ2lzdGVyKSk7Ci0gICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQ
Uik7Ci0gICAgICAgIGFkZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LmxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwg
b3BlcmFuZEdQUik7CisgICAgICAgIGppdC5hZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwor
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOwogICAgIH07CiAKLSAgICBhdXRvIGVt
aXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKSB7CisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVH
UFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9zdHJ1Y3R1cmUpKTsgLy8gU3RydWN0dXJl
IGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVy
ZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29s
dmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAg
ICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUik7IC8vIFN0cnVjdHVyZSBj
aGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVz
IGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZl
X3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAgICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSByZWdUMDsKICAgICAgICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG9m
ZnNldCA9IHJlZ1QxOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gcmVn
VDI7CiAKLSAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZd
ICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgcmVnVDMpOworICAg
ICAgICAgICAgaml0LmppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+
IEp1bXAgeworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gaml0LmJyYW5jaFB0cihFcXVhbCwgYmFzZSwgcmVnVDMp
OwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIG9mZnNldCk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zm
c2V0T2ZPcGVyYW5kKCkpLCBvZmZzZXQpOwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVE
KSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJU
aGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsK
LSAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUp
OwotICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CisgICAgICAgICAgICAg
ICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9m
ZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAg
ICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CisgICAgICAg
ICAgICAgICAgaXNPdXRPZkxpbmUubGluaygmaml0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0
ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4
KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7
CisgICAgICAgICAgICBqaXQubmVnMzIob2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5zaWduRXh0
ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZDY0KEJhc2VJ
bmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAt
IDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTIzMTcsMjEgKzIzMTgs
MTkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGlmIChpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJl
Y3RQb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJh
bmQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKHJlZ1QwLCByZWdUMCk7CiAg
ICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNo
ZWNrLgotICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1Qw
KSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHJl
Z1QwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBy
ZWdUMyk7CiAgICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZUdQUiwgcmVnVDMpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5q
dW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJl
VmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTIzNDEsNzkgKzIzNDAsNTYgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsK
IAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5Ogot
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkp
OwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRo
aXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGlj
YWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVU
eXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFy
IHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVt
cExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JK
RUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSksIHJlZ1QwKTsKKyAgICAgICAgaml0
LmFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0g
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAg
ICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7
CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIp
OworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9i
YWxWYXIubGluaygmaml0KTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb24gPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVt
cCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKCZqaXQpOwor
CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGppdC5icmFuY2gzMihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Cisg
ICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluaygmaml0KTsKKyAgICAgICAgZW1pdENvZGUoR2xv
YmFsUHJvcGVydHkpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhp
cyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGppdC5icmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5q
dW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsoJmppdCk7CiAKLSAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgc2tpcFRvRW5k
LmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZq
aXQpOwogICAgIH0KIAogICAgIHN0YXRpY19hc3NlcnQoVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1
Y2tldHMgPT0gMSk7Ci0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JK
RUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVn
VDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSkpOwog
Ci0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0g
ICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJv
bV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxv
Y2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2Rl
TG9jYXRpb25MYWJlbCh2bSgpLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5l
IERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9nZXRfZnJvbV9zY29wZV8jI3Jl
c29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0
ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAg
ICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJl
dHVybiBqaXQuZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxp
bmU6IG9wX2dldF9mcm9tX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNI
X1JFU09MVkVfVFlQRShERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERF
RklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mIHZt
KQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25s
eSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKQEAgLTI0NzEsODYg
KzI0NDcsNzkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogfQog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi12b2lkIEpJVDo6ZW1pdFB1dEds
b2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0
Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3Bl
cmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1
ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1Qx
KTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3Bl
cmFuZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0
b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci19Ci0KIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3Bl
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgR2V0
UHV0SW5mbyBnZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7Ci0gICAgUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKLSAg
ICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigm
bWV0YWRhdGEubV9vcGVyYW5kKTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBSZXNv
bHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisKKyAgICBhdXRvIGVtaXRD
b2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJl
c29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVy
ZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1
cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNv
bHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAg
ICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRv
bid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0Lgor
ICAgICAgICAgICAgLy8gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tp
bmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCByZWdUMSk7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisKICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKIAogICAgICAgICAg
ICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVh
bCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0g
ICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CisgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsK
KyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6
b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0g
ICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNF
aWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHJl
Z1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIC8vIE9P
UFM6IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIEdQUlJlZ3MKKyAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZh
cjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5
cGUpOwotICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlh
bGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewor
CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDApOworCisgICAgICAgICAgICBpZiAo
IWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9k
ZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBh
bHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KLSAgICAg
ICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4o
b3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3Bl
cmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCksIHJl
Z1QxKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkK
LSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50
U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFy
aWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRh
dGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3Rh
bnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKworICAgICAgICAgICAgbG9hZFB0
ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZX
YXRjaHBvaW50U2V0KCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNo
cG9pbnQocmVnVDEpOworCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMSk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwKSk7CisK
KyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhh
dCB0b29rIGEgR1BSUmVnIGZvciB2YWx1ZS4KKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
c2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBD
bG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwg
Km9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAg
ICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHJG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3Bl
cmFuZCgpLCByZWdUMik7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJl
Z1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAg
ICAgICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFNjYWxlRWlnaHQs
IEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSk7CisKKyAgICAgICAg
ICAgIC8vIE9PUFM6IFdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEg
R1BSUmVnIGZvciBvd25lci92YWx1ZS4KICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2Nv
cGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yNTY0LDU4ICsyNTMzLDUyIEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7
Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1Qw
KTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIp
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBl
biBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29u
c3QgYmluZGluZy4KLQotICAgICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLSAg
ICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0
cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzR2xv
YmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZh
bHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVC
bG9jayBzZWVzIENsb3N1cmVWYXIvIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0
aGVuIHdlIGNhbiBjb21waWxlIHRoaW5ncworICAgIC8vIHRoYXQgd2F5IGZvciBhbGwgQ29kZUJs
b2Nrcywgc2luY2Ugd2UndmUgcHJvdmVuIHRoYXQgaXMgdGhlIHR5cGUgd2Ugd2lsbCBiZS4gSWYg
d2UncmUgYSBDbG9zdXJlVmFyLAorICAgIC8vIGFsbCBDb2RlQmxvY2tzIHdpbGwgYmUgQ2xvc3Vy
ZVZhci4gSWYgd2UncmUgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHdlJ3JlIGFs
d2F5cyBDbG9zdXJlVmFyCisgICAgLy8gaWYgdGhlIHZhciBpbmplY3Rpb24gd2F0Y2hwb2ludCBp
c24ndCBmaXJlZC4gSWYgaXQgaXMgZmlyZWQsIHRoZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRoLCBz
byBpdCBkb2Vzbid0CisgICAgLy8gbWF0dGVyIHdoYXQgdHlwZSB3ZSBhcmUgZHluYW1pY2FsbHku
CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgZW1p
dENvZGUoQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBS
ZXNvbHZlZENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKFJlc29sdmVkQ2xvc3VyZVZhcik7
CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOworICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQz
MkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZH
ZXRQdXRJbmZvKCksIHJlZ1QwKTsKICAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwg
ZmFsc2UpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKHRoaXMpOwogCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVt
aXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgbm90R2xvYmFsVmFyLmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhp
cyk7CisKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAg
ICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUp
OworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKICAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsKIAogICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5
cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCkBAIC0yNjI0LDEzICsyNTg3
LDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0g
Y29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKLSAgICBpZiAocmVzb2x2
ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlw
ZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5y
ZXNvbHZlVHlwZSgpOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikg
eworICAgICAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzYXcgYSBNb2R1bGVWYXIsIHRo
ZW4gYWxsIGxpbmtlZCBDb2RlQmxvY2tzIGFyZSBndWFyYW50ZWVkCisgICAgICAgIC8vIHRvIGFs
c28gc2VlIE1vZHVsZVZhci4KICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFk
b25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
CiAgICAgfSBlbHNlIHsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0VG9TY29wZSwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAg
ICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yNzAxLDcgKzI2NjcsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdU
MCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyNzI1LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CkBAIC0yNzY3LDcgKzI3MzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxf
ZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNl
dE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAt
Mjc4OSw3ICsyNzU0LDYgQEAgdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxP
cAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9t
b2RlOwpAQCAtMjgwNSw3ICsyNzY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9u
ZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlzIGlz
IHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBjYXNl
IGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRhZGF0YS5tX2Vu
dW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVy
ZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayku
bV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1
Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAg
ICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMih+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVN
b2RlKSkpOwpAQCAtMjkxOCw3ICsyODgyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9nZXRfYnlfdmFsKAogCiAgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5MjcsMTAgKzI4OTEs
OSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfCiAgICAgZ2VuZXJh
dGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0
QnlWYWw+KCksIGl0ZXIpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlw
ZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hh
c19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29u
c3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNl
KQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9u
VHlwZT4KK3ZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQogewotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51
bWVyYXRvcjsKQEAgLTI5MzksNyArMjkwMiw5IEBAIHZvaWQgSklUOjplbWl0X2VudW1lcmF0b3Jf
aGFzX3Byb3BlcnR5SW0KICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QwKTsKLSAgICBvcjgocmVnVDAsIEFic29sdXRlQWRkcmVz
cygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0
YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0aW9uTWV0YWRh
dGEoKSwgcmVnVDEpOworICAgIG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFk
YXRhKHJlZ1QxLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0
aW9uTWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0
dXJlTW9kZSkpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTQzLDcgKzE1NDMsNyBAQCBzdGF0aWMgdm9pZCByZXZlcnRD
YWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAKIHZvaWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNh
c3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmZhc3RQYXRoU3Rh
cnQoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxp
bmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlua0luZm8pKTsKICAgICAK
ICAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxU
aHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BK
bnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVy
YXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0
cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAg
ICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUs
ICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0MSwgdDIp
CiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGJpbmVxIFRhZ09mZnNldFtjZnIs
IHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBAIC0xMDIzLDcgKzEwMTksNyBAQCBtYWNybyBwcmVP
cChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgICMgTWV0YWRhdGEgaW4gdDEs
IHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQyLCAuc2xvdykKICAgICAg
ICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFy
aXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9m
aWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAgICAgIGRpc3Bh
dGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4OSwyMiArMTA4NSwxOCBAQCBlbmQpCiAKIGxsaW50
T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAKLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUo
dHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2Zp
bGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgIGVuZAotCiAgICAgbWV0YWRh
dGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5lcSB0MSwgSW50MzJUYWcsIC5vcE5lZ2F0
ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBu
ZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRh
dGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0NSwgdDMpCiAg
ICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdhdGVTcmNOb3RJbnQ6CiAgICAgYmlhIHQx
LCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JpIDB4ODAwMDAwMDAsIHQxCi0gICAg
dXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFy
aXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0NSwgdDMpCiAgICAgcmV0
dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExMTUsMTAgKzExMDcsNiBAQCBlbmQp
CiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBp
bnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9wZXJhdGlvbikKICAgICBsbGludE9wV2l0
aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gYXJpdGhQcm9maWxl
KHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBl
bmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCiAgICAgICAgIGdldChtX3JocywgdDIpCiAg
ICAgICAgIGdldChtX2xocywgdDApCkBAIC0xMTI2LDcgKzExMTQsNyBAQCBtYWNybyBiaW5hcnlP
cEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCBJbnQzMlRhZywgLm9w
MU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5vcDJOb3RJbnQKLSAgICAgICAg
YXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAg
ICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0Mywg
dDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKQEAgLTExMzYsMTIgKzExMjQs
MTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBi
aWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAgICAgICAgYmliIHQzLCBMb3dlc3RUYWcsIC5vcDFO
b3RJbnRPcDJEb3VibGUKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAuc2xvdwotICAgICAg
ICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0
NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAg
ICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKLSAgICAg
ICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVy
LCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQxKQog
ICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1Myw3ICsxMTQxLDcgQEAgbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQg
aXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IG5v
dC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYmlhIHQzLCBMb3dlc3RUYWcsIC5z
bG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51
bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGZpaTJkIHQxLCB0
MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJhdGlvbihmdDEsIGZ0MCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTA1NiwxMCArMTA1Niw2IEBA
IHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Ao
b3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BX
aXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0
aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0
YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAg
ICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2Nm
ciwgdDAsIDhdLCB0MQogICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNjUs
NyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGlu
dGVnZXJPcGVyYXRpb24odDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAg
ICAgICBzdG9yZXEgdDEsIFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUo
QXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVT
dHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAg
ICAuc2xvdzoKQEAgLTExMzQsMTEgKzExMzAsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0
YWRhdGEsIHJldHVybikKLQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAg
ICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5
QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0
MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0
YSh0MSwgdDIpCkBAIC0xMTQ2LDEyICsxMTM3LDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
bmVnYXRlLCBPcE5lZ2F0ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93
CiAgICAgbmVnaSB0MwogICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9m
aWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0
ZSwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDQpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90
SW50OgogICAgIGJ0cXogdDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4
MDAwMDAwMDAwMDAwMDAwLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVO
dW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmls
ZU51bWJlciwgdDEsIHQ0KQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTEx
NjQsMTAgKzExNTUsNiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9w
CiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1l
dGFkYXRhKHQ1LCB0MCkKIAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAg
ICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJp
bmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQo
bV9yaHMsIHQwKQogICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHNpemUsIHQwLCB0MSkKQEAgLTExNzcsNyArMTE2NCw3IEBAIG1hY3JvIGJpbmFy
eU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAg
ICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAg
ICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0
aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0NCkKICAgICAg
ICAgZGlzcGF0Y2goKQogCiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExNzQsMTAgQEAg
bWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQx
LCBudW1iZXJUYWcsIC5zbG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBm
cTJkIHQxLCBmdDEKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisg
ICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmls
ZU51bWJlck51bWJlciwgdDUsIHQ0KQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAg
Lm9wMU5vdEludE9wMkludDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQp
CisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5v
dEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNiw3ICsxMTkzLDcgQEAg
bWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0
IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBu
b3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywg
LnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVw
ZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJl
ciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFn
LCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MTcxOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQko
d29ya2luZyBjb3B5KQpAQCAtMjQ5OCw2ICsyNDk4LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgp
CiAgICAgZW5kCiBlbmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVT
dHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpN
ZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVu
YXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlB
cml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2Fk
cCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVt
cAorICAgIG9yaCB0eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisK
IC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhl
cmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MK
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdF
QkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODE3MTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00ODAsNyArNDgwLDcgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRI
KHNsb3dfcGF0aF90bwogI2lmIEVOQUJMRShKSVQpCiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFBy
b2ZpbGVGb3JVbmFyeUFyaXRoT3AoT3BOZWdhdGU6Ok1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1
ZSByZXN1bHQsIEpTVmFsdWUgb3BlcmFuZCkKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJv
ZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBw
cm9maWxlID0gKm1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOwogICAgIHByb2ZpbGUub2JzZXJ2ZUFy
ZyhvcGVyYW5kKTsKICAgICBBU1NFUlQocmVzdWx0LmlzTnVtYmVyKCkgfHwgcmVzdWx0LmlzQmln
SW50KCkpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436747</attachid>
            <date>2021-08-29 13:11:07 -0700</date>
            <delta_ts>2021-08-30 17:17:34 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>227283</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IHVubGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxp
bmtlZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRp
b24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
aXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0g
ICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRo
U3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhT
dGFydCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlz
IGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQg
dG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0
aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJz
OjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAg
IHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MjQsNiArNDI0LDEzIEBAIGlubGluZSBDb2RlT3JpZ2lu
IGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBz
byB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjYsNiArNDY2
LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAg
YnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENv
ZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAg
ICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENv
ZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAg
ICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVj
dGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1
Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4LDE0ICs1NDEsMTQgQEAgYm9vbCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJv
bWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9w
QWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBM
SU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMp
Ci0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVs
KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAg
IExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJ
VEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC0zMDc5LDcgKzMwOTIs
NyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFC
TEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBK
SVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJh
bWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMyOTUsMTMgKzMzMDgsMTMg
QEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRj
aCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZw
Yy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJl
dHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAg
Y2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRo
aXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMzMxMywxMSArMzMyNiwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29k
ZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAg
IGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0
ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAg
ICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0
aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVj
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFz
PE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDE2ICsyMzIsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0
OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9v
bCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRoZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJu
IHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFuZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAg
ICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFu
dChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+
KG1fbnVtVmFycyk7CkBAIC0yNjYsNiArMjU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNT
dGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAg
ICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBo
ZXJlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOwogCkBAIC00NzIsNiArNDYzLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5h
bWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFy
YW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKQEAgLTc5Nyw2ICs3ODksNyBAQCBwdWJs
aWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2Rl
YnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsg
cmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25l
ZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51
bUJyZWFrcG9pbnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODUsNiAr
Mzg1LDggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKAogICAgIHJl
dHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCisvLyBPT1BTOiBNYWtlIHRoaXMgc3R1ZmYgd29y
ayB3aXRoIGRhdGEgaWNzIHRvIG5vdCBhc3N1bWUgaW5saW5lIGFjY2Vzcy4KKwogdm9pZCBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQpCiB7CiAgICAgaWYgKGNvZGVC
bG9jay0+dXNlRGF0YUlDKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMwLDYgKzQzMCwyOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3Zv
aWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyhVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvKQoreworICAg
IGFjY2Vzc1R5cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1
bmxpbmtlZFN0dWJJbmZvLnN0YXJ0OyAvLyBPT1BTOiBkbyB3ZSBuZWVkIGEgc3RhcnQgZm9yIGRh
dGEgSUNzPworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9u
OworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhT
dGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KHVubGlua2Vk
U3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5s
aW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsKKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkg
eworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6RGVsQnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRC
eVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKICNpZiBBU1NFUlRfRU5B
QkxFRAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y2hlY2tDb25zaXN0ZW5jeSgpCiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDggQEAgZW51
bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAorc3Ry
dWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZv
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDAsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFsaXpl
RnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYp
OworCiAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUg
c3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4g
aXQgcmVzZXRzIGl0c2VsZiwKQEAgLTQ0Nyw2ICs0NTEsMTUgQEAgaW5saW5lIGF1dG8gYXBwcm9w
cmlhdGVHZW5lcmljR2V0QnlJZEZ1bgogICAgIH0KIH0KIAorc3RydWN0IFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8geworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgLy8gT09QUzogRG8gd2UgbmVlZCBzdGFydCBmb3IgZGF0
YSBJQ3M/CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0
OyAvLyBUaGlzIGlzIGVpdGhlciB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJQyBmb3IgKmJ5SWQg
Y2FjaGVzLiBvciB0aGUgbG9jYXRpb24gb2YgcGF0Y2hhYmxlIGp1bXAgZm9yICdpbnN0YW5jZW9m
JyBjYWNoZXMuCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxv
Y2F0aW9uOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzbG93
UGF0aFN0YXJ0TG9jYXRpb247Cit9OworCiAjZWxzZQogCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5m
bzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDYgKzE3
NSw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtu
b3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsg
fQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50
b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
c1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdl
dENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRS
ZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQogICAgIGNvbnN0IEZpeGVk
VmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OyB9CiAKQEAgLTIwNyw2ICsyMDgsMTQgQEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9k
ZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRN
b2RlPihtX3NjcmlwdE1vZGUpOyB9CiAKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5z
dHJ1Y3Rpb25zKCkgY29uc3Q7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uQXQo
Qnl0ZWNvZGVJbmRleCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5k
ZXgpLnB0cigpOyB9CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25z
QmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5hdCgwKS5wdHIoKTsKKyAgICAgICAgY29uc3QgYXV0byog
aW5zdHJ1Y3Rpb25zRW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbnN0cnVjdGlvbnNCZWdpbikgKyBpbnN0cnVjdGlv
bnMoKS5zaXplKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0cnVjdGlvbiA+PSBpbnN0
cnVjdGlvbnNCZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGluc3RydWN0aW9uc0VuZCk7CisgICAgICAg
IHJldHVybiBpbnN0cnVjdGlvbiAtIGluc3RydWN0aW9uc0JlZ2luOworICAgIH0KIAogICAgIHVu
c2lnbmVkIG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxz
OyB9CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpA
QCAtNDEwLDYgKzQxOSw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0
aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogYmluZCBhIGJldHRl
ciBwbGFjZSB0byBzdG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlBcml0aFByb2Zp
bGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+
IG1fdW5hcnlBcml0aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpF
eGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtNDU1LDYgKzQ2NywyOCBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZz
ZXQoKSk7CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0
aW9uKiBwYykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+
Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChv
ZmZzZXQpOworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuc2l6
ZSgpOworICAgICAgICBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRoUHJv
ZmlsZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBh
ZGRVbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBt
X3VuYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVz
LmFwcGVuZChCaW5hcnlBcml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWdu
ZWQgaSkgeyByZXR1cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0
aFByb2ZpbGUmIHVuYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlB
cml0aFByb2ZpbGVzW2ldOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRh
cmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRh
dGFUYWJsZS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw5ICsx
MDEsMTggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAg
ICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNl
dDE2ID0gdWludDE2X3Q7CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVp
bnRwdHJfdCBvZmZzZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAg
eworICAgICAgICBBU1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNl
VHlwZU9mZnNldCA9IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlE
XSA6IG9mZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgcmV0dXJuIGJh
c2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRh
dGFJRDsKKyAgICB9CisKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfb2Zmc2V0VGFi
bGVFbnRyaWVzID0gTlVNQkVSX09GX0JZVEVDT0RFX1dJVEhfTUVUQURBVEEgKyAxOyAvLyBvbmUg
ZXh0cmEgZW50cnkgZm9yIHRoZSAiZW5kIiBvZmZzZXQ7CiAKICAgICAvLyBOb3QgdG8gYnJlYWsg
YWxpZ25tZW50IG9mIDMyYml0IG9mZnNldCB0YWJsZSwgd2Ugcm91bmQgdXAgc2l6ZSB3aXRoIHNp
emVvZihPZmZzZXQzMikuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYg
QEAgdGVtcGxhdGU8dW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzQXJndW1lbgogc3RydWN0IFZhbHVl
UHJvZmlsZUJhc2UgewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNr
ZXRzID0gbnVtYmVyT2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBudW1iZXJPZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBidWNrZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tl
dHMgKyBudW1iZXJPZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNl
KCkKQEAgLTEzNCw3ICsxMzMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29k
ZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxh
dGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTU2LDYgKzE1NSw3IEBAIHN0
cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJv
ZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAg
ICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4o
KSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBz
dHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmls
ZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0VW5hcnkKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRo
aXMsIGRzdCwgc3JjLCB0eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBz
cmMsIHR5cGUsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90
Pihkc3QsIHNyYyk7CkBAIC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRJbmMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0Rz
dCk7CisgICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlB
cml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVj
OjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2Nv
ZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02ODIsNyArNjgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklE
Kj4KICAgICAgICAgZW1pdEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3Jj
MSwgUmVnaXN0ZXJJRCogc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAg
ICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1f
Y29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4g
ZHN0OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODg5LDcgKzg4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAg
IGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNl
dEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFt
ZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5Niw3ICs4OTYsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93
Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVH
UFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAg
ICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2pp
dCwgY2FsbGVlR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENh
bGwpIHsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEo
c2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBz
aHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgxNzE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0NzQ3LDcgKzE0NzQ3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5ncHIoKTsKIAotICAg
IG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1Jl
Z3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJbmRleCk7CisgICAgbV9q
aXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywg
c2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKSks
IGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyODE3
MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMzU1LDcgKzEwMzU1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2Fs
bExpbmtJbmZvKGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAg
ICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewog
ICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1
ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNo
dWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgICAgICB9KTsKQEAg
LTEwNjk4LDcgKzEwNjk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQs
IEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6
Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAg
ICAgICAgIH0pOwpAQCAtMTA5NzksNyArMTA5NzksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsK
LSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBj
YWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsm
XSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsK
ICAgICAgICAgICAgICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL01ldGFkYXRhLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvTWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0
MiwyMiBAQCBjbGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJldHVy
biBpZiBlbXB0eT8KIAotICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcykK
KyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGdlbmVyYXRlT2Zmc2V0
T2YpCiAgICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAg
ICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4
fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVm
aXh9fTsiCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRG
aWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlLCBmYWxzZSl9XG4je3ByZWZpeH19OyIKICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9f
c30gbV8je2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmll
bGQudG9fcworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiI3twcmVmaXh9I3t0eXBlLnRv
X3N9IG1fI3tmaWVsZE5hbWV9OyIKKyAgICAgICAgICAgICAgICAgICAgaWYgZ2VuZXJhdGVPZmZz
ZXRPZgorICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArICJcbiIgKyAic3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsx
Li5dfSgpIHsgcmV0dXJuIE9GRlNFVE9GKE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisg
ICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICByZXN1bHQKICAgICAg
ICAgICAgICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVuZAog
Ci0gICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcykKKyAg
ICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzLCB0cnVlKQog
CiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBA
aW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk4LDgg
KzY5OCwxMyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzCiAKIHZv
aWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGds
b2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0
TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBpbmZvKTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6
OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlu
a0luZm8qIGluZm8pCit7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpy
ZWdUMik7CiAgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwg
JnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlv
biA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihj
YWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxOCw2ICsxNzE4LDcgQEAgcHVibGljOgog
ICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5n
R2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3Bh
Y2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2Fs
bCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVy
czo6bG9nU2hhZG93Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkp
KTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQ
UlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAg
c3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0
LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBz
dG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigp
KSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQ
YWNrZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRv
d1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVl
KSkpOwotICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cihjb2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19
Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwg
R1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2Ny
YXRjaDIpCiB7CiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0No
aWNrZW4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtODQwLDcgKzg0MCwxOCBAQCBwdWJsaWM6CiAgICAgLy8g
VGhlc2Ugb3BlcmF0aW9ucyBjbG9iYmVyIGFsbCB2b2xhdGlsZSByZWdpc3RlcnMuIFRoZXkgYXNz
dW1lIHRoYXQgdGhlcmUgaXMgcm9vbSBvbiB0aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sgdG8gbWFy
c2hhbGwgY2FsbCBhcmd1bWVudHMuCiAgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQ
YWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NvcGUp
OwotICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tl
dCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNp
dGVJbmRleCk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2
b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFs
dWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCisgICAgeworICAgICAgICBzdG9yZVB0cihHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOworICAgICAgICBzdG9yZVB0cihU
cnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNh
bGxlZSkpKTsKKyAgICAgICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsK
KyAgICAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKKyAgICAgICAgc3RvcmVQdHIo
Y29kZUJsb2NrLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0No
aWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOworICAgIH0KKwog
ICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdy
aXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNr
ZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQ
UlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlz
aW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX2xv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKKyAg
ICBtX2dsb2JhbE9iamVjdENvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0KTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTExMyw3ICsx
MTQsNyBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqCiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6
ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlm
eVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KQogewogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0Ojpv
ZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KQEAgLTEy
OSw3ICsxMzAsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICAgICBp
ZiAoIUFTU0VSVF9FTkFCTEVEKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBKdW1wIG9rID0gYnJh
bmNoUHRyKEVxdWFsLCByZWdUMCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGJyZWFrcG9p
bnQoKTsKICAgICBvay5saW5rKHRoaXMpOwpAQCAtNjc2LDE3ICs2NzcsMTYgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0
aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6
Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOwor
ICAgIC8vIE9PUFM6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGRvbmUgb24gdW5saW5rZWQgY29kZSBi
bG9jaz8KKyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmNhcGFiaWxpdHlMZXZlbCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIERG
Rzo6Q2Fubm90Q29tcGlsZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAg
ICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxk
RW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2Fu
Q29tcGlsZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9j
YW5CZU9wdGltaXplZCA9IHRydWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQg
PSB0cnVlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAgICAgICBi
cmVhazsKICAgICBkZWZhdWx0OgpAQCAtNzQ2LDcgKzc0Niw3IEBAIHZvaWQgSklUOjpjb21waWxl
QW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAK
LSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwog
ICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsK
ICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzYyLDcgKzc2MiwxMCBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAKICAgICBpZiAobV9jb2RlQmxvY2st
PmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29k
ZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAgICBp
ZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3Io
KSB8fCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID4gMSkpIHsKKyAgICAgICAgICAgIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVn
VDIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNl
dE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBGaXhlZFZlY3Rvcjo6b2Zmc2V0T2ZTdG9yYWdl
KCkpLCByZWdUMik7CisKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBh
cmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAg
ICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0
byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBr
ZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNv
cmQgdGhlIGR1bW15IHZhbHVlLgpAQCAtNzc4LDYgKzc4MSw3IEBAIHZvaWQgSklUOjpjb21waWxl
QW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhj
YWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgogICAgICAgICAgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3Vt
ZW50KGFyZ3VtZW50KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShy
ZXN1bHRSZWdzLCBBZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUp
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC05MTksMTAgKzkyMyw4IEBA
IHZvaWQgSklUOjpsaW5rKCkKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CiAKICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0aW9uSW5m
byA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewotICAgICAgICBDYWxsTGlua0luZm8mIGluZm8g
PSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAgICAgICAgaW5mby5zZXRDb2RlTG9j
YXRpb25zKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCi0gICAgICAgICAgICBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9j
YXRpb24pKTsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRp
b25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBpbmZvLmRvbmVMb2NhdGlvbiA9
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZv
LmRvbmVMb2NhdGlvbik7CiAgICAgfQogCiAgICAgewpAQCAtOTUzLDcgKzk1NSwxMCBAQCB2b2lk
IEpJVDo6bGluaygpCiAgICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJp
bmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkuZGF0YSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gd2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+
KG1fYXJpdHlDaGVjayk7Ci0gICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRD
b2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSk7CisgICAg
bV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJp
dHlDaGVjaykpOworCisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBXVEZNb3ZlKG1f
dW5saW5rZWRDYWxscyk7CisgICAgbV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9zID0gV1RG
TW92ZShtX2V2YWxDYWxsTGlua0luZm9zKTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9z
ZSkKICAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAl
cCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51
bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0
cigpKTsKQEAgLTk2OCw2ICs5NzMsOCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXpl
T25NYWluVGhyCiAKICAgICBtX2xpbmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25U
YXNrcygpOwogCisgICAgbV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNzKTsKKwogICAg
IHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2Nr
KTsKICAgICAgICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KGxvY2tlciwgQ29kZUJsb2NrOjpT
aHJpbmtNb2RlOjpMYXRlU2hyaW5rKTsKQEAgLTEwNDIsMTQgKzEwNDksMTQgQEAgdm9pZCBKSVQ6
OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwogICAgICAgICBtX3ZtLT50eXBlUHJvZmls
ZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQcmVwYXJpbmcgZm9yIEpJVCBjb21w
aWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihD
b2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9y
KFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSA9PSBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7CiAKICAgICByZXR1cm4gcm91bmRM
b2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJPZmZzZXQoY29kZUJsb2NrLT5udW1DYWxs
ZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3RlcnMpOwog
fQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3Rl
ckNvdW50Rm9yKGNvZGVCbG9jaykgLSAxKS5vZmZzZXQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsMzIgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKKyAgICBjbGFzcyBKSVRDb25zdGFudFBvb2wgeworICAgIHB1YmxpYzoKKyAgICAgICAg
dXNpbmcgQ29uc3RhbnQgPSB1bnNpZ25lZDsKKworICAgICAgICBlbnVtIGNsYXNzIFR5cGUgOiB1
aW50OF90IHsKKyAgICAgICAgICAgIEdsb2JhbE9iamVjdCwKKyAgICAgICAgICAgIENhbGxMaW5r
SW5mbywKKyAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvLAorICAgICAgICB9OworCisgICAg
ICAgIHN0cnVjdCBWYWx1ZSB7CisgICAgICAgICAgICBUeXBlIHR5cGU7CisgICAgICAgICAgICBQ
YWNrZWRQdHI8dm9pZCo+IHBheWxvYWQ7CisgICAgICAgIH07CisKKyAgICAgICAgQ29uc3RhbnQg
YWRkKFR5cGUgdHlwZSwgUGFja2VkUHRyPHZvaWQqPiBwYXlsb2FkID0gbnVsbHB0cikKKyAgICAg
ICAgeworICAgICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudHMuc2l6ZSgpOwor
ICAgICAgICAgICAgbV9jb25zdGFudHMuYXBwZW5kKFZhbHVlIHsgdHlwZSwgcGF5bG9hZCB9KTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIFZlY3RvcjxWYWx1ZT4gbV9jb25zdGFudHM7CisgICAgfTsKKwogICAgIGVudW0gT3Bj
b2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CkBA
IC0xNDksOSArMTc1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBD
YWxsQ29tcGlsYXRpb25JbmZvIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQ
YXRoU3RhcnQ7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247Ci0g
ICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOworICAgICAgICBVbmxpbmtlZENhbGxM
aW5rSW5mbyogdW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQ7CiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwpAQCAtMTg4LDggKzIxNCw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29k
ZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAgICAgfQogCi0gICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7Ci0gICAgICAg
IHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOworICAgICAgICBz
dGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7
CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJs
b2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmlu
ZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBpbGVUaW1lKCk7CkBAIC0yMjMsNiArMjQ5LDI3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25z
dCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25z
dCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0
IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9y
ZThUb01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKwor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmUz
MlRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBH
UFJSZWcpOworCisgICAgICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50SW5k
ZXgsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcpOworCiAg
ICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAgICAgICB7
CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7CkBA
IC0yNTgsMTYgKzMwNSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVf
aWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6
Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICAmJiBPcDo6b3Bj
b2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVw
RnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0Nv
bnN0YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjpl
bmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3Mg
fHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8fCBP
cDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29tcGls
ZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5r
SW5mb0NvbnN0YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAg
Ym9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9w
JiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwogICAgICAgICB2b2lkIGNv
bXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwpAQCAtMjkxLDEwICszMzgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGlu
IHJlZ1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRj
aC4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKLSAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEdQ
UlJlZyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIC8vdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7CisgICAgICAgIC8v
dm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEdQUlJlZyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUm
LCBKU1ZhbHVlUmVncyk7CiAjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1
ZVJlZ3MpOwpAQCAtMzA3LDYgKzM1NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZv
aWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJy
YXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFy
cmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBz
Y3JhdGNoR1BSKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNN
QU1vZGUgZWNtYU1vZGUoT3ApOwpAQCAtNTkyLDcgKzY0MSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAg
LTY0NSw3ICs2OTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgICAgICB2b2lkIGVt
aXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQp
OwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAg
IHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpOworICAgICAgICB2b2lk
IGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCk7CiAgICAgICAg
IHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxW
YXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVW
YXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CkBAIC02NTQsNiArNzAyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0
ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgICAgIGJvb2wgaXNLbm93bkNlbGwo
VmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFs
UmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVn
aXN0ZXIpOwpAQCAtNjk1LDI2ICs3NDQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IHJldHVybiAhKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBSZXNv
bHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKICAgICAgICAgfQog
Ci0jZGVmaW5lIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBc
Ci0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9w
X2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBG
T1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0j
dW5kZWYgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVu
ayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKLQotICAgICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gTW9kdWxlVmFyIGJlY2F1c2Ug
aXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gZW1pdCBpbmxpbmUgdGhhbiB1c2UgYSB0aHVuay4KLSAg
ICAgICAgICAgIC8vIFJlc29sdmVkQ2xvc3VyZVZhciBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGVz
ZSB0eXBlcyB3aXRoIG9wX3Jlc29sdmVfc2NvcGUuCi0gICAgICAgICAgICByZXR1cm4gIShyZXNv
bHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFy
KTsKLSAgICAgICAgfQotCi0jZGVmaW5lIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1Io
cmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0m
KTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9H
RU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29s
dmVTY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9w
R2V0RnJvbVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIq
IHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhzdGQ6Om9wdGlvbmFsPFJlc29s
dmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZN
Jik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mKTsKQEAgLTkxOCwxMSArOTQ5LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGlt
aXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9w
dGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7IH0K
ICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0
UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdp
dGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNoIGNh
c2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmls
aW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTkzMCwxMyArOTU5LDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAg
IHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8v
IElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5k
IHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0
IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0
IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3Qg
cGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0
aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAogICAgICAgICBJbnRlcnBy
ZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtOTYzLDkgKzk4NSw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZl
Y3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25l
ZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0
X3QsIEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9jb3BpZWRBcml0aFByb2ZpbGVzOwotCiAgICAgICAg
IEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlv
bkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjazsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCkBAIC05OTksMTEgKzEwMTgsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hN
YXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4g
bV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9j
YW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwog
ICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRl
eCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJ
VENvZGU+IG1faml0Q29kZTsKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAg
ICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0
YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBtX2dsb2JhbE9iamVjdENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpIH07CisgICAgICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENh
bGxzOworICAgICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAg
ICAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsK
KworICAgICAgICBHUFJSZWcgbV9tZXRhZGF0YUdQUjsKKyAgICAgICAgR1BSUmVnIG1fY29uc3Rh
bnRzR1BSOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTIsOSArMjkyLDEwIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoVmkKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29u
c3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMjAsNyArMzIxLDggQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDYs
NyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAg
ICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIs
IHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/
IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0zNzIsNyArMzc1LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlz
IG5vdCBJbnQuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1Qw
LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFpl
cm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3
MjEsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQg
SklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFy
aXRoUHJvZmlsZSk7CisgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3Vu
bGlua2VkQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmVnYXRlPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBt
X21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9N
YXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBp
dCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2lu
Y2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdh
dGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJv
ZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5MDMsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2Fk
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+
KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBh
ZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFy
eUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1fcHJvZmlsZUlu
ZGV4KTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQ
cm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlv
biwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3Ry
dWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9
CkBAIC05NDUsMTAgKzk0OSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlN
YXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlu
bGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElu
bGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1h
dGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQ
Uik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQot
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNS
ZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncywgYXJpdGhQ
cm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIs
IHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUsMTAgKzEwMjAsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgICAgICBlbHNlIGlmIChyaWdo
dE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3Jh
dGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5n
KCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BS
LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRS
ZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9u
UHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0
UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwxMyArMTA2MSwxNCBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFBy
b2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xv
d1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1t
UHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQs
IHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFy
aXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpf
SklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1Q
dHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9u
X0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1
c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1
dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwxMyArMTEyNywxNCBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAjZW5kaWYKIAogICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVt
aXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3Vs
ZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUp
OwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dK
Sk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1p
Yz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJl
Z3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykK
ICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExNjYsNyArMTE3NCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxkRW1pdFByb2Zp
bGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGFy
aXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tX3Byb2ZpbGVJbmRleCk7CiAKICAgICBTbmlw
cGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsK
ICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMu
c2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjE5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNv
bnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKSk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9t
YXRoSUNzLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0
aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxP
cE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4ICsxMjM1LDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigp
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3Vi
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlB
cml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKSk7CisgICAgSklUU3Vi
SUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9p
bnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBl
bWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENh
bGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAg
ICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6
Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdU
MSwgcmVnVDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3Rh
Y2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7
CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAg
ICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDcgKzM0MSw2IEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0
Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQo
KSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsNyArNTMsNyBAQCBzdGQ6
OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6
Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9
IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
IGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQg
Y2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7CiAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CkBAIC03OCw3ICs3OCw3IEBA
IHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8
fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5r
SW5mb0NvbnN0YW50KQogewogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29k
ZS5tX3RoaXNWYWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUu
bV9hcmd1bWVudHM7CkBAIC0xMDYsOSArMTA2LDEwIEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmIGJ5dGVjb2QKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50Lgog
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2Fk
T2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7Ci0gICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNo
MzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMiwgaW5mby0+YWRkcmVz
c09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7CisgICAgbG9hZENvbnN0YW50KGNh
bGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENh
bGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwgcmVn
VDMpOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMywgcmVnVDIp
OworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0
T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CiAgICAgbm90QmlnZ2VzdC5saW5r
KHRoaXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgpAQCAtMTI3LDE2ICsxMjgs
MTYgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpCiB0ZW1wbGF0ZTw+CiBi
b29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVjb2RlKQogewot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgc3Rv
cmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVy
RnJhbWVPZmZzZXQoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdU
Mik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUu
dmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsK
IApAQCAtMTQ4LDcgKzE0OSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
b25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9
IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
KTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFkZChDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0lu
Zm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5t
X2FyZ3Y7CkBAIC0xNTYsNDMgKzE1Nyw0NiBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNp
emVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUg
LSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxDYWxs
KCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3Zp
bmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2Rl
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxs
KGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCi17Citib29sIEpJVDo6Y29tcGls
ZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCwgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCkgewogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxh
dGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29k
ZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK2Jvb2wg
SklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2Vk
Q2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxsRnJhbWVT
aHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0g
Ynl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BS
SW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0gbWFr
ZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFz
c2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVn
aXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICBzaHVmZmxlRGF0YS0+bnVt
TG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRl
Y29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2Fy
Z2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkg
ewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgc2h1ZmZsZURhdGEtPmFy
Z3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAog
ICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhp
KSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwogICAg
IH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQ
UihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVS
ZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1
ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQ
UihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZl
UmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKIAotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGluZm8t
PmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6
VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCBz
aHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgbG9hZENvbnN0YW50KGNhbGxM
aW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExp
bmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBb
Jl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgKnNodWZmbGVEYXRhKS5wcmVw
YXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwor
CisgICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CisgICAgaW5mby0+ZnJhbWVTaHVmZmxl
RGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBs
YWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9u
ZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjE4LDMyICsyMjIsNDAgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBp
bml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3Jl
cyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KLSAgICBDYWxsTGlua0lu
Zm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0g
ICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOwor
CisgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0gVUlOVF9NQVg7CisgICAgaWYgKG9wY29k
ZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5m
byA9IG1fdW5saW5rZWRDYWxscy5hZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86
OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsKKworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOwor
CisgICAgICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5r
SW5mb0luZGV4KTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29t
cGlsYXRpb25JbmZvKCkpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLnVubGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGlu
Zm9Db25zdGFudDsKKworICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5m
b0NvbnN0YW50KTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8g
Ynl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsK
LSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgp
LmJpdHMoKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0
cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRh
Z09mZnNldCkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsg
Ly8gcmVnVDAgaG9sZHMgY2FsbGVlLgogICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3Moc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKIAogICAgIGlm
IChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NF
UlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0g
ICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCBy
ZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25J
bmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2Fs
bExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGlu
Zm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2Rl
LCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkKICAgICAgICAgcmV0dXJu
OwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFudCwgcmVnVDIpOwogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6
ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKKyAg
ICAgICAgICAgIC8vIE9PUFMKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
ICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9KTsK
QEAgLTI1MywxMyArMjY1LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3Ry
dWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5m
by0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0
YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBs
YWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsK
IAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCArMjg1
LDIyIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKLSAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdz
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKKyAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgeworICAg
ICAgICAvLyBPT1BTCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICB9CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDMpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExp
bmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlzKTsKKyAgICBDYWxsTGlua0luZm86OmVt
aXREYXRhSUNTbG93UGF0aCgqbV92bSwgKnRoaXMsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7CiAgICAgICAgIGFi
b3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4o
KTsKQEAgLTQwNCw3ICs0MTgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNv
bnN0IEluCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5
SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25leHQpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKQEAgLTQ5Myw3ICs1MDcsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7
CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3Mg
eyBkb25lR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBK
U1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9p
bnQoKTsKICAgICB9CkBAIC01MTIsNyArNTI2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0
b3JfbmV4dChjb25zdCBJbgogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSk7CisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIg
fSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFs
dWVHUFIpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDEwICsxNTks
MTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlw
ZSkKICAgICB7CisgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkg
Ly8gT09QUworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmICghT3B0aW9uczo6
dXNlRGF0YUlDKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAg
fQogCkBAIC0yNDgsNiArMjQ4LDQxIEBAIHByb3RlY3RlZDoKICAgICBDb2RlUmVmPEpTRW50cnlQ
dHJUYWc+IG1fcmVmOwogfTsKIAorY2xhc3MgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2
b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9h
ZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICAgICAgbV9tdWxJQ3MgPSBXVEZN
b3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAgICAgICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1f
bmVnSUNzKTsKKyAgICAgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKKyAg
ICB9CisKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisgICAgSklU
TXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJl
dHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorICAgIEpJVFN1YklDKiBhZGRKSVRT
dWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJQ3Mu
YWRkKGFyaXRoUHJvZmlsZSk7IH0KKyAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmls
ZSk7IH0KKworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5l
cmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0
aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVl
Pjo6dHlwZT4KKyAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJv
ZmlsZSkgeyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3Rk
Ojppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAg
IEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJu
IGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJh
dG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5l
cmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRTdWJJQyogYWRk
TWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMo
cHJvZmlsZSk7IH0KKworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAg
IEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAg
ICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKwogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoRGlyZWN0SklUQ29kZSk7CiBjbGFzcyBEaXJlY3RKSVRDb2RlIDogcHVi
bGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NB
VEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKERpcmVjdEpJVENvZGUpOwpAQCAtMjY2LDYgKzMwMSwx
NiBAQCBwcml2YXRlOgogICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV93aXRoQXJpdHlDaGVj
azsKIH07CiAKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBw
dWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29kZVJl
ZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNo
ZWNrKQorICAgICAgICA6IERpcmVjdEpJVENvZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hl
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgIHsgfQorCisgICAgQmFnPFVubGlua2VkQ2Fs
bExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFs
Q2FsbExpbmtJbmZvczsgLy8gT09QUzogbWFrZSBzdXJlIHdlIHZpc2l0IHRoZXNlIHNvbWVob3cu
IE9yIGFzc2VydCB3ZSBkb24ndCBoYXZlIHRvLCBzaW5jZSB0aGV5J3JlIHZpcnR1YWwgY2FsbHMu
Cit9OworCiBjbGFzcyBOYXRpdmVKSVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7
CiBwdWJsaWM6CiAgICAgTmF0aXZlSklUQ29kZShKSVRUeXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1
ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAi
TGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKQEAgLTQ2LDEw
ICs0Nyw5IEBAIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmYKIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENh
bGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKLSAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
LSAgICAsIG1faml0VHlwZShqaXRUeXBlKQorICAgIDogbV9qaXRUeXBlKGppdFR5cGUpCiB7Ci0g
ICAgbV9zdHViSW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFj
Y2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5m
byA9IGNvZGVCbG9jayA/IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9y
aWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUluZGV4
ID0gY2FsbFNpdGU7CiAKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lz
dGVyczsKQEAgLTU5LDcgKzU5LDYgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Zmlu
YWxpemUoCiAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpCiB7CiAgICAgbV9z
dHViSW5mby0+c3RhcnQgPSBzdGFydDsKLQogICAgIG1fc3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9
IGZhc3RQYXRoLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obV9kb25lKTsKIAogICAgIGlm
ICghSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCkBAIC02Nyw2ICs2NiwxNSBAQCB2b2lk
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBtX3N0dWJJbmZvLT5zbG93
UGF0aFN0YXJ0TG9jYXRpb24gPSBzbG93UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPihtX3Nsb3dQYXRoQmVnaW4pOwogfQogCit2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
OjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBtX3N0YXJ0
ID0gaml0LmxhYmVsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1f
aml0VHlwZSkpOworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0cnVjdHVyZVN0dWJJ
bmZvR1BSKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRy
VGFnKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJZEdlbmVyYXRvcjo6
SklUQnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRU
eXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywg
SlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4
LDUxIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNsYXNz
IENhbGxTaXRlSW5kZXg7CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBTdHJ1
Y3R1cmVTdHViSW5mbzsKIAogZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90OwogZW51bSBj
bGFzcyBKSVRUeXBlIDogdWludDhfdDsKIAorc3RydWN0IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3Rl
cnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSByZWdUMTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IHJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gcmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJl
Z1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHJlc3VsdCA9IHJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gcmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwor
fTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSByZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eSA9IHJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gcmVnVDI7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QzOworfTsKKworc3RydWN0IEJh
c2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gcmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHkgPSByZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IHJlZ1QyOworICAgIC8vIFdl
IHJlbHkgb24gdGhpcyB3aGVuIGxpbmtpbmcgYSBDb2RlQmxvY2sgYW5kIGluaXRpYWxpemluZyBy
ZWdpc3RlcnMgZm9yIGEgR2V0QnlWYWwgU3R1YkluZm8uCisgICAgc3RhdGljX2Fzc2VydChiYXNl
ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0
YXRpY19hc3NlcnQocmVzdWx0ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7
CisgICAgc3RhdGljX2Fzc2VydChzdHViSW5mbyA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpzdHViSW5mbyk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJl
Z1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDQ7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSByZWdUNTsKK307CisKIGNsYXNzIEpJ
VElubGluZUNhY2hlR2VuZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcigpIHsgfQpAQCAtNjIsOSArMTAyLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFs
aXplKAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXIm
IHNsb3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKEpJVCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9Db25z
dGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogbV91bmxpbmtlZFN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7IHN0ZDo6bnVtZXJp
Y19saW1pdHM8SklUQ29uc3RhbnRQb29sOjpDb25zdGFudD46Om1heCgpIH07CisKIHByb3RlY3Rl
ZDoKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwog
ICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwz
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5k
Q29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlz
Q29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIGlm
ICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgp
OworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0
dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlu
a1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6
OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25z
dGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KSB7CisgICAgICAgIC8vIE9PUFM6IGZpbmQg
YSB3YXkgdG8gYXNzZXJ0IHRoYXQgYWxsIGxpbmsgdGltZSBjb25zdGFudHMgYXJlIGNlbGxzLgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzQ2VsbCgpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25z
dGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICBBU1NFUlQoc3JjLmlzQ29u
c3RhbnQoKSk7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAg
IFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKHNyYykgIT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNv
bnN0YW50KTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQpAQCAtMTg1LDcgKzIx
MCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKIAogQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAo
IW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVn
KSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAg
QUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklU
OjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSht
X2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBt
X2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1f
Y2hlY2twb2ludExhYmVscy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3
ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7
CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBz
aG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28g
dGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFT
U0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkt
Pmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsg
MSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2Rl
SW5kZXgpOwpAQCAtMjkzLDI5ICszMTgsMzQgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFu
dENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQo
KSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQotaW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9m
aWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKTsKLQotICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25l
IGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1
Y2tldHMpOwotI2Vsc2UKLSAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0g
Yml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNr
ZXRzKTsKLSAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0
cy5wYXlsb2FkKTsKLSAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNC
aXRzLnRhZyk7Ci0jZW5kaWYKLX0KKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Okxp
bmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Cit9CisKKy8vIE9PUFMKKy8vaW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9m
aWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKy8veworLy8gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9m
aWxpbmcoKSk7CisvLworLy8gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjog
b25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAorLy8gICAgLy8gc3Rv
cmUuCisvLyNpZiBVU0UoSlNWQUxVRTY0KQorLy8gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFs
dWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyNlbHNlCisvLyAgICBFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2
YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigp
LCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOworLy8gICAgc3RvcmUzMih2YWx1ZS50YWdH
UFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOworLy8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNs
dHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lk
PiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2Rl
KQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApKTsKICNlbmRpZgpAQCAtMzIzLDI0ICszNTMsMjUgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFk
YXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBt
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4K
K2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYg
Ynl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2Zp
bGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1
ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1
ZSk7CisgICAgcHRyZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZv
cjxCeXRlY29kZT4obV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6
Om9mZnNldE9mRmlyc3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNz
KG1fbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLWlubGlu
ZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJv
ZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZh
bHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7Ci19CisvL2lubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BS
UmVnIHJlc3VsdFJlZykKKy8veworLy8gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVBy
b2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworLy99CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFk
YXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVj
b2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgR1BSUmVnIHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRp
ZgogCkBAIC0zNjAsNiArMzkxLDE1IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVcKICAgICB9CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGlu
ZSB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQoreworICAg
IGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOworICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YShzY3JhdGNoR1BSLCBieXRlY29kZSwg
Qnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxl
OjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgfQorfQorCiBBTFdBWVNfSU5M
SU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNy
YykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwpAQCAt
MzgwLDcgKzQyMCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIK
IGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBS
ZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29u
c3RhbnRSZWdpc3RlcihyZWcpOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29u
c3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwog
ICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUp
OwogICAgIH0gZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUp
OwpAQCAtNDk2LDcgKzUzNiw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxS
ZWdpc3QKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmly
dHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChy
ZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXND
b25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxz
ZQpAQCAtNTA2LDcgKzU0Niw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmly
dHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9j
ay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAg
ICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNCwxMSArNTU0LDYgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1
cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7
Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0
dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9w
LCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3Ax
KSkgewpAQCAtNTQ0LDcgKzU3OSw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRW
aXJ0dWFsUmUKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRo
YXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7
Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsK
KyAgICAgICAgLy8gT09QUzogaGFuZGxlIGxpbmsgdGltZSBjb25zdGFudHMgaGVyZS4uLgorICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyk7CiAgICAgICAgIGlm
ICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwogICAgICAgICBlbHNlCkBAIC01NjYsMTEgKzYwMiw2
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklU
Ojppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVy
biBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsK
LX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBh
ZGRyZXNzRm9yKGRzdCkpOwpAQCAtNTk1LDcgKzYyNiw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2UKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykK
IHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlz
S25vd25DZWxsKHZSZWcpKQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
KTsKIH0KIApAQCAtNjM3LDMwICs2NjgsNyBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBU
YXJnZXQoY29uc3QgCiB7CiAgICAgaWYgKHRhcmdldCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsK
LSAgICByZXR1cm4gbV9jb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24p
OwotfQotCi1BTFdBWVNfSU5MSU5FIEdldFB1dEluZm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9w
UHV0VG9TY29wZSBieXRlY29kZSkKLXsKLSAgICB1bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21l
dGFkYXRhSUQgKyAxOyAvLyBIYXNoTWFwIGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0
byBpdGVyYXRvciA9IG1fY29waWVkR2V0UHV0SW5mb3MuZmluZChrZXkpOwotICAgIGlmIChpdGVy
YXRvciAhPSBtX2NvcGllZEdldFB1dEluZm9zLmVuZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0
SW5mbyhpdGVyYXRvci0+dmFsdWUpOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2dldFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQ
dXRJbmZvcy5hZGQoa2V5LCBnZXRQdXRJbmZvLm9wZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1
dEluZm87Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBC
aW5hcnlBcml0aFByb2ZpbGUgSklUOjpjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNv
ZGUpCi17Ci0gICAgdWludDY0X3Qga2V5ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlP
cDo6b3Bjb2RlSUQpICsgMSkgPDwgMzIgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUu
bV9tZXRhZGF0YUlEKTsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVz
LmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVu
ZCgpKQotICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7Ci0gICAgbV9jb3BpZWRBcml0aFByb2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmls
ZSk7Ci0gICAgcmV0dXJuIGFyaXRoUHJvZmlsZTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVC
bG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgpAQCAtNjgxLDYgKzY4OSw1MiBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJ
VDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0
ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQ
UlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2Rl
KSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29k
ZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMy
KEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5v
ZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9h
ZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBH
UFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQ4KEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgbV91bmxp
bmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUp
ICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwg
dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFk
YXRhKFZhbHVlVHlwZSB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zm
c2V0KQoreworICAgIHN0b3JlOCh2YWx1ZSwgQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBtX3VubGlu
a2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkg
KyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6c3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRk
cmVzcyhtX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNl
dEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2lu
dGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwg
R1BSUmVnIHJlc3VsdCkKK3sKKyAgICBhZGRQdHIobV9tZXRhZGF0YUdQUiwgVHJ1c3RlZEltbVB0
cihtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
Ojpsb2FkQ29uc3RhbnQoSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBH
UFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhtX2NvbnN0YW50c0dQUiwgc3Rh
dGljX2Nhc3Q8dWludHB0cl90Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7
CisgICAgbG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI4
MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNo
KGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFt
ZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNo
T2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZD
YXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50
KCkpIHsKKyAgICAgICAgLy8gT09QUwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAg
ICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBh
ZGRyZXNzRm9yKGRzdCkpOwpAQCAtODcsMzcgKzg4LDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2pt
cChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0g
ICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUo
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwg
YWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAog
ICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0
b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBS
ZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxw
dHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRv
cjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdElu
aXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0
OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBvZmZzZXRPZkFsbG9jYXRvcigp
LCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3
T2JqZWN0OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBvZmZzZXRPZlN0cnVj
dHVyZSgpLCBzdHJ1Y3R1cmVSZWcpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGF1
dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0QWxsb2NhdGVK
U09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVn
LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBsb2Fk
OChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSwgc2NyYXRjaFJlZyk7CisgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJl
Zywgc2NyYXRjaFJlZyk7CisgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIFJlZ2lzdGVySUQg
c3RydWN0dXJlUmVnID0gcmVnVDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFs
bG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CisgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0
dXJlUmVnKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBA
IC0zNzQsNyArMzczLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9u
KgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgp
OwogI2Vsc2UKQEAgLTM4NSw3ICszODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0m
IHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBq
aXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZl
UmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQxMCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3By
aW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVy
dHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQsOSAr
NDMyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZvaWQg
SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0
aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlv
biwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
bmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
b3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0NjQs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5j
aElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsK
ICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNGYWxz
ZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzQ4MSw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyArNTIw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8vIEZp
cnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBi
aXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJn
ZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7
CiAKQEAgLTU0Myw3ICs1NDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3Qg
SW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRh
cmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTYyNSw4ICs2
MjYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJy
YW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0
KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNU
cnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY0Myw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBy
ZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyAr
Njk4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJl
Z1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcg
KzcxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRo
cm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtOTA4LDcgKzkxMiw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05
MTgsNyArOTIzLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVx
PigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsK
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCkBAIC05OTMsNyArOTk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0
Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZy
YW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihU
cnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0
Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25J
ZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyArMTAxNywxMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1l
bnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZm
ZXI7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBj
YWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gs
ICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5k
VmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRW
YWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8g
c2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwotICAg
IGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+
Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewot
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSks
IHJlZ3MpOwotICAgICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9
CiAKQEAgLTExMTIsNyArMTEwNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmco
Y29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVz
dHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1
Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2Rl
YnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTEx
NDgsNyArMTE0Myw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QK
IAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9u
dWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzEwLDIzICsx
MzA0LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQg
SklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhp
cz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNo
ZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3Jj
RHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwog
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUp
KTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1
Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5t
X2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0g
Jm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVn
VDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQg
cmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcgKzEzMzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVn
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkg
LSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9m
ZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJl
Zyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7Cisg
ICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlzOjpvZmZzZXRPZkNh
Y2hlZEZ1bmN0aW9uKCksIGNhY2hlZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0
aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVk
SW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7
CiAgICAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzYy
LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJu
VmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4
Miw3ICsxMzczLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihU
cnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIs
IEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxMzg2LDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyAr
MTM5Nyw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQx
OCwxMCArMTQxMiwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20o
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rv
cjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFz
SW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFy
Z3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjAp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BS
MiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BS
LCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xNTA5LDcgKzE1MDQsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMTU2NCw3ICsxNTYwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJ
bnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVn
ZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdl
eHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IEdQUlJlZzo6YXJndW1lbnRHUFIwOworICAg
IGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiB9CiAKQEAgLTE2NjQsMTMgKzE2NjIsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2FzeW5jX2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0g
Ynl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwogICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxl
LCByZWdUMCwgc2l6ZSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVj
b2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxl
KCksIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2Zp
bGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MSwgcmVnVDAsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9z
aXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjc5LDE0ICsx
Njc2LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNp
emVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZB
cnJheUFsbG9jYXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdExvYWQo
c2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9m
aWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkp
OwogI2VuZGlmCiB9CiAKQEAgLTE2OTQsOCArMTY5MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91
YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhl
IHR5cGUgcHJvZmllbHIgaXMgZW5hYmxlZC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNo
ZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsK
IApAQCAtMTc3NywyMCArMTc3NCwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2No
aWNrZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFy
Z0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93
Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwotICAg
IEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1h
cmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBl
bnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFS
ZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5v
bkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVuc3VyZVNoYWRvd0NoaWNr
ZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcp
OworICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
LCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBy
ZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBK
U1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1Bh
Y2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1
cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB1c2luZyB0aGUgY29udHJvbCBm
bG93IHByb2ZpbGVyLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNp
Y0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlz
KTsKQEAgLTE4NjAsNyArMTg2MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChj
b25zdCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxODg3LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCks
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNl
cyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5MiArNDksMTAzIEBAIG5hbWVzcGFjZSBK
U0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7
CiAKLSAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6
OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgaWYgKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBP
cHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CisgICAgICAgIGF1
dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAg
ICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2Ny
YXRjaEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7
CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEp
LCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChw
cm9wZXJ0eSkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0g
dHJ1ZTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBhZGRTbG93Q2FzZSgpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgICAgIC8v
IE9PUFMuIFN1cHBvcnQgdGhpcworICAgICAgICAvL2lmIChpc09wZXJhbmRDb25zdGFudEludChw
cm9wZXJ0eSkpCisgICAgICAgIC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIg
PSB0cnVlOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1
bHRSZWdzKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIH0KLQog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0
QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIp
KSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAg
ICBpZiAoIWhhc0FueVNsb3dDYXNlcyhpdGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCi0gICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOwor
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5k
ZXgrK107CiAKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0
YSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVn
VDEpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgYXJndW1lbnRH
UFIzKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBhcmd1
bWVudEdQUjQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2Fk
Q29uc3RhbnQobV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6
Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbE9wdGlt
aXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNlCi0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7Ci0gICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwotICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0g
bV9ieXRlY29kZUluZGV4KTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChC
eXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQ
UjQ7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJl
Z1QxOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50
R1BSMSk7Ci0KLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVH
UFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0
X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
LQotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpOwotICAg
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRH
UFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2Ug
PT0gcmVnVDApOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHkgPT0gcmVnVDEpOworCisgICAgbG9hZENvbnN0YW50KG1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHBy
b2ZpbGVHUFIpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OworCisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKLSAgICB9CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQpAQCAtMjA2LDcgKzIxNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2
YXRlX25hbWUoY29uc3QKICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKQEAgLTI1MCw3ICsyNjEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjCiAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKQEAgLTY4MCw3ICs2OTEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCBy
ZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzcwMSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJl
Z1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzcxMiw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
Z2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nl
dHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVy
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0
ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0
cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVy
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzA5LDcg
KzcyMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBp
bnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdl
dHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzM0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFs
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVn
VDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc0Mywz
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
RGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMs
IHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJZDsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3Vs
ZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1i
YXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArNzg1LDE3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5
SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRl
QnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwg
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCks
IFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODA5LDE5IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBh
cmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lk
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAg
Q2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODQ1LDIyICs4NjgsMzMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJh
c2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVs
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5
R1BSLCBwcm9wZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBCYXNlbGlu
ZURlbEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBh
dCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0
ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5MTcsMTEgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRl
bGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
Lm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1
bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9w
dGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVu
dEdQUjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCArOTM1LDE5IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVH
UFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52
YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1
ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCkBAIC05NzEsMTIgKzEwMDIsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbgogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTk5Myw3ICsxMDI0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTAwOCw3ICsx
MDM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpLCBkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKQEAgLTEwNDAsMTIgKzEwNzEsMTIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5
cGU6OkdldEJ5SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVn
KTsKIH0KIApAQCAtMTA2Myw3ICsxMDk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF9kaXJlY3QoYwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25H
ZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMTA3OCw3ICsxMTA5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoYwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwg
IWlzQVJNNjQoKSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKQEAgLTEwODks
NyArMTEyMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIApAQCAtMTExOCwxMiArMTE0OSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5
SWQpOworICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTQ0LDEyICsxMTc1LDEy
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KIAogICAgIEpJVEdl
dEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOworICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzV2l0
aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTE2Nyw3ICsxMTk4LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMTE4Miw3ICsxMjEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZChjb25zdCBJbgogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwg
IWlzQVJNNjQoKSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgQ2FsbCBjYWxs
OwpAQCAtMTE5Miw3ICsxMjIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbgogICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCkBAIC0xMjUwLDcgKzEyODEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0
YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjY3LDcgKzEyOTgsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgc3RhdGljX2Fzc2VydCh0
aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAogICAgIENhbGwgY2FsbDsKQEAgLTEyNzcsNyArMTMwOCw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFs
dWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0xMzQxLDcg
KzEzNzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKICAg
ICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgcmVnVDMsIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVj
dCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtMTM2Niw3ICsxMzk3LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlv
bigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
I2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM4Myw3ICsxNDE0LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIHN0YXRpY19hc3NlcnQo
dmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVy
dHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAK
ICAgICBDYWxsIGNhbGw7CkBAIC0xNDQ5LDcgKzE0ODAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjCiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAogICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZWdUMSk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRzLmFw
cGVuZChnZW4pOwpAQCAtMTQ3MCw3ICsxNTAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X2lkKGNvbnN0IElucwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTE0ODUsNyArMTUxNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9i
eV9pZChjb25zdCBJbnMKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwogCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAg
ICAgLy8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFj
dGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGlu
ZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CkBAIC0x
Njg4LDYgKzE3MTksNyBAQCB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdp
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8v
IE9PUFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29s
dmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0x
Nzk0LDU5ICsxODI2LDc3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVU
eXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlw
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVj
b2RlSW5kZXgpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVj
b2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJl
Z1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAg
ICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVl
ZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBl
LgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwor
ICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJk
aWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsK
IAotI2RlZmluZSBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2
ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBU
aHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNP
TFZFX1RZUEUoUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCisgICAgICAgIGF1dG8gY2xvc3VyZVZh
ckdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayhDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2Nv
cGUgQ2xvc3VyZVZhciIpOwogICAgICAgICB9OwotI3VuZGVmIFJFU09MVkVfU0NPUEVfR0VORVJB
VE9SCisKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVy
YXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayhDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5l
OiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7Cisg
ICAgICAgIH07CisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0g
W10gKFZNJikgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29w
ZVRodW5rKHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMi
KTsKKyAgICAgICAgfTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0g
cmVnVDc7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBl
XSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9z
dXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2
bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jl
c29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNv
bnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZl
VHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUg
dGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBM
TEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAg
IHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBz
bG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsK
ICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJU
KHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1Jl
dHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBy
ZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSks
IHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1w
TGlzdCBzbG93Q2FzZTsKIApAQCAtMTg1NSwyNiArMTkwNSwyNiBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlm
IChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFs
T2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RH
UFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwog
ICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVD
VF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJl
Z1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVn
VDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwg
T0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQp
KSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFk
ZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0z
MihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3Vy
ZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNj
b3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKKyAgICAg
ICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRo
KSksIHJlZ1QxKTsKIAotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVt
cCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9
IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QxKTsKICAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlz
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNl
dE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVnVDEpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAg
ICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmpp
dCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKSB7CkBAIC0xODgyLDEyICsxOTMyLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAg
IC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxC
aW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9m
ZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAg
IG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9i
amVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAg
ICAgICAgICAgaml0Lm1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCkBAIC0xODk3LDExICsxOTQ3LDExIEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9y
IEdsb2JhbFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAg
ICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9u
bWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwg
cmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyOgpAQCAtMTkwOSw3ICsxOTU5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFy
OgpAQCAtMTkxOSw4MyArMTk2OSw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsK
LSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAg
ICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQot
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUg
PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpy
ZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDApOwog
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
bm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmso
dGhpcyk7CisgICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlKSB7CisgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlKTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7
CisgICAgICAgICAgICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAg
IGVtaXRDYXNlKEdsb2JhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsK
KyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuanVtcCgpKTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9F
bmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShy
ZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldCgpOworICAgIGpp
dC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVO
S19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5k
bGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0g
ICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VI
YW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bSgpLmdl
dENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1
bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0m
IHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BS
ZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0g
ICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcFJlc29s
dmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAj
cmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9SRVNP
TFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFU
T1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3Bf
cmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVy
YXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNl
bGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3Mu
CiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwNjUsNiArMjA3Nyw3IEBAIHZvaWQgSklUOjplbWl0R2V0
Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0yMTc4LDcgKzIxOTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCkBAIC0yMjA2LDMxICsyMjE5LDQxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEkKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNl
dCkgPT0gbV9ieXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCisgICAgYXV0
byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICByZXR1cm4gSklUOjpn
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRf
ZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVy
biBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7Cisg
ICAgfTsKKworICAgIGF1dG8gZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvciA9IFtdIChWTSYp
IHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6
bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBnZW5lcmljIik7CisgICAgfTsK
KwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IHJlZ1Q1OwogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikg
ewotICAgICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2lu
dGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5v
ZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFP
ZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFU
YWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29s
dmVUeXBlKSBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAg
ICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAg
ICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAg
ICAgICB9OwotI3VuZGVmIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0
YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0
YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwotICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGNvZGU7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikK
KyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAg
ZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdl
dENUSVN0dWIoZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWRO
ZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8
UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAg
Ly8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0
aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KQEAgLTIyMzksNzcgKzIyNjIsNjggQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BH
ZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIg
PSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVM
RUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwog
Ci0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJl
Z1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRk
UHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAg
IGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwg
aW50MzJfdCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCkgewotICAgICAgICBsb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAg
ICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hU
ZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1
Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFw
cGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
ID0gWyZdIChHUFJSZWcgc2NvcGVHUFIpIHsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAg
ICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKICAgICB9OwogCiAgICAgYXV0
byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldh
dGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxP
YmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CiAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0Ojpv
ZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9Owog
ICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJh
bmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBv
cGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAg
IGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFu
ZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9w
ZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCiAgICAg
YXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3Bl
cmFuZEdQUikgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0
ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAg
ICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
KSwgcmVnVDApOworICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5k
R1BSKTsKKyAgICAgICAgaml0LmFkZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQUik7CisgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CiAgICAgfTsKIAotICAgIGF1dG8gZW1pdENvZGUg
PSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJh
bmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkg
ewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JK
RUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sg
Y292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3Ig
YW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29w
ZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJl
ZyByZXN1bHQgPSByZWdUMDsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0g
cmVnVDE7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKIAot
ICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4g
SnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAgICAgICAg
ICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7
CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAg
ICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CiAgICAg
ICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9w
ZXJhbmQoKSksIG9mZnNldCk7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAg
ICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAg
ICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAg
ICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBKdW1w
IGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBU
cnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQu
YWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAg
ICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gp
OwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRv
UHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRj
aCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICAg
ICAgICAgIGppdC5uZWczMihvZmZzZXQpOworICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRv
UHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KHNj
cmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgpAQCAtMjMxNywyMSArMjMzMSwxOSBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwg
cmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAg
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0g
ICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAg
ICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsK
ICAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAg
ICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM0MSw3OSArMjM1Myw1NiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAg
c3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNU
X09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVz
b2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0g
ICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwg
dHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJl
c29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAg
ZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhp
cyk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9m
ZnNldE9mR2V0UHV0SW5mbygpKSwgcmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZElt
bTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGlu
dG8gVDAKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5s
aW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9
IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOwor
ICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAg
ICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAg
aXNHbG9iYWxQcm9wZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7
CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluaygmaml0KTsKIAotICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBza2lwVG9FbmQubGluayh0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0
Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwg
ZmFsc2UpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAg
ICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9
PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRk
cmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpKSk7CiAKLSAgICBy
ZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlz
LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRv
IHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3Bl
R2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25M
YWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlv
bkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5F
X0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5
cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICgh
dGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAg
IHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGpp
dC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3Bf
Z2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xW
RV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dF
VF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAg
ICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsg
d2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQpAQCAtMjQ3MSw4NiArMjQ2MCw3
OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsK
LX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRk
cmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5k
aXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAg
IGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCBy
ZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQ
dXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIo
cmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlh
YmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KLQogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Nj
b3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZv
IGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUq
KiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRw
dHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0
YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBl
IHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBb
Jl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5
cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNr
IGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9y
IGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2Nv
cGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICAv
LyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2Fj
aGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAg
ICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3Ig
dGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdU
MCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAg
ICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAg
ICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpvZmZzZXRP
Zk9wZXJhbmQoKSwgcmVnVDEpOwogICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAg
ICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJh
c2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAt
IDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgLy8gT09QUzogd291
bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgR1BSUmVncworICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAg
ICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2Ug
R2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2Nr
KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7CiAgICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0g
ICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisKKyAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0
aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYm
IChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBw
cm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5k
U2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAg
ICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dh
dGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9p
bnRTZXQoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChy
ZWdUMSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qx
KTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAg
ICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sg
YSBHUFJSZWcgZm9yIHZhbHVlLgorICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFu
ZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBs
b2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCks
IHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOwor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAg
c3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgU2NhbGVFaWdodCwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKworICAgICAgICAgICAgLy8g
T09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcg
Zm9yIG93bmVyL3ZhbHVlLgogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IE1vZHVsZVZhcjoKQEAgLTI1NjQsNTggKzI1NDYsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAg
ICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdl
IGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5k
aW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBl
bWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwot
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNl
ZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2Ug
Y2FuIGNvbXBpbGUgdGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBz
aW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBh
IENsb3N1cmVWYXIsCisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJ
ZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENs
b3N1cmVWYXIKKyAgICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZp
cmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRv
ZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShD
bG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVk
Q2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBl
bHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dElu
Zm8oKSwgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1
bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3Bl
cnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
LmxpbmsodGhpcyk7CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUo
R2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBu
b3RHbG9iYWxWYXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwog
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFs
c2UpOwotICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTMgKzI2MDAsMTYgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRH
ZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVU
eXBlKCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAg
ICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwg
bGlua2VkIENvZGVCbG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUg
TW9kdWxlVmFyLgogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3By
b3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9
IGVsc2UgewogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Nj
b3BlLCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTI3MDEsNyArMjY4MCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCkBAIC0yNzU5LDcgKzI3MzgsNiBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKQEAg
LTI3NjcsNyArMjc0NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChj
b24KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRl
cm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNzg5LDcg
KzI3NjcsNiBAQCB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CkBA
IC0yODA1LDcgKzI3ODIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29u
c3QgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMgdGhlIG1v
c3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2UgaXQgaWYg
d2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51bWVyYXRv
ck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkg
eworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2VudW1l
cmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1v
ZGUpIHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAgICAgICAg
b3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGVudW1l
cmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6bW9kZVNldE9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7
CkBAIC0yODQ3LDc4ICsyODI0LDg2IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4
dChjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9
IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAg
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsK
LSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAK
ICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CiAKLSAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlW
YWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVudW1lcmF0
b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxS
ZWdpc3RlcnM6OnNjcmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
bW9kZSwgc2NyYXRjaDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1l
LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRh
dGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29k
ZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3Jh
dGNoMik7CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIpOworICAgIHN0b3JlOFRvTWV0YWRh
dGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVy
YXRvck1ldGFkYXRhKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKICAgICAvLyBU
aGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgotICAgIEp1bXAgaXNOb3RPd25T
dHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9
IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okdl
bmVyaWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIHN0cnVj
dHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNo
Mik7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3Jh
dGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQuCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4g
dGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxp
bmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJU
b1B0cihyZWdUMywgcmVnVDMpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBU
aW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQorICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgc2ln
bkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4
KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAog
ICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxp
bmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDMpOwotICAg
IG5lZzMyKHJlZ1QzKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOworICAg
IGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBi
YXNlR1BSKTsKKyAgICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgbmVn
MzIoc2NyYXRjaDIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7
CiAgICAgY29uc3RleHByIGludHB0cl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IG9mZnNldElu
QnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludHB0cl90Pihz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdU
MywgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICBs
b2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsK
IAogICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3Ry
dWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgIHN0
b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFz
U2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2RlLCBCeXRlY29k
ZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgaXNOb3RP
d25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFu
Y2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIo
WmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Oklu
ZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4Lgot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAgICBpc05vdEluZGV4ZWQubGlu
ayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2Zp
bGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUs
IGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKICAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7Cisg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBk
b25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIApAQCAtMjkyNywxMCArMjkxMiw5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9u
VHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29k
ZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Qnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRf
ZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUg
Z2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjkzOSw3ICsy
OTIzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVn
VDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0
b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6
TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMy
KHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5
dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQz
LDcgKzE1NDMsNyBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAK
IHZvaWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewot
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNh
bGwgYXQgIiwgY2FsbExpbmtJbmZvLmZhc3RQYXRoU3RhcnQoKSk7CisgICAgZGF0YUxvZ0xuSWYo
T3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBS
YXdQb2ludGVyKCZjYWxsTGlua0luZm8pKTsKICAgICAKICAgICByZXZlcnRDYWxsKHZtLCBjYWxs
TGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlz
aW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAgc3Ry
aWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNv
ZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwg
ZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJv
ZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgICAg
ICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0RzdCwg
dDApCiAgICAgICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93
CkBAIC0xMDIzLDcgKzEwMTksNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1
Y3QsIGluCiAgICAgICAgICMgTWV0YWRhdGEgaW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAgICBp
bnRlZ2VyT3BlcmF0aW9uKHQyLCAuc2xvdykKICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zm
c2V0W2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJ
bnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQ
cm9maWxlSW50LCB0MSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAt
MTA4OSwyMiArMTA4NSwxOCBAQCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRl
LCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4p
CiAKLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUs
IE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6
bV9iaXRzW3Q1XQotICAgIGVuZAotCiAgICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29w
ZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikK
ICAgICBiaW5lcSB0MSwgSW50MzJUYWcsIC5vcE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIs
IDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQ
cm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5l
Z2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0NSwgdDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIp
CiAub3BOZWdhdGVTcmNOb3RJbnQ6CiAgICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNs
b3cKICAgICB4b3JpIDB4ODAwMDAwMDAsIHQxCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRo
UHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJp
dGhQcm9maWxlTnVtYmVyLCB0NSwgdDMpCiAgICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRl
U2xvdzoKQEAgLTExMTUsMTAgKzExMDcsNiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9t
U3RvcmUob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUs
IGRvdWJsZU9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1l
JSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJl
dHVybikKLSAgICAgICAgbWFjcm8gYXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmgg
dHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFy
aXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0
NSwgdDIpCiAgICAgICAgIGdldChtX3JocywgdDIpCiAgICAgICAgIGdldChtX2xocywgdDApCkBA
IC0xMTI2LDcgKzExMTQsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUs
IG9wCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDAp
CiAgICAgICAgIGJpbmVxIHQyLCBJbnQzMlRhZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0
MywgSW50MzJUYWcsIC5vcDJOb3RJbnQKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmls
ZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
QXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAg
ICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAg
ICAgIGRpc3BhdGNoKCkKQEAgLTExMzYsMTIgKzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0
b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNsb3cK
ICAgICAgICAgYmliIHQzLCBMb3dlc3RUYWcsIC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAgICAg
YmluZXEgdDMsIEludDMyVGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9m
aWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3Ry
dWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0
MQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJsZToK
ICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJv
ZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29k
ZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5vdElu
dFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0
MApAQCAtMTE1Myw3ICsxMTQxLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVO
YW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRo
ZSBzZWNvbmQgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0
MikKICAgICAgICAgYmlhIHQzLCBMb3dlc3RUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmls
ZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBj
aTJkcyB0MCwgZnQwCiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJsZU9w
ZXJhdGlvbihmdDEsIGZ0MCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyODE3MTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29y
a2luZyBjb3B5KQpAQCAtMTA1NiwxMCArMTA1Niw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpu
c3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0
LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5h
bWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
cmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAg
ICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsg
VW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0
KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQogICAgICAgICBt
ZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNjUsNyBAQCBtYWNybyBwcmVPcChvcGNvZGVO
YW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDEsIC5zbG93
KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEgdDEsIFtjZnIsIHQw
LCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAg
ICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwg
dDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTExMzQsMTEgKzEx
MzAsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRl
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLQotICAgIG1h
Y3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6
Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFd
Ci0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0xMTQ2LDEyICsx
MTM3LDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwKICAgICBi
dGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MwogICAgIG9ycSBu
dW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAg
ICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0MSwg
dDQpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0cXogdDMsIG51bWJl
clRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAwLCB0MwotICAg
IHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlB
cml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEsIHQ0KQogICAgIHJl
dHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNTUsNiBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAotICAgICAg
ICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVj
dCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRz
W3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQogICAgICAgICBnZXQo
bV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkK
QEAgLTExNzcsNyArMTE2NCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFt
ZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFu
ZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxl
SW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBB
cml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0NCkKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLm9w
MU5vdEludDoKQEAgLTExODcsMTAgKzExNzQsMTAgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9y
ZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93CiAgICAg
ICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKLSAgICAgICAgcHJv
ZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQ0KQog
ICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkludDoKLSAgICAg
ICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQog
ICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQo
bV9kc3QsIHQyKQpAQCAtMTIwNiw3ICsxMTkzLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9y
ZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBh
biBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAgIGdldChtX2RzdCwg
dDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShB
cml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJk
cyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBm
dDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjQ5OCw2
ICsyNDk4LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNy
byB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0
ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVb
bWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNb
dGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90
IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNo
b3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0
X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRp
Zmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
YWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4
ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsK
IAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChK
U0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmll
ciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3Qg
SWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmlu
Z0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0
aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJ
ZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tU
eXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlk
ZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCop
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3
Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdC
aXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25z
dCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Citpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJ
ZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVu
dGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZp
ZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsK
ICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVp
ZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlz
aW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NP
TU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lk
IHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1l
dGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5QXJp
dGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5hcnlB
cml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAgcHJv
ZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8
fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436831</attachid>
            <date>2021-08-30 17:17:34 -0700</date>
            <delta_ts>2021-08-30 18:30:33 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>296685</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IHVubGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxp
bmtlZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRp
b24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
aXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0g
ICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRo
U3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhT
dGFydCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlz
IGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQg
dG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0
aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJz
OjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAg
IHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MjQsNiArNDI0LDEzIEBAIGlubGluZSBDb2RlT3JpZ2lu
IGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBz
byB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjYsNiArNDY2
LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAg
YnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENv
ZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAg
ICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENv
ZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAg
ICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVj
dGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1
Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4LDE0ICs1NDEsMTQgQEAgYm9vbCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJv
bWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9w
QWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBM
SU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMp
Ci0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVs
KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAg
IExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJ
VEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC0zMDc5LDcgKzMwOTIs
NyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFC
TEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBK
SVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJh
bWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMyOTUsMTMgKzMzMDgsMTMg
QEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRj
aCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZw
Yy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJl
dHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAg
Y2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRo
aXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMzMxMywxMSArMzMyNiwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29k
ZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAg
IGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0
ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAg
ICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0
aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVj
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFz
PE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDE2ICsyMzIsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0
OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9v
bCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRoZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJu
IHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFuZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAg
ICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFu
dChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+
KG1fbnVtVmFycyk7CkBAIC0yNjYsNiArMjU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNT
dGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAg
ICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBo
ZXJlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOwogCkBAIC00NzIsNiArNDYzLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5h
bWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFy
YW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKQEAgLTc5Nyw2ICs3ODksNyBAQCBwdWJs
aWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2Rl
YnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsg
cmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25l
ZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51
bUJyZWFrcG9pbnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkTWV0YWRhdGEuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2
ICs1MCw3IEBAIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGEKIAogc3Ry
dWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCB7CiAgICAgQXJyYXlQcm9maWxlIGFy
cmF5UHJvZmlsZTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCwg
YXJyYXlQcm9maWxlKTsgfQogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0
YWRhdGFBcnJheUxlbmd0aCkgPT0gMTIpOwogCkBAIC04OCw2ICs4OSw3IEBAIHVuaW9uIEdldEJ5
SWRNb2RlTWV0YWRhdGEgewogICAgICAgICBHZXRCeUlkTW9kZSBtb2RlOwogICAgICAgICB1aW50
OF90IGhpdENvdW50Rm9yTExJbnRDYWNoaW5nOyAvLyBUaGlzIG11c3QgYmUgemVybyB3aGVuIHdl
IHVzZSBQcm90b0xvYWQgbW9kZS4KICAgICB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1v
ZGUpOyB9CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YURlZmF1bHQgZGVmYXVsdE1vZGU7CiAgICAg
R2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0IHVuc2V0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFk
YXRhQXJyYXlMZW5ndGggYXJyYXlMZW5ndGhNb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zODUsNiArMzg1LDggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZkluQWNjZXNzKAogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCisvLyBPT1BTOiBN
YWtlIHRoaXMgc3R1ZmYgd29yayB3aXRoIGRhdGEgaWNzIHRvIG5vdCBhc3N1bWUgaW5saW5lIGFj
Y2Vzcy4KKwogdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVz
aW5nSW5saW5lQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQp
CiB7CiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2
aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg1LDYgKzI4NSw3IEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAgICAgICAgcmVzZXRQdXRCeShjb2Rl
QmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5h
bWU6CiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZh
bCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgpAQCAtNDMw
LDYgKzQzMSwxMDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpzZQog
ICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVUeXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBlID0gdW5s
aW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHViSW5mby5z
dGFydDsgLy8gT09QUzogZG8gd2UgbmVlZCBhIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBkb25l
TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93UGF0aFN0
YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKyAg
ICBjYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2Rl
SW5kZXgpOworICAgIGNvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0
ZWNvZGVJbmRleCk7CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25E
ZWxldGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkRlbEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZW9mOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
SW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0
QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6IAorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIHN3
aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNT
dHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAg
aWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVs
ZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uIG9w
ZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
UHV0QnlWYWw6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2Vk
U3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9k
ZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25Q
dXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQ
cml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpTZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNl
dFByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
ICNpZiBBU1NFUlRfRU5BQkxFRAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y2hlY2tDb25zaXN0
ZW5jeSgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDYgKzU2LDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRCeVZh
bCwKICAgICBQdXRCeUlkLAogICAgIFB1dEJ5VmFsLAorICAgIFB1dFByaXZhdGVOYW1lLAogICAg
IEluQnlJZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtNzgsNiArNzks
OCBAQCBlbnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CiAgICAgU3RyaW5nTGVuZ3RoCiB9
OwogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKKwogY2xhc3MgU3RydWN0dXJl
U3R1YkluZm8gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZvKTsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTk4LDYgKzEwMSw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKKyAgICB2b2lkIGlu
aXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvJik7CisKICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIENoZWNr
IGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9l
cywgdGhlbiBpdCByZXNldHMgaXRzZWxmLApAQCAtNDQ3LDYgKzQ1MiwxOCBAQCBpbmxpbmUgYXV0
byBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1
dEtpbmQgcHV0S2luZDsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtp
bmQ7CisgICAgRUNNQU1vZGUgZWNtYU1vZGU7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4OworICAgIC8vIE9PUFM6IERvIHdlIG5lZWQgc3RhcnQgZm9yIGRhdGEgSUNzPworICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsgLy8gVGhpcyBpcyBl
aXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNhY2hlcy4gb3IgdGhl
IGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW5zdGFuY2VvZicgY2FjaGVzLgorICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xvd1BhdGhTdGFydExvY2F0
aW9uOworfTsKKwogI2Vsc2UKIAogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw2ICsxNzUsNyBAQCBwdWJsaWM6
CiAKICAgICBjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFu
dFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBjb25zdCBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJl
ZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4
KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3Rh
bnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50
b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7
IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBAIC0yMDcs
NiArMjA4LDE0IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3JpcHRN
b2RlKTsgfQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNv
bnN0OworICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5kZXgg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIoKTsgfQor
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
bikKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gaW5zdHJ1
Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0Vu
ZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVnaW4g
JiYgaW5zdHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4gaW5zdHJ1
Y3Rpb24gLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CiAKICAgICB1bnNpZ25lZCBudW1DYWxs
ZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogICAgIHVuc2ln
bmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KQEAgLTQxMCw2ICs0MTks
OSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4gbV9p
bnN0cnVjdGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cz4gbV9saXZlbmVzczsKIAorICAgIC8vIE9PUFM6IGJpbmQgYSBiZXR0ZXIgcGxhY2UgdG8gc3Rv
cmUgdGhpcyBzdHVmZj8KKyAgICBWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPiBtX2JpbmFyeUFy
aXRoUHJvZmlsZXM7CisgICAgVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJpdGhQ
cm9maWxlczsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIERGRzo6RXhpdFByb2ZpbGUgbV9l
eGl0UHJvZmlsZTsKQEAgLTQ1NSw2ICs0NjcsMjggQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
cmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAgIH0K
KyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCisgICAg
eworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0
KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQob2Zmc2V0KTsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUoKQorICAgIHsKKyAgICAgICAg
dW5zaWduZWQgcmVzdWx0ID0gbV9iaW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAg
bV9iaW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5hcnlBcml0aFByb2ZpbGUoKSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkVW5hcnlBcml0aFBy
b2ZpbGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV91bmFyeUFyaXRoUHJv
ZmlsZXMuc2l6ZSgpOworICAgICAgICBtX3VuYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoQmluYXJ5
QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJu
IG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFy
eUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tp
XTsgfQogCiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1h
cDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2
aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
TWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOSArMTAxLDE4IEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiBzX29mZnNldDE2VGFibGVTaXplOwogICAgIH0KIAorCiAgICAg
dXNpbmcgT2Zmc2V0MzIgPSB1aW50MzJfdDsKICAgICB1c2luZyBPZmZzZXQxNiA9IHVpbnQxNl90
OwogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZT4KKyAgICB1aW50cHRyX3Qgb2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1faXNGaW5hbGl6ZWQpOworICAgICAgICB1aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQgPSBt
X2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bjb2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRUYWJs
ZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07CisgICAgICAgIHJldHVybiBiYXNlVHlwZU9mZnNldCAr
IHNpemVvZihPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7CisgICAgfQor
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX29mZnNldFRhYmxlRW50cmllcyA9IE5V
TUJFUl9PRl9CWVRFQ09ERV9XSVRIX01FVEFEQVRBICsgMTsgLy8gb25lIGV4dHJhIGVudHJ5IGZv
ciB0aGUgImVuZCIgb2Zmc2V0OwogCiAgICAgLy8gTm90IHRvIGJyZWFrIGFsaWdubWVudCBvZiAz
MmJpdCBvZmZzZXQgdGFibGUsIHdlIHJvdW5kIHVwIHNpemUgd2l0aCBzaXplb2YoT2Zmc2V0MzIp
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUu
aAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zh
bHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBAIHRlbXBsYXRlPHVu
c2lnbmVkIG51bWJlck9mQnVja2V0c0FyZ3VtZW4KIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mQnVja2V0cyA9IG51bWJlck9m
QnVja2V0c0FyZ3VtZW50OwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZT
cGVjRmFpbEJ1Y2tldHMgPSAxOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYnVja2V0
SW5kZXhNYXNrID0gbnVtYmVyT2ZCdWNrZXRzIC0gMTsKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIHRvdGFsTnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRzICsgbnVtYmVyT2ZT
cGVjRmFpbEJ1Y2tldHM7CiAgICAgCiAgICAgVmFsdWVQcm9maWxlQmFzZSgpCkBAIC0xMzQsNyAr
MTMzLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICAKICAgICAgICAgcmV0
dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAgICBFbmNvZGVkSlNWYWx1ZSBtX2J1
Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVk
aWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE1Niw2ICsxNTUsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9m
aWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGUgOiBwdWJsaWMg
VmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPiB7CiAgICAgVmFsdWVQcm9maWxl
KCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+KCkgeyB9CisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQogfTsKIAogc3RydWN0IFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk4
LDcgKzE1OTgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFVuYXJ5CiAg
ICAgICAgIGVtaXRVbmFyeU9wPE9wTm90Pihkc3QsIHNyYyk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywg
dHlwZSk7CisgICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0eXBlLCBtX2Nv
ZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2Ugb3BfYml0bm90OgogICAgICAgICBlbWl0VW5hcnlPcDxPcEJpdG5vdD4oZHN0LCBzcmMpOwpA
QCAtMTY5NiwxMyArMTY5NiwxMyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFR5cGVPCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5jKFJlZ2lzdGVy
SUQqIHNyY0RzdCkKIHsKLSAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNEc3QpOworICAgIE9wSW5j
OjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkp
OwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0RGVjKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcERlYzo6ZW1pdCh0aGlzLCBz
cmNEc3QpOworICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFkZFVu
YXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjgyLDcgKzY4Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmVnaXN0ZXJJRCo+CiAgICAgICAgIGVt
aXRCaW5hcnlPcChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlZ2lzdGVySUQq
IHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcykKICAgICAgICAgewotICAgICAgICAgICAgQmluYXJ5
T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcyk7CisgICAgICAgICAgICBCaW5h
cnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzLCBtX2NvZGVCbG9jay0+YWRk
QmluYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICAgICAgcmV0dXJuIGRzdDsKICAgICAgICAg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4
OSw3ICs4ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAK
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBj
YWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6
Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVE
YXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2pp
dCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTYsNyArODk2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BS
UmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNl
cyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwg
WyZdIHsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsK
ICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnBy
ZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTg1LDcgKzM5ODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5h
CiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsK
IAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2Nr
KCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlw
ZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5h
bWUsIHVzZWRSZWdpc3RlcnMsCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJ
bnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5
SXNTeW1ib2wgPSB0cnVlOwogCkBAIC0xNDc0Nyw3ICsxNDc0Nyw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29w
ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3By
KCk7CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRS
ZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCksIGNhbGxTaXRlSW5kZXgp
OworICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
dGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29k
ZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2
aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzE3LDcgKzQzMTcsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkZUTEpJVCkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAg
ICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUo
Ci0gICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVT
ZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAg
ICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRp
Y09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAg
ICAgICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
SW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0
dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwpAQCAtMTAzNTUsNyArMTAzNTUsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0g
aml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BS
SW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5r
SW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQ
UlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAg
IGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwg
R1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENh
bGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwog
ICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA2OTgsNyArMTA2OTgsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFp
bENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENh
bGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xv
d1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6
cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2Fs
bFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDk3OSw3ICsxMDk3OSw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0
aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAg
ICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52
YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
aml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5l
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJl
cGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjgx
NzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29y
a2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDIyIEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0
cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252ZXJ0
RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgs
IGZpZWxkcywgZ2VuZXJhdGVPZmZzZXRPZikKICAgICAgICAgICAgIGZpZWxkcy5tYXAgZG8gfGZp
ZWxkLCB0eXBlfAogICAgICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAotICAgICAg
ICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCAr
ICcgICAgJywgdHlwZSl9XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJl
Zml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUsIGZhbHNl
KX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307IgorICAgICAgICAgICAg
ICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9ICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgorICAgICAgICAgICAg
ICAgICAgICBpZiBnZW5lcmF0ZU9mZnNldE9mCisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gcmVzdWx0ICsgIlxuIiArICJzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5hbWVb
MF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkgeyByZXR1cm4gT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdAogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpv
aW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygi
ICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAg
ICAgICIsIEBmaWVsZHMsIHRydWUpCiAKICAgICAgICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYg
QGluaXRpYWxpemVycyAmJiAobm90IEBpbml0aWFsaXplcnMuZW1wdHk/KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgx
NzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OTgsOCArNjk4LDEzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpy
ZXN0b3JlQ2FsbGVlU2F2ZXMKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2Fs
bChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5m
bykKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAg
IGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworfQor
Cit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2Jh
bE9iamVjdChWTSYgdm0sIENhbGxMaW5rSW5mbyogaW5mbykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgp
OwogICAgIGFkZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAg
ICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzE4
LDYgKzE3MTgsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxD
YWxsKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRW
aXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsK
ICAgICAKICAgICB2b2lkIG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAgIHZvaWQgcmVj
bGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0
Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuUHJvbG8KICAgICBzdG9y
ZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12b2lkIENDYWxsSGVscGVyczo6bG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQ
YWNrZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tl
bjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOwotICAgIHN0b3JlVmFsdWUo
dGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29w
ZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxv
Y2spKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgY2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRv
d0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRj
aDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAgICBTaGFkb3dDaGlja2VuKiBzaGFk
b3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQw
LDE4IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0
aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Ag
b2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxv
Z1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcg
c2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDb2RlQmxvY2tUeXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BS
UmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29k
ZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKKyAgICB7
CisgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUp
KSk7CisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0
Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOworICAgICAgICBzdG9yZVZhbHVlKHRoaXNS
ZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgdGhpc1ZhbHVlKSkpOworICAgICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3Bl
KSkpOworICAgICAgICBzdG9yZVB0cihjb2RlQmxvY2ssIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7CisgICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxT
aXRlSW5kZXgpKSk7CisgICAgfQorCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8g
dGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQg
ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJl
ZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBAIEpJVDo6SklU
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOwogfQogCiBK
SVQ6On5KSVQoKQpAQCAtMTEzLDcgKzExNCw3IEBAIHZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUo
V2F0Y2hwb2ludFNldCoKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1Nl
dCkKK3ZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9T
ZXQpCiB7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVy
VG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0lu
dmFsaWRhdGVkKSkpOwogfQpAQCAtMTI5LDcgKzEzMCw3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFj
a1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Qw
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CkBAIC02NzYs
MTcgKzY3NywxNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiB2b2lk
IEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9j
ay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgLy8gT09QUzogTWF5YmUgdGhpcyBzaG91bGQgYmUg
ZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJsb2NrPworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxl
dmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dpdGNo
IChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAgICBtX2NhbkJl
T3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBm
YWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21waWxl
QW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgbV9j
YW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC03NDYsNyArNzQ2
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogCiAgICAgTGFi
ZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAotICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGludCBm
cmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXplID0gLWZyYW1l
VG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVUb3BPZmZzZXQpLCBjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDEpOwogICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CkBAIC03
NjIsNyArNzYyLDEwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4K
IAogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKICAg
ICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX2Nv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkg
PiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVk
VmVjdG9yOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlZ1QyKTsKKwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25z
dHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0
bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24n
dCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCkBAIC03NzgsNiArNzgx
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwog
I2VuZGlmCiAgICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9j
ay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAg
ICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50
ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KQEAgLTkxOSwxMCArOTIzLDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMsIHBhdGNoQnVmZmVyKTsKIAogICAgIGZv
ciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAg
ICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwot
ICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0
KSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
Y29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5r
SW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAg
ICAgIGluZm8uZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKICAgICB7CkBA
IC05NTMsNyArOTU1LDEwIEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgIkJhc2VsaW5lIEpJ
VCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2ppdENvZGUgPSBh
ZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IEJhc2VsaW5l
SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENvZGUtPm1fdW5s
aW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2ppdENvZGUtPm1f
ZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOwogCiAgICAg
aWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRl
ZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0
YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVt
b3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwpAQCAtOTY4LDYgKzk3Myw4IEBAIENvbXBpbGF0
aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVu
TWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKKyAgICBtX2ppdENvZGUtPmFkb3B0TWF0
aElDcyhtX21hdGhJQ3MpOworCiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9G
aXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwpAQCAtMTA0Miwx
NCArMTA0OSwxNCBAQCB2b2lkIEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAg
ICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwg
IlByZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsK
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCkpID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVy
cygpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkp
KTsKIAogICAgIHJldHVybiByb3VuZExvY2FsUmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9m
ZnNldChjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9CiAKLWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZv
cihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihV
bmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1
MCwzMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAgIGNsYXNzIEpJVENvbnN0YW50UG9vbCB7
CisgICAgcHVibGljOgorICAgICAgICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisgICAg
ICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICAgICAgR2xvYmFsT2JqZWN0
LAorICAgICAgICAgICAgQ2FsbExpbmtJbmZvLAorICAgICAgICAgICAgU3RydWN0dXJlU3R1Yklu
Zm8sCisgICAgICAgIH07CisKKyAgICAgICAgc3RydWN0IFZhbHVlIHsKKyAgICAgICAgICAgIFR5
cGUgdHlwZTsKKyAgICAgICAgICAgIFBhY2tlZFB0cjx2b2lkKj4gcGF5bG9hZDsKKyAgICAgICAg
fTsKKworICAgICAgICBDb25zdGFudCBhZGQoVHlwZSB0eXBlLCBQYWNrZWRQdHI8dm9pZCo+IHBh
eWxvYWQgPSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQg
PSBtX2NvbnN0YW50cy5zaXplKCk7CisgICAgICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoVmFs
dWUgeyB0eXBlLCBwYXlsb2FkIH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50czsK
KyAgICB9OworCiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZTsKQEAgLTE0OSw5ICsxNzUsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICB9OwogCiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhTdGFydDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIGRvbmVMb2NhdGlvbjsKLSAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87
CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAg
ICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKICAg
ICB9OwogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVz
c1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CkBA
IC0xODgsOCArMjE0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gSklU
KHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOwog
ICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZv
cihDb2RlQmxvY2sqKTsKLSAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Q29kZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRG
b3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJP
ZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBjb21waWxlVGltZVN0YXRzKCk7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTZWNvbmRzIHRvdGFsQ29tcGlsZVRpbWUo
KTsKQEAgLTIyMyw2ICsyNDksMjcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRp
ZgogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBs
b2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVn
KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQg
bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVn
KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQg
bG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVj
b2RlPgorICAgICAgICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29k
ZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KKyAgICAgICAgdm9pZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2Rl
Jiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgorICAgICAgICB2b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRl
Y29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdm9pZCBsb2FkQ29uc3Rh
bnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2FkR2xv
YmFsT2JqZWN0KEdQUlJlZyk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1
bXBUb0hhbmRsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFw
cGVuZChqdW1wVG9IYW5kbGVyKTsKQEAgLTI1OCwxNiArMzA1LDE2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9
IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MK
ICAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBP
cDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwg
dm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAg
ICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29k
ZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3Zh
cmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJn
cyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAg
ICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsK
KyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENh
bGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBj
b21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0
IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yOTEsMTAgKzMz
OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhl
IHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxl
IGZvcgogICAgICAgICAvLyBzY3JhdGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAg
ICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3Mp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVS
ZWdzKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxl
JiwgR1BSUmVnKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQ
cm9maWxlJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29k
ZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBAIC0zMDcsNiArMzU0LDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BS
KTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJ
RCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lk
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVy
SUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdp
c3RlcklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01OTIsNyArNjQzLDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwpAQCAtNjI2LDcgKzY3Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRI
YXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBl
bWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAg
ICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29t
bW9uKGNvbnN0IEluc3RydWN0aW9uKik7CkBAIC02NDUsNyArNjk1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3Jp
dGUoV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcg
cG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQ
UlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShK
U1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsK
ICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRk
cmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwog
ICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpA
QCAtNjU0LDYgKzcwNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1
dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsK
IAorICAgICAgICBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpT
VmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wg
aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09w
ZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY5NSwyNiArNzQ2LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9i
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBl
IyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVf
R0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVf
R0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9y
T3BSZXNvbHZlU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIE1vZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQg
aW5saW5lIHRoYW4gdXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVW
YXIgYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3Bl
LgotICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFy
IHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNM
QVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVf
IyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVf
VFlQRShERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVT
T0xWRV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29u
c3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9u
YWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNj
b3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFt
ZSk7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7
CkBAIC05MTgsMTEgKzk1MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1p
emVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBt
X2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2Zp
bGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAg
Ym9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2Fu
QmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFi
bGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQg
b2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAg
ICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC05
MzAsMTMgKzk2MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBib29sIHJl
cG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRp
bWVzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB5b3UgbmVlZCB0byBjaGVjayBhIHZhbHVl
IGZyb20gdGhlIG1ldGFkYXRhIHRhYmxlIGFuZCB5b3UgbmVlZCBpdCB0bwotICAgICAgICAvLyBi
ZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFzdCBhbmQgc2xvdyBwYXRoLCB0aGVuIHlvdSB3YW50
IHRvIHVzZSB0aGlzLgotICAgICAgICAvLyBJdCB3aWxsIGdpdmUgdGhlIHNsb3cgcGF0aCB0aGUg
c2FtZSB2YWx1ZSByZWFkIGJ5IHRoZSBmYXN0IHBhdGguCi0gICAgICAgIEdldFB1dEluZm8gY29w
aWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBC
aW5hcnlPcD4KLSAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShC
aW5hcnlPcCk7CiAKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKQEAgLTk2
Myw5ICs5ODcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50
cnk+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVz
OwogCi0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dElu
Zm9zOwotICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29w
aWVkQXJpdGhQcm9maWxlczsKLQogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsK
ICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTk5LDExICsxMDIwLDIwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0aW9uKiwgVW5pcXVl
UmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRp
b25TdGF0ZTsKIAogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJvb2wg
bV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9m
aWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4
OwogCi0gICAgICAgIFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgICAgIE1h
dGhJQ0hvbGRlciBtX21hdGhJQ3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1f
aml0Q29kZTsKKworICAgICAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAg
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5r
ZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5m
bz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisKKyAgICAgICAgR1BSUmVnIG1fbWV0YWRhdGFH
UFI7CisgICAgICAgIEdQUlJlZyBtX2NvbnN0YW50c0dQUjsKICAgICB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGlj
LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRB
cml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBh
cmd1bWVudEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7
CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDog
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMzIwLDcgKzMyMSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBy
ZWdUMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVn
VDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdU
MSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVH
UFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlE
b3VibGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+dW5hcnlBcml0aFBy
b2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tX3Byb2ZpbGVJbmRleCk7
CisgICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9tYXRoSUNzLmFkZEpJVE5lZ0lDKGFyaXRoUHJv
ZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24s
IG5lZ2F0ZUlDKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhv
c2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0lu
dAogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7
CkBAIC04OTksOCArOTAzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0
cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRk
SUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEFkZD4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUQWRkSUMqIGFkZElDID0g
bV9tYXRoSUNzLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRv
TWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFz
dDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQpAQCAtOTQ1LDEwICs5NDksMTEgQEAgdm9pZCBK
SVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIGJvb2wgZ2VuZXJhdGVkSW5s
aW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CiAgICAgICAgIFVuYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxl
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVn
cyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAg
ICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBA
IC0xMDE1LDEwICsxMDIwLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlN
YXRoSUMKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAgICAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFBy
b2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFBy
b2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQ
cm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBh
ZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEw
NTUsMTMgKzEwNjEsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElD
PAogI2VuZGlmCiAKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0
aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJ
QykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNS
ZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVp
bnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBF
TkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAg
LTExMjAsMTMgKzExMjcsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1h
dGhJQwogI2VuZGlmCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1h
dGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAg
aWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYg
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7Cisg
ICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAg
ICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJp
dHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdp
c2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwog
CiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVs
KCk7CkBAIC0xMTY2LDcgKzExNzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxw
dHI7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOworICAgICAgICBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVC
bG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCku
bV9wcm9maWxlSW5kZXgpOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNv
ZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVy
YW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKQEAgLTEyMTEsOCArMTIxOSw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAg
SklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVC
bG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkp
OworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fbWF0aElDcy5hZGRKSVRNdWxJQyhhcml0aFByb2Zp
bGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBt
dWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KQEAg
LTEyMjcsOCArMTIzNSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1
Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklD
KGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAm
bV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BTdWI+KCkpOworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRT
dWJJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVu
dEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZh
bHVlU3ViKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82
NC5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgSklU
Ojpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFj
a1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVy
LCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5t
X2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
YWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwpAQCAt
MjU5LDcgKzI1OSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAK
IAogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0VmlydHVhbENh
bGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAg
ZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBhZGRTbG93Q2FzZShzbG93UGF0
aHMpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxv
Y2F0aW9uID0gbGFiZWwoKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2Rl
KTsKQEAgLTM0MSw3ICszNDEsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNv
bnN0IEluCiAgICAgfQogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgp
OwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM1NCw3ICszNTMs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lv
biAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2Rl
KQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVn
VDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUs
IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7
CiB9CiAKQEAgLTUzLDcgKzUzLDcgQEAgc3RkOjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2Rl
SUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFy
YXJncwogICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6
OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKK0pJ
VDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50KQogewogICAgIHVuc2lnbmVkIGNoZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwpAQCAtNzgsNyArNzgsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpv
cGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVj
dF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8
IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4K
LUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8q
IGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtMTA2LDkgKzEwNiwx
MCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAKICAgICAvLyBQ
cm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIo
aW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwot
ICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAg
IHN0b3JlMzIocmVnVDIsIGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOwor
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJlZ1QzKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBi
cmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1QyKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNz
KHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKSkpOwogICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFs
aXplICd0aGlzJy4KQEAgLTEyNywxNiArMTI4LDE2IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2
YWwoY29uc3QgT3AmKQogdGVtcGxhdGU8PgogYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25z
dCBPcENhbGxFdmFsJiBieXRlY29kZSkKIHsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50
ZXJSZWdpc3RlciwgcmVnVDEpOwotICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRy
ZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgYXJndW1lbnRHUFIxKTsKKyAgICBzdG9yZVB0
cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIENhbGxGcmFtZTo6Y2Fs
bGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsK
LQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjIpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNhbGxFdmFsLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsK
KyAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJldHVyblZhbHVlR1BSKSk7CiAKICAgICBl
bWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiAKQEAgLTE0OCw3ICsxNDksNyBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4o
KTsKLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZv
KENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0g
bV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAg
ICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAtMTU2LDQzICsxNTcsNDYgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
IAogICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0
ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwg
cmVnVDApOwotICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAg
ICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBpbmZvKTsK
KyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2Vk
Q29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAg
ICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVu
c2lnbmVkKQoteworYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2Vk
Q2FsbExpbmtJbmZvKiwgdW5zaWduZWQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpIHsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENh
bGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXgpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9w
VGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZv
Q29uc3RhbnQpCiB7Ci0gICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAg
c2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxl
RGF0YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAg
IHNodWZmbGVEYXRhLm51bUxvY2FscyA9CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNo
dWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+
KCk7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Cisg
ICAgc2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXI7CisgICAgc2h1ZmZsZURhdGEtPm51bUxvY2FscyA9CiAgICAgICAgIGJ5dGVjb2RlLm1f
YXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAg
c2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICBzaHVmZmxlRGF0
YS0+YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tp
XSA9CisgICAgICAgIHNodWZmbGVEYXRhLT5hcmdzW2ldID0KICAgICAgICAgICAgIFZhbHVlUmVj
b3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAg
ICAgICAgICAgRGF0YUZvcm1hdEpTKTsKICAgICB9Ci0gICAgc2h1ZmZsZURhdGEuY2FsbGVlID0K
LSAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0gICAg
c2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAgICBp
bmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICBzaHVmZmxlRGF0YS0+
Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAg
c2h1ZmZsZURhdGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7CiAKLSAg
ICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywg
cmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0gewotICAgICAg
ICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2Fs
bCgpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAg
IEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZs
ZXIoKnRoaXMsICpzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgfSk7CiAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKworICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0Zp
dCgpOworICAgIGluZm8tPmZyYW1lU2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsK
KwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAg
ICAKQEAgLTIxOCwzMiArMjIyLDQwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IElu
c3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9j
ay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0
dXJuLgogICAgICovCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBpZiAo
b3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFk
ZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGNvbXBpbGVT
ZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKKworICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBp
bmZvID0gbnVsbHB0cjsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFu
dCA9IFVJTlRfTUFYOworICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKKyAgICAg
ICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBtX3VubGlua2VkQ2FsbHMuYWRkKCk7Cisg
ICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIGlu
Zm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCk7CisKKyAg
ICAgICAgaW5mb0NvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZvKTsKKworICAgICAgICBBU1NFUlQobV9jYWxsQ29tcGls
YXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKKyAgICAgICAgbV9j
YWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS51bmxpbmtlZENhbGxMaW5rSW5m
byA9IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3RhbnQ7CisKKyAgICB9CisgICAgY29t
cGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7CiAKICAgICAvLyBTUCBob2xk
cyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRD
b3VudCBpbml0aWFsaXplZC4KLSAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBtX2NvZGVCbG9jay0+
Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7Ci0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0g
Q2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7CisgICAgdWludDMyX3QgbG9jYXRp
b25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQpKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNhbGxlZS4KICAgICBz
dG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90
OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSk7CiAKICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXpl
KCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0lu
Zm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAgICBpZiAo
Y29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCisgICAg
aWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgsIGlu
Zm9Db25zdGFudCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGxvYWRDb25zdGFudChpbmZvQ29u
c3RhbnQsIHJlZ1QyKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAg
IGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1Qw
LCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAgICAgYXV0
byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CisgICAgICAgICAgICAvLyBPT1BTCiAgICAgICAgICAg
ICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENh
bGxTbG93KHJlZ1QyKTsKICAgICAgICAgfSk7CkBAIC0yNTMsMTMgKzI2NSwxMyBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAs
IHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICBhdXRvIHNsb3dQYXRo
cyA9IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIp
OwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBhZGRTbG93Q2FzZShzbG93
UGF0aHMpOwogCiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5k
b25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3Vs
dChieXRlY29kZSk7CkBAIC0yNzMsMjAgKzI4NSwyMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKGNvbnN0IEluCiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0g
bGFiZWwoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29uc3RhbnQo
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25z
dGFudCwgcmVnVDIpOwogCi0gICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMpCisgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKKyAgICAgICAgLy8gT09QUwogICAgICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CisgICAgfQogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAq
dGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlz
LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJv
bVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC00MDQsNyArNDE4LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKIAogICAgIGZhc3RDYXNlLmxpbmso
dGhpcyk7CkBAIC00OTMsNyArNTA3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4
dChjb25zdCBJbgogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
ICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAg
ICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQpAQCAtNTEyLDcgKzUyNiw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVl
UmVncyB7IHZhbHVlR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKIAogICAgICAgICBpdGVyYXRpb25E
b25lLmxpbmsodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2
aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE1OSwxMCArMTU5LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBi
b29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgeworICAgICAgICBpZiAoSklUQ29k
ZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpIC8vIE9PUFMKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURh
dGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApAQCAtMjQ4LDYgKzI0OCw0MSBAQCBwcm90
ZWN0ZWQ6CiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBtX3JlZjsKIH07CiAKK2NsYXNzIE1h
dGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVy
JiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fYWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2FkZElD
cyk7CisgICAgICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhlci5tX211bElDcyk7CisgICAgICAg
IG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAgICAgIG1fc3ViSUNzID0g
V1RGTW92ZShvdGhlci5tX3N1YklDcyk7CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZEpJVEFk
ZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX2FkZElDcy5h
ZGQoYXJpdGhQcm9maWxlKTsgfQorICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmls
ZSk7IH0KKyAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisgICAgSklU
TmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0
dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisKKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJ
VEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBh
ZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJh
dG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUTXVsSUMqIGFkZE1h
dGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHBy
b2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dl
bmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+CisgICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisKK3ByaXZhdGU6CisgICAg
QmFnPEpJVEFkZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAg
IEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKK307
CisKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKERpcmVjdEpJVENvZGUp
OwogY2xhc3MgRGlyZWN0SklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgewogICAg
IFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihEaXJl
Y3RKSVRDb2RlKTsKQEAgLTI2Niw2ICszMDEsMTYgQEAgcHJpdmF0ZToKICAgICBDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IG1fd2l0aEFyaXR5Q2hlY2s7CiB9OwogCitjbGFzcyBCYXNlbGluZUpJVENv
ZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6
CisgICAgQmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKKyAgICAgICAgOiBEaXJlY3RKSVRDb2Rl
KFdURk1vdmUoY29kZSksIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAg
ICB7IH0KKworICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOwor
ICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7IC8vIE9PUFM6IG1ha2Ug
c3VyZSB3ZSB2aXNpdCB0aGVzZSBzb21laG93LiBPciBhc3NlcnQgd2UgZG9uJ3QgaGF2ZSB0bywg
c2luY2UgdGhleSdyZSB2aXJ0dWFsIGNhbGxzLgorfTsKKwogY2xhc3MgTmF0aXZlSklUQ29kZSA6
IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgewogcHVibGljOgogICAgIE5hdGl2ZUpJVENvZGUo
SklUVHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5l
cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgor
I2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1
YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlw
ZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0g
ICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAg
ICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/
IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJh
Z2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFk
ZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAg
ICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5m
by0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQg
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQ
YXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAg
ICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5
cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Zmlu
YWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgu
bG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAor
dm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKEpJVCYgaml0LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvLCBHUFJSZWcg
c3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworICAgIFJFTEVBU0Vf
QVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKyAgICBqaXQubG9hZENvbnN0
YW50KHN0dWJJbmZvLCBzdHJ1Y3R1cmVTdHViSW5mb0dQUik7CisgICAgaml0LmNhbGwoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZD
b2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9kb25lID0gaml0LmxhYmVs
KCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3Qg
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdz
IHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODE3MTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFz
cyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVC
bG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNz
IEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCitz
dHJ1Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeUlkUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVFbnVtZXJhdG9y
R2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQ
UkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5m
bzo6cmVnVDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9j
ayBhbmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KKyAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7
CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJ
bmZvOjphcmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG8gPSBH
UFJJbmZvOjphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVjdCBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUklu
Zm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307
CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKK307CisKK3N0cnVj
dCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1
ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9
IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1
Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xhc3MgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yKCkgeyB9CkBAIC02MiwxNSArMTY0LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXpl
KAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNs
b3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKEpJVCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9Db25zdGFu
dCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogbV91bmxpbmtlZFN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7IHN0ZDo6bnVtZXJpY19s
aW1pdHM8SklUQ29uc3RhbnRQb29sOjpDb25zdGFudD46Om1heCgpIH07CisKIHByb3RlY3RlZDoK
LSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAg
IFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwot
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOworICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOyAvLyBPT1BTOiBtYWtlIHJlcG9ydENhbGwgcGFzcyBz
b21ldGhpbmcgaW4gd2UgY2FuIHVzZSBmb3IgdGhlIG5vbi1DVEkgdGh1bmtzIGJ1aWxkcy4gCiB9
OwogCiBjbGFzcyBKSVRCeUlkR2VuZXJhdG9yIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yIHsKQEAgLTEzMiw4ICsyMzksOCBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdlbmVyYXRv
cigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVC
bG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNl
LAotICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcg
c2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBl
LCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNW
YWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFN
b2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3Nl
bWJsZXImKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFs
UmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0
YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7Cisg
ICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNy
YykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50
MzIoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJl
Z2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1l
Q29uc3RhbnQpIHsKKyAgICAgICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBh
bGwgbGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAK
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4g
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBt
X3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBW
aXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xODUsNyArMjEwLDcgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeAogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25D
ZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklU
OjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3Bv
aW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7
CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29k
ZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3Bv
aW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZCht
X2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lk
IEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBk
dXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBp
cyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29k
ZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAg
ICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9
IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMx
OCwzNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXND
ZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVl
KQotewotICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0gICAgLy8gV2UncmUg
aW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVz
dCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3Rv
cmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQotICAgIEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZh
bHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAgIHN0b3JlMzIodmFs
dWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwotICAgIHN0b3Jl
MzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgotfQor
ICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihz
cmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0
cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVu
Z3RoKCkgPT0gMTsKK30KKworLy8gT09QUworLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVl
KQorLy97CisvLyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKKy8vCisvLyAgICAv
LyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdl
IGNhbiBqdXN0IGRvIGEgZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lmIFVTRShKU1ZBTFVF
NjQpCisvLyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsK
Ky8vI2Vsc2UKKy8vICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3
aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMp
OworLy8gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMu
cGF5bG9hZCk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNC
aXRzLnRhZyk7CisvLyNlbmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5l
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9w
cm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMs
MjQgKzM1MywyNSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAK
IGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUo
Li4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2
YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwg
bV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKyAgICBwdHJkaWZmX3Qgb2Zm
c2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgp
OworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgb2Zmc2V0
KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVn
KQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVn
cyhyZXN1bHRSZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97Cisv
LyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVz
dWx0UmVnKSk7CisvL30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcg
cmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcg
cmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFs
dWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKQEAgLTM2MCw2ICszOTEsMjEg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlVwogICAgIH0KIH0KIAor
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNl
dE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQ
UikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CisgICAgICAgIGxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwg
Ynl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0
ZXJJRCBzY3JhdGNoR1BSKQoreworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChi
eXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJy
YXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2VsbEdQUiwgc2NyYXRj
aEdQUik7Cit9CisKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFu
dEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5hc0ludDMyKCk7CkBAIC0zODAsNyArNDI2LDcgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYgKHJlZy5p
c0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50
UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigm
aW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxvYWREb3VibGUo
YWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTQyLDcgQEAgaW5saW5lIHZvaWQg
SklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9j
b2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykp
IHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTUyLDcgQEAgaW5saW5lIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykK
IHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFp
c0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0LDExICs1NjAs
NiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAgICAgfQogfQog
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0
T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsNyArNTg1LDggQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5k
ZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xk
IHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAg
aWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOworICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbGluayB0aW1l
IGNvbnN0YW50cyBoZXJlLi4uCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CiAgICAgICAg
IGVsc2UKQEAgLTU2NiwxMSArNjA4LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdl
dFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0Mik7CiB9CiAK
LUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdp
c3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkK
IHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01OTUsNyArNjMyLDcg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogCiBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcs
IFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25D
ZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY3NCw3IEBAIEFMV0FZ
U19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBpZiAodGFyZ2V0KQog
ICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3V0T2ZMaW5l
SnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgR2V0UHV0SW5mbyBK
SVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQotewotICAgIHVuc2ln
bmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hNYXAgZG9lc24ndCBs
aWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRHZXRQdXRJbmZvcy5m
aW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0SW5mb3MuZW5kKCkp
Ci0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgR2V0UHV0
SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fZ2V0UHV0
SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1dEluZm8ub3BlcmFu
ZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQmlu
YXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6OmNvcGllZEFyaXRo
UHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBrZXkgPSAoc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAzMiB8IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBt
X2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFs
dWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGllZEFyaXRoUHJvZmls
ZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQcm9maWxlOworICAg
IHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0
aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiArNjk1LDUyIEBAIEFM
V0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICByZXR1cm4gRUNNQU1v
ZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJl
c3MobV9tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDMyRnJv
bU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVn
IHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBv
ZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDgoQWRkcmVz
cyhtX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldElu
TWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBjb25zdCBCeXRlY29k
ZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZhbHVlLCBBZGRyZXNz
KG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5N
ZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMyVG9NZXRhZGF0YShH
UFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sK
KyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2Rl
QmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNl
dCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5
dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGFkZFB0cihtX21l
dGFkYXRhR1BSLCBUcnVzdGVkSW1tUHRyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCku
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihBZGRy
ZXNzKG1fY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvbnN0YW50SW5kZXgp
ICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRHbG9iYWxP
YmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9nbG9iYWxPYmplY3RD
b25zdGFudCwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzEsNyArOTMxLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lz
dGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1Qz
LCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJp
ZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRj
aGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJ
bnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAK
ICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgeworICAgICAgICAvLyBPT1BTCiAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYg
KCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC04NywzNyArODgsMzUg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9u
UHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFs
T2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAg
IEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5
PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsK
ICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2Ny
YXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CiAK
LSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRlcmZs
eSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JS
ZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93
Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0p
OwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUo
KSArIG9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoKSArIG9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJlZyk7CisKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxw
dHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2
YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVn
LCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6
OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBlbWl0SW5pdGlhbGl6
ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKKyAgICBtdXRhdG9yRmVuY2Uo
Km1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKKwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwg
c3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25O
ZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTE1NCwzMCArMTUzLDM4IEBAIHZvaWQgSklUOjplbWl0
X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1f
cHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBh
bmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVn
VDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5k
IHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywg
cmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9HUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1
YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9HUFIpOwogICAgIAogICAgIC8v
IENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhp
cyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAot
ICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAg
IHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHJlc3VsdEdQUiwKKyAg
ICAgICAgdmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAgICAgICBzdHViSW5mb0dQUiwK
KyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMSwgQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCisKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCArMTk5LDEzIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOwotICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1p
emUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFu
Y2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOwotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgc3RhdGljX2Fzc2VydChC
YXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09IGFyZ3VtZW50R1BSMSk7Cisg
ICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlID09IGFy
Z3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKQorICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0zNzQsNyArMzgw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwogI2Vsc2UKQEAg
LTM4NSw3ICszOTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24q
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAg
IEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBqaXQuY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0Zvcigm
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
OwpAQCAtNDExLDcgKzQxNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25z
dCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQsOSArNDM5LDEwIEBAIHZv
aWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZvaWQgSklUOjplbWl0X29w
X3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5j
dGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0
aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUs
IHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0NzEsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RH
UFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUp
LCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNGYWxzZXlHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzQ4OCw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyArNTI3LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8vIEZpcnN0LCBoYW5kbGUg
SlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0
cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1
bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CiAKQEAgLTU0Myw3
ICs1NTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1CiAgICAg
Ly8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAg
SnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTYyNSw4ICs2MzMsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY1MCw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBi
ZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAg
IC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzA1LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBq
dW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzcyMiw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpv
cF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BS
ID0gYXJndW1lbnRHUFIxOwpAQCAtOTA4LDcgKzkxOSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBy
ZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MTgsNyArOTMwLDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCkBAIC05OTMsNyArMTAwNiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IElu
c3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNo
T2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkp
KTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVC
bG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUs
ICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMjQsMTEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJv
b2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwotICAgIGlm
IChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9i
eXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb25O
b0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmls
ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxl
LCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JFbnRy
eSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5k
bGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVmZmVy
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZd
IChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAgICAgICAg
IEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdzKTsKLSAg
ICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBAIC0xMTEy
LDcgKzExMTMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVi
dWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygp
LCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0
cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBl
KSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0xMTQ4LDcgKzExNTAs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTMxMCwyMyArMTMxMSwxOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9v
cF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3Ry
dWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJl
SUQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEp
OwogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9h
ZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcFRvVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwg
cmVnVDIpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1Qx
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
VGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0g
ICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5t
X2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJl
Z2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9
IHJlZ1QwOwpAQCAtMTM0Miw3ICsxMzM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMoY29uc3QgSW5zdAogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25S
YXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlv
bjo6cmFyZURhdGFUYWcpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJl
RGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVj
dHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAg
bG9hZFB0cihjYWNoZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wQ3JlYXRlVGhpczo6b2Zmc2V0T2ZDYWNoZWRGdW5jdGlv
bigpLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVz
ID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0Nl
bGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFB0cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1Nl
ZW5NdWx0aXBsZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM2OSw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
cT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBK
U1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIsNyArMTM4MCw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMy
KDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVn
cyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyArMTM5Myw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwg
cmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzE0MDQsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0MTks
MTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1
YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFs
dWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BS
MCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86
OmFyZ3VtZW50R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTUwOSw3ICsxNTExLDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1lbnRHUFIwKTsKICNlbHNlCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NjQsNyAr
MTU2Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAg
IEdQUlJlZyBnbG9iYWxHUFIgPSBHUFJSZWc6OmFyZ3VtZW50R1BSMDsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAs
IGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0
YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
fQogCkBAIC0xNjY0LDEzICsxNjY5LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19n
ZW5lcmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1f
YXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNp
emUpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdB
cnJheTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMSk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QwLCBz
aXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY3OSwxNCArMTY4MywxMyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBi
eXRlY29kZS5tX2xlbmd0aDsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSgpLCByZWdUMik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QyLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRMb2FkKHNpemVJbmRleCwg
cmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNp
emVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgog
fQogCkBAIC0xNjk0LDggKzE2OTcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0
aF9zaXplKGNvCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0
aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB0eXBlIHByb2Zp
ZWxyIGlzIGVuYWJsZWQuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0
aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
VG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE3Nzcs
MjAgKzE3ODEsMjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQog
ICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJl
Z1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWls
PigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2Ny
YXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVn
aXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93
Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNo
MlJlZyk7CisgICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAv
LyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMlJlZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZt
KCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAg
IGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3Mo
cmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QxKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpT
VmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxp
bmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdXNpbmcgdGhlIGNvbnRyb2wgZmxvdyBwcm9maWxl
ci4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVD
b250cm9sRmxvdz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0
aW9uID0gbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7CkBAIC0xODYw
LDcgKzE4NjgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAg
ICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwogCiAgICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
UmVncyk7CiB9CiAKQEAgLTE4ODYsNyArMTg5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9w
cm90b3R5cGVfb2YoY29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwogICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2
aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDcgKzM0OCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQ
dXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAog
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlkR1BSUmVnLCBJbnZhbGlkR1BS
UmVnKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw5MiArNDksMTAzIEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBpZiAobWV0YWRhdGEu
bV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJP
ZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBw
cm9maWxlLCByZWdUMik7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2Rl
QmxvY2spLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4
TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90Q2VsbC5saW5rKHRo
aXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFzZUdQUiwgcHJv
cGVydHlHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3Vs
dCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWws
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzLCByZWdUMik7
Ci0gICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVz
dWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgICAgIC8vIE9PUFMuIFN1cHBvcnQgdGhpcwor
ICAgICAgICAvL2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCisgICAgICAgIC8v
ICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZh
bDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAg
bV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIH0KLQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGNvZGVUeXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBP
cGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAgICBpZiAoIWhhc0FueVNsb3dDYXNl
cyhpdGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOworICAgIEpJVEdldEJ5VmFsR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CiAKLSAgICAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIG1vdmUoQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBtb3ZlKEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQobV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50
ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Om9mZnNldE9mQXJyYXlQcm9maWxl
KCksIGFyZ3VtZW50R1BSMik7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0
KTsKICNlbHNlCi0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICBBU1NF
UlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
T2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFs
cmVhZHkgdXNlZC4KLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1l
bnRHUFIyOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwotICAgICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgICAgICBDYWxsIGNhbGw7
Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBhcHBlbmRD
YWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCisgICAgY29uc3RleHByIEdQUlJlZyBwcm9m
aWxlR1BSID0gYXJndW1lbnRHUFIyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UgPT0gcmVnVDApOworICAgIHN0YXRp
Y19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkgPT0gcmVnVDEpOwor
CisgICAgbG9hZENvbnN0YW50KG1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
Y29kZVR5cGU6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOworICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTYwLDgg
KzE3MSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBj
b25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSNTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFy
Z3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BS
ID09IGFyZ3VtZW50R1BSMSk7CiAKQEAgLTE4NywyNyArMTk4LDM1IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAg
ICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0K
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0y
MjMsOSArMjQyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTIz
NSwyNiArMjU2LDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMK
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8v
IGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojp2YWx1ZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQotICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTMwMCwyMSArMzE1LDI4IEBAIHZvaWQgSklU
OjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQg
PSBieXRlY29kZS5tX2JyYW5kOwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BS
UmVnIGJyYW5kR1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6c3R1YkluZm87CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZh
dGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4p
OwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNl
cXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI4LDEz
ICszNTAsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogewog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKwogICAgIEpJVFByaXZhdGVC
cmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZh
dGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9w
dGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzcwLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2Vy
dChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFBy
aXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0
eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZh
bHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3By
aXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2
YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAs
MTkgKzM5MCwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJl
Z1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVj
a1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHVi
SW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3By
aXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCkBAIC0zOTQsOSArNDIzLDExIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGlt
aXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0MzcsMTgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5
IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJh
bmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02
NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8
ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5
cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGlt
aXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQ
cml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
X2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDQxLDI0
ICs0NjYsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cgogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qy
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHJlZ1QzKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdU
MCwgcmVnVDMsIHJlZ1Q0KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBi
YXNlR1BSLCBwcm9maWxlR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQ
Uik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdU
NCk7Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBwcm9maWxlR1BSLCBz
dHViSW5mb0dQUik7CisgICAgLy8gT09QUzoKKyAgICAvL2lmIChpc09wZXJhbmRDb25zdGFudElu
dChwcm9wZXJ0eSkpCisgICAgLy8gICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9
IHRydWU7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpQdXRCeVZhbDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9w
LCBPcFB1dEJ5VmFsRGlyZWN0PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVj
dDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBj
YW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlz
IGNlbGwuCkBAIC00NzQsNyArNTEzLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7
Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9
IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CkBA
IC00ODIsNyArNTIwLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SQogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0g
Ynl0ZWNvZGUubV9lY21hTW9kZTsKICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTQ5OCw3ICs1MzUsMTYg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZh
c3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBnZW4uc3R1
YkluZm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFI0KTsKKyAgICBpZiAo
aXNEaXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1l
dGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIGVsc2UK
KyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbERpcmVjdDo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9w
dGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0
LCBhcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNTEy
LDcgKzU1OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBDYWxsIGNhbGw7CiAgICAg
YXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRC
eVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7
CkBAIC01MjMsNyArNTY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNTM5LDExICs1ODUs
MTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSByZWdUNTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BS
ID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpwcm9maWxlOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2Rl
T2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKQEAgLTU3MCwyMCArNjE2LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRl
X25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdz
KHJlZ1QyKSwgSW52YWxpZEdQUlJlZywgcmVnVDQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJl
Zywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPnByaXZhdGVGaWVs
ZFB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVj
dHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC02MDMsMTMg
KzY2MCwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0aW9uID0g
cHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4g
dGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZv
KCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFI0
KTsKKyAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1
dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFBy
aXZhdGVGaWVsZE9wdGltaXplOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudHNH
UFIzLCBhcmd1bWVudEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNjIyLDE4ICs2ODAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSByZWdUNDsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCkBAIC02NDgsOSArNzAwLDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
cmVnVDQ7CiAKQEAgLTY4MCw3ICs3MzIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVy
X2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
ckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNjg5LDcgKzc0Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVy
QnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc1Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
ZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCBy
ZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVn
VDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEs
IHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBy
ZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzA5LDcgKzc2NCw4IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFs
LCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC03MTksNyArNzc1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmli
dXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJp
YnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc4NCwzMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFz
ZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3
cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdy
aXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNs
b2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODI2LDE3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAg
ICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsr
XTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGlt
aXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODUwLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQ
UjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJ
ZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODQ1LDIyICs5MDksMzMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0
eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9w
ZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBCYXNlbGluZURlbEJ5VmFs
UmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5k
IG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAg
IC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBh
IGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5NTgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
T3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRH
UFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIFRy
dXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCArOTc2LDE5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1
bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwg
ZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSBy
ZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC05
NjEsMjIgKzEwMzMsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVn
VDApOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BS
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9H
UFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNjcsMTcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTAwMywyNiArMTA4NywyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5
X2dldF9ieV9pZChjb25zCiAgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7
CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRP
cHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdl
dEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
IAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIp
OwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEw
MzIsMjAgKzExMTAsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25z
dAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
cmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5
cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZERp
cmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMu
YXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiArMTE0MSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRh
ZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTEwNzMsMjcgKzExNjIsMjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF9kaXJlY3QoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7
CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJv
cGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGlt
aXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERp
cmVjdE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExMDIsNTQgKzEx
ODUsMzkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
VlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5n
dGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21v
ZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5
SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFy
cmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2Rl
TWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSnVtcCBub3RB
cnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOworICAg
ICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6
TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhQXJy
YXlMZW5ndGg6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwog
ICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJl
Z1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQ
UiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7Cisg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHNXaXRo
VGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
KyAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTExNTgsMTYgKzEyMjYsMTggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5k
ZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTE3NywyNiArMTI0Nyw1OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAg
IHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcg
PSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1Jl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworCisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJh
dG9yIGdlbigKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3ModGhpc0dQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCkBAIC0xMjUwLDcgKzEzNTIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJl
c3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVu
dEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9u
R2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTEyNjAsMjkgKzEzNjYsMjMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdUMTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1l
bnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK31zCiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IoVk0mIHZtKQpAQCAtMTMyOSwyMyArMTQyOSwzNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgp
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUs
IGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8g
anVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMg
J2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRo
ZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9t
IHRoaXMuCiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZh
bHVlVlJlZywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
QmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0
Y2g7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVn
LCB2YWx1ZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNt
YU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9k
ZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6
Ok5vdERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5k
ID0gZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0
dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0
ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4K
QEAgLTEzNTksMTQgKzE0NzMsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChj
b25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0
QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNh
bGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
MTM3NiwyNSArMTQ5NCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0
IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIz
OyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkp
OwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xNDQxLDIwICsxNTUzLDMx
IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1Qx
KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTg2LDE3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0ODAsMjggKzE2MDYs
MjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBh
cmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSksIHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVy
ZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBp
dCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0
eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTUxMCwyNSArMTYzMCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3Qg
SW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwog
CiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1
YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFw
cGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUz
NywxNSArMTY2NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IElu
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEpJVEluQnlW
YWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRp
bWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJv
ZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1
bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBk
c3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BS
MywgYXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1
NTYsNTEgKzE2ODcsNTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJ
bgogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJh
c2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJv
ZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVBy
b2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVD
YWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRo
ZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZl
IGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVj
bHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0eXBlKQogewotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eU9yQnJhbmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5
R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAK
ICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBz
dHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1f
aW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3Qs
IEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSwgQWNjZXNzVHlwZSB0eXBlKQogewogICAgIEFTU0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIApA
QCAtMTYwOCw3ICsxNzQ0LDExIEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVh
bFJlZ2kKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0g
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGlt
aXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVy
YXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1By
aXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMp
OwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc1OCwyMSBA
QCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJy
YW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJy
YW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJp
dmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9w
ZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1l
ID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVC
cmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9
PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0
aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTY1Miw3ICsxNzg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2
YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVt
aXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9i
YXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCAsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NjYsNyArMTgwMCw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2
YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29k
ZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlQnJhbmQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCkBAIC0xNjg4LDYgKzE4MjIsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNzk0LDU5ICsxOTI5LDc3IEBAIHZvaWQg
SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX3Jl
c29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNv
ZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVz
b2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29k
ZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVCht
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0
cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRh
aW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBo
YXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4
aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwg
cmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBt
X2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAgIHB0
cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCku
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKKworICAgICAgICBhdXRvIGNsb3N1cmVW
YXJHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0
ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Nj
b3BlIENsb3N1cmVWYXIiKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICAgICAg
cmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MiKTsKKyAgICAgICAgfTsKIAotI2RlZmluZSBSRVNPTFZFX1ND
T1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBl
IyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0
b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVTT0xWRV9TQ09Q
RV9HRU5FUkFUT1IpCisgICAgICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvciA9
IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2Nv
cGVUaHVuayhzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmlj
Iik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zm
c2V0KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNv
ZGU7CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAg
ICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAg
ICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7Cisg
ICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICAgICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3Bl
VGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2
ZVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0
IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMg
ZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNh
dXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNv
bHZlU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSBy
ZWdUNzsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7
IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJl
Z1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHBy
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNv
ZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZl
U2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQu
dGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1Qz
LCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29k
ZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRy
KHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIApAQCAtMTg1
NSwyNiArMjAwOCwyNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52
YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAg
ICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVj
dCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNl
dE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFs
T2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRT
ZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAg
IH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykgewogICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAg
IGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
bG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJl
Z1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAgICBM
YWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBK
dW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAgewotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSks
IHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAg
ICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAg
ICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICAgICAg
aml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1dG8g
ZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEyICsy
MDM1LDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAg
ICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVj
dEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09G
RlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwot
ICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGds
b2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRp
bmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCBy
ZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1Qx
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFk
ZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgaml0Lm1vdmUoZ2xvYmFs
T2JqZWN0R1BSLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0x
ODk3LDExICsyMDUwLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczog
ewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxv
YWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhciosCiAgICAgICAgICAg
ICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVudmlyb25t
ZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2Jq
ZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZz
ZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsyMDYy
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAg
ICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENs
b3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMjA3Miw0NSBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsK
LQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90
R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewor
ICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5
cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNl
IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJl
Z1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6
b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDApOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0
aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7
Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGF1dG8g
ZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAgICAgICBK
dW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
cmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKKyAgICAg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICBub3RDYXNl
LmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9
CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFBy
b3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIGVt
aXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2Fz
ZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2Fz
ZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZq
aXQpOwogICAgIH0KIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNs
b3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93
Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNs
b3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZl
X3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9
CiAKLSNkZWZpbmUgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBc
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9z
Y29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAg
IGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUp
KSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0g
ICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBl
LCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQot
Rk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1
bmRlZiBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihW
TSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNh
biBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8v
IGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcg
YXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1h
eSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGlj
aCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBh
bHJlYWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIw
NjUsNiArMjE4MCw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8v
IE9PUFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZy
b21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0y
MTc4LDcgKzIyOTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yMjA2LDMxICsy
MzIyLDQxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBB
U1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsK
ICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9
PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCisgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0g
W10gKFZNJikgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1
bmsoQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7
CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5l
cmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9t
U2NvcGVUaHVuayhDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBv
cF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gZ2VuZXJp
Y0dldEZyb21TY29wZUdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6
Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9n
ZXRfZnJvbV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKKwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
bWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVn
VDY7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCi0g
ICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRyX3QqIG9w
ZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVy
YW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZf
dCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1l
dGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZp
bmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9zY29w
ZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dl
bmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZ
UEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdFVF9GUk9N
X1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3Bl
R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQ
Uik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIp
OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQ
Uik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVy
YXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0KKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYgKHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdldENU
SVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgY29kZSA9
IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3Ip
OworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZyb21T
Y29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZy
b21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05h
bWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBl
LCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBi
eSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBK
SVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
QEAgLTIyMzksNzcgKzIzNjUsNjggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRG
b3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygp
OworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwog
Ci0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0
YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFk
YXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7
CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJfdCBtZXRhZGF0YVN0cnVjdHVy
ZU9mZnNldCkgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG1ldGFkYXRh
U3RydWN0dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7
Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0g
ICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAg
ICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIp
IHsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9m
ZnNldE9mU3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCBy
ZWdUMCk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCBy
ZWdUMSkpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5i
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDEpKTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sg
PSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVk
c1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9G
KEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAg
ICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0
Y2hwb2ludCkpLCByZWdUMyk7CiAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFs
LCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZh
ckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAg
bG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRp
cmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBs
b2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCiAgICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9
IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgewogICAgICAgICBzdGF0
aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQo
VHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBv
cGVyYW5kR1BSKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNh
bEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworICAgICAgICBqaXQu
bHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmFkZFB0
cihzY29wZUdQUiwgb3BlcmFuZEdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mob3Bl
cmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdU
MCk7CiAgICAgfTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2Rl
ID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29s
dmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2lu
Y2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxP
YmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0
aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KHNjb3BlR1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNl
IHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2Jq
ZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhl
IHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJl
Z1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKICAgICAg
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7CiAgICAgICAgICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKIAotICAgICAgICAgICAgaml0QXNzZXJ0KHNj
b3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAg
ICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRy
KEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExh
bWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAgaml0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAg
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJh
bmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIG9mZnNldCk7CiAgICAg
ICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0
T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0z
MihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNv
bihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUu
bGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5j
aDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxp
bmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNl
dElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zm
c2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAg
ICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1
bHQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5uZWczMihvZmZzZXQp
OworICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAg
ICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdo
dCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwg
cmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xv
YmFsVmFyOgpAQCAtMjMxNywyMSArMjQzNCwxOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAg
ICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVy
YW5kKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0
LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVn
VDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFk
YXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsKICAgICAgICAgICAgIGVtaXRHZXRDbG9z
dXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpA
QCAtMjM0MSw3OSArMjQ1Niw1NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewot
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dl
dFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAg
ICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBp
c05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRv
RW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
KnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsK
KyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0
SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAg
SnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFsUHJv
cGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNl
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGppdC5sb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwgcmVn
VDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIs
IHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBq
aXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0
Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAgIEp1
bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5
ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGpp
dC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKCZq
aXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXIubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1w
KCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluaygm
aml0KTsKIAotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQorICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0
OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsK
KyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2Vy
dChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1Qw
LCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmls
ZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRh
dGE6Om9mZnNldE9mUHJvZmlsZSgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCku
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1Yihz
bG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
KTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcs
IHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRP
UihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwK
LSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21T
Y29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAg
SklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3Bl
VGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2
ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9T
Q09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgot
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRf
ZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRl
ZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGlu
ZSBKSVQgYmVjYXVzZQpAQCAtMjQ3MSw4NiArMjU2Myw3OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQp
OwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xv
YmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGlu
ZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7
Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVn
VDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0
Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1p
dE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpT
TGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVv
ZihSZWdpc3RlcikpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQ
dXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dElu
Zm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRh
dGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0
byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBz
dHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNp
bmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFs
T2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3Ig
dGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJz
IHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhp
bmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJl
c29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAg
ICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Om9mZnNl
dE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
WmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1
cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAo
dm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
KTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAg
fSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3Qs
IHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwogICAg
ICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNl
SW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAy
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJp
ZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OworICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOworICAgICAgICAgICAgLy8gT09QUzogd291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVy
c2lvbiB0aGF0IHRvb2sgR1BSUmVncworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29w
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAg
ICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JD
b2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBlbWl0
VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0gICAgICAgICAgICBpZiAoIWlzSW5pdGlh
bGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCBy
ZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihieXRlY29kZS5tX2dl
dFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hl
Y2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERa
IGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JP
cGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRl
cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxW
YXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFs
dWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpv
cGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDEpOworICAgICAg
ICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIHN0b3JlNjQo
cmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUg
bmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIHZhbHVlLgorICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRD
bG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAg
IGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5t
X3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVn
VDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAgICAgICAgIGVt
aXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQmFzZUluZGV4
KHJlZ1QwLCByZWdUMiwgU2NhbGVFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkpKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBo
YXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIG93bmVyL3ZhbHVlLgogICAgICAg
ICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTI1NjQsNTgg
KzI2NDksNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdl
dFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAK
LQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNh
bFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUg
dG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQubGluayh0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewor
ICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUgdGhpbmdzCisgICAg
Ly8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBp
cyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIsCisgICAgLy8gYWxs
IENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIKKyAgICAvLyBpZiB0aGUg
dmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhl
biB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hh
dCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlm
IChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikKKyAgICAgICAgZW1p
dENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBlbWl0Q29k
ZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZWxzZSB7CiAgICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dElu
Zm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOwogICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsK
KworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwor
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAK
ICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAgICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0Ogot
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKICAg
ICB9CiB9CiAKQEAgLTI2MjQsMTMgKzI3MDMsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNv
bHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNv
bHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgaWYgKHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElmIGFueSBsaW5rZWQgQ29k
ZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENvZGVCbG9ja3MgYXJlIGd1
YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFyLgogICAgICAgICBKSVRT
bG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19w
YXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAg
ICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2UgewogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3Bl
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0
cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1bWVudEdQUjAsIGN1cnJl
bnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
QEAgLTI3MDEsNyArMjc4Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50
cyhjb24KICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDAp
OwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZz
ZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7Ci0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNzU5LDcgKzI4NDEsNiBA
QCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2ln
bmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKQEAgLTI3NjcsNyArMjg0OCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb24KICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJu
YWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1Qw
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNzg5LDcgKzI4NzAsNiBAQCB0ZW1wbGF0ZSB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JOZXh0PigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CkBAIC0yODA1LDcgKzI4ODUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiAgICAgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIG1vZGUgc2V0IHdlIHRl
bmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2UgaXQgaWYgd2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJ
bnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgeworICAgIGlmIChieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKICAgICAgICAgR1BSUmVnIGVu
dW1lcmF0b3JHUFIgPSByZWdUMzsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVt
ZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJy
YW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6bW9kZVNldE9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKH5KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CkBAIC0yODQ3LDc4ICsyOTI3LDg2IEBA
IHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0
X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvckdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51
bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7
CiAKLSAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2Ny
YXRjaDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7CiAKLSAgICBv
cjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEp
KTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoMik7CisgICAgb3IzMihzY3JhdGNo
Mywgc2NyYXRjaDIpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBC
eXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBl
bmNvZGVkIHZhbHVlLgotICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsK
KyAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBz
Y3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBD
aGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVN
aXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAK
ICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bmRleCwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gy
KTsKICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQg
aW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRP
ZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1Qy
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
KTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsK
LQorICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3Jh
dGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIs
IHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1l
c0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwog
ICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91
dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAg
c3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWdu
RXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRy
ZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25F
eHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CiAgICAgY29uc3RleHByIGludHB0cl90
IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsK
LSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIs
IHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIp
OwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNo
LmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRh
dGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZElt
bTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1
Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51
bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhp
cyk7Ci0gICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRy
dXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAg
SnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVw
bGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9w
ZXJ0eUdQUik7CiAKICAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAog
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjky
NywxMCArMzAxNSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8K
ICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVu
dW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNv
ZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2Vu
dW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUg
Z2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQ
YXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJ
bXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjkzOSw3ICszMDI2LDkgQEAgdm9pZCBKSVQ6OmVtaXRf
ZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJz
b2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVy
YXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3Rv
cmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRl
c3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
T3duU3RydWN0dXJlTW9kZSkpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQzLDcgKzE1NDMsNyBAQCBzdGF0aWMgdm9p
ZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAKIHZvaWQgdW5saW5rQ2FsbChWTSYgdm0s
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmZh
c3RQYXRoU3RhcnQoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5
KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlua0luZm8p
KTsKICAgICAKICAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJp
Y3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGlu
dGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUs
IG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1
cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAg
b3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFy
eUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0
YSh0MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGJpbmVxIFRhZ09m
ZnNldFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBAIC0xMDIzLDcgKzEwMTksNyBAQCBt
YWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgICMgTWV0YWRh
dGEgaW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQyLCAuc2xv
dykKICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCi0gICAgICAg
IHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5
QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAg
ICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4OSwyMiArMTA4NSwxOCBAQCBlbmQp
CiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAKLSAgICBtYWNybyB1cGRhdGVBcml0
aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgIGVuZAotCiAg
ICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5lcSB0MSwgSW50MzJUYWcs
IC5vcE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNs
b3cKICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkK
KyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0
NSwgdDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdhdGVTcmNOb3RJbnQ6CiAg
ICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JpIDB4ODAwMDAwMDAs
IHQxCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRh
dGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0NSwgdDMp
CiAgICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExMTUsMTAgKzExMDcs
NiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3Bjb2Rl
U3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9wZXJhdGlvbikKICAgICBs
bGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gYXJp
dGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1l
dGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQot
ICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCiAgICAgICAgIGdldChtX3Jo
cywgdDIpCiAgICAgICAgIGdldChtX2xocywgdDApCkBAIC0xMTI2LDcgKzExMTQsNyBAQCBtYWNy
byBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCBJbnQz
MlRhZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5vcDJOb3RJbnQK
LSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwg
dDIpCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRT
dG9yZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKQEAgLTExMzYs
MTIgKzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAog
ICAgICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAgICAgICAgYmliIHQzLCBMb3dlc3RU
YWcsIC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAuc2xv
dwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAgICB1
cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJ
bnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgICAgICBqbXAgLm9wMU5vdElu
dFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAgICAgICAgZmlpMmQgdDEsIHQzLCBm
dDEKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAg
ICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVt
YmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9k
c3QsIHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1Myw3ICsxMTQxLDcgQEAg
bWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0
IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgb3BlcmFuZCBpcyBkZWZp
bml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYmlhIHQzLCBMb3dl
c3RUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIp
CisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGZp
aTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJhdGlvbihmdDEsIGZ0MCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTA1NiwxMCAr
MTA1Niw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFj
cm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAg
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1
cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0
c1t0Ml0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAg
bG9hZHEgW2NmciwgdDAsIDhdLCB0MQogICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5
LDcgKzEwNjUsNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAg
ICAgICAgIGludGVnZXJPcGVyYXRpb24odDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFn
LCB0MQogICAgICAgICBzdG9yZXEgdDEsIFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0
aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRj
aCgpCiAKICAgICAuc2xvdzoKQEAgLTExMzQsMTEgKzExMzAsNiBAQCBlbmQpCiAKIAogbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIHJldHVybikKLQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0
eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmls
ZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9v
cGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAg
ICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0xMTQ2LDEyICsxMTM3LDEyIEBAIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BO
ZWdhdGVTbG93CiAgICAgbmVnaSB0MwogICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRl
QXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmls
ZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDQpCiAgICAgcmV0dXJuKHQzKQogLm9w
TmVnYXRlTm90SW50OgogICAgIGJ0cXogdDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAg
IHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAwLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0
aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFy
aXRoUHJvZmlsZU51bWJlciwgdDEsIHQ0KQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xv
dzoKQEAgLTExNjQsMTAgKzExNTUsNiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29k
ZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29k
ZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAg
ICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0g
ICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJv
ZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAg
ICAgICBnZXQobV9yaHMsIHQwKQogICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkKQEAgLTExNzcsNyArMTE2NCw3IEBAIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0
LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQy
KQogCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVC
aW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0
NCkKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzEx
NzQsMTAgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAg
ICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQog
ICAgICAgICBmcTJkIHQxLCBmdDEKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJO
dW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFy
aXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQ0KQogICAgICAgICBqbXAgLm9wMU5vdEludFJl
YWR5CiAgICAgLm9wMU5vdEludE9wMkludDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVO
dW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3Qs
IEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAg
ICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNiw3ICsx
MTkzLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAg
ICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVm
aW5pdGVseSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51
bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisg
ICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmls
ZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEg
bnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9u
IDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjQ5OCw2ICsyNDk4LDE3IEBAIG1hY3JvIG5vdFN1
cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3Jo
IHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRh
dGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkK
KyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFk
YXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1w
XQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29u
ZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9u
IFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3
MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNp
b24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRl
bnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAg
IHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRp
YyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50
aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUq
LCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5
cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwq
KTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIg
Q2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykg
eyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50
aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxh
dGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
Q29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJl
dHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmlt
cGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVC
bG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVC
bG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVC
bG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFi
bGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRo
X3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVu
YXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwg
SlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0
YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAq
bWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQp
OwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436839</attachid>
            <date>2021-08-30 18:30:33 -0700</date>
            <delta_ts>2021-08-30 18:49:06 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>309636</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IHVubGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxp
bmtlZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRp
b24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
aXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0g
ICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRo
U3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhT
dGFydCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlz
IGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQg
dG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0
aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJz
OjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAg
IHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MjQsNiArNDI0LDEzIEBAIGlubGluZSBDb2RlT3JpZ2lu
IGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBz
byB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjYsNiArNDY2
LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAg
YnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENv
ZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAg
ICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENv
ZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAg
ICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVj
dGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1
Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4LDE0ICs1NDEsMTQgQEAgYm9vbCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJv
bWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9w
QWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBM
SU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMp
Ci0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVs
KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAg
IExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJ
VEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC0zMDc5LDcgKzMwOTIs
NyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFC
TEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBK
SVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJh
bWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMyOTUsMTMgKzMzMDgsMTMg
QEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRj
aCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZw
Yy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJl
dHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAg
Y2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRo
aXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMzMxMywxMSArMzMyNiwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29k
ZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAg
IGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0
ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAg
ICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0
aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVj
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFz
PE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDE2ICsyMzIsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0
OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9v
bCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRoZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJu
IHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFuZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAg
ICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFu
dChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+
KG1fbnVtVmFycyk7CkBAIC0yNjYsNiArMjU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNT
dGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAg
ICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBo
ZXJlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOwogCkBAIC00NzIsNiArNDYzLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5h
bWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFy
YW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKQEAgLTc5Nyw2ICs3ODksNyBAQCBwdWJs
aWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2Rl
YnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsg
cmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25l
ZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51
bUJyZWFrcG9pbnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkTWV0YWRhdGEuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2
ICs1MCw3IEBAIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGEKIAogc3Ry
dWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCB7CiAgICAgQXJyYXlQcm9maWxlIGFy
cmF5UHJvZmlsZTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCwg
YXJyYXlQcm9maWxlKTsgfQogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0
YWRhdGFBcnJheUxlbmd0aCkgPT0gMTIpOwogCkBAIC04OCw2ICs4OSw3IEBAIHVuaW9uIEdldEJ5
SWRNb2RlTWV0YWRhdGEgewogICAgICAgICBHZXRCeUlkTW9kZSBtb2RlOwogICAgICAgICB1aW50
OF90IGhpdENvdW50Rm9yTExJbnRDYWNoaW5nOyAvLyBUaGlzIG11c3QgYmUgemVybyB3aGVuIHdl
IHVzZSBQcm90b0xvYWQgbW9kZS4KICAgICB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1v
ZGUpOyB9CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YURlZmF1bHQgZGVmYXVsdE1vZGU7CiAgICAg
R2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0IHVuc2V0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFk
YXRhQXJyYXlMZW5ndGggYXJyYXlMZW5ndGhNb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zODUsNiArMzg1LDggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZkluQWNjZXNzKAogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCisvLyBPT1BTOiBN
YWtlIHRoaXMgc3R1ZmYgd29yayB3aXRoIGRhdGEgaWNzIHRvIG5vdCBhc3N1bWUgaW5saW5lIGFj
Y2Vzcy4KKwogdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVz
aW5nSW5saW5lQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQp
CiB7CiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2
aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg1LDYgKzI4NSw3IEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAgICAgICAgcmVzZXRQdXRCeShjb2Rl
QmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5h
bWU6CiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZh
bCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgpAQCAtNDMw
LDYgKzQzMSwxMDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpzZQog
ICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVUeXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBlID0gdW5s
aW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHViSW5mby5z
dGFydDsgLy8gT09QUzogZG8gd2UgbmVlZCBhIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBkb25l
TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93UGF0aFN0
YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKyAg
ICBjYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2Rl
SW5kZXgpOworICAgIGNvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0
ZWNvZGVJbmRleCk7CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25E
ZWxldGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkRlbEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZW9mOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
SW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0
QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6IAorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIHN3
aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNT
dHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAg
aWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVs
ZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uIG9w
ZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
UHV0QnlWYWw6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2Vk
U3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9k
ZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25Q
dXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQ
cml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpTZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNl
dFByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICAvLyBPT1BTOiBoYW5kbGUgaXRlcmF0b3JfbmV4dCB2YWx1ZSBpbiB1c2VkIHJlZ2lzdGVyIHNl
dC4KK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVj
a0NvbnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtNTYsNiArNTYsNyBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgewogICAg
IEdldEJ5VmFsLAogICAgIFB1dEJ5SWQsCiAgICAgUHV0QnlWYWwsCisgICAgUHV0UHJpdmF0ZU5h
bWUsCiAgICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC03
OCw2ICs3OSw4IEBAIGVudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKICAgICBTdHJpbmdM
ZW5ndGgKIH07CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworCiBjbGFzcyBT
dHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1
YkluZm8pOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtOTgsNiArMTAxLDggQEAg
cHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAorICAg
IHZvaWQgaW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8mKTsKKwogICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAg
Ly8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJ
ZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCkBAIC00NDcsNiArNDUyLDE4IEBAIGlu
bGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW4KICAgICB9CiB9CiAKK3N0cnVj
dCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7
CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZp
ZWxkUHV0S2luZDsKKyAgICBFQ01BTW9kZSBlY21hTW9kZTsKKyAgICBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXg7CisgICAgLy8gT09QUzogRG8gd2UgbmVlZCBzdGFydCBmb3IgZGF0YSBJQ3M/
CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0OyAvLyBU
aGlzIGlzIGVpdGhlciB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJQyBmb3IgKmJ5SWQgY2FjaGVz
LiBvciB0aGUgbG9jYXRpb24gb2YgcGF0Y2hhYmxlIGp1bXAgZm9yICdpbnN0YW5jZW9mJyBjYWNo
ZXMuCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9u
OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzbG93UGF0aFN0
YXJ0TG9jYXRpb247Cit9OworCiAjZWxzZQogCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDYgKzE3NSw3IEBA
IHB1YmxpYzoKIAogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4m
IGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAg
IGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcu
dG9Db25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0
YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQogICAgIGNvbnN0IEZpeGVkVmVjdG9y
PFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAK
QEAgLTIwNyw2ICsyMDgsMTQgQEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3Jp
cHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRNb2RlPiht
X3NjcmlwdE1vZGUpOyB9CiAKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rp
b25zKCkgY29uc3Q7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uQXQoQnl0ZWNv
ZGVJbmRleCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5kZXgpLnB0
cigpOyB9CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4g
PSBpbnN0cnVjdGlvbnMoKS5hdCgwKS5wdHIoKTsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1
Y3Rpb25zRW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihpbnN0cnVjdGlvbnNCZWdpbikgKyBpbnN0cnVjdGlvbnMoKS5z
aXplKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0cnVjdGlvbiA+PSBpbnN0cnVjdGlv
bnNCZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGluc3RydWN0aW9uc0VuZCk7CisgICAgICAgIHJldHVy
biBpbnN0cnVjdGlvbiAtIGluc3RydWN0aW9uc0JlZ2luOworICAgIH0KIAogICAgIHVuc2lnbmVk
IG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAg
ICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtNDEw
LDYgKzQxOSw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3Ry
ZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFj
ZSB0byBzdG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1f
YmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5h
cnlBcml0aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJv
ZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtNDU1LDYgKzQ2NywyOCBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7
CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBw
YykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNv
ZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChvZmZzZXQp
OworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOwor
ICAgICAgICBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgp
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRVbmFy
eUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3VuYXJ5
QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzLmFwcGVu
ZChCaW5hcnlBcml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkg
eyByZXR1cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0aFByb2Zp
bGUmIHVuYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlBcml0aFBy
b2ZpbGVzW2ldOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMg
PSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJs
ZS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw5ICsxMDEsMTgg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQog
CisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0g
dWludDE2X3Q7CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJf
dCBvZmZzZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9m
ZnNldCA9IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9m
ZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBl
T2Zmc2V0ICsgc2l6ZW9mKE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsK
KyAgICB9CisKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfb2Zmc2V0VGFibGVFbnRy
aWVzID0gTlVNQkVSX09GX0JZVEVDT0RFX1dJVEhfTUVUQURBVEEgKyAxOyAvLyBvbmUgZXh0cmEg
ZW50cnkgZm9yIHRoZSAiZW5kIiBvZmZzZXQ7CiAKICAgICAvLyBOb3QgdG8gYnJlYWsgYWxpZ25t
ZW50IG9mIDMyYml0IG9mZnNldCB0YWJsZSwgd2Ugcm91bmQgdXAgc2l6ZSB3aXRoIHNpemVvZihP
ZmZzZXQzMikuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAgdGVt
cGxhdGU8dW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzQXJndW1lbgogc3RydWN0IFZhbHVlUHJvZmls
ZUJhc2UgewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0g
bnVtYmVyT2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBu
dW1iZXJPZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBidWNrZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBu
dW1iZXJPZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKQEAg
LTEzNCw3ICsxMzMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIAogICAg
ICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29kZWRKU1Zh
bHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxhdGVkVHlw
ZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTU2LDYgKzE1NSw3IEBAIHN0cnVjdCBW
YWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJvZmlsZSA6
IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAgICBWYWx1
ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7IH0K
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBzdHJ1Y3Qg
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
VW5hcnkKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRz
dCwgc3JjLCB0eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5
cGUsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90Pihkc3Qs
IHNyYyk7CkBAIC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbmMo
UmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCk7Cisg
ICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFBy
b2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVjOjplbWl0
KHRoaXMsIHNyY0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9j
ay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODIs
NyArNjgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklEKj4KICAg
ICAgICAgZW1pdEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVn
aXN0ZXJJRCogc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAgICAgICAg
ICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1fY29kZUJs
b2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gZHN0Owog
ICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODg5LDcgKzg4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChp
c1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
bV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1l
U2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5Niw3ICs4OTYsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMg
PSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIElu
dmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAg
c2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2Fs
bGVlR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsK
ICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZs
ZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxl
RGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5ODUsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQ
cml2YXRlTmEKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lz
dGVycygpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5j
b2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNz
VHlwZTo6UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygp
LCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQ
cml2YXRlTmFtZSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRP
bmx5KGJhc2VHUFIpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1
ZVJlZ3MsIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAKQEAgLTE0NzQ3LDcgKzE0NzQ3LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBz
Y29wZS5ncHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRv
d1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwgY2FsbFNp
dGVJbmRleCk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFj
a2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0ciht
X2ppdC5jb2RlQmxvY2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMTcsNyArNDMxNyw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwog
CiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46
OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJ
VCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZh
bCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9k
ZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFt
ZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAKICAgICAgICAgICAgIGdlbmVy
YXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CkBAIC0xMDM1NSw3ICsx
MDM1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxD
YWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJ
bnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAg
ICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxD
YWxsKCk7CiAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDY5OCw3ICsxMDY5OCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBp
ZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5r
SW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQ
UlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAg
ICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBH
UFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZv
clRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwOTc5LDcgKzEw
OTc5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAg
ICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQ
YXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJl
Z1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7Cisg
ICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxG
YXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZp
c2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRh
LnJiCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjIgQEAgY2xhc3MgTWV0YWRhdGEKICAg
ICBkZWYgc3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVm
IGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRz
KHByZWZpeCwgZmllbGRzLCBnZW5lcmF0ZU9mZnNldE9mKQogICAgICAgICAgICAgZmllbGRzLm1h
cCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNo
Ci0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMo
cHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAgICAgICAg
ICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlw
ZSwgZmFsc2UpfVxuI3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAg
ICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGROYW1lfTsiCisgICAg
ICAgICAgICAgICAgICAgIGlmIGdlbmVyYXRlT2Zmc2V0T2YKKyAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSByZXN1bHQgKyAiXG4iICsgInN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2Zp
ZWxkTmFtZVswXS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJldHVybiBPRkZTRVRPRihN
ZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0CiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAg
ICBlbmQuam9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0
RmllbGRzKCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVs
ZHMoIiAgICAgICAgIiwgQGZpZWxkcywgdHJ1ZSkKIAogICAgICAgICBpbml0cyA9IG5pbAogICAg
ICAgICBpZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZp
c2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5OCw4ICs2OTgsMTMgQEAgdm9pZCBBc3NlbWJseUhl
bHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZp
cnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJ
bmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVn
VDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdU
Myk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgaW5m
byk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92
aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9IG5l
YXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE3MTgsNiArMTcxOCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0
VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZv
aWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5r
SW5mbyopOwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAg
dm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMsMTYgKzQzLDYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sbwog
ICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CiB9CiAKLXZvaWQgQ0NhbGxIZWxwZXJz
Ojpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVl
UmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4KQotewotICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0No
aWNrZW46OlBhY2tldCwgZnJhbWUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFk
b3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Ci0gICAgc3Rv
cmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihT
aGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKLSAgICBzdG9yZVB0cihzY29wZSwg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIHNjb3BlKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IGNvZGVCbG9jaykpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJp
dHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOwotfQotCiB2b2lkIENDYWxsSGVscGVyczo6ZW5z
dXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJl
ZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAgIFNoYWRvd0NoaWNr
ZW4qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0
MCw3ICs4NDAsMTggQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBh
bGwgdm9sYXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24g
dGhlIHRvcCBvZgogICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAg
IHZvaWQgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQs
IEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNr
ZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBH
UFJSZWcgc2NvcGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
KQorICAgIHsKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBmcmFtZSkpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgICAgIHN0b3JlVmFs
dWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7CisgICAgICAgIHN0b3JlUHRyKHNjb3BlLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgc2NvcGUpKSk7CisgICAgICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykp
KTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgY2FsbFNpdGVJbmRleCkpKTsKKyAgICB9CisKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEgcG9p
bnRlciB0byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQuCiAg
ICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tl
dCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAg
SklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRF
bWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25zdGFudCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7
CiB9CiAKIEpJVDo6fkpJVCgpCkBAIC0xMTMsNyArMTE0LDcgQEAgdm9pZCBKSVQ6OmVtaXROb3Rp
ZnlXcml0ZShXYXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJ
bnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9p
bnRlclRvU2V0KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBv
aW50ZXJUb1NldCkKIHsKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNz
KHBvaW50ZXJUb1NldCwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CkBAIC0xMjksNyArMTMwLDcgQEAgdm9pZCBKSVQ6OmFz
c2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgcmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCByZWdUMCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsK
QEAgLTY3NiwxNyArNjc3LDE2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAKIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1f
Y29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICAvLyBPT1BTOiBNYXliZSB0aGlzIHNo
b3VsZCBiZSBkb25lIG9uIHVubGlua2VkIGNvZGUgYmxvY2s/CisgICAgREZHOjpDYXBhYmlsaXR5
TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKICAg
ICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAgICAg
IG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5s
aW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNh
bkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwotICAg
ICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91bGRF
bWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTc0
Niw3ICs3NDYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAK
ICAgICBMYWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0g
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7Cisg
ICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRD
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUg
PSAtZnJhbWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9mZnNl
dCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxv
dzsKQEAgLTc2Miw3ICs3NjIsMTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZp
bmFsaXppbgogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAm
JiAoIW1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwgbV9jb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygp
ICsgRml4ZWRWZWN0b3I6Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIpOworCiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBp
cyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdhbnQgdG8gcHV0IGluIGEgZHVtbXkgcHJvZmlsaW5n
IHNpdGUgKHRvCiAgICAgICAgICAgICAgICAgLy8ga2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0
IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gcmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4KQEAgLTc3
OCw2ICs3ODEsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAg
ICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdH
UFIoKSk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1f
Y29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3Mp
OworICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwg
YXJndW1lbnQgKiBzaXplb2YoVmFsdWVQcm9maWxlKSkpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQpAQCAtOTE5LDEwICs5MjMsOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOwog
CiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlvbkluZm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8p
IHsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlu
a0luZm87Ci0gICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKLSAgICAgICAgICAgIHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQ
YXRoU3RhcnQpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CisgICAgICAgIFVubGlua2Vk
Q2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxpbmtlZENhbGxMaW5rSW5m
bzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pOwogICAgIH0KIAog
ICAgIHsKQEAgLTk1Myw3ICs5NTUsMTAgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAiQmFz
ZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0
Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcg
QmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2spKTsKKworICAgIG1faml0Q29k
ZS0+bV91bmxpbmtlZENhbGxzID0gV1RGTW92ZShtX3VubGlua2VkQ2FsbHMpOworICAgIG1faml0
Q29kZS0+bV9ldmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7
CiAKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dGKCJKSVQg
Z2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3Vs
dC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1
dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CkBAIC05NjgsNiArOTczLDggQEAg
Q29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5rQnVm
ZmVyLT5ydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MoKTsKIAorICAgIG1faml0Q29kZS0+
YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIG1fY29kZUJsb2NrLT5z
aHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CkBA
IC0xMDQyLDE0ICsxMDQ5LDE0IEBAIHZvaWQgSklUOjpkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJl
Zm9yZUMKICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVz
KCptX3ZtLCAiUHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24uIl9zKTsKIH0KIAotdW5zaWdu
ZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNp
Z25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJs
b2NrKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxv
Y2FscygpKSkpOwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdpc3RlckNvdW50Rm9yRnJhbWVQ
b2ludGVyT2Zmc2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAotaW50IEpJVDo6c3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoraW50IEpJVDo6c3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2spIC0gMSku
b2Zmc2V0KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MTcx
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDYgKzUwLDMyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisgICAgY2xhc3MgSklUQ29uc3Rh
bnRQb29sIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVzaW5nIENvbnN0YW50ID0gdW5zaWduZWQ7
CisKKyAgICAgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgICAgICBHbG9i
YWxPYmplY3QsCisgICAgICAgICAgICBDYWxsTGlua0luZm8sCisgICAgICAgICAgICBTdHJ1Y3R1
cmVTdHViSW5mbywKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgVmFsdWUgeworICAgICAg
ICAgICAgVHlwZSB0eXBlOworICAgICAgICAgICAgUGFja2VkUHRyPHZvaWQqPiBwYXlsb2FkOwor
ICAgICAgICB9OworCisgICAgICAgIENvbnN0YW50IGFkZChUeXBlIHR5cGUsIFBhY2tlZFB0cjx2
b2lkKj4gcGF5bG9hZCA9IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgICAgIG1fY29uc3RhbnRzLmFw
cGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBWZWN0b3I8VmFsdWU+IG1fY29u
c3RhbnRzOworICAgIH07CisKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBj
bGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOwpAQCAtMTQ5LDkgKzE3NSw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJ
bmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0
YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1
cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0
aW9uKTsKQEAgLTE4OCw4ICsyMTQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVm
Zm9ydCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3Rl
ckNvdW50Rm9yKENvZGVCbG9jayopOwotICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9m
ZnNldEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0
ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOworICAgICAgICBzdGF0aWMgaW50IHN0YWNr
UG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogCiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3Rh
dHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21w
aWxlVGltZSgpOwpAQCAtMjIzLDYgKzI0OSwyNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
fQogI2VuZGlmCiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIGxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0
LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAg
ICAgdm9pZCBsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0
LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAg
ICAgdm9pZCBsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQs
IEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5h
bWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0
IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZywgY29uc3Qg
Qnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNv
bnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGxv
YWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgICAgICB2b2lk
IGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNr
KEp1bXAganVtcFRvSGFuZGxlcikKICAgICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25D
aGVja3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpAQCAtMjU4LDE2ICszMDUsMTYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bj
b2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3Rf
dmFyYXJncwogICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJh
cmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAg
ICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyop
OworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25z
dHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5r
SW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0
IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAg
ICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2
YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI5
MSwxMCArMzM4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBUaGlzIGFzc3VtZXMg
dGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBh
dmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7
Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1Zh
bHVlUmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwg
SlNWYWx1ZVJlZ3MpOworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBHUFJSZWcpOworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBH
UFJSZWcpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAg
ICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVS
ZWdzKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKQEAgLTMwNyw2ICszNTQsMTAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNj
cmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChS
ZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklE
IHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAg
ICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwg
UmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgcHRyZGlmZl90LCBSZWdpc3RlcklEIGNlbGxH
UFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAgLTU5Miw3ICs2NDMsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwot
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xv
b3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CkBAIC02MjYsNyArNjc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHZv
aWQgZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJh
c2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUpOwotICAgICAg
ICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBl
KTsKKyAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlw
ZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5l
d0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTY0NSw3ICs2OTUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICNlbmRpZgogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXRO
b3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRl
KEdQUlJlZyBwb2ludGVyVG9TZXQpOworICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNo
cG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZh
cmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCopOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFs
dWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0Kik7CkBAIC02NTQsNiArNzA0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9p
ZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVn
aXN0ZXIpOwogCisgICAgICAgIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAg
ICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAg
ICAgYm9vbCBpc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBi
b29sIGlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjk1LDI2ICs3
NDYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBl
ID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKICAgICAgICAgfQogCi0jZGVmaW5lIERFQ0xBUkVfR0VU
X0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVz
b2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUo
REVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9HRVRfRlJP
TV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3Qg
Y2hhciogdGh1bmtOYW1lKTsKLQotICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJ
c1VzZWRGb3JPcFJlc29sdmVTY29wZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgLy8gTW9kdWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2llbnQg
dG8gZW1pdCBpbmxpbmUgdGhhbiB1c2UgYSB0aHVuay4KLSAgICAgICAgICAgIC8vIFJlc29sdmVk
Q2xvc3VyZVZhciBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9wX3Jlc29s
dmVfc2NvcGUuCi0gICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENs
b3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAgICAgfQotCi0jZGVm
aW5lIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmVzb2x2
ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hf
UkVTT0xWRV9UWVBFKERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVD
TEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVU
eXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoc3Rk
OjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BS
ZXNvbHZlU2NvcGVUaHVuayhzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciog
dGh1bmtOYW1lKTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0
b3IoVk0mKTsKQEAgLTkxOCwxMSArOTUxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2Fu
QmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsg
cmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRF
bWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQog
ICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAg
Ym9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAg
IC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9u
IHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9m
aWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7
IH0KQEAgLTkzMCwxMyArOTYxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGlj
IGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVD
b21waWxlVGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNr
IGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAg
ICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4g
eW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBw
YXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0
SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQ
cm9maWxlKEJpbmFyeU9wKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsK
IApAQCAtOTYzLDkgKzk4Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1f
c3dpdGNoZXM7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVk
R2V0UHV0SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEJpbmFyeUFyaXRoUHJvZmls
ZT4gbV9jb3BpZWRBcml0aFByb2ZpbGVzOwotCiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9u
Q2hlY2tzOwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVS
b2xsYmFjazsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC05OTksMTEgKzEwMjAs
MjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24q
LCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElD
R2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAg
ICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxk
RW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAg
ICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRyPEJhc2VsaW5lSklU
Q29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9v
bDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVjdENvbnN0
YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAgICAgIEJh
ZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgICAgICBCYWc8Q2Fs
bExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgICAgICBCYWc8VW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKworICAgICAgICBHUFJSZWcgbV9t
ZXRhZGF0YUdQUjsKKyAgICAgICAgR1BSUmVnIG1fY29uc3RhbnRzR1BSOwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQ
UjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/
IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0zMjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJlZ1QxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDIsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyAr
Mzc1LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0K
IAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjEsOCBAQCB2b2lkIEpJVDo6ZW1p
dEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4o
KS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5l
Z2F0ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51bmFy
eUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJvZmls
ZUluZGV4KTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMo
YXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0
cnVjdGlvbiwgbmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8g
Y2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJl
IGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRo
TmVnYXRlKTsKQEAgLTg5OSw4ICs5MDMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNv
bnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJQyog
YWRkSUMgPSBtX21hdGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk0OSwxMSBA
QCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5l
cmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAg
VW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7
CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0
aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwor
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlv
biwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxz
ZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1w
cyk7CiAKQEAgLTEwMTUsMTAgKzEwMjAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJ
VEJpbmFyeU1hdGhJQwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQog
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAg
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2Zp
bGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYg
KGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsK
IApAQCAtMTA1NSwxMyArMTA2MSwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5h
cnlNYXRoSUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwog
ICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAg
IGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1Q
dHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihy
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsK
IAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJl
bCgpOwpAQCAtMTEyMCwxMyArMTEyNywxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklU
QmluYXJ5TWF0aElDCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0
KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAg
ICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAg
ICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRo
SUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWlj
Pihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2Zp
bGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0
LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9u
KSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0
aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5k
ID0gbGFiZWwoKTsKQEAgLTExNjYsNyArMTE3NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihj
b25zdCBJbnN0cnVjdGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlu
a2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERpdj4oKS5tX3Byb2ZpbGVJbmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFu
ZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCBy
aWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4
ICsxMjE5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlu
a2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE11bD4oKSk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFy
aXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1
Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwp
OwogfQpAQCAtMTIyNyw4ICsxMjM1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25z
dCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRk
SklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFN1Yj4oKSk7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9tYXRoSUNz
LmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFk
ZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4o
c3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDcgQEAg
Ym9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1l
UmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkp
OwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdU
Mik7CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNl
KGNvbnN0IAogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRW
aXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3Vu
bGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zMjQsNyArMzI0LDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNl
KHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQo
Ynl0ZWNvZGUpOwpAQCAtMzQxLDcgKzM0MSw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9
IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzU0
LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJ
KHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYg
Ynl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihi
eXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCks
IHJlZ1QwKTsKIH0KIApAQCAtNTMsNyArNTMsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9w
OjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0
cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9p
ZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0lu
Zm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CkBAIC03OCw3ICs3OCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAg
ICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwog
LCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxM
aW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2Rl
LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewogICAg
IFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC0xMDYs
OSArMTA2LDEwIEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKIAog
ICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QxLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOwotICAg
IGxvYWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCBy
ZWdUMCk7Ci0gICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdU
Mik7Ci0gICAgc3RvcmUzMihyZWdUMiwgaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKSk7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCBy
ZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZN
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwgcmVnVDMpOworICAgIEp1bXAgbm90Qmln
Z2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMywgcmVnVDIpOworICAgIHN0b3JlMzIocmVnVDIs
IEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpKSk7CiAgICAgbm90QmlnZ2VzdC5saW5rKHRoaXMpOwogICAgIAogICAgIC8v
IEluaXRpYWxpemUgJ3RoaXMnLgpAQCAtMTI3LDE2ICsxMjgsMTYgQEAgYm9vbCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbChjb25zdCBPcCYpCiB0ZW1wbGF0ZTw+CiBib29sIEpJVDo6Y29tcGlsZUNhbGxF
dmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVjb2RlKQogewotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0
ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBhcmd1bWVudEdQUjEpOworICAg
IHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZy
YW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwg
cmVnVDIpOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BS
Mik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsK
IAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIApAQCAtMTQ4LDcgKzE0OSw3IEBA
IHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENh
bGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxs
TGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8q
IGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAog
ICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE1
Nyw0NiBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVv
ZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0s
IGluZm8pOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJ
bmZvKiwgdW5zaWduZWQpCi17Citib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwg
VW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCkgewogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBp
bGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZv
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwo
Y29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxs
TGlua0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0
YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAg
IHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0
ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2Fs
bEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVm
ZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1f
YXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3RlcjsKKyAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0
ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVy
KTsKLSAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNo
dWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0
YS5hcmdzW2ldID0KKyAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAg
VmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwK
ICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5j
YWxsZWUgPQotICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpT
KTsKLSAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2sp
OwotICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZm
bGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpT
KTsKKyAgICBzaHVmZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2Nr
KTsKIAotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7
Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZv
clRhaWxDYWxsKCk7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdU
Mik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxE
YXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcigqdGhpcywgKnNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAg
ICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNo
cmlua1RvRml0KCk7CisgICAgaW5mby0+ZnJhbWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZs
ZURhdGEpOworCiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0
aW9uOwogICAgIApAQCAtMjE4LDMyICsyMjIsNDAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
Y29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsg
Q29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBh
ZnRlciByZXR1cm4uCiAgICAgKi8KLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwot
ICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVC
bG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAg
Y29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlu
a0luZm8qIGluZm8gPSBudWxscHRyOworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5m
b0NvbnN0YW50ID0gVUlOVF9NQVg7CisgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkg
eworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG1fdW5saW5rZWRDYWxscy5h
ZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlE
KTsKKworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOworCisgICAgICAgIEFTU0VSVChtX2Nh
bGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOworICAg
ICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnVubGlua2VkQ2Fs
bExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFudDsKKworICAgIH0K
KyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAogICAgIC8v
IFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBB
cmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29k
ZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1aW50MzJf
dCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwog
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVl
LgogICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKIAogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0
ZWNvZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25J
bmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENh
bGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQot
ICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4
KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9J
bmRleCwgaW5mb0NvbnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50
KGluZm9Db25zdGFudCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsK
LSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhp
cywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAg
ICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKKyAgICAgICAgICAgIC8vIE9PUFMKICAg
ICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVG
b3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9KTsKQEAgLTI1MywxMyArMjY1LDEzIEBA
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlz
LCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8g
c2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1Qw
LCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dD
YXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRD
YWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCArMjg1LDIyIEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRo
U3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGxvYWRD
b25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5r
SW5mb0NvbnN0YW50LCByZWdUMik7CiAKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgeworICAgICAgICAvLyBPT1BTCiAgICAgICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICB9CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgo
Km1fdm0sICp0aGlzKTsKKyAgICBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgqbV92
bSwgKnRoaXMsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRS
ZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKQEAgLTM5NSwxNyArNDA5LDMw
IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KIAogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKICAgICAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworCisgICAgbW92ZShyZWdUMCwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwo
KSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5m
b0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXN1bHRHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9uZXh0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxpbmso
dGhpcyk7CiB9CkBAIC00MTYsMTAgKzQ0Myw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9vcGVuKGNvbnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+
KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCi0gICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGl0
ZXJhdG9yR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBMaXN0
IG5vdE9iamVjdDsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyYXRv
ckdQUikpOwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0b3JH
UFIpKTsKQEAgLTQzMiwxOSArNDU3LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnMKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBp
dGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkp
OwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
bW92ZShpdGVyYXRvckdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxk
ZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5l
eHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IAogICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRo
cm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRvbmUu
bGluayh0aGlzKTsKIH0KQEAgLTQ3NSw0NSArNDk4LDY3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0
ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAg
IC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAg
ICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJl
Z1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3
aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2
YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRj
aDsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3Vs
dDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0
R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09
IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
KTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1
ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAg
ICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2
ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJl
Z3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2Vy
dmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5
cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAg
ICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQ
UiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJl
Z3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAg
ICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgICAg
ICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lz
dGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJy
YW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxHUFIp
OwogCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
Zmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCByZWdUNCwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmlt
cGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAg
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlc3VsdEdQUik7CiAKICAg
ICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwogICAgIH0KQEAgLTUyNyw1OSArNTcyLDU1
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1w
KCkpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgewogICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0
R1BSID0gcmVnVDI7CiAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAgICAg
SnVtcExpc3Qgbm90T2JqZWN0OwotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90
Q2VsbChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKGl0ZXJDYWxsUmVzdWx0R1BSKSk7CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKTsKICAgICAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAg
ICAgCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAgIG5v
dE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwotCi0gICAg
ICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9u
ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkb25lVlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFu
Y2hJZk5vdE9iamVjdChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIHJlZ1QxKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1
bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBk
b25lVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0
cygpKTsKKworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9u
ZVZSZWcsIGRvbmVHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2Jq
ZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwog
ICAgIH0KIAogICAgIHsgICAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgICAg
IEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCk7CiAgICAgICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAK
ICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgQ2FsbCBj
YWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCB2YWx1ZVZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJS
ZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFyZ3Vt
ZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKICAgICB9
Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OSwxMCArMTU5LDEwIEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgeworICAgICAg
ICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpIC8vIE9PUFMKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNv
ZGUoaml0VHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIE9w
dGlvbnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApAQCAtMjQ4LDYgKzI0
OCw0MSBAQCBwcm90ZWN0ZWQ6CiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBtX3JlZjsKIH07
CiAKK2NsYXNzIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3Mo
TWF0aElDSG9sZGVyJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fYWRkSUNzID0gV1RGTW92ZShv
dGhlci5tX2FkZElDcyk7CisgICAgICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhlci5tX211bElD
cyk7CisgICAgICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAgICAg
IG1fc3ViSUNzID0gV1RGTW92ZShvdGhlci5tX3N1YklDcyk7CisgICAgfQorCisgICAgSklUQWRk
SUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVy
biBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorICAgIEpJVE11bElDKiBhZGRKSVRNdWxJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9tdWxJQ3MuYWRk
KGFyaXRoUHJvZmlsZSk7IH0KKyAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUp
OyB9CisgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisKKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0
eXBlPgorICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxl
KSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklU
TXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFk
ZEpJVE11bElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0
b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVROZWdJQyogYWRkTWF0
aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9m
aWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5l
cmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0
aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisKK3By
aXZhdGU6CisgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1f
bXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBt
X3N1YklDczsKK307CisKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKERp
cmVjdEpJVENvZGUpOwogY2xhc3MgRGlyZWN0SklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENv
ZGVSZWYgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURF
TlRJRklFUihEaXJlY3RKSVRDb2RlKTsKQEAgLTI2Niw2ICszMDEsMTYgQEAgcHJpdmF0ZToKICAg
ICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fd2l0aEFyaXR5Q2hlY2s7CiB9OwogCitjbGFzcyBC
YXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRl
ciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4g
Y29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKKyAgICAgICAgOiBE
aXJlY3RKSVRDb2RlKFdURk1vdmUoY29kZSksIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCkKKyAgICB7IH0KKworICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxp
bmtlZENhbGxzOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7IC8v
IE9PUFM6IG1ha2Ugc3VyZSB3ZSB2aXNpdCB0aGVzZSBzb21laG93LiBPciBhc3NlcnQgd2UgZG9u
J3QgaGF2ZSB0bywgc2luY2UgdGhleSdyZSB2aXJ0dWFsIGNhbGxzLgorfTsKKwogY2xhc3MgTmF0
aXZlSklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgewogcHVibGljOgogICAgIE5h
dGl2ZUpJVENvZGUoSklUVHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxNzE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVu
dGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIklubGlu
ZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBzdGF0aWMg
U3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
cjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJ
VFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2ppdFR5cGUo
aml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1YkluZm8gPSBt
X2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3Jp
Z2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxvY2sgPyBj
b2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0
dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwogCiAg
ICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1
OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIExpbmtC
dWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0g
c3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9u
ID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zbG93UGF0aEJl
Z2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKyAgICBq
aXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHJ1Y3R1cmVTdHViSW5mb0dQUik7CisgICAgaml0
LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9kb25l
ID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3Io
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUs
CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2Us
IEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZp
c2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMTMgQEAgbmFtZXNwYWNl
IEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsK
IGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwog
CiBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1
aW50OF90OwogCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVE
ZWxCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BS
SW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZv
OjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6
cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2lu
ZyBhIENvZGVCbG9jayBhbmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBT
dHViSW5mby4KKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJ
bmZvID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0
IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvdG8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0
cnVjdCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUklu
Zm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZv
OjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitz
dHJ1Y3QgQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHJlc3VsdCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsK
K307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVn
VDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1Qz
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7
Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQo
YmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KGJyYW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwog
Y2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yKCkgeyB9CkBAIC02MiwxNSArMTY0LDIwIEBAIHB1YmxpYzoKICAgICB2
b2lkIGZpbmFsaXplKAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExp
bmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogbV91bmxpbmtlZFN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7IHN0
ZDo6bnVtZXJpY19saW1pdHM8SklUQ29uc3RhbnRQb29sOjpDb25zdGFudD46Om1heCgpIH07CisK
IHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9q
aXRUeXBlOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCiAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93
UGF0aEJlZ2luOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOworICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOyAvLyBPT1BTOiBtYWtlIHJlcG9y
dENhbGwgcGFzcyBzb21ldGhpbmcgaW4gd2UgY2FuIHVzZSBmb3IgdGhlIG5vbi1DVEkgdGh1bmtz
IGJ1aWxkcy4gCiB9OwogCiBjbGFzcyBKSVRCeUlkR2VuZXJhdG9yIDogcHVibGljIEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTEzMiw4ICsyMzksOCBAQCBwdWJsaWM6CiAgICAgSklUUHV0
QnlJZEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0g
ICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1Zh
bHVlUmVncyBiYXNlLAotICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZv
R1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxv
Y2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNl
dCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNj
cmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXND
b25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0
YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNl
bGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAgICAgICAgLy8gT09QUzogZmluZCBhIHdheSB0byBh
c3NlcnQgdGhhdCBhbGwgbGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXND
ZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsK
LSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9B
U1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOwor
ICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0
ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xODUsNyArMjEwLDcgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeAogCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VU
b05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJ
bmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBB
U1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hl
Y2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50
TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBA
IGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0
ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2tw
b2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAg
IGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBA
IC0yOTMsMjkgKzMxOCwzNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJz
dHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0
dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFs
dWVSZWdzIHZhbHVlKQotewotICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0g
ICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBz
byB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0j
ZWxzZQotICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nh
c3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAg
IHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQp
OwotICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsK
LSNlbmRpZgotfQorICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25z
dGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFz
Q2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30KKworLy8gT09QUworLy9pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFs
dWVSZWdzIHZhbHVlKQorLy97CisvLyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsK
Ky8vCisvLyAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBi
dWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lm
IFVTRShKU1ZBTFVFNjQpCisvLyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUu
bV9idWNrZXRzKTsKKy8vI2Vsc2UKKy8vICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmls
ZS5tX2J1Y2tldHMpOworLy8gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlw
dG9yLT5hc0JpdHMucGF5bG9hZCk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVz
Y3JpcHRvci0+YXNCaXRzLnRhZyk7CisvLyNlbmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpN
ZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2Vu
ZGlmCkBAIC0zMjMsMjQgKzM1MywyNSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJv
ZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBK
U1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZv
cihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKyAgICBw
dHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2Rl
PihtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZG
aXJzdEJ1Y2tldCgpOworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3MobV9tZXRhZGF0
YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJS
ZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxl
LCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0
UmVnKQorLy97CisvLyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisvL30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFk
YXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Citpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKQEAgLTM2
MCw2ICszOTEsMjEgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlVwog
ICAgIH0KIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRy
ZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVy
SUQgc2NyYXRjaEdQUikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CisgICAg
ICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEo
c2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKKyAgICB9Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2Vs
bEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQoreworICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJv
ZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2Vs
bEdQUiwgc2NyYXRjaEdQUik7Cit9CisKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9w
ZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJldHVybiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CkBAIC0zODAsNyArNDI2LDcgQEAgQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0
TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAg
ICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7Cisg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1
c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAg
IGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTQyLDcgQEAg
aW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewot
ICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25v
d25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTUyLDcgQEAg
aW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdp
c3RlcklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7
CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFu
dCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAt
NTE0LDExICs1NjAsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
CiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudElu
dChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYm
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQog
ewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsNyArNTg1LDgg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVCht
X2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVy
aW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMg
c2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgICAgICAvLyBPT1BTOiBoYW5k
bGUgbGluayB0aW1lIGNvbnN0YW50cyBoZXJlLi4uCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQog
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRz
dCk7CiAgICAgICAgIGVsc2UKQEAgLTU2NiwxMSArNjA4LDYgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwg
ZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50
KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lz
dGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01
OTUsNyArNjMyLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQog
CiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVn
aXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY3
NCw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBp
ZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9j
ay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
R2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQot
ewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hN
YXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRH
ZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0
SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7
Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1
dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6
OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBr
ZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAz
MiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1
dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChp
dGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBp
dGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGll
ZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQ
cm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zm
c2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiAr
Njk1LDUyIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICBy
ZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBs
b2FkUHRyKEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRh
dGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhtX21ldGFkYXRhR1BS
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBC
eXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAg
bG9hZDgoQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZh
bHVlLCBBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMy
VG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90
IG9mZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1f
dW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVj
b2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3Qg
Qnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAg
IGFkZFB0cihtX21ldGFkYXRhR1BSLCBUcnVzdGVkSW1tUHRyKG1fdW5saW5rZWRDb2RlQmxvY2st
Pm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJl
c3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAg
bG9hZFB0cihBZGRyZXNzKG1fY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNv
bnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9n
bG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzEs
NyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNh
bGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBB
ZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAg
IEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNv
ZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgeworICAgICAgICAvLyBPT1BT
CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsK
ICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgc3RvcmU2NChUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC04
NywzNyArODgsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgog
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNp
emUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFj
aXR5KCkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFs
Q29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRS
ZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJl
Z2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVn
ID0gcmVnVDM7CiAKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVt
cCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBh
dXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxv
Y2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3Ip
LCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3Jh
dGNoUmVnLCBzbG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2Uo
cmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtdXRhdG9y
RmVuY2UoKm1fdm0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAgbG9hZFB0
ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Om9mZnNldE9mT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUoKSArIG9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Om9mZnNldE9mT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUoKSArIG9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJlZyk7
CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVk
SW1tUHRyKG51bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklU
QWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZSwgYnV0dGVyZmx5
LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVn
LCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBl
bWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKKyAgICBt
dXRhdG9yRmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsK
KwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0
dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2Jq
ZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVtaXRTdG9y
ZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTE1NCwzMCArMTUzLDM4IEBAIHZv
aWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9
IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VW
YWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAv
LyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhp
cyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm90bywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
dG9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2
YWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9HUFIpOwog
ICAgIAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUg
YSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJ
bnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAg
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAs
IC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHBy
b3RvCi0gICAgICAgIHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHJl
c3VsdEdQUiwKKyAgICAgICAgdmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAgICAgICBz
dHViSW5mb0dQUiwKKyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNo
MSwgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCisK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCArMTk5LDEz
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXpl
OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpu
b25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0
YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgcmVn
VDIsIHJlZ1QxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOwot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgc3Rh
dGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09IGFyZ3Vt
ZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6
OnZhbHVlID09IGFyZ3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKQorICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5
cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBA
IC0zNzQsNyArMzgwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9u
KgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgp
OwogI2Vsc2UKQEAgLTM4NSw3ICszOTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0m
IHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBq
aXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZl
UmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQxNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3By
aW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVy
dHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQsOSAr
NDM5LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZvaWQg
SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0
aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlv
biwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
bmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
b3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0NzEs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5j
aElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsK
ICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNGYWxz
ZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzQ4OCw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyArNTI3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8vIEZp
cnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBi
aXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJn
ZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7
CiAKQEAgLTU0Myw3ICs1NTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3Qg
SW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRh
cmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTYyNSw4ICs2
MzMsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJy
YW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0
KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNU
cnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY1MCw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBy
ZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyAr
NzA1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJl
Z1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcg
KzcyMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRo
cm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtOTA4LDcgKzkxOSw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05
MTgsNyArOTMwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVx
PigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsK
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCkBAIC05OTMsNyArMTAwNiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Nh
dGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxG
cmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNh
dGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9u
SWZDYXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMjQsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3Vt
ZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVm
ZmVyOwotICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNo
LCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFu
ZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5k
VmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRv
IHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBF
eGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAg
ICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXIt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsK
LSAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUp
LCByZWdzKTsKLSAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQog
fQogCkBAIC0xMTEyLDcgKzExMTMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5n
KGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVl
c3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVi
dWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9k
ZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0x
MTQ4LDcgKzExNTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0
CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTMxMCwyMyAr
MTMxMSwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lk
IEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1Ro
aXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2Fj
aGVkU3RydWN0dXJlSUQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Ny
Y0RzdCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsK
IAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBl
KSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgbG9hZDMyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRvVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3Ry
dWN0dXJlSUQoKSwgcmVnVDIpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUu
bV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9
ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJl
Z1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklE
IHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAtMTM0Miw3ICsxMzM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJl
ZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigp
IC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIo
QWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpv
ZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVS
ZWcpOwogCi0gICAgbG9hZFB0cihjYWNoZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOwor
ICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wQ3JlYXRlVGhpczo6b2Zmc2V0T2ZD
YWNoZWRGdW5jdGlvbigpLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVs
dGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3Rl
ZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykp
OwogICAgIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM2
OSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVy
blZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEz
ODIsNyArMTM4MCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIo
VHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BS
LCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyArMTM5Myw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcg
KzE0MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0
MTgsMTAgKzE0MTksMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9t
KAogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0
b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hh
c0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjph
cmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTUwOSw3ICsxNTExLDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1lbnRHUFIwKTsKICNlbHNl
CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMzsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
QEAgLTE1NjQsNyArMTU2Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3Qg
SW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1Jl
Z2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVn
ZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBHUFJSZWc6OmFyZ3VtZW50R1BSMDsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2RlQmxv
Y2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwogfQogCkBAIC0xNjY0LDEzICsxNjY5LDEyIEBAIHZvaWQgSklUOjplbWl0X29w
X25ld19hc3luY19nZW5lcmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9
IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSwgcmVnVDAsIHNpemUpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRl
Y29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSgpLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9m
aWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDEsIHJlZ1QwLCBzaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY3OSwxNCAr
MTY4MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBz
aXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRMb2Fk
KHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKICNlbmRpZgogfQogCkBAIC0xNjk0LDggKzE2OTcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERv
dWJsZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRo
ZSB0eXBlIHByb2ZpZWxyIGlzIGVuYWJsZWQuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2Fj
aGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7
CiAKQEAgLTE3NzcsMjAgKzE3ODEsMjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19j
aGlja2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25B
cmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4i
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRv
d0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAg
ICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24t
YXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAg
ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gx
UmVnLCBzY3JhdGNoMlJlZyk7CisgICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBu
b25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFkb3dDaGlj
a2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVn
KTsKKyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1
ZSwgcmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwg
cmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
SlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQ
YWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0
dXJuIG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdXNpbmcgdGhlIGNvbnRyb2wg
ZmxvdyBwcm9maWxlci4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFz
aWNCbG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhp
cyk7CkBAIC0xODYwLDcgKzE4NjgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQo
Y29uc3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwogCiAg
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE4ODYsNyArMTg5NCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgp
LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2Fz
ZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDcgKzM0OCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlkR1BSUmVn
LCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9
IHRydWU7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4
MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw5MiArNDksMTAzIEBAIG5hbWVzcGFjZSBKU0Mgewogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0
dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBp
ZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFs
SUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpn
ZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CisgICAgICAgIGF1dG8gbm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90
Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQUiwg
YmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnJlc3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRS
ZWdzLCByZWdUMik7Ci0gICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkp
Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAg
ICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgICAgIC8vIE9PUFMuIFN1
cHBvcnQgdGhpcworICAgICAgICAvL2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkp
CisgICAgICAgIC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwor
CisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtl
ZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpHZXRCeVZhbDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIH0KLQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93
Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAgICBpZiAoIWhh
c0FueVNsb3dDYXNlcyhpdGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBKSVRHZXRCeVZhbEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOworICAgIEpJVEdl
dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CiAK
LSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAg
IG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAg
ICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBhcmd1bWVudEdQUjQp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Om9mZnNldE9m
QXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3Qs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywg
YXJndW1lbnRHUFI0KTsKICNlbHNlCi0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAg
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwot
ICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29k
ZUluZGV4KTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
LSAgICAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8g
YXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxl
R1BSID0gYXJndW1lbnRHUFIyOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7Ci0K
LSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwotICAg
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgICAg
ICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpOwotICAgICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdU
MTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0
KCkpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UgPT0gcmVnVDAp
OworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkg
PT0gcmVnVDEpOworCisgICAgbG9hZENvbnN0YW50KG1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wY29kZVR5cGU6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIp
OworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFs
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAg
ICB9CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQpAQCAtMTYwLDggKzE3MSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BS
NTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKQEAgLTE4NywyNyArMTk4LDM1IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAog
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAg
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1l
LAorICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0
dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0
QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1
bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCkBAIC0yMjMsOSArMjQyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJp
dmF0ZV9uYW1lKGMKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQ
cml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlv
bkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTIzNSwyNiArMjU2LDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJp
dmF0ZV9uYW1lKGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0g
YXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFt
ZU9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTMwMCwyMSArMzE1LDI4
IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJy
YW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BS
KTsKLQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAog
ICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFu
ZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCByZWdUMik7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZv
cy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlNldFByaXZh
dGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2Vz
LmFwcGVuZChnZW4pOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0
aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJz
LgpAQCAtMzI4LDEzICszNTAsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRl
X2JyYW5kKAogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKwogICAg
IEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nl
c3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRH
UFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFBy
aXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzcwLDE4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAg
c3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwog
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9w
ZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9u
VHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1l
bnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1p
emUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0zNzAsMTkgKzM5MCwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRl
X2JyYW5kKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnJhbmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5k
R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1
YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJh
bmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCkBAIC0zOTQs
OSArNDIzLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFu
ZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50
R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZh
dGVCcmFuZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2
LDI0ICs0MzcsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8g
YXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVu
Y3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+
OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2
YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZh
dGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNDQxLDI0ICs0NjYsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25z
dCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHJlZ1QzKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJlZ1Q0KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9maWxlR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgcHJvZmlsZUdQUik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiks
IHJlZ1QzLCByZWdUNCk7Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBw
cm9maWxlR1BSLCBzdHViSW5mb0dQUik7CisgICAgLy8gT09QUzoKKyAgICAvL2lmIChpc09wZXJh
bmRDb25zdGFudEludChwcm9wZXJ0eSkpCisgICAgLy8gICAgZ2VuLnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IHN0ZDo6
aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsRGlyZWN0PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtp
bmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29k
ZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAK
ICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIg
aWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00NzQsNyArNTEzLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9k
ZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAg
IGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CkBAIC00ODIsNyArNTIwLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSQogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAg
IGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKICAgICAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTQ5
OCw3ICs1MzUsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3Vy
ZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJl
Z1QyLCBnZW4uc3R1YkluZm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFI0
KTsKKyAgICBpZiAoaXNEaXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCksIE9wUHV0QnlW
YWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUp
OworICAgIGVsc2UKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbERpcmVjdDo6TWV0YWRh
dGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRC
eVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSks
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywg
YXJndW1lbnRHUFI0LCBhcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtNTEyLDcgKzU1OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBDYWxs
IGNhbGw7CiAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmlj
dCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZSk7CkBAIC01MjMsNyArNTY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAt
NTM5LDExICs1ODUsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpwcm9wZXJ0eTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJz
Ojp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpwcm9maWxlOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAgIGppdC5zdG9y
ZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKTsKQEAgLTU3MCwyMCArNjE2LDMxIEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2
YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSks
IEpTVmFsdWVSZWdzKHJlZ1QyKSwgSW52YWxpZEdQUlJlZywgcmVnVDQpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
SW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8t
PnByaXZhdGVGaWVsZFB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3Jp
dGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwu
CkBAIC02MDMsMTMgKzY2MCwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVf
bmFtZShjCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8g
b3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQ
cml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0
aW1pemU7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNv
bmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwg
Z2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1l
bnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFI0KTsKKyAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNEZWZpbmUoKSA/
IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25Q
dXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBhcmd1bWVudHNHUFIzLCBhcmd1bWVudEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwog
I2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNjIyLDE4ICs2ODAsMTIgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICBl
bHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC02NDgsOSArNzAwLDkgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
cmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3MzIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1Qx
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzc0Miw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc1Myw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0
dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJp
YnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
YXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzA5
LDcgKzc2NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAg
ICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzc1LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwg
cmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc4
NCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJZDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1
cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNo
b3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0
ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODI2LDE3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2Rl
bEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVs
ZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODUwLDE5IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIg
PSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2Rl
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5
X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODQ1LDIyICs5MDks
MzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEs
IGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5l
RGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Bl
cnR5R1BSLCBwcm9wZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBCYXNl
bGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmll
ciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVn
aXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUt
YmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5NTgsMTEgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBh
cmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZh
bE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudEdQUjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCArOTc2LDE5IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1v
ZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9k
ZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5W
YWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
ICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCkBAIC05NjEsMjIgKzEwMzMsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VW
UmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVn
cywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdz
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYs
MTQgKzEwNjcsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91
bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4Kytd
OwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25U
cnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBh
cmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTAwMywyNiArMTA4NywyMCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBh
cmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8
fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVy
dHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlv
blRyeUdldEJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+
Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dl
dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
LQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBl
bmRDYWxsKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTEwMzIsMjAgKzExMTAsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1
bHQpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7
Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVn
VDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlw
ZTo6R2V0QnlJZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiArMTE0MSwxOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZERpcmVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJ
bmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwNzMsMjcgKzExNjIsMjEgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50
R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FS
TTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1Yklu
Zm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7
CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJ
ZERpcmVjdE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZh
bHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5
X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVy
blZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVy
blZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTExMDIsNTQgKzExODUsMzkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydQogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEp1bXAg
bm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZt
ZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlM
ZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2FkOEZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSAr
IEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVu
Z3RoKSkpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUs
IE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9k
ZU1ldGFkYXRhQXJyYXlMZW5ndGg6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGJhc2VHUFIsIHNj
cmF0Y2hHUFIpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9
CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCiAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
c3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRo
VGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdz
LCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0
aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZS
ZWcpOworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtl
ZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6
OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwogCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQotICAgIEpJVEdldEJ5
SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1f
Z2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTExNTgsMTYgKzEy
MjYsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNb
bV9nZXRCeUlkSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3NywyNiArMTI0Nyw1OCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpiYXNlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlz
QVJNNjQoKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BS
MzsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNh
bGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVH
ZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1
bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworCisgICAgSklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQo
KTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhp
czsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdl
bik7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjUwLDcgKzEzNTIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlz
T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0
YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTEyNjAsMjkgKzEzNjYsMjMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdU
MTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNH
UFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwg
cHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwotfQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKK31zCiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNf
cHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mIHZtKQpAQCAtMTMyOSwyMyArMTQyOSwzNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZS
ZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFn
cy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRo
ZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIs
CiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50
byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8g
c3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBk
aXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJl
ZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQ
UiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1Qz
LCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNo
R1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVj
dCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeUlkOworICAgIHN0dWJJ
bmZvLT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGly
ZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAogICAgIC8v
IElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJh
c2UgaXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0NzMsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3Im
IGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhG
dW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQ
UjMpOworICAgIGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTM3NiwyNSArMTQ5NCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0
ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNh
bGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xvd1BhdGhGdW5j
dGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRo
RnVuY3Rpb24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xNDQx
LDIwICsxNTUzLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTg2LDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0
ODAsMjggKzE2MDYsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElu
cwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV9p
ZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAg
IC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1
c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTUxMCwyNSArMTYzMCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9i
eV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxl
LCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OnNjcmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWws
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQpAQCAtMTUzNywxNSArMTY2NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlf
dmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAog
ICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxp
emVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZh
bE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTE1NTYsNTEgKzE2ODcsNTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5
X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3Vt
ZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFs
aXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlf
dmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAg
ICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsg
anVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0
eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJh
bmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxS
ZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNs
b3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewogICAgIEFTU0VSVCh0eXBlID09IEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZUJyYW5kKTsKIApAQCAtMTYwOCw3ICsxNzQ0LDExIEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0
ZVNsb3coVmlydHVhbFJlZ2kKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2
YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOwor
ICAgIGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9w
ZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRP
cHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBh
cmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwy
NyArMTc1OCwyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3Bl
cmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZh
dGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1l
PGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3Bl
cmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlv
bkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1By
aXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxNzg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1l
PigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwg
Ynl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCAsIEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVOYW1lKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfYnJhbmQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NjYsNyArMTgwMCw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2Rl
Lm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRl
U2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFZhckluamVj
dGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCkBAIC0xNjg4LDYgKzE4MjIs
NyBAQCB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNzk0LDU5ICsxOTI5
LDc3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KIHZvaWQgSklU
OjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJl
c29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNj
b3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1l
dGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFT
U0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwog
ICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09
IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BS
ID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJZiB3ZSBw
cm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2Vk
IGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0gICAgaWYg
KHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1l
dGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlmIChwcm9m
aWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52
aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRh
dGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7
CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2st
Pm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKKworICAgICAgICBh
dXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgICAgICByZXR1cm4g
SklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBv
cF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRv
IGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJikgewor
ICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUg
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MiKTsKKyAgICAgICAgfTsKIAotI2RlZmlu
ZSBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8j
I3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVy
YXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUo
UkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCisgICAgICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29w
ZUdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayhzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9z
Y29wZSBnZW5lcmljIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFU
T1IKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGNvZGU7CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1
cmVWYXIpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJh
dG9yKTsKKyAgICAgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHVi
KGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdl
bmVyYXRvcik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKICAgICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5l
cmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2
ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJh
dGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2Vs
aW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFk
YXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0
YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3Bl
R1BSID0gcmVnVDY7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURf
UEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2Vk
Rm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3Mo
KTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAg
YWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAg
ICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZTsKIApAQCAtMTg1NSwyNiArMjAwOCwyNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmpl
Y3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0g
cmVnVDQ7Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0g
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9p
bnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwor
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNF
VE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwor
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMs
IFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdU
MCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUo
c2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsK
IAotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgp
OworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAg
ICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZz
ZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
cmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwg
cmVnVDApOworICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwor
ICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsK
IAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBA
IC0xODgyLDEyICsyMDM1LDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6
OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gp
KSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFs
TGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFs
T2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vw
b2NoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0
T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgaml0
Lm1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCkBAIC0xODk3LDExICsyMDUwLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNv
ZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhcios
CiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4
aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAgbG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVn
VDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFs
T2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAt
MTkwOSw3ICsyMDYyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWlj
OgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4
MyArMjA3Miw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAg
ICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBl
KSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0K
LSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUo
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lw
VG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7
CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29s
dmVUeXBlKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDApOwogCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJv
cGVydHkubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Cisg
ICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Cisg
ICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlKTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAg
ICAgICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICB9CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7CisgICAgICAgIGVtaXRD
YXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcik7
CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBU
b0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5n
ZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZm
ZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bSgpLmdldENUSVN0dWIoc2xv
d19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRo
dW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJl
c29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAg
eyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUo
cmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBq
aXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5r
KHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUp
OyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUikKLSN1bmRlZiBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29w
ZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlz
IGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVj
YXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhl
IGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4
Nl82NCkKQEAgLTIwNjUsNiArMjE4MCw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihW
aXJ0dWFsUmVnaXMKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogeworICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CkBAIC0yMTc4LDcgKzIyOTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDAp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBA
IC0yMjA2LDMxICsyMzIyLDQxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEkKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRl
Y29kZUluZGV4KTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRl
Y29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCisgICAgYXV0byBjbG9zdXJlVmFy
R2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0
RnJvbVNjb3BlVGh1bmsoQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBD
bG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVy
YXRlT3BHZXRGcm9tU2NvcGVUaHVuayhDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywg
IkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAg
IGF1dG8gZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAg
cmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6bnVsbG9wdCwgIkJh
c2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKKwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNj
b3BlR1BSID0gcmVnVDY7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9
IHJlZ1Q1OwogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1
aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0
YWRhdGEubV9vcGVyYW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFk
YXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29k
ZSk7CiAKLSNkZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9n
ZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBj
b25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFD
SF9SRVNPTFZFX1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3Vu
ZGVmIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHNjb3BlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQp
LCBtZXRhZGF0YUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgc2NvcGVHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQp
LCBtZXRhZGF0YUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7
CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29k
ZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJv
ZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAg
ICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3NHZW5lcmF0b3IpOworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2Vu
ZXJpY0dldEZyb21TY29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2Rl
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2Vu
ZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBj
aGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+
IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5r
IGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQg
LyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KQEAgLTIyMzksNzcgKzIzNjUsNjggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6
Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
dGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0
dXJuQWRkcmVzcygpOworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQudGFnUmV0dXJu
QWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zm
c2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0
YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBt
ZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJfdCBtZXRh
ZGF0YVN0cnVjdHVyZU9mZnNldCkgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAgICBtb3ZlKHNjb3Bl
R1BSLCByZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8s
IHJlZ1QxKSk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpKTsKKyAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJS
ZWcgc2NvcGVHUFIpIHsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAgICAgIGppdC5tb3Zl
KHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVz
dFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0
cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAg
ICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JK
RUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwg
cmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29k
ZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFy
SW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CiAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRl
KCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAotICAgIGF1
dG8gZW1pdEdldFZhckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyBy
ZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVn
KTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdl
dFZhckZyb21JbmRpcmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJl
ZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcp
OwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCiAgICAgYXV0byBlbWl0R2V0
Q2xvc3VyZVZhciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgewog
ICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAg
ICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgYWRkUHRy
KHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRH
UFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOwor
ICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKKyAgICAg
ICAgaml0LmFkZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQUik7CisgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFi
bGVzKCkpLCByZWdUMCk7CiAgICAgfTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBh
dXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBz
d2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAg
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAg
ICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBp
bmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0
IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNo
ZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHNjb3BlR1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5q
ZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0
aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVj
a2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBy
ZWdUMDsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7CiAgICAg
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKIAotICAgICAgICAgICAg
aml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAg
ICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAgICAgICAgICBqaXQuaml0QXNz
ZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAg
ICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJl
dHVybiBqaXQuYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7
CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIG9m
ZnNldCk7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAg
ICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQs
IFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFi
b3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAg
aXNPdXRPZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5l
ID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVh
c29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGlu
ZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAg
ICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwg
b2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBU
aW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhiYXNlLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5u
ZWczMihvZmZzZXQpOworICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNl
dCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgR2xvYmFsVmFyOgpAQCAtMjMxNywyMSArMjQzNCwxOSBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
ICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQp
Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09G
RlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRh
ZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29w
ZXJhbmQpKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsKICAgICAgICAgICAg
IGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAo
KSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2Ug
TW9kdWxlVmFyOgpAQCAtMjM0MSw3OSArMjQ1Niw1NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNv
bHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5k
OwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAg
ICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJl
c29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0g
ICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
Ci0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAg
IGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJv
cGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAg
IGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0
SW5mbygpKSwgcmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOwor
CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0ds
b2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9w
ZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0
cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
anVtcCgpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAK
LSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAg
ICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAg
c3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBz
dG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0
YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBq
aXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFu
ZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsK
LSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2Fz
ZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmsp
OworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCku
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRv
cihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRG
b3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07
IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9w
R2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2Nv
cGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklO
RV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BF
X0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRo
dW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJ
bnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQpAQCAtMjQ3MSw4NiArMjU2Myw3OSBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1
ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3Rp
ZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklU
OjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBv
aW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlX
cml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAg
c3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFy
KFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdU
MCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJl
c3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3Bl
cmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8g
PSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVT
bG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFu
ZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQp
OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJv
b2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1
dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNo
ZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIg
aW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1
dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBj
aGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUg
Y2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJl
cyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRp
dGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmpl
Y3Rpb24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVk
TGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwog
ICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIo
b3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0
ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpvZmZzZXRPZk9wZXJhbmQoKSwg
cmVnVDEpOwogICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRy
KHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOworICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdU
MywgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgLy8gT09QUzogd291bGQgYmUgbmljZSB0
byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgR1BSUmVncworICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNh
bFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0
YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAg
ICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0gICAgICAgICAgICBp
ZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYg
KHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisKKyAgICAgICAgICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
T3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihi
eXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8g
ZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVk
IHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1Qw
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
LSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAg
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVt
aXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJh
bmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQp
OwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVn
VDEpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAg
ICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAgICAgICAgLy8gT09Q
UzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9y
IHZhbHVlLgorICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsK
LSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVl
LCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9p
bnRTZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAg
ICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdU
MSwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgU2NhbGVFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQg
YmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIG93bmVyL3Zh
bHVlLgogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoK
QEAgLTI1NjQsNTggKzI2NDksNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNv
bnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
LSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVU
eXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlz
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8g
cHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAg
ICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRo
aXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lw
VG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZh
ci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUg
dGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBw
cm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIs
CisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIKKyAg
ICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBp
cyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAv
LyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsK
KyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikK
KyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9m
aWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAg
ICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZWxz
ZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDAp
OwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVt
aXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7
CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsK
KyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIu
bGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24g
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAg
IG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxp
bmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAg
ICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAg
ICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTMgKzI3MDMsMTYgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2Nv
cGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5
dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIp
IHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAg
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElmIGFu
eSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENvZGVC
bG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFyLgog
ICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRl
X2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2UgewogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1bWVu
dEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTI3MDEsNyArMjc4Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9m
cm9tX2FyZ3VtZW50cyhjb24KICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3Vt
ZW50cywgcmVnVDApOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6
OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
LCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNzU5
LDcgKzI4NDEsNiBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKQEAgLTI3NjcsNyArMjg0
OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb24KICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGlu
ZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
Z1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNzg5LDcgKzI4NzAsNiBAQCB0
ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wCiB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0
b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CkBAIC0yODA1LDcgKzI4
ODUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiAgICAgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIG1v
ZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2UgaXQgaWYgd2UgcHJvZmlsZSBp
dCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhID09
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgeworICAgIGlmIChi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2VudW1lcmF0b3JNZXRhZGF0
YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKICAgICAg
ICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2Fz
ZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6bW9kZVNldE9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKH5K
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CkBAIC0yODQ3LDc4
ICsyOTI3LDg2IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKIHZv
aWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1f
bW9kZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlz
dCBkb25lQ2FzZXM7CiAKLSAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6
OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUVudW1lcmF0
b3JHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJl
Z2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2Vs
aW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNj
cmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgc2NyYXRj
aDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBwcm9wZXJ0eUdQ
Uik7CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJh
dG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoMik7CisgICAg
b3IzMihzY3JhdGNoMywgc2NyYXRjaDIpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaDIs
IGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRh
KCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKICAgICAvLyBUaGlzIGlzIGFsd2F5
cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgotICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2Rl
ID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2Vu
ZXJpY01vZGUpKTsKKyAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3Qz
MihOb25aZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7
CiAKICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNo
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgSnVt
cCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoMiwgQWRkcmVz
cyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9m
ZnNldCgpKSk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQuCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbmRleCwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0
b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0g
ICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QzLCBB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywg
cmVnVDMpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0KSwg
cmVzdWx0R1BSKTsKLQorICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgc2lnbkV4dGVuZDMyVG9Q
dHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNj
cmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCBy
ZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIE90aGVy
d2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDMpOwotICAgIG5lZzMyKHJlZ1Qz
KTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlR1BSKTsKKyAg
ICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgbmVnMzIoc2NyYXRjaDIp
OworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CiAgICAgY29uc3Rl
eHByIGludHB0cl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IG9mZnNldEluQnV0dGVyZmx5KGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludHB0cl90PihzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdo
dCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICBsb2FkNjQoQmFzZUlu
ZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkp
LCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIHN0cnVj
dHVyZU1pc21hdGNoLmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0
Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgIHN0b3JlOFRvTWV0YWRh
dGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVj
dHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVN
b2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVy
bywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRN
b2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRj
aDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7
CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsK
KyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNj
cmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBkb25lQ2FzZXMubGlu
ayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIApAQCAtMjkyNywxMCArMzAxNSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJh
dG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0
eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQg
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhG
dW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5
cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9o
YXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2Up
CiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVt
ZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjkzOSw3ICszMDI2LDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9y
OChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkp
OworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9m
ZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCByZWdU
MSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQzLDcgKzE1NDMsNyBA
QCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAKIHZvaWQgdW5saW5r
Q2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2Fs
bExpbmtJbmZvLmZhc3RQYXRoU3RhcnQoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKCZj
YWxsTGlua0luZm8pKTsKICAgICAKICAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZt
LmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4MTcxOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxpdHlK
dW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNv
ZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8l
b3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1l
dGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQot
ICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFBy
b2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBlbmQKLQogICAg
ICAgICBtZXRhZGF0YSh0MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAg
IGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBAIC0xMDIzLDcg
KzEwMTksNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAg
ICAgICMgTWV0YWRhdGEgaW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRlZ2VyT3BlcmF0
aW9uKHQyLCAuc2xvdykKICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAs
IDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAg
IHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0
MSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4OSwyMiArMTA4
NSwxOCBAQCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAKLSAgICBtYWNy
byB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpN
ZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQot
ICAgIGVuZAotCiAgICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQsIHQwKQog
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5lcSB0
MSwgSW50MzJUYWcsIC5vcE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYs
IC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRo
UHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQ
cm9maWxlSW50LCB0NSwgdDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdhdGVT
cmNOb3RJbnQ6CiAgICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3Jp
IDB4ODAwMDAwMDAsIHQxCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJl
cikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVt
YmVyLCB0NSwgdDMpCiAgICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTEx
MTUsMTAgKzExMDcsNiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2Rl
TmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9wZXJh
dGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3Ry
dWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAg
ICAgbWFjcm8gYXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6
bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCiAgICAg
ICAgIGdldChtX3JocywgdDIpCiAgICAgICAgIGdldChtX2xocywgdDApCkBAIC0xMTI2LDcgKzEx
MTQsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJp
bmVxIHQyLCBJbnQzMlRhZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcs
IC5vcDJOb3RJbnQKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAg
ICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxl
SW50SW50LCB0NSwgdDIpCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJP
cGVyYXRpb25BbmRTdG9yZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3BhdGNo
KCkKQEAgLTExMzYsMTIgKzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNv
ZGVOYW1lLCBvcAogICAgICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAgICAgICAgYmli
IHQzLCBMb3dlc3RUYWcsIC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAgICAgYmluZXEgdDMsIElu
dDMyVGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50
KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFBy
b2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgICAgICBq
bXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAgICAgICAgZmlp
MmQgdDEsIHQzLCBmdDEKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51
bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJp
dGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAg
ICAgICBnZXQobV9kc3QsIHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1Myw3
ICsxMTQxLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAg
ICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgb3Bl
cmFuZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAg
YmlhIHQzLCBMb3dlc3RUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2Zp
bGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1
Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQw
CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJhdGlvbihmdDEs
IGZ0MCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpA
QCAtMTA1NiwxMCArMTA1Niw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9w
Sm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3Bl
cmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVT
dHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAg
ICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBl
LCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0
MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQogICAgICAgICBtZXRhZGF0YSh0Miwg
dDMpCkBAIC0xMDY5LDcgKzEwNjUsNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVT
dHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDEsIC5zbG93KQogICAgICAgICBv
cnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEgdDEsIFtjZnIsIHQwLCA4XQotICAgICAg
ICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDIsIHQzKQogICAg
ICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTExMzQsMTEgKzExMzAsNiBAQCBlbmQp
CiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLQotICAgIG1hY3JvIHVwZGF0ZUFy
aXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjpt
X2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgZW5kCi0K
ICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUs
IHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0xMTQ2LDEyICsxMTM3LDEyIEBAIGxs
aW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwKICAgICBidGl6IHQzLCAweDdm
ZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MwogICAgIG9ycSBudW1iZXJUYWcsIHQz
Ci0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFy
eUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDQpCiAgICAgcmV0
dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0cXogdDMsIG51bWJlclRhZywgLm9wTmVn
YXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAwLCB0MwotICAgIHVwZGF0ZUFyaXRo
UHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUo
T3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEsIHQ0KQogICAgIHJldHVybih0MykKIAog
Lm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNTUsNiBAQCBtYWNybyBiaW5hcnlPcEN1c3Rv
bVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2Rl
TmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRh
LCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAotICAgICAgICBtYWNybyBwcm9m
aWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAg
ICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQogICAgICAgICBnZXQobV9saHMsIHQyKQog
ICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkKQEAgLTExNzcsNyAr
MTE2NCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAg
ICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0
MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAg
ICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJ
bnRJbnQsIHQ1LCB0NCkKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLm9wMU5vdEludDoKQEAg
LTExODcsMTAgKzExNzQsMTAgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1l
LCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93CiAgICAgICAgIGFkZHEgbnVt
YmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKLSAgICAgICAgcHJvZmlsZShBcml0aFBy
b2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQ0KQogICAgICAgICBqbXAg
Lm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkludDoKLSAgICAgICAgcHJvZmlsZShB
cml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAgICAgICBjaTJk
cyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQyKQpA
QCAtMTIwNiw3ICsxMTkzLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1l
LCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBz
ZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAg
IGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJ
bnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3Qs
IEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAg
ICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20JKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjQ5OCw2ICsyNDk4LDE3IEBA
IG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNybyB1cGRhdGVVbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxv
YWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0
ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAor
CittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRh
ZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6
Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4
Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5
IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0X1dJTgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXIuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCwxMCBAQCBw
dWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsKIAogICAgIHN0YXRp
YyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50
aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYp
OwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENh
Y2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENv
ZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVl
ZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3Qml0cyh1aW50cHRy
X3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdCaXRzKTsgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
YWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIENh
Y2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVy
JiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBp
KQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soY29k
ZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBl
bmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9j
a1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBBU1NFUlRf
VU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVpZCkpOwogICAgIHJl
dHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MTcxOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BB
VEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRo
UHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1Zh
bHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBw
cm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5hcnlBcml0aFByb2ZpbGUm
IHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNlcnZl
QXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQuaXNC
aWdJbnQoKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436840</attachid>
            <date>2021-08-30 18:49:06 -0700</date>
            <delta_ts>2021-08-31 16:22:52 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>313055</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IHVubGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxp
bmtlZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRp
b24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
aXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0g
ICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRo
U3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhT
dGFydCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlz
IGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQg
dG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0
aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJz
OjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAg
IHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MjQsNiArNDI0LDEzIEBAIGlubGluZSBDb2RlT3JpZ2lu
IGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBz
byB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjYsNiArNDY2
LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAg
YnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENv
ZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAg
ICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENv
ZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAg
ICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVj
dGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1
Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4LDE0ICs1NDEsMTQgQEAgYm9vbCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJv
bWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9w
QWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBM
SU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMp
Ci0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVs
KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAg
IExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJ
VEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC0zMDc5LDcgKzMwOTIs
NyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFC
TEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBK
SVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJh
bWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMyOTUsMTMgKzMzMDgsMTMg
QEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRj
aCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZw
Yy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJl
dHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAg
Y2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRo
aXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMzMxMywxMSArMzMyNiwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29k
ZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAg
IGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0
ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAg
ICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0
aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVj
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFz
PE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDE2ICsyMzIsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0
OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9v
bCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRoZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJu
IHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFuZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAg
ICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFu
dChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+
KG1fbnVtVmFycyk7CkBAIC0yNjYsNiArMjU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNT
dGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAg
ICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBo
ZXJlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOwogCkBAIC00NzIsNiArNDYzLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5h
bWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFy
YW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKQEAgLTc5Nyw2ICs3ODksNyBAQCBwdWJs
aWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2Rl
YnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsg
cmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25l
ZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51
bUJyZWFrcG9pbnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkTWV0YWRhdGEuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2
ICs1MCw3IEBAIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGEKIAogc3Ry
dWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCB7CiAgICAgQXJyYXlQcm9maWxlIGFy
cmF5UHJvZmlsZTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCwg
YXJyYXlQcm9maWxlKTsgfQogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0
YWRhdGFBcnJheUxlbmd0aCkgPT0gMTIpOwogCkBAIC04OCw2ICs4OSw3IEBAIHVuaW9uIEdldEJ5
SWRNb2RlTWV0YWRhdGEgewogICAgICAgICBHZXRCeUlkTW9kZSBtb2RlOwogICAgICAgICB1aW50
OF90IGhpdENvdW50Rm9yTExJbnRDYWNoaW5nOyAvLyBUaGlzIG11c3QgYmUgemVybyB3aGVuIHdl
IHVzZSBQcm90b0xvYWQgbW9kZS4KICAgICB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1v
ZGUpOyB9CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YURlZmF1bHQgZGVmYXVsdE1vZGU7CiAgICAg
R2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0IHVuc2V0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFk
YXRhQXJyYXlMZW5ndGggYXJyYXlMZW5ndGhNb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zODUsNiArMzg1LDggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZkluQWNjZXNzKAogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCisvLyBPT1BTOiBN
YWtlIHRoaXMgc3R1ZmYgd29yayB3aXRoIGRhdGEgaWNzIHRvIG5vdCBhc3N1bWUgaW5saW5lIGFj
Y2Vzcy4KKwogdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVz
aW5nSW5saW5lQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQp
CiB7CiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2
aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg1LDYgKzI4NSw3IEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAgICAgICAgcmVzZXRQdXRCeShjb2Rl
QmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5h
bWU6CiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZh
bCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgpAQCAtNDMw
LDYgKzQzMSwxMDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpzZQog
ICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVUeXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBlID0gdW5s
aW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHViSW5mby5z
dGFydDsgLy8gT09QUzogZG8gd2UgbmVlZCBhIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBkb25l
TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93UGF0aFN0
YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKyAg
ICBjYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2Rl
SW5kZXgpOworICAgIGNvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0
ZWNvZGVJbmRleCk7CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25E
ZWxldGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkRlbEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZW9mOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
SW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0
QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6IAorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIHN3
aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNT
dHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAg
aWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVs
ZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uIG9w
ZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
UHV0QnlWYWw6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2Vk
U3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9k
ZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25Q
dXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQ
cml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpTZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNl
dFByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICAvLyBPT1BTOiBoYW5kbGUgaXRlcmF0b3JfbmV4dCB2YWx1ZSBpbiB1c2VkIHJlZ2lzdGVyIHNl
dC4KK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVj
a0NvbnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtNTYsNiArNTYsNyBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgewogICAg
IEdldEJ5VmFsLAogICAgIFB1dEJ5SWQsCiAgICAgUHV0QnlWYWwsCisgICAgUHV0UHJpdmF0ZU5h
bWUsCiAgICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC03
OCw2ICs3OSw4IEBAIGVudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKICAgICBTdHJpbmdM
ZW5ndGgKIH07CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworCiBjbGFzcyBT
dHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1
YkluZm8pOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtOTgsNiArMTAxLDggQEAg
cHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAorICAg
IHZvaWQgaW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8mKTsKKwogICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAg
Ly8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJ
ZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCkBAIC00NDcsNiArNDUyLDE4IEBAIGlu
bGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW4KICAgICB9CiB9CiAKK3N0cnVj
dCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7
CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZp
ZWxkUHV0S2luZDsKKyAgICBFQ01BTW9kZSBlY21hTW9kZTsKKyAgICBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXg7CisgICAgLy8gT09QUzogRG8gd2UgbmVlZCBzdGFydCBmb3IgZGF0YSBJQ3M/
CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0OyAvLyBU
aGlzIGlzIGVpdGhlciB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJQyBmb3IgKmJ5SWQgY2FjaGVz
LiBvciB0aGUgbG9jYXRpb24gb2YgcGF0Y2hhYmxlIGp1bXAgZm9yICdpbnN0YW5jZW9mJyBjYWNo
ZXMuCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9u
OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzbG93UGF0aFN0
YXJ0TG9jYXRpb247Cit9OworCiAjZWxzZQogCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDYgKzE3NSw3IEBA
IHB1YmxpYzoKIAogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4m
IGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAg
IGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcu
dG9Db25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0
YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQogICAgIGNvbnN0IEZpeGVkVmVjdG9y
PFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAK
QEAgLTIwNyw2ICsyMDgsMTQgQEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3Jp
cHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRNb2RlPiht
X3NjcmlwdE1vZGUpOyB9CiAKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rp
b25zKCkgY29uc3Q7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uQXQoQnl0ZWNv
ZGVJbmRleCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5kZXgpLnB0
cigpOyB9CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4g
PSBpbnN0cnVjdGlvbnMoKS5hdCgwKS5wdHIoKTsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1
Y3Rpb25zRW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihpbnN0cnVjdGlvbnNCZWdpbikgKyBpbnN0cnVjdGlvbnMoKS5z
aXplKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0cnVjdGlvbiA+PSBpbnN0cnVjdGlv
bnNCZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGluc3RydWN0aW9uc0VuZCk7CisgICAgICAgIHJldHVy
biBpbnN0cnVjdGlvbiAtIGluc3RydWN0aW9uc0JlZ2luOworICAgIH0KIAogICAgIHVuc2lnbmVk
IG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAg
ICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtNDEw
LDYgKzQxOSw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3Ry
ZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFj
ZSB0byBzdG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1f
YmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5h
cnlBcml0aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJv
ZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtNDU1LDYgKzQ2NywyOCBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7
CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBw
YykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNv
ZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChvZmZzZXQp
OworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOwor
ICAgICAgICBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgp
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRVbmFy
eUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3VuYXJ5
QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzLmFwcGVu
ZChCaW5hcnlBcml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkg
eyByZXR1cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0aFByb2Zp
bGUmIHVuYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlBcml0aFBy
b2ZpbGVzW2ldOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMg
PSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJs
ZS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw5ICsxMDEsMTgg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQog
CisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0g
dWludDE2X3Q7CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJf
dCBvZmZzZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9m
ZnNldCA9IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9m
ZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBl
T2Zmc2V0ICsgc2l6ZW9mKE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsK
KyAgICB9CisKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfb2Zmc2V0VGFibGVFbnRy
aWVzID0gTlVNQkVSX09GX0JZVEVDT0RFX1dJVEhfTUVUQURBVEEgKyAxOyAvLyBvbmUgZXh0cmEg
ZW50cnkgZm9yIHRoZSAiZW5kIiBvZmZzZXQ7CiAKICAgICAvLyBOb3QgdG8gYnJlYWsgYWxpZ25t
ZW50IG9mIDMyYml0IG9mZnNldCB0YWJsZSwgd2Ugcm91bmQgdXAgc2l6ZSB3aXRoIHNpemVvZihP
ZmZzZXQzMikuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAgdGVt
cGxhdGU8dW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzQXJndW1lbgogc3RydWN0IFZhbHVlUHJvZmls
ZUJhc2UgewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0g
bnVtYmVyT2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBu
dW1iZXJPZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBidWNrZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBu
dW1iZXJPZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKQEAg
LTEzNCw3ICsxMzMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIAogICAg
ICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29kZWRKU1Zh
bHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxhdGVkVHlw
ZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTU2LDYgKzE1NSw3IEBAIHN0cnVjdCBW
YWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJvZmlsZSA6
IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAgICBWYWx1
ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7IH0K
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBzdHJ1Y3Qg
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
VW5hcnkKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRz
dCwgc3JjLCB0eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5
cGUsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90Pihkc3Qs
IHNyYyk7CkBAIC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbmMo
UmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCk7Cisg
ICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFBy
b2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVjOjplbWl0
KHRoaXMsIHNyY0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9j
ay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODIs
NyArNjgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklEKj4KICAg
ICAgICAgZW1pdEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVn
aXN0ZXJJRCogc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAgICAgICAg
ICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1fY29kZUJs
b2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gZHN0Owog
ICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODg5LDcgKzg4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChp
c1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
bV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1l
U2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5Niw3ICs4OTYsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMg
PSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIElu
dmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAg
c2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2Fs
bGVlR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsK
ICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZs
ZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxl
RGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5ODUsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQ
cml2YXRlTmEKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lz
dGVycygpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5j
b2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNz
VHlwZTo6UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygp
LCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQ
cml2YXRlTmFtZSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRP
bmx5KGJhc2VHUFIpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1
ZVJlZ3MsIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAKQEAgLTE0NzQ3LDcgKzE0NzQ3LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBz
Y29wZS5ncHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRv
d1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwgY2FsbFNp
dGVJbmRleCk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFj
a2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0ciht
X2ppdC5jb2RlQmxvY2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMTcsNyArNDMxNyw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwog
CiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46
OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJ
VCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZh
bCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9k
ZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFt
ZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAKICAgICAgICAgICAgIGdlbmVy
YXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CkBAIC0xMDM1NSw3ICsx
MDM1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxD
YWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJ
bnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAg
ICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxD
YWxsKCk7CiAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDY5OCw3ICsxMDY5OCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBp
ZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5r
SW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQ
UlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAg
ICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBH
UFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZv
clRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwOTc5LDcgKzEw
OTc5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAg
ICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQ
YXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJl
Z1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7Cisg
ICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxG
YXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZp
c2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRh
LnJiCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjIgQEAgY2xhc3MgTWV0YWRhdGEKICAg
ICBkZWYgc3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVm
IGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRz
KHByZWZpeCwgZmllbGRzLCBnZW5lcmF0ZU9mZnNldE9mKQogICAgICAgICAgICAgZmllbGRzLm1h
cCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNo
Ci0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMo
cHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAgICAgICAg
ICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlw
ZSwgZmFsc2UpfVxuI3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAg
ICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGROYW1lfTsiCisgICAg
ICAgICAgICAgICAgICAgIGlmIGdlbmVyYXRlT2Zmc2V0T2YKKyAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSByZXN1bHQgKyAiXG4iICsgInN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2Zp
ZWxkTmFtZVswXS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJldHVybiBPRkZTRVRPRihN
ZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0CiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAg
ICBlbmQuam9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0
RmllbGRzKCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVs
ZHMoIiAgICAgICAgIiwgQGZpZWxkcywgdHJ1ZSkKIAogICAgICAgICBpbml0cyA9IG5pbAogICAg
ICAgICBpZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZp
c2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5OCw4ICs2OTgsMTMgQEAgdm9pZCBBc3NlbWJseUhl
bHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZp
cnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJ
bmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVn
VDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdU
Myk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgaW5m
byk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92
aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9IG5l
YXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE3MTgsNiArMTcxOCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0
VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZv
aWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5r
SW5mbyopOwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAg
dm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMsMTYgKzQzLDYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sbwog
ICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CiB9CiAKLXZvaWQgQ0NhbGxIZWxwZXJz
Ojpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVl
UmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4KQotewotICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0No
aWNrZW46OlBhY2tldCwgZnJhbWUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFk
b3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Ci0gICAgc3Rv
cmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihT
aGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKLSAgICBzdG9yZVB0cihzY29wZSwg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIHNjb3BlKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IGNvZGVCbG9jaykpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJp
dHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOwotfQotCiB2b2lkIENDYWxsSGVscGVyczo6ZW5z
dXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJl
ZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAgIFNoYWRvd0NoaWNr
ZW4qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0
MCw3ICs4NDAsMTggQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBh
bGwgdm9sYXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24g
dGhlIHRvcCBvZgogICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAg
IHZvaWQgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQs
IEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNr
ZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBH
UFJSZWcgc2NvcGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
KQorICAgIHsKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBmcmFtZSkpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgICAgIHN0b3JlVmFs
dWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7CisgICAgICAgIHN0b3JlUHRyKHNjb3BlLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgc2NvcGUpKSk7CisgICAgICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykp
KTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgY2FsbFNpdGVJbmRleCkpKTsKKyAgICB9CisKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEgcG9p
bnRlciB0byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQuCiAg
ICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tl
dCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAg
SklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRF
bWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25zdGFudCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7
CiB9CiAKIEpJVDo6fkpJVCgpCkBAIC0xMTMsNyArMTE0LDcgQEAgdm9pZCBKSVQ6OmVtaXROb3Rp
ZnlXcml0ZShXYXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJ
bnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9p
bnRlclRvU2V0KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBv
aW50ZXJUb1NldCkKIHsKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNz
KHBvaW50ZXJUb1NldCwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CkBAIC0xMjksNyArMTMwLDcgQEAgdm9pZCBKSVQ6OmFz
c2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgcmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCByZWdUMCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsK
QEAgLTY3NiwxNyArNjc3LDE2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAKIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1f
Y29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICAvLyBPT1BTOiBNYXliZSB0aGlzIHNo
b3VsZCBiZSBkb25lIG9uIHVubGlua2VkIGNvZGUgYmxvY2s/CisgICAgREZHOjpDYXBhYmlsaXR5
TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKICAg
ICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAgICAg
IG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5s
aW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNh
bkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwotICAg
ICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91bGRF
bWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTc0
Niw3ICs3NDYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAK
ICAgICBMYWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0g
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7Cisg
ICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRD
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUg
PSAtZnJhbWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9mZnNl
dCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxv
dzsKQEAgLTc2Miw3ICs3NjIsMTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZp
bmFsaXppbgogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAm
JiAoIW1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwgbV9jb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygp
ICsgRml4ZWRWZWN0b3I6Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIpOworCiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBp
cyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdhbnQgdG8gcHV0IGluIGEgZHVtbXkgcHJvZmlsaW5n
IHNpdGUgKHRvCiAgICAgICAgICAgICAgICAgLy8ga2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0
IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gcmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4KQEAgLTc3
OCw2ICs3ODEsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAg
ICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdH
UFIoKSk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1f
Y29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3Mp
OworICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwg
YXJndW1lbnQgKiBzaXplb2YoVmFsdWVQcm9maWxlKSkpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQpAQCAtOTE5LDEwICs5MjMsOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOwog
CiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlvbkluZm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8p
IHsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlu
a0luZm87Ci0gICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKLSAgICAgICAgICAgIHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQ
YXRoU3RhcnQpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CisgICAgICAgIFVubGlua2Vk
Q2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxpbmtlZENhbGxMaW5rSW5m
bzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pOwogICAgIH0KIAog
ICAgIHsKQEAgLTk1Myw3ICs5NTUsMTAgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAiQmFz
ZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0
Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcg
QmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2spKTsKKworICAgIG1faml0Q29k
ZS0+bV91bmxpbmtlZENhbGxzID0gV1RGTW92ZShtX3VubGlua2VkQ2FsbHMpOworICAgIG1faml0
Q29kZS0+bV9ldmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7
CiAKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dGKCJKSVQg
Z2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3Vs
dC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1
dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CkBAIC05NjgsNiArOTczLDggQEAg
Q29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5rQnVm
ZmVyLT5ydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MoKTsKIAorICAgIG1faml0Q29kZS0+
YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIG1fY29kZUJsb2NrLT5z
aHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CkBA
IC0xMDQyLDE0ICsxMDQ5LDE0IEBAIHZvaWQgSklUOjpkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJl
Zm9yZUMKICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVz
KCptX3ZtLCAiUHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24uIl9zKTsKIH0KIAotdW5zaWdu
ZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNp
Z25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJs
b2NrKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxv
Y2FscygpKSkpOwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdpc3RlckNvdW50Rm9yRnJhbWVQ
b2ludGVyT2Zmc2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAotaW50IEpJVDo6c3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoraW50IEpJVDo6c3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2spIC0gMSku
b2Zmc2V0KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MTcx
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDYgKzUwLDM0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisgICAgY2xhc3MgSklUQ29uc3Rh
bnRQb29sIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVzaW5nIENvbnN0YW50ID0gdW5zaWduZWQ7
CisKKyAgICAgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgICAgICBHbG9i
YWxPYmplY3QsCisgICAgICAgICAgICBDYWxsTGlua0luZm8sCisgICAgICAgICAgICBTdHJ1Y3R1
cmVTdHViSW5mbywKKyAgICAgICAgICAgIEZ1bmN0aW9uRGVjbCwKKyAgICAgICAgICAgIEZ1bmN0
aW9uRXhwciwKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgVmFsdWUgeworICAgICAgICAg
ICAgVHlwZSB0eXBlOworICAgICAgICAgICAgUGFja2VkUHRyPHZvaWQqPiBwYXlsb2FkOworICAg
ICAgICB9OworCisgICAgICAgIENvbnN0YW50IGFkZChUeXBlIHR5cGUsIFBhY2tlZFB0cjx2b2lk
Kj4gcGF5bG9hZCA9IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJl
c3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgICAgIG1fY29uc3RhbnRzLmFwcGVu
ZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBWZWN0b3I8VmFsdWU+IG1fY29uc3Rh
bnRzOworICAgIH07CisKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFz
cyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOwpAQCAtMTQ5LDkgKzE3Nyw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZv
OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50
OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5B
ZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9u
KTsKQEAgLTE4OCw4ICsyMTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVy
biBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9y
dCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNv
dW50Rm9yKENvZGVCbG9jayopOwotICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNl
dEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJD
b3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOworICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9p
bnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMo
KTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21waWxl
VGltZSgpOwpAQCAtMjIzLDYgKzI1MSwyNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
I2VuZGlmCiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2
b2lkIGxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBH
UFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBH
UFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQ
UlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUg
Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5
dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5
dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0
ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CisgICAgICAgIHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0
IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGxvYWRD
b25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgICAgICB2b2lkIGxv
YWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1
bXAganVtcFRvSGFuZGxlcikKICAgICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVj
a3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpAQCAtMjU4LDE2ICszMDcsMTYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2Rl
SUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFy
YXJncwogICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAg
ICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOwor
ICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6
b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1
Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMK
LSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5m
byopOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9w
JiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBi
b29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwo
Y29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI5MSwx
MCArMzQwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhh
dCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFp
bGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0g
ICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVl
UmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNW
YWx1ZVJlZ3MpOworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmLCBHUFJSZWcpOworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShW
YWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJS
ZWcpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAg
ICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdz
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKQEAgLTMwNyw2ICszNTYsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0
Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdp
c3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNj
cmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAg
IHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVn
aXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgcHRyZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIs
IFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAgLTU5Miw3ICs2NDUsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3Bf
aGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CkBAIC02MjYsNyArNjc4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHZvaWQg
ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2Us
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUpOwotICAgICAgICB2
b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlKTsK
KyAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmly
dHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSk7
CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1
bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKQEAgLTY0NSw3ICs2OTcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICNlbmRpZgogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3Rp
ZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQ
UlJlZyBwb2ludGVyVG9TZXQpOworICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNocG9p
bnQoR1BSUmVnIHBvaW50ZXJUb1NldCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlh
YmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCopOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUq
KiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
LCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0
Kik7CkBAIC02NTQsNiArNzA2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBl
bWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0
ZXIpOwogCisgICAgICAgIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAg
ICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAg
Ym9vbCBpc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29s
IGlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjk1LDI2ICs3NDgs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09
IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gTW9kdWxlVmFyKTsKICAgICAgICAgfQogCi0jZGVmaW5lIERFQ0xBUkVfR0VUX0ZS
T01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2
ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVD
TEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9HRVRfRlJPTV9T
Q09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hh
ciogdGh1bmtOYW1lKTsKLQotICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1Vz
ZWRGb3JPcFJlc29sdmVTY29wZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gTW9kdWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8g
ZW1pdCBpbmxpbmUgdGhhbiB1c2UgYSB0aHVuay4KLSAgICAgICAgICAgIC8vIFJlc29sdmVkQ2xv
c3VyZVZhciBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9wX3Jlc29sdmVf
c2NvcGUuCi0gICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1
cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAgICAgfQotCi0jZGVmaW5l
IERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmVzb2x2ZV9z
Y29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVT
T0xWRV9UWVBFKERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFS
RV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBl
LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoc3RkOjpv
cHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayhzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1
bmtOYW1lKTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3Io
Vk0mKTsKQEAgLTkxOCwxMSArOTUzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVP
cHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0
dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0
UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAg
ICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9v
bCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8v
IEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1
cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxl
ZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0K
QEAgLTkzMCwxMyArOTYzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIGJv
b2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21w
aWxlVGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEg
dmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAg
IC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91
IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRo
IHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5m
byBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9m
aWxlKEJpbmFyeU9wKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIApA
QCAtOTYzLDkgKzk4OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dp
dGNoZXM7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0
UHV0SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEJpbmFyeUFyaXRoUHJvZmlsZT4g
bV9jb3BpZWRBcml0aFByb2ZpbGVzOwotCiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hl
Y2tzOwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xs
YmFjazsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC05OTksMTEgKzEwMjIsMjAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBV
bmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2Vu
ZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAgICAg
Ym9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1p
dFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAgICAg
ICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29k
ZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsK
KyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVjdENvbnN0YW50
IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAgICAgIEJhZzxV
bmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgICAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgICAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKworICAgICAgICBHUFJSZWcgbV9tZXRh
ZGF0YUdQUjsKKyAgICAgICAgR1BSUmVnIG1fY29uc3RhbnRzR1BSOwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50
R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIp
OworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFpl
cm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0zMjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJlZ1QxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIs
IHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzc1
LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAog
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjEsOCBAQCB2b2lkIEpJVDo6ZW1pdEJp
bmFyeURvdWJsZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5lZ2F0
ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51bmFyeUFy
aXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJvZmlsZUlu
ZGV4KTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJp
dGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVj
dGlvbiwgbmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2Fs
bCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEg
QmlnSW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVn
YXRlKTsKQEAgLTg5OSw4ICs5MDMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0
IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRK
SVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJQyogYWRk
SUMgPSBtX21hdGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFk
ZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk0OSwxMSBAQCB2
b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0
ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJh
dGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFBy
b2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBz
cmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQog
ICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7
CiAKQEAgLTEwMTUsMTAgKzEwMjAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJp
bmFyeU1hdGhJQwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUo
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFy
aXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFy
aXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBh
cml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApA
QCAtMTA1NSwxMyArMTA2MSwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlN
YXRoSUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBt
YXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAg
IGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlm
IChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlv
biwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBh
dGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24p
LCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAog
I2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgp
OwpAQCAtMTEyMCwxMyArMTEyNywxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmlu
YXJ5TWF0aElDCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsK
ICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAg
ICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMp
KTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihw
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmln
aHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUp
OworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBs
ZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBs
ZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
Yml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElD
KSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0g
bGFiZWwoKTsKQEAgLTExNjYsNyArMTE3NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25z
dCBJbnN0cnVjdGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
bnVsbHB0cjsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFBy
b2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2Vk
Q29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcERp
dj4oKS5tX3Byb2ZpbGVJbmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdo
dE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsx
MjE5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
LSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9m
aWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2Vk
Q29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11
bD4oKSk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFyaXRo
UHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rp
b24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwog
fQpAQCAtMTIyNyw4ICsxMjM1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJ
bnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
U3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFN1Yj4oKSk7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9tYXRoSUNzLmFk
ZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChj
dXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3Vi
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
MzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bDMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9v
bCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSks
IHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVn
aXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwog
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7
CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNv
bnN0IAogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRWaXJ0
dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAK
ICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNs
b3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5k
b25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0
ZWNvZGUpOwpAQCAtMzQxLDcgKzM0MSw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1f
Y2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxh
YmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzU0LDcg
KzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0
ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRl
Y29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJl
Z1QwKTsKIH0KIApAQCAtNTMsNyArNTMsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpv
cGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVj
dF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYm
IE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4K
LUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8q
KQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CkBAIC03OCw3ICs3OCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAg
T3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29u
c3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFy
Z3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2
b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5r
SW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewogICAgIFZp
cnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC0xMDYsOSAr
MTA2LDEwIEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKIAogICAg
IC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qx
LCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxv
YWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCByZWdU
MCk7Ci0gICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7
Ci0gICAgc3RvcmUzMihyZWdUMiwgaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSk7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdU
MCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwgcmVnVDMpOworICAgIEp1bXAgbm90QmlnZ2Vz
dCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMywgcmVnVDIpOworICAgIHN0b3JlMzIocmVnVDIsIEFk
ZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpKSk7CiAgICAgbm90QmlnZ2VzdC5saW5rKHRoaXMpOwogICAgIAogICAgIC8vIElu
aXRpYWxpemUgJ3RoaXMnLgpAQCAtMTI3LDE2ICsxMjgsMTYgQEAgYm9vbCBKSVQ6OmNvbXBpbGVD
YWxsRXZhbChjb25zdCBPcCYpCiB0ZW1wbGF0ZTw+CiBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFs
KGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVjb2RlKQogewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
LXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIs
IEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOworICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0
b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1l
OjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVn
VDIpOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAog
ICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIApAQCAtMTQ4LDcgKzE0OSw3IEBAIHZv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxF
dmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlu
a0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGlu
Zm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkp
OwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAg
IGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE1Nyw0
NiBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihS
ZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMp
OworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGlu
Zm8pOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
IAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZv
KiwgdW5zaWduZWQpCi17Citib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5s
aW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkg
ewogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVU
YWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29u
c3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNp
Z25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlu
a0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsK
LSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNo
dWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7
Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZy
YW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxl
RGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJn
YzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJU
YWdSZWdpc3RlcjsKKyAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNv
ZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsK
LSAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZm
bGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5h
cmdzW2ldID0KKyAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFs
dWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAg
ICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxs
ZWUgPQotICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsK
LSAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwot
ICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVE
YXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsK
KyAgICBzaHVmZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsK
IAotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0
aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0g
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRh
aWxDYWxsKCk7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7
CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRh
SUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlcigqdGhpcywgKnNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9
KTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNocmlu
a1RvRml0KCk7CisgICAgaW5mby0+ZnJhbWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURh
dGEpOworCiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9u
OwogICAgIApAQCAtMjE4LDMyICsyMjIsNDAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29u
c3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29k
ZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRl
ciByZXR1cm4uCiAgICAgKi8KLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAg
IGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9j
ay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29t
cGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlua0lu
Zm8qIGluZm8gPSBudWxscHRyOworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0Nv
bnN0YW50ID0gVUlOVF9NQVg7CisgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgewor
ICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG1fdW5saW5rZWRDYWxscy5hZGQo
KTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsK
KworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOworCisgICAgICAgIEFTU0VSVChtX2NhbGxD
b21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgbV9j
YWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOworICAgICAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnVubGlua2VkQ2FsbExp
bmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFudDsKKworICAgIH0KKyAg
ICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAogICAgIC8vIFNQ
IGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1
bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29kZUJs
b2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgog
ICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKIAogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNv
ZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZv
LnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxM
aW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAg
IGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkK
KyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRl
eCwgaW5mb0NvbnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGlu
Zm9Db25zdGFudCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFy
YXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAg
ICAgICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywg
cmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAg
ICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKKyAgICAgICAgICAgIC8vIE9PUFMKICAgICAg
ICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JU
YWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9KTsKQEAgLTI1MywxMyArMjY1LDEzIEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCBy
ZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8gc2xv
d1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCBy
ZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNl
KHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxs
UmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCArMjg1LDIyIEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
LSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3Rh
cnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGxvYWRDb25z
dGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5m
b0NvbnN0YW50LCByZWdUMik7CiAKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgeworICAgICAgICAvLyBPT1BTCiAgICAgICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICB9CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1f
dm0sICp0aGlzKTsKKyAgICBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgqbV92bSwg
KnRoaXMsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1
cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKQEAgLTM5NSwxNyArNDA5LDMwIEBA
IHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KIAogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKICAgICAKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworCisgICAgbW92ZShyZWdUMCwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCks
IHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQ
UiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uZXh0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhp
cyk7CiB9CkBAIC00MTYsMTAgKzQ0Myw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGlu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCi0gICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGl0ZXJh
dG9yR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBMaXN0IG5v
dE9iamVjdDsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyYXRvckdQ
UikpOwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0b3JHUFIp
KTsKQEAgLTQzMiwxOSArNDU3LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9v
cGVuKGNvbnMKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVy
YXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudCkucmF3Qml0cygpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgbW92
ZShpdGVyYXRvckdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIAog
ICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93
SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRvbmUubGlu
ayh0aGlzKTsKIH0KQEAgLTQ3NSw0NSArNDk4LDY3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJh
dG9yX25leHQoY29uc3QgSW4KICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIC8v
IGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAgICBH
UFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1Qy
OwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3aWxs
IGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2YWx1
ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJl
ZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsK
KyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsK
ICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BS
KTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IGJh
c2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsK
IAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQ
Uik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRS
ZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3Mo
aXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywgQWNjZXNzVHlwZTo6
R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVk
UmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6
OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBh
ZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9
KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3Mg
eyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAg
fQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgICAgICBH
UFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVy
cyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigp
OworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNj
cmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5j
aElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9i
YWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHko
dm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxHUFIpOwog
CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpyZXN1bHQ7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BS
KSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCByZWdUNCwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0g
ICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwo
KSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
dHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
ICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
ICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMu
YXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
SlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlc3VsdEdQUik7CiAKICAgICAg
ICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwogICAgIH0KQEAgLTUyNyw1OSArNTcyLDU1IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkp
OwogCisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BS
ID0gcmVnVDI7CiAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAgICAgSnVt
cExpc3Qgbm90T2JqZWN0OwotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2Vs
bChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RD
ZWxsKGl0ZXJDYWxsUmVzdWx0R1BSKSk7CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlk
ZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAgICAg
CiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwotCi0gICAgICAg
IENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUp
PihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJn
R1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkb25lVlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
aXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJ
Zk5vdE9iamVjdChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoZG9uZVZSZWcsIHJlZ1QxKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRH
UFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVj
bHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1l
bnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkb25l
VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygp
KTsKKworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9uZVZS
ZWcsIGRvbmVHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JD
aGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogICAg
IH0KIAogICAgIHsgICAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgICAgIEdQ
UlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCk7CiAgICAgICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAg
ICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgQ2FsbCBjYWxs
OwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkg
ewotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BS
MCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCB2YWx1ZVZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1
bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
aWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50
R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKICAgICB9Ci0K
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENv
ZGUuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OSwxMCArMTU5LDEwIEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgeworICAgICAgICBp
ZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpIC8vIE9PUFMKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUo
aml0VHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIE9wdGlv
bnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApAQCAtMjQ4LDYgKzI0OCw0
MSBAQCBwcm90ZWN0ZWQ6CiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBtX3JlZjsKIH07CiAK
K2NsYXNzIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0
aElDSG9sZGVyJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fYWRkSUNzID0gV1RGTW92ZShvdGhl
ci5tX2FkZElDcyk7CisgICAgICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhlci5tX211bElDcyk7
CisgICAgICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAgICAgIG1f
c3ViSUNzID0gV1RGTW92ZShvdGhlci5tX3N1YklDcyk7CisgICAgfQorCisgICAgSklUQWRkSUMq
IGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBt
X2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9tdWxJQ3MuYWRkKGFy
aXRoUHJvZmlsZSk7IH0KKyAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9
CisgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisKKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBl
PgorICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7
IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3Nh
bWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUTXVs
SUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJ
VE11bElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3Is
IEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVROZWdJQyogYWRkTWF0aElD
KFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxl
KTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0
b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisKK3ByaXZh
dGU6CisgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVs
SUNzOworICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1
YklDczsKK307CisKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKERpcmVj
dEpJVENvZGUpOwogY2xhc3MgRGlyZWN0SklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVS
ZWYgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJ
RklFUihEaXJlY3RKSVRDb2RlKTsKQEAgLTI2Niw2ICszMDEsMTYgQEAgcHJpdmF0ZToKICAgICBD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fd2l0aEFyaXR5Q2hlY2s7CiB9OwogCitjbGFzcyBCYXNl
bGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7
CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29k
ZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKKyAgICAgICAgOiBEaXJl
Y3RKSVRDb2RlKFdURk1vdmUoY29kZSksIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkKKyAgICB7IH0KKworICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtl
ZENhbGxzOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7IC8vIE9P
UFM6IG1ha2Ugc3VyZSB3ZSB2aXNpdCB0aGVzZSBzb21laG93LiBPciBhc3NlcnQgd2UgZG9uJ3Qg
aGF2ZSB0bywgc2luY2UgdGhleSdyZSB2aXJ0dWFsIGNhbGxzLgorfTsKKwogY2xhc3MgTmF0aXZl
SklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgewogcHVibGljOgogICAgIE5hdGl2
ZUpJVENvZGUoSklUVHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlm
aWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIklubGluZUFj
Y2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBzdGF0aWMgU3Ry
dWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5
cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdp
c3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2ppdFR5cGUoaml0
VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1YkluZm8gPSBtX2Nv
ZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2lu
KSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxvY2sgPyBjb2Rl
QmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJ
bmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwogCiAgICAg
bV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2
IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIExpbmtCdWZm
ZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0gc3Rh
cnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9m
PEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0g
c2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zbG93UGF0aEJlZ2lu
KTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
LCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworICAg
IFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKyAgICBqaXQu
bG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHJ1Y3R1cmVTdHViSW5mb0dQUik7CisgICAgaml0LmNh
bGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9kb25lID0g
aml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAg
ICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpT
VmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lv
biAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMTMgQEAgbmFtZXNwYWNlIEpT
QyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNs
YXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwogCiBl
bnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50
OF90OwogCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxC
eUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpy
ZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVn
VDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVF
bnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6cmVnVDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBh
IENvZGVCbG9jayBhbmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHVi
SW5mby4KKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZv
ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cHJvdG8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVj
dCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpy
ZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1
Y3QgQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKK307
CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJl
Z1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9
OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFz
ZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KGJyYW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xh
c3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yKCkgeyB9CkBAIC02MiwxNSArMTY0LDIwIEBAIHB1YmxpYzoKICAgICB2b2lk
IGZpbmFsaXplKAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtC
dWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogbV91bmxpbmtlZFN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7IHN0ZDo6
bnVtZXJpY19saW1pdHM8SklUQ29uc3RhbnRQb29sOjpDb25zdGFudD46Om1heCgpIH07CisKIHBy
b3RlY3RlZDoKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRU
eXBlOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0
aEJlZ2luOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOyAvLyBPT1BTOiBtYWtlIHJlcG9ydENh
bGwgcGFzcyBzb21ldGhpbmcgaW4gd2UgY2FuIHVzZSBmb3IgdGhlIG5vbi1DVEkgdGh1bmtzIGJ1
aWxkcy4gCiB9OwogCiBjbGFzcyBKSVRCeUlkR2VuZXJhdG9yIDogcHVibGljIEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yIHsKQEAgLTEzMiw4ICsyMzksOCBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJ
ZEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAg
ICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0
IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVl
UmVncyBiYXNlLAotICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BS
LCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sq
LCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYg
dXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
YmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0
Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgo
TWFjcm9Bc3NlbWJsZXImKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJs
ZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYm
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25z
dGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBz
cmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmlzSW50MzIoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwo
VmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAgICAgICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3Nl
cnQgdGhhdCBhbGwgbGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxs
KCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAg
ICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NF
UlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
c3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAg
IHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJ
RCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xODUsNyArMjEwLDcgQEAgQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeAogCiBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2st
PmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05l
eHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRl
eCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NF
UlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2tw
b2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4
ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFi
ZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlu
bGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6
ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNv
ZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2lu
dHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1
dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0y
OTMsMjkgKzMxOCwzNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJh
CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFs
UmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVS
ZWdzIHZhbHVlKQotewotICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0gICAg
Ly8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3
ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxz
ZQotICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8
RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAgIHN0
b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwot
ICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNl
bmRpZgotfQorICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2Vs
bCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30KKworLy8gT09QUworLy9pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVS
ZWdzIHZhbHVlKQorLy97CisvLyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKKy8v
CisvLyAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNr
ZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lmIFVT
RShKU1ZBTFVFNjQpCisvLyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9i
dWNrZXRzKTsKKy8vI2Vsc2UKKy8vICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0
b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5t
X2J1Y2tldHMpOworLy8gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9y
LT5hc0JpdHMucGF5bG9hZCk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3Jp
cHRvci0+YXNCaXRzLnRhZyk7CisvLyNlbmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRh
ZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlm
CkBAIC0zMjMsMjQgKzM1MywyNSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Nh
bWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmls
ZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1Zh
bHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQg
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNW
YWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvciht
ZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKyAgICBwdHJk
aWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1l
dGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPiht
X2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJz
dEJ1Y2tldCgpOworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3MobV9tZXRhZGF0YUdQ
Uiwgb2Zmc2V0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjpl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcg
cmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBK
U1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVn
KQorLy97CisvLyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1
ZVJlZ3MocmVzdWx0UmVnKSk7CisvL30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRh
LCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2Rl
LCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKQEAgLTM2MCw2
ICszOTEsMjEgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlVwogICAg
IH0KIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlm
Zl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQg
c2NyYXRjaEdQUikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CisgICAgICAg
IGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2Ny
YXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKKyAgICB9Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQ
UiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQoreworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2VsbEdQ
Uiwgc2NyYXRjaEdQUik7Cit9CisKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJh
bmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJldHVybiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CkBAIC0zODAsNyArNDI2LDcgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9h
ZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBp
bkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3Rl
ZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxv
YWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTQyLDcgQEAgaW5s
aW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAg
IGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25D
ZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTUyLDcgQEAgaW5s
aW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3Rl
cklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7Cisg
ICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgp
KQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0
LDExICs1NjAsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAg
ICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29s
IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsNyArNTg1LDggQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5
dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgICAgICAvLyBPT1BTOiBoYW5kbGUg
bGluayB0aW1lIGNvbnN0YW50cyBoZXJlLi4uCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7
CiAgICAgICAgIGVsc2UKQEAgLTU2NiwxMSArNjA4LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0
Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZp
cnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVy
SUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01OTUs
NyArNjMyLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogCiBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0
ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2st
PmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY3NCw3
IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBpZiAo
dGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+
b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgR2V0
UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQotewot
ICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hNYXAg
ZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRHZXRQ
dXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0SW5m
b3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7Ci0g
ICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1dElu
Zm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6OmNv
cGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBrZXkg
PSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAzMiB8
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChpdGVy
YXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVy
YXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGllZEFy
aXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQcm9m
aWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0
KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiArNjk1
LDUyIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICByZXR1
cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2Fk
UHRyKEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNl
dCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBt
X3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRl
Y29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9h
ZDgoQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgp
Lm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZhbHVl
LCBBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCku
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMyVG9N
ZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9m
ZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2Rl
KSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGFk
ZFB0cihtX21ldGFkYXRhR1BSLCBUcnVzdGVkSW1tUHRyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3Vs
dCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9h
ZFB0cihBZGRyZXNzKG1fY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvbnN0
YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxv
YWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9nbG9i
YWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzEsNyAr
OTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxG
cmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRy
ZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1
bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX21v
dihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgeworICAgICAgICAvLyBPT1BTCiAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAg
ICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC04Nywz
NyArODgsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgogdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RB
bGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUg
PSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29u
Y3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcg
PSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lz
dGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0g
cmVnVDM7CiAKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRv
IGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxvY2F0
ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBh
bGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNo
UmVnLCBzbG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVz
dWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtdXRhdG9yRmVu
Y2UoKm1fdm0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAgbG9hZFB0ckZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUoKSArIG9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAgbG9h
ZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Om9mZnNldE9mT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUoKSArIG9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJlZyk7CisK
KyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1t
UHRyKG51bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxs
b2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBz
Y3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBT
dHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBlbWl0
SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKKyAgICBtdXRh
dG9yRmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKKwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0Pigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJl
KCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0
LCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVtaXRTdG9yZUNl
bGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTE1NCwzMCArMTUzLDM4IEBAIHZvaWQg
SklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5
dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWws
IHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBX
ZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBm
aXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm90bywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9H
UFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1
ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9HUFIpOwogICAg
IAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBj
ZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0
YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8v
IHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3Rv
Ci0gICAgICAgIHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHJlc3Vs
dEdQUiwKKyAgICAgICAgdmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAgICAgICBzdHVi
SW5mb0dQUiwKKyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMSwg
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCisKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCArMTk5LDEzIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOwot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5j
ZU9mT3B0aW1pemUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgcmVnVDIs
IHJlZ1QxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOwotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgc3RhdGlj
X2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09IGFyZ3VtZW50
R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZh
bHVlID09IGFyZ3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKQorICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUo
b3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0z
NzQsNyArMzgwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxp
Z25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwog
I2Vsc2UKQEAgLTM4NSw3ICszOTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZt
KQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBqaXQu
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVT
YXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVn
aXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQxNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1p
dGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlf
a2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQsOSArNDM5
LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZvaWQgSklU
OjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9u
TmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFt
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0NzEsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElm
RmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9i
YWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJl
Z3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNl
bHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNGYWxzZXlH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzQ4OCw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyArNTI3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8vIEZpcnN0
LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQg
b24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQp
OwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CiAK
QEAgLTU0Myw3ICs1NTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5z
dHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJhbmNoVGVz
dDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdl
dCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTYyNSw4ICs2MzMs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5j
aElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsK
ICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0
aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY1MCw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzA1
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBj
YWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1Qw
KTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzcy
Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93
blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtOTA4LDcgKzkxOSw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MTgs
NyArOTMwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCkBAIC05OTMsNyArMTAwNiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNo
KGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFt
ZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNo
T2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZD
YXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMjQsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50
IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVy
OwotICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAm
dm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZh
bHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFs
dWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNr
aXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNl
cHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBp
ZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZv
ckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAg
ICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCBy
ZWdzKTsKLSAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQog
CkBAIC0xMTEyLDcgKzExMTMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNv
bnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3Rz
QWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdn
ZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1
Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0xMTQ4
LDcgKzExNTAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAK
ICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTMxMCwyMyArMTMx
MSwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJ
VDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVk
U3RydWN0dXJlSUQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0Rz
dCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7
Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFRvVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0
dXJlSUQoKSwgcmVnVDIpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9j
YWxsZWU7Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZt
ZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1Qw
OwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJl
c3VsdFJlZyA9IHJlZ1QwOwpAQCAtMTM0Miw3ICsxMzM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywg
RnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0g
SlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRk
cmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZz
ZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcp
OwogCi0gICAgbG9hZFB0cihjYWNoZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAg
IGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wQ3JlYXRlVGhpczo6b2Zmc2V0T2ZDYWNo
ZWRGdW5jdGlvbigpLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlw
bGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZElt
bVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwog
ICAgIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM2OSw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZh
bHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIs
NyArMTM4MCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1
c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBK
U1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyArMTM5Myw4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzE0
MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgs
MTAgKzE0MTksMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAog
ICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0lu
c3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1
bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFy
Z3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTUwOSw3ICsxNTExLDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1lbnRHUFIwKTsKICNlbHNlCiAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMzsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTE1NjQsMzQgKzE1NjcsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJ
bnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVn
ZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdl
eHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IEdQUlJlZzo6YXJndW1lbnRHUFIwOworICAg
IGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXROZXdG
dW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
SnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1f
c2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJn
dW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBt
X2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBh
dXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
Ynl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSkKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFy
Z3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5
bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19h
c3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBk
c3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0x
NjIxLDIzICsxNjI2LDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3Qg
SW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BS
MSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7
CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAj
ZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+
ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHBy
LCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9m
dW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIp
OwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29k
ZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3Jf
ZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BS
MXJlZ1QwLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19h
c3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMXJl
Z1QwLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQg
PT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAs
IGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjFyZWdUMCwgYXJndW1lbnRHUFIy
KTsKICAgICB9CiB9CiAKQEAgLTE2NjQsMTMgKzE2NzAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2FzeW5jX2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0g
Ynl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwogICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxl
LCByZWdUMCwgc2l6ZSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVj
b2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxl
KCksIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2Zp
bGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MSwgcmVnVDAsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9z
aXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjc5LDE0ICsx
Njg0LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNp
emVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZB
cnJheUFsbG9jYXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdExvYWQo
c2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9m
aWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkp
OwogI2VuZGlmCiB9CiAKQEAgLTE2OTQsOCArMTY5OCw5IEBAIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91
YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhl
IHR5cGUgcHJvZmllbHIgaXMgZW5hYmxlZC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNo
ZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsK
IApAQCAtMTc3NywyMCArMTc4MiwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2No
aWNrZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFy
Z0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93
Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwotICAg
IEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1h
cmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBl
bnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFS
ZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5v
bkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVuc3VyZVNoYWRvd0NoaWNr
ZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcp
OworICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
LCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBy
ZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBK
U1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1Bh
Y2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1
cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB1c2luZyB0aGUgY29udHJvbCBm
bG93IHByb2ZpbGVyLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNp
Y0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlz
KTsKQEAgLTE4NjAsNyArMTg2OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChj
b25zdCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxODk1LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCks
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNl
cyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcs
IEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0g
dHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgx
NzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwxMDMgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlm
IChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJ
Q01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6Omdl
dEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RD
ZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cmVzdWx0KTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJl
Z3MsIHJlZ1QyKTsKLSAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkK
LSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAg
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dD
YXNlKCk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICAgICAgLy8gT09QUy4gU3Vw
cG9ydCB0aGlzCisgICAgICAgIC8vaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkK
KyAgICAgICAgLy8gICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisK
KyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkdldEJ5VmFsOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgp
OwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwog
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dD
YXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFz
QW55U2xvd0Nhc2VzKGl0ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0
QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAot
ICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRp
b25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAg
bW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAg
IG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudCht
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0T2ZB
cnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBh
cmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0g
ICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2Rl
SW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAot
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBh
cmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVH
UFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAg
IENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAg
IHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7
CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9
PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3RhbnQobV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7
CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
ICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAg
IH0KKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CkBAIC0xNjAsOCArMTcxLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJh
c2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMTg3LDI3ICsxOTgsMzUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAg
ICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUs
CisgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1
YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRC
eVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3Vs
dFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKQEAgLTIyMyw5ICsyNDIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2
YXRlX25hbWUoYwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldFBy
aXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9u
R2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMjM1LDI2ICsyNTYsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2
YXRlX25hbWUoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3Vt
ZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBh
cmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldFByaXZhdGVOYW1l
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMzAwLDIxICszMTUsMjgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJh
bmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIp
OwotCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAg
ICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5k
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0
ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMu
YXBwZW5kKGdlbik7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRo
ZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMu
CkBAIC0zMjgsMTMgKzM1MCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVf
YnJhbmQoCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOworCiAgICAg
SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vz
c2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQ
UiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJp
dmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMzQ0LDI0ICszNzAsMTggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3Bl
cmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25U
cmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVu
dFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZgogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTM3MCwxOSArMzkwLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVf
YnJhbmQoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihicmFuZCwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwogCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFu
ZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiB9CiAKQEAgLTM5NCw5
ICs0MjMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5k
R1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRH
UFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0
ZUJyYW5kT3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC00MDYs
MjQgKzQzNywxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBh
cmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1l
bnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5j
dGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46
OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZh
dGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0
ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC00NDEsMjQgKzQ2NiwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDMpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
Ynl0ZWNvZGUsIGJhc2VHUFIsIHByb2ZpbGVHUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBwcm9maWxlR1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwg
cmVnVDMsIHJlZ1Q0KTsKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHBy
b2ZpbGVHUFIsIHN0dWJJbmZvR1BSKTsKKyAgICAvLyBPT1BTOgorICAgIC8vaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAvLyAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVy
dHlJc0ludDMyID0gdHJ1ZTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gc3RkOjpp
c19zYW1lX3Y8T3AsIE9wUHV0QnlWYWxEaXJlY3Q+ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2lu
ZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2Rl
KTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAog
ICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBp
ZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTQ3NCw3ICs1MTMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2Rl
OjpzdHJpY3QoKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwogCiAgICAg
YXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKQEAgLTQ4Miw3ICs1MjAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJCiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAg
ZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOwogICAgICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNDk4
LDcgKzUzNSwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgLy8gVGhleSBhcmUgY29uZmlndXJl
ZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0
cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVn
VDIsIGdlbi5zdHViSW5mbygpLCByZWdUMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQp
OworICAgIGlmIChpc0RpcmVjdCkKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSwgT3BQdXRCeVZh
bERpcmVjdDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7
CisgICAgZWxzZQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0
YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBh
cmd1bWVudEdQUjQsIGFyZ3VtZW50R1BSNSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CkBAIC01MTIsNyArNTU4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKICAgICBj
b25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfdmFsX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIENhbGwg
Y2FsbDsKICAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0
KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplKTsKQEAgLTUyMyw3ICs1NjksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC01
MzksMTEgKzU4NSwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q1OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnByb3BlcnR5Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgaml0LnN0b3Jl
MzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpOwpAQCAtNTcwLDIwICs2MTYsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZh
bHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
SlNWYWx1ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJ
bnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+
cHJpdmF0ZUZpZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0
ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4K
QEAgLTYwMywxMyArNjYwLDE0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9u
YW1lKGMKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgYXV0byBv
cGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVBy
aXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRp
bWl6ZTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgLy8gVGhleSBhcmUgY29u
ZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7Ci0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBn
ZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjQpOworICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8g
b3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50c0dQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02MjIsMTggKzY4MCwxMiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0OCw5ICs3MDAsOSBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBy
ZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSByZWdUNDsKIApAQCAtNjgwLDcgKzczMiw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02ODksNyArNzQyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRTZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02OTksNyArNzUzLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9nZXR0ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0
ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmli
dXRlLCByZWdUMSwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBh
dHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0
ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MDks
NyArNzY0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAg
IGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcxOSw3ICs3NzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlW
YWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCBy
ZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyNywyMyArNzg0
LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdU
MywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUik7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlkOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVy
ZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hv
dWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRl
LWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNzU5LDE1ICs4MjYsMTcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVs
QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxl
dGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
LCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNzgxLDI0ICs4NTAsMTkgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9
IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGJhc2VHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVH
UFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlf
aWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25EZWxldGVCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1Zh
bHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC04NDUsMjIgKzkwOSwz
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwg
YmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVE
ZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVy
dHlHUFIsIHByb3BlcnR5KTsKKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw7CisgICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVy
IGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdp
c3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1i
YXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtODgzLDkgKzk1OCwxMSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFy
Z3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
T3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMywgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtODk5LDI0ICs5NzYsMTkgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9k
ZUdQUiA9IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2Rl
LnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZh
bHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAog
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKQEAgLTk2MSwyMiArMTAzMywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2VWUmVnLCByZWdUMCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdz
LCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3Mp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTk4Niwx
NCArMTA2NywxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRy
eUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFy
Z3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDAzLDI2ICsxMDg3LDIwIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKICAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9u
VHJ5R2V0QnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46
OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0
X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1
cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTAzMiwyMCArMTExMCwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
ZGlyZWN0KGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3Vs
dCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
LQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdU
MSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBl
OjpHZXRCeUlkRGlyZWN0KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMDU0LDE2ICsxMTQxLDE4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXpl
LCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTA3MywyNyArMTE2MiwyMSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRH
UFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRy
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
RGlyZWN0T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFs
dWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlf
aWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5k
Q2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJu
VmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJu
VmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTEwMiw1NCArMTE4NSwzOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
c2NyYXRjaDsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5
TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgSnVtcCBu
b3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1l
dGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwocmVnVDAsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxl
bmd0aE1vZGUuYXJyYXlQcm9maWxlLCByZWdUMSk7CisgICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsg
R2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlKCksIHNjcmF0Y2hHUFIpOworICAgICAg
ICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5n
dGgpKSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwg
T3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2Rl
TWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFzZUdQUiwgc2Ny
YXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0K
IAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVz
dWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhU
aGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZp
cnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3Ms
IHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRo
aXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJl
Zyk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CiAKLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCi0gICAgSklUR2V0QnlJ
ZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9n
ZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTE1OCwxNiArMTIy
NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1tt
X2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMTc3LDI2ICsxMjQ3LDU4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIz
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOworICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9
IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3Vs
dCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisKKyAgICBKSVRHZXRCeUlkV2l0
aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlz
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2Vu
KTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKICNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyNTAsNyArMTM1MiwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFs
dWUsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRh
LCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTI2MCwyOSArMTM2NiwyMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IHJlZ1Qx
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlz
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodGhpc0dQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7Ci19CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOworfXMKIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19w
cmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCkBAIC0xMzI5LDIzICsxNDI5LDM3IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJl
ZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdz
LmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhl
IFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwK
ICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRv
IHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKICAgICAvLyBz
dWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRp
c3RhbmNlIGZyb20gdGhpcy4KIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVn
LCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lz
dGVyczo6c2NyYXRjaDsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCBiYXNlR1BS
LCB2YWx1ZVZSZWcsIHZhbHVlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDMs
IHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hH
UFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0
IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5SWQ7CisgICAgc3R1Yklu
Zm8tPnB1dEtpbmQgPSBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJl
Y3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCiAgICAgLy8g
SUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFz
ZSBpcyBjZWxsLgpAQCAtMTM1OSwxNCArMTQ3MywxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAgICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYg
Z2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1
bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGFyZ3VtZW50R1BSMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BS
Myk7CisgICAgY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CkBAIC0xMzc2LDI1ICsxNDk0LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBh
cmd1bWVudEdQUjM7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJl
ZyB2YWx1ZUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3Rl
cnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwg
IWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBhcmd1bWVudEdQUjEp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IGdlbi5zbG93UGF0aEZ1bmN0
aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChnZW4uc2xvd1BhdGhG
dW5jdGlvbigpKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTE0NDEs
MjAgKzE1NTMsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Ywog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0NjMsMTQgKzE1ODYsMTcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTQ4
MCwyOCArMTYwNiwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQ
Uik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X2lk
X3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAg
Ly8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVz
dCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNTEwLDI1ICsxNjMwLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5
X3ZhbChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QxKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUs
IHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1
bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
c2NyYXRjaCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBz
dHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1f
aW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCkBAIC0xNTM3LDE1ICsxNjY1LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92
YWwoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5CeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAg
ICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsr
XTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5CeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNl
dE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
YXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMTU1Niw1MSArMTY4Nyw1NiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlf
dmFsKGNvbnN0IEluCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1l
bnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3Rh
dGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxp
emVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV92
YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAg
ICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBq
dXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpLCBkZWNsdHlwZShvcGVy
YXRpb25HZXRCeVZhbE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNl
Ci0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5
cGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFu
ZCwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IHR5cGU7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJl
Z2lzdGVyIGRzdCwgQWNjZXNzVHlwZSB0eXBlKQordm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xv
dyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlIHR5cGUpCiB7CiAgICAgQVNTRVJUKHR5cGUgPT0gQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
QnJhbmQpOwogCkBAIC0xNjA4LDcgKzE3NDQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRl
U2xvdyhWaXJ0dWFsUmVnaQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZh
dGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7Cisg
ICAgY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3Bl
cmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9w
dGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFy
Z3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNjE4LDI3
ICsxNzU4LDIxIEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2kKICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eU9yQnJhbmRHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eU9yQnJhbmRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5Owog
ICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7
CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eU9yQnJhbmRHUFIgPT0gYXJndW1lbnRHUFIxKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVy
YXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0
ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8
ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpLCBkZWNsdHlwZShvcGVy
YXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFz
UHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9u
SGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5k
Q2FsbCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJp
dmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjUyLDcgKzE3ODYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaGFzX3ByaXZhdGVfbmFtZShjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZU5hbWU+
KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlTmFtZSk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBi
eXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fcHJvcGVydHksICwgQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZU5hbWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9icmFuZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY2Niw3ICsxODAwLDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEhhc1ByaXZhdGVCcmFuZD4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUu
bV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhhc1ByaXZhdGVT
bG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKIHZvaWQgSklUOjplbWl0VmFySW5qZWN0
aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKQEAgLTE2ODgsNiArMTgyMiw3
IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3OTQsNTkgKzE5Mjks
NzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogdm9pZCBKSVQ6
OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVz
b2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0
YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNT
RVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAg
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0g
Y3VycmVudEluc3RydWN0aW9uKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIg
PSByZWdUNzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIC8vIElmIHdlIHBy
b2ZpbGUgY2VydGFpbiByZXNvbHZlIHR5cGVzLCB3ZSdyZSBnYXVyYW50ZWVkIGFsbCBsaW5rZWQg
Y29kZSB3aWxsIGhhdmUgdGhlIHNhbWUKKyAgICAvLyByZXNvbHZlIHR5cGUuCiAKLSAgICBpZiAo
cmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0
YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgaWYgKHByb2Zp
bGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKKyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZp
cm9ubWVudCgpLCByZWdUMCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0
YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsK
KyAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+
bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOworCisgICAgICAgIGF1
dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVybiBK
SVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9w
X3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhciIpOworICAgICAgICB9OworCisgICAgICAgIGF1dG8g
Y2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mKSB7Cisg
ICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyIpOworICAgICAgICB9OwogCi0jZGVmaW5l
IFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMj
cmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJh
dG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShS
RVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3Bl
R2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Nj
b3BlIGdlbmVyaWMiKTsKICAgICAgICAgfTsKLSN1bmRlZiBSRVNPTFZFX1NDT1BFX0dFTkVSQVRP
UgorCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gY29kZTsKKyAgICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhcikKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0
b3IpOworICAgICAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIo
Y2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljUmVzb2x2ZVNjb3BlR2Vu
ZXJhdG9yKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogICAgIH0KIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BS
ZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVy
YXRlT3BSZXNvbHZlU2NvcGVUaHVuayhzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZl
VHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0
ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxp
bmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0YWRh
dGEgPSBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRh
ZGF0YUdQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVH
UFIgPSByZWdUNjsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gcmVnVDU7IC8vIGluY29taW5nIC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4KICAg
ICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwogICAgIFVOVVNFRF9Q
QVJBTShieXRlY29kZU9mZnNldEdQUik7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRG
b3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygp
OworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBh
ZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAg
IGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNl
OwogCkBAIC0xODU1LDI2ICsyMDA4LDI2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9iamVj
dEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSBy
ZWdUNDsKLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0KLSAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpT
R2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2lu
dFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Cisg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Cisg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywg
V2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1Qw
KTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBqaXQubW92ZShz
Y29wZUdQUiwgcmVnVDApOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOwog
Ci0gICAgICAgIExhYmVsIGxvb3AgPSBsYWJlbCgpOwotICAgICAgICBKdW1wIGRvbmUgPSBicmFu
Y2hUZXN0MzIoWmVybywgcmVnVDEpOworICAgICAgICBMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7
CisgICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOwogICAg
ICAgICB7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNl
dE9mTmV4dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMSk7Ci0gICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3AsIHRoaXMpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCBy
ZWdUMCk7CisgICAgICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Cisg
ICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsKICAgICAgICAgfQotICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluaygmaml0KTsKICAgICB9Owog
CiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKQEAg
LTE4ODIsMTIgKzIwMzUsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6
Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkuCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxv
Y2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwg
Z2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkp
LCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxM
ZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShnbG9iYWxP
YmplY3RHUFIsIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBv
Y2gpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRP
Zkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQu
bW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKQEAgLTE4OTcsMTEgKzIwNTAsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29k
ZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwK
ICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
ICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdU
MCk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxP
YmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0x
OTA5LDcgKzIwNjIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6
Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0xOTE5LDgz
ICsyMDcyLDQ1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUp
KSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0
Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQot
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9IENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsK
KyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2
ZVR5cGUpKSwgcmVnVDApOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdUMCk7CiAKLSAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsK
LSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAg
ICAgICAgYXV0byBlbWl0Q2FzZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKKyAg
ICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5
cGUpOworICAgICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAg
ICAgIG5vdENhc2UubGluaygmaml0KTsKKyAgICAgICAgfTsKIAotICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyKTsKKyAgICAgICAgZW1pdENh
c2UoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsK
KyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAg
ICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAg
ICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRv
RW5kLmxpbmsoJmppdCk7CiAgICAgfQogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdl
dENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihzbG93
X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwog
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1
bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVz
b2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpv
cF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7
IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShy
ZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGpp
dCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmso
cmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7
IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VO
RVJBVE9SKQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMg
ZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNh
dXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUg
ZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2
XzY0KQpAQCAtMjA2NSw2ICsyMTgwLDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZp
cnR1YWxSZWdpcwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKQEAgLTIxNzgsNyArMjI5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAg
LTIyMDYsMzEgKzIzMjIsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSQogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVj
b2RlSW5kZXgpOwogICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVj
b2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKKyAgICBhdXRvIGNsb3N1cmVWYXJH
ZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRG
cm9tU2NvcGVUaHVuayhDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENs
b3N1cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJh
dGVPcEdldEZyb21TY29wZVRodW5rKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAi
QmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAg
YXV0byBnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICBy
ZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoc3RkOjpudWxsb3B0LCAiQmFz
ZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OworCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Nv
cGVHUFIgPSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
cmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0gICAgICAgIHVp
bnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRh
ZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9j
YXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRh
dGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2Rl
KTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX2dl
dF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNv
bnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNI
X1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAgIH07Ci0jdW5k
ZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCks
IG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCks
IG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsK
KyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBjb2Rl
ID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNlIGlmIChwcm9m
aWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAg
ICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
c0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5l
cmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUu
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5l
cmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNo
YXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4g
cmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsg
Z2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAv
IEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgpAQCAtMjIzOSw3NyArMjM2NSw2OCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6
TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBSRUxFQVNFX0FTU0VSVCh0
aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1
cm5BZGRyZXNzKCk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIGppdC50YWdSZXR1cm5B
ZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRh
R1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1l
dGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFk
YXRhU3RydWN0dXJlT2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVH
UFIsIHJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywg
cmVnVDEpKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSkpOworICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJl
ZyBzY29wZUdQUikgeworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBN
ZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUo
c2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0
UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3Ry
dWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAg
ICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBy
ZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJ
bmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0
byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJl
ZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcp
OwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0
VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVn
KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7
Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRvIGVtaXRHZXRD
bG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7CiAg
ICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAg
ICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIo
c2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQ
UiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7Cisg
ICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOworICAgICAg
ICBqaXQuYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJs
ZXMoKSksIHJlZ1QwKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1
dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3
aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
ICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGlu
amVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQg
dGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hl
Y2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNr
aW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJl
Z1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKICAgICAg
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAgICAgICAgICBq
aXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAg
ICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVy
biBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5qaXRBc3Nl
cnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAg
ICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxv
Y2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsK
IAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgb2Zm
c2V0KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAg
IEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwg
VHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJv
cnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBp
c091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUg
PSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihm
aXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFz
b24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5l
LmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
YmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAg
ICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBv
ZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0Lm5l
ZzMyKG9mZnNldCk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBv
ZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0
LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBHbG9iYWxWYXI6CkBAIC0yMzE3LDIxICsyNDM0LDE5IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
OgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgog
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkK
LSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3Bl
cmFuZCkpLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRh
R1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwogICAgICAgICAgICAg
ZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgp
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBN
b2R1bGVWYXI6CkBAIC0yMzQxLDc5ICsyNDU2LDU2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29s
dmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7
Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRv
IFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
Ci0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENv
ZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAg
ICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0g
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVz
b2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAg
ICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0
YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdl
dFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAK
LQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAg
aXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAg
aml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJ
bmZvKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEds
b2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsoJmppdCk7CisK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0LmJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBKdW1wIGlzR2xv
YmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3Bl
cnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRy
dWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
dW1wKCkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAg
ICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAgICBz
dGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0
b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0
YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRh
R1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkpKTsKIAotICAgIHJldCgpOworICAgIGpp
dC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVO
S19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5k
bGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwot
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNl
SGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0oKS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9y
KFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZv
ck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsg
XAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29w
ZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5F
X0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfR0VUX0ZST01fU0NPUEVf
R0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpz
bG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1
bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTElu
dCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCkBAIC0yNDcxLDg2ICsyNTYzLDc5IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVl
KiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlm
eVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6
OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9p
bnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdy
aXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBz
dG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIo
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1Qw
KTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVz
cyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVy
YW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9
IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
ID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNs
b3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5k
U2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7
CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9v
bCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNv
bHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0
SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hl
Y2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBp
bmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0
IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNo
ZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBj
aGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVz
IGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8vIEFkZGl0
aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVj
dGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9T
Y29wZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVn
VDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAKICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRM
YW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVy
biBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMyk7CiAg
ICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihv
cGVyYW5kU2xvdCwgcmVnVDEpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Om9mZnNldE9mT3BlcmFuZCgpLCBy
ZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIo
cmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGlu
ZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1p
dFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1Qz
LCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICAvLyBPT1BTOiB3b3VsZCBiZSBuaWNlIHRv
IGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBHUFJSZWdzCisgICAgICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2Fs
VmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAg
ICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgIGlm
ICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAo
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKworICAgICAgICAgICAgbG9hZFB0
ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZP
cGVyYW5kKCksIHJlZ1QwKTsKKworICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5
dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBk
byBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQg
dG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGly
ZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5k
aXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDAp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZy
b21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwot
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1p
dFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFu
ZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7
Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdU
MSk7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAg
ICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICAvLyBPT1BT
OiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3Ig
dmFsdWUuCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwot
ICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUs
IG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2lu
dFNldCgpLCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAg
ICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1Qx
LCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBTY2FsZUVpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVu
dDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3VsZCBi
ZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3Igb3duZXIvdmFs
dWUuCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpA
QCAtMjU2NCw1OCArMjY0OSw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewot
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5
cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNH
bG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBw
dXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAgICAg
ICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJlVmFy
LyBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGlsZSB0
aGluZ3MKKyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3ZlIHBy
b3ZlbiB0aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZhciwK
KyAgICAvLyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgorICAg
IC8vIGlmIHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0IGlz
IGZpcmVkLCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAgIC8v
IG1hdHRlciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxlZFJl
c29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIpOwor
ICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyKQor
ICAgICAgICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2Zp
bGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAg
ICAgIGVtaXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbHNl
IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7
CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1Qw
KTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHkpKTsKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAgZW1p
dENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsK
IAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOwor
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5s
aW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAg
bm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
ciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGlu
ayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAKICAg
ICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAg
IGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjYyNCwxMyArMjcwMywxNiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29w
ZT4oKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0
ZWNvZGUpLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikg
eworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYgYW55
IGxpbmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29kZUJs
b2NrcyBhcmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIuCiAg
ICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0
aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVf
ZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Y3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3VtZW50
R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtMjcwMSw3ICsyNzgzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1l
bnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6
c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSks
IHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3NTks
NyArMjg0MSw2IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIHZv
aWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpAQCAtMjc2Nyw3ICsyODQ4
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5k
ZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVn
VDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3ODksNyArMjg3MCw2IEBAIHRl
bXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3AKIHZvaWQgSklUOjplbWl0X29w
X2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRv
ck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAgLTI4MDUsNyArMjg4
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKICAgICBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gbW9k
ZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBwcm9maWxlIGl0
IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CisgICAgaWYgKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVyYXRvck1ldGFkYXRh
ID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgewogICAgICAg
ICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNl
cy5hcHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjptb2RlU2V0T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIofkpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKQEAgLTI4NDcsNzgg
KzI5MjcsODYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9t
b2RlOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0
IGRvbmVDYXNlczsKIAotICAgIGF1dG8gcmVzdWx0R1BSID0gcmVnVDA7CisgICAgY29uc3RleHBy
IEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6
cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVn
aXN0ZXJzOjpzY3JhdGNoMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gQmFzZWxp
bmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2Ny
YXRjaDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCBzY3JhdGNo
Myk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHByb3BlcnR5R1BS
KTsKIAotICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0
b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6
TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHNjcmF0Y2gyKTsKKyAgICBv
cjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7CisgICAgc3RvcmU4VG9NZXRhZGF0YShzY3JhdGNoMiwg
Ynl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEo
KSk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUikpOwogICAgIC8vIFRoaXMgaXMgYWx3YXlz
IGFuIGludDMyIGVuY29kZWQgdmFsdWUuCi0gICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUg
PSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5l
cmljTW9kZSkpOworICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMy
KE5vblplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsK
IAogICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDMpOwotICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2gg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgc2NyYXRjaDEpOworICAgIGxvYWQzMihBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBKdW1w
IHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNz
KHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zm
c2V0KCkpKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGluZGV4LCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgc2NyYXRjaDIpOwogICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRv
cidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAg
ICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDMsIEFk
ZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCBy
ZWdUMyk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQpLCBy
ZXN1bHRHUFIpOwotCisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0
cihzY3JhdGNoMiwgc2NyYXRjaDIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2Ny
YXRjaDIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJl
c3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gT3RoZXJ3
aXNlIGl0J3Mgb3V0IG9mIGxpbmUKICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
Z1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbmVnMzIocmVnVDMp
OwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2VHUFIpOworICAg
IHN1YjMyKEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBuZWczMihzY3JhdGNoMik7
CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKICAgICBjb25zdGV4
cHIgaW50cHRyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gb2Zmc2V0SW5CdXR0ZXJmbHkoZmly
c3RPdXRPZkxpbmVPZmZzZXQpICogc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0
LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgIGxvYWQ2NChCYXNlSW5k
ZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSks
IHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgc3RydWN0
dXJlTWlzbWF0Y2gubGluayh0aGlzKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRj
aCksICZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSk7CisgICAgc3RvcmU4VG9NZXRhZGF0
YShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0
dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBpc05vdE93blN0cnVjdHVyZU1v
ZGUubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUpKTsKKyAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBzY3JhdGNo
MywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsK
ICAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHByb3BlcnR5R1BSKTsKIAogICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOwotICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOwor
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2Ny
YXRjaDEpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIGRvbmVDYXNlcy5saW5r
KHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCkBAIC0yOTI3LDEwICszMDE1LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0
b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVyKTsKIH0KIAotdGVtcGxhdGUgPHR5
cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgotdm9pZCBK
SVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1
bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZSwgdHlw
ZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hh
c19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkK
IHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1l
cmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0yOTM5LDcgKzMwMjYsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltCiAgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMCk7Ci0gICAgb3I4
KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7
CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgcmVnVDEpOworICAgIG9yMzIocmVnVDAsIHJlZ1Qx
KTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1QxLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDMsNyArMTU0Myw3IEBA
IHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtD
YWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xu
SWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxs
TGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1w
RGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNh
bGxMaW5rSW5mbykpOwogICAgIAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0u
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGlu
ZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgxNzE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1
bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29k
ZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVv
cGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0
YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0g
ICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJv
ZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAg
ICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAg
YmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyAr
MTAxOSw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAg
ICAgIyBNZXRhZGF0YSBpbiB0MSwgc3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRp
b24odDIsIC5zbG93KQogICAgICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwg
OF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAg
dXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQx
LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1
LDE4IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3Jv
IHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1l
dGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0g
ICAgZW5kCi0KICAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQx
LCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwg
Lm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQ
cm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFBy
b2ZpbGVJbnQsIHQ1LCB0MykKICAgICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNy
Y05vdEludDoKICAgICBiaWEgdDEsIExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkg
MHg4MDAwMDAwMCwgdDEKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVy
KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1i
ZXIsIHQ1LCB0MykKICAgICByZXR1cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTEx
NSwxMCArMTEwNyw2IEBAIGVuZCkKIAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVO
YW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0
aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1
Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAg
ICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjpt
X2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAg
ICAgZ2V0KG1fcmhzLCB0MikKICAgICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTEx
NCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmlu
ZXEgdDIsIEludDMyVGFnLCAub3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywg
Lm9wMk5vdEludAotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAg
ICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJ
bnRJbnQsIHQ1LCB0MikKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9w
ZXJhdGlvbkFuZFN0b3JlKHQzLCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2go
KQpAQCAtMTEzNiwxMiArMTEyNCwxMiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29k
ZU5hbWUsIG9wCiAgICAgICAgIGJpYSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIg
dDMsIExvd2VzdFRhZywgLm9wMU5vdEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50
MzJUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQp
CisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGpt
cCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWky
ZCB0MSwgdDMsIGZ0MQotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVt
YmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0
aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAg
ICAgIGdldChtX2RzdCwgdDEpCiAgICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcg
KzExNDEsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAg
ICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVy
YW5kIGlzIGRlZmluaXRlbHkgbm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBi
aWEgdDMsIExvd2VzdFRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmls
ZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVj
dCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAK
ICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwg
ZnQwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDU2LDEwICsxMDU2LDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BK
bnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVy
YXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0
cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAg
ICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUs
ICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9zcmNEc3QsIHQw
KQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0
MykKQEAgLTEwNjksNyArMTA2NSw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0
cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9y
cSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3JlcSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAg
IHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5
QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAg
ICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTEzNCwxMSArMTEzMCw2IEBAIGVuZCkK
IAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXpl
LCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJp
dGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1f
YXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQog
ICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwg
dDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikKQEAgLTExNDYsMTIgKzExMzcsMTIgQEAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2Zm
ZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMK
LSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5
QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0NCkKICAgICByZXR1
cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAgYnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdh
dGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAwMDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQ
cm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShP
cE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0MSwgdDQpCiAgICAgcmV0dXJuKHQzKQogCiAu
b3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE1NSw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9t
U3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVO
YW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEs
IHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQogCi0gICAgICAgIG1hY3JvIHByb2Zp
bGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAg
IGVuZAotCiAgICAgICAgIGdldChtX3JocywgdDApCiAgICAgICAgIGdldChtX2xocywgdDIpCiAg
ICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsx
MTY0LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAg
ICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQw
LCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAg
ICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUlu
dEludCwgdDUsIHQ0KQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAub3AxTm90SW50OgpAQCAt
MTE4NywxMCArMTE3NCwxMCBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUs
IG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1i
ZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJv
ZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29k
ZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGptcCAu
b3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AySW50OgotICAgICAgICBwcm9maWxlKEFy
aXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9w
Y29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDQpCiAgICAgICAgIGNpMmRz
IHQxLCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBA
IC0xMjA2LDcgKzExOTMsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUs
IG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNl
Y29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAg
YnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUlu
dE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
QXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAg
ICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yNDk4LDYgKzI0OTgsMTcgQEAg
bWFjcm8gbm90U3VwcG9ydGVkKCkKICAgICBlbmQKIGVuZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5
QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9h
ZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRl
bXAKKyAgICBvcmggdHlwZSwgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisK
K21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFk
YXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFBy
b2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6
bV9iaXRzW3RlbXBdCitlbmQKKwogLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGUgWDg2
XzY0X1dJTiBjb25kaXRpb24gaGVyZSwgc2luY2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFscmVhZHkg
YmUgZmFsc2Ugb24gV2luZG93cwogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMzcxNgogaWYgV0VCQVNTRU1CTFkgYW5kIG5vdCBYODZfNjRfV0lOCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmll
ci5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWFibGVJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDEwIEBAIHB1
YmxpYzoKICAgICBDYWNoZWFibGVJZGVudGlmaWVyKCkgPSBkZWZhdWx0OwogCiAgICAgc3RhdGlj
IGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21DZWxsKEpTQ2VsbCogaWRlbnRp
Zmllcik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJik7
Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29k
ZUJsb2NrVHlwZSosIGNvbnN0IElkZW50aWZpZXImKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBVbmlxdWVk
U3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21SYXdCaXRzKHVpbnRwdHJf
dCByYXdCaXRzKSB7IHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHJhd0JpdHMpOyB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVh
YmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzUsMTIgKzM1LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXIm
IGkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJ
ZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkp
CiB7CiAgICAgcmV0dXJuIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhjb2Rl
QmxvY2ssIGkuaW1wbCgpKTsKIH0KIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVC
bG9jayogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQordGVtcGxhdGUgPHR5cGVu
YW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2Nr
VHlwZSogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIEFTU0VSVF9V
TlVTRUQoY29kZUJsb2NrLCBjb2RlQmxvY2stPmhhc0lkZW50aWZpZXIodWlkKSk7CiAgICAgcmV0
dXJuIENhY2hlYWJsZUlkZW50aWZpZXIodWlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgxNzE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQ
cm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFs
dWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHBy
b2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYg
cHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVB
cmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0Jp
Z0ludCgpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436962</attachid>
            <date>2021-08-31 16:22:52 -0700</date>
            <delta_ts>2021-08-31 18:52:05 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>328620</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IHVubGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxp
bmtlZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRp
b24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
aXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0g
ICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRo
U3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhT
dGFydCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlz
IGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQg
dG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0
aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJz
OjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAg
IHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MjQsNiArNDI0LDEzIEBAIGlubGluZSBDb2RlT3JpZ2lu
IGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBz
byB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjYsNiArNDY2
LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAg
YnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENv
ZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAg
ICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtlZENv
ZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAg
ICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVj
dGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1
Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4LDE0ICs1NDEsMTQgQEAgYm9vbCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJv
bWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9w
QWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBM
SU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMp
Ci0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVs
KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAg
IExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJ
VEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC0zMDc5LDcgKzMwOTIs
NyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFC
TEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBK
SVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJh
bWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMyOTUsMTMgKzMzMDgsMTMg
QEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRj
aCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZw
Yy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJl
dHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAg
Y2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRo
aXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMzMxMywxMSArMzMyNiwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29k
ZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAg
IGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0
ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAg
ICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0
aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVj
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFz
PE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDE2ICsyMzIsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0
OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9v
bCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRoZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJu
IHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFuZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAg
ICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFu
dChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+
KG1fbnVtVmFycyk7CkBAIC0yNjYsNiArMjU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNT
dGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAg
ICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBo
ZXJlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOwogCkBAIC00NzIsNiArNDYzLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5h
bWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFy
YW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKQEAgLTU3Miw2ICs1NjQsNyBAQCBwdWJs
aWM6CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3Rl
ciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJ
bmRleCgpXS5nZXQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcp
IGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbihyZWcpOyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24odW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bihpbmRleCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29uc3RhbnRzVmVjdG9y
QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9jb25z
dGFudFJlZ2lzdGVycykgKyBkZWNsdHlwZShtX2NvbnN0YW50UmVnaXN0ZXJzKTo6ZGF0YU1lbW9y
eU9mZnNldCgpOyB9CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQg
aW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBpbnQg
bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsg
fQpAQCAtNjAxLDYgKzU5NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
aml0RGF0YSk7CiAgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKICAgICB9CisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1
bXBUYWJsZShpbnQgdGFibGVJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChqaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFz
ZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOworICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIHVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTYx
MSw2ICs2MDksMTEgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEp
OwogICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07CiAgICAgfQorICAgIFN0cmluZ0p1bXBUYWJsZSYgYmFzZWxpbmVTdHJpbmdTd2l0
Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlc1t0YWJsZUluZGV4XTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29k
ZS0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0
IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShp
bnQgdGFibGVJbmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9CkBAIC03OTcsNiArODAwLDcgQEAgcHVibGljOgog
CiAgICAgYm9vbCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dl
clJlcXVlc3RzOyB9CiAgICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVy
biAmbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRl
YnVnZ2VyUmVxdWVzdHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2Rl
YnVnZ2VyUmVxdWVzdHMpOyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVt
QnJlYWtwb2ludHMpOwogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVh
a3BvaW50cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0
YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZE1ldGFkYXRhLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAs
NyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhCiAKIHN0cnVjdCBH
ZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggewogICAgIEFycmF5UHJvZmlsZSBhcnJheVBy
b2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5
UHJvZmlsZSk7IH0KIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRh
QXJyYXlMZW5ndGgpID09IDEyKTsKIApAQCAtODgsNiArODksNyBAQCB1bmlvbiBHZXRCeUlkTW9k
ZU1ldGFkYXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUgbW9kZTsKICAgICAgICAgdWludDhfdCBo
aXRDb3VudEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBtdXN0IGJlIHplcm8gd2hlbiB3ZSB1c2Ug
UHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9k
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhLCBtb2RlKTsg
fQogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0IGRlZmF1bHRNb2RlOwogICAgIEdldEJ5
SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YUFy
cmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzg1LDYgKzM4NSw4IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFj
Y2VzcygKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAorLy8gT09QUzogTWFrZSB0
aGlzIHN0dWZmIHdvcmsgd2l0aCBkYXRhIGljcyB0byBub3QgYXNzdW1lIGlubGluZSBhY2Nlc3Mu
CisKIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lu
bGluZUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFyZ2V0KQogewog
ICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9u
IDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NSw2ICsyODUsNyBAQCB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2Nr
LCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgog
ICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlWYWwpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKQEAgLTQzMCw2ICs0
MzEsMTA5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6c2UKICAgICBt
X2NhY2hlVHlwZSA9IG5ld0NhY2hlVHlwZTsKIH0KIAordm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8pCit7CisgICAgYWNjZXNzVHlwZSA9IHVubGlua2Vk
U3R1YkluZm8uYWNjZXNzVHlwZTsKKyAgICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8uc3RhcnQ7
IC8vIE9PUFM6IGRvIHdlIG5lZWQgYSBzdGFydCBmb3IgZGF0YSBJQ3M/CisgICAgZG9uZUxvY2F0
aW9uID0gdW5saW5rZWRTdHViSW5mby5kb25lTG9jYXRpb247CisgICAgc2xvd1BhdGhTdGFydExv
Y2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgY2Fs
bFNpdGVJbmRleCA9IENhbGxTaXRlSW5kZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4
KTsKKyAgICBjb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2Rl
SW5kZXgpOworCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpEZWxldGVCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRl
QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxC
eUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1p
emU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VvZjoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJ
ZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAgIG1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOiAKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBzd2l0Y2gg
KHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERp
cmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0
KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1
bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiBvcGVyYXRp
b25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5
VmFsOgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAg
ICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJ
bmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5v
blN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNT
dHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gcHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlW
YWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0
ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0
UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2
YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpD
aGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hl
Y2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8g
T09QUzogaGFuZGxlIGl0ZXJhdG9yX25leHQgdmFsdWUgaW4gdXNlZCByZWdpc3RlciBzZXQuCit9
CisKICNpZiBBU1NFUlRfRU5BQkxFRAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y2hlY2tDb25z
aXN0ZW5jeSgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDYgKzU2LDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRC
eVZhbCwKICAgICBQdXRCeUlkLAogICAgIFB1dEJ5VmFsLAorICAgIFB1dFByaXZhdGVOYW1lLAog
ICAgIEluQnlJZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtNzgsNiAr
NzksOCBAQCBlbnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CiAgICAgU3RyaW5nTGVuZ3Ro
CiB9OwogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKKwogY2xhc3MgU3RydWN0
dXJlU3R1YkluZm8gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZv
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTk4LDYgKzEwMSw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKKyAgICB2b2lk
IGluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvJik7CisKICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIENo
ZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYgaXQg
ZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLApAQCAtNDQ3LDYgKzQ1MiwxOCBAQCBpbmxpbmUg
YXV0byBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAg
IFB1dEtpbmQgcHV0S2luZDsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1
dEtpbmQ7CisgICAgRUNNQU1vZGUgZWNtYU1vZGU7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4OworICAgIC8vIE9PUFM6IERvIHdlIG5lZWQgc3RhcnQgZm9yIGRhdGEgSUNzPworICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsgLy8gVGhpcyBp
cyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNhY2hlcy4gb3Ig
dGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW5zdGFuY2VvZicgY2FjaGVzLgor
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xvd1BhdGhTdGFydExv
Y2F0aW9uOworfTsKKwogI2Vsc2UKIAogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
aAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw2ICsxNzUsNyBAQCBwdWJs
aWM6CiAKICAgICBjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25z
dGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBjb25z
dCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudElu
ZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29u
c3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3Jl
Zy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
KSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBAIC0y
MDcsNiArMjA4LDE0IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3Jp
cHRNb2RlKTsgfQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygp
IGNvbnN0OworICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5k
ZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIoKTsg
fQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbikKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gaW5z
dHJ1Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9u
c0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVn
aW4gJiYgaW5zdHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4gaW5z
dHJ1Y3Rpb24gLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CiAKICAgICB1bnNpZ25lZCBudW1D
YWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogICAgIHVu
c2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KQEAgLTQxMCw2ICs0
MTksOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4g
bV9pbnN0cnVjdGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcz4gbV9saXZlbmVzczsKIAorICAgIC8vIE9PUFM6IGJpbmQgYSBiZXR0ZXIgcGxhY2UgdG8g
c3RvcmUgdGhpcyBzdHVmZj8KKyAgICBWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPiBtX2JpbmFy
eUFyaXRoUHJvZmlsZXM7CisgICAgVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJp
dGhQcm9maWxlczsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIERGRzo6RXhpdFByb2ZpbGUg
bV9leGl0UHJvZmlsZTsKQEAgLTQ1NSw2ICs0NjcsMjggQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAg
IH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zm
c2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQob2Zmc2V0KTsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUoKQorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gbV9iaW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAg
ICAgbV9iaW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5hcnlBcml0aFByb2ZpbGUoKSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkVW5hcnlBcml0
aFByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV91bmFyeUFyaXRo
UHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX3VuYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoQmlu
YXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0
dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1
bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxl
c1tpXTsgfQogCiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFz
aE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkTWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOSArMTAxLDE4IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBzX29mZnNldDE2VGFibGVTaXplOwogICAgIH0KIAorCiAg
ICAgdXNpbmcgT2Zmc2V0MzIgPSB1aW50MzJfdDsKICAgICB1c2luZyBPZmZzZXQxNiA9IHVpbnQx
Nl90OwogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZT4KKyAgICB1aW50cHRyX3Qgb2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYgb3Bjb2RlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1faXNGaW5hbGl6ZWQpOworICAgICAgICB1aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQg
PSBtX2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bjb2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRU
YWJsZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07CisgICAgICAgIHJldHVybiBiYXNlVHlwZU9mZnNl
dCArIHNpemVvZihPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7CisgICAg
fQorCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzX29mZnNldFRhYmxlRW50cmllcyA9
IE5VTUJFUl9PRl9CWVRFQ09ERV9XSVRIX01FVEFEQVRBICsgMTsgLy8gb25lIGV4dHJhIGVudHJ5
IGZvciB0aGUgImVuZCIgb2Zmc2V0OwogCiAgICAgLy8gTm90IHRvIGJyZWFrIGFsaWdubWVudCBv
ZiAzMmJpdCBvZmZzZXQgdGFibGUsIHdlIHJvdW5kIHVwIHNpemUgd2l0aCBzaXplb2YoT2Zmc2V0
MzIpLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2Zp
bGUuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBAIHRlbXBsYXRl
PHVuc2lnbmVkIG51bWJlck9mQnVja2V0c0FyZ3VtZW4KIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNl
IHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mQnVja2V0cyA9IG51bWJl
ck9mQnVja2V0c0FyZ3VtZW50OwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVy
T2ZTcGVjRmFpbEJ1Y2tldHMgPSAxOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYnVj
a2V0SW5kZXhNYXNrID0gbnVtYmVyT2ZCdWNrZXRzIC0gMTsKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRzICsgbnVtYmVy
T2ZTcGVjRmFpbEJ1Y2tldHM7CiAgICAgCiAgICAgVmFsdWVQcm9maWxlQmFzZSgpCkBAIC0xMzQs
NyArMTMzLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICAKICAgICAgICAg
cmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAgICBFbmNvZGVkSlNWYWx1ZSBt
X2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAgU3BlY3VsYXRlZFR5cGUgbV9w
cmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE1Niw2ICsxNTUsNyBAQCBzdHJ1Y3QgVmFsdWVQ
cm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGUgOiBwdWJs
aWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPiB7CiAgICAgVmFsdWVQcm9m
aWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+KCkgeyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQogfTsKIAogc3RydWN0IFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTk4LDcgKzE1OTgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFVuYXJ5
CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wTm90Pihkc3QsIHNyYyk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNy
YywgdHlwZSk7CisgICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0eXBlLCBt
X2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2Ugb3BfYml0bm90OgogICAgICAgICBlbWl0VW5hcnlPcDxPcEJpdG5vdD4oZHN0LCBzcmMp
OwpAQCAtMTY5NiwxMyArMTY5NiwxMyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFR5cGVPCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5jKFJlZ2lz
dGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNEc3QpOworICAgIE9w
SW5jOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxl
KCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0RGVjKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcERlYzo6ZW1pdCh0aGlz
LCBzcmNEc3QpOworICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFk
ZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjgyLDcgKzY4
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmVnaXN0ZXJJRCo+CiAgICAgICAg
IGVtaXRCaW5hcnlPcChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlZ2lzdGVy
SUQqIHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcykKICAgICAgICAgewotICAgICAgICAgICAgQmlu
YXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcyk7CisgICAgICAgICAgICBC
aW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzLCBtX2NvZGVCbG9jay0+
YWRkQmluYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICAgICAgcmV0dXJuIGRzdDsKICAgICAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4OSw3ICs4ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2Rl
CiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWls
KSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0
LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJ
Qzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZm
bGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciht
X2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTYsNyArODk2LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2Fs
bExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlk
R1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dD
YXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQ
UiwgWyZdIHsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRh
KTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEp
LnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTg1LDcgKzM5ODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0
ZU5hCiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMo
KTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJs
b2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6
OlB1dEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklU
VHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0
ZU5hbWUsIHVzZWRSZWdpc3RlcnMsCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdz
LCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNTeW1ib2wgPSB0cnVlOwogCkBAIC0xNDc0Nyw3ICsxNDc0Nyw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBz
Y29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUu
Z3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNr
ZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCksIGNhbGxTaXRlSW5k
ZXgpOworICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJl
ZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Y29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzE3LDcgKzQzMTcsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkZUTEpJVCkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAg
ICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVh
dGUoCi0gICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5v
ZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisg
ICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1h
bnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAg
ICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BS
KSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3It
PnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwpAQCAtMTAzNTUsNyArMTAzNTUs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZv
ID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwg
R1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxM
aW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxp
ZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAg
ICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGpp
dCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAg
IENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OwogICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA2OTgsNyArMTA2OTgsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlz
VGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8t
PmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAg
c2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5m
bzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWls
Q2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDk3OSw3ICsxMDk3OSw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAg
ICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwg
SW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
cHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24g
MjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgko
d29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDIyIEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVm
IHN0cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252
ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVm
aXgsIGZpZWxkcywgZ2VuZXJhdGVPZmZzZXRPZikKICAgICAgICAgICAgIGZpZWxkcy5tYXAgZG8g
fGZpZWxkLCB0eXBlfAogICAgICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAotICAg
ICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZp
eCArICcgICAgJywgdHlwZSl9XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAgIiN7
cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUsIGZh
bHNlKX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307IgorICAgICAgICAg
ICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9ICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgorICAgICAgICAg
ICAgICAgICAgICBpZiBnZW5lcmF0ZU9mZnNldE9mCisgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gcmVzdWx0ICsgIlxuIiArICJzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5h
bWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkgeyByZXR1cm4gT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdAogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5k
LmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxk
cygiICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIg
ICAgICAgICIsIEBmaWVsZHMsIHRydWUpCiAKICAgICAgICAgaW5pdHMgPSBuaWwKICAgICAgICAg
aWYgQGluaXRpYWxpemVycyAmJiAobm90IEBpbml0aWFsaXplcnMuZW1wdHk/KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24g
MjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OTgsOCArNjk4LDEzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJz
OjpyZXN0b3JlQ2FsbGVlU2F2ZXMKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFs
Q2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyog
aW5mbykKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsK
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOwor
ICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOwor
fQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0ds
b2JhbE9iamVjdChWTSYgdm0sIENhbGxMaW5rSW5mbyogaW5mbykKK3sKKyAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2Fs
bCgpOwogICAgIGFkZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
CiAgICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGw8SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzE4LDYgKzE3MTgsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1
YWxDYWxsKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVt
aXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8q
KTsKICAgICAKICAgICB2b2lkIG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAgIHZvaWQg
cmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2
ICs0Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuUHJvbG8KICAgICBz
dG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFk
b3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12b2lkIENDYWxsSGVscGVyczo6bG9n
U2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3Mg
dGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNU
X09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOwotICAgIHN0b3JlVmFs
dWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBz
Y29wZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2Rl
QmxvY2spKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkp
LCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgY2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNo
YWRvd0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2Ny
YXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAgICBTaGFkb3dDaGlja2VuKiBz
aGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyAr
ODQwLDE4IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZv
bGF0aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0
b3Agb2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lk
IGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJS
ZWcgc2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFp
bFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVn
IHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
R1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwg
Q29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKKyAg
ICB7CisgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJh
bWUpKSk7CisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFj
a2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOworICAgICAgICBzdG9yZVZhbHVlKHRo
aXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNr
ZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOworICAgICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNj
b3BlKSkpOworICAgICAgICBzdG9yZVB0cihjb2RlQmxvY2ssIEFkZHJlc3Moc2hhZG93UGFja2V0
LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7Cisg
ICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNh
bGxTaXRlSW5kZXgpKSk7CisgICAgfQorCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIg
dG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZv
aWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQ
UlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBAIEpJVDo6
SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFBy
b2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOwogfQog
CiBKSVQ6On5KSVQoKQpAQCAtOTAsOCArOTEsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1p
emF0aW9uQ2hlY2soKQogICAgICAgICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1p
emU7Ci0gICAgCi0gICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRy
dXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSks
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIo
KSkpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDApOworICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVz
dGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBB
ZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsK
ICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRC
YXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC0xMTMsNyArMTE0LDcgQEAgdm9pZCBK
SVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0
ZShHUFJSZWcgcG9pbnRlclRvU2V0KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9p
bnQoR1BSUmVnIHBvaW50ZXJUb1NldCkKIHsKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVx
dWFsLCBBZGRyZXNzKHBvaW50ZXJUb1NldCwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CkBAIC0xMjksNyArMTMwLDcgQEAg
dm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5B
QkxFRCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwg
cmVnVDAsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2su
bGluayh0aGlzKTsKQEAgLTY3NiwxNyArNjc3LDE2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAKIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5n
KEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBERkc6OkNhcGFiaWxpdHlMZXZl
bCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICAvLyBPT1BTOiBN
YXliZSB0aGlzIHNob3VsZCBiZSBkb25lIG9uIHVubGlua2VkIGNvZGUgYmxvY2s/CisgICAgREZH
OjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5
TGV2ZWwoKTsKICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBp
bGU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9w
dGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcg
PSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAg
Y2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQg
PSB0cnVlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAg
ICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKQEAgLTcwNywxMiArNzA3LDExIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhv
dXRGaW5hbGl6aW4KICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2Nr
LT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmIChtX2Nv
ZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0g
Rml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN3aXRjaEp1bXBUYWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZV
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRW
ZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJl
ck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKKyAg
ICAgICAgICAgIG1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJs
ZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMo
KSk7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5u
dW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAKICAgICBp
ZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0
ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIo
KSkpKQpAQCAtNzQ2LDcgKzc0NSw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRG
aW5hbGl6aW4KIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJhbWVU
b3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVkIG1h
eEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZy
YW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlzdCBz
dGFja092ZXJmbG93OwpAQCAtNzYyLDcgKzc2MSwxMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExp
bmtXaXRob3V0RmluYWxpemluCiAKICAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0g
RnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAg
ICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpICYmICghbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX2NvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpID4gMSkpIHsKKyAgICAgICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZy
YW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDIpOworICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1
ZVByb2ZpbGVzKCkgKyBGaXhlZFZlY3Rvcjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAv
LyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1t
eSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25z
aXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZh
bHVlLgpAQCAtNzc4LDYgKzc4MCw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRG
aW5hbGl6aW4KICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rl
ciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1
bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSwg
cmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdzLCBBZGRy
ZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CkBAIC04NTgsOCArODYxLDggQEAgdm9pZCBKSVQ6Omxpbmso
KQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAgICAgIGNhc2UgU3dpdGNoUmVj
b3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXI6IHsK
LSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAg
ICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlW3RhYmxlSW5kZXhdOwogICAgICAgICAg
ICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3
aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNl
dF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2VkVGFibGUu
bV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQg
b2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEsOCArODc0
LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTd2l0Y2hS
ZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlEZWZh
dWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0
ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yIChh
dXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMoKSkgewog
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNoT2Zmc2V0
OwpAQCAtOTE5LDEwICs5MjIsOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOwogCiAgICAgZm9y
IChhdXRvJiBjb21waWxhdGlvbkluZm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKLSAgICAg
ICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87Ci0g
ICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQYXRoU3RhcnQp
LAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihj
b21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJ
bmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAg
ICAgaW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pOwogICAgIH0KIAogICAgIHsKQEAg
LTk1Myw3ICs5NTQsMTMgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAiQmFzZWxpbmUgSklU
IGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29kZSA9IGFk
b3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgQmFzZWxpbmVK
SVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2spKTsKKworICAgIG1faml0Q29kZS0+bV91bmxp
bmtlZENhbGxzID0gV1RGTW92ZShtX3VubGlua2VkQ2FsbHMpOworICAgIG1faml0Q29kZS0+bV9l
dmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7CisgICAgbV9q
aXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0gV1RGTW92ZShtX3VubGlua2VkU3R1YkluZm9z
KTsKKyAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zd2l0Y2hK
dW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdU
Rk1vdmUobV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6
dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQg
WyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3Rh
cnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRh
Z2dlZFB0cigpKTsKQEAgLTk2OCw2ICs5NzUsOCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZp
bmFsaXplT25NYWluVGhyCiAKICAgICBtX2xpbmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6
YXRpb25UYXNrcygpOwogCisgICAgbV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNzKTsK
KwogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+
bV9sb2NrKTsKICAgICAgICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KGxvY2tlciwgQ29kZUJs
b2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5rKTsKQEAgLTEwNDIsMTQgKzEwNTEsMTQgQEAgdm9p
ZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwogICAgICAgICBtX3ZtLT50eXBl
UHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQcmVwYXJpbmcgZm9yIEpJ
VCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3Vu
dEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNv
dW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSA9PSBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7CiAKICAgICByZXR1cm4g
cm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJPZmZzZXQoY29kZUJsb2NrLT5u
dW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3Rl
cnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sq
IGNvZGVCbG9jaykKIHsKICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jaykgLSAxKS5vZmZzZXQoKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsMzQgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKKyAgICBjbGFzcyBKSVRDb25zdGFudFBvb2wgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgdXNpbmcgQ29uc3RhbnQgPSB1bnNpZ25lZDsKKworICAgICAgICBlbnVtIGNsYXNzIFR5
cGUgOiB1aW50OF90IHsKKyAgICAgICAgICAgIEdsb2JhbE9iamVjdCwKKyAgICAgICAgICAgIENh
bGxMaW5rSW5mbywKKyAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvLAorICAgICAgICAgICAg
RnVuY3Rpb25EZWNsLAorICAgICAgICAgICAgRnVuY3Rpb25FeHByLAorICAgICAgICB9OworCisg
ICAgICAgIHN0cnVjdCBWYWx1ZSB7CisgICAgICAgICAgICBUeXBlIHR5cGU7CisgICAgICAgICAg
ICBQYWNrZWRQdHI8dm9pZCo+IHBheWxvYWQ7CisgICAgICAgIH07CisKKyAgICAgICAgQ29uc3Rh
bnQgYWRkKFR5cGUgdHlwZSwgUGFja2VkUHRyPHZvaWQqPiBwYXlsb2FkID0gbnVsbHB0cikKKyAg
ICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudHMuc2l6ZSgp
OworICAgICAgICAgICAgbV9jb25zdGFudHMuYXBwZW5kKFZhbHVlIHsgdHlwZSwgcGF5bG9hZCB9
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIFZlY3RvcjxWYWx1ZT4gbV9jb25zdGFudHM7CisgICAgfTsKKwogICAgIGVudW0g
T3Bjb2RlSUQgOiB1bnNpZ25lZDsKIAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7
CkBAIC0xNDksOSArMTc3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVj
dCBDYWxsQ29tcGlsYXRpb25JbmZvIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNs
b3dQYXRoU3RhcnQ7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247
Ci0gICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOworICAgICAgICBVbmxpbmtlZENh
bGxMaW5rSW5mbyogdW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQ7CiAgICAgfTsKIAogICAgIHZvaWQgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwpAQCAtMTg4LDggKzIxNiw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRl
Y29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKICAgICAgICAgfQogCi0gICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7Ci0gICAg
ICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOworICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2Nr
Kik7CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29k
ZUJsb2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0
cmluZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBpbGVUaW1lKCk7CkBAIC0yMjMsNiArMjUxLDI4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShj
b25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShj
b25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNv
bnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBz
dG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0
KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQg
c3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBt
YXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zm
c2V0LCBHUFJSZWcpOworCisgICAgICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVkIGNvbnN0
YW50SW5kZXgsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcp
OworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQ
UlJlZyk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBUb0hhbmRsZXIp
CiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9I
YW5kbGVyKTsKQEAgLTI1OCwxNiArMzA4LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBz
dGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFy
YXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAg
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQg
IT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGls
ZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2Fs
bExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2Nh
bGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAg
ICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4g
Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2
b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgotICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyos
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENh
bGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAg
ICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yOTEsMTAgKzM0MSwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHBy
b2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAg
ICAvLyBzY3JhdGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1l
dGFkYXRhJiwgR1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAg
ICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsK
KyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNW
YWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25z
dCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRh
dGEmLCBKU1ZhbHVlUmVncyk7CkBAIC0zMDcsNiArMzU3LDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQg
Y2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKICAgICAgICAg
dm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBS
ZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwg
UmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBC
eXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0
Y2hHUFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9k
ZSBlY21hTW9kZShPcCk7CkBAIC01OTIsNyArNjQ2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjI2
LDcgKzY3OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZp
cnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0
ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1p
dEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNl
LCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IElu
c3RydWN0aW9uKik7CkBAIC02NDUsNyArNjk4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYK
ICAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVp
bnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2lu
dFNldCopOwotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0
KTsKKyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVy
VG9TZXQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9p
ZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lk
IGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpAQCAtNjU0LDYgKzcw
Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgICAgICBi
b29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29u
c3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29u
c3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFu
dENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY5NSwyNiArNzQ5LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZh
cik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRP
UihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3Io
Vk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0K
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9w
R2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0K
LSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2Nv
cGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1v
ZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4g
dXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3
ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAgICAgICAg
ICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVU
eXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JFU09MVkVf
U0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlw
ZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJF
X1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9H
RU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5
cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3Rk
OjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CiAKICAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0Zh
bHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CkBAIC05MTgsMTEg
Kzk1NCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAg
IGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAg
ICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1p
emVkT3JJbmxpbmVkOyB9CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0
dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9w
dGltaXplZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRP
cklubGluZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2
YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAg
ICAvLyBpbiB3aGljaCBjYXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wg
c2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC05MzAsMTMgKzk2NCw2
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVU
aW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7Ci0gICAg
ICAgIAotICAgICAgICAvLyBJZiB5b3UgbmVlZCB0byBjaGVjayBhIHZhbHVlIGZyb20gdGhlIG1l
dGFkYXRhIHRhYmxlIGFuZCB5b3UgbmVlZCBpdCB0bwotICAgICAgICAvLyBiZSBjb25zaXN0ZW50
IGFjcm9zcyB0aGUgZmFzdCBhbmQgc2xvdyBwYXRoLCB0aGVuIHlvdSB3YW50IHRvIHVzZSB0aGlz
LgotICAgICAgICAvLyBJdCB3aWxsIGdpdmUgdGhlIHNsb3cgcGF0aCB0aGUgc2FtZSB2YWx1ZSBy
ZWFkIGJ5IHRoZSBmYXN0IHBhdGguCi0gICAgICAgIEdldFB1dEluZm8gY29waWVkR2V0UHV0SW5m
byhPcFB1dFRvU2NvcGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLSAg
ICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAK
ICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKQEAgLTk2Myw5ICs5OTAsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nh
c2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCi0gICAgICAg
IEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwotICAgICAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQcm9m
aWxlczsKLQogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVt
cExpc3QgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7CiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTk5LDExICsxMDIzLDIyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dl
bmVyYXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAog
ICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJvb2wgbV9jYW5CZU9wdGlt
aXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAg
ICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgICAg
IFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgICAgIE1hdGhJQ0hvbGRlciBt
X21hdGhJQ3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1faml0Q29kZTsKKwor
ICAgICAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5rZWRDYWxsTGlua0lu
Zm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2Fs
bExpbmtJbmZvczsKKyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5s
aW5rZWRTdHViSW5mb3M7CisgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9z
d2l0Y2hKdW1wVGFibGVzOworICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBHUFJSZWcgbV9tZXRhZGF0YUdQUjsK
KyAgICAgICAgR1BSUmVnIG1fY29uc3RhbnRzR1BSOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3Bw
CShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRD
aGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
YXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3Vt
ZW50R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAg
ICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25a
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0zMjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1Qx
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwg
cmVnVDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGlu
dmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QxKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzc1LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjEsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJs
ZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9j
b2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmls
ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJvZmlsZUluZGV4KTsKKyAg
ICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9maWxl
KTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVn
YXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBv
cGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAg
ICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAg
LTg5OSw4ICs5MDMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0
CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhh
cml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1f
dW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21h
dGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRo
SUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9w
QWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk0OSwxMSBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVD
b2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRl
KTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYg
c2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2Ny
YXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBh
ZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEw
MTUsMTAgKzEwMjAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJ
QwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmls
ZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmls
ZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2Zp
bGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChu
b25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2Ny
YXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNs
b3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwx
MyArMTA2MSwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAj
ZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFy
aXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0
aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJl
aW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJl
aW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3Ms
IGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVy
cHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRS
ZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJM
RShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEy
MCwxMyArMTEyNywxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElD
CiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0
aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lz
ZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywg
cmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNp
ZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsK
QEAgLTExNjYsNyArMTE3NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVj
dGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsK
ICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAm
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2Nr
LT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tX3By
b2ZpbGVJbmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5t
X29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQo
Ynl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjE5LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRN
dWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2Nr
LT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKSk7Cisg
ICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7
CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElD
KTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIy
Nyw4ICsxMjM1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdAog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJp
dGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3Vu
bGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFN1Yj4oKSk7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklD
KGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVT
dWIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNw
cAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNv
bXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCByZWdUMSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFk
ZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxF
dmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTks
NyArMjU5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAg
ICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgq
bV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0
UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7
CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRp
b24gPSBsYWJlbCgpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpA
QCAtMzQxLDcgKzM0MSw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3Qg
SW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAK
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzU0LDcgKzM1Myw3IEBA
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4
MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0K
IApAQCAtNTMsNyArNTMsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAh
PSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdz
CiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNv
ZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CkBAIC03OCw3ICs3OCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29k
ZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3Zh
cmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6
Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklU
Ojpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5m
bykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewogICAgIFZpcnR1YWxSZWdp
c3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC0xMDYsOSArMTA2LDEwIEBA
IEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKIAogICAgIC8vIFByb2Zp
bGUgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZv
LT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7Ci0gICAg
SnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3Rv
cmUzMihyZWdUMiwgaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
KSk7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygpKSwgcmVnVDMpOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5j
aDMyKEFib3ZlLCByZWdUMywgcmVnVDIpOworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVn
VDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
KSk7CiAgICAgbm90QmlnZ2VzdC5saW5rKHRoaXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUg
J3RoaXMnLgpAQCAtMTI3LDE2ICsxMjgsMTYgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChj
b25zdCBPcCYpCiB0ZW1wbGF0ZTw+CiBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9w
Q2FsbEV2YWwmIGJ5dGVjb2RlKQogewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19j
YXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Mo
cmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNh
bGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJG
cmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3Rh
Y2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5t
X2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
YWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwotCi0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q2FsbEV2YWwsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQ
dXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIApAQCAtMTQ4LDcgKzE0OSw3IEBAIHZvaWQgSklUOjpj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwot
ICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2
YWxDYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGlu
Zm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdp
c3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE1Nyw0NiBAQCB2b2lk
IEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAg
ICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3Rlcikg
KiBDYWxsRnJhbWVTbG90OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdU
MCk7Ci0gICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVt
aXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVt
aXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1i
b29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWdu
ZWQpCi17Citib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxs
TGlua0luZm8qLCB1bnNpZ25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkgewogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChj
b25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWls
Q2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25z
dGFudCkKIHsKLSAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVm
ZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRh
Lm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1
ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZs
ZURhdGE+IHNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsK
KyAgICBzaHVmZmxlRGF0YS0+bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBz
aHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rl
cjsKKyAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2
IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVm
ZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5h
cmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBieXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0K
KyAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVy
eTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAg
ICAgICBEYXRhRm9ybWF0SlMpOwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAg
ICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVm
ZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8t
PnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxs
ZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVm
ZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKIAotICAgIEp1
bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdU
MCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENh
bGxGcmFtZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7
CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVt
cExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0
aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigq
dGhpcywgKnNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBh
ZGRTbG93Q2FzZShzbG93UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7
CisgICAgaW5mby0+ZnJhbWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAg
ICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApA
QCAtMjE4LDMyICsyMjIsNDAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgog
ICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4u
CiAgICAgKi8KLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNv
ZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2Fs
bExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVw
RnJhbWUoYnl0ZWNvZGUsIGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8g
PSBudWxscHRyOworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0g
VUlOVF9NQVg7CisgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBV
bmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG1fdW5saW5rZWRDYWxscy5hZGQoKTsKKyAgICAg
ICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgaW5mby0+
Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsKKworICAgICAg
ICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpDYWxsTGlua0luZm8sIGluZm8pOworCisgICAgICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlv
bkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOworICAgICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnVubGlua2VkQ2FsbExpbmtJbmZvID0g
aW5mbzsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5j
YWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFudDsKKworICAgIH0KKyAgICBjb21waWxl
U2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAogICAgIC8vIFNQIGhvbGRzIG5l
d0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50
IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2NrLT5ieXRl
Y29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxs
U2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIo
VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgogICAgIHN0b3Jl
NjQocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpKTsKIAogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9
PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6
Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
LmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChjb21w
aWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBpZiAo
Y29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0Nv
bnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFu
dCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0
byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJl
Z1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRvIHNs
b3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHJlZ1QwLCByZWdUMiwgWyZdIHsKKyAgICAgICAgICAgIC8vIE9PUFMKICAgICAgICAgICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNs
b3cocmVnVDIpOwogICAgICAgICB9KTsKQEAgLTI1MywxMyArMjY1LDEzIEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVn
VDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0g
Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAg
ICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRo
cyk7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVM
b2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5
dGVjb2RlKTsKQEAgLTI3MywyMCArMjg1LDIyIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJl
bCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50
LCByZWdUMik7CiAKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cykKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cykgeworICAgICAgICAvLyBPT1BTCiAgICAgICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKKyAgICB9CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlz
KTsKKyAgICBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgqbV92bSwgKnRoaXMsIHJl
Z1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFp
bENhbGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKQEAgLTM5NSwxNyArNDA5LDMwIEBAIHZvaWQgSklU
OjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KIAogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKICAgICAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgbW92ZShyZWdUMCwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+
aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNz
VHlwZTo6R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CkBA
IC00MTYsMTAgKzQ0Myw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNv
bnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9y
Q2hlY2twb2ludChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0g
ICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsK
ICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyYXRvckdQUikpOwogICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0b3JHUFIpKTsKQEAgLTQz
MiwxOSArNDU3LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMK
ICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBH
UFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyYXRvckdQUiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCku
cmF3Qml0cygpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgbW92ZShpdGVyYXRv
ckdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIAogICAgIGF1dG8g
ZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JS
ZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsK
IH0KQEAgLTQ3NSw0NSArNDk4LDY3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW4KICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIC8vIGNhbGwgcmVz
dWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAgICBHUFJSZWcgdmFs
dWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwotICAgIEdQ
UlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3aWxsIGdldCB0cmFz
aGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2YWx1ZUdQUiwgaXRl
clJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2Fs
bFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0g
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOwor
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgICAg
ICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAg
ICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAg
ICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3Vs
dEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAg
ICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BS
IH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9u
ZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAg
ICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgICAgICBHUFJSZWcgc2Ny
YXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BS
LCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBz
Y3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEg
PSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAg
ICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIo
KTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5
KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOwor
ICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNW
YWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxHUFIpOwogCisgICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHQ7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnBy
b3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCByZWdUNCwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFs
dWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQ
UiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJl
Z3MgeyB2YWx1ZUdQUiB9KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlc3VsdEdQUik7CiAKICAgICAgICAgaXRlcmF0
aW9uRG9uZS5saW5rKHRoaXMpOwogICAgIH0KQEAgLTUyNyw1OSArNTcyLDU1IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCisgICAg
Y29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6c2NyYXRjaDsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
dGVyYXRvck5leHQ+KCk7CiAgICAgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcg
PSBieXRlY29kZS5tX2RvbmU7Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7
CiAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAgICAgSnVtcExpc3Qgbm90
T2JqZWN0OwotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVz
dWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJD
YWxsUmVzdWx0R1BSKSk7CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0o
KS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAgICAgCiAgICAgICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAgIG5vdE9iamVjdC5hcHBl
bmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOwotCi0gICAgICAgIENhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
IHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BS
MCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3Vs
dEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihp
ZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVj
dChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZG9uZVZSZWcsIHJlZ1QxKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCByZWdUMCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFyZ3Vt
ZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkb25lVlJlZywgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKworICAg
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CisKKyAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIGRvbmVH
UFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGl0
ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50
KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhy
b3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogICAgIH0KIAogICAg
IHsgICAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgICAgIEdQUlJlZyBpdGVy
UmVzdWx0R1BSID0gcmVnVDA7CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50ID0g
dm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCk7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJl
c3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCB2YWx1ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJh
d0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKICAgICB9Ci0KIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2
aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE1OSwxMCArMTU5LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBi
b29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgeworICAgICAgICBpZiAoSklUQ29k
ZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpIC8vIE9PUFMKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURh
dGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApAQCAtMjQ4LDYgKzI0OCw0MSBAQCBwcm90
ZWN0ZWQ6CiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBtX3JlZjsKIH07CiAKK2NsYXNzIE1h
dGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVy
JiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fYWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2FkZElD
cyk7CisgICAgICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhlci5tX211bElDcyk7CisgICAgICAg
IG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAgICAgIG1fc3ViSUNzID0g
V1RGTW92ZShvdGhlci5tX3N1YklDcyk7CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZEpJVEFk
ZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX2FkZElDcy5h
ZGQoYXJpdGhQcm9maWxlKTsgfQorICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmls
ZSk7IH0KKyAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisgICAgSklU
TmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0
dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisKKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJ
VEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBh
ZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJh
dG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUTXVsSUMqIGFkZE1h
dGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHBy
b2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dl
bmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+CisgICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisKK3ByaXZhdGU6CisgICAg
QmFnPEpJVEFkZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAg
IEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKK307
CisKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKERpcmVjdEpJVENvZGUp
OwogY2xhc3MgRGlyZWN0SklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgewogICAg
IFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihEaXJl
Y3RKSVRDb2RlKTsKQEAgLTI2Niw2ICszMDEsMTkgQEAgcHJpdmF0ZToKICAgICBDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IG1fd2l0aEFyaXR5Q2hlY2s7CiB9OwogCitjbGFzcyBCYXNlbGluZUpJVENv
ZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6
CisgICAgQmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKKyAgICAgICAgOiBEaXJlY3RKSVRDb2Rl
KFdURk1vdmUoY29kZSksIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAg
ICB7IH0KKworICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOwor
ICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7IC8vIE9PUFM6IG1ha2Ug
c3VyZSB3ZSB2aXNpdCB0aGVzZSBzb21laG93LiBPciBhc3NlcnQgd2UgZG9uJ3QgaGF2ZSB0bywg
c2luY2UgdGhleSdyZSB2aXJ0dWFsIGNhbGxzLgorICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBU
YWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJs
ZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworfTsKKwogY2xhc3MgTmF0aXZlSklUQ29kZSA6
IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgewogcHVibGljOgogICAgIE5hdGl2ZUpJVENvZGUo
SklUVHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5l
cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgor
I2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1
YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlw
ZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0g
ICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAg
ICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/
IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJh
Z2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFk
ZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAg
ICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5m
by0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQg
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQ
YXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAg
ICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5
cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Zmlu
YWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgu
bG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAor
dm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKEpJVCYgaml0LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvLCBHUFJSZWcg
c3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworICAgIFJFTEVBU0Vf
QVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKyAgICBqaXQubG9hZENvbnN0
YW50KHN0dWJJbmZvLCBzdHJ1Y3R1cmVTdHViSW5mb0dQUik7CisgICAgaml0LmNhbGwoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZD
b2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9kb25lID0gaml0LmxhYmVs
KCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3Qg
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdz
IHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODE3MTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFz
cyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVC
bG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNz
IEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCitz
dHJ1Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeUlkUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVFbnVtZXJhdG9y
R2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQ
UkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5m
bzo6cmVnVDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9j
ayBhbmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KKyAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7
CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJ
bmZvOjphcmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG8gPSBH
UFJJbmZvOjphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVjdCBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUklu
Zm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307
CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKK307CisKK3N0cnVj
dCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1
ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9
IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1
Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xhc3MgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yKCkgeyB9CkBAIC02MiwxNSArMTY0LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXpl
KAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNs
b3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKEpJVCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9Db25zdGFu
dCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogbV91bmxpbmtlZFN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7IHN0ZDo6bnVtZXJpY19s
aW1pdHM8SklUQ29uc3RhbnRQb29sOjpDb25zdGFudD46Om1heCgpIH07CisKIHByb3RlY3RlZDoK
LSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAg
IFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwot
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOworICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOyAvLyBPT1BTOiBtYWtlIHJlcG9ydENhbGwgcGFzcyBz
b21ldGhpbmcgaW4gd2UgY2FuIHVzZSBmb3IgdGhlIG5vbi1DVEkgdGh1bmtzIGJ1aWxkcy4gCiB9
OwogCiBjbGFzcyBKSVRCeUlkR2VuZXJhdG9yIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yIHsKQEAgLTEzMiw4ICsyMzksOCBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdlbmVyYXRv
cigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVC
bG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNl
LAotICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcg
c2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBl
LCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNW
YWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFN
b2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3Nl
bWJsZXImKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFs
UmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0
YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7Cisg
ICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNy
YykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50
MzIoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJl
Z2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1l
Q29uc3RhbnQpIHsKKyAgICAgICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBh
bGwgbGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAK
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4g
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBt
X3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBW
aXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xODUsNyArMjEwLDcgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeAogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25D
ZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklU
OjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3Bv
aW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7
CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29k
ZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3Bv
aW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZCht
X2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lk
IEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBk
dXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBp
cyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29k
ZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAg
ICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9
IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMx
OCwzNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXND
ZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVl
KQotewotICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0gICAgLy8gV2UncmUg
aW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVz
dCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3Rv
cmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQotICAgIEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZh
bHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAgIHN0b3JlMzIodmFs
dWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwotICAgIHN0b3Jl
MzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgotfQor
ICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihz
cmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0
cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVu
Z3RoKCkgPT0gMTsKK30KKworLy8gT09QUworLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVl
KQorLy97CisvLyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKKy8vCisvLyAgICAv
LyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdl
IGNhbiBqdXN0IGRvIGEgZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lmIFVTRShKU1ZBTFVF
NjQpCisvLyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsK
Ky8vI2Vsc2UKKy8vICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3
aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMp
OworLy8gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMu
cGF5bG9hZCk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNC
aXRzLnRhZyk7CisvLyNlbmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5l
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9w
cm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMs
MjQgKzM1MywyNSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAK
IGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUo
Li4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2
YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwg
bV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKyAgICBwdHJkaWZmX3Qgb2Zm
c2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgp
OworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgb2Zmc2V0
KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVn
KQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVn
cyhyZXN1bHRSZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97Cisv
LyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVz
dWx0UmVnKSk7CisvL30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcg
cmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcg
cmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFs
dWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKQEAgLTM2MCw2ICszOTEsMjEg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlVwogICAgIH0KIH0KIAor
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNl
dE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQ
UikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CisgICAgICAgIGxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwg
Ynl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0
ZXJJRCBzY3JhdGNoR1BSKQoreworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChi
eXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJy
YXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2VsbEdQUiwgc2NyYXRj
aEdQUik7Cit9CisKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFu
dEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5hc0ludDMyKCk7CkBAIC0zODAsNyArNDI2LDcgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYgKHJlZy5p
c0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50
UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigm
aW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxvYWREb3VibGUo
YWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTQyLDcgQEAgaW5saW5lIHZvaWQg
SklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9j
b2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykp
IHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTUyLDcgQEAgaW5saW5lIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykK
IHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFp
c0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0LDExICs1NjAs
NiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAgICAgfQogfQog
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0
T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsNyArNTg1LDggQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5k
ZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xk
IHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAg
aWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOworICAgICAgICAvLyBPT1BTOiBoYW5kbGUgbGluayB0aW1l
IGNvbnN0YW50cyBoZXJlLi4uCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CiAgICAgICAg
IGVsc2UKQEAgLTU2NiwxMSArNjA4LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdl
dFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0Mik7CiB9CiAK
LUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdp
c3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkK
IHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01OTUsNyArNjMyLDcg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogCiBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcs
IFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25D
ZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY3NCw3IEBAIEFMV0FZ
U19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBpZiAodGFyZ2V0KQog
ICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3V0T2ZMaW5l
SnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgR2V0UHV0SW5mbyBK
SVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQotewotICAgIHVuc2ln
bmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hNYXAgZG9lc24ndCBs
aWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRHZXRQdXRJbmZvcy5m
aW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0SW5mb3MuZW5kKCkp
Ci0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgR2V0UHV0
SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fZ2V0UHV0
SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1dEluZm8ub3BlcmFu
ZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQmlu
YXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6OmNvcGllZEFyaXRo
UHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBrZXkgPSAoc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAzMiB8IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBt
X2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFs
dWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGllZEFyaXRoUHJvZmls
ZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQcm9maWxlOworICAg
IHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0
aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiArNjk1LDYxIEBAIEFM
V0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICByZXR1cm4gRUNNQU1v
ZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJl
c3MobV9tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDMyRnJv
bU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVn
IHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBv
ZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDgoQWRkcmVz
cyhtX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldElu
TWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBjb25zdCBCeXRlY29k
ZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZhbHVlLCBBZGRyZXNz
KG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5N
ZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMyVG9NZXRhZGF0YShH
UFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sK
KyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2Rl
QmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNl
dCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5
dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGFkZFB0cihtX21l
dGFkYXRhR1BSLCBUcnVzdGVkSW1tUHRyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCku
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihBZGRy
ZXNzKG1fY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvbnN0YW50SW5kZXgp
ICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRHbG9iYWxP
YmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9nbG9iYWxPYmplY3RD
b25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvZGVC
bG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BSUmVnIHJlc3VsdCkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOworICAgIC8vIE9PUFM6
IE1heWJlIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudD8KKyAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVzdWx0LCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVzdWx0KTsKKyAgICBs
b2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9m
KEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzEsNyArOTMxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJl
Z1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJl
dHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXND
YXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
OwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3Qg
SW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25z
LCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4
LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRh
YmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDI0LDcgKzEwMjQsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAKICAgICAvLyBjcmVh
dGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2gg
c3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dp
dGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dp
dGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1
bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3ICsxMDQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3
aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25z
dCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRj
aFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRj
aFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5r
ZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0LDIyIEBAIHZvaWQgSklUOjplbWl0
X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0
ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICgh
dmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwotICAgICAgICBlbHNlCisgICAg
ICAgIC8vIE9PUFM6IG1vc3QgIk90aGVyIiBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3Rh
bnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQgZnJvbSB0aGUgVW5saW5rZWRDb2RlQmxvY2suIEl0J3Mg
anVzdAorICAgICAgICAvLyBhIGNvdXBsZSB0eXBlcyB0aGF0IGNhbid0LiBDcmVhdGUgYW4gYWJz
dHJhY3Rpb24gZm9yIHRoYXQuCisKKyAgICAgICAgc3dpdGNoIChtX3VubGlua2VkQ29kZS0+Y29u
c3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkgeworICAgICAgICBjYXNlIFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBzdG9yZTY0KElt
bTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvYWRD
b2RlQmxvY2tDb25zdGFudChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDAs
IGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICs5OCwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgp
OwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25T
aXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRv
ciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1f
dm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxs
b2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7Cisg
ICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKIAotICAgIGlmICghYWxsb2NhdG9y
KQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVsc2UgewotICAgICAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihu
dWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxv
Y2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihz
dHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgICAgIGVt
aXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2Fw
YWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7Ci0gICAgICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09i
amVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgb2Zmc2V0T2ZBbGxvY2F0
b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cE5ld09iamVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgb2Zmc2V0T2ZT
dHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAg
ICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRv
clJlZywgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAg
bG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1
bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBSZWdpc3Rl
cklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOworICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0
cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0K
IApAQCAtMTU0LDMwICsxNjMsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25z
dCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAv
LyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZl
bHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5j
ZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0
IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qy
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm90b0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6cHJvdG87CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3RvLCBwcm90b0dQUik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBh
cmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhl
IGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMSwgcHJvdG8pOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQ
UiwgdmFsdWUpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJv
dG8pOwogCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2
YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDUsCi0gICAgICAgIHJl
Z1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAg
YWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgcmVzdWx0R1BSLAorICAgICAgICB2YWx1ZUdQUiwKKyAg
ICAgICAgcHJvdG9HUFIsCisgICAgICAgIHN0dWJJbmZvR1BSLAorICAgICAgICBCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxLCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6
OnNjcmF0Y2gyKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6Okluc3RhbmNlT2Y7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbnN0YW5j
ZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKKwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKIH0KIApAQCAtMTkyLDE0ICsyMDksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2YoY29uc3QgSQogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0
aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBHUFJJbmZvOjpub25BcmdHUFIwLCByZWdUMiwgcmVnVDEpOwotICAgIH0gZWxzZQotICAgICAg
ICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6c3R1YkluZm8gPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWUgPT0gYXJndW1lbnRHUFIyKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG8gPT0gYXJndW1l
bnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEp
CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUp
PihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3Vz
dG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTM3NCw3ICszOTAsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygmUmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiAjZWxzZQpAQCAtMzg1LDcgKzQwMSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpv
cF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlz
dDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC00MTEsNyArNDI3LDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogCiAgICAgaWYgKGRz
dCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NDksMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
cHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNl
dEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNDY1LDggKzQ4MSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2Uo
Y29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdU
MzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChi
cmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBn
bG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdl
dCk7CkBAIC00ODAsNyArNDk4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVs
bChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVj
ayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAg
aXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCBy
ZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRk
SnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2Jh
bE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU2MSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpT
Q2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1
Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRK
dW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0
ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs2MDAsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51
bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0
YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lh
bFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBl
cXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50
ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9o
YXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQ
b2ludGVyLCByZWdUMSkKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIo
RXF1YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShieXRlY29kZSwgVHJ1
c3RlZEltbTMyKDEpLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsK
ICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwogfQpA
QCAtNjI1LDggKzY0MSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVj
dGlvCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7
CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25z
dGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAg
IGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNo
MSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRo
eSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RH
UFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0
dWIodmFsdWVJc1RydXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAg
ICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDAs
NyArNjU4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
QEAgLTY5NSw3ICs3MTMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVj
dGlvCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDEpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93
LCByZWdUMSwgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxz
ZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7
CkBAIC03MTEsNyArNzMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1
Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQog
ewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgdGhyb3duVmFsdWVHUFIgPSBhcmd1bWVudEdQUjE7CkBAIC05MDgsNyArOTI3LDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CiAKQEAgLTkxOCw3ICs5MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3Rl
cShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTk5Myw3ICsxMDE0LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1Qz
LCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAg
ICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2Fs
bEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAog
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xl
YXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNl
cHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwy
MyArMTAzMiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAg
ICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIs
IGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1
OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0
YWRhdGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygp
KQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JF
bnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50
ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygp
KTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRl
ckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkp
OwogICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJu
VmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5r
KHRoaXMpOwotICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAg
ICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYg
cHJvZmlsZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAg
ICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxl
Jj4ocHJvZmlsZSksIHJlZ3MpOwotICAgICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiB9CiAKQEAgLTEwNTMsOCArMTA2Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0
ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNo
IGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRl
Y29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAg
IGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEz
ICsxMDkwLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAg
ICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhp
cyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVu
ZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0
LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRh
YmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJX
aXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4
LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7CiB9CiAKQEAgLTExMDAsMTkgKzExMTAsMjEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9y
IHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBj
b25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3
aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3
aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5s
aW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVn
VDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCB0YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJn
dW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJs
b2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVn
VDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nh
c3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVz
dHMubGluayh0aGlzKTsKQEAgLTExNDgsNyArMTE2MCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2Vx
X251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xMTkzLDcgKzEyMDQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25z
dCBJbnN0cnVjdGlvCiAgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKICAg
ICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKLSAg
ICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKKyAgICAKKyAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRXcml0ZUJh
cnJpZXIocmVnVDApOwogCiAgICAgZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKTsKICNlbHNl
CkBAIC0xMzEwLDIzICsxMzIzLDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25z
dCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAm
bWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBG
aW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsK
KyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxs
ZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNh
Y2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQg
Y2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0Owog
ICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcgKzEzNTEsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNl
dE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZz
ZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdp
dGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRh
ZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRG
dW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BDcmVhdGVU
aGlzOjpvZmZzZXRPZkNhY2hlZEZ1bmN0aW9uKCksIGNhY2hlZEZ1bmN0aW9uUmVnKTsKICAgICBK
dW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0
aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygp
KSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBjYWxsZWVSZWcsIGNhY2hl
ZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcy5saW5rKHRoaXMpOwpA
QCAtMTM3Miw3ICsxMzgxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3Ry
dWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGJv
eEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVH
UFIpOwogfQpAQCAtMTM4Miw3ICsxMzkyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1Qx
KTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwogICAgIGJveEJvb2xlYW4o
cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAt
MTM5NCw3ICsxNDA1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVj
dAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKQEAgLTE0MDQsNyArMTQxNiw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0
IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Sm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNv
ZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9
IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9y
LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBy
ZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVn
VDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFs
dWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1
c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKICAgICBib3hCb29sZWFu
KHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xNDQwLDcg
KzE0NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAjZWxz
ZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BS
MiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCi0gICAgICAgIG1vdmVWYWx1ZSht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkpOwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0xNDUzLDggKzE0NjcsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1p
emF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9w
dGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAg
QWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigp
KSkpOworICAgICAgICAgICAgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4
ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQogfQogCkBAIC0xNTA5LDcgKzE1MjQsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMTU2NCwzNCArMTU4MCwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0
IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdS
ZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJl
Z2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BSID0gR1BSUmVnOjphcmd1bWVudEdQUjA7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29kZUJs
b2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVy
blZhbHVlR1BSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5l
d0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBKdW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBh
cmd1bWVudEdQUjEpOwogI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9
IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAg
IGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpGdW5jdGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90
PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKQorICAgIGxvYWRDb25zdGFudChjb25zdGFudCwg
YXJndW1lbnRHUFIyKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19n
ZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19h
c3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3
X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAg
LTE2MjEsMjMgKzE2MzksMjQgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25z
dCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRH
UFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qw
KTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsK
ICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2Nr
LT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3Rh
bnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4
cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5t
X2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BS
Mik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRv
cl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRH
UFIxcmVnVDAsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3
X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIx
cmVnVDAsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJ
RCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMXJlZ1QwLCBhcmd1bWVudEdQ
UjIpOwogICAgIH0KIH0KIApAQCAtMTY2NCwxMyArMTY4MywxMiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQg
PSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7CiAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2Zp
bGUsIHJlZ1QwLCBzaXplKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2Zp
bGUoKSwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJv
ZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QxLCByZWdUMCwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRo
X3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NzksMTQg
KzE2OTcsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDApOwogI2Vsc2UKICAgICBlbWl0TG9h
ZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSk7CiAjZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNzExLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBE
b3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0
aGUgdHlwZSBwcm9maWVsciBpcyBlbmFibGVkLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24qIGNh
Y2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVy
OwogCkBAIC0xNzc3LDIwICsxNzk1LDI0IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9u
QXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUu
Iik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFk
b3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9u
LWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAg
IGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNo
MVJlZywgc2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0g
bm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgorICAg
ICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAgICAgZW5zdXJlU2hhZG93Q2hp
Y2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJl
Zyk7CisgICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFs
dWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcs
IEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93
UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUMSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZv
aWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2Ug
dHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHVzaW5nIHRoZSBjb250cm9s
IGZsb3cgcHJvZmlsZXIuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQcm9maWxlQ29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJh
c2ljQmxvY2tMb2NhdGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRo
aXMpOwpAQCAtMTg2MCw3ICsxODgyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50
KGNvbnN0IElucwogICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAog
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE5MDgsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0o
KSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nh
c2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4ODEsNyArMjg4MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJs
b2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQ7CiAgICAgaWYgKGtl
eS5pc0ludDMyKCkpCkBAIC0yOTA0LDcgKzI5MDQsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2st
PmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogCiAgICAgaWYgKGtl
eS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmluZ0ltcGwqIHZhbHVlID0gYXNTdHJpbmcoa2V5
KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI4
MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OCw3ICszNDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0
ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNW
YWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgSW52YWxpZEdQUlJlZywgSW52YWxpZEdQUlJlZyk7CiAg
ICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksOTIgKzQ5LDEwMyBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGlmICht
ZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01h
eE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKKworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5t
X3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9m
SWRlbnRpZmllcnMoKSkgeworICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
YmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29k
ZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0
KHNjcmF0Y2hHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUs
IG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIHNjcmF0Y2hHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BS
KTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAs
IHByb2ZpbGUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0
ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOwogCiAg
ICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQotICAgICAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWws
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3Ms
IHN0dWJJbmZvR1BSKTsKKworICAgICAgICAvLyBPT1BTLiBTdXBwb3J0IHRoaXMKKyAgICAgICAg
Ly9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgICAgICAvLyAgICBnZW4u
c3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKworICAgICAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAg
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlW
YWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2Rl
VHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlw
ZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRlcikp
CisgICAgICAgIHJldHVybjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOwogCi0gICAgICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KG1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1
bWVudEdQUjIpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxz
ZQotICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgQVNTRVJUKEJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkg
PT0gbV9ieXRlY29kZUluZGV4KTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVz
ZWQuCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsK
LSAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwotCi0gICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25HZXRCeVZhbE9wdGltaXplKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBh
cmcxIGFyZzEgYWxyZWFkeSB1c2VkLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9
IGFyZ3VtZW50R1BSMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgc3RhdGljX2Fzc2Vy
dChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlID09IHJlZ1QwKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5ID09IHJlZ1QxKTsKIAotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgbG9h
ZENvbnN0YW50KG1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6
Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOworICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE2MCw4ICsxNzEsOCBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgY29uc3RleHBy
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjU7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1
bWVudEdQUjEpOwogCkBAIC0xODcsMjcgKzE5OCwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAgICAgICAgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjIzLDkgKzI0
MiwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGlt
aXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1
NiwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFs
cmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7
CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9w
cml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC0zMDAsMjEgKzMxNSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNv
ZGUubV9icmFuZDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBicmFu
ZEdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQ
UiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7Ci0KICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRB
Y2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKGJyYW5kR1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIAogICAg
IC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBz
aW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTMyOCwxMyArMzUwLDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKIHsKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nl
c3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRB
Y2Nlc3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CkBAIC0zNDQsMjQgKzM3MCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3By
aXZhdGVfYnJhbmQoCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJn
dW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVy
dHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJh
bmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVy
YXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25h
bWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBl
bmRDYWxsKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFu
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzcwLDE5ICszOTAs
MjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjbwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBi
cmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCByZWdUMSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJyYW5kLCBicmFuZEdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNr
UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRl
QnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIp
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
Q2hlY2tQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJh
bmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIH0KIApAQCAtMzk0LDkgKzQyMywxMSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQ
UiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQ
cml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTQwNiwyNCArNDM3LDE4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAg
IHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAg
ICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBl
KG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVu
Y3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpB
cmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJy
YW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ0MSwyNCArNDY2LDM4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1Qz
LCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwg
cHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2Rl
LCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAg
ICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQpOwotICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9H
UFIpOworICAgIC8vIE9PUFM6CisgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVy
dHkpKQorICAgIC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0
QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRC
eVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAg
c3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRl
IG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpA
QCAtNDc0LDcgKzUxMyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwotICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0
byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwpAQCAtNDgyLDcg
KzUyMCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICAg
ICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2Rl
Lm1fZWNtYU1vZGU7CiAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTM1LDE2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGgg
YW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVj
dCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVj
bWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0
KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAgICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0QnlWYWw+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJv
ZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNE
aXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3Ry
aWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6
IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6
IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgYXJndW1l
bnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUxMiw3ICs1NTgs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAgIGF1dG8gb3Bl
cmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwpAQCAtNTIz
LDcgKzU2OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUzOSwxMSArNTg1LDExIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
cmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJl
ZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
ZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQ
UiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CkBA
IC01NzAsMjAgKzYxNiwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNv
bnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCB2YWx1ZUdQUik7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiks
IEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAg
YWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJ
bmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmllbGRQdXRLaW5k
ID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlW
YWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0
aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNjAzLDEzICs2NjAsMTQg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQu
aXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUg
OiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0
IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGdlbi5zdHViSW5mbygpLCBUcnVz
dGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAg
YXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERl
ZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmll
bGRPcHRpbWl6ZTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRzR1BSMywgYXJn
dW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjgwLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQpAQCAtNjQ4LDkgKzcwMCw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
CiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
cmVnVDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0Owog
CkBAIC02ODAsNyArNzMyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChj
b25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBy
ZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTY4OSw3ICs3NDIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNv
bnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsK
ICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJl
Z1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTY5OSw3ICs3NTMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3Nl
dHRlcl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJl
Z1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3NjQsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVz
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDMs
IHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNzE5LDcgKzc3NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFs
KGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJl
Z1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCBy
ZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3LDIzICs3ODQsMzMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lRGVs
QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZv
R1BSLCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9k
ZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJy
aWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyBy
ZWdpc3RlcnMuCkBAIC03NTksMTUgKzgyNiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERl
bEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRl
Y29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0
ZUJ5SWRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0
ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CkBAIC03ODEsMjQgKzg1MCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lk
KGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BS
MzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6
ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5
SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTg0NSwyMiArOTA5LDMzIEBAIHZvaWQgSklUOjplbWl0
X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAg
Y29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOwor
CiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5
VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsK
IAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1
ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBj
YW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlz
IGNlbGwuCkBAIC04ODMsOSArOTU4LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlf
dmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXpl
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC04OTksMjQgKzk3NiwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3Vt
ZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
c3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2Rl
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5
X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5k
Q2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTYxLDIyICsx
MDMzLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0KTsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRS
ZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nl
c3NUeXBlOjpUcnlHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2LDE0ICsxMDY3LDE3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCBy
ZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
QEAgLTEwMDMsMjYgKzEwODcsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlf
aWQoY29ucwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJn
dW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUp
LCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25UcnlH
ZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGly
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDMyLDIwICsx
MTEwLDI5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsK
LQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkRGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlJZERpcmVjdDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
CiB9CiAKQEAgLTEwNTQsMTYgKzExNDEsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF9kaXJlY3QoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9w
ZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xMDczLDI3ICsxMTYyLDIxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fz
c2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRp
bWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5
SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTAyLDU0ICsxMTg1LDM5IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BS
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwog
ICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9
IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRh
dGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6
QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2Zp
bGUsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJ
ZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRh
OjpvZmZzZXRPZk1vZGUoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIEp1bXAgbm90QXJyYXlMZW5n
dGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKKyAgICAgICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRh
OjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3Ro
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
bm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNW
UmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3Vs
dFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBw
ZW5kKGdlbik7CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2ICsxMjI2LDE4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwog
ICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
QEAgLTExNzcsMjYgKzEyNDcsNTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQor
Cit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNv
ZGUubV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0
aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0
ZXJzOjpzY3JhdGNoOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRo
aXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4o
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpA
QCAtMTI1MCw3ICsxMzUyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgYXJndW1lbnRHUFIzKTsK
KyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRX
aXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI5
ICsxMzY2LDIzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFy
ZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OnRoaXNWYWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwg
IWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
LCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
c19wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0KKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9cwogCiAjaWYgRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KFZNJiB2bSkKQEAgLTEzMjksMjMgKzE0MjksMzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8v
IEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhl
IG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0
ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRo
QmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0
dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcs
IHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7
CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5
dGVjb2RlKSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNv
ZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJl
Y3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6UHV0QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVj
dCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+
ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5
LDE0ICsxNDczLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4K
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0
aGlzKTsKICAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21f
cHV0QnlJZEluZGV4KytdOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEs
IHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0
aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEzNzYsMjUg
KzE0OTQsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwog
CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJn
MSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDE7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHZhbHVlR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCkpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTQ0MSwyMCArMTU1MywzMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZS
ZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVn
LCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGlu
ZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSk7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ2MywxNCArMTU4NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJ
ZHNbbV9pbkJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjA2LDIyIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0
b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBw
b2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZm
ZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVy
YXRpb25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+
Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dl
dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
LQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkluQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVl
R1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9p
bl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAs
MjUgKzE2MzAsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29k
ZSwgYmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJ
VEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BS
KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtl
ZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6
OkluQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2
NjUsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJh
dG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0
YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwg
YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50
R1BSMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFI0
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3Vt
ZW50R1BSNCk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTU2LDUxICsx
Njg3LDU2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
SW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5
R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBw
cm9maWxlR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCks
IHByb2ZpbGVHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVy
YXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5v
IHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRp
ZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9w
ZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1p
emUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEhhc1By
aXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlP
ckJyYW5kLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklU
SW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBh
ZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gdHlwZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NU
eXBlIHR5cGUpCit2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vz
c1R5cGUgdHlwZSkKIHsKICAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
TmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiAKQEAgLTE2MDgs
NyArMTc0NCwxMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9w
ZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHR5
cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFt
ZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE2MTgsMjcgKzE3NTgsMjEgQEAgdm9pZCBK
SVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9
IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHByb3BlcnR5T3JCcmFuZEdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZh
bHVlKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25I
YXNQcml2YXRlQnJhbmRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1l
T3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJh
dGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDog
b3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hh
c19wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTE2NTIsNyArMTc4Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1l
KGMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJp
dmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAg
ICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0
ZWNvZGUubV9wcm9wZXJ0eSwgLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDcgKzE4MDAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaGFzX3ByaXZhdGVfYnJhbmQoCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZUJyYW5k
PigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3Qs
IGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9icmFuZCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZUJyYW5kKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKQpAQCAtMTY4OCw2ICsxODIyLDcgQEAgdm9pZCBKSVQ6OmVtaXRS
ZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTc5NCw1OSArMTkyOSw3NyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgUmVz
b2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spLm1fcmVzb2x2ZVR5cGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2Nv
cGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBl
OwogCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChi
eXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQobV9jb2RlQmxv
Y2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24p
OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29s
dmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUg
c2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1
bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZp
cm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBN
b2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29s
dmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxv
Y2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgICAgICBwdHJkaWZmX3Qg
bWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldElu
TWV0YWRhdGFUYWJsZShieXRlY29kZSk7CisKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJh
dG9yID0gW10gKFZNJikgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29s
dmVTY29wZVRodW5rKENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9z
dXJlVmFyIik7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVybiBK
SVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzIik7CisgICAgICAgIH07CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5F
UkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJh
dG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0g
ewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVfR0VORVJB
VE9SKQorICAgICAgICBhdXRvIGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0m
KSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmso
c3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgZ2VuZXJpYyIpOwogICAg
ICAgICB9OwotI3VuZGVmIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SCisKKyAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjb3BlR1BSID0gcmVnVDY7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZz
ZXRHUFIgPSByZWdUNTsKIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBz
Y29wZUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1l
dGFkYXRhR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAg
ICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAg
Y29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2Ug
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUg
PSB2bS5nZXRDVElTdHViKGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBl
bWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQog
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0
aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9u
IGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKworICAg
IENDYWxsSGVscGVycyBqaXQ7CisKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wUmVzb2x2ZVNjb3Bl
OjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7IC8v
IGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OyAvLyBpbmNv
bWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8g
aW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJl
c29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgaml0LnRhZ1JldHVy
bkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRh
dGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywg
bWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKQEAgLTE4NTUsMjYgKzIw
MDgsMjYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJS
ZWcpIHsKICAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwotICAgICAgICAgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgfQotICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFy
SW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRl
KCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwg
bV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZz
ZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogCiAg
ICAgYXV0byBlbWl0UmVzb2x2ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpIHsKICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBsb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2xvY2FsU2Nv
cGVEZXB0aCkpLCByZWdUMSk7CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7Cisg
ICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7CiAKLSAgICAgICAgTGFiZWwgbG9v
cCA9IGxhYmVsKCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MSk7CisgICAgICAgIExhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgSnVtcCBkb25l
ID0gaml0LmJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CiAgICAgICAgIHsKLSAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7
Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICAgICAgICAg
IGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAg
IGppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5qdW1w
KCkubGlua1RvKGxvb3AsICZqaXQpOwogICAgICAgICB9Ci0gICAgICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRDb2Rl
ID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewpAQCAtMTg4MiwxMiArMjAzNSwxMiBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29k
ZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAgICAgIGxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3Qo
KSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIpOwot
ICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKLSAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmpl
Y3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2go
KSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOwor
ICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGds
b2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRp
bmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKGdsb2JhbE9iamVjdEdQ
UiwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTg5NywxMSAr
MjA1MCwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
ICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAogICAgICAgICAgICAgLy8gYW5k
IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpIGZv
ciBHbG9iYWxMZXhpY2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVn
VDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwg
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0g
ICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zm
c2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTE5MDksNyArMjA2Miw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgICAgIGVtaXRS
ZXNvbHZlQ2xvc3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1w
KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFy
OgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTE5MTksODMgKzIwNzIsNDUgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAot
ICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsK
LSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
IDogR2xvYmFsTGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAo
cmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENs
b3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAg
ICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0K
LSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0
aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6
b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDApOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBhdXRvIGVtaXRDYXNl
ID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAgICAgICAgICAgSnVtcCBub3RD
YXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVU
eXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgbm90Q2FzZS5saW5rKCZq
aXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAg
ICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7
CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZl
VHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAg
ICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5r
KTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX3Jl
c29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENv
ZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
KTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwg
Q29kZUxvY2F0aW9uTGFiZWwodm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVm
aW5lIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jlc29sdmVfc2NvcGVfIyNy
ZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25z
dGV4cHIgKCF0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAg
ICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICBy
ZXR1cm4gaml0LmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2Vs
aW5lOiBvcF9yZXNvbHZlX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNI
X1JFU09MVkVfVFlQRShERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVG
SU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQog
ewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3
b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIC8vIFRoZSBmYXN0IHBhdGggYWxyZWFkeSBw
dXNoZWQgdGhlIHJldHVybiBhZGRyZXNzLgogI2lmIENQVShYODZfNjQpCkBAIC0yMDY1LDYgKzIx
ODAsNyBAQCB2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMjE3OCw3ICsy
Mjk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjIwNiwzMSArMjMyMiw0MSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgQVNTRVJUKEJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgQVNT
RVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVu
dEluc3RydWN0aW9uKTsKIAorICAgIGF1dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYp
IHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKENsb3N1
cmVWYXIsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07
CisKKyAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0g
W10gKFZNJikgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1
bmsoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfZ2V0X2Zy
b21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9t
U2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRl
T3BHZXRGcm9tU2NvcGVUaHVuayhzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21f
c2NvcGUgZ2VuZXJpYyIpOworICAgIH07CisKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAotICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsKLSAgICAgICAgdWludHB0cl90KiBvcGVyYW5kU2xv
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0g
ICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVy
YW5kU2xvdCksIHJlZ1QwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRh
dGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7
CisgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0
YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0jZGVmaW5lIEdFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNv
bHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3Ig
Z2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKEdFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUikKLSAgICAgICAgfTsKLSN1bmRlZiBHRVRfRlJPTV9TQ09QRV9H
RU5FUkFUT1IKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwog
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLSAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jl
c29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICB9CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgIGlmIChwcm9maWxlZFJl
c29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNs
b3N1cmVWYXJHZW5lcmF0b3IpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0g
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGNvZGUgPSB2bS5nZXRD
VElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICBl
bHNlCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5l
cmF0b3IpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9t
U2NvcGVUaHVuayhzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3Qg
Y2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBm
dW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1
c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCkBAIC0yMjM5
LDc3ICsyMzY1LDY4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBz
Y29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRG
cm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgp
KSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxl
KCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAg
SnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
ID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQp
IHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVy
ZU9mZnNldCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDEpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgYXV0byBl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSKSB7CisgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlN0
cnVjdHVyZSgpKSwgcmVnVDEpOworICAgICAgICBqaXQubW92ZShzY29wZUdQUiwgcmVnVDApOwor
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsK
KyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QxKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMp
OwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2Jh
bE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgaml0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Cisg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
T0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQp
KSwgcmVnVDMpOwogICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVz
cyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElz
SW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKICAgICAKLSAgICBhdXRvIGVtaXRHZXRWYXJGcm9tUG9p
bnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIo
cmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2lu
dGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihy
ZWcsIHJlZyk7Ci0gICAgfTsKLQogICAgIGF1dG8gZW1pdEdldENsb3N1cmVWYXIgPSBbJl0gKEdQ
UlJlZyBzY29wZUdQUiwgR1BSUmVnIG9wZXJhbmRHUFIpIHsKICAgICAgICAgc3RhdGljX2Fzc2Vy
dCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJ
bW0zMigzKSwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGFkZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQ
Uik7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9u
bWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LmxzaGlmdDY0
KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQUik7CisgICAgICAgIGppdC5hZGRQdHIoc2NvcGVH
UFIsIG9wZXJhbmRHUFIpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIs
IEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOwogICAg
IH07CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwg
Ym9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soc2NvcGVHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9zdHJ1Y3R1
cmUpKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRv
bid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBB
ZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBp
bmplY3Rpb24uCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQ
Uik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24n
dCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRk
aXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5q
ZWN0aW9uLgogCiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSByZWdUMDsKICAg
ICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7CiAgICAgICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwogICAgICAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gcmVnVDI7CiAKLSAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1i
ZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwg
YmFzZSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmppdEFzc2VydChzY29wZWRMYW1iZGE8SnVt
cCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgeworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaml0LmJyYW5jaFB0cihF
cXVhbCwgYmFzZSwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVy
YW5kKSksIG9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBvZmZzZXQpOwogICAgICAgICAgICAg
aWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9
IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zm
c2V0SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhp
cyk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVh
dGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSk7CisgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91
dE9mTGluZSk7CisgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluaygmaml0KTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0g
ICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAg
ICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBqaXQubmVnMzIob2Zmc2V0KTsKKyAgICAg
ICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7CisgICAgICAgICAg
ICBqaXQubG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoK
QEAgLTIzMTcsMjEgKzI0MzQsMTkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9v
cGVyYW5kKSwgcmVnVDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRH
ZXRWYXJGcm9tUG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFk
YXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KHJlZ1QwLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5icmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIHJlZ1QzKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zm
c2V0T2ZPcGVyYW5kKCkpLCByZWdUMyk7CiAgICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihz
Y29wZUdQUiwgcmVnVDMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1p
YzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTIzNDEs
NzkgKzI0NTYsNTYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNl
IEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZv
KSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1w
IGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2Up
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBl
bHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwg
cmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMp
LCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxp
bmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSksIHJlZ1QwKTsKKyAg
ICAgICAgaml0LmFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1Qw
KTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsK
LSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gaml0LmJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBl
bWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkp
OworICAgICAgICBub3RHbG9iYWxWYXIubGluaygmaml0KTsKKworICAgICAgICBKdW1wIG5vdEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBl
bWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbi5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGppdC5i
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluaygmaml0KTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
LmxpbmsoJmppdCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9
IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxp
bmsoJmppdCk7CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAK
LSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAg
IHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAogICAgIHN0YXRpY19hc3NlcnQoVmFsdWVQ
cm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0gMSk7Ci0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7Cisg
ICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZz
ZXRPZlByb2ZpbGUoKSkpOwogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQ
cm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGlu
ayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxf
VEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bSgpLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05h
bWUpOwogfQogCi0jZGVmaW5lIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2
ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9n
ZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBc
Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVz
b2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQo
dm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHJl
c29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsg
XAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VO
RVJBVE9SKQotI3VuZGVmIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhp
cyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJl
Y2F1c2UKQEAgLTI0NzEsODYgKzI1NjMsNzkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi12
b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBz
dG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlh
YmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdh
dGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxv
YWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdU
MSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlX
cml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxF
bnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0
ZXIpKSk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUg
PSBieXRlY29kZS5tX3Njb3BlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhi
eXRlY29kZSk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29s
dmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3Ry
dWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAotICAgIGF1dG8gZW1pdENv
ZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7
CisKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewog
ICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJl
U2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBk
b24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4g
QWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIg
aW5qZWN0aW9uLgorICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5q
ZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0
aGUgR2xvYmFsT2JqZWN0LgorICAgICAgICAgICAgLy8gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Nj
b3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpvZmZzZXRPZlN0cnVj
dHVyZSgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCByZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJl
Z1QxKSk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKSk7CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QyKTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihb
Jl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAg
ICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUHV0VG9TY29wZTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAg
IG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJl
Z1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAg
ICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0
LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsK
KyAgICAgICAgICAgIC8vIE9PUFM6IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhh
dCB0b29rIEdQUlJlZ3MKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2Ug
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpT
U2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2Nr
KHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChj
b25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgZW1pdFZhclJlYWRP
bmx5Q2hlY2socmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9u
KGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9i
YWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSkgeworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDApOwor
CisgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNvZGUubV9nZXRQdXRJbmZv
LmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZh
ciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUg
YmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mg
c3RhdGljYWxseS4KLSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkK
LSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lz
ZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9j
YXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCksIHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KHJlZ1QxKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJl
Y3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJ
bmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0
YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNs
b3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKwor
ICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVt
aXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDEpOworCisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QwKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxkIGJlIG5pY2UgdG8g
aGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciB2YWx1ZS4KKyAgICAgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZh
cjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0
Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBv
aW50U2V0KTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQ
dXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0
YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CisgICAgICAgICAgICBlbWl0Tm90aWZ5
V3JpdGVXYXRjaHBvaW50KHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJbmRleChyZWdUMCwg
cmVnVDIsIFNjYWxlRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxl
cygpKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZl
cnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciBvd25lci92YWx1ZS4KICAgICAgICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yNTY0LDU4ICsyNjQ5LDUy
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAg
ICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6
IEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHlu
YW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVh
ZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAgICAgICBpc0dsb2JhbExleGljYWxW
YXIubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBH
bG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwotCi0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENv
ZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAvLyBJ
ZiBhbnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1cmVWYXIvIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21waWxlIHRoaW5ncworICAgIC8vIHRoYXQg
d2F5IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2UndmUgcHJvdmVuIHRoYXQgaXMgdGhlIHR5
cGUgd2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJlVmFyLAorICAgIC8vIGFsbCBDb2RlQmxv
Y2tzIHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFyCisgICAgLy8gaWYgdGhlIHZhciBpbmpl
Y3Rpb24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYgaXQgaXMgZmlyZWQsIHRoZW4gd2UgdGFr
ZSB0aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0CisgICAgLy8gbWF0dGVyIHdoYXQgdHlwZSB3
ZSBhcmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhcikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmls
ZWRSZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKFJl
c29sdmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgZW1pdENvZGUoQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVsc2UgewogICAgICAgICBKdW1wTGlz
dCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdU
MCk7CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1QwKTsKICAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVU
eXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBKdW1w
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0
eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCisgICAgICAgIEp1bXAgbm90
R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
VmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsodGhpcyk7CisKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwor
ICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCiAgICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
ICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7
CiAKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAogICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAg
ZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogfQog
CkBAIC0yNjI0LDEzICsyNzAzLDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2Nv
cGUoY29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUo
KTsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgUmVzb2x2ZVR5cGUg
cHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBz
YXcgYSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBDb2RlQmxvY2tzIGFyZSBndWFyYW50ZWVk
CisgICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZhci4KICAgICAgICAgSklUU2xvd1BhdGhD
YWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJv
d19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAgICAgICAgIHNs
b3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yNzAx
LDcgKzI3ODMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAg
ICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBs
b2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBp
bmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyODQxLDYgQEAgdm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5h
bEZpZWxkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7CkBAIC0yNzY3LDcgKzI4NDgsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRP
YmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIApAQCAtMjc4OSw3ICsyODcwLDYgQEAgdGVtcGxhdGUgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X3ZhbDxPcAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBt
b2RlID0gYnl0ZWNvZGUubV9tb2RlOwpAQCAtMjgwNSw3ICsyODg1LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7
CiAKICAgICAvLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNl
ZSwgc28gc3BlY2lhbCBjYXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAg
IGlmIChtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jaykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9y
R1BSID0gcmVnVDM7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwg
ZW51bWVyYXRvckdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0
MzIoTm9uWmVybywgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Om1vZGVTZXRPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih+SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwpAQCAtMjg0Nyw3OCArMjkyNyw4NiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0
b3JHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAg
YXV0byByZXN1bHRHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVy
YXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gxID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZh
bFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJh
c2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMzsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIobW9kZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1l
LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHNjcmF0Y2gzKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcHJvcGVydHlHUFIpOwogCi0gICAgb3I4KHJlZ1Qy
LCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAg
bG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZF
bnVtZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0
Y2gyKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgQnl0ZWNvZGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChiYXNlR1BSKSk7CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2
YWx1ZS4KLSAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25a
ZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhl
ZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVt
cCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMs
IFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhl
IHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIp
OwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMyk7Ci0gICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJh
dG9yLCBzY3JhdGNoMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2gg
PSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8g
Q29tcHV0ZSB0aGUgb2Zmc2V0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJl
Z1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAg
Ly8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBz
dG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNj
ZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCBy
ZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQo
QmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBK
dW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFk
ZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSkpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNo
Mik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25l
Q2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGlu
ZQogICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFk
ZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMy
VG9QdHIocmVnVDMsIHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3Jh
dGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSwgc2NyYXRjaDIpOworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJU
b1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRP
ZkZpcnN0UHJvcGVydHkgPSBvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkg
KiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSksIHJlc3VsdEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNo
MiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBk
b25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRo
aXMpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpI
YXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51
bWVyYXRvck1ldGFkYXRhKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlz
bWF0Y2gpLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JN
ZXRhZGF0YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRoaXMpOwotICAg
IEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIEp1bXAgaXNO
b3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJlcGxhY2UgdGhl
IHN0cmluZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4
LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJvcGVydHlHUFIp
OwogCiAgICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAKICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlW
YWxzLmFwcGVuZChnZW4pOwogCiAgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5MjcsMTAgKzMw
MTUsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfCiAgICAgZ2Vu
ZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
R2V0QnlWYWw+KCksIGl0ZXIpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlwZSwg
dHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9y
X2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
Y29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxD
YXNlKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0
aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQogewotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1f
ZW51bWVyYXRvcjsKQEAgLTI5MzksNyArMzAyNiw5IEBAIHZvaWQgSklUOjplbWl0X2VudW1lcmF0
b3JfaGFzX3Byb3BlcnR5SW0KICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QwKTsKLSAgICBvcjgocmVnVDAsIEFic29sdXRlQWRk
cmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRh
ZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRh
ZGF0YSgpLCByZWdUMSk7CisgICAgb3IzMihyZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0
YWRhdGEocmVnVDEsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVy
YXRvck1ldGFkYXRhKCkpOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVy
bywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVj
dHVyZU1vZGUpKSk7CiAKQEAgLTMwMjgsNiArMzExNywxMyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRl
QmFycmllcihKU0NlbGwqIG93bmVyCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5r
KHRoaXMpOwogfQogCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpCit7
CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgp
LCBvd25lciwgc2VsZWN0U2NyYXRjaEdQUihvd25lcikpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIp
OworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQzLDcgKzE1NDMs
NyBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAKIHZvaWQgdW5s
aW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwg
Y2FsbExpbmtJbmZvLmZhc3RQYXRoU3RhcnQoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVy
KCZjYWxsTGlua0luZm8pKTsKICAgICAKICAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8s
IHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4MTcx
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxp
dHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBv
cGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBl
KQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBlbmQKLQog
ICAgICAgICBtZXRhZGF0YSh0MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAg
ICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBAIC0xMDIz
LDcgKzEwMTksNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAg
ICAgICAgICMgTWV0YWRhdGEgaW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRlZ2VyT3Bl
cmF0aW9uKHQyLCAuc2xvdykKICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2Nmciwg
dDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAg
ICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50
LCB0MSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4OSwyMiAr
MTA4NSwxOCBAQCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0
ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAKLSAgICBt
YWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRl
OjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1
XQotICAgIGVuZAotCiAgICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQsIHQw
KQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5l
cSB0MSwgSW50MzJUYWcsIC5vcE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZm
ZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFy
aXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJp
dGhQcm9maWxlSW50LCB0NSwgdDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdh
dGVTcmNOb3RJbnQ6CiAgICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4
b3JpIDB4ODAwMDAwMDAsIHQxCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51
bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxl
TnVtYmVyLCB0NSwgdDMpCiAgICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAg
LTExMTUsMTAgKzExMDcsNiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bj
b2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9w
ZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2Rl
U3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAg
ICAgICAgbWFjcm8gYXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmls
ZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCiAg
ICAgICAgIGdldChtX3JocywgdDIpCiAgICAgICAgIGdldChtX2xocywgdDApCkBAIC0xMTI2LDcg
KzExMTQsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAg
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAg
IGJpbmVxIHQyLCBJbnQzMlRhZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50MzJU
YWcsIC5vcDJOb3RJbnQKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkK
KyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9m
aWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVn
ZXJPcGVyYXRpb25BbmRTdG9yZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3Bh
dGNoKCkKQEAgLTExMzYsMTIgKzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShv
cGNvZGVOYW1lLCBvcAogICAgICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAgICAgICAg
YmliIHQzLCBMb3dlc3RUYWcsIC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAgICAgYmluZXEgdDMs
IEludDMyVGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVy
SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0
aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgICAg
ICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAgICAgICAg
ZmlpMmQgdDEsIHQzLCBmdDEKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJl
ck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
QXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJlYWR5Ogog
ICAgICAgICBnZXQobV9kc3QsIHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1
Myw3ICsxMTQxLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAog
ICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQg
b3BlcmFuZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAg
ICAgYmlhIHQzLCBMb3dlc3RUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFBy
b2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVT
dHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwg
ZnQwCiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJhdGlvbihm
dDEsIGZ0MCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMTA1NiwxMCArMTA1Niw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEs
IE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2Vy
T3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNv
ZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQot
ICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0
eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fc3JjRHN0
LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQogICAgICAgICBtZXRhZGF0YSh0
MiwgdDMpCkBAIC0xMDY5LDcgKzEwNjUsNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNv
ZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDEsIC5zbG93KQogICAgICAg
ICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEgdDEsIFtjZnIsIHQwLCA4XQotICAg
ICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVV
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDIsIHQzKQog
ICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTExMzQsMTEgKzExMzAsNiBAQCBl
bmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLQotICAgIG1hY3JvIHVwZGF0
ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRh
OjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgZW5k
Ci0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNp
emUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0xMTQ2LDEyICsxMTM3LDEyIEBA
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwKICAgICBidGl6IHQzLCAw
eDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MwogICAgIG9ycSBudW1iZXJUYWcs
IHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVV
bmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDQpCiAgICAg
cmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0cXogdDMsIG51bWJlclRhZywgLm9w
TmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAwLCB0MwotICAgIHVwZGF0ZUFy
aXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2Zp
bGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEsIHQ0KQogICAgIHJldHVybih0MykK
IAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNTUsNiBAQCBtYWNybyBiaW5hcnlPcEN1
c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bj
b2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFk
YXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAotICAgICAgICBtYWNybyBw
cm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAg
ICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQogICAgICAgICBnZXQobV9saHMsIHQy
KQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkKQEAgLTExNzcs
NyArMTE2NCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAg
ICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQx
LCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQor
ICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2Zp
bGVJbnRJbnQsIHQ1LCB0NCkKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLm9wMU5vdEludDoK
QEAgLTExODcsMTAgKzExNzQsMTAgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVO
YW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93CiAgICAgICAgIGFkZHEg
bnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKLSAgICAgICAgcHJvZmlsZShBcml0
aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQ0KQogICAgICAgICBq
bXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkludDoKLSAgICAgICAgcHJvZmls
ZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAgICAgICBj
aTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQy
KQpAQCAtMTIwNiw3ICsxMTkzLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVO
YW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRo
ZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAg
ICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2Zp
bGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1
Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQw
CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20JKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjQ5OCw2ICsyNDk4LDE3
IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNybyB1cGRhdGVV
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAg
IGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFd
LCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2Vu
ZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBt
ZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJp
dGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlBcml0aFByb2Zp
bGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhl
IFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNob3VsZCBhbHJl
YWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0X1dJTgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50
aWZpZXIuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCwxMCBA
QCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsKIAogICAgIHN0
YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChKU0NlbGwqIGlk
ZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRpZmll
ciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVy
IGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgVW5p
cXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0
YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3Qml0cyh1aW50
cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdCaXRzKTsgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlm
aWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVh
YmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVy
JiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
Y29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhD
b2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3RlbXBsYXRlIDx0
eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVC
bG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBBU1NF
UlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVpZCkpOwogICAg
IHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MTcx
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9X
X1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFy
aXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRhLCBK
U1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxl
JiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5hcnlBcml0aFByb2Zp
bGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNl
cnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQu
aXNCaWdJbnQoKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436981</attachid>
            <date>2021-08-31 18:52:05 -0700</date>
            <delta_ts>2021-08-31 18:59:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>362200</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IHVubGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxp
bmtlZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRp
b24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
aXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0g
ICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRo
U3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhT
dGFydCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlz
IGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQg
dG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0
aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJz
OjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAg
IHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MjQsNiArNDI0LDEzIEBAIGlubGluZSBDb2RlT3JpZ2lu
IGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBz
byB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNyArMzcw
LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2Fu
J3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJv
Y2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJv
ZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5l
c3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2Yg
YW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhl
IGxpdmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNp
ZGUgVW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBi
ZXR3ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhl
IGJ5dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5n
IGFuIFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9j
ayogdW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CkBAIC00NjYsNiAr
NDY3LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAg
ICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9G
SUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtl
ZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAg
ICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtl
ZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAg
ICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5z
dHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4LDE0ICs1NDIsMTQgQEAgYm9vbCBD
b2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRl
UHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5L
KE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAg
ICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJ
bmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9w
TXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5L
X1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC0zMDc5LDcgKzMw
OTMsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBF
TkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVy
biBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMyOTUsMTMgKzMzMDks
MTMgQEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3
aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJu
ICZwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICBy
ZXR1cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICAgICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtMzMxMywxMSArMzMyNywxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSog
Q29kZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewog
ICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5l
Z2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoK
LSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9w
RGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMt
PmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw5
IEBAIHB1YmxpYzoKICAgICBNZXRhZGF0YVRhYmxlKiBtZXRhZGF0YVRhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tZXRhZGF0YS5nZXQoKTsgfQogCiAgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQorcHJpdmF0ZToKICAgICB2b2lkIHNl
dE51bVBhcmFtZXRlcnModW5zaWduZWQgbmV3VmFsdWUpOworcHVibGljOgogCiAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9mQXJn
dW1lbnRzVG9Ta2lwOyB9CiAKQEAgLTE2Nyw3ICsxNjksNiBAQCBwdWJsaWM6CiAgICAgdW5zaWdu
ZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQogICAgIHVuc2lnbmVkIG51
bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hlY2twb2ludHMoKSAq
IG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKLSAgICB1bnNpZ25lZCogYWRkcmVzc09mTnVtUGFy
YW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KIAogICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihtX2FsdGVybmF0aXZlLmdl
dCgpKTsgfQpAQCAtMjMyLDE2ICsyMzMsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxs
ZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFr
cG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRoZSBv
cHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJuIHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFuZCB3
ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlZy5v
ZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fbnVtVmFycyk7CkBAIC0yNjYsNiArMjU3LDcg
QEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7
CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMgSUNz
IGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAg
ICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogCkBAIC0yODIsNyArMjc0LDYg
QEAgcHVibGljOgogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1f
cGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXNDYWxsZWVTYXZlUmVnaXN0ZXJz
IHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVn
aXN0ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKICAgICB9OwogCiAgICAg
SklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikK
QEAgLTMyMiwxNSArMzEzLDEwIEBAIHB1YmxpYzoKICAgICAvLyBsb29raW5nIGZvciBhIENhbGxM
aW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMuCiAgICAgQ2Fs
bExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgp
OwogICAgIAotICAgIHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFwJiYgaml0Q29kZU1hcCkK
LSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAg
ICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcCA9IFdURk1vdmUoaml0Q29kZU1h
cCk7Ci0gICAgfQogICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKQogICAgIHsKLSAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICByZXR1cm4g
ZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcDsKKyAgICAgICAgQVNTRVJUKGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVNYXA7CiAgICAg
fQogCiAgICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0Nv
ZGVPcmlnaW5NYXA+JiYpOwpAQCAtNDcyLDYgKzQ1OCw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmlu
ZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9h
cmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251
bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01NzIsNiArNTU5LDcgQEAg
cHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oaW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1Zl
Y3RvckJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1f
Y29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFN
ZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2wo
aW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAg
aW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXpl
KCk7IH0KQEAgLTYwMSw2ICs1ODksMTEgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VS
VChtX2ppdERhdGEpOwogICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgfQorICAgIFNpbXBsZUp1bXBUYWJsZSYgYmFzZWxpbmVTd2l0
Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN3
aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZV
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyByZXR1cm4g
bV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9CkBA
IC02MTEsNiArNjA0LDExIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXRE
YXRhKTsKICAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
W3RhYmxlSW5kZXhdOwogICAgIH0KKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5n
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9m
VW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtl
ZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBj
b25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNzk3LDYgKzc5NSw3IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fZGVi
dWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCkgeyBy
ZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywg
bV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVha3BvaW50KHVuc2lnbmVk
IG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQodW5zaWduZWQgbnVt
QnJlYWtwb2ludHMpCkBAIC04MzgsNiArODM3LDcgQEAgcHVibGljOgogICAgIG11dGFibGUgQ29u
Y3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
OyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMgdG8gc3RvcmUgdG8gaXQu
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
KTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2NhcGFiaWxpdHlMZXZlbFN0
YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNiwxMSArOTA2LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcik7IH0KIAotICAg
IGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQotICAgIHsK
LSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRl
IHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3VubGlua2VkQ29kZS0+aXNC
dWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZv
ckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5sb29wSGludHNB
cmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2
b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uu
aAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXAoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spOwogICAgIAogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlKiB3cmFwQW5kQWN0aXZhdGUoQ29kZUJsb2NrKiBjb2RlQmxvY2spOworCisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLCBtX2NvZGVCbG9jayk7IH0KICAgICAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHJldmlz
aW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0
YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBzdGF0aWNfYXNzZXJ0KHNp
emVvZihHZXRCeUlkTW9kZU1ldGFkYXRhCiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJy
YXlMZW5ndGggewogICAgIEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihH
ZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmlsZSk7IH0KIH07CiBzdGF0
aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsK
IApAQCAtODgsNiArODksNyBAQCB1bmlvbiBHZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAg
R2V0QnlJZE1vZGUgbW9kZTsKICAgICAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGlu
ZzsgLy8gVGhpcyBtdXN0IGJlIHplcm8gd2hlbiB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAg
fTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhLCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0
YWRhdGFEZWZhdWx0IGRlZmF1bHRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1
bnNldE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3Ro
TW9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYgKzM4NSw4IEBA
IGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcygKICAgICByZXR1cm4gbGlu
a2VkQ29kZUlubGluZTsKIH0KIAorLy8gT09QUzogTWFrZSB0aGlzIHN0dWZmIHdvcmsgd2l0aCBk
YXRhIGljcyB0byBub3QgYXNzdW1lIGlubGluZSBhY2Nlc3MuCisKIHZvaWQgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2VzcyhDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFyZ2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVz
ZURhdGFJQygpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0
aW9uTW9kZU1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgT1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9S
X0VOVU1fQ0xBUwogCiBzdHJ1Y3QgSXRlcmF0aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90
IHNlZW5Nb2RlcyB7IDAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVz
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1v
ZGVzKTsgfSAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9
PSBzaXplb2YoSXRlcmF0aW9uTW9kZSkpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODUsNiArMjg1LDcgQEAgdm9pZCBTdHJ1Y3R1cmVT
dHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywg
KnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNz
VHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAg
ICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CkBAIC00MzAsNiArNDMx
LDEwOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9j
YWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86Omlu
aXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvKQoreworICAgIGFjY2Vzc1R5cGUgPSB1bmxpbmtlZFN0
dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0YXJ0OyAv
LyBPT1BTOiBkbyB3ZSBuZWVkIGEgc3RhcnQgZm9yIGRhdGEgSUNzPworICAgIGRvbmVMb2NhdGlv
biA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2Nh
dGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgIGNhbGxT
aXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7
CisgICAgY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUlu
ZGV4KTsKKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6
RGVsZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5
VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsQnlJ
ZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlb2Y6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgor
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1
bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJl
Y3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgp
KQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5s
aW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0
T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gb3BlcmF0aW9u
UHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZh
bDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5m
by5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6
OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3Ry
aWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFs
RGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVG
aWVsZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFBy
aXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hl
Y2tQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNr
UHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIE9P
UFM6IGhhbmRsZSBpdGVyYXRvcl9uZXh0IHZhbHVlIGluIHVzZWQgcmVnaXN0ZXIgc2V0LgorfQor
CiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmNoZWNrQ29uc2lz
dGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlW
YWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAg
ICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzc5
LDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAog
fTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVy
ZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDEsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBp
bml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBDaGVj
ayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRv
ZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTQ0Nyw2ICs0NTIsMTggQEAgaW5saW5lIGF1
dG8gYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bgogICAgIH0KIH0KIAorc3RydWN0IFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8geworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICBQ
dXRLaW5kIHB1dEtpbmQ7CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRL
aW5kOworICAgIEVDTUFNb2RlIGVjbWFNb2RlOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleDsKKyAgICAvLyBPT1BTOiBEbyB3ZSBuZWVkIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMg
ZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRo
ZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2Nh
dGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJ
KHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNiArMTc1LDcgQEAgcHVibGlj
OgogCiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3Rh
bnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3Qg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmly
dHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcu
dG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkg
eyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3
LDYgKzIwOCwxNSBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0
TW9kZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBj
b25zdDsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4
IGluZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0K
KyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3Ry
dWN0aW9ucygpLmF0KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNF
bmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2lu
ICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3Ry
dWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0
aW9uc1NpemUoKSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAg
IHVuc2lnbmVkIG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9j
YWxzOyB9CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsg
fQpAQCAtMzM0LDYgKzM0NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRh
LT5zaXplSW5CeXRlcygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVG
b3JGdXp6aW5nRWFybHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBh
cmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAg
ICAgcmV0dXJuICFpc0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KIAogcHJvdGVjdGVkOgogICAg
IFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwpAQCAtNDEwLDYgKzQy
NSw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBt
X2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFjZSB0byBz
dG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5
QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0
aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBt
X2V4aXRQcm9maWxlOwpAQCAtNDU1LDYgKzQ3MywyOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAg
fQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZz
ZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChvZmZzZXQpOworICAg
IH0KKworICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAg
ICBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRo
UHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3VuYXJ5QXJpdGhQ
cm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5h
cnlBcml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
QmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1
cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHVu
YXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlBcml0aFByb2ZpbGVz
W2ldOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNo
TWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw5ICsxMDEsMTggQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAg
ICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2
X3Q7CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZz
ZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBB
U1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9
IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRh
YmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0
ICsgc2l6ZW9mKE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9
CisKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfb2Zmc2V0VGFibGVFbnRyaWVzID0g
TlVNQkVSX09GX0JZVEVDT0RFX1dJVEhfTUVUQURBVEEgKyAxOyAvLyBvbmUgZXh0cmEgZW50cnkg
Zm9yIHRoZSAiZW5kIiBvZmZzZXQ7CiAKICAgICAvLyBOb3QgdG8gYnJlYWsgYWxpZ25tZW50IG9m
IDMyYml0IG9mZnNldCB0YWJsZSwgd2Ugcm91bmQgdXAgc2l6ZSB3aXRoIHNpemVvZihPZmZzZXQz
MikuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmls
ZS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAgdGVtcGxhdGU8
dW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzQXJndW1lbgogc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ug
ewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVy
T2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJP
ZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNr
ZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJP
ZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKQEAgLTEzNCw3
ICsxMzMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIAogICAgICAgICBy
ZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29kZWRKU1ZhbHVlIG1f
YnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxhdGVkVHlwZSBtX3By
ZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTU2LDYgKzE1NSw3IEBAIHN0cnVjdCBWYWx1ZVBy
b2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1Ymxp
YyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAgICBWYWx1ZVByb2Zp
bGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBzdHJ1Y3QgVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnkK
ICAgICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3Jj
LCB0eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUsIG1f
Y29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90Pihkc3QsIHNyYyk7
CkBAIC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbmMoUmVnaXN0
ZXJJRCogc3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BJ
bmM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUo
KSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVjOjplbWl0KHRoaXMs
IHNyY0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRk
VW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODIsNyArNjgy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklEKj4KICAgICAgICAg
ZW1pdEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJ
RCogc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBCaW5h
cnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAgICAgICAgICAgIEJp
bmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1fY29kZUJsb2NrLT5h
ZGRCaW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODg5LDcgKzg4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUK
IAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwp
IHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQs
IGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+
b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZs
ZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1f
aml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9u
IDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5Niw3ICs4OTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRH
UFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nh
c2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BS
LCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEp
OwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5ODUsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRl
TmEKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygp
OwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxv
Y2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6
UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRU
eXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRl
TmFtZSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJh
c2VHUFIpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3Ms
IEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVy
dHlJc1N5bWJvbCA9IHRydWU7CiAKQEAgLTE0NzQ3LDcgKzE0NzQ3LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNj
b3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5n
cHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tl
dFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJbmRl
eCk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVn
LCB0aGlzUmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5j
b2RlQmxvY2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMTcsNyArNDMxNyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAg
ICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0
ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9k
ZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAg
ICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFu
dGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAg
ICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIp
LCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+
c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CkBAIC0xMDM1NSw3ICsxMDM1NSw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
PSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBH
UFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlk
R1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAg
ICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0
LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAg
Q2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7
CiAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDY5OCw3ICsxMDY5OCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNU
YWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZv
OjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxD
YWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwOTc5LDcgKzEwOTc5LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQ
YXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAg
ICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJ
bnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0
aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0
LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5w
cmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjIgQEAgY2xhc3MgTWV0YWRhdGEKICAgICBkZWYg
c3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNvbnZl
cnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZp
eCwgZmllbGRzLCBnZW5lcmF0ZU9mZnNldE9mKQogICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8
ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAg
ICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4
ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAgICAgICAgICAiI3tw
cmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSwgZmFs
c2UpfVxuI3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAg
ICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGROYW1lfTsiCisgICAgICAgICAg
ICAgICAgICAgIGlmIGdlbmVyYXRlT2Zmc2V0T2YKKyAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSByZXN1bHQgKyAiXG4iICsgInN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFt
ZVswXS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJldHVybiBPRkZTRVRPRihNZXRhZGF0
YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0CiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmQu
am9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRz
KCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAg
ICAgICAgIiwgQGZpZWxkcywgdHJ1ZSkKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBp
ZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5OCw4ICs2OTgsMTMgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6
OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxD
YWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBp
bmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwog
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7Cisg
ICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgaW5mbyk7Cit9
CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xv
YmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxs
KCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
ICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
MTgsNiArMTcxOCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVh
bENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1p
dFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyop
OwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCBy
ZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYg
KzQzLDYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sbwogICAgIHN0
b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CiB9CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dT
aGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0
aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4KQotewotICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgZnJhbWUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Ci0gICAgc3RvcmVWYWx1
ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKLSAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNj
b3BlKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVC
bG9jaykpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSks
IEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFj
a2V0LCBjYWxsU2l0ZUluZGV4KSkpOwotfQotCiB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hh
ZG93Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3Jh
dGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAgIFNoYWRvd0NoaWNrZW4qIHNo
YWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4
NDAsMTggQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9s
YXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRv
cCBvZgogICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQg
bG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJl
ZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcg
c2NvcGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIENvZGVCbG9ja1R5cGU+CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChH
UFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBD
b2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQorICAg
IHsKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFt
ZSkpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgICAgIHN0b3JlVmFsdWUodGhp
c1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7CisgICAgICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2Nv
cGUpKSk7CisgICAgICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAg
ICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2Fs
bFNpdGVJbmRleCkpKTsKKyAgICB9CisKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEgcG9pbnRlciB0
byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQuCiAgICAgdm9p
ZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BS
UmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkocmV2
aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
ZmxlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogCiB2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CisgICAgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJz
KGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwordm9pZCBDYWxsRnJhbWVT
aHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMpCit7CiAgICAgUmVnaXN0ZXJTZXQgY2FsbGVl
U2F2ZVJlZ2lzdGVycyB7IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB9Owot
ICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMgPSBj
b2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5zaXplKCk7ICsraSkgewogICAgICAgICBSZWdp
c3RlckF0T2Zmc2V0IGVudHJ5IHsgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChpKSB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEu
aAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoK
ICAgICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZhbGlkR1BSUmVnIH07CiAKICAgICB2
b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldHVw
Q2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCopOwogI2VuZGlm
CiAgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBAIEpJVDo6SklUKFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxz
ZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOwogfQogCiBKSVQ6On5KSVQo
KQpAQCAtOTAsOCArOTEsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2so
KQogICAgICAgICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0gICAgCi0g
ICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihP
cHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRk
cmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
IHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0
aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1Qw
LCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBBU1NFUlQo
IW1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxl
ZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCkudG9wRW50cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNCwxOCBAQCB2b2lkIEpJVDo6ZW1pdE5v
dGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBw
b2ludGVyVG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcg
cG9pbnRlclRvU2V0KQogewogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJl
c3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25seUNo
ZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQordm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25seUNo
ZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhclJlYWRPbmx5
V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFyUmVhZE9ubHlXYXRjaHBvaW50KSks
IHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBZGRyZXNz
KHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0z
MihJc0ludmFsaWRhdGVkKSkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9p
bnRlck9mZnNldCgpCkBAIC0xMjksNyArMTMzLDcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9p
bnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwor
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRD
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7
CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsKQEAgLTE4MSwyMSAr
MTg1LDQxIEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWMKICAgICBz
bG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1dENvZGVCbG9ja1RvRnJh
bWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxp
bmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOworICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVzdWx0KTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVP
clJhcmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGJyYW5jaFRl
c3RQdHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9u
OjpyYXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uUmFy
ZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBy
ZXN1bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAgICBpZiAobV91bmxpbmtl
ZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVz
dWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkp
LCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVu
Y3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSksIHJlc3VsdCk7CisK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpv
ZmZzZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIocmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworfQorCiB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQot
ICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICAg
ICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4iKTsKICAg
ICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3VtZW50Q291
bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3RydWN0aW9u
Q291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAKICAg
ICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJsb2NrLT52
bSgpOworICAgIFZNJiB2bSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnZtKCk7CiAgICAgQnl0ZWNv
ZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7CisKKyAgICAvLyBPT1BTOiBNYXliZSBvbmx5
IGRvIHRoaXMgaWYgd2UgZGlzYWJsZSBzaGFyaW5nIHNvbWVob3c/CisgICAgLyoKICAgICBpZiAo
bV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4ICYmIChtX2NvZGVCbG9jay0+aW5oZXJpdHM8UHJv
Z3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0czxNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrPih2bSkpKSB7CiAgICAgICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgb3B0aW1p
emF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFtQ29kZUJsb2NrJ3MgZXhhY3RseSBvbmNl
LgogICAgICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBiZSBpbnZhbGlkIG90aGVyd2lz
ZS4gV2hlbiB0aGUgTExJbnQgZGV0ZXJtaW5lcyBpdCB3YW50cyB0bwpAQCAtMjM2LDYgKzI2MCw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KKyAgICAqLwogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UgPSAwOwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CkBAIC0yNzgsOSAr
MzAzLDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAgIHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewot
ICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAgICAg
ICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7Ci0gICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tv
cGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2Nr
KTsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJh
bWUqPigpLT5jb2RlQmxvY2soKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwg
Ynl0ZWNvZGVPZmZzZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3
UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjdHguZ3ByPENvZGVCbG9jayo+KHJlZ1QwKSk7CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgfQogCkBAIC01MjcsNyArNTUyLDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0
VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2Rl
SW5kZXgpLnB0cigpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkK
ICAgICAgICAgICAgIGRhdGFMb2dMbigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBm
b3IgIiwgbV9ieXRlY29kZUluZGV4LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgp
KTsKQEAgLTU0NSw4ICs1NzAsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQogCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0
aW9uKCkpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9j
b2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0
eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxG
cmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsi
LCBieXRlY29kZU9mZnNldCwgIl0gU0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2Zy
ICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9CkBAIC02NzYsMTcgKzcwMSwxNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMoKQogCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxp
emluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5
TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgLy8gT09Q
UzogTWF5YmUgdGhpcyBzaG91bGQgYmUgZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJsb2NrPworICAg
IERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJp
bGl0eUxldmVsKCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RD
b21waWxlOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2Fu
QmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmls
aW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgog
ICAgIGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1p
emVkID0gdHJ1ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAg
ICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CkBAIC02OTQsMzUgKzcxOCwzOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtX
aXRob3V0RmluYWxpemluCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKLSAgICBzd2l0Y2gg
KG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7CisgICAgLy8gT09QUzogaGFuZGxlIHRoaXMgZWxz
ZXdoZXJlPworICAgIHN3aXRjaCAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSkgewog
ICAgIGNhc2UgR2xvYmFsQ29kZToKICAgICBjYXNlIE1vZHVsZUNvZGU6CiAgICAgY2FzZSBFdmFs
Q29kZToKLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFs
c2U7CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
ID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRnVuY3Rpb25Db2RlOgogICAgICAg
ICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0
ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCiAgICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRo
YXQgb2JzZXJ2YXRpb24uCi0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5s
aW5lZCAmPSBjYW5JbmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbihtX2Nv
ZGVCbG9jayk7CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkICY9IGNhbklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1f
cHJvZmlsZWRDb2RlQmxvY2spOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAobV9j
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2RlQmxv
Y2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAg
aWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQotICAg
ICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBU
YWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5u
dW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMg
PSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9j
ay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29kZUJs
b2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAg
IGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxl
cygpKQorICAgICAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxl
SnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVt
cFRhYmxlcygpKTsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRDb2Rl
QmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAgIH0K
IAotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQ
cm9maWxlcigpKSkpCi0gICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNh
c3NlbWJsZXI+KG1fY29kZUJsb2NrKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERp
c2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpk
aXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIE9PUFM6IGJ1
aWxkIGEgZGlzYXNzZW1ibGVyIG9mZiB1bmxpbmtlZCBjb2RlIGJsb2NrCisgICAgICAgIG1fZGlz
YXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2RlQmxv
Y2spOworICAgIH0KICAgICBpZiAoVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
KSkgeworICAgICAgICAvLyBPT1BTOiBidWlsZCBwcm9maWxlciBkaXNhc3NlbWJsZXIgb2ZmIHVu
bGlua2VkIGNvZGUgYmxvY2sKICAgICAgICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAogICAg
ICAgICAgICAgbmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBtX3Zt
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9jayks
CisgICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRl
Y29kZXNGb3IobV9wcm9maWxlZENvZGVCbG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmlsZXI6
OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVz
KCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9j
b21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlciwgbV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUlu
ZGV4KDApKSk7CkBAIC03NDIsMTEgKzc2OSwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtX
aXRob3V0RmluYWxpemluCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlKQorICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJv
bG9ndWUoKTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJhbWVU
b3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVkIG1h
eEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZy
YW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlzdCBz
dGFja092ZXJmbG93OwpAQCAtNzU3LDE2ICs3ODUsMTkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRM
aW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVDYWxs
ZWVTYXZlcygpOworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRM
aXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0ZXJp
YWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZSkgeworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2Rl
VHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmco
KSAmJiAoIW1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7Cisg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1
bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVkVmVjdG9yOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJl
Z1QyKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50
IDwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CiAg
ICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdhbnQg
dG8gcHV0IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCiAgICAgICAgICAgICAgICAgLy8g
a2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gcmVj
b3JkIHRoZSBkdW1teSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlz
Q29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCisgICAgICAgICAgICAgICAgaWYgKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxsRnJhbWU6
OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC03NzcsMTIgKzgwOCwx
MiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgICAg
ICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQ
UigpKTsKICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwg
b2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRS
ZWdzLnRhZ0dQUigpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSwgcmVz
dWx0UmVncyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdzLCBBZGRyZXNz
KHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpICsgVmFsdWVQcm9maWxlOjpv
ZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
ICAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2RlQmxvY2stPmpp
dFR5cGUoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXplTWFya2VyKSkK
ICAgICAgICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92ZSgqc2l6ZU1h
cmtlciksICp0aGlzKTsKQEAgLTc5OSwyNCArODMwLDI3IEBAIHZvaWQgSklUOjpjb21waWxlQW5k
TGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNhbGxPcGVyYXRpb25X
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZs
b3dFcnJvciwgbV9jb2RlQmxvY2spOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb25XaXRo
Q2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dF
cnJvciwgcmVnVDApOwogCiAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGlzIDEs
IHdlIG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCi0gICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4
dXAgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7Ci0gICAgaWYgKG1fY29kZUJs
b2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsK
KyAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSAhPSAxOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKICAgICAgICAgbV9hcml0
eUNoZWNrID0gbGFiZWwoKTsKLSAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgJm1fY29k
ZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7CisKICAgICAgICAgZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2Nr
LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9G
cmFtZUluUHJvbG9ndWUocmVnVDApOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCBB
ZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkp
KTsKIAogICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyksIHJlZ1QxKTsKLSAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKS5saW5r
VG8oYmVnaW5MYWJlbCwgdGhpcyk7CisgICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVn
VDEsIFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKS5s
aW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAKICAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleCgwKTsKIAogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90
PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbiht
X2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVj
ayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
OworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2Fs
bEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVj
dG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5
Q2hlY2ssIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJyYW5jaFRl
c3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwpAQCAt
ODM5LDcgKzg3Myw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4K
ICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKICAgICBtX3Bj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKLSAgICBtX2xpbmtCdWZmZXIgPSBz
dGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fY29kZUJs
b2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CisgICAgbV9s
aW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0
aGlzLCBtX3VubGlua2VkQ29kZSwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVm
Zm9ydCkpOwogICAgIGxpbmsoKTsKIH0KIApAQCAtODU4LDggKzg5Miw4IEBAIHZvaWQgSklUOjps
aW5rKCkKICAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewogICAgICAgICBjYXNlIFN3aXRj
aFJlY29yZDo6SW1tZWRpYXRlOgogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVy
OiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
LSAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRT
aW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZVt0YWJsZUluZGV4XTsKICAgICAg
ICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRP
ZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB1bmxpbmtlZFRh
YmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzW2pdOwpAQCAtODcxLDgg
KzkwNSw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU3dp
dGNoUmVjb3JkOjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8gY3Rp
RGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZv
ciAoYXV0byYgbG9jYXRpb24gOiB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUudmFsdWVzKCkp
IHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsb2NhdGlvbi5tX2JyYW5jaE9m
ZnNldDsKQEAgLTkxOSwxOSArOTUzLDE0IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CiAKICAg
ICBmb3IgKGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewot
ICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5m
bzsKLSAgICAgICAgaW5mby5zZXRDb2RlTG9jYXRpb25zKAotICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhT
dGFydCksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pKTsKKyAgICAgICAgVW5saW5rZWRDYWxs
TGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOwor
ICAgICAgICBpbmZvLmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbik7CiAgICAgfQogCi0gICAg
ewotICAgICAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJl
bHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxk
ZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAg
ICB9Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVy
LmZpbmFsaXplKCkpOworICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwor
ICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1f
bGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5h
cHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDIz
ICs5NjksMzMgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWSht
X2NvbXBpbGF0aW9uKSkgeworICAgICAgICAvLyBPT1BTCiAgICAgICAgIGlmIChPcHRpb25zOjpk
aXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkKICAgICAgICAgICAgIG1fZGlzYXNzZW1i
bGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fY29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsK
LSAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2Nv
ZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOworICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcHJvZmlsZWRDb2RlQmxvY2ssICptX2NvbXBpbGF0aW9u
KTsKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRN
YXBwaW5nKCkpCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9D
b2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hC
dWZmZXIpOwogICAgIAorICAgIC8vIE9PUFM6CiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBy
ZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRh
ZywKLSAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxv
Y2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkp
OworICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9j
a1dpdGhKSVRUeXBlKG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSku
ZGF0YSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
d2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1f
YXJpdHlDaGVjayk7Ci0gICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2Rl
KHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSk7CisgICAgbV9q
aXRDb2RlID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlD
aGVjaykpOworCisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBXVEZNb3ZlKG1fdW5s
aW5rZWRDYWxscyk7CisgICAgbV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9zID0gV1RGTW92
ZShtX2V2YWxDYWxsTGlua0luZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRTdHViSW5m
b3MgPSBXVEZNb3ZlKG1fdW5saW5rZWRTdHViSW5mb3MpOworICAgIG1faml0Q29kZS0+bV9zd2l0
Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0Q29k
ZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXMpOworICAgIG1faml0Q29kZS0+bV9qaXRDb2RlTWFwID0gaml0Q29kZU1hcEJ1aWxkZXIu
ZmluYWxpemUoKTsKKyAgICBtX2ppdENvZGUtPmFkb3B0TWF0aElDcyhtX21hdGhJQ3MpOwogCiAg
ICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVy
YXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhl
Y3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxl
TWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdl
bmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ss
IHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0
LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKIENvbXBpbGF0
aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQpAQCAtOTY4LDExICsxMDA3LDEz
IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlu
a0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAg
ICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9k
ZTo6TGF0ZVNocmluayk7Ci0gICAgfQorICAgIC8vIE9PUFM6IERvbid0IHRoaW5rIHRoaXMgaXMg
ZG9pbmcgYW55dGhpbmcgYW55bW9yZS4KKyAgICAvL3sKKyAgICAvLyAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgIC8vICAgIG1fY29kZUJsb2Nr
LT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7
CisgICAgLy99CiAKKyAgICAvLyBPT1BTOiBNb3ZlIHRoaXMgdG8gImxpbmtpbmciIHdpdGggYmFz
ZWxpbmUgSklUIGNvZGUuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+
bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKICAgICAgICAgSGFuZGxlckluZm8m
IGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKICAgICAgICAgLy8g
RklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCkBAIC05ODQsNyArMTAyNSw3IEBAIENv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fdm0tPm1hY2hp
bmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+YWRkKAogICAgICAgICBz
dGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgpKSAvCi0gICAgICAgIHN0YXRpY19j
YXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOworICAgICAgICBz
dGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUo
KSkpOwogCiAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25O
dWxsKCkpOwogCkBAIC0xMDQyLDE0ICsxMDgzLDE0IEBAIHZvaWQgSklUOjpkb01haW5UaHJlYWRQ
cmVwYXJhdGlvbkJlZm9yZUMKICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nl
c3NMb2dFbnRyaWVzKCptX3ZtLCAiUHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24uIl9zKTsK
IH0KIAotdW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVC
bG9jayogY29kZUJsb2NrKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0
YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2st
Pm51bUNhbGxlZUxvY2FscygpKSkpOwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdpc3RlckNv
dW50Rm9yRnJhbWVQb2ludGVyT2Zmc2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBt
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAotaW50IEpJVDo6
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoraW50IEpJVDo6c3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2Rl
QmxvY2spIC0gMSkub2Zmc2V0KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDYgKzUwLDM0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisgICAgY2xh
c3MgSklUQ29uc3RhbnRQb29sIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVzaW5nIENvbnN0YW50
ID0gdW5zaWduZWQ7CisKKyAgICAgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAg
ICAgICAgICBHbG9iYWxPYmplY3QsCisgICAgICAgICAgICBDYWxsTGlua0luZm8sCisgICAgICAg
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAgICAgIEZ1bmN0aW9uRGVjbCwKKyAgICAg
ICAgICAgIEZ1bmN0aW9uRXhwciwKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgVmFsdWUg
eworICAgICAgICAgICAgVHlwZSB0eXBlOworICAgICAgICAgICAgUGFja2VkUHRyPHZvaWQqPiBw
YXlsb2FkOworICAgICAgICB9OworCisgICAgICAgIENvbnN0YW50IGFkZChUeXBlIHR5cGUsIFBh
Y2tlZFB0cjx2b2lkKj4gcGF5bG9hZCA9IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgICAgIG1fY29u
c3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBWZWN0b3I8VmFs
dWU+IG1fY29uc3RhbnRzOworICAgIH07CisKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7
CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOwpAQCAtMTQ5LDkgKzE3Nyw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5m
byB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2Vk
Q2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5r
SW5mb0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0Nh
bGxlZUZ1bmN0aW9uKTsKQEAgLTE4OCw4ICsyMTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVD
b21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJh
bWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOwotICAgICAgICBzdGF0aWMgaW50IHN0YWNr
UG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZy
YW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOworICAgICAgICBzdGF0aWMg
aW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogCiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBp
bGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMg
dG90YWxDb21waWxlVGltZSgpOwpAQCAtMjIzLDYgKzI1MSwzMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgorICAgICAgICB2b2lkIGxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXpl
X3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KKyAgICAgICAgdm9pZCBsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXpl
X3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KKyAgICAgICAgdm9pZCBsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0YShWYWx1
ZVR5cGUsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQ
UlJlZywgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAg
ICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOwor
ICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2Fk
Q29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworCisgICAgICAgIHZv
aWQgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdU
MCk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5k
bGVyKTsKQEAgLTI1OCwxNiArMzEwLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6
OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJn
cyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgICYm
IE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExp
bmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxf
dmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAg
ICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lk
PiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
Y2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
ICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwo
Y29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0lu
ZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAg
IHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yOTEsMTAgKzM0MywxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2Zp
bGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAv
LyBzY3JhdGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFk
YXRhJiwgR1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAg
Ly92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAg
ICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1
ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBC
eXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEm
LCBKU1ZhbHVlUmVncyk7CkBAIC0zMDcsNiArMzU5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2Vs
bEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9p
ZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdp
c3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVn
aXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRl
Y29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hH
UFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBl
Y21hTW9kZShPcCk7CkBAIC01OTIsNyArNjQ4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjI2LDE0
ICs2ODEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUpOwotICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRl
U2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0
SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2Us
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQg
ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQg
ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAg
ICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlKTsKKyAgICAgICAgdm9p
ZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BS
UmVnKTsKKyAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BS
UmVnIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKICAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNs
b3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02NDUsNyArNzAwLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3Jp
dGUoV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcg
cG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQ
UlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShK
U1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsK
ICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRk
cmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwog
ICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpA
QCAtNjU0LDYgKzcwOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1
dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsK
IAorICAgICAgICBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpT
VmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wg
aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09w
ZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY5NSwyNiArNzUxLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9i
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBl
IyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVf
R0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVf
R0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9y
T3BSZXNvbHZlU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIE1vZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQg
aW5saW5lIHRoYW4gdXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVW
YXIgYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3Bl
LgotICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFy
IHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNM
QVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVf
IyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVf
VFlQRShERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVT
T0xWRV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29u
c3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9u
YWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNj
b3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFt
ZSk7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7
CkBAIC05MTgsMTEgKzk1Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1p
emVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBt
X2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2Zp
bGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAg
Ym9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2Fu
QmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFi
bGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQg
b2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAg
ICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC05
MzAsMTMgKzk2Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBib29sIHJl
cG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRp
bWVzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB5b3UgbmVlZCB0byBjaGVjayBhIHZhbHVl
IGZyb20gdGhlIG1ldGFkYXRhIHRhYmxlIGFuZCB5b3UgbmVlZCBpdCB0bwotICAgICAgICAvLyBi
ZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFzdCBhbmQgc2xvdyBwYXRoLCB0aGVuIHlvdSB3YW50
IHRvIHVzZSB0aGlzLgotICAgICAgICAvLyBJdCB3aWxsIGdpdmUgdGhlIHNsb3cgcGF0aCB0aGUg
c2FtZSB2YWx1ZSByZWFkIGJ5IHRoZSBmYXN0IHBhdGguCi0gICAgICAgIEdldFB1dEluZm8gY29w
aWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBC
aW5hcnlPcD4KLSAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShC
aW5hcnlPcCk7CiAKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKQEAgLTk2
Myw5ICs5OTIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50
cnk+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVz
OwogCi0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dElu
Zm9zOwotICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29w
aWVkQXJpdGhQcm9maWxlczsKLQogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsK
ICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTk5LDExICsxMDI1LDIyIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0aW9uKiwgVW5pcXVl
UmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRp
b25TdGF0ZTsKIAogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJvb2wg
bV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9m
aWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4
OwogCi0gICAgICAgIFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgICAgIE1h
dGhJQ0hvbGRlciBtX21hdGhJQ3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1f
aml0Q29kZTsKKworICAgICAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAg
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5r
ZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5m
bz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1
bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdK
dW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBHUFJSZWcgbV9t
ZXRhZGF0YUdQUjsKKyAgICAgICAgR1BSUmVnIG1fY29uc3RhbnRzR1BSOwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQ
UjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/
IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0zMjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJlZ1QxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDIsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyAr
Mzc1LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0K
IAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTU3Myw3ICs1NzcsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgCiAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6
ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0
ZT4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMq
IG5lZ2F0ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAg
VW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51
bmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJv
ZmlsZUluZGV4KTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVn
SUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIg
dG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2Fu
IGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFy
aXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0
KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJ
QyogYWRkSUMgPSBtX21hdGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2lu
c3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVt
aXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25W
YWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwx
MSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBn
ZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElD
R2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAg
ICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxl
KCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChh
cml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUp
OworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0g
ZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhK
dW1wcyk7CiAKQEAgLTEwMTUsMTAgKzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0
KEpJVEJpbmFyeU1hdGhJQwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgp
KQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAg
ICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFBy
b2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAg
aWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJl
Z3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOwor
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNl
CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBz
KTsKIApAQCAtMTA1NSwxMyArMTA2MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklU
VW5hcnlNYXRoSUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQp
OwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAg
ICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAg
fSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWlj
PihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVu
Y3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMp
KTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBs
YWJlbCgpOwpAQCAtMTEyMCwxMyArMTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUQmluYXJ5TWF0aElDCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewog
ICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkK
LSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pK
TWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFBy
b2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJl
Z1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9u
KSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRo
RW5kID0gbGFiZWwoKTsKQEAgLTExNjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rp
dihjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBh
cml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3Vu
bGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERpdj4oKS5tX3Byb2ZpbGVJbmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3Bl
cmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFu
ZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIx
MSw4ICsxMjIwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJp
dGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3Vu
bGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE11bD4oKSk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElD
KGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVN
dWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChj
b25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKSk7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9tYXRo
SUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElD
LmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1
Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwg
b3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDcg
QEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAgICAgc3RvcmVQdHIoY2FsbEZy
YW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQo
KSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBy
ZWdUMik7CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKGNvbnN0IAogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwogICAgIGVt
aXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zMjQsNyArMzI0LDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dD
YXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
ICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1
bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDcgKzM0MSw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFy
dCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAt
MzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBP
cCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZv
cihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVy
KCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTAgKzUzLDkgQEAgc3RkOjplbmFibGVfaWZfdDwKICAg
ICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9j
b25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFy
YXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAs
IHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExp
bmtJbmZvKikKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHVuc2lnbmVkIGNoZWNrcG9pbnQgPSBtX2J5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGludCBhcmdDb3VudEluY2x1ZGluZ1RoaXMgPSBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2ludCk7CiAgICAg
aW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oc3RhY2tPZmZzZXRJblJlZ2lz
dGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpKTsKIApAQCAtNjQsNyArNjMsNyBAQCBK
SVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1l
Ojphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAg
ZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgIHN0b3Jl
MzIocmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0YSwgY2hlY2twb2ludCkuYWRkcmVzc09m
TGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJ5dGVjb2RlLCByZWdUMCwgcmVnVDApOwogICAgICAgICBkb25lLmxpbmsodGhpcyk7
CiAgICAgfQogCkBAIC03OCw3ICs3Nyw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9w
Y29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0
X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
T3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgot
SklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyog
aW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewogICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC05MSw3ICs5MCw4IEBA
IEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2l6ZU9w
ZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7CiAgICAgZWxz
ZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJnczsK
LSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJB
cmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOworICAgIGNhbGxPcGVyYXRp
b24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0
VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0ZXIp
LCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIs
IGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLShzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKQEAgLTEwMSwxNCArMTAxLDE2IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cEZvcndh
cmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3Bl
cmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlv
biwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgcmVn
VDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Myk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QxLCByZWdU
MiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KICAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJl
Z1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCBy
ZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9D
b25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86
Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJlZ1QzKTsKKyAgICBK
dW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1QyKTsKKyAgICBzdG9y
ZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsKICAg
ICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywxNiArMTI5LDE2IEBAIGJvb2wg
SklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxhdGU8PgogYm9vbCBKSVQ6OmNv
bXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkKIHsKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAgIHN0b3JlUHRyKGNhbGxG
cmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0
KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgYXJndW1lbnRH
UFIxKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhhcmd1bWVudEdQ
UjEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgcmVnVDEsIHJlZ1QyKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDAp
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBh
cmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJldHVyblZh
bHVlR1BSKSk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiAKQEAgLTE0OCw3
ICsxNTAsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9j
ay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CisgICAgQ2Fs
bExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBy
ZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAt
MTU2LDQzICsxNTgsNDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0
IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0
ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2Jq
ZWN0KCptX3ZtLCBpbmZvKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYs
IENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQoteworYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChj
b25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQsIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQpIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wg
SklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIENhbGxMaW5r
SW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCitib29sIEpJVDo6Y29tcGls
ZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5m
byogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0gICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEg
c2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1f
YXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJl
clRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9CisgICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2Fs
bEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBi
eXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVyID0gR1BS
SW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAgc2h1ZmZsZURhdGEtPm51bUxvY2FscyA9CiAg
ICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVv
ZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdj
KTsKKyAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAgICAg
c2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgIHNodWZmbGVEYXRhLT5hcmdzW2ldID0KICAg
ICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKICAgICAgICAgICAg
ICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29k
ZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKICAgICB9Ci0gICAgc2h1
ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERh
dGFGb3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1f
Y29kZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsK
KyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERh
dGFGb3JtYXRKUyk7CisgICAgc2h1ZmZsZURhdGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygm
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
OwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
KnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsK
LSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9y
VGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1Qy
KTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CisgICAgICAgIENhbGxGcmFt
ZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAg
IH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CisKKyAgICBzaHVmZmxlRGF0YS0+c2hy
aW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxl
RGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRp
b247CiAgICAgCkBAIC0yMTgsMTQgKzIyMywyNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChj
b25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBD
b2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFm
dGVyIHJldHVybi4KICAgICAqLwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0g
ICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJs
b2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBj
b21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CisKKyAgICBVbmxpbmtlZENhbGxMaW5r
SW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBpbmZv
Q29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKSB7
CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbV91bmxpbmtlZENhbGxzLmFk
ZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
ICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQp
OworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAgICAgQVNTRVJUKG1fY2Fs
bENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBt
X2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CisgICAg
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5saW5rZWRDYWxs
TGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50OworICAgIH0KKyAg
ICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAogICAgIC8vIFNQ
IGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1
bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29kZUJs
b2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgpA
QCAtMjM0LDE2ICsyNTAsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0lu
Zm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Io
b3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxs
Q29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChjb21waWxlVGFpbENhbGwo
Ynl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBpZiAoY29tcGlsZVRhaWxD
YWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFudCwgcmVnVDIpOwog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMg
PSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENh
bGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdU
MiwgWyZdIHsKKyAgICAgICAgICAgIC8vIE9PUFMKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwog
ICAgICAgICB9KTsKQEAgLTI1MywxMyArMjY2LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
KGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xv
d1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5r
SW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZv
OjplbWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25l
TG9jYXRpb24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBt
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRv
bmVMb2NhdGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAg
LTI3MywyMCArMjg2LDIyIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3Qg
SW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAK
LSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cykKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cykgeworICAgICAgICAvLyBPT1BTCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKKyAgICB9CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlzKTsKKyAgICBDYWxs
TGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgqbV92bSwgKnRoaXMsIHJlZ1QyKTsKIAogICAg
IGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7
CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcD4oKTsKQEAgLTM5NSwxNyArNDEwLDMwIEBAIHZvaWQgSklUOjplbWl0X29wX2l0
ZXJhdG9yX29wZW4oY29uc3QgSW4KIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJnZt
KCkucHJvcGVydHlOYW1lcy0+bmV4dDsKICAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgbW92
ZShyZWdUMCwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxLCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9u
ZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRHUFIpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CkBAIC00MTYsMTAgKzQ0
NCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChq
dW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgR1BSUmVnIGl0
ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKICAgICBub3RPYmpl
Y3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyYXRvckdQUikpOwogICAgIG5vdE9iamVjdC5h
cHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0b3JHUFIpKTsKQEAgLTQzMiwxOSArNDU4LDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRk
cmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgbmV4
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgbW92ZShpdGVyYXRvckdQUiwgYXJndW1l
bnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIAogICAgIGF1dG8gZG9uZSA9IGp1bXAo
KTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9i
amVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKIH0KQEAgLTQ1Miw3
ICs0NzYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewogICAgICAgICBzd2l0Y2gg
KGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNhc2UgTmFycm93OiByZXR1cm4gaXRl
cmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC00NzAsNTAgKzQ5Myw3NCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgSnVtcCBmYXN0Q2FzZSA9IGJy
YW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpKTsKIAogICAgIGdl
bmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgb3I4KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1
aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIEFic29sdXRlQWRkcmVzcygmbWV0YWRh
dGEubV9pdGVyYXRpb25NZXRhZGF0YS5zZWVuTW9kZXMpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdGlvbk1l
dGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9mU2Vlbk1vZGVzKCksIHJl
Z1QwKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihJdGVyYXRp
b25Nb2RlOjpHZW5lcmljKSksIHJlZ1QwKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1QwLCBi
eXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdGlvbk1ldGFk
YXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9mU2Vlbk1vZGVzKCkpOwogICAg
IGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgLy8gY2FsbCBy
ZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkgaW4gcmVnVDAKIAotICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7Ci0gICAg
R1BSUmVnIGRvbmVHUFIgPSByZWdUMTsKLSAgICAvLyBpdGVyUmVzdWx0R1BSIHdpbGwgZ2V0IHRy
YXNoZWQgYnkgdGhlIGZpcnN0IGdldCBieSBpZCBiZWxvdy4KLSAgICBtb3ZlKHZhbHVlR1BSLCBp
dGVyUmVzdWx0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJD
YWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKIAorICAgIGNvbnN0ZXhwciBH
UFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OwogICAgIHsK
LSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1bHRHUFIpOworICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gYmFzZUdQUik7
CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOwogCiAgICAg
ICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHZhbHVlR1BSKTsKKyAg
ICAgICAgcHJlc2VydmVkUmVncy5hZGQoaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5
dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCi0g
ICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhpdGVyUmVz
dWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHJlZ1QzLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
KTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChC
eXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAor
ICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
Zmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IGRvbmVH
UFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBk
b25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CiAKLQog
ICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7Ci0gICAgICAgIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzKGRvbmVH
UFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
IHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
MSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAg
ICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7
CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBK
U1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1Qx
LCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbEdQUik7CiAKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnJlc3VsdDsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCku
cHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNW
YWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZv
R1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVl
UmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAogICAgICAgICBpdGVy
YXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1NzQsNTUgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzY3JhdGNoOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJl
ZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdU
MjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlzdCBu
b3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJS
ZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRl
ckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2
bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAgICAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0LmFw
cGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVj
dC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAotICAgICAg
ICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFy
Z0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86
Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJn
dW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
ICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworCisg
ICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKwor
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgZG9u
ZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
aXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9p
bnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25U
aHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAgfQogCiAg
ICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0
ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQg
PSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAg
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVy
UmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCku
cmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTU5LDEwICsxNTksMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAgICB7CisgICAgICAgIGlmIChKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkgLy8gT09QUworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBl
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNl
RGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkBAIC0yNDgsNiArMjQ4LDQxIEBAIHBy
b3RlY3RlZDoKICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1fcmVmOwogfTsKIAorY2xhc3Mg
TWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xk
ZXImIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRk
SUNzKTsKKyAgICAgICAgbV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAgICAg
ICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICAgICAgbV9zdWJJQ3Mg
PSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRkSklU
QWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRkSUNz
LmFkZChhcml0aFByb2ZpbGUpOyB9CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9m
aWxlKTsgfQorICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKyAgICBK
SVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyBy
ZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKworCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6
OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAg
SklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJu
IGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJh
dG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5l
cmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRNdWxJQyogYWRk
TWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVsSUMo
cHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
ID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVn
R2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5hcnlB
cml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZh
bHVlPjo6dHlwZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSog
cHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKworcHJpdmF0ZToKKyAg
ICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Cisg
ICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOwor
fTsKKwogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoRGlyZWN0SklUQ29k
ZSk7CiBjbGFzcyBEaXJlY3RKSVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CiAg
ICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKERp
cmVjdEpJVENvZGUpOwpAQCAtMjY2LDYgKzMwMSwyMCBAQCBwcml2YXRlOgogICAgIENvZGVQdHI8
SlNFbnRyeVB0clRhZz4gbV93aXRoQXJpdHlDaGVjazsKIH07CiAKK2NsYXNzIEJhc2VsaW5lSklU
Q29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1Ymxp
YzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgICAgICA6IERpcmVjdEpJVENv
ZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKQor
ICAgIHsgfQorCisgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7
CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsgLy8gT09QUzogbWFr
ZSBzdXJlIHdlIHZpc2l0IHRoZXNlIHNvbWVob3cuIE9yIGFzc2VydCB3ZSBkb24ndCBoYXZlIHRv
LCBzaW5jZSB0aGV5J3JlIHZpcnR1YWwgY2FsbHMuCisgICAgQmFnPFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVt
cFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRh
YmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisgICAgSklUQ29kZU1hcCBtX2ppdENvZGVN
YXA7Cit9OworCiBjbGFzcyBOYXRpdmVKSVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJl
ZiB7CiBwdWJsaWM6CiAgICAgTmF0aXZlSklUQ29kZShKSVRUeXBlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKQEAgLTQ2
LDEwICs0Nyw5IEBAIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmYKIEpJ
VElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25z
dCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKLSAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9j
aykKLSAgICAsIG1faml0VHlwZShqaXRUeXBlKQorICAgIDogbV9qaXRUeXBlKGppdFR5cGUpCiB7
Ci0gICAgbV9zdHViSW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZv
KGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHVi
SW5mbyA9IGNvZGVCbG9jayA/IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29k
ZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUlu
ZGV4ID0gY2FsbFNpdGU7CiAKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzID0gdXNlZFJl
Z2lzdGVyczsKQEAgLTU5LDcgKzU5LDYgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6
ZmluYWxpemUoCiAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRo
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpCiB7CiAgICAg
bV9zdHViSW5mby0+c3RhcnQgPSBzdGFydDsKLQogICAgIG1fc3R1YkluZm8tPmRvbmVMb2NhdGlv
biA9IGZhc3RQYXRoLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obV9kb25lKTsKIAogICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCkBAIC02Nyw2ICs2NiwxNSBAQCB2
b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBtX3N0dWJJbmZvLT5z
bG93UGF0aFN0YXJ0TG9jYXRpb24gPSBzbG93UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihtX3Nsb3dQYXRoQmVnaW4pOwogfQogCit2b2lkIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBtX3N0
YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlD
KG1faml0VHlwZSkpOworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0cnVjdHVyZVN0
dWJJbmZvR1BSKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5l
UHRyVGFnKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJZEdlbmVyYXRv
cjo6SklUQnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBq
aXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQ
UikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEg
KzM4LDExMyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXI7CiBj
bGFzcyBDYWxsU2l0ZUluZGV4OwogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklUOwogY2xhc3Mg
U3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVu
dW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKK3N0cnVjdCBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVn
VDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307
CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpy
ZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Qy
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsK
K307CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICAvLyBXZSByZWx5
IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0
ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgorICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworICAg
IHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZv
OjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86
OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5mbzo6
cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUkluZm86OmFyZ3VtZW50R1BSMzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OmFyZ3VtZW50R1BS
MTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86Om5vbkFy
Z0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpu
b25BcmdHUFIxOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fz
c2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkp
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOwor
fTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQg
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdGhpc1ZhbHVlID0gR1BS
SW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlJZFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
byA9IEdQUkluZm86OnJlZ1QxOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitz
dHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9m
aWxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJyYW5kID0gR1BSSW5mbzo6cmVnVDE7
CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJh
c2UpOworICAgIHN0YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BS
SW5mbzo6cmVnVDI7Cit9OworCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90
ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDE1ICsxNjQs
MjAgQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZmZXImIGZh
c3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAogICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwotICAgIAor
CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwor
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2VkU3R1YkluZm8geyBu
dWxscHRyIH07CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4IHsgc3RkOjpudW1lcmljX2xpbWl0czxKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50Pjo6bWF4KCkgfTsKKwogcHJvdGVjdGVkOgotICAgIENvZGVCbG9jayogbV9jb2RlQmxv
Y2s7CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIG1fc3R1
YkluZm87CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9kb25lOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX3Nsb3dQYXRoQmVnaW47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
bV9zbG93UGF0aENhbGw7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7
IC8vIE9PUFM6IG1ha2UgcmVwb3J0Q2FsbCBwYXNzIHNvbWV0aGluZyBpbiB3ZSBjYW4gdXNlIGZv
ciB0aGUgbm9uLUNUSSB0aHVua3MgYnVpbGRzLiAKIH07CiAKIGNsYXNzIEpJVEJ5SWRHZW5lcmF0
b3IgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewpAQCAtMTMyLDggKzIzOSw4IEBA
IHB1YmxpYzoKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdp
biwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hl
YWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZh
bHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2lu
ZCk7CisgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5k
ZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVy
LAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0
dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAg
IHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxMyArMzUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6
OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0
dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUo
KTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
aXNEb3VibGUoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29u
c3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICgh
c3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBP
T1BTOiBmaW5kIGEgd2F5IHRvIGFzc2VydCB0aGF0IGFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFy
ZSBjZWxscy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJ
VDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJU
KHNyYy5pc0NvbnN0YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
c3JjKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAg
LTE4NSw3ICsyMTAsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4
CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKKyAgICBpZiAoIWlzS25v
d25DZWxsKHJlZykpCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjA1LDcg
KzIzMCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcygKIGlubGlu
ZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUlu
ZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5
dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygp
KTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byBy
ZXN1bHQgPSBtX2NoZWNrcG9pbnRMYWJlbHMuYWRkKG1fYnl0ZWNvZGVJbmRleCwgbGFiZWwoKSk7
CkBAIC0yMTUsNyArMjQwLDcgQEAgaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2tw
b2ludAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVt
cCBqdW1wKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygp
KTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVj
b2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSArIDEpOwogCiAgICAgYXV0byBpdGVyID0gbV9jaGVja3BvaW50TGFiZWxzLmZpbmQo
bV9ieXRlY29kZUluZGV4KTsKQEAgLTI5MywyOSArMzE4LDM0IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRDb3VudChBYnN0cmEKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVy
YW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5p
c0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0
cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Ci19
Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUm
IHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCi17Ci0gICAgQVNTRVJUKHNob3VsZEVt
aXRQcm9maWxpbmcoKSk7Ci0KLSAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9u
OiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0Ci0gICAgLy8gc3Rv
cmUuCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVBy
b2ZpbGUubV9idWNrZXRzKTsKLSNlbHNlCi0gICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVz
Y3JpcHRvciA9IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9m
aWxlLm1fYnVja2V0cyk7Ci0gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlw
dG9yLT5hc0JpdHMucGF5bG9hZCk7Ci0gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2Ny
aXB0b3ItPmFzQml0cy50YWcpOwotI2VuZGlmCi19CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
bnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworfQorCisvLyBPT1BT
CisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUm
IHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCisvL3sKKy8vICAgIEFTU0VSVChzaG91
bGRFbWl0UHJvZmlsaW5nKCkpOworLy8KKy8vICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZp
Z3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKKy8v
ICAgIC8vIHN0b3JlLgorLy8jaWYgVVNFKEpTVkFMVUU2NCkKKy8vICAgIHN0b3JlNjQodmFsdWUu
Z3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8jZWxzZQorLy8gICAgRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnBh
eWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKKy8vICAgIHN0b3JlMzIo
dmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKKy8vI2VuZGlmCisvL30K
IAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2
YWx1ZSwgdm9pZD4gSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShP
cCBieXRlY29kZSkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogI2Vsc2UKICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKQEAgLTMyMywyNCArMzUzLDI1IEBAIGlubGluZSBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pIHsgfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShN
ZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWVSZWdzIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUg
Qnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3Qg
Qnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKIHsKICAgICBpZiAoIXNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpKSwgdmFsdWUpOworICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyB2YWx1ZVByb2Zp
bGVPZmZzZXRGb3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpICsgVmFs
dWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7CisgICAgc3RvcmU2NCh2YWx1ZS5ncHIo
KSwgQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBvZmZzZXQpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVF
NjQpCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxl
JiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyByZXN1bHRSZWcpCi17Ci0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwotfQorLy9pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVBy
b2ZpbGUsIEdQUlJlZyByZXN1bHRSZWcpCisvL3sKKy8vICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKy8vfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7
CiB9CiAjZW5kaWYKIApAQCAtMzYwLDYgKzM5MSwyMSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXCiAgICAgfQogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitpbmxpbmUgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVy
SUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQoreworICAgIGlmIChzaG91bGRFbWl0
UHJvZmlsaW5nKCkpIHsKKyAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNl
bGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICBzdG9yZTMyVG9NZXRhZGF0YShzY3JhdGNoR1BSLCBieXRlY29kZSwgb2Zmc2V0T2ZBcnJheVBy
b2ZpbGUpOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5l
IHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit7CisgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRh
dGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNl
ZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3JhdGNoR1BSKTsKK30KKwogQUxXQVlTX0lOTElO
RSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMp
CiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKQEAgLTM4
MCw3ICs0MjYsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyCiBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0
YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0
YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAg
ICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsK
ICAgICB9IGVsc2UKICAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsK
QEAgLTQ5Niw3ICs1NDIsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVn
aXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1
YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVn
KSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29u
c3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UK
QEAgLTUwNiw3ICs1NTIsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1
YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewotICAgIGlmICghbV9jb2RlQmxvY2st
PmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAg
ICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OwogICAgICAgICBlbHNlCkBAIC01MTQsMTEgKzU2MCw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6
OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJu
IHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwot
fQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwg
aW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkp
IHsKQEAgLTU0NCw3ICs1ODUsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0Vmly
dHVhbFJlCiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewot
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Cisg
ICAgICAgIC8vIE9PUFM6IGhhbmRsZSBsaW5rIHRpbWUgY29uc3RhbnRzIGhlcmUuLi4KKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGdldENvbnN0YW50T3BlcmFuZChzcmMpOwogICAgICAgICBpZiAo
IXZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUodmFsdWUpKSwgZHN0KTsKICAgICAgICAgZWxzZQpAQCAtNTY2LDExICs2MDgsNiBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4g
c3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19
Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRk
cmVzc0Zvcihkc3QpKTsKQEAgLTU5NSw3ICs2MzIsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dDYXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tu
b3duQ2VsbCh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7
CiB9CiAKQEAgLTYzNywzMCArNjc0LDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFy
Z2V0KGNvbnN0IAogewogICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0g
ICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsK
LX0KLQotQUxXQVlTX0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1
dFRvU2NvcGUgYnl0ZWNvZGUpCi17Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRh
ZGF0YUlEICsgMTsgLy8gSGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2NvcGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0
b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1dElu
Zm8oaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0
SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJ
bmZvOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmlu
YXJ5QXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2Rl
KQotewotICAgIHVpbnQ2NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6
Om9wY29kZUlEKSArIDEpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1f
bWV0YWRhdGFJRCk7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5m
aW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2Zp
bGUgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIG1fY29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUp
OwotICAgIHJldHVybiBhcml0aFByb2ZpbGU7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxv
Y2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KQEAgLTY4MSw2ICs2OTUsNjEgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6
OmVjbWFNb2RlPE9wUAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQdHJG
cm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJS
ZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBtX3VubGlu
a2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkg
KyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQzMihB
ZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQ4
RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BS
UmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5r
ZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSAr
IG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5
cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRhZGF0
YShWYWx1ZVR5cGUgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNl
dCkKK3sKKyAgICBzdG9yZTgodmFsdWUsIEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgbV91bmxpbmtl
ZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsg
b2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OnN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwgY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlMzIodmFsdWUsIEFkZHJl
c3MobV9tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQ
UlJlZyByZXN1bHQpCit7CisgICAgYWRkUHRyKG1fbWV0YWRhdGFHUFIsIFRydXN0ZWRJbW1QdHIo
bV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0
ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
bG9hZENvbnN0YW50KEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY29uc3RhbnRJbmRleCwgR1BS
UmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3MobV9jb25zdGFudHNHUFIsIHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oY29uc3RhbnRJbmRleCkgKiA4KSwgcmVzdWx0KTsKK30KKworQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZEdsb2JhbE9iamVjdChHUFJSZWcgcmVzdWx0KQorewor
ICAgIGxvYWRDb25zdGFudChtX2dsb2JhbE9iamVjdENvbnN0YW50LCByZXN1bHQpOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lz
dGVyIGNvbnN0YW50LCBHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0
YW50LmlzQ29uc3RhbnQoKSk7CisgICAgLy8gT09QUzogTWF5YmUgbWFrZSB0aGlzIG1vcmUgZWZm
aWNpZW50PworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIG9mZnNldE9mQ29uc3RhbnRz
VmVjdG9yQnVmZmVyKCkpLCByZXN1bHQpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlc3VsdCwgY29u
c3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2YoSlNWYWx1ZSkpLCByZXN1bHQpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRj
aChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJh
bWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRj
aE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklm
Q2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC05OTcsNyArOTk3LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogCiAgICAgLy8gY3JlYXRlIGp1
bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRl
bWVudC4KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBT
aW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJl
Y29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJl
Y29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5r
ZWRUYWJsZSk7CiAKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9jaGFyKGNvbnN0IEluc3QKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2gg
ZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9i
eXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwog
ICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDQy
LDcgKzEwNDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAK
ICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sg
dGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxl
JiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBs
aW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NCwxMSArNTQsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9u
KgogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGlmIChz
cmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAg
ICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJl
c3NGb3IoZHN0KSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgLy8gT09QUzogbW9zdCAiT3RoZXIi
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudHMgY2FuIGp1c3QgYmUgZ3JhYmJlZCBm
cm9tIHRoZSBVbmxpbmtlZENvZGVCbG9jay4gSXQncyBqdXN0CisgICAgICAgIC8vIGEgY291cGxl
IHR5cGVzIHRoYXQgY2FuJ3QuIENyZWF0ZSBhbiBhYnN0cmFjdGlvbiBmb3IgdGhhdC4KKworICAg
ICAgICBzd2l0Y2ggKG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbihzcmMpKSB7CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRl
Z2VyOgorICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7Cisg
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoc3JjKTsKICAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KSksIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVn
VDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
ODcsMzcgKzk4LDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioK
IHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25T
aXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBh
Y2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVh
bENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9j
YXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0
UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBS
ZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJl
ZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAg
YXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBlbWl0QWxs
b2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9y
KSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2Ny
YXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdl
KHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbXV0YXRv
ckZlbmNlKCptX3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpvZmZzZXRPZk9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKCkgKyBvZmZzZXRPZkFsbG9jYXRvcigpLCBhbGxvY2F0b3JSZWcpOworICAg
IGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpvZmZzZXRPZk9iamVj
dEFsbG9jYXRpb25Qcm9maWxlKCkgKyBvZmZzZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVSZWcp
OworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3Rl
ZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJ
VEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZs
eSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJl
ZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAg
ZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CisgICAg
bXV0YXRvckZlbmNlKCptX3ZtKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKKworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7
CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVj
dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVj
dHVyZSgpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09i
amVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBlbWl0U3Rv
cmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0xMzEsNyArMTQwLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCiAgICAgLy8gV2UgZG9uJ3QganVt
cCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAg
Y3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5z
dGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7Cisg
ICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdU
MCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2Z1bmN0
aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKSk7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CiAKQEAgLTE1NCwzMCArMTY0LDM4IEBAIHZv
aWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9
IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VW
YWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAv
LyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhp
cyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm90bywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
dG9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2
YWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9HUFIpOwog
ICAgIAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUg
YSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJ
bnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAg
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAs
IC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHBy
b3RvCi0gICAgICAgIHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHJl
c3VsdEdQUiwKKyAgICAgICAgdmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAgICAgICBz
dHViSW5mb0dQUiwKKyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNo
MSwgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCisK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCArMjEwLDEz
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXpl
OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpu
b25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0
YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgcmVn
VDIsIHJlZ1QxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOwot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgc3Rh
dGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09IGFyZ3Vt
ZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6
OnZhbHVlID09IGFyZ3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKQorICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5
cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBA
IC0yNDAsNyArMjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChj
bwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVn
VDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM3NCw3ICszOTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygmUmVnaXN0ZXJBdE9mZnNldExp
c3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiAjZWxzZQpAQCAtMzg1LDcgKzQwMiw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9y
ZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
ICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC00MTEsNyArNDI4LDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogCiAgICAgaWYgKGRzdCAh
PSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NTAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJv
cGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1
bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNDY1LDggKzQ4MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29u
c3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gy
ID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsK
ICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0
cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUp
LCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFu
Y2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwg
ZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9i
YWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgp
LmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7
CkBAIC00ODAsNyArNDk5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEg
PSByZWdUMTsKQEAgLTUxOSw3ICs1MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChj
b25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAgaXNO
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdU
MiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVt
cChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9i
amVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU2Miw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2Vs
bCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1
cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1Qy
LCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1w
KGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9
IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs2MDEsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRl
ZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5
dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50
T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBv
aW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVh
bCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIu
YXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNK
dW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2lu
dGVyLCByZWdUMSkKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1
YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShieXRlY29kZSwgVHJ1c3Rl
ZEltbTMyKDEpLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwogfQpAQCAt
NjI1LDggKzY0MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlv
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4
cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFk
ZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIp
LCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIo
dmFsdWVJc1RydXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBh
ZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDAsNyAr
NjU5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8v
IGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcg
YXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1h
eSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGlj
aCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAg
LTY5NSw3ICs3MTQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlv
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDEpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBy
ZWdUMSwgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxzZQog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CkBA
IC03MTEsNyArNzMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rp
bwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgdGhyb3duVmFsdWVHUFIgPSBhcmd1bWVudEdQUjE7CkBAIC05MDgsNyArOTI4LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKQEAgLTkxOCw3ICs5MzksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShj
b25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
c3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwg
cmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkzMSw3ICs5NTMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3ROdW1iZXIocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTczLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDAp
OwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NzgsNyArMTAwMCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAg
ICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3RWUmVnKTsKIH0KQEAgLTk5Myw3ICsxMDE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0
Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZy
YW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihU
cnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0
Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25J
ZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyArMTAzMywxMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1l
bnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZm
ZXI7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBj
YWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gs
ICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5k
VmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRW
YWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8g
c2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwotICAg
IGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+
Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewot
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSks
IHJlZ3MpOwotICAgICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9
CiAKQEAgLTEwNTMsOCArMTA2Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29u
c3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1
dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxl
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3
aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBk
ZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxl
LmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsxMDkxLDE0IEBA
IHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUg
anVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3Rh
dGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAg
IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNo
SnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNv
cmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNv
cmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2Vk
VGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxl
SW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktl
eVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRh
YmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CiB9CiAKQEAgLTEwOTksMjAgKzExMTAsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5t
X3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGlu
YXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0
YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6
U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVn
Z2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDApOwogICAgIEp1
bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRl
Y29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlz
KTsKQEAgLTExMzMsNyArMTE0Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3Qg
SW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1
YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVt
cCgpOwpAQCAtMTE0OCw3ICsxMTYxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25z
dCBJbnN0cnVjdAogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTExNjYsNyArMTE3OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3Ry
dWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWws
IHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgp
OwpAQCAtMTE4OCwxMiArMTIwMCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJ
bnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGlu
aXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2lu
dGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxp
ZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBjb3VudCA9IG1f
Y29kZUJsb2NrLT5udW1WYXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVC
bG9jay0+bnVtVmFycygpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBmb3Ig
KHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5pdFJlZ2lzdGVy
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIobV9j
b2RlQmxvY2spOworICAgIAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7CiAKICAgICBl
bWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEzMTAsMjMgKzEzMjQsMTkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVj
dHVyZUlEOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJl
Z1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAg
IGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlE
KCksIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVl
OwotICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRh
dGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAg
ICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRS
ZWcgPSByZWdUMDsKQEAgLTEzNDIsNyArMTM1Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0
aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVu
Y3Rpb246OnJhcmVEYXRhVGFnKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZT
dHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKIAot
ICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2Fk
UHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcENyZWF0ZVRoaXM6Om9mZnNldE9mQ2FjaGVkRnVu
Y3Rpb24oKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2Fs
bGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIo
SlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBo
YXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzODIsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEz
OTMsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJ
bW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcgKzE0MDYsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVn
VDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxNDE3LDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsx
NDMyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAg
IFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5j
ZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFs
dWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE0MzAsNyArMTQ0NSw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9o
aW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2Nv
ZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsK
KyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0Zv
ckZ1enppbmcoKSAmJiBtX3VubGlua2VkQ29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZv
ckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZtKCku
Z2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZFB0
cihwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2hQdHIo
QmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmlu
aXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xNDQwLDcgKzE0NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAjZWxzZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OwogI2VuZGlmCi0gICAgICAgIG1vdmVWYWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkp
OwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0x
NDUzLDggKzE0NjgsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
CiAKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2Fu
QmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQ
b3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNy
ZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2Nr
LT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVzcyhy
ZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQog
fQogCkBAIC0xNTA5LDcgKzE1MjUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRs
ZVRyYXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTU2NCwzNCArMTU4MSwzNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBi
eXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhw
Kj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xvYmFs
R1BSID0gR1BSUmVnOjphcmd1bWVudEdQUjA7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxH
UFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBnbG9iYWxHUFIsIGpz
Q2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7
CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKdW1wIGxhenlKdW1wOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UK
LSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRM
b2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCi0gICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2wo
Ynl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2wsIGJpdHdpc2VfY2Fz
dDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkp
KQorICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKIAogICAgIE9wY29k
ZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdf
ZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAg
IGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVn
VDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAg
IGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5j
RXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAg
ICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBk
c3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2MjEsMjMgKzE2NDAsMjQgQEAgdm9pZCBK
SVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQ
YXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0
ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9m
dW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3Rh
dGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2Fk
Q29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQg
PSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0
aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBp
ZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAs
IGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxcmVnVDAsIGFyZ3VtZW50R1BSMik7CiAg
ICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxcmVnVDAsIGFyZ3VtZW50R1BSMik7CiAgICAg
ZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9y
X2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IGFyZ3VtZW50R1BSMXJlZ1QwLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTY2NCwy
OSArMTY4NCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50
IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNT
dGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZt
ZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQUjIpOworICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNldE9mQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0
aFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
c2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5k
ZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2Nh
dGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2l6ZUluZGV4LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQ
cm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwog
I2Vsc2UKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3
QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgp
LCByZWdUMik7CiAgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRh
dGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNzE1LDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
KyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2Rl
IGNhY2hpbmcgd2hlbiB0aGUgdHlwZSBwcm9maWVsciBpcyBlbmFibGVkLgogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBU
eXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9u
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0
VmlydHVhbFJlZ2lzdGVyOwogCkBAIC0xNzc3LDIwICsxNzk5LDI0IEBAIHZvaWQgSklUOjplbWl0
X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAg
IT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBp
ZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0
UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhp
cyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJl
ZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFj
a2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50
IHJlZ2lzdGVyLgorICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAgICAg
ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gx
UmVnLCBzY3JhdGNoMlJlZyk7CisgICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChz
aGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdU
MSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVTRShK
U1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91Ymxl
IGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHVz
aW5nIHRoZSBjb250cm9sIGZsb3cgcHJvZmlsZXIuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlQ29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNpY0Js
b2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xv
Y2F0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0
RXhlY3V0ZUNvZGUoKnRoaXMpOwpAQCAtMTg2MCw3ICsxODg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCBy
ZXN1bHRSZWdzKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE5MTIs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1pdExv
YWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2Ny
YXRjaEdQUiwgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJl
Z3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJl
Z3MpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4ODEsNyArMjg4MSw3IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29u
c3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1
bHQ7CiAgICAgaWYgKGtleS5pc0ludDMyKCkpCkBAIC0yOTA0LDcgKzI5MDQsNyBAQCBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7Ci0gICAgY29uc3Qg
U3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OwogCiAgICAgaWYgKGtleS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmluZ0ltcGwqIHZhbHVl
ID0gYXNTdHJpbmcoa2V5KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OCw3ICszNDgsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgSW52YWxpZEdQUlJlZywgSW52
YWxpZEdQUlJlZyk7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVl
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODE3MTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksOTIgKzQ5LDEwMyBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgaWYgKG1l
dGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4
TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQ29kZUJsb2NrKS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlW
YWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgeworICAgICAgICBhdXRvIG5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdENlbGwu
bGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIHNjcmF0Y2hHUFIsIGJhc2VH
UFIsIHByb3BlcnR5R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpyZXN1bHQpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6Okdl
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
ICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncywg
cmVnVDIpOwotICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQotICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgICAgICAvLyBPT1BTLiBTdXBwb3J0
IHRoaXMKKyAgICAgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAg
ICAgICAvLyAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKworICAg
ICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
R2V0QnlWYWw7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2Uo
Y29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYgKCFoYXNBbnlT
bG93Q2FzZXMoaXRlcikpCisgICAgICAgIHJldHVybjsKKworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwor
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOwogCi0gICAg
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBtb3Zl
KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgbW92
ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KG1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxp
emVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3Vt
ZW50R1BSNCk7CiAjZWxzZQotICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAg
ICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRl
eCk7CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChi
eXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKIAotICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OwotICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OworICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEg
YXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9
IGFyZ3VtZW50R1BSMjsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICAgICAg
c3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwotCi0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKLSAgICAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICAgICAgQ2Fs
bCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25HZXRCeVZhbE9wdGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKTsKLSAgICAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJn
dW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgorICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Cisg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3Rh
dGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlID09IHJlZ1QwKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5ID09IHJl
Z1QxKTsKKworICAgIGxvYWRDb25zdGFudChtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVj
b2RlLCBPcGNvZGVUeXBlOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAg
LTE2MCw4ICsxNzEsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjU7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9w
ZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0xODcsMzQgKzE5OCw0MSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAg
ICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5m
b0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpHZXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewogICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKQEAgLTIyMyw5ICsyNDEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2
YXRlX25hbWUoYwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldFBy
aXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9u
R2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMjM1LDI2ICsyNTUsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2
YXRlX25hbWUoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3Vt
ZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBh
cmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldFByaXZhdGVOYW1l
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMzAwLDIxICszMTQsMjgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJh
bmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIp
OwotCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAg
ICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5k
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0
ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMu
YXBwZW5kKGdlbik7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRo
ZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMu
CkBAIC0zMjgsMTMgKzM0OSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVf
YnJhbmQoCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOworCiAgICAg
SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vz
c2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQ
UiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJp
dmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMzQ0LDI0ICszNjksMTggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3Bl
cmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25U
cmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVu
dFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZgogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTM3MCwxOSArMzg5LDI4IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVf
YnJhbmQoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihicmFuZCwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFu
ZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiB9CiAKQEAgLTM5NCw5
ICs0MjIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5k
R1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRH
UFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0
ZUJyYW5kT3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC00MDYs
MjQgKzQzNiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBh
cmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1l
bnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5j
dGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46
OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZh
dGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0
ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC00MzUsMzAgKzQ1OSw0MiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIocHJvZmlsZSksIHJlZ1QzKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFs
dWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvZmlsZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1
ZUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwot
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJlZ1Q0KTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9maWxlR1BS
KTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAKICAgICBKSVRQdXRC
eVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCk7Ci0gICAgaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNs
b3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BS
KSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBwcm9maWxlR1BSLCBzdHViSW5mb0dQUik7CisgICAg
Ly8gT09QUzoKKyAgICAvL2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCisgICAg
Ly8gICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDsKKyAg
ICBzdHViSW5mby0+cHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsRGlyZWN0
PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+
ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVj
dHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00NzQsMTUg
KzUxMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAg
ICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKLSAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNv
ZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgICAgIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKLSAgICAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVj
dCkKQEAgLTQ5OCw3ICs1MzEsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSQogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkgYXJl
IGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlv
blB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEsIHJlZ1QyLCBnZW4uc3R1YkluZm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRH
UFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFI0KTsKKyAgICBpZiAoaXNEaXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCks
IE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1
bWVudEdQUjUpOworICAgIGVsc2UKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbERpcmVj
dDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVy
YXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RP
cHRpbWl6ZSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMywgYXJndW1lbnRHUFI0LCBhcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtNTEyLDcgKzU1NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVn
VDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0
X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICAgICBDYWxsIGNhbGw7CiAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9k
ZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSk7CkBAIC01MjMsNyArNTY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQpAQCAtNTM5LDExICs1ODEsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlk
UmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVn
VDQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpwcm9maWxl
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAg
IGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKQEAgLTU3MCwyMCArNjEyLDMxIEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQ
Uik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFB1
dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwgSW52YWxpZEdQUlJlZywgcmVnVDQpOwotICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1l
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZh
bHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU7CisgICAg
c3R1YkluZm8tPnByaXZhdGVGaWVsZFB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJ
QyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNl
IGlzIGNlbGwuCkBAIC02MDMsMTMgKzY1NiwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3ByaXZhdGVfbmFtZShjCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAot
ICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlW
YWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0
ZUZpZWxkT3B0aW1pemU7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRo
ZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJl
Z1QyOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2
YWx1ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1
bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFI0KTsKKyAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNE
ZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBv
cGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBhcmd1bWVudHNHUFIzLCBhcmd1bWVudEdQUjQsIFRydXN0ZWRJbW1QdHIobnVs
bHB0cikpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNjIyLDE4ICs2NzYs
MTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIAogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bjsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC02NDgsOSArNjk2LDkgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3MjgsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlv
bnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzczOCw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVn
VDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc0OSw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJp
YnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJl
Z1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNzA5LDcgKzc2MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFs
KGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJl
Z1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCBy
ZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzcxLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRl
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1Qz
LCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03
MjcsMjMgKzc4MCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwg
YmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVE
ZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJZDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAg
IC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBz
aW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODIyLDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxC
eUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODQ2LDE5IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNt
YU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlH
UFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSks
IGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVn
VDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODQ1
LDIyICs5MDUsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZv
R1BSLCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3Jp
dGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xv
YmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5NTQsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
ZWxldGVCeVZhbE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBhcmd1bWVudEdQUjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCArOTcyLDE5
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUu
bV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0
aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2Vy
dChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCkBAIC05NjEsMjIgKzEwMjksMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlH
ZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
cmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJ
ZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAg
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQog
CkBAIC05ODYsMTQgKzEwNjMsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlf
aWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
cnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJ
ZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0
QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTAwMywyNiArMTA4MywyMCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbW92ZShKSVQ6OlRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBl
KG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTEwMzAsMjIgKzExMDQsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZS0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3Q7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwog
fQogCkBAIC0xMDU0LDE2ICsxMTM3LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfZGlyZWN0KGMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVy
YXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
MTA3Myw4MyArMTE1OCw2MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIx
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpLCBkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1p
emU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlk
RGlyZWN0T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJl
Z1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VW
UmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3Vs
dCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogICAgIAog
ICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVt
aXRQcm9maWxpbmcoKSkgewotICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5j
aDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9k
ZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlM
ZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwg
Jm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUsIHJl
Z1QxKTsKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0
YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhOjpvZmZz
ZXRPZk1vZGUoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2Rl
ID0gYnJhbmNoOChOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKKyAgICAgICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZz
ZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZz
ZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90QXJy
YXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
LQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcp
OwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0g
Ynl0ZWNvZGUubV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6
OkdldEJ5SWQpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7Ci0KLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSks
IHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdl
bik7CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2ICsxMjIxLDE4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRh
ZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEx
NzcsMjYgKzEyNDIsNTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJ
bgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90
aGlzVmFsdWU7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpz
Y3JhdGNoOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIs
IHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNH
UFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7Cisg
ICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI0
MSwxNiArMTMzOCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4Kytd
OwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMp
OworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEyNjAs
MjkgKzEzNjAsMjMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8g
YXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1Jl
Z2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBh
cmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8
fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90
aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQorICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK31zCiAKICNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0
b3IoVk0mIHZtKQpAQCAtMTMyOSwyMyArMTQyMywzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
Ly8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0
aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBh
ZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBh
dGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1
Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMu
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJl
ZywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxp
bmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1
ZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVn
KTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUo
Ynl0ZWNvZGUpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRl
Y29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERp
cmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGly
ZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZv
LT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcg
U3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEz
NTksMTQgKzE0NjcsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJ
bgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
KHRoaXMpOwogICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNb
bV9wdXRCeUlkSW5kZXgrK107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVy
YXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3Niwy
NSArMTQ4OCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBh
cmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdU
MTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7
CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAg
IHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xNDQxLDIwICsxNTQ3LDMxIEBAIHZv
aWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2Vs
aW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTgwLDE3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5C
eUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0ODAsMjggKzE2MDAsMjIgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVy
YXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5v
IHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRp
ZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9w
ZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5k
Q2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUx
MCwyNSArMTYyNCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVj
b2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwogCiAgICAg
SklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9H
UFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChn
ZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUzNywxNSAr
MTY1OSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEpJVEluQnlWYWxHZW5l
cmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1l
bnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQ
UjQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJn
dW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NTYsNTEg
KzE2ODEsNTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVy
dHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSks
IHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mg
bm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEg
ZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUo
b3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRp
bWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0SGFz
UHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eU9yQnJhbmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBK
SVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZh
bHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vz
c1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNj
ZXNzVHlwZSB0eXBlKQogewogICAgIEFTU0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIApAQCAtMTYw
OCw3ICsxNzM4LDExIEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2kK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDog
b3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24o
dHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVO
YW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc1MiwyMSBAQCB2b2lk
IEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BS
ID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3Nl
cnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5h
bWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6
dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlv
bkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3Bl
cmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9w
dGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUg
OiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTY1Miw3ICsxNzgwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25h
bWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQ
cml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOwor
ICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBi
eXRlY29kZS5tX3Byb3BlcnR5LCAsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NjYsMTkgKzE3OTQsMjIgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVC
cmFuZD4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1f
ZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVCcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2so
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7CiAgICAg
aWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRy
dXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChzY3Jh
dGNoR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9G
KEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRj
aHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVu
c2lnbmVkIGRlcHRoKQogewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDAp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQogICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwpAQCAt
MTY4OCw2ICsxODE5LDcgQEAgdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVn
aQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX3Jlc29s
dmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAv
LyBPT1BTCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNv
bHZlU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAt
MTcwMSw3ICsxODMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewog
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCByZWdUMSk7CiAgICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNh
bEJpbmRpbmdFcG9jaCwgcmVnVDEpOwogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFk
ZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CiAgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKQEAgLTE3MTUsNyAr
MTg0Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAg
ICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JD
b2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBy
ZWdUMCk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJl
Z1QwKTsKICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTc5NCw1OSArMTkyNiw3NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgUmVzb2x2ZVR5cGUg
cHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLm1fcmVzb2x2ZVR5cGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9m
ZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEFT
U0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkg
PT0gY3VycmVudEluc3RydWN0aW9uKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFH
UFIgPSByZWdUNzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIC8vIElmIHdl
IHByb2ZpbGUgY2VydGFpbiByZXNvbHZlIHR5cGVzLCB3ZSdyZSBnYXVyYW50ZWVkIGFsbCBsaW5r
ZWQgY29kZSB3aWxsIGhhdmUgdGhlIHNhbWUKKyAgICAvLyByZXNvbHZlIHR5cGUuCiAKLSAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgaWYgKHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKKyAgICAgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxF
bnZpcm9ubWVudCgpLCByZWdUMCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRh
ZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRh
KTsKKyAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOworCisgICAgICAg
IGF1dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVy
biBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhDbG9zdXJlVmFyLCAiQmFzZWxpbmU6
IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhciIpOworICAgICAgICB9OwogCi0jZGVmaW5lIFJF
U09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVz
b2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShSRVNP
TFZFX1NDT1BFX0dFTkVSQVRPUikKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6
OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IK
KworICAgICAgICBhdXRvIGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mKSB7
CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3Rk
OjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgZ2VuZXJpYyIpOworICAgICAg
ICB9OworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gY29kZTsKKyAgICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xv
c3VyZVZhcikKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5l
cmF0b3IpOworICAgICAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0
dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljUmVzb2x2ZVNjb3Bl
R2VuZXJhdG9yKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogICAgIH0KIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciog
dGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Omdl
bmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNv
bHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5l
cmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFz
ZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0
YWRhdGEgPSBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBt
ZXRhZGF0YUdQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Nv
cGVHUFIgPSByZWdUNjsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gcmVnVDU7IC8vIGluY29taW5nIC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4K
ICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwogICAgIFVOVVNF
RF9QQVJBTShieXRlY29kZU9mZnNldEdQUik7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1Vz
ZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVz
cygpOworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAg
ICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwor
ICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dD
YXNlOwogCkBAIC0xODU1LDI2ICsyMDA1LDI2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9i
amVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIg
PSByZWdUNDsKLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0K
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9G
KEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hw
b2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7
CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdU
MywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJl
Z1QwKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBqaXQubW92
ZShzY29wZUdQUiwgcmVnVDApOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEp
OwogCi0gICAgICAgIExhYmVsIGxvb3AgPSBsYWJlbCgpOwotICAgICAgICBKdW1wIGRvbmUgPSBi
cmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOworICAgICAgICBMYWJlbCBsb29wID0gaml0LmxhYmVs
KCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOwog
ICAgICAgICB7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9m
ZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMSk7Ci0gICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3AsIHRoaXMpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZWdUMCk7CisgICAgICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7
CisgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsKICAgICAgICAgfQot
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluaygmaml0KTsKICAgICB9
OwogCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsK
QEAgLTE4ODIsMTIgKzIwMzIsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkuCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShnbG9i
YWxPYmplY3RHUFIsIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5n
RXBvY2gpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZz
ZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBq
aXQubW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKQEAgLTE4OTcsMTEgKzIwNDcsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9y
Q29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFy
KiwKICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCBy
ZWdUMCk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9i
YWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBA
IC0xOTA5LDcgKzIwNTksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFt
aWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0xOTE5
LDgzICsyMDY5LDQ1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5
cGUpKSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBl
bWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29k
ZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNr
aXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9IENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBl
KTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVz
b2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLQotICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGpp
dC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUmVzb2x2ZVR5
cGUoKSksIHJlZ1QwKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAg
ICAgICAgYXV0byBlbWl0Q2FzZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKKyAg
ICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5
cGUpOworICAgICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAg
ICAgIG5vdENhc2UubGluaygmaml0KTsKKyAgICAgICAgfTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgZW1pdENhc2Uo
R2xvYmFsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBl
bWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1w
KCkpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZq
aXQpOwogICAgIH0KIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwog
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgp
LmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1Yihz
bG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
dGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1Io
cmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAg
ICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29w
ZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklU
IGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlw
ZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SKQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Nj
b3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRo
aXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBi
ZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2Jh
bE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAg
IC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2Jh
bE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBU
aGUgZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUo
WDg2XzY0KQpAQCAtMjA2NSw2ICsyMTc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFy
KFZpcnR1YWxSZWdpcwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKQEAgLTIxNzgsNyArMjI5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdU
MCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
QEAgLTIxOTYsNDEgKzIzMDksNTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Nj
b3BlKGNvbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdCht
X2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBhdXRvIGNsb3N1
cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRl
T3BHZXRGcm9tU2NvcGVUaHVuayhDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Nj
b3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6
Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9Owor
CisgICAgYXV0byBnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJikgeworICAg
ICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoc3RkOjpudWxsb3B0
LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NvcGVHUFIgPSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0gICAg
ICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+
KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0
d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldElu
TWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5
dGVjb2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUp
IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3Rh
dGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZP
Ul9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAgIH07
Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9m
ZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9m
ZnNldCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Y29kZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAg
ICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNlIGlm
IChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1
YihnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxs
KGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNv
bnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZl
VHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUg
dGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBM
TEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgpAQCAtMjIzOSw3NyArMjM2MSw2OCBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21T
Y29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBSRUxFQVNFX0FT
U0VSVCh0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0
YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIGppdC50YWdS
ZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1l
dGFkYXRhR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxv
Y2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVn
VDMsIG1ldGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90
IG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUo
c2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIo
WmVybywgcmVnVDEpKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSkpOworICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0g
KEdQUlJlZyBzY29wZUdQUikgeworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0
Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFu
Y2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdU
MSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRW
YXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewog
ICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2lu
dCkpLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwg
bV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKICAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0g
ICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BS
UmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQp
LCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJS
ZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCks
IHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRvIGVt
aXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BS
KSB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwot
ICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBh
ZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3Bl
cmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdU
MCk7CisgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwor
ICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSksIHJlZ1QwKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewor
ICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAg
ICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMg
dmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGlu
ZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRs
ZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZh
ciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcg
YnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVz
IGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dCA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsK
ICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAgICAg
ICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsK
LSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29k
ZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAg
IHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5q
aXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAg
ICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBD
b2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAgICAg
IH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgp
KSwgb2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAg
ICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9m
ZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAg
ICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAg
ICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRP
ZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJ
bW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdp
dGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0
T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAg
ICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zm
c2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZz
ZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGJh
c2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAg
aml0Lm5lZzMyKG9mZnNldCk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIob2Zm
c2V0LCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwg
b2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CkBAIC0yMzE3LDIxICsyNDMwLDE5IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYg
KHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAg
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fb3BlcmFuZCkpLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1l
dGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwogICAgICAg
ICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
anVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAg
Y2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQxLDc5ICsyNDUyLDU2IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2gg
KHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlw
ZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwotCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAg
ZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsK
LQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5
cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29k
ZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZElt
bTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGlu
dG8gVDAKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6
b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVk
SW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUg
aW50byBUMAogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwot
ICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsK
KyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFs
VmFyLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKwor
ICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAg
ICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
OworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAo
KSk7CiAKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7
Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAK
ICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwot
ICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1l
dGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkpKTsKIAotICAgIHJldCgpOwor
ICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JB
TF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nh
c2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0
b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNs
b3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpU
aHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwo
dm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfR0VUX0ZS
T01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2Vu
ZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lz
VXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJu
IHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVy
YXRlT3BHZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9nZXRfZnJv
bV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUo
REVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfR0VUX0ZST01f
U0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBU
aGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRo
ZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCkBAIC0yNDcxLDg2ICsyNTU5LDc5IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIH0KICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShK
U1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNl
dCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1p
dE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9p
ZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZP
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdh
dGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5v
dGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsK
LSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1
cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwg
QWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkg
KyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0
SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBv
cGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3Bl
cmFuZCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmls
ZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1f
Z2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewog
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJz
IHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhp
bmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5k
bGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVj
dHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1
Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8v
IEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFy
IGluamVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICAgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworCiAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAKICAgICAgICAgICAgIGppdEFzc2VydChz
Y29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAg
IHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDMpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdU
Myk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9h
ZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgICAgICAgICBs
b2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Om9mZnNldE9mT3BlcmFu
ZCgpLCByZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3Rv
cmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91
dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBT
aG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4
KHJlZ1QzLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICAvLyBPT1BTOiB3b3VsZCBiZSBu
aWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBHUFJSZWdzCisgICAgICAgICAgICBlbWl0
V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNh
c2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6
Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsK
LSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAgICAg
ICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgp
KSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKyAgICAgICAgICAgIGVt
aXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxv
YWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNl
dE9mT3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlv
bihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQg
dG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBu
ZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChp
bmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJl
Z1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRW
YXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1Qw
KTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Cisg
ICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAg
IGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9w
ZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRT
ZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwg
cmVnVDEpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAg
ICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAgICAgICAgLy8g
T09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcg
Zm9yIHZhbHVlLgorICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZh
bHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNo
cG9pbnRTZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsK
KyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChy
ZWdUMSwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgU2NhbGVFaWdodCwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291
bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIG93bmVy
L3ZhbHVlLgogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZh
cjoKQEAgLTI1NjQsNTggKzI2NDUsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUp
IHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIo
VHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29s
dmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1w
IGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQg
dG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0g
ICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5r
KHRoaXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3Vy
ZVZhci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBp
bGUgdGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2
ZSBwcm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVW
YXIsCisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIK
KyAgICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBp
dCBpcyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAg
ICAvLyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmls
ZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFy
KTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZh
cikKKyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChw
cm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQor
ICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAg
ZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVn
VDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxpbmso
dGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAg
IGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhp
cyk7CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFy
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxW
YXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
LmxpbmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwog
CiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAg
ICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTggKzI2OTksMjEgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRv
U2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZv
KGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVW
YXIpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Cisg
ICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElm
IGFueSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENv
ZGVCbG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFy
LgogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dy
aXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2Ugewog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1
bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAgLTI3MDEsNyArMjc3
OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQ2NChB
ZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNzU5LDcgKzI4MzcsNiBAQCB2b2lkIEpJVDo6ZW1p
dFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJu
YWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKQEAgLTI3NjcsNyArMjg0NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9pbnRlcm5hbF9maWVsZChjb24KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QxKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdElt
cGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwogfQogCkBAIC0yNzg5LDcgKzI4NjYsNiBAQCB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsPE9wCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBi
eXRlY29kZS5tX21vZGU7CkBAIC0yODA1LDcgKzI4ODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX25leHQoY29uc3QgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAg
IC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBz
cGVjaWFsIGNhc2UgaXQgaWYgd2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1l
dGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
T3duU3RydWN0dXJlTW9kZSkgeworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBy
ZWdUMzsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJh
dG9yR1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25a
ZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6bW9k
ZVNldE9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93
blN0cnVjdHVyZU1vZGUpKSk7CkBAIC0yODQ3LDc4ICsyOTIzLDg2IEBAIHZvaWQgSklUOjplbWl0
X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5
VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBieXRlY29k
ZS5tX3Byb3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVj
b2RlLm1fZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CiAKLSAgICBhdXRvIHJl
c3VsdEdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxp
bmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEg
PSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0
ZXJzOjpzY3JhdGNoMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVF
bnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2Rl
LCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1Qx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7CiAKLSAgICBvcjgocmVnVDIsIEFic29s
dXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZy
b21NZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0
b3JNZXRhZGF0YSgpLCBzY3JhdGNoMik7CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIpOwor
ICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRh
dGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJh
c2VHUFIpKTsKICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgot
ICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
Z1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlzTm90
T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzY3JhdGNoMywgVHJ1c3Rl
ZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3RydWN0
dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qz
KTsKLSAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qz
LCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVy
ZUlET2Zmc2V0KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHNj
cmF0Y2gxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5j
aDMyKE5vdEVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21wdXRl
IHRoZSBvZmZzZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDMpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJZiBp
bmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2Us
IHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsK
LSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQorICAgIEp1bXAgb3V0
T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhz
Y3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9m
ZnNldCgpKSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAg
ICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5h
cHBlbmQoanVtcCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAg
b3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSwgcmVnVDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihy
ZWdUMywgcmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gxLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBz
Y3JhdGNoMik7CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNj
cmF0Y2gyLCBzY3JhdGNoMik7CiAgICAgY29uc3RleHByIGludHB0cl90IG9mZnNldE9mRmlyc3RQ
cm9wZXJ0eSA9IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0YXRp
Y19jYXN0PGludHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwg
cmVzdWx0R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1l
c0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNl
cy5hcHBlbmQoanVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7Ci0g
ICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5P
d25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9y
TWV0YWRhdGEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCks
IGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRh
KCkpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBp
c05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4
ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5n
IHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1Qx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAg
ICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFs
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2Vu
KTsKIAogICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTI3LDEwICszMDExLDkgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxT
bG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBp
dGVyKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQ
YXRoRnVuY3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJ
bXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5
cGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lk
IEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1
bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBA
IC0yOTM5LDcgKzMwMjIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0
eUltCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihtb2RlLCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRh
Lm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgcmVnVDEp
OworICAgIG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1QxLCBi
eXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgp
KTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwog
CkBAIC0zMDI4LDYgKzMxMTMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lcgogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIAor
dm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQoreworICAgIEp1bXAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNlbGVj
dFNjcmF0Y2hHUFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0Myw3ICsxNTQzLDcgQEAgc3RhdGljIHZv
aWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogCiB2b2lkIHVubGlua0NhbGwoVk0mIHZt
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25z
OjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5m
YXN0UGF0aFN0YXJ0KCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJs
eSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZv
KSk7CiAgICAgCiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHVi
KGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigp
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3Ry
aWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBp
bnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUl
LCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0
dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAg
IG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5h
cnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRh
dGEodDEsIHQyKQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdP
ZmZzZXRbY2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAg
bWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFk
YXRhIGluIHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNs
b3cpCiAgICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAg
ICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAg
ICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5k
KQogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXpl
LCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJp
dGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1f
YXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQog
ICAgIG1ldGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFn
LCAub3BOZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVT
bG93CiAgICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQp
CisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwg
dDUsIHQzKQogICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50Ogog
ICAgIGJpYSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAw
LCB0MQotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBk
YXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQz
KQogICAgIHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3
LDYgQEAgZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29k
ZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAg
bGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8g
KHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFy
aXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpN
ZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0K
LSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9y
aHMsIHQyKQogICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFj
cm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50
MzJUYWcsIC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50
Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUs
IHQyKQogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5k
U3RvcmUodDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2
LDEyICsxMTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AK
ICAgICAgICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0
VGFnLCAub3AxTm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNs
b3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVy
SW50LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJ
bnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0Mywg
ZnQxCi0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAg
ICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51
bWJlck51bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1f
ZHN0LCB0MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBA
IG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJz
dCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVm
aW5pdGVseSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93
ZXN0VGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVy
KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFBy
b2ZpbGVJbnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBm
aWkyZCB0MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwNTYsMTAg
KzEwNTYsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1h
Y3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAg
ICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNy
byAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8g
dXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2Jp
dHNbdDJdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAg
IGxvYWRxIFtjZnIsIHQwLCA4XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpAQCAtMTA2
OSw3ICsxMDY1LDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgog
ICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51bWJlclRh
ZywgdDEKICAgICAgICAgc3RvcmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJp
dGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAgZGlzcGF0
Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMTM0LDExICsxMTMwLDYgQEAgZW5kKQogCiAKIGxsaW50
T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUo
dHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2Zp
bGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAgZ2V0KG1f
b3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCiAg
ICAgbWV0YWRhdGEodDEsIHQyKQpAQCAtMTE0NiwxMiArMTEzNywxMiBAQCBsbGludE9wV2l0aE1l
dGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9w
TmVnYXRlU2xvdwogICAgIG5lZ2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAgIHVwZGF0
ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2Zp
bGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQ0KQogICAgIHJldHVybih0MykKIC5v
cE5lZ2F0ZU5vdEludDoKICAgICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNsb3cKICAg
ICB4b3JxIDB4ODAwMDAwMDAwMDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJp
dGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBB
cml0aFByb2ZpbGVOdW1iZXIsIHQxLCB0NCkKICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0ZVNs
b3c6CkBAIC0xMTY0LDEwICsxMTU1LDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNv
ZGVOYW1lLCBvcAogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNv
ZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQog
ICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0eXBlKQot
ICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFBy
b2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAg
ICAgICAgZ2V0KG1fcmhzLCB0MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCkBAIC0xMTc3LDcgKzExNjQsNyBAQCBt
YWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdldChtX2Rz
dCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5zbG93LCB0
MikKIAotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwg
dDQpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTg3LDEwICsx
MTc0LDEwIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAg
ICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEK
ICAgICAgICAgZnEyZCB0MSwgZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVy
TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBB
cml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgam1wIC5vcDFOb3RJbnRS
ZWFkeQogICAgIC5vcDFOb3RJbnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxl
TnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQog
ICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEyMDYsNyAr
MTE5Myw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAg
ICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIGlzIGRl
ZmluaXRlbHkgbm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6IHQxLCBu
dW1iZXJUYWcsIC5zbG93Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQor
ICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2Zp
bGVJbnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBhZGRx
IG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lv
biAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTI0OTgsNiArMjQ5OCwxNyBAQCBtYWNybyBub3RT
dXBwb3J0ZWQoKQogICAgIGVuZAogZW5kCiAKKworbWFjcm8gdXBkYXRlVW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9y
aCB0eXBlLCBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKworbWFjcm8gdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXAp
CisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRh
ZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVt
cF0KK2VuZAorCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRoZSBYODZfNjRfV0lOIGNv
bmRpdGlvbiBoZXJlLCBzaW5jZSBXRUJBU1NFTUJMWSBzaG91bGQgYWxyZWFkeSBiZSBmYWxzZSBv
biBXaW5kb3dzCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAz
NzE2CiBpZiBXRUJBU1NFTUJMWSBhbmQgbm90IFg4Nl82NF9XSU4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlz
aW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlk
ZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsMTAgQEAgcHVibGljOgogICAg
IENhY2hlYWJsZUlkZW50aWZpZXIoKSA9IGRlZmF1bHQ7CiAKICAgICBzdGF0aWMgaW5saW5lIENh
Y2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUNlbGwoSlNDZWxsKiBpZGVudGlmaWVyKTsKLSAg
ICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayosIGNvbnN0IElkZW50aWZpZXImKTsKLSAgICBzdGF0
aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKENvZGVCbG9jayosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVu
dGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBl
KiwgY29uc3QgSWRlbnRpZmllciYpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIFVuaXF1ZWRTdHJpbmdJbXBs
Kik7CiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgY29uc3RleHBy
IENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbVJhd0JpdHModWludHB0cl90IHJhd0JpdHMp
IHsgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIocmF3Qml0cyk7IH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlm
aWVySW5saW5lcy5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxMiArMzUsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBDYWNoZWFibGVJZGVu
dGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaSkKK3RlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaSkKIHsKICAgICBy
ZXR1cm4gY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKGNvZGVCbG9jaywgaS5p
bXBsKCkpOwogfQogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJs
b2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2Rl
QmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb2Rl
QmxvY2ssIGNvZGVCbG9jay0+aGFzSWRlbnRpZmllcih1aWQpKTsKICAgICByZXR1cm4gQ2FjaGVh
YmxlSWRlbnRpZmllcih1aWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00ODAsNyArNDgwLDcgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0
aF90bwogI2lmIEVOQUJMRShKSVQpCiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFByb2ZpbGVGb3JV
bmFyeUFyaXRoT3AoT3BOZWdhdGU6Ok1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZSByZXN1bHQs
IEpTVmFsdWUgb3BlcmFuZCkKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9IG1l
dGFkYXRhLm1fYXJpdGhQcm9maWxlOworICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0g
Km1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOwogICAgIHByb2ZpbGUub2JzZXJ2ZUFyZyhvcGVyYW5k
KTsKICAgICBBU1NFUlQocmVzdWx0LmlzTnVtYmVyKCkgfHwgcmVzdWx0LmlzQmlnSW50KCkpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4
ZWN1dGFibGUuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsyODks
OCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZlJhcmVE
YXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9yYXJl
RGF0YSk7IH0KICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFzU3RyaW5nSW5S
YXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihSYXJlRGF0YSwgbV9hc1N0cmluZyk7
IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9j
a0ZvckNhbGwpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRh
YmxlLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgRXhlY3V0YWJsZUJhc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436982</attachid>
            <date>2021-08-31 18:59:24 -0700</date>
            <delta_ts>2021-08-31 19:02:58 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>367653</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IHVubGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxp
bmtlZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRp
b24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
aXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0g
ICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRo
U3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhT
dGFydCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlz
IGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQg
dG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0
aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJz
OjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAg
IHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MjQsNiArNDI0LDEzIEBAIGlubGluZSBDb2RlT3JpZ2lu
IGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBz
byB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNyArMzcw
LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2Fu
J3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJv
Y2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJv
ZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5l
c3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2Yg
YW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhl
IGxpdmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNp
ZGUgVW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBi
ZXR3ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhl
IGJ5dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5n
IGFuIFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9j
ayogdW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CkBAIC00NjYsNiAr
NDY3LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAg
ICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9G
SUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtl
ZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAg
ICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtl
ZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAg
ICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5z
dHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4LDE0ICs1NDIsMTQgQEAgYm9vbCBD
b2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRl
UHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5L
KE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAg
ICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJ
bmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9w
TXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5L
X1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC0zMDc5LDcgKzMw
OTMsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBF
TkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVy
biBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMyOTUsMTMgKzMzMDks
MTMgQEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3
aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJu
ICZwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICBy
ZXR1cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICAgICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtMzMxMywxMSArMzMyNywxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSog
Q29kZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewog
ICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5l
Z2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoK
LSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9w
RGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMt
PmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw5
IEBAIHB1YmxpYzoKICAgICBNZXRhZGF0YVRhYmxlKiBtZXRhZGF0YVRhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tZXRhZGF0YS5nZXQoKTsgfQogCiAgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQorcHJpdmF0ZToKICAgICB2b2lkIHNl
dE51bVBhcmFtZXRlcnModW5zaWduZWQgbmV3VmFsdWUpOworcHVibGljOgogCiAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9mQXJn
dW1lbnRzVG9Ta2lwOyB9CiAKQEAgLTE2Nyw3ICsxNjksNiBAQCBwdWJsaWM6CiAgICAgdW5zaWdu
ZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQogICAgIHVuc2lnbmVkIG51
bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hlY2twb2ludHMoKSAq
IG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKLSAgICB1bnNpZ25lZCogYWRkcmVzc09mTnVtUGFy
YW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KIAogICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihtX2FsdGVybmF0aXZlLmdl
dCgpKTsgfQpAQCAtMjMyLDE2ICsyMzMsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxs
ZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFr
cG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRoZSBv
cHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJuIHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFuZCB3
ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlZy5v
ZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fbnVtVmFycyk7CkBAIC0yNjYsNiArMjU3LDcg
QEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7
CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMgSUNz
IGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAg
ICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogCkBAIC0yODIsNyArMjc0LDYg
QEAgcHVibGljOgogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1f
cGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXNDYWxsZWVTYXZlUmVnaXN0ZXJz
IHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVn
aXN0ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKICAgICB9OwogCiAgICAg
SklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikK
QEAgLTMyMiwxNSArMzEzLDEwIEBAIHB1YmxpYzoKICAgICAvLyBsb29raW5nIGZvciBhIENhbGxM
aW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMuCiAgICAgQ2Fs
bExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgp
OwogICAgIAotICAgIHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFwJiYgaml0Q29kZU1hcCkK
LSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAg
ICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcCA9IFdURk1vdmUoaml0Q29kZU1h
cCk7Ci0gICAgfQogICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKQogICAgIHsKLSAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICByZXR1cm4g
ZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcDsKKyAgICAgICAgQVNTRVJUKGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVNYXA7CiAgICAg
fQogCiAgICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0Nv
ZGVPcmlnaW5NYXA+JiYpOwpAQCAtNDcyLDYgKzQ1OCw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmlu
ZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9h
cmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251
bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01NzIsNiArNTU5LDcgQEAg
cHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oaW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1Zl
Y3RvckJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1f
Y29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFN
ZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2wo
aW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAg
aW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXpl
KCk7IH0KQEAgLTYwMSw2ICs1ODksMTEgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VS
VChtX2ppdERhdGEpOwogICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgfQorICAgIFNpbXBsZUp1bXBUYWJsZSYgYmFzZWxpbmVTd2l0
Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN3
aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZV
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyByZXR1cm4g
bV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9CkBA
IC02MTEsNiArNjA0LDExIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXRE
YXRhKTsKICAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
W3RhYmxlSW5kZXhdOwogICAgIH0KKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5n
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9m
VW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtl
ZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBj
b25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNzk3LDYgKzc5NSw3IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fZGVi
dWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCkgeyBy
ZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywg
bV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVha3BvaW50KHVuc2lnbmVk
IG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQodW5zaWduZWQgbnVt
QnJlYWtwb2ludHMpCkBAIC04MzgsNiArODM3LDcgQEAgcHVibGljOgogICAgIG11dGFibGUgQ29u
Y3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
OyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMgdG8gc3RvcmUgdG8gaXQu
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
KTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2NhcGFiaWxpdHlMZXZlbFN0
YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNiwxMSArOTA2LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcik7IH0KIAotICAg
IGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQotICAgIHsK
LSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRl
IHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3VubGlua2VkQ29kZS0+aXNC
dWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZv
ckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5sb29wSGludHNB
cmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2
b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uu
aAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXAoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spOwogICAgIAogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlKiB3cmFwQW5kQWN0aXZhdGUoQ29kZUJsb2NrKiBjb2RlQmxvY2spOworCisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLCBtX2NvZGVCbG9jayk7IH0KICAgICAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHJldmlz
aW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0
YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBzdGF0aWNfYXNzZXJ0KHNp
emVvZihHZXRCeUlkTW9kZU1ldGFkYXRhCiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJy
YXlMZW5ndGggewogICAgIEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihH
ZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmlsZSk7IH0KIH07CiBzdGF0
aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsK
IApAQCAtODgsNiArODksNyBAQCB1bmlvbiBHZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAg
R2V0QnlJZE1vZGUgbW9kZTsKICAgICAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGlu
ZzsgLy8gVGhpcyBtdXN0IGJlIHplcm8gd2hlbiB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAg
fTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhLCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0
YWRhdGFEZWZhdWx0IGRlZmF1bHRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1
bnNldE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3Ro
TW9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYgKzM4NSw4IEBA
IGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcygKICAgICByZXR1cm4gbGlu
a2VkQ29kZUlubGluZTsKIH0KIAorLy8gT09QUzogTWFrZSB0aGlzIHN0dWZmIHdvcmsgd2l0aCBk
YXRhIGljcyB0byBub3QgYXNzdW1lIGlubGluZSBhY2Nlc3MuCisKIHZvaWQgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2VzcyhDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFyZ2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVz
ZURhdGFJQygpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0
aW9uTW9kZU1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgT1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9S
X0VOVU1fQ0xBUwogCiBzdHJ1Y3QgSXRlcmF0aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90
IHNlZW5Nb2RlcyB7IDAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVz
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1v
ZGVzKTsgfSAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9
PSBzaXplb2YoSXRlcmF0aW9uTW9kZSkpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODUsNiArMjg1LDcgQEAgdm9pZCBTdHJ1Y3R1cmVT
dHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywg
KnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNz
VHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAg
ICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CkBAIC00MzAsNiArNDMx
LDEwOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9j
YWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86Omlu
aXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvKQoreworICAgIGFjY2Vzc1R5cGUgPSB1bmxpbmtlZFN0
dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0YXJ0OyAv
LyBPT1BTOiBkbyB3ZSBuZWVkIGEgc3RhcnQgZm9yIGRhdGEgSUNzPworICAgIGRvbmVMb2NhdGlv
biA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2Nh
dGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgIGNhbGxT
aXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7
CisgICAgY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUlu
ZGV4KTsKKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6
RGVsZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5
VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsQnlJ
ZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlb2Y6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgor
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1
bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJl
Y3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgp
KQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5s
aW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0
T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gb3BlcmF0aW9u
UHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZh
bDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5m
by5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6
OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3Ry
aWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFs
RGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVG
aWVsZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFBy
aXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hl
Y2tQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNr
UHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIE9P
UFM6IGhhbmRsZSBpdGVyYXRvcl9uZXh0IHZhbHVlIGluIHVzZWQgcmVnaXN0ZXIgc2V0LgorfQor
CiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmNoZWNrQ29uc2lz
dGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlW
YWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAg
ICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzc5
LDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAog
fTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVy
ZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDEsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBp
bml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBDaGVj
ayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRv
ZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTQ0Nyw2ICs0NTIsMTggQEAgaW5saW5lIGF1
dG8gYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bgogICAgIH0KIH0KIAorc3RydWN0IFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8geworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICBQ
dXRLaW5kIHB1dEtpbmQ7CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRL
aW5kOworICAgIEVDTUFNb2RlIGVjbWFNb2RlOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleDsKKyAgICAvLyBPT1BTOiBEbyB3ZSBuZWVkIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMg
ZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRo
ZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2Nh
dGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJ
KHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNiArMTc1LDcgQEAgcHVibGlj
OgogCiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3Rh
bnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3Qg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmly
dHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcu
dG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkg
eyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3
LDYgKzIwOCwxNSBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0
TW9kZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBj
b25zdDsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4
IGluZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0K
KyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3Ry
dWN0aW9ucygpLmF0KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNF
bmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2lu
ICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3Ry
dWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0
aW9uc1NpemUoKSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAg
IHVuc2lnbmVkIG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9j
YWxzOyB9CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsg
fQpAQCAtMzM0LDYgKzM0NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRh
LT5zaXplSW5CeXRlcygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVG
b3JGdXp6aW5nRWFybHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBh
cmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAg
ICAgcmV0dXJuICFpc0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KIAogcHJvdGVjdGVkOgogICAg
IFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwpAQCAtNDEwLDYgKzQy
NSw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBt
X2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFjZSB0byBz
dG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5
QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0
aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBt
X2V4aXRQcm9maWxlOwpAQCAtNDU1LDYgKzQ3MywyOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAg
fQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZz
ZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChvZmZzZXQpOworICAg
IH0KKworICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAg
ICBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRo
UHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3VuYXJ5QXJpdGhQ
cm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5h
cnlBcml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
QmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1
cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHVu
YXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlBcml0aFByb2ZpbGVz
W2ldOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNo
TWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw5ICsxMDEsMTggQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAg
ICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2
X3Q7CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZz
ZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBB
U1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9
IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRh
YmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0
ICsgc2l6ZW9mKE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9
CisKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfb2Zmc2V0VGFibGVFbnRyaWVzID0g
TlVNQkVSX09GX0JZVEVDT0RFX1dJVEhfTUVUQURBVEEgKyAxOyAvLyBvbmUgZXh0cmEgZW50cnkg
Zm9yIHRoZSAiZW5kIiBvZmZzZXQ7CiAKICAgICAvLyBOb3QgdG8gYnJlYWsgYWxpZ25tZW50IG9m
IDMyYml0IG9mZnNldCB0YWJsZSwgd2Ugcm91bmQgdXAgc2l6ZSB3aXRoIHNpemVvZihPZmZzZXQz
MikuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmls
ZS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAgdGVtcGxhdGU8
dW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzQXJndW1lbgogc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ug
ewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVy
T2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJP
ZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNr
ZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJP
ZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKQEAgLTEzNCw3
ICsxMzMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIAogICAgICAgICBy
ZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29kZWRKU1ZhbHVlIG1f
YnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxhdGVkVHlwZSBtX3By
ZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTU2LDYgKzE1NSw3IEBAIHN0cnVjdCBWYWx1ZVBy
b2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1Ymxp
YyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAgICBWYWx1ZVByb2Zp
bGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBzdHJ1Y3QgVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnkK
ICAgICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3Jj
LCB0eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUsIG1f
Y29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90Pihkc3QsIHNyYyk7
CkBAIC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbmMoUmVnaXN0
ZXJJRCogc3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BJ
bmM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUo
KSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVjOjplbWl0KHRoaXMs
IHNyY0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRk
VW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODIsNyArNjgy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklEKj4KICAgICAgICAg
ZW1pdEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJ
RCogc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBCaW5h
cnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAgICAgICAgICAgIEJp
bmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1fY29kZUJsb2NrLT5h
ZGRCaW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODg5LDcgKzg4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUK
IAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwp
IHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQs
IGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+
b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZs
ZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1f
aml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9u
IDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5Niw3ICs4OTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRH
UFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nh
c2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BS
LCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEp
OwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5ODUsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRl
TmEKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygp
OwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxv
Y2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6
UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRU
eXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRl
TmFtZSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJh
c2VHUFIpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3Ms
IEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVy
dHlJc1N5bWJvbCA9IHRydWU7CiAKQEAgLTE0NzQ3LDcgKzE0NzQ3LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNj
b3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5n
cHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tl
dFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJbmRl
eCk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVn
LCB0aGlzUmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5j
b2RlQmxvY2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMTcsNyArNDMxNyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAg
ICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0
ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9k
ZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAg
ICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFu
dGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAg
ICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIp
LCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+
c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CkBAIC0xMDM1NSw3ICsxMDM1NSw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
PSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBH
UFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlk
R1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAg
ICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0
LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAg
Q2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7
CiAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDY5OCw3ICsxMDY5OCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNU
YWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZv
OjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxD
YWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwOTc5LDcgKzEwOTc5LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQ
YXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAg
ICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJ
bnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0
aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0
LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5w
cmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjIgQEAgY2xhc3MgTWV0YWRhdGEKICAgICBkZWYg
c3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNvbnZl
cnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZp
eCwgZmllbGRzLCBnZW5lcmF0ZU9mZnNldE9mKQogICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8
ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAg
ICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4
ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAgICAgICAgICAiI3tw
cmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSwgZmFs
c2UpfVxuI3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAg
ICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGROYW1lfTsiCisgICAgICAgICAg
ICAgICAgICAgIGlmIGdlbmVyYXRlT2Zmc2V0T2YKKyAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSByZXN1bHQgKyAiXG4iICsgInN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFt
ZVswXS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJldHVybiBPRkZTRVRPRihNZXRhZGF0
YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0CiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmQu
am9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRz
KCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAg
ICAgICAgIiwgQGZpZWxkcywgdHJ1ZSkKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBp
ZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5OCw4ICs2OTgsMTMgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6
OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxD
YWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBp
bmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwog
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7Cisg
ICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgaW5mbyk7Cit9
CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xv
YmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxs
KCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
ICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
MTgsNiArMTcxOCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVh
bENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1p
dFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyop
OwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCBy
ZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYg
KzQzLDYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sbwogICAgIHN0
b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CiB9CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dT
aGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0
aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4KQotewotICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgZnJhbWUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Ci0gICAgc3RvcmVWYWx1
ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKLSAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNj
b3BlKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVC
bG9jaykpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSks
IEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFj
a2V0LCBjYWxsU2l0ZUluZGV4KSkpOwotfQotCiB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hh
ZG93Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3Jh
dGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAgIFNoYWRvd0NoaWNrZW4qIHNo
YWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4
NDAsMTggQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9s
YXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRv
cCBvZgogICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQg
bG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJl
ZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcg
c2NvcGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIENvZGVCbG9ja1R5cGU+CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChH
UFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBD
b2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQorICAg
IHsKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFt
ZSkpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgICAgIHN0b3JlVmFsdWUodGhp
c1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7CisgICAgICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2Nv
cGUpKSk7CisgICAgICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAg
ICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2Fs
bFNpdGVJbmRleCkpKTsKKyAgICB9CisKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEgcG9pbnRlciB0
byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQuCiAgICAgdm9p
ZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BS
UmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkocmV2
aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
ZmxlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogCiB2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CisgICAgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJz
KGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwordm9pZCBDYWxsRnJhbWVT
aHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMpCit7CiAgICAgUmVnaXN0ZXJTZXQgY2FsbGVl
U2F2ZVJlZ2lzdGVycyB7IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB9Owot
ICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMgPSBj
b2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5zaXplKCk7ICsraSkgewogICAgICAgICBSZWdp
c3RlckF0T2Zmc2V0IGVudHJ5IHsgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChpKSB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEu
aAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoK
ICAgICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZhbGlkR1BSUmVnIH07CiAKICAgICB2
b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldHVw
Q2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCopOwogI2VuZGlm
CiAgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBAIEpJVDo6SklUKFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxz
ZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOwogfQogCiBKSVQ6On5KSVQo
KQpAQCAtOTAsOCArOTEsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2so
KQogICAgICAgICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0gICAgCi0g
ICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihP
cHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRk
cmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
IHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0
aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1Qw
LCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBBU1NFUlQo
IW1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxl
ZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCkudG9wRW50cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNCwxOCBAQCB2b2lkIEpJVDo6ZW1pdE5v
dGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBw
b2ludGVyVG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcg
cG9pbnRlclRvU2V0KQogewogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJl
c3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25seUNo
ZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQordm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25seUNo
ZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhclJlYWRPbmx5
V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFyUmVhZE9ubHlXYXRjaHBvaW50KSks
IHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBZGRyZXNz
KHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0z
MihJc0ludmFsaWRhdGVkKSkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9p
bnRlck9mZnNldCgpCkBAIC0xMjksNyArMTMzLDcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9p
bnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwor
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRD
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7
CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsKQEAgLTE4MSwyMSAr
MTg1LDQxIEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWMKICAgICBz
bG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1dENvZGVCbG9ja1RvRnJh
bWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxp
bmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOworICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVzdWx0KTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVP
clJhcmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGJyYW5jaFRl
c3RQdHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9u
OjpyYXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uUmFy
ZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBy
ZXN1bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAgICBpZiAobV91bmxpbmtl
ZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVz
dWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkp
LCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVu
Y3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSksIHJlc3VsdCk7CisK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpv
ZmZzZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIocmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworfQorCiB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQot
ICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICAg
ICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4iKTsKICAg
ICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3VtZW50Q291
bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3RydWN0aW9u
Q291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAKICAg
ICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJsb2NrLT52
bSgpOworICAgIFZNJiB2bSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnZtKCk7CiAgICAgQnl0ZWNv
ZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7CisKKyAgICAvLyBPT1BTOiBNYXliZSBvbmx5
IGRvIHRoaXMgaWYgd2UgZGlzYWJsZSBzaGFyaW5nIHNvbWVob3c/CisgICAgLyoKICAgICBpZiAo
bV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4ICYmIChtX2NvZGVCbG9jay0+aW5oZXJpdHM8UHJv
Z3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0czxNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrPih2bSkpKSB7CiAgICAgICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgb3B0aW1p
emF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFtQ29kZUJsb2NrJ3MgZXhhY3RseSBvbmNl
LgogICAgICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBiZSBpbnZhbGlkIG90aGVyd2lz
ZS4gV2hlbiB0aGUgTExJbnQgZGV0ZXJtaW5lcyBpdCB3YW50cyB0bwpAQCAtMjM2LDYgKzI2MCw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KKyAgICAqLwogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nh
c2UgPSAwOwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CkBAIC0yNzgsOSAr
MzAzLDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAgIHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewot
ICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAgICAg
ICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7Ci0gICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tv
cGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2Nr
KTsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJh
bWUqPigpLT5jb2RlQmxvY2soKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwg
Ynl0ZWNvZGVPZmZzZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3
UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjdHguZ3ByPENvZGVCbG9jayo+KHJlZ1QwKSk7CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgfQogCkBAIC01MjcsNyArNTUyLDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0
VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2Rl
SW5kZXgpLnB0cigpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkK
ICAgICAgICAgICAgIGRhdGFMb2dMbigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBm
b3IgIiwgbV9ieXRlY29kZUluZGV4LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgp
KTsKQEAgLTU0NSw4ICs1NzAsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQogCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0
aW9uKCkpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9j
b2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0
eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxG
cmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsi
LCBieXRlY29kZU9mZnNldCwgIl0gU0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2Zy
ICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9CkBAIC02NzYsMTcgKzcwMSwxNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMoKQogCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxp
emluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5
TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgLy8gT09Q
UzogTWF5YmUgdGhpcyBzaG91bGQgYmUgZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJsb2NrPworICAg
IERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJp
bGl0eUxldmVsKCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RD
b21waWxlOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2Fu
QmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmls
aW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgog
ICAgIGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1p
emVkID0gdHJ1ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAg
ICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CkBAIC02OTQsMzUgKzcxOCwzOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtX
aXRob3V0RmluYWxpemluCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKLSAgICBzd2l0Y2gg
KG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7CisgICAgLy8gT09QUzogaGFuZGxlIHRoaXMgZWxz
ZXdoZXJlPworICAgIHN3aXRjaCAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSkgewog
ICAgIGNhc2UgR2xvYmFsQ29kZToKICAgICBjYXNlIE1vZHVsZUNvZGU6CiAgICAgY2FzZSBFdmFs
Q29kZToKLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFs
c2U7CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
ID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRnVuY3Rpb25Db2RlOgogICAgICAg
ICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0
ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCiAgICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRo
YXQgb2JzZXJ2YXRpb24uCi0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5s
aW5lZCAmPSBjYW5JbmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbihtX2Nv
ZGVCbG9jayk7CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkICY9IGNhbklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1f
cHJvZmlsZWRDb2RlQmxvY2spOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAobV9j
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2RlQmxv
Y2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAg
aWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQotICAg
ICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBU
YWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5u
dW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMg
PSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9j
ay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29kZUJs
b2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAg
IGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxl
cygpKQorICAgICAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxl
SnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVt
cFRhYmxlcygpKTsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRDb2Rl
QmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAgIH0K
IAotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQ
cm9maWxlcigpKSkpCi0gICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNh
c3NlbWJsZXI+KG1fY29kZUJsb2NrKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERp
c2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpk
aXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIE9PUFM6IGJ1
aWxkIGEgZGlzYXNzZW1ibGVyIG9mZiB1bmxpbmtlZCBjb2RlIGJsb2NrCisgICAgICAgIG1fZGlz
YXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2RlQmxv
Y2spOworICAgIH0KICAgICBpZiAoVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
KSkgeworICAgICAgICAvLyBPT1BTOiBidWlsZCBwcm9maWxlciBkaXNhc3NlbWJsZXIgb2ZmIHVu
bGlua2VkIGNvZGUgYmxvY2sKICAgICAgICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAogICAg
ICAgICAgICAgbmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBtX3Zt
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9jayks
CisgICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRl
Y29kZXNGb3IobV9wcm9maWxlZENvZGVCbG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmlsZXI6
OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVz
KCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9j
b21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlciwgbV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUlu
ZGV4KDApKSk7CkBAIC03NDIsMTEgKzc2OSwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtX
aXRob3V0RmluYWxpemluCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlKQorICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJv
bG9ndWUoKTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJhbWVU
b3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVkIG1h
eEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZy
YW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlzdCBz
dGFja092ZXJmbG93OwpAQCAtNzU3LDE2ICs3ODUsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRM
aW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVDYWxs
ZWVTYXZlcygpOworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRM
aXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0ZXJp
YWxpemVUYWdDaGVja1JlZ2lzdGVycygpOworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5k
Q29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4
KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKTsgKythcmd1bWVudCkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygp
ICYmICghbV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5rZWRD
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3Vt
ZW50VmFsdWVQcm9maWxlcygpICsgRml4ZWRWZWN0b3I6Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVn
VDIpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQg
PCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAg
ICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0
byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBr
ZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNv
cmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXND
b25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxpbmtl
ZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6
YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArODA5LDEy
IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BS
KCkpOwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBv
ZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJl
Z3MudGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1
bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3Mo
cmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9m
ZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0
VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmlsZWRD
b2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQog
ICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFy
a2VyKSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MzEsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRM
aW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
MCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlvbldp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxv
d0Vycm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIo
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yLCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwg
d2UgbmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1
cCA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2RlQmxv
Y2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewor
ICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkg
PT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5
Q2hlY2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2Rl
QmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rpb25Q
cm9sb2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ss
IENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0Zy
YW1lSW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksIEFk
ZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkp
OwogCiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtU
byhiZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxp
bmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1f
Y29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNr
IDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxs
RnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0
b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlD
aGVjaywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVz
dDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04
MzksNyArODc0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgog
ICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0
ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxv
Y2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBtX2xp
bmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRo
aXMsIG1fdW5saW5rZWRDb2RlLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZm
b3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04NTgsOCArODkzLDggQEAgdm9pZCBKSVQ6Omxp
bmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAgICAgIGNhc2UgU3dpdGNo
UmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXI6
IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5z
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlW3RhYmxlSW5kZXhdOwogICAgICAg
ICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxK
U1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9m
ZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2VkVGFi
bGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEsOCAr
OTA2LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTd2l0
Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlE
ZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9y
IChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMoKSkg
ewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNoT2Zm
c2V0OwpAQCAtOTE5LDE5ICs5NTQsMTQgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMsIHBhdGNoQnVmZmVyKTsKIAogICAg
IGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0g
ICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZv
OwotICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0
YXJ0KSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxM
aW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87Cisg
ICAgICAgIGluZm8uZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKLSAgICB7
Ci0gICAgICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVs
cy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmIChtX2xhYmVsc1ti
eXRlY29kZU9mZnNldF0uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRl
ci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIu
ZmluYWxpemUoKSk7CisgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7Cisg
ICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9s
YWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1ti
eXRlY29kZU9mZnNldF0uaXNTZXQoKSkKKyAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFw
cGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAKICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjMg
Kzk3MCwzMyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1f
Y29tcGlsYXRpb24pKSB7CisgICAgICAgIC8vIE9PUFMKICAgICAgICAgaWYgKE9wdGlvbnM6OmRp
c2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKQogICAgICAgICAgICAgbV9kaXNhc3NlbWJs
ZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21waWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwot
ICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29k
ZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CisgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9maWxlZENvZGVCbG9jaywgKm1fY29tcGlsYXRpb24p
OwogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1h
cHBpbmcoKSkKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0Nv
ZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1
ZmZlcik7CiAgICAgCisgICAgLy8gT09QUzoKICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJl
c3VsdCA9IEZJTkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFn
LAotICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9j
a1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7
CisgICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2Nr
V2l0aEpJVFR5cGUobV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5k
YXRhKCkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3
aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9h
cml0eUNoZWNrKTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUo
cmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2pp
dENvZGUgPSBhZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNo
ZWNrKSk7CisKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxp
bmtlZENhbGxzKTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3Zl
KG1fZXZhbENhbGxMaW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZv
cyA9IFdURk1vdmUobV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRj
aEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2Rl
LT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlcyk7CisgICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5m
aW5hbGl6ZSgpOworICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CiAKICAg
ICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJh
dGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3VsdC5leGVj
dXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVN
ZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CisgICAgICAgIGRhdGFMb2dGKCJKSVQgZ2Vu
ZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV91bmxpbmtlZENvZGVCbG9jaywg
cmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQu
ZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKIH0KIAogQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZCgpCkBAIC05NjgsMTEgKzEwMDgsMTMg
QEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5r
QnVmZmVyLT5ydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MoKTsKIAotICAgIHsKLSAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAg
ICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KGxvY2tlciwgQ29kZUJsb2NrOjpTaHJpbmtNb2Rl
OjpMYXRlU2hyaW5rKTsKLSAgICB9CisgICAgLy8gT09QUzogRG9uJ3QgdGhpbmsgdGhpcyBpcyBk
b2luZyBhbnl0aGluZyBhbnltb3JlLgorICAgIC8veworICAgIC8vICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgLy8gICAgbV9jb2RlQmxvY2st
PnNocmlua1RvRml0KGxvY2tlciwgQ29kZUJsb2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5rKTsK
KyAgICAvL30KIAorICAgIC8vIE9PUFM6IE1vdmUgdGhpcyB0byAibGlua2luZyIgd2l0aCBiYXNl
bGluZSBKSVQgY29kZS4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5u
dW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgewogICAgICAgICBIYW5kbGVySW5mbyYg
aGFuZGxlciA9IG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOwogICAgICAgICAvLyBG
SVhNRTogPHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KQEAgLTk4NCw3ICsxMDI2LDcgQEAgQ29t
cGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocgogCiAgICAgbV92bS0+bWFjaGlu
ZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0
YXRpY19jYXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAgICAgICAgc3RhdGljX2Nh
c3Q8ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CisgICAgICAgIHN0
YXRpY19jYXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgp
KSk7CiAKICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51
bGwoKSk7CiAKQEAgLTEwNDIsMTQgKzEwODQsMTQgQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFBy
ZXBhcmF0aW9uQmVmb3JlQwogICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vz
c0xvZ0VudHJpZXMoKm1fdm0sICJQcmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwog
fQogCi11bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJs
b2NrKiBjb2RlQmxvY2spCiB7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2Rl
QmxvY2stPm51bUNhbGxlZUxvY2FscygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCkpKSk7CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291
bnRGb3JGcmFtZVBvaW50ZXJPZmZzZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpz
dGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCitpbnQgSklUOjpzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVC
bG9jaykgLSAxKS5vZmZzZXQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2
aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNiArNTAsMzQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyAgICBjbGFz
cyBKSVRDb25zdGFudFBvb2wgeworICAgIHB1YmxpYzoKKyAgICAgICAgdXNpbmcgQ29uc3RhbnQg
PSB1bnNpZ25lZDsKKworICAgICAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICAg
ICAgICAgIEdsb2JhbE9iamVjdCwKKyAgICAgICAgICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAg
ICAgIFN0cnVjdHVyZVN0dWJJbmZvLAorICAgICAgICAgICAgRnVuY3Rpb25EZWNsLAorICAgICAg
ICAgICAgRnVuY3Rpb25FeHByLAorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBWYWx1ZSB7
CisgICAgICAgICAgICBUeXBlIHR5cGU7CisgICAgICAgICAgICBQYWNrZWRQdHI8dm9pZCo+IHBh
eWxvYWQ7CisgICAgICAgIH07CisKKyAgICAgICAgQ29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgUGFj
a2VkUHRyPHZvaWQqPiBwYXlsb2FkID0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAg
dW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudHMuc2l6ZSgpOworICAgICAgICAgICAgbV9jb25z
dGFudHMuYXBwZW5kKFZhbHVlIHsgdHlwZSwgcGF5bG9hZCB9KTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFZlY3RvcjxWYWx1
ZT4gbV9jb25zdGFudHM7CisgICAgfTsKKwogICAgIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IAogICAgIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CkBAIC0xNDksOSArMTc3LDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25JbmZv
IHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247Ci0gICAgICAgIENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRD
YWxsTGlua0luZm87CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJ
bmZvQ29uc3RhbnQ7CiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2Fs
bGVlRnVuY3Rpb24pOwpAQCAtMTg4LDggKzIxNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNv
bXBpbGUoZWZmb3J0KTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFt
ZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7Ci0gICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOworICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJh
bWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyBp
bnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gY29tcGls
ZVRpbWVTdGF0cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU2Vjb25kcyB0
b3RhbENvbXBpbGVUaW1lKCk7CkBAIC0yMjMsNiArMjUxLDMwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+
CisgICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgorICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgorICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90
IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBl
LCB0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKFZhbHVl
VHlwZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BS
UmVnLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAg
ICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7Cisg
ICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRD
b2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisKKyAgICAgICAgdm9p
ZCBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1Qw
KTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRvSGFuZGxlcikKICAg
ICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGp1bXBUb0hhbmRs
ZXIpOwpAQCAtMjU4LDE2ICszMTAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgJiYg
T3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlu
a0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92
YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAg
ICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+
IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBj
YWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChj
b25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAg
dm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI5MSwxMCArMzQzLDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmls
ZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8v
IHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRh
dGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICAv
L3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOworICAg
ICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVl
UmVncyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5
dGVjb2RlJiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYs
IEpTVmFsdWVSZWdzKTsKQEAgLTMwNyw2ICszNTksMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxs
R1BSLCBBcnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lk
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lz
dGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdp
c3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+
CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVj
b2RlJiwgcHRyZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQ
Uik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2RlIGVj
bWFNb2RlKE9wKTsKQEAgLTU5Miw3ICs2NDgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02MjYsMTQg
KzY4MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZShWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSk7Ci0gICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVT
bG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUpOworICAgICAgICB2b2lkIGVtaXRI
YXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlKTsKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBl
bWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBl
bWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAg
ICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUpOworICAgICAgICB2b2lk
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJS
ZWcpOworICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBHUFJS
ZWcgc2NyYXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwogICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xv
dCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY0NSw3ICs3MDAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICNlbmRpZgogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0
ZShXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBw
b2ludGVyVG9TZXQpOworICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BS
UmVnIHBvaW50ZXJUb1NldCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpT
VmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwog
ICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRy
ZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAg
ICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50
cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CkBA
IC02NTQsNiArNzA5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0UHV0
SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwog
CisgICAgICAgIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSlNW
YWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBp
c09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3Bl
cmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjk1LDI2ICs3NTEsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IEdsb2Jh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUg
PT0gTW9kdWxlVmFyKTsKICAgICAgICAgfQogCi0jZGVmaW5lIERFQ0xBUkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUj
I0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9H
RVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9H
RU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKTsKLQotICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1VzZWRGb3JP
cFJlc29sdmVTY29wZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gTW9kdWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gZW1pdCBp
bmxpbmUgdGhhbiB1c2UgYSB0aHVuay4KLSAgICAgICAgICAgIC8vIFJlc29sdmVkQ2xvc3VyZVZh
ciBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9wX3Jlc29sdmVfc2NvcGUu
Ci0gICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIg
fHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAgICAgfQotCi0jZGVmaW5lIERFQ0xB
UkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmVzb2x2ZV9zY29wZV8j
I3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9SRVNP
TFZFX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoc3RkOjpvcHRpb25h
bDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2Nv
cGVUaHVuayhzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1l
KTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mKTsK
QEAgLTc1OSwxMCArNzk3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwog
ICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFk
YXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5
dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsK
ICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3Bl
cmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjAsMjAg
Kzg1OCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7
CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+
CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46
Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAg
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlw
ZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwg
dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVz
cyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVz
cyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAg
ewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9uVHlw
ZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRyZXNz
KEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9m
ZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE4LDExICs5NTYsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBib29sIGNhbkJlT3B0
aW1pemVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZDsgfQotICAgICAgICBib29sIGNhbkJl
T3B0aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsg
fQogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBtX3Nob3VsZEVt
aXRQcm9maWxpbmc7IH0KICNlbHNlCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJl
dHVybiBmYWxzZTsgfQotICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICAgICAgLy8gRW5hYmxlcyB1c2Ugb2YgdmFsdWUgcHJvZmlsZXIg
d2l0aCB0aWVyZWQgY29tcGlsYXRpb24gdHVybmVkIG9mZiwKICAgICAgICAgLy8gaW4gd2hpY2gg
Y2FzZSBhbGwgY29kZSBnZXRzIHByb2ZpbGVkLgogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtOTMwLDEzICs5NjYsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAg
ICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAgICAgICAKLSAgICAgICAg
Ly8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBh
bmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZh
c3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KLSAgICAgICAgLy8g
SXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFz
dCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3Bl
KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCiAgICAgICAgIEludGVy
cHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjMsOSArOTkyLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAg
VmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2ln
bmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50
NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAg
ICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0
aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKQEAgLTk5OSwxMSArMTAyNSwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGFz
aE1hcDxjb25zdCBJbnN0cnVjdGlvbiosIFVuaXF1ZVJlZjxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+
PiBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGU7CiAKICAgICAgICAgYm9vbCBt
X2NhbkJlT3B0aW1pemVkOwotICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7
CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUlu
ZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKIAotICAgICAgICBSZWZQdHI8RGlyZWN0
SklUQ29kZT4gbV9qaXRDb2RlOworICAgICAgICBNYXRoSUNIb2xkZXIgbV9tYXRoSUNzOworICAg
ICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENvZGU7CisKKyAgICAgICAgSklUQ29u
c3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkgfTsKKyAgICAgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2Vk
Q2FsbHM7CisgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7Cisg
ICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9z
OworICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxl
czsKKyAgICAgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXM7CisKKyAgICAgICAgR1BSUmVnIG1fbWV0YWRhdGFHUFI7CisgICAgICAgIEdQUlJl
ZyBtX2NvbnN0YW50c0dQUjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjgx
NzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlz
T3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzIwLDcgKzMyMSw4
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQog
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7
CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDog
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBy
ZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVn
VDMsIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJl
Z1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihp
bnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBA
IC01NzMsNyArNTc3LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0
IAogCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwg
cmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQog
CkBAIC03MTcsOCArNzIyLDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJ
bnN0cgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGUoY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUTmVnSUMq
IG5lZ2F0ZUlDID0gbV9tYXRoSUNzLmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9p
bnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG5lZ2F0ZUlDKTsKICAg
ICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFs
dWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRo
SUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25B
cml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CkBAIC04OTksOCArOTA0
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAg
ICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxl
KTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29k
ZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4o
KS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9tYXRoSUNzLmFkZEpJ
VEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9u
VmFsdWVBZGQpOwogfQpAQCAtOTQ1LDEwICs5NTAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNG
YXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJ
Qy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYg
KCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNy
Y1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7CisgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCBzY3JhdGNoR1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2Uo
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDE1LDEwICsxMDIx
LDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICAgICAg
ZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxl
ZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwNTUsMTMgKzEwNjIsMTQg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogI2VuZGlmCiAKICAg
ICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUo
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0
YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2Zp
bGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0
LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRl
cnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdz
LCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxK
X0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQs
IHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExMjAsMTMgKzExMjgs
MTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogI2VuZGlmCiAK
ICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9m
aWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmls
ZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRS
ZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
Yml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
YXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJ
VE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1B
VEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTY2LDcg
KzExNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgaWYgKHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OworICAgICAgICBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJp
dGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubV9wcm9maWxlSW5kZXgp
OwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlw
ZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1f
b3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKQEAgLTEyMTEsOCArMTIyMCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJp
dGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkpOworICAgIEpJVE11bElD
KiBtdWxJQyA9IG1fbWF0aElDcy5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1p
dE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KQEAgLTEyMjcsOCArMTIzNiw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAg
SklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVC
bG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkp
OworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhhcml0aFByb2Zp
bGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBz
dWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9u
IDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2
YWwoY29uc3QgT3BDYWxsRXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgcmVnVDEpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1Qx
LCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwpAQCAtMjU5LDcgKzI1OSw3IEBA
IHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKIAogICAgIGVtaXRMb2Fk
KGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
ICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1
bHQoYnl0ZWNvZGUpOwpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
KGNvbnN0IEluc3RydWN0aW8KICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogICAgIG1fY2Fs
bENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwo
KTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM0MSw3ICsz
NDEsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgfQog
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgaWYgKG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJn
cyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM1NCw3ICszNTMsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lk
IEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDEw
ICs1Myw5IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxf
dmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBP
cDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsK
ICAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBpbnQgYXJnQ291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNG
b3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0
aWNfY2FzdDxpbnQ+KHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVj
a3BvaW50KSk7CiAKQEAgLTY0LDcgKzYzLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYgYnl0ZWNvZAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdU
aGlzKDApKSwgcmVnVDApOwogICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDApOwotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBhcnJheVByb2ZpbGVGb3Io
bWV0YWRhdGEsIGNoZWNrcG9pbnQpLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7Cisg
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgcmVnVDAsIHJl
Z1QwKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyArNzcsNyBA
QCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3Mg
fHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlu
a0luZm9Db25zdGFudCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNv
ZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2Rl
Lm1fYXJndW1lbnRzOwpAQCAtOTEsNyArOTAsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNv
bnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJh
bWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9
IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qx
LCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCBy
ZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJh
cmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lk
KikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEwMSwxNiBA
QCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVw
T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxz
ZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwot
ICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVn
VDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0
dXBPcGVyYXRpb24sIHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdU
MCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0
aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFk
ZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1w
IG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMy
KHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsK
KyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIo
QWJvdmUsIHJlZ1QzLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwg
Q2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsK
ICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhp
cycuCkBAIC0xMjcsMTYgKzEyOSwxNiBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0
IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxs
RXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdU
MSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZy
YW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1l
T2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxF
dmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7Ci0KLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxs
RXZhbCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENh
bGxSZXN1bHQoYnl0ZWNvZGUpOwogCkBAIC0xNDgsNyArMTUwLDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAg
Q2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENh
bGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+
c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVy
T2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKQEAgLTE1Niw0MyArMTU4LDQ2IEBAIHZvaWQgSklU
Ojpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBs
b2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsK
LSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
aW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZp
cnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1
dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wg
SklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkK
LXsKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5r
SW5mbyosIHVuc2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KSB7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0
IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxs
JiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50
KQogewotICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVE
YXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVt
YmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxl
RGF0YS5udW1Mb2NhbHMgPQorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0
YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOworICAg
IHNodWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAgIHNodWZm
bGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwor
ICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVE
YXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1ZmZsZURhdGEtPmFyZ3Mu
cmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5
dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAg
ICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5Ojpk
aXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAgICAgICAg
IERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAgICAg
IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotICAgIHNodWZmbGVE
YXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7Ci0gICAgaW5mby0+c2V0
RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9
IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgIHNodWZmbGVE
YXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1bXBMaXN0IHNsb3dQYXRo
cyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgbG9hZENvbnN0
YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhz
ID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAs
IHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgKnNodWZmbGVE
YXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93
UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CisgICAgaW5mby0+ZnJh
bWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAgICAgYXV0byBkb25lTG9j
YXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjE4LDE0ICsyMjMs
MjUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAt
IENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENhbGxl
ciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KLSAgICBD
YWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxs
X2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUs
IGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0gVUlOVF9NQVg7CisgICAg
aWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBVbmxpbmtlZENhbGxMaW5r
SW5mbyogaW5mbyA9IG1fdW5saW5rZWRDYWxscy5hZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxs
TGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsKKworICAgICAgICBpbmZvQ29uc3RhbnQg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8s
IGluZm8pOworCisgICAgICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09
IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVu
ZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLnVubGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25z
dGFudCA9IGluZm9Db25zdGFudDsKKyAgICB9CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNv
ZGUsIGluZm9Db25zdGFudCk7CiAKICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAg
ICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVj
dGlvbik7Ci0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29k
ZUluZGV4KS5iaXRzKCk7CisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2Nh
dGlvbkJpdHMpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkgKyBUYWdPZmZzZXQpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBy
ZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNhbGxlZS4KQEAgLTIzNCwxNiArMjUwLDEzIEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxF
dmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fY2FsbENvbXBp
bGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVw
Q2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOwotICAgIG1f
Y2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBt
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGlu
Zm87Ci0KLSAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0lu
Zm9JbmRleCkpCisgICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExp
bmtJbmZvSW5kZXgsIGluZm9Db25zdGFudCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGxvYWRD
b25zdGFudChpbmZvQ29uc3RhbnQsIHJlZ1QyKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKSB7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZd
IHsKKyAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CisgICAgICAgICAgICAvLyBP
T1BTCiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBw
cmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKICAgICAgICAgfSk7CkBAIC0yNTMsMTMgKzI2
NiwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRGYXN0UGF0
aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAg
ICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBh
ZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBl
bWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0yNzMsMjAgKzI4NiwyMiBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5z
bG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAg
ICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5j
YWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOwogCi0gICAgaWYgKG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCisgICAgaWYgKG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKKyAgICAgICAgLy8gT09QUwog
ICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgfQogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNs
b3dQYXRoKCptX3ZtLCAqdGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1Bh
dGgoKm1fdm0sICp0aGlzLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24o
SklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcg
KzQxMCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAg
ICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50
LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2Fz
ZS5saW5rKHRoaXMpOwogfQpAQCAtNDE2LDEwICs0NDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0
b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQ
UlJlZyBpdGVyYXRvckdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBK
dW1wTGlzdCBub3RPYmplY3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlcmF0b3JHUFIpKTsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0
ZXJhdG9yR1BSKSk7CkBAIC00MzIsMTkgKzQ1OCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIG1vdmUoaXRlcmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBuZXh0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCku
cmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiAKICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0
aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05v
dE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAg
ICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00NTIsNyArNDc2LDYgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4
dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rp
b24gPSAoWyZdICgpIHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewog
ICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93
OwpAQCAtNDcwLDUwICs0OTMsNzQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbgogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJh
dGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAg
IG9yOChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2Vu
ZXJpYykpLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vl
bk1vZGVzKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1l
dGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7
CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFk
YXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JO
ZXh0PihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludCgpOwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNP
YmplY3QpIGluIHJlZ1QwCiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJS
ZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0g
ICAgLy8gaXRlclJlc3VsdEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkg
aWQgYmVsb3cuCi0gICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2Fs
bFJlc3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRS
ZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBw
cmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0
ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRv
bmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVH
UFIpLCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5k
b25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VU
b05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3Jh
dGNoMSA9IHJlZ1QyOwotICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAg
UmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7Cisg
ICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdp
c3RlcnMpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2Ny
YXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExp
c3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVH
UFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRp
b25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBnbG9iYWxHUFIpOwogCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CiAgICAgICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwo
KSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCByZWdUNCwg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnBy
b3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKLSAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7Cisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHJlc3VsdEdQUik7CiAKICAgICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwogICAg
IH0KQEAgLTUyNyw1OSArNTc0LDU1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9u
ZXh0KGNvbnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2Fs
bFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgewog
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7Ci0gICAg
ICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKICAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwotICAgICAgICBub3RPYmpl
Y3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJDYWxsUmVzdWx0R1BSKSk7CiAKICAgICAg
ICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmlt
cGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dl
dEJ5SWRJbmRleCsrXTsKICAgICAgICAgCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCi0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRl
clJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0
KGl0ZXJDYWxsUmVzdWx0R1BSKSk7CiAKLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BS
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50
KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUsIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkp
OwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwot
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIHJlZ1QxKTsKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7CisgICAg
ICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4o
Ynl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCBkb25lVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBk
b25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIGRvbmVHUFIpOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAg
ICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90
T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJ
dGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSkpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2Jq
ZWN0LCBhcmd1bWVudEdQUjApOwogICAgIH0KIAogICAgIHsgICAKICAgICAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVj
b2RlLm1fdmFsdWU7Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKICAg
ICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1
ZS5pbXBsKCk7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNb
bV9nZXRCeUlkSW5kZXgrK107CiAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwot
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhH
UFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0
aW9uKCkpLCB2YWx1ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
LCB2YWx1ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgICAgIG1vdmUoaXRl
ckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFk
ZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0
aW9uKCkpLCB2YWx1ZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQpLnJhd0JpdHMoKSk7CisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKICAgICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OSwxMCAr
MTU5LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGpp
dFR5cGUpCiAgICAgeworICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlw
ZSkpIC8vIE9PUFMKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAoIU9wdGlv
bnM6OnVzZURhdGFJQygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
SklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpOwog
ICAgIH0KIApAQCAtMjQ4LDYgKzI0OCw0MSBAQCBwcm90ZWN0ZWQ6CiAgICAgQ29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPiBtX3JlZjsKIH07CiAKK2NsYXNzIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6Cisg
ICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcikKKyAgICB7CisgICAgICAg
IG1fYWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2FkZElDcyk7CisgICAgICAgIG1fbXVsSUNzID0g
V1RGTW92ZShvdGhlci5tX211bElDcyk7CisgICAgICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhl
ci5tX25lZ0lDcyk7CisgICAgICAgIG1fc3ViSUNzID0gV1RGTW92ZShvdGhlci5tX3N1YklDcyk7
CisgICAgfQorCisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlKSB7IHJldHVybiBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorICAg
IEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkg
eyByZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKyAgICBKSVRTdWJJQyogYWRk
SklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3Vi
SUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0aFBy
b2ZpbGUpOyB9CisKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
ID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRk
R2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5
QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2
YWx1ZT46OnR5cGU+CisgICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUq
IHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4K
KyAgICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJl
dHVybiBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8
R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUU3ViSUMq
IGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1
YklDKHByb2ZpbGUpOyB9CisKK3ByaXZhdGU6CisgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsK
KyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7
CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKK307CisKIERFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKERpcmVjdEpJVENvZGUpOwogY2xhc3MgRGlyZWN0SklUQ29kZSA6
IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FM
TE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihEaXJlY3RKSVRDb2RlKTsKQEAgLTI2Niw2ICsz
MDEsMjAgQEAgcHJpdmF0ZToKICAgICBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fd2l0aEFyaXR5
Q2hlY2s7CiB9OwogCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29k
ZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2RlKENv
ZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJp
dHlDaGVjaykKKyAgICAgICAgOiBEaXJlY3RKSVRDb2RlKFdURk1vdmUoY29kZSksIHdpdGhBcml0
eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICB7IH0KKworICAgIEJhZzxVbmxpbmtl
ZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1f
ZXZhbENhbGxMaW5rSW5mb3M7IC8vIE9PUFM6IG1ha2Ugc3VyZSB3ZSB2aXNpdCB0aGVzZSBzb21l
aG93LiBPciBhc3NlcnQgd2UgZG9uJ3QgaGF2ZSB0bywgc2luY2UgdGhleSdyZSB2aXJ0dWFsIGNh
bGxzLgorICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1Yklu
Zm9zOworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVz
OworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzOworICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworfTsKKwogY2xhc3MgTmF0aXZlSklU
Q29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgewogcHVibGljOgogICAgIE5hdGl2ZUpJ
VENvZGUoSklUVHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vz
cy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0
dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUg
aml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlw
ZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVC
bG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6
IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxv
Y2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZv
KCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9z
dHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBA
IHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXIm
IGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7
Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyht
X2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
cjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xv
d1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsK
IH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvLCBH
UFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworICAgIFJF
TEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKyAgICBqaXQubG9h
ZENvbnN0YW50KHN0dWJJbmZvLCBzdHJ1Y3R1cmVTdHViSW5mb0dQUik7CisgICAgaml0LmNhbGwo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9kb25lID0gaml0
LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFs
dWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMTMgQEAgbmFtZXNwYWNlIEpTQyB7
CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNz
IENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVt
IGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90
OwogCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeUlk
UmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6
cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdU
MzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7
Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVFbnVt
ZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0g
R1BSSW5mbzo6cmVnVDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENv
ZGVCbG9jayBhbmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5m
by4KKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJhc2Vs
aW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUg
PSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJv
dG8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVjdCBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2Ug
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9
IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJl
Z1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdU
MjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3Qg
QmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKK307CisK
K3N0cnVjdCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1Qx
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJy
YW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xhc3Mg
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hl
R2VuZXJhdG9yKCkgeyB9CkBAIC02MiwxNSArMTY0LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIGZp
bmFsaXplKAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZm
ZXImIHNsb3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9D
b25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogbV91bmxpbmtlZFN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7IHN0ZDo6bnVt
ZXJpY19saW1pdHM8SklUQ29uc3RhbnRQb29sOjpDb25zdGFudD46Om1heCgpIH07CisKIHByb3Rl
Y3RlZDoKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBl
OwogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJl
Z2luOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOyAvLyBPT1BTOiBtYWtlIHJlcG9ydENhbGwg
cGFzcyBzb21ldGhpbmcgaW4gd2UgY2FuIHVzZSBmb3IgdGhlIG5vbi1DVEkgdGh1bmtzIGJ1aWxk
cy4gCiB9OwogCiBjbGFzcyBKSVRCeUlkR2VuZXJhdG9yIDogcHVibGljIEpJVElubGluZUNhY2hl
R2VuZXJhdG9yIHsKQEAgLTEzMiw4ICsyMzksOCBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdl
bmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAg
IENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVn
cyBiYXNlLAotICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBH
UFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBK
SVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gs
IEVDTUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFu
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMp
Cit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzSW50MzIoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmly
dHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Okxp
bmtUaW1lQ29uc3RhbnQpIHsKKyAgICAgICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQg
dGhhdCBhbGwgbGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7
CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICBy
ZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3Jj
KSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJl
dHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBm
cm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJ
VDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
ZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29k
ZT4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZh
bHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAg
ICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5k
aWYKICAgICByZXR1cm4gY2FsbDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlv
biwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVu
Y3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVH
UFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhy
ZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0
dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29k
ZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZh
bmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVj
b2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0g
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhh
c0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVj
dGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNv
ZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVj
b2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2tw
b2ludExhYmVscy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAs
NyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVCht
X3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0No
ZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAK
ICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgp
OwpAQCAtMjkzLDI5ICszMTgsMzQgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50
KEFic3RyYQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIo
VmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQg
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBK
U1ZhbHVlUmVncyB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsK
LQotICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tl
dCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMp
OwotI2Vsc2UKLSAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lz
ZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsK
LSAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXls
b2FkKTsKLSAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRh
Zyk7Ci0jZW5kaWYKLX0KKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1l
Q29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Cit9CisKKy8vIE9PUFMKKy8vaW5saW5lIHZvaWQg
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBK
U1ZhbHVlUmVncyB2YWx1ZSkKKy8veworLy8gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmco
KSk7CisvLworLy8gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBv
bmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAorLy8gICAgLy8gc3RvcmUuCisv
LyNpZiBVU0UoSlNWQUxVRTY0KQorLy8gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9m
aWxlLm1fYnVja2V0cyk7CisvLyNlbHNlCisvLyAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVBy
b2ZpbGUubV9idWNrZXRzKTsKKy8vICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVz
Y3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOworLy8gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwg
JmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOworLy8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShP
cDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
ICNlbmRpZgpAQCAtMzIzLDI0ICszNTMsMjUgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3Rk
Ojppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJ
ZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgot
aW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygp
KQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2Zp
bGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7Cisg
ICAgcHRyZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRl
Y29kZT4obV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNl
dE9mRmlyc3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKG1fbWV0
YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwg
R1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJv
ZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7Ci19CisvL2lubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJl
c3VsdFJlZykKKy8veworLy8gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUs
IEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworLy99CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFk
YXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBt
ZXRhZGF0YSwgR1BSUmVnIHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgor
aW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgR1BSUmVnIHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCkBA
IC0zNjAsNiArMzkxLDIxIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVcKICAgICB9CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lk
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdp
c3RlcklEIHNjcmF0Y2hHUFIpCit7CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewor
ICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlMzJUb01ldGFk
YXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmlsZSk7CisgICAgfQor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBSZWdpc3RlcklE
IGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3sKKyAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCks
IGNlbGxHUFIsIHNjcmF0Y2hHUFIpOworfQorCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4g
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwpAQCAtMzgwLDcgKzQyNiw3IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6
ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQog
ewogICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcp
OworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91Ymxl
KFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAg
ICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcgKzU0Miw3
IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZv
aWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykK
IHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFp
c0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcgKzU1Miw3
IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZv
aWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywg
UmVnaXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVn
KSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29u
c3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UK
QEAgLTUxNCwxMSArNTYwLDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZO
b3RKUwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQo
KSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFu
dCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0LDcgKzU4
NSw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBBU1NF
UlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4
IGlzIHNldC4KIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICAgICAgLy8gT09QUzog
aGFuZGxlIGxpbmsgdGltZSBjb25zdGFudHMgaGVyZS4uLgorICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIo
KSkKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkp
LCBkc3QpOwogICAgICAgICBlbHNlCkBAIC01NjYsMTEgKzYwOCw2IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFu
dEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBS
ZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwpA
QCAtNTk1LDcgKzYzMiw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2UKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAoIW1fY29k
ZUJsb2NrLT5pc0tub3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHZSZWcpKQog
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAtNjM3LDMw
ICs2NzQsNyBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7CiAg
ICAgaWYgKHRhcmdldCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4gbV9jb2Rl
QmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1BTFdBWVNfSU5M
SU5FIEdldFB1dEluZm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSBieXRlY29k
ZSkKLXsKLSAgICB1bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQgKyAxOyAvLyBI
YXNoTWFwIGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29w
aWVkR2V0UHV0SW5mb3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdl
dFB1dEluZm9zLmVuZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFs
dWUpOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2dldFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBn
ZXRQdXRJbmZvLm9wZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0aFByb2ZpbGUg
SklUOjpjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0gICAgdWludDY0
X3Qga2V5ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpICsgMSkg
PDwgMzIgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0YUlEKTsKLSAg
ICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5KTsKLSAgICBp
ZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAgICAgICByZXR1
cm4gaXRlcmF0b3ItPnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0aFByb2ZpbGUg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgbV9j
b3BpZWRBcml0aFByb2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJuIGFy
aXRoUHJvZmlsZTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVt
cE9mZnNldChpbnN0cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjgx
LDYgKzY5NSw2MSBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAg
ICAgcmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5
dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRhZGF0YShjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3MobV9tZXRhZGF0
YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0YWRhdGEoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQorewor
ICAgIGxvYWQ4KEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0
YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSB2YWx1
ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3Jl
OCh2YWx1ZSwgQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRh
ZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3Rv
cmUzMlRvTWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNp
emVfdCBvZmZzZXQpCit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVzcyhtX21ldGFkYXRhR1BS
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sK
KyAgICBhZGRQdHIobV9tZXRhZGF0YUdQUiwgVHJ1c3RlZEltbVB0cihtX3VubGlua2VkQ29kZUJs
b2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQp
LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29uc3RhbnQoSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBHUFJSZWcgcmVzdWx0KQorewor
ICAgIGxvYWRQdHIoQWRkcmVzcyhtX2NvbnN0YW50c0dQUiwgc3RhdGljX2Nhc3Q8dWludHB0cl90
Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZENvbnN0YW50
KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIEdQ
UlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgp
KTsKKyAgICAvLyBPT1BTOiBNYXliZSBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQ/CisgICAgbG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlc3VsdCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgb2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSks
IHJlc3VsdCk7CisgICAgbG9hZDY0KEFkZHJlc3MocmVzdWx0LCBjb25zdGFudC50b0NvbnN0YW50
SW5kZXgoKSAqIHNpemVvZihKU1ZhbHVlKSksIHJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0
aW8KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0
KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxs
cHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygp
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgp
KTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJldHVyblZhbHVlR1BSKTsKQEAgLTk5Nyw3ICs5OTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9z
d2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dp
dGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0
IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgs
IG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUp
KTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAt
MTAyNCw3ICsxMDI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5z
dAogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRy
YWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBU
YWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dp
dGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRl
ZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUu
ZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwNDIsNyArMTA0Miw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KIAogICAgIC8vIGNyZWF0ZSBq
dW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0
ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRj
aGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZh
dWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3Vy
ZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDExICs1NCwyMiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkp
IHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMp
OwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBzdG9yZTY0KFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKLSAg
ICAgICAgZWxzZQorICAgICAgICAvLyBPT1BTOiBtb3N0ICJPdGhlciIgU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uIGNvbnN0YW50cyBjYW4ganVzdCBiZSBncmFiYmVkIGZyb20gdGhlIFVubGlua2Vk
Q29kZUJsb2NrLiBJdCdzIGp1c3QKKyAgICAgICAgLy8gYSBjb3VwbGUgdHlwZXMgdGhhdCBjYW4n
dC4gQ3JlYXRlIGFuIGFic3RyYWN0aW9uIGZvciB0aGF0LgorCisgICAgICAgIHN3aXRjaCAobV91
bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykpIHsKKyAg
ICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6CisgICAgICAgIGNh
c2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6IHsKKyAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAg
ICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihk
c3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7CisgICAgICAgICAg
ICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NywzNyArOTgsMzUgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0Pigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2Jq
ZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFs
bG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpT
RmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxs
b2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAg
ICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2NyYXRj
aFJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CiAKLSAg
ICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRlcmZseSA9
IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJl
c3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcs
IFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2Fz
ZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwot
ICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShi
eXRlY29kZSwgT3BOZXdPYmplY3Q6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSAr
IG9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUoKSArIG9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJlZyk7CisKKyAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIp
OworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJp
YWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBz
bG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6Omlu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBlbWl0SW5pdGlhbGl6ZUlu
bGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKKyAgICBtdXRhdG9yRmVuY2UoKm1f
dm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19v
YmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKKwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3Ry
dWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdP
YmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTEzMSw3ICsxNDAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9v
dmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0
YW5jZVZhbHVlLCByZWdUMCk7CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hh
dCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5j
ZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0
aW9uKCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBKdW1wIGN1c3RvbWhh
c0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1Qx
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fZnVuY3Rpb25Qcm90b0hhc0luc3Rh
bmNlU3ltYm9sRnVuY3Rpb24pKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3Ry
dWN0b3IsIHJlZ1QwKTsKIApAQCAtMTU0LDMwICsxNjQsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90
b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2
YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBm
b3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2Ug
Y2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdU
MSk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm90b0dQUiA9IEJhc2VsaW5l
SW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRH
UFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBwcm90b0dQUik7CiAgICAgCiAgICAgLy8gQ2hl
Y2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlz
IGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChwcm90b0dQUiwgcHJvdG8pOwogCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAg
ICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVn
VDUsCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgcmVzdWx0R1BSLAorICAgICAg
ICB2YWx1ZUdQUiwKKyAgICAgICAgcHJvdG9HUFIsCisgICAgICAgIHN0dWJJbmZvR1BSLAorICAg
ICAgICBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxLCBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gyKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKKwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMTkyLDE0ICsyMTAsMTMgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0gICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+
KEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCByZWdUMiwgcmVnVDEpOwotICAg
IH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9m
T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2Vs
aW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm8gPT0gYXJndW1lbnRHUFIxKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWUgPT0gYXJndW1l
bnRHUFIyKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
cHJvdG8gPT0gYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpCisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0
YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTI0MCw3ICsyNTcsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAKICAgICBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDAp
OwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Qw
KTsKIApAQCAtMzc0LDcgKzM5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0
cnVjdGlvbioKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwotICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAg
ICByZXQoKTsKICNlbHNlCkBAIC0zODUsNyArNDAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0
KGNvbnN0IEluc3RydWN0aW9uKgogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJh
dG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgaml0LmVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAgLTQxMSw3ICs0MjgsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAKICAgICBpZiAoZHN0ICE9IHNyYykKICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDM0LDkgKzQ1MCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
CiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
ZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZnVuY3Rpb24sIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25hbWUsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NjUs
OCArNDgyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGkKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBi
b29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVt
cChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3Jh
dGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCks
IEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1Qx
LCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRh
cmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1
ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1
bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTQ4MCw3ICs0OTks
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQg
bWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFp
bGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlu
bGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1h
eSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
ID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNTE5
LDcgKzUzOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAg
ICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7
CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVh
bCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1Qw
KSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0g
anVtcCgpOwogCkBAIC01NDMsNyArNTYyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxs
KGNvbnN0IEluc3RydQogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sg
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBhZGRKdW1w
KGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsK
ICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCkBAIC01
ODIsMTUgKzYwMSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNv
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsK
LSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2Rl
Lm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwotICAg
IHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgbG9h
ZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QxKQorICAg
IENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICBzdG9yZThUb01ldGFkYXRhKGJ5dGVjb2RlLCBUcnVzdGVkSW1tMzIoMSksIE9wSm5l
cVB0cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOwogICAgIGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC02MjUsOCArNjQyLDEwIEBA
IHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRy
dXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFs
T2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxz
ZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTY0MCw3ICs2NTksNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNjk1LDcgKzcxNCw4IEBA
IHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAg
ICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTcxMSw3ICs3MzEsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6b3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB0aHJvd25WYWx1
ZUdQUiA9IGFyZ3VtZW50R1BSMTsKQEAgLTkwOCw3ICs5MjgsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTE4LDcgKzkz
OSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIApAQCAtOTMxLDcgKzk1Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihj
b25zdCBJbnN0cnUKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdU
MCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk1MSw3ICs5NzMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90b19udW1lcmljKGNvbnN0IEluc3RyCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RO
dW1iZXIocmVnVDApKTsKICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZS
ZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsK
IH0KQEAgLTk3OCw3ICsxMDAwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0
IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAh
PSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpA
QCAtOTkzLDcgKzEwMTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVj
dGlvCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNl
dCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVs
bHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2so
KSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0o
KSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMDExLDIzICsxMDMzLDExIEBAIHZvaWQgSklUOjplbWl0
X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywg
c3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKLSAgICBpZiAoYnVm
ZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNv
ZGVJbmRleC5hc0JpdHMoKSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2
bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZt
KCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBza2lwT1NSRW50cnkgPSBi
cmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0
clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYgKGJ1ZmZlciAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlUmVncyByZWdzKHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSwgcmVncyk7Ci0gICAgICAg
IH0pOwotICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIApAQCAtMTA1Myw4ICsx
MDYzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIFZp
cnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8v
IGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3
aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3
aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3
aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUo
dW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwODEsMTMgKzEwOTEsMTQgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUg
PSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBz
d2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29u
c3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBt
X2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7
CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCwgdW5saW5rZWRU
YWJsZS5tX21pbik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOwogICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIApAQCAtMTA5OSwy
MCArMTExMCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAg
ICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRo
aXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxp
bmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2st
PnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBs
aW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0
cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxl
SW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlYnVnPigpOwotICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJl
c3MoKSwgcmVnVDApOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVx
dWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29r
VHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwpAQCAtMTEzMyw3ICsx
MTQ2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1Qy
LCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTQ4LDcg
KzExNjEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE2Niw3ICsxMTc4LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qw
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTg4LDEyICsx
MjAwLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAv
LyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29u
c3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1
bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3Jl
YXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZh
cnMoKTsKKyAgICBzaXplX3QgY291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1WYXJzKCk7
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGZvciAoc2l6ZV90IGogPSBDb2Rl
QmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsg
aiA8IGNvdW50OyArK2opCiAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwoaikpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CisgICAg
CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qw
KTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwKTsKIAogICAgIGVtaXRFbnRlck9wdGltaXph
dGlvbkNoZWNrKCk7CiAjZWxzZQpAQCAtMTMxMCwyMyArMTMyNCwxOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNh
Y2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0
cnVjdHVyZUlELCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRv
VGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVh
dGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJy
aWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxl
ZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFy
ZURhdGFSZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAt
MTM0Miw3ICsxMzUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5z
dAogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVX
aXRoUHJvdG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFU
YWcpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVu
Y3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNo
ZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wQ3JlYXRlVGhpczo6b2Zmc2V0T2ZDYWNoZWRGdW5jdGlvbigpLCBjYWNoZWRG
dW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRy
KEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0
aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVh
bCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0aXBsZUNh
bGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM4Miw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVn
VDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIsNyArMTM5Myw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+
KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
cmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1Qw
KTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZh
bHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
dHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyArMTQwNiw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1Qx
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzE0MTcsOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0MzIsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdpc3RlciBj
b25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5z
dGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29u
c3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BS
Myk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5W
YWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogfQpAQCAtMTQzMCw3ICsxNDQ1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5F
YXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgIGlmIChVTkxJS0VM
WShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1f
dW5saW5rZWRDb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0
dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1
dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkUHRyKHB0ciwgcmVnVDApOwog
ICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaFB0cihCZWxvdywgcmVnVDAsIFRy
dXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkp
KTsKQEAgLTE0NDAsNyArMTQ1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnUKICNlbHNlCiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKLSAgICAg
ICAgbW92ZVZhbHVlKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVzdWx0UmVncyk7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVzdWx0UmVncy5ncHIoKSk7CiAgICAgICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTE0NTMsOCArMTQ2OCw5IEBA
IHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKIAogICAgIC8vIEVtaXQg
dGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7
CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZlT3JaZXJvLCBU
cnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AoKSks
Ci0gICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4
ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAgICAgICBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9CiB9CiAKQEAgLTE1MDksNyAr
MTUyNSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFyZ3VtZW50
R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBh
cmd1bWVudEdQUjM7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xNTY0LDM0ICsxNTgxLDM2IEBAIHZvaWQgSklUOjplbWl0X29wX25l
d19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhw
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBHUFJSZWc6OmFy
Z3VtZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1f
dW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVD
ZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5
bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVj
b2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0
aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbCwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpCisgICAgbG9hZENvbnN0
YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBP
cDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNv
ZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwog
ICAgIH0KIH0KIApAQCAtMTYyMSwyMyArMTY0MCwyNCBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNF
eHByQ29tbW9uKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBh
cmd1bWVudEdQUjEpOwogI2VuZGlmCiAKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
ID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7Cisg
ICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OkZ1bmN0aW9uRXhwciwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFu
dCwgYXJndW1lbnRHUFIyKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsK
IAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCks
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2
bSgpLCBhcmd1bWVudEdQUjFyZWdUMCwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNv
ZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCBhcmd1bWVudEdQUjFyZWdUMCwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAg
QVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxcmVn
VDAsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjY0LDI5ICsxNjg0LDMwIEBAIHZv
aWQgSklUOjplbWl0X29wX25ld19hc3luY19nZW5lcmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29w
X25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2Rl
Lm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
dmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIGFyZ3VtZW50R1BSMik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5
dGVjb2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9m
aWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBzaXplKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1f
bGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
aXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0
aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVn
VDApOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdB
cnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCks
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFy
Z3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAjZWxzZQorICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKICAgICBl
bWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2Nh
dGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKICNlbmRpZgogfQogCkBAIC0xNjk0LDggKzE3MTUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERv
dWJsZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRo
ZSB0eXBlIHByb2ZpZWxyIGlzIGVuYWJsZWQuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2Fj
aGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7
CiAKQEAgLTE3NzcsMjAgKzE3OTksMjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19j
aGlja2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25B
cmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4i
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRv
d0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAg
ICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24t
YXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAg
ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gx
UmVnLCBzY3JhdGNoMlJlZyk7CisgICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBu
b25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFkb3dDaGlj
a2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVn
KTsKKyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1
ZSwgcmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwg
cmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
SlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQ
YWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0
dXJuIG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdXNpbmcgdGhlIGNvbnRyb2wg
ZmxvdyBwcm9maWxlci4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFz
aWNCbG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhp
cyk7CkBAIC0xODYwLDcgKzE4ODYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQo
Y29uc3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwogCiAg
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE4ODYsNyArMTkxMiw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgp
LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2Fz
ZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24g
MjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjg4MSw3ICsyODgxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxv
Y2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoa2V5
LmlzSW50MzIoKSkKQEAgLTI5MDQsNyArMjkwNCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25Td2l0Y2gKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIHZvaWQqIHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAKICAgICBpZiAoa2V5
LmlzU3RyaW5nKCkpIHsKICAgICAgICAgU3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmluZyhrZXkp
LT52YWx1ZShnbG9iYWxPYmplY3QpLmltcGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjgx
NzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDcgKzM0OCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRl
TmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1Zh
bHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsKICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw5MiArNDksMTAzIEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRl
bnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZp
ZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCBy
ZWdUMik7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1f
c2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJ
ZGVudGlmaWVycygpKSB7CisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChi
YXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2Rl
LCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
c2NyYXRjaEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwg
b3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwg
cHJvZmlsZSwgcmVnVDIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRl
Y29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CiAKICAg
ICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywg
c3R1YkluZm9HUFIpOworCisgICAgICAgIC8vIE9PUFMuIFN1cHBvcnQgdGhpcworICAgICAgICAv
L2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCisgICAgICAgIC8vICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICAg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeVZh
bHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogICAgIH0KLQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVU
eXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBl
JiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAgICBpZiAoIWhhc0FueVNsb3dDYXNlcyhpdGVyKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CiAKLSAgICAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQobV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3Vt
ZW50R1BSMik7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNl
Ci0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICBBU1NFUlQoQnl0ZWNv
ZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9
PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNl
ZC4KLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwot
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGJh
c2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFy
ZzEgYXJnMSBhbHJlYWR5IHVzZWQuCisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0g
YXJndW1lbnRHUFIyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIHN0YXRpY19hc3Nl
cnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UgPT0gcmVnVDApOworICAgIHN0YXRpY19hc3NlcnQo
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkgPT0gcmVnVDEpOworCisgICAgbG9h
ZENvbnN0YW50KG1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6
Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOworICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5W
YWx1ZUdQUik7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVH
UFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTYwLDggKzE3MSw4IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBjb25zdGV4cHIg
R1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSNTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
ZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKQEAgLTE4NywzNCArMTk4LDQxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9w
cml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworCisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnJlc3VsdCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVO
YW1lOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJU
KGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkg
KzI0MSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9w
dGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFy
Z3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYg
KzI1NSwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcx
IGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6dmFs
dWU7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02
NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dl
dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0zMDAsMjEgKzMxNCwyOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0
ZWNvZGUubV9icmFuZDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBi
cmFuZEdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFu
ZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0
dWJJbmZvOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7Ci0KICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJh
bmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIAog
ICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5j
ZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTMyOCwxMyArMzQ5
LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKIHsKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisKICAgICBKSVRQcml2YXRlQnJhbmRB
Y2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJh
bmRBY2Nlc3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC0zNDQsMjQgKzM2OSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0
X3ByaXZhdGVfYnJhbmQoCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VH
UFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJv
cGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRl
QnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShv
cGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRl
X25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBh
cHBlbmRDYWxsKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9i
cmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzcwLDE5ICsz
ODksMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjbwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCByZWdUMSk7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJp
dmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJh
bmQsIGJyYW5kR1BSKTsKKworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNo
ZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2
YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9H
UFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6Q2hlY2tQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRl
QnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIH0KIApAQCAtMzk0LDkgKzQyMiwxMSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFu
ZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hl
Y2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTQwNiwyNCArNDM2LDE4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2Vk
LgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwog
ICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7
CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9H
UFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0
eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywg
RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+
OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsK
LSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJpdmF0
ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNSwzMCArNDU5
LDQyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxl
KSwgcmVnVDMpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHByb2ZpbGVHUFIpOworICAgIG1hdGVyaWFs
aXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkFy
cmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVS
ZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0KTsKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
cHJvcGVydHkpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1
ZTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIHByb2ZpbGVHUFIsIHN0dWJJbmZvR1BSKTsKKyAgICAvLyBPT1BTOgorICAgIC8v
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAvLyAgICBnZW4uc3R1Yklu
Zm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOworICAgIHN0dWJJbmZvLT5wdXRL
aW5kID0gc3RkOjppc19zYW1lX3Y8T3AsIE9wUHV0QnlWYWxEaXJlY3Q+ID8gUHV0S2luZDo6RGly
ZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFN
b2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBl
bmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3Jp
dGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTQ3NCwxNSArNTEwLDEyIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFN
b2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51
bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1v
ZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNDk4LDcgKzUz
MSwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0
aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGdl
bi5zdHViSW5mbygpLCByZWdUMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQpOworICAg
IGlmIChpc0RpcmVjdCkKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSwgT3BQdXRCeVZhbERpcmVj
dDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAg
ZWxzZQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3Ry
aWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVu
dEdQUjQsIGFyZ3VtZW50R1BSNSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC01MTIsNyArNTU0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIENhbGwgY2FsbDsK
ICAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlv
blB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplKTsKQEAgLTUyMyw3ICs1NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC01MzksMTEg
KzU4MSwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
ICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2Jh
bE9iamVjdEdQUiA9IHJlZ1Q1OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVl
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2Zp
bGVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgaml0LnN0b3JlMzIoYnl0
ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcykpOwpAQCAtNTcwLDIwICs2MTIsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3By
aXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1
ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlk
R1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0
ZUZpZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcg
U3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTYw
MywxMyArNjU2LDE0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgYXV0byBvcGVyYXRp
b24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVG
aWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgLy8gVGhleSBhcmUgY29uZmlndXJl
ZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7Ci0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBnZW4uc3R1
YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjQpOworICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0
aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFs
U2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50c0dQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02MjIsMTggKzY3NiwxMiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKQEAgLTY0OCw5ICs2OTYsOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSByZWdUNDsKIApAQCAtNjgwLDcgKzcyOCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
ZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1Qx
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC02ODksNyArNzM4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Nl
dHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRT
ZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02OTksNyArNzQ5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0
ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVy
LCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBy
ZWdUMSwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRD
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1
dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MDksNyArNzYw
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMy
X3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTcxOSw3ICs3NzEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
c2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBh
dHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwg
YXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyNywyMyArNzgwLDMzIEBA
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6
OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxC
eUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlkOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBK
U1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRo
b3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVt
aXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJp
ZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNzU5LDE1ICs4MjIsMTcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZElu
ZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlk
T3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVz
dGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtNzgxLDI0ICs4NDYsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3Vt
ZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfaWRfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxl
dGVCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25EZWxldGVCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC04NDUsMjIgKzkwNSwzMyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeVZh
bFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIs
IHByb3BlcnR5KTsKKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEJhc2VsaW5lRGVs
QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1Zh
bHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRo
ZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMu
CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVy
IGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtODgzLDkgKzk1NCwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRl
QnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9l
Y21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1
bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50
R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1p
emUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BS
MywgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtODk5LDI0ICs5NzIsMTkgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9
IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3Bl
cnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BS
ID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
QEAgLTk2MSwyMiArMTAyOSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlH
ZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJh
c2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJl
Zyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHVi
SW5mb0dQUiwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTk4NiwxNCArMTA2
MywxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5
SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50
R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xMDAzLDI2ICsxMDgzLDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF90cnlfZ2V0X2J5X2lkKGNvbnMKICAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50
R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FS
TTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1Yklu
Zm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7
CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0
QnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lk
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAg
Q2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
VHJ5R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTAzMCwyMiArMTEwNCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0
KGNvbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZVZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNl
R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcp
OwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1
YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYg
KzExMzcsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJl
Y3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50
R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25H
ZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTU4LDYx
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFy
Z3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0
eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9
PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7
Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2Rl
TWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBs
b2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZN
b2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVx
dWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJ
ZE1vZGU6OkFycmF5TGVuZ3RoKSkpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRh
KCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGg6Om9mZnNldE9mQXJyYXlQcm9maWxl
KCksIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGlu
ayh0aGlzKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOwotCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNW
YWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMSwgdGhpc1ZSZWcpOworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
LQotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdz
LCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
c3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAK
QEAgLTExNTgsMTYgKzEyMjEsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3NywyNiArMTI0Miw1OCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMzsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJv
cGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5k
Q2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVH
UFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVH
UFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRX
aXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1Zh
bHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
R1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlz
UmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJl
ZywgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworCisg
ICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdz
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiksIHN0dWJJbmZvR1BS
KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtl
ZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6
OkdldEJ5SWRXaXRoVGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzV2l0
aFRoaXMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwog
fQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjQxLDE2ICsxMzM4LDE5IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBv
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJl
Z1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
YXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
I2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTI2MCwyOSArMTM2MCwyMyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgaW4g
dXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgdGhpc0dQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFs
dWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwog
ICAgIHN0YXRpY19hc3NlcnQodGhpc0dQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
c3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRo
aXNPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
bkdldEJ5SWRXaXRoVGhpc09wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfXMKIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3df
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCkBAIC0x
MzI5LDIzICsxNDIzLDM3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBk
aXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICAvLyBJbiBvcmRlciB0byBi
ZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0
LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVu
dHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdl
IGdlbmVyYXRlIGNvZGUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBh
cmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3Rl
cnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJhc2VWUmVnLCBiYXNlR1BSLCB2YWx1ZVZSZWcsIHZhbHVlR1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUUHV0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDMsIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BS
KSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAg
ZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OlB1dEJ5SWQ7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBkaXJlY3QgPyBQdXRLaW5kOjpE
aXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNt
YU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29k
ZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBz
dHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKwor
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlJZHMuYXBw
ZW5kKGdlbik7CiAgICAgCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91
dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMTM1OSwxNCArMTQ2NywxOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0QnlJZD4oKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAgICAgCiAg
ICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsr
XTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbihnZW4uc2xvd1Bh
dGhGdW5jdGlvbigpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBh
cmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMzc2LDI1ICsxNDg4LDE5IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYWxyZWFkeSBpbiB1
c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh2
YWx1ZUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IGdlbi5zbG93UGF0aEZ1bmN0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChnZW4uc2xvd1BhdGhGdW5jdGlvbigpKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKQEAgLTE0NDEsMjAgKzE1NDcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJ
bkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJl
ZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHVi
SW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0
dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKQEAgLTE0NjMsMTQgKzE1ODAsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lk
KGNvbnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5k
ZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXpl
LCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTQ4MCwyOCArMTYwMCwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0
ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQ
UjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02
NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwog
ICAgIC8vIHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhh
Y3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRp
bmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0
aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNh
bGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRP
cHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbklu
QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEwLDI1ICsxNjI0LDMzIEBA
IHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5f
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNTM3LDE1ICsxNjU5LDE4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9p
bkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUs
IHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
SW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTU1Niw1MSArMTY4MSw1NiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
ZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAg
fHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVu
dEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1Yklu
Zm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBP
cEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsK
ICAgICAvLyBzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBl
eGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVh
dGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4K
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKT46OnZhbHVlKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENh
bGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbklu
QnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvbkluQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcmVnVDEp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0
eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IHR5cGU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSB0eXBlKQordm9p
ZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlIHR5cGUpCiB7
CiAgICAgQVNTRVJUKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9
PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogCkBAIC0xNjA4LDcgKzE3MzgsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaQogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
TmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2
YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9w
ZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xNjE4LDI3ICsxNzUyLDIxIEBAIHZvaWQgSklUOjplbWl0SGFzUHJp
dmF0ZVNsb3coVmlydHVhbFJlZ2kKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eU9yQnJhbmRHUFIgPSByZWdUMTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eU9yQnJhbmRHUFIgPSBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eU9yQnJh
bmRHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplKSwgZGVj
bHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5k
T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZh
bHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3By
aXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRl
TmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1By
aXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9uYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjUyLDcgKzE3ODAs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVfbmFtZShjCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSGFzUHJpdmF0ZU5hbWU+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVj
b2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CisgICAgZW1pdEhhc1ByaXZh
dGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fcHJvcGVy
dHksICwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9oYXNfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTY2NiwxOSArMTc5NCwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZh
dGVfYnJhbmQoCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZUJyYW5kPigpOwotICAgIGVt
aXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJy
YW5kKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1f
YmFzZSwgYnl0ZWNvZGUubV9icmFuZCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKQordm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChF
cXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5q
ZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3Qs
IG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNl
dE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7
Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHJlZ1QwKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CkBAIC0xNjg4LDYgKzE4MTksNyBA
QCB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNzAxLDcgKzE4MzMsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Nj
b3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhy
ZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29u
c3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QxKTsKICAg
ICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCBy
ZWdUMSk7CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4
aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwpAQCAtMTcxNSw3ICsxODQ3LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRT
Y29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwogICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0x
Nzk0LDU5ICsxOTI2LDc3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVU
eXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlw
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVj
b2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVj
b2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRD
b2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWlu
IHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2
ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGlj
YWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlw
ZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJl
Z1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9j
b2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgICAgICBwdHJk
aWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9m
ZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CisKKyAgICAgICAgYXV0byBjbG9zdXJlVmFy
R2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29w
ZSBDbG9zdXJlVmFyIik7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJl
dHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzIik7CisgICAgICAgIH07CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09Q
RV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMj
R2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9y
c1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVf
R0VORVJBVE9SKQorICAgICAgICBhdXRvIGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBb
XSAoVk0mKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3Bl
VGh1bmsoc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgZ2VuZXJpYyIp
OwogICAgICAgICB9OwotI3VuZGVmIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SCisKKyAgICAgICAg
Y29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCBzY29wZUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNl
dCksIG1ldGFkYXRhR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2Rl
OworICAgICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAg
ICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAg
IGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAg
ICAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAg
ICAgfQogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVT
Y29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBj
aGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1
bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVz
ZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmpl
Y3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBE
RkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmpl
Y3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
KworICAgIENDYWxsSGVscGVycyBqaXQ7CisKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wUmVzb2x2
ZVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVn
VDc7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OyAv
LyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdU
NTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgogICAgIGNvbnN0ZXhwciBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNj
b3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxv
Y2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywg
bWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihy
ZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKQEAgLTE4NTUs
MjYgKzIwMDUsMjYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09IEludmFs
aWRHUFJSZWcpIHsKICAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwotICAgICAg
ICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgfQotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3Qs
IG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFw
cGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRP
ZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9i
amVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0
OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9
OwogCiAgICAgYXV0byBlbWl0UmVzb2x2ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpIHsKICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBs
b2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2xv
Y2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdU
MCk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7CiAKLSAgICAgICAgTGFi
ZWwgbG9vcCA9IGxhYmVsKCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMSk7CisgICAgICAgIExhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgSnVt
cCBkb25lID0gaml0LmJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCBy
ZWdUMCk7Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICAg
ICAgICAgIGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAgICAgIGpp
dC5qdW1wKCkubGlua1RvKGxvb3AsICZqaXQpOwogICAgICAgICB9Ci0gICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgIH07CiAKICAgICBhdXRvIGVt
aXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewpAQCAtMTg4MiwxMiArMjAz
MiwxMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAg
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RH
UFIpOwotICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKLSAg
ICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9i
YWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5n
RXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVn
VDApOworICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNh
bEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKGdsb2JhbE9i
amVjdEdQUiwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTg5
NywxMSArMjA0NywxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
ICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2Fk
cyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAogICAgICAgICAgICAg
Ly8gYW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZpcm9ubWVu
dCgpIGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpCi0gICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVj
dDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAg
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0
T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTE5MDksNyArMjA1OSw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgICAg
IGVtaXRSZXNvbHZlQ2xvc3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9z
dXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTE5MTksODMgKzIwNjksNDUgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAg
fTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAg
ICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0K
LSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEds
b2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToK
LSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAg
ICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBl
ID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7
CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdU
MCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdU
MCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwor
ICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewor
ICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZl
VHlwZSk7CisgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAg
ICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4
aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAg
ICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGlj
YWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwot
ICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCi0g
ICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6
OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93
X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nh
c2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93
Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9z
Y29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQog
Ci0jZGVmaW5lIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jlc29sdmVfc2Nv
cGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBp
ZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSkg
XAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAg
ICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwg
IkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZP
Ul9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5k
ZWYgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0m
IHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4g
b25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIC8vIFRoZSBmYXN0IHBhdGggYWxy
ZWFkeSBwdXNoZWQgdGhlIHJldHVybiBhZGRyZXNzLgogI2lmIENQVShYODZfNjQpCkBAIC0yMDY1
LDYgKzIxNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBP
T1BTCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9t
U2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMjE3
OCw3ICsyMjkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjE4Niw5ICsyMjk5
LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRp
b25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlv
bkdldEZyb21TY29wZSwgZHN0LCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9
CiAKICNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMjE5Niw0MSArMjMwOSw1
MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Cisg
ICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNl
dCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEFTU0VS
VChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0g
Y3VycmVudEluc3RydWN0aW9uKTsKKworICAgIGF1dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9IFtd
IChWTSYpIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5r
KENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOwor
ICAgIH07CisKKyAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJh
dG9yID0gW10gKFZNJikgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNj
b3BlVGh1bmsoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3Bf
Z2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyaWNH
ZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6Omdl
bmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfZ2V0
X2Zyb21fc2NvcGUgZ2VuZXJpYyIpOworICAgIH07CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIG1l
dGFkYXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAotICAg
IGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsKLSAgICAgICAgdWludHB0cl90KiBvcGVy
YW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFu
ZCk7Ci0gICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+
KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdHJkaWZmX3Qg
bWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRh
ZGF0YSk7CisgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0jZGVmaW5l
IEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfZ2V0X2Zyb21fc2NvcGVf
IyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5l
cmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBF
KEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSAgICAgICAgfTsKLSN1bmRlZiBHRVRfRlJPTV9T
Q09QRV9HRU5FUkFUT1IKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQ
Uik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsK
LSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIp
OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0
b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICB9CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgIGlmIChwcm9m
aWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElT
dHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5
cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGNvZGUgPSB2
bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsK
KyAgICBlbHNlCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNHZXRGcm9tU2Nv
cGVHZW5lcmF0b3IpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9t
U2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1l
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayhzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkg
dGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklU
IGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCkBA
IC0yMjM5LDc3ICsyMzYxLDY4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9y
T3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAot
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFU
YWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGpp
dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwor
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0
YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwog
CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVP
ZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0
cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwot
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDEpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAg
YXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSKSB7
CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZz
ZXRPZlN0cnVjdHVyZSgpKSwgcmVnVDEpOworICAgICAgICBqaXQubW92ZShzY29wZUdQUiwgcmVn
VDApOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoWmVybywgcmVn
VDEpKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0g
WyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGlmICghbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwg
cmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNo
cG9pbnQpKSwgcmVnVDMpOwogICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwg
QWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKICAgICAKLSAgICBhdXRvIGVtaXRHZXRWYXJG
cm9tUG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxv
YWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRHZXRWYXJGcm9tSW5kaXJl
Y3RQb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9h
ZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQogICAgIGF1dG8gZW1pdEdldENsb3N1cmVWYXIgPSBb
Jl0gKEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIG9wZXJhbmRHUFIpIHsKICAgICAgICAgc3RhdGlj
X2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGxzaGlmdDY0KFRy
dXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGFkZFB0cihzY29wZUdQUiwgb3Bl
cmFuZEdQUik7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxF
bnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKKyAgICAgICAgaml0Lmxz
aGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQUik7CisgICAgICAgIGppdC5hZGRQdHIo
c2NvcGVHUFIsIG9wZXJhbmRHUFIpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG9wZXJh
bmRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDAp
OwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgYXV0byBlbWl0Q29kZSA9
IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9z
dHJ1Y3R1cmUpKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNl
IHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2Jq
ZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhl
IHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhz
Y29wZUdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3
ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVj
dC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2
YXIgaW5qZWN0aW9uLgogCiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSByZWdU
MDsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7CiAgICAgICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwogICAgICAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CiAKLSAgICAgICAgICAgIGppdEFzc2VydChzY29w
ZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAg
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihF
cXVhbCwgYmFzZSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmppdEFzc2VydChzY29wZWRMYW1i
ZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgeworICAgICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaml0LmJyYW5j
aFB0cihFcXVhbCwgYmFzZSwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwg
bV9vcGVyYW5kKSksIG9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBvZmZzZXQpOwogICAgICAg
ICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9m
TGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24o
SklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxp
bmsodGhpcyk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gz
MihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJ
c05vdE91dE9mTGluZSk7CisgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluaygmaml0KTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNl
dCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAg
ICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBqaXQubmVnMzIob2Zmc2V0KTsK
KyAgICAgICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7CisgICAg
ICAgICAgICBqaXQubG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQs
IChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJl
c3VsdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2Jh
bFZhcjoKQEAgLTIzMTcsMjEgKzI0MzAsMTkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0
YSwgbV9vcGVyYW5kKSwgcmVnVDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFu
ZCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKHJlZ1QwLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGppdC5icmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOgogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIHJlZ1Qz
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRhZGF0
YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMyk7CiAgICAgICAgICAgICBlbWl0R2V0Q2xvc3Vy
ZVZhcihzY29wZUdQUiwgcmVnVDMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
RHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAg
LTIzNDEsNzkgKzI0NTIsNTYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQ
dXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAg
ICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwg
ZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNO
b3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0Vu
ZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpy
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7Cisg
ICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dElu
Zm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBqaXQu
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8o
KSksIHJlZ1QwKTsKKyAgICAgICAgaml0LmFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAg
SnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFsUHJv
cGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNl
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xv
YmFsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluaygmaml0KTsKKwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBqaXQuYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgaXNHbG9i
YWxQcm9wZXJ0eSA9IGppdC5icmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGlzR2xvYmFsUHJvcGVy
dHkubGluaygmaml0KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOworICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsK
LSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGpp
dC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmso
JmppdCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAo
KSk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgICAgICBza2lw
VG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAogICAgIHN0YXRpY19hc3NlcnQo
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0gMSk7Ci0gICAgc3RvcmU2NChyZWdUMCwg
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUp
KSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRh
OjpvZmZzZXRPZlByb2ZpbGUoKSkpOwogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZm
ZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bSgpLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7
CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0
aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1Io
cmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0g
ICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2Nv
cGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJ
VCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcEdldEZyb21TY29wZVRo
dW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlXyIgI3Jlc29sdmVU
eXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQg
YnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUg
SklUIGJlY2F1c2UKQEAgLTI0NzEsODYgKzI1NTksNzkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsK
LSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRp
cmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwot
ICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1Qw
LCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXRO
b3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2Yo
UmVnaXN0ZXIpKSk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gY29waWVkR2V0UHV0
SW5mbyhieXRlY29kZSk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZv
LnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRh
Lm1fc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAotICAgIGF1dG8g
ZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVU
eXBlKCk7CisKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3Ry
dWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5j
ZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9i
amVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRo
ZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2
YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5n
IGJ1dCB0aGUgR2xvYmFsT2JqZWN0LgorICAgICAgICAgICAgLy8gQWRkaXRpb25hbGx5LCByZXNv
bHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAg
ICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpvZmZzZXRP
ZlN0cnVjdHVyZSgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFpl
cm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJl
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QxKSk7CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZv
aWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0p
KTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBy
ZWdUMSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAg
ICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
KyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1l
c0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpKTsKKyAgICAgICAgICAgIC8vIE9PUFM6IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNp
b24gdGhhdCB0b29rIEdQUlJlZ3MKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAg
IGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
ICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29k
ZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFZh
clJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxp
emF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2so
cmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShi
eXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1Qw
KTsKKworICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0
SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBo
ZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hl
Y2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJh
bmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlu
ZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlh
YmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwg
Jm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJh
bmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAg
ICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdU
MSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNl
IHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3IgdmFsdWUuCisgICAgICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1
cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1p
dFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0
Y2hwb2ludFNldCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7
CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdE5v
dGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVn
VDAsIHJlZ1QyLCBTY2FsZUVpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUg
YSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3Igb3duZXIvdmFsdWUuCiAgICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjU2NCw1OCArMjY0
NSw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAg
IH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0g
ICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFy
ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8v
IER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBh
bHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAgICAgICAgaXNHbG9iYWxMZXhp
Y2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
IDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVt
aXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0g
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAg
Ly8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJlVmFyLyBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGlsZSB0aGluZ3MKKyAgICAvLyB0
aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3ZlIHByb3ZlbiB0aGF0IGlzIHRo
ZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZhciwKKyAgICAvLyBhbGwgQ29k
ZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgorICAgIC8vIGlmIHRoZSB2YXIg
aW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0IGlzIGZpcmVkLCB0aGVuIHdl
IHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAgIC8vIG1hdHRlciB3aGF0IHR5
cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENs
b3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29k
ZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGVtaXRDb2RlKENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbHNlIHsKICAgICAgICAgSnVt
cExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywg
cmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7CiAgICAgICAgIGFuZDMy
KFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAg
SnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJv
cGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAorICAgICAgICBKdW1w
IG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKHRoaXMpOworCisg
ICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAogICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAKICAgICAgICAgc2tpcFRvRW5k
LmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0K
IH0KIApAQCAtMjYyNCwxOCArMjY5OSwyMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVU
eXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgIFJlc29sdmVU
eXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxv
Y2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFu
dGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIuCiAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
dGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAg
ICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3VtZW50R1BSMCwgY3VycmVudElu
c3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAg
ICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUlu
ZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNv
ZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5z
dHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjcwMSw3ICsyNzc5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVj
dEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKQEAgLTI3NTksNyArMjgzNyw2IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpAQCAt
Mjc2Nyw3ICsyODQ0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNv
bgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVy
bmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
Z1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3ODksNyAr
Mjg2Niw2IEBAIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3AKIHZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAg
LTI4MDUsNyArMjg4MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25z
dCAKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9z
dCBjb21tb24gbW9kZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3
ZSBwcm9maWxlIGl0IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9y
TWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7
CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVy
YXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9k
ZSkgewogICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOwogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBv
cGVyYXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVy
YXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjptb2RlU2V0T2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIofkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsK
QEAgLTI4NDcsNzggKzI5MjMsODYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0
KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0g
Ynl0ZWNvZGUubV9tb2RlOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwot
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAog
ICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKIAotICAgIGF1dG8gcmVzdWx0R1BSID0gcmVnVDA7Cisg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZh
bFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gyID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJl
Z2lzdGVyczo6c2NyYXRjaDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
b2RlLCBzY3JhdGNoMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUs
IHByb3BlcnR5R1BSKTsKIAotICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0
YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHNjcmF0
Y2gyKTsKKyAgICBvcjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7CisgICAgc3RvcmU4VG9NZXRhZGF0
YShzY3JhdGNoMiwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJh
dG9yTWV0YWRhdGEoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDAp
KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUikpOwogICAgIC8vIFRo
aXMgaXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQgdmFsdWUuCi0gICAgSnVtcCBpc05vdE93blN0
cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0g
YnJhbmNoVGVzdDMyKE5vblplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2Vu
ZXJpY01vZGUpKTsKIAogICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDMpOwotICAgIEp1bXAgc3RydWN0
dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgc2NyYXRjaDEpOworICAgIGxvYWQz
MihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gy
KTsKKyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0
Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0
cnVjdHVyZUlET2Zmc2V0KCkpKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgc2NyYXRjaDIpOwogICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0
aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGlu
ZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHJlZ1QzLCByZWdUMyk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRp
bWVzRWlnaHQpLCByZXN1bHRHUFIpOwotCisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBzaWdu
RXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgo
YmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAg
ICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKICAgICBvdXRPZkxpbmVBY2Nlc3MubGlu
ayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAg
bmVnMzIocmVnVDMpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7CisgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJh
c2VHUFIpOworICAgIHN1YjMyKEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBuZWcz
MihzY3JhdGNoMik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsK
ICAgICBjb25zdGV4cHIgaW50cHRyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gb2Zmc2V0SW5C
dXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpICogc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1Qz
LCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgIGxv
YWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmly
c3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwog
CiAgICAgc3RydWN0dXJlTWlzbWF0Y2gubGluayh0aGlzKTsKLSAgICBzdG9yZTgoVHJ1c3RlZElt
bTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1
Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSk7CisgICAgc3Rv
cmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNT
ZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgYnl0ZWNvZGUsIEJ5dGVjb2Rl
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBpc05vdE93
blN0cnVjdHVyZU1vZGUubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5j
aFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SW5kZXhlZE1vZGUpKTsKKyAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMiha
ZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5k
ZXhlZE1vZGUpKTsKICAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgsIHByb3BlcnR5R1BSKTsKIAogICAgIGlzTm90SW5kZXhlZC5saW5r
KHRoaXMpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmls
ZSwgcmVnVDIpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwg
YmFzZUdQUiwgc2NyYXRjaDEpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgZG9uZUNhc2Vz
LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CiB9CiAKQEAgLTI5MjcsMTAgKzMwMTEsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51
bWVyYXRvcl9nZXRfYnlfCiAgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0ZXIpOwogfQogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Ci12
b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQ
YXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
LCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2VudW1lcmF0
b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxD
YXNlKQogewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKQEAgLTI5MzksNyArMzAyMiw5IEBA
IHZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW0KICAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QwKTsKLSAg
ICBvcjgocmVnVDAsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRh
dGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCByZWdUMSk7CisgICAgb3IzMihyZWdUMCwg
cmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDEsIGJ5dGVjb2RlLCBCeXRlY29kZTo6
TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAKQEAgLTMwMjgsNiArMzExMywx
MyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiAgICAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCit2b2lkIEpJVDo6ZW1pdFdyaXRl
QmFycmllcihHUFJSZWcgb3duZXIpCit7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2VsZWN0U2NyYXRjaEdQUihvd25lcikp
OworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmll
clNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluayh0aGlzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUo
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTQzLDcgKzE1NDMsNyBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2
bSwgQ2FsbExpbmtJCiAKIHZvaWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvKQogewotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgp
LCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmZhc3RQYXRoU3RhcnQoKSk7Cisg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2Fs
bExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlua0luZm8pKTsKICAgICAKICAgICByZXZl
cnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVy
YXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20JKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEyLDEw
ICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBt
YWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAg
ICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3Jv
IHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9i
aXRzW3QxXQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0MSwgdDIpCiAgICAgICAg
IGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwg
SW50MzJUYWcsIC5zbG93CkBAIC0xMDIzLDcgKzEwMTksNyBAQCBtYWNybyBwcmVPcChvcGNvZGVO
YW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgICMgTWV0YWRhdGEgaW4gdDEsIHNyY0RzdCBp
biB0MgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQyLCAuc2xvdykKICAgICAgICAgc3RvcmVp
IHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmls
ZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29k
ZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAog
ICAgIC5zbG93OgpAQCAtMTA4OSwyMiArMTA4NSwxOCBAQCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1l
dGFkYXRhLCByZXR1cm4pCiAKLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAg
ICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFy
eUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgIGVuZAotCiAgICAgbWV0YWRhdGEodDUsIHQw
KQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6
ZSwgdDAsIHQxLCB0MikKICAgICBiaW5lcSB0MSwgSW50MzJUYWcsIC5vcE5lZ2F0ZVNyY05vdElu
dAogICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQyCi0g
ICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFy
aXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0NSwgdDMpCiAgICAgcmV0dXJu
IChJbnQzMlRhZywgdDIpCiAub3BOZWdhdGVTcmNOb3RJbnQ6CiAgICAgYmlhIHQxLCBMb3dlc3RU
YWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JpIDB4ODAwMDAwMDAsIHQxCi0gICAgdXBkYXRlQXJp
dGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmls
ZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0NSwgdDMpCiAgICAgcmV0dXJuKHQxLCB0
MikKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExMTUsMTAgKzExMDcsNiBAQCBlbmQpCiAKIG1hY3Jv
IGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3Bl
cmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRh
KG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRj
aCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gYXJpdGhQcm9maWxlKHR5cGUpCi0g
ICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJv
ZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAg
ICAgICBtZXRhZGF0YSh0NSwgdDIpCiAgICAgICAgIGdldChtX3JocywgdDIpCiAgICAgICAgIGdl
dChtX2xocywgdDApCkBAIC0xMTI2LDcgKzExMTQsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0
b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNp
emUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCBJbnQzMlRhZywgLm9wMU5vdEludAog
ICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5vcDJOb3RJbnQKLSAgICAgICAgYXJpdGhQcm9m
aWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxl
KG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGdldCht
X2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MywgdDEsIHQwLCAu
c2xvdywgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKQEAgLTExMzYsMTIgKzExMjQsMTIgQEAgbWFj
cm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBiaWEgdDIsIExv
d2VzdFRhZywgLnNsb3cKICAgICAgICAgYmliIHQzLCBMb3dlc3RUYWcsIC5vcDFOb3RJbnRPcDJE
b3VibGUKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAuc2xvdwotICAgICAgICBhcml0aFBy
b2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFBy
b2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAgICAg
ICAgY2kyZHMgdDEsIGZ0MQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5v
dEludE9wMkRvdWJsZToKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKLSAgICAgICAgYXJpdGhQ
cm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQp
CiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQxKQogICAgICAgICBm
aWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1Myw3ICsxMTQxLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0
b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5p
dGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAg
ICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYmlhIHQzLCBMb3dlc3RUYWcsIC5zbG93Ci0gICAg
ICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUs
IHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCiAg
ICAgICAgIGRvdWJsZU9wZXJhdGlvbihmdDEsIGZ0MCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lv
biAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTA1NiwxMCArMTA1Niw2IEBAIHN0cmljdEVx
dWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFt
ZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRh
dGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3Bh
dGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUo
dHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
YXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5k
Ci0KICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhd
LCB0MQogICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNjUsNyBAQCBtYWNy
byBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVy
YXRpb24odDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9y
ZXEgdDEsIFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9m
aWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFy
aXRoUHJvZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoK
QEAgLTExMzQsMTEgKzExMzAsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9u
ZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJl
dHVybikKLQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmgg
dHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIp
CkBAIC0xMTQ2LDEyICsxMTM3LDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBP
cE5lZ2F0ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVn
aSB0MwogICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRo
UHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQ
cm9maWxlSW50LCB0MSwgdDQpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAg
IGJ0cXogdDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAw
MDAwMDAwLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisg
ICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwg
dDEsIHQ0KQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzEx
NTUsNiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1
LCB0MCkKIAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlw
ZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRo
UHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQw
KQogICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
KHNpemUsIHQwLCB0MSkKQEAgLTExNzcsNyArMTE2NCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9t
U3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50
ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2Zp
bGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0NCkKICAgICAgICAgZGlzcGF0
Y2goKQogCiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExNzQsMTAgQEAgbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJU
YWcsIC5zbG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBm
dDEKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVw
ZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51
bWJlciwgdDUsIHQ0KQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdElu
dE9wMkludDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJl
ckludCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5
OgogICAgICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNiw3ICsxMTkzLDcgQEAgbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQg
aXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAg
ICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKLSAg
ICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0
KQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAg
ICAgICBmcTJkIHQxLCBmdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBj
b3B5KQpAQCAtMjQ5OCw2ICsyNDk4LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5k
CiBlbmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5
cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9y
aCB0eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1F
OiBXZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNl
IFdFQkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZ
IGFuZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cigpID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBj
cmVhdGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29k
ZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2Nr
KiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVy
Jik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlu
bGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlx
dWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmll
ciBjcmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxl
SWRlbnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlz
aW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlk
ZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayog
Y29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29k
ZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGlu
ZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENh
Y2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5o
YXNJZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBA
QCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJ
VCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0
ZTo6TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQog
ewotICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFBy
b2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1
bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lv
biAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1
dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRp
YyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxp
bmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBz
dGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFz
ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436983</attachid>
            <date>2021-08-31 19:02:58 -0700</date>
            <delta_ts>2021-09-01 12:01:10 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>368159</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IHVubGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxp
bmtlZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRp
b24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
aXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0g
ICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRo
U3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhT
dGFydCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlz
IGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQg
dG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0
aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJz
OjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAg
IHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MjQsNiArNDI0LDEzIEBAIGlubGluZSBDb2RlT3JpZ2lu
IGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBz
byB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNyArMzcw
LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2Fu
J3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJv
Y2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJv
ZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5l
c3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2Yg
YW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhl
IGxpdmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNp
ZGUgVW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBi
ZXR3ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhl
IGJ5dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5n
IGFuIFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9j
ayogdW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CkBAIC00NjYsNiAr
NDY3LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAg
ICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9G
SUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtl
ZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAg
ICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtl
ZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAg
ICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5z
dHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4LDE0ICs1NDIsMTQgQEAgYm9vbCBD
b2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRl
UHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5L
KE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAg
ICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJ
bmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9w
TXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5L
X1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC0zMDc5LDcgKzMw
OTMsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBF
TkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVy
biBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMyOTUsMTMgKzMzMDks
MTMgQEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3
aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJu
ICZwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICBy
ZXR1cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICAgICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtMzMxMywxMSArMzMyNywxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSog
Q29kZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewog
ICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5l
Z2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoK
LSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9w
RGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMt
PmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw5
IEBAIHB1YmxpYzoKICAgICBNZXRhZGF0YVRhYmxlKiBtZXRhZGF0YVRhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tZXRhZGF0YS5nZXQoKTsgfQogCiAgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQorcHJpdmF0ZToKICAgICB2b2lkIHNl
dE51bVBhcmFtZXRlcnModW5zaWduZWQgbmV3VmFsdWUpOworcHVibGljOgogCiAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9mQXJn
dW1lbnRzVG9Ta2lwOyB9CiAKQEAgLTE2Nyw3ICsxNjksNiBAQCBwdWJsaWM6CiAgICAgdW5zaWdu
ZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQogICAgIHVuc2lnbmVkIG51
bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hlY2twb2ludHMoKSAq
IG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKLSAgICB1bnNpZ25lZCogYWRkcmVzc09mTnVtUGFy
YW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KIAogICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihtX2FsdGVybmF0aXZlLmdl
dCgpKTsgfQpAQCAtMjMyLDE2ICsyMzMsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxs
ZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFr
cG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRoZSBv
cHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJuIHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFuZCB3
ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlZy5v
ZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fbnVtVmFycyk7CkBAIC0yNjYsNiArMjU3LDcg
QEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7
CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMgSUNz
IGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAg
ICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogCkBAIC0yODIsNyArMjc0LDYg
QEAgcHVibGljOgogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1f
cGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXNDYWxsZWVTYXZlUmVnaXN0ZXJz
IHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVn
aXN0ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKICAgICB9OwogCiAgICAg
SklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikK
QEAgLTMyMiwxNSArMzEzLDEwIEBAIHB1YmxpYzoKICAgICAvLyBsb29raW5nIGZvciBhIENhbGxM
aW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMuCiAgICAgQ2Fs
bExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgp
OwogICAgIAotICAgIHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFwJiYgaml0Q29kZU1hcCkK
LSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAg
ICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcCA9IFdURk1vdmUoaml0Q29kZU1h
cCk7Ci0gICAgfQogICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKQogICAgIHsKLSAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICByZXR1cm4g
ZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcDsKKyAgICAgICAgQVNTRVJUKGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVNYXA7CiAgICAg
fQogCiAgICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0Nv
ZGVPcmlnaW5NYXA+JiYpOwpAQCAtNDcyLDYgKzQ1OCw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmlu
ZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9h
cmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251
bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01NzIsNiArNTU5LDcgQEAg
cHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oaW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1Zl
Y3RvckJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1f
Y29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFN
ZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2wo
aW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAg
aW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXpl
KCk7IH0KQEAgLTYwMSw2ICs1ODksMTEgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VS
VChtX2ppdERhdGEpOwogICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgfQorICAgIFNpbXBsZUp1bXBUYWJsZSYgYmFzZWxpbmVTd2l0
Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN3
aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZV
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyByZXR1cm4g
bV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9CkBA
IC02MTEsNiArNjA0LDExIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXRE
YXRhKTsKICAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
W3RhYmxlSW5kZXhdOwogICAgIH0KKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5n
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9m
VW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtl
ZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBj
b25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNzk3LDYgKzc5NSw3IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fZGVi
dWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCkgeyBy
ZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywg
bV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVha3BvaW50KHVuc2lnbmVk
IG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQodW5zaWduZWQgbnVt
QnJlYWtwb2ludHMpCkBAIC04MzgsNiArODM3LDcgQEAgcHVibGljOgogICAgIG11dGFibGUgQ29u
Y3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
OyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMgdG8gc3RvcmUgdG8gaXQu
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
KTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2NhcGFiaWxpdHlMZXZlbFN0
YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNiwxMSArOTA2LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcik7IH0KIAotICAg
IGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQotICAgIHsK
LSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRl
IHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3VubGlua2VkQ29kZS0+aXNC
dWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZv
ckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5sb29wSGludHNB
cmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2
b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uu
aAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXAoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spOwogICAgIAogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlKiB3cmFwQW5kQWN0aXZhdGUoQ29kZUJsb2NrKiBjb2RlQmxvY2spOworCisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLCBtX2NvZGVCbG9jayk7IH0KICAgICAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHJldmlz
aW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0
YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBzdGF0aWNfYXNzZXJ0KHNp
emVvZihHZXRCeUlkTW9kZU1ldGFkYXRhCiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJy
YXlMZW5ndGggewogICAgIEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihH
ZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmlsZSk7IH0KIH07CiBzdGF0
aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsK
IApAQCAtODgsNiArODksNyBAQCB1bmlvbiBHZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAg
R2V0QnlJZE1vZGUgbW9kZTsKICAgICAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGlu
ZzsgLy8gVGhpcyBtdXN0IGJlIHplcm8gd2hlbiB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAg
fTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhLCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0
YWRhdGFEZWZhdWx0IGRlZmF1bHRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1
bnNldE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3Ro
TW9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYgKzM4NSw4IEBA
IGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcygKICAgICByZXR1cm4gbGlu
a2VkQ29kZUlubGluZTsKIH0KIAorLy8gT09QUzogTWFrZSB0aGlzIHN0dWZmIHdvcmsgd2l0aCBk
YXRhIGljcyB0byBub3QgYXNzdW1lIGlubGluZSBhY2Nlc3MuCisKIHZvaWQgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2VzcyhDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFyZ2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVz
ZURhdGFJQygpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0
aW9uTW9kZU1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgT1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9S
X0VOVU1fQ0xBUwogCiBzdHJ1Y3QgSXRlcmF0aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90
IHNlZW5Nb2RlcyB7IDAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVz
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1v
ZGVzKTsgfSAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9
PSBzaXplb2YoSXRlcmF0aW9uTW9kZSkpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODUsNiArMjg1LDcgQEAgdm9pZCBTdHJ1Y3R1cmVT
dHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywg
KnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNz
VHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAg
ICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CkBAIC00MzAsNiArNDMx
LDEwOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9j
YWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86Omlu
aXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvKQoreworICAgIGFjY2Vzc1R5cGUgPSB1bmxpbmtlZFN0
dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0YXJ0OyAv
LyBPT1BTOiBkbyB3ZSBuZWVkIGEgc3RhcnQgZm9yIGRhdGEgSUNzPworICAgIGRvbmVMb2NhdGlv
biA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2Nh
dGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgIGNhbGxT
aXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7
CisgICAgY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUlu
ZGV4KTsKKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6
RGVsZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5
VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsQnlJ
ZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlb2Y6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgor
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1
bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJl
Y3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgp
KQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5s
aW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0
T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gb3BlcmF0aW9u
UHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZh
bDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5m
by5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6
OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3Ry
aWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFs
RGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVG
aWVsZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFBy
aXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hl
Y2tQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNr
UHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIE9P
UFM6IGhhbmRsZSBpdGVyYXRvcl9uZXh0IHZhbHVlIGluIHVzZWQgcmVnaXN0ZXIgc2V0LgorfQor
CiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmNoZWNrQ29uc2lz
dGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlW
YWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAg
ICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzc5
LDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAog
fTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVy
ZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDEsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBp
bml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBDaGVj
ayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRv
ZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTQ0Nyw2ICs0NTIsMTggQEAgaW5saW5lIGF1
dG8gYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bgogICAgIH0KIH0KIAorc3RydWN0IFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8geworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICBQ
dXRLaW5kIHB1dEtpbmQ7CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRL
aW5kOworICAgIEVDTUFNb2RlIGVjbWFNb2RlOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleDsKKyAgICAvLyBPT1BTOiBEbyB3ZSBuZWVkIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMg
ZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRo
ZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2Nh
dGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJ
KHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNiArMTc1LDcgQEAgcHVibGlj
OgogCiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3Rh
bnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3Qg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmly
dHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcu
dG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkg
eyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3
LDYgKzIwOCwxNSBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0
TW9kZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBj
b25zdDsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4
IGluZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0K
KyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3Ry
dWN0aW9ucygpLmF0KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNF
bmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2lu
ICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3Ry
dWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0
aW9uc1NpemUoKSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAg
IHVuc2lnbmVkIG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9j
YWxzOyB9CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsg
fQpAQCAtMzM0LDYgKzM0NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRh
LT5zaXplSW5CeXRlcygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVG
b3JGdXp6aW5nRWFybHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBh
cmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAg
ICAgcmV0dXJuICFpc0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KIAogcHJvdGVjdGVkOgogICAg
IFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwpAQCAtNDEwLDYgKzQy
NSw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBt
X2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFjZSB0byBz
dG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5
QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0
aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBt
X2V4aXRQcm9maWxlOwpAQCAtNDU1LDYgKzQ3MywyOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAg
fQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZz
ZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChvZmZzZXQpOworICAg
IH0KKworICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAg
ICBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRo
UHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3VuYXJ5QXJpdGhQ
cm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5h
cnlBcml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
QmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1
cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHVu
YXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlBcml0aFByb2ZpbGVz
W2ldOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNo
TWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw5ICsxMDEsMTggQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAg
ICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2
X3Q7CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZz
ZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBB
U1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9
IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRh
YmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0
ICsgc2l6ZW9mKE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9
CisKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfb2Zmc2V0VGFibGVFbnRyaWVzID0g
TlVNQkVSX09GX0JZVEVDT0RFX1dJVEhfTUVUQURBVEEgKyAxOyAvLyBvbmUgZXh0cmEgZW50cnkg
Zm9yIHRoZSAiZW5kIiBvZmZzZXQ7CiAKICAgICAvLyBOb3QgdG8gYnJlYWsgYWxpZ25tZW50IG9m
IDMyYml0IG9mZnNldCB0YWJsZSwgd2Ugcm91bmQgdXAgc2l6ZSB3aXRoIHNpemVvZihPZmZzZXQz
MikuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmls
ZS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAgdGVtcGxhdGU8
dW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzQXJndW1lbgogc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ug
ewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVy
T2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJP
ZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNr
ZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJP
ZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKQEAgLTEzNCw3
ICsxMzMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIAogICAgICAgICBy
ZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29kZWRKU1ZhbHVlIG1f
YnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxhdGVkVHlwZSBtX3By
ZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTU2LDYgKzE1NSw3IEBAIHN0cnVjdCBWYWx1ZVBy
b2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1Ymxp
YyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAgICBWYWx1ZVByb2Zp
bGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBzdHJ1Y3QgVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnkK
ICAgICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3Jj
LCB0eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUsIG1f
Y29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90Pihkc3QsIHNyYyk7
CkBAIC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbmMoUmVnaXN0
ZXJJRCogc3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BJ
bmM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUo
KSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVjOjplbWl0KHRoaXMs
IHNyY0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRk
VW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODIsNyArNjgy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklEKj4KICAgICAgICAg
ZW1pdEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJ
RCogc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBCaW5h
cnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAgICAgICAgICAgIEJp
bmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1fY29kZUJsb2NrLT5h
ZGRCaW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODg5LDcgKzg4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUK
IAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwp
IHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQs
IGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+
b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZs
ZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1f
aml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9u
IDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5Niw3ICs4OTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRH
UFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nh
c2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BS
LCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEp
OwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5ODUsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRl
TmEKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygp
OwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxv
Y2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6
UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRU
eXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRl
TmFtZSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJh
c2VHUFIpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3Ms
IEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVy
dHlJc1N5bWJvbCA9IHRydWU7CiAKQEAgLTE0NzQ3LDcgKzE0NzQ3LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNj
b3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5n
cHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tl
dFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJbmRl
eCk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVn
LCB0aGlzUmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5j
b2RlQmxvY2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMTcsNyArNDMxNyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAg
ICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0
ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9k
ZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAg
ICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFu
dGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAg
ICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIp
LCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+
c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CkBAIC0xMDM1NSw3ICsxMDM1NSw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
PSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBH
UFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlk
R1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAg
ICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0
LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAg
Q2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7
CiAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDY5OCw3ICsxMDY5OCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNU
YWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZv
OjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxD
YWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwOTc5LDcgKzEwOTc5LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQ
YXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAg
ICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJ
bnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0
aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0
LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5w
cmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjIgQEAgY2xhc3MgTWV0YWRhdGEKICAgICBkZWYg
c3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNvbnZl
cnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZp
eCwgZmllbGRzLCBnZW5lcmF0ZU9mZnNldE9mKQogICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8
ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAg
ICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4
ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAgICAgICAgICAiI3tw
cmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSwgZmFs
c2UpfVxuI3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAg
ICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGROYW1lfTsiCisgICAgICAgICAg
ICAgICAgICAgIGlmIGdlbmVyYXRlT2Zmc2V0T2YKKyAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSByZXN1bHQgKyAiXG4iICsgInN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFt
ZVswXS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJldHVybiBPRkZTRVRPRihNZXRhZGF0
YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0CiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmQu
am9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRz
KCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAg
ICAgICAgIiwgQGZpZWxkcywgdHJ1ZSkKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBp
ZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5OCw4ICs2OTgsMTMgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6
OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxD
YWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBp
bmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwog
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7Cisg
ICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgaW5mbyk7Cit9
CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xv
YmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxs
KCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
ICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
MTgsNiArMTcxOCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVh
bENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1p
dFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyop
OwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCBy
ZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYg
KzQzLDYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sbwogICAgIHN0
b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CiB9CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dT
aGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0
aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4KQotewotICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgZnJhbWUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Ci0gICAgc3RvcmVWYWx1
ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKLSAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNj
b3BlKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVC
bG9jaykpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSks
IEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFj
a2V0LCBjYWxsU2l0ZUluZGV4KSkpOwotfQotCiB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hh
ZG93Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3Jh
dGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAgIFNoYWRvd0NoaWNrZW4qIHNo
YWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4
NDAsMTggQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9s
YXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRv
cCBvZgogICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQg
bG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJl
ZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcg
c2NvcGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIENvZGVCbG9ja1R5cGU+CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChH
UFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBD
b2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQorICAg
IHsKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFt
ZSkpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgICAgIHN0b3JlVmFsdWUodGhp
c1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7CisgICAgICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2Nv
cGUpKSk7CisgICAgICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAg
ICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2Fs
bFNpdGVJbmRleCkpKTsKKyAgICB9CisKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEgcG9pbnRlciB0
byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQuCiAgICAgdm9p
ZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BS
UmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkocmV2
aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
ZmxlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogCiB2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CisgICAgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJz
KGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwordm9pZCBDYWxsRnJhbWVT
aHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMpCit7CiAgICAgUmVnaXN0ZXJTZXQgY2FsbGVl
U2F2ZVJlZ2lzdGVycyB7IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB9Owot
ICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMgPSBj
b2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5zaXplKCk7ICsraSkgewogICAgICAgICBSZWdp
c3RlckF0T2Zmc2V0IGVudHJ5IHsgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChpKSB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEu
aAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoK
ICAgICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZhbGlkR1BSUmVnIH07CiAKICAgICB2
b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldHVw
Q2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCopOwogI2VuZGlm
CiAgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAg
IDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgm
dm0sIG51bGxwdHIpCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwg
bV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAw
KQogICAgICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBA
IEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxk
RW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3Qp
OworICAgIG1fcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENv
ZGVCbG9jayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklU
KCkKQEAgLTkwLDggKzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNr
KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAot
ICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIo
T3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAg
ICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9w
dGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJU
KCFtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxs
ZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMTggQEAgdm9pZCBKSVQ6OmVtaXRO
b3RpZnlXcml0ZShXYXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1
YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcg
cG9pbnRlclRvU2V0KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVn
IHBvaW50ZXJUb1NldCkKIHsKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRy
ZXNzKHBvaW50ZXJUb1NldCwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3Rl
ZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlD
aGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlD
aGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAg
aWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJSZWFkT25s
eVdhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUg
PT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwg
T0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2ludCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVz
cyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1t
MzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1Bv
aW50ZXJPZmZzZXQoKQpAQCAtMTI5LDcgKzEzNSw3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1Bv
aW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsK
KyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2Vk
Q29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDAp
OwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CkBAIC0xODEsMjEg
KzE4Nyw0MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjCiAgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tUb0Zy
YW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxl
T3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBicmFuY2hU
ZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlv
bjo6cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvblJh
cmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwg
cmVzdWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYgKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
c3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgp
KSwgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCByZXN1bHQpOwor
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6
b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVh
ZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKK30KKwogdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogewogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkK
LSAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAg
ICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9wcm9maWxlZENvZGVCbG9jaywgIlxuIik7CiAg
ICAgCiAgICAgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICBqaXRBc3NlcnRBcmd1bWVudENv
dW50U2FuZSgpOwogICAgIAotICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKTsKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlv
bkNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogCiAg
ICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAKLSAgICBWTSYgdm0gPSBtX2NvZGVCbG9jay0+
dm0oKTsKKyAgICBWTSYgdm0gPSBtX3VubGlua2VkQ29kZUJsb2NrLT52bSgpOwogICAgIEJ5dGVj
b2RlSW5kZXggc3RhcnRCeXRlY29kZUluZGV4KDApOworCisgICAgLy8gT09QUzogTWF5YmUgb25s
eSBkbyB0aGlzIGlmIHdlIGRpc2FibGUgc2hhcmluZyBzb21laG93PworICAgIC8qCiAgICAgaWYg
KG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRzPFBy
b2dyYW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jaz4odm0pKSkgewogICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9wdGlt
aXphdGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0bHkgb25j
ZS4KICAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBvdGhlcndp
c2UuIFdoZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8KQEAgLTIzNiw2ICsyNjIs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CisgICAgKi8KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dD
YXNlID0gMDsKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4LDkg
KzMwNSw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsK
LSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAg
ICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgewotICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNb
b3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9j
ayk7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZy
YW1lKj4oKS0+Y29kZUJsb2NrKCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIs
IGJ5dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJh
d1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY3R4LmdwcjxDb2RlQmxvY2sqPihyZWdUMCkpOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIApAQCAtNTI3LDcgKzU1NCw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJz
dFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29k
ZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJ
bmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUg
Zm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQo
KSk7CkBAIC01NDUsOCArNTcyLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2Vz
KCkKIAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1
dGlvbigpKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
Y29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBj
dHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxs
RnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBb
IiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNm
ciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQpAQCAtNjc2LDE3ICs3MDMsMTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCkKIAogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6Q2FwYWJpbGl0
eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOworICAgIC8vIE9P
UFM6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGRvbmUgb24gdW5saW5rZWQgY29kZSBibG9jaz8KKyAg
ICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmNhcGFi
aWxpdHlMZXZlbCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIERGRzo6Q2Fubm90
Q29tcGlsZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZToK
ICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5CZU9wdGlt
aXplZCA9IHRydWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwog
ICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgpAQCAtNjk0LDM1ICs3MjAsMzggQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0gICAgc3dpdGNo
IChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgeworICAgIC8vIE9PUFM6IGhhbmRsZSB0aGlzIGVs
c2V3aGVyZT8KKyAgICBzd2l0Y2ggKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsK
ICAgICBjYXNlIEdsb2JhbENvZGU6CiAgICAgY2FzZSBNb2R1bGVDb2RlOgogICAgIGNhc2UgRXZh
bENvZGU6Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZh
bHNlOworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZ1bmN0aW9uQ29kZToKICAgICAg
ICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRl
dGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgogICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0
aGF0IG9ic2VydmF0aW9uLgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlu
bGluZWQgJj0gY2FuSW5saW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9j
b2RlQmxvY2spOworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0Jl
SW5saW5lZCAmPSBjYW5JbmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbiht
X3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKG1f
Y29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJs
b2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAg
IGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAg
ICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1w
VGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVy
T2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+
bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
ID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxv
Y2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAg
ICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZXMoKSkKKyAgICAgICAgICAgIG1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBs
ZUp1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1
bXBUYWJsZXMoKSk7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9
CiAKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9y
UHJvZmlsZXIoKSkpKQotICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlz
YXNzZW1ibGVyPihtX2NvZGVCbG9jayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBE
aXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6
ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpKSkgeworICAgICAgICAvLyBPT1BTOiBi
dWlsZCBhIGRpc2Fzc2VtYmxlciBvZmYgdW5saW5rZWQgY29kZSBibG9jaworICAgICAgICBtX2Rp
c2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJs
b2NrKTsKKyAgICB9CiAgICAgaWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
cikpIHsKKyAgICAgICAgLy8gT09QUzogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiB1
bmxpbmtlZCBjb2RlIGJsb2NrCiAgICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAg
ICAgICAgICAgIG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAgICAgICAgbV92
bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2sp
LAorICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0
ZWNvZGVzRm9yKG1fcHJvZmlsZWRDb2RlQmxvY2spLAogICAgICAgICAgICAgICAgIFByb2ZpbGVy
OjpCYXNlbGluZSkpOwotICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2Rl
cygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1f
Y29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXIsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJ
bmRleCgwKSkpOwpAQCAtNzQyLDExICs3NzEsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbgogICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xv
Z3VlKCk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblBy
b2xvZ3VlKCk7CiAKICAgICBMYWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1l
VG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3Rlcik7CisgICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBt
YXhGcmFtZVNpemUgPSAtZnJhbWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihm
cmFtZVRvcE9mZnNldCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qg
c3RhY2tPdmVyZmxvdzsKQEAgLTc1NywxNiArNzg3LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5k
TGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2Fs
bGVlU2F2ZXMoKTsKKyAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0
TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVy
aWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFu
ZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZSkgeworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2Rl
VHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmco
KSAmJiAoIW1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7Cisg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1
bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVkVmVjdG9yOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJl
Z1QyKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50
IDwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CiAg
ICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdhbnQg
dG8gcHV0IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCiAgICAgICAgICAgICAgICAgLy8g
a2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gcmVj
b3JkIHRoZSBkdW1teSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlz
Q29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCisgICAgICAgICAgICAgICAgaWYgKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxsRnJhbWU6
OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC03NzcsMTIgKzgxMSwx
MiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgICAg
ICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQ
UigpKTsKICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwg
b2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRS
ZWdzLnRhZ0dQUigpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSwgcmVz
dWx0UmVncyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdzLCBBZGRyZXNz
KHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpICsgVmFsdWVQcm9maWxlOjpv
ZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
ICAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2RlQmxvY2stPmpp
dFR5cGUoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXplTWFya2VyKSkK
ICAgICAgICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92ZSgqc2l6ZU1h
cmtlciksICp0aGlzKTsKQEAgLTc5OSwyNCArODMzLDI3IEBAIHZvaWQgSklUOjpjb21waWxlQW5k
TGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNhbGxPcGVyYXRpb25X
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZs
b3dFcnJvciwgbV9jb2RlQmxvY2spOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb25XaXRo
Q2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dF
cnJvciwgcmVnVDApOwogCiAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGlzIDEs
IHdlIG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCi0gICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4
dXAgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7Ci0gICAgaWYgKG1fY29kZUJs
b2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsK
KyAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSAhPSAxOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKICAgICAgICAgbV9hcml0
eUNoZWNrID0gbGFiZWwoKTsKLSAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgJm1fY29k
ZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7CisKICAgICAgICAgZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2Nr
LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9G
cmFtZUluUHJvbG9ndWUocmVnVDApOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCBB
ZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkp
KTsKIAogICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyksIHJlZ1QxKTsKLSAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKS5saW5r
VG8oYmVnaW5MYWJlbCwgdGhpcyk7CisgICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVn
VDEsIFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKS5s
aW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAKICAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleCgwKTsKIAogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90
PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbiht
X2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVj
ayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
OworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2Fs
bEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVj
dG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5
Q2hlY2ssIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJyYW5jaFRl
c3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwpAQCAt
ODM5LDcgKzg3Niw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4K
ICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKICAgICBtX3Bj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKLSAgICBtX2xpbmtCdWZmZXIgPSBz
dGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fY29kZUJs
b2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CisgICAgbV9s
aW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0
aGlzLCBtX3VubGlua2VkQ29kZSwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVm
Zm9ydCkpOwogICAgIGxpbmsoKTsKIH0KIApAQCAtODU4LDggKzg5NSw4IEBAIHZvaWQgSklUOjps
aW5rKCkKICAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewogICAgICAgICBjYXNlIFN3aXRj
aFJlY29yZDo6SW1tZWRpYXRlOgogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVy
OiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
LSAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRT
aW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZVt0YWJsZUluZGV4XTsKICAgICAg
ICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRP
ZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB1bmxpbmtlZFRh
YmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzW2pdOwpAQCAtODcxLDgg
KzkwOCw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU3dp
dGNoUmVjb3JkOjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8gY3Rp
RGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZv
ciAoYXV0byYgbG9jYXRpb24gOiB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUudmFsdWVzKCkp
IHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsb2NhdGlvbi5tX2JyYW5jaE9m
ZnNldDsKQEAgLTkxOSwxOSArOTU2LDE0IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CiAKICAg
ICBmb3IgKGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewot
ICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5m
bzsKLSAgICAgICAgaW5mby5zZXRDb2RlTG9jYXRpb25zKAotICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhT
dGFydCksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pKTsKKyAgICAgICAgVW5saW5rZWRDYWxs
TGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOwor
ICAgICAgICBpbmZvLmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbik7CiAgICAgfQogCi0gICAg
ewotICAgICAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJl
bHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxk
ZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAg
ICB9Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVy
LmZpbmFsaXplKCkpOworICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwor
ICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1f
bGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5h
cHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDIz
ICs5NzIsMzMgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWSht
X2NvbXBpbGF0aW9uKSkgeworICAgICAgICAvLyBPT1BTCiAgICAgICAgIGlmIChPcHRpb25zOjpk
aXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkKICAgICAgICAgICAgIG1fZGlzYXNzZW1i
bGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fY29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsK
LSAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2Nv
ZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOworICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcHJvZmlsZWRDb2RlQmxvY2ssICptX2NvbXBpbGF0aW9u
KTsKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRN
YXBwaW5nKCkpCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9D
b2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hC
dWZmZXIpOwogICAgIAorICAgIC8vIE9PUFM6CiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBy
ZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRh
ZywKLSAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxv
Y2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkp
OworICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9j
a1dpdGhKSVRUeXBlKG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSku
ZGF0YSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
d2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1f
YXJpdHlDaGVjayk7Ci0gICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2Rl
KHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSk7CisgICAgbV9q
aXRDb2RlID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlD
aGVjaykpOworCisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBXVEZNb3ZlKG1fdW5s
aW5rZWRDYWxscyk7CisgICAgbV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9zID0gV1RGTW92
ZShtX2V2YWxDYWxsTGlua0luZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRTdHViSW5m
b3MgPSBXVEZNb3ZlKG1fdW5saW5rZWRTdHViSW5mb3MpOworICAgIG1faml0Q29kZS0+bV9zd2l0
Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0Q29k
ZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXMpOworICAgIG1faml0Q29kZS0+bV9qaXRDb2RlTWFwID0gaml0Q29kZU1hcEJ1aWxkZXIu
ZmluYWxpemUoKTsKKyAgICBtX2ppdENvZGUtPmFkb3B0TWF0aElDcyhtX21hdGhJQ3MpOwogCiAg
ICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVy
YXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhl
Y3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxl
TWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdl
bmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ss
IHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0
LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKIENvbXBpbGF0
aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQpAQCAtOTY4LDExICsxMDEwLDEz
IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlu
a0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAg
ICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9k
ZTo6TGF0ZVNocmluayk7Ci0gICAgfQorICAgIC8vIE9PUFM6IERvbid0IHRoaW5rIHRoaXMgaXMg
ZG9pbmcgYW55dGhpbmcgYW55bW9yZS4KKyAgICAvL3sKKyAgICAvLyAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgIC8vICAgIG1fY29kZUJsb2Nr
LT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7
CisgICAgLy99CiAKKyAgICAvLyBPT1BTOiBNb3ZlIHRoaXMgdG8gImxpbmtpbmciIHdpdGggYmFz
ZWxpbmUgSklUIGNvZGUuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+
bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKICAgICAgICAgSGFuZGxlckluZm8m
IGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKICAgICAgICAgLy8g
RklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCkBAIC05ODQsNyArMTAyOCw3IEBAIENv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fdm0tPm1hY2hp
bmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+YWRkKAogICAgICAgICBz
dGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgpKSAvCi0gICAgICAgIHN0YXRpY19j
YXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOworICAgICAgICBz
dGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUo
KSkpOwogCiAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25O
dWxsKCkpOwogCkBAIC0xMDQyLDE0ICsxMDg2LDE0IEBAIHZvaWQgSklUOjpkb01haW5UaHJlYWRQ
cmVwYXJhdGlvbkJlZm9yZUMKICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nl
c3NMb2dFbnRyaWVzKCptX3ZtLCAiUHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24uIl9zKTsK
IH0KIAotdW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVC
bG9jayogY29kZUJsb2NrKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0
YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2st
Pm51bUNhbGxlZUxvY2FscygpKSkpOwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdpc3RlckNv
dW50Rm9yRnJhbWVQb2ludGVyT2Zmc2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBt
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAotaW50IEpJVDo6
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoraW50IEpJVDo6c3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2Rl
QmxvY2spIC0gMSkub2Zmc2V0KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDYgKzUwLDM0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisgICAgY2xh
c3MgSklUQ29uc3RhbnRQb29sIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVzaW5nIENvbnN0YW50
ID0gdW5zaWduZWQ7CisKKyAgICAgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAg
ICAgICAgICBHbG9iYWxPYmplY3QsCisgICAgICAgICAgICBDYWxsTGlua0luZm8sCisgICAgICAg
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAgICAgIEZ1bmN0aW9uRGVjbCwKKyAgICAg
ICAgICAgIEZ1bmN0aW9uRXhwciwKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgVmFsdWUg
eworICAgICAgICAgICAgVHlwZSB0eXBlOworICAgICAgICAgICAgUGFja2VkUHRyPHZvaWQqPiBw
YXlsb2FkOworICAgICAgICB9OworCisgICAgICAgIENvbnN0YW50IGFkZChUeXBlIHR5cGUsIFBh
Y2tlZFB0cjx2b2lkKj4gcGF5bG9hZCA9IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgICAgIG1fY29u
c3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBWZWN0b3I8VmFs
dWU+IG1fY29uc3RhbnRzOworICAgIH07CisKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7
CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOwpAQCAtMTQ5LDkgKzE3Nyw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5m
byB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2Vk
Q2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5r
SW5mb0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0Nh
bGxlZUZ1bmN0aW9uKTsKQEAgLTE4OCw4ICsyMTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVD
b21waWxlKGVmZm9ydCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJh
bWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOwotICAgICAgICBzdGF0aWMgaW50IHN0YWNr
UG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZy
YW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOworICAgICAgICBzdGF0aWMg
aW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogCiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBp
bGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMg
dG90YWxDb21waWxlVGltZSgpOwpAQCAtMjIzLDYgKzI1MSwzMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgorICAgICAgICB2b2lkIGxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXpl
X3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KKyAgICAgICAgdm9pZCBsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXpl
X3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KKyAgICAgICAgdm9pZCBsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0YShWYWx1
ZVR5cGUsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQ
UlJlZywgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAg
ICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOwor
ICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2Fk
Q29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworCisgICAgICAgIHZv
aWQgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdU
MCk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5k
bGVyKTsKQEAgLTI1OCwxNiArMzEwLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6
OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJn
cyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgICYm
IE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExp
bmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxf
dmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAg
ICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lk
PiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
Y2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
ICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwo
Y29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0lu
ZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAg
IHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yOTEsMTAgKzM0MywxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2Zp
bGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAv
LyBzY3JhdGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFk
YXRhJiwgR1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAg
Ly92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAg
ICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1
ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBC
eXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEm
LCBKU1ZhbHVlUmVncyk7CkBAIC0zMDcsNiArMzU5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2Vs
bEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9p
ZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdp
c3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVn
aXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRl
Y29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hH
UFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBl
Y21hTW9kZShPcCk7CkBAIC01OTIsNyArNjQ4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjI2LDE0
ICs2ODEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUpOwotICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRl
U2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0
SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2Us
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQg
ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQg
ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAg
ICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlKTsKKyAgICAgICAgdm9p
ZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BS
UmVnKTsKKyAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BS
UmVnIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKICAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNs
b3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02NDUsNyArNzAwLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3Jp
dGUoV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcg
cG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQ
UlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShK
U1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsK
ICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRk
cmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwog
ICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpA
QCAtNjU0LDYgKzcwOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1
dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsK
IAorICAgICAgICBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpT
VmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wg
aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09w
ZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY5NSwyNiArNzUxLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9i
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBl
IyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVf
R0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVf
R0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9y
T3BSZXNvbHZlU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIE1vZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQg
aW5saW5lIHRoYW4gdXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVW
YXIgYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3Bl
LgotICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFy
IHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNM
QVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVf
IyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVf
VFlQRShERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVT
T0xWRV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29u
c3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9u
YWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNj
b3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFt
ZSk7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7
CkBAIC03NTksMTAgKzc5NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25z
dCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsK
ICAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dChBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRh
ZGF0YSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBC
eXRlY29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAg
ICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7
CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBl
bmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9w
ZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIwLDIw
ICs4NTgsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkp
OwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVu
YW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdz
PgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+
OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7
CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAg
ICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRo
UHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5
cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJs
ZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJl
c3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJl
c3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5
cGU+KHRhcmdldCwgYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRkcmVz
cyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5v
ZmZzZXQpLCByZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOCwxMSArOTU2LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9w
dGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5C
ZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7
IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRF
bWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVy
IHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNo
IGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTkzMCwxMyArOTY2LDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAg
ICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAgCi0gICAgICAg
IC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUg
YW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBm
YXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8v
IEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZh
c3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29w
ZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlB
cml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAogICAgICAgICBJbnRl
cnByZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtOTYzLDkgKzk5Miw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAg
IFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNp
Z25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWlu
dDY0X3QsIEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9jb3BpZWRBcml0aFByb2ZpbGVzOwotCiAgICAg
ICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2Vw
dGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjazsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCkBAIC05OTksMTEgKzEwMjUsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhh
c2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRl
Pj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wg
bV9jYW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVk
OwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJ
bmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVj
dEpJVENvZGU+IG1faml0Q29kZTsKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAg
ICAgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENv
bnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBtX2dsb2JhbE9iamVjdENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpIH07CisgICAgICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtl
ZENhbGxzOworICAgICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOwor
ICAgICAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZv
czsKKyAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJs
ZXM7CisgICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzOworCisgICAgICAgIEdQUlJlZyBtX21ldGFkYXRhR1BSOworICAgICAgICBHUFJS
ZWcgbV9jb25zdGFudHNHUFI7CisKKyAgICAgICAgc3RydWN0IE5vdEFDb2RlQmxvY2sgeyB9IG1f
Y29kZUJsb2NrOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAyODE3MTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOTIsOSArMjkyLDEwIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmkKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5k
Q29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMjAsNyArMzIxLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0z
NDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQog
ICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVn
VDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVy
dCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0zNzIsNyArMzc1LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhT
IGlzIG5vdCBJbnQuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJl
Z1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/
IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTU3Myw3
ICs1NzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgCiAKICAg
ICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywg
cmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVy
dCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTcx
Nyw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RyCiAK
IHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJVE5l
Z0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZtX3VubGlua2VkQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmVnYXRlPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVROZWdJQyogbmVnYXRl
SUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOwogICAgIC8vIEZJ
WE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0
ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8
T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVn
YXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5MDQsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0
X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFk
ZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2st
PmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1fcHJv
ZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3MuYWRkSklUQWRkSUMo
YXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFk
ZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklU
VW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5l
cmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVy
YXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2Ny
YXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlv
biwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncywg
YXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0
Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUsMTAgKzEwMjEsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgICAgICBlbHNlIGlm
IChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVj
dChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3Jh
dGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3Ms
IHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwxMyArMTA2MiwxNCBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hv
dWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9K
SVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVz
dGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9K
SVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywg
cmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7Cisg
ICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1Jl
Z3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0
ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3Bl
cmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQog
ICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwxMyArMTEyOCwxNCBAQCB2
b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAjZW5kaWYKIAogICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRl
LnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9K
SVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJp
Z2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNl
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJl
c3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJ
QykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFBy
b2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0
aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9u
X0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExNjYsNyArMTE3NSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxkRW1p
dFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAg
ICAgIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2Zp
bGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tX3Byb2ZpbGVJbmRleCk7CiAKICAg
ICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJz
dCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5k
VHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjIwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRh
KG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2Nv
ZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2Zp
bGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKSk7CisgICAgSklUTXVsSUMqIG11bElD
ID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlv
blRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElD
RmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5i
aW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKSk7CisgICAg
SklUU3ViSUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAg
ICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsK
ICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25z
dCBPcENhbGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdU
MSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxG
cmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
IAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJl
Z1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAgZW1pdExvYWQoY2FsbGVl
LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRl
Y29kZSk7CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91
bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDcgKzM0MSw2IEBA
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5r
ZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpl
bWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTAgKzUzLDkg
QEAgc3RkOjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9wOjpvcGNv
ZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNv
bnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHVu
c2lnbmVkIGNoZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGludCBh
cmdDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRl
Y29kZSwgY2hlY2twb2ludCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0
PGludD4oc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQp
KTsKIApAQCAtNjQsNyArNjMsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBi
eXRlY29kCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJl
Z2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkp
LCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0
YSwgY2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCByZWdUMCwgcmVnVDApOwog
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3Nyw3IEBAIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6
b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0Nv
bnN0YW50KQogewogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3Ro
aXNWYWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1
bWVudHM7CkBAIC05MSw3ICs5MCw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
IGJ5dGVjb2QKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZv
cndhcmRBcmd1bWVudHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0
aW9uU2l6ZUZyYW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJz
dEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDApOworICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAt
Zmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigtZmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFt
ZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwg
cmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAxLDE2IEBAIEpJVDo6
Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRp
b24gPSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAg
ICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2Fs
bE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJh
dGlvbiwgcmVnVDMsIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1
bWVudCBjb3VudC4KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09m
TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90Qmln
Z2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIs
IGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxv
YWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKSksIHJlZ1QzKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwg
cmVnVDMsIHJlZ1QyKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlu
a0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5v
dEJpZ2dlc3QubGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAg
LTEyNywxNiArMTI5LDE2IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQog
dGVtcGxhdGU8PgogYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBi
eXRlY29kZSkKIHsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVn
VDEpOwotICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxs
RnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1z
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1Bv
aW50ZXJSZWdpc3RlciwgYXJndW1lbnRHUFIxKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdp
c3RlciwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQo
KSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52
YWx1ZSgpKSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKLQotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJldHVyblZhbHVlR1BSKSk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3Vs
dChieXRlY29kZSk7CiAKQEAgLTE0OCw3ICsxNTAsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlu
a0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJ
bmZvcy5hZGQoQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENh
bGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAtMTU2LDQzICsxNTgsNDYgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0
ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChB
ZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVt
aXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENh
bGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBpbmZvKTsKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJl
c3VsdChieXRlY29kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6OmNv
bXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQoteworYm9v
bCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwg
dW5zaWduZWQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpIHsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWls
Q2FsbCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVj
b2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0g
ICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEubnVt
UGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdS
ZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRhLm51
bUxvY2FscyA9CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVm
ZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZs
ZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEt
Pm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAgc2h1
ZmZsZURhdGEtPm51bUxvY2FscyA9CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEuYXJn
cy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUo
Ynl0ZWNvZGUubV9hcmdjKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUu
bV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgIHNo
dWZmbGVEYXRhLT5hcmdzW2ldID0KICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNl
ZEluSlNTdGFjaygKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAgRGF0YUZv
cm1hdEpTKTsKICAgICB9Ci0gICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAgVmFsdWVS
ZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURhdGEuc2V0
dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRGcmFtZVNo
dWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVS
ZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAgc2h1ZmZsZURhdGEtPnNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6OlllcywgWyZdIHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMs
IHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3RhbnQoY2Fs
bExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxs
TGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIs
IFsmXSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURhdGEpLnBy
ZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7
CisKKyAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFtZVNodWZm
bGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9
IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5k
b25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0yMTgsMTQgKzIyMywyNSBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVy
IGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3Rv
cmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLwotICAgIENhbGxMaW5r
SW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkK
LSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpKTsKLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7
CisKKyAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBpZiAob3Bj
b2RlSUQgIT0gb3BfY2FsbF9ldmFsKSB7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBp
bmZvID0gbV91bmxpbmtlZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5m
bzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7
CisKKyAgICAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExp
bmtJbmZvSW5kZXgpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxD
b21waWxhdGlvbkluZm8oKSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0g
aW5mb0NvbnN0YW50OworICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5m
b0NvbnN0YW50KTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8g
Ynl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsK
LSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgp
LmJpdHMoKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0
cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRh
Z09mZnNldCkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsg
Ly8gcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAtMjM0LDE2ICsyNTAsMTMgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0
ZWNvZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25J
bmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENh
bGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQot
ICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4
KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9J
bmRleCwgaW5mb0NvbnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50
KGluZm9Db25zdGFudCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsK
LSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhp
cywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAg
ICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKKyAgICAgICAgICAgIC8vIE9PUFMKICAg
ICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVG
b3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9KTsKQEAgLTI1MywxMyArMjY2LDEzIEBA
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlz
LCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8g
c2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1Qw
LCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dD
YXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRD
YWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCArMjg2LDIyIEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRo
U3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGxvYWRD
b25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5r
SW5mb0NvbnN0YW50LCByZWdUMik7CiAKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgeworICAgICAgICAvLyBPT1BTCiAgICAgICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICB9CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgo
Km1fdm0sICp0aGlzKTsKKyAgICBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgqbV92
bSwgKnRoaXMsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRS
ZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKQEAgLTM5NSwxNyArNDEwLDMw
IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KIAogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKICAgICAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworCisgICAgbW92ZShyZWdUMCwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwo
KSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5m
b0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXN1bHRHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9uZXh0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxpbmso
dGhpcyk7CiB9CkBAIC00MTYsMTAgKzQ0NCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9vcGVuKGNvbnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+
KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCi0gICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGl0
ZXJhdG9yR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBMaXN0
IG5vdE9iamVjdDsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyYXRv
ckdQUikpOwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0b3JH
UFIpKTsKQEAgLTQzMiwxOSArNDU4LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnMKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBp
dGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkp
OwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
bW92ZShpdGVyYXRvckdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxk
ZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5l
eHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IAogICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRo
cm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRvbmUu
bGluayh0aGlzKTsKIH0KQEAgLTQ1Miw3ICs0NzYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChb
Jl0gKCkgewogICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAg
IGNhc2UgTmFycm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC00
NzAsNTAgKzQ5Myw3NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
CiAgICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9k
ZTo6R2VuZXJpYykpKTsKIAogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgb3I4KFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSks
IEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9pdGVyYXRpb25NZXRhZGF0YS5zZWVuTW9kZXMp
KTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFk
YXRhOjpvZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6
Om9mZnNldE9mU2Vlbk1vZGVzKCksIHJlZ1QwKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIHJlZ1QwKTsKKyAgICBz
dG9yZThUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRh
OjpvZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9m
ZnNldE9mU2Vlbk1vZGVzKCkpOwogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+KGlu
c3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRDaGVj
a3BvaW50KCk7CiAgICAgLy8gY2FsbCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkg
aW4gcmVnVDAKIAotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBpdGVy
UmVzdWx0R1BSID0gcmVnVDI7Ci0gICAgR1BSUmVnIGRvbmVHUFIgPSByZWdUMTsKLSAgICAvLyBp
dGVyUmVzdWx0R1BSIHdpbGwgZ2V0IHRyYXNoZWQgYnkgdGhlIGZpcnN0IGdldCBieSBpZCBiZWxv
dy4KLSAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzY3JhdGNoOworICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIGl0ZXJDYWxsUmVzdWx0
R1BSKTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6cmVzdWx0OwogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGl0ZXJSZXN1bHRHUFIpOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHN0YXRpY19hc3NlcnQocmV0
dXJuVmFsdWVHUFIgPT0gYmFzZUdQUik7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZl
ZFJlZ3MuYWRkKHZhbHVlR1BSKTsKKyAgICAgICAgcHJlc2VydmVkUmVncy5hZGQoaXRlckNhbGxS
ZXN1bHRHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSksIHByZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBs
KCkpLCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHJl
Z1QzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1w
bCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzdHViSW5m
b0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAg
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1
ZVJlZ3MgeyBkb25lR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENo
ZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDI7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdpc3Rl
clNldCB1c2VkUmVnaXN0ZXJzKGRvbmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVy
YXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUg
PSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNj
cmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIGdsb2JhbEdQUik7CiAKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNW
YWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NU
eXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlO
YW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAg
ICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVz
dWx0R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAt
NTI3LDU5ICs1NzQsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29u
cwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JD
aGVja3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BS
UmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFw
cGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlx
dWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwog
ICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0
R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNh
bGxSZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0Jp
dHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92
ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29k
ZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3Qu
bGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9y
UmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFy
Z3VtZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBV
bmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwo
KTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5
SWRJbmRleCsrXTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAot
ICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86
Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBH
UFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVl
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJl
c3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDEwICsxNTksMTAg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkK
ICAgICB7CisgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkgLy8g
T09QUworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmICghT3B0aW9uczo6dXNl
RGF0YUlDKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChKSVRDb2Rl
Ojppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICByZXR1cm4gT3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQog
CkBAIC0yNDgsNiArMjQ4LDQxIEBAIHByb3RlY3RlZDoKICAgICBDb2RlUmVmPEpTRW50cnlQdHJU
YWc+IG1fcmVmOwogfTsKIAorY2xhc3MgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lk
IGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9hZGRJ
Q3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICAgICAgbV9tdWxJQ3MgPSBXVEZNb3Zl
KG90aGVyLm1fbXVsSUNzKTsKKyAgICAgICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVn
SUNzKTsKKyAgICAgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKKyAgICB9
CisKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUpIHsgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisgICAgSklUTXVs
SUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVy
biBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJQ3MuYWRk
KGFyaXRoUHJvZmlsZSk7IH0KKyAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7
IH0KKworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0
b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6
dHlwZT4KKyAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmls
ZSkgeyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJ
VE5lZ0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFk
ZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0
b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0
aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJv
ZmlsZSk7IH0KKworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJh
ZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBC
YWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKwogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoRGlyZWN0SklUQ29kZSk7CiBjbGFzcyBEaXJlY3RKSVRDb2RlIDogcHVibGlj
IEpJVENvZGVXaXRoQ29kZVJlZiB7CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVE
X1dJVEhfSEVBUF9JREVOVElGSUVSKERpcmVjdEpJVENvZGUpOwpAQCAtMjY2LDYgKzMwMSwyMCBA
QCBwcml2YXRlOgogICAgIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV93aXRoQXJpdHlDaGVjazsK
IH07CiAKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJs
aWMgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxK
U0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNr
KQorICAgICAgICA6IERpcmVjdEpJVENvZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgIHsgfQorCisgICAgQmFnPFVubGlua2VkQ2FsbExp
bmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2Fs
bExpbmtJbmZvczsgLy8gT09QUzogbWFrZSBzdXJlIHdlIHZpc2l0IHRoZXNlIHNvbWVob3cuIE9y
IGFzc2VydCB3ZSBkb24ndCBoYXZlIHRvLCBzaW5jZSB0aGV5J3JlIHZpcnR1YWwgY2FsbHMuCisg
ICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7Cisg
ICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAg
Rml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7Cisg
ICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7Cit9OworCiBjbGFzcyBOYXRpdmVKSVRDb2RlIDog
cHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CiBwdWJsaWM6CiAgICAgTmF0aXZlSklUQ29kZShK
SVRUeXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisj
aW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVj
dHVyZVN0dWJJbmZvLmgiCiAKQEAgLTQ2LDEwICs0Nyw5IEBAIHN0YXRpYyBTdHJ1Y3R1cmVTdHVi
SW5mbyogZ2FyYmFnZVN0dWJJbmYKIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBl
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKLSAg
ICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAsIG1faml0VHlwZShqaXRUeXBlKQorICAg
IDogbV9qaXRUeXBlKGppdFR5cGUpCiB7Ci0gICAgbV9zdHViSW5mbyA9IG1fY29kZUJsb2NrID8g
bV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFn
ZVN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5mbyA9IGNvZGVCbG9jayA/IGNvZGVCbG9jay0+YWRk
U3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAg
ICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGU7CiAKICAgICBtX3N0dWJJbmZv
LT51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyczsKQEAgLTU5LDcgKzU5LDYgQEAgdm9pZCBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgTGlua0J1ZmZlciYgZmFzdFBh
dGgsIExpbmtCdWZmZXImIHNsb3dQYXRoLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4gc3RhcnQpCiB7CiAgICAgbV9zdHViSW5mby0+c3RhcnQgPSBzdGFydDsKLQogICAg
IG1fc3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IGZhc3RQYXRoLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4obV9kb25lKTsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlw
ZSkpCkBAIC02Nyw2ICs2NiwxNSBAQCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5h
bGl6ZSgKICAgICBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBzbG93UGF0aC5s
b2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3Nsb3dQYXRoQmVnaW4pOwogfQogCit2
b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoSklUJiBqaXQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm8sIEdQUlJlZyBz
dHViSW5mb0dQUikKK3sKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgUkVMRUFTRV9B
U1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworICAgIGppdC5sb2FkQ29uc3Rh
bnQoc3R1YkluZm8sIHN0cnVjdHVyZVN0dWJJbmZvR1BSKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNv
ZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwo
KTsKK30KKwogSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENh
bGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MTcxOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDExMyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNz
IENhY2hlYWJsZUlkZW50aWZpZXI7CiBjbGFzcyBDYWxsU2l0ZUluZGV4OwogY2xhc3MgQ29kZUJs
b2NrOworY2xhc3MgSklUOwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3Mg
QWNjZXNzVHlwZSA6IGludDhfdDsKIGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKK3N0
cnVjdCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3Rl
cnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisK
K3N0cnVjdCBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JH
ZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BS
SW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZv
OjpyZWdUMjsKKyAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2Nr
IGFuZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgorICAg
IHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gzID0gR1BSSW5mbzo6cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUklu
Zm86OmFyZ3VtZW50R1BSMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQ
UkluZm86OmFyZ3VtZW50R1BSMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
byA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMSA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOworfTsKKworc3RydWN0IEJhc2VsaW5l
SW5CeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsK
Kworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgdGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGlu
ZUluQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworfTsKKworc3RydWN0
IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
R1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBwcm9maWxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVj
dCBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJyYW5kID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQoYnJhbmQgPT0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCiBjbGFzcyBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvciB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IoKSB7IH0KQEAgLTYyLDE1ICsxNjQsMjAgQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUo
CiAgICAgICAgIExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xv
d1BhdGhMaW5rQnVmZmVyLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4gc3RhcnQpOwotICAgIAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoSklUJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0NvbnN0YW50
LCBHUFJSZWcgc3R1YkluZm9HUFIpOworCisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBtX3VubGlua2VkU3R1YkluZm8geyBudWxscHRyIH07CisgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3RkOjpudW1lcmljX2xp
bWl0czxKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50Pjo6bWF4KCkgfTsKKwogcHJvdGVjdGVkOgot
ICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAgICAg
U3RydWN0dXJlU3R1YkluZm8qIG1fc3R1YkluZm87CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9kb25lOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Nsb3dQYXRoQmVnaW47Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7IC8vIE9PUFM6IG1ha2UgcmVwb3J0Q2FsbCBwYXNzIHNv
bWV0aGluZyBpbiB3ZSBjYW4gdXNlIGZvciB0aGUgbm9uLUNUSSB0aHVua3MgYnVpbGRzLiAKIH07
CiAKIGNsYXNzIEpJVEJ5SWRHZW5lcmF0b3IgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IgewpAQCAtMTMyLDggKzIzOSw4IEBAIHB1YmxpYzoKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
KCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJs
b2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2Us
Ci0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBz
Y3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CisgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUs
IENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1v
ZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2Vt
YmxlciYpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJ
KHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxS
ZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKK30KKworQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAg
ICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3Jj
KSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQz
MigpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVD
b25zdGFudCkgeworICAgICAgICAvLyBPT1BTOiBmaW5kIGEgd2F5IHRvIGFzc2VydCB0aGF0IGFs
bCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0NlbGwoKTsKIH0KIAog
QUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdp
c3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwotICAgIHJldHVybiBt
X2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpICE9IFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7CisgICAgcmV0dXJuIG1f
dW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZp
cnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiArMTgxLDM2IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFk
YXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlv
biwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxX
QVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIy
LCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0
U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogICAg
IHJldHVybiBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyBmdW5jdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZh
bHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1
ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2st
PmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05l
eHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRl
eCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NF
UlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2tw
b2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4
ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFi
ZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlu
bGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6
ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNv
ZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2lu
dHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1
dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0y
OTMsMjkgKzMxOCwzNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJh
CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFs
UmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVS
ZWdzIHZhbHVlKQotewotICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0gICAg
Ly8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3
ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxz
ZQotICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8
RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAgIHN0
b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwot
ICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNl
bmRpZgotfQorICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2Vs
bCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30KKworLy8gT09QUworLy9pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVS
ZWdzIHZhbHVlKQorLy97CisvLyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKKy8v
CisvLyAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNr
ZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lmIFVT
RShKU1ZBTFVFNjQpCisvLyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9i
dWNrZXRzKTsKKy8vI2Vsc2UKKy8vICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0
b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5t
X2J1Y2tldHMpOworLy8gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9y
LT5hc0JpdHMucGF5bG9hZCk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3Jp
cHRvci0+YXNCaXRzLnRhZyk7CisvLyNlbmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRh
ZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlm
CkBAIC0zMjMsMjQgKzM1MywyNSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Nh
bWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmls
ZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1Zh
bHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQg
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNW
YWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvciht
ZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKyAgICBwdHJk
aWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1l
dGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPiht
X2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJz
dEJ1Y2tldCgpOworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3MobV9tZXRhZGF0YUdQ
Uiwgb2Zmc2V0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjpl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcg
cmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBK
U1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVn
KQorLy97CisvLyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1
ZVJlZ3MocmVzdWx0UmVnKSk7CisvL30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRh
LCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2Rl
LCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKQEAgLTM2MCw2
ICszOTEsMjEgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlVwogICAg
IH0KIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlm
Zl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQg
c2NyYXRjaEdQUikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CisgICAgICAg
IGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2Ny
YXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKKyAgICB9Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQ
UiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQoreworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2VsbEdQ
Uiwgc2NyYXRjaEdQUik7Cit9CisKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJh
bmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJldHVybiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CkBAIC0zODAsNyArNDI2LDcgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9h
ZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBp
bkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3Rl
ZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxv
YWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTQyLDcgQEAgaW5s
aW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAg
IGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25D
ZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTUyLDcgQEAgaW5s
aW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3Rl
cklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7Cisg
ICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgp
KQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0
LDExICs1NjAsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAg
ICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29s
IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsNyArNTg1LDggQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5
dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgICAgICAvLyBPT1BTOiBoYW5kbGUg
bGluayB0aW1lIGNvbnN0YW50cyBoZXJlLi4uCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQogICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7
CiAgICAgICAgIGVsc2UKQEAgLTU2NiwxMSArNjA4LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0
Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZp
cnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVy
SUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01OTUs
NyArNjMyLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogCiBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0
ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2st
PmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY3NCw3
IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBpZiAo
dGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+
b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgR2V0
UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQotewot
ICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hNYXAg
ZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRHZXRQ
dXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0SW5m
b3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7Ci0g
ICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1dElu
Zm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6OmNv
cGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBrZXkg
PSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAzMiB8
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChpdGVy
YXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVy
YXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGllZEFy
aXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQcm9m
aWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0
KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiArNjk1
LDYxIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICByZXR1
cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2Fk
UHRyKEFkZHJlc3MobV9tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNl
dCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBt
X3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRl
Y29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9h
ZDgoQWRkcmVzcyhtX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgp
Lm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZhbHVl
LCBBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCku
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMyVG9N
ZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9m
ZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKG1fbWV0YWRhdGFHUFIsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2Rl
KSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGFk
ZFB0cihtX21ldGFkYXRhR1BSLCBUcnVzdGVkSW1tUHRyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3Vs
dCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9h
ZFB0cihBZGRyZXNzKG1fY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvbnN0
YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxv
YWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9nbG9i
YWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BSUmVnIHJl
c3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOworICAg
IC8vIE9PUFM6IE1heWJlIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudD8KKyAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmVzdWx0LCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVzdWx0
KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgp
ICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzEs
NyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNh
bGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBB
ZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAg
IEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpOwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9p
bW0oY29uc3QgSW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVz
dGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRl
Y29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAg
IGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDI0LDcg
KzEwMjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAKICAg
ICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhp
cyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5h
cHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9m
ZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVD
VElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3ICsxMDQyLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFi
bGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4K
ICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBT
dHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBw
ZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZz
ZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFi
bGUodW5saW5rZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0LDIyIEBAIHZvaWQg
SklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAg
ICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwotICAgICAgICBl
bHNlCisgICAgICAgIC8vIE9PUFM6IG1vc3QgIk90aGVyIiBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24gY29uc3RhbnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQgZnJvbSB0aGUgVW5saW5rZWRDb2RlQmxv
Y2suIEl0J3MganVzdAorICAgICAgICAvLyBhIGNvdXBsZSB0eXBlcyB0aGF0IGNhbid0LiBDcmVh
dGUgYW4gYWJzdHJhY3Rpb24gZm9yIHRoYXQuCisKKyAgICAgICAgc3dpdGNoIChtX3VubGlua2Vk
Q29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkgeworICAgICAgICBj
YXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAgICAgY2FzZSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBz
dG9yZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3Jl
NjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICs5OCwzNSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0
cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFs
bG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxsb2NhdG9y
IGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9i
amVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lz
dGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0g
cmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKIAotICAgIGlmICgh
YWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVsc2UgewotICAg
ICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3Rl
ZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVn
LCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0g
ICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcE5ld09iamVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgb2Zmc2V0
T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcE5ld09iamVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsg
b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCks
IGFsbG9jYXRvclJlZywgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNl
cyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3Rv
cmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRTbG93
Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAg
ICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRh
dGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUp
OworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwg
JnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVl
R1BSKTsKIH0KIApAQCAtMTMxLDcgKzE0MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRl
c19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFs
dWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJv
bC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUg
PSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFu
Y2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVD
VF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1i
b2xGdW5jdGlvbikpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rvciwg
cmVnVDApOwogCkBAIC0xNTQsMzAgKzE2NCwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsK
IAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJl
c3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNl
VmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhl
biB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
Ojp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3RvR1BSID0gQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BSKTsKICAgICAKICAgICAvLyBDaGVjayB0aGF0
IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tl
ZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Rv
R1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVn
VDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUNSwKLSAg
ICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICByZXN1bHRHUFIsCisgICAgICAgIHZhbHVl
R1BSLAorICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgc3R1YkluZm9HUFIsCisgICAgICAgIEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDEsIEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6c2NyYXRjaDIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAorCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQgKzIxMCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVz
cyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19h
c3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIp
OworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9
PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSkKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZP
cHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMjQwLDcgKzI1Nyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KIAogICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwogCkBA
IC0zNzQsNyArMzkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9u
KgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgp
OwogI2Vsc2UKQEAgLTM4NSw3ICs0MDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0m
IHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBq
aXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZl
UmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQyOCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3By
aW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVy
dHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQsOSAr
NDUwLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZvaWQg
SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0
aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlv
biwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
bmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
b3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0ODIs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5j
aElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsK
ICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNGYWxz
ZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzQ5OSw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyArNTM4
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8vIEZp
cnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBi
aXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJn
ZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7
CiAKQEAgLTU0Myw3ICs1NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3Qg
SW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRh
cmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTU4MiwxNSAr
NjAxLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KIHZvaWQg
SklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVx
UHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEpT
VmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVj
aWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4
KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICBsb2FkQ29kZUJs
b2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpCisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAg
IHN0b3JlOFRvTWV0YWRhdGEoYnl0ZWNvZGUsIFRydXN0ZWRJbW0zMigxKSwgT3BKbmVxUHRyOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdl
dCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2NDIsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RH
UFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUp
LCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY1OSw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzE0LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1w
VG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzczMSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90
aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0g
YXJndW1lbnRHUFIxOwpAQCAtOTA4LDcgKzkyOCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9q
c3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdU
MiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MTgsNyArOTM5LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQog
CkBAIC05MzEsNyArOTUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IElu
c3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsK
ICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk3Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihy
ZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBk
c3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAt
OTc4LDcgKzEwMDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZS
ZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05OTMs
NyArMTAxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAg
ICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBj
YWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwg
QWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5r
ZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsKICAg
ICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVy
blZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0
Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5n
IGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwotICAgIGlmIChidWZmZXIgfHwg
IXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4
LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1f
Ynl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9i
eXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5jaFRl
c3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsK
ICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVt
aXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAgICAgICAgIEpTVmFsdWVSZWdz
IHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9maWxl
Lm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0
YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdzKTsKLSAgICAgICAgfSk7Ci0g
ICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBAIC0xMDUzLDggKzEwNjMsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRj
aEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVj
b3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVj
b3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtl
ZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5MSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVj
b2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBk
ZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtl
ZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBj
b25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRD
b2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBs
ZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07
CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNv
ZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBs
aW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1f
bWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIx
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CiAgICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCkBAIC0xMDk5LDIwICsxMTEw
LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBj
cmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0
Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU3Ry
aW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5r
ZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAg
ICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUlu
ZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAgIGxpbmtlZFRh
YmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0
aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCk7
CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+
KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCBy
ZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkRl
YnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9
IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
ZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7
CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0xMTMzLDcgKzExNDYsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDAp
OwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1Qw
KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTExNDgsNyArMTE2MSw2
IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTY2LDcgKzExNzgsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAgICBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdU
MCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsK
ICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTExODgsMTIgKzEyMDAsMTQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIEV2ZW4g
dGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAog
ICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNz
YXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBH
QyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOwor
ICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMoKTsKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291
bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKKyAgICAKKyAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
IGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAgZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hl
Y2soKTsKICNlbHNlCkBAIC0xMzEwLDIzICsxMzI0LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3Ry
dWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RU
eXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJl
SUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNl
PEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAg
IFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJl
ZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcg
KzEzNTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9i
amVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90
b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFs
bG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJh
cmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9u
OjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0
aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BDcmVhdGVUaGlzOjpvZmZzZXRPZkNhY2hlZEZ1bmN0aW9uKCksIGNhY2hlZEZ1bmN0aW9u
UmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1YWws
IGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2Fs
bGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBjYWxs
ZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcy5s
aW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzgyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Vx
KGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVn
VDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJu
VmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwg
cmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwg
cmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwogICAg
IGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIg
fSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFs
dWVHUFIpOwpAQCAtMTM5NCw3ICsxNDA2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShj
b25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQxNyw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdU
MSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzMiwxMSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVj
dG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5z
dGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0
YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9m
Q3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rv
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhh
c0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKICAg
ICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BS
IH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9
CkBAIC0xNDMwLDcgKzE0NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9j
dXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJv
bUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0FyZUVs
aWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV91bmxpbmtl
ZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkp
IHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291
bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCByZWdUMCk7CiAgICAgICAg
IGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCByZWdUMCwgVHJ1c3RlZElt
bVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAt
MTQ0MCw3ICsxNDU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRpZgotICAgICAgICBtb3Zl
VmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRSZWdzKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAg
ICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsxNDY4LDkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAgLy8gRW1pdCB0aGUgSklU
IG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKKyAgICAg
ICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsK
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8sIFRydXN0ZWRJ
bW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwKLSAgICAg
ICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNv
dW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0
T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAtMTUwOSw3ICsxNTI1LDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1lbnRHUFIwKTsK
ICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50
R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTE1NjQsMzQgKzE1ODEsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4
cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IEdQUlJlZzo6YXJndW1lbnRH
UFIwOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtl
ZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5
dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9z
Y29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNs
KTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSkKKyAgICBsb2FkQ29uc3RhbnQoY29u
c3RhbnQsIGFyZ3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNv
ZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCks
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBv
cF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09
IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNF
eGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQog
fQogCkBAIC0xNjIxLDIzICsxNjQwLDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21t
b24oY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFy
Z3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
LCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50
R1BSMSk7CiAjZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2Nv
ZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRv
IGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVu
Y3Rpb25FeHByLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0
ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1
bWVudEdQUjIpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAg
aWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19n
ZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMXJlZ1QwLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09
IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3Vt
ZW50R1BSMXJlZ1QwLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQo
b3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjFyZWdUMCwgYXJn
dW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2NjQsMjkgKzE2ODQsMzAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Fy
cmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
c1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdj
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNT
dGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJn
dW1lbnRHUFIyKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwg
YXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdBcnJheVdpdGhTaXplPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRl
eCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFu
ZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7Cisg
ICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0
aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1lbnRH
UFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxpemVQ
b2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRMb2Fk
KHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJv
ZmlsZSwgZHN0LCByZWdUMywgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2Vu
ZGlmCiB9CiAKQEAgLTE2OTQsOCArMTcxNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJh
eV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91YmxlIGNo
ZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHR5cGUg
cHJvZmllbHIgaXMgZW5hYmxlZC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBl
TG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAt
MTc3NywyMCArMTc5OSwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAg
IT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tl
blRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwotICAgIEdQUlJl
ZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVu
dCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1cmVT
aGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNj
cmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQ
UjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNr
ZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAg
IH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdU
Mik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7
Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVl
UmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJl
ZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4gb2Zm
IHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB1c2luZyB0aGUgY29udHJvbCBmbG93IHBy
b2ZpbGVyLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJv
ZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2Nr
TG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsKQEAg
LTE4NjAsNyArMTg4Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJ
bnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxOTEyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVl
UmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CiAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODE3MTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODgxLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtl
eSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwog
Ci0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJbnQz
MigpKQpAQCAtMjkwNCw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblN3aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGlu
ZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNTdHJp
bmcoKSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZhbHVl
KGdsb2JhbE9iamVjdCkuaW1wbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyODE3MTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3By
aXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBy
ZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdz
KHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkyICs0
OSwxMDMgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVy
cy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkg
ewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsK
KyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRl
bnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZp
ZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIp
OworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VH
UFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNo
R1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRp
b25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxl
LCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBi
YXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5m
b0dQUik7CisKKyAgICAgICAgLy8gT09QUy4gU3VwcG9ydCB0aGlzCisgICAgICAgIC8vaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAgICAgLy8gICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgICAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
ICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBl
bmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+CiB2
b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVj
b2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGlmICho
YXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChtX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIy
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4
KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0
ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9
PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJv
cGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcx
IGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVu
dEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9w
ZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3Rh
bnQobV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1h
dGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0
T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BS
KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNjAsOCArMTcxLDggQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BS
ID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIApAQCAtMTg3LDM0ICsxOTgsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlH
UFIpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU7Cisg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBBU1NFUlQoaGFzQW55
U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yMjMsOSArMjQxLDEx
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUs
IGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRH
UFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTIzNSwyNiArMjU1LDIw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFk
eSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwog
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZh
dGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
LQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKQEAgLTMwMCwyMSArMzE0LDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3Nl
dF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5t
X2JyYW5kOwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5kR1BS
ID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87
CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vz
c0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MoYnJhbmRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAgLy8g
V2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNl
IHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI4LDEzICszNDksMTcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogewogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKwogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dl
bmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vz
c0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBi
YXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJh
bmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTM0NCwyNCArMzY5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0
ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVu
dEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBh
cmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9w
dGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlv
bkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENh
bGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNl
dFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMTkgKzM4OSwyOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5k
ID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJh
bmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJh
bmRHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2
YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFu
ZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisK
KyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVj
a1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFj
Y2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCkBAIC0zOTQsOSArNDIyLDExIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0g
cmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZh
dGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0MzYsMTggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3Bl
cmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlv
blRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3Vt
ZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRP
cHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NTksNDIgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdU
Myk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQb2lu
dGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9m
aWxlKCksIHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQ
dXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVn
VDIpLCByZWdUMywgcmVnVDQpOwotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0
eSkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BS
KSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworICAgIC8vIE9PUFM6CisgICAgLy9pZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgIC8vICAgIGdlbi5zdHViSW5mbygpLT5w
cm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBz
dGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQ
dXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0
ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4p
OwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJy
aWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MTAsMTIgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBF
Q01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsK
IAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5
dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTMxLDE2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0
IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihp
c0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUp
IDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXpl
IDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlz
RGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisg
ICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFy
cmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwg
YXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUxMiw3
ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAgIGF1
dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5v
blN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlW
YWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwpA
QCAtNTIzLDcgKzU2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUzOSwxMSArNTgxLDEx
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgaml0
LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0
R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9
IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9m
ZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSk7CkBAIC01NzAsMjAgKzYxMiwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9u
YW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0
dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhy
ZWdUMiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcs
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmllbGRQ
dXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBz
dHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1f
cHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1
cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNjAzLDEzICs2
NTYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBhdXRvIG9wZXJhdGlvbiA9IHB1
dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0
aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRo
ZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGdlbi5zdHViSW5mbygp
LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7
CisgICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRC
eVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2
YXRlRmllbGRPcHRpbWl6ZTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRzR1BS
MywgYXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjc2LDEyIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgZWxzZQotICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQpAQCAtNjQ4LDkgKzY5Niw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJl
Z1Q0OwogCkBAIC02ODAsNyArNzI4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9i
eV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTY4OSw3ICs3MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5
X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJl
Z1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3NDksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX3NldHRlcl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVn
VDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1Qy
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCBy
ZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVn
VDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3NjAsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRy
aWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwg
cmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNzE5LDcgKzc3MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdU
Mik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0
ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1
dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3LDIzICs3ODAsMzMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2Vs
aW5lRGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwK
KyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0
dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3Jp
dGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0
ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9i
YmVycyByZWdpc3RlcnMuCkBAIC03NTksMTUgKzgyMiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAg
IEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0z
MihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC03ODEsMjQgKzg0NiwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3Vt
ZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
c3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
LCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRP
cHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRl
bGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTg0NSwyMiArOTA1LDMzIEBAIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
RGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVy
dHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIp
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBv
ZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAv
LyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBi
YXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTU0LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdU
MSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9w
dGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2Rl
LnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BS
Mik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVz
dGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQgKzk3MiwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1l
bnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1Yklu
Zm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVj
bWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
ZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVn
VDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTYx
LDIyICsxMDI5LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBy
ZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BS
LCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2LDE0ICsxMDYzLDE3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTEwMDMsMjYgKzEwODMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQoY29ucwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwog
ICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
LCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0
aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNh
bGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRC
eUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRp
b25UcnlHZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDMw
LDIyICsxMTA0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJl
Y3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGUtPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVz
dWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQ
UiwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiArMTEzNywx
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlk
c1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGlt
aXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsK
KyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRE
aXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwNzMsODMgKzExNTgsNjEgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlkZW50ID09IG1fdm0t
PnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAg
ICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0
YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCByZWdUMSk7CisgICAgICAgIGxvYWQ4RnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRh
ZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlKCksIHNjcmF0Y2hHUFIp
OworICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIHNj
cmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6
QXJyYXlMZW5ndGgpKSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChi
eXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdl
dEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFz
ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMp
OwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJl
c3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qx
LCB0aGlzVlJlZyk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CiAK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCi0gICAg
SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTE1
OCwxNiArMTIyMSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BS
Mik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMTc3LDI2ICsxMjQyLDU4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3Vt
ZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFIzOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9p
ZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlz
PigpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1
YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
dGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlz
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNl
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisKKyAgICBKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSwgc3R1YkluZm9HUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJ
ZFdpdGhUaGlzOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5h
cHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3Vs
dFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyNDEsMTYgKzEzMzgsMTkgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
V2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlv
bkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3RoaXNWYWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1
bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVu
dEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI5ICsxMzYwLDIzIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0
aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3Rh
dGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0KKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9cwogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJiB2bSkKQEAgLTEzMjksMjMg
KzE0MjMsMzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9
IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUg
dG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0
b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZl
IGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJh
dGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdh
eXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFs
dWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFz
ZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
YmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzdHVi
SW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3Qg
PyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0
QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6
IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShi
eXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRl
LWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsxNDY3LDE4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAgICAKICAgICBKSVRQ
dXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0
aW9uKCksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50
R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEzNzYsMjUgKzE0ODgsMTkgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlR1BS
ID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHBy
b3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
cHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
Z2VuLnNsb3dQYXRoRnVuY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRD
YWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQpAQCAtMTQ0MSwyMCArMTU0NywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9p
ZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNl
R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcp
OwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BS
KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtl
ZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6
OkluQnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7
CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAt
MTQ2MywxNCArMTU4MCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3Qg
SW5zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAg
ICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5C
eUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVu
dEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjAwLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJh
c2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwg
cHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgLy8g
c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdo
YXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1
cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSks
IGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXpl
OwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlkT3B0
aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2MjQsMzMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NTksMTggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxz
W21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEp
OworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFs
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTU2LDUxICsxNjgxLDU2IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BS
ID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZh
bDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAgIC8v
IHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkg
d2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEg
ZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6
ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9w
dGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5C
eVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJh
bmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1Yklu
Zm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlwZTsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQcml2
YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJVDo6
ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBi
YXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKICAgICBB
U1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiAKQEAgLTE2MDgsNyArMTczOCwxMSBAQCB2b2lkIEpJ
VDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8g
b3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFu
ZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
YXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFz
UHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9u
SGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTE2MTgsMjcgKzE3NTIsMjEgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xv
dyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5T3JCcmFuZEdQUiA9
PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpLCBkZWNsdHlwZShv
cGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6
ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9u
YW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gdHlwZSA9
PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0
aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUg
PyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJy
YW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NTIsNyArMTc4MCw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKGMKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9k
c3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNsb3co
Ynl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSwgLCBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19w
cml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NjY2LDE5ICsxNzk0LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFu
ZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1By
aXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwor
ICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBi
eXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3Mp
Cit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25X
YXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJ
bmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0
ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
LCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Nj
b3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2ODgsNiArMTgxOSw3IEBAIHZvaWQg
SklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3MDEsNyArMTgzMyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNv
bnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVU
eXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNj
b3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDEpOwogICAgICAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsK
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNv
bnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4NDcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBt
X2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3OTQsNTkg
KzE5MjYsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogdm9p
ZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
ID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAg
ICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7
CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2
ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBz
YW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVs
ZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmly
b25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2
ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwog
ICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9j
ay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBt
ZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5N
ZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0
b3IgPSBbXSAoVk0mKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2
ZVNjb3BlVGh1bmsoQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1
cmVWYXIiKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICAgICAgcmV0dXJuIEpJ
VDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MiKTsKKyAgICAgICAgfTsKIAotI2RlZmluZSBSRVNPTFZFX1NDT1BFX0dFTkVS
QVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0
b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7
Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVTT0xWRV9TQ09QRV9HRU5FUkFU
T1IpCisgICAgICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvciA9IFtdIChWTSYp
IHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhz
dGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7CiAgICAg
ICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NvcGVHUFIgPSByZWdUNjsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNj
b3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0
YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAg
ICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAgICBj
b2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZSBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9
IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAgIGVt
aXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24g
Y2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6
Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8g
aW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29t
aW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBp
bmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRH
UFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVz
b2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJu
QWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zm
c2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0
YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBt
ZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIApAQCAtMTg1NSwyNiArMjAw
NSwyNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJl
ZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJ
bmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBt
X3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNl
dE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAg
ICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcykgewogICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29w
ZURlcHRoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAg
ICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAgICBMYWJlbCBsb29w
ID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1Qx
KTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUg
PSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAgewotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
LSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAg
anVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICAgICAg
aml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICAgICAgaml0Lmp1bXAo
KS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUg
PSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEyICsyMDMyLDEyIEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2Rl
QmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0g
ICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVj
dEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgp
KSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7Cisg
ICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xv
YmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGlu
Z0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgaml0Lm1vdmUoZ2xvYmFsT2JqZWN0R1BS
LCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xODk3LDExICsy
MDQ3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAg
ICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhciosCiAgICAgICAgICAgICAvLyBhbmQg
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9y
IEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxv
Y2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdU
MCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCBy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAg
ICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZz
ZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2Jh
bExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsyMDU5LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1pdFJl
c29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAo
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6
CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMjA2OSw0NSBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0g
ICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVt
cExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JK
RUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAg
ICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJv
cGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mg
OiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChy
ZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xv
c3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQot
ICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
UHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUmVzb2x2ZVR5cGUoKSksIHJlZ1QwKTsKIAot
ICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAg
IGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAg
ICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsK
KyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICBu
b3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
LmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7CisgICAgICAgIGVtaXRD
YXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcik7
CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAg
IGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICBkZWZh
dWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmsp
OwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVz
b2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29k
ZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBD
b2RlTG9jYXRpb25MYWJlbCh2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZp
bmUgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jl
c29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0
ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAg
ICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJl
dHVybiBqaXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxp
bmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hf
UkVTT0xWRV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJ
TkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7
CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdv
cmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1
c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwNjUsNiArMjE3
Nyw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0yMTc4LDcgKzIy
OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yMTg2LDkgKzIyOTksOSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEZy
b21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0RnJv
bVNjb3BlLCBkc3QsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogI2Vs
c2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yMTk2LDQxICsyMzA5LDUwIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2Nv
cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBSZXNv
bHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBt
X2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdCht
X2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50
SW5zdHJ1Y3Rpb24pOworCisgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJikg
eworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoQ2xvc3Vy
ZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsK
KworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBb
XSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVu
ayhDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJv
bV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gZ2VuZXJpY0dldEZyb21T
Y29wZUdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rKHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9z
Y29wZSBnZW5lcmljIik7CisgICAgfTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFH
UFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCi0gICAgaWYgKHJl
c29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKLSAg
ICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJh
bmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0
YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsK
KyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRh
ZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgR0VUX0ZS
T01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29s
dmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBn
ZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoR0VUX0ZS
T01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdFVF9GUk9NX1NDT1BFX0dF
TkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CisgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7Ci0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVz
b2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0KKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYgKHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xv
c3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgY29kZSA9IHZtLmdldENU
SVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgIGVs
c2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZyb21TY29wZUdlbmVy
YXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRo
dW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21T
Y29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBj
aGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1
bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVz
ZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmpl
Y3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KQEAgLTIyMzks
NzcgKzIzNjEsNjggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNj
b3BlR1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcEdldEZy
b21TY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIEND
YWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkp
LCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUo
KSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBK
dW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sg
PSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJfdCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCkg
ewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0dXJl
T2Zmc2V0KSwgcmVnVDEpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAg
IHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MSk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBhdXRvIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIpIHsKKyAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mU3Ry
dWN0dXJlKCkpLCByZWdUMSk7CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7Cisg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwor
ICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDEpKTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVj
dGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFs
T2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBqaXQu
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkp
LCByZWdUMyk7CiAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNz
KHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJ
bnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Qb2lu
dGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihy
ZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJl
ZywgcmVnKTsKLSAgICB9OwotCiAgICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAoR1BS
UmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgewogICAgICAgICBzdGF0aWNfYXNzZXJ0
KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BS
KTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworICAgICAgICBqaXQubHNoaWZ0NjQo
VHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmFkZFB0cihzY29wZUdQ
Uiwgb3BlcmFuZEdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CiAgICAg
fTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBi
b29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVy
ZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BS
KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0
IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRp
dGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmpl
Y3Rpb24uCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwogICAg
ICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKICAgICAgICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2ggPSByZWdUMjsKIAotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJk
YTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBi
YXNlLCByZWdUMyk7CisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1w
KHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVx
dWFsLCBiYXNlLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJh
bmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIG9mZnNldCk7CiAgICAgICAgICAgICBp
ZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0g
YnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91
dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZz
ZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlz
KTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
KTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0
T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAg
ICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAg
IGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5uZWczMihvZmZzZXQpOworICAgICAg
ICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IGppdC5sb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgpA
QCAtMjMxNywyMSArMjQzMCwxOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1p
dEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29w
ZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVn
VDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRh
dGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
cmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJy
YW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0
LmJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZz
ZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsKICAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNj
b3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWlj
OgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM0MSw3
OSArMjQ1Miw1NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAg
ICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8p
KSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJp
dHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAg
aXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEdsb2Jh
bFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmso
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
KyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVU
eXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVs
c2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCBy
ZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyks
IHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGppdC5sb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwgcmVn
VDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlz
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIg
PSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
aml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAg
IEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3Bl
cnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9
IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5r
KCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIu
bGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluaygmaml0KTsK
IAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgICAgIHNraXBUb0VuZC5s
aW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKKyAgICAgICAg
c2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1ZVBy
b2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAg
ICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mUHJvZmlsZSgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlBy
b2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dl
dF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFt
ZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZl
VHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dl
dF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwK
LSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNv
bHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2
bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVz
b2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBc
Ci0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5F
UkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29w
ZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlz
IGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVj
YXVzZQpAQCAtMjQ3MSw4NiArMjU1OSw3OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZv
aWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0
b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0
Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9h
ZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1Qx
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdy
aXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3Rl
cikpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9
IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5
dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1
Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29k
ZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsK
KworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAg
ICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVT
bG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRv
bid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBB
ZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBp
bmplY3Rpb24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2Nv
cGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBs
b2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Om9mZnNldE9mU3RydWN0
dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVn
VDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsm
XSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAg
ICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsK
KyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BQdXRUb1Njb3BlOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwogICAgICAgICAgICAg
bmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVn
VDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAg
ICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWlnaHQs
IChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwor
ICAgICAgICAgICAgLy8gT09QUzogd291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0
IHRvb2sgR1BSUmVncworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNT
Y29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2so
cmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNv
bnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0VmFyUmVhZE9u
bHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0gICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24o
Z2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKSB7CisgICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZl
VHlwZSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDApOworCisg
ICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLmlu
aXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
IHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVj
YXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3Rh
dGljYWxseS4KLSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAg
ICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9j
YXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCksIHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJlZ1QxKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRh
dGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBl
bWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3Qp
LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKworICAg
ICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRO
b3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDEpOworCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QwKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxkIGJlIG5pY2UgdG8gaGF2
ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciB2YWx1ZS4KKyAgICAgICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoK
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xv
c3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50
U2V0KTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3Jp
dGVXYXRjaHBvaW50KHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJbmRleChyZWdUMCwgcmVn
VDIsIFNjYWxlRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
KSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNp
b24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciBvd25lci92YWx1ZS4KICAgICAgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yNTY0LDU4ICsyNjQ1LDUyIEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgfQogICAg
IH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAg
SnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEds
b2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1p
YywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHkt
aW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAgICAgICBpc0dsb2JhbExleGljYWxWYXIu
bGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9i
YWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNl
IFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAvLyBJZiBh
bnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1cmVWYXIvIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21waWxlIHRoaW5ncworICAgIC8vIHRoYXQgd2F5
IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2UndmUgcHJvdmVuIHRoYXQgaXMgdGhlIHR5cGUg
d2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJlVmFyLAorICAgIC8vIGFsbCBDb2RlQmxvY2tz
IHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFyCisgICAgLy8gaWYgdGhlIHZhciBpbmplY3Rp
b24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYgaXQgaXMgZmlyZWQsIHRoZW4gd2UgdGFrZSB0
aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0CisgICAgLy8gbWF0dGVyIHdoYXQgdHlwZSB3ZSBh
cmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZh
cikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKFJlc29s
dmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7
CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1QwKTsKICAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBl
IGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
ICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7
CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCisgICAgICAgIEp1bXAgbm90R2xv
YmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFy
KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsodGhpcyk7CisKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKKyAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCiAgICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAK
ICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAogICAgICAgICBza2lwVG9FbmQubGluayh0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCkBA
IC0yNjI0LDE4ICsyNjk5LDIxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUo
Y29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsK
LSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJv
ZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2sp
Lm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzYXcg
YSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBDb2RlQmxvY2tzIGFyZSBndWFyYW50ZWVkCisg
ICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZhci4KICAgICAgICAgSklUU2xvd1BhdGhDYWxs
IHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19z
dHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAgICAgICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rp
b24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgICAgIEFT
U0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwot
ICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4
KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBBU1NFUlQobV91bmxpbmtlZENvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlv
bik7CiAKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3Vt
ZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7CkBAIC0yNzAxLDcgKzI3NzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihh
cmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1l
bnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAt
Mjc1OSw3ICsyODM3LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
cgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkBAIC0yNzY3LDcg
KzI4NDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVs
ZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc4OSw3ICsyODY2LDYg
QEAgdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxPcAogdm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVt
ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwpAQCAtMjgwNSw3
ICsyODgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogICAg
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1v
biBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBjYXNlIGl0IGlmIHdlIHByb2Zp
bGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0
YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKKyAgICBp
ZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9lbnVtZXJhdG9yTWV0
YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CiAg
ICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAgICAgICAgIG9wZXJhdGlv
bkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQoKSksIFRydXN0ZWRJbW0z
Mih+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwpAQCAtMjg0
Nyw3OCArMjkyMyw4NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3Qg
CiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29k
ZS5tX21vZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSnVt
cExpc3QgZG9uZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIgPSByZWdUMDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVFbnVt
ZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlW
YWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBC
YXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJz
OjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHNj
cmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcHJvcGVy
dHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51
bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaDIpOwor
ICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0
Y2gyLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRh
ZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CiAgICAgLy8gVGhpcyBpcyBh
bHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KLSAgICBKdW1wIGlzTm90T3duU3RydWN0dXJl
TW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hU
ZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9k
ZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVtcCBzdHJ1Y3R1cmVNaXNt
YXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7CisgICAgbG9hZDMyKEFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDIpOworICAg
IEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaDIsIEFk
ZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJl
SURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0LgotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVt
ZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2Vz
cwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVn
VDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdo
dCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BS
LCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBP
dGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBuZWczMihy
ZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFzZUdQUik7
CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIG5lZzMyKHNjcmF0
Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOwogICAgIGNv
bnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBvZmZzZXRJbkJ1dHRlcmZs
eShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVz
RWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgbG9hZDY0KEJh
c2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3Bl
cnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICBz
dHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1p
c21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKyAgICBzdG9yZThUb01l
dGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25T
dHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0
dXJlTW9kZS5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRl
eGVkTW9kZSkpOworICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNj
cmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSkpOwogICAgIC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAgICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7
Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdU
Mik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BS
LCBzY3JhdGNoMSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBkb25lQ2FzZXMubGluayh0
aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IApAQCAtMjkyNywxMCArMzAxMSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9y
X2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklU
OjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5j
dGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVu
YW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNf
cHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0
IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjkzOSw3ICszMDIyLDkgQEAgdm9pZCBK
SVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChy
ZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOwor
ICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNl
dE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCByZWdUMSk7
CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAtMzAyOCw2ICszMTEzLDEzIEBAIHZv
aWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKICAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVy
KEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBi
YXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNoR1BSKG93bmVyKSk7CisgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRo
aXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI4MTcxOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1NDMsNyArMTU0Myw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxs
TGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxp
bmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0lu
Zm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAgIHJldmVydENhbGwo
dm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5y
ZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bQkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTIsMTAgKzEwMTIs
NiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHBy
ZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRl
QXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFd
Ci0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAgICAgZ2V0KG1f
c3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBJbnQzMlRh
ZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9w
Y29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwgc3JjRHN0IGluIHQyCiAg
ICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAgICAgICBzdG9yZWkgdDIsIFBh
eWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRo
UHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNs
b3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEs
IHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBv
cmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAg
Z2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwg
dDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90SW50CiAgICAg
YnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDIKLSAgICB1cGRh
dGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9m
aWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAgICByZXR1cm4gKEludDMy
VGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEsIExvd2VzdFRhZywgLm9w
TmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1cGRhdGVBcml0aFByb2Zp
bGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVn
YXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1cm4odDEsIHQyKQogCiAu
b3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkKIAogbWFjcm8gYmluYXJ5
T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb25B
bmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9w
Y29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRh
ZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAg
ICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsg
QmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1l
dGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAgICAgICAgZ2V0KG1fbGhz
LCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bj
b2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAs
IHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAub3AxTm90SW50CiAgICAgICAg
IGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAgICBhcml0aFByb2ZpbGUoQXJp
dGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZ2V0KG1fZHN0LCB0
MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0MSwgdDAsIC5zbG93LCB0
MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwxMiBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJpYSB0MiwgTG93ZXN0VGFn
LCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5vdEludE9wMkRvdWJsZQog
ICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShB
cml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAgICAgICBjaTJk
cyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3Ay
RG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAgICBhcml0aFByb2ZpbGUo
QXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAu
b3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAgICAgICAgIGZpaTJkIHQw
LCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3Jl
KG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFu
IGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90LgogICAgICAgICBnZXQo
bV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cKLSAgICAgICAgYXJp
dGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAg
ICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKICAgICAgICAg
ZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDI4MTcx
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU2LDEwICsxMDU2LDYgQEAgc3RyaWN0RXF1YWxpdHlK
dW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNv
ZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8l
b3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1l
dGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQot
ICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFBy
b2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQKLQogICAg
ICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQxCiAg
ICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA2NSw3IEBAIG1hY3JvIHByZU9w
KG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0
MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3JlcSB0MSwg
W2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQp
CisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9m
aWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTEz
NCwxMSArMTEzMCw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwg
T3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQot
Ci0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBP
cE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1f
Yml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikKQEAgLTEx
NDYsMTIgKzExMzcsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRl
LAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQzCiAg
ICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxl
SW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJ
bnQsIHQxLCB0NCkKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAgYnRxeiB0
MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAwMDAwMDAs
IHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRh
dGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0MSwgdDQp
CiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE1NSw2IEBA
IG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGludE9wV2l0
aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQog
Ci0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxl
OjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3JocywgdDApCiAgICAg
ICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwg
dDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY0LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShv
cGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3Bl
cmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmlsZShBcml0
aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVT
dHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQ0KQogICAgICAgICBkaXNwYXRjaCgpCiAK
ICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3NCwxMCBAQCBtYWNybyBiaW5hcnlPcEN1
c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNs
b3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQotICAg
ICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmlu
YXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0
NSwgdDQpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AySW50
OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0
NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAg
ICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA2LDcgKzExOTMsNyBAQCBtYWNybyBiaW5hcnlPcEN1
c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZp
bml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0
KG1fZHN0LCB0MikKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBw
cm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQ
cm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAgICAg
ICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZx
MmQgdDEsIGZ0MQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDk4LDYgKzI0OTgsMTcgQEAgbWFjcm8gbm90U3VwcG9ydGVkKCkKICAgICBlbmQKIGVuZAog
CisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0
YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRo
UHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgVW5hcnlBcml0aFByb2ZpbGU6
Om1fYml0c1t0ZW1wXQorZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUs
IEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKwogLy8gRklYTUU6IFdlIHNo
b3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0X1dJTiBjb25kaXRpb24gaGVyZSwgc2luY2UgV0VCQVNT
RU1CTFkgc2hvdWxkIGFscmVhZHkgYmUgZmFsc2Ugb24gV2luZG93cwogLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNgogaWYgV0VCQVNTRU1CTFkgYW5kIG5v
dCBYODZfNjRfV0lOCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFi
bGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDggKzQ4LDEwIEBAIHB1YmxpYzoKICAgICBDYWNoZWFibGVJZGVudGlmaWVyKCkgPSBk
ZWZhdWx0OwogCiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZy
b21DZWxsKEpTQ2VsbCogaWRlbnRpZmllcik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJ
ZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sq
LCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlm
aWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBVbmlx
dWVkU3RyaW5nSW1wbCopOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgor
ICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIGNvbnN0IElkZW50aWZpZXImKTsKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENh
Y2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENv
ZGVCbG9ja1R5cGUqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBpbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKFVuaXF1ZWRTdHJp
bmdJbXBsKik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0
ZUZyb21SYXdCaXRzKHVpbnRwdHJfdCByYXdCaXRzKSB7IHJldHVybiBDYWNoZWFibGVJZGVudGlm
aWVyKHJhd0JpdHMpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNpb24gMjgx
NzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE0IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIGNvbnN0IElkZW50aWZpZXImIGkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlw
ZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ss
IGNvbnN0IElkZW50aWZpZXImIGkpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhjb2RlQmxvY2ssIGkuaW1wbCgpKTsKIH0KIAotaW5saW5lIENhY2hl
YWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxvY2stPmhhc0lkZW50
aWZpZXIodWlkKSk7CiAgICAgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIodWlkKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19E
RUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3Rh
dGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRh
ZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAg
VW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051
bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4MTcx
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9CiAgICAgc3RhdGljIGlubGlu
ZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJk
aWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsgfQorICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437050</attachid>
            <date>2021-09-01 12:01:10 -0700</date>
            <delta_ts>2021-09-01 12:30:52 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>377736</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IHVubGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxp
bmtlZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRp
b24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
aXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0g
ICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRo
U3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhT
dGFydCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlz
IGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQg
dG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0
aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJz
OjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAg
IHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MjQsNiArNDI0LDEzIEBAIGlubGluZSBDb2RlT3JpZ2lu
IGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBz
byB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNyArMzcw
LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2Fu
J3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJv
Y2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJv
ZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5l
c3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2Yg
YW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhl
IGxpdmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNp
ZGUgVW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBi
ZXR3ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhl
IGJ5dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5n
IGFuIFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9j
ayogdW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CkBAIC00NjYsNiAr
NDY3LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAg
ICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9G
SUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtl
ZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAg
ICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtl
ZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAg
ICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5z
dHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4LDE0ICs1NDIsMTQgQEAgYm9vbCBD
b2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRl
UHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5L
KE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAg
ICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJ
bmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9w
TXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5L
X1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC03ODksNiArODAz
LDYyIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbkNvbW1vbihWTSYKICAgICBtX293
bmVyRWRnZS5zZXQodm0sIHRoaXMsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmNyZWF0ZSh2
bSwgdGhpcykpOwogfQogCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNlbGlu
ZUNvZGUoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRDb2Rl
KGppdENvZGUuY29weVJlZigpKTsKKworICAgIGNvbnN0IGF1dG8mIGppdENvZGVNYXAgPSB0aGlz
LT5qaXRDb2RlTWFwKCk7CisgICAgLy8gT09QUzogTW92ZSB0aGlzIHRvICJsaW5raW5nIiB3aXRo
IGJhc2VsaW5lIEpJVCBjb2RlLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZF
eGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIg
PSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVt
LzM5NDMzMzE4Pi4KKyAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5k
KEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPigpOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9qaXREYXRhKTsK
KyAgICBhdXRvIGppdERhdGEgPSBtYWtlVW5pcXVlPEpJVERhdGE+KCk7CisKKyAgICBqaXREYXRh
LT5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLm1fY29uc3Rh
bnRQb29sLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqaXRDb2RlLm1fY29u
c3RhbnRQb29sLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIGVudHJ5ID0gaml0Q29kZS5t
X2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKSB7CisgICAg
ICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3Q6CisgICAgICAgICAg
ICBqaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbFtpXSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpD
YWxsTGlua0luZm86IHsKKyAgICAgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtl
ZENhbGxMaW5rSW5mbyA9ICpzdGF0aWNfY2FzdDxVbmxpbmtlZENhbGxMaW5rSW5mbyo+KGVudHJ5
LnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0g
aml0RGF0YS0+bV9jYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJ
bmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRvbid0IGhhcmRjb2Rl
IHRoZXNlIHJlZ2lzdGVycyBsaWtlIHRoaXMuCisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmlu
aXRpYWxpemVEYXRhSUModm0oKSwgKnVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdU
MCwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBv
b2xbaV0gPSBjYWxsTGlua0luZm87CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKKyAg
ICAgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8gPSAq
c3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyo+KGVudHJ5LnZhbHVlLmdldCgp
KTsKKyAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGppdERhdGEubV9z
dHViSW5mb3MtPmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUsIENvZGVPcmlnaW4odW5s
aW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICBzdHViSW5mby0+aW5p
dGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKHRoaXMsIHVubGlua2VkU3R1Yklu
Zm8pOworICAgICAgICAgICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2xbaV0gPSBzdHViSW5m
bzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkudmFsdWUuZ2V0KCkpOworICAgICAgICAg
ICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkRlY2woaW5kZXgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBKSVRDb25zdGFudFBv
b2w6OlR5cGU6OkZ1bmN0aW9uRXhwcjogeworICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS52YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBq
aXREYXRhLT5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgICAgICBtX2ppdERhdGEgPSBXVEZNb3ZlKGppdERhdGEpOworICAgIH0KK30KKwog
Q29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTMwNzks
NyArMzE0OSw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAog
I2lmIEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAg
cmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4g
SklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzI5NSwxMyAr
MzM2NSwxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAg
ICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICBy
ZXR1cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICAgICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0zMzEzLDExICszMzgzLDExIEBAIFVuYXJ5QXJpdGhQcm9m
aWxlKiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgp
KSB7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRl
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFz
PE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bf
aW5jOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+
YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVy
biBwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVm
YXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyAr
MTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUoKSBjb25z
dCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1QYXJhbWV0
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgogICAgIHZv
aWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAKICAgICB1
bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAgdW5zaWdu
ZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVja3BvaW50
cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRyZXNzT2ZO
dW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5h
dGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRp
dmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0lu
c3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFw
QnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdp
c3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5nIGJhY2sg
dGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBgdGhpc2Ag
YW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgp
KQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBv
cmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAgICByZXR1cm4g
cmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2Niw4ICsy
NTcsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJl
c3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0
aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLgogICAgIHN0cnVjdCBKSVREYXRh
IHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVT
dHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CkBA
IC0yODIsOSArMjc1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9D
b2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29sIG1faGFzQ2Fs
bGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7
CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29sOworICAgICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAgIH07CiAKKyAg
ICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZlB0cjxCYXNlbGluZUpJVENv
ZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkpCkBAIC0y
OTMsNiArMjkwLDggQEAgcHVibGljOgogICAgIH0KICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRh
U2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZKSVREYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9q
aXREYXRhKTsgfQorCiAgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmls
ZSopOwogICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKICAg
ICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKQEAgLTMyMiwxNSAr
MzIxLDEwIEBAIHB1YmxpYzoKICAgICAvLyBsb29raW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0
byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMuCiAgICAgQ2FsbExpbmtJbmZvKiBn
ZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwogICAgIAotICAg
IHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFwJiYgaml0Q29kZU1hcCkKLSAgICB7Ci0gICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgZW5zdXJlSklU
RGF0YShsb2NrZXIpLm1faml0Q29kZU1hcCA9IFdURk1vdmUoaml0Q29kZU1hcCk7Ci0gICAgfQog
ICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKQogICAgIHsKLSAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICByZXR1cm4gZW5zdXJlSklURGF0
YShsb2NrZXIpLm1faml0Q29kZU1hcDsKKyAgICAgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJ
VENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVNYXA7CiAgICAgfQogCiAgICAgdm9p
ZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+
JiYpOwpAQCAtNDcyLDYgKzQ2Niw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZB
cmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3Vt
ZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVl
UHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMp
IHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01NzIsNiArNTY3LDcgQEAgcHVibGljOgogICAg
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0u
Z2V0KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25z
dGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
cmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0
YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW5kZXgp
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigp
IGNvbnN0IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdp
c3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQo
KTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7
IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9m
RnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTYw
MSw2ICs1OTcsMTEgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEp
OwogICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CiAgICAgfQorICAgIFNpbXBsZUp1bXBUYWJsZSYgYmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUo
aW50IHRhYmxlSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklU
Q29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
KyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRj
aEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENv
ZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9CkBAIC02MTEsNiArNjEy
LDExIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKICAgICAg
ICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OwogICAgIH0KKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGlu
ZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07CisgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJl
ck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtl
ZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxl
SW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNzk3LDYgKzgwMyw3IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJSZXF1ZXN0
czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVi
dWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEZWJ1Z2dlclJl
cXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9kZWJ1Z2dlclJl
cXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9p
bnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMp
CkBAIC04MzgsNiArODQ1LDcgQEAgcHVibGljOgogICAgIG11dGFibGUgQ29uY3VycmVudEpTTG9j
ayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkOyAvLyBOb3QgYSBi
aXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMgdG8gc3RvcmUgdG8gaXQuCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsgfQogCiAjaWYg
RU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlIDogMjsgLy8g
REZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNiwxMSArOTE0LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhp
bnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8g
U29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0
aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3VubGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rp
b24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJs
eVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZv
ckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXpl
TExJbnRJbmxpbmVDYWNoZXMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24g
MjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXAoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spOwogICAgIAogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFw
QW5kQWN0aXZhdGUoQ29kZUJsb2NrKiBjb2RlQmxvY2spOworCisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlLCBtX2NvZGVCbG9jayk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHJldmlzaW9uIDI4MTcxOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlk
TW9kZU1ldGFkYXRhCiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggewog
ICAgIEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1l
dGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmlsZSk7IH0KIH07CiBzdGF0aWNfYXNzZXJ0KHNp
emVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsKIApAQCAtODgsNiAr
ODksNyBAQCB1bmlvbiBHZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUg
bW9kZTsKICAgICAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBt
dXN0IGJlIHplcm8gd2hlbiB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRC
eUlkTW9kZU1ldGFkYXRhLCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0
IGRlZmF1bHRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAg
ICAgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9kZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5l
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYgKzM4NSw4IEBAIGJvb2wgSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcygKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGlu
ZTsKIH0KIAorLy8gT09QUzogTWFrZSB0aGlzIHN0dWZmIHdvcmsgd2l0aCBkYXRhIGljcyB0byBu
b3QgYXNzdW1lIGlubGluZSBhY2Nlc3MuCisKIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHVi
QXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4gdGFyZ2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFk
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJh
dGlvbk1vZGVNZXRhZGF0YS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDYgKzQwLDcgQEAgT1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBUwog
CiBzdHJ1Y3QgSXRlcmF0aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90IHNlZW5Nb2RlcyB7
IDAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1vZGVzKTsgfSAKICAg
ICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9PSBzaXplb2YoSXRl
cmF0aW9uTW9kZSkpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODUsNiArMjg1LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVz
ZXQoY29uc3QgQ29uYwogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5
S2luZDo6QnlJZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlW
YWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQ
dXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CkBAIC00MzAsNiArNDMxLDE2MyBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBu
ZXdDYWNoZVR5cGU7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9t
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBlID0g
dW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHViSW5m
by5zdGFydDsgLy8gT09QUzogZG8gd2UgbmVlZCBhIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBk
b25lTG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93UGF0
aFN0YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsK
KyAgICBjYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVj
b2RlSW5kZXgpOworICAgIGNvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8u
Ynl0ZWNvZGVJbmRleCk7CisKKyAgICAvLyBPT1BTOiBoYW5kbGUgaXRlcmF0b3JfbmV4dCB2YWx1
ZSBpbiB1c2VkIHJlZ2lzdGVyIHNldC4KKyAgICB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpEZWxCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25EZWxldGVCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0QnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFu
Y2VvZjoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGlt
aXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpU
cnlHZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlk
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERp
cmVjdDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRo
VGhpczoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlz
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlTmFt
ZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVCcmFuZDogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVC
cmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFBy
aXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0
ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRC
eUlkOgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAg
ICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJ
bmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkp
CisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVs
ZERlZmluZToKKyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRE
ZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIG1f
c2xvd09wZXJhdGlvbiBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1Yklu
Zm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAg
ICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2Vk
U3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFt
ZToKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gcHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmlu
ZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJh
dGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7
CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
ICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0
OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsQnlJZDoKKyAg
ICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZh
dGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZW9mOgorICAgICAgICBoYXNDb25z
dGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgcHJvdG90eXBlSXNLbm93bk9iamVjdCA9
IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxz
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAg
ICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRp
ZmllciA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJ
ZFdpdGhUaGlzOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0
YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAg
ICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hl
Y2tQcml2YXRlQnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lv
biAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBlbnVtIGNsYXNzIEFjY2Vz
c1R5cGUgOiBpbnQ4X3QgewogICAgIEdldEJ5VmFsLAogICAgIFB1dEJ5SWQsCiAgICAgUHV0QnlW
YWwsCisgICAgUHV0UHJpdmF0ZU5hbWUsCiAgICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAgICAg
SGFzUHJpdmF0ZU5hbWUsCkBAIC03OCw2ICs3OSw4IEBAIGVudW0gY2xhc3MgQ2FjaGVUeXBlIDog
aW50OF90IHsKICAgICBTdHJpbmdMZW5ndGgKIH07CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvOworCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoU3RydWN0dXJlU3R1YkluZm8pOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwpAQCAtOTgsNiArMTAxLDggQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2b2lk
IGFib3V0VG9EaWUoKTsKIAorICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mKTsKKwogICAg
IERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFz
IHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0
cyBpdHNlbGYsCkBAIC00NDcsNiArNDUyLDE4IEBAIGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2Vu
ZXJpY0dldEJ5SWRGdW4KICAgICB9CiB9CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvIHsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOwor
ICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZDsKKyAgICBFQ01BTW9k
ZSBlY21hTW9kZTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgLy8gT09Q
UzogRG8gd2UgbmVlZCBzdGFydCBmb3IgZGF0YSBJQ3M/CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0OyAvLyBUaGlzIGlzIGVpdGhlciB0aGUgc3RhcnQg
b2YgdGhlIGlubGluZSBJQyBmb3IgKmJ5SWQgY2FjaGVzLiBvciB0aGUgbG9jYXRpb24gb2YgcGF0
Y2hhYmxlIGp1bXAgZm9yICdpbnN0YW5jZW9mJyBjYWNoZXMuCisgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzbG93UGF0aFN0YXJ0TG9jYXRpb247Cit9OworCiAjZWxz
ZQogCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAyODE3MTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMTc1LDYgKzE3NSw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZp
eGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyBy
ZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtu
b3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAg
ICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgp
XS5nZXQoKTsgfQogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKQEAgLTIwNyw2ICsyMDgsMTUgQEAgcHVi
bGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1vZGUpOyB9CiAKICAgICBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3Q7CisgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uQXQoQnl0ZWNvZGVJbmRleCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5kZXgpLnB0cigpOyB9CisgICAgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQorICAgIHsKKyAgICAg
ICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5hdCgwKS5w
dHIoKTsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zRW5kID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbnN0
cnVjdGlvbnNCZWdpbikgKyBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChpbnN0cnVjdGlvbiA+PSBpbnN0cnVjdGlvbnNCZWdpbiAmJiBpbnN0cnVjdGlvbiA8
IGluc3RydWN0aW9uc0VuZCk7CisgICAgICAgIHJldHVybiBpbnN0cnVjdGlvbiAtIGluc3RydWN0
aW9uc0JlZ2luOworICAgIH0KKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbnNTaXplKCkgY29uc3Qg
eyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1DYWxs
ZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogICAgIHVuc2ln
bmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KQEAgLTMzNCw2ICszNDQs
MTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tZXRhZGF0YS0+c2l6ZUluQnl0ZXMoKTsK
ICAgICB9CiAKKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0
dXJuKCkKKyAgICB7CisgICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFs
d2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCisgICAgICAgIHJldHVybiAhaXNCdWls
dGluRnVuY3Rpb24oKTsKKyAgICB9CiAKIHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9j
ayhWTSYsIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYsIE9wdGlv
blNldDxDb2RlR2VuZXJhdGlvbk1vZGU+KTsKQEAgLTQxMCw2ICs0MjUsOSBAQCBwcml2YXRlOgog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVjdGlvbnM7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzczsK
IAorICAgIC8vIE9PUFM6IGJpbmQgYSBiZXR0ZXIgcGxhY2UgdG8gc3RvcmUgdGhpcyBzdHVmZj8K
KyAgICBWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPiBtX2JpbmFyeUFyaXRoUHJvZmlsZXM7Cisg
ICAgVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKIAogI2lm
IEVOQUJMRShERkdfSklUKQogICAgIERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKQEAg
LTQ1NSw2ICs0NzMsMjggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGlu
ZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZM
aW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCisgICAgeworICAgICAgICB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAg
cmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQob2Zmc2V0KTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0
ID0gbV9iaW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV9iaW5hcnlBcml0aFBy
b2ZpbGVzLmFwcGVuZChCaW5hcnlBcml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkVW5hcnlBcml0aFByb2ZpbGUoKQorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOwor
ICAgICAgICBtX3VuYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxlKCkp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQ
cm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1
bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQogCiBwcml2YXRl
OgogICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0
cmVhbTo6T2Zmc2V0LCBpbnQ+OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgxNzE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOSArMTAxLDE4IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBzX29mZnNldDE2VGFibGVTaXplOwogICAgIH0KIAorCiAgICAgdXNpbmcgT2Zmc2V0MzIg
PSB1aW50MzJfdDsKICAgICB1c2luZyBPZmZzZXQxNiA9IHVpbnQxNl90OwogCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIE9wY29kZT4KKyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGNvbnN0IE9wY29kZSYgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6
ZWQpOworICAgICAgICB1aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZz
ZXRUYWJsZTMyKClbT3Bjb2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpv
cGNvZGVJRF07CisgICAgICAgIHJldHVybiBiYXNlVHlwZU9mZnNldCArIHNpemVvZihPcGNvZGU6
Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7CisgICAgfQorCiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBzX29mZnNldFRhYmxlRW50cmllcyA9IE5VTUJFUl9PRl9CWVRFQ09E
RV9XSVRIX01FVEFEQVRBICsgMTsgLy8gb25lIGV4dHJhIGVudHJ5IGZvciB0aGUgImVuZCIgb2Zm
c2V0OwogCiAgICAgLy8gTm90IHRvIGJyZWFrIGFsaWdubWVudCBvZiAzMmJpdCBvZmZzZXQgdGFi
bGUsIHdlIHJvdW5kIHVwIHNpemUgd2l0aCBzaXplb2YoT2Zmc2V0MzIpLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgx
NzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBAIHRlbXBsYXRlPHVuc2lnbmVkIG51bWJlck9m
QnVja2V0c0FyZ3VtZW4KIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIG51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0c0FyZ3VtZW50
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHMg
PSAxOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYnVja2V0SW5kZXhNYXNrID0gbnVt
YmVyT2ZCdWNrZXRzIC0gMTsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHRvdGFsTnVt
YmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRzICsgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHM7
CiAgICAgCiAgICAgVmFsdWVQcm9maWxlQmFzZSgpCkBAIC0xMzQsNyArMTMzLDcgQEAgc3RydWN0
IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlv
bjsKICAgICB9Ci0gICAgCisKICAgICBFbmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1i
ZXJPZkJ1Y2tldHNdOwogCiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05v
bmUgfTsKQEAgLTE1Niw2ICsxNTUsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJl
ck9mQnVja2V0CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0
aExvZ051bWJlck9mQnVja2V0czwwPiB7CiAgICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2Zp
bGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkZpcnN0QnVja2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmls
ZSwgbV9idWNrZXRzWzBdKTsgfQogfTsKIAogc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk4LDcgKzE1OTgsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFVuYXJ5CiAgICAgICAgIGVtaXRVbmFy
eU9wPE9wTm90Pihkc3QsIHNyYyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfbmVnYXRl
OgotICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CisgICAgICAg
IE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0eXBlLCBtX2NvZGVCbG9jay0+YWRkVW5h
cnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfYml0bm90Ogog
ICAgICAgICBlbWl0VW5hcnlPcDxPcEJpdG5vdD4oZHN0LCBzcmMpOwpAQCAtMTY5NiwxMyArMTY5
NiwxMyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFR5cGVPCiAKIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5jKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsK
LSAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNEc3QpOworICAgIE9wSW5jOjplbWl0KHRoaXMsIHNy
Y0RzdCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBz
cmNEc3Q7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVjKFJlZ2lz
dGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QpOworICAgIE9w
RGVjOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxl
KCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjgyLDcgKzY4Miw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgUmVnaXN0ZXJJRCo+CiAgICAgICAgIGVtaXRCaW5hcnlPcChSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIsIE9wZXJhbmRU
eXBlcyB0eXBlcykKICAgICAgICAgewotICAgICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywg
ZHN0LCBzcmMxLCBzcmMyLCB0eXBlcyk7CisgICAgICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlz
LCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzLCBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9m
aWxlKCkpOwogICAgICAgICAgICAgcmV0dXJuIGRzdDsKICAgICAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4OSw3ICs4ODksNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAKICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dD
YXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BS
LCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAg
ICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQ
YXlsb2FkR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwp
IHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRh
KTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEp
LnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04OTYsNyArODk2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9k
ZSogbm9kZQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAg
IGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKICAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAg
ICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2Fs
bCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcgKzM5ODUsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAgUmVnaXN0ZXJT
ZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAgIEpJVFB1dEJ5
VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRG
R0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1c2VkUmVn
aXN0ZXJzLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2Rl
T3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVzZWRSZWdpc3Rl
cnMsCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3M6OnBheWxvYWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlkR1BSUmVnLCBz
dHViSW5mb0dQUik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVl
OwogCkBAIC0xNDc0Nyw3ICsxNDc0Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5j
aGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2pp
dC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBz
Y29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCksIGNhbGxTaXRlSW5kZXgpOworICAgIG1faml0Lmxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3Bl
UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxs
U2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjgxNzE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MzE3LDcgKzQzMTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgR1BSUmVn
IHN0dWJJbmZvR1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBwYXJh
bXMuZ3BTY3JhdGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAgYXV0byBnZW5l
cmF0b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAgICAg
ICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwg
Y2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgaml0
LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNp
dGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgcGFy
YW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywg
c3R1YkluZm9HUFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNTeW1ib2wgPSB0cnVlOwpAQCAtMTAzNTUsNyArMTAzNTUsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygp
LT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwog
Ci0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGgg
PSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAs
IFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxl
RGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgICAg
IH0pOwpAQCAtMTA2OTgsNyArMTA2OTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAg
ICAgICAgICAgICAgICAgfSk7CkBAIC0xMDk3OSw3ICsxMDk3OSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWls
Q2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpy
ZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxs
U2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpAQCAt
NDIsMTcgKzQyLDIyIEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkKICAgICAg
ICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwg
ZmllbGRzKQorICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcywgZ2VuZXJh
dGVPZmZzZXRPZikKICAgICAgICAgICAgIGZpZWxkcy5tYXAgZG8gfGZpZWxkLCB0eXBlfAogICAg
ICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAotICAgICAgICAgICAgICAgICAgICAi
I3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSl9
XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7
Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUsIGZhbHNlKX1cbiN7cHJlZml4fX07
IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7
dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307IgorICAgICAgICAgICAgICAgICAgICBmaWVsZE5h
bWUgPSBmaWVsZC50b19zCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICIje3ByZWZpeH0j
e3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgorICAgICAgICAgICAgICAgICAgICBpZiBnZW5l
cmF0ZU9mZnNldE9mCisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgIlxu
IiArICJzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7Zmll
bGROYW1lWzEuLl19KCkgeyByZXR1cm4gT0ZGU0VUT0YoTWV0YWRhdGEsIG1fI3tmaWVsZE5hbWV9
KTsgfSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dAogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAg
ICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmll
bGRzKQorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAgICAgICIsIEBmaWVsZHMs
IHRydWUpCiAKICAgICAgICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAm
JiAobm90IEBpbml0aWFsaXplcnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OTgsOCArNjk4LDEzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2
ZXMKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2Fs
bFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworfQorCit2b2lkIEFzc2VtYmx5
SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0s
IENhbGxMaW5rSW5mbyogaW5mbykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQ
UkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtU
YXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8gY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRpb25Q
dHJUYWc+KGNhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzE4LDYgKzE3MTgsNyBAQCBw
dWJsaWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhv
dXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsKICAgICAKICAgICB2b2lk
IG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFj
a0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklU
UGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGlu
ZUpJVFBsYW4uY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAg
c2l6ZV90IEJhc2VsaW5lSklUUGxhbjo6Y29kZVNpemUoKSBjb25zdAogCiBDb21waWxhdGlvblJl
c3VsdCBCYXNlbGluZUpJVFBsYW46OmZpbmFsaXplKCkKIHsKLSAgICBDb21waWxhdGlvblJlc3Vs
dCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgIENvbXBpbGF0aW9u
UmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKG1fY29kZUJsb2NrKTsK
ICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CiAgICAg
ICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAo
ImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDYg
QEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sbwogICAgIHN0b3JlUHRy
KHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNr
ZW46OlBhY2tldCwgc2NvcGUpKSk7CiB9CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVn
cywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4KQotewotICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgZnJhbWUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQ
YWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Ci0gICAgc3RvcmVWYWx1ZSh0aGlz
UmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKLSAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkp
OwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykp
KTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBj
YWxsU2l0ZUluZGV4KSkpOwotfQotCiB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hp
Y2tlblBhY2tldChWTSYgdm0sIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5v
bkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAgIFNoYWRvd0NoaWNrZW4qIHNoYWRvd0No
aWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4NDAsMTgg
QEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9sYXRpbGUg
cmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRvcCBvZgog
ICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQgbG9nU2hh
ZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3Jh
dGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0
KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUs
IENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENv
ZGVCbG9ja1R5cGU+CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcg
c2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxv
Y2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQorICAgIHsKKyAg
ICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93
UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsK
KyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRh
aWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgICAgIHN0b3JlVmFsdWUodGhpc1JlZ3Ms
IEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFj
a2V0LCB0aGlzVmFsdWUpKSk7CisgICAgICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRv
d1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7
CisgICAgICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVD
VF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRv
d1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJ
bmRleCkpKTsKKyAgICB9CisKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEgcG9pbnRlciB0byB0aGUg
UGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQuCiAgICAgdm9pZCBlbnN1
cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNj
cmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkocmV2aXNpb24g
MjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDEyIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiB2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CisgICAgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvZGVC
bG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxl
RGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0
KiByZWdpc3RlclNhdmVMb2NhdGlvbnMpCit7CiAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJl
Z2lzdGVycyB7IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB9OwotICAgIGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMgPSBjb2RlQmxv
Y2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5zaXplKCk7ICsraSkgewogICAgICAgICBSZWdpc3RlckF0
T2Zmc2V0IGVudHJ5IHsgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChpKSB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkocmV2
aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
ZmxlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICBH
UFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZhbGlkR1BSUmVnIH07CiAKICAgICB2b2lkIHNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldHVwQ2FsbGVl
U2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCopOwogI2VuZGlmCiAgICAg
VmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJ
bnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51
bGxwdHIpCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJl
bHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAg
ICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6
SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFBy
b2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAg
IG1fcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9j
ayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAg
LTkwLDggKzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNr
aXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9u
czo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lw
T3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6
OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZl
c0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRv
cEVudHJ5RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMTggQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlX
cml0ZShXYXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFi
c29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRl
clRvU2V0KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50
ZXJUb1NldCkKIHsKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHBv
aW50ZXJUb1NldCwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHJl
c29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNv
bHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJSZWFkT25seVdhdGNo
cG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0
KHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNU
X09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2ludCkpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3Jh
dGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJ
bnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJP
ZmZzZXQoKQpAQCAtMTI5LDcgKzEzNSw3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJP
ZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAg
IEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CkBAIC0xODEsMjEgKzE4Nyw0
MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjCiAgICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Q
cm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJl
RGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBicmFuY2hUZXN0UHRy
KFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFy
ZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvblJhcmVEYXRh
OjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgcmVzdWx0
KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwg
RnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpKSwgcmVz
dWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCByZXN1bHQpOworCisgICAg
bG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6b2Zmc2V0
T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJl
c3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogewogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAg
ICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgICAgIGRh
dGFMb2coIkNvbXBpbGluZyAiLCAqbV9wcm9maWxlZENvZGVCbG9jaywgIlxuIik7CiAgICAgCiAg
ICAgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICBqaXRBc3NlcnRBcmd1bWVudENvdW50U2Fu
ZSgpOwogICAgIAotICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKTsKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogCiAgICAgbV9j
YWxsTGlua0luZm9JbmRleCA9IDA7CiAKLSAgICBWTSYgdm0gPSBtX2NvZGVCbG9jay0+dm0oKTsK
KyAgICBWTSYgdm0gPSBtX3VubGlua2VkQ29kZUJsb2NrLT52bSgpOwogICAgIEJ5dGVjb2RlSW5k
ZXggc3RhcnRCeXRlY29kZUluZGV4KDApOworCisgICAgLy8gT09QUzogTWF5YmUgb25seSBkbyB0
aGlzIGlmIHdlIGRpc2FibGUgc2hhcmluZyBzb21laG93PworICAgIC8qCiAgICAgaWYgKG1fbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1D
b2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVC
bG9jaz4odm0pKSkgewogICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlv
biBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KICAg
ICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBvdGhlcndpc2UuIFdo
ZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8KQEAgLTIzNiw2ICsyNjIsNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CisgICAgKi8KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0g
MDsKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4LDkgKzMwNSw5
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBw
cm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgewotICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bjb2Rl
SURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7Cisg
ICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4o
KS0+Y29kZUJsb2NrKCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVj
b2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50
ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY3R4LmdwcjxDb2RlQmxvY2sqPihyZWdUMCkpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0KIApAQCAtNTI3LDcgKzU1NCw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0g
bV9ieXRlY29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4
KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCku
cHRyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAg
ICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9yICIs
IG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CkBA
IC01NDUsOCArNTcyLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAog
ICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigp
KSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJs
b2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsK
KyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUq
PigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0
ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBS
YXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgfQpAQCAtNjc0LDE5ICs3MDEsMjYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
U2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRh
dGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgp
KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRh
OjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQorCiB2b2lk
IEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9j
ay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgLy8gT09QUzogTWF5YmUgdGhpcyBzaG91bGQgYmUg
ZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJsb2NrPworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxl
dmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dpdGNo
IChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAgICBtX2NhbkJl
T3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBm
YWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21waWxl
QW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgbV9j
YW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC02OTQsMzUgKzcy
OCwzOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgp
KSB7CisgICAgLy8gT09QUzogaGFuZGxlIHRoaXMgZWxzZXdoZXJlPworICAgIHN3aXRjaCAobV91
bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSkgewogICAgIGNhc2UgR2xvYmFsQ29kZToKICAg
ICBjYXNlIE1vZHVsZUNvZGU6CiAgICAgY2FzZSBFdmFsQ29kZToKLSAgICAgICAgbV9jb2RlQmxv
Y2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIG1fcHJvZmlsZWRD
b2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRnVuY3Rpb25Db2RlOgogICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVh
ZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNh
bGwuCiAgICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRpb24uCi0gICAgICAg
IG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUobGV2ZWwp
ICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbihtX2NvZGVCbG9jayk7CisgICAgICAgIG1fcHJv
ZmlsZWRDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShsZXZl
bCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVu
c3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1w
bGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxl
cygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEo
bG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1w
VGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
cygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRj
aEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zd2l0
Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYg
KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3Rv
cjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
dHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYm
IE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1f
ZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsK
KyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJv
ZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIE9PUFM6IGJ1aWxkIGEgZGlzYXNzZW1ibGVyIG9mZiB1
bmxpbmtlZCBjb2RlIGJsb2NrCisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxK
SVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KICAgICBpZiAoVU5M
SUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBPT1BTOiBi
dWlsZCBwcm9maWxlciBkaXNhc3NlbWJsZXIgb2ZmIHVubGlua2VkIGNvZGUgYmxvY2sKICAgICAg
ICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpD
b21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9jayksCisgICAgICAgICAgICAgICAgbV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVC
bG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1f
Y29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRC
eXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0
ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CkBAIC03NDIsMTEgKzc3
OSwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAg
IG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAg
ICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJl
Z2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVU
b3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9m
ZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzU3LDE2
ICs3OTUsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAg
IG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZl
Q2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygp
OworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7
CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7
CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVt
aXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewor
ICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV91bmxpbmtlZENvZGVCbG9j
ay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4
ZWRWZWN0b3I6Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIpOworCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX3VubGlua2VkQ29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlz
IGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxp
bmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBi
dXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAg
ICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVu
dCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3Rv
cigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdU
aGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArODE5LDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5k
TGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxs
RnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGxv
YWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCi0g
ICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQ
cm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAg
ICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9m
KFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJU
KCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9B
U1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwog
CiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQogICAgICAgICBtX3ZtLT5qaXRTaXplU3Rh
dGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgKnRoaXMpOwpAQCAtNzk5LDI0
ICs4NDEsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAg
IG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNf
Y2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhj
ZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7Cisg
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
LCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0
aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCByZWdUMCk7CiAKICAgICAvLyBJ
ZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2UgbmV2ZXIgcmVxdWlyZSBhcml0eSBm
aXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fY29kZUJsb2NrLT5tX251bVBh
cmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgeworICAgIGJvb2wgcmVxdWlyZXNBcml0eUZp
eHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpICE9IDE7CisgICAgaWYg
KG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVp
cmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hlY2sgPSBsYWJlbCgpOwotICAgICAg
ICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgICAgICBlbWl0
UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShyZWdUMCk7Cisg
ICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkpOwogCiAgICAgICAgIGxvYWQzMihwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEp
OwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9j
b2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKKyAg
ICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsK
IAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogCiAgICAgICAg
IGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9y
KCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hl
Y2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIw
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9u
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVj
dEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgYXJndW1lbnRHUFIwKTsKICAg
ICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BS
KS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04MzksNyArODg0LDcgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+
c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFw
cGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9y
aWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVy
PihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6
OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9w
dHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fdW5saW5rZWRDb2RlLCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CiAgICAgbGluaygpOwogfQog
CkBAIC04NTgsOCArOTAzLDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICBzd2l0Y2ggKHJl
Y29yZC50eXBlKSB7CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGU6CiAgICAg
ICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXI6IHsKLSAgICAgICAgICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dp
dGNoSnVtcFRhYmxlW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlE
ZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUo
KTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJs
ZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEsOCArOTE2LDggQEAgdm9pZCBKSVQ6Omxpbmso
KQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAg
ICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0g
ICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0
cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlu
a2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+
dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBT
dHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQu
ZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlu
a2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMoKSkgewogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNoT2Zmc2V0OwpAQCAtOTA2LDYgKzk1MSw3IEBA
IHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZy
b20sIHJlY29yZC5jYWxsZWUpOwogICAgIH0KIAorICAgIC8vIE9PUFM6IGRvIHRoaXMgZm9yIHVu
bGlua2VkCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIp
OwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7
CkBAIC05MTksMTkgKzk2NSwxNCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOwogCiAgICAgZm9y
IChhdXRvJiBjb21waWxhdGlvbkluZm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKLSAgICAg
ICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87Ci0g
ICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQYXRoU3RhcnQp
LAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihj
b21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJ
bmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAg
ICAgaW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pOwogICAgIH0KIAotICAgIHsKLSAg
ICAgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNp
emUoKTsgKytieXRlY29kZU9mZnNldCkgewotICAgICAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVj
b2RlT2Zmc2V0XS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFw
cGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKLSAgICAgICAgfQot
ICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChqaXRDb2RlTWFwQnVpbGRlci5maW5h
bGl6ZSgpKTsKKyAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKKyAgICBm
b3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVs
cy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKKyAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVj
b2RlT2Zmc2V0XS5pc1NldCgpKQorICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5k
KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpT
RW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwogICAgIH0KIAogICAgIGlm
IChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkpIHsKQEAgLTk0MCwyNiArOTgx
LDM3IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkobV9jb21w
aWxhdGlvbikpIHsKKyAgICAgICAgLy8gT09QUwogICAgICAgICBpZiAoT3B0aW9uczo6ZGlzYXNz
ZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpCiAgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+
cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9uLmdldCgpLCBwYXRjaEJ1ZmZlcik7Ci0gICAg
ICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9jb2RlQmxv
Y2ssICptX2NvbXBpbGF0aW9uKTsKKyAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
LT5hZGRDb21waWxhdGlvbihtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CiAg
ICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGlu
ZygpKQogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9y
aWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIHBhdGNoQnVmZmVy
KTsKICAgICAKKyAgICAvLyBPT1BTOgogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0
ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0g
ICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0
aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAg
ICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRo
SklUVHlwZShtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEo
KSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhB
cml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5
Q2hlY2spOwotICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1
bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29k
ZSA9IGFkb3B0UmVmKCpuZXcgQmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2sp
KTsKKworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gV1RGTW92ZShtX3VubGlua2Vk
Q2FsbHMpOworICAgIG1faml0Q29kZS0+bV9ldmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9l
dmFsQ2FsbExpbmtJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0g
V1RGTW92ZShtX3VubGlua2VkU3R1YkluZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVt
cFRhYmxlcyA9IFdURk1vdmUobV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
KTsKKyAgICBtX2ppdENvZGUtPm1faml0Q29kZU1hcCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFs
aXplKCk7CisgICAgbV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNzKTsKKyAgICBtX2pp
dENvZGUtPm1fY29uc3RhbnRQb29sID0gV1RGTW92ZShtX2NvbnN0YW50UG9vbCk7CiAKICAgICBp
ZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVk
IGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRh
YmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1v
cnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CisgICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJh
dGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV91bmxpbmtlZENvZGVCbG9jaywgcmVz
dWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhl
Y3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKIH0KIAotQ29tcGlsYXRpb25S
ZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZCgpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6
OmZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogCkBAIC05NjgsMjUgKzEwMjAsMjEg
QEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5r
QnVmZmVyLT5ydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MoKTsKIAotICAgIHsKLSAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAg
ICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KGxvY2tlciwgQ29kZUJsb2NrOjpTaHJpbmtNb2Rl
OjpMYXRlU2hyaW5rKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29k
ZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgewotICAgICAgICBIYW5k
bGVySW5mbyYgaGFuZGxlciA9IG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOwotICAg
ICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KLSAgICAgICAgaGFuZGxl
ci5uYXRpdmVDb2RlID0gbV9jb2RlQmxvY2stPmppdENvZGVNYXAoKS5maW5kKEJ5dGVjb2RlSW5k
ZXgoaGFuZGxlci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOwot
ICAgIH0KKyAgICAvLyBPT1BTOiBEb24ndCB0aGluayB0aGlzIGlzIGRvaW5nIGFueXRoaW5nIGFu
eW1vcmUuCisgICAgLy97CisgICAgLy8gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2Nv
ZGVCbG9jay0+bV9sb2NrKTsKKyAgICAvLyAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9j
a2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOworICAgIC8vfQogCisgICAg
Ly8gT09QUzogc2hvdWxkIGxpdmUgb24gQmFzZWxpbmVKSVRDb2RlLgogICAgIGlmIChtX3BjVG9D
b2RlT3JpZ2luTWFwKQogICAgICAgICBtX2NvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAo
V1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKSk7CiAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5
dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nh
c3Q8ZG91YmxlPihtX2ppdENvZGUtPnNpemUoKSkgLwotICAgICAgICBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8ZG91YmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKIAot
ICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKG1faml0Q29kZS5y
ZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9
CkBAIC05OTgsMTEgKzEwNDYsMTEgQEAgc2l6ZV90IEpJVDo6Y29kZVNpemUoKSBjb25zdAogICAg
IHJldHVybiBtX2xpbmtCdWZmZXItPnNpemUoKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklU
Ojpwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitDb21waWxhdGlv
blJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZv
cmVDb21waWxlKCk7CiAgICAgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhlZmZvcnQp
OwotICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgIHJldHVybiBmaW5hbGl6
ZU9uTWFpblRocmVhZChjb2RlQmxvY2spOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVF
eGNlcHRpb25IYW5kbGVycygpCkBAIC0xMDQyLDE0ICsxMDkwLDE0IEBAIHZvaWQgSklUOjpkb01h
aW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUMKICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9n
KCktPnByb2Nlc3NMb2dFbnRyaWVzKCptX3ZtLCAiUHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRp
b24uIl9zKTsKIH0KIAotdW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxp
bmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
b2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSkpOwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxS
ZWdpc3RlckNvdW50Rm9yRnJhbWVQb2ludGVyT2Zmc2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCkgKyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAot
aW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoraW50
IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7CiAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3Vu
dEZvcihjb2RlQmxvY2spIC0gMSkub2Zmc2V0KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDQwIEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
CisgICAgY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVzaW5n
IENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICAgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhf
dCB7CisgICAgICAgICAgICBHbG9iYWxPYmplY3QsCisgICAgICAgICAgICBDYWxsTGlua0luZm8s
CisgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAgICAgIEZ1bmN0aW9uRGVj
bCwKKyAgICAgICAgICAgIEZ1bmN0aW9uRXhwciwKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1
Y3QgVmFsdWUgeworICAgICAgICAgICAgVHlwZSB0eXBlOworICAgICAgICAgICAgUGFja2VkUHRy
PHZvaWQqPiBwYXlsb2FkOworICAgICAgICB9OworCisgICAgICAgIEpJVENvbnN0YW50UG9vbChK
SVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworICAgICAgICBKSVRDb25zdGFudFBvb2wmIG9w
ZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworCisgICAgICAgIENvbnN0YW50
IGFkZChUeXBlIHR5cGUsIFBhY2tlZFB0cjx2b2lkKj4gcGF5bG9hZCA9IG51bGxwdHIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsK
KyAgICAgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50cy5zaXplKCk7IH0KKyAgICAgICAgVmFs
dWUgYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW2ldOyB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICBWZWN0b3I8VmFsdWU+IG1fY29uc3RhbnRzOworICAgIH07CisKICAg
ICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBBcnJheUFsbG9jYXRpb25Q
cm9maWxlOwpAQCAtMTQ5LDkgKzE4Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAg
ICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxv
Y2F0aW9uOwotICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5s
aW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OwogICAgIH07CiAKICAgICB2
b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKQEAgLTE3OCwxOCArMjEy
LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRl
cmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZp
bmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwotICAgICAgICBDb21waWxhdGlvblJlc3Vs
dCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5h
bGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkg
Y29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBp
bGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxl
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9y
dCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZz
ZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBj
b2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9y
dCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNv
dW50Rm9yKENvZGVCbG9jayopOwotICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNl
dEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJD
b3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOworICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9p
bnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMo
KTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21waWxl
VGltZSgpOwpAQCAtMTk5LDcgKzIzMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpOwogICAgICAgICB2b2lkIGxpbmsoKTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1
bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQpOworICAgICAgICBDb21waWxh
dGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqLCBKSVRDb21waWxhdGlvbkVmZm9y
dCk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBh
biBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQpAQCAtMjIzLDYgKzI1NywzMCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRl
Y29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmU4VG9N
ZXRhZGF0YShWYWx1ZVR5cGUsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlMzJU
b01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbWF0ZXJpYWxp
emVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BS
UmVnKTsKKworICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4
LCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKKyAgICAg
ICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOwor
CisgICAgICAgIHZvaWQgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyBy
ZXN1bHQgPSByZWdUMCk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBU
b0hhbmRsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVu
ZChqdW1wVG9IYW5kbGVyKTsKQEAgLTI1OCwxNiArMzE2LDE2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9w
X2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAg
ICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9p
ZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAg
LCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlE
ID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFy
Z3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8
fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAg
ICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAg
ICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgotICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxM
aW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21w
aWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNh
bGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9w
Jik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yOTEsMTAgKzM0OSwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZh
bHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZv
cgogICAgICAgICAvLyBzY3JhdGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwot
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdz
KTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwg
R1BSUmVnKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9m
aWxlJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4g
dm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBAIC0zMDcsNiArMzY1LDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJl
Z2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQg
Y2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3Rl
cklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01OTIsNyArNjU0LDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwpAQCAtNjI2LDE0ICs2ODcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHZvaWQgZW1pdEhh
c1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUpOwotICAgICAgICB2b2lkIGVt
aXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKKyAgICAg
ICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21t
b24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7Ci0g
ICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpOwotICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlKTsK
KyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNv
bHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xv
c3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKICAgICAgICAgdm9pZCBlbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoq
IHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02NDUsNyArNzA2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBl
bWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXROb3RpZnlX
cml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVX
YXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChK
U1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCopOwpAQCAtNjU0LDYgKzcxNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVh
bFJlZ2lzdGVyKTsKIAorICAgICAgICBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7
CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAg
ICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAg
ICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY5NSwy
NiArNzU3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZl
VHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8
IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJF
X0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8j
I3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VU
X0ZST01fU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNv
bnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRo
dW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIC8vIE1vZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNp
ZW50IHRvIGVtaXQgaW5saW5lIHRoYW4gdXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNv
bHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9y
ZXNvbHZlX3Njb3BlLgotICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2
ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQot
I2RlZmluZSBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0g
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jl
c29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9F
QUNIX1JFU09MVkVfVFlQRShERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVm
IERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNv
bHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5r
KHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0
ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNo
YXIqIHRodW5rTmFtZSk7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2Vu
ZXJhdG9yKFZNJik7CkBAIC03NTksMTAgKzgwMywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09u
RXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0KTsKICAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdChBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
TWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAg
ICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRo
UHJvZmlsZShNZXRhZGF0YSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJv
ZmlsZShjb25zdCBCeXRlY29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4s
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRl
Y29kZT4KKyAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRp
b25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0
aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxs
PgpAQCAtODIwLDIwICs4NjQsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFy
Z2V0Lm9mZnNldCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBl
bmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9w
ZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBl
IG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVy
YXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdz
KQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihh
cmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7
CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAg
ICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUg
TWV0YWRhdGEsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
ZXJhdGlvblR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAg
ICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1
bHQsIHZvaWQ+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0
YWRhdGEsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFy
Z3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFy
Z3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxs
PE9wZXJhdGlvblR5cGU+KHRhcmdldCwgYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRh
ZGF0YSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0
KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOCwyNSAr
OTYyLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAg
IGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAg
ICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1p
emVkT3JJbmxpbmVkOyB9CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0
dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9w
dGltaXplZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRP
cklubGluZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2
YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAg
ICAvLyBpbiB3aGljaCBjYXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wg
c2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAg
ICB2b2lkIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7
CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0
YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElm
IHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlv
dSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFu
ZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdp
bGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0
aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0g
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFBy
b2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAogICAgICAgICBJbnRlcnByZXRl
ciogbV9pbnRlcnByZXRlcjsKIApAQCAtOTYzLDkgKzEwMDAsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0
b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCi0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQs
IHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwotICAgICAgICBIYXNoTWFwPHVpbnQ2NF90
LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQcm9maWxlczsKLQogICAgICAgICBK
dW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25D
aGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQpAQCAtOTk5LDExICsxMDMzLDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoTWFw
PGNvbnN0IEluc3RydWN0aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4+IG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAogICAgICAgICBib29sIG1fY2Fu
QmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAg
ICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXgg
bV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgICAgIFJlZlB0cjxEaXJlY3RKSVRD
b2RlPiBtX2ppdENvZGU7CisgICAgICAgIE1hdGhJQ0hvbGRlciBtX21hdGhJQ3M7CisgICAgICAg
IFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1faml0Q29kZTsKKworICAgICAgICBKSVRDb25zdGFu
dFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
bV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSB9OworICAgICAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxs
czsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAgICAg
ICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7Cisg
ICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwor
ICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRh
YmxlczsKKworICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX21ldGFkYXRhR1BSID0g
TExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUjsKKyAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc19jb25zdGFudHNHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUjsKKwor
ICAgICAgICBzdHJ1Y3QgTm90QUNvZGVCbG9jayB7IH0gbV9jb2RlQmxvY2s7CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewog
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50
R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0
ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmVnVDEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
ICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMiwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3
ICszNzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAg
fQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEs
IHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklU
OjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVn
YXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVn
YXRlPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJ
QyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAg
ICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2st
PnVuYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubV9w
cm9maWxlSW5kZXgpOworICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVRO
ZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVu
dEluc3RydWN0aW9uLCBuZWdhdGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRl
ciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBj
YW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9u
QXJpdGhOZWdhdGUpOwpAQCAtODk5LDggKzkwNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hp
ZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVEFk
ZElDKiBhZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAg
ZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
blZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUw
LDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29s
IGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAg
ICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2Zp
bGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYg
KGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmls
ZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9u
UHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aEp1bXBzKTsKIApAQCAtMTAxNSwxMCArMTAyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zh
c3QoSklUQmluYXJ5TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0
KCkpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsK
ICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRo
UHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAg
ICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVs
c2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVt
cHMpOwogCkBAIC0xMDU1LDEzICsxMDYyLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRVbmFyeU1hdGhJQzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
NCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0g
ICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7Cisg
ICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3Rl
ZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pN
aWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJ
QykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9
IGxhYmVsKCk7CkBAIC0xMTIwLDEzICsxMTI4LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRCaW5hcnlNYXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7
CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNo
KQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9H
SkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRS
ZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRo
UHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
cmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVu
Y3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1Bh
dGhFbmQgPSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAg
IGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRh
KG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJm1f
dW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGl2PigpLm1fcHJvZmlsZUluZGV4KTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRP
cGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVy
YW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0x
MjExLDggKzEyMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24q
CiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhh
cml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1f
dW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTXVsPigpKTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRkSklUTXVs
SUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1
ZU11bCk7CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVs
KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX21h
dGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRo
SUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9w
U3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw3ICsyMzIs
NyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBzdG9yZVB0cihjYWxs
RnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNl
dCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEs
IHJlZ1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7CiAgICAg
ZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8p
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTMyNCw3ICszMjQs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgYWRkU2xv
d0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJl
c3VsdChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0
YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBA
IC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0
IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9u
Rm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0
ZXIoKSwgcmVnVDApOwogfQogCkBAIC01MywxMCArNTMsOSBAQCBzdGQ6OmVuYWJsZV9pZl90PAog
ICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9w
X2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92
YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMK
ICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxs
TGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA9
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKICAg
ICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNldEluUmVn
aXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCkBAIC02NCw3ICs2Myw3IEBA
IEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJh
bWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKICAgICAgICAgSnVt
cCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgc3Rv
cmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVja3BvaW50KS5hZGRyZXNz
T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoYnl0ZWNvZGUsIHJlZ1QwLCByZWdUMCk7CiAgICAgICAgIGRvbmUubGluayh0aGlz
KTsKICAgICB9CiAKQEAgLTc4LDcgKzc3LDcgQEAgc3RkOjplbmFibGVfaWZfdDwKICAgICBPcDo6
b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1
Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8
fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+
Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZv
KiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKQEAgLTkxLDcgKzkwLDgg
QEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzaXpl
T3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50czsKICAgICBl
bHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdz
OwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZh
ckFyZ09mZnNldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CisgICAgY2FsbE9wZXJh
dGlvbihzaXplT3BlcmF0aW9uLCByZWdUMCwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3RlciwgZmly
c3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1maXJzdEZyZWVSZWdpc3Rl
ciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1ZUdQ
UiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdu
bWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwpAQCAtMTAxLDE0ICsxMDEsMTYgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9y
d2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBv
cGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0
aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCBy
ZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCByZWdUMywgcmVnVDEsIHJl
Z1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwg
cmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpLCByZWdUMCk7Ci0gICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUs
IHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMiwgaW5mby0+YWRkcmVzc09mTWF4QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5m
b0NvbnN0YW50LCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5m
bzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwgcmVnVDMpOworICAg
IEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMywgcmVnVDIpOworICAgIHN0
b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CiAgICAgbm90QmlnZ2VzdC5saW5rKHRoaXMpOwog
ICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgpAQCAtMTI3LDE2ICsxMjksMTYgQEAgYm9v
bCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpCiB0ZW1wbGF0ZTw+CiBib29sIEpJVDo6
Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVjb2RlKQogewotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIoY2Fs
bEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZz
ZXQoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBhcmd1bWVu
dEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKGFyZ3VtZW50
R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCByZWdUMSwgcmVnVDIpOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdU
MCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSks
IGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmV0dXJu
VmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIApAQCAtMTQ4
LDcgKzE1MCw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJs
b2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBD
YWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGws
IHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBA
IC0xNTYsNDMgKzE1OCw0NiBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29u
c3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdp
c3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUgLSBzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxP
YmplY3QoKm1fdm0sIGluZm8pOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9w
JiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCi17Citib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxs
KGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCwgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCkgewogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8PgotYm9v
bCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgQ2FsbExp
bmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK2Jvb2wgSklUOjpjb21w
aWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJ
bmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxsRnJhbWVTaHVmZmxlRGF0
YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUu
bV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVt
YmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxD
YWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFzc2VkQXJncyA9
IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBH
UFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0K
ICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6
ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2Fy
Z2MpOworICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAgICAg
ICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQog
ICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAogICAgICAgICAg
ICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVj
b2RlLm1fYXJndiwKICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwogICAgIH0KLSAgICBz
aHVmZmxlRGF0YS5jYWxsZWUgPQotICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwg
RGF0YUZvcm1hdEpTKTsKLSAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMo
bV9jb2RlQmxvY2spOwotICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEp
OworICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwg
RGF0YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJz
KCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMo
KSk7CiAKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0
aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0g
ewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVG
b3JUYWlsQ2FsbCgpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVn
VDIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxs
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKKyAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAg
ICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKworICAgIHNodWZmbGVEYXRhLT5z
aHJpbmtUb0ZpdCgpOworICAgIGluZm8tPmZyYW1lU2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZm
bGVEYXRhKTsKKwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2Nh
dGlvbjsKICAgICAKQEAgLTIxOCwxNCArMjIzLDI1IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
KGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7
IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIg
YWZ0ZXIgcmV0dXJuLgogICAgICovCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsK
LSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2Rl
QmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAg
IGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKKworICAgIFVubGlua2VkQ2FsbExp
bmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGlu
Zm9Db25zdGFudCA9IFVJTlRfTUFYOworICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwp
IHsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBtX3VubGlua2VkQ2FsbHMu
YWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJ
RCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZvKTsKKworICAgICAgICBBU1NFUlQobV9j
YWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKKyAg
ICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS51bmxpbmtlZENh
bGxMaW5rSW5mbyA9IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3RhbnQ7CisgICAgfQor
ICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQpOwogCiAgICAgLy8g
U1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFy
Z3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRlY29kZUluZGV4ID0gbV9jb2Rl
QmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQzMl90IGxvY2F0aW9u
Qml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOworICAgIHVpbnQzMl90
IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7CiAg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVzcyhjYWxsRnJhbWVS
ZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxsZWUu
CkBAIC0yMzQsMTYgKzI1MCwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0
cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5r
SW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZv
cihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENh
bGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAgaWYgKGNvbXBpbGVUYWlsQ2Fs
bChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQorICAgIGlmIChjb21waWxlVGFp
bENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3RhbnQpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCByZWdUMik7
CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAgICBhdXRvIHNsb3dQYXRo
cyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1BhdGhzID0g
Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJl
Z1QyLCBbJl0geworICAgICAgICAgICAgLy8gT09QUwogICAgICAgICAgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7
CiAgICAgICAgIH0pOwpAQCAtMjUzLDEzICsyNjYsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBz
bG93UGF0aHMgPSBpbmZvLT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6Olllcyk7CisgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0lu
Zm86OmVtaXREYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyKTsKICAgICBhdXRvIGRv
bmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0g
ZG9uZUxvY2F0aW9uOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpA
QCAtMjczLDIwICsyODYsMjIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25z
dCBJbgogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsK
IAotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKQorICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKSB7CisgICAgICAgIC8vIE9PUFMKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOworICAgIH0KIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92bSwgKnRoaXMpOworICAgIENh
bGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKCptX3ZtLCAqdGhpcywgcmVnVDIpOwogCiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
IHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwpAQCAtMzk1LDE3ICs0MTAsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbgogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
dm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwogICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBt
b3ZlKHJlZ1QwLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEsIEFjY2Vzc1R5cGU6
OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25leHQpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEdQUik7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KQEAgLTQxNiwxMCAr
NDQ0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50
KGp1bXAoKSk7CiAKLQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBHUFJSZWcg
aXRlcmF0b3JHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9yR1BSKSk7CiAgICAgbm90T2JqZWN0
LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckdQUikpOwpAQCAtNDMyLDE5ICs0NTgs
MTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7
Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5v
bkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBB
ZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkp
OwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBu
ZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBtb3ZlKGl0ZXJhdG9yR1BSLCBhcmd1
bWVudEdQUjIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogCiAgICAgYXV0byBkb25lID0ganVt
cCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90
T2JqZWN0LCBhcmd1bWVudEdQUjApOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwogfQpAQCAtNDUy
LDcgKzQ3Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5l
eHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9uID0gKFsmXSAoKSB7CiAgICAgICAgIHN3aXRj
aCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKICAgICAgICAgY2FzZSBOYXJyb3c6IHJldHVybiBp
dGVyYXRvcl9uZXh0X3RyeV9mYXN0X25hcnJvdzsKQEAgLTQ3MCw1MCArNDkzLDc0IEBAIHZvaWQg
SklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBKdW1wIGZhc3RDYXNlID0g
YnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwogCiAgICAg
Z2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBvcjgoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgQWJzb2x1dGVBZGRyZXNzKCZtZXRh
ZGF0YS5tX2l0ZXJhdGlvbk1ldGFkYXRhLnNlZW5Nb2RlcykpOworICAgIGxvYWQ4RnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9u
TWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSwg
cmVnVDApOworICAgIG9yMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJh
dGlvbk1vZGU6OkdlbmVyaWMpKSwgcmVnVDApOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDAs
IGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0
YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSk7CiAg
ICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAvLyBjYWxs
IHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2JqZWN0KSBpbiByZWdUMAogCi0gICAgR1BSUmVn
IHZhbHVlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKLSAg
ICBHUFJSZWcgZG9uZUdQUiA9IHJlZ1QxOwotICAgIC8vIGl0ZXJSZXN1bHRHUFIgd2lsbCBnZXQg
dHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0IGJ5IGlkIGJlbG93LgotICAgIG1vdmUodmFsdWVHUFIs
IGl0ZXJSZXN1bHRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRl
ckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOwogCisgICAgY29uc3RleHBy
IEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CiAgICAg
ewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaXRlclJlc3VsdEdQUik7Cisg
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSBiYXNlR1BS
KTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAg
ICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVncyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJlc2VydmVkUmVncy5hZGQodmFsdWVHUFIpOwor
ICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZChpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
Qnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywK
LSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJS
ZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgcmVnVDMsIEFjY2Vzc1R5cGU6OkdldEJ5
SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3Ms
CisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7Cisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgZG9u
ZUdQUiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUs
IGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAot
CiAgICAgewotICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKLSAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyID0gcmVnVDM7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9u
ZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3Igc2NyYXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2gxID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAg
ICAgICAgR1BSUmVnIGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRy
dXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BS
KTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCks
IEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsKIAorICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6cmVzdWx0OwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0o
KS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpT
VmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBK
U1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1Yklu
Zm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
ICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVu
ZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFs
dWVSZWdzIHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRHUFIpOwogCiAgICAgICAgIGl0
ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01MjcsNTkgKzU3NCw1NSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnNjcmF0Y2g7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wSXRlcmF0b3JOZXh0PigpOwogICAgIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVW
UmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJl
Z1QyOwogCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAgIEp1bXBMaXN0
IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRl
clJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChp
dGVyQ2FsbFJlc3VsdEdQUikpOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9
IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCk7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgICAgIAogICAg
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBub3RPYmplY3Qu
YXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2Jq
ZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCi0gICAg
ICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9u
ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkb25lVlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGRvbmVWUmVnLCByZWdUMSk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgcmVnVDApOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBh
cmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBl
KG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisK
KyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwor
CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6cmVzdWx0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBk
b25lR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVl
LCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2tw
b2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKICAgICB9CiAK
ICAgICB7ICAgCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgICAgICBHUFJSZWcg
aXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVu
dCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAg
ICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAg
ICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0
ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BS
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50
KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIp
OworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAgICAgfQotCiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJ
KHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTksMTAgKzE1OSwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgYm9vbCB1c2VEYXRhSUMoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKKyAgICAgICAgaWYgKEpJ
VENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKSAvLyBPT1BTCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5
cGUpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIHJldHVybiBPcHRpb25zOjp1
c2VEYXRhSUNJbk9wdGltaXppbmdKSVQoKTsKICAgICB9CiAKQEAgLTI0OCw2ICsyNDgsNDEgQEAg
cHJvdGVjdGVkOgogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gbV9yZWY7CiB9OwogCitjbGFz
cyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIHZvaWQgYWRvcHRNYXRoSUNzKE1hdGhJQ0hv
bGRlciYgb3RoZXIpCisgICAgeworICAgICAgICBtX2FkZElDcyA9IFdURk1vdmUob3RoZXIubV9h
ZGRJQ3MpOworICAgICAgICBtX211bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAg
ICAgICBtX25lZ0lDcyA9IFdURk1vdmUob3RoZXIubV9uZWdJQ3MpOworICAgICAgICBtX3N1YklD
cyA9IFdURk1vdmUob3RoZXIubV9zdWJJQ3MpOworICAgIH0KKworICAgIEpJVEFkZElDKiBhZGRK
SVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJ
Q3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKyAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0aFBy
b2ZpbGUpOyB9CisgICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorICAg
IEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7
IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorCisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAg
ICBKSVRBZGRJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1
cm4gYWRkSklUQWRkSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdl
bmVyYXRvciwgSklUTXVsR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE11bElDKiBh
ZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRNdWxJ
Qyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRO
ZWdHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUTmVnSUMqIGFkZE1hdGhJQyhVbmFy
eUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTmVnSUMocHJvZmlsZSk7IH0K
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUU3ViR2VuZXJhdG9yPjo6
dmFsdWU+Ojp0eXBlPgorICAgIEpJVFN1YklDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxl
KiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRTdWJJQyhwcm9maWxlKTsgfQorCitwcml2YXRlOgor
ICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBtX211bElDczsK
KyAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7
Cit9OworCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihEaXJlY3RKSVRD
b2RlKTsKIGNsYXNzIERpcmVjdEpJVENvZGUgOiBwdWJsaWMgSklUQ29kZVdpdGhDb2RlUmVmIHsK
ICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIo
RGlyZWN0SklUQ29kZSk7CkBAIC0yNjYsNiArMzAxLDIxIEBAIHByaXZhdGU6CiAgICAgQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBtX3dpdGhBcml0eUNoZWNrOwogfTsKIAorY2xhc3MgQmFzZWxpbmVK
SVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgeworcHVi
bGljOgorICAgIEJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spCisgICAgICAgIDogRGlyZWN0SklU
Q29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQp
CisgICAgeyB9CisKKyAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxs
czsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOyAvLyBPT1BTOiBt
YWtlIHN1cmUgd2UgdmlzaXQgdGhlc2Ugc29tZWhvdy4gT3IgYXNzZXJ0IHdlIGRvbid0IGhhdmUg
dG8sIHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KKyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVK
dW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1w
VGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAgICBKSVRDb2RlTWFwIG1faml0Q29k
ZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7Cit9OworCiBjbGFzcyBO
YXRpdmVKSVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CiBwdWJsaWM6CiAgICAg
TmF0aXZlSklUQ29kZShKSVRUeXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODE3MTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNhY2hlYWJsZUlk
ZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSW5s
aW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKQEAgLTQ2LDEwICs0Nyw5IEBAIHN0YXRp
YyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmYKIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycykKLSAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAsIG1faml0VHlw
ZShqaXRUeXBlKQorICAgIDogbV9qaXRUeXBlKGppdFR5cGUpCiB7Ci0gICAgbV9zdHViSW5mbyA9
IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVP
cmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5mbyA9IGNvZGVCbG9jayA/
IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdl
U3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGU7CiAK
ICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyczsKQEAgLTU5LDcg
KzU5LDYgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgTGlu
a0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpCiB7CiAgICAgbV9zdHViSW5mby0+c3RhcnQg
PSBzdGFydDsKLQogICAgIG1fc3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IGZhc3RQYXRoLmxvY2F0
aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obV9kb25lKTsKIAogICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKG1faml0VHlwZSkpCkBAIC02Nyw2ICs2NiwxNSBAQCB2b2lkIEpJVElubGluZUNhY2hl
R2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRp
b24gPSBzbG93UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3Nsb3dQYXRo
QmVnaW4pOwogfQogCit2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7
CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworICAg
IGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0cnVjdHVyZVN0dWJJbmZvR1BSKTsKKyAgICBq
aXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICBtX2Rv
bmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRv
cigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDExMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXI7CiBjbGFzcyBDYWxsU2l0ZUluZGV4
OwogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklUOwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87
CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVudW0gY2xhc3MgSklUVHlwZSA6
IHVpbnQ4X3Q7CiAKK3N0cnVjdCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGlu
ZURlbEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBH
UFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUklu
Zm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZv
OjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNl
bGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5r
aW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFs
IFN0dWJJbmZvLgorICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHN0YXRpY19hc3NlcnQoc3R1
YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm8pOworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5mbzo6cmVnVDU7Cit9OworCitzdHJ1
Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBwcm90byA9IEdQUkluZm86OmFyZ3VtZW50R1BSMzsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOworfTsKKwor
c3RydWN0IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkg
PT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BS
SW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUklu
Zm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJz
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisK
K3N0cnVjdCBCYXNlbGluZUluQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Qx
OworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpy
ZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9maWxlID0gR1BSSW5mbzo6cmVn
VDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdU
NDsKK307CisKK3N0cnVjdCBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIGJyYW5kID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2Vy
dChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19h
c3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9Owor
CiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDE1ICsxNjQsMjAgQEAgcHVibGljOgogICAg
IHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwg
TGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwotICAgIAorCisgICAgdm9pZCBnZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOworCisKKyAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2VkU3R1YkluZm8geyBudWxscHRyIH07CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsg
c3RkOjpudW1lcmljX2xpbWl0czxKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50Pjo6bWF4KCkgfTsK
KwogcHJvdGVjdGVkOgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgSklUVHlwZSBt
X2ppdFR5cGU7CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIG1fc3R1YkluZm87CiAKICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9kb25lOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Ns
b3dQYXRoQmVnaW47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7IC8vIE9PUFM6IG1ha2UgcmVw
b3J0Q2FsbCBwYXNzIHNvbWV0aGluZyBpbiB3ZSBjYW4gdXNlIGZvciB0aGUgbm9uLUNUSSB0aHVu
a3MgYnVpbGRzLiAKIH07CiAKIGNsYXNzIEpJVEJ5SWRHZW5lcmF0b3IgOiBwdWJsaWMgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IgewpAQCAtMTMyLDggKzIzOSw4IEBAIHB1YmxpYzoKICAgICBKSVRQ
dXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigK
LSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpT
VmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1Yklu
Zm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CisgICAgICAgIENvZGVC
bG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAgICAgICBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcg
c2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0
UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50
KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAoIXNyYy5p
c0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKK30KKwor
QUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lz
dGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29u
c3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3du
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25z
dGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBPT1BTOiBmaW5kIGEgd2F5IHRv
IGFzc2VydCB0aGF0IGFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVy
YW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkp
OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7
CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAK
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdp
c3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiArMTgxLDM2IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRpZgogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3Qg
Qnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1
bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
ICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3Mo
cmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVH
UFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNz
IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRk
cmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1
cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFs
dWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUo
ZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogfQogCiBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChy
ZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBA
QCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBK
SVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJp
bmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBz
ZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUlu
ZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2st
Pmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAg
bV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCks
IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0g
bV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1
LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkK
IHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBz
byB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2st
Pmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAg
QVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4
KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkg
KyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNv
ZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwzNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0
YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFu
dCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwotfQotCi1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVBy
b2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQotewotICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmls
aW5nKCkpOwotCi0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBv
bmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1f
YnVja2V0cyk7Ci0jZWxzZQotICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3Ig
PSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1
Y2tldHMpOwotICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNC
aXRzLnBheWxvYWQpOwotICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5h
c0JpdHMudGFnKTsKLSNlbmRpZgotfQorICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30KKworLy8gT09QUworLy9pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVBy
b2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQorLy97CisvLyAgICBBU1NFUlQoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKTsKKy8vCisvLyAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9u
OiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0CisvLyAgICAvLyBz
dG9yZS4KKy8vI2lmIFVTRShKU1ZBTFVFNjQpCisvLyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2
YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vI2Vsc2UKKy8vICAgIEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+
KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BS
KCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnRh
Z0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7CisvLyNlbmRpZgorLy99CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRl
Y2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZv
aWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNv
ZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsMjQgKzM1MywyNSBAQCBpbmxpbmUgc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2Rl
PgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZh
bHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZh
bHVlKTsKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRh
dGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0
Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmls
ZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJl
c3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotaW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQ
cm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
dmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQg
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBH
UFJSZWcgcmVzdWx0UmVnKQorLy97CisvLyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVl
UHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisvL30KIAotdGVtcGxhdGU8dHlwZW5h
bWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0
YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0
ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2Vu
ZGlmCiAKQEAgLTM2MCw2ICszOTEsMjEgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9m
aWxpbmdTaXRlVwogICAgIH0KIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5s
aW5lIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxH
UFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKSB7CisgICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUz
MlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsK
KyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJl
Z2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQoreworICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0
dXJlSUQoKSwgY2VsbEdQUiwgc2NyYXRjaEdQUik7Cit9CisKIEFMV0FZU19JTkxJTkUgaW50MzJf
dCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAg
IHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CkBAIC0zODAsNyArNDI2
LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQg
dmFsdWUpCiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKHJlZyk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxv
YWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBl
bHNlCiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYs
NyArNTQyLDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAg
ICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkp
CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MDYs
NyArNTUyLDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3du
Q2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChy
ZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAg
ICAgZWxzZQpAQCAtNTE0LDExICs1NjAsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXND
b25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxX
QVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rl
ciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3Qm
IGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01
NDQsNyArNTg1LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQog
ICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVj
b2RlSW5kZXggaXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgICAgICAv
LyBPT1BTOiBoYW5kbGUgbGluayB0aW1lIGNvbnN0YW50cyBoZXJlLi4uCisgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBnZXRDb25zdGFudE9wZXJhbmQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5p
c051bWJlcigpKQogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KHZhbHVlKSksIGRzdCk7CiAgICAgICAgIGVsc2UKQEAgLTU2NiwxMSArNjA4LDYgQEAgQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0Nv
bnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3Io
ZHN0KSk7CkBAIC01OTUsNyArNjMyLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93Q2FzZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwo
dlJlZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBA
IC02MzcsMzAgKzY3NCw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25z
dCAKIHsKICAgICBpZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVy
biBtX2NvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFM
V0FZU19JTkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3Bl
IGJ5dGVjb2RlKQotewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCAr
IDE7IC8vIEhhc2hNYXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9jb3BpZWRHZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1f
Y29waWVkR2V0UHV0SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJh
dG9yLT52YWx1ZSk7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFk
ZChrZXksIGdldFB1dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRo
UHJvZmlsZSBKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAg
ICB1aW50NjRfdCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJ
RCkgKyAxKSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRh
SUQpOwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkp
OwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAg
ICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRo
UHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
LSAgICBtX2NvcGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICBy
ZXR1cm4gYXJpdGhQcm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRP
ZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CkBAIC02ODEsNiArNjk1LDYxIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9k
ZTxPcFAKICAgICByZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFk
YXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3Vs
dCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVC
bG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0
KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhz
X21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0
YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRh
ZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1
bHQpCit7CisgICAgbG9hZDgoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJs
b2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQp
LCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBC
eXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVU
eXBlIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7Cisg
ICAgc3RvcmU4KHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxv
Y2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0
YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0
YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVz
dWx0KQoreworICAgIGFkZFB0cihzX21ldGFkYXRhR1BSLCBUcnVzdGVkSW1tUHRyKG1fdW5saW5r
ZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSAr
IG9mZnNldCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25z
dGFudChKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1
bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KGNvbnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2Fk
Q29uc3RhbnQobV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25z
dGFudCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0Nv
bnN0YW50KCkpOworICAgIC8vIE9PUFM6IE1heWJlIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudD8K
KyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1
ZmZlcigpKSwgcmVzdWx0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRv
Q29uc3RhbnRJbmRleCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3Qg
SW5zdHJ1Y3RpbwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0
Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1t
UHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQo
KSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29k
ZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJs
ZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxl
IGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAg
ICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRh
Ymxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFi
bGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6Oklt
bWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUp
OwogCkBAIC0xMDI0LDcgKzEwMjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihj
b25zdCBJbnN0CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0
aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2lt
cGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAg
ICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJ
bmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5r
ZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3ICsxMDQy
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8g
Y3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dp
dGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2st
PnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAg
IG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5k
ZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFi
bGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEg
KzU0LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29u
c3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0
b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRz
dCkpOwotICAgICAgICBlbHNlCisgICAgICAgIC8vIE9PUFM6IG1vc3QgIk90aGVyIiBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQgZnJvbSB0aGUg
VW5saW5rZWRDb2RlQmxvY2suIEl0J3MganVzdAorICAgICAgICAvLyBhIGNvdXBsZSB0eXBlcyB0
aGF0IGNhbid0LiBDcmVhdGUgYW4gYWJzdHJhY3Rpb24gZm9yIHRoYXQuCisKKyAgICAgICAgc3dp
dGNoIChtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3Jj
KSkgeworICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAg
ICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7
CiAgICAgICAgICAgICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRy
ZXNzRm9yKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIHJlZ1QwKTsKKyAg
ICAgICAgICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICs5
OCwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdP
YmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9j
YXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpT
RmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7
Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJy
ZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJl
Z1QwOwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJ
RCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdU
MzsKIAotICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwot
ICAgIGVsc2UgewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0
dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNP
YmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9j
YXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcs
IHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRS
ZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgq
bV92bSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZSgpICsgb2Zmc2V0T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZSgpICsgb2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIo
bnVsbHB0cik7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0
b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNjcmF0
Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVj
dHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0
aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JG
ZW5jZSgqbV92bSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CisKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsK
LSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2
bSgpLCBzdHJ1Y3R1cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChk
c3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzE0MCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Ug
a25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhh
c0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3lt
Ym9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAg
Y3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJl
c3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3Rv
SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjb25zdHJ1Y3RvciwgcmVnVDApOwogCkBAIC0xNTQsMzAgKzE2NCwzOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29k
ZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90
bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNl
IHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3Qs
IGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
dG8sIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3RvR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6
OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BSKTsKICAgICAKICAg
ICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAt
IHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2Uu
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1
bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAg
ICAgICByZWdUNSwKLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICByZXN1bHRHUFIs
CisgICAgICAgIHZhbHVlR1BSLAorICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgc3R1YkluZm9H
UFIsCisgICAgICAgIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDEsIEJhc2Vs
aW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAorCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQgKzIxMCwxMyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKLSAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BS
MCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9w
dGltaXplKT4oQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIHJlZ1QyLCByZWdU
MSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIHN0YXRpY19hc3Nl
cnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEp
OworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9
PSBhcmd1bWVudEdQUjIpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjpwcm90byA9PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSkKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJh
dGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMjQwLDcg
KzI1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KIAogICAg
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdU
MSwgcmVnVDApOwogCkBAIC0zNzQsNyArMzkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNv
bnN0IEluc3RydWN0aW9uKgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OworICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOwogICAgIHJldCgpOwogI2Vsc2UKQEAgLTM4NSw3ICs0MDIsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRs
ZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQu
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQyOCw2IEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQog
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC00MzQsOSArNDUwLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tl
eShjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9mdW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5h
bWUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTQ2NSw4ICs0ODIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3Ry
dWN0aQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Qy
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29u
c3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAg
ICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxz
ZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0
R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElT
dHViKHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAg
ICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgw
LDcgKzQ5OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZU
TCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywg
d2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
CkBAIC01MTksNyArNTM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5z
dHJ1YwogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1Qx
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNo
UHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24gPSBqdW1wKCk7CiAKQEAgLTU0Myw3ICs1NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmVxX251bGwoY29uc3QgSW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMg
LSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAg
IGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0
YXJnZXQpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQ
dHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CiAKQEAgLTU4MiwxNSArNjAxLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29y
X251bGwoY28KIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X3ZhbHVlOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQo
Ynl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlz
Q2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFu
Y2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgp
KSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsK
KyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVn
VDEpCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdU
MCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoYnl0ZWNvZGUsIFRydXN0ZWRJbW0zMigx
KSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVt
cChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2
NDIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJy
YW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0
KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNU
cnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY1OSw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBy
ZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyAr
NzE0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJl
Z1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcg
KzczMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRo
cm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtOTA4LDcgKzkyOCw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05
MTgsNyArOTM5LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVx
PigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsK
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCkBAIC05MzEsNyArOTUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
bnVtYmVyKGNvbnN0IEluc3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk3Myw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVn
VDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBp
ZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dFZSZWcpOwogfQpAQCAtOTc4LDcgKzEwMDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmpl
Y3QoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChz
cmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJl
Zyk7CiB9CkBAIC05OTMsNyArMTAxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0
IEluc3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNh
dGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0
KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNv
ZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFi
bGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzMsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUg
cHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwotICAg
IGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJv
ZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9m
aWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JF
bnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25I
YW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVm
ZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2go
WyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAgICAg
ICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdzKTsK
LSAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBAIC0x
MDUzLDggKzEwNjMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3Ry
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwog
CiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNr
IHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5h
cHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9m
ZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVD
VElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5MSwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNj
cnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFi
bGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4K
LSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxl
SW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFy
YWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4LCB1
bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21p
bik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCkBA
IC0xMDk5LDIwICsxMTEwLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29u
c3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGlu
ZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNv
bnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
U3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRl
eCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykp
OwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJU
YWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVl
c3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVi
dWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9k
ZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0x
MTMzLDcgKzExNDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0
CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdU
MCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAg
LTExNDgsNyArMTE2MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1
Y3QKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25l
cV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTY2LDcg
KzExNzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAg
ICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwg
cmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTEx
ODgsMTIgKzEyMDAsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXpl
IG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRv
IGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBh
bmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9j
ay0+bnVtVmFycygpOworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51
bVZhcnMoKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9yIChzaXplX3Qg
aiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpOyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2Nr
KTsKKyAgICAKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAgZW1pdEVudGVy
T3B0aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCkBAIC0xMzEwLDIzICsxMzI0LDE5IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1
cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIo
Y2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdU
Mik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlz
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBX
cml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2Fj
aGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0
ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVn
VDA7CkBAIC0xMzQyLDcgKzEzNTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpy
YXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRh
UmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkg
KyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJl
KCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2Fk
UHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlzOjpvZmZzZXRPZkNhY2hlZEZ1bmN0aW9uKCks
IGNhY2hlZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBi
cmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6
c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRy
KE5vdEVxdWFsLCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11
bHRpcGxlQ2FsbGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzgyLDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJl
Z1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFs
dWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzkzLDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgx
KSwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDA2LDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQxNyw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVn
VDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzMiwxMSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihjb25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIzKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CiB9CkBAIC0xNDMwLDcgKzE0NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2st
Pmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5n
KCkgJiYgbV91bmxpbmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5n
RWFybHlSZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BI
aW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCBy
ZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3Bz
TGltaXQoKSkpOwpAQCAtMTQ0MCw3ICsxNDU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9o
aW50KGNvbnN0IEluc3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZgotICAgICAgICBtb3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsx
NDY4LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAg
Ly8gRW1pdCB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1p
emVkKCkpIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVP
clplcm8sIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9y
TG9vcCgpKSwKLSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVz
c09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAt
MTUwOSw3ICsxNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0
IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywg
YXJndW1lbnRHUFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NjQsMzQgKzE1ODEsMzYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUu
bV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IEdQ
UlJlZzo6YXJndW1lbnRHUFIwOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVn
RXhwKj4obV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1p
dExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxv
YWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2Rl
Lm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSkKKyAgICBs
b2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNv
ZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rp
b24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlm
IChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5j
RXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlm
IChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZt
KCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNT
RVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjIxLDIzICsxNjQwLDI0IEBAIHZvaWQgSklUOjplbWl0
TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChi
eXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1f
c2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25E
ZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50
KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9w
Y29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29k
ZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlv
bik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMXJlZ1QwLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2Ug
aWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rp
b24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRz
dCwgJnZtKCksIGFyZ3VtZW50R1BSMXJlZ1QwLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2Ugewog
ICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4
cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVu
dEdQUjFyZWdUMCwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2NjQsMjkgKzE2ODQs
MzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJh
eT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0g
Ynl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEu
bV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3RlciwgYXJndW1lbnRHUFIyKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2Nh
dGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxl
LCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIHNpemUpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0
ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9m
aWxlLCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2Rl
LCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblBy
b2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJ
bmRleCwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwg
ZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICNlbHNlCisg
ICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0
aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDIp
OwogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTQsOCArMTcxNSw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmls
ZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8g
T09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5n
IHdoZW4gdGhlIHR5cGUgcHJvZmllbHIgaXMgZW5hYmxlZC4KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0
aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxS
ZWdpc3RlcjsKIApAQCAtMTc3NywyMCArMTc5OSwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2df
c2hhZG93X2NoaWNrZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1Qw
ICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBp
cyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJl
Z1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBi
ZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdU
MjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywg
c2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
MVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rl
ci4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVuc3VyZVNo
YWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2Ny
YXRjaDJSZWcpOworICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dGhpc1ZhbHVlLCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFj
a2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0
KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0
KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0
aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB1c2luZyB0aGUg
Y29udHJvbCBmbG93IHByb2ZpbGVyLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0
aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVD
b2RlKCp0aGlzKTsKQEAgLTE4NjAsNyArMTg4Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9h
cmd1bWVudChjb25zdCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVn
cyk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxOTEyLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90
eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIs
IHNsb3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODgxLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBs
ZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAg
IGlmIChrZXkuaXNJbnQzMigpKQpAQCAtMjkwNCw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZ0p1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29k
ZUJsb2NrLT5iYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAogICAg
IGlmIChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3Ry
aW5nKGtleSktPnZhbHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZp
c2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1
dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAg
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJS
ZWcpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDkyICs0OSwxMDMgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5t
X3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9m
SWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHBy
b2ZpbGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhO
dW1iZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
Ynl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0
KTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsK
LSAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgICAg
IGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6Okdl
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
ICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1
bHRSZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICAgICAgLy8gT09QUy4gU3VwcG9ydCB0aGlzCisg
ICAgICAgIC8vaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAgICAgLy8g
ICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICAgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFs
OworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBt
X2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wY29kZVR5cGU+CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9w
Y29kZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2Vz
KGl0ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChtX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgYXJndW1lbnRHUFIyKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQp
OwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VS
VChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVP
ZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxy
ZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVu
dEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsK
LSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2Zp
bGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3Rh
dGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3Nl
cnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGlj
X2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisK
KyAgICBsb2FkQ29uc3RhbnQobV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bj
b2RlVHlwZTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IHJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNjAsOCAr
MTcxLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNv
bnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIg
PT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMTg3LDM0ICsxOTgsNDEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAg
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cmVzdWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlW
YWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5k
KGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAg
ICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBA
IC0yMjMsOSArMjQxLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1l
KGMKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFt
ZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldFByaXZh
dGVOYW1lT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTIzNSwyNiArMjU1LDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1l
KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7
IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjp2YWx1ZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRH
UFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTMwMCwyMSArMzE0LDI4IEBAIHZvaWQg
SklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJh
bmQgPSBieXRlY29kZS5tX2JyYW5kOwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
R1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6c3R1YkluZm87CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFBy
aXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChn
ZW4pOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9m
IHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI4
LDEzICszNDksMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAog
ewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKwogICAgIEpJVFByaXZh
dGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3By
aXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdU
MTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFu
ZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzY5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fz
c2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNl
dFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46
OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0
X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19w
cml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0z
NzAsMTkgKzM4OSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNv
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQs
IHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFz
ZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihicmFuZCwgYnJhbmRHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSks
IHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpD
aGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBz
dHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCkBAIC0zOTQsOSArNDIyLDEx
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9w
dGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVu
dEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0MzYs
MTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJl
YWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6
YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFp
dHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVu
dFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9w
dGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9w
dGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hl
Y2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM1
LDMwICs0NTksNDIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwog
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7CisgICAg
bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9m
ZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
SlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQpOwotICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50
MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFs
dWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworICAgIC8vIE9PUFM6
CisgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgIC8vICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1Yklu
Zm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRL
aW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2Rl
ID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlW
YWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0
aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MTAsMTIg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1v
ZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAg
ICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAg
ICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00
OTgsNyArNTMxLDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkK
IAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1
cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
NCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5
VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1
KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFk
YXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUp
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMs
IGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTUxMiw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2Fs
bCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJp
Y3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAg
LTUzOSwxMSArNTgxLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVy
czo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICBqaXQuc3Rv
cmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSk7CkBAIC01NzAsMjAgKzYxMiwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0
eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEp
LCBKU1ZhbHVlUmVncyhyZWdUMiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiks
IEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZv
LT5wcml2YXRlRmllbGRQdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdy
aXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxs
LgpAQCAtNjAzLDEzICs2NTYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRl
X25hbWUoYwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBhdXRv
IG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5l
UHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9w
dGltaXplOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5IGFyZSBj
b25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIs
IGdlbi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBh
cmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3Vt
ZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIz
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSNCk7CisgICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkg
PyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9u
UHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRzR1BSMywgYXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjc2LDEyIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNh
bGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAg
ZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNjQ4LDkgKzY5Niw5IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9
IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IHJlZ1Q0OwogCkBAIC02ODAsNyArNzI4LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2dldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdU
MSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY4OSw3ICs3MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1Qx
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3NDksOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2dldHRlciwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNl
dHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRy
aWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91
bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcw
OSw3ICs3NjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAg
ICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRHZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzE5LDcgKzc3MSw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJC
eVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAs
IHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3LDIzICs3
ODAsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJl
Z2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
Z1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SWQ7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0
dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBz
aG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3Jp
dGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC03NTksMTUgKzgyMiwxNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9k
ZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRl
bGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC03ODEsMjQgKzg0NiwxOSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BS
ID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9k
ZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRD
YWxsKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTg0NSwyMiArOTA1
LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qx
LCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGlu
ZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9w
ZXJ0eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFz
ZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJp
ZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJl
Z2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRl
LWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTU0LDExIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRl
Y29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlW
YWxPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJn
dW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQgKzk3MiwxOSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFN
b2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJu
VmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
CiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQpAQCAtOTYxLDIyICsxMDI5LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRf
YnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJl
Z3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7CisgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2
LDE0ICsxMDYzLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
VHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwMDMsMjYgKzEwODMsMjAgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAg
fHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3Bl
cnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRp
b25UcnlHZXRCeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUp
Pjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJl
dHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xMDMwLDIyICsxMTA0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGUtPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Qp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRS
ZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisKKyAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0
UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAt
MTA1NCwxNiArMTEzNywxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0
QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9w
ZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwNzMsODMg
KzExNTgsNjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwog
CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VH
UFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9H
UFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Nh
bWU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKSwgZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9w
dGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0g
ICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAo
KmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKLSAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkp
OwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsICZtZXRhZGF0
YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCByZWdUMSk7Cisg
ICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpv
ZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2Rl
KCksIHNjcmF0Y2hHUFIpOworICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5j
aDgoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90
PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2Rl
TWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3Ro
TW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5
SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOwotCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJl
c3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVn
KTsKIH0KIApAQCAtMTE1OCwxNiArMTIyMSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
LCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMTc3LDI2ICsx
MjQyLDU4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1
cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1
cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZFdpdGhUaGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJz
Ojp0aGlzVmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaDsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlk
V2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVn
LCB0aGlzR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZVZSZWcpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJl
Zyk7CisKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIHJl
c3VsdFJlZ3MsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSwgc3R1
YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0
QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZyk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyNDEsMTYgKzEz
MzgsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0
YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhp
c09wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI5ICsxMzYw
LDIzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxy
ZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OnRoaXNWYWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRH
UFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5
SWRXaXRoVGhpc09wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFs
dWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0KKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9cwogCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJiB2
bSkKQEAgLTEzMjksMjMgKzE0MjMsMzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNv
bnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9y
ZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVj
dCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhl
IGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4n
LCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYg
b2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1Qx
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAg
ICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2Rl
KSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAog
ICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6UHV0QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1
dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1v
ZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRC
eUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVy
ZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsx
NDY3LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsK
ICAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJ
ZEluZGV4KytdOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1Qw
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKGdl
bi5zbG93UGF0aEZ1bmN0aW9uKCksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEzNzYsMjUgKzE0ODgs
MTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhbHJl
YWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDE7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fz
c2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHZhbHVlR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCkpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTQ0MSwyMCArMTU0NywzMSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdU
MCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OkluQnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQpAQCAtMTQ2MywxNCArMTU4MCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9p
bkJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjAwLDIyIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5
SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2ls
bCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBp
biBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQg
bmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25J
bkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9p
ZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkluQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2
MjQsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFz
ZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlW
YWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlW
YWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NTksMTgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBn
ZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRl
Y29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1l
bnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMyk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BS
NCk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTU2LDUxICsxNjgxLDU2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09
IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxl
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2Zp
bGVHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3
aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50
IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVu
dCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlv
bkluQnlWYWxPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6
dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
YnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5k
LCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUs
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gdHlwZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5
cGUpCit2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZp
cnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUg
dHlwZSkKIHsKICAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8
fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiAKQEAgLTE2MDgsNyArMTcz
OCwxMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlv
bkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHR5cGUgPT0g
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGlt
aXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE2MTgsMjcgKzE3NTIsMjEgQEAgdm9pZCBKSVQ6OmVt
aXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IHJlZ1Qx
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IEJhc2Vs
aW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5T3JCcmFuZEdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1p
emUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2
YXRlQnJhbmRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhh
c1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsK
LSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0
aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2
YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NTIs
NyArMTc4MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKGMKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNs
b3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAgICBlbWl0
SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUu
bV9wcm9wZXJ0eSwgLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNjY2LDE5ICsxNzk0LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9o
YXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7
Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQ
cml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0
ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJh
bmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICghbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1t
MzIoSXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7
CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2Jh
bE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNl
dDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBk
ZXB0aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpOworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywg
cmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2ODgsNiAr
MTgxOSw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3Bl
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3MDEsNyAr
MTgzMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAg
ICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29k
ZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVn
VDEpOwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5n
RXBvY2gsIHJlZ1QxKTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZH
bG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4NDcsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2Ug
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpT
U2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2Nr
KHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChj
b25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwog
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CiAg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTE3OTQsNTkgKzE5MjYsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29w
ZShjb25zdCBJbgogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jl
c29sdmVUeXBlOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09
IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0
KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91
bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJl
bnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVn
VDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxl
IGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUg
d2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29s
dmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRh
Lm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlmIChwcm9maWxlZFJl
c29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1l
bnQoKSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZz
ZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAg
ICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFk
YXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKKworICAgICAgICBhdXRvIGNs
b3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpn
ZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9yZXNv
bHZlX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGNsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAg
ICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MiKTsKKyAgICAgICAgfTsKIAotI2RlZmluZSBSRVNP
TFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29s
dmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBn
ZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVTT0xW
RV9TQ09QRV9HRU5FUkFUT1IpCisgICAgICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVy
YXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayhzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBn
ZW5lcmljIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKwor
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFk
YXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGNvZGU7CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIp
CisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsK
KyAgICAgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRv
cik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKICAgICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2
ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFt
ZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUs
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5
IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJ
VCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgog
ICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGds
b2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0g
T3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFH
UFIgPSByZWdUNzsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0g
cmVnVDY7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29u
c3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0o
Ynl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BS
ZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAg
ICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMs
IENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRy
KHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdU
MywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQu
YWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIApA
QCAtMTg1NSwyNiArMjAwNSwyNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIg
PT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7
Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2Jh
bE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6
Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpT
R2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNo
cG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0g
ICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVH
UFIsIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAg
ICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVz
dDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAg
ICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAg
ewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5l
eHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEp
OwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDAp
OworICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAg
ICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgy
LDEyICsyMDMyLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0
YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgot
ICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2Jh
bE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JK
RUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVn
VDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNh
bEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0
R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSks
IHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgaml0Lm1vdmUo
Z2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CkBAIC0xODk3LDExICsyMDQ3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9j
aygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhciosCiAgICAg
ICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xv
YmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwor
ICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0
OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3
ICsyMDU5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
ICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAg
ICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNv
bHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMjA2
OSw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAg
IH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJl
Z1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAg
ICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQu
bGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAg
fSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBl
KSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CisgICAgICAgIGppdC5s
b2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUmVzb2x2ZVR5cGUo
KSksIHJlZ1QwKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmso
dGhpcyk7CisgICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlKSB7CisgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlKTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7
CisgICAgICAgICAgICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7
CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xv
YmFsTGV4aWNhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQot
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmso
dGhpcyk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAg
ICB9CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElT
dHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGlu
ayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxf
VEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bSgpLmdldENUSVN0dWIoc2xvd19vcF9y
ZXNvbHZlX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFt
ZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVU
eXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVz
b2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0g
ICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2
ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0p
OyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29s
dmVUeXBlLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0g
ICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRP
UikKLSN1bmRlZiBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVy
YXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0
aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQog
ICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3Qg
YmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcv
RlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3Rz
LCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAg
ICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3Qg
cGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkK
QEAgLTIwNjUsNiArMjE3Nyw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFs
UmVnaXMKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewor
ICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CkBAIC0yMTc4LDcgKzIyOTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yMTg2
LDkgKzIyOTksOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEs
IG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwg
b3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0
aW9uKTsKIH0KIAogI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yMTk2LDQx
ICsyMzA5LDUwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIHZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5
cGUoKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVj
b2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7Cisg
ICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUlu
ZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworCisgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJh
dG9yID0gW10gKFZNJikgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNj
b3BlVGh1bmsoQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJl
VmFyIik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3NHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayhDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2Vs
aW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8g
Z2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgcmV0dXJu
IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5l
OiBvcF9nZXRfZnJvbV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BS
ID0gcmVnVDY7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1
OwogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRy
X3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEu
bV9vcGVyYW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0
cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoJm1ldGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAK
LSNkZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJv
bV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBU
aHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNP
TFZFX1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdF
VF9GUk9NX1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHNjb3BlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRh
ZGF0YUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2Nv
cGVHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRh
ZGF0YUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAg
IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAg
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZt
LmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAg
Y29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5l
cmF0b3IpOworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dl
dEZyb21TY29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0
aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2Vu
ZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29s
dmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVy
YXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNl
bGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KQEAgLTIyMzksNzcgKzIzNjEsNjggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFk
YXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJ
c1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRk
cmVzcygpOworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVz
cygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZN
ZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7
CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0
YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJfdCBtZXRhZGF0YVN0
cnVjdHVyZU9mZnNldCkgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG1l
dGFkYXRhU3RydWN0dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCBy
ZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1Qx
KSk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RF
cXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEp
KTsKKyAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2Nv
cGVHUFIpIHsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRh
dGE6Om9mZnNldE9mU3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAgICAgIGppdC5tb3ZlKHNjb3Bl
R1BSLCByZWdUMCk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0ciha
ZXJvLCByZWdUMSkpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVy
ZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDEpKTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYg
KCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09G
RlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMp
OworICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0
aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CiAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4
KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAotICAgIGF1dG8gZW1p
dEdldFZhckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAg
ICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZy
b21JbmRpcmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewot
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAg
ICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCiAgICAgYXV0byBlbWl0R2V0Q2xvc3Vy
ZVZhciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgewogICAgICAg
ICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNo
aWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3Bl
R1BSLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpT
TGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworICAgICAg
ICBqaXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0
LmFkZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkp
LCByZWdUMCk7CiAgICAgfTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVt
aXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2gg
KHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKHNjb3BlR1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9u
IHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xv
YmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBm
b3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsK
ICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7CiAgICAgICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKIAotICAgICAgICAgICAgaml0QXNz
ZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAg
ICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJh
bmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNj
b3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBq
aXQuYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIG9mZnNldCk7
CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1w
IGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0
ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0
aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRP
ZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0
LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJ
VE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5r
KCZqaXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVn
MzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0
KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0Vp
Z2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
LCByZXN1bHQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5uZWczMihv
ZmZzZXQpOworICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0
KTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgR2xvYmFsVmFyOgpAQCAtMjMxNywyMSArMjQzMCwxOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAg
ICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAg
ICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwg
bV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQp
KSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
IE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsKICAgICAgICAgICAgIGVtaXRH
ZXRDbG9zdXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Cisg
ICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxl
VmFyOgpAQCAtMjM0MSw3OSArMjQ1Miw1NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlw
ZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0
UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAot
Ci0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29s
dmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAg
ICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAg
c2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVU
eXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
Z2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJ
bmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAg
ICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0
UHV0SW5mbygpKSwgcmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAot
ICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNH
bG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0
eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZq
aXQpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5i
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAg
ICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVt
cCBpc0dsb2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9i
YWxQcm9wZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7
CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIs
IHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXIubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAg
ICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBk
ZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGlj
X2Fzc2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0
KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
cHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwg
TWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0
KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9
IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRs
ZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAg
IHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQ
dHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dF
TkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYg
dm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdl
dEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAg
ICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJv
bVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAj
cmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRf
RlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVS
QVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19v
cF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdl
bmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBC
YXNlbGluZSBKSVQgYmVjYXVzZQpAQCAtMjQ3MSw4NiArMjU1OSw3OSBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0
ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2Fk
UHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShy
ZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQ
dHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0g
ICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVn
VDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAq
IHNpemVvZihSZWdpc3RlcikpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3Bp
ZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdl
dFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0g
bWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3Qg
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0g
ICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5k
aXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5
cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8u
cmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNj
b3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0
aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUg
R2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2lu
ZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sg
Y292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3Ig
YW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFs
bHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24u
CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6
Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRl
c3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBT
dHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRh
PEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJh
bmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAg
ICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFu
ZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEp
OwogICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1Qy
LCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOworICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMywgcmVn
VDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgLy8gT09QUzogd291bGQgYmUgbmljZSB0byBoYXZl
IGEgdmVyc2lvbiB0aGF0IHRvb2sgR1BSUmVncworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoK
ICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAg
ICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0gICAgICAgICAgICBpZiAoIWlz
SW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisgICAgICAgICAgICBlbWl0VmFyUmVhZE9u
bHlDaGVjayhyZXNvbHZlVHlwZSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQo
KSwgcmVnVDApOworCisgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNvZGUu
bV9nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERa
IGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0
IFREWiBjaGVja3Mgc3RhdGljYWxseS4KLSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2Fk
Rm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBv
aW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50
ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCksIHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xv
YmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCks
IHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUq
Pigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAg
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQ
dXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsKKyAg
ICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDEpOworCisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBzdG9y
ZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxk
IGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciB2YWx1ZS4K
KyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFJlc29s
dmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAg
ICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRh
dGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShi
eXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCks
IHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0
VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CisgICAgICAgICAg
ICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJ
bmRleChyZWdUMCwgcmVnVDIsIFNjYWxlRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZz
ZXRPZlZhcmlhYmxlcygpKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxkIGJlIG5pY2Ug
dG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciBvd25lci92YWx1ZS4KICAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yNTY0
LDU4ICsyNjQ1LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigm
bWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRv
IFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVt
cCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZh
bHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAgICAgICBpc0ds
b2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAg
ICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmxp
bmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKKyAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1cmVWYXIvIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21waWxlIHRoaW5ncwor
ICAgIC8vIHRoYXQgd2F5IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2UndmUgcHJvdmVuIHRo
YXQgaXMgdGhlIHR5cGUgd2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJlVmFyLAorICAgIC8v
IGFsbCBDb2RlQmxvY2tzIHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFyCisgICAgLy8gaWYg
dGhlIHZhciBpbmplY3Rpb24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYgaXQgaXMgZmlyZWQs
IHRoZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0CisgICAgLy8gbWF0dGVy
IHdoYXQgdHlwZSB3ZSBhcmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5
cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcik7CisgICAgZWxz
ZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIpCisgICAgICAg
IGVtaXRDb2RlKFJlc29sdmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgZW1p
dENvZGUoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVsc2UgewogICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQ
dXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1QwKTsKICAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwog
ICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAg
ICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBlbWl0Q29kZShH
bG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAg
ICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCisgICAg
ICAgIEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsodGhp
cyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVl
KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMp
OwogCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
LmxpbmsodGhpcyk7CiAKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAogICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7
CiAgICAgfQogfQogCkBAIC0yNjI0LDE4ICsyNjk5LDIxIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwot
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSku
cmVzb2x2ZVR5cGUoKTsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAg
UmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGlmIChwcm9m
aWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJZiBhbnkgbGlua2Vk
IENvZGVCbG9jayBzYXcgYSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBDb2RlQmxvY2tzIGFy
ZSBndWFyYW50ZWVkCisgICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZhci4KICAgICAgICAg
SklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7
CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9T
Y29wZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50
SW5zdHJ1Y3Rpb24pOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJndW1lbnRHUFIwLCBj
dXJyZW50SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CiAgICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5
dGVjb2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBBU1NFUlQo
bV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1
cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CkBAIC0yNzAxLDcgKzI3NzksNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdU
MCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyODM3LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CkBAIC0yNzY3LDcgKzI4NDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxf
ZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNl
dE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAt
Mjc4OSw3ICsyODY2LDYgQEAgdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxP
cAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9t
b2RlOwpAQCAtMjgwNSw3ICsyODgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9u
ZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlzIGlz
IHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBjYXNl
IGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRhZGF0YS5tX2Vu
dW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVy
ZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayku
bV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1
Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAg
ICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMih+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVN
b2RlKSkpOwpAQCAtMjg0Nyw3OCArMjkyMyw4NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJh
dG9yX25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1l
cmF0b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxpbmVF
bnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRj
aDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRvckdl
dEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG1vZGUsIHNjcmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5TmFtZSwgcHJvcGVydHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3Mo
Jm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEo
KSwgc2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZThU
b01ldGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CiAg
ICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KLSAgICBKdW1wIGlz
Tm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3Rl
ZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBpc05vdE93blN0cnVjdHVy
ZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVt
cCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7Cisg
ICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVh
bCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0
LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8gSWYgaW5kZXggaXMgbGVz
cyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3Mg
YW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1wIG91dE9mTGluZUFjY2Vz
cyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwor
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CisgICAgbG9hZDY0KEJh
c2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAo
KSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91dE9mTGluZUFj
Y2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1Qz
KTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1Qz
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDIpOwor
ICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2Ny
YXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBv
ZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnRw
dHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdU
MCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7
CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgb2Zm
c2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1
bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOwotICAgIHN0b3JlOChU
cnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJl
TW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsK
KyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCBieXRlY29kZSwg
Qnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAg
IGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNOb3RJbmRleGVk
ID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNo
VGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3aXRoIHRoZSBp
bmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAgICAgaXNOb3RJbmRl
eGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5
dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7Cisg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBk
b25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIApAQCAtMjkyNywxMCArMzAxMSw5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9u
VHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29k
ZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Qnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRf
ZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUg
Z2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjkzOSw3ICsz
MDIyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVn
VDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0
b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6
TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMy
KHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5
dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAtMzAyOCw2
ICszMTEzLDEzIEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKICAg
ICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjpl
bWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNoR1BS
KG93bmVyKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3Jp
dGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbi5saW5rKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NDMsNyArMTU0Myw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENh
bGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fz
c2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFy
dCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlu
a2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAog
ICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAg
LTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpu
c3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJh
dGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3Ry
dWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAg
ICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikK
ICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2Nmciwg
dDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9w
KG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwg
c3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAgICAg
ICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJp
dGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0
Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0
eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmls
ZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0
YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRl
U3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5l
Z2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0
ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAg
ICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEs
IExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1
cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJp
dGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1
cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkK
IAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGlu
dGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUo
dHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
YXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVu
ZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAg
ICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9w
Q3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAub3Ax
Tm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAgICBh
cml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0
aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAg
ICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0
MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwx
MiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJp
YSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5v
dEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAg
IGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0
KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAg
ICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAg
ICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVC
aW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIs
IHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAg
ICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBp
cyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90
LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNs
b3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVt
YmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQz
LCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20J
KHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEzIEBAIG1h
Y3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMsIGExCiAg
ICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRweiByMCwg
LnJlY292ZXIKLQogICAgICAgICAgICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAgIyBCYXNl
bGluZSB1c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQgcG9vbC4K
KyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAgbG9hZHAg
Q29kZUJsb2NrOjptX2ppdERhdGFbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2Nr
OjpKSVREYXRhOjptX2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAgIGlmIEFS
TTY0RQogICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zm
c2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50cnkpICog
UHRyU2l6ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRy
VGFnICMgSlNFbnRyeVB0clRhZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVxdWFsaXR5
SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bj
b2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
JW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBt
ZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkK
LSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0KICAg
ICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQog
ICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNybyBwcmVP
cChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24o
dDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEgdDEs
IFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50
KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEx
MzQsMTEgKzExMzUsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUs
IE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikK
LQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwg
T3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjpt
X2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0x
MTQ2LDEyICsxMTQyLDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0
ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0Mwog
ICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmls
ZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxl
SW50LCB0MSwgdDQpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0cXog
dDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAw
LCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBk
YXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEsIHQ0
KQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNjAsNiBA
QCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkK
IAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmls
ZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQogICAg
ICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUs
IHQwLCB0MSkKQEAgLTExNzcsNyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUo
b3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9w
ZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUoQXJp
dGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0NCkKICAgICAgICAgZGlzcGF0Y2goKQog
CiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmluYXJ5T3BD
dXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5z
bG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKLSAg
ICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwg
dDUsIHQ0KQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMklu
dDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwg
dDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAg
ICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNiw3ICsxMTk4LDcgQEAgbWFjcm8gYmluYXJ5T3BD
dXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVm
aW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAgIGdl
dChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKLSAgICAgICAg
cHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAg
ICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBm
cTJkIHQxLCBmdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpA
QCAtMjQ5OCw2ICsyNDk4LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQK
IAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1l
dGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxl
OjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bj
b2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBl
LCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBz
aG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFT
U0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBu
b3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVh
YmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0g
ZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVG
cm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2Nr
KiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRp
ZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5p
cXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4K
KyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7Cisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBD
YWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhD
b2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENh
Y2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3Ry
aW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRp
ZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4
MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJs
b2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5
cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2Nr
LCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNo
ZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJs
ZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVu
dGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0Nf
REVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0
YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0
YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAg
IFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7Cisg
ICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7
CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNO
dW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODE3
MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBpbmxp
bmUgcHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRy
ZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0aWMg
aW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437053</attachid>
            <date>2021-09-01 12:30:52 -0700</date>
            <delta_ts>2021-09-01 12:50:53 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>382977</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IHVubGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxp
bmtlZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRp
b24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
aXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0g
ICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRo
U3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhT
dGFydCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlz
IGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQg
dG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0
aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJz
OjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAg
IHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MjQsNiArNDI0LDEzIEBAIGlubGluZSBDb2RlT3JpZ2lu
IGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBz
byB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNyArMzcw
LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2Fu
J3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJv
Y2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJv
ZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5l
c3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2Yg
YW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhl
IGxpdmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNp
ZGUgVW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBi
ZXR3ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhl
IGJ5dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5n
IGFuIFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9j
ayogdW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CkBAIC00NjYsNiAr
NDY3LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAg
ICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9G
SUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtl
ZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAg
ICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtl
ZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAg
ICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5z
dHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4LDE0ICs1NDIsMTQgQEAgYm9vbCBD
b2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRl
UHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5L
KE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAg
ICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJ
bmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9w
TXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5L
X1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC03ODksNiArODAz
LDYyIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbkNvbW1vbihWTSYKICAgICBtX293
bmVyRWRnZS5zZXQodm0sIHRoaXMsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmNyZWF0ZSh2
bSwgdGhpcykpOwogfQogCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNlbGlu
ZUNvZGUoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRDb2Rl
KGppdENvZGUuY29weVJlZigpKTsKKworICAgIGNvbnN0IGF1dG8mIGppdENvZGVNYXAgPSB0aGlz
LT5qaXRDb2RlTWFwKCk7CisgICAgLy8gT09QUzogTW92ZSB0aGlzIHRvICJsaW5raW5nIiB3aXRo
IGJhc2VsaW5lIEpJVCBjb2RlLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZF
eGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIg
PSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVt
LzM5NDMzMzE4Pi4KKyAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5k
KEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPigpOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9qaXREYXRhKTsK
KyAgICBhdXRvIGppdERhdGEgPSBtYWtlVW5pcXVlPEpJVERhdGE+KCk7CisKKyAgICBqaXREYXRh
LT5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLm1fY29uc3Rh
bnRQb29sLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqaXRDb2RlLm1fY29u
c3RhbnRQb29sLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIGVudHJ5ID0gaml0Q29kZS5t
X2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKSB7CisgICAg
ICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3Q6CisgICAgICAgICAg
ICBqaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbFtpXSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpD
YWxsTGlua0luZm86IHsKKyAgICAgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtl
ZENhbGxMaW5rSW5mbyA9ICpzdGF0aWNfY2FzdDxVbmxpbmtlZENhbGxMaW5rSW5mbyo+KGVudHJ5
LnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0g
aml0RGF0YS0+bV9jYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJ
bmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRvbid0IGhhcmRjb2Rl
IHRoZXNlIHJlZ2lzdGVycyBsaWtlIHRoaXMuCisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmlu
aXRpYWxpemVEYXRhSUModm0oKSwgKnVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdU
MCwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBv
b2xbaV0gPSBjYWxsTGlua0luZm87CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKKyAg
ICAgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8gPSAq
c3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyo+KGVudHJ5LnZhbHVlLmdldCgp
KTsKKyAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGppdERhdGEubV9z
dHViSW5mb3MtPmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUsIENvZGVPcmlnaW4odW5s
aW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICBzdHViSW5mby0+aW5p
dGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKHRoaXMsIHVubGlua2VkU3R1Yklu
Zm8pOworICAgICAgICAgICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2xbaV0gPSBzdHViSW5m
bzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkudmFsdWUuZ2V0KCkpOworICAgICAgICAg
ICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkRlY2woaW5kZXgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBKSVRDb25zdGFudFBv
b2w6OlR5cGU6OkZ1bmN0aW9uRXhwcjogeworICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS52YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBq
aXREYXRhLT5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgICAgICBtX2ppdERhdGEgPSBXVEZNb3ZlKGppdERhdGEpOworICAgIH0KK30KKwog
Q29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTMwNzks
NyArMzE0OSw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAog
I2lmIEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAg
cmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4g
SklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzI5NSwxMyAr
MzM2NSwxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAg
ICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICBy
ZXR1cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICAgICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0zMzEzLDExICszMzgzLDExIEBAIFVuYXJ5QXJpdGhQcm9m
aWxlKiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgp
KSB7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRl
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFz
PE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bf
aW5jOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+
YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVy
biBwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVm
YXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyAr
MTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUoKSBjb25z
dCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1QYXJhbWV0
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgogICAgIHZv
aWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAKICAgICB1
bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAgdW5zaWdu
ZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVja3BvaW50
cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRyZXNzT2ZO
dW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5h
dGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRp
dmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0lu
c3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFw
QnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdp
c3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5nIGJhY2sg
dGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBgdGhpc2Ag
YW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgp
KQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBv
cmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAgICByZXR1cm4g
cmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2Niw4ICsy
NTcsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJl
c3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0
aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLgogICAgIHN0cnVjdCBKSVREYXRh
IHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVT
dHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CkBA
IC0yODIsOSArMjc1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9D
b2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29sIG1faGFzQ2Fs
bGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7
CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29sOworICAgICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAgIH07CiAKKyAg
ICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZlB0cjxCYXNlbGluZUpJVENv
ZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkpCkBAIC0y
OTMsNiArMjkwLDggQEAgcHVibGljOgogICAgIH0KICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRh
U2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZKSVREYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9q
aXREYXRhKTsgfQorCiAgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmls
ZSopOwogICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKICAg
ICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKQEAgLTMyMiwxNSAr
MzIxLDEwIEBAIHB1YmxpYzoKICAgICAvLyBsb29raW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0
byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMuCiAgICAgQ2FsbExpbmtJbmZvKiBn
ZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwogICAgIAotICAg
IHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFwJiYgaml0Q29kZU1hcCkKLSAgICB7Ci0gICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgZW5zdXJlSklU
RGF0YShsb2NrZXIpLm1faml0Q29kZU1hcCA9IFdURk1vdmUoaml0Q29kZU1hcCk7Ci0gICAgfQog
ICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKQogICAgIHsKLSAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICByZXR1cm4gZW5zdXJlSklURGF0
YShsb2NrZXIpLm1faml0Q29kZU1hcDsKKyAgICAgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJ
VENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVNYXA7CiAgICAgfQogCiAgICAgdm9p
ZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+
JiYpOwpAQCAtNDcyLDYgKzQ2Niw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZB
cmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3Vt
ZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVl
UHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMp
IHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01NzIsNiArNTY3LDcgQEAgcHVibGljOgogICAg
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0u
Z2V0KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25z
dGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
cmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0
YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW5kZXgp
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigp
IGNvbnN0IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdp
c3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQo
KTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7
IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9m
RnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTYw
MSw2ICs1OTcsMTEgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEp
OwogICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CiAgICAgfQorICAgIFNpbXBsZUp1bXBUYWJsZSYgYmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUo
aW50IHRhYmxlSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklU
Q29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
KyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRj
aEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENv
ZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9CkBAIC02MTEsNiArNjEy
LDExIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKICAgICAg
ICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OwogICAgIH0KKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGlu
ZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07CisgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJl
ck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtl
ZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxl
SW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNzk3LDYgKzgwMyw3IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJSZXF1ZXN0
czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVi
dWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEZWJ1Z2dlclJl
cXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9kZWJ1Z2dlclJl
cXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9p
bnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMp
CkBAIC04MzgsNiArODQ1LDcgQEAgcHVibGljOgogICAgIG11dGFibGUgQ29uY3VycmVudEpTTG9j
ayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkOyAvLyBOb3QgYSBi
aXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMgdG8gc3RvcmUgdG8gaXQuCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsgfQogCiAjaWYg
RU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlIDogMjsgLy8g
REZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNiwxMSArOTE0LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhp
bnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8g
U29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0
aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3VubGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rp
b24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJs
eVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZv
ckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXpl
TExJbnRJbmxpbmVDYWNoZXMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24g
MjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXAoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spOwogICAgIAogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFw
QW5kQWN0aXZhdGUoQ29kZUJsb2NrKiBjb2RlQmxvY2spOworCisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlLCBtX2NvZGVCbG9jayk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHJldmlzaW9uIDI4MTcxOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlk
TW9kZU1ldGFkYXRhCiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggewog
ICAgIEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1l
dGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmlsZSk7IH0KIH07CiBzdGF0aWNfYXNzZXJ0KHNp
emVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsKIApAQCAtODgsNiAr
ODksNyBAQCB1bmlvbiBHZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUg
bW9kZTsKICAgICAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBt
dXN0IGJlIHplcm8gd2hlbiB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRC
eUlkTW9kZU1ldGFkYXRhLCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0
IGRlZmF1bHRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAg
ICAgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9kZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5l
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYgKzM4NSw4IEBAIGJvb2wgSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcygKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGlu
ZTsKIH0KIAorLy8gT09QUzogTWFrZSB0aGlzIHN0dWZmIHdvcmsgd2l0aCBkYXRhIGljcyB0byBu
b3QgYXNzdW1lIGlubGluZSBhY2Nlc3MuCisKIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHVi
QXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4gdGFyZ2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFk
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJh
dGlvbk1vZGVNZXRhZGF0YS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDYgKzQwLDcgQEAgT1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBUwog
CiBzdHJ1Y3QgSXRlcmF0aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90IHNlZW5Nb2RlcyB7
IDAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1vZGVzKTsgfSAKICAg
ICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9PSBzaXplb2YoSXRl
cmF0aW9uTW9kZSkpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODUsNiArMjg1LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVz
ZXQoY29uc3QgQ29uYwogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5
S2luZDo6QnlJZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlW
YWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQ
dXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CkBAIC00MzAsNiArNDMxLDIwNCBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBu
ZXdDYWNoZVR5cGU7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9t
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBlID0g
dW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHViSW5m
by5zdGFydDsgLy8gT09QUzogZG8gd2UgbmVlZCBhIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBk
b25lTG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93UGF0
aFN0YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsK
KyAgICBjYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVj
b2RlSW5kZXgpOworICAgIGNvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8u
Ynl0ZWNvZGVJbmRleCk7CisgICAgbV9jb2RlUHRyID0gc2xvd1BhdGhTdGFydExvY2F0aW9uOwor
CisgICAgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKTsKKyAgICBpZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpHZXRCeUlkICYmIHVubGlu
a2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgLy8gRm9y
IGl0ZXJhdG9yX25leHQsIHdlIGNhbid0IGNsb2JiZXIgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgZWl0
aGVyLgorICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnNjcmF0Y2gpOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6RGVsQnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRl
QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5
VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlb2Y6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpHZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAor
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTog
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAg
ICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRL
aW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9k
ZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAg
ICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAg
ICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6Cisg
ICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0
ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpQdXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQp
IHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5s
aW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVj
bWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5v
blN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJh
dGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZh
bFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OlNldFByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRl
QnlWYWw6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBi
YXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5w
cm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAg
bV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbEJ5SWQ6CisgICAgICAgIGhhc0Nv
bnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0
OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElk
ZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpJbnN0YW5jZW9mOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsK
KyAgICAgICAgcHJvdG90eXBlSXNLbm93bk9iamVjdCA9IGZhbHNlOworICAgICAgICBiYXNlR1BS
ID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgdmFsdWVHUFIg
PSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVncy5wcm90
b3R5cGVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgICAgICBt
X3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgIGNhc2UgQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZUJyYW5kOiAKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAg
IGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3Mu
cHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBt
X3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIGhhc0NvbnN0
YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJS
ZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAg
ICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlz
R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0
QnlJZFdpdGhUaGlzOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAg
ICAgICBtX3N0dWJJbmZvLT5iYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OmJhc2U7CisgICAgICAgIG1fc3R1YkluZm8tPnZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlk
V2l0aFRoaXNSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvLT5yZWdzLnRoaXNH
UFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAg
ICBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1
dEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJl
Z3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlk
UmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAg
ICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vz
c1R5cGUgPT0gQWNjZXNzVHlwZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmls
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNz
VHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IGZhbHNlOworICAgICAgICB2YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5i
cmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAg
bV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OmNoZWNrQ29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9u
IDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgQWNjZXNz
VHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlWYWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZh
bCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBI
YXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzc5LDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBp
bnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC05OCw2ICsxMDEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQg
YWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAg
REVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMg
d2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRz
IGl0c2VsZiwKQEAgLTQ0Nyw2ICs0NTIsMTggQEAgaW5saW5lIGF1dG8gYXBwcm9wcmlhdGVHZW5l
cmljR2V0QnlJZEZ1bgogICAgIH0KIH0KIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8geworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQ7Cisg
ICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kOworICAgIEVDTUFNb2Rl
IGVjbWFNb2RlOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAvLyBPT1BT
OiBEbyB3ZSBuZWVkIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxK
SVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBv
ZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRj
aGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNl
CiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTcxOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzUsNiArMTc1LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4
ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJl
dHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAg
ICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCld
LmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
PiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFu
dHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIwOCwxNSBAQCBwdWJs
aWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJl
dHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAg
ICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0
cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3Ry
dWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwg
aW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rp
b25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25zdCB7
IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51bUNhbGxl
ZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5zaWdu
ZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDYgKzM0NCwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpOwog
ICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1
cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3
YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFpc0J1aWx0
aW5GdW5jdGlvbigpOworICAgIH0KIAogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2Nr
KFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9u
U2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwpAQCAtNDEwLDYgKzQyNSw5IEBAIHByaXZhdGU6CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwog
CisgICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFjZSB0byBzdG9yZSB0aGlzIHN0dWZmPwor
ICAgIFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAg
ICBWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2ZpbGVzOwogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAt
NDU1LDYgKzQ3MywyOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5l
SnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAgIGludCBvdXRPZkxp
bmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAgICB7CisgICAgICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgICAgICBy
ZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChvZmZzZXQpOworICAgIH0KKworICAgIHVuc2lnbmVk
IGFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQg
PSBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX2JpbmFyeUFyaXRoUHJv
ZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3VuYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7Cisg
ICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5hcnlBcml0aFByb2ZpbGUoKSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQmluYXJ5QXJpdGhQcm9maWxl
JiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1cm4gbV9iaW5hcnlBcml0aFBy
b2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHVuYXJ5QXJpdGhQcm9maWxlKHVu
c2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CiAKIHByaXZhdGU6
CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQsIGludD47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZpc2lvbiAyODE3MTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMSw5ICsxMDEsMTggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0
dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9
IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZzZXRJbk1ldGFkYXRhVGFibGUo
Y29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9pc0ZpbmFsaXpl
ZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9IG1faXMzMkJpdCA/IG9mZnNl
dFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9w
Y29kZUlEXTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKE9wY29kZTo6
TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9CisKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIHNfb2Zmc2V0VGFibGVFbnRyaWVzID0gTlVNQkVSX09GX0JZVEVDT0RF
X1dJVEhfTUVUQURBVEEgKyAxOyAvLyBvbmUgZXh0cmEgZW50cnkgZm9yIHRoZSAiZW5kIiBvZmZz
ZXQ7CiAKICAgICAvLyBOb3QgdG8gYnJlYWsgYWxpZ25tZW50IG9mIDMyYml0IG9mZnNldCB0YWJs
ZSwgd2Ugcm91bmQgdXAgc2l6ZSB3aXRoIHNpemVvZihPZmZzZXQzMikuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyODE3
MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAgdGVtcGxhdGU8dW5zaWduZWQgbnVtYmVyT2ZC
dWNrZXRzQXJndW1lbgogc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRzQXJndW1lbnQ7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNwZWNGYWlsQnVja2V0cyA9
IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRleE1hc2sgPSBudW1i
ZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgdG90YWxOdW1i
ZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNGYWlsQnVja2V0czsK
ICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKQEAgLTEzNCw3ICsxMzMsNyBAQCBzdHJ1Y3Qg
VmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9u
OwogICAgIH0KLSAgICAKKwogICAgIEVuY29kZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJl
ck9mQnVja2V0c107CiAKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9u
ZSB9OwpAQCAtMTU2LDYgKzE1NSw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVy
T2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRo
TG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAgICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmls
ZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxl
LCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OTgsNyArMTU5OCw3IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnkKICAgICAgICAgZW1pdFVuYXJ5
T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBvcF9uZWdhdGU6
Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0eXBlKTsKKyAgICAgICAg
T3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUsIG1fY29kZUJsb2NrLT5hZGRVbmFy
eUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBvcF9iaXRub3Q6CiAg
ICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90Pihkc3QsIHNyYyk7CkBAIC0xNjk2LDEzICsxNjk2
LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VHlwZU8KIAogUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbmMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewot
ICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BJbmM6OmVtaXQodGhpcywgc3Jj
RHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNy
Y0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWMoUmVnaXN0
ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BE
ZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUo
KSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24g
MjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODIsNyArNjgyLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBSZWdpc3RlcklEKj4KICAgICAgICAgZW1pdEJpbmFyeU9wKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3JjMiwgT3BlcmFuZFR5
cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBk
c3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAgICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMs
IGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1fY29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2Zp
bGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODg5LDcgKzg4OSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIAogICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nh
c2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIs
IEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAg
ICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBh
eWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEp
OwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg5Niw3ICs4OTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2Rl
KiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAg
aWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWls
Q2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0gewogICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAg
IENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxs
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5ODUsNyArMzk4NSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmEKICAgICBSZWdpc3RlclNl
dCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwogCiAgICAgSklUUHV0QnlW
YWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZH
SklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIHVzZWRSZWdp
c3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVP
cmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgdXNlZFJlZ2lzdGVy
cywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VHUFIpLCBKU1ZhbHVlUmVn
czo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIEludmFsaWRHUFJSZWcsIHN0
dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7
CiAKQEAgLTE0NzQ3LDcgKzE0NzQ3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
Z1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5ncHIoKTsKIAotICAgIG1faml0
LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNj
b3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJbmRleCk7CisgICAgbV9qaXQubG9n
U2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVS
ZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKSksIGNhbGxT
aXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyODE3MTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzMTcsNyArNDMxNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBHUFJSZWcg
c3R1YkluZm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFt
cy5ncFNjcmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgICAgICBhdXRvIGdlbmVy
YXRvciA9IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAg
ICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBj
YWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAgICAgICAgICAgICBqaXQu
Y29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0
ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAgICAgICAgICAgICAgICBwYXJh
bXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBz
dHViSW5mb0dQUik7CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVy
dHlJc1N5bWJvbCA9IHRydWU7CkBAIC0xMDM1NSw3ICsxMDM1NSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCkt
PmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAK
LSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwg
WyZdIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVE
YXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
aml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICAgICAg
fSk7CkBAIC0xMDY5OCw3ICsxMDY5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VE
YXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5r
SW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAg
ICAgICAgICAgICAgICB9KTsKQEAgLTEwOTc5LDcgKzEwOTc5LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQ
YXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJl
Z1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxT
bG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3b3JraW5nIGNvcHkpCkBAIC00
MiwxNyArNDIsMjIgQEAgY2xhc3MgTWV0YWRhdGEKICAgICBkZWYgc3RydWN0KG9wKQogICAgICAg
ICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBm
aWVsZHMpCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBnZW5lcmF0
ZU9mZnNldE9mKQogICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAg
ICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAgICAgICAgICAgICAgICAgICIj
e3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1c
biN7cHJlZml4fX07IgorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tj
b252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSwgZmFsc2UpfVxuI3twcmVmaXh9fTsi
CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0
eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFt
ZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIiN7cHJlZml4fSN7
dHlwZS50b19zfSBtXyN7ZmllbGROYW1lfTsiCisgICAgICAgICAgICAgICAgICAgIGlmIGdlbmVy
YXRlT2Zmc2V0T2YKKyAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyAiXG4i
ICsgInN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51cGNhc2V9I3tmaWVs
ZE5hbWVbMS4uXX0oKSB7IHJldHVybiBPRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0p
OyB9IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
CiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmQuam9pbigiXG4iKQogICAgICAg
ICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAgICAgICIsIEBmaWVs
ZHMpCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcywg
dHJ1ZSkKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBpZiBAaW5pdGlhbGl6ZXJzICYm
IChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY5OCw4ICs2OTgsMTMgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZl
cwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxs
V2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgaW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwg
Q2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BS
SW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rh
c2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxs
TG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0
clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MTgsNiArMTcxOCw3IEBAIHB1
YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91
dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOwogICAgIAogICAgIHZvaWQg
bWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNr
Rm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQ
bGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5l
SklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBz
aXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVz
dWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUoKQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0
IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwog
ICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAg
ICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgi
Y29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
Q2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBA
QCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIo
c2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdz
LCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBh
Y2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRP
RihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNS
ZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRv
d1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7
Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkp
OwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNh
bGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlj
a2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9u
QXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hp
Y2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODQwLDcgKzg0MCwxOCBA
QCBwdWJsaWM6CiAgICAgLy8gVGhlc2Ugb3BlcmF0aW9ucyBjbG9iYmVyIGFsbCB2b2xhdGlsZSBy
ZWdpc3RlcnMuIFRoZXkgYXNzdW1lIHRoYXQgdGhlcmUgaXMgcm9vbSBvbiB0aGUgdG9wIG9mCiAg
ICAgLy8gc3RhY2sgdG8gbWFyc2hhbGwgY2FsbCBhcmd1bWVudHMuCiAgICAgdm9pZCBsb2dTaGFk
b3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0
Y2gxLCBHUFJSZWcgc2NvcGUpOwotICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
R1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwg
Q29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29k
ZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9j
a1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCisgICAgeworICAg
ICAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwor
ICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFp
bE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKKyAgICAgICAgc3RvcmVWYWx1ZSh0aGlzUmVncywg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93
UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsK
KyAgICAgICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNU
X09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOworICAgICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93
UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUlu
ZGV4KSkpOworICAgIH0KKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRoZSBQ
YWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2b2lkIGVuc3Vy
ZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2Ny
YXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29kZUJs
b2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVE
YXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVn
aXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07Ci0gICAgY29u
c3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVCbG9j
ay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBy
ZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCShyZXZp
c2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIEdQ
UlJlZyBudW1iZXJUYWdSZWdpc3RlciB7IEludmFsaWRHUFJSZWcgfTsKIAogICAgIHZvaWQgc2V0
dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayopOworICAgIHZvaWQgc2V0dXBDYWxsZWVT
YXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0Kik7CiAjZW5kaWYKICAgICBW
YWx1ZVJlY292ZXJ5IGNhbGxlZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgOiBKU0lu
dGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgbnVs
bHB0cikKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVs
cyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCiAgICAg
LCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAgLTc3LDYgKzc3LDkgQEAgSklUOjpK
SVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJv
ZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25zdGFudCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7CisgICAg
bV9wcm9maWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICBtX3VubGlua2VkQ29kZUJsb2Nr
ID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAt
OTAsOCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAg
ICAgICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0gICAgCi0gICAgc2tp
cE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25z
OjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyht
X2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIHNraXBP
cHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6
ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVz
RnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9w
RW50cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNiwxOCBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdy
aXRlKFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVy
VG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRl
clRvU2V0KQogewogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9p
bnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25seUNoZWNrKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlKQordm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25seUNoZWNrKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhclJlYWRPbmx5V2F0Y2hw
b2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
c2NyYXRjaEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFyUmVhZE9ubHlXYXRjaHBvaW50KSksIHNjcmF0
Y2hHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHNjcmF0
Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0lu
dmFsaWRhdGVkKSkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9m
ZnNldCgpCkBAIC0xMjksNyArMTM1LDcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9m
ZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOworICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CiAgICAg
SnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
ICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsKQEAgLTE4MSwyMSArMTg3LDQx
IEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWMKICAgICBzbG93UGF0
aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblBy
b2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENv
ZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOworICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVzdWx0KTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVE
YXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGJyYW5jaFRlc3RQdHIo
WmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJl
RGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uUmFyZURhdGE6
Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCByZXN1bHQp
OworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBG
dW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkpLCByZXN1
bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25F
eGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSksIHJlc3VsdCk7CisKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpvZmZzZXRP
ZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVz
dWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworfQorCiB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAg
ICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgZGF0
YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4iKTsKICAgICAKICAg
ICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5l
KCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxvY2stPmluc3RydWN0
aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fdW5saW5rZWRD
b2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAKICAgICBtX2Nh
bGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJsb2NrLT52bSgpOwor
ICAgIFZNJiB2bSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnZtKCk7CiAgICAgQnl0ZWNvZGVJbmRl
eCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7CisKKyAgICAvLyBPT1BTOiBNYXliZSBvbmx5IGRvIHRo
aXMgaWYgd2UgZGlzYWJsZSBzaGFyaW5nIHNvbWVob3c/CisgICAgLyoKICAgICBpZiAobV9sb29w
T1NSRW50cnlCeXRlY29kZUluZGV4ICYmIChtX2NvZGVCbG9jay0+aW5oZXJpdHM8UHJvZ3JhbUNv
ZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0czxNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrPih2bSkpKSB7CiAgICAgICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgb3B0aW1pemF0aW9u
IGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFtQ29kZUJsb2NrJ3MgZXhhY3RseSBvbmNlLgogICAg
ICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBiZSBpbnZhbGlkIG90aGVyd2lzZS4gV2hl
biB0aGUgTExJbnQgZGV0ZXJtaW5lcyBpdCB3YW50cyB0bwpAQCAtMjM2LDYgKzI2Miw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KKyAgICAqLwogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAw
OwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CkBAIC0yNzgsOSArMzA1LDkg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAgIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewotICAgICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAgICAgICAgIHBy
b2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7Ci0gICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJ
RF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKKyAg
ICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigp
LT5jb2RlQmxvY2soKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNv
ZGVPZmZzZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRl
cihjdHguZnAoKSksICIgQCAiLCBjdHguZ3ByPENvZGVCbG9jayo+KHJlZ1QwKSk7CiAgICAgICAg
ICAgICB9KTsKICAgICAgICAgfQogCkBAIC01MjcsNyArNTU0LDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBt
X2J5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgp
LnB0cigpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5w
dHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAg
ICAgICAgIGRhdGFMb2dMbigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgIiwg
bV9ieXRlY29kZUluZGV4LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgpKTsKQEAg
LTU0NSw4ICs1NzIsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAg
ICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkp
KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxv
Y2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgewor
ICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+
KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRl
Y29kZU9mZnNldCwgIl0gU0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJh
d1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwog
ICAgICAgICB9CkBAIC02NzQsMTkgKzcwMSwyNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKK3ZvaWQgSklUOjplbWl0TWF0ZXJpYWxpemVNZXRhZGF0
YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpCit7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21ldGFkYXRhR1BSKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkp
LCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6
Om9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7Cit9CisKIHZvaWQg
SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKIHsKLSAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fY29kZUJsb2Nr
LT5jYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICAvLyBPT1BTOiBNYXliZSB0aGlzIHNob3VsZCBiZSBk
b25lIG9uIHVubGlua2VkIGNvZGUgYmxvY2s/CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2
ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBzd2l0Y2gg
KGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAgICAgIG1fY2FuQmVP
cHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZh
bHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVB
bmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwotICAgICAgICBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmls
aW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTY5NCwzNSArNzI4
LDM4IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIAotICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkp
IHsKKyAgICAvLyBPT1BTOiBoYW5kbGUgdGhpcyBlbHNld2hlcmU/CisgICAgc3dpdGNoIChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7CiAgICAgY2FzZSBHbG9iYWxDb2RlOgogICAg
IGNhc2UgTW9kdWxlQ29kZToKICAgICBjYXNlIEV2YWxDb2RlOgotICAgICAgICBtX2NvZGVCbG9j
ay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgbV9wcm9maWxlZENv
ZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBGdW5jdGlvbkNvZGU6CiAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFk
eSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2Fs
bC4KICAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KLSAgICAgICAg
bV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShsZXZlbCkg
JiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9wcm9m
aWxlZENvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGxldmVs
KSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSkgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9m
VW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5z
dXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBs
ZUp1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVz
KCkpOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShs
b2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBU
YWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVz
KCkpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2st
Pm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N3aXRj
aEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fdW5saW5rZWRDb2Rl
QmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpOworICAgICAgICBpZiAo
bV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMoKSkKKyAgICAgICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9y
PFN0cmluZ0p1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0
cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYg
T3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpKSkKLSAgICAgICAgbV9k
aXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9jb2RlQmxvY2spOwor
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9m
aWxlcigpKSkpIHsKKyAgICAgICAgLy8gT09QUzogYnVpbGQgYSBkaXNhc3NlbWJsZXIgb2ZmIHVu
bGlua2VkIGNvZGUgYmxvY2sKKyAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJ
VERpc2Fzc2VtYmxlcj4obV9wcm9maWxlZENvZGVCbG9jayk7CisgICAgfQogICAgIGlmIChVTkxJ
S0VMWShtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpKSB7CisgICAgICAgIC8vIE9PUFM6IGJ1
aWxkIHByb2ZpbGVyIGRpc2Fzc2VtYmxlciBvZmYgdW5saW5rZWQgY29kZSBibG9jawogICAgICAg
ICBtX2NvbXBpbGF0aW9uID0gYWRvcHRSZWYoCiAgICAgICAgICAgICBuZXcgUHJvZmlsZXI6OkNv
bXBpbGF0aW9uKAotICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+
ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fY29kZUJsb2NrKSwKKyAgICAgICAgICAgICAgICBtX3ZtLT5t
X3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX3Byb2ZpbGVkQ29kZUJs
b2NrKSwKICAgICAgICAgICAgICAgICBQcm9maWxlcjo6QmFzZWxpbmUpKTsKLSAgICAgICAgbV9j
b21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlciwgbV9jb2RlQmxvY2spOworICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5
dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX3Byb2ZpbGVkQ29kZUJsb2Nr
KTsKICAgICB9CiAgICAgCiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRl
bShsYWJlbCgpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpKTsKQEAgLTc0MiwxMSArNzc5
LDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAg
bm9wKCk7CiAKICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICBp
ZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpCisgICAg
ICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSgpOwogCiAgICAgTGFiZWwgYmVn
aW5MYWJlbCh0aGlzKTsKIAotICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGludCBmcmFtZVRv
cE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXplID0gLWZyYW1lVG9wT2Zm
c2V0OwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVUb3BPZmZzZXQpLCBjYWxsRnJhbWVS
ZWdpc3RlciwgcmVnVDEpOwogICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CkBAIC03NTcsMTYg
Kzc5NSwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAg
bW92ZShyZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CiAKLSAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdFNhdmVD
YWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7
CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsK
IAotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKKyAg
ICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsK
ICAgICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hvdWxkRW1p
dFByb2ZpbGluZygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsg
YXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7Cisg
ICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX3VubGlua2VkQ29kZUJsb2Nr
LT5pc0NvbnN0cnVjdG9yKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
ID4gMSkpIHsKKyAgICAgICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBGaXhl
ZFZlY3Rvcjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMg
aXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGlu
ZyBzaXRlICh0bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1
dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCi0gICAg
ICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50
KQorICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9y
KCkgJiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1Ro
aXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKICNpZiBV
U0UoSlNWQUxVRTY0KQpAQCAtNzc3LDEyICs4MTksMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRM
aW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxG
cmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
cGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgICAgICAgICAgICAgbG9h
ZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CiAjZW5kaWYKLSAg
ICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fY29kZUJsb2NrLT52YWx1ZVBy
b2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAg
IHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwgYXJndW1lbnQgKiBzaXplb2Yo
VmFsdWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlQo
IUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCghSklUQ29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAK
ICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAgICAgIG1fdm0tPmppdFNpemVTdGF0
aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhpcyk7CkBAIC03OTksMjQg
Kzg0MSwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAg
bV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19j
YXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNl
cHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2NrKTsKKyAg
ICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ss
IHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRp
b24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIHJlZ1QwKTsKIAogICAgIC8vIElm
IHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciByZXF1aXJlIGFyaXR5IGZp
eHVwLgotICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2RlQmxvY2stPm1fbnVtUGFy
YW1ldGVycyAhPSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4
dXAgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgIT0gMTsKKyAgICBpZiAo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWly
ZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxhYmVsKCk7Ci0gICAgICAg
IHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlu
bGluZWQpOworCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgICAgIGVtaXRQ
dXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KTsKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKHJlZ1QwKTsKKyAg
ICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpv
ZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAKICAgICAgICAgbG9hZDMyKHBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMSk7
Ci0gICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX2Nv
ZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOworICAg
ICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV91bmxpbmtl
ZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwog
CiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAKICAgICAgICAg
aWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3Io
KSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVj
aywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAp
OworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24o
bV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0
QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBhcmd1bWVudEdQUjApOwogICAg
ICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIp
LmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTgzOSw3ICs4ODQsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5z
ZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3Jp
Z2luKCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+
KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
QmFzZWxpbmVKSVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0
cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV91bmxpbmtlZENvZGUsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKICAgICBsaW5rKCk7CiB9CiAK
QEAgLTg1OCw4ICs5MDMsOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIHN3aXRjaCAocmVj
b3JkLnR5cGUpIHsKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZToKICAgICAg
ICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcjogewotICAgICAgICAgICAgY29uc3QgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0
Y2hKdW1wVGFibGVbdGFibGVJbmRleF07CiAgICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0aURl
ZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1ti
eXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgp
OyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB1bmxpbmtlZFRhYmxl
Lm1fYnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3MSw4ICs5MTYsOCBAQCB2b2lkIEpJVDo6bGluaygp
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6U3RyaW5nOiB7Ci0gICAg
ICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5r
ZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFN0
cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5k
ZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGxvY2F0aW9uIDogdW5saW5r
ZWRUYWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hPZmZzZXQ7CkBAIC05MDYsMzIgKzk1MSwzNSBA
QCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHJlY29yZC5m
cm9tLCByZWNvcmQuY2FsbGVlKTsKICAgICB9CiAKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyht
X2dldEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRC
eVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRz
V2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5
SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMs
IHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBwYXRj
aEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIHBhdGNoQnVm
ZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIHBhdGNoQnVmZmVyKTsK
LSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAg
ZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbnN0YW5jZU9mcywgcGF0Y2hCdWZmZXIpOwotICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMsIHBhdGNoQnVmZmVyKTsK
KyAgICBhdXRvIGZpbmFsaXplSUNzID0gWyZdIChhdXRvJiBnZW5lcmF0b3JzKSB7CisgICAgICAg
IGZvciAoYXV0byYgZ2VuIDogZ2VuZXJhdG9ycykgeworICAgICAgICAgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mby0+c3RhcnQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihnZW4ubV9zdGFydCk7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
LT5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KGdlbi5tX2RvbmUpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+c2xvd1Bh
dGhTdGFydExvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0
clRhZz4oZ2VuLm1fc2xvd1BhdGhCZWdpbik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZmlu
YWxpemVJQ3MobV9nZXRCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeVZhbHMpOworICAg
IGZpbmFsaXplSUNzKG1fZ2V0QnlJZHNXaXRoVGhpcyk7CisgICAgZmluYWxpemVJQ3MobV9wdXRC
eUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9wdXRCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1f
ZGVsQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX2luQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeVZhbHMpOworICAgIGZpbmFsaXpl
SUNzKG1faW5zdGFuY2VPZnMpOworICAgIGZpbmFsaXplSUNzKG1fcHJpdmF0ZUJyYW5kQWNjZXNz
ZXMpOwogCiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlvbkluZm8gOiBtX2NhbGxDb21waWxhdGlv
bkluZm8pIHsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5j
YWxsTGlua0luZm87Ci0gICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKLSAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZv
LnNsb3dQYXRoU3RhcnQpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CisgICAgICAgIFVu
bGlua2VkQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxpbmtlZENhbGxM
aW5rSW5mbzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pOwogICAg
IH0KIAotICAgIHsKLSAgICAgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNl
dCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgewotICAgICAgICAgICAgaWYg
KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGppdENv
ZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0p
KTsKLSAgICAgICAgfQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChqaXRDb2Rl
TWFwQnVpbGRlci5maW5hbGl6ZSgpKTsKKyAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFw
QnVpbGRlcjsKKyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVP
ZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKKyAgICAgICAgaWYg
KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQorICAgICAgICAgICAgaml0Q29kZU1h
cEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwog
ICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkpIHsK
QEAgLTk0MCwyNiArOTg4LDM3IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICB9CiAKICAgICBpZiAo
VU5MSUtFTFkobV9jb21waWxhdGlvbikpIHsKKyAgICAgICAgLy8gT09QUwogICAgICAgICBpZiAo
T3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpCiAgICAgICAgICAgICBt
X2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9uLmdldCgpLCBwYXRj
aEJ1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGls
YXRpb24obV9jb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAgICAgICAgbV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqbV9j
b21waWxhdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
LmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVu
aXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRl
ciksIHBhdGNoQnVmZmVyKTsKICAgICAKKyAgICAvLyBPT1BTOgogICAgIENvZGVSZWY8SlNFbnRy
eVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpT
RW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJp
bmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmlu
ZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5
UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGly
ZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkp
OworICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgQmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwg
d2l0aEFyaXR5Q2hlY2spKTsKKworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gV1RG
TW92ZShtX3VubGlua2VkQ2FsbHMpOworICAgIG1faml0Q29kZS0+bV9ldmFsQ2FsbExpbmtJbmZv
cyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3VubGlu
a2VkU3R1YkluZm9zID0gV1RGTW92ZShtX3VubGlua2VkU3R1YkluZm9zKTsKKyAgICBtX2ppdENv
ZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAg
ICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1faml0Q29kZU1hcCA9IGppdENvZGVN
YXBCdWlsZGVyLmZpbmFsaXplKCk7CisgICAgbV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRo
SUNzKTsKKyAgICBtX2ppdENvZGUtPm1fY29uc3RhbnRQb29sID0gV1RGTW92ZShtX2NvbnN0YW50
UG9vbCk7CiAKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dG
KCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ss
IHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0
LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CisgICAgICAgIGRhdGFM
b2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV91bmxpbmtl
ZENvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0
cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKIH0K
IAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZCgpCitDb21waWxh
dGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayogY29kZUJsb2Nr
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogCkBAIC05
NjgsMjUgKzEwMjcsMjEgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRo
cgogCiAgICAgbV9saW5rQnVmZmVyLT5ydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MoKTsK
IAotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAgICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KGxvY2tlciwgQ29kZUJs
b2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5rKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkg
ewotICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fY29kZUJsb2NrLT5leGNlcHRpb25I
YW5kbGVyKGkpOwotICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4K
LSAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gbV9jb2RlQmxvY2stPmppdENvZGVNYXAoKS5m
aW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5k
bGVyUHRyVGFnPigpOwotICAgIH0KKyAgICAvLyBPT1BTOiBEb24ndCB0aGluayB0aGlzIGlzIGRv
aW5nIGFueXRoaW5nIGFueW1vcmUuCisgICAgLy97CisgICAgLy8gICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAvLyAgICBtX2NvZGVCbG9jay0+
c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwor
ICAgIC8vfQogCisgICAgLy8gT09QUzogc2hvdWxkIGxpdmUgb24gQmFzZWxpbmVKSVRDb2RlLgog
ICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwKQogICAgICAgICBtX2NvZGVCbG9jay0+c2V0UENU
b0NvZGVPcmlnaW5NYXAoV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKSk7CiAKICAgICBtX3Zt
LT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAg
ICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2ppdENvZGUtPnNpemUoKSkgLwotICAgICAgICBz
dGF0aWNfY2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlv
bnNTaXplKCkpKTsKIAotICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZS5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVD
b2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIHJldHVybiBDb21waWxhdGlv
blN1Y2Nlc3NmdWw7CiB9CkBAIC05OTgsMTEgKzEwNTMsMTEgQEAgc2l6ZV90IEpJVDo6Y29kZVNp
emUoKSBjb25zdAogICAgIHJldHVybiBtX2xpbmtCdWZmZXItPnNpemUoKTsKIH0KIAotQ29tcGls
YXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9u
RWZmb3J0IGVmZm9ydCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgZG9NYWluVGhyZWFk
UHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgY29tcGlsZUFuZExpbmtXaXRob3V0Rmlu
YWxpemluZyhlZmZvcnQpOwotICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAg
IHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZChjb2RlQmxvY2spOwogfQogCiB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCkBAIC0xMDQyLDE0ICsxMDk3LDE0IEBA
IHZvaWQgSklUOjpkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUMKICAgICAgICAgbV92bS0+
dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKCptX3ZtLCAiUHJlcGFyaW5nIGZv
ciBKSVQgY29tcGlsYXRpb24uIl9zKTsKIH0KIAotdW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVy
Q291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0
ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEFTU0VSVChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkgPT0gV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSkpOwogCiAgICAgcmV0
dXJuIHJvdW5kTG9jYWxSZWdpc3RlckNvdW50Rm9yRnJhbWVQb2ludGVyT2Zmc2V0KGNvZGVCbG9j
ay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVn
aXN0ZXJzKTsKIH0KIAotaW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayog
Y29kZUJsb2NrKQoraW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJs
b2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZy
YW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2spIC0gMSkub2Zmc2V0KCk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDQwIEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCisgICAgY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIHVzaW5nIENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICAgICAgZW51bSBjbGFz
cyBUeXBlIDogdWludDhfdCB7CisgICAgICAgICAgICBHbG9iYWxPYmplY3QsCisgICAgICAgICAg
ICBDYWxsTGlua0luZm8sCisgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAg
ICAgIEZ1bmN0aW9uRGVjbCwKKyAgICAgICAgICAgIEZ1bmN0aW9uRXhwciwKKyAgICAgICAgfTsK
KworICAgICAgICBzdHJ1Y3QgVmFsdWUgeworICAgICAgICAgICAgVHlwZSB0eXBlOworICAgICAg
ICAgICAgUGFja2VkUHRyPHZvaWQqPiBwYXlsb2FkOworICAgICAgICB9OworCisgICAgICAgIEpJ
VENvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworICAgICAgICBKSVRD
b25zdGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworCisg
ICAgICAgIENvbnN0YW50IGFkZChUeXBlIHR5cGUsIFBhY2tlZFB0cjx2b2lkKj4gcGF5bG9hZCA9
IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29u
c3RhbnRzLnNpemUoKTsKKyAgICAgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5
cGUsIHBheWxvYWQgfSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisK
KyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50cy5zaXplKCk7
IH0KKyAgICAgICAgVmFsdWUgYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRz
W2ldOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBWZWN0b3I8VmFsdWU+IG1fY29uc3RhbnRz
OworICAgIH07CisKICAgICBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiAKICAgICBjbGFzcyBB
cnJheUFsbG9jYXRpb25Qcm9maWxlOwpAQCAtMTQ5LDkgKzE4Myw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
bzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOwor
ICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50Owog
ICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRy
ZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsK
QEAgLTE3OCwxOCArMjEyLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWTSYgdm0oKSB7
IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lkIGNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwotICAgICAgICBD
b21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBDb21waWxh
dGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAgICAgICAgc2l6
ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJh
dGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBDb21waWxhdGlv
blJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2Rl
SW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9j
aywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICBy
ZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShj
b2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdW5zaWduZWQg
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOwotICAgICAgICBzdGF0aWMgaW50IHN0
YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOworICAgICAgICBzdGF0
aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogCiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNv
bXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29u
ZHMgdG90YWxDb21waWxlVGltZSgpOwpAQCAtMTk5LDcgKzIzMyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAgICAgICAgdm9pZCBw
cml2YXRlQ29tcGlsZVNsb3dDYXNlcygpOwogICAgICAgICB2b2lkIGxpbmsoKTsKLSAgICAgICAg
Q29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQpOwor
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqLCBKSVRD
b21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQg
Y29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2Fs
bChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQpAQCAtMjIzLDYg
KzI1NywzMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWRQdHJGcm9tTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkMzJGcm9tTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkOEZyb21NZXRh
ZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAg
IHZvaWQgc3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90
IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qg
b2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAg
IHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6
ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25l
ZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3Qo
R1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lz
dGVyLCBHUFJSZWcpOworCisgICAgICAgIHZvaWQgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblBy
b2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdUMCk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25D
aGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5kbGVyKTsKQEAgLTI1OCwxNiArMzE2LDE2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6
Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MKICAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxf
dmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
Ci0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0lu
Zm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAg
ICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxs
TGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYs
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChj
b25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAg
ICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5m
byosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNh
bGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBA
IC0yOTEsMTAgKzM0OSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gVGhpcyBhc3N1
bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMg
aXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJS
ZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwg
SlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0
YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2Rl
JiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNl
CiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1Zh
bHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBAIC0zMDcsNiArMzY1
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJ
RCBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0
ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
ICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29k
ZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01OTIsNyArNjU0LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwpAQCAtNjI2LDE0ICs2ODcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAg
ICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUpOwot
ICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nl
c3NUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNj
ZXNzVHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQg
ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IElu
c3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNr
KFJlc29sdmVUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBlbWl0VmFyUmVh
ZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lk
IGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKICAg
ICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02
NDUsNyArNzA2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0
R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsK
ICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2
b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9pZCBl
bWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAgICB2
b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFy
KFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpAQCAtNjU0LDYgKzcxNSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVy
SUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgICAgICBib29sIGlzS25vd25DZWxsKFZp
cnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1
YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJl
Z2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lz
dGVyKTsKQEAgLTY5NSwyNiArNzU3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBy
ZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gUmVzb2x2
ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7CiAgICAgICAgIH0KIAot
I2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAot
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9n
ZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9S
X0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3Vu
ZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmso
UmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KLSAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1vZHVsZVZhciBiZWNhdXNlIGl0
IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4gdXNlIGEgdGh1bmsuCi0gICAg
ICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlc2Ug
dHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2
ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7
Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJl
c29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7
Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VO
RVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZl
U2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdl
dEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0
aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZl
VHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYp
OwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2
YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CkBAIC03NTksMTAgKzgwMywxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxs
RnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4pOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgQWRkcmVz
cywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVu
YWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsPgpAQCAtODIwLDIwICs4NjQsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKEFkZHJlc3MoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBPcGVy
YXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1
bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpD
YWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRh
LCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4u
LiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxP
cGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVy
YXRpb24sIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9u
VHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZS4u
LiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlv
blR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRz
Rm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5cGU+KHRhcmdldCwgYXJncy4uLik7Ci0gICAgICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShtZXRhZGF0YSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQu
b2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOwogICAgICAgICB9CiAK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJn
cz4KQEAgLTkxOCwyNSArOTYyLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERG
R19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0
aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVy
biBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFBy
b2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAg
ICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wg
Y2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBF
bmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJu
ZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQu
CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAj
ZW5kaWYKIAorICAgICAgICB2b2lkIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQ
b29sUmVnaXN0ZXJzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVz
KCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRh
dGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNy
b3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0g
ICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQg
YnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9w
UHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAg
ICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAogICAg
ICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtOTYzLDkgKzEwMDAsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2Vz
OwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCi0gICAgICAgIEhh
c2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwotICAgICAgICBI
YXNoTWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQcm9maWxl
czsKLQogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExp
c3QgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7CiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQpAQCAtOTk5LDExICsxMDMzLDI0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dlbmVy
YXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAogICAg
ICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXpl
ZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAg
IEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgICAgIFJl
ZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgICAgIE1hdGhJQ0hvbGRlciBtX21h
dGhJQ3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1faml0Q29kZTsKKworICAg
ICAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+
IG1fdW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExp
bmtJbmZvczsKKyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5r
ZWRTdHViSW5mb3M7CisgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0
Y2hKdW1wVGFibGVzOworICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
X21ldGFkYXRhR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUjsKKyAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19jb25zdGFudHNHUFIgPSBMTEludDo6UmVnaXN0
ZXJzOjpwYkdQUjsKKworICAgICAgICBzdHJ1Y3QgTm90QUNvZGVCbG9jayB7IH0gbV9jb2RlQmxv
Y2s7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFu
dENoYXIob3AyKSkgewogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICsz
NDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAg
IH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVn
VDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVy
byA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90
IEludC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCAKIAogICAgIGVtaXRM
b2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVy
byA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcy
Miw4IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJp
dGhQcm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5s
aW5rZWRDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZWdhdGU+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1f
bWF0aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJQyk7CiAgICAgLy8gRklYTUU6IGl0
IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5j
ZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0
ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9m
aWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAtODk5LDggKzkwNCw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4o
KS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFk
ZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5
QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubV9wcm9maWxlSW5k
ZXgpOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0aFBy
b2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9u
LCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0K
QEAgLTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1h
dGhJQzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5s
aW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5s
aW5lQ29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0
aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BS
KTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0g
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1Jl
Z3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0aFBy
b2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwg
c3JjUmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAxNSwxMCArMTAyMSwxMSBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0
T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MiwgcmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0
Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
bGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIs
IGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJl
Z3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Q
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRS
ZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEzICsxMDYyLDE0IEBAIHZvaWQgSklUOjpl
bWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93
UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJh
dGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1Q
dHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJh
dGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwg
c3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJp
dGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9K
SVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25f
R0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVz
dGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0
byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIwLDEzICsxMTI4LDE0IEBAIHZvaWQgSklU
OjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1p
dFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxk
U2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJh
dGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxK
X0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVn
cywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlv
biwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7
CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pK
TWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWlj
PihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQog
ICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsxMTc1LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmls
aW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgYXJp
dGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1fcHJvZmlsZUluZGV4KTsKIAogICAgIFNuaXBw
ZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwog
ICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5z
ZWNvbmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29u
c3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21h
dGhJQ3MuYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRo
SUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9w
TXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCku
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJ
QyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFy
aXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsKKyAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2lu
c3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVt
aXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25W
YWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzMiw3ICsyMzIsNyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2Fs
bEV2CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAg
ICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpj
YWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1Qx
LCByZWdUMCk7CiAgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsK
QEAgLTMyNCw3ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVj
dGlvCiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2Vk
Q29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAg
ICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxT
bG93Q2FzZShjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
KS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOwogfQogCkBAIC01MywxMCArNTMsOSBAQCBzdGQ6
OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6
Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9
IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
IGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQg
Y2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50
SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBj
aGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50Pihz
dGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCkBA
IC02NCw3ICs2Myw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QK
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJP
ZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1Qw
KTsKICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qw
KTsKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVj
a3BvaW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIHJlZ1QwLCByZWdUMCk7CiAgICAgICAg
IGRvbmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTc4LDcgKzc3LDcgQEAgc3RkOjplbmFibGVf
aWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29k
ZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQp
CiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
OwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsK
QEAgLTkxLDcgKzkwLDggQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZAogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFy
Z3VtZW50czsKICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXpl
RnJhbWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgLWZpcnN0RnJlZVJl
Z2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7
CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCByZWdUMCwgcmVnVDEsIC1maXJzdEZy
ZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1m
aXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0aGlz
LCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTAxLDE0ICsxMDEsMTYgQEAgSklUOjpjb21waWxl
U2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9w
ZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UKICAgICAgICAgc2V0
dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0
aW9uKHNldHVwT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBy
ZWdUMywgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNv
dW50LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQ
YXlsb2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7Ci0gICAgSnVtcCBub3RCaWdnZXN0ID0g
YnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMiwgaW5mby0+
YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7CisgICAgbG9hZENvbnN0
YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVn
VDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
KSwgcmVnVDMpOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMywg
cmVnVDIpOworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6
b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CiAgICAgbm90QmlnZ2Vz
dC5saW5rKHRoaXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgpAQCAtMTI3LDE2
ICsxMjksMTYgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpCiB0ZW1wbGF0
ZTw+CiBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVjb2Rl
KQogewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7Ci0g
ICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6
Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19j
YXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkp
LCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVj
b2RlKTsKIApAQCAtMTQ4LDcgKzE1MCw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyog
aW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFk
ZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxs
TGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRl
Y29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE1OCw0NiBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNl
dCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1
YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhv
dXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5
dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRh
aWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCi17Citib29sIEpJVDo6
Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25l
ZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkgewogICAgIHJldHVybiBmYWxzZTsKIH0KIAog
dGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBi
eXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkK
K2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVu
bGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxs
RnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRB
cmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVy
ID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxz
ID0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRh
ID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+
bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtYmVy
VGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICBzaHVmZmxlRGF0
YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6
ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29k
ZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7
ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgc2h1ZmZsZURh
dGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0
YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5n
VGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMp
OwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAgICAgICBWYWx1ZVJlY292ZXJ5
OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxl
ZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURh
dGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5
OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0YS0+c2V0dXBDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZs
ZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlua0lu
Zm9Db25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5m
bzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsK
KyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0YSkucHJlcGFyZUZv
clRhaWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKworICAg
IHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8tPmZyYW1lU2h1ZmZsZURhdGEg
PSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwo
KTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2Nh
dGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIxOCwxNCArMjIzLDI1IEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlh
bGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2Fs
bEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0gICAgQ2FsbExpbmtJbmZvKiBp
bmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAg
ICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKKworICAg
IFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOworICAgIGlmIChvcGNvZGVJRCAh
PSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBt
X3VubGlua2VkQ2FsbHMuYWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxs
VHlwZUZvcihvcGNvZGVJRCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZvKTsKKworICAg
ICAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9J
bmRleCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0
aW9uSW5mbygpKTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS51bmxpbmtlZENhbGxMaW5rSW5mbyA9IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29u
c3RhbnQ7CisgICAgfQorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3Rh
bnQpOwogCiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRlY29k
ZUluZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVp
bnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygp
OworICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0
KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdU
MCBob2xkcyBjYWxsZWUuCkBAIC0yMzQsMTYgKzI1MCwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6
ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJ
bmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxhdGlv
bkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAgaWYg
KGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQorICAg
IGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBp
bmZvQ29uc3RhbnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3RhbnQoaW5mb0Nv
bnN0YW50LCByZWdUMik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdz
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAg
ICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdU
MCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7CisgICAgICAgIGF1
dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgq
dGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICAgICAgLy8gT09QUwogICAgICAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxD
YWxsU2xvdyhyZWdUMik7CiAgICAgICAgIH0pOwpAQCAtMjUzLDEzICsyNjYsMTMgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1Qw
LCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olllcyk7CisgICAgYXV0byBzbG93UGF0
aHMgPSBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1Qy
KTsKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xv
d1BhdGhzKTsKIAogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
ZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
ICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1
bHQoYnl0ZWNvZGUpOwpAQCAtMjczLDIwICsyODYsMjIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGxTbG93Q2FzZShjb25zdCBJbgogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9
IGxhYmVsKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgbG9hZENvbnN0YW50
KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29u
c3RhbnQsIHJlZ1QyKTsKIAotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKQorICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7CisgICAgICAgIC8vIE9PUFMKICAgICAgICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOworICAgIH0KIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92bSwg
KnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKCptX3ZtLCAqdGhp
cywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZy
b21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpAQCAtMzk1LDE3ICs0MTAsMzAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogCiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwogICAgIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisKKyAgICBtb3ZlKHJlZ1QwLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX25leHQpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlc3VsdEdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25l
eHQsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsK
IH0KQEAgLTQxNiwxMCArNDQ0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1
Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9I
b3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgaXRlcmF0b3JH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgSnVtcExpc3Qgbm90T2Jq
ZWN0OwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9yR1BSKSk7
CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckdQUikpOwpA
QCAtNDMyLDE5ICs0NTgsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29ucwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2Fs
bCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJhdG9y
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50KS5yYXdCaXRzKCkpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBtb3ZlKGl0
ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBl
KG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogCiAgICAg
YXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVy
YXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogCiAgICAgZG9uZS5saW5rKHRo
aXMpOwogfQpAQCAtNDUyLDcgKzQ3Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9uID0gKFsmXSAoKSB7
CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKICAgICAgICAgY2FzZSBO
YXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25hcnJvdzsKQEAgLTQ3MCw1MCAr
NDkzLDc0IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBK
dW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
MiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRpb25Nb2RlOjpHZW5l
cmljKSkpOwogCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBvcjgoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgQWJzb2x1
dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2l0ZXJhdGlvbk1ldGFkYXRhLnNlZW5Nb2RlcykpOworICAg
IGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9m
ZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0
T2ZTZWVuTW9kZXMoKSwgcmVnVDApOworICAgIG9yMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgcmVnVDApOworICAgIHN0b3JlOFRv
TWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNl
dE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZT
ZWVuTW9kZXMoKSk7CiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rp
b24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQo
KTsKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2JqZWN0KSBpbiByZWdU
MAogCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGl0ZXJSZXN1bHRH
UFIgPSByZWdUMjsKLSAgICBHUFJSZWcgZG9uZUdQUiA9IHJlZ1QxOwotICAgIC8vIGl0ZXJSZXN1
bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0IGJ5IGlkIGJlbG93LgotICAg
IG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnNjcmF0Y2g7CisgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOwog
CisgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpyZXN1bHQ7CiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaXRl
clJlc3VsdEdQUik7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1
ZUdQUiA9PSBiYXNlR1BSKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUik7CiAKICAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVncyA9IFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJlc2VydmVkUmVncy5h
ZGQodmFsdWVHUFIpOworICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZChpdGVyQ2FsbFJlc3VsdEdQ
Uik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
cHJlc2VydmVkUmVncywKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpT
VmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgcmVnVDMsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSks
IHByZXNlcnZlZFJlZ3MsCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHN0dWJJbmZvR1BSLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7
IGRvbmVHUFIgfSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpT
VmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2lu
dCgpOwogICAgIH0KIAotCiAgICAgewotICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsK
LSAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVz
ZWRSZWdpc3RlcnMoZG9uZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAgICAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIo
KTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNj
cmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0b3Iu
YWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRv
bmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3QoZ2xvYmFsR1BSKTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5j
aElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xv
YmFsR1BSKTsKIAorICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52
YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlk
OworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRHUFIp
OwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01MjcsNTkg
KzU3NCw1NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9p
bnQoanVtcCgpKTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgIHsKICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAgICAgICBHUFJSZWcgaXRl
clJlc3VsdEdQUiA9IHJlZ1QyOwogCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAg
ICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFu
Y2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJy
YW5jaElmTm90Q2VsbChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCiAgICAgICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCk7CiAgICAgICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107
CiAgICAgICAgIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAg
ICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsK
KyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyQ2FsbFJlc3Vs
dEdQUikpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIw
KTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJl
c3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLQotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCByZWdUMSk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOworICAgICAgICBtb3ZlKGl0ZXJD
YWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgZG9uZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQp
LnJhd0JpdHMoKSk7CisKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGRvbmVWUmVnLCBkb25lR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIGVtaXRKdW1wU2xv
d1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRo
aXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJ
c05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRH
UFIwKTsKICAgICB9CiAKICAgICB7ICAgCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwot
ICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCiAgICAgICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpOwogICAg
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4
KytdOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAg
IENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUp
PihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJn
R1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86
Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgdmFsdWVWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BS
LCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0
eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50
R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkp
OworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksMTAgKzE1OSwxMCBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgYm9vbCB1c2VEYXRhSUMoSklUVHlwZSBqaXRUeXBlKQogICAgIHsK
KyAgICAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKSAvLyBPT1BTCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKEpJVENvZGU6OmlzQmFz
ZWxpbmVDb2RlKGppdFR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIHJl
dHVybiBPcHRpb25zOjp1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQoKTsKICAgICB9CiAKQEAgLTI0
OCw2ICsyNDgsNDEgQEAgcHJvdGVjdGVkOgogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gbV9y
ZWY7CiB9OwogCitjbGFzcyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIHZvaWQgYWRvcHRN
YXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCisgICAgeworICAgICAgICBtX2FkZElDcyA9IFdU
Rk1vdmUob3RoZXIubV9hZGRJQ3MpOworICAgICAgICBtX211bElDcyA9IFdURk1vdmUob3RoZXIu
bV9tdWxJQ3MpOworICAgICAgICBtX25lZ0lDcyA9IFdURk1vdmUob3RoZXIubV9uZWdJQ3MpOwor
ICAgICAgICBtX3N1YklDcyA9IFdURk1vdmUob3RoZXIubV9zdWJJQ3MpOworICAgIH0KKworICAg
IEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkg
eyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKyAgICBKSVRNdWxJQyogYWRk
SklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbXVs
SUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisgICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQ
cm9maWxlKTsgfQorICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorCisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVEFkZEdlbmVyYXRvcj46OnZh
bHVlPjo6dHlwZT4KKyAgICBKSVRBZGRJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSog
cHJvZmlsZSkgeyByZXR1cm4gYWRkSklUQWRkSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTXVsR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgor
ICAgIEpJVE11bElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJl
dHVybiBhZGRKSVRNdWxJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8
R2VuZXJhdG9yLCBKSVROZWdHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUTmVnSUMq
IGFkZE1hdGhJQyhVbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTmVn
SUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVu
YW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklU
U3ViR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVFN1YklDKiBhZGRNYXRoSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRTdWJJQyhwcm9maWxlKTsg
fQorCitwcml2YXRlOgorICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFnPEpJVE11
bElDPiBtX211bElDczsKKyAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJhZzxKSVRT
dWJJQz4gbV9zdWJJQ3M7Cit9OworCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihEaXJlY3RKSVRDb2RlKTsKIGNsYXNzIERpcmVjdEpJVENvZGUgOiBwdWJsaWMgSklUQ29k
ZVdpdGhDb2RlUmVmIHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURURfV0lUSF9I
RUFQX0lERU5USUZJRVIoRGlyZWN0SklUQ29kZSk7CkBAIC0yNjYsNiArMzAxLDIxIEBAIHByaXZh
dGU6CiAgICAgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3dpdGhBcml0eUNoZWNrOwogfTsKIAor
Y2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1YmxpYyBNYXRo
SUNIb2xkZXIgeworcHVibGljOgorICAgIEJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQ
dHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spCisgICAg
ICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQpCisgICAgeyB9CisKKyAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+
IG1fdW5saW5rZWRDYWxsczsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0lu
Zm9zOyAvLyBPT1BTOiBtYWtlIHN1cmUgd2UgdmlzaXQgdGhlc2Ugc29tZWhvdy4gT3IgYXNzZXJ0
IHdlIGRvbid0IGhhdmUgdG8sIHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KKyAgICBCYWc8
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICBGaXhl
ZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBGaXhlZFZl
Y3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAgICBKSVRD
b2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7
Cit9OworCiBjbGFzcyBOYXRpdmVKSVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7
CiBwdWJsaWM6CiAgICAgTmF0aXZlSklUQ29kZShKSVRUeXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1
ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAi
TGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKQEAgLTQ2LDEw
ICs0Nyw5IEBAIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmYKIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENh
bGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKLSAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
LSAgICAsIG1faml0VHlwZShqaXRUeXBlKQorICAgIDogbV9qaXRUeXBlKGppdFR5cGUpCiB7Ci0g
ICAgbV9zdHViSW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFj
Y2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5m
byA9IGNvZGVCbG9jayA/IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9y
aWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUluZGV4
ID0gY2FsbFNpdGU7CiAKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lz
dGVyczsKQEAgLTU5LDcgKzU5LDYgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Zmlu
YWxpemUoCiAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpCiB7CiAgICAgbV9z
dHViSW5mby0+c3RhcnQgPSBzdGFydDsKLQogICAgIG1fc3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9
IGZhc3RQYXRoLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obV9kb25lKTsKIAogICAgIGlm
ICghSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCkBAIC02Nyw2ICs2NiwxNSBAQCB2b2lk
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBtX3N0dWJJbmZvLT5zbG93
UGF0aFN0YXJ0TG9jYXRpb24gPSBzbG93UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPihtX3Nsb3dQYXRoQmVnaW4pOwogfQogCit2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
OjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBtX3N0YXJ0
ID0gaml0LmxhYmVsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1f
aml0VHlwZSkpOworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0cnVjdHVyZVN0dWJJ
bmZvR1BSKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRy
VGFnKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJZEdlbmVyYXRvcjo6
SklUQnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRU
eXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywg
SlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4
LDExMyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXI7CiBjbGFz
cyBDYWxsU2l0ZUluZGV4OwogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklUOwogY2xhc3MgU3Ry
dWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVudW0g
Y2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKK3N0cnVjdCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisK
K3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdU
MTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307
CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICAvLyBXZSByZWx5IG9u
IHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJz
IGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgorICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5
ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHN0
YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1Yklu
Zm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpy
ZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJl
Z1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5mbzo6cmVn
VDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUkluZm86OmFyZ3VtZW50R1BSMzsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86Om5vbkFyZ0dQ
UjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpub25B
cmdHUFIxOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2Vy
dChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19h
c3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsK
Kworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdGhpc1ZhbHVlID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZv
OjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlJZFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OnJlZ1QxOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVycyB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1
Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9maWxl
ID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJyYW5kID0gR1BSSW5mbzo6cmVnVDE7Cisg
ICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2Up
OworICAgIHN0YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5m
bzo6cmVnVDI7Cit9OworCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90ZWN0
ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDE1ICsxNjQsMjEg
QEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZmZXImIGZhc3RQ
YXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAogICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwotICAgIAorCisg
ICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogbV91bmxpbmtlZFN0dWJJbmZvIHsgbnVsbHB0
ciB9OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8SklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwog
ICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZv
OwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9z
bG93UGF0aEJlZ2luOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOyAvLyBPT1BTOiBtYWtlIHJl
cG9ydENhbGwgcGFzcyBzb21ldGhpbmcgaW4gd2UgY2FuIHVzZSBmb3IgdGhlIG5vbi1DVEkgdGh1
bmtzIGJ1aWxkcy4gCiB9OwogCiBjbGFzcyBKSVRCeUlkR2VuZXJhdG9yIDogcHVibGljIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTk4LDcgKzIwNiw3IEBAIHByb3RlY3RlZDoKICAgICBK
U1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTMyLDggKzI0MCw4IEBAIHB1YmxpYzoKICAg
ICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVy
YXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZp
ZXIsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcg
c3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CisgICAgICAg
IENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAgICAgICBK
U1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBH
UFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQgZ2VuZXJh
dGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogICAgIApAQCAtMTYzLDExICsyNzEsOSBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAot
cHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1
ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTkxLDggKzI5Nyw2
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYp
OwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjE2
LDggKzMyMCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fz
c2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsK
IApAQCAtMjQxLDggKzM0Myw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0
aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhK
dW1wOwogfTsKIApAQCAtMjc3LDggKzM3Nyw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmluYWxp
emUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExp
bmtCdWZmZXIpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsK
IApAQCAtMzAyLDExICs0MDAsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZh
c3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9i
YXNlOwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0OwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0
aEp1bXA7CiB9OwogCkBAIC0zMzAsOCArNDI2LDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQg
Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVK
dW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzggQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91
YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkg
JiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAoIXNyYy5pc0Nv
bnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKK30KKworQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVy
IHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3Rh
bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBPT1BTOiBmaW5kIGEgd2F5IHRvIGFz
c2VydCB0aGF0IGFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0Nl
bGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwot
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7Cisg
ICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiArMTgxLDM2IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRpZgogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNl
bHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0
dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIp
KTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNzIGZ1
bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVz
cyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5W
YWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVS
ZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0
LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogfQogCiBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcp
KQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6
OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1f
Ynl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQi
KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4
KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmlu
c3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9i
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9j
aGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcg
KzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsK
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0
aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlu
c3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNT
RVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+
aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAx
KTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJ
bmRleCk7CkBAIC0yOTMsMjkgKzMxOCwzNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwotfQotCi1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2Zp
bGUsIEpTVmFsdWVSZWdzIHZhbHVlKQotewotICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5n
KCkpOwotCi0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUg
YnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVj
a2V0cyk7Ci0jZWxzZQotICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBi
aXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tl
dHMpOwotICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRz
LnBheWxvYWQpOwotICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0Jp
dHMudGFnKTsKLSNlbmRpZgotfQorICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlu
a1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30KKworLy8gT09QUworLy9pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2Zp
bGUsIEpTVmFsdWVSZWdzIHZhbHVlKQorLy97CisvLyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2Zp
bGluZygpKTsKKy8vCisvLyAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBv
bmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0CisvLyAgICAvLyBzdG9y
ZS4KKy8vI2lmIFVTRShKU1ZBTFVFNjQpCisvLyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1
ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vI2Vsc2UKKy8vICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZh
bHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCks
ICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQ
UigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7CisvLyNlbmRpZgorLy99CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0
eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUp
CiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCkpOwogI2VuZGlmCkBAIC0zMjMsMjQgKzM1MywyNSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZf
dDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRh
dGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1l
dGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgor
aW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmls
aW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVl
UHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVl
KTsKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9y
PEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6
b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3Mo
c19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9m
aWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFs
dWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJS
ZWcgcmVzdWx0UmVnKQorLy97CisvLyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJv
ZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisvL30KIAotdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRh
dGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlm
CiAKQEAgLTM2MCw2ICszOTEsMjEgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxp
bmdTaXRlVwogICAgIH0KIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5l
IHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIs
IFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7CisgICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMlRv
TWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lz
dGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQoreworICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJl
SUQoKSwgY2VsbEdQUiwgc2NyYXRjaEdQUik7Cit9CisKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJl
dHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CkBAIC0zODAsNyArNDI2LDcg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQg
SklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFs
dWUpCiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVy
KHJlZyk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWRE
b3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyAr
NTQyLDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBp
ZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyAr
NTUyLDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
cmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2Vs
bChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcu
aXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAg
ZWxzZQpAQCAtNTE0LDExICs1NjAsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25z
dGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlT
X0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNv
bnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQs
NyArNTg1LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAg
IEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
SW5kZXggaXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgICAgICAvLyBP
T1BTOiBoYW5kbGUgbGluayB0aW1lIGNvbnN0YW50cyBoZXJlLi4uCisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBnZXRDb25zdGFudE9wZXJhbmQoc3JjKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051
bWJlcigpKQogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlKSksIGRzdCk7CiAgICAgICAgIGVsc2UKQEAgLTU2NiwxMSArNjA4LDYgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENv
bnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0
YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0
KSk7CkBAIC01OTUsNyArNjMyLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93Q2FzZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJl
ZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02
MzcsMzAgKzY3NCw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAK
IHsKICAgICBpZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBt
X2NvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5
dGVjb2RlKQotewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7
IC8vIEhhc2hNYXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0g
bV9jb3BpZWRHZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29w
aWVkR2V0UHV0SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9y
LT52YWx1ZSk7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChr
ZXksIGdldFB1dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJv
ZmlsZSBKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1
aW50NjRfdCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkg
KyAxKSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQp
OwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwot
ICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAg
IHJldHVybiBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJv
ZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAg
ICBtX2NvcGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1
cm4gYXJpdGhQcm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxp
bmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBA
IC02ODEsNiArNjk1LDYxIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxP
cFAKICAgICByZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRh
KGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkK
K3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9j
ay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwg
cmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
c2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhzX21l
dGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRh
dGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0
YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQp
Cit7CisgICAgbG9hZDgoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2Nr
LT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBy
ZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRl
Y29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBl
IHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAg
c3RvcmU4KHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2st
Pm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjpzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRh
dGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRh
YmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0
KQoreworICAgIGFkZFB0cihzX21ldGFkYXRhR1BSLCBUcnVzdGVkSW1tUHRyKG1fdW5saW5rZWRD
b2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9m
ZnNldCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFu
dChKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQp
Cit7CisgICAgbG9hZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KGNvbnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29u
c3RhbnQobV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFu
dCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0
YW50KCkpOworICAgIC8vIE9PUFM6IE1heWJlIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudD8KKyAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZl
cigpKSwgcmVzdWx0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29u
c3RhbnRJbmRleCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5z
dHJ1Y3RpbwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hP
ZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkp
OwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJs
b2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwg
JnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZv
ciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAg
Y29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJ
bmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVk
aWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwog
CkBAIC0xMDI0LDcgKzEwMjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25z
dCBJbnN0CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxl
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAg
bV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRl
eCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRU
YWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3ICsxMDQyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8gY3Jl
YXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNo
IHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0
cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1f
c3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgs
IGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUu
ZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0
LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3Rh
bnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50
KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3Jl
NjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkp
OwotICAgICAgICBlbHNlCisgICAgICAgIC8vIE9PUFM6IG1vc3QgIk90aGVyIiBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24gY29uc3RhbnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQgZnJvbSB0aGUgVW5s
aW5rZWRDb2RlQmxvY2suIEl0J3MganVzdAorICAgICAgICAvLyBhIGNvdXBsZSB0eXBlcyB0aGF0
IGNhbid0LiBDcmVhdGUgYW4gYWJzdHJhY3Rpb24gZm9yIHRoYXQuCisKKyAgICAgICAgc3dpdGNo
IChtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkg
eworICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAg
ICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAg
ICAgICAgICAgICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNz
Rm9yKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIHJlZ1QwKTsKKyAgICAg
ICAgICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICs5OCwz
NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmpl
Y3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmlu
YWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50
bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2Rl
OjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1Qw
OwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBz
Y3JhdGNoUmVnID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsK
IAotICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAg
IGVsc2UgewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVy
Zmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmpl
Y3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRv
clJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNs
b3dDYXNlcyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcs
IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92
bSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZSgpICsgb2Zmc2V0T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZSgpICsgb2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVs
bHB0cik7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6
OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNjcmF0Y2hS
ZWcsIHNsb3dDYXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVy
ZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFs
aXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5j
ZSgqbV92bSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisK
KyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgp
LCBzdHJ1Y3R1cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3Qs
IHJldHVyblZhbHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzE0MCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhh
c0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25v
dyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0lu
c3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9s
RnVuY3Rpb24oKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3Vz
dG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFz
SW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
b25zdHJ1Y3RvciwgcmVnVDApOwogCkBAIC0xNTQsMzAgKzE2NCwzOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5t
X3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywg
YW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJl
Z1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFu
ZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8s
IHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3RvR1BSID0gQmFz
ZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdEdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0
dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BSKTsKICAgICAKICAgICAv
LyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRo
aXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQK
LSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAg
ICByZWdUNSwKLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICByZXN1bHRHUFIsCisg
ICAgICAgIHZhbHVlR1BSLAorICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgc3R1YkluZm9HUFIs
CisgICAgICAgIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDEsIEJhc2VsaW5l
SW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAorCiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQgKzIxMCwxMyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGlt
aXplKT4oQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIHJlZ1QyLCByZWdUMSk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3Rh
bmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIHN0YXRpY19hc3NlcnQo
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOwor
ICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBh
cmd1bWVudEdQUjIpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjpwcm90byA9PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSkKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlv
bkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMjQwLDcgKzI1
Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KIAogICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwg
cmVnVDApOwogCkBAIC0zNzQsNyArMzkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0
IEluc3RydWN0aW9uKgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwor
ICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgp
OwogICAgIHJldCgpOwogI2Vsc2UKQEAgLTM4NSw3ICs0MDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJH
ZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1p
dFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQyOCw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC00MzQsOSArNDUwLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShj
b25zdCAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9mdW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQ2NSw4ICs0ODIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0
aQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3Rl
eHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBh
ZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXko
dm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BS
KSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHVi
KHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAg
YWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcg
KzQ5OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBA
IC01MTksNyArNTM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1
YwogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRy
KEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVp
Z24gPSBqdW1wKCk7CiAKQEAgLTU0Myw3ICs1NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
X251bGwoY29uc3QgSW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBj
aGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFk
ZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJn
ZXQpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAK
QEAgLTU4MiwxNSArNjAxLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251
bGwoY28KIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3Zh
bHVlOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0
ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2Vs
bCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQ
dHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7
Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAg
ICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEp
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwg
cmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoYnl0ZWNvZGUsIFRydXN0ZWRJbW0zMigxKSwg
T3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2NDIs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5j
aElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsK
ICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0
aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY1OSw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzE0
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBj
YWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1Qw
KTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzcz
MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93
blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtOTA4LDcgKzkyOCw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MTgs
NyArOTM5LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCkBAIC05MzEsNyArOTUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVt
YmVyKGNvbnN0IEluc3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVy
KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk3Myw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDAp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAo
c3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZS
ZWcpOwogfQpAQCAtOTc4LDcgKzEwMDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3Qo
Y29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNW
UmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7
CiB9CkBAIC05OTMsNyArMTAxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IElu
c3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNo
T2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkp
KTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVC
bG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUs
ICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzMsMTEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJv
b2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwotICAgIGlm
IChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9i
eXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb25O
b0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmls
ZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxl
LCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JFbnRy
eSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5k
bGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVmZmVy
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZd
IChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAgICAgICAg
IEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdzKTsKLSAg
ICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBAIC0xMDUz
LDggKzEwNjMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAg
ICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRo
aXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2st
PnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1
bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBl
bmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNl
dCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElU
YWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5MSwxNCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0
aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUg
Zm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAg
ICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJs
b2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNb
dGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5k
ZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0
ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4LCB1bmxp
bmtlZFRhYmxlLm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwg
YXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7
CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCkBAIC0x
MDk5LDIwICsxMTEwLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3Qg
SW4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7
CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJh
Y2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0
IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVC
bG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3Ry
aW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwg
bV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwog
ICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dp
dGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
dGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3Rz
QWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdn
ZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1
Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0xMTMz
LDcgKzExNDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAK
ICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwg
cmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTEx
NDgsNyArMTE2MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QK
IAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9u
dWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTY2LDcgKzEx
NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAgICBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVn
VDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTExODgs
MTIgKzEyMDAsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91
ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2
b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQg
aW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+
bnVtVmFycygpOworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVZh
cnMoKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9yIChzaXplX3QgaiA9
IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVy
cygpOyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVn
aXN0ZXJGb3JMb2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsK
KyAgICAKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDApOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAgZW1pdEVudGVyT3B0
aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCkBAIC0xMzEwLDIzICsxMzI0LDE5IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJ
RCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2Fj
aGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0
ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVk
Q2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJ
RCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7
CkBAIC0xMzQyLDcgKzEzNTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25z
dCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRh
OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJl
RGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVn
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkg
LSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRy
KGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlzOjpvZmZzZXRPZkNhY2hlZEZ1bmN0aW9uKCksIGNh
Y2hlZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFu
Y2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vl
bk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5v
dEVxdWFsLCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRp
cGxlQ2FsbGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzgyLDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Qy
LCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVS
ZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzkzLDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwg
cmVnVDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0
dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDA2LDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Mik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwg
cmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQxNyw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIs
IHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzMiwxMSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbnN0YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjb25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1l
bnRHUFIzKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJl
dHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiB9CkBAIC0xNDMwLDcgKzE0NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJl
dHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxv
b3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkg
JiYgbV91bmxpbmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50
RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCByZWdU
MCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCByZWdU
MCwgVHJ1c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGlt
aXQoKSkpOwpAQCAtMTQ0MCw3ICsxNDU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50
KGNvbnN0IEluc3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRpZgot
ICAgICAgICBtb3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRSZWdz
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsxNDY4
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAgLy8g
RW1pdCB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1pemVk
KCkpIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclpl
cm8sIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9v
cCgpKSwKLSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09m
SklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENvZGVC
bG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAtMTUw
OSw3ICsxNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJn
dW1lbnRHUFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IGFyZ3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NjQsMzQgKzE1ODEsMzYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9y
ZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IEdQUlJl
Zzo6YXJndW1lbnRHUFIwOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhw
Kj4obV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExv
YWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQo
Ynl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1f
ZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSkKKyAgICBsb2Fk
Q29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24s
IGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCks
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJU
KG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
Mik7CiAgICAgfQogfQogCkBAIC0xNjIxLDIzICsxNjQwLDI0IEBAIHZvaWQgSklUOjplbWl0TmV3
RnVuY0V4cHJDb21tb24oY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRl
Y29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2Nv
cGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNs
KTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6RnVuY3Rpb25FeHByLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNv
bnN0YW50LCBhcmd1bWVudEdQUjIpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29k
ZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0
aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRz
dCwgJnZtKCksIGFyZ3VtZW50R1BSMXJlZ1QwLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYg
KG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24p
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwg
JnZtKCksIGFyZ3VtZW50R1BSMXJlZ1QwLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAg
ICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQ
UjFyZWdUMCwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2NjQsMjkgKzE2ODQsMzAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0
ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0
KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3RlciwgYXJndW1lbnRHUFIyKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlv
blByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBk
c3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIHNpemUpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNv
ZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxl
LCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBP
cE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2Zp
bGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRl
eCwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICNlbHNlCisgICAg
bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNp
emU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwog
ICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTQsOCArMTcxNSw5IEBAIHZvaWQgSklUOjplbWl0
X29wX25ld19hcnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90
eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09Q
UzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdo
ZW4gdGhlIHR5cGUgcHJvZmllbHIgaXMgZW5hYmxlZC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9u
KiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdp
c3RlcjsKIApAQCAtMTc3NywyMCArMTc5OSwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hh
ZG93X2NoaWNrZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYm
IG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0
cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9n
U2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1Qw
OwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBh
IG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsK
LSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2Ny
YXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMVJl
ZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4K
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVuc3VyZVNoYWRv
d0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRj
aDJSZWcpOworICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhp
c1ZhbHVlLCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0
UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNo
YWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0
IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB1c2luZyB0aGUgY29u
dHJvbCBmbG93IHByb2ZpbGVyLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9u
KiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2Rl
KCp0aGlzKTsKQEAgLTE4NjAsNyArMTg4Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1
bWVudChjb25zdCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7
CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxOTEyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBl
KHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNs
b3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODgxLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlm
IChrZXkuaXNJbnQzMigpKQpAQCAtMjkwNCw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZ0p1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJs
b2NrLT5iYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAogICAgIGlm
IChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5n
KGtleSktPnZhbHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lv
biAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFBy
aXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiks
IEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcp
OwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDkyICs0OSwxMDMgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3Nl
ZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRl
bnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2Zp
bGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1i
ZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0
ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsK
IAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAg
ICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRS
ZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICAgICAgLy8gT09QUy4gU3VwcG9ydCB0aGlzCisgICAg
ICAgIC8vaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAgICAgLy8gICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICAgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOwor
ICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dl
dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Y29kZVR5cGU+CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29k
ZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0
ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChtX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwg
YXJndW1lbnRHUFIyKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwog
I2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChC
eXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFk
eSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQ
UjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAg
ICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsg
Ly8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVH
UFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGlj
X2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQo
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fz
c2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAg
ICBsb2FkQ29uc3RhbnQobV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9H
UFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2Rl
VHlwZTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
dHVyblZhbHVlR1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNjAsOCArMTcx
LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0
ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0g
YXJndW1lbnRHUFIxKTsKIApAQCAtMTg3LDM0ICsxOTgsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cmVzdWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0UHJp
dmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBB
U1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0y
MjMsOSArMjQxLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTIz
NSwyNiArMjU1LDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMK
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8v
IGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojp2YWx1ZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQotICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTMwMCwyMSArMzE0LDI4IEBAIHZvaWQgSklU
OjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQg
PSBieXRlY29kZS5tX2JyYW5kOwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BS
UmVnIGJyYW5kR1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6c3R1YkluZm87CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZh
dGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4p
OwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNl
cXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI4LDEz
ICszNDksMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogewog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKwogICAgIEpJVFByaXZhdGVC
cmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZh
dGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9w
dGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzY5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2Vy
dChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFBy
aXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0
eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZh
bHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3By
aXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2
YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAs
MTkgKzM4OSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJl
Z1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihicmFuZCwgYnJhbmRHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVj
a1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHVi
SW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3By
aXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCkBAIC0zOTQsOSArNDIyLDExIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGlt
aXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0MzYsMTgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5
IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJh
bmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02
NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8
ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5
cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGlt
aXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQ
cml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
X2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM1LDMw
ICs0NTksNDIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHBy
b2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnBy
b2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0
eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7CisgICAgbWF0
ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNl
dE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNW
YWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQpOwotICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChwcm9wZXJ0eSkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIg
PSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworICAgIC8vIE9PUFM6Cisg
ICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgIC8vICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8t
PnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5k
OjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0g
ZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxz
LmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91
dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MTAsMTIgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUg
ZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAg
ICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBl
Y21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgs
NyArNTMxLDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVk
IGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0
cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdU
MiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7
CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFs
RGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsK
KyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5v
blN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlW
YWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFy
Z3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTUxMiw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBj
YWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUz
OSwxMSArNTgxLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6cHJvcGVydHk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6
dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICBqaXQuc3RvcmUz
MihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSk7CkBAIC01NzAsMjAgKzYxMiwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFs
dWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBK
U1ZhbHVlUmVncyhyZWdUMiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIElu
dmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5w
cml2YXRlRmllbGRQdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRl
IG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpA
QCAtNjAzLDEzICs2NTYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25h
bWUoYwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBhdXRvIG9w
ZXJhdGlvbiA9IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJp
dmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGlt
aXplOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5IGFyZSBjb25m
aWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGdl
bi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50
R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSNCk7CisgICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBv
cGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0
QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
YXJndW1lbnRzR1BSMywgYXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjc2LDEyIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQpAQCAtNjQ4LDkgKzY5Niw5IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJl
Z1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IHJlZ1Q0OwogCkBAIC02ODAsNyArNzI4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY4OSw3ICs3MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCBy
ZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFNldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3NDksOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2dldHRlciwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
ZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRl
ciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1
dGUsIHJlZ1QxLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0
dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRl
cl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcwOSw3
ICs3NjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAg
aW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRH
ZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNzE5LDcgKzc3MSw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Fj
Y2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZh
bCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJl
Z1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3LDIzICs3ODAs
MzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lz
dGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1Qz
LCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SWQ7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJl
IHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91
bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUt
YmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC03NTksMTUgKzgyMiwxNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxC
eUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0
ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCks
IFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
LCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC03ODEsMjQgKzg0NiwxOSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0g
YXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQ
Uik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9p
ZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTg0NSwyMiArOTA1LDMz
IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBi
YXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURl
bEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0
eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxp
bmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIg
YXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lz
dGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJh
cnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTU0LDExIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
ZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29k
ZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJn
dW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxP
cHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQgKzk3MiwxOSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2Rl
R1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUu
dmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFs
dWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQpAQCAtOTYxLDIyICsxMDI5LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJl
ZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3Ms
IHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2LDE0
ICsxMDYzLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5
R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwMDMsMjYgKzEwODMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwg
IWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5
R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25U
cnlHZXRCeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6
dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5k
Q2FsbChvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVy
blZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xMDMwLDIyICsxMTA0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9k
aXJlY3QoY29uc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGUtPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
VlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdz
LCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0Owor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1
NCwxNiArMTEzNywxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChj
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJ
ZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJh
dGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwNzMsODMgKzEx
NTgsNjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGlt
aXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAg
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlk
ZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5n
KCkpIHsKLSAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwot
ICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsICZtZXRhZGF0YS5t
X21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCByZWdUMSk7CisgICAg
ICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZz
ZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlKCks
IHNjcmF0Y2hHUFIpOworICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgo
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihH
ZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0
YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVBy
b2ZpbGUoKSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9k
ZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1f
dGhpc1ZhbHVlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOwotCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3Vs
dFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
IH0KIApAQCAtMTE1OCwxNiArMTIyMSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMTc3LDI2ICsxMjQy
LDU4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFIzOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
LCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBh
cHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5W
YWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5W
YWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZFdpdGhUaGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0
aGlzVmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0
QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaDsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkV2l0
aFRoaXNSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0
aGlzR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZS
ZWcpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7
CisKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIHJlc3Vs
dFJlZ3MsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSwgc3R1Yklu
Zm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6R2V0QnlJZFdpdGhUaGlzOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJ
ZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
Zyk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyNDEsMTYgKzEzMzgs
MTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRh
dGEsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09w
dGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI5ICsxMzYwLDIz
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFk
eSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29u
c3RleHByIEdQUlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRo
aXNWYWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0
OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CiAgICAgc3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRX
aXRoVGhpc09wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVH
UFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVH
UFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0KKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9cwogCiAjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
c2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJiB2bSkK
QEAgLTEzMjksMjMgKzE0MjMsMzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBi
b29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9yZGVy
IHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBv
ZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFy
Z3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBh
bmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zm
c2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAg
ICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwotICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6UHV0QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtp
bmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUg
PSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeUlk
cy5hcHBlbmQoZ2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3
aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsxNDY3
LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAg
ICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZElu
ZGV4KytdOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKGdlbi5z
bG93UGF0aEZ1bmN0aW9uKCksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEzNzYsMjUgKzE0ODgsMTkg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhbHJlYWR5
IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDE7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2Vy
dChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KHZhbHVlR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCkpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTQ0MSwyMCArMTU0NywzMSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlJZFJl
Z2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSk7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkluQnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlJZHMu
YXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQpAQCAtMTQ2MywxNCArMTU4MCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5f
YnlfaWQoY29uc3QgSW5zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5
SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjAwLDIyIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3Vt
ZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBk
byBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBj
cmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFt
ZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5
SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENh
bGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbklu
QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uSW5CeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2MjQs
MzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQ
UiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZv
cy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlWYWw7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NTksMTggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJv
ZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29k
ZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRH
UFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTU2LDUxICsxNjgxLDU2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFy
Z3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVH
UFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxs
IGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGlu
IGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBu
YW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbklu
QnlWYWxPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6dmFs
dWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlf
dmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uSW5CeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBy
ZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZhbEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2Fz
ZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gdHlwZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChn
ZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5cGUp
Cit2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1
YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUgdHlw
ZSkKIHsKICAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0
eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiAKQEAgLTE2MDgsNyArMTczOCwx
MSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhh
c1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXpl
IDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE2MTgsMjcgKzE3NTIsMjEgQEAgdm9pZCBKSVQ6OmVtaXRI
YXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IHJlZ1QxOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IEJhc2VsaW5l
SW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5
T3JCcmFuZEdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUp
LCBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRl
QnJhbmRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUp
Pjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1By
aXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFz
UHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9u
SGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRl
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NTIsNyAr
MTc4MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKGMKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3co
Ynl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAgICBlbWl0SGFz
UHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9w
cm9wZXJ0eSwgLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNjY2LDE5ICsxNzk0LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNf
cHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0g
ICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2
YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNv
ZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICghbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52
YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9i
amVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6
b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0
aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mp
OworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVn
VDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2ODgsNiArMTgx
OSw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3MDEsNyArMTgz
Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAg
IEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJs
b2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDEp
OwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBv
Y2gsIHJlZ1QxKTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4NDcsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2Nv
cGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJl
c29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25z
dGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CiAgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTE3OTQsNTkgKzE5MjYsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShj
b25zdCBJbgogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29s
dmVUeXBlOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1f
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxp
bmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJ
bnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNl
cnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2ls
bCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVU
eXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1f
bGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29s
dmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQo
KSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQg
PSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAg
IHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKKworICAgICAgICBhdXRvIGNsb3N1
cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5l
cmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9yZXNvbHZl
X3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGNsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICAg
ICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MiKTsKKyAgICAgICAgfTsKIAotI2RlZmluZSBSRVNPTFZF
X1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVU
eXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5l
cmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVTT0xWRV9T
Q09QRV9HRU5FUkFUT1IpCisgICAgICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRv
ciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZl
U2NvcGVUaHVuayhzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5l
cmljIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRh
T2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGNvZGU7CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisg
ICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAg
ICAgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7
CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKICAgICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNj
b3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNv
bnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRo
aXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBi
ZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2Jh
bE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAg
IC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2Jh
bE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BS
ZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIg
PSByZWdUNzsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVn
VDY7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9
IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0
ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNv
bHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJl
Z1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRk
UHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIApAQCAt
MTg1NSwyNiArMjAwNSwyNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0g
SW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0g
ICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9i
amVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9m
ZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xv
YmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9p
bnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwog
ICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAg
ICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIs
IHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAg
ICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAg
ICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAgewot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwot
ICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwor
ICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICAg
ICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1
dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEy
ICsyMDMyLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50
U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAg
ICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9i
amVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNU
X09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEp
OwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNz
KGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BS
LCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJl
Z1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxM
ZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgaml0Lm1vdmUoZ2xv
YmFsT2JqZWN0R1BSLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBA
IC0xODk3LDExICsyMDQ3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygp
IGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhciosCiAgICAgICAg
ICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVudmly
b25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFs
T2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAg
ICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0Ojpv
ZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsy
MDU5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAg
ICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZl
ZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMjA2OSw0
NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0K
ICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1Qw
KTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVz
b2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAg
bm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
eworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBl
bHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSks
IHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CisgICAgICAgIGppdC5sb2Fk
MzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUmVzb2x2ZVR5cGUoKSks
IHJlZ1QwKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhp
cyk7CisgICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
KSB7CisgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRDb2RlKHJl
c29sdmVUeXBlKTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7Cisg
ICAgICAgICAgICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7Cisg
ICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFs
TGV4aWNhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhp
cyk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9
CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHVi
KHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNv
bHZlX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7
CiB9CiAKLSNkZWZpbmUgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBl
KSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2
ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5
cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBc
Ci0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVU
eXBlLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAg
fQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikK
LSN1bmRlZiBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRv
cihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9u
IGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0
aCBhbHJlYWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAg
LTIwNjUsNiArMjE3Nyw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVn
aXMKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAg
IC8vIE9PUFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBA
IC0yMTc4LDcgKzIyOTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25z
dCBJCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yMTg2LDkg
KzIyOTksOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9w
ZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3Bl
cmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9u
KTsKIH0KIAogI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yMTk2LDQxICsy
MzA5LDUwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIHZvaWQg
SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
T2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
QVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4
KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworCisgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9y
ID0gW10gKFZNJikgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3Bl
VGh1bmsoQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFy
Iik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NH
ZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRG
cm9tU2NvcGVUaHVuayhDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5l
OiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gZ2Vu
ZXJpY0dldEZyb21TY29wZUdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgcmV0dXJuIEpJ
VDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBv
cF9nZXRfZnJvbV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0g
cmVnVDY7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1Owog
Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRyX3Qq
IG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9v
cGVyYW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRp
ZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Jm1ldGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNk
ZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9z
Y29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZF
X1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNj
b3BlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0
YUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVH
UFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0
YUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdl
bmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0K
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYg
KHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdl
dENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgY29k
ZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0
b3IpOworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZy
b21TY29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdl
dEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVu
a05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJh
dGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVU
eXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRl
ZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGlu
ZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdo
dCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KQEAgLTIyMzksNzcgKzIzNjEsNjggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRh
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1Vz
ZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVz
cygpOworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRh
ZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7Cisg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1l
dGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQ
Uik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJfdCBtZXRhZGF0YVN0cnVj
dHVyZU9mZnNldCkgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG1ldGFk
YXRhU3RydWN0dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdU
MCk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7
Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsK
KyAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVH
UFIpIHsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6
Om9mZnNldE9mU3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BS
LCByZWdUMCk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJv
LCByZWdUMSkpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDEpKTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKCFu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNF
VE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwor
ICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9u
V2F0Y2hwb2ludCkpLCByZWdUMyk7CiAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVx
dWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAotICAgIGF1dG8gZW1pdEdl
dFZhckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAg
ICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZyb21J
bmRpcmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAg
ICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCiAgICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZh
ciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgewogICAgICAgICBz
dGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0
NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3BlR1BS
LCBvcGVyYW5kR1BSKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4
aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworICAgICAgICBq
aXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmFk
ZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
b3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCBy
ZWdUMCk7CiAgICAgfTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRD
b2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJl
c29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24g
c2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9i
YWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZv
ciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNo
ZWNrKHNjb3BlR1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNp
bmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFs
T2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3Ig
dGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKICAg
ICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7CiAgICAgICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKIAotICAgICAgICAgICAgaml0QXNzZXJ0
KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAg
ICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
LSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3Bl
ZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAgaml0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Cisg
ICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBqaXQu
YnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIG9mZnNldCk7CiAg
ICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlz
T3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJ
bW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJl
YXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxp
bmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJy
YW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9m
ZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZq
aXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIo
b2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsK
LSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0
LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBy
ZXN1bHQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5uZWczMihvZmZz
ZXQpOworICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNF
aWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
R2xvYmFsVmFyOgpAQCAtMjMxNywyMSArMjQzMCwxOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAg
ICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9v
cGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAg
aml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwg
cmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1l
dGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsKICAgICAgICAgICAgIGVtaXRHZXRD
bG9zdXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFy
OgpAQCAtMjM0MSw3OSArMjQ1Miw1NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0g
ICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAg
ICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBl
KTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0
UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAg
IGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0
SW5mbygpKSwgcmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwg
ZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQp
OworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBu
b3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBp
c0dsb2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQ
cm9wZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Cisg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRy
dWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2Jh
bExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
ID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIu
bGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
anVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgICAg
IHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZh
dWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVh
azsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fz
c2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJl
Z1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJv
ZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0
YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7
CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZt
KCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIu
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJU
YWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVS
QVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0p
IFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZy
b21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAg
ICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNj
b3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVz
b2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJP
TV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRP
UgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9n
ZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVy
YXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNl
bGluZSBKSVQgYmVjYXVzZQpAQCAtMjQ3MSw4NiArMjU1OSw3OSBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShz
ZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0
R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQot
ewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRy
KGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdU
MSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIo
cmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAg
ZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAs
IEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNp
emVvZihSZWdpc3RlcikpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRH
ZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1
dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0
YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAg
YXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJl
Y3RMb2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVz
b2x2ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3Bl
LCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9u
IHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xv
YmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBm
b3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292
ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55
dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHks
IHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisg
ICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Om9m
ZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQ
dHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1
Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1
bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAg
ICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNs
b3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwog
ICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBC
YXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQg
LSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOworICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEs
IFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSkpOworICAgICAgICAgICAgLy8gT09QUzogd291bGQgYmUgbmljZSB0byBoYXZlIGEg
dmVyc2lvbiB0aGF0IHRvb2sgR1BSUmVncworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihz
Y29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAg
ICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAg
ICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVG
b3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBl
bWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0gICAgICAgICAgICBpZiAoIWlzSW5p
dGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisgICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlD
aGVjayhyZXNvbHZlVHlwZSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwg
cmVnVDApOworCisgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNvZGUubV9n
ZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNo
ZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFRE
WiBjaGVja3Mgc3RhdGljYWxseS4KLSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCksIHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZh
bHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigq
b3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsKKyAgICAg
ICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDEpOworCisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBzdG9yZTY0
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxkIGJl
IG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciB2YWx1ZS4KKyAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFJlc29sdmVk
Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAg
ICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEu
bV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9T
Y29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CisgICAgICAgICAgICBl
bWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJbmRl
eChyZWdUMCwgcmVnVDIsIFNjYWxlRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRP
ZlZhcmlhYmxlcygpKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxkIGJlIG5pY2UgdG8g
aGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciBvd25lci92YWx1ZS4KICAgICAg
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yNTY0LDU4
ICsyNjQ1LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAg
ICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
Ci0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGlj
YWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVl
IHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAgICAgICBpc0dsb2Jh
bExleGljYWxWYXIubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotCi0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAg
ICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmso
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
KyAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1cmVWYXIvIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21waWxlIHRoaW5ncworICAg
IC8vIHRoYXQgd2F5IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2UndmUgcHJvdmVuIHRoYXQg
aXMgdGhlIHR5cGUgd2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJlVmFyLAorICAgIC8vIGFs
bCBDb2RlQmxvY2tzIHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFyCisgICAgLy8gaWYgdGhl
IHZhciBpbmplY3Rpb24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYgaXQgaXMgZmlyZWQsIHRo
ZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0CisgICAgLy8gbWF0dGVyIHdo
YXQgdHlwZSB3ZSBhcmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PT0gQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcik7CisgICAgZWxzZSBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIpCisgICAgICAgIGVt
aXRDb2RlKFJlc29sdmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgZW1pdENv
ZGUoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVsc2UgewogICAgICAg
ICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJ
bmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1QwKTsKICAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCisgICAgICAg
IEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsodGhpcyk7
CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwog
CiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CiAKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAogICAgICAgICBza2lw
VG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CiAg
ICAgfQogfQogCkBAIC0yNjI0LDE4ICsyNjk5LDIxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfdG9fc2NvcGUoY29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVz
b2x2ZVR5cGUoKTsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgUmVz
b2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGlmIChwcm9maWxl
ZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJZiBhbnkgbGlua2VkIENv
ZGVCbG9jayBzYXcgYSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBDb2RlQmxvY2tzIGFyZSBn
dWFyYW50ZWVkCisgICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZhci4KICAgICAgICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAg
ICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29w
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5z
dHJ1Y3Rpb24pOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJndW1lbnRHUFIwLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
CiAgICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVj
b2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9i
eXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBBU1NFUlQobV91
bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJl
bnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CkBAIC0yNzAxLDcgKzI3NzksNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwg
RGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKIH0KIApAQCAtMjc1OSw3ICsyODM3LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIo
SlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CkBAIC0yNzY3LDcgKzI4NDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmll
bGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9m
SW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc4
OSw3ICsyODY2LDYgQEAgdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxPcAog
dm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2Rl
OwpAQCAtMjgwNSw3ICsyODgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0
KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlzIGlzIHRo
ZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBjYXNlIGl0
IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRhZGF0YS5tX2VudW1l
cmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1v
ZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9l
bnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1
cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAgICAg
ICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhl
bnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMih+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2Rl
KSkpOwpAQCAtMjg0Nyw3OCArMjkyMyw4NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1v
ZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5h
bWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0
b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIgPSByZWdU
MDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdl
dEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxpbmVFbnVt
ZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDI7
CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5
VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG1vZGUsIHNjcmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
TmFtZSwgcHJvcGVydHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3MoJm1l
dGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwg
c2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZThUb01l
dGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVu
dW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CiAgICAg
Ly8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KLSAgICBKdW1wIGlzTm90
T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZElt
bTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1v
ZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVtcCBz
dHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdU
MiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7CisgICAg
bG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2Ny
YXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwg
c2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Lgot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0
aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4g
aW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVu
ZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdU
MywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9
IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CisgICAgbG9hZDY0KEJhc2VJ
bmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7
CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91dE9mTGluZUFjY2Vz
cy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QzKTsK
LSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDIpOworICAg
IG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRj
aDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBvZmZz
ZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnRwdHJf
dD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwg
cmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7Cisg
ICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAo
KSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOwotICAgIHN0b3JlOChUcnVz
dGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9k
ZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKyAg
ICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCBieXRlY29kZSwgQnl0
ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIGlz
Tm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNOb3RJbmRleGVkID0g
YnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVz
dDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3aXRoIHRoZSBpbmRl
eC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAgICAgaXNOb3RJbmRleGVk
LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBw
cm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVj
b2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFk
ZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBkb25l
Q2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIApAQCAtMjkyNywxMCArMzAxMSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAKLXRl
bXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlw
ZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwg
U2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51
bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2Vu
ZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjkzOSw3ICszMDIy
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1bXBM
aXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDAp
OwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JN
ZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJl
Z1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAtMzAyOCw2ICsz
MTEzLDEzIEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKICAgICBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNoR1BSKG93
bmVyKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVC
YXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbi5saW5rKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlz
aW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1NDMsNyArMTU0Myw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwo
Vk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgp
KTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2lu
ZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAg
IHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEw
MTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3Ry
CiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlv
bikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAg
bWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxl
OjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAg
ICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAs
IDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9wKG9w
Y29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwgc3Jj
RHN0IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAgICAgICBz
dG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQ
cm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0Y2go
KQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRj
aCwgbWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBl
KQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSAr
IFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0YSh0
NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3Jj
Tm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kg
dDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVu
YXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAgICBy
ZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEsIExv
d2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1cGRh
dGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQ
cm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1cm4o
dDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkKIAog
bWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVn
ZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRp
c3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlw
ZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJp
dGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAot
CiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAgICAg
ICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3Vz
dG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJS
ZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAub3AxTm90
SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAgICBhcml0
aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFBy
b2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAg
Z2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0MSwg
dDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwxMiBA
QCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJpYSB0
MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5vdElu
dE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAgIGFy
aXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQog
ICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAu
b3AxTm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAgICBh
cml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1
LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAgICAg
ICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5hcnlP
cEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBk
ZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90Lgog
ICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cK
LSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVy
LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQzLCBm
dDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEzIEBAIG1hY3Jv
IGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMsIGExCiAgICAg
ICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRweiByMCwgLnJl
Y292ZXIKLQogICAgICAgICAgICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAgIyBCYXNlbGlu
ZSB1c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQgcG9vbC4KKyAg
ICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29k
ZUJsb2NrOjptX2ppdERhdGFbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjpK
SVREYXRhOjptX2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAgIGlmIEFSTTY0
RQogICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0
T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50cnkpICogUHRy
U2l6ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFn
ICMgSlNFbnRyeVB0clRhZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVxdWFsaXR5SnVt
cE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2Rl
U3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9w
Y29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRh
ZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAg
ICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9m
aWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0KICAgICAg
ICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQogICAg
ICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNybyBwcmVPcChv
cGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDEs
IC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEgdDEsIFtj
ZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQor
ICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmls
ZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTExMzQs
MTEgKzExMzUsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9w
TmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLQot
ICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BO
ZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2Jp
dHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0xMTQ2
LDEyICsxMTQyLDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwK
ICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MwogICAg
IG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUlu
dCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50
LCB0MSwgdDQpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0cXogdDMs
IG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAwLCB0
MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRl
VW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEsIHQ0KQog
ICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNjAsNiBAQCBt
YWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwg
ZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAot
ICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6
bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQogICAgICAg
ICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQw
LCB0MSkKQEAgLTExNzcsNyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bj
b2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJh
dGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQ
cm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3Ry
dWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0NCkKICAgICAgICAgZGlzcGF0Y2goKQogCiAg
ICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmluYXJ5T3BDdXN0
b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93
CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKLSAgICAg
ICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUs
IHQ0KQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkludDoK
LSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUs
IHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAg
ICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNiw3ICsxMTk4LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0
b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5p
dGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAgIGdldCht
X2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJv
ZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAg
ICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJk
IHQxLCBmdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAt
MjQ5OCw2ICsyNDk4LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAor
CittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFk
YXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFBy
b2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjpt
X2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6
TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBC
aW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91
bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VN
QkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3Qg
WDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxl
SWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVm
YXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9t
Q2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRl
bnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwg
Y29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmll
ciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVl
ZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAg
ICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNo
ZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2Rl
QmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hl
YWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5n
SW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVG
cm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmll
cihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MTcx
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2Nr
LCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+
CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBj
b25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFi
bGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlk
ZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlm
aWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJ
KHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVG
SU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRp
YyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRh
dGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVu
YXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAg
VW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAg
ICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1i
ZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODE3MTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBpbmxpbmUg
cHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlm
Zl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihG
dW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0aWMgaW5s
aW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0
KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437056</attachid>
            <date>2021-09-01 12:50:53 -0700</date>
            <delta_ts>2021-09-01 13:11:51 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>385833</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IHVubGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxp
bmtlZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRp
b24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
aXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0g
ICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRo
U3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhT
dGFydCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlz
IGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQg
dG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0
aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJz
OjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAg
IHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MjQsNiArNDI0LDEzIEBAIGlubGluZSBDb2RlT3JpZ2lu
IGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBz
byB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNyArMzcw
LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2Fu
J3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJv
Y2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJv
ZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5l
c3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2Yg
YW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhl
IGxpdmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNp
ZGUgVW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBi
ZXR3ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhl
IGJ5dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5n
IGFuIFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9j
ayogdW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CkBAIC00NjYsNiAr
NDY3LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAg
ICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9G
SUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtl
ZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAg
ICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtl
ZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAg
ICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5z
dHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4LDE0ICs1NDIsMTQgQEAgYm9vbCBD
b2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRl
UHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5L
KE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAg
ICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJ
bmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9w
TXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5L
X1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC03ODksNiArODAz
LDc2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbkNvbW1vbihWTSYKICAgICBtX293
bmVyRWRnZS5zZXQodm0sIHRoaXMsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmNyZWF0ZSh2
bSwgdGhpcykpOwogfQogCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNlbGlu
ZUNvZGUoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRDb2Rl
KGppdENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0Q29k
ZU1hcCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFuZGxl
ckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5hdGl2
ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJl
dGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FTU0VSVCghbV9qaXREYXRhKTsKKyAgICBhdXRvIGppdERhdGEgPSBtYWtlVW5p
cXVlPEpJVERhdGE+KCk7CisKKyAgICBqaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVk
VmVjdG9yPHZvaWQqPihqaXRDb2RlLm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBqaXRDb2RlLm1fY29uc3RhbnRQb29sLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGF1dG8mIGVudHJ5ID0gaml0Q29kZS5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAg
ICAgc3dpdGNoIChlbnRyeS50eXBlKSB7CisgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpHbG9iYWxPYmplY3Q6CisgICAgICAgICAgICBqaXREYXRhLT5tX2ppdENvbnN0YW50UG9v
bFtpXSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAgICAgICAg
IFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9ICpzdGF0aWNfY2Fz
dDxVbmxpbmtlZENhbGxMaW5rSW5mbyo+KGVudHJ5LnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAg
IENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0RGF0YS0+bV9jYWxsTGlua0luZm9zLmFk
ZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAg
ICAgICAgIC8vIE9PUFM6IGRvbid0IGhhcmRjb2RlIHRoZXNlIHJlZ2lzdGVycyBsaWtlIHRoaXMu
CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmluaXRpYWxpemVEYXRhSUModm0oKSwgKnVubGlu
a2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIpOworICAgICAg
ICAgICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2xbaV0gPSBjYWxsTGlua0luZm87CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKKyAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyo+KGVudHJ5LnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IGppdERhdGEubV9zdHViSW5mb3MtPmFkZCh1bmxpbmtlZFN0dWJJ
bmZvLmFjY2Vzc1R5cGUsIENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4
KSk7CisgICAgICAgICAgICBzdHViSW5mby0+aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKHRoaXMsIHVubGlua2VkU3R1YkluZm8pOworICAgICAgICAgICAgaml0RGF0YS0+
bV9qaXRDb25zdGFudFBvb2xbaV0gPSBzdHViSW5mbzsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
ZW50cnkudmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBv
b2xbaV0gPSBmdW5jdGlvbkRlY2woaW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwcjogewor
ICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRy
eS52YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBqaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbFtp
XSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBtX2ppdERhdGEgPSBX
VEZNb3ZlKGppdERhdGEpOworICAgIH0KKworICAgIHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAg
IGNhc2UgR2xvYmFsQ29kZToKKyAgICBjYXNlIE1vZHVsZUNvZGU6CisgICAgY2FzZSBFdmFsQ29k
ZToKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxy
ZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUg
Y2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KKyAgICAg
ICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCgp
KSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24odGhpcyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKwogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsK
QEAgLTMwNzksNyArMzE2Myw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNv
dW50KCkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoK
LSAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAg
ICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxv
Y2soKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAt
MzI5NSwxMyArMzM3OSwxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5
QXJpCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgot
ICAgICAgICByZXR1cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJv
ZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BN
dWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+
YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9z
dWI6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJp
dGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMp
Lm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5h
czxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJu
IHBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZh
dWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMzEzLDExICszMzk3LDExIEBAIFVuYXJ5
QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5v
cGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFz
PE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAg
IGNhc2Ugb3BfaW5jOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0
aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0
dXJuICZwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAg
ICAgIHJldHVybiBwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBu
dW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRl
OgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6
CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAg
ICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXND
aGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBh
ZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2Nr
KiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1f
YWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoKICAgICBi
b29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0
YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZp
cnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRk
aW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBp
cyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXND
b25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7
Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAg
ICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAg
LTI2Niw4ICsyNTcsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0
dXNNYXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3Zl
IGFyaXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLCBhbmQgb250byBK
SVRDb2RlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZB
U1RfQUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogCiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgICAg
IEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CkBAIC0yODIsOSArMjc1LDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2lu
TWFwOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAg
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAg
ICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+
IG1faml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklU
Q29uc3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29u
c3RhbnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxp
bmVDb2RlKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJ
VERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBp
ZiAoTElLRUxZKG1faml0RGF0YSkpCkBAIC0yOTMsNiArMjkwLDggQEAgcHVibGljOgogICAgIH0K
ICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
KTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVREYXRhKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9qaXREYXRhKTsgfQorCiAgICAgSklUQWRkSUMqIGFk
ZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwogICAgIEpJVE11bElDKiBhZGRKSVRNdWxJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlB
cml0aFByb2ZpbGUqKTsKQEAgLTMyMiwxNSArMzIxLDEwIEBAIHB1YmxpYzoKICAgICAvLyBsb29r
aW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5n
IHRoaXMuCiAgICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4
KEJ5dGVjb2RlSW5kZXgpOwogICAgIAotICAgIHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFw
JiYgaml0Q29kZU1hcCkKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKLSAgICAgICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcCA9IFdU
Rk1vdmUoaml0Q29kZU1hcCk7Ci0gICAgfQogICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVN
YXAoKQogICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwot
ICAgICAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcDsKKyAgICAg
ICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2pp
dENvZGVNYXA7CiAgICAgfQogCiAgICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVu
aXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOwpAQCAtNDcyLDYgKzQ2Niw3IEBAIHB1Ymxp
YzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0K
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01
NzIsNiArNTY3LDcgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25z
dGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0
ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oaW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJl
Z2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhd
LmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVu
Y3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTYwMSw2ICs1OTcsMTEgQEAgcHVibGljOgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwogICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5t
X3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgfQorICAgIFNpbXBsZUp1bXBUYWJs
ZSYgYmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCisgICAgeworICAgICAg
ICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVt
YmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOyB9CkBAIC02MTEsNiArNjEyLDExIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9qaXREYXRhKTsKICAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIH0KKyAgICBTdHJpbmdKdW1wVGFibGUm
IGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgfQogI2VuZGlmCiAgICAg
c2l6ZV90IG51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNzk3LDYg
KzgwMyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0
IHsgcmV0dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVz
dHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVh
a3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9p
bnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCkBAIC04MzgsNiArODQ1LDcgQEAgcHVibGljOgog
ICAgIG11dGFibGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMg
dG8gc3RvcmUgdG8gaXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5
c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2Nh
cGFiaWxpdHlMZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNiwx
MSArOTE0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0
YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7
IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9p
bnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlS
ZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8g
YWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3Vu
bGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHBy
b3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNzAsNiArNzAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2UqIHdyYXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwogICAgIAogICAgIHN0YXRpYyBFeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwQW5kQWN0aXZhdGUoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spOworCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLCBtX2NvZGVCbG9jayk7
IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1l
dGFkYXRhLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBz
dGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhCiAKIHN0cnVjdCBHZXRCeUlk
TW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggewogICAgIEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGU7
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmls
ZSk7IH0KIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlM
ZW5ndGgpID09IDEyKTsKIApAQCAtODgsNiArODksNyBAQCB1bmlvbiBHZXRCeUlkTW9kZU1ldGFk
YXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUgbW9kZTsKICAgICAgICAgdWludDhfdCBoaXRDb3Vu
dEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBtdXN0IGJlIHplcm8gd2hlbiB3ZSB1c2UgUHJvdG9M
b2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhLCBtb2RlKTsgfQogICAg
IEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0IGRlZmF1bHRNb2RlOwogICAgIEdldEJ5SWRNb2Rl
TWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVu
Z3RoIGFycmF5TGVuZ3RoTW9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzg1LDYgKzM4NSw4IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcygK
ICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAorLy8gT09QUzogTWFrZSB0aGlzIHN0
dWZmIHdvcmsgd2l0aCBkYXRhIGljcyB0byBub3QgYXNzdW1lIGlubGluZSBhY2Nlc3MuCisKIHZv
aWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFj
Y2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFyZ2V0KQogewogICAgIGlm
IChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CkBAIC00MDQsOSArNDA2LDEyIEBAIHZvaWQgSW5s
aW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHRh
cmdldCkKIHsKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBP
T1BTOiBtYWtlIHNvbWUgdmVyc2lvbiBvZiBJbmxpbmVBY2Nlc3MgZm9yIGJhc2VsaW5lLiBQZXJo
YXBzIG1ha2UgaXQgZGF0YSBkcml2ZW4uIE9yIHBlcmhhcHMgaGF2ZSB0aGUgY29kZQorICAgICAg
ICAvLyBiZSBzaGFyZWQgc29tZWhvdyBiZXR3ZWVuIFVubGlua2VkQ29kZUJsb2Nrcy4KKwogICAg
ICAgICAvLyBJZiBpdCBpcyBub3QgR2V0QnlJZC1saWtlLXRoaW5nLCB3ZSBkbyBub3QgZW1pdCBu
b3Agc2xlZCAoZS5nLiBHZXRCeVZhbCkuCiAgICAgICAgIC8vIFRoZSBjb2RlIGlzIGFscmVhZHkg
YW4gaW5kaXJlY3QganVtcCwgYW5kIG9ubHkgdGhpbmcgd2Ugc2hvdWxkIGRvIGlzIHJlcGxhY2lu
ZyBtX2NvZGVQdHIuCi0gICAgICAgIGlmIChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIp
IHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5l
SklUICYmIHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikgewogICAgICAgICAgICAgLy8g
SWYgbV9jb2RlUHRyIGlzIHBvaW50aW5nIHRvIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlv
biwgdGhpcyBtZWFucyB0aGF0IElubGluZUFjY2VzcyBjb2RlIGlzIG5vdCBhIHN0dWIgb25lLgog
ICAgICAgICAgICAgLy8gV2UgcmV3cml0ZSB0aGlzIHdpdGggdGhlIHN0dWItYmFzZWQgZGlzcGF0
Y2hpbmcgY29kZSBvbmNlLCBhbmQgY29udGludWUgdXNpbmcgaXQgdW50aWwgd2UgcmVzZXQgdGhl
IGNvZGUuCiAgICAgICAgICAgICBpZiAoc3R1YkluZm8ubV9jb2RlUHRyLmV4ZWN1dGFibGVBZGRy
ZXNzKCkgPT0gc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCkpIHsKQEAgLTQyMSw2ICs0MjYsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nlc3M6IGxpbmtpbmcgc3R1
YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBzdHViSW5mby5t
X2NvZGVQdHIgPSB0YXJnZXQ7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0
YS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAg
T1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBUwogCiBzdHJ1Y3QgSXRlcmF0
aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90IHNlZW5Nb2RlcyB7IDAgfTsKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1vZGVzKTsgfSAKICAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9PSBzaXplb2YoSXRlcmF0aW9uTW9kZSkpOwog
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODUsNiArMjg1LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwog
ICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ss
ICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nl
c3NUeXBlOjpJbkJ5SWQ6CkBAIC00MzAsNiArNDMxLDIwNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9
CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byYgdW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBlID0gdW5saW5rZWRTdHViSW5m
by5hY2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHViSW5mby5zdGFydDsgLy8gT09Q
UzogZG8gd2UgbmVlZCBhIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBkb25lTG9jYXRpb24gPSB1
bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93UGF0aFN0YXJ0TG9jYXRpb24g
PSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKyAgICBjYWxsU2l0ZUlu
ZGV4ID0gQ2FsbFNpdGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAg
IGNvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7
CisgICAgbV9jb2RlUHRyID0gc2xvd1BhdGhTdGFydExvY2F0aW9uOworCisgICAgdXNlZFJlZ2lz
dGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICBpZiAo
YWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpHZXRCeUlkICYmIHVubGlua2VkU3R1YkluZm8uYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9yX25leHQs
IHdlIGNhbid0IGNsb2JiZXIgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgZWl0aGVyLgorICAgICAgICB1
c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gpOworICAg
IH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVs
ZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsQnlJZDoK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlb2Y6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1bmxp
bmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6
CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQor
ICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5r
ZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0
aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gb3BlcmF0aW9uUHV0
QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoK
KyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5l
Y21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0
KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVm
aW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVs
ZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZh
dGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJy
YW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQ
cml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAo
YWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxp
bmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJh
c2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJh
c2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9
IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkRlbEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmll
ciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2
YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0
dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxz
ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZW9m
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgcHJvdG90
eXBlSXNLbm93bk9iamVjdCA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAg
ICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJh
c2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIg
PSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BS
ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRC
eUlkRGlyZWN0OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgor
ICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBtX3N0dWJJbmZv
LT5iYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAg
ICAgIG1fc3R1YkluZm8tPnZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvLT5yZWdzLnRoaXNHUFIgPSBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJbmZvLT5t
X3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IElu
dmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1
ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNz
VHlwZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2
YXRlQnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAg
ICB2YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86
OmNoZWNrQ29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7
CiAgICAgR2V0QnlWYWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2
YXRlTmFtZSwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwK
QEAgLTc4LDYgKzc5LDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0
cmluZ0xlbmd0aAogfTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1
cmVTdHViSW5mbyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDEs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwog
CisgICAgdm9pZCBpbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJs
b2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9B
R0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2Vz
IHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTQ0
Nyw2ICs0NTIsMTggQEAgaW5saW5lIGF1dG8gYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bgog
ICAgIH0KIH0KIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8geworICAgIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQ7CisgICAgUHJpdmF0ZUZpZWxk
UHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kOworICAgIEVDTUFNb2RlIGVjbWFNb2RlOworICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAvLyBPT1BTOiBEbyB3ZSBuZWVkIHN0
YXJ0IGZvciBkYXRhIElDcz8KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElD
IGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3Ig
J2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVj
dHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Miw2ICs2Miw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xh
c3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGluZUpJVENvZGU7CiBz
dHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29uc3RhbnQgOiBpbnQz
Ml90OwogCkBAIC0xNzUsNiArMTc2LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4ZWRWZWN0
b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBt
X2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBj
b25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgp
OyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIwOSwxNSBAQCBwdWJsaWM6CiAg
ICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVybiBp
bnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBjb25z
dCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigpOwor
ICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9u
c0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1
Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVn
aW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25zdCB7IHJldHVy
biBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51bUNhbGxlZUxvY2Fs
cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5zaWduZWQgbnVt
VmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDYgKzM0NSwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpOwogICAgIH0K
IAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQor
ICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNv
bXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFpc0J1aWx0aW5GdW5j
dGlvbigpOworICAgIH0KIAogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwg
U3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENv
ZGVHZW5lcmF0aW9uTW9kZT4pOwpAQCAtMzk0LDYgKzQxMCw3IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVu
dEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJh
c2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07
CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEwLDYgKzQyNywxMCBAQCBw
cml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVj
dGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9s
aXZlbmVzczsKIAorICAgIC8vIE9PUFM6IGJpbmQgYSBiZXR0ZXIgcGxhY2UgdG8gc3RvcmUgdGhp
cyBzdHVmZj8KKyAgICBWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPiBtX2JpbmFyeUFyaXRoUHJv
ZmlsZXM7CisgICAgVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxl
czsKKwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQ
cm9maWxlOwpAQCAtNDU1LDYgKzQ3NiwyOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAg
IGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMp
OworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChvZmZzZXQpOworICAgIH0KKwor
ICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNp
Z25lZCByZXN1bHQgPSBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX2Jp
bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmls
ZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3VuYXJ5QXJpdGhQcm9maWxl
cy5zaXplKCk7CisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5hcnlBcml0
aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQmluYXJ5
QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1cm4gbV9i
aW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHVuYXJ5QXJp
dGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9
CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPElu
c3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZpc2lv
biAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRh
ZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw5ICsxMDEsMTggQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2lu
ZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZzZXRJbk1l
dGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBBU1NFUlQo
bV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9IG1faXMz
MkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRhYmxlMTYo
KVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6
ZW9mKE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9CisKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfb2Zmc2V0VGFibGVFbnRyaWVzID0gTlVNQkVS
X09GX0JZVEVDT0RFX1dJVEhfTUVUQURBVEEgKyAxOyAvLyBvbmUgZXh0cmEgZW50cnkgZm9yIHRo
ZSAiZW5kIiBvZmZzZXQ7CiAKICAgICAvLyBOb3QgdG8gYnJlYWsgYWxpZ25tZW50IG9mIDMyYml0
IG9mZnNldCB0YWJsZSwgd2Ugcm91bmQgdXAgc2l6ZSB3aXRoIHNpemVvZihPZmZzZXQzMikuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQ
cm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAgdGVtcGxhdGU8dW5zaWdu
ZWQgbnVtYmVyT2ZCdWNrZXRzQXJndW1lbgogc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNr
ZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNwZWNG
YWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRl
eE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNG
YWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKQEAgLTEzNCw3ICsxMzMs
NyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIAogICAgICAgICByZXR1cm4g
bV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29kZWRKU1ZhbHVlIG1fYnVja2V0
c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rp
b24geyBTcGVjTm9uZSB9OwpAQCAtMTU2LDYgKzE1NSw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVX
aXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1YmxpYyBWYWx1
ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAgICBWYWx1ZVByb2ZpbGUoKSA6
IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
VmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBzdHJ1Y3QgVmFsdWVQcm9maWxl
QW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OTgsNyAr
MTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnkKICAgICAg
ICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0eXBl
KTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUsIG1fY29kZUJs
b2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBv
cF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90Pihkc3QsIHNyYyk7CkBAIC0x
Njk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VHlw
ZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbmMoUmVnaXN0ZXJJRCog
c3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BJbmM6OmVt
aXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAg
ICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0Rz
dCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlB
cml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODIsNyArNjgyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklEKj4KICAgICAgICAgZW1pdEJp
bmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3Jj
MiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBCaW5hcnlPcDo6
ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAgICAgICAgICAgIEJpbmFyeU9w
OjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1fY29kZUJsb2NrLT5hZGRCaW5h
cnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODg5LDcg
Kzg4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIAogICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAg
ICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxl
ZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywg
WyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEo
c2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBz
aHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MTcx
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg5Niw3ICs4OTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0lu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0g
ewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAg
ICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFy
ZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5ODUs
NyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmEKICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwogCiAg
ICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwg
SklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpE
RkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwg
dXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VHUFIp
LCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIEludmFs
aWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CiAKQEAgLTE0NzQ3LDcgKzE0NzQ3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5ncHIoKTsK
IAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
dGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJbmRleCk7Cisg
ICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlz
UmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxv
Y2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lv
biAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMTcsNyArNDMxNyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRM
SklUKSA/IHBhcmFtcy5ncFNjcmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgICAg
ICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAg
ICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFu
dGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAgICAg
ICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3Jp
Z2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAgICAgICAg
ICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZh
bGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1Yklu
Zm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CkBAIC0xMDM1NSw3ICsxMDM1NSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQu
Y29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZv
OjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVn
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0
byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJ
bmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAg
ICAgICAgICAgICAgfSk7CkBAIC0xMDY5OCw3ICsxMDY5OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2Fs
bCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0
aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdU
MCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xv
dygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwOTc5LDcgKzEwOTc5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwog
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAg
IGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlk
R1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAg
ICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQs
IEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJl
Rm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAyODE3MTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3b3JraW5n
IGNvcHkpCkBAIC00MiwxNyArNDIsMjIgQEAgY2xhc3MgTWV0YWRhdGEKICAgICBkZWYgc3RydWN0
KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNvbnZlcnRGaWVs
ZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmll
bGRzLCBnZW5lcmF0ZU9mZnNldE9mKQogICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8ZmllbGQs
IHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAgICAgICAg
ICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAg
ICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9
dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSwgZmFsc2UpfVxu
I3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAi
I3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAgICAgICAg
ICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
IiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGROYW1lfTsiCisgICAgICAgICAgICAgICAg
ICAgIGlmIGdlbmVyYXRlT2Zmc2V0T2YKKyAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBy
ZXN1bHQgKyAiXG4iICsgInN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51
cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJldHVybiBPRkZTRVRPRihNZXRhZGF0YSwgbV8j
e2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0CiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmQuam9pbigi
XG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAg
ICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAg
IiwgQGZpZWxkcywgdHJ1ZSkKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBpZiBAaW5p
dGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODE3MTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY5OCw4ICs2OTgsMTMgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3Rv
cmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBpbmZvKQog
ewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgZW1p
dFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgaW5mbyk7Cit9CisKK3Zv
aWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2Jq
ZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAg
ICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAg
ICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRD
b21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MTgsNiAr
MTcxOCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZpcnR1
YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOwogICAg
IAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNsYWlt
U3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAs
NyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNvbnN0CiAKIENv
bXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUoKQogewotICAgIENvbXBp
bGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAg
Q29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQobV9j
b2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlvbkZh
aWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklU
Q29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblByb2xvCiAg
ICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBlcnM6
OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVS
ZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRv
d0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9y
ZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNjb3BlLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2spLCBBZGRy
ZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwg
Y29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0
cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1
cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVn
IHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93Q2hpY2tl
biogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODQw
LDcgKzg0MCwxOCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2Ugb3BlcmF0aW9ucyBjbG9iYmVyIGFs
bCB2b2xhdGlsZSByZWdpc3RlcnMuIFRoZXkgYXNzdW1lIHRoYXQgdGhlcmUgaXMgcm9vbSBvbiB0
aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sgdG8gbWFyc2hhbGwgY2FsbCBhcmd1bWVudHMuCiAgICAg
dm9pZCBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwg
R1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NvcGUpOwotICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQ
UlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2Nv
cGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgp
CisgICAgeworICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IGZyYW1lKSkpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46
OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKKyAgICAgICAgc3RvcmVWYWx1
ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICAgICAgc3RvcmVQdHIoc2NvcGUsIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBzY29wZSkpKTsKKyAgICAgICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkp
OworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBjYWxsU2l0ZUluZGV4KSkpOworICAgIH0KKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2lu
dGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAg
ICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0
LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3Bw
CShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJl
Z2lzdGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxG
cmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBj
YWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygp
IH07Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9u
cyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAg
IFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
RGF0YS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVi
bGljOgogICAgIEdQUlJlZyBudW1iZXJUYWdSZWdpc3RlciB7IEludmFsaWRHUFJSZWcgfTsKIAog
ICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayopOworICAgIHZvaWQg
c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0Kik7CiAj
ZW5kaWYKICAgICBWYWx1ZVJlY292ZXJ5IGNhbGxlZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQYXRj
aENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgp
Ci0gICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpTSW50ZXJmYWNl
SklUKCZ2bSwgbnVsbHB0cikKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAg
ICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUo
KSA6IDApCiAgICAgLCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAgLTc3LDYgKzc3
LDkgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9z
aG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25z
dGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9i
amVjdCk7CisgICAgbV9wcm9maWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICBtX3VubGlu
a2VkQ29kZUJsb2NrID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogfQogCiBKSVQ6
On5KSVQoKQpAQCAtOTAsOCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9u
Q2hlY2soKQogICAgICAgICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0g
ICAgCi0gICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJ
bW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsK
KyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDAp
OworICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1t
MzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBB
U1NFUlQoIW1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGlu
ZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNiwxOCBAQCB2b2lkIEpJVDo6
ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChO
b3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQ
UlJlZyBwb2ludGVyVG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChH
UFJSZWcgcG9pbnRlclRvU2V0KQogewogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWws
IEFkZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJSZWFk
T25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQordm9pZCBKSVQ6OmVtaXRWYXJSZWFk
T25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsK
LSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgo
RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhclJl
YWRPbmx5V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNo
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFyUmVhZE9ubHlXYXRjaHBv
aW50KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBB
ZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmFzc2VydFN0
YWNrUG9pbnRlck9mZnNldCgpCkBAIC0xMjksNyArMTM1LDcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0
YWNrUG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBy
ZWdUMCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsKQEAgLTE4
MSwyMSArMTg3LDQxIEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWMK
ICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1dENvZGVCbG9j
a1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOworICAgIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVzdWx0
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1
dGFibGVPclJhcmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGJy
YW5jaFRlc3RQdHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1
bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0
aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFU
YWcpLCByZXN1bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3Ry
dWN0KCkpLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3Vs
dCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSksIHJlc3Vs
dCk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjpvZmZzZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIocmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworfQorCiB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQotICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsK
KyAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4i
KTsKICAgICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3Vt
ZW50Q291bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3Ry
dWN0aW9uQ291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7
CiAKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJs
b2NrLT52bSgpOworICAgIFZNJiB2bSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnZtKCk7CiAgICAg
Qnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7CisKKyAgICAvLyBPT1BTOiBNYXli
ZSBvbmx5IGRvIHRoaXMgaWYgd2UgZGlzYWJsZSBzaGFyaW5nIHNvbWVob3c/CisgICAgLyoKICAg
ICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4ICYmIChtX2NvZGVCbG9jay0+aW5oZXJp
dHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0czxNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7CiAgICAgICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMg
b3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFtQ29kZUJsb2NrJ3MgZXhhY3Rs
eSBvbmNlLgogICAgICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBiZSBpbnZhbGlkIG90
aGVyd2lzZS4gV2hlbiB0aGUgTExJbnQgZGV0ZXJtaW5lcyBpdCB3YW50cyB0bwpAQCAtMjM2LDYg
KzI2Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KKyAgICAqLwogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5n
U2xvd0Nhc2UgPSAwOwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgw
KTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CkBAIC0y
NzgsOSArMzA1LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwog
ICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigp
KSkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAg
ICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7Ci0gICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVO
YW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29k
ZUJsb2NrKTsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxD
YWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJ
VCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIg
IiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjdHguZ3ByPENvZGVCbG9jayo+KHJlZ1Qw
KSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCkBAIC01MjcsNyArNTU0LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4
IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5
dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRl
Y29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVy
Ym9zZSkKICAgICAgICAgICAgIGRhdGFMb2dMbigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cg
Y29kZSBmb3IgIiwgbV9ieXRlY29kZUluZGV4LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09m
ZnNldCgpKTsKQEAgLTU0NSw4ICs1NzIsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMoKQogCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklU
RXhlY3V0aW9uKCkpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRl
eHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZw
PENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigi
SklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gU0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0s
ICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAg
ICAgICAgIH0pOwogICAgICAgICB9CkBAIC02NzQsNTUgKzcwMSw1NiBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKK3ZvaWQgSklUOjplbWl0TWF0ZXJp
YWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpCit7CisgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21l
dGFkYXRhR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0
T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7
Cit9CisKK3ZvaWQgSklUOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCkKK3sKKyAgICBCYXNlOjpl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNl
bGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKIHZvaWQgSklUOjpjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBE
Rkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwo
KTsKKyAgICAvLyBPT1BTOiBNYXliZSB0aGlzIHNob3VsZCBiZSBkb25lIG9uIHVubGlua2VkIGNv
ZGUgYmxvY2s/CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2Fz
ZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsK
LSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3No
b3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6
OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAg
IG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxp
bmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAgIHN3aXRjaCAobV9jb2RlQmxv
Y2stPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1bGVD
b2RlOgotICAgIGNhc2UgRXZhbENvZGU6Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0aW9u
Q29kZToKLSAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBi
ZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgotICAgICAgICAvLyBEb24n
dCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91
bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5saW5l
RnVuY3Rpb24obV9jb2RlQmxvY2spOwotICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICBpZiAo
bV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2Rl
QmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQot
ICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1
bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2Nr
LT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAg
bV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAg
ICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRh
YmxlcygpKQorICAgICAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2lt
cGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9m
VW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAg
IH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92
bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVG
b3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVRE
aXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25z
OjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIE9PUFM6
IGJ1aWxkIGEgZGlzYXNzZW1ibGVyIG9mZiB1bmxpbmtlZCBjb2RlIGJsb2NrCisgICAgICAgIG1f
ZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2Rl
QmxvY2spOworICAgIH0KICAgICBpZiAoVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyKSkgeworICAgICAgICAvLyBPT1BTOiBidWlsZCBwcm9maWxlciBkaXNhc3NlbWJsZXIgb2Zm
IHVubGlua2VkIGNvZGUgYmxvY2sKICAgICAgICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAog
ICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBt
X3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9j
ayksCisgICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVC
eXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVCbG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmls
ZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNv
ZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAg
bV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29k
ZUluZGV4KDApKSk7CkBAIC03NDIsMTEgKzc3MCwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExp
bmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUlu
UHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJh
bWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVk
IG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlz
dCBzdGFja092ZXJmbG93OwpAQCAtNzU3LDE2ICs3ODYsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVD
YWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZz
ZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0
ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRh
QW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUlu
ZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKTsgKythcmd1bWVudCkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpICYmICghbV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsK
KyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFy
Z3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4ZWRWZWN0b3I6Om9mZnNldE9mU3RvcmFnZSgpKSwg
cmVnVDIpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1l
bnQgPCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsK
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2Fu
dCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAv
LyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byBy
ZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+
aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArODEw
LDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAg
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2Fk
R1BSKCkpOwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3Vs
dFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJl
c3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6
Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+
aml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIp
KQogICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXpl
TWFya2VyKSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MzIsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxv
d0Vycm9yLCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMg
MSwgd2UgbmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlG
aXh1cCA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkg
eworICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2Fy
aXR5Q2hlY2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9j
b2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rp
b25Qcm9sb2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxv
Y2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tU
b0ZyYW1lSW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCks
IEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQo
KSkpOwogCiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxp
bmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkp
LmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMy
X3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9u
KG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNo
ZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJp
dHlDaGVjaywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNo
VGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBA
IC04MzksNyArODc1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9
IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2Rl
QmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBt
X2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIo
KnRoaXMsIG1fdW5saW5rZWRDb2RlLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwg
ZWZmb3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04NTgsOCArODk0LDggQEAgdm9pZCBKSVQ6
OmxpbmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAgICAgIGNhc2UgU3dp
dGNoUmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpDaGFyYWN0
ZXI6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtl
ZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlW3RhYmxlSW5kZXhdOwogICAg
ICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVs
dE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2Vk
VGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEs
OCArOTA3LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBT
d2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBj
dGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJl
bHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAg
Zm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMo
KSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNo
T2Zmc2V0OwpAQCAtOTA2LDMyICs5NDIsMzUgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7CiAgICAgfQog
Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7Ci0gICAg
ZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNo
ZXMobV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9p
bkJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFu
Y2VPZnMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVC
cmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAo
YXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMp
IHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZp
bmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRo
aXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0
QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKIAogICAgIGZvciAoYXV0byYgY29tcGls
YXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAgICAgIENhbGxMaW5rSW5m
byYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAgICBpbmZvLnNl
dENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50
ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKLSAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZv
LmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpj
b21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGluZm8uZG9uZUxv
Y2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxh
dGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIEpJVENvZGVN
YXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNv
ZGVPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNT
ZXQoKSkKLSAgICAgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJ
bmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRh
Zz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb2Rl
QmxvY2stPnNldEpJVENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKSk7CisgICAg
SklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5
dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNT
ZXQoKSkKKyAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4
KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPiht
X2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk3OSwzNyBAQCB2b2lkIEpJ
VDo6bGluaygpCiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7Cisg
ICAgICAgIC8vIE9PUFM6IG1ha2UgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91dCB1bmxpbmtl
ZCBDQj8KICAgICAgICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxl
cigpKQogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21w
aWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7Cisg
ICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9m
aWxlZENvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAogICAgIGlmIChtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAgICAgbV9wY1RvQ29k
ZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAgCisgICAgLy8gT09QUzog
TWFrZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBV
bmxpbmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJ
TkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAg
ICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRU
eXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAg
ICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5
cGUobV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwog
ICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlD
aGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNr
KTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3
aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBh
ZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisK
KyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxz
KTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENh
bGxMaW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1v
dmUobV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJs
ZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7Cisg
ICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgp
OworICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2Rl
LT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOwogCiAgICAgaWYgKEpJ
VEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2Rl
IGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1l
bW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCkt
PmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBj
b2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5l
eGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFi
bGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0
IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5h
bGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICsxMDE4LDIxIEBAIENv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZl
ci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1f
Y29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0
ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9j
ay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxlcklu
Zm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAg
Ly8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0
aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhh
bmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9
CisgICAgLy8gT09QUzogRG9uJ3QgdGhpbmsgdGhpcyBzaHJpbmsgaXMgcmVhbGx5IGRvaW5nIGFu
eXRoaW5nIGFueW1vcmUuIFZlcmlmeS4KKyAgICAvL3sKKyAgICAvLyAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgIC8vICAgIG1fY29kZUJsb2Nr
LT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7
CisgICAgLy99CiAKKyAgICAvLyBPT1BTOiBtX3BjVG9Db2RlT3JpZ2luTWFwIHNob3VsZCBsaXZl
IG9uIEJhc2VsaW5lSklUQ29kZSBmb3IgYmFzZWxpbmUgY29kZWJsb2Nrcy4KICAgICBpZiAobV9w
Y1RvQ29kZU9yaWdpbk1hcCkKICAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2lu
TWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOwogCiAgICAgbV92bS0+bWFjaGluZUNv
ZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0YXRp
Y19jYXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAgICAgICAgc3RhdGljX2Nhc3Q8
ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CisgICAgICAgIHN0YXRp
Y19jYXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7
CiAKLSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwo
KSk7CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShtX2ppdENv
ZGUucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVs
OwogfQpAQCAtOTk4LDExICsxMDQ0LDExIEBAIHNpemVfdCBKSVQ6OmNvZGVTaXplKCkgY29uc3QK
ICAgICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0
IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorQ29tcGls
YXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGRvTWFpblRocmVhZFByZXBhcmF0aW9u
QmVmb3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoZWZm
b3J0KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICByZXR1cm4gZmlu
YWxpemVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlRXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxNCArMTA4OCwxNCBAQCB2b2lkIEpJVDo6
ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxl
ckxvZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBhcmluZyBmb3IgSklUIGNvbXBp
bGF0aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENv
ZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3Io
VW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpID09IFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAogICAgIHJldHVybiByb3VuZExv
Y2FsUmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChjb2RlQmxvY2stPm51bUNhbGxl
ZUxvY2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9
CiAKLWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykK
K2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJs
b2NrKQogewogICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVy
Q291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw0MCBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorICAgIGNsYXNzIEpJVENvbnN0YW50UG9vbCB7CisgICAgcHVibGljOgorICAgICAgICB1
c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisgICAgICAgIGVudW0gY2xhc3MgVHlwZSA6IHVp
bnQ4X3QgeworICAgICAgICAgICAgR2xvYmFsT2JqZWN0LAorICAgICAgICAgICAgQ2FsbExpbmtJ
bmZvLAorICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8sCisgICAgICAgICAgICBGdW5jdGlv
bkRlY2wsCisgICAgICAgICAgICBGdW5jdGlvbkV4cHIsCisgICAgICAgIH07CisKKyAgICAgICAg
c3RydWN0IFZhbHVlIHsKKyAgICAgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgICAgIFBhY2tl
ZFB0cjx2b2lkKj4gcGF5bG9hZDsKKyAgICAgICAgfTsKKworICAgICAgICBKSVRDb25zdGFudFBv
b2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29s
JiBvcGVyYXRvcj0oSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKworICAgICAgICBDb25z
dGFudCBhZGQoVHlwZSB0eXBlLCBQYWNrZWRQdHI8dm9pZCo+IHBheWxvYWQgPSBudWxscHRyKQor
ICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXpl
KCk7CisgICAgICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBlLCBwYXlsb2Fk
IH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHMuc2l6ZSgpOyB9CisgICAgICAg
IFZhbHVlIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpXTsgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50czsKKyAgICB9Owor
CiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZTsKQEAgLTE0OSw5ICsxODMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9Owog
CiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgc2xvd1BhdGhTdGFydDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRv
bmVMb2NhdGlvbjsKLSAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CisgICAgICAg
IFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKICAgICB9OwogCiAg
ICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CkBAIC0xNzEsNiAr
MjA1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRp
c3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNl
dC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNl
dCA9IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBw
dWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUlu
ZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAg
ICAgIH5KSVQoKTsKQEAgLTE3OCwxOCArMjE0LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2
b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQp
OwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAg
ICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsK
ICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5U
aHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRp
YyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNl
dCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQo
dm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7Cisg
ICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2
YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOwotICAgICAgICBz
dGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOwor
ICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9j
ayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcs
IFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFNlY29uZHMgdG90YWxDb21waWxlVGltZSgpOwpAQCAtMTk5LDcgKzIzNSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAg
ICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpOwogICAgICAgICB2b2lkIGxpbmso
KTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRp
b25FZmZvcnQpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShDb2Rl
QmxvY2sqLCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBv
dXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENh
bGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
KQpAQCAtMjIzLDYgKzI1OSwzMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlm
CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxv
YWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBs
b2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBs
b2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7
CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNv
ZGU+CisgICAgICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUsIGNvbnN0IEJ5dGVj
b2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgorICAgICAgICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0ZWNv
ZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CisgICAgICAgIHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGxvYWRDb25z
dGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRH
bG9iYWxPYmplY3QoR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQo
VmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworCisgICAgICAgIHZvaWQgZW1pdFB1dENvZGVCbG9j
a1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdUMCk7CisKICAgICAgICAgdm9p
ZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5kbGVyKTsKQEAgLTI1OCwxNiAr
MzE4LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAg
ICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQg
IT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBv
cF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
LCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwog
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90
PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bj
b2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3Rh
bnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBib29sIGNvbXBp
bGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtl
ZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJv
b2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CkBAIC0yOTEsMTAgKzM1MSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ly8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5k
IHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAgICAgICAgLy92b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNv
bnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVS
ZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBA
IC0zMDcsNiArMzY3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxl
KiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmls
ZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChj
b25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwg
UmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01
OTIsNyArNjU2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
am5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjI2LDE0ICs2ODksMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWdu
ZWQpOwogCiAgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFj
Y2Vzc1R5cGUpOwotICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29t
bW9uKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNo
ZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2b2lkIGVtaXRWYXJS
ZWFkT25seUNoZWNrKFJlc29sdmVUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9u
Q2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsKKyAgICAgICAgdm9p
ZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwog
ICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVk
IGRlcHRoKTsKICAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCkBAIC02NDUsNyArNzA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAg
ICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCop
OwotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsKKyAg
ICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQp
OwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQ
dXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpAQCAtNjU0LDYgKzcxNyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgICAgICBib29sIGlz
S25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRP
cGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJ
bnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIo
VmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY5NSwyNiArNzU5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7CiAg
ICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNv
bHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsK
LSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VO
RVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJv
bVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KLSAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1vZHVsZVZh
ciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4gdXNlIGEg
dGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3ZSBkb24n
dCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAgICAgICAgICAgcmV0
dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09
IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2Vu
ZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX1JFU09M
VkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFU
T1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVy
YXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1l
KTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBj
b25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3RkOjpvcHRp
b25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CiAKICAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdl
bmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CkBAIC03NTksMTAgKzgwNSwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5k
Q2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdm9pZCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChBZGRyZXNzLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIEFkZHJlc3MsIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29k
ZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVj
b2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAg
ICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNS
ZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIwLDIwICs4NjYsMjAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKEFkZHJl
c3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkpOwogICAgICAgICB9CiAKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlLCB0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVu
YWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRh
dGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1
cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1l
dGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShieXRlY29kZSwg
b3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lIEJ5dGVjb2Rl
LCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJh
aXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0gICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNl
dHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5cGU+KHRhcmdldCwgYXJncy4u
Lik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdH
UFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2Rl
LCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOwog
ICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlw
ZW5hbWUuLi4gQXJncz4KQEAgLTkxOCwyNSArOTY0LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVy
biBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGlu
ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAgICAgIGJvb2wg
c2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsgfQog
I2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBmYWxzZTsgfQog
ICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21w
aWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFsbCBjb2RlIGdl
dHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJu
IGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRh
QW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgdm9pZCBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7
CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEg
dGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3Nz
IHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAg
ICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkg
dGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0
VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBC
aW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAogICAgICAg
ICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtOTYzLDkgKzEwMDQsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOwog
ICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCi0gICAgICAgIEhhc2hN
YXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwotICAgICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQcm9maWxlczsK
LQogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExpc3Qg
bV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7CiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQpAQCAtOTk5LDExICsxMDM3LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAogICAgICAg
ICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9y
SW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5
dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgICAgIFJlZlB0
cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgICAgIE1hdGhJQ0hvbGRlciBtX21hdGhJ
Q3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1faml0Q29kZTsKKworICAgICAg
ICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1f
dW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJ
bmZvczsKKyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRT
dHViSW5mb3M7CisgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hK
dW1wVGFibGVzOworICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX21l
dGFkYXRhR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUjsKKyAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19jb25zdGFudHNHUFIgPSBMTEludDo6UmVnaXN0ZXJz
OjpwYkdQUjsKKworICAgICAgICBzdHJ1Y3QgTm90QUNvZGVCbG9jayB7IH0gbV9jb2RlQmxvY2s7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENo
YXIob3AyKSkgewogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0K
IAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEp
OwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IElu
dC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1Qx
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2Fk
KG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4
IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
LSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5r
ZWRDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZWdhdGU+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0
aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdv
dWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0
aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4o
bmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxl
ZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAtODk5LDggKzkwNCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJp
dGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubV9wcm9maWxlSW5kZXgp
OworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0aFByb2Zp
bGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBh
ZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAg
LTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJ
QzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5l
KCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5l
Q29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsK
ICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3Ms
IGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0aFByb2Zp
bGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChu
b25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3Jj
UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAxNSwxMCArMTAyMSwxMSBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3Bl
cmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBt
YXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hH
UFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkK
LSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3Ms
IHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdz
KTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEzICsxMDYyLDE0IEBAIHZvaWQgSklUOjplbWl0
TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0
aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlv
bl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlv
bl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3Jj
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQ
cm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pN
aWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVk
SW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBz
bG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIwLDEzICsxMTI4LDE0IEBAIHZvaWQgSklUOjpl
bWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFBy
b2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xv
d1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlv
bl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJ
VE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywg
cmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWlj
PihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0
aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihy
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAg
IGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5n
KCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQ
cm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1fcHJvZmlsZUluZGV4KTsKIAogICAgIFNuaXBwZXRP
cGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAg
IFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNv
bmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJ
Q3MuYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVs
PihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZU11bCk7CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRo
UHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsKKyAgICBKSVRTdWJJQyog
c3ViSUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzMiw3ICsyMzIsNyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2
CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBz
dG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxs
ZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgcmVnVDEsIHJlZ1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAg
LTMyNCw3ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlv
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBl
bWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93
Q2FzZShjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxs
UmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52
aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOwogfQogCkBAIC01MywxMCArNTMsOSBAQCBzdGQ6OmVu
YWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9w
Y29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9w
X3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hl
Y2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50SW5j
bHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVj
a3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFj
a09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCkBAIC02
NCw3ICs2Myw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZz
ZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsK
ICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsK
LSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVja3Bv
aW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIHJlZ1QwLCByZWdUMCk7CiAgICAgICAgIGRv
bmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTc4LDcgKzc3LDcgQEAgc3RkOjplbmFibGVfaWZf
dDwKICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9
PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwg
Q2FsbExpbmtJbmZvKiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0
ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKQEAg
LTkxLDcgKzkwLDggQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAog
ICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3Vt
ZW50czsKICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJh
bWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lz
dGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCByZWdUMCwgcmVnVDEsIC1maXJzdEZyZWVS
ZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1maXJz
dEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0aGlzLCBy
ZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTAxLDE0ICsxMDEsMTYgQEAgSklUOjpjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJh
dGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UKICAgICAgICAgc2V0dXBP
cGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0aW9u
KHNldHVwT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCByZWdU
MywgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50
LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXls
b2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7Ci0gICAgSnVtcCBub3RCaWdnZXN0ID0gYnJh
bmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMiwgaW5mby0+YWRk
cmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7CisgICAgbG9hZENvbnN0YW50
KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAs
IENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwg
cmVnVDMpOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMywgcmVn
VDIpOworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zm
c2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CiAgICAgbm90QmlnZ2VzdC5s
aW5rKHRoaXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgpAQCAtMTI3LDE2ICsx
MjksMTYgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpCiB0ZW1wbGF0ZTw+
CiBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVjb2RlKQog
ewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAg
c3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2Fs
bGVyRnJhbWVPZmZzZXQoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3Vu
bGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBy
ZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
RW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2Rl
KTsKIApAQCAtMTQ4LDcgKzE1MCw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5m
byA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFkZChD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlu
a0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29k
ZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE1OCw0NiBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFs
U2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAq
IHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxD
YWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVj
b2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxD
YWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCi17Citib29sIEpJVDo6Y29t
cGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkgewogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVt
cGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRl
Y29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK2Jv
b2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlu
a2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxsRnJh
bWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdz
ID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0g
R1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0K
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0g
bWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVt
UGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFn
UmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICBzaHVmZmxlRGF0YS0+
bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShi
eXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29kZS5t
X2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsr
aSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgc2h1ZmZsZURhdGEt
PmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNr
KAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhp
cyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwog
ICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAgICAgICBWYWx1ZVJlY292ZXJ5Ojpp
bkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNh
dmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEo
c2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5Ojpp
bkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0YS0+c2V0dXBDYWxsZWVT
YXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJ
Qzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURh
dGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9D
b25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6
ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKKyAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRh
aWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKworICAgIHNo
dWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8tPmZyYW1lU2h1ZmZsZURhdGEgPSBX
VEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsK
ICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlv
biA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIxOCwxNCArMjIzLDI1IEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6
ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZy
YW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZv
ID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBp
bmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKKworICAgIFVu
bGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOworICAgIGlmIChvcGNvZGVJRCAhPSBv
cF9jYWxsX2V2YWwpIHsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBtX3Vu
bGlua2VkQ2FsbHMuYWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlw
ZUZvcihvcGNvZGVJRCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZvKTsKKworICAgICAg
ICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRl
eCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9u
SW5mbygpKTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS51bmxpbmtlZENhbGxMaW5rSW5mbyA9IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3Rh
bnQ7CisgICAgfQorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQp
OwogCiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRlY29kZUlu
ZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOwor
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBo
b2xkcyBjYWxsZWUuCkBAIC0yMzQsMTYgKzI1MCwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgp
ID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZv
OjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAgaWYgKGNv
bXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQorICAgIGlm
IChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZv
Q29uc3RhbnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0
YW50LCByZWdUMik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAgICBh
dXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwg
cmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7CisgICAgICAgIGF1dG8g
c2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhp
cywgcmVnVDAsIHJlZ1QyLCBbJl0gewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CiAgICAgICAg
IH0pOwpAQCAtMjUzLDEzICsyNjUsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBzbG93UGF0aHMg
PSBpbmZvLT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpV
c2VEYXRhSUM6Olllcyk7CisgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRE
YXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyKTsKICAgICBhdXRvIGRvbmVMb2NhdGlv
biA9IGxhYmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0
aW9uOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjczLDIw
ICsyODUsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMyk7CisgICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKIAogICAgIGlm
IChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAg
ICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1f
dm0sICp0aGlzKTsKKyAgICBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgqbV92bSwg
KnRoaXMsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1
cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKQEAgLTM5NSwxNyArNDA3LDMwIEBA
IHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KIAogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKICAgICAKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworCisgICAgbW92ZShyZWdUMCwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCks
IHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQ
UiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uZXh0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhp
cyk7CiB9CkBAIC00MTYsMTAgKzQ0MSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGlu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCi0gICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGl0ZXJh
dG9yR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBMaXN0IG5v
dE9iamVjdDsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyYXRvckdQ
UikpOwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0b3JHUFIp
KTsKQEAgLTQzMiwxOSArNDU1LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9v
cGVuKGNvbnMKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVy
YXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudCkucmF3Qml0cygpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgbW92
ZShpdGVyYXRvckdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIAog
ICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93
SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRvbmUubGlu
ayh0aGlzKTsKIH0KQEAgLTQ1Miw3ICs0NzMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3Jfb3Blbihjb25zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0g
KCkgewogICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNh
c2UgTmFycm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC00NzAs
NTAgKzQ5MCw3NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAg
ICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6
R2VuZXJpYykpKTsKIAogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgb3I4KFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIEFi
c29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9pdGVyYXRpb25NZXRhZGF0YS5zZWVuTW9kZXMpKTsK
KyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRh
OjpvZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9m
ZnNldE9mU2Vlbk1vZGVzKCksIHJlZ1QwKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIHJlZ1QwKTsKKyAgICBzdG9y
ZThUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNl
dE9mU2Vlbk1vZGVzKCkpOwogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+KGluc3Ry
dWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRDaGVja3Bv
aW50KCk7CiAgICAgLy8gY2FsbCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkgaW4g
cmVnVDAKIAotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBpdGVyUmVz
dWx0R1BSID0gcmVnVDI7Ci0gICAgR1BSUmVnIGRvbmVHUFIgPSByZWdUMTsKLSAgICAvLyBpdGVy
UmVzdWx0R1BSIHdpbGwgZ2V0IHRyYXNoZWQgYnkgdGhlIGZpcnN0IGdldCBieSBpZCBiZWxvdy4K
LSAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpzY3JhdGNoOworICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BS
KTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6cmVzdWx0OwogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGl0ZXJSZXN1bHRHUFIpOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHN0YXRpY19hc3NlcnQocmV0dXJu
VmFsdWVHUFIgPT0gYmFzZUdQUik7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIpOwogCiAgICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJl
Z3MuYWRkKHZhbHVlR1BSKTsKKyAgICAgICAgcHJlc2VydmVkUmVncy5hZGQoaXRlckNhbGxSZXN1
bHRHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIHByZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkp
LCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHJlZ1Qz
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgp
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzdHViSW5mb0dQ
UiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJl
Z3MgeyBkb25lR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNr
cG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDI7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdpc3RlclNl
dCB1c2VkUmVnaXN0ZXJzKGRvbmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2Nh
dGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRp
b25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IGdsb2JhbEdQUik7CiAKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1l
cy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0
R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3
LDU5ICs1NzEsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwog
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVj
a3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVn
IGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVu
ZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVk
U3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAg
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4
KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
LSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BS
KSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxS
ZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBB
ZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShp
dGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwg
QWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50KS5yYXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGlu
ayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVz
dWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3Vt
ZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1
ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlx
dWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsK
ICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJ
bmRleCsrXTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAg
ICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5v
bkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZh
bHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJ
bmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJl
ZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3Vs
dEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxk
ZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZh
bHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0
cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDEwICsxNTksMTAgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAg
ICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJ
QygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gT3B0aW9uczo6
dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkBAIC0yNDgsNiArMjQ4LDQxIEBA
IHByb3RlY3RlZDoKICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1fcmVmOwogfTsKIAorY2xh
c3MgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNI
b2xkZXImIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1f
YWRkSUNzKTsKKyAgICAgICAgbV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAg
ICAgICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICAgICAgbV9zdWJJ
Q3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRk
SklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRk
SUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQ
cm9maWxlKTsgfQorICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKyAg
ICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkg
eyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKworCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Cisg
ICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0
dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxH
ZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRNdWxJQyog
YWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVs
SUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVu
YW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklU
TmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5h
cnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46
OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmls
ZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKworcHJpdmF0ZToK
KyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7
CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNz
OworfTsKKwogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoRGlyZWN0SklU
Q29kZSk7CiBjbGFzcyBEaXJlY3RKSVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7
CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVS
KERpcmVjdEpJVENvZGUpOwpAQCAtMjY2LDYgKzMwMSwyMSBAQCBwcml2YXRlOgogICAgIENvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gbV93aXRoQXJpdHlDaGVjazsKIH07CiAKK2NsYXNzIEJhc2VsaW5l
SklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1
YmxpYzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgICAgICA6IERpcmVjdEpJ
VENvZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
KQorICAgIHsgfQorCisgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2Fs
bHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsgLy8gT09QUzog
bWFrZSBzdXJlIHdlIHZpc2l0IHRoZXNlIHNvbWVob3cuIE9yIGFzc2VydCB3ZSBkb24ndCBoYXZl
IHRvLCBzaW5jZSB0aGV5J3JlIHZpcnR1YWwgY2FsbHMuCisgICAgQmFnPFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxl
SnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVt
cFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisgICAgSklUQ29kZU1hcCBtX2ppdENv
ZGVNYXA7CisgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworfTsKKwogY2xhc3Mg
TmF0aXZlSklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgewogcHVibGljOgogICAg
IE5hdGl2ZUpJVENvZGUoSklUVHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxNzE4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIklu
bGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBzdGF0
aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2ppdFR5
cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1YkluZm8g
PSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2Rl
T3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxvY2sg
PyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFn
ZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwog
CiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3
ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIExp
bmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0YXJ0
ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5sb2Nh
dGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0
aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zbG93UGF0
aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgp
OworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKyAg
ICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHJ1Y3R1cmVTdHViSW5mb0dQUik7CisgICAg
aml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9k
b25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0
b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRl
eDsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZv
OwogCiBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUg
OiB1aW50OF90OwogCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVEZWxCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5m
bzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFz
ZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlu
a2luZyBhIENvZGVCbG9jayBhbmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZh
bCBTdHViSW5mby4KKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0
dWJJbmZvID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3Ry
dWN0IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcHJvdG8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisK
K3N0cnVjdCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5
ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQ
UkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJ
bmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdU
MTsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUklu
Zm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6
cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJl
Z1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3Nl
cnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KGJyYW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsK
KwogY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9CkBAIC02MiwxNSArMTY0LDIxIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGZpbmFsaXplKAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIs
IExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIgfTsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IG1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggeyBz
dGQ6Om51bWVyaWNfbGltaXRzPEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+OjptYXgoKSB9Owor
CiBwcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1f
aml0VHlwZTsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgor
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX2RvbmU7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsgLy8gT09QUzogbWFrZSByZXBvcnRDYWxsIHBhc3Mg
c29tZXRoaW5nIGluIHdlIGNhbiB1c2UgZm9yIHRoZSBub24tQ1RJIHRodW5rcyBidWlsZHMuIAog
fTsKIAogY2xhc3MgSklUQnlJZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvciB7CkBAIC05OCw3ICsyMDYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9i
YXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKK3B1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKQEAgLTEzMiw4ICsyNDAsOCBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdl
bmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAg
IENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVn
cyBiYXNlLAotICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBH
UFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBK
SVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gs
IEVDTUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImKTsKICAgICAKQEAgLTE2MywxMSArMjcxLDkgQEAgcHVibGljOgogCiAgICAg
dm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAg
SlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxl
SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTE5MSw4ICsyOTcsNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjAsNiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAot
cHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICsz
NDMsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTI3Nyw4ICszNzcsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXIm
IGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAot
cHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSAr
NDAwLDkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fz
c2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1Zh
bHVlUmVncyBtX3Jlc3VsdDsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0Owog
ICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApA
QCAtMzMwLDggKzQyNiw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAg
aWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
dW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykg
PT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIo
KTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lz
dGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29u
c3RhbnQpIHsKKyAgICAgICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBhbGwg
bGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtl
ZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0
dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjphcHBlbmRDYWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0
YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24s
IFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwg
cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBK
U1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0
b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICBy
ZXR1cm4gY2FsbDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVh
bFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZp
cnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhm
dW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1
ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVH
UFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5p
c0tub3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0
Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgs
ICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9p
bnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVs
cy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxp
bmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
SW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRz
KCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRv
IGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkz
LDI5ICszMTgsMzQgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQog
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJl
Z2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVn
cyB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKLQotICAgIC8v
IFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2Ug
Y2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UK
LSAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSAgICBzdG9y
ZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAg
ICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5k
aWYKLX0KKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwo
KSktPmxlbmd0aCgpID09IDE7Cit9CisKKy8vIE9PUFMKKy8vaW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVn
cyB2YWx1ZSkKKy8veworLy8gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CisvLwor
Ly8gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0
LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAorLy8gICAgLy8gc3RvcmUuCisvLyNpZiBVU0Uo
SlNWQUxVRTY0KQorLy8gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVj
a2V0cyk7CisvLyNlbHNlCisvLyAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9y
ID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9i
dWNrZXRzKTsKKy8vICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+
YXNCaXRzLnBheWxvYWQpOworLy8gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0
b3ItPmFzQml0cy50YWcpOworLy8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
IGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRh
dGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpA
QCAtMzIzLDI0ICszNTMsMjUgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1l
PGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVk
T3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1
ZVJlZ3MgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFs
dWVSZWdzIHZhbHVlKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAg
ICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0
YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7CisgICAgcHRyZGlm
Zl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29kZT4obV9i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RC
dWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIs
IG9mZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJl
c3VsdFJlZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVzdWx0UmVnKSk7Ci19CisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykK
Ky8veworLy8gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVS
ZWdzKHJlc3VsdFJlZykpOworLy99CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwg
R1BSUmVnIHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
R1BSUmVnIHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCkBAIC0zNjAsNiAr
MzkxLDIxIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVcKICAgICB9
CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHB0cmRpZmZf
dCBvZmZzZXRPZkFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNj
cmF0Y2hHUFIpCit7CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAgICBs
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHNjcmF0
Y2hHUFIsIGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmlsZSk7CisgICAgfQorfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBSZWdpc3RlcklEIGNlbGxHUFIs
IFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3sKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCksIGNlbGxHUFIs
IHNjcmF0Y2hHUFIpOworfQorCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5k
Q29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwpAQCAtMzgwLDcgKzQyNiw3IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlm
IChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5D
b25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOworICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVC
bG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJ
bW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAgICBsb2Fk
RG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcgKzU0Miw3IEBAIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBp
ZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2Vs
bChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcgKzU1Miw3IEBAIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJ
RCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAg
IGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkK
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNCwx
MSArNTYwLDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogICAg
IH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0LDExICs1ODUsMTcgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5
dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVt
YmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFs
dWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQorICAgICAgICBzd2l0Y2ggKG1fdW5saW5rZWRDb2Rl
LT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpKSB7CisgICAgICAgIGNhc2Ug
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICBjYXNlIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIG1vdmUo
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0Nv
bnN0YW50KHNyYywgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTU2NiwxMSArNjEzLDYgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwg
ZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50
KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lz
dGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01
OTUsNyArNjM3LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQog
CiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVn
aXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY3
OSw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBp
ZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9j
ay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
R2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQot
ewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hN
YXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRH
ZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0
SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7
Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1
dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6
OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBr
ZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAz
MiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1
dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChp
dGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBp
dGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGll
ZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQ
cm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zm
c2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiAr
NzAwLDYxIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICBy
ZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBs
b2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRh
dGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhzX21ldGFkYXRhR1BS
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBC
eXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAg
bG9hZDgoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZh
bHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMy
VG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90
IG9mZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1f
dW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVj
b2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3Qg
Qnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAg
IGFkZFB0cihzX21ldGFkYXRhR1BSLCBUcnVzdGVkSW1tUHRyKG1fdW5saW5rZWRDb2RlQmxvY2st
Pm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJl
c3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAg
bG9hZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNv
bnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9n
bG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BSUmVn
IHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOwor
ICAgIC8vIE9PUFM6IE1heWJlIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudD8KKyAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmVzdWx0LCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVz
dWx0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRl
eCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSks
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIp
LCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwog
ICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpOwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oY29uc3QgSW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2gg
ZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9i
eXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwog
ICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDI0
LDcgKzEwMjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAK
ICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sg
dGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxl
JiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVs
dE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1
cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3ICsxMDQyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJ
VGFibGUodW5saW5rZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0LDIyIEBAIHZv
aWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewot
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0g
ICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwotICAgICAg
ICBlbHNlCisgICAgICAgIC8vIE9PUFM6IG1vc3QgIk90aGVyIiBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gY29uc3RhbnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQgZnJvbSB0aGUgVW5saW5rZWRDb2Rl
QmxvY2suIEl0J3MganVzdAorICAgICAgICAvLyBhIGNvdXBsZSB0eXBlcyB0aGF0IGNhbid0LiBD
cmVhdGUgYW4gYWJzdHJhY3Rpb24gZm9yIHRoYXQuCisKKyAgICAgICAgc3dpdGNoIChtX3VubGlu
a2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkgeworICAgICAg
ICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAgICAgY2FzZSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAg
ICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0
b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICs5OCwzNSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
LnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxsb2Nh
dG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5h
bE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0
b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJl
Z2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVn
ID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKIAotICAgIGlm
ICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVsc2Ugewot
ICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1
c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7
Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVy
ZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7Ci0gICAg
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcE5ld09iamVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgb2Zm
c2V0T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgp
ICsgb2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Cisg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxl
KCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dD
YXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
KyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0
YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1
cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVj
dCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzE0MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJy
aWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNl
VmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5
bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFs
dWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24o
KSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5z
dGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9C
SkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VT
eW1ib2xGdW5jdGlvbikpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rv
ciwgcmVnVDApOwogCkBAIC0xNTQsMzAgKzE2NCwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0
YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlw
ZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVl
IHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBi
YXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4g
dGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3RvR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BSKTsKICAgICAKICAgICAvLyBDaGVjayB0
aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hl
Y2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHBy
b3RvR1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAg
cmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUNSwK
LSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICByZXN1bHRHUFIsCisgICAgICAgIHZh
bHVlR1BSLAorICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgc3R1YkluZm9HUFIsCisgICAgICAg
IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDEsIEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6c2NyYXRjaDIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAorCiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQgKzIxMCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRk
cmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRp
Y19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQ
UjIpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90
byA9PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSkKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNl
T2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMjQwLDcgKzI1Nyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KIAogICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwog
CkBAIC0zNzQsNyArMzkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0
aW9uKgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJl
dCgpOwogI2Vsc2UKQEAgLTM4NSw3ICs0MDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29u
c3QgSW5zdHJ1Y3Rpb24qCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3Io
Vk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAg
ICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVD
YWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQyOCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJv
cGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQs
OSArNDUwLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZv
aWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1
bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5j
dGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0
ODIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJy
YW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0
KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNG
YWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzQ5OSw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBy
ZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyAr
NTM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0
YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1w
KCk7CiAKQEAgLTU0Myw3ICs1NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29u
c3QgSW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCks
IHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTU4Miwx
NSArNjAxLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KIHZv
aWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAg
IEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9z
cGVjaWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3Rv
cmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICBsb2FkQ29k
ZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpCisgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOwor
ICAgIHN0b3JlOFRvTWV0YWRhdGEoYnl0ZWNvZGUsIFRydXN0ZWRJbW0zMigxKSwgT3BKbmVxUHRy
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2NDIsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY1OSw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBi
ZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAg
IC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzE0LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBq
dW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzczMSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpv
cF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BS
ID0gYXJndW1lbnRHUFIxOwpAQCAtOTA4LDcgKzkyOCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBy
ZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MTgsNyArOTM5LDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCkBAIC05MzEsNyArOTUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0
IEluc3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk3Myw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJl
cihyZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAh
PSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpA
QCAtOTc4LDcgKzEwMDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5z
dHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRz
dFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05
OTMsNyArMTAxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8K
ICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkp
LCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRy
KSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsK
ICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9y
aW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVn
aXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwotICAgIGlmIChidWZmZXIg
fHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUlu
ZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCks
IG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5j
aFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFn
KTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVmZmVyICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAgICAgICAgIEpTVmFsdWVS
ZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9m
aWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdzKTsKLSAgICAgICAgfSk7
Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBAIC0xMDUzLDggKzEwNjMs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3Jl
YXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNo
IHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
LSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3
aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNo
UmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNo
UmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxp
bmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5MSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9z
d2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5
dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRj
aCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAg
ICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxl
Lm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRH
UFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CiAgICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCkBAIC0xMDk5LDIwICsx
MTEwLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
ICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29k
ZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAgIGxpbmtl
ZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5n
V2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRl
eCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVi
dWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygp
LCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0
cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBl
KSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0xMTMzLDcgKzExNDYs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJl
Z1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTExNDgsNyArMTE2
MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTY2LDcgKzExNzgsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1Qw
KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTExODgsMTIgKzEyMDAs
MTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIEV2
ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFu
dAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVj
ZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2lu
ZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygp
OworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMoKTsKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwg
Y291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKKyAgICAKKyAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwor
ICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAgZW1pdEVudGVyT3B0aW1pemF0aW9u
Q2hlY2soKTsKICNlbHNlCkBAIC0xMzEwLDIzICsxMzI0LDE5IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVk
U3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0
dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlz
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJC
YXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwog
ICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0
YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQy
LDcgKzEzNTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRP
Zk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQ
cm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyks
IGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlv
blJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0
aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1
bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BDcmVhdGVUaGlzOjpvZmZzZXRPZkNhY2hlZEZ1bmN0aW9uKCksIGNhY2hlZEZ1bmN0
aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1
YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxl
Q2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBj
YWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVl
cy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzgyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Mik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwg
cmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0
dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzkzLDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdU
MiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwog
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJu
VmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDA2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwog
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQxNyw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qy
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCBy
ZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzMiwxMSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0
cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFz
SW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJ
bnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5j
ZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1
Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsK
ICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVl
R1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiB9CkBAIC0xNDMwLDcgKzE0NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5
RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0Fy
ZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV91bmxp
bmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4o
KSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9u
Q291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCByZWdUMCk7CiAgICAg
ICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpA
QCAtMTQ0MCw3ICsxNDU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IElu
c3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRpZgotICAgICAgICBt
b3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRSZWdzKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
ICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsxNDY4LDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAgLy8gRW1pdCB0aGUg
SklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKKyAg
ICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qw
KTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8sIFRydXN0
ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwKLSAg
ICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0
ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAtMTUwOSw3ICsxNTI1
LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1lbnRHUFIw
KTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3Vt
ZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTE1NjQsMzQgKzE1ODEsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3Jl
Z2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IEdQUlJlZzo6YXJndW1l
bnRHUFIwOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxp
bmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBK
SVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2Fk
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25E
ZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSkKKyAgICBsb2FkQ29uc3RhbnQo
Y29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpv
cGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZt
KCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZt
KCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAg
fQogfQogCkBAIC0xNjIxLDIzICsxNjQwLDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJD
b21tb24oY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2Nv
cGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Nj
b3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3Vt
ZW50R1BSMSk7CiAjZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBt
X2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBh
dXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
RnVuY3Rpb25FeHByLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
Ynl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBh
cmd1bWVudEdQUjIpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25l
d19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IGFyZ3VtZW50R1BSMXJlZ1QwLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMXJlZ1QwLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NF
UlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjFyZWdUMCwg
YXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2NjQsMjkgKzE2ODQsMzAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9h
cmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9j
YXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1
ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
YXJndW1lbnRHUFIyKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUo
KSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5n
dGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJ
bmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7
CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5
V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1l
bnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxp
emVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFk
YXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRM
b2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5k
UHJvZmlsZSwgZHN0LCByZWdUMywgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwog
I2VuZGlmCiB9CiAKQEAgLTE2OTQsOCArMTcxNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19h
cnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91Ymxl
IGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHR5
cGUgcHJvZmlsZXIgaXMgZW5hYmxlZC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRU
eXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApA
QCAtMTc3NywyMCArMTc5OSwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQ
UjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hp
Y2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwotICAgIEdQ
UlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1
bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1
cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcs
IHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFy
Z0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5Q
YWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwor
ICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBy
ZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdU
Myk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1Zh
bHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tl
dFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4g
b2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB1c2luZyB0aGUgY29udHJvbCBmbG93
IHByb2ZpbGVyLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Js
b2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsK
QEAgLTE4NjAsNyArMTg4Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25z
dCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxOTEyLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODE3
MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODgxLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJ
bnQzMigpKQpAQCAtMjkwNCw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNl
bGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNT
dHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZh
bHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyODE3MTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
LCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1l
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVS
ZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDky
ICs0OSwxMDMgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlm
aWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMo
KSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAg
ICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1Qy
KTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVu
SWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50
aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VH
UFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJh
c2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3Jh
dGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVy
YXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9m
aWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2Rl
LCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5m
bygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHVi
SW5mb0dQUik7CisKKyAgICAgICAgLy8gT09QUy4gU3VwcG9ydCB0aGlzCisgICAgICAgIC8vaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAgICAgLy8gICAgZ2VuLnN0dWJJ
bmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgICAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+
CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5
dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGlm
IChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChtX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0
YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRH
UFIyKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUs
IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAg
ICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1f
Ynl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgot
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
R2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBh
cmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1
bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChw
cm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29u
c3RhbnQobV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNjAsOCArMTcxLDggQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxl
R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRH
UFIxKTsKIApAQCAtMTg3LDM0ICsxOTgsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cmVzdWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBBU1NFUlQoaGFz
QW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yMjMsOSArMjQx
LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTIzNSwyNiArMjU1
LDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxy
ZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3By
aXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKQEAgLTMwMCwyMSArMzE0LDI4IEBAIHZvaWQgSklUOjplbWl0X29w
X3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29k
ZS5tX2JyYW5kOwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5k
R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFj
Y2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MoYnJhbmRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAg
Ly8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNp
bmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI4LDEzICszNDksMTcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogewogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKwogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vz
c0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFj
Y2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTM0NCwyNCArMzY5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJp
dmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9
PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0
eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFu
ZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
blNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5k
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMTkgKzM4OSwy
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJy
YW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRl
QnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwg
YnJhbmRHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQ
cml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVC
cmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpD
aGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCkBAIC0zOTQsOSArNDIyLDExIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BS
ID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0MzYsMTggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAg
c3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUo
b3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5j
dGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFy
Z3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJh
bmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NTksNDIg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBy
ZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQ
b2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDIpLCByZWdUMywgcmVnVDQpOwotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9w
ZXJ0eSkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworICAgIC8vIE9PUFM6CisgICAgLy9pZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgIC8vICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQg
PSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3Qg
OiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUo
Ynl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChn
ZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1i
YXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MTAsMTIgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUg
PSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0
cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9
IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTMxLDE2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBm
YXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYg
KGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNl
CisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BS
NCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUx
Miw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAg
IGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUp
OwpAQCAtNTIzLDcgKzU2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUzOSwxMSArNTgx
LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAg
aml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICBqaXQuc3RvcmUzMihieXRlY29k
ZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSk7CkBAIC01NzAsMjAgKzYxMiwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0
ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVn
cyhyZWdUMiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJS
ZWcsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmll
bGRQdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1
Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNjAzLDEz
ICs2NTYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBhdXRvIG9wZXJhdGlvbiA9
IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxk
T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGlu
IHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGdlbi5zdHViSW5m
bygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
NCk7CisgICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25Q
dXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQ
cml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRz
R1BSMywgYXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjc2LDEyIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgZWxzZQotICAgICAg
ICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtNjQ4LDkgKzY5Niw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9
IHJlZ1Q0OwogCkBAIC02ODAsNyArNzI4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRl
cl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTY4OSw3ICs3MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRl
ckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3NDksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX3NldHRlcl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwg
cmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1Qx
LCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwg
cmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3NjAsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZh
bCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNzE5LDcgKzc3MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJv
cGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCBy
ZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJp
YnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRy
aWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3LDIzICs3ODAsMzMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJh
c2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQg
d3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3
cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBj
bG9iYmVycyByZWdpc3RlcnMuCkBAIC03NTksMTUgKzgyMiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRp
bWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVk
SW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC03ODEsMjQgKzg0NiwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRH
UFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9H
UFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5
SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
bkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTg0NSwyMiArOTA1LDMzIEBAIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJv
cGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZh
bFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVu
ZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAg
ICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYg
YSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTU0LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZh
bE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50
R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIz
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQgKzk3MiwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJn
dW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSks
IGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0g
cmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAt
OTYxLDIyICsxMDI5LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsK
IAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZv
R1BSLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2LDE0ICsxMDYzLDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9w
dGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTEwMDMsMjYgKzEwODMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Ry
eV9nZXRfYnlfaWQoY29ucwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIz
OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlk
T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlH
ZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
MDMwLDIyICsxMTA0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29u
c3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGUtPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
cmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5m
b0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiArMTEz
NywxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9w
dGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5
SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwNzMsODMgKzExNTgsNjEgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
LCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOwotICAgIGVsc2UKLSAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91
bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlkZW50ID09IG1f
dm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAg
ICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsICZtZXRhZGF0YS5tX21vZGVNZXRh
ZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCByZWdUMSk7CisgICAgICAgIGxvYWQ4
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVN
ZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlKCksIHNjcmF0Y2hH
UFIpOworICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWws
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9k
ZTo6QXJyYXlMZW5ndGgpKSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSAr
IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwg
YmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRo
aXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxLCB0aGlzVlJlZyk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCi0g
ICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0
UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAt
MTE1OCwxNiArMTIyMSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50
R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMTc3LDI2ICsxMjQyLDU4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFIzOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhU
aGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhU
aGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBi
YXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisKKyAgICBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSwgc3R1YkluZm9HUFIpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlJZFdpdGhUaGlzOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhp
cy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
c3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyNDEsMTYgKzEzMzgsMTkgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJh
dGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3RoaXNWYWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBy
ZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI5ICsxMzYwLDIzIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2Uu
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAg
c3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09w
dGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0
QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0KKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9cwogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJiB2bSkKQEAgLTEzMjks
MjMgKzE0MjMsMzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVj
dCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFi
bGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdl
IHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBo
YXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2Vu
ZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBh
bHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6
dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0g
QmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBz
dHViSW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJl
Y3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
UHV0QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVj
dCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9k
ZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeUlkcy5hcHBlbmQo
Z2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsxNDY3LDE4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAgICAKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92
YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1
bmN0aW9uKCksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEzNzYsMjUgKzE0ODgsMTkgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4K
LSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVl
R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBl
bmRDYWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtMTQ0MSwyMCArMTU0NywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9i
eV9pZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBi
YXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZS
ZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZv
R1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkluQnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpA
QCAtMTQ2MywxNCArMTU4MCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29u
c3QgSW5zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsr
XTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjAwLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
Ly8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5
IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBh
IGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2MjQsMzMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NTksMTggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlW
YWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5
VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTU2LDUxICsxNjgxLDU2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxl
R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAh
aXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BS
MSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5C
eVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAg
IC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0
bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5n
IGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZh
bE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
SW5CeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9y
QnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUs
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1
YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlw
ZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQ
cml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJ
VDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKICAg
ICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiAKQEAgLTE2MDgsNyArMTczOCwxMSBAQCB2b2lk
IEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1l
ID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVC
cmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0
aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTE2MTgsMjcgKzE3NTIsMjEgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRl
U2xvdyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IHJlZ1QxOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5T3JCcmFuZEdQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpLCBkZWNsdHlw
ZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gdHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX25hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NTIsNyArMTc4MCw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKGMKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUu
bV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNs
b3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hh
c19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xNjY2LDE5ICsxNzk0LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9i
cmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhh
c1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQp
OworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNl
LCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rp
b25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0
cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92
YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2ODgsNiArMTgxOSw3IEBAIHZv
aWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3MDEsNyArMTgzMyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDEpOwogICAgICAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1Qx
KTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4NDcsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CiAgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3OTQs
NTkgKzE5MjYsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgog
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlv
bik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVz
b2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRo
ZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVu
dmlyb25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVz
b2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDAp
OwogICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVC
bG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZf
dCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5l
cmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmsoQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENs
b3N1cmVWYXIiKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICAgICAgcmV0dXJu
IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MiKTsKKyAgICAgICAgfTsKIAotI2RlZmluZSBSRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5l
cmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10g
PSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVTT0xWRV9TQ09QRV9HRU5F
UkFUT1IpCisgICAgICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvciA9IFtdIChW
TSYpIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVu
ayhzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7CiAg
ICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBjb25z
dGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwg
bWV0YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
KworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7Cisg
ICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAg
ICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxz
ZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29k
ZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAg
IGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9
CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmso
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3Bl
VGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIq
IHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rp
b24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAg
ICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBi
ZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9G
VEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMs
IHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2Nv
cGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsg
Ly8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGlu
Y29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAv
LyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZz
ZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUo
cmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0
dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRh
ZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1Qz
LCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIApAQCAtMTg1NSwyNiAr
MjAwNSwyNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQ
UlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92
YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9m
ZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAK
ICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykgewogICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxT
Y29wZURlcHRoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsK
KyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAgICBMYWJlbCBs
b29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRv
bmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAgewotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAg
ICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICAg
ICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICAgICAgaml0Lmp1
bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENv
ZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEyICsyMDMyLDEy
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JD
b2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7
Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9i
amVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7
CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Mo
Z2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgaml0Lm1vdmUoZ2xvYmFsT2JqZWN0
R1BSLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xODk3LDEx
ICsyMDQ3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAg
ICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhciosCiAgICAgICAgICAgICAvLyBh
bmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkg
Zm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBy
ZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykK
LSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0Ojpv
ZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkds
b2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsyMDU5LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1p
dFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMjA2OSw0NSBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0g
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlm
IChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0g
Q2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsK
LQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUmVzb2x2ZVR5cGUoKSksIHJlZ1QwKTsK
IAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAg
ICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CisgICAg
ICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
KTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAg
ICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7CisgICAgICAgIGVt
aXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZh
cik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7
CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICBk
ZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1
bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3Bf
cmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwg
Q29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNl
LCBDb2RlTG9jYXRpb25MYWJlbCh2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNk
ZWZpbmUgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8j
I3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNv
bnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0g
ICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAg
IHJldHVybiBqaXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFz
ZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VB
Q0hfUkVTT0xWRV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBE
RUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0p
CiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5
IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1h
a2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxh
YmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxp
bmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkg
bm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZt
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5
IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwNjUsNiAr
MjE3Nyw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29w
ZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0yMTc4LDcg
KzIyOTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yMTg2LDkgKzIyOTksOSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdl
dEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0
RnJvbVNjb3BlLCBkc3QsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAog
I2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yMTk2LDQxICsyMzA5LDUwIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9t
U2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBS
ZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9
PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCisgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZN
JikgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoQ2xv
c3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAg
fTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3Ig
PSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayhDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRf
ZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gZ2VuZXJpY0dldEZy
b21TY29wZUdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJh
dGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9nZXRfZnJv
bV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRh
dGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCi0gICAgaWYg
KHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRyX3QqIG9wZXJhbmRT
bG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsK
LSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9w
ZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRh
ZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRh
KTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5t
ZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgR0VU
X0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9zY29wZV8jI3Jl
c29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoR0VU
X0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdFVF9GUk9NX1NDT1BF
X0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7Ci0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNb
cmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0KKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYgKHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIo
Y2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgY29kZSA9IHZtLmdl
dENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAg
IGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZyb21TY29wZUdl
bmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29w
ZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZy
b21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlz
IGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVj
YXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KQEAgLTIy
MzksNzcgKzIzNjEsNjggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcEdl
dEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAg
IENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxl
KCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFi
bGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAg
ICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hl
Y2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJfdCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNl
dCkgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0
dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBhdXRv
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIpIHsKKyAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9m
U3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7
CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkp
OworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpKTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0g
KGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdU
Myk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xv
YmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
KyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2lu
dCkpLCByZWdUMyk7CiAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Q
b2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0
cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBv
aW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRy
KHJlZywgcmVnKTsKLSAgICB9OwotCiAgICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAo
R1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgewogICAgICAgICBzdGF0aWNfYXNz
ZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5k
R1BSKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmly
b25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworICAgICAgICBqaXQubHNoaWZ0
NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmFkZFB0cihzY29w
ZUdQUiwgb3BlcmFuZEdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQ
UiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CiAg
ICAgfTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
LCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZd
IChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVj
dHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2Ug
ZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3Qu
IEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFy
IGluamVjdGlvbi4KKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3Bl
R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRv
bid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBB
ZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBp
bmplY3Rpb24uCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwog
ICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKICAgICAgICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7CiAgICAgICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKIAotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExh
bWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFs
LCBiYXNlLCByZWdUMyk7CisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxK
dW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRy
KEVxdWFsLCBiYXNlLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29w
ZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIG9mZnNldCk7CiAgICAgICAgICAg
ICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5l
ID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJz
dE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRP
ZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0
aGlzKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdy
ZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90
T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsK
LSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAg
ICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RP
dXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5uZWczMihvZmZzZXQpOworICAg
ICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
OgpAQCAtMjMxNywyMSArMjQzMCwxOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwot
ICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAg
ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1p
dEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwg
cmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0
YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpv
ZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsKICAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFy
KHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5h
bWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM0
MSw3OSArMjQ1Miw1NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dElu
Zm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1
bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxz
ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEds
b2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxp
bmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29s
dmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9
IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykp
LCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0
cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGppdC5sb2Fk
MzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwg
cmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1w
IGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0
eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxW
YXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFy
KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAg
ICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFBy
b3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5s
aW5rKCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluaygmaml0
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgICAgIHNraXBUb0Vu
ZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAg
ICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKKyAgICAg
ICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1
ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsK
KyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9m
ZnNldE9mUHJvZmlsZSgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5r
TmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNv
bHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9w
X2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7
IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShy
ZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGpp
dCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmso
cmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUp
OyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9H
RU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9z
Y29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0
aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQg
YmVjYXVzZQpAQCAtMjQ3MSw4NiArMjU1OSw3OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAg
IHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0
V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAg
bG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJl
Z1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlm
eVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNh
bEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdp
c3RlcikpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZv
KGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVz
b2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9z
dHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0
Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7
CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1
cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdl
IGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0
LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZh
ciBpbmplY3Rpb24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBp
bmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0
IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVf
c2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Om9mZnNldE9mU3Ry
dWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywg
cmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+
KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAg
ICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwog
Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1Qx
KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BQdXRUb1Njb3BlOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwogICAgICAgICAg
ICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAg
ICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWln
aHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkp
OworICAgICAgICAgICAgLy8gT09QUzogd291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0
aGF0IHRvb2sgR1BSUmVncyBpbnN0ZWFkIG9mIFZScworICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczog
ewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50
U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAg
ICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0gICAgICAgICAgICBpZiAo
IWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisgICAgICAgICAgICBlbWl0VmFyUmVh
ZE9ubHlDaGVjayhyZXNvbHZlVHlwZSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJh
bmQoKSwgcmVnVDApOworCisgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNv
ZGUubV9nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEg
VERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBl
bWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KLSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCksIHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0
R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xv
dCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFs
dWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsK
KyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDEpOworCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBz
dG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdv
dWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciB2YWx1
ZS4KKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFJl
c29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0
YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0
KCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CisgICAgICAg
ICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJh
c2VJbmRleChyZWdUMCwgcmVnVDIsIFNjYWxlRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxkIGJlIG5p
Y2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciBvd25lci92YWx1ZS4K
ICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0y
NTY0LDU4ICsyNjQ1LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnMKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBp
bnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2Jh
bExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBh
IHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAgICAgICBp
c0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsK
LSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKKyAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1cmVWYXIvIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21waWxlIHRoaW5n
cworICAgIC8vIHRoYXQgd2F5IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2UndmUgcHJvdmVu
IHRoYXQgaXMgdGhlIHR5cGUgd2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJlVmFyLAorICAg
IC8vIGFsbCBDb2RlQmxvY2tzIHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUgQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFyCisgICAgLy8g
aWYgdGhlIHZhciBpbmplY3Rpb24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYgaXQgaXMgZmly
ZWQsIHRoZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0CisgICAgLy8gbWF0
dGVyIHdoYXQgdHlwZSB3ZSBhcmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcik7CisgICAg
ZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIpCisgICAg
ICAgIGVtaXRDb2RlKFJlc29sdmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAg
ZW1pdENvZGUoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVsc2Ugewog
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1QwKTsKICAg
ICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAv
LyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkp
OwogICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCisg
ICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmso
dGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0
cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRo
aXMpOwogCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAogICAgICAg
ICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJl
YWs7CiAgICAgfQogfQogCkBAIC0yNjI0LDE4ICsyNjk5LDIxIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigp
OwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29k
ZSkucmVzb2x2ZVR5cGUoKTsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7Cisg
ICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGlmIChw
cm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJZiBhbnkgbGlu
a2VkIENvZGVCbG9jayBzYXcgYSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBDb2RlQmxvY2tz
IGFyZSBndWFyYW50ZWVkCisgICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZhci4KICAgICAg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJv
cik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
VG9TY29wZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJndW1lbnRHUFIw
LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CiAgICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBt
X2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBBU1NF
UlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09
IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CkBAIC0yNzAxLDcgKzI3NzksNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhy
ZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyODM3LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1f
aW5kZXg7CkBAIC0yNzY3LDcgKzI4NDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJu
YWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9m
ZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApA
QCAtMjc4OSw3ICsyODY2LDYgQEAgdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bDxPcAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUu
bV9tb2RlOwpAQCAtMjgwNSw3ICsyODgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlz
IGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBj
YXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRhZGF0YS5t
X2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVj
dHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25T
dHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7
CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMih+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1
cmVNb2RlKSkpOwpAQCAtMjg0Nyw3OCArMjkyMyw4NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIg
PSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVy
YXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxp
bmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2Ny
YXRjaDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG1vZGUsIHNjcmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5TmFtZSwgcHJvcGVydHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJl
c3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRh
dGEoKSwgc2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9y
ZThUb01ldGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7
CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KLSAgICBKdW1w
IGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBpc05vdE93blN0cnVj
dHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAg
SnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVz
cyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNl
dCgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7
CisgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RF
cXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zm
c2V0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8gSWYgaW5kZXggaXMg
bGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0
J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1wIG91dE9mTGluZUFj
Y2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkp
OworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CisgICAgbG9hZDY0
KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1
bXAoKSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91dE9mTGlu
ZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJl
Z1QzKTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJl
Z1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDIp
OworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwg
c2NyYXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkg
PSBvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBzdGF0aWNfY2FzdDxp
bnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChy
ZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQ
Uik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwg
b2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5k
KGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOwotICAgIHN0b3Jl
OChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0
dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRh
KTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCBieXRlY29k
ZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAog
ICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNOb3RJbmRl
eGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJh
bmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3aXRoIHRo
ZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAgICAgaXNOb3RJ
bmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAg
ICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjkyNywxMCArMzAxMSw5IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2Uo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9
CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0
aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRl
Y29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVt
aXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5
cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjkzOSw3
ICszMDIyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwg
cmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1l
cmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29k
ZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBv
cjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUs
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAtMzAy
OCw2ICszMTEzLDEzIEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIK
ICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNo
R1BSKG93bmVyKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5saW5rKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJ
KHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDMsNyArMTU0Myw3IEBAIHN0YXRpYyB2b2lkIHJldmVy
dENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERp
c2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhT
dGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVu
bGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAg
IAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkK
QEAgLTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBP
cEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9w
ZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2Rl
U3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAg
ICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlw
ZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0
MikKICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2Nm
ciwgdDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHBy
ZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0
MSwgc3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAg
ICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRl
QXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFBy
b2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlz
cGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJv
ZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRh
ZGF0YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVn
YXRlU3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAg
IG5lZ2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVw
ZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykK
ICAgICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEg
dDEsIExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAg
ICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5
QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICBy
ZXR1cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVu
ZCkKIAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3Qs
IGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BX
aXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2Zp
bGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAg
IGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikK
ICAgICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFy
eU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAu
b3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAg
ICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlB
cml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAg
ICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQz
LCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEy
NCwxMiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAg
IGJpYSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9w
MU5vdEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAg
ICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUs
IHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkK
ICAgICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAg
ICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRh
dGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1i
ZXIsIHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEp
CiAgICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFu
ZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkg
bm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywg
LnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAg
ICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50
TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEs
IHQzLCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20JKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEzIEBA
IG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMsIGEx
CiAgICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRweiBy
MCwgLnJlY292ZXIKLQogICAgICAgICAgICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAgIyBC
YXNlbGluZSB1c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQgcG9v
bC4KKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAgbG9h
ZHAgQ29kZUJsb2NrOjptX2ppdERhdGFbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJs
b2NrOjpKSVREYXRhOjptX2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAgIGlm
IEFSTTY0RQogICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6
b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50cnkp
ICogUHRyU2l6ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRl
UHRyVGFnICMgSlNFbnRyeVB0clRhZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVxdWFs
aXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwg
b3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlw
ZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJp
dGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0K
ICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0
MQogICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNybyBw
cmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRp
b24odDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEg
dDEsIFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxl
SW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRo
UHJvZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAg
LTExMzQsMTEgKzExMzUsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdh
dGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVy
bikKLQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlw
ZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxl
OjptX2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBA
IC0xMTQ2LDEyICsxMTQyLDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5l
Z2F0ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0
MwogICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJv
ZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9m
aWxlSW50LCB0MSwgdDQpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0
cXogdDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAw
MDAwLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAg
dXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEs
IHQ0KQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNjAs
NiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0
MCkKIAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQog
ICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNp
emUsIHQwLCB0MSkKQEAgLTExNzcsNyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3Rv
cmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdl
ck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUo
QXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bj
b2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0NCkKICAgICAgICAgZGlzcGF0Y2go
KQogCiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmluYXJ5
T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcs
IC5zbG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEK
LSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJl
ciwgdDUsIHQ0KQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9w
MkludDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVw
ZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlcklu
dCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5Ogog
ICAgICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNiw3ICsxMTk4LDcgQEAgbWFjcm8gYmluYXJ5
T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMg
ZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAg
IGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKLSAgICAg
ICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQog
ICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAg
ICBmcTJkIHQxLCBmdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMjQ5OCw2ICsyNDk4LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBl
bmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUs
IG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0
eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBX
ZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdF
QkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFu
ZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigp
ID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVh
YmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJs
b2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRl
bnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwg
VW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlw
ZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGlu
ZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVk
U3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBj
cmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRl
bnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9u
IDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50
aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29k
ZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9j
a1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJs
b2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBD
YWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hl
YWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJ
ZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBK
U0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkK
IHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6
TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewot
ICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7
CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQu
aXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUg
cHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0
aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437059</attachid>
            <date>2021-09-01 13:11:51 -0700</date>
            <delta_ts>2021-09-01 13:15:56 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>385833</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IHVubGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxp
bmtlZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRp
b24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
aXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0g
ICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRo
U3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhT
dGFydCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlz
IGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQg
dG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0
aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJz
OjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAg
IHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MjQsNiArNDI0LDEzIEBAIGlubGluZSBDb2RlT3JpZ2lu
IGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBz
byB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNyArMzcw
LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2Fu
J3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJv
Y2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJv
ZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5l
c3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2Yg
YW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhl
IGxpdmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNp
ZGUgVW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBi
ZXR3ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhl
IGJ5dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5n
IGFuIFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9j
ayogdW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CkBAIC00NjYsNiAr
NDY3LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAg
ICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9G
SUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtl
ZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAg
ICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtl
ZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAg
ICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5z
dHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4LDE0ICs1NDIsMTQgQEAgYm9vbCBD
b2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRl
UHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5L
KE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAg
ICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJ
bmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9w
TXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5L
X1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC03ODksNiArODAz
LDc2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbkNvbW1vbihWTSYKICAgICBtX293
bmVyRWRnZS5zZXQodm0sIHRoaXMsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmNyZWF0ZSh2
bSwgdGhpcykpOwogfQogCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNlbGlu
ZUNvZGUoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRDb2Rl
KGppdENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0Q29k
ZU1hcCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFuZGxl
ckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5hdGl2
ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJl
dGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FTU0VSVCghbV9qaXREYXRhKTsKKyAgICBhdXRvIGppdERhdGEgPSBtYWtlVW5p
cXVlPEpJVERhdGE+KCk7CisKKyAgICBqaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVk
VmVjdG9yPHZvaWQqPihqaXRDb2RlLm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBqaXRDb2RlLm1fY29uc3RhbnRQb29sLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGF1dG8mIGVudHJ5ID0gaml0Q29kZS5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAg
ICAgc3dpdGNoIChlbnRyeS50eXBlKSB7CisgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpHbG9iYWxPYmplY3Q6CisgICAgICAgICAgICBqaXREYXRhLT5tX2ppdENvbnN0YW50UG9v
bFtpXSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAgICAgICAg
IFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9ICpzdGF0aWNfY2Fz
dDxVbmxpbmtlZENhbGxMaW5rSW5mbyo+KGVudHJ5LnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAg
IENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0RGF0YS0+bV9jYWxsTGlua0luZm9zLmFk
ZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAg
ICAgICAgIC8vIE9PUFM6IGRvbid0IGhhcmRjb2RlIHRoZXNlIHJlZ2lzdGVycyBsaWtlIHRoaXMu
CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmluaXRpYWxpemVEYXRhSUModm0oKSwgKnVubGlu
a2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIpOworICAgICAg
ICAgICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2xbaV0gPSBjYWxsTGlua0luZm87CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKKyAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyo+KGVudHJ5LnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IGppdERhdGEubV9zdHViSW5mb3MtPmFkZCh1bmxpbmtlZFN0dWJJ
bmZvLmFjY2Vzc1R5cGUsIENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4
KSk7CisgICAgICAgICAgICBzdHViSW5mby0+aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKHRoaXMsIHVubGlua2VkU3R1YkluZm8pOworICAgICAgICAgICAgaml0RGF0YS0+
bV9qaXRDb25zdGFudFBvb2xbaV0gPSBzdHViSW5mbzsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
ZW50cnkudmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBv
b2xbaV0gPSBmdW5jdGlvbkRlY2woaW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwcjogewor
ICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRy
eS52YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBqaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbFtp
XSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBtX2ppdERhdGEgPSBX
VEZNb3ZlKGppdERhdGEpOworICAgIH0KKworICAgIHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAg
IGNhc2UgR2xvYmFsQ29kZToKKyAgICBjYXNlIE1vZHVsZUNvZGU6CisgICAgY2FzZSBFdmFsQ29k
ZToKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxy
ZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUg
Y2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KKyAgICAg
ICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCgp
KSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24odGhpcyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKwogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsK
QEAgLTMwNzksNyArMzE2Myw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNv
dW50KCkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoK
LSAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAg
ICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxv
Y2soKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAt
MzI5NSwxMyArMzM3OSwxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5
QXJpCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgot
ICAgICAgICByZXR1cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJv
ZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BN
dWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+
YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9z
dWI6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJp
dGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMp
Lm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5h
czxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJu
IHBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZh
dWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMzEzLDExICszMzk3LDExIEBAIFVuYXJ5
QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5v
cGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFz
PE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAg
IGNhc2Ugb3BfaW5jOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0
aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0
dXJuICZwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAg
ICAgIHJldHVybiBwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBu
dW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRl
OgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6
CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAg
ICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXND
aGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBh
ZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2Nr
KiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1f
YWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoKICAgICBi
b29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0
YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZp
cnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRk
aW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBp
cyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXND
b25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7
Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAg
ICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAg
LTI2Niw4ICsyNTcsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0
dXNNYXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3Zl
IGFyaXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLCBhbmQgb250byBK
SVRDb2RlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZB
U1RfQUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogCiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgICAg
IEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CkBAIC0yODIsOSArMjc1LDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2lu
TWFwOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAg
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAg
ICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+
IG1faml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklU
Q29uc3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29u
c3RhbnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxp
bmVDb2RlKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJ
VERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBp
ZiAoTElLRUxZKG1faml0RGF0YSkpCkBAIC0yOTMsNiArMjkwLDggQEAgcHVibGljOgogICAgIH0K
ICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
KTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVREYXRhKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9qaXREYXRhKTsgfQorCiAgICAgSklUQWRkSUMqIGFk
ZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwogICAgIEpJVE11bElDKiBhZGRKSVRNdWxJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlB
cml0aFByb2ZpbGUqKTsKQEAgLTMyMiwxNSArMzIxLDEwIEBAIHB1YmxpYzoKICAgICAvLyBsb29r
aW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5n
IHRoaXMuCiAgICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4
KEJ5dGVjb2RlSW5kZXgpOwogICAgIAotICAgIHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFw
JiYgaml0Q29kZU1hcCkKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKLSAgICAgICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcCA9IFdU
Rk1vdmUoaml0Q29kZU1hcCk7Ci0gICAgfQogICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVN
YXAoKQogICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwot
ICAgICAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcDsKKyAgICAg
ICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2pp
dENvZGVNYXA7CiAgICAgfQogCiAgICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVu
aXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOwpAQCAtNDcyLDYgKzQ2Niw3IEBAIHB1Ymxp
YzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0K
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01
NzIsNiArNTY3LDcgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25z
dGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0
ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oaW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJl
Z2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhd
LmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVu
Y3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTYwMSw2ICs1OTcsMTEgQEAgcHVibGljOgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwogICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5t
X3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgfQorICAgIFNpbXBsZUp1bXBUYWJs
ZSYgYmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCisgICAgeworICAgICAg
ICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVt
YmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOyB9CkBAIC02MTEsNiArNjEyLDExIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9qaXREYXRhKTsKICAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIH0KKyAgICBTdHJpbmdKdW1wVGFibGUm
IGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgfQogI2VuZGlmCiAgICAg
c2l6ZV90IG51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNzk3LDYg
KzgwMyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0
IHsgcmV0dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVz
dHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVh
a3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9p
bnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCkBAIC04MzgsNiArODQ1LDcgQEAgcHVibGljOgog
ICAgIG11dGFibGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMg
dG8gc3RvcmUgdG8gaXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5
c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2Nh
cGFiaWxpdHlMZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNiwx
MSArOTE0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0
YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7
IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9p
bnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlS
ZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8g
YWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3Vu
bGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHBy
b3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNzAsNiArNzAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2UqIHdyYXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwogICAgIAogICAgIHN0YXRpYyBFeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwQW5kQWN0aXZhdGUoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spOworCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLCBtX2NvZGVCbG9jayk7
IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1l
dGFkYXRhLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBz
dGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhCiAKIHN0cnVjdCBHZXRCeUlk
TW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggewogICAgIEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGU7
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmls
ZSk7IH0KIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlM
ZW5ndGgpID09IDEyKTsKIApAQCAtODgsNiArODksNyBAQCB1bmlvbiBHZXRCeUlkTW9kZU1ldGFk
YXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUgbW9kZTsKICAgICAgICAgdWludDhfdCBoaXRDb3Vu
dEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBtdXN0IGJlIHplcm8gd2hlbiB3ZSB1c2UgUHJvdG9M
b2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhLCBtb2RlKTsgfQogICAg
IEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0IGRlZmF1bHRNb2RlOwogICAgIEdldEJ5SWRNb2Rl
TWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVu
Z3RoIGFycmF5TGVuZ3RoTW9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzg1LDYgKzM4NSw4IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcygK
ICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAorLy8gT09QUzogTWFrZSB0aGlzIHN0
dWZmIHdvcmsgd2l0aCBkYXRhIGljcyB0byBub3QgYXNzdW1lIGlubGluZSBhY2Nlc3MuCisKIHZv
aWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFj
Y2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFyZ2V0KQogewogICAgIGlm
IChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CkBAIC00MDQsOSArNDA2LDEyIEBAIHZvaWQgSW5s
aW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHRh
cmdldCkKIHsKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBP
T1BTOiBtYWtlIHNvbWUgdmVyc2lvbiBvZiBJbmxpbmVBY2Nlc3MgZm9yIGJhc2VsaW5lLiBQZXJo
YXBzIG1ha2UgaXQgZGF0YSBkcml2ZW4uIE9yIHBlcmhhcHMgaGF2ZSB0aGUgY29kZQorICAgICAg
ICAvLyBiZSBzaGFyZWQgc29tZWhvdyBiZXR3ZWVuIFVubGlua2VkQ29kZUJsb2Nrcy4KKwogICAg
ICAgICAvLyBJZiBpdCBpcyBub3QgR2V0QnlJZC1saWtlLXRoaW5nLCB3ZSBkbyBub3QgZW1pdCBu
b3Agc2xlZCAoZS5nLiBHZXRCeVZhbCkuCiAgICAgICAgIC8vIFRoZSBjb2RlIGlzIGFscmVhZHkg
YW4gaW5kaXJlY3QganVtcCwgYW5kIG9ubHkgdGhpbmcgd2Ugc2hvdWxkIGRvIGlzIHJlcGxhY2lu
ZyBtX2NvZGVQdHIuCi0gICAgICAgIGlmIChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIp
IHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5l
SklUICYmIHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikgewogICAgICAgICAgICAgLy8g
SWYgbV9jb2RlUHRyIGlzIHBvaW50aW5nIHRvIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlv
biwgdGhpcyBtZWFucyB0aGF0IElubGluZUFjY2VzcyBjb2RlIGlzIG5vdCBhIHN0dWIgb25lLgog
ICAgICAgICAgICAgLy8gV2UgcmV3cml0ZSB0aGlzIHdpdGggdGhlIHN0dWItYmFzZWQgZGlzcGF0
Y2hpbmcgY29kZSBvbmNlLCBhbmQgY29udGludWUgdXNpbmcgaXQgdW50aWwgd2UgcmVzZXQgdGhl
IGNvZGUuCiAgICAgICAgICAgICBpZiAoc3R1YkluZm8ubV9jb2RlUHRyLmV4ZWN1dGFibGVBZGRy
ZXNzKCkgPT0gc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCkpIHsKQEAgLTQyMSw2ICs0MjYsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nlc3M6IGxpbmtpbmcgc3R1
YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBzdHViSW5mby5t
X2NvZGVQdHIgPSB0YXJnZXQ7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0
YS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAg
T1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBUwogCiBzdHJ1Y3QgSXRlcmF0
aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90IHNlZW5Nb2RlcyB7IDAgfTsKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1vZGVzKTsgfSAKICAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9PSBzaXplb2YoSXRlcmF0aW9uTW9kZSkpOwog
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODUsNiArMjg1LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwog
ICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ss
ICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nl
c3NUeXBlOjpJbkJ5SWQ6CkBAIC00MzAsNiArNDMxLDIwNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9
CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byYgdW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBlID0gdW5saW5rZWRTdHViSW5m
by5hY2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHViSW5mby5zdGFydDsgLy8gT09Q
UzogZG8gd2UgbmVlZCBhIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBkb25lTG9jYXRpb24gPSB1
bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93UGF0aFN0YXJ0TG9jYXRpb24g
PSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKyAgICBjYWxsU2l0ZUlu
ZGV4ID0gQ2FsbFNpdGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAg
IGNvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7
CisgICAgbV9jb2RlUHRyID0gc2xvd1BhdGhTdGFydExvY2F0aW9uOworCisgICAgdXNlZFJlZ2lz
dGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICBpZiAo
YWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpHZXRCeUlkICYmIHVubGlua2VkU3R1YkluZm8uYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9yX25leHQs
IHdlIGNhbid0IGNsb2JiZXIgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgZWl0aGVyLgorICAgICAgICB1
c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gpOworICAg
IH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVs
ZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsQnlJZDoK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlb2Y6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1bmxp
bmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6
CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQor
ICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5r
ZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0
aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gb3BlcmF0aW9uUHV0
QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoK
KyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5l
Y21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0
KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVm
aW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVs
ZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZh
dGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJy
YW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQ
cml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAo
YWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxp
bmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJh
c2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJh
c2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9
IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkRlbEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmll
ciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2
YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0
dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxz
ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZW9m
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgcHJvdG90
eXBlSXNLbm93bk9iamVjdCA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAg
ICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJh
c2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIg
PSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BS
ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRC
eUlkRGlyZWN0OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgor
ICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBtX3N0dWJJbmZv
LT5iYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAg
ICAgIG1fc3R1YkluZm8tPnZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvLT5yZWdzLnRoaXNHUFIgPSBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJbmZvLT5t
X3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IElu
dmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1
ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNz
VHlwZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2
YXRlQnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAg
ICB2YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86
OmNoZWNrQ29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7
CiAgICAgR2V0QnlWYWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2
YXRlTmFtZSwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwK
QEAgLTc4LDYgKzc5LDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0
cmluZ0xlbmd0aAogfTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1
cmVTdHViSW5mbyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDEs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwog
CisgICAgdm9pZCBpbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJs
b2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9B
R0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2Vz
IHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTQ0
Nyw2ICs0NTIsMTggQEAgaW5saW5lIGF1dG8gYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bgog
ICAgIH0KIH0KIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8geworICAgIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQ7CisgICAgUHJpdmF0ZUZpZWxk
UHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kOworICAgIEVDTUFNb2RlIGVjbWFNb2RlOworICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAvLyBPT1BTOiBEbyB3ZSBuZWVkIHN0
YXJ0IGZvciBkYXRhIElDcz8KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElD
IGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3Ig
J2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVj
dHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Miw2ICs2Miw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xh
c3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGluZUpJVENvZGU7CiBz
dHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29uc3RhbnQgOiBpbnQz
Ml90OwogCkBAIC0xNzUsNiArMTc2LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4ZWRWZWN0
b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBt
X2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBj
b25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgp
OyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIwOSwxNSBAQCBwdWJsaWM6CiAg
ICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVybiBp
bnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBjb25z
dCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigpOwor
ICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9u
c0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1
Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVn
aW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25zdCB7IHJldHVy
biBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51bUNhbGxlZUxvY2Fs
cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5zaWduZWQgbnVt
VmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDYgKzM0NSwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpOwogICAgIH0K
IAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQor
ICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNv
bXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFpc0J1aWx0aW5GdW5j
dGlvbigpOworICAgIH0KIAogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwg
U3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENv
ZGVHZW5lcmF0aW9uTW9kZT4pOwpAQCAtMzk0LDYgKzQxMCw3IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVu
dEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJh
c2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07
CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEwLDYgKzQyNywxMCBAQCBw
cml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVj
dGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9s
aXZlbmVzczsKIAorICAgIC8vIE9PUFM6IGJpbmQgYSBiZXR0ZXIgcGxhY2UgdG8gc3RvcmUgdGhp
cyBzdHVmZj8KKyAgICBWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPiBtX2JpbmFyeUFyaXRoUHJv
ZmlsZXM7CisgICAgVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxl
czsKKwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQ
cm9maWxlOwpAQCAtNDU1LDYgKzQ3NiwyOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAg
IGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMp
OworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChvZmZzZXQpOworICAgIH0KKwor
ICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNp
Z25lZCByZXN1bHQgPSBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX2Jp
bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmls
ZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3VuYXJ5QXJpdGhQcm9maWxl
cy5zaXplKCk7CisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5hcnlBcml0
aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQmluYXJ5
QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1cm4gbV9i
aW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHVuYXJ5QXJp
dGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9
CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPElu
c3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZpc2lv
biAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRh
ZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw5ICsxMDEsMTggQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2lu
ZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZzZXRJbk1l
dGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBBU1NFUlQo
bV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9IG1faXMz
MkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRhYmxlMTYo
KVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6
ZW9mKE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9CisKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfb2Zmc2V0VGFibGVFbnRyaWVzID0gTlVNQkVS
X09GX0JZVEVDT0RFX1dJVEhfTUVUQURBVEEgKyAxOyAvLyBvbmUgZXh0cmEgZW50cnkgZm9yIHRo
ZSAiZW5kIiBvZmZzZXQ7CiAKICAgICAvLyBOb3QgdG8gYnJlYWsgYWxpZ25tZW50IG9mIDMyYml0
IG9mZnNldCB0YWJsZSwgd2Ugcm91bmQgdXAgc2l6ZSB3aXRoIHNpemVvZihPZmZzZXQzMikuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQ
cm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAgdGVtcGxhdGU8dW5zaWdu
ZWQgbnVtYmVyT2ZCdWNrZXRzQXJndW1lbgogc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNr
ZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNwZWNG
YWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRl
eE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNG
YWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKQEAgLTEzNCw3ICsxMzMs
NyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIAogICAgICAgICByZXR1cm4g
bV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29kZWRKU1ZhbHVlIG1fYnVja2V0
c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rp
b24geyBTcGVjTm9uZSB9OwpAQCAtMTU2LDYgKzE1NSw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVX
aXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1YmxpYyBWYWx1
ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAgICBWYWx1ZVByb2ZpbGUoKSA6
IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
VmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBzdHJ1Y3QgVmFsdWVQcm9maWxl
QW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OTgsNyAr
MTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnkKICAgICAg
ICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0eXBl
KTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUsIG1fY29kZUJs
b2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBv
cF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90Pihkc3QsIHNyYyk7CkBAIC0x
Njk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VHlw
ZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbmMoUmVnaXN0ZXJJRCog
c3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BJbmM6OmVt
aXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAg
ICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0Rz
dCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlB
cml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODIsNyArNjgyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklEKj4KICAgICAgICAgZW1pdEJp
bmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3Jj
MiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBCaW5hcnlPcDo6
ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAgICAgICAgICAgIEJpbmFyeU9w
OjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1fY29kZUJsb2NrLT5hZGRCaW5h
cnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODg5LDcg
Kzg4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIAogICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAg
ICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxl
ZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywg
WyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEo
c2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBz
aHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MTcx
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg5Niw3ICs4OTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0lu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0g
ewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAg
ICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFy
ZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5ODUs
NyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmEKICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwogCiAg
ICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwg
SklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpE
RkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwg
dXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VHUFIp
LCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIEludmFs
aWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CiAKQEAgLTE0NzQ3LDcgKzE0NzQ3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5ncHIoKTsK
IAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
dGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJbmRleCk7Cisg
ICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlz
UmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxv
Y2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lv
biAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMTcsNyArNDMxNyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRM
SklUKSA/IHBhcmFtcy5ncFNjcmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgICAg
ICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAg
ICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFu
dGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAgICAg
ICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3Jp
Z2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAgICAgICAg
ICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZh
bGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1Yklu
Zm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CkBAIC0xMDM1NSw3ICsxMDM1NSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQu
Y29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZv
OjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVn
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0
byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJ
bmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAg
ICAgICAgICAgICAgfSk7CkBAIC0xMDY5OCw3ICsxMDY5OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2Fs
bCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0
aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdU
MCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xv
dygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwOTc5LDcgKzEwOTc5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwog
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAg
IGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlk
R1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAg
ICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQs
IEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJl
Rm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAyODE3MTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3b3JraW5n
IGNvcHkpCkBAIC00MiwxNyArNDIsMjIgQEAgY2xhc3MgTWV0YWRhdGEKICAgICBkZWYgc3RydWN0
KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNvbnZlcnRGaWVs
ZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmll
bGRzLCBnZW5lcmF0ZU9mZnNldE9mKQogICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8ZmllbGQs
IHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAgICAgICAg
ICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAg
ICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9
dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSwgZmFsc2UpfVxu
I3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAi
I3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAgICAgICAg
ICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
IiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGROYW1lfTsiCisgICAgICAgICAgICAgICAg
ICAgIGlmIGdlbmVyYXRlT2Zmc2V0T2YKKyAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBy
ZXN1bHQgKyAiXG4iICsgInN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51
cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJldHVybiBPRkZTRVRPRihNZXRhZGF0YSwgbV8j
e2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0CiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmQuam9pbigi
XG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAg
ICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAg
IiwgQGZpZWxkcywgdHJ1ZSkKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBpZiBAaW5p
dGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODE3MTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY5OCw4ICs2OTgsMTMgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3Rv
cmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBpbmZvKQog
ewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgZW1p
dFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgaW5mbyk7Cit9CisKK3Zv
aWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2Jq
ZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAg
ICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAg
ICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRD
b21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MTgsNiAr
MTcxOCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZpcnR1
YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOwogICAg
IAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNsYWlt
U3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAs
NyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNvbnN0CiAKIENv
bXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUoKQogewotICAgIENvbXBp
bGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAg
Q29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQobV9j
b2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlvbkZh
aWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklU
Q29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblByb2xvCiAg
ICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBlcnM6
OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVS
ZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRv
d0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9y
ZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNjb3BlLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2spLCBBZGRy
ZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwg
Y29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0
cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1
cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVn
IHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93Q2hpY2tl
biogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODQw
LDcgKzg0MCwxOCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2Ugb3BlcmF0aW9ucyBjbG9iYmVyIGFs
bCB2b2xhdGlsZSByZWdpc3RlcnMuIFRoZXkgYXNzdW1lIHRoYXQgdGhlcmUgaXMgcm9vbSBvbiB0
aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sgdG8gbWFyc2hhbGwgY2FsbCBhcmd1bWVudHMuCiAgICAg
dm9pZCBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwg
R1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NvcGUpOwotICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQ
UlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2Nv
cGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgp
CisgICAgeworICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IGZyYW1lKSkpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46
OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKKyAgICAgICAgc3RvcmVWYWx1
ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICAgICAgc3RvcmVQdHIoc2NvcGUsIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBzY29wZSkpKTsKKyAgICAgICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkp
OworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBjYWxsU2l0ZUluZGV4KSkpOworICAgIH0KKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2lu
dGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAg
ICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0
LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3Bw
CShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJl
Z2lzdGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxG
cmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBj
YWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygp
IH07Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9u
cyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAg
IFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
RGF0YS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVi
bGljOgogICAgIEdQUlJlZyBudW1iZXJUYWdSZWdpc3RlciB7IEludmFsaWRHUFJSZWcgfTsKIAog
ICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayopOworICAgIHZvaWQg
c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0Kik7CiAj
ZW5kaWYKICAgICBWYWx1ZVJlY292ZXJ5IGNhbGxlZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQYXRj
aENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgp
Ci0gICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpTSW50ZXJmYWNl
SklUKCZ2bSwgbnVsbHB0cikKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAg
ICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUo
KSA6IDApCiAgICAgLCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAgLTc3LDYgKzc3
LDkgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9z
aG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25z
dGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9i
amVjdCk7CisgICAgbV9wcm9maWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICBtX3VubGlu
a2VkQ29kZUJsb2NrID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogfQogCiBKSVQ6
On5KSVQoKQpAQCAtOTAsOCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9u
Q2hlY2soKQogICAgICAgICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0g
ICAgCi0gICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJ
bW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsK
KyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDAp
OworICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1t
MzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBB
U1NFUlQoIW1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGlu
ZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNiwxOCBAQCB2b2lkIEpJVDo6
ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChO
b3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQ
UlJlZyBwb2ludGVyVG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChH
UFJSZWcgcG9pbnRlclRvU2V0KQogewogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWws
IEFkZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJSZWFk
T25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQordm9pZCBKSVQ6OmVtaXRWYXJSZWFk
T25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsK
LSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgo
RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhclJl
YWRPbmx5V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNo
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFyUmVhZE9ubHlXYXRjaHBv
aW50KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBB
ZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmFzc2VydFN0
YWNrUG9pbnRlck9mZnNldCgpCkBAIC0xMjksNyArMTM1LDcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0
YWNrUG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBy
ZWdUMCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsKQEAgLTE4
MSwyMSArMTg3LDQxIEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWMK
ICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1dENvZGVCbG9j
a1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOworICAgIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVzdWx0
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1
dGFibGVPclJhcmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGJy
YW5jaFRlc3RQdHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1
bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0
aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFU
YWcpLCByZXN1bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3Ry
dWN0KCkpLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3Vs
dCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSksIHJlc3Vs
dCk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjpvZmZzZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIocmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworfQorCiB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQotICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsK
KyAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4i
KTsKICAgICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3Vt
ZW50Q291bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3Ry
dWN0aW9uQ291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7
CiAKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJs
b2NrLT52bSgpOworICAgIFZNJiB2bSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnZtKCk7CiAgICAg
Qnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7CisKKyAgICAvLyBPT1BTOiBNYXli
ZSBvbmx5IGRvIHRoaXMgaWYgd2UgZGlzYWJsZSBzaGFyaW5nIHNvbWVob3c/CisgICAgLyoKICAg
ICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4ICYmIChtX2NvZGVCbG9jay0+aW5oZXJp
dHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0czxNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7CiAgICAgICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMg
b3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFtQ29kZUJsb2NrJ3MgZXhhY3Rs
eSBvbmNlLgogICAgICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBiZSBpbnZhbGlkIG90
aGVyd2lzZS4gV2hlbiB0aGUgTExJbnQgZGV0ZXJtaW5lcyBpdCB3YW50cyB0bwpAQCAtMjM2LDYg
KzI2Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KKyAgICAqLwogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5n
U2xvd0Nhc2UgPSAwOwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgw
KTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CkBAIC0y
NzgsOSArMzA1LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwog
ICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigp
KSkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAg
ICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7Ci0gICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVO
YW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29k
ZUJsb2NrKTsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxD
YWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJ
VCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIg
IiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjdHguZ3ByPENvZGVCbG9jayo+KHJlZ1Qw
KSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCkBAIC01MjcsNyArNTU0LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4
IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5
dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRl
Y29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVy
Ym9zZSkKICAgICAgICAgICAgIGRhdGFMb2dMbigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cg
Y29kZSBmb3IgIiwgbV9ieXRlY29kZUluZGV4LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09m
ZnNldCgpKTsKQEAgLTU0NSw4ICs1NzIsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMoKQogCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklU
RXhlY3V0aW9uKCkpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRl
eHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZw
PENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigi
SklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gU0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0s
ICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAg
ICAgICAgIH0pOwogICAgICAgICB9CkBAIC02NzQsNTUgKzcwMSw1NiBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKK3ZvaWQgSklUOjplbWl0TWF0ZXJp
YWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpCit7CisgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21l
dGFkYXRhR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0
T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7
Cit9CisKK3ZvaWQgSklUOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCkKK3sKKyAgICBCYXNlOjpl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNl
bGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKIHZvaWQgSklUOjpjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBE
Rkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwo
KTsKKyAgICAvLyBPT1BTOiBNYXliZSB0aGlzIHNob3VsZCBiZSBkb25lIG9uIHVubGlua2VkIGNv
ZGUgYmxvY2s/CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2Fz
ZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsK
LSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3No
b3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6
OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAg
IG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxp
bmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAgIHN3aXRjaCAobV9jb2RlQmxv
Y2stPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1bGVD
b2RlOgotICAgIGNhc2UgRXZhbENvZGU6Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0aW9u
Q29kZToKLSAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBi
ZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgotICAgICAgICAvLyBEb24n
dCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91
bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5saW5l
RnVuY3Rpb24obV9jb2RlQmxvY2spOwotICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICBpZiAo
bV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2Rl
QmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQot
ICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1
bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2Nr
LT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAg
bV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAg
ICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRh
YmxlcygpKQorICAgICAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2lt
cGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9m
VW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAg
IH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92
bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVG
b3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVRE
aXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25z
OjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIE9PUFM6
IGJ1aWxkIGEgZGlzYXNzZW1ibGVyIG9mZiB1bmxpbmtlZCBjb2RlIGJsb2NrCisgICAgICAgIG1f
ZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2Rl
QmxvY2spOworICAgIH0KICAgICBpZiAoVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyKSkgeworICAgICAgICAvLyBPT1BTOiBidWlsZCBwcm9maWxlciBkaXNhc3NlbWJsZXIgb2Zm
IHVubGlua2VkIGNvZGUgYmxvY2sKICAgICAgICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAog
ICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBt
X3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9j
ayksCisgICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVC
eXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVCbG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmls
ZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNv
ZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAg
bV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29k
ZUluZGV4KDApKSk7CkBAIC03NDIsMTEgKzc3MCwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExp
bmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUlu
UHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJh
bWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVk
IG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlz
dCBzdGFja092ZXJmbG93OwpAQCAtNzU3LDE2ICs3ODYsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVD
YWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZz
ZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0
ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRh
QW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUlu
ZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKTsgKythcmd1bWVudCkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpICYmICghbV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsK
KyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFy
Z3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4ZWRWZWN0b3I6Om9mZnNldE9mU3RvcmFnZSgpKSwg
cmVnVDIpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1l
bnQgPCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsK
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2Fu
dCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAv
LyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byBy
ZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+
aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArODEw
LDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAg
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2Fk
R1BSKCkpOwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3Vs
dFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJl
c3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6
Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+
aml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIp
KQogICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXpl
TWFya2VyKSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MzIsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxv
d0Vycm9yLCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMg
MSwgd2UgbmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlG
aXh1cCA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkg
eworICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2Fy
aXR5Q2hlY2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9j
b2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rp
b25Qcm9sb2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxv
Y2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tU
b0ZyYW1lSW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCks
IEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQo
KSkpOwogCiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxp
bmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkp
LmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMy
X3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9u
KG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNo
ZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJp
dHlDaGVjaywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNo
VGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBA
IC04MzksNyArODc1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9
IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2Rl
QmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBt
X2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIo
KnRoaXMsIG1fdW5saW5rZWRDb2RlLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwg
ZWZmb3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04NTgsOCArODk0LDggQEAgdm9pZCBKSVQ6
OmxpbmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAgICAgIGNhc2UgU3dp
dGNoUmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpDaGFyYWN0
ZXI6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtl
ZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlW3RhYmxlSW5kZXhdOwogICAg
ICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVs
dE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2Vk
VGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEs
OCArOTA3LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBT
d2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBj
dGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJl
bHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAg
Zm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMo
KSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNo
T2Zmc2V0OwpAQCAtOTA2LDMyICs5NDIsMzUgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7CiAgICAgfQog
Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7Ci0gICAg
ZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNo
ZXMobV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9p
bkJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFu
Y2VPZnMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVC
cmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAo
YXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMp
IHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZp
bmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRo
aXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0
QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKIAogICAgIGZvciAoYXV0byYgY29tcGls
YXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAgICAgIENhbGxMaW5rSW5m
byYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAgICBpbmZvLnNl
dENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50
ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKLSAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZv
LmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpj
b21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGluZm8uZG9uZUxv
Y2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxh
dGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIEpJVENvZGVN
YXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNv
ZGVPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNT
ZXQoKSkKLSAgICAgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJ
bmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRh
Zz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb2Rl
QmxvY2stPnNldEpJVENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKSk7CisgICAg
SklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5
dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNT
ZXQoKSkKKyAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4
KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPiht
X2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk3OSwzNyBAQCB2b2lkIEpJ
VDo6bGluaygpCiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7Cisg
ICAgICAgIC8vIE9PUFM6IG1ha2UgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91dCB1bmxpbmtl
ZCBDQj8KICAgICAgICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxl
cigpKQogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21w
aWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7Cisg
ICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9m
aWxlZENvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAogICAgIGlmIChtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAgICAgbV9wY1RvQ29k
ZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAgCisgICAgLy8gT09QUzog
TWFrZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBV
bmxpbmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJ
TkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAg
ICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRU
eXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAg
ICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5
cGUobV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwog
ICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlD
aGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNr
KTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3
aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBh
ZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisK
KyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxz
KTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENh
bGxMaW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1v
dmUobV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJs
ZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7Cisg
ICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgp
OworICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2Rl
LT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOwogCiAgICAgaWYgKEpJ
VEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2Rl
IGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1l
bW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCkt
PmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBj
b2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5l
eGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFi
bGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0
IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5h
bGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICsxMDE4LDIxIEBAIENv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZl
ci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1f
Y29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0
ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9j
ay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxlcklu
Zm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAg
Ly8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0
aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhh
bmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9
CisgICAgLy8gT09QUzogRG9uJ3QgdGhpbmsgdGhpcyBzaHJpbmsgaXMgcmVhbGx5IGRvaW5nIGFu
eXRoaW5nIGFueW1vcmUuIFZlcmlmeS4KKyAgICAvL3sKKyAgICAvLyAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgIC8vICAgIG1fY29kZUJsb2Nr
LT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7
CisgICAgLy99CiAKKyAgICAvLyBPT1BTOiBtX3BjVG9Db2RlT3JpZ2luTWFwIHNob3VsZCBsaXZl
IG9uIEJhc2VsaW5lSklUQ29kZSBmb3IgYmFzZWxpbmUgY29kZWJsb2Nrcy4KICAgICBpZiAobV9w
Y1RvQ29kZU9yaWdpbk1hcCkKICAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2lu
TWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOwogCiAgICAgbV92bS0+bWFjaGluZUNv
ZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0YXRp
Y19jYXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAgICAgICAgc3RhdGljX2Nhc3Q8
ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CisgICAgICAgIHN0YXRp
Y19jYXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7
CiAKLSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwo
KSk7CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShtX2ppdENv
ZGUucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVs
OwogfQpAQCAtOTk4LDExICsxMDQ0LDExIEBAIHNpemVfdCBKSVQ6OmNvZGVTaXplKCkgY29uc3QK
ICAgICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0
IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorQ29tcGls
YXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGRvTWFpblRocmVhZFByZXBhcmF0aW9u
QmVmb3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoZWZm
b3J0KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICByZXR1cm4gZmlu
YWxpemVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlRXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxNCArMTA4OCwxNCBAQCB2b2lkIEpJVDo6
ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxl
ckxvZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBhcmluZyBmb3IgSklUIGNvbXBp
bGF0aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENv
ZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3Io
VW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpID09IFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAogICAgIHJldHVybiByb3VuZExv
Y2FsUmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChjb2RlQmxvY2stPm51bUNhbGxl
ZUxvY2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9
CiAKLWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykK
K2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJs
b2NrKQogewogICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVy
Q291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw0MCBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorICAgIGNsYXNzIEpJVENvbnN0YW50UG9vbCB7CisgICAgcHVibGljOgorICAgICAgICB1
c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisgICAgICAgIGVudW0gY2xhc3MgVHlwZSA6IHVp
bnQ4X3QgeworICAgICAgICAgICAgR2xvYmFsT2JqZWN0LAorICAgICAgICAgICAgQ2FsbExpbmtJ
bmZvLAorICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8sCisgICAgICAgICAgICBGdW5jdGlv
bkRlY2wsCisgICAgICAgICAgICBGdW5jdGlvbkV4cHIsCisgICAgICAgIH07CisKKyAgICAgICAg
c3RydWN0IFZhbHVlIHsKKyAgICAgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgICAgIFBhY2tl
ZFB0cjx2b2lkKj4gcGF5bG9hZDsKKyAgICAgICAgfTsKKworICAgICAgICBKSVRDb25zdGFudFBv
b2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29s
JiBvcGVyYXRvcj0oSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKworICAgICAgICBDb25z
dGFudCBhZGQoVHlwZSB0eXBlLCBQYWNrZWRQdHI8dm9pZCo+IHBheWxvYWQgPSBudWxscHRyKQor
ICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXpl
KCk7CisgICAgICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBlLCBwYXlsb2Fk
IH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHMuc2l6ZSgpOyB9CisgICAgICAg
IFZhbHVlIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpXTsgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50czsKKyAgICB9Owor
CiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZTsKQEAgLTE0OSw5ICsxODMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9Owog
CiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgc2xvd1BhdGhTdGFydDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRv
bmVMb2NhdGlvbjsKLSAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CisgICAgICAg
IFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKICAgICB9OwogCiAg
ICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CkBAIC0xNzEsNiAr
MjA1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRp
c3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNl
dC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNl
dCA9IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBw
dWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUlu
ZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAg
ICAgIH5KSVQoKTsKQEAgLTE3OCwxOCArMjE0LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2
b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQp
OwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAg
ICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsK
ICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5U
aHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRp
YyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNl
dCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQo
dm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7Cisg
ICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2
YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOwotICAgICAgICBz
dGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOwor
ICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9j
ayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcs
IFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFNlY29uZHMgdG90YWxDb21waWxlVGltZSgpOwpAQCAtMTk5LDcgKzIzNSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAg
ICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpOwogICAgICAgICB2b2lkIGxpbmso
KTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRp
b25FZmZvcnQpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShDb2Rl
QmxvY2sqLCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBv
dXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENh
bGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
KQpAQCAtMjIzLDYgKzI1OSwzMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlm
CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxv
YWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBs
b2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBs
b2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7
CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNv
ZGU+CisgICAgICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUsIGNvbnN0IEJ5dGVj
b2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgorICAgICAgICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0ZWNv
ZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CisgICAgICAgIHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGxvYWRDb25z
dGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRH
bG9iYWxPYmplY3QoR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQo
VmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworCisgICAgICAgIHZvaWQgZW1pdFB1dENvZGVCbG9j
a1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdUMCk7CisKICAgICAgICAgdm9p
ZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5kbGVyKTsKQEAgLTI1OCwxNiAr
MzE4LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAg
ICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQg
IT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBv
cF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
LCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwog
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90
PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bj
b2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3Rh
bnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBib29sIGNvbXBp
bGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtl
ZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJv
b2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CkBAIC0yOTEsMTAgKzM1MSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ly8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5k
IHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAgICAgICAgLy92b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNv
bnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVS
ZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBA
IC0zMDcsNiArMzY3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxl
KiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmls
ZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChj
b25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwg
UmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01
OTIsNyArNjU2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
am5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjI2LDE0ICs2ODksMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWdu
ZWQpOwogCiAgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFj
Y2Vzc1R5cGUpOwotICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29t
bW9uKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNo
ZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2b2lkIGVtaXRWYXJS
ZWFkT25seUNoZWNrKFJlc29sdmVUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9u
Q2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsKKyAgICAgICAgdm9p
ZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwog
ICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVk
IGRlcHRoKTsKICAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCkBAIC02NDUsNyArNzA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAg
ICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCop
OwotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsKKyAg
ICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQp
OwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQ
dXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpAQCAtNjU0LDYgKzcxNyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgICAgICBib29sIGlz
S25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRP
cGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJ
bnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIo
VmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY5NSwyNiArNzU5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7CiAg
ICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNv
bHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsK
LSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VO
RVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJv
bVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KLSAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1vZHVsZVZh
ciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4gdXNlIGEg
dGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3ZSBkb24n
dCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAgICAgICAgICAgcmV0
dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09
IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2Vu
ZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX1JFU09M
VkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFU
T1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVy
YXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1l
KTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBj
b25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3RkOjpvcHRp
b25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CiAKICAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdl
bmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CkBAIC03NTksMTAgKzgwNSwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5k
Q2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdm9pZCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChBZGRyZXNzLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIEFkZHJlc3MsIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29k
ZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVj
b2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAg
ICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNS
ZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIwLDIwICs4NjYsMjAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKEFkZHJl
c3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkpOwogICAgICAgICB9CiAKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlLCB0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVu
YWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRh
dGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1
cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1l
dGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShieXRlY29kZSwg
b3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lIEJ5dGVjb2Rl
LCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJh
aXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0gICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNl
dHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5cGU+KHRhcmdldCwgYXJncy4u
Lik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdH
UFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2Rl
LCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOwog
ICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlw
ZW5hbWUuLi4gQXJncz4KQEAgLTkxOCwyNSArOTY0LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVy
biBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGlu
ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAgICAgIGJvb2wg
c2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsgfQog
I2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBmYWxzZTsgfQog
ICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21w
aWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFsbCBjb2RlIGdl
dHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJu
IGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRh
QW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgdm9pZCBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7
CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEg
dGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3Nz
IHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAg
ICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkg
dGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0
VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBC
aW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAogICAgICAg
ICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtOTYzLDkgKzEwMDQsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOwog
ICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCi0gICAgICAgIEhhc2hN
YXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwotICAgICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQcm9maWxlczsK
LQogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExpc3Qg
bV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7CiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQpAQCAtOTk5LDExICsxMDM3LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAogICAgICAg
ICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9y
SW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5
dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgICAgIFJlZlB0
cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgICAgIE1hdGhJQ0hvbGRlciBtX21hdGhJ
Q3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1faml0Q29kZTsKKworICAgICAg
ICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1f
dW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJ
bmZvczsKKyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRT
dHViSW5mb3M7CisgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hK
dW1wVGFibGVzOworICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX21l
dGFkYXRhR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUjsKKyAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19jb25zdGFudHNHUFIgPSBMTEludDo6UmVnaXN0ZXJz
OjpwYkdQUjsKKworICAgICAgICBzdHJ1Y3QgTm90QUNvZGVCbG9jayB7IH0gbV9jb2RlQmxvY2s7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENo
YXIob3AyKSkgewogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0K
IAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEp
OwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IElu
dC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1Qx
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2Fk
KG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4
IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
LSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5r
ZWRDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZWdhdGU+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0
aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdv
dWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0
aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4o
bmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxl
ZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAtODk5LDggKzkwNCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJp
dGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubV9wcm9maWxlSW5kZXgp
OworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0aFByb2Zp
bGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBh
ZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAg
LTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJ
QzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5l
KCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5l
Q29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsK
ICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3Ms
IGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0aFByb2Zp
bGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChu
b25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3Jj
UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAxNSwxMCArMTAyMSwxMSBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3Bl
cmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBt
YXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hH
UFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkK
LSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3Ms
IHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdz
KTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEzICsxMDYyLDE0IEBAIHZvaWQgSklUOjplbWl0
TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0
aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlv
bl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlv
bl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3Jj
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQ
cm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pN
aWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVk
SW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBz
bG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIwLDEzICsxMTI4LDE0IEBAIHZvaWQgSklUOjpl
bWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFBy
b2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xv
d1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlv
bl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJ
VE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywg
cmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWlj
PihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0
aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihy
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAg
IGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5n
KCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQ
cm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1fcHJvZmlsZUluZGV4KTsKIAogICAgIFNuaXBwZXRP
cGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAg
IFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNv
bmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJ
Q3MuYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVs
PihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZU11bCk7CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRo
UHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsKKyAgICBKSVRTdWJJQyog
c3ViSUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzMiw3ICsyMzIsNyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2
CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBz
dG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxs
ZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgcmVnVDEsIHJlZ1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAg
LTMyNCw3ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlv
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBl
bWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93
Q2FzZShjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxs
UmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52
aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOwogfQogCkBAIC01MywxMCArNTMsOSBAQCBzdGQ6OmVu
YWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9w
Y29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9w
X3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hl
Y2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50SW5j
bHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVj
a3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFj
a09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCkBAIC02
NCw3ICs2Myw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZz
ZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsK
ICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsK
LSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVja3Bv
aW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIHJlZ1QwLCByZWdUMCk7CiAgICAgICAgIGRv
bmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTc4LDcgKzc3LDcgQEAgc3RkOjplbmFibGVfaWZf
dDwKICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9
PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwg
Q2FsbExpbmtJbmZvKiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0
ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKQEAg
LTkxLDcgKzkwLDggQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAog
ICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3Vt
ZW50czsKICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJh
bWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lz
dGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCByZWdUMCwgcmVnVDEsIC1maXJzdEZyZWVS
ZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1maXJz
dEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0aGlzLCBy
ZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTAxLDE0ICsxMDEsMTYgQEAgSklUOjpjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJh
dGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UKICAgICAgICAgc2V0dXBP
cGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0aW9u
KHNldHVwT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCByZWdU
MywgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50
LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXls
b2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7Ci0gICAgSnVtcCBub3RCaWdnZXN0ID0gYnJh
bmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMiwgaW5mby0+YWRk
cmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7CisgICAgbG9hZENvbnN0YW50
KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAs
IENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwg
cmVnVDMpOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMywgcmVn
VDIpOworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zm
c2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CiAgICAgbm90QmlnZ2VzdC5s
aW5rKHRoaXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgpAQCAtMTI3LDE2ICsx
MjksMTYgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpCiB0ZW1wbGF0ZTw+
CiBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVjb2RlKQog
ewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAg
c3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2Fs
bGVyRnJhbWVPZmZzZXQoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3Vu
bGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBy
ZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
RW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2Rl
KTsKIApAQCAtMTQ4LDcgKzE1MCw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5m
byA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFkZChD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlu
a0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29k
ZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE1OCw0NiBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFs
U2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAq
IHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxD
YWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVj
b2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxD
YWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCi17Citib29sIEpJVDo6Y29t
cGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkgewogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVt
cGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRl
Y29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK2Jv
b2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlu
a2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxsRnJh
bWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdz
ID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0g
R1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0K
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0g
bWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVt
UGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFn
UmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICBzaHVmZmxlRGF0YS0+
bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShi
eXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29kZS5t
X2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsr
aSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgc2h1ZmZsZURhdGEt
PmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNr
KAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhp
cyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwog
ICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAgICAgICBWYWx1ZVJlY292ZXJ5Ojpp
bkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNh
dmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEo
c2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5Ojpp
bkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0YS0+c2V0dXBDYWxsZWVT
YXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJ
Qzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURh
dGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9D
b25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6
ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKKyAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRh
aWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKworICAgIHNo
dWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8tPmZyYW1lU2h1ZmZsZURhdGEgPSBX
VEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsK
ICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlv
biA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIxOCwxNCArMjIzLDI1IEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6
ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZy
YW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZv
ID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBp
bmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKKworICAgIFVu
bGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOworICAgIGlmIChvcGNvZGVJRCAhPSBv
cF9jYWxsX2V2YWwpIHsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBtX3Vu
bGlua2VkQ2FsbHMuYWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlw
ZUZvcihvcGNvZGVJRCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZvKTsKKworICAgICAg
ICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRl
eCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9u
SW5mbygpKTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS51bmxpbmtlZENhbGxMaW5rSW5mbyA9IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3Rh
bnQ7CisgICAgfQorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQp
OwogCiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRlY29kZUlu
ZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOwor
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBo
b2xkcyBjYWxsZWUuCkBAIC0yMzQsMTYgKzI1MCwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgp
ID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZv
OjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAgaWYgKGNv
bXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQorICAgIGlm
IChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZv
Q29uc3RhbnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0
YW50LCByZWdUMik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAgICBh
dXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwg
cmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7CisgICAgICAgIGF1dG8g
c2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhp
cywgcmVnVDAsIHJlZ1QyLCBbJl0gewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CiAgICAgICAg
IH0pOwpAQCAtMjUzLDEzICsyNjUsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBzbG93UGF0aHMg
PSBpbmZvLT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpV
c2VEYXRhSUM6Olllcyk7CisgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRE
YXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyKTsKICAgICBhdXRvIGRvbmVMb2NhdGlv
biA9IGxhYmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0
aW9uOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjczLDIw
ICsyODUsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMyk7CisgICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKIAogICAgIGlm
IChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAg
ICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1f
dm0sICp0aGlzKTsKKyAgICBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgqbV92bSwg
KnRoaXMsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1
cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKQEAgLTM5NSwxNyArNDA3LDMwIEBA
IHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KIAogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKICAgICAKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworCisgICAgbW92ZShyZWdUMCwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCks
IHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQ
UiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uZXh0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhp
cyk7CiB9CkBAIC00MTYsMTAgKzQ0MSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGlu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCi0gICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGl0ZXJh
dG9yR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBMaXN0IG5v
dE9iamVjdDsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyYXRvckdQ
UikpOwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0b3JHUFIp
KTsKQEAgLTQzMiwxOSArNDU1LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9v
cGVuKGNvbnMKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVy
YXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudCkucmF3Qml0cygpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgbW92
ZShpdGVyYXRvckdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIAog
ICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93
SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRvbmUubGlu
ayh0aGlzKTsKIH0KQEAgLTQ1Miw3ICs0NzMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3Jfb3Blbihjb25zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0g
KCkgewogICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNh
c2UgTmFycm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC00NzAs
NTAgKzQ5MCw3NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAg
ICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6
R2VuZXJpYykpKTsKIAogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgb3I4KFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIEFi
c29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9pdGVyYXRpb25NZXRhZGF0YS5zZWVuTW9kZXMpKTsK
KyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRh
OjpvZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9m
ZnNldE9mU2Vlbk1vZGVzKCksIHJlZ1QwKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIHJlZ1QwKTsKKyAgICBzdG9y
ZThUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNl
dE9mU2Vlbk1vZGVzKCkpOwogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+KGluc3Ry
dWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRDaGVja3Bv
aW50KCk7CiAgICAgLy8gY2FsbCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkgaW4g
cmVnVDAKIAotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBpdGVyUmVz
dWx0R1BSID0gcmVnVDI7Ci0gICAgR1BSUmVnIGRvbmVHUFIgPSByZWdUMTsKLSAgICAvLyBpdGVy
UmVzdWx0R1BSIHdpbGwgZ2V0IHRyYXNoZWQgYnkgdGhlIGZpcnN0IGdldCBieSBpZCBiZWxvdy4K
LSAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpzY3JhdGNoOworICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BS
KTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6cmVzdWx0OwogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGl0ZXJSZXN1bHRHUFIpOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHN0YXRpY19hc3NlcnQocmV0dXJu
VmFsdWVHUFIgPT0gYmFzZUdQUik7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIpOwogCiAgICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJl
Z3MuYWRkKHZhbHVlR1BSKTsKKyAgICAgICAgcHJlc2VydmVkUmVncy5hZGQoaXRlckNhbGxSZXN1
bHRHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIHByZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkp
LCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHJlZ1Qz
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgp
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzdHViSW5mb0dQ
UiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJl
Z3MgeyBkb25lR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNr
cG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDI7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdpc3RlclNl
dCB1c2VkUmVnaXN0ZXJzKGRvbmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2Nh
dGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRp
b25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IGdsb2JhbEdQUik7CiAKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1l
cy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0
R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3
LDU5ICs1NzEsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwog
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVj
a3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVn
IGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVu
ZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVk
U3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAg
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4
KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
LSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BS
KSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxS
ZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBB
ZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShp
dGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwg
QWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50KS5yYXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGlu
ayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVz
dWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3Vt
ZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1
ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlx
dWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsK
ICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJ
bmRleCsrXTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAg
ICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5v
bkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZh
bHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJ
bmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJl
ZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3Vs
dEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxk
ZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZh
bHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0
cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDEwICsxNTksMTAgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAg
ICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJ
QygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gT3B0aW9uczo6
dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkBAIC0yNDgsNiArMjQ4LDQxIEBA
IHByb3RlY3RlZDoKICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1fcmVmOwogfTsKIAorY2xh
c3MgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNI
b2xkZXImIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1f
YWRkSUNzKTsKKyAgICAgICAgbV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAg
ICAgICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICAgICAgbV9zdWJJ
Q3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRk
SklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRk
SUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQ
cm9maWxlKTsgfQorICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKyAg
ICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkg
eyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKworCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Cisg
ICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0
dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxH
ZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRNdWxJQyog
YWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVs
SUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVu
YW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklU
TmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5h
cnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46
OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmls
ZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKworcHJpdmF0ZToK
KyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7
CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNz
OworfTsKKwogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoRGlyZWN0SklU
Q29kZSk7CiBjbGFzcyBEaXJlY3RKSVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7
CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVS
KERpcmVjdEpJVENvZGUpOwpAQCAtMjY2LDYgKzMwMSwyMSBAQCBwcml2YXRlOgogICAgIENvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gbV93aXRoQXJpdHlDaGVjazsKIH07CiAKK2NsYXNzIEJhc2VsaW5l
SklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1
YmxpYzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgICAgICA6IERpcmVjdEpJ
VENvZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
KQorICAgIHsgfQorCisgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2Fs
bHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsgLy8gT09QUzog
bWFrZSBzdXJlIHdlIHZpc2l0IHRoZXNlIHNvbWVob3cuIE9yIGFzc2VydCB3ZSBkb24ndCBoYXZl
IHRvLCBzaW5jZSB0aGV5J3JlIHZpcnR1YWwgY2FsbHMuCisgICAgQmFnPFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxl
SnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVt
cFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisgICAgSklUQ29kZU1hcCBtX2ppdENv
ZGVNYXA7CisgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworfTsKKwogY2xhc3Mg
TmF0aXZlSklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgewogcHVibGljOgogICAg
IE5hdGl2ZUpJVENvZGUoSklUVHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxNzE4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIklu
bGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBzdGF0
aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2ppdFR5
cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1YkluZm8g
PSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2Rl
T3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxvY2sg
PyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFn
ZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwog
CiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3
ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIExp
bmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0YXJ0
ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5sb2Nh
dGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0
aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zbG93UGF0
aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgp
OworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKyAg
ICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHJ1Y3R1cmVTdHViSW5mb0dQUik7CisgICAg
aml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9k
b25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0
b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRl
eDsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZv
OwogCiBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUg
OiB1aW50OF90OwogCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVEZWxCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5m
bzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFz
ZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlu
a2luZyBhIENvZGVCbG9jayBhbmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZh
bCBTdHViSW5mby4KKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0
dWJJbmZvID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3Ry
dWN0IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcHJvdG8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisK
K3N0cnVjdCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5
ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQ
UkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJ
bmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdU
MTsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUklu
Zm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6
cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJl
Z1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3Nl
cnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KGJyYW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsK
KwogY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9CkBAIC02MiwxNSArMTY0LDIxIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGZpbmFsaXplKAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIs
IExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIgfTsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IG1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggeyBz
dGQ6Om51bWVyaWNfbGltaXRzPEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+OjptYXgoKSB9Owor
CiBwcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1f
aml0VHlwZTsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgor
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX2RvbmU7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsgLy8gT09QUzogbWFrZSByZXBvcnRDYWxsIHBhc3Mg
c29tZXRoaW5nIGluIHdlIGNhbiB1c2UgZm9yIHRoZSBub24tQ1RJIHRodW5rcyBidWlsZHMuIAog
fTsKIAogY2xhc3MgSklUQnlJZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvciB7CkBAIC05OCw3ICsyMDYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9i
YXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKK3B1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKQEAgLTEzMiw4ICsyNDAsOCBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdl
bmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAg
IENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVn
cyBiYXNlLAotICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBH
UFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBK
SVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gs
IEVDTUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImKTsKICAgICAKQEAgLTE2MywxMSArMjcxLDkgQEAgcHVibGljOgogCiAgICAg
dm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAg
SlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxl
SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTE5MSw4ICsyOTcsNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjAsNiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAot
cHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICsz
NDMsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTI3Nyw4ICszNzcsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXIm
IGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAot
cHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSAr
NDAwLDkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fz
c2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1Zh
bHVlUmVncyBtX3Jlc3VsdDsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0Owog
ICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApA
QCAtMzMwLDggKzQyNiw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShy
ZXZpc2lvbiAyODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAg
aWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
dW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykg
PT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIo
KTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lz
dGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29u
c3RhbnQpIHsKKyAgICAgICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBhbGwg
bGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtl
ZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0
dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjphcHBlbmRDYWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0
YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24s
IFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwg
cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBK
U1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0
b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICBy
ZXR1cm4gY2FsbDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVh
bFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZp
cnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhm
dW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1
ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVH
UFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5p
c0tub3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0
Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgs
ICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9p
bnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVs
cy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxp
bmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
SW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRz
KCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRv
IGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkz
LDI5ICszMTgsMzQgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQog
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJl
Z2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVn
cyB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKLQotICAgIC8v
IFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2Ug
Y2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UK
LSAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSAgICBzdG9y
ZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAg
ICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5k
aWYKLX0KKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwo
KSktPmxlbmd0aCgpID09IDE7Cit9CisKKy8vIE9PUFMKKy8vaW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVn
cyB2YWx1ZSkKKy8veworLy8gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CisvLwor
Ly8gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0
LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAorLy8gICAgLy8gc3RvcmUuCisvLyNpZiBVU0Uo
SlNWQUxVRTY0KQorLy8gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVj
a2V0cyk7CisvLyNlbHNlCisvLyAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9y
ID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9i
dWNrZXRzKTsKKy8vICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+
YXNCaXRzLnBheWxvYWQpOworLy8gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0
b3ItPmFzQml0cy50YWcpOworLy8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
IGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRh
dGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpA
QCAtMzIzLDI0ICszNTMsMjUgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1l
PGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVk
T3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1
ZVJlZ3MgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFs
dWVSZWdzIHZhbHVlKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAg
ICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0
YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7CisgICAgcHRyZGlm
Zl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29kZT4obV9i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RC
dWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIs
IG9mZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJl
c3VsdFJlZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVzdWx0UmVnKSk7Ci19CisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykK
Ky8veworLy8gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVS
ZWdzKHJlc3VsdFJlZykpOworLy99CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwg
R1BSUmVnIHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
R1BSUmVnIHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCkBAIC0zNjAsNiAr
MzkxLDIxIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVcKICAgICB9
CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHB0cmRpZmZf
dCBvZmZzZXRPZkFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNj
cmF0Y2hHUFIpCit7CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAgICBs
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHNjcmF0
Y2hHUFIsIGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmlsZSk7CisgICAgfQorfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBSZWdpc3RlcklEIGNlbGxHUFIs
IFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3sKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCksIGNlbGxHUFIs
IHNjcmF0Y2hHUFIpOworfQorCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5k
Q29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwpAQCAtMzgwLDcgKzQyNiw3IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlm
IChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5D
b25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOworICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVC
bG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJ
bW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAgICBsb2Fk
RG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcgKzU0Miw3IEBAIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBp
ZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2Vs
bChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcgKzU1Miw3IEBAIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJ
RCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAg
IGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkK
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNCwx
MSArNTYwLDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogICAg
IH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0LDExICs1ODUsMTcgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5
dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVt
YmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFs
dWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQorICAgICAgICBzd2l0Y2ggKG1fdW5saW5rZWRDb2Rl
LT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpKSB7CisgICAgICAgIGNhc2Ug
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICBjYXNlIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIG1vdmUo
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0Nv
bnN0YW50KHNyYywgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTU2NiwxMSArNjEzLDYgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwg
ZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50
KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lz
dGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01
OTUsNyArNjM3LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQog
CiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVn
aXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY3
OSw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBp
ZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9j
ay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
R2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQot
ewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hN
YXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRH
ZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0
SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7
Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1
dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6
OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBr
ZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAz
MiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1
dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChp
dGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBp
dGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGll
ZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQ
cm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zm
c2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiAr
NzAwLDYxIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICBy
ZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBs
b2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRh
dGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhzX21ldGFkYXRhR1BS
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBC
eXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAg
bG9hZDgoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZh
bHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMy
VG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90
IG9mZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1f
dW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVj
b2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3Qg
Qnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAg
IGFkZFB0cihzX21ldGFkYXRhR1BSLCBUcnVzdGVkSW1tUHRyKG1fdW5saW5rZWRDb2RlQmxvY2st
Pm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJl
c3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAg
bG9hZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNv
bnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9n
bG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BSUmVn
IHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOwor
ICAgIC8vIE9PUFM6IE1heWJlIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudD8KKyAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmVzdWx0LCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVz
dWx0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRl
eCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSks
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIp
LCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwog
ICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpOwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oY29uc3QgSW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2gg
ZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9i
eXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwog
ICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDI0
LDcgKzEwMjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAK
ICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sg
dGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxl
JiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVs
dE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1
cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3ICsxMDQyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJ
VGFibGUodW5saW5rZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0LDIyIEBAIHZv
aWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewot
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0g
ICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwotICAgICAg
ICBlbHNlCisgICAgICAgIC8vIE9PUFM6IG1vc3QgIk90aGVyIiBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gY29uc3RhbnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQgZnJvbSB0aGUgVW5saW5rZWRDb2Rl
QmxvY2suIEl0J3MganVzdAorICAgICAgICAvLyBhIGNvdXBsZSB0eXBlcyB0aGF0IGNhbid0LiBD
cmVhdGUgYW4gYWJzdHJhY3Rpb24gZm9yIHRoYXQuCisKKyAgICAgICAgc3dpdGNoIChtX3VubGlu
a2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkgeworICAgICAg
ICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAgICAgY2FzZSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAg
ICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0
b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICs5OCwzNSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
LnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxsb2Nh
dG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5h
bE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0
b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJl
Z2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVn
ID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKIAotICAgIGlm
ICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVsc2Ugewot
ICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1
c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7
Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVy
ZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7Ci0gICAg
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcE5ld09iamVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgb2Zm
c2V0T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgp
ICsgb2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Cisg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxl
KCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dD
YXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
KyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0
YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1
cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVj
dCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzE0MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJy
aWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNl
VmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5
bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFs
dWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24o
KSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5z
dGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9C
SkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VT
eW1ib2xGdW5jdGlvbikpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rv
ciwgcmVnVDApOwogCkBAIC0xNTQsMzAgKzE2NCwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0
YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlw
ZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVl
IHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBi
YXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4g
dGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3RvR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BSKTsKICAgICAKICAgICAvLyBDaGVjayB0
aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hl
Y2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHBy
b3RvR1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAg
cmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUNSwK
LSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICByZXN1bHRHUFIsCisgICAgICAgIHZh
bHVlR1BSLAorICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgc3R1YkluZm9HUFIsCisgICAgICAg
IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDEsIEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6c2NyYXRjaDIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAorCiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQgKzIxMCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRk
cmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRp
Y19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQ
UjIpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90
byA9PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSkKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNl
T2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMjQwLDcgKzI1Nyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KIAogICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwog
CkBAIC0zNzQsNyArMzkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0
aW9uKgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJl
dCgpOwogI2Vsc2UKQEAgLTM4NSw3ICs0MDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29u
c3QgSW5zdHJ1Y3Rpb24qCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3Io
Vk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAg
ICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVD
YWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQyOCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJv
cGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQs
OSArNDUwLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZv
aWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1
bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5j
dGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0
ODIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJy
YW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0
KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNG
YWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzQ5OSw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBy
ZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyAr
NTM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0
YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1w
KCk7CiAKQEAgLTU0Myw3ICs1NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29u
c3QgSW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCks
IHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTU4Miwx
NSArNjAxLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KIHZv
aWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAg
IEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9z
cGVjaWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3Rv
cmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICBsb2FkQ29k
ZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpCisgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOwor
ICAgIHN0b3JlOFRvTWV0YWRhdGEoYnl0ZWNvZGUsIFRydXN0ZWRJbW0zMigxKSwgT3BKbmVxUHRy
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2NDIsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY1OSw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBi
ZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAg
IC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzE0LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBq
dW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzczMSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpv
cF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BS
ID0gYXJndW1lbnRHUFIxOwpAQCAtOTA4LDcgKzkyOCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBy
ZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MTgsNyArOTM5LDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCkBAIC05MzEsNyArOTUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0
IEluc3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk3Myw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJl
cihyZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAh
PSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpA
QCAtOTc4LDcgKzEwMDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5z
dHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRz
dFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05
OTMsNyArMTAxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8K
ICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkp
LCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRy
KSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsK
ICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9y
aW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVn
aXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwotICAgIGlmIChidWZmZXIg
fHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUlu
ZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCks
IG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5j
aFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFn
KTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVmZmVyICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAgICAgICAgIEpTVmFsdWVS
ZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9m
aWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdzKTsKLSAgICAgICAgfSk7
Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBAIC0xMDUzLDggKzEwNjMs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3Jl
YXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNo
IHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
LSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3
aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNo
UmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNo
UmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxp
bmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5MSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9z
d2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5
dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRj
aCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAg
ICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxl
Lm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRH
UFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CiAgICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCkBAIC0xMDk5LDIwICsx
MTEwLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
ICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29k
ZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAgIGxpbmtl
ZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5n
V2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRl
eCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVi
dWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygp
LCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0
cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBl
KSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0xMTMzLDcgKzExNDYs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJl
Z1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTExNDgsNyArMTE2
MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTY2LDcgKzExNzgsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1Qw
KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTExODgsMTIgKzEyMDAs
MTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIEV2
ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFu
dAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVj
ZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2lu
ZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygp
OworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMoKTsKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwg
Y291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKKyAgICAKKyAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwor
ICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAgZW1pdEVudGVyT3B0aW1pemF0aW9u
Q2hlY2soKTsKICNlbHNlCkBAIC0xMzEwLDIzICsxMzI0LDE5IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVk
U3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0
dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlz
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJC
YXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwog
ICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0
YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQy
LDcgKzEzNTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRP
Zk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQ
cm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyks
IGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlv
blJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0
aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1
bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BDcmVhdGVUaGlzOjpvZmZzZXRPZkNhY2hlZEZ1bmN0aW9uKCksIGNhY2hlZEZ1bmN0
aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1
YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxl
Q2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBj
YWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVl
cy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzgyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Mik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwg
cmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0
dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzkzLDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdU
MiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwog
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJu
VmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDA2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwog
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQxNyw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qy
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCBy
ZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzMiwxMSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0
cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFz
SW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJ
bnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5j
ZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1
Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsK
ICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVl
R1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiB9CkBAIC0xNDMwLDcgKzE0NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5
RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0Fy
ZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV91bmxp
bmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4o
KSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9u
Q291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCByZWdUMCk7CiAgICAg
ICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpA
QCAtMTQ0MCw3ICsxNDU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IElu
c3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRpZgotICAgICAgICBt
b3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRSZWdzKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
ICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsxNDY4LDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAgLy8gRW1pdCB0aGUg
SklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKKyAg
ICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qw
KTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8sIFRydXN0
ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwKLSAg
ICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0
ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAtMTUwOSw3ICsxNTI1
LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1lbnRHUFIw
KTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3Vt
ZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTE1NjQsMzQgKzE1ODEsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3Jl
Z2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IEdQUlJlZzo6YXJndW1l
bnRHUFIwOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxp
bmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBK
SVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2Fk
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25E
ZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSkKKyAgICBsb2FkQ29uc3RhbnQo
Y29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpv
cGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZt
KCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZt
KCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAg
fQogfQogCkBAIC0xNjIxLDIzICsxNjQwLDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJD
b21tb24oY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2Nv
cGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Nj
b3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3Vt
ZW50R1BSMSk7CiAjZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBt
X2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBh
dXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
RnVuY3Rpb25FeHByLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
Ynl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBh
cmd1bWVudEdQUjIpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25l
d19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IGFyZ3VtZW50R1BSMXJlZ1QwLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMXJlZ1QwLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NF
UlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjFyZWdUMCwg
YXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2NjQsMjkgKzE2ODQsMzAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9h
cmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9j
YXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1
ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
YXJndW1lbnRHUFIyKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUo
KSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5n
dGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJ
bmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7
CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5
V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1l
bnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxp
emVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFk
YXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRM
b2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5k
UHJvZmlsZSwgZHN0LCByZWdUMywgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwog
I2VuZGlmCiB9CiAKQEAgLTE2OTQsOCArMTcxNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19h
cnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91Ymxl
IGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHR5
cGUgcHJvZmlsZXIgaXMgZW5hYmxlZC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRU
eXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApA
QCAtMTc3NywyMCArMTc5OSwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQ
UjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hp
Y2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwotICAgIEdQ
UlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1
bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1
cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcs
IHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFy
Z0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5Q
YWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwor
ICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBy
ZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdU
Myk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1Zh
bHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tl
dFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4g
b2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB1c2luZyB0aGUgY29udHJvbCBmbG93
IHByb2ZpbGVyLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Js
b2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsK
QEAgLTE4NjAsNyArMTg4Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25z
dCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxOTEyLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODE3
MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODgxLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJ
bnQzMigpKQpAQCAtMjkwNCw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNl
bGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNT
dHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZh
bHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyODE3MTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
LCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1l
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVS
ZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDky
ICs0OSwxMDMgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlm
aWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMo
KSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAg
ICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1Qy
KTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVu
SWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50
aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VH
UFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJh
c2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3Jh
dGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVy
YXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9m
aWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2Rl
LCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5m
bygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHVi
SW5mb0dQUik7CisKKyAgICAgICAgLy8gT09QUy4gU3VwcG9ydCB0aGlzCisgICAgICAgIC8vaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAgICAgLy8gICAgZ2VuLnN0dWJJ
bmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgICAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+
CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5
dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGlm
IChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChtX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0
YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRH
UFIyKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUs
IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAg
ICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1f
Ynl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgot
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
R2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBh
cmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1
bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChw
cm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29u
c3RhbnQobV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNjAsOCArMTcxLDggQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxl
R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRH
UFIxKTsKIApAQCAtMTg3LDM0ICsxOTgsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cmVzdWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBBU1NFUlQoaGFz
QW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yMjMsOSArMjQx
LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTIzNSwyNiArMjU1
LDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxy
ZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3By
aXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKQEAgLTMwMCwyMSArMzE0LDI4IEBAIHZvaWQgSklUOjplbWl0X29w
X3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29k
ZS5tX2JyYW5kOwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5k
R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFj
Y2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MoYnJhbmRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAg
Ly8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNp
bmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI4LDEzICszNDksMTcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogewogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKwogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vz
c0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFj
Y2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTM0NCwyNCArMzY5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJp
dmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9
PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0
eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFu
ZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
blNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5k
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMTkgKzM4OSwy
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJy
YW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRl
QnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwg
YnJhbmRHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQ
cml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVC
cmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpD
aGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCkBAIC0zOTQsOSArNDIyLDExIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BS
ID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0MzYsMTggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAg
c3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUo
b3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5j
dGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFy
Z3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJh
bmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NTksNDIg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBy
ZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQ
b2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDIpLCByZWdUMywgcmVnVDQpOwotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9w
ZXJ0eSkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworICAgIC8vIE9PUFM6CisgICAgLy9pZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgIC8vICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQg
PSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3Qg
OiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUo
Ynl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChn
ZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1i
YXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MTAsMTIgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUg
PSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0
cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9
IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTMxLDE2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBm
YXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYg
KGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNl
CisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BS
NCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUx
Miw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAg
IGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUp
OwpAQCAtNTIzLDcgKzU2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUzOSwxMSArNTgx
LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAg
aml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICBqaXQuc3RvcmUzMihieXRlY29k
ZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSk7CkBAIC01NzAsMjAgKzYxMiwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0
ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVn
cyhyZWdUMiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJS
ZWcsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmll
bGRQdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1
Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNjAzLDEz
ICs2NTYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBhdXRvIG9wZXJhdGlvbiA9
IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxk
T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGlu
IHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGdlbi5zdHViSW5m
bygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
NCk7CisgICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25Q
dXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQ
cml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRz
R1BSMywgYXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjc2LDEyIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgZWxzZQotICAgICAg
ICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtNjQ4LDkgKzY5Niw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9
IHJlZ1Q0OwogCkBAIC02ODAsNyArNzI4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRl
cl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTY4OSw3ICs3MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRl
ckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3NDksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX3NldHRlcl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwg
cmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1Qx
LCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwg
cmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3NjAsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZh
bCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNzE5LDcgKzc3MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJv
cGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCBy
ZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJp
YnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRy
aWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3LDIzICs3ODAsMzMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJh
c2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQg
d3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3
cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBj
bG9iYmVycyByZWdpc3RlcnMuCkBAIC03NTksMTUgKzgyMiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRp
bWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVk
SW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC03ODEsMjQgKzg0NiwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRH
UFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9H
UFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5
SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
bkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTg0NSwyMiArOTA1LDMzIEBAIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJv
cGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZh
bFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVu
ZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAg
ICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYg
YSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTU0LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZh
bE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50
R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIz
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQgKzk3MiwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJn
dW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSks
IGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0g
cmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAt
OTYxLDIyICsxMDI5LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsK
IAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZv
R1BSLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2LDE0ICsxMDYzLDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9w
dGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTEwMDMsMjYgKzEwODMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Ry
eV9nZXRfYnlfaWQoY29ucwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIz
OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlk
T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlH
ZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
MDMwLDIyICsxMTA0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29u
c3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGUtPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
cmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5m
b0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiArMTEz
NywxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9w
dGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5
SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwNzMsODMgKzExNTgsNjEgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
LCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOwotICAgIGVsc2UKLSAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91
bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlkZW50ID09IG1f
dm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAg
ICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsICZtZXRhZGF0YS5tX21vZGVNZXRh
ZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCByZWdUMSk7CisgICAgICAgIGxvYWQ4
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVN
ZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlKCksIHNjcmF0Y2hH
UFIpOworICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWws
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9k
ZTo6QXJyYXlMZW5ndGgpKSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSAr
IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwg
YmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRo
aXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxLCB0aGlzVlJlZyk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCi0g
ICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0
UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAt
MTE1OCwxNiArMTIyMSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50
R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMTc3LDI2ICsxMjQyLDU4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFIzOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhU
aGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhU
aGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBi
YXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisKKyAgICBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSwgc3R1YkluZm9HUFIpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlJZFdpdGhUaGlzOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhp
cy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
c3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyNDEsMTYgKzEzMzgsMTkgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJh
dGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3RoaXNWYWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBy
ZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI5ICsxMzYwLDIzIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2Uu
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAg
c3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09w
dGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0
QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0KKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9cwogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJiB2bSkKQEAgLTEzMjks
MjMgKzE0MjMsMzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVj
dCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFi
bGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdl
IHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBo
YXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2Vu
ZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBh
bHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6
dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0g
QmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBz
dHViSW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJl
Y3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
UHV0QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVj
dCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9k
ZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeUlkcy5hcHBlbmQo
Z2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsxNDY3LDE4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAgICAKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92
YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1
bmN0aW9uKCksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEzNzYsMjUgKzE0ODgsMTkgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4K
LSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVl
R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBl
bmRDYWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtMTQ0MSwyMCArMTU0NywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9i
eV9pZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBi
YXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZS
ZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZv
R1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkluQnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpA
QCAtMTQ2MywxNCArMTU4MCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29u
c3QgSW5zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsr
XTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjAwLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
Ly8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5
IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBh
IGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2MjQsMzMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NTksMTggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlW
YWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5
VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTU2LDUxICsxNjgxLDU2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxl
R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAh
aXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BS
MSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5C
eVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAg
IC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0
bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5n
IGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZh
bE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
SW5CeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9y
QnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUs
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1
YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlw
ZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQ
cml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJ
VDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKICAg
ICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiAKQEAgLTE2MDgsNyArMTczOCwxMSBAQCB2b2lk
IEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1l
ID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVC
cmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0
aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTE2MTgsMjcgKzE3NTIsMjEgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRl
U2xvdyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IHJlZ1QxOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5T3JCcmFuZEdQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpLCBkZWNsdHlw
ZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gdHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX25hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NTIsNyArMTc4MCw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKGMKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUu
bV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNs
b3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hh
c19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xNjY2LDE5ICsxNzk0LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9i
cmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhh
c1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQp
OworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNl
LCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rp
b25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0
cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92
YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2ODgsNiArMTgxOSw3IEBAIHZv
aWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3MDEsNyArMTgzMyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDEpOwogICAgICAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1Qx
KTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4NDcsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CiAgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3OTQs
NTkgKzE5MjYsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgog
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlv
bik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVz
b2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRo
ZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVu
dmlyb25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVz
b2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDAp
OwogICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVC
bG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZf
dCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5l
cmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmsoQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENs
b3N1cmVWYXIiKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICAgICAgcmV0dXJu
IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MiKTsKKyAgICAgICAgfTsKIAotI2RlZmluZSBSRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5l
cmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10g
PSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVTT0xWRV9TQ09QRV9HRU5F
UkFUT1IpCisgICAgICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvciA9IFtdIChW
TSYpIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVu
ayhzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7CiAg
ICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBjb25z
dGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwg
bWV0YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
KworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7Cisg
ICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAg
ICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxz
ZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29k
ZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAg
IGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9
CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmso
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3Bl
VGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIq
IHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rp
b24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAg
ICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBi
ZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9G
VEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMs
IHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2Nv
cGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsg
Ly8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGlu
Y29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAv
LyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZz
ZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUo
cmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0
dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRh
ZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1Qz
LCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIApAQCAtMTg1NSwyNiAr
MjAwNSwyNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQ
UlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92
YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9m
ZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAK
ICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykgewogICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxT
Y29wZURlcHRoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsK
KyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAgICBMYWJlbCBs
b29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRv
bmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAgewotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAg
ICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICAg
ICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICAgICAgaml0Lmp1
bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENv
ZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEyICsyMDMyLDEy
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JD
b2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7
Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9i
amVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7
CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Mo
Z2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgaml0Lm1vdmUoZ2xvYmFsT2JqZWN0
R1BSLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xODk3LDEx
ICsyMDQ3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAg
ICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhciosCiAgICAgICAgICAgICAvLyBh
bmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkg
Zm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBy
ZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykK
LSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0Ojpv
ZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkds
b2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsyMDU5LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1p
dFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMjA2OSw0NSBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0g
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlm
IChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0g
Q2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsK
LQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUmVzb2x2ZVR5cGUoKSksIHJlZ1QwKTsK
IAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAg
ICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CisgICAg
ICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
KTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAg
ICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7CisgICAgICAgIGVt
aXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZh
cik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7
CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICBk
ZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1
bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3Bf
cmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwg
Q29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNl
LCBDb2RlTG9jYXRpb25MYWJlbCh2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNk
ZWZpbmUgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8j
I3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNv
bnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0g
ICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAg
IHJldHVybiBqaXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFz
ZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VB
Q0hfUkVTT0xWRV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBE
RUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0p
CiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5
IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1h
a2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxh
YmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxp
bmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkg
bm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZt
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5
IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwNjUsNiAr
MjE3Nyw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29w
ZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0yMTc4LDcg
KzIyOTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yMTg2LDkgKzIyOTksOSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdl
dEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0
RnJvbVNjb3BlLCBkc3QsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAog
I2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yMTk2LDQxICsyMzA5LDUwIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9t
U2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBS
ZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9
PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCisgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZN
JikgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoQ2xv
c3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAg
fTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3Ig
PSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayhDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRf
ZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gZ2VuZXJpY0dldEZy
b21TY29wZUdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJh
dGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9nZXRfZnJv
bV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRh
dGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCi0gICAgaWYg
KHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRyX3QqIG9wZXJhbmRT
bG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsK
LSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9w
ZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRh
ZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRh
KTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5t
ZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgR0VU
X0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9zY29wZV8jI3Jl
c29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoR0VU
X0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdFVF9GUk9NX1NDT1BF
X0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7Ci0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNb
cmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0KKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYgKHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIo
Y2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgY29kZSA9IHZtLmdl
dENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAg
IGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZyb21TY29wZUdl
bmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29w
ZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZy
b21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlz
IGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVj
YXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KQEAgLTIy
MzksNzcgKzIzNjEsNjggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcEdl
dEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAg
IENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxl
KCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFi
bGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAg
ICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hl
Y2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJfdCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNl
dCkgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0
dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBhdXRv
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIpIHsKKyAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9m
U3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7
CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkp
OworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpKTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0g
KGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdU
Myk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xv
YmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
KyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2lu
dCkpLCByZWdUMyk7CiAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Q
b2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0
cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBv
aW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRy
KHJlZywgcmVnKTsKLSAgICB9OwotCiAgICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAo
R1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgewogICAgICAgICBzdGF0aWNfYXNz
ZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5k
R1BSKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmly
b25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworICAgICAgICBqaXQubHNoaWZ0
NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmFkZFB0cihzY29w
ZUdQUiwgb3BlcmFuZEdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQ
UiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CiAg
ICAgfTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
LCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZd
IChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVj
dHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2Ug
ZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3Qu
IEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFy
IGluamVjdGlvbi4KKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3Bl
R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRv
bid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBB
ZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBp
bmplY3Rpb24uCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwog
ICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKICAgICAgICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7CiAgICAgICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKIAotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExh
bWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFs
LCBiYXNlLCByZWdUMyk7CisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxK
dW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRy
KEVxdWFsLCBiYXNlLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29w
ZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIG9mZnNldCk7CiAgICAgICAgICAg
ICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5l
ID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJz
dE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRP
ZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0
aGlzKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdy
ZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90
T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsK
LSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAg
ICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RP
dXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5uZWczMihvZmZzZXQpOworICAg
ICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
OgpAQCAtMjMxNywyMSArMjQzMCwxOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwot
ICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAg
ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1p
dEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwg
cmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0
YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpv
ZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsKICAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFy
KHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5h
bWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM0
MSw3OSArMjQ1Miw1NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dElu
Zm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1
bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxz
ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEds
b2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxp
bmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29s
dmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9
IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykp
LCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0
cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGppdC5sb2Fk
MzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwg
cmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1w
IGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0
eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxW
YXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFy
KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAg
ICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFBy
b3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5s
aW5rKCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluaygmaml0
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgICAgIHNraXBUb0Vu
ZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAg
ICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKKyAgICAg
ICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1
ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsK
KyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9m
ZnNldE9mUHJvZmlsZSgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5r
TmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNv
bHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9w
X2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7
IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShy
ZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGpp
dCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmso
cmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUp
OyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9H
RU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9z
Y29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0
aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQg
YmVjYXVzZQpAQCAtMjQ3MSw4NiArMjU1OSw3OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAg
IHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0
V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAg
bG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJl
Z1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlm
eVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNh
bEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdp
c3RlcikpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZv
KGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVz
b2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9z
dHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0
Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7
CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1
cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdl
IGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0
LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZh
ciBpbmplY3Rpb24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBp
bmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0
IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVf
c2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Om9mZnNldE9mU3Ry
dWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywg
cmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+
KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAg
ICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwog
Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1Qx
KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BQdXRUb1Njb3BlOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwogICAgICAgICAg
ICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAg
ICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWln
aHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkp
OworICAgICAgICAgICAgLy8gT09QUzogd291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0
aGF0IHRvb2sgR1BSUmVncyBpbnN0ZWFkIG9mIFZScworICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczog
ewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50
U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAg
ICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0gICAgICAgICAgICBpZiAo
IWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisgICAgICAgICAgICBlbWl0VmFyUmVh
ZE9ubHlDaGVjayhyZXNvbHZlVHlwZSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJh
bmQoKSwgcmVnVDApOworCisgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNv
ZGUubV9nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEg
VERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBl
bWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KLSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCksIHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0
R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xv
dCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFs
dWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsK
KyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDEpOworCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBz
dG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdv
dWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciB2YWx1
ZS4KKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFJl
c29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0
YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0
KCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CisgICAgICAg
ICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJh
c2VJbmRleChyZWdUMCwgcmVnVDIsIFNjYWxlRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxkIGJlIG5p
Y2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciBvd25lci92YWx1ZS4K
ICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0y
NTY0LDU4ICsyNjQ1LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnMKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBp
bnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2Jh
bExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBh
IHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAgICAgICBp
c0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsK
LSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKKyAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1cmVWYXIvIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21waWxlIHRoaW5n
cworICAgIC8vIHRoYXQgd2F5IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2UndmUgcHJvdmVu
IHRoYXQgaXMgdGhlIHR5cGUgd2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJlVmFyLAorICAg
IC8vIGFsbCBDb2RlQmxvY2tzIHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUgQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFyCisgICAgLy8g
aWYgdGhlIHZhciBpbmplY3Rpb24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYgaXQgaXMgZmly
ZWQsIHRoZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0CisgICAgLy8gbWF0
dGVyIHdoYXQgdHlwZSB3ZSBhcmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcik7CisgICAg
ZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIpCisgICAg
ICAgIGVtaXRDb2RlKFJlc29sdmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAg
ZW1pdENvZGUoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVsc2Ugewog
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1QwKTsKICAg
ICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAv
LyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkp
OwogICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCisg
ICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmso
dGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0
cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRo
aXMpOwogCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAogICAgICAg
ICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJl
YWs7CiAgICAgfQogfQogCkBAIC0yNjI0LDE4ICsyNjk5LDIxIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigp
OwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29k
ZSkucmVzb2x2ZVR5cGUoKTsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7Cisg
ICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGlmIChw
cm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJZiBhbnkgbGlu
a2VkIENvZGVCbG9jayBzYXcgYSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBDb2RlQmxvY2tz
IGFyZSBndWFyYW50ZWVkCisgICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZhci4KICAgICAg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJv
cik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
VG9TY29wZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJndW1lbnRHUFIw
LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CiAgICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBt
X2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBBU1NF
UlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09
IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CkBAIC0yNzAxLDcgKzI3NzksNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhy
ZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyODM3LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1f
aW5kZXg7CkBAIC0yNzY3LDcgKzI4NDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJu
YWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9m
ZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApA
QCAtMjc4OSw3ICsyODY2LDYgQEAgdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bDxPcAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUu
bV9tb2RlOwpAQCAtMjgwNSw3ICsyODgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlz
IGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBj
YXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRhZGF0YS5t
X2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVj
dHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25T
dHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7
CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMih+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1
cmVNb2RlKSkpOwpAQCAtMjg0Nyw3OCArMjkyMyw4NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIg
PSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVy
YXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxp
bmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2Ny
YXRjaDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG1vZGUsIHNjcmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5TmFtZSwgcHJvcGVydHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJl
c3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRh
dGEoKSwgc2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9y
ZThUb01ldGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7
CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KLSAgICBKdW1w
IGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBpc05vdE93blN0cnVj
dHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAg
SnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVz
cyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNl
dCgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7
CisgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RF
cXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zm
c2V0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8gSWYgaW5kZXggaXMg
bGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0
J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1wIG91dE9mTGluZUFj
Y2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkp
OworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CisgICAgbG9hZDY0
KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1
bXAoKSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91dE9mTGlu
ZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJl
Z1QzKTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJl
Z1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDIp
OworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwg
c2NyYXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkg
PSBvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBzdGF0aWNfY2FzdDxp
bnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChy
ZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQ
Uik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwg
b2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5k
KGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOwotICAgIHN0b3Jl
OChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0
dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRh
KTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCBieXRlY29k
ZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAog
ICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNOb3RJbmRl
eGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJh
bmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3aXRoIHRo
ZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAgICAgaXNOb3RJ
bmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAg
ICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjkyNywxMCArMzAxMSw5IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2Uo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9
CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0
aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRl
Y29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVt
aXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5
cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjkzOSw3
ICszMDIyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwg
cmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1l
cmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29k
ZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBv
cjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUs
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAtMzAy
OCw2ICszMTEzLDEzIEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIK
ICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNo
R1BSKG93bmVyKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5saW5rKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJ
KHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDMsNyArMTU0Myw3IEBAIHN0YXRpYyB2b2lkIHJldmVy
dENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERp
c2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhT
dGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVu
bGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAg
IAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkK
QEAgLTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBP
cEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9w
ZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2Rl
U3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAg
ICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlw
ZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0
MikKICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2Nm
ciwgdDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHBy
ZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0
MSwgc3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAg
ICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRl
QXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFBy
b2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlz
cGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJv
ZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRh
ZGF0YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVn
YXRlU3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAg
IG5lZ2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVw
ZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykK
ICAgICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEg
dDEsIExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAg
ICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5
QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICBy
ZXR1cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVu
ZCkKIAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3Qs
IGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BX
aXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2Zp
bGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAg
IGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikK
ICAgICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFy
eU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAu
b3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAg
ICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlB
cml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAg
ICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQz
LCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEy
NCwxMiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAg
IGJpYSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9w
MU5vdEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAg
ICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUs
IHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkK
ICAgICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAg
ICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRh
dGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1i
ZXIsIHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEp
CiAgICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFu
ZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkg
bm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywg
LnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAg
ICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50
TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEs
IHQzLCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20JKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEzIEBA
IG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMsIGEx
CiAgICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRweiBy
MCwgLnJlY292ZXIKLQogICAgICAgICAgICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAgIyBC
YXNlbGluZSB1c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQgcG9v
bC4KKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAgbG9h
ZHAgQ29kZUJsb2NrOjptX2ppdERhdGFbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJs
b2NrOjpKSVREYXRhOjptX2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAgIGlm
IEFSTTY0RQogICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6
b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50cnkp
ICogUHRyU2l6ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRl
UHRyVGFnICMgSlNFbnRyeVB0clRhZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVxdWFs
aXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwg
b3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlw
ZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJp
dGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0K
ICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0
MQogICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNybyBw
cmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRp
b24odDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEg
dDEsIFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxl
SW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRo
UHJvZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAg
LTExMzQsMTEgKzExMzUsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdh
dGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVy
bikKLQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlw
ZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxl
OjptX2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBA
IC0xMTQ2LDEyICsxMTQyLDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5l
Z2F0ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0
MwogICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJv
ZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9m
aWxlSW50LCB0MSwgdDQpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0
cXogdDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAw
MDAwLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAg
dXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEs
IHQ0KQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNjAs
NiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0
MCkKIAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQog
ICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNp
emUsIHQwLCB0MSkKQEAgLTExNzcsNyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3Rv
cmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdl
ck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUo
QXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bj
b2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0NCkKICAgICAgICAgZGlzcGF0Y2go
KQogCiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmluYXJ5
T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcs
IC5zbG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEK
LSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJl
ciwgdDUsIHQ0KQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9w
MkludDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVw
ZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlcklu
dCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5Ogog
ICAgICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNiw3ICsxMTk4LDcgQEAgbWFjcm8gYmluYXJ5
T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMg
ZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAg
IGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKLSAgICAg
ICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQog
ICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAg
ICBmcTJkIHQxLCBmdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMjQ5OCw2ICsyNDk4LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBl
bmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUs
IG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0
eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBX
ZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdF
QkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFu
ZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgxNzE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigp
ID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVh
YmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJs
b2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRl
bnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwg
VW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlw
ZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGlu
ZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVk
U3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBj
cmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRl
bnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9u
IDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50
aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29k
ZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9j
a1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJs
b2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBD
YWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hl
YWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJ
ZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDI4MTcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBK
U0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkK
IHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6
TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewot
ICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7
CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQu
aXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAy
ODE3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUg
cHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0
aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437060</attachid>
            <date>2021-09-01 13:15:56 -0700</date>
            <delta_ts>2021-09-01 16:29:10 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>385833</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91
cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZh
bHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5
SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5z
aWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVu
YXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAko
cmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4
IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0
dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludElu
ZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0
ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAg
c3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOwor
ICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAg
ICAgIHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29k
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpm
YXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IHVubGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxp
bmtlZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRp
b24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5h
dGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFn
Z2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXRE
aXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0g
ICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRo
U3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhT
dGFydCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlz
IGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQg
dG8gYSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0
aHJvdWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJz
OjpwYXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAg
IHVuaW9uIFVuaW9uVHlwZSB7CkBAIC00MjQsNiArNDI0LDEzIEBAIGlubGluZSBDb2RlT3JpZ2lu
IGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmln
aW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBz
byB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZm
bGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNyArMzcw
LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2Fu
J3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJv
Y2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJv
ZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5l
c3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2Yg
YW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhl
IGxpdmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNp
ZGUgVW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBi
ZXR3ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhl
IGJ5dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5n
IGFuIFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9j
ayogdW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CkBAIC00NjYsNiAr
NDY3LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAg
ICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9G
SUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtl
ZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAg
ICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gbV91bmxpbmtl
ZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAg
ICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5z
dHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4LDE0ICs1NDIsMTQgQEAgYm9vbCBD
b2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRl
UHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5L
KE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAg
ICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJ
bmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9w
TXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5L
X1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC03ODksNiArODAz
LDc2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbkNvbW1vbihWTSYKICAgICBtX293
bmVyRWRnZS5zZXQodm0sIHRoaXMsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmNyZWF0ZSh2
bSwgdGhpcykpOwogfQogCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNlbGlu
ZUNvZGUoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRDb2Rl
KGppdENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0Q29k
ZU1hcCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFuZGxl
ckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5hdGl2
ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJl
dGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FTU0VSVCghbV9qaXREYXRhKTsKKyAgICBhdXRvIGppdERhdGEgPSBtYWtlVW5p
cXVlPEpJVERhdGE+KCk7CisKKyAgICBqaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVk
VmVjdG9yPHZvaWQqPihqaXRDb2RlLm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBqaXRDb2RlLm1fY29uc3RhbnRQb29sLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGF1dG8mIGVudHJ5ID0gaml0Q29kZS5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAg
ICAgc3dpdGNoIChlbnRyeS50eXBlKSB7CisgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpHbG9iYWxPYmplY3Q6CisgICAgICAgICAgICBqaXREYXRhLT5tX2ppdENvbnN0YW50UG9v
bFtpXSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAgICAgICAg
IFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9ICpzdGF0aWNfY2Fz
dDxVbmxpbmtlZENhbGxMaW5rSW5mbyo+KGVudHJ5LnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAg
IENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0RGF0YS0+bV9jYWxsTGlua0luZm9zLmFk
ZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAg
ICAgICAgIC8vIE9PUFM6IGRvbid0IGhhcmRjb2RlIHRoZXNlIHJlZ2lzdGVycyBsaWtlIHRoaXMu
CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmluaXRpYWxpemVEYXRhSUModm0oKSwgKnVubGlu
a2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIpOworICAgICAg
ICAgICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2xbaV0gPSBjYWxsTGlua0luZm87CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKKyAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyo+KGVudHJ5LnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IGppdERhdGEubV9zdHViSW5mb3MtPmFkZCh1bmxpbmtlZFN0dWJJ
bmZvLmFjY2Vzc1R5cGUsIENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4
KSk7CisgICAgICAgICAgICBzdHViSW5mby0+aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKHRoaXMsIHVubGlua2VkU3R1YkluZm8pOworICAgICAgICAgICAgaml0RGF0YS0+
bV9qaXRDb25zdGFudFBvb2xbaV0gPSBzdHViSW5mbzsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
ZW50cnkudmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBv
b2xbaV0gPSBmdW5jdGlvbkRlY2woaW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwcjogewor
ICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRy
eS52YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBqaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbFtp
XSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBtX2ppdERhdGEgPSBX
VEZNb3ZlKGppdERhdGEpOworICAgIH0KKworICAgIHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAg
IGNhc2UgR2xvYmFsQ29kZToKKyAgICBjYXNlIE1vZHVsZUNvZGU6CisgICAgY2FzZSBFdmFsQ29k
ZToKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxy
ZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUg
Y2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KKyAgICAg
ICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCgp
KSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24odGhpcyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKwogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsK
QEAgLTMwNzksNyArMzE2Myw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNv
dW50KCkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoK
LSAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAg
ICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxv
Y2soKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAt
MzI5NSwxMyArMzM3OSwxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5
QXJpCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgot
ICAgICAgICByZXR1cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJv
ZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BN
dWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+
YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9z
dWI6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJp
dGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMp
Lm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5h
czxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJu
IHBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZh
dWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMzEzLDExICszMzk3LDExIEBAIFVuYXJ5
QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5v
cGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFz
PE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAg
IGNhc2Ugb3BfaW5jOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0
aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0
dXJuICZwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAg
ICAgIHJldHVybiBwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjgxODY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBu
dW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRl
OgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6
CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAg
ICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXND
aGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBh
ZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2Nr
KiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1f
YWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoKICAgICBi
b29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0
YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZp
cnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRk
aW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBp
cyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXND
b25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7
Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAg
ICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAg
LTI2Niw4ICsyNTcsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0
dXNNYXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3Zl
IGFyaXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLCBhbmQgb250byBK
SVRDb2RlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZB
U1RfQUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogCiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgICAg
IEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CkBAIC0yODIsOSArMjc1LDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2lu
TWFwOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAg
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAg
ICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+
IG1faml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklU
Q29uc3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29u
c3RhbnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxp
bmVDb2RlKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJ
VERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBp
ZiAoTElLRUxZKG1faml0RGF0YSkpCkBAIC0yOTMsNiArMjkwLDggQEAgcHVibGljOgogICAgIH0K
ICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
KTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVREYXRhKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9qaXREYXRhKTsgfQorCiAgICAgSklUQWRkSUMqIGFk
ZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwogICAgIEpJVE11bElDKiBhZGRKSVRNdWxJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlB
cml0aFByb2ZpbGUqKTsKQEAgLTMyMiwxNSArMzIxLDEwIEBAIHB1YmxpYzoKICAgICAvLyBsb29r
aW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5n
IHRoaXMuCiAgICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4
KEJ5dGVjb2RlSW5kZXgpOwogICAgIAotICAgIHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFw
JiYgaml0Q29kZU1hcCkKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKLSAgICAgICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcCA9IFdU
Rk1vdmUoaml0Q29kZU1hcCk7Ci0gICAgfQogICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVN
YXAoKQogICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwot
ICAgICAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcDsKKyAgICAg
ICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2pp
dENvZGVNYXA7CiAgICAgfQogCiAgICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVu
aXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOwpAQCAtNDcyLDYgKzQ2Niw3IEBAIHB1Ymxp
YzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0K
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01
NzIsNiArNTY3LDcgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25z
dGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0
ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oaW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJl
Z2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhd
LmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVu
Y3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTYwMSw2ICs1OTcsMTEgQEAgcHVibGljOgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwogICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5t
X3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgfQorICAgIFNpbXBsZUp1bXBUYWJs
ZSYgYmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCisgICAgeworICAgICAg
ICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVt
YmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOyB9CkBAIC02MTEsNiArNjEyLDExIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9qaXREYXRhKTsKICAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIH0KKyAgICBTdHJpbmdKdW1wVGFibGUm
IGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgfQogI2VuZGlmCiAgICAg
c2l6ZV90IG51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNzk3LDYg
KzgwMyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0
IHsgcmV0dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVz
dHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVh
a3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9p
bnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCkBAIC04MzgsNiArODQ1LDcgQEAgcHVibGljOgog
ICAgIG11dGFibGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMg
dG8gc3RvcmUgdG8gaXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5
c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2Nh
cGFiaWxpdHlMZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNiwx
MSArOTE0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0
YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7
IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9p
bnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlS
ZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8g
YWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3Vu
bGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHBy
b3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNzAsNiArNzAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2UqIHdyYXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwogICAgIAogICAgIHN0YXRpYyBFeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwQW5kQWN0aXZhdGUoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spOworCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLCBtX2NvZGVCbG9jayk7
IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1l
dGFkYXRhLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBz
dGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhCiAKIHN0cnVjdCBHZXRCeUlk
TW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggewogICAgIEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGU7
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmls
ZSk7IH0KIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlM
ZW5ndGgpID09IDEyKTsKIApAQCAtODgsNiArODksNyBAQCB1bmlvbiBHZXRCeUlkTW9kZU1ldGFk
YXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUgbW9kZTsKICAgICAgICAgdWludDhfdCBoaXRDb3Vu
dEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBtdXN0IGJlIHplcm8gd2hlbiB3ZSB1c2UgUHJvdG9M
b2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhLCBtb2RlKTsgfQogICAg
IEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0IGRlZmF1bHRNb2RlOwogICAgIEdldEJ5SWRNb2Rl
TWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVu
Z3RoIGFycmF5TGVuZ3RoTW9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzg1LDYgKzM4NSw4IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcygK
ICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAorLy8gT09QUzogTWFrZSB0aGlzIHN0
dWZmIHdvcmsgd2l0aCBkYXRhIGljcyB0byBub3QgYXNzdW1lIGlubGluZSBhY2Nlc3MuCisKIHZv
aWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFj
Y2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFyZ2V0KQogewogICAgIGlm
IChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CkBAIC00MDQsOSArNDA2LDEyIEBAIHZvaWQgSW5s
aW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHRh
cmdldCkKIHsKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBP
T1BTOiBtYWtlIHNvbWUgdmVyc2lvbiBvZiBJbmxpbmVBY2Nlc3MgZm9yIGJhc2VsaW5lLiBQZXJo
YXBzIG1ha2UgaXQgZGF0YSBkcml2ZW4uIE9yIHBlcmhhcHMgaGF2ZSB0aGUgY29kZQorICAgICAg
ICAvLyBiZSBzaGFyZWQgc29tZWhvdyBiZXR3ZWVuIFVubGlua2VkQ29kZUJsb2Nrcy4KKwogICAg
ICAgICAvLyBJZiBpdCBpcyBub3QgR2V0QnlJZC1saWtlLXRoaW5nLCB3ZSBkbyBub3QgZW1pdCBu
b3Agc2xlZCAoZS5nLiBHZXRCeVZhbCkuCiAgICAgICAgIC8vIFRoZSBjb2RlIGlzIGFscmVhZHkg
YW4gaW5kaXJlY3QganVtcCwgYW5kIG9ubHkgdGhpbmcgd2Ugc2hvdWxkIGRvIGlzIHJlcGxhY2lu
ZyBtX2NvZGVQdHIuCi0gICAgICAgIGlmIChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIp
IHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5l
SklUICYmIHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikgewogICAgICAgICAgICAgLy8g
SWYgbV9jb2RlUHRyIGlzIHBvaW50aW5nIHRvIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlv
biwgdGhpcyBtZWFucyB0aGF0IElubGluZUFjY2VzcyBjb2RlIGlzIG5vdCBhIHN0dWIgb25lLgog
ICAgICAgICAgICAgLy8gV2UgcmV3cml0ZSB0aGlzIHdpdGggdGhlIHN0dWItYmFzZWQgZGlzcGF0
Y2hpbmcgY29kZSBvbmNlLCBhbmQgY29udGludWUgdXNpbmcgaXQgdW50aWwgd2UgcmVzZXQgdGhl
IGNvZGUuCiAgICAgICAgICAgICBpZiAoc3R1YkluZm8ubV9jb2RlUHRyLmV4ZWN1dGFibGVBZGRy
ZXNzKCkgPT0gc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCkpIHsKQEAgLTQyMSw2ICs0MjYsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nlc3M6IGxpbmtpbmcgc3R1
YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBzdHViSW5mby5t
X2NvZGVQdHIgPSB0YXJnZXQ7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0
YS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAg
T1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBUwogCiBzdHJ1Y3QgSXRlcmF0
aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90IHNlZW5Nb2RlcyB7IDAgfTsKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1vZGVzKTsgfSAKICAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9PSBzaXplb2YoSXRlcmF0aW9uTW9kZSkpOwog
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODUsNiArMjg1LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwog
ICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ss
ICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nl
c3NUeXBlOjpJbkJ5SWQ6CkBAIC00MzAsNiArNDMxLDIwNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9
CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byYgdW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBlID0gdW5saW5rZWRTdHViSW5m
by5hY2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHViSW5mby5zdGFydDsgLy8gT09Q
UzogZG8gd2UgbmVlZCBhIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBkb25lTG9jYXRpb24gPSB1
bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93UGF0aFN0YXJ0TG9jYXRpb24g
PSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKyAgICBjYWxsU2l0ZUlu
ZGV4ID0gQ2FsbFNpdGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAg
IGNvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7
CisgICAgbV9jb2RlUHRyID0gc2xvd1BhdGhTdGFydExvY2F0aW9uOworCisgICAgdXNlZFJlZ2lz
dGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICBpZiAo
YWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpHZXRCeUlkICYmIHVubGlua2VkU3R1YkluZm8uYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9yX25leHQs
IHdlIGNhbid0IGNsb2JiZXIgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgZWl0aGVyLgorICAgICAgICB1
c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gpOworICAg
IH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVs
ZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsQnlJZDoK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlb2Y6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1bmxp
bmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6
CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQor
ICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5r
ZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0
aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gb3BlcmF0aW9uUHV0
QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoK
KyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5l
Y21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0
KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IHByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVm
aW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVs
ZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZh
dGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJy
YW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQ
cml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAo
YWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxp
bmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJh
c2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJh
c2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9
IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkRlbEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmll
ciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2
YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0
dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxz
ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZW9m
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgcHJvdG90
eXBlSXNLbm93bk9iamVjdCA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAg
ICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJh
c2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIg
PSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BS
ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRC
eUlkRGlyZWN0OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgor
ICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBtX3N0dWJJbmZv
LT5iYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAg
ICAgIG1fc3R1YkluZm8tPnZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvLT5yZWdzLnRoaXNHUFIgPSBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJbmZvLT5t
X3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IElu
dmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1
ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNz
VHlwZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2
YXRlQnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAg
ICB2YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86
OmNoZWNrQ29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7
CiAgICAgR2V0QnlWYWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2
YXRlTmFtZSwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwK
QEAgLTc4LDYgKzc5LDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0
cmluZ0xlbmd0aAogfTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1
cmVTdHViSW5mbyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDEs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwog
CisgICAgdm9pZCBpbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJs
b2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9B
R0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2Vz
IHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTQ0
Nyw2ICs0NTIsMTggQEAgaW5saW5lIGF1dG8gYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bgog
ICAgIH0KIH0KIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8geworICAgIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQ7CisgICAgUHJpdmF0ZUZpZWxk
UHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kOworICAgIEVDTUFNb2RlIGVjbWFNb2RlOworICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAvLyBPT1BTOiBEbyB3ZSBuZWVkIHN0
YXJ0IGZvciBkYXRhIElDcz8KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElD
IGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3Ig
J2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVj
dHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Miw2ICs2Miw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xh
c3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGluZUpJVENvZGU7CiBz
dHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29uc3RhbnQgOiBpbnQz
Ml90OwogCkBAIC0xNzUsNiArMTc2LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4ZWRWZWN0
b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBt
X2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBj
b25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgp
OyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIwOSwxNSBAQCBwdWJsaWM6CiAg
ICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVybiBp
bnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBjb25z
dCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigpOwor
ICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9u
c0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1
Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVn
aW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25zdCB7IHJldHVy
biBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51bUNhbGxlZUxvY2Fs
cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5zaWduZWQgbnVt
VmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDYgKzM0NSwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpOwogICAgIH0K
IAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQor
ICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNv
bXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFpc0J1aWx0aW5GdW5j
dGlvbigpOworICAgIH0KIAogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwg
U3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENv
ZGVHZW5lcmF0aW9uTW9kZT4pOwpAQCAtMzk0LDYgKzQxMCw3IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVu
dEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJh
c2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07
CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEwLDYgKzQyNywxMCBAQCBw
cml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVj
dGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9s
aXZlbmVzczsKIAorICAgIC8vIE9PUFM6IGJpbmQgYSBiZXR0ZXIgcGxhY2UgdG8gc3RvcmUgdGhp
cyBzdHVmZj8KKyAgICBWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPiBtX2JpbmFyeUFyaXRoUHJv
ZmlsZXM7CisgICAgVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxl
czsKKwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQ
cm9maWxlOwpAQCAtNDU1LDYgKzQ3NiwyOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAg
IGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMp
OworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChvZmZzZXQpOworICAgIH0KKwor
ICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNp
Z25lZCByZXN1bHQgPSBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX2Jp
bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmls
ZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3VuYXJ5QXJpdGhQcm9maWxl
cy5zaXplKCk7CisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5hcnlBcml0
aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQmluYXJ5
QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1cm4gbV9i
aW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHVuYXJ5QXJp
dGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9
CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPElu
c3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZpc2lv
biAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRh
ZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw5ICsxMDEsMTggQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2lu
ZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZzZXRJbk1l
dGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBBU1NFUlQo
bV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9IG1faXMz
MkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRhYmxlMTYo
KVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6
ZW9mKE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9CisKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfb2Zmc2V0VGFibGVFbnRyaWVzID0gTlVNQkVS
X09GX0JZVEVDT0RFX1dJVEhfTUVUQURBVEEgKyAxOyAvLyBvbmUgZXh0cmEgZW50cnkgZm9yIHRo
ZSAiZW5kIiBvZmZzZXQ7CiAKICAgICAvLyBOb3QgdG8gYnJlYWsgYWxpZ25tZW50IG9mIDMyYml0
IG9mZnNldCB0YWJsZSwgd2Ugcm91bmQgdXAgc2l6ZSB3aXRoIHNpemVvZihPZmZzZXQzMikuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShy
ZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQ
cm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAgdGVtcGxhdGU8dW5zaWdu
ZWQgbnVtYmVyT2ZCdWNrZXRzQXJndW1lbgogc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNr
ZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNwZWNG
YWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRl
eE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNG
YWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKQEAgLTEzNCw3ICsxMzMs
NyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIAogICAgICAgICByZXR1cm4g
bV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29kZWRKU1ZhbHVlIG1fYnVja2V0
c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rp
b24geyBTcGVjTm9uZSB9OwpAQCAtMTU2LDYgKzE1NSw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVX
aXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1YmxpYyBWYWx1
ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAgICBWYWx1ZVByb2ZpbGUoKSA6
IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
VmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBzdHJ1Y3QgVmFsdWVQcm9maWxl
QW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OTgsNyAr
MTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnkKICAgICAg
ICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0eXBl
KTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUsIG1fY29kZUJs
b2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBv
cF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90Pihkc3QsIHNyYyk7CkBAIC0x
Njk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VHlw
ZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbmMoUmVnaXN0ZXJJRCog
c3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BJbmM6OmVt
aXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAg
ICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0Rz
dCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlB
cml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODIsNyArNjgyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklEKj4KICAgICAgICAgZW1pdEJp
bmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3Jj
MiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBCaW5hcnlPcDo6
ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAgICAgICAgICAgIEJpbmFyeU9w
OjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1fY29kZUJsb2NrLT5hZGRCaW5h
cnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODg5LDcg
Kzg4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIAogICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAg
ICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxl
ZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywg
WyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEo
c2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBz
aHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MTg2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg5Niw3ICs4OTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0lu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0g
ewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAg
ICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFy
ZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5ODUs
NyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmEKICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwogCiAg
ICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwg
SklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpE
RkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwg
dXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VHUFIp
LCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIEludmFs
aWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CiAKQEAgLTE0NzQ3LDcgKzE0NzQ3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5ncHIoKTsK
IAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
dGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJbmRleCk7Cisg
ICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlz
UmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxv
Y2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lv
biAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMTcsNyArNDMxNyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRM
SklUKSA/IHBhcmFtcy5ncFNjcmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgICAg
ICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAg
ICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFu
dGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAgICAg
ICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3Jp
Z2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAgICAgICAg
ICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZh
bGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1Yklu
Zm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CkBAIC0xMDM1NSw3ICsxMDM1NSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQu
Y29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZv
OjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVn
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0
byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJ
bmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAg
ICAgICAgICAgICAgfSk7CkBAIC0xMDY5OCw3ICsxMDY5OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2Fs
bCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0
aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdU
MCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xv
dygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwOTc5LDcgKzEwOTc5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwog
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAg
IGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlk
R1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAg
ICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQs
IEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJl
Rm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAyODE4Njgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3b3JraW5n
IGNvcHkpCkBAIC00MiwxNyArNDIsMjIgQEAgY2xhc3MgTWV0YWRhdGEKICAgICBkZWYgc3RydWN0
KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNvbnZlcnRGaWVs
ZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmll
bGRzLCBnZW5lcmF0ZU9mZnNldE9mKQogICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8ZmllbGQs
IHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAgICAgICAg
ICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAg
ICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9
dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSwgZmFsc2UpfVxu
I3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAi
I3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAgICAgICAg
ICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
IiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGROYW1lfTsiCisgICAgICAgICAgICAgICAg
ICAgIGlmIGdlbmVyYXRlT2Zmc2V0T2YKKyAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBy
ZXN1bHQgKyAiXG4iICsgInN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51
cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJldHVybiBPRkZTRVRPRihNZXRhZGF0YSwgbV8j
e2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0CiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmQuam9pbigi
XG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAg
ICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAg
IiwgQGZpZWxkcywgdHJ1ZSkKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBpZiBAaW5p
dGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODE4Njgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY5OCw4ICs2OTgsMTMgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3Rv
cmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBpbmZvKQog
ewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgZW1p
dFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgaW5mbyk7Cit9CisKK3Zv
aWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2Jq
ZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAg
ICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAg
ICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRD
b21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MTgsNiAr
MTcxOCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZpcnR1
YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOwogICAg
IAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNsYWlt
U3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAs
NyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNvbnN0CiAKIENv
bXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUoKQogewotICAgIENvbXBp
bGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAg
Q29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQobV9j
b2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlvbkZh
aWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklU
Q29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblByb2xvCiAg
ICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBlcnM6
OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVS
ZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRv
d0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9y
ZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNjb3BlLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2spLCBBZGRy
ZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwg
Y29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0
cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1
cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVn
IHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93Q2hpY2tl
biogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODQw
LDcgKzg0MCwxOCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2Ugb3BlcmF0aW9ucyBjbG9iYmVyIGFs
bCB2b2xhdGlsZSByZWdpc3RlcnMuIFRoZXkgYXNzdW1lIHRoYXQgdGhlcmUgaXMgcm9vbSBvbiB0
aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sgdG8gbWFyc2hhbGwgY2FsbCBhcmd1bWVudHMuCiAgICAg
dm9pZCBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwg
R1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NvcGUpOwotICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQ
UlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2Nv
cGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgp
CisgICAgeworICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IGZyYW1lKSkpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46
OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKKyAgICAgICAgc3RvcmVWYWx1
ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICAgICAgc3RvcmVQdHIoc2NvcGUsIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBzY29wZSkpKTsKKyAgICAgICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkp
OworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBjYWxsU2l0ZUluZGV4KSkpOworICAgIH0KKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2lu
dGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAg
ICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0
LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3Bw
CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJl
Z2lzdGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxG
cmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBj
YWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygp
IH07Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9u
cyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAg
IFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
RGF0YS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVi
bGljOgogICAgIEdQUlJlZyBudW1iZXJUYWdSZWdpc3RlciB7IEludmFsaWRHUFJSZWcgfTsKIAog
ICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayopOworICAgIHZvaWQg
c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0Kik7CiAj
ZW5kaWYKICAgICBWYWx1ZVJlY292ZXJ5IGNhbGxlZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQYXRj
aENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgp
Ci0gICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpTSW50ZXJmYWNl
SklUKCZ2bSwgbnVsbHB0cikKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAg
ICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUo
KSA6IDApCiAgICAgLCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAgLTc3LDYgKzc3
LDkgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9z
aG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25z
dGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9i
amVjdCk7CisgICAgbV9wcm9maWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICBtX3VubGlu
a2VkQ29kZUJsb2NrID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogfQogCiBKSVQ6
On5KSVQoKQpAQCAtOTAsOCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9u
Q2hlY2soKQogICAgICAgICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0g
ICAgCi0gICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJ
bW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsK
KyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDAp
OworICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1t
MzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBB
U1NFUlQoIW1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGlu
ZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNiwxOCBAQCB2b2lkIEpJVDo6
ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChO
b3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQ
UlJlZyBwb2ludGVyVG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChH
UFJSZWcgcG9pbnRlclRvU2V0KQogewogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWws
IEFkZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJSZWFk
T25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQordm9pZCBKSVQ6OmVtaXRWYXJSZWFk
T25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsK
LSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgo
RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhclJl
YWRPbmx5V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNo
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFyUmVhZE9ubHlXYXRjaHBv
aW50KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBB
ZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmFzc2VydFN0
YWNrUG9pbnRlck9mZnNldCgpCkBAIC0xMjksNyArMTM1LDcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0
YWNrUG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBy
ZWdUMCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsKQEAgLTE4
MSwyMSArMTg3LDQxIEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWMK
ICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1dENvZGVCbG9j
a1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOworICAgIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVzdWx0
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1
dGFibGVPclJhcmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGJy
YW5jaFRlc3RQdHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1
bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0
aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFU
YWcpLCByZXN1bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3Ry
dWN0KCkpLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3Vs
dCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSksIHJlc3Vs
dCk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlOjpvZmZzZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIocmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworfQorCiB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQotICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsK
KyAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4i
KTsKICAgICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3Vt
ZW50Q291bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3Ry
dWN0aW9uQ291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7
CiAKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJs
b2NrLT52bSgpOworICAgIFZNJiB2bSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnZtKCk7CiAgICAg
Qnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7CisKKyAgICAvLyBPT1BTOiBNYXli
ZSBvbmx5IGRvIHRoaXMgaWYgd2UgZGlzYWJsZSBzaGFyaW5nIHNvbWVob3c/CisgICAgLyoKICAg
ICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4ICYmIChtX2NvZGVCbG9jay0+aW5oZXJp
dHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0czxNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7CiAgICAgICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMg
b3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFtQ29kZUJsb2NrJ3MgZXhhY3Rs
eSBvbmNlLgogICAgICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBiZSBpbnZhbGlkIG90
aGVyd2lzZS4gV2hlbiB0aGUgTExJbnQgZGV0ZXJtaW5lcyBpdCB3YW50cyB0bwpAQCAtMjM2LDYg
KzI2Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KKyAgICAqLwogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5n
U2xvd0Nhc2UgPSAwOwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgw
KTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CkBAIC0y
NzgsOSArMzA1LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwog
ICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigp
KSkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAg
ICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7Ci0gICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVO
YW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29k
ZUJsb2NrKTsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxD
YWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJ
VCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIg
IiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjdHguZ3ByPENvZGVCbG9jayo+KHJlZ1Qw
KSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCkBAIC01MjcsNyArNTU0LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4
IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5
dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRl
Y29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVy
Ym9zZSkKICAgICAgICAgICAgIGRhdGFMb2dMbigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cg
Y29kZSBmb3IgIiwgbV9ieXRlY29kZUluZGV4LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09m
ZnNldCgpKTsKQEAgLTU0NSw4ICs1NzIsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMoKQogCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklU
RXhlY3V0aW9uKCkpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRl
eHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZw
PENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigi
SklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gU0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0s
ICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAg
ICAgICAgIH0pOwogICAgICAgICB9CkBAIC02NzQsNTUgKzcwMSw1NiBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKK3ZvaWQgSklUOjplbWl0TWF0ZXJp
YWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpCit7CisgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21l
dGFkYXRhR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0
T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7
Cit9CisKK3ZvaWQgSklUOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCkKK3sKKyAgICBCYXNlOjpl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNl
bGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKIHZvaWQgSklUOjpjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBE
Rkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwo
KTsKKyAgICAvLyBPT1BTOiBNYXliZSB0aGlzIHNob3VsZCBiZSBkb25lIG9uIHVubGlua2VkIGNv
ZGUgYmxvY2s/CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2Fz
ZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsK
LSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3No
b3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6
OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAg
IG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxp
bmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAgIHN3aXRjaCAobV9jb2RlQmxv
Y2stPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1bGVD
b2RlOgotICAgIGNhc2UgRXZhbENvZGU6Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0aW9u
Q29kZToKLSAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBi
ZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgotICAgICAgICAvLyBEb24n
dCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91
bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5saW5l
RnVuY3Rpb24obV9jb2RlQmxvY2spOwotICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICBpZiAo
bV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2Rl
QmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQot
ICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1
bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2Nr
LT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAg
bV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAg
ICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRh
YmxlcygpKQorICAgICAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2lt
cGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9m
VW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAg
IH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92
bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVG
b3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVRE
aXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25z
OjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIE9PUFM6
IGJ1aWxkIGEgZGlzYXNzZW1ibGVyIG9mZiB1bmxpbmtlZCBjb2RlIGJsb2NrCisgICAgICAgIG1f
ZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2Rl
QmxvY2spOworICAgIH0KICAgICBpZiAoVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyKSkgeworICAgICAgICAvLyBPT1BTOiBidWlsZCBwcm9maWxlciBkaXNhc3NlbWJsZXIgb2Zm
IHVubGlua2VkIGNvZGUgYmxvY2sKICAgICAgICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAog
ICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBt
X3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9j
ayksCisgICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVC
eXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVCbG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmls
ZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNv
ZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAg
bV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29k
ZUluZGV4KDApKSk7CkBAIC03NDIsMTEgKzc3MCwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExp
bmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUlu
UHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJh
bWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVk
IG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlz
dCBzdGFja092ZXJmbG93OwpAQCAtNzU3LDE2ICs3ODYsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVD
YWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZz
ZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0
ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRh
QW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUlu
ZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKTsgKythcmd1bWVudCkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpICYmICghbV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsK
KyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFy
Z3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4ZWRWZWN0b3I6Om9mZnNldE9mU3RvcmFnZSgpKSwg
cmVnVDIpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1l
bnQgPCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsK
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2Fu
dCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAv
LyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byBy
ZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+
aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArODEw
LDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAg
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2Fk
R1BSKCkpOwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3Vs
dFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJl
c3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6
Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+
aml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIp
KQogICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXpl
TWFya2VyKSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MzIsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxv
d0Vycm9yLCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMg
MSwgd2UgbmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlG
aXh1cCA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkg
eworICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2Fy
aXR5Q2hlY2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9j
b2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rp
b25Qcm9sb2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxv
Y2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tU
b0ZyYW1lSW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCks
IEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQo
KSkpOwogCiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxp
bmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkp
LmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMy
X3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9u
KG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNo
ZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJp
dHlDaGVjaywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNo
VGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBA
IC04MzksNyArODc1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9
IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2Rl
QmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBt
X2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIo
KnRoaXMsIG1fdW5saW5rZWRDb2RlLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwg
ZWZmb3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04NTgsOCArODk0LDggQEAgdm9pZCBKSVQ6
OmxpbmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAgICAgIGNhc2UgU3dp
dGNoUmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpDaGFyYWN0
ZXI6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtl
ZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlW3RhYmxlSW5kZXhdOwogICAg
ICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVs
dE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2Vk
VGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEs
OCArOTA3LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBT
d2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBj
dGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJl
bHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAg
Zm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMo
KSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNo
T2Zmc2V0OwpAQCAtOTA2LDMyICs5NDIsMzUgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7CiAgICAgfQog
Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7Ci0gICAg
ZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNo
ZXMobV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9p
bkJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFu
Y2VPZnMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVC
cmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAo
YXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMp
IHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZp
bmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRo
aXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0
QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKIAogICAgIGZvciAoYXV0byYgY29tcGls
YXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAgICAgIENhbGxMaW5rSW5m
byYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAgICBpbmZvLnNl
dENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50
ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKLSAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZv
LmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpj
b21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGluZm8uZG9uZUxv
Y2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxh
dGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIEpJVENvZGVN
YXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNv
ZGVPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNT
ZXQoKSkKLSAgICAgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJ
bmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRh
Zz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb2Rl
QmxvY2stPnNldEpJVENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKSk7CisgICAg
SklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5
dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNT
ZXQoKSkKKyAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4
KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPiht
X2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk3OSwzNyBAQCB2b2lkIEpJ
VDo6bGluaygpCiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7Cisg
ICAgICAgIC8vIE9PUFM6IG1ha2UgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91dCB1bmxpbmtl
ZCBDQj8KICAgICAgICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxl
cigpKQogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21w
aWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7Cisg
ICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9m
aWxlZENvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAogICAgIGlmIChtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAgICAgbV9wY1RvQ29k
ZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAgCisgICAgLy8gT09QUzog
TWFrZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBV
bmxpbmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJ
TkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAg
ICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRU
eXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAg
ICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5
cGUobV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwog
ICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlD
aGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNr
KTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3
aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBh
ZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisK
KyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxz
KTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENh
bGxMaW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1v
dmUobV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJs
ZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7Cisg
ICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgp
OworICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2Rl
LT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOwogCiAgICAgaWYgKEpJ
VEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2Rl
IGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1l
bW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCkt
PmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBj
b2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5l
eGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFi
bGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0
IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5h
bGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICsxMDE4LDIxIEBAIENv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZl
ci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1f
Y29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0
ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9j
ay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxlcklu
Zm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAg
Ly8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0
aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhh
bmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9
CisgICAgLy8gT09QUzogRG9uJ3QgdGhpbmsgdGhpcyBzaHJpbmsgaXMgcmVhbGx5IGRvaW5nIGFu
eXRoaW5nIGFueW1vcmUuIFZlcmlmeS4KKyAgICAvL3sKKyAgICAvLyAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgIC8vICAgIG1fY29kZUJsb2Nr
LT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7
CisgICAgLy99CiAKKyAgICAvLyBPT1BTOiBtX3BjVG9Db2RlT3JpZ2luTWFwIHNob3VsZCBsaXZl
IG9uIEJhc2VsaW5lSklUQ29kZSBmb3IgYmFzZWxpbmUgY29kZWJsb2Nrcy4KICAgICBpZiAobV9w
Y1RvQ29kZU9yaWdpbk1hcCkKICAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2lu
TWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOwogCiAgICAgbV92bS0+bWFjaGluZUNv
ZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0YXRp
Y19jYXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAgICAgICAgc3RhdGljX2Nhc3Q8
ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CisgICAgICAgIHN0YXRp
Y19jYXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7
CiAKLSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwo
KSk7CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShtX2ppdENv
ZGUucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVs
OwogfQpAQCAtOTk4LDExICsxMDQ0LDExIEBAIHNpemVfdCBKSVQ6OmNvZGVTaXplKCkgY29uc3QK
ICAgICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0
IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorQ29tcGls
YXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQsIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGRvTWFpblRocmVhZFByZXBhcmF0aW9u
QmVmb3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoZWZm
b3J0KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICByZXR1cm4gZmlu
YWxpemVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlRXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxNCArMTA4OCwxNCBAQCB2b2lkIEpJVDo6
ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxl
ckxvZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBhcmluZyBmb3IgSklUIGNvbXBp
bGF0aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENv
ZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3Io
VW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpID09IFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAogICAgIHJldHVybiByb3VuZExv
Y2FsUmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChjb2RlQmxvY2stPm51bUNhbGxl
ZUxvY2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9
CiAKLWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykK
K2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJs
b2NrKQogewogICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVy
Q291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw0MCBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorICAgIGNsYXNzIEpJVENvbnN0YW50UG9vbCB7CisgICAgcHVibGljOgorICAgICAgICB1
c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisgICAgICAgIGVudW0gY2xhc3MgVHlwZSA6IHVp
bnQ4X3QgeworICAgICAgICAgICAgR2xvYmFsT2JqZWN0LAorICAgICAgICAgICAgQ2FsbExpbmtJ
bmZvLAorICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8sCisgICAgICAgICAgICBGdW5jdGlv
bkRlY2wsCisgICAgICAgICAgICBGdW5jdGlvbkV4cHIsCisgICAgICAgIH07CisKKyAgICAgICAg
c3RydWN0IFZhbHVlIHsKKyAgICAgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgICAgIFBhY2tl
ZFB0cjx2b2lkKj4gcGF5bG9hZDsKKyAgICAgICAgfTsKKworICAgICAgICBKSVRDb25zdGFudFBv
b2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29s
JiBvcGVyYXRvcj0oSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKworICAgICAgICBDb25z
dGFudCBhZGQoVHlwZSB0eXBlLCBQYWNrZWRQdHI8dm9pZCo+IHBheWxvYWQgPSBudWxscHRyKQor
ICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXpl
KCk7CisgICAgICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBlLCBwYXlsb2Fk
IH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHMuc2l6ZSgpOyB9CisgICAgICAg
IFZhbHVlIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpXTsgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50czsKKyAgICB9Owor
CiAgICAgZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCiAgICAgY2xhc3MgQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZTsKQEAgLTE0OSw5ICsxODMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9Owog
CiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgc2xvd1BhdGhTdGFydDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRv
bmVMb2NhdGlvbjsKLSAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CisgICAgICAg
IFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKICAgICB9OwogCiAg
ICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CkBAIC0xNzEsNiAr
MjA1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRp
c3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNl
dC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNl
dCA9IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBw
dWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUlu
ZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAg
ICAgIH5KSVQoKTsKQEAgLTE3OCwxOCArMjE0LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2
b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQp
OwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAg
ICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsK
ICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5U
aHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRp
YyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNl
dCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQo
dm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7Cisg
ICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2
YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOwotICAgICAgICBz
dGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOwor
ICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9j
ayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcs
IFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFNlY29uZHMgdG90YWxDb21waWxlVGltZSgpOwpAQCAtMTk5LDcgKzIzNSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAg
ICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpOwogICAgICAgICB2b2lkIGxpbmso
KTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRp
b25FZmZvcnQpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShDb2Rl
QmxvY2sqLCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBv
dXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENh
bGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
KQpAQCAtMjIzLDYgKzI1OSwzMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlm
CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxv
YWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBs
b2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBs
b2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7
CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNv
ZGU+CisgICAgICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUsIGNvbnN0IEJ5dGVj
b2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgorICAgICAgICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0ZWNv
ZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CisgICAgICAgIHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGxvYWRDb25z
dGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRH
bG9iYWxPYmplY3QoR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQo
VmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworCisgICAgICAgIHZvaWQgZW1pdFB1dENvZGVCbG9j
a1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdUMCk7CisKICAgICAgICAgdm9p
ZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5kbGVyKTsKQEAgLTI1OCwxNiAr
MzE4LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAg
ICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQg
IT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBv
cF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
LCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwog
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90
PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bj
b2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3Rh
bnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBib29sIGNvbXBp
bGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtl
ZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJv
b2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CkBAIC0yOTEsMTAgKzM1MSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ly8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5k
IHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAgICAgICAgLy92b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNv
bnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVS
ZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBA
IC0zMDcsNiArMzY3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxl
KiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmls
ZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChj
b25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwg
UmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01
OTIsNyArNjU2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
am5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjI2LDE0ICs2ODksMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWdu
ZWQpOwogCiAgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFj
Y2Vzc1R5cGUpOwotICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29t
bW9uKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNo
ZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2b2lkIGVtaXRWYXJS
ZWFkT25seUNoZWNrKFJlc29sdmVUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9u
Q2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsKKyAgICAgICAgdm9p
ZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwog
ICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVk
IGRlcHRoKTsKICAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCkBAIC02NDUsNyArNzA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAg
ICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCop
OwotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsKKyAg
ICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQp
OwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQ
dXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpAQCAtNjU0LDYgKzcxNyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgICAgICBib29sIGlz
S25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRP
cGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJ
bnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIo
VmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY5NSwyNiArNzU5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7CiAg
ICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNv
bHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsK
LSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VO
RVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJv
bVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KLSAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1vZHVsZVZh
ciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4gdXNlIGEg
dGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3ZSBkb24n
dCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAgICAgICAgICAgcmV0
dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09
IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2Vu
ZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX1JFU09M
VkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFU
T1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVy
YXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1l
KTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBj
b25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3RkOjpvcHRp
b25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CiAKICAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdl
bmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CkBAIC03NTksMTAgKzgwNSwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5k
Q2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdm9pZCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChBZGRyZXNzLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIEFkZHJlc3MsIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29k
ZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVj
b2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAg
ICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNS
ZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIwLDIwICs4NjYsMjAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKEFkZHJl
c3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkpOwogICAgICAgICB9CiAKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlLCB0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVu
YWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRh
dGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1
cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1l
dGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShieXRlY29kZSwg
b3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lIEJ5dGVjb2Rl
LCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJh
aXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0gICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNl
dHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5cGU+KHRhcmdldCwgYXJncy4u
Lik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdH
UFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2Rl
LCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOwog
ICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlw
ZW5hbWUuLi4gQXJncz4KQEAgLTkxOCwyNSArOTY0LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVy
biBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGlu
ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAgICAgIGJvb2wg
c2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsgfQog
I2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBmYWxzZTsgfQog
ICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21w
aWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFsbCBjb2RlIGdl
dHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJu
IGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRh
QW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgdm9pZCBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7
CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEg
dGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3Nz
IHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAg
ICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkg
dGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0
VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBC
aW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAogICAgICAg
ICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtOTYzLDkgKzEwMDQsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOwog
ICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCi0gICAgICAgIEhhc2hN
YXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwotICAgICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQcm9maWxlczsK
LQogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExpc3Qg
bV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7CiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQpAQCAtOTk5LDExICsxMDM3LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAogICAgICAg
ICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9y
SW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5
dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgICAgIFJlZlB0
cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgICAgIE1hdGhJQ0hvbGRlciBtX21hdGhJ
Q3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1faml0Q29kZTsKKworICAgICAg
ICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1f
dW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJ
bmZvczsKKyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRT
dHViSW5mb3M7CisgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hK
dW1wVGFibGVzOworICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX21l
dGFkYXRhR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUjsKKyAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19jb25zdGFudHNHUFIgPSBMTEludDo6UmVnaXN0ZXJz
OjpwYkdQUjsKKworICAgICAgICBzdHJ1Y3QgTm90QUNvZGVCbG9jayB7IH0gbV9jb2RlQmxvY2s7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENo
YXIob3AyKSkgewogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0K
IAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEp
OwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IElu
dC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1Qx
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2Fk
KG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4
IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
LSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5r
ZWRDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZWdhdGU+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0
aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdv
dWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0
aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4o
bmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxl
ZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAtODk5LDggKzkwNCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJp
dGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubV9wcm9maWxlSW5kZXgp
OworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0aFByb2Zp
bGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBh
ZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAg
LTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJ
QzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5l
KCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5l
Q29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsK
ICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3Ms
IGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0aFByb2Zp
bGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChu
b25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3Jj
UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAxNSwxMCArMTAyMSwxMSBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3Bl
cmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBt
YXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hH
UFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkK
LSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3Ms
IHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdz
KTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEzICsxMDYyLDE0IEBAIHZvaWQgSklUOjplbWl0
TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0
aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlv
bl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlv
bl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3Jj
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQ
cm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pN
aWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVk
SW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBz
bG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIwLDEzICsxMTI4LDE0IEBAIHZvaWQgSklUOjpl
bWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFBy
b2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xv
d1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlv
bl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJ
VE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywg
cmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWlj
PihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0
aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihy
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAg
IGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5n
KCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQ
cm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1fcHJvZmlsZUluZGV4KTsKIAogICAgIFNuaXBwZXRP
cGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAg
IFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNv
bmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpKTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJ
Q3MuYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVs
PihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZU11bCk7CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRo
UHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpKTsKKyAgICBKSVRTdWJJQyog
c3ViSUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzMiw3ICsyMzIsNyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2
CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBz
dG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxs
ZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgcmVnVDEsIHJlZ1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAg
LTMyNCw3ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlv
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBl
bWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93
Q2FzZShjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxs
UmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52
aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOwogfQogCkBAIC01MywxMCArNTMsOSBAQCBzdGQ6OmVu
YWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9w
Y29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9w
X3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hl
Y2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50SW5j
bHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVj
a3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFj
a09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCkBAIC02
NCw3ICs2Myw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZz
ZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsK
ICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsK
LSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVja3Bv
aW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIHJlZ1QwLCByZWdUMCk7CiAgICAgICAgIGRv
bmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTc4LDcgKzc3LDcgQEAgc3RkOjplbmFibGVfaWZf
dDwKICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9
PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwg
Q2FsbExpbmtJbmZvKiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0
ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKQEAg
LTkxLDcgKzkwLDggQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAog
ICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3Vt
ZW50czsKICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJh
bWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lz
dGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCByZWdUMCwgcmVnVDEsIC1maXJzdEZyZWVS
ZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1maXJz
dEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0aGlzLCBy
ZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTAxLDE0ICsxMDEsMTYgQEAgSklUOjpjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJh
dGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UKICAgICAgICAgc2V0dXBP
cGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0aW9u
KHNldHVwT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCByZWdU
MywgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50
LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXls
b2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7Ci0gICAgSnVtcCBub3RCaWdnZXN0ID0gYnJh
bmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMiwgaW5mby0+YWRk
cmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7CisgICAgbG9hZENvbnN0YW50
KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAs
IENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwg
cmVnVDMpOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMywgcmVn
VDIpOworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zm
c2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CiAgICAgbm90QmlnZ2VzdC5s
aW5rKHRoaXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgpAQCAtMTI3LDE2ICsx
MjksMTYgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpCiB0ZW1wbGF0ZTw+
CiBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVjb2RlKQog
ewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAg
c3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2Fs
bGVyRnJhbWVPZmZzZXQoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3Vu
bGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBy
ZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
RW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2Rl
KTsKIApAQCAtMTQ4LDcgKzE1MCw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5m
byA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFkZChD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlu
a0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29k
ZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE1OCw0NiBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFs
U2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAq
IHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxD
YWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVj
b2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxD
YWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCi17Citib29sIEpJVDo6Y29t
cGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkgewogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVt
cGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRl
Y29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK2Jv
b2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlu
a2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxsRnJh
bWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdz
ID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0g
R1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0K
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0g
bWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVt
UGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFn
UmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICBzaHVmZmxlRGF0YS0+
bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShi
eXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29kZS5t
X2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsr
aSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgc2h1ZmZsZURhdGEt
PmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNr
KAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhp
cyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwog
ICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAgICAgICBWYWx1ZVJlY292ZXJ5Ojpp
bkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNh
dmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEo
c2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5Ojpp
bkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0YS0+c2V0dXBDYWxsZWVT
YXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJ
Qzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURh
dGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9D
b25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6
ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKKyAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRh
aWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKworICAgIHNo
dWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8tPmZyYW1lU2h1ZmZsZURhdGEgPSBX
VEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsK
ICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlv
biA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIxOCwxNCArMjIzLDI1IEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6
ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZy
YW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZv
ID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBp
bmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKKworICAgIFVu
bGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOworICAgIGlmIChvcGNvZGVJRCAhPSBv
cF9jYWxsX2V2YWwpIHsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBtX3Vu
bGlua2VkQ2FsbHMuYWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlw
ZUZvcihvcGNvZGVJRCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZvKTsKKworICAgICAg
ICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRl
eCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9u
SW5mbygpKTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS51bmxpbmtlZENhbGxMaW5rSW5mbyA9IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3Rh
bnQ7CisgICAgfQorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQp
OwogCiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRlY29kZUlu
ZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOwor
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBo
b2xkcyBjYWxsZWUuCkBAIC0yMzQsMTYgKzI1MCwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgp
ID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZv
OjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAgaWYgKGNv
bXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQorICAgIGlm
IChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZv
Q29uc3RhbnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0
YW50LCByZWdUMik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAgICBh
dXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwg
cmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7CisgICAgICAgIGF1dG8g
c2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhp
cywgcmVnVDAsIHJlZ1QyLCBbJl0gewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CiAgICAgICAg
IH0pOwpAQCAtMjUzLDEzICsyNjUsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBzbG93UGF0aHMg
PSBpbmZvLT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpV
c2VEYXRhSUM6Olllcyk7CisgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRE
YXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyKTsKICAgICBhdXRvIGRvbmVMb2NhdGlv
biA9IGxhYmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0
aW9uOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjczLDIw
ICsyODUsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMyk7CisgICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKIAogICAgIGlm
IChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAg
ICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1f
dm0sICp0aGlzKTsKKyAgICBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgqbV92bSwg
KnRoaXMsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1
cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKQEAgLTM5NSwxNyArNDA3LDMwIEBA
IHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KIAogICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKICAgICAKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworCisgICAgbW92ZShyZWdUMCwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCks
IHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQ
UiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uZXh0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhp
cyk7CiB9CkBAIC00MTYsMTAgKzQ0MSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGlu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCi0gICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGl0ZXJh
dG9yR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBMaXN0IG5v
dE9iamVjdDsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyYXRvckdQ
UikpOwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0b3JHUFIp
KTsKQEAgLTQzMiwxOSArNDU1LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9v
cGVuKGNvbnMKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVy
YXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudCkucmF3Qml0cygpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgbW92
ZShpdGVyYXRvckdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIAog
ICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93
SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRvbmUubGlu
ayh0aGlzKTsKIH0KQEAgLTQ1Miw3ICs0NzMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3Jfb3Blbihjb25zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0g
KCkgewogICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNh
c2UgTmFycm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC00NzAs
NTAgKzQ5MCw3NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAg
ICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6
R2VuZXJpYykpKTsKIAogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgb3I4KFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIEFi
c29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9pdGVyYXRpb25NZXRhZGF0YS5zZWVuTW9kZXMpKTsK
KyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRh
OjpvZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9m
ZnNldE9mU2Vlbk1vZGVzKCksIHJlZ1QwKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIHJlZ1QwKTsKKyAgICBzdG9y
ZThUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNl
dE9mU2Vlbk1vZGVzKCkpOwogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+KGluc3Ry
dWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRDaGVja3Bv
aW50KCk7CiAgICAgLy8gY2FsbCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkgaW4g
cmVnVDAKIAotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBpdGVyUmVz
dWx0R1BSID0gcmVnVDI7Ci0gICAgR1BSUmVnIGRvbmVHUFIgPSByZWdUMTsKLSAgICAvLyBpdGVy
UmVzdWx0R1BSIHdpbGwgZ2V0IHRyYXNoZWQgYnkgdGhlIGZpcnN0IGdldCBieSBpZCBiZWxvdy4K
LSAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpzY3JhdGNoOworICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BS
KTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6cmVzdWx0OwogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGl0ZXJSZXN1bHRHUFIpOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHN0YXRpY19hc3NlcnQocmV0dXJu
VmFsdWVHUFIgPT0gYmFzZUdQUik7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIpOwogCiAgICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJl
Z3MuYWRkKHZhbHVlR1BSKTsKKyAgICAgICAgcHJlc2VydmVkUmVncy5hZGQoaXRlckNhbGxSZXN1
bHRHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIHByZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkp
LCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHJlZ1Qz
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgp
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzdHViSW5mb0dQ
UiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJl
Z3MgeyBkb25lR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNr
cG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDI7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdpc3RlclNl
dCB1c2VkUmVnaXN0ZXJzKGRvbmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
R1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2Nh
dGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRp
b25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IGdsb2JhbEdQUik7CiAKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1l
cy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0
R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3
LDU5ICs1NzEsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwog
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVj
a3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVn
IGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVu
ZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVk
U3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAg
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4
KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
LSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BS
KSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxS
ZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBB
ZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShp
dGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwg
QWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50KS5yYXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGlu
ayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVz
dWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3Vt
ZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1
ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlx
dWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsK
ICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJ
bmRleCsrXTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAg
ICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5v
bkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZh
bHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJ
bmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJl
ZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3Vs
dEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxk
ZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZh
bHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0
cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDEwICsxNTksMTAgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAg
ICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJ
QygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gT3B0aW9uczo6
dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkBAIC0yNDgsNiArMjQ4LDQxIEBA
IHByb3RlY3RlZDoKICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1fcmVmOwogfTsKIAorY2xh
c3MgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNI
b2xkZXImIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1f
YWRkSUNzKTsKKyAgICAgICAgbV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAg
ICAgICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICAgICAgbV9zdWJJ
Q3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKKyAgICB9CisKKyAgICBKSVRBZGRJQyogYWRk
SklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRk
SUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQ
cm9maWxlKTsgfQorICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKyAg
ICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkg
eyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKworCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Cisg
ICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0
dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxH
ZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRNdWxJQyog
YWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVs
SUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVu
YW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklU
TmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5h
cnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46
OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmls
ZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKworcHJpdmF0ZToK
KyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7
CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNz
OworfTsKKwogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoRGlyZWN0SklU
Q29kZSk7CiBjbGFzcyBEaXJlY3RKSVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7
CiAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVS
KERpcmVjdEpJVENvZGUpOwpAQCAtMjY2LDYgKzMwMSwyMSBAQCBwcml2YXRlOgogICAgIENvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gbV93aXRoQXJpdHlDaGVjazsKIH07CiAKK2NsYXNzIEJhc2VsaW5l
SklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1
YmxpYzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgICAgICA6IERpcmVjdEpJ
VENvZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
KQorICAgIHsgfQorCisgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2Fs
bHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsgLy8gT09QUzog
bWFrZSBzdXJlIHdlIHZpc2l0IHRoZXNlIHNvbWVob3cuIE9yIGFzc2VydCB3ZSBkb24ndCBoYXZl
IHRvLCBzaW5jZSB0aGV5J3JlIHZpcnR1YWwgY2FsbHMuCisgICAgQmFnPFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxl
SnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVt
cFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisgICAgSklUQ29kZU1hcCBtX2ppdENv
ZGVNYXA7CisgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworfTsKKwogY2xhc3Mg
TmF0aXZlSklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgewogcHVibGljOgogICAg
IE5hdGl2ZUpJVENvZGUoSklUVHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxODY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIklu
bGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBzdGF0
aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2ppdFR5
cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1YkluZm8g
PSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2Rl
T3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxvY2sg
PyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFn
ZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwog
CiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3
ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIExp
bmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0YXJ0
ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5sb2Nh
dGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0
aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zbG93UGF0
aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgp
OworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKyAg
ICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHJ1Y3R1cmVTdHViSW5mb0dQUik7CisgICAg
aml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9k
b25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0
b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShy
ZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRl
eDsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZv
OwogCiBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUg
OiB1aW50OF90OwogCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVEZWxCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5m
bzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFz
ZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlu
a2luZyBhIENvZGVCbG9jayBhbmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZh
bCBTdHViSW5mby4KKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0
dWJJbmZvID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3Ry
dWN0IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcHJvdG8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisK
K3N0cnVjdCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5
ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQ
UkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJ
bmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdU
MTsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUklu
Zm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6
cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJl
Z1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3Nl
cnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KGJyYW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsK
KwogY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9CkBAIC02MiwxNSArMTY0LDIxIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGZpbmFsaXplKAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIs
IExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIgfTsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IG1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggeyBz
dGQ6Om51bWVyaWNfbGltaXRzPEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQ+OjptYXgoKSB9Owor
CiBwcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1f
aml0VHlwZTsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgor
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX2RvbmU7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsgLy8gT09QUzogbWFrZSByZXBvcnRDYWxsIHBhc3Mg
c29tZXRoaW5nIGluIHdlIGNhbiB1c2UgZm9yIHRoZSBub24tQ1RJIHRodW5rcyBidWlsZHMuIAog
fTsKIAogY2xhc3MgSklUQnlJZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvciB7CkBAIC05OCw3ICsyMDYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9i
YXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKK3B1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKQEAgLTEzMiw4ICsyNDAsOCBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdl
bmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAg
IENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVn
cyBiYXNlLAotICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBH
UFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBK
SVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gs
IEVDTUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImKTsKICAgICAKQEAgLTE2MywxMSArMjcxLDkgQEAgcHVibGljOgogCiAgICAg
dm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAg
SlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxl
SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTE5MSw4ICsyOTcsNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjAsNiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAot
cHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICsz
NDMsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTI3Nyw4ICszNzcsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXIm
IGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAot
cHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSAr
NDAwLDkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fz
c2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1Zh
bHVlUmVncyBtX3Jlc3VsdDsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0Owog
ICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApA
QCAtMzMwLDggKzQyNiw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShy
ZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAg
aWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
dW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykg
PT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIo
KTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lz
dGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29u
c3RhbnQpIHsKKyAgICAgICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBhbGwg
bGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtl
ZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0
dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjphcHBlbmRDYWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0
YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24s
IFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwg
cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBK
U1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0
b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICBy
ZXR1cm4gY2FsbDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVh
bFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZp
cnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhm
dW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1
ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVH
UFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5p
c0tub3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0
Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgs
ICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9p
bnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVs
cy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxp
bmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
SW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRz
KCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRv
IGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkz
LDI5ICszMTgsMzQgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQog
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJl
Z2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVn
cyB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKLQotICAgIC8v
IFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2Ug
Y2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UK
LSAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSAgICBzdG9y
ZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAg
ICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5k
aWYKLX0KKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwo
KSktPmxlbmd0aCgpID09IDE7Cit9CisKKy8vIE9PUFMKKy8vaW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVn
cyB2YWx1ZSkKKy8veworLy8gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CisvLwor
Ly8gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0
LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAorLy8gICAgLy8gc3RvcmUuCisvLyNpZiBVU0Uo
SlNWQUxVRTY0KQorLy8gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVj
a2V0cyk7CisvLyNlbHNlCisvLyAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9y
ID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9i
dWNrZXRzKTsKKy8vICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+
YXNCaXRzLnBheWxvYWQpOworLy8gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0
b3ItPmFzQml0cy50YWcpOworLy8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
IGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRh
dGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpA
QCAtMzIzLDI0ICszNTMsMjUgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1l
PGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVk
T3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1
ZVJlZ3MgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFs
dWVSZWdzIHZhbHVlKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAg
ICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0
YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7CisgICAgcHRyZGlm
Zl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29kZT4obV9i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RC
dWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIs
IG9mZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJl
c3VsdFJlZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVzdWx0UmVnKSk7Ci19CisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykK
Ky8veworLy8gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVS
ZWdzKHJlc3VsdFJlZykpOworLy99CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwg
R1BSUmVnIHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
R1BSUmVnIHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCkBAIC0zNjAsNiAr
MzkxLDIxIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVcKICAgICB9
CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHB0cmRpZmZf
dCBvZmZzZXRPZkFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNj
cmF0Y2hHUFIpCit7CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAgICBs
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHNjcmF0
Y2hHUFIsIGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmlsZSk7CisgICAgfQorfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBSZWdpc3RlcklEIGNlbGxHUFIs
IFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3sKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCksIGNlbGxHUFIs
IHNjcmF0Y2hHUFIpOworfQorCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5k
Q29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwpAQCAtMzgwLDcgKzQyNiw3IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlm
IChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5D
b25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOworICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVC
bG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJ
bW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAgICBsb2Fk
RG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcgKzU0Miw3IEBAIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBp
ZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2Vs
bChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcgKzU1Miw3IEBAIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJ
RCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAg
IGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkK
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNCwx
MSArNTYwLDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogICAg
IH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0LDExICs1ODUsMTcgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5
dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVt
YmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFs
dWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQorICAgICAgICBzd2l0Y2ggKG1fdW5saW5rZWRDb2Rl
LT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpKSB7CisgICAgICAgIGNhc2Ug
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICBjYXNlIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIG1vdmUo
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0Nv
bnN0YW50KHNyYywgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTU2NiwxMSArNjEzLDYgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwg
ZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50
KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lz
dGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01
OTUsNyArNjM3LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQog
CiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVn
aXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY3
OSw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBp
ZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9j
ay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
R2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQot
ewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hN
YXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRH
ZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0
SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7
Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1
dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6
OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBr
ZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAz
MiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1
dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChp
dGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBp
dGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGll
ZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQ
cm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zm
c2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiAr
NzAwLDYxIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICBy
ZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBs
b2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRh
dGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhzX21ldGFkYXRhR1BS
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBC
eXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAg
bG9hZDgoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZh
bHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMy
VG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90
IG9mZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1f
dW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVj
b2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3Qg
Qnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAg
IGFkZFB0cihzX21ldGFkYXRhR1BSLCBUcnVzdGVkSW1tUHRyKG1fdW5saW5rZWRDb2RlQmxvY2st
Pm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJl
c3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAg
bG9hZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNv
bnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9n
bG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BSUmVn
IHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOwor
ICAgIC8vIE9PUFM6IE1heWJlIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudD8KKyAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmVzdWx0LCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVz
dWx0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRl
eCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSks
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIp
LCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwog
ICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpOwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oY29uc3QgSW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2gg
ZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9i
eXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwog
ICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDI0
LDcgKzEwMjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAK
ICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sg
dGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxl
JiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVs
dE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1
cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3ICsxMDQyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJ
VGFibGUodW5saW5rZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0LDIyIEBAIHZv
aWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewot
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0g
ICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwotICAgICAg
ICBlbHNlCisgICAgICAgIC8vIE9PUFM6IG1vc3QgIk90aGVyIiBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gY29uc3RhbnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQgZnJvbSB0aGUgVW5saW5rZWRDb2Rl
QmxvY2suIEl0J3MganVzdAorICAgICAgICAvLyBhIGNvdXBsZSB0eXBlcyB0aGF0IGNhbid0LiBD
cmVhdGUgYW4gYWJzdHJhY3Rpb24gZm9yIHRoYXQuCisKKyAgICAgICAgc3dpdGNoIChtX3VubGlu
a2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkgeworICAgICAg
ICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAgICAgY2FzZSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAg
ICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0
b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICs5OCwzNSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
LnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxsb2Nh
dG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5h
bE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0
b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJl
Z2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVn
ID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKIAotICAgIGlm
ICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVsc2Ugewot
ICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1
c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7
Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVy
ZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7Ci0gICAg
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcE5ld09iamVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgb2Zm
c2V0T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgp
ICsgb2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Cisg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxl
KCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dD
YXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
KyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0
YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1
cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVj
dCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzE0MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJy
aWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNl
VmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5
bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFs
dWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24o
KSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5z
dGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9C
SkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VT
eW1ib2xGdW5jdGlvbikpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rv
ciwgcmVnVDApOwogCkBAIC0xNTQsMzAgKzE2NCwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0
YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlw
ZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVl
IHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBi
YXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4g
dGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3RvR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BSKTsKICAgICAKICAgICAvLyBDaGVjayB0
aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hl
Y2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHBy
b3RvR1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAg
cmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUNSwK
LSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICByZXN1bHRHUFIsCisgICAgICAgIHZh
bHVlR1BSLAorICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgc3R1YkluZm9HUFIsCisgICAgICAg
IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDEsIEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6c2NyYXRjaDIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAorCiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQgKzIxMCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRk
cmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRp
Y19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQ
UjIpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90
byA9PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSkKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNl
T2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMjQwLDcgKzI1Nyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KIAogICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwog
CkBAIC0zNzQsNyArMzkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0
aW9uKgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJl
dCgpOwogI2Vsc2UKQEAgLTM4NSw3ICs0MDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29u
c3QgSW5zdHJ1Y3Rpb24qCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3Io
Vk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAg
ICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVD
YWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQyOCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJv
cGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQs
OSArNDUwLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZv
aWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1
bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5j
dGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0
ODIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJy
YW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0
KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNG
YWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzQ5OSw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBy
ZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyAr
NTM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0
YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1w
KCk7CiAKQEAgLTU0Myw3ICs1NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29u
c3QgSW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCks
IHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTU4Miwx
NSArNjAxLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KIHZv
aWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAg
IEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9z
cGVjaWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3Rv
cmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICBsb2FkQ29k
ZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpCisgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOwor
ICAgIHN0b3JlOFRvTWV0YWRhdGEoYnl0ZWNvZGUsIFRydXN0ZWRJbW0zMigxKSwgT3BKbmVxUHRy
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2NDIsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY1OSw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBi
ZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAg
IC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzE0LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBq
dW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzczMSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpv
cF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BS
ID0gYXJndW1lbnRHUFIxOwpAQCAtOTA4LDcgKzkyOCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBy
ZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MTgsNyArOTM5LDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCkBAIC05MzEsNyArOTUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0
IEluc3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk3Myw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJl
cihyZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAh
PSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpA
QCAtOTc4LDcgKzEwMDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5z
dHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRz
dFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05
OTMsNyArMTAxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8K
ICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkp
LCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRy
KSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsK
ICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9y
aW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVn
aXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwotICAgIGlmIChidWZmZXIg
fHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUlu
ZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCks
IG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5j
aFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFn
KTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVmZmVyICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAgICAgICAgIEpTVmFsdWVS
ZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9m
aWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdzKTsKLSAgICAgICAgfSk7
Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBAIC0xMDUzLDggKzEwNjMs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3Jl
YXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNo
IHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
LSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3
aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNo
UmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNo
UmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxp
bmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5MSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9z
d2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5
dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRj
aCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAg
ICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxl
Lm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRH
UFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CiAgICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCkBAIC0xMDk5LDIwICsx
MTEwLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
ICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29k
ZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAgIGxpbmtl
ZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5n
V2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRl
eCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVi
dWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygp
LCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0
cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBl
KSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0xMTMzLDcgKzExNDYs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJl
Z1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTExNDgsNyArMTE2
MSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTY2LDcgKzExNzgsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1Qw
KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTExODgsMTIgKzEyMDAs
MTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIEV2
ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFu
dAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVj
ZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2lu
ZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygp
OworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMoKTsKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwg
Y291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKKyAgICAKKyAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwor
ICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAgZW1pdEVudGVyT3B0aW1pemF0aW9u
Q2hlY2soKTsKICNlbHNlCkBAIC0xMzEwLDIzICsxMzI0LDE5IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVk
U3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0
dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlz
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJC
YXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwog
ICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0
YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQy
LDcgKzEzNTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRP
Zk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQ
cm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyks
IGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlv
blJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0
aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1
bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BDcmVhdGVUaGlzOjpvZmZzZXRPZkNhY2hlZEZ1bmN0aW9uKCksIGNhY2hlZEZ1bmN0
aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1
YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxl
Q2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBj
YWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVl
cy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzgyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Mik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwg
cmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0
dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzkzLDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdU
MiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwog
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJu
VmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDA2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwog
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQxNyw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qy
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCBy
ZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzMiwxMSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0
cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFz
SW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJ
bnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5j
ZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1
Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsK
ICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVl
R1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiB9CkBAIC0xNDMwLDcgKzE0NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5
RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0Fy
ZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV91bmxp
bmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4o
KSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9u
Q291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCByZWdUMCk7CiAgICAg
ICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpA
QCAtMTQ0MCw3ICsxNDU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IElu
c3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRpZgotICAgICAgICBt
b3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRSZWdzKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
ICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsxNDY4LDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAgLy8gRW1pdCB0aGUg
SklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKKyAg
ICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qw
KTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8sIFRydXN0
ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwKLSAg
ICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0
ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAtMTUwOSw3ICsxNTI1
LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1lbnRHUFIw
KTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3Vt
ZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTE1NjQsMzQgKzE1ODEsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3Jl
Z2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IEdQUlJlZzo6YXJndW1l
bnRHUFIwOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxp
bmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBK
SVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2Fk
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25E
ZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSkKKyAgICBsb2FkQ29uc3RhbnQo
Y29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpv
cGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZt
KCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZt
KCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAg
fQogfQogCkBAIC0xNjIxLDIzICsxNjQwLDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJD
b21tb24oY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2Nv
cGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Nj
b3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3Vt
ZW50R1BSMSk7CiAjZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBt
X2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBh
dXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
RnVuY3Rpb25FeHByLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
Ynl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBh
cmd1bWVudEdQUjIpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25l
d19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IGFyZ3VtZW50R1BSMXJlZ1QwLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMXJlZ1QwLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NF
UlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjFyZWdUMCwg
YXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2NjQsMjkgKzE2ODQsMzAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9h
cmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9j
YXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1
ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
YXJndW1lbnRHUFIyKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUo
KSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5n
dGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJ
bmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7
CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5
V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1l
bnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxp
emVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFk
YXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRM
b2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5k
UHJvZmlsZSwgZHN0LCByZWdUMywgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwog
I2VuZGlmCiB9CiAKQEAgLTE2OTQsOCArMTcxNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19h
cnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91Ymxl
IGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHR5
cGUgcHJvZmlsZXIgaXMgZW5hYmxlZC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRU
eXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApA
QCAtMTc3NywyMCArMTc5OSwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQ
UjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hp
Y2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwotICAgIEdQ
UlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1
bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1
cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcs
IHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFy
Z0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5Q
YWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwor
ICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBy
ZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdU
Myk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1Zh
bHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tl
dFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4g
b2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB1c2luZyB0aGUgY29udHJvbCBmbG93
IHByb2ZpbGVyLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Js
b2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsK
QEAgLTE4NjAsNyArMTg4Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25z
dCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxOTEyLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODE4
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODgxLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJ
bnQzMigpKQpAQCAtMjkwNCw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNl
bGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNT
dHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZh
bHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyODE4Njgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
LCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1l
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVS
ZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDky
ICs0OSwxMDMgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlm
aWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMo
KSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAg
ICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1Qy
KTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVu
SWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50
aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VH
UFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJh
c2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3Jh
dGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVy
YXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9m
aWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2Rl
LCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5m
bygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHVi
SW5mb0dQUik7CisKKyAgICAgICAgLy8gT09QUy4gU3VwcG9ydCB0aGlzCisgICAgICAgIC8vaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAgICAgLy8gICAgZ2VuLnN0dWJJ
bmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgICAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+
CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5
dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGlm
IChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChtX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0
YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRH
UFIyKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUs
IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAg
ICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1f
Ynl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgot
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
R2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBh
cmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1
bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChw
cm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29u
c3RhbnQobV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNjAsOCArMTcxLDggQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxl
R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRH
UFIxKTsKIApAQCAtMTg3LDM0ICsxOTgsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cmVzdWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBBU1NFUlQoaGFz
QW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yMjMsOSArMjQx
LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTIzNSwyNiArMjU1
LDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxy
ZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3By
aXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKQEAgLTMwMCwyMSArMzE0LDI4IEBAIHZvaWQgSklUOjplbWl0X29w
X3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29k
ZS5tX2JyYW5kOwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5k
R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFj
Y2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MoYnJhbmRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAg
Ly8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNp
bmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI4LDEzICszNDksMTcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogewogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKwogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vz
c0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFj
Y2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTM0NCwyNCArMzY5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJp
dmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9
PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0
eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFu
ZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
blNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5k
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMTkgKzM4OSwy
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJy
YW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRl
QnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwg
YnJhbmRHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQ
cml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVC
cmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpD
aGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCkBAIC0zOTQsOSArNDIyLDExIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BS
ID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0MzYsMTggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAg
c3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUo
b3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5j
dGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFy
Z3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJh
bmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NTksNDIg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBy
ZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQ
b2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDIpLCByZWdUMywgcmVnVDQpOwotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9w
ZXJ0eSkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworICAgIC8vIE9PUFM6CisgICAgLy9pZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgIC8vICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQg
PSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3Qg
OiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUo
Ynl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChn
ZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1i
YXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MTAsMTIgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUg
PSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0
cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9
IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTMxLDE2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBm
YXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYg
KGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNl
CisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BS
NCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUx
Miw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAg
IGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUp
OwpAQCAtNTIzLDcgKzU2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUzOSwxMSArNTgx
LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAg
aml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICBqaXQuc3RvcmUzMihieXRlY29k
ZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSk7CkBAIC01NzAsMjAgKzYxMiwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0
ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVn
cyhyZWdUMiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJS
ZWcsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmll
bGRQdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1
Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNjAzLDEz
ICs2NTYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBhdXRvIG9wZXJhdGlvbiA9
IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxk
T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGlu
IHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGdlbi5zdHViSW5m
bygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
NCk7CisgICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25Q
dXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQ
cml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRz
R1BSMywgYXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjc2LDEyIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgZWxzZQotICAgICAg
ICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtNjQ4LDkgKzY5Niw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9
IHJlZ1Q0OwogCkBAIC02ODAsNyArNzI4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRl
cl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTY4OSw3ICs3MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRl
ckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3NDksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX3NldHRlcl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwg
cmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1Qx
LCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwg
cmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3NjAsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZh
bCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNzE5LDcgKzc3MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJv
cGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCBy
ZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJp
YnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRy
aWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3LDIzICs3ODAsMzMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJh
c2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQg
d3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3
cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBj
bG9iYmVycyByZWdpc3RlcnMuCkBAIC03NTksMTUgKzgyMiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRp
bWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVk
SW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC03ODEsMjQgKzg0NiwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRH
UFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9H
UFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5
SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
bkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTg0NSwyMiArOTA1LDMzIEBAIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJv
cGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZh
bFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVu
ZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAg
ICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYg
YSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTU0LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZh
bE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50
R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIz
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQgKzk3MiwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJn
dW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSks
IGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0g
cmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAt
OTYxLDIyICsxMDI5LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsK
IAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZv
R1BSLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2LDE0ICsxMDYzLDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9w
dGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTEwMDMsMjYgKzEwODMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Ry
eV9nZXRfYnlfaWQoY29ucwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIz
OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlk
T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlH
ZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
MDMwLDIyICsxMTA0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29u
c3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGUtPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
cmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5m
b0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiArMTEz
NywxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9w
dGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5
SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwNzMsODMgKzExNTgsNjEgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
LCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOwotICAgIGVsc2UKLSAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91
bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlkZW50ID09IG1f
dm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAg
ICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsICZtZXRhZGF0YS5tX21vZGVNZXRh
ZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCByZWdUMSk7CisgICAgICAgIGxvYWQ4
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVN
ZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlKCksIHNjcmF0Y2hH
UFIpOworICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWws
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9k
ZTo6QXJyYXlMZW5ndGgpKSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSAr
IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwg
YmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRo
aXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxLCB0aGlzVlJlZyk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCi0g
ICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0
UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAt
MTE1OCwxNiArMTIyMSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50
R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMTc3LDI2ICsxMjQyLDU4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFIzOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhU
aGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhU
aGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBi
YXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisKKyAgICBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSwgc3R1YkluZm9HUFIpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlJZFdpdGhUaGlzOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhp
cy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
c3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyNDEsMTYgKzEzMzgsMTkgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJh
dGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3RoaXNWYWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBy
ZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI5ICsxMzYwLDIzIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2Uu
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAg
c3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09w
dGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0
QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0KKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9cwogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJiB2bSkKQEAgLTEzMjks
MjMgKzE0MjMsMzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVj
dCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFi
bGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdl
IHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBo
YXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2Vu
ZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBh
bHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6
dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0g
QmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBz
dHViSW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJl
Y3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
UHV0QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVj
dCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9k
ZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeUlkcy5hcHBlbmQo
Z2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsxNDY3LDE4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAgICAKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92
YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1
bmN0aW9uKCksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEzNzYsMjUgKzE0ODgsMTkgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4K
LSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVl
R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBl
bmRDYWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtMTQ0MSwyMCArMTU0NywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9i
eV9pZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBi
YXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZS
ZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZv
R1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkluQnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpA
QCAtMTQ2MywxNCArMTU4MCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29u
c3QgSW5zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsr
XTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjAwLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
Ly8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5
IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBh
IGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2MjQsMzMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NTksMTggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlW
YWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5
VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTU2LDUxICsxNjgxLDU2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxl
R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAh
aXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BS
MSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5C
eVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAg
IC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0
bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5n
IGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZh
bE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
SW5CeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9y
QnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUs
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1
YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlw
ZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQ
cml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJ
VDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKICAg
ICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiAKQEAgLTE2MDgsNyArMTczOCwxMSBAQCB2b2lk
IEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1l
ID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVC
cmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0
aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTE2MTgsMjcgKzE3NTIsMjEgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRl
U2xvdyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IHJlZ1QxOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5T3JCcmFuZEdQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpLCBkZWNsdHlw
ZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gdHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX25hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NTIsNyArMTc4MCw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKGMKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUu
bV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNs
b3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hh
c19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xNjY2LDE5ICsxNzk0LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9i
cmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhh
c1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQp
OworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNl
LCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rp
b25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0
cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92
YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2ODgsNiArMTgxOSw3IEBAIHZv
aWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3MDEsNyArMTgzMyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDEpOwogICAgICAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1Qx
KTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4NDcsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CiAgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3OTQs
NTkgKzE5MjYsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgog
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlv
bik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVz
b2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRo
ZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVu
dmlyb25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVz
b2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDAp
OwogICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVC
bG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZf
dCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5l
cmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmsoQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENs
b3N1cmVWYXIiKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICAgICAgcmV0dXJu
IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MiKTsKKyAgICAgICAgfTsKIAotI2RlZmluZSBSRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5l
cmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10g
PSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVTT0xWRV9TQ09QRV9HRU5F
UkFUT1IpCisgICAgICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvciA9IFtdIChW
TSYpIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVu
ayhzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7CiAg
ICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBjb25z
dGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwg
bWV0YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
KworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7Cisg
ICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAg
ICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxz
ZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29k
ZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAg
IGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9
CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmso
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3Bl
VGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIq
IHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rp
b24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAg
ICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBi
ZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9G
VEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMs
IHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2Nv
cGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsg
Ly8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGlu
Y29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAv
LyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZz
ZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUo
cmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0
dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRh
ZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1Qz
LCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIApAQCAtMTg1NSwyNiAr
MjAwNSwyNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQ
UlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92
YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9m
ZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAK
ICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykgewogICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxT
Y29wZURlcHRoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsK
KyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAgICBMYWJlbCBs
b29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRv
bmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAgewotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAg
ICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICAg
ICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICAgICAgaml0Lmp1
bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRo
aXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENv
ZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEyICsyMDMyLDEy
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JD
b2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7
Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9i
amVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7
CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Mo
Z2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgaml0Lm1vdmUoZ2xvYmFsT2JqZWN0
R1BSLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xODk3LDEx
ICsyMDQ3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAg
ICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhciosCiAgICAgICAgICAgICAvLyBh
bmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkg
Zm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBy
ZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykK
LSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0Ojpv
ZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkds
b2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsyMDU5LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1p
dFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMjA2OSw0NSBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0g
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlm
IChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0g
Q2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsK
LQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUmVzb2x2ZVR5cGUoKSksIHJlZ1QwKTsK
IAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAg
ICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CisgICAg
ICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
KTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAg
ICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7CisgICAgICAgIGVt
aXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZh
cik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7
CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICBk
ZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1
bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3Bf
cmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwg
Q29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNl
LCBDb2RlTG9jYXRpb25MYWJlbCh2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNk
ZWZpbmUgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8j
I3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNv
bnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0g
ICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAg
IHJldHVybiBqaXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFz
ZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VB
Q0hfUkVTT0xWRV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBE
RUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0p
CiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5
IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1h
a2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxh
YmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxp
bmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkg
bm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZt
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5
IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwNjUsNiAr
MjE3Nyw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29w
ZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0yMTc4LDcg
KzIyOTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yMTg2LDkgKzIyOTksOSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdl
dEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0
RnJvbVNjb3BlLCBkc3QsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAog
I2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yMTk2LDQxICsyMzA5LDUwIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9t
U2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBS
ZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9
PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCisgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZN
JikgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoQ2xv
c3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAg
fTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3Ig
PSBbXSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayhDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRf
ZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gZ2VuZXJpY0dldEZy
b21TY29wZUdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJh
dGVPcEdldEZyb21TY29wZVRodW5rKHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9nZXRfZnJv
bV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRh
dGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCi0gICAgaWYg
KHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRyX3QqIG9wZXJhbmRT
bG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsK
LSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9w
ZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRh
ZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRh
KTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5t
ZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgR0VU
X0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9zY29wZV8jI3Jl
c29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoR0VU
X0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdFVF9GUk9NX1NDT1BF
X0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7Ci0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNb
cmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0KKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYgKHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIo
Y2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgY29kZSA9IHZtLmdl
dENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAg
IGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZyb21TY29wZUdl
bmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29w
ZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZy
b21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlz
IGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVj
YXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KQEAgLTIy
MzksNzcgKzIzNjEsNjggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcEdl
dEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAg
IENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxl
KCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFi
bGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAg
ICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hl
Y2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJfdCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNl
dCkgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0
dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBhdXRv
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIpIHsKKyAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9m
U3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7
CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkp
OworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpKTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0g
KGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdU
Myk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xv
YmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
KyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2lu
dCkpLCByZWdUMyk7CiAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Q
b2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0
cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBv
aW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRy
KHJlZywgcmVnKTsKLSAgICB9OwotCiAgICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAo
R1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgewogICAgICAgICBzdGF0aWNfYXNz
ZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5k
R1BSKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmly
b25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworICAgICAgICBqaXQubHNoaWZ0
NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmFkZFB0cihzY29w
ZUdQUiwgb3BlcmFuZEdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQ
UiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CiAg
ICAgfTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
LCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZd
IChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVj
dHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2Ug
ZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3Qu
IEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFy
IGluamVjdGlvbi4KKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3Bl
R1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRv
bid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBB
ZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBp
bmplY3Rpb24uCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwog
ICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKICAgICAgICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7CiAgICAgICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKIAotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExh
bWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFs
LCBiYXNlLCByZWdUMyk7CisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxK
dW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRy
KEVxdWFsLCBiYXNlLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29w
ZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIG9mZnNldCk7CiAgICAgICAgICAg
ICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5l
ID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJz
dE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRP
ZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0
aGlzKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdy
ZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90
T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsK
LSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAg
ICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RP
dXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5uZWczMihvZmZzZXQpOworICAg
ICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
OgpAQCAtMjMxNywyMSArMjQzMCwxOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwot
ICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAg
ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1p
dEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwg
cmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0
YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpv
ZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsKICAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFy
KHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5h
bWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM0
MSw3OSArMjQ1Miw1NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dElu
Zm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1
bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxz
ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEds
b2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxp
bmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29s
dmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9
IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykp
LCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0
cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGppdC5sb2Fk
MzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwg
cmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1w
IGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0
eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxW
YXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFy
KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAg
ICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFBy
b3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5s
aW5rKCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluaygmaml0
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgICAgIHNraXBUb0Vu
ZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAg
ICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKKyAgICAg
ICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1
ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsK
KyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9m
ZnNldE9mUHJvZmlsZSgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5r
TmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNv
bHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9w
X2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7
IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShy
ZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGpp
dCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmso
cmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUp
OyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9H
RU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9z
Y29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0
aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQg
YmVjYXVzZQpAQCAtMjQ3MSw4NiArMjU1OSw3OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAg
IHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0
V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAg
bG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJl
Z1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlm
eVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNh
bEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdp
c3RlcikpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZv
KGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVz
b2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9z
dHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0
Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7
CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1
cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdl
IGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0
LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZh
ciBpbmplY3Rpb24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBp
bmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0
IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVf
c2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Om9mZnNldE9mU3Ry
dWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywg
cmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+
KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAg
ICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwog
Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1Qx
KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BQdXRUb1Njb3BlOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwogICAgICAgICAg
ICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAg
ICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWln
aHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkp
OworICAgICAgICAgICAgLy8gT09QUzogd291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0
aGF0IHRvb2sgR1BSUmVncyBpbnN0ZWFkIG9mIFZScworICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczog
ewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50
U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAg
ICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0gICAgICAgICAgICBpZiAo
IWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisgICAgICAgICAgICBlbWl0VmFyUmVh
ZE9ubHlDaGVjayhyZXNvbHZlVHlwZSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJh
bmQoKSwgcmVnVDApOworCisgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNv
ZGUubV9nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEg
VERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBl
bWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KLSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCksIHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0
R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xv
dCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFs
dWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsK
KyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDEpOworCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBz
dG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdv
dWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciB2YWx1
ZS4KKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFJl
c29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0
YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0
KCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CisgICAgICAg
ICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJh
c2VJbmRleChyZWdUMCwgcmVnVDIsIFNjYWxlRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxkIGJlIG5p
Y2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciBvd25lci92YWx1ZS4K
ICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0y
NTY0LDU4ICsyNjQ1LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnMKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBp
bnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2Jh
bExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBh
IHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAgICAgICBp
c0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsK
LSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKKyAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1cmVWYXIvIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21waWxlIHRoaW5n
cworICAgIC8vIHRoYXQgd2F5IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2UndmUgcHJvdmVu
IHRoYXQgaXMgdGhlIHR5cGUgd2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJlVmFyLAorICAg
IC8vIGFsbCBDb2RlQmxvY2tzIHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUgQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFyCisgICAgLy8g
aWYgdGhlIHZhciBpbmplY3Rpb24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYgaXQgaXMgZmly
ZWQsIHRoZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0CisgICAgLy8gbWF0
dGVyIHdoYXQgdHlwZSB3ZSBhcmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcik7CisgICAg
ZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIpCisgICAg
ICAgIGVtaXRDb2RlKFJlc29sdmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAg
ZW1pdENvZGUoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVsc2Ugewog
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1QwKTsKICAg
ICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAv
LyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkp
OwogICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCisg
ICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmso
dGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0
cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRo
aXMpOwogCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAogICAgICAg
ICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJl
YWs7CiAgICAgfQogfQogCkBAIC0yNjI0LDE4ICsyNjk5LDIxIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigp
OwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29k
ZSkucmVzb2x2ZVR5cGUoKTsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7Cisg
ICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGlmIChw
cm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJZiBhbnkgbGlu
a2VkIENvZGVCbG9jayBzYXcgYSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBDb2RlQmxvY2tz
IGFyZSBndWFyYW50ZWVkCisgICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZhci4KICAgICAg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJv
cik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
VG9TY29wZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJndW1lbnRHUFIw
LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CiAgICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBt
X2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBBU1NF
UlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09
IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CkBAIC0yNzAxLDcgKzI3NzksNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhy
ZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyODM3LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1f
aW5kZXg7CkBAIC0yNzY3LDcgKzI4NDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJu
YWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9m
ZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApA
QCAtMjc4OSw3ICsyODY2LDYgQEAgdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bDxPcAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUu
bV9tb2RlOwpAQCAtMjgwNSw3ICsyODgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlz
IGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBj
YXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRhZGF0YS5t
X2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVj
dHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25T
dHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7
CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMih+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1
cmVNb2RlKSkpOwpAQCAtMjg0Nyw3OCArMjkyMyw4NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIg
PSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVy
YXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxp
bmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2Ny
YXRjaDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG1vZGUsIHNjcmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5TmFtZSwgcHJvcGVydHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJl
c3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRh
dGEoKSwgc2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9y
ZThUb01ldGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7
CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KLSAgICBKdW1w
IGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBpc05vdE93blN0cnVj
dHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAg
SnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVz
cyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNl
dCgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7
CisgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RF
cXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zm
c2V0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8gSWYgaW5kZXggaXMg
bGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0
J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1wIG91dE9mTGluZUFj
Y2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkp
OworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CisgICAgbG9hZDY0
KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1
bXAoKSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91dE9mTGlu
ZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJl
Z1QzKTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJl
Z1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDIp
OworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwg
c2NyYXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkg
PSBvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBzdGF0aWNfY2FzdDxp
bnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChy
ZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQ
Uik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwg
b2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5k
KGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOwotICAgIHN0b3Jl
OChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0
dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRh
KTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCBieXRlY29k
ZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAog
ICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNOb3RJbmRl
eGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJh
bmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3aXRoIHRo
ZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAgICAgaXNOb3RJ
bmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAg
ICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjkyNywxMCArMzAxMSw5IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2Uo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9
CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0
aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRl
Y29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVt
aXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5
cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjkzOSw3
ICszMDIyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwg
cmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1l
cmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29k
ZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBv
cjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUs
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAtMzAy
OCw2ICszMTEzLDEzIEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIK
ICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNo
R1BSKG93bmVyKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5saW5rKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJ
KHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDMsNyArMTU0Myw3IEBAIHN0YXRpYyB2b2lkIHJldmVy
dENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERp
c2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhT
dGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVu
bGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAg
IAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkK
QEAgLTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBP
cEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9w
ZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2Rl
U3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAg
ICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlw
ZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0
MikKICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2Nm
ciwgdDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHBy
ZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0
MSwgc3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAg
ICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRl
QXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFBy
b2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlz
cGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJv
ZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRh
ZGF0YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVn
YXRlU3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAg
IG5lZ2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVw
ZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykK
ICAgICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEg
dDEsIExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAg
ICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5
QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICBy
ZXR1cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVu
ZCkKIAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3Qs
IGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BX
aXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2Zp
bGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAg
IGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikK
ICAgICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFy
eU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAu
b3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAg
ICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlB
cml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAg
ICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQz
LCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEy
NCwxMiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAg
IGJpYSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9w
MU5vdEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAg
ICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUs
IHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkK
ICAgICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAg
ICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRh
dGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1i
ZXIsIHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEp
CiAgICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFu
ZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkg
bm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywg
LnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAg
ICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50
TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEs
IHQzLCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20JKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEzIEBA
IG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMsIGEx
CiAgICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRweiBy
MCwgLnJlY292ZXIKLQogICAgICAgICAgICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAgIyBC
YXNlbGluZSB1c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQgcG9v
bC4KKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAgbG9h
ZHAgQ29kZUJsb2NrOjptX2ppdERhdGFbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJs
b2NrOjpKSVREYXRhOjptX2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAgIGlm
IEFSTTY0RQogICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6
b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50cnkp
ICogUHRyU2l6ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRl
UHRyVGFnICMgSlNFbnRyeVB0clRhZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVxdWFs
aXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwg
b3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlw
ZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJp
dGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0K
ICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0
MQogICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNybyBw
cmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRp
b24odDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEg
dDEsIFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxl
SW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRo
UHJvZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAg
LTExMzQsMTEgKzExMzUsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdh
dGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVy
bikKLQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlw
ZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxl
OjptX2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBA
IC0xMTQ2LDEyICsxMTQyLDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5l
Z2F0ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0
MwogICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJv
ZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9m
aWxlSW50LCB0MSwgdDQpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0
cXogdDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAw
MDAwLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAg
dXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEs
IHQ0KQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNjAs
NiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0
MCkKIAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQog
ICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNp
emUsIHQwLCB0MSkKQEAgLTExNzcsNyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3Rv
cmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdl
ck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUo
QXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bj
b2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0NCkKICAgICAgICAgZGlzcGF0Y2go
KQogCiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmluYXJ5
T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcs
IC5zbG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEK
LSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJl
ciwgdDUsIHQ0KQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9w
MkludDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVw
ZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlcklu
dCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5Ogog
ICAgICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNiw3ICsxMTk4LDcgQEAgbWFjcm8gYmluYXJ5
T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMg
ZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAg
IGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKLSAgICAg
ICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQog
ICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAg
ICBmcTJkIHQxLCBmdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMjU1Niw2ICsyNTU2LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBl
bmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUs
IG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0
eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBX
ZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdF
QkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFu
ZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigp
ID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVh
YmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJs
b2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRl
bnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwg
VW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlw
ZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGlu
ZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVk
U3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBj
cmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRl
bnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9u
IDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50
aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29k
ZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9j
a1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJs
b2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBD
YWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hl
YWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJ
ZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBK
U0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkK
IHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6
TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewot
ICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7
CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQu
aXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAy
ODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUg
cHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0
aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437080</attachid>
            <date>2021-09-01 16:29:10 -0700</date>
            <delta_ts>2021-09-01 18:13:15 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>399518</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MTg2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODMxLDYgKzgzMSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IH07CiAJ
CTUyRUVENzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFRUQ3OTMyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgw
MDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIw
MDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVk
U291cmNlMy1tbS5tbSAqLzsgfTsKQEAgLTE0MTYsMTAgKzE0MTcsMTAgQEAKIAkJQTM4Q0E1OUUy
NkREODRERTAwQzhEODRDIC8qIElTTzg2MDEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEzOENBNTlDMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmgg
Ki87IH07CiAJCUEzOEQyNTBFMjU4MDBENDQwMDQyQkZERCAvKiBKU0FycmF5QnVmZmVyUHJvdG90
eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTM4RDI1MEQyNTgwMEQ0MzAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxp
bmVzLmggKi87IH07CiAJCUEzOEQ1QkZDMjY2NkQzREEwMEExMDlBNiAvKiBJbkJ5U3RhdHVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzhENUJGQTI2
NjZEM0RBMDBBMTA5QTYgLyogSW5CeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUEzRUU4NTQzMjYyNTE0QjAwMEZDOUI4RCAvKiBJbnRs
V29ya2Fyb3VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMzc2MTk0MDI2MjUxMjdDMDBDQkNCQTkgLyogSW50bFdvcmthcm91bmQuY3BwICovOyB9
OwogCQlBM0M3RURCNjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VE
QjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLzsgfTsK
IAkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIzMjZCMERCMzcw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmggKi87IH07CiAJCUEzQzdFREJBMjZCMERCMzgw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAv
KiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKKwkJQTNFRTg1NDMyNjI1MTRC
MDAwRkM5QjhEIC8qIEludGxXb3JrYXJvdW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzNzYxOTQwMjYyNTEyN0MwMENCQ0JBOSAvKiBJbnRsV29y
a2Fyb3VuZC5jcHAgKi87IH07CiAJCUEzRkY5QkM3MjIzNDc0OTEwMEIxQTlBQiAvKiBZYXJyRmxh
Z3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRkY5
QkM1MjIzNDc0NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyog
SmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTUwM0ZBMTQxODhFMEZBRjAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJh
bWUuaCAqLzsgfTsKIAkJQTUwM0ZBMUUxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENh
bGxGcmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTUwM0ZBMTgxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZVByb3RvdHlwZS5oICovOyB9OwpAQCAtMzY2Nyw2ICszNjY4LDggQEAKIAkJNTJDRDBGNjQyMjQy
RjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBwYXRoID0gZGZnL3Rlc3Rk
ZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQxMzA4RjIyMUNFMDNBMDA5
QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0g
Zm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNjI2RTAzOUIzMDA1
NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VsaW5lSklUQ29k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNzI2RTAzOUI0MDA1NEU0
MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VsaW5lSklU
Q29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkyMjQ5MkI4Njgw
MDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5j
dGlvbkFsbG93bGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkz
MjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
dW5jdGlvbkFsbG93bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1
QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI1Niw2ICs2MjU5LDggQEAKIAkJCQk2Qjc2N0U3QTI2
NzkxRjI3MDAxN0Y4RDEgLyogQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaCAqLywKIAkJCQk3MjM5
OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLywKIAkJCQk3MjM5
OThGNTI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8sCisJCQkJNTJERDAw
MDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8sCisJCQkJNTJERDAw
MDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovLAogCQkJCTBGNjRCMjZG
MUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGNjRCMjcwMUE3
ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4MzkyRDFCQUNBOUQz
MDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApAQCAtOTY5Niw2ICs5NzAxLDcgQEAK
IAkJCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTgg
LyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlDQzg5MTkzQUM2MEEw
MDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzYx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgko
cmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91cCA6
UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAg
IHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRUeXBl
cywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRhdGE6
IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJp
dGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZhbHVl
UHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5SW5Q
bGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDogVmly
dHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAg
ICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZQor
ICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDp0
b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRzdDog
VmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWdu
ZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5
QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioK
ICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
T3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBA
IFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJu
ICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
K3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4
KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhw
ciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dp
dGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3lt
Ym9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOworICAg
ICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9mZnNl
dE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6
Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3Bv
aW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJl
dHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAgY2Fz
ZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRvbmVQ
cm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1cm4g
Qnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAg
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5cGVu
YW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29kZU1l
dGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlz
aW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExpbmtJ
bmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsKIH0K
IAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0
UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50
ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjk4LDIzICsyOTMsMTEgQEAgdm9pZCBDYWxs
TGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0YS0+
c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5m
bzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwg
R1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBD
YWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8s
IENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZv
R1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0
YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxs
TGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwotICAg
ICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAgICB9
Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhT
dGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0
YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAK
LSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlDOjpZ
ZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7
CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9H
UFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMgPSBq
aXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwg
c2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFpbENh
bGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFyZUZv
clRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8vIFBv
bHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAgICAg
IGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNl
dE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAtMzM2
LDE0ICszMTksMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQog
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhlbHBl
cnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsK
LSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewog
ICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0gaml0
Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBqaXQu
bmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwogICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMubV9j
YWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihj
YWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbExv
Y2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4o
Y2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9jYXRp
b24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2sp
OwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzM4LDM0IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0aElt
cGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRyKTsK
KyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkpIHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxp
ZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0
aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9H
UFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aElt
cGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBpc1Rh
aWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExp
bmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNh
bGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRh
aWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJu
IGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0
YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNzKFVz
ZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2Fs
bGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdURk1v
dmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBD
YWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRGYXN0
UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2Fs
bExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJ
bXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6
WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENhbGxM
aW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0zNjks
MTcgKzM3NSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgCiAg
ICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRP
ZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9pZCBD
YWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5mb0dQ
UiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRy
eVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2
bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9IHVu
bGlua2VkQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIHNldFVwQ2FsbCh1bmxpbmtl
ZENhbGxMaW5rSW5mby0+Y2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRpb24g
PSB1bmxpbmtlZENhbGxMaW5rSW5mby0+ZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtlZENh
bGxMaW5rSW5mby0+ZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRh
ID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZv
LT5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPworICAg
IHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxMaW5r
SW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlv
bih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2Vk
Q29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJl
Y3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNU
YWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0gICAg
YXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0g
ICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlDLm1f
Y2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0
clRhZz4oY2FsbCk7CkBAIC0zOTUsMTEgKzQxNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0
RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwog
Ci0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3Rh
cnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFy
dCk7Ci0gICAgfSk7Ci0KICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlzIGlz
IGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgogICAgIC8vIC0gT25jZSB3ZSdyZSBsaW5rZWQgdG8g
YSBmYXN0IHBhdGgsIHRoaXMgZ29lcyBiYWNrIHRvIGJlaW5nIG5vcHMgc28gd2UgZmFsbCB0aHJv
dWdoIHRvIHRoZSBsaW5rZWQganVtcC4KICAgICBqaXQuZW1pdE5vcHMoQ0NhbGxIZWxwZXJzOjpw
YXRjaGFibGVKdW1wU2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSAr
NDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIHN0
cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZv
OworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENh
bGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0gQ2Fs
bFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAgICAg
Q2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2NhbGxl
ZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMoVk0m
LCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1fY2Fs
bGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsKQEAg
LTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlu
a0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5fVU5V
U0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWls
Q2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1p
dEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWls
Q2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZhc3RQYXRoKEND
YWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAgICAg
dm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBzdGF0aWMgdm9pZCBl
bWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJbmZv
R1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wgaXNEYXRhSUMo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9PSBV
c2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9h
bGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsyNDksNiBAQCBwdWJs
aWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAotICAgIEpJVFN0dWJS
b3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zbG93U3R1Yi5nZXQo
KTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBt
X2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsKICAgICB9CiAKLSAg
ICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
CiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX21heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJfdCBtYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDYgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zh
c3RQYXRoU3RhcnQ7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9k
b25lTG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1f
c2xvd1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAgdW5pb24gVW5pb25UeXBlIHsKQEAgLTQyNCw2
ICs0MjQsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaQogICAg
IHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3QgVW5saW5rZWRD
YWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsgLy8gQ3VycmVu
dGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxseSBwcm9kdWNl
IGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOworICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZsZURhdGE7Cit9
OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24g
MjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3MCw3ICszNzAsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhW
TSYgdm0sIFN0cnVjdHVyZSogCiAvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5rZWQg
Ynl0ZWNvZGUgZ2VuZXJhdGlvbi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdlbmVy
YXRlIGNvbnRyb2wKIC8vIGZsb3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFzb24g
Zm9yIHRoaXMgaXMgd2UgcmVseSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2FtZSBm
b3IKIC8vIGFsbCB0aGUgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2UgcmVs
eSBvbiB0aGlzIGZhY3QgYnkgY2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKLS8vIGluc2lk
ZSBVbmxpbmtlZENvZGVCbG9jay4KKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4gQWxzbywg
QmFzZWxpbmUgSklUIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3Mgb2YgYW4g
VW5saW5rZWRDb2RlQmxvY2ssCisvLyBzbyB0aGUgYnl0ZWNvZGUgbXVzdCByZW1haW4gdGhlIHNh
bWUgYmV0d2VlbiBDb2RlQmxvY2tzIHNoYXJpbmcgYW4gVW5saW5rZWRDb2RlQmxvY2suCiBib29s
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKICAgICBK
U1Njb3BlKiBzY29wZSkKIHsKQEAgLTQ2Niw2ICs0NjcsMTkgQEAgYm9vbCBDb2RlQmxvY2s6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBicmVhazsgXAogICAgIH0KIAorI2RlZmlu
ZSBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6
IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRh
dGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShi
eXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVm
aW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3Ap
OiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFk
YXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlLT51bmFyeUFyaXRoUHJvZmlsZShi
eXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisKICAg
ICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25TdHJlYW0gPSBpbnN0cnVjdGlv
bnMoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uIDogaW5zdHJ1Y3Rpb25TdHJl
YW0pIHsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KTsKQEAgLTUyOCwxNCArNTQyLDE0IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFMKICAgICAgICAgTElOSyhPcENyZWF0ZVByb21pc2UpCiAgICAgICAgIExJTksoT3BD
cmVhdGVHZW5lcmF0b3IpCiAKLSAgICAgICAgTElOSyhPcEFkZCkKLSAgICAgICAgTElOSyhPcE11
bCkKLSAgICAgICAgTElOSyhPcERpdikKLSAgICAgICAgTElOSyhPcFN1YikKLQotICAgICAgICBM
SU5LKE9wTmVnYXRlKQotICAgICAgICBMSU5LKE9wSW5jKQotICAgICAgICBMSU5LKE9wRGVjKQor
ICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BBZGQpCisgICAgICAgIExJ
TktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcE11bCkKKyAgICAgICAgTElOS19XSVRIX0JJ
TkFSWV9BUklUSF9QUk9GSUxFKE9wRGl2KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRI
X1BST0ZJTEUoT3BTdWIpCisKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUo
T3BOZWdhdGUpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wSW5jKQor
ICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcERlYykKIAogICAgICAgICBM
SU5LKE9wSm5lcVB0cikKIApAQCAtNzg5LDYgKzgwMyw3NiBAQCB2b2lkIENvZGVCbG9jazo6Zmlu
aXNoQ3JlYXRpb25Db21tb24oVk0mCiAgICAgbV9vd25lckVkZ2Uuc2V0KHZtLCB0aGlzLCBFeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpjcmVhdGUodm0sIHRoaXMpKTsKIH0KIAordm9pZCBDb2Rl
QmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZlB0cjxCYXNlbGluZUpJVENv
ZGU+IGppdENvZGUpCit7CisgICAgc2V0SklUQ29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAg
ICB7CisgICAgICAgIGNvbnN0IGF1dG8mIGppdENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVy
cygpOyArK2kpIHsKKyAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9u
SGFuZGxlcihpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMz
MTg+LgorICAgICAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5
dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPigpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQoIW1faml0RGF0
YSk7CisgICAgYXV0byBqaXREYXRhID0gbWFrZVVuaXF1ZTxKSVREYXRhPigpOworCisgICAgaml0
RGF0YS0+bV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS5tX2Nv
bnN0YW50UG9vbC5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaml0Q29kZS5t
X2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiBlbnRyeSA9IGppdENv
ZGUubV9jb25zdGFudFBvb2wuYXQoaSk7CisgICAgICAgIHN3aXRjaCAoZW50cnkudHlwZSkgewor
ICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0OgorICAgICAg
ICAgICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2xbaV0gPSBtX2dsb2JhbE9iamVjdC5nZXQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6Q2FsbExpbmtJbmZvOiB7CisgICAgICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5s
aW5rZWRDYWxsTGlua0luZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRDYWxsTGlua0luZm8qPihl
bnRyeS52YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
byA9IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxM
aW5rSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAvLyBPT1BTOiBkb24ndCBoYXJk
Y29kZSB0aGVzZSByZWdpc3RlcnMgbGlrZSB0aGlzLgorICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5pbml0aWFsaXplRGF0YUlDKHZtKCksICp1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6
cmVnVDAsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgIGppdERhdGEtPm1faml0Q29uc3Rh
bnRQb29sW2ldID0gY2FsbExpbmtJbmZvOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7
CisgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZv
ID0gKnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRyeS52YWx1ZS5n
ZXQoKSk7CisgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBqaXREYXRh
Lm1fc3R1YkluZm9zLT5hZGQodW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlLCBDb2RlT3JpZ2lu
KHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgc3R1YkluZm8t
PmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyh0aGlzLCB1bmxpbmtlZFN0
dWJJbmZvKTsKKyAgICAgICAgICAgIGppdERhdGEtPm1faml0Q29uc3RhbnRQb29sW2ldID0gc3R1
YkluZm87CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnZhbHVlLmdldCgpKTsKKyAgICAg
ICAgICAgIGppdERhdGEtPm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25EZWNsKGluZGV4
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHI6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkudmFsdWUuZ2V0KCkpOworICAgICAgICAg
ICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5kZXgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKKyAgICAgICAgbV9qaXREYXRhID0gV1RGTW92ZShqaXREYXRhKTsKKyAgICB9CisK
KyAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIEdsb2JhbENvZGU6CisgICAgY2Fz
ZSBNb2R1bGVDb2RlOgorICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAgIG1fc2hvdWxkQWx3YXlz
QmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRnVuY3Rpb25Db2Rl
OgorICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1
c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCisgICAgICAgIC8vIERvbid0IG92
ZXJyaWRlIHRoYXQgb2JzZXJ2YXRpb24uCisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
ICY9IGNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwoKSkgJiYgREZHOjptaWdodElubGluZUZ1bmN0
aW9uKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIENvZGVCbG9jazo6fkNvZGVC
bG9jaygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC0zMDc5LDcgKzMxNjMsNyBAQCB1bnNp
Z25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUoSklUKQog
ICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBKSVQ6OmZyYW1l
UmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3Rl
ckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMyOTUsMTMgKzMzNzksMTMgQEAgQmluYXJ5
QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRjaCAocGMtPm9w
Y29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BB
ZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+
YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9t
dWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJp
dGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMp
Lm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1cm4gJnBjLT5h
czxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJu
IHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNl
IG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcyku
bV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEo
dGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAg
fQpAQCAtMzMxMywxMSArMzM5NywxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjp1
bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3Bf
bmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAgICAgICAgcmV0
dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAg
ICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVjPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGVjPigp
Lm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKKyNpbmNsdWRlICJCYXNlbGluZUpJVENv
ZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQ2FsbExp
bmtJbmZvLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSGFzaC5oIgpAQCAtMTU4LDcgKzE1OSw5IEBA
IHB1YmxpYzoKICAgICBNZXRhZGF0YVRhYmxlKiBtZXRhZGF0YVRhYmxlKCkgY29uc3QgeyByZXR1
cm4gbV9tZXRhZGF0YS5nZXQoKTsgfQogCiAgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQorcHJpdmF0ZToKICAgICB2b2lkIHNldE51
bVBhcmFtZXRlcnModW5zaWduZWQgbmV3VmFsdWUpOworcHVibGljOgogCiAgICAgdW5zaWduZWQg
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9mQXJndW1l
bnRzVG9Ta2lwOyB9CiAKQEAgLTE2Nyw3ICsxNzAsNiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQg
bnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQogICAgIHVuc2lnbmVkIG51bVRt
cHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hlY2twb2ludHMoKSAqIG1h
eE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKLSAgICB1bnNpZ25lZCogYWRkcmVzc09mTnVtUGFyYW1l
dGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxv
Y2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KIAogICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihtX2FsdGVybmF0aXZlLmdldCgp
KTsgfQpAQCAtMjMyLDE2ICsyMzQsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRW
TVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9p
bnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRoZSBvcHRp
bWl6YXRpb24gd2hlcmUgd2UgcmV0dXJuIHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFuZCB3ZSdy
ZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxMDE0NQotICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlZy5vZmZz
ZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fbnVtVmFycyk7CkBAIC0yNjYsOCArMjU4LDEwIEBA
IHB1YmxpYzoKICAgICB2b2lkIGdldElDU3RhdHVzTWFwKElDU3RhdHVzTWFwJiByZXN1bHQpOwog
ICAgIAogI2lmIEVOQUJMRShKSVQpCisgICAgLy8gT09QUzogbW92ZSBhcml0aG1ldGljIElDcyBh
bmQgc3dpdGNoIHRhYmxlcyBvdXQgb2YgaGVyZSwgYW5kIG9udG8gSklUQ29kZS4KICAgICBzdHJ1
Y3QgSklURGF0YSB7CiAgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAg
ICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgICAgICBCYWc8
U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9zOwogICAgICAgICBCYWc8SklUQWRkSUM+IG1f
YWRkSUNzOwpAQCAtMjgyLDkgKzI3NiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKICAgICAgICAgYm9v
bCBtX2hhc0NhbGxlZVNhdmVSZWdpc3RlcnMgeyBmYWxzZSB9OwogICAgICAgICBSZWdpc3RlckF0
T2Zmc2V0TGlzdCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7Ci0gICAgICAgIEpJVENvZGVNYXAgbV9q
aXRDb2RlTWFwOworCisgICAgICAgIEZpeGVkVmVjdG9yPHZvaWQqPiBtX2ppdENvbnN0YW50UG9v
bDsKKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKSVREYXRhLCBtX2ppdENvbnN0YW50UG9vbCk7IH0KICAg
ICB9OwogCisgICAgdm9pZCBzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShSZWZQdHI8QmFz
ZWxpbmVKSVRDb2RlPik7CisKICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRhKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYgbG9ja2VyKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShtX2ppdERh
dGEpKQpAQCAtMjkzLDYgKzI5MSw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgSklURGF0YSYgZW5z
dXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSklURGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1faml0RGF0YSk7IH0KKwogICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5hcnlB
cml0aFByb2ZpbGUqKTsKICAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9m
aWxlKik7CiAgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CkBA
IC0zMjIsMTUgKzMyMiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlu
a0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgogICAgIENhbGxM
aW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsK
ICAgICAKLSAgICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29kZU1hcCYmIGppdENvZGVNYXApCi0g
ICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAg
IGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVNYXAp
OwotICAgIH0KICAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCkKICAgICB7Ci0gICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIGVu
c3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXA7CisgICAgICAgIEFTU0VSVChqaXRUeXBl
KCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFwOwogICAgIH0K
IAogICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2Rl
T3JpZ2luTWFwPiYmKTsKQEAgLTQ3Miw2ICs0NjcsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcg
bmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KENvZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9CiAgICAgdW5zaWduZWQgbnVt
YmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fYXJn
dW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9udW1Q
YXJhbWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNlSklUKCkpOwpAQCAtNTcyLDYgKzU2OCw3IEBAIHB1
YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFu
dEluZGV4KCldLmdldCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJl
ZykgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHJlZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKGluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNWZWN0
b3JCdWZmZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0YW50
UmVnaXN0ZXJzKSArIGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5T2Zm
c2V0KCk7IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRl
eCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1i
ZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBA
IC02MDEsNiArNTk4LDExIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXRE
YXRhKTsKICAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOwogICAgIH0KKyAgICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5lU3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGlu
ZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CisgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1w
VGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRT
d2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYg
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5r
ZWRDb2RlLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNjExLDYg
KzYxMywxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7CiAg
ICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsKICAgICB9CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRjaEp1
bXBUYWJsZShpbnQgdGFibGVJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChqaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFz
ZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
W3RhYmxlSW5kZXhdOworICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5u
dW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0
YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTc5Nyw2ICs4MDQsNyBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyUmVx
dWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZt
X2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRGVidWdn
ZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fZGVidWdn
ZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVh
a3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9p
bnRzKQpAQCAtODM4LDYgKzg0Niw3IEBAIHB1YmxpYzoKICAgICBtdXRhYmxlIENvbmN1cnJlbnRK
U0xvY2sgbV9sb2NrOwogCiAgICAgYm9vbCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZDsgLy8gTm90
IGEgYml0ZmllbGQgYmVjYXVzZSB0aGUgSklUIHdhbnRzIHRvIHN0b3JlIHRvIGl0LgorICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7IH0KIAog
I2lmIEVOQUJMRShKSVQpCiAgICAgdW5zaWduZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7
IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCkBAIC05MDYsMTEgKzkxNSw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpOyB9CiAKLSAgICBib29sIGxv
b3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKLSAgICB7Ci0gICAgICAg
IC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9v
cHMgdGhleSBydW4uCi0gICAgICAgIHJldHVybiAhbV91bmxpbmtlZENvZGUtPmlzQnVpbHRpbkZ1
bmN0aW9uKCk7Ci0gICAgfQorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5n
RWFybHlSZXR1cm4oKSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bG9vcEhpbnRzQXJlRWxpZ2li
bGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5h
bGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJldmlz
aW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAgcHVibGlj
OgogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwKENvZGVCbG9jayog
Y29kZUJsb2NrKTsKICAgICAKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSog
d3JhcEFuZEFjdGl2YXRlKENvZGVCbG9jayogY29kZUJsb2NrKTsKKworICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZSwgbV9jb2RlQmxvY2spOyB9CiAgICAgCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCShyZXZpc2lvbiAyODE4
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoR2V0
QnlJZE1vZGVNZXRhZGF0YQogCiBzdHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3Ro
IHsKICAgICBBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1v
ZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBhcnJheVByb2ZpbGUpOyB9CiB9Owogc3RhdGljX2Fzc2Vy
dChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoKSA9PSAxMik7CiAKQEAgLTg4
LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRN
b2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7IC8vIFRo
aXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
R2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhRGVm
YXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5zZXRNb2Rl
OwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1vZGU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNw
cAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
bGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NSw2ICszODUsOCBAQCBib29sIElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJ
bmxpbmU7CiB9CiAKKy8vIE9PUFM6IE1ha2UgdGhpcyBzdHVmZiB3b3JrIHdpdGggZGF0YSBpY3Mg
dG8gbm90IGFzc3VtZSBpbmxpbmUgYWNjZXNzLgorCiB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHRhcmdldCkKIHsKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkgewpAQCAtNDA0LDkgKzQwNiwxMiBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjCiB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQpCiB7CiAgICAgaWYgKGNvZGVC
bG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gT09QUzogbWFrZSBzb21lIHZlcnNpb24g
b2YgSW5saW5lQWNjZXNzIGZvciBiYXNlbGluZS4gUGVyaGFwcyBtYWtlIGl0IGRhdGEgZHJpdmVu
LiBPciBwZXJoYXBzIGhhdmUgdGhlIGNvZGUKKyAgICAgICAgLy8gYmUgc2hhcmVkIHNvbWVob3cg
YmV0d2VlbiBVbmxpbmtlZENvZGVCbG9ja3MuCisKICAgICAgICAgLy8gSWYgaXQgaXMgbm90IEdl
dEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQgKGUuZy4gR2V0QnlWYWwp
LgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGlyZWN0IGp1bXAsIGFuZCBv
bmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2RlUHRyLgotICAgICAgICBp
ZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAgICAgIGlmIChjb2RlQmxv
Y2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBzdHViSW5mby5oYXNDb25z
dGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29kZVB0ciBpcyBwb2ludGlu
ZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMgbWVhbnMgdGhhdCBJbmxp
bmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAgICAgIC8vIFdlIHJld3Jp
dGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNvZGUgb25jZSwgYW5kIGNv
bnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgogICAgICAgICAgICAgaWYg
KHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09IHN0dWJJbmZvLnNsb3dQ
YXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CkBAIC00MjEsNiArNDI2LDcg
QEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgICAgICAgICAg
ICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5raW5nIHN0dWIgY2FsbCIpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CisKICAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gdGFyZ2V0OwogICAg
ICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24gMjgxODY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0VfT1BFUkFU
T1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7CiAgICAg
dWludDhfdCBzZWVuTW9kZXMgeyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNl
ZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0YWRhdGEs
IHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc2Vlbk1v
ZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUg
IlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
UG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTI4NSw2ICsy
ODYsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgICAg
IHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OlB1dFByaXZhdGVOYW1lOgogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMs
IFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6
OkluQnlJZDoKQEAgLTQzMCw2ICs0MzIsMjA0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6c2UKICAgICBtX2NhY2hlVHlwZSA9IG5ld0NhY2hlVHlwZTsKIH0KIAordm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKENvZGVCbG9jayogY29kZUJsb2NrLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxp
bmtlZFN0dWJJbmZvKQoreworICAgIGFjY2Vzc1R5cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vz
c1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0YXJ0OyAvLyBPT1BTOiBkbyB3
ZSBuZWVkIGEgc3RhcnQgZm9yIGRhdGEgSUNzPworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2Vk
U3R1YkluZm8uZG9uZUxvY2F0aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlu
a2VkU3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBD
YWxsU2l0ZUluZGV4KHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgY29kZU9y
aWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBt
X2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICB1c2VkUmVnaXN0ZXJzID0g
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIGlmIChhY2Nlc3NU
eXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwgd2UgY2Fu
J3QgY2xvYmJlciB0aGUgc2NyYXRjaCByZWdpc3RlciBlaXRoZXIuCisgICAgICAgIHVzZWRSZWdp
c3RlcnMuYWRkKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaCk7CisgICAgfQorCisg
ICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZh
bDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkluQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJ
bkJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBzd2l0Y2ggKHVubGlua2Vk
U3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAg
ICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAg
ICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0
dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZh
dGVGaWVsZFNldDoKKyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5
SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6Cisg
ICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNhc2Ug
UHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNt
YU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJl
Y3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgp
KQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBwcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmlu
ZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRl
QnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFu
ZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJp
dmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZh
dGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFj
Y2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBo
YXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5l
RGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNl
bGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNl
bGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBC
YXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAg
dmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9z
dHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpHZXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFs
c2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VP
ZjoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHByb3Rv
dHlwZUlzS25vd25PYmplY3QgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MucHJvdG90eXBlR1BSID0gQmFz
ZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9
IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAg
ICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBi
YXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BS
ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQ
UiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0
QnlJZERpcmVjdDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIGhhc0Nv
bnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRH
UFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7
CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgcmVn
cy50aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsK
KyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlk
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRo
aXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlk
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lz
dGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGlmIChhY2Nlc3NUeXBl
ID09IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsKQorICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxz
ZTsKKyAgICAgICAgdmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MuYnJhbmRH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyODE4
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJSb3V0
aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgi
CisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCkBAIC01Niw2ICs1Nyw3
IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlWYWwsCiAgICAg
UHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAgICBJbkJ5SWQs
CiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzgwLDggQEAgZW51
bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAorc3Ry
dWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZv
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFsaXpl
RnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBD
aGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0
IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTQ0Nyw2ICs0NTMsMTggQEAgaW5saW5l
IGF1dG8gYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bgogICAgIH0KIH0KIAorc3RydWN0IFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8geworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAg
ICBQdXRLaW5kIHB1dEtpbmQ7CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQ
dXRLaW5kOworICAgIEVDTUFNb2RlIGVjbWFNb2RlOworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleDsKKyAgICAvLyBPT1BTOiBEbyB3ZSBuZWVkIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMg
aXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9y
IHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4K
KyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRM
b2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkNvZGVUeXBlLmgiCiAjaW5jbHVkZSAiREZHRXhp
dFByb2ZpbGUuaCIKQEAgLTYyLDYgKzYzLDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiBj
bGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEJhc2Vs
aW5lSklUQ29kZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKIGVudW0gY2xhc3MgTGlua1RpbWVD
b25zdGFudCA6IGludDMyX3Q7CiAKQEAgLTE3NSw2ICsxNzcsNyBAQCBwdWJsaWM6CiAKICAgICBj
b25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVy
cygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9Cisg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgp
XTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBt
X2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBAIC0yMDcsNiArMjEwLDE1
IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQog
CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0OworICAg
IGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIoKTsgfQorICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7
CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCku
YXQoMCkucHRyKCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1
Y3Rpb24gPCBpbnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBp
bnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25zU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLnNpemUoKTsgfQogCiAgICAgdW5zaWduZWQg
bnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KICAg
ICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CkBAIC0zMzQs
NiArMzQ2LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWV0YWRhdGEtPnNpemVJbkJ5
dGVzKCk7CiAgICAgfQogCisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdF
YXJseVJldHVybigpCisgICAgeworICAgICAgICAvLyBTb21lIGJ1aWx0aW5zIGFyZSByZXF1aXJl
ZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRoZXkgcnVuLgorICAgICAgICByZXR1cm4g
IWlzQnVpbHRpbkZ1bmN0aW9uKCk7CisgICAgfQogCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRD
b2RlQmxvY2soVk0mLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8m
LCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPik7CkBAIC0zOTQsNiArNDExLDcgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX2xleGljYWxTY29wZUZlYXR1cmVzIDogNDsKIHB1YmxpYzoK
ICAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKKyAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2Rl
PiBtX3VubGlua2VkQmFzZWxpbmVDb2RlOwogcHJpdmF0ZToKICAgICBDb2RlRmVhdHVyZXMgbV9m
ZWF0dXJlcyB7IDAgfTsKICAgICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC00MTAs
NiArNDI4LDkgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJl
YW0+IG1faW5zdHJ1Y3Rpb25zOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM+IG1fbGl2ZW5lc3M7CiAKKyAgICAvLyBPT1BTOiBiaW5kIGEgYmV0dGVyIHBsYWNl
IHRvIHN0b3JlIHRoaXMgc3R1ZmY/CisgICAgVmVjdG9yPEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9i
aW5hcnlBcml0aFByb2ZpbGVzOworICAgIFZlY3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4gbV91bmFy
eUFyaXRoUHJvZmlsZXM7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9m
aWxlIG1fZXhpdFByb2ZpbGU7CkBAIC00NTUsNiArNDc2LDI4IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uLm9mZnNldCgpKTsK
ICAgICB9CisgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBj
KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSB0aGlzLT5ieXRlY29k
ZU9mZnNldChwYyk7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUoKQor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9iaW5hcnlBcml0aFByb2ZpbGVzLnNp
emUoKTsKKyAgICAgICAgbV9iaW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5hcnlBcml0aFBy
b2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdW5zaWduZWQg
YWRkVW5hcnlBcml0aFByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0g
bV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX3VuYXJ5QXJpdGhQcm9maWxl
cy5hcHBlbmQoVW5hcnlBcml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWdu
ZWQgaSkgeyByZXR1cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0
aFByb2ZpbGUmIHVuYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlB
cml0aFByb2ZpbGVzW2ldOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRh
cmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY3LDYgKzY3LDggQEAgcHVibGljOgogICAgIGJvb2wgd2FzQ29tcGlsZWRXaXRoRGVi
dWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT53YXNDb21waWxlZFdp
dGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0KICAgICBib29sIGhhc0NoZWNrcG9pbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlQmxvY2stPmhhc0NoZWNrcG9pbnRzKCk7IH0KICAgICBib29sIGhhc1Rh
aWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5oYXNUYWlsQ2FsbHMoKTsgfQor
ICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2Nr
LT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKTsgfQorICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQ
cm9maWxlKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCk7IH0K
IAogICAgIC8vIFVwZGF0aW5nIFVubGlua2VkQ29kZUJsb2NrLgogICAgIHZvaWQgc2V0SGFzQ2hl
Y2twb2ludHMoKSB7IG1fY29kZUJsb2NrLT5zZXRIYXNDaGVja3BvaW50cygpOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRh
dGFUYWJsZS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw5ICsx
MDEsMTggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAg
ICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNl
dDE2ID0gdWludDE2X3Q7CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVp
bnRwdHJfdCBvZmZzZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAg
eworICAgICAgICBBU1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNl
VHlwZU9mZnNldCA9IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlE
XSA6IG9mZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgcmV0dXJuIGJh
c2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRh
dGFJRDsKKyAgICB9CisKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNfb2Zmc2V0VGFi
bGVFbnRyaWVzID0gTlVNQkVSX09GX0JZVEVDT0RFX1dJVEhfTUVUQURBVEEgKyAxOyAvLyBvbmUg
ZXh0cmEgZW50cnkgZm9yIHRoZSAiZW5kIiBvZmZzZXQ7CiAKICAgICAvLyBOb3QgdG8gYnJlYWsg
YWxpZ25tZW50IG9mIDMyYml0IG9mZnNldCB0YWJsZSwgd2Ugcm91bmQgdXAgc2l6ZSB3aXRoIHNp
emVvZihPZmZzZXQzMikuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYg
QEAgdGVtcGxhdGU8dW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzQXJndW1lbgogc3RydWN0IFZhbHVl
UHJvZmlsZUJhc2UgewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNr
ZXRzID0gbnVtYmVyT2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBudW1iZXJPZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBidWNrZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tl
dHMgKyBudW1iZXJPZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNl
KCkKQEAgLTEzNCw3ICsxMzMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29k
ZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxh
dGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTU2LDYgKzE1NSw3IEBAIHN0
cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJv
ZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAg
ICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4o
KSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBz
dHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmls
ZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0VW5hcnkKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRo
aXMsIGRzdCwgc3JjLCB0eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBz
cmMsIHR5cGUsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90
Pihkc3QsIHNyYyk7CkBAIC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRJbmMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0Rz
dCk7CisgICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlB
cml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVj
OjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2Nv
ZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02ODIsNyArNjgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklE
Kj4KICAgICAgICAgZW1pdEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3Jj
MSwgUmVnaXN0ZXJJRCogc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAg
ICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1f
Y29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4g
ZHN0OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODg5LDcgKzg4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAg
IGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNl
dEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFt
ZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5Niw3ICs4OTYsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93
Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVH
UFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAg
ICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2pp
dCwgY2FsbGVlR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENh
bGwpIHsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEo
c2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBz
aHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgxODY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5ODUsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQdXRQcml2YXRlTmEKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNl
ZFJlZ2lzdGVycygpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwg
QWNjZXNzVHlwZTo6UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVC
bG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBl
OjpQdXRQcml2YXRlTmFtZSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBh
eWxvYWRPbmx5KGJhc2VHUFIpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIp
LCB2YWx1ZVJlZ3MsIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1Yklu
Zm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAKQEAgLTE0NzQ3LDcgKzE0NzQ3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVS
ZWcgPSBzY29wZS5ncHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0
KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwg
Y2FsbFNpdGVJbmRleCk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hh
ZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihtX2ppdC5jb2RlQmxvY2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5v
ZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMTcsNyArNDMxNyw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0Y2goMCkgOiBJbnZhbGlkR1BS
UmVnOwogCiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeVZhbEdlbmVy
YXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6
OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQ
dXRCeVZhbCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJ
VCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRQcml2
YXRlTmFtZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAKICAgICAgICAgICAg
IGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CkBAIC0xMDM1
NSw3ICsxMDM1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2lu
KTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86
OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQ
YXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJl
Z1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7Cisg
ICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAg
ICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZv
clRhaWxDYWxsKCk7CiAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDY5OCw3ICsxMDY5OCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0
aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAg
ICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52
YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
aml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5l
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJl
cGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwOTc5
LDcgKzEwOTc5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25l
OwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUklu
Zm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsm
XSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAg
IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJi
CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01l
dGFkYXRhLnJiCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjIgQEAgY2xhc3MgTWV0YWRh
dGEKICAgICBkZWYgc3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAg
ICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBjb252ZXJ0
RmllbGRzKHByZWZpeCwgZmllbGRzLCBnZW5lcmF0ZU9mZnNldE9mKQogICAgICAgICAgICAgZmll
bGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29m
PyBIYXNoCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRG
aWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAg
ICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAg
JywgdHlwZSwgZmFsc2UpfVxuI3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsi
CisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGROYW1lfTsi
CisgICAgICAgICAgICAgICAgICAgIGlmIGdlbmVyYXRlT2Zmc2V0T2YKKyAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSByZXN1bHQgKyAiXG4iICsgIiN7cHJlZml4fXN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAgICAg
ICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdAogICAgICAgICAg
ICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAg
ICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzKQorICAgICAg
ICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAgICAgICIsIEBmaWVsZHMsIHRydWUpCiAKICAg
ICAgICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAmJiAobm90IEBpbml0
aWFsaXplcnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTgsOCArNjk4
LDEzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXMKIAogdm9pZCBB
c3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFs
T2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3Zp
bmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIENhbGxMaW5rSW5m
byogaW5mbykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1Qy
KTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtUYXNrKFs9LCAmdm1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShy
ZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzE4LDYgKzE3MTgsNyBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBD
YWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9i
YWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsKICAgICAKICAgICB2b2lkIG1ha2VTcGFjZU9u
U3RhY2tGb3JDQ2FsbCgpOwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3Bw
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCYXNlbGluZUpJVENvZGUuaCIKKworI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1
ZGUgIkp1bXBUYWJsZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitKSVRBZGRJQyogTWF0aElDSG9sZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJv
ZmlsZSk7IH0KK0pJVE11bElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxl
KTsgfQorSklUU3ViSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9
CitKSVROZWdJQyogTWF0aElDSG9sZGVyOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorCit2
b2lkIE1hdGhJQ0hvbGRlcjo6YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCit7Cisg
ICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICBtX211bElDcyA9IFdU
Rk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25l
Z0lDcyk7CisgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKK30KKworQmFz
ZWxpbmVKSVRDb2RlOjpCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2Rl
LCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgIDogRGlyZWN0SklU
Q29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQp
CisgICAgLCBNYXRoSUNIb2xkZXIoKQoreyB9CisKK0Jhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5l
SklUQ29kZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRl
ICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworLy9jbGFzcyBKSVRBZGRJQzsKKy8vY2xhc3MgSklUTXVsSUM7CisvL2NsYXNzIEpJVFN1YklD
OworLy9jbGFzcyBKSVROZWdJQzsKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVu
YXJ5QXJpdGhQcm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CitzdHJ1
Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3MgTWF0
aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXIm
IG90aGVyKTsKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7
CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJ
VFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyog
YWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworICAgIC8qCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Cisg
ICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0
dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxH
ZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRNdWxJQyog
YWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVs
SUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVu
YW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklU
TmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5h
cnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46
OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmls
ZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKyAgICAqLworCitw
cml2YXRlOgorICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBt
X211bElDczsKKyAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJhZzxKSVRTdWJJQz4g
bV9zdWJJQ3M7Cit9OworCitjbGFzcyBKSVRDb25zdGFudFBvb2wgeworcHVibGljOgorICAgIHVz
aW5nIENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90
IHsKKyAgICAgICAgR2xvYmFsT2JqZWN0LAorICAgICAgICBDYWxsTGlua0luZm8sCisgICAgICAg
IFN0cnVjdHVyZVN0dWJJbmZvLAorICAgICAgICBGdW5jdGlvbkRlY2wsCisgICAgICAgIEZ1bmN0
aW9uRXhwciwKKyAgICB9OworCisgICAgc3RydWN0IFZhbHVlIHsKKyAgICAgICAgVHlwZSB0eXBl
OworICAgICAgICBQYWNrZWRQdHI8dm9pZCo+IHBheWxvYWQ7CisgICAgfTsKKworICAgIEpJVENv
bnN0YW50UG9vbCgpID0gZGVmYXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQ
b29sJiYpID0gZGVmYXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25z
dGFudFBvb2wmJikgPSBkZWZhdWx0OworCisgICAgQ29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgUGFj
a2VkUHRyPHZvaWQqPiBwYXlsb2FkID0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFudHMuYXBwZW5k
KFZhbHVlIHsgdHlwZSwgcGF5bG9hZCB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzLnNpemUoKTsg
fQorICAgIFZhbHVlIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpXTsg
fQorCitwcml2YXRlOgorICAgIFZlY3RvcjxWYWx1ZT4gbV9jb25zdGFudHM7Cit9OworCisKK2Ns
YXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElD
SG9sZGVyIHsKK3B1YmxpYzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRy
VGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKTsKKyAgICB+
QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisKKyAgICBCYWc8VW5saW5rZWRDYWxsTGlua0lu
Zm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlu
a0luZm9zOyAvLyBPT1BTOiBtYWtlIHN1cmUgd2UgdmlzaXQgdGhlc2Ugc29tZWhvdy4gT3IgYXNz
ZXJ0IHdlIGRvbid0IGhhdmUgdG8sIHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KKyAgICBC
YWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICBG
aXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBGaXhl
ZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAgICBK
SVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBv
b2w7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNvbnN0
CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUoKQogewotICAg
IENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKCk7
CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJl
YWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxh
dGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRl
bGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblBy
b2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhl
bHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpT
VmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAg
ICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNj
b3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2sp
LCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5k
ZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJz
OjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwg
R1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93
Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAgLTcyLDYgKzYy
LDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEKICAgICBzdG9y
ZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikpOwogfQogCisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRv
d0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0
aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNr
ZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dD
aGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgc3RvcmVW
YWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFk
b3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9yZVB0cihzY29wZSwgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0
ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBz
Y29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0
aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKK3ZvaWQgQ0Nh
bGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0
LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxT
aXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVkTGFtYmRhPHZv
aWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKIHsK
ICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
Q2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ND
YWxsSGVscGVycy5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDE0IEBAIHB1
YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJlZ2lz
dGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Agb2YKICAgICAv
LyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxvZ1NoYWRvd0No
aWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDEs
IEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJS
ZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2Rl
QmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1w
bChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3Bl
LCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsK
K3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFk
b3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1Q
dHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworICAgIHZvaWQgbG9n
U2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3Mg
dGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRoZSBQ
YWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2b2lkIGVuc3Vy
ZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2Ny
YXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCShyZXZpc2lvbiAy
ODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29kZUJs
b2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVE
YXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVn
aXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07Ci0gICAgY29u
c3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVCbG9j
ay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBy
ZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCShyZXZp
c2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIEdQ
UlJlZyBudW1iZXJUYWdSZWdpc3RlciB7IEludmFsaWRHUFJSZWcgfTsKIAogICAgIHZvaWQgc2V0
dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayopOworICAgIHZvaWQgc2V0dXBDYWxsZWVT
YXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0Kik7CiAjZW5kaWYKICAgICBW
YWx1ZVJlY292ZXJ5IGNhbGxlZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgOiBKU0lu
dGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgbnVs
bHB0cikKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVs
cyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCiAgICAg
LCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAgLTc3LDYgKzc3LDkgQEAgSklUOjpK
SVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJv
ZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25zdGFudCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7CisgICAg
bV9wcm9maWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICBtX3VubGlua2VkQ29kZUJsb2Nr
ID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAt
OTAsOCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAg
ICAgICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0gICAgCi0gICAgc2tp
cE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25z
OjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyht
X2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIHNraXBP
cHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6
ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVz
RnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9w
RW50cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNiwxOCBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdy
aXRlKFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVy
VG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRl
clRvU2V0KQogewogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9p
bnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25seUNoZWNrKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlKQordm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25seUNoZWNrKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhclJlYWRPbmx5V2F0Y2hw
b2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
c2NyYXRjaEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFyUmVhZE9ubHlXYXRjaHBvaW50KSksIHNjcmF0
Y2hHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHNjcmF0
Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0lu
dmFsaWRhdGVkKSkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9m
ZnNldCgpCkBAIC0xMjksNyArMTM1LDcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9m
ZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOworICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CiAgICAg
SnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
ICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsKQEAgLTE4MSwyMSArMTg3LDQx
IEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWMKICAgICBzbG93UGF0
aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblBy
b2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENv
ZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOworICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVzdWx0KTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVE
YXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGJyYW5jaFRlc3RQdHIo
WmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJl
RGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uUmFyZURhdGE6
Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCByZXN1bHQp
OworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBG
dW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkpLCByZXN1
bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25F
eGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSksIHJlc3VsdCk7CisKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpvZmZzZXRP
ZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVz
dWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworfQorCiB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAg
ICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgZGF0
YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4iKTsKICAgICAKICAg
ICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5l
KCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxvY2stPmluc3RydWN0
aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fdW5saW5rZWRD
b2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAKICAgICBtX2Nh
bGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJsb2NrLT52bSgpOwor
ICAgIFZNJiB2bSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnZtKCk7CiAgICAgQnl0ZWNvZGVJbmRl
eCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7CisKKyAgICAvLyBPT1BTOiBNYXliZSBvbmx5IGRvIHRo
aXMgaWYgd2UgZGlzYWJsZSBzaGFyaW5nIHNvbWVob3c/CisgICAgLyoKICAgICBpZiAobV9sb29w
T1NSRW50cnlCeXRlY29kZUluZGV4ICYmIChtX2NvZGVCbG9jay0+aW5oZXJpdHM8UHJvZ3JhbUNv
ZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0czxNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrPih2bSkpKSB7CiAgICAgICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgb3B0aW1pemF0aW9u
IGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFtQ29kZUJsb2NrJ3MgZXhhY3RseSBvbmNlLgogICAg
ICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBiZSBpbnZhbGlkIG90aGVyd2lzZS4gV2hl
biB0aGUgTExJbnQgZGV0ZXJtaW5lcyBpdCB3YW50cyB0bwpAQCAtMjM2LDYgKzI2Miw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KKyAgICAqLwogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAw
OwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CkBAIC0yNzgsOSArMzA1LDkg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAgIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewotICAgICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAgICAgICAgIHBy
b2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7Ci0gICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJ
RF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKKyAg
ICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigp
LT5jb2RlQmxvY2soKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNv
ZGVPZmZzZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRl
cihjdHguZnAoKSksICIgQCAiLCBjdHguZ3ByPENvZGVCbG9jayo+KHJlZ1QwKSk7CiAgICAgICAg
ICAgICB9KTsKICAgICAgICAgfQogCkBAIC01MjcsNyArNTU0LDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBt
X2J5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgp
LnB0cigpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5w
dHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAg
ICAgICAgIGRhdGFMb2dMbigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgIiwg
bV9ieXRlY29kZUluZGV4LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgpKTsKQEAg
LTU0NSw4ICs1NzIsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAg
ICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkp
KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxv
Y2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgewor
ICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+
KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRl
Y29kZU9mZnNldCwgIl0gU0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJh
d1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwog
ICAgICAgICB9CkBAIC02NzQsNTUgKzcwMSw1NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKK3ZvaWQgSklUOjplbWl0TWF0ZXJpYWxpemVNZXRhZGF0
YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpCit7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21ldGFkYXRhR1BSKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkp
LCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6
Om9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7Cit9CisKK3ZvaWQg
SklUOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCkKK3sKKyAgICBCYXNlOjplbWl0UmVzdG9yZUNh
bGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVSZWdpc3RlcnMoKSk7Cit9CisKIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBERkc6OkNhcGFiaWxp
dHlMZXZlbCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICAvLyBP
T1BTOiBNYXliZSB0aGlzIHNob3VsZCBiZSBkb25lIG9uIHVubGlua2VkIGNvZGUgYmxvY2s/Cisg
ICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBh
YmlsaXR5TGV2ZWwoKTsKICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5v
dENvbXBpbGU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9j
YW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9m
aWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6
CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRp
bWl6ZWQgPSB0cnVlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsK
ICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQotICAgIAotICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBl
KCkpIHsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1bGVDb2RlOgotICAgIGNh
c2UgRXZhbENvZGU6Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAgICAg
ICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRl
dGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgotICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0
aGF0IG9ic2VydmF0aW9uLgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlu
bGluZWQgJj0gY2FuSW5saW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9j
b2RlQmxvY2spOwotICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICBpZiAobV9jb2RlQmxvY2st
Pm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2RlQmxvY2stPm51bWJl
ck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKG1fY29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAg
bV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBG
aXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlcygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2st
PmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZl
Y3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVy
T2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgIGlmIChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQorICAg
ICAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxl
PihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygp
KTsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51
bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAgIH0KIAotICAgIGlm
IChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigp
KSkpCi0gICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+
KG1fY29kZUJsb2NrKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5
KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJs
ZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIE9PUFM6IGJ1aWxkIGEgZGlz
YXNzZW1ibGVyIG9mZiB1bmxpbmtlZCBjb2RlIGJsb2NrCisgICAgICAgIG1fZGlzYXNzZW1ibGVy
ID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAg
IH0KICAgICBpZiAoVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSkgeworICAg
ICAgICAvLyBPT1BTOiBidWlsZCBwcm9maWxlciBkaXNhc3NlbWJsZXIgb2ZmIHVubGlua2VkIGNv
ZGUgYmxvY2sKICAgICAgICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAogICAgICAgICAgICAg
bmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9jayksCisgICAgICAg
ICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3Io
bV9wcm9maWxlZENvZGVCbG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmlsZXI6OkJhc2VsaW5l
KSk7Ci0gICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5t
X3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9jb21waWxhdGlv
bi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9w
cm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7
CkBAIC03NDIsMTEgKzc3MCwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0Rmlu
YWxpemluCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAg
ICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlKQorICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoKTsK
IAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQg
PSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsK
KyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6
ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zm
c2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJm
bG93OwpAQCAtNzU3LDE2ICs3ODYsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbgogICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVDYWxsZWVTYXZlcygp
OworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdD
aGVja1JlZ2lzdGVycygpOworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQ
b29sUmVnaXN0ZXJzKCk7CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlKSB7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0g
RnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAg
ICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsg
Kythcmd1bWVudCkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV91
bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQ
cm9maWxlcygpICsgRml4ZWRWZWN0b3I6Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIpOworCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX3VubGlu
a2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4g
YSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5n
cyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1
bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3Rv
cigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9j
ay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRP
ZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArODEwLDEyIEBAIHZvaWQg
SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogICAg
ICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BS
KCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2Nv
ZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsK
KyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFy
Z3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmly
c3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgpKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmlsZWRDb2RlQmxvY2st
PmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQogICAgICAgICBt
X3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgKnRo
aXMpOwpAQCAtNzk5LDI0ICs4MzIsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAg
aWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBt
X2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVS
b2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCByZWdU
MCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2UgbmV2ZXIg
cmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fY29k
ZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgeworICAgIGJvb2wg
cmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
ICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hlY2sgPSBs
YWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxvY2stPm1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgp
OwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9s
b2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVn
VDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkpOwogCiAgICAg
ICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBU
cnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhiZWdpbkxh
YmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3Rl
ZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtUbyhiZWdp
bkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAg
ICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29kZUJsb2Nr
LT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0
aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xs
YmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9w
ZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgYXJn
dW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQog
ICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFplcm8s
IHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04MzksNyArODc1
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBt
X2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
OjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVl
X3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtC
dWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBtX2xpbmtCdWZmZXIg
PSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fdW5s
aW5rZWRDb2RlLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CiAg
ICAgbGluaygpOwogfQogCkBAIC04NTgsOCArODk0LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAg
ICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpJ
bW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXI6IHsKLSAgICAg
ICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9j
b2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAg
ICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBU
YWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgbGlu
a2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0
clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2VkVGFibGUubV9icmFu
Y2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0
ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEsOCArOTA3LDggQEAg
dm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6
OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAg
ICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxp
bmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlEZWZhdWx0ID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVP
ZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yIChhdXRvJiBs
b2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMoKSkgewogICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNoT2Zmc2V0OwpAQCAt
OTA2LDMyICs5NDIsMzUgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7CiAgICAgfQogCi0gICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVD
YWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVs
QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRz
LCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5VmFscywgcGF0
Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIHBhdGNo
QnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2Vz
LCBwYXRjaEJ1ZmZlcik7CisgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2VuZXJh
dG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAgICAg
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1f
Z2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMpOworICAgIGZp
bmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlWYWxzKTsKKyAg
ICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFscyk7
CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlWYWxz
KTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3By
aXZhdGVCcmFuZEFjY2Vzc2VzKTsKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDog
bV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpj
b21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlv
bnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlv
bikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbklu
Zm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGluZm8uZG9uZUxvY2F0aW9uID0gcGF0
Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9u
ZUxvY2F0aW9uKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIEpJVENvZGVNYXBCdWlsZGVyIGpp
dENvZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0g
MDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsK
LSAgICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKLSAgICAg
ICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29k
ZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxvY2stPnNldEpJ
VENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKSk7CisgICAgSklUQ29kZU1hcEJ1
aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0
KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKKyAgICAg
ICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zm
c2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRl
Y29kZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERp
c2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk3OSwzNyBAQCB2b2lkIEpJVDo6bGluaygpCiAg
ICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7CisgICAgICAgIC8vIE9P
UFM6IG1ha2UgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91dCB1bmxpbmtlZCBDQj8KICAgICAg
ICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKQogICAgICAg
ICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21waWxhdGlvbi5nZXQo
KSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFk
ZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CisgICAgICAgIG1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9maWxlZENvZGVCbG9j
aywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFw
QnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9
IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAgCisgICAgLy8gT09QUzogTWFrZSBhIHZlcnNp
b24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBVbmxpbmtlZENvZGVC
bG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUo
CiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUg
SklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJCYXNlbGluZSBK
SVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wcm9maWxl
ZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2pp
dENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVj
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3
IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENv
ZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2pp
dENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3Mp
OworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1vdmUobV91bmxpbmtl
ZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3Zl
KG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2Rl
LT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOworICAgIG1faml0
Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2RlLT5tX2NvbnN0YW50
UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOwogCiAgICAgaWYgKEpJVEludGVybmFsOjp2
ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBb
JXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFy
dCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFn
Z2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBh
dCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVt
b3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+
ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxp
emVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRo
cmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNDb21w
aWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICsxMDE4LDIxIEBAIENvbXBpbGF0aW9uUmVz
dWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRo
cmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5z
aHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7Ci0g
ICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZF
eGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIg
PSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8gRklYTUU6IDxy
ZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IG1f
Y29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0
KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9CisgICAgLy8gT09Q
UzogRG9uJ3QgdGhpbmsgdGhpcyBzaHJpbmsgaXMgcmVhbGx5IGRvaW5nIGFueXRoaW5nIGFueW1v
cmUuIFZlcmlmeS4KKyAgICAvL3sKKyAgICAvLyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgIC8vICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0Zp
dChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CisgICAgLy99CiAK
KyAgICAvLyBPT1BTOiBtX3BjVG9Db2RlT3JpZ2luTWFwIHNob3VsZCBsaXZlIG9uIEJhc2VsaW5l
SklUQ29kZSBmb3IgYmFzZWxpbmUgY29kZWJsb2Nrcy4KICAgICBpZiAobV9wY1RvQ29kZU9yaWdp
bk1hcCkKICAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUo
bV9wY1RvQ29kZU9yaWdpbk1hcCkpOwogCiAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5
dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJs
ZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CisgICAgICAgIHN0YXRpY19jYXN0PGRvdWJs
ZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CiAKLSAgICBtX2Nv
ZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgY29k
ZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShtX2ppdENvZGUucmVsZWFzZU5v
bk51bGwoKSk7CiAKICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQpAQCAtOTk4
LDExICsxMDQ0LDExIEBAIHNpemVfdCBKSVQ6OmNvZGVTaXplKCkgY29uc3QKICAgICByZXR1cm4g
bV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0
ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorQ29tcGlsYXRpb25SZXN1bHQg
SklUOjpwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIENvZGVCbG9j
ayogY29kZUJsb2NrKQogewogICAgIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGls
ZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoZWZmb3J0KTsKLSAgICBy
ZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICByZXR1cm4gZmluYWxpemVPbk1haW5U
aHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9u
SGFuZGxlcnMoKQpAQCAtMTA0MiwxNCArMTA4OCwxNCBAQCB2b2lkIEpJVDo6ZG9NYWluVGhyZWFk
UHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT5wcm9j
ZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0aW9uLiJfcyk7
CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29k
ZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNv
ZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihz
dGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2Nr
LT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAogICAgIHJldHVybiByb3VuZExvY2FsUmVnaXN0ZXJD
b3VudEZvckZyYW1lUG9pbnRlck9mZnNldChjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsg
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9CiAKLWludCBKSVQ6
OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK2ludCBKSVQ6OnN0
YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAg
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29k
ZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShy
ZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAKICNkZWZpbmUgQVNTRVJUX0pJVF9PRkZTRVQo
YWN0dWFsLCBleHBlY3RlZCkgQVNTRVJUX1dJVEhfTUVTU0FHRShhY3R1YWwgPT0gZXhwZWN0ZWQs
ICJKSVQgT2Zmc2V0IFwiJXNcIiBzaG91bGQgYmUgJWQsIG5vdCAlZC5cbiIsICNleHBlY3RlZCwg
c3RhdGljX2Nhc3Q8aW50PihleHBlY3RlZCksIHN0YXRpY19jYXN0PGludD4oYWN0dWFsKSk7CiAK
KyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJKSVREaXNhc3NlbWJsZXIuaCIK
QEAgLTE0OSw5ICsxNTAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgc3RydWN0
IENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xv
d1BhdGhTdGFydDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVMb2NhdGlvbjsK
LSAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CisgICAgICAgIFVubGlua2VkQ2Fs
bExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKICAgICB9OwogCiAgICAgdm9pZCBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CkBAIC0xNzEsNiArMTcyLDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwg
YW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KICAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAor
ICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBwdWJsaWM6CiAgICAg
ICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JF
bnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsK
QEAgLTE3OCwxOCArMTgxLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWTSYgdm0oKSB7
IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lkIGNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwotICAgICAgICBD
b21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBDb21waWxh
dGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAgICAgICAgc2l6
ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJh
dGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBDb21waWxhdGlv
blJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2Rl
SW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9j
aywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICBy
ZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShj
b2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdW5zaWduZWQg
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOwotICAgICAgICBzdGF0aWMgaW50IHN0
YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOworICAgICAgICBzdGF0
aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogCiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNv
bXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29u
ZHMgdG90YWxDb21waWxlVGltZSgpOwpAQCAtMTk5LDcgKzIwMiw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAgICAgICAgdm9pZCBw
cml2YXRlQ29tcGlsZVNsb3dDYXNlcygpOwogICAgICAgICB2b2lkIGxpbmsoKTsKLSAgICAgICAg
Q29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQpOwor
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqLCBKSVRD
b21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQg
Y29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2Fs
bChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQpAQCAtMjIzLDYg
KzIyNiwzMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWRQdHJGcm9tTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkMzJGcm9tTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkOEZyb21NZXRh
ZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAg
IHZvaWQgc3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90
IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qg
b2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAg
IHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6
ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25l
ZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3Qo
R1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lz
dGVyLCBHUFJSZWcpOworCisgICAgICAgIHZvaWQgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblBy
b2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdUMCk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25D
aGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5kbGVyKTsKQEAgLTI1OCwxNiArMjg1LDE2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6
Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MKICAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxf
dmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
Ci0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0lu
Zm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAg
ICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxs
TGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYs
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChj
b25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAg
ICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5m
byosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNh
bGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBA
IC0yOTEsMTAgKzMxOCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gVGhpcyBhc3N1
bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMg
aXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJS
ZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwg
SlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0
YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2Rl
JiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNl
CiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1Zh
bHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBAIC0zMDcsNiArMzM0
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJ
RCBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0
ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
ICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29k
ZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01OTIsNyArNjIzLDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwpAQCAtNjI2LDE0ICs2NTYsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAg
ICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUpOwot
ICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nl
c3NUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNj
ZXNzVHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQg
ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IElu
c3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNr
KFJlc29sdmVUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBlbWl0VmFyUmVh
ZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lk
IGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKICAg
ICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02
NDUsNyArNjc1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0
R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsK
ICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2
b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9pZCBl
bWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAgICB2
b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFy
KFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpAQCAtNjU0LDYgKzY4NCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVy
SUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgICAgICBib29sIGlzS25vd25DZWxsKFZp
cnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1
YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJl
Z2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lz
dGVyKTsKQEAgLTY5NSwyNiArNzI2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBy
ZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gUmVzb2x2
ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7CiAgICAgICAgIH0KIAot
I2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAot
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9n
ZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9S
X0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3Vu
ZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmso
UmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KLSAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1vZHVsZVZhciBiZWNhdXNlIGl0
IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4gdXNlIGEgdGh1bmsuCi0gICAg
ICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlc2Ug
dHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2
ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7
Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJl
c29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7
Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VO
RVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZl
U2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdl
dEZyb21TY29wZVRodW5rKHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0
aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZl
VHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYp
OwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2
YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CkBAIC03NTksMTAgKzc3MiwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxs
RnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4pOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgQWRkcmVz
cywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVu
YWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsPgpAQCAtODIwLDIwICs4MzMsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKEFkZHJlc3MoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBPcGVy
YXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1
bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpD
YWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRh
LCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4u
LiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxP
cGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVy
YXRpb24sIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9u
VHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZS4u
LiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlv
blR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRz
Rm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5cGU+KHRhcmdldCwgYXJncy4uLik7Ci0gICAgICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShtZXRhZGF0YSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQu
b2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOwogICAgICAgICB9CiAK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJn
cz4KQEAgLTkxOCwyNSArOTMxLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERG
R19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0
aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVy
biBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFBy
b2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAg
ICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wg
Y2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBF
bmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJu
ZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQu
CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAj
ZW5kaWYKIAorICAgICAgICB2b2lkIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQ
b29sUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgdm9pZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0
YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElm
IHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlv
dSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFu
ZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdp
bGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0
aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0g
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFBy
b2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAogICAgICAgICBJbnRlcnByZXRl
ciogbV9pbnRlcnByZXRlcjsKIApAQCAtOTYzLDkgKzk3MSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3Rv
cjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwg
dW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0X3Qs
IEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9jb3BpZWRBcml0aFByb2ZpbGVzOwotCiAgICAgICAgIEp1
bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNo
ZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjazsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CkBAIC05OTksMTEgKzEwMDQsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9p
bnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5C
ZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAg
ICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBt
X2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENv
ZGU+IG1faml0Q29kZTsKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAg
UmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50
UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBt
X2dsb2JhbE9iamVjdENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpIH07CisgICAgICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxz
OworICAgICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgICAg
ICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAg
ICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7Cisg
ICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzOworCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIgPSBM
TEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSOworICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzX2NvbnN0YW50c0dQUiA9IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSOworCisg
ICAgICAgIHN0cnVjdCBOb3RBQ29kZUJsb2NrIHsgfSBtX2NvZGVCbG9jazsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRB
cml0aG1ldGljLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3Bl
cmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAg
ICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCBhcmd1bWVudEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1
bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRH
UFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQg
PyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMzIwLDcgKzMyMSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByZWdUMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QyLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcg
KzM3NSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9
CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC01NzMsNyArNTc3LDggQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IAogCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwg
cmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDQsIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIyLDggQEAgdm9pZCBKSVQ6
OmVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdh
dGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBVbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdh
dGU+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE5lZ0lD
KiBuZWdhdGVJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAg
IFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+
dW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tX3By
b2ZpbGVJbmRleCk7CisgICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9tYXRoSUNzLmFkZEpJVE5l
Z0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50
SW5zdHJ1Y3Rpb24sIG5lZ2F0ZUlDKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVy
IHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNh
biBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25B
cml0aE5lZ2F0ZSk7CkBAIC04OTksOCArOTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlm
dChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUQWRk
SUMqIGFkZElDID0gbV9tYXRoSUNzLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9p
bnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBl
bWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQpAQCAtOTQ1LDEwICs5NTAs
MTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIGJvb2wg
Z2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CiAgICAg
ICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmls
ZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxl
KTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgc3JjUmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Q
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzKTsKICAgICB9
IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
SnVtcHMpOwogCkBAIC0xMDE1LDEwICsxMDIxLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFz
dChKSVRCaW5hcnlNYXRoSUMKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3Qo
KSkKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwog
ICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQ
cm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAg
IGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxz
ZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1w
cyk7CiAKQEAgLTEwNTUsMTMgKzEwNjIsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJ
VFVuYXJ5TWF0aElDPAogI2VuZGlmCiAKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0
KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAg
ICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAg
ICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAg
ICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVk
SW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAg
IH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1p
Yz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElD
KSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0g
bGFiZWwoKTsKQEAgLTExMjAsMTMgKzExMjgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93
KEpJVEJpbmFyeU1hdGhJQwogI2VuZGlmCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsK
ICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gp
Ci0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dK
Sk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQ
cm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBy
ZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5j
dGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlv
biksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0
aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTY2LDcgKzExNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9k
aXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG51bGxwdHI7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAg
YXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBhcml0aFByb2ZpbGUgPSAmbV91
bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEaXY+KCkubV9wcm9maWxlSW5kZXgpOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9w
ZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJh
bmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKQEAgLTEy
MTEsOCArMTIyMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioK
IAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFy
aXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91
bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BNdWw+KCkpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fbWF0aElDcy5hZGRKSVRNdWxJ
Qyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudElu
c3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVl
TXVsKTsKIH0KQEAgLTEyMjcsOCArMTIzNiw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwo
Y29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2st
PmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkpOworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fbWF0
aElDcy5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BT
dWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3
IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwogICAgIHN0b3JlUHRyKGNhbGxG
cmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0
KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwg
cmVnVDIpOwpAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjb25zdCAKIAogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBl
bWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzI0LDcgKzMyNCw3
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBhZGRTbG93
Q2FzZShzbG93UGF0aHMpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVz
dWx0KGJ5dGVjb2RlKTsKQEAgLTM0MSw3ICszNDEsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKGNvbnN0IEluCiAgICAgfQogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3Rh
cnQgPSBsYWJlbCgpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAg
LTM1NCw3ICszNTMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IElu
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3Qg
T3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25G
b3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3Rl
cigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDEwICs1Myw5IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAg
ICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwog
LCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxM
aW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJbmNsdWRpbmdUaGlzID0g
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpOwogICAg
IGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0YWNrT2Zmc2V0SW5SZWdp
c3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKQEAgLTY0LDcgKzYzLDcgQEAg
SklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApKSwgcmVnVDApOwogICAgICAgICBKdW1w
IGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICBzdG9y
ZTMyKHJlZ1QwLCBhcnJheVByb2ZpbGVGb3IobWV0YWRhdGEsIGNoZWNrcG9pbnQpLmFkZHJlc3NP
Zkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChieXRlY29kZSwgcmVnVDAsIHJlZ1QwKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMp
OwogICAgIH0KIApAQCAtNzgsNyArNzcsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpv
cGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVj
dF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8
IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4K
LUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8q
IGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtOTEsNyArOTAsOCBA
QCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVP
cGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVs
c2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7
Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFy
QXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0
aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJz
dFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVy
KSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BS
LCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25t
ZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CkBAIC0xMDEsMTQgKzEwMSwxNiBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3
YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9w
ZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRp
b24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJl
Z1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1QzLCByZWdUMSwgcmVn
VDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
cmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCBy
ZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwg
cmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZv
Q29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZv
OjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CisgICAg
SnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CisgICAgc3Rv
cmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAg
ICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEyOSwxNiBAQCBib29s
IEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpj
b21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxs
RnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNl
dCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFyZ3VtZW50
R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlZ1QxLCByZWdUMik7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1Qw
KSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwg
YXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXR1cm5W
YWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogCkBAIC0xNDgs
NyArMTUwLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxv
Y2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENh
bGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwg
cmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKQEAg
LTE1Niw0MyArMTU4LDQ2IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25z
dCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lz
dGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9i
amVjdCgqbV92bSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3Am
LCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKLXsKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwo
Y29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50KSB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29s
IEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBDYWxsTGlu
a0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQorYm9vbCBKSVQ6OmNvbXBp
bGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0lu
Zm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewotICAgIENhbGxGcmFtZVNodWZmbGVEYXRh
IHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5t
X2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQorICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENh
bGxGcmFtZVNodWZmbGVEYXRhPigpOworICAgIHNodWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0g
Ynl0ZWNvZGUubV9hcmdjOworICAgIHNodWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQog
ICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXpl
b2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJn
Yyk7CisgICAgc2h1ZmZsZURhdGEtPmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAg
IHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAg
ICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAg
ICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNv
ZGUubV9hcmd2LAogICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNo
dWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBE
YXRhRm9ybWF0SlMpOwotICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyht
X2NvZGVCbG9jayk7Ci0gICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7
CisgICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBE
YXRhRm9ybWF0SlMpOworICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMo
JlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKIAotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7
Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZv
clRhaWxDYWxsKCk7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdU
Mik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxE
YXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcigqdGhpcywgKnNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAg
ICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNo
cmlua1RvRml0KCk7CisgICAgaW5mby0+ZnJhbWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZs
ZURhdGEpOworCiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0
aW9uOwogICAgIApAQCAtMjE4LDE0ICsyMjMsMjUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
Y29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsg
Q29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBh
ZnRlciByZXR1cm4uCiAgICAgKi8KLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwot
ICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVC
bG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAg
Y29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlu
a0luZm8qIGluZm8gPSBudWxscHRyOworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5m
b0NvbnN0YW50ID0gVUlOVF9NQVg7CisgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkg
eworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG1fdW5saW5rZWRDYWxscy5h
ZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlE
KTsKKworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOworCisgICAgICAgIEFTU0VSVChtX2Nh
bGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOworICAg
ICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnVubGlua2VkQ2Fs
bExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFudDsKKyAgICB9Cisg
ICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7CiAKICAgICAvLyBT
UCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJn
dW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBtX2NvZGVC
bG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7Ci0gICAgdWludDMyX3QgbG9jYXRpb25C
aXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7CisgICAgdWludDMyX3Qg
bG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBZGRyZXNzKGNhbGxGcmFtZVJl
Z2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQpKTsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNhbGxlZS4K
QEAgLTIzNCwxNiArMjUwLDEyIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3Ry
dWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJ
bmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9y
KG9wY29kZUlEKSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2Fs
bENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAgICBpZiAoY29tcGlsZVRhaWxDYWxs
KGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCisgICAgaWYgKGNvbXBpbGVUYWls
Q2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgsIGluZm9Db25zdGFudCkpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIGxvYWRDb25zdGFudChpbmZvQ29uc3RhbnQsIHJlZ1QyKTsK
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhz
ID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAgICAgYXV0byBzbG93UGF0aHMgPSBD
YWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVn
VDIsIFsmXSB7CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAg
ICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKICAgICAgICAgfSk7CkBAIC0yNTMs
MTMgKzI2NSwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRG
YXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVz
KTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsK
ICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAK
ICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0yNzMsMjAgKzI4NSwyMCBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKKyAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92bSwgKnRoaXMpOwor
ICAgIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKCptX3ZtLCAqdGhpcywgcmVnVDIp
OwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2Fs
bCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpAQCAtMzk1LDE3ICs0MDcsMzAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwogICAgIAotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisK
KyAgICBtb3ZlKHJlZ1QwLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBs
KCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEsIEFjY2Vz
c1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25leHQpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3Vs
dEdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KQEAgLTQx
NiwxMCArNDQxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwog
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVj
a3BvaW50KGp1bXAoKSk7CiAKLQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBH
UFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9yR1BSKSk7CiAgICAgbm90
T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckdQUikpOwpAQCAtNDMyLDE5
ICs0NTUsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAg
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwot
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5
cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJhdG9yR1BSLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdC
aXRzKCkpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBtb3ZlKGl0ZXJhdG9yR1BS
LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogCiAgICAgYXV0byBkb25l
ID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3Vs
dElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwogfQpA
QCAtNDUyLDcgKzQ3Myw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNv
bnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVy
YXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9uID0gKFsmXSAoKSB7CiAgICAgICAg
IHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKICAgICAgICAgY2FzZSBOYXJyb3c6IHJl
dHVybiBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25hcnJvdzsKQEAgLTQ3MCw1MCArNDkwLDc0IEBA
IHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBKdW1wIGZhc3RD
YXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwog
CiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBvcjgoVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgQWJzb2x1dGVBZGRyZXNz
KCZtZXRhZGF0YS5tX2l0ZXJhdGlvbk1ldGFkYXRhLnNlZW5Nb2RlcykpOworICAgIGxvYWQ4RnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mSXRl
cmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9k
ZXMoKSwgcmVnVDApOworICAgIG9yMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgcmVnVDApOworICAgIHN0b3JlOFRvTWV0YWRhdGEo
cmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0
aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMo
KSk7CiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAv
LyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2JqZWN0KSBpbiByZWdUMAogCi0gICAg
R1BSUmVnIHZhbHVlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdU
MjsKLSAgICBHUFJSZWcgZG9uZUdQUiA9IHJlZ1QxOwotICAgIC8vIGl0ZXJSZXN1bHRHUFIgd2ls
bCBnZXQgdHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0IGJ5IGlkIGJlbG93LgotICAgIG1vdmUodmFs
dWVHUFIsIGl0ZXJSZXN1bHRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7
CisgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOwogCisgICAgY29u
c3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7
CiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaXRlclJlc3VsdEdQ
Uik7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSBi
YXNlR1BSKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7
CiAKICAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVncyA9IFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJlc2VydmVkUmVncy5hZGQodmFsdWVH
UFIpOworICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZChpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAg
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVk
UmVncywKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdz
KGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgcmVnVDMsIEFjY2Vzc1R5cGU6
OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZl
ZFJlZ3MsCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIg
fSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdz
IHsgZG9uZUdQUiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAg
IH0KIAotCiAgICAgewotICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKLSAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3Rl
cnMoZG9uZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3Igc2NyYXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2gxID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIo
KTsKKyAgICAgICAgR1BSUmVnIGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVT
Y3JhdGNoR1BSKCk7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFu
Y2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xv
YmFsR1BSKTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5
KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsK
IAorICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6cmVzdWx0OwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwot
ICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBs
KCkpLCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRHUFIpOwogCiAgICAg
ICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01MjcsNTkgKzU3MSw1NSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgp
KTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQ
UiA9IHJlZ1QyOwogCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAgIEp1
bXBMaXN0IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENl
bGwoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90
Q2VsbChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBp
ZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCk7CiAgICAgICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgICAg
IAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBub3RP
YmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAg
bm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyQ2FsbFJlc3VsdEdQUikpOwog
Ci0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkb25l
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLQotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGRvbmVWUmVnLCByZWdUMSk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0
R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3Vt
ZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9u
ZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7CisKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVW
UmVnLCBkb25lR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9y
Q2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVj
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKICAg
ICB9CiAKICAgICB7ICAgCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgICAgICBH
UFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpOwogICAgICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAg
ICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAgIENhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
IHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVz
dWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVu
dEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAgICAgfQot
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKIAorCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogbmFtZXNwYWNlIERGRyB7CkBAIC0xNTksMTAgKzE2MCwxMCBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgYm9vbCB1c2VEYXRhSUMoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKLSAg
ICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBPcHRpb25zOjp1c2VEYXRh
SUNJbk9wdGltaXppbmdKSVQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAy
ODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNhY2hl
YWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKQEAgLTQ2LDEwICs0Nyw5IEBA
IHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmYKIEpJVElubGluZUNhY2hl
R2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNl
dCYgdXNlZFJlZ2lzdGVycykKLSAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAsIG1f
aml0VHlwZShqaXRUeXBlKQorICAgIDogbV9qaXRUeXBlKGppdFR5cGUpCiB7Ci0gICAgbV9zdHVi
SW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUs
IGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5mbyA9IGNvZGVC
bG9jayA/IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBn
YXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2FsbFNp
dGU7CiAKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyczsKQEAg
LTU5LDcgKzU5LDYgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAg
ICAgTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoLCBDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpCiB7CiAgICAgbV9zdHViSW5mby0+
c3RhcnQgPSBzdGFydDsKLQogICAgIG1fc3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IGZhc3RQYXRo
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obV9kb25lKTsKIAogICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCkBAIC02Nyw2ICs2NiwxNSBAQCB2b2lkIEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0
TG9jYXRpb24gPSBzbG93UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3Ns
b3dQYXRoQmVnaW4pOwogfQogCit2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpnZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBtX3N0YXJ0ID0gaml0Lmxh
YmVsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkp
OworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0cnVjdHVyZVN0dWJJbmZvR1BSKTsK
KyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAg
ICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdl
bmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJl
Z3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDExMyBAQCBu
YW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXI7CiBjbGFzcyBDYWxsU2l0
ZUluZGV4OwogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklUOwogY2xhc3MgU3RydWN0dXJlU3R1
YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVudW0gY2xhc3MgSklU
VHlwZSA6IHVpbnQ4X3Q7CiAKK3N0cnVjdCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBC
YXNlbGluZURlbEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQg
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBH
UFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVj
dCBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hl
biBsaW5raW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdl
dEJ5VmFsIFN0dWJJbmZvLgorICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHJlc3Vs
dCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHN0YXRpY19hc3Nl
cnQoc3R1YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm8pOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5mbzo6cmVnVDU7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBwcm90byA9IEdQUkluZm86OmFyZ3VtZW50R1BSMzsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOwor
fTsKKworc3RydWN0IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJv
cGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9
IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVn
aXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsK
K307CisKK3N0cnVjdCBCYXNlbGluZUluQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86
OnJlZ1QxOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJ
bmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9maWxlID0gR1BSSW5m
bzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZv
OjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJyYW5kID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
X2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0
YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkp
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7
Cit9OworCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90ZWN0ZWQ6CiAgICAg
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDE1ICsxNjQsMjEgQEAgcHVibGlj
OgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1
ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAogICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwotICAgIAorCisgICAgdm9pZCBn
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogbV91bmxpbmtlZFN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8SklUQ29uc3RhbnRQb29sOjpDb25zdGFudD46Om1heCgp
IH07CisKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5
cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCitwdWJs
aWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJl
Z2luOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOyAvLyBPT1BTOiBtYWtlIHJlcG9ydENhbGwg
cGFzcyBzb21ldGhpbmcgaW4gd2UgY2FuIHVzZSBmb3IgdGhlIG5vbi1DVEkgdGh1bmtzIGJ1aWxk
cy4gCiB9OwogCiBjbGFzcyBKSVRCeUlkR2VuZXJhdG9yIDogcHVibGljIEpJVElubGluZUNhY2hl
R2VuZXJhdG9yIHsKQEAgLTk4LDcgKzIwNiw3IEBAIHByb3RlY3RlZDoKICAgICBKU1ZhbHVlUmVn
cyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBtX3N0YXJ0OworcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xv
d1BhdGhKdW1wOwogfTsKIApAQCAtMTMyLDggKzI0MCw4IEBAIHB1YmxpYzoKICAgICBKSVRQdXRC
eUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKLSAg
ICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFs
dWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9H
UFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CisgICAgICAgIENvZGVCbG9j
ayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAgICAgICBKU1ZhbHVlUmVn
cyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2Ny
YXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0
aChNYWNyb0Fzc2VtYmxlciYpOwogICAgIApAQCAtMTYzLDExICsyNzEsOSBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToK
ICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRj
aGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTkxLDggKzI5Nyw2IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2
YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjE2LDggKzMyMCw2
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYp
OwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjQx
LDggKzM0Myw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fz
c2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsK
IApAQCAtMjc3LDggKzM3Nyw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmluYWxpemUoTGlua0J1
ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIp
OwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzAy
LDExICs0MDAsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1h
Y3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAg
IEpTVmFsdWVSZWdzIG1fcmVzdWx0OwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3Rh
cnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9
OwogCkBAIC0zMzAsOCArNDI2LDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVG
YXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xv
d1BhdGhKdW1wOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzggQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1
YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29u
c3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKK30KKworQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sK
KyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
c3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJ
bnQzMigpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1Rp
bWVDb25zdGFudCkgeworICAgICAgICAvLyBPT1BTOiBmaW5kIGEgd2F5IHRvIGFzc2VydCB0aGF0
IGFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0NlbGwoKTsKIH0K
IAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwotICAgIHJldHVy
biBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpICE9
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7CisgICAgcmV0dXJu
IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20s
IFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiArMTgxLDM2IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1l
dGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5j
dGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgor
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5
dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVH
UFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBl
bWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgog
ICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNzIGZ1bmN0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyBmdW5jdGlv
biwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVy
blZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5W
YWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VU
b05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJ
bmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBB
U1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hl
Y2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50
TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBA
IGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0
ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2tw
b2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAg
IGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBA
IC0yOTMsMjkgKzMxOCwzNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJz
dHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0
dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFs
dWVSZWdzIHZhbHVlKQotewotICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0g
ICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBz
byB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0j
ZWxzZQotICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nh
c3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAg
IHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQp
OwotICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsK
LSNlbmRpZgotfQorICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25z
dGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFz
Q2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30KKworLy8gT09QUworLy9pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFs
dWVSZWdzIHZhbHVlKQorLy97CisvLyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsK
Ky8vCisvLyAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBi
dWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lm
IFVTRShKU1ZBTFVFNjQpCisvLyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUu
bV9idWNrZXRzKTsKKy8vI2Vsc2UKKy8vICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmls
ZS5tX2J1Y2tldHMpOworLy8gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlw
dG9yLT5hc0JpdHMucGF5bG9hZCk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVz
Y3JpcHRvci0+YXNCaXRzLnRhZyk7CisvLyNlbmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpN
ZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2Vu
ZGlmCkBAIC0zMjMsMjQgKzM1MywyNSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJv
ZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBK
U1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZv
cihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKyAgICBw
dHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2Rl
PihtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZG
aXJzdEJ1Y2tldCgpOworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3Moc19tZXRhZGF0
YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJS
ZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxl
LCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0
UmVnKQorLy97CisvLyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisvL30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFk
YXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Citpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKQEAgLTM2
MCw2ICszOTEsMjEgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlVwog
ICAgIH0KIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRy
ZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVy
SUQgc2NyYXRjaEdQUikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CisgICAg
ICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEo
c2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKKyAgICB9Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2Vs
bEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQoreworICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJv
ZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2Vs
bEdQUiwgc2NyYXRjaEdQUik7Cit9CisKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9w
ZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJldHVybiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CkBAIC0zODAsNyArNDI2LDcgQEAgQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0
TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAg
ICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7Cisg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1
c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAg
IGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTQyLDcgQEAg
aW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewot
ICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25v
d25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTUyLDcgQEAg
aW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdp
c3RlcklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7
CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFu
dCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAt
NTE0LDExICs1NjAsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
CiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudElu
dChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYm
IGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQog
ewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU4NSwx
NyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJU
KG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBk
dXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBp
cyBzZXQuCiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUu
aXNOdW1iZXIoKSkKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZSh2YWx1ZSkpLCBkc3QpOwotICAgICAgICBlbHNlCisgICAgICAgIHN3aXRjaCAobV91bmxpbmtl
ZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykpIHsKKyAgICAgICAg
Y2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6CisgICAgICAgIGNhc2UgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6IHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAg
bW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBsb2FkQ29kZUJs
b2NrQ29uc3RhbnQoc3JjLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTY2LDExICs2MTMsNiBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQo
KSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
UmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsK
QEAgLTU5NSw3ICs2MzcsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2Nv
ZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkK
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTYzNywz
MCArNjc5LDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewog
ICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29k
ZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKLX0KLQotQUxXQVlTX0lO
TElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNv
ZGUpCi17Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsgLy8g
SGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Nv
cGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRH
ZXRQdXRJbmZvcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZh
bHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwg
Z2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJbmZvOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxl
IEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2
NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEp
IDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0g
ICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAg
aWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxl
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1f
Y29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBh
cml0aFByb2ZpbGU7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPm91dE9mTGluZUp1
bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY4
MSw2ICs3MDAsNjEgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAog
ICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQorewor
ICAgIGxvYWRQdHIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5t
ZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1
bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXpl
X3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQzMihBZGRyZXNzKHNfbWV0YWRh
dGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRh
YmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sK
KyAgICBsb2FkOChBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2Rl
PgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUgdmFs
dWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9y
ZTgodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0
YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0
b3JlMzJUb01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBz
aXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlMzIodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQ
UiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Ynl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7
CisgICAgYWRkUHRyKHNfbWV0YWRhdGFHUFIsIFRydXN0ZWRJbW1QdHIobV91bmxpbmtlZENvZGVC
bG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0
KSwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvbnN0YW50KEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY29uc3RhbnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKK3sK
KyAgICBsb2FkUHRyKEFkZHJlc3Moc19jb25zdGFudHNHUFIsIHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oY29uc3RhbnRJbmRleCkgKiA4KSwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6bG9hZEdsb2JhbE9iamVjdChHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRDb25zdGFu
dChtX2dsb2JhbE9iamVjdENvbnN0YW50LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBH
UFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQo
KSk7CisgICAgLy8gT09QUzogTWF5YmUgbWFrZSB0aGlzIG1vcmUgZWZmaWNpZW50PworICAgIGxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQpOworICAg
IGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIG9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkp
LCByZXN1bHQpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlc3VsdCwgY29uc3RhbnQudG9Db25zdGFu
dEluZGV4KCkgKiBzaXplb2YoSlNWYWx1ZSkpLCByZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVj
dGlvCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNl
dCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVs
bHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2so
KSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0o
KSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUik7CkBAIC05OTcsNyArOTk3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX2ltbShjb25zdCBJbnN0cgogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3
aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25z
dCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4
LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRl
KSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAg
LTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IElu
c3QKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0
cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3
aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBk
ZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxl
LmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDQyLDcgKzEwNDIsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAKICAgICAvLyBjcmVhdGUg
anVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3Rh
dGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5n
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0
Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVm
YXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1
cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMSArNTQsMjIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgp
KSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgc3RvcmU2NChU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7Ci0g
ICAgICAgIGVsc2UKKyAgICAgICAgLy8gT09QUzogbW9zdCAiT3RoZXIiIFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbiBjb25zdGFudHMgY2FuIGp1c3QgYmUgZ3JhYmJlZCBmcm9tIHRoZSBVbmxpbmtl
ZENvZGVCbG9jay4gSXQncyBqdXN0CisgICAgICAgIC8vIGEgY291cGxlIHR5cGVzIHRoYXQgY2Fu
J3QuIENyZWF0ZSBhbiBhYnN0cmFjdGlvbiBmb3IgdGhhdC4KKworICAgICAgICBzd2l0Y2ggKG1f
dW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpKSB7Cisg
ICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICBj
YXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAg
ICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3Io
ZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDApOworICAgICAgICAg
ICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODcsMzcgKzk4LDM1IEBA
IHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0
X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9i
amVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBB
bGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxK
U0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFs
bG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAg
ICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0
Y2hSZWcgPSByZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0g
ICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkg
PSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChy
ZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVn
LCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nh
c2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3Ry
dWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsK
LSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkg
KyBvZmZzZXRPZkFsbG9jYXRvcigpLCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlKCkgKyBvZmZzZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVSZWcpOworCisgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRy
KTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFy
aWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywg
c2xvd0Nhc2VzKTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjpp
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgZW1pdEluaXRpYWxpemVJ
bmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CisgICAgbXV0YXRvckZlbmNlKCpt
X3ZtKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAorICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CisKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0
cnVjdHVyZSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3
T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwogfQogCkBAIC0xMzEsNyArMTQwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
b3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5z
dGFuY2VWYWx1ZSwgcmVnVDApOwogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdo
YXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFu
Y2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5j
dGlvbigpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgSnVtcCBjdXN0b21o
YXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdU
MSwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2Z1bmN0aW9uUHJvdG9IYXNJbnN0
YW5jZVN5bWJvbEZ1bmN0aW9uKSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0
cnVjdG9yLCByZWdUMCk7CiAKQEAgLTE1NCwzMCArMTY0LDM4IEBAIHZvaWQgSklUOjplbWl0X29w
X2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJv
dG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQg
dmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAg
Zm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdl
IGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVn
VDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9HUFIgPSBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1Yklu
Zm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9HUFIpOwogICAgIAogICAgIC8vIENo
ZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBp
cyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAg
ICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJl
Z1Q1LAotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHJlc3VsdEdQUiwKKyAgICAg
ICAgdmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAgICAgICBzdHViSW5mb0dQUiwKKyAg
ICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMSwgQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCisKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCArMjEwLDEzIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOwotICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUp
PihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgcmVnVDIsIHJlZ1QxKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VP
Zk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOwotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09IGFyZ3VtZW50R1BSMSk7CisgICAg
c3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlID09IGFyZ3Vt
ZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6
OnByb3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKQorICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5z
dGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0yNDAsNyArMjU3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogCiAgICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qw
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdU
MCk7CiAKQEAgLTM3NCw3ICszOTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAg
ICAgcmV0KCk7CiAjZWxzZQpAQCAtMzg1LDcgKzQwMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jl
dChjb25zdCBJbnN0cnVjdGlvbioKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVy
YXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVz
dG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC00MTEsNyArNDI4LDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQzNCw5ICs0NTAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1
LDggKzQ4MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAg
Y29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1
bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2Ny
YXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgp
LCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdU
MSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0
YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFs
dWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRK
dW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNDk5
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0
IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZh
aWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBp
bmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBt
YXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUx
OSw3ICs1MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAg
ICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
OwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1
YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
MCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9
IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU2Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVs
bChjb25zdCBJbnN0cnUKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNr
IE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVt
cChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7
CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RF
cXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJl
Z1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAt
NTgyLDE1ICs2MDEsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChj
bwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7
Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29k
ZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAg
ICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxv
YWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSkKKyAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdU
MSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShieXRlY29kZSwgVHJ1c3RlZEltbTMyKDEpLCBPcEpu
ZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwogfQpAQCAtNjI1LDggKzY0MiwxMCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQ
UlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZU
cnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2Jh
bE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVn
cyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vs
c2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc1RydXRoeUdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDAsNyArNjU5LDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTY5NSw3ICs3MTQsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMSwgcmVnVDApOwog
ICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CkBAIC03MTEsNyArNzMxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhyb3duVmFs
dWVHUFIgPSBhcmd1bWVudEdQUjE7CkBAIC05MDgsNyArOTI4LDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5
MzksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiB9CiAKQEAgLTkzMSw3ICs5NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIo
Y29uc3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTczLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNW
UmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7
CiB9CkBAIC05NzgsNyArMTAwMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25z
dCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcg
IT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0K
QEAgLTk5Myw3ICsxMDE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1
Y3RpbwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZz
ZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwog
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2Nr
KCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZt
KCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyArMTAzMywxMSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMs
IHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1
ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVj
b2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAm
dm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2
bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0g
YnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwotICAgIGlmIChidWZmZXIgJiYg
c2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewotICAgICAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSksIHJlZ3MpOwotICAgICAg
ICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKQEAgLTEwNTMsOCAr
MTA2Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChT
d2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBT
d2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxl
KHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsxMDkxLDE0IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVl
ID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Ig
c3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNv
bnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2st
PnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91
bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwg
bV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rlcikp
OwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgsIHVubGlua2Vk
VGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1
bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAg
ICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEwOTks
MjAgKzExMTAsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgog
ICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAog
ICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0
aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5
dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAg
bGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hT
dHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJs
ZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRy
ZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9m
ZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJl
cXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9v
a1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTExMzMsNyAr
MTE0Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAg
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdU
MiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE0OCw3
ICsxMTYxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjYsNyArMTE3OCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
MCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwg
cmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE4OCwxMiAr
MTIwMCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAg
Ly8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNv
bnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQg
dW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNy
ZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1W
YXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygp
OwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBmb3IgKHNpemVfdCBqID0gQ29k
ZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7
IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOworICAg
IAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
MCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6
YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEzMTAsMjMgKzEzMjQsMTkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZUlEKiBj
YWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRT
dHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BU
b1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1QyKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3Jl
YXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwotICAgIFdyaXRlQmFy
cmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxs
ZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJh
cmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKQEAg
LTEzNDIsNyArMTM1Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IElu
c3QKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9m
ZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
V2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRh
VGFnKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1
bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpT
RnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKIAotICAgIGxvYWRQdHIoY2Fj
aGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcENyZWF0ZVRoaXM6Om9mZnNldE9mQ2FjaGVkRnVuY3Rpb24oKSwgY2FjaGVk
RnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0
cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVs
dGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1
YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBoYXNTZWVuTXVsdGlwbGVD
YWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzODIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJl
Z1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEzOTMsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVx
PigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdU
MCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5W
YWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcgKzE0MDYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdU
MSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxNDE3LDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVn
VDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsxNDMyLDExIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNv
bnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJu
VmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKIH0KQEAgLTE0MzAsNyArMTQ0NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJu
RWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhp
bnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICBpZiAoVU5MSUtF
TFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBt
X3VubGlua2VkQ29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJl
dHVybigpKSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVj
dXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZFB0cihwdHIsIHJlZ1QwKTsK
ICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2hQdHIoQmVsb3csIHJlZ1QwLCBU
cnVzdGVkSW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgp
KSk7CkBAIC0xNDQwLDcgKzE0NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29u
c3QgSW5zdHJ1CiAjZWxzZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86
OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCi0gICAg
ICAgIG1vdmVWYWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlc3VsdFJlZ3MpOwor
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkpOwogICAgICAgICBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CiAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0xNDUzLDggKzE0NjgsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBFbWl0
IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkg
eworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywg
VHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkp
LAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRF
eGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQogfQogCkBAIC0xNTA5LDcg
KzE1MjUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1bWVu
dEdQUjApOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
YXJndW1lbnRHUFIzOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtMTU2NCwzNCArMTU4MSwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4
cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BSID0gR1BSUmVnOjph
cmd1bWVudEdQUjA7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPiht
X3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3Jl
Q2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2
b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBKdW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRl
Y29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5j
dGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGlj
X2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKQorICAgIGxvYWRDb25z
dGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0g
T3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29k
ZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29k
ZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bj
b2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsK
ICAgICB9CiB9CiAKQEAgLTE2MjEsMjMgKzE2NDAsMjQgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5j
RXhwckNvbW1vbihjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2Rl
Lm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
YXJndW1lbnRHUFIxKTsKICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
biA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwor
ICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3Rh
bnQsIGFyZ3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7
CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24p
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0g
b3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgYXJndW1lbnRHUFIxcmVnVDAsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bj
b2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgYXJndW1lbnRHUFIxcmVnVDAsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAg
IEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBk
c3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMXJl
Z1QwLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTY2NCwyOSArMTY4NCwzMCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29k
ZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5
QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBhcmd1bWVudEdQUjIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgc2l6ZSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5t
X2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJl
Z1QwKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3
QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgp
LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBh
cmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogI2Vsc2UKKyAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMik7CiAgICAg
ZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9j
YXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNp
emVBbmRQcm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSk7CiAjZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNzE1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBE
b3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0
aGUgdHlwZSBwcm9maWxlciBpcyBlbmFibGVkLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24qIGNh
Y2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVy
OwogCkBAIC0xNzc3LDIwICsxNzk5LDI0IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9u
QXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUu
Iik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFk
b3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9u
LWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAg
IGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNo
MVJlZywgc2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0g
bm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgorICAg
ICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAgICAgZW5zdXJlU2hhZG93Q2hp
Y2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJl
Zyk7CisgICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFs
dWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcs
IEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93
UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUMSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZv
aWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2Ug
dHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHVzaW5nIHRoZSBjb250cm9s
IGZsb3cgcHJvZmlsZXIuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQcm9maWxlQ29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJh
c2ljQmxvY2tMb2NhdGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRo
aXMpOwpAQCAtMTg2MCw3ICsxODg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50
KGNvbnN0IElucwogICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAog
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE5MTIsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0o
KSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nh
c2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4ODEsNyArMjg4MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJs
b2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQ7CiAgICAgaWYgKGtl
eS5pc0ludDMyKCkpCkBAIC0yOTA0LDcgKzI5MDQsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2st
PmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogCiAgICAgaWYgKGtl
eS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmluZ0ltcGwqIHZhbHVlID0gYXNTdHJpbmcoa2V5
KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI4
MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OCw3ICszNDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0
ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNW
YWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgSW52YWxpZEdQUlJlZywgSW52YWxpZEdQUlJlZyk7CiAg
ICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksOTIgKzQ5LDEwMyBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgaWYgKG1ldGFkYXRhLm1fc2Vlbklk
ZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlm
aWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwg
cmVnVDIpOworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5t
X3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9m
SWRlbnRpZmllcnMoKSkgeworICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
YmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29k
ZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0
KHNjcmF0Y2hHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUs
IG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIHNjcmF0Y2hHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BS
KTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAs
IHByb2ZpbGUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0
ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOwogCiAg
ICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQotICAgICAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWws
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3Ms
IHN0dWJJbmZvR1BSKTsKKworICAgICAgICAvLyBPT1BTLiBTdXBwb3J0IHRoaXMKKyAgICAgICAg
Ly9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgICAgICAvLyAgICBnZW4u
c3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKworICAgICAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAg
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlW
YWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2Rl
VHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlw
ZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRlcikp
CisgICAgICAgIHJldHVybjsKKworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOwogCi0gICAgICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KG1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1
bWVudEdQUjIpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxz
ZQotICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgQVNTRVJUKEJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkg
PT0gbV9ieXRlY29kZUluZGV4KTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVz
ZWQuCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsK
LSAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwotCi0gICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25HZXRCeVZhbE9wdGltaXplKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBh
cmcxIGFyZzEgYWxyZWFkeSB1c2VkLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9
IGFyZ3VtZW50R1BSMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgc3RhdGljX2Fzc2Vy
dChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlID09IHJlZ1QwKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5ID09IHJlZ1QxKTsKKworICAgIGxv
YWRDb25zdGFudChtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBl
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJu
VmFsdWVHUFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE2MCw4ICsxNzEsOCBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgY29uc3RleHBy
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjU7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1
bWVudEdQUjEpOwogCkBAIC0xODcsMzQgKzE5OCw0MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAgICAgICAgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIEFTU0VS
VChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKQEAgLTIyMyw5
ICsyNDEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVP
cHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBh
cmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMjM1LDI2
ICsyNTUsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwog
CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJn
MSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnZh
bHVlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMzAwLDIxICszMTQsMjggQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5
dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcg
YnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJh
bmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwotCiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJy
YW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAK
ICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVu
Y2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC0zMjgsMTMgKzM0
OSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiB7CiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOworCiAgICAgSklUUHJpdmF0ZUJyYW5k
QWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJy
YW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtMzQ0LDI0ICszNjksMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Nl
dF9wcml2YXRlX2JyYW5kKAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJl
Z1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHBy
b3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZgogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVf
YnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM3MCwxOSAr
Mzg5LDI4IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY28KICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgcmVnVDEp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJy
YW5kLCBicmFuZEdQUik7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpD
aGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJp
dmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZv
R1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0
ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiB9CiAKQEAgLTM5NCw5ICs0MjIsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJh
bmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNo
ZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC00MDYsMjQgKzQzNiwxOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNl
ZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNs
dHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMs
IEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUp
Pjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7
Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25DaGVja1ByaXZh
dGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGly
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzUsMzAgKzQ1
OSw0MiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmls
ZSksIHJlZ1QzKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmls
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJlZ1Q0KTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9maWxlR1BSKTsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZB
cnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCk7Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KHByb3BlcnR5KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRy
dWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWVHUFIpLCBwcm9maWxlR1BSLCBzdHViSW5mb0dQUik7CisgICAgLy8gT09QUzoKKyAgICAv
L2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCisgICAgLy8gICAgZ2VuLnN0dWJJ
bmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDsKKyAgICBzdHViSW5mby0+cHV0
S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsRGlyZWN0PiA/IFB1dEtpbmQ6OkRp
cmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21h
TW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0
dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBw
ZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00NzQsMTUgKzUxMCwxMiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21h
TW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBu
dWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFN
b2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTQ5OCw3ICs1
MzEsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4g
dGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RP
cHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFI0KTsKKyAg
ICBpZiAoaXNEaXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCksIE9wUHV0QnlWYWxEaXJl
Y3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAg
IGVsc2UKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbERpcmVjdDo6TWV0YWRhdGE6Om9m
ZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0
cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1l
bnRHUFI0LCBhcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtNTEyLDcgKzU1NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBDYWxsIGNhbGw7
CiAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRp
b25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRp
bWl6ZSk7CkBAIC01MjMsNyArNTY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNTM5LDEx
ICs1ODEsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
ICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9i
YWxPYmplY3RHUFIgPSByZWdUNTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1
ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9m
aWxlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpwcm9maWxlOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAgIGppdC5zdG9yZTMyKGJ5
dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpKTsKQEAgLTU3MCwyMCArNjEyLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9w
cml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QyKSwgSW52YWxpZEdQUlJlZywgcmVnVDQpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxp
ZEdQUlJlZywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPnByaXZh
dGVGaWVsZFB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC02
MDMsMTMgKzY1NiwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShj
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0
aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRl
RmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3Vy
ZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0
dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50
R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFI0KTsKKyAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJh
dGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZh
bFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudHNHUFIzLCBhcmd1bWVudEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNjIyLDE4ICs2NzYsMTIgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCkBAIC02NDgsOSArNjk2LDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3MjgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdU
MSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzczOCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1Qx
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc0OSw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0
dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRl
ciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwg
cmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmli
dXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzA5LDcgKzc2
MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQz
Ml90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
ckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzcxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwg
YXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEs
IGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc4MCwzMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVs
QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BS
ID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAot
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJZDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0
aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBl
bWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJy
aWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODIyLDE3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJ
bmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJ
ZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRy
dXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODQ2LDE5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1
bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lkX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2Fs
bCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVs
ZXRlQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODQ1LDIyICs5MDUsMzMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2Up
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BS
LCBwcm9wZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBCYXNlbGluZURl
bEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0
aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJz
LgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmll
ciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5NTQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0
ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVu
dEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGlt
aXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCArOTcyLDE5IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIg
PSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1
ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQ
UiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CkBAIC05NjEsMjIgKzEwMjksMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChj
b25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5
R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBi
YXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZS
ZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1
YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEw
NjMsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRC
eUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVu
dEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCBy
ZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtMTAwMywyNiArMTA4MywyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVu
dEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIp
OwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdl
dEJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9p
ZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
blRyeUdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTEwMzAsMjIgKzExMDQsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjb25zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZS0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFz
ZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVn
KTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0
dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q7CisgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMDU0LDE2
ICsxMTM3LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkRGly
ZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVu
dEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9u
R2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTA3Myw4MyArMTE1OCw2
MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBh
cmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogICAgIAogICAgIGlmICgqaWRlbnQg
PT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
ewotICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFi
c29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAg
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgJm1ldGFkYXRhLm1fbW9k
ZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUsIHJlZ1QxKTsKKyAgICAgICAg
bG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9m
TW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhOjpvZmZzZXRPZk1vZGUoKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RF
cXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5
SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0
YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxp
bmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlz
VmFsdWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEsIHRoaXNWUmVnKTsKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
Ci0KLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVn
cywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQog
CkBAIC0xMTU4LDE2ICsxMjIxLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQo
Y29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNDIsNTgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBhcmd1bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHBy
b3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFs
dWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVl
R1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVl
R1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
V2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNW
YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlk
V2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aEdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKwor
ICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVn
cywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQ
Uik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dp
dGhUaGlzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
IH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI0MSwxNiArMTMzOCwxOSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwg
b3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBy
ZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1p
emUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEyNjAsMjkgKzEzNjAsMjMgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGlu
IHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1Zh
bHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwot
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhU
aGlzT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRp
b25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQorICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK31zCiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mIHZtKQpAQCAt
MTMyOSwyMyArMTQyMywzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wg
ZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8g
YmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNl
dCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1l
bnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3
ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQg
YXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0
ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAg
IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0S2luZDo6
RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVj
bWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFw
cGVuZChnZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0NjcsMTgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAog
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgr
K107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQ
YXRoRnVuY3Rpb24oKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
YXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
I2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3NiwyNSArMTQ4OCwxOSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4g
dXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJh
c2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQo
dmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCkBAIC0xNDQxLDIwICsxNTQ3LDMxIEBAIHZvaWQgSklUOjplbWl0X29w
X2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
SW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1
YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6SW5CeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29k
ZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBz
dHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKwor
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCkBAIC0xNDYzLDE0ICsxNTgwLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9p
ZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZElu
ZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0ODAsMjggKzE2MDAsMjIgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lz
dGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRH
UFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRy
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
ICAgICAvLyBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4
YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0
aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgog
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9w
dGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlk
T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25J
bkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxMCwyNSArMTYyNCwzMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3Bl
cnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAg
ICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUzNywxNSArMTY1OSwxOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
aW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxl
LCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBP
cEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NTYsNTEgKzE2ODEsNTYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1l
bnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwg
T3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7
CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8g
ZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3Jl
YXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUu
CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZh
bE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBD
YWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25J
bkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25JbkJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJy
YW5kLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
dHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSB0eXBlOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7
CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1p
dEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3Zv
aWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQog
ewogICAgIEFTU0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUg
PT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIApAQCAtMTYwOCw3ICsxNzM4LDExIEBA
IHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2kKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJp
dmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBv
cGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc1MiwyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1By
aXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJy
YW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRl
Y2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFu
ZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2
YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9w
cml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0
ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2
YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQ
cml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxNzgw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRl
Y29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2
YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3Bl
cnR5LCAsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaGFzX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE2NjYsMTkgKzE3OTQsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2
YXRlX2JyYW5kKAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVCcmFuZD4oKTsKLSAgICBl
bWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVC
cmFuZCk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5t
X2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgo
RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhcklu
amVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0lu
dmFsaWRhdGVkKSkpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZz
ZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQog
ewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwpAQCAtMTY4OCw2ICsxODE5LDcg
QEAgdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaQogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTcwMSw3ICsxODMzLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNT
Y29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2so
cmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNv
bnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMSk7CiAg
ICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwg
cmVnVDEpOwogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExl
eGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKQEAgLTE3MTUsNyArMTg0Nyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSog
Y29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2
ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50
U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKICAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTc5NCw1OSArMTkyNiw3NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZl
VHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fcmVzb2x2ZVR5
cGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRl
Y29kZUluZGV4KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRl
Y29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEFTU0VSVChtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3Ry
dWN0aW9uKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIC8vIElmIHdlIHByb2ZpbGUgY2VydGFp
biByZXNvbHZlIHR5cGVzLCB3ZSdyZSBnYXVyYW50ZWVkIGFsbCBsaW5rZWQgY29kZSB3aWxsIGhh
dmUgdGhlIHNhbWUKKyAgICAvLyByZXNvbHZlIHR5cGUuCiAKLSAgICBpZiAocmVzb2x2ZVR5cGUg
PT0gTW9kdWxlVmFyKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhp
Y2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5
cGUgPT0gTW9kdWxlVmFyKSAKKyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVudCgpLCBy
ZWdUMCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1f
Y29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICAgICAgcHRy
ZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5v
ZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOworCisgICAgICAgIGF1dG8gY2xvc3VyZVZh
ckdlbmVyYXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayhDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2Nv
cGUgQ2xvc3VyZVZhciIpOworICAgICAgICB9OworCisgICAgICAgIGF1dG8gY2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgICAgICBy
ZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyIpOworICAgICAgICB9OwogCi0jZGVmaW5lIFJFU09MVkVfU0NP
UEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUj
I0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRv
cnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShSRVNPTFZFX1NDT1BF
X0dFTkVSQVRPUikKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0g
W10gKFZNJikgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29w
ZVRodW5rKHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMi
KTsKICAgICAgICAgfTsKLSN1bmRlZiBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgorCisgICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgc2NvcGVHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZz
ZXQpLCBtZXRhZGF0YUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zm
c2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29k
ZTsKKyAgICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAg
ICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAgICAg
ICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yKTsKKyAg
ICAgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
ICAgIH0KIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVU
aHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZl
U2NvcGVUaHVuayhzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3Qg
Y2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBm
dW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1
c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CisKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcFJlc29s
dmVTY29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJl
Z1Q3OyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsg
Ly8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVn
VDU7IC8vIGluY29taW5nIC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4KICAgICBjb25zdGV4cHIg
R1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwogICAgIFVOVVNFRF9QQVJBTShieXRlY29k
ZU9mZnNldEdQUik7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcFJlc29sdmVT
Y29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIGppdC50
YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMs
IG1ldGFkYXRhR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIo
cmVnVDMsIG1ldGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCkBAIC0xODU1
LDI2ICsyMDA1LDI2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZh
bGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAgICAg
ICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxP
YmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNl
dDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAg
fTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAg
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9s
b2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBqaXQubW92ZShzY29wZUdQUiwgcmVn
VDApOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOwogCi0gICAgICAgIExh
YmVsIGxvb3AgPSBsYWJlbCgpOwotICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0MzIoWmVy
bywgcmVnVDEpOworICAgICAgICBMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7CisgICAgICAgIEp1
bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOwogICAgICAgICB7Ci0gICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwg
cmVnVDApOwotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAg
ICAgICAgICBqdW1wKCkubGlua1RvKGxvb3AsIHRoaXMpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAg
ICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAgICAgICAgICBq
aXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsKICAgICAgICAgfQotICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgIGRvbmUubGluaygmaml0KTsKICAgICB9OwogCiAgICAgYXV0byBl
bWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKQEAgLTE4ODIsMTIgKzIw
MzIsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29w
ZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkuCi0gICAgICAg
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0
R1BSKTsKLSAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7Ci0g
ICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xv
YmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGlu
Z0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShnbG9iYWxPYmplY3RHUFIsIHJl
Z1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNU
X09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEp
OworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRk
cmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGlj
YWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubW92ZShnbG9iYWxP
YmplY3RHUFIsIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4
OTcsMTEgKzIwNDcsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9h
ZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAg
IC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKQotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmpl
Y3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAgICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNl
dE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0xOTA5LDcgKzIwNTks
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgICAg
ICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xv
c3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0xOTE5LDgzICsyMDY5LDQ1IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAg
IH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwot
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZl
VHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RH
bG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6
Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Cisg
ICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlw
ZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2Ug
ewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVn
VDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVn
VDApOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsK
KyAgICAgICAgYXV0byBlbWl0Q2FzZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsK
KyAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUpOworICAgICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAg
ICAgICAgIG5vdENhc2UubGluaygmaml0KTsKKyAgICAgICAgfTsKIAotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyKTsKKyAgICAg
ICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhp
Y2FsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsK
LSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xv
d19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dD
YXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
d0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVf
c2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0K
IAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZlX3Nj
b3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAg
aWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkp
IFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAg
ICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUs
ICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1G
T1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3Vu
ZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZN
JiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2Fu
IG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRoIGFs
cmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAtMjA2
NSw2ICsyMTc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8g
T09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTIx
NzgsNyArMjI5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTIxODYsOSArMjI5
OSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0
aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRp
b25HZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwog
fQogCiAjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTIxOTYsNDEgKzIzMDks
NTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwor
ICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NF
UlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09
IGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBb
XSAoVk0mKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVu
ayhDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsK
KyAgICB9OworCisgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVy
YXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21T
Y29wZVRodW5rKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9w
X2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0byBnZW5lcmlj
R2V0RnJvbVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICByZXR1cm4gSklUOjpn
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dl
dF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBt
ZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdU
NjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKLSAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0gICAgICAgIHVpbnRwdHJfdCogb3Bl
cmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJh
bmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUq
Pigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90
IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0
YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2RlZmlu
ZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3Bl
XyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2Vu
ZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQ
RShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAgIH07Ci0jdW5kZWYgR0VUX0ZST01f
U0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVH
UFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BS
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7
Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BS
KTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJh
dG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0gICAgfQorICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICBpZiAocHJv
ZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJ
U3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBjb2RlID0g
dm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7
CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0RnJvbVNj
b3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJv
bVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFt
ZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9w
R2V0RnJvbVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUs
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5
IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJ
VCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgpA
QCAtMjIzOSw3NyArMjM2MSw2OCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZv
ck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAK
LSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRh
VGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
KyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRh
dGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsK
IAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFkYXRhU3RydWN0dXJl
T2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgbWV0YWRhdGFT
dHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsK
LSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAg
ICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAg
IGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUikg
eworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zm
c2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJl
Z1QwKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJl
Z1QxKSk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9
IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSks
IHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAg
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRj
aHBvaW50KSksIHJlZ1QzKTsKICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWws
IEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFy
RnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBs
b2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxv
YWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0g
WyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBsc2hpZnQ2NChU
cnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9w
ZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5s
c2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOworICAgICAgICBqaXQuYWRkUHRy
KHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhvcGVy
YW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1Qw
KTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8gZW1pdENvZGUg
PSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2
ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
c3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5j
ZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9i
amVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRo
ZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
c2NvcGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ug
d2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmpl
Y3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUg
dmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVn
VDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwogICAgICAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKICAgICAgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2Nv
cGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAg
ICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIo
RXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQoc2NvcGVkTGFt
YmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAg
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGppdC5icmFu
Y2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgb2Zmc2V0KTsKICAgICAg
ICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRP
ZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMy
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29u
KEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5s
aW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNo
MzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGlu
ZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0
SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZz
ZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAg
ICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChm
aXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3Vs
dCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0Lm5lZzMyKG9mZnNldCk7
CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAg
ICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0
LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBy
ZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9i
YWxWYXI6CkBAIC0yMzE3LDIxICsyNDMwLDE5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAg
ICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJh
bmQpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCByZWdU
Myk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRh
dGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwogICAgICAgICAgICAgZW1pdEdldENsb3N1
cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBA
IC0yMzQxLDc5ICsyNDUyLDU2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0g
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0
UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAg
ICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUs
IGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlz
Tm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgq
cmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOwor
ICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJ
bmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgaml0
LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZv
KCkpLCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6
dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAg
IEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFBy
b3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxz
ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEds
b2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsoJmppdCk7CisK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0LmJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBKdW1wIGlzR2xv
YmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3Bl
cnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4
aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBq
aXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5r
KCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1w
KCkpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwor
ICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0
KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAs
IEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxl
KSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0
YTo6b2Zmc2V0T2ZQcm9maWxlKCkpKTsKIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hC
dWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0oKS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
dGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9S
KHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6b3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAot
ICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNj
b3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBK
SVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZV8iICNyZXNvbHZl
VHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX0dFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0K
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9m
cm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVk
IGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5l
IEpJVCBiZWNhdXNlCkBAIC0yNDcxLDg2ICsyNTU5LDc5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7
Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9i
YWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5k
aXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsK
LSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdU
MCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0
Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9m
KFJlZ2lzdGVyKSkpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1
dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0
YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZl
VHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0
cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2lu
Y2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxP
YmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0
aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMg
dmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGlu
ZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVz
b2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6b2Zmc2V0
T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0ciha
ZXJvLCByZWdUMSkpOworICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVy
ZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSkpOworCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMik7CiAKICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2
b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkp
OworICAgICAgICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICAgICAg
ICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMyk7CiAgICAgICAgICAgICB9
KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwg
cmVnVDEpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7CiAgICAg
ICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJ
bmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMSwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSk7CisgICAgICAgICAgICAvLyBPT1BTOiB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJz
aW9uIHRoYXQgdG9vayBHUFJSZWdzIGluc3RlYWQgb2YgVlJzCisgICAgICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2Ug
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29u
c3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAg
IGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAm
JiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKyAgICAgICAgICAgIGVtaXRW
YXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
T3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihi
eXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8g
ZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVk
IHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1Qw
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
LSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAg
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVt
aXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJh
bmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQp
OwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVn
VDEpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAg
ICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAgICAgICAgLy8gT09Q
UzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9y
IHZhbHVlLgorICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsK
LSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVl
LCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9p
bnRTZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAg
ICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdU
MSwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgU2NhbGVFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQg
YmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIG93bmVyL3Zh
bHVlLgogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoK
QEAgLTI1NjQsNTggKzI2NDUsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNv
bnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
LSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVU
eXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlz
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8g
cHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAg
ICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRo
aXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lw
VG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZh
ci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUg
dGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBw
cm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIs
CisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIKKyAg
ICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBp
cyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAv
LyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsK
KyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikK
KyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9m
aWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAg
ICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZWxz
ZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDAp
OwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVt
aXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7
CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsK
KyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIu
bGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24g
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAg
IG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxp
bmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAg
ICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAg
ICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTggKzI2OTksMjEgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2Nv
cGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5
dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIp
IHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAg
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElmIGFu
eSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENvZGVC
bG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFyLgog
ICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRl
X2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2UgewogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1bWVu
dEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQp
ID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAg
IEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAgLTI3MDEsNyArMjc3OSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQ2NChBZGRy
ZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNzU5LDcgKzI4MzcsNiBAQCB2b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcihKU0NlbGwqIG93bmVyCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxf
ZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKQEAgLTI3NjcsNyArMjg0NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9p
bnRlcm5hbF9maWVsZChjb24KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qx
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8
Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCkBAIC0yNzg5LDcgKzI4NjYsNiBAQCB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsPE9wCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRl
Y29kZS5tX21vZGU7CkBAIC0yODA1LDcgKzI4ODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX25leHQoY29uc3QgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8v
IFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVj
aWFsIGNhc2UgaXQgaWYgd2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFk
YXRhLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3du
U3RydWN0dXJlTW9kZSkgeworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok93blN0cnVjdHVyZU1vZGUpIHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdU
MzsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9y
R1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJv
LCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6bW9kZVNl
dE9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0
cnVjdHVyZU1vZGUpKSk7CkBAIC0yODQ3LDc4ICsyOTIzLDg2IEBAIHZvaWQgSklUOjplbWl0X29w
X2VudW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFs
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBieXRlY29kZS5t
X3Byb3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CiAKLSAgICBhdXRvIHJlc3Vs
dEdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVF
bnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBC
YXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJz
OjpzY3JhdGNoMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVt
ZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCBy
ZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRl
QWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21N
ZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JN
ZXRhZGF0YSgpLCBzY3JhdGNoMik7CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIpOworICAg
IHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VH
UFIpKTsKICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgotICAg
IEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1Qy
LCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlzTm90T3du
U3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzY3JhdGNoMywgVHJ1c3RlZElt
bTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJl
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QzKTsK
LSAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlE
T2Zmc2V0KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHNjcmF0
Y2gxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMy
KE5vdEVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21wdXRlIHRo
ZSBvZmZzZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDMpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJZiBpbmRl
eCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRo
ZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAg
ICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQorICAgIEp1bXAgb3V0T2ZM
aW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3Jh
dGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAgICBs
b2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBl
bmQoanVtcCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0
T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdU
MiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSwgcmVnVDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdU
MywgcmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3Jh
dGNoMik7CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0
Y2gyLCBzY3JhdGNoMik7CiAgICAgY29uc3RleHByIGludHB0cl90IG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSA9IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0YXRpY19j
YXN0PGludHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQoQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVz
dWx0R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0Vp
Z2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5h
cHBlbmQoanVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7Ci0gICAg
c3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25T
dHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0
YWRhdGEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksIGJ5
dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkp
OwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc05v
dEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQg
PSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdp
dGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAgICBp
c05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisK
KyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRC
eVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAogICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTI3LDEwICszMDExLDkgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93
Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVy
KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRo
RnVuY3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUm
IGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJ
VDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0
aW9uVHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0y
OTM5LDcgKzMwMjIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUlt
CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
b2RlLCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1f
ZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5
dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgcmVnVDEpOwor
ICAgIG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1QxLCBieXRl
Y29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsK
IAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwogCkBA
IC0zMDI4LDYgKzMxMTMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lcgogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIAordm9p
ZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQoreworICAgIEp1bXAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNlbGVjdFNj
cmF0Y2hHUFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0Myw3ICsxNTQzLDcgQEAgc3RhdGljIHZvaWQg
cmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogCiB2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpk
dW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0
UGF0aFN0YXJ0KCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgp
LCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7
CiAgICAgCiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBj
b3B5KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0
ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRl
Z2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBv
cGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9y
aCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEo
dDEsIHQyKQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZz
ZXRbY2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFj
cm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRh
IGluIHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cp
CiAgICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1
cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAg
ICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQog
CiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQ
cm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJp
dGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAg
IG1ldGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAu
b3BOZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93
CiAgICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisg
ICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUs
IHQzKQogICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAg
IGJpYSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0
MQotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRl
VW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQog
ICAgIHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYg
QEAgZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0
cnVjdCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRo
UHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRh
ZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAg
ICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMs
IHQyKQogICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8g
YmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJU
YWcsIC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0g
ICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQy
KQogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3Rv
cmUodDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEy
ICsxMTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAg
ICAgICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFn
LCAub3AxTm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cK
LSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50
LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRS
ZWFkeQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQx
Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJl
ck51bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0
LCB0MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBv
cGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5p
dGVseSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0
VGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQor
ICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2Zp
bGVJbnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWky
ZCB0MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEs
MTMgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSBQ
QywgYTEKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBi
dHB6IHIwLCAucmVjb3ZlcgotCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisgICAgICAgICAg
ICAjIEJhc2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFu
dCBwb29sLgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgICAgICAg
ICBsb2FkcCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAgICBsb2FkcCBD
b2RlQmxvY2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwogICAgICAgICAg
ICAgaWYgQVJNNjRFCiAgICAgICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIg
SlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6Omxvb3BPU1JF
bnRyeSkgKiBQdHJTaXplLCBhMgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJ
VEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0
RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVO
YW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBl
bmQKLQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwg
OF0sIHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3MCw3IEBAIG1h
Y3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9w
ZXJhdGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0
b3JlcSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFBy
b2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
QXJpdGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93
OgpAQCAtMTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9w
X25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
cmV0dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9y
aCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0
MikKQEAgLTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUs
IE9wTmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBu
ZWdpIHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJp
dGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0
aFByb2ZpbGVJbnQsIHQxLCB0NCkKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAg
ICAgYnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAw
MDAwMDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikK
KyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVy
LCB0MSwgdDQpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCAr
MTE2MCw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBs
bGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEo
dDUsIHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0
eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJp
dGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3Jocywg
dDApCiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUoc2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0
b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBp
bnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJv
ZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQ0KQogICAgICAgICBkaXNw
YXRjaCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJl
clRhZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEs
IGZ0MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVy
TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90
SW50T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAg
ICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVt
YmVySW50LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVh
ZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA2LDcgKzExOTgsNyBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFu
ZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAg
ICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwot
ICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmlu
YXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwg
dDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAg
ICAgICAgIGZxMmQgdDEsIGZ0MQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgxODY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTU2LDYgKzI1NTYsMTcgQEAgbWFjcm8gbm90U3VwcG9ydGVkKCkKICAgICBl
bmQKIGVuZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
dHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgVW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAg
b3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKwogLy8gRklY
TUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0X1dJTiBjb25kaXRpb24gaGVyZSwgc2lu
Y2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUgZmFsc2Ugb24gV2luZG93cwogLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNgogaWYgV0VCQVNTRU1C
TFkgYW5kIG5vdCBYODZfNjRfV0lOCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDggKzQ4LDEwIEBAIHB1YmxpYzoKICAgICBDYWNoZWFibGVJZGVudGlm
aWVyKCkgPSBkZWZhdWx0OwogCiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVy
IGNyZWF0ZUZyb21DZWxsKEpTQ2VsbCogaWRlbnRpZmllcik7Ci0gICAgc3RhdGljIGlubGluZSBD
YWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhD
b2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFi
bGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxv
Y2sqLCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIGNvbnN0IElkZW50aWZp
ZXImKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMg
aW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBp
bmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKFVu
aXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBDYWNoZWFibGVJZGVudGlm
aWVyIGNyZWF0ZUZyb21SYXdCaXRzKHVpbnRwdHJfdCByYXdCaXRzKSB7IHJldHVybiBDYWNoZWFi
bGVJZGVudGlmaWVyKHJhd0JpdHMpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxl
SWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE0IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29k
ZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBj
b2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhjb2RlQmxvY2ssIGkuaW1wbCgpKTsKIH0KIAotaW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUg
Q2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxvY2st
Pmhhc0lkZW50aWZpZXIodWlkKSk7CiAgICAgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIodWlk
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3
IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUo
SklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVn
YXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQp
CiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJv
ZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRo
UHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJl
c3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlz
aW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhl
Y3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9CiAgICAgc3Rh
dGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAgc3RhdGljIGlu
bGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsgfQorICAg
IHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVC
YXNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437099</attachid>
            <date>2021-09-01 18:13:15 -0700</date>
            <delta_ts>2021-09-01 19:26:31 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>402520</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MTg2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODMxLDYgKzgzMSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IH07CiAJ
CTUyRUVENzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFRUQ3OTMyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgw
MDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIw
MDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVk
U291cmNlMy1tbS5tbSAqLzsgfTsKQEAgLTE0MTYsMTAgKzE0MTcsMTAgQEAKIAkJQTM4Q0E1OUUy
NkREODRERTAwQzhEODRDIC8qIElTTzg2MDEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEzOENBNTlDMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmgg
Ki87IH07CiAJCUEzOEQyNTBFMjU4MDBENDQwMDQyQkZERCAvKiBKU0FycmF5QnVmZmVyUHJvdG90
eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTM4RDI1MEQyNTgwMEQ0MzAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxp
bmVzLmggKi87IH07CiAJCUEzOEQ1QkZDMjY2NkQzREEwMEExMDlBNiAvKiBJbkJ5U3RhdHVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzhENUJGQTI2
NjZEM0RBMDBBMTA5QTYgLyogSW5CeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUEzRUU4NTQzMjYyNTE0QjAwMEZDOUI4RCAvKiBJbnRs
V29ya2Fyb3VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMzc2MTk0MDI2MjUxMjdDMDBDQkNCQTkgLyogSW50bFdvcmthcm91bmQuY3BwICovOyB9
OwogCQlBM0M3RURCNjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VE
QjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLzsgfTsK
IAkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIzMjZCMERCMzcw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmggKi87IH07CiAJCUEzQzdFREJBMjZCMERCMzgw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAv
KiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKKwkJQTNFRTg1NDMyNjI1MTRC
MDAwRkM5QjhEIC8qIEludGxXb3JrYXJvdW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzNzYxOTQwMjYyNTEyN0MwMENCQ0JBOSAvKiBJbnRsV29y
a2Fyb3VuZC5jcHAgKi87IH07CiAJCUEzRkY5QkM3MjIzNDc0OTEwMEIxQTlBQiAvKiBZYXJyRmxh
Z3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRkY5
QkM1MjIzNDc0NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyog
SmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTUwM0ZBMTQxODhFMEZBRjAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJh
bWUuaCAqLzsgfTsKIAkJQTUwM0ZBMUUxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENh
bGxGcmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTUwM0ZBMTgxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZVByb3RvdHlwZS5oICovOyB9OwpAQCAtMzY2Nyw2ICszNjY4LDggQEAKIAkJNTJDRDBGNjQyMjQy
RjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBwYXRoID0gZGZnL3Rlc3Rk
ZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQxMzA4RjIyMUNFMDNBMDA5
QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0g
Zm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNjI2RTAzOUIzMDA1
NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VsaW5lSklUQ29k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNzI2RTAzOUI0MDA1NEU0
MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VsaW5lSklU
Q29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkyMjQ5MkI4Njgw
MDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5j
dGlvbkFsbG93bGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkz
MjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
dW5jdGlvbkFsbG93bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1
QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI1Niw2ICs2MjU5LDggQEAKIAkJCQk2Qjc2N0U3QTI2
NzkxRjI3MDAxN0Y4RDEgLyogQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaCAqLywKIAkJCQk3MjM5
OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLywKIAkJCQk3MjM5
OThGNTI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8sCisJCQkJNTJERDAw
MDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8sCisJCQkJNTJERDAw
MDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovLAogCQkJCTBGNjRCMjZG
MUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGNjRCMjcwMUE3
ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4MzkyRDFCQUNBOUQz
MDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApAQCAtOTY5Niw2ICs5NzAxLDcgQEAK
IAkJCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTgg
LyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlDQzg5MTkzQUM2MEEw
MDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzYx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgko
cmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91cCA6
UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAg
IHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRUeXBl
cywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRhdGE6
IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJp
dGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZhbHVl
UHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5SW5Q
bGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDogVmly
dHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAg
ICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZQor
ICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDp0
b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRzdDog
VmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWdu
ZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5
QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioK
ICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
T3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBA
IFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJu
ICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
K3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4
KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhw
ciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dp
dGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3lt
Ym9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOworICAg
ICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9mZnNl
dE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6
Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3Bv
aW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJl
dHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAgY2Fz
ZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRvbmVQ
cm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1cm4g
Qnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAg
IHJldHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5cGVu
YW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29kZU1l
dGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlz
aW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExpbmtJ
bmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsKIH0K
IAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0
UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50
ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjI1LDYgKzIyMCwxMiBAQCB2b2lkIENhbGxM
aW5rSW5mbzo6c2V0TWF4QXJndW1lbnRDb3VudEluCiAgICAgbV9tYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA9IHZhbHVlOwogfQogCitDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KGlzRGlyZWN0KCkgJiYgaXNUYWlsQ2FsbCgpKTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCk7Cit9
CisKIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogewogICAgIGF1dG8gaGFu
ZGxlU3BlY2lmaWNDYWxsZWUgPSBbJl0gKEpTRnVuY3Rpb24qIGNhbGxlZSkgewpAQCAtMjk4LDIz
ICsyOTksMTEgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAg
IG1fZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGpp
dCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVz
ZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BS
LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFp
bENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAg
c2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVn
KTsKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBj
YWxsTGlua0luZm9HUFIpOwotICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNh
bGxMaW5rSW5mb0dQUjsKLSAgICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFi
ZWwoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3Qgc2xvd1BhdGg7CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VE
YXRhSUMgPT0gVXNlRGF0YUlDOjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBq
aXQuc2NyYXRjaFJlZ2lzdGVyKCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsg
CiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMx
Miw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAg
ICAgIGdvUG9seW1vcnBoaWMgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblpl
cm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2Fs
bGVlTWFzaykpOwogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewog
ICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3Jw
aGljLmxpbmsoJmppdCk7IC8vIFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3Rh
Y2sgcHJlcC4KICAgICAgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhj
YWxsTGlua0luZm9HUFIsIG9mZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpT
RW50cnlQdHJUYWcpOwpAQCAtMzM2LDE0ICszMjUsMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0
cldpdGhQYXRjaChDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNr
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgY2FsbDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAg
ICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAg
ICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VS
VChjYWxsTGlua0luZm8pOwogICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAg
ICAgICAgICAgdS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNh
bGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUu
Y29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbGVlQ2hlY2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyAr
MzQ0LDM0IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxs
SGVscGVyczo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
QyB1c2VEYXRhSUMpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAg
cmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwg
dXNlRGF0YUlDLCBudWxscHRyKTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisg
ICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZv
R1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5k
YXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAg
cmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5m
b0dQUiwgdXNlRGF0YUlDLCBpc1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2Fs
bCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFp
bENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNh
bGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwor
ICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5v
LCBpc1RhaWxDYWxsKCksIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7
CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNh
bGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAg
IHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlu
a0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2Fs
bCkpOwogfQogCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxI
ZWxwZXJzJiBqaXQpCkBAIC0zNjksMTcgKzM4MSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1p
dFNsb3dQYXRoKFZNJiB2bSwgCiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5
UHRyVGFnKTsKIH0KIAordm9pZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYs
IENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5t
b3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0
aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0
aWFsaXplRGF0YUlDKFZNJiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExp
bmtJbmZvLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAg
IG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJ
bmRleCk7CisgICAgc2V0VXBDYWxsKHVubGlua2VkQ2FsbExpbmtJbmZvLmNhbGxUeXBlLCBjYWxs
ZWVHUFIpOworICAgIG1fZG9uZUxvY2F0aW9uID0gdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxv
Y2F0aW9uOworICAgIGlmICh1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKQor
ICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVE
YXRhPigqdW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSk7IC8vIE9PUFM6IHRp
bWUgZm9yIHJlZiBjb3VudGluZz8KKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7
CisgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAg
c2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKIHZv
aWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7CiAKICAgICBzZXRVc2VzRGF0YUlD
cyhVc2VEYXRhSUM6Ok5vKTsKIAotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgp
OwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgYXV0byBjYWxsID0gaml0Lm5l
YXJDYWxsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewogICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwpAQCAtMzk3LDcgKzQyMiw3IEBA
IHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIGF1dG8gZmFz
dFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOworICAgICAgICB1
LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CiAgICAgfSk7CiAKICAgICAvLyAtIElmIHdlJ3JlIG5v
dCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24g
MjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0MywxMSBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogZW51
bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogc3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogCitz
dHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87CisKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1Ymxp
YyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiBwdWJsaWM6Ci0gICAgZW51
bSBDYWxsVHlwZSB7CisgICAgZW51bSBDYWxsVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25l
LAogICAgICAgICBDYWxsLAogICAgICAgICBDYWxsVmFyYXJncywKQEAgLTE2NSw2ICsxNjcsOCBA
QCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAorICAg
IHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CisKICAgICBHUFJSZWcgY2FsbGVl
R1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVHUFI7IH0KICAgICAKICAgICBlbnVtIGNsYXNz
IFVzZURhdGFJQyA6IHVpbnQ4X3QgewpAQCAtMTczLDEzICsxNzcsMTYgQEAgcHVibGljOgogICAg
IH07CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0
aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxs
KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxD
YWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNF
RF9SRVRVUk47CiBwdWJsaWM6CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBl
bWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNF
RF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkg
V0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFp
bENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAg
dm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7CiAgICAgdm9pZCBlbWl0RGly
ZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4g
cHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVs
cGVycyYpOworICAgIHN0YXRpYyB2b2lkIGVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwogICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1
YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVz
ZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURhdGFJQzo6WWVzOyB9CkBAIC0yMDMsNyArMjEw
LDYgQEAgcHVibGljOgogICAgICAgICBtX2FsbG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOwog
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwog
CkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9zbG93U3R1YiA9IG51bGxw
dHI7CiAgICAgfQogCi0gICAgSklUU3R1YlJvdXRpbmUqIHNsb3dTdHViKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3Nsb3dTdHViLmdldCgpOwotICAgIH0KLQogICAgIGJvb2wgc2Vlbk9uY2Uo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faGFzU2VlblNob3VsZFJlcGF0Y2g7CkBAIC0zMDgs
OSArMzA5LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+
KG1fY2FsbFR5cGUpOwogICAgIH0KIAotICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAmbV9tYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIH0K
IAogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTM4MSw3
ICszODIsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKKworICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKKwogICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwog
ICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC0zOTcsNiArNDAwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0
aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJU
YWc+IG1fY2FsbGVlTG9jYXRpb247CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoU3RhcnQ7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CiAgICAgICAgIH0gY29kZUlD
OwogICAgIH0gdTsKIApAQCAtNDI0LDYgKzQyOCwxMyBAQCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRD
YWxsTGlua0luZm9Db2RlT3JpCiAgICAgcmV0dXJuIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCk7
CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbyB7CisgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHksIG9ubHkgdXNlZCBieSBiYXNlbGluZSwgc28gdGhp
cyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBDb2RlT3JpZ2luLgorICAgIENhbGxMaW5rSW5mbzo6
Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gZG9uZUxvY2F0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0
YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307CisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcwLDcgKzM3MCw4IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIC8vIHdlIGNhbid0IGdl
bmVyYXRlIGR1cmluZyB1bmxpbmtlZCBieXRlY29kZSBnZW5lcmF0aW9uLiBUaGlzIHByb2Nlc3Mg
aXMgbm90IGFsbG93ZWQgdG8gZ2VuZXJhdGUgY29udHJvbAogLy8gZmxvdyBvciBpbnRyb2R1Y2Ug
bmV3IGxvY2Fscy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB3ZSByZWx5IG9uIGxpdmVuZXNzIGFu
YWx5c2lzIHRvIGJlIHRoZSBzYW1lIGZvcgogLy8gYWxsIHRoZSBDb2RlQmxvY2tzIG9mIGFuIFVu
bGlua2VkQ29kZUJsb2NrLiBXZSByZWx5IG9uIHRoaXMgZmFjdCBieSBjYWNoaW5nIHRoZSBsaXZl
bmVzcyBhbmFseXNpcwotLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLgorLy8gaW5zaWRlIFVu
bGlua2VkQ29kZUJsb2NrLiBBbHNvLCBCYXNlbGluZSBKSVQgY29kZSBpcyBzaGFyZWQgYmV0d2Vl
biBhbGwgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jaywKKy8vIHNvIHRoZSBieXRl
Y29kZSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBiZXR3ZWVuIENvZGVCbG9ja3Mgc2hhcmluZyBhbiBV
bmxpbmtlZENvZGVCbG9jay4KIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVu
bGlua2VkQ29kZUJsb2NrLAogICAgIEpTU2NvcGUqIHNjb3BlKQogewpAQCAtNDY2LDYgKzQ2Nywx
OSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJy
ZWFrOyBcCiAgICAgfQogCisjZGVmaW5lIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShf
X29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEo
X19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29k
ZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAg
ICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUo
X19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRB
KF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENv
ZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAg
ICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVj
dGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1
Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4LDE0ICs1NDIsMTQgQEAgYm9vbCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJv
bWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9w
QWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBM
SU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMp
Ci0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVs
KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAg
IExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJ
VEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC03ODksNiArODAzLDc4
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbkNvbW1vbihWTSYKICAgICBtX293bmVy
RWRnZS5zZXQodm0sIHRoaXMsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmNyZWF0ZSh2bSwg
dGhpcykpOwogfQogCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNv
ZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRDb2RlKGppdENv
ZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0Q29kZU1hcCA9
IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1i
ZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFuZGxlckluZm8m
IGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8gRklYTUU6IDxy
ZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUg
PSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFnZ2Vk
PEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSRUxF
QVNFX0FTU0VSVCghbV9qaXREYXRhKTsKKyAgICBhdXRvIGppdERhdGEgPSBtYWtlVW5pcXVlPEpJ
VERhdGE+KCk7CisKKyAgICBqaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVkVmVjdG9y
PHZvaWQqPihqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCkpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgYXV0byBlbnRyeSA9IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOworICAgICAgICBz
d2l0Y2ggKGVudHJ5LnR5cGUpIHsKKyAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6
Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgIGppdERhdGEtPm1faml0Q29uc3RhbnRQb29sW2ld
ID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbzogeworICAgICAgICAgICAgVW5s
aW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvID0gKnN0YXRpY19jYXN0PFVu
bGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9hZCk7CisgICAgICAgICAgICBDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9y
aWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAv
LyBPT1BTOiBkb24ndCBoYXJkY29kZSB0aGVzZSByZWdpc3RlcnMgbGlrZSB0aGlzLgorICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFsaXplRGF0YUlDKHZtKCksIHVubGlua2VkQ2FsbExp
bmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgaml0
RGF0YS0+bV9qaXRDb25zdGFudFBvb2xbaV0gPSBjYWxsTGlua0luZm87CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm86IHsKKyAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8m
IHVubGlua2VkU3R1YkluZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byo+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gaml0RGF0YS0+bV9zdHViSW5mb3MuYWRkKHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlw
ZSwgQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAg
ICAgIHN0dWJJbmZvLT5pbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8odGhp
cywgdW5saW5rZWRTdHViSW5mbyk7CisgICAgICAgICAgICBqaXREYXRhLT5tX2ppdENvbnN0YW50
UG9vbFtpXSA9IHN0dWJJbmZvOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbDogeworICAgICAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wYXlsb2Fk
KTsKKyAgICAgICAgICAgIGppdERhdGEtPm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25E
ZWNsKGluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHI6IHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZCk7CisgICAg
ICAgICAgICBqaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9uRXhwcihpbmRl
eCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFtX2ppdERhdGEpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgICAgICBtX2ppdERhdGEgPSBXVEZNb3ZlKGppdERhdGEpOworICAgIH0KKworICAg
IHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICBjYXNlIE1v
ZHVsZUNvZGU6CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlu
bGluZWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6Cisg
ICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3
ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJp
ZGUgdGhhdCBvYnNlcnZhdGlvbi4KKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0g
Y2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCgpKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24o
dGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogQ29kZUJsb2NrOjp+Q29kZUJsb2Nr
KCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTMwNzksNyArMzE2NSw3IEBAIHVuc2lnbmVk
IENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAg
Y2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdp
c3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291
bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzI5NSwxMyArMzM4MSwxMyBAQCBCaW5hcnlBcml0
aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2Rl
SUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEFkZD4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX211bDoK
LSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9w
U3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMt
PmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bf
ZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0zMzEzLDExICszMzk5LDExIEBAIFVuYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OnVuYXJ5
QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9uZWdh
dGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1f
YXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5jOgotICAgICAgICByZXR1cm4g
JnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAg
cmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAg
ICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEo
dGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEZWM+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5o
IgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDYWxsTGlua0lu
Zm8uaCIKICNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCkBAIC0xNTgsNyArMTU5LDkgQEAgcHVi
bGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBt
X21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFy
YW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXA7IH0KIApAQCAtMTY3LDcgKzE3MCw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1W
YXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygp
IGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVja3BvaW50cygpICogbWF4TnVt
Q2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJz
KCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywg
bV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9
CkBAIC0yMzIsMTYgKzIzNCw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJh
cEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMo
KTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0g
ICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXph
dGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGlu
IHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgp
ID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2Niw4ICsyNTgsMTAgQEAgcHVi
bGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7CiAgICAg
CiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMgSUNzIGFuZCBz
d2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLCBhbmQgb250byBKSVRDb2RlLgogICAgIHN0cnVjdCBK
SVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJhZzxTdHJ1
Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJ
Q3M7CkBAIC0yODIsOSArMjc2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29sIG1f
aGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2ppdENv
ZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29sOwor
ICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAgIH07
CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJ
VENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkpCkBA
IC0yOTMsNiArMjkxLDggQEAgcHVibGljOgogICAgIH0KICAgICBKSVREYXRhJiBlbnN1cmVKSVRE
YXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZKSVREYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywg
bV9qaXREYXRhKTsgfQorCiAgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJv
ZmlsZSopOwogICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsK
ICAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKQEAgLTMyMiwx
NSArMzIyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBsb29raW5nIGZvciBhIENhbGxMaW5rSW5mb01h
cCB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMuCiAgICAgQ2FsbExpbmtJbmZv
KiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwogICAgIAot
ICAgIHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFwJiYgaml0Q29kZU1hcCkKLSAgICB7Ci0g
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgZW5zdXJl
SklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcCA9IFdURk1vdmUoaml0Q29kZU1hcCk7Ci0gICAg
fQogICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKQogICAgIHsKLSAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICByZXR1cm4gZW5zdXJlSklU
RGF0YShsb2NrZXIpLm1faml0Q29kZU1hcDsKKyAgICAgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGlu
ZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVNYXA7CiAgICAgfQogCiAgICAg
dm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5N
YXA+JiYpOwpAQCAtNDcyLDYgKzQ2Nyw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9y
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFy
Z3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZh
bHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRl
cnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01NzIsNiArNTY4LDcgQEAgcHVibGljOgog
ICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgo
KV0uZ2V0KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBj
b25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25z
dCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNv
bnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW5k
ZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZl
cigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdpc3Rl
cnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQoKTsg
fQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJl
dHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVu
Y3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTYwMSw2
ICs1OTgsMTEgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwog
ICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07
CiAgICAgfQorICAgIFNpbXBsZUp1bXBUYWJsZSYgYmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUoaW50
IHRhYmxlSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29k
ZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKKyAg
ICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMo
KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1
bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtl
ZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUt
PnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9CkBAIC02MTEsNiArNjEzLDEx
IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKICAgICAgICAg
cmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwog
ICAgIH0KKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KGludCB0YWJsZUluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJ
VENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJ
bmRleF07CisgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9m
VW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5k
ZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsgfQpAQCAtNzk3LDYgKzgwNCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsg
fQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVidWdn
ZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEZWJ1Z2dlclJlcXVl
c3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9kZWJ1Z2dlclJlcXVl
c3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRz
KTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCkBA
IC04MzgsNiArODQ2LDcgQEAgcHVibGljOgogICAgIG11dGFibGUgQ29uY3VycmVudEpTTG9jayBt
X2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkOyAvLyBOb3QgYSBiaXRm
aWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMgdG8gc3RvcmUgdG8gaXQuCisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsgfQogCiAjaWYgRU5B
QkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlIDogMjsgLy8gREZH
OjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNiwxMSArOTE1LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhpbnRz
QXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8gU29t
ZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5
IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3VubGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rpb24o
KTsKLSAgICB9CisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJl
dHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1
enppbmdFYXJseVJldHVybigpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJ
bnRJbmxpbmVDYWNoZXMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjgx
ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXAoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spOwogICAgIAogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwQW5k
QWN0aXZhdGUoQ29kZUJsb2NrKiBjb2RlQmxvY2spOworCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlLCBtX2NvZGVCbG9jayk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHJldmlzaW9uIDI4MTg2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9k
ZU1ldGFkYXRhCiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggewogICAg
IEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFk
YXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmlsZSk7IH0KIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsKIApAQCAtODgsNiArODks
NyBAQCB1bmlvbiBHZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUgbW9k
ZTsKICAgICAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBtdXN0
IGJlIHplcm8gd2hlbiB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlk
TW9kZU1ldGFkYXRhLCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0IGRl
ZmF1bHRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAgICAg
R2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9kZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZp
c2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYgKzM4NSw4IEBAIGJvb2wgSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcygKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsK
IH0KIAorLy8gT09QUzogTWFrZSB0aGlzIHN0dWZmIHdvcmsgd2l0aCBkYXRhIGljcyB0byBub3Qg
YXNzdW1lIGlubGluZSBhY2Nlc3MuCisKIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNK
dW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4gdGFyZ2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CkBA
IC00MDQsOSArNDA2LDEyIEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5B
Y2MKIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHRhcmdldCkKIHsKICAgICBpZiAoY29kZUJsb2NrLT51
c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBPT1BTOiBtYWtlIHNvbWUgdmVyc2lvbiBvZiBJbmxp
bmVBY2Nlc3MgZm9yIGJhc2VsaW5lLiBQZXJoYXBzIG1ha2UgaXQgZGF0YSBkcml2ZW4uIE9yIHBl
cmhhcHMgaGF2ZSB0aGUgY29kZQorICAgICAgICAvLyBiZSBzaGFyZWQgc29tZWhvdyBiZXR3ZWVu
IFVubGlua2VkQ29kZUJsb2Nrcy4KKwogICAgICAgICAvLyBJZiBpdCBpcyBub3QgR2V0QnlJZC1s
aWtlLXRoaW5nLCB3ZSBkbyBub3QgZW1pdCBub3Agc2xlZCAoZS5nLiBHZXRCeVZhbCkuCiAgICAg
ICAgIC8vIFRoZSBjb2RlIGlzIGFscmVhZHkgYW4gaW5kaXJlY3QganVtcCwgYW5kIG9ubHkgdGhp
bmcgd2Ugc2hvdWxkIGRvIGlzIHJlcGxhY2luZyBtX2NvZGVQdHIuCi0gICAgICAgIGlmIChzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0
VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcikgewogICAgICAgICAgICAgLy8gSWYgbV9jb2RlUHRyIGlzIHBvaW50aW5nIHRvIHN0
dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbiwgdGhpcyBtZWFucyB0aGF0IElubGluZUFjY2Vz
cyBjb2RlIGlzIG5vdCBhIHN0dWIgb25lLgogICAgICAgICAgICAgLy8gV2UgcmV3cml0ZSB0aGlz
IHdpdGggdGhlIHN0dWItYmFzZWQgZGlzcGF0Y2hpbmcgY29kZSBvbmNlLCBhbmQgY29udGludWUg
dXNpbmcgaXQgdW50aWwgd2UgcmVzZXQgdGhlIGNvZGUuCiAgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8ubV9jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0gc3R1YkluZm8uc2xvd1BhdGhTdGFy
dExvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpIHsKQEAgLTQyMSw2ICs0MjYsNyBAQCB2b2lk
IElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSks
ICJJbmxpbmVBY2Nlc3M6IGxpbmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KKwogICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0
aW9uTW9kZU1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgT1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9S
X0VOVU1fQ0xBUwogCiBzdHJ1Y3QgSXRlcmF0aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90
IHNlZW5Nb2RlcyB7IDAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVz
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1v
ZGVzKTsgfSAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9
PSBzaXplb2YoSXRlcmF0aW9uTW9kZSkpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAy
ODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0
dXJlU3R1YkluZm8uaCIKIAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgi
CisjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJQb2x5bW9y
cGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKIApAQCAtMjg1LDYgKzI4Niw3IEBA
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAgICAgICAgcmVzZXRQ
dXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0
UHJpdmF0ZU5hbWU6CiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlL
aW5kOjpCeVZhbCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlk
OgpAQCAtNDMwLDYgKzQzMiwyMDQgQEAgQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjpzZQogICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVUeXBlOwogfQogCit2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29k
ZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3sK
KyAgICBhY2Nlc3NUeXBlID0gdW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlOworICAgIHN0YXJ0
ID0gdW5saW5rZWRTdHViSW5mby5zdGFydDsgLy8gT09QUzogZG8gd2UgbmVlZCBhIHN0YXJ0IGZv
ciBkYXRhIElDcz8KKyAgICBkb25lTG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2Nh
dGlvbjsKKyAgICBzbG93UGF0aFN0YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQ
YXRoU3RhcnRMb2NhdGlvbjsKKyAgICBjYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleCh1bmxp
bmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIGNvZGVPcmlnaW4gPSBDb2RlT3JpZ2lu
KHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgbV9jb2RlUHRyID0gc2xvd1Bh
dGhTdGFydExvY2F0aW9uOworCisgICAgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICBpZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBl
OjpHZXRCeUlkICYmIHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkp
IHsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9yX25leHQsIHdlIGNhbid0IGNsb2JiZXIgdGhlIHNj
cmF0Y2ggcmVnaXN0ZXIgZWl0aGVyLgorICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gpOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNz
VHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3Rh
bmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5
VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
VHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5
SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpH
ZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5
SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFz
UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25I
YXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQp
IHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5s
aW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRL
aW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5p
c1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0
aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAg
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxk
U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHVu
bGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVj
dDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkp
CisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAg
aWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQ
dXRQcml2YXRlTmFtZToKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gdW5saW5rZWRTdHViSW5m
by5wcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmlu
ZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRl
QnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFu
ZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJp
dmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZh
dGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFj
Y2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBo
YXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5l
RGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNl
bGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNl
bGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBC
YXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAg
dmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9z
dHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpHZXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFs
c2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VP
ZjoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHByb3Rv
dHlwZUlzS25vd25PYmplY3QgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MucHJvdG90eXBlR1BSID0gQmFz
ZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9
IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAg
ICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBi
YXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BS
ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQ
UiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0
QnlJZERpcmVjdDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIGhhc0Nv
bnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRH
UFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7
CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJl
Z3MudGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7
CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJ
ZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50
aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQ
dXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBo
YXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBpZiAoYWNjZXNzVHlw
ZSA9PSBBY2Nlc3NUeXBlOjpQdXRCeVZhbCkKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFs
c2U7CisgICAgICAgIHZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLmJyYW5k
R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgICAgICBtX3N0
dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKICNpZiBBU1NFUlRfRU5BQkxFRAogdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6Y2hlY2tDb25zaXN0ZW5jeSgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjgx
ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKSVRTdHViUm91
dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5o
IgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgpAQCAtNTYsNiArNTcs
NyBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgewogICAgIEdldEJ5VmFsLAogICAg
IFB1dEJ5SWQsCiAgICAgUHV0QnlWYWwsCisgICAgUHV0UHJpdmF0ZU5hbWUsCiAgICAgSW5CeUlk
LAogICAgIEluQnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC03OCw2ICs4MCw4IEBAIGVu
dW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKICAgICBTdHJpbmdMZW5ndGgKIH07CiAKK3N0
cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5m
byB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1YkluZm8pOwogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtOTgsNiArMTAyLDggQEAgcHVibGljOgogICAgIHZv
aWQgZGVyZWYoKTsKICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAorICAgIHZvaWQgaW5pdGlhbGl6
ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8mKTsKKwogICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgLy8g
Q2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJZiBp
dCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCkBAIC00NDcsNiArNDUzLDE4IEBAIGlubGlu
ZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW4KICAgICB9CiB9CiAKK3N0cnVjdCBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Cisg
ICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxk
UHV0S2luZDsKKyAgICBFQ01BTW9kZSBlY21hTW9kZTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXg7CisgICAgLy8gT09QUzogRG8gd2UgbmVlZCBzdGFydCBmb3IgZGF0YSBJQ3M/Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0OyAvLyBUaGlz
IGlzIGVpdGhlciB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJQyBmb3IgKmJ5SWQgY2FjaGVzLiBv
ciB0aGUgbG9jYXRpb24gb2YgcGF0Y2hhYmxlIGp1bXAgZm9yICdpbnN0YW5jZW9mJyBjYWNoZXMu
CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOwor
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzbG93UGF0aFN0YXJ0
TG9jYXRpb247Cit9OworCiAjZWxzZQogCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5dGVj
b2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRGR0V4
aXRQcm9maWxlLmgiCkBAIC02Miw2ICs2Myw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwog
Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNl
bGluZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1l
Q29uc3RhbnQgOiBpbnQzMl90OwogCkBAIC0xNzUsNiArMTc3LDcgQEAgcHVibGljOgogCiAgICAg
Y29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3Rl
cnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJy
aWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0
IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQor
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgo
KV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFu
dEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4g
bV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIxMCwx
NSBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0K
IAogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAg
ICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBj
b25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNp
Z25lZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAg
eworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygp
LmF0KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3Ry
dWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0g
aW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUo
KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVk
IG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAg
ICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0
LDYgKzM0NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5C
eXRlcygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5n
RWFybHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWly
ZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJu
ICFpc0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KIAogcHJvdGVjdGVkOgogICAgIFVubGlua2Vk
Q29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZv
JiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwpAQCAtMzk0LDYgKzQxMSw3IEBAIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJlcyA6IDQ7CiBwdWJsaWM6
CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29k
ZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1f
ZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEw
LDYgKzQyOCw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3Ry
ZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFj
ZSB0byBzdG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1f
YmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5h
cnlBcml0aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJv
ZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtNDU1LDYgKzQ3NiwyOCBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7
CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBw
YykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNv
ZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29k
ZU9mZnNldCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5QXJpdGhQcm9maWxlcy5z
aXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQ
cm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVk
IGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9
IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV91bmFyeUFyaXRoUHJvZmls
ZXMuYXBwZW5kKFVuYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2ln
bmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJp
dGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5
QXJpdGhQcm9maWxlc1tpXTsgfQogCiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGluZUp1bXBU
YXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKICAgICBib29sIHdhc0NvbXBpbGVkV2l0aERl
YnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+d2FzQ29tcGlsZWRX
aXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9CiAgICAgYm9vbCBoYXNDaGVja3BvaW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50cygpOyB9CiAgICAgYm9vbCBoYXNU
YWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aGFzVGFpbENhbGxzKCk7IH0K
KyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUoKSB7IHJldHVybiBtX2NvZGVCbG9j
ay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRo
UHJvZmlsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpOyB9
CiAKICAgICAvLyBVcGRhdGluZyBVbmxpbmtlZENvZGVCbG9jay4KICAgICB2b2lkIHNldEhhc0No
ZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFzQ2hlY2twb2ludHMoKTsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFk
YXRhVGFibGUuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2
NCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVubGlua2VkTWV0
YWRhdGFUYWJsZSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZT4KKyAg
ICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYgb3Bjb2RlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQpOworICAgICAgICB1aW50cHRyX3Qg
YmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bjb2RlOjpvcGNv
ZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07CisgICAgICAgIHJldHVy
biBiYXNlVHlwZU9mZnNldCArIHNpemVvZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSAqIG9w
Y29kZS5tX21ldGFkYXRhSUQ7CisgICAgfQorCiBwcml2YXRlOgogICAgIGVudW0gRW1wdHlUYWcg
eyBFbXB0eSB9OwogCkBAIC0xMDEsNiArMTA5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
IHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVp
bnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MTg2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQCB0ZW1wbGF0ZTx1bnNpZ25lZCBudW1iZXJPZkJ1
Y2tldHNBcmd1bWVuCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1bWVudDsK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzID0g
MTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9IG51bWJl
ck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3RhbE51bWJl
ck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzOwog
ICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQpAQCAtMTM0LDcgKzEzMyw3IEBAIHN0cnVjdCBW
YWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247
CiAgICAgfQotICAgIAorCiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNrZXRzW3RvdGFsTnVtYmVy
T2ZCdWNrZXRzXTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbiB7IFNwZWNOb25l
IH07CkBAIC0xNTYsNiArMTU1LDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJP
ZkJ1Y2tldAogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZhbHVlUHJvZmlsZVdpdGhM
b2dOdW1iZXJPZkJ1Y2tldHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgpIDogVmFsdWVQcm9maWxl
V2l0aExvZ051bWJlck9mQnVja2V0czwwPigpIHsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUs
IG1fYnVja2V0c1swXSk7IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVn
aXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5OCw3ICsxNTk4LDcgQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRVbmFyeQogICAgICAgICBlbWl0VW5hcnlP
cDxPcE5vdD4oZHN0LCBzcmMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIG9wX25lZ2F0ZToK
LSAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUpOworICAgICAgICBP
cE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5
QXJpdGhQcm9maWxlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIG9wX2JpdG5vdDoKICAg
ICAgICAgZW1pdFVuYXJ5T3A8T3BCaXRub3Q+KGRzdCwgc3JjKTsKQEAgLTE2OTYsMTMgKzE2OTYs
MTMgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUeXBlTwogCiBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0g
ICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNE
c3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3Jj
RHN0OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYyhSZWdpc3Rl
cklEKiBzcmNEc3QpCiB7Ci0gICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcERl
Yzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgp
KTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAy
ODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqPgogICAgICAgICBlbWl0QmluYXJ5T3AoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBzcmMyLCBPcGVyYW5kVHlw
ZXMgdHlwZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRz
dCwgc3JjMSwgc3JjMiwgdHlwZXMpOworICAgICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywg
ZHN0LCBzcmMxLCBzcmMyLCB0eXBlcywgbV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJvZmls
ZSgpKTsKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODksNyArODg5LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2Fz
ZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwg
SW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAg
ICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5
bG9hZEdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7
CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7
CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5w
cmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODk2LDcgKzg5Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBp
ZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8t
PmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAg
Q2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICszOTg1LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJlZ2lzdGVyU2V0
IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBKSVRQdXRCeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdK
SVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNlZFJlZ2lz
dGVycywKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9y
aWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2VkUmVnaXN0ZXJz
LAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpTVmFsdWVSZWdz
OjpwYXlsb2FkT25seShwcm9wZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQUlJlZywgc3R1
YkluZm9HUFIpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsK
IApAQCAtMTQ3NDcsNyArMTQ3NDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9n
U2hhZG93Q2hpCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOwogICAgIEdQUlJlZyBzY29wZVJlZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9qaXQu
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2Nv
cGVSZWcsIG1faml0LmNvZGVCbG9jaygpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dT
aGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJl
ZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNp
dGVJbmRleCk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDMxNyw3ICs0MzE3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpID8gcGFyYW1z
LmdwU2NyYXRjaCgwKSA6IEludmFsaWRHUFJSZWc7CiAKICAgICAgICAgICAgIGF1dG8gZ2VuZXJh
dG9yID0gQm94PEpJVFB1dEJ5VmFsR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAgICAgICAgICAgICAg
IGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNh
bGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLAorICAgICAgICAgICAgICAgIGppdC5j
b2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRl
SW5kZXgsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLAogICAgICAgICAgICAgICAgIHBhcmFt
cy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0
dWJJbmZvR1BSKTsKIAogICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0
eUlzU3ltYm9sID0gdHJ1ZTsKQEAgLTEwMzU1LDcgKzEwMzU1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+
YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAot
ICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBb
Jl0gewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURh
dGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihq
aXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgICAgICB9
KTsKQEAgLTEwNjk4LDcgKzEwNjk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0
aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJ
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAg
ICAgICAgICAgICAgIH0pOwpAQCAtMTA5NzksNyArMTA5NzksNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENh
bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVn
VDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNs
b3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDE3ICs0MiwyMiBAQCBjbGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAg
IHJldHVybiBpZiBlbXB0eT8KIAotICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZp
ZWxkcykKKyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGdlbmVyYXRl
T2Zmc2V0T2YpCiAgICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAg
ICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7
cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxu
I3twcmVmaXh9fTsiCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2Nv
bnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlLCBmYWxzZSl9XG4je3ByZWZpeH19OyIK
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5
cGUudG9fc30gbV8je2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1l
ID0gZmllbGQudG9fcworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiI3twcmVmaXh9I3t0
eXBlLnRvX3N9IG1fI3tmaWVsZE5hbWV9OyIKKyAgICAgICAgICAgICAgICAgICAgaWYgZ2VuZXJh
dGVPZmZzZXRPZgorICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArICJcbiIg
KyAiI3twcmVmaXh9c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGROYW1lWzBdLnVwY2Fz
ZX0je2ZpZWxkTmFtZVsxLi5dfSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwg
bV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0CiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmQuam9p
bigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIg
ICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAg
ICAgIiwgQGZpZWxkcywgdHJ1ZSkKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBpZiBA
aW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODE4
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5OCw4ICs2OTgsMTMgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJl
c3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxs
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBpbmZv
KQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAg
ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgaW5mbyk7Cit9CisK
K3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFs
T2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7
CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAg
ICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
SVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MTgs
NiArMTcxOCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENh
bGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZp
cnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOwog
ICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNs
YWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQmFzZWxpbmVKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgorCisjaW5j
bHVkZSAiSklUTWF0aElDLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCisjaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVEFkZElDKiBNYXRoSUNI
b2xkZXI6OmFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJl
dHVybiBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUTXVsSUMqIE1hdGhJQ0hvbGRl
cjo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJu
IG1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRTdWJJQyogTWF0aElDSG9sZGVyOjph
ZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9z
dWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE5lZ0lDKiBNYXRoSUNIb2xkZXI6OmFkZEpJ
VE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbmVnSUNz
LmFkZChhcml0aFByb2ZpbGUpOyB9CisKK3ZvaWQgTWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3Mo
TWF0aElDSG9sZGVyJiBvdGhlcikKK3sKKyAgICBtX2FkZElDcyA9IFdURk1vdmUob3RoZXIubV9h
ZGRJQ3MpOworICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhlci5tX211bElDcyk7CisgICAgbV9u
ZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICBtX3N1YklDcyA9IFdURk1vdmUo
b3RoZXIubV9zdWJJQ3MpOworfQorCitCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZShD
b2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFy
aXR5Q2hlY2spCisgICAgOiBEaXJlY3RKSVRDb2RlKFdURk1vdmUoY29kZSksIHdpdGhBcml0eUNo
ZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAsIE1hdGhJQ0hvbGRlcigpCit7IH0KKwor
QmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKCkKK3sKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2Rl
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJ
VENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkNhbGxMaW5rSW5mby5oIgorI2luY2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRlICJKSVRDb2Rl
TWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvL2NsYXNzIEpJVEFkZElDOworLy9jbGFzcyBK
SVRNdWxJQzsKKy8vY2xhc3MgSklUU3ViSUM7CisvL2NsYXNzIEpJVE5lZ0lDOworY2xhc3MgQmlu
YXJ5QXJpdGhQcm9maWxlOworY2xhc3MgVW5hcnlBcml0aFByb2ZpbGU7CitzdHJ1Y3QgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBTaW1wbGVKdW1wVGFibGU7CitzdHJ1Y3QgU3Ry
aW5nSnVtcFRhYmxlOworCitjbGFzcyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIHZvaWQg
YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpOworICAgIEpJVEFkZElDKiBhZGRKSVRB
ZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRo
UHJvZmlsZSopOworICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSop
OworCisgICAgLyoKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVEFkZEdl
bmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRBZGRJQyogYWRkTWF0aElDKEJpbmFyeUFy
aXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUQWRkSUMocHJvZmlsZSk7IH0KKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTXVsR2VuZXJhdG9yPjo6dmFs
dWU+Ojp0eXBlPgorICAgIEpJVE11bElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBw
cm9maWxlKSB7IHJldHVybiBhZGRKSVRNdWxJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVROZWdHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Cisg
ICAgSklUTmVnSUMqIGFkZE1hdGhJQyhVbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1
cm4gYWRkSklUTmVnSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdl
bmVyYXRvciwgSklUU3ViR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVFN1YklDKiBh
ZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRTdWJJ
Qyhwcm9maWxlKTsgfQorICAgICovCisKK3ByaXZhdGU6CisgICAgQmFnPEpJVEFkZElDPiBtX2Fk
ZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4gbV9u
ZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKK307CisKK2NsYXNzIEpJVENvbnN0
YW50UG9vbCB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29uc3RhbnQgPSB1bnNpZ25lZDsKKworICAg
IGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBHbG9iYWxPYmplY3QsCisgICAg
ICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8sCisgICAgICAgIEZ1
bmN0aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rpb25FeHByLAorICAgIH07CisKKyAgICBzdHJ1Y3Qg
VmFsdWUgeworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoZSBwb2ludGVyIHBhY2tlZC4KKyAgICAg
ICAgVHlwZSB0eXBlOworICAgICAgICB2b2lkKiBwYXlsb2FkOworICAgIH07CisKKyAgICBKSVRD
b25zdGFudFBvb2woKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQb29sKEpJVENvbnN0YW50
UG9vbCYmKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQb29sJiBvcGVyYXRvcj0oSklUQ29u
c3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKworICAgIENvbnN0YW50IGFkZChUeXBlIHR5cGUsIHZv
aWQqIHBheWxvYWQgPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0g
bV9jb25zdGFudHMuc2l6ZSgpOworICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoVmFsdWUgeyB0
eXBlLCBwYXlsb2FkIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHMuc2l6ZSgpOyB9CisgICAgVmFs
dWUgYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW2ldOyB9CisKK3ByaXZh
dGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50czsKK307CisKKworY2xhc3MgQmFzZWxp
bmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgewor
cHVibGljOgorICAgIEJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUs
IENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spOworICAgIH5CYXNlbGluZUpJ
VENvZGUoKSBvdmVycmlkZTsKKworICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxp
bmtlZENhbGxzOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7IC8v
IE9PUFM6IG1ha2Ugc3VyZSB3ZSB2aXNpdCB0aGVzZSBzb21laG93LiBPciBhc3NlcnQgd2UgZG9u
J3QgaGF2ZSB0bywgc2luY2UgdGhleSdyZSB2aXJ0dWFsIGNhbGxzLgorICAgIEJhZzxVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgIEZpeGVkVmVjdG9y
PFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZpeGVkVmVjdG9yPFN0
cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAgIEpJVENvZGVNYXAg
bV9qaXRDb2RlTWFwOworICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNl
bGluZUpJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QmFzZWxpbmVKSVRQbGFuLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1
MCw3IEBAIHNpemVfdCBCYXNlbGluZUpJVFBsYW46OmNvZGVTaXplKCkgY29uc3QKIAogQ29tcGls
YXRpb25SZXN1bHQgQmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6ZSgpCiB7Ci0gICAgQ29tcGlsYXRp
b25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBDb21w
aWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRocmVhZChtX2NvZGVC
bG9jayk7CiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVk
OgogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRDb21w
aWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2
ICs0Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuUHJvbG8KICAgICBz
dG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFk
b3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12b2lkIENDYWxsSGVscGVyczo6bG9n
U2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3Mg
dGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNU
X09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOwotICAgIHN0b3JlVmFs
dWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBz
Y29wZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2Rl
QmxvY2spKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkp
LCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgY2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNo
YWRvd0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2Ny
YXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAgICBTaGFkb3dDaGlja2VuKiBz
aGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpAQCAtNzIsNiArNjIsMjggQEAgdm9p
ZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQogICAgIHN0b3JlUHRyKHNjcmF0
Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9CiAKKwordGVtcGxhdGUgPHR5cGVu
YW1lIENvZGVCbG9ja1R5cGU+Cit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBH
UFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlSW5kZXgpCit7CisgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBmcmFtZSkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBh
Y2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRP
RihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKKyAgICBzdG9yZVZhbHVlKHRoaXNS
ZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgdGhpc1ZhbHVlKSkpOworICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRv
d1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7
CisgICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOworICAgIHN0b3JlMzIo
VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7
Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJS
ZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBUcnVz
dGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAg
IGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdzLCBz
Y29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwordm9pZCBDQ2FsbEhlbHBlcnM6
OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVS
ZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxvY2ssIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwo
c2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7
Cit9CisKIHZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhl
bHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQogewogICAgIENDYWxs
SGVscGVycyBqaXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4NDAsMTQgQEAgcHVibGljOgogICAg
IC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9sYXRpbGUgcmVnaXN0ZXJzLiBUaGV5
IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRvcCBvZgogICAgIC8vIHN0YWNrIHRv
IG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblByb2xv
Z3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNj
b3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayosIENh
bGxTaXRlSW5kZXgpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9j
a1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworcHVibGljOgor
ICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwg
SlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxv
Y2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisgICAgdm9pZCBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywg
R1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5k
ZXgpOworCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBz
aG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hp
Y2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFy
Z0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBDYWxs
RnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayogY29k
ZUJsb2NrKQogeworICAgIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb2RlQmxvY2stPmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVw
Q2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJT
YXZlTG9jYXRpb25zKQorewogICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMgeyBS
ZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkgfTsKLSAgICBjb25zdCBSZWdpc3Rl
ckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zID0gY29kZUJsb2NrLT5jYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVyU2F2
ZUxvY2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRy
eSB7IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHJldmlzaW9uIDI4MTg2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6CiAgICAgR1BSUmVnIG51bWJl
clRhZ1JlZ2lzdGVyIHsgSW52YWxpZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNh
dmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3Zl
cnkgY2FsbGVlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9u
IDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhS
ZXR1cm5BCiB9CiAKIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVj
b2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICA6IEpTSW50ZXJmYWNlSklU
KCZ2bSwgY29kZUJsb2NrKQorICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBudWxscHRyKQogICAg
ICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKICAgICAsIG1fbGFiZWxzKGNvZGVCbG9j
ayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKICAgICAsIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyKHZtKQpAQCAtNzcsNiArNzcsOSBAQCBKSVQ6OkpJVChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFs
c2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCkKIHsKKyAgICBtX2dsb2JhbE9iamVjdENvbnN0YW50ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0KTsKKyAgICBtX3Byb2ZpbGVk
Q29kZUJsb2NrID0gY29kZUJsb2NrOworICAgIG1fdW5saW5rZWRDb2RlQmxvY2sgPSBjb2RlQmxv
Y2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiB9CiAKIEpJVDo6fkpJVCgpCkBAIC05MCw4ICs5Myw4
IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEp1bXBMaXN0IHNraXBPcHRpbWl6ZTsKLSAgICAKLSAgICBza2lwT3B0aW1pemUu
YXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlv
bkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2Nr
LT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgc2tpcE9wdGltaXplLmFw
cGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25D
b3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpKTsKIAogICAgIGNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJhbWVP
clJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1l
KTsKQEAgLTExMywxNSArMTE2LDE4IEBAIHZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0Y2hw
b2ludFNldCoKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCkKK3Zv
aWQgSklUOjplbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpCiB7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9TZXQs
IFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUpCit2b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNz
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFyUmVhZE9ubHlXYXRjaHBvaW50KCktPmFk
ZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBpZiAo
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BS
KTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbE9iamVjdCwgbV92YXJSZWFkT25seVdhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0
Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQp
KSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKQEAg
LTEyOSw3ICsxMzUsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICAg
ICBpZiAoIUFTU0VSVF9FTkFCTEVEKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBKdW1wIG9rID0g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGJyZWFr
cG9pbnQoKTsKICAgICBvay5saW5rKHRoaXMpOwpAQCAtMTgxLDIxICsxODcsNDEgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1YwogICAgIHNsb3dQYXRoQ2FsbC5jYWxs
KCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BS
UmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5j
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVz
cyhyZXN1bHQsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJl
c3VsdCk7CisgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1
bHQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZF
eGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHJlc3VsdCk7CisgICAgaGFz
RXhlY3V0YWJsZS5saW5rKHRoaXMpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0Nv
bnN0cnVjdG9yKCkpCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSksIHJlc3VsdCk7CisgICAg
ZWxzZQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6
Om9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpKSwgcmVzdWx0KTsKKworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZXN1bHQsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6Om9mZnNldE9mQ29kZUJsb2Nr
KCkpLCByZXN1bHQpOworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZXN1bHQsIENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCkKIHsKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2co
IkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb21w
aWxpbmcgIiwgKm1fcHJvZmlsZWRDb2RlQmxvY2ssICJcbiIpOwogICAgIAogICAgIGppdEFzc2Vy
dFRhZ3NJblBsYWNlKCk7CiAgICAgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsKICAgICAK
LSAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Ci0g
ICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5zaXplKCk7CisgICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCk7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2FsbExpbmtJbmZv
SW5kZXggPSAwOwogCi0gICAgVk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgQnl0ZWNv
ZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7CisKKyAgICAvLyBPT1BTOiBNYXliZSBvbmx5
IGRvIHRoaXMgaWYgd2UgZGlzYWJsZSBzaGFyaW5nIHNvbWVob3c/CisgICAgLyoKKyAgICBWTSYg
dm0gPSBtX3VubGlua2VkQ29kZUJsb2NrLT52bSgpOwogICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXggJiYgKG1fY29kZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJsb2NrPih2
bSkgfHwgbV9jb2RlQmxvY2stPmluaGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtKSkp
IHsKICAgICAgICAgLy8gV2UgY2FuIG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVjYXVzZSB3
ZSBleGVjdXRlIFByb2dyYW1Db2RlQmxvY2sncyBleGFjdGx5IG9uY2UuCiAgICAgICAgIC8vIFRo
aXMgb3B0aW1pemF0aW9uIHdvdWxkIGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRoZSBMTElu
dCBkZXRlcm1pbmVzIGl0IHdhbnRzIHRvCkBAIC0yMzYsNiArMjYyLDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQor
ICAgICovCiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CiAgICAgZm9y
IChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKQEAgLTI3OCw4ICszMDUsOCBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShP
cHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7Ci0gICAgICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1Zyhb
PV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdICIsIG9wY29kZU5hbWVz
W29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxv
Y2spOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTUyNyw3ICs1NTQsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXgg
Zmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0
ZWNvZGVJbmRleCkucHRyKCk7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVj
b2RlSW5kZXgpLnB0cigpOwogICAgICAgICAKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJCYXNlbGluZSBKSVQgZW1pdHRpbmcgc2xvdyBj
b2RlIGZvciAiLCBtX2J5dGVjb2RlSW5kZXgsICIgYXQgb2Zmc2V0ICIsIChsb25nKWRlYnVnT2Zm
c2V0KCkpOwpAQCAtNTQ1LDggKzU3Miw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRF
eGVjdXRpb24oKSkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBtX2NvZGVCbG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4
dCYgY3R4KSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8
Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJK
SVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSBTTE9XICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwg
IiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTY3NCw1NSArNzAxLDU2IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAjZW5kaWYKIH0KIAordm9pZCBKSVQ6OmVtaXRNYXRlcmlh
bGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCkKK3sKKyAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHNfbWV0
YWRhdGFHUFIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkpJVERhdGEoKSksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9j
azo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKQoreworICAgIEJhc2U6OmVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERG
Rzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgp
OworICAgIC8vIE9PUFM6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGRvbmUgb24gdW5saW5rZWQgY29k
ZSBibG9jaz8KKyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNl
IERGRzo6Q2Fubm90Q29tcGlsZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwot
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hv
dWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6
Q2FuQ29tcGlsZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAg
bV9jYW5CZU9wdGltaXplZCA9IHRydWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGlu
ZWQgPSB0cnVlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChtX2NvZGVCbG9j
ay0+Y29kZVR5cGUoKSkgewotICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICBjYXNlIE1vZHVsZUNv
ZGU6Ci0gICAgY2FzZSBFdmFsQ29kZToKLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRnVuY3Rpb25D
b2RlOgotICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJl
Y2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCi0gICAgICAgIC8vIERvbid0
IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRpb24uCi0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3Vs
ZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJbmxpbmVG
dW5jdGlvbihtX2NvZGVCbG9jayk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICAgIGlmICht
X2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX2NvZGVC
bG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgewotICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAg
ICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCi0g
ICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVt
cFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJl
ck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpOwotICAgICAgICBpZiAobV9jb2RlQmxvY2st
Pm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBt
X2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
cyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJs
b2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fdW5saW5rZWRDb2Rl
QmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGVzKCkpCisgICAgICAgICAgICBtX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1w
bGVKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hK
dW1wVGFibGVzKCkpOworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZV
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV91bmxpbmtlZENv
ZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CiAgICAg
fQogCi0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3Zt
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZv
clByb2ZpbGVyKCkpKSkKLSAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERp
c2Fzc2VtYmxlcj4obV9jb2RlQmxvY2spOworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1w
RGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6
OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpIHsKKyAgICAgICAgLy8gT09QUzog
YnVpbGQgYSBkaXNhc3NlbWJsZXIgb2ZmIHVubGlua2VkIGNvZGUgYmxvY2sKKyAgICAgICAgbV9k
aXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9wcm9maWxlZENvZGVC
bG9jayk7CisgICAgfQogICAgIGlmIChVTkxJS0VMWShtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmls
ZXIpKSB7CisgICAgICAgIC8vIE9PUFM6IGJ1aWxkIHByb2ZpbGVyIGRpc2Fzc2VtYmxlciBvZmYg
dW5saW5rZWQgY29kZSBibG9jawogICAgICAgICBtX2NvbXBpbGF0aW9uID0gYWRvcHRSZWYoCiAg
ICAgICAgICAgICBuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKAotICAgICAgICAgICAgICAgIG1f
dm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fY29kZUJsb2Nr
KSwKKyAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5
dGVjb2Rlc0ZvcihtX3Byb2ZpbGVkQ29kZUJsb2NrKSwKICAgICAgICAgICAgICAgICBQcm9maWxl
cjo6QmFzZWxpbmUpKTsKLSAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29k
ZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOworICAgICAgICBt
X2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyLCBtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgbV9wY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKEJ5dGVjb2Rl
SW5kZXgoMCkpKTsKQEAgLTc0MiwxMSArNzcwLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZSgpOwotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5
cGUoKSA9PSBGdW5jdGlvbkNvZGUpCisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Q
cm9sb2d1ZSgpOwogCiAgICAgTGFiZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAotICAgIGludCBmcmFt
ZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpOworICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgdW5zaWduZWQg
bWF4RnJhbWVTaXplID0gLWZyYW1lVG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
ZnJhbWVUb3BPZmZzZXQpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwogICAgIEp1bXBMaXN0
IHN0YWNrT3ZlcmZsb3c7CkBAIC03NTcsMTYgKzc4NiwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFu
ZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgbW92ZShyZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBlbWl0U2F2ZUNh
bGxlZVNhdmVzKCk7CisgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRNYXRl
cmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFB
bmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5
cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29k
ZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5k
ZXgpOwotICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5n
KCkgJiYgKCFtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwgbV91bmxpbmtl
ZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID4gMSkpIHsKKyAgICAgICAgICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDIpOwor
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+OjpvZmZzZXRP
ZlN0b3JhZ2UoKSksIHJlZ1QyKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVu
dCA9IDA7IGFyZ3VtZW50IDwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyAr
K2FyZ3VtZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9y
LCB0aGVuIHdlIHdhbnQgdG8gcHV0IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCiAgICAg
ICAgICAgICAgICAgLy8ga2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVh
bGx5IHdhbnQgdG8gcmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAo
bV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCisgICAgICAgICAgICAg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGludCBvZmZz
ZXQgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBA
IC03NzcsMTIgKzgxMCwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxp
emluCiAgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9m
ZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3Vs
dFJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxs
RnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50
KGFyZ3VtZW50KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1
bHRSZWdzLCBBZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpICsg
VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQo
bV9jb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjpp
c0pJVChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlmIChVTkxJS0VM
WShzaXplTWFya2VyKSkKICAgICAgICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQo
V1RGTW92ZSgqc2l6ZU1hcmtlciksICp0aGlzKTsKQEAgLTc5OSwyNCArODMyLDI3IEBAIHZvaWQg
SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtX2J5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCkKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAg
IGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25U
aHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgbV9jb2RlQmxvY2spOworICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDApOworICAgIGNh
bGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJv
d1N0YWNrT3ZlcmZsb3dFcnJvciwgcmVnVDApOwogCiAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBw
YXJhbWV0ZXJzIGlzIDEsIHdlIG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCi0gICAgYm9vbCBy
ZXF1aXJlc0FyaXR5Rml4dXAgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7Ci0g
ICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJl
c0FyaXR5Rml4dXApIHsKKyAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fdW5saW5rZWRD
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAhPSAxOworICAgIGlmIChtX3VubGlua2VkQ29kZUJs
b2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsK
ICAgICAgICAgbV9hcml0eUNoZWNrID0gbGFiZWwoKTsKLSAgICAgICAgc3RvcmU4KFRydXN0ZWRJ
bW0zMigwKSwgJm1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7CisKICAgICAg
ICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVh
ZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICBlbWl0
UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUocmVnVDApOworICAgICAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxkQWx3
YXlzQmVJbmxpbmVkKCkpKTsKIAogICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QxKTsKLSAgICAgICAgYnJhbmNo
MzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251bVBh
cmFtZXRlcnMpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CisgICAgICAgIGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCkpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAKICAgICAgICAgbV9ieXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKIAogICAgICAgICBpZiAobWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0
aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJh
Y2tPbkV4Y2VwdGlvbihtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29u
c3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX3VubGlua2VkQ29kZUJs
b2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3Bl
cmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGlmIChtYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgICAgIGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFi
ZWwsIHRoaXMpOwpAQCAtODM5LDcgKzg3NSw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dp
dGhvdXRGaW5hbGl6aW4KICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJl
bCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCks
IFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKLSAgICBt
X2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIo
KnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZm
b3J0KSk7CisgICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5l
dyBMaW5rQnVmZmVyKCp0aGlzLCBtX3VubGlua2VkQ29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04NTgsOCAr
ODk0LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7
CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dp
dGNoUmVjb3JkOjpDaGFyYWN0ZXI6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxl
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAg
ICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
ICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zm
c2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IDA7IGogPCB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewog
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHVubGlua2VkVGFibGUubV9icmFuY2hP
ZmZzZXRzW2pdOwpAQCAtODcxLDggKzkwNyw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNv
bnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2st
PnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAg
U3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
ICAgICAgICAgICAgIGF1dG8gY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNT
d2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZz
ZXRdKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgbG9jYXRpb24gOiB1bmxpbmtlZFRhYmxlLm1f
b2Zmc2V0VGFibGUudmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQg
PSBsb2NhdGlvbi5tX2JyYW5jaE9mZnNldDsKQEAgLTkwNiwzMiArOTQyLDM1IEBAIHZvaWQgSklU
OjpsaW5rKCkKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIHJlY29y
ZC5jYWxsZWUpOwogICAgIH0KIAotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHMs
IHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0
Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywg
cGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIHBhdGNo
QnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0Y2hCdWZm
ZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVmZmVyKTsK
LSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1faW5CeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX2luc3RhbmNlT2ZzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOworICAgIGF1dG8g
ZmluYWxpemVJQ3MgPSBbJl0gKGF1dG8mIGdlbmVyYXRvcnMpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBnZW4gOiBnZW5lcmF0b3JzKSB7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
LT5zdGFydCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdl
bi5tX3N0YXJ0KTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVMb2Nh
dGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1fZG9u
ZSk7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9j
YXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4u
bV9zbG93UGF0aEJlZ2luKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmaW5hbGl6ZUlDcyht
X2dldEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5VmFscyk7CisgICAgZmluYWxpemVJ
Q3MobV9nZXRCeUlkc1dpdGhUaGlzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsKKyAg
ICBmaW5hbGl6ZUlDcyhtX3B1dEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeUlkcyk7
CisgICAgZmluYWxpemVJQ3MobV9kZWxCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeUlk
cyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbnN0
YW5jZU9mcyk7CisgICAgZmluYWxpemVJQ3MobV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7CiAKICAg
ICBmb3IgKGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewot
ICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5m
bzsKLSAgICAgICAgaW5mby5zZXRDb2RlTG9jYXRpb25zKAotICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhT
dGFydCksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pKTsKKyAgICAgICAgVW5saW5rZWRDYWxs
TGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOwor
ICAgICAgICBpbmZvLmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbik7CiAgICAgfQogCi0gICAg
ewotICAgICAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJl
bHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxk
ZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAg
ICB9Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVy
LmZpbmFsaXplKCkpOworICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwor
ICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1f
bGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5h
cHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDI2
ICs5NzksMzcgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWSht
X2NvbXBpbGF0aW9uKSkgeworICAgICAgICAvLyBPT1BTOiBtYWtlIGJ5dGVjb2RlIHByb2ZpbGVy
IGtub3cgYWJvdXQgdW5saW5rZWQgQ0I/CiAgICAgICAgIGlmIChPcHRpb25zOjpkaXNhc3NlbWJs
ZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBv
cnRUb1Byb2ZpbGVyKG1fY29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsKLSAgICAgICAg
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2NvZGVCbG9jaywg
Km1fY29tcGlsYXRpb24pOworICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFk
ZENvbXBpbGF0aW9uKG1fcHJvZmlsZWRDb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKICAgICB9
CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkp
CiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2lu
TWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpOwog
ICAgIAorICAgIC8vIE9PUFM6IE1ha2UgYSB2ZXJzaW9uIG9mIENvZGVCbG9ja1dpdGhKSVRUeXBl
IHRoYXQga25vd3MgYWJvdXQgVW5saW5rZWRDb2RlQmxvY2suCiAgICAgQ29kZVJlZjxKU0VudHJ5
UHRyVGFnPiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNF
bnRyeVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmlu
ZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQp
KS5kYXRhKCkpOworICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5n
KENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQ
dHJUYWc+KG1fYXJpdHlDaGVjayk7Ci0gICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBEaXJl
Y3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSk7
CisgICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3
aXRoQXJpdHlDaGVjaykpOworCisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBXVEZN
b3ZlKG1fdW5saW5rZWRDYWxscyk7CisgICAgbV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9z
ID0gV1RGTW92ZShtX2V2YWxDYWxsTGlua0luZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fdW5saW5r
ZWRTdHViSW5mb3MgPSBXVEZNb3ZlKG1fdW5saW5rZWRTdHViSW5mb3MpOworICAgIG1faml0Q29k
ZS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N3aXRjaEp1bXBUYWJsZXMpOworICAg
IG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0Q29kZS0+bV9qaXRDb2RlTWFwID0gaml0Q29kZU1h
cEJ1aWxkZXIuZmluYWxpemUoKTsKKyAgICBtX2ppdENvZGUtPmFkb3B0TWF0aElDcyhtX21hdGhJ
Q3MpOworICAgIG1faml0Q29kZS0+bV9jb25zdGFudFBvb2wgPSBXVEZNb3ZlKG1fY29uc3RhbnRQ
b29sKTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0Yo
IkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywg
cmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQu
ZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKKyAgICAgICAgZGF0YUxv
Z0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2Vk
Q29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRy
KCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQog
Ci1Db21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKCkKK0NvbXBpbGF0
aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTk2
OCwyNSArMTAxOCwyMSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhy
CiAKICAgICBtX2xpbmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwog
Ci0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5t
X2xvY2spOwotICAgICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxv
Y2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7
Ci0gICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhh
bmRsZXIoaSk7Ci0gICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+Lgot
ICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZp
bmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+KCk7Ci0gICAgfQorICAgIC8vIE9PUFM6IERvbid0IHRoaW5rIHRoaXMgc2hyaW5r
IGlzIHJlYWxseSBkb2luZyBhbnl0aGluZyBhbnltb3JlLiBWZXJpZnkuCisgICAgLy97CisgICAg
Ly8gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAg
ICAvLyAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlu
a01vZGU6OkxhdGVTaHJpbmspOworICAgIC8vfQogCisgICAgLy8gT09QUzogbV9wY1RvQ29kZU9y
aWdpbk1hcCBzaG91bGQgbGl2ZSBvbiBCYXNlbGluZUpJVENvZGUgZm9yIGJhc2VsaW5lIGNvZGVi
bG9ja3MuCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJsb2Nr
LT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKKyAg
ICAgICAgbV9wcm9maWxlZENvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoV1RGTW92ZSht
X3BjVG9Db2RlT3JpZ2luTWFwKSk7CiAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0
ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91Ymxl
PihtX2ppdENvZGUtPnNpemUoKSkgLwotICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8ZG91Ymxl
PihtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKIAotICAgIG1fY29k
ZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBjb2Rl
QmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKG1faml0Q29kZS5yZWxlYXNlTm9u
TnVsbCgpKTsKIAogICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CkBAIC05OTgs
MTEgKzEwNDQsMTEgQEAgc2l6ZV90IEpJVDo6Y29kZVNpemUoKSBjb25zdAogICAgIHJldHVybiBt
X2xpbmtCdWZmZXItPnNpemUoKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRl
Q29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitDb21waWxhdGlvblJlc3VsdCBK
SVQ6OnByaXZhdGVDb21waWxlKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQpCiB7CiAgICAgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxl
KCk7CiAgICAgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhlZmZvcnQpOwotICAgIHJl
dHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRo
cmVhZChjb2RlQmxvY2spOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25I
YW5kbGVycygpCkBAIC0xMDQyLDE4ICsxMDg4LDI4IEBAIHZvaWQgSklUOjpkb01haW5UaHJlYWRQ
cmVwYXJhdGlvbkJlZm9yZUMKICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nl
c3NMb2dFbnRyaWVzKCptX3ZtLCAiUHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24uIl9zKTsK
IH0KIAotdW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVC
bG9jayogY29kZUJsb2NrKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0
YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2st
Pm51bUNhbGxlZUxvY2FscygpKSkpOwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdpc3RlckNv
dW50Rm9yRnJhbWVQb2ludGVyT2Zmc2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBt
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAotaW50IEpJVDo6
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0
dXJuIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkp
OworfQorCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sq
IGNvZGVCbG9jaykKIHsKICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jaykgLSAxKS5vZmZzZXQoKTsKIH0KIAoraW50IEpJVDo6
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVy
biBzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsK
K30KKwogSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBKSVQ6OmNvbXBpbGVUaW1lU3RhdHMoKQog
ewogICAgIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gcmVzdWx0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAKICNkZWZpbmUgQVNT
RVJUX0pJVF9PRkZTRVQoYWN0dWFsLCBleHBlY3RlZCkgQVNTRVJUX1dJVEhfTUVTU0FHRShhY3R1
YWwgPT0gZXhwZWN0ZWQsICJKSVQgT2Zmc2V0IFwiJXNcIiBzaG91bGQgYmUgJWQsIG5vdCAlZC5c
biIsICNleHBlY3RlZCwgc3RhdGljX2Nhc3Q8aW50PihleHBlY3RlZCksIHN0YXRpY19jYXN0PGlu
dD4oYWN0dWFsKSk7CiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJKSVRE
aXNhc3NlbWJsZXIuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJKSVRNYXRoSUMuaCIK
ICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZh
Y2VKSVQuaCIKKyNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdp
bk1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVl
UmVmLmg+CkBAIC0xNDksMTQgKzE1MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAg
ICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgc2xvd1BhdGhTdGFydDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVM
b2NhdGlvbjsKLSAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CisgICAgICAgIFVu
bGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKICAgICB9OwogCiAgICAg
dm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKLSAgICBjbGFzcyBK
SVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgIGNs
YXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHVibGljIEpTSW50ZXJmYWNlSklUIHsKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNz
IEpJVFN0dWJDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUVGh1bmtzOwpAQCAtMTcxLDYg
KzE3Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBk
aXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZz
ZXQuCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZz
ZXQgPSAyNTY7CiAKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAg
cHVibGljOgogICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJ
bmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAg
ICAgICB+SklUKCk7CkBAIC0xNzgsMTcgKzE4MiwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgVk0mIHZtKCkgeyByZXR1cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CiAKICAgICAgICAg
dm9pZCBjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0
KTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAg
ICAgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKik7
CiAgICAgICAgIHNpemVfdCBjb2RlU2l6ZSgpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgZG9NYWlu
VGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgICAgIAogICAgICAgICBzdGF0
aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZz
ZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSklU
KHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOwor
ICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJp
dmF0ZUNvbXBpbGUoY29kZUJsb2NrLCBlZmZvcnQpOwogICAgICAgICB9CiAKKyAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOwog
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayop
OworICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVC
bG9jayopOwogICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxv
Y2sqKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSGFzaE1hcDxDU3RyaW5n
LCBTZWNvbmRzPiBjb21waWxlVGltZVN0YXRzKCk7CkBAIC0xOTksNyArMjA1LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgICAg
ICB2b2lkIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAgICAgIHZvaWQgbGluaygpOwot
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVm
Zm9ydCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKENvZGVCbG9j
ayosIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBm
cm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBh
cHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCkBA
IC0yMjMsNiArMjI5LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0
ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQz
MkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQ4
RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKwor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4K
KyAgICAgICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSwgY29uc3QgQnl0ZWNvZGUm
LCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+
CisgICAgICAgIHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYs
IHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
KyAgICAgICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNv
ZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVibGljOgorICAgICAgICB2b2lk
IGxvYWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgIHByaXZh
dGU6CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcpOworICAgICAgICB2b2lk
IGxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisKKyAgICAg
ICAgdm9pZCBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCA9
IHJlZ1QwKTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRvSGFuZGxl
cikKICAgICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGp1bXBU
b0hhbmRsZXIpOwpAQCAtMjU4LDE2ICsyOTAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92
YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAg
ICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJ
RCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+
IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBj
YWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3Bf
Y2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAg
ICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lk
PiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAs
IHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZv
KiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWls
Q2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJ
bmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAg
ICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI5MSwxMCArMzIzLDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8g
cHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAg
ICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
TWV0YWRhdGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4g
dm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAg
ICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcp
OworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBK
U1ZhbHVlUmVncyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNv
bnN0IEJ5dGVjb2RlJiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRh
ZGF0YSYsIEpTVmFsdWVSZWdzKTsKQEAgLTMwNyw2ICszMzksMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJ
RCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogICAgICAg
ICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIs
IFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVnaXN0ZXJJRCBjZWxsR1BS
LCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0
IEJ5dGVjb2RlJiwgcHRyZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2Ny
YXRjaEdQUik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFN
b2RlIGVjbWFNb2RlKE9wKTsKQEAgLTU5Miw3ICs2MjgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02
MjYsMTQgKzY2MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRT
aGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0
ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSk7Ci0gICAgICAgIHZvaWQgZW1pdEhhc1By
aXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUpOworICAgICAgICB2b2lk
IGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlKTsKIAogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
dm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAg
dm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7
Ci0gICAgICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUpOworICAgICAg
ICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCBHUFJSZWcpOworICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBl
LCBHUFJSZWcgc2NyYXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZp
cnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwogICAgICAgICB2b2lkIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0
dXJlU2xvdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY0NSw3ICs2ODAsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICNlbmRpZgogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3Rp
ZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQ
UlJlZyBwb2ludGVyVG9TZXQpOworICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNocG9p
bnQoR1BSUmVnIHBvaW50ZXJUb1NldCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlh
YmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCopOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUq
KiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
LCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0
Kik7CkBAIC02NTQsNiArNjg5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBl
bWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0
ZXIpOwogCisgICAgICAgIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAg
ICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAg
Ym9vbCBpc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29s
IGlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjk1LDI2ICs3MzEs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09
IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gTW9kdWxlVmFyKTsKICAgICAgICAgfQogCi0jZGVmaW5lIERFQ0xBUkVfR0VUX0ZS
T01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2
ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVD
TEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9HRVRfRlJPTV9T
Q09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hh
ciogdGh1bmtOYW1lKTsKLQotICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1Vz
ZWRGb3JPcFJlc29sdmVTY29wZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gTW9kdWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8g
ZW1pdCBpbmxpbmUgdGhhbiB1c2UgYSB0aHVuay4KLSAgICAgICAgICAgIC8vIFJlc29sdmVkQ2xv
c3VyZVZhciBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9wX3Jlc29sdmVf
c2NvcGUuCi0gICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1
cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAgICAgfQotCi0jZGVmaW5l
IERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmVzb2x2ZV9z
Y29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVT
T0xWRV9UWVBFKERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFS
RV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBl
LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoc3RkOjpv
cHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayhzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1
bmtOYW1lKTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3Io
Vk0mKTsKQEAgLTc1OSwxMCArNzc3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRp
b24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQpOwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0
YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9p
ZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxl
KE1ldGFkYXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNv
bnN0IEJ5dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgor
ICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFp
dHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04
MjAsMjAgKzgzOCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zm
c2V0KSk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwg
dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9u
VHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5
cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4p
OwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAot
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0
YSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9u
VHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9p
ZD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwg
QWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
QWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAg
ICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0
aW9uVHlwZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBB
ZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAg
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFy
Z2V0Lm9mZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE4LDI1ICs5MzYsMjAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBj
YW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9v
bCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklu
bGluZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9z
aG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVk
KCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5l
ZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHBy
b2ZpbGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGlu
IHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRF
bWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQg
ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAg
ICAgICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9v
bCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBp
bGVUaW1lcygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2
YWx1ZSBmcm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAg
Ly8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ug
d2FudCB0byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGgg
dGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZv
IGNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2Zp
bGUoQmluYXJ5T3ApOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBA
IC05NjMsOSArOTc2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0
Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQ
dXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBt
X2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVj
a3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxi
YWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTk5OSwxMSArMTAwOSwyNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBJbnN0cnVjdGlvbiosIFVu
aXF1ZVJlZjxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+PiBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5l
cmF0aW9uU3RhdGU7CiAKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwotICAgICAgICBi
b29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0
UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleDsKIAotICAgICAgICBSZWZQdHI8RGlyZWN0SklUQ29kZT4gbV9qaXRDb2RlOworICAgICAg
ICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFVu
bGlua2VkQ29kZUJsb2NrKiBtX3VubGlua2VkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworCisgICAg
ICAgIE1hdGhJQ0hvbGRlciBtX21hdGhJQ3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENv
ZGU+IG1faml0Q29kZTsKKworICAgICAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7
CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFu
dCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8
VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxM
aW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgICAgIEZpeGVkVmVjdG9yPFNp
bXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBGaXhlZFZlY3RvcjxT
dHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzX21ldGFkYXRhR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6bWV0
YWRhdGFUYWJsZUdQUjsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19jb25zdGFu
dHNHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUjsKKworICAgICAgICBzdHJ1Y3QgTm90QUNv
ZGVCbG9jayB7IH0gbV9jb2RlQmxvY2s7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlz
aW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3Ax
KSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewogICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVu
dEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIx
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMyMCw3
ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAg
ICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwg
cmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8g
WmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KIApAQCAtNTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dyhjb25zdCAKIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9h
ZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3Ao
Y29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVC
bG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJ
VE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwog
ICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJ
Qyk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJh
dGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBl
bWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAtODk5
LDggKzkwNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAog
dm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRo
UHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxp
bmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BBZGQ+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0aElD
cy5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5h
ZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+
KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9w
ZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjplbWl0
TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUg
PSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwog
ICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNo
R1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOworICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNs
b3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAxNSwx
MCArMTAyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAg
ICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNo
R1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nh
c2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEzICsx
MDYyLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNlbmRp
ZgogCiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQ
cm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJv
ZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRl
cnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24p
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRl
cnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24p
LCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJp
dGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiks
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
c3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3Ms
IHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1B
VEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIwLDEz
ICsxMTI4LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICNl
bmRpZgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFy
aXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0
aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJp
dHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
KSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0
ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nh
c3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdU
NCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVO
QUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAt
MTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9u
KgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwogICAg
IGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJp
bmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1fcHJvZmls
ZUluZGV4KTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3Bl
cmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRl
Y29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29w
X211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BN
dWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElD
KiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJp
bmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1fcHJvZmls
ZUluZGV4KTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRkSklUTXVsSUMoYXJp
dGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVj
dGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7
CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0
IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRK
SVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRTdWJJQyogc3Vi
SUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1
YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
Miw3ICsyMzIsNyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBzdG9y
ZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJG
cmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgcmVnVDEsIHJlZ1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdU
MCk7CiAgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTMy
NCw3ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0
UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5z
bG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2Fz
ZShjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgog
I2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgi
CiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3Vs
dChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0
aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVh
bFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTAgKzU0LDkgQEAgc3RkOjplbmFibGVf
aWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJ
RCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWls
X2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29k
ZSwgQ2FsbExpbmtJbmZvKikKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVj
b2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHVuc2lnbmVkIGNoZWNrcG9p
bnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGludCBhcmdDb3VudEluY2x1ZGlu
Z1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2lu
dCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oc3RhY2tPZmZz
ZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpKTsKIApAQCAtNjQsNyAr
NjQsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsg
Q2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAg
ICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAg
ICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0YSwgY2hlY2twb2ludCku
YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCByZWdUMCwgcmVnVDApOwogICAgICAgICBkb25lLmxp
bmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OCw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAg
ICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwog
LCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxM
aW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2Rl
LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewogICAg
IFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC05MSw3
ICs5MSw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAg
ICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7
CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9y
VmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3Rlciwg
Zmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOworICAgIGNh
bGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0
ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVl
UmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJu
VmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
LShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAyLDE2IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25T
ZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNldHVwT3BlcmF0
aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJhdGlvbihzZXR1
cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVnVDMsIHJl
Z1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9m
ZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMy
KEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFkZHJlc3NP
Zk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25zdGFudChjYWxs
TGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDYWxs
TGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJlZ1Qz
KTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1QyKTsK
KyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9m
TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dlc3QubGluayh0
aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywxNiArMTMwLDE2
IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxhdGU8PgogYm9v
bCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkKIHsKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAgIHN0b3Jl
UHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZy
YW1lT2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlciwg
YXJndW1lbnRHUFIxKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhh
cmd1bWVudEdQUjEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmVnVDApKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZh
bHVlKCkpLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5
KHJldHVyblZhbHVlR1BSKSk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiAK
QEAgLTE0OCw3ICsxNTEsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29u
c3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBt
X2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7
CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQoQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZv
OjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9h
cmd2OwpAQCAtMTU2LDQzICsxNTksNDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXRWaXJ0dWFsQ2FsbCgq
bV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5n
R2xvYmFsT2JqZWN0KCptX3ZtLCBpbmZvKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3Rh
Y2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChj
b25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQoteworYm9vbCBKSVQ6OmNvbXBpbGVU
YWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQsIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQpIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRl
PD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUs
IENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCitib29sIEpJ
VDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENh
bGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0gICAgQ2FsbEZyYW1lU2h1
ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5
dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQUklu
Zm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9CisgICAg
c3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9IG1ha2VV
bmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhc3Nl
ZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lz
dGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAgc2h1ZmZsZURhdGEtPm51bUxv
Y2FscyA9CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNv
ZGUubV9hcmdjKTsKKyAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdj
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsK
LSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgIHNodWZmbGVEYXRhLT5hcmdz
W2ldID0KICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKICAg
ICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkg
LSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKICAgICB9
Ci0gICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIo
cmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVn
aXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZm
bGVEYXRhKTsKKyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIo
cmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAgc2h1ZmZsZURhdGEtPnNldHVwQ2FsbGVlU2F2ZVJl
Z2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVn
aXN0ZXJzKCkpOwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olll
cywgWyZdIHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5w
cmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3Rh
bnQsIHJlZ1QyKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CisgICAgICAg
IENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2Fs
bCgpOwogICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CisKKyAgICBzaHVmZmxl
RGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92
ZShzaHVmZmxlRGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBk
b25lTG9jYXRpb247CiAgICAgCkBAIC0yMTgsMTQgKzIyNCwyNSBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJl
dHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJl
Z2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51
bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9
IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
KTsKLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CisKKyAgICBVbmxpbmtl
ZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2Fs
bF9ldmFsKSB7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbV91bmxpbmtl
ZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Io
b3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAgICAgQVNT
RVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwor
ICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8o
KSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5s
aW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50Owor
ICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAog
ICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwg
d2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9
IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1
aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0
cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMg
Y2FsbGVlLgpAQCAtMjM0LDE2ICsyNTEsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29u
c3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBj
YWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2Fs
bFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFw
cGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChjb21waWxl
VGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBpZiAoY29t
cGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0
YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFudCwg
cmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBz
bG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1Qy
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQ
YXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJl
Z1QwLCByZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
ICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9KTsK
QEAgLTI1MywxMyArMjY2LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3Ry
dWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5m
by0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0
YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBs
YWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsK
IAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCArMjg2
LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdz
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAq
dGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlz
LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJv
bVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcgKzQwOCwzMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdU
MSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4
dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwog
fQpAQCAtNDE2LDEwICs0NDIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmpl
Y3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsK
ICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBA
IC00MzIsMTkgKzQ1NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
IHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JH
UFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRl
cmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBh
dXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJh
dG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhp
cyk7CiB9CkBAIC00NTIsNyArNDc0LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsK
ICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5h
cnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0
OTEsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1
bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIy
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVy
aWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0
ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAg
bG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRP
ZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9N
ZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0
T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNl
ZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlv
biwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgp
OwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1Qw
CiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQ
UiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3Vs
dEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAg
bW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3Rl
eHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
c2NyYXRjaDsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVy
UmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVl
R1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFk
ZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BS
KTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBw
cmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNW
YWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
cHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwog
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsg
ZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNW
YWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50
KCk7CiAgICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwot
ICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigp
OworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRvci5h
bGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9u
ZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChnbG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNo
SWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwg
ZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9i
YWxHUFIpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbW92ZShpdGVyQ2Fs
bFJlc3VsdEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFs
dWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAogICAg
ICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1NzUsNTUg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAo
KSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRH
UFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBK
dW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RD
ZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5v
dENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCog
aWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAg
ICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90
T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsK
IAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUklu
Zm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9u
ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3Vs
dEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxk
ZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRv
bmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25l
VlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZv
ckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmpl
Y3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAg
ICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAg
R1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1w
bCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAog
ICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNh
bGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdH
UFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJl
c3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1l
bnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0K
LQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKKwogbmFtZXNw
YWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtMTU5LDEwICsxNjAsMTAgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAgICB7Ci0g
ICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNlRGF0
YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24g
MjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBA
QCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBt
X2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1
YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBl
LCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2Rl
QmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDog
Z2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxT
aXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBA
IC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAog
ICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8t
PnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0
aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFy
dExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9z
bG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGppdC5s
YWJlbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUp
KTsKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgaml0
LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9kb25l
ID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3Io
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUs
CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2Us
IEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZp
c2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMTQgQEAgbmFtZXNwYWNl
IEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsK
IGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwor
c3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlw
ZSA6IGludDhfdDsKIGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKK3N0cnVjdCBCYXNl
bGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkg
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQ
UkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJ
bmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBi
YXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQg
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBH
UFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJl
Z2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVn
VDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsK
KyAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0
aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgorICAgIHN0YXRpY19h
c3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpyZXN1bHQpOworICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMiA9IEdQUkluZm86OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gzID0gR1BSSW5mbzo6cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUkluZm86OmFy
Z3VtZW50R1BSMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUklu
Zm86OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9
IEdQUkluZm86Om5vbkFyZ0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7
CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJh
c2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0g
R1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQ
UkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0
IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
dGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlJZFJl
Z2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworfTsKKworc3RydWN0IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZv
OjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6
cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBwcm9maWxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJyYW5kID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvciB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0K
QEAgLTYyLDE1ICsxNjUsMjEgQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAg
IExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5r
QnVmZmVyLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4g
c3RhcnQpOwotICAgIAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
SklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxw
dHIgfTsKKyAgICB1bnNpZ25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBD
b2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVj
dHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwotICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIG1fc2xvd1BhdGhDYWxsOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1Bh
dGhDYWxsOyAvLyBPT1BTOiBtYWtlIHJlcG9ydENhbGwgcGFzcyBzb21ldGhpbmcgaW4gd2UgY2Fu
IHVzZSBmb3IgdGhlIG5vbi1DVEkgdGh1bmtzIGJ1aWxkcy4gCiB9OwogCiBjbGFzcyBKSVRCeUlk
R2VuZXJhdG9yIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTk4LDcgKzIw
Nyw3IEBAIHByb3RlY3RlZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJl
Z3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworcHVibGlj
OgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTMy
LDggKzI0MSw4IEBAIHB1YmxpYzoKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0
OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlw
ZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdp
c3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpT
VmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01B
TW9kZSwgUHV0S2luZCk7CisgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFi
bGVJZGVudGlmaWVyLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1
ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQp
OwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogICAg
IApAQCAtMTYzLDExICsyNzIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7
CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1w
OwogfTsKIApAQCAtMTkxLDggKzI5OCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVG
YXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xv
d1BhdGhKdW1wOwogfTsKIApAQCAtMjE2LDggKzMyMSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVK
dW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjQxLDggKzM0NCw2IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgot
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQ
YXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjc3LDggKzM3OCw2IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVy
LCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOwogCi1wcml2YXRlOgotICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVK
dW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzAyLDExICs0MDEsOSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZh
dGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0Owog
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMzAsOCArNDI3LDYgQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYp
OwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MTg2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSwxMyArMzUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAg
cmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3Vi
bGUoKTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNEb3VibGUoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29u
c3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+
Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlm
ICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAv
LyBPT1BTOiBmaW5kIGEgd2F5IHRvIGFzc2VydCB0aGF0IGFsbCBsaW5rIHRpbWUgY29uc3RhbnRz
IGFyZSBjZWxscy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVl
IEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNT
RVJUKHNyYy5pc0NvbnN0YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoc3JjKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjo6TGlua1RpbWVDb25zdGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdl
dENvbnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRU
b0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkK
QEAgLTE1NiwzNiArMTgxLDM2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxX
aXRoRXgKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRz
dCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZh
bHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1
ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRh
dGEmIG1ldGFkYXRhLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVt
cGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
IHsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
ICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3Mo
cmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVH
UFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5v
dEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisg
ICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9
CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93
Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJU
KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFz
Q2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsK
IAogICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5k
ZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5j
ZVRvTmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JD
aGVja3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNv
ZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2Nv
bGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAg
ICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFz
Q2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2lu
dExhYmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwzNCBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAg
IHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3Ry
aW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5n
dGgoKSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQotewotICAgIEFT
U0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUg
Y29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVj
dAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5n
cHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQotICAgIEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRv
cio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQ
UigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwotICAgIHN0b3JlMzIodmFsdWUudGFn
R1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgotfQorICAgIGlmICghc3Jj
LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2Vk
Q29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFz
U3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsK
K30KKworLy8gT09QUworLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQorLy97CisvLyAg
ICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKKy8vCisvLyAgICAvLyBXZSdyZSBpbiBh
IHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRv
IGEgZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lmIFVTRShKU1ZBTFVFNjQpCisvLyAgICBz
dG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vI2Vsc2UKKy8v
ICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5j
b2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8gICAgc3Rv
cmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7Cisv
LyAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Cisv
LyNlbmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFs
dWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJv
ZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDAp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsMjQgKzM1MywyNSBA
QCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBs
YXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAg
ICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxp
bmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUp
ICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0b3Jl
NjQodmFsdWUuZ3ByKCksIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRl
KFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcp
KTsKLX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJv
ZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97CisvLyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7Cisv
L30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQor
dGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQog
ewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3Vs
dFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdz
KHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKQEAgLTM2MCw2ICszOTEsMjEgQEAgaW5saW5lIHZv
aWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlVwogICAgIH0KIH0KIAordGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJh
eVByb2ZpbGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQorewor
ICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICAgICAgbG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YShzY3JhdGNoR1BSLCBieXRlY29k
ZSwgb2Zmc2V0T2ZBcnJheVByb2ZpbGUpOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVy
SUQgc2NyYXRjaEdQUikKK3sKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0
ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5
UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCksIGNlbGxHUFIsIHNjcmF0Y2hH
UFIpOworfQorCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuYXNJbnQzMigpOwpAQCAtMzgwLDcgKzQyNiw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmly
dHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlmIChyZWcuaXND
b25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBv
b2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOworICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29u
c3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmlu
Q29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFk
ZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcgKzU0Miw3IEBAIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29k
ZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7
CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcgKzU1Miw3IEBAIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNL
bm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNCwxMSArNTYwLDYg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogICAgIH0KIH0KIAot
QUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lz
dGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9w
ZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0LDExICs1ODUsMTcgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5k
ZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xk
IHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAg
aWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0g
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0
KTsKLSAgICAgICAgZWxzZQorICAgICAgICBzd2l0Y2ggKG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
bnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykpIHsKKyAgICAgICAgY2FzZSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpEb3VibGU6IHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAgbW92ZShJbW02
NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3Rh
bnQoc3JjLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtNTY2LDExICs2MTMsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3Qy
KTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJ
RCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTU5NSw3
ICs2MzcsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAKIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3Rl
cklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+
aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTYzNywzMCArNjc5LDcg
QEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewogICAgIGlmICh0
YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5v
dXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKLX0KLQotQUxXQVlTX0lOTElORSBHZXRQ
dXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNvZGUpCi17Ci0g
ICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsgLy8gSGFzaE1hcCBk
b2Vzbid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdldFB1
dEluZm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZv
cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsKLSAg
ICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9nZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5m
by5vcGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJbmZvOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6Y29w
aWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2NF90IGtleSA9
IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEpIDw8IDMyIHwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0byBp
dGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJh
dG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJh
dG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1fY29waWVkQXJp
dGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBhcml0aFByb2Zp
bGU7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQo
aW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY4MSw2ICs3MDAs
NjEgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAogICAgIHJldHVy
biBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQ
dHIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgp
Lm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
b2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0
LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQzMihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1f
dW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVj
b2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2Fk
OChBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCku
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUgdmFsdWUsIGNvbnN0
IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTgodmFsdWUs
IEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5v
ZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlMzJUb01l
dGFkYXRhKEdQUlJlZyB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zm
c2V0KQoreworICAgIHN0b3JlMzIodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxp
bmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUp
ICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldElu
TWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBzX21ldGFkYXRhR1BSLCByZXN1bHQp
OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29uc3RhbnQoSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQ
dHIoQWRkcmVzcyhzX2NvbnN0YW50c0dQUiwgc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb25zdGFu
dEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2Fk
R2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZENvbnN0YW50KG1fZ2xvYmFs
T2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxv
YWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIEdQUlJlZyByZXN1
bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKKyAgICAv
LyBPT1BTOiBNYXliZSBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQ/CisgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlc3VsdCk7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHJlc3VsdCwgQ29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigp
KSwgcmVzdWx0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3Rh
bnRJbmRleCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1
Y3RpbwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZz
ZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwog
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2Nr
KCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZt
KCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBz
d2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29u
c3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRl
eCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0
ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBA
IC0xMDI0LDcgKzEwMjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJ
bnN0CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJs
ZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3ICsxMDQyLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dp
dGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRl
ZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5z
dXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0LDIy
IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQo
KSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNy
Yyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3JlNjQo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwot
ICAgICAgICBlbHNlCisgICAgICAgIC8vIE9PUFM6IG1vc3QgIk90aGVyIiBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24gY29uc3RhbnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQgZnJvbSB0aGUgVW5saW5r
ZWRDb2RlQmxvY2suIEl0J3MganVzdAorICAgICAgICAvLyBhIGNvdXBsZSB0eXBlcyB0aGF0IGNh
bid0LiBDcmVhdGUgYW4gYWJzdHJhY3Rpb24gZm9yIHRoYXQuCisKKyAgICAgICAgc3dpdGNoICht
X3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMp
KSB7CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAg
ICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsK
ICAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJl
c3NGb3IoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDApOworICAg
ICAgICAgICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODcsMzcgKzk4
LDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklU
OjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09i
amVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNG
aW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
LSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJl
bnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVn
VDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklE
IHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1Qz
OwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0
ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09i
amVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2Nh
dG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywg
c2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJl
Zywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCpt
X3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSwgYWxs
b2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVj
dDo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJlZyk7CisKKyAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIp
OworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJp
YWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBzY3JhdGNoUmVn
LCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6
OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBlbWl0SW5pdGlhbGl6
ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKKyAgICBtdXRhdG9yRmVuY2Uo
Km1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKKwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwg
c3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25O
ZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTEzMSw3ICsxNDAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJ
bnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cg
d2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0
YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1
bmN0aW9uKCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBKdW1wIGN1c3Rv
bWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJl
Z1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fZnVuY3Rpb25Qcm90b0hhc0lu
c3RhbmNlU3ltYm9sRnVuY3Rpb24pKSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNv
bnN0cnVjdG9yLCByZWdUMCk7CiAKQEAgLTE1NCwzMCArMTY0LDM4IEBAIHZvaWQgSklUOjplbWl0
X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1f
cHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBh
bmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVn
VDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5k
IHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywg
cmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9HUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1
YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9HUFIpOwogICAgIAogICAgIC8v
IENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhp
cyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAot
ICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAg
IHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHJlc3VsdEdQUiwKKyAg
ICAgICAgdmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAgICAgICBzdHViSW5mb0dQUiwK
KyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMSwgQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCisKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCArMjEwLDEzIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOwotICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1p
emUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFu
Y2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOwotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgc3RhdGljX2Fzc2VydChC
YXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09IGFyZ3VtZW50R1BSMSk7Cisg
ICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlID09IGFy
Z3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlv
bkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMjQwLDcgKzI1
Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KIAogICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwg
cmVnVDApOwogCkBAIC0zNzQsNyArMzkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0
IEluc3RydWN0aW9uKgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwor
ICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgp
OwogICAgIHJldCgpOwogI2Vsc2UKQEAgLTM4Myw5ICs0MDAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFu
ZGxlckdlbmVyYXRvcihWTSYgdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKQogewotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9m
ZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcg
KzQyOCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAg
IGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0K
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQsOSArNDUwLDEwIEBAIHZvaWQgSklUOjplbWl0
X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlv
bl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0ODIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
amZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BS
ID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVS
ZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDAp
LCB0YXJnZXQpOwpAQCAtNDgwLDcgKzQ5OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyArNTM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
amVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2Vz
IC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAg
ICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwog
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFk
ZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CiAKQEAgLTU0Myw3ICs1NjIsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhh
bmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0
aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAg
ICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJ
bW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTU4MiwxNSArNjAxLDEzIEBAIHZvaWQgSklUOjplbWl0
X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBn
ZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7Ci0gICAgQVNTRVJU
KHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNp
YWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFk
YXRhLm1faGFzSnVtcGVkKTsKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9z
cGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJy
YW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKGJ5dGVj
b2RlLCBUcnVzdGVkSW1tMzIoMSksIE9wSm5lcVB0cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVt
cGVkKCkpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwogICAgIGVxdWFsLmxpbmsodGhp
cyk7CiB9CkBAIC02MjUsOCArNjQyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0
IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIg
PSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwog
ICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRy
dWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSks
IHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5j
aElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2Jh
bE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCku
Z2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsK
QEAgLTY0MCw3ICs2NTksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOwpAQCAtNjk1LDcgKzcxNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0
IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKLSAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgp
KTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3Vt
ZW50R1BSMjsKQEAgLTcxMSw3ICs3MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25z
dCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihW
TSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAg
Y29uc3RleHByIEdQUlJlZyB0aHJvd25WYWx1ZUdQUiA9IGFyZ3VtZW50R1BSMTsKQEAgLTcyMCw3
ICs3NDAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAKICNp
ZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICBqaXQubG9hZFB0cigm
dm0udG9wRW50cnlGcmFtZSwgYXJndW1lbnRHUFIwKTsKLSAgICBqaXQuY29weUNhbGxlZVNhdmVz
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKGFyZ3VtZW50R1BSMCk7CisgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGFyZ3VtZW50R1BS
MCk7CiAjZW5kaWYKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJn
dW1lbnRHUFIwOwpAQCAtOTA4LDcgKzkyOCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3Ry
aWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwg
cmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MTgsNyArOTM5LDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBA
IC05MzEsNyArOTUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3Ry
dQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAg
ICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk3Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251
bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdU
MCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RW
UmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTc4
LDcgKzEwMDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcp
CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05OTMsNyAr
MTAxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBs
b2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxs
RnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRk
cmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRD
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsKICAgICBK
dW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZh
bHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2go
Y29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxv
Y2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJC
dWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwotICAgIGlmIChidWZmZXIgfHwgIXNo
b3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFz
Qml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0
ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRl
Y29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQ
dHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
ICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAg
ICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJl
Z3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1f
b3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRp
Y19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdzKTsKLSAgICAgICAgfSk7Ci0gICAg
fQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBAIC0xMDUzLDggKzEwNjMsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1
bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRl
bWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBT
aW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5r
ZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1
bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3Jk
KHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3Jk
OjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRh
YmxlKTsKIApAQCAtMTA4MSwxMyArMTA5MSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
Y2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2Rl
Lm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0
aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtl
ZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25z
dCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAg
ICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJ
bmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5r
ZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWlu
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CiAgICAgZmFySnVtcChy
ZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCkBAIC0xMDk5LDIwICsxMTEwLDIy
IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVh
dGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2gg
c3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRT
dHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4
LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAgIGxpbmtlZFRhYmxl
LmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRj
aFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVu
a25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCk7CiAg
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7
Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdU
MCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkRlYnVn
Z2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJy
YW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1
ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAg
ICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0xMTMzLDcgKzExNDYsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsK
ICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTExNDgsNyArMTE2MSw2IEBA
IHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTY2LDcgKzExNzgsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAgICBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwg
cmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJl
Z1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKICAg
ICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTExODgsMTIgKzEyMDAsMTQgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIEV2ZW4gdGhv
dWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAg
IC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJp
bHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBw
cmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOworICAg
IHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMoKTsKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7
ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChq
KSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKKyAgICAKKyAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGVt
aXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAgZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2so
KTsKICNlbHNlCkBAIC0xMzEwLDIzICsxMzI0LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9z
Y29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0
dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBl
KHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQs
IHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpT
Q2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJl
Z2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9
IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcgKzEz
NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVj
dEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5
cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9j
YXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpy
YXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9u
LCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BDcmVhdGVUaGlzOjpvZmZzZXRPZkNhY2hlZEZ1bmN0aW9uKCksIGNhY2hlZEZ1bmN0aW9uUmVn
KTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1YWwsIGNh
Y2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVl
T2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBjYWxsZWVS
ZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcy5saW5r
KHRoaXMpOwpAQCAtMTM3Miw3ICsxMzgyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNv
bnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEp
OwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFs
dWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0
dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVn
VDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwogICAgIGJv
eEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVH
UFIpOwpAQCAtMTM5NCw3ICsxNDA2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25z
dCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQxNyw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzMiwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9y
ID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFu
Y2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNv
bnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5j
ZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3Vz
dG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rvciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0lu
c3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5z
dGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKICAgICBi
b3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0p
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBA
IC0xNDMwLDcgKzE0NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0
b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUlu
ZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdp
YmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV91bmxpbmtlZENv
ZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsK
ICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRl
cihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCByZWdUMCk7CiAgICAgICAgIGF1
dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbVB0
cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTQ0
MCw3ICsxNDU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQog
I2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRpZgotICAgICAgICBtb3ZlVmFs
dWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgbG9h
ZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAg
ICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsxNDY4LDkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAgLy8gRW1pdCB0aGUgSklUIG9w
dGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKKyAgICAgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8sIFRydXN0ZWRJbW0z
MihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwKLSAgICAgICAg
ICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50
ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZK
SVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAtMTUwOSw3ICsxNTI1LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1lbnRHUFIwKTsKICNl
bHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BS
MzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTE1NjQsMzQgKzE1ODEsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChj
b25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IEdQUlJlZzo6YXJndW1lbnRHUFIw
OworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVt
aXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVj
b2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29w
ZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4
ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsK
KyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSkKKyAgICBsb2FkQ29uc3RhbnQoY29uc3Rh
bnQsIGFyZ3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJ
RDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9w
X25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVj
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0
aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQog
CkBAIC0xNjIxLDIzICsxNjQwLDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24o
Y29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3Vt
ZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBy
ZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BS
MSk7CiAjZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVC
bG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNv
bnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rp
b25FeHByLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNv
ZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVu
dEdQUjIpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYg
KG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5l
cmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3Vt
ZW50R1BSMXJlZ1QwLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9w
X25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50
R1BSMXJlZ1QwLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bj
b2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjFyZWdUMCwgYXJndW1l
bnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2NjQsMjkgKzE2ODQsMzAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0
YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFy
dC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1l
bnRHUFIyKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
TmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJn
dW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXdBcnJheVdpdGhTaXplPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwg
cmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFBy
b2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAot
ICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAg
bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNp
emU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1lbnRHUFIy
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxpemVQb2lu
dGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNp
emVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fy
cmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Myk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmls
ZSwgZHN0LCByZWdUMywgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlm
CiB9CiAKQEAgLTE2OTQsOCArMTcxNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93
aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91YmxlIGNoZWNr
IHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHR5cGUgcHJv
ZmlsZXIgaXMgZW5hYmxlZC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9j
YXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTc3
NywyMCArMTc5OSwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFp
CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0g
cmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRh
aWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwotICAgIEdQUlJlZyBz
Y3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCBy
ZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1cmVTaGFk
b3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0
Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7
IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQo
dm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIH0K
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0g
ICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVn
cyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
SlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVu
bGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB1c2luZyB0aGUgY29udHJvbCBmbG93IHByb2Zp
bGVyLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmls
ZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9j
YXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsKQEAgLTE4
NjAsNyArMTg4Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMK
ICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxOTEyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CiAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODE4NjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yODgxLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0g
ICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwog
ICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
Lm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJbnQzMigp
KQpAQCAtMjkwNCw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blN3aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBj
b25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN0
cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNTdHJpbmco
KSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZhbHVlKGds
b2JhbE9iamVjdCkuaW1wbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZh
dGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJl
Z1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5zdHVi
SW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwx
MDMgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5j
b3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewot
ICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAg
ICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRp
ZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJz
KCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOwor
ICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIs
IHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BS
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25H
ZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCBy
ZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNl
R1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICAgICAgaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5w
cm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQ
Uik7CisKKyAgICAgICAgLy8gT09QUy4gU3VwcG9ydCB0aGlzCisgICAgICAgIC8vaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAgICAgLy8gICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgICAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQo
Z2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+CiB2b2lk
IEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2Rl
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGlmIChoYXNB
bnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKLSAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dl
dEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlW
YWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHBy
b2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRl
Y29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5
dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNv
ZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9
IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBh
cmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVy
dHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihw
cm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFs
cmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQ
UjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9
PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0
eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3RhbnQo
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0T2ZB
cnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsK
LSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNjAsOCArMTcxLDggQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0g
YXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FS
TTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsK
IApAQCAtMTg3LDM0ICsxOTgsNDEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0
KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIp
LCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFk
ZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU7CisgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9w
cml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBBU1NFUlQoaGFzQW55U2xv
d0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yMjMsOSArMjQxLDExIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRz
dCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTIzNSwyNiArMjU1LDIwIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1
c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVf
bmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
dHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKQEAgLTMwMCwyMSArMzE0LDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9w
cml2YXRlX2JyYW5kKGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2Jy
YW5kOwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5kR1BSID0g
cmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFz
ZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MoYnJhbmRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFk
ZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhi
cmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gV2Ug
c2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdy
aXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI4LDEzICszNDksMTcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogewogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFNldFByaXZhdGVCcmFuZD4oKTsKKwogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVy
YXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0lu
ZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
R1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQs
IGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
ZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
QEAgLTM0NCwyNCArMzY5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9i
cmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRl
QnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9
PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGlt
aXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdl
dFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFBy
aXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMTkgKzM4OSwyOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0g
Ynl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRS
ZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRH
UFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwog
CiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRl
QnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1By
aXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vz
c2VzLmFwcGVuZChnZW4pOwogfQogCkBAIC0zOTQsOSArNDIyLDExIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVn
VDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVC
cmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0MzYsMTggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGlj
X2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0
aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0
aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRy
YWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50
VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NTksNDIgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwot
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0
dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVy
SW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxl
KCksIHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIp
LCByZWdUMywgcmVnVDQpOwotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
cHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworICAgIC8vIE9PUFM6CisgICAgLy9pZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgIC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBzdGQ6
OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRL
aW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNv
ZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwog
CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVy
IGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MTAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01B
TW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAog
ICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAg
ICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVj
b2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTMxLDE2IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBh
dGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0Rp
cmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDog
KGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDog
b3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGly
ZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0
YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAg
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
aXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
U3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
KSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgYXJn
dW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUxMiw3ICs1
NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAgIGF1dG8g
b3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0
cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwpAQCAt
NTIzLDcgKzU2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUzOSwxMSArNTgxLDExIEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BS
ID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNl
dEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7
CkBAIC01NzAsMjAgKzYxMiwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1l
KGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0
dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmllbGRQdXRL
aW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0
QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNjAzLDEzICs2NTYs
MTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtp
bmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1p
emUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBm
YXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGdlbi5zdHViSW5mbygpLCBU
cnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7Cisg
ICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZh
bERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRl
RmllbGRPcHRpbWl6ZTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRzR1BSMywg
YXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjc2LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQpAQCAtNjQ4LDkgKzY5Niw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gcmVnVDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0
OwogCkBAIC02ODAsNyArNzI4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9p
ZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlk
LCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTY4OSw3ICs3MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lk
KGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQs
IHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTY5OSw3ICs3NDksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVy
X3NldHRlcl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdU
Mik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEs
IHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3NjAsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1
dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVn
VDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNzE5LDcgKzc3MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlf
dmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHks
IHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMs
IHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVz
LCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3LDIzICs3ODAsMzMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5l
RGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJ
bmZvR1BSLCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUt
YmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1i
YXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVy
cyByZWdpc3RlcnMuCkBAIC03NTksMTUgKzgyMiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJ
VERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRl
bGV0ZUJ5SWRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CkBAIC03ODEsMjQgKzg0NiwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5
X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50
R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0Owog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRp
bWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0
ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0
aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTg0NSwyMiArOTA1LDMzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVs
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkp
OworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJlZ2lz
dGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2Rl
bEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBz
ZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJ
QyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNl
IGlzIGNlbGwuCkBAIC04ODMsOSArOTU0LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxf
YnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGlt
aXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZh
bHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVk
SW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC04OTksMjQgKzk3MiwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRH
UFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9H
UFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFN
b2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVs
X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
IAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDAp
OwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTYxLDIy
ICsxMDI5LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2VWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1
bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBB
Y2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2LDE0ICsxMDYzLDE3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTEwMDMsMjYgKzEwODMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRf
YnlfaWQoY29ucwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAg
IHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1p
emUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlk
T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25U
cnlHZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
ZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDMwLDIy
ICsxMTA0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBy
ZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZv
R1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKworICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMDU0LDE2ICsxMTM3
LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIp
OworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJ
ZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
I2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTA3Myw4MyArMTE1OCw2MSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAg
ICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92
bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAg
ICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRl
QWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgJm1ldGFkYXRhLm1fbW9kZU1ldGFk
YXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDhG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1l
dGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhOjpvZmZzZXRPZk1vZGUoKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwg
c2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2Rl
OjpBcnJheUxlbmd0aCkpKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsg
R2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBi
YXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhp
cyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
cmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEsIHRoaXNWUmVnKTsKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
IAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KLSAg
ICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRS
ZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0x
MTU4LDE2ICsxMjIxLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3Qg
SW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRH
UFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNDIsNTggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBh
cmd1bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5
X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRo
aXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9
IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lz
dGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJh
c2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJ
VEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisK
KyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRC
eUlkV2l0aFRoaXM7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlz
LmFwcGVuZChnZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI0MSwxNiArMTMzOCwxOSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJ
ZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEyNjAsMjkgKzEzNjAsMjMgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4K
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHRoaXNHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK31zCiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dl
dF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mIHZtKQpAQCAtMTMyOSwy
MyArMTQyMywzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0
ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJs
ZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ug
c3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhh
dmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5l
cmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFs
d2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2
YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHN0
dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVj
dCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQ
dXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0
IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2Rl
KGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChn
ZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3Jp
dGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0NjcsMTggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVu
Y3Rpb24oKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3NiwyNSArMTQ4OCwxOSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFz
ZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVH
UFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwg
cHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCkBAIC0xNDQxLDIwICsxNTQ3LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5
X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJh
c2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJl
Zyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9H
UFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6SW5CeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBA
IC0xNDYzLDE0ICsxNTgwLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25z
dCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5C
eUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4Kytd
OwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25J
bkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3Vt
ZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTE0ODAsMjggKzE2MDAsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luX2J5X2lkKGNvbnN0IElucwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwog
ICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
LCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICAv
LyBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkg
d2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEg
ZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXpl
KSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwot
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1p
emU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRP
cHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxMCwyNSArMTYyNCwzMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRT
bG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUzNywxNSArMTY1OSwxOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZh
bHNbbV9pbkJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdU
MCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlW
YWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NTYsNTEgKzE2ODEsNTYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVH
UFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9H
UFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5
VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAg
Ly8gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3Rs
eSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcg
YSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGlt
aXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNh
bGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25J
bkJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JC
cmFuZCwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdU
Mik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHVi
SW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBl
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1By
aXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklU
OjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewogICAg
IEFTU0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIApAQCAtMTYwOCw3ICsxNzM4LDExIEBAIHZvaWQg
SklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2kKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUg
PyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJy
YW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRp
b25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTYxOCwyNyArMTc1MiwyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVT
bG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BS
ID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBl
KG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGlt
aXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRl
X25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBl
ID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRl
QnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxNzgwLDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5t
X2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xv
dyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCAs
IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTE2NjYsMTkgKzE3OTQsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX2Jy
YW5kKAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVCcmFuZD4oKTsKLSAgICBlbWl0SGFz
UHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7
CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlv
bldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zh
ckluamVjdGlvbldhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0
YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewotICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBkZXB0aDsgKytpKQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
U2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwpAQCAtMTY4OCw2ICsxODE5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaQogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTcwMSw3ICsxODMzLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSog
Y29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2
ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50
U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMSk7CiAgICAgICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEp
OwogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRk
cmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxC
aW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Y29uc3RhbnRTY29wZSksIHJlZ1QwKTsKQEAgLTE3MTUsNyArMTg0Nyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3Rh
bnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUs
IG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUp
OwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTc5NCw1
OSArMTkyNiw3NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fcmVzb2x2ZVR5cGU7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
ICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUlu
ZGV4KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUlu
ZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9u
KTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIC8vIElmIHdlIHByb2ZpbGUgY2VydGFpbiByZXNv
bHZlIHR5cGVzLCB3ZSdyZSBnYXVyYW50ZWVkIGFsbCBsaW5rZWQgY29kZSB3aWxsIGhhdmUgdGhl
IHNhbWUKKyAgICAvLyByZXNvbHZlIHR5cGUuCiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9k
dWxlVmFyKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52
aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0g
TW9kdWxlVmFyKSAKKyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNv
bHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVudCgpLCByZWdUMCk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJs
b2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICAgICAgcHRyZGlmZl90
IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOworCisgICAgICAgIGF1dG8gY2xvc3VyZVZhckdlbmVy
YXRvciA9IFtdIChWTSYpIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayhDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xv
c3VyZVZhciIpOworICAgICAgICB9OworCisgICAgICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mKSB7CisgICAgICAgICAgICByZXR1cm4g
SklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyIpOworICAgICAgICB9OwogCi0jZGVmaW5lIFJFU09MVkVfU0NPUEVfR0VO
RVJBVE9SKHJlc29sdmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVy
YXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9
IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShSRVNPTFZFX1NDT1BFX0dFTkVS
QVRPUikKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0gW10gKFZN
JikgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5r
KHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMiKTsKICAg
ICAgICAgfTsKLSN1bmRlZiBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgorCisgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gcmVnVDU7CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
c2NvcGVHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBt
ZXRhZGF0YUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwor
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAg
ICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgICAg
IGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAgICAgICBlbHNl
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2Rl
ID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yKTsKKyAgICAgICAg
ZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIH0K
IAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVU
aHVuayhzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciog
dGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlv
biBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZU
TCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywg
d2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcFJlc29sdmVTY29w
ZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OyAv
LyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsgLy8gaW5j
b21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7IC8v
IGluY29taW5nIC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4KICAgICBjb25zdGV4cHIgR1BSUmVn
IGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZU9mZnNl
dEdQUik7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShy
ZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIGppdC50YWdSZXR1
cm5BZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFk
YXRhR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMs
IG1ldGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCkBAIC0xODU1LDI2ICsy
MDA1LDI2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BS
UmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zh
ckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
YnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0
ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3Qs
IG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zm
c2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAog
ICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKSB7CiAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgbG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNj
b3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBqaXQubW92ZShzY29wZUdQUiwgcmVnVDApOwor
ICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOwogCi0gICAgICAgIExhYmVsIGxv
b3AgPSBsYWJlbCgpOwotICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0MzIoWmVybywgcmVn
VDEpOworICAgICAgICBMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOwogICAgICAgICB7Ci0gICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDAp
OwotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgICAgICAg
ICBqdW1wKCkubGlua1RvKGxvb3AsIHRoaXMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgICAg
ICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAgICAgICAgICBqaXQuanVt
cCgpLmxpbmtUbyhsb29wLCAmaml0KTsKICAgICAgICAgfQotICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgIGRvbmUubGluaygmaml0KTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0Q29k
ZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKQEAgLTE4ODIsMTIgKzIwMzIsMTIg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNv
ZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkuCi0gICAgICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsK
LSAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7Ci0gICAgICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2Jq
ZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2No
KCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsK
KyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhn
bG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5k
aW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubW92ZShnbG9iYWxPYmplY3RH
UFIsIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEg
KzIwNDcsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAg
ICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFu
ZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBm
b3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJl
Z1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8
IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQot
ICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9m
ZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xv
YmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0xOTA5LDcgKzIwNTksNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgICAgICBlbWl0
UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVt
cCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZh
cjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0xOTE5LDgzICsyMDY5LDQ1IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAK
LSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQ
cm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYg
KHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBD
bG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwot
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
bm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDApOwog
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAg
ICAgYXV0byBlbWl0Q2FzZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKKyAgICAg
ICAgICAgIEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUp
OworICAgICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAg
IG5vdENhc2UubGluaygmaml0KTsKKyAgICAgICAgfTsKIAotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXIubGluayh0aGlzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyKTsKKyAgICAgICAgZW1p
dENhc2UoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFy
KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVu
ayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9y
ZXNvbHZlX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBD
b2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlu
a0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2Us
IENvZGVMb2NhdGlvbkxhYmVsKHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2Rl
ZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZlX3Njb3BlXyMj
cmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29u
c3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpIFwKLSAg
ICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAg
cmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNl
bGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFD
SF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERF
RklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkK
IHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkg
d29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRoIGFscmVhZHkg
cHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAtMjA2NSw2ICsy
MTc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3Bl
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTIxNzgsNyAr
MjI5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTIxODYsOSArMjI5OSw5IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0
RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRG
cm9tU2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiAj
ZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTIxOTYsNDEgKzIzMDksNTAgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21T
Y29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIFJl
c29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09
IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0
KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91
bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJl
bnRJbnN0cnVjdGlvbik7CisKKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0m
KSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhDbG9z
dXJlVmFyLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9
OworCisgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9
IFtdIChWTSYpIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRo
dW5rKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX2dldF9m
cm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0byBnZW5lcmljR2V0RnJv
bVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJikgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0
ZU9wR2V0RnJvbVNjb3BlVGh1bmsoc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9t
X3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAo
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0gICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNs
b3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwot
ICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3Bl
cmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFk
YXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEp
OworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRf
RlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVz
b2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRf
RlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAgIH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVf
R0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQ
Uik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1ty
ZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1Yihj
bG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0
Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAg
ZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2Vu
ZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3Bl
VGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJv
bVNjb3BlVGh1bmsoc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0
IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMg
ZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNh
dXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgpAQCAtMjIz
OSw3NyArMjM2MSw2OCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7CiAgICAgY29u
c3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NvcGVHUFIgPSByZWdUNjsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wR2V0
RnJvbVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKKworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUo
KSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBq
aXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJs
ZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKIAogICAg
IEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0
KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgbWV0YWRhdGFTdHJ1Y3R1
cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAgIGF1dG8g
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUikgeworICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZT
dHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsK
KyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7
CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAo
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1Qz
KTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9i
YWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIGpp
dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwor
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMs
IE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50
KSksIHJlZ1QzKTsKICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJl
c3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRy
KHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9p
bnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIo
cmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChH
UFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7CiAgICAgICAgIHN0YXRpY19hc3Nl
cnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBsc2hpZnQ2NChUcnVzdGVk
SW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRH
UFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5sc2hpZnQ2
NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOworICAgICAgICBqaXQuYWRkUHRyKHNjb3Bl
R1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BS
LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKICAg
ICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUs
IGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0g
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0
dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBk
b24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4g
QWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIg
aW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVH
UFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7CiAg
ICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwogICAgICAgICAgICAg
Y29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKICAgICAgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFt
YmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWws
IGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1
bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIo
RXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3Bl
cmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgb2Zmc2V0KTsKICAgICAgICAgICAg
IGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUg
PSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9m
ZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRo
aXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3Jl
YXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNl
dCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RP
dXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwot
ICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAg
ICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91
dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0Lm5lZzMyKG9mZnNldCk7CisgICAg
ICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgICAgICAg
ICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmly
c3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6
CkBAIC0yMzE3LDIxICsyNDMwLDE5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0g
ICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
b3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCBy
ZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRh
ZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
YnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCByZWdUMyk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9m
ZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwogICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIo
c2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFt
aWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQx
LDc5ICsyNDUyLDU2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5m
bykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVt
cCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNl
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xv
YmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
eworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0g
ZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSks
IHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgaml0LmxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCBy
ZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJp
dHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFZh
ciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIp
KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsoJmppdCk7CisKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0LmJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxp
bmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
ci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBqaXQuYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwor
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKCZqaXQp
OwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5s
aW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwor
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICAgICAgc2tpcFRvRW5k
LmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVl
UHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOwor
ICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zm
c2V0T2ZQcm9maWxlKCkpKTsKIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0oKS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtO
YW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29s
dmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3Bf
Z2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsg
XAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJl
c29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0
KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhy
ZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZV8iICNyZXNvbHZlVHlwZSk7
IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dF
TkVSQVRPUikKLSN1bmRlZiBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Nj
b3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRo
aXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBi
ZWNhdXNlCkBAIC0yNDcxLDg2ICsyNTU5LDc5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
dm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAg
c3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RX
YXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBs
b2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVn
VDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5
V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8o
Ynl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0
cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGVtaXRD
b2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JP
cGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgp
OworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsK
ICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
ewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVy
ZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2Ug
ZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3Qu
IEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFy
IGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGlu
amVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQg
dGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9z
Y29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAg
IGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6b2Zmc2V0T2ZTdHJ1
Y3R1cmUoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgcmVnVDApOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBy
ZWdUMSkpOworICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSkpOworCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMik7CiAKICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4o
WyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAg
ICAgICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICAgICAgICAgIHJl
dHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAK
LSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEp
OworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7CiAgICAgICAgICAg
ICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChy
ZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAg
ICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMSwgVGltZXNFaWdo
dCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7
CisgICAgICAgICAgICAvLyBPT1BTOiB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRo
YXQgdG9vayBHUFJSZWdzIGluc3RlYWQgb2YgVlJzCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
OgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRT
Y29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgIGlmICgh
aXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKyAgICAgICAgICAgIGVtaXRWYXJSZWFk
T25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFu
ZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihieXRlY29k
ZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBU
RFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVt
aXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9p
bnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRH
bG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90
KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDEpOwor
ICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIHN0
b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291
bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIHZhbHVl
LgorICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUmVz
b2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRh
ZGF0YS5tX3dhdGNocG9pbnRTZXQpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQo
KSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQ
dXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAgICAg
ICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMiwgU2NhbGVFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCkpKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUgbmlj
ZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIG93bmVyL3ZhbHVlLgog
ICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTI1
NjQsNTggKzI2NDUsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
cwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBj
YXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMy
KCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZElt
bTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGlu
dG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEg
dmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAgICAgIGlz
R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwot
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQu
bGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZhci8gQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUgdGhpbmdz
CisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBwcm92ZW4g
dGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIsCisgICAg
Ly8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIKKyAgICAvLyBp
ZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBpcyBmaXJl
ZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAvLyBtYXR0
ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsKKyAgICBl
bHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikKKyAgICAg
ICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJl
c29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBl
bWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZWxzZSB7CiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOwogICAg
ICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8v
IExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluayh0
aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRy
dWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhp
cyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAgICAgICAg
IHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZh
dWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVh
azsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTggKzI2OTksMjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7
Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2Rl
KS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAg
ICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgaWYgKHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElmIGFueSBsaW5r
ZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENvZGVCbG9ja3Mg
YXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFyLgogICAgICAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9y
KTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2UgewogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRU
b1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJl
bnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1bWVudEdQUjAs
IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1f
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIEFTU0VS
VChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0g
Y3VycmVudEluc3RydWN0aW9uKTsKIAogICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAgLTI3MDEsNyArMjc3OSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQ2NChBZGRyZXNzKHJl
Z1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwogfQogCkBAIC0yNzU5LDcgKzI4MzcsNiBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKQEAgLTI3NjcsNyArMjg0NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5h
bF9maWVsZChjb24KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zm
c2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBA
IC0yNzg5LDcgKzI4NjYsNiBAQCB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
PE9wCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEVudW1lcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5t
X21vZGU7CkBAIC0yODA1LDcgKzI4ODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X25leHQoY29uc3QgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMg
aXMgdGhlIG1vc3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNh
c2UgaXQgaWYgd2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1f
ZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0
dXJlTW9kZSkgeworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0
cnVjdHVyZU1vZGUpIHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsK
ICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRy
ZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6bW9kZVNldE9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVy
ZU1vZGUpKSk7CkBAIC0yODQ3LDc4ICsyOTIzLDg2IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3Byb3Bl
cnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51
bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CiAKLSAgICBhdXRvIHJlc3VsdEdQUiA9
IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVFbnVtZXJh
dG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGlu
ZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3Jh
dGNoMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9y
R2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVz
cygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0
YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0
YSgpLCBzY3JhdGNoMik7CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIpOworICAgIHN0b3Jl
OFRvTWV0YWRhdGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNl
dE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsK
ICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgotICAgIEp1bXAg
aXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVz
dGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlzTm90T3duU3RydWN0
dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBK
dW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsK
KyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVx
dWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBvZmZz
ZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDMpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJZiBpbmRleCBpcyBs
ZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQn
cyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWdu
RXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAs
IHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQorICAgIEp1bXAgb3V0T2ZMaW5lQWNj
ZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7
CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQo
QmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVt
cCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5l
QWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVn
VDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVn
VDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7
CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBz
Y3JhdGNoMik7CiAgICAgY29uc3RleHByIGludHB0cl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9
IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGlu
dHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BS
KTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQo
anVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4
KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1
cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEp
OworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2Rl
LCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAg
ICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc05vdEluZGV4
ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFu
Y2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdpdGggdGhl
IGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAgICBpc05vdElu
ZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVn
VDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
Ynl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAg
IGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTI3LDEwICszMDExLDkgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVyKTsKIH0K
IAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rp
b25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVj
b2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1p
dF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlw
ZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0yOTM5LDcg
KzMwMjIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltCiAgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCBy
ZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVy
YXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVjb2Rl
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgcmVnVDEpOworICAgIG9y
MzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1QxLCBieXRlY29kZSwg
Qnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwogCkBAIC0zMDI4
LDYgKzMxMTMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgog
ICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQoreworICAgIEp1bXAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNlbGVjdFNjcmF0Y2hH
UFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25X
cml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
cmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU0Myw3ICsxNTQzLDcgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0
Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogCiB2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlz
YXNzZW1ibHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0
YXJ0KCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5s
aW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7CiAgICAg
CiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxs
VGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpA
QCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9w
Sm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3Bl
cmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVT
dHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAg
ICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBl
LCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEsIHQy
KQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRbY2Zy
LCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8gcHJl
T3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGluIHQx
LCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAgICAg
ICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVB
cml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAgICBkaXNw
YXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRp
c3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxl
KHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9m
aWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1ldGFk
YXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BOZWdh
dGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAg
bmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBk
YXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQzKQog
ICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJpYSB0
MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQotICAg
IHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlB
cml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAgIHJl
dHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAgZW5k
KQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwg
aW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAg
ZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMsIHQyKQog
ICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmluYXJ5
T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcsIC5v
cDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0gICAgICAg
IGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAg
ICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDMs
IHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsxMTI0
LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAg
YmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAub3Ax
Tm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAgICAg
ICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmlu
YXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwg
dDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQog
ICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0gICAg
ICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJl
ciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MSkK
ICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVyYW5k
IGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBu
b3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFnLCAu
c2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAg
ICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRO
dW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0MSwg
dDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEsMTMgQEAg
bWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSBQQywgYTEK
ICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBidHB6IHIw
LCAucmVjb3ZlcgotCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisgICAgICAgICAgICAjIEJh
c2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFudCBwb29s
LgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgICAgICAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxv
Y2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwogICAgICAgICAgICAgaWYg
QVJNNjRFCiAgICAgICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpv
ZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6Omxvb3BPU1JFbnRyeSkg
KiBQdHJTaXplLCBhMgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQ
dHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0RXF1YWxp
dHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBv
cGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBl
KQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQKLQog
ICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQx
CiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3MCw3IEBAIG1hY3JvIHBy
ZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJhdGlv
bih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3JlcSB0
MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJ
bnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQ
cm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAt
MTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0
ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBl
LCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6
Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikKQEAg
LTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVn
YXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQz
CiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9m
aWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2Zp
bGVJbnQsIHQxLCB0NCkKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAgYnRx
eiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAwMDAw
MDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1
cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0MSwg
dDQpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE2MCw2
IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGludE9w
V2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQw
KQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAl
b3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3JocywgdDApCiAg
ICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6
ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9y
ZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2Vy
T3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmlsZShB
cml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQ0KQogICAgICAgICBkaXNwYXRjaCgp
CiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBAQCBtYWNybyBiaW5hcnlP
cEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywg
LnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQot
ICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVy
LCB0NSwgdDQpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3Ay
SW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50
LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6CiAg
ICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA2LDcgKzExOTgsNyBAQCBtYWNybyBiaW5hcnlP
cEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBk
ZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAg
Z2V0KG1fZHN0LCB0MikKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwotICAgICAg
ICBwcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAg
ICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAg
IGZxMmQgdDEsIGZ0MQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTU2LDYgKzI1NTYsMTcgQEAgbWFjcm8gbm90U3VwcG9ydGVkKCkKICAgICBlbmQKIGVu
ZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwg
bWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Fy
aXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgVW5hcnlBcml0aFByb2Zp
bGU6Om1fYml0c1t0ZW1wXQorZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5
cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKwogLy8gRklYTUU6IFdl
IHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0X1dJTiBjb25kaXRpb24gaGVyZSwgc2luY2UgV0VC
QVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUgZmFsc2Ugb24gV2luZG93cwogLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNgogaWYgV0VCQVNTRU1CTFkgYW5k
IG5vdCBYODZfNjRfV0lOCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDggKzQ4LDEwIEBAIHB1YmxpYzoKICAgICBDYWNoZWFibGVJZGVudGlmaWVyKCkg
PSBkZWZhdWx0OwogCiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0
ZUZyb21DZWxsKEpTQ2VsbCogaWRlbnRpZmllcik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFi
bGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxv
Y2sqLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVu
dGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBV
bmlxdWVkU3RyaW5nSW1wbCopOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
PgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIGNvbnN0IElkZW50aWZpZXImKTsK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KENvZGVCbG9ja1R5cGUqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBpbmxpbmUg
Q2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKFVuaXF1ZWRT
dHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBDYWNoZWFibGVJZGVudGlmaWVyIGNy
ZWF0ZUZyb21SYXdCaXRzKHVpbnRwdHJfdCByYXdCaXRzKSB7IHJldHVybiBDYWNoZWFibGVJZGVu
dGlmaWVyKHJhd0JpdHMpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNpb24g
MjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRp
ZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE0IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxv
Y2ssIGNvbnN0IElkZW50aWZpZXImIGkpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhjb2RlQmxvY2ssIGkuaW1wbCgpKTsKIH0KIAotaW5saW5lIENh
Y2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVh
YmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxvY2stPmhhc0lk
ZW50aWZpZXIodWlkKSk7CiAgICAgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIodWlkKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpT
Q19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQog
c3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpN
ZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0g
ICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsK
KyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmls
ZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5p
c051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4
MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9CiAgICAgc3RhdGljIGlu
bGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAgc3RhdGljIGlubGluZSBw
dHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsgfQorICAgIHN0YXRp
YyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpJ
bmRleDogU291cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
QmFnLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Niw2ICs2NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG90aGVyLm1faGVhZCA9
IG51bGxwdHI7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBCYWcmIG9w
ZXJhdG9yPShCYWc8VCwgVT4mJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh1bndyYXBwZWRI
ZWFkKCkgPT0gb3RoZXIudW53cmFwcGVkSGVhZCgpKQorICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworCisgICAgICAgIEJhZyBkZXN0cm95OworICAgICAgICBkZXN0cm95Lm1faGVhZCA9IHVud3Jh
cHBlZEhlYWQoKTsKKyAgICAgICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgpOworICAg
ICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOworCisgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICB9CisKICAgICB+QmFnKCkKICAgICB7CiAgICAgICAgIGNsZWFyKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437107</attachid>
            <date>2021-09-01 19:26:31 -0700</date>
            <delta_ts>2021-09-01 19:50:27 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>405268</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MTg2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODMxLDYgKzgzMSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IH07CiAJ
CTUyRUVENzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFRUQ3OTMyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgw
MDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIw
MDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVk
U291cmNlMy1tbS5tbSAqLzsgfTsKQEAgLTE0MTYsMTAgKzE0MTcsMTAgQEAKIAkJQTM4Q0E1OUUy
NkREODRERTAwQzhEODRDIC8qIElTTzg2MDEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEzOENBNTlDMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmgg
Ki87IH07CiAJCUEzOEQyNTBFMjU4MDBENDQwMDQyQkZERCAvKiBKU0FycmF5QnVmZmVyUHJvdG90
eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTM4RDI1MEQyNTgwMEQ0MzAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxp
bmVzLmggKi87IH07CiAJCUEzOEQ1QkZDMjY2NkQzREEwMEExMDlBNiAvKiBJbkJ5U3RhdHVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzhENUJGQTI2
NjZEM0RBMDBBMTA5QTYgLyogSW5CeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUEzRUU4NTQzMjYyNTE0QjAwMEZDOUI4RCAvKiBJbnRs
V29ya2Fyb3VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMzc2MTk0MDI2MjUxMjdDMDBDQkNCQTkgLyogSW50bFdvcmthcm91bmQuY3BwICovOyB9
OwogCQlBM0M3RURCNjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VE
QjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLzsgfTsK
IAkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIzMjZCMERCMzcw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmggKi87IH07CiAJCUEzQzdFREJBMjZCMERCMzgw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAv
KiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKKwkJQTNFRTg1NDMyNjI1MTRC
MDAwRkM5QjhEIC8qIEludGxXb3JrYXJvdW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzNzYxOTQwMjYyNTEyN0MwMENCQ0JBOSAvKiBJbnRsV29y
a2Fyb3VuZC5jcHAgKi87IH07CiAJCUEzRkY5QkM3MjIzNDc0OTEwMEIxQTlBQiAvKiBZYXJyRmxh
Z3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRkY5
QkM1MjIzNDc0NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyog
SmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTUwM0ZBMTQxODhFMEZBRjAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJh
bWUuaCAqLzsgfTsKIAkJQTUwM0ZBMUUxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENh
bGxGcmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTUwM0ZBMTgxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZVByb3RvdHlwZS5oICovOyB9OwpAQCAtMzY2Nyw2ICszNjY4LDggQEAKIAkJNTJDRDBGNjQyMjQy
RjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBwYXRoID0gZGZnL3Rlc3Rk
ZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQxMzA4RjIyMUNFMDNBMDA5
QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0g
Zm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNjI2RTAzOUIzMDA1
NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VsaW5lSklUQ29k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNzI2RTAzOUI0MDA1NEU0
MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VsaW5lSklU
Q29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkyMjQ5MkI4Njgw
MDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5j
dGlvbkFsbG93bGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkz
MjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
dW5jdGlvbkFsbG93bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1
QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI1Niw2ICs2MjU5LDggQEAKIAkJCQk2Qjc2N0U3QTI2
NzkxRjI3MDAxN0Y4RDEgLyogQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaCAqLywKIAkJCQk3MjM5
OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLywKIAkJCQk3MjM5
OThGNTI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8sCisJCQkJNTJERDAw
MDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8sCisJCQkJNTJERDAw
MDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovLAogCQkJCTBGNjRCMjZG
MUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGNjRCMjcwMUE3
ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4MzkyRDFCQUNBOUQz
MDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApAQCAtOTY5Niw2ICs5NzAxLDcgQEAK
IAkJCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTgg
LyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlDQzg5MTkzQUM2MEEw
MDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzYx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgko
cmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91cCA6
UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAg
IHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRUeXBl
cywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRhdGE6
IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJp
dGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZhbHVl
UHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5SW5Q
bGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDogVmly
dHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAg
ICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZQor
ICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDp0
b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRzdDog
VmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWdu
ZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5
QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioK
ICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
T3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBA
IFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJu
ICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
K3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4
KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhw
ciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dp
dGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3lt
Ym9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOworICAg
ICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Om9mZnNl
dE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6
Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3Bv
aW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJl
dHVybiBCeXRlY29kZTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZXIoKTsKKyAgICAgICAgY2Fz
ZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpvZmZzZXRPZkRvbmVQ
cm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1cm4g
Qnl0ZWNvZGU6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAg
IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpOworfQorCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBCeXRlY29kZU1ldGFkYXRhPgogYm9vbCBoYXNWYWx1ZVByb2ZpbGVGb3Io
Qnl0ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
Y3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDExICsxMTQsNiBAQCB2b2lk
IENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxp
c3QoKSk7CiB9CiAKLUNvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5r
SW5mbzo6ZmFzdFBhdGhTdGFydCgpCi17Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJl
bFB0cjxKU0ludGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwotfQotCiBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RhdGFJQygpKTsKQEAgLTIyNSw2ICsyMjAsMTIgQEAg
dm9pZCBDYWxsTGlua0luZm86OnNldE1heEFyZ3VtZW50Q291bnRJbgogICAgIG1fbWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgPSB2YWx1ZTsKIH0KIAorQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChpc0RpcmVjdCgpICYmIGlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRo
U3RhcnQpOworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAg
ICBhdXRvIGhhbmRsZVNwZWNpZmljQ2FsbGVlID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsK
QEAgLTI5OCwyMyArMjk5LDExIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVE
YXRhKGMKICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJ
bXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
Ym9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxs
KQogewotICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7Ci0gICAgaWYgKGlzRGF0YUlDKCkp
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKLSAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7Ci0gICAgfQotCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0
ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogCi0gICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAg
ICBpZiAodXNlRGF0YUlDID09IFVzZURhdGFJQzo6WWVzKSB7CiAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gaml0LnNjcmF0Y2hSZWdpc3RlcigpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2Ny
YXRjaEdQUik7IAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKQEAg
LTMyMyw3ICszMTIsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjpl
CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxw
ZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5
bW9ycGhpY0NhbGxlZU1hc2spKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJh
bmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwog
ICAgICAgICB9Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFp
bENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAg
Z29Qb2x5bW9ycGhpYy5saW5rKCZqaXQpOyAvLyBQb2x5bW9ycGhpYyBzdHViIGhhbmRsZXMgdGFp
bCBjYWxsIHN0YWNrIHByZXAuCiAgICAgICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0
aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKQEAgLTMzNiwxNCArMzI1LDE2IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGpp
dC5icmFuY2hQdHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBj
YWxsZWVDaGVjaywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKSk7CiAKICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkp
IHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWls
Q2FsbCgpOwogICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihj
YWxsKTsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT51LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
PEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBA
IC0zNTMsMTMgKzM0NCwzNCBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplCiBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMgdXNlRGF0YUlDKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxs
KCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlu
a0luZm9HUFIsIHVzZURhdGFJQywgbnVsbHB0cik7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0
YUlDKTsKKworICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNh
bGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7Cisg
ICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAg
IH0KKworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBj
YWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAot
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJl
Rm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0
VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVChpc1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2Fs
bGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFp
bENhbGwpKTsKKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKyAgICByZXR1cm4g
ZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgVXNl
RGF0YUlDOjpObywgaXNUYWlsQ2FsbCgpLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwor
fQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFs
aWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2Fs
bGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7
Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2Fs
bERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxD
YWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BS
UmVnKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQ
UiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJl
Rm9yVGFpbENhbGwpKTsKIH0KIAogdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYg
dm0sIENDYWxsSGVscGVycyYgaml0KQpAQCAtMzY5LDE3ICszODEsMzAgQEAgdm9pZCBDYWxsTGlu
a0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIAogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigp
KSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xv
d1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sK
KyAgICBqaXQubW92ZShjYWxsTGlua0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQu
Y2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1Bh
dGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5r
SW5mbzo6aW5pdGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxp
bmtlZENhbGxMaW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQ
UikKK3sKKyAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZv
LmJ5dGVjb2RlSW5kZXgpOworICAgIHNldFVwQ2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxs
VHlwZSwgY2FsbGVlR1BSKTsKKyAgICBtX2RvbmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJ
bmZvLmRvbmVMb2NhdGlvbjsKKyAgICBpZiAodW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVm
ZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJh
bWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpOyAv
LyBPT1BTOiB0aW1lIGZvciByZWYgY291bnRpbmc/CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0
YUlDOjpZZXMpOworICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZv
R1BSOworICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0Nh
bGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkp
OworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0
VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBq
aXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8gY2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3
ICs0MjIsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAKICAg
ICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsK
KyAgICAgICAgdS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
PEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8gLSBJ
ZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwgdGhpcyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNGdW5j
dGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxl
RGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlua0lu
Zm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGlj
OgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAg
ICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUs
NiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAg
ICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5m
byYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAgR1BS
UmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAgICAg
ZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBAIHB1
YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBl
bWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBj
YWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVG
b3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMm
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJv
b2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkg
V0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKEND
YWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVy
cyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykg
V0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFp
bENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9y
VGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVU
VVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYpOwogICAgIHZv
aWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0m
LCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBzdGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0m
LCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJldmVy
dENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAt
MjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAg
ICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhT
dGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRo
U3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9j
YXRpb24oKTsKIApAQCAtMjQzLDExICsyNDksNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xvd1N0
dWIgPSBudWxscHRyOwogICAgIH0KIAotICAgIEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1YigpCi0g
ICAgewotICAgICAgICByZXR1cm4gbV9zbG93U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBib29s
IHNlZW5PbmNlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNo
OwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PENhbGxUeXBlPihtX2NhbGxUeXBlKTsKICAgICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVzc09m
TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICByZXR1
cm4gJm1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KTsKICAgICB9CiAKICAgICB1aW50MzJfdCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
CkBAIC0zODEsNyArMzgyLDkgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisKICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0
aW5hdGlvbjsKICAgICB1bmlvbiBVbmlvblR5cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBt
X2NhbGxMb2NhdGlvbjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0lu
dGVybmFsUHRyVGFnPiBtX2NhbGxlZUxvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9zbG93UGF0aFN0YXJ0OworICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgICAg
ICB9IGNvZGVJQzsKICAgICB9IHU7CiAKQEAgLTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENvZGVP
cmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaQogICAgIHJldHVybiBjYWxsTGlua0luZm8uY29k
ZU9yaWdpbigpOwogfQogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleDsgLy8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxp
bmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxseSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBDYWxs
TGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1l
U2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZsZURhdGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MCw3
ICszNzAsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAvLyB3
ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5rZWQgYnl0ZWNvZGUgZ2VuZXJhdGlvbi4gVGhp
cyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdlbmVyYXRlIGNvbnRyb2wKIC8vIGZsb3cgb3Ig
aW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgd2UgcmVseSBvbiBs
aXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2FtZSBmb3IKIC8vIGFsbCB0aGUgQ29kZUJsb2Nr
cyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2UgcmVseSBvbiB0aGlzIGZhY3QgYnkgY2FjaGlu
ZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKLS8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4KKy8v
IGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4gQWxzbywgQmFzZWxpbmUgSklUIGNvZGUgaXMgc2hh
cmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5rZWRDb2RlQmxvY2ssCisvLyBz
byB0aGUgYnl0ZWNvZGUgbXVzdCByZW1haW4gdGhlIHNhbWUgYmV0d2VlbiBDb2RlQmxvY2tzIHNo
YXJpbmcgYW4gVW5saW5rZWRDb2RlQmxvY2suCiBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29k
ZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKICAgICBKU1Njb3BlKiBzY29wZSkKIHsKQEAgLTQ2
Niw2ICs0NjcsMTkgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwog
ICAgICAgICBicmVhazsgXAogICAgIH0KIAorI2RlZmluZSBMSU5LX1dJVEhfQklOQVJZX0FSSVRI
X1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFMSVpF
X01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAmbV91
bmxpbmtlZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7
IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklU
SF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTEla
RV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gJm1f
dW5saW5rZWRDb2RlLT51bmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7
IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYgaW5zdHJ1Y3Rpb25TdHJlYW0gPSBpbnN0cnVjdGlvbnMoKTsKICAgICBmb3IgKGNvbnN0IGF1
dG8mIGluc3RydWN0aW9uIDogaW5zdHJ1Y3Rpb25TdHJlYW0pIHsKICAgICAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKQEAgLTUyOCwxNCArNTQyLDE0IEBA
IGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgTElOSyhP
cENyZWF0ZVByb21pc2UpCiAgICAgICAgIExJTksoT3BDcmVhdGVHZW5lcmF0b3IpCiAKLSAgICAg
ICAgTElOSyhPcEFkZCkKLSAgICAgICAgTElOSyhPcE11bCkKLSAgICAgICAgTElOSyhPcERpdikK
LSAgICAgICAgTElOSyhPcFN1YikKLQotICAgICAgICBMSU5LKE9wTmVnYXRlKQotICAgICAgICBM
SU5LKE9wSW5jKQotICAgICAgICBMSU5LKE9wRGVjKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BBZGQpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJP
RklMRShPcE11bCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wRGl2
KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BTdWIpCisKKyAgICAg
ICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BOZWdhdGUpCisgICAgICAgIExJTktf
V0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wSW5jKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllf
QVJJVEhfUFJPRklMRShPcERlYykKIAogICAgICAgICBMSU5LKE9wSm5lcVB0cikKIApAQCAtNzg5
LDYgKzgwMyw3OCBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb25Db21tb24oVk0mCiAg
ICAgbV9vd25lckVkZ2Uuc2V0KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpj
cmVhdGUodm0sIHRoaXMpKTsKIH0KIAordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2Vk
QmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7CisgICAgc2V0SklU
Q29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8mIGpp
dENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAgICAgICAgIEhh
bmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAgaGFuZGxlci5u
YXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQp
KS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9CisgICAgfQor
CisgICAgUkVMRUFTRV9BU1NFUlQoIW1faml0RGF0YSk7CisgICAgYXV0byBqaXREYXRhID0gbWFr
ZVVuaXF1ZTxKSVREYXRhPigpOworCisgICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wgPSBG
aXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsK
KyAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKSB7CisgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpHbG9iYWxPYmplY3Q6CisgICAgICAgICAgICBqaXREYXRhLT5tX2ppdENvbnN0
YW50UG9vbFtpXSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAg
ICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9ICpzdGF0
aWNfY2FzdDxVbmxpbmtlZENhbGxMaW5rSW5mbyo+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAg
ICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3Mu
YWRkKENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCkpOworICAg
ICAgICAgICAgLy8gT09QUzogZG9uJ3QgaGFyZGNvZGUgdGhlc2UgcmVnaXN0ZXJzIGxpa2UgdGhp
cy4KKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+aW5pdGlhbGl6ZURhdGFJQyh2bSgpLCB1bmxp
bmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAg
ICAgICAgIGppdERhdGEtPm1faml0Q29uc3RhbnRQb29sW2ldID0gY2FsbExpbmtJbmZvOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7CisgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qPihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IGppdERhdGEtPm1fc3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZv
LmFjY2Vzc1R5cGUsIENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7
CisgICAgICAgICAgICBzdHViSW5mby0+aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKHRoaXMsIHVubGlua2VkU3R1YkluZm8pOworICAgICAgICAgICAgaml0RGF0YS0+bV9q
aXRDb25zdGFudFBvb2xbaV0gPSBzdHViSW5mbzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6IHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50
cnkucGF5bG9hZCk7CisgICAgICAgICAgICBqaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbFtpXSA9
IGZ1bmN0aW9uRGVjbChpbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByOiB7CisgICAgICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxv
YWQpOworICAgICAgICAgICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlv
bkV4cHIoaW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9qaXREYXRhKTsKKyAgICAgICAgV1RGOjpzdG9y
ZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgbV9qaXREYXRhID0gV1RGTW92ZShqaXREYXRhKTsKKyAg
ICB9CisKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIEdsb2JhbENvZGU6Cisg
ICAgY2FzZSBNb2R1bGVDb2RlOgorICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAgIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRnVuY3Rp
b25Db2RlOgorICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNl
IGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCisgICAgICAgIC8vIERv
bid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRpb24uCisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkICY9IGNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwoKSkgJiYgREZHOjptaWdodElubGlu
ZUZ1bmN0aW9uKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIENvZGVCbG9jazo6
fkNvZGVCbG9jaygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC0zMDc5LDcgKzMxNjUsNyBA
QCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUo
SklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBKSVQ6
OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMyOTUsMTMgKzMzODEsMTMgQEAg
QmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRjaCAo
cGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZwYy0+
YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVy
biBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2Fz
ZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMp
Lm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1cm4g
JnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAg
cmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAg
ICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEo
dGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMzMxMywxMSArMzM5OSwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJs
b2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNh
c2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0ZT4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAgICAg
ICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVjPigp
Lm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9w
RGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKKyNpbmNsdWRlICJCYXNlbGlu
ZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAi
Q2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSGFzaC5oIgpAQCAtMTU4LDcgKzE1
OSw5IEBAIHB1YmxpYzoKICAgICBNZXRhZGF0YVRhYmxlKiBtZXRhZGF0YVRhYmxlKCkgY29uc3Qg
eyByZXR1cm4gbV9tZXRhZGF0YS5nZXQoKTsgfQogCiAgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVy
cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQorcHJpdmF0ZToKICAgICB2b2lk
IHNldE51bVBhcmFtZXRlcnModW5zaWduZWQgbmV3VmFsdWUpOworcHVibGljOgogCiAgICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9m
QXJndW1lbnRzVG9Ta2lwOyB9CiAKQEAgLTE2Nyw3ICsxNzAsNiBAQCBwdWJsaWM6CiAgICAgdW5z
aWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQogICAgIHVuc2lnbmVk
IG51bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hlY2twb2ludHMo
KSAqIG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKLSAgICB1bnNpZ25lZCogYWRkcmVzc09mTnVt
UGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KICAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KIAogICAgIENvZGVCbG9jayogYWx0ZXJuYXRp
dmUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihtX2FsdGVybmF0aXZl
LmdldCgpKTsgfQpAQCAtMjMyLDE2ICsyMzQsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0
YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJy
ZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRo
ZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJuIHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFu
ZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkK
LSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3Jh
cnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJl
Zy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fbnVtVmFycyk7CkBAIC0yNjYsOCArMjU4
LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGdldElDU3RhdHVzTWFwKElDU3RhdHVzTWFwJiByZXN1
bHQpOwogICAgIAogI2lmIEVOQUJMRShKSVQpCisgICAgLy8gT09QUzogbW92ZSBhcml0aG1ldGlj
IElDcyBhbmQgc3dpdGNoIHRhYmxlcyBvdXQgb2YgaGVyZSwgYW5kIG9udG8gSklUQ29kZS4KICAg
ICBzdHJ1Y3QgSklURGF0YSB7CiAgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRF
RDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgICAg
ICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9zOwogICAgICAgICBCYWc8SklUQWRk
SUM+IG1fYWRkSUNzOwpAQCAtMjgyLDkgKzI3NiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKICAgICAg
ICAgYm9vbCBtX2hhc0NhbGxlZVNhdmVSZWdpc3RlcnMgeyBmYWxzZSB9OwogICAgICAgICBSZWdp
c3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7Ci0gICAgICAgIEpJVENvZGVN
YXAgbV9qaXRDb2RlTWFwOworCisgICAgICAgIEZpeGVkVmVjdG9yPHZvaWQqPiBtX2ppdENvbnN0
YW50UG9vbDsKKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVENvbnN0YW50UG9v
bCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKSVREYXRhLCBtX2ppdENvbnN0YW50UG9vbCk7
IH0KICAgICB9OwogCisgICAgdm9pZCBzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShSZWY8
QmFzZWxpbmVKSVRDb2RlPik7CisKICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRhKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShtX2pp
dERhdGEpKQpAQCAtMjkzLDYgKzI5MSw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgSklURGF0YSYg
ZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mSklURGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1faml0RGF0YSk7IH0KKwogICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5h
cnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQ
cm9maWxlKik7CiAgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7
CkBAIC0zMjIsMTUgKzMyMiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxs
TGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgogICAgIENh
bGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4
KTsKICAgICAKLSAgICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29kZU1hcCYmIGppdENvZGVNYXAp
Ci0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAg
ICAgIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVN
YXApOwotICAgIH0KICAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCkKICAgICB7Ci0g
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJu
IGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXA7CisgICAgICAgIEFTU0VSVChqaXRU
eXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFwOwogICAg
IH0KIAogICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9D
b2RlT3JpZ2luTWFwPiYmKTsKQEAgLTQ3Miw2ICs0NjcsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJp
bmcgbmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9CiAgICAgdW5zaWduZWQg
bnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
YXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9u
dW1QYXJhbWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNlSklUKCkpOwpAQCAtNTcyLDYgKzU2OCw3IEBA
IHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJl
Z2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25z
dGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKHJlZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKGluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNW
ZWN0b3JCdWZmZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0
YW50UmVnaXN0ZXJzKSArIGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5
T2Zmc2V0KCk7IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBp
bmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBu
dW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9
CkBAIC02MDEsNiArNTk4LDExIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9q
aXREYXRhKTsKICAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOwogICAgIH0KKyAgICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5lU3dpdGNoSnVt
cFRhYmxlKGludCB0YWJsZUluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNl
bGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJ
bmRleF07CisgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTd2l0Y2hK
dW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJs
ZSYgdW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5s
aW5rZWRDb2RlLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNjEx
LDYgKzYxMywxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7
CiAgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKICAgICB9CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRj
aEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChqaXRUeXBl
KCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzW3RhYmxlSW5kZXhdOworICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGlu
dCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTc5Nyw2ICs4MDQsNyBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2Vy
UmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJu
ICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRGVi
dWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fZGVi
dWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1C
cmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFr
cG9pbnRzKQpAQCAtODM4LDYgKzg0Niw3IEBAIHB1YmxpYzoKICAgICBtdXRhYmxlIENvbmN1cnJl
bnRKU0xvY2sgbV9sb2NrOwogCiAgICAgYm9vbCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZDsgLy8g
Tm90IGEgYml0ZmllbGQgYmVjYXVzZSB0aGUgSklUIHdhbnRzIHRvIHN0b3JlIHRvIGl0LgorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7IH0K
IAogI2lmIEVOQUJMRShKSVQpCiAgICAgdW5zaWduZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6
IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCkBAIC05MDYsMTEgKzkxNSw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpOyB9CiAKLSAgICBib29s
IGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKLSAgICB7Ci0gICAg
ICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUg
bG9vcHMgdGhleSBydW4uCi0gICAgICAgIHJldHVybiAhbV91bmxpbmtlZENvZGUtPmlzQnVpbHRp
bkZ1bmN0aW9uKCk7Ci0gICAgfQorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6
aW5nRWFybHlSZXR1cm4oKSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bG9vcEhpbnRzQXJlRWxp
Z2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBm
aW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJl
dmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAgcHVi
bGljOgogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwKENvZGVCbG9j
ayogY29kZUJsb2NrKTsKICAgICAKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZSogd3JhcEFuZEFjdGl2YXRlKENvZGVCbG9jayogY29kZUJsb2NrKTsKKworICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZSwgbV9jb2RlQmxvY2spOyB9CiAgICAgCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCShyZXZpc2lvbiAy
ODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2Yo
R2V0QnlJZE1vZGVNZXRhZGF0YQogCiBzdHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVu
Z3RoIHsKICAgICBBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJ
ZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBhcnJheVByb2ZpbGUpOyB9CiB9Owogc3RhdGljX2Fz
c2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoKSA9PSAxMik7CiAKQEAg
LTg4LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5
SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7IC8v
IFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFkYXRh
RGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5zZXRN
b2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1vZGU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNz
LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lubGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NSw2ICszODUsOCBAQCBib29s
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoCiAgICAgcmV0dXJuIGxpbmtlZENv
ZGVJbmxpbmU7CiB9CiAKKy8vIE9PUFM6IE1ha2UgdGhpcyBzdHVmZiB3b3JrIHdpdGggZGF0YSBp
Y3MgdG8gbm90IGFzc3VtZSBpbmxpbmUgYWNjZXNzLgorCiB2b2lkIElubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IHRhcmdldCkKIHsKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRh
SUMoKSkgewpAQCAtNDA0LDkgKzQwNiwxMiBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1
YkFzSnVtcEluQWNjCiB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNz
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQpCiB7CiAgICAgaWYgKGNv
ZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gT09QUzogbWFrZSBzb21lIHZlcnNp
b24gb2YgSW5saW5lQWNjZXNzIGZvciBiYXNlbGluZS4gUGVyaGFwcyBtYWtlIGl0IGRhdGEgZHJp
dmVuLiBPciBwZXJoYXBzIGhhdmUgdGhlIGNvZGUKKyAgICAgICAgLy8gYmUgc2hhcmVkIHNvbWVo
b3cgYmV0d2VlbiBVbmxpbmtlZENvZGVCbG9ja3MuCisKICAgICAgICAgLy8gSWYgaXQgaXMgbm90
IEdldEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQgKGUuZy4gR2V0QnlW
YWwpLgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGlyZWN0IGp1bXAsIGFu
ZCBvbmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2RlUHRyLgotICAgICAg
ICBpZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAgICAgIGlmIChjb2Rl
QmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBzdHViSW5mby5oYXND
b25zdGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29kZVB0ciBpcyBwb2lu
dGluZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMgbWVhbnMgdGhhdCBJ
bmxpbmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAgICAgIC8vIFdlIHJl
d3JpdGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNvZGUgb25jZSwgYW5k
IGNvbnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgogICAgICAgICAgICAg
aWYgKHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09IHN0dWJJbmZvLnNs
b3dQYXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CkBAIC00MjEsNiArNDI2
LDcgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgICAgICAg
ICAgICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5raW5nIHN0dWIgY2FsbCIpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CisKICAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gdGFyZ2V0Owog
ICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24gMjgxODY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0VfT1BF
UkFUT1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7CiAg
ICAgdWludDhfdCBzZWVuTW9kZXMgeyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZlNlZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0YWRh
dGEsIHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc2Vl
bk1vZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAko
cmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTI4NSw2
ICsyODYsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAg
ICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OlB1dFByaXZhdGVOYW1lOgogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRo
aXMsIFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5
cGU6OkluQnlJZDoKQEAgLTQzMCw2ICs0MzIsMjA0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6c2UKICAgICBtX2NhY2hlVHlwZSA9IG5ld0NhY2hlVHlwZTsKIH0KIAor
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1
YkluZm8pCit7CisgICAgYWNjZXNzVHlwZSA9IHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZTsK
KyAgICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8uc3RhcnQ7IC8vIE9PUFM6IGRvIHdlIG5lZWQg
YSBzdGFydCBmb3IgZGF0YSBJQ3M/CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRTdHViSW5m
by5kb25lTG9jYXRpb247CisgICAgc2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5rZWRTdHVi
SW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENhbGxTaXRl
SW5kZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBjb2RlT3JpZ2luID0g
Q29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIG1fY29kZVB0
ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKworICAgIHVzZWRSZWdpc3RlcnMgPSBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgaWYgKGFjY2Vzc1R5cGUgPT0g
QWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKSB7CisgICAgICAgIC8vIEZvciBpdGVyYXRvcl9uZXh0LCB3ZSBjYW4ndCBjbG9i
YmVyIHRoZSBzY3JhdGNoIHJlZ2lzdGVyIGVpdGhlci4KKyAgICAgICAgdXNlZFJlZ2lzdGVycy5h
ZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKyAgICB9CisKKyAgICBzd2l0
Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIG1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25JbnN0YW5jZU9mT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6SW5CeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZh
bE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5m
by5wdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAg
ICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8u
ZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5v
blN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxk
U2V0OgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFBy
aXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAg
c3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5p
c1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1
dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAg
ICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAg
ICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlu
a2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0
QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJp
dmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
U2V0UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQ
cml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
c3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5
R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJ
bmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7
CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRp
ZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
Okluc3RhbmNlT2Y6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAg
ICAgICBwcm90b3R5cGVJc0tub3duT2JqZWN0ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBC
YXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnByb3RvdHlw
ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJh
bmQ6IAorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFz
ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZh
bHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsK
KyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1f
c3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAg
ICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIg
PSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlk
V2l0aFRoaXM6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAg
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAg
ICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0Owor
ICAgICAgICByZWdzLnRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAg
ICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYg
KGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5
UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2Ug
QWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRp
ZmllciA9IGZhbHNlOworICAgICAgICB2YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAg
IGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAg
cmVncy5icmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZv
aWQgU3RydWN0dXJlU3R1YkluZm86OmNoZWNrQ29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJl
dmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
SklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUg
Ik9wdGlvbnMuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKQEAg
LTU2LDYgKzU3LDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRC
eVZhbCwKICAgICBQdXRCeUlkLAogICAgIFB1dEJ5VmFsLAorICAgIFB1dFByaXZhdGVOYW1lLAog
ICAgIEluQnlJZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtNzgsNiAr
ODAsOCBAQCBlbnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CiAgICAgU3RyaW5nTGVuZ3Ro
CiB9OwogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKKwogY2xhc3MgU3RydWN0
dXJlU3R1YkluZm8gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZv
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTk4LDYgKzEwMiw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKKyAgICB2b2lk
IGluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvJik7CisKICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsK
IAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUg
ZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLApAQCAtNDQ3LDYgKzQ1Mywx
OCBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQog
CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHBy
aXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkgfTsKKyAgICBF
Q01BTW9kZSBlY21hTW9kZTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAg
Ly8gT09QUzogRG8gd2UgbmVlZCBzdGFydCBmb3IgZGF0YSBJQ3M/CisgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0OyAvLyBUaGlzIGlzIGVpdGhlciB0aGUg
c3RhcnQgb2YgdGhlIGlubGluZSBJQyBmb3IgKmJ5SWQgY2FjaGVzLiBvciB0aGUgbG9jYXRpb24g
b2YgcGF0Y2hhYmxlIGp1bXAgZm9yICdpbnN0YW5jZW9mJyBjYWNoZXMuCisgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzbG93UGF0aFN0YXJ0TG9jYXRpb247Cit9Owor
CiAjZWxzZQogCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAy
ODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAor
I2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMu
aCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCkBA
IC02Miw2ICs2Myw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xh
c3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGluZUpJVENvZGU7CiBz
dHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29uc3RhbnQgOiBpbnQz
Ml90OwogCkBAIC0xNzUsNiArMTc3LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4ZWRWZWN0
b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBt
X2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBj
b25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgp
OyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIxMCwxNSBAQCBwdWJsaWM6CiAg
ICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVybiBp
bnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBjb25z
dCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigpOwor
ICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9u
c0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1
Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVn
aW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25zdCB7IHJldHVy
biBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51bUNhbGxlZUxvY2Fs
cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5zaWduZWQgbnVt
VmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDYgKzM0NiwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpOwogICAgIH0K
IAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQor
ICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNv
bXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFpc0J1aWx0aW5GdW5j
dGlvbigpOworICAgIH0KIAogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwg
U3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENv
ZGVHZW5lcmF0aW9uTW9kZT4pOwpAQCAtMzk0LDYgKzQxMSw3IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVu
dEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJh
c2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07
CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEwLDYgKzQyOCw5IEBAIHBy
aXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0
aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xp
dmVuZXNzOwogCisgICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFjZSB0byBzdG9yZSB0aGlz
IHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9m
aWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2ZpbGVz
OwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9m
aWxlOwpAQCAtNDU1LDYgKzQ3NiwyOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4g
b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAgIGlu
dCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMpOwor
ICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAg
fQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAg
IHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAg
IG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQ
cm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fdW5hcnlBcml0aFBy
b2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV91bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKFVuYXJ5
QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJu
IG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFy
eUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tp
XTsgfQogCiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1h
cDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2
Nyw4IEBAIHB1YmxpYzoKICAgICBib29sIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMo
KSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bj
b2RlcygpOyB9CiAgICAgYm9vbCBoYXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZUJsb2NrLT5oYXNDaGVja3BvaW50cygpOyB9CiAgICAgYm9vbCBoYXNUYWlsQ2FsbHMoKSBjb25z
dCB7IHJldHVybiBtX2NvZGVCbG9jay0+aGFzVGFpbENhbGxzKCk7IH0KKyAgICB1bnNpZ25lZCBh
ZGRCaW5hcnlBcml0aFByb2ZpbGUoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJp
dGhQcm9maWxlKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpIHsgcmV0
dXJuIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpOyB9CiAKICAgICAvLyBVcGRh
dGluZyBVbmxpbmtlZENvZGVCbG9jay4KICAgICB2b2lkIHNldEhhc0NoZWNrcG9pbnRzKCkgeyBt
X2NvZGVCbG9jay0+c2V0SGFzQ2hlY2twb2ludHMoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
TWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVubGlua2VkTWV0YWRhdGFUYWJsZSk7CiAg
ICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZT4KKyAgICB1aW50cHRyX3Qgb2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYgb3Bjb2RlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1faXNGaW5hbGl6ZWQpOworICAgICAgICB1aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQg
PSBtX2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bjb2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRU
YWJsZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07CisgICAgICAgIHJldHVybiBiYXNlVHlwZU9mZnNl
dCArIHNpemVvZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFkYXRh
SUQ7CisgICAgfQorCiBwcml2YXRlOgogICAgIGVudW0gRW1wdHlUYWcgeyBFbXB0eSB9OwogCkBA
IC0xMDEsNiArMTA5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJs
ZVNpemU7CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVz
aW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNyArNDAsNiBAQCB0ZW1wbGF0ZTx1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHNBcmd1bWVuCiBz
dHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBu
dW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51
bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVl
UHJvZmlsZUJhc2UoKQpAQCAtMTM0LDcgKzEzMyw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNl
IHsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247CiAgICAgfQotICAgIAor
CiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNrZXRzW3RvdGFsTnVtYmVyT2ZCdWNrZXRzXTsKIAog
ICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbiB7IFNwZWNOb25lIH07CkBAIC0xNTYsNiAr
MTU1LDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldAogCiBzdHJ1
Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tl
dHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgpIDogVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9m
QnVja2V0czwwPigpIHsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEJ1Y2tl
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0c1swXSk7
IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMg
VmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODE4NjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU5OCw3ICsxNTk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRVbmFyeQogICAgICAgICBlbWl0VW5hcnlPcDxPcE5vdD4oZHN0LCBz
cmMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAgT3BOZWdh
dGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUpOworICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0
aGlzLCBkc3QsIHNyYywgdHlwZSwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIG9wX2JpdG5vdDoKICAgICAgICAgZW1pdFVuYXJ5
T3A8T3BCaXRub3Q+KGRzdCwgc3JjKTsKQEAgLTE2OTYsMTMgKzE2OTYsMTMgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUeXBlTwogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEluYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BJbmM6OmVtaXQo
dGhpcywgc3JjRHN0KTsKKyAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2Nr
LT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7
Ci0gICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcERlYzo6ZW1pdCh0aGlzLCBz
cmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4g
c3JjRHN0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IFJlZ2lzdGVySUQqPgogICAgICAgICBlbWl0QmluYXJ5T3AoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBzcmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwg
dHlwZXMpOworICAgICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMy
LCB0eXBlcywgbV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAg
ICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODE4
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODksNyArODg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBp
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAg
ICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAg
ICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk2LDcgKzg5
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAKICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0g
ICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5v
LCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVT
aHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZs
ZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lv
biAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICszOTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMg
PSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4s
IGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAg
bV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUs
IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2VkUmVnaXN0ZXJzLAogICAgICAgICBKU1Zh
bHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShw
cm9wZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwogICAg
IGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKIApAQCAtMTQ3NDcsNyAr
MTQ3NDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQ
UlJlZyBzY29wZVJlZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIG1faml0LmNv
ZGVCbG9jaygpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFp
bFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CiAgICAg
bm9SZXN1bHQobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMxNyw3
ICs0MzE3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpID8gcGFyYW1zLmdwU2NyYXRjaCgwKSA6
IEludmFsaWRHUFJSZWc7CiAKICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVFB1
dEJ5VmFsR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2so
KSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFj
Y2Vzc1R5cGU6OlB1dEJ5VmFsLAorICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklU
VHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5
cGU6OlB1dFByaXZhdGVOYW1lLAogICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJl
Z2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIp
LCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKIAog
ICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1
ZTsKQEAgLTEwMzU1LDcgKzEwMzU1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZv
KGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENh
bGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAg
IGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwg
R1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpO
bywgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEp
OwogICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRh
KS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwNjk4LDcg
KzEwNjk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwog
ICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86
OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7
CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAg
ICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0p
OwpAQCAtMTA5NzksNyArMTA5NzksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0
YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0lu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAg
ICAgICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01l
dGFkYXRhLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
TWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0MiwyOCBAQCBj
bGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJldHVybiBpZiBlbXB0
eT8KIAotICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcykKKyAgICAgICAg
ZGVmIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQorICAgICAg
ICAgICAgZmllbGROYW1lcy5tYXAgZG8gfGZpZWxkTmFtZXwKKyAgICAgICAgICAgICAgICAiI3tw
cmVmaXh9c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2Zp
ZWxkTmFtZVsxLi5dfSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV8je2Zp
ZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKKyAgICAgICAgZW5kCisK
KyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGZpZWxkTmFtZXMpCiAg
ICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAgICAgICBp
ZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9u
IHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsi
CisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMo
cHJlZml4ICsgJyAgICAnLCB0eXBlLCBmaWVsZE5hbWVzKX1cbiN7cHJlZml4fX07IgogICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19z
fSBtXyN7ZmllbGQudG9fc307IgorICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVs
ZC50b19zCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVzaChmaWVsZE5hbWUpCisg
ICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07
IgogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAg
ICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmll
bGRzKQorICAgICAgICBmaWVsZE5hbWVzID0gW10KKyAgICAgICAgcHJlZml4ID0gIiAgICAgICAg
IgorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKHByZWZpeCwgQGZpZWxkcywgZmllbGRO
YW1lcykKKyAgICAgICAgZmllbGRzID0gZmllbGRzICsgIlxuIiArIGdlbmVyYXRlT2Zmc2V0T2ZG
dW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQogCiAgICAgICAgIGluaXRzID0gbmlsCiAgICAg
ICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlz
aW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk4LDggKzY5OCwxMyBAQCB2b2lkIEFzc2VtYmx5SGVs
cGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzCiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0Vmly
dHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0lu
Zm8qIGluZm8pCiB7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdU
Mik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1Qz
KTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBpbmZv
KTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3Zp
bmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCit7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0gbmVh
ckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTcxOCw2ICsxNzE4LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRW
aXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9p
ZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJ
bmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2
b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgi
CisKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKKyNpbmNs
dWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSklUQWRkSUMq
IE1hdGhJQ0hvbGRlcjo6YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUpIHsgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRNdWxJQyogTWF0
aElDSG9sZGVyOjphZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkg
eyByZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVFN1YklDKiBNYXRoSUNI
b2xkZXI6OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJl
dHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUTmVnSUMqIE1hdGhJQ0hvbGRl
cjo6YWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4g
bV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKwordm9pZCBNYXRoSUNIb2xkZXI6OmFkb3B0
TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKQoreworICAgIG1fYWRkSUNzID0gV1RGTW92ZShv
dGhlci5tX2FkZElDcyk7CisgICAgbV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsK
KyAgICBtX25lZ0lDcyA9IFdURk1vdmUob3RoZXIubV9uZWdJQ3MpOworICAgIG1fc3ViSUNzID0g
V1RGTW92ZShvdGhlci5tX3N1YklDcyk7Cit9CisKK0Jhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVK
SVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiB3aXRoQXJpdHlDaGVjaykKKyAgICA6IERpcmVjdEpJVENvZGUoV1RGTW92ZShjb2RlKSwgd2l0
aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICwgTWF0aElDSG9sZGVyKCkK
K3sgfQorCitCYXNlbGluZUpJVENvZGU6On5CYXNlbGluZUpJVENvZGUoKQoreworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVK
SVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGlu
ZUpJVENvZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jh
c2VsaW5lSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUg
IkpJVENvZGVNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vY2xhc3MgSklUQWRkSUM7Cisv
L2NsYXNzIEpJVE11bElDOworLy9jbGFzcyBKSVRTdWJJQzsKKy8vY2xhc3MgSklUTmVnSUM7Citj
bGFzcyBCaW5hcnlBcml0aFByb2ZpbGU7CitjbGFzcyBVbmFyeUFyaXRoUHJvZmlsZTsKK3N0cnVj
dCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFNpbXBsZUp1bXBUYWJsZTsKK3N0
cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKK2NsYXNzIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6Cisg
ICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcik7CisgICAgSklUQWRkSUMq
IGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVE11bElDKiBhZGRKSVRN
dWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQ
cm9maWxlKik7CisKKyAgICAvKgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5
cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwg
SklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVEFkZElDKiBhZGRNYXRoSUMo
QmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxl
KTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0
b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6
dHlwZT4KKyAgICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxl
KSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklU
U3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFk
ZEpJVFN1YklDKHByb2ZpbGUpOyB9CisgICAgKi8KKworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRk
SUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5l
Z0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKworY2xhc3Mg
SklUQ29uc3RhbnRQb29sIHsKK3B1YmxpYzoKKyAgICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVk
OworCisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIEdsb2JhbE9iamVj
dCwKKyAgICAgICAgQ2FsbExpbmtJbmZvLAorICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAg
ICAgICAgRnVuY3Rpb25EZWNsLAorICAgICAgICBGdW5jdGlvbkV4cHIsCisgICAgfTsKKworICAg
IHN0cnVjdCBWYWx1ZSB7CisgICAgICAgIC8vIE9PUFM6IE1ha2UgdGhlIHBvaW50ZXIgcGFja2Vk
LgorICAgICAgICBUeXBlIHR5cGU7CisgICAgICAgIHZvaWQqIHBheWxvYWQ7CisgICAgfTsKKwor
ICAgIEpJVENvbnN0YW50UG9vbCgpID0gZGVmYXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2woSklU
Q29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2wmIG9wZXJhdG9y
PShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworCisgICAgQ29uc3RhbnQgYWRkKFR5cGUg
dHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIpCisgICAgeworICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSBtX2NvbnN0YW50cy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChW
YWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50cy5zaXplKCk7IH0K
KyAgICBWYWx1ZSBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbaV07IH0K
KworcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fY29uc3RhbnRzOworfTsKKworCitjbGFz
cyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hv
bGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRh
Zz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayk7CisgICAgfkJh
c2VsaW5lSklUQ29kZSgpIG92ZXJyaWRlOworCisgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZv
PiBtX3VubGlua2VkQ2FsbHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJ
bmZvczsgLy8gT09QUzogbWFrZSBzdXJlIHdlIHZpc2l0IHRoZXNlIHNvbWVob3cuIE9yIGFzc2Vy
dCB3ZSBkb24ndCBoYXZlIHRvLCBzaW5jZSB0aGV5J3JlIHZpcnR1YWwgY2FsbHMuCisgICAgQmFn
PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgRml4
ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRW
ZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisgICAgSklU
Q29kZU1hcCBtX2ppdENvZGVNYXA7CisgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29s
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDcgKzUwLDcgQEAgc2l6ZV90IEJhc2VsaW5lSklUUGxhbjo6Y29kZVNpemUoKSBjb25zdAog
CiBDb21waWxhdGlvblJlc3VsdCBCYXNlbGluZUpJVFBsYW46OmZpbmFsaXplKCkKIHsKLSAgICBD
b21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRocmVhZCgpOwor
ICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFk
KG1fY29kZUJsb2NrKTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRp
b25GYWlsZWQ6CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxh
eUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsMTYgKzQzLDYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9s
bwogICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CiB9CiAKLXZvaWQgQ0NhbGxIZWxw
ZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1Zh
bHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQotewotICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihT
aGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0
LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Ci0gICAg
c3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRP
RihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKLSAgICBzdG9yZVB0cihzY29w
ZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQ
YWNrZXQsIHNjb3BlKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIGNvZGVCbG9jaykpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4
LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOwotfQotCiB2b2lkIENDYWxsSGVscGVyczo6
ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQ
UlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAgIFNoYWRvd0No
aWNrZW4qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCk7CkBAIC03Miw2ICs2Miwy
OCBAQCB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhCiAgICAgc3RvcmVQ
dHIoc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDFOb25BcmdHUFIpKTsKIH0KIAorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQsIGZyYW1lKSkpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNU
X09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOworICAgIHN0b3JlVmFs
dWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7CisgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBz
Y29wZSkpKTsKKyAgICBzdG9yZVB0cihjb2RlQmxvY2ssIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7CisgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRv
d1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJ
bmRleCkpKTsKK30KKwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2Nv
cGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgp
Cit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhp
c1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOworfQorCit2b2lkIENDYWxs
SGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwg
SlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0
ZUluZGV4KTsKK30KKwogdm9pZCBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gd2hlcmUsIFNjb3BlZExhbWJkYTx2b2lk
KENDYWxsSGVscGVycyYpPiBlbWl0Q29kZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pCiB7CiAg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0Nh
bGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2Fs
bEhlbHBlcnMuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODQwLDcgKzg0MCwxNCBAQCBwdWJs
aWM6CiAgICAgLy8gVGhlc2Ugb3BlcmF0aW9ucyBjbG9iYmVyIGFsbCB2b2xhdGlsZSByZWdpc3Rl
cnMuIFRoZXkgYXNzdW1lIHRoYXQgdGhlcmUgaXMgcm9vbSBvbiB0aGUgdG9wIG9mCiAgICAgLy8g
c3RhY2sgdG8gbWFyc2hhbGwgY2FsbCBhcmd1bWVudHMuCiAgICAgdm9pZCBsb2dTaGFkb3dDaGlj
a2VuUHJvbG9ndWVQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxLCBH
UFJSZWcgc2NvcGUpOwotICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVn
IHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJs
b2NrKiwgQ2FsbFNpdGVJbmRleCk7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IENvZGVCbG9ja1R5cGU+CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwo
R1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwg
Q29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7Citw
dWJsaWM6CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93
UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRy
IGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKyAgICB2b2lkIGxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRo
aXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGVJbmRleCk7CisKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEgcG9pbnRlciB0byB0aGUgUGFj
a2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQuCiAgICAgdm9pZCBlbnN1cmVT
aGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0
Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkocmV2aXNpb24gMjgx
ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiB2
b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCiB7CisgICAgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvZGVCbG9j
ay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0
YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBy
ZWdpc3RlclNhdmVMb2NhdGlvbnMpCit7CiAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lz
dGVycyB7IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB9OwotICAgIGNvbnN0
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMgPSBjb2RlQmxvY2st
PmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVn
aXN0ZXJTYXZlTG9jYXRpb25zLT5zaXplKCk7ICsraSkgewogICAgICAgICBSZWdpc3RlckF0T2Zm
c2V0IGVudHJ5IHsgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChpKSB9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkocmV2aXNp
b24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICBHUFJS
ZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZhbGlkR1BSUmVnIH07CiAKICAgICB2b2lkIHNldHVw
Q2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldHVwQ2FsbGVlU2F2
ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCopOwogI2VuZGlmCiAgICAgVmFs
dWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
cmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJbnRl
cmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51bGxw
dHIpCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMo
Y29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwg
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6SklU
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50
cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAgIG1f
cHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9jayA9
IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTkw
LDggKzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNraXBP
cHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6
ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9j
b2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lwT3B0
aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4
ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zy
b21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVu
dHJ5RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMTggQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0
ZShXYXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29s
dXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRv
U2V0KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJU
b1NldCkKIHsKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHBvaW50
ZXJUb1NldCwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElz
SW52YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHJlc29s
dmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKQotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJSZWFkT25seVdhdGNocG9p
bnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwor
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNj
cmF0Y2hHUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09G
RlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2ludCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNo
R1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQpAQCAtMTI5LDcgKzEzNSw3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIEp1
bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CkBAIC0xODEsMjEgKzE4Nyw0MSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjCiAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9s
b2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7CisgICAgbG9hZFB0
cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0
YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBicmFuY2hUZXN0UHRyKFpl
cm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURh
dGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgcmVzdWx0KTsK
KyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVu
Y3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpKSwgcmVzdWx0
KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCByZXN1bHQpOworCisgICAgbG9h
ZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6b2Zmc2V0T2ZD
b2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlc3Vs
dCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogewogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAg
ZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgICAgIGRhdGFM
b2coIkNvbXBpbGluZyAiLCAqbV9wcm9maWxlZENvZGVCbG9jaywgIlxuIik7CiAgICAgCiAgICAg
aml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICBqaXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgp
OwogICAgIAotICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKTsKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLnNpemUoKTsKKyAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0g
bV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogCiAgICAgbV9jYWxs
TGlua0luZm9JbmRleCA9IDA7CiAKLSAgICBWTSYgdm0gPSBtX2NvZGVCbG9jay0+dm0oKTsKICAg
ICBCeXRlY29kZUluZGV4IHN0YXJ0Qnl0ZWNvZGVJbmRleCgwKTsKKworICAgIC8vIE9PUFM6IE1h
eWJlIG9ubHkgZG8gdGhpcyBpZiB3ZSBkaXNhYmxlIHNoYXJpbmcgc29tZWhvdz8KKyAgICAvKgor
ICAgIFZNJiB2bSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnZtKCk7CiAgICAgaWYgKG1fbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2Rl
QmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9j
az4odm0pKSkgewogICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBi
ZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KICAgICAg
ICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4g
dGhlIExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8KQEAgLTIzNiw2ICsyNjIsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CisgICAgKi8KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsK
ICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4LDggKzMwNSw4IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9i
ZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bj
b2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIs
IGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNTI3LDcgKzU1NCw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNv
ZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
YXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGlu
ZyBzbG93IGNvZGUgZm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcp
ZGVidWdPZmZzZXQoKSk7CkBAIC01NDUsOCArNTcyLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNl
bGluZUpJVEV4ZWN1dGlvbigpKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2Jl
OjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bj
b2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNjc0LDU1ICs3MDEsNTYgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCit2b2lkIEpJVDo6ZW1p
dE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKQoreworICAgIGxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgp
KSwgc19tZXRhZGF0YUdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
Q29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFu
dHNHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpCit7CisgICAg
QmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6Omxs
aW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCiB2b2lkIEpJVDo6Y29tcGls
ZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7
Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0
eUxldmVsKCk7CisgICAgLy8gT09QUzogTWF5YmUgdGhpcyBzaG91bGQgYmUgZG9uZSBvbiB1bmxp
bmtlZCBjb2RlIGJsb2NrPworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9m
aWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewog
ICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0g
ZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAg
ICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgog
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXpl
ZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7
CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKG1f
Y29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7Ci0gICAgY2FzZSBHbG9iYWxDb2RlOgotICAgIGNhc2Ug
TW9kdWxlQ29kZToKLSAgICBjYXNlIEV2YWxDb2RlOgotICAgICAgICBtX2NvZGVCbG9jay0+bV9z
aG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG
dW5jdGlvbkNvZGU6Ci0gICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8g
ZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KLSAgICAgICAg
Ly8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KLSAgICAgICAgbV9jb2RlQmxvY2st
Pm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShsZXZlbCkgJiYgREZHOjptaWdo
dElubGluZUZ1bmN0aW9uKG1fY29kZUJsb2NrKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0g
ICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8
IG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7
Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7
Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9z
d2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9j
ay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2Nv
ZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxp
bmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkg
eworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRj
aEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVj
dG9yPFNpbXBsZUp1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5u
dW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygp
KTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkg
fHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJh
c2VsaW5lRm9yUHJvZmlsZXIoKSkpKQotICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlx
dWU8SklURGlzYXNzZW1ibGVyPihtX2NvZGVCbG9jayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYg
T3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpKSkgeworICAgICAgICAv
LyBPT1BTOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBvZmYgdW5saW5rZWQgY29kZSBibG9jaworICAg
ICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2Zp
bGVkQ29kZUJsb2NrKTsKKyAgICB9CiAgICAgaWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNv
ZGVQcm9maWxlcikpIHsKKyAgICAgICAgLy8gT09QUzogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1i
bGVyIG9mZiB1bmxpbmtlZCBjb2RlIGJsb2NrCiAgICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9w
dFJlZigKICAgICAgICAgICAgIG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAg
ICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9j
b2RlQmxvY2spLAorICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+
ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fcHJvZmlsZWRDb2RlQmxvY2spLAogICAgICAgICAgICAgICAg
IFByb2ZpbGVyOjpCYXNlbGluZSkpOwotICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxl
ZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7Cisg
ICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXIsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBt
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4o
Qnl0ZWNvZGVJbmRleCgwKSkpOwpAQCAtNzQyLDExICs3NzAsMTIgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5j
dGlvblByb2xvZ3VlKCk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2Nr
LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1Rv
RnJhbWVJblByb2xvZ3VlKCk7CiAKICAgICBMYWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAg
aW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3Rlcik7CisgICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1
bnNpZ25lZCBtYXhGcmFtZVNpemUgPSAtZnJhbWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihmcmFtZVRvcE9mZnNldCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAg
SnVtcExpc3Qgc3RhY2tPdmVyZmxvdzsKQEAgLTc1NywxNiArNzg2LDIwIEBAIHZvaWQgSklUOjpj
b21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVt
aXRTYXZlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3Rl
ckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAg
ZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVN
ZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOwogCi0gICAgaWYgKG1fY29kZUJsb2Nr
LT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgeworICAgIGlmIChtX3VubGlua2VkQ29kZUJs
b2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0
ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQ
cm9maWxpbmcoKSAmJiAoIW1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBt
X3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBy
ZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zm
c2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46
Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29u
c3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAo
dG8KICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9u
J3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAg
ICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAg
ICAgICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFh
cmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
aW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3Vt
ZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKQEAgLTc3NywxMiArODEwLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhv
dXRGaW5hbGl6aW4KICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdp
c3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRy
ZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9y
QXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZh
bHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJv
ZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2Rl
Ojppc0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJ
VENvZGU6OmlzSklUKG1fcHJvZmlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYg
KFVOTElLRUxZKHNpemVNYXJrZXIpKQogICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+
bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MzIsMjcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNv
ZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQz
Ml90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9w
ZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7
CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJh
dGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVt
YmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2UgbmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAg
ICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMg
IT0gMTsKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYm
IHJlcXVpcmVzQXJpdHlGaXh1cCkgeworICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91
bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlG
aXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hlY2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgo
VHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsK
KwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAg
ICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0
b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZT
aG91bGRBbHdheXNCZUlubGluZWQoKSkpOwogCiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAg
ICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2st
Pm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAg
ICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSks
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVy
YXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hl
Y2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYg
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8o
YmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04MzksNyArODc1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZD
b2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0o
bGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsK
IAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlu
a0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5l
SklULCBlZmZvcnQpKTsKKyAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1
ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fdW5saW5rZWRDb2RlQmxvY2ssIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAg
LTg1OCw4ICs4OTQsOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIHN3aXRjaCAocmVjb3Jk
LnR5cGUpIHsKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAg
Y2FzZSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcjogewotICAgICAgICAgICAgY29uc3QgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hK
dW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZh
dWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0
ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsg
KytqKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5t
X2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEsOCArOTA3LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAg
ICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAg
ICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJp
bmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVm
YXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2Vk
VGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMoKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNoT2Zmc2V0OwpAQCAtOTA2LDMyICs5NDIsMzUgQEAg
dm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJv
bSwgcmVjb3JkLmNhbGxlZSk7CiAgICAgfQogCi0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9n
ZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlW
YWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dp
dGhUaGlzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlk
cywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBw
YXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hC
dWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZl
cik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0g
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5h
bGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7Cisg
ICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBm
b3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0
clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+
ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihn
ZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRo
U3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJU
YWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFs
aXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBm
aW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJ
ZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2Rl
bEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3Mo
bV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2Vz
KTsKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25J
bmZvKSB7Ci0gICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2Fs
bExpbmtJbmZvOwotICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5z
bG93UGF0aFN0YXJ0KSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxp
bmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlu
a0luZm87CisgICAgICAgIGluZm8uZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9
CiAKLSAgICB7Ci0gICAgICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQg
PCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmICht
X2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBqaXRDb2Rl
TWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAoaml0Q29kZU1h
cEJ1aWxkZXIuZmluYWxpemUoKSk7CisgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1
aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zm
c2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgIGlmICht
X2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKKyAgICAgICAgICAgIGppdENvZGVNYXBC
dWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAg
ICB9CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpKSB7CkBA
IC05NDAsMjYgKzk3OSwzNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgfQogCiAgICAgaWYgKFVO
TElLRUxZKG1fY29tcGlsYXRpb24pKSB7CisgICAgICAgIC8vIE9PUFM6IG1ha2UgYnl0ZWNvZGUg
cHJvZmlsZXIga25vdyBhYm91dCB1bmxpbmtlZCBDQj8KICAgICAgICAgaWYgKE9wdGlvbnM6OmRp
c2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKQogICAgICAgICAgICAgbV9kaXNhc3NlbWJs
ZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21waWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwot
ICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29k
ZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CisgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9maWxlZENvZGVCbG9jaywgKm1fY29tcGlsYXRpb24p
OwogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1h
cHBpbmcoKSkKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0Nv
ZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1
ZmZlcik7CiAgICAgCisgICAgLy8gT09QUzogTWFrZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0
aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBVbmxpbmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVm
ZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwg
dG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0
b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigq
bmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShy
ZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxs
cyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxM
aW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+
bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1vdmUobV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAg
bV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxl
cyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBq
aXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOworICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNz
KG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2RlLT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9j
b25zdGFudFBvb2wpOwogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBk
YXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29k
ZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCks
IHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAg
ICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1f
dW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50
YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIo
KSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQor
Q29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsK
IApAQCAtOTY4LDI1ICsxMDE4LDIxIEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVP
bk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRh
c2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2Rl
QmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIs
IENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygp
OyArK2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhj
ZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQz
MzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2Rl
TWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9CisgICAgLy8gT09QUzogRG9uJ3QgdGhpbmsgdGhp
cyBzaHJpbmsgaXMgcmVhbGx5IGRvaW5nIGFueXRoaW5nIGFueW1vcmUuIFZlcmlmeS4KKyAgICAv
L3sKKyAgICAvLyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xv
Y2spOworICAgIC8vICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9j
azo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CisgICAgLy99CiAKKyAgICAvLyBPT1BTOiBtX3Bj
VG9Db2RlT3JpZ2luTWFwIHNob3VsZCBsaXZlIG9uIEJhc2VsaW5lSklUQ29kZSBmb3IgYmFzZWxp
bmUgY29kZWJsb2Nrcy4KICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkKLSAgICAgICAgbV9j
b2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1h
cCkpOworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChX
VEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKIAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0
ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+YWRkKAogICAgICAgICBzdGF0aWNfY2Fz
dDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgpKSAvCi0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJs
ZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOworICAgICAgICBzdGF0aWNfY2Fz
dDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0g
ICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwor
ICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJl
bGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0K
QEAgLTk5OCwxMSArMTA0NCwxMSBAQCBzaXplX3QgSklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAg
cmV0dXJuIG1fbGlua0J1ZmZlci0+c2l6ZSgpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6
OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9y
ZUNvbXBpbGUoKTsKICAgICBjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7
Ci0gICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXpl
T25NYWluVGhyZWFkKGNvZGVCbG9jayk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4
Y2VwdGlvbkhhbmRsZXJzKCkKQEAgLTEwNDIsMTggKzEwODgsMjggQEAgdm9pZCBKSVQ6OmRvTWFp
blRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwogICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2co
KS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQcmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlv
bi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlu
a2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNv
ZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJl
Z2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJPZmZzZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2Nh
bHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1p
bnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNp
Z25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sK
KyAgICByZXR1cm4gZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2Rl
QmxvY2soKSk7Cit9CisKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENv
ZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitp
bnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7Cisg
ICAgcmV0dXJuIHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJs
b2NrKCkpOworfQorCiBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVT
dGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2Rl
ZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNT
QUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwg
bm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGlj
X2Nhc3Q8aW50PihhY3R1YWwpKTsKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1
ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgpAQCAtNDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1h
dGhJQy5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJK
U0ludGVyZmFjZUpJVC5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9D
b2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0
Zi9VbmlxdWVSZWYuaD4KQEAgLTE0OSwxNCArMTUxLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyAg
ICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OwogICAgIH07
CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRy
LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAg
IGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7
CisgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VK
SVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmll
bmQgY2xhc3MgSklUU3R1YkNhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRUaHVua3M7CkBA
IC0xNzEsNiArMTczLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJl
c3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRj
aGVkIG9mZnNldC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVm
YXVsdE9mZnNldCA9IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7
CisKICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgw
KSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTE3OCwxNyArMTgyLDE5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAog
ICAgICAgICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRp
b25FZmZvcnQpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVh
ZCgpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2Rl
QmxvY2sqKTsKICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9p
ZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAg
ICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVm
Zm9ydCk7CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zm
c2V0KS5wcml2YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAorICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJs
b2NrKik7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29k
ZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlu
a2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KENvZGVCbG9jayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFw
PENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKQEAgLTE5OSw3ICsyMDUsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7
CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKICAgICAgICAgdm9pZCBs
aW5rKCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBp
bGF0aW9uRWZmb3J0KTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUo
Q29kZUJsb2NrKiwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCiAgICAgICAgIC8vIEFkZCBhIGNh
bGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAg
ICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5j
dGlvbikKQEAgLTIyMyw2ICsyMjksMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNl
bmRpZgogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9p
ZCBsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BS
UmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZv
aWQgbG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BS
UmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZv
aWQgbG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJS
ZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5
dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlLCBjb25zdCBC
eXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5
dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5
dGVjb2RlPgorICAgICAgICB2b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25z
dCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICBwdWJsaWM6CisgICAg
ICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7CisgICAg
ICAgIHZvaWQgbG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsK
KworICAgICAgICB2b2lkIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcg
cmVzdWx0ID0gcmVnVDApOworCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1w
VG9IYW5kbGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBl
bmQoanVtcFRvSGFuZGxlcik7CkBAIC0yNTgsMTYgKzI5MCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBv
cF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAg
ICAgICAgICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6
Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZv
aWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAg
ICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJ
RCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJh
cmdzCiAgICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mg
fHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAg
ICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7Cisg
ICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLSAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxs
TGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIGJvb2wgY29t
cGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCk7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBP
cCYpOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtMjg3LDE0ICszMTks
MTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0
dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9k
ZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0
ZUJhcnJpZXIoSlNDZWxsKiBvd25lcik7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihH
UFJSZWcgb3duZXIpOwogCiAgICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0
byBwcm9maWxlIGlzIGluIHJlZ1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAg
ICAgICAgLy8gc2NyYXRjaC4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKLSAgICAgICAgdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShNZXRhZGF0YSYsIEdQUlJlZyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7Cisg
ICAgICAgIC8vdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJl
Zyk7CisgICAgICAgIC8vdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYs
IEpTVmFsdWVSZWdzKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEdQUlJlZyk7CisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Y29uc3QgQnl0ZWNvZGUmLCBKU1ZhbHVlUmVncyk7CiAjZWxzZQogICAgICAgICB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1l
dGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOwpAQCAtMzA3LDYgKzM0MCwxMCBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3Rl
cklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAgICAg
ICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQ
UiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7Cisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxH
UFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29u
c3QgQnl0ZWNvZGUmLCBwdHJkaWZmX3QsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBz
Y3JhdGNoR1BSKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNN
QU1vZGUgZWNtYU1vZGUoT3ApOwpAQCAtNTkyLDcgKzYyOSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAg
LTYyNiwxNCArNjYyLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdo
dFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2
YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFz
UHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZv
aWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAg
ICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KTsKLSAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7CisgICAg
ICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5
cGUsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1
Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjQ1LDcgKzY4MSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5v
dGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUo
R1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hw
b2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFy
aWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1
ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKTsKQEAgLTY1NCw2ICs2OTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lk
IGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdp
c3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAg
ICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJv
b2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC02OTUsMjYgKzcz
Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUg
PT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNv
bHZlVHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9HRVRf
RlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNv
bHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShE
RUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9GUk9N
X1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBj
aGFyKiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lz
VXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAgICB7
Ci0gICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0
byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2ZWRD
bG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2
ZV9zY29wZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xv
c3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNkZWZp
bmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZl
X3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9S
RVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNM
QVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5
cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYs
IHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0
ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29u
c3QgY2hhciogdGh1bmtOYW1lKTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0
aHlHZW5lcmF0b3IoVk0mKTsKQEAgLTc1OSwxMCArNzc4LDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJv
ZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4K
LSAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
ZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8
RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6
OkNhbGw+CkBAIC04MjAsMjAgKzgzOSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIw
LCB0YXJnZXQub2Zmc2V0KSk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFp
dHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4u
IGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5
cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVz
dWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAg
ICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBl
bmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAg
ICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhh
c1Jlc3VsdCwgdm9pZD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRh
JiBtZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3Mu
Li4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3Mu
Li4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVj
dENhbGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxl
KG1ldGFkYXRhLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCBy
ZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE4
LDI1ICs5MzcsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0K
LSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVP
cHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkg
eyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNh
bkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGlt
aXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNl
IG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAg
ICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAg
Ym9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisg
ICAgICAgIHZvaWQgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3Rl
cnMoKTsKKworICAgICAgICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAg
ICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wg
Y29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQg
dG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQg
dG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0
aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRo
ZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAg
ICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3Bp
ZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVy
cHJldGVyOwogCkBAIC05NjMsOSArOTc3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJl
Y29yZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4g
bV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJp
dGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9l
eGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENh
bGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTk5OSwx
MSArMTAxMCwyNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBJbnN0
cnVjdGlvbiosIFVuaXF1ZVJlZjxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+PiBtX2luc3RydWN0aW9u
VG9NYXRoSUNHZW5lcmF0aW9uU3RhdGU7CiAKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVk
OwotICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wg
bV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleDsKIAotICAgICAgICBSZWZQdHI8RGlyZWN0SklUQ29kZT4gbV9qaXRD
b2RlOworICAgICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRDb2RlQmxvY2sgeyBudWxscHRyIH07
CisgICAgICAgIFVubGlua2VkQ29kZUJsb2NrKiBtX3VubGlua2VkQ29kZUJsb2NrIHsgbnVsbHB0
ciB9OworCisgICAgICAgIE1hdGhJQ0hvbGRlciBtX21hdGhJQ3M7CisgICAgICAgIFJlZlB0cjxC
YXNlbGluZUpJVENvZGU+IG1faml0Q29kZTsKKworICAgICAgICBKSVRDb25zdGFudFBvb2wgbV9j
b25zdGFudFBvb2w7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxP
YmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9Owor
ICAgICAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICAg
ICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAgICAgICAgQmFnPFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgICAgIEZp
eGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBG
aXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKwor
ICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX21ldGFkYXRhR1BSID0gTExJbnQ6OlJl
Z2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUjsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc19jb25zdGFudHNHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUjsKKworICAgICAgICBz
dHJ1Y3QgTm90QUNvZGVCbG9jayB7IH0gbV9jb2RlQmxvY2s7CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
Yy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewogICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCBhcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
YXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIx
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmVnVDEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJl
Z1QyLCByZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVn
VDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICszNzUsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsK
ICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklUOjplbWl0Qmlu
YXJ5RG91YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyogbmVnYXRl
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBVbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPnVuYXJ5QXJp
dGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubV9wcm9maWxlSW5k
ZXgpOworICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJQyhhcml0
aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0
aW9uLCBuZWdhdGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxs
IHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBC
aWdJbnQKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdh
dGUpOwpAQCAtODk5LDggKzkwNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3Qg
SW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJ
VEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BBZGQ+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVEFkZElDKiBhZGRJ
QyA9IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJ
Q0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRk
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUwLDExIEBAIHZv
aWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdlbmVyYXRl
ZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJv
ZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNy
Y1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsK
IApAQCAtMTAxNSwxMCArMTAyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmlu
YXJ5TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAgICAgICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgp
OworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJp
dGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJp
dGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFy
aXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKICAgICAg
ICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBA
IC0xMDU1LDEzICsxMDYyLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1h
dGhJQzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1h
dGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAg
aWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYg
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
c3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UK
LSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0
Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiks
IHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAj
aWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7
CkBAIC0xMTIwLDEzICsxMTI4LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5h
cnlNYXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwog
ICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAg
IGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7
CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChi
aXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMp
KTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBs
YWJlbCgpOwpAQCAtMTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0
IEluc3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBu
dWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJv
ZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRD
b2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2
PigpLm1fcHJvZmlsZUluZGV4KTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5
dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0
T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjExLDggKzEy
MjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQg
SklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwot
ICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2Zp
bGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRD
b2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVs
PigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRk
SklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1
cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRp
b25WYWx1ZU11bCk7CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbXVsKGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29k
ZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmls
ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBK
SVRTdWJJQyogc3ViSUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAg
ICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwog
ICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODE4Njgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzMiw3ICsyMzIsNyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0
IE9wQ2FsbEV2CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1Qx
KTsKICAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZy
YW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVn
VDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxsZWUs
IHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVj
b2RlKTsKQEAgLTMyNCw3ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJ
bnN0cnVjdGlvCiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3Vu
bGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIgogI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xv
d1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0
UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4IEBA
IHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAm
JiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2Rl
SUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNv
bnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNp
Z25lZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJn
Q291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNv
ZGUsIGNoZWNrcG9pbnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxp
bnQ+KHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7
CiAKKwogICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIo
cmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygw
KSksIHJlZ1QwKTsKICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
ICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QwKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFk
YXRhLCBjaGVja3BvaW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAg
ICBzdG9yZTMyVG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9m
ZnNldE9mQ2FsbExpbmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVBy
b2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwog
ICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6
b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0Nv
bnN0YW50KQogewogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3Ro
aXNWYWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1
bWVudHM7CkBAIC05MSw3ICs5Miw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
IGJ5dGVjb2QKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZv
cndhcmRBcmd1bWVudHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0
aW9uU2l6ZUZyYW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJz
dEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDApOworICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAt
Zmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigtZmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFt
ZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwg
cmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJVDo6
Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRp
b24gPSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAg
ICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2Fs
bE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJh
dGlvbiwgcmVnVDMsIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1
bWVudCBjb3VudC4KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09m
TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90Qmln
Z2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIs
IGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxv
YWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKSksIHJlZ1QzKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwg
cmVnVDMsIHJlZ1QyKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlu
a0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5v
dEJpZ2dlc3QubGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAg
LTEyNywxNiArMTMxLDE2IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQog
dGVtcGxhdGU8PgogYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBi
eXRlY29kZSkKIHsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVn
VDEpOwotICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxs
RnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1z
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1Bv
aW50ZXJSZWdpc3RlciwgYXJndW1lbnRHUFIxKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdp
c3RlciwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQo
KSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52
YWx1ZSgpKSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKLQotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJldHVyblZhbHVlR1BSKSk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3Vs
dChieXRlY29kZSk7CiAKQEAgLTE0OCw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlu
a0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJ
bmZvcy5hZGQoQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENh
bGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAtMTU2LDQzICsxNjAsNDYgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0
ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChB
ZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVt
aXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENh
bGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBpbmZvKTsKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJl
c3VsdChieXRlY29kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6OmNv
bXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQoteworYm9v
bCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwg
dW5zaWduZWQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpIHsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWls
Q2FsbCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVj
b2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0g
ICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEubnVt
UGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdS
ZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRhLm51
bUxvY2FscyA9CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVm
ZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZs
ZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEt
Pm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAgc2h1
ZmZsZURhdGEtPm51bUxvY2FscyA9CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEuYXJn
cy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUo
Ynl0ZWNvZGUubV9hcmdjKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUu
bV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgIHNo
dWZmbGVEYXRhLT5hcmdzW2ldID0KICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNl
ZEluSlNTdGFjaygKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAgRGF0YUZv
cm1hdEpTKTsKICAgICB9Ci0gICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAgVmFsdWVS
ZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURhdGEuc2V0
dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRGcmFtZVNo
dWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVS
ZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAgc2h1ZmZsZURhdGEtPnNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6OlllcywgWyZdIHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMs
IHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3RhbnQoY2Fs
bExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxs
TGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIs
IFsmXSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURhdGEpLnBy
ZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7
CisKKyAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFtZVNodWZm
bGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9
IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5k
b25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0yMTgsMTQgKzIyNSwyNSBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVy
IGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3Rv
cmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLwotICAgIENhbGxMaW5r
SW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkK
LSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpKTsKLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7
CisKKyAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBpZiAob3Bj
b2RlSUQgIT0gb3BfY2FsbF9ldmFsKSB7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBp
bmZvID0gbV91bmxpbmtlZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5m
bzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7
CisKKyAgICAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExp
bmtJbmZvSW5kZXgpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxD
b21waWxhdGlvbkluZm8oKSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0g
aW5mb0NvbnN0YW50OworICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5m
b0NvbnN0YW50KTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8g
Ynl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsK
LSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgp
LmJpdHMoKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0
cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRh
Z09mZnNldCkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsg
Ly8gcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAtMjM0LDE2ICsyNTIsMTIgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0
ZWNvZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25J
bmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENh
bGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQot
ICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4
KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9J
bmRleCwgaW5mb0NvbnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50
KGluZm9Db25zdGFudCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsK
LSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhp
cywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAg
ICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIp
OwogICAgICAgICB9KTsKQEAgLTI1MywxMyArMjY3LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BD
YWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8g
c2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJ
bmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBk
b25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9
IGRvbmVMb2NhdGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsK
QEAgLTI3MywyMCArMjg3LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29u
c3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7
CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNs
b3dQYXRoKCptX3ZtLCAqdGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1Bh
dGgoKm1fdm0sICp0aGlzLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24o
SklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcg
KzQwOSwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAg
ICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50
LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2Fz
ZS5saW5rKHRoaXMpOwogfQpAQCAtNDE2LDEwICs0NDMsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0
b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQ
UlJlZyBpdGVyYXRvckdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBK
dW1wTGlzdCBub3RPYmplY3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlcmF0b3JHUFIpKTsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0
ZXJhdG9yR1BSKSk7CkBAIC00MzIsMTkgKzQ1NywxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIG1vdmUoaXRlcmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBuZXh0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCku
cmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiAKICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0
aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05v
dE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAg
ICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00NTIsNyArNDc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4
dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rp
b24gPSAoWyZdICgpIHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewog
ICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93
OwpAQCAtNDcwLDUwICs0OTIsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbgogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJh
dGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAg
IG9yOChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2Vu
ZXJpYykpLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vl
bk1vZGVzKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1l
dGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7
CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFk
YXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JO
ZXh0PihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludCgpOwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNP
YmplY3QpIGluIHJlZ1QwCiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJS
ZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0g
ICAgLy8gaXRlclJlc3VsdEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkg
aWQgYmVsb3cuCi0gICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2Fs
bFJlc3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRS
ZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBw
cmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0
ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRv
bmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVH
UFIpLCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5k
b25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VU
b05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3Jh
dGNoMSA9IHJlZ1QyOwotICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAg
UmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7Cisg
ICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdp
c3RlcnMpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2Ny
YXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExp
c3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVH
UFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRp
b25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBnbG9iYWxHUFIpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQ
UlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAg
ICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgp
KSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJv
cGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAg
ICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVz
dWx0R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAt
NTI3LDU5ICs1NzYsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29u
cwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JD
aGVja3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BS
UmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFw
cGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlx
dWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwog
ICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0
R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNh
bGxSZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0Jp
dHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92
ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29k
ZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3Qu
bGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9y
UmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFy
Z3VtZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBV
bmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwo
KTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5
SWRJbmRleCsrXTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAot
ICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86
Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBH
UFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVl
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJl
c3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0
LmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtMTU5LDEwICsx
NjAsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0
VHlwZSkKICAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShq
aXRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6
OnVzZURhdGFJQygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4g
T3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBA
IC00NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5m
CiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBl
KQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHVi
SW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1f
c3R1YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUs
IGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNp
dGVJbmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVz
ZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3I6OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93
UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewog
ICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9j
YXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAK
ICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUg
QEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5m
by0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91
dGluZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAg
bV9zdGFydCA9IGppdC5sYWJlbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURh
dGFJQyhtX2ppdFR5cGUpKTsKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5m
b0dQUik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJ
VEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlw
ZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpT
VmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwx
MTQgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3Mg
Q2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVj
dHVyZVN0dWJJbmZvOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0g
Y2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7
CiAKK3N0cnVjdCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRS
ZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpy
ZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Qz
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsK
K307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUVudW1l
cmF0b3JHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBH
UFJJbmZvOjpyZWdUMjsKKyAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29k
ZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZv
LgorICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5mbzo6cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1
bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9
IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90
byA9IEdQUkluZm86OmFyZ3VtZW50R1BSMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMSA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOworfTsKKworc3RydWN0IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1Qy
OworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgdGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBC
YXNlbGluZUluQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworfTsKKwor
c3RydWN0IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9maWxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUNDsKK307CisK
K3N0cnVjdCBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJyYW5kID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQoYnJh
bmQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCiBjbGFzcyBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDE1ICsxNjUsMjEgQEAgcHVibGljOgogICAgIHZvaWQgZmlu
YWxpemUoCiAgICAgICAgIExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZl
ciYgc2xvd1BhdGhMaW5rQnVmZmVyLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHVi
Um91dGluZVB0clRhZz4gc3RhcnQpOwotICAgIAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0
dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRT
dHViSW5mbyB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKIHBy
b3RlY3RlZDoKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRU
eXBlOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwotICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOworICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIG1fc2xvd1BhdGhDYWxsOyAvLyBPT1BTOiBtYWtlIHJlcG9ydENhbGwgcGFzcyBzb21l
dGhpbmcgaW4gd2UgY2FuIHVzZSBmb3IgdGhlIG5vbi1DVEkgdGh1bmtzIGJ1aWxkcy4gCiB9Owog
CiBjbGFzcyBKSVRCeUlkR2VuZXJhdG9yIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
IHsKQEAgLTk4LDcgKzIwNyw3IEBAIHByb3RlY3RlZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7
CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OworcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1w
OwogfTsKIApAQCAtMTMyLDggKzI0MSw4IEBAIHB1YmxpYzoKICAgICBKSVRQdXRCeUlkR2VuZXJh
dG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29k
ZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJh
c2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJl
ZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CisgICAgICAgIENvZGVCbG9jayosIEpJVFR5
cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBK
U1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNN
QU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fz
c2VtYmxlciYpOwogICAgIApAQCAtMTYzLDExICsyNzIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1Zh
bHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1w
IG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTkxLDggKzI5OCw2IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRj
aGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjE2LDggKzMyMSw2IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2
YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjQxLDggKzM0NCw2
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYp
OwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjc3
LDggKzM3OCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFz
dFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOwogCi1wcml2
YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzAyLDExICs0MDEs
OSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1i
bGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVS
ZWdzIG1fcmVzdWx0OwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0z
MzAsOCArNDI3LDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChN
YWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1w
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlz
aW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Okxp
bmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAo
IXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwor
fQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFu
dCkgeworICAgICAgICAvLyBPT1BTOiBmaW5kIGEgd2F5IHRvIGFzc2VydCB0aGF0IGFsbCBsaW5r
IHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlT
X0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBz
cmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5r
ZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxS
ZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiArMTgxLDM2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBt
ZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmly
dHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lO
TElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1
cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFs
dWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUo
ZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogICAgIHJldHVy
biBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVh
bFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0
aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BS
MiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIs
IHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25v
d25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVj
a3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRo
aXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5l
cmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9j
b2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMo
KSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRl
Y29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFk
ZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2
b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRl
eCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRl
Y29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7
CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRl
ciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkg
KzMxOCwzNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0
ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZh
bHVlKQotewotICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0gICAgLy8gV2Un
cmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4g
anVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
c3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQotICAg
IEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAgIHN0b3JlMzIo
dmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwotICAgIHN0
b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgot
fQorICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+
bGVuZ3RoKCkgPT0gMTsKK30KKworLy8gT09QUworLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZh
bHVlKQorLy97CisvLyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKKy8vCisvLyAg
ICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNv
IHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lmIFVTRShKU1ZB
TFVFNjQpCisvLyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRz
KTsKKy8vI2Vsc2UKKy8vICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBi
aXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tl
dHMpOworLy8gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0Jp
dHMucGF5bG9hZCk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+
YXNCaXRzLnRhZyk7CisvLyNlbmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5s
aW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6
bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
Z1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0z
MjMsMjQgKzM1MywyNSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVj
CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNv
ZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVn
cyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjpl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJl
Z3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0
YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKyAgICBwdHJkaWZmX3Qg
b2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRh
VGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVj
b2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tl
dCgpOworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zm
c2V0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0
UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVl
UmVncyhyZXN1bHRSZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxp
bmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97
CisvLyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0UmVnKSk7CisvL30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJS
ZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJS
ZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpT
VmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKQEAgLTM2MCw2ICszOTEs
MjEgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlVwogICAgIH0KIH0K
IAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZm
X3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBz
Y3JhdGNoR1BSKQoreworICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICAgICAg
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YShzY3Jh
dGNoR1BSLCBieXRlY29kZSwgb2Zmc2V0T2ZBcnJheVByb2ZpbGUpOworICAgIH0KK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBSZWdpc3RlcklEIGNl
bGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3sKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVBy
b2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCksIGNl
bGxHUFIsIHNjcmF0Y2hHUFIpOworfQorCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRP
cGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwpAQCAtMzgwLDcgKzQyNiw3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewog
ICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwor
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRy
dXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAg
ICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcgKzU0Miw3IEBA
IGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsK
LSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tu
b3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcgKzU1Miw3IEBA
IGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVn
aXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkg
eworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3Rh
bnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAg
LTUxNCwxMSArNTYwLDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RK
UwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJ
bnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAm
JiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkK
IHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0LDExICs1ODUs
MTcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VS
VChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVl
LmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQorICAgICAgICBzd2l0Y2ggKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykpIHsKKyAg
ICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6CisgICAgICAgIGNh
c2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6IHsKKyAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAg
ICAgICAgbW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBsb2Fk
Q29kZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTY2LDExICs2MTMsNiBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5k
Q29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29u
c3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihk
c3QpKTsKQEAgLTU5NSw3ICs2MzcsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVt
cFNsb3dDYXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYg
KCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbCh2
UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKQEAg
LTYzNywzMCArNjc5LDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0
IAogewogICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJu
IG1fY29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKLX0KLQotQUxX
QVlTX0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUg
Ynl0ZWNvZGUpCi17Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0YUlEICsg
MTsgLy8gSGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX2NvcGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9j
b3BpZWRHZXRQdXRJbmZvcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRlcmF0
b3ItPnZhbHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0SW5mb3MuYWRk
KGtleSwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJbmZvOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQ
cm9maWxlIEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQotewotICAg
IHVpbnQ2NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlE
KSArIDEpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJ
RCk7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7
Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQ
cm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwot
ICAgIG1fY29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwotICAgIHJl
dHVybiBhcml0aFByb2ZpbGU7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPm91dE9m
TGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
QEAgLTY4MSw2ICs3MDAsNjEgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2Rl
PE9wUAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRh
dGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0
KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJs
b2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQp
LCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2Rl
LCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQzMihBZGRyZXNzKHNf
bWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQ4RnJvbU1ldGFk
YXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3Vs
dCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxv
Y2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCks
IHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5
dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5
cGUgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAg
ICBzdG9yZTgodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9j
ay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OnN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlMzIodmFsdWUsIEFkZHJlc3Moc19tZXRh
ZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRh
VGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1
bHQpCit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRh
ZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBzX21ldGFk
YXRhR1BSLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29uc3Rh
bnQoSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBHUFJSZWcgcmVzdWx0
KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX2NvbnN0YW50c0dQUiwgc3RhdGljX2Nhc3Q8dWlu
dHB0cl90Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZENv
bnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgY29uc3Rh
bnQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25z
dGFudCgpKTsKKyAgICAvLyBPT1BTOiBNYXliZSBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQ/Cisg
ICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlc3VsdCk7
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgQ29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50
c1ZlY3RvckJ1ZmZlcigpKSwgcmVzdWx0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNv
bnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0KTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24g
MjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0
Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZy
YW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihU
cnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0
Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25J
ZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKIAogICAgIC8vIGNyZWF0ZSBq
dW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0
ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hS
ZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hS
ZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlu
a2VkVGFibGUpOwogCkBAIC0xMDI0LDcgKzEwMjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfY2hhcihjb25zdCBJbnN0CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNo
IGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJ
bmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1f
Ynl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsK
ICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0
Miw3ICsxMDQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgog
CiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNr
IHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9j
b2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5
dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAg
bGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQsMTEgKzU0LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlv
bioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAo
c3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAg
ICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRy
ZXNzRm9yKGRzdCkpOwotICAgICAgICBlbHNlCisgICAgICAgIC8vIE9PUFM6IG1vc3QgIk90aGVy
IiBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQg
ZnJvbSB0aGUgVW5saW5rZWRDb2RlQmxvY2suIEl0J3MganVzdAorICAgICAgICAvLyBhIGNvdXBs
ZSB0eXBlcyB0aGF0IGNhbid0LiBDcmVhdGUgYW4gYWJzdHJhY3Rpb24gZm9yIHRoYXQuCisKKyAg
ICAgICAgc3dpdGNoIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihzcmMpKSB7CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpJbnRlZ2VyOgorICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91Ymxl
OiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNy
YywgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtODcsMzcgKzk4LDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVj
dGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRh
Lm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9j
YXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9u
VmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUs
IEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQg
cmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsK
ICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVj
dHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAg
ICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBl
bWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxs
b2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZs
eSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVT
dG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAg
bXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAg
IGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6
Om9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1
cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBhdXRv
IGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgZW1pdEFsbG9jYXRlSlNP
YmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywg
c3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgbG9h
ZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRS
ZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBSZWdpc3RlcklE
IHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RB
bGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOworICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVj
dHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIApA
QCAtMTMxLDcgKzE0MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFu
Y2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsK
IAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5j
ZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJy
YW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikp
KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKIApA
QCAtMTU0LDMwICsxNjQsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBM
b2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkp
IGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3
ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZv
ciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm90b0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVy
czo6cHJvdG87CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3RvLCBwcm90b0dQUik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUg
Y2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdl
dF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSwgcHJvdG8pOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwg
dmFsdWUpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8p
OwogCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1
ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDUsCi0gICAgICAgIHJlZ1Qz
LCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgcmVzdWx0R1BSLAorICAgICAgICB2YWx1ZUdQUiwKKyAgICAg
ICAgcHJvdG9HUFIsCisgICAgICAgIHN0dWJJbmZvR1BSLAorICAgICAgICBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxLCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNj
cmF0Y2gyKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6Okluc3RhbmNlT2Y7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbnN0YW5jZU9m
cy5hcHBlbmQoZ2VuKTsKLSAgICAKKwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIApAQCAtMTkyLDE0ICsyMTAsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSQogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9u
PGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBH
UFJJbmZvOjpub25BcmdHUFIwLCByZWdUMiwgcmVnVDEpOwotICAgIH0gZWxzZQotICAgICAgICBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6c3R1YkluZm8gPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2Vs
aW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWUgPT0gYXJndW1lbnRHUFIyKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG8gPT0gYXJndW1lbnRH
UFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4o
QWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3Rv
bShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0yNDAsNyArMjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAg
ICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM3NCw3ICsz
OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiAjZWxzZQpA
QCAtMzgzLDkgKzQwMCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlv
bioKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxl
ckdlbmVyYXRvcihWTSYpCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKIAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0
UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC00MTEsNyArNDI4LDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTQzNCw5ICs0NTAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNv
bnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDY1LDggKzQ4MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rp
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4
cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIp
LCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIo
dmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBh
ZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyAr
NDk5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8v
IGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcg
YXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1h
eSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGlj
aCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAg
LTUxOSw3ICs1MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVj
CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIo
RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWln
biA9IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU2Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFf
bnVsbChjb25zdCBJbnN0cnUKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRk
SnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdl
dCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApA
QCAtNTgyLDE1ICs2MDEsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVs
bChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFs
dWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRl
Y29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxs
KCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0
cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsK
LSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAg
IGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwg
cmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoYnl0ZWNvZGUsIFRydXN0ZWRJbW0zMigxKSwg
T3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2NDIs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5j
aElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsK
ICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0
aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY1OSw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzE0
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBj
YWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1Qw
KTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzcz
MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93
blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtNzIwLDcgKzc0MCw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FW
RVNfUkVHSVNURVJTID4gMAogICAgIGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1
bWVudEdQUjApOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlckltcGwoYXJndW1lbnRHUFIwKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYXJndW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29u
c3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyAr
OTI4LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5MzksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5z
dHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1Qy
LCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkzMSw3ICs5NTMsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZS
ZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEs
NyArOTczLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGlu
ayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NzgsNyArMTAwMCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdU
MCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk5Myw3ICsxMDE1LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBW
TTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBz
dG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZy
YW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJF
eGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRp
b24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyAr
MTAzMywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAg
Ly8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0
YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgK
IAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRh
dGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRl
ckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJB
dENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsK
KyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0
Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwog
ICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRo
aXMpOwotICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAg
IGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJv
ZmlsZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4o
cHJvZmlsZSksIHJlZ3MpOwotICAgICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCiB9CiAKQEAgLTEwNTMsOCArMTA2Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNv
ZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRl
c3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNv
bnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxl
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
ICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29k
ZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxp
bmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsx
MDkxLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChT
d2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBT
d2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxl
KHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUs
IHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93
bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRo
VW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1
bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CiB9CiAKQEAgLTEwOTksMjAgKzExMTAsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBi
eXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0
Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFi
bGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRj
aFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRj
aFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5r
ZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlU
eXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0
YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1l
bnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2Nr
KCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDAp
OwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1Qw
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8
aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMu
bGluayh0aGlzKTsKQEAgLTExMzMsNyArMTE0Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251
bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBh
cmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRp
YXRlID0ganVtcCgpOwpAQCAtMTE0OCw3ICsxMTYxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFf
bnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTExNjYsNyArMTE3OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNv
bnN0IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwog
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIo
Tm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRl
ID0ganVtcCgpOwpAQCAtMTE4OCwxMiArMTIwMCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRl
cihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRo
ZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBz
dGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8g
b2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBj
b3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxp
bmtlZENvZGVCbG9jay0+bnVtVmFycygpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
ICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNw
YWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5p
dFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJh
cnJpZXIobV9jb2RlQmxvY2spOworICAgIAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7
CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEzMTAsMjMg
KzEzMjQsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9U
aGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2Nh
Y2hlZFN0cnVjdHVyZUlEOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
cmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7
CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlw
ZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0
cnVjdHVyZUlEKCksIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2Rl
Lm1fY2FsbGVlOwotICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24g
PSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSBy
ZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJ
RCByZXN1bHRSZWcgPSByZWdUMDsKQEAgLTEzNDIsNyArMTM1Miw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFS
ZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSAr
IE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3Io
KSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6
b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJl
UmVnKTsKIAotICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsK
KyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcENyZWF0ZVRoaXM6Ok1ldGFkYXRh
OjpvZmZzZXRPZkNhY2hlZENhbGxlZSgpLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBo
YXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJl
ZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5j
dGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEz
NzIsNyArMTM4Miw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29s
ZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsK
IH0KQEAgLTEzODIsNyArMTM5Myw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAg
ICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVy
blZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQs
NyArMTQwNiw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBA
IC0xNDA0LDcgKzE0MTcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0
cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKQEAgLTE0MTgsMTAgKzE0MzIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1f
Y29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRl
Y29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVn
VDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBH
UFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20s
IEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1
cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTQzMCw3ICsxNDQ1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewot
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9y
RnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdF
YXJseVJldHVybigpKSkgeworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZy
b21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fdW5saW5rZWRDb2RlQmxvY2stPmxvb3BI
aW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRw
dHJfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24p
OwogICAgICAgICBsb2FkUHRyKHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJl
dHVybiA9IGJyYW5jaFB0cihCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFy
bHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTE0NDAsNyArMTQ1NSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICNlbHNlCiAgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKLSAgICAgICAgbW92ZVZhbHVlKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVzdWx0UmVncy5ncHIoKSk7CiAgICAgICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKQEAgLTE0NTMsOCArMTQ2OCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3Bf
aGludChjb25zdCBJbnN0cnUKIAogICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hl
Y2s6IAogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZlT3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhl
Y3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCi0gICAgICAgICAgICBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAg
ICAgICAgICBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50
ZXIoKSkpKTsKICAgICB9CiB9CiAKQEAgLTE1MDksNyArMTUyNSw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFyZ3VtZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTY0LDM0
ICsxNTgxLDM2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwor
ICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBhcmd1bWVudEdQUjA7CisgICAgbG9hZEdsb2JhbE9iamVj
dChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBnbG9i
YWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChy
ZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKdW1wIGxhenlKdW1wOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEp
OwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwor
ICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vu
ZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5j
dGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2wsIGJp
dHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0
aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAK
ICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwg
JnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBl
bHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3Jf
ZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjIxLDIzICsxNjQwLDI0
IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAg
IGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQ
YXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKIAotICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5
dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByLCBiaXR3aXNlX2Nhc3Q8
dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7
CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwogICAgIE9wY29kZUlE
IG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19m
dW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwog
ICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHApCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZt
KCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
KTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAg
ZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9y
X2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2NjQsMjkgKzE2
ODQsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdQogdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdB
cnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXpl
ID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQu
b2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRh
dGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIyKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxs
b2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9m
aWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIHNpemUp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0g
Ynl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVj
b2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlv
blByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNp
emVJbmRleCwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmls
ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICNlbHNl
CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5
V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVn
VDIpOwogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywgcmVnVDIsIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTQsOCArMTcxNSw5IEBAIHZvaWQgSklU
OjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJv
ZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAg
Ly8gT09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNo
aW5nIHdoZW4gdGhlIHR5cGUgcHJvZmlsZXIgaXMgZW5hYmxlZC4KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxv
Y2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1
YWxSZWdpc3RlcjsKIApAQCAtMTc3NywyMCArMTc5OSwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9s
b2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJl
Z1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhp
cyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9
IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVz
dCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBy
ZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJl
Zywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdp
c3Rlci4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVuc3Vy
ZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywg
c2NyYXRjaDJSZWcpOworICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlLCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93
UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxV
RTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVj
ayB0aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB1c2luZyB0
aGUgY29udHJvbCBmbG93IHByb2ZpbGVyLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xv
Y2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlv
bjsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1
dGVDb2RlKCp0aGlzKTsKQEAgLTE4NjAsNyArMTg4Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9hcmd1bWVudChjb25zdCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0
UmVncyk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxOTEyLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJv
dG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hH
UFIsIHNsb3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODgxLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0Owog
ICAgIGlmIChrZXkuaXNJbnQzMigpKQpAQCAtMjkwNCw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmlu
Z0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
Y29kZUJsb2NrLT5iYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAog
ICAgIGlmIChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFz
U3RyaW5nKGtleSktPnZhbHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShy
ZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRH
UFJSZWcpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDkyICs0OSwxMDMgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0
YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJl
ck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAs
IHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNN
YXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmso
dGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0KTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1Qy
KTsKLSAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAg
ICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7Cisg
ICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBy
ZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICAgICAgLy8gT09QUy4gU3VwcG9ydCB0aGlz
CisgICAgICAgIC8vaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAgICAg
Ly8gICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICAgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5
VmFsOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBz
dHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAg
ICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wY29kZVR5cGU+CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0
IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nh
c2VzKGl0ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1l
bnRHUFI0KTsKICNlbHNlCi0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAg
ICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4
KTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5
dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBh
cmcxIGFscmVhZHkgdXNlZC4KLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0g
YXJndW1lbnRHUFIyOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7Ci0KLSAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwotICAgICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgICAgICBDYWxs
IGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBh
cHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpOwotICAgICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwor
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UgPT0gcmVnVDApOworICAg
IHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkgPT0gcmVn
VDEpOworCisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5
dGVjb2RlLCBPcGNvZGVUeXBlOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsK
KyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0g
ICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAg
fQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
QEAgLTE2MCw4ICsxNzEsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjU7
CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChw
cm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0xODcsMzQgKzE5OCw0MCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cmVzdWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0UHJp
dmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBB
U1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0y
MjMsOSArMjQwLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTIz
NSwyNiArMjU0LDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMK
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8v
IGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRH
UFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTMwMCwyMSArMzEzLDI4IEBAIHZvaWQg
SklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJh
bmQgPSBieXRlY29kZS5tX2JyYW5kOwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
R1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6c3R1YkluZm87CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFBy
aXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChn
ZW4pOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9m
IHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI0
LDE3ICszNDQsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwog
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKKyAgICBVTlVTRURf
UEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKKwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJy
YW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5k
T3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0zNDQsMjQgKzM2
OSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFs
cmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRy
YWl0czxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVu
dFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9w
dGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRp
bWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblNldFBy
aXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2Vu
ZGlmCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMzcwLDE5ICszODksMjggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjbwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJh
bmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFu
ZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJh
bmRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKKworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZh
dGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ7Cisg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2Vu
KTsKIH0KIApAQCAtMzk0LDkgKzQyMiwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tf
cHJpdmF0ZV9icmFuCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTQwNiwyNCArNDM2LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVj
a19wcml2YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBh
cmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdU
MTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9w
ZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0
ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNSwzMCArNDU5LDQyIEBAIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDMpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCByZWdUMywgcmVnVDQpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJh
c2VHUFIsIHByb2ZpbGVHUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BS
KTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0
KTsKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIsIHN0
dWJJbmZvR1BSKTsKKyAgICAvLyBPT1BTOgorICAgIC8vaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KHByb3BlcnR5KSkKKyAgICAvLyAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0g
dHJ1ZTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OlB1dEJ5VmFsOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gc3RkOjppc19zYW1lX3Y8T3As
IE9wUHV0QnlWYWxEaXJlY3Q+ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0
OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNh
biB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMg
Y2VsbC4KQEAgLTQ3NCwxNSArNTEwLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgp
OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQg
PSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2Rl
OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9Owog
CiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNDk4LDcgKzUzMSwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xv
YmJlcmVkLgotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0
cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGdlbi5zdHViSW5mbygpLCByZWdUMyk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQpOworICAgIGlmIChpc0RpcmVjdCkKKyAgICAgICAg
bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRCeVZhbERpcmVjdD4oKSwgT3BQdXRCeVZhbERpcmVjdDo6TWV0YWRhdGE6Om9mZnNldE9mQXJy
YXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAgZWxzZQorICAgICAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigp
LCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJn
dW1lbnRHUFI1KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVj
bWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXpl
IDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUu
aXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25Q
dXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQsIGFyZ3VtZW50R1BSNSk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC01MTIsNyArNTU0LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSByZWdUNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDU7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogICAgIENhbGwgY2FsbDsKICAgICBhdXRvIG9wZXJhdGlvbiA9IGlz
RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkg
OiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKQEAgLTUyMyw3ICs1NjUsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC01MzksMTIgKzU4MSwxOCBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNz
KCk7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q1OwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVn
VDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIg
PSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpwcm9maWxlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZz
ZXRHUFIgPSByZWdUNTsKKyAgICB7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWQoQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHksIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlLCBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpwcm9maWxlKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q0KSk7
CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlucyhyZWdUNSkpOworICAgIH0KKwogCiAgICAg
aml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKQEAgLTU3MCwyMCArNjE4
LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwgSW52YWxpZEdQUlJl
ZywgcmVnVDQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0UHJp
dmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPnByaXZhdGVGaWVsZFB1dEtpbmQgPSBieXRlY29kZS5t
X3B1dEtpbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdl
bik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJh
cnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC01OTQsOCArNjUzLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgUHJpdmF0
ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIFVOVVNFRF9Q
QVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdl
biA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJbmRleCsrXTsKIApAQCAtNjAzLDEzICs2NjEsMTcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQu
aXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUg
OiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0
IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGdlbi5zdHViSW5mbygpLCBUcnVz
dGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOworICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0
S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFI0
KTsKKyAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1
dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFBy
aXZhdGVGaWVsZE9wdGltaXplOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudHNH
UFIzLCBhcmd1bWVudEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNjIyLDE4ICs2ODQsMTIgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSByZWdUNDsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCkBAIC02NDgsOSArNzA0LDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
cmVnVDQ7CiAKQEAgLTY4MCw3ICs3MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVy
X2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
ckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNjg5LDcgKzc0Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVy
QnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc1Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
ZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCBy
ZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVn
VDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEs
IHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBy
ZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzA5LDcgKzc2OCw4IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFs
LCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC03MTksNyArNzc5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmli
dXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJp
YnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc4OCwzMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFz
ZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3
cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdy
aXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNs
b2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODMwLDE3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAg
ICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsr
XTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGlt
aXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODU0LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQ
UjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJ
ZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODQ1LDIyICs5MTMsMzMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0
eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9w
ZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBCYXNlbGluZURlbEJ5VmFs
UmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5k
IG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAg
IC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBh
IGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5NjIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
T3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRH
UFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIFRy
dXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCArOTgwLDE5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1
bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwg
ZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSBy
ZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC05
NjEsMjIgKzEwMzcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVn
VDApOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BS
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9H
UFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNzEsMTcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTAwMywyNiArMTA5MSwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5
X2dldF9ieV9pZChjb25zCiAgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7
CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRP
cHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdl
dEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
IAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIp
OwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEw
MzAsMjIgKzExMTIsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25z
dAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERp
cmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
cmVnVDApOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNl
R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcp
OwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1
YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYg
KzExNDUsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJl
Y3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50
R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25H
ZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTY2LDYx
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFy
Z3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0
eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9
PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7
Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2Rl
TWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBs
b2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZN
b2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihOb3RF
cXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJh
eUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0
YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxp
bmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQorICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhp
c1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEsIHRoaXNWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVn
cywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQog
CkBAIC0xMTU4LDE2ICsxMjI5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQo
Y29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNTAsNTcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBhcmd1bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHBy
b3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFs
dWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVl
R1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVl
R1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
V2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNW
YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlk
V2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhp
c0dlbmVyYXRvciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7Cisg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwor
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQpAQCAtMTI0MSwxNiArMTM0NSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlz
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dl
dEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhU
aGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhp
c1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTEyNjAsMjggKzEzNjcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBy
ZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRo
aXNHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTMyOSwyMyArMTQz
MCwzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0
ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBw
YXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUg
b25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVl
biBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBj
b2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBh
dCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGlu
ZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNl
VlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAg
ICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHN0dWJJbmZv
R1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1
dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeUlk
OworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0
S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVj
b2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwog
ICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0NzQsMTggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5
SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJVFB1dEJ5
SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihn
ZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBh
cmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24o
KSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3NiwyNSArMTQ5NSwxOSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0g
YXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVy
dHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4u
c2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
Z2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCkBAIC0xNDQxLDIwICsxNTU0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0
ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAK
ICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5C
eUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYz
LDE0ICsxNTg3LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BS
Mik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTE0ODAsMjggKzE2MDcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5
X2lkKGNvbnN0IElucwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93
X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3
ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGlj
YXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVj
bHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxMCwyNSArMTYzMSwzMyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2Fz
ZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUzNywxNSArMTY2NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9p
bkJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1l
dGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NTYsNTkgKzE2ODgsNzAgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBh
cmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0
KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xv
d19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0
IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBs
aWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwg
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1p
emU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwg
QWNjZXNzVHlwZSB0eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQ
Uik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVT
bG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0
SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2Us
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogeworICAgIFVOVVNF
RF9QQVJBTShiYXNlKTsKKyAgICBVTlVTRURfUEFSQU0ocHJvcGVydHkpOwogICAgIEFTU0VSVCh0
eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZUJyYW5kKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5C
eVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9u
SGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3Vt
ZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRH
UFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTE2MTgsMjcgKzE3NjEsMjEgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFs
UmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5T3JCcmFuZEdQUiA9PSBhcmd1bWVu
dEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1Yklu
Zm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0
eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25H
ZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSksIGRlY2x0
eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gdHlwZSA9PSBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBv
cGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRp
b25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1p
emUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NTIsNyArMTc4OSw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKGMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2
YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUu
bV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSwgQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZU5hbWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9icmFu
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY2NiwxOSArMTgw
MywyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVfYnJhbmQoCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZUJyYW5kPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhi
eXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBlbWl0SGFz
UHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9i
cmFuZCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRW
YXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6
OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJS
ZWcgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAg
ICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRy
ZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgp
LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY3Jh
dGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0
Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBB
ZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9z
dXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7Ci0gICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRl
cHRoOyArK2kpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0
T2ZOZXh0KCkpLCByZWdUMCk7CkBAIC0xNjg4LDYgKzE4MjgsNyBAQCB2b2lkIEpJVDo6ZW1pdFJl
c29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNzAxLDcgKzE4NDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3Bl
ID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2Rl
QmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QxKTsKICAgICAgICAgICAgIGxvYWQzMigm
bWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7CiAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgp
KSwgcmVnVDEpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3Bl
KSwgcmVnVDApOwpAQCAtMTcxNSw3ICsxODU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNT
Y29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2sp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzk0LDg3ICsxOTM1LDEwNSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZl
U2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fcmVzb2x2ZVR5cGU7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9
IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0
YS5tX3Jlc29sdmVUeXBlOwogCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQo
Qnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBB
U1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVj
dGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAotICAgIGNv
bnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IHJlZ1Q1OworICAgIC8vIElmIHdlIHByb2ZpbGUgY2VydGFpbiByZXNvbHZlIHR5cGVzLCB3
ZSdyZSBnYXVyYW50ZWVkIGFsbCBsaW5rZWQgY29kZSB3aWxsIGhhdmUgdGhlIHNhbWUKKyAgICAv
LyByZXNvbHZlIHR5cGUuCiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKQotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0
KCkpLCByZWdUMCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAK
KyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVudCgpLCByZWdUMCk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zm
c2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoYnl0ZWNvZGUpOworCisgICAgICAgIGF1dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9IFtdIChW
TSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVU
aHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVW
YXIiKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJ
VDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzIik7CisgICAgICAgIH07CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9H
RU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2Vu
ZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1td
ID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVfR0VO
RVJBVE9SKQorICAgICAgICBhdXRvIGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAo
Vk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3Bl
VGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVy
aWMiKTsKICAgICAgICAgfTsKLSN1bmRlZiBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgorCisgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgc2NvcGVHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFP
ZmZzZXQpLCBtZXRhZGF0YUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Y29kZTsKKyAgICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAg
ICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAg
ICAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yKTsK
KyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogICAgIH0KIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2Nv
cGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVU
eXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRl
ZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGlu
ZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdo
dCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhl
ciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KKworICAgIENDYWxsSGVscGVycyBqaXQ7CisKICAgICB1c2luZyBNZXRhZGF0
YSA9IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFk
YXRhR1BSID0gcmVnVDc7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQ
UiA9IHJlZ1Q2OyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZz
ZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgogICAg
IGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CiAgICAgVU5VU0VEX1BB
UkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZv
ck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7
CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFk
ZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAg
aml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7
CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsK
KyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CiAgICAg
ICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAg
ICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9i
YWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmpl
Y3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RH
UFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBv
aW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFk
ZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0z
MihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9i
amVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldh
dGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgo
RXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRy
dXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNv
bHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewotICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAg
ICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1Qx
KTsKKyAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7
CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAgIGppdC5sb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2xvY2FsU2Nv
cGVEZXB0aCkpLCByZWdUMSk7CiAKLSAgICAgICAgTGFiZWwgbG9vcCA9IGxhYmVsKCk7Ci0gICAg
ICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CisgICAgICAgIExhYmVs
IGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgSnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3Qz
MihaZXJvLCByZWdUMSk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBzdWIz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICAgICAgICAgIGp1bXAoKS5saW5rVG8obG9v
cCwgdGhpcyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3Bl
OjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5zdWIzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGxvb3AsICZq
aXQpOwogICAgICAgICB9Ci0gICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5s
aW5rKCZqaXQpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSkgewpAQCAtMTg4MiwxMiArMjA0MSwxMiBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAg
ICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9i
amVjdEdQUik7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAgICAg
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9n
bG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNl
LmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xv
YmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7
Ci0gICAgICAgICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgZG9WYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2Jh
bE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSks
IHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgaml0Lm1vdmUo
Z2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CkBAIC0xODk3LDExICsyMDU2LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9j
aygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhciosCiAgICAg
ICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAgaWYg
KHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQo
KSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcjoKQEAgLTE5MDksNyArMjA2OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVs
ZVZhcjoKQEAgLTE5MTksODMgKzIwNzgsNDUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5
cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAg
ICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0
YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0g
ICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcik7
Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVU
eXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENv
ZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9F
bmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOworICAgICAgICBqaXQubG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdU
MCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAg
ICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIu
bGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKKyAgICAgICAgYXV0byBlbWl0Q2FzZSA9IFsmXSAoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAg
ZW1pdENvZGUocmVzb2x2ZVR5cGUpOworICAgICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQu
anVtcCgpKTsKKyAgICAgICAgICAgIG5vdENhc2UubGluaygmaml0KTsKKyAgICAgICAgfTsKIAot
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmso
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFy
KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBlbWl0Q2FzZShH
bG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0g
ICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVh
azsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCi0gICAgcmV0KCk7Cisg
ICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFM
X1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2Fz
ZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9y
KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93
Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1
bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX1JFU09MVkVfU0NP
UEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3Io
Vk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9y
T3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBc
Ci0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcFJl
c29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVf
IiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9S
RVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5F
UkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3df
b3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdl
bmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBC
YXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRo
ZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0
byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJl
c3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwNjUsNiArMjE4Niw3IEBAIHZvaWQgSklUOjplbWl0
R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0yMTc4LDcgKzIzMDAsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
Z1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCkBAIC0yMTg2LDkgKzIzMDgsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIGFyZ3VtZW50
R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCkBAIC0yMTk2LDQxICsyMzE4LDUwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZShjb24KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5
dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5t
X2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29s
dmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJ
bmZvLnJlc29sdmVUeXBlKCk7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VS
VChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAg
IEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3Ry
dWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworCisgICAg
YXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4g
SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGlu
ZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAgICBhdXRvIGNs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgewor
ICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3Bl
IENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0byBnZW5lcmljR2V0RnJvbVNjb3BlR2Vu
ZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0
RnJvbVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9z
Y29wZSBnZW5lcmljIik7CisgICAgfTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFH
UFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCi0gICAgaWYgKHJl
c29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKLSAg
ICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJh
bmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0
YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsK
KyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRh
ZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgR0VUX0ZS
T01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29s
dmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBn
ZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoR0VUX0ZS
T01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdFVF9GUk9NX1NDT1BFX0dF
TkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CisgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7Ci0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVz
b2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0KKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYgKHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xv
c3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgY29kZSA9IHZtLmdldENU
SVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgIGVs
c2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZyb21TY29wZUdlbmVy
YXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRo
dW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21T
Y29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUs
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5
IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJ
VCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgpA
QCAtMjIzOSw5OSArMjM3MCw4OCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZv
ck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAK
LSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRh
VGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
KyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRh
dGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsK
IAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFkYXRhU3RydWN0dXJl
T2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgbWV0YWRhdGFT
dHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsK
LSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAg
ICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAg
IGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUikg
eworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPcEdldEZyb21TY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAgICAgIGppdC5t
b3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNo
VGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDEs
IFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAg
ICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxv
Y2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlv
bldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChF
cXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1
c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdU
Myk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRj
aHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
KTsKICAgICB9OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Qb2ludGVyID0gWyZdIChp
bnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0g
ICAgfTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIgPSBbJl0gKGlu
dDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAg
ICB9OwotCiAgICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BS
LCBHUFJSZWcgb3BlcmFuZEdQUikgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBz
aXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVy
YW5kR1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRP
ZlZhcmlhYmxlcygpKSwgcmVnVDApOworICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMy
KDMpLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmFkZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQ
Uik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52
aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CiAgICAgfTsKIAotICAgIGF1
dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0
TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhz
Y29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1
Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3Ry
dWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwg
cmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAg
ICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSKTsgLy8gU3RydWN0
dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVj
dHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJl
c29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAg
ICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwogICAgICAgICAgICAgY29u
c3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgb2Zmc2V0ID0gcmVnVDE7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gg
PSByZWdUMjsKIAotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQp
PihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1Qz
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7
CisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0g
KCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVn
VDMpOworICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBy
ZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRh
OjpvZmZzZXRPZk9wZXJhbmQoKSksIG9mZnNldCk7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VO
QUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3Jl
YXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNl
dCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9m
TGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAg
ICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVh
bCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAg
ICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAg
ICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNp
Z25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNl
SW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQg
LSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoKTsKKyAgICAgICAgICAgIGppdC5uZWczMihvZmZzZXQpOworICAgICAgICAgICAgaml0LnNp
Z25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQo
QmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNl
IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JK
RUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3Bl
cmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsK
ICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFog
Y2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVn
VDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHko
cmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAg
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09G
RlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOworICAgICAgICAgICAgZG9WYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZz
ZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsKICAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNj
b3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWlj
OgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM0MSw3
OSArMjQ2MSw1NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAg
ICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8p
KSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJp
dHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAg
aXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEdsb2Jh
bFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmso
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
KyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVU
eXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVs
c2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCBy
ZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyks
IHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGppdC5sb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwgcmVn
VDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlz
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBqaXQuYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVt
aXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7
CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgbm90R2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVt
aXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gaml0LmJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKCZqaXQpOworICAg
ICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
aml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMu
bGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0g
aml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGlu
aygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAot
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKKyAgICAgICAg
c2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1ZVBy
b2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAg
ICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mUHJvZmlsZSgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlBy
b2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
ZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUp
OwogfQogCi0jZGVmaW5lIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5
cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9nZXRf
ZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0g
ICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2
ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0p
OyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHJlc29s
dmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAot
ICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJB
VE9SKQotI3VuZGVmIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVH
ZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBm
dW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1
c2UKQEAgLTI0NzEsODYgKzI1NjgsNzkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi12b2lk
IEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9y
ZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxl
SW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNo
cG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQ
dHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
IHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0
ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZp
cm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIp
KSk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBi
eXRlY29kZS5tX3Njb3BlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRl
Y29kZSk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVU
eXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0
dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAotICAgIGF1dG8gZW1pdENvZGUg
PSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJh
bmQpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisK
KyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAg
ICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xv
dCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24n
dCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRk
aXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5q
ZWN0aW9uLgorICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0
aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUg
R2xvYmFsT2JqZWN0LgorICAgICAgICAgICAgLy8gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3Bl
IGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgbG9h
ZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0ciha
ZXJvLCByZWdUMSkpOworICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVy
ZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSkpOworCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMik7CiAKICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2
b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkp
OworICAgICAgICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICAgICAg
ICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMyk7CiAgICAgICAgICAgICB9
KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwg
cmVnVDEpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVn
VDEpOwogICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJl
Z1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMywg
cmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgLy8gT09QUzogd291bGQgYmUgbmljZSB0byBo
YXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgR1BSUmVncyBpbnN0ZWFkIG9mIFZScworICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAg
ICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2Ug
R2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2Nr
KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7Ci0gICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0g
ICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZl
VHlwZSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDApOworCisg
ICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLmlu
aXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
IHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVj
YXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3Rh
dGljYWxseS4KLSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAg
ICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9j
YXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCksIHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJlZ1QxKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRh
dGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBl
bWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3Qp
LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKworICAg
ICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRO
b3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDEpOworCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QwKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxkIGJlIG5pY2UgdG8gaGF2
ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciB2YWx1ZS4KKyAgICAgICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoK
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xv
c3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50
U2V0KTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBv
aW50U2V0KCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7Cisg
ICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QwKTsKKyAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVn
VDEsIEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxk
IGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciBvd25lci92
YWx1ZS4KICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6
CkBAIC0yNTY0LDU4ICsyNjU0LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShj
b25zdCBJbnMKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBp
c0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRv
IHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAg
ICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0
aGlzKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKKyAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1cmVW
YXIvIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21waWxl
IHRoaW5ncworICAgIC8vIHRoYXQgd2F5IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2UndmUg
cHJvdmVuIHRoYXQgaXMgdGhlIHR5cGUgd2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJlVmFy
LAorICAgIC8vIGFsbCBDb2RlQmxvY2tzIHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUgQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFyCisg
ICAgLy8gaWYgdGhlIHZhciBpbmplY3Rpb24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYgaXQg
aXMgZmlyZWQsIHRoZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0CisgICAg
Ly8gbWF0dGVyIHdoYXQgdHlwZSB3ZSBhcmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcik7
CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIp
CisgICAgICAgIGVtaXRDb2RlKFJlc29sdmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJv
ZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAg
ICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVs
c2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRh
dGEubV9nZXRQdXRJbmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1Qw
KTsKICAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVn
VDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOwogICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRo
aXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OwogCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7
CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFy
LmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAg
ICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5s
aW5rKHRoaXMpOwogCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zLmxpbmsodGhpcyk7CiAKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAog
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAg
ICAgYnJlYWs7CiAgICAgfQogfQogCkBAIC0yNjI0LDE4ICsyNzA4LDIxIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Nj
b3BlPigpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhi
eXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFy
KSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAg
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJZiBh
bnkgbGlua2VkIENvZGVCbG9jayBzYXcgYSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBDb2Rl
QmxvY2tzIGFyZSBndWFyYW50ZWVkCisgICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZhci4K
ICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0
ZV9lcnJvcik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0VG9TY29wZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJndW1l
bnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CiAgICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAg
ICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CkBAIC0yNzAxLDcgKzI3ODgs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRk
cmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyODQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFs
X2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVj
b2RlLm1faW5kZXg7CkBAIC0yNzY3LDcgKzI4NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
aW50ZXJuYWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBs
PD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIApAQCAtMjc4OSw3ICsyODc1LDYgQEAgdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X3ZhbDxPcAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0
ZWNvZGUubV9tb2RlOwpAQCAtMjgwNSw3ICsyODkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAv
LyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3Bl
Y2lhbCBjYXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRh
ZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93
blN0cnVjdHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jaykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpPd25TdHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVn
VDM7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRv
ckdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVy
bywgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1vZGVT
ZXRPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25T
dHJ1Y3R1cmVNb2RlKSkpOwpAQCAtMjg0Nyw3OCArMjkzMiw4NyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZh
bD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29k
ZS5tX2VudW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAgYXV0byByZXN1
bHRHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5l
RW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lz
dGVyczo6c2NyYXRjaDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5l
RW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0
Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7
CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9y
TWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BFbnVtZXJhdG9y
R2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNo
Mik7CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIpOworICAgIHN0b3JlOFRvTWV0YWRhdGEo
c2NyYXRjaDIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNl
dE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsK
ICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgotICAgIEp1bXAg
aXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVz
dGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlzTm90T3duU3RydWN0
dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBK
dW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsK
KyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVx
dWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBvZmZz
ZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDMpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJZiBpbmRleCBpcyBs
ZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQn
cyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWdu
RXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAs
IHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQorICAgIEp1bXAgb3V0T2ZMaW5lQWNj
ZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7
CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQo
QmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVt
cCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5l
QWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVn
VDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVn
VDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7
CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBz
Y3JhdGNoMik7CiAgICAgY29uc3RleHByIGludHB0cl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9
IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGlu
dHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BS
KTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQo
anVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4
KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1
cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEp
OworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2Rl
LCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFk
YXRhKCkpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7Ci0gICAgSnVt
cCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgSnVtcCBpc05vdElu
ZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVwbGFjZSB0aGUgc3Ry
aW5nIHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJl
Z1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9wZXJ0eUdQUik7CiAK
ICAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQ
Uik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpHZXRCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQo
Z2VuKTsKIAogICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTI3LDEwICszMDIxLDkgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlW
YWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigp
LCBpdGVyKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNs
b3dQYXRoRnVuY3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29k
ZVR5cGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2
b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0
aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7
CkBAIC0yOTM5LDcgKzMwMzIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9w
ZXJ0eUltCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihtb2RlLCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFk
YXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgcmVn
VDEpOworICAgIG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1Qx
LCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0
YSgpKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkp
OwogCkBAIC0zMDI4LDYgKzMxMjMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlND
ZWxsKiBvd25lcgogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0K
IAordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQoreworICAgIEp1bXAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNl
bGVjdFNjcmF0Y2hHUFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0Myw3ICsxNTQzLDcgQEAgc3RhdGlj
IHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogCiB2b2lkIHVubGlua0NhbGwoVk0m
IHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5JZihPcHRp
b25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5m
by5mYXN0UGF0aFN0YXJ0KCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3Nl
bWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJ
bmZvKSk7CiAgICAgCiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElT
dHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PigpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29y
a2luZyBjb3B5KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpu
c3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0
LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5h
bWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
cmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAg
ICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsg
VW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0
YWRhdGEodDEsIHQyKQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBU
YWdPZmZzZXRbY2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcg
QEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1l
dGFkYXRhIGluIHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0Miwg
LnNsb3cpCiAgICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAg
ICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVV
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQog
ICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAg
ZW5kKQogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChz
aXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRl
QXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6
Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQK
LQogICAgIG1ldGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMy
VGFnLCAub3BOZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdh
dGVTbG93CiAgICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJ
bnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUlu
dCwgdDUsIHQzKQogICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50
OgogICAgIGJpYSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAw
MDAwLCB0MQotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAg
dXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUs
IHQzKQogICAgIHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsx
MTA3LDYgQEAgZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9w
Y29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAg
ICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3Jv
IGFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0
NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQo
bV9yaHMsIHQyKQogICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAg
bWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0Miwg
SW50MzJUYWcsIC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90
SW50Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVw
ZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwg
dDUsIHQyKQogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9u
QW5kU3RvcmUodDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0x
MTM2LDEyICsxMTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwg
b3AKICAgICAgICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93
ZXN0VGFnLCAub3AxTm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywg
LnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAg
ICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVt
YmVySW50LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFO
b3RJbnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0
MywgZnQxCi0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisg
ICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmls
ZU51bWJlck51bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0
KG1fZHN0LCB0MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3
IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBG
aXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMg
ZGVmaW5pdGVseSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0Mywg
TG93ZXN0VGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVt
YmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0
aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAg
ICBmaWkyZCB0MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4
ICs0NDEsMTMgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAg
bW92ZSBQQywgYTEKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAg
ICAgICBidHB6IHIwLCAucmVjb3ZlcgotCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisgICAg
ICAgICAgICAjIEJhc2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBj
b25zdGFudCBwb29sLgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAg
ICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAgICBs
b2FkcCBDb2RlQmxvY2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwogICAg
ICAgICAgICAgaWYgQVJNNjRFCiAgICAgICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25z
dGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6Omxv
b3BPU1JFbnRyeSkgKiBQdHJTaXplLCBhMgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBOYXRp
dmVUb0pJVEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYgQEAg
c3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChv
cGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRo
UHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRh
ZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAg
ICAgICBlbmQKLQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2Zy
LCB0MCwgOF0sIHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3MCw3
IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50
ZWdlck9wZXJhdGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAg
ICAgIHN0b3JlcSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShB
cml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0
cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAg
IC5zbG93OgpAQCAtMTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFk
YXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRh
ZGF0YSwgcmV0dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAg
ICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQw
KQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRh
KHQxLCB0MikKQEAgLTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9u
ZWdhdGUsIE9wTmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cK
ICAgICBuZWdpIHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2Zp
bGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRl
LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0NCkKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJ
bnQ6CiAgICAgYnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgw
MDAwMDAwMDAwMDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51
bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxl
TnVtYmVyLCB0MSwgdDQpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2
NCwxMCArMTE2MCw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AK
ICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0
YWRhdGEodDUsIHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAg
IG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmlu
YXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldCht
X3JocywgdDApCiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUoc2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmluYXJ5
T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAg
ICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAg
ICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQ0KQogICAgICAg
ICBkaXNwYXRjaCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBAQCBt
YWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEs
IG51bWJlclRhZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZx
MmQgdDEsIGZ0MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAg
ICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxl
TnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAu
b3AxTm90SW50T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkK
KyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9m
aWxlTnVtYmVySW50LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90
SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA2LDcgKzExOTgsNyBAQCBt
YWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qg
b3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5v
dC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAu
c2xvdwotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVy
LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcs
IHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgxODY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTU2LDYgKzI1NTYsMTcgQEAgbWFjcm8gbm90U3VwcG9ydGVkKCkK
ICAgICBlbmQKIGVuZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0
cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1l
dGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgVW5h
cnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRw
ICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1w
CisgICAgb3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKwog
Ly8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0X1dJTiBjb25kaXRpb24gaGVy
ZSwgc2luY2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUgZmFsc2Ugb24gV2luZG93cwog
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNgogaWYgV0VC
QVNTRU1CTFkgYW5kIG5vdCBYODZfNjRfV0lOCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShyZXZpc2lvbiAyODE4Njgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDEwIEBAIHB1YmxpYzoKICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyKCkgPSBkZWZhdWx0OwogCiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVu
dGlmaWVyIGNyZWF0ZUZyb21DZWxsKEpTQ2VsbCogaWRlbnRpZmllcik7Ci0gICAgc3RhdGljIGlu
bGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgc3RhdGljIGlubGluZSBD
YWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhD
b2RlQmxvY2sqLCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBD
b2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIGNvbnN0IElk
ZW50aWZpZXImKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBz
dGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0
YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBDYWNoZWFibGVJ
ZGVudGlmaWVyIGNyZWF0ZUZyb21SYXdCaXRzKHVpbnRwdHJfdCByYXdCaXRzKSB7IHJldHVybiBD
YWNoZWFibGVJZGVudGlmaWVyKHJhd0JpdHMpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMu
aAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE0
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tU
eXBlKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCiB7CiAgICAgcmV0dXJuIGNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhjb2RlQmxvY2ssIGkuaW1wbCgpKTsKIH0K
IAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Citp
bmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2Rl
QmxvY2stPmhhc0lkZW50aWZpZXIodWlkKSk7CiAgICAgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZp
ZXIodWlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDcg
KzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNpZiBF
TkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9w
KE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9w
ZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0YS5t
X2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAgQVNT
RVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJ
KHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9CiAg
ICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAgc3Rh
dGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsg
fQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3Ry
dWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1
dGFibGVCYXNlOwpJbmRleDogU291cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQmFnLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9XVEYvd3RmL0Jh
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG90
aGVyLm1faGVhZCA9IG51bGxwdHI7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
KyAgICBCYWcmIG9wZXJhdG9yPShCYWc8VCwgVT4mJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlm
ICh1bndyYXBwZWRIZWFkKCkgPT0gb3RoZXIudW53cmFwcGVkSGVhZCgpKQorICAgICAgICAgICAg
cmV0dXJuICp0aGlzOworCisgICAgICAgIEJhZyBkZXN0cm95OworICAgICAgICBkZXN0cm95Lm1f
aGVhZCA9IHVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVk
SGVhZCgpOworICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOworCisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisKICAgICB+QmFnKCkKICAgICB7CiAgICAgICAgIGNsZWFyKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437108</attachid>
            <date>2021-09-01 19:50:27 -0700</date>
            <delta_ts>2021-09-02 17:31:09 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>406682</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MTg2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODMxLDYgKzgzMSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IH07CiAJ
CTUyRUVENzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFRUQ3OTMyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgw
MDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIw
MDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVk
U291cmNlMy1tbS5tbSAqLzsgfTsKQEAgLTE0MTYsMTAgKzE0MTcsMTAgQEAKIAkJQTM4Q0E1OUUy
NkREODRERTAwQzhEODRDIC8qIElTTzg2MDEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEzOENBNTlDMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmgg
Ki87IH07CiAJCUEzOEQyNTBFMjU4MDBENDQwMDQyQkZERCAvKiBKU0FycmF5QnVmZmVyUHJvdG90
eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTM4RDI1MEQyNTgwMEQ0MzAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxp
bmVzLmggKi87IH07CiAJCUEzOEQ1QkZDMjY2NkQzREEwMEExMDlBNiAvKiBJbkJ5U3RhdHVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzhENUJGQTI2
NjZEM0RBMDBBMTA5QTYgLyogSW5CeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUEzRUU4NTQzMjYyNTE0QjAwMEZDOUI4RCAvKiBJbnRs
V29ya2Fyb3VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMzc2MTk0MDI2MjUxMjdDMDBDQkNCQTkgLyogSW50bFdvcmthcm91bmQuY3BwICovOyB9
OwogCQlBM0M3RURCNjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VE
QjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLzsgfTsK
IAkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIzMjZCMERCMzcw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmggKi87IH07CiAJCUEzQzdFREJBMjZCMERCMzgw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAv
KiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKKwkJQTNFRTg1NDMyNjI1MTRC
MDAwRkM5QjhEIC8qIEludGxXb3JrYXJvdW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzNzYxOTQwMjYyNTEyN0MwMENCQ0JBOSAvKiBJbnRsV29y
a2Fyb3VuZC5jcHAgKi87IH07CiAJCUEzRkY5QkM3MjIzNDc0OTEwMEIxQTlBQiAvKiBZYXJyRmxh
Z3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRkY5
QkM1MjIzNDc0NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyog
SmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTUwM0ZBMTQxODhFMEZBRjAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJh
bWUuaCAqLzsgfTsKIAkJQTUwM0ZBMUUxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENh
bGxGcmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTUwM0ZBMTgxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZVByb3RvdHlwZS5oICovOyB9OwpAQCAtMzY2Nyw2ICszNjY4LDggQEAKIAkJNTJDRDBGNjQyMjQy
RjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBwYXRoID0gZGZnL3Rlc3Rk
ZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQxMzA4RjIyMUNFMDNBMDA5
QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0g
Zm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNjI2RTAzOUIzMDA1
NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VsaW5lSklUQ29k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNzI2RTAzOUI0MDA1NEU0
MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VsaW5lSklU
Q29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkyMjQ5MkI4Njgw
MDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5j
dGlvbkFsbG93bGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkz
MjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
dW5jdGlvbkFsbG93bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1
QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI1Niw2ICs2MjU5LDggQEAKIAkJCQk2Qjc2N0U3QTI2
NzkxRjI3MDAxN0Y4RDEgLyogQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaCAqLywKIAkJCQk3MjM5
OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLywKIAkJCQk3MjM5
OThGNTI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8sCisJCQkJNTJERDAw
MDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8sCisJCQkJNTJERDAw
MDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovLAogCQkJCTBGNjRCMjZG
MUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGNjRCMjcwMUE3
ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4MzkyRDFCQUNBOUQz
MDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApAQCAtOTY5Niw2ICs5NzAxLDcgQEAK
IAkJCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTgg
LyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlDQzg5MTkzQUM2MEEw
MDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzYx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgko
cmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91cCA6
UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAg
IHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRUeXBl
cywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRhdGE6
IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJp
dGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZhbHVl
UHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5SW5Q
bGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDogVmly
dHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAg
ICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZQor
ICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDp0
b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRzdDog
VmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWdu
ZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5
QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioK
ICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
T3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBA
IFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJu
ICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
K3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4
KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhw
ciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dp
dGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3lt
Ym9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRvclByb2Zp
bGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dDogcmV0dXJuIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYg
Y29uc3RleHByIChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3JfbmV4dCkgeworICAg
ICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JO
ZXh0Ojpjb21wdXRlTmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0
UmVzdWx0UHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXREb25lOiBy
ZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkRvbmVQcm9maWxlKCk7CisgICAgICAg
IGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZlZhbHVlUHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSBlbHNlIAorICAgICAgICByZXR1cm4g
Qnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGVNZXRhZGF0YT4KIGJvb2wgaGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2Rl
TWV0YWRhdGEmIG1ldGFkYXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlu
a0luZm86OnVubGluayhWTSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwog
fQogCi1Db2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZh
c3RQYXRoU3RhcnQoKQotewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4obV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBS
RUxFQVNFX0FTU0VSVCghaXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2Fs
bExpbmtJbmZvOjpzZXRNYXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gdmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoaXNEaXJlY3QoKSAmJiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsK
K30KKwogdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBo
YW5kbGVTcGVjaWZpY0NhbGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgs
MjMgKzI5OSwxMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAg
ICAgbV9mcmFtZVNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMg
dXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNU
YWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAg
ICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJS
ZWcpOwotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyks
IGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0g
Y2FsbExpbmtJbmZvR1BSOwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5s
YWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50
ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBzbG93UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVz
ZURhdGFJQyA9PSBVc2VEYXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIp
OyAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyAr
MzEyLDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAg
ICAgICAgZ29Qb2x5bW9ycGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9u
WmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWND
YWxsZWVNYXNrKSk7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAg
fQotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7
CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1v
cnBoaWMubGluaygmaml0KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBz
dGFjayBwcmVwLgogICAgICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwg
SlNFbnRyeVB0clRhZyk7CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNo
UHRyV2l0aFBhdGNoKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hl
Y2ssIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAg
ICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsK
ICAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mbyk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
dS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihjYWxsZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEz
ICszNDQsMzQgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDIHVzZURhdGFJQykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIG51bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisK
KyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0lu
Zm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1
LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJ
bmZvR1BSLCB1c2VEYXRhSUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBV
c2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxD
YWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxs
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNU
YWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwg
Y2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7
CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0
UGF0aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6
Tm8sIGlzVGFpbENhbGwoKSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVn
KTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwg
Y2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNG
YXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7Cisg
ICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxM
aW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxD
YWxsKSk7CiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2Fs
bEhlbHBlcnMmIGppdCkKQEAgLTM2OSwxNyArMzgxLDMwIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0U2xvd1BhdGgoVk0mIHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50
cnlQdHJUYWcpOwogfQogCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZN
JiwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0
Lm1vdmUoY2FsbExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERl
c3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86Omlu
aXRpYWxpemVEYXRhSUMoVk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxs
TGlua0luZm8sIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7Cisg
ICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29k
ZUluZGV4KTsKKyAgICBzZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNh
bGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25l
TG9jYXRpb247CisgICAgaWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEp
CisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZs
ZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzog
dGltZSBmb3IgcmVmIGNvdW50aW5nPworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVz
KTsKKyAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAg
ICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwog
dm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRh
SUNzKFVzZURhdGFJQzo6Tm8pOwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVs
KCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQu
bmVhckNhbGwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CiAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CkBAIC0zOTcsNyArNDIyLDcg
QEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhcwogCiAgICAgYXV0byBm
YXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgICAg
IHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKICAgICB9KTsKIAogICAgIC8vIC0gSWYgd2UncmUg
bm90IHlldCBsaW5rZWQsIHRoaXMgaXMgYSBqdW1wIHRvIHRoZSBzbG93IHBhdGguCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lv
biAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDExIEBAIGNsYXNzIEpTRnVuY3Rpb247CiBl
bnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiBzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGE7CiAK
K3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbzsKKwogY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVi
bGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIHB1YmxpYzoKLSAgICBl
bnVtIENhbGxUeXBlIHsKKyAgICBlbnVtIENhbGxUeXBlIDogdWludDhfdCB7CiAgICAgICAgIE5v
bmUsCiAgICAgICAgIENhbGwsCiAgICAgICAgIENhbGxWYXJhcmdzLApAQCAtMTY1LDYgKzE2Nyw4
IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgfQogCisg
ICAgdm9pZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgVW5saW5rZWRDYWxsTGlua0luZm8mLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKwogICAgIEdQUlJlZyBjYWxs
ZWVHUFIoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsgfQogICAgIAogICAgIGVudW0gY2xh
c3MgVXNlRGF0YUlDIDogdWludDhfdCB7CkBAIC0xNzMsMTMgKzE3NywxNiBAQCBwdWJsaWM6CiAg
ICAgfTsKIAogcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQ
YXRoSW1wbChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBib29sIGlzVGFp
bENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5V
U0VEX1JFVFVSTjsKIHB1YmxpYzoKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5V
U0VEX1JFVFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxs
KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OworCisgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOworCiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247CiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb247
CiAgICAgdW5pb24gVW5pb25UeXBlIHsKQEAgLTM5Nyw2ICs0MDAsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsTG9j
YXRpb247CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0
clRhZz4gbV9jYWxsZWVMb2NhdGlvbjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IG1fc2xvd1BhdGhTdGFydDsKKyAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKICAgICAgICAgfSBjb2Rl
SUM7CiAgICAgfSB1OwogCkBAIC00MjQsNiArNDI4LDEzIEBAIGlubGluZSBDb2RlT3JpZ2luIGdl
dENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4o
KTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0
aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJbmZv
OjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVE
YXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNyArMzcwLDgg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2FuJ3Qg
Z2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJvY2Vz
cyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJvZHVj
ZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5lc3Mg
YW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2YgYW4g
VW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhlIGxp
dmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNpZGUg
VW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBiZXR3
ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhlIGJ5
dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5nIGFu
IFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CkBAIC00NjYsNiArNDY3
LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAg
YnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRD
b2RlLT5iaW5hcnlBcml0aFByb2ZpbGUoYnl0ZWNvZGUubV9wcm9maWxlSW5kZXgpOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorI2RlZmluZSBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklM
RShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURB
VEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2Vk
Q29kZS0+dW5hcnlBcml0aFByb2ZpbGUoYnl0ZWNvZGUubV9wcm9maWxlSW5kZXgpOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0
cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MjgsMTQgKzU0MiwxNCBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQ
cm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTkso
T3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAg
IExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcElu
YykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BN
dWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAg
ICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktf
V0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5B
UllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc4OSw2ICs4MDMs
NzggQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3du
ZXJFZGdlLnNldCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZt
LCB0aGlzKSk7CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5l
Q29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPiBqaXRDb2RlKQoreworICAgIHNldEpJVENvZGUoaml0
Q29kZS5jb3B5UmVmKCkpOworCisgICAgeworICAgICAgICBjb25zdCBhdXRvJiBqaXRDb2RlTWFw
ID0gdGhpcy0+aml0Q29kZU1hcCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7CisgICAgICAgICAgICBIYW5kbGVySW5m
byYgaGFuZGxlciA9IGV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAvLyBGSVhNRTog
PHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KKyAgICAgICAgICAgIGhhbmRsZXIubmF0aXZlQ29k
ZSA9IGppdENvZGVNYXAuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdn
ZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2ppdERhdGEpOworICAgIGF1dG8gaml0RGF0YSA9IG1ha2VVbmlxdWU8
SklURGF0YT4oKTsKKworICAgIGppdERhdGEtPm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0
b3I8dm9pZCo+KGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgeworICAg
ICAgICBhdXRvIGVudHJ5ID0gaml0Q29kZS0+bV9jb25zdGFudFBvb2wuYXQoaSk7CisgICAgICAg
IHN3aXRjaCAoZW50cnkudHlwZSkgeworICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6R2xvYmFsT2JqZWN0OgorICAgICAgICAgICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2xb
aV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7CisgICAgICAgICAgICBV
bmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8gPSAqc3RhdGljX2Nhc3Q8
VW5saW5rZWRDYWxsTGlua0luZm8qPihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAgICAgIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0RGF0YS0+bV9jYWxsTGlua0luZm9zLmFkZChDb2Rl
T3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAg
IC8vIE9PUFM6IGRvbid0IGhhcmRjb2RlIHRoZXNlIHJlZ2lzdGVycyBsaWtlIHRoaXMuCisgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPmluaXRpYWxpemVEYXRhSUModm0oKSwgdW5saW5rZWRDYWxs
TGlua0luZm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICBq
aXREYXRhLT5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGNhbGxMaW5rSW5mbzsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbzogeworICAgICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byYgdW5saW5rZWRTdHViSW5mbyA9ICpzdGF0aWNfY2FzdDxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKj4oZW50cnkucGF5bG9hZCk7CisgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBqaXREYXRhLT5tX3N0dWJJbmZvcy5hZGQodW5saW5rZWRTdHViSW5mby5hY2Nlc3NU
eXBlLCBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAg
ICAgICAgc3R1YkluZm8tPmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyh0
aGlzLCB1bmxpbmtlZFN0dWJJbmZvKTsKKyAgICAgICAgICAgIGppdERhdGEtPm1faml0Q29uc3Rh
bnRQb29sW2ldID0gc3R1YkluZm87CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsOiB7CisgICAgICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxv
YWQpOworICAgICAgICAgICAgaml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlv
bkRlY2woaW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwcjogeworICAgICAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wYXlsb2FkKTsKKyAg
ICAgICAgICAgIGppdERhdGEtPm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25FeHByKGlu
ZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIW1faml0RGF0YSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7CisgICAgICAgIG1faml0RGF0YSA9IFdURk1vdmUoaml0RGF0YSk7CisgICAgfQorCisg
ICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBHbG9iYWxDb2RlOgorICAgIGNhc2Ug
TW9kdWxlQ29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgorICAgICAgICBtX3Nob3VsZEFsd2F5c0Jl
SW5saW5lZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZ1bmN0aW9uQ29kZToK
KyAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNl
IHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgorICAgICAgICAvLyBEb24ndCBvdmVy
cmlkZSB0aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAm
PSBjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlv
bih0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiBDb2RlQmxvY2s6On5Db2RlQmxv
Y2soKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtMzA3OSw3ICszMTY1LDcgQEAgdW5zaWdu
ZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJl
Z2lzdGVyQ291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJD
b3VudEZvcih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMjk1LDEzICszMzgxLDEzIEBAIEJpbmFyeUFy
aXRoUHJvZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNv
ZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wQWRk
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFz
PE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfbXVs
OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5t
X2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8
T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBw
Yy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBv
cF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1f
YXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRo
aXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTMzMTMsMTEgKzMzOTksMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6dW5h
cnlBcml0aAogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX25l
Z2F0ZToKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcyku
bV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAgICAgIHJldHVy
biAmcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAg
ICByZXR1cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwog
ICAgIGNhc2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERlYz4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiQXJyYXlQcm9maWxlLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2Rl
LmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkNhbGxMaW5r
SW5mby5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKQEAgLTE1OCw3ICsxNTksOSBAQCBw
dWJsaWM6CiAgICAgTWV0YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWV0YWRhdGEuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25z
dCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6CiAgICAgdm9pZCBzZXROdW1Q
YXJhbWV0ZXJzKHVuc2lnbmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPZkFyZ3VtZW50
c1RvU2tpcDsgfQogCkBAIC0xNjcsNyArMTcwLDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51
bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KICAgICB1bnNpZ25lZCBudW1UbXBz
KCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhO
dW1DaGVja3BvaW50VG1wczsgfQogCi0gICAgdW5zaWduZWQqIGFkZHJlc3NPZk51bVBhcmFtZXRl
cnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX251bVBhcmFtZXRlcnMpOyB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7
IH0KQEAgLTIzMiwxNiArMjM0LDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVkVk1U
cmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3BvaW50
cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykK
LSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYmFjayB0aGUgb3B0aW1p
emF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlzIGB0aGlzYCBhbmQgd2UncmUg
aW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCi0gICAgICAg
ICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKLQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAgIHJldHVybiByZWcub2Zmc2V0
KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAtMjY2LDggKzI1OCwxMCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBnZXRJQ1N0YXR1c01hcChJQ1N0YXR1c01hcCYgcmVzdWx0KTsKICAg
ICAKICNpZiBFTkFCTEUoSklUKQorICAgIC8vIE9PUFM6IG1vdmUgYXJpdGhtZXRpYyBJQ3MgYW5k
IHN3aXRjaCB0YWJsZXMgb3V0IG9mIGhlcmUsIGFuZCBvbnRvIEpJVENvZGUuCiAgICAgc3RydWN0
IEpJVERhdGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICAgICAgQmFnPFN0
cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKICAgICAgICAgQmFnPEpJVEFkZElDPiBtX2Fk
ZElDczsKQEAgLTI4Miw5ICsyNzYsMTMgQEAgcHVibGljOgogICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wg
bV9oYXNDYWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0
Q29kZU1hcDsKKworICAgICAgICBGaXhlZFZlY3Rvcjx2b2lkKj4gbV9qaXRDb25zdGFudFBvb2w7
CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwgbV9qaXRDb25zdGFudFBvb2wpOyB9CiAgICAg
fTsKIAorICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5l
SklUQ29kZT4pOworCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkK
QEAgLTI5Myw2ICsyOTEsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIEpJVERhdGEmIGVuc3VyZUpJ
VERhdGFTbG93KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwogCisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX2ppdERhdGEpOyB9CisKICAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQ
cm9maWxlKik7CiAgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSop
OwogICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwpAQCAtMzIy
LDE1ICszMjIsMTAgQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZv
TWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0lu
Zm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAg
Ci0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAgIHsK
LSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBlbnN1
cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKLSAg
ICB9CiAgICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCiAgICAgewotICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVK
SVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOworICAgICAgICBBU1NFUlQoaml0VHlwZSgpID09
IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2Vs
aW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1faml0Q29kZU1hcDsKICAgICB9CiAKICAg
ICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdp
bk1hcD4mJik7CkBAIC00NzIsNiArNDY3LDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5hbWVG
b3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50
VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1l
dGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKQEAgLTU3Miw2ICs1NjgsNyBAQCBwdWJsaWM6
CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBy
ZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXS5nZXQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
IGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbihyZWcpOyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24g
Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihp
bmRleCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVm
ZmVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9jb25zdGFudFJlZ2lz
dGVycykgKyBkZWNsdHlwZShtX2NvbnN0YW50UmVnaXN0ZXJzKTo6ZGF0YU1lbW9yeU9mZnNldCgp
OyB9CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsg
cmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZG
dW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNjAx
LDYgKzU5OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7
CiAgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKICAgICB9CisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShp
bnQgdGFibGVJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRD
b2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwor
ICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxl
cygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29k
ZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTYxMSw2ICs2MTMs
MTEgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwogICAgICAg
ICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07
CiAgICAgfQorICAgIFN0cmluZ0p1bXBUYWJsZSYgYmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUoaW50IHRhYmxlSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5l
SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVy
T2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOyB9CkBAIC03OTcsNiArODA0LDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3Rz
OyB9CiAgICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1
Z2dlclJlcXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVx
dWVzdHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVx
dWVzdHMpOyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2lu
dHMpOwogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykK
QEAgLTgzOCw2ICs4NDYsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2Nr
IG1fbG9jazsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJp
dGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBF
TkFCTEUoSklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBE
Rkc6OkNhcGFiaWxpdHlMZXZlbApAQCAtOTA2LDExICs5MTUsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQ29kZUJsb2NrLCBtX21ldGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKTsgfQogCi0gICAgYm9vbCBsb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCi0gICAgewotICAgICAgICAvLyBT
b21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRo
ZXkgcnVuLgotICAgICAgICByZXR1cm4gIW1fdW5saW5rZWRDb2RlLT5pc0J1aWx0aW5GdW5jdGlv
bigpOwotICAgIH0KKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9y
RnV6emluZ0Vhcmx5UmV0dXJuKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluYWxpemVM
TEludElubGluZUNhY2hlcygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAy
ODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcChDb2RlQmxvY2sqIGNvZGVC
bG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBB
bmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisKKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkocmV2aXNpb24gMjgxODY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRN
b2RlTWV0YWRhdGEKIAogc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCB7CiAg
ICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0
YWRhdGFBcnJheUxlbmd0aCwgYXJyYXlQcm9maWxlKTsgfQogfTsKIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCkgPT0gMTIpOwogCkBAIC04OCw2ICs4
OSw3IEBAIHVuaW9uIEdldEJ5SWRNb2RlTWV0YWRhdGEgewogICAgICAgICBHZXRCeUlkTW9kZSBt
b2RlOwogICAgICAgICB1aW50OF90IGhpdENvdW50Rm9yTExJbnRDYWNoaW5nOyAvLyBUaGlzIG11
c3QgYmUgemVybyB3aGVuIHdlIHVzZSBQcm90b0xvYWQgbW9kZS4KICAgICB9OworICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5
SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YURlZmF1bHQg
ZGVmYXVsdE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0IHVuc2V0TW9kZTsKICAg
ICBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggYXJyYXlMZW5ndGhNb2RlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJl
dmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODUsNiArMzg1LDggQEAgYm9vbCBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKAogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5l
OwogfQogCisvLyBPT1BTOiBNYWtlIHRoaXMgc3R1ZmYgd29yayB3aXRoIGRhdGEgaWNzIHRvIG5v
dCBhc3N1bWUgaW5saW5lIGFjY2Vzcy4KKwogdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJB
c0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPiB0YXJnZXQpCiB7CiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsK
QEAgLTQwNCw5ICs0MDYsMTIgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJ
bkFjYwogdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFyZ2V0KQogewogICAgIGlmIChjb2RlQmxvY2st
PnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIE9PUFM6IG1ha2Ugc29tZSB2ZXJzaW9uIG9mIElu
bGluZUFjY2VzcyBmb3IgYmFzZWxpbmUuIFBlcmhhcHMgbWFrZSBpdCBkYXRhIGRyaXZlbi4gT3Ig
cGVyaGFwcyBoYXZlIHRoZSBjb2RlCisgICAgICAgIC8vIGJlIHNoYXJlZCBzb21laG93IGJldHdl
ZW4gVW5saW5rZWRDb2RlQmxvY2tzLgorCiAgICAgICAgIC8vIElmIGl0IGlzIG5vdCBHZXRCeUlk
LWxpa2UtdGhpbmcsIHdlIGRvIG5vdCBlbWl0IG5vcCBzbGVkIChlLmcuIEdldEJ5VmFsKS4KICAg
ICAgICAgLy8gVGhlIGNvZGUgaXMgYWxyZWFkeSBhbiBpbmRpcmVjdCBqdW1wLCBhbmQgb25seSB0
aGluZyB3ZSBzaG91bGQgZG8gaXMgcmVwbGFjaW5nIG1fY29kZVB0ci4KLSAgICAgICAgaWYgKHN0
dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikgeworICAgICAgICBpZiAoY29kZUJsb2NrLT5q
aXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgJiYgc3R1YkluZm8uaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyKSB7CiAgICAgICAgICAgICAvLyBJZiBtX2NvZGVQdHIgaXMgcG9pbnRpbmcgdG8g
c3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLCB0aGlzIG1lYW5zIHRoYXQgSW5saW5lQWNj
ZXNzIGNvZGUgaXMgbm90IGEgc3R1YiBvbmUuCiAgICAgICAgICAgICAvLyBXZSByZXdyaXRlIHRo
aXMgd2l0aCB0aGUgc3R1Yi1iYXNlZCBkaXNwYXRjaGluZyBjb2RlIG9uY2UsIGFuZCBjb250aW51
ZSB1c2luZyBpdCB1bnRpbCB3ZSByZXNldCB0aGUgY29kZS4KICAgICAgICAgICAgIGlmIChzdHVi
SW5mby5tX2NvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSA9PSBzdHViSW5mby5zbG93UGF0aFN0
YXJ0TG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkgewpAQCAtNDIxLDYgKzQyNiw3IEBAIHZv
aWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICAgICAgICAgICAgICB9
KSwgIklubGluZUFjY2VzczogbGlua2luZyBzdHViIGNhbGwiKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQorCiAgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHRhcmdldDsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVy
YXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBPVkVSTE9BRF9CSVRXSVNFX09QRVJBVE9SU19G
T1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJdGVyYXRpb25Nb2RlTWV0YWRhdGEgewogICAgIHVpbnQ4
X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTZWVuTW9k
ZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSXRlcmF0aW9uTW9kZU1ldGFkYXRhLCBzZWVu
TW9kZXMpOyB9IAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHNlZW5Nb2Rlcykp
ID09IHNpemVvZihJdGVyYXRpb25Nb2RlKSk7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgx
ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAg
IEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExMSW50Q2FsbExpbmtJ
bmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KIAogcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9jYWxs
ZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgeyB1bmxpbmtlZEJpdCB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAj
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50
aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNp
bmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKIApAQCAt
Mjg1LDYgKzI4Niw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMK
ICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2Ug
QWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2Nr
LCAqdGhpcywgUHV0QnlLaW5kOjpCeVZhbCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNj
ZXNzVHlwZTo6SW5CeUlkOgpAQCAtNDMwLDYgKzQzMiwyMDQgQEAgQUxXQVlTX0lOTElORSB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVUeXBlOwog
fQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5r
ZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBlID0gdW5saW5rZWRTdHViSW5mby5hY2Nlc3NU
eXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHViSW5mby5zdGFydDsgLy8gT09QUzogZG8gd2Ug
bmVlZCBhIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBkb25lTG9jYXRpb24gPSB1bmxpbmtlZFN0
dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93UGF0aFN0YXJ0TG9jYXRpb24gPSB1bmxpbmtl
ZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKyAgICBjYWxsU2l0ZUluZGV4ID0gQ2Fs
bFNpdGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIGNvZGVPcmln
aW4gPSBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgbV9j
b2RlUHRyID0gc2xvd1BhdGhTdGFydExvY2F0aW9uOworCisgICAgdXNlZFJlZ2lzdGVycyA9IFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICBpZiAoYWNjZXNzVHlw
ZSA9PSBBY2Nlc3NUeXBlOjpHZXRCeUlkICYmIHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9yX25leHQsIHdlIGNhbid0
IGNsb2JiZXIgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgZWl0aGVyLgorICAgICAgICB1c2VkUmVnaXN0
ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gpOworICAgIH0KKworICAg
IHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25J
bkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5C
eUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0
dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAg
ICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAg
ICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHVi
SW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRl
RmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlk
U2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAg
ICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1
dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFN
b2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9w
dGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0
OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkK
KyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
dW5saW5rZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRp
b25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxT
ZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
blNldFByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5
VmFsOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFz
ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJv
cGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAg
dmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1f
c3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAgICAgICBoYXND
b25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxC
eUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7
CisgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIHZhbHVlR1BS
ID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MucHJv
dG90eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICAgICAg
bV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVCcmFuZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdz
LnByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAg
ICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAg
bV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBoYXNDb25z
dGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAg
ICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgIGNhc2Ug
QWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6
CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhp
c0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okdl
dEJ5SWRXaXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAg
ICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOwor
ICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0
ZXJzOjp0aGlzVmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsK
KyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFz
ZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVO
YW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFz
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJv
cGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAg
dmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9z
dHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAg
ICBpZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQdXRCeVZhbCkKKyAgICAgICAgICAgIG1f
YXJyYXlQcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAg
ICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAg
ICAgICByZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5k
OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKICNpZiBBU1NFUlRfRU5BQkxF
RAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y2hlY2tDb25zaXN0ZW5jeSgpCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5j
bHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJSZWdpc3Rl
clNldC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5o
IgpAQCAtNTYsNiArNTcsNyBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgewogICAg
IEdldEJ5VmFsLAogICAgIFB1dEJ5SWQsCiAgICAgUHV0QnlWYWwsCisgICAgUHV0UHJpdmF0ZU5h
bWUsCiAgICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC03
OCw2ICs4MCw4IEBAIGVudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKICAgICBTdHJpbmdM
ZW5ndGgKIH07CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworCiBjbGFzcyBT
dHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1
YkluZm8pOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtOTgsNiArMTAyLDggQEAg
cHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAorICAg
IHZvaWQgaW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayos
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mKTsKKwogICAgIERFQ0xBUkVfVklTSVRfQUdHUkVH
QVRFOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0
IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCkBAIC00NDcsNiAr
NDUzLDE4IEBAIGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW4KICAgICB9
CiB9CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVGaWVsZFB1dEtp
bmQgcHJpdmF0ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSB9Owor
ICAgIEVDTUFNb2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgpIH07CisgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4OworICAgIC8vIE9PUFM6IERvIHdlIG5lZWQgc3RhcnQgZm9y
IGRhdGEgSUNzPworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBz
dGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpi
eUlkIGNhY2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW5zdGFu
Y2VvZicgY2FjaGVzLgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRv
bmVMb2NhdGlvbjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4g
c2xvd1BhdGhTdGFydExvY2F0aW9uOworfTsKKwogI2Vsc2UKIAogY2xhc3MgU3RydWN0dXJlU3R1
YkluZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxNiw0ICszMTYsMTYgQEAgaW50IFVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2Zm
cwogICAgIHJldHVybiBtX291dE9mTGluZUp1bXBUYXJnZXRzLmdldChieXRlY29kZU9mZnNldCk7
CiB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorYm9vbCBVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRl
bnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIC8vIE9PUFM6IGRvIHdoYXQg
Q29kZUJsb2NrIGRvZXMgYW5kIG1ha2UgYSBoYXNoIHRhYmxlPworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRl
bnRpZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5
dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRG
R0V4aXRQcm9maWxlLmgiCkBAIC02Miw2ICs2Myw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2Nr
OwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBC
YXNlbGluZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtU
aW1lQ29uc3RhbnQgOiBpbnQzMl90OwogCkBAIC0xNzUsNiArMTc3LDcgQEAgcHVibGljOgogCiAg
ICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdp
c3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVC
YXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsg
fQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5k
ZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJl
Z2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25z
dGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1
cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIx
MCwxNSBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7
IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsK
KyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4
KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisg
ICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9u
cygpLmF0KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGlu
c3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9u
IC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1Np
emUoKSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2ln
bmVkIG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9
CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAt
MzM0LDYgKzM0NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXpl
SW5CeXRlcygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6
aW5nRWFybHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVx
dWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0
dXJuICFpc0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KKworI2lmIEFTU0VSVF9FTkFCTEVECisg
ICAgYm9vbCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CisjZW5kaWYKIAogcHJv
dGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUs
IGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwpA
QCAtMzk0LDYgKzQxNSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZXhpY2FsU2NvcGVG
ZWF0dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CisgICAg
UmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6
CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2Rl
IG1fcGFyc2VNb2RlOwpAQCAtNDEwLDYgKzQzMiw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09Q
UzogYmluZCBhIGJldHRlciBwbGFjZSB0byBzdG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxC
aW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5h
cnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtNDU1LDYgKzQ4MCwy
OCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChp
bnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0
KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZM
aW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRk
QmluYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1f
YmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxl
cy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAg
ICAgbV91bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKFVuYXJ5QXJpdGhQcm9maWxlKCkpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmlu
YXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxl
c1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25l
ZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQogCiBwcml2YXRlOgogICAg
IHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6
T2Zmc2V0LCBpbnQ+OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MTg2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKICAgICBi
b29sIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX2Nv
ZGVCbG9jay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9CiAgICAgYm9vbCBo
YXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50
cygpOyB9CiAgICAgYm9vbCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay0+aGFzVGFpbENhbGxzKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUo
KSB7IHJldHVybiBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCk7IH0KKyAgICB1
bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRV
bmFyeUFyaXRoUHJvZmlsZSgpOyB9CiAKICAgICAvLyBVcGRhdGluZyBVbmxpbmtlZENvZGVCbG9j
ay4KICAgICB2b2lkIHNldEhhc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFzQ2hl
Y2twb2ludHMoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFVubGlua2VkTWV0YWRhdGFUYWJsZSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIE9wY29kZT4KKyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNv
bnN0IE9wY29kZSYgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQp
OworICAgICAgICB1aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRU
YWJsZTMyKClbT3Bjb2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNv
ZGVJRF07CisgICAgICAgIHJldHVybiBiYXNlVHlwZU9mZnNldCArIHNpemVvZih0eXBlbmFtZSBP
cGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7CisgICAgfQorCiBwcml2YXRl
OgogICAgIGVudW0gRW1wdHlUYWcgeyBFbXB0eSB9OwogCkBAIC0xMDEsNiArMTA5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAg
ICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2
X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQCB0ZW1wbGF0
ZTx1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHNBcmd1bWVuCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFz
ZSB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1i
ZXJPZkJ1Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJl
ck9mU3BlY0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1
Y2tldEluZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJl
ck9mU3BlY0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQpAQCAtMTM0
LDcgKzEzMyw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgCiAgICAgICAg
IHJldHVybiBtX3ByZWRpY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgRW5jb2RlZEpTVmFsdWUg
bV9idWNrZXRzW3RvdGFsTnVtYmVyT2ZCdWNrZXRzXTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIG1f
cHJlZGljdGlvbiB7IFNwZWNOb25lIH07CkBAIC0xNTYsNiArMTU1LDcgQEAgc3RydWN0IFZhbHVl
UHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldAogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlIDogcHVi
bGljIFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4gewogICAgIFZhbHVlUHJv
ZmlsZSgpIDogVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPigpIHsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0c1swXSk7IH0KIH07CiAKIHN0cnVjdCBWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU5OCw3ICsxNTk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRVbmFy
eQogICAgICAgICBlbWl0VW5hcnlPcDxPcE5vdD4oZHN0LCBzcmMpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBz
cmMsIHR5cGUpOworICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSwg
bV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIG9wX2JpdG5vdDoKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BCaXRub3Q+KGRzdCwgc3Jj
KTsKQEAgLTE2OTYsMTMgKzE2OTYsMTMgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRUeXBlTwogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluYyhSZWdp
c3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBP
cEluYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmls
ZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdERlYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BEZWM6OmVtaXQodGhp
cywgc3JjRHN0KTsKKyAgICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5h
ZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2
ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqPgogICAgICAg
ICBlbWl0QmluYXJ5T3AoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3Rl
cklEKiBzcmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJp
bmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMpOworICAgICAgICAgICAg
QmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcywgbV9jb2RlQmxvY2st
PmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAg
ICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04ODksNyArODg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFp
bCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2pp
dCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVm
ZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
bV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk2LDcgKzg5Niw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxp
ZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93
Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVH
UFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAg
ICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0
YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRh
KS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzk4NSw3ICszOTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dFByaXZh
dGVOYQogICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJz
KCk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVC
bG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBl
OjpQdXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJ
VFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dFByaXZh
dGVOYW1lLCB1c2VkUmVnaXN0ZXJzLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHko
YmFzZUdQUiksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShwcm9wZXJ0eUdQUiksIHZhbHVlUmVn
cywgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKIApAQCAtMTQ3NDcsNyArMTQ3NDcsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
c2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBzY29wZVJlZyA9IHNjb3Bl
LmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFj
a2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIG1faml0LmNvZGVCbG9jaygpLCBjYWxsU2l0ZUlu
ZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRS
ZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0
LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMxNyw3ICs0MzE3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpGVExKSVQpID8gcGFyYW1zLmdwU2NyYXRjaCgwKSA6IEludmFsaWRHUFJSZWc7CiAKICAg
ICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVFB1dEJ5VmFsR2VuZXJhdG9yPjo6Y3Jl
YXRlKAotICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBu
b2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLAor
ICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2Vt
YW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLAog
ICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKIAogICAgICAgICAgICAgZ2VuZXJhdG9y
LT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKQEAgLTEwMzU1LDcgKzEwMzU1
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
byA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4pOwogICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGws
IEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFs
aWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChq
aXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAg
ICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwo
KTsKICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwNjk4LDcgKzEwNjk4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChp
c1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVn
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUklu
Zm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFp
bENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA5NzksNyArMTA5Nzks
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xv
d1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAg
ICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgg
PSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAs
IEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBq
aXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0
LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHJldmlzaW9u
IDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0MiwyOCBAQCBjbGFzcyBNZXRhZGF0YQogICAgIGRl
ZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJldHVybiBpZiBlbXB0eT8KIAotICAgICAgICBkZWYgY29u
dmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcykKKyAgICAgICAgZGVmIGdlbmVyYXRlT2Zmc2V0T2ZG
dW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQorICAgICAgICAgICAgZmllbGROYW1lcy5tYXAg
ZG8gfGZpZWxkTmFtZXwKKyAgICAgICAgICAgICAgICAiI3twcmVmaXh9c3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsxLi5dfSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAg
ICAgICAgZW5kLmpvaW4oIlxuIikKKyAgICAgICAgZW5kCisKKyAgICAgICAgZGVmIGNvbnZlcnRG
aWVsZHMocHJlZml4LCBmaWVsZHMsIGZpZWxkTmFtZXMpCiAgICAgICAgICAgICBmaWVsZHMubWFw
IGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gK
LSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhw
cmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCisgICAgICAgICAgICAgICAgICAg
ICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBl
LCBmaWVsZE5hbWVzKX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307Igor
ICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAgICAg
ICAgICAgIGZpZWxkTmFtZXMucHVzaChmaWVsZE5hbWUpCisgICAgICAgICAgICAgICAgICAgICIj
e3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgogICAgICAgICAgICAgICAgIGVu
ZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAgZmll
bGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVsZE5h
bWVzID0gW10KKyAgICAgICAgcHJlZml4ID0gIiAgICAgICAgIgorICAgICAgICBmaWVsZHMgPSBj
b252ZXJ0RmllbGRzKHByZWZpeCwgQGZpZWxkcywgZmllbGROYW1lcykKKyAgICAgICAgZmllbGRz
ID0gZmllbGRzICsgIlxuIiArIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVs
ZE5hbWVzKQogCiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMg
JiYgKG5vdCBAaW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjk4LDggKzY5OCwxMyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNh
dmVzCiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENh
bGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBpbmZvKTsKK30KKwordm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZt
LCBDYWxsTGlua0luZm8qIGluZm8pCit7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBH
UFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5r
VGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNh
bGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9u
UHRyVGFnPihjYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxOCw2ICsxNzE4LDcgQEAg
cHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRo
b3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9p
ZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3Rh
Y2tGb3JDQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJ
VENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxp
bmVKSVRDb2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Jhc2VsaW5lSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCisKKyNpbmNsdWRlICJKSVRNYXRo
SUMuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5m
by5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSklUQWRkSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklU
QWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRkSUNz
LmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRNdWxJQyogTWF0aElDSG9sZGVyOjphZGRKSVRNdWxJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9tdWxJQ3MuYWRk
KGFyaXRoUHJvZmlsZSk7IH0KK0pJVFN1YklDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVFN1YklDKEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1YklDcy5hZGQoYXJp
dGhQcm9maWxlKTsgfQorSklUTmVnSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTmVnSUMoVW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJv
ZmlsZSk7IH0KKwordm9pZCBNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXIm
IG90aGVyKQoreworICAgIG1fYWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2FkZElDcyk7CisgICAg
bV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAgICBtX25lZ0lDcyA9IFdURk1v
dmUob3RoZXIubV9uZWdJQ3MpOworICAgIG1fc3ViSUNzID0gV1RGTW92ZShvdGhlci5tX3N1YklD
cyk7Cit9CisKK0Jhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRy
eVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKKyAg
ICA6IERpcmVjdEpJVENvZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklUKQorICAgICwgTWF0aElDSG9sZGVyKCkKK3sgfQorCitCYXNlbGluZUpJVENv
ZGU6On5CYXNlbGluZUpJVENvZGUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZv
LmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKKy8vY2xhc3MgSklUQWRkSUM7CisvL2NsYXNzIEpJVE11bElDOworLy9j
bGFzcyBKSVRTdWJJQzsKKy8vY2xhc3MgSklUTmVnSUM7CitjbGFzcyBCaW5hcnlBcml0aFByb2Zp
bGU7CitjbGFzcyBVbmFyeUFyaXRoUHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvOworc3RydWN0IFNpbXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7
CisKK2NsYXNzIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3Mo
TWF0aElDSG9sZGVyJiBvdGhlcik7CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFy
aXRoUHJvZmlsZSopOworICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2Zp
bGUqKTsKKyAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Cisg
ICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CisKKyAgICAvKgor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFs
dWU+Ojp0eXBlPgorICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBw
cm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Cisg
ICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0
dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxH
ZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVROZWdJQyog
YWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJ
Qyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRT
dWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5h
cnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9
CisgICAgKi8KKworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJh
ZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBC
YWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKworY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKK3B1
YmxpYzoKKyAgICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisgICAgZW51bSBjbGFzcyBU
eXBlIDogdWludDhfdCB7CisgICAgICAgIEdsb2JhbE9iamVjdCwKKyAgICAgICAgQ2FsbExpbmtJ
bmZvLAorICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAgRnVuY3Rpb25EZWNsLAor
ICAgICAgICBGdW5jdGlvbkV4cHIsCisgICAgfTsKKworICAgIHN0cnVjdCBWYWx1ZSB7CisgICAg
ICAgIC8vIE9PUFM6IE1ha2UgdGhlIHBvaW50ZXIgcGFja2VkLgorICAgICAgICBUeXBlIHR5cGU7
CisgICAgICAgIHZvaWQqIHBheWxvYWQ7CisgICAgfTsKKworICAgIEpJVENvbnN0YW50UG9vbCgp
ID0gZGVmYXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVm
YXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikg
PSBkZWZhdWx0OworCisgICAgQ29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9pZCogcGF5bG9hZCA9
IG51bGxwdHIpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5z
aXplKCk7CisgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQg
fSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1ZSBhdChzaXplX3Qg
aSkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0
b3I8VmFsdWU+IG1fY29uc3RhbnRzOworfTsKKworCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBw
dWJsaWMgRGlyZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAg
QmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayk7CisgICAgfkJhc2VsaW5lSklUQ29kZSgpIG92ZXJy
aWRlOworCisgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7Cisg
ICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsgLy8gT09QUzogbWFrZSBz
dXJlIHdlIHZpc2l0IHRoZXNlIHNvbWVob3cuIE9yIGFzc2VydCB3ZSBkb24ndCBoYXZlIHRvLCBz
aW5jZSB0aGV5J3JlIHZpcnR1YWwgY2FsbHMuCisgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRh
YmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxl
PiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7
CisgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBs
YW4uY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jh
c2VsaW5lSklUUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgc2l6ZV90
IEJhc2VsaW5lSklUUGxhbjo6Y29kZVNpemUoKSBjb25zdAogCiBDb21waWxhdGlvblJlc3VsdCBC
YXNlbGluZUpJVFBsYW46OmZpbmFsaXplKCkKIHsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1
bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgIENvbXBpbGF0aW9uUmVzdWx0
IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKG1fY29kZUJsb2NrKTsKICAgICBz
d2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CiAgICAgICAgIENP
REVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBp
bGF0aW9uIGZhaWxlZCIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxI
ZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxs
SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDYgQEAgdm9p
ZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sbwogICAgIHN0b3JlUHRyKHNjb3Bl
LCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgc2NvcGUpKSk7CiB9CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BS
UmVnIHNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4KQotewotICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJh
bWUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6
OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Ci0gICAgc3RvcmVWYWx1ZSh0aGlzUmVncywg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIHRoaXNWYWx1ZSkpKTsKLSAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwotICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKLSAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0
ZUluZGV4KSkpOwotfQotCiB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBh
Y2tldChWTSYgdm0sIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQ
UiwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAgIFNoYWRvd0NoaWNrZW4qIHNoYWRvd0NoaWNrZW4g
PSB2bS5zaGFkb3dDaGlja2VuKCk7CkBAIC03Miw2ICs2MiwyOCBAQCB2b2lkIENDYWxsSGVscGVy
czo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhCiAgICAgc3RvcmVQdHIoc2NyYXRjaDIsIEFkZHJlc3Mo
c2NyYXRjaDFOb25BcmdHUFIpKTsKIH0KIAorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZT4KK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwo
R1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwg
Q29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sK
KyAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwor
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFy
a2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNr
ZW46OlBhY2tldCwgY2FsbGVlKSkpOworICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlz
VmFsdWUpKSk7CisgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKKyAgICBzdG9yZVB0
cihjb2RlQmxvY2ssIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
Y2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKK30KKwordm9pZCBD
Q2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNr
ZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29k
ZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxv
Y2ssIGNhbGxTaXRlSW5kZXgpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3Ms
IEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQs
IHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwogdm9pZCBD
Q2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRl
cm5hbFB0clRhZz4gd2hlcmUsIFNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPiBlbWl0
Q29kZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24g
MjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtODQwLDcgKzg0MCwxNCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2Ugb3Bl
cmF0aW9ucyBjbG9iYmVyIGFsbCB2b2xhdGlsZSByZWdpc3RlcnMuIFRoZXkgYXNzdW1lIHRoYXQg
dGhlcmUgaXMgcm9vbSBvbiB0aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sgdG8gbWFyc2hhbGwgY2Fs
bCBhcmd1bWVudHMuCiAgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoR1BS
UmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NvcGUpOwotICAgIHZv
aWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1
ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7
CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAg
dm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tldCwg
SlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxv
Y2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CitwdWJsaWM6CisgICAgdm9pZCBsb2dT
aGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0
aGlzUmVncywgR1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4KTsKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0
KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUs
IEdQUlJlZyBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisKICAgICAv
LyBMZWF2ZXMgYmVoaW5kIGEgcG9pbnRlciB0byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0
byBpbiBzaGFkb3dQYWNrZXQuCiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZN
JiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcg
c2NyYXRjaDIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVEYXRhLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDggKzM3LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIENhbGxGcmFtZVNodWZmbGVE
YXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Cisg
ICAgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVn
aXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMp
Cit7CiAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycyB7IFJlZ2lzdGVyU2V0Ojp2
bUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB9OwotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0
KiByZWdpc3RlclNhdmVMb2NhdGlvbnMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMo
KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5z
aXplKCk7ICsraSkgewogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5IHsgcmVnaXN0ZXJT
YXZlTG9jYXRpb25zLT5hdChpKSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIg
eyBJbnZhbGlkR1BSUmVnIH07CiAKICAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhD
b2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdp
c3RlckF0T2Zmc2V0TGlzdCopOwogI2VuZGlmCiAgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjgxODY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3
ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKIH0KIAog
SklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxv
Y2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51bGxwdHIpCiAgICAgLCBtX2ludGVycHJl
dGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1f
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogewor
ICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAgIG1fcHJvZmlsZWRDb2RlQmxvY2sgPSBj
b2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+dW5saW5rZWRD
b2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTkwLDggKzkzLDggQEAgdm9pZCBKSVQ6
OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSnVt
cExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNo
QWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3Jl
bWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJ
VEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFk
ZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1l
bnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1
dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwog
CiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtMTEzLDE1
ICsxMTYsMTggQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0KgogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJl
c3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KQordm9pZCBKSVQ6OmVtaXRO
b3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCkKIHsKICAgICBhZGRTbG93
Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHBvaW50ZXJUb1NldCwgV2F0Y2hwb2ludFNl
dDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkK
K3ZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwg
R1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT52YXJSZWFkT25seVdhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykgeworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0Ojpv
ZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQpAQCAtMTI5LDcgKzEzNSw3
IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJU
X0VOQUJMRUQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1
YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAg
IG9rLmxpbmsodGhpcyk7CkBAIC0xODEsMjEgKzE4Nyw0MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dD
YXNlQ2FsbChjb25zdCBJbnN0cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9p
ZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQor
eworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0g
RnVuY3Rpb25Db2RlKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJh
bWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBh
dXRvIGhhc0V4ZWN1dGFibGUgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAt
IEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgcmVzdWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxp
bmsodGhpcyk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkK
KyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZz
ZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2Rl
QmxvY2tGb3JDYWxsKCkpLCByZXN1bHQpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7
CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKTsKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogewogICAg
IGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIs
ICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9w
cm9maWxlZENvZGVCbG9jaywgIlxuIik7CiAgICAgCiAgICAgaml0QXNzZXJ0VGFnc0luUGxhY2Uo
KTsKICAgICBqaXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgpOwogICAgIAotICAgIGF1dG8mIGlu
c3RydWN0aW9ucyA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKLSAgICB1bnNpZ25lZCBp
bnN0cnVjdGlvbkNvdW50ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAg
ICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KTsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogCiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAK
LSAgICBWTSYgdm0gPSBtX2NvZGVCbG9jay0+dm0oKTsKICAgICBCeXRlY29kZUluZGV4IHN0YXJ0
Qnl0ZWNvZGVJbmRleCgwKTsKKworICAgIC8vIE9PUFM6IE1heWJlIG9ubHkgZG8gdGhpcyBpZiB3
ZSBkaXNhYmxlIHNoYXJpbmcgc29tZWhvdz8KKyAgICAvKgorICAgIFZNJiB2bSA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPnZtKCk7CiAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAm
JiAobV9jb2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVC
bG9jay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0pKSkgewogICAgICAgICAv
LyBXZSBjYW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJv
Z3JhbUNvZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KICAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRp
b24gd291bGQgYmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhlIExMSW50IGRldGVybWluZXMg
aXQgd2FudHMgdG8KQEAgLTIzNiw2ICsyNjIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgKi8KIAogICAg
IG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0ZWNvZGVJ
bmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3Ry
dWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4LDggKzMwNSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNl
QmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNv
bnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4
LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dM
bigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAi
IGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAg
ICAgICB9KTsKICAgICAgICAgfQpAQCAtNTI3LDcgKzU1NCw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9i
eXRlY29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5w
dHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRy
KCk7CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAg
ICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9yICIsIG1f
Ynl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CkBAIC01
NDUsOCArNTcyLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAg
ICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkg
ewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2Nr
OwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAg
ICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigp
LT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNv
ZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQ
b2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfQpAQCAtNjc0LDU1ICs3MDEsNTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKCkKICNlbmRpZgogfQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFB
bmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwg
cmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpv
ZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQorCit2b2lkIEpJ
VDo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZl
UmVnaXN0ZXJzKCkpOworfQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxp
emluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5
TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgLy8gT09Q
UzogTWF5YmUgdGhpcyBzaG91bGQgYmUgZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJsb2NrPworICAg
IERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJp
bGl0eUxldmVsKCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RD
b21waWxlOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2Fu
QmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmls
aW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgog
ICAgIGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1p
emVkID0gdHJ1ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAg
ICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgp
KSB7Ci0gICAgY2FzZSBHbG9iYWxDb2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToKLSAgICBjYXNl
IEV2YWxDb2RlOgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQg
PSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAg
IC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRl
Y3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhh
dCBvYnNlcnZhdGlvbi4KLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxp
bmVkICY9IGNhbklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29k
ZUJsb2NrKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5u
dW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmIChtX2NvZGVC
bG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gRml4
ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3
aXRjaEp1bXBUYWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5l
bnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0
b3I8U3RyaW5nSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3
aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9m
VW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVy
T2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAg
ICAgICAgIG1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4o
bV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7
CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
ID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAKLSAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNv
ZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkp
KQotICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPiht
X2NvZGVCbG9jayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgp
IHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVC
YXNlbGluZUZvclByb2ZpbGVyKCkpKSkgeworICAgICAgICAvLyBPT1BTOiBidWlsZCBhIGRpc2Fz
c2VtYmxlciBvZmYgdW5saW5rZWQgY29kZSBibG9jaworICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9
IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICB9
CiAgICAgaWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpIHsKKyAgICAg
ICAgLy8gT09QUzogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiB1bmxpbmtlZCBjb2Rl
IGJsb2NrCiAgICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAgICAgICAgIG5l
dyBQcm9maWxlcjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAorICAgICAgICAg
ICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1f
cHJvZmlsZWRDb2RlQmxvY2spLAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpCYXNlbGluZSkp
OwotICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1fY29tcGlsYXRpb24t
PmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fcHJv
ZmlsZWRDb2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwpA
QCAtNzQyLDExICs3NzAsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbgogICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAg
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0
aW9uQ29kZSkKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKCk7CiAK
ICAgICBMYWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0g
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7Cisg
ICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRD
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUg
PSAtZnJhbWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9mZnNl
dCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxv
dzsKQEAgLTc1NywxNiArNzg2LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRG
aW5hbGl6aW4KICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsK
KyAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hl
Y2tSZWdpc3RlcnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9v
bFJlZ2lzdGVycygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0
aW9uQ29kZSkgeworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1
bmN0aW9uQ29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAg
IGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
YXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsr
YXJndW1lbnQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAmJiAoIW1fdW5s
aW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJv
ZmlsZXMoKSArIEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3RvcmFnZSgpKSwg
cmVnVDIpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1l
bnQgPCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsK
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2Fu
dCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAv
LyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byBy
ZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+
aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArODEw
LDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAg
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2Fk
R1BSKCkpOwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3Vs
dFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJl
c3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6
Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+
aml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIp
KQogICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXpl
TWFya2VyKSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MzIsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxv
d0Vycm9yLCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMg
MSwgd2UgbmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlG
aXh1cCA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkg
eworICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2Fy
aXR5Q2hlY2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9j
b2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rp
b25Qcm9sb2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxv
Y2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tU
b0ZyYW1lSW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCks
IEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQo
KSkpOwogCiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxp
bmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkp
LmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMy
X3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9u
KG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNo
ZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJp
dHlDaGVjaywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNo
VGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBA
IC04MzksNyArODc1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9
IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2Rl
QmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBt
X2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIo
KnRoaXMsIG1fdW5saW5rZWRDb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5l
SklULCBlZmZvcnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4OTQsOCBAQCB2b2lk
IEpJVDo6bGluaygpCiAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAgICAgICAgY2Fz
ZSBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkNo
YXJhY3RlcjogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1w
bGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQu
ZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVu
bGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBA
IC04NzEsOCArOTA3LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAg
Y2FzZSBTd2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAg
YXV0byBjdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4o
bV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAg
ICAgICAgZm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52
YWx1ZXMoKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1f
YnJhbmNoT2Zmc2V0OwpAQCAtOTA2LDMyICs5NDIsMzUgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAg
ICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7CiAg
ICAgfQogCi0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIp
OwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0g
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7
Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNo
ZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1f
aW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3By
aXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisgICAgYXV0byBmaW5hbGl6ZUlDcyA9
IFsmXSAoYXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVy
YXRvcnMpIHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0
Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOwor
ICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAg
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVn
aW4pOworICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOwor
ICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRz
V2l0aFRoaXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNz
KG1fcHV0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6
ZUlDcyhtX2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAg
ICBmaW5hbGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKIAogICAgIGZvciAoYXV0byYg
Y29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAgICAgIENhbGxM
aW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAgICBp
bmZvLnNldENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
PEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKLSAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRp
b25JbmZvLmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5m
byA9ICpjb21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGluZm8u
ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihj
b21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIEpJ
VENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsr
Ynl0ZWNvZGVPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNl
dF0uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0
ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRy
eVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
bV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKSk7
CisgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAgZm9yICh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgp
OyArK2J5dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNl
dF0uaXNTZXQoKSkKKyAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29k
ZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRy
VGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtF
TFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk3OSwzNyBAQCB2
b2lkIEpJVDo6bGluaygpCiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24p
KSB7CisgICAgICAgIC8vIE9PUFM6IG1ha2UgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91dCB1
bmxpbmtlZCBDQj8KICAgICAgICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQ
cm9maWxlcigpKQogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIo
bV9jb21waWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9jb21waWxhdGlv
bik7CisgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24o
bV9wcm9maWxlZENvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAogICAgIGlmICht
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAgICAgbV9w
Y1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUo
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAgCisgICAgLy8g
T09QUzogTWFrZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBh
Ym91dCBVbmxpbmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3Vs
dCA9IEZJTkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAot
ICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dp
dGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7Cisg
ICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0
aEpJVFR5cGUobV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRh
KCkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRo
QXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0
eUNoZWNrKTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVz
dWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENv
ZGUgPSBhZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNr
KSk7CisKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtl
ZENhbGxzKTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1f
ZXZhbENhbGxMaW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9
IFdURk1vdmUobV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1
bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
cyk7CisgICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5h
bGl6ZSgpOworICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9q
aXRDb2RlLT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOwogCiAgICAg
aWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRl
ZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0
YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVt
b3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVy
YXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJl
c3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4
ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklU
OjpmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxF
QVNFX0FTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICsxMDE4LDIx
IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlu
a0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAg
ICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9k
ZTo6TGF0ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Nv
ZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFu
ZGxlckluZm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAg
ICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRs
ZXIubmF0aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUlu
ZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsK
LSAgICB9CisgICAgLy8gT09QUzogRG9uJ3QgdGhpbmsgdGhpcyBzaHJpbmsgaXMgcmVhbGx5IGRv
aW5nIGFueXRoaW5nIGFueW1vcmUuIFZlcmlmeS4KKyAgICAvL3sKKyAgICAvLyAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgIC8vICAgIG1fY29k
ZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNo
cmluayk7CisgICAgLy99CiAKKyAgICAvLyBPT1BTOiBtX3BjVG9Db2RlT3JpZ2luTWFwIHNob3Vs
ZCBsaXZlIG9uIEJhc2VsaW5lSklUQ29kZSBmb3IgYmFzZWxpbmUgY29kZWJsb2Nrcy4KICAgICBp
ZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2Rl
T3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmln
aW5NYXApKTsKIAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JC
YXNlbGluZUpJVC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+
c2l6ZSgpKSAvCi0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9uc1NpemUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRD
b2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNldEpJ
VENvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0dXBX
aXRoVW5saW5rZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAg
ICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTA0NCwxMSBA
QCBzaXplX3QgSklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZlci0+
c2l6ZSgpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENv
bXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNv
bXBpbGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkK
IHsKICAgICBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBjb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFsaXpl
T25NYWluVGhyZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVCbG9j
ayk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKQEAg
LTEwNDIsMTggKzEwODgsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVm
b3JlQwogICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMo
Km1fdm0sICJQcmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25l
ZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2ln
bmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCiB7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRS
ZWdpc3RlcnMoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCkpKSk7CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBv
aW50ZXJPZmZzZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJP
ZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0
ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVSZWdp
c3RlckNvdW50Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2ludCBK
SVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQog
ewogICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRG
b3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50ZXJP
ZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9pbnRl
ck9mZnNldEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNoTWFw
PENTdHJpbmcsIFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1h
cDxDU3RyaW5nLCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNF
VChhY3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3Rl
ZCwgIkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVk
LCBzdGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsK
IAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5o
IgpAQCAtNDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJ
VFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgorI2lu
Y2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5j
bHVkZSAiVW51c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTE0
OSwxNCArMTUxLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2Fs
bENvbXBpbGF0aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0
aFN0YXJ0OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAg
ICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlu
a0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJVF9DTEFTU19BTElH
Tk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgY2xhc3MgSklUX0NMQVNT
X0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQg
Y2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEsNiArMTczLDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwg
YW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KICAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAor
ICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBwdWJsaWM6CiAgICAg
ICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JF
bnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsK
QEAgLTE3OCwxNyArMTgyLDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWTSYgdm0oKSB7
IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lkIGNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwotICAgICAgICBD
b21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBDb21waWxh
dGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAgICAgICAgc2l6
ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJh
dGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBDb21waWxhdGlv
blJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2Rl
SW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9j
aywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICBy
ZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShj
b2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQg
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CisgICAgICAgIHN0
YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAg
ICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOwogCiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNv
bXBpbGVUaW1lU3RhdHMoKTsKQEAgLTE5OSw3ICsyMDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0
ZUNvbXBpbGVTbG93Q2FzZXMoKTsKICAgICAgICAgdm9pZCBsaW5rKCk7Ci0gICAgICAgIENvbXBp
bGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICAg
ICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklUQ29tcGls
YXRpb25FZmZvcnQpOwogCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUs
IHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2ICsyMjks
MzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkUHRyRnJvbU1ldGFkYXRh
KGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFkYXRh
KGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0YWRhdGEo
Y29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lk
IHN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZz
ZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9p
ZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNl
dCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lk
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyk7CisKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgbG9hZENvbnN0YW50
KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CisgICAgcHJpdmF0ZToKKyAgICAgICAg
dm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZENvZGVCbG9j
a0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGVtaXRQ
dXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOworCiAg
ICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAgICAgICB7
CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7CkBA
IC0yNTgsMTYgKzI5MCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVf
aWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6
Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICAmJiBPcDo6b3Bj
b2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVw
RnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0Nv
bnN0YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjpl
bmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3Mg
fHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8fCBP
cDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29tcGls
ZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5r
SW5mb0NvbnN0YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAg
Ym9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9w
JiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwogICAgICAgICB2b2lkIGNv
bXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwpAQCAtMjg3LDE0ICszMTksMTUgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1p
dFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRl
QmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
cik7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpOwogCiAgICAg
ICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJlZ1Qw
IGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4KICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiwgR1BSUmVnKTsKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJlZyk7
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIC8vdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7CisgICAgICAgIC8vdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKKyAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShjb25zdCBCeXRlY29kZSYsIEdQUlJlZyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1Zh
bHVlUmVncyk7CiAjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3Mp
OwpAQCAtMzA3LDYgKzM0MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5UHJv
ZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVBy
b2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoY29uc3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRj
aEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9p
ZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBwdHJkaWZm
X3QsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3ApOwpA
QCAtNTkyLDcgKzYyOSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNiwxNCArNjYyLDE0IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vu
c2lnbmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5k
LCBBY2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJl
Z2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhw
ckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0
VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhckluamVj
dGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAgICAg
IHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BS
KTsKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNp
Z25lZCBkZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQpAQCAtNjQ1LDcgKzY4MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAg
ICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50
cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRT
ZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7
CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRv
U2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQg
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBl
bWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NCw2ICs2OTAs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFt
ZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAgYm9v
bCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENvbnN0
YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRD
aGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC02OTUsMjYgKzczMiw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29s
dmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIp
OwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1Io
cmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZN
Jik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX0dFVF9GUk9NX1NDT1BF
X0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdl
dEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwotCi0g
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3Bl
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBNb2R1
bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFuIHVz
ZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2ZWRDbG9zdXJlVmFyIGJlY2F1c2Ugd2Ug
ZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29wZS4KLSAgICAgICAgICAg
IHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlw
ZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNkZWZpbmUgREVDTEFSRV9SRVNPTFZFX1ND
T1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUj
I0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9S
RVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VO
RVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBn
ZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5r
TmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2
ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmso
Vk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsK
IAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2
YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mKTsKQEAg
LTc1OSwxMCArNzc4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAg
ICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFk
ZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwot
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRh
JiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVj
b2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2
b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2Zp
bGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAg
ICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1l
Li4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0
aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjAsMjAgKzgz
OSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7CiAg
ICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUg
T3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAg
ICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhh
c1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5h
bWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlw
ZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyB0
YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyB0
YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewog
ICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9uVHlwZT4o
dGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRyZXNzKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNl
dCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVy
YXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE4LDI1ICs5MzcsMjAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGlt
aXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9w
dGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7IH0K
ICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0
UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdp
dGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNoIGNh
c2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmls
aW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgZW1pdE1hdGVy
aWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAgICAgICB2b2lk
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRD
b21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygp
OwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9t
IHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8gYmUgY29u
c2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1
c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUg
dmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdl
dFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5
T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5
T3ApOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjMsOSAr
OTc3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBt
X3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAot
ICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsK
LSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFy
aXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAg
ICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTk5OSwxMSArMTAxMCwyNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBJbnN0cnVjdGlvbiosIFVuaXF1ZVJlZjxN
YXRoSUNHZW5lcmF0aW9uU3RhdGU+PiBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3Rh
dGU7CiAKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwotICAgICAgICBib29sIG1fY2Fu
QmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5n
OwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKIAot
ICAgICAgICBSZWZQdHI8RGlyZWN0SklUQ29kZT4gbV9qaXRDb2RlOworICAgICAgICBDb2RlQmxv
Y2sqIG1fcHJvZmlsZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFVubGlua2VkQ29k
ZUJsb2NrKiBtX3VubGlua2VkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworCisgICAgICAgIE1hdGhJ
Q0hvbGRlciBtX21hdGhJQ3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1faml0
Q29kZTsKKworICAgICAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5rZWRD
YWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4g
bV9ldmFsQ2FsbExpbmtJbmZvczsKKyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBU
YWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1w
VGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzX21ldGFkYXRhR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJs
ZUdQUjsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19jb25zdGFudHNHUFIgPSBM
TEludDo6UmVnaXN0ZXJzOjpwYkdQUjsKKworICAgICAgICBzdHJ1Y3QgTm90QUNvZGVCbG9jayB7
IH0gbV9jb2RlQmxvY2s7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI4MTg2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09w
ZXJhbmRDb25zdGFudENoYXIob3AyKSkgewogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMyMCw3ICszMjEsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwog
ICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVn
VDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Qz
LCByZWdUMiwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
aW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdU
MiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52
ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAt
NTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCAK
IAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJl
Z1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
aW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApA
QCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5z
dHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+YWRk
SklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVE5lZ0lDKiBu
ZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJQyk7CiAgICAg
Ly8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVl
TmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0aElD
RmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJp
dGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAtODk5LDggKzkwNCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAg
SklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVC
bG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCku
bV9wcm9maWxlSW5kZXgpOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRB
ZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVu
dEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZh
bHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFz
dChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMt
PmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICgh
Z2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVj
dChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNS
ZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOworICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
c2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAxNSwxMCArMTAyMSwx
MSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgICAgIGVs
c2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVt
aXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0
UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEzICsxMDYyLDE0IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNlbmRpZgogCiAgICAg
VW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3Ms
IFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRS
ZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxl
KTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwg
c3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywg
VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9K
SVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBz
cmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RB
VFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIwLDEzICsxMTI4LDE0
IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICNlbmRpZgogCiAg
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmls
ZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJp
dHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
KSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFy
aXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRI
X0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsx
MTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwogICAgIGlmIChzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KyAgICAgICAgYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRo
UHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1fcHJvZmlsZUluZGV4KTsK
IAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVz
LmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29w
ZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRo
UHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1fcHJvZmlsZUluZGV4KTsK
KyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRkSklUTXVsSUMoYXJpdGhQcm9maWxl
KTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVs
SUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CkBAIC0x
MjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0
CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhh
cml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1f
dW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wU3ViPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX21h
dGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRo
SUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9w
U3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw3ICsyMzIs
NyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBzdG9yZVB0cihjYWxs
RnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNl
dCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEs
IHJlZ1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7CiAgICAg
ZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8p
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTMyNCw3ICszMjQs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgYWRkU2xv
d0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJl
c3VsdChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0
YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBA
IC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNhbGxG
cmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSklUSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUg
IlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVk
ZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBP
cCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZv
cihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVy
KCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAg
ICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwog
LCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxM
aW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJbmNsdWRpbmdUaGlzID0g
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpOwogICAg
IGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0YWNrT2Zmc2V0SW5SZWdp
c3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKKwogICAgIGlmIChPcDo6b3Bj
b2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxs
RnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKICAgICAgICAg
SnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAg
c3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVja3BvaW50KS5hZGRy
ZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YShy
ZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCkg
KyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmls
ZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBkb25lLmxpbmsodGhp
cyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6
Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mg
fHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lk
PgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5m
byogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewogICAgIFZpcnR1
YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC05MSw3ICs5Miw4
IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2l6
ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7CiAgICAg
ZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJn
czsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RW
YXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOworICAgIGNhbGxPcGVy
YXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZp
cnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0
ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJuVmFsdWVH
UFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLShzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGln
bm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cEZv
cndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0g
b3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwg
cmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QxLCBy
ZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KICAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCks
IHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3Zl
LCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFkZHJlc3NPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlua0lu
Zm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0lu
Zm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJlZ1QzKTsKKyAg
ICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1QyKTsKKyAgICBz
dG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsK
ICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywxNiArMTMxLDE2IEBAIGJv
b2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxhdGU8PgogYm9vbCBKSVQ6
OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkKIHsKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAgIHN0b3JlUHRyKGNh
bGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zm
c2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgYXJndW1l
bnRHUFIxKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgcmVnVDEsIHJlZ1QyKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVn
VDApKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkp
LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJldHVy
blZhbHVlR1BSKSk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiAKQEAgLTE0
OCw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVC
bG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CisgICAg
Q2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxs
LCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwpA
QCAtMTU2LDQzICsxNjAsNDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNv
bnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVn
aXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFs
T2JqZWN0KCptX3ZtLCBpbmZvKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQoteworYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQsIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQpIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPD4KLWJv
b2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIENhbGxM
aW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCitib29sIEpJVDo6Y29t
cGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5r
SW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0gICAgQ2FsbEZyYW1lU2h1ZmZsZURh
dGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5dGVjb2Rl
Lm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51
bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9CisgICAgc3RkOjp1
bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8
Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhc3NlZEFyZ3Mg
PSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVyID0g
R1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAgc2h1ZmZsZURhdGEtPm51bUxvY2FscyA9
CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNp
emVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9h
cmdjKTsKKyAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAg
ICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgIHNodWZmbGVEYXRhLT5hcmdzW2ldID0K
ICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKICAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRl
Y29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKICAgICB9Ci0gICAg
c2h1ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAs
IERhdGFGb3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJz
KG1fY29kZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRh
KTsKKyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAs
IERhdGFGb3JtYXRKUyk7CisgICAgc2h1ZmZsZURhdGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVy
cygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpOwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZd
IHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJl
Z1QyKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2Fs
bERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CisgICAgICAgIENhbGxG
cmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwog
ICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CisKKyAgICBzaHVmZmxlRGF0YS0+
c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVm
ZmxlRGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9j
YXRpb247CiAgICAgCkBAIC0yMTgsMTQgKzIyNSwyNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBD
OyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVy
IGFmdGVyIHJldHVybi4KICAgICAqLwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7
Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAg
ICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CisKKyAgICBVbmxpbmtlZENhbGxM
aW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBp
bmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFs
KSB7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbV91bmxpbmtlZENhbGxz
LmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2Rl
SUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAgICAgQVNTRVJUKG1f
Y2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Cisg
ICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5saW5rZWRD
YWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50OworICAgIH0K
KyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAogICAgIC8v
IFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBB
cmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29k
ZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1aW50MzJf
dCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwog
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVl
LgpAQCAtMjM0LDE2ICsyNTIsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5z
dHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlu
a0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVG
b3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChD
YWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChjb21waWxlVGFpbENh
bGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBpZiAoY29tcGlsZVRh
aWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFudCwgcmVnVDIp
OwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0
aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9
IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCBy
ZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAg
ICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9KTsKQEAgLTI1
MywxMyArMjY3LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1p
dEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZ
ZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgp
OwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
IAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCArMjg3LDIwIEBA
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7
CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlzLCByZWdU
Mik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxD
YWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcgKzQwOSwzMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1
bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmlt
cGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5
cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQpAQCAt
NDE2LDEwICs0NDMsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25z
CiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAg
ICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsKICAgICBu
b3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBAIC00MzIs
MTkgKzQ1NywxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAg
ICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJh
d0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRlcmF0b3JH
UFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBhdXRvIGRv
bmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVz
dWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9
CkBAIC00NTIsNyArNDc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKICAgICAg
ICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5hcnJvdzog
cmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0OTIsNzcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1bXAgZmFz
dENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7
CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0ZUFkZHJl
c3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAgbG9hZDhG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJ
dGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5N
b2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhf
dD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9NZXRhZGF0
YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVy
YXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rl
cygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAg
IC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAg
ICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJl
Z1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3
aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2
YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRj
aDsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3Vs
dDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0
R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09
IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
KTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1
ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAg
ICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2
ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJl
Z3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2Vy
dmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5
cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAg
ICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQ
UiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJl
Z3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAg
ICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgICAg
ICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lz
dGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJy
YW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxHUFIp
OworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3Vs
dEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsK
LSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1w
bCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJ
bmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1Zh
bHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAogICAgICAgICBp
dGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1NzYsNTUgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBpbGVPcENhbGxT
bG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpzY3JhdGNoOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25l
VlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSBy
ZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlz
dCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0
ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQg
PSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAg
ICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0
LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAotICAg
ICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5v
bkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRv
bmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwg
YXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQ
UjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVn
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwor
CisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
KworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywg
ZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNr
cG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAgfQog
CiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BSUmVn
IGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRl
bnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0g
ICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0g
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBp
dGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIy
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5o
CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKKwogbmFtZXNwYWNlIEpT
QyB7CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtMTU5LDEwICsxNjAsMTAgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAgICB7Ci0gICAgICAg
IGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNlRGF0YUlDSW5P
cHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxODY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIklu
bGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBzdGF0
aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2ppdFR5
cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1YkluZm8g
PSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2Rl
T3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxvY2sg
PyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFn
ZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwog
CiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3
ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIExp
bmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0YXJ0
ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5sb2Nh
dGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0
aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zbG93UGF0
aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgp
OworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKyAg
ICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgaml0LmNhbGwo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9kb25lID0gaml0
LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFs
dWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAy
ODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMTQgQEAgbmFtZXNwYWNlIEpTQyB7
CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNz
IENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGlu
dDhfdDsKIGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKK3N0cnVjdCBCYXNlbGluZURl
bEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BS
SW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86
OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpy
ZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBH
UFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUklu
Zm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZv
OjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICAv
LyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0aWFsaXpp
bmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgorICAgIHN0YXRpY19hc3NlcnQo
YmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1
bHQpOworICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEg
PSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9
IEdQUkluZm86OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0g
R1BSSW5mbzo6cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50R1BS
MjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUkluZm86OmFyZ3VtZW50
R1BSMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OmFy
Z3VtZW50R1BSMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUklu
Zm86Om5vbkFyZ0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBH
UFJJbmZvOjpub25BcmdHUFIxOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAg
c3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOwor
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5m
bzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86
OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBi
YXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdGhpc1Zh
bHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlJZFJlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86
OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVn
VDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdU
MzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7
Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBwcm9maWxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJyYW5kID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ciB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYy
LDE1ICsxNjUsMjEgQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtC
dWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVy
LAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQp
OwotICAgIAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwg
dW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIgfTsK
KyAgICB1bnNpZ25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxv
Y2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBtX3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IG1fc2xvd1BhdGhDYWxsOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxs
OyAvLyBPT1BTOiBtYWtlIHJlcG9ydENhbGwgcGFzcyBzb21ldGhpbmcgaW4gd2UgY2FuIHVzZSBm
b3IgdGhlIG5vbi1DVEkgdGh1bmtzIGJ1aWxkcy4gCiB9OwogCiBjbGFzcyBKSVRCeUlkR2VuZXJh
dG9yIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTk4LDcgKzIwNyw3IEBA
IHByb3RlY3RlZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92
YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworcHVibGljOgogICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTMyLDggKzI0
MSw4IEBAIHB1YmxpYzoKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAg
ICAgSklUUHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29k
ZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFsdWVS
ZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwg
UHV0S2luZCk7CisgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxT
aXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVu
dGlmaWVyLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BS
UmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOwogICAg
IAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogICAgIApAQCAt
MTYzLDExICsyNzIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAg
SlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsK
IApAQCAtMTkxLDggKzI5OCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0
aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhK
dW1wOwogfTsKIApAQCAtMjE2LDggKzMyMSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJh
dGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1f
c2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjQxLDggKzM0NCw2IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFi
bGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjc3LDggKzM3OCw2IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5r
QnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1f
c2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzAyLDExICs0MDEsOSBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAg
ICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0OwogCi0gICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNo
YWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMzAsOCArNDI3LDYgQEAgcHVibGlj
OgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1w
cml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwx
MyArMzUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omlz
T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJu
IHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsK
KyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
c3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNE
b3VibGUoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJ
bnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3Jj
LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2Vk
Q29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBPT1BT
OiBmaW5kIGEgd2F5IHRvIGFzc2VydCB0aGF0IGFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBj
ZWxscy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6
Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNy
Yy5pc0NvbnN0YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlu
a1RpbWVDb25zdGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0
YW50KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1
NiwzNiArMTgxLDM2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgK
ICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0
aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BS
MiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIs
IHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1l
dGFkYXRhLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8
dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAg
ICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNl
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJu
VmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsK
ICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNl
bmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYg
KCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAg
LTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMo
CiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0
ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2tw
b2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAg
IGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxh
YmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3Bv
aW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRl
eCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NF
UlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2tw
b2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4
ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVs
cy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwzNCBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6
OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVy
biBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkg
JiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9
PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQ
cm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQotewotICAgIEFTU0VSVChz
aG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmln
dXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAg
IC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwg
dmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQotICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZh
bHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAm
ZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwotICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCks
ICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgotfQorICAgIGlmICghc3JjLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJs
b2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5n
KGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30KKwor
Ly8gT09QUworLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQ
cm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQorLy97CisvLyAgICBBU1NF
UlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKKy8vCisvLyAgICAvLyBXZSdyZSBpbiBhIHNpbXBs
ZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGly
ZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lmIFVTRShKU1ZBTFVFNjQpCisvLyAgICBzdG9yZTY0
KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vI2Vsc2UKKy8vICAgIEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZh
bHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8gICAgc3RvcmUzMih2
YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7CisvLyAgICBz
dG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7CisvLyNlbmRp
ZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8
c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9m
aWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRP
cGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsMjQgKzM1MywyNSBAQCBpbmxp
bmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYg
KCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNo
ZWNrcG9pbnQoKSksIHZhbHVlKTsKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgdmFs
dWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
KSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0b3JlNjQodmFs
dWUuZ3ByKCksIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVl
UHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKLX0K
Ky8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYg
dmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97CisvLyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisvL30KIAot
dGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3Vs
dFJlZykpOwogfQogI2VuZGlmCiAKQEAgLTM2MCw2ICszOTEsMjEgQEAgaW5saW5lIHZvaWQgSklU
OjplbWl0QXJyYXlQcm9maWxpbmdTaXRlVwogICAgIH0KIH0KIAordGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2Zp
bGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQoreworICAgIGlm
IChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOworICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YShzY3JhdGNoR1BSLCBieXRlY29kZSwgb2Zm
c2V0T2ZBcnJheVByb2ZpbGUpOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2Ny
YXRjaEdQUikKK3sKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUs
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmls
ZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCksIGNlbGxHUFIsIHNjcmF0Y2hHUFIpOwor
fQorCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNJbnQzMigpOwpAQCAtMzgwLDcgKzQyNiw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJl
Z2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlmIChyZWcuaXNDb25zdGFu
dCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBt
X2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOworICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRS
ZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3Rh
bnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NG
b3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcgKzU0Miw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1p
dFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2Nr
LT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAg
ICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcgKzU1Miw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0gICAg
aWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNl
bGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNCwxMSArNTYwLDYgQEAgaW5s
aW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogICAgIH0KIH0KIAotQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNy
YykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0
dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0LDExICs1ODUsMTcgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAv
LyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAgaWYgKHNy
Yy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKLSAg
ICAgICAgZWxzZQorICAgICAgICBzd2l0Y2ggKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykpIHsKKyAgICAgICAgY2FzZSBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb246OkludGVnZXI6CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uOjpEb3VibGU6IHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAgbW92ZShJbW02NChKU1Zh
bHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3Jj
LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtNTY2LDExICs2MTMsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0K
IAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJl
Z2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9t
KQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTU5NSw3ICs2Mzcs
NyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAKIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJl
ZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93
bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTYzNywzMCArNjc5LDcgQEAgQUxX
QVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewogICAgIGlmICh0YXJnZXQp
CiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vdXRPZkxp
bmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKLX0KLQotQUxXQVlTX0lOTElORSBHZXRQdXRJbmZv
IEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNvZGUpCi17Ci0gICAgdW5z
aWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsgLy8gSGFzaE1hcCBkb2Vzbid0
IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdldFB1dEluZm9z
LmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBHZXRQ
dXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9nZXRQ
dXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5mby5vcGVy
YW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJbmZvOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBC
aW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJp
dGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2NF90IGtleSA9IChzdGF0
aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEpIDw8IDMyIHwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0byBpdGVyYXRv
ciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9
IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52
YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1fY29waWVkQXJpdGhQcm9m
aWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBhcml0aFByb2ZpbGU7Cisg
ICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1
Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY4MSw2ICs3MDAsNjEgQEAg
QUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAogICAgIHJldHVybiBFQ01B
TW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5
dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRk
cmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNl
dEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJG
cm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJS
ZWcgcmVzdWx0KQoreworICAgIGxvYWQzMihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5r
ZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSAr
IG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRy
ZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUgdmFsdWUsIGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTgodmFsdWUsIEFkZHJl
c3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlMzJUb01ldGFkYXRh
KEdQUlJlZyB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQor
eworICAgIHN0b3JlMzIodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENv
ZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zm
c2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYg
Ynl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRh
dGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBzX21ldGFkYXRhR1BSLCByZXN1bHQpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29uc3RhbnQoSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBjb25zdGFudEluZGV4LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRk
cmVzcyhzX2NvbnN0YW50c0dQUiwgc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb25zdGFudEluZGV4
KSAqIDgpLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFs
T2JqZWN0KEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0
Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2Rl
QmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIEdQUlJlZyByZXN1bHQpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKKyAgICAvLyBPT1BT
OiBNYXliZSBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQ/CisgICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCwgQ29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVz
dWx0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRl
eCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSks
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIp
LCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwog
ICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpOwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oY29uc3QgSW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2gg
ZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9i
eXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwog
ICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDI0
LDcgKzEwMjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAK
ICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sg
dGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxl
JiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVs
dE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1
cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3ICsxMDQyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJ
VGFibGUodW5saW5rZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0LDIyIEBAIHZv
aWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewot
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0g
ICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwotICAgICAg
ICBlbHNlCisgICAgICAgIC8vIE9PUFM6IG1vc3QgIk90aGVyIiBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gY29uc3RhbnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQgZnJvbSB0aGUgVW5saW5rZWRDb2Rl
QmxvY2suIEl0J3MganVzdAorICAgICAgICAvLyBhIGNvdXBsZSB0eXBlcyB0aGF0IGNhbid0LiBD
cmVhdGUgYW4gYWJzdHJhY3Rpb24gZm9yIHRoYXQuCisKKyAgICAgICAgc3dpdGNoIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpKSB7Cisg
ICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICBj
YXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAg
ICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3Io
ZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDApOworICAgICAgICAg
ICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODcsMzcgKzk4LDM1IEBA
IHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0
X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9i
amVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBB
bGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxK
U0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFs
bG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAg
ICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0
Y2hSZWcgPSByZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0g
ICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkg
PSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChy
ZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVn
LCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nh
c2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3Ry
dWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsK
LSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCks
IGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdP
YmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsK
KworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJ
bW1QdHIobnVsbHB0cik7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRB
bGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJm
bHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVS
ZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAg
IGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAg
IG11dGF0b3JGZW5jZSgqbV92bSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1Qz
OworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmpl
Y3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1
Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdP
YmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzE0MCw4IEBAIHZv
aWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1
bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1w
IGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0lu
c3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOwor
ICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVn
VDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5j
dGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKIApAQCAtMTU0LDMwICsxNjQsMzggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Rv
ID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFz
ZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAg
IC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0
aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm90b0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgY29uc3Rl
eHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBwcm90b0dQUik7
CiAgICAgCiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBi
ZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhh
c0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOwogCiAgICAgSklUSW5zdGFuY2VP
ZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAg
ICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdU
MCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8g
cHJvdG8KLSAgICAgICAgcmVnVDUsCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAg
cmVzdWx0R1BSLAorICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgcHJvdG9HUFIsCisgICAgICAg
IHN0dWJJbmZvR1BSLAorICAgICAgICBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0
Y2gxLCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gyKTsKKworICAgIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQo
KTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7Cisg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAK
KwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMTkyLDE0ICsyMTAs
MTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1p
emU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86
Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbklu
c3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBy
ZWdUMiwgcmVnVDEpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm8gPT0gYXJn
dW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVy
czo6dmFsdWUgPT0gYXJndW1lbnRHUFIyKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6cHJvdG8gPT0gYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVj
bHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiop
CkBAIC0yNDAsNyArMjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5l
ZChjbwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwg
cmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM3NCw3ICszOTEsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygmUmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiAjZWxzZQpAQCAtMzgzLDkgKzQwMCw5IEBAIHZv
aWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lmIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7Ci0g
ICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9y
KCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMo
KSk7CkBAIC00MTEsNyArNDI4LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNv
bnN0IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NTAsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRf
b3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1
bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVu
Y3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFt
ZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1
bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ4MiwxMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXko
dm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1
ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNDk5LDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25z
IGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJl
bG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAg
Ly8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1MzgsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRs
ZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUg
c3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAg
SnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQz
LDcgKzU2Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAg
ICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJv
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAg
ICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs2MDEsMTMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRf
b3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVj
aWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVy
KTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAg
IENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZElt
bTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFu
dChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRv
TWV0YWRhdGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAg
ZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2NDIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0
R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFs
dWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAg
IGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNo
MSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVn
VDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY1OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzE0LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
ICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRv
cEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRo
cm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRp
b25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzczMSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5k
bGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3Vt
ZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRH
UFIxOwpAQCAtNzIwLDcgKzc0MCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAg
IGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRH
UFIwKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoYXJndW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxP
YmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyArOTI4LDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3
ICs5MzksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKQEAgLTkzMSw3ICs5NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1i
ZXIoY29uc3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIo
cmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTczLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChz
cmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJl
Zyk7CiB9CkBAIC05NzgsNyArMTAwMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChj
b25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZS
ZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsK
IH0KQEAgLTk5Myw3ICsxMDE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5z
dHJ1Y3RpbwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hP
ZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkp
OwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJs
b2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwg
JnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyArMTAzMywxMSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9v
ZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7Ci0gICAgaWYg
KGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5
dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxl
LCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUs
ICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5
ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwotICAgIGlmIChidWZmZXIg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewotICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSksIHJlZ3MpOwotICAg
ICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKQEAgLTEwNTMs
OCArMTA2Myw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAg
ICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhp
cyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVu
ZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0
LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRh
YmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsxMDkxLDE0IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRp
bmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBm
b3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRl
eCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rl
cikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgsIHVubGlu
a2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBh
cmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsK
ICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEw
OTksMjAgKzExMTAsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJ
bgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsK
IAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFj
ayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJp
bmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBt
X2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAg
ICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0
YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNB
ZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dl
clJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVn
SG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTExMzMs
NyArMTE0Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAog
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE0
OCw3ICsxMTYxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAog
CiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjYsNyArMTE3
OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdU
MiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE4OCwx
MiArMTIwMCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAg
ICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3Vy
IGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZv
aWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBp
bmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5u
dW1WYXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFy
cygpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBmb3IgKHNpemVfdCBqID0g
Q29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwor
ICAgIAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7CiAKICAgICBlbWl0RW50ZXJPcHRp
bWl6YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEzMTAsMjMgKzEzMjQsMTkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZUlE
KiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNo
ZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1QyKTsK
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Y3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwotICAgIFdyaXRl
QmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRD
YWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklE
IHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsK
QEAgLTEzNDIsNyArMTM1Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0
IEluc3QKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6
Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rpb246OnJhcmVE
YXRhVGFnKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcs
IEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAt
IEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKIAotICAgIGxvYWRQdHIo
Y2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcENyZWF0ZVRoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZENhbGxl
ZSgpLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVz
ID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0Nl
bGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFB0cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1Nl
ZW5NdWx0aXBsZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM4Miw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
cT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBK
U1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIsNyArMTM5Myw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMy
KDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVn
cyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyArMTQwNiw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwg
cmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzE0MTcsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0MzIs
MTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1
YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFs
dWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BS
MCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86
OmFyZ3VtZW50R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTQzMCw3ICsxNDQ1LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJs
b2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6
emluZygpICYmIG1fdW5saW5rZWRDb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6
emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0oKS5nZXRM
b29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkUHRyKHB0
ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaFB0cihCZWxv
dywgcmVnVDAsIFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVM
b29wc0xpbWl0KCkpKTsKQEAgLTE0NDAsNyArMTQ1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xv
b3BfaGludChjb25zdCBJbnN0cnUKICNlbHNlCiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAj
ZW5kaWYKLSAgICAgICAgbW92ZVZhbHVlKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVz
dWx0UmVncyk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVzdWx0UmVncy5ncHIoKSk7CiAg
ICAgICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTE0NTMs
OCArMTQ2OCw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKIAog
ICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAogICAgIGlmIChjYW5CZU9w
dGltaXplZCgpKSB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0
aXZlT3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVu
dEZvckxvb3AoKSksCi0gICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFk
ZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAgICAgICBBZGRyZXNzKHJlZ1Qw
LCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9CiB9CiAK
QEAgLTE1MDksNyArMTUyNSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhj
b25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJh
cHMsIGFyZ3VtZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTY0LDM0ICsxNTgxLDM2IEBAIHZvaWQgSklU
OjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVj
b2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPiht
X2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIg
PSBhcmd1bWVudEdQUjA7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAq
PihtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBKdW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9h
ZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChi
eXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9m
dW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3Rh
dGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2Fk
Q29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24s
IGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCks
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJU
KG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
Mik7CiAgICAgfQogfQogCkBAIC0xNjIxLDIzICsxNjQwLDI0IEBAIHZvaWQgSklUOjplbWl0TmV3
RnVuY0V4cHJDb21tb24oY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRl
Y29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2Nv
cGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNs
KTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6RnVuY3Rpb25FeHByLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNv
bnN0YW50LCBhcmd1bWVudEdQUjIpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29k
ZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0
aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRz
dCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNv
ZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VS
VChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2
bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2NjQsMjkgKzE2ODQsMzAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0
YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFy
dC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1l
bnRHUFIyKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
TmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJn
dW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXdBcnJheVdpdGhTaXplPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwg
cmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFBy
b2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAot
ICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAg
bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNp
emU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1lbnRHUFIy
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxpemVQb2lu
dGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNp
emVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fy
cmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Myk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmls
ZSwgZHN0LCByZWdUMywgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlm
CiB9CiAKQEAgLTE2OTQsOCArMTcxNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93
aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91YmxlIGNoZWNr
IHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHR5cGUgcHJv
ZmlsZXIgaXMgZW5hYmxlZC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9j
YXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTc3
NywyMCArMTc5OSwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFp
CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0g
cmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRh
aWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwotICAgIEdQUlJlZyBz
Y3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCBy
ZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1cmVTaGFk
b3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0
Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7
IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQo
dm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIH0K
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0g
ICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVn
cyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
SlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVu
bGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB1c2luZyB0aGUgY29udHJvbCBmbG93IHByb2Zp
bGVyLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmls
ZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9j
YXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsKQEAgLTE4
NjAsNyArMTg4Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMK
ICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxOTEyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CiAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODE4NjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yODgxLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0g
ICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwog
ICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
Lm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJbnQzMigp
KQpAQCAtMjkwNCw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blN3aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBj
b25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN0
cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNTdHJpbmco
KSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZhbHVlKGds
b2JhbE9iamVjdCkuaW1wbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZh
dGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJl
Z1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5zdHVi
SW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwx
MDMgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5j
b3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewot
ICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAg
ICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRp
ZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJz
KCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOwor
ICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIs
IHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BS
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25H
ZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCBy
ZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNl
R1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICAgICAgaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5w
cm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQ
Uik7CisKKyAgICAgICAgLy8gT09QUy4gU3VwcG9ydCB0aGlzCisgICAgICAgIC8vaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAgICAgLy8gICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgICAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQo
Z2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+CiB2b2lk
IEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2Rl
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGlmIChoYXNB
bnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKLSAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dl
dEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlW
YWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHBy
b2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wY29kZVR5cGU6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BS
Mik7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBv
cGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNlCi0gICAg
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRl
eChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOworICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5
dGVjb2RlSW5kZXgpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zm
c2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KLSAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHBy
b3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJn
MSBhbHJlYWR5IHVzZWQuCisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1l
bnRHUFIyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2VH
UFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIHN0YXRpY19hc3NlcnQocHJv
cGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OmJhc2UgPT0gcmVnVDApOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkgPT0gcmVnVDEpOworCisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IHJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNjAsOCAr
MTcxLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNv
bnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIg
PT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMTg3LDM0ICsxOTgsNDAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAg
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJl
c3VsdCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5
R1BSKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAg
ICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOwor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhhc0Fu
eVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzI0MCwx
MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXpl
LCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50
R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1NCwy
MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVh
ZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9w
cml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC0zMDAsMjEgKzMxMywyOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNv
ZGUubV9icmFuZDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBicmFu
ZEdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQ
UiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7Ci0KICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRB
Y2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKGJyYW5kR1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIAogICAg
IC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBz
aW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTMyNCwxNyArMzQ0LDIy
IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2
YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJl
bnRJbnN0cnVjdGlvbik7CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklU
UHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2Vz
W21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9
IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwog
I2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMzQ0LDI0ICszNjksMTggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQu
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5
cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVu
Y3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpB
cmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAg
ZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRP
cHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZgogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTM3MCwxOSArMzg5LDI4IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3By
aXZhdGVfYnJhbmQoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihicmFuZCwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7CisKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nl
c3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBh
ZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiB9CiAKQEAg
LTM5NCw5ICs0MjIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJh
bgogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIs
IGJyYW5kR1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJn
dW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNr
UHJpdmF0ZUJyYW5kT3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC00MDYsMjQgKzQzNiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9i
cmFuCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIy
OyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0g
YXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2Ft
ZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGlt
aXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdl
dFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNr
UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC00MzUsMzAgKzQ1OSw0MiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVn
VDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHJlZ1QzKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJl
Z1Q0KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9m
aWxlR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAKICAgICBK
SVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCk7Ci0gICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBwcm9maWxlR1BSLCBzdHViSW5mb0dQUik7
CisgICAgLy8gT09QUzoKKyAgICAvL2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkp
CisgICAgLy8gICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZh
bDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFs
RGlyZWN0PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHVi
SW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00
NzQsMTUgKzUxMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKLSAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8g
Ynl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKLSAgICAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAg
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChp
c0RpcmVjdCkKQEAgLTQ5OCw3ICs1MzEsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSQogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRo
ZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0
KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEsIHJlZ1QyLCBnZW4uc3R1YkluZm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQ
UjMpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFI0KTsKKyAgICBpZiAoaXNEaXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJl
Y3Q+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBhcmd1bWVudEdQUjUpOworICAgIGVsc2UKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZh
bERpcmVjdDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0
cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkg
PyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0LCBhcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNTEyLDcgKzU1NCw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1
OwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKICAgICBDYWxsIGNhbGw7CiAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChl
Y21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2Rl
LmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9u
UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CkBAIC01MjMsNyArNTY1LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtNTM5LDEyICs1ODEsMTggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNTsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gcmVnVDQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVn
VDU7CisgICAgeworICAgICAgICBSZWdpc3RlclNldCB1c2VkKEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OmJhc2UsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJv
ZmlsZSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlucyhyZWdUNCkpOworICAgICAgICBB
U1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDUpKTsKKyAgICB9CisKIAogICAgIGppdC5zdG9yZTMy
KGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpKTsKICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CkBAIC01NzAsMjAgKzYxOCwzMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFs
dWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBK
SVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRl
TmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOwor
ICAgIHN0dWJJbmZvLT5wcml2YXRlRmllbGRQdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOwor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAg
Ly8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEg
YmFzZSBpcyBjZWxsLgpAQCAtNTk0LDggKzY1Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9w
cml2YXRlX25hbWUoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwotICAgIFByaXZhdGVGaWVsZFB1dEtp
bmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVu
dEluc3RydWN0aW9uKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5
VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKQEAgLTYwMywxMyArNjYxLDE3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCi0gICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkg
PyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9u
UHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBu
b3QgY2xvYmJlcmVkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gcmVnVDI7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQ
UiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihu
dWxscHRyKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRQcml2YXRlTmFtZT4oKTsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRl
Y29kZS5tX3B1dEtpbmQ7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgYXV0
byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmlu
ZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRP
cHRpbWl6ZTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRzR1BSMywgYXJndW1l
bnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTYyMiwxOCArNjg0LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
cmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpA
QCAtNjQ4LDkgKzcwNCw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAg
ICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVn
VDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCkBA
IC02ODAsNyArNzM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25z
dAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAg
ICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCByZWdU
MiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTY4OSw3ICs3NDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAg
ICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1Qy
LCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTY5OSw3ICs3NTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRl
cl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1Qy
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3NjgsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Myk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDMsIHJl
Z1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNzE5LDcgKzc3OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNv
bnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1Qx
KTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1Qy
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdU
Mik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3LDIzICs3ODgsMzMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lRGVsQnlJ
ZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BS
LCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxC
eUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsK
IAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmll
ciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVy
IGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdp
c3RlcnMuCkBAIC03NTksMTUgKzgzMCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5
X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5
SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29k
ZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5
SWRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
CkBAIC03ODEsMjQgKzg1NCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNv
bnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9H
UFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsK
LSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5SWRP
cHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKQEAgLTg0NSwyMiArOTEzLDMzIEBAIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29u
c3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworCiAg
ICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6
c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7
CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAog
ICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5j
ZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4g
d3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNl
bGwuCkBAIC04ODMsOSArOTYyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFs
KGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkp
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CkBAIC04OTksMjQgKzk4MCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5
X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50
R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0Owog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3Zh
bF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTYxLDIyICsxMDM3
LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVz
dWx0KTsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdz
LCByZWdUMSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NU
eXBlOjpUcnlHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2LDE0ICsxMDcxLDE3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTEwMDMsMjYgKzEwOTEsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQo
Y29ucwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1l
bnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpLCBk
ZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1p
emU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25UcnlHZXRC
eUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDMwLDIyICsxMTEy
LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0KTsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRS
ZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMDU0LDE2ICsxMTQ1LDE4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21f
Z2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZERpcmVj
dE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTA3Myw4MyArMTE2Niw2MSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAg
fHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3Bl
cnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRp
b25HZXRCeUlkRGlyZWN0T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
ZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpzY3JhdGNoOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJv
cGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBK
dW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVz
cygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFy
cmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDhGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRh
KCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhOjpvZmZzZXRPZk1vZGUoKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoMzIoTm90RXF1YWwsIFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSwg
c2NyYXRjaEdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRl
Y29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5
SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFzZUdQ
Uiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwog
ICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KKyAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OwogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZS
ZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0
ZWNvZGUubV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0
aGlzVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtl
ZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6
OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwogCi0gICAgSklU
R2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTE1OCwx
NiArMTIyOSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7
CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMTc3LDI2ICsxMjUwLDU3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50
R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8
fCAhaXNBUk02NCgpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1l
bnRHUFIzOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1Yklu
Zm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENh
bGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigp
OworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhp
c0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MoQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bCh0aGlzR1BSLCB0aGlzVlJlZyk7CisKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3Ig
Z2VuKAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyh0aGlzR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKQEAgLTEyNDEsMTYgKzEzNDUsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF93aXRoX3RoaQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRo
aXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BS
Mik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgYXJn
dW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJh
dGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
CkBAIC0xMjYwLDI4ICsxMzY3LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGkKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVu
dEdQUjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlk
V2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFy
Z3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEzMjksMjMgKzE0MzAsMzcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVW
UmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxh
Z3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0
aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVy
LAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGlu
dG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8v
IHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUg
ZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZS
ZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVn
aXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIGJhc2VH
UFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdU
MywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRj
aEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJl
Y3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlJZDsKKyAgICBzdHVi
SW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERp
cmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKICAgICAv
LyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBi
YXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsxNDc0LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRo
RnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRH
UFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTEzNzYsMjUgKzE0OTUsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lz
dGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRC
eUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBh
cmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8
fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlR1BSID09IGFyZ3VtZW50R1BS
MSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gZ2VuLnNsb3dQYXRoRnVu
Y3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKGdlbi5zbG93UGF0
aEZ1bmN0aW9uKCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTQ0
MSwyMCArMTU1NCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5C
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCByZWdUMSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQo
KTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlJZDsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ2MywxNCArMTU4Nywx
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0x
NDgwLDI4ICsxNjA3LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJ
bnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlf
aWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAg
ICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBq
dXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2MzEsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5f
YnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmls
ZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1Qy
KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKQEAgLTE1MzcsMTUgKzE2NjYsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5
X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAK
ICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4
KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFs
aXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlW
YWxPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CkBAIC0xNTU2LDU5ICsxNjg4LDcwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9i
eV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIy
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9m
ZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5
X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgog
ICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5r
IGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSksIGRlY2x0eXBlKG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUg
dHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
SW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJy
YW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlwZTsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVT
bG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKKyAgICBVTlVTRURfUEFSQU0oYmFz
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHByb3BlcnR5KTsKICAgICBBU1NFUlQodHlwZSA9PSBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVC
cmFuZCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5C
eVZhbEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
dHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVO
YW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAg
Y2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0
aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGlt
aXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNjE4LDI3ICsx
NzYxLDIxIEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2kKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eU9yQnJhbmRHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eU9yQnJhbmRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAg
IHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAg
ICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eU9yQnJhbmRHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRp
b25IYXNQcml2YXRlTmFtZU9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVj
bHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRp
b25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFz
UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0
ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xNjUyLDcgKzE3ODksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aGFzX3ByaXZhdGVfbmFtZShjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZU5hbWU+KCk7
Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQ
cml2YXRlTmFtZSk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRl
Y29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fcHJvcGVydHksIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVO
YW1lKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NjYsMTkgKzE4MDMsMjIgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEhhc1ByaXZhdGVCcmFuZD4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9k
c3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93
KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9u
Q2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5q
ZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIHNjcmF0Y2hH
UFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJu
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworCisgICAgbG9hZEdsb2Jh
bE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JK
RUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwg
c2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3Jh
dGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJ
bnZhbGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgcmVnVDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQog
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwg
cmVnVDApOwpAQCAtMTY4OCw2ICsxODI4LDcgQEAgdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3Vy
ZShWaXJ0dWFsUmVnaQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICAvLyBPT1BTCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwpAQCAtMTcwMSw3ICsxODQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9z
Y29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6
OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7
CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpLCByZWdUMSk7CiAgICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwogICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7
CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsK
QEAgLTE3MTUsNyArMTg1Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29u
c3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0
YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3Rh
bnRTY29wZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTc5NCw4NyArMTkzNSwxMDUgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAg
IFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBlOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5t
X3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZl
VHlwZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5
dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BS
UmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9
IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsK
KyAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFu
dGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0
eXBlLgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDAp
OworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxv
YWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBw
dHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRh
YmxlKCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2Rl
KTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7Cisg
ICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENs
b3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAg
ICAgIH07CisKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dl
bmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Ms
ICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyIpOworICAgICAgICB9OwogCi0jZGVmaW5lIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJl
c29sdmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAg
ICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAg
ICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyAg
ICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgewor
ICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBz
dGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7CiAgICAg
ICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NvcGVHUFIgPSByZWdUNjsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNj
b3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0
YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAg
ICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAgICBj
b2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZSBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9
IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAgIGVt
aXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3Qg
Y2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBm
dW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1
c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CisKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcFJlc29s
dmVTY29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJl
Z1Q3OyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsg
Ly8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVn
VDU7IC8vIGluY29taW5nIC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4KICAgICBjb25zdGV4cHIg
R1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwogICAgIFVOVVNFRF9QQVJBTShieXRlY29k
ZU9mZnNldEdQUik7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcFJlc29sdmVT
Y29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIGppdC50
YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMs
IG1ldGFkYXRhR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIo
cmVnVDMsIG1ldGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0
byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgYXV0byBk
b1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgewogICAgICAgICBpZiAoIW5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAo
Z2xvYmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgICAgIGdsb2JhbE9i
amVjdEdQUiA9IHJlZ1Q0OwotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAg
ICAgICAgfQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdU
Myk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1Qz
LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9C
SkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSks
IHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0UmVzb2x2ZUNsb3N1cmUg
PSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgbW92ZShzY29w
ZUdQUiwgcmVnVDApOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNU
X09GRlNFVE9GKE1ldGFkYXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7CisgICAgICAg
IGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBq
aXQubW92ZShzY29wZUdQUiwgcmVnVDApOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwg
cmVnVDEpOwogCi0gICAgICAgIExhYmVsIGxvb3AgPSBsYWJlbCgpOwotICAgICAgICBKdW1wIGRv
bmUgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOworICAgICAgICBMYWJlbCBsb29wID0gaml0
LmxhYmVsKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVn
VDEpOwogICAgICAgICB7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMSk7Ci0gICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3AsIHRoaXMpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZO
ZXh0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMSk7CisgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsKICAgICAg
ICAgfQotICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluaygmaml0KTsK
ICAgICB9OwogCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUpIHsKQEAgLTE4ODIsMTIgKzIwNDEsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8g
SlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkuCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwot
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGxvYWQzMihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNh
bEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6
b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAg
ICAgbW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIp
OworICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7Cisg
ICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNz
KGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKGdsb2JhbE9iamVj
dEdQUiwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTg5Nywx
MSArMjA1NiwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAg
ICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAg
ICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAogICAgICAgICAgICAgLy8g
YW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZpcm9ubWVudCgp
IGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkp
LCByZWdUMCk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNH
bG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6
CkBAIC0xOTA5LDcgKzIwNjgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5
bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0x
OTE5LDgzICsyMDc4LDQ1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2
ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0
Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAg
IHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZl
VHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDApOwogCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsUHJvcGVydHkubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7
Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhp
cyk7CisgICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
KSB7CisgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRDb2RlKHJl
c29sdmVUeXBlKTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7Cisg
ICAgICAgICAgICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICB9CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7CisgICAgICAg
IGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNh
bFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAg
IHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAotICAgIHJldCgpOworICAgIGppdC5yZXQo
KTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0g
dm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVy
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFn
LCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRP
UihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6Om9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAot
ICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNj
b3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBK
SVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVU
aHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlXyIgI3Jlc29sdmVU
eXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfUkVTT0xWRV9TQ09Q
RV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVf
c2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkg
dGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklU
IGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIC8v
IFRoZSBmYXN0IHBhdGggYWxyZWFkeSBwdXNoZWQgdGhlIHJldHVybiBhZGRyZXNzLgogI2lmIENQ
VShYODZfNjQpCkBAIC0yMDY1LDYgKzIxODYsNyBAQCB2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVW
YXIoVmlydHVhbFJlZ2lzCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKKyAgICAvLyBPT1BTCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwpAQCAtMjE3OCw3ICsyMzAwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
Z1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQpAQCAtMjE4Niw5ICsyMzA4LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Nj
b3BlKGNvbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KG1ldGFkYXRhLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBhcmd1bWVudEdQUjAsIGN1cnJl
bnRJbnN0cnVjdGlvbik7CiB9CiAKICNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpA
QCAtMjE5Niw0MSArMjMxOCw1MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Nj
b3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZv
LnJlc29sdmVUeXBlKCk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZl
VHlwZSgpOwogCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJ
bmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQobV9j
b2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1
Y3Rpb24pOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKworICAgIGF1dG8gY2xvc3Vy
ZVZhckdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJh
dGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX2dldF9m
cm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0byBjbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0
dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFy
Iik7CisgICAgfTsKKworICAgIGF1dG8gZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvciA9IFtd
IChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRo
dW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgZ2VuZXJp
YyIpOworICAgIH07CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7
CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAotICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxWYXIpIHsKLSAgICAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0gICAgICAgIGVtaXRH
ZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJl
Z1QwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBt
X2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgcHRyZGlm
Zl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZz
ZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0jZGVmaW5lIEdFVF9GUk9NX1NDT1BFX0dF
TkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2Vu
ZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1td
ID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKEdFVF9GUk9NX1NDT1BFX0dF
TkVSQVRPUikKLSAgICAgICAgfTsKLSN1bmRlZiBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLSAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwotICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IENsb3N1cmVWYXIpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5l
cmF0b3IpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICBlbHNlCisgICAgICAg
IGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IpOworCisg
ICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhW
TSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFy
KiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0
aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQog
ICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3Qg
YmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KQEAgLTIyMzksOTkg
KzIzNzAsODggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3Bl
R1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcEdldEZyb21T
Y29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIENDYWxs
SGVscGVycyBqaXQ7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBy
ZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSks
IHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1w
TGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBb
Jl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJfdCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCkgewot
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0dXJlT2Zm
c2V0KSwgcmVnVDEpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIHNs
b3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7
Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBhdXRvIGVtaXRM
b2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIpIHsKKyAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgcmVnVDEpOworICAgICAgICBqaXQubW92ZShzY29wZUdQ
UiwgcmVnVDApOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoWmVy
bywgcmVnVDEpKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QxKSk7CiAgICAgfTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNo
ZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgYXV0byBkb1Zh
ckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAg
ICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMs
IE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50
KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJl
c3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmpl
Y3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNl
LmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6
b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsK
ICAgICAKLSAgICBhdXRvIGVtaXRHZXRWYXJGcm9tUG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVy
YW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
b3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAg
ICBhdXRvIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJh
bmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBv
cGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQogICAg
IGF1dG8gZW1pdEdldENsb3N1cmVWYXIgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIG9w
ZXJhbmRHUFIpIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lz
dGVyKSk7Ci0gICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQUik7Ci0g
ICAgICAgIGFkZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSksIHJlZ1QwKTsKKyAgICAgICAgaml0LmxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFu
ZEdQUik7CisgICAgICAgIGppdC5hZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOworICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRDb2Rl
ID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVy
YW5kKSB7CisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIsIE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9zdHJ1Y3R1cmUpKTsgLy8gU3RydWN0dXJlIGNoZWNr
IGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9y
IGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2Nv
cGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBj
b3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBh
bnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3Bl
IGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAgICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2UgPSByZWdUMDsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0ID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG9mZnNldCA9
IHJlZ1QxOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CiAK
LSAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+
IEp1bXAgewotICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgcmVnVDMpOworICAgICAgICAg
ICAgaml0LmppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAg
eworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaml0LmJyYW5jaFB0cihFcXVhbCwgYmFzZSwgcmVnVDMpOwogICAg
ICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIG9mZnNldCk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZP
cGVyYW5kKCkpLCBvZmZzZXQpOwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0g
ICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JF
cXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAg
ICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwotICAg
ICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgSnVt
cCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwg
VHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgaml0
LmFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CisgICAgICAgICAgICAg
ICAgaXNPdXRPZkxpbmUubGluaygmaml0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
KTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJU
b1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0
Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAg
ICAgICAgICBqaXQubmVnMzIob2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5zaWduRXh0ZW5kMzJU
b1B0cihvZmZzZXQsIG9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZDY0KEJhc2VJbmRleChz
Y3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAg
ICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAg
ICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fb3BlcmFuZCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKHJlZ1QwLCByZWdUMCk7CiAgICAgICAgICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAg
ICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAg
ICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRh
ZGF0YSwgbV9vcGVyYW5kKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5k
KCkpLCByZWdUMyk7CiAgICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZUdQUiwgcmVn
VDMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRD
bG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTIzNDEsNzkgKzI0NjEsNTYg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsK
LSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDAp
OyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZl
VHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2Jh
bExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJl
c29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9z
dXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAg
ICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8v
IExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSksIHJlZ1QwKTsKKyAgICAg
ICAgaml0LmFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkp
KTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsK
LSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmso
dGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBu
b3RHbG9iYWxWYXIubGluaygmaml0KTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb24gPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
aXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKCZq
aXQpOworCisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGppdC5icmFuY2gzMihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CisgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluaygmaml0KTsKKyAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkp
OworICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7
CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGppdC5icmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsoJmppdCk7CiAK
LSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5s
aW5rKCZqaXQpOwogICAgIH0KIAogICAgIHN0YXRpY19hc3NlcnQoVmFsdWVQcm9maWxlOjpudW1i
ZXJPZkJ1Y2tldHMgPT0gMSk7Ci0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3Jl
NjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUo
KSkpOwogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVu
ayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfZnJvbV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwg
Q29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNl
LCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2Rl
ZmluZSBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVf
IyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBj
b25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAot
ICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAg
ICByZXR1cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJh
c2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1Jf
RUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRl
ZiBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZN
JiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2Fu
IG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCkBAIC0yNDcx
LDg2ICsyNTY4LDc5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
IH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotdm9pZCBKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAs
IG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpT
VmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCBy
ZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NP
Zk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lk
IEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qg
b3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAg
ICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQotCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAg
IEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAg
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7
Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAg
UmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBl
bWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNo
IChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1
Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3Ry
dWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwg
cmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAg
ICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3
ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVj
dC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNo
ZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJl
KCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJl
Z1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEp
KTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIp
OwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAo
KSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAg
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAg
ICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
KyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1l
c0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpKTsKKyAgICAgICAgICAgIC8vIE9PUFM6IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNp
b24gdGhhdCB0b29rIEdQUlJlZ3MgaW5zdGVhZCBvZiBWUnMKKyAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25z
dGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAg
aWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYm
IChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVn
VDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1Qw
KTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKKworICAgICAgICAgICAg
aWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2Fu
J3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0g
ICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAg
ICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
Km9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAp
LCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdU
MSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJh
bmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lz
ZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hw
b2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNv
bnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxv
YWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNl
dE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVX
YXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkp
OworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9u
IHRoYXQgdG9vayBhIEdQUlJlZyBmb3IgdmFsdWUuCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2Nv
cGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCBy
ZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAg
ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNlIHRv
IGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3Igb3duZXIvdmFsdWUuCiAgICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjU2NCw1
OCArMjY1NCw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAg
ICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1l
dGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIo
R2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBU
MAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhp
Y2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1
ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAgICAgICAgaXNHbG9i
YWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJlVmFyLyBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGlsZSB0aGluZ3MKKyAg
ICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3ZlIHByb3ZlbiB0aGF0
IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZhciwKKyAgICAvLyBh
bGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgorICAgIC8vIGlmIHRo
ZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0IGlzIGZpcmVkLCB0
aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAgIC8vIG1hdHRlciB3
aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBl
ID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIpOworICAgIGVsc2Ug
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyKQorICAgICAgICBl
bWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGVtaXRD
b2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbHNlIHsKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0
VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7CiAgICAgICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0g
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAg
ICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAgZW1pdENvZGUoR2xv
YmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAorICAgICAg
ICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKHRoaXMp
OworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsK
IAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5s
aW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAKICAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwog
ICAgIH0KIH0KIApAQCAtMjYyNCwxOCArMjcwOCwyMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJl
c29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgIFJl
c29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBpZiAocHJvZmls
ZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYgYW55IGxpbmtlZCBD
b2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29kZUJsb2NrcyBhcmUg
Z3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIuCiAgICAgICAgIEpJ
VFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93
X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwog
ICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2Nv
cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3VtZW50R1BSMCwgY3Vy
cmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwogICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRl
Y29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgQVNTRVJUKG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZz
ZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjcwMSw3ICsyNzg4LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAs
IERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CiB9CiAKQEAgLTI3NTksNyArMjg0Niw2IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVy
KEpTQ2VsbCogb3duZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4
OwpAQCAtMjc2Nyw3ICsyODUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2Zp
ZWxkKGNvbgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRP
ZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3
ODksNyArMjg3NSw2IEBAIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3AK
IHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9k
ZTsKQEAgLTI4MDUsNyArMjg5MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4
dChjb25zdCAKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0
aGUgbW9zdCBjb21tb24gbW9kZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBp
dCBpZiB3ZSBwcm9maWxlIGl0IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVt
ZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVN
b2RlKSB7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1f
ZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0
dXJlTW9kZSkgewogICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOwogICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAg
ICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3Mo
ZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjptb2RlU2V0T2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIofkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9k
ZSkpKTsKQEAgLTI4NDcsNzggKzI5MzIsODcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9uZXh0KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBt
b2RlID0gYnl0ZWNvZGUubV9tb2RlOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1fcHJvcGVydHlO
YW1lOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJh
dG9yOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAogICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKIAotICAgIGF1dG8gcmVzdWx0R1BSID0gcmVn
VDA7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JH
ZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
RW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gxID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0
Y2gxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZUVudW1lcmF0b3JH
ZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MyA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMzsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobW9kZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHlOYW1lLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHNjcmF0Y2gzKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcHJvcGVydHlHUFIpOwogCi0gICAgb3I4
KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7
CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaDIpOworICAgIG9y
MzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0Y2gyLCBi
eXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0
b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkp
OworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CiAgICAgLy8gVGhp
cyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KLSAgICBKdW1wIGlzTm90T3duU3Ry
dWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBi
cmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5l
cmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVtcCBzdHJ1Y3R1
cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7CisgICAgbG9hZDMy
KEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDIp
OworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRj
aDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3Ry
dWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0LgotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRo
ZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5l
IGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9Q
dHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGlt
ZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgIHNpZ25F
eHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CisgICAgbG9hZDY0KEJhc2VJbmRleChi
YXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAg
ICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91dE9mTGluZUFjY2Vzcy5saW5r
KHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBu
ZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFz
ZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIG5lZzMy
KHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOwog
ICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBvZmZzZXRJbkJ1
dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMs
IFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgbG9h
ZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAK
ICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOwotICAgIHN0b3JlOChUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVj
dHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKyAgICBzdG9y
ZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1Nl
ZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCBieXRlY29kZSwgT3BFbnVtZXJh
dG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAog
ICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNOb3RJbmRl
eGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJh
bmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3aXRoIHRo
ZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAgICAgaXNOb3RJ
bmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAg
ICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjkyNywxMCArMzAyMSw5IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2Uo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9
CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0
aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRl
Y29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVt
aXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5
cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjkzOSw3
ICszMDMyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwg
cmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1l
cmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29k
ZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBv
cjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUs
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAtMzAy
OCw2ICszMTIzLDEzIEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIK
ICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNo
R1BSKG93bmVyKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5saW5rKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJ
KHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDMsNyArMTU0Myw3IEBAIHN0YXRpYyB2b2lkIHJldmVy
dENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExp
bmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERp
c2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhT
dGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVu
bGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAg
IAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkK
QEAgLTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBP
cEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9w
ZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2Rl
U3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAg
ICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlw
ZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0
MikKICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2Nm
ciwgdDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHBy
ZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0
MSwgc3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAg
ICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRl
QXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFBy
b2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlz
cGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJv
ZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRh
ZGF0YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVn
YXRlU3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAg
IG5lZ2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVw
ZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykK
ICAgICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEg
dDEsIExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAg
ICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5
QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICBy
ZXR1cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVu
ZCkKIAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3Qs
IGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BX
aXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2Zp
bGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAg
IGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikK
ICAgICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFy
eU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAu
b3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAg
ICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlB
cml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAg
ICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQz
LCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEy
NCwxMiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAg
IGJpYSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9w
MU5vdEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAg
ICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUs
IHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkK
ICAgICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAg
ICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRh
dGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1i
ZXIsIHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEp
CiAgICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFu
ZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkg
bm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywg
LnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAg
ICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50
TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEs
IHQzLCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20JKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEzIEBA
IG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMsIGEx
CiAgICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRweiBy
MCwgLnJlY292ZXIKLQogICAgICAgICAgICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAgIyBC
YXNlbGluZSB1c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQgcG9v
bC4KKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAgbG9h
ZHAgQ29kZUJsb2NrOjptX2ppdERhdGFbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJs
b2NrOjpKSVREYXRhOjptX2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAgIGlm
IEFSTTY0RQogICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6
b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50cnkp
ICogUHRyU2l6ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRl
UHRyVGFnICMgSlNFbnRyeVB0clRhZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVxdWFs
aXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwg
b3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlw
ZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJp
dGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0K
ICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0
MQogICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNybyBw
cmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRp
b24odDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEg
dDEsIFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxl
SW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRo
UHJvZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAg
LTExMzQsMTEgKzExMzUsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdh
dGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVy
bikKLQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlw
ZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxl
OjptX2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBA
IC0xMTQ2LDEyICsxMTQyLDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5l
Z2F0ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0
MwogICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJv
ZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9m
aWxlSW50LCB0MSwgdDQpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0
cXogdDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAw
MDAwLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAg
dXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEs
IHQ0KQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNjAs
NiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0
MCkKIAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQog
ICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNp
emUsIHQwLCB0MSkKQEAgLTExNzcsNyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3Rv
cmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdl
ck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUo
QXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bj
b2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0NCkKICAgICAgICAgZGlzcGF0Y2go
KQogCiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmluYXJ5
T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcs
IC5zbG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEK
LSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJl
ciwgdDUsIHQ0KQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9w
MkludDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVw
ZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlcklu
dCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5Ogog
ICAgICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNiw3ICsxMTk4LDcgQEAgbWFjcm8gYmluYXJ5
T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMg
ZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAg
IGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKLSAgICAg
ICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQog
ICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAg
ICBmcTJkIHQxLCBmdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMjU1Niw2ICsyNTU2LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBl
bmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUs
IG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0
eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBX
ZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdF
QkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFu
ZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigp
ID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVh
YmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJs
b2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRl
bnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwg
VW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlw
ZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGlu
ZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVk
U3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBj
cmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRl
bnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9u
IDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50
aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29k
ZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9j
a1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJs
b2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBD
YWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hl
YWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJ
ZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBK
U0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkK
IHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6
TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewot
ICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7
CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQu
aXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAy
ODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUg
cHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0
aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0JhZy5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsNiArNjYsMjAgQEAgcHVibGljOgogICAgICAgICBvdGhlci5tX2hlYWQg
PSBudWxscHRyOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQmFnJiBv
cGVyYXRvcj0oQmFnPFQsIFU+JiYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodW53cmFwcGVk
SGVhZCgpID09IG90aGVyLnVud3JhcHBlZEhlYWQoKSkKKyAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKworICAgICAgICBCYWcgZGVzdHJveTsKKyAgICAgICAgZGVzdHJveS5tX2hlYWQgPSB1bndy
YXBwZWRIZWFkKCk7CisgICAgICAgIG1faGVhZCA9IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKKyAg
ICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgfQorCiAgICAgfkJhZygpCiAgICAgewogICAgICAgICBjbGVhcigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437224</attachid>
            <date>2021-09-02 17:31:09 -0700</date>
            <delta_ts>2021-09-02 18:51:59 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>416888</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MTg2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODMxLDYgKzgzMSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IH07CiAJ
CTUyRUVENzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFRUQ3OTMyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgw
MDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIw
MDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVk
U291cmNlMy1tbS5tbSAqLzsgfTsKQEAgLTE0MTYsMTAgKzE0MTcsMTAgQEAKIAkJQTM4Q0E1OUUy
NkREODRERTAwQzhEODRDIC8qIElTTzg2MDEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEzOENBNTlDMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmgg
Ki87IH07CiAJCUEzOEQyNTBFMjU4MDBENDQwMDQyQkZERCAvKiBKU0FycmF5QnVmZmVyUHJvdG90
eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTM4RDI1MEQyNTgwMEQ0MzAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxp
bmVzLmggKi87IH07CiAJCUEzOEQ1QkZDMjY2NkQzREEwMEExMDlBNiAvKiBJbkJ5U3RhdHVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzhENUJGQTI2
NjZEM0RBMDBBMTA5QTYgLyogSW5CeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUEzRUU4NTQzMjYyNTE0QjAwMEZDOUI4RCAvKiBJbnRs
V29ya2Fyb3VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMzc2MTk0MDI2MjUxMjdDMDBDQkNCQTkgLyogSW50bFdvcmthcm91bmQuY3BwICovOyB9
OwogCQlBM0M3RURCNjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VE
QjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLzsgfTsK
IAkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIzMjZCMERCMzcw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmggKi87IH07CiAJCUEzQzdFREJBMjZCMERCMzgw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAv
KiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKKwkJQTNFRTg1NDMyNjI1MTRC
MDAwRkM5QjhEIC8qIEludGxXb3JrYXJvdW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzNzYxOTQwMjYyNTEyN0MwMENCQ0JBOSAvKiBJbnRsV29y
a2Fyb3VuZC5jcHAgKi87IH07CiAJCUEzRkY5QkM3MjIzNDc0OTEwMEIxQTlBQiAvKiBZYXJyRmxh
Z3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRkY5
QkM1MjIzNDc0NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyog
SmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTUwM0ZBMTQxODhFMEZBRjAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJh
bWUuaCAqLzsgfTsKIAkJQTUwM0ZBMUUxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENh
bGxGcmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTUwM0ZBMTgxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZVByb3RvdHlwZS5oICovOyB9OwpAQCAtMzY2Nyw2ICszNjY4LDggQEAKIAkJNTJDRDBGNjQyMjQy
RjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBwYXRoID0gZGZnL3Rlc3Rk
ZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQxMzA4RjIyMUNFMDNBMDA5
QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0g
Zm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNjI2RTAzOUIzMDA1
NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VsaW5lSklUQ29k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNzI2RTAzOUI0MDA1NEU0
MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VsaW5lSklU
Q29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkyMjQ5MkI4Njgw
MDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5j
dGlvbkFsbG93bGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkz
MjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
dW5jdGlvbkFsbG93bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1
QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI1Niw2ICs2MjU5LDggQEAKIAkJCQk2Qjc2N0U3QTI2
NzkxRjI3MDAxN0Y4RDEgLyogQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaCAqLywKIAkJCQk3MjM5
OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLywKIAkJCQk3MjM5
OThGNTI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8sCisJCQkJNTJERDAw
MDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8sCisJCQkJNTJERDAw
MDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovLAogCQkJCTBGNjRCMjZG
MUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGNjRCMjcwMUE3
ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4MzkyRDFCQUNBOUQz
MDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApAQCAtOTY5Niw2ICs5NzAxLDcgQEAK
IAkJCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTgg
LyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlDQzg5MTkzQUM2MEEw
MDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzYx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgko
cmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91cCA6
UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAg
IHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRUeXBl
cywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRhdGE6
IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJp
dGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZhbHVl
UHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5SW5Q
bGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDogVmly
dHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAg
ICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZQor
ICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDp0
b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRzdDog
VmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWdu
ZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5
QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioK
ICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
T3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBA
IFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJu
ICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
K3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4
KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhw
ciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dp
dGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3lt
Ym9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRvclByb2Zp
bGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dDogcmV0dXJuIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYg
Y29uc3RleHByIChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3JfbmV4dCkgeworICAg
ICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JO
ZXh0Ojpjb21wdXRlTmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0
UmVzdWx0UHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXREb25lOiBy
ZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkRvbmVQcm9maWxlKCk7CisgICAgICAg
IGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZlZhbHVlUHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSBlbHNlIAorICAgICAgICByZXR1cm4g
Qnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGVNZXRhZGF0YT4KIGJvb2wgaGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2Rl
TWV0YWRhdGEmIG1ldGFkYXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlu
a0luZm86OnVubGluayhWTSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwog
fQogCi1Db2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZh
c3RQYXRoU3RhcnQoKQotewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4obV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBS
RUxFQVNFX0FTU0VSVCghaXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2Fs
bExpbmtJbmZvOjpzZXRNYXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gdmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoaXNEaXJlY3QoKSAmJiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsK
K30KKwogdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBo
YW5kbGVTcGVjaWZpY0NhbGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgs
MjMgKzI5OSwxMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAg
ICAgbV9mcmFtZVNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMg
dXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNU
YWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAg
ICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJS
ZWcpOwotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyks
IGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0g
Y2FsbExpbmtJbmZvR1BSOwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5s
YWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50
ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBzbG93UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVz
ZURhdGFJQyA9PSBVc2VEYXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIp
OyAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyAr
MzEyLDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAg
ICAgICAgZ29Qb2x5bW9ycGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9u
WmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWND
YWxsZWVNYXNrKSk7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAg
fQotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7
CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1v
cnBoaWMubGluaygmaml0KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBz
dGFjayBwcmVwLgogICAgICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwg
SlNFbnRyeVB0clRhZyk7CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNo
UHRyV2l0aFBhdGNoKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hl
Y2ssIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAg
ICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsK
ICAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mbyk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
dS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihjYWxsZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEz
ICszNDQsMzQgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDIHVzZURhdGFJQykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIG51bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisK
KyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0lu
Zm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1
LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJ
bmZvR1BSLCB1c2VEYXRhSUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBV
c2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxD
YWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxs
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNU
YWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwg
Y2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7
CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0
UGF0aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6
Tm8sIGlzVGFpbENhbGwoKSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVn
KTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwg
Y2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNG
YXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7Cisg
ICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxM
aW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxD
YWxsKSk7CiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2Fs
bEhlbHBlcnMmIGppdCkKQEAgLTM2OSwxNyArMzgxLDMwIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0U2xvd1BhdGgoVk0mIHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50
cnlQdHJUYWcpOwogfQogCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZN
JiwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0
Lm1vdmUoY2FsbExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERl
c3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86Omlu
aXRpYWxpemVEYXRhSUMoVk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxs
TGlua0luZm8sIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7Cisg
ICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29k
ZUluZGV4KTsKKyAgICBzZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNh
bGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25l
TG9jYXRpb247CisgICAgaWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEp
CisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZs
ZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzog
dGltZSBmb3IgcmVmIGNvdW50aW5nPworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVz
KTsKKyAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAg
ICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwog
dm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRh
SUNzKFVzZURhdGFJQzo6Tm8pOwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVs
KCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQu
bmVhckNhbGwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CiAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CkBAIC0zOTcsNyArNDIyLDcg
QEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhcwogCiAgICAgYXV0byBm
YXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgICAg
IHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKICAgICB9KTsKIAogICAgIC8vIC0gSWYgd2UncmUg
bm90IHlldCBsaW5rZWQsIHRoaXMgaXMgYSBqdW1wIHRvIHRoZSBzbG93IHBhdGguCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lv
biAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDExIEBAIGNsYXNzIEpTRnVuY3Rpb247CiBl
bnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiBzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGE7CiAK
K3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbzsKKwogY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVi
bGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIHB1YmxpYzoKLSAgICBl
bnVtIENhbGxUeXBlIHsKKyAgICBlbnVtIENhbGxUeXBlIDogdWludDhfdCB7CiAgICAgICAgIE5v
bmUsCiAgICAgICAgIENhbGwsCiAgICAgICAgIENhbGxWYXJhcmdzLApAQCAtMTY1LDYgKzE2Nyw4
IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgfQogCisg
ICAgdm9pZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgVW5saW5rZWRDYWxsTGlua0luZm8mLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKwogICAgIEdQUlJlZyBjYWxs
ZWVHUFIoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsgfQogICAgIAogICAgIGVudW0gY2xh
c3MgVXNlRGF0YUlDIDogdWludDhfdCB7CkBAIC0xNzMsMTMgKzE3NywxNiBAQCBwdWJsaWM6CiAg
ICAgfTsKIAogcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQ
YXRoSW1wbChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBib29sIGlzVGFp
bENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5V
U0VEX1JFVFVSTjsKIHB1YmxpYzoKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5V
U0VEX1JFVFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxs
KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OworCisgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOworCiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247CiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb247
CiAgICAgdW5pb24gVW5pb25UeXBlIHsKQEAgLTM5Nyw2ICs0MDAsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsTG9j
YXRpb247CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0
clRhZz4gbV9jYWxsZWVMb2NhdGlvbjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IG1fc2xvd1BhdGhTdGFydDsKKyAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKICAgICAgICAgfSBjb2Rl
SUM7CiAgICAgfSB1OwogCkBAIC00MjQsNiArNDI4LDEzIEBAIGlubGluZSBDb2RlT3JpZ2luIGdl
dENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4o
KTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0
aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJbmZv
OjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVE
YXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNyArMzcwLDgg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2FuJ3Qg
Z2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJvY2Vz
cyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJvZHVj
ZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5lc3Mg
YW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2YgYW4g
VW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhlIGxp
dmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNpZGUg
VW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBiZXR3
ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhlIGJ5
dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5nIGFu
IFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CkBAIC00NjYsNiArNDY3
LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAg
YnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRD
b2RlLT5iaW5hcnlBcml0aFByb2ZpbGUoYnl0ZWNvZGUubV9wcm9maWxlSW5kZXgpOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorI2RlZmluZSBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklM
RShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURB
VEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2Vk
Q29kZS0+dW5hcnlBcml0aFByb2ZpbGUoYnl0ZWNvZGUubV9wcm9maWxlSW5kZXgpOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0
cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MjgsMTQgKzU0MiwxNCBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQ
cm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTkso
T3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAg
IExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcElu
YykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BN
dWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAg
ICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktf
V0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5B
UllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc4OSw2ICs4MDMs
NzQgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3du
ZXJFZGdlLnNldCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZt
LCB0aGlzKSk7CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5l
Q29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPiBqaXRDb2RlKQoreworICAgIHNldEpJVENvZGUoaml0
Q29kZS5jb3B5UmVmKCkpOworCisgICAgeworICAgICAgICBjb25zdCBhdXRvJiBqaXRDb2RlTWFw
ID0gdGhpcy0+aml0Q29kZU1hcCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7CisgICAgICAgICAgICBIYW5kbGVySW5m
byYgaGFuZGxlciA9IGV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAvLyBGSVhNRTog
PHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KKyAgICAgICAgICAgIGhhbmRsZXIubmF0aXZlQ29k
ZSA9IGppdENvZGVNYXAuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdn
ZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsK
KyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBhdXRv
JiBqaXREYXRhID0gZW5zdXJlSklURGF0YShsb2NrZXIpOworCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGppdERhdGEubV9qaXRDb25zdGFudFBvb2wuaXNFbXB0eSgpKTsKKyAgICAgICAgaml0RGF0
YS5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5tX2NvbnN0
YW50UG9vbC5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGppdENvZGUt
Pm1fY29uc3RhbnRQb29sLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvIGVudHJ5ID0g
aml0Q29kZS0+bV9jb25zdGFudFBvb2wuYXQoaSk7CisgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5
LnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxP
YmplY3Q6CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IG1f
Z2xvYmFsT2JqZWN0LmdldCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbzogeworICAgICAgICAgICAg
ICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9ICpzdGF0aWNf
Y2FzdDxVbmxpbmtlZENhbGxMaW5rSW5mbyo+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAg
ICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0RGF0YS5tX2NhbGxMaW5rSW5mb3Mu
YWRkKENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCkpOworICAg
ICAgICAgICAgICAgIC8vIE9PUFM6IGRvbid0IGhhcmRjb2RlIHRoZXNlIHJlZ2lzdGVycyBsaWtl
IHRoaXMuCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFsaXplRGF0YUlDKHZt
KCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIp
OworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBjYWxsTGlu
a0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKKyAgICAg
ICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvID0g
KnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRyeS5wYXlsb2FkKTsK
KyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBqaXREYXRhLm1f
c3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUsIENvZGVPcmlnaW4odW5s
aW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8t
PmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyh0aGlzLCB1bmxpbmtlZFN0
dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0g
c3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsOiB7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5w
YXlsb2FkKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0g
ZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHI6
IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFu
dFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3dp
dGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBHbG9iYWxDb2RlOgorICAgIGNhc2UgTW9kdWxl
Q29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZ1bmN0aW9uQ29kZToKKyAgICAg
ICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRl
dGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgorICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0
aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5J
bmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlz
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQog
ewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtMzA3OSw3ICszMTYxLDcgQEAgdW5zaWduZWQgQ29k
ZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBjYXNl
IEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVy
Q291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZv
cih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAj
aWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMjk1LDEzICszMzc3LDEzIEBAIEJpbmFyeUFyaXRoUHJv
ZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgp
KSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wQWRkPigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wQWRk
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfbXVsOgotICAg
ICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8
T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kaXY6
Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1f
YXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMz
MTMsMTEgKzMzOTUsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0
aAogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX25lZ2F0ZToK
LSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0
aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhp
cykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNh
c2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERlYz4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiQXJyYXlQcm9maWxlLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5o
IgogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKQEAgLTE1OCw3ICsxNTksOSBAQCBwdWJsaWM6
CiAgICAgTWV0YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0
YWRhdGEuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJl
dHVybiBtX251bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0
ZXJzKHVuc2lnbmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwKCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPZkFyZ3VtZW50c1RvU2tp
cDsgfQogCkBAIC0xNjcsNyArMTcwLDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bVZhcnMo
KSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KICAgICB1bnNpZ25lZCBudW1UbXBzKCkgY29u
c3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVj
a3BvaW50VG1wczsgfQogCi0gICAgdW5zaWduZWQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7
IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251
bVBhcmFtZXRlcnMpOyB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAg
LTIzMiwxNiArMjM0LDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJl
YWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3BvaW50cygpOwog
Ci0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7
Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYmFjayB0aGUgb3B0aW1pemF0aW9u
IHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlzIGB0aGlzYCBhbmQgd2UncmUgaW4gc2xv
cHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0g
c3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAtMjY2LDggKzI1OCwxMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBnZXRJQ1N0YXR1c01hcChJQ1N0YXR1c01hcCYgcmVzdWx0KTsKICAgICAKICNp
ZiBFTkFCTEUoSklUKQorICAgIC8vIE9PUFM6IG1vdmUgYXJpdGhtZXRpYyBJQ3MgYW5kIHN3aXRj
aCB0YWJsZXMgb3V0IG9mIGhlcmUsIGFuZCBvbnRvIEpJVENvZGUuCiAgICAgc3RydWN0IEpJVERh
dGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICAgICAgQmFnPFN0cnVjdHVy
ZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKICAgICAgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsK
QEAgLTI4Miw5ICsyNzYsMTMgQEAgcHVibGljOgogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENU
b0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXND
YWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1h
cDsKKworICAgICAgICBGaXhlZFZlY3Rvcjx2b2lkKj4gbV9qaXRDb25zdGFudFBvb2w7CisgICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwgbV9qaXRDb25zdGFudFBvb2wpOyB9CiAgICAgfTsKIAor
ICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29k
ZT4pOworCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkKQEAgLTI5
Myw2ICsyOTEsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGFT
bG93KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkpJVERhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2pp
dERhdGEpOyB9CisKICAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxl
Kik7CiAgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwogICAg
IEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwpAQCAtMzIyLDE1ICsz
MjIsMTAgQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRv
IGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0luZm8qIGdl
dENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAg
dm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAgIHsKLSAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBlbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKLSAgICB9CiAg
ICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCiAgICAgewotICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVKSVREYXRh
KGxvY2tlcikubV9qaXRDb2RlTWFwOworICAgICAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklU
Q29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1faml0Q29kZU1hcDsKICAgICB9CiAKICAgICB2b2lk
IHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4m
Jik7CkBAIC00NzIsNiArNDY3LDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5hbWVGb3JSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFy
Z3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1l
bnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQ
cm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykg
fHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKQEAgLTU3Miw2ICs1NjgsNyBAQCBwdWJsaWM6CiAgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5n
ZXQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0
YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihy
ZWcpOyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihpbmRleCk7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9jb25zdGFudFJlZ2lzdGVycykg
KyBkZWNsdHlwZShtX2NvbnN0YW50UmVnaXN0ZXJzKTo6ZGF0YU1lbW9yeU9mZnNldCgpOyB9CiAK
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJu
IG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlv
bkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNjAxLDYgKzU5
OCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7CiAgICAg
ICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAg
ICB9CisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFi
bGVJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4o
bV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgIH0K
KyAgICB2b2lkKiBiYXNlbGluZUpJVENvbnN0YW50UG9vbCgpCisgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
KTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wuZGF0YSgpOwor
ICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxl
cygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29k
ZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTYxMSw2ICs2MTgs
MTEgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwogICAgICAg
ICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07
CiAgICAgfQorICAgIFN0cmluZ0p1bXBUYWJsZSYgYmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUoaW50IHRhYmxlSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5l
SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVy
T2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOyB9CkBAIC03OTcsNiArODA5LDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3Rz
OyB9CiAgICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1
Z2dlclJlcXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVx
dWVzdHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVx
dWVzdHMpOyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2lu
dHMpOwogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykK
QEAgLTgzOCw2ICs4NTEsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2Nr
IG1fbG9jazsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJp
dGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBF
TkFCTEUoSklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBE
Rkc6OkNhcGFiaWxpdHlMZXZlbApAQCAtOTA2LDExICs5MjAsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQ29kZUJsb2NrLCBtX21ldGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKTsgfQogCi0gICAgYm9vbCBsb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCi0gICAgewotICAgICAgICAvLyBT
b21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRo
ZXkgcnVuLgotICAgICAgICByZXR1cm4gIW1fdW5saW5rZWRDb2RlLT5pc0J1aWx0aW5GdW5jdGlv
bigpOwotICAgIH0KKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9y
RnV6emluZ0Vhcmx5UmV0dXJuKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluYWxpemVM
TEludElubGluZUNhY2hlcygpOwpAQCAtMTAwOCw3ICsxMDE4LDkgQEAgcHJpdmF0ZToKICAgICBT
dHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBS
ZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29k
ZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jawpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9j
ayk7CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsg
fQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0
YWRhdGEuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGEKIAogc3RydWN0IEdldEJ5SWRN
b2RlTWV0YWRhdGFBcnJheUxlbmd0aCB7CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCwgYXJyYXlQcm9maWxl
KTsgfQogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxl
bmd0aCkgPT0gMTIpOwogCkBAIC04OCw2ICs4OSw3IEBAIHVuaW9uIEdldEJ5SWRNb2RlTWV0YWRh
dGEgewogICAgICAgICBHZXRCeUlkTW9kZSBtb2RlOwogICAgICAgICB1aW50OF90IGhpdENvdW50
Rm9yTExJbnRDYWNoaW5nOyAvLyBUaGlzIG11c3QgYmUgemVybyB3aGVuIHdlIHVzZSBQcm90b0xv
YWQgbW9kZS4KICAgICB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2RlKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9CiAgICAg
R2V0QnlJZE1vZGVNZXRhZGF0YURlZmF1bHQgZGVmYXVsdE1vZGU7CiAgICAgR2V0QnlJZE1vZGVN
ZXRhZGF0YVVuc2V0IHVuc2V0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5n
dGggYXJyYXlMZW5ndGhNb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODUsNiArMzg1LDggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKAog
ICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCisvLyBPT1BTOiBNYWtlIHRoaXMgc3R1
ZmYgd29yayB3aXRoIGRhdGEgaWNzIHRvIG5vdCBhc3N1bWUgaW5saW5lIGFjY2Vzcy4KKwogdm9p
ZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNj
ZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQpCiB7CiAgICAgaWYg
KGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKQEAgLTQwNCw5ICs0MDYsMTIgQEAgdm9pZCBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2ly
ZVN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFy
Z2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIE9P
UFM6IG1ha2Ugc29tZSB2ZXJzaW9uIG9mIElubGluZUFjY2VzcyBmb3IgYmFzZWxpbmUuIFBlcmhh
cHMgbWFrZSBpdCBkYXRhIGRyaXZlbi4gT3IgcGVyaGFwcyBoYXZlIHRoZSBjb2RlCisgICAgICAg
IC8vIGJlIHNoYXJlZCBzb21laG93IGJldHdlZW4gVW5saW5rZWRDb2RlQmxvY2tzLgorCiAgICAg
ICAgIC8vIElmIGl0IGlzIG5vdCBHZXRCeUlkLWxpa2UtdGhpbmcsIHdlIGRvIG5vdCBlbWl0IG5v
cCBzbGVkIChlLmcuIEdldEJ5VmFsKS4KICAgICAgICAgLy8gVGhlIGNvZGUgaXMgYWxyZWFkeSBh
biBpbmRpcmVjdCBqdW1wLCBhbmQgb25seSB0aGluZyB3ZSBzaG91bGQgZG8gaXMgcmVwbGFjaW5n
IG1fY29kZVB0ci4KLSAgICAgICAgaWYgKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikg
eworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQgJiYgc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CiAgICAgICAgICAgICAvLyBJ
ZiBtX2NvZGVQdHIgaXMgcG9pbnRpbmcgdG8gc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9u
LCB0aGlzIG1lYW5zIHRoYXQgSW5saW5lQWNjZXNzIGNvZGUgaXMgbm90IGEgc3R1YiBvbmUuCiAg
ICAgICAgICAgICAvLyBXZSByZXdyaXRlIHRoaXMgd2l0aCB0aGUgc3R1Yi1iYXNlZCBkaXNwYXRj
aGluZyBjb2RlIG9uY2UsIGFuZCBjb250aW51ZSB1c2luZyBpdCB1bnRpbCB3ZSByZXNldCB0aGUg
Y29kZS4KICAgICAgICAgICAgIGlmIChzdHViSW5mby5tX2NvZGVQdHIuZXhlY3V0YWJsZUFkZHJl
c3MoKSA9PSBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSkgewpAQCAtNDIxLDYgKzQyNiw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNK
dW1wSW5BY2MKICAgICAgICAgICAgICAgICB9KSwgIklubGluZUFjY2VzczogbGlua2luZyBzdHVi
IGNhbGwiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHN0dWJJbmZvLm1f
Y29kZVB0ciA9IHRhcmdldDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRh
LmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
dGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBP
VkVSTE9BRF9CSVRXSVNFX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJdGVyYXRp
b25Nb2RlTWV0YWRhdGEgewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SXRlcmF0aW9uTW9kZU1ldGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0YXRpY19hc3NlcnQo
c2l6ZW9mKGRlY2x0eXBlKHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRpb25Nb2RlKSk7CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0lu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRD
YWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKExMSW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KIAogcHJp
dmF0ZToKICAgICB1aW50cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQg
eyB1bmxpbmtlZEJpdCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIK
IAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgog
I2luY2x1ZGUgIlJlcGF0Y2guaCIKIApAQCAtMjg1LDYgKzI4Niw3IEBAIHZvaWQgU3RydWN0dXJl
U3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ss
ICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vz
c1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CiAg
ICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZhbCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgpAQCAtNDMwLDYgKzQz
MiwyMDQgQEAgQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1f
Y2FjaGVUeXBlID0gbmV3Q2FjaGVUeXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBl
ID0gdW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHVi
SW5mby5zdGFydDsgLy8gT09QUzogZG8gd2UgbmVlZCBhIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAg
ICBkb25lTG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93
UGF0aFN0YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlv
bjsKKyAgICBjYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KHVubGlu
a2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpOworICAgIGNvZGVPcmlnaW4gPSBD
b2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgbV9jb2RlUHRy
ID0gc2xvd1BhdGhTdGFydExvY2F0aW9uOworCisgICAgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICBpZiAoYWNjZXNzVHlwZSA9PSBB
Y2Nlc3NUeXBlOjpHZXRCeUlkICYmIHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkpIHsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9yX25leHQsIHdlIGNhbid0IGNsb2Ji
ZXIgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgZWl0aGVyLgorICAgICAgICB1c2VkUmVnaXN0ZXJzLmFk
ZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gpOworICAgIH0KKworICAgIHN3aXRj
aCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgor
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZv
LnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAg
ICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5l
Y21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRT
ZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJp
dmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICBz
d2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6
Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlz
U3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAg
ICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAg
ICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gdW5saW5r
ZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRC
eVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2
YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpT
ZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFBy
aXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25D
aGVja1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBz
d2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgor
ICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlH
UFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVH
UFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAgICAgICBoYXNDb25zdGFu
dElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gSW52YWxpZEdQUlJlZzsK
KyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlm
aWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAg
ICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIHZhbHVlR1BSID0gQmFz
ZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MucHJvdG90eXBl
R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICAgICAgbV9zdHVi
SW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFu
ZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNl
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3Bl
cnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFs
dWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHVi
SW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBoYXNDb25zdGFudElk
ZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAg
IHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9z
dHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAg
ICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9
IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRX
aXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0
aGlzVmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAg
ICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgor
ICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5m
b0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBpZiAo
YWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQdXRCeVZhbCkKKyAgICAgICAgICAgIG1fYXJyYXlQ
cm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlm
aWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAg
YmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBy
ZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKICNpZiBBU1NFUlRfRU5BQkxFRAogdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y2hlY2tDb25zaXN0ZW5jeSgpCiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJK
SVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAi
T3B0aW9ucy5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5o
IgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgpAQCAt
NTYsNiArNTcsNyBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgewogICAgIEdldEJ5
VmFsLAogICAgIFB1dEJ5SWQsCiAgICAgUHV0QnlWYWwsCisgICAgUHV0UHJpdmF0ZU5hbWUsCiAg
ICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC03OCw2ICs4
MCw4IEBAIGVudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKICAgICBTdHJpbmdMZW5ndGgK
IH07CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworCiBjbGFzcyBTdHJ1Y3R1
cmVTdHViSW5mbyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1YkluZm8p
OwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtOTgsNiArMTAyLDggQEAgcHVibGlj
OgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAorICAgIHZvaWQg
aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8mKTsKKwogICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwog
CiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBk
ZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCkBAIC00NDcsNiArNDUzLDE4
IEBAIGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW4KICAgICB9CiB9CiAK
K3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJp
dmF0ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSB9OworICAgIEVD
TUFNb2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgpIH07CisgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4OworICAgIC8vIE9PUFM6IERvIHdlIG5lZWQgc3RhcnQgZm9yIGRhdGEg
SUNzPworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsg
Ly8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNh
Y2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW5zdGFuY2VvZicg
Y2FjaGVzLgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2Nh
dGlvbjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xvd1Bh
dGhTdGFydExvY2F0aW9uOworfTsKKwogI2Vsc2UKIAogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNiw0
ICszMTYsMTYgQEAgaW50IFVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2ZmcwogICAg
IHJldHVybiBtX291dE9mTGluZUp1bXBUYXJnZXRzLmdldChieXRlY29kZU9mZnNldCk7CiB9CiAK
KyNpZiBBU1NFUlRfRU5BQkxFRAorYm9vbCBVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRlbnRpZmll
cihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIC8vIE9PUFM6IGRvIHdoYXQgQ29kZUJs
b2NrIGRvZXMgYW5kIG1ha2UgYSBoYXNoIHRhYmxlPworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRpZmll
cihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2Rl
Q29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQ
cm9maWxlLmgiCkBAIC02Miw2ICs2Myw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xh
c3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGlu
ZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29u
c3RhbnQgOiBpbnQzMl90OwogCkBAIC0xNzUsNiArMTc3LDcgQEAgcHVibGljOgogCiAgICAgY29u
c3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMo
KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07
IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudElu
ZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9j
b25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIxMCwxNSBA
QCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAog
ICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25z
dCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgewor
ICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0
KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0
aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5z
dHJ1Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBj
b25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51
bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAg
dW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDYg
KzM0NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRl
cygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQg
dG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFp
c0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgYm9v
bCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CisjZW5kaWYKIAogcHJvdGVjdGVk
OgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0
IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwpAQCAtMzk0
LDYgKzQxNSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJl
cyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRy
PEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAg
Q29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFy
c2VNb2RlOwpAQCAtNDEwLDYgKzQzMiw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogYmlu
ZCBhIGJldHRlciBwbGFjZSB0byBzdG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlB
cml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0
aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtNDU1LDYgKzQ4MCwyOCBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVj
dGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0
IEluc3RydWN0aW9uKiBwYykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVt
cE9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5
QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5
QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBl
bmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV91
bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKFVuYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJp
dGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsg
fQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7
IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQogCiBwcml2YXRlOgogICAgIHVzaW5n
IE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0
LCBpbnQ+OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MTg2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKICAgICBib29sIHdh
c0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9CiAgICAgYm9vbCBoYXNDaGVj
a3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50cygpOyB9
CiAgICAgYm9vbCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aGFz
VGFpbENhbGxzKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUoKSB7IHJl
dHVybiBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCk7IH0KKyAgICB1bnNpZ25l
ZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFy
aXRoUHJvZmlsZSgpOyB9CiAKICAgICAvLyBVcGRhdGluZyBVbmxpbmtlZENvZGVCbG9jay4KICAg
ICB2b2lkIHNldEhhc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFzQ2hlY2twb2lu
dHMoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0
YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NCw2ICs2NCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFVubGlua2VkTWV0YWRhdGFUYWJsZSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9wY29kZT4KKyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9w
Y29kZSYgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQpOworICAg
ICAgICB1aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMy
KClbT3Bjb2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07
CisgICAgICAgIHJldHVybiBiYXNlVHlwZU9mZnNldCArIHNpemVvZih0eXBlbmFtZSBPcGNvZGU6
Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7CisgICAgfQorCiBwcml2YXRlOgogICAg
IGVudW0gRW1wdHlUYWcgeyBFbXB0eSB9OwogCkBAIC0xMDEsNiArMTA5LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2lu
ZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJ
KHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQCB0ZW1wbGF0ZTx1bnNp
Z25lZCBudW1iZXJPZkJ1Y2tldHNBcmd1bWVuCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1
Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3Bl
Y0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldElu
ZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3Bl
Y0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQpAQCAtMTM0LDcgKzEz
Myw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgCiAgICAgICAgIHJldHVy
biBtX3ByZWRpY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNr
ZXRzW3RvdGFsTnVtYmVyT2ZCdWNrZXRzXTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGlj
dGlvbiB7IFNwZWNOb25lIH07CkBAIC0xNTYsNiArMTU1LDcgQEAgc3RydWN0IFZhbHVlUHJvZmls
ZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldAogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZh
bHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgp
IDogVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPigpIHsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0c1swXSk7IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5OCw3
ICsxNTk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRVbmFyeQogICAg
ICAgICBlbWl0VW5hcnlPcDxPcE5vdD4oZHN0LCBzcmMpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5
cGUpOworICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSwgbV9jb2Rl
QmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IG9wX2JpdG5vdDoKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BCaXRub3Q+KGRzdCwgc3JjKTsKQEAg
LTE2OTYsMTMgKzE2OTYsMTMgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRU
eXBlTwogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluYyhSZWdpc3RlcklE
KiBzcmNEc3QpCiB7Ci0gICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcEluYzo6
ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsK
ICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdERlYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BEZWM6OmVtaXQodGhpcywgc3Jj
RHN0KTsKKyAgICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFy
eUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqPgogICAgICAgICBlbWl0
QmluYXJ5T3AoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBz
cmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJpbmFyeU9w
OjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMpOworICAgICAgICAgICAgQmluYXJ5
T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcywgbV9jb2RlQmxvY2stPmFkZEJp
bmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlz
aW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw2IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShW
TSYgdm0sIENhbGxGcmFtZSoKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNv
ZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgp
KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxs
VmFsaWQpOwogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VPU1JFbnRyeVRvREZHKCkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw2ICsz
MDksNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAg
ICAgICB0cnVlQ2FsbGVyID8gQXNzZW1ibHlIZWxwZXJzOjpVc2VFeGlzdGluZ1RhZ1JlZ2lzdGVy
Q29udGVudHMgOiBBc3NlbWJseUhlbHBlcnM6OkNvcHlCYXNlbGluZUNhbGxlZVNhdmVkUmVnaXN0
ZXJzRnJvbUJhc2VGcmFtZSwKICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpy
ZWdUMSwgR1BSSW5mbzo6cmVnVDQpOwogCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGlmIHdl
IG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIGJhc2VsaW5lIHBiL21ldGFkYXRhIHJlZ2lzdGVycwog
ICAgICAgICBpZiAoY2FsbGVySXNMTEludCkgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNh
bGxlcik7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpLCBjYWxsZWVT
YXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0
ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSk7CkBAIC00MDQsNiArNDA1LDkgQEAgdm9pZCBhZGp1c3RB
bmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVy
czo6cGNHUFIpOwogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NS
RXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZSB7CisgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5t
ZXRhZGF0YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRhdGFHUFIpOworICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVKSVRD
b25zdGFudFBvb2woKSksIEpJVDo6c19jb25zdGFudHNHUFIpOworCiAgICAgICAgIGNvZGVCbG9j
a0ZvckV4aXQtPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CiAKICAgICAgICAgQnl0ZWNvZGVJ
bmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4OSw3ICs4ODks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAKICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAg
IHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXls
b2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7
CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBj
YWxsZWVQYXlsb2FkR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFp
bENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZm
bGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZs
ZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OTYsNyArODk2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENh
bGwoTm9kZSogbm9kZQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2Vz
OwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxM
aW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKICAg
ICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAg
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JU
YWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcgKzM5
ODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAgIEpJ
VFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5
cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1
c2VkUmVnaXN0ZXJzLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklU
LCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVzZWRS
ZWdpc3RlcnMsCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlkR1BS
UmVnLCBzdHViSW5mb0dQUik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wg
PSB0cnVlOwogCkBAIC0xNDc0Nyw3ICsxNDc0Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBu
b2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAg
ICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNS
ZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCksIGNhbGxTaXRlSW5kZXgpOworICAgIG1f
aml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3Ms
IHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkp
LCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjgx
ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MzE3LDcgKzQzMTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
R1BSUmVnIHN0dWJJbmZvR1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkg
PyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAgYXV0
byBnZW5lcmF0b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAg
ICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09y
aWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAg
ICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwg
Y2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAgICAg
ICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQ
UlJlZywgc3R1YkluZm9HUFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwpAQCAtMTAzNTUsNyArMTAzNTUsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVC
bG9jaygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVn
VDApOwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xv
d1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6
cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVT
aHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNo
dWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAg
ICAgICAgIH0pOwpAQCAtMTA2OTgsNyArMTA2OTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsK
LSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBj
YWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsm
XSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsK
ICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDk3OSw3ICsxMDk3OSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAo
aXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJl
ZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJ
bmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRh
aWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjgxODY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5
KQpAQCAtNDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkK
ICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHBy
ZWZpeCwgZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVm
aXgsIGZpZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVzLm1hcCBkbyB8ZmllbGROYW1l
fAorICAgICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tm
aWVsZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisgICAgICAgICAgICBlbmQuam9p
bigiXG4iKQorICAgICAgICBlbmQKKworICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgs
IGZpZWxkcywgZmllbGROYW1lcykKICAgICAgICAgICAgIGZpZWxkcy5tYXAgZG8gfGZpZWxkLCB0
eXBlfAogICAgICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAotICAgICAgICAgICAg
ICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAg
JywgdHlwZSl9XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVu
aW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUsIGZpZWxkTmFtZXMp
fVxuI3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAgICAg
ICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgZmllbGRO
YW1lcy5wdXNoKGZpZWxkTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlw
ZS50b19zfSBtXyN7ZmllbGROYW1lfTsiCiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAg
ICBlbmQuam9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0
RmllbGRzKCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkTmFtZXMgPSBbXQorICAg
ICAgICBwcmVmaXggPSAiICAgICAgICAiCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMo
cHJlZml4LCBAZmllbGRzLCBmaWVsZE5hbWVzKQorICAgICAgICBmaWVsZHMgPSBmaWVsZHMgKyAi
XG4iICsgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCiAKICAg
ICAgICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAmJiAobm90IEBpbml0
aWFsaXplcnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTgsOCArNjk4
LDEzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXMKIAogdm9pZCBB
c3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFs
T2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3Zp
bmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIENhbGxMaW5rSW5m
byogaW5mbykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1Qy
KTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtUYXNrKFs9LCAmdm1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShy
ZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzE4LDYgKzE3MTgsNyBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBD
YWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9i
YWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsKICAgICAKICAgICB2b2lkIG1ha2VTcGFjZU9u
U3RhY2tGb3JDQ2FsbCgpOwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3Bw
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCYXNlbGluZUpJVENvZGUuaCIKKworI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1
ZGUgIkp1bXBUYWJsZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitKSVRBZGRJQyogTWF0aElDSG9sZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJv
ZmlsZSk7IH0KK0pJVE11bElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxl
KTsgfQorSklUU3ViSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9
CitKSVROZWdJQyogTWF0aElDSG9sZGVyOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorCit2
b2lkIE1hdGhJQ0hvbGRlcjo6YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCit7Cisg
ICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICBtX211bElDcyA9IFdU
Rk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25l
Z0lDcyk7CisgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKK30KKworQmFz
ZWxpbmVKSVRDb2RlOjpCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2Rl
LCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgIDogRGlyZWN0SklU
Q29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQp
CisgICAgLCBNYXRoSUNIb2xkZXIoKQoreyB9CisKK0Jhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5l
SklUQ29kZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRl
ICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworLy9jbGFzcyBKSVRBZGRJQzsKKy8vY2xhc3MgSklUTXVsSUM7CisvL2NsYXNzIEpJVFN1YklD
OworLy9jbGFzcyBKSVROZWdJQzsKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVu
YXJ5QXJpdGhQcm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CitzdHJ1
Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3MgTWF0
aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXIm
IG90aGVyKTsKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7
CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJ
VFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyog
YWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworICAgIC8qCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Cisg
ICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0
dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxH
ZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRNdWxJQyog
YWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVs
SUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVu
YW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklU
TmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5h
cnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46
OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmls
ZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKyAgICAqLworCitw
cml2YXRlOgorICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBt
X211bElDczsKKyAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJhZzxKSVRTdWJJQz4g
bV9zdWJJQ3M7Cit9OworCitjbGFzcyBKSVRDb25zdGFudFBvb2wgeworcHVibGljOgorICAgIHVz
aW5nIENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90
IHsKKyAgICAgICAgR2xvYmFsT2JqZWN0LAorICAgICAgICBDYWxsTGlua0luZm8sCisgICAgICAg
IFN0cnVjdHVyZVN0dWJJbmZvLAorICAgICAgICBGdW5jdGlvbkRlY2wsCisgICAgICAgIEZ1bmN0
aW9uRXhwciwKKyAgICB9OworCisgICAgc3RydWN0IFZhbHVlIHsKKyAgICAgICAgLy8gT09QUzog
TWFrZSB0aGUgcG9pbnRlciBwYWNrZWQuCisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgdm9p
ZCogcGF5bG9hZDsKKyAgICB9OworCisgICAgSklUQ29uc3RhbnRQb29sKCkgPSBkZWZhdWx0Owor
ICAgIEpJVENvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworICAgIEpJ
VENvbnN0YW50UG9vbCYgb3BlcmF0b3I9KEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisK
KyAgICBDb25zdGFudCBhZGQoVHlwZSB0eXBlLCB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cikKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAg
ICAgbV9jb25zdGFudHMuYXBwZW5kKFZhbHVlIHsgdHlwZSwgcGF5bG9hZCB9KTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRzLnNpemUoKTsgfQorICAgIFZhbHVlIGF0KHNpemVfdCBpKSBjb25zdCB7IHJl
dHVybiBtX2NvbnN0YW50c1tpXTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxWYWx1ZT4gbV9j
b25zdGFudHM7Cit9OworCisKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RK
SVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBCYXNlbGluZUpJVENv
ZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdp
dGhBcml0eUNoZWNrKTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisKKyAgICBC
YWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOyAvLyBPT1BTOiBtYWtlIHN1cmUgd2UgdmlzaXQg
dGhlc2Ugc29tZWhvdy4gT3IgYXNzZXJ0IHdlIGRvbid0IGhhdmUgdG8sIHNpbmNlIHRoZXkncmUg
dmlydHVhbCBjYWxscy4KKyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxp
bmtlZFN0dWJJbmZvczsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNo
SnVtcFRhYmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlczsKKyAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25z
dGFudFBvb2wgbV9jb25zdGFudFBvb2w7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlz
aW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQ
bGFuOjpjb2RlU2l6ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxh
bjo6ZmluYWxpemUoKQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZp
bmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9q
aXQuZmluYWxpemVPbk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0
KSB7CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19F
VkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVk
IikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAko
cmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVy
czo6bG9nU2hhZG93Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkp
KTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQ
UlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAg
c3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0
LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBz
dG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigp
KSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQ
YWNrZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRv
d1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVl
KSkpOwotICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cihjb2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19
Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwg
R1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2Ny
YXRjaDIpCiB7CiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0No
aWNrZW4oKTsKQEAgLTcyLDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFk
b3dDaGlja2VuUGEKICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFy
Z0dQUikpOwogfQogCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBD
Q2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93
UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBl
IGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRy
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNU
X09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBj
YWxsZWUpKSk7CisgICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAg
ICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihT
aGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIGNvZGVCbG9jaykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4
LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJl
Z3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxT
aXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJ
bmRleCk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3Bl
LCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAg
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNj
b3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6
ZW1pdEpJVENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3
aGVyZSwgU2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBj
aGFyKiBkZXNjcmlwdGlvbikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC04NDAsNyArODQwLDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2Ji
ZXIgYWxsIHZvbGF0aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29t
IG9uIHRoZSB0b3Agb2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4K
ICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFj
a2V0LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVn
cywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRv
d0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0
aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJS
ZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXgpOworICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRv
d1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVC
bG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhp
bmQgYSBwb2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1Bh
Y2tldC4KICAgICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hh
ZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2Fs
bGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxl
ZVNhdmVSZWdpc3RlcnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2
b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3Qg
UmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdp
c3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpIH07Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2
ZUxvY2F0aW9ucyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7
CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMt
PmF0KGkpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlRGF0YS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4
LDcgQEAgcHVibGljOgogICAgIEdQUlJlZyBudW1iZXJUYWdSZWdpc3RlciB7IEludmFsaWRHUFJS
ZWcgfTsKIAogICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayopOwor
ICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRM
aXN0Kik7CiAjZW5kaWYKICAgICBWYWx1ZVJlY292ZXJ5IGNhbGxlZTsKIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9p
ZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpCi0gICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpT
SW50ZXJmYWNlSklUKCZ2bSwgbnVsbHB0cikKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJw
cmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLnNpemUoKSA6IDApCiAgICAgLCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAg
LTc3LDYgKzc3LDkgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgog
ICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxP
YmplY3RDb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
Okdsb2JhbE9iamVjdCk7CisgICAgbV9wcm9maWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAg
ICBtX3VubGlua2VkQ29kZUJsb2NrID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwog
fQogCiBKSVQ6On5KSVQoKQpAQCAtOTAsOCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0
aW1pemF0aW9uQ2hlY2soKQogICAgICAgICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0
aW1pemU7Ci0gICAgCi0gICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQs
IFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnko
KSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50
ZXIoKSkpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDApOworICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBU
cnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkp
LCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkp
KTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJ
bnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNiwxOCBAQCB2
b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlm
eVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0
Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KQogewogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgo
Tm90RXF1YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0
YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQordm9pZCBKSVQ6OmVt
aXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRj
aEdQUikKIHsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBl
ID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPnZhclJlYWRPbmx5V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFyUmVhZE9u
bHlXYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4
KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCkBAIC0xMjksNyArMTM1LDcgQEAgdm9pZCBKSVQ6
OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3RlciwgcmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCByZWdUMCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlz
KTsKQEAgLTE4MSwyMSArMTg3LDQxIEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0
IEluc3RydWMKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1
dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
OworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZz
ZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0
YWJsZSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHQsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpLCByZXN1bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAg
ICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2Nr
Rm9yQ29uc3RydWN0KCkpLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwo
KSksIHJlc3VsdCk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlOjpvZmZzZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIocmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworfQor
CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2Nr
LCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJs
b2NrLCAiXG4iKTsKICAgICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFz
c2VydEFyZ3VtZW50Q291bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291
bnQgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3Ry
dWN0aW9ucyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2ln
bmVkIGluc3RydWN0aW9uQ291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5zaXplKCk7CiAKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9
IG1fY29kZUJsb2NrLT52bSgpOwogICAgIEJ5dGVjb2RlSW5kZXggc3RhcnRCeXRlY29kZUluZGV4
KDApOworCisgICAgLy8gT09QUzogTWF5YmUgb25seSBkbyB0aGlzIGlmIHdlIGRpc2FibGUgc2hh
cmluZyBzb21laG93PworICAgIC8qCisgICAgVk0mIHZtID0gbV91bmxpbmtlZENvZGVCbG9jay0+
dm0oKTsKICAgICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4ICYmIChtX2NvZGVCbG9j
ay0+aW5oZXJpdHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0
czxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7CiAgICAgICAgIC8vIFdlIGNhbiBvbmx5
IGRvIHRoaXMgb3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFtQ29kZUJsb2Nr
J3MgZXhhY3RseSBvbmNlLgogICAgICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBiZSBp
bnZhbGlkIG90aGVyd2lzZS4gV2hlbiB0aGUgTExJbnQgZGV0ZXJtaW5lcyBpdCB3YW50cyB0bwpA
QCAtMjM2LDYgKzI2Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKyAgICAqLwogCiAgICAgbV9ieXRlY29kZUNv
dW50SGF2aW5nU2xvd0Nhc2UgPSAwOwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsg
KSB7CkBAIC0yNzgsOCArMzA1LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4
ZWN1dGlvbigpKSkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVC
bG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7
CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1l
Kj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5
dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1Bv
aW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9CkBAIC01MjcsNyArNTU0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7
CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAg
ICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV91bmxpbmtlZENvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dM
bigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgIiwgbV9ieXRlY29kZUluZGV4
LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgpKTsKQEAgLTU0NSw4ICs1NzIsOCBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAg
ICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAg
ICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygp
OwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0g
U0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZw
KCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC02
NzQsNTUgKzcwMSw1NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2Vu
ZGlmCiB9CiAKK3ZvaWQgSklUOjplbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9v
bFJlZ2lzdGVycygpCit7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21ldGFkYXRhR1BSKTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29u
c3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7Cit9CisKK3ZvaWQgSklUOjplbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCkKK3sKKyAgICBCYXNlOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZS
ZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
Cit9CisKIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9
IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICAvLyBPT1BTOiBNYXliZSB0aGlz
IHNob3VsZCBiZSBkb25lIG9uIHVubGlua2VkIGNvZGUgYmxvY2s/CisgICAgREZHOjpDYXBhYmls
aXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsK
ICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAg
ICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9y
SW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6
OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwot
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91
bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQotICAgIAotICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNl
IEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1bGVDb2RlOgotICAgIGNhc2UgRXZhbENvZGU6Ci0g
ICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAgICAgICAgLy8gV2UgY291bGQg
aGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5s
aW5lYWJsZSBjYWxsLgotICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9u
LgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5s
aW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwotICAg
ICAgICBicmVhazsKLSAgICB9CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVu
c3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1w
bGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxl
cygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEo
bG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1w
VGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
cygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRj
aEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zd2l0
Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYg
KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3Rv
cjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
dHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYm
IE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1f
ZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsK
KyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJv
ZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIE9PUFM6IGJ1aWxkIGEgZGlzYXNzZW1ibGVyIG9mZiB1
bmxpbmtlZCBjb2RlIGJsb2NrCisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxK
SVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KICAgICBpZiAoVU5M
SUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBPT1BTOiBi
dWlsZCBwcm9maWxlciBkaXNhc3NlbWJsZXIgb2ZmIHVubGlua2VkIGNvZGUgYmxvY2sKICAgICAg
ICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpD
b21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9jayksCisgICAgICAgICAgICAgICAgbV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVC
bG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1f
Y29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRC
eXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0
ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CkBAIC03NDIsMTEgKzc3
MCwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAg
IG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAg
ICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJl
Z2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVU
b3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9m
ZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzU3LDE2
ICs3ODYsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAg
IG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZl
Q2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygp
OworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7
CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7
CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVt
aXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewor
ICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV91bmxpbmtlZENvZGVCbG9j
ay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4
ZWRWZWN0b3I8VmFsdWVQcm9maWxlPjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAg
ICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBh
IGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdz
IGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVt
bXkgdmFsdWUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9y
KCkgJiYgIWFyZ3VtZW50KQorICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNzc3LDEyICs4MTAsMTIgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQz
MihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAg
ICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIo
KSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fY29k
ZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3MpOwor
ICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwgYXJn
dW1lbnQgKiBzaXplb2YoVmFsdWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJz
dEJ1Y2tldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
UkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVCbG9jay0+
aml0VHlwZSgpKSk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAgICAgIG1f
dm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhp
cyk7CkBAIC03OTksMjQgKzgzMiwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluCiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBp
ZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1f
Y29kZUJsb2NrKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2ssIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIHJlZ1Qw
KTsKIAogICAgIC8vIElmIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciBy
ZXF1aXJlIGFyaXR5IGZpeHVwLgotICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2Rl
QmxvY2stPm1fbnVtUGFyYW1ldGVycyAhPSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5
cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAgYm9vbCBy
ZXF1aXJlc0FyaXR5Rml4dXAgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkg
IT0gMTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxh
YmVsKCk7Ci0gICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9z
aG91bGRBbHdheXNCZUlubGluZWQpOworCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7
Ci0gICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xv
Z3VlKHJlZ1QwKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAKICAgICAg
ICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpLCByZWdUMSk7Ci0gICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJlZ2luTGFi
ZWwsIHRoaXMpOworICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGJlZ2lu
TGFiZWwsIHRoaXMpOwogCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
MCk7CiAKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2RlQmxvY2st
PmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRp
b25DYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCBhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb24obV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3Bl
cmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBhcmd1
bWVudEdQUjApOwogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAg
ICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywg
cmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTgzOSw3ICs4NzUs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6
OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVf
cHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9
IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV91bmxp
bmtlZENvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkp
OwogICAgIGxpbmsoKTsKIH0KIApAQCAtODU4LDggKzg5NCw4IEBAIHZvaWQgSklUOjpsaW5rKCkK
ICAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewogICAgICAgICBjYXNlIFN3aXRjaFJlY29y
ZDo6SW1tZWRpYXRlOgogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyOiB7Ci0g
ICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAg
ICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAg
ICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dp
dGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0
XSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRUYWJsZS5t
X2JyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBv
ZmZzZXQgPSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3MSw4ICs5MDcs
OCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3aXRjaFJl
Y29yZDo6U3RyaW5nOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
ICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1
bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRl
Y29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKGF1
dG8mIGxvY2F0aW9uIDogdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hPZmZzZXQ7
CkBAIC05MDYsMzIgKzk0MiwzNSBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCByZWNvcmQuY2FsbGVlKTsKICAgICB9CiAKLSAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9kZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2lu
QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlWYWxz
LCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbnN0YW5jZU9mcywg
cGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5kQWNj
ZXNzZXMsIHBhdGNoQnVmZmVyKTsKKyAgICBhdXRvIGZpbmFsaXplSUNzID0gWyZdIChhdXRvJiBn
ZW5lcmF0b3JzKSB7CisgICAgICAgIGZvciAoYXV0byYgZ2VuIDogZ2VuZXJhdG9ycykgeworICAg
ICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+c3RhcnQgPSBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zdGFydCk7CisgICAgICAgICAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KGdlbi5tX2RvbmUpOworICAgICAgICAgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc2xvd1BhdGhCZWdpbik7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkcyk7CisgICAgZmluYWxpemVJ
Q3MobV9nZXRCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHNXaXRoVGhpcyk7Cisg
ICAgZmluYWxpemVJQ3MobV9wdXRCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9wdXRCeVZhbHMp
OworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlW
YWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1faW5C
eVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5zdGFuY2VPZnMpOworICAgIGZpbmFsaXplSUNz
KG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMpOwogCiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlvbklu
Zm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZv
ID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87Ci0gICAgICAgIGluZm8uc2V0Q29kZUxv
Y2F0aW9ucygKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0
clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQYXRoU3RhcnQpLAotICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxv
Y2F0aW9uKSk7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0
aW9uSW5mby51bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24g
PSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5m
by5kb25lTG9jYXRpb24pOwogICAgIH0KIAotICAgIHsKLSAgICAgICAgSklUQ29kZU1hcEJ1aWxk
ZXIgaml0Q29kZU1hcEJ1aWxkZXI7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNl
dCkgewotICAgICAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQot
ICAgICAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5
dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xh
YmVsc1tieXRlY29kZU9mZnNldF0pKTsKLSAgICAgICAgfQotICAgICAgICBtX2NvZGVCbG9jay0+
c2V0SklUQ29kZU1hcChqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpKTsKKyAgICBKSVRDb2Rl
TWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKKyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVP
ZmZzZXQpIHsKKyAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQor
ICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0XSkpOwogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpk
dW1wRGlzYXNzZW1ibHkoKSkpIHsKQEAgLTk0MCwyNiArOTc5LDM3IEBAIHZvaWQgSklUOjpsaW5r
KCkKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkobV9jb21waWxhdGlvbikpIHsKKyAgICAgICAg
Ly8gT09QUzogbWFrZSBieXRlY29kZSBwcm9maWxlciBrbm93IGFib3V0IHVubGlua2VkIENCPwog
ICAgICAgICBpZiAoT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpCiAg
ICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9u
LmdldCgpLCBwYXRjaEJ1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
ci0+YWRkQ29tcGlsYXRpb24obV9jb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAgICAgICAg
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2ZpbGVkQ29k
ZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2RlT3JpZ2lu
TWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlciksIHBhdGNoQnVmZmVyKTsKICAgICAKKyAgICAvLyBPT1BTOiBNYWtlIGEg
dmVyc2lvbiBvZiBDb2RlQmxvY2tXaXRoSklUVHlwZSB0aGF0IGtub3dzIGFib3V0IFVubGlua2Vk
Q29kZUJsb2NrLgogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVf
Q09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNl
bGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2Vs
aW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3By
b2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAg
IG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0
eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29kZSA9IGFkb3B0UmVm
KCpuZXcgQmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2spKTsKKworICAgIG1f
aml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gV1RGTW92ZShtX3VubGlua2VkQ2FsbHMpOworICAg
IG1faml0Q29kZS0+bV9ldmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJ
bmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0gV1RGTW92ZShtX3Vu
bGlua2VkU3R1YkluZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdU
Rk1vdmUobV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcyA9IFdURk1vdmUobV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2pp
dENvZGUtPm1faml0Q29kZU1hcCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCk7CisgICAg
bV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNzKTsKKyAgICBtX2ppdENvZGUtPm1fY29u
c3RhbnRQb29sID0gV1RGTW92ZShtX2NvbnN0YW50UG9vbCk7CiAKICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVw
IGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCkt
PnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCku
dW50YWdnZWRQdHIoKSk7CisgICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9y
ICVwIGF0IFslcCwgJXApLlxuIiwgbV91bmxpbmtlZENvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFi
bGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9y
eSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpm
aW5hbGl6ZU9uTWFpblRocmVhZCgpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25N
YWluVGhyZWFkKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFp
c0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogCkBAIC05NjgsMjUgKzEwMTgsMjEgQEAgQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5rQnVmZmVyLT5ydW5N
YWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MoKTsKIAotICAgIHsKLSAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgbV9jb2RlQmxv
Y2stPnNocmlua1RvRml0KGxvY2tlciwgQ29kZUJsb2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5r
KTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1i
ZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgewotICAgICAgICBIYW5kbGVySW5mbyYgaGFu
ZGxlciA9IG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOwotICAgICAgICAvLyBGSVhN
RTogPHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KLSAgICAgICAgaGFuZGxlci5uYXRpdmVDb2Rl
ID0gbV9jb2RlQmxvY2stPmppdENvZGVNYXAoKS5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50
YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOwotICAgIH0KKyAgICAv
LyBPT1BTOiBEb24ndCB0aGluayB0aGlzIHNocmluayBpcyByZWFsbHkgZG9pbmcgYW55dGhpbmcg
YW55bW9yZS4gVmVyaWZ5LgorICAgIC8veworICAgIC8vICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgLy8gICAgbV9jb2RlQmxvY2stPnNocmlu
a1RvRml0KGxvY2tlciwgQ29kZUJsb2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5rKTsKKyAgICAv
L30KIAorICAgIC8vIE9PUFM6IG1fcGNUb0NvZGVPcmlnaW5NYXAgc2hvdWxkIGxpdmUgb24gQmFz
ZWxpbmVKSVRDb2RlIGZvciBiYXNlbGluZSBjb2RlYmxvY2tzLgogICAgIGlmIChtX3BjVG9Db2Rl
T3JpZ2luTWFwKQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoV1RG
TW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKSk7CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2st
PnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOwogCiAg
ICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5h
ZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAg
ICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgp
KSk7CisgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zU2l6ZSgpKSk7CiAKLSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENv
ZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJh
c2VsaW5lQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4gQ29t
cGlsYXRpb25TdWNjZXNzZnVsOwogfQpAQCAtOTk4LDExICsxMDQ0LDExIEBAIHNpemVfdCBKSVQ6
OmNvZGVTaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAK
LUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGRvTWFp
blRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0
aG91dEZpbmFsaXppbmcoZWZmb3J0KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQo
KTsKKyAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxOCArMTA4
OCwyOCBAQCB2b2lkIEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAg
IG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBh
cmluZyBmb3IgSklUIGNvbXBpbGF0aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFt
ZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkp
ID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAog
ICAgIHJldHVybiByb3VuZExvY2FsUmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChj
b2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGxJblJlZ2lzdGVycyk7CiB9CiAKLWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENv
ZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBmcmFtZVJlZ2lzdGVyQ291bnRGb3Io
Y29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKworaW50IEpJVDo6c3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2sp
IC0gMSkub2Zmc2V0KCk7CiB9CiAKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNv
ZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKIEhhc2hNYXA8Q1N0cmluZywgU2Vj
b25kcz4gSklUOjpjb21waWxlVGltZVN0YXRzKCkKIHsKICAgICBIYXNoTWFwPENTdHJpbmcsIFNl
Y29uZHM+IHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjgx
ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNiArMzcsNyBAQAogCiAjZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwgZXhw
ZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9mZnNl
dCBcIiVzXCIgc2hvdWxkIGJlICVkLCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19jYXN0
PGludD4oZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCisjaW5jbHVkZSAi
QmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29t
bW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCkBAIC00NCw2ICs0
NSw3IEBACiAjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCisjaW5jbHVkZSAiTExJbnRE
YXRhLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQ
b2ludGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsxNTEsMTQg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25J
bmZvIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247Ci0gICAgICAgIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5r
ZWRDYWxsTGlua0luZm87CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExp
bmtJbmZvQ29uc3RhbnQ7CiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3
Q2FsbGVlRnVuY3Rpb24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBw
cml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJ
VCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93
UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKICAgICAgICAgZnJp
ZW5kIGNsYXNzIEpJVFRodW5rczsKQEAgLTE3MSw2ICsxNzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5v
dCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgogICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCisgICAgICAgIHVzaW5n
IEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwg
Q29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVP
ZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMTc4LDI4ICsx
ODIsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0lu
dGVyZmFjZUpJVDo6dm0oKTsgfQogCiAgICAgICAgIHZvaWQgY29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVz
dWx0IGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZp
bmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayopOwogICAgICAgICBzaXplX3QgY29kZVNpemUo
KSBjb25zdDsKIAogICAgICAgICB2b2lkIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29t
cGlsZSgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBp
bGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9m
ZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBKSVQodm0s
IGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGNvZGVCbG9jaywgZWZm
b3J0KTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVy
Q291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZy
YW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIGludCBzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIGlu
dCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0
cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBp
bGVUaW1lKCk7CiAKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0YUdQ
UiA9IExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFI7CisgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNfY29uc3RhbnRzR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFI7
CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7CiAgICAgICAgIHZvaWQgcHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKICAgICAgICAgdm9pZCBsaW5rKCk7Ci0gICAgICAgIENv
bXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAg
ICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklUQ29t
cGlsYXRpb25FZmZvcnQpOwogCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNv
ZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwo
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2ICsy
MzIsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkUHRyRnJvbU1ldGFk
YXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFk
YXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0YWRh
dGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2
b2lkIHN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2
b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgbG9hZENvbnN0
YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZENvZGVC
bG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGVt
aXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOwor
CiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAgICAg
ICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7
CkBAIC0yNTgsMTYgKzI5MywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFi
bGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYg
T3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5m
b0NvbnN0YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3Rk
OjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFy
Z3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8
fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxM
aW5rSW5mb0NvbnN0YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAg
ICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0
IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwogICAgICAgICB2b2lk
IGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtMjg3LDE0ICszMjIsMTUgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQg
ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdy
aXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lcik7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpOwogCiAg
ICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJl
Z1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4K
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJl
Zyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIC8vdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7CisgICAgICAgIC8vdm9p
ZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShjb25zdCBCeXRlY29kZSYsIEdQUlJlZyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBK
U1ZhbHVlUmVncyk7CiAjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJl
Z3MpOwpAQCAtMzA3LDYgKzM0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lk
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5
UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJh
eVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2Ny
YXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBwdHJk
aWZmX3QsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3Ap
OwpAQCAtNTkyLDcgKzYzMiw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNiwxNCArNjY1LDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBp
c1Vuc2lnbmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJy
YW5kLCBBY2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVh
bFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVT
bG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5j
RXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBl
bWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhcklu
amVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAg
ICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNo
R1BSKTsKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1
bnNpZ25lZCBkZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBV
U0UoSlNWQUxVRTY0KQpAQCAtNjQ1LDcgKzY4NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlm
CiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1
aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9p
bnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1Nl
dCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRl
clRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZv
aWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9p
ZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NCw2ICs2
OTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAg
Ym9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENv
bnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENv
bnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3Rh
bnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC02OTUsMjYgKzczNSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJl
c29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVW
YXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFU
T1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9y
KFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX0dFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgot
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwot
Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNj
b3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBN
b2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFu
IHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2ZWRDbG9zdXJlVmFyIGJlY2F1c2Ug
d2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29wZS4KLSAgICAgICAg
ICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNkZWZpbmUgREVDTEFSRV9SRVNPTFZF
X1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5
cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFS
RV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVz
b2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1l
KTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mKTsK
QEAgLTc1OSwxMCArNzgxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwog
ICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFk
YXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5
dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsK
ICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3Bl
cmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjAsMjAg
Kzg0MiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7
CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+
CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46
Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAg
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlw
ZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwg
dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVz
cyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVz
cyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAg
ewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9uVHlw
ZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRyZXNz
KEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9m
ZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE4LDI1ICs5NDAsMjAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9w
dGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5C
ZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7
IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRF
bWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVy
IHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNo
IGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgZW1pdE1h
dGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAgICAgICB2
b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBv
cnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1l
cygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBm
cm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8gYmUg
Y29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0
byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNh
bWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNvcGll
ZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmlu
YXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmlu
YXJ5T3ApOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjMs
OSArOTgwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5
PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsK
IAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZv
czsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGll
ZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAg
ICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTk5OSwxMSArMTAxMywyNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBJbnN0cnVjdGlvbiosIFVuaXF1ZVJl
ZjxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+PiBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9u
U3RhdGU7CiAKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwotICAgICAgICBib29sIG1f
Y2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmls
aW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsK
IAotICAgICAgICBSZWZQdHI8RGlyZWN0SklUQ29kZT4gbV9qaXRDb2RlOworICAgICAgICBDb2Rl
QmxvY2sqIG1fcHJvZmlsZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFVubGlua2Vk
Q29kZUJsb2NrKiBtX3VubGlua2VkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworCisgICAgICAgIE1h
dGhJQ0hvbGRlciBtX21hdGhJQ3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1f
aml0Q29kZTsKKworICAgICAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAg
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5r
ZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5m
bz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1
bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdK
dW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBzdHJ1Y3QgTm90
QUNvZGVCbG9jayB7IH0gbV9jb2RlQmxvY2s7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJl
dmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIo
b3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewogICAgICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1
bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRH
UFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMy
MCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAg
ICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0
ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOworICAg
ICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0
TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91Ymxl
T3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2Nv
ZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxl
KGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubV9wcm9maWxlSW5kZXgpOworICAg
IEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUp
OwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdh
dGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9w
ZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAg
ICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAt
ODk5LDggKzkwNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QK
IAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFy
aXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91
bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BBZGQ+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0
aElDcy5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BB
ZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjpl
bWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNv
ZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUp
OwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9h
ZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3Jh
dGNoR1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOwor
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFk
ZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAx
NSwxMCArMTAyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElD
CiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxl
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxl
KTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmls
ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5v
blByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3Jh
dGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xv
d0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEz
ICsxMDYyLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNl
bmRpZgogCiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJp
dGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRo
UHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVp
bnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVp
bnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywg
YXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlv
biksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxF
KE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIw
LDEzICsxMTI4LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMK
ICNlbmRpZgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMt
PmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChh
cml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNl
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nh
c3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBy
ZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpA
QCAtMTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0
aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwog
ICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2st
PmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1fcHJv
ZmlsZUluZGV4KTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1f
b3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0
X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11
bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2st
PmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1fcHJv
ZmlsZUluZGV4KTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRkSklUTXVsSUMo
YXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0
cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11
bCk7CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNv
bnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRTdWJJQyog
c3ViSUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzMiw3ICsyMzIsNyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2
CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBz
dG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxs
ZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgcmVnVDEsIHJlZ1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAg
LTMyNCw3ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlv
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBl
bWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93
Q2FzZShjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2lu
Y2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxs
LmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJl
c3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
ZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmly
dHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4IEBAIHN0ZDo6ZW5h
YmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bj
b2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0
ZWNvZGUsIENhbGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBi
eXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBjaGVj
a3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJbmNs
dWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNr
cG9pbnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0YWNr
T2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKKwogICAg
IGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsK
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJP
ZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1Qw
KTsKICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qw
KTsKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVj
a3BvaW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMy
VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2Fs
bExpbmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSAr
IEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBk
b25lLmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0ZDo6ZW5hYmxlX2lm
X3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQg
PT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUs
IENhbGxMaW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQog
ewogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBA
IC05MSw3ICs5Miw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QK
ICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1
bWVudHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZy
YW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVSZWdp
c3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwor
ICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVl
UmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmly
c3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywg
cmV0dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJVDo6Y29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVy
YXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNldHVw
T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJhdGlv
bihzZXR1cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVn
VDMsIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3Vu
dC4KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5
bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJy
YW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFk
ZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25zdGFu
dChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSks
IHJlZ1QzKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJl
Z1QyKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9m
ZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dlc3Qu
bGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywxNiAr
MTMxLDE2IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxhdGU8
PgogYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkK
IHsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAg
IHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNh
bGxlckZyYW1lT2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdp
c3RlciwgYXJndW1lbnRHUFIxKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRk
cmVzcyhhcmd1bWVudEdQUjEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91
bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwg
cmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDApKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJldHVyblZhbHVlR1BSKSk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29k
ZSk7CiAKQEAgLTE0OCw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGlu
Zm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQo
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExp
bmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNv
ZGUubV9hcmd2OwpAQCAtMTU2LDQzICsxNjAsNDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQg
KiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXRWaXJ0dWFs
Q2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0
TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBpbmZvKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRl
Y29kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6OmNvbXBpbGVUYWls
Q2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQoteworYm9vbCBKSVQ6OmNv
bXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQs
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRl
bXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0
ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiti
b29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxp
bmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0gICAgQ2FsbEZy
YW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJn
cyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9
IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9
CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9
IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZsZURhdGEtPm51
bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEtPm51bWJlclRh
Z1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAgc2h1ZmZsZURhdGEt
Pm51bUxvY2FscyA9CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUo
Ynl0ZWNvZGUubV9hcmdjKTsKKyAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUoYnl0ZWNvZGUu
bV9hcmdjKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyAr
K2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgIHNodWZmbGVEYXRh
LT5hcmdzW2ldID0KICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFj
aygKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1Ro
aXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsK
ICAgICB9Ci0gICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAgVmFsdWVSZWNvdmVyeTo6
aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVT
YXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRh
KHNodWZmbGVEYXRhKTsKKyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6
aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAgc2h1ZmZsZURhdGEtPnNldHVwQ2FsbGVl
U2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpOwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6OlllcywgWyZdIHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVE
YXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZv
Q29uc3RhbnQsIHJlZ1QyKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86
OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7Cisg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JU
YWlsQ2FsbCgpOwogICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CisKKyAgICBz
aHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFtZVNodWZmbGVEYXRhID0g
V1RGTW92ZShzaHVmZmxlRGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7
CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRp
b24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0yMTgsMTQgKzIyNSwyNSBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxp
emVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxG
cmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLwotICAgIENhbGxMaW5rSW5mbyogaW5m
byA9IG51bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAg
aW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpKTsKLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CisKKyAgICBV
bmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBpZiAob3Bjb2RlSUQgIT0g
b3BfY2FsbF9ldmFsKSB7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbV91
bmxpbmtlZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5
cGVGb3Iob3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAg
ICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5k
ZXgpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlv
bkluZm8oKSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0
YW50OworICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50
KTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJ
bmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50
MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsK
KyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJl
c3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkp
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAg
aG9sZHMgY2FsbGVlLgpAQCAtMjM0LDE2ICsyNTIsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUo
KSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5m
bzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChj
b21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBp
ZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5m
b0NvbnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25z
dGFudCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8
fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAg
YXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAs
IHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRv
IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAg
ICB9KTsKQEAgLTI1MywxMyArMjY3LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhz
ID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6
VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRp
b24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2Nh
dGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3Mywy
MCArMjg3LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAg
ICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCpt
X3ZtLCAqdGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0s
ICp0aGlzLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0
dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcgKzQwOSwzMCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9H
UFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRo
aXMpOwogfQpAQCAtNDE2LDEwICs0NDMsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3Jfb3Blbihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihp
bnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVy
YXRvckdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBu
b3RPYmplY3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JH
UFIpKTsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BS
KSk7CkBAIC00MzIsMTkgKzQ1NywxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
b3Blbihjb25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRl
cmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1v
dmUoaXRlcmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVj
bHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1l
bnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0
VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygp
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAK
ICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJv
d0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxp
bmsodGhpcyk7CiB9CkBAIC00NTIsNyArNDc1LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZd
ICgpIHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBj
YXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcw
LDUwICs0OTIsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgog
ICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6
OkdlbmVyaWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBB
YnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7
CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0
YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpv
ZmZzZXRPZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3Rv
cmU4VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6
b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZz
ZXRPZlNlZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0
cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2tw
b2ludCgpOwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGlu
IHJlZ1QwCiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJl
c3VsdEdQUiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRl
clJlc3VsdEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cu
Ci0gICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
Y29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6c2NyYXRjaDsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQ
Uik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVy
blZhbHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRS
ZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVz
dWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgp
KSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdU
MywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwo
KSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9H
UFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVj
a3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJl
Z1QyOwotICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJT
ZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRj
aEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0
aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3Jh
dGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0g
YnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3Jh
dGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LCBnbG9iYWxHUFIpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1
bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbW92ZShp
dGVyQ2FsbFJlc3VsdEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1l
cy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsK
KyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsK
IAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1
NzYsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50
KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCiAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJS
ZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAg
ICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFu
Y2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5n
SW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwog
ICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAg
ICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7Cisg
ICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRH
UFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNz
KEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2Fs
bFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVz
cyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5y
YXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlz
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNO
b3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BS
MCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAg
ICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBD
YWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4o
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJl
ZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpu
b25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
aXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwg
YXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQ
UjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJl
ZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsK
KyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
ICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKKwog
bmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtMTU5LDEwICsxNjAsMTAgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAg
ICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJ
QygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gT3B0aW9uczo6
dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCAr
NDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0g
ICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAg
IG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nl
c3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8g
PSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmln
aW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9
IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3Rl
cnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFs
aXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1
YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBm
YXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1Bh
dGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRh
Zz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9
IGppdC5sYWJlbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2pp
dFR5cGUpKTsKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7Cisg
ICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAg
bV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5l
cmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdz
IGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0xMTAsNyAr
MTE4LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcgogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMsCiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZSkKICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2Rl
T3JpZ2luLCBjYWxsU2l0ZSwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUs
IHN0dWJJbmZvR1BSKQotICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5hbWUudWlkKCkg
PT0gY29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCisgICAgLCBt
X2lzTGVuZ3RoQWNjZXNzKGNvZGVCbG9jayAmJiBwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJs
b2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoYmFzZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
aAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTE0IEBAIG5h
bWVzcGFjZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNsYXNzIENhbGxTaXRl
SW5kZXg7CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBTdHJ1Y3R1cmVTdHVi
SW5mbzsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNzIEFj
Y2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCitzdHJ1
Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
ID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJz
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitz
dHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVFbnVtZXJhdG9yR2V0
QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUklu
Zm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86
OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6
cmVnVDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9jayBh
bmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KKyAgICBz
dGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7Cisg
ICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG8gPSBHUFJJ
bmZvOjphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVjdCBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisK
K3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJ
bkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKK307CisKK3N0cnVjdCBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9
IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0g
R1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQ
UkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3Qg
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBi
cmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xhc3MgSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
KCkgeyB9CkBAIC02MiwxNSArMTY1LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKAog
ICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQ
YXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQ
Uik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2VkU3R1YkluZm8g
eyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBwcm90ZWN0ZWQ6
Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0VHlwZTsKICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgorICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RvbmU7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBt
X3Nsb3dQYXRoQ2FsbDsgLy8gT09QUzogbWFrZSByZXBvcnRDYWxsIHBhc3Mgc29tZXRoaW5nIGlu
IHdlIGNhbiB1c2UgZm9yIHRoZSBub24tQ1RJIHRodW5rcyBidWlsZHMuIAogfTsKIAogY2xhc3Mg
SklUQnlJZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CkBAIC05
OCw3ICsyMDcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpT
VmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsK
K3B1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAK
QEAgLTEzMiw4ICsyNDEsOCBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0g
ZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayos
IEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLAotICAg
ICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRj
aCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywg
Q2FjaGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJl
Z3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQ
dXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXIm
KTsKICAgICAKQEAgLTE2MywxMSArMjcyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0
ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3Mg
bV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQ
YXRoSnVtcDsKIH07CiAKQEAgLTE5MSw4ICsyOTgsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdl
bmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVt
cCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjEsNiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0
Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNDQsNiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJp
dmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI3Nyw4ICszNzgs
NiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlu
a0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAotcHJpdmF0ZToKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0
Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSArNDAxLDkgQEAgcHVi
bGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwog
Ci1wcml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3Jl
c3VsdDsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzMwLDggKzQy
Nyw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3Nl
bWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODE4
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQog
ewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNv
bnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3Bl
cmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXND
b25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sK
KyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
c3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAg
ICAgICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBhbGwgbGluayB0aW1lIGNv
bnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewog
ICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+
Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIg
ZW50cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBl
bmRDYWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1B
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEs
IGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdp
c3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
IHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVH
UFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhy
ZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0
dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2FsbDsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxl
KE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRz
dCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3Rl
ciBkc3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFs
dWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVy
blZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5W
YWx1ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dD
YXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmly
dHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChy
ZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFz
QW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgp
CiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhv
ZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwg
c28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAg
IEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
ICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRl
Y29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6
OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1Rv
SG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSht
X2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBt
X2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2No
ZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgsMzQg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykK
IHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgp
KS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxp
bmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKLXsK
LSAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKLQotICAgIC8vIFdlJ3JlIGluIGEg
c2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8g
YSBkaXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQo
dmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UKLSAgICBFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSAgICBzdG9yZTMyKHZhbHVlLnBh
eWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAgICBzdG9yZTMyKHZh
bHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKLX0KKyAgICBp
ZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9
PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmco
KSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgp
ID09IDE7Cit9CisKKy8vIE9PUFMKKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxp
bmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKy8v
eworLy8gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CisvLworLy8gICAgLy8gV2Un
cmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4g
anVzdCBkbyBhIGRpcmVjdAorLy8gICAgLy8gc3RvcmUuCisvLyNpZiBVU0UoSlNWQUxVRTY0KQor
Ly8gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyNl
bHNlCisvLyAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9j
YXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8v
ICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxv
YWQpOworLy8gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50
YWcpOworLy8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmls
ZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAj
ZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzIzLDI0ICsz
NTMsMjUgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikg
eyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVl
KQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7CisgICAgcHRyZGlmZl90IG9mZnNldCA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5
dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29kZT4obV9ieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKTsKKyAg
ICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG9mZnNldCkpOwog
fQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVz
dWx0UmVnKSk7Ci19CisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShW
YWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKKy8veworLy8gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJl
ZykpOworLy99CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlc3Vs
dFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgR1BSUmVnIHJlc3Vs
dFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVn
cyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1Zh
bHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCkBAIC0zNjAsNiArMzkxLDIxIEBAIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVcKICAgICB9CiB9CiAKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNl
dE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQ
UikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CisgICAgICAgIGxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwg
Ynl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBS
ZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkg
KyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBz
Y3JhdGNoR1BSKTsKK30KKwogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENv
bnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKQEAgLTM4MCw3ICs0MjYsNyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91
YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAo
cmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29u
c3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1t
UHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZERv
dWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKQEAgLTQ5Niw3ICs1NDIsNyBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYg
KCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwo
cmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUwNiw3ICs1NTIsNyBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQg
dGFnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBp
ZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MTQsMTEg
KzU2MCw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9
CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklU
OjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKQEAgLTU0NCwxMSArNTg1LDE3IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBBU1NFUlQobV9ieXRl
Y29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBo
b3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4K
IAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBt
X2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJl
cigpKQotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KSksIGRzdCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgc3dpdGNoIChtX3VubGlua2VkQ29kZUJs
b2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpKSB7CisgICAgICAgIGNh
c2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICBjYXNlIFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIG1v
dmUoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbG9hZENvZGVCbG9j
a0NvbnN0YW50KHNyYywgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU2NiwxMSArNjEzLDYgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
MiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkg
JiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJl
Z2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBA
IC01OTUsNyArNjM3LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
UmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2Rl
QmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAg
KzY3OSw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAg
ICBpZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVC
bG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2Rl
KQotewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhh
c2hNYXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3Bp
ZWRHZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0
UHV0SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1
ZSk7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdl
dFB1dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBK
SVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRf
dCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8
PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAg
IGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlm
IChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVy
biBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2Nv
cGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJp
dGhQcm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1w
T2Zmc2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEs
NiArNzAwLDYxIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAg
ICByZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0
IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAg
ICBsb2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0
YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90
IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhzX21ldGFkYXRh
R1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJs
ZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7Cisg
ICAgbG9hZDgoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRh
ZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4K
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVl
LCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4
KHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFk
YXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9y
ZTMyVG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6
ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIs
IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5
dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQorewor
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5v
ZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgc19tZXRhZGF0YUdQUiwg
cmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvbnN0YW50KEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgY29uc3RhbnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAg
ICBsb2FkUHRyKEFkZHJlc3Moc19jb25zdGFudHNHUFIsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
Y29uc3RhbnRJbmRleCkgKiA4KSwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bG9hZEdsb2JhbE9iamVjdChHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRDb25zdGFudCht
X2dsb2JhbE9iamVjdENvbnN0YW50LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBHUFJS
ZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7
CisgICAgLy8gT09QUzogTWF5YmUgbWFrZSB0aGlzIG1vcmUgZWZmaWNpZW50PworICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JC
dWZmZXIoKSksIHJlc3VsdCk7CisgICAgbG9hZDY0KEFkZHJlc3MocmVzdWx0LCBjb25zdGFudC50
b0NvbnN0YW50SW5kZXgoKSAqIHNpemVvZihKU1ZhbHVlKSksIHJlc3VsdCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI4MTg2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0
IEluc3RydWN0aW8KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNh
dGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0
KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNv
ZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFi
bGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTk5Nyw3ICs5OTcsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJs
ZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50Lgog
ICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRh
YmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJ
bW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxl
KTsKIApAQCAtMTAyNCw3ICsxMDI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIo
Y29uc3QgSW5zdAogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5h
dGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwog
ICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2Rl
SW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlu
a2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwNDIsNyArMTA0
Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KIAogICAgIC8v
IGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3
aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAg
ICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUlu
ZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAgIGxpbmtlZFRh
YmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDggQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWaXJ0dWFs
UmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1l
c3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC01NCwxMSArNTYsMjIgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0g
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAg
ICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7Ci0gICAgICAg
IGVsc2UKKyAgICAgICAgLy8gT09QUzogbW9zdCAiT3RoZXIiIFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbiBjb25zdGFudHMgY2FuIGp1c3QgYmUgZ3JhYmJlZCBmcm9tIHRoZSBVbmxpbmtlZENvZGVC
bG9jay4gSXQncyBqdXN0CisgICAgICAgIC8vIGEgY291cGxlIHR5cGVzIHRoYXQgY2FuJ3QuIENy
ZWF0ZSBhbiBhYnN0cmFjdGlvbiBmb3IgdGhhdC4KKworICAgICAgICBzd2l0Y2ggKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykpIHsKKyAg
ICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6CisgICAgICAgIGNh
c2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6IHsKKyAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAg
ICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihk
c3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7CisgICAgICAgICAg
ICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NywzNyArMTAwLDM1IEBA
IHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0
X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9i
amVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBB
bGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxK
U0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFs
bG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAg
ICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0
Y2hSZWcgPSByZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0g
ICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkg
PSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChy
ZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVn
LCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nh
c2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3Ry
dWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsK
LSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCks
IGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdP
YmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsK
KworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJ
bW1QdHIobnVsbHB0cik7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRB
bGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJm
bHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVS
ZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAg
IGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAg
IG11dGF0b3JGZW5jZSgqbV92bSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCk7CisKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1Qz
OworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmpl
Y3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1
Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdP
YmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0
b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzE0Miw4IEBAIHZv
aWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1
bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1w
IGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0lu
c3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOwor
ICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVn
VDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5j
dGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKIApAQCAtMTU0LDMwICsxNjYsMzggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Rv
ID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFz
ZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAg
IC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0
aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm90b0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgY29uc3Rl
eHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBwcm90b0dQUik7
CiAgICAgCiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBi
ZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhh
c0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOwogCiAgICAgSklUSW5zdGFuY2VP
ZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAg
ICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdU
MCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8g
cHJvdG8KLSAgICAgICAgcmVnVDUsCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAg
cmVzdWx0R1BSLAorICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgcHJvdG9HUFIsCisgICAgICAg
IHN0dWJJbmZvR1BSLAorICAgICAgICBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0
Y2gxLCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gyKTsKKworICAgIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQo
KTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7Cisg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAK
KwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMTkyLDE0ICsyMTIs
MTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1p
emU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86
Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbklu
c3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBy
ZWdUMiwgcmVnVDEpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm8gPT0gYXJn
dW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVy
czo6dmFsdWUgPT0gYXJndW1lbnRHUFIyKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6cHJvdG8gPT0gYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVj
bHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiop
CkBAIC0yNDAsNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5l
ZChjbwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwg
cmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM3NCw3ICszOTMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygmUmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiAjZWxzZQpAQCAtMzgzLDkgKzQwMiw5IEBAIHZv
aWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lmIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7Ci0g
ICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9y
KCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMo
KSk7CkBAIC00MTEsNyArNDMwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNv
bnN0IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NTIsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRf
b3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1
bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVu
Y3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFt
ZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1
bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ4NCwxMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXko
dm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1
ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNTAxLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25z
IGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJl
bG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAg
Ly8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1NDAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRs
ZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUg
c3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAg
SnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQz
LDcgKzU2NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAg
ICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJv
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAg
ICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs2MDMsMTMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRf
b3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVj
aWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVy
KTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAg
IENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZElt
bTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFu
dChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRv
TWV0YWRhdGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAg
ZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2NDQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0
R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFs
dWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAg
IGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNo
MSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVn
VDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY2MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzE2LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
ICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRv
cEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRo
cm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRp
b25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzczMyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5k
bGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3Vt
ZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRH
UFIxOwpAQCAtNzIwLDcgKzc0Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAg
IGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRH
UFIwKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoYXJndW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxP
YmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyArOTMwLDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3
ICs5NDEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKQEAgLTkzMSw3ICs5NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1i
ZXIoY29uc3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIo
cmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTc1LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChz
cmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJl
Zyk7CiB9CkBAIC05NzgsNyArMTAwMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChj
b25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZS
ZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsK
IH0KQEAgLTk5Myw3ICsxMDE3LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IElu
c3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNo
T2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkp
KTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVC
bG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBPT1BTOiBUaGlzIGlzbid0
IGVsZWdhbnQuIFdoeSBhcmVuJ3QgdGhleSBpbiB0aGUgY2FsbGVlIHNhdmUgYnVmZmVyLiBJIGd1
ZXNzIGJlY2F1c2Ugd2UgY2FuIE9TUiBleGl0IGhlcmU/CisgICAgZW1pdE1hdGVyaWFsaXplTWV0
YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJs
ZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyArMTAzOCwxMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBw
cm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7Ci0gICAg
aWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBt
X2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9m
aWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2Zp
bGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVu
dHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwotICAgIGlmIChidWZm
ZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChb
Jl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewotICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSksIHJlZ3MpOwot
ICAgICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKQEAgLTEw
NTMsOCArMTA2OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAK
ICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sg
dGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxl
JiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxl
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFw
cGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zm
c2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNU
SVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsxMDk2LDE0IEBAIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2Ny
dXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJs
ZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50Lgot
ICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJ
bmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJh
Y3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgsIHVu
bGlua2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVl
LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWlu
KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAg
LTEwOTksMjAgKzExMTUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25z
dCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5l
ZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0
cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29u
c3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBT
dHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4
LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7
CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
d2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRh
Zyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVz
dHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1
Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2Rl
YnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTEx
MzMsNyArMTE1MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QK
IAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1Qw
LCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAt
MTE0OCw3ICsxMTY2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVj
dAogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVx
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjYsNyAr
MTE4Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAg
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCBy
ZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE4
OCwxMiArMTIwNSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlv
CiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUg
b3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8g
YXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFu
ZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2Nr
LT5udW1WYXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVt
VmFycygpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBmb3IgKHNpemVfdCBq
ID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0
ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2sp
OworICAgIAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7CiAKICAgICBlbWl0RW50ZXJP
cHRpbWl6YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEyMTIsNyArMTIzMSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRl
cl9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3Rl
cnM6OmVicCk7CkBAIC0xMzEwLDIzICsxMzI5LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9z
Y29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0
dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBl
KHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQs
IHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpT
Q2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJl
Z2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9
IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcgKzEz
NTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVj
dEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5
cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9j
YXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpy
YXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9u
LCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BDcmVhdGVUaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRDYWxsZWUoKSwgY2FjaGVkRnVu
Y3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihF
cXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlw
bGVDYWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWws
IGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBoYXNTZWVuTXVsdGlwbGVDYWxs
ZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzODcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1Qw
LCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEzOTgsOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJl
Z1QyLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7
CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1
ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1
cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcgKzE0MTEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amVxKGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxNDIyLDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAs
IHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsxNDM3LDExIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29u
c3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBo
YXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhh
c0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3Rh
bmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0
cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFy
Z3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMp
OwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFs
dWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BS
KTsKIH0KQEAgLTE0MzAsNyArMTQ1MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5j
ZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFy
bHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRz
QXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bigpKSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRp
b25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZFB0cihwdHIsIHJlZ1QwKTsKICAg
ICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2hQdHIoQmVsb3csIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7
CkBAIC0xNDQwLDcgKzE0NjAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3Qg
SW5zdHJ1CiAjZWxzZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCi0gICAgICAg
IG1vdmVWYWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlc3VsdFJlZ3MpOworICAg
ICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkpOwogICAgICAgICBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CiAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0xNDUzLDggKzE0NzMsOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBFbWl0IHRo
ZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewor
ICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1
c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAot
ICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVj
dXRlQ291bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQogfQogCkBAIC0xNTA5LDcgKzE1
MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1bWVudEdQ
UjApOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJn
dW1lbnRHUFIzOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtMTUyMiw3ICsxNTQ0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJH
ZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsK
QEAgLTE1NjQsMzQgKzE1ODYsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25z
dCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChy
ZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdS
ZWdleHAsIGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2RlQmxvY2stPmdl
dENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0Nv
bW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEp1bXAg
bGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFy
Z3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
LCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50
R1BSMSk7CiAjZW5kaWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2Rl
QmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBj
b25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0
aW9uRGVjbCwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVj
b2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1l
bnRHUFIyKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlm
IChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0
b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19m
dW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5j
X2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwg
JnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2MjEs
MjMgKzE2NDUsMjQgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsK
ICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAg
ICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRp
ZgogCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5j
dGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHIsIGJp
dHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0
aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5j
X2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5j
X2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBk
c3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3lu
Y19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAt
MTY2NCwyOSArMTY4OSwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9y
X2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAg
ICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2
YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmls
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAg
ICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQUjIpOworICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNl
dE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fy
cmF5V2l0aFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBz
aXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5
QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNp
emVBbmRQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOwogI2Vsc2UKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSgpLCByZWdUMik7CiAgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAm
bWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNzIwLDkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtl
ZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdHlwZSBwcm9maWxlciBpcyBlbmFibGVkLgogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsK
ICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxv
Y2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1f
dGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCkBAIC0xNzc3LDIwICsxODA0LDI0IEBAIHZvaWQgSklU
OjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFy
Z0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9i
bGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93
UGFja2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsg
Ly8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3Jh
dGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hh
ZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFy
Z3VtZW50IHJlZ2lzdGVyLgorICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAg
ICAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNj
cmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJs
b2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1Qz
LCByZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8v
IFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzog
RG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4g
dGhlIHVzaW5nIHRoZSBjb250cm9sIGZsb3cgcHJvZmlsZXIuCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlQ29udHJvbEZsb3c+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBC
YXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNC
bG9ja0xvY2F0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgYmFzaWNCbG9ja0xvY2F0aW9u
LT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMpOwpAQCAtMTg2MCw3ICsxODkxLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5l
ZCgpLCByZXN1bHRSZWdzKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCkBAIC0xODg2LDcg
KzE5MTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0CiAgICAg
ZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
c3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
c3VsdFJlZ3MpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4ODEsNyArMjg4MSw3IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtl
eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxp
bmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lk
KiByZXN1bHQ7CiAgICAgaWYgKGtleS5pc0ludDMyKCkpCkBAIC0yOTA0LDcgKzI5MDQsNyBAQCBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7Ci0gICAg
Y29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwogCiAgICAgaWYgKGtleS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmluZ0ltcGwq
IHZhbHVlID0gYXNTdHJpbmcoa2V5KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OCw3ICszNDgs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgSW52YWxpZEdQUlJl
ZywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wg
PSB0cnVlOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAy
ODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDksOTIgKzQ5LDEwMyBAQCBuYW1lc3BhY2UgSlNDIHsKIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAg
aWYgKG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZh
bElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6
Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgeworICAgICAgICBhdXRvIG5vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5v
dENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
ICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIHNjcmF0Y2hHUFIs
IGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogCi0gICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpyZXN1bHQpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0
UmVncywgcmVnVDIpOwotICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkp
KQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0g
ICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgICAgICAvLyBPT1BTLiBT
dXBwb3J0IHRoaXMKKyAgICAgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkp
KQorICAgICAgICAvLyAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsK
KworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6R2V0QnlWYWw7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7
CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xv
d0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYgKCFo
YXNBbnlTbG93Q2FzZXMoaXRlcikpCisgICAgICAgIHJldHVybjsKKworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOwog
Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
ICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1lbnRHUFI0
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUs
IGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRH
UFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
LSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5
dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsK
KyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIz
OyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIx
KTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7
Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlf
dmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0g
ICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlz
QVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEp
OworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSBy
ZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJv
ZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsxNjAsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJv
dXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25n
aW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNjAsOCArMTcxLDggQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9m
aWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1l
bnRHUFIxKTsKIApAQCAtMTg3LDM0ICsxOTgsNDAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3By
aXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0
UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVz
dWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0
eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhhc0FueVNsb3dDYXNl
cyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRQcml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzI0MCwxMSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJv
cGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1NCwyMCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4K
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25h
bWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1
cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCkBAIC0yNjQsNyArMjc3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdo
dCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhl
ciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAg
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAg
ICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAwLDIxICszMTMsMjggQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9
IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJS
ZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwotCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0
ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7
CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2Vx
dWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC0zMjQsMTcg
KzM0NCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAg
ZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9z
ZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIFVOVVNFRF9QQVJB
TShjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRB
Y2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJh
bmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNl
dFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRp
bWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRH
UFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzY5LDE4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFk
eSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJy
YW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRz
PGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlw
ZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXpl
OwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYK
IAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMTkgKzM4OSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
aGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOworCisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJy
YW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwog
fQogCkBAIC0zOTQsOSArNDIyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2
YXRlX2JyYW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBi
YXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJh
bmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtNDA2LDI0ICs0MzYsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3By
aXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3Vt
ZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5
R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJh
bmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVy
YXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25h
bWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NTksNDIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJl
Z1QzLCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQ
UiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVj
b2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwog
CiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQpOwot
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1Yklu
Zm9HUFIpOworICAgIC8vIE9PUFM6CisgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJv
cGVydHkpKQorICAgIC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVl
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQ
dXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7Cisg
ICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdy
aXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxs
LgpAQCAtNDc0LDE1ICs1MTAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0g
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsm
XShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
ICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0g
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAg
ICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTMxLDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAg
ICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVy
ZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0
KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJn
dW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5
VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVBy
b2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9w
UHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVu
dEdQUjUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0
cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUxMiw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJl
Y3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChl
Y21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9w
ZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU2NSw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUzMywxOCArNTc1LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91
dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdp
bmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0Owot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAg
ICAgICAgUmVnaXN0ZXJTZXQgdXNlZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6dmFsdWUsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAg
ICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNv
bnRhaW5zKHJlZ1Q1KSk7CisgICAgfQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNl
dEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7
CiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBn
bG9iYWxPYmplY3RHUFIpOwpAQCAtNTcwLDIwICs2MTgsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZh
bHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
SlNWYWx1ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJ
bnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+
cHJpdmF0ZUZpZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0
ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4K
QEAgLTU5NCw4ICs2NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNv
bnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRQcml2YXRlTmFtZT4oKTsKLSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBi
eXRlY29kZS5tX3B1dEtpbmQ7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7
CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZh
bEluZGV4KytdOwogCkBAIC02MDMsMTMgKzY2MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X3ByaXZhdGVfbmFtZShjCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAotICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0
QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJp
dmF0ZUZpZWxkT3B0aW1pemU7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8v
IFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4K
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9
IHJlZ1QyOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BS
LCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+
KCk7CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5k
OworCisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQpOworICAgIGF1dG8gb3BlcmF0aW9uID0g
cHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50c0dQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1c3Rl
ZEltbVB0cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02
MjIsMTggKzY4NCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShj
CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0MywxNCArNjk5
LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
R1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJl
ZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3MzYsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Fj
Y2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlk
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMs
IHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1Qx
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzc0Niw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc1Nyw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0
ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1Qw
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNzA5LDcgKzc2OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNv
bnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1Qx
KTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1Qy
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdU
Mik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzc5LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNl
dHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCBy
ZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03Mjcs
MjMgKzc4OCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFz
ZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxC
eUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBT
dHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8v
IFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5j
ZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODMwLDE3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlk
c1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODU0LDE5IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1v
ZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIp
OwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVj
bWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
ZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDAp
OwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODA4LDcg
Kzg3Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKQEAgLTg0NSwyMiArOTEzLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwo
Y29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxC
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJl
ZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0
dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVsQnlW
YWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNs
b3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CisK
KyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxl
dGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNo
b3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0
ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04ODMs
OSArOTYyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVn
VDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9l
Y21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04
OTksMjQgKzk4MCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBj
b25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25E
ZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMDIsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIg
KzEwMzcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3Vs
dFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFj
Y2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNzEsMTcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwpAQCAtMTAwMywyNiArMTA5MSwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zCiAgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBh
cmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNl
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAg
c3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHBy
b3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6
ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRP
cHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblRy
eUdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9k
aXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMzAsMjIg
KzExMTIsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDAp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
c3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9H
UFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYgKzExNDUs
MTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJ
ZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7
CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlk
RGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTY2LDYxIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwg
cHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9w
ZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3Zt
LT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAg
ICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVB
ZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRh
dGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2FkOEZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0
YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihOb3RFcXVhbCwg
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0
aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsg
R2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBi
YXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhp
cyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQorICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0
QnlJZCk7CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcg
PSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEsIHRoaXNWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CiAKLSAg
ICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRS
ZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0x
MTU4LDE2ICsxMjI5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3Qg
SW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRH
UFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNTAsNTcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBh
cmd1bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5
X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRo
aXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQpAQCAtMTIwNiw3ICsxMzEwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdo
dCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhl
ciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAg
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAg
ICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0MSwxNiArMTM0NSwxOSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNX
aXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9u
R2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50
R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEyNjAsMjggKzEzNjcsMjIgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHRoaXNHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRo
aXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGlj
X2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0
aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1p
emU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlk
V2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAt
MTI5MSw3ICsxMzkyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmpl
Y3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBE
RkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmpl
Y3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
LSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0
dXJuQWRkcmVzcygpOwpAQCAtMTMyOSwyMyArMTQzMCwzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAg
ICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFu
ZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVz
dCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hv
dFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBT
dHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRo
aXMuCiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVl
VlJlZywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFz
ZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7
CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2
YWx1ZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VW
UmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1v
ZGUoYnl0ZWNvZGUpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShi
eXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5v
dERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0g
ZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJ
bmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBu
ZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAg
LTEzNTksMTQgKzE0NzQsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25z
dCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luKHRoaXMpOwogICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJ
ZHNbbV9wdXRCeUlkSW5kZXgrK107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxP
cGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3
NiwyNSArMTQ5NSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IElu
CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQ
Uik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAv
LyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBy
ZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwog
ICAgIHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xNDA0LDcgKzE1MTcsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMg
YXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUg
ZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBm
dW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3Qg
bWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0x
NDQxLDIwICsxNTU0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJ
bkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTg3
LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTE0ODAsMjggKzE2MDcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0
IElucwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dldF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgog
ICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5r
IGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTUxMCwyNSArMTYzMSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
bl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9m
aWxlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OnNjcmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWws
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQpAQCAtMTUzNywxNSArMTY2NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5f
YnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
IAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5k
ZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5C
eVZhbE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTE1NTYsNTkgKzE2ODgsNzAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQ
UjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRf
YnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQu
CiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1
bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAg
ZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlw
ZSB0eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9y
QnJhbmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1
YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0SGFzUHJpdmF0
ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogeworICAgIFVOVVNFRF9QQVJBTShi
YXNlKTsKKyAgICBVTlVTRURfUEFSQU0ocHJvcGVydHkpOwogICAgIEFTU0VSVCh0eXBlID09IEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZUJyYW5kKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9p
bkJ5VmFsSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0
ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVy
YXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0
aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJn
dW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE2MTgsMjcg
KzE3NjEsMjEgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaQogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwog
CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5T3JCcmFuZEdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5T3JCcmFuZEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5T3JCcmFuZEdQUiA9PSBhcmd1bWVudEdQUjEpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJh
dGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRl
TmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxk
ZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQ
cml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25I
YXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRD
YWxsKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2
YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE2NTIsNyArMTc4OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfcHJpdmF0ZV9uYW1lKGMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlTmFtZT4o
KTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVOYW1lKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5
dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZU5hbWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9icmFuZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY2NiwxOSArMTgwMywyMiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVfYnJhbmQoCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSGFzUHJpdmF0ZUJyYW5kPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5t
X2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNs
b3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9icmFuZCwgQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rp
b25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVtaXRWYXJJ
bmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgc2NyYXRj
aEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1
cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNz
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkp
LCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHNj
cmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kp
CiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZWdUMCk7CkBAIC0xNjg4LDYgKzE4MjgsNyBAQCB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9z
dXJlKFZpcnR1YWxSZWdpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6
OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogeworICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CkBAIC0xNzAxLDcgKzE4NDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QxKTsKICAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
bV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7CiAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEp
KTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDAp
OwpAQCAtMTcxNSw3ICsxODU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShj
b25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29u
c3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25z
dGFudFNjb3BlKSwgcmVnVDApOwogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzk0LDg3ICsxOTM1LDEwNSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Cisg
ICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spLm1fcmVzb2x2ZVR5cGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2Rl
Lm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29s
dmVUeXBlOwogCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJ
bmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQobV9j
b2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1
Y3Rpb24pOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAotICAgIGNvbnN0ZXhwciBH
UFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BS
ID0gcmVnVDY7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1
OworICAgIC8vIElmIHdlIHByb2ZpbGUgY2VydGFpbiByZXNvbHZlIHR5cGVzLCB3ZSdyZSBnYXVy
YW50ZWVkIGFsbCBsaW5rZWQgY29kZSB3aWxsIGhhdmUgdGhlIHNhbWUKKyAgICAvLyByZXNvbHZl
IHR5cGUuCiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKQotICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdU
MCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKKyAgICAgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkxleGljYWxFbnZpcm9ubWVudCgpLCByZWdUMCk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRh
VGFibGUoJm1ldGFkYXRhKTsKKyAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91
bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNv
ZGUpOwogCi0jZGVmaW5lIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9y
ZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNv
bnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNI
X1JFU09MVkVfVFlQRShSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyAgICAgICAgYXV0byBjbG9z
dXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9w
X3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhciIpOwogICAgICAgICB9OwotI3VuZGVmIFJFU09MVkVf
U0NPUEVfR0VORVJBVE9SCisKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6
OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyIpOworICAgICAgICB9OworCisgICAgICAgIGF1dG8gZ2VuZXJpY1Jlc29s
dmVTY29wZUdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6
OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6
IG9wX3Jlc29sdmVfc2NvcGUgZ2VuZXJpYyIpOworICAgICAgICB9OworCisgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gcmVnVDU7CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
c2NvcGVHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBt
ZXRhZGF0YUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwor
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAg
ICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgICAg
IGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAgICAgICBlbHNl
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2Rl
ID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yKTsKKyAgICAgICAg
ZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIH0K
IAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVU
aHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlz
IGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVj
YXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KKworICAgIENDYWxsSGVscGVycyBqaXQ7CisKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wUmVz
b2x2ZVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0g
cmVnVDc7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2
OyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wUmVzb2x2
ZVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgaml0
LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdU
MywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0
cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBh
dXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKKyAgICBhdXRv
IGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3Ms
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgIGlmICgh
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlm
IChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFs
T2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RH
UFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwog
ICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVD
VF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJl
Z1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVn
VDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwg
T0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQp
KSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFk
ZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0z
MihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3Vy
ZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNj
b3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKKyAgICAg
ICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAg
IGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkp
LCByZWdUMSk7CiAKLSAgICAgICAgTGFiZWwgbG9vcCA9IGxhYmVsKCk7Ci0gICAgICAgIEp1bXAg
ZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CisgICAgICAgIExhYmVsIGxvb3AgPSBq
aXQubGFiZWwoKTsKKyAgICAgICAgSnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3QzMihaZXJvLCBy
ZWdUMSk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QxKTsKLSAgICAgICAgICAgIGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRP
Zk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSks
IHJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGxvb3AsICZqaXQpOwogICAg
ICAgICB9Ci0gICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKCZqaXQp
OwogICAgIH07CiAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSkgewpAQCAtMTg4MiwxMiArMjA0MSwxMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAv
LyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAgICAgbG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0
OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAg
ICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQ
Uik7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsK
KyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgaml0Lm1vdmUoZ2xvYmFsT2Jq
ZWN0R1BSLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xODk3
LDExICsyMDU2LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewog
ICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRz
IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhciosCiAgICAgICAgICAgICAv
LyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50
KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQo
KSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1Qw
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cjoKQEAgLTE5MDksNyArMjA2OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
RHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAg
LTE5MTksODMgKzIwNzgsNDUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNv
bHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwotCi0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVt
aXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcik7Ci0KLSAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29s
dmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAg
ICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsK
KyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0
T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDApOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0
Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlz
KTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKKyAgICAgICAgYXV0byBlbWl0Q2FzZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUpIHsKKyAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUpOworICAgICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsK
KyAgICAgICAgICAgIG5vdENhc2UubGluaygmaml0KTsKKyAgICAgICAgfTsKIAotICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyKTsKKyAgICAg
ICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhp
Y2FsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKKyAgICAg
ICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCi0gICAgcmV0KCk7CisgICAgaml0LnJl
dCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIg
PSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRs
ZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAg
IHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJU
YWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJB
VE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBc
Ci0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BSZXNvbHZl
U2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAg
IEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcFJlc29sdmVTY29w
ZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2
ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9SRVNPTFZFX1ND
T1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2
ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBi
eSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBK
SVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAg
Ly8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYg
Q1BVKFg4Nl82NCkKQEAgLTIwNjUsNiArMjE4Niw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXMKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogeworICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CkBAIC0yMTc4LDcgKzIzMDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCkBAIC0yMTg2LDkgKzIzMDgsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIGFyZ3VtZW50R1BSMCwgY3Vy
cmVudEluc3RydWN0aW9uKTsKIH0KIAogI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CkBAIC0yMTk2LDQxICsyMzE4LDUwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9z
Y29wZShjb24KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1f
c2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dElu
Zm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29s
dmVUeXBlKCk7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29k
ZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVCht
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0
cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworCisgICAgYXV0byBjbG9z
dXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5l
cmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfZ2V0
X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAgICBhdXRvIGNsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICBy
ZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVW
YXIiKTsKKyAgICB9OworCisgICAgYXV0byBnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yID0g
W10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3Bl
VGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBnZW5l
cmljIik7CisgICAgfTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdU
NzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCi0gICAgaWYgKHJlc29sdmVUeXBl
ID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKLSAgICAgICAgZW1p
dEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwg
cmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9
IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICBwdHJk
aWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9m
ZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgR0VUX0ZST01fU0NPUEVf
R0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNH
ZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3Jz
W10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoR0VUX0ZST01fU0NPUEVf
R0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CisgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7Ci0gICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVd
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdl
bmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgIGVsc2UKKyAgICAg
ICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvcik7CisK
KyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5r
KFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNo
YXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVu
Y3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNl
CiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVj
dCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgpAQCAtMjIzOSw5
OSArMjM3MCw4OCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAg
ICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Nv
cGVHUFIgPSByZWdUNjsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wR2V0RnJv
bVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKKworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSks
IHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBqaXQubG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgp
KSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKIAogICAgIEp1
bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9
IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSB7
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgbWV0YWRhdGFTdHJ1Y3R1cmVP
ZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAgIGF1dG8gZW1p
dExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUikgeworICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPcEdldEZyb21TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mU3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAgICAgIGppdC5tb3ZlKHNjb3Bl
R1BSLCByZWdUMCk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0ciha
ZXJvLCByZWdUMSkpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVy
ZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDEpKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICBhdXRvIGRv
VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsK
ICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9p
bnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRk
cmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9i
amVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0
OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9
OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90IG9w
ZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQot
ICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3Bl
cmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCiAg
ICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcg
b3BlcmFuZEdQUikgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVn
aXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsK
LSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxl
cygpKSwgcmVnVDApOworICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVy
YW5kR1BSKTsKKyAgICAgICAgaml0LmFkZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQUik7CisgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CiAgICAgfTsKIAotICAgIGF1dG8gZW1pdENv
ZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hl
Y2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBm
b3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9z
Y29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAg
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSKTsgLy8gU3RydWN0dXJlIGNoZWNr
IGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9y
IGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2Nv
cGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSByZWdUMDsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0
ID0gcmVnVDE7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsK
IAotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkg
LT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAgICAg
ICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVt
cCB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAg
ICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CiAg
ICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRP
Zk9wZXJhbmQoKSksIG9mZnNldCk7CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsK
LSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5P
ckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAg
ICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0g
ICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBK
dW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0
LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBq
aXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAg
ICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0
Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQz
MlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2Ny
YXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAg
ICAgICAgICAgIGppdC5uZWczMihvZmZzZXQpOworICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQz
MlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUluZGV4
KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoK
ICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0g
ICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0
YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwg
cmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAg
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0g
ICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAg
ICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJh
bmQoKSksIHJlZ1QzKTsKICAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlR1BSLCBy
ZWdUMyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZl
ZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM0MSw4NiArMjQ2MSw2
MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0K
ICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDAp
OwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29s
dmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xv
YmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAo
cmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENs
b3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0g
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwgcmVnVDApOworICAg
ICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDAp
OyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGlu
ayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEds
b2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAg
IG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmso
JmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBlbWl0
Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluaygmaml0
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluaygmaml0KTsK
IAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29k
ZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5k
LmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6Om51
bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRh
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3Rv
cmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmls
ZSgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRo
dW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNl
LCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nh
c2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29w
ZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0j
ZGVmaW5lIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9nZXRfZnJvbV9zY29w
ZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlm
IGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKSBc
Ci0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAg
ICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHJlc29sdmVUeXBlLCAi
QmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZP
Ul9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3Vu
ZGVmIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3Io
Vk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBj
YW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAg
aml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjQ3MSw4NiArMjU2OCw3OSBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNW
YWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQp
Ci17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXRO
b3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQg
SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRj
aHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
LSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3Rp
ZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0g
ICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJl
VmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBy
ZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFk
ZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsg
b3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dElu
Zm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3Bl
cmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJh
bmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUs
IGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dl
dFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2
YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5n
IGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxl
cyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1
cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0
dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAgICAgICAvLyBB
ZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBp
bmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1
dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCByZWdUMSk7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEp
OworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisKICAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKIAogICAgICAgICAgICAgaml0
QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CisgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEp
OwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBzdG9yZVB0
cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICAv
LyBPT1BTOiB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBHUFJSZWdz
IGluc3RlYWQgb2YgVlJzCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNl
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBK
U1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9j
ayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFk
T25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlv
bihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpIHsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGVt
aXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxv
YWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNl
dE9mT3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlv
bihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQg
dG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBu
ZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChp
bmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJl
Z1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRW
YXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1Qw
KTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Cisg
ICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAg
IGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9w
ZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRT
ZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwg
cmVnVDEpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAg
ICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAgICAgICAgLy8g
T09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcg
Zm9yIHZhbHVlLgorICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZh
bHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwor
CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDApOworICAgICAgICAgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNo
cG9pbnQocmVnVDApOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDAp
OworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGlt
ZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKwor
ICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0
IHRvb2sgYSBHUFJSZWcgZm9yIG93bmVyL3ZhbHVlLgogICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTI1NjQsNTggKzI2NTQsNTIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAot
ICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8s
IHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlz
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNv
bHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4
aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBj
YW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFs
aXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRo
aXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGlj
YWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAg
ICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZl
VHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5r
ZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUgdGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFs
bCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxs
IGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIsCisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBi
ZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywg
d2UncmUgYWx3YXlzIENsb3N1cmVWYXIKKyAgICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRj
aHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93
IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5h
bWljYWxseS4KKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAg
ICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9z
dXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7CisgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAg
ICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIo
R2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBU
MAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAg
ICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFBy
b3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5v
dEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVt
aXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24u
bGluayh0aGlzKTsKKwogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cywgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShy
ZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQs
MTggKzI3MDgsMjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlm
IChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJl
c29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQ
dXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9k
dWxlVmFyKSB7CisgICAgICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVs
ZVZhciwgdGhlbiBhbGwgbGlua2VkIENvZGVCbG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAg
Ly8gdG8gYWxzbyBzZWUgTW9kdWxlVmFyLgogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9t
b2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKICAgICB9IGVsc2UgewogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAj
ZWxzZQogICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAg
IEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAog
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIy
OwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKQEAgLTI2NTIsNyArMjczOSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
I2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjcw
MSw3ICsyNzg4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgog
ICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAg
bG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsg
aW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDAp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3NTksNyArMjg0Niw2IEBAIHZvaWQg
SklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJu
YWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OwpAQCAtMjc2Nyw3ICsyODUzLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxk
T2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKQEAgLTI3ODksNyArMjg3NSw2IEBAIHRlbXBsYXRlIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWw8T3AKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAgLTI4MDUsNyArMjg5MCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qy
OwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gbW9kZSBzZXQgd2UgdGVuZCB0byBz
ZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBwcm9maWxlIGl0IGluIHRoZSBMTEludC4KLSAg
ICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgewogICAgICAgICBHUFJSZWcgZW51bWVyYXRv
ckdQUiA9IHJlZ1QzOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoVGVz
dDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjptb2RlU2V0T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIofkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKQEAgLTI4NDcsNzggKzI5MzIsODcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9y
ID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKIAotICAg
IGF1dG8gcmVzdWx0R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIg
PSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVudW1l
cmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0
QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIg
PSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0
ZXJzOjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUs
IHNjcmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcHJv
cGVydHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1f
ZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
RW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEo
KSwgc2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZThU
b01ldGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFk
YXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChi
YXNlR1BSKSk7CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4K
LSAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUg
fCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBpc05v
dE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRydXN0
ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVj
dHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
Myk7Ci0gICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1
cmVJRE9mZnNldCgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBz
Y3JhdGNoMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFu
Y2gzMihOb3RFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8gSWYg
aW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdl
LCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0g
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7
Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1wIG91
dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Mo
c2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSkpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7Cisg
ICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMu
YXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAg
IG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3Mo
cmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHJlZ1QzKTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIo
cmVnVDMsIHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwg
c2NyYXRjaDIpOworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihz
Y3JhdGNoMiwgc2NyYXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0
UHJvcGVydHkgPSBvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBzdGF0
aWNfY2FzdDxpbnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJh
c2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSks
IHJlc3VsdEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGlt
ZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2Fz
ZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOwot
ICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVu
T3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRv
ck1ldGFkYXRhKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gp
LCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1l
cmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRoaXMp
OwotICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVz
dGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIEp1
bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJlcGxh
Y2UgdGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJvcGVy
dHlHUFIpOwogCiAgICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAKICAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZh
bHMuYXBwZW5kKGdlbik7CiAKICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjkyNywxMCArMzAy
MSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBnZW5l
cmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JH
ZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0
eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0b3Jf
aGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBj
b25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENh
c2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rp
b25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yOwpAQCAtMjkzOSw3ICszMDMyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRv
cl9oYXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRy
ZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFk
YXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRh
ZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJh
dG9yTWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0
dXJlTW9kZSkpKTsKIApAQCAtMzAyOCw2ICszMTIzLDEzIEBAIHZvaWQgSklUOjplbWl0V3JpdGVC
YXJyaWVyKEpTQ2VsbCogb3duZXIKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmso
dGhpcyk7CiB9CiAKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcikKK3sK
KyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCks
IG93bmVyLCBzZWxlY3RTY3JhdGNoR1BSKG93bmVyKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7
CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDMsNyArMTU0Myw3
IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxp
bmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBj
YWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpk
dW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIo
JmNhbGxMaW5rSW5mbykpOwogICAgIAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywg
dm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91
dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgxODY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0
eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9w
Y29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9w
XyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwg
bWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUp
Ci0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRo
UHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAg
ICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAg
ICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMs
NyArMTAxOSw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAg
ICAgICAgIyBNZXRhZGF0YSBpbiB0MSwgc3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVy
YXRpb24odDIsIC5zbG93KQogICAgICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0
MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAg
ICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQs
IHQxLCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsx
MDg1LDE4IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRl
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAgIG1h
Y3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6
Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVd
Ci0gICAgZW5kCi0KICAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDAp
CiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVx
IHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZm
ZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJp
dGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0
aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAgICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0
ZVNyY05vdEludDoKICAgICBiaWEgdDEsIExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhv
cmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVt
YmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVO
dW1iZXIsIHQ1LCB0MykKICAgICByZXR1cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAt
MTExNSwxMCArMTEwNyw2IEBAIGVuZCkKIAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNv
ZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3Bl
cmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVT
dHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAg
ICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxl
OjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAg
ICAgICAgZ2V0KG1fcmhzLCB0MikKICAgICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyAr
MTExNCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAg
YmluZXEgdDIsIEludDMyVGFnLCAub3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRh
ZywgLm9wMk5vdEludAotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQor
ICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2Zp
bGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdl
ck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0
Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwxMiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9w
Y29kZU5hbWUsIG9wCiAgICAgICAgIGJpYSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBi
aWIgdDMsIExvd2VzdFRhZywgLm9wMU5vdEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0Mywg
SW50MzJUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJ
bnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRo
UHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAg
IGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAgICBm
aWkyZCB0MSwgdDMsIGZ0MQotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVy
TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBB
cml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAg
ICAgICAgIGdldChtX2RzdCwgdDEpCiAgICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUz
LDcgKzExNDEsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAg
ICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBv
cGVyYW5kIGlzIGRlZmluaXRlbHkgbm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAg
ICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJv
ZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0
cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBm
dDAKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0
MSwgZnQwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC00NDEsOCArNDQxLDEzIEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAg
ICAgICAgICAgIG1vdmUgUEMsIGExCiAgICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3Ny
KQogICAgICAgICAgICAgYnRweiByMCwgLnJlY292ZXIKLQogICAgICAgICAgICAgbW92ZSByMSwg
c3AKKworICAgICAgICAgICAgIyBCYXNlbGluZSB1c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIgZm9y
IGl0cyBKSVQgY29uc3RhbnQgcG9vbC4KKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJd
LCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2ppdERhdGFbUEJdLCBQQgorICAg
ICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjpKSVREYXRhOjptX2ppdENvbnN0YW50UG9vbFtQQl0s
IFBCCisKICAgICAgICAgICAgIGlmIEFSTTY0RQogICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29u
ZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhw
ciBHYXRlOjpsb29wT1NSRW50cnkpICogUHRyU2l6ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAg
W2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgSlNFbnRyeVB0clRhZwpAQCAtMTA1NiwxMCAr
MTA2MSw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFj
cm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAg
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1
cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0
c1t0Ml0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAg
bG9hZHEgW2NmciwgdDAsIDhdLCB0MQogICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5
LDcgKzEwNzAsNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAg
ICAgICAgIGludGVnZXJPcGVyYXRpb24odDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFn
LCB0MQogICAgICAgICBzdG9yZXEgdDEsIFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0
aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRj
aCgpCiAKICAgICAuc2xvdzoKQEAgLTExMzQsMTEgKzExMzUsNiBAQCBlbmQpCiAKIAogbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIHJldHVybikKLQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0
eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmls
ZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9v
cGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAg
ICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0xMTQ2LDEyICsxMTQyLDEyIEBAIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BO
ZWdhdGVTbG93CiAgICAgbmVnaSB0MwogICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRl
QXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmls
ZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogLm9w
TmVnYXRlTm90SW50OgogICAgIGJ0cXogdDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAg
IHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAwLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0
aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFy
aXRoUHJvZmlsZU51bWJlciwgdDEsIHQyKQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xv
dzoKQEAgLTExNjQsMTAgKzExNjAsNiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29k
ZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29k
ZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAg
ICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0g
ICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJv
ZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAg
ICAgICBnZXQobV9yaHMsIHQwKQogICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkKQEAgLTExNzcsNyArMTE2OSw3IEBAIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0
LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQy
KQogCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVC
aW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0
MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzEx
NzksMTAgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAg
ICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQog
ICAgICAgICBmcTJkIHQxLCBmdDEKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJO
dW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFy
aXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQyKQogICAgICAgICBqbXAgLm9wMU5vdEludFJl
YWR5CiAgICAgLm9wMU5vdEludE9wMkludDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVO
dW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3Qs
IEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQyKQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAg
ICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNCw5ICsx
MTk2LDkgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogCiAgICAg
Lm9wMk5vdEludDoKICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50
LCB0aGUgc2Vjb25kIGlzIGRlZmluaXRlbHkgbm90LgotICAgICAgICBnZXQobV9kc3QsIHQyKQog
ICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQ
cm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0
LCB0MikKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEK
ICAgICAgICAgZnEyZCB0MSwgZnQxCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyODE4NjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTI1NTYsNiArMjU1NiwxNyBAQCBtYWNybyBub3RTdXBwb3J0ZWQoKQogICAg
IGVuZAogZW5kCiAKKworbWFjcm8gdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBVbmFyeUFy
aXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKworbWFjcm8gdXBkYXRlQmluYXJ5QXJpdGhQ
cm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAg
ICBvcmggdHlwZSwgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCiAvLyBG
SVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRoZSBYODZfNjRfV0lOIGNvbmRpdGlvbiBoZXJlLCBz
aW5jZSBXRUJBU1NFTUJMWSBzaG91bGQgYWxyZWFkeSBiZSBmYWxzZSBvbiBXaW5kb3dzCiAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNzE2CiBpZiBXRUJBU1NF
TUJMWSBhbmQgbm90IFg4Nl82NF9XSU4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI4MTg2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsOCArNDgsMTAgQEAgcHVibGljOgogICAgIENhY2hlYWJsZUlkZW50
aWZpZXIoKSA9IGRlZmF1bHQ7CiAKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZp
ZXIgY3JlYXRlRnJvbUNlbGwoSlNDZWxsKiBpZGVudGlmaWVyKTsKLSAgICBzdGF0aWMgaW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KENvZGVCbG9jayosIGNvbnN0IElkZW50aWZpZXImKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hl
YWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVC
bG9jayosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgY29uc3QgSWRlbnRp
ZmllciYpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRp
YyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGlj
IGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
VW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgY29uc3RleHByIENhY2hlYWJsZUlkZW50
aWZpZXIgY3JlYXRlRnJvbVJhd0JpdHModWludHB0cl90IHJhd0JpdHMpIHsgcmV0dXJuIENhY2hl
YWJsZUlkZW50aWZpZXIocmF3Qml0cyk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCShy
ZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFi
bGVJZGVudGlmaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTQgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBD
b2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUq
IGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaSkKIHsKICAgICByZXR1cm4gY3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKGNvZGVCbG9jaywgaS5pbXBsKCkpOwogfQogCi1p
bmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGlu
ZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGNvZGVCbG9j
ay0+aGFzSWRlbnRpZmllcih1aWQpKTsKICAgICByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcih1
aWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODAsNyArNDgw
LDcgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90bwogI2lmIEVOQUJM
RShKSVQpCiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3AoT3BO
ZWdhdGU6Ok1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZSByZXN1bHQsIEpTVmFsdWUgb3BlcmFu
ZCkKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQ
cm9maWxlOworICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gKm1ldGFkYXRhLm1fYXJp
dGhQcm9maWxlOwogICAgIHByb2ZpbGUub2JzZXJ2ZUFyZyhvcGVyYW5kKTsKICAgICBBU1NFUlQo
cmVzdWx0LmlzTnVtYmVyKCkgfHwgcmVzdWx0LmlzQmlnSW50KCkpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25F
eGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsyODksOCBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZlJhcmVEYXRhKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9yYXJlRGF0YSk7IH0KICAgICBz
dGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFzU3RyaW5nSW5SYXJlRGF0YSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihSYXJlRGF0YSwgbV9hc1N0cmluZyk7IH0KKyAgICBzdGF0aWMg
aW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9ja0ZvckNhbGwpOyB9Cisg
ICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3Qo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdCk7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJs
ZUJhc2U7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL1dURi93dGYvQmFnLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDIwIEBAIHB1YmxpYzoKICAgICAgICAgb3RoZXIu
bV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAg
IEJhZyYgb3BlcmF0b3I9KEJhZzxULCBVPiYmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHVu
d3JhcHBlZEhlYWQoKSA9PSBvdGhlci51bndyYXBwZWRIZWFkKCkpCisgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisKKyAgICAgICAgQmFnIGRlc3Ryb3k7CisgICAgICAgIGRlc3Ryb3kubV9oZWFk
ID0gdW53cmFwcGVkSGVhZCgpOworICAgICAgICBtX2hlYWQgPSBvdGhlci51bndyYXBwZWRIZWFk
KCk7CisgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuICp0
aGlzOworICAgIH0KKwogICAgIH5CYWcoKQogICAgIHsKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkocmV2aXNpb24gMjgxODY4KQorKysgVG9vbHMv
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtNzcwLDE3ICs3
NzAsMTggQEAgZW5kCiAKICMgRklYTUU6IG5lZWQgdG8gZml4IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg3MDMgdG8gZW5hYmxlIHRoaXMgb24gTGludXgvTUlQUy4K
IGRlZiBydW5CeXRlY29kZUNhY2hlSW1wbChvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMsICph
ZGRpdGlvbmFsRW52KQotICAgIGlmICgkaG9zdE9TID09ICJkYXJ3aW4iKQotICAgICAgICBmaWxl
VGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGUiCi0gICAgZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4
IiAmJiAkYXJjaGl0ZWN0dXJlICE9ICJtaXBzIikKLSAgICAgICAgZmlsZVRlbXBsYXRlID0gImJ5
dGVjb2RlLWNhY2hlWFhYWFhYIgotICAgIGVsc2UKLSAgICAgICAgc2tpcAotICAgICAgICByZXR1
cm4KLSAgICBlbmQKKyAgICAjIE9PUFMKKyAgICAjaWYgKCRob3N0T1MgPT0gImRhcndpbiIpCisg
ICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGUiCisgICAgI2Vsc2lmICgkaG9z
dE9TID09ICJsaW51eCIgJiYgJGFyY2hpdGVjdHVyZSAhPSAibWlwcyIpCisgICAgIyAgICBmaWxl
VGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhYWFgiCisgICAgI2Vsc2UKKyAgICAjICAgIHNr
aXAKKyAgICAjICAgIHJldHVybgorICAgICNlbmQKIAotICAgIG9wdGlvbnMgPSBCQVNFX09QVElP
TlMgKyBGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucyArICR0ZXN0U3Bl
Y2lmaWNSZXF1aXJlZE9wdGlvbnMKLSAgICBhZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIs
IFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIp
LnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5kLCAkYmVuY2htYXJrLnRvX3NdICsg
b3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyLCAqYWRkaXRp
b25hbEVudikKKyAgICAjb3B0aW9ucyA9IEJBU0VfT1BUSU9OUyArIEZUTF9PUFRJT05TICsgb3B0
aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucwor
ICAgICNhZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVy
cyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50
b19zLCAqdm1Db21tYW5kLCAkYmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0
SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyLCAqYWRkaXRpb25hbEVudikKIGVuZAogCiBkZWYg
cnVuQnl0ZWNvZGVDYWNoZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437229</attachid>
            <date>2021-09-02 18:51:59 -0700</date>
            <delta_ts>2021-09-03 11:00:53 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>421954</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MTg2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODMxLDYgKzgzMSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IH07CiAJ
CTUyRUVENzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFRUQ3OTMyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgw
MDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIw
MDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVk
U291cmNlMy1tbS5tbSAqLzsgfTsKQEAgLTE0MTYsMTAgKzE0MTcsMTAgQEAKIAkJQTM4Q0E1OUUy
NkREODRERTAwQzhEODRDIC8qIElTTzg2MDEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEzOENBNTlDMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmgg
Ki87IH07CiAJCUEzOEQyNTBFMjU4MDBENDQwMDQyQkZERCAvKiBKU0FycmF5QnVmZmVyUHJvdG90
eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTM4RDI1MEQyNTgwMEQ0MzAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxp
bmVzLmggKi87IH07CiAJCUEzOEQ1QkZDMjY2NkQzREEwMEExMDlBNiAvKiBJbkJ5U3RhdHVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzhENUJGQTI2
NjZEM0RBMDBBMTA5QTYgLyogSW5CeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUEzRUU4NTQzMjYyNTE0QjAwMEZDOUI4RCAvKiBJbnRs
V29ya2Fyb3VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMzc2MTk0MDI2MjUxMjdDMDBDQkNCQTkgLyogSW50bFdvcmthcm91bmQuY3BwICovOyB9
OwogCQlBM0M3RURCNjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VE
QjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLzsgfTsK
IAkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIzMjZCMERCMzcw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmggKi87IH07CiAJCUEzQzdFREJBMjZCMERCMzgw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAv
KiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKKwkJQTNFRTg1NDMyNjI1MTRC
MDAwRkM5QjhEIC8qIEludGxXb3JrYXJvdW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzNzYxOTQwMjYyNTEyN0MwMENCQ0JBOSAvKiBJbnRsV29y
a2Fyb3VuZC5jcHAgKi87IH07CiAJCUEzRkY5QkM3MjIzNDc0OTEwMEIxQTlBQiAvKiBZYXJyRmxh
Z3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRkY5
QkM1MjIzNDc0NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyog
SmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTUwM0ZBMTQxODhFMEZBRjAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJh
bWUuaCAqLzsgfTsKIAkJQTUwM0ZBMUUxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENh
bGxGcmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTUwM0ZBMTgxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZVByb3RvdHlwZS5oICovOyB9OwpAQCAtMzY2Nyw2ICszNjY4LDggQEAKIAkJNTJDRDBGNjQyMjQy
RjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBwYXRoID0gZGZnL3Rlc3Rk
ZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQxMzA4RjIyMUNFMDNBMDA5
QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0g
Zm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNjI2RTAzOUIzMDA1
NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VsaW5lSklUQ29k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNzI2RTAzOUI0MDA1NEU0
MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VsaW5lSklU
Q29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkyMjQ5MkI4Njgw
MDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5j
dGlvbkFsbG93bGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkz
MjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
dW5jdGlvbkFsbG93bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1
QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI1Niw2ICs2MjU5LDggQEAKIAkJCQk2Qjc2N0U3QTI2
NzkxRjI3MDAxN0Y4RDEgLyogQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaCAqLywKIAkJCQk3MjM5
OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLywKIAkJCQk3MjM5
OThGNTI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8sCisJCQkJNTJERDAw
MDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8sCisJCQkJNTJERDAw
MDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovLAogCQkJCTBGNjRCMjZG
MUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGNjRCMjcwMUE3
ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4MzkyRDFCQUNBOUQz
MDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApAQCAtOTY5Niw2ICs5NzAxLDcgQEAK
IAkJCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTgg
LyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlDQzg5MTkzQUM2MEEw
MDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzYx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgko
cmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91cCA6
UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAg
IHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRUeXBl
cywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRhdGE6
IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJp
dGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZhbHVl
UHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5SW5Q
bGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDogVmly
dHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAg
ICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZQor
ICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDp0
b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRzdDog
VmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWdu
ZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5
QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioK
ICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
T3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBA
IFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJu
ICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
K3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4
KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhw
ciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dp
dGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3lt
Ym9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRvclByb2Zp
bGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dDogcmV0dXJuIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYg
Y29uc3RleHByIChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3JfbmV4dCkgeworICAg
ICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JO
ZXh0Ojpjb21wdXRlTmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0
UmVzdWx0UHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXREb25lOiBy
ZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkRvbmVQcm9maWxlKCk7CisgICAgICAg
IGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZlZhbHVlUHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSBlbHNlIAorICAgICAgICByZXR1cm4g
Qnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGVNZXRhZGF0YT4KIGJvb2wgaGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2Rl
TWV0YWRhdGEmIG1ldGFkYXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlu
a0luZm86OnVubGluayhWTSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwog
fQogCi1Db2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZh
c3RQYXRoU3RhcnQoKQotewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4obV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBS
RUxFQVNFX0FTU0VSVCghaXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2Fs
bExpbmtJbmZvOjpzZXRNYXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gdmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoaXNEaXJlY3QoKSAmJiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsK
K30KKwogdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBo
YW5kbGVTcGVjaWZpY0NhbGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgs
MjMgKzI5OSwxMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAg
ICAgbV9mcmFtZVNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMg
dXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNU
YWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAg
ICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJS
ZWcpOwotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyks
IGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0g
Y2FsbExpbmtJbmZvR1BSOwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5s
YWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50
ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBzbG93UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVz
ZURhdGFJQyA9PSBVc2VEYXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIp
OyAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyAr
MzEyLDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAg
ICAgICAgZ29Qb2x5bW9ycGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9u
WmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWND
YWxsZWVNYXNrKSk7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAg
fQotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7
CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1v
cnBoaWMubGluaygmaml0KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBz
dGFjayBwcmVwLgogICAgICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwg
SlNFbnRyeVB0clRhZyk7CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNo
UHRyV2l0aFBhdGNoKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hl
Y2ssIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAg
ICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsK
ICAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mbyk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
dS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihjYWxsZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEz
ICszNDQsMzQgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDIHVzZURhdGFJQykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIG51bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisK
KyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0lu
Zm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1
LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJ
bmZvR1BSLCB1c2VEYXRhSUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBV
c2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxD
YWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxs
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNU
YWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwg
Y2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7
CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0
UGF0aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6
Tm8sIGlzVGFpbENhbGwoKSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVn
KTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwg
Y2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNG
YXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7Cisg
ICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxM
aW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxD
YWxsKSk7CiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2Fs
bEhlbHBlcnMmIGppdCkKQEAgLTM2OSwxNyArMzgxLDMwIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0U2xvd1BhdGgoVk0mIHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50
cnlQdHJUYWcpOwogfQogCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZN
JiwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0
Lm1vdmUoY2FsbExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERl
c3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86Omlu
aXRpYWxpemVEYXRhSUMoVk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxs
TGlua0luZm8sIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7Cisg
ICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29k
ZUluZGV4KTsKKyAgICBzZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNh
bGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25l
TG9jYXRpb247CisgICAgaWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEp
CisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZs
ZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzog
dGltZSBmb3IgcmVmIGNvdW50aW5nPworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVz
KTsKKyAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAg
ICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwog
dm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRh
SUNzKFVzZURhdGFJQzo6Tm8pOwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVs
KCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQu
bmVhckNhbGwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CiAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CkBAIC0zOTcsNyArNDIyLDcg
QEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhcwogCiAgICAgYXV0byBm
YXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgICAg
IHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKICAgICB9KTsKIAogICAgIC8vIC0gSWYgd2UncmUg
bm90IHlldCBsaW5rZWQsIHRoaXMgaXMgYSBqdW1wIHRvIHRoZSBzbG93IHBhdGguCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lv
biAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDExIEBAIGNsYXNzIEpTRnVuY3Rpb247CiBl
bnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiBzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGE7CiAK
K3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbzsKKwogY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVi
bGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIHB1YmxpYzoKLSAgICBl
bnVtIENhbGxUeXBlIHsKKyAgICBlbnVtIENhbGxUeXBlIDogdWludDhfdCB7CiAgICAgICAgIE5v
bmUsCiAgICAgICAgIENhbGwsCiAgICAgICAgIENhbGxWYXJhcmdzLApAQCAtMTY1LDYgKzE2Nyw4
IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgfQogCisg
ICAgdm9pZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgVW5saW5rZWRDYWxsTGlua0luZm8mLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKwogICAgIEdQUlJlZyBjYWxs
ZWVHUFIoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsgfQogICAgIAogICAgIGVudW0gY2xh
c3MgVXNlRGF0YUlDIDogdWludDhfdCB7CkBAIC0xNzMsMTMgKzE3NywxNiBAQCBwdWJsaWM6CiAg
ICAgfTsKIAogcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQ
YXRoSW1wbChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBib29sIGlzVGFp
bENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5V
U0VEX1JFVFVSTjsKIHB1YmxpYzoKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5V
U0VEX1JFVFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxs
KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OworCisgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOworCiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247CiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb247
CiAgICAgdW5pb24gVW5pb25UeXBlIHsKQEAgLTM5Nyw2ICs0MDAsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsTG9j
YXRpb247CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0
clRhZz4gbV9jYWxsZWVMb2NhdGlvbjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IG1fc2xvd1BhdGhTdGFydDsKKyAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKICAgICAgICAgfSBjb2Rl
SUM7CiAgICAgfSB1OwogCkBAIC00MjQsNiArNDI4LDEzIEBAIGlubGluZSBDb2RlT3JpZ2luIGdl
dENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4o
KTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0
aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJbmZv
OjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVE
YXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNyArMzcwLDgg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2FuJ3Qg
Z2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJvY2Vz
cyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJvZHVj
ZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5lc3Mg
YW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2YgYW4g
VW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhlIGxp
dmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNpZGUg
VW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBiZXR3
ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhlIGJ5
dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5nIGFu
IFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CkBAIC00NjYsNiArNDY3
LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAg
YnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRD
b2RlLT5iaW5hcnlBcml0aFByb2ZpbGUoYnl0ZWNvZGUubV9wcm9maWxlSW5kZXgpOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorI2RlZmluZSBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklM
RShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURB
VEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2Vk
Q29kZS0+dW5hcnlBcml0aFByb2ZpbGUoYnl0ZWNvZGUubV9wcm9maWxlSW5kZXgpOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0
cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MjgsMTQgKzU0MiwxNCBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQ
cm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTkso
T3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAg
IExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcElu
YykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BN
dWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAg
ICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktf
V0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5B
UllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc4OSw2ICs4MDMs
NzQgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3du
ZXJFZGdlLnNldCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZt
LCB0aGlzKSk7CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5l
Q29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPiBqaXRDb2RlKQoreworICAgIHNldEpJVENvZGUoaml0
Q29kZS5jb3B5UmVmKCkpOworCisgICAgeworICAgICAgICBjb25zdCBhdXRvJiBqaXRDb2RlTWFw
ID0gdGhpcy0+aml0Q29kZU1hcCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7CisgICAgICAgICAgICBIYW5kbGVySW5m
byYgaGFuZGxlciA9IGV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAvLyBGSVhNRTog
PHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KKyAgICAgICAgICAgIGhhbmRsZXIubmF0aXZlQ29k
ZSA9IGppdENvZGVNYXAuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdn
ZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsK
KyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBhdXRv
JiBqaXREYXRhID0gZW5zdXJlSklURGF0YShsb2NrZXIpOworCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGppdERhdGEubV9qaXRDb25zdGFudFBvb2wuaXNFbXB0eSgpKTsKKyAgICAgICAgaml0RGF0
YS5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5tX2NvbnN0
YW50UG9vbC5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGppdENvZGUt
Pm1fY29uc3RhbnRQb29sLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvIGVudHJ5ID0g
aml0Q29kZS0+bV9jb25zdGFudFBvb2wuYXQoaSk7CisgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5
LnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxP
YmplY3Q6CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IG1f
Z2xvYmFsT2JqZWN0LmdldCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbzogeworICAgICAgICAgICAg
ICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9ICpzdGF0aWNf
Y2FzdDxVbmxpbmtlZENhbGxMaW5rSW5mbyo+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAg
ICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0RGF0YS5tX2NhbGxMaW5rSW5mb3Mu
YWRkKENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCkpOworICAg
ICAgICAgICAgICAgIC8vIE9PUFM6IGRvbid0IGhhcmRjb2RlIHRoZXNlIHJlZ2lzdGVycyBsaWtl
IHRoaXMuCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFsaXplRGF0YUlDKHZt
KCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIp
OworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBjYWxsTGlu
a0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKKyAgICAg
ICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvID0g
KnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRyeS5wYXlsb2FkKTsK
KyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBqaXREYXRhLm1f
c3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUsIENvZGVPcmlnaW4odW5s
aW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8t
PmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyh0aGlzLCB1bmxpbmtlZFN0
dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0g
c3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsOiB7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5w
YXlsb2FkKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0g
ZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHI6
IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFu
dFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3dp
dGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBHbG9iYWxDb2RlOgorICAgIGNhc2UgTW9kdWxl
Q29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZ1bmN0aW9uQ29kZToKKyAgICAg
ICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRl
dGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgorICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0
aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5J
bmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlz
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQog
ewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtMzA3OSw3ICszMTYxLDcgQEAgdW5zaWduZWQgQ29k
ZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBjYXNl
IEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVy
Q291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZv
cih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAj
aWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMjk1LDEzICszMzc3LDEzIEBAIEJpbmFyeUFyaXRoUHJv
ZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgp
KSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wQWRkPigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wQWRk
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfbXVsOgotICAg
ICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8
T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kaXY6
Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1f
YXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMz
MTMsMTEgKzMzOTUsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0
aAogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX25lZ2F0ZToK
LSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0
aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhp
cykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNh
c2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERlYz4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiQXJyYXlQcm9maWxlLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5o
IgogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKQEAgLTE1OCw3ICsxNTksOSBAQCBwdWJsaWM6
CiAgICAgTWV0YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0
YWRhdGEuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJl
dHVybiBtX251bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0
ZXJzKHVuc2lnbmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwKCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPZkFyZ3VtZW50c1RvU2tp
cDsgfQogCkBAIC0xNjcsNyArMTcwLDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bVZhcnMo
KSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KICAgICB1bnNpZ25lZCBudW1UbXBzKCkgY29u
c3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVj
a3BvaW50VG1wczsgfQogCi0gICAgdW5zaWduZWQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7
IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251
bVBhcmFtZXRlcnMpOyB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAg
LTIzMiwxNiArMjM0LDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJl
YWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3BvaW50cygpOwog
Ci0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7
Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYmFjayB0aGUgb3B0aW1pemF0aW9u
IHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlzIGB0aGlzYCBhbmQgd2UncmUgaW4gc2xv
cHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0g
c3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAtMjY2LDggKzI1OCwxMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBnZXRJQ1N0YXR1c01hcChJQ1N0YXR1c01hcCYgcmVzdWx0KTsKICAgICAKICNp
ZiBFTkFCTEUoSklUKQorICAgIC8vIE9PUFM6IG1vdmUgYXJpdGhtZXRpYyBJQ3MgYW5kIHN3aXRj
aCB0YWJsZXMgb3V0IG9mIGhlcmUsIGFuZCBvbnRvIEpJVENvZGUuCiAgICAgc3RydWN0IEpJVERh
dGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICAgICAgQmFnPFN0cnVjdHVy
ZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKICAgICAgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsK
QEAgLTI4Miw5ICsyNzYsMTMgQEAgcHVibGljOgogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENU
b0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXND
YWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1h
cDsKKworICAgICAgICBGaXhlZFZlY3Rvcjx2b2lkKj4gbV9qaXRDb25zdGFudFBvb2w7CisgICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwgbV9qaXRDb25zdGFudFBvb2wpOyB9CiAgICAgfTsKIAor
ICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29k
ZT4pOworCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkKQEAgLTI5
Myw2ICsyOTEsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGFT
bG93KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkpJVERhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2pp
dERhdGEpOyB9CisKICAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxl
Kik7CiAgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwogICAg
IEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwpAQCAtMzIyLDE1ICsz
MjIsMTAgQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRv
IGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0luZm8qIGdl
dENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAg
dm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAgIHsKLSAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBlbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKLSAgICB9CiAg
ICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCiAgICAgewotICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVKSVREYXRh
KGxvY2tlcikubV9qaXRDb2RlTWFwOworICAgICAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklU
Q29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1faml0Q29kZU1hcDsKICAgICB9CiAKICAgICB2b2lk
IHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4m
Jik7CkBAIC00NzIsNiArNDY3LDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5hbWVGb3JSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFy
Z3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1l
bnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQ
cm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykg
fHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKQEAgLTU3Miw2ICs1NjgsNyBAQCBwdWJsaWM6CiAgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5n
ZXQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0
YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihy
ZWcpOyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihpbmRleCk7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9jb25zdGFudFJlZ2lzdGVycykg
KyBkZWNsdHlwZShtX2NvbnN0YW50UmVnaXN0ZXJzKTo6ZGF0YU1lbW9yeU9mZnNldCgpOyB9CiAK
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJu
IG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlv
bkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNjAxLDYgKzU5
OCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7CiAgICAg
ICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAg
ICB9CisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFi
bGVJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4o
bV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgIH0K
KyAgICB2b2lkKiBiYXNlbGluZUpJVENvbnN0YW50UG9vbCgpCisgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
KTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wuZGF0YSgpOwor
ICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxl
cygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29k
ZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTYxMSw2ICs2MTgs
MTEgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwogICAgICAg
ICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07
CiAgICAgfQorICAgIFN0cmluZ0p1bXBUYWJsZSYgYmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUoaW50IHRhYmxlSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5l
SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVy
T2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOyB9CkBAIC03OTcsNiArODA5LDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3Rz
OyB9CiAgICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1
Z2dlclJlcXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVx
dWVzdHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVx
dWVzdHMpOyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2lu
dHMpOwogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykK
QEAgLTgzOCw2ICs4NTEsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2Nr
IG1fbG9jazsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJp
dGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBF
TkFCTEUoSklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBE
Rkc6OkNhcGFiaWxpdHlMZXZlbApAQCAtOTA2LDExICs5MjAsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQ29kZUJsb2NrLCBtX21ldGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKTsgfQogCi0gICAgYm9vbCBsb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCi0gICAgewotICAgICAgICAvLyBT
b21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRo
ZXkgcnVuLgotICAgICAgICByZXR1cm4gIW1fdW5saW5rZWRDb2RlLT5pc0J1aWx0aW5GdW5jdGlv
bigpOwotICAgIH0KKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9y
RnV6emluZ0Vhcmx5UmV0dXJuKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluYWxpemVM
TEludElubGluZUNhY2hlcygpOwpAQCAtMTAwOCw3ICsxMDE4LDkgQEAgcHJpdmF0ZToKICAgICBT
dHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBS
ZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29k
ZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jawpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9j
ayk7CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsg
fQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0
YWRhdGEuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGEKIAogc3RydWN0IEdldEJ5SWRN
b2RlTWV0YWRhdGFBcnJheUxlbmd0aCB7CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCwgYXJyYXlQcm9maWxl
KTsgfQogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxl
bmd0aCkgPT0gMTIpOwogCkBAIC04OCw2ICs4OSw3IEBAIHVuaW9uIEdldEJ5SWRNb2RlTWV0YWRh
dGEgewogICAgICAgICBHZXRCeUlkTW9kZSBtb2RlOwogICAgICAgICB1aW50OF90IGhpdENvdW50
Rm9yTExJbnRDYWNoaW5nOyAvLyBUaGlzIG11c3QgYmUgemVybyB3aGVuIHdlIHVzZSBQcm90b0xv
YWQgbW9kZS4KICAgICB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2RlKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9CiAgICAg
R2V0QnlJZE1vZGVNZXRhZGF0YURlZmF1bHQgZGVmYXVsdE1vZGU7CiAgICAgR2V0QnlJZE1vZGVN
ZXRhZGF0YVVuc2V0IHVuc2V0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5n
dGggYXJyYXlMZW5ndGhNb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODUsNiArMzg1LDggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKAog
ICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCisvLyBPT1BTOiBNYWtlIHRoaXMgc3R1
ZmYgd29yayB3aXRoIGRhdGEgaWNzIHRvIG5vdCBhc3N1bWUgaW5saW5lIGFjY2Vzcy4KKwogdm9p
ZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNj
ZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQpCiB7CiAgICAgaWYg
KGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKQEAgLTQwNCw5ICs0MDYsMTIgQEAgdm9pZCBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2ly
ZVN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFy
Z2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIE9P
UFM6IG1ha2Ugc29tZSB2ZXJzaW9uIG9mIElubGluZUFjY2VzcyBmb3IgYmFzZWxpbmUuIFBlcmhh
cHMgbWFrZSBpdCBkYXRhIGRyaXZlbi4gT3IgcGVyaGFwcyBoYXZlIHRoZSBjb2RlCisgICAgICAg
IC8vIGJlIHNoYXJlZCBzb21laG93IGJldHdlZW4gVW5saW5rZWRDb2RlQmxvY2tzLgorCiAgICAg
ICAgIC8vIElmIGl0IGlzIG5vdCBHZXRCeUlkLWxpa2UtdGhpbmcsIHdlIGRvIG5vdCBlbWl0IG5v
cCBzbGVkIChlLmcuIEdldEJ5VmFsKS4KICAgICAgICAgLy8gVGhlIGNvZGUgaXMgYWxyZWFkeSBh
biBpbmRpcmVjdCBqdW1wLCBhbmQgb25seSB0aGluZyB3ZSBzaG91bGQgZG8gaXMgcmVwbGFjaW5n
IG1fY29kZVB0ci4KLSAgICAgICAgaWYgKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikg
eworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQgJiYgc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CiAgICAgICAgICAgICAvLyBJ
ZiBtX2NvZGVQdHIgaXMgcG9pbnRpbmcgdG8gc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9u
LCB0aGlzIG1lYW5zIHRoYXQgSW5saW5lQWNjZXNzIGNvZGUgaXMgbm90IGEgc3R1YiBvbmUuCiAg
ICAgICAgICAgICAvLyBXZSByZXdyaXRlIHRoaXMgd2l0aCB0aGUgc3R1Yi1iYXNlZCBkaXNwYXRj
aGluZyBjb2RlIG9uY2UsIGFuZCBjb250aW51ZSB1c2luZyBpdCB1bnRpbCB3ZSByZXNldCB0aGUg
Y29kZS4KICAgICAgICAgICAgIGlmIChzdHViSW5mby5tX2NvZGVQdHIuZXhlY3V0YWJsZUFkZHJl
c3MoKSA9PSBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSkgewpAQCAtNDIxLDYgKzQyNiw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNK
dW1wSW5BY2MKICAgICAgICAgICAgICAgICB9KSwgIklubGluZUFjY2VzczogbGlua2luZyBzdHVi
IGNhbGwiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHN0dWJJbmZvLm1f
Y29kZVB0ciA9IHRhcmdldDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRh
LmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
dGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBP
VkVSTE9BRF9CSVRXSVNFX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJdGVyYXRp
b25Nb2RlTWV0YWRhdGEgewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SXRlcmF0aW9uTW9kZU1ldGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0YXRpY19hc3NlcnQo
c2l6ZW9mKGRlY2x0eXBlKHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRpb25Nb2RlKSk7CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0lu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRD
YWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKExMSW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KIAogcHJp
dmF0ZToKICAgICB1aW50cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQg
eyB1bmxpbmtlZEJpdCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIK
IAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgog
I2luY2x1ZGUgIlJlcGF0Y2guaCIKIApAQCAtMjg1LDYgKzI4Niw3IEBAIHZvaWQgU3RydWN0dXJl
U3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ss
ICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vz
c1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CiAg
ICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZhbCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgpAQCAtNDMwLDYgKzQz
MiwyMDQgQEAgQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1f
Y2FjaGVUeXBlID0gbmV3Q2FjaGVUeXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBl
ID0gdW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHVi
SW5mby5zdGFydDsgLy8gT09QUzogZG8gd2UgbmVlZCBhIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAg
ICBkb25lTG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93
UGF0aFN0YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlv
bjsKKyAgICBjYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KHVubGlu
a2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpOworICAgIGNvZGVPcmlnaW4gPSBD
b2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgbV9jb2RlUHRy
ID0gc2xvd1BhdGhTdGFydExvY2F0aW9uOworCisgICAgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICBpZiAoYWNjZXNzVHlwZSA9PSBB
Y2Nlc3NUeXBlOjpHZXRCeUlkICYmIHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkpIHsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9yX25leHQsIHdlIGNhbid0IGNsb2Ji
ZXIgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgZWl0aGVyLgorICAgICAgICB1c2VkUmVnaXN0ZXJzLmFk
ZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gpOworICAgIH0KKworICAgIHN3aXRj
aCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgor
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZv
LnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAg
ICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5l
Y21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRT
ZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJp
dmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICBz
d2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6
Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlz
U3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAg
ICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAg
ICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gdW5saW5r
ZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRC
eVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2
YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpT
ZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFBy
aXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25D
aGVja1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBz
d2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgor
ICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlH
UFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVH
UFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAgICAgICBoYXNDb25zdGFu
dElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gSW52YWxpZEdQUlJlZzsK
KyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlm
aWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAg
ICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIHZhbHVlR1BSID0gQmFz
ZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MucHJvdG90eXBl
R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICAgICAgbV9zdHVi
SW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFu
ZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNl
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3Bl
cnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFs
dWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHVi
SW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBoYXNDb25zdGFudElk
ZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAg
IHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9z
dHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAg
ICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9
IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRX
aXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0
aGlzVmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAg
ICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgor
ICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5m
b0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBpZiAo
YWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQdXRCeVZhbCkKKyAgICAgICAgICAgIG1fYXJyYXlQ
cm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlm
aWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAg
YmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBy
ZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKICNpZiBBU1NFUlRfRU5BQkxFRAogdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y2hlY2tDb25zaXN0ZW5jeSgpCiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJK
SVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAi
T3B0aW9ucy5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5o
IgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgpAQCAt
NTYsNiArNTcsNyBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgewogICAgIEdldEJ5
VmFsLAogICAgIFB1dEJ5SWQsCiAgICAgUHV0QnlWYWwsCisgICAgUHV0UHJpdmF0ZU5hbWUsCiAg
ICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC03OCw2ICs4
MCw4IEBAIGVudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKICAgICBTdHJpbmdMZW5ndGgK
IH07CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworCiBjbGFzcyBTdHJ1Y3R1
cmVTdHViSW5mbyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1YkluZm8p
OwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtOTgsNiArMTAyLDggQEAgcHVibGlj
OgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAorICAgIHZvaWQg
aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8mKTsKKwogICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwog
CiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBk
ZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCkBAIC00NDcsNiArNDUzLDE4
IEBAIGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW4KICAgICB9CiB9CiAK
K3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJp
dmF0ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSB9OworICAgIEVD
TUFNb2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgpIH07CisgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4OworICAgIC8vIE9PUFM6IERvIHdlIG5lZWQgc3RhcnQgZm9yIGRhdGEg
SUNzPworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsg
Ly8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNh
Y2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW5zdGFuY2VvZicg
Y2FjaGVzLgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2Nh
dGlvbjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xvd1Bh
dGhTdGFydExvY2F0aW9uOworfTsKKwogI2Vsc2UKIAogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNiw0
ICszMTYsMTYgQEAgaW50IFVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2ZmcwogICAg
IHJldHVybiBtX291dE9mTGluZUp1bXBUYXJnZXRzLmdldChieXRlY29kZU9mZnNldCk7CiB9CiAK
KyNpZiBBU1NFUlRfRU5BQkxFRAorYm9vbCBVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRlbnRpZmll
cihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIC8vIE9PUFM6IGRvIHdoYXQgQ29kZUJs
b2NrIGRvZXMgYW5kIG1ha2UgYSBoYXNoIHRhYmxlPworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRpZmll
cihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2Rl
Q29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQ
cm9maWxlLmgiCkBAIC02Miw2ICs2Myw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xh
c3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGlu
ZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29u
c3RhbnQgOiBpbnQzMl90OwogCkBAIC0xNzUsNiArMTc3LDcgQEAgcHVibGljOgogCiAgICAgY29u
c3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMo
KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07
IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudElu
ZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9j
b25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIxMCwxNSBA
QCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAog
ICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25z
dCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgewor
ICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0
KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0
aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5z
dHJ1Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBj
b25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51
bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAg
dW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDYg
KzM0NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRl
cygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQg
dG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFp
c0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgYm9v
bCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CisjZW5kaWYKIAogcHJvdGVjdGVk
OgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0
IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwpAQCAtMzk0
LDYgKzQxNSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJl
cyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRy
PEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAg
Q29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFy
c2VNb2RlOwpAQCAtNDEwLDYgKzQzMiw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogYmlu
ZCBhIGJldHRlciBwbGFjZSB0byBzdG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlB
cml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0
aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtNDU1LDYgKzQ4MCwyOCBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVj
dGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0
IEluc3RydWN0aW9uKiBwYykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVt
cE9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5
QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5
QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBl
bmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV91
bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKFVuYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJp
dGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsg
fQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7
IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQogCiBwcml2YXRlOgogICAgIHVzaW5n
IE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0
LCBpbnQ+OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MTg2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKICAgICBib29sIHdh
c0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9CiAgICAgYm9vbCBoYXNDaGVj
a3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50cygpOyB9
CiAgICAgYm9vbCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aGFz
VGFpbENhbGxzKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUoKSB7IHJl
dHVybiBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCk7IH0KKyAgICB1bnNpZ25l
ZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFy
aXRoUHJvZmlsZSgpOyB9CiAKICAgICAvLyBVcGRhdGluZyBVbmxpbmtlZENvZGVCbG9jay4KICAg
ICB2b2lkIHNldEhhc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFzQ2hlY2twb2lu
dHMoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0
YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NCw2ICs2NCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFVubGlua2VkTWV0YWRhdGFUYWJsZSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9wY29kZT4KKyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9w
Y29kZSYgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQpOworICAg
ICAgICB1aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMy
KClbT3Bjb2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07
CisgICAgICAgIHJldHVybiBiYXNlVHlwZU9mZnNldCArIHNpemVvZih0eXBlbmFtZSBPcGNvZGU6
Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7CisgICAgfQorCiBwcml2YXRlOgogICAg
IGVudW0gRW1wdHlUYWcgeyBFbXB0eSB9OwogCkBAIC0xMDEsNiArMTA5LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2lu
ZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJ
KHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQCB0ZW1wbGF0ZTx1bnNp
Z25lZCBudW1iZXJPZkJ1Y2tldHNBcmd1bWVuCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1
Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3Bl
Y0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldElu
ZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3Bl
Y0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQpAQCAtMTM0LDcgKzEz
Myw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgCiAgICAgICAgIHJldHVy
biBtX3ByZWRpY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNr
ZXRzW3RvdGFsTnVtYmVyT2ZCdWNrZXRzXTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGlj
dGlvbiB7IFNwZWNOb25lIH07CkBAIC0xNTYsNiArMTU1LDcgQEAgc3RydWN0IFZhbHVlUHJvZmls
ZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldAogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZh
bHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgp
IDogVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPigpIHsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0c1swXSk7IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5OCw3
ICsxNTk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRVbmFyeQogICAg
ICAgICBlbWl0VW5hcnlPcDxPcE5vdD4oZHN0LCBzcmMpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5
cGUpOworICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSwgbV9jb2Rl
QmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IG9wX2JpdG5vdDoKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BCaXRub3Q+KGRzdCwgc3JjKTsKQEAg
LTE2OTYsMTMgKzE2OTYsMTMgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRU
eXBlTwogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluYyhSZWdpc3RlcklE
KiBzcmNEc3QpCiB7Ci0gICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcEluYzo6
ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsK
ICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdERlYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BEZWM6OmVtaXQodGhpcywgc3Jj
RHN0KTsKKyAgICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFy
eUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqPgogICAgICAgICBlbWl0
QmluYXJ5T3AoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBz
cmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJpbmFyeU9w
OjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMpOworICAgICAgICAgICAgQmluYXJ5
T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcywgbV9jb2RlQmxvY2stPmFkZEJp
bmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlz
aW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw2IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShW
TSYgdm0sIENhbGxGcmFtZSoKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNv
ZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgp
KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxs
VmFsaWQpOwogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VPU1JFbnRyeVRvREZHKCkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw2ICsz
MDksNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAg
ICAgICB0cnVlQ2FsbGVyID8gQXNzZW1ibHlIZWxwZXJzOjpVc2VFeGlzdGluZ1RhZ1JlZ2lzdGVy
Q29udGVudHMgOiBBc3NlbWJseUhlbHBlcnM6OkNvcHlCYXNlbGluZUNhbGxlZVNhdmVkUmVnaXN0
ZXJzRnJvbUJhc2VGcmFtZSwKICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpy
ZWdUMSwgR1BSSW5mbzo6cmVnVDQpOwogCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGlmIHdl
IG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIGJhc2VsaW5lIHBiL21ldGFkYXRhIHJlZ2lzdGVycwog
ICAgICAgICBpZiAoY2FsbGVySXNMTEludCkgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNh
bGxlcik7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpLCBjYWxsZWVT
YXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0
ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSk7CkBAIC00MDQsNiArNDA1LDkgQEAgdm9pZCBhZGp1c3RB
bmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVy
czo6cGNHUFIpOwogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NS
RXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZSB7CisgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5t
ZXRhZGF0YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRhdGFHUFIpOworICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVKSVRD
b25zdGFudFBvb2woKSksIEpJVDo6c19jb25zdGFudHNHUFIpOworCiAgICAgICAgIGNvZGVCbG9j
a0ZvckV4aXQtPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CiAKICAgICAgICAgQnl0ZWNvZGVJ
bmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczMCw2ICs3MzAs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlVGFnR1BS
LCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXpl
KG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJn
cyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJz
ID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAgICAgICAg
ICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEp
OwpAQCAtODg5LDcgKzg5MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChp
c1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
bV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1l
U2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0NSw2ICs3NDUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5j
YWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVHUFIsIERhdGFGb3JtYXRKUyk7CiAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAg
ICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAg
ICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIGFy
Z0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTg5Niw3
ICs4OTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAg
CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkg
ewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZy
YW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNo
dWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5ODUsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmEKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0
ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3Jp
Z2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAg
ICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxT
aXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAg
SlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VHUFIpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsK
ICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAKQEAgLTE0NzQ3
LDcgKzE0NzQ3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAg
ICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5ncHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2pp
dC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJbmRleCk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKSksIGNhbGxTaXRlSW5kZXgpOwog
ICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
MTcsNyArNDMxNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIg
PSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0Y2go
MCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxK
SVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29kZUJs
b2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4
LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCks
IEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5
R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7
CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9
IHRydWU7CkBAIC0xMDE5MSw2ICsxMDE5MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1BbGxvY2F0ZWRBcmdz
OyArK2kpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChW
YWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2Fs
bGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29k
ZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhzZW1hbnRpY05vZGVPcmlnaW4pOwpAQCAtMTAzNDks
MTMgKzEwMzUwLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
LmFyZ3MuYXBwZW5kKHBhcmFtc1sxICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOwogCiAgICAg
ICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bUFyZ3M7CisgICAgICAg
ICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNodWZmbGVE
YXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogCiAgICAgICAg
ICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFk
ZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAg
ICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxG
YXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZd
IHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRh
KHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0
LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICAgICAgfSk7
CkBAIC0xMDY5OCw3ICsxMDcwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
aml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAg
ICAgICAgICAgICB9KTsKQEAgLTEwOTc5LDcgKzEwOTgxLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxs
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1Qw
LCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3b3JraW5nIGNvcHkpCkBAIC00Miwx
NyArNDIsMjggQEAgY2xhc3MgTWV0YWRhdGEKICAgICBkZWYgc3RydWN0KG9wKQogICAgICAgICBy
ZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVs
ZHMpCisgICAgICAgIGRlZiBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGRO
YW1lcykKKyAgICAgICAgICAgIGZpZWxkTmFtZXMubWFwIGRvIHxmaWVsZE5hbWV8CisgICAgICAg
ICAgICAgICAgIiN7cHJlZml4fXN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVsw
XS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisg
ICAgICAgIGVuZAorCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBm
aWVsZE5hbWVzKQogICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAg
ICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAgICAgICAgICAgICAgICAgICIj
e3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1c
biN7cHJlZml4fX07IgorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tj
b252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZp
eH19OyIKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZp
eH0je3R5cGUudG9fc30gbV8je2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmll
bGROYW1lID0gZmllbGQudG9fcworICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2go
ZmllbGROYW1lKQorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1f
I3tmaWVsZE5hbWV9OyIKICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2lu
KCJcbiIpCiAgICAgICAgIGVuZAogCi0gICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAg
ICAgICAgIiwgQGZpZWxkcykKKyAgICAgICAgZmllbGROYW1lcyA9IFtdCisgICAgICAgIHByZWZp
eCA9ICIgICAgICAgICIKKyAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBm
aWVsZHMsIGZpZWxkTmFtZXMpCisgICAgICAgIGZpZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5l
cmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKIAogICAgICAgICBpbml0
cyA9IG5pbAogICAgICAgICBpZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5l
bXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5OCw4ICs2OTgsMTMgQEAgdm9p
ZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVs
cGVyczo6ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwg
R1BSSW5mbzo6cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBH
UFJJbmZvOjpyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9i
amVjdCh2bSwgaW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENh
bGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQor
eworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENh
bGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4
MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE3MTgsNiArMTcxOCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5m
byopOworICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChW
TSYsIENhbGxMaW5rSW5mbyopOwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckND
YWxsKCk7CiAgICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhc2Vs
aW5lSklUQ29kZS5oIgorCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCisjaW5jbHVkZSAiSnVtcFRh
YmxlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK0pJVEFkZElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQor
SklUTXVsSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRT
dWJJQyogTWF0aElDSG9sZGVyOjphZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE5lZ0lD
KiBNYXRoSUNIb2xkZXI6OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisKK3ZvaWQgTWF0aElD
SG9sZGVyOjphZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcikKK3sKKyAgICBtX2FkZElD
cyA9IFdURk1vdmUob3RoZXIubV9hZGRJQ3MpOworICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhl
ci5tX211bElDcyk7CisgICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAg
ICBtX3N1YklDcyA9IFdURk1vdmUob3RoZXIubV9zdWJJQ3MpOworfQorCitCYXNlbGluZUpJVENv
ZGU6OkJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8
SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spCisgICAgOiBEaXJlY3RKSVRDb2RlKFdURk1v
dmUoY29kZSksIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAsIE1h
dGhJQ0hvbGRlcigpCit7IH0KKworQmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKCkK
K3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Jhc2VsaW5lSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgorI2luY2x1ZGUgIkpJVENvZGUu
aCIKKyNpbmNsdWRlICJKSVRDb2RlTWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvL2NsYXNz
IEpJVEFkZElDOworLy9jbGFzcyBKSVRNdWxJQzsKKy8vY2xhc3MgSklUU3ViSUM7CisvL2NsYXNz
IEpJVE5lZ0lDOworY2xhc3MgQmluYXJ5QXJpdGhQcm9maWxlOworY2xhc3MgVW5hcnlBcml0aFBy
b2ZpbGU7CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBTaW1wbGVK
dW1wVGFibGU7CitzdHJ1Y3QgU3RyaW5nSnVtcFRhYmxlOworCitjbGFzcyBNYXRoSUNIb2xkZXIg
eworcHVibGljOgorICAgIHZvaWQgYWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpOwor
ICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRN
dWxJQyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUU3ViSUMqIGFk
ZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJ
QyhVbmFyeUFyaXRoUHJvZmlsZSopOworCisgICAgLyoKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2Ft
ZTxHZW5lcmF0b3IsIEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRBZGRJ
QyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklU
QWRkSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5
cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwg
SklUTXVsR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE11bElDKiBhZGRNYXRoSUMo
QmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRNdWxJQyhwcm9maWxl
KTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVROZWdHZW5lcmF0
b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUTmVnSUMqIGFkZE1hdGhJQyhVbmFyeUFyaXRoUHJv
ZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTmVnSUMocHJvZmlsZSk7IH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUU3ViR2VuZXJhdG9yPjo6dmFsdWU+Ojp0
eXBlPgorICAgIEpJVFN1YklDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxl
KSB7IHJldHVybiBhZGRKSVRTdWJJQyhwcm9maWxlKTsgfQorICAgICovCisKK3ByaXZhdGU6Cisg
ICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOwor
ICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsK
K307CisKK2NsYXNzIEpJVENvbnN0YW50UG9vbCB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29uc3Rh
bnQgPSB1bnNpZ25lZDsKKworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAg
ICBHbG9iYWxPYmplY3QsCisgICAgICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAgU3RydWN0dXJl
U3R1YkluZm8sCisgICAgICAgIEZ1bmN0aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rpb25FeHByLAor
ICAgIH07CisKKyAgICBzdHJ1Y3QgVmFsdWUgeworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoZSBw
b2ludGVyIHBhY2tlZC4KKyAgICAgICAgVHlwZSB0eXBlOworICAgICAgICB2b2lkKiBwYXlsb2Fk
OworICAgIH07CisKKyAgICBKSVRDb25zdGFudFBvb2woKSA9IGRlZmF1bHQ7CisgICAgSklUQ29u
c3RhbnRQb29sKEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQ
b29sJiBvcGVyYXRvcj0oSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKworICAgIENvbnN0
YW50IGFkZChUeXBlIHR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxscHRyKQorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudHMuc2l6ZSgpOworICAgICAgICBtX2NvbnN0
YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBlLCBwYXlsb2FkIH0pOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFu
dHMuc2l6ZSgpOyB9CisgICAgVmFsdWUgYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRzW2ldOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50czsK
K307CisKKworY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1
YmxpYyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIEJhc2VsaW5lSklUQ29kZShDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hl
Y2spOworICAgIH5CYXNlbGluZUpJVENvZGUoKSBvdmVycmlkZTsKKworICAgIEJhZzxVbmxpbmtl
ZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1f
ZXZhbENhbGxMaW5rSW5mb3M7IC8vIE9PUFM6IG1ha2Ugc3VyZSB3ZSB2aXNpdCB0aGVzZSBzb21l
aG93LiBPciBhc3NlcnQgd2UgZG9uJ3QgaGF2ZSB0bywgc2luY2UgdGhleSdyZSB2aXJ0dWFsIGNh
bGxzLgorICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1Yklu
Zm9zOworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVz
OworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzOworICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworICAgIEpJVENvbnN0YW50UG9vbCBt
X2NvbnN0YW50UG9vbDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkocmV2aXNpb24gMjgxODY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHNpemVfdCBCYXNlbGluZUpJVFBsYW46OmNvZGVT
aXplKCkgY29uc3QKIAogQ29tcGlsYXRpb25SZXN1bHQgQmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6
ZSgpCiB7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1h
aW5UaHJlYWQoKTsKKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6
ZU9uTWFpblRocmVhZChtX2NvZGVCbG9jayk7CiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBj
YXNlIENvbXBpbGF0aW9uRmFpbGVkOgogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29k
ZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
ODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFk
b3dDaGlja2VuUHJvbG8KICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12
b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRv
d1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2Fs
bGVlKSkpOwotICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAg
c3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KGNvZGVCbG9jayksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
Y2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBD
Q2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hh
ZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsK
ICAgICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpA
QCAtNzIsNiArNjIsMjggQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5Q
YQogICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9
CiAKKwordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cit2b2lkIENDYWxsSGVscGVy
czo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpT
VmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2Nr
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgc3RvcmVQdHIoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1t
UHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsK
KyAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOworICAgIHN0b3JlUHRy
KHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNr
ZW46OlBhY2tldCwgc2NvcGUpKSk7CisgICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJs
b2NrKSkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIGNhbGxTaXRlSW5kZXgpKSk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVn
cywgR1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFk
b3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30K
Kwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBj
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVC
bG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKIHZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29k
ZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29w
ZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2Ny
aXB0aW9uKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4
NDAsMTQgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9s
YXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRv
cCBvZgogICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQg
bG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJl
ZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcg
c2NvcGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworCitwcml2YXRlOgorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBH
UFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlSW5kZXgpOworcHVibGljOgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
R1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwg
VHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7Cisg
ICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBK
U1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50
ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAg
IHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQs
IEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJ
KHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogdm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVn
aXN0ZXJzKENvZGVCbG9jayogY29kZUJsb2NrKQogeworICAgIHNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyhjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK3ZvaWQgQ2FsbEZy
YW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zKQorewogICAgIFJlZ2lzdGVyU2V0IGNh
bGxlZVNhdmVSZWdpc3RlcnMgeyBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkg
fTsKLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25z
ID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAg
UmVnaXN0ZXJBdE9mZnNldCBlbnRyeSB7IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVE
YXRhLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDEzIEBAIHB1
YmxpYzoKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJnczsKICAgICB1bnNpZ25lZCBudW1M
b2NhbHMgeyBVSU5UX01BWCB9OwogICAgIHVuc2lnbmVkIG51bVBhc3NlZEFyZ3MgeyBVSU5UX01B
WCB9OworICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OyAvLyBPbiBvdXIg
bWFjaGluZSBmcmFtZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVyTWFwPFZhbHVl
UmVjb3Zlcnk+IHJlZ2lzdGVyczsKICAgICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZh
bGlkR1BSUmVnIH07CiAKICAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxv
Y2sqKTsKKyAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCopOwogI2VuZGlmCiAgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJ
KHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgQ2FsbEZyYW1l
U2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYQogICAgIDogbV9qaXQoaml0KQogICAgICwg
bV9vbGRGcmFtZShkYXRhLm51bUxvY2FscyArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lz
dGVycywgbnVsbHB0cikKICAgICAsIG1fbmV3RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIENhbGxG
cmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQotICAgICwgbV9hbGlnbmVkT2xk
RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCi0gICAgICAgICsgcm91
bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpKSkKKyAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJ
blJlZ2lzdGVycyArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLm51bVBhcmFt
ZXRlcnMpKQogICAgICwgbV9hbGlnbmVkTmV3RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6
ZUluUmVnaXN0ZXJzCiAgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRh
dGEuYXJncy5zaXplKCkpKQogICAgICwgbV9mcmFtZURlbHRhKG1fYWxpZ25lZE5ld0ZyYW1lU2l6
ZSAtIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSkKICAgICAsIG1fbG9ja2VkUmVnaXN0ZXJzKFJlZ2lz
dGVyU2V0OjphbGxSZWdpc3RlcnMoKSkKICAgICAsIG1fbnVtUGFzc2VkQXJncyhkYXRhLm51bVBh
c3NlZEFyZ3MpCisgICAgLCBtX251bVBhcmFtZXRlcnMoZGF0YS5udW1QYXJhbWV0ZXJzKQogewog
ICAgIC8vIFdlIGFyZSBhbGxvd2VkIGFsbCB0aGUgdXN1YWwgcmVnaXN0ZXJzLi4uCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsgKQpAQCAtNDIx
LDcgKzQyMSw3IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCBtX25ld0Zy
YW1lQmFzZSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYXJndW1lbnRDb3VudE9LID0KICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbV9uZXdG
cmFtZUJhc2UsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1faml0
LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIobV9udW1QYXJhbWV0ZXJzKSk7CiAgICAgbV9qaXQuYWRkMzIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSAr
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwgbV9uZXdGcmFtZUJhc2UpOwogICAg
IG1faml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCkpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1f
bmV3RnJhbWVCYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3
IEBAIHB1YmxpYzoKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgZGF0YTsKICAgICAgICAg
ZGF0YS5udW1Mb2NhbHMgPSBudW1Mb2NhbHMoKTsKICAgICAgICAgZGF0YS5udW1QYXNzZWRBcmdz
ID0gbV9udW1QYXNzZWRBcmdzOworICAgICAgICBkYXRhLm51bVBhcmFtZXRlcnMgPSBtX251bVBh
cmFtZXRlcnM7CiAgICAgICAgIGRhdGEuY2FsbGVlID0gZ2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSB9KS0+cmVjb3ZlcnkoKTsKICAgICAgICAgZGF0YS5hcmdz
LnJlc2l6ZShhcmdDb3VudCgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdD
b3VudCgpOyArK2kpCkBAIC03OTgsNiArNzk5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBlcmZv
cm1TYWZlV3JpdGVzKCk7CiAgICAgCiAgICAgdW5zaWduZWQgbV9udW1QYXNzZWRBcmdzIHsgVUlO
VF9NQVggfTsKKyAgICB1bnNpZ25lZCBtX251bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgOiBKU0ludGVy
ZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgbnVsbHB0
cikKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhj
b2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCiAgICAgLCBt
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAgLTc3LDYgKzc3LDkgQEAgSklUOjpKSVQo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmls
aW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25zdGFudCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7CisgICAgbV9w
cm9maWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrID0g
Y29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtOTAs
OCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgICAg
ICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0gICAgCi0gICAgc2tpcE9w
dGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpl
eGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2Nv
ZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIHNraXBPcHRp
bWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhl
Y3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJv
bUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50
cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNiwyMSBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRl
KFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9T
ZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRv
U2V0KQogeworICAgIC8vIE9PUFM6IFRha2UgYSBib29sZWFuIG9yIHNvbWV0aGluZyBzYXlpbmcg
aWYgd2UgY2FuIGJlIG51bGwuCisgICAgYXV0byBvayA9IGJyYW5jaFRlc3RQdHIoWmVybywgcG9p
bnRlclRvU2V0KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHBv
aW50ZXJUb1NldCwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSk7CisgICAgb2subGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQordm9pZCBKSVQ6OmVt
aXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRj
aEdQUikKIHsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBl
ID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPnZhclJlYWRPbmx5V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFyUmVhZE9u
bHlXYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4
KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCkBAIC0xMjksNyArMTM4LDcgQEAgdm9pZCBKSVQ6
OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3RlciwgcmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCByZWdUMCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlz
KTsKQEAgLTE4MSwyMSArMTkwLDQxIEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0
IEluc3RydWMKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1
dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
OworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZz
ZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0
YWJsZSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHQsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpLCByZXN1bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAg
ICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2Nr
Rm9yQ29uc3RydWN0KCkpLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwo
KSksIHJlc3VsdCk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlOjpvZmZzZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIocmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworfQor
CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2Nr
LCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJs
b2NrLCAiXG4iKTsKICAgICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFz
c2VydEFyZ3VtZW50Q291bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291
bnQgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3Ry
dWN0aW9ucyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2ln
bmVkIGluc3RydWN0aW9uQ291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5zaXplKCk7CiAKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9
IG1fY29kZUJsb2NrLT52bSgpOwogICAgIEJ5dGVjb2RlSW5kZXggc3RhcnRCeXRlY29kZUluZGV4
KDApOworCisgICAgLy8gT09QUzogTWF5YmUgb25seSBkbyB0aGlzIGlmIHdlIGRpc2FibGUgc2hh
cmluZyBzb21laG93PworICAgIC8qCisgICAgVk0mIHZtID0gbV91bmxpbmtlZENvZGVCbG9jay0+
dm0oKTsKICAgICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4ICYmIChtX2NvZGVCbG9j
ay0+aW5oZXJpdHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0
czxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7CiAgICAgICAgIC8vIFdlIGNhbiBvbmx5
IGRvIHRoaXMgb3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFtQ29kZUJsb2Nr
J3MgZXhhY3RseSBvbmNlLgogICAgICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBiZSBp
bnZhbGlkIG90aGVyd2lzZS4gV2hlbiB0aGUgTExJbnQgZGV0ZXJtaW5lcyBpdCB3YW50cyB0bwpA
QCAtMjM2LDYgKzI2NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKyAgICAqLwogCiAgICAgbV9ieXRlY29kZUNv
dW50SGF2aW5nU2xvd0Nhc2UgPSAwOwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsg
KSB7CkBAIC0yNzgsOCArMzA4LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4
ZWN1dGlvbigpKSkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVC
bG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7
CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1l
Kj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5
dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1Bv
aW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9CkBAIC01MjcsNyArNTU3LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7
CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAg
ICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV91bmxpbmtlZENvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dM
bigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgIiwgbV9ieXRlY29kZUluZGV4
LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgpKTsKQEAgLTU0NSw4ICs1NzUsOCBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAg
ICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAg
ICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygp
OwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0g
U0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZw
KCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC02
NzQsNTUgKzcwNCw1NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2Vu
ZGlmCiB9CiAKK3ZvaWQgSklUOjplbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9v
bFJlZ2lzdGVycygpCit7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21ldGFkYXRhR1BSKTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29u
c3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7Cit9CisKK3ZvaWQgSklUOjplbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCkKK3sKKyAgICBCYXNlOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZS
ZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
Cit9CisKIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9
IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICAvLyBPT1BTOiBNYXliZSB0aGlz
IHNob3VsZCBiZSBkb25lIG9uIHVubGlua2VkIGNvZGUgYmxvY2s/CisgICAgREZHOjpDYXBhYmls
aXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsK
ICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAg
ICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9y
SW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6
OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwot
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91
bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQotICAgIAotICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNl
IEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1bGVDb2RlOgotICAgIGNhc2UgRXZhbENvZGU6Ci0g
ICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAgICAgICAgLy8gV2UgY291bGQg
aGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5s
aW5lYWJsZSBjYWxsLgotICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9u
LgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5s
aW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwotICAg
ICAgICBicmVhazsKLSAgICB9CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVu
c3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1w
bGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxl
cygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEo
bG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1w
VGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
cygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRj
aEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zd2l0
Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYg
KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3Rv
cjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
dHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYm
IE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1f
ZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsK
KyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJv
ZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIE9PUFM6IGJ1aWxkIGEgZGlzYXNzZW1ibGVyIG9mZiB1
bmxpbmtlZCBjb2RlIGJsb2NrCisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxK
SVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KICAgICBpZiAoVU5M
SUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBPT1BTOiBi
dWlsZCBwcm9maWxlciBkaXNhc3NlbWJsZXIgb2ZmIHVubGlua2VkIGNvZGUgYmxvY2sKICAgICAg
ICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpD
b21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9jayksCisgICAgICAgICAgICAgICAgbV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVC
bG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1f
Y29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRC
eXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0
ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CkBAIC03NDIsMTEgKzc3
MywxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAg
IG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAg
ICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJl
Z2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVU
b3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9m
ZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzU3LDE2
ICs3ODksMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAg
IG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZl
Q2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygp
OworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7
CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7
CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVt
aXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewor
ICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV91bmxpbmtlZENvZGVCbG9j
ay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4
ZWRWZWN0b3I8VmFsdWVQcm9maWxlPjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAg
ICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBh
IGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdz
IGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVt
bXkgdmFsdWUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9y
KCkgJiYgIWFyZ3VtZW50KQorICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNzc3LDEyICs4MTMsMTIgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQz
MihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAg
ICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIo
KSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fY29k
ZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3MpOwor
ICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwgYXJn
dW1lbnQgKiBzaXplb2YoVmFsdWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJz
dEJ1Y2tldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
UkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVCbG9jay0+
aml0VHlwZSgpKSk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAgICAgIG1f
dm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhp
cyk7CkBAIC03OTksMjQgKzgzNSwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluCiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBp
ZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1f
Y29kZUJsb2NrKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2ssIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIHJlZ1Qw
KTsKIAogICAgIC8vIElmIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciBy
ZXF1aXJlIGFyaXR5IGZpeHVwLgotICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2Rl
QmxvY2stPm1fbnVtUGFyYW1ldGVycyAhPSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5
cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAgYm9vbCBy
ZXF1aXJlc0FyaXR5Rml4dXAgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkg
IT0gMTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxh
YmVsKCk7Ci0gICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9z
aG91bGRBbHdheXNCZUlubGluZWQpOworCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7
Ci0gICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xv
Z3VlKHJlZ1QwKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAKICAgICAg
ICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpLCByZWdUMSk7Ci0gICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJlZ2luTGFi
ZWwsIHRoaXMpOworICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGJlZ2lu
TGFiZWwsIHRoaXMpOwogCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
MCk7CiAKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2RlQmxvY2st
PmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRp
b25DYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCBhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb24obV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3Bl
cmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBhcmd1
bWVudEdQUjApOwogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAg
ICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywg
cmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTgzOSw3ICs4Nzgs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6
OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVf
cHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9
IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV91bmxp
bmtlZENvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkp
OwogICAgIGxpbmsoKTsKIH0KIApAQCAtODU4LDggKzg5Nyw4IEBAIHZvaWQgSklUOjpsaW5rKCkK
ICAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewogICAgICAgICBjYXNlIFN3aXRjaFJlY29y
ZDo6SW1tZWRpYXRlOgogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyOiB7Ci0g
ICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAg
ICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAg
ICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dp
dGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0
XSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRUYWJsZS5t
X2JyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBv
ZmZzZXQgPSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3MSw4ICs5MTAs
OCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3aXRjaFJl
Y29yZDo6U3RyaW5nOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
ICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1
bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRl
Y29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKGF1
dG8mIGxvY2F0aW9uIDogdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hPZmZzZXQ7
CkBAIC05MDYsMzIgKzk0NSwzNSBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCByZWNvcmQuY2FsbGVlKTsKICAgICB9CiAKLSAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9kZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2lu
QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlWYWxz
LCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbnN0YW5jZU9mcywg
cGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5kQWNj
ZXNzZXMsIHBhdGNoQnVmZmVyKTsKKyAgICBhdXRvIGZpbmFsaXplSUNzID0gWyZdIChhdXRvJiBn
ZW5lcmF0b3JzKSB7CisgICAgICAgIGZvciAoYXV0byYgZ2VuIDogZ2VuZXJhdG9ycykgeworICAg
ICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+c3RhcnQgPSBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zdGFydCk7CisgICAgICAgICAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KGdlbi5tX2RvbmUpOworICAgICAgICAgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc2xvd1BhdGhCZWdpbik7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkcyk7CisgICAgZmluYWxpemVJ
Q3MobV9nZXRCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHNXaXRoVGhpcyk7Cisg
ICAgZmluYWxpemVJQ3MobV9wdXRCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9wdXRCeVZhbHMp
OworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlW
YWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1faW5C
eVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5zdGFuY2VPZnMpOworICAgIGZpbmFsaXplSUNz
KG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMpOwogCiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlvbklu
Zm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZv
ID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87Ci0gICAgICAgIGluZm8uc2V0Q29kZUxv
Y2F0aW9ucygKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0
clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQYXRoU3RhcnQpLAotICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxv
Y2F0aW9uKSk7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0
aW9uSW5mby51bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24g
PSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5m
by5kb25lTG9jYXRpb24pOwogICAgIH0KIAotICAgIHsKLSAgICAgICAgSklUQ29kZU1hcEJ1aWxk
ZXIgaml0Q29kZU1hcEJ1aWxkZXI7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNl
dCkgewotICAgICAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQot
ICAgICAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5
dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xh
YmVsc1tieXRlY29kZU9mZnNldF0pKTsKLSAgICAgICAgfQotICAgICAgICBtX2NvZGVCbG9jay0+
c2V0SklUQ29kZU1hcChqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpKTsKKyAgICBKSVRDb2Rl
TWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKKyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVP
ZmZzZXQpIHsKKyAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQor
ICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0XSkpOwogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpk
dW1wRGlzYXNzZW1ibHkoKSkpIHsKQEAgLTk0MCwyNiArOTgyLDM3IEBAIHZvaWQgSklUOjpsaW5r
KCkKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkobV9jb21waWxhdGlvbikpIHsKKyAgICAgICAg
Ly8gT09QUzogbWFrZSBieXRlY29kZSBwcm9maWxlciBrbm93IGFib3V0IHVubGlua2VkIENCPwog
ICAgICAgICBpZiAoT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpCiAg
ICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9u
LmdldCgpLCBwYXRjaEJ1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
ci0+YWRkQ29tcGlsYXRpb24obV9jb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAgICAgICAg
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2ZpbGVkQ29k
ZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2RlT3JpZ2lu
TWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlciksIHBhdGNoQnVmZmVyKTsKICAgICAKKyAgICAvLyBPT1BTOiBNYWtlIGEg
dmVyc2lvbiBvZiBDb2RlQmxvY2tXaXRoSklUVHlwZSB0aGF0IGtub3dzIGFib3V0IFVubGlua2Vk
Q29kZUJsb2NrLgogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVf
Q09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNl
bGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2Vs
aW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3By
b2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAg
IG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0
eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29kZSA9IGFkb3B0UmVm
KCpuZXcgQmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2spKTsKKworICAgIG1f
aml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gV1RGTW92ZShtX3VubGlua2VkQ2FsbHMpOworICAg
IG1faml0Q29kZS0+bV9ldmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJ
bmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0gV1RGTW92ZShtX3Vu
bGlua2VkU3R1YkluZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdU
Rk1vdmUobV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcyA9IFdURk1vdmUobV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2pp
dENvZGUtPm1faml0Q29kZU1hcCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCk7CisgICAg
bV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNzKTsKKyAgICBtX2ppdENvZGUtPm1fY29u
c3RhbnRQb29sID0gV1RGTW92ZShtX2NvbnN0YW50UG9vbCk7CiAKICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVw
IGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCkt
PnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCku
dW50YWdnZWRQdHIoKSk7CisgICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9y
ICVwIGF0IFslcCwgJXApLlxuIiwgbV91bmxpbmtlZENvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFi
bGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9y
eSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpm
aW5hbGl6ZU9uTWFpblRocmVhZCgpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25N
YWluVGhyZWFkKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFp
c0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogCkBAIC05NjgsMjUgKzEwMjEsMjEgQEAgQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5rQnVmZmVyLT5ydW5N
YWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MoKTsKIAotICAgIHsKLSAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgbV9jb2RlQmxv
Y2stPnNocmlua1RvRml0KGxvY2tlciwgQ29kZUJsb2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5r
KTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1i
ZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgewotICAgICAgICBIYW5kbGVySW5mbyYgaGFu
ZGxlciA9IG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOwotICAgICAgICAvLyBGSVhN
RTogPHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KLSAgICAgICAgaGFuZGxlci5uYXRpdmVDb2Rl
ID0gbV9jb2RlQmxvY2stPmppdENvZGVNYXAoKS5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50
YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOwotICAgIH0KKyAgICAv
LyBPT1BTOiBEb24ndCB0aGluayB0aGlzIHNocmluayBpcyByZWFsbHkgZG9pbmcgYW55dGhpbmcg
YW55bW9yZS4gVmVyaWZ5LgorICAgIC8veworICAgIC8vICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgLy8gICAgbV9jb2RlQmxvY2stPnNocmlu
a1RvRml0KGxvY2tlciwgQ29kZUJsb2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5rKTsKKyAgICAv
L30KIAorICAgIC8vIE9PUFM6IG1fcGNUb0NvZGVPcmlnaW5NYXAgc2hvdWxkIGxpdmUgb24gQmFz
ZWxpbmVKSVRDb2RlIGZvciBiYXNlbGluZSBjb2RlYmxvY2tzLgogICAgIGlmIChtX3BjVG9Db2Rl
T3JpZ2luTWFwKQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoV1RG
TW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKSk7CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2st
PnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOwogCiAg
ICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5h
ZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAg
ICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgp
KSk7CisgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zU2l6ZSgpKSk7CiAKLSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENv
ZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJh
c2VsaW5lQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4gQ29t
cGlsYXRpb25TdWNjZXNzZnVsOwogfQpAQCAtOTk4LDExICsxMDQ3LDExIEBAIHNpemVfdCBKSVQ6
OmNvZGVTaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAK
LUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGRvTWFp
blRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0
aG91dEZpbmFsaXppbmcoZWZmb3J0KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQo
KTsKKyAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxOCArMTA5
MSwyOCBAQCB2b2lkIEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAg
IG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBh
cmluZyBmb3IgSklUIGNvbXBpbGF0aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFt
ZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkp
ID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAog
ICAgIHJldHVybiByb3VuZExvY2FsUmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChj
b2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGxJblJlZ2lzdGVycyk7CiB9CiAKLWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENv
ZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBmcmFtZVJlZ2lzdGVyQ291bnRGb3Io
Y29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKworaW50IEpJVDo6c3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2sp
IC0gMSkub2Zmc2V0KCk7CiB9CiAKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNv
ZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKIEhhc2hNYXA8Q1N0cmluZywgU2Vj
b25kcz4gSklUOjpjb21waWxlVGltZVN0YXRzKCkKIHsKICAgICBIYXNoTWFwPENTdHJpbmcsIFNl
Y29uZHM+IHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjgx
ODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNiArMzcsNyBAQAogCiAjZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwgZXhw
ZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9mZnNl
dCBcIiVzXCIgc2hvdWxkIGJlICVkLCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19jYXN0
PGludD4oZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCisjaW5jbHVkZSAi
QmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29t
bW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCkBAIC00NCw2ICs0
NSw3IEBACiAjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCisjaW5jbHVkZSAiTExJbnRE
YXRhLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQ
b2ludGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsxNTEsMTQg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25J
bmZvIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247Ci0gICAgICAgIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5r
ZWRDYWxsTGlua0luZm87CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExp
bmtJbmZvQ29uc3RhbnQ7CiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3
Q2FsbGVlRnVuY3Rpb24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBw
cml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJ
VCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93
UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKICAgICAgICAgZnJp
ZW5kIGNsYXNzIEpJVFRodW5rczsKQEAgLTE3MSw2ICsxNzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5v
dCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgogICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCisgICAgICAgIHVzaW5n
IEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwg
Q29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVP
ZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMTc4LDI4ICsx
ODIsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0lu
dGVyZmFjZUpJVDo6dm0oKTsgfQogCiAgICAgICAgIHZvaWQgY29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVz
dWx0IGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZp
bmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayopOwogICAgICAgICBzaXplX3QgY29kZVNpemUo
KSBjb25zdDsKIAogICAgICAgICB2b2lkIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29t
cGlsZSgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBp
bGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9m
ZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBKSVQodm0s
IGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGNvZGVCbG9jaywgZWZm
b3J0KTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVy
Q291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZy
YW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIGludCBzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIGlu
dCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0
cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBp
bGVUaW1lKCk7CiAKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0YUdQ
UiA9IExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFI7CisgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNfY29uc3RhbnRzR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFI7
CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7CiAgICAgICAgIHZvaWQgcHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKICAgICAgICAgdm9pZCBsaW5rKCk7Ci0gICAgICAgIENv
bXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAg
ICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklUQ29t
cGlsYXRpb25FZmZvcnQpOwogCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNv
ZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwo
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2ICsy
MzIsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkUHRyRnJvbU1ldGFk
YXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFk
YXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0YWRh
dGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2
b2lkIHN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2
b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgbG9hZENvbnN0
YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZENvZGVC
bG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGVt
aXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOwor
CiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAgICAg
ICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7
CkBAIC0yNTgsMTYgKzI5MywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFi
bGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYg
T3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5m
b0NvbnN0YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3Rk
OjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFy
Z3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8
fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxM
aW5rSW5mb0NvbnN0YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAg
ICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0
IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwogICAgICAgICB2b2lk
IGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtMjg3LDE0ICszMjIsMTUgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQg
ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdy
aXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lcik7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpOwogCiAg
ICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJl
Z1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4K
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJl
Zyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIC8vdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7CisgICAgICAgIC8vdm9p
ZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShjb25zdCBCeXRlY29kZSYsIEdQUlJlZyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBK
U1ZhbHVlUmVncyk7CiAjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJl
Z3MpOwpAQCAtMzA3LDYgKzM0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lk
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5
UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJh
eVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2Ny
YXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBwdHJk
aWZmX3QsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3Ap
OwpAQCAtNTkyLDcgKzYzMiw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNiwxNCArNjY1LDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBp
c1Vuc2lnbmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJy
YW5kLCBBY2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVh
bFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVT
bG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5j
RXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBl
bWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhcklu
amVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAg
ICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNo
R1BSKTsKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1
bnNpZ25lZCBkZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBV
U0UoSlNWQUxVRTY0KQpAQCAtNjQ1LDcgKzY4NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlm
CiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1
aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9p
bnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1Nl
dCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRl
clRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZv
aWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9p
ZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NCw2ICs2
OTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAg
Ym9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENv
bnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENv
bnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3Rh
bnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC02OTUsMjYgKzczNSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJl
c29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVW
YXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFU
T1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9y
KFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX0dFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgot
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwot
Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNj
b3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBN
b2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFu
IHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2ZWRDbG9zdXJlVmFyIGJlY2F1c2Ug
d2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29wZS4KLSAgICAgICAg
ICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNkZWZpbmUgREVDTEFSRV9SRVNPTFZF
X1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5
cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFS
RV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVz
b2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1l
KTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mKTsK
QEAgLTc1OSwxMCArNzgxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwog
ICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFk
YXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5
dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsK
ICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3Bl
cmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjAsMjAg
Kzg0MiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7
CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+
CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46
Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAg
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlw
ZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwg
dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVz
cyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVz
cyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAg
ewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9uVHlw
ZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRyZXNz
KEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9m
ZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE4LDI1ICs5NDAsMjAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9w
dGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5C
ZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7
IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRF
bWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVy
IHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNo
IGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgZW1pdE1h
dGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAgICAgICB2
b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBv
cnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1l
cygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBm
cm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8gYmUg
Y29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0
byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNh
bWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNvcGll
ZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmlu
YXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmlu
YXJ5T3ApOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjMs
OSArOTgwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5
PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsK
IAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZv
czsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGll
ZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAg
ICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTk5OSwxMSArMTAxMywyNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBJbnN0cnVjdGlvbiosIFVuaXF1ZVJl
ZjxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+PiBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9u
U3RhdGU7CiAKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwotICAgICAgICBib29sIG1f
Y2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmls
aW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsK
IAotICAgICAgICBSZWZQdHI8RGlyZWN0SklUQ29kZT4gbV9qaXRDb2RlOworICAgICAgICBDb2Rl
QmxvY2sqIG1fcHJvZmlsZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFVubGlua2Vk
Q29kZUJsb2NrKiBtX3VubGlua2VkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworCisgICAgICAgIE1h
dGhJQ0hvbGRlciBtX21hdGhJQ3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1f
aml0Q29kZTsKKworICAgICAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAg
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5r
ZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5m
bz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1
bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdK
dW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBzdHJ1Y3QgTm90
QUNvZGVCbG9jayB7IH0gbV9jb2RlQmxvY2s7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJl
dmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIo
b3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewogICAgICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1
bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRH
UFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMy
MCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAg
ICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0
ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOworICAg
ICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0
TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91Ymxl
T3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2Nv
ZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxl
KGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubV9wcm9maWxlSW5kZXgpOworICAg
IEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUp
OwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdh
dGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9w
ZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAg
ICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAt
ODk5LDggKzkwNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QK
IAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFy
aXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91
bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BBZGQ+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0
aElDcy5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BB
ZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjpl
bWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNv
ZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUp
OwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9h
ZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3Jh
dGNoR1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOwor
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFk
ZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAx
NSwxMCArMTAyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElD
CiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxl
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxl
KTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmls
ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5v
blByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3Jh
dGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xv
d0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEz
ICsxMDYyLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNl
bmRpZgogCiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJp
dGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRo
UHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVp
bnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVp
bnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywg
YXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlv
biksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxF
KE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIw
LDEzICsxMTI4LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMK
ICNlbmRpZgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMt
PmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChh
cml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNl
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nh
c3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBy
ZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpA
QCAtMTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0
aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwog
ICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2st
PmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1fcHJv
ZmlsZUluZGV4KTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1f
b3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0
X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11
bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2st
PmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1fcHJv
ZmlsZUluZGV4KTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRkSklUTXVsSUMo
YXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0
cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11
bCk7CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNv
bnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRTdWJJQyog
c3ViSUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzMiw3ICsyMzIsNyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2
CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBz
dG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxs
ZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgcmVnVDEsIHJlZ1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAg
LTMyNCw3ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlv
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBl
bWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93
Q2FzZShjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2lu
Y2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxs
LmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJl
c3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
ZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmly
dHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4IEBAIHN0ZDo6ZW5h
YmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bj
b2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0
ZWNvZGUsIENhbGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBi
eXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBjaGVj
a3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJbmNs
dWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNr
cG9pbnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0YWNr
T2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKKwogICAg
IGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsK
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJP
ZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1Qw
KTsKICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qw
KTsKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVj
a3BvaW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMy
VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2Fs
bExpbmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSAr
IEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBk
b25lLmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0ZDo6ZW5hYmxlX2lm
X3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQg
PT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUs
IENhbGxMaW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQog
ewogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBA
IC05MSw3ICs5Miw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QK
ICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1
bWVudHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZy
YW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVSZWdp
c3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwor
ICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVl
UmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmly
c3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywg
cmV0dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJVDo6Y29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVy
YXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNldHVw
T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJhdGlv
bihzZXR1cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVn
VDMsIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3Vu
dC4KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5
bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJy
YW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFk
ZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25zdGFu
dChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSks
IHJlZ1QzKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJl
Z1QyKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9m
ZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dlc3Qu
bGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywxNiAr
MTMxLDE2IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxhdGU8
PgogYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkK
IHsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAg
IHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNh
bGxlckZyYW1lT2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdp
c3RlciwgYXJndW1lbnRHUFIxKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRk
cmVzcyhhcmd1bWVudEdQUjEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91
bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwg
cmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDApKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJldHVyblZhbHVlR1BSKSk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29k
ZSk7CiAKQEAgLTE0OCw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGlu
Zm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQo
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExp
bmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNv
ZGUubV9hcmd2OwpAQCAtMTU2LDQzICsxNjAsNDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQg
KiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXRWaXJ0dWFs
Q2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0
TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBpbmZvKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRl
Y29kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6OmNvbXBpbGVUYWls
Q2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQoteworYm9vbCBKSVQ6OmNv
bXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQs
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRl
bXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0
ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiti
b29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxp
bmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0gICAgQ2FsbEZy
YW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJn
cyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9
IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9
CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9
IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZsZURhdGEtPm51
bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhcmFt
ZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CisgICAgc2h1ZmZs
ZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Cisg
ICAgc2h1ZmZsZURhdGEtPm51bUxvY2FscyA9CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURh
dGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICBzaHVmZmxlRGF0YS0+YXJncy5y
ZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0
ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAg
ICAgIHNodWZmbGVEYXRhLT5hcmdzW2ldID0KICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluSlNTdGFjaygKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAg
RGF0YUZvcm1hdEpTKTsKICAgICB9Ci0gICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAg
VmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURh
dGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0g
VmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAgc2h1ZmZsZURh
dGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhz
ID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
KnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3Rh
bnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMg
PSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwg
cmVnVDIsIFsmXSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURh
dGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQ
YXRocyk7CisKKyAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFt
ZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2Nh
dGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0yMTgsMTQgKzIyNiwy
NSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0g
Q2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVy
IHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLwotICAgIENh
bGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxf
ZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwg
aW5mbyk7CisKKyAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBp
ZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKSB7CisgICAgICAgIGluZm8gPSBtX3VubGlua2Vk
Q2FsbHMuYWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihv
cGNvZGVJRCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZvKTsKKworICAgICAgICBBU1NF
UlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Cisg
ICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygp
KTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS51bmxp
bmtlZENhbGxMaW5rSW5mbyA9IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3RhbnQ7Cisg
ICAgfQorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQpOwogCiAg
ICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3
aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRlY29kZUluZGV4ID0g
bV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQzMl90IGxv
Y2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOworICAgIHVp
bnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRz
KCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVzcyhjYWxs
RnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBj
YWxsZWUuCkBAIC0yMzQsMTYgKzI1MywxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25z
dCBJbnN0cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNh
bGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxs
VHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAgaWYgKGNvbXBpbGVU
YWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQorICAgIGlmIChjb21w
aWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3Rh
bnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCBy
ZWdUMik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAgICBhdXRvIHNs
b3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1Bh
dGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVn
VDAsIHJlZ1QyLCBbJl0gewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
ICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CiAgICAgICAgIH0pOwpA
QCAtMjUzLDEzICsyNjgsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3RpbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBzbG93UGF0aHMgPSBpbmZv
LT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Olllcyk7CisgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXREYXRhSUNG
YXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyKTsKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxh
YmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwog
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjczLDIwICsyODgs
MjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMyk7CisgICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0
aGlzKTsKKyAgICBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgqbV92bSwgKnRoaXMs
IHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9t
VGFpbENhbGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKQEAgLTM5NSwxNyArNDEwLDMwIEBAIHZvaWQg
SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KIAogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKICAgICAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworCisgICAgbW92ZShyZWdUMCwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1Qx
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXN1bHRHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9
CkBAIC00MTYsMTAgKzQ0NCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVu
KGNvbnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0
aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
Ci0gICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGl0ZXJhdG9yR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBMaXN0IG5vdE9iamVj
dDsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyYXRvckdQUikpOwog
ICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0b3JHUFIpKTsKQEAg
LTQzMiwxOSArNDU4LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNv
bnMKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkg
ewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
PGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyYXRvckdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgbW92ZShpdGVy
YXRvckdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIAogICAgIGF1
dG8gZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0
b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRvbmUubGluayh0aGlz
KTsKIH0KQEAgLTQ1Miw3ICs0NzYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
b3Blbihjb25zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wSXRlcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewog
ICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNhc2UgTmFy
cm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC00NzAsNTAgKzQ5
Myw3NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgSnVt
cCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJp
YykpKTsKIAogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgb3I4KFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIEFic29sdXRl
QWRkcmVzcygmbWV0YWRhdGEubV9pdGVyYXRpb25NZXRhZGF0YS5zZWVuTW9kZXMpKTsKKyAgICBs
b2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9m
U2Vlbk1vZGVzKCksIHJlZ1QwKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1
aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIHJlZ1QwKTsKKyAgICBzdG9yZThUb01l
dGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRP
Zkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9mU2Vl
bk1vZGVzKCkpOwogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9u
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7
CiAgICAgLy8gY2FsbCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkgaW4gcmVnVDAK
IAotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BS
ID0gcmVnVDI7Ci0gICAgR1BSUmVnIGRvbmVHUFIgPSByZWdUMTsKLSAgICAvLyBpdGVyUmVzdWx0
R1BSIHdpbGwgZ2V0IHRyYXNoZWQgYnkgdGhlIGZpcnN0IGdldCBieSBpZCBiZWxvdy4KLSAgICBt
b3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpz
Y3JhdGNoOworICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKIAor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0OwogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJS
ZXN1bHRHUFIpOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVH
UFIgPT0gYmFzZUdQUik7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIpOwogCiAgICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRk
KHZhbHVlR1BSKTsKKyAgICAgICAgcHJlc2VydmVkUmVncy5hZGQoaXRlckNhbGxSZXN1bHRHUFIp
OwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHBy
ZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1Zh
bHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHJlZ1QzLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBw
cmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzdHViSW5mb0dQUiwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyBk
b25lR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1Zh
bHVlUmVncyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQo
KTsKICAgICB9CiAKLQogICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7Ci0g
ICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdpc3RlclNldCB1c2Vk
UmVnaXN0ZXJzKGRvbmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxsb2NhdG9yLmFs
bG9jYXRlU2NyYXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25l
ID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGdsb2JhbEdQUik7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJ
ZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2Jh
bEdQUik7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtb3ZlKGl0ZXJDYWxs
UmVzdWx0R1BSLCBiYXNlR1BSKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQsIEFjY2Vzc1R5cGU6OkdldEJ5
SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1
ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRHUFIpOwogCiAgICAg
ICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01MjcsNTkgKzU3Nyw1NSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgp
KTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQ
UiA9IHJlZ1QyOwogCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAgIEp1
bXBMaXN0IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENl
bGwoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90
Q2VsbChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBp
ZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCk7CiAgICAgICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgICAg
IAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBub3RP
YmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAg
bm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyQ2FsbFJlc3VsdEdQUikpOwog
Ci0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkb25l
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLQotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGRvbmVWUmVnLCByZWdUMSk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0
R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3Vt
ZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9u
ZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7CisKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVW
UmVnLCBkb25lR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9y
Q2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVj
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKICAg
ICB9CiAKICAgICB7ICAgCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgICAgICBH
UFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpOwogICAgICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAg
ICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAgIENhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
IHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVz
dWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVu
dEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAgICAgfQot
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKIAorCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogbmFtZXNwYWNlIERGRyB7CkBAIC0xNTksMTAgKzE2MCwxMCBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgYm9vbCB1c2VEYXRhSUMoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKLSAg
ICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBPcHRpb25zOjp1c2VEYXRh
SUNJbk9wdGltaXppbmdKSVQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAy
ODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNhY2hl
YWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKQEAgLTQ2LDEwICs0Nyw5IEBA
IHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmYKIEpJVElubGluZUNhY2hl
R2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNl
dCYgdXNlZFJlZ2lzdGVycykKLSAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAsIG1f
aml0VHlwZShqaXRUeXBlKQorICAgIDogbV9qaXRUeXBlKGppdFR5cGUpCiB7Ci0gICAgbV9zdHVi
SW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUs
IGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5mbyA9IGNvZGVC
bG9jayA/IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBn
YXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2FsbFNp
dGU7CiAKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyczsKQEAg
LTU5LDcgKzU5LDYgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAg
ICAgTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoLCBDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpCiB7CiAgICAgbV9zdHViSW5mby0+
c3RhcnQgPSBzdGFydDsKLQogICAgIG1fc3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IGZhc3RQYXRo
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obV9kb25lKTsKIAogICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCkBAIC02Nyw2ICs2NiwxNSBAQCB2b2lkIEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0
TG9jYXRpb24gPSBzbG93UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3Ns
b3dQYXRoQmVnaW4pOwogfQogCit2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpnZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBtX3N0YXJ0ID0gaml0Lmxh
YmVsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkp
OworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBqaXQu
Y2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICBtX2RvbmUg
PSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwK
ICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTExMCw3ICsxMTgsNyBA
QCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yCiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNW
YWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
KQogICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4s
IGNhbGxTaXRlLCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1Yklu
Zm9HUFIpCi0gICAgLCBtX2lzTGVuZ3RoQWNjZXNzKHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2Rl
QmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAgICAsIG1faXNMZW5n
dGhBY2Nlc3MoY29kZUJsb2NrICYmIHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZt
KCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChi
YXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZp
c2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMTQgQEAgbmFtZXNwYWNl
IEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsK
IGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwor
c3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlw
ZSA6IGludDhfdDsKIGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKK3N0cnVjdCBCYXNl
bGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkg
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQ
UkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJ
bmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBi
YXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQg
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBH
UFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJl
Z2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVn
VDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsK
KyAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0
aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgorICAgIHN0YXRpY19h
c3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpyZXN1bHQpOworICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMiA9IEdQUkluZm86OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gzID0gR1BSSW5mbzo6cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUkluZm86OmFy
Z3VtZW50R1BSMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUklu
Zm86OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9
IEdQUkluZm86Om5vbkFyZ0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7
CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJh
c2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0g
R1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQ
UkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0
IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
dGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlJZFJl
Z2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworfTsKKworc3RydWN0IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZv
OjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6
cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBwcm9maWxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJyYW5kID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvciB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0K
QEAgLTYyLDE1ICsxNjUsMjEgQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAg
IExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5r
QnVmZmVyLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4g
c3RhcnQpOwotICAgIAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
SklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxw
dHIgfTsKKyAgICB1bnNpZ25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBD
b2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVj
dHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwotICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIG1fc2xvd1BhdGhDYWxsOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1Bh
dGhDYWxsOyAvLyBPT1BTOiBtYWtlIHJlcG9ydENhbGwgcGFzcyBzb21ldGhpbmcgaW4gd2UgY2Fu
IHVzZSBmb3IgdGhlIG5vbi1DVEkgdGh1bmtzIGJ1aWxkcy4gCiB9OwogCiBjbGFzcyBKSVRCeUlk
R2VuZXJhdG9yIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTk4LDcgKzIw
Nyw3IEBAIHByb3RlY3RlZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJl
Z3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworcHVibGlj
OgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTMy
LDggKzI0MSw4IEBAIHB1YmxpYzoKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0
OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlw
ZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdp
c3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpT
VmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01B
TW9kZSwgUHV0S2luZCk7CisgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFi
bGVJZGVudGlmaWVyLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1
ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQp
OwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogICAg
IApAQCAtMTYzLDExICsyNzIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7
CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1w
OwogfTsKIApAQCAtMTkxLDggKzI5OCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVG
YXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xv
d1BhdGhKdW1wOwogfTsKIApAQCAtMjE2LDggKzMyMSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVK
dW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjQxLDggKzM0NCw2IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgot
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQ
YXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjc3LDggKzM3OCw2IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVy
LCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOwogCi1wcml2YXRlOgotICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVK
dW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzAyLDExICs0MDEsOSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZh
dGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0Owog
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMzAsOCArNDI3LDYgQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYp
OwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MTg2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSwxMyArMzUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAg
cmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3Vi
bGUoKTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNEb3VibGUoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29u
c3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+
Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlm
ICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAv
LyBPT1BTOiBmaW5kIGEgd2F5IHRvIGFzc2VydCB0aGF0IGFsbCBsaW5rIHRpbWUgY29uc3RhbnRz
IGFyZSBjZWxscy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVl
IEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNT
RVJUKHNyYy5pc0NvbnN0YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoc3JjKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjo6TGlua1RpbWVDb25zdGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdl
dENvbnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRU
b0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkK
QEAgLTE1NiwzNiArMTgxLDM2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxX
aXRoRXgKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRz
dCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZh
bHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1
ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRh
dGEmIG1ldGFkYXRhLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVt
cGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
IHsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
ICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3Mo
cmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVH
UFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5v
dEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisg
ICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9
CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93
Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJU
KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFz
Q2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsK
IAogICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5k
ZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5j
ZVRvTmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JD
aGVja3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNv
ZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2Nv
bGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAg
ICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFz
Q2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2lu
dExhYmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwzNCBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAg
IHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3Ry
aW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5n
dGgoKSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQotewotICAgIEFT
U0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUg
Y29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVj
dAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5n
cHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQotICAgIEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRv
cio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQ
UigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwotICAgIHN0b3JlMzIodmFsdWUudGFn
R1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgotfQorICAgIGlmICghc3Jj
LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2Vk
Q29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFz
U3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsK
K30KKworLy8gT09QUworLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQorLy97CisvLyAg
ICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKKy8vCisvLyAgICAvLyBXZSdyZSBpbiBh
IHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRv
IGEgZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lmIFVTRShKU1ZBTFVFNjQpCisvLyAgICBz
dG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vI2Vsc2UKKy8v
ICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5j
b2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8gICAgc3Rv
cmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7Cisv
LyAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Cisv
LyNlbmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFs
dWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJv
ZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDAp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsMjQgKzM1MywyNSBA
QCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBs
YXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAg
ICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxp
bmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUp
ICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0b3Jl
NjQodmFsdWUuZ3ByKCksIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRl
KFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcp
KTsKLX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJv
ZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97CisvLyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7Cisv
L30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQor
dGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQog
ewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3Vs
dFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdz
KHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKQEAgLTM2MCw2ICszOTEsMjEgQEAgaW5saW5lIHZv
aWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlVwogICAgIH0KIH0KIAordGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJh
eVByb2ZpbGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQorewor
ICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICAgICAgbG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YShzY3JhdGNoR1BSLCBieXRlY29k
ZSwgb2Zmc2V0T2ZBcnJheVByb2ZpbGUpOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVy
SUQgc2NyYXRjaEdQUikKK3sKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0
ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5
UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCksIGNlbGxHUFIsIHNjcmF0Y2hH
UFIpOworfQorCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuYXNJbnQzMigpOwpAQCAtMzgwLDcgKzQyNiw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmly
dHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlmIChyZWcuaXND
b25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBv
b2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOworICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29u
c3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmlu
Q29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFk
ZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcgKzU0Miw3IEBAIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29k
ZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7
CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcgKzU1Miw3IEBAIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNL
bm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNCwxMSArNTYwLDYg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogICAgIH0KIH0KIAot
QUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lz
dGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9w
ZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
LCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0LDExICs1ODUsMTcgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5k
ZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xk
IHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAg
aWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0g
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0
KTsKLSAgICAgICAgZWxzZQorICAgICAgICBzd2l0Y2ggKG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
bnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykpIHsKKyAgICAgICAgY2FzZSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpEb3VibGU6IHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAgbW92ZShJbW02
NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3Rh
bnQoc3JjLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtNTY2LDExICs2MTMsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3Qy
KTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJ
RCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTU5NSw3
ICs2MzcsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAKIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3Rl
cklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+
aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTYzNywzMCArNjc5LDcg
QEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewogICAgIGlmICh0
YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5v
dXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKLX0KLQotQUxXQVlTX0lOTElORSBHZXRQ
dXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNvZGUpCi17Ci0g
ICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsgLy8gSGFzaE1hcCBk
b2Vzbid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdldFB1
dEluZm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZv
cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsKLSAg
ICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9nZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5m
by5vcGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJbmZvOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6Y29w
aWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2NF90IGtleSA9
IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEpIDw8IDMyIHwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0byBp
dGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJh
dG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJh
dG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1fY29waWVkQXJp
dGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBhcml0aFByb2Zp
bGU7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQo
aW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY4MSw2ICs3MDAs
NjEgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAogICAgIHJldHVy
biBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQ
dHIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgp
Lm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
b2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0
LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQzMihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1f
dW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVj
b2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2Fk
OChBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCku
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUgdmFsdWUsIGNvbnN0
IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTgodmFsdWUs
IEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5v
ZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlMzJUb01l
dGFkYXRhKEdQUlJlZyB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zm
c2V0KQoreworICAgIHN0b3JlMzIodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxp
bmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUp
ICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldElu
TWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBzX21ldGFkYXRhR1BSLCByZXN1bHQp
OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29uc3RhbnQoSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQ
dHIoQWRkcmVzcyhzX2NvbnN0YW50c0dQUiwgc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb25zdGFu
dEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2Fk
R2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZENvbnN0YW50KG1fZ2xvYmFs
T2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxv
YWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIEdQUlJlZyByZXN1
bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKKyAgICAv
LyBPT1BTOiBNYXliZSBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQ/CisgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlc3VsdCk7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHJlc3VsdCwgQ29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigp
KSwgcmVzdWx0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3Rh
bnRJbmRleCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1
Y3RpbwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZz
ZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwog
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2Nr
KCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZt
KCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBz
d2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29u
c3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRl
eCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0
ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBA
IC0xMDI0LDcgKzEwMjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJ
bnN0CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJs
ZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3ICsxMDQyLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dp
dGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRl
ZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5z
dXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rl
ci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBK
U0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTU0LDExICs1NiwyMiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBp
ZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKLSAgICAgICAgZWxzZQor
ICAgICAgICAvLyBPT1BTOiBtb3N0ICJPdGhlciIgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNv
bnN0YW50cyBjYW4ganVzdCBiZSBncmFiYmVkIGZyb20gdGhlIFVubGlua2VkQ29kZUJsb2NrLiBJ
dCdzIGp1c3QKKyAgICAgICAgLy8gYSBjb3VwbGUgdHlwZXMgdGhhdCBjYW4ndC4gQ3JlYXRlIGFu
IGFic3RyYWN0aW9uIGZvciB0aGF0LgorCisgICAgICAgIHN3aXRjaCAobV91bmxpbmtlZENvZGVC
bG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkgeworICAgICAgICBj
YXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAgICAgY2FzZSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBz
dG9yZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3Jl
NjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICsxMDAsMzUgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5z
dHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0Ojph
bGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFsbG9jYXRv
ciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxP
YmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9y
SWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBSZWdp
c3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9
IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CiAKLSAgICBpZiAo
IWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0
ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJl
ZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwot
ICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUt
PmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwotICAgICAg
ICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxl
KCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSwgYWxsb2Nh
dG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6
TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVSZWcpOworCisgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihu
dWxscHRyKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRv
cjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2Ny
YXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3Ry
dWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgZW1pdElu
aXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CisgICAgbXV0YXRv
ckZlbmNlKCptX3ZtKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
KTsKKworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAorICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CisKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgp
OwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwg
JnZtKCksIHN0cnVjdHVyZSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBlbWl0U3RvcmVDZWxs
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0xMzEsNyArMTQyLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3
ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9t
aGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VT
eW1ib2xGdW5jdGlvbigpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgSnVt
cCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgQWRk
cmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2Z1bmN0aW9uUHJv
dG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOwogCkBAIC0xNTQsMzAgKzE2NiwzOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRl
Y29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBw
cm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2Ug
dXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmly
c3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvdG8sIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3RvR1BS
ID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BSKTsKICAgICAK
ICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2Vs
bCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFu
Y2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyBy
ZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwot
ICAgICAgICByZWdUNSwKLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICByZXN1bHRH
UFIsCisgICAgICAgIHZhbHVlR1BSLAorICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgc3R1Yklu
Zm9HUFIsCisgICAgICAgIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDEsIEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDIpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAorCiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQgKzIxMiwxMyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VP
Zk9wdGltaXplKT4oQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIHJlZ1QyLCBy
ZWdUMSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIHN0YXRpY19h
c3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQ
UjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1
ZSA9PSBhcmd1bWVudEdQUjIpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzOjpwcm90byA9PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShv
cGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTI0
MCw3ICsyNTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAK
ICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwg
cmVnVDEsIHJlZ1QwKTsKIApAQCAtMzc0LDcgKzM5Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jl
dChjb25zdCBJbnN0cnVjdGlvbioKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKKyAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoKTsKICAgICByZXQoKTsKICNlbHNlCkBAIC0zODMsOSArNDAyLDkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3Bf
cmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJikKIHsKLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaml0LmNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lz
dGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAg
LTQxMSw3ICs0MzAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5z
CiAKICAgICBpZiAoZHN0ICE9IHNyYykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM0LDkgKzQ1MiwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25O
YW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdU
MSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIGFyZ3VtZW50R1BS
Mik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NjUsOCArNDg0LDEwIEBAIHZvaWQgSklUOjpl
bWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBK
U1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsK
KyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTQ4MCw3ICs1MDEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNTE5LDcgKzU0MCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2Vs
bCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1
cmUuCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OCha
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1h
c3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwogCkBAIC01NDMsNyArNTY0
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydQogICAgIC8vIEZp
cnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBi
aXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAg
d2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCkBAIC01ODIsMTUgKzYwMywxMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
X3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2lu
dGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAg
IEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
ICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0
cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSks
ICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVj
b2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QxKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1
YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0
YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVjb2RlLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRP
Zkhhc0p1bXBlZCgpKTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5s
aW5rKHRoaXMpOwogfQpAQCAtNjI1LDggKzY0NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1
ZShjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBy
ZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFy
Z2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVt
cChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3Jh
dGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bSgpLmdldENUSVN0dWIodmFsdWVJc1RydXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRh
cmdldCk7CkBAIC02NDAsNyArNjYxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMTsKQEAgLTY5NSw3ICs3MTYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJv
dyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNv
cHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlG
cmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdU
MCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblRocm93LCByZWdUMSwgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIodm0oKSk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSBhcmd1bWVudEdQUjI7CkBAIC03MTEsNyArNzMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhy
b3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5l
cmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIy
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhyb3duVmFsdWVHUFIgPSBhcmd1bWVudEdQUjE7CkBA
IC03MjAsNyArNzQyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogCiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgaml0Lmxv
YWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIGFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChhcmd1bWVudEdQUjApOwor
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihhcmd1
bWVudEdQUjApOwogI2VuZGlmCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQ
UiA9IGFyZ3VtZW50R1BSMDsKQEAgLTkwOCw3ICs5MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfanN0cmljdGVxKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
cmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTE4LDcgKzk0MSw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KIApAQCAtOTMxLDcgKzk1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25z
dCBJbnN0cnUKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkp
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdU
MCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk1MSw3ICs5NzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90b19udW1lcmljKGNvbnN0IEluc3RyCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApKTsKICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcg
IT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0K
QEAgLTk3OCw3ICsxMDAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IElu
c3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBk
c3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAt
OTkzLDcgKzEwMTcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQo
KSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxw
dHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91
bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIE9PUFM6IFRoaXMgaXNuJ3QgZWxlZ2Fu
dC4gV2h5IGFyZW4ndCB0aGV5IGluIHRoZSBjYWxsZWUgc2F2ZSBidWZmZXIuIEkgZ3Vlc3MgYmVj
YXVzZSB3ZSBjYW4gT1NSIGV4aXQgaGVyZT8KKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFu
ZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOwogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0o
KSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMDExLDIzICsxMDM4LDExIEBAIHZvaWQgSklUOjplbWl0
X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywg
c3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKLSAgICBpZiAoYnVm
ZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNv
ZGVJbmRleC5hc0JpdHMoKSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2
bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZt
KCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBza2lwT1NSRW50cnkgPSBi
cmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0
clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYgKGJ1ZmZlciAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlUmVncyByZWdzKHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSwgcmVncyk7Ci0gICAgICAg
IH0pOwotICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIApAQCAtMTA1Myw4ICsx
MDY4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIFZp
cnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8v
IGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3
aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3
aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3
aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUo
dW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwODEsMTMgKzEwOTYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUg
PSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBz
d2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29u
c3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBt
X2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7
CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCwgdW5saW5rZWRU
YWJsZS5tX21pbik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOwogICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIApAQCAtMTA5OSwy
MCArMTExNSwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAg
ICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRo
aXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxp
bmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2st
PnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBs
aW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0
cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxl
SW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlYnVnPigpOwotICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJl
c3MoKSwgcmVnVDApOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVx
dWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29r
VHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwpAQCAtMTEzMyw3ICsx
MTUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1Qy
LCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTQ4LDcg
KzExNjYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE2Niw3ICsxMTgzLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qw
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTg4LDEyICsx
MjA1LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAv
LyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29u
c3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1
bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3Jl
YXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZh
cnMoKTsKKyAgICBzaXplX3QgY291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1WYXJzKCk7
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGZvciAoc2l6ZV90IGogPSBDb2Rl
QmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsg
aiA8IGNvdW50OyArK2opCiAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwoaikpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CisgICAg
CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qw
KTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwKTsKIAogICAgIGVtaXRFbnRlck9wdGltaXph
dGlvbkNoZWNrKCk7CiAjZWxzZQpAQCAtMTIxMiw3ICsxMjMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2hhbmRs
ZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJw
KTsKQEAgLTEzMTAsMjMgKzEzMjksMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNv
bnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9
ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEs
IEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIp
OworICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNh
bGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwotICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiog
Y2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJ
RCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7
CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKQEAgLTEzNDIsNyArMTM1Nyw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zm
c2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgYWxsb2NhdG9yUmVn
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9m
ZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
V2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRh
VGFnKSwgc3RydWN0dXJlUmVnKTsKIAotICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hl
ZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcENyZWF0
ZVRoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZENhbGxlZSgpLCBjYWNoZWRGdW5jdGlvblJl
Zyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBj
YWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxl
ZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgY2FsbGVl
UmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMubGlu
ayh0aGlzKTsKQEAgLTEzNzIsNyArMTM4Nyw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShj
b25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1Qx
KTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZh
bHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
dHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIsNyArMTM5OCw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJl
Z1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBi
b3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0p
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVl
R1BSKTsKQEAgLTEzOTQsNyArMTQxMSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29u
c3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzE0MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
am5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEp
OwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0MzcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3Rv
ciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3Rh
bmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
b25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFu
Y2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1
c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3Is
IEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJ
bnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAgICAg
Ym94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpA
QCAtMTQzMCw3ICsxNDUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3Vz
dG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uKQogewotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21J
bmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGln
aWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgIGlmIChVTkxJS0VMWShPcHRpb25z
OjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fdW5saW5rZWRD
b2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7
CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50
ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkUHRyKHB0ciwgcmVnVDApOwogICAgICAgICBh
dXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaFB0cihCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW1Q
dHIoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTE0
NDAsNyArMTQ2MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUK
ICNlbHNlCiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKLSAgICAgICAgbW92ZVZh
bHVlKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3QocmVzdWx0UmVncy5ncHIoKSk7CiAgICAgICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAg
ICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTE0NTMsOCArMTQ3Myw5IEBAIHZvaWQgSklU
OjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKIAogICAgIC8vIEVtaXQgdGhlIEpJVCBv
cHRpbWl6YXRpb24gY2hlY2s6IAogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7CisgICAgICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CiAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZlT3JaZXJvLCBUcnVzdGVkSW1t
MzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCi0gICAgICAg
ICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3Vu
dGVyKCkpKSk7CisgICAgICAgICAgICBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
SklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9CiB9CiAKQEAgLTE1MDksNyArMTUzMCw4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFyZ3VtZW50R1BSMCk7CiAj
ZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQ
UjM7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CkBAIC0xNTIyLDcgKzE1NDQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRv
cihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
I2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMTU2
NCwzNCArMTU4NiwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3Ry
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkp
KTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRHUFIwOworICAgIGxvYWRHbG9iYWxP
YmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwg
Z2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSnVtcCBsYXp5SnVt
cDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRH
UFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qw
KTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsK
ICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+
ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNs
LCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9m
dW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIp
OwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29k
ZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5j
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBk
c3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJh
dG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTYyMSwyMyArMTY0
NSwyNCBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UK
LSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRM
b2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCiAKLSAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhw
cihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwciwgYml0d2lzZV9j
YXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNs
KSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKICAgICBPcGNv
ZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24s
IGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
KTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZt
KCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwog
ICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVy
YXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNH
ZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2
bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjY0LDI5
ICsxNjg5LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19nZW5lcmF0b3JfZnUKIHZv
aWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3QXJyYXk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQg
c2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0
YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdU
MCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1l
dGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVy
SW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJh
eUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRo
UHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBz
aXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRl
eCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSwgcmVnVDApOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9j
YXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzaXplSW5kZXgsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFBy
b2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAj
ZWxzZQorICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdB
cnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCks
IHJlZ1QyKTsKICAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0
YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJlZ1QyLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQogCkBAIC0xNjk0LDggKzE3MjAsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAKIHZvaWQgSklUOjplbWl0X29w
X3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewor
ICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUg
Y2FjaGluZyB3aGVuIHRoZSB0eXBlIHByb2ZpbGVyIGlzIGVuYWJsZWQuCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5
cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRW
aXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE3NzcsMjAgKzE4MDQsMjQgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAh
PSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlm
IHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRS
ZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlz
IG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVn
ID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNr
ZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgeworICAgICAgICBHUFJSZWcg
c2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQg
cmVnaXN0ZXIuCisgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOworICAgICAgICBl
bnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFS
ZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNo
YWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFp
bFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Qx
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpT
VkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUg
Y2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdXNp
bmcgdGhlIGNvbnRyb2wgZmxvdyBwcm9maWxlci4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEJhc2ljQmxv
Y2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9j
YXRpb247CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRF
eGVjdXRlQ29kZSgqdGhpcyk7CkBAIC0xODYwLDcgKzE4OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJl
c3VsdFJlZ3MpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE4ODYsNyArMTkxNyw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QKICAgICBlbWl0TG9h
ZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3Jh
dGNoR1BSLCBzbG93Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVn
cyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg4MSw3ICsyODgxLDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25z
dCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3Vs
dDsKICAgICBpZiAoa2V5LmlzSW50MzIoKSkKQEAgLTI5MDQsNyArMjkwNCw3IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHZvaWQqIHJlc3VsdDsKLSAgICBjb25zdCBT
dHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CiAKICAgICBpZiAoa2V5LmlzU3RyaW5nKCkpIHsKICAgICAgICAgU3RyaW5nSW1wbCogdmFsdWUg
PSBhc1N0cmluZyhrZXkpLT52YWx1ZShnbG9iYWxPYmplY3QpLmltcGwoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDcgKzM0OCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlkR1BSUmVnLCBJbnZh
bGlkR1BSUmVnKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7
CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MTg2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw5MiArNDksMTAzIEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlW
YWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVn
VDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBpZiAobWV0
YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhO
dW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZh
bElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90Q2VsbC5s
aW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFzZUdQ
UiwgcHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnJlc3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0
QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzLCBy
ZWdUMik7Ci0gICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0gICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BS
KSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgICAgIC8vIE9PUFMuIFN1cHBvcnQg
dGhpcworICAgICAgICAvL2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCisgICAg
ICAgIC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAg
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIH0KLQogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGNvZGVUeXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShj
b25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAgICBpZiAoIWhhc0FueVNs
b3dDYXNlcyhpdGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Cisg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOworICAgIEpJVEdldEJ5VmFs
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CiAKLSAgICAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIG1vdmUo
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBtb3Zl
KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpvZmZzZXRPZkFy
cmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFy
Z3VtZW50R1BSNCk7CiAjZWxzZQotICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAg
ICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJ
bmRleCk7CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRl
eChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKIAotICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OwotICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OworICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0g
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFy
ZzEgYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQ
UiA9IGFyZ3VtZW50R1BSMjsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwotCi0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
LSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKLSAgICAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICAgICAg
Q2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25HZXRCeVZhbE9wdGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKTsKLSAgICAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgorICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
CisgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CisgICAg
c3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlID09IHJlZ1QwKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5ID09
IHJlZ1QxKTsKKworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0
YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCks
IHByb2ZpbGVHUFIpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKLSAgICB9CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQpAQCAtMTQ5LDcgKzE2MCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAg
ICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE2MCw4ICsxNzEsOCBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIg
PSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlz
QVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEp
OwogCkBAIC0xODcsMzQgKzE5OCw0MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9u
YW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdz
LCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwg
cmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIp
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZh
dGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yMjMsOSArMjQwLDExIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFk
YXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHBy
b3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
YXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTIzNSwyNiArMjU0LDIwIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNz
ZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19h
c3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFBy
aXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChv
cGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFs
dWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVl
R1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKQEAgLTI2NCw3ICsyNzcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2Jh
bE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAg
IC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2Jh
bE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50
YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0zMDAsMjEgKzMxMywyOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNv
ZGUubV9icmFuZDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBicmFu
ZEdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQ
UiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7Ci0KICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRB
Y2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKGJyYW5kR1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIAogICAg
IC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBz
aW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTMyNCwxNyArMzQ0LDIy
IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2
YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJl
bnRJbnN0cnVjdGlvbik7CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklU
UHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2Vz
W21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9
IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwog
I2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMzQ0LDI0ICszNjksMTggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQu
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5
cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVu
Y3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpB
cmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAg
ZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRP
cHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZgogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTM3MCwxOSArMzg5LDI4IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3By
aXZhdGVfYnJhbmQoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihicmFuZCwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7CisKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nl
c3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBh
ZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiB9CiAKQEAg
LTM5NCw5ICs0MjIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJh
bgogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIs
IGJyYW5kR1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJn
dW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNr
UHJpdmF0ZUJyYW5kT3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC00MDYsMjQgKzQzNiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9i
cmFuCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIy
OyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0g
YXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2Ft
ZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGlt
aXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdl
dFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNr
UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC00MzUsMzAgKzQ1OSw0MiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVn
VDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHJlZ1QzKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJl
Z1Q0KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9m
aWxlR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAKICAgICBK
SVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCk7Ci0gICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBwcm9maWxlR1BSLCBzdHViSW5mb0dQUik7
CisgICAgLy8gT09QUzoKKyAgICAvL2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkp
CisgICAgLy8gICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZh
bDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFs
RGlyZWN0PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHVi
SW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00
NzQsMTUgKzUxMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKLSAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8g
Ynl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKLSAgICAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAg
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChp
c0RpcmVjdCkKQEAgLTQ5OCw3ICs1MzEsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSQogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRo
ZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0
KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEsIHJlZ1QyLCBnZW4uc3R1YkluZm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQ
UjMpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFI0KTsKKyAgICBpZiAoaXNEaXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJl
Y3Q+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBhcmd1bWVudEdQUjUpOworICAgIGVsc2UKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZh
bERpcmVjdDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0
cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkg
PyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0LCBhcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNTEyLDcgKzU1NCw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1
OwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKICAgICBDYWxsIGNhbGw7CiAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChl
Y21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2Rl
LmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9u
UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CkBAIC01MjMsNyArNTY1LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtNTMzLDE4ICs1NzUsMjQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAg
ICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9i
YWxPYmplY3RHUFIgPSByZWdUNTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2
YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgeworICAgICAgICBS
ZWdpc3RlclNldCB1c2VkKEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2
YWx1ZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZSk7CisgICAgICAgIEFTU0VS
VCghdXNlZC5jb250YWlucyhyZWdUNCkpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMo
cmVnVDUpKTsKKyAgICB9CisKIAogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0
YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9i
amVjdEdQUik7CkBAIC01NzAsMjAgKzYxOCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJp
dmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRH
UFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRl
RmllbGRQdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBT
dHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTk0
LDggKzY1Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFBy
aXZhdGVOYW1lPigpOwotICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2Rl
Lm1fcHV0S2luZDsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKIAogICAg
IEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgr
K107CiAKQEAgLTYwMywxMyArNjYxLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJp
dmF0ZV9uYW1lKGMKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAg
YXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERl
ZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmll
bGRPcHRpbWl6ZTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgLy8gVGhleSBh
cmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVl
R1BSLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKKyAg
ICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5k
LmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXpl
IDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRzR1BSMywgYXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRy
KG51bGxwdHIpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCAr
Njg0LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBj
b25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRl
X25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb247Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNjQzLDE0ICs2OTksMTQgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBy
ZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSByZWdUNDsKIApAQCAtNjgwLDcgKzczNiw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02ODksNyArNzQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRTZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02OTksNyArNzU3LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9nZXR0ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0
ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmli
dXRlLCByZWdUMSwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBh
dHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0
ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MDks
NyArNzY4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAg
IGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcxOSw3ICs3NzksOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlW
YWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCBy
ZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyNywyMyArNzg4
LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdU
MywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUik7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVy
ZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hv
dWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRl
LWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNzU5LDE1ICs4MzAsMTcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVs
QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxl
dGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
LCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNzgxLDI0ICs4NTQsMTkgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9
IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGJhc2VHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVH
UFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlf
aWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25EZWxldGVCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1Zh
bHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC04MDgsNyArODc2LDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1h
a2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxh
YmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxp
bmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkg
bm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZt
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpA
QCAtODQ1LDIyICs5MTMsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3Bl
cnR5KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dEdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0
dWJJbmZvR1BSLCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFs
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVt
aXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJp
ZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJl
IHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5NjIs
MTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2Rl
LnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCAr
OTgwLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6
ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5
VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGlj
X2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC05MjYsNyArMTAwMiw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTk2MSwyMiArMTAzNywz
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3Vs
dCk7CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywg
cmVnVDEsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlw
ZTo6VHJ5R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTk4NiwxNCArMTA3MSwxNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0x
MDAzLDI2ICsxMDkxLDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNv
bnMKICAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlH
UFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKSwgZGVj
bHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXpl
OwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uVHJ5R2V0QnlJ
ZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAzMCwyMiArMTExMiwz
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVn
cywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNj
ZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiArMTE0NSwxOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dl
dEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCBy
ZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwNzMsODMgKzExNjYsNjEgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZERpcmVjdE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcs
IHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6c2NyYXRjaDsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgSnVt
cCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Mo
Jm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJh
eUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCByZWdUMSk7CisgICAgICAgIGxvYWQ4RnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgp
ICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlKCksIHNjcmF0Y2hHUFIpOworICAg
ICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNv
ZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlk
TW9kZU1ldGFkYXRhQXJyYXlMZW5ndGg6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGJhc2VHUFIs
IHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAg
ICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwot
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Ci19CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsK
IAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVn
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhp
c1ZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpH
ZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKIAotICAgIEpJVEdl
dEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTExNTgsMTYg
KzEyMjksMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJ
ZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOwor
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3NywyNiArMTI1MCw1NyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQ
UjM7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpiYXNlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwg
IWlzQVJNNjQoKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50
R1BSMzsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRo
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNH
UFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
dGhpc0dQUiwgdGhpc1ZSZWcpOworCisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdl
bigKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3ModGhpc0dQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CkBAIC0xMjA2LDcgKzEzMTAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2Jh
bE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAg
IC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2Jh
bE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50
YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMjQxLDE2ICsxMzQ1LDE5IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0
aFRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlz
W21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlk
V2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV90aGlzVmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTI2MCwyOCArMTM2NywyMiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQ
UiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9
IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3Nl
cnQodGhpc0dQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhp
c09wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjkxLDcg
KzEzOTIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRy
ZXNzKCk7CkBAIC0xMzI5LDIzICsxNDMwLDM3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9p
ZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICAvLyBJ
biBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBv
YmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBqdXN0IGFmdGVy
IHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJl
Z2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVy
ZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCBy
ZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCBiYXNlR1BSLCB2YWx1ZVZSZWcsIHZhbHVlR1BS
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwog
CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDMsIHJlZ1QyLCBlY21hTW9kZShieXRl
Y29kZSksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2Rl
KSwKICAgICAgICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0
KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5SWQ7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBkaXJlY3Qg
PyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVj
bWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBz
dHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1f
cHV0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1
Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMTM1OSwx
NCArMTQ3NCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhp
cyk7CiAgICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1
dEJ5SWRJbmRleCsrXTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCBy
ZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlv
bihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMzc2LDI1ICsx
NDk1LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEg
YWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QxOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3Rh
dGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IGdlbi5zbG93UGF0aEZ1bmN0aW9uKCk7Ci0gICAgZWxzZQotICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChnZW4uc2xvd1BhdGhGdW5jdGlvbigpKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTE0MDQsNyArMTUxNyw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9u
cyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAog
ICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE0NDEsMjAg
KzE1NTQsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwog
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgcmVnVDEpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0NjMsMTQgKzE1ODcsMTcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTQ4MCwy
OCArMTYwNywyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X2lkX3By
ZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8g
U28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0
byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Nh
bWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNTEwLDI1ICsxNjMxLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3Zh
bChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJl
Z1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
SW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRH
UFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c2Ny
YXRjaCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5C
eVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CkBAIC0xNTM3LDE1ICsxNjY2LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwo
Y29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5CeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAg
SklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5C
eVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBv
aW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIGFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0
aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJn
dW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwpAQCAtMTU1Niw1OSArMTY4OCw3MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFs
KGNvbnN0IEluCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGlj
X2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQ
b2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV92YWxf
cHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAv
LyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0
IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
c2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRp
b25HZXRCeVZhbE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5cGUp
CiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwg
cHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0
eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQo
KTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IHR5cGU7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lz
dGVyIGRzdCwgQWNjZXNzVHlwZSB0eXBlKQordm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5LCBBY2Nlc3NUeXBlIHR5cGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKGJhc2UpOwor
ICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7CiAgICAgQVNTRVJUKHR5cGUgPT0gQWNjZXNzVHlw
ZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQp
OwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJ
bmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUg
PT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9w
dGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxP
cGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhh
c1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwg
ZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2MSwy
MSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlP
ckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlP
ckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFz
UHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBl
KG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0
UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVO
YW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZh
dGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTY1Miw3ICsxNzg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19w
cml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAg
IGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUu
bV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDE5ICsxODAzLDIyIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQ
cml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRl
Y29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNr
KGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlv
bkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQog
ewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRl
KCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmpl
Y3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0
Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQ
UiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qw
KTsKQEAgLTE2ODgsNiArMTgyOCw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmly
dHVhbFJlZ2kKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKQEAgLTE3MDEsNyArMTg0Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUo
Y29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25z
dGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSwgcmVnVDEpOwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2Jh
bExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0x
NzE1LDcgKzE4NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IElu
CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
ICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNj
b3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgcmVnVDApOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2Nv
cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTE3OTQsODcgKzE5MzUsMTA1IEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNv
bHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29w
ZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7
CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5
dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7
CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29k
ZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBt
ZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdU
NjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAg
Ly8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQg
YWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4K
IAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAg
ICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
TGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlm
Zl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgm
bWV0YWRhdGEpOworICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAK
LSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVf
c2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1
bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xW
RV9UWVBFKFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1cmVWYXJH
ZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0
ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2
ZV9zY29wZSBDbG9zdXJlVmFyIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9H
RU5FUkFUT1IKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
R2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJh
dGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cywgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIik7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3Bl
R2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJh
dGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVz
b2x2ZV9zY29wZSBnZW5lcmljIik7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3Bl
R1BSID0gcmVnVDY7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSByZWdUNTsKIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQ
Uik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRh
R1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2Vu
ZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9
IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisg
ICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrc0dlbmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5n
ZXRDVElTdHViKGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFr
ZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZN
JiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIq
IHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rp
b24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAg
ICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBi
ZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9G
VEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMs
IHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2Nv
cGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsg
Ly8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGlu
Y29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAv
LyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZz
ZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUo
cmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0
dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRh
ZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1Qz
LCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1p
dFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgeworICAgIGF1dG8gZG9WYXJJ
bmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVn
IGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgaWYgKCFuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2Jh
bE9iamVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RH
UFIgPSByZWdUNDsKLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAg
IH0KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNF
VE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwot
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0
Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQp
KSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdU
Myk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhy
ZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZd
IChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIs
IHJlZ1QwKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBkb1Zh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgaml0Lm1v
dmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1Qx
KTsKIAotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0g
YnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJl
bCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsK
ICAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgp
KSwgcmVnVDApOworICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEp
OworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0K
LSAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAg
fTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7
CkBAIC0xODgyLDEyICsyMDQxLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2Nv
cGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29k
ZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5k
aW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNl
dE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1v
dmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3Qo
KSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9i
YWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5n
RXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubW92ZShnbG9iYWxPYmplY3RHUFIs
IHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEgKzIw
NTYsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAg
ICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3Ig
R2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVn
VDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFs
T2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAt
MTkwOSw3ICsyMDY4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWlj
OgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4
MyArMjA3OCw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAg
ICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBl
KSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0K
LSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUo
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lw
VG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUp
OworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNv
bHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAgICAg
ICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29s
dmVUeXBlKCkpLCByZWdUMCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwor
ICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewor
ICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZl
VHlwZSk7CisgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAg
ICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNl
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0
Q2FzZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIp
OworICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAg
ICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAg
ICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAg
ICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lw
VG9FbmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCku
Z2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hC
dWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwog
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1
bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVz
b2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpv
cF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7
IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShy
ZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGpp
dCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmso
cmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7
IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VO
RVJBVE9SKQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMg
ZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNh
dXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUg
ZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2
XzY0KQpAQCAtMjA2NSw2ICsyMTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZp
cnR1YWxSZWdpcwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKQEAgLTIxNzgsNyArMjMwMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAg
LTIxODYsOSArMjMwOCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShj
b24KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRh
ZGF0YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5z
dHJ1Y3Rpb24pOwogfQogCiAjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTIx
OTYsNDEgKzIzMTgsNTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNv
bgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
LSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVj
b2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBhdXRvIGNsb3N1cmVWYXJH
ZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9z
Y29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBK
SVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOwor
ICAgIH07CisKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0m
IHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2
bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsK
KyAgICB9OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xv
YmFsVmFyKSB7Ci0gICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFy
RnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2Rl
QmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBt
ZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5N
ZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFU
T1IocmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRv
ciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsK
LSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFU
T1IpCi0gICAgICAgIH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9z
dXJlVmFyKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9y
KTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2Rl
ID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVt
aXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZt
LCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBj
YW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCkBAIC0yMjM5LDk5ICsyMzcw
LDg4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICB1c2lu
ZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9
IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUo
cmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMp
OwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdU
Myk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qg
c2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChH
UFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCks
IHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgYXV0byBlbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSKSB7CisgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJl
Z1QwKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJl
Z1QxKSk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSkpOwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9
IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmpl
Y3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAg
ICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBy
ZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJl
Z1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBt
X3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNl
dE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAg
Ci0gICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwg
R1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJh
bmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0
byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBH
UFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFu
ZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRv
IGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5k
R1BSKSB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3Rlcikp
OwotICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAg
ICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
b3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCBy
ZWdUMCk7CisgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIp
OworICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkg
eworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAg
ICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3Zl
cnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0
aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhh
bmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJz
IHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhp
bmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5k
bGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdCA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdU
MTsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAg
ICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1w
IHsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGpp
dC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAg
ICAgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAg
ICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFu
ZCgpKSwgb2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAg
ICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAg
ICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAg
ICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNP
dXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0
ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9y
dFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlz
T3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0g
ICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIo
b2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBv
ZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAg
ICAgaml0Lm5lZzMyKG9mZnNldCk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIo
b2Zmc2V0LCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRj
aCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29w
ZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYg
KHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAg
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fb3BlcmFuZCkpLCByZWdUMyk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwg
cmVnVDMpOwogICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
anVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3Vy
ZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQxLDg2ICsyNDYxLDYzIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
LSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAg
ICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAg
ICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8g
TG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0
aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhp
Y2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZl
VHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZh
ciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7CisgICAgICAgIGpp
dC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExv
YWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0g
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMp
OworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFy
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xv
YmFsVmFyLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1
bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsK
KworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwor
ICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEds
b2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQu
anVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0gICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNraXBUb0Vu
ZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29s
dmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygm
aml0KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZC
dWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJl
Z1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkpKTsK
IAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwot
ICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVM
b2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsK
KyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29k
ZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUg
REVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVz
b2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3Rl
eHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAg
ICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0
dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGlu
ZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hf
UkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVG
SU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0p
CiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5
IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1h
a2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxh
YmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxp
bmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkg
bm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZt
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVz
aChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNDcxLDg2ICsyNTY4LDc5IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBv
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdy
aXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVt
aXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRT
ZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxv
YWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRl
KHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9y
ZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsK
LSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhy
ZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5k
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNv
cGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0g
Z2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3Qg
PSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xv
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAK
LSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBp
bmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZl
VHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
c2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNr
aW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVj
ayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZv
ciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9u
YWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlv
bi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQo
c2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVn
VDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxv
YWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAg
ICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdo
dCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7
Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1Qy
LCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIC8vIE9PUFM6
IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIEdQUlJlZ3MgaW5zdGVh
ZCBvZiBWUnMKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hl
Y2socmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1
dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSkgeworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFZhclJl
YWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVy
YW5kKCksIHJlZ1QwKTsKKworICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVj
b2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBh
IFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8g
ZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0
TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJl
Y3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Q
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1
dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNs
b3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0g
ICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7
CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAg
c3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBX
b3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3IgdmFs
dWUuCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBS
ZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisKKyAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9w
ZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChy
ZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAg
ICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOworCisgICAgICAg
ICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBh
IEdQUlJlZyBmb3Igb3duZXIvdmFsdWUuCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNj
b3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjU2NCw1OCArMjY1NCw1MiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qg
c2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDAp
OwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFy
KSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBw
ZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNv
bnN0IGJpbmRpbmcuCi0KLSAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0g
ICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwg
dHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0ds
b2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBm
YWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2Rl
QmxvY2sgc2VlcyBDbG9zdXJlVmFyLyBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywg
dGhlbiB3ZSBjYW4gY29tcGlsZSB0aGluZ3MKKyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVC
bG9ja3MsIHNpbmNlIHdlJ3ZlIHByb3ZlbiB0aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElm
IHdlJ3JlIGEgQ2xvc3VyZVZhciwKKyAgICAvLyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1
cmVWYXIuIElmIHdlJ3JlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBh
bHdheXMgQ2xvc3VyZVZhcgorICAgIC8vIGlmIHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQg
aXNuJ3QgZmlyZWQuIElmIGl0IGlzIGZpcmVkLCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwg
c28gaXQgZG9lc24ndAorICAgIC8vIG1hdHRlciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5
LgorICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVt
aXRDb2RlKENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0g
UmVzb2x2ZWRDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIp
OworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKKyAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2Fk
MzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
R2V0UHV0SW5mbygpLCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJ
bmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAg
ICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xv
YmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHks
IGZhbHNlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKIAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBl
bWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Cisg
ICAgICAgIG5vdEdsb2JhbFZhci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUo
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRo
aXMpOworCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVl
KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjYyNCwxOCArMjcw
OCwyMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9
IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29s
dmVUeXBlID09IE1vZHVsZVZhcikgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5
cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8u
cmVzb2x2ZVR5cGUoKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIp
IHsKKyAgICAgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0
aGVuIGFsbCBsaW5rZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBh
bHNvIHNlZSBNb2R1bGVWYXIuCiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVh
ZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgp
OwogICAgIH0gZWxzZSB7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFRvU2NvcGUsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAg
ICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJ
bmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwpAQCAtMjY1Miw3ICsyNzM5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BV
KFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNzAxLDcgKzI3
ODgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQo
QWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyODQ2LDYgQEAgdm9pZCBKSVQ6OmVt
aXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVy
bmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxk
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CkBAIC0yNzY3LDcgKzI4NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJ
bXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKIH0KIApAQCAtMjc4OSw3ICsyODc1LDYgQEAgdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X3ZhbDxPcAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0g
Ynl0ZWNvZGUubV9tb2RlOwpAQCAtMjgwNSw3ICsyODkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAg
ICAvLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28g
c3BlY2lhbCBjYXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmICht
ZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok93blN0cnVjdHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jaykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0g
cmVnVDM7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVy
YXRvckdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9u
WmVybywgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1v
ZGVTZXRPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpP
d25TdHJ1Y3R1cmVNb2RlKSkpOwpAQCAtMjg0Nyw3OCArMjkzMiw4NyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRC
eVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAgYXV0byBy
ZXN1bHRHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2Vs
aW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdl
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJl
Z2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2Vs
aW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNj
cmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgc2NyYXRj
aDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBwcm9wZXJ0eUdQ
Uik7CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJh
dG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BFbnVtZXJh
dG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3Jh
dGNoMik7CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIpOworICAgIHN0b3JlOFRvTWV0YWRh
dGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9m
ZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIp
KTsKICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgotICAgIEp1
bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBU
cnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlzTm90T3duU3Ry
dWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QzKTsKLSAg
ICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBBZGRy
ZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zm
c2V0KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHNjcmF0Y2gx
KTsKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5v
dEVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBv
ZmZzZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDMpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJZiBpbmRleCBp
cyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4g
aXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gz
MihBYm92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBz
aWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVn
VDAsIHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQorICAgIEp1bXAgb3V0T2ZMaW5l
QWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNo
MSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAgICBsb2Fk
NjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQo
anVtcCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZM
aW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwg
cmVnVDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywg
cmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNo
Mik7CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gy
LCBzY3JhdGNoMik7CiAgICAgY29uc3RleHByIGludHB0cl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0
eSA9IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0YXRpY19jYXN0
PGludHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4
KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0
R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0
LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBl
bmQoanVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7Ci0gICAgc3Rv
cmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1
Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRh
dGEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksIGJ5dGVj
b2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1l
dGFkYXRhKCkpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7Ci0gICAg
SnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0z
MihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgSnVtcCBpc05v
dEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVwbGFjZSB0aGUg
c3RyaW5nIHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgs
IHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9wZXJ0eUdQUik7
CiAKICAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAogICAgIEpJVEdl
dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5m
b0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpHZXRCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBl
bmQoZ2VuKTsKIAogICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTI3LDEwICszMDIxLDkgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0
QnlWYWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFs
PigpLCBpdGVyKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1l
IFNsb3dQYXRoRnVuY3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJv
cGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9w
Y29kZVR5cGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+
Cit2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93
UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0
b3I7CkBAIC0yOTM5LDcgKzMwMzIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19w
cm9wZXJ0eUltCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihtb2RlLCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1l
dGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwg
cmVnVDEpOworICAgIG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJl
Z1QxLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRh
ZGF0YSgpKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2Rl
KSkpOwogCkBAIC0zMDI4LDYgKzMxMjMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIo
SlNDZWxsKiBvd25lcgogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsK
IH0KIAordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQoreworICAgIEp1
bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIs
IHNlbGVjdFNjcmF0Y2hHUFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0Myw3ICsxNTQzLDcgQEAgc3Rh
dGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogCiB2b2lkIHVubGlua0NhbGwo
Vk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5r
SW5mby5mYXN0UGF0aFN0YXJ0KCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNh
c3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExp
bmtJbmZvKSk7CiAgICAgCiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRD
VElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPigpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODE4NjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQko
d29ya2luZyBjb3B5KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9w
KGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3Ry
dWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29k
ZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0
YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAg
ICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxl
ICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAg
bWV0YWRhdGEodDEsIHQyKQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5l
cSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5
LDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAj
IE1ldGFkYXRhIGluIHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0
MiwgLnNsb3cpCiAgICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQot
ICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRh
dGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQy
KQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTgg
QEAgZW5kKQogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBk
YXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRh
dGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBl
bmQKLQogICAgIG1ldGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIElu
dDMyVGFnLCAub3BOZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BO
ZWdhdGVTbG93CiAgICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2Zp
bGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmls
ZUludCwgdDUsIHQzKQogICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90
SW50OgogICAgIGJpYSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgw
MDAwMDAwLCB0MQotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisg
ICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwg
dDUsIHQzKQogICAgIHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEw
ICsxMTA3LDYgQEAgZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUs
IG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24p
CiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1h
Y3JvIGFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0
c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBn
ZXQobV9yaHMsIHQyKQogICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcg
QEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0
MiwgSW50MzJUYWcsIC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3Ay
Tm90SW50Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludElu
dCwgdDUsIHQyKQogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0
aW9uQW5kU3RvcmUodDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBA
IC0xMTM2LDEyICsxMTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFt
ZSwgb3AKICAgICAgICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0Mywg
TG93ZXN0VGFnLCAub3AxTm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRh
ZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAg
ICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxl
TnVtYmVySW50LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5v
cDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQx
LCB0MywgZnQxCi0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIp
CisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZU51bWJlck51bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAg
Z2V0KG1fZHN0LCB0MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0
MSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAg
IyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQg
aXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0
MywgTG93ZXN0VGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50
TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBB
cml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAg
ICAgICBmaWkyZCB0MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDAp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0
MSw4ICs0NDEsMTMgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAg
ICAgbW92ZSBQQywgYTEKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAg
ICAgICAgICBidHB6IHIwLCAucmVjb3ZlcgotCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisg
ICAgICAgICAgICAjIEJhc2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJ
VCBjb25zdGFudCBwb29sLgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisg
ICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAg
ICBsb2FkcCBDb2RlQmxvY2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwog
ICAgICAgICAgICAgaWYgQVJNNjRFCiAgICAgICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBj
b25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6
Omxvb3BPU1JFbnRyeSkgKiBQdHJTaXplLCBhMgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBO
YXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYg
QEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVP
cChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFy
aXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpN
ZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQot
ICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBb
Y2ZyLCB0MCwgOF0sIHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3
MCw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAg
aW50ZWdlck9wZXJhdGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAg
ICAgICAgIHN0b3JlcSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmls
ZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29k
ZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAog
ICAgIC5zbG93OgpAQCAtMTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1l
dGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBt
ZXRhZGF0YSwgcmV0dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0g
ICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5h
cnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQs
IHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFk
YXRhKHQxLCB0MikKQEAgLTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF9uZWdhdGUsIE9wTmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNs
b3cKICAgICBuZWdpIHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFBy
b2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVn
YXRlLCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVO
b3RJbnQ6CiAgICAgYnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAw
eDgwMDAwMDAwMDAwMDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmls
ZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9m
aWxlTnVtYmVyLCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAt
MTE2NCwxMCArMTE2MCw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwg
b3AKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAg
bWV0YWRhdGEodDUsIHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAg
ICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsg
QmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdl
dChtX3JocywgdDApCiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQog
ICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAg
ICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAg
ICAgICBkaXNwYXRjaCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBA
QCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXog
dDEsIG51bWJlclRhZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAg
IGZxMmQgdDEsIGZ0MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikK
KyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9m
aWxlTnVtYmVyTnVtYmVyLCB0NSwgdDIpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAg
ICAub3AxTm90SW50T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcklu
dCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQ
cm9maWxlTnVtYmVySW50LCB0NSwgdDIpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3Ax
Tm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA0LDkgKzExOTYsOSBA
QCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAKICAgICAub3AyTm90
SW50OgogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBz
ZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCi0gICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAg
IGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJ
bnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3Qs
IEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQog
ICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAg
ICBmcTJkIHQxLCBmdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMjU1Niw2ICsyNTU2LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBl
bmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUs
IG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0
eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBX
ZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdF
QkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFu
ZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigp
ID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVh
YmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJs
b2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRl
bnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwg
VW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlw
ZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGlu
ZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVk
U3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBj
cmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRl
bnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9u
IDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50
aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29k
ZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9j
a1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJs
b2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBD
YWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hl
YWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJ
ZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBK
U0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkK
IHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6
TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewot
ICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7
CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQu
aXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAy
ODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUg
cHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0
aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0JhZy5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsNiArNjYsMjAgQEAgcHVibGljOgogICAgICAgICBvdGhlci5tX2hlYWQg
PSBudWxscHRyOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQmFnJiBv
cGVyYXRvcj0oQmFnPFQsIFU+JiYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodW53cmFwcGVk
SGVhZCgpID09IG90aGVyLnVud3JhcHBlZEhlYWQoKSkKKyAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKworICAgICAgICBCYWcgZGVzdHJveTsKKyAgICAgICAgZGVzdHJveS5tX2hlYWQgPSB1bndy
YXBwZWRIZWFkKCk7CisgICAgICAgIG1faGVhZCA9IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKKyAg
ICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgfQorCiAgICAgfkJhZygpCiAgICAgewogICAgICAgICBjbGVhcigpOwpJbmRleDogVG9vbHMv
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3J1bi1qc2Mtc3RyZXNzLXRlc3RzCShyZXZpc2lvbiAyODE4NjgpCisrKyBUb29scy9TY3JpcHRz
L3J1bi1qc2Mtc3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC03NzAsMTcgKzc3MCwxOCBA
QCBlbmQKIAogIyBGSVhNRTogbmVlZCB0byBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxODcwMyB0byBlbmFibGUgdGhpcyBvbiBMaW51eC9NSVBTLgogZGVmIHJ1
bkJ5dGVjb2RlQ2FjaGVJbXBsKG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucywgKmFkZGl0aW9u
YWxFbnYpCi0gICAgaWYgKCRob3N0T1MgPT0gImRhcndpbiIpCi0gICAgICAgIGZpbGVUZW1wbGF0
ZSA9ICJieXRlY29kZS1jYWNoZSIKLSAgICBlbHNpZiAoJGhvc3RPUyA9PSAibGludXgiICYmICRh
cmNoaXRlY3R1cmUgIT0gIm1pcHMiKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUt
Y2FjaGVYWFhYWFgiCi0gICAgZWxzZQotICAgICAgICBza2lwCi0gICAgICAgIHJldHVybgotICAg
IGVuZAorICAgICMgT09QUworICAgICNpZiAoJGhvc3RPUyA9PSAiZGFyd2luIikKKyAgICAjICAg
IGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1jYWNoZSIKKyAgICAjZWxzaWYgKCRob3N0T1MgPT0g
ImxpbnV4IiAmJiAkYXJjaGl0ZWN0dXJlICE9ICJtaXBzIikKKyAgICAjICAgIGZpbGVUZW1wbGF0
ZSA9ICJieXRlY29kZS1jYWNoZVhYWFhYWCIKKyAgICAjZWxzZQorICAgICMgICAgc2tpcAorICAg
ICMgICAgcmV0dXJuCisgICAgI2VuZAogCi0gICAgb3B0aW9ucyA9IEJBU0VfT1BUSU9OUyArIEZU
TF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RTcGVjaWZpY1Jl
cXVpcmVkT3B0aW9ucwotICAgIGFkZFJ1bkNvbW1hbmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIs
IChwYXRoVG9IZWxwZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywg
ZmlsZVRlbXBsYXRlLnRvX3MsICp2bUNvbW1hbmQsICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25z
LCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52
KQorICAgICNvcHRpb25zID0gQkFTRV9PUFRJT05TICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMgKyAkdGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25zCisgICAgI2Fk
ZFJ1bkNvbW1hbmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxwZXJzICsgImJ5
dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRlLnRvX3MsICp2
bUNvbW1hbmQsICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVy
LCBzaW1wbGVFcnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQogZW5kCiAKIGRlZiBydW5CeXRl
Y29kZUNhY2hlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437285</attachid>
            <date>2021-09-03 11:00:53 -0700</date>
            <delta_ts>2021-09-03 11:47:05 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>422683</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MTg2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODMxLDYgKzgzMSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IH07CiAJ
CTUyRUVENzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFRUQ3OTMyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgw
MDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8q
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIw
MDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVk
U291cmNlMy1tbS5tbSAqLzsgfTsKQEAgLTE0MTYsMTAgKzE0MTcsMTAgQEAKIAkJQTM4Q0E1OUUy
NkREODRERTAwQzhEODRDIC8qIElTTzg2MDEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEzOENBNTlDMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmgg
Ki87IH07CiAJCUEzOEQyNTBFMjU4MDBENDQwMDQyQkZERCAvKiBKU0FycmF5QnVmZmVyUHJvdG90
eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTM4RDI1MEQyNTgwMEQ0MzAwNDJCRkREIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVJbmxp
bmVzLmggKi87IH07CiAJCUEzOEQ1QkZDMjY2NkQzREEwMEExMDlBNiAvKiBJbkJ5U3RhdHVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzhENUJGQTI2
NjZEM0RBMDBBMTA5QTYgLyogSW5CeVN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUEzRUU4NTQzMjYyNTE0QjAwMEZDOUI4RCAvKiBJbnRs
V29ya2Fyb3VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMzc2MTk0MDI2MjUxMjdDMDBDQkNCQTkgLyogSW50bFdvcmthcm91bmQuY3BwICovOyB9
OwogCQlBM0M3RURCNjI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTNDN0VE
QjAyNkIwREIzNjAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCAqLzsgfTsK
IAkJQTNDN0VEQjkyNkIwREIzODAwNEMzNEM1IC8qIFRlbXBvcmFsRHVyYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREIzMjZCMERCMzcw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uLmggKi87IH07CiAJCUEzQzdFREJBMjZCMERCMzgw
MDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzQzdFREI0MjZCMERCMzcwMDRDMzRDNSAv
KiBUZW1wb3JhbER1cmF0aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKKwkJQTNFRTg1NDMyNjI1MTRC
MDAwRkM5QjhEIC8qIEludGxXb3JrYXJvdW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzNzYxOTQwMjYyNTEyN0MwMENCQ0JBOSAvKiBJbnRsV29y
a2Fyb3VuZC5jcHAgKi87IH07CiAJCUEzRkY5QkM3MjIzNDc0OTEwMEIxQTlBQiAvKiBZYXJyRmxh
Z3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRkY5
QkM1MjIzNDc0NjYwMEIxQTlBQiAvKiBZYXJyRmxhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyog
SmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTUwM0ZBMTQxODhFMEZBRjAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJh
bWUuaCAqLzsgfTsKIAkJQTUwM0ZBMUUxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENh
bGxGcmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTUwM0ZBMTgxODhFMEZCMDAwMTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZVByb3RvdHlwZS5oICovOyB9OwpAQCAtMzY2Nyw2ICszNjY4LDggQEAKIAkJNTJDRDBGNjQyMjQy
RjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBwYXRoID0gZGZnL3Rlc3Rk
ZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQxMzA4RjIyMUNFMDNBMDA5
QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0g
Zm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNjI2RTAzOUIzMDA1
NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VsaW5lSklUQ29k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNzI2RTAzOUI0MDA1NEU0
MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VsaW5lSklU
Q29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkyMjQ5MkI4Njgw
MDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5j
dGlvbkFsbG93bGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkz
MjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
dW5jdGlvbkFsbG93bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1
QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI1Niw2ICs2MjU5LDggQEAKIAkJCQk2Qjc2N0U3QTI2
NzkxRjI3MDAxN0Y4RDEgLyogQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaCAqLywKIAkJCQk3MjM5
OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLywKIAkJCQk3MjM5
OThGNTI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8sCisJCQkJNTJERDAw
MDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8sCisJCQkJNTJERDAw
MDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovLAogCQkJCTBGNjRCMjZG
MUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGNjRCMjcwMUE3
ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4MzkyRDFCQUNBOUQz
MDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApAQCAtOTY5Niw2ICs5NzAxLDcgQEAK
IAkJCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTgg
LyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlDQzg5MTkzQUM2MEEw
MDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzYx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgko
cmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCwxMCBAQCBvcF9ncm91cCA6
UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAg
IHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRUeXBl
cywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAogICAgIH0sCiAgICAgbWV0YWRhdGE6
IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJp
dGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZhbHVl
UHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAgQEAgb3BfZ3JvdXAgOlVuYXJ5SW5Q
bGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7CiAgICAgICAgIHNyY0RzdDogVmly
dHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAg
ICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZQor
ICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDp0
b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIGRzdDog
VmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWdu
ZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5
QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioK
ICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
T3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBA
IFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJu
ICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
K3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4
KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhw
ciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dp
dGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3lt
Ym9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRvclByb2Zp
bGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dDogcmV0dXJuIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYg
Y29uc3RleHByIChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3JfbmV4dCkgeworICAg
ICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JO
ZXh0Ojpjb21wdXRlTmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0
UmVzdWx0UHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXREb25lOiBy
ZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkRvbmVQcm9maWxlKCk7CisgICAgICAg
IGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZlZhbHVlUHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSBlbHNlIAorICAgICAgICByZXR1cm4g
Qnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGVNZXRhZGF0YT4KIGJvb2wgaGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2Rl
TWV0YWRhdGEmIG1ldGFkYXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlu
a0luZm86OnVubGluayhWTSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwog
fQogCi1Db2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZh
c3RQYXRoU3RhcnQoKQotewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4obV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBS
RUxFQVNFX0FTU0VSVCghaXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2Fs
bExpbmtJbmZvOjpzZXRNYXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gdmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoaXNEaXJlY3QoKSAmJiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25E
YXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsK
K30KKwogdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBo
YW5kbGVTcGVjaWZpY0NhbGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgs
MjMgKzI5OSwxMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAg
ICAgbV9mcmFtZVNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMg
dXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNU
YWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAg
ICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJS
ZWcpOwotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyks
IGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0g
Y2FsbExpbmtJbmZvR1BSOwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5s
YWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50
ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBzbG93UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVz
ZURhdGFJQyA9PSBVc2VEYXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIp
OyAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyAr
MzEyLDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAg
ICAgICAgZ29Qb2x5bW9ycGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9u
WmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWND
YWxsZWVNYXNrKSk7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAg
fQotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7
CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1v
cnBoaWMubGluaygmaml0KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBz
dGFjayBwcmVwLgogICAgICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwg
SlNFbnRyeVB0clRhZyk7CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNo
UHRyV2l0aFBhdGNoKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hl
Y2ssIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAg
ICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsK
ICAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mbyk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
dS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihjYWxsZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEz
ICszNDQsMzQgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDIHVzZURhdGFJQykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIG51bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisK
KyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0lu
Zm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1
LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJ
bmZvR1BSLCB1c2VEYXRhSUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBV
c2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxD
YWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxs
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNU
YWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwg
Y2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7
CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0
UGF0aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6
Tm8sIGlzVGFpbENhbGwoKSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVn
KTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwg
Y2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNG
YXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7Cisg
ICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxM
aW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxD
YWxsKSk7CiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2Fs
bEhlbHBlcnMmIGppdCkKQEAgLTM2OSwxNyArMzgxLDMwIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0U2xvd1BhdGgoVk0mIHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50
cnlQdHJUYWcpOwogfQogCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZN
JiwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0
Lm1vdmUoY2FsbExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERl
c3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86Omlu
aXRpYWxpemVEYXRhSUMoVk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxs
TGlua0luZm8sIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7Cisg
ICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29k
ZUluZGV4KTsKKyAgICBzZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNh
bGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25l
TG9jYXRpb247CisgICAgaWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEp
CisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZs
ZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzog
dGltZSBmb3IgcmVmIGNvdW50aW5nPworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVz
KTsKKyAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAg
ICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwog
dm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRh
SUNzKFVzZURhdGFJQzo6Tm8pOwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVs
KCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQu
bmVhckNhbGwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CiAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CkBAIC0zOTcsNyArNDIyLDcg
QEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhcwogCiAgICAgYXV0byBm
YXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgICAg
IHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKICAgICB9KTsKIAogICAgIC8vIC0gSWYgd2UncmUg
bm90IHlldCBsaW5rZWQsIHRoaXMgaXMgYSBqdW1wIHRvIHRoZSBzbG93IHBhdGguCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lv
biAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDExIEBAIGNsYXNzIEpTRnVuY3Rpb247CiBl
bnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiBzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGE7CiAK
K3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbzsKKwogY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVi
bGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIHB1YmxpYzoKLSAgICBl
bnVtIENhbGxUeXBlIHsKKyAgICBlbnVtIENhbGxUeXBlIDogdWludDhfdCB7CiAgICAgICAgIE5v
bmUsCiAgICAgICAgIENhbGwsCiAgICAgICAgIENhbGxWYXJhcmdzLApAQCAtMTY1LDYgKzE2Nyw4
IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgfQogCisg
ICAgdm9pZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgVW5saW5rZWRDYWxsTGlua0luZm8mLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKwogICAgIEdQUlJlZyBjYWxs
ZWVHUFIoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsgfQogICAgIAogICAgIGVudW0gY2xh
c3MgVXNlRGF0YUlDIDogdWludDhfdCB7CkBAIC0xNzMsMTMgKzE3NywxNiBAQCBwdWJsaWM6CiAg
ICAgfTsKIAogcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQ
YXRoSW1wbChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBib29sIGlzVGFp
bENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5V
U0VEX1JFVFVSTjsKIHB1YmxpYzoKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5V
U0VEX1JFVFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxs
KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAg
ICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXRE
aXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9T
dHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsy
MTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7
CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25j
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMw
OCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlw
ZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAg
fQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgx
LDcgKzM4Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OworCisgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOworCiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247CiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb247
CiAgICAgdW5pb24gVW5pb25UeXBlIHsKQEAgLTM5Nyw2ICs0MDAsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsTG9j
YXRpb247CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0
clRhZz4gbV9jYWxsZWVMb2NhdGlvbjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IG1fc2xvd1BhdGhTdGFydDsKKyAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKICAgICAgICAgfSBjb2Rl
SUM7CiAgICAgfSB1OwogCkBAIC00MjQsNiArNDI4LDEzIEBAIGlubGluZSBDb2RlT3JpZ2luIGdl
dENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4o
KTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0
aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJbmZv
OjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVE
YXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNyArMzcwLDgg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2FuJ3Qg
Z2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJvY2Vz
cyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJvZHVj
ZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5lc3Mg
YW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2YgYW4g
VW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhlIGxp
dmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNpZGUg
VW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBiZXR3
ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhlIGJ5
dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5nIGFu
IFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CkBAIC00NjYsNiArNDY3
LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAg
YnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRD
b2RlLT5iaW5hcnlBcml0aFByb2ZpbGUoYnl0ZWNvZGUubV9wcm9maWxlSW5kZXgpOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorI2RlZmluZSBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklM
RShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURB
VEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2Vk
Q29kZS0+dW5hcnlBcml0aFByb2ZpbGUoYnl0ZWNvZGUubV9wcm9maWxlSW5kZXgpOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0
cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MjgsMTQgKzU0MiwxNCBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQ
cm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTkso
T3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAg
IExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcElu
YykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BN
dWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAg
ICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktf
V0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5B
UllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc4OSw2ICs4MDMs
NzQgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3du
ZXJFZGdlLnNldCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZt
LCB0aGlzKSk7CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5l
Q29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPiBqaXRDb2RlKQoreworICAgIHNldEpJVENvZGUoaml0
Q29kZS5jb3B5UmVmKCkpOworCisgICAgeworICAgICAgICBjb25zdCBhdXRvJiBqaXRDb2RlTWFw
ID0gdGhpcy0+aml0Q29kZU1hcCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7CisgICAgICAgICAgICBIYW5kbGVySW5m
byYgaGFuZGxlciA9IGV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAvLyBGSVhNRTog
PHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KKyAgICAgICAgICAgIGhhbmRsZXIubmF0aXZlQ29k
ZSA9IGppdENvZGVNYXAuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdn
ZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsK
KyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBhdXRv
JiBqaXREYXRhID0gZW5zdXJlSklURGF0YShsb2NrZXIpOworCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGppdERhdGEubV9qaXRDb25zdGFudFBvb2wuaXNFbXB0eSgpKTsKKyAgICAgICAgaml0RGF0
YS5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5tX2NvbnN0
YW50UG9vbC5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGppdENvZGUt
Pm1fY29uc3RhbnRQb29sLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvIGVudHJ5ID0g
aml0Q29kZS0+bV9jb25zdGFudFBvb2wuYXQoaSk7CisgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5
LnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxP
YmplY3Q6CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IG1f
Z2xvYmFsT2JqZWN0LmdldCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbzogeworICAgICAgICAgICAg
ICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9ICpzdGF0aWNf
Y2FzdDxVbmxpbmtlZENhbGxMaW5rSW5mbyo+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAg
ICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0RGF0YS5tX2NhbGxMaW5rSW5mb3Mu
YWRkKENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCkpOworICAg
ICAgICAgICAgICAgIC8vIE9PUFM6IGRvbid0IGhhcmRjb2RlIHRoZXNlIHJlZ2lzdGVycyBsaWtl
IHRoaXMuCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFsaXplRGF0YUlDKHZt
KCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIp
OworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBjYWxsTGlu
a0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKKyAgICAg
ICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvID0g
KnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRyeS5wYXlsb2FkKTsK
KyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBqaXREYXRhLm1f
c3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUsIENvZGVPcmlnaW4odW5s
aW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8t
PmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyh0aGlzLCB1bmxpbmtlZFN0
dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0g
c3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsOiB7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5w
YXlsb2FkKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0g
ZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHI6
IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFu
dFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3dp
dGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBHbG9iYWxDb2RlOgorICAgIGNhc2UgTW9kdWxl
Q29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZ1bmN0aW9uQ29kZToKKyAgICAg
ICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRl
dGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgorICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0
aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5J
bmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlz
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQog
ewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtMzA3OSw3ICszMTYxLDcgQEAgdW5zaWduZWQgQ29k
ZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBjYXNl
IEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVy
Q291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZv
cih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAj
aWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMjk1LDEzICszMzc3LDEzIEBAIEJpbmFyeUFyaXRoUHJv
ZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgp
KSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wQWRkPigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wQWRk
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfbXVsOgotICAg
ICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8
T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kaXY6
Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1f
YXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMz
MTMsMTEgKzMzOTUsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0
aAogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX25lZ2F0ZToK
LSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0
aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhp
cykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNh
c2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERlYz4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiQXJyYXlQcm9maWxlLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5o
IgogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKQEAgLTE1OCw3ICsxNTksOSBAQCBwdWJsaWM6
CiAgICAgTWV0YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0
YWRhdGEuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJl
dHVybiBtX251bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0
ZXJzKHVuc2lnbmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwKCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPZkFyZ3VtZW50c1RvU2tp
cDsgfQogCkBAIC0xNjcsNyArMTcwLDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bVZhcnMo
KSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KICAgICB1bnNpZ25lZCBudW1UbXBzKCkgY29u
c3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVj
a3BvaW50VG1wczsgfQogCi0gICAgdW5zaWduZWQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7
IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251
bVBhcmFtZXRlcnMpOyB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAg
LTIzMiwxNiArMjM0LDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJl
YWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3BvaW50cygpOwog
Ci0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7
Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYmFjayB0aGUgb3B0aW1pemF0aW9u
IHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlzIGB0aGlzYCBhbmQgd2UncmUgaW4gc2xv
cHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0g
c3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAtMjY2LDggKzI1OCwxMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBnZXRJQ1N0YXR1c01hcChJQ1N0YXR1c01hcCYgcmVzdWx0KTsKICAgICAKICNp
ZiBFTkFCTEUoSklUKQorICAgIC8vIE9PUFM6IG1vdmUgYXJpdGhtZXRpYyBJQ3MgYW5kIHN3aXRj
aCB0YWJsZXMgb3V0IG9mIGhlcmUsIGFuZCBvbnRvIEpJVENvZGUuCiAgICAgc3RydWN0IEpJVERh
dGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICAgICAgQmFnPFN0cnVjdHVy
ZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKICAgICAgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsK
QEAgLTI4Miw5ICsyNzYsMTMgQEAgcHVibGljOgogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENU
b0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXND
YWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1h
cDsKKworICAgICAgICBGaXhlZFZlY3Rvcjx2b2lkKj4gbV9qaXRDb25zdGFudFBvb2w7CisgICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwgbV9qaXRDb25zdGFudFBvb2wpOyB9CiAgICAgfTsKIAor
ICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29k
ZT4pOworCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkKQEAgLTI5
Myw2ICsyOTEsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGFT
bG93KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkpJVERhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2pp
dERhdGEpOyB9CisKICAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxl
Kik7CiAgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwogICAg
IEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwpAQCAtMzIyLDE1ICsz
MjIsMTAgQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRv
IGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0luZm8qIGdl
dENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAg
dm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAgIHsKLSAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBlbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKLSAgICB9CiAg
ICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCiAgICAgewotICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVKSVREYXRh
KGxvY2tlcikubV9qaXRDb2RlTWFwOworICAgICAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklU
Q29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1faml0Q29kZU1hcDsKICAgICB9CiAKICAgICB2b2lk
IHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4m
Jik7CkBAIC00NzIsNiArNDY3LDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5hbWVGb3JSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFy
Z3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1l
bnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQ
cm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykg
fHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKQEAgLTU3Miw2ICs1NjgsNyBAQCBwdWJsaWM6CiAgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5n
ZXQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0
YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihy
ZWcpOyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihpbmRleCk7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9jb25zdGFudFJlZ2lzdGVycykg
KyBkZWNsdHlwZShtX2NvbnN0YW50UmVnaXN0ZXJzKTo6ZGF0YU1lbW9yeU9mZnNldCgpOyB9CiAK
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJu
IG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlv
bkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNjAxLDYgKzU5
OCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7CiAgICAg
ICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAg
ICB9CisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFi
bGVJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4o
bV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgIH0K
KyAgICB2b2lkKiBiYXNlbGluZUpJVENvbnN0YW50UG9vbCgpCisgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
KTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wuZGF0YSgpOwor
ICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxl
cygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29k
ZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTYxMSw2ICs2MTgs
MTEgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwogICAgICAg
ICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07
CiAgICAgfQorICAgIFN0cmluZ0p1bXBUYWJsZSYgYmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUoaW50IHRhYmxlSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5l
SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVy
T2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOyB9CkBAIC03OTcsNiArODA5LDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3Rz
OyB9CiAgICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1
Z2dlclJlcXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVx
dWVzdHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVx
dWVzdHMpOyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2lu
dHMpOwogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykK
QEAgLTgzOCw2ICs4NTEsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2Nr
IG1fbG9jazsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJp
dGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBF
TkFCTEUoSklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBE
Rkc6OkNhcGFiaWxpdHlMZXZlbApAQCAtOTA2LDExICs5MjAsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQ29kZUJsb2NrLCBtX21ldGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKTsgfQogCi0gICAgYm9vbCBsb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCi0gICAgewotICAgICAgICAvLyBT
b21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRo
ZXkgcnVuLgotICAgICAgICByZXR1cm4gIW1fdW5saW5rZWRDb2RlLT5pc0J1aWx0aW5GdW5jdGlv
bigpOwotICAgIH0KKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9y
RnV6emluZ0Vhcmx5UmV0dXJuKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluYWxpemVM
TEludElubGluZUNhY2hlcygpOwpAQCAtMTAwOCw3ICsxMDE4LDkgQEAgcHJpdmF0ZToKICAgICBT
dHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBS
ZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29k
ZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jawpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9j
ayk7CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsg
fQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0
YWRhdGEuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGEKIAogc3RydWN0IEdldEJ5SWRN
b2RlTWV0YWRhdGFBcnJheUxlbmd0aCB7CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCwgYXJyYXlQcm9maWxl
KTsgfQogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxl
bmd0aCkgPT0gMTIpOwogCkBAIC04OCw2ICs4OSw3IEBAIHVuaW9uIEdldEJ5SWRNb2RlTWV0YWRh
dGEgewogICAgICAgICBHZXRCeUlkTW9kZSBtb2RlOwogICAgICAgICB1aW50OF90IGhpdENvdW50
Rm9yTExJbnRDYWNoaW5nOyAvLyBUaGlzIG11c3QgYmUgemVybyB3aGVuIHdlIHVzZSBQcm90b0xv
YWQgbW9kZS4KICAgICB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2RlKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9CiAgICAg
R2V0QnlJZE1vZGVNZXRhZGF0YURlZmF1bHQgZGVmYXVsdE1vZGU7CiAgICAgR2V0QnlJZE1vZGVN
ZXRhZGF0YVVuc2V0IHVuc2V0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5n
dGggYXJyYXlMZW5ndGhNb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODUsNiArMzg1LDggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKAog
ICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCisvLyBPT1BTOiBNYWtlIHRoaXMgc3R1
ZmYgd29yayB3aXRoIGRhdGEgaWNzIHRvIG5vdCBhc3N1bWUgaW5saW5lIGFjY2Vzcy4KKwogdm9p
ZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNj
ZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQpCiB7CiAgICAgaWYg
KGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKQEAgLTQwNCw5ICs0MDYsMTIgQEAgdm9pZCBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2ly
ZVN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFy
Z2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIE9P
UFM6IG1ha2Ugc29tZSB2ZXJzaW9uIG9mIElubGluZUFjY2VzcyBmb3IgYmFzZWxpbmUuIFBlcmhh
cHMgbWFrZSBpdCBkYXRhIGRyaXZlbi4gT3IgcGVyaGFwcyBoYXZlIHRoZSBjb2RlCisgICAgICAg
IC8vIGJlIHNoYXJlZCBzb21laG93IGJldHdlZW4gVW5saW5rZWRDb2RlQmxvY2tzLgorCiAgICAg
ICAgIC8vIElmIGl0IGlzIG5vdCBHZXRCeUlkLWxpa2UtdGhpbmcsIHdlIGRvIG5vdCBlbWl0IG5v
cCBzbGVkIChlLmcuIEdldEJ5VmFsKS4KICAgICAgICAgLy8gVGhlIGNvZGUgaXMgYWxyZWFkeSBh
biBpbmRpcmVjdCBqdW1wLCBhbmQgb25seSB0aGluZyB3ZSBzaG91bGQgZG8gaXMgcmVwbGFjaW5n
IG1fY29kZVB0ci4KLSAgICAgICAgaWYgKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikg
eworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQgJiYgc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CiAgICAgICAgICAgICAvLyBJ
ZiBtX2NvZGVQdHIgaXMgcG9pbnRpbmcgdG8gc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9u
LCB0aGlzIG1lYW5zIHRoYXQgSW5saW5lQWNjZXNzIGNvZGUgaXMgbm90IGEgc3R1YiBvbmUuCiAg
ICAgICAgICAgICAvLyBXZSByZXdyaXRlIHRoaXMgd2l0aCB0aGUgc3R1Yi1iYXNlZCBkaXNwYXRj
aGluZyBjb2RlIG9uY2UsIGFuZCBjb250aW51ZSB1c2luZyBpdCB1bnRpbCB3ZSByZXNldCB0aGUg
Y29kZS4KICAgICAgICAgICAgIGlmIChzdHViSW5mby5tX2NvZGVQdHIuZXhlY3V0YWJsZUFkZHJl
c3MoKSA9PSBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSkgewpAQCAtNDIxLDYgKzQyNiw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNK
dW1wSW5BY2MKICAgICAgICAgICAgICAgICB9KSwgIklubGluZUFjY2VzczogbGlua2luZyBzdHVi
IGNhbGwiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHN0dWJJbmZvLm1f
Y29kZVB0ciA9IHRhcmdldDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRh
LmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
dGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBP
VkVSTE9BRF9CSVRXSVNFX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJdGVyYXRp
b25Nb2RlTWV0YWRhdGEgewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SXRlcmF0aW9uTW9kZU1ldGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0YXRpY19hc3NlcnQo
c2l6ZW9mKGRlY2x0eXBlKHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRpb25Nb2RlKSk7CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0lu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRD
YWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKExMSW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KIAogcHJp
dmF0ZToKICAgICB1aW50cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQg
eyB1bmxpbmtlZEJpdCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIK
IAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgog
I2luY2x1ZGUgIlJlcGF0Y2guaCIKIApAQCAtMjg1LDYgKzI4Niw3IEBAIHZvaWQgU3RydWN0dXJl
U3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ss
ICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vz
c1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CiAg
ICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZhbCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgpAQCAtNDMwLDYgKzQz
MiwyMDQgQEAgQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1f
Y2FjaGVUeXBlID0gbmV3Q2FjaGVUeXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBl
ID0gdW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHVi
SW5mby5zdGFydDsgLy8gT09QUzogZG8gd2UgbmVlZCBhIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAg
ICBkb25lTG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93
UGF0aFN0YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlv
bjsKKyAgICBjYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KHVubGlu
a2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpOworICAgIGNvZGVPcmlnaW4gPSBD
b2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgbV9jb2RlUHRy
ID0gc2xvd1BhdGhTdGFydExvY2F0aW9uOworCisgICAgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICBpZiAoYWNjZXNzVHlwZSA9PSBB
Y2Nlc3NUeXBlOjpHZXRCeUlkICYmIHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkpIHsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9yX25leHQsIHdlIGNhbid0IGNsb2Ji
ZXIgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgZWl0aGVyLgorICAgICAgICB1c2VkUmVnaXN0ZXJzLmFk
ZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gpOworICAgIH0KKworICAgIHN3aXRj
aCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgor
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZv
LnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAg
ICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5l
Y21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRT
ZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJp
dmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICBz
d2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6
Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlz
U3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAg
ICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAg
ICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gdW5saW5r
ZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRC
eVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2
YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpT
ZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFBy
aXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25D
aGVja1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBz
d2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgor
ICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlH
UFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVH
UFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAgICAgICBoYXNDb25zdGFu
dElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gSW52YWxpZEdQUlJlZzsK
KyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlm
aWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAg
ICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIHZhbHVlR1BSID0gQmFz
ZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MucHJvdG90eXBl
R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICAgICAgbV9zdHVi
SW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFu
ZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNl
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3Bl
cnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFs
dWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHVi
SW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBoYXNDb25zdGFudElk
ZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAg
IHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9z
dHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAg
ICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9
IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRX
aXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0
aGlzVmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAg
ICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgor
ICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5m
b0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBpZiAo
YWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQdXRCeVZhbCkKKyAgICAgICAgICAgIG1fYXJyYXlQ
cm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlm
aWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAg
YmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBy
ZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKICNpZiBBU1NFUlRfRU5BQkxFRAogdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y2hlY2tDb25zaXN0ZW5jeSgpCiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJK
SVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAi
T3B0aW9ucy5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5o
IgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgpAQCAt
NTYsNiArNTcsNyBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgewogICAgIEdldEJ5
VmFsLAogICAgIFB1dEJ5SWQsCiAgICAgUHV0QnlWYWwsCisgICAgUHV0UHJpdmF0ZU5hbWUsCiAg
ICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC03OCw2ICs4
MCw4IEBAIGVudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKICAgICBTdHJpbmdMZW5ndGgK
IH07CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworCiBjbGFzcyBTdHJ1Y3R1
cmVTdHViSW5mbyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1YkluZm8p
OwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtOTgsNiArMTAyLDggQEAgcHVibGlj
OgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAorICAgIHZvaWQg
aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8mKTsKKwogICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwog
CiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBk
ZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCkBAIC00NDcsNiArNDUzLDE4
IEBAIGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW4KICAgICB9CiB9CiAK
K3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJp
dmF0ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSB9OworICAgIEVD
TUFNb2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgpIH07CisgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4OworICAgIC8vIE9PUFM6IERvIHdlIG5lZWQgc3RhcnQgZm9yIGRhdGEg
SUNzPworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsg
Ly8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNh
Y2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW5zdGFuY2VvZicg
Y2FjaGVzLgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2Nh
dGlvbjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xvd1Bh
dGhTdGFydExvY2F0aW9uOworfTsKKwogI2Vsc2UKIAogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNiw0
ICszMTYsMTYgQEAgaW50IFVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2ZmcwogICAg
IHJldHVybiBtX291dE9mTGluZUp1bXBUYXJnZXRzLmdldChieXRlY29kZU9mZnNldCk7CiB9CiAK
KyNpZiBBU1NFUlRfRU5BQkxFRAorYm9vbCBVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRlbnRpZmll
cihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIC8vIE9PUFM6IGRvIHdoYXQgQ29kZUJs
b2NrIGRvZXMgYW5kIG1ha2UgYSBoYXNoIHRhYmxlPworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRpZmll
cihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2Rl
Q29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQ
cm9maWxlLmgiCkBAIC02Miw2ICs2Myw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xh
c3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGlu
ZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29u
c3RhbnQgOiBpbnQzMl90OwogCkBAIC0xNzUsNiArMTc3LDcgQEAgcHVibGljOgogCiAgICAgY29u
c3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMo
KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07
IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudElu
ZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9j
b25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIxMCwxNSBA
QCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAog
ICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25z
dCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgewor
ICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0
KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0
aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5z
dHJ1Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBj
b25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51
bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAg
dW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDYg
KzM0NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRl
cygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQg
dG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFp
c0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgYm9v
bCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CisjZW5kaWYKIAogcHJvdGVjdGVk
OgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0
IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwpAQCAtMzk0
LDYgKzQxNSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJl
cyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRy
PEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAg
Q29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFy
c2VNb2RlOwpAQCAtNDEwLDYgKzQzMiw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogYmlu
ZCBhIGJldHRlciBwbGFjZSB0byBzdG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlB
cml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0
aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtNDU1LDYgKzQ4MCwyOCBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVj
dGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0
IEluc3RydWN0aW9uKiBwYykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVt
cE9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5
QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5
QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBl
bmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV91
bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKFVuYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJp
dGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsg
fQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7
IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQogCiBwcml2YXRlOgogICAgIHVzaW5n
IE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0
LCBpbnQ+OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MTg2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKICAgICBib29sIHdh
c0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9CiAgICAgYm9vbCBoYXNDaGVj
a3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50cygpOyB9
CiAgICAgYm9vbCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aGFz
VGFpbENhbGxzKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUoKSB7IHJl
dHVybiBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCk7IH0KKyAgICB1bnNpZ25l
ZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFy
aXRoUHJvZmlsZSgpOyB9CiAKICAgICAvLyBVcGRhdGluZyBVbmxpbmtlZENvZGVCbG9jay4KICAg
ICB2b2lkIHNldEhhc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFzQ2hlY2twb2lu
dHMoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0
YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NCw2ICs2NCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFVubGlua2VkTWV0YWRhdGFUYWJsZSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9wY29kZT4KKyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9w
Y29kZSYgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQpOworICAg
ICAgICB1aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMy
KClbT3Bjb2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07
CisgICAgICAgIHJldHVybiBiYXNlVHlwZU9mZnNldCArIHNpemVvZih0eXBlbmFtZSBPcGNvZGU6
Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7CisgICAgfQorCiBwcml2YXRlOgogICAg
IGVudW0gRW1wdHlUYWcgeyBFbXB0eSB9OwogCkBAIC0xMDEsNiArMTA5LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2lu
ZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJ
KHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQCB0ZW1wbGF0ZTx1bnNp
Z25lZCBudW1iZXJPZkJ1Y2tldHNBcmd1bWVuCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1
Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3Bl
Y0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldElu
ZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3Bl
Y0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQpAQCAtMTM0LDcgKzEz
Myw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgCiAgICAgICAgIHJldHVy
biBtX3ByZWRpY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNr
ZXRzW3RvdGFsTnVtYmVyT2ZCdWNrZXRzXTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGlj
dGlvbiB7IFNwZWNOb25lIH07CkBAIC0xNTYsNiArMTU1LDcgQEAgc3RydWN0IFZhbHVlUHJvZmls
ZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldAogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZh
bHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgp
IDogVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPigpIHsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0c1swXSk7IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5OCw3
ICsxNTk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRVbmFyeQogICAg
ICAgICBlbWl0VW5hcnlPcDxPcE5vdD4oZHN0LCBzcmMpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5
cGUpOworICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSwgbV9jb2Rl
QmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IG9wX2JpdG5vdDoKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BCaXRub3Q+KGRzdCwgc3JjKTsKQEAg
LTE2OTYsMTMgKzE2OTYsMTMgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRU
eXBlTwogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluYyhSZWdpc3RlcklE
KiBzcmNEc3QpCiB7Ci0gICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcEluYzo6
ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsK
ICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdERlYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BEZWM6OmVtaXQodGhpcywgc3Jj
RHN0KTsKKyAgICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFy
eUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqPgogICAgICAgICBlbWl0
QmluYXJ5T3AoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBz
cmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJpbmFyeU9w
OjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMpOworICAgICAgICAgICAgQmluYXJ5
T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcywgbV9jb2RlQmxvY2stPmFkZEJp
bmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlz
aW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw2IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShW
TSYgdm0sIENhbGxGcmFtZSoKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNv
ZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgp
KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxs
VmFsaWQpOwogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VPU1JFbnRyeVRvREZHKCkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSwxMCAr
MzA5LDE1IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAg
ICAgICAgIHRydWVDYWxsZXIgPyBBc3NlbWJseUhlbHBlcnM6OlVzZUV4aXN0aW5nVGFnUmVnaXN0
ZXJDb250ZW50cyA6IEFzc2VtYmx5SGVscGVyczo6Q29weUJhc2VsaW5lQ2FsbGVlU2F2ZWRSZWdp
c3RlcnNGcm9tQmFzZUZyYW1lLAogICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86
OnJlZ1QxLCBHUFJJbmZvOjpyZWdUNCk7CiAKKyAgICAgICAgLy8gT09QUzogQ29uc2lkZXIgaWYg
d2UgbmVlZCB0byBkbyBhbnl0aGluZyBmb3IgYmFzZWxpbmUgcGIvbWV0YWRhdGEgcmVnaXN0ZXJz
CiAgICAgICAgIGlmIChjYWxsZXJJc0xMSW50KSB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVl
Q2FsbGVyKTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxl
ZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdp
c3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpKTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmluc3Ry
dWN0aW9uc1Jhd1BvaW50ZXIoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFz
ZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAodHJ1ZUNhbGxlcikgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7Cisg
ICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2Vs
aW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChp
bmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBKSVQ6OnNfbWV0YWRhdGFHUFIpKTsK
KyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFz
ZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkpLCBjYWxs
ZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBKSVQ6OnNfY29u
c3RhbnRzR1BSKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+
aXNWYXJhcmdzKCkpCkBAIC00MDQsNiArNDA5LDkgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJn
ZXQoVk0mIHZtLCBDQ2FsbAogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOwog
ICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4o
KS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZSB7CisgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxl
KCkpLCBKSVQ6OnNfbWV0YWRhdGFHUFIpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVKSVRDb25zdGFudFBvb2wo
KSksIEpJVDo6c19jb25zdGFudHNHUFIpOworCiAgICAgICAgIGNvZGVCbG9ja0ZvckV4aXQtPm1f
aGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBleGl0SW5k
ZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJl
dmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczMCw2ICs3MzAsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0
YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlVGFnR1BSLCBjYWxsZWVQYXls
b2FkR1BSKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRl
ZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3Nl
ZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29k
ZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAgICAgICAgICAgIEVkZ2UgYXJn
RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwpAQCAtODg5LDcg
Kzg5MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIAogICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAg
ICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxl
ZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywg
WyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEo
c2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBz
aHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MTg2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0NSw2ICs3NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1
ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVHUFIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBz
aHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1
ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2pp
dC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTg5Niw3ICs4OTcsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBz
bG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxs
ZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsK
KyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCht
X2ppdCwgY2FsbGVlR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFp
bENhbGwpIHsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURh
dGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0
LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgxODY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5ODUsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRQcml2YXRlTmEKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+
dXNlZFJlZ2lzdGVycygpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0
ZSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNv
ZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NU
eXBlOjpQdXRQcml2YXRlTmFtZSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6
OnBheWxvYWRPbmx5KGJhc2VHUFIpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlH
UFIpLCB2YWx1ZVJlZ3MsIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAKQEAgLTE0NzQ3LDcgKzE0NzQ3LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2Nv
cGVSZWcgPSBzY29wZS5ncHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2so
KSwgY2FsbFNpdGVJbmRleCk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
c2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0
KG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMTcsNyArNDMxNyw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0Y2goMCkgOiBJbnZhbGlk
R1BSUmVnOwogCiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeVZhbEdl
bmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5
cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBl
OjpQdXRCeVZhbCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZU
TEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRQ
cml2YXRlTmFtZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAKICAgICAgICAg
ICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CkBAIC0x
MDE5MSw2ICsxMDE5MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1BbGxvY2F0ZWRBcmdzOyArK2kpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChWYWx1ZVJlY292ZXJ5
Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVE
YXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgICAgICAgICBz
aHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFk
ZENhbGxMaW5rSW5mbyhzZW1hbnRpY05vZGVPcmlnaW4pOwpAQCAtMTAzNDksMTMgKzEwMzUwLDE0
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MuYXBwZW5k
KHBhcmFtc1sxICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOwogCiAgICAgICAgICAgICAgICAg
c2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bUFyZ3M7CisgICAgICAgICAgICAgICAgc2h1
ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2Fs
bGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogCiAgICAgICAgICAgICAgICAgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5m
byhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChD
YWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAg
ICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQs
IEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6
Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRh
KTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0
YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDY5OCw3
ICsxMDcwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsK
ICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZv
OjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0g
eworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9
KTsKQEAgLTEwOTc5LDcgKzEwOTgxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0
aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJ
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAg
ICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9N
ZXRhZGF0YS5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L01ldGFkYXRhLnJiCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Z2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjggQEAg
Y2xhc3MgTWV0YWRhdGEKICAgICBkZWYgc3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1w
dHk/CiAKLSAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAg
IGRlZiBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKKyAgICAg
ICAgICAgIGZpZWxkTmFtZXMubWFwIGRvIHxmaWVsZE5hbWV8CisgICAgICAgICAgICAgICAgIiN7
cHJlZml4fXN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51cGNhc2V9I3tm
aWVsZE5hbWVbMS4uXX0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fI3tm
aWVsZE5hbWV9KTsgfSIKKyAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisgICAgICAgIGVuZAor
CisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBmaWVsZE5hbWVzKQog
ICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAg
aWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlv
biB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07
IgorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRz
KHByZWZpeCArICcgICAgJywgdHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZpeH19OyIKICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9f
c30gbV8je2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmll
bGQudG9fcworICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2goZmllbGROYW1lKQor
ICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZE5hbWV9
OyIKICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAg
ICAgIGVuZAogCi0gICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZp
ZWxkcykKKyAgICAgICAgZmllbGROYW1lcyA9IFtdCisgICAgICAgIHByZWZpeCA9ICIgICAgICAg
ICIKKyAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBmaWVsZHMsIGZpZWxk
TmFtZXMpCisgICAgICAgIGZpZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5lcmF0ZU9mZnNldE9m
RnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKIAogICAgICAgICBpbml0cyA9IG5pbAogICAg
ICAgICBpZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZp
c2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5OCw4ICs2OTgsMTMgQEAgdm9pZCBBc3NlbWJseUhl
bHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZp
cnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJ
bmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVn
VDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdU
Myk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgaW5m
byk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92
aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9IG5l
YXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE3MTgsNiArMTcxOCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0
VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZv
aWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5r
SW5mbyopOwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAg
dm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5o
IgorCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCisjaW5j
bHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVEFkZElD
KiBNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlKSB7IHJldHVybiBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUTXVsSUMqIE1h
dGhJQ0hvbGRlcjo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUp
IHsgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRTdWJJQyogTWF0aElD
SG9sZGVyOjphZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyBy
ZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE5lZ0lDKiBNYXRoSUNIb2xk
ZXI6OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJu
IG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisKK3ZvaWQgTWF0aElDSG9sZGVyOjphZG9w
dE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcikKK3sKKyAgICBtX2FkZElDcyA9IFdURk1vdmUo
b3RoZXIubV9hZGRJQ3MpOworICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhlci5tX211bElDcyk7
CisgICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICBtX3N1YklDcyA9
IFdURk1vdmUob3RoZXIubV9zdWJJQ3MpOworfQorCitCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5l
SklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gd2l0aEFyaXR5Q2hlY2spCisgICAgOiBEaXJlY3RKSVRDb2RlKFdURk1vdmUoY29kZSksIHdp
dGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAsIE1hdGhJQ0hvbGRlcigp
Cit7IH0KKworQmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKCkKK3sKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5l
SklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxp
bmVKSVRDb2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9C
YXNlbGluZUpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgorI2luY2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRl
ICJKSVRDb2RlTWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvL2NsYXNzIEpJVEFkZElDOwor
Ly9jbGFzcyBKSVRNdWxJQzsKKy8vY2xhc3MgSklUU3ViSUM7CisvL2NsYXNzIEpJVE5lZ0lDOwor
Y2xhc3MgQmluYXJ5QXJpdGhQcm9maWxlOworY2xhc3MgVW5hcnlBcml0aFByb2ZpbGU7CitzdHJ1
Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBTaW1wbGVKdW1wVGFibGU7Citz
dHJ1Y3QgU3RyaW5nSnVtcFRhYmxlOworCitjbGFzcyBNYXRoSUNIb2xkZXIgeworcHVibGljOgor
ICAgIHZvaWQgYWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpOworICAgIEpJVEFkZElD
KiBhZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRNdWxJQyogYWRkSklU
TXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJp
bmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRo
UHJvZmlsZSopOworCisgICAgLyoKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3Is
IEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRBZGRJQyogYWRkTWF0aElD
KEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUQWRkSUMocHJvZmls
ZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTXVsR2VuZXJh
dG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE11bElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQ
cm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRNdWxJQyhwcm9maWxlKTsgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVROZWdHZW5lcmF0b3I+Ojp2YWx1ZT46
OnR5cGU+CisgICAgSklUTmVnSUMqIGFkZE1hdGhJQyhVbmFyeUFyaXRoUHJvZmlsZSogcHJvZmls
ZSkgeyByZXR1cm4gYWRkSklUTmVnSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPEdlbmVyYXRvciwgSklUU3ViR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJ
VFN1YklDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBh
ZGRKSVRTdWJJQyhwcm9maWxlKTsgfQorICAgICovCisKK3ByaXZhdGU6CisgICAgQmFnPEpJVEFk
ZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAgIEJhZzxKSVRO
ZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKK307CisKK2NsYXNz
IEpJVENvbnN0YW50UG9vbCB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29uc3RhbnQgPSB1bnNpZ25l
ZDsKKworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBHbG9iYWxPYmpl
Y3QsCisgICAgICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8sCisg
ICAgICAgIEZ1bmN0aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rpb25FeHByLAorICAgIH07CisKKyAg
ICBzdHJ1Y3QgVmFsdWUgeworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoZSBwb2ludGVyIHBhY2tl
ZC4KKyAgICAgICAgVHlwZSB0eXBlOworICAgICAgICB2b2lkKiBwYXlsb2FkOworICAgIH07CisK
KyAgICBKSVRDb25zdGFudFBvb2woKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQb29sKEpJ
VENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQb29sJiBvcGVyYXRv
cj0oSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKworICAgIENvbnN0YW50IGFkZChUeXBl
IHR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
cmVzdWx0ID0gbV9jb25zdGFudHMuc2l6ZSgpOworICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQo
VmFsdWUgeyB0eXBlLCBwYXlsb2FkIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHMuc2l6ZSgpOyB9
CisgICAgVmFsdWUgYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW2ldOyB9
CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50czsKK307CisKKworY2xh
c3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1YmxpYyBNYXRoSUNI
b2xkZXIgeworcHVibGljOgorICAgIEJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJU
YWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spOworICAgIH5C
YXNlbGluZUpJVENvZGUoKSBvdmVycmlkZTsKKworICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5m
bz4gbV91bmxpbmtlZENhbGxzOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5r
SW5mb3M7IC8vIE9PUFM6IG1ha2Ugc3VyZSB3ZSB2aXNpdCB0aGVzZSBzb21laG93LiBPciBhc3Nl
cnQgd2UgZG9uJ3QgaGF2ZSB0bywgc2luY2UgdGhleSdyZSB2aXJ0dWFsIGNhbGxzLgorICAgIEJh
ZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgIEZp
eGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZpeGVk
VmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAgIEpJ
VENvZGVNYXAgbV9qaXRDb2RlTWFwOworICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9v
bDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw3ICs1MCw3IEBAIHNpemVfdCBCYXNlbGluZUpJVFBsYW46OmNvZGVTaXplKCkgY29uc3QK
IAogQ29tcGlsYXRpb25SZXN1bHQgQmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6ZSgpCiB7Ci0gICAg
Q29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQoKTsK
KyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRocmVh
ZChtX2NvZGVCbG9jayk7CiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0
aW9uRmFpbGVkOgogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGVs
YXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDE2ICs0Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuUHJv
bG8KICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12b2lkIENDYWxsSGVs
cGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENh
bGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFk
b3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIo
U2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tl
dCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOwotICAg
IHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAgc3RvcmVQdHIoc2Nv
cGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6
UGFja2V0LCBzY29wZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jayks
IEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFj
a2V0LCBjb2RlQmxvY2spKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRl
eC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0No
aWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBDQ2FsbEhlbHBlcnM6
OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hhZG93UGFja2V0LCBH
UFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAgICBTaGFkb3dD
aGlja2VuKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpAQCAtNzIsNiArNjIs
MjggQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQogICAgIHN0b3Jl
UHRyKHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9CiAKKwordGVtcGxh
dGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93
Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRo
aXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCBmcmFtZSkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0No
aWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVD
VF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKKyAgICBzdG9yZVZh
bHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOworICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRy
ZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwg
c2NvcGUpKSk7CisgICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwg
T0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOworICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRl
SW5kZXgpKSk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQsIHRo
aXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwordm9pZCBDQ2Fs
bEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQs
IEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxvY2ssIENh
bGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNp
dGVJbmRleCk7Cit9CisKIHZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRMYW1iZGE8dm9p
ZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQogewog
ICAgIENDYWxsSGVscGVycyBqaXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ND
YWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0Nh
bGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4NDAsMTQgQEAgcHVi
bGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9sYXRpbGUgcmVnaXN0
ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRvcCBvZgogICAgIC8v
IHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQgbG9nU2hhZG93Q2hp
Y2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJl
ZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVC
bG9jayosIENhbGxTaXRlSW5kZXgpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDb2RlQmxvY2tUeXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBs
KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUs
IENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOwor
cHVibGljOgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRv
d1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0
ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisgICAgdm9pZCBsb2dT
aGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0
aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlSW5kZXgpOworCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBh
Y2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJl
U2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3Jh
dGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHJldmlzaW9uIDI4
MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
dm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVC
bG9jayogY29kZUJsb2NrKQogeworICAgIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb2RlQmxv
Y2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURh
dGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCog
cmVnaXN0ZXJTYXZlTG9jYXRpb25zKQorewogICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdp
c3RlcnMgeyBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkgfTsKLSAgICBjb25z
dCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zID0gY29kZUJsb2Nr
LT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJl
Z2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldCBlbnRyeSB7IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHJldmlz
aW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDEzIEBAIHB1YmxpYzoKICAgICBW
ZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJnczsKICAgICB1bnNpZ25lZCBudW1Mb2NhbHMgeyBVSU5U
X01BWCB9OwogICAgIHVuc2lnbmVkIG51bVBhc3NlZEFyZ3MgeyBVSU5UX01BWCB9OworICAgIHVu
c2lnbmVkIG51bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OyAvLyBPbiBvdXIgbWFjaGluZSBmcmFt
ZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVyTWFwPFZhbHVlUmVjb3Zlcnk+IHJl
Z2lzdGVyczsKICAgICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZhbGlkR1BSUmVnIH07
CiAKICAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqKTsKKyAgICB2
b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCop
OwogI2VuZGlmCiAgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHJldmlzaW9uIDI4
MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgQ2FsbEZyYW1lU2h1ZmZsZXI6OkNh
bGxGcmFtZVNodWZmbGVyKENDYQogICAgIDogbV9qaXQoaml0KQogICAgICwgbV9vbGRGcmFtZShk
YXRhLm51bUxvY2FscyArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycywgbnVsbHB0
cikKICAgICAsIG1fbmV3RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQotICAgICwgbV9hbGlnbmVkT2xkRnJhbWVTaXplKENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCi0gICAgICAgICsgcm91bmRBcmd1bWVudENv
dW50VG9BbGlnbkZyYW1lKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAs
IG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAr
IHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLm51bVBhcmFtZXRlcnMpKQogICAg
ICwgbV9hbGlnbmVkTmV3RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJz
CiAgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEuYXJncy5zaXpl
KCkpKQogICAgICwgbV9mcmFtZURlbHRhKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSAtIG1fYWxpZ25l
ZE9sZEZyYW1lU2l6ZSkKICAgICAsIG1fbG9ja2VkUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0OjphbGxS
ZWdpc3RlcnMoKSkKICAgICAsIG1fbnVtUGFzc2VkQXJncyhkYXRhLm51bVBhc3NlZEFyZ3MpCisg
ICAgLCBtX251bVBhcmFtZXRlcnMoZGF0YS5udW1QYXJhbWV0ZXJzKQogewogICAgIC8vIFdlIGFy
ZSBhbGxvd2VkIGFsbCB0aGUgdXN1YWwgcmVnaXN0ZXJzLi4uCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsgKQpAQCAtNDIxLDcgKzQyMSw3IEBA
IHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCBtX25ld0ZyYW1lQmFzZSk7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYXJndW1lbnRDb3VudE9LID0KICAgICAgICAgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbV9uZXdGcmFtZUJhc2UsCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygp
LT5udW1QYXJhbWV0ZXJzKCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIobV9udW1QYXJhbWV0ZXJzKSk7CiAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSArIENhbGxGcmFtZTo6
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0LmFuZDMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkp
LCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1fbmV3RnJhbWVCYXNl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVy
LmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZy
YW1lU2h1ZmZsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgZGF0YTsKICAgICAgICAgZGF0YS5udW1Mb2Nh
bHMgPSBudW1Mb2NhbHMoKTsKICAgICAgICAgZGF0YS5udW1QYXNzZWRBcmdzID0gbV9udW1QYXNz
ZWRBcmdzOworICAgICAgICBkYXRhLm51bVBhcmFtZXRlcnMgPSBtX251bVBhcmFtZXRlcnM7CiAg
ICAgICAgIGRhdGEuY2FsbGVlID0gZ2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7IENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSB9KS0+cmVjb3ZlcnkoKTsKICAgICAgICAgZGF0YS5hcmdzLnJlc2l6ZShhcmdD
b3VudCgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudCgpOyArK2kp
CkBAIC03OTgsNiArNzk5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBlcmZvcm1TYWZlV3JpdGVz
KCk7CiAgICAgCiAgICAgdW5zaWduZWQgbV9udW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAg
ICB1bnNpZ25lZCBtX251bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyODE4
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJu
QQogfQogCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUlu
ZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgOiBKU0ludGVyZmFjZUpJVCgmdm0s
IGNvZGVCbG9jaykKKyAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgbnVsbHB0cikKICAgICAsIG1f
aW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCiAgICAgLCBtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlcih2bSkKQEAgLTc3LDYgKzc3LDkgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQog
ICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7CisgICAgbV9wcm9maWxlZENvZGVC
bG9jayA9IGNvZGVCbG9jazsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrID0gY29kZUJsb2NrLT51
bmxpbmtlZENvZGVCbG9jaygpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtOTAsOCArOTMsOCBAQCB2
b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgICAgICByZXR1cm47CiAK
ICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0gICAgCi0gICAgc2tpcE9wdGltaXplLmFwcGVu
ZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3Vu
dGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRk
cmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQo
YnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRl
ckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
SklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdp
c3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBA
IC0xMTMsMTUgKzExNiwyMSBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRT
ZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNl
dC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpCit2b2lkIEpJ
VDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KQogeworICAg
IC8vIE9PUFM6IFRha2UgYSBib29sZWFuIG9yIHNvbWV0aGluZyBzYXlpbmcgaWYgd2UgY2FuIGJl
IG51bGwuCisgICAgYXV0byBvayA9IGJyYW5jaFRlc3RQdHIoWmVybywgcG9pbnRlclRvU2V0KTsK
ICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHBvaW50ZXJUb1NldCwg
V2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CisgICAgb2subGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25s
eUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQordm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25s
eUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1
YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhclJlYWRP
bmx5V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKSk7CisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlw
ZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFyUmVhZE9ubHlXYXRjaHBvaW50
KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBZGRy
ZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmFzc2VydFN0YWNr
UG9pbnRlck9mZnNldCgpCkBAIC0xMjksNyArMTM4LDcgQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNr
UG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDAp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5r
ZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdU
MCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsKQEAgLTE4MSwy
MSArMTkwLDQxIEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWMKICAg
ICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1dENvZGVCbG9ja1Rv
RnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV91
bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOworICAgIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVzdWx0KTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFi
bGVPclJhcmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGJyYW5j
aFRlc3RQdHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0
aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9u
UmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcp
LCByZXN1bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0
KCkpLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwg
RnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSksIHJlc3VsdCk7
CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
OjpvZmZzZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIocmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworfQorCiB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3Nl
KQotICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAg
ICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4iKTsK
ICAgICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3VtZW50
Q291bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3RydWN0
aW9uQ291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAK
ICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJsb2Nr
LT52bSgpOwogICAgIEJ5dGVjb2RlSW5kZXggc3RhcnRCeXRlY29kZUluZGV4KDApOworCisgICAg
Ly8gT09QUzogTWF5YmUgb25seSBkbyB0aGlzIGlmIHdlIGRpc2FibGUgc2hhcmluZyBzb21laG93
PworICAgIC8qCisgICAgVk0mIHZtID0gbV91bmxpbmtlZENvZGVCbG9jay0+dm0oKTsKICAgICBp
ZiAobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4ICYmIChtX2NvZGVCbG9jay0+aW5oZXJpdHM8
UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0czxNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrPih2bSkpKSB7CiAgICAgICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgb3B0
aW1pemF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFtQ29kZUJsb2NrJ3MgZXhhY3RseSBv
bmNlLgogICAgICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBiZSBpbnZhbGlkIG90aGVy
d2lzZS4gV2hlbiB0aGUgTExJbnQgZGV0ZXJtaW5lcyBpdCB3YW50cyB0bwpAQCAtMjM2LDYgKzI2
NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KKyAgICAqLwogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xv
d0Nhc2UgPSAwOwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsg
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CkBAIC0yNzgs
OCArMzA4LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAg
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAg
ICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkg
ewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAg
ICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJs
b2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0
LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZw
KCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC01
MjcsNyArNTU3LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAg
ICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICBjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgCiAgICAgICAgIGlm
IChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dMbigiQmFzZWxpbmUg
SklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgIiwgbV9ieXRlY29kZUluZGV4LCAiIGF0IG9mZnNl
dCAiLCAobG9uZylkZWJ1Z09mZnNldCgpKTsKQEAgLTU0NSw4ICs1NzUsOCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25z
Ojp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVn
KFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAg
ICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gU0xPVyAiLCBvcGNv
ZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwg
Y29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC02NzQsNTUgKzcwNCw1
NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKK3Zv
aWQgSklUOjplbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygp
Cit7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRh
ZGF0YVRhYmxlKCkpLCBzX21ldGFkYXRhR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkp
LCBzX2NvbnN0YW50c0dQUik7Cit9CisKK3ZvaWQgSklUOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCkKK3sKKyAgICBCYXNlOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zm
c2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKIHZvaWQg
SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKIHsKLSAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fY29kZUJsb2Nr
LT5jYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICAvLyBPT1BTOiBNYXliZSB0aGlzIHNob3VsZCBiZSBk
b25lIG9uIHVubGlua2VkIGNvZGUgYmxvY2s/CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2
ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBzd2l0Y2gg
KGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAgICAgIG1fY2FuQmVP
cHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZh
bHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVB
bmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwotICAgICAgICBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmls
aW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAg
IHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNlIEdsb2JhbENvZGU6
Ci0gICAgY2FzZSBNb2R1bGVDb2RlOgotICAgIGNhc2UgRXZhbENvZGU6Ci0gICAgICAgIG1fY29k
ZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5
IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxs
LgotICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgotICAgICAgICBt
X2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGxldmVsKSAm
JiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwotICAgICAgICBicmVhazsK
LSAgICB9CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1w
VGFibGVzKCkgfHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGVzKCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9j
ay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dp
dGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEo
bG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+
KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKLSAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
cygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fY29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICBp
ZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMo
KSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpKSB7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVz
ID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAg
ICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1w
VGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGVzKCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlz
YXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRp
c2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1fZGlzYXNzZW1ibGVy
ID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsKKyAgICBpZiAoVU5M
SUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKSB7
CisgICAgICAgIC8vIE9PUFM6IGJ1aWxkIGEgZGlzYXNzZW1ibGVyIG9mZiB1bmxpbmtlZCBjb2Rl
IGJsb2NrCisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJs
ZXI+KG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KICAgICBpZiAoVU5MSUtFTFkobV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBPT1BTOiBidWlsZCBwcm9maWxl
ciBkaXNhc3NlbWJsZXIgb2ZmIHVubGlua2VkIGNvZGUgYmxvY2sKICAgICAgICAgbV9jb21waWxh
dGlvbiA9IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbigK
LSAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVj
b2Rlc0ZvcihtX2NvZGVCbG9jayksCisgICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29k
ZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVCbG9jayksCiAgICAg
ICAgICAgICAgICAgUHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1fY29tcGlsYXRpb24t
PmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29k
ZUJsb2NrKTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1f
dm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQog
ICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwg
Q29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CkBAIC03NDIsMTEgKzc3MywxMiBAQCB2b2lk
IEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG5vcCgpOwogCiAg
ICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
bV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgaWYgKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAgICAgICBlbWl0UHV0
Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhp
cyk7CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpOwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJl
Z1QxKTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzU3LDE2ICs3ODksMjAgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1vdmUocmVnVDEs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogCi0gICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNG
b3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOworICAgIGVtaXRN
YXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKLSAgICBpZiAo
bV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAgaWYgKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFT
U0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwg
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgeworICAgICAgICBpZiAo
c2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1
Y3RvcigpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA+IDEpKSB7Cisg
ICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4ZWRWZWN0b3I8VmFs
dWVQcm9maWxlPjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fdW5saW5rZWRDb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRo
aXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2Zp
bGluZyBzaXRlICh0bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQp
IGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCi0g
ICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3Vt
ZW50KQorICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVj
dG9yKCkgJiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGlu
Z1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQpAQCAtNzc3LDEyICs4MTMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNh
bGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgICAgICAgICAgICAg
bG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CiAjZW5kaWYK
LSAgICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fY29kZUJsb2NrLT52YWx1
ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAg
ICAgIHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwgYXJndW1lbnQgKiBzaXpl
b2YoVmFsdWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUkVMRUFTRV9BU1NF
UlQoIUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVCbG9jay0+aml0VHlwZSgpKSk7
CiAKICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAgICAgIG1fdm0tPmppdFNpemVT
dGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhpcyk7CkBAIC03OTks
MjQgKzgzNSwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAg
ICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRp
Y19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25F
eGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2NrKTsK
KyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2ssIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNl
cHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIHJlZ1QwKTsKIAogICAgIC8v
IElmIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciByZXF1aXJlIGFyaXR5
IGZpeHVwLgotICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2RlQmxvY2stPm1fbnVt
UGFyYW1ldGVycyAhPSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5j
dGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAgYm9vbCByZXF1aXJlc0FyaXR5
Rml4dXAgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgIT0gMTsKKyAgICBp
ZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVx
dWlyZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxhYmVsKCk7Ci0gICAg
ICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNC
ZUlubGluZWQpOworCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgICAgIGVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKTsKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKHJlZ1QwKTsK
KyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAKICAgICAgICAgbG9hZDMyKHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdU
MSk7Ci0gICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMiht
X2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwor
ICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV91bmxp
bmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMp
OwogCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAKICAgICAg
ICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2RlQmxvY2stPmlzQ29uc3RydWN0
b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlD
aGVjaywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQ
UjApOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRp
b24obV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3Ry
dWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBhcmd1bWVudEdQUjApOwog
ICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVH
UFIpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTgzOSw3ICs4NzgsNyBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1fZGlzYXNzZW1ibGVy
LT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIu
YXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2Rl
T3JpZ2luKCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZm
ZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVl
X3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV91bmxpbmtlZENvZGVCbG9j
aywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOwogICAgIGxpbmso
KTsKIH0KIApAQCAtODU4LDggKzg5Nyw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgc3dp
dGNoIChyZWNvcmQudHlwZSkgewogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRl
OgogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyOiB7Ci0gICAgICAgICAgICBj
b25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFNpbXBs
ZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBsaW5rZWRUYWJs
ZS5tX2N0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPiht
X2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNl
dHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB1bmxp
bmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3MSw4ICs5MTAsOCBAQCB2b2lkIEpJ
VDo6bGluaygpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6U3RyaW5n
OiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29u
c3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAg
ICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCAr
IHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGxvY2F0aW9u
IDogdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hPZmZzZXQ7CkBAIC05MDYsMzIg
Kzk0NSwzNSBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KHJlY29yZC5mcm9tLCByZWNvcmQuY2FsbGVlKTsKICAgICB9CiAKLSAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX2dldEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNo
ZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyht
X2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9w
dXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5
SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMs
IHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIHBhdGNo
QnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlWYWxzLCBwYXRjaEJ1ZmZl
cik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbnN0YW5jZU9mcywgcGF0Y2hCdWZmZXIp
OwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMsIHBhdGNo
QnVmZmVyKTsKKyAgICBhdXRvIGZpbmFsaXplSUNzID0gWyZdIChhdXRvJiBnZW5lcmF0b3JzKSB7
CisgICAgICAgIGZvciAoYXV0byYgZ2VuIDogZ2VuZXJhdG9ycykgeworICAgICAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mby0+c3RhcnQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zdGFydCk7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGdlbi5tX2RvbmUpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
by0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHVi
Um91dGluZVB0clRhZz4oZ2VuLm1fc2xvd1BhdGhCZWdpbik7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeVZh
bHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHNXaXRoVGhpcyk7CisgICAgZmluYWxpemVJ
Q3MobV9wdXRCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9wdXRCeVZhbHMpOworICAgIGZpbmFs
aXplSUNzKG1fZGVsQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlWYWxzKTsKKyAgICBm
aW5hbGl6ZUlDcyhtX2luQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeVZhbHMpOworICAg
IGZpbmFsaXplSUNzKG1faW5zdGFuY2VPZnMpOworICAgIGZpbmFsaXplSUNzKG1fcHJpdmF0ZUJy
YW5kQWNjZXNzZXMpOwogCiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlvbkluZm8gOiBtX2NhbGxD
b21waWxhdGlvbkluZm8pIHsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0
aW9uSW5mby5jYWxsTGlua0luZm87Ci0gICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKLSAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGls
YXRpb25JbmZvLnNsb3dQYXRoU3RhcnQpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7Cisg
ICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxp
bmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRp
b24pOwogICAgIH0KIAotICAgIHsKLSAgICAgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1h
cEJ1aWxkZXI7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRl
Y29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgewotICAgICAg
ICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQotICAgICAgICAgICAg
ICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29k
ZU9mZnNldF0pKTsKLSAgICAgICAgfQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1h
cChqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpKTsKKyAgICBKSVRDb2RlTWFwQnVpbGRlciBq
aXRDb2RlTWFwQnVpbGRlcjsKKyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsg
Ynl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKKyAg
ICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQorICAgICAgICAgICAg
aml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zm
c2V0XSkpOwogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1i
bHkoKSkpIHsKQEAgLTk0MCwyNiArOTgyLDM3IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICB9CiAK
ICAgICBpZiAoVU5MSUtFTFkobV9jb21waWxhdGlvbikpIHsKKyAgICAgICAgLy8gT09QUzogbWFr
ZSBieXRlY29kZSBwcm9maWxlciBrbm93IGFib3V0IHVubGlua2VkIENCPwogICAgICAgICBpZiAo
T3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpCiAgICAgICAgICAgICBt
X2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9uLmdldCgpLCBwYXRj
aEJ1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGls
YXRpb24obV9jb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAgICAgICAgbV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqbV9j
b21waWxhdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
LmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVu
aXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRl
ciksIHBhdGNoQnVmZmVyKTsKICAgICAKKyAgICAvLyBPT1BTOiBNYWtlIGEgdmVyc2lvbiBvZiBD
b2RlQmxvY2tXaXRoSklUVHlwZSB0aGF0IGtub3dzIGFib3V0IFVubGlua2VkQ29kZUJsb2NrLgog
ICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAg
ICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29k
ZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2Rl
IGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3Byb2ZpbGVkQ29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29kZSA9
IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgQmFzZWxp
bmVKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2spKTsKKworICAgIG1faml0Q29kZS0+bV91
bmxpbmtlZENhbGxzID0gV1RGTW92ZShtX3VubGlua2VkQ2FsbHMpOworICAgIG1faml0Q29kZS0+
bV9ldmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7CisgICAg
bV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0gV1RGTW92ZShtX3VubGlua2VkU3R1Yklu
Zm9zKTsKKyAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zd2l0
Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9
IFdURk1vdmUobV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1faml0
Q29kZU1hcCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCk7CisgICAgbV9qaXRDb2RlLT5h
ZG9wdE1hdGhJQ3MobV9tYXRoSUNzKTsKKyAgICBtX2ppdENvZGUtPm1fY29uc3RhbnRQb29sID0g
V1RGTW92ZShtX2NvbnN0YW50UG9vbCk7CiAKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2Up
Ci0gICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXAp
LlxuIiwgbV9jb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50
YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIo
KSk7CisgICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwg
JXApLlxuIiwgbV91bmxpbmtlZENvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+
c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51
bnRhZ2dlZFB0cigpKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFp
blRocmVhZCgpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKENv
ZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0NvbXBpbGF0aW9u
VGhyZWFkKCkpOwogCkBAIC05NjgsMjUgKzEwMjEsMjEgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklU
OjpmaW5hbGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5rQnVmZmVyLT5ydW5NYWluVGhyZWFkRmlu
YWxpemF0aW9uVGFza3MoKTsKIAotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgbV9jb2RlQmxvY2stPnNocmlua1Rv
Rml0KGxvY2tlciwgQ29kZUJsb2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5rKTsKLSAgICB9Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlv
bkhhbmRsZXJzKCk7ICsraSkgewotICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fY29k
ZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOwotICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9w
cm9ibGVtLzM5NDMzMzE4Pi4KLSAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gbV9jb2RlQmxv
Y2stPmppdENvZGVNYXAoKS5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQpKS5yZXRh
Z2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOwotICAgIH0KKyAgICAvLyBPT1BTOiBEb24n
dCB0aGluayB0aGlzIHNocmluayBpcyByZWFsbHkgZG9pbmcgYW55dGhpbmcgYW55bW9yZS4gVmVy
aWZ5LgorICAgIC8veworICAgIC8vICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2Rl
QmxvY2stPm1fbG9jayk7CisgICAgLy8gICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KGxvY2tl
ciwgQ29kZUJsb2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5rKTsKKyAgICAvL30KIAorICAgIC8v
IE9PUFM6IG1fcGNUb0NvZGVPcmlnaW5NYXAgc2hvdWxkIGxpdmUgb24gQmFzZWxpbmVKSVRDb2Rl
IGZvciBiYXNlbGluZSBjb2RlYmxvY2tzLgogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwKQot
ICAgICAgICBtX2NvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoV1RGTW92ZShtX3BjVG9D
b2RlT3JpZ2luTWFwKSk7CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2stPnNldFBDVG9Db2Rl
T3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOwogCiAgICAgbV92bS0+bWFj
aGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAg
IHN0YXRpY19jYXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAgICAgICAgc3RhdGlj
X2Nhc3Q8ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CisgICAgICAg
IHN0YXRpY19jYXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6
ZSgpKSk7CiAKLSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZSht
X2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNj
ZXNzZnVsOwogfQpAQCAtOTk4LDExICsxMDQ3LDExIEBAIHNpemVfdCBKSVQ6OmNvZGVTaXplKCkg
Y29uc3QKICAgICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAKLUNvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQor
Q29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGRvTWFpblRocmVhZFByZXBh
cmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bmcoZWZmb3J0KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICByZXR1
cm4gZmluYWxpemVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxOCArMTA5MSwyOCBAQCB2b2lk
IEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAgIG1fdm0tPnR5cGVQ
cm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBhcmluZyBmb3IgSklU
IGNvbXBpbGF0aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50
Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291
bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBBU1NFUlQoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpID09IFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAogICAgIHJldHVybiBy
b3VuZExvY2FsUmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChjb2RlQmxvY2stPm51
bUNhbGxlZUxvY2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVy
cyk7CiB9CiAKLWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29k
ZUJsb2NrKQoreworICAgIHJldHVybiBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrLT51
bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKworaW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2spIC0gMSkub2Zmc2V0
KCk7CiB9CiAKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3sKKyAgICByZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jay0+dW5s
aW5rZWRDb2RlQmxvY2soKSk7Cit9CisKIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gSklUOjpj
b21waWxlVGltZVN0YXRzKCkKIHsKICAgICBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IHJlc3Vs
dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
NyBAQAogCiAjZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwgZXhwZWN0ZWQpIEFTU0VS
VF9XSVRIX01FU1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9mZnNldCBcIiVzXCIgc2hv
dWxkIGJlICVkLCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19jYXN0PGludD4oZXhwZWN0
ZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRD
b2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhz
LmgiCiAjaW5jbHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCkBAIC00NCw2ICs0NSw3IEBACiAjaW5j
bHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5j
bHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCiAj
aW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsxNTEsMTQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25JbmZvIHsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247Ci0gICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRDYWxsTGlua0lu
Zm87CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3Rh
bnQ7CiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVy
bkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rp
b24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50
ZXJmYWNlSklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHB1YmxpYyBK
U0ludGVyZmFjZUpJVCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJ
VFRodW5rczsKQEAgLTE3MSw2ICsxNzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8g
d2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRv
IGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgogICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRj
aFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0lu
dGVyZmFjZUpJVDsKKwogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9
IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRl
Y29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMTc4LDI4ICsxODIsMzMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6
dm0oKTsgfQogCiAgICAgICAgIHZvaWQgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhK
SVRDb21waWxhdGlvbkVmZm9ydCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXpl
T25NYWluVGhyZWFkKCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWlu
VGhyZWFkKENvZGVCbG9jayopOwogICAgICAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdDsKIAog
ICAgICAgICB2b2lkIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAg
ICAgICAKICAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0
ZUNvbXBpbGUoZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywg
Ynl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGNvZGVCbG9jaywgZWZmb3J0KTsKICAgICAg
ICAgfQogCisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5s
aW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJD
b3VudEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZz
ZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50
ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0cygpOwogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBpbGVUaW1lKCk7CiAK
KyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0YUdQUiA9IExMSW50OjpS
ZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFI7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNfY29uc3RhbnRzR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFI7CisKICAgICBwcml2
YXRlOgogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKTsKICAgICAgICAgdm9pZCBsaW5rKCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVz
dWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICAgICAgQ29tcGls
YXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklUQ29tcGlsYXRpb25FZmZv
cnQpOwogCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQg
YW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2ICsyMzIsMzIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlOFRv
TWV0YWRhdGEoVmFsdWVUeXBlLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZTMy
VG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIG1hdGVyaWFs
aXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQ
UlJlZyk7CisKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVk
IGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBsb2Fk
R2xvYmFsT2JqZWN0KEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZENvZGVCbG9ja0NvbnN0YW50
KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGVtaXRQdXRDb2RlQmxv
Y2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOworCiAgICAgICAgIHZv
aWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAgICAgICB7CiAgICAgICAg
ICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7CkBAIC0yNTgsMTYg
KzI5MywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAg
ICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlE
ICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsK
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZf
dDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9w
Y29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNv
bnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0
YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgYm9vbCBjb21w
aWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5r
ZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBi
b29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwpAQCAtMjg3LDE0ICszMjIsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1v
ZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcik7CisgICAg
ICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpOwogCiAgICAgICAgIC8vIFRo
aXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJlZ1QwIGFuZCB0aGF0
IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4KICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxl
JiwgR1BSUmVnKTsKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJv
ZmlsZSYsIEpTVmFsdWVSZWdzKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+
IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJlZyk7Ci0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
TWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIC8vdm9pZCBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7CisgICAgICAgIC8vdm9pZCBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBC
eXRlY29kZSYsIEdQUlJlZyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1ZhbHVlUmVncyk7
CiAjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxl
JiwgSlNWYWx1ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9p
ZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOwpAQCAtMzA3
LDYgKzM0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZSosIFJl
Z2lzdGVySUQgc2NyYXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIs
IFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3Qg
Qnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7Cisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBwdHJkaWZmX3QsIFJlZ2lz
dGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3ApOwpAQCAtNTkyLDcg
KzYzMiw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNiwxNCArNjY1LDE0IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsK
IAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1
YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NU
eXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRz
dCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihj
b25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9u
bHlDaGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNr
KGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgZW1p
dFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICAgICAg
ICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0
aCk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0
KQpAQCAtNjQ1LDcgKzY4NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZv
aWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3Bl
cmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAg
ICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAg
IHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAg
ICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xv
c3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NCw2ICs2OTMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihS
ZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3du
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZp
cnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1
YWxSZWdpc3Rlcik7CkBAIC02OTUsMjYgKzczNSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09
IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAg
ICB9CiAKLSNkZWZpbmUgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5
cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAg
ICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRP
UikKLSN1bmRlZiBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29w
ZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVj
YXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5r
LgotICAgICAgICAgICAgLy8gUmVzb2x2ZWRDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNl
IHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29wZS4KLSAgICAgICAgICAgIHJldHVybiAh
KHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1
bGVWYXIpOwotICAgICAgICB9Ci0KLSNkZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVS
QVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRv
cihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1ND
T1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0K
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Cisg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVy
YXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBj
b25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mLCBzdGQ6
Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKIAogICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzRmFs
c2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mKTsKQEAgLTc1OSwxMCAr
NzgxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBh
cHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2b2lk
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgQWRkcmVz
cywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3Qg
Qnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgCiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+
CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46
Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjAsMjAgKzg0MiwyMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7CiAgICAgICAgIH0K
IAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0aW9u
VHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0
ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwg
TWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShN
ZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2Zp
bGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVj
b2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4gQXJn
cz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgQnl0
ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rp
b25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQsIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyB0YXJnZXQsIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAg
ICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0LCBh
cmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRyZXNzKEdQUkluZm86Om5v
bkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0
ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3Vs
dCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBl
LCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE4LDI1ICs5NDAsMjAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsg
cmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9y
SW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAgICAg
Ym9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5n
OyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGllcmVk
IGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxsIGNv
ZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyBy
ZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgZW1pdE1hdGVyaWFsaXplTWV0
YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAgICAgICB2b2lkIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGlt
ZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAgICAg
ICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRh
ZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVudCBh
Y3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4K
LSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVh
ZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8o
T3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAg
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCiAg
ICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjMsOSArOTgwLDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNl
czsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBI
YXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAg
SGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmls
ZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBM
aXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKQEAgLTk5OSwxMSArMTAxMywyNCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgSGFzaE1hcDxjb25zdCBJbnN0cnVjdGlvbiosIFVuaXF1ZVJlZjxNYXRoSUNHZW5l
cmF0aW9uU3RhdGU+PiBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGU7CiAKICAg
ICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwotICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAg
ICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKIAotICAgICAgICBS
ZWZQdHI8RGlyZWN0SklUQ29kZT4gbV9qaXRDb2RlOworICAgICAgICBDb2RlQmxvY2sqIG1fcHJv
ZmlsZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFVubGlua2VkQ29kZUJsb2NrKiBt
X3VubGlua2VkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworCisgICAgICAgIE1hdGhJQ0hvbGRlciBt
X21hdGhJQ3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1faml0Q29kZTsKKwor
ICAgICAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5rZWRDYWxsTGlua0lu
Zm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2Fs
bExpbmtJbmZvczsKKyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5s
aW5rZWRTdHViSW5mb3M7CisgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9z
d2l0Y2hKdW1wVGFibGVzOworICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBzdHJ1Y3QgTm90QUNvZGVCbG9jayB7
IH0gbV9jb2RlQmxvY2s7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI4MTg2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09w
ZXJhbmRDb25zdGFudENoYXIob3AyKSkgewogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMyMCw3ICszMjEsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwog
ICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVn
VDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Qz
LCByZWdUMiwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
aW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdU
MiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52
ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAt
NTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCAK
IAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJl
Z1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
aW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApA
QCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5z
dHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+YWRk
SklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVE5lZ0lDKiBu
ZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJQyk7CiAgICAg
Ly8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVl
TmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0aElD
RmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJp
dGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAtODk5LDggKzkwNCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAg
SklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVC
bG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCku
bV9wcm9maWxlSW5kZXgpOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRB
ZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVu
dEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZh
bHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFz
dChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMt
PmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICgh
Z2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVj
dChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNS
ZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOworICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
c2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAxNSwxMCArMTAyMSwx
MSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgICAgIGVs
c2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVt
aXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0
UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEzICsxMDYyLDE0IEBA
IHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNlbmRpZgogCiAgICAg
VW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3Ms
IFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRS
ZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxl
KTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwg
c3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywg
VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9K
SVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBz
cmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RB
VFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIwLDEzICsxMTI4LDE0
IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICNlbmRpZgogCiAg
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmls
ZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJp
dHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
KSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFy
aXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRI
X0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsx
MTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwogICAgIGlmIChzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KyAgICAgICAgYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRo
UHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1fcHJvZmlsZUluZGV4KTsK
IAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVz
LmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29w
ZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRo
UHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1fcHJvZmlsZUluZGV4KTsK
KyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRkSklUTXVsSUMoYXJpdGhQcm9maWxl
KTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVs
SUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CkBAIC0x
MjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0
CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhh
cml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1f
dW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wU3ViPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX21h
dGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRo
SUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9w
U3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw3ICsyMzIs
NyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBzdG9yZVB0cihjYWxs
RnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNl
dCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEs
IHJlZ1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7CiAgICAg
ZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8p
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTMyNCw3ICszMjQs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgYWRkU2xv
d0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJl
c3VsdChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0
YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBA
IC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNhbGxG
cmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSklUSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUg
IlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVk
ZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBP
cCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZv
cihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVy
KCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAg
ICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwog
LCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxM
aW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJbmNsdWRpbmdUaGlzID0g
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpOwogICAg
IGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0YWNrT2Zmc2V0SW5SZWdp
c3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKKwogICAgIGlmIChPcDo6b3Bj
b2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxs
RnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKICAgICAgICAg
SnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAg
c3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVja3BvaW50KS5hZGRy
ZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YShy
ZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCkg
KyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmls
ZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBkb25lLmxpbmsodGhp
cyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6
Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mg
fHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lk
PgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5m
byogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewogICAgIFZpcnR1
YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC05MSw3ICs5Miw4
IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2l6
ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7CiAgICAg
ZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJn
czsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RW
YXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOworICAgIGNhbGxPcGVy
YXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZp
cnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0
ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJuVmFsdWVH
UFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLShzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGln
bm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cEZv
cndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0g
b3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwg
cmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QxLCBy
ZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KICAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCks
IHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3Zl
LCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFkZHJlc3NPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlua0lu
Zm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0lu
Zm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJlZ1QzKTsKKyAg
ICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1QyKTsKKyAgICBz
dG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsK
ICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywxNiArMTMxLDE2IEBAIGJv
b2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxhdGU8PgogYm9vbCBKSVQ6
OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkKIHsKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAgIHN0b3JlUHRyKGNh
bGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zm
c2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgYXJndW1l
bnRHUFIxKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgcmVnVDEsIHJlZ1QyKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVn
VDApKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkp
LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJldHVy
blZhbHVlR1BSKSk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiAKQEAgLTE0
OCw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVC
bG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CisgICAg
Q2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxs
LCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwpA
QCAtMTU2LDQzICsxNjAsNDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNv
bnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVn
aXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFs
T2JqZWN0KCptX3ZtLCBpbmZvKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQoteworYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQsIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQpIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPD4KLWJv
b2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIENhbGxM
aW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCitib29sIEpJVDo6Y29t
cGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5r
SW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0gICAgQ2FsbEZyYW1lU2h1ZmZsZURh
dGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5dGVjb2Rl
Lm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51
bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9CisgICAgc3RkOjp1
bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8
Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhc3NlZEFyZ3Mg
PSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhcmFtZXRlcnMgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CisgICAgc2h1ZmZsZURhdGEtPm51bWJl
clRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAgc2h1ZmZsZURh
dGEtPm51bUxvY2FscyA9CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEuYXJncy5yZXNp
emUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUoYnl0ZWNv
ZGUubV9hcmdjKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdj
OyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgIHNodWZmbGVE
YXRhLT5hcmdzW2ldID0KICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNT
dGFjaygKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGlu
Z1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpT
KTsKICAgICB9Ci0gICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAgVmFsdWVSZWNvdmVy
eTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxs
ZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVE
YXRhKHNodWZmbGVEYXRhKTsKKyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVy
eTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAgc2h1ZmZsZURhdGEtPnNldHVwQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VE
YXRhSUM6OlllcywgWyZdIHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZm
bGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJ
bmZvQ29uc3RhbnQsIHJlZ1QyKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0lu
Zm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7
CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURhdGEpLnByZXBhcmVG
b3JUYWlsQ2FsbCgpOwogICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CisKKyAg
ICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFtZVNodWZmbGVEYXRh
ID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVs
KCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9j
YXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0yMTgsMTQgKzIyNiwyNSBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRp
YWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNh
bGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLwotICAgIENhbGxMaW5rSW5mbyog
aW5mbyA9IG51bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAg
ICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpKTsKLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CisKKyAg
ICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBpZiAob3Bjb2RlSUQg
IT0gb3BfY2FsbF9ldmFsKSB7CisgICAgICAgIGluZm8gPSBtX3VubGlua2VkQ2FsbHMuYWRkKCk7
CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAg
IGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCk7CisK
KyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZvKTsKKworICAgICAgICBBU1NFUlQobV9jYWxsQ29t
cGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIG1fY2Fs
bENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKKyAgICAgICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS51bmxpbmtlZENhbGxMaW5r
SW5mbyA9IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3RhbnQ7CisgICAgfQorICAgIGNv
bXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQpOwogCiAgICAgLy8gU1AgaG9s
ZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50
Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRlY29kZUluZGV4ID0gbV9jb2RlQmxvY2st
PmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9
IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOworICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7CiAgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rl
ciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxsZWUuCkBAIC0y
MzQsMTYgKzI1MywxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlv
CiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0lu
ZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNv
ZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21w
aWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRl
Y29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQorICAgIGlmIChjb21waWxlVGFpbENhbGwo
Ynl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3RhbnQpKQogICAgICAg
ICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCByZWdUMik7CiAgICAg
aWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAgICBhdXRvIHNsb3dQYXRocyA9IGlu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExp
bmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBb
Jl0gewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAg
cHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CiAgICAgICAgIH0pOwpAQCAtMjUzLDEzICsy
NjgsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0RmFzdFBh
dGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olllcyk7Cisg
ICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCgqdGhp
cywgcmVnVDAsIHJlZ1QyKTsKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAg
YWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAg
ZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjczLDIwICsyODgsMjAgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
c2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Cisg
ICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
Y2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlzKTsKKyAgICBD
YWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgqbV92bSwgKnRoaXMsIHJlZ1QyKTsKIAog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKQEAgLTM5NSwxNyArNDEwLDMwIEBAIHZvaWQgSklUOjplbWl0X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKICAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAg
bW92ZShyZWdUMCwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxLCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0
QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRHUFIp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CkBAIC00MTYsMTAg
KzQ0NCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2lu
dChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgR1BSUmVn
IGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKICAgICBub3RP
YmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyYXRvckdQUikpOwogICAgIG5vdE9iamVj
dC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0b3JHUFIpKTsKQEAgLTQzMiwxOSArNDU4
LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpu
b25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygp
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
bmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgbW92ZShpdGVyYXRvckdQUiwgYXJn
dW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIAogICAgIGF1dG8gZG9uZSA9IGp1
bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05v
dE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKIH0KQEAgLTQ1
Miw3ICs0NzYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JO
ZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewogICAgICAgICBzd2l0
Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNhc2UgTmFycm93OiByZXR1cm4g
aXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC00NzAsNTAgKzQ5Myw3NyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgSnVtcCBmYXN0Q2FzZSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpKTsKIAogICAg
IGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgb3I4KFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIEFic29sdXRlQWRkcmVzcygmbWV0
YWRhdGEubV9pdGVyYXRpb25NZXRhZGF0YS5zZWVuTW9kZXMpKTsKKyAgICBsb2FkOEZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdGlv
bk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9mU2Vlbk1vZGVzKCks
IHJlZ1QwKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihJdGVy
YXRpb25Nb2RlOjpHZW5lcmljKSksIHJlZ1QwKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1Qw
LCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdGlvbk1l
dGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9mU2Vlbk1vZGVzKCkpOwog
ICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgLy8gY2Fs
bCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkgaW4gcmVnVDAKIAotICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7Ci0g
ICAgR1BSUmVnIGRvbmVHUFIgPSByZWdUMTsKLSAgICAvLyBpdGVyUmVzdWx0R1BSIHdpbGwgZ2V0
IHRyYXNoZWQgYnkgdGhlIGZpcnN0IGdldCBieSBpZCBiZWxvdy4KLSAgICBtb3ZlKHZhbHVlR1BS
LCBpdGVyUmVzdWx0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0
ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAg
IG1vdmUocmV0dXJuVmFsdWVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKIAorICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OwogICAg
IHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1bHRHUFIpOwor
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gYmFzZUdQ
Uik7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOwogCiAg
ICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHZhbHVlR1BSKTsK
KyAgICAgICAgcHJlc2VydmVkUmVncy5hZGQoaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3Ms
Ci0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhpdGVy
UmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHJlZ1QzLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdz
LAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0
QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IGRv
bmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25l
LCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CiAK
LQogICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7Ci0gICAgICAgIEdQUlJl
ZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzKGRv
bmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Cisg
ICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRj
aEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZU
cnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQ
Uik7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgp
LCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbEdQUik7CisKKyAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpiYXNlOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBi
YXNlR1BSKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0o
KS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpT
VmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIs
IEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4p
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdz
IHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRHUFIpOwogCiAgICAgICAgIGl0ZXJhdGlv
bkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01MjcsNTkgKzU3Nyw1NSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAorICAgIGNv
bnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnNjcmF0Y2g7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRl
cmF0b3JOZXh0PigpOwogICAgIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0g
Ynl0ZWNvZGUubV9kb25lOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwog
CiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9i
amVjdDsKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3Vs
dEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyQ2Fs
bFJlc3VsdEdQUikpOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCku
cHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCk7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgICAgIAogICAgICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBub3RPYmplY3QuYXBwZW5k
KGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFw
cGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCi0gICAgICAgIENh
bGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BS
MCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkb25lVlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRl
clJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKLQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRv
bmVWUmVnLCByZWdUMSk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV92YWx1ZSwgcmVnVDApOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVu
dEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisKKyAgICAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworCisgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBkb25lR1BS
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBpdGVy
Q2FsbFJlc3VsdEdQUik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChq
dW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93
SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKICAgICB9CiAKICAgICB7
ICAgCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgICAgICBHUFJSZWcgaXRlclJl
c3VsdEdQUiA9IHJlZ1QwOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZt
KCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBH
UFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1
bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
aWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdC
aXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAg
ICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAgICAgfQotCiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlz
aW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKIAorCiBuYW1lc3BhY2UgSlNDIHsKIAog
bmFtZXNwYWNlIERGRyB7CkBAIC0xNTksMTAgKzE2MCwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgYm9vbCB1c2VEYXRhSUMoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKLSAgICAgICAgaWYgKCFP
cHRpb25zOjp1c2VEYXRhSUMoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
aWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBPcHRpb25zOjp1c2VEYXRhSUNJbk9wdGltaXpp
bmdKSVQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSW5saW5lQWNj
ZXNzLmgiCisjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKQEAgLTQ2LDEwICs0Nyw5IEBAIHN0YXRpYyBTdHJ1
Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmYKIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlw
ZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUs
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycykKLSAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAsIG1faml0VHlwZShqaXRU
eXBlKQorICAgIDogbV9qaXRUeXBlKGppdFR5cGUpCiB7Ci0gICAgbV9zdHViSW5mbyA9IG1fY29k
ZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4p
IDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5mbyA9IGNvZGVCbG9jayA/IGNvZGVC
bG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1Yklu
Zm8oKTsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGU7CiAKICAgICBt
X3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyczsKQEAgLTU5LDcgKzU5LDYg
QEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgTGlua0J1ZmZl
ciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRT
dHViUm91dGluZVB0clRhZz4gc3RhcnQpCiB7CiAgICAgbV9zdHViSW5mby0+c3RhcnQgPSBzdGFy
dDsKLQogICAgIG1fc3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IGZhc3RQYXRoLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4obV9kb25lKTsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KG1faml0VHlwZSkpCkBAIC02Nyw2ICs2NiwxNSBAQCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yOjpmaW5hbGl6ZSgKICAgICBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBz
bG93UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3Nsb3dQYXRoQmVnaW4p
OwogfQogCit2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoSklUJiBqaXQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm8s
IEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAg
UkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworICAgIGppdC5s
b2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNv
ZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwo
KTsKK30KKwogSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENh
bGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTExMCw3ICsxMTgsNyBAQCBKSVRHZXRCeUlk
R2VuZXJhdG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAgIDogSklU
QnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBh
Y2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCi0gICAg
LCBtX2lzTGVuZ3RoQWNjZXNzKHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCku
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAgICAsIG1faXNMZW5ndGhBY2Nlc3MoY29k
ZUJsb2NrICYmIHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLmltcGwoKSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlLnBheWxvYWRH
UFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODE4Njgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFz
cyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVC
bG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsK
IGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKK3N0cnVjdCBCYXNlbGluZURlbEJ5VmFs
UmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6
cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Qz
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsK
K307CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZv
OjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJl
Z1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdU
MzsKK307CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICAvLyBXZSBy
ZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVn
aXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgorICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHBy
b3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0
aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOwor
ICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJ
bmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUklu
Zm86OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5m
bzo6cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUkluZm86OmFyZ3VtZW50R1BSMzsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OmFyZ3VtZW50
R1BSMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86Om5v
bkFyZ0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZv
Ojpub25BcmdHUFIxOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
X2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1Qz
OworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0
QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1
bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdGhpc1ZhbHVlID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBH
UFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlJZFJlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mbyA9IEdQUkluZm86OnJlZ1QxOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlJZFJlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDE7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBw
cm9maWxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8gPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86
OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJyYW5kID0gR1BSSW5mbzo6cmVn
VDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0g
R1BSSW5mbzo6cmVnVDI7Cit9OworCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBw
cm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDE1ICsx
NjUsMjEgQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZmZXIm
IGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAogICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwotICAg
IAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWdu
ZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIgfTsKKyAgICB1
bnNpZ25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2sqIG1f
Y29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVyZVN0dWJJbmZv
KiBtX3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3Rh
cnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xv
d1BhdGhDYWxsOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOyAvLyBP
T1BTOiBtYWtlIHJlcG9ydENhbGwgcGFzcyBzb21ldGhpbmcgaW4gd2UgY2FuIHVzZSBmb3IgdGhl
IG5vbi1DVEkgdGh1bmtzIGJ1aWxkcy4gCiB9OwogCiBjbGFzcyBKSVRCeUlkR2VuZXJhdG9yIDog
cHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTk4LDcgKzIwNyw3IEBAIHByb3Rl
Y3RlZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsK
IAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworcHVibGljOgogICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTMyLDggKzI0MSw4IEBA
IHB1YmxpYzoKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdp
biwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hl
YWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZh
bHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2lu
ZCk7CisgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5k
ZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVy
LAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0
dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAg
IHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogICAgIApAQCAtMTYzLDEx
ICsyNzIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3Nl
bWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1
ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAg
IE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAt
MTkxLDggKzI5OCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNy
b0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0
YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwog
fTsKIApAQCAtMjE2LDggKzMyMSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0
UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1Bh
dGhKdW1wOwogfTsKIApAQCAtMjQxLDggKzM0NCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2Vu
ZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1w
IG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjc3LDggKzM3OCw2IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVy
JiBzbG93UGF0aExpbmtCdWZmZXIpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1Bh
dGhKdW1wOwogfTsKIApAQCAtMzAyLDExICs0MDEsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNW
YWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0OwogCi0gICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1
bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMzAsOCArNDI3LDYgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRl
OgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVy
OjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUs
MzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5p
c0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBp
ZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9
PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUo
KTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Okxp
bmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklU
Ojppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29u
c3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJs
b2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBPT1BTOiBmaW5k
IGEgd2F5IHRvIGFzc2VydCB0aGF0IGFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29u
c3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0Nv
bnN0YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVD
b25zdGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNy
Yyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhl
YWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiAr
MTgxLDM2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRp
ZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRl
PHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2Zp
bGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZh
bHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNW
YWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0
dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVy
blZhbHVlR1BSKTsKICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRh
LCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5h
bWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVH
UFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBl
bWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgog
fQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQog
ewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tu
b3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3
ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxp
bmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJ
bmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9i
eXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRD
b2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMo
KSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8g
cmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkp
OwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNr
cG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1
bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRo
aXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5l
cmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9j
b2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMo
KSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRl
Y29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5k
KG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwzNCBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3Bl
cmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMu
aXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNT
dHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwot
fQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxl
JiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQotewotICAgIEFTU0VSVChzaG91bGRF
bWl0UHJvZmlsaW5nKCkpOwotCi0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlv
bjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0
b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQ
cm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQotICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRl
c2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJv
ZmlsZS5tX2J1Y2tldHMpOwotICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3Jp
cHRvci0+YXNCaXRzLnBheWxvYWQpOwotICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNj
cmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgotfQorICAgIGlmICghc3JjLmlzQ29uc3RhbnQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5j
b25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30KKworLy8gT09Q
UworLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxl
JiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQorLy97CisvLyAgICBBU1NFUlQoc2hv
dWxkRW1pdFByb2ZpbGluZygpKTsKKy8vCisvLyAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25m
aWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0Cisv
LyAgICAvLyBzdG9yZS4KKy8vI2lmIFVTRShKU1ZBTFVFNjQpCisvLyAgICBzdG9yZTY0KHZhbHVl
LmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vI2Vsc2UKKy8vICAgIEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVz
Y3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8gICAgc3RvcmUzMih2YWx1ZS5w
YXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7CisvLyAgICBzdG9yZTMy
KHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7CisvLyNlbmRpZgorLy99
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjpp
c19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6
dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUo
T3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsMjQgKzM1MywyNSBAQCBpbmxpbmUgc3Rk
OjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0
IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKSksIHZhbHVlKTsKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9m
aWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZh
bHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0b3JlNjQodmFsdWUuZ3By
KCksIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmls
ZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKLX0KKy8vaW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQ
cm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97CisvLyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisvL30KIAotdGVtcGxh
dGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykp
OwogfQogI2VuZGlmCiAKQEAgLTM2MCw2ICszOTEsMjEgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0
QXJyYXlQcm9maWxpbmdTaXRlVwogICAgIH0KIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUsIFJl
Z2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQoreworICAgIGlmIChzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YShzY3JhdGNoR1BSLCBieXRlY29kZSwgb2Zmc2V0T2ZB
cnJheVByb2ZpbGUpOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
aW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQ
UikKK3sKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zm
c2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCksIGNlbGxHUFIsIHNjcmF0Y2hHUFIpOworfQorCiBB
TFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJl
Z2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQz
MigpOwpAQCAtMzgwLDcgKzQyNiw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0
UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVy
IHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7
Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVC
bG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rl
cihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29s
KSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVn
KSwgdmFsdWUpOwpAQCAtNDk2LDcgKzU0Miw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3Jl
KFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tu
b3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlm
IChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAg
ICAgICAgZWxzZQpAQCAtNTA2LDcgKzU1Miw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKCFt
X2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVn
KSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNCwxMSArNTYwLDYgQEAgaW5saW5lIHZv
aWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsK
LSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFu
dEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVn
aXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AxKSkgewpAQCAtNTQ0LDExICs1ODUsMTcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlz
IG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJh
dGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0Nv
bnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAg
ZWxzZQorICAgICAgICBzd2l0Y2ggKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKHNyYykpIHsKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkludGVnZXI6CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpEb3VibGU6IHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAgbW92ZShJbW02NChKU1ZhbHVlOjpl
bmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3Qp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtNTY2LDExICs2MTMsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0Vmly
dHVhbFJlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVy
IHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewog
ICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTU5NSw3ICs2MzcsNyBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAKIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgVmly
dHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwo
dlJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTYzNywzMCArNjc5LDcgQEAgQUxXQVlTX0lO
TElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewogICAgIGlmICh0YXJnZXQpCiAgICAg
ICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vdXRPZkxpbmVKdW1w
T2Zmc2V0KGluc3RydWN0aW9uKTsKLX0KLQotQUxXQVlTX0lOTElORSBHZXRQdXRJbmZvIEpJVDo6
Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNvZGUpCi17Ci0gICAgdW5zaWduZWQg
a2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsgLy8gSGFzaE1hcCBkb2Vzbid0IGxpa2Ug
MCBhcyBhIGtleQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdldFB1dEluZm9zLmZpbmQo
a2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBHZXRQdXRJbmZv
IGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9nZXRQdXRJbmZv
OwotICAgIG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5mby5vcGVyYW5kKCkp
OwotICAgIHJldHVybiBnZXRQdXRJbmZvOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlP
cD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJpdGhQcm9m
aWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2NF90IGtleSA9IChzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1f
Y29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29w
aWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsK
LSAgICBCaW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1fY29waWVkQXJpdGhQcm9maWxlcy5h
ZGQoa2V5LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBhcml0aFByb2ZpbGU7CisgICAgcmV0
dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24p
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY4MSw2ICs3MDAsNjEgQEAgQUxXQVlT
X0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAogICAgIHJldHVybiBFQ01BTW9kZTo6
c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2Rl
LCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhz
X21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0
YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVz
dWx0KQoreworICAgIGxvYWQzMihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2Rl
QmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNl
dCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKHNf
bWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6c3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTgodmFsdWUsIEFkZHJlc3Moc19t
ZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFk
YXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlMzJUb01ldGFkYXRhKEdQUlJl
ZyB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAg
IHN0b3JlMzIodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9j
ay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJs
ZShieXRlY29kZSkgKyBvZmZzZXQpLCBzX21ldGFkYXRhR1BSLCByZXN1bHQpOworfQorCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29uc3RhbnQoSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBjb25zdGFudEluZGV4LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhz
X2NvbnN0YW50c0dQUiwgc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb25zdGFudEluZGV4KSAqIDgp
LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0
KEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3Rh
bnQsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tD
b25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIEdQUlJlZyByZXN1bHQpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKKyAgICAvLyBPT1BTOiBNYXli
ZSBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQ/CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3Vs
dCwgQ29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVzdWx0KTsK
KyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICog
c2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzEsNyAr
OTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxG
cmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRy
ZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1
bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpOwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0o
Y29uc3QgSW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGlu
YXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRT
aW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxl
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
ICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29k
ZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxp
bmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDI0LDcgKzEw
MjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBl
bmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNl
dCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElU
YWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3ICsxMDQyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUg
Zm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAg
ICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJs
b2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJp
bmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5k
KFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQs
IFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUo
dW5saW5rZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQAogI2luY2x1ZGUg
IlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKQEAgLTU0LDExICs1NiwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
c3JjOwogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlz
TnVtYmVyKCkpCi0gICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKLSAgICAgICAgZWxzZQorICAgICAgICAvLyBP
T1BTOiBtb3N0ICJPdGhlciIgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50cyBjYW4g
anVzdCBiZSBncmFiYmVkIGZyb20gdGhlIFVubGlua2VkQ29kZUJsb2NrLiBJdCdzIGp1c3QKKyAg
ICAgICAgLy8gYSBjb3VwbGUgdHlwZXMgdGhhdCBjYW4ndC4gQ3JlYXRlIGFuIGFic3RyYWN0aW9u
IGZvciB0aGF0LgorCisgICAgICAgIHN3aXRjaCAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkgeworICAgICAgICBjYXNlIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBzdG9yZTY0KEltbTY0
KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvYWRDb2Rl
QmxvY2tDb25zdGFudChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDAsIGFk
ZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICsxMDAsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
am1wKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsK
LSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6
ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3Ig
PSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3Zt
LCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwog
CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9j
YXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAg
IFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CiAKLSAgICBpZiAoIWFsbG9jYXRvcikK
LSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVs
bHB0cik7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2Nh
dG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgICAgICBlbWl0
SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFj
aXR5KCkpOwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwotICAgICAgICBhZGRTbG93Q2Fz
ZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0KTsKLSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmpl
Y3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9m
ZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
OjpvZmZzZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVSZWcpOworCisgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAg
ICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUo
KSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xv
d0Nhc2VzKTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgZW1pdEluaXRpYWxpemVJbmxp
bmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CisgICAgbXV0YXRvckZlbmNlKCptX3Zt
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAorICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CisKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBt
ZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVj
dHVyZSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2Jq
ZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwogfQogCkBAIC0xMzEsNyArMTQyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3Zl
cnJpZGVzX2hhc19pbnN0YW5jZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFu
Y2VWYWx1ZSwgcmVnVDApOwogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQg
U3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VW
YWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlv
bigpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgSnVtcCBjdXN0b21oYXNJ
bnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwg
T0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2Z1bmN0aW9uUHJvdG9IYXNJbnN0YW5j
ZVN5bWJvbEZ1bmN0aW9uKSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1
Y3RvciwgcmVnVDApOwogCkBAIC0xNTQsMzAgKzE2NiwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3Rv
dHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZh
bHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZv
ciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBj
YW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1Qx
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3RvR1BSID0gQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQ
UiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BSKTsKICAgICAKICAgICAvLyBDaGVj
ayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMg
Y2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHByb3RvR1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAg
ICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdU
NSwKLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICByZXN1bHRHUFIsCisgICAgICAg
IHZhbHVlR1BSLAorICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgc3R1YkluZm9HUFIsCisgICAg
ICAgIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDEsIEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVyczo6c2NyYXRjaDIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAorCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQgKzIxMiwxMyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4o
QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIHJlZ1QyLCByZWdUMSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxp
bmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0
YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVu
dEdQUjIpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpw
cm90byA9PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0
YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTI0MCw3ICsyNTksNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAKICAgICBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDAp
OwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Qw
KTsKIApAQCAtMzc0LDcgKzM5Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0
cnVjdGlvbioKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwotICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAg
ICByZXQoKTsKICNlbHNlCkBAIC0zODMsOSArNDAyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0
KGNvbnN0IEluc3RydWN0aW9uKgogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJH
ZW5lcmF0b3IoVk0mIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJikKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7CiAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRM
aXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAgLTQxMSw3ICs0MzAs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAKICAgICBpZiAo
ZHN0ICE9IHNyYykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNDM0LDkgKzQ1MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
b19wcm9wZXJ0eV9rZXkoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIGFyZ3VtZW50R1BSMik7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0RnVuY3Rpb25OYW1lLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC00NjUsOCArNDg0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxz
ZShjb25zdCBJbnN0cnVjdGkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJl
Z1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1w
KGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFy
Z2V0KTsKQEAgLTQ4MCw3ICs1MDEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgog
ICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGds
b2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMSA9IHJlZ1QxOwpAQCAtNTE5LDcgKzU0MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9u
dWxsKGNvbnN0IEluc3RydWMKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVt
cCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAs
IHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBh
ZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xv
YmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwogCkBAIC01NDMsNyArNTY0LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydQogICAgIC8vIEZpcnN0LCBoYW5kbGUg
SlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0
cnVjdHVyZS4KICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKSwgdGFyZ2V0KTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwg
cmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFk
ZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRp
YXRlID0ganVtcCgpOwogCkBAIC01ODIsMTUgKzYwMywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
bnVuZGVmaW5lZF9vcl9udWxsKGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29u
c3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVj
aWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9p
bnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5t
X2hhc0p1bXBlZCk7CisgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lh
bFBvaW50ZXIsIHJlZ1QxKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQ
dHIoRXF1YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1t
MzIoMSksIGJ5dGVjb2RlLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgp
KTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwog
fQpAQCAtNjI1LDggKzY0NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0
cnVjdGlvCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBj
b25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwot
ICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3Jh
dGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRy
dXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmpl
Y3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENU
SVN0dWIodmFsdWVJc1RydXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02
NDAsNyArNjYxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3Qg
YmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcv
RlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3Rz
LCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAg
ICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MTsKQEAgLTY5NSw3ICs3MTYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0
cnVjdGlvCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZl
c1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDEpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRo
cm93LCByZWdUMSwgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAj
ZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQ
UjI7CkBAIC03MTEsNyArNzMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5z
dHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZt
KQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgdGhyb3duVmFsdWVHUFIgPSBhcmd1bWVudEdQUjE7CkBAIC03MjAsNyArNzQy
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogCiAjaWYgTlVN
QkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgaml0LmxvYWRQdHIoJnZtLnRv
cEVudHJ5RnJhbWUsIGFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChhcmd1bWVudEdQUjApOworICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihhcmd1bWVudEdQUjApOwog
I2VuZGlmCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50
R1BSMDsKQEAgLTkwOCw3ICs5MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVx
KGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1Qw
LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTE4LDcgKzk0MSw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTMx
LDcgKzk1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKICAg
ICAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1Qw
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYg
KHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RW
UmVnKTsKIH0KQEAgLTk1MSw3ICs5NzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmlj
KGNvbnN0IEluc3RyCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsK
ICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykK
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk3OCw3ICsx
MDAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydQogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTkzLDcgKzEwMTcs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQ2
NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNz
KHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKworICAgIC8vIE9PUFM6IFRoaXMgaXNuJ3QgZWxlZ2FudC4gV2h5IGFyZW4n
dCB0aGV5IGluIHRoZSBjYWxsZWUgc2F2ZSBidWZmZXIuIEkgZ3Vlc3MgYmVjYXVzZSB3ZSBjYW4g
T1NSIGV4aXQgaGVyZT8KKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9v
bFJlZ2lzdGVycygpOwogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVt
cCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUik7CkBAIC0xMDExLDIzICsxMDM4LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNv
bnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2Nh
bHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVm
ZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKLSAgICBpZiAoYnVmZmVyIHx8ICFzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0Jp
dHMoKSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVj
b2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNv
ZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBza2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRy
KFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAg
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAg
c2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdz
KHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29w
ZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNf
Y2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSwgcmVncyk7Ci0gICAgICAgIH0pOwotICAgIH0K
ICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIApAQCAtMTA1Myw4ICsxMDY4LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1w
IHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1l
bnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0
YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6
SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJs
ZSk7CiAKQEAgLTEwODEsMTMgKzEwOTYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2No
YXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5t
X3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGlu
YXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRT
aW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3Qg
VW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAg
IG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5k
ZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2Vk
VGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOwogICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIApAQCAtMTA5OSwyMCArMTExNSwyMiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5l
bnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hT
dHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtu
b3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgpOwogICAg
IGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOwot
ICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDAp
OworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
MCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZEZWJ1Z2dl
clJlcXVlc3RzKCkpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFu
Y2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcs
ICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAg
IG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwpAQCAtMTEzMyw3ICsxMTUxLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMik7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAg
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTQ4LDcgKzExNjYsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE2Niw3ICsxMTgzLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
Mik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAg
SnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTg4LDEyICsxMjA1LDE0IEBAIHZv
aWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBFdmVuIHRob3Vn
aCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAv
LyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5
IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJl
c3N1cmUuCi0gICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKKyAgICBz
aXplX3QgY291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1WYXJzKCk7CiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyAr
K2opCiAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikp
OwogCi0gICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CisgICAgCisgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0
V3JpdGVCYXJyaWVyKHJlZ1QwKTsKIAogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7
CiAjZWxzZQpAQCAtMTIxMiw3ICsxMjMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29u
c3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3Io
Vk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNp
ZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTEzMTAs
MjMgKzEzMjksMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQog
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5t
X2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MSk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0
VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQz
MkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hl
ZFN0cnVjdHVyZUlEKCksIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVj
b2RlLm1fY2FsbGVlOwotICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rp
b24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcg
PSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0
ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKQEAgLTEzNDIsNyArMTM1Nyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURh
dGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUo
KSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0
b3IoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlw
ZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0
dXJlUmVnKTsKIAotICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVn
KTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcENyZWF0ZVRoaXM6Ok1ldGFk
YXRhOjpvZmZzZXRPZkNhY2hlZENhbGxlZSgpLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVt
cCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlv
blJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkp
OwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRG
dW5jdGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMubGluayh0aGlzKTsKQEAg
LTEzNzIsNyArMTM4Nyw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVj
dGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hC
b29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BS
KTsKIH0KQEAgLTEzODIsNyArMTM5OCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29u
c3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7
CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJl
dHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEz
OTQsNyArMTQxMSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQog
CkBAIC0xNDA0LDcgKzE0MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJ
bnN0cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CiAKQEAgLTE0MTgsMTAgKzE0MzcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2Rl
Lm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBi
eXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rvciwg
cmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVn
VDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1Qy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFy
Z3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVl
LCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0
b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAgICAgYm94Qm9vbGVhbihy
ZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTQzMCw3ICsx
NDUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQog
ewotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3Bz
Rm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enpp
bmdFYXJseVJldHVybigpKSkgeworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJs
eUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fdW5saW5rZWRDb2RlQmxvY2stPmxv
b3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVp
bnRwdHJfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rp
b24pOwogICAgICAgICBsb2FkUHRyKHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJs
eVJldHVybiA9IGJyYW5jaFB0cihCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6
ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTE0NDAsNyArMTQ2MCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICNlbHNlCiAgICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKLSAgICAgICAgbW92ZVZhbHVlKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVzdWx0UmVncy5ncHIoKSk7CiAgICAgICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKQEAgLTE0NTMsOCArMTQ3Myw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xv
b3BfaGludChjb25zdCBJbnN0cnUKIAogICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24g
Y2hlY2s6IAogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7CisgICAgICAgIGxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CiAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZlT3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6
ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCi0gICAgICAgICAgICBBYnNvbHV0
ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7Cisg
ICAgICAgICAgICBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNv
dW50ZXIoKSkpKTsKICAgICB9CiB9CiAKQEAgLTE1MDksNyArMTUzMCw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFyZ3VtZW50R1BSMCk7CiAjZWxzZQogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTIy
LDcgKzE1NDQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZf
NjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMTU2NCwzNCArMTU4Niwz
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nh
c3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJS
ZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRHUFIwOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFs
R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBq
c0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkp
OwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNl
Ci0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0
TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNs
KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wp
KSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwogCiAgICAgT3Bj
b2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25l
d19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAg
ICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAg
ICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9u
LCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAg
ICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTYyMSwyMyArMTY0NSwyNCBAQCB2b2lk
IEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9h
ZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChi
eXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCiAKLSAgICBGdW5jdGlvbkV4
ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5t
X2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwciwgYml0d2lzZV9jYXN0PHZvaWQqPihz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxv
YWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHAp
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCks
IHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVu
Y3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNl
IGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAg
ZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBm
dW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlv
biwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2Ugewog
ICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4
cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjY0LDI5ICsxNjg5LDMwIEBA
IHZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19nZW5lcmF0b3JfZnUKIHZvaWQgSklUOjplbWl0
X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVj
b2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIGFyZ3VtZW50R1BSMik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRh
KGJ5dGVjb2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Q
cm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBzaXplKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2Rl
Lm1fbGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwg
cmVnVDApOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BO
ZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxl
KCksIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgs
IGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAjZWxzZQorICAgIG1h
dGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXpl
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKICAg
ICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxs
b2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApKTsKICNlbmRpZgogfQogCkBAIC0xNjk0LDggKzE3MjAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlw
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6
IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVu
IHRoZSB0eXBlIHByb2ZpbGVyIGlzIGVuYWJsZWQuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiog
Y2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0
ZXI7CiAKQEAgLTE3NzcsMjAgKzE4MDQsMjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRv
d19jaGlja2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBu
b25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1
ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1No
YWRvd0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsK
LSAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBu
b24tYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0g
ICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0
Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcg
PSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFkb3dD
aGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gy
UmVnKTsKKyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNW
YWx1ZSwgcmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJl
ZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFk
b3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3
ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdXNpbmcgdGhlIGNvbnRy
b2wgZmxvdyBwcm9maWxlci4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlvbiog
YmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgq
dGhpcyk7CkBAIC0xODYwLDcgKzE4OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1l
bnQoY29uc3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwog
CiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE4ODYsNyArMTkxNyw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlwZSh2
bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93
Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjg4MSw3ICsyODgxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAo
a2V5LmlzSW50MzIoKSkKQEAgLTI5MDQsNyArMjkwNCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIHZvaWQqIHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9j
ay0+YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAKICAgICBpZiAo
a2V5LmlzU3RyaW5nKCkpIHsKICAgICAgICAgU3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmluZyhr
ZXkpLT52YWx1ZShnbG9iYWxPYmplY3QpLmltcGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24g
MjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDcgKzM0OCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2
YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBK
U1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsK
ICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw5MiArNDksMTAzIEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBpZiAobWV0YWRhdGEubV9zZWVu
SWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50
aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxl
LCByZWdUMik7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2sp
Lm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVy
T2ZJZGVudGlmaWVycygpKSB7CisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVj
b2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFzZUdQUiwgcHJvcGVydHlH
UFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdU
MCwgcHJvZmlsZSwgcmVnVDIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChi
eXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CiAK
ICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAg
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgICAgICBnZW4u
c3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVn
cywgc3R1YkluZm9HUFIpOworCisgICAgICAgIC8vIE9PUFMuIFN1cHBvcnQgdGhpcworICAgICAg
ICAvL2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCisgICAgICAgIC8vICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAg
ICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRC
eVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIH0KLQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNv
ZGVUeXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVU
eXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAgICBpZiAoIWhhc0FueVNsb3dDYXNlcyhpdGVy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CiAKLSAgICAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIG1vdmUoQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVy
SW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBhcmd1bWVudEdQUjIpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7
CiAjZWxzZQotICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgICAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgQVNTRVJU
KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9m
ZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OworICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJl
YWR5IHVzZWQuCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50
R1BSMjsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwotCi0gICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKLSAgICAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICAgICAgQ2FsbCBjYWxsOwot
ICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRC
eVZhbE9wdGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIz
OyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmls
ZUdQUiA9IGFyZ3VtZW50R1BSMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgc3RhdGlj
X2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2Vy
dChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlID09IHJlZ1QwKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5ID09IHJlZ1QxKTsKKwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwg
T3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIp
OworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFs
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAg
ICB9CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQpAQCAtMTQ5LDcgKzE2MCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKQEAgLTE2MCw4ICsxNzEsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RH
UFIgPSBhcmd1bWVudEdQUjU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQ
UjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAg
IHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAg
ICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0xODcs
MzQgKzE5OCw0MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwog
CiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAg
ICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5h
bWUsCisgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywg
c3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9n
ZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
c3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKICAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CkBAIC0yMjMsOSArMjQwLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRp
b25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIz
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTIzNSwyNiArMjU0LDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVy
dHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQ
cml2YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTI2NCw3
ICsyNzcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRy
ZXNzKCk7CkBAIC0zMDAsMjEgKzMxMywyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0
ZV9icmFuZChjb25zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BTZXRQcml2YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsK
LSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1Qx
OworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7Ci0KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJy
YW5kR1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRH
UFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIFdlIHNob3Vs
ZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1i
YXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTMyNCwxNyArMzQ0LDIyIEBAIHZvaWQgSklU
OjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJh
c2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3By
aXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlv
bik7CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5k
QWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJy
YW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMzQ0LDI0ICszNjksMTggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJp
dmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fz
c2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9u
U2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8
ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVz
Pjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAg
ICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZgogCi0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNr
X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTM3MCwxOSArMzg5LDI4IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQo
Y28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFu
ZCwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsK
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJyYW5kLCBicmFuZEdQUik7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiks
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiB9CiAKQEAgLTM5NCw5ICs0MjIs
MTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5k
T3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC00MDYsMjQgKzQz
NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFs
cmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRy
YWl0czxkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3Vt
ZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1l
T3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5k
T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25D
aGVja1ByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00
MzUsMzAgKzQ1OSw0MiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIocHJvZmlsZSksIHJlZ1QzKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6cHJvZmlsZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7
CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJlZ1Q0KTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9maWxlR1BSKTsKKyAg
ICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAKICAgICBKSVRQdXRCeVZhbEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEp
LCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCk7Ci0gICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJ
bnQzMiA9IHRydWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNW
YWx1ZVJlZ3ModmFsdWVHUFIpLCBwcm9maWxlR1BSLCBzdHViSW5mb0dQUik7CisgICAgLy8gT09Q
UzoKKyAgICAvL2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCisgICAgLy8gICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDsKKyAgICBzdHVi
SW5mby0+cHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsRGlyZWN0PiA/IFB1
dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1v
ZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRC
eVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3
aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00NzQsMTUgKzUxMCwx
MiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01B
TW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKLSAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsK
ICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAg
ICAgIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKLSAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAg
LTQ5OCw3ICs1MzEsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SQogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkgYXJlIGNvbmZp
Z3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEs
IHJlZ1QyLCBnZW4uc3R1YkluZm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BS
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFI0KTsKKyAgICBpZiAoaXNEaXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCksIE9wUHV0
QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQ
UjUpOworICAgIGVsc2UKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbERpcmVjdDo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BS
MywgYXJndW1lbnRHUFI0LCBhcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtNTEyLDcgKzU1NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3Zh
bF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBD
YWxsIGNhbGw7CiAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0
cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkg
PyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZSk7CkBAIC01MjMsNyArNTY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpA
QCAtNTMzLDE4ICs1NzUsMjQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFn
UmV0dXJuQWRkcmVzcygpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIg
PSByZWdUNTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgeworICAgICAgICBSZWdpc3RlclNldCB1
c2VkKEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5LCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZSwgQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250
YWlucyhyZWdUNCkpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDUpKTsKKyAg
ICB9CisKIAogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CkBA
IC01NzAsMjAgKzYxOCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNv
bnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiks
IEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAg
YWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJ
bmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmllbGRQdXRLaW5k
ID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlW
YWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0
aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTk0LDggKzY1Myw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigp
OwotICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsK
KyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgIEpJVFB1dEJ5VmFs
R2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKQEAgLTYw
MywxMyArNjYxLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgYXV0byBvcGVyYXRp
b24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVG
aWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgLy8gVGhleSBhcmUgY29uZmlndXJl
ZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7Ci0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBnZW4uc3R1
YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKKyAgICBQcml2YXRlRmll
bGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBh
cmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3Vt
ZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIz
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSNCk7CisgICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkg
PyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9u
UHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRzR1BSMywgYXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjg0LDEyIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNh
bGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAg
ZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNjQzLDE0ICs2OTksMTQgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25z
IGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJl
bG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAg
Ly8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUNDsKIApAQCAtNjgwLDcgKzczNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC02ODksNyArNzQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9i
eV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJC
eUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC02OTksNyArNzU3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9zZXR0ZXJfYnlfaQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJl
Z1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdU
Mik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwg
cmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJl
Z1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MDksNyArNzY4LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWws
IHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTcxOSw3ICs3NzksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3Bl
cnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1
dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmli
dXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyNywyMyArNzg4LDMzIEBAIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNl
bGluZURlbEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAg
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
dHViSW5mb0dQUiwgc2NyYXRjaEdQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3Jp
dGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xv
YmJlcnMgcmVnaXN0ZXJzLgpAQCAtNzU5LDE1ICs4MzAsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91
bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAg
ICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4Kytd
OwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWxldGVCeUlkT3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtNzgxLDI0ICs4NTQsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Rl
bF9ieV9pZChjb25zdCBJbgogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1
bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BS
NDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlk
T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25E
ZWxldGVCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAg
c3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdU
MCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC04MDgsNyArODc2LDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtODQ1LDIyICs5
MTMsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHBy
b3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBC
YXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFy
cmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMg
cmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3Jp
dGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5NjIsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVC
eVZhbE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBh
cmd1bWVudEdQUjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCArOTgwLDE5IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNt
YU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21h
TW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNl
Ci0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1
cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCkBAIC05MjYsNyArMTAwMiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAg
ICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTk2MSwyMiArMTAzNywzMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
VlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vz
c1R5cGU6OlRyeUdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJ
ZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpUcnlHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZyk7CiB9CiAKQEAgLTk4NiwxNCArMTA3MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dHJ5X2dldF9ieV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJ
ZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDAzLDI2ICsxMDkx
LDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKICAgICBtb3Zl
KEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwog
CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VH
UFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9H
UFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Nh
bWU8ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAzMCwyMiArMTExMiwzMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0
QnlJZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiArMTE0NSwxOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERp
cmVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTEwNzMsODMgKzExNjYsNjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF9kaXJlY3QoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVj
dE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2Fs
bCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlJZERpcmVjdE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFs
dWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVl
R1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVl
R1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJl
ZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxl
bmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgSnVtcCBub3RBcnJheUxl
bmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1f
bW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0
QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwocmVnVDAsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUu
YXJyYXlQcm9maWxlLCByZWdUMSk7CisgICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1v
ZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlKCksIHNjcmF0Y2hHUFIpOworICAgICAgICBKdW1wIG5v
dEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIE9wR2V0QnlJ
ZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRh
QXJyYXlMZW5ndGg6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGJhc2VHUFIsIHNjcmF0Y2hHUFIp
OwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3Ms
IHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5
SWRzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0VlJlZyk7Ci19CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJl
c3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAotdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOwotCi0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKIAotICAgIEpJVEdldEJ5SWRXaXRoVGhp
c0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHNX
aXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKKyAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTExNTgsMTYgKzEyMjksMTggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtMTE3NywyNiArMTI1MCw1NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwog
ICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3Bl
cnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7
Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZS
ZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0
QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlz
VlJlZywgdGhpc0dQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2VWUmVnKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhp
c1ZSZWcpOworCisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiks
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBt
X2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjA2LDcg
KzEzMTAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRy
ZXNzKCk7CkBAIC0xMjQxLDE2ICsxMzQ1LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5
SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdp
dGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUs
IGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBv
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMTI2MCwyOCArMTM2NywyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJn
dW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IHJlZ1QxOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0
QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0g
YXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodGhpc0dQUiA9
PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dl
dF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjkxLDcgKzEzOTIsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMg
YXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUg
ZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBm
dW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3Qg
bWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0x
MzI5LDIzICsxNDMwLDM3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0
cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBk
aXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICAvLyBJbiBvcmRlciB0byBi
ZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0
LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVu
dHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdl
IGdlbmVyYXRlIGNvZGUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBh
cmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3Rl
cnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJhc2VWUmVnLCBiYXNlR1BSLCB2YWx1ZVZSZWcsIHZhbHVlR1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUUHV0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDMsIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BS
KSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAg
ZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OlB1dEJ5SWQ7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBkaXJlY3QgPyBQdXRLaW5kOjpE
aXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNt
YU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29k
ZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBz
dHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKwor
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlJZHMuYXBw
ZW5kKGdlbik7CiAgICAgCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91
dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMTM1OSwxNCArMTQ3NCwxOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0QnlJZD4oKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAgICAgCiAg
ICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsr
XTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbihnZW4uc2xvd1Bh
dGhGdW5jdGlvbigpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBh
cmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMzc2LDI1ICsxNDk1LDE5IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYWxyZWFkeSBpbiB1
c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh2
YWx1ZUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IGdlbi5zbG93UGF0aEZ1bmN0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChnZW4uc2xvd1BhdGhGdW5jdGlvbigpKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKQEAgLTE0MDQsNyArMTUxNyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0
aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcg
dG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
ICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE0NDEsMjAgKzE1NTQsMzEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5C
eUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFz
ZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0NjMsMTQgKzE1ODcsMTcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9p
bkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTQ4MCwyOCArMTYwNywyMiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mg
bm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEg
ZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUo
b3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBl
bmRDYWxsKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5W
YWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NTEwLDI1ICsxNjMxLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0
cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0
ZWNvZGUsIGJhc2VHUFIsIEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CiAKICAg
ICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5m
b0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpJbkJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5k
KGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNTM3LDE1
ICsxNjY2LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSklUSW5CeVZhbEdl
bmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxl
KCksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1
bWVudEdQUjMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50
R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBh
cmd1bWVudEdQUjQpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTU1Niw1
OSArMTY4OCw3MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9w
ZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxl
KSwgcHJvZmlsZUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpLCBwcm9maWxlR1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUn
cyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQg
YSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlw
ZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRI
YXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcHJvcGVydHlHUFIp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAg
IEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IHR5cGU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5
VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNj
ZXNzVHlwZSB0eXBlKQordm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBB
Y2Nlc3NUeXBlIHR5cGUpCiB7CisgICAgVU5VU0VEX1BBUkFNKGJhc2UpOworICAgIFVOVVNFRF9Q
QVJBTShwcm9wZXJ0eSk7CiAgICAgQVNTRVJUKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogCiAgICAgSklU
SW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlw
ZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3Bl
cmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24odHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2MSwyMSBAQCB2b2lkIEpJ
VDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0g
cmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJh
c2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFs
dWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhh
c1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVP
cHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Ns
b3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0
aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBv
cGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTY1Miw3ICsxNzg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUo
YwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2
YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAg
IGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRl
Y29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDE5ICsxODAzLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+
KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwg
Ynl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
QnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICgh
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQ
Uik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0ds
b2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2lu
dFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25l
ZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2ODgs
NiArMTgyOCw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09Q
UwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNj
b3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3MDEs
NyArMTg0Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9y
Q29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwg
cmVnVDEpOwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5k
aW5nRXBvY2gsIHJlZ1QxKTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNz
T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4NTYs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAg
IEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJs
b2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDAp
OwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7
CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTE3OTQsODcgKzE5MzUsMTA1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9m
aWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayku
bV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJU
KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBj
dXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9
IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJv
ZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBj
b2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRh
ZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmls
ZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmly
b25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRh
T2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOwor
ICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5t
ZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgUkVT
T0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNv
bHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3Ig
Z2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09M
VkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBb
XSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNj
b3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9z
dXJlVmFyIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKwor
ICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0g
W10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVT
Y29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5l
OiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7Cisg
ICAgICAgIH07CisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0g
W10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVT
Y29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBn
ZW5lcmljIik7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7
CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNv
bHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0
dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICBj
b2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVy
YXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdl
bmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChj
b2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSwgc3RkOjpv
cHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkK
IHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkg
d29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRh
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCiAgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAt
IHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAg
IFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUp
KTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRh
ZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7Cisg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1l
dGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQ
Uik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlv
bkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFs
T2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVj
ayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVj
dEdQUiA9IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9
PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsK
LSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFs
T2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6
b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNH
bG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hw
b2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAg
ICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0
YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBkb1ZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIs
IHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAg
ICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAg
ICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAgewot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwot
ICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwor
ICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICAg
ICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1
dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEy
ICsyMDQxLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50
U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAg
ICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGds
b2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwg
cmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4
aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2Jq
ZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9i
amVjdEdQUik7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIs
IEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJl
Z1QxKSk7CisgICAgICAgICAgICBqaXQubW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEgKzIwNTYsMTEgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNh
bFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBy
ZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAg
ICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2Jq
ZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZz
ZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsyMDY4
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAg
ICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENs
b3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMjA3OCw0NSBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsK
LQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90
R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewor
ICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5
cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxz
ZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCBy
ZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCBy
ZWdUMCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBhdXRv
IGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAgICAgICAgICAg
SnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAg
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgbm90Q2Fz
ZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQ
cm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBl
bWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENh
c2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENh
c2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29k
ZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygm
aml0KTsKICAgICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2Zp
bGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1Yihz
bG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
d0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVf
c2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0K
IAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZlX3Nj
b3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAg
aWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkp
IFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAg
ICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUs
ICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1G
T1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3Vu
ZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZN
JiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2Fu
IG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRoIGFs
cmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAtMjA2
NSw2ICsyMTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8g
T09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTIx
NzgsNyArMjMwMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTIxODYsOSArMjMw
OCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0
aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRp
b25HZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwog
fQogCiAjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTIxOTYsNDEgKzIzMTgs
NTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwor
ICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NF
UlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09
IGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBb
XSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJl
VmFyIik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRl
T3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Ms
ICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAg
ICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAg
ICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxs
b3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0g
ICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNl
dEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNl
dCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5
cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAg
c3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAg
IEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAg
IH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0
YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0
YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAg
ICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNl
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJ
U3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJD
YWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUs
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlv
bmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewog
ICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3Jr
IHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCkBAIC0yMjM5LDk5ICsyMzcwLDg4IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICB1c2luZyBNZXRhZGF0YSA9
IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAg
IFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUp
KTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisg
ICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0
cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0
LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAK
LSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVH
UFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAg
ICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwg
U3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSKSB7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1
cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAg
ICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkp
OwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9
IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSks
IHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBv
aW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
KyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlv
bldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBl
bWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykg
ewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwot
ICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFy
RnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0g
ICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRvIGVtaXRHZXRDbG9z
dXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7CiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBs
c2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2Nv
cGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CisgICAg
ICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOworICAgICAgICBq
aXQuYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSksIHJlZ1QwKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8g
ZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAg
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVj
dGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhl
IEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tp
bmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1Qw
OwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKICAgICAgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAgICAgICAgICBqaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAg
ICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBi
cmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQo
c2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGppdC5icmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgb2Zmc2V0
KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1
bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1
c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRX
aXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091
dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBq
aXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJz
dE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24o
SklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxp
bmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBu
ZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZz
ZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSksIHJlc3VsdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0Lm5lZzMy
KG9mZnNldCk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZz
ZXQpOworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBU
aW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3Bl
cmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0
VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdU
MCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkp
LCByZWdUMyk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwogICAg
ICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAg
ICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQxLDg2ICsyNDYxLDYzIEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAg
ICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVl
KTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0
Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBl
IGludG8gVDAKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0
YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5
cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmso
JmppdCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0
LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAg
ICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBK
dW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0ds
b2JhbFByb3BlcnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNl
LmFwcGVuZChqdW1wKCkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVt
cCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxz
ZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9
CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEp
OwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkpKTsKIAotICAgIHJldCgp
OworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xv
d0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5l
cmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVs
KHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFi
ZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dl
bmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJ
c1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVy
biB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5l
cmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zy
b21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBF
KERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9N
X1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8g
VGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0
aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3Rl
cnM6OmVicCk7CkBAIC0yNDcxLDg2ICsyNTY4LDc5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0g
ICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJl
Y3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAg
ICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwg
cmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90
aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJl
Z2lzdGVyKSkpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNj
b3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dElu
Zm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5y
ZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5t
X3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGVt
aXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlw
ZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVj
dHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ug
d2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmpl
Y3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUg
dmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFy
IGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBi
dXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2
ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAg
ICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6
Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRl
c3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBT
dHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRh
PEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJh
bmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAg
ICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFu
ZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5k
KCksIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9y
ZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgo
cmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIC8vIE9PUFM6IHdvdWxkIGJlIG5p
Y2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIEdQUlJlZ3MgaW5zdGVhZCBvZiBWUnMKKyAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZh
cjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5
cGUpOwotICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlh
bGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewor
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2so
cmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShi
eXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1Qw
KTsKKworICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0
SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBo
ZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hl
Y2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJh
bmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlu
ZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlh
YmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwg
Jm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJh
bmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAg
ICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdU
MSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNl
IHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3IgdmFsdWUuCisgICAgICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1
cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1p
dFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0
Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
V2F0Y2hwb2ludFNldCgpLCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVn
VDIpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9y
ZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxF
bnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOworCisgICAgICAgICAgICAvLyBPT1BT
OiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3Ig
b3duZXIvdmFsdWUuCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9k
dWxlVmFyOgpAQCAtMjU2NCw1OCArMjY1NCw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAg
IEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0
ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcu
Ci0KLSAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBD
bG9zdXJlVmFyLyBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4g
Y29tcGlsZSB0aGluZ3MKKyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNl
IHdlJ3ZlIHByb3ZlbiB0aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xv
c3VyZVZhciwKKyAgICAvLyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdl
J3JlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3Vy
ZVZhcgorICAgIC8vIGlmIHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQu
IElmIGl0IGlzIGZpcmVkLCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24n
dAorICAgIC8vIG1hdHRlciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChw
cm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1
cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9z
dXJlVmFyKQorICAgICAgICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2Ug
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygp
LCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0
cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBp
c0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHku
bGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKIAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEds
b2JhbFZhci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
KyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXIubGluayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7
Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjYyNCwxOCArMjcwOCwyMSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9TY29wZT4oKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1
dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcikgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAg
Ly8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5r
ZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1
bGVWYXIuCiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVy
dHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxz
ZSB7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUs
IGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29k
ZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICAgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRl
Y29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3
ICsyNzM5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAg
ICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNzAxLDcgKzI3ODgsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdU
MCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyODQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CkBAIC0yNzY3LDcgKzI4NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxf
ZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNl
dE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAt
Mjc4OSw3ICsyODc1LDYgQEAgdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxP
cAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9t
b2RlOwpAQCAtMjgwNSw3ICsyODkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9u
ZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlzIGlz
IHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBjYXNl
IGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRhZGF0YS5tX2Vu
dW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVy
ZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayku
bV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1
Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAg
ICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMih+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVN
b2RlKSkpOwpAQCAtMjg0Nyw3OCArMjkzMiw4NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJh
dG9yX25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1l
cmF0b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2Ny
YXRjaDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7CiAKLSAgICBv
cjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEp
KTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6
Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoMik7CisgICAg
b3IzMihzY3JhdGNoMywgc2NyYXRjaDIpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaDIs
IGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVy
YXRvck1ldGFkYXRhKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKICAgICAvLyBU
aGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgotICAgIEp1bXAgaXNOb3RPd25T
dHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9
IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okdl
bmVyaWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIHN0cnVj
dHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNo
Mik7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3Jh
dGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQuCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4g
dGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxp
bmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJU
b1B0cihyZWdUMywgcmVnVDMpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBU
aW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQorICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgc2ln
bkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4
KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAog
ICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxp
bmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDMpOwotICAg
IG5lZzMyKHJlZ1QzKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOworICAg
IGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBi
YXNlR1BSKTsKKyAgICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgbmVn
MzIoc2NyYXRjaDIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7
CiAgICAgY29uc3RleHByIGludHB0cl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IG9mZnNldElu
QnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludHB0cl90Pihz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdU
MywgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICBs
b2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsK
IAogICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3Ry
dWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgIHN0
b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFz
U2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2RlLCBPcEVudW1l
cmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwog
CiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc05vdElu
ZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQgPSBi
cmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdpdGgg
dGhlIGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAgICBpc05v
dEluZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZh
bDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAog
ICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTI3LDEwICszMDIxLDkgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVyKTsK
IH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVu
Y3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5
dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6
ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9u
VHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0yOTM5
LDcgKzMwMzIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltCiAg
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2Rl
LCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51
bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgcmVnVDEpOworICAg
IG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1QxLCBieXRlY29k
ZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAog
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwogCkBAIC0z
MDI4LDYgKzMxMjMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
cgogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIAordm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQoreworICAgIEp1bXAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNlbGVjdFNjcmF0
Y2hHUFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0Myw3ICsxNTQzLDcgQEAgc3RhdGljIHZvaWQgcmV2
ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogCiB2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1w
RGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0
aFN0YXJ0KCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAi
VW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7CiAg
ICAgCiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEs
IE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2Vy
T3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNv
ZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQot
ICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0
eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEs
IHQyKQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRb
Y2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8g
cHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGlu
IHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAg
ICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRh
dGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAgICBk
aXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBs
bGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9m
aWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1l
dGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BO
ZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAg
ICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAg
dXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQz
KQogICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJp
YSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQot
ICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5h
cnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAg
IHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAg
ZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVj
dCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJv
ZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAg
ICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMsIHQy
KQogICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcs
IC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0gICAg
ICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQog
ICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUo
dDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsx
MTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAg
ICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAu
b3AxTm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAg
ICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0
NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFk
eQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0g
ICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVw
ZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51
bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0
MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3Jv
IGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVy
YW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVs
eSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFn
LCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAg
ICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJ
bnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0
MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEsMTMg
QEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSBQQywg
YTEKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBidHB6
IHIwLCAucmVjb3ZlcgotCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisgICAgICAgICAgICAj
IEJhc2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFudCBw
b29sLgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgICAgICAgICBs
b2FkcCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2Rl
QmxvY2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwogICAgICAgICAgICAg
aWYgQVJNNjRFCiAgICAgICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlND
OjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6Omxvb3BPU1JFbnRy
eSkgKiBQdHJTaXplLCBhMgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0RXF1
YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1l
LCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0
eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQK
LQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0s
IHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3MCw3IEBAIG1hY3Jv
IHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJh
dGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3Jl
cSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2Zp
bGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJp
dGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpA
QCAtMTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25l
Z2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0
dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0
eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2Zp
bGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikK
QEAgLTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9w
TmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdp
IHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQ
cm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFBy
b2ZpbGVJbnQsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAg
YnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAw
MDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAg
ICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0
MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE2
MCw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUs
IHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBl
LCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3JocywgdDAp
CiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21T
dG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRl
Z2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmls
ZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBkaXNwYXRj
aCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRh
ZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0
MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVt
YmVyLCB0NSwgdDIpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50
T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVy
SW50LCB0NSwgdDIpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6
CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA0LDkgKzExOTYsOSBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAKICAgICAub3AyTm90SW50OgogICAgICAg
ICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVm
aW5pdGVseSBub3QuCi0gICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51
bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisg
ICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmls
ZUludE51bWJlciwgdDUsIHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBjaTJk
cyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBm
dDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjU1Niw2
ICsyNTU2LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNy
byB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0
ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVb
bWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNb
dGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90
IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNo
b3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0
X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRp
Zmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
YWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4
ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsK
IAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChK
U0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmll
ciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3Qg
SWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmlu
Z0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0
aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJ
ZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tU
eXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlk
ZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCop
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3
Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdC
aXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MTg2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25z
dCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Citpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJ
ZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVu
dGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZp
ZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsK
ICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVp
ZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlz
aW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NP
TU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lk
IHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1l
dGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5QXJp
dGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5hcnlB
cml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAgcHJv
ZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8
fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBpbmxpbmUg
cHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVu
Y3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlm
Zl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9m
ZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlv
bkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0
cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsgfQog
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShyZXZp
c2lvbiAyODE4NjgpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNiArNjYsMjAgQEAgcHVibGljOgogICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOwog
ICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQmFnJiBvcGVyYXRvcj0oQmFn
PFQsIFU+JiYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodW53cmFwcGVkSGVhZCgpID09IG90
aGVyLnVud3JhcHBlZEhlYWQoKSkKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKworICAgICAg
ICBCYWcgZGVzdHJveTsKKyAgICAgICAgZGVzdHJveS5tX2hlYWQgPSB1bndyYXBwZWRIZWFkKCk7
CisgICAgICAgIG1faGVhZCA9IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgb3RoZXIu
bV9oZWFkID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCiAgICAg
fkJhZygpCiAgICAgewogICAgICAgICBjbGVhcigpOwpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4t
anNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3Ry
ZXNzLXRlc3RzCShyZXZpc2lvbiAyODE4NjgpCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3Ry
ZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC03NzAsMTcgKzc3MCwxOCBAQCBlbmQKIAogIyBG
SVhNRTogbmVlZCB0byBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxODcwMyB0byBlbmFibGUgdGhpcyBvbiBMaW51eC9NSVBTLgogZGVmIHJ1bkJ5dGVjb2RlQ2Fj
aGVJbXBsKG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucywgKmFkZGl0aW9uYWxFbnYpCi0gICAg
aWYgKCRob3N0T1MgPT0gImRhcndpbiIpCi0gICAgICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29k
ZS1jYWNoZSIKLSAgICBlbHNpZiAoJGhvc3RPUyA9PSAibGludXgiICYmICRhcmNoaXRlY3R1cmUg
IT0gIm1pcHMiKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhYWFgi
Ci0gICAgZWxzZQotICAgICAgICBza2lwCi0gICAgICAgIHJldHVybgotICAgIGVuZAorICAgICMg
T09QUworICAgICNpZiAoJGhvc3RPUyA9PSAiZGFyd2luIikKKyAgICAjICAgIGZpbGVUZW1wbGF0
ZSA9ICJieXRlY29kZS1jYWNoZSIKKyAgICAjZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAk
YXJjaGl0ZWN0dXJlICE9ICJtaXBzIikKKyAgICAjICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29k
ZS1jYWNoZVhYWFhYWCIKKyAgICAjZWxzZQorICAgICMgICAgc2tpcAorICAgICMgICAgcmV0dXJu
CisgICAgI2VuZAogCi0gICAgb3B0aW9ucyA9IEJBU0VfT1BUSU9OUyArIEZUTF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9u
cwotICAgIGFkZFJ1bkNvbW1hbmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxw
ZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRl
LnRvX3MsICp2bUNvbW1hbmQsICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRw
dXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQorICAgICNvcHRp
b25zID0gQkFTRV9PUFRJT05TICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMgKyAkdGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25zCisgICAgI2FkZFJ1bkNvbW1hbmQo
ImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxwZXJzICsgImJ5dGVjb2RlLWNhY2hl
LXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRlLnRvX3MsICp2bUNvbW1hbmQsICRi
ZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJv
ckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQogZW5kCiAKIGRlZiBydW5CeXRlY29kZUNhY2hlKCpv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437290</attachid>
            <date>2021-09-03 11:47:05 -0700</date>
            <delta_ts>2021-09-03 12:03:10 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>423313</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL3Byb3h5LXNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L3N0cmVzcy9wcm94eS1zZXQuanMJKHJldmlzaW9uIDI4MTg2OCkKKysrIEpTVGVzdHMvc3RyZXNz
L3Byb3h5LXNldC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIGZ1bmN0aW9u
IGFzc2VydChiKSB7CiAKICAgICBsZXQgY2FsbGVkID0gZmFsc2U7CiAgICAgbGV0IGhhbmRsZXIg
PSB7Ci0gICAgICAgIHNldDogZnVuY3Rpb24odGhlVGFyZ2V0LCBwcm9wTmFtZSwgdmFsdWUsIHJl
Y2VpdmVyKSB7CisgICAgICAgIHNldDogZnVuY3Rpb24gdGhlU2V0KHRoZVRhcmdldCwgcHJvcE5h
bWUsIHZhbHVlLCByZWNlaXZlcikgewogICAgICAgICAgICAgYXNzZXJ0KHRoZVRhcmdldCA9PT0g
dGFyZ2V0KTsKICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7CiAgICAgICAgICAgICB0aGVUYXJn
ZXRbcHJvcE5hbWVdID0gdmFsdWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTgzMSw2ICs4MzEsNyBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzLmgKICAg
ICBqaXQvQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaAorICAgIGppdC9CYXNlbGluZUpJVENvZGUu
aAogICAgIGppdC9DQ2FsbEhlbHBlcnMuaAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgK
ICAgICBqaXQvRXhlY3V0YWJsZU1lbW9yeUhhbmRsZS5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291
cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYxOSw2ICs2MTksNyBAQCBpbnRlcnByZXRlci9T
aGFkb3dDaGlja2VuLmNwcAogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAogCiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAoraml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKIGppdC9CYXNlbGluZUpJ
VFBsYW4uY3BwCiBqaXQvQmluYXJ5U3dpdGNoLmNwcAogaml0L0NDYWxsSGVscGVycy5jcHAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtOTAwLDYgKzkwMCw3IEBACiAJCTUyQ0QwRjVEMjI0MkY1Njkw
MDRBMThBNSAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3Vu
ZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKIAkJNTJDRDBGNUUyMjQyRjU2OTAwNEExOEE1IC8qIEph
dmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjY4MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZn
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0Qw
RjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLzsgfTsKKwkJNTJERDAwMDgyNkUw
MzlCOTAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2Vs
aW5lSklUQ29kZS5oICovOyB9OwogCQk1MkVFRDc5NDI0OTJCODcwMDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUyRUVENzkzMjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovOyB9
OwogCQk1MkY2QzM1RTFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZD
MzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyB9
OwogCQk1MzBBNjZCOTFGQTNFNzhCMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCMTFGQTNF
NzdBMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gKi87IH07CkBAIC0xNDE2LDEwICsx
NDE3LDEwIEBACiAJCUEzOENBNTlFMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzhDQTU5QzI2REQ4NERF
MDBDOEQ4NEMgLyogSVNPODYwMS5oICovOyB9OwogCQlBMzhEMjUwRTI1ODAwRDQ0MDA0MkJGREQg
LyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzOEQyNTBEMjU4MDBENDMwMDQyQkZERCAvKiBKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlSW5saW5lcy5oICovOyB9OwogCQlBMzhENUJGQzI2NjZEM0RBMDBB
MTA5QTYgLyogSW5CeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTM4RDVCRkEyNjY2RDNEQTAwQTEwOUE2IC8qIEluQnlTdGF0dXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBM0VFODU0MzI2
MjUxNEIwMDBGQzlCOEQgLyogSW50bFdvcmthcm91bmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTM3NjE5NDAyNjI1MTI3QzAwQ0JDQkE5IC8qIElu
dGxXb3JrYXJvdW5kLmNwcCAqLzsgfTsKIAkJQTNDN0VEQjYyNkIwREIzODAwNEMzNEM1IC8qIFRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEzQzdFREIwMjZCMERCMzYwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlLmggKi87IH07CiAJCUEzQzdFREI5MjZCMERCMzgwMDRDMzRDNSAvKiBUZW1w
b3JhbER1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBM0M3RURCMzI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oICovOyB9
OwogCQlBM0M3RURCQTI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBM0M3
RURCNDI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmggKi87
IH07CisJCUEzRUU4NTQzMjYyNTE0QjAwMEZDOUI4RCAvKiBJbnRsV29ya2Fyb3VuZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzc2MTk0MDI2MjUx
MjdDMDBDQkNCQTkgLyogSW50bFdvcmthcm91bmQuY3BwICovOyB9OwogCQlBM0ZGOUJDNzIyMzQ3
NDkxMDBCMUE5QUIgLyogWWFyckZsYWdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBM0ZGOUJDNTIyMzQ3NDY2MDBCMUE5QUIgLyogWWFyckZsYWdzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTUwM0ZB
MUExODhFMEZCMDAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MDNGQTE0MTg4RTBGQUYwMDExMEYx
NCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggKi87IH07CiAJCUE1MDNGQTFFMTg4RTBGQjAwMDEx
MEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MDNGQTE4MTg4RTBGQjAwMDExMEYxNCAv
KiBKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaCAqLzsgfTsKQEAgLTM2NjcsNiArMzY2
OCw4IEBACiAJCTUyQ0QwRjY0MjI0MkY1NjkwMDRBMThBNSAvKiB0ZXN0ZGZnICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4
ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0ZGZnOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyog
dGVzdGRmZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0ZGZn
LmNwcDsgcGF0aCA9IGRmZy90ZXN0ZGZnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTJEMTMwOEYyMjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuamF2YXNjcmlwdDsgcGF0aCA9IGZvby5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBCYXNlbGluZUpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTJERDAwMDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBCYXNlbGluZUpJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MkVFRDc5MjI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xp
c3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNTYsNiArNjI1
OSw4IEBACiAJCQkJNkI3NjdFN0EyNjc5MUYyNzAwMTdGOEQxIC8qIEFzc2VtYmx5SGVscGVyc1Nw
b29sZXJzLmggKi8sCiAJCQkJNzIzOTk4RjYyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklU
UGxhbi5jcHAgKi8sCiAJCQkJNzIzOTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklU
UGxhbi5oICovLAorCQkJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENv
ZGUuY3BwICovLAorCQkJCTUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENv
ZGUuaCAqLywKIAkJCQkwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNw
cCAqLywKIAkJCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi8s
CiAJCQkJNjVCODM5MkQxQkFDQTlEMzAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmNwcCAqLywK
QEAgLTk2OTYsNiArOTcwMSw3IEBACiAJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1OTUwIC8qIERG
R0Zsb3dNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAv
KiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3
M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJERDAwMDgyNkUw
MzlCOTAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
REQ4MTUxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjY5Q0M4OTE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERGODIwMDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5m
by5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXN0LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpc3QucmIJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5
ICsyOTAsMTAgQEAgb3BfZ3JvdXAgOlByb2ZpbGVkQmluYXJ5T3AsCiAgICAgICAgIGxoczogVmly
dHVhbFJlZ2lzdGVyLAogICAgICAgICByaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3Bl
cmFuZFR5cGVzOiBPcGVyYW5kVHlwZXMsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQK
ICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJp
dGhQcm9maWxlCisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAg
ICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTEsOSArMzUyLDEw
IEBAIG9wX2dyb3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgIF0sCiAgICAgYXJnczog
ewogICAgICAgICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvZmlsZUluZGV4
OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmls
ZTogVW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJv
ZmlsZS4qCiAgICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg0LDkgKzM4NiwxMCBAQCBvcCA6
bmVnYXRlLAogICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZDog
VmlydHVhbFJlZ2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLAorICAgICAg
ICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAg
ICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAgYXJpdGhQcm9maWxl
OiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFu
ZHNGb3JDaGVja3BvaW50LmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Myw2ICs3MywyOCBAQCBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckltcGwo
Qnl0ZWNvCiAgICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9maWxlOwogfQogCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yKHVu
c2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURfUEFSQU0oY2hlY2twb2ludElu
ZGV4KTsKKyAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRv
cl9vcGVuKSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNh
c2UgT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mSXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46
OmdldE5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFByb2ZpbGUo
KTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9w
X2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAg
ICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJldHVybiBCeXRlY29kZTo6
TWV0YWRhdGE6Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0
ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZE
b25lUHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1ZTogcmV0
dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2ZpbGUoKTsKKyAgICAgICAg
ZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSAKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxl
KCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1Zh
bHVlUHJvZmlsZUZvcihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2tw
b2ludEluZGV4KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEg
KzExNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0Vf
QVNTRVJUKCFpc09uTGlzdCgpKTsKIH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19
Ci0KIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xv
d1BhdGhTdGFydCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjI1
LDYgKzIyMCwxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0TWF4QXJndW1lbnRDb3VudEluCiAg
ICAgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZhbHVlOwogfQogCitDb2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQo
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkgJiYgaXNUYWlsQ2FsbCgpKTsKKyAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KHUuY29k
ZUlDLm1fZmFzdFBhdGhTdGFydCk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNpdFdlYWso
Vk0mIHZtKQogewogICAgIGF1dG8gaGFuZGxlU3BlY2lmaWNDYWxsZWUgPSBbJl0gKEpTRnVuY3Rp
b24qIGNhbGxlZSkgewpAQCAtMjk4LDIzICsyOTksMTEgQEAgdm9pZCBDYWxsTGlua0luZm86OnNl
dEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQo
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQ
YXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKLSAgICBp
ZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIg
IT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwotICAgICAgICB1LmRhdGFJ
Qy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAgICB9Ci0KLSAgICBhdXRv
IGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKLSAgICB9
KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKLSAgICBpZiAoaXNE
YXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlDOjpZZXMpIHsKICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7CiAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9m
Q2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBnb1Bv
bHltb3JwaGljOwpAQCAtMzIzLDcgKzMxMiw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBD
YWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMgPSBqaXQuYnJhbmNoVGVz
dFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwg
Y2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAg
ICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7
CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8vIFBvbHltb3JwaGljIHN0
dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAgICAgIGppdC5mYXJKdW1w
KENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mTW9ub21vcnBo
aWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAtMzM2LDE0ICszMjUsMTYg
QEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICBzbG93
UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFs
LCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVs
bHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKLSAgICAgICAgaWYg
KGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAg
cHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJUYWlsQ2Fs
bCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhckNhbGwoKTsK
KworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwogICAgICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICB1LmNv
ZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50
ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsZWVMb2NhdGlv
biA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxsZWVDaGVjayk7
CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CisgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOwogICAgICAgICB9
KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzQ0LDM0IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjpl
bWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBj
YWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxs
ZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRyKTsKKyAgICBzZXRVc2Vz
RGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7Cisg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExp
bmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlu
a0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywgaml0
LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBpc1RhaWxDYWxsKCksIG51
bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0
VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxs
TGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
Y2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBXVEZNb3Zl
KHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBJbnZh
bGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdURk1vdmUocHJlcGFyZUZv
clRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwg
R1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0lu
Zm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVs
bHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIGZh
bHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5m
bzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBw
cmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BS
ICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIs
IGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCB0cnVlLCBX
VEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1p
dFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0zNjksMTcgKzM4MSwzMCBA
QCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgCiAgICAgaml0LmNhbGwo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9pZCBDYWxsTGlua0luZm86
OmVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5mbzo6cmVn
VDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwg
b2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7Cit9CisK
K3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2bSwgVW5saW5rZWRDYWxs
TGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5r
ZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgc2V0VXBDYWxsKHVubGlua2VkQ2Fs
bExpbmtJbmZvLmNhbGxUeXBlLCBjYWxsZWVHUFIpOworICAgIG1fZG9uZUxvY2F0aW9uID0gdW5s
aW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtlZENhbGxMaW5r
SW5mby5mcmFtZVNodWZmbGVEYXRhKQorICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBtYWtl
VW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigqdW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVT
aHVmZmxlRGF0YSk7IC8vIE9PUFM6IHRpbWUgZm9yIHJlZiBjb3VudGluZz8KKyAgICBzZXRVc2Vz
RGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIg
PSBjYWxsTGlua0luZm9HUFI7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNF
bnRyeVB0clRhZz4oKSk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwo
KSk7CiAKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKIAotICAgIGF1dG8gZmFz
dFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwot
CiAgICAgYXV0byBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2Nh
dGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNh
bGwpOwpAQCAtMzk3LDcgKzQyMiw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFp
bENhbGxGYXMKIAogICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9m
YXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZh
c3RQYXRoU3RhcnQpOworICAgICAgICB1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CiAgICAgfSk7
CiAKICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEganVtcCB0byB0
aGUgc2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0MywxMSBA
QCBjbGFzcyBKU0Z1bmN0aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogc3RydWN0IENh
bGxGcmFtZVNodWZmbGVEYXRhOwogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87CisKIGNs
YXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJ
bmZvPiB7CiBwdWJsaWM6Ci0gICAgZW51bSBDYWxsVHlwZSB7CisgICAgZW51bSBDYWxsVHlwZSA6
IHVpbnQ4X3QgewogICAgICAgICBOb25lLAogICAgICAgICBDYWxsLAogICAgICAgICBDYWxsVmFy
YXJncywKQEAgLTE2NSw2ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGVlR1BSID0g
Y2FsbGVlR1BSOwogICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIFVubGlu
a2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQ
Uik7CisKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVHUFI7
IH0KICAgICAKICAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgewpAQCAtMTczLDEz
ICsxNzcsMTYgQEAgcHVibGljOgogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxl
ZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyos
IENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIs
IFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFy
ZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CisgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwg
R1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVTRURfUkVU
VVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0
YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FS
Tl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQ
UiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBX
QVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJik7CiAgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2b2lkIGVt
aXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOworICAgIHN0YXRpYyB2b2lkIGVtaXREYXRh
SUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwog
ICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURhdGFJ
Qzo6WWVzOyB9CkBAIC0yMDMsNyArMjEwLDYgQEAgcHVibGljOgogICAgICAgICBtX2FsbG93U3R1
YnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gc2xvd1BhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IGRvbmVMb2NhdGlvbigpOwogCkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9zbG93U3R1YiA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgSklUU3R1YlJvdXRpbmUq
IHNsb3dTdHViKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Nsb3dTdHViLmdldCgpOwotICAg
IH0KLQogICAgIGJvb2wgc2Vlbk9uY2UoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faGFzU2Vl
blNob3VsZFJlcGF0Y2g7CkBAIC0zMDgsOSArMzA5LDkgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUpOwogICAgIH0KIAotICAgIHVpbnQz
Ml90KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAg
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpOwogICAgIH0KIAogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkKQEAgLTM4MSw3ICszODIsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2
YXRlOgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhT
dGFydDsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRo
U3RhcnQoKTsKKwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9u
ZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Ns
b3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC0zOTcsNiAr
NDAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50
ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247CiAgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoU3RhcnQ7Cisg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRo
U3RhcnQ7CiAgICAgICAgIH0gY29kZUlDOwogICAgIH0gdTsKIApAQCAtNDI0LDYgKzQyOCwxMyBA
QCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpCiAgICAgcmV0dXJuIGNh
bGxMaW5rSW5mby5jb2RlT3JpZ2luKCk7CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5m
byB7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHksIG9ubHkg
dXNlZCBieSBiYXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBDb2RlT3Jp
Z2luLgorICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307CisKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODE4NjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzcwLDcgKzM3MCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3Ry
dWN0dXJlKiAKIC8vIHdlIGNhbid0IGdlbmVyYXRlIGR1cmluZyB1bmxpbmtlZCBieXRlY29kZSBn
ZW5lcmF0aW9uLiBUaGlzIHByb2Nlc3MgaXMgbm90IGFsbG93ZWQgdG8gZ2VuZXJhdGUgY29udHJv
bAogLy8gZmxvdyBvciBpbnRyb2R1Y2UgbmV3IGxvY2Fscy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBp
cyB3ZSByZWx5IG9uIGxpdmVuZXNzIGFuYWx5c2lzIHRvIGJlIHRoZSBzYW1lIGZvcgogLy8gYWxs
IHRoZSBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLiBXZSByZWx5IG9uIHRoaXMg
ZmFjdCBieSBjYWNoaW5nIHRoZSBsaXZlbmVzcyBhbmFseXNpcwotLy8gaW5zaWRlIFVubGlua2Vk
Q29kZUJsb2NrLgorLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLiBBbHNvLCBCYXNlbGluZSBK
SVQgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENv
ZGVCbG9jaywKKy8vIHNvIHRoZSBieXRlY29kZSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBiZXR3ZWVu
IENvZGVCbG9ja3Mgc2hhcmluZyBhbiBVbmxpbmtlZENvZGVCbG9jay4KIGJvb2wgQ29kZUJsb2Nr
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAogICAgIEpTU2NvcGUqIHNj
b3BlKQogewpAQCAtNDY2LDYgKzQ2NywxOSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCisjZGVmaW5lIExJTktfV0lU
SF9CSU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAg
ICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRo
UHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1f
cHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19X
SVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAg
ICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0
aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1f
cHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAg
IGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAg
ICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4
LDE0ICs1NDIsMTQgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwog
ICAgICAgICBMSU5LKE9wQ3JlYXRlUHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVy
YXRvcikKIAotICAgICAgICBMSU5LKE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAg
ICBMSU5LKE9wRGl2KQotICAgICAgICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdh
dGUpCi0gICAgICAgIExJTksoT3BJbmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJ
TktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJ
TkFSWV9BUklUSF9QUk9GSUxFKE9wTXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRI
X1BST0ZJTEUoT3BEaXYpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShP
cFN1YikKKworICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkK
KyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJ
TktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVx
UHRyKQogCkBAIC03ODksNiArODAzLDc0IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlv
bkNvbW1vbihWTSYKICAgICBtX293bmVyRWRnZS5zZXQodm0sIHRoaXMsIEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2U6OmNyZWF0ZSh2bSwgdGhpcykpOwogfQogCit2b2lkIENvZGVCbG9jazo6c2V0
dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkK
K3sKKyAgICBzZXRKSVRDb2RlKGppdENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAg
Y29uc3QgYXV0byYgaml0Q29kZU1hcCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgewor
ICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOwor
ICAgICAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAg
ICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleCho
YW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICAgICAgYXV0byYgaml0RGF0YSA9IGVuc3VyZUpJVERhdGEobG9ja2VyKTsK
KworICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXREYXRhLm1faml0Q29uc3RhbnRQb29sLmlzRW1w
dHkoKSk7CisgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rvcjx2
b2lkKj4oaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgYXV0byBlbnRyeSA9IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOworICAg
ICAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0OgorICAgICAgICAgICAgICAgIGppdERhdGEubV9q
aXRDb25zdGFudFBvb2xbaV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlu
a0luZm86IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRD
YWxsTGlua0luZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRDYWxsTGlua0luZm8qPihlbnRyeS5w
YXlsb2FkKTsKKyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGpp
dERhdGEubV9jYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZv
LmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBkb24ndCBoYXJkY29k
ZSB0aGVzZSByZWdpc3RlcnMgbGlrZSB0aGlzLgorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+aW5pdGlhbGl6ZURhdGFJQyh2bSgpLCB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6
cmVnVDAsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gY2FsbExpbmtJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvOiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byYgdW5saW5rZWRTdHViSW5mbyA9ICpzdGF0aWNfY2FzdDxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKj4oZW50cnkucGF5bG9hZCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gaml0RGF0YS5tX3N0dWJJbmZvcy5hZGQodW5saW5rZWRTdHViSW5mby5hY2Nl
c3NUeXBlLCBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCkpOworICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8odGhpcywgdW5saW5rZWRTdHViSW5mbyk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5t
X2ppdENvbnN0YW50UG9vbFtpXSA9IHN0dWJJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1
bmN0aW9uRGVjbDogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZCk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5t
X2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9uRGVjbChpbmRleCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6RnVuY3Rpb25FeHByOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAgICAgICAg
ICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25FeHByKGluZGV4KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFs
Q29kZToKKyAgICBjYXNlIE1vZHVsZUNvZGU6CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAg
bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGdW5jdGlvbkNvZGU6CisgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQg
dG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAg
ICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KKyAgICAgICAgbV9zaG91bGRB
bHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCgpKSAmJiBERkc6Om1p
Z2h0SW5saW5lRnVuY3Rpb24odGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogQ29k
ZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTMwNzksNyAr
MzE2MSw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lm
IEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0
dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzI5NSwxMyArMzM3
NywxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAg
c3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAg
IHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwor
ICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9m
aWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERp
dj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC0zMzEzLDExICszMzk1LDExIEBAIFVuYXJ5QXJpdGhQcm9maWxl
KiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7
CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigp
Lm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9w
TmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5j
OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5t
X2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8
T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBw
Yy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUg
IkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNp
bmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCkBAIC0x
NTgsNyArMTU5LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUo
KSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1Q
YXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgog
ICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAK
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1f
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE3MCw2IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAg
dW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVj
a3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRy
ZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBh
bHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0
ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzNCw2IEBAIHB1YmxpYzoKICAgICBib29s
IGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxs
Vk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1
YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5n
IGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBg
dGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAgICBy
ZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2
Niw4ICsyNTgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNN
YXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3ZlIGFy
aXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLCBhbmQgb250byBKSVRD
b2RlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
CiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgICAgIEJh
ZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CkBAIC0yODIsOSArMjc2LDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFw
OwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAg
ICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAg
SklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1f
aml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29u
c3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3Rh
bnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVD
b2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElL
RUxZKG1faml0RGF0YSkpCkBAIC0yOTMsNiArMjkxLDggQEAgcHVibGljOgogICAgIH0KICAgICBK
SVREYXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVREYXRhKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9qaXREYXRhKTsgfQorCiAgICAgSklUQWRkSUMqIGFkZEpJVEFk
ZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwogICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5h
cnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFBy
b2ZpbGUqKTsKQEAgLTMyMiwxNSArMzIyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBsb29raW5nIGZv
ciBhIENhbGxMaW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMu
CiAgICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVj
b2RlSW5kZXgpOwogICAgIAotICAgIHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFwJiYgaml0
Q29kZU1hcCkKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
KTsKLSAgICAgICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcCA9IFdURk1vdmUo
aml0Q29kZU1hcCk7Ci0gICAgfQogICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKQog
ICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAg
ICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcDsKKyAgICAgICAgQVNT
RVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVN
YXA7CiAgICAgfQogCiAgICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9w
dHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOwpAQCAtNDcyLDYgKzQ2Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1
bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBB
U1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01NzIsNiAr
NTY4LDcgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3Jl
Zy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oaW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNv
bnN0YW50c1ZlY3RvckJ1ZmZlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fY29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRh
dGFNZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRl
Y2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAg
ICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5z
aXplKCk7IH0KQEAgLTYwMSw2ICs1OTgsMTYgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX2ppdERhdGEpOwogICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07CiAgICAgfQorICAgIFNpbXBsZUp1bXBUYWJsZSYgYmFzZWxpbmVT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKKyAgICB9CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFudFBvb2wo
KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhICYmIGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1faml0
Q29uc3RhbnRQb29sLmRhdGEoKTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZV
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkg
eyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOyB9CkBAIC02MTEsNiArNjE4LDExIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobV9qaXREYXRhKTsKICAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIH0KKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2Vs
aW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90
IG51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4g
bV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7
IH0KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNzk3LDYgKzgwOSw3
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0
dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRy
ZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVha3BvaW50
KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQodW5z
aWduZWQgbnVtQnJlYWtwb2ludHMpCkBAIC04MzgsNiArODUxLDcgQEAgcHVibGljOgogICAgIG11
dGFibGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxkQWx3YXlz
QmVJbmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMgdG8gc3Rv
cmUgdG8gaXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5s
aW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxkQWx3YXlz
QmVJbmxpbmVkKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2NhcGFiaWxp
dHlMZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNiwxMSArOTIw
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0YVRhYmxl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7IH0KICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcik7
IH0KIAotICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4o
KQotICAgIHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlz
IGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3VubGlua2Vk
Q29kZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGludHNBcmVF
bGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5s
b29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHByb3RlY3Rl
ZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKQEAgLTEwMDgsNyArMTAx
OCw5IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlV2F0Y2hwb2ludE1hcCBtX2xsaW50R2V0QnlJ
ZFdhdGNocG9pbnRNYXA7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZTsKICNpZiBFTkFC
TEUoSklUKQorcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVREYXRhPiBtX2ppdERhdGE7
Citwcml2YXRlOgogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gVGhpcyBpcyBy
ZWxldmFudCB0byBub24tREZHIGNvZGUgYmxvY2tzIHRoYXQgc2VydmUgYXMgdGhlIHByb2ZpbGVk
IGNvZGUgYmxvY2sKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjgxODY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwog
ICAgIAogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwQW5kQWN0aXZh
dGUoQ29kZUJsb2NrKiBjb2RlQmxvY2spOworCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlLCBtX2NvZGVCbG9jayk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNiArNTAsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFk
YXRhCiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggewogICAgIEFycmF5
UHJvZmlsZSBhcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5
UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhQXJy
YXlMZW5ndGgsIGFycmF5UHJvZmlsZSk7IH0KIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRC
eUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsKIApAQCAtODgsNiArODksNyBAQCB1
bmlvbiBHZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUgbW9kZTsKICAg
ICAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBtdXN0IGJlIHpl
cm8gd2hlbiB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1l
dGFkYXRhLCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0IGRlZmF1bHRN
b2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAgICAgR2V0QnlJ
ZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9kZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAy
ODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYgKzM4NSw4IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpn
ZW5lcmF0ZVNlbGZJbkFjY2VzcygKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAor
Ly8gT09QUzogTWFrZSB0aGlzIHN0dWZmIHdvcmsgd2l0aCBkYXRhIGljcyB0byBub3QgYXNzdW1l
IGlubGluZSBhY2Nlc3MuCisKIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5B
Y2Nlc3NOb3RVc2luZ0lubGluZUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4gdGFyZ2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CkBAIC00MDQs
OSArNDA2LDEyIEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKIHZv
aWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IHRhcmdldCkKIHsKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRh
SUMoKSkgeworICAgICAgICAvLyBPT1BTOiBtYWtlIHNvbWUgdmVyc2lvbiBvZiBJbmxpbmVBY2Nl
c3MgZm9yIGJhc2VsaW5lLiBQZXJoYXBzIG1ha2UgaXQgZGF0YSBkcml2ZW4uIE9yIHBlcmhhcHMg
aGF2ZSB0aGUgY29kZQorICAgICAgICAvLyBiZSBzaGFyZWQgc29tZWhvdyBiZXR3ZWVuIFVubGlu
a2VkQ29kZUJsb2Nrcy4KKwogICAgICAgICAvLyBJZiBpdCBpcyBub3QgR2V0QnlJZC1saWtlLXRo
aW5nLCB3ZSBkbyBub3QgZW1pdCBub3Agc2xlZCAoZS5nLiBHZXRCeVZhbCkuCiAgICAgICAgIC8v
IFRoZSBjb2RlIGlzIGFscmVhZHkgYW4gaW5kaXJlY3QganVtcCwgYW5kIG9ubHkgdGhpbmcgd2Ug
c2hvdWxkIGRvIGlzIHJlcGxhY2luZyBtX2NvZGVQdHIuCi0gICAgICAgIGlmIChzdHViSW5mby5o
YXNDb25zdGFudElkZW50aWZpZXIpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgp
ICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmll
cikgewogICAgICAgICAgICAgLy8gSWYgbV9jb2RlUHRyIGlzIHBvaW50aW5nIHRvIHN0dWJJbmZv
LnNsb3dQYXRoU3RhcnRMb2NhdGlvbiwgdGhpcyBtZWFucyB0aGF0IElubGluZUFjY2VzcyBjb2Rl
IGlzIG5vdCBhIHN0dWIgb25lLgogICAgICAgICAgICAgLy8gV2UgcmV3cml0ZSB0aGlzIHdpdGgg
dGhlIHN0dWItYmFzZWQgZGlzcGF0Y2hpbmcgY29kZSBvbmNlLCBhbmQgY29udGludWUgdXNpbmcg
aXQgdW50aWwgd2UgcmVzZXQgdGhlIGNvZGUuCiAgICAgICAgICAgICBpZiAoc3R1YkluZm8ubV9j
b2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0gc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpIHsKQEAgLTQyMSw2ICs0MjYsNyBAQCB2b2lkIElubGlu
ZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxp
bmVBY2Nlc3M6IGxpbmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
KwogICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9k
ZU1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDYgKzQwLDcgQEAgT1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9SX0VOVU1f
Q0xBUwogCiBzdHJ1Y3QgSXRlcmF0aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90IHNlZW5N
b2RlcyB7IDAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVzKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1vZGVzKTsg
fSAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9PSBzaXpl
b2YoSXRlcmF0aW9uTW9kZSkpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTg2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBBcnJheVBy
b2ZpbGUgbV9hcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5
UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9h
cnJheVByb2ZpbGUpOyB9CiAKIHByaXZhdGU6CiAgICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0
U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQgfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUg
IlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
UG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTI4NSw2ICsy
ODYsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgICAg
IHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OlB1dFByaXZhdGVOYW1lOgogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMs
IFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6
OkluQnlJZDoKQEAgLTQzMCw2ICs0MzIsMjA0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6c2UKICAgICBtX2NhY2hlVHlwZSA9IG5ld0NhY2hlVHlwZTsKIH0KIAordm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKENvZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1Yklu
Zm8pCit7CisgICAgYWNjZXNzVHlwZSA9IHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZTsKKyAg
ICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8uc3RhcnQ7IC8vIE9PUFM6IGRvIHdlIG5lZWQgYSBz
dGFydCBmb3IgZGF0YSBJQ3M/CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5k
b25lTG9jYXRpb247CisgICAgc2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5rZWRTdHViSW5m
by5zbG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KTsKKyAgICBjb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2Rl
SW5kZXgpOworICAgIG1fY29kZVB0ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKworICAgIHVz
ZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Cisg
ICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxpbmtlZFN0dWJJ
bmZvLmJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZvciBpdGVyYXRv
cl9uZXh0LCB3ZSBjYW4ndCBjbG9iYmVyIHRoZSBzY3JhdGNoIHJlZ2lzdGVyIGVpdGhlci4KKyAg
ICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNo
KTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxl
dGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRl
bGV0ZUJ5SUQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
SW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0
QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6IAorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIHN3
aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNT
dHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAg
aWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVs
ZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpQdXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsK
KyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5r
ZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtp
bmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlz
U3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9w
dGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlv
blB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpEZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7Cisg
ICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAg
ICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAg
ICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJh
c2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9
IEludmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okdl
dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmll
ciA9IGZhbHNlOworICAgICAgICBwcm90b3R5cGVJc0tub3duT2JqZWN0ID0gZmFsc2U7CisgICAg
ICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgICAg
ICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87
CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxz
ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAg
ICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0g
SW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
OjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpHZXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAg
ICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVy
czo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lz
dGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmll
ciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAg
IGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5m
b0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQ
dXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7Cisg
ICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAg
ICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7Cisg
ICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6UHV0QnlWYWwpCisgICAg
ICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnBy
b2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJy
YW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICB2YWx1ZUdQUiA9IEludmFsaWRH
UFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0
ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiAjaWYgQVNT
RVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmNoZWNrQ29uc2lzdGVuY3koKQog
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ci5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVk
ZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmVTZXQuaCIKQEAgLTU2LDYgKzU3LDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50
OF90IHsKICAgICBHZXRCeVZhbCwKICAgICBQdXRCeUlkLAogICAgIFB1dEJ5VmFsLAorICAgIFB1
dFByaXZhdGVOYW1lLAogICAgIEluQnlJZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVO
YW1lLApAQCAtNzgsNiArODAsOCBAQCBlbnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CiAg
ICAgU3RyaW5nTGVuZ3RoCiB9OwogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsK
KwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0
cnVjdHVyZVN0dWJJbmZvKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTk4LDYg
KzEwMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGll
KCk7CiAKKyAgICB2b2lkIGluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhD
b2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJik7CisKICAgICBERUNMQVJFX1ZJ
U0lUX0FHR1JFR0FURTsKIAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVy
ZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLApA
QCAtNDQ3LDYgKzQ1MywxOCBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlk
RnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7CisgICAg
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQcml2YXRl
RmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRLaW5kOjpu
b25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpzbG9wcHkoKSB9Owor
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAvLyBPT1BTOiBEbyB3ZSBuZWVk
IHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5l
IElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBm
b3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0
cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTYsNCArMzE2LDE2IEBAIGludCBVbmxpbmtlZENvZGVCbG9jazo6b3V0T2ZM
aW5lSnVtcE9mZnMKICAgICByZXR1cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5nZXQoYnl0ZWNv
ZGVPZmZzZXQpOwogfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKK2Jvb2wgVW5saW5rZWRDb2RlQmxv
Y2s6Omhhc0lkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICAvLyBPT1BT
OiBkbyB3aGF0IENvZGVCbG9jayBkb2VzIGFuZCBtYWtlIGEgaGFzaCB0YWJsZT8KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZJZGVudGlmaWVycygpOyArK2kpIHsKKyAgICAg
ICAgaWYgKGlkZW50aWZpZXIoaSkuaW1wbCgpID09IHVpZCkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYg
KzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNp
bmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNp
bmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgpAQCAtNjIsNiArNjMsNyBAQCBjbGFzcyBVbmxpbmtl
ZENvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOwogY2xhc3MgVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogc3RydWN0IEV4ZWN1dGFibGVJbmZvOwogZW51bSBj
bGFzcyBMaW5rVGltZUNvbnN0YW50IDogaW50MzJfdDsKIApAQCAtMTc1LDYgKzE3Nyw3IEBAIHB1
YmxpYzoKIAogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNv
bnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIGNv
bnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9D
b25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50
KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNb
cmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKQEAg
LTIwNyw2ICsyMTAsMTUgQEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRN
b2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3Nj
cmlwdE1vZGUpOyB9CiAKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25z
KCkgY29uc3Q7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uQXQoQnl0ZWNvZGVJ
bmRleCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5kZXgpLnB0cigp
OyB9CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uKQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBp
bnN0cnVjdGlvbnMoKS5hdCgwKS5wdHIoKTsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rp
b25zRW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihpbnN0cnVjdGlvbnNCZWdpbikgKyBpbnN0cnVjdGlvbnMoKS5zaXpl
KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0cnVjdGlvbiA+PSBpbnN0cnVjdGlvbnNC
ZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGluc3RydWN0aW9uc0VuZCk7CisgICAgICAgIHJldHVybiBp
bnN0cnVjdGlvbiAtIGluc3RydWN0aW9uc0JlZ2luOworICAgIH0KKyAgICB1bnNpZ25lZCBpbnN0
cnVjdGlvbnNTaXplKCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyB9CiAK
ICAgICB1bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxl
ZUxvY2FsczsgfQogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZh
cnM7IH0KQEAgLTMzNCw2ICszNDYsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tZXRh
ZGF0YS0+c2l6ZUluQnl0ZXMoKTsKICAgICB9CiAKKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdp
YmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKKyAgICB7CisgICAgICAgIC8vIFNvbWUgYnVpbHRp
bnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCisg
ICAgICAgIHJldHVybiAhaXNCdWlsdGluRnVuY3Rpb24oKTsKKyAgICB9CisKKyNpZiBBU1NFUlRf
RU5BQkxFRAorICAgIGJvb2wgaGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOworI2Vu
ZGlmCiAKIHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSos
IENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlv
bk1vZGU+KTsKQEAgLTM5NCw2ICs0MTUsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGV4
aWNhbFNjb3BlRmVhdHVyZXMgOiA0OwogcHVibGljOgogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9s
b2NrOworICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1fdW5saW5rZWRCYXNlbGluZUNvZGU7
CiBwcml2YXRlOgogICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzIHsgMCB9OwogICAgIFNvdXJj
ZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKQEAgLTQxMCw2ICs0MzIsOSBAQCBwcml2YXRlOgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVjdGlvbnM7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzczsKIAor
ICAgIC8vIE9PUFM6IGJpbmQgYSBiZXR0ZXIgcGxhY2UgdG8gc3RvcmUgdGhpcyBzdHVmZj8KKyAg
ICBWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPiBtX2JpbmFyeUFyaXRoUHJvZmlsZXM7CisgICAg
VmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKIAogI2lmIEVO
QUJMRShERkdfSklUKQogICAgIERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKQEAgLTQ1
NSw2ICs0ODAsMjggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1
bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5l
SnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCisgICAgeworICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0
dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIH0KKworICAgIHVu
c2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX2JpbmFyeUFy
aXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3VuYXJ5QXJpdGhQcm9maWxlcy5zaXpl
KCk7CisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChVbmFyeUFyaXRoUHJvZmls
ZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUmIGJpbmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX2JpbmFyeUFy
aXRoUHJvZmlsZXNbaV07IH0KKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgdW5hcnlBcml0aFByb2Zp
bGUodW5zaWduZWQgaSkgeyByZXR1cm4gbV91bmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KIAogcHJp
dmF0ZToKICAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5zdHJ1Y3Rp
b25TdHJlYW06Ok9mZnNldCwgaW50PjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCShyZXZp
c2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBAQCBwdWJs
aWM6CiAgICAgYm9vbCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKTsgfQog
ICAgIGJvb2wgaGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aGFz
Q2hlY2twb2ludHMoKTsgfQogICAgIGJvb2wgaGFzVGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlQmxvY2stPmhhc1RhaWxDYWxscygpOyB9CisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJp
dGhQcm9maWxlKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgp
OyB9CisgICAgdW5zaWduZWQgYWRkVW5hcnlBcml0aFByb2ZpbGUoKSB7IHJldHVybiBtX2NvZGVC
bG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKTsgfQogCiAgICAgLy8gVXBkYXRpbmcgVW5saW5r
ZWRDb2RlQmxvY2suCiAgICAgdm9pZCBzZXRIYXNDaGVja3BvaW50cygpIHsgbV9jb2RlQmxvY2st
PnNldEhhc0NoZWNrcG9pbnRzKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9uIDI4MTg2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTQgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUpOwogICAgIH0KIAorICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNldEluTWV0YWRh
dGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2lz
RmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9pczMyQml0
ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUxNigpW09w
Y29kZTo6b3Bjb2RlSURdOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2Yo
dHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0K
KwogcHJpdmF0ZToKICAgICBlbnVtIEVtcHR5VGFnIHsgRW1wdHkgfTsKIApAQCAtMTAxLDYgKzEw
OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzX29mZnNldDE2VGFibGVTaXplOwogICAg
IH0KIAorCiAgICAgdXNpbmcgT2Zmc2V0MzIgPSB1aW50MzJfdDsKICAgICB1c2luZyBPZmZzZXQx
NiA9IHVpbnQxNl90OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYg
QEAgdGVtcGxhdGU8dW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzQXJndW1lbgogc3RydWN0IFZhbHVl
UHJvZmlsZUJhc2UgewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNr
ZXRzID0gbnVtYmVyT2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBudW1iZXJPZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBidWNrZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tl
dHMgKyBudW1iZXJPZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNl
KCkKQEAgLTEzNCw3ICsxMzMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29k
ZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxh
dGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTU2LDYgKzE1NSw3IEBAIHN0
cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJv
ZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAg
ICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4o
KSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBz
dHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmls
ZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0VW5hcnkKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRo
aXMsIGRzdCwgc3JjLCB0eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBz
cmMsIHR5cGUsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90
Pihkc3QsIHNyYyk7CkBAIC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRJbmMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0Rz
dCk7CisgICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlB
cml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVj
OjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2Nv
ZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02ODIsNyArNjgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklE
Kj4KICAgICAgICAgZW1pdEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3Jj
MSwgUmVnaXN0ZXJJRCogc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAg
ICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1f
Y29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4g
ZHN0OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNiBAQCB2b2lkKiBw
cmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqCiAgICAgQVNTRVJUKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFTU0VSVChjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNTRVJUKCFjb2RlQmxv
Y2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdD
b21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIAogICAgIGlmICghT3B0aW9uczo6dXNlT1NSRW50cnlU
b0RGRygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDksMTAgKzMwOSwxNSBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0Nh
bGxIZWxwZXJzCiAgICAgICAgICAgICB0cnVlQ2FsbGVyID8gQXNzZW1ibHlIZWxwZXJzOjpVc2VF
eGlzdGluZ1RhZ1JlZ2lzdGVyQ29udGVudHMgOiBBc3NlbWJseUhlbHBlcnM6OkNvcHlCYXNlbGlu
ZUNhbGxlZVNhdmVkUmVnaXN0ZXJzRnJvbUJhc2VGcmFtZSwKICAgICAgICAgICAgIEdQUkluZm86
OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDQpOwogCisgICAgICAgIC8vIE9P
UFM6IENvbnNpZGVyIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIGJhc2VsaW5lIHBiL21l
dGFkYXRhIHJlZ2lzdGVycwogICAgICAgICBpZiAoY2FsbGVySXNMTEludCkgewogICAgICAgICAg
ICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNv
ZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0
YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJs
b2NrLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSk7CiAgICAgICAgICAgICBq
aXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxp
bmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUikp
OworICAgICAgICB9IGVsc2UgaWYgKHRydWVDYWxsZXIpIHsKKyAgICAgICAgICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3Io
KnRydWVDYWxsZXIpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKSwg
Y2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgSklUOjpz
X21ldGFkYXRhR1BSKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5iYXNlbGluZUpJVENvbnN0
YW50UG9vbCgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVC
bG9jaywgSklUOjpzX2NvbnN0YW50c0dQUikpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQpAQCAtNDA0LDYgKzQwOSw5IEBAIHZvaWQgYWRq
dXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdp
c3RlcnM6OnBjR1BSKTsKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2Vk
PE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2UgeworICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhp
dC0+bWV0YWRhdGFUYWJsZSgpKSwgSklUOjpzX21ldGFkYXRhR1BSKTsKKyAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPmJhc2VsaW5l
SklUQ29uc3RhbnRQb29sKCkpLCBKSVQ6OnNfY29uc3RhbnRzR1BSKTsKKwogICAgICAgICBjb2Rl
QmxvY2tGb3JFeGl0LT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwogCiAgICAgICAgIEJ5dGVj
b2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzAsNiAr
NzMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAg
ICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZVRh
Z0dQUiwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJl
c2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3Nl
ZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1l
dGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkg
KyAxKTsKQEAgLTg4OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlKiBub2RlCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBp
ZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWls
Q2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0gewogICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDUsNiArNzQ1LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZsZURh
dGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMp
OwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7
CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsK
KyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAgICAgRWRn
ZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CkBAIC04
OTYsNyArODk3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQog
ICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1Rh
aWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5z
ZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcgKzM5ODUsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJl
Z2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29k
ZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAor
ICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBj
YWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVzZWRSZWdpc3RlcnMsCiAgICAg
ICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwgSlNWYWx1ZVJlZ3M6OnBheWxv
YWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQ
Uik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogCkBAIC0x
NDc0Nyw3ICsxNDc0Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dD
aGkKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CiAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFk
b3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywg
bV9qaXQuY29kZUJsb2NrKCksIGNhbGxTaXRlSW5kZXgpOworICAgIG1faml0LmxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4
KTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzE3LDcgKzQzMTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgR1BSUmVnIHN0dWJJbmZv
R1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBwYXJhbXMuZ3BTY3Jh
dGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBC
b3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgaml0LmNv
ZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJ
bmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9j
aygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwg
QWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9H
UFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1i
b2wgPSB0cnVlOwpAQCAtMTAxOTEsNiArMTAxOTEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxsb2NhdGVk
QXJnczsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBl
bmQoVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSkpOwogICAgICAgICAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1
cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0
LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50aWNOb2RlT3JpZ2luKTsKQEAgLTEw
MzQ5LDEzICsxMDM1MCwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzaHVmZmxl
RGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgpKTsKIAog
ICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1BcmdzOworICAg
ICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCkt
Pm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKIAogICAg
ICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygp
LT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwog
Ci0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGgg
PSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAs
IFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxl
RGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgICAg
IH0pOwpAQCAtMTA2OTgsNyArMTA3MDAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAg
ICAgICAgICAgICAgICAgfSk7CkBAIC0xMDk3OSw3ICsxMDk4MSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWls
Q2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpy
ZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxs
U2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpAQCAt
NDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkKICAgICAg
ICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwg
ZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZp
ZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVzLm1hcCBkbyB8ZmllbGROYW1lfAorICAg
ICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5h
bWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisgICAgICAgICAgICBlbmQuam9pbigiXG4i
KQorICAgICAgICBlbmQKKworICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxk
cywgZmllbGROYW1lcykKICAgICAgICAgICAgIGZpZWxkcy5tYXAgZG8gfGZpZWxkLCB0eXBlfAog
ICAgICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAotICAgICAgICAgICAgICAgICAg
ICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlw
ZSl9XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtc
biN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUsIGZpZWxkTmFtZXMpfVxuI3tw
cmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAiI3tw
cmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAgICAgICAgICAg
IGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lcy5w
dXNoKGZpZWxkTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19z
fSBtXyN7ZmllbGROYW1lfTsiCiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmQu
am9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRz
KCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkTmFtZXMgPSBbXQorICAgICAgICBw
cmVmaXggPSAiICAgICAgICAiCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMocHJlZml4
LCBAZmllbGRzLCBmaWVsZE5hbWVzKQorICAgICAgICBmaWVsZHMgPSBmaWVsZHMgKyAiXG4iICsg
Z2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCiAKICAgICAgICAg
aW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAmJiAobm90IEBpbml0aWFsaXpl
cnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTgsOCArNjk4LDEzIEBA
IHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXMKIAogdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5m
byksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0
KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9i
YWxPYmplY3Qodm0sIGluZm8pOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1
YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIENhbGxMaW5rSW5mbyogaW5m
bykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAg
ICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtUYXNrKFs9LCAmdm1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lv
biAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzE4LDYgKzE3MTgsNyBAQCBwdWJsaWM6CiAgICAgfQogICAg
IAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlu
a0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmpl
Y3QoVk0mLCBDYWxsTGlua0luZm8qKTsKICAgICAKICAgICB2b2lkIG1ha2VTcGFjZU9uU3RhY2tG
b3JDQ2FsbCgpOwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
YXNlbGluZUpJVENvZGUuaCIKKworI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkp1
bXBUYWJsZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitKSVRBZGRJQyogTWF0aElDSG9sZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7
IH0KK0pJVE11bElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQor
SklUU3ViSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRO
ZWdJQyogTWF0aElDSG9sZGVyOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorCit2b2lkIE1h
dGhJQ0hvbGRlcjo6YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCit7CisgICAgbV9h
ZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICBtX211bElDcyA9IFdURk1vdmUo
b3RoZXIubV9tdWxJQ3MpOworICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7
CisgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKK30KKworQmFzZWxpbmVK
SVRDb2RlOjpCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgIDogRGlyZWN0SklUQ29kZShX
VEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAg
LCBNYXRoSUNIb2xkZXIoKQoreyB9CisKK0Jhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29k
ZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJKSVRD
b2RlLmgiCisjaW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy9j
bGFzcyBKSVRBZGRJQzsKKy8vY2xhc3MgSklUTXVsSUM7CisvL2NsYXNzIEpJVFN1YklDOworLy9j
bGFzcyBKSVROZWdJQzsKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVuYXJ5QXJp
dGhQcm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgU2lt
cGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3MgTWF0aElDSG9s
ZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVy
KTsKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAg
SklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1YklD
KiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklU
TmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworICAgIC8qCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklU
QWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFk
ZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0
b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRNdWxJQyogYWRkTWF0
aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVsSUMocHJv
ZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0
aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVl
Pjo6dHlwZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJv
ZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKyAgICAqLworCitwcml2YXRl
OgorICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBtX211bElD
czsKKyAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJ
Q3M7Cit9OworCitjbGFzcyBKSVRDb25zdGFudFBvb2wgeworcHVibGljOgorICAgIHVzaW5nIENv
bnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAg
ICAgICAgR2xvYmFsT2JqZWN0LAorICAgICAgICBDYWxsTGlua0luZm8sCisgICAgICAgIFN0cnVj
dHVyZVN0dWJJbmZvLAorICAgICAgICBGdW5jdGlvbkRlY2wsCisgICAgICAgIEZ1bmN0aW9uRXhw
ciwKKyAgICB9OworCisgICAgc3RydWN0IFZhbHVlIHsKKyAgICAgICAgLy8gT09QUzogTWFrZSB0
aGUgcG9pbnRlciBwYWNrZWQuCisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgdm9pZCogcGF5
bG9hZDsKKyAgICB9OworCisgICAgSklUQ29uc3RhbnRQb29sKCkgPSBkZWZhdWx0OworICAgIEpJ
VENvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworICAgIEpJVENvbnN0
YW50UG9vbCYgb3BlcmF0b3I9KEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBD
b25zdGFudCBhZGQoVHlwZSB0eXBlLCB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cikKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgbV9j
b25zdGFudHMuYXBwZW5kKFZhbHVlIHsgdHlwZSwgcGF5bG9hZCB9KTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRzLnNpemUoKTsgfQorICAgIFZhbHVlIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50c1tpXTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxWYWx1ZT4gbV9jb25zdGFu
dHM7Cit9OworCisKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2Rl
LCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29k
ZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0
eUNoZWNrKTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisKKyAgICBCYWc8VW5s
aW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICBCYWc8Q2FsbExpbmtJbmZv
PiBtX2V2YWxDYWxsTGlua0luZm9zOyAvLyBPT1BTOiBtYWtlIHN1cmUgd2UgdmlzaXQgdGhlc2Ug
c29tZWhvdy4gT3IgYXNzZXJ0IHdlIGRvbid0IGhhdmUgdG8sIHNpbmNlIHRoZXkncmUgdmlydHVh
bCBjYWxscy4KKyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0
dWJJbmZvczsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRh
YmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlczsKKyAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFudFBv
b2wgbV9jb25zdGFudFBvb2w7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4
MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpj
b2RlU2l6ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6Zmlu
YWxpemUoKQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXpl
T25NYWluVGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmlu
YWxpemVPbk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAg
ICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVCht
X2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNp
b24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9n
U2hhZG93Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFj
a2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0K
IAotdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQ
dHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0
cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IGNhbGxlZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tl
dCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwot
ICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cihjb2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZv
aWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVn
IHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIp
CiB7CiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4o
KTsKQEAgLTcyLDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlj
a2VuUGEKICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikp
OwogfQogCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhl
bHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0
LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVC
bG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUp
KSk7CisgICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVD
VF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9y
ZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNv
ZGVCbG9jaykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMo
KSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6
UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwo
c2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7
Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJS
ZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJS
ZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBj
b2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJ
VENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwg
U2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBk
ZXNjcmlwdGlvbikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAs
NyArODQwLDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxs
IHZvbGF0aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRo
ZSB0b3Agb2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2
b2lkIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBH
UFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BS
UmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNr
ZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVn
cywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2Nv
cGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgp
OworICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tl
dCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBw
b2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4K
ICAgICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFj
a2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEu
Y3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2
ZVJlZ2lzdGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVS
ZWdpc3RlcnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENh
bGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0
ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNl
dCBjYWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVy
cygpIH07Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0
aW9ucyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkp
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
ZmxlRGF0YS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMyBA
QCBwdWJsaWM6CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWduZWQg
bnVtTG9jYWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsgVUlO
VF9NQVggfTsKKyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8gT24g
b3VyIG1hY2hpbmUgZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1hcDxW
YWx1ZVJlY292ZXJ5PiByZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVyIHsg
SW52YWxpZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29k
ZUJsb2NrKik7CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0
ZXJBdE9mZnNldExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIu
Y3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENhbGxG
cmFtZVNodWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkKICAg
ICAsIG1fb2xkRnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5S
ZWdpc3RlcnMsIG51bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25l
ZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAgICAgICAr
IHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKSkpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnMgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5udW1Q
YXJhbWV0ZXJzKSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRl
clNpemVJblJlZ2lzdGVycwogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFt
ZShkYXRhLmFyZ3Muc2l6ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFt
ZVNpemUgLSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhS
ZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5u
dW1QYXNzZWRBcmdzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykK
IHsKICAgICAvLyBXZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAg
IGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAg
LTQyMSw3ICs0MjEsNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENh
CiAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9u
ZXdGcmFtZUJhc2UpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9
CiAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1f
bmV3RnJhbWVCYXNlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiht
X2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAgIG1faml0LmFkZDMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAt
IDEgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNlKTsK
ICAgICBtX2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdu
bWVudFJlZ2lzdGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVCYXNl
LCBtX25ld0ZyYW1lQmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlci5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsx
MDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAg
ICAgIGRhdGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2Vk
QXJncyA9IG1fbnVtUGFzc2VkQXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9u
dW1QYXJhbWV0ZXJzOwogICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0
ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEu
YXJncy5yZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXJnQ291bnQoKTsgKytpKQpAQCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBw
ZXJmb3JtU2FmZVdyaXRlcygpOwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7
IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJ
bnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51
bGxwdHIpCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJl
bHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAg
ICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6
SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFBy
b2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAg
IG1fcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9j
ayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAg
LTkwLDggKzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNr
aXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9u
czo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lw
T3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6
OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZl
c0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRv
cEVudHJ5RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMjEgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlX
cml0ZShXYXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFi
c29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRl
clRvU2V0KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50
ZXJUb1NldCkKIHsKKyAgICAvLyBPT1BTOiBUYWtlIGEgYm9vbGVhbiBvciBzb21ldGhpbmcgc2F5
aW5nIGlmIHdlIGNhbiBiZSBudWxsLgorICAgIGF1dG8gb2sgPSBicmFuY2hUZXN0UHRyKFplcm8s
IHBvaW50ZXJUb1NldCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVz
cyhwb2ludGVyVG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKK3ZvaWQgSklU
OjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVnIHNj
cmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT52YXJSZWFkT25seVdhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxW
YXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgewor
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhclJl
YWRPbmx5V2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0
YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQpAQCAtMTI5LDcgKzEzOCw3IEBAIHZvaWQg
SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3RlciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1Qw
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmso
dGhpcyk7CkBAIC0xODEsMjEgKzE5MCw0MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChj
b25zdCBJbnN0cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVt
aXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUsIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6
b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4
ZWN1dGFibGUgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVzdWx0LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rp
b246OnJhcmVEYXRhVGFnKSwgcmVzdWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7
CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVC
bG9ja0ZvckNvbnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JD
YWxsKCkpLCByZXN1bHQpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsK
K30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogewogICAgIGlmIChKSVRJ
bnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVC
bG9jaywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9wcm9maWxlZENv
ZGVCbG9jaywgIlxuIik7CiAgICAgCiAgICAgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICBq
aXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgpOwogICAgIAotICAgIGF1dG8mIGluc3RydWN0aW9u
cyA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlv
bkNvdW50ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBhdXRvJiBp
bnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKKyAgICB1
bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpOwogCiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAKLSAgICBWTSYg
dm0gPSBtX2NvZGVCbG9jay0+dm0oKTsKICAgICBCeXRlY29kZUluZGV4IHN0YXJ0Qnl0ZWNvZGVJ
bmRleCgwKTsKKworICAgIC8vIE9PUFM6IE1heWJlIG9ubHkgZG8gdGhpcyBpZiB3ZSBkaXNhYmxl
IHNoYXJpbmcgc29tZWhvdz8KKyAgICAvKgorICAgIFZNJiB2bSA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPnZtKCk7CiAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2Rl
QmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5o
ZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0pKSkgewogICAgICAgICAvLyBXZSBjYW4g
b25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVC
bG9jaydzIGV4YWN0bHkgb25jZS4KICAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQg
YmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQgd2FudHMg
dG8KQEAgLTIzNiw2ICsyNjUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgKi8KIAogICAgIG1fYnl0ZWNv
ZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291
bnQ7ICkgewpAQCAtMjc4LDggKzMwOCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVK
SVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9j
b2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0
eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxG
cmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsi
LCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBS
YXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgfQpAQCAtNTI3LDcgKzU1Nyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUlu
ZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKKyAg
ICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fdW5saW5rZWRD
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRh
TG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9yICIsIG1fYnl0ZWNvZGVJ
bmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CkBAIC01NDUsOCArNTc1
LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewogICAgICAg
ICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAg
ICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxv
Y2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQs
ICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0
eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpA
QCAtNjc0LDU1ICs3MDQsNTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkK
ICNlbmRpZgogfQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFu
dFBvb2xSZWdpc3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJ
VENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0Zv
cigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpOworfQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2
ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgLy8gT09QUzogTWF5YmUg
dGhpcyBzaG91bGQgYmUgZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJsb2NrPworICAgIERGRzo6Q2Fw
YWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVs
KCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgog
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFs
c2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2Ug
REZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1
ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1f
c2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7Ci0gICAg
Y2FzZSBHbG9iYWxDb2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToKLSAgICBjYXNlIEV2YWxDb2Rl
OgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAgIC8vIFdlIGNv
dWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1
bmlubGluZWFibGUgY2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZh
dGlvbi4KLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNh
bklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29kZUJsb2NrKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8
U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBU
YWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5n
SnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
d2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1f
c3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV91bmxpbmtl
ZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgICAg
IGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRW
ZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
ciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKQotICAgICAg
ICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX2NvZGVCbG9j
ayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3Zt
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZv
clByb2ZpbGVyKCkpKSkgeworICAgICAgICAvLyBPT1BTOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBv
ZmYgdW5saW5rZWQgY29kZSBibG9jaworICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlx
dWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICB9CiAgICAgaWYg
KFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpIHsKKyAgICAgICAgLy8gT09Q
UzogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiB1bmxpbmtlZCBjb2RlIGJsb2NrCiAg
ICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAgICAgICAgIG5ldyBQcm9maWxl
cjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAorICAgICAgICAgICAgICAgIG1f
dm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fcHJvZmlsZWRD
b2RlQmxvY2spLAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpCYXNlbGluZSkpOwotICAgICAg
ICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29k
ZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2Zp
bGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fcHJvZmlsZWRDb2Rl
QmxvY2spOwogICAgIH0KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBl
bmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwpAQCAtNzQyLDEx
ICs3NzMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAg
ICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgZW1pdFB1dFRv
Q2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwor
ICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkK
KyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKCk7CiAKICAgICBMYWJl
bCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAgaW50IGZy
YW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUgPSAtZnJhbWVU
b3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9mZnNldCksIGNhbGxG
cmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxvdzsKQEAgLTc1
NywxNiArNzg5LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4K
ICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0
U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3Rl
cnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVy
cygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkg
eworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQp
IHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAmJiAoIW1fdW5saW5rZWRDb2Rl
QmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIo
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSAr
IEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIpOwor
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAg
ICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQg
aW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBrZWVwIHRo
aW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhl
IGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1
Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1l
bnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArODEzLDEyIEBAIHZv
aWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAgICBs
b2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwog
ICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQg
KyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFn
R1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
X2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdz
KTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIs
IGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9m
Rmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgp
KSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQogICAgICAg
ICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwg
KnRoaXMpOwpAQCAtNzk5LDI0ICs4MzUsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0
aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAg
ICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhDYWxs
RnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9y
LCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBy
ZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2UgbmV2
ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1f
Y29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgeworICAgIGJv
b2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hlY2sg
PSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxvY2st
Pm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1
ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Q
cm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3Mo
cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkpOwogCiAg
ICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhiZWdp
bkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1
c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtUbyhi
ZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUlu
ZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAg
ICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29kZUJs
b2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3Bl
cmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVS
b2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/
IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywg
YXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFpl
cm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04MzksNyAr
ODc4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAg
ICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5p
cXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExp
bmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBtX2xpbmtCdWZm
ZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1f
dW5saW5rZWRDb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZv
cnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4OTcsOCBAQCB2b2lkIEpJVDo6bGlu
aygpCiAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAgICAgICAgY2FzZSBTd2l0Y2hS
ZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rlcjog
ewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0g
ICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2lt
cGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAg
ICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxK
U1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9m
ZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2VkVGFi
bGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEsOCAr
OTEwLDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTd2l0
Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlE
ZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9y
IChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMoKSkg
ewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNoT2Zm
c2V0OwpAQCAtOTA2LDMyICs5NDUsMzUgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAgICAg
cGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7CiAgICAgfQogCi0g
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5
VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VP
ZnMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0
byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsK
KyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAg
ICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFs
aXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMp
OworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlW
YWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2Rl
bEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6
ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRp
b25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAgICAgIENhbGxMaW5rSW5mbyYg
aW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAgICBpbmZvLnNldENv
ZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKLSAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRv
bmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21w
aWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGluZm8uZG9uZUxvY2F0
aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlv
bkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIEpJVENvZGVNYXBC
dWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVP
ZmZzZXQpIHsKLSAgICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQo
KSkKLSAgICAgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRl
eChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4o
bV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxv
Y2stPnNldEpJVENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKSk7CisgICAgSklU
Q29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVj
b2RlT2Zmc2V0KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQo
KSkKKyAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5
dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xh
YmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9u
czo6ZHVtcERpc2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk4MiwzNyBAQCB2b2lkIEpJVDo6
bGluaygpCiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7CisgICAg
ICAgIC8vIE9PUFM6IG1ha2UgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91dCB1bmxpbmtlZCBD
Qj8KICAgICAgICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigp
KQogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21waWxh
dGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CisgICAg
ICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9maWxl
ZENvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAgICAgbV9wY1RvQ29kZU9y
aWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAgCisgICAgLy8gT09QUzogTWFr
ZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBVbmxp
bmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFM
SVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAi
QmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJC
YXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUo
bV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAg
IAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVj
ayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsK
LSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRo
QXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9w
dFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAg
ICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsK
KyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxM
aW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1vdmUo
bV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMg
PSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAg
bV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOwor
ICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2RlLT5t
X2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOwogCiAgICAgaWYgKEpJVElu
dGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZv
ciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9y
eSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVu
ZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2Rl
IGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVj
dXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVN
ZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJ
VDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6
ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FTU0VS
VCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICsxMDIxLDIxIEBAIENvbXBp
bGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+
cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29k
ZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNo
cmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+
bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8m
IGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8g
RklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZl
Q29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRs
ZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9Cisg
ICAgLy8gT09QUzogRG9uJ3QgdGhpbmsgdGhpcyBzaHJpbmsgaXMgcmVhbGx5IGRvaW5nIGFueXRo
aW5nIGFueW1vcmUuIFZlcmlmeS4KKyAgICAvL3sKKyAgICAvLyAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgIC8vICAgIG1fY29kZUJsb2NrLT5z
aHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7Cisg
ICAgLy99CiAKKyAgICAvLyBPT1BTOiBtX3BjVG9Db2RlT3JpZ2luTWFwIHNob3VsZCBsaXZlIG9u
IEJhc2VsaW5lSklUQ29kZSBmb3IgYmFzZWxpbmUgY29kZWJsb2Nrcy4KICAgICBpZiAobV9wY1Rv
Q29kZU9yaWdpbk1hcCkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFw
KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsK
IAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJ
VC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgpKSAv
Ci0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1Np
emUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2st
Pmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUobV9q
aXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5r
ZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJu
IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTA0NywxMSBAQCBzaXplX3Qg
SklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZlci0+c2l6ZSgpOwog
fQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9u
RWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBk
b01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhy
ZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVCbG9jayk7CiB9CiAK
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKQEAgLTEwNDIsMTgg
KzEwOTEsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwogICAg
ICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQ
cmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZy
YW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7
CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJPZmZz
ZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZv
cihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVSZWdpc3RlckNvdW50
Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2ludCBKSVQ6OnN0YWNr
UG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJs
b2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9pbnRlck9mZnNldEZv
cihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNoTWFwPENTdHJpbmcs
IFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3RyaW5n
LCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9u
IDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWws
IGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBP
ZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNf
Y2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAorI2luY2x1
ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUg
IkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgpAQCAtNDQs
NiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hp
ZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgorI2luY2x1ZGUgIkxM
SW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiVW51
c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTE0OSwxNCArMTUx
LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0
aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0Owog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVu
bGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNh
bGxMaW5rSW5mb0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklU
IDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVO
VCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklU
U2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEsNiArMTczLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1h
eSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KICAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAorICAgICAgICB1
c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChW
TSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVj
b2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTE3OCwy
OCArMTgyLDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAq
SlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0
aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwotICAgICAgICBDb21waWxhdGlv
blJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBDb21waWxhdGlvblJlc3Vs
dCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAgICAgICAgc2l6ZV90IGNvZGVT
aXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9y
ZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBj
b21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNv
ZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4gSklU
KHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShjb2RlQmxvY2ss
IGVmZm9ydCk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdp
c3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyBpbnQg
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRp
YyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOwogCiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVUaW1l
U3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90YWxD
b21waWxlVGltZSgpOwogCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfbWV0YWRh
dGFHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSOworICAgICAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzX2NvbnN0YW50c0dQUiA9IExMSW50OjpSZWdpc3RlcnM6OnBi
R1BSOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgICAgICB2b2lk
IHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAgICAgIHZvaWQgbGluaygpOwotICAgICAg
ICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7
CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKENvZGVCbG9jayosIEpJ
VENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJ
VCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRD
YWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCkBAIC0yMjMs
NiArMjMyLDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZyb21N
ZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQzMkZyb21N
ZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQ4RnJvbU1l
dGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAg
ICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXpl
X3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAg
ICAgIHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAg
ICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBz
aXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVibGljOgorICAgICAgICB2b2lkIGxvYWRD
b25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgIHByaXZhdGU6Cisg
ICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRD
b2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisKKyAgICAgICAgdm9p
ZCBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1Qw
KTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRvSGFuZGxlcikKICAg
ICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGp1bXBUb0hhbmRs
ZXIpOwpAQCAtMjU4LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgJiYg
T3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlu
a0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92
YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAg
ICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+
IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBj
YWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChj
b25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAg
dm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4NywxNCArMzIyLDE1IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93
bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2
b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsK
IAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBp
biByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0
Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBH
UFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICAvL3ZvaWQg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOworICAgICAgICAv
L3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2Rl
JiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFs
dWVSZWdzKTsKQEAgLTMwNyw2ICszNDMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
dm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBB
cnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQg
YXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklE
IHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAg
ICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwg
cHRyZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2Rl
KE9wKTsKQEAgLTU5Miw3ICs2MzIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02MjYsMTQgKzY2NSwx
NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJv
b2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
T3JCcmFuZCwgQWNjZXNzVHlwZSk7Ci0gICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZp
cnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUpOworICAgICAgICB2b2lkIGVtaXRIYXNQcml2
YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3
RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHZv
aWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUpOworICAgICAgICB2b2lkIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcpOwor
ICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBHUFJSZWcgc2Ny
YXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgdW5zaWduZWQgZGVwdGgpOwogICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNo
ZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY0NSw3ICs2ODQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNl
bmRpZgogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRj
aHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVy
VG9TZXQpOworICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBv
aW50ZXJUb1NldCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUq
IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogICAgICAg
ICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZP
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAg
IHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qg
b3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CkBAIC02NTQs
NiArNjkzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9D
YWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAg
ICAgIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSlNWYWx1ZSBn
ZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJh
bmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENv
bnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjk1LDI2ICs3MzUsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9k
dWxlVmFyKTsKICAgICAgICAgfQogCi0jZGVmaW5lIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VO
RVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVy
YXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9HRVRfRlJP
TV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFU
T1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVy
YXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1l
KTsKLQotICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1VzZWRGb3JPcFJlc29s
dmVTY29wZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gTW9kdWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gZW1pdCBpbmxpbmUg
dGhhbiB1c2UgYSB0aHVuay4KLSAgICAgICAgICAgIC8vIFJlc29sdmVkQ2xvc3VyZVZhciBiZWNh
dXNlIHdlIGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9wX3Jlc29sdmVfc2NvcGUuCi0gICAg
ICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAgICAgfQotCi0jZGVmaW5lIERFQ0xBUkVfUkVT
T0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29s
dmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERF
Q0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9SRVNPTFZFX1ND
T1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFy
KiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mLCBzdGQ6Om9wdGlvbmFs
PFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29w
ZVRodW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5r
TmFtZSk7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZN
Jik7CkBAIC03NTksMTAgKzc4MSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9u
KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
KTsKICAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdChBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEm
LCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShN
ZXRhZGF0YSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25z
dCBCeXRlY29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAg
ICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0
eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRz
PE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIw
LDIwICs4NDIsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNl
dCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5
cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBB
cmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5
cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlv
biwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBl
IG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAg
ICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsK
LSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEs
IHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5
cGUsIHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVu
YWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+
Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFk
ZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFk
ZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlv
blR5cGU+KHRhcmdldCwgYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRk
cmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdl
dC5vZmZzZXQpLCByZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOCwyNSArOTQwLDIwIEBA
IG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2Fu
QmVPcHRpbWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wg
Y2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxp
bmVkOyB9CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hv
dWxkRW1pdFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgp
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQo
KSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9m
aWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3
aGljaCBjYXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1p
dFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGVt
aXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAgICAg
ICAgdm9pZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wg
cmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxl
VGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFs
dWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8v
IGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdh
bnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRo
ZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBj
b3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxl
KEJpbmFyeU9wKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAt
OTYzLDkgKzk4MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNo
ZXM7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0
SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9j
b3BpZWRBcml0aFByb2ZpbGVzOwotCiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tz
OwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFj
azsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC05OTksMTEgKzEwMTMsMjQgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlx
dWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJh
dGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9v
bCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFBy
b2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAgICAgICAg
Q29kZUJsb2NrKiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBVbmxp
bmtlZENvZGVCbG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKworICAgICAg
ICBNYXRoSUNIb2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2Rl
PiBtX2ppdENvZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOwor
ICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQg
eyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgQmFnPFVu
bGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgICAgIEJhZzxDYWxsTGlu
a0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAgICBGaXhlZFZlY3RvcjxTaW1w
bGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U3Ry
aW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAgc3RydWN0
IE5vdEFDb2RlQmxvY2sgeyB9IG1fY29kZUJsb2NrOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3Bw
CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRD
aGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
YXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3Vt
ZW50R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAg
ICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25a
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0zMjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1Qx
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwg
cmVnVDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGlu
dmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QxKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzc1LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKQEAgLTU3Myw3ICs1NzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3coY29uc3QgCiAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAg
ZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURv
dWJsZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0g
bV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJv
ZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJvZmlsZUluZGV4KTsK
KyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9m
aWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwg
bmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9z
ZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50
CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsK
QEAgLTg5OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3Ry
dWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJ
Qyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
Jm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBt
X21hdGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9N
YXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0
PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxp
bmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0
YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
c2NyYXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdz
KTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAg
ICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAg
LTEwMTUsMTAgKzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1h
dGhJQwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJv
ZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFBy
b2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
c2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFk
ZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1
NSwxMyArMTA2MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8
CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMt
PmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChh
cml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElD
KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1Jl
Z3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVu
Y3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWlu
dGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVO
QUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAt
MTEyMCwxMyArMTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0
aElDCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0
aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBp
ZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAo
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAg
ICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0
d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lz
ZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVn
cywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAK
ICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwo
KTsKQEAgLTExNjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0
cnVjdGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0
cjsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUg
PSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJs
b2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5t
X3Byb2ZpbGVJbmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29k
ZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJh
bmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjIwLDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBK
SVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsK
KyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJs
b2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5t
X3Byb2ZpbGVJbmRleCk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11
bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50
SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFs
dWVNdWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211
bChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUU3Vi
SUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9p
bnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBl
bWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENh
bGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAg
ICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6
Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdU
MSwgcmVnVDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3Rh
Y2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7
CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAg
ICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDcgKzM0MSw2IEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRo
Q2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC00NCw3ICs0NSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENh
bGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkp
LnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDE4ICs1NCwxOCBAQCBzdGQ6
OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6
Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9
IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
IGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQg
Y2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50
SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBj
aGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50Pihz
dGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCisK
ICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lz
dGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCBy
ZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAg
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0YSwg
Y2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3Rv
cmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxl
KCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyArNzksNyBAQCBzdGQ6OmVuYWJs
ZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29k
ZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVj
b2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFu
dCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFs
dWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRz
OwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRl
Y29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJk
QXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNp
emVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVl
UmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0
RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
LWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRo
aXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSksIHJlZ1Qx
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEwMywxNiBAQCBKSVQ6OmNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0g
b3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAgICBz
ZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVy
YXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24s
IHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92
ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQg
Y291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAr
IFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3Qg
PSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZv
LT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2FkQ29u
c3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1Qz
LCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZv
OjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RCaWdn
ZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0xMjcs
MTYgKzEzMSwxNiBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRlbXBs
YXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNv
ZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsK
LSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1l
OjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIGFyZ3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIs
IEFkZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsK
IAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7Ci0KLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9l
Y21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0
ZWNvZGUpOwogCkBAIC0xNDgsNyArMTUyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZv
KiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3Mu
YWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENh
bGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5
dGVjb2RlLm1fYXJndjsKQEAgLTE1Niw0MyArMTYwLDQ3IEBAIHZvaWQgSklUOjpjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zm
c2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVz
cyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0Vmly
dHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0
aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQo
Ynl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxl
VGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKLXsKK2Jvb2wgSklU
Ojpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2ln
bmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KSB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwm
IGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwg
VW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewotICAgIENh
bGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVEYXRhLm51bVBhc3Nl
ZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0
ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxlRGF0YS5udW1Mb2Nh
bHMgPQorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURh
dGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOworICAgIHNodWZmbGVEYXRh
LT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAgIHNodWZmbGVEYXRhLT5udW1Q
YXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworICAgIHNo
dWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVy
OworICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBieXRlY29kZS5tX2FyZ3Yg
LSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZm
bGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1ZmZsZURhdGEtPmFy
Z3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQor
ICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5
OjpkaXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAgICAg
ICAgIERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAg
ICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotICAgIHNodWZm
bGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7Ci0gICAgaW5mby0+
c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZsZURhdGEtPmNhbGxl
ZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgIHNodWZm
bGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0Ojps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1bXBMaXN0IHNsb3dQ
YXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENh
bGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgbG9hZENv
bnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVtcExpc3Qgc2xvd1Bh
dGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVn
VDAsIHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgKnNodWZm
bGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93Q2FzZShz
bG93UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CisgICAgaW5mby0+
ZnJhbWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAgICAgYXV0byBkb25l
TG9jYXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjE4LDE0ICsy
MjYsMjUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAg
ICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENh
bGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KLSAg
ICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNvZGVJRCAhPSBvcF9j
YWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNv
ZGUsIGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0gVUlOVF9NQVg7Cisg
ICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBpbmZvID0gbV91bmxp
bmtlZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29k
ZUluZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVG
b3Iob3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAgICAg
QVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgp
OworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbklu
Zm8oKSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
dW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50
OworICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsK
IAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRl
eCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJf
dCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAg
ICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCku
Yml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3Mo
Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9s
ZHMgY2FsbGVlLgpAQCAtMjM0LDE2ICsyNTMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
Y29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9
PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6
Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
LmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChjb21w
aWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBpZiAo
Y29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0Nv
bnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFu
dCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0
byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJl
Z1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRvIHNs
b3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHJlZ1QwLCByZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9
KTsKQEAgLTI1MywxMyArMjY4LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IElu
c3RydWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0g
aW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24g
PSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlv
bjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCAr
Mjg4LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3Zt
LCAqdGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0
aGlzLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJu
RnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcgKzQxMCwzMCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
aWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBy
ZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIs
IEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
bmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMp
OwogfQpAQCAtNDE2LDEwICs0NDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
b3Blbihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRv
ckdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RP
YmplY3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIp
KTsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7
CkBAIC00MzIsMTkgKzQ1OCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBD
YWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0
b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
aWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUo
aXRlcmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5
cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJl
ZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAg
ICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0
ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmso
dGhpcyk7CiB9CkBAIC00NTIsNyArNDc2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJh
dG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgp
IHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNl
IE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUw
ICs0OTMsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAg
IEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6Okdl
bmVyaWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNv
bHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7Cisg
ICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6
b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZz
ZXRPZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4
VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRP
ZlNlZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVj
dGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2lu
dCgpOwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJl
Z1QwCiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3Vs
dEdQUiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJl
c3VsdEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0g
ICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29u
c3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6c2NyYXRjaDsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7
CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChp
dGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZh
bHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdz
LmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0
R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwg
SlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIs
IEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4p
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdz
IHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
SlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3Bv
aW50KCk7CiAgICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qy
OwotICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQg
dXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRl
U2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9u
RG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNo
MSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChnbG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJh
bmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBn
bG9iYWxHUFIpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbW92ZShpdGVy
Q2FsbFJlc3VsdEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+
dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAg
ICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAog
ICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1Nzcs
NTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1
bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1
bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAg
ICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJ
Zk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1w
bCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAg
ICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAg
bm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAg
ICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIp
KTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0g
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
ZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJl
c3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdC
aXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihk
b25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RP
YmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7
CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAg
ICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5n
SW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
IAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxs
IGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25B
cmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRl
clJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJn
dW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
ICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAg
ICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAg
IH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKKwogbmFt
ZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtMTU5LDEwICsxNjAsMTAgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAgICB7
Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNl
RGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJD
YWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcs
OSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAg
LCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1f
c3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NU
eXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBj
b2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4p
IDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNh
bGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7
CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXpl
KAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1Yklu
Zm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0
UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhT
dGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4o
bV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGpp
dC5sYWJlbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5
cGUpKTsKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAg
aml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9k
b25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0
b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0xMTAsNyArMTE4
LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcgogICAgIENvZGVC
bG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWdzIGJhc2Us
IEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUgYWNjZXNz
VHlwZSkKICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3Jp
Z2luLCBjYWxsU2l0ZSwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0
dWJJbmZvR1BSKQotICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5hbWUudWlkKCkgPT0g
Y29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCisgICAgLCBtX2lz
TGVuZ3RoQWNjZXNzKGNvZGVCbG9jayAmJiBwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJsb2Nr
LT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoYmFzZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAko
cmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTE0IEBAIG5hbWVz
cGFjZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNsYXNzIENhbGxTaXRlSW5k
ZXg7CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5m
bzsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNzIEFjY2Vz
c1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCitzdHJ1Y3Qg
QmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
R1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1
Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
ID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlW
YWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9jayBhbmQg
aW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KKyAgICBzdGF0
aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAg
c3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjph
cmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG8gPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBH
UFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJl
Z1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
byA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gg
PSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnMg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0
cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5
SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKK307CisKK3N0cnVjdCBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2Ug
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQ
UkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BS
SW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUklu
Zm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFz
ZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBicmFu
ZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xhc3MgSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKCkg
eyB9CkBAIC02MiwxNSArMTY1LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKAogICAg
ICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRo
TGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2VkU3R1YkluZm8geyBu
dWxscHRyIH07CisgICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBwcm90ZWN0ZWQ6Ci0g
ICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0VHlwZTsKICAgICBT
dHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgorICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Ns
b3dQYXRoQ2FsbDsgLy8gT09QUzogbWFrZSByZXBvcnRDYWxsIHBhc3Mgc29tZXRoaW5nIGluIHdl
IGNhbiB1c2UgZm9yIHRoZSBub24tQ1RJIHRodW5rcyBidWlsZHMuIAogfTsKIAogY2xhc3MgSklU
QnlJZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CkBAIC05OCw3
ICsyMDcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFs
dWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKK3B1
YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTEzMiw4ICsyNDEsOCBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0gZGVm
YXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIEpJ
VFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLAotICAgICAg
ICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwg
RUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2Fj
aGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRL
aW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
ICAgICAKQEAgLTE2MywxMSArMjcyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZh
c3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9i
YXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKQEAgLTE5MSw4ICsyOTgsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVy
YXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBt
X3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjEsNiBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hh
YmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNDQsNiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0
ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI3Nyw4ICszNzgsNiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1
ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAotcHJpdmF0ZToKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hh
YmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSArNDAxLDkgQEAgcHVibGlj
OgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1w
cml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3Jlc3Vs
dDsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzMwLDggKzQyNyw2
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODE4Njgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewot
ICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
RG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0
YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25z
dGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAg
ICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3Jj
KSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAgICAg
ICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBhbGwgbGluayB0aW1lIGNvbnN0
YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAg
IEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29u
c3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0
SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50
cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRD
YWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3Rl
ciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIp
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1
cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJu
VmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2FsbDsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1l
dGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
K3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBk
c3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJu
VmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZh
bHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVh
bFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcp
KQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55
U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7
CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBz
aG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28g
dGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFT
U0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkt
Pmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsg
MSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRlY29k
ZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFk
dmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90
Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5
dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhv
dC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7
Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkt
Pmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNr
cG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgsMzQgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
LSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+
bGVuZ3RoKCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKLXsKLSAg
ICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKLQotICAgIC8vIFdlJ3JlIGluIGEgc2lt
cGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBk
aXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQodmFs
dWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UKLSAgICBFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSAgICBzdG9yZTMyKHZhbHVlLnBheWxv
YWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAgICBzdG9yZTMyKHZhbHVl
LnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKLX0KKyAgICBpZiAo
IXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAm
JiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09
IDE7Cit9CisKKy8vIE9PUFMKKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKy8vewor
Ly8gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CisvLworLy8gICAgLy8gV2UncmUg
aW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVz
dCBkbyBhIGRpcmVjdAorLy8gICAgLy8gc3RvcmUuCisvLyNpZiBVU0UoSlNWQUxVRTY0KQorLy8g
ICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyNlbHNl
CisvLyAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0
PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vICAg
IHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQp
OworLy8gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcp
OworLy8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSks
IFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJ
ZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
Z1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxz
ZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzIzLDI0ICszNTMs
MjUgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQog
ewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7CisgICAgcHRyZGlmZl90IG9mZnNldCA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVj
b2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29kZT4obV9ieXRlY29kZUluZGV4LmNo
ZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKTsKKyAgICBz
dG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0
UmVnKSk7Ci19CisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKKy8veworLy8gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykp
OworLy99CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjpl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlc3VsdFJl
ZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgR1BSUmVnIHJlc3VsdFJl
ZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhy
ZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVl
UmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCkBAIC0zNjAsNiArMzkxLDIxIEBAIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVcKICAgICB9CiB9CiAKK3RlbXBsYXRl
IDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9m
QXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikK
K3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CisgICAgICAgIGxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0
ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdp
c3RlcklEIHNjcmF0Y2hHUFIpCit7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBB
cnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3Jh
dGNoR1BSKTsKK30KKwogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmFzSW50MzIoKTsKQEAgLTM4MCw3ICs0MjYsNyBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91Ymxl
KFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAocmVn
LmlzQ29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3Rh
bnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRy
KCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZERvdWJs
ZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKQEAgLTQ5Niw3ICs1NDIsNyBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFt
X2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVn
KSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUwNiw3ICs1NTIsNyBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFn
KQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAo
IWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MTQsMTEgKzU2
MCw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9CiB9
CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxS
ZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKQEAgLTU0NCwxMSArNTg1LDE3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBBU1NFUlQobV9ieXRlY29k
ZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAog
ICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigp
KQotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSks
IGRzdCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgc3dpdGNoIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpKSB7CisgICAgICAgIGNhc2Ug
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICBjYXNlIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIG1vdmUo
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0Nv
bnN0YW50KHNyYywgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTU2NiwxMSArNjEzLDYgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwg
ZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50
KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lz
dGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01
OTUsNyArNjM3LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQog
CiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVn
aXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY3
OSw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBp
ZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9j
ay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
R2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQot
ewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hN
YXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRH
ZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0
SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7
Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1
dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6
OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBr
ZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAz
MiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1
dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChp
dGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBp
dGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGll
ZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQ
cm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zm
c2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiAr
NzAwLDYxIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICBy
ZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBs
b2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRh
dGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhzX21ldGFkYXRhR1BS
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBC
eXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAg
bG9hZDgoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZh
bHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMy
VG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90
IG9mZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1f
dW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVj
b2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3Qg
Qnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZz
ZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgc19tZXRhZGF0YUdQUiwgcmVz
dWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvbnN0YW50KEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgY29uc3RhbnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBs
b2FkUHRyKEFkZHJlc3Moc19jb25zdGFudHNHUFIsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oY29u
c3RhbnRJbmRleCkgKiA4KSwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
bG9hZEdsb2JhbE9iamVjdChHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRDb25zdGFudChtX2ds
b2JhbE9iamVjdENvbnN0YW50LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
Ojpsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBHUFJSZWcg
cmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7Cisg
ICAgLy8gT09QUzogTWF5YmUgbWFrZSB0aGlzIG1vcmUgZWZmaWNpZW50PworICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZm
ZXIoKSksIHJlc3VsdCk7CisgICAgbG9hZDY0KEFkZHJlc3MocmVzdWx0LCBjb25zdGFudC50b0Nv
bnN0YW50SW5kZXgoKSAqIHNpemVvZihKU1ZhbHVlKSksIHJlc3VsdCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IElu
c3RydWN0aW8KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNo
T2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkp
KTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVC
bG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUs
ICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTk5Nyw3ICs5OTcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBm
b3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxl
SW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1l
ZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsK
IApAQCAtMTAyNCw3ICsxMDI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29u
c3QgSW5zdAogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlv
bnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAg
IG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5k
ZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2Vk
VGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwNDIsNyArMTA0Miw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KIAogICAgIC8vIGNy
ZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRj
aCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5z
dHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4
LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAgIGxpbmtlZFRhYmxl
LmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQz
LDggQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVn
aXN0ZXIuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC01NCwxMSArNTYsMjIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAg
ICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7Ci0gICAgICAgIGVs
c2UKKyAgICAgICAgLy8gT09QUzogbW9zdCAiT3RoZXIiIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
biBjb25zdGFudHMgY2FuIGp1c3QgYmUgZ3JhYmJlZCBmcm9tIHRoZSBVbmxpbmtlZENvZGVCbG9j
ay4gSXQncyBqdXN0CisgICAgICAgIC8vIGEgY291cGxlIHR5cGVzIHRoYXQgY2FuJ3QuIENyZWF0
ZSBhbiBhYnN0cmFjdGlvbiBmb3IgdGhhdC4KKworICAgICAgICBzd2l0Y2ggKG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykpIHsKKyAgICAg
ICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6CisgICAgICAgIGNhc2Ug
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6IHsKKyAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAg
ICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3Qp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7CisgICAgICAgICAgICBz
dG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NywzNyArMTAwLDM1IEBAIHZv
aWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29w
X25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVj
dDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxv
Y2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0Zp
bmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAg
UmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hS
ZWcgPSByZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAg
aWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBU
cnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1
bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2Vz
KTsKLSAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0
dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCksIGFs
bG9jYXRvclJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmpl
Y3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKwor
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1Q
dHIobnVsbHB0cik7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxv
Y2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHks
IHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcs
IFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVt
aXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11
dGF0b3JGZW5jZSgqbV92bSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCk7CisKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwor
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1
cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmpl
Y3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3Jl
Q2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzE0Miw4IEBAIHZvaWQg
SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAg
aWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1
c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3Rh
bmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAg
IEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAs
IEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlv
blByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKIApAQCAtMTU0LDMwICsxNjYsMzggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0g
Ynl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZh
bCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8v
IFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlz
IGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3RvLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2Vs
aW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm90
b0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgY29uc3RleHBy
IEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBwcm90b0dQUik7CiAg
ICAgCiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBh
IGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0lu
c3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOwogCiAgICAgSklUSW5zdGFuY2VPZkdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwg
Ly8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJv
dG8KLSAgICAgICAgcmVnVDUsCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgcmVz
dWx0R1BSLAorICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgcHJvdG9HUFIsCisgICAgICAgIHN0
dWJJbmZvR1BSLAorICAgICAgICBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gx
LCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gyKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7CisgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKKwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMTkyLDE0ICsyMTIsMTMg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7
Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5v
bkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3Rh
bmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCByZWdU
MiwgcmVnVDEpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm8gPT0gYXJndW1l
bnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
dmFsdWUgPT0gYXJndW1lbnRHUFIyKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVyczo6cHJvdG8gPT0gYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5
cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBA
IC0yNDAsNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChj
bwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVn
VDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM3NCw3ICszOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygmUmVnaXN0ZXJBdE9mZnNldExp
c3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiAjZWxzZQpAQCAtMzgzLDkgKzQwMiw5IEBAIHZvaWQg
SklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7Ci0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZS
ZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
CkBAIC00MTEsNyArNDMwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0
IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NTIsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bf
c2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0
aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rp
b24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwg
cmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1bWVu
dEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ4NCwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9i
YWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQ
Uik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSks
IHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25a
ZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNTAxLDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1NDAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBK
U0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3Ry
dWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVt
cCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQzLDcg
KzU2NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAgICAv
LyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBK
dW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs2MDMsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFs
UG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsK
LSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEND
YWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMy
KDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChi
eXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0
YWRhdGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1
YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2NDQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
anRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BS
ID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVS
ZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFk
ZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDAp
LCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY2MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzE2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAg
ICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVu
dHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
cmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25I
YW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzczMyw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVy
R2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50
R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIx
OwpAQCAtNzIwLDcgKzc0Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIGpp
dC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRHUFIw
KTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
YXJndW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyArOTMwLDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5
NDEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiB9CiAKQEAgLTkzMSw3ICs5NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIo
Y29uc3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTc1LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNW
UmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7
CiB9CkBAIC05NzgsNyArMTAwMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25z
dCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcg
IT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0K
QEAgLTk5Myw3ICsxMDE3LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3Ry
dWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zm
c2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihu
dWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsK
IAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9j
aygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBPT1BTOiBUaGlzIGlzbid0IGVs
ZWdhbnQuIFdoeSBhcmVuJ3QgdGhleSBpbiB0aGUgY2FsbGVlIHNhdmUgYnVmZmVyLiBJIGd1ZXNz
IGJlY2F1c2Ugd2UgY2FuIE9TUiBleGl0IGhlcmU/CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRh
dGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwg
JnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyArMTAzOCwxMSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9v
ZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7Ci0gICAgaWYg
KGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5
dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxl
LCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUs
ICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5
ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwotICAgIGlmIChidWZmZXIg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewotICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSksIHJlZ3MpOwotICAg
ICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKQEAgLTEwNTMs
OCArMTA2OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAg
ICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhp
cyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVu
ZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0
LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRh
YmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsxMDk2LDE0IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRp
bmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBm
b3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRl
eCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rl
cikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgsIHVubGlu
a2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBh
cmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsK
ICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEw
OTksMjAgKzExMTUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJ
bgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsK
IAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFj
ayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJp
bmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBt
X2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAg
ICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0
YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNB
ZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dl
clJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVn
SG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTExMzMs
NyArMTE1MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAog
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE0
OCw3ICsxMTY2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAog
CiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjYsNyArMTE4
Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdU
MiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE4OCwx
MiArMTIwNSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAg
ICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3Vy
IGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZv
aWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBp
bmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5u
dW1WYXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFy
cygpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBmb3IgKHNpemVfdCBqID0g
Q29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwor
ICAgIAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7CiAKICAgICBlbWl0RW50ZXJPcHRp
bWl6YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEyMTIsNyArMTIzMSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9o
YW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6
OmVicCk7CkBAIC0xMzEwLDIzICsxMzI5LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29w
ZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJl
SUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJl
Z1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJl
Z1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2Vs
bD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lz
dGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJl
Z1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcgKzEzNTcs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZFB0
cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFs
bG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6
Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9jYXRv
clJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRh
OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJl
RGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBj
YWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BD
cmVhdGVUaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRDYWxsZWUoKSwgY2FjaGVkRnVuY3Rp
b25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVh
bCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVD
YWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIGNh
bGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVz
LmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzODcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qy
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCBy
ZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1
cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEzOTgsOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Qy
LCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CiAg
ICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQ
UiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5W
YWx1ZUdQUik7CkBAIC0xMzk0LDcgKzE0MTEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVx
KGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxNDIyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsxNDM3LDExIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3Ry
dWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJ
bnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0lu
c3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNl
T2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVj
dG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwog
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
IH0KQEAgLTE0MzAsNyArMTQ1MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKIHsKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlG
cm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJl
RWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX3VubGlu
a2VkQ29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigp
KSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25D
b3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZFB0cihwdHIsIHJlZ1QwKTsKICAgICAg
ICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2hQdHIoQmVsb3csIHJlZ1QwLCBUcnVzdGVk
SW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBA
IC0xNDQwLDcgKzE0NjAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1CiAjZWxzZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJldHVy
blZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCi0gICAgICAgIG1v
dmVWYWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlc3VsdFJlZ3MpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkpOwogICAgICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAg
ICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0xNDUzLDggKzE0NzMsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBFbWl0IHRoZSBK
SVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgeworICAg
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDAp
OwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1c3Rl
ZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAotICAg
ICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRl
Q291bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQogfQogCkBAIC0xNTA5LDcgKzE1MzAs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1bWVudEdQUjAp
OwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1l
bnRHUFIzOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTUyMiw3ICsxNTQ0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKGNvbnN0IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5l
cmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAg
LTE1NjQsMzQgKzE1ODYsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJ
bnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVn
ZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdl
eHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdl
eHAsIGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENv
bnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1v
bihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEp1bXAgbGF6
eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3Vt
ZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBy
ZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BS
MSk7CiAjZW5kaWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxv
Y2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25z
dGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9u
RGVjbCwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2Rl
Lm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRH
UFIyKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3Jf
ZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5j
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwg
JnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dl
bmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZt
KCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2MjEsMjMg
KzE2NDUsMjQgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNl
bHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBl
bWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgog
Ci0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlv
bkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdp
c2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAgICAg
T3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0
aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4
cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4
cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
KTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19n
ZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fz
eW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTY2
NCwyOSArMTY4OSwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1
CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAg
aW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1
ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
cmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAg
ICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQUjIpOworICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
Miwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXpl
SW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxs
b2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2l6ZUluZGV4LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVB
bmRQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OwogI2Vsc2UKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
TmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSgpLCByZWdUMik7CiAgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0
YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNzIwLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKKyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBj
b2RlIGNhY2hpbmcgd2hlbiB0aGUgdHlwZSBwcm9maWxlciBpcyBlbmFibGVkLgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAg
ICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0
aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFy
Z2V0VmlydHVhbFJlZ2lzdGVyOwogCkBAIC0xNzc3LDIwICsxODA0LDI0IEBAIHZvaWQgSklUOjpl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQ
UjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVt
cyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFj
a2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8g
VGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNo
MlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93
UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3Vt
ZW50IHJlZ2lzdGVyLgorICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAg
ICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0
Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2Nr
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBy
ZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVT
RShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91
YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhl
IHVzaW5nIHRoZSBjb250cm9sIGZsb3cgcHJvZmlsZXIuCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlQ29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNp
Y0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9j
a0xvY2F0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5l
bWl0RXhlY3V0ZUNvZGUoKnRoaXMpOwpAQCAtMTg2MCw3ICsxODkxLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgp
LCByZXN1bHRSZWdzKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE5
MTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1p
dExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywg
c2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3Vs
dFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dFJlZ3MpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4ODEsNyArMjg4MSw3IEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
Y29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiBy
ZXN1bHQ7CiAgICAgaWYgKGtleS5pc0ludDMyKCkpCkBAIC0yOTA0LDcgKzI5MDQsNyBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7Ci0gICAgY29u
c3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwogCiAgICAgaWYgKGtleS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmluZ0ltcGwqIHZh
bHVlID0gYXNTdHJpbmcoa2V5KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OCw3ICszNDgsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgSW52YWxpZEdQUlJlZywg
SW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0
cnVlOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODE4
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDksOTIgKzQ5LDEwMyBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgaWYg
KG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElD
TWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0
QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgeworICAgICAgICBhdXRvIG5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdENl
bGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIHNjcmF0Y2hHUFIsIGJh
c2VHUFIsIHByb3BlcnR5R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogCi0gICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVn
cywgcmVnVDIpOwotICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQot
ICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAg
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0
eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgICAgICAvLyBPT1BTLiBTdXBw
b3J0IHRoaXMKKyAgICAgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQor
ICAgICAgICAvLyAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKwor
ICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6R2V0QnlWYWw7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29k
ZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBz
dHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nh
c2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYgKCFoYXNB
bnlTbG93Q2FzZXMoaXRlcikpCisgICAgICAgIHJldHVybjsKKworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOwogCi0g
ICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlv
bkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBt
b3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAg
bW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1h
dGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0
T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRz
dCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
LCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAg
ICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVj
b2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAv
LyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2Zp
bGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsK
LQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0g
ICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFs
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAg
ICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJl
Z1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwor
ICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdU
MCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsxNjAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
CiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNjAsOCArMTcxLDggQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxl
R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRH
UFIxKTsKIApAQCAtMTg3LDM0ICsxOTgsNDAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJp
dmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0
UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2Fz
ZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9u
YW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
cml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzI0MCwxMSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSht
ZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHksIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1NCwyMCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGlj
X2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0
aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBD
YWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25H
ZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5W
YWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCkBAIC0yNjQsNyArMjc3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAwLDIxICszMTMsMjggQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5
dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcg
YnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJh
bmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwotCiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJy
YW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAK
ICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVu
Y2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC0zMjQsMTcgKzM0
NCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1p
dFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRf
cHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIFVOVVNFRF9QQVJBTShj
dXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nl
c3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRH
UFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFBy
aXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6
ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzY5LDE4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1
c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5k
OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRl
Y2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMs
IEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUp
Pjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOwot
ICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJy
YW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMTkgKzM4OSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVj
a19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOworCisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5k
QWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQog
CkBAIC0zOTQsOSArNDIyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRl
X2JyYW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
R1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQs
IGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
aGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwpAQCAtNDA2LDI0ICs0MzYsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZh
dGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFy
Z3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BS
ID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRP
cHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRp
b25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBD
YWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25D
aGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NTksNDIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1Qz
LCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwg
cHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2Rl
LCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAg
ICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQpOwotICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9H
UFIpOworICAgIC8vIE9PUFM6CisgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVy
dHkpKQorICAgIC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0
QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRC
eVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAg
c3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRl
IG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpA
QCAtNDc0LDE1ICs1MTAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShh
dXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAg
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAg
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
ICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBp
ZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTMxLDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAv
LyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQu
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0
cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkg
PyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1l
bnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFs
RGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2Zp
bGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0
QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQ
UjUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUu
aXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmlj
dCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUxMiw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3Qg
PyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0
aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21h
TW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJh
dGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU2NSw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKQEAgLTUzMywxOCArNTc1LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0
aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcg
dG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
ICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAg
ICAgUmVnaXN0ZXJTZXQgdXNlZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6dmFsdWUsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBB
U1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRh
aW5zKHJlZ1Q1KSk7CisgICAgfQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQ
UiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9i
YWxPYmplY3RHUFIpOwpAQCAtNTcwLDIwICs2MTgsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNW
YWx1ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZh
bGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJp
dmF0ZUZpZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBu
ZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAg
LTU5NCw4ICs2NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRQcml2YXRlTmFtZT4oKTsKLSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRl
Y29kZS5tX3B1dEtpbmQ7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAK
ICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbElu
ZGV4KytdOwogCkBAIC02MDMsMTMgKzY2MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3ByaXZhdGVfbmFtZShjCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAot
ICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlW
YWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0
ZUZpZWxkT3B0aW1pemU7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRo
ZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJl
Z1QyOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2
YWx1ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7
CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOwor
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQpOworICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0
S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50c0dQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1c3RlZElt
bVB0cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02MjIs
MTggKzY4NCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9H
UFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJp
dmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0MywxNCArNjk5LDE0
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
IAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3MzYsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzc0Niw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc1Nyw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
U2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0
dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBt
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwo
KSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NzA5LDcgKzc2OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsK
ICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzc5LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRl
ckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdU
MCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMg
Kzc4OCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
cmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nh
c2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1
Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdl
IHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3
cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODMwLDE3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1tt
X2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODU0LDE5IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVH
UFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFN
b2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVs
X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODA4LDcgKzg3
Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKQEAgLTg0NSwyMiArOTEzLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBw
cm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVsQnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCks
IHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlm
ICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dD
YXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVC
eVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3Vs
ZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1i
YXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVj
dHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSAr
OTYyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEs
IFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21h
TW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTks
MjQgKzk4MCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25z
dGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxl
dGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0
YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lm
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMDIsNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlv
bnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMg
YmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAg
ICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxs
SGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIgKzEw
MzcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJl
Z3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vz
c1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNzEsMTcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMTAwMywyNiArMTA5MSwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9p
ZChjb25zCiAgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3Bl
cnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSks
IGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRp
bWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblRyeUdl
dEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMzAsMjIgKzEx
MTIsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3Vs
dFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIs
IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYgKzExNDUsMTgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNb
bV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Cisg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlkRGly
ZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTY2LDYxIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJv
cGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAg
IEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRy
ZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEu
YXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2FkOEZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRh
dGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihOb3RFcXVhbCwgVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5
dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0
QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNl
R1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7
CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQorICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBi
eXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEs
IHRoaXNWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CiAKLSAgICBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdz
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4
LDE2ICsxMjI5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4K
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNTAsNTcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1l
bnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1
bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lk
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAg
Q2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0
aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRv
ciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNs
b3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQpAQCAtMTIwNiw3ICsxMzEwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0MSwxNiArMTM0NSwxOSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRo
VGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0
QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BS
MywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEyNjAsMjggKzEzNjcsMjIgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRo
aXNHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNH
UFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fz
c2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7
Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0
aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI5
MSw3ICsxMzkyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3Qg
YmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcv
RlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3Rz
LCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAg
ICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJu
QWRkcmVzcygpOwpAQCAtMTMyOSwyMyArMTQzMCwzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
Ly8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0
aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBh
ZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBh
dGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1
Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMu
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJl
ZywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxp
bmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1
ZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVn
KTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUo
Ynl0ZWNvZGUpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRl
Y29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERp
cmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGly
ZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZv
LT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcg
U3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEz
NTksMTQgKzE0NzQsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJ
bgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
KHRoaXMpOwogICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNb
bV9wdXRCeUlkSW5kZXgrK107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVy
YXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3Niwy
NSArMTQ5NSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBh
cmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdU
MTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7
CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAg
IHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xNDA0LDcgKzE1MTcsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQx
LDIwICsxNTU0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTg3LDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0
ODAsMjggKzE2MDcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElu
cwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV9p
ZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAg
IC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1
c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTUxMCwyNSArMTYzMSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9i
eV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxl
LCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OnNjcmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWws
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQpAQCAtMTUzNywxNSArMTY2NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlf
dmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAog
ICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxp
emVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZh
bE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTE1NTYsNTkgKzE2ODgsNzAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5
X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3Vt
ZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFs
aXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlf
dmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAg
ICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsg
anVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0
eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJh
bmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxS
ZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNs
b3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIEFTU0VSVCh0eXBlID09IEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZUJyYW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAgVU5VU0VEX1BBUkFNKHByb3Bl
cnR5KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogCiAgICAg
SklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDog
b3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24o
dHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVO
YW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2MSwyMSBAQCB2b2lk
IEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BS
ID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3Nl
cnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5h
bWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6
dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlv
bkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3Bl
cmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9w
dGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUg
OiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTY1Miw3ICsxNzg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25h
bWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQ
cml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOwor
ICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBi
eXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDE5ICsxODAzLDIyIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJh
bmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2Rz
dCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2
YXRlQnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlm
ICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRj
aEdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOwor
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hw
b2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNp
Z25lZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2
ODgsNiArMTgyOCw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8g
T09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2
ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3
MDEsNyArMTg0Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4K
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAg
ICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSwgcmVnVDEpOwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxC
aW5kaW5nRXBvY2gsIHJlZ1QxKTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRy
ZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4
NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAg
IGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAg
ICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29k
ZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVn
VDApOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdU
MCk7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTE3OTQsODcgKzE5MzUsMTA1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29s
dmVfc2NvcGUoY29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBw
cm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zm
c2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNT
RVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9
PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQ
UiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2Ug
cHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtl
ZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlm
IChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
ZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJv
ZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVu
dmlyb25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFk
YXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEp
OworICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUg
UkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNy
ZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0
b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJF
U09MVkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3Ig
PSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2
ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBD
bG9zdXJlVmFyIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IK
KworICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9y
ID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29s
dmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2Vs
aW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7
CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9y
ID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29s
dmVTY29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29w
ZSBnZW5lcmljIik7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRh
ZGF0YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVn
VDY7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsK
IAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CiAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQ
Uik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1ty
ZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAocHJvZmls
ZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENU
SVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAg
ICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dl
bmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHVi
KGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2Fs
bChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSwgc3Rk
OjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFt
ZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9u
bHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQg
bWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFp
bGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlu
bGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1h
eSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFk
YXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21p
bmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCiAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWlu
ZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxP
YmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwot
ICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5
cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVz
cygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZN
ZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7
CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0
YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdFZhckluamVj
dGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25D
aGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQ
UiA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdU
NDsKLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0KLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xv
YmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNl
dDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0
Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQp
KSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsK
LSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRh
ZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBkb1ZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVH
UFIsIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAg
ICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVz
dDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAg
ICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAg
ewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5l
eHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEp
OwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDAp
OworICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAg
ICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgy
LDEyICsyMDQxLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0
YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgot
ICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gp
KSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFs
TGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFs
T2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2Jh
bE9iamVjdEdQUik7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAg
IGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RH
UFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSks
IHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEgKzIwNTYsMTEgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBK
U1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4
aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBD
b2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFs
T2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAg
ICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0Ojpv
ZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsy
MDY4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAg
ICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZl
ZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMjA3OCw0
NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0K
ICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1Qw
KTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVz
b2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAg
bm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
eworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0g
ZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkp
LCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkp
LCByZWdUMCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBh
dXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAgICAgICAg
ICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Cisg
ICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgbm90
Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
dW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9i
YWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOworICAgICAg
ICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1p
dENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1p
dENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0
Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGlu
aygmaml0KTsKICAgICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlBy
b2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1
YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGlu
ayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29s
dmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsK
IH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUp
IFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZl
X3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAg
ICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlw
ZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwK
LSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5
cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9
Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQot
I3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9y
KFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24g
Y2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRo
IGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAt
MjA2NSw2ICsyMTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdp
cwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAg
Ly8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAg
LTIxNzgsNyArMjMwMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTIxODYsOSAr
MjMwOCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3Bl
cmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVy
YXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24p
OwogfQogCiAjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTIxOTYsNDEgKzIz
MTgsNTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgp
OworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVP
ZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBB
U1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgp
ID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3Ig
PSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2Nv
cGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9z
dXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVy
YXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisK
KyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7Cisg
ICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpu
dWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9Owog
CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7
Ci0gICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50
ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9m
ZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9m
ZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRh
YmxlKGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2
ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAg
ICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAg
ICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAg
ICAgIH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRh
ZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRh
ZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQor
ICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBl
bHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0
Q1RJU3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5l
YXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9w
dGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQog
ewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3
b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCkBAIC0yMjM5LDk5ICsyMzcwLDg4IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICB1c2luZyBNZXRhZGF0
YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFk
YXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2Owot
ICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5
cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owor
CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFk
ZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAg
aml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7
CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2Nv
cGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsK
LSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
YnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSKSB7CisgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1
Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Cisg
ICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MSkpOwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVj
ayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3Qo
KSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0g
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRj
aHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
KTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVj
dGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJy
YW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0
byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJl
ZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcp
OwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0
VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVn
KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7
Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRvIGVtaXRHZXRD
bG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7CiAg
ICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAg
ICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIo
c2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQ
UiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7Cisg
ICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOworICAgICAg
ICBqaXQuYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJs
ZXMoKSksIHJlZ1QwKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1
dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3
aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
ICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGlu
amVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQg
dGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hl
Y2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNr
aW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJl
Z1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKICAgICAg
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAgICAgICAgICBq
aXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAg
ICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVy
biBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5qaXRBc3Nl
cnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAg
ICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxv
Y2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsK
IAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgb2Zm
c2V0KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAg
IEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwg
VHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJv
cnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBp
c091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUg
PSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihm
aXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFz
b24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5l
LmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
YmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAg
ICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBv
ZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0Lm5l
ZzMyKG9mZnNldCk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBv
ZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0
LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0g
ICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
b3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCBy
ZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFu
ZCkpLCByZWdUMyk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwog
ICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAg
ICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQxLDg2ICsyNDYxLDYzIEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBz
d2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNl
IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlz
dCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMy
KFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAg
ICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAg
ICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0
cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBl
bWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVU
eXBlIGludG8gVDAKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRh
ZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihU
cnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2
ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAg
ICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxp
bmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0g
aml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7Cisg
ICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKworICAgICAg
ICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBp
c0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3Bl
cnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsK
KyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
anVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBm
YWxzZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAg
ICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09
IDEpOwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkpKTsKIAotICAgIHJl
dCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8g
c2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVH
ZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxh
YmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9u
TGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dF
VF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUj
I0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1
bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJl
dHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5n
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0
X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAg
Ly8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0
aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdp
c3RlcnM6OmVicCk7CkBAIC0yNDcxLDg2ICsyNTY4LDc5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7
Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9i
YWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5k
aXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsK
LSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdU
MCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0
Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9m
KFJlZ2lzdGVyKSkpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1
dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0
YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZl
VHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0
cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2lu
Y2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxP
YmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0
aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMg
dmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGlu
ZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVz
b2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qx
LCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFt
YmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAg
ICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3Bl
cmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVy
YW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBz
dG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5k
ZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIC8vIE9PUFM6IHdvdWxkIGJl
IG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIEdQUlJlZ3MgaW5zdGVhZCBvZiBWUnMK
KyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2Jh
bFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBt
X2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2
ZVR5cGUpOwotICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5p
dGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8
IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkg
eworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hl
Y2socmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJl
Z1QwKTsKKworICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0
UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVj
ayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFog
Y2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZh
cmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1
ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9w
ZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9T
Y29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAg
ICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChy
ZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBu
aWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3IgdmFsdWUuCisgICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENs
b3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAg
ZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1f
d2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxv
YWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNl
dE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwg
cmVnVDIpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBz
dG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOworCisgICAgICAgICAgICAvLyBP
T1BTOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBm
b3Igb3duZXIvdmFsdWUuCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
TW9kdWxlVmFyOgpAQCAtMjU2NCw1OCArMjY1NCw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNv
bHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5k
OwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExv
YWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2Ug
YXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRp
bmcuCi0KLSAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVt
aXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3Bl
cnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0g
ICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2Vl
cyBDbG9zdXJlVmFyLyBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBj
YW4gY29tcGlsZSB0aGluZ3MKKyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNp
bmNlIHdlJ3ZlIHByb3ZlbiB0aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEg
Q2xvc3VyZVZhciwKKyAgICAvLyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElm
IHdlJ3JlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xv
c3VyZVZhcgorICAgIC8vIGlmIHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmly
ZWQuIElmIGl0IGlzIGZpcmVkLCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9l
c24ndAorICAgIC8vIG1hdHRlciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlm
IChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENs
b3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRD
bG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVs
c2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5m
bygpLCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVt
cCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVy
dHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKIAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShH
bG9iYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbFZhci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAg
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIp
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXIubGluayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAg
ICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxz
ZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjYyNCwxOCArMjcwOCwyMSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0VG9TY29wZT4oKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdl
dFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09
IE1vZHVsZVZhcikgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5
cGUoKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAg
ICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBs
aW5rZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBN
b2R1bGVWYXIuCiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJv
cGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0g
ZWxzZSB7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2Nv
cGUsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRl
Y29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICAgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9i
eXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1
Miw3ICsyNzM5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3Qg
YmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcv
RlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3Rz
LCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAg
ICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkK
ICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNzAxLDcgKzI3ODgsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhy
ZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyODQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1f
aW5kZXg7CkBAIC0yNzY3LDcgKzI4NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJu
YWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9m
ZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApA
QCAtMjc4OSw3ICsyODc1LDYgQEAgdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bDxPcAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUu
bV9tb2RlOwpAQCAtMjgwNSw3ICsyODkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlz
IGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBj
YXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRhZGF0YS5t
X2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVj
dHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25T
dHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7
CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMih+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1
cmVNb2RlKSkpOwpAQCAtMjg0Nyw3OCArMjkzMiw4NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIg
PSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVy
YXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6
c2NyYXRjaDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVy
YXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7CiAKLSAg
ICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRh
dGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlW
YWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoMik7Cisg
ICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRj
aDIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51
bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKICAgICAv
LyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgotICAgIEp1bXAgaXNOb3RP
d25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9k
ZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIHN0
cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1Qy
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsKKyAgICBs
b2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3Jh
dGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBz
Y3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQuCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRo
YW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBp
bmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpT
T2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5k
MzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1Qz
LCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQorICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0g
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAg
c2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQoQmFzZUlu
ZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsK
IAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNz
LmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDMpOwot
ICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAg
bmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNo
Mik7CiAgICAgY29uc3RleHByIGludHB0cl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IG9mZnNl
dEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludHB0cl90
PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAg
ICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBvZmZzZXRP
ZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgp
KTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4KFRydXN0
ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2Rl
U3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAg
IHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2RlLCBPcEVu
dW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkp
OwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc05v
dEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQg
PSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdp
dGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAgICBp
c05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisK
KyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRC
eVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAogICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTI3LDEwICszMDIxLDkgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93
Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVy
KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRo
RnVuY3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUm
IGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJ
VDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0
aW9uVHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0y
OTM5LDcgKzMwMzIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUlt
CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
b2RlLCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1f
ZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5
dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgcmVnVDEpOwor
ICAgIG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1QxLCBieXRl
Y29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsK
IAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwogCkBA
IC0zMDI4LDYgKzMxMjMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lcgogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIAordm9p
ZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQoreworICAgIEp1bXAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNlbGVjdFNj
cmF0Y2hHUFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0Myw3ICsxNTQzLDcgQEAgc3RhdGljIHZvaWQg
cmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogCiB2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpk
dW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0
UGF0aFN0YXJ0KCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgp
LCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7
CiAgICAgCiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBj
b3B5KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0
ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRl
Z2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBv
cGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9y
aCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEo
dDEsIHQyKQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZz
ZXRbY2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFj
cm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRh
IGluIHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cp
CiAgICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1
cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAg
ICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQog
CiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQ
cm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJp
dGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAg
IG1ldGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAu
b3BOZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93
CiAgICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisg
ICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUs
IHQzKQogICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAg
IGJpYSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0
MQotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRl
VW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQog
ICAgIHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYg
QEAgZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0
cnVjdCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRo
UHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRh
ZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAg
ICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMs
IHQyKQogICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8g
YmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJU
YWcsIC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0g
ICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQy
KQogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3Rv
cmUodDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEy
ICsxMTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAg
ICAgICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFn
LCAub3AxTm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cK
LSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50
LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRS
ZWFkeQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQx
Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJl
ck51bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0
LCB0MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBv
cGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5p
dGVseSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0
VGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQor
ICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2Zp
bGVJbnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWky
ZCB0MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEs
MTMgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSBQ
QywgYTEKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBi
dHB6IHIwLCAucmVjb3ZlcgotCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisgICAgICAgICAg
ICAjIEJhc2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFu
dCBwb29sLgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgICAgICAg
ICBsb2FkcCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAgICBsb2FkcCBD
b2RlQmxvY2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwogICAgICAgICAg
ICAgaWYgQVJNNjRFCiAgICAgICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIg
SlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6Omxvb3BPU1JF
bnRyeSkgKiBQdHJTaXplLCBhMgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJ
VEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0
RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVO
YW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBl
bmQKLQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwg
OF0sIHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3MCw3IEBAIG1h
Y3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9w
ZXJhdGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0
b3JlcSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFBy
b2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
QXJpdGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93
OgpAQCAtMTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9w
X25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
cmV0dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9y
aCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0
MikKQEAgLTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUs
IE9wTmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBu
ZWdpIHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJp
dGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0
aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAg
ICAgYnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAw
MDAwMDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikK
KyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVy
LCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCAr
MTE2MCw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBs
bGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEo
dDUsIHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0
eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJp
dGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3Jocywg
dDApCiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUoc2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0
b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBp
bnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJv
ZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBkaXNw
YXRjaCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJl
clRhZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEs
IGZ0MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVy
TnVtYmVyLCB0NSwgdDIpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90
SW50T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAg
ICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVt
YmVySW50LCB0NSwgdDIpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVh
ZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA0LDkgKzExOTYsOSBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAKICAgICAub3AyTm90SW50OgogICAg
ICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMg
ZGVmaW5pdGVseSBub3QuCi0gICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEs
IG51bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIp
CisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZUludE51bWJlciwgdDUsIHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBj
aTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQx
LCBmdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjU1
Niw2ICsyNTU2LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAorCitt
YWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRh
LCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2Zp
bGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjptX2Jp
dHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3Ry
dWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0
YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBCaW5h
cnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91bGQg
bm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZ
IHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2
XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRl
bnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVs
dDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2Vs
bChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRp
ZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgY29u
c3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0
cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBz
dGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFi
bGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxv
Y2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJs
ZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1w
bCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9t
UmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihy
YXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFi
bGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MTg2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBj
b25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Citp
bmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25z
dCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFibGVJ
ZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
K3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50
aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
IHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlmaWVy
KHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJl
dmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5F
X0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2
b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEm
IG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5
QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5h
cnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAg
cHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIo
KSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODE4NjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBpbmxp
bmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
RnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBpbmxpbmUgcHRy
ZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90
IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5j
dGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0aWMgaW5saW5l
IHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsg
fQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShy
ZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNiArNjYsMjAgQEAgcHVibGljOgogICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRy
OwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQmFnJiBvcGVyYXRvcj0o
QmFnPFQsIFU+JiYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodW53cmFwcGVkSGVhZCgpID09
IG90aGVyLnVud3JhcHBlZEhlYWQoKSkKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKworICAg
ICAgICBCYWcgZGVzdHJveTsKKyAgICAgICAgZGVzdHJveS5tX2hlYWQgPSB1bndyYXBwZWRIZWFk
KCk7CisgICAgICAgIG1faGVhZCA9IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgb3Ro
ZXIubV9oZWFkID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCiAg
ICAgfkJhZygpCiAgICAgewogICAgICAgICBjbGVhcigpOwpJbmRleDogVG9vbHMvU2NyaXB0cy9y
dW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mt
c3RyZXNzLXRlc3RzCShyZXZpc2lvbiAyODE4NjgpCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mt
c3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC03NzAsMTcgKzc3MCwxOCBAQCBlbmQKIAog
IyBGSVhNRTogbmVlZCB0byBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxODcwMyB0byBlbmFibGUgdGhpcyBvbiBMaW51eC9NSVBTLgogZGVmIHJ1bkJ5dGVjb2Rl
Q2FjaGVJbXBsKG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucywgKmFkZGl0aW9uYWxFbnYpCi0g
ICAgaWYgKCRob3N0T1MgPT0gImRhcndpbiIpCi0gICAgICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRl
Y29kZS1jYWNoZSIKLSAgICBlbHNpZiAoJGhvc3RPUyA9PSAibGludXgiICYmICRhcmNoaXRlY3R1
cmUgIT0gIm1pcHMiKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhY
WFgiCi0gICAgZWxzZQotICAgICAgICBza2lwCi0gICAgICAgIHJldHVybgotICAgIGVuZAorICAg
ICMgT09QUworICAgICNpZiAoJGhvc3RPUyA9PSAiZGFyd2luIikKKyAgICAjICAgIGZpbGVUZW1w
bGF0ZSA9ICJieXRlY29kZS1jYWNoZSIKKyAgICAjZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAm
JiAkYXJjaGl0ZWN0dXJlICE9ICJtaXBzIikKKyAgICAjICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRl
Y29kZS1jYWNoZVhYWFhYWCIKKyAgICAjZWxzZQorICAgICMgICAgc2tpcAorICAgICMgICAgcmV0
dXJuCisgICAgI2VuZAogCi0gICAgb3B0aW9ucyA9IEJBU0VfT1BUSU9OUyArIEZUTF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0
aW9ucwotICAgIGFkZFJ1bkNvbW1hbmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9I
ZWxwZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBs
YXRlLnRvX3MsICp2bUNvbW1hbmQsICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRP
dXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQorICAgICNv
cHRpb25zID0gQkFTRV9PUFRJT05TICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMgKyAkdGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25zCisgICAgI2FkZFJ1bkNvbW1h
bmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxwZXJzICsgImJ5dGVjb2RlLWNh
Y2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRlLnRvX3MsICp2bUNvbW1hbmQs
ICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVF
cnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQogZW5kCiAKIGRlZiBydW5CeXRlY29kZUNhY2hl
KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437291</attachid>
            <date>2021-09-03 12:03:10 -0700</date>
            <delta_ts>2021-09-03 13:48:23 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>423792</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL3Byb3h5LXNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L3N0cmVzcy9wcm94eS1zZXQuanMJKHJldmlzaW9uIDI4MTg2OCkKKysrIEpTVGVzdHMvc3RyZXNz
L3Byb3h5LXNldC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIGZ1bmN0aW9u
IGFzc2VydChiKSB7CiAKICAgICBsZXQgY2FsbGVkID0gZmFsc2U7CiAgICAgbGV0IGhhbmRsZXIg
PSB7Ci0gICAgICAgIHNldDogZnVuY3Rpb24odGhlVGFyZ2V0LCBwcm9wTmFtZSwgdmFsdWUsIHJl
Y2VpdmVyKSB7CisgICAgICAgIHNldDogZnVuY3Rpb24gdGhlU2V0KHRoZVRhcmdldCwgcHJvcE5h
bWUsIHZhbHVlLCByZWNlaXZlcikgewogICAgICAgICAgICAgYXNzZXJ0KHRoZVRhcmdldCA9PT0g
dGFyZ2V0KTsKICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7CiAgICAgICAgICAgICB0aGVUYXJn
ZXRbcHJvcE5hbWVdID0gdmFsdWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTgzMSw2ICs4MzEsNyBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzLmgKICAg
ICBqaXQvQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaAorICAgIGppdC9CYXNlbGluZUpJVENvZGUu
aAogICAgIGppdC9DQ2FsbEhlbHBlcnMuaAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgK
ICAgICBqaXQvRXhlY3V0YWJsZU1lbW9yeUhhbmRsZS5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291
cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYxOSw2ICs2MTksNyBAQCBpbnRlcnByZXRlci9T
aGFkb3dDaGlja2VuLmNwcAogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAogCiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAoraml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKIGppdC9CYXNlbGluZUpJ
VFBsYW4uY3BwCiBqaXQvQmluYXJ5U3dpdGNoLmNwcAogaml0L0NDYWxsSGVscGVycy5jcHAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtOTAwLDYgKzkwMCw3IEBACiAJCTUyQ0QwRjVEMjI0MkY1Njkw
MDRBMThBNSAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3Vu
ZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKIAkJNTJDRDBGNUUyMjQyRjU2OTAwNEExOEE1IC8qIEph
dmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjY4MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZn
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0Qw
RjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLzsgfTsKKwkJNTJERDAwMDgyNkUw
MzlCOTAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2Vs
aW5lSklUQ29kZS5oICovOyB9OwogCQk1MkVFRDc5NDI0OTJCODcwMDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUyRUVENzkzMjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovOyB9
OwogCQk1MkY2QzM1RTFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZD
MzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyB9
OwogCQk1MzBBNjZCOTFGQTNFNzhCMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCMTFGQTNF
NzdBMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gKi87IH07CkBAIC0xNDE2LDEwICsx
NDE3LDEwIEBACiAJCUEzOENBNTlFMjZERDg0REUwMEM4RDg0QyAvKiBJU084NjAxLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzhDQTU5QzI2REQ4NERF
MDBDOEQ4NEMgLyogSVNPODYwMS5oICovOyB9OwogCQlBMzhEMjUwRTI1ODAwRDQ0MDA0MkJGREQg
LyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzOEQyNTBEMjU4MDBENDMwMDQyQkZERCAvKiBKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlSW5saW5lcy5oICovOyB9OwogCQlBMzhENUJGQzI2NjZEM0RBMDBB
MTA5QTYgLyogSW5CeVN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTM4RDVCRkEyNjY2RDNEQTAwQTEwOUE2IC8qIEluQnlTdGF0dXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBM0VFODU0MzI2
MjUxNEIwMDBGQzlCOEQgLyogSW50bFdvcmthcm91bmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTM3NjE5NDAyNjI1MTI3QzAwQ0JDQkE5IC8qIElu
dGxXb3JrYXJvdW5kLmNwcCAqLzsgfTsKIAkJQTNDN0VEQjYyNkIwREIzODAwNEMzNEM1IC8qIFRl
bXBvcmFsRHVyYXRpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEEzQzdFREIwMjZCMERCMzYwMDRDMzRDNSAvKiBUZW1wb3JhbER1cmF0
aW9uUHJvdG90eXBlLmggKi87IH07CiAJCUEzQzdFREI5MjZCMERCMzgwMDRDMzRDNSAvKiBUZW1w
b3JhbER1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBM0M3RURCMzI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbi5oICovOyB9
OwogCQlBM0M3RURCQTI2QjBEQjM4MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBM0M3
RURCNDI2QjBEQjM3MDA0QzM0QzUgLyogVGVtcG9yYWxEdXJhdGlvbkNvbnN0cnVjdG9yLmggKi87
IH07CisJCUEzRUU4NTQzMjYyNTE0QjAwMEZDOUI4RCAvKiBJbnRsV29ya2Fyb3VuZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMzc2MTk0MDI2MjUx
MjdDMDBDQkNCQTkgLyogSW50bFdvcmthcm91bmQuY3BwICovOyB9OwogCQlBM0ZGOUJDNzIyMzQ3
NDkxMDBCMUE5QUIgLyogWWFyckZsYWdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBM0ZGOUJDNTIyMzQ3NDY2MDBCMUE5QUIgLyogWWFyckZsYWdzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTUwM0ZB
MUExODhFMEZCMDAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MDNGQTE0MTg4RTBGQUYwMDExMEYx
NCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggKi87IH07CiAJCUE1MDNGQTFFMTg4RTBGQjAwMDEx
MEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MDNGQTE4MTg4RTBGQjAwMDExMEYxNCAv
KiBKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaCAqLzsgfTsKQEAgLTM2NjcsNiArMzY2
OCw4IEBACiAJCTUyQ0QwRjY0MjI0MkY1NjkwMDRBMThBNSAvKiB0ZXN0ZGZnICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4
ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0ZGZnOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyog
dGVzdGRmZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0ZGZn
LmNwcDsgcGF0aCA9IGRmZy90ZXN0ZGZnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTJEMTMwOEYyMjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuamF2YXNjcmlwdDsgcGF0aCA9IGZvby5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBCYXNlbGluZUpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTJERDAwMDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBCYXNlbGluZUpJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MkVFRDc5MjI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xp
c3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNTYsNiArNjI1
OSw4IEBACiAJCQkJNkI3NjdFN0EyNjc5MUYyNzAwMTdGOEQxIC8qIEFzc2VtYmx5SGVscGVyc1Nw
b29sZXJzLmggKi8sCiAJCQkJNzIzOTk4RjYyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklU
UGxhbi5jcHAgKi8sCiAJCQkJNzIzOTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklU
UGxhbi5oICovLAorCQkJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENv
ZGUuY3BwICovLAorCQkJCTUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENv
ZGUuaCAqLywKIAkJCQkwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNw
cCAqLywKIAkJCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi8s
CiAJCQkJNjVCODM5MkQxQkFDQTlEMzAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmNwcCAqLywK
QEAgLTk2OTYsNiArOTcwMSw3IEBACiAJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1OTUwIC8qIERG
R0Zsb3dNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAv
KiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3
M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJERDAwMDgyNkUw
MzlCOTAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
REQ4MTUxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjY5Q0M4OTE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERGODIwMDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5m
by5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXN0LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpc3QucmIJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5
ICsyOTAsMTAgQEAgb3BfZ3JvdXAgOlByb2ZpbGVkQmluYXJ5T3AsCiAgICAgICAgIGxoczogVmly
dHVhbFJlZ2lzdGVyLAogICAgICAgICByaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3Bl
cmFuZFR5cGVzOiBPcGVyYW5kVHlwZXMsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQK
ICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJp
dGhQcm9maWxlCisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAg
ICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTEsOSArMzUyLDEw
IEBAIG9wX2dyb3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgIF0sCiAgICAgYXJnczog
ewogICAgICAgICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvZmlsZUluZGV4
OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmls
ZTogVW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJv
ZmlsZS4qCiAgICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg0LDkgKzM4NiwxMCBAQCBvcCA6
bmVnYXRlLAogICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZDog
VmlydHVhbFJlZ2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLAorICAgICAg
ICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAg
ICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAgYXJpdGhQcm9maWxl
OiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFu
ZHNGb3JDaGVja3BvaW50LmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Myw2ICs3MywyOCBAQCBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckltcGwo
Qnl0ZWNvCiAgICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9maWxlOwogfQogCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yKHVu
c2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURfUEFSQU0oY2hlY2twb2ludElu
ZGV4KTsKKyAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRv
cl9vcGVuKSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNh
c2UgT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mSXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46
OmdldE5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFByb2ZpbGUo
KTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9w
X2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAg
ICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJldHVybiBCeXRlY29kZTo6
TWV0YWRhdGE6Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0
ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZE
b25lUHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1ZTogcmV0
dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2ZpbGUoKTsKKyAgICAgICAg
ZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSAKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxl
KCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1Zh
bHVlUHJvZmlsZUZvcihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2tw
b2ludEluZGV4KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEg
KzExNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0Vf
QVNTRVJUKCFpc09uTGlzdCgpKTsKIH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19
Ci0KIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xv
d1BhdGhTdGFydCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjI1
LDYgKzIyMCwxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0TWF4QXJndW1lbnRDb3VudEluCiAg
ICAgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZhbHVlOwogfQogCitDb2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQo
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkgJiYgaXNUYWlsQ2FsbCgpKTsKKyAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KHUuY29k
ZUlDLm1fZmFzdFBhdGhTdGFydCk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNpdFdlYWso
Vk0mIHZtKQogewogICAgIGF1dG8gaGFuZGxlU3BlY2lmaWNDYWxsZWUgPSBbJl0gKEpTRnVuY3Rp
b24qIGNhbGxlZSkgewpAQCAtMjk4LDIzICsyOTksMTEgQEAgdm9pZCBDYWxsTGlua0luZm86OnNl
dEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQo
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQ
YXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKLSAgICBp
ZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIg
IT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwotICAgICAgICB1LmRhdGFJ
Qy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAgICB9Ci0KLSAgICBhdXRv
IGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKLSAgICB9
KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKLSAgICBpZiAoaXNE
YXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlDOjpZZXMpIHsKICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7CiAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9m
Q2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBnb1Bv
bHltb3JwaGljOwpAQCAtMzIzLDcgKzMxMiw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBD
YWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMgPSBqaXQuYnJhbmNoVGVz
dFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwg
Y2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAg
ICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7
CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8vIFBvbHltb3JwaGljIHN0
dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAgICAgIGppdC5mYXJKdW1w
KENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mTW9ub21vcnBo
aWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAtMzM2LDE0ICszMjUsMTYg
QEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICBzbG93
UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFs
LCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVs
bHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKLSAgICAgICAgaWYg
KGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAg
cHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJUYWlsQ2Fs
bCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhckNhbGwoKTsK
KworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwogICAgICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICB1LmNv
ZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50
ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsZWVMb2NhdGlv
biA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxsZWVDaGVjayk7
CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CisgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOwogICAgICAgICB9
KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzQ0LDM0IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjpl
bWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBj
YWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxs
ZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRyKTsKKyAgICBzZXRVc2Vz
RGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7Cisg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExp
bmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlu
a0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywgaml0
LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBpc1RhaWxDYWxsKCksIG51
bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0
VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxs
TGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
Y2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBXVEZNb3Zl
KHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8p
OworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBJbnZh
bGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdURk1vdmUocHJlcGFyZUZv
clRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwg
R1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0lu
Zm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVs
bHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIGZh
bHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5m
bzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBw
cmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BS
ICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIs
IGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCB0cnVlLCBX
VEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1p
dFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0zNjksMTcgKzM4MSwzMCBA
QCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgCiAgICAgaml0LmNhbGwo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9pZCBDYWxsTGlua0luZm86
OmVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5mbzo6cmVn
VDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwg
b2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7Cit9CisK
K3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2bSwgVW5saW5rZWRDYWxs
TGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5r
ZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgc2V0VXBDYWxsKHVubGlua2VkQ2Fs
bExpbmtJbmZvLmNhbGxUeXBlLCBjYWxsZWVHUFIpOworICAgIG1fZG9uZUxvY2F0aW9uID0gdW5s
aW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtlZENhbGxMaW5r
SW5mby5mcmFtZVNodWZmbGVEYXRhKQorICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBtYWtl
VW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigqdW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVT
aHVmZmxlRGF0YSk7IC8vIE9PUFM6IHRpbWUgZm9yIHJlZiBjb3VudGluZz8KKyAgICBzZXRVc2Vz
RGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIg
PSBjYWxsTGlua0luZm9HUFI7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNF
bnRyeVB0clRhZz4oKSk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwo
KSk7CiAKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKIAotICAgIGF1dG8gZmFz
dFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwot
CiAgICAgYXV0byBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2Nh
dGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNh
bGwpOwpAQCAtMzk3LDcgKzQyMiw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFp
bENhbGxGYXMKIAogICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9m
YXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZh
c3RQYXRoU3RhcnQpOworICAgICAgICB1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CiAgICAgfSk7
CiAKICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEganVtcCB0byB0
aGUgc2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0MywxMSBA
QCBjbGFzcyBKU0Z1bmN0aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogc3RydWN0IENh
bGxGcmFtZVNodWZmbGVEYXRhOwogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87CisKIGNs
YXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJ
bmZvPiB7CiBwdWJsaWM6Ci0gICAgZW51bSBDYWxsVHlwZSB7CisgICAgZW51bSBDYWxsVHlwZSA6
IHVpbnQ4X3QgewogICAgICAgICBOb25lLAogICAgICAgICBDYWxsLAogICAgICAgICBDYWxsVmFy
YXJncywKQEAgLTE2NSw2ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGVlR1BSID0g
Y2FsbGVlR1BSOwogICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIFVubGlu
a2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQ
Uik7CisKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVHUFI7
IH0KICAgICAKICAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgewpAQCAtMTczLDEz
ICsxNzcsMTYgQEAgcHVibGljOgogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxl
ZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyos
IENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIs
IFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFy
ZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CisgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwg
R1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVTRURfUkVU
VVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0
YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FS
Tl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQ
UiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBX
QVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJik7CiAgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2b2lkIGVt
aXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOworICAgIHN0YXRpYyB2b2lkIGVtaXREYXRh
SUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwog
ICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURhdGFJ
Qzo6WWVzOyB9CkBAIC0yMDMsNyArMjEwLDYgQEAgcHVibGljOgogICAgICAgICBtX2FsbG93U3R1
YnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gc2xvd1BhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IGRvbmVMb2NhdGlvbigpOwogCkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9zbG93U3R1YiA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgSklUU3R1YlJvdXRpbmUq
IHNsb3dTdHViKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Nsb3dTdHViLmdldCgpOwotICAg
IH0KLQogICAgIGJvb2wgc2Vlbk9uY2UoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faGFzU2Vl
blNob3VsZFJlcGF0Y2g7CkBAIC0zMDgsOSArMzA5LDkgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUpOwogICAgIH0KIAotICAgIHVpbnQz
Ml90KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAg
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpOwogICAgIH0KIAogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkKQEAgLTM4MSw3ICszODIsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2
YXRlOgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhT
dGFydDsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRo
U3RhcnQoKTsKKwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9u
ZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Ns
b3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC0zOTcsNiAr
NDAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50
ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247CiAgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoU3RhcnQ7Cisg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRo
U3RhcnQ7CiAgICAgICAgIH0gY29kZUlDOwogICAgIH0gdTsKIApAQCAtNDI0LDYgKzQyOCwxMyBA
QCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpCiAgICAgcmV0dXJuIGNh
bGxMaW5rSW5mby5jb2RlT3JpZ2luKCk7CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5m
byB7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHksIG9ubHkg
dXNlZCBieSBiYXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBDb2RlT3Jp
Z2luLgorICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307CisKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODE4NjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzcwLDcgKzM3MCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3Ry
dWN0dXJlKiAKIC8vIHdlIGNhbid0IGdlbmVyYXRlIGR1cmluZyB1bmxpbmtlZCBieXRlY29kZSBn
ZW5lcmF0aW9uLiBUaGlzIHByb2Nlc3MgaXMgbm90IGFsbG93ZWQgdG8gZ2VuZXJhdGUgY29udHJv
bAogLy8gZmxvdyBvciBpbnRyb2R1Y2UgbmV3IGxvY2Fscy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBp
cyB3ZSByZWx5IG9uIGxpdmVuZXNzIGFuYWx5c2lzIHRvIGJlIHRoZSBzYW1lIGZvcgogLy8gYWxs
IHRoZSBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLiBXZSByZWx5IG9uIHRoaXMg
ZmFjdCBieSBjYWNoaW5nIHRoZSBsaXZlbmVzcyBhbmFseXNpcwotLy8gaW5zaWRlIFVubGlua2Vk
Q29kZUJsb2NrLgorLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLiBBbHNvLCBCYXNlbGluZSBK
SVQgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENv
ZGVCbG9jaywKKy8vIHNvIHRoZSBieXRlY29kZSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBiZXR3ZWVu
IENvZGVCbG9ja3Mgc2hhcmluZyBhbiBVbmxpbmtlZENvZGVCbG9jay4KIGJvb2wgQ29kZUJsb2Nr
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAogICAgIEpTU2NvcGUqIHNj
b3BlKQogewpAQCAtNDY2LDYgKzQ2NywxOSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCisjZGVmaW5lIExJTktfV0lU
SF9CSU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAg
ICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRo
UHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1f
cHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19X
SVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAg
ICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0
aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1f
cHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAg
IGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAg
ICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTI4
LDE0ICs1NDIsMTQgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwog
ICAgICAgICBMSU5LKE9wQ3JlYXRlUHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVy
YXRvcikKIAotICAgICAgICBMSU5LKE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAg
ICBMSU5LKE9wRGl2KQotICAgICAgICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdh
dGUpCi0gICAgICAgIExJTksoT3BJbmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJ
TktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJ
TkFSWV9BUklUSF9QUk9GSUxFKE9wTXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRI
X1BST0ZJTEUoT3BEaXYpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShP
cFN1YikKKworICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkK
KyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJ
TktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVx
UHRyKQogCkBAIC03ODksNiArODAzLDc0IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlv
bkNvbW1vbihWTSYKICAgICBtX293bmVyRWRnZS5zZXQodm0sIHRoaXMsIEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2U6OmNyZWF0ZSh2bSwgdGhpcykpOwogfQogCit2b2lkIENvZGVCbG9jazo6c2V0
dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkK
K3sKKyAgICBzZXRKSVRDb2RlKGppdENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAg
Y29uc3QgYXV0byYgaml0Q29kZU1hcCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgewor
ICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOwor
ICAgICAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAg
ICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleCho
YW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICAgICAgYXV0byYgaml0RGF0YSA9IGVuc3VyZUpJVERhdGEobG9ja2VyKTsK
KworICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXREYXRhLm1faml0Q29uc3RhbnRQb29sLmlzRW1w
dHkoKSk7CisgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rvcjx2
b2lkKj4oaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgYXV0byBlbnRyeSA9IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOworICAg
ICAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0OgorICAgICAgICAgICAgICAgIGppdERhdGEubV9q
aXRDb25zdGFudFBvb2xbaV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlu
a0luZm86IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRD
YWxsTGlua0luZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRDYWxsTGlua0luZm8qPihlbnRyeS5w
YXlsb2FkKTsKKyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGpp
dERhdGEubV9jYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZv
LmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBkb24ndCBoYXJkY29k
ZSB0aGVzZSByZWdpc3RlcnMgbGlrZSB0aGlzLgorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+aW5pdGlhbGl6ZURhdGFJQyh2bSgpLCB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6
cmVnVDAsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gY2FsbExpbmtJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvOiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byYgdW5saW5rZWRTdHViSW5mbyA9ICpzdGF0aWNfY2FzdDxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKj4oZW50cnkucGF5bG9hZCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gaml0RGF0YS5tX3N0dWJJbmZvcy5hZGQodW5saW5rZWRTdHViSW5mby5hY2Nl
c3NUeXBlLCBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCkpOworICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8odGhpcywgdW5saW5rZWRTdHViSW5mbyk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5t
X2ppdENvbnN0YW50UG9vbFtpXSA9IHN0dWJJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1
bmN0aW9uRGVjbDogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZCk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5t
X2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9uRGVjbChpbmRleCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6RnVuY3Rpb25FeHByOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAgICAgICAg
ICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25FeHByKGluZGV4KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFs
Q29kZToKKyAgICBjYXNlIE1vZHVsZUNvZGU6CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAg
bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGdW5jdGlvbkNvZGU6CisgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQg
dG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAg
ICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KKyAgICAgICAgbV9zaG91bGRB
bHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCgpKSAmJiBERkc6Om1p
Z2h0SW5saW5lRnVuY3Rpb24odGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogQ29k
ZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTMwNzksNyAr
MzE2MSw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lm
IEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0
dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzI5NSwxMyArMzM3
NywxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAg
c3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAg
IHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwor
ICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9m
aWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERp
dj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC0zMzEzLDExICszMzk1LDExIEBAIFVuYXJ5QXJpdGhQcm9maWxl
KiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7
CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigp
Lm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9w
TmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5j
OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5t
X2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8
T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBw
Yy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgorI2luY2x1ZGUg
IkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNp
bmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCkBAIC0x
NTgsNyArMTU5LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUo
KSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1Q
YXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgog
ICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAK
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1f
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE3MCw2IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAg
dW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVj
a3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRy
ZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBh
bHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0
ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzNCw2IEBAIHB1YmxpYzoKICAgICBib29s
IGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxs
Vk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1
YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5n
IGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBg
dGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAgICBy
ZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2
Niw4ICsyNTgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNN
YXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3ZlIGFy
aXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLCBhbmQgb250byBKSVRD
b2RlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
CiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgICAgIEJh
ZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CkBAIC0yODIsOSArMjc2LDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFw
OwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAg
ICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAg
SklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1f
aml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29u
c3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3Rh
bnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVD
b2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElL
RUxZKG1faml0RGF0YSkpCkBAIC0yOTMsNiArMjkxLDggQEAgcHVibGljOgogICAgIH0KICAgICBK
SVREYXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVREYXRhKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9qaXREYXRhKTsgfQorCiAgICAgSklUQWRkSUMqIGFkZEpJVEFk
ZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwogICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5h
cnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFBy
b2ZpbGUqKTsKQEAgLTMyMiwxNSArMzIyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBsb29raW5nIGZv
ciBhIENhbGxMaW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMu
CiAgICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVj
b2RlSW5kZXgpOwogICAgIAotICAgIHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFwJiYgaml0
Q29kZU1hcCkKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
KTsKLSAgICAgICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcCA9IFdURk1vdmUo
aml0Q29kZU1hcCk7Ci0gICAgfQogICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKQog
ICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAg
ICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcDsKKyAgICAgICAgQVNT
RVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVN
YXA7CiAgICAgfQogCiAgICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9w
dHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOwpAQCAtNDcyLDYgKzQ2Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1
bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBB
U1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01NzIsNiAr
NTY4LDcgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3Jl
Zy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oaW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNv
bnN0YW50c1ZlY3RvckJ1ZmZlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fY29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRh
dGFNZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRl
Y2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAg
ICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5z
aXplKCk7IH0KQEAgLTYwMSw2ICs1OTgsMTYgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX2ppdERhdGEpOwogICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07CiAgICAgfQorICAgIFNpbXBsZUp1bXBUYWJsZSYgYmFzZWxpbmVT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKKyAgICB9CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFudFBvb2wo
KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhICYmIGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1faml0
Q29uc3RhbnRQb29sLmRhdGEoKTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZV
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkg
eyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOyB9CkBAIC02MTEsNiArNjE4LDExIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobV9qaXREYXRhKTsKICAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIH0KKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2Vs
aW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90
IG51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4g
bV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7
IH0KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNzk3LDYgKzgwOSw3
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0
dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRy
ZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVha3BvaW50
KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQodW5z
aWduZWQgbnVtQnJlYWtwb2ludHMpCkBAIC04MzgsNiArODUxLDcgQEAgcHVibGljOgogICAgIG11
dGFibGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxkQWx3YXlz
QmVJbmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMgdG8gc3Rv
cmUgdG8gaXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5s
aW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxkQWx3YXlz
QmVJbmxpbmVkKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2NhcGFiaWxp
dHlMZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNiwxMSArOTIw
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0YVRhYmxl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7IH0KICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcik7
IH0KIAotICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4o
KQotICAgIHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlz
IGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3VubGlua2Vk
Q29kZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGludHNBcmVF
bGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5s
b29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHByb3RlY3Rl
ZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKQEAgLTEwMDgsNyArMTAx
OCw5IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlV2F0Y2hwb2ludE1hcCBtX2xsaW50R2V0QnlJ
ZFdhdGNocG9pbnRNYXA7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZTsKICNpZiBFTkFC
TEUoSklUKQorcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVREYXRhPiBtX2ppdERhdGE7
Citwcml2YXRlOgogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gVGhpcyBpcyBy
ZWxldmFudCB0byBub24tREZHIGNvZGUgYmxvY2tzIHRoYXQgc2VydmUgYXMgdGhlIHByb2ZpbGVk
IGNvZGUgYmxvY2sKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjgxODY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwog
ICAgIAogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwQW5kQWN0aXZh
dGUoQ29kZUJsb2NrKiBjb2RlQmxvY2spOworCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlLCBtX2NvZGVCbG9jayk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNiArNTAsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFk
YXRhCiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggewogICAgIEFycmF5
UHJvZmlsZSBhcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5
UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhQXJy
YXlMZW5ndGgsIGFycmF5UHJvZmlsZSk7IH0KIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRC
eUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsKIApAQCAtODgsNiArODksNyBAQCB1
bmlvbiBHZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUgbW9kZTsKICAg
ICAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBtdXN0IGJlIHpl
cm8gd2hlbiB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1l
dGFkYXRhLCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0IGRlZmF1bHRN
b2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAgICAgR2V0QnlJ
ZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9kZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAy
ODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYgKzM4NSw4IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpn
ZW5lcmF0ZVNlbGZJbkFjY2VzcygKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAor
Ly8gT09QUzogTWFrZSB0aGlzIHN0dWZmIHdvcmsgd2l0aCBkYXRhIGljcyB0byBub3QgYXNzdW1l
IGlubGluZSBhY2Nlc3MuCisKIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5B
Y2Nlc3NOb3RVc2luZ0lubGluZUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4gdGFyZ2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CkBAIC00MDQs
OSArNDA2LDEyIEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKIHZv
aWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IHRhcmdldCkKIHsKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRh
SUMoKSkgeworICAgICAgICAvLyBPT1BTOiBtYWtlIHNvbWUgdmVyc2lvbiBvZiBJbmxpbmVBY2Nl
c3MgZm9yIGJhc2VsaW5lLiBQZXJoYXBzIG1ha2UgaXQgZGF0YSBkcml2ZW4uIE9yIHBlcmhhcHMg
aGF2ZSB0aGUgY29kZQorICAgICAgICAvLyBiZSBzaGFyZWQgc29tZWhvdyBiZXR3ZWVuIFVubGlu
a2VkQ29kZUJsb2Nrcy4KKwogICAgICAgICAvLyBJZiBpdCBpcyBub3QgR2V0QnlJZC1saWtlLXRo
aW5nLCB3ZSBkbyBub3QgZW1pdCBub3Agc2xlZCAoZS5nLiBHZXRCeVZhbCkuCiAgICAgICAgIC8v
IFRoZSBjb2RlIGlzIGFscmVhZHkgYW4gaW5kaXJlY3QganVtcCwgYW5kIG9ubHkgdGhpbmcgd2Ug
c2hvdWxkIGRvIGlzIHJlcGxhY2luZyBtX2NvZGVQdHIuCi0gICAgICAgIGlmIChzdHViSW5mby5o
YXNDb25zdGFudElkZW50aWZpZXIpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgp
ICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmll
cikgewogICAgICAgICAgICAgLy8gSWYgbV9jb2RlUHRyIGlzIHBvaW50aW5nIHRvIHN0dWJJbmZv
LnNsb3dQYXRoU3RhcnRMb2NhdGlvbiwgdGhpcyBtZWFucyB0aGF0IElubGluZUFjY2VzcyBjb2Rl
IGlzIG5vdCBhIHN0dWIgb25lLgogICAgICAgICAgICAgLy8gV2UgcmV3cml0ZSB0aGlzIHdpdGgg
dGhlIHN0dWItYmFzZWQgZGlzcGF0Y2hpbmcgY29kZSBvbmNlLCBhbmQgY29udGludWUgdXNpbmcg
aXQgdW50aWwgd2UgcmVzZXQgdGhlIGNvZGUuCiAgICAgICAgICAgICBpZiAoc3R1YkluZm8ubV9j
b2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0gc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpIHsKQEAgLTQyMSw2ICs0MjYsNyBAQCB2b2lkIElubGlu
ZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxp
bmVBY2Nlc3M6IGxpbmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
KwogICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9k
ZU1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDYgKzQwLDcgQEAgT1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9SX0VOVU1f
Q0xBUwogCiBzdHJ1Y3QgSXRlcmF0aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90IHNlZW5N
b2RlcyB7IDAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVzKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1vZGVzKTsg
fSAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9PSBzaXpl
b2YoSXRlcmF0aW9uTW9kZSkpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MTg2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBBcnJheVBy
b2ZpbGUgbV9hcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5
UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9h
cnJheVByb2ZpbGUpOyB9CiAKIHByaXZhdGU6CiAgICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0
U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQgfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2
aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUg
IlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
UG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTI4NSw2ICsy
ODYsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgICAg
IHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OlB1dFByaXZhdGVOYW1lOgogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMs
IFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6
OkluQnlJZDoKQEAgLTQzMCw2ICs0MzIsMjA0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6c2UKICAgICBtX2NhY2hlVHlwZSA9IG5ld0NhY2hlVHlwZTsKIH0KIAordm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKENvZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1Yklu
Zm8pCit7CisgICAgYWNjZXNzVHlwZSA9IHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZTsKKyAg
ICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8uc3RhcnQ7IC8vIE9PUFM6IGRvIHdlIG5lZWQgYSBz
dGFydCBmb3IgZGF0YSBJQ3M/CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5k
b25lTG9jYXRpb247CisgICAgc2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5rZWRTdHViSW5m
by5zbG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KTsKKyAgICBjb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2Rl
SW5kZXgpOworICAgIG1fY29kZVB0ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKworICAgIHVz
ZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Cisg
ICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxpbmtlZFN0dWJJ
bmZvLmJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZvciBpdGVyYXRv
cl9uZXh0LCB3ZSBjYW4ndCBjbG9iYmVyIHRoZSBzY3JhdGNoIHJlZ2lzdGVyIGVpdGhlci4KKyAg
ICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNo
KTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxl
dGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRl
bGV0ZUJ5SUQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
SW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0
QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6IAorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIHN3
aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNT
dHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAg
aWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVs
ZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpQdXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsK
KyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5r
ZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtp
bmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlz
U3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9w
dGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlv
blB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpEZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7Cisg
ICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAg
ICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAg
ICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJh
c2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9
IEludmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okdl
dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmll
ciA9IGZhbHNlOworICAgICAgICBwcm90b3R5cGVJc0tub3duT2JqZWN0ID0gZmFsc2U7CisgICAg
ICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgICAg
ICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87
CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxz
ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAg
ICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0g
SW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
OjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpHZXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAg
ICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVy
czo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lz
dGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmll
ciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAg
IGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5m
b0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQ
dXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7Cisg
ICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAg
ICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7Cisg
ICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6UHV0QnlWYWwpCisgICAg
ICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnBy
b2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJy
YW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICB2YWx1ZUdQUiA9IEludmFsaWRH
UFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0
ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiAjaWYgQVNT
RVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmNoZWNrQ29uc2lzdGVuY3koKQog
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ci5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVk
ZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmVTZXQuaCIKQEAgLTU2LDYgKzU3LDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50
OF90IHsKICAgICBHZXRCeVZhbCwKICAgICBQdXRCeUlkLAogICAgIFB1dEJ5VmFsLAorICAgIFB1
dFByaXZhdGVOYW1lLAogICAgIEluQnlJZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVO
YW1lLApAQCAtNzgsNiArODAsOCBAQCBlbnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CiAg
ICAgU3RyaW5nTGVuZ3RoCiB9OwogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsK
KwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0
cnVjdHVyZVN0dWJJbmZvKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTk4LDYg
KzEwMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGll
KCk7CiAKKyAgICB2b2lkIGluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhD
b2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJik7CisKICAgICBERUNMQVJFX1ZJ
U0lUX0FHR1JFR0FURTsKIAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVy
ZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLApA
QCAtNDQ3LDYgKzQ1MywxOCBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlk
RnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7CisgICAg
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQcml2YXRl
RmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRLaW5kOjpu
b25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpzbG9wcHkoKSB9Owor
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAvLyBPT1BTOiBEbyB3ZSBuZWVk
IHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5l
IElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBm
b3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0
cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTYsNCArMzE2LDE2IEBAIGludCBVbmxpbmtlZENvZGVCbG9jazo6b3V0T2ZM
aW5lSnVtcE9mZnMKICAgICByZXR1cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5nZXQoYnl0ZWNv
ZGVPZmZzZXQpOwogfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKK2Jvb2wgVW5saW5rZWRDb2RlQmxv
Y2s6Omhhc0lkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICAvLyBPT1BT
OiBkbyB3aGF0IENvZGVCbG9jayBkb2VzIGFuZCBtYWtlIGEgaGFzaCB0YWJsZT8KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZJZGVudGlmaWVycygpOyArK2kpIHsKKyAgICAg
ICAgaWYgKGlkZW50aWZpZXIoaSkuaW1wbCgpID09IHVpZCkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYg
KzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNp
bmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNp
bmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgpAQCAtNjIsNiArNjMsNyBAQCBjbGFzcyBVbmxpbmtl
ZENvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOwogY2xhc3MgVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogc3RydWN0IEV4ZWN1dGFibGVJbmZvOwogZW51bSBj
bGFzcyBMaW5rVGltZUNvbnN0YW50IDogaW50MzJfdDsKIApAQCAtMTc1LDYgKzE3Nyw3IEBAIHB1
YmxpYzoKIAogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNv
bnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIGNv
bnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9D
b25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50
KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNb
cmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKQEAg
LTIwNyw2ICsyMTAsMTUgQEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRN
b2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3Nj
cmlwdE1vZGUpOyB9CiAKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25z
KCkgY29uc3Q7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uQXQoQnl0ZWNvZGVJ
bmRleCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5kZXgpLnB0cigp
OyB9CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uKQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBp
bnN0cnVjdGlvbnMoKS5hdCgwKS5wdHIoKTsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rp
b25zRW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihpbnN0cnVjdGlvbnNCZWdpbikgKyBpbnN0cnVjdGlvbnMoKS5zaXpl
KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0cnVjdGlvbiA+PSBpbnN0cnVjdGlvbnNC
ZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGluc3RydWN0aW9uc0VuZCk7CisgICAgICAgIHJldHVybiBp
bnN0cnVjdGlvbiAtIGluc3RydWN0aW9uc0JlZ2luOworICAgIH0KKyAgICB1bnNpZ25lZCBpbnN0
cnVjdGlvbnNTaXplKCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyB9CiAK
ICAgICB1bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxl
ZUxvY2FsczsgfQogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZh
cnM7IH0KQEAgLTMzNCw2ICszNDYsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tZXRh
ZGF0YS0+c2l6ZUluQnl0ZXMoKTsKICAgICB9CiAKKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdp
YmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKKyAgICB7CisgICAgICAgIC8vIFNvbWUgYnVpbHRp
bnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCisg
ICAgICAgIHJldHVybiAhaXNCdWlsdGluRnVuY3Rpb24oKTsKKyAgICB9CisKKyNpZiBBU1NFUlRf
RU5BQkxFRAorICAgIGJvb2wgaGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOworI2Vu
ZGlmCiAKIHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSos
IENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlv
bk1vZGU+KTsKQEAgLTM5NCw2ICs0MTUsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGV4
aWNhbFNjb3BlRmVhdHVyZXMgOiA0OwogcHVibGljOgogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9s
b2NrOworICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1fdW5saW5rZWRCYXNlbGluZUNvZGU7
CiBwcml2YXRlOgogICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzIHsgMCB9OwogICAgIFNvdXJj
ZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKQEAgLTQxMCw2ICs0MzIsOSBAQCBwcml2YXRlOgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVjdGlvbnM7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzczsKIAor
ICAgIC8vIE9PUFM6IGJpbmQgYSBiZXR0ZXIgcGxhY2UgdG8gc3RvcmUgdGhpcyBzdHVmZj8KKyAg
ICBWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPiBtX2JpbmFyeUFyaXRoUHJvZmlsZXM7CisgICAg
VmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKIAogI2lmIEVO
QUJMRShERkdfSklUKQogICAgIERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKQEAgLTQ1
NSw2ICs0ODAsMjggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1
bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5l
SnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCisgICAgeworICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0
dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIH0KKworICAgIHVu
c2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX2JpbmFyeUFy
aXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3VuYXJ5QXJpdGhQcm9maWxlcy5zaXpl
KCk7CisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChVbmFyeUFyaXRoUHJvZmls
ZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUmIGJpbmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX2JpbmFyeUFy
aXRoUHJvZmlsZXNbaV07IH0KKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgdW5hcnlBcml0aFByb2Zp
bGUodW5zaWduZWQgaSkgeyByZXR1cm4gbV91bmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KIAogcHJp
dmF0ZToKICAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5zdHJ1Y3Rp
b25TdHJlYW06Ok9mZnNldCwgaW50PjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCShyZXZp
c2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBAQCBwdWJs
aWM6CiAgICAgYm9vbCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKTsgfQog
ICAgIGJvb2wgaGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aGFz
Q2hlY2twb2ludHMoKTsgfQogICAgIGJvb2wgaGFzVGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlQmxvY2stPmhhc1RhaWxDYWxscygpOyB9CisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJp
dGhQcm9maWxlKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgp
OyB9CisgICAgdW5zaWduZWQgYWRkVW5hcnlBcml0aFByb2ZpbGUoKSB7IHJldHVybiBtX2NvZGVC
bG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKTsgfQogCiAgICAgLy8gVXBkYXRpbmcgVW5saW5r
ZWRDb2RlQmxvY2suCiAgICAgdm9pZCBzZXRIYXNDaGVja3BvaW50cygpIHsgbV9jb2RlQmxvY2st
PnNldEhhc0NoZWNrcG9pbnRzKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9uIDI4MTg2
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTQgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUpOwogICAgIH0KIAorICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNldEluTWV0YWRh
dGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2lz
RmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9pczMyQml0
ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUxNigpW09w
Y29kZTo6b3Bjb2RlSURdOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2Yo
dHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0K
KwogcHJpdmF0ZToKICAgICBlbnVtIEVtcHR5VGFnIHsgRW1wdHkgfTsKIApAQCAtMTAxLDYgKzEw
OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzX29mZnNldDE2VGFibGVTaXplOwogICAg
IH0KIAorCiAgICAgdXNpbmcgT2Zmc2V0MzIgPSB1aW50MzJfdDsKICAgICB1c2luZyBPZmZzZXQx
NiA9IHVpbnQxNl90OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYg
QEAgdGVtcGxhdGU8dW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzQXJndW1lbgogc3RydWN0IFZhbHVl
UHJvZmlsZUJhc2UgewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNr
ZXRzID0gbnVtYmVyT2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBudW1iZXJPZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBidWNrZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tl
dHMgKyBudW1iZXJPZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNl
KCkKQEAgLTEzNCw3ICsxMzMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29k
ZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxh
dGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTU2LDYgKzE1NSw3IEBAIHN0
cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJv
ZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAg
ICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4o
KSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBz
dHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmls
ZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0VW5hcnkKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRo
aXMsIGRzdCwgc3JjLCB0eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBz
cmMsIHR5cGUsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90
Pihkc3QsIHNyYyk7CkBAIC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRJbmMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0Rz
dCk7CisgICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlB
cml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVj
OjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2Nv
ZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02ODIsNyArNjgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklE
Kj4KICAgICAgICAgZW1pdEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3Jj
MSwgUmVnaXN0ZXJJRCogc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAg
ICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1f
Y29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4g
ZHN0OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNiBAQCB2b2lkKiBw
cmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqCiAgICAgQVNTRVJUKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFTU0VSVChjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNTRVJUKCFjb2RlQmxv
Y2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdD
b21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIAogICAgIGlmICghT3B0aW9uczo6dXNlT1NSRW50cnlU
b0RGRygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDksMTAgKzMwOSwxNSBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0Nh
bGxIZWxwZXJzCiAgICAgICAgICAgICB0cnVlQ2FsbGVyID8gQXNzZW1ibHlIZWxwZXJzOjpVc2VF
eGlzdGluZ1RhZ1JlZ2lzdGVyQ29udGVudHMgOiBBc3NlbWJseUhlbHBlcnM6OkNvcHlCYXNlbGlu
ZUNhbGxlZVNhdmVkUmVnaXN0ZXJzRnJvbUJhc2VGcmFtZSwKICAgICAgICAgICAgIEdQUkluZm86
OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDQpOwogCisgICAgICAgIC8vIE9P
UFM6IENvbnNpZGVyIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIGJhc2VsaW5lIHBiL21l
dGFkYXRhIHJlZ2lzdGVycwogICAgICAgICBpZiAoY2FsbGVySXNMTEludCkgewogICAgICAgICAg
ICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNv
ZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0
YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJs
b2NrLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSk7CiAgICAgICAgICAgICBq
aXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxp
bmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUikp
OworICAgICAgICB9IGVsc2UgaWYgKHRydWVDYWxsZXIpIHsKKyAgICAgICAgICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3Io
KnRydWVDYWxsZXIpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKSwg
Y2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgSklUOjpz
X21ldGFkYXRhR1BSKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5iYXNlbGluZUpJVENvbnN0
YW50UG9vbCgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVC
bG9jaywgSklUOjpzX2NvbnN0YW50c0dQUikpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQpAQCAtNDA0LDYgKzQwOSw5IEBAIHZvaWQgYWRq
dXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdp
c3RlcnM6OnBjR1BSKTsKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2Vk
PE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2UgeworICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhp
dC0+bWV0YWRhdGFUYWJsZSgpKSwgSklUOjpzX21ldGFkYXRhR1BSKTsKKyAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPmJhc2VsaW5l
SklUQ29uc3RhbnRQb29sKCkpLCBKSVQ6OnNfY29uc3RhbnRzR1BSKTsKKwogICAgICAgICBjb2Rl
QmxvY2tGb3JFeGl0LT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwogCiAgICAgICAgIEJ5dGVj
b2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzAsNiAr
NzMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAg
ICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZVRh
Z0dQUiwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJl
c2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3Nl
ZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1l
dGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkg
KyAxKTsKQEAgLTg4OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlKiBub2RlCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBp
ZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWls
Q2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0gewogICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDUsNiArNzQ1LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZsZURh
dGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMp
OwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7
CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsK
KyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAgICAgRWRn
ZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CkBAIC04
OTYsNyArODk3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQog
ICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1Rh
aWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5z
ZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcgKzM5ODUsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJl
Z2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29k
ZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAor
ICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBj
YWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVzZWRSZWdpc3RlcnMsCiAgICAg
ICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwgSlNWYWx1ZVJlZ3M6OnBheWxv
YWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQ
Uik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogCkBAIC0x
NDc0Nyw3ICsxNDc0Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dD
aGkKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CiAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFk
b3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywg
bV9qaXQuY29kZUJsb2NrKCksIGNhbGxTaXRlSW5kZXgpOworICAgIG1faml0LmxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4
KTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzE3LDcgKzQzMTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgR1BSUmVnIHN0dWJJbmZv
R1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBwYXJhbXMuZ3BTY3Jh
dGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBC
b3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgaml0LmNv
ZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJ
bmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9j
aygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwg
QWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9H
UFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1i
b2wgPSB0cnVlOwpAQCAtMTAxOTEsNiArMTAxOTEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxsb2NhdGVk
QXJnczsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBl
bmQoVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSkpOwogICAgICAgICAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1
cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0
LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50aWNOb2RlT3JpZ2luKTsKQEAgLTEw
MzQ5LDEzICsxMDM1MCwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzaHVmZmxl
RGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgpKTsKIAog
ICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1BcmdzOworICAg
ICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCkt
Pm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKIAogICAg
ICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygp
LT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwog
Ci0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGgg
PSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAs
IFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxl
RGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgICAg
IH0pOwpAQCAtMTA2OTgsNyArMTA3MDAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAg
ICAgICAgICAgICAgICAgfSk7CkBAIC0xMDk3OSw3ICsxMDk4MSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWls
Q2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpy
ZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxs
U2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpAQCAt
NDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkKICAgICAg
ICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwg
ZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZp
ZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVzLm1hcCBkbyB8ZmllbGROYW1lfAorICAg
ICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5h
bWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisgICAgICAgICAgICBlbmQuam9pbigiXG4i
KQorICAgICAgICBlbmQKKworICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxk
cywgZmllbGROYW1lcykKICAgICAgICAgICAgIGZpZWxkcy5tYXAgZG8gfGZpZWxkLCB0eXBlfAog
ICAgICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAotICAgICAgICAgICAgICAgICAg
ICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlw
ZSl9XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtc
biN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUsIGZpZWxkTmFtZXMpfVxuI3tw
cmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAiI3tw
cmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAgICAgICAgICAg
IGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lcy5w
dXNoKGZpZWxkTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19z
fSBtXyN7ZmllbGROYW1lfTsiCiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmQu
am9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRz
KCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkTmFtZXMgPSBbXQorICAgICAgICBw
cmVmaXggPSAiICAgICAgICAiCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMocHJlZml4
LCBAZmllbGRzLCBmaWVsZE5hbWVzKQorICAgICAgICBmaWVsZHMgPSBmaWVsZHMgKyAiXG4iICsg
Z2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCiAKICAgICAgICAg
aW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAmJiAobm90IEBpbml0aWFsaXpl
cnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTgsOCArNjk4LDEzIEBA
IHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXMKIAogdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5m
byksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0
KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9i
YWxPYmplY3Qodm0sIGluZm8pOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1
YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIENhbGxMaW5rSW5mbyogaW5m
bykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAg
ICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtUYXNrKFs9LCAmdm1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lv
biAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzE4LDYgKzE3MTgsNyBAQCBwdWJsaWM6CiAgICAgfQogICAg
IAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlu
a0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmpl
Y3QoVk0mLCBDYWxsTGlua0luZm8qKTsKICAgICAKICAgICB2b2lkIG1ha2VTcGFjZU9uU3RhY2tG
b3JDQ2FsbCgpOwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
YXNlbGluZUpJVENvZGUuaCIKKworI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkp1
bXBUYWJsZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitKSVRBZGRJQyogTWF0aElDSG9sZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7
IH0KK0pJVE11bElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQor
SklUU3ViSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRO
ZWdJQyogTWF0aElDSG9sZGVyOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorCit2b2lkIE1h
dGhJQ0hvbGRlcjo6YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCit7CisgICAgbV9h
ZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICBtX211bElDcyA9IFdURk1vdmUo
b3RoZXIubV9tdWxJQ3MpOworICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7
CisgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKK30KKworQmFzZWxpbmVK
SVRDb2RlOjpCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgIDogRGlyZWN0SklUQ29kZShX
VEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAg
LCBNYXRoSUNIb2xkZXIoKQoreyB9CisKK0Jhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29k
ZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJKSVRD
b2RlLmgiCisjaW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy9j
bGFzcyBKSVRBZGRJQzsKKy8vY2xhc3MgSklUTXVsSUM7CisvL2NsYXNzIEpJVFN1YklDOworLy9j
bGFzcyBKSVROZWdJQzsKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVuYXJ5QXJp
dGhQcm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgU2lt
cGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3MgTWF0aElDSG9s
ZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVy
KTsKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAg
SklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1YklD
KiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklU
TmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworICAgIC8qCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklU
QWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFk
ZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0
b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRNdWxJQyogYWRkTWF0
aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVsSUMocHJv
ZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0
aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVl
Pjo6dHlwZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJv
ZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKyAgICAqLworCitwcml2YXRl
OgorICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBtX211bElD
czsKKyAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJ
Q3M7Cit9OworCitjbGFzcyBKSVRDb25zdGFudFBvb2wgeworcHVibGljOgorICAgIHVzaW5nIENv
bnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAg
ICAgICAgR2xvYmFsT2JqZWN0LAorICAgICAgICBDYWxsTGlua0luZm8sCisgICAgICAgIFN0cnVj
dHVyZVN0dWJJbmZvLAorICAgICAgICBGdW5jdGlvbkRlY2wsCisgICAgICAgIEZ1bmN0aW9uRXhw
ciwKKyAgICB9OworCisgICAgc3RydWN0IFZhbHVlIHsKKyAgICAgICAgLy8gT09QUzogTWFrZSB0
aGUgcG9pbnRlciBwYWNrZWQuCisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgdm9pZCogcGF5
bG9hZDsKKyAgICB9OworCisgICAgSklUQ29uc3RhbnRQb29sKCkgPSBkZWZhdWx0OworICAgIEpJ
VENvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworICAgIEpJVENvbnN0
YW50UG9vbCYgb3BlcmF0b3I9KEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBD
b25zdGFudCBhZGQoVHlwZSB0eXBlLCB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cikKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgbV9j
b25zdGFudHMuYXBwZW5kKFZhbHVlIHsgdHlwZSwgcGF5bG9hZCB9KTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRzLnNpemUoKTsgfQorICAgIFZhbHVlIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50c1tpXTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxWYWx1ZT4gbV9jb25zdGFu
dHM7Cit9OworCisKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2Rl
LCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29k
ZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0
eUNoZWNrKTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisKKyAgICBCYWc8VW5s
aW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICBCYWc8Q2FsbExpbmtJbmZv
PiBtX2V2YWxDYWxsTGlua0luZm9zOyAvLyBPT1BTOiBtYWtlIHN1cmUgd2UgdmlzaXQgdGhlc2Ug
c29tZWhvdy4gT3IgYXNzZXJ0IHdlIGRvbid0IGhhdmUgdG8sIHNpbmNlIHRoZXkncmUgdmlydHVh
bCBjYWxscy4KKyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0
dWJJbmZvczsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRh
YmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlczsKKyAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFudFBv
b2wgbV9jb25zdGFudFBvb2w7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4
MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpj
b2RlU2l6ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6Zmlu
YWxpemUoKQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXpl
T25NYWluVGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmlu
YWxpemVPbk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAg
ICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVCht
X2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNp
b24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9n
U2hhZG93Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFj
a2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0K
IAotdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQ
dHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0
cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IGNhbGxlZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tl
dCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwot
ICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cihjb2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZv
aWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVn
IHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIp
CiB7CiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4o
KTsKQEAgLTcyLDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlj
a2VuUGEKICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikp
OwogfQogCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhl
bHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0
LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVC
bG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUp
KSk7CisgICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVD
VF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9y
ZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNv
ZGVCbG9jaykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMo
KSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6
UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwo
c2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7
Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJS
ZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJS
ZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBj
b2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJ
VENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwg
U2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBk
ZXNjcmlwdGlvbikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAs
NyArODQwLDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxs
IHZvbGF0aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRo
ZSB0b3Agb2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2
b2lkIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBH
UFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BS
UmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNr
ZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVn
cywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2Nv
cGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgp
OworICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tl
dCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBw
b2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4K
ICAgICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFj
a2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEu
Y3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2
ZVJlZ2lzdGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVS
ZWdpc3RlcnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENh
bGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0
ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNl
dCBjYWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVy
cygpIH07Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0
aW9ucyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkp
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
ZmxlRGF0YS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMyBA
QCBwdWJsaWM6CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWduZWQg
bnVtTG9jYWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsgVUlO
VF9NQVggfTsKKyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8gT24g
b3VyIG1hY2hpbmUgZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1hcDxW
YWx1ZVJlY292ZXJ5PiByZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVyIHsg
SW52YWxpZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29k
ZUJsb2NrKik7CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0
ZXJBdE9mZnNldExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIu
Y3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENhbGxG
cmFtZVNodWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkKICAg
ICAsIG1fb2xkRnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5S
ZWdpc3RlcnMsIG51bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25l
ZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAgICAgICAr
IHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKSkpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnMgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5udW1Q
YXJhbWV0ZXJzKSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRl
clNpemVJblJlZ2lzdGVycwogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFt
ZShkYXRhLmFyZ3Muc2l6ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFt
ZVNpemUgLSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhS
ZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5u
dW1QYXNzZWRBcmdzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykK
IHsKICAgICAvLyBXZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAg
IGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAg
LTQyMSw3ICs0MjEsNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENh
CiAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9u
ZXdGcmFtZUJhc2UpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9
CiAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1f
bmV3RnJhbWVCYXNlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiht
X2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAgIG1faml0LmFkZDMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAt
IDEgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNlKTsK
ICAgICBtX2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdu
bWVudFJlZ2lzdGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVCYXNl
LCBtX25ld0ZyYW1lQmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlci5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsx
MDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAg
ICAgIGRhdGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2Vk
QXJncyA9IG1fbnVtUGFzc2VkQXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9u
dW1QYXJhbWV0ZXJzOwogICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0
ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEu
YXJncy5yZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXJnQ291bnQoKTsgKytpKQpAQCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBw
ZXJmb3JtU2FmZVdyaXRlcygpOwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7
IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJ
bnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51
bGxwdHIpCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJl
bHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAg
ICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6
SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFBy
b2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAg
IG1fcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9j
ayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAg
LTkwLDggKzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNr
aXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9u
czo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lw
T3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6
OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZl
c0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRv
cEVudHJ5RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMjEgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlX
cml0ZShXYXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFi
c29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRl
clRvU2V0KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50
ZXJUb1NldCkKIHsKKyAgICAvLyBPT1BTOiBUYWtlIGEgYm9vbGVhbiBvciBzb21ldGhpbmcgc2F5
aW5nIGlmIHdlIGNhbiBiZSBudWxsLgorICAgIGF1dG8gb2sgPSBicmFuY2hUZXN0UHRyKFplcm8s
IHBvaW50ZXJUb1NldCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVz
cyhwb2ludGVyVG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKK3ZvaWQgSklU
OjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVnIHNj
cmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT52YXJSZWFkT25seVdhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxW
YXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgewor
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhclJl
YWRPbmx5V2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0
YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9CiAKIHZvaWQg
SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQpAQCAtMTI5LDcgKzEzOCw3IEBAIHZvaWQg
SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3RlciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1Qw
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmso
dGhpcyk7CkBAIC0xODEsMjEgKzE5MCw0MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChj
b25zdCBJbnN0cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVt
aXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUsIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6
b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4
ZWN1dGFibGUgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVzdWx0LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rp
b246OnJhcmVEYXRhVGFnKSwgcmVzdWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7
CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVC
bG9ja0ZvckNvbnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JD
YWxsKCkpLCByZXN1bHQpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsK
K30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogewogICAgIGlmIChKSVRJ
bnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVC
bG9jaywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9wcm9maWxlZENv
ZGVCbG9jaywgIlxuIik7CiAgICAgCiAgICAgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICBq
aXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgpOwogICAgIAotICAgIGF1dG8mIGluc3RydWN0aW9u
cyA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlv
bkNvdW50ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBhdXRvJiBp
bnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKKyAgICB1
bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpOwogCiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAKLSAgICBWTSYg
dm0gPSBtX2NvZGVCbG9jay0+dm0oKTsKICAgICBCeXRlY29kZUluZGV4IHN0YXJ0Qnl0ZWNvZGVJ
bmRleCgwKTsKKworICAgIC8vIE9PUFM6IE1heWJlIG9ubHkgZG8gdGhpcyBpZiB3ZSBkaXNhYmxl
IHNoYXJpbmcgc29tZWhvdz8KKyAgICAvKgorICAgIFZNJiB2bSA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPnZtKCk7CiAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2Rl
QmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5o
ZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0pKSkgewogICAgICAgICAvLyBXZSBjYW4g
b25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVC
bG9jaydzIGV4YWN0bHkgb25jZS4KICAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQg
YmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQgd2FudHMg
dG8KQEAgLTIzNiw2ICsyNjUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgKi8KIAogICAgIG1fYnl0ZWNv
ZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291
bnQ7ICkgewpAQCAtMjc4LDggKzMwOCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVK
SVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9j
b2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0
eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxG
cmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsi
LCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBS
YXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgfQpAQCAtNTI3LDcgKzU1Nyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUlu
ZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKKyAg
ICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fdW5saW5rZWRD
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRh
TG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9yICIsIG1fYnl0ZWNvZGVJ
bmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CkBAIC01NDUsOCArNTc1
LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewogICAgICAg
ICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAg
ICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxv
Y2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQs
ICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0
eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpA
QCAtNjc0LDU1ICs3MDQsNTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkK
ICNlbmRpZgogfQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFu
dFBvb2xSZWdpc3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJ
VENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0Zv
cigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpOworfQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2
ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgLy8gT09QUzogTWF5YmUg
dGhpcyBzaG91bGQgYmUgZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJsb2NrPworICAgIERGRzo6Q2Fw
YWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVs
KCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgog
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFs
c2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2Ug
REZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1
ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1f
c2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7Ci0gICAg
Y2FzZSBHbG9iYWxDb2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToKLSAgICBjYXNlIEV2YWxDb2Rl
OgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAgIC8vIFdlIGNv
dWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1
bmlubGluZWFibGUgY2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZh
dGlvbi4KLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNh
bklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29kZUJsb2NrKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8
U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBU
YWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5n
SnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
d2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1f
c3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV91bmxpbmtl
ZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgICAg
IGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRW
ZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
ciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKQotICAgICAg
ICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX2NvZGVCbG9j
ayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3Zt
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZv
clByb2ZpbGVyKCkpKSkgeworICAgICAgICAvLyBPT1BTOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBv
ZmYgdW5saW5rZWQgY29kZSBibG9jaworICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlx
dWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICB9CiAgICAgaWYg
KFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpIHsKKyAgICAgICAgLy8gT09Q
UzogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiB1bmxpbmtlZCBjb2RlIGJsb2NrCiAg
ICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAgICAgICAgIG5ldyBQcm9maWxl
cjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAorICAgICAgICAgICAgICAgIG1f
dm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fcHJvZmlsZWRD
b2RlQmxvY2spLAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpCYXNlbGluZSkpOwotICAgICAg
ICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29k
ZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2Zp
bGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fcHJvZmlsZWRDb2Rl
QmxvY2spOwogICAgIH0KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBl
bmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwpAQCAtNzQyLDEx
ICs3NzMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAg
ICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgZW1pdFB1dFRv
Q2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwor
ICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkK
KyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKCk7CiAKICAgICBMYWJl
bCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAgaW50IGZy
YW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUgPSAtZnJhbWVU
b3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9mZnNldCksIGNhbGxG
cmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxvdzsKQEAgLTc1
NywxNiArNzg5LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4K
ICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0
U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3Rl
cnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVy
cygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkg
eworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQp
IHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAmJiAoIW1fdW5saW5rZWRDb2Rl
QmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIo
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSAr
IEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIpOwor
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAg
ICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQg
aW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBrZWVwIHRo
aW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhl
IGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1
Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1l
bnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArODEzLDEyIEBAIHZv
aWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAgICBs
b2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwog
ICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQg
KyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFn
R1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
X2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdz
KTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIs
IGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9m
Rmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgp
KSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQogICAgICAg
ICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwg
KnRoaXMpOwpAQCAtNzk5LDI0ICs4MzUsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0
aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAg
ICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhDYWxs
RnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9y
LCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBy
ZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2UgbmV2
ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1f
Y29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgeworICAgIGJv
b2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hlY2sg
PSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxvY2st
Pm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1
ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Q
cm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3Mo
cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkpOwogCiAg
ICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhiZWdp
bkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1
c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtUbyhi
ZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUlu
ZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAg
ICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29kZUJs
b2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3Bl
cmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVS
b2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/
IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywg
YXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFpl
cm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04MzksNyAr
ODc4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAg
ICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5p
cXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExp
bmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBtX2xpbmtCdWZm
ZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1f
dW5saW5rZWRDb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZv
cnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4OTcsOCBAQCB2b2lkIEpJVDo6bGlu
aygpCiAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAgICAgICAgY2FzZSBTd2l0Y2hS
ZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rlcjog
ewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0g
ICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2lt
cGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAg
ICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxK
U1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9m
ZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2VkVGFi
bGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEsOCAr
OTEwLDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTd2l0
Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlE
ZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9y
IChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMoKSkg
ewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNoT2Zm
c2V0OwpAQCAtOTA2LDMyICs5NDUsMzUgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAgICAg
cGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7CiAgICAgfQogCi0g
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5
VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VP
ZnMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0
byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsK
KyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAg
ICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFs
aXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMp
OworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlW
YWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2Rl
bEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6
ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRp
b25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAgICAgIENhbGxMaW5rSW5mbyYg
aW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAgICBpbmZvLnNldENv
ZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKLSAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRv
bmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21w
aWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGluZm8uZG9uZUxvY2F0
aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlv
bkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIEpJVENvZGVNYXBC
dWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVP
ZmZzZXQpIHsKLSAgICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQo
KSkKLSAgICAgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRl
eChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4o
bV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxv
Y2stPnNldEpJVENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKSk7CisgICAgSklU
Q29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVj
b2RlT2Zmc2V0KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQo
KSkKKyAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5
dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xh
YmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9u
czo6ZHVtcERpc2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk4MiwzNyBAQCB2b2lkIEpJVDo6
bGluaygpCiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7CisgICAg
ICAgIC8vIE9PUFM6IG1ha2UgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91dCB1bmxpbmtlZCBD
Qj8KICAgICAgICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigp
KQogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21waWxh
dGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CisgICAg
ICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9maWxl
ZENvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAgICAgbV9wY1RvQ29kZU9y
aWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAgCisgICAgLy8gT09QUzogTWFr
ZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBVbmxp
bmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFM
SVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAi
QmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJC
YXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUo
bV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAg
IAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVj
ayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsK
LSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRo
QXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9w
dFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAg
ICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsK
KyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxM
aW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1vdmUo
bV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMg
PSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAg
bV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOwor
ICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2RlLT5t
X2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOwogCiAgICAgaWYgKEpJVElu
dGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZv
ciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9y
eSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVu
ZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2Rl
IGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVj
dXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVN
ZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJ
VDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6
ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FTU0VS
VCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICsxMDIxLDIxIEBAIENvbXBp
bGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+
cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29k
ZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNo
cmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+
bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8m
IGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8g
RklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZl
Q29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRs
ZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9Cisg
ICAgLy8gT09QUzogRG9uJ3QgdGhpbmsgdGhpcyBzaHJpbmsgaXMgcmVhbGx5IGRvaW5nIGFueXRo
aW5nIGFueW1vcmUuIFZlcmlmeS4KKyAgICAvL3sKKyAgICAvLyAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgIC8vICAgIG1fY29kZUJsb2NrLT5z
aHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7Cisg
ICAgLy99CiAKKyAgICAvLyBPT1BTOiBtX3BjVG9Db2RlT3JpZ2luTWFwIHNob3VsZCBsaXZlIG9u
IEJhc2VsaW5lSklUQ29kZSBmb3IgYmFzZWxpbmUgY29kZWJsb2Nrcy4KICAgICBpZiAobV9wY1Rv
Q29kZU9yaWdpbk1hcCkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFw
KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsK
IAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJ
VC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgpKSAv
Ci0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1Np
emUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2st
Pmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUobV9q
aXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5r
ZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJu
IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTA0NywxMSBAQCBzaXplX3Qg
SklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZlci0+c2l6ZSgpOwog
fQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9u
RWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBk
b01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhy
ZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVCbG9jayk7CiB9CiAK
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKQEAgLTEwNDIsMTgg
KzEwOTEsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwogICAg
ICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQ
cmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZy
YW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7
CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJPZmZz
ZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZv
cihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVSZWdpc3RlckNvdW50
Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2ludCBKSVQ6OnN0YWNr
UG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJs
b2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9pbnRlck9mZnNldEZv
cihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNoTWFwPENTdHJpbmcs
IFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3RyaW5n
LCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9u
IDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWws
IGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBP
ZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNf
Y2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAorI2luY2x1
ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUg
IkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgpAQCAtNDQs
NiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hp
ZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgorI2luY2x1ZGUgIkxM
SW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiVW51
c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTE0OSwxNCArMTUx
LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0
aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0Owog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVu
bGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNh
bGxMaW5rSW5mb0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklU
IDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVO
VCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklU
U2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEsNiArMTczLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1h
eSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KICAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAorICAgICAgICB1
c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChW
TSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVj
b2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTE3OCwy
OCArMTgyLDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAq
SlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0
aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwotICAgICAgICBDb21waWxhdGlv
blJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBDb21waWxhdGlvblJlc3Vs
dCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAgICAgICAgc2l6ZV90IGNvZGVT
aXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9y
ZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBj
b21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNv
ZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4gSklU
KHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShjb2RlQmxvY2ss
IGVmZm9ydCk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdp
c3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyBpbnQg
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRp
YyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOwogCiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVUaW1l
U3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90YWxD
b21waWxlVGltZSgpOwogCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfbWV0YWRh
dGFHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSOworICAgICAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzX2NvbnN0YW50c0dQUiA9IExMSW50OjpSZWdpc3RlcnM6OnBi
R1BSOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgICAgICB2b2lk
IHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAgICAgIHZvaWQgbGluaygpOwotICAgICAg
ICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7
CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKENvZGVCbG9jayosIEpJ
VENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJ
VCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRD
YWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCkBAIC0yMjMs
NiArMjMyLDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZyb21N
ZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQzMkZyb21N
ZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQ4RnJvbU1l
dGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAg
ICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXpl
X3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAg
ICAgIHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAg
ICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBz
aXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVibGljOgorICAgICAgICB2b2lkIGxvYWRD
b25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgIHByaXZhdGU6Cisg
ICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRD
b2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisKKyAgICAgICAgdm9p
ZCBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1Qw
KTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRvSGFuZGxlcikKICAg
ICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGp1bXBUb0hhbmRs
ZXIpOwpAQCAtMjU4LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgJiYg
T3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlu
a0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92
YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAg
ICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+
IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBj
YWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0g
ICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChj
b25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAg
dm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4NywxNCArMzIyLDE1IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93
bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2
b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsK
IAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBp
biByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0
Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBH
UFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICAvL3ZvaWQg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOworICAgICAgICAv
L3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2Rl
JiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFs
dWVSZWdzKTsKQEAgLTMwNyw2ICszNDMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
dm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBB
cnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQg
YXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklE
IHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAg
ICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwg
cHRyZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2Rl
KE9wKTsKQEAgLTU5Miw3ICs2MzIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02MjYsMTQgKzY2NSwx
NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNl
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJv
b2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
T3JCcmFuZCwgQWNjZXNzVHlwZSk7Ci0gICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZp
cnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUpOworICAgICAgICB2b2lkIGVtaXRIYXNQcml2
YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3
RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHZv
aWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUpOworICAgICAgICB2b2lkIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcpOwor
ICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBHUFJSZWcgc2Ny
YXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgdW5zaWduZWQgZGVwdGgpOwogICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNo
ZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY0NSw3ICs2ODQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNl
bmRpZgogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRj
aHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVy
VG9TZXQpOworICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBv
aW50ZXJUb1NldCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUq
IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogICAgICAg
ICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZP
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAg
IHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qg
b3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CkBAIC02NTQs
NiArNjkzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9D
YWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAg
ICAgIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSlNWYWx1ZSBn
ZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJh
bmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENv
bnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjk1LDI2ICs3MzUsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9k
dWxlVmFyKTsKICAgICAgICAgfQogCi0jZGVmaW5lIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VO
RVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVy
YXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9HRVRfRlJP
TV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFU
T1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVy
YXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1l
KTsKLQotICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1VzZWRGb3JPcFJlc29s
dmVTY29wZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gTW9kdWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gZW1pdCBpbmxpbmUg
dGhhbiB1c2UgYSB0aHVuay4KLSAgICAgICAgICAgIC8vIFJlc29sdmVkQ2xvc3VyZVZhciBiZWNh
dXNlIHdlIGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9wX3Jlc29sdmVfc2NvcGUuCi0gICAg
ICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAgICAgfQotCi0jZGVmaW5lIERFQ0xBUkVfUkVT
T0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29s
dmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERF
Q0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9SRVNPTFZFX1ND
T1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFy
KiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mLCBzdGQ6Om9wdGlvbmFs
PFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29w
ZVRodW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5r
TmFtZSk7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZN
Jik7CkBAIC03NTksMTAgKzc4MSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9u
KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
KTsKICAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdChBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEm
LCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShN
ZXRhZGF0YSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25z
dCBCeXRlY29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAg
ICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0
eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRz
PE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIw
LDIwICs4NDIsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNl
dCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5
cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBB
cmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5
cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlv
biwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBl
IG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAg
ICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsK
LSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEs
IHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5
cGUsIHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVu
YWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+
Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFk
ZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFk
ZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlv
blR5cGU+KHRhcmdldCwgYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRk
cmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdl
dC5vZmZzZXQpLCByZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOCwyNSArOTQwLDIwIEBA
IG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2Fu
QmVPcHRpbWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wg
Y2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxp
bmVkOyB9CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hv
dWxkRW1pdFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgp
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQo
KSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9m
aWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3
aGljaCBjYXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1p
dFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGVt
aXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAgICAg
ICAgdm9pZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wg
cmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxl
VGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFs
dWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8v
IGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdh
bnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRo
ZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBj
b3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxl
KEJpbmFyeU9wKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAt
OTYzLDkgKzk4MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNo
ZXM7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0
SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9j
b3BpZWRBcml0aFByb2ZpbGVzOwotCiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tz
OwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFj
azsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC05OTksMTEgKzEwMTMsMjQgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlx
dWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJh
dGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9v
bCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFBy
b2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAgICAgICAg
Q29kZUJsb2NrKiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBVbmxp
bmtlZENvZGVCbG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKworICAgICAg
ICBNYXRoSUNIb2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2Rl
PiBtX2ppdENvZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOwor
ICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQg
eyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgQmFnPFVu
bGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgICAgIEJhZzxDYWxsTGlu
a0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAgICBGaXhlZFZlY3RvcjxTaW1w
bGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U3Ry
aW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAgc3RydWN0
IE5vdEFDb2RlQmxvY2sgeyB9IG1fY29kZUJsb2NrOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3Bw
CShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRD
aGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
YXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3Vt
ZW50R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAg
ICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25a
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0zMjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1Qx
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwg
cmVnVDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGlu
dmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QxKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzc1LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKQEAgLTU3Myw3ICs1NzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3coY29uc3QgCiAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAg
ZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURv
dWJsZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0g
bV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJv
ZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJvZmlsZUluZGV4KTsK
KyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9m
aWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwg
bmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9z
ZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50
CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsK
QEAgLTg5OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3Ry
dWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJ
Qyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
Jm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBt
X21hdGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9N
YXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0
PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxp
bmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0
YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
c2NyYXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdz
KTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAg
ICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAg
LTEwMTUsMTAgKzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1h
dGhJQwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJv
ZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFBy
b2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
c2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFk
ZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1
NSwxMyArMTA2MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8
CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMt
PmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChh
cml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElD
KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1Jl
Z3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVu
Y3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWlu
dGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVO
QUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAt
MTEyMCwxMyArMTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0
aElDCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0
aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBp
ZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAo
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAg
ICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0
d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lz
ZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVn
cywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAK
ICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwo
KTsKQEAgLTExNjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0
cnVjdGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0
cjsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUg
PSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJs
b2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5t
X3Byb2ZpbGVJbmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29k
ZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJh
bmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjIwLDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBK
SVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsK
KyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJs
b2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5t
X3Byb2ZpbGVJbmRleCk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11
bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50
SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFs
dWVNdWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211
bChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUU3Vi
SUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9p
bnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBl
bWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
VmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENh
bGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAg
ICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6
Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdU
MSwgcmVnVDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3Rh
Y2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7
CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAg
ICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDcgKzM0MSw2IEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRo
Q2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC00NCw3ICs0NSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENh
bGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkp
LnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDE4ICs1NCwxOCBAQCBzdGQ6
OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6
Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9
IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
IGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQg
Y2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50
SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBj
aGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50Pihz
dGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCisK
ICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lz
dGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCBy
ZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAg
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0YSwg
Y2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3Rv
cmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxl
KCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyArNzksNyBAQCBzdGQ6OmVuYWJs
ZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29k
ZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVj
b2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFu
dCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFs
dWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRz
OwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRl
Y29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJk
QXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNp
emVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVl
UmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0
RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
LWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRo
aXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSksIHJlZ1Qx
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEwMywxNiBAQCBKSVQ6OmNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0g
b3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAgICBz
ZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVy
YXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24s
IHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92
ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQg
Y291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAr
IFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3Qg
PSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZv
LT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2FkQ29u
c3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1Qz
LCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZv
OjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RCaWdn
ZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0xMjcs
MTYgKzEzMSwxNiBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRlbXBs
YXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNv
ZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsK
LSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1l
OjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIGFyZ3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIs
IEFkZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsK
IAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7Ci0KLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9l
Y21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0
ZWNvZGUpOwogCkBAIC0xNDgsNyArMTUyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZv
KiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3Mu
YWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENh
bGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5
dGVjb2RlLm1fYXJndjsKQEAgLTE1Niw0MyArMTYwLDQ3IEBAIHZvaWQgSklUOjpjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zm
c2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVz
cyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0Vmly
dHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0
aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQo
Ynl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxl
VGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKLXsKK2Jvb2wgSklU
Ojpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2ln
bmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KSB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwm
IGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwg
VW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewotICAgIENh
bGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVEYXRhLm51bVBhc3Nl
ZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0
ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxlRGF0YS5udW1Mb2Nh
bHMgPQorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURh
dGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOworICAgIHNodWZmbGVEYXRh
LT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAgIHNodWZmbGVEYXRhLT5udW1Q
YXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworICAgIHNo
dWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVy
OworICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBieXRlY29kZS5tX2FyZ3Yg
LSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZm
bGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1ZmZsZURhdGEtPmFy
Z3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQor
ICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5
OjpkaXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAgICAg
ICAgIERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAg
ICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotICAgIHNodWZm
bGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7Ci0gICAgaW5mby0+
c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZsZURhdGEtPmNhbGxl
ZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgIHNodWZm
bGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0Ojps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1bXBMaXN0IHNsb3dQ
YXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENh
bGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgbG9hZENv
bnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVtcExpc3Qgc2xvd1Bh
dGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVn
VDAsIHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgKnNodWZm
bGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93Q2FzZShz
bG93UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CisgICAgaW5mby0+
ZnJhbWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAgICAgYXV0byBkb25l
TG9jYXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjE4LDE0ICsy
MjYsMjUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAg
ICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENh
bGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KLSAg
ICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNvZGVJRCAhPSBvcF9j
YWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNv
ZGUsIGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0gVUlOVF9NQVg7Cisg
ICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBpbmZvID0gbV91bmxp
bmtlZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29k
ZUluZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVG
b3Iob3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAgICAg
QVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgp
OworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbklu
Zm8oKSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
dW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50
OworICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsK
IAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRl
eCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJf
dCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAg
ICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCku
Yml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3Mo
Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9s
ZHMgY2FsbGVlLgpAQCAtMjM0LDE2ICsyNTMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
Y29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9
PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6
Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
LmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChjb21w
aWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBpZiAo
Y29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0Nv
bnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFu
dCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0
byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJl
Z1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRvIHNs
b3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHJlZ1QwLCByZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9
KTsKQEAgLTI1MywxMyArMjY4LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IElu
c3RydWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0g
aW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24g
PSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlv
bjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCAr
Mjg4LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3Zt
LCAqdGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0
aGlzLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJu
RnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcgKzQxMCwzMCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
aWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBy
ZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIs
IEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
bmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMp
OwogfQpAQCAtNDE2LDEwICs0NDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
b3Blbihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRv
ckdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RP
YmplY3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIp
KTsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7
CkBAIC00MzIsMTkgKzQ1OCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBD
YWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0
b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
aWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUo
aXRlcmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5
cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJl
ZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAg
ICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0
ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmso
dGhpcyk7CiB9CkBAIC00NTIsNyArNDc2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJh
dG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgp
IHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNl
IE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUw
ICs0OTMsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAg
IEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6Okdl
bmVyaWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNv
bHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7Cisg
ICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6
b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZz
ZXRPZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4
VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRP
ZlNlZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVj
dGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2lu
dCgpOwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJl
Z1QwCiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3Vs
dEdQUiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJl
c3VsdEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0g
ICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29u
c3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6c2NyYXRjaDsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7
CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChp
dGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZh
bHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdz
LmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0
R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwg
SlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIs
IEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4p
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdz
IHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
SlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3Bv
aW50KCk7CiAgICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qy
OwotICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQg
dXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRl
U2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9u
RG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNo
MSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChnbG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJh
bmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBn
bG9iYWxHUFIpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbW92ZShpdGVy
Q2FsbFJlc3VsdEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+
dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAg
ICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAog
ICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1Nzcs
NTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1
bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1
bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAg
ICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJ
Zk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1w
bCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAg
ICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAg
bm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAg
ICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIp
KTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0g
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
ZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJl
c3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdC
aXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihk
b25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RP
YmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7
CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAg
ICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5n
SW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
IAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxs
IGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25B
cmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRl
clJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJn
dW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
ICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAg
ICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAg
IH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKKwogbmFt
ZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtMTU5LDEwICsxNjAsMTAgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAgICB7
Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNl
RGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJD
YWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcs
OSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAg
LCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1f
c3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NU
eXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBj
b2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4p
IDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNh
bGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7
CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXpl
KAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1Yklu
Zm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0
UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhT
dGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4o
bV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGpp
dC5sYWJlbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5
cGUpKTsKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAg
aml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9k
b25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0
b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0xMTAsNyArMTE4
LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcgogICAgIENvZGVC
bG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWdzIGJhc2Us
IEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUgYWNjZXNz
VHlwZSkKICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3Jp
Z2luLCBjYWxsU2l0ZSwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0
dWJJbmZvR1BSKQotICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5hbWUudWlkKCkgPT0g
Y29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCisgICAgLCBtX2lz
TGVuZ3RoQWNjZXNzKGNvZGVCbG9jayAmJiBwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJsb2Nr
LT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoYmFzZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAko
cmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTE0IEBAIG5hbWVz
cGFjZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNsYXNzIENhbGxTaXRlSW5k
ZXg7CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5m
bzsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNzIEFjY2Vz
c1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCitzdHJ1Y3Qg
QmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
R1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1
Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
ID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlW
YWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9jayBhbmQg
aW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KKyAgICBzdGF0
aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAg
c3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjph
cmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG8gPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBH
UFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJl
Z1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
byA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gg
PSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnMg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0
cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5
SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKK307CisKK3N0cnVjdCBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2Ug
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQ
UkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BS
SW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUklu
Zm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFz
ZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBicmFu
ZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xhc3MgSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKCkg
eyB9CkBAIC02MiwxNSArMTY1LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKAogICAg
ICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRo
TGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2VkU3R1YkluZm8geyBu
dWxscHRyIH07CisgICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBwcm90ZWN0ZWQ6Ci0g
ICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0VHlwZTsKICAgICBT
dHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgorICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Ns
b3dQYXRoQ2FsbDsgLy8gT09QUzogbWFrZSByZXBvcnRDYWxsIHBhc3Mgc29tZXRoaW5nIGluIHdl
IGNhbiB1c2UgZm9yIHRoZSBub24tQ1RJIHRodW5rcyBidWlsZHMuIAogfTsKIAogY2xhc3MgSklU
QnlJZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CkBAIC05OCw3
ICsyMDcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFs
dWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKK3B1
YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTEzMiw4ICsyNDEsOCBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0gZGVm
YXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIEpJ
VFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLAotICAgICAg
ICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwg
RUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2Fj
aGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRL
aW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
ICAgICAKQEAgLTE2MywxMSArMjcyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZh
c3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9i
YXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKQEAgLTE5MSw4ICsyOTgsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVy
YXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBt
X3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjEsNiBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hh
YmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNDQsNiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0
ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI3Nyw4ICszNzgsNiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1
ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAotcHJpdmF0ZToKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hh
YmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSArNDAxLDkgQEAgcHVibGlj
OgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1w
cml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3Jlc3Vs
dDsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzMwLDggKzQyNyw2
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODE4Njgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewot
ICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
RG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0
YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25z
dGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAg
ICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3Jj
KSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAgICAg
ICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBhbGwgbGluayB0aW1lIGNvbnN0
YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAg
IEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29u
c3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0
SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50
cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRD
YWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3Rl
ciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIp
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1
cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJu
VmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2FsbDsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1l
dGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
K3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBk
c3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJu
VmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZh
bHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVh
bFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcp
KQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55
U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7
CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBz
aG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28g
dGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFT
U0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkt
Pmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsg
MSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRlY29k
ZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFk
dmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90
Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5
dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhv
dC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7
Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkt
Pmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNr
cG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgsMzQgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
LSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+
bGVuZ3RoKCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKLXsKLSAg
ICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKLQotICAgIC8vIFdlJ3JlIGluIGEgc2lt
cGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBk
aXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQodmFs
dWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UKLSAgICBFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSAgICBzdG9yZTMyKHZhbHVlLnBheWxv
YWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAgICBzdG9yZTMyKHZhbHVl
LnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKLX0KKyAgICBpZiAo
IXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAm
JiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09
IDE7Cit9CisKKy8vIE9PUFMKKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKy8vewor
Ly8gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CisvLworLy8gICAgLy8gV2UncmUg
aW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVz
dCBkbyBhIGRpcmVjdAorLy8gICAgLy8gc3RvcmUuCisvLyNpZiBVU0UoSlNWQUxVRTY0KQorLy8g
ICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyNlbHNl
CisvLyAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0
PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vICAg
IHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQp
OworLy8gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcp
OworLy8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSks
IFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJ
ZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
Z1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxz
ZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzIzLDI0ICszNTMs
MjUgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQog
ewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7CisgICAgcHRyZGlmZl90IG9mZnNldCA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVj
b2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29kZT4obV9ieXRlY29kZUluZGV4LmNo
ZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKTsKKyAgICBz
dG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0
UmVnKSk7Ci19CisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKKy8veworLy8gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykp
OworLy99CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjpl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlc3VsdFJl
ZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgR1BSUmVnIHJlc3VsdFJl
ZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhy
ZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVl
UmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCkBAIC0zNjAsNiArMzkxLDIxIEBAIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVcKICAgICB9CiB9CiAKK3RlbXBsYXRl
IDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9m
QXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikK
K3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CisgICAgICAgIGxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0
ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdp
c3RlcklEIHNjcmF0Y2hHUFIpCit7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBB
cnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3Jh
dGNoR1BSKTsKK30KKwogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmFzSW50MzIoKTsKQEAgLTM4MCw3ICs0MjYsNyBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91Ymxl
KFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAocmVn
LmlzQ29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3Rh
bnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRy
KCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZERvdWJs
ZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKQEAgLTQ5Niw3ICs1NDIsNyBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFt
X2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVn
KSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUwNiw3ICs1NTIsNyBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFn
KQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAo
IWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MTQsMTEgKzU2
MCw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9CiB9
CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxS
ZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKQEAgLTU0NCwxMSArNTg1LDE3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBBU1NFUlQobV9ieXRlY29k
ZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAog
ICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigp
KQotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSks
IGRzdCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgc3dpdGNoIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpKSB7CisgICAgICAgIGNhc2Ug
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICBjYXNlIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIG1vdmUo
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0Nv
bnN0YW50KHNyYywgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTU2NiwxMSArNjEzLDYgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwg
ZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50
KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lz
dGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01
OTUsNyArNjM3LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQog
CiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVn
aXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY3
OSw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBp
ZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9j
ay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
R2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQot
ewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hN
YXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRH
ZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0
SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7
Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1
dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6
OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBr
ZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAz
MiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1
dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChp
dGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBp
dGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGll
ZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQ
cm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zm
c2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiAr
NzAwLDYxIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICBy
ZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBs
b2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRh
dGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhzX21ldGFkYXRhR1BS
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBC
eXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAg
bG9hZDgoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZh
bHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMy
VG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90
IG9mZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1f
dW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVj
b2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3Qg
Qnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZz
ZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgc19tZXRhZGF0YUdQUiwgcmVz
dWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvbnN0YW50KEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgY29uc3RhbnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBs
b2FkUHRyKEFkZHJlc3Moc19jb25zdGFudHNHUFIsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oY29u
c3RhbnRJbmRleCkgKiA4KSwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
bG9hZEdsb2JhbE9iamVjdChHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRDb25zdGFudChtX2ds
b2JhbE9iamVjdENvbnN0YW50LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
Ojpsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBHUFJSZWcg
cmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7Cisg
ICAgLy8gT09QUzogTWF5YmUgbWFrZSB0aGlzIG1vcmUgZWZmaWNpZW50PworICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZm
ZXIoKSksIHJlc3VsdCk7CisgICAgbG9hZDY0KEFkZHJlc3MocmVzdWx0LCBjb25zdGFudC50b0Nv
bnN0YW50SW5kZXgoKSAqIHNpemVvZihKU1ZhbHVlKSksIHJlc3VsdCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IElu
c3RydWN0aW8KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNo
T2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkp
KTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVC
bG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUs
ICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTk5Nyw3ICs5OTcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBm
b3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxl
SW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1l
ZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsK
IApAQCAtMTAyNCw3ICsxMDI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29u
c3QgSW5zdAogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlv
bnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAg
IG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5k
ZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2Vk
VGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwNDIsNyArMTA0Miw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KIAogICAgIC8vIGNy
ZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRj
aCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5z
dHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4
LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAgIGxpbmtlZFRhYmxl
LmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQz
LDggQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVn
aXN0ZXIuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC01NCwxMSArNTYsMjIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAg
ICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7Ci0gICAgICAgIGVs
c2UKKyAgICAgICAgLy8gT09QUzogbW9zdCAiT3RoZXIiIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
biBjb25zdGFudHMgY2FuIGp1c3QgYmUgZ3JhYmJlZCBmcm9tIHRoZSBVbmxpbmtlZENvZGVCbG9j
ay4gSXQncyBqdXN0CisgICAgICAgIC8vIGEgY291cGxlIHR5cGVzIHRoYXQgY2FuJ3QuIENyZWF0
ZSBhbiBhYnN0cmFjdGlvbiBmb3IgdGhhdC4KKworICAgICAgICBzd2l0Y2ggKG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykpIHsKKyAgICAg
ICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6CisgICAgICAgIGNhc2Ug
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6IHsKKyAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAg
ICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3Qp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7CisgICAgICAgICAgICBz
dG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NywzNyArMTAwLDM1IEBAIHZv
aWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29w
X25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVj
dDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxv
Y2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0Zp
bmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAg
UmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hS
ZWcgPSByZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAg
aWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBU
cnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1
bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2Vz
KTsKLSAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0
dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCksIGFs
bG9jYXRvclJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmpl
Y3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKwor
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1Q
dHIobnVsbHB0cik7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxv
Y2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHks
IHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcs
IFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVt
aXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11
dGF0b3JGZW5jZSgqbV92bSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCk7CisKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwor
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1
cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmpl
Y3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3Jl
Q2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzE0Miw4IEBAIHZvaWQg
SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAg
aWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1
c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3Rh
bmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAg
IEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAs
IEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlv
blByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKIApAQCAtMTU0LDMwICsxNjYsMzggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0g
Ynl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZh
bCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8v
IFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlz
IGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3RvLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2Vs
aW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm90
b0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgY29uc3RleHBy
IEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBwcm90b0dQUik7CiAg
ICAgCiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBh
IGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0lu
c3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOwogCiAgICAgSklUSW5zdGFuY2VPZkdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwg
Ly8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJv
dG8KLSAgICAgICAgcmVnVDUsCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgcmVz
dWx0R1BSLAorICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgcHJvdG9HUFIsCisgICAgICAgIHN0
dWJJbmZvR1BSLAorICAgICAgICBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gx
LCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gyKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7CisgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKKwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMTkyLDE0ICsyMTIsMTMg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7
Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5v
bkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3Rh
bmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCByZWdU
MiwgcmVnVDEpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm8gPT0gYXJndW1l
bnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
dmFsdWUgPT0gYXJndW1lbnRHUFIyKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVyczo6cHJvdG8gPT0gYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5
cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBA
IC0yNDAsNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChj
bwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVn
VDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM3NCw3ICszOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygmUmVnaXN0ZXJBdE9mZnNldExp
c3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiAjZWxzZQpAQCAtMzgzLDkgKzQwMiw5IEBAIHZvaWQg
SklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7Ci0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZS
ZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
CkBAIC00MTEsNyArNDMwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0
IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NTIsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bf
c2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0
aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rp
b24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwg
cmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1bWVu
dEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ4NCwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9i
YWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQ
Uik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSks
IHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25a
ZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNTAxLDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1NDAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBK
U0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3Ry
dWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVt
cCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQzLDcg
KzU2NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAgICAv
LyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBK
dW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs2MDMsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFs
UG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsK
LSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEND
YWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMy
KDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChi
eXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0
YWRhdGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1
YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2NDQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
anRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BS
ID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVS
ZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFk
ZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDAp
LCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY2MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzE2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAg
ICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVu
dHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
cmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25I
YW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzczMyw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVy
R2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50
R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIx
OwpAQCAtNzIwLDcgKzc0Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIGpp
dC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRHUFIw
KTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
YXJndW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyArOTMwLDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5
NDEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiB9CiAKQEAgLTkzMSw3ICs5NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIo
Y29uc3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTc1LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNW
UmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7
CiB9CkBAIC05NzgsNyArMTAwMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25z
dCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcg
IT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0K
QEAgLTk5Myw3ICsxMDE3LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3Ry
dWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zm
c2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihu
dWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsK
IAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9j
aygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBPT1BTOiBUaGlzIGlzbid0IGVs
ZWdhbnQuIFdoeSBhcmVuJ3QgdGhleSBpbiB0aGUgY2FsbGVlIHNhdmUgYnVmZmVyLiBJIGd1ZXNz
IGJlY2F1c2Ugd2UgY2FuIE9TUiBleGl0IGhlcmU/CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRh
dGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwg
JnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyArMTAzOCwxMSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9v
ZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7Ci0gICAgaWYg
KGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5
dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxl
LCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUs
ICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5
ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwotICAgIGlmIChidWZmZXIg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewotICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSksIHJlZ3MpOwotICAg
ICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKQEAgLTEwNTMs
OCArMTA2OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAg
ICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhp
cyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVu
ZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0
LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRh
YmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsxMDk2LDE0IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRp
bmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBm
b3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRl
eCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rl
cikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgsIHVubGlu
a2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBh
cmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsK
ICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEw
OTksMjAgKzExMTUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJ
bgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsK
IAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFj
ayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJp
bmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBt
X2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAg
ICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0
YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNB
ZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dl
clJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVn
SG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTExMzMs
NyArMTE1MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAog
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE0
OCw3ICsxMTY2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAog
CiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjYsNyArMTE4
Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdU
MiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE4OCwx
MiArMTIwNSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAg
ICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3Vy
IGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZv
aWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBp
bmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5u
dW1WYXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFy
cygpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBmb3IgKHNpemVfdCBqID0g
Q29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwor
ICAgIAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7CiAKICAgICBlbWl0RW50ZXJPcHRp
bWl6YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEyMTIsNyArMTIzMSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9o
YW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6
OmVicCk7CkBAIC0xMzEwLDIzICsxMzI5LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29w
ZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJl
SUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJl
Z1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJl
Z1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2Vs
bD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lz
dGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJl
Z1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcgKzEzNTcs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZFB0
cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFs
bG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6
Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9jYXRv
clJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRh
OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJl
RGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBj
YWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BD
cmVhdGVUaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRDYWxsZWUoKSwgY2FjaGVkRnVuY3Rp
b25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVh
bCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVD
YWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIGNh
bGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVz
LmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzODcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qy
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCBy
ZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1
cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEzOTgsOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Qy
LCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CiAg
ICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQ
UiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5W
YWx1ZUdQUik7CkBAIC0xMzk0LDcgKzE0MTEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVx
KGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxNDIyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsxNDM3LDExIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3Ry
dWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJ
bnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0lu
c3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNl
T2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVj
dG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwog
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
IH0KQEAgLTE0MzAsNyArMTQ1MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKIHsKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlG
cm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJl
RWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX3VubGlu
a2VkQ29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigp
KSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25D
b3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZFB0cihwdHIsIHJlZ1QwKTsKICAgICAg
ICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2hQdHIoQmVsb3csIHJlZ1QwLCBUcnVzdGVk
SW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBA
IC0xNDQwLDcgKzE0NjAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1CiAjZWxzZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJldHVy
blZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCi0gICAgICAgIG1v
dmVWYWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlc3VsdFJlZ3MpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkpOwogICAgICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAg
ICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0xNDUzLDggKzE0NzMsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBFbWl0IHRoZSBK
SVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgeworICAg
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDAp
OwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1c3Rl
ZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAotICAg
ICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRl
Q291bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQogfQogCkBAIC0xNTA5LDcgKzE1MzAs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1bWVudEdQUjAp
OwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1l
bnRHUFIzOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTUyMiw3ICsxNTQ0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKGNvbnN0IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5l
cmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAg
LTE1NjQsMzQgKzE1ODYsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJ
bnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVn
ZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdl
eHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdl
eHAsIGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENv
bnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1v
bihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEp1bXAgbGF6
eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3Vt
ZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBy
ZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BS
MSk7CiAjZW5kaWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxv
Y2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25z
dGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9u
RGVjbCwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2Rl
Lm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRH
UFIyKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3Jf
ZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5j
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwg
JnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dl
bmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZt
KCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2MjEsMjMg
KzE2NDUsMjQgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNl
bHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBl
bWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgog
Ci0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlv
bkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdp
c2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAgICAg
T3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0
aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4
cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4
cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
KTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19n
ZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fz
eW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTY2
NCwyOSArMTY4OSwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1
CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAg
aW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1
ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
cmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAg
ICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQUjIpOworICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
Miwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXpl
SW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxs
b2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2l6ZUluZGV4LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVB
bmRQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OwogI2Vsc2UKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
TmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSgpLCByZWdUMik7CiAgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0
YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNzIwLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKKyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBj
b2RlIGNhY2hpbmcgd2hlbiB0aGUgdHlwZSBwcm9maWxlciBpcyBlbmFibGVkLgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAg
ICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0
aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFy
Z2V0VmlydHVhbFJlZ2lzdGVyOwogCkBAIC0xNzc3LDIwICsxODA0LDI0IEBAIHZvaWQgSklUOjpl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQ
UjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVt
cyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFj
a2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8g
VGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNo
MlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93
UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3Vt
ZW50IHJlZ2lzdGVyLgorICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAg
ICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0
Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2Nr
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBy
ZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVT
RShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91
YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhl
IHVzaW5nIHRoZSBjb250cm9sIGZsb3cgcHJvZmlsZXIuCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlQ29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNp
Y0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9j
a0xvY2F0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5l
bWl0RXhlY3V0ZUNvZGUoKnRoaXMpOwpAQCAtMTg2MCw3ICsxODkxLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgp
LCByZXN1bHRSZWdzKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE5
MTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1p
dExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywg
c2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3Vs
dFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3Vs
dFJlZ3MpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NTYsNyArMjg1Niw3IEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
Y29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiBy
ZXN1bHQgPSBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIApA
QCAtMjg4MSw3ICsyODgxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3
aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNv
bnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBB
U1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21p
biA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoa2V5LmlzSW50MzIoKSkKQEAg
LTI5MDQsNyArMjkwNCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0
Y2gKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IHZvaWQqIHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
Y29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3Qg
U3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTdHJpbmdT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAKICAgICBpZiAoa2V5LmlzU3RyaW5nKCkpIHsK
ICAgICAgICAgU3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmluZyhrZXkpLT52YWx1ZShnbG9iYWxP
YmplY3QpLmltcGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQ4LDcgKzM0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25h
bWUoY29uc3QKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwog
CiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwg
cmVnVDQpLCBJbnZhbGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uc3R1YkluZm8o
KS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5MiArNDksMTAzIEBA
IG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnNjcmF0Y2g7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CiAKLSAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQo
KSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAg
ICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgaWYg
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJz
LmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7
CisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlW
YWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAg
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIp
OworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwg
c2NyYXRjaEdQUik7CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlW
YWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgICAgIGlmIChpc09wZXJhbmRD
b25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVy
dHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOwor
CisgICAgICAgIC8vIE9PUFMuIFN1cHBvcnQgdGhpcworICAgICAgICAvL2lmIChpc09wZXJhbmRD
b25zdGFudEludChwcm9wZXJ0eSkpCisgICAgICAgIC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICAgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7
CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwogICAgIH0KLQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgogdm9pZCBKSVQ6
OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBpZiAoaGFzQW55U2xv
d0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKKyAgICBpZiAoIWhhc0FueVNsb3dDYXNlcyhpdGVyKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCi0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAot
ICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZh
bEluZGV4KytdOworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXgrK107CiAKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxl
LCByZWdUMCwgcmVnVDEpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVj
b2RlLCBPcGNvZGVUeXBlOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOwor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQotICAgICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwotICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29k
ZUluZGV4KTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
YXJndW1lbnRHUFI0OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gYXJndW1lbnRHUFI0OworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICAgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFy
Z3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0
eUdQUiA9PSBhcmd1bWVudEdQUjEpOwotCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHBy
b2ZpbGUpLCBwcm9maWxlR1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7Ci0KLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxy
ZWFkeSB1c2VkLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BS
MjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5
R1BSID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpiYXNlID09IHJlZ1QwKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5ID09IHJlZ1QxKTsKKworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1h
dGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRh
dGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOworICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1
cm5WYWx1ZUdQUik7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFs
dWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ5LDcgKzE2MCw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
QEAgLTE2MCw4ICsxNzEsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjU7
CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChw
cm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0xODcsMzQgKzE5OCw0MCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cmVzdWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0UHJp
dmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBB
U1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0y
MjMsOSArMjQwLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTIz
NSwyNiArMjU0LDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMK
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8v
IGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRH
UFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTI2NCw3ICsyNzcsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0zMDAsMjEg
KzMxMywyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKLSAgICBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0
ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBi
cmFuZEdQUik7Ci0KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2
YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgcmVnVDIpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVC
cmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpT
ZXRQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0
dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRB
Y2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJp
ZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJl
Z2lzdGVycy4KQEAgLTMyNCwxNyArMzQ0LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2
YXRlX2JyYW5kKGNvbnMKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJh
c2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBn
ZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXgrK107
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJy
YW5kR1BSKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNl
dFByaXZhdGVCcmFuZD4oKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBh
cmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFu
ZCwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blNldFByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwpAQCAtMzQ0LDI0ICszNjksMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRl
X2JyYW5kKAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFy
Z3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BS
ID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0
aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9u
R2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2Fs
bCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0
UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKICNlbmRpZgogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM3MCwxOSArMzg5LDI4IEBA
IHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY28KICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQg
PSBieXRlY29kZS5tX2JyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgcmVnVDEpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFu
ZEdQUik7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZh
dGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5k
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkNoZWNr
UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNj
ZXNzZXMuYXBwZW5kKGdlbik7CiB9CiAKQEAgLTM5NCw5ICs0MjIsMTEgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBy
ZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0
ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC00MDYsMjQgKzQzNiwxOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVy
YXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9u
VHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1l
bnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9w
dGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzUsMzAgKzQ1OSw0MiBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHJlZ1Qz
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJlZ1Q0KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9maWxlR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50
ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2Zp
bGUoKSwgcHJvZmlsZUdQUik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MiksIHJlZ1QzLCByZWdUNCk7Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5
KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIp
LCBwcm9maWxlR1BSLCBzdHViSW5mb0dQUik7CisgICAgLy8gT09QUzoKKyAgICAvL2lmIChpc09w
ZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCisgICAgLy8gICAgZ2VuLnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IHN0
ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsRGlyZWN0PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1
dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRl
Y29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7
CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJp
ZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00NzQsMTUgKzUxMCwxMiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVD
TUFNb2RlOjpzdHJpY3QoKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwog
CiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
ICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gYnl0
ZWNvZGUubV9lY21hTW9kZTsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTQ5OCw3ICs1MzEsMTYgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3Qg
cGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlz
RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkg
OiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFI0KTsKKyAgICBpZiAoaXNE
aXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFk
YXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIGVsc2UKKyAg
ICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbERpcmVjdDo6TWV0YWRhdGE6Om9mZnNldE9mQXJy
YXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0LCBh
cmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNTEyLDcg
KzU1NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBDYWxsIGNhbGw7CiAgICAgYXV0
byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CkBA
IC01MjMsNyArNTY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNTMzLDE4ICs1NzUsMjQg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1h
a2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxh
YmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxp
bmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkg
bm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZt
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwog
CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVn
VDM7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gcmVnVDU7CisgICAgeworICAgICAgICBSZWdpc3RlclNldCB1c2VkKEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6cHJvZmlsZSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlucyhyZWdUNCkpOworICAg
ICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDUpKTsKKyAgICB9CisKIAogICAgIGppdC5z
dG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CkBAIC01NzAsMjAgKzYxOCwzMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVn
VDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAK
ICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIEludmFsaWRHUFJSZWcsIHJl
Z1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQ
cml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVO
YW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmllbGRQdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRL
aW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwog
CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVy
IGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTk0LDggKzY1Myw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9wcml2YXRlX25hbWUoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2
YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwotICAgIFByaXZhdGVGaWVs
ZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBVTlVTRURfUEFSQU0o
Y3VycmVudEluc3RydWN0aW9uKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBt
X3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKQEAgLTYwMywxMyArNjYxLDE3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVm
aW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3Bl
cmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0gICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRo
IGFuZCBub3QgY2xvYmJlcmVkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
YmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZElt
bVB0cihudWxscHRyKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQg
PSBieXRlY29kZS5tX3B1dEtpbmQ7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7Cisg
ICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZh
bERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRl
RmllbGRPcHRpbWl6ZTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRzR1BSMywg
YXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjg0LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQpAQCAtNjQzLDE0ICs2OTksMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1QzOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIApAQCAtNjgwLDcg
KzczNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMy
X3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1Qw
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02ODksNyAr
NzQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJf
dCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAs
IG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1w
bCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
c2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02
OTksNyArNzU3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaQog
ICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
U2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MDksNyArNzY4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFs
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVn
VDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcxOSw3
ICs3NzksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAg
aW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRT
ZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTcyNywyMyArNzg4LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1
bHRHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3Rl
cnM6OnNjcmF0Y2g7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKICAgICBK
SVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRj
aEdQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpEZWxldGVCeUlEOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29k
ZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBz
dHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKwor
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAv
LyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBi
YXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUg
ZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpA
QCAtNzU5LDE1ICs4MzAsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25z
dCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21h
TW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVu
dEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1p
emUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNzgx
LDI0ICs4NTQsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29u
c3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9l
Y21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1
cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCkBAIC04MDgsNyArODc2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdo
dCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhl
ciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAg
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAg
ICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtODQ1LDIyICs5MTMsMzMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVE
ZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0
eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBz
dHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1f
ZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9m
IHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8v
IElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJh
c2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5NjIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Rl
bF9ieV92YWwoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1Qx
KTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0
aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUu
dmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCArOTgwLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVu
dEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7
CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNt
YU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9k
ZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBh
cHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdU
MCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC05MjYs
NyArMTAwMiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZU
TCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywg
d2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKQEAgLTk2MSwyMiArMTAzNywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRS
ZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJl
Z3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTk4
NiwxNCArMTA3MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25z
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDAzLDI2ICsxMDkxLDIwIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKICAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0
aW9uVHJ5R2V0QnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTAzMCwyMiArMTExMiwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWRE
aXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBy
ZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlk
RGlyZWN0OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0K
IApAQCAtMTA1NCwxNiArMTE0NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0
aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEw
NzMsODMgKzExNjYsNjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3Qo
YwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKSwgZGVjbHR5
cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXpl
OwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERp
cmVjdE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdU
MCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJl
Zyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQp
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKICAgICAKICAg
ICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0
UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4
KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUp
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVu
Z3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsICZt
ZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCByZWdU
MSk7CisgICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFk
YXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0
T2ZNb2RlKCksIHNjcmF0Y2hHUFIpOworICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0
QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNl
dE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGg6Om9mZnNl
dE9mQXJyYXlQcm9maWxlKCksIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RBcnJh
eUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwot
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
Ci19CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZv
R1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlz
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1
YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKIAotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
cmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2Vu
KTsKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZyk7CiB9CiAKQEAgLTExNTgsMTYgKzEyMjksMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFk
YXRhLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3
NywyNiArMTI1MCw1NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQ
Uik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAg
ICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
ZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3Ro
aXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1Jl
Z2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0
ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFz
ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworCisgICAgSklU
R2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiksIHN0dWJJbmZvR1BSKTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5
SWRXaXRoVGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMu
YXBwZW5kKGdlbik7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1
bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjA2LDcgKzEzMTAsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMjQxLDE2
ICsxMzQ1LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAg
ICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlkV2l0
aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTI2MCwyOCAr
MTM2NywyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcx
IGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0
ZXJzOjp0aGlzVmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3Vt
ZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodGhpc0dQUiA9PSBhcmd1bWVudEdQUjEpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwg
cHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBD
YWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25H
ZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRD
YWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVy
blZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVy
blZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCkBAIC0xMjkxLDcgKzEzOTIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
CiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMzI5LDIzICsxNDMwLDM3IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5t
X2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJv
dGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9p
bnRlciwKICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRl
ZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKICAg
ICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBz
YW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJh
c2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6c2NyYXRjaDsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCBi
YXNlR1BSLCB2YWx1ZVZSZWcsIHZhbHVlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
cmVnVDMsIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc3R1YkluZm9HUFIsIHNj
cmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0ID8gUHV0S2luZDo6
RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQo
KTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5SWQ7CisgICAg
c3R1YkluZm8tPnB1dEtpbmQgPSBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpO
b3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOwor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCiAg
ICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlm
IGEgYmFzZSBpcyBjZWxsLgpAQCAtMTM1OSwxNCArMTQ3NCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAgICAgCiAgICAgSklUUHV0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93
UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGFyZ3VtZW50
R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3Vt
ZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xMzc2LDI1ICsxNDk1LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBhcmd1bWVu
dEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1Yklu
Zm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENh
bGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IGdlbi5zbG93UGF0
aEZ1bmN0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChnZW4uc2xv
d1BhdGhGdW5jdGlvbigpKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAg
LTE0MDQsNyArMTUxNyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKQEAgLTE0NDEsMjAgKzE1NTQsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJ
bkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJl
ZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHVi
SW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0
dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKQEAgLTE0NjMsMTQgKzE1ODcsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lk
KGNvbnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5k
ZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXpl
LCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTQ4MCwyOCArMTYwNywyMiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0
ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQ
UjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02
NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwog
ICAgIC8vIHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhh
Y3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRp
bmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0
aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNh
bGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRP
cHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbklu
QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEwLDI1ICsxNjMxLDMzIEBA
IHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5f
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNTM3LDE1ICsxNjY2LDE4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9p
bkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUs
IHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
SW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTU1Niw1OSArMTY4OCw3MCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
ZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAg
fHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVu
dEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1Yklu
Zm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBP
cEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsK
ICAgICAvLyBzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBl
eGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVh
dGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4K
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKT46OnZhbHVlKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENh
bGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbklu
QnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvbkluQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJh
bmQsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0
eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IHR5cGU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSB0eXBlKQordm9p
ZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlIHR5cGUpCiB7
Ci0gICAgQVNTRVJUKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9
PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIFVOVVNFRF9QQVJBTShiYXNlKTsK
KyAgICBVTlVTRURfUEFSQU0ocHJvcGVydHkpOworICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVCcmFuZCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlW
YWxzW21faW5CeVZhbEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhh
c1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BS
Myk7CisgICAgY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1l
ID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVC
cmFuZE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0x
NjE4LDI3ICsxNzYxLDIxIEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJl
Z2kKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eU9yQnJhbmRHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eU9yQnJhbmRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eU9yQnJhbmRHUFIgPT0gYXJndW1lbnRH
UFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlw
ZShvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0
UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpLCBkZWNsdHlw
ZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IHR5cGUgPT0gQWNjZXNzVHlw
ZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3Bl
cmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9u
SGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjUyLDcgKzE3ODksNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaGFzX3ByaXZhdGVfbmFtZShjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0
ZU5hbWU+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZSk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1f
ZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fcHJvcGVydHksIEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVOYW1lKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfYnJhbmQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NjYsMTkgKzE4MDMs
MjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEhhc1ByaXZhdGVCcmFuZD4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0
ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhhc1By
aXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJh
bmQsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFy
SW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjpl
bWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVn
IHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAg
ICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVz
cyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+
YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworCisgICAg
bG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRj
aEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNo
cG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRk
cmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3Vy
ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewotICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgcmVnVDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0
aDsgKytpKQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9m
TmV4dCgpKSwgcmVnVDApOwpAQCAtMTY4OCw2ICsxODI4LDcgQEAgdm9pZCBKSVQ6OmVtaXRSZXNv
bHZlQ2xvc3VyZShWaXJ0dWFsUmVnaQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZv
aWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTcwMSw3ICsxODQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9
IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJs
b2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMSk7CiAgICAgICAgICAgICBsb2FkMzIoJm1l
dGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwogICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSks
IHJlZ1QxKSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSks
IHJlZ1QwKTsKQEAgLTE3MTUsNyArMTg1Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2Nv
cGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTc5NCw4NyArMTkzNSwxMDUgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNj
b3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBi
eXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEu
bV9yZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNT
RVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25z
dGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBz
Y29wZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSByZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2Un
cmUgZ2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8g
cmVzb2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgp
KSwgcmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVsc2Ugewot
ICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5N
ZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNl
dCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGJ5dGVjb2RlKTsKIAotI2RlZmluZSBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlw
ZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0
YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBG
T1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCisgICAgICAgIGF1
dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVy
biBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2Vs
aW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXIiKTsKICAgICAgICAgfTsKLSN1bmRlZiBS
RVNPTFZFX1NDT1BFX0dFTkVSQVRPUgorCisgICAgICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1
cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MiKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGdlbmVy
aWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1
cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJh
c2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMiKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zm
c2V0KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNv
ZGU7CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAg
ICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAg
ICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7Cisg
ICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICAgICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3Bl
VGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2
ZVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlw
ZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQg
YnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUg
SklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQg
Z2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIg
Z2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0YWRhdGEg
PSBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUNjsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDU7IC8vIGluY29taW5nIC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4KICAgICBj
b25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwogICAgIFVOVVNFRF9QQVJB
TShieXRlY29kZU9mZnNldEdQUik7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JP
cFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOwor
ICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQ
dHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGpp
dC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwog
Ci0gICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7Cisg
ICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgewogICAgICAg
ICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgICAg
IGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFs
T2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0
R1BSKTsKICAgICAgICAgfQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2lu
dCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmpl
Y3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRj
aHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVx
dWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0UmVzb2x2
ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAg
bW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7
CisgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBqaXQubW92ZShzY29wZUdQUiwgcmVnVDApOworICAgICAgICBqaXQubG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3Bl
RGVwdGgpKSwgcmVnVDEpOwogCi0gICAgICAgIExhYmVsIGxvb3AgPSBsYWJlbCgpOwotICAgICAg
ICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOworICAgICAgICBMYWJlbCBs
b29wID0gaml0LmxhYmVsKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIo
WmVybywgcmVnVDEpOwogICAgICAgICB7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3As
IHRoaXMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6
b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMSk7CisgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0
KTsKICAgICAgICAgfQotICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGlu
aygmaml0KTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUpIHsKQEAgLTE4ODIsMTIgKzIwNDEsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAg
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAg
ICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkuCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmpl
Y3RHUFIpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2xv
YmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2Jh
bE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwot
ICAgICAgICAgICAgbW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGRvVmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxP
YmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCBy
ZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFs
TGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKGds
b2JhbE9iamVjdEdQUiwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApA
QCAtMTg5NywxMSArMjA1NiwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2so
KSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAogICAgICAg
ICAgICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZp
cm9ubWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmly
b25tZW50KCkpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkp
LCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENs
b3N1cmVWYXI6CkBAIC0xOTA5LDcgKzIwNjgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVW
YXI6CkBAIC0xOTE5LDgzICsyMDc4LDQ1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAg
ICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkp
OwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAg
ICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwot
Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlw
ZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2Rl
KCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5k
OwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
UHJvcGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5Lmxpbmso
dGhpcyk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6
Om9mZnNldE9mUmVzb2x2ZVR5cGUoKSksIHJlZ1QwKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAg
ICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxp
bmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
LmxpbmsodGhpcyk7CisgICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlKSB7CisgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVt
aXRDb2RlKHJlc29sdmVUeXBlKTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1
bXAoKSk7CisgICAgICAgICAgICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7
CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xv
YmFsTGV4aWNhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAotICAgIHJldCgpOworICAg
IGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VI
YW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nh
c2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5r
KTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRo
dW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9SRVNPTFZFX1NDT1BF
X0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSVQ6Om9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZN
JiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9w
UmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAot
ICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlXyIg
I3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfUkVT
T0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJB
VE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29w
X3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5l
cmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFz
ZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogICAgIC8vIFRoZSBmYXN0IHBhdGggYWxyZWFkeSBwdXNoZWQgdGhlIHJldHVybiBhZGRyZXNz
LgogI2lmIENQVShYODZfNjQpCkBAIC0yMDY1LDYgKzIxODYsNyBAQCB2b2lkIEpJVDo6ZW1pdEdl
dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMjE3OCw3ICsyMzAwLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdU
MCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQpAQCAtMjE4Niw5ICsyMzA4LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKGNvbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBhcmd1bWVudEdQ
UjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKICNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQpAQCAtMjE5Niw0MSArMjMxOCw1MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUoY29uCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZl
VHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpOwogCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQo
Qnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBB
U1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVj
dGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKworICAgIGF1
dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJ
VDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6
IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0byBjbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAg
ICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBD
bG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gZ2VuZXJpY0dldEZyb21TY29wZUdlbmVy
YXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZy
b21TY29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2Nv
cGUgZ2VuZXJpYyIpOworICAgIH07CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BS
ID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAotICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsKLSAgICAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0gICAg
ICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5k
U2xvdCksIHJlZ1QwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFP
ZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7Cisg
ICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRh
dGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0jZGVmaW5lIEdFVF9GUk9N
X1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZl
VHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2Vu
ZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKEdFVF9GUk9N
X1NDT1BFX0dFTkVSQVRPUikKLSAgICAgICAgfTsKLSN1bmRlZiBHRVRfRlJPTV9TQ09QRV9HRU5F
UkFUT1IKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwotICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
LSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29s
dmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICB9CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgIGlmIChwcm9maWxlZFJlc29s
dmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1
cmVWYXJHZW5lcmF0b3IpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElT
dHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICBlbHNl
CisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0
b3IpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVu
ayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2Nv
cGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBj
b25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0
aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQg
YmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KQEAg
LTIyMzksOTkgKzIzNzAsODggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JP
cEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0g
ICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRh
YmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Cisg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRh
VGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAK
ICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJfdCBtZXRhZGF0YVN0cnVjdHVyZU9m
ZnNldCkgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG1ldGFkYXRhU3Ry
dWN0dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0g
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAg
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBh
dXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIpIHsK
KyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgcmVnVDEpOworICAgICAgICBqaXQubW92
ZShzY29wZUdQUiwgcmVnVDApOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRl
c3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKHJlZ1QxLCBT
dHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIHNsb3dDYXNl
LmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CiAgICAgfTsKIAotICAgIGF1dG8gZW1pdFZhcklu
amVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAg
YXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25X
YXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1
YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMp
OworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNH
bG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hw
b2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CiAgICAgfTsKICAgICAKLSAgICBhdXRvIGVtaXRHZXRWYXJGcm9tUG9pbnRlciA9IFsmXSAoaW50
MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAg
IH07Ci0KLSAgICBhdXRvIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyID0gWyZdIChpbnQz
Ml90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAg
fTsKLQogICAgIGF1dG8gZW1pdEdldENsb3N1cmVWYXIgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwg
R1BSUmVnIG9wZXJhbmRHUFIpIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6
ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFu
ZEdQUik7Ci0gICAgICAgIGFkZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LmxzaGlmdDY0KFRydXN0ZWRJbW0zMigz
KSwgb3BlcmFuZEdQUik7CisgICAgICAgIGppdC5hZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIp
OworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmly
b25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOwogICAgIH07CiAKLSAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKSB7CisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2Nv
cGVHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9zdHJ1Y3R1cmUpKTsgLy8gU3RydWN0
dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVj
dHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJl
c29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAg
ICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUik7IC8vIFN0cnVjdHVy
ZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1
cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNv
bHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAg
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSByZWdUMDsKICAgICAgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IG9mZnNldCA9IHJlZ1QxOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
cmVnVDI7CiAKLSAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4o
WyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgcmVnVDMpOwor
ICAgICAgICAgICAgaml0LmppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgp
IC0+IEp1bXAgeworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1Qz
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaml0LmJyYW5jaFB0cihFcXVhbCwgYmFzZSwgcmVn
VDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIG9mZnNldCk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6
b2Zmc2V0T2ZPcGVyYW5kKCkpLCBvZmZzZXQpOwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFC
TEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
KTsKLSAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxp
bmUpOwotICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICAgICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAg
ICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CisgICAg
ICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluaygmaml0KTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWdu
RXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUlu
ZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRj
aCk7CisgICAgICAgICAgICBqaXQubmVnMzIob2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5zaWdu
RXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZDY0KEJh
c2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNl
dCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVy
YW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJh
bmQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKHJlZ1QwLCByZWdUMCk7CiAg
ICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNo
ZWNrLgotICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1Qw
KSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHJl
Z1QwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGRvVmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0
T2ZPcGVyYW5kKCkpLCByZWdUMyk7CiAgICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29w
ZUdQUiwgcmVnVDMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoK
LSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
UmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTIzNDEsODYg
KzI0NjEsNjMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSks
IHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlz
Tm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQ
cm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6
Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Cisg
ICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlw
ZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNl
IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVn
VDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBqaXQubG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSksIHJlZ1Qw
KTsKKyAgICAgICAgaml0LmFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyks
IHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc0ds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
UHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGlu
ayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gaml0LmJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0
Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOwor
ICAgICAgICBub3RHbG9iYWxWYXIubGluaygmaml0KTsKKworICAgICAgICBKdW1wIG5vdEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb24gPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0
Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bi5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGppdC5icmFu
Y2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAg
ICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7CisgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluaygmaml0KTsKKyAgICAg
ICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGpp
dC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxp
bmsoJmppdCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGpp
dC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmso
JmppdCk7CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAg
ICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAg
ZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNr
aXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAogICAgIHN0YXRpY19hc3NlcnQoVmFsdWVQcm9m
aWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0gMSk7Ci0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyht
ZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAg
aml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRP
ZlByb2ZpbGUoKSkpOwogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIo
c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsK
IH0KIAotI2RlZmluZSBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBl
KSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zy
b21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAg
ICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVU
eXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsg
XAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZl
VHlwZSwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAg
ICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRP
UikKLSN1bmRlZiBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2Vu
ZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVu
Y3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNl
CiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVj
dCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERG
Ry9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVj
dHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0
KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTI0NzEsODYgKzI1NjgsNzkg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogfQogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlh
YmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19
Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJl
c3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGly
ZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBl
bWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVn
VDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0
Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJl
Z1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJs
ZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci19Ci0KIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29w
ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgR2V0UHV0SW5mbyBn
ZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7Ci0gICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiog
c3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRy
X3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEu
bV9vcGVyYW5kKTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBSZXNvbHZlVHlwZSBw
cm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZd
IChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBj
b3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBh
bnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3Bl
IGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgLy8g
U3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hl
IHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LgorICAgICAgICAg
ICAgLy8gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRo
ZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOwor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICAg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworCiAgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAKICAgICAgICAg
ICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1
YWwsIHJlZ1QwLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwot
ICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOworICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7
CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwogICAgICAgICAgICAgbmVnUHRy
KHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJl
Z1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAg
c3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAg
ICAgICAgLy8gT09QUzogd291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sg
R1BSUmVncyBpbnN0ZWFkIG9mIFZScworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29w
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAg
ICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JD
b2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0
VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0gICAgICAgICAgICBpZiAoIWlzSW5pdGlh
bGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAg
ICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSwgcmVnVDApOworCisgICAgICAg
ICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDApOworCisgICAgICAgICAgICBpZiAoIWlzSW5pdGlh
bGl6YXRpb24oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAo
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJv
dmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KLSAgICAgICAgICAgICAg
ICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNs
b3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBl
bWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3Qp
LCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdU
MCkpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCksIHJlZ1QxKTsKKyAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAg
ICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0
d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRj
aHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50
U2V0KCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVn
VDEpOworCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7
CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwKSk7CisKKyAgICAgICAg
ICAgIC8vIE9PUFM6IFdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIGEg
R1BSUmVnIGZvciB2YWx1ZS4KKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFy
OgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRT
bG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJl
Z1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3Jp
dGVXYXRjaHBvaW50KHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJbmRleChyZWdUMCwgcmVn
VDIsIFRpbWVzRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
KSk7CisKKyAgICAgICAgICAgIC8vIE9PUFM6IFdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNp
b24gdGhhdCB0b29rIGEgR1BSUmVnIGZvciBvd25lci92YWx1ZS4KICAgICAgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yNTY0LDU4ICsyNjU0LDUyIEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgfQogICAg
IH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAg
SnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEds
b2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1p
YywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHkt
aW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAgICAgICBpc0dsb2JhbExleGljYWxWYXIu
bGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9i
YWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNl
IFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAvLyBJZiBh
bnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1cmVWYXIvIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21waWxlIHRoaW5ncworICAgIC8vIHRoYXQgd2F5
IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2UndmUgcHJvdmVuIHRoYXQgaXMgdGhlIHR5cGUg
d2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJlVmFyLAorICAgIC8vIGFsbCBDb2RlQmxvY2tz
IHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFyCisgICAgLy8gaWYgdGhlIHZhciBpbmplY3Rp
b24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYgaXQgaXMgZmlyZWQsIHRoZW4gd2UgdGFrZSB0
aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0CisgICAgLy8gbWF0dGVyIHdoYXQgdHlwZSB3ZSBh
cmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZh
cikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKFJlc29s
dmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7
CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1QwKTsKICAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBl
IGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
ICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7
CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCisgICAgICAgIEp1bXAgbm90R2xv
YmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFy
KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsodGhpcyk7CisKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKKyAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCiAgICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAK
ICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAogICAgICAgICBza2lwVG9FbmQubGluayh0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCkBA
IC0yNjI0LDE4ICsyNzA4LDIxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUo
Y29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsK
LSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJv
ZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2sp
Lm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzYXcg
YSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBDb2RlQmxvY2tzIGFyZSBndWFyYW50ZWVkCisg
ICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZhci4KICAgICAgICAgSklUU2xvd1BhdGhDYWxs
IHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19z
dHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAgICAgICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rp
b24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgICAgIEFT
U0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwot
ICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4
KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBBU1NFUlQobV91bmxpbmtlZENvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlv
bik7CiAKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3Vt
ZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7CkBAIC0yNjUyLDcgKzI3MzksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsK
QEAgLTI3MDEsNyArMjc4OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50
cyhjb24KICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDAp
OwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZz
ZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7Ci0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNzU5LDcgKzI4NDYsNiBA
QCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2ln
bmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKQEAgLTI3NjcsNyArMjg1Myw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb24KICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJu
YWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1Qw
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNzg5LDcgKzI4NzUsNiBAQCB0ZW1wbGF0ZSB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JOZXh0PigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CkBAIC0yODA1LDcgKzI4OTAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiAgICAgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIG1vZGUgc2V0IHdlIHRl
bmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2UgaXQgaWYgd2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJ
bnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgeworICAgIGlmIChieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKICAgICAgICAgR1BSUmVnIGVu
dW1lcmF0b3JHUFIgPSByZWdUMzsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVt
ZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJy
YW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6bW9kZVNldE9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKH5KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CkBAIC0yODQ3LDc4ICsyOTMyLDg3IEBA
IHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0
X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvckdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51
bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7
CiAKLSAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5lRW51bWVy
YXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gyID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gyOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZh
bFJlZ2lzdGVyczo6c2NyYXRjaDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihtb2RlLCBzY3JhdGNoMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5h
bWUsIHByb3BlcnR5R1BSKTsKIAotICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRh
ZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1l
dGFkYXRhKCksIHNjcmF0Y2gyKTsKKyAgICBvcjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7CisgICAg
c3RvcmU4VG9NZXRhZGF0YShzY3JhdGNoMiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFs
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwoYmFzZUdQUikpOwogICAgIC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQg
dmFsdWUuCi0gICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9u
WmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4
ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgIEp1
bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHNjcmF0Y2gz
LCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKIAogICAgIC8vIENoZWNrIHRo
ZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1Qy
KTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDMpOwotICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
U3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgc2NyYXRjaDEpOworICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNo
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKIAogICAgIC8v
IENvbXB1dGUgdGhlIG9mZnNldC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBy
ZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgc2NyYXRjaDIpOwogICAg
IC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUg
c3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFj
Y2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwg
cmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7Ci0gICAgbG9hZDY0
KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwotCisgICAg
SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBB
ZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNh
cGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRj
aDIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQs
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgZG9u
ZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxp
bmUKICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbmVnMzIocmVnVDMpOwotICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QzLCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2VHUFIpOworICAgIHN1YjMyKEFkZHJlc3Moc2Ny
YXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBuZWczMihzY3JhdGNoMik7CisgICAgc2lnbkV4dGVuZDMy
VG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKICAgICBjb25zdGV4cHIgaW50cHRyX3Qgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5ID0gb2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
ICogc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgIGxv
YWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkpLCByZXN1bHRHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRj
aDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CiAgICAg
ZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgc3RydWN0dXJlTWlzbWF0Y2gubGluayh0
aGlzKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2Vu
dW1lcmF0b3JNZXRhZGF0YSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1p
c21hdGNoKSwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBpc05vdE93blN0cnVjdHVyZU1vZGUubGlu
ayh0aGlzKTsKLSAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsK
KyAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBzY3JhdGNoMywgVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKICAgICAv
LyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgs
IHByb3BlcnR5R1BSKTsKIAogICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOwotICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaDEp
OwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVnVDIpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBz
dHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1f
Z2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5Mjcs
MTAgKzMwMjEsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfCiAg
ICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVt
ZXJhdG9yR2V0QnlWYWw+KCksIGl0ZXIpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2Rl
VHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9lbnVt
ZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdl
bmVyYWxDYXNlKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBTbG93UGF0
aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1w
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBCeXRlY29kZSYg
Ynl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQogewotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVj
b2RlLm1fZW51bWVyYXRvcjsKQEAgLTI5MzksNyArMzAzMiw5IEBAIHZvaWQgSklUOjplbWl0X2Vu
dW1lcmF0b3JfaGFzX3Byb3BlcnR5SW0KICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QwKTsKLSAgICBvcjgocmVnVDAsIEFic29s
dXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZy
b21NZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0
b3JNZXRhZGF0YSgpLCByZWdUMSk7CisgICAgb3IzMihyZWdUMCwgcmVnVDEpOworICAgIHN0b3Jl
OFRvTWV0YWRhdGEocmVnVDEsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9m
RW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0
MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93
blN0cnVjdHVyZU1vZGUpKSk7CiAKQEAgLTMwMjgsNiArMzEyMywxMyBAQCB2b2lkIEpJVDo6ZW1p
dFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
bi5saW5rKHRoaXMpOwogfQogCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3du
ZXIpCit7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5j
aCh2bSgpLCBvd25lciwgc2VsZWN0U2NyYXRjaEdQUihvd25lcikpOworICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwg
b3duZXIpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQzLDcg
KzE1NDMsNyBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAKIHZv
aWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwg
YXQgIiwgY2FsbExpbmtJbmZvLmZhc3RQYXRoU3RhcnQoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQ
b2ludGVyKCZjYWxsTGlua0luZm8pKTsKICAgICAKICAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlu
a0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9u
IDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0
RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVO
YW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBl
bmQKLQogICAgICAgICBtZXRhZGF0YSh0MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDAp
CiAgICAgICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBA
IC0xMDIzLDcgKzEwMTksNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3Qs
IGluCiAgICAgICAgICMgTWV0YWRhdGEgaW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRl
Z2VyT3BlcmF0aW9uKHQyLCAuc2xvdykKICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0
W2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQp
CisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9m
aWxlSW50LCB0MSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4
OSwyMiArMTA4NSwxOCBAQCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBP
cE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAK
LSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9w
TmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9i
aXRzW3Q1XQotICAgIGVuZAotCiAgICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29wZXJh
bmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAg
ICBiaW5lcSB0MSwgSW50MzJUYWcsIC5vcE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4
N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9m
aWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0
ZSwgQXJpdGhQcm9maWxlSW50LCB0NSwgdDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAu
b3BOZWdhdGVTcmNOb3RJbnQ6CiAgICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cK
ICAgICB4b3JpIDB4ODAwMDAwMDAsIHQxCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJv
ZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQ
cm9maWxlTnVtYmVyLCB0NSwgdDMpCiAgICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xv
dzoKQEAgLTExMTUsMTAgKzExMDcsNiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3Rv
cmUob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRv
dWJsZU9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwg
b3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVy
bikKLSAgICAgICAgbWFjcm8gYXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlw
ZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRo
UHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwg
dDIpCiAgICAgICAgIGdldChtX3JocywgdDIpCiAgICAgICAgIGdldChtX2xocywgdDApCkBAIC0x
MTI2LDcgKzExMTQsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9w
CiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAg
ICAgICAgIGJpbmVxIHQyLCBJbnQzMlRhZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0Mywg
SW50MzJUYWcsIC5vcDJOb3RJbnQKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUlu
dEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJp
dGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAg
IGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAg
IGRpc3BhdGNoKCkKQEAgLTExMzYsMTIgKzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21T
dG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAg
ICAgICAgYmliIHQzLCBMb3dlc3RUYWcsIC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAgICAgYmlu
ZXEgdDMsIEludDMyVGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxl
TnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQog
ICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAg
ICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmls
ZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0
cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJl
YWR5OgogICAgICAgICBnZXQobV9kc3QsIHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApA
QCAtMTE1Myw3ICsxMTQxLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1l
LCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBz
ZWNvbmQgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikK
ICAgICAgICAgYmlhIHQzLCBMb3dlc3RUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShB
cml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJk
cyB0MCwgZnQwCiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJh
dGlvbihmdDEsIGZ0MCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyODE4NjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDQxLDggKzQ0MSwxMyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9v
cCgpCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQogICAgICAgICAgICAgY0NhbGwyKF9sbGludF9s
b29wX29zcikKICAgICAgICAgICAgIGJ0cHogcjAsIC5yZWNvdmVyCi0KICAgICAgICAgICAgIG1v
dmUgcjEsIHNwCisKKyAgICAgICAgICAgICMgQmFzZWxpbmUgdXNlcyBMTEludCdzIFBCIHJlZ2lz
dGVyIGZvciBpdHMgSklUIGNvbnN0YW50IHBvb2wuCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxv
Y2tbY2ZyXSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9qaXREYXRhW1BCXSwg
UEIKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6SklURGF0YTo6bV9qaXRDb25zdGFudFBv
b2xbUEJdLCBQQgorCiAgICAgICAgICAgICBpZiBBUk02NEUKICAgICAgICAgICAgICAgICBsZWFw
IEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChj
b25zdGV4cHIgR2F0ZTo6bG9vcE9TUkVudHJ5KSAqIFB0clNpemUsIGEyCiAgICAgICAgICAgICAg
ICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKQEAgLTEw
NTYsMTAgKzEwNjEsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3Ry
CiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlv
bikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAg
bWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxl
OjptX2JpdHNbdDJdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAg
ICAgICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpA
QCAtMTA2OSw3ICsxMDcwLDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0
LCBpbgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51
bWJlclRhZywgdDEKICAgICAgICAgc3RvcmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBk
YXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0
aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAg
ZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMTM0LDExICsxMTM1LDYgQEAgZW5kKQogCiAK
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFBy
b2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAg
Z2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwg
dDMpCiAgICAgbWV0YWRhdGEodDEsIHQyKQpAQCAtMTE0NiwxMiArMTE0MiwxMiBAQCBsbGludE9w
V2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZm
ZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAg
IHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0
aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgIHJldHVybih0
MykKIC5vcE5lZ2F0ZU5vdEludDoKICAgICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNs
b3cKICAgICB4b3JxIDB4ODAwMDAwMDAwMDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2Zp
bGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVn
YXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAKIC5vcE5l
Z2F0ZVNsb3c6CkBAIC0xMTY0LDEwICsxMTYwLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9y
ZShvcGNvZGVOYW1lLCBvcAogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUl
LCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0
dXJuKQogICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0
eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5k
Ci0KICAgICAgICAgZ2V0KG1fcmhzLCB0MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCkBAIC0xMTc3LDcgKzExNjks
NyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdl
dChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5z
bG93LCB0MikKIAotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50
LCB0NSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTg3
LDEwICsxMTc5LDEwIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AK
ICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRh
ZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxl
TnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3Ry
dWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0MikKICAgICAgICAgam1wIC5vcDFO
b3RJbnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQ
cm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0MikKICAgICAgICAgY2kyZHMgdDEs
IGZ0MQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEy
MDQsOSArMTE5Niw5IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AK
IAogICAgIC5vcDJOb3RJbnQ6CiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5
IGFuIGludCwgdGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KLSAgICAgICAgZ2V0KG1fZHN0
LCB0MikKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBwcm9maWxl
KEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxl
KG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDIpCisgICAgICAgIGdl
dChtX2RzdCwgdDIpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJU
YWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgxODY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTU2LDYgKzI1NTYsMTcgQEAgbWFjcm8gbm90U3VwcG9ydGVk
KCkKICAgICBlbmQKIGVuZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29k
ZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwg
VW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxv
YWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0
ZW1wCisgICAgb3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQK
KwogLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0X1dJTiBjb25kaXRpb24g
aGVyZSwgc2luY2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUgZmFsc2Ugb24gV2luZG93
cwogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNgogaWYg
V0VCQVNTRU1CTFkgYW5kIG5vdCBYODZfNjRfV0lOCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShyZXZpc2lvbiAyODE4
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDEwIEBAIHB1YmxpYzoKICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyKCkgPSBkZWZhdWx0OwogCiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJ
ZGVudGlmaWVyIGNyZWF0ZUZyb21DZWxsKEpTQ2VsbCogaWRlbnRpZmllcik7Ci0gICAgc3RhdGlj
IGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgc3RhdGljIGlubGlu
ZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhDb2RlQmxvY2sqLCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIGNvbnN0
IElkZW50aWZpZXImKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAg
ICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAg
IHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBDYWNoZWFi
bGVJZGVudGlmaWVyIGNyZWF0ZUZyb21SYXdCaXRzKHVpbnRwdHJfdCByYXdCaXRzKSB7IHJldHVy
biBDYWNoZWFibGVJZGVudGlmaWVyKHJhd0JpdHMpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGlu
ZXMuaAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1
LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxv
Y2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCiB7CiAgICAgcmV0dXJuIGNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhjb2RlQmxvY2ssIGkuaW1wbCgpKTsK
IH0KIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+
CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBj
b2RlQmxvY2stPmhhc0lkZW50aWZpZXIodWlkKSk7CiAgICAgcmV0dXJuIENhY2hlYWJsZUlkZW50
aWZpZXIodWlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgxODY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgw
LDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNp
ZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0
aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVl
IG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5t
X2FyaXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0
YS5tX2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAg
QVNTRVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9
CiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAg
c3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxs
KTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29u
c3RydWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4
ZWN1dGFibGVCYXNlOwpJbmRleDogU291cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvQmFnLmgJKHJldmlzaW9uIDI4MTg2OCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0JhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwyMCBAQCBwdWJsaWM6CiAgICAgICAg
IG90aGVyLm1faGVhZCA9IG51bGxwdHI7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICBCYWcmIG9wZXJhdG9yPShCYWc8VCwgVT4mJiBvdGhlcikKKyAgICB7CisgICAgICAg
IGlmICh1bndyYXBwZWRIZWFkKCkgPT0gb3RoZXIudW53cmFwcGVkSGVhZCgpKQorICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOworCisgICAgICAgIEJhZyBkZXN0cm95OworICAgICAgICBkZXN0cm95
Lm1faGVhZCA9IHVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgbV9oZWFkID0gb3RoZXIudW53cmFw
cGVkSGVhZCgpOworICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOworCisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisKICAgICB+QmFnKCkKICAgICB7CiAgICAgICAgIGNsZWFyKCk7
CkluZGV4OiBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHJldmlzaW9uIDI4MTg2OCkKKysr
IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTc3
MCwxNyArNzcwLDE4IEBAIGVuZAogCiAjIEZJWE1FOiBuZWVkIHRvIGZpeCBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4NzAzIHRvIGVuYWJsZSB0aGlzIG9uIExpbnV4
L01JUFMuCiBkZWYgcnVuQnl0ZWNvZGVDYWNoZUltcGwob3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zLCAqYWRkaXRpb25hbEVudikKLSAgICBpZiAoJGhvc3RPUyA9PSAiZGFyd2luIikKLSAgICAg
ICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlIgotICAgIGVsc2lmICgkaG9zdE9TID09
ICJsaW51eCIgJiYgJGFyY2hpdGVjdHVyZSAhPSAibWlwcyIpCi0gICAgICAgIGZpbGVUZW1wbGF0
ZSA9ICJieXRlY29kZS1jYWNoZVhYWFhYWCIKLSAgICBlbHNlCi0gICAgICAgIHNraXAKLSAgICAg
ICAgcmV0dXJuCi0gICAgZW5kCisgICAgIyBPT1BTCisgICAgI2lmICgkaG9zdE9TID09ICJkYXJ3
aW4iKQorICAgICMgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlIgorICAgICNlbHNp
ZiAoJGhvc3RPUyA9PSAibGludXgiICYmICRhcmNoaXRlY3R1cmUgIT0gIm1pcHMiKQorICAgICMg
ICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlWFhYWFhYIgorICAgICNlbHNlCisgICAg
IyAgICBza2lwCisgICAgIyAgICByZXR1cm4KKyAgICAjZW5kCiAKLSAgICBvcHRpb25zID0gQkFT
RV9PUFRJT05TICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMgKyAk
dGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25zCi0gICAgYWRkUnVuQ29tbWFuZCgiYnl0ZWNvZGUt
Y2FjaGUiLCBbInNoIiwgKHBhdGhUb0hlbHBlcnMgKyAiYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxw
ZXIuc2giKS50b19zLCBmaWxlVGVtcGxhdGUudG9fcywgKnZtQ29tbWFuZCwgJGJlbmNobWFyay50
b19zXSArIG9wdGlvbnMsIHNpbGVudE91dHB1dEhhbmRsZXIsIHNpbXBsZUVycm9ySGFuZGxlciwg
KmFkZGl0aW9uYWxFbnYpCisgICAgI29wdGlvbnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9w
dGlvbnMKKyAgICAjYWRkUnVuQ29tbWFuZCgiYnl0ZWNvZGUtY2FjaGUiLCBbInNoIiwgKHBhdGhU
b0hlbHBlcnMgKyAiYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIuc2giKS50b19zLCBmaWxlVGVt
cGxhdGUudG9fcywgKnZtQ29tbWFuZCwgJGJlbmNobWFyay50b19zXSArIG9wdGlvbnMsIHNpbGVu
dE91dHB1dEhhbmRsZXIsIHNpbXBsZUVycm9ySGFuZGxlciwgKmFkZGl0aW9uYWxFbnYpCiBlbmQK
IAogZGVmIHJ1bkJ5dGVjb2RlQ2FjaGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437307</attachid>
            <date>2021-09-03 13:48:23 -0700</date>
            <delta_ts>2021-09-03 16:20:30 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>422191</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL3Byb3h5LXNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L3N0cmVzcy9wcm94eS1zZXQuanMJKHJldmlzaW9uIDI4MjAxNikKKysrIEpTVGVzdHMvc3RyZXNz
L3Byb3h5LXNldC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIGZ1bmN0aW9u
IGFzc2VydChiKSB7CiAKICAgICBsZXQgY2FsbGVkID0gZmFsc2U7CiAgICAgbGV0IGhhbmRsZXIg
PSB7Ci0gICAgICAgIHNldDogZnVuY3Rpb24odGhlVGFyZ2V0LCBwcm9wTmFtZSwgdmFsdWUsIHJl
Y2VpdmVyKSB7CisgICAgICAgIHNldDogZnVuY3Rpb24gdGhlU2V0KHRoZVRhcmdldCwgcHJvcE5h
bWUsIHZhbHVlLCByZWNlaXZlcikgewogICAgICAgICAgICAgYXNzZXJ0KHRoZVRhcmdldCA9PT0g
dGFyZ2V0KTsKICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7CiAgICAgICAgICAgICB0aGVUYXJn
ZXRbcHJvcE5hbWVdID0gdmFsdWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTgzMiw2ICs4MzIsNyBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzLmgKICAg
ICBqaXQvQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaAorICAgIGppdC9CYXNlbGluZUpJVENvZGUu
aAogICAgIGppdC9DQ2FsbEhlbHBlcnMuaAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgK
ICAgICBqaXQvRXhlY3V0YWJsZU1lbW9yeUhhbmRsZS5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291
cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYxOSw2ICs2MTksNyBAQCBpbnRlcnByZXRlci9T
aGFkb3dDaGlja2VuLmNwcAogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAogCiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAoraml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKIGppdC9CYXNlbGluZUpJ
VFBsYW4uY3BwCiBqaXQvQmluYXJ5U3dpdGNoLmNwcAogaml0L0NDYWxsSGVscGVycy5jcHAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtOTAwLDYgKzkwMCw3IEBACiAJCTUyQ0QwRjVEMjI0MkY1Njkw
MDRBMThBNSAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3Vu
ZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKIAkJNTJDRDBGNUUyMjQyRjU2OTAwNEExOEE1IC8qIEph
dmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjY4MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZn
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0Qw
RjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLzsgfTsKKwkJNTJERDAwMDgyNkUw
MzlCOTAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2Vs
aW5lSklUQ29kZS5oICovOyB9OwogCQk1MkVFRDc5NDI0OTJCODcwMDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUyRUVENzkzMjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovOyB9
OwogCQk1MkY2QzM1RTFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZD
MzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyB9
OwogCQk1MzBBNjZCOTFGQTNFNzhCMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCMTFGQTNF
NzdBMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gKi87IH07CkBAIC0zNjY4LDYgKzM2
NjksOCBAQAogCQk1MkNEMEY2NDIyNDJGNTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5l
eGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRm
Zy5jcHA7IHBhdGggPSBkZmcvdGVzdGRmZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlDODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSBmb28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmFzZWxpbmVKSVRDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUyREQwMDA3MjZFMDM5QjQwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQmFzZWxpbmVKSVRDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMyNDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3ds
aXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjU4LDYgKzYy
NjEsOCBAQAogCQkJCTZCNzY3RTdBMjY3OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oICovLAogCQkJCTcyMzk5OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJ
VFBsYW4uY3BwICovLAogCQkJCTcyMzk5OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJ
VFBsYW4uaCAqLywKKwkJCQk1MkREMDAwNzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRD
b2RlLmNwcCAqLywKKwkJCQk1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRD
b2RlLmggKi8sCiAJCQkJMEY2NEIyNkYxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5j
cHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICov
LAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8s
CkBAIC05Njk5LDYgKzk3MDQsNyBAQAogCQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBE
RkdGbG93TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMg
LyogREZHRmx1c2hlZEF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3
NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZF
MDM5QjkwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkREODE1MUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2OUNDODkxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbklu
Zm8uaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAs
OSArMjkwLDEwIEBAIG9wX2dyb3VwIDpQcm9maWxlZEJpbmFyeU9wLAogICAgICAgICBsaHM6IFZp
cnR1YWxSZWdpc3RlciwKICAgICAgICAgcmhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9w
ZXJhbmRUeXBlczogT3BlcmFuZFR5cGVzLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVk
CiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFy
aXRoUHJvZmlsZQorICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcF9ncm91cCA6VmFsdWVQcm9maWxlZEJpbmFyeU9wLApAQCAtMzUxLDkgKzM1Miwx
MCBAQCBvcF9ncm91cCA6VW5hcnlJblBsYWNlUHJvZmlsZWRPcCwKICAgICBdLAogICAgIGFyZ3M6
IHsKICAgICAgICAgc3JjRHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIHByb2ZpbGVJbmRl
eDogdW5zaWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2Zp
bGU6IFVuYXJ5QXJpdGhQcm9maWxlCisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFBy
b2ZpbGUuKgogICAgIH0KIAogb3AgOnRvX29iamVjdCwKQEAgLTM4NCw5ICszODYsMTAgQEAgb3Ag
Om5lZ2F0ZSwKICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmQ6
IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgcmVzdWx0VHlwZTogUmVzdWx0VHlwZSwKKyAgICAg
ICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAg
ICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUsCisgICAgICAgIGFyaXRoUHJvZmls
ZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3AgOm5vdCwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJh
bmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNiArNzMsMjggQEAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JJbXBs
KEJ5dGVjbwogICAgICAgICByZXR1cm4gJm1ldGFkYXRhLm1fcHJvZmlsZTsKIH0KIAordGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgordWludHB0cl90IHZhbHVlUHJvZmlsZU9mZnNldEZvcih1
bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCit7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNrcG9pbnRJ
bmRleCk7CisgICAgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0
b3Jfb3BlbikgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAgICAgICBj
YXNlIE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVu
OjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRQcm9maWxl
KCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKworICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBv
cF9pdGVyYXRvcl9uZXh0KSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7Cisg
ICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0OiByZXR1cm4gQnl0ZWNvZGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRSZXN1bHRQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJ
dGVyYXRvck5leHQ6OmdldERvbmU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9m
RG9uZVByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJl
dHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAg
IGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgCisgICAgICAgIHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mUHJvZmls
ZSgpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZU1ldGFkYXRhPgogYm9vbCBoYXNW
YWx1ZVByb2ZpbGVGb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNr
cG9pbnRJbmRleCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDEx
ICsxMTQsNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICBSRUxFQVNF
X0FTU0VSVCghaXNPbkxpc3QoKSk7CiB9CiAKLUNvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCi17Ci0gICAgcmV0dXJuIENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwot
fQotCiBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNs
b3dQYXRoU3RhcnQoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RhdGFJQygpKTsKQEAgLTIy
NSw2ICsyMjAsMTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldE1heEFyZ3VtZW50Q291bnRJbgog
ICAgIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSB2YWx1ZTsKIH0KIAorQ29kZUxv
Y2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0
KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVjdCgpICYmIGlzVGFpbENhbGwoKSk7Cisg
ICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPih1LmNv
ZGVJQy5tX2Zhc3RQYXRoU3RhcnQpOworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFr
KFZNJiB2bSkKIHsKICAgICBhdXRvIGhhbmRsZVNwZWNpZmljQ2FsbGVlID0gWyZdIChKU0Z1bmN0
aW9uKiBjYWxsZWUpIHsKQEAgLTI5OCwyMyArMjk5LDExIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpz
ZXRGcmFtZVNodWZmbGVEYXRhKGMKICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0
KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0
UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBw
cmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0
YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJl
cGFyZUZvclRhaWxDYWxsKQogewotICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7Ci0gICAg
aWYgKGlzRGF0YUlDKCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BS
ICE9IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKLSAgICAgICAgdS5kYXRh
SUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7Ci0gICAgfQotCi0gICAgYXV0
byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAg
fSk7Ci0KICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogCi0gICAgaWYgKGlz
RGF0YUlDKCkpIHsKKyAgICBpZiAodXNlRGF0YUlDID09IFVzZURhdGFJQzo6WWVzKSB7CiAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hSZWdpc3RlcigpOwogICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRP
ZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7IAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ29Q
b2x5bW9ycGhpYzsKQEAgLTMyMyw3ICszMTIsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplCiAgICAgICAgICAgICBnb1BvbHltb3JwaGljID0gaml0LmJyYW5jaFRl
c3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihwb2x5bW9ycGhpY0NhbGxlZU1hc2spKTsKICAgICAgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIs
IGNhbGxlZUdQUikpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAg
ICAgICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgp
OwogICAgICAgICAgICAgZ29Qb2x5bW9ycGhpYy5saW5rKCZqaXQpOyAvLyBQb2x5bW9ycGhpYyBz
dHViIGhhbmRsZXMgdGFpbCBjYWxsIHN0YWNrIHByZXAuCiAgICAgICAgICAgICBqaXQuZmFySnVt
cChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1vbm9tb3Jw
aGljQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKQEAgLTMzNiwxNCArMzI1LDE2
IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51
bGxwdHIpKSk7CiAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGw7Ci0gICAgICAgIGlm
IChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAg
IHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyVGFpbENh
bGwoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJDYWxsKCk7
CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgdS5j
b2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0lu
dGVybmFsUHRyVGFnPihjYWxsKTsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbGVlTG9jYXRp
b24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2sp
OworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKICAgICAgICAg
fSk7CiAgICAgfQogCkBAIC0zNTMsMTMgKzM0NCwzNCBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgQ2FsbExpbmtJbmZvOjplCiBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKCFpc1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2Fs
bGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgbnVsbHB0cik7CisgICAgc2V0VXNl
c0RhdGFJQ3ModXNlRGF0YUlDKTsKKworICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwor
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxM
aW5rSW5mb0dQUik7CisgICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExp
bmtJbmZvR1BSOworICAgIH0KKworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGpp
dCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBu
dWxscHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1p
dFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgV1RGTW92
ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5v
KTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgSW52
YWxpZEdQUlJlZywgVXNlRGF0YUlDOjpObywgaXNUYWlsQ2FsbCgpLCBXVEZNb3ZlKHByZXBhcmVG
b3JUYWlsQ2FsbCkpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIs
IEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJ
bmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51
bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCBm
YWxzZSwgbnVsbHB0cik7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0lu
Zm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4g
cHJlcGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQ
UiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRy
LCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwg
V1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKIH0KIAogdm9pZCBDYWxsTGlua0luZm86OmVt
aXRTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0KQpAQCAtMzY5LDE3ICszODEsMzAg
QEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIAogICAgIGppdC5jYWxs
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENh
bGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKK3ZvaWQgQ2FsbExpbmtJbmZv
OjplbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUikKK3sKKyAgICBqaXQubW92ZShjYWxsTGlua0luZm9HUFIsIEdQUkluZm86OnJl
Z1QyKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIs
IG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworfQor
Cit2b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2Fs
bExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlu
a2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIHNldFVwQ2FsbCh1bmxpbmtlZENh
bGxMaW5rSW5mby5jYWxsVHlwZSwgY2FsbGVlR1BSKTsKKyAgICBtX2RvbmVMb2NhdGlvbiA9IHVu
bGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBpZiAodW5saW5rZWRDYWxsTGlu
a0luZm8uZnJhbWVTaHVmZmxlRGF0YSkKKyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFr
ZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1l
U2h1ZmZsZURhdGEpOyAvLyBPT1BTOiB0aW1lIGZvciByZWYgY291bnRpbmc/CisgICAgc2V0VXNl
c0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BS
ID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdl
dENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWRDb2RlPEpT
RW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQ
YXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxs
KCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CiAKLSAgICBhdXRvIGZh
c3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKLSAgICB9KTsK
LQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihj
YWxsKTsKQEAgLTM5Nyw3ICs0MjIsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRh
aWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBq
aXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1f
ZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihm
YXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwogICAgIH0p
OwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwgdGhpcyBpcyBhIGp1bXAgdG8g
dGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsMTEg
QEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIHN0cnVjdCBD
YWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvOworCiBj
bGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5r
SW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0gQ2FsbFR5cGUg
OiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAgICAgQ2FsbFZh
cmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2NhbGxlZUdQUiA9
IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMoVk0mLCBVbmxp
bmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlR1BS
OyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsKQEAgLTE3Mywx
MyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8q
LCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBh
cmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYs
IEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERh
dGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQ
YXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVl
R1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BS
UmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkg
V0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVs
cGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAgICAgdm9pZCBl
bWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBzdGF0aWMgdm9pZCBlbWl0RGF0
YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsK
ICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wgaXNEYXRhSUMoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9PSBVc2VEYXRh
SUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9hbGxvd1N0
dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsyNDksNiBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAotICAgIEpJVFN0dWJSb3V0aW5l
KiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zbG93U3R1Yi5nZXQoKTsKLSAg
ICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2hhc1Nl
ZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsKICAgICB9CiAKLSAgICB1aW50
MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAg
ewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX21heEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJfdCBtYXhBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVibGljOgogICAgIH0KIAogcHJp
dmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRo
U3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0
aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Rv
bmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9z
bG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlvblR5cGUgewpAQCAtMzk3LDYg
KzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0lu
dGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxvY2F0aW9uOwogICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9zbG93UGF0aFN0YXJ0Owor
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0
aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAKQEAgLTQyNCw2ICs0MjgsMTMg
QEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaQogICAgIHJldHVybiBj
YWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0lu
Zm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsgLy8gQ3VycmVudGx5LCBvbmx5
IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxseSBwcm9kdWNlIGEgQ29kZU9y
aWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOworICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZsZURhdGE7Cit9OworCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjgyMDE2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3MCw3ICszNzAsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0
cnVjdHVyZSogCiAvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5rZWQgYnl0ZWNvZGUg
Z2VuZXJhdGlvbi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdlbmVyYXRlIGNvbnRy
b2wKIC8vIGZsb3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFzb24gZm9yIHRoaXMg
aXMgd2UgcmVseSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2FtZSBmb3IKIC8vIGFs
bCB0aGUgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2UgcmVseSBvbiB0aGlz
IGZhY3QgYnkgY2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKLS8vIGluc2lkZSBVbmxpbmtl
ZENvZGVCbG9jay4KKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4gQWxzbywgQmFzZWxpbmUg
SklUIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5rZWRD
b2RlQmxvY2ssCisvLyBzbyB0aGUgYnl0ZWNvZGUgbXVzdCByZW1haW4gdGhlIHNhbWUgYmV0d2Vl
biBDb2RlQmxvY2tzIHNoYXJpbmcgYW4gVW5saW5rZWRDb2RlQmxvY2suCiBib29sIENvZGVCbG9j
azo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKICAgICBKU1Njb3BlKiBz
Y29wZSkKIHsKQEAgLTQ2Niw2ICs0NjcsMTkgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgUwogICAgICAgICBicmVhazsgXAogICAgIH0KIAorI2RlZmluZSBMSU5LX1dJ
VEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAg
ICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0
aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5t
X3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktf
V0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAg
ICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJp
dGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlLT51bmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5t
X3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisKICAgICBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25TdHJlYW0gPSBpbnN0cnVjdGlvbnMoKTsKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uIDogaW5zdHJ1Y3Rpb25TdHJlYW0pIHsKICAg
ICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKQEAgLTUy
OCwxNCArNTQyLDE0IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMK
ICAgICAgICAgTElOSyhPcENyZWF0ZVByb21pc2UpCiAgICAgICAgIExJTksoT3BDcmVhdGVHZW5l
cmF0b3IpCiAKLSAgICAgICAgTElOSyhPcEFkZCkKLSAgICAgICAgTElOSyhPcE11bCkKLSAgICAg
ICAgTElOSyhPcERpdikKLSAgICAgICAgTElOSyhPcFN1YikKLQotICAgICAgICBMSU5LKE9wTmVn
YXRlKQotICAgICAgICBMSU5LKE9wSW5jKQotICAgICAgICBMSU5LKE9wRGVjKQorICAgICAgICBM
SU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BBZGQpCisgICAgICAgIExJTktfV0lUSF9C
SU5BUllfQVJJVEhfUFJPRklMRShPcE11bCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklU
SF9QUk9GSUxFKE9wRGl2KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUo
T3BTdWIpCisKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BOZWdhdGUp
CisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wSW5jKQorICAgICAgICBM
SU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcERlYykKIAogICAgICAgICBMSU5LKE9wSm5l
cVB0cikKIApAQCAtNzg5LDYgKzgwMyw3NCBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRp
b25Db21tb24oVk0mCiAgICAgbV9vd25lckVkZ2Uuc2V0KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlOjpjcmVhdGUodm0sIHRoaXMpKTsKIH0KIAordm9pZCBDb2RlQmxvY2s6OnNl
dHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUp
Cit7CisgICAgc2V0SklUQ29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAg
IGNvbnN0IGF1dG8mIGppdENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsK
KyAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAg
ICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgo
aGFuZGxlci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAg
ICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7
CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0Vt
cHR5KCkpOworICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8
dm9pZCo+KGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAg
ICAgICAgICAgIHN3aXRjaCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25z
dGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1f
aml0Q29uc3RhbnRQb29sW2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExp
bmtJbmZvOiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2Vk
Q2FsbExpbmtJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnku
cGF5bG9hZCk7CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBq
aXREYXRhLm1fY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5m
by5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgLy8gT09QUzogZG9uJ3QgaGFyZGNv
ZGUgdGhlc2UgcmVnaXN0ZXJzIGxpa2UgdGhpcy4KKyAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPmluaXRpYWxpemVEYXRhSUModm0oKSwgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUkluZm86
OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENv
bnN0YW50UG9vbFtpXSA9IGNhbGxMaW5rSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbzogeworICAgICAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8mIHVubGlua2VkU3R1YkluZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyo+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IGppdERhdGEubV9zdHViSW5mb3MuYWRkKHVubGlua2VkU3R1YkluZm8uYWNj
ZXNzVHlwZSwgQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAg
ICAgICAgICAgICAgICBzdHViSW5mby0+aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKHRoaXMsIHVubGlua2VkU3R1YkluZm8pOworICAgICAgICAgICAgICAgIGppdERhdGEu
bV9qaXRDb25zdGFudFBvb2xbaV0gPSBzdHViSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpG
dW5jdGlvbkRlY2w6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAgICAgIGppdERhdGEu
bV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkRlY2woaW5kZXgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBv
b2w6OlR5cGU6OkZ1bmN0aW9uRXhwcjogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZCk7CisgICAgICAgICAgICAg
ICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIEdsb2Jh
bENvZGU6CisgICAgY2FzZSBNb2R1bGVDb2RlOgorICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAg
IG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRnVuY3Rpb25Db2RlOgorICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0
IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCisgICAg
ICAgIC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRpb24uCisgICAgICAgIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwoKSkgJiYgREZHOjpt
aWdodElubGluZUZ1bmN0aW9uKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIENv
ZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC0zMDc5LDcg
KzMxNjEsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNp
ZiBFTkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJl
dHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJ
VDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMyOTUsMTMgKzMz
NzcsMTMgQEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAg
IHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0
dXJuICZwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAg
ICAgIHJldHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CiAgICAgY2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigp
Lm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAg
ICByZXR1cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
KyAgICAgICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJv
ZmlsZTsKICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BE
aXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtMzMxMywxMSArMzM5NSwxMSBAQCBVbmFyeUFyaXRoUHJvZmls
ZSogQ29kZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkg
ewogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2lu
YzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0
aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcyku
bV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFz
PE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4g
cGMtPmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKKyNpbmNsdWRl
ICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAj
aW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSGFzaC5oIgpAQCAt
MTU4LDcgKzE1OSw5IEBAIHB1YmxpYzoKICAgICBNZXRhZGF0YVRhYmxlKiBtZXRhZGF0YVRhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5nZXQoKTsgfQogCiAgICAgdW5zaWduZWQgbnVt
UGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQorcHJpdmF0ZToK
ICAgICB2b2lkIHNldE51bVBhcmFtZXRlcnModW5zaWduZWQgbmV3VmFsdWUpOworcHVibGljOgog
CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSBjb25zdCB7IHJldHVybiBt
X251bWJlck9mQXJndW1lbnRzVG9Ta2lwOyB9CiAKQEAgLTE2Nyw3ICsxNzAsNiBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQogICAg
IHVuc2lnbmVkIG51bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hl
Y2twb2ludHMoKSAqIG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKLSAgICB1bnNpZ25lZCogYWRk
cmVzc09mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KIAogICAgIENvZGVCbG9jayog
YWx0ZXJuYXRpdmUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihtX2Fs
dGVybmF0aXZlLmdldCgpKTsgfQpAQCAtMjMyLDE2ICsyMzQsNiBAQCBwdWJsaWM6CiAgICAgYm9v
bCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFs
bFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duQ2VsbChWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGFkZGlu
ZyBiYWNrIHRoZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJuIHRydWUgaWYgYHJlZ2AgaXMg
YHRoaXNgIGFuZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAgICAgICBpZiAocmVnLmlzQ29u
c3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2VsbCgpOwot
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
aXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fbnVtVmFycyk7CkBAIC0y
NjYsOCArMjU4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGdldElDU3RhdHVzTWFwKElDU3RhdHVz
TWFwJiByZXN1bHQpOwogICAgIAogI2lmIEVOQUJMRShKSVQpCisgICAgLy8gT09QUzogbW92ZSBh
cml0aG1ldGljIElDcyBhbmQgc3dpdGNoIHRhYmxlcyBvdXQgb2YgaGVyZSwgYW5kIG9udG8gSklU
Q29kZS4KICAgICBzdHJ1Y3QgSklURGF0YSB7CiAgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNU
X0FMTE9DQVRFRDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
IAogICAgICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9zOwogICAgICAgICBC
YWc8SklUQWRkSUM+IG1fYWRkSUNzOwpAQCAtMjgyLDkgKzI3NiwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1h
cDsKICAgICAgICAgYm9vbCBtX2hhc0NhbGxlZVNhdmVSZWdpc3RlcnMgeyBmYWxzZSB9OwogICAg
ICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7Ci0gICAgICAg
IEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworCisgICAgICAgIEZpeGVkVmVjdG9yPHZvaWQqPiBt
X2ppdENvbnN0YW50UG9vbDsKKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVENv
bnN0YW50UG9vbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKSVREYXRhLCBtX2ppdENvbnN0
YW50UG9vbCk7IH0KICAgICB9OwogCisgICAgdm9pZCBzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5l
Q29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPik7CisKICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRh
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyKQogICAgIHsKICAgICAgICAgaWYgKExJ
S0VMWShtX2ppdERhdGEpKQpAQCAtMjkzLDYgKzI5MSw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAg
SklURGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDb2RlQmxvY2ssIG1faml0RGF0YSk7IH0KKwogICAgIEpJVEFkZElDKiBhZGRKSVRB
ZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKik7CiAgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQ
cm9maWxlKik7CkBAIC0zMjIsMTUgKzMyMiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gbG9va2luZyBm
b3IgYSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlz
LgogICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRl
Y29kZUluZGV4KTsKICAgICAKLSAgICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29kZU1hcCYmIGpp
dENvZGVNYXApCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7Ci0gICAgICAgIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXAgPSBXVEZNb3Zl
KGppdENvZGVNYXApOwotICAgIH0KICAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCkK
ICAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAg
ICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXA7CisgICAgICAgIEFT
U0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9qaXRDb2Rl
TWFwOwogICAgIH0KIAogICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVf
cHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKQEAgLTQ3Miw2ICs0NjcsNyBAQCBwdWJsaWM6CiAK
ICAgICBTdHJpbmcgbmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9CiAgICAg
dW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9udW1QYXJhbWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNlSklUKCkpOwpAQCAtNTcyLDYg
KzU2OCw3IEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQo
VmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1ty
ZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVh
bFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKHJlZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25l
ZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKGluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZD
b25zdGFudHNWZWN0b3JCdWZmZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX2NvbnN0YW50UmVnaXN0ZXJzKSArIGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpk
YXRhTWVtb3J5T2Zmc2V0KCk7IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25E
ZWNsKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQog
ICAgIGludCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMu
c2l6ZSgpOyB9CkBAIC02MDEsNiArNTk4LDE2IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobV9qaXREYXRhKTsKICAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOwogICAgIH0KKyAgICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5l
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CisgICAgfQorICAgIHZvaWQqIGJhc2VsaW5lSklUQ29uc3RhbnRQb29s
KCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSAmJiBqaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX2pp
dENvbnN0YW50UG9vbC5kYXRhKCk7CisgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9m
VW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUt
Pm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtl
ZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgp
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsgfQpAQCAtNjExLDYgKzYxOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1faml0RGF0YSk7CiAgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICB9CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNl
bGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgIH0KICNlbmRpZgogICAgIHNpemVf
dCBudW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygp
OyB9CiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTc5Nyw2ICs4MDks
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJl
dHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRk
cmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2lu
dCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVu
c2lnbmVkIG51bUJyZWFrcG9pbnRzKQpAQCAtODM4LDYgKzg1MSw3IEBAIHB1YmxpYzoKICAgICBt
dXRhYmxlIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwogCiAgICAgYm9vbCBtX3Nob3VsZEFsd2F5
c0JlSW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQgYmVjYXVzZSB0aGUgSklUIHdhbnRzIHRvIHN0
b3JlIHRvIGl0LgorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlu
bGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3VsZEFsd2F5
c0JlSW5saW5lZCk7IH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdW5zaWduZWQgbV9jYXBhYmls
aXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCkBAIC05MDYsMTEgKzky
MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0YWRhdGFUYWJs
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIp
OyB9CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJu
KCkKLSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5
cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0gICAgICAgIHJldHVybiAhbV91bmxpbmtl
ZENvZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAgfQorICAgIGJvb2wgbG9vcEhpbnRzQXJl
RWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKTsgfQogCiBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CkBAIC0xMDA4LDcgKzEw
MTgsOSBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5
SWRXYXRjaHBvaW50TWFwOwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7CiAjaWYgRU5B
QkxFKEpJVCkKK3B1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SklURGF0YT4gbV9qaXREYXRh
OworcHJpdmF0ZToKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIFRoaXMgaXMg
cmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRoZSBwcm9maWxl
ZCBjb2RlIGJsb2NrCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAgcHVibGljOgogICAgIHN0YXRp
YyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwKENvZGVCbG9jayogY29kZUJsb2NrKTsK
ICAgICAKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcEFuZEFjdGl2
YXRlKENvZGVCbG9jayogY29kZUJsb2NrKTsKKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZDb2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZSwgbV9jb2RlQmxvY2spOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDYgKzUwLDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRh
ZGF0YQogCiBzdHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIHsKICAgICBBcnJh
eVByb2ZpbGUgYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFy
cmF5TGVuZ3RoLCBhcnJheVByb2ZpbGUpOyB9CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0
QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoKSA9PSAxMik7CiAKQEAgLTg4LDYgKzg5LDcgQEAg
dW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRNb2RlIG1vZGU7CiAg
ICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7IC8vIFRoaXMgbXVzdCBiZSB6
ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07CisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVN
ZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhRGVmYXVsdCBkZWZhdWx0
TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5zZXRNb2RlOwogICAgIEdldEJ5
SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1vZGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24g
MjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NSw2ICszODUsOCBAQCBib29sIElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAK
Ky8vIE9PUFM6IE1ha2UgdGhpcyBzdHVmZiB3b3JrIHdpdGggZGF0YSBpY3MgdG8gbm90IGFzc3Vt
ZSBpbmxpbmUgYWNjZXNzLgorCiB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcElu
QWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IHRhcmdldCkKIHsKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewpAQCAtNDA0
LDkgKzQwNiwxMiBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiB2
b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQpCiB7CiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0
YUlDKCkpIHsKKyAgICAgICAgLy8gT09QUzogbWFrZSBzb21lIHZlcnNpb24gb2YgSW5saW5lQWNj
ZXNzIGZvciBiYXNlbGluZS4gUGVyaGFwcyBtYWtlIGl0IGRhdGEgZHJpdmVuLiBPciBwZXJoYXBz
IGhhdmUgdGhlIGNvZGUKKyAgICAgICAgLy8gYmUgc2hhcmVkIHNvbWVob3cgYmV0d2VlbiBVbmxp
bmtlZENvZGVCbG9ja3MuCisKICAgICAgICAgLy8gSWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10
aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQgKGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAv
LyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGlyZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdl
IHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2RlUHRyLgotICAgICAgICBpZiAoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUo
KSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZp
ZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29kZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5m
by5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMgbWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29k
ZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAgICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRo
IHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNvZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5n
IGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1f
Y29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2Nh
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CkBAIC00MjEsNiArNDI2LDcgQEAgdm9pZCBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgICAgICAgICAgICAgIH0pLCAiSW5s
aW5lQWNjZXNzOiBsaW5raW5nIHN0dWIgY2FsbCIpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CisKICAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gdGFyZ2V0OwogICAgICAgICByZXR1cm47
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1v
ZGVNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0VfT1BFUkFUT1JTX0ZPUl9FTlVN
X0NMQVMKIAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7CiAgICAgdWludDhfdCBzZWVu
TW9kZXMgeyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNlZW5Nb2RlcygpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0YWRhdGEsIHNlZW5Nb2Rlcyk7
IH0gCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc2Vlbk1vZGVzKSkgPT0gc2l6
ZW9mKEl0ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODIwMTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQXJyYXlQ
cm9maWxlIG1fYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJbnRDYWxsTGlua0luZm8sIG1f
YXJyYXlQcm9maWxlKTsgfQogCiBwcml2YXRlOgogICAgIHVpbnRwdHJfdCBtX2NhbGxlZU9yTGFz
dFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0IH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJl
dmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklu
bGluZXMuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUg
IlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogCkBAIC0yODUsNiAr
Mjg2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgICAg
ICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlz
LCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBl
OjpJbkJ5SWQ6CkBAIC00MzAsNiArNDMyLDIwNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3Zv
aWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJ
bmZvKQoreworICAgIGFjY2Vzc1R5cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7Cisg
ICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0YXJ0OyAvLyBPT1BTOiBkbyB3ZSBuZWVkIGEg
c3RhcnQgZm9yIGRhdGEgSUNzPworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8u
ZG9uZUxvY2F0aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1Yklu
Zm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSk7CisgICAgY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29k
ZUluZGV4KTsKKyAgICBtX2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICB1
c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwor
ICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHVi
SW5mby5ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0
b3JfbmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0aGUgc2NyYXRjaCByZWdpc3RlciBlaXRoZXIuCisg
ICAgICAgIHVzZWRSZWdpc3RlcnMuYWRkKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRj
aCk7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVs
ZXRlQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpE
ZWxldGVCeUlEOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlk
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkluQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOiAKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBz
d2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6
Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlz
U3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAg
IGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAg
ICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmll
bGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtp
bmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6UHV0QnlWYWw6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7
CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlu
a2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRL
aW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5p
c1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUo
KSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRp
b25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOwor
ICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAg
ICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsK
KyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6Cisg
ICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBC
YXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIg
PSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lz
dGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgorICAgICAgICBo
YXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSBmYWxzZTsKKyAgICAgICAgcHJvdG90eXBlSXNLbm93bk9iamVjdCA9IGZhbHNlOworICAg
ICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAg
ICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAg
ICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3Rv
OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNzVHlw
ZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFs
c2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0
OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAg
ICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9
IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVz
dWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgIGNhc2UgQWNjZXNzVHlw
ZTo6R2V0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAg
ICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVncy50aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0
aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1
ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6
UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOwor
ICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAg
ICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwor
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsKQorICAg
ICAgICAgICAgbV9hcnJheVByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpw
cm9maWxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVC
cmFuZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBo
YXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBJbnZhbGlk
R1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHJlZ3MuYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YnJhbmQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogI2lmIEFT
U0VSVF9FTkFCTEVECiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkK
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1
ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlU2V0LmgiCkBAIC01Niw2ICs1Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGlu
dDhfdCB7CiAgICAgR2V0QnlWYWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQ
dXRQcml2YXRlTmFtZSwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRl
TmFtZSwKQEAgLTc4LDYgKzgwLDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3Qgewog
ICAgIFN0cmluZ0xlbmd0aAogfTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87
CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
dHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2
ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0Rp
ZSgpOwogCisgICAgdm9pZCBpbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8o
Q29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9W
SVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZl
cmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwK
QEAgLTQ0Nyw2ICs0NTMsMTggQEAgaW5saW5lIGF1dG8gYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJ
ZEZ1bgogICAgIH0KIH0KIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8geworICAg
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQ7CisgICAgUHJpdmF0
ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kIHsgUHJpdmF0ZUZpZWxkUHV0S2luZDo6
bm9uZSgpIH07CisgICAgRUNNQU1vZGUgZWNtYU1vZGUgeyBFQ01BTW9kZTo6c2xvcHB5KCkgfTsK
KyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgLy8gT09QUzogRG8gd2UgbmVl
ZCBzdGFydCBmb3IgZGF0YSBJQ3M/CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IHN0YXJ0OyAvLyBUaGlzIGlzIGVpdGhlciB0aGUgc3RhcnQgb2YgdGhlIGlubGlu
ZSBJQyBmb3IgKmJ5SWQgY2FjaGVzLiBvciB0aGUgbG9jYXRpb24gb2YgcGF0Y2hhYmxlIGp1bXAg
Zm9yICdpbnN0YW5jZW9mJyBjYWNoZXMuCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5h
bFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPiBzbG93UGF0aFN0YXJ0TG9jYXRpb247Cit9OworCiAjZWxzZQogCiBjbGFzcyBT
dHJ1Y3R1cmVTdHViSW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzE2LDQgKzMxNiwxNiBAQCBpbnQgVW5saW5rZWRDb2RlQmxvY2s6Om91dE9m
TGluZUp1bXBPZmZzCiAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuZ2V0KGJ5dGVj
b2RlT2Zmc2V0KTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECitib29sIFVubGlua2VkQ29kZUJs
b2NrOjpoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgLy8gT09Q
UzogZG8gd2hhdCBDb2RlQmxvY2sgZG9lcyBhbmQgbWFrZSBhIGhhc2ggdGFibGU/CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7CisgICAg
ICAgIGlmIChpZGVudGlmaWVyKGkpLmltcGwoKSA9PSB1aWQpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAj
aW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkNvZGVUeXBlLmgiCiAj
aW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKQEAgLTYyLDYgKzYzLDcgQEAgY2xhc3MgVW5saW5r
ZWRDb2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNsYXNzIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKIGVudW0g
Y2xhc3MgTGlua1RpbWVDb25zdGFudCA6IGludDMyX3Q7CiAKQEAgLTE3NSw2ICsxNzcsNyBAQCBw
dWJsaWM6CiAKICAgICBjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBj
b25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBj
b25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFu
dEluZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRv
Q29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFu
dChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJz
W3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBA
IC0yMDcsNiArMjEwLDE1IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9z
Y3JpcHRNb2RlKTsgfQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9u
cygpIGNvbnN0OworICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2Rl
SW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIo
KTsgfQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbikKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0g
aW5zdHJ1Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0
aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25z
QmVnaW4gJiYgaW5zdHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4g
aW5zdHJ1Y3Rpb24gLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CisgICAgdW5zaWduZWQgaW5z
dHJ1Y3Rpb25zU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLnNpemUoKTsgfQog
CiAgICAgdW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxs
ZWVMb2NhbHM7IH0KICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1W
YXJzOyB9CkBAIC0zMzQsNiArMzQ2LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWV0
YWRhdGEtPnNpemVJbkJ5dGVzKCk7CiAgICAgfQogCisgICAgYm9vbCBsb29wSGludHNBcmVFbGln
aWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCisgICAgeworICAgICAgICAvLyBTb21lIGJ1aWx0
aW5zIGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRoZXkgcnVuLgor
ICAgICAgICByZXR1cm4gIWlzQnVpbHRpbkZ1bmN0aW9uKCk7CisgICAgfQorCisjaWYgQVNTRVJU
X0VOQUJMRUQKKyAgICBib29sIGhhc0lkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyNl
bmRpZgogCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2RlQmxvY2soVk0mLCBTdHJ1Y3R1cmUq
LCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRp
b25Nb2RlPik7CkBAIC0zOTQsNiArNDE1LDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xl
eGljYWxTY29wZUZlYXR1cmVzIDogNDsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2NrIG1f
bG9jazsKKyAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX3VubGlua2VkQmFzZWxpbmVDb2Rl
OwogcHJpdmF0ZToKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlcyB7IDAgfTsKICAgICBTb3Vy
Y2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC00MTAsNiArNDMyLDkgQEAgcHJpdmF0ZToKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3M7CiAK
KyAgICAvLyBPT1BTOiBiaW5kIGEgYmV0dGVyIHBsYWNlIHRvIHN0b3JlIHRoaXMgc3R1ZmY/Cisg
ICAgVmVjdG9yPEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9iaW5hcnlBcml0aFByb2ZpbGVzOworICAg
IFZlY3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4gbV91bmFyeUFyaXRoUHJvZmlsZXM7CiAKICNpZiBF
TkFCTEUoREZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CkBAIC00
NTUsNiArNDgwLDI4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBvdXRPZkxpbmVK
dW1wT2Zmc2V0KGluc3RydWN0aW9uLm9mZnNldCgpKTsKICAgICB9CisgICAgaW50IG91dE9mTGlu
ZUp1bXBPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQorICAgIHsKKyAgICAgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQgPSB0aGlzLT5ieXRlY29kZU9mZnNldChwYyk7CisgICAgICAgIHJl
dHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
cmVzdWx0ID0gbV9iaW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV9iaW5hcnlB
cml0aFByb2ZpbGVzLmFwcGVuZChCaW5hcnlBcml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkVW5hcnlBcml0aFByb2ZpbGUoKQor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6
ZSgpOworICAgICAgICBtX3VuYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoVW5hcnlBcml0aFByb2Zp
bGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQmluYXJ5QXJpdGhQ
cm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1cm4gbV9iaW5hcnlB
cml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHVuYXJ5QXJpdGhQcm9m
aWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CiAKIHBy
aXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0
aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAkocmV2
aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAgcHVi
bGljOgogICAgIGJvb2wgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZUJsb2NrLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0K
ICAgICBib29sIGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmhh
c0NoZWNrcG9pbnRzKCk7IH0KICAgICBib29sIGhhc1RhaWxDYWxscygpIGNvbnN0IHsgcmV0dXJu
IG1fY29kZUJsb2NrLT5oYXNUYWlsQ2FsbHMoKTsgfQorICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFy
aXRoUHJvZmlsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUo
KTsgfQorICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkgeyByZXR1cm4gbV9jb2Rl
QmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCk7IH0KIAogICAgIC8vIFVwZGF0aW5nIFVubGlu
a2VkQ29kZUJsb2NrLgogICAgIHZvaWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1fY29kZUJsb2Nr
LT5zZXRIYXNDaGVja3BvaW50cygpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZpc2lvbiAyODIw
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDE0IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxlKTsKICAgICB9CiAKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZzZXRJbk1ldGFk
YXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9p
c0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9IG1faXMzMkJp
dCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRhYmxlMTYoKVtP
cGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9m
KHR5cGVuYW1lIE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9
CisKIHByaXZhdGU6CiAgICAgZW51bSBFbXB0eVRhZyB7IEVtcHR5IH07CiAKQEAgLTEwMSw2ICsx
MDksNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc19vZmZzZXQxNlRhYmxlU2l6ZTsKICAg
ICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAgICAgdXNpbmcgT2Zmc2V0
MTYgPSB1aW50MTZfdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zh
bHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2
IEBAIHRlbXBsYXRlPHVuc2lnbmVkIG51bWJlck9mQnVja2V0c0FyZ3VtZW4KIHN0cnVjdCBWYWx1
ZVByb2ZpbGVCYXNlIHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mQnVj
a2V0cyA9IG51bWJlck9mQnVja2V0c0FyZ3VtZW50OwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHMgPSAxOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgYnVja2V0SW5kZXhNYXNrID0gbnVtYmVyT2ZCdWNrZXRzIC0gMTsKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNr
ZXRzICsgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHM7CiAgICAgCiAgICAgVmFsdWVQcm9maWxlQmFz
ZSgpCkBAIC0xMzQsNyArMTMzLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAg
ICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAgICBFbmNv
ZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAgU3BlY3Vs
YXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE1Niw2ICsxNTUsNyBAQCBz
dHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBWYWx1ZVBy
b2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPiB7CiAg
ICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+
KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQogfTsKIAog
c3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2Zp
bGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTk4LDcgKzE1OTgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFVuYXJ5CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wTm90Pihkc3QsIHNyYyk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0
aGlzLCBkc3QsIHNyYywgdHlwZSk7CisgICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwg
c3JjLCB0eXBlLCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2Ugb3BfYml0bm90OgogICAgICAgICBlbWl0VW5hcnlPcDxPcEJpdG5v
dD4oZHN0LCBzcmMpOwpAQCAtMTY5NiwxMyArMTY5NiwxMyBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFR5cGVPCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0SW5jKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNE
c3QpOworICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5
QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVjKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcERl
Yzo6ZW1pdCh0aGlzLCBzcmNEc3QpOworICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9j
b2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNjgyLDcgKzY4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmVnaXN0ZXJJ
RCo+CiAgICAgICAgIGVtaXRCaW5hcnlPcChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNy
YzEsIFJlZ2lzdGVySUQqIHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcykKICAgICAgICAgewotICAg
ICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcyk7Cisg
ICAgICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzLCBt
X2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICAgICAgcmV0dXJu
IGRzdDsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5LmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDYgQEAgdm9pZCog
cHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKgogICAgIEFTU0VSVChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwotICAgIEFTU0VSVCghY29kZUJs
b2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZn
Q29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZU9TUkVudHJ5
VG9ERkcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzA5LDEwICszMDksMTUgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKEND
YWxsSGVscGVycwogICAgICAgICAgICAgdHJ1ZUNhbGxlciA/IEFzc2VtYmx5SGVscGVyczo6VXNl
RXhpc3RpbmdUYWdSZWdpc3RlckNvbnRlbnRzIDogQXNzZW1ibHlIZWxwZXJzOjpDb3B5QmFzZWxp
bmVDYWxsZWVTYXZlZFJlZ2lzdGVyc0Zyb21CYXNlRnJhbWUsCiAgICAgICAgICAgICBHUFJJbmZv
OjpyZWdUMiwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1Q0KTsKIAorICAgICAgICAvLyBP
T1BTOiBDb25zaWRlciBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGZvciBiYXNlbGluZSBwYi9t
ZXRhZGF0YSByZWdpc3RlcnMKICAgICAgICAgaWYgKGNhbGxlcklzTExJbnQpIHsKICAgICAgICAg
ICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVD
b2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRh
dGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVC
bG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAgICAgICAg
aml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNsb3QoaW5s
aW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIp
KTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9y
KCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSks
IGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6
c19tZXRhZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVKSVRDb25z
dGFudFBvb2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2Rl
QmxvY2ssIEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgh
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw2ICs0MDksOSBAQCB2b2lkIGFk
anVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVn
aXN0ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dl
ZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKKyAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4
aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGlu
ZUpJVENvbnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CisKICAgICAgICAgY29k
ZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKIAogICAgICAgICBCeXRl
Y29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMwLDYg
KzczMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihjYWxsZWVU
YWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5y
ZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNz
ZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFt
ZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogCiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAg
ICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBp
ICsgMSk7CkBAIC04ODksNyArODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwo
Tm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAg
aWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsKICAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0
RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1l
U2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ1LDYgKzc0NSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIHNodWZmbGVE
YXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdEpT
KTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3Mp
OwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7
CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAgICAgICAgICAgIEVk
Z2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwpAQCAt
ODk2LDcgKzg5Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUK
ICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNU
YWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VE
YXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICszOTg1LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJlZ2lzdGVyU2V0IHVzZWRS
ZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNv
ZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNlZFJlZ2lzdGVycywK
KyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwg
Y2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2VkUmVnaXN0ZXJzLAogICAg
ICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpTVmFsdWVSZWdzOjpwYXls
b2FkT25seShwcm9wZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQUlJlZywgc3R1YkluZm9H
UFIpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKIApAQCAt
MTQ3NzgsNyArMTQ3NzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93
Q2hpCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OwogICAgIEdQUlJlZyBzY29wZVJlZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcs
IG1faml0LmNvZGVCbG9jaygpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRl
eCk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMxNyw3ICs0MzE3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpID8gcGFyYW1zLmdwU2Ny
YXRjaCgwKSA6IEludmFsaWRHUFJSZWc7CiAKICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0g
Qm94PEpJVFB1dEJ5VmFsR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgIGppdC5j
b2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRl
SW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLAorICAgICAgICAgICAgICAgIGppdC5jb2RlQmxv
Y2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgs
IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLAogICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2
YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZv
R1BSKTsKIAogICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3lt
Ym9sID0gdHJ1ZTsKQEAgLTEwMTkxLDYgKzEwMTkxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtUGFzc2VkQXJnczsgaSA8IG51bUFsbG9jYXRl
ZEFyZ3M7ICsraSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MuYXBw
ZW5kKFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpKTsKICAgICAgICAgICAg
ICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAg
ICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0
dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGpp
dC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKHNlbWFudGljTm9kZU9yaWdpbik7CkBAIC0x
MDM0OSwxMyArMTAzNTAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZs
ZURhdGEuYXJncy5hcHBlbmQocGFyYW1zWzEgKyBpXS5yZWNvdmVyeUZvckpTVmFsdWUoKSk7CiAK
ICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtQXJnczsKKyAg
ICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygp
LT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc2h1
ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAKICAg
ICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2so
KS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsK
IAotICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWls
Q2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5r
SW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1Qw
LCBbJl0gewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZs
ZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxl
cihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgICAg
ICB9KTsKQEAgLTEwNjk4LDcgKzEwNzAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewog
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAg
ICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA5NzksNyArMTA5ODEsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFp
bENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENh
bGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xv
d1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6
cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2Fs
bFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDE3ICs0MiwyOCBAQCBjbGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAg
ICAgIHJldHVybiBpZiBlbXB0eT8KIAotICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgs
IGZpZWxkcykKKyAgICAgICAgZGVmIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBm
aWVsZE5hbWVzKQorICAgICAgICAgICAgZmllbGROYW1lcy5tYXAgZG8gfGZpZWxkTmFtZXwKKyAg
ICAgICAgICAgICAgICAiI3twcmVmaXh9c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGRO
YW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsxLi5dfSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgZW5kLmpvaW4oIlxu
IikKKyAgICAgICAgZW5kCisKKyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVs
ZHMsIGZpZWxkTmFtZXMpCiAgICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwK
ICAgICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAg
ICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5
cGUpfVxuI3twcmVmaXh9fTsiCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7
XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlLCBmaWVsZE5hbWVzKX1cbiN7
cHJlZml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIiN7
cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307IgorICAgICAgICAgICAgICAgICAg
ICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMu
cHVzaChmaWVsZE5hbWUpCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9f
c30gbV8je2ZpZWxkTmFtZX07IgogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5k
LmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxk
cygiICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVsZE5hbWVzID0gW10KKyAgICAgICAg
cHJlZml4ID0gIiAgICAgICAgIgorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKHByZWZp
eCwgQGZpZWxkcywgZmllbGROYW1lcykKKyAgICAgICAgZmllbGRzID0gZmllbGRzICsgIlxuIiAr
IGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQogCiAgICAgICAg
IGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBAaW5pdGlhbGl6
ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk4LDggKzY5OCwxMyBA
QCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzCiAKIHZvaWQgQXNzZW1i
bHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGlu
Zm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVj
dCksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xv
YmFsT2JqZWN0KHZtLCBpbmZvKTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0
dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8qIGlu
Zm8pCit7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAg
ICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNp
b24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTcxOCw2ICsxNzE4LDcgQEAgcHVibGljOgogICAgIH0KICAg
ICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExp
bmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2Jq
ZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3BhY2VPblN0YWNr
Rm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QmFzZWxpbmVKSVRDb2RlLmgiCisKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKKyNpbmNsdWRlICJK
dW1wVGFibGUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworSklUQWRkSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0aFByb2ZpbGUp
OyB9CitKSVRNdWxJQyogTWF0aElDSG9sZGVyOjphZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0K
K0pJVFN1YklDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklU
TmVnSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKwordm9pZCBN
YXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKQoreworICAgIG1f
YWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2FkZElDcyk7CisgICAgbV9tdWxJQ3MgPSBXVEZNb3Zl
KG90aGVyLm1fbXVsSUNzKTsKKyAgICBtX25lZ0lDcyA9IFdURk1vdmUob3RoZXIubV9uZWdJQ3Mp
OworICAgIG1fc3ViSUNzID0gV1RGTW92ZShvdGhlci5tX3N1YklDcyk7Cit9CisKK0Jhc2VsaW5l
SklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKKyAgICA6IERpcmVjdEpJVENvZGUo
V1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAg
ICwgTWF0aElDSG9sZGVyKCkKK3sgfQorCitCYXNlbGluZUpJVENvZGU6On5CYXNlbGluZUpJVENv
ZGUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiSklU
Q29kZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8v
Y2xhc3MgSklUQWRkSUM7CisvL2NsYXNzIEpJVE11bElDOworLy9jbGFzcyBKSVRTdWJJQzsKKy8v
Y2xhc3MgSklUTmVnSUM7CitjbGFzcyBCaW5hcnlBcml0aFByb2ZpbGU7CitjbGFzcyBVbmFyeUFy
aXRoUHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFNp
bXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKK2NsYXNzIE1hdGhJQ0hv
bGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhl
cik7CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAg
IEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRTdWJJ
QyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTmVnSUMqIGFkZEpJ
VE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CisKKyAgICAvKgorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJ
VEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBh
ZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJh
dG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUTXVsSUMqIGFkZE1h
dGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHBy
b2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dl
bmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+CisgICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisgICAgKi8KKworcHJpdmF0
ZToKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJ
Q3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3Vi
SUNzOworfTsKKworY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKK3B1YmxpYzoKKyAgICB1c2luZyBD
b25zdGFudCA9IHVuc2lnbmVkOworCisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7Cisg
ICAgICAgIEdsb2JhbE9iamVjdCwKKyAgICAgICAgQ2FsbExpbmtJbmZvLAorICAgICAgICBTdHJ1
Y3R1cmVTdHViSW5mbywKKyAgICAgICAgRnVuY3Rpb25EZWNsLAorICAgICAgICBGdW5jdGlvbkV4
cHIsCisgICAgfTsKKworICAgIHN0cnVjdCBWYWx1ZSB7CisgICAgICAgIC8vIE9PUFM6IE1ha2Ug
dGhlIHBvaW50ZXIgcGFja2VkLgorICAgICAgICBUeXBlIHR5cGU7CisgICAgICAgIHZvaWQqIHBh
eWxvYWQ7CisgICAgfTsKKworICAgIEpJVENvbnN0YW50UG9vbCgpID0gZGVmYXVsdDsKKyAgICBK
SVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAgICBKSVRDb25z
dGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworCisgICAg
Q29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXplKCk7CisgICAgICAgIG1f
Y29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1ZSBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fY29uc3Rh
bnRzOworfTsKKworCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29k
ZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2RlKENv
ZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJp
dHlDaGVjayk7CisgICAgfkJhc2VsaW5lSklUQ29kZSgpIG92ZXJyaWRlOworCisgICAgQmFnPFVu
bGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgQmFnPENhbGxMaW5rSW5m
bz4gbV9ldmFsQ2FsbExpbmtJbmZvczsgLy8gT09QUzogbWFrZSBzdXJlIHdlIHZpc2l0IHRoZXNl
IHNvbWVob3cuIE9yIGFzc2VydCB3ZSBkb24ndCBoYXZlIHRvLCBzaW5jZSB0aGV5J3JlIHZpcnR1
YWwgY2FsbHMuCisgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRT
dHViSW5mb3M7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBU
YWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXM7CisgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisgICAgSklUQ29uc3RhbnRQ
b29sIG1fY29uc3RhbnRQb29sOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCShyZXZpc2lvbiAy
ODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgc2l6ZV90IEJhc2VsaW5lSklUUGxhbjo6
Y29kZVNpemUoKSBjb25zdAogCiBDb21waWxhdGlvblJlc3VsdCBCYXNlbGluZUpJVFBsYW46OmZp
bmFsaXplKCkKIHsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6
ZU9uTWFpblRocmVhZCgpOworICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZp
bmFsaXplT25NYWluVGhyZWFkKG1fY29kZUJsb2NrKTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewog
ICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQo
bV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlz
aW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6Omxv
Z1NoYWRvd0NoaWNrZW5Qcm9sbwogICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CiB9
CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcg
c2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQotewotICAgIHN0b3Jl
UHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7Ci0gICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBjYWxsZWUpKSk7Ci0gICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsK
LSAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRP
RihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJ
bW1QdHIoY29kZUJsb2NrKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihT
aGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOwotfQotCiB2
b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQUlJl
ZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gy
KQogewogICAgIFNoYWRvd0NoaWNrZW4qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2Vu
KCk7CkBAIC03Miw2ICs2MiwyOCBAQCB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hp
Y2tlblBhCiAgICAgc3RvcmVQdHIoc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDFOb25BcmdHUFIp
KTsKIH0KIAorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK3ZvaWQgQ0NhbGxI
ZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tl
dCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBzdG9yZVB0cihHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOworICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVl
KSkpOworICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7CisgICAgc3Rv
cmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKKyAgICBzdG9yZVB0cihjb2RlQmxvY2ssIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBj
b2RlQmxvY2spKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRz
KCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKK30KKwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRo
aXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBs
KHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgp
OworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BS
UmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BS
UmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwg
Y29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwogdm9pZCBDQ2FsbEhlbHBlcnM6OmVtaXRK
SVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gd2hlcmUs
IFNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPiBlbWl0Q29kZSwgY29uc3QgY2hhciog
ZGVzY3JpcHRpb24pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODQw
LDcgKzg0MCwxNCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2Ugb3BlcmF0aW9ucyBjbG9iYmVyIGFs
bCB2b2xhdGlsZSByZWdpc3RlcnMuIFRoZXkgYXNzdW1lIHRoYXQgdGhlcmUgaXMgcm9vbSBvbiB0
aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sgdG8gbWFyc2hhbGwgY2FsbCBhcmd1bWVudHMuCiAgICAg
dm9pZCBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwg
R1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NvcGUpOwotICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQ
UlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CisKK3ByaXZhdGU6CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgdm9pZCBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1Jl
Z3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCk7CitwdWJsaWM6CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
KTsKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNr
ZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxvY2ss
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEg
cG9pbnRlciB0byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQu
CiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDEyIEBAIG5h
bWVzcGFjZSBKU0MgewogCiB2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNh
dmVSZWdpc3RlcnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CisgICAgc2V0dXBDYWxsZWVTYXZl
UmVnaXN0ZXJzKGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwordm9pZCBD
YWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lz
dGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMpCit7CiAgICAgUmVnaXN0ZXJT
ZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycyB7IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSB9OwotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2Nh
dGlvbnMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5zaXplKCk7ICsraSkgewogICAg
ICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5IHsgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChp
KSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZURhdGEuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMSArNDMsMTMg
QEAgcHVibGljOgogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOwogICAgIHVuc2lnbmVk
IG51bUxvY2FscyB7IFVJTlRfTUFYIH07CiAgICAgdW5zaWduZWQgbnVtUGFzc2VkQXJncyB7IFVJ
TlRfTUFYIH07CisgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycyB7IFVJTlRfTUFYIH07IC8vIE9u
IG91ciBtYWNoaW5lIGZyYW1lLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJNYXA8
VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOwogICAgIEdQUlJlZyBudW1iZXJUYWdSZWdpc3RlciB7
IEludmFsaWRHUFJSZWcgfTsKIAogICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENv
ZGVCbG9jayopOworICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lz
dGVyQXRPZmZzZXRMaXN0Kik7CiAjZW5kaWYKICAgICBWYWx1ZVJlY292ZXJ5IGNhbGxlZTsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVy
LmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEzICszOCwxMyBAQCBDYWxs
RnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhCiAgICAgOiBtX2ppdChqaXQpCiAg
ICAgLCBtX29sZEZyYW1lKGRhdGEubnVtTG9jYWxzICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUlu
UmVnaXN0ZXJzLCBudWxscHRyKQogICAgICwgbV9uZXdGcmFtZShkYXRhLmFyZ3Muc2l6ZSgpICsg
Q2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCi0gICAgLCBtX2FsaWdu
ZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMKLSAgICAgICAg
KyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoaml0LmNvZGVCbG9jaygpLT5udW1QYXJh
bWV0ZXJzKCkpKQorICAgICwgbV9hbGlnbmVkT2xkRnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEubnVt
UGFyYW1ldGVycykpCiAgICAgLCBtX2FsaWduZWROZXdGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnMKICAgICAgICAgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJh
bWUoZGF0YS5hcmdzLnNpemUoKSkpCiAgICAgLCBtX2ZyYW1lRGVsdGEobV9hbGlnbmVkTmV3RnJh
bWVTaXplIC0gbV9hbGlnbmVkT2xkRnJhbWVTaXplKQogICAgICwgbV9sb2NrZWRSZWdpc3RlcnMo
UmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpKQogICAgICwgbV9udW1QYXNzZWRBcmdzKGRhdGEu
bnVtUGFzc2VkQXJncykKKyAgICAsIG1fbnVtUGFyYW1ldGVycyhkYXRhLm51bVBhcmFtZXRlcnMp
CiB7CiAgICAgLy8gV2UgYXJlIGFsbG93ZWQgYWxsIHRoZSB1c3VhbCByZWdpc3RlcnMuLi4KICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOyApCkBA
IC00MjEsNyArNDIxLDcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclRhaWxD
YQogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIG1f
bmV3RnJhbWVCYXNlKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhcmd1bWVudENvdW50T0sg
PQogICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBt
X25ld0ZyYW1lQmFzZSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
bV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX251bVBhcmFtZXRlcnMpKTsKICAgICBtX2ppdC5hZGQz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkg
LSAxICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpLCBtX25ld0ZyYW1lQmFzZSk7
CiAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtc3RhY2tBbGln
bm1lbnRSZWdpc3RlcnMoKSksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5tdWwzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBtX25ld0ZyYW1lQmFz
ZSwgbV9uZXdGcmFtZUJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiAr
MTA0LDcgQEAgcHVibGljOgogICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBkYXRhOwogICAg
ICAgICBkYXRhLm51bUxvY2FscyA9IG51bUxvY2FscygpOwogICAgICAgICBkYXRhLm51bVBhc3Nl
ZEFyZ3MgPSBtX251bVBhc3NlZEFyZ3M7CisgICAgICAgIGRhdGEubnVtUGFyYW1ldGVycyA9IG1f
bnVtUGFyYW1ldGVyczsKICAgICAgICAgZGF0YS5jYWxsZWUgPSBnZXROZXcoVmlydHVhbFJlZ2lz
dGVyIHsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIH0pLT5yZWNvdmVyeSgpOwogICAgICAgICBkYXRh
LmFyZ3MucmVzaXplKGFyZ0NvdW50KCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFyZ0NvdW50KCk7ICsraSkKQEAgLTc5OCw2ICs3OTksNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
cGVyZm9ybVNhZmVXcml0ZXMoKTsKICAgICAKICAgICB1bnNpZ25lZCBtX251bVBhc3NlZEFyZ3Mg
eyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG1fbnVtUGFyYW1ldGVycyB7IFVJTlRfTUFYIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BCiB9CiAKIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICA6IEpT
SW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQorICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBu
dWxscHRyKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKICAgICAsIG1fbGFi
ZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKICAg
ICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtKQpAQCAtNzcsNiArNzcsOSBAQCBKSVQ6
OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQ
cm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKKyAgICBtX2dsb2JhbE9iamVjdENvbnN0YW50ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0KTsKKyAg
ICBtX3Byb2ZpbGVkQ29kZUJsb2NrID0gY29kZUJsb2NrOworICAgIG1fdW5saW5rZWRDb2RlQmxv
Y2sgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiB9CiAKIEpJVDo6fkpJVCgpCkBA
IC05MCw4ICs5Myw4IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEp1bXBMaXN0IHNraXBPcHRpbWl6ZTsKLSAgICAKLSAgICBz
a2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlv
bnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWJzb2x1dGVBZGRyZXNz
KG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgc2tp
cE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25z
OjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIEFTU0VSVCghbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpKTsKIAogICAgIGNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2
ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50
b3BFbnRyeUZyYW1lKTsKQEAgLTExMywxNSArMTE2LDIxIEBAIHZvaWQgSklUOjplbWl0Tm90aWZ5
V3JpdGUoV2F0Y2hwb2ludFNldCoKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50
ZXJUb1NldCkKK3ZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2lu
dGVyVG9TZXQpCiB7CisgICAgLy8gT09QUzogVGFrZSBhIGJvb2xlYW4gb3Igc29tZXRoaW5nIHNh
eWluZyBpZiB3ZSBjYW4gYmUgbnVsbC4KKyAgICBhdXRvIG9rID0gYnJhbmNoVGVzdFB0cihaZXJv
LCBwb2ludGVyVG9TZXQpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJl
c3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBvay5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCit2b2lkIEpJ
VDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIEdQUlJlZyBz
Y3JhdGNoR1BSKQogewotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+dmFyUmVhZE9ubHlXYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFs
VmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJS
ZWFkT25seVdhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKQEAgLTEyOSw3ICsxMzgsNyBAQCB2b2lk
IEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICAgICBpZiAoIUFTU0VSVF9FTkFCTEVE
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBKdW1wIG9rID0gYnJhbmNoUHRyKEVxdWFsLCByZWdU
MCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGJyZWFrcG9pbnQoKTsKICAgICBvay5saW5r
KHRoaXMpOwpAQCAtMTgxLDIxICsxOTAsNDEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwo
Y29uc3QgSW5zdHJ1YwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3ZvaWQgSklUOjpl
bWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9u
Q29kZSk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEpTRnVuY3Rpb246
Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJlc3VsdCk7CisgICAgYXV0byBoYXNF
eGVjdXRhYmxlID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHQsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0
aW9uOjpyYXJlRGF0YVRhZyksIHJlc3VsdCk7CisgICAgaGFzRXhlY3V0YWJsZS5saW5rKHRoaXMp
OworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkpCisgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QoKSksIHJlc3VsdCk7CisgICAgZWxzZQorICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9y
Q2FsbCgpKSwgcmVzdWx0KTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2U6Om9mZnNldE9mQ29kZUJsb2NrKCkpLCByZXN1bHQpOworICAgIGVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZXN1bHQsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7
Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKICAgICBpZiAoSklU
SW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2Rl
QmxvY2ssICJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fcHJvZmlsZWRD
b2RlQmxvY2ssICJcbiIpOwogICAgIAogICAgIGppdEFzc2VydFRhZ3NJblBsYWNlKCk7CiAgICAg
aml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsKICAgICAKLSAgICBhdXRvJiBpbnN0cnVjdGlv
bnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rp
b25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgYXV0byYg
aW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7CisgICAg
dW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwogCi0gICAgVk0m
IHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgQnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2Rl
SW5kZXgoMCk7CisKKyAgICAvLyBPT1BTOiBNYXliZSBvbmx5IGRvIHRoaXMgaWYgd2UgZGlzYWJs
ZSBzaGFyaW5nIHNvbWVob3c/CisgICAgLyoKKyAgICBWTSYgdm0gPSBtX3VubGlua2VkQ29kZUJs
b2NrLT52bSgpOwogICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1fY29k
ZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJsb2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmlu
aGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtKSkpIHsKICAgICAgICAgLy8gV2UgY2Fu
IG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2Rl
QmxvY2sncyBleGFjdGx5IG9uY2UuCiAgICAgICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxk
IGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRoZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRz
IHRvCkBAIC0yMzYsNiArMjY1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAgICovCiAKICAgICBtX2J5dGVj
b2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CiAgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNv
dW50OyApIHsKQEAgLTI3OCw4ICszMDgsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpCiAKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5l
SklURXhlY3V0aW9uKCkpKSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
Y29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBj
dHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxs
RnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBb
IiwgYnl0ZWNvZGVPZmZzZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwg
UmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0KQEAgLTUyNyw3ICs1NTcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJ
bmRleDsKIAotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7Cisg
ICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAg
ICAgICAKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0
YUxvZ0xuKCJCYXNlbGluZSBKSVQgZW1pdHRpbmcgc2xvdyBjb2RlIGZvciAiLCBtX2J5dGVjb2Rl
SW5kZXgsICIgYXQgb2Zmc2V0ICIsIChsb25nKWRlYnVnT2Zmc2V0KCkpOwpAQCAtNTQ1LDggKzU3
NSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKICAgICAg
ICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAg
ICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJs
b2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0
LCAiXSBTTE9XICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihj
dHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0K
QEAgLTY3NCw1NSArNzA0LDU2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAjZW5kaWYKIH0KIAordm9pZCBKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3Rh
bnRQb29sUmVnaXN0ZXJzKCkKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHNfbWV0YWRhdGFHUFIpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJlZ1QwKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZK
SVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKK30KKwordm9pZCBKSVQ6OmVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKQoreworICAgIEJhc2U6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNG
b3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklU
Q29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxl
dmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOworICAgIC8vIE9PUFM6IE1heWJl
IHRoaXMgc2hvdWxkIGJlIGRvbmUgb24gdW5saW5rZWQgY29kZSBibG9jaz8KKyAgICBERkc6OkNh
cGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZl
bCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIERGRzo6Q2Fubm90Q29tcGlsZToK
ICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2NhbkJlT3B0aW1p
emVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZh
bHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZToKICAgICBjYXNl
IERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IHRy
dWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwogICAgICAgICBt
X3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewotICAg
IGNhc2UgR2xvYmFsQ29kZToKLSAgICBjYXNlIE1vZHVsZUNvZGU6Ci0gICAgY2FzZSBFdmFsQ29k
ZToKLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAgICAgICAvLyBXZSBj
b3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4g
dW5pbmxpbmVhYmxlIGNhbGwuCi0gICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2
YXRpb24uCi0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBj
YW5JbmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbihtX2NvZGVCbG9jayk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZV
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51
bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9j
ay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9y
PFNpbXBsZUp1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1w
VGFibGVzKCkpOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklU
RGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFN0cmlu
Z0p1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGVzKCkpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5r
ZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBt
X3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpOworICAgICAg
ICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1
bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVk
VmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmls
ZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpKSkKLSAgICAg
ICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9jb2RlQmxv
Y2spOworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92
bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVG
b3JQcm9maWxlcigpKSkpIHsKKyAgICAgICAgLy8gT09QUzogYnVpbGQgYSBkaXNhc3NlbWJsZXIg
b2ZmIHVubGlua2VkIGNvZGUgYmxvY2sKKyAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5p
cXVlPEpJVERpc2Fzc2VtYmxlcj4obV9wcm9maWxlZENvZGVCbG9jayk7CisgICAgfQogICAgIGlm
IChVTkxJS0VMWShtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpKSB7CisgICAgICAgIC8vIE9P
UFM6IGJ1aWxkIHByb2ZpbGVyIGRpc2Fzc2VtYmxlciBvZmYgdW5saW5rZWQgY29kZSBibG9jawog
ICAgICAgICBtX2NvbXBpbGF0aW9uID0gYWRvcHRSZWYoCiAgICAgICAgICAgICBuZXcgUHJvZmls
ZXI6OkNvbXBpbGF0aW9uKAotICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fY29kZUJsb2NrKSwKKyAgICAgICAgICAgICAgICBt
X3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX3Byb2ZpbGVk
Q29kZUJsb2NrKSwKICAgICAgICAgICAgICAgICBQcm9maWxlcjo6QmFzZWxpbmUpKTsKLSAgICAg
ICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNv
ZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOworICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9m
aWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX3Byb2ZpbGVkQ29k
ZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpKTsKQEAgLTc0Miwx
MSArNzczLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAg
ICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsK
KyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSgpOwogCiAgICAgTGFi
ZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAotICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGludCBm
cmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXplID0gLWZyYW1l
VG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVUb3BPZmZzZXQpLCBjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDEpOwogICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CkBAIC03
NTcsMTYgKzc4OSwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemlu
CiAgICAgbW92ZShyZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzKCk7CisgICAgZW1p
dFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0
ZXJzKCk7CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3Rl
cnMoKTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
IHsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUpIHsKICAgICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hv
dWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50
ID0gMDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50
KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX3VubGlua2VkQ29k
ZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpID4gMSkpIHsKKyAgICAgICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDIpOworICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkg
KyBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+OjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlZ1QyKTsK
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV91
bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CiAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdhbnQgdG8gcHV0
IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCiAgICAgICAgICAgICAgICAgLy8ga2VlcCB0
aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gcmVjb3JkIHRo
ZSBkdW1teSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKSAmJiAhYXJndW1lbnQpCisgICAgICAgICAgICAgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxsRnJhbWU6OmFyZ3Vt
ZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC03NzcsMTIgKzgxMywxMiBAQCB2
b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgICAgICAgICAg
bG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsK
ICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRh
Z0dQUigpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSwgcmVzdWx0UmVn
cyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdzLCBBZGRyZXNzKHJlZ1Qy
LCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRP
ZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICAK
LSAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2RlQmxvY2stPmppdFR5cGUo
KSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXplTWFya2VyKSkKICAgICAg
ICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92ZSgqc2l6ZU1hcmtlciks
ICp0aGlzKTsKQEAgLTc5OSwyNCArODM1LDI3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dp
dGhvdXRGaW5hbGl6aW4KICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwog
ICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNhbGxPcGVyYXRpb25XaXRoQ2Fs
bEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJv
ciwgbV9jb2RlQmxvY2spOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZy
YW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwg
cmVnVDApOwogCiAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGlzIDEsIHdlIG5l
dmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCi0gICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBt
X2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5j
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKKyAgICBi
b29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSAhPSAxOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1
bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKICAgICAgICAgbV9hcml0eUNoZWNr
ID0gbGFiZWwoKTsKLSAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgJm1fY29kZUJsb2Nr
LT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7CisKICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUlu
UHJvbG9ndWUocmVnVDApOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkpKTsKIAog
ICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QxKTsKLSAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKS5saW5rVG8oYmVn
aW5MYWJlbCwgdGhpcyk7CisgICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKS5saW5rVG8o
YmVnaW5MYWJlbCwgdGhpcyk7CiAKICAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleCgwKTsKIAogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAg
ICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX2NvZGVC
bG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9w
ZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1l
Um9sbGJhY2tPbkV4Y2VwdGlvbihtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkg
PyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ss
IGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJyYW5jaFRlc3QzMiha
ZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwpAQCAtODM5LDcg
Kzg3OCw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAg
ICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKICAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVp
bGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKLSAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVu
aXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CisgICAgbV9saW5rQnVm
ZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBt
X3VubGlua2VkQ29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZm
b3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04NTgsOCArODk3LDggQEAgdm9pZCBKSVQ6Omxp
bmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAgICAgIGNhc2UgU3dpdGNo
UmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXI6
IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5z
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAg
ICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRP
ZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB1bmxpbmtlZFRh
YmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzW2pdOwpAQCAtODcxLDgg
KzkxMCw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU3dp
dGNoUmVjb3JkOjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8gY3Rp
RGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZv
ciAoYXV0byYgbG9jYXRpb24gOiB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUudmFsdWVzKCkp
IHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsb2NhdGlvbi5tX2JyYW5jaE9m
ZnNldDsKQEAgLTkwNiwzMiArOTQ1LDM1IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIHJlY29yZC5jYWxsZWUpOwogICAgIH0KIAot
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIpOwotICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVz
KG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5C
eVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNl
T2ZzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wcml2YXRlQnJh
bmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOworICAgIGF1dG8gZmluYWxpemVJQ3MgPSBbJl0gKGF1
dG8mIGdlbmVyYXRvcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5lcmF0b3JzKSB7
CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsKKyAgICAgICAg
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1fZG9uZSk7CisgICAgICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zbG93UGF0aEJlZ2luKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX2dldEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkc1dpdGhUaGlz
KTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5
VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9k
ZWxCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeUlkcyk7CisgICAgZmluYWxpemVJQ3Mo
bV9pbkJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9mcyk7CisgICAgZmluYWxp
emVJQ3MobV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7CiAKICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0
aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewotICAgICAgICBDYWxsTGlua0luZm8m
IGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAgICAgICAgaW5mby5zZXRD
b2RlTG9jYXRpb25zKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCi0gICAgICAgICAgICBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5k
b25lTG9jYXRpb24pKTsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIGluZm8gPSAqY29t
cGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBpbmZvLmRvbmVMb2Nh
dGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRp
b25JbmZvLmRvbmVMb2NhdGlvbik7CiAgICAgfQogCi0gICAgewotICAgICAgICBKSVRDb2RlTWFw
QnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2Rl
T2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0
KCkpCi0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+
KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY29kZUJs
b2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCkpOworICAgIEpJ
VENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOworICAgIGZvciAodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRl
Y29kZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0
KCkpCisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChi
eXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9s
YWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDI2ICs5ODIsMzcgQEAgdm9pZCBKSVQ6
OmxpbmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShtX2NvbXBpbGF0aW9uKSkgeworICAg
ICAgICAvLyBPT1BTOiBtYWtlIGJ5dGVjb2RlIHByb2ZpbGVyIGtub3cgYWJvdXQgdW5saW5rZWQg
Q0I/CiAgICAgICAgIGlmIChPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIo
KSkKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fY29tcGls
YXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsKLSAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2NvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOworICAg
ICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcHJvZmls
ZWRDb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCiAgICAgICAgIG1fcGNUb0NvZGVP
cmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpOwogICAgIAorICAgIC8vIE9PUFM6IE1h
a2UgYSB2ZXJzaW9uIG9mIENvZGVCbG9ja1dpdGhKSVRUeXBlIHRoYXQga25vd3MgYWJvdXQgVW5s
aW5rZWRDb2RlQmxvY2suCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBGSU5B
TElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAgICAgICAg
IkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlw
ZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAgICAgICAi
QmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAg
ICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hl
Y2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fYXJpdHlDaGVjayk7
Ci0gICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0
aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSk7CisgICAgbV9qaXRDb2RlID0gYWRv
cHRSZWYoKm5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaykpOworCisg
ICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBXVEZNb3ZlKG1fdW5saW5rZWRDYWxscyk7
CisgICAgbV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9zID0gV1RGTW92ZShtX2V2YWxDYWxs
TGlua0luZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3MgPSBXVEZNb3Zl
KG1fdW5saW5rZWRTdHViSW5mb3MpOworICAgIG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVz
ID0gV1RGTW92ZShtX3N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0Q29kZS0+bV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAg
IG1faml0Q29kZS0+bV9qaXRDb2RlTWFwID0gaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKTsK
KyAgICBtX2ppdENvZGUtPmFkb3B0TWF0aElDcyhtX21hdGhJQ3MpOworICAgIG1faml0Q29kZS0+
bV9jb25zdGFudFBvb2wgPSBXVEZNb3ZlKG1fY29uc3RhbnRQb29sKTsKIAogICAgIGlmIChKSVRJ
bnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBm
b3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1v
cnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5l
bmQoKS51bnRhZ2dlZFB0cigpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29k
ZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2VkQ29kZUJsb2NrLCByZXN1bHQuZXhl
Y3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxl
TWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBK
SVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxp
emVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTk2OCwyNSArMTAyMSwyMSBAQCBDb21w
aWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyCiAKICAgICBtX2xpbmtCdWZmZXIt
PnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCi0gICAgewotICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBtX2Nv
ZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVT
aHJpbmspOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2st
Pm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7Ci0gICAgICAgIEhhbmRsZXJJbmZv
JiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgIC8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgotICAgICAgICBoYW5kbGVyLm5hdGl2
ZUNvZGUgPSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5k
bGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7Ci0gICAgfQor
ICAgIC8vIE9PUFM6IERvbid0IHRoaW5rIHRoaXMgc2hyaW5rIGlzIHJlYWxseSBkb2luZyBhbnl0
aGluZyBhbnltb3JlLiBWZXJpZnkuCisgICAgLy97CisgICAgLy8gICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAvLyAgICBtX2NvZGVCbG9jay0+
c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwor
ICAgIC8vfQogCisgICAgLy8gT09QUzogbV9wY1RvQ29kZU9yaWdpbk1hcCBzaG91bGQgbGl2ZSBv
biBCYXNlbGluZUpJVENvZGUgZm9yIGJhc2VsaW5lIGNvZGVibG9ja3MuCiAgICAgaWYgKG1fcGNU
b0NvZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1h
cChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKKyAgICAgICAgbV9wcm9maWxlZENvZGVC
bG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKSk7
CiAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVK
SVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2ppdENvZGUtPnNpemUoKSkg
LwotICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNT
aXplKCkpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKIAotICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1f
aml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlu
a2VkQmFzZWxpbmVDb2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIHJldHVy
biBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CkBAIC05OTgsMTEgKzEwNDcsMTEgQEAgc2l6ZV90
IEpJVDo6Y29kZVNpemUoKSBjb25zdAogICAgIHJldHVybiBtX2xpbmtCdWZmZXItPnNpemUoKTsK
IH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKENv
ZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAg
ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgY29tcGlsZUFuZExp
bmtXaXRob3V0RmluYWxpemluZyhlZmZvcnQpOwotICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRo
cmVhZCgpOworICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZChjb2RlQmxvY2spOwogfQog
CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCkBAIC0xMDQyLDE4
ICsxMDkxLDI4IEBAIHZvaWQgSklUOjpkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUMKICAg
ICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKCptX3ZtLCAi
UHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24uIl9zKTsKIH0KIAotdW5zaWduZWQgSklUOjpm
cmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6
OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewog
ICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2Nh
bHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJz
KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSkp
OwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdpc3RlckNvdW50Rm9yRnJhbWVQb2ludGVyT2Zm
c2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAotaW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRG
b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGZyYW1lUmVnaXN0ZXJDb3Vu
dEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCitpbnQgSklUOjpzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVC
bG9jaykgLSAxKS5vZmZzZXQoKTsKIH0KIAoraW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBzdGFja1BvaW50ZXJPZmZzZXRG
b3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKwogSGFzaE1hcDxDU3RyaW5n
LCBTZWNvbmRzPiBKSVQ6OmNvbXBpbGVUaW1lU3RhdHMoKQogewogICAgIEhhc2hNYXA8Q1N0cmlu
ZywgU2Vjb25kcz4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lv
biAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw2ICszNyw3IEBACiAKICNkZWZpbmUgQVNTRVJUX0pJVF9PRkZTRVQoYWN0dWFs
LCBleHBlY3RlZCkgQVNTRVJUX1dJVEhfTUVTU0FHRShhY3R1YWwgPT0gZXhwZWN0ZWQsICJKSVQg
T2Zmc2V0IFwiJXNcIiBzaG91bGQgYmUgJWQsIG5vdCAlZC5cbiIsICNleHBlY3RlZCwgc3RhdGlj
X2Nhc3Q8aW50PihleHBlY3RlZCksIHN0YXRpY19jYXN0PGludD4oYWN0dWFsKSk7CiAKKyNpbmNs
dWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRl
ICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJKSVREaXNhc3NlbWJsZXIuaCIKQEAgLTQ0
LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJKSVRSaWdodFNo
aWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKKyNpbmNsdWRlICJM
TEludERhdGEuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlVu
dXNlZFBvaW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CkBAIC0xNDksMTQgKzE1
MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgc3RydWN0IENhbGxDb21waWxh
dGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhTdGFydDsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVMb2NhdGlvbjsKLSAgICAgICAgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm87CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1
bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBj
YWxsTGlua0luZm9Db25zdGFudDsKICAgICB9OwogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJl
dHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKLSAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJ
VCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1F
TlQgSklUIDogcHVibGljIEpTSW50ZXJmYWNlSklUIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJ
VFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogICAgICAg
ICBmcmllbmQgY2xhc3MgSklUVGh1bmtzOwpAQCAtMTcxLDYgKzE3Myw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBt
YXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCiAgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7CiAKKyAgICAgICAg
dXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgcHVibGljOgogICAgICAgICBKSVQo
Vk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0xNzgs
MjggKzE4MiwzMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVk0mIHZtKCkgeyByZXR1cm4g
KkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CiAKICAgICAgICAgdm9pZCBjb21waWxlQW5kTGlua1dp
dGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKLSAgICAgICAgQ29tcGlsYXRp
b25SZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1
bHQgZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKik7CiAgICAgICAgIHNpemVfdCBjb2Rl
U2l6ZSgpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZv
cmVDb21waWxlKCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQg
Y29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDAp
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVj
b2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJ
VCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoY29kZUJsb2Nr
LCBlZmZvcnQpOwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVn
aXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOworICAgICAgICBzdGF0aWMgaW50
IHN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogICAgICAgICBzdGF0
aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsKIAogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBjb21waWxlVGlt
ZVN0YXRzKCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTZWNvbmRzIHRvdGFs
Q29tcGlsZVRpbWUoKTsKIAorICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX21ldGFk
YXRhR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUjsKKyAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc19jb25zdGFudHNHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjpw
YkdQUjsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpOwogICAgICAgICB2b2lkIGxpbmsoKTsKLSAgICAg
ICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQp
OworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqLCBK
SVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBK
SVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5k
Q2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQpAQCAtMjIz
LDYgKzIzMiwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWRQdHJGcm9t
TWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkMzJGcm9t
TWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkOEZyb21N
ZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CisgICAg
ICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6
ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAg
ICAgICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0ZWNvZGUmLCBzaXpl
X3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAg
ICAgIHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwg
c2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBsb2Fk
Q29uc3RhbnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BSUmVnKTsKKyAgICBwcml2YXRlOgor
ICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2Fk
Q29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworCisgICAgICAgIHZv
aWQgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdU
MCk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5k
bGVyKTsKQEAgLTI1OCwxNiArMjkzLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6
OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJn
cyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgICYm
IE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExp
bmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxf
dmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAg
ICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lk
PiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
Y2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
ICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwo
Y29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0lu
ZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAg
IHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yODcsMTQgKzMyMiwxNSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBv
d25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAg
dm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcik7
CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMg
aW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3Jh
dGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwg
R1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgLy92b2lk
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAgICAgICAg
Ly92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3Mp
OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29k
ZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1Zh
bHVlUmVncyk7CkBAIC0zMDcsNiArMzQzLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwg
QXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklE
IGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJ
RCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAg
ICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYs
IHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwog
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBlY21hTW9k
ZShPcCk7CkBAIC01OTIsNyArNjMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
ICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjI2LDE0ICs2NjUs
MTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2Fz
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBi
b29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eU9yQnJhbmQsIEFjY2Vzc1R5cGUpOwotICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0SGFzUHJp
dmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5l
d0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFZh
ckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2
b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0
VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsK
KyAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNj
cmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MsIHVuc2lnbmVkIGRlcHRoKTsKICAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwog
I2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02NDUsNyArNjg0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAj
ZW5kaWYKICAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0
Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRl
clRvU2V0KTsKKyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBw
b2ludGVyVG9TZXQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVl
KiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKICAgICAg
ICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09m
T3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAg
ICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpAQCAtNjU0
LDYgKzY5Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRv
Q2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAg
ICAgICBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUg
Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVy
YW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRD
b25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY5NSwyNiArNzM1LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIg
fHwgcmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dF
TkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5l
cmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZS
T01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJB
VE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5l
cmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFt
ZSk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNv
bHZlU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIE1vZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5l
IHRoYW4gdXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVj
YXVzZSB3ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAg
ICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJl
c29sdmVUeXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JF
U09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNv
bHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShE
RUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9T
Q09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hh
ciogdGh1bmtOYW1lKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiwgc3RkOjpvcHRpb25h
bDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2Nv
cGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVu
a05hbWUpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1RydXRoeUdlbmVyYXRvcihW
TSYpOwpAQCAtNzU5LDEwICs3ODEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlv
bihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQo
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCk7CiAgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHQoQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7Ci0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRh
JiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICB2b2lk
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
TWV0YWRhdGEmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29u
c3QgQnl0ZWNvZGUmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQpOwogICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwg
dHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0
czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KQEAgLTgy
MCwyMCArODQyLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZz
ZXQpKTsKICAgICAgICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4g
QXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25U
eXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgT3BlcmF0aW9uVHlwZSBvcGVyYXRp
b24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgT3BlcmF0aW9uVHlw
ZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAg
ICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7
Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uLCByZXN1bHQpOworICAgICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICAgICAgfQogCi0g
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lIE1ldGFkYXRh
LCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25U
eXBlLCB0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjpl
bmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCB2b2lk
PgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBB
ZGRyZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBB
ZGRyZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAg
ICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50c0ZvckluZGlyZWN0Q2FsbDxPcGVyYXRp
b25UeXBlPih0YXJnZXQsIGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIEFk
ZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CisgICAg
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHRXaXRoUHJvZmlsZShieXRlY29kZSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJn
ZXQub2Zmc2V0KSwgcmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CkBAIC05MTgsMjUgKzk0MCwyMCBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBib29sIGNh
bkJlT3B0aW1pemVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZDsgfQotICAgICAgICBib29s
IGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZE9ySW5s
aW5lZDsgfQogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBtX3No
b3VsZEVtaXRQcm9maWxpbmc7IH0KICNlbHNlCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQo
KSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVk
KCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgLy8gRW5hYmxlcyB1c2Ugb2YgdmFsdWUgcHJv
ZmlsZXIgd2l0aCB0aWVyZWQgY29tcGlsYXRpb24gdHVybmVkIG9mZiwKICAgICAgICAgLy8gaW4g
d2hpY2ggY2FzZSBhbGwgY29kZSBnZXRzIHByb2ZpbGVkLgogICAgICAgICBib29sIHNob3VsZEVt
aXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBl
bWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOworCisgICAg
ICAgIHZvaWQgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworCiAgICAgICAgIHN0YXRpYyBib29s
IHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGls
ZVRpbWVzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB5b3UgbmVlZCB0byBjaGVjayBhIHZh
bHVlIGZyb20gdGhlIG1ldGFkYXRhIHRhYmxlIGFuZCB5b3UgbmVlZCBpdCB0bwotICAgICAgICAv
LyBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFzdCBhbmQgc2xvdyBwYXRoLCB0aGVuIHlvdSB3
YW50IHRvIHVzZSB0aGlzLgotICAgICAgICAvLyBJdCB3aWxsIGdpdmUgdGhlIHNsb3cgcGF0aCB0
aGUgc2FtZSB2YWx1ZSByZWFkIGJ5IHRoZSBmYXN0IHBhdGguCi0gICAgICAgIEdldFB1dEluZm8g
Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBCaW5hcnlPcD4KLSAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmls
ZShCaW5hcnlPcCk7CiAKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKQEAg
LTk2Myw5ICs5ODAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFNsb3dDYXNl
RW50cnk+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRj
aGVzOwogCi0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1
dEluZm9zOwotICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1f
Y29waWVkQXJpdGhQcm9maWxlczsKLQogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNr
czsKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJh
Y2s7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTk5LDExICsxMDEzLDI0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0aW9uKiwgVW5p
cXVlUmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVy
YXRpb25TdGF0ZTsKIAogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJv
b2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQ
cm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4OwogCi0gICAgICAgIFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgICAg
IENvZGVCbG9jayogbV9wcm9maWxlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVW5s
aW5rZWRDb2RlQmxvY2sqIG1fdW5saW5rZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisKKyAgICAg
ICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29k
ZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsK
KyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVjdENvbnN0YW50
IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAgICAgIEJhZzxV
bmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgICAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgICAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U2lt
cGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIEZpeGVkVmVjdG9yPFN0
cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAgICAgIHN0cnVj
dCBOb3RBQ29kZUJsb2NrIHsgfSBtX2NvZGVCbG9jazsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1
bWVudEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMzIwLDcgKzMyMSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdU
MSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIs
IHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihp
bnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7
CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCkBAIC01NzMsNyArNTc3LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KGNvbnN0IAogCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAg
IGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIyLDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlE
b3VibGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+dW5hcnlBcml0aFBy
b2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tX3Byb2ZpbGVJbmRleCk7
CisgICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9tYXRoSUNzLmFkZEpJVE5lZ0lDKGFyaXRoUHJv
ZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24s
IG5lZ2F0ZUlDKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhv
c2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0lu
dAogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7
CkBAIC04OTksOCArOTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0
cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRk
SUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEFkZD4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUQWRkSUMqIGFkZElDID0g
bV9tYXRoSUNzLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRv
TWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFz
dDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQpAQCAtOTQ1LDEwICs5NTAsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIGJvb2wgZ2VuZXJhdGVkSW5s
aW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CiAgICAgICAgIFVuYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxl
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVn
cyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAg
ICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBA
IC0xMDE1LDEwICsxMDIxLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlN
YXRoSUMKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAgICAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFBy
b2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFBy
b2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQ
cm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBh
ZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEw
NTUsMTMgKzEwNjIsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElD
PAogI2VuZGlmCiAKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0
aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJ
QykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNS
ZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVp
bnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBF
TkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAg
LTExMjAsMTMgKzExMjgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1h
dGhJQwogI2VuZGlmCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1h
dGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAg
aWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYg
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7Cisg
ICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAg
ICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJp
dHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdp
c2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwog
CiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVs
KCk7CkBAIC0xMTY2LDcgKzExNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxw
dHI7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOworICAgICAgICBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVC
bG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCku
bV9wcm9maWxlSW5kZXgpOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNv
ZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVy
YW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKQEAgLTEyMTEsOCArMTIyMCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAg
SklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVC
bG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCku
bV9wcm9maWxlSW5kZXgpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fbWF0aElDcy5hZGRKSVRN
dWxJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVu
dEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZh
bHVlTXVsKTsKIH0KQEAgLTEyMjcsOCArMTIzNiw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9t
dWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVFN1
YklDKiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwogICAgIG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAg
ZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
blZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BD
YWxsRXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwog
ICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6
OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwpAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQgSklUOjpj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKIAogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVn
VDEsIHJlZ1QwKTsKICAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUp
OwpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3Ry
dWN0aW8KICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKIAotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5r
ZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAog
ICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM0MSw3ICszNDEsNiBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgfQogCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKQEAgLTM1NCw3ICszNTMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKGNvbnN0IEluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBA
CiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIK
ICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmgiCiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRlICJTbG93UGF0
aENhbGwuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgpAQCAtNDQsNyArNDUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
KS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOwogfQogCkBAIC01MywxOCArNTQsMTggQEAgc3Rk
OjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9w
OjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9wOjpvcGNvZGVJRCAh
PSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHVuc2lnbmVk
IGNoZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGludCBhcmdDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwg
Y2hlY2twb2ludCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4o
c3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpKTsKIAor
CiAgICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihyZWdp
c3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApKSwg
cmVnVDApOwogICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwogICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDApOwotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBhcnJheVByb2ZpbGVGb3IobWV0YWRhdGEs
IGNoZWNrcG9pbnQpLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0
b3JlMzJUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CiAgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTc4LDcgKzc5LDcgQEAgc3RkOjplbmFi
bGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNv
ZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRl
Y29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3Rh
bnQpCiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50
czsKQEAgLTkxLDcgKzkyLDggQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0
ZWNvZAogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2Fy
ZEFyZ3VtZW50czsKICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25T
aXplRnJhbWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgLWZpcnN0RnJl
ZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
MCk7CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCByZWdUMCwgcmVnVDEsIC1maXJz
dEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0
aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCByZWdU
MSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTAxLDE0ICsxMDMsMTYgQEAgSklUOjpjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9
IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UKICAgICAgICAg
c2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3Bl
cmF0aW9uKHNldHVwT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9u
LCByZWdUMywgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50
IGNvdW50LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
KyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7Ci0gICAgSnVtcCBub3RCaWdnZXN0
ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMiwgaW5m
by0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7CisgICAgbG9hZENv
bnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpKSwgcmVnVDMpOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdU
MywgcmVnVDIpOworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5m
bzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CiAgICAgbm90Qmln
Z2VzdC5saW5rKHRoaXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgpAQCAtMTI3
LDE2ICsxMzEsMTYgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpCiB0ZW1w
bGF0ZTw+CiBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVj
b2RlKQogewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7
Ci0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFt
ZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVy
LCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7
CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25t
ZW50KCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwotCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5
dGVjb2RlKTsKIApAQCAtMTQ4LDcgKzE1Miw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5m
byogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9z
LmFkZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChD
YWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1i
eXRlY29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE2MCw0NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9m
ZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90
OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZp
cnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0
KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGls
ZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCi17Citib29sIEpJ
VDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNp
Z25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkgewogICAgIHJldHVybiBmYWxzZTsKIH0K
IAogdGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxs
JiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUs
IFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBD
YWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNz
ZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lz
dGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9j
YWxzID0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0
YS0+bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVt
UGFyYW1ldGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICBz
aHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rl
cjsKKyAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2
IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVm
ZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5h
cmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBieXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0K
KyAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVy
eTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAg
ICAgICBEYXRhRm9ybWF0SlMpOwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAg
ICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVm
ZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8t
PnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxs
ZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVm
ZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1wTGlzdCBzbG93
UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBD
YWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRD
b25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQ
YXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJl
Z1QwLCByZWdUMiwgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVm
ZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uo
c2xvd1BhdGhzKTsKKworICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8t
PmZyYW1lU2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9u
ZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIxOCwxNCAr
MjI2LDI1IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAg
ICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBD
YWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0g
ICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3Bf
Y2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVj
b2RlLCBpbmZvKTsKKworICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOwor
ICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgaW5mbyA9IG1fdW5s
aW5rZWRDYWxscy5hZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBl
Rm9yKG9wY29kZUlEKTsKKworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOworCisgICAgICAg
IEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4
KTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25J
bmZvKCkpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhd
LnVubGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFu
dDsKKyAgICB9CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7
CiAKICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICBhdXRvIGJ5dGVjb2RlSW5k
ZXggPSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7Ci0gICAgdWludDMy
X3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7Cisg
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQpKTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhv
bGRzIGNhbGxlZS4KQEAgLTIzNCwxNiArMjUzLDEyIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
KGNvbnN0IEluc3RydWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkg
PT0gY2FsbExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86
OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
by5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAgICBpZiAoY29t
cGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCisgICAgaWYg
KGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgsIGluZm9D
b25zdGFudCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGxvYWRDb25zdGFudChpbmZvQ29uc3Rh
bnQsIHJlZ1QyKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGF1
dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCBy
ZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAgICAgYXV0byBz
bG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCByZWdUMCwgcmVnVDIsIFsmXSB7CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKICAgICAgICAg
fSk7CkBAIC0yNTMsMTMgKzI2OCwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJ
bnN0cnVjdGlvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9
IGluZm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6WWVzKTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdERh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9uZUxvY2F0aW9u
ID0gbGFiZWwoKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRp
b247CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxp
Z25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0yNzMsMjAg
KzI4OCwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOwogCiAgICAgaWYg
KG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFy
YXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAg
ICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92
bSwgKnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKCptX3ZtLCAq
dGhpcywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVy
bkZyb21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpAQCAtMzk1LDE3ICs0MTAsMzAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogCiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwogICAgIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
c3R1YkluZm87CisKKyAgICBtb3ZlKHJlZ1QwLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
cmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BS
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlc3VsdEdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25leHQsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlz
KTsKIH0KQEAgLTQxNiwxMCArNDQ0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgaXRlcmF0
b3JHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgSnVtcExpc3Qgbm90
T2JqZWN0OwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9yR1BS
KSk7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckdQUikp
OwpAQCAtNDMyLDE5ICs0NTgsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29ucwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAg
Q2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJh
dG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBtb3Zl
KGl0ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0
eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50
R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZS
ZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogCiAg
ICAgYXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJ
dGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogCiAgICAgZG9uZS5saW5r
KHRoaXMpOwogfQpAQCAtNDUyLDcgKzQ3Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9uID0gKFsmXSAo
KSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKICAgICAgICAgY2Fz
ZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25hcnJvdzsKQEAgLTQ3MCw1
MCArNDkzLDc3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAg
ICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRpb25Nb2RlOjpH
ZW5lcmljKSkpOwogCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBvcjgoVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgQWJz
b2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2l0ZXJhdGlvbk1ldGFkYXRhLnNlZW5Nb2RlcykpOwor
ICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6
Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zm
c2V0T2ZTZWVuTW9kZXMoKSwgcmVnVDApOworICAgIG9yMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgcmVnVDApOworICAgIHN0b3Jl
OFRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9m
ZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0
T2ZTZWVuTW9kZXMoKSk7CiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1
Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9p
bnQoKTsKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2JqZWN0KSBpbiBy
ZWdUMAogCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGl0ZXJSZXN1
bHRHUFIgPSByZWdUMjsKLSAgICBHUFJSZWcgZG9uZUdQUiA9IHJlZ1QxOwotICAgIC8vIGl0ZXJS
ZXN1bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0IGJ5IGlkIGJlbG93Lgot
ICAgIG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnNjcmF0Y2g7CisgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIp
OwogCisgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQ7CiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
aXRlclJlc3VsdEdQUik7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5W
YWx1ZUdQUiA9PSBiYXNlR1BSKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUik7CiAKICAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVncyA9IFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJlc2VydmVkUmVn
cy5hZGQodmFsdWVHUFIpOworICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZChpdGVyQ2FsbFJlc3Vs
dEdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KSwgcHJlc2VydmVkUmVncywKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSks
IEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgcmVnVDMs
IEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIHByZXNlcnZlZFJlZ3MsCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHN0dWJJbmZvR1BS
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVn
cyB7IGRvbmVHUFIgfSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2tw
b2ludCgpOwogICAgIH0KIAotCiAgICAgewotICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MjsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CisgICAgICAgIFJlZ2lzdGVyU2V0
IHVzZWRSZWdpc3RlcnMoZG9uZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAgICAgICBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlv
bkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJy
YW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
Z2xvYmFsR1BSKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1vdmUoaXRl
ckNhbGxSZXN1bHRHUFIsIGJhc2VHUFIpOwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCByZWdUNCwgQWNjZXNzVHlwZTo6
R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMt
PnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7Cisg
ICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
ICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlc3VsdEdQUik7CiAK
ICAgICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwogICAgIH0KQEAgLTUyNyw1OSArNTc3
LDU1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChq
dW1wKCkpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgewogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVz
dWx0R1BSID0gcmVnVDI7CiAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAg
ICAgSnVtcExpc3Qgbm90T2JqZWN0OwotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElm
Tm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKGl0ZXJDYWxsUmVzdWx0R1BSKSk7CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKTsKICAgICAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAg
ICAgICAgCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOworICAg
ICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJDYWxsUmVzdWx0R1BS
KSk7CiAKLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwot
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhH
UFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0
aW9uKCkpLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUs
IGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotCi0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIHJlZ1QxKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxS
ZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LCBkb25lVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKKworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZG9uZVZSZWcsIGRvbmVHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90
T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAg
ICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjAp
OwogICAgIH0KIAogICAgIHsgICAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAg
ICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKICAgICAgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCk7CiAgICAgICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107
CiAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgQ2Fs
bCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIw
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCB2YWx1ZVZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0
ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFy
Z3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Cisg
ICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKICAg
ICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogCisKIG5h
bWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgREZHIHsKQEAgLTE1OSwxMCArMTYwLDEwIEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAg
ewotICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVz
ZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
Q2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKKyNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIApAQCAtNDYsMTAgKzQ3
LDkgQEAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBnYXJiYWdlU3R1YkluZgogSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQotICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAg
ICwgbV9qaXRUeXBlKGppdFR5cGUpCisgICAgOiBtX2ppdFR5cGUoaml0VHlwZSkKIHsKLSAgICBt
X3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNz
VHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKKyAgICBtX3N0dWJJbmZvID0g
Y29kZUJsb2NrID8gY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2lu
KSA6IGdhcmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNhbGxTaXRlSW5kZXggPSBj
YWxsU2l0ZTsKIAogICAgIG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJz
OwpAQCAtNTksNyArNTksNiBAQCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6
ZSgKICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgsIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCkKIHsKICAgICBtX3N0dWJJ
bmZvLT5zdGFydCA9IHN0YXJ0OwotCiAgICAgbV9zdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gZmFz
dFBhdGgubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihtX2RvbmUpOwogCiAgICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkKQEAgLTY3LDYgKzY2LDE1IEBAIHZvaWQgSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIG1fc3R1YkluZm8tPnNsb3dQYXRo
U3RhcnRMb2NhdGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KG1fc2xvd1BhdGhCZWdpbik7CiB9CiAKK3ZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6Omdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIG1fc3RhcnQgPSBq
aXQubGFiZWwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRU
eXBlKSk7CisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAg
IGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIG1f
ZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJh
dG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTEwLDcgKzEx
OCw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyBiYXNl
LCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUpCiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9y
aWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBz
dHViSW5mb0dQUikKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lLnVpZCgpID09
IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAgICwgbV9p
c0xlbmd0aEFjY2Vzcyhjb2RlQmxvY2sgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9j
ay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVO
QUJMRShKSVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0
aW9uVmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJK
U0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHV0S2luZC5oIgpAQCAtMzgsMTEgKzM5LDExNCBAQCBu
YW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXI7CiBjbGFzcyBDYWxsU2l0
ZUluZGV4OwogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklUOwogY2xhc3MgU3RydWN0dXJlU3R1
YkluZm87CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKIAogZW51bSBjbGFzcyBB
Y2Nlc3NUeXBlIDogaW50OF90OwogZW51bSBjbGFzcyBKSVRUeXBlIDogdWludDhfdDsKIAorc3Ry
dWN0IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKwor
c3RydWN0IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lRW51bWVyYXRvckdl
dEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJ
bmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86
OnJlZ1QyOworICAgIC8vIFdlIHJlbHkgb24gdGhpcyB3aGVuIGxpbmtpbmcgYSBDb2RlQmxvY2sg
YW5kIGluaXRpYWxpemluZyByZWdpc3RlcnMgZm9yIGEgR2V0QnlWYWwgU3R1YkluZm8uCisgICAg
c3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOwor
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHkpOworICAgIHN0YXRpY19hc3NlcnQocmVzdWx0ID09IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgc3RhdGljX2Fzc2VydChzdHViSW5mbyA9PSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbyk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5m
bzo6YXJndW1lbnRHUFIyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3RvID0gR1BS
SW5mbzo6YXJndW1lbnRHUFIzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gxID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMiA9IEdQUkluZm86Om5vbkFyZ0dQUjE7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZv
OjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnMgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyB0aGlzVmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5l
SW5CeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7Cit9OworCitzdHJ1Y3Qg
QmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBi
YXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUg
PSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBH
UFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGUgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3RydWN0
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YnJhbmQgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChicmFuZCA9PSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisKIGNsYXNzIEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
cigpIHsgfQpAQCAtNjIsMTUgKzE2NiwyMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZSgK
ICAgICAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93
UGF0aExpbmtCdWZmZXIsCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPiBzdGFydCk7Ci0gICAgCisKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9H
UFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogbV91bmxpbmtlZFN0dWJJbmZv
IHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKwogcHJvdGVjdGVk
OgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAg
ICAgU3RydWN0dXJlU3R1YkluZm8qIG1fc3R1YkluZm87CiAKK3B1YmxpYzoKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9kb25l
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Nsb3dQYXRoQmVnaW47Ci0gICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
bV9zbG93UGF0aENhbGw7IC8vIE9PUFM6IG1ha2UgcmVwb3J0Q2FsbCBwYXNzIHNvbWV0aGluZyBp
biB3ZSBjYW4gdXNlIGZvciB0aGUgbm9uLUNUSSB0aHVua3MgYnVpbGRzLiAKIH07CiAKIGNsYXNz
IEpJVEJ5SWRHZW5lcmF0b3IgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewpAQCAt
OTgsNyArMjA4LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBK
U1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7
CitwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0aEp1bXA7CiB9Owog
CkBAIC0xMzIsOCArMjQyLDggQEAgcHVibGljOgogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSA9
IGRlZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAotICAgICAgICBDb2RlQmxvY2sq
LCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYg
dXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFzZSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0
Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29k
ZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IENhY2hlYWJsZUlkZW50aWZpZXIsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVS
ZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwg
UHV0S2luZCk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVy
Jik7CiAgICAgCkBAIC0xNjMsMTEgKzI3Myw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJh
dGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpTVmFsdWVSZWdz
IG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93
UGF0aEp1bXA7CiB9OwogCkBAIC0xOTEsOCArMjk5LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBn
ZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1
bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yMTYsOCArMzIyLDYgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBh
dGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yNDEsOCArMzQ1LDYgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXBy
aXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yNzcsOCArMzc5
LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExp
bmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CiAKLXByaXZhdGU6Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBh
dGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMDIsMTEgKzQwMiw5IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
IAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV9y
ZXN1bHQ7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMzMCw4ICs0
MjgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjgy
MDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDEzICszNSwzOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykK
IHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVD
b25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09w
ZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Cit9CisKK0FM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciBzcmMpCit7
CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KSB7Cisg
ICAgICAgIC8vIE9PUFM6IGZpbmQgYSB3YXkgdG8gYXNzZXJ0IHRoYXQgYWxsIGxpbmsgdGltZSBj
b25zdGFudHMgYXJlIGNlbGxzLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzQ2VsbCgpOwogfQogCiBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
ICAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChzcmMpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0gU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVy
IGVudHJ5KQpAQCAtMTU2LDM2ICsxODEsMzYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeAogI2VuZGlmCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgot
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRh
LCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3Qp
CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVl
R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3Mo
cmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9yZShkc3QsIHJl
dHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCiAgICAgcmV0dXJuIGNhbGw7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBk
c3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KQogewogICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
dHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1Zh
bHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1
cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJu
VmFsdWVHUFIpOwogI2VuZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93
Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZp
cnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwo
cmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpCiAgICAgICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKIH0KIApAQCAtMjA1LDcgKzIzMCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhh
c0FueVNsb3dDYXNlcygKIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQo
KQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAg
ICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQo
KSArIDEpOwogCiAgICAgYXV0byByZXN1bHQgPSBtX2NoZWNrcG9pbnRMYWJlbHMuYWRkKG1fYnl0
ZWNvZGVJbmRleCwgbGFiZWwoKSk7CkBAIC0yMTUsNyArMjQwLDcgQEAgaW5saW5lIHZvaWQgSklU
OjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dU
b0hvdEZvckNoZWNrcG9pbnQoSnVtcCBqdW1wKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
bV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmlu
ZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNl
dCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBt
X2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwg
bV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byBpdGVyID0gbV9j
aGVja3BvaW50TGFiZWxzLmZpbmQobV9ieXRlY29kZUluZGV4KTsKQEAgLTI5MywyOSArMzE4LDM0
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRDb3VudChBYnN0cmEKIAogQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMp
CiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwo
KSktPmxlbmd0aCgpID09IDE7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCi17
Ci0gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7Ci0KLSAgICAvLyBXZSdyZSBpbiBh
IHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRv
IGEgZGlyZWN0Ci0gICAgLy8gc3RvcmUuCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdG9yZTY0
KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSNlbHNlCi0gICAgRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0gICAgc3RvcmUzMih2YWx1ZS5w
YXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7Ci0gICAgc3RvcmUzMih2
YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOwotI2VuZGlmCi19CisgICAg
aWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
dW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykg
PT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5n
KCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgo
KSA9PSAxOworfQorCisvLyBPT1BTCisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCisv
L3sKKy8vICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOworLy8KKy8vICAgIC8vIFdl
J3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2Fu
IGp1c3QgZG8gYSBkaXJlY3QKKy8vICAgIC8vIHN0b3JlLgorLy8jaWYgVVNFKEpTVkFMVUU2NCkK
Ky8vICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8j
ZWxzZQorLy8gICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJpdHdpc2Vf
Y2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Cisv
LyAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXls
b2FkKTsKKy8vICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMu
dGFnKTsKKy8vI2VuZGlmCisvL30KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBpbmxpbmUgc3Rk
OjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2Zp
bGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4gSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwog
I2Vsc2UKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKQEAgLTMyMywyNCAr
MzUzLDI1IEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWMKIAogaW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4p
IHsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWVSZWdzIHZhbHVl
KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2YWx1
ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOworICAgIHB0cmRpZmZfdCBvZmZzZXQg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVPZmZzZXRGb3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7Cisg
ICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBvZmZzZXQpKTsK
IH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyByZXN1bHRSZWcpCi17
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJl
c3VsdFJlZykpOwotfQorLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyByZXN1bHRSZWcpCisvL3sKKy8vICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRS
ZWcpKTsKKy8vfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEdQUlJlZyByZXN1
bHRSZWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEdQUlJlZyByZXN1
bHRSZWcpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJl
Z3MocmVzdWx0UmVnKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNW
YWx1ZVJlZ3MocmVzdWx0UmVnKSk7CiB9CiAjZW5kaWYKIApAQCAtMzYwLDYgKzM5MSwyMSBAQCBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXCiAgICAgfQogfQogCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHB0cmRpZmZfdCBvZmZz
ZXRPZkFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hH
UFIpCit7CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAgICBsb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHNjcmF0Y2hHUFIs
IGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmlsZSk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwg
UmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQoreworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
ICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2VsbEdQUiwg
c2NyYXRjaEdQUik7Cit9CisKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJldHVybiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CkBAIC0zODAsNyArNDI2LDcgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYg
KHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNv
bnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZElt
bVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxvYWRE
b3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTQyLDcgQEAgaW5saW5l
IHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxs
KHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTUyLDcgQEAgaW5saW5l
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklE
IHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAg
aWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQog
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0LDEx
ICs1NjAsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAgICAg
fQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0
dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU4NSwxNyBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1fYnl0
ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQu
CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1i
ZXIoKSkKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSkpLCBkc3QpOwotICAgICAgICBlbHNlCisgICAgICAgIHN3aXRjaCAobV91bmxpbmtlZENvZGVC
bG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkgeworICAgICAgICBj
YXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAgICAgY2FzZSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBt
b3ZlKEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvYWRDb2RlQmxv
Y2tDb25zdGFudChzcmMsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC01NjYsMTEgKzYxMyw2IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFu
dEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBS
ZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwpA
QCAtNTk1LDcgKzYzNyw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2UKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAoIW1fY29k
ZUJsb2NrLT5pc0tub3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHZSZWcpKQog
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAtNjM3LDMw
ICs2NzksNyBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7CiAg
ICAgaWYgKHRhcmdldCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4gbV9jb2Rl
QmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1BTFdBWVNfSU5M
SU5FIEdldFB1dEluZm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSBieXRlY29k
ZSkKLXsKLSAgICB1bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQgKyAxOyAvLyBI
YXNoTWFwIGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29w
aWVkR2V0UHV0SW5mb3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdl
dFB1dEluZm9zLmVuZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFs
dWUpOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2dldFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBn
ZXRQdXRJbmZvLm9wZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0aFByb2ZpbGUg
SklUOjpjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0gICAgdWludDY0
X3Qga2V5ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpICsgMSkg
PDwgMzIgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0YUlEKTsKLSAg
ICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5KTsKLSAgICBp
ZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAgICAgICByZXR1
cm4gaXRlcmF0b3ItPnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0aFByb2ZpbGUg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgbV9j
b3BpZWRBcml0aFByb2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJuIGFy
aXRoUHJvZmlsZTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVt
cE9mZnNldChpbnN0cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjgx
LDYgKzcwMCw2MSBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAg
ICAgcmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5
dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRhZGF0YShjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3Moc19tZXRhZGF0
YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0YWRhdGEoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQorewor
ICAgIGxvYWQ4KEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0
YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSB2YWx1
ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3Jl
OCh2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRh
ZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3Rv
cmUzMlRvTWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNp
emVfdCBvZmZzZXQpCit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BS
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sK
KyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCku
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHNfbWV0YWRhdGFHUFIs
IHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KGNvbnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQo
bV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BS
UmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkp
OworICAgIC8vIE9PUFM6IE1heWJlIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudD8KKyAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVzdWx0LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9y
QnVmZmVyKCkpLCByZXN1bHQpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlc3VsdCwgY29uc3RhbnQu
dG9Db25zdGFudEluZGV4KCkgKiBzaXplb2YoSlNWYWx1ZSkpLCByZXN1bHQpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyODIwMTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25z
dCBJbnN0cnVjdGlvCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JD
YXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJ
bW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNl
dCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihj
b2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hh
YmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC05OTcsNyArOTk3LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFi
bGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4K
ICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0
YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6
SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJs
ZSk7CiAKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFy
KGNvbnN0IEluc3QKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGlu
YXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRT
aW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxl
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
ICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29k
ZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxp
bmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDQyLDcgKzEw
NDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAg
ICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJ
bmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRU
YWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2
ICs0Myw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVmlydHVh
bFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFt
ZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTQsMTEgKzU2LDIyIEBAIHZv
aWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewot
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0g
ICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwotICAgICAg
ICBlbHNlCisgICAgICAgIC8vIE9PUFM6IG1vc3QgIk90aGVyIiBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gY29uc3RhbnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQgZnJvbSB0aGUgVW5saW5rZWRDb2Rl
QmxvY2suIEl0J3MganVzdAorICAgICAgICAvLyBhIGNvdXBsZSB0eXBlcyB0aGF0IGNhbid0LiBD
cmVhdGUgYW4gYWJzdHJhY3Rpb24gZm9yIHRoYXQuCisKKyAgICAgICAgc3dpdGNoIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpKSB7Cisg
ICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICBj
YXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAg
ICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3Io
ZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDApOworICAgICAgICAg
ICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODcsMzcgKzEwMCwzNSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Q
cm9maWxlLnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxP
YmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAg
QWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8
SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpB
bGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwog
ICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3Jh
dGNoUmVnID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKIAot
ICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVs
c2UgewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5
ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Qo
cmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJl
ZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dD
YXNlcyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7
Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigp
LCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3
T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJlZyk7
CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVk
SW1tUHRyKG51bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklU
QWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVy
Zmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJl
UmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKKyAg
ICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKKyAg
ICBtdXRhdG9yRmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QpOworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdU
MzsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2Jq
ZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3Ry
dWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3
T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTEzMSw3ICsxNDIsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKICAgICAvLyBXZSBkb24ndCBq
dW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVt
cCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJ
bnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsK
KyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fZnVu
Y3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24pKSk7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CiAKQEAgLTE1NCwzMCArMTY2LDM4IEBA
IHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90
byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJh
c2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAg
ICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGgg
dGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBC
YXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvdG9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCB2YWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9HUFIp
OwogICAgIAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3Qg
YmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5o
YXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVl
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNl
T2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAg
ICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVn
VDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8v
IHByb3RvCi0gICAgICAgIHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNo
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IHJlc3VsdEdQUiwKKyAgICAgICAgdmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAgICAg
ICBzdHViSW5mb0dQUiwKKyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3Jh
dGNoMSwgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOwor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAg
CisKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCArMjEy
LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGlt
aXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZv
Ojpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25J
bnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwg
cmVnVDIsIHJlZ1QxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEp
OwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
c3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09IGFy
Z3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnZhbHVlID09IGFyZ3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRl
Y2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVn
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24q
KQpAQCAtMjQwLDcgKzI1OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmlu
ZWQoY28KIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWws
IHJlZ1QwLCByZWdUMSwgcmVnVDApOwogCkBAIC0zNzQsNyArMzkzLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOworICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRPZmZz
ZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0RnVu
Y3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwogI2Vsc2UKQEAgLTM4Myw5ICs0MDIsOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiB9CiAKICNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKQogewot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBqaXQuY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0Zv
cigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpOwpAQCAtNDExLDcgKzQzMCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShj
b25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQsOSArNDUyLDEwIEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZvaWQgSklUOjplbWl0
X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRG
dW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1
bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25h
bWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0ODQsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNGYWxzZXlHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzUwMSw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBi
ZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAg
IC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyArNTQwLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8vIEZpcnN0LCBoYW5k
bGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhl
IHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAg
IEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CiAKQEAgLTU0
Myw3ICs1NjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1CiAg
ICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVy
bywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAg
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTU4MiwxNSArNjAzLDEzIEBA
IHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KIHZvaWQgSklUOjplbWl0
X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEpTVmFsdWUgc3Bl
Y2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRl
cik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJ
bW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3Rh
bnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAgIENDYWxsSGVscGVyczo6
SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThU
b01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNvZGUsIE9wSm5lcVB0cjo6TWV0YWRhdGE6
Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwogICAg
IGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC02MjUsOCArNjQ0LDEwIEBAIHZvaWQgSklUOjplbWl0
X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVj
dEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1Zh
bHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAg
ICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
Z1QwKSwgdGFyZ2V0KTsKQEAgLTY0MCw3ICs2NjEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNjk1LDcgKzcxNiw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50
b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25U
aHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0
aW9uSGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTcxMSw3ICs3MzMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfdGhyb3dfaGFu
ZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1
bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB0aHJvd25WYWx1ZUdQUiA9IGFyZ3VtZW50
R1BSMTsKQEAgLTcyMCw3ICs3NDIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAg
ICBqaXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgYXJndW1lbnRHUFIwKTsKLSAgICBqaXQu
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKGFyZ3VtZW50
R1BSMCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKGFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFs
T2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwpAQCAtOTA4LDcgKzkzMCw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MTgs
NyArOTQxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCkBAIC05MzEsNyArOTU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVt
YmVyKGNvbnN0IEluc3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVy
KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk3NSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDAp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAo
c3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZS
ZWcpOwogfQpAQCAtOTc4LDcgKzEwMDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3Qo
Y29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNW
UmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7
CiB9CkBAIC05OTMsNyArMTAxNywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJ
bnN0cnVjdGlvCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRj
aE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgp
KSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2Rl
QmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gT09QUzogVGhpcyBpc24n
dCBlbGVnYW50LiBXaHkgYXJlbid0IHRoZXkgaW4gdGhlIGNhbGxlZSBzYXZlIGJ1ZmZlci4gSSBn
dWVzcyBiZWNhdXNlIHdlIGNhbiBPU1IgZXhpdCBoZXJlPworICAgIGVtaXRNYXRlcmlhbGl6ZU1l
dGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFi
bGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzgsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUg
cHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwotICAg
IGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJv
ZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9m
aWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JF
bnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25I
YW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVm
ZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2go
WyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAgICAg
ICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdzKTsK
LSAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBAIC0x
MDUzLDggKzEwNjgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3Ry
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwog
CiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNr
IHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5h
cHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9m
ZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVD
VElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5NiwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNj
cnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFi
bGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4K
LSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxl
SW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFy
YWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4LCB1
bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21p
bik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCkBA
IC0xMDk5LDIwICsxMTE1LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29u
c3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGlu
ZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNv
bnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
U3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRl
eCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykp
OwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJU
YWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVl
c3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVi
dWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9k
ZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0x
MTMzLDcgKzExNTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0
CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdU
MCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAg
LTExNDgsNyArMTE2Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1
Y3QKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25l
cV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTY2LDcg
KzExODMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAg
ICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwg
cmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTEx
ODgsMTIgKzEyMDUsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXpl
IG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRv
IGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBh
bmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9j
ay0+bnVtVmFycygpOworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51
bVZhcnMoKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9yIChzaXplX3Qg
aiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpOyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2Nr
KTsKKyAgICAKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAgZW1pdEVudGVy
T3B0aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCkBAIC0xMjEyLDcgKzEyMzEsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50
ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0
ZXJzOjplYnApOwpAQCAtMTMxMCwyMyArMTMyOSwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
c2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVj
dHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlw
ZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlE
LCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRvVGhpczo6TWV0
YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxK
U0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBS
ZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcg
PSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAtMTM0Miw3ICsx
MzU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxv
YWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90
eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBhbGxv
Y2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJl
RGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNoZWRGdW5jdGlv
biwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wQ3JlYXRlVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkQ2FsbGVlKCksIGNhY2hlZEZ1
bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIo
RXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRp
cGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFs
LCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxlQ2Fs
bGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzg3LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzk4LDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4o
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBy
ZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDAp
OwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFs
dWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0
dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDExLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEp
OwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQyMiw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1Qw
LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzNywxMSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNv
bnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
aGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlciho
YXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0
YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25z
dHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEds
b2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIz
KTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZh
bHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiB9CkBAIC0xNDMwLDcgKzE0NTAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVh
cmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50
c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV91
bmxpbmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1
cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0
aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCByZWdUMCk7CiAg
ICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCByZWdUMCwgVHJ1
c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkp
OwpAQCAtMTQ0MCw3ICsxNDYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0
IEluc3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRpZgotICAgICAg
ICBtb3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRSZWdzKTsKKyAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsxNDczLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAgLy8gRW1pdCB0
aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsK
KyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8sIFRy
dXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwK
LSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhl
Y3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAtMTUwOSw3ICsx
NTMwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1lbnRH
UFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTE1MjIsNyArMTU0NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9j
aGVja190cmFwcyhjb25zdCAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9jaGVja190cmFwc19oYW5kbGVy
R2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7
CkBAIC0xNTY0LDM0ICsxNTg2LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29u
c3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
cmVnZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBhcmd1bWVudEdQUjA7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29kZUJsb2NrLT5n
ZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVl
R1BSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmND
b21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKdW1w
IGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3Bl
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBh
cmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29w
ZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVu
dEdQUjEpOwogI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29k
ZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8g
Y29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5j
dGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRl
Y29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3Vt
ZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJh
dG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNf
ZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBk
c3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3lu
Y19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5
bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjIx
LDIzICsxNjQ1LDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7
CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7Cisg
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5k
aWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVu
Y3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByLCBi
aXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5j
dGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwog
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlE
ID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5
bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAg
LTE2NjQsMjkgKzE2ODksMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRv
cl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2Owog
ICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
dmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2Zp
bGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAg
ICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIyKTsKKyAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXpl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJh
eUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFy
cmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2Rl
LCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblBy
b2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAg
Jm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywgcmVnVDIsIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTQsOCArMTcyMCw5
IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CisgICAgLy8gT09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5r
ZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHR5cGUgcHJvZmlsZXIgaXMgZW5hYmxlZC4KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7
CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVM
b2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5t
X3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTc3NywyMCArMTgwNCwyNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25B
cmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJv
YmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRv
d1BhY2tldFJlZyA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7
IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2Ny
YXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNo
YWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1h
cmd1bWVudCByZWdpc3Rlci4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Cisg
ICAgICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBz
Y3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVC
bG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdU
MywgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAv
LyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxv
dyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6
IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVu
IHRoZSB1c2luZyB0aGUgY29udHJvbCBmbG93IHByb2ZpbGVyLgogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAg
QmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2lj
QmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlv
bi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsKQEAgLTE4NjAsNyArMTg5MSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmlu
ZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3
ICsxOTE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAg
IGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJl
Z3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBy
ZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODU1LDcgKzI4NTUsNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBr
ZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2Vs
aW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9p
ZCogcmVzdWx0ID0gbGlua2VkVGFibGUubV9jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7
CiAKQEAgLTI4ODAsNyArMjg4MCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAg
ICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCku
bV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQ7CiAgICAgaWYgKGtleS5pc0ludDMyKCkp
CkBAIC0yOTAzLDcgKzI5MDMsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
U3dpdGNoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICB2b2lkKiByZXN1bHQ7Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNv
bnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogCiAgICAgaWYgKGtleS5pc1N0cmluZygp
KSB7CiAgICAgICAgIFN0cmluZ0ltcGwqIHZhbHVlID0gYXNTdHJpbmcoa2V5KS0+dmFsdWUoZ2xv
YmFsT2JqZWN0KS5pbXBsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0OCw3ICszNDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0
ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1Qx
KTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVn
VDUsIHJlZ1Q0KSwgSW52YWxpZEdQUlJlZywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLnN0dWJJ
bmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOTIgKzQ5LDEw
MyBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcHJvcGVydHlHUFIpOwogCi0gICAgaWYgKG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNv
dW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0g
ICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAg
IGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3NlZW5JZGVudGlm
aWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMo
KSkgeworICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7Cisg
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwg
c2NyYXRjaEdQUik7CiAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIp
OworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdl
dEJ5VmFsLCBkc3QsIHNjcmF0Y2hHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKICAgICB9IGVs
c2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwot
ICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJl
Z1QyKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VH
UFIsIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOwogCiAgICAgICAgIEpJVEdl
dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BS
KTsKKworICAgICAgICAvLyBPT1BTLiBTdXBwb3J0IHRoaXMKKyAgICAgICAgLy9pZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgICAgICAvLyAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChn
ZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKICAgICB9Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQg
SklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgaWYgKGhhc0Fu
eVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7CisgICAgaWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRlcikpCisgICAgICAgIHJl
dHVybjsKKworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAotICAg
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0
QnlWYWxJbmRleCsrXTsKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZh
bHNbbV9nZXRCeVZhbEluZGV4KytdOwogCi0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJv
ZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIy
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4
KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0
ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9
PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJv
cGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcx
IGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVu
dEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9w
ZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsx
NjAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNz
KCk7CkBAIC0xNjAsOCArMTcxLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRH
UFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3Nl
cnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMTg3LDM0ICsxOTgsNDAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0K
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAg
ICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpA
QCAtMjIzLDkgKzI0MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRQcml2
YXRlTmFtZU9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0yMzUsMjYgKzI1NCwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIy
OyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yNjQsNyArMjc3LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAw
LDIxICszMTMsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJy
YW5kPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFu
ZCwgYnJhbmRHUFIpOwotCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0
UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1Qy
KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2
YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9H
UFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6U2V0UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJy
YW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1i
YXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVy
cyByZWdpc3RlcnMuCkBAIC0zMjQsMTcgKzM0NCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRf
cHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0
ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogeworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRv
ciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4
KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBicmFuZEdQUik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTM0NCwyNCArMzY5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJp
dmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9
PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0
eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFu
ZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
blNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5k
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMTkgKzM4OSwy
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJy
YW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRl
QnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwg
YnJhbmRHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQ
cml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVC
cmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpD
aGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCkBAIC0zOTQsOSArNDIyLDExIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BS
ID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0MzYsMTggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAg
c3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUo
b3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5j
dGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFy
Z3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJh
bmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NTksNDIg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBy
ZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQ
b2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDIpLCByZWdUMywgcmVnVDQpOwotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9w
ZXJ0eSkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworICAgIC8vIE9PUFM6CisgICAgLy9pZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgIC8vICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQg
PSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3Qg
OiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUo
Ynl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChn
ZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1i
YXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MTAsMTIgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUg
PSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0
cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9
IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTMxLDE2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBm
YXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYg
KGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNl
CisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BS
NCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUx
Miw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAg
IGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUp
OwpAQCAtNTIzLDcgKzU2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUzMywxOCArNTc1
LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdU
MjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9
IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZChCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDQpKTsK
KyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAgfQorCiAKICAgICBq
aXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpAQCAtNTcwLDIwICs2MTgs
MzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVn
LCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2
YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1f
cHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2Vu
KTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2NTMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKLSAgICBQcml2YXRl
RmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgVU5VU0VEX1BB
UkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02MDMsMTMgKzY2MSwxNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5p
c0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6
IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3Qg
cGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIFRydXN0
ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRL
aW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworCisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQp
OworICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0
QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJp
dmF0ZUZpZWxkT3B0aW1pemU7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50c0dQ
UjMsIGFyZ3VtZW50R1BSNCwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02MjIsMTggKzY4NCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKQEAgLTY0MywxNCArNjk5LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAg
ICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4
MCw3ICs3MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBp
bnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCBy
ZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Nl
dHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5
LDcgKzc0Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGlu
dDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJl
Z1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNjk5LDcgKzc1Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5
X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdl
dHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzA5LDcgKzc2OCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAs
IHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03
MTksNyArNzc5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwog
ICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc4OCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAg
ICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNj
cmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6RGVsZXRlQnlJRDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
KyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAg
ICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlm
IGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQg
dGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVy
cy4KQEAgLTc1OSwxNSArODMwLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQo
Y29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
bEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9w
dGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5t
X2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTc4MSwyNCArODU0LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3Qg
SW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
Lm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGlt
aXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQo
cmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQpAQCAtODA4LDcgKzg3Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAg
ICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTg0NSwyMiArOTEzLDMzIEBAIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJv
cGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZh
bFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVu
ZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAg
ICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYg
YSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTYyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZh
bE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50
R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIz
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQgKzk4MCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJn
dW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSks
IGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0g
cmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAt
OTI2LDcgKzEwMDIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVj
dCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERG
Ry9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVj
dHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1
cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIgKzEwMzcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5
X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRC
eUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVz
dWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1
bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBA
IC05ODYsMTQgKzEwNzEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQo
Y29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlH
ZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJ
ZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTAwMywyNiArMTA5MSwyMCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbW92ZShKSVQ6OlRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwg
cHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9w
ZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
ZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTEwMzAsMjIgKzExMTIsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkRGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlJZERpcmVjdDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
CiB9CiAKQEAgLTEwNTQsMTYgKzExNDUsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF9kaXJlY3QoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9w
ZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xMDczLDgzICsxMTY2LDYxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fz
c2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRp
bWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5
SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVn
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
cmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVz
dWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAg
CiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJh
bmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5t
b2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJh
eUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwg
cmVnVDEpOworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9m
ZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1v
ZGUgPSBicmFuY2gzMihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpv
ZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpv
ZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90
QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNz
VHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOwotfQorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHVi
SW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRo
VGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5k
KGdlbik7CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2ICsxMjI5LDE4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAg
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSht
ZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTExNzcsMjYgKzEyNTAsNTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25z
dCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNz
ZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUu
bV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRD
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1Jl
Z2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAg
IEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpH
ZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0
dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhU
aGlzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0K
IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTIwNiw3ICsxMzEwLDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0
MSwxNiArMTM0NSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4Kytd
OwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMp
OworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEyNjAs
MjggKzEzNjcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8g
YXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1Jl
Z2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBh
cmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8
fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90
aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI5MSw3ICsxMzkyLDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTMyOSwyMyArMTQzMCwz
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNv
ZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRj
aCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25l
IHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBs
b2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2Rl
CiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0
aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJl
ZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAg
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHN0dWJJbmZvR1BS
LCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtp
bmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeUlkOwor
ICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2lu
ZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2Rl
KTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogICAg
IAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmll
ciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0NzQsMTggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+
KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4u
c2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1
bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBh
cmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3NiwyNSArMTQ5NSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRC
eUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJn
dW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0
dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlH
UFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlf
aWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xv
d1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2Vu
LnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CkBAIC0xNDA0LDcgKzE1MTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2Jh
bE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAg
IC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2Jh
bE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50
YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQxLDIwICsxNTU0LDMxIEBAIHZvaWQgSklUOjplbWl0
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTg3LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9i
eV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJ
ZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0ODAsMjggKzE2MDcsMjIgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJl
Z2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1l
bnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlz
QVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKICAgICAvLyBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRv
IGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNy
ZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1l
LgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJ
ZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2Fs
bCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5C
eUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRp
b25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxMCwyNSArMTYzMSwz
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
SW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BS
LCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUzNywxNSArMTY2NiwxOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9
IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9m
aWxlLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2Rl
LCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQ
UjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NTYsNTkgKzE2ODgsNzAgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJn
dW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0
dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
c3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29k
ZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQ
Uik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwg
ZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4g
Y3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5h
bWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5C
eVZhbE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92
YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChv
cGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlP
ckJyYW5kLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
SW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRH
UFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSB0eXBlOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6
ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkK
K3ZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVh
bFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBl
KQogewotICAgIEFTU0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5
cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFz
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHByb3BlcnR5KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUs
IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlQnJhbmQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9p
bkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRp
b25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVu
dEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
TmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2
YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMTYxOCwyNyArMTc2MSwyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1
YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVj
bHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlv
bkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVj
bHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6
IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJh
dGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxNzg5LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1By
aXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29k
ZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2Jy
YW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDE5ICsx
ODAzLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93
KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRI
YXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5t
X2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJ
VDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQ
UlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAg
ICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50
KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKwor
ICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNj
cmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25X
YXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWws
IEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1
c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNs
b3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZz
ZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2ODgsNiArMTgyOCw3IEBAIHZvaWQgSklUOjplbWl0
UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3MDEsNyArMTg0Miw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDEpOwogICAgICAgICAgICAgbG9hZDMy
KCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2No
KCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2Nv
cGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBK
U1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9j
ayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3OTQsODcgKzE5MzUsMTA1
IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KIHZvaWQgSklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29s
dmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFk
YXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VS
VChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAg
IEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3Ry
dWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAg
Y29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMs
IHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAg
IC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5n
ZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIp
IAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNl
IHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNl
dEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFP
ZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFU
YWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2
ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAg
ICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAg
ICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAg
ICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICBy
ZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJC
YXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7CiAgICAgICAgIH07Ci0jdW5k
ZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAg
cmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBn
ZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAg
cmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQs
ICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7CisgICAgICAgIH07CisKKyAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0
YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBjb2RlOworICAgICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQor
ICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7Cisg
ICAgICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3Ip
OworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAgICAgfQogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVT
Y29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUp
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJl
c29sdmVTY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2
ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJh
dGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2Vs
aW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFk
YXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0
YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3Bl
R1BSID0gcmVnVDY7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURf
UEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2Vk
Rm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3Mo
KTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAg
YWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAg
ICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykg
eworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKICAg
ICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAg
ICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGds
b2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9i
amVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVj
dEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNo
cG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwg
QWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFs
T2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9u
V2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNo
OChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwg
VHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJl
c29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAg
ICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVn
VDEpOworICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxT
Y29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAg
ICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFi
ZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVz
dDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhs
b29wLCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwg
JmppdCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25l
LmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEyICsyMDQxLDEyIEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAg
ICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFs
T2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNH
bG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEp
KTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBkb1Zh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xv
YmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gp
KSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RF
cXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkds
b2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubW92
ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKQEAgLTE4OTcsMTEgKzIwNTYsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJs
b2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAg
ICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxF
bnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVu
dCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsyMDY4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9k
dWxlVmFyOgpAQCAtMTkxOSw4MyArMjA3OCw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsK
LSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFy
KTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0
Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFk
YXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdUMCk7CiAKLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
ci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOworICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSkgeworICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGpp
dC5qdW1wKCkpOworICAgICAgICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9Owog
Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxW
YXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNl
KEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAK
LSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICByZXQoKTsK
KyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9C
QUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dD
YXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0
b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNs
b3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpU
aHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBK
SVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9T
Q09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRv
cihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRG
b3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07
IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29w
ZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5F
X1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xv
d19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsg
Z2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAv
IEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRk
cmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAtMjA2NSw2ICsyMTg2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTIxNzgsNyArMjMwMCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKQEAgLTIxODYsOSArMjMwOCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb24KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1l
bnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiAjZWxzZSAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKQEAgLTIxOTYsNDEgKzIzMTgsNTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0g
Ynl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRh
Lm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1
dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNT
RVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0g
Y3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAg
ICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVy
biBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2Vs
aW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8g
Y2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7
CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2Nv
cGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVH
ZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9t
X3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAo
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0gICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNs
b3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwot
ICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3Bl
cmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFk
YXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEp
OworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRf
RlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVz
b2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRf
RlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAgIH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVf
R0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQ
Uik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1ty
ZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1Yihj
bG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0
Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAg
ZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2Vu
ZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3Bl
VGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJv
bVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlw
ZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQg
YnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUg
SklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQg
Z2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CkBAIC0yMjM5LDk5ICsyMzcwLDg4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2Vk
Rm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3Mo
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
IAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRh
dGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAg
IGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRh
ZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIp
OwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1
cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0
YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDAp
OwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Cisg
ICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BS
KSB7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0
Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFu
Y2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdU
MSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRW
YXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewor
ICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0
aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4
KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJl
Z1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9G
KEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdh
dGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVk
KSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0g
KGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsK
LSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAo
aW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwot
ICAgIH07Ci0KICAgICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVH
UFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09
IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9w
ZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNl
dE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1t
MzIoMyksIG9wZXJhbmRHUFIpOworICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5k
R1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxF
bnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKICAgICB9OwogCi0gICAg
YXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJl
Y3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0
cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBz
dHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5
LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgor
ICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1
Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3Ry
dWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwg
cmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAog
ICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7CiAgICAgICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBvZmZzZXQgPSByZWdUMTsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aCA9IHJlZ1QyOwogCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9p
ZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVn
VDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1Qz
KTsKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsm
XSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIGJhc2Us
IHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZz
ZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRh
dGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgb2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRf
RU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihH
cmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0
T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAg
ICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwor
ICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAg
c2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJh
c2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNl
dCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2gpOworICAgICAgICAgICAgaml0Lm5lZzMyKG9mZnNldCk7CisgICAgICAgICAgICBqaXQu
c2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWQ2
NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNh
c2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZP
cGVyYW5kKCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDAp
OwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFRE
WiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShy
ZWdUMCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0
eShyZWdUMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoK
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCByZWdUMyk7CisgICAgICAgICAgICBkb1Zh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9m
ZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwogICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIo
c2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFt
aWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQx
LDg2ICsyNDYxLDYzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5m
bykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVt
cCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNl
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xv
YmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
eworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0g
ZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSks
IHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgaml0LmxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCBy
ZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJp
dHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4
aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgp
KTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQu
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5s
aW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7Cisg
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwog
Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Cisg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVl
UHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOwor
ICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zm
c2V0T2ZQcm9maWxlKCkpKTsKIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dl
dF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFt
ZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZl
VHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dl
dF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwK
LSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNv
bHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2
bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVz
b2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBc
Ci0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5F
UkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29w
ZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlz
IGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVj
YXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4
Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNDcxLDg2ICsyNTY4
LDc5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIH0KICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQp
OwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBh
ZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBp
bmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0g
ICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQs
IHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0
cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFy
aWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQotCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRv
U2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dElu
Zm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVy
ZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWlu
dHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFk
YXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5
cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2Rl
QmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9
IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hl
Y2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBm
b3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9z
Y29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAg
IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBj
YWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAg
ICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZv
ciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1Qx
KTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwog
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAg
ICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1w
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRy
KEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVn
VDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAgIG5l
Z1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAg
ICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAg
ICAgICAgICAgIC8vIE9PUFM6IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0
b29rIEdQUlJlZ3MgaW5zdGVhZCBvZiBWUnMKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
c2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAg
ICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAg
ZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAgaWYgKCFpc0lu
aXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAg
ICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKworICAg
ICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKKworICAgICAgICAgICAgaWYgKCFpc0lu
aXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkg
JiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlz
IHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAg
ICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJh
bmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRT
bG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHko
cmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7
CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAg
ICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpT
VmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxl
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1f
d2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2Nv
cGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hw
b2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50
KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAg
ICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9v
ayBhIEdQUlJlZyBmb3IgdmFsdWUuCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVy
YW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7Cisg
ICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdE5vdGlm
eVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDAs
IHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJs
ZXMoKSkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2
ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3Igb3duZXIvdmFsdWUuCiAgICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjU2NCw1OCArMjY1NCw1
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgIH0K
ICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAg
ICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mg
OiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5
bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJl
YWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAgICAgICAgaXNHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDog
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgLy8g
SWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJlVmFyLyBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGlsZSB0aGluZ3MKKyAgICAvLyB0aGF0
IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3ZlIHByb3ZlbiB0aGF0IGlzIHRoZSB0
eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZhciwKKyAgICAvLyBhbGwgQ29kZUJs
b2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgorICAgIC8vIGlmIHRoZSB2YXIgaW5q
ZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0IGlzIGZpcmVkLCB0aGVuIHdlIHRh
a2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAgIC8vIG1hdHRlciB3aGF0IHR5cGUg
d2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1
cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2Zp
bGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShS
ZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0g
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGVtaXRDb2RlKENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbHNlIHsKICAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVn
VDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVy
dHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAorICAgICAgICBKdW1wIG5v
dEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKHRoaXMpOworCisgICAg
ICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
ciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAogICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxp
bmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIH0K
IApAQCAtMjYyNCwxOCArMjcwOCwyMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBl
KCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgIFJlc29sdmVUeXBl
IHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sg
c2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFudGVl
ZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIuCiAgICAgICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhy
b3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBz
bG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3Ry
dWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAg
ICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4
KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fdW5saW5rZWRD
b2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBh
cmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3ICsyNzM5LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVi
cCk7CkBAIC0yNzAxLDcgKzI3ODgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1
bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJl
Z1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdl
T2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDAp
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDAp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyODQ2
LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1
bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkBAIC0yNzY3LDcgKzI4NTMsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCBy
ZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc4OSw3ICsyODc1LDYgQEAgdGVtcGxhdGUg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxPcAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
IAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwpAQCAtMjgwNSw3ICsyODkwLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3
ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBjYXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhl
IExMSW50LgotICAgIGlmIChtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJl
ZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVu
ZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoKH5KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpICYgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwpAQCAtMjg0Nyw3OCArMjkzMiw4NyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1l
cmF0b3JHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1l
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0
b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0g
ICAgYXV0byByZXN1bHRHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQ
UiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51
bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVudW1lcmF0b3JH
ZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdp
c3RlcnM6OnNjcmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9k
ZSwgc2NyYXRjaDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBw
cm9wZXJ0eUdQUik7CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEu
bV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0
YSgpLCBzY3JhdGNoMik7CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIpOworICAgIHN0b3Jl
OFRvTWV0YWRhdGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0
YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KGJhc2VHUFIpKTsKICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVl
LgotICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlz
Tm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzY3JhdGNoMywgVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3Ry
dWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0g
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QzKTsKLSAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IHNjcmF0Y2gxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJy
YW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21w
dXRlIHRoZSBvZmZzZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDMp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJ
ZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3Jh
Z2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3Mg
PSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1Qw
KTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQorICAgIEp1bXAg
b3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVz
cyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0
eU9mZnNldCgpKSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsK
KyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNl
cy5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAg
ICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVz
cyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9m
ZnNldCgpKSwgcmVnVDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0
cihyZWdUMywgcmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gx
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
LCBzY3JhdGNoMik7CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHNjcmF0Y2gyLCBzY3JhdGNoMik7CiAgICAgY29uc3RleHByIGludHB0cl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0
YXRpY19jYXN0PGludHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQo
QmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
KSwgcmVzdWx0R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBU
aW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVD
YXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7
Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1Nl
ZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJh
dG9yTWV0YWRhdGEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRj
aCksIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51
bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhp
cyk7Ci0gICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRy
dXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAg
SnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVw
bGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9w
ZXJ0eUdQUik7CiAKICAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAog
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5
VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTI3LDEwICsz
MDIxLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdl
bmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRv
ckdldEJ5VmFsPigpLCBpdGVyKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUs
IHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRv
cl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFs
Q2FzZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5j
dGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5t
X2VudW1lcmF0b3I7CkBAIC0yOTM5LDcgKzMwMzIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJh
dG9yX2hhc19wcm9wZXJ0eUltCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFk
ZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0
YWRhdGEoKSwgcmVnVDEpOworICAgIG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01l
dGFkYXRhKHJlZ1QxLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1l
cmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1
Y3R1cmVNb2RlKSkpOwogCkBAIC0zMDI4LDYgKzMxMjMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0
ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
ayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQor
eworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0o
KSwgb3duZXIsIHNlbGVjdFNjcmF0Y2hHUFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVy
KTsKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1Miw3ICsxNTUy
LDcgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogCiB2b2lkIHVu
bGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIs
IGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0KCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRl
cigmY2FsbExpbmtJbmZvKSk7CiAgICAgCiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZv
LCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPigpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODIw
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFs
aXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwg
b3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlw
ZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJp
dGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0K
ICAgICAgICAgbWV0YWRhdGEodDEsIHQyKQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAg
ICAgICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAy
Myw3ICsxMDE5LDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgog
ICAgICAgICAjIE1ldGFkYXRhIGluIHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9w
ZXJhdGlvbih0MiwgLnNsb3cpCiAgICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIs
IHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAg
ICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUlu
dCwgdDEsIHQyKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIg
KzEwODUsMTggQEAgZW5kKQogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdh
dGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAg
bWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0
ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0
NV0KLSAgICBlbmQKLQogICAgIG1ldGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0
MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmlu
ZXEgdDEsIEludDMyVGFnLCAub3BOZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZm
ZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShB
cml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFy
aXRoUHJvZmlsZUludCwgdDUsIHQzKQogICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVn
YXRlU3JjTm90SW50OgogICAgIGJpYSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAg
eG9yaSAweDgwMDAwMDAwLCB0MQotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVO
dW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmls
ZU51bWJlciwgdDUsIHQzKQogICAgIHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBA
IC0xMTE1LDEwICsxMTA3LDYgQEAgZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9w
Y29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVP
cGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29k
ZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0g
ICAgICAgIG1hY3JvIGFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVv
cGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2Zp
bGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQog
ICAgICAgICBnZXQobV9yaHMsIHQyKQogICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3
ICsxMTE0LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAg
ICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAg
ICBiaW5lcSB0MiwgSW50MzJUYWcsIC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMy
VGFnLCAub3AyTm90SW50Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQp
CisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRl
Z2VyT3BlcmF0aW9uQW5kU3RvcmUodDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNw
YXRjaCgpCkBAIC0xMTM2LDEyICsxMTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUo
b3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAg
IGJpYiB0MywgTG93ZXN0VGFnLCAub3AxTm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQz
LCBJbnQzMlRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJl
ckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJp
dGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAg
ICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAg
IGZpaTJkIHQxLCB0MywgZnQxCi0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1i
ZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3Qs
IEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToK
ICAgICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTEx
NTMsNyArMTE0MSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AK
ICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25k
IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAg
ICAgIGJpYSB0MywgTG93ZXN0VGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQ
cm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAs
IGZ0MAogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24o
ZnQxLCBmdDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTQ0MSw4ICs0NDEsMTMgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQog
ICAgICAgICAgICAgbW92ZSBQQywgYTEKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9v
c3IpCiAgICAgICAgICAgICBidHB6IHIwLCAucmVjb3ZlcgotCiAgICAgICAgICAgICBtb3ZlIHIx
LCBzcAorCisgICAgICAgICAgICAjIEJhc2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBm
b3IgaXRzIEpJVCBjb25zdGFudCBwb29sLgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nm
cl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCisg
ICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BC
XSwgUEIKKwogICAgICAgICAgICAgaWYgQVJNNjRFCiAgICAgICAgICAgICAgICAgbGVhcCBKU0ND
b25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3Rl
eHByIEdhdGU6Omxvb3BPU1JFbnRyeSkgKiBQdHJTaXplLCBhMgogICAgICAgICAgICAgICAgIGpt
cCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEw
ICsxMDYxLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBt
YWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAg
ICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3Jv
IHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9i
aXRzW3QyXQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAg
ICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEw
NjksNyArMTA3MCw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4K
ICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJU
YWcsIHQxCiAgICAgICAgIHN0b3JlcSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFy
aXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9m
aWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3Bh
dGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAogCiBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRp
c3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxl
KHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9m
aWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldCht
X29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQog
ICAgIG1ldGFkYXRhKHQxLCB0MikKQEAgLTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5v
cE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRh
dGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9m
aWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAu
b3BOZWdhdGVOb3RJbnQ6CiAgICAgYnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAg
ICAgeG9ycSAweDgwMDAwMDAwMDAwMDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFy
aXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwg
QXJpdGhQcm9maWxlTnVtYmVyLCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVT
bG93OgpAQCAtMTE2NCwxMCArMTE2MCw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bj
b2RlTmFtZSwgb3AKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bj
b2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikK
ICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkK
LSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAg
ICAgICAgIGdldChtX3JocywgdDApCiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAg
bWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9k
c3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywg
dDIpCiAKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUs
IHQyKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCAr
MTE3OSwxMCBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAg
ICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQx
CiAgICAgICAgIGZxMmQgdDEsIGZ0MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJl
ck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
QXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDIpCiAgICAgICAgIGptcCAub3AxTm90SW50
UmVhZHkKICAgICAub3AxTm90SW50T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmls
ZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVj
dCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDIpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEK
ICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA0LDkg
KzExOTYsOSBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAKICAg
ICAub3AyTm90SW50OgogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBp
bnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCi0gICAgICAgIGdldChtX2RzdCwgdDIp
CiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0
aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQyKQorICAgICAgICBnZXQobV9k
c3QsIHQyKQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0
MQogICAgICAgICBmcTJkIHQxLCBmdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MjAxNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29y
a2luZyBjb3B5KQpAQCAtMjU1Niw2ICsyNTU2LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAg
ICAgZW5kCiBlbmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1
Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRh
ZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5
QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0
aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAl
b3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAor
ICAgIG9yaCB0eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8v
IEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUs
IHNpbmNlIFdFQkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFT
U0VNQkxZIGFuZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgyMDE2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcigpID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRp
ZmllciBjcmVhdGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2soQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29k
ZUJsb2NrKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29k
ZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVu
dGlmaWVyJik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3Rh
dGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0
aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRl
bnRpZmllciBjcmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2Fj
aGVhYmxlSWRlbnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJ
KHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
YWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVC
bG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1l
IENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlw
ZSogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAK
LWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJs
b2NrLT5oYXNJZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVy
KHVpZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0
ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5B
QkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChP
cE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVy
YW5kKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0
aFByb2ZpbGU7CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9h
cml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VS
VChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
bkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAg
IHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRp
YyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0K
KyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVj
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRh
YmxlQmFzZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0JhZy5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcu
aAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMjAgQEAgcHVibGljOgogICAgICAgICBvdGhl
ci5tX2hlYWQgPSBudWxscHRyOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Cisg
ICAgQmFnJiBvcGVyYXRvcj0oQmFnPFQsIFU+JiYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAo
dW53cmFwcGVkSGVhZCgpID09IG90aGVyLnVud3JhcHBlZEhlYWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKworICAgICAgICBCYWcgZGVzdHJveTsKKyAgICAgICAgZGVzdHJveS5tX2hl
YWQgPSB1bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG1faGVhZCA9IG90aGVyLnVud3JhcHBlZEhl
YWQoKTsKKyAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorCiAgICAgfkJhZygpCiAgICAgewogICAgICAgICBjbGVhcigpOwpJbmRl
eDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCShyZXZpc2lvbiAyODIwMTYpCisrKyBUb29s
cy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC03NzAsMTcg
Kzc3MCwxOCBAQCBlbmQKIAogIyBGSVhNRTogbmVlZCB0byBmaXggaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODcwMyB0byBlbmFibGUgdGhpcyBvbiBMaW51eC9NSVBT
LgogZGVmIHJ1bkJ5dGVjb2RlQ2FjaGVJbXBsKG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucywg
KmFkZGl0aW9uYWxFbnYpCi0gICAgaWYgKCRob3N0T1MgPT0gImRhcndpbiIpCi0gICAgICAgIGZp
bGVUZW1wbGF0ZSA9ICJieXRlY29kZS1jYWNoZSIKLSAgICBlbHNpZiAoJGhvc3RPUyA9PSAibGlu
dXgiICYmICRhcmNoaXRlY3R1cmUgIT0gIm1pcHMiKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAi
Ynl0ZWNvZGUtY2FjaGVYWFhYWFgiCi0gICAgZWxzZQotICAgICAgICBza2lwCi0gICAgICAgIHJl
dHVybgotICAgIGVuZAorICAgICMgT09QUworICAgICNpZiAoJGhvc3RPUyA9PSAiZGFyd2luIikK
KyAgICAjICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1jYWNoZSIKKyAgICAjZWxzaWYgKCRo
b3N0T1MgPT0gImxpbnV4IiAmJiAkYXJjaGl0ZWN0dXJlICE9ICJtaXBzIikKKyAgICAjICAgIGZp
bGVUZW1wbGF0ZSA9ICJieXRlY29kZS1jYWNoZVhYWFhYWCIKKyAgICAjZWxzZQorICAgICMgICAg
c2tpcAorICAgICMgICAgcmV0dXJuCisgICAgI2VuZAogCi0gICAgb3B0aW9ucyA9IEJBU0VfT1BU
SU9OUyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RT
cGVjaWZpY1JlcXVpcmVkT3B0aW9ucwotICAgIGFkZFJ1bkNvbW1hbmQoImJ5dGVjb2RlLWNhY2hl
IiwgWyJzaCIsIChwYXRoVG9IZWxwZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyLnNo
IikudG9fcywgZmlsZVRlbXBsYXRlLnRvX3MsICp2bUNvbW1hbmQsICRiZW5jaG1hcmsudG9fc10g
KyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRsZXIsICphZGRp
dGlvbmFsRW52KQorICAgICNvcHRpb25zID0gQkFTRV9PUFRJT05TICsgRlRMX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMgKyAkdGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25z
CisgICAgI2FkZFJ1bkNvbW1hbmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxw
ZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRl
LnRvX3MsICp2bUNvbW1hbmQsICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRw
dXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQogZW5kCiAKIGRl
ZiBydW5CeXRlY29kZUNhY2hlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437324</attachid>
            <date>2021-09-03 16:20:30 -0700</date>
            <delta_ts>2021-09-03 18:09:55 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>427484</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL3Byb3h5LXNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L3N0cmVzcy9wcm94eS1zZXQuanMJKHJldmlzaW9uIDI4MjAxNikKKysrIEpTVGVzdHMvc3RyZXNz
L3Byb3h5LXNldC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIGZ1bmN0aW9u
IGFzc2VydChiKSB7CiAKICAgICBsZXQgY2FsbGVkID0gZmFsc2U7CiAgICAgbGV0IGhhbmRsZXIg
PSB7Ci0gICAgICAgIHNldDogZnVuY3Rpb24odGhlVGFyZ2V0LCBwcm9wTmFtZSwgdmFsdWUsIHJl
Y2VpdmVyKSB7CisgICAgICAgIHNldDogZnVuY3Rpb24gdGhlU2V0KHRoZVRhcmdldCwgcHJvcE5h
bWUsIHZhbHVlLCByZWNlaXZlcikgewogICAgICAgICAgICAgYXNzZXJ0KHRoZVRhcmdldCA9PT0g
dGFyZ2V0KTsKICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7CiAgICAgICAgICAgICB0aGVUYXJn
ZXRbcHJvcE5hbWVdID0gdmFsdWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTgzMiw2ICs4MzIsNyBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzLmgKICAg
ICBqaXQvQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaAorICAgIGppdC9CYXNlbGluZUpJVENvZGUu
aAogICAgIGppdC9DQ2FsbEhlbHBlcnMuaAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgK
ICAgICBqaXQvRXhlY3V0YWJsZU1lbW9yeUhhbmRsZS5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291
cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYxOSw2ICs2MTksNyBAQCBpbnRlcnByZXRlci9T
aGFkb3dDaGlja2VuLmNwcAogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAogCiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAoraml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKIGppdC9CYXNlbGluZUpJ
VFBsYW4uY3BwCiBqaXQvQmluYXJ5U3dpdGNoLmNwcAogaml0L0NDYWxsSGVscGVycy5jcHAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtOTAwLDYgKzkwMCw3IEBACiAJCTUyQ0QwRjVEMjI0MkY1Njkw
MDRBMThBNSAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3Vu
ZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKIAkJNTJDRDBGNUUyMjQyRjU2OTAwNEExOEE1IC8qIEph
dmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjY4MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZn
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0Qw
RjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLzsgfTsKKwkJNTJERDAwMDgyNkUw
MzlCOTAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2Vs
aW5lSklUQ29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTUyRUVENzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFRUQ3OTMyNDky
Qjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi87IH07CiAJCTUyRjZDMzVFMUU3
MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFG
NENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEE2NkI5MUZB
M0U3OEIwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBV
bmlmaWVkU291cmNlMy1tbS5tbSAqLzsgfTsKQEAgLTEyMjAsNyArMTIyMSw3IEBACiAJCTc5ODcy
QzQ4MjIxQkJBRjMwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggKi87IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBC
M1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUEwOTA4MDFE
NzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFw
SW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTc5QTIyODM2MUQzNUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTIyODM0MUQzNUQ3MUUwMEQ4RTA2
NyAvKiBBcml0aFByb2ZpbGUuaCAqLzsgfTsKKwkJNzlBMjI4MzYxRDM1RDcxRjAwRDhFMDY3IC8q
IEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUJCMTdFMUU1Q0NC
NTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUJCMTdDMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNh
c3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3OUFDMzBGRjFGOTk1MzY0MDA0ODRGRDcgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OUFDMzBGRTFGOTk1MzYzMDA0ODRGRDcgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVz
LmggKi87IH07CiAJCTc5QUYwQkU0MUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVS
ZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
QUYwQkUzMUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzY2OCw2ICszNjY5
LDggQEAKIAkJNTJDRDBGNjQyMjQyRjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhl
Y3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0
ZXN0ZGZnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcu
Y3BwOyBwYXRoID0gZGZnL3Rlc3RkZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkQxMzA4RjIyMUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJhc2VsaW5lSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MkREMDAwNzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEJhc2VsaW5lSklUQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUyRUVENzkyMjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvbkFsbG93bGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUyRUVENzkzMjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlvbkFsbG93bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI1OCw2ICs2MjYx
LDggQEAKIAkJCQk2Qjc2N0U3QTI2NzkxRjI3MDAxN0Y4RDEgLyogQXNzZW1ibHlIZWxwZXJzU3Bv
b2xlcnMuaCAqLywKIAkJCQk3MjM5OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQ
bGFuLmNwcCAqLywKIAkJCQk3MjM5OThGNTI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQ
bGFuLmggKi8sCisJCQkJNTJERDAwMDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29k
ZS5jcHAgKi8sCisJCQkJNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29k
ZS5oICovLAogCQkJCTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3Bw
ICovLAogCQkJCTBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywK
IAkJCQk2NUI4MzkyRDFCQUNBOUQzMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApA
QCAtOTY5OSw2ICs5NzA0LDcgQEAKIAkJCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZH
Rmxvd01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8q
IERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzcz
QUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkREMDAwODI2RTAz
OUI5MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJE
RDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNjlDQzg5MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZFQzlEQzYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZv
LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpc3QucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYgkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkg
KzI5MCwxMCBAQCBvcF9ncm91cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgbGhzOiBWaXJ0
dWFsUmVnaXN0ZXIsCiAgICAgICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVy
YW5kVHlwZXM6IE9wZXJhbmRUeXBlcywKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZAog
ICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0
aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAg
IH0KIAogb3BfZ3JvdXAgOlZhbHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1MSw5ICszNTIsMTAg
QEAgb3BfZ3JvdXAgOlVuYXJ5SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgXSwKICAgICBhcmdzOiB7
CiAgICAgICAgIHNyY0RzdDogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9maWxlSW5kZXg6
IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxl
OiBVbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9m
aWxlLioKICAgICB9CiAKIG9wIDp0b19vYmplY3QsCkBAIC0zODQsOSArMzg2LDEwIEBAIG9wIDpu
ZWdhdGUsCiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBvcGVyYW5kOiBW
aXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCisgICAgICAg
IHByb2ZpbGVJbmRleDogdW5zaWduZWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAg
ICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6
IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDYgKzczLDI4IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChC
eXRlY28KICAgICAgICAgcmV0dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3RlbXBsYXRl
IDx0eXBlbmFtZSBCeXRlY29kZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRGb3IodW5z
aWduZWQgY2hlY2twb2ludEluZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3BvaW50SW5k
ZXgpOworICAgIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9y
X29wZW4pIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2Fz
ZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZJdGVyYXRvclByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
Z2V0TmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UHJvZmlsZSgp
OworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisKKyAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3Bf
aXRlcmF0b3JfbmV4dCkgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAg
ICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRl
cmF0b3JOZXh0OjpnZXREb25lOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkRv
bmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1
cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlZhbHVlUHJvZmlsZSgpOworICAgICAgICBk
ZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSBl
bHNlIAorICAgICAgICByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUo
KTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVNZXRhZGF0YT4KIGJvb2wgaGFzVmFs
dWVQcm9maWxlRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFkYXRhLCB1bnNpZ25lZCBjaGVja3Bv
aW50SW5kZXgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMSAr
MTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhWTSYgdm0pCiAgICAgUkVMRUFTRV9B
U1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQotewotICAgIHJldHVybiBDb2RlTG9j
YXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4obV9mYXN0UGF0aFN0YXJ0KTsKLX0K
LQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpzbG93
UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNEYXRhSUMoKSk7CkBAIC0yMjUs
NiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRNYXhBcmd1bWVudENvdW50SW4KICAg
ICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gdmFsdWU7CiB9CiAKK0NvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSAmJiBpc1RhaWxDYWxsKCkpOworICAg
IHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4odS5jb2Rl
SUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhW
TSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVTcGVjaWZpY0NhbGxlZSA9IFsmXSAoSlNGdW5jdGlv
biogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5OSwxMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0
RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9mcmFtZVNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgp
OwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBh
dGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJl
cGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
QyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBh
cmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOwotICAgIGlm
IChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAh
PSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgICAgIHUuZGF0YUlD
Lm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOwotICAgIH0KLQotICAgIGF1dG8g
ZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0p
OwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKIAotICAgIGlmIChpc0Rh
dGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJQyA9PSBVc2VEYXRhSUM6OlllcykgewogICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKICAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZD
YWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdvUG9s
eW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENh
bGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAgZ29Qb2x5bW9ycGhpYyA9IGppdC5icmFuY2hUZXN0
UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVNYXNrKSk7CiAgICAgICAgICAgICBzbG93UGF0aC5h
cHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBj
YWxsZWVHUFIpKTsKICAgICAgICAgfQotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAg
ICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsK
ICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMubGluaygmaml0KTsgLy8gUG9seW1vcnBoaWMgc3R1
YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBwcmVwLgogICAgICAgICAgICAgaml0LmZhckp1bXAo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZNb25vbW9ycGhp
Y0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CkBAIC0zMzYsMTQgKzMyNSwxNiBA
QCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKENDYWxsSGVscGVyczo6Tm90RXF1YWws
IGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxs
cHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOwotICAgICAgICBpZiAo
aXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBw
cmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhclRhaWxDYWxs
KCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwor
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7CiAgICAgICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIHUuY29k
ZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRl
cm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9u
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsK
KyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxsZWVDaGVjayk7CiAgICAgICAgIH0p
OwogICAgIH0KIApAQCAtMzUzLDEzICszNDQsMzQgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVt
aXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQykKIHsKICAgICBSRUxFQVNFX0FTU0VS
VCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxl
ZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIG51bGxwdHIpOworICAgIHNldFVzZXNE
YXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKKyAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlu
a0luZm9HUFIpOworICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5r
SW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQs
IGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIGlzVGFpbENhbGwoKSwgbnVs
bHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxM
aW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBj
YWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZhc3RQYXRo
SW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIFdURk1vdmUo
cHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7
CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIEludmFs
aWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlzVGFpbENhbGwoKSwgV1RGTW92ZShwcmVwYXJlRm9y
VGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBH
UFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
b0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxs
cHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgZmFs
c2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNh
bGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIg
IT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwg
aml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIHRydWUsIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0
U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkKQEAgLTM2OSwxNyArMzgxLDMwIEBA
IHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCAKICAgICBqaXQuY2FsbChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxs
RGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQogCit2b2lkIENhbGxMaW5rSW5mbzo6
ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUoY2FsbExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBv
ZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKK30KKwor
dm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMoVk0mIHZtLCBVbmxpbmtlZENhbGxM
aW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBj
YWxsTGlua0luZm9HUFIpCit7CisgICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtl
ZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBzZXRVcENhbGwodW5saW5rZWRDYWxs
TGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRpb24gPSB1bmxp
bmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247CisgICAgaWYgKHVubGlua2VkQ2FsbExpbmtJ
bmZvLmZyYW1lU2h1ZmZsZURhdGEpCisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VV
bmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNo
dWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNvdW50aW5nPworICAgIHNldFVzZXNE
YXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9
IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRD
VElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0Vu
dHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0
aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgp
KTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0gICAgYXV0byBmYXN0
UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0K
ICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0
aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2Fs
bCk7CkBAIC0zOTcsNyArNDIyLDcgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWls
Q2FsbEZhcwogCiAgICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaml0
LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zh
c3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFz
dFBhdGhTdGFydCk7CisgICAgICAgIHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKICAgICB9KTsK
IAogICAgIC8vIC0gSWYgd2UncmUgbm90IHlldCBsaW5rZWQsIHRoaXMgaXMgYSBqdW1wIHRvIHRo
ZSBzbG93IHBhdGguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDExIEBA
IGNsYXNzIEpTRnVuY3Rpb247CiBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiBzdHJ1Y3QgQ2Fs
bEZyYW1lU2h1ZmZsZURhdGE7CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbzsKKwogY2xh
c3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0lu
Zm8+IHsKIHB1YmxpYzoKLSAgICBlbnVtIENhbGxUeXBlIHsKKyAgICBlbnVtIENhbGxUeXBlIDog
dWludDhfdCB7CiAgICAgICAgIE5vbmUsCiAgICAgICAgIENhbGwsCiAgICAgICAgIENhbGxWYXJh
cmdzLApAQCAtMTY1LDYgKzE2Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxsZWVHUFIgPSBj
YWxsZWVHUFI7CiAgICAgfQogCisgICAgdm9pZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgVW5saW5r
ZWRDYWxsTGlua0luZm8mLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
KTsKKwogICAgIEdQUlJlZyBjYWxsZWVHUFIoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsg
fQogICAgIAogICAgIGVudW0gY2xhc3MgVXNlRGF0YUlDIDogdWludDhfdCB7CkBAIC0xNzMsMTMg
KzE3NywxNiBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVl
R1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwg
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwg
VXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJl
Rm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIHB1YmxpYzoKKyAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRh
SUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0
aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKICAgICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmKTsKICAgICB2b2lkIGVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1p
dFNsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJ
Q1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAg
ICAgdm9pZCByZXZlcnRDYWxsVG9TdHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlD
OjpZZXM7IH0KQEAgLTIwMyw3ICsyMTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVi
cyA9IGZhbHNlOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IGZhc3RQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBzbG93UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gZG9uZUxvY2F0aW9uKCk7CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAg
ICAgICBtX3Nsb3dTdHViID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSog
c2xvd1N0dWIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAg
fQotCiAgICAgYm9vbCBzZWVuT25jZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVu
U2hvdWxkUmVwYXRjaDsKQEAgLTMwOCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDYWxsVHlwZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMy
X3QqIGFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuICZtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyk7CiAgICAgfQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKQpAQCAtMzgxLDcgKzM4Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZh
dGU6Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0
YXJ0OworCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhT
dGFydCgpOworCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25l
TG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xv
d1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAgdW5pb24gVW5pb25UeXBlIHsKQEAgLTM5Nyw2ICs0
MDAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRl
cm5hbFB0clRhZz4gbV9jYWxsTG9jYXRpb247CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25EYXRh
TGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsZWVMb2NhdGlvbjsKICAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fc2xvd1BhdGhTdGFydDsKKyAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhT
dGFydDsKICAgICAgICAgfSBjb2RlSUM7CiAgICAgfSB1OwogCkBAIC00MjQsNiArNDI4LDEzIEBA
IGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2Fs
bExpbmtJbmZvLmNvZGVPcmlnaW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZv
IHsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1
c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmln
aW4uCisgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzAsNyArMzcwLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1
Y3R1cmUqIAogLy8gd2UgY2FuJ3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdl
bmVyYXRpb24uIFRoaXMgcHJvY2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9s
CiAvLyBmbG93IG9yIGludHJvZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlz
IHdlIHJlbHkgb24gbGl2ZW5lc3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwg
dGhlIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBm
YWN0IGJ5IGNhY2hpbmcgdGhlIGxpdmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRD
b2RlQmxvY2suCisvLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJ
VCBjb2RlIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29k
ZUJsb2NrLAorLy8gc28gdGhlIGJ5dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4g
Q29kZUJsb2NrcyBzaGFyaW5nIGFuIFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2Nv
cGUpCiB7CkBAIC00NjYsNiArNDY3LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIFMKICAgICAgICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRI
X0JJTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAg
ICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQ
cm9maWxlID0gJm1fdW5saW5rZWRDb2RlLT5iaW5hcnlBcml0aFByb2ZpbGUoYnl0ZWNvZGUubV9w
cm9maWxlSW5kZXgpOyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorI2RlZmluZSBMSU5LX1dJ
VEhfVU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAg
ICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRo
UHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+dW5hcnlBcml0aFByb2ZpbGUoYnl0ZWNvZGUubV9w
cm9maWxlSW5kZXgpOyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAg
Zm9yIChjb25zdCBhdXRvJiBpbnN0cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAg
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01Mjgs
MTQgKzU0MiwxNCBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAg
ICAgICAgIExJTksoT3BDcmVhdGVQcm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJh
dG9yKQogCi0gICAgICAgIExJTksoT3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAg
IExJTksoT3BEaXYpCi0gICAgICAgIExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0
ZSkKLSAgICAgICAgTElOSyhPcEluYykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElO
S19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklO
QVJZX0FSSVRIX1BST0ZJTEUoT3BNdWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShPcERpdikKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9w
U3ViKQorCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQor
ICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElO
S19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQ
dHIpCiAKQEAgLTc4OSw2ICs4MDMsNzYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9u
Q29tbW9uKFZNJgogICAgIG1fb3duZXJFZGdlLnNldCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZTo6Y3JlYXRlKHZtLCB0aGlzKSk7CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpzZXR1
cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPiBqaXRDb2RlKQor
eworICAgIHNldEpJVENvZGUoaml0Q29kZS5jb3B5UmVmKCkpOworCisgICAgeworICAgICAgICBj
b25zdCBhdXRvJiBqaXRDb2RlTWFwID0gdGhpcy0+aml0Q29kZU1hcCgpOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7Cisg
ICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IGV4Y2VwdGlvbkhhbmRsZXIoaSk7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KKyAgICAgICAg
ICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IGppdENvZGVNYXAuZmluZChCeXRlY29kZUluZGV4KGhh
bmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOworICAgICAgICBhdXRvJiBqaXREYXRhID0gZW5zdXJlSklURGF0YShsb2NrZXIpOwor
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdERhdGEubV9qaXRDb25zdGFudFBvb2wuaXNFbXB0
eSgpKTsKKyAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVkVmVjdG9yPHZv
aWQqPihqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICBhdXRvIGVudHJ5ID0gaml0Q29kZS0+bV9jb25zdGFudFBvb2wuYXQoaSk7CisgICAg
ICAgICAgICBzd2l0Y2ggKGVudHJ5LnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3Q6CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2pp
dENvbnN0YW50UG9vbFtpXSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5r
SW5mbzogeworICAgICAgICAgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENh
bGxMaW5rSW5mbyA9ICpzdGF0aWNfY2FzdDxVbmxpbmtlZENhbGxMaW5rSW5mbyo+KGVudHJ5LnBh
eWxvYWQpOworICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0
RGF0YS5tX2NhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8u
Ynl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgIC8vIE9PUFM6IGRvbid0IGhhcmRjb2Rl
IHRoZXNlIHJlZ2lzdGVycyBsaWtlIHRoaXMuCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5pbml0aWFsaXplRGF0YUlDKHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpy
ZWdUMCwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25z
dGFudFBvb2xbaV0gPSBjYWxsTGlua0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm86IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
JiB1bmxpbmtlZFN0dWJJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qPihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBqaXREYXRhLm1fc3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vz
c1R5cGUsIENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAg
ICAgICAgICAgICAgc3R1YkluZm8tPmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyh0aGlzLCB1bmxpbmtlZFN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1f
aml0Q29uc3RhbnRQb29sW2ldID0gc3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVu
Y3Rpb25EZWNsOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1f
aml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpGdW5jdGlvbkV4cHI6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAgICAg
IGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5kZXgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBHbG9iYWxD
b2RlOgorICAgIGNhc2UgTW9kdWxlQ29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgorICAgICAgICBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZ1bmN0aW9uQ29kZToKKyAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0
byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgorICAgICAg
ICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBtX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYmIERGRzo6bWln
aHRJbmxpbmVGdW5jdGlvbih0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgdW5s
aW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSA9IFdURk1vdmUoaml0Q29k
ZSk7Cit9CisKIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07
CkBAIC0zMDc5LDcgKzMxNjMsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJD
b3VudCgpCiAKICNpZiBFTkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6
Ci0gICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJs
b2NrKCkpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAg
LTMyOTUsMTMgKzMzNzksMTMgQEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFy
eUFyaQogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoK
LSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9w
TXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMt
PmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bf
c3ViOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+
YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVy
biBwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVm
YXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzMxMywxMSArMzM5NywxMSBAQCBVbmFy
eUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+
b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5h
czxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0
dXJuIHBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAg
ICBjYXNlIG9wX2luYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEo
dGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJl
dHVybiAmcGMtPmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAg
ICAgICByZXR1cm4gcGMtPmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtOTcsNiArOTcsNyBAQCBjbGFzcyBNZXRhZGF0YVRhYmxlOwogY2xhc3MgUENUb0NvZGVPcmln
aW5NYXA7CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJ
bmZvOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihDb2RlQmxvY2tSYXJlRGF0YSk7CiAKQEAgLTE1OCw3ICsxNTksOSBAQCBw
dWJsaWM6CiAgICAgTWV0YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWV0YWRhdGEuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25z
dCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6CiAgICAgdm9pZCBzZXROdW1Q
YXJhbWV0ZXJzKHVuc2lnbmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51
bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPZkFyZ3VtZW50
c1RvU2tpcDsgfQogCkBAIC0xNjcsNyArMTcwLDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51
bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KICAgICB1bnNpZ25lZCBudW1UbXBz
KCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhO
dW1DaGVja3BvaW50VG1wczsgfQogCi0gICAgdW5zaWduZWQqIGFkZHJlc3NPZk51bVBhcmFtZXRl
cnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX251bVBhcmFtZXRlcnMpOyB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7
IH0KQEAgLTIzMiwxNiArMjM0LDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVkVk1U
cmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3BvaW50
cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykK
LSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYmFjayB0aGUgb3B0aW1p
emF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlzIGB0aGlzYCBhbmQgd2UncmUg
aW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCi0gICAgICAg
ICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKLQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAgIHJldHVybiByZWcub2Zmc2V0
KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAtMjY2LDggKzI1OCwxMCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBnZXRJQ1N0YXR1c01hcChJQ1N0YXR1c01hcCYgcmVzdWx0KTsKICAg
ICAKICNpZiBFTkFCTEUoSklUKQorICAgIC8vIE9PUFM6IG1vdmUgYXJpdGhtZXRpYyBJQ3MgYW5k
IHN3aXRjaCB0YWJsZXMgb3V0IG9mIGhlcmUsIGFuZCBvbnRvIEpJVENvZGUuCiAgICAgc3RydWN0
IEpJVERhdGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICAgICAgQmFnPFN0
cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKICAgICAgICAgQmFnPEpJVEFkZElDPiBtX2Fk
ZElDczsKQEAgLTI4Miw5ICsyNzYsMTMgQEAgcHVibGljOgogICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wg
bV9oYXNDYWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0
Q29kZU1hcDsKKworICAgICAgICBGaXhlZFZlY3Rvcjx2b2lkKj4gbV9qaXRDb25zdGFudFBvb2w7
CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwgbV9qaXRDb25zdGFudFBvb2wpOyB9CiAgICAg
fTsKIAorICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5l
SklUQ29kZT4pOworCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkK
QEAgLTI5Myw2ICsyOTEsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIEpJVERhdGEmIGVuc3VyZUpJ
VERhdGFTbG93KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwogCisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX2ppdERhdGEpOyB9CisKICAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQ
cm9maWxlKik7CiAgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSop
OwogICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwpAQCAtMzIy
LDE2ICszMjIsNyBAQCBwdWJsaWM6CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9N
YXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgogICAgIENhbGxMaW5rSW5m
byogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICAK
LSAgICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29kZU1hcCYmIGppdENvZGVNYXApCi0gICAgewot
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGVuc3Vy
ZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOwotICAg
IH0KLSAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCkKLSAgICB7Ci0gICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXA7Ci0gICAgfQorICAgIGNvbnN0IEpJVENvZGVNYXAm
IGppdENvZGVNYXAoKTsKIAogICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlx
dWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+IGZpbmRQQyh2b2lkKiBwYyk7CkBAIC00NzIsNiArNDYzLDcgQEAgcHVibGljOgogCiAgICAg
U3RyaW5nIG5hbWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDb2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2ln
bmVkIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1fbnVtUGFyYW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKQEAgLTU3Miw2ICs1NjQs
NyBAQCBwdWJsaWM6CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRv
Q29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdp
c3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbihyZWcpOyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24odW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihpbmRleCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29uc3Rh
bnRzVmVjdG9yQnVmZmVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9j
b25zdGFudFJlZ2lzdGVycykgKyBkZWNsdHlwZShtX2NvbnN0YW50UmVnaXN0ZXJzKTo6ZGF0YU1l
bW9yeU9mZnNldCgpOyB9CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChp
bnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBp
bnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUo
KTsgfQpAQCAtNjAxLDYgKzU5NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1faml0RGF0YSk7CiAgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKICAgICB9CisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRj
aEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFu
dFBvb2woKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhICYmIGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBtX2ppdERhdGEt
Pm1faml0Q29uc3RhbnRQb29sLmRhdGEoKTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVt
YmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOyB9CkBAIC02MTEsNiArNjEwLDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX2ppdERhdGEpOwogICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgfQorICAgIFN0cmluZ0p1bXBUYWJsZSYg
YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOwogI2VuZGlmCiAg
ICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3Qg
eyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRT
dHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNzk3
LDYgKzc5Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNv
bnN0IHsgcmV0dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVx
dWVzdHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRC
cmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFr
cG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCkBAIC04MzgsNiArODM5LDcgQEAgcHVibGlj
OgogICAgIG11dGFibGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hv
dWxkQWx3YXlzQmVJbmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2Fu
dHMgdG8gc3RvcmUgdG8gaXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFs
d2F5c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hv
dWxkQWx3YXlzQmVJbmxpbmVkKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBt
X2NhcGFiaWxpdHlMZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkw
NiwxMSArOTA4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRh
ZGF0YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0
YSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRl
cigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3
UG9pbnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQg
dG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFt
X3VubGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBsb29w
SGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5r
ZWRDb2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9CiAK
IHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKQEAgLTEw
MDgsNyArMTAwNiw5IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlV2F0Y2hwb2ludE1hcCBtX2xs
aW50R2V0QnlJZFdhdGNocG9pbnRNYXA7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZTsK
ICNpZiBFTkFCTEUoSklUKQorcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVREYXRhPiBt
X2ppdERhdGE7Citwcml2YXRlOgogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8g
VGhpcyBpcyByZWxldmFudCB0byBub24tREZHIGNvZGUgYmxvY2tzIHRoYXQgc2VydmUgYXMgdGhl
IHByb2ZpbGVkIGNvZGUgYmxvY2sKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJhc2VsaW5l
SklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIlVubGlua2VkTWV0YWRhdGFUYWJsZUlubGluZXMuaCIKQEAgLTEy
Niw0ICsxMjcsMjQgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5rSW5mbwog
ICAgIH0KIH0KIAorI2lmIEVOQUJMRShKSVQpCitBTFdBWVNfSU5MSU5FIGNvbnN0IEpJVENvZGVN
YXAmIENvZGVCbG9jazo6aml0Q29kZU1hcCgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklU
Q29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1faml0Q29kZU1hcDsKK30KKworQUxXQVlTX0lOTElO
RSBTaW1wbGVKdW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUoaW50
IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29k
ZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKworQUxXQVlTX0lO
TElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1w
VGFibGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+
KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
K30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uu
aAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXAoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spOwogICAgIAogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlKiB3cmFwQW5kQWN0aXZhdGUoQ29kZUJsb2NrKiBjb2RlQmxvY2spOworCisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLCBtX2NvZGVCbG9jayk7IH0KICAgICAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHJldmlz
aW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0
YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBzdGF0aWNfYXNzZXJ0KHNp
emVvZihHZXRCeUlkTW9kZU1ldGFkYXRhCiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJy
YXlMZW5ndGggewogICAgIEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihH
ZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmlsZSk7IH0KIH07CiBzdGF0
aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsK
IApAQCAtODgsNiArODksNyBAQCB1bmlvbiBHZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAg
R2V0QnlJZE1vZGUgbW9kZTsKICAgICAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGlu
ZzsgLy8gVGhpcyBtdXN0IGJlIHplcm8gd2hlbiB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAg
fTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhLCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0
YWRhdGFEZWZhdWx0IGRlZmF1bHRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1
bnNldE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3Ro
TW9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYgKzM4NSw4IEBA
IGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcygKICAgICByZXR1cm4gbGlu
a2VkQ29kZUlubGluZTsKIH0KIAorLy8gT09QUzogTWFrZSB0aGlzIHN0dWZmIHdvcmsgd2l0aCBk
YXRhIGljcyB0byBub3QgYXNzdW1lIGlubGluZSBhY2Nlc3MuCisKIHZvaWQgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2VzcyhDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFyZ2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVz
ZURhdGFJQygpKSB7CkBAIC00MDQsOSArNDA2LDEyIEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2MKIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5B
Y2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHRhcmdldCkKIHsKICAgICBp
ZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBPT1BTOiBtYWtlIHNvbWUg
dmVyc2lvbiBvZiBJbmxpbmVBY2Nlc3MgZm9yIGJhc2VsaW5lLiBQZXJoYXBzIG1ha2UgaXQgZGF0
YSBkcml2ZW4uIE9yIHBlcmhhcHMgaGF2ZSB0aGUgY29kZQorICAgICAgICAvLyBiZSBzaGFyZWQg
c29tZWhvdyBiZXR3ZWVuIFVubGlua2VkQ29kZUJsb2Nrcy4KKwogICAgICAgICAvLyBJZiBpdCBp
cyBub3QgR2V0QnlJZC1saWtlLXRoaW5nLCB3ZSBkbyBub3QgZW1pdCBub3Agc2xlZCAoZS5nLiBH
ZXRCeVZhbCkuCiAgICAgICAgIC8vIFRoZSBjb2RlIGlzIGFscmVhZHkgYW4gaW5kaXJlY3QganVt
cCwgYW5kIG9ubHkgdGhpbmcgd2Ugc2hvdWxkIGRvIGlzIHJlcGxhY2luZyBtX2NvZGVQdHIuCi0g
ICAgICAgIGlmIChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKKyAgICAgICAgaWYg
KGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHN0dWJJbmZv
Lmhhc0NvbnN0YW50SWRlbnRpZmllcikgewogICAgICAgICAgICAgLy8gSWYgbV9jb2RlUHRyIGlz
IHBvaW50aW5nIHRvIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbiwgdGhpcyBtZWFucyB0
aGF0IElubGluZUFjY2VzcyBjb2RlIGlzIG5vdCBhIHN0dWIgb25lLgogICAgICAgICAgICAgLy8g
V2UgcmV3cml0ZSB0aGlzIHdpdGggdGhlIHN0dWItYmFzZWQgZGlzcGF0Y2hpbmcgY29kZSBvbmNl
LCBhbmQgY29udGludWUgdXNpbmcgaXQgdW50aWwgd2UgcmVzZXQgdGhlIGNvZGUuCiAgICAgICAg
ICAgICBpZiAoc3R1YkluZm8ubV9jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0gc3R1Yklu
Zm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpIHsKQEAgLTQyMSw2
ICs0MjYsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAg
ICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nlc3M6IGxpbmtpbmcgc3R1YiBjYWxsIik7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSB0YXJn
ZXQ7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCShyZXZpc2lvbiAy
ODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1l
dGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgT1ZFUkxPQURfQklUV0lT
RV9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBUwogCiBzdHJ1Y3QgSXRlcmF0aW9uTW9kZU1ldGFkYXRh
IHsKICAgICB1aW50OF90IHNlZW5Nb2RlcyB7IDAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mU2Vlbk1vZGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEl0ZXJhdGlvbk1vZGVN
ZXRhZGF0YSwgc2Vlbk1vZGVzKTsgfSAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlw
ZShzZWVuTW9kZXMpKSA9PSBzaXplb2YoSXRlcmF0aW9uTW9kZSkpOwogfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJ
KHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTElu
dENhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICBBcnJheVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihM
TEludENhbGxMaW5rSW5mbywgbV9hcnJheVByb2ZpbGUpOyB9CiAKIHByaXZhdGU6CiAgICAgdWlu
dHB0cl90IG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQg
fTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJD
YWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBh
dGNoLmgiCiAKQEAgLTI4NSw2ICsyODYsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNl
dChjb25zdCBDb25jCiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlL
aW5kOjpCeUlkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZh
bDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgogICAgICAgICByZXNldFB1
dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKQEAgLTQzMCw2ICs0MzIsMjA0IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6c2UKICAgICBtX2NhY2hlVHlwZSA9IG5l
d0NhY2hlVHlwZTsKIH0KIAordm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21V
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8mIHVubGlua2VkU3R1YkluZm8pCit7CisgICAgYWNjZXNzVHlwZSA9IHVubGlua2VkU3R1
YkluZm8uYWNjZXNzVHlwZTsKKyAgICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8uc3RhcnQ7IC8v
IE9PUFM6IGRvIHdlIG5lZWQgYSBzdGFydCBmb3IgZGF0YSBJQ3M/CisgICAgZG9uZUxvY2F0aW9u
ID0gdW5saW5rZWRTdHViSW5mby5kb25lTG9jYXRpb247CisgICAgc2xvd1BhdGhTdGFydExvY2F0
aW9uID0gdW5saW5rZWRTdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgY2FsbFNp
dGVJbmRleCA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpKTsKKyAgICBjb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxp
bmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIG1fY29kZVB0ciA9IHNsb3dQYXRoU3Rh
cnRMb2NhdGlvbjsKKworICAgIHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6R2V0
QnlJZCAmJiB1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSB7Cisg
ICAgICAgIC8vIEZvciBpdGVyYXRvcl9uZXh0LCB3ZSBjYW4ndCBjbG9iYmVyIHRoZSBzY3JhdGNo
IHJlZ2lzdGVyIGVpdGhlci4KKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUp
IHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJ
bnN0YW5jZU9mOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9m
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OlRyeUdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdl
dEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRC
eUlkRGlyZWN0OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGly
ZWN0T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJ
ZFdpdGhUaGlzOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0
aFRoaXNPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQ
cml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZh
dGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFz
UHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJp
dmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
R2V0UHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQ
cml2YXRlTmFtZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OlB1dEJ5SWQ6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2Vk
U3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJp
Y3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0
ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmlj
dE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtl
ZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Cisg
ICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAg
ICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0
aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtl
ZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5h
bWU6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJpdmF0ZUZp
ZWxkUHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmll
bGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZh
bFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxC
eVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsK
KyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAg
ICAgcmVncy5wcm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVlR1BSID0g
QmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJp
dmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVn
cy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAg
ICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAg
ICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBwcm90b3R5cGVJc0tub3du
T2JqZWN0ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdp
c3RlcnM6OnZhbHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTog
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBoYXNDb25z
dGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OkluQnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAg
ICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5l
SW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2
YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnRoaXNHUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBt
X3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IElu
dmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1
ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNz
VHlwZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2
YXRlQnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAg
ICB2YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86
OmNoZWNrQ29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKICNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRl
ICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1
cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKQEAgLTU2LDYgKzU3LDcgQEAgZW51bSBj
bGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRCeVZhbCwKICAgICBQdXRCeUlkLAog
ICAgIFB1dEJ5VmFsLAorICAgIFB1dFByaXZhdGVOYW1lLAogICAgIEluQnlJZCwKICAgICBJbkJ5
VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtNzgsNiArODAsOCBAQCBlbnVtIGNsYXNzIENh
Y2hlVHlwZSA6IGludDhfdCB7CiAgICAgU3RyaW5nTGVuZ3RoCiB9OwogCitzdHJ1Y3QgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbzsKKwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZvKTsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKQEAgLTk4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlcmVmKCk7
CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKKyAgICB2b2lkIGluaXRpYWxpemVGcm9tVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
Jik7CisKICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIENoZWNrIGlmIHRo
ZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9lcywgdGhl
biBpdCByZXNldHMgaXRzZWxmLApAQCAtNDQ3LDYgKzQ1MywxOCBAQCBpbmxpbmUgYXV0byBhcHBy
b3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1dEtpbmQg
cHV0S2luZDsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQgeyBQ
cml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSB7IEVD
TUFNb2RlOjpzbG9wcHkoKSB9OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAg
ICAvLyBPT1BTOiBEbyB3ZSBuZWVkIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRo
ZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlv
biBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307
CisKICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZp
c2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRl
ICJVbmxpbmtlZENvZGVCbG9jay5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVT
dHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCkBAIC0zMTYsNCArMzE3LDE2IEBAIGlu
dCBVbmxpbmtlZENvZGVCbG9jazo6b3V0T2ZMaW5lSnVtcE9mZnMKICAgICByZXR1cm4gbV9vdXRP
ZkxpbmVKdW1wVGFyZ2V0cy5nZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQogCisjaWYgQVNTRVJUX0VO
QUJMRUQKK2Jvb2wgVW5saW5rZWRDb2RlQmxvY2s6Omhhc0lkZW50aWZpZXIoVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKK3sKKyAgICAvLyBPT1BTOiBkbyB3aGF0IENvZGVCbG9jayBkb2VzIGFuZCBt
YWtlIGEgaGFzaCB0YWJsZT8KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZJ
ZGVudGlmaWVycygpOyArK2kpIHsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIoaSkuaW1wbCgpID09
IHVpZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgy
MDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgi
CiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgpAQCAt
NjIsNiArNjMsNyBAQCBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNz
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogc3Ry
dWN0IEV4ZWN1dGFibGVJbmZvOwogZW51bSBjbGFzcyBMaW5rVGltZUNvbnN0YW50IDogaW50MzJf
dDsKIApAQCAtMTc1LDYgKzE3Nyw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZpeGVkVmVjdG9y
PFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9j
b25zdGFudFJlZ2lzdGVyczsgfQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29u
c3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0
YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4g
bV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsg
fQogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uOyB9CiAKQEAgLTIwNyw2ICsyMTAsMTUgQEAgcHVibGljOgogICAg
IEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1vZGUpOyB9CiAKICAgICBjb25zdCBJbnN0
cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3Q7CisgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uQXQoQnl0ZWNvZGVJbmRleCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5z
dHJ1Y3Rpb25zKCkuYXQoaW5kZXgpLnB0cigpOyB9CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgY29uc3Qg
YXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5hdCgwKS5wdHIoKTsKKyAg
ICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zRW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbnN0cnVjdGlvbnNC
ZWdpbikgKyBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChp
bnN0cnVjdGlvbiA+PSBpbnN0cnVjdGlvbnNCZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGluc3RydWN0
aW9uc0VuZCk7CisgICAgICAgIHJldHVybiBpbnN0cnVjdGlvbiAtIGluc3RydWN0aW9uc0JlZ2lu
OworICAgIH0KKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbnNTaXplKCkgY29uc3QgeyByZXR1cm4g
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMo
KSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogICAgIHVuc2lnbmVkIG51bVZh
cnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KQEAgLTMzNCw2ICszNDYsMTUgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9tZXRhZGF0YS0+c2l6ZUluQnl0ZXMoKTsKICAgICB9CiAK
KyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKKyAg
ICB7CisgICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21w
bGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCisgICAgICAgIHJldHVybiAhaXNCdWlsdGluRnVuY3Rp
b24oKTsKKyAgICB9CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGJvb2wgaGFzSWRlbnRpZmll
cihVbmlxdWVkU3RyaW5nSW1wbCopOworI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBVbmxpbmtl
ZENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5m
byYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+KTsKQEAgLTM5NCw2ICs0MTUsNyBAQCBw
cml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGV4aWNhbFNjb3BlRmVhdHVyZXMgOiA0OwogcHVibGlj
OgogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOworICAgIFJlZlB0cjxCYXNlbGluZUpJVENv
ZGU+IG1fdW5saW5rZWRCYXNlbGluZUNvZGU7CiBwcml2YXRlOgogICAgIENvZGVGZWF0dXJlcyBt
X2ZlYXR1cmVzIHsgMCB9OwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKQEAgLTQx
MCw2ICs0MzIsOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0
cmVhbT4gbV9pbnN0cnVjdGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcz4gbV9saXZlbmVzczsKIAorICAgIC8vIE9PUFM6IGJpbmQgYSBiZXR0ZXIgcGxh
Y2UgdG8gc3RvcmUgdGhpcyBzdHVmZj8KKyAgICBWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPiBt
X2JpbmFyeUFyaXRoUHJvZmlsZXM7CisgICAgVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPiBtX3Vu
YXJ5QXJpdGhQcm9maWxlczsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIERGRzo6RXhpdFBy
b2ZpbGUgbV9leGl0UHJvZmlsZTsKQEAgLTQ1NSw2ICs0ODAsMjggQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkp
OwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiog
cGMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVj
b2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQpOworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmlsZSgp
CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2JpbmFyeUFyaXRoUHJvZmlsZXMu
c2l6ZSgpOworICAgICAgICBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFyaXRo
UHJvZmlsZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQg
PSBtX3VuYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fdW5hcnlBcml0aFByb2Zp
bGVzLmFwcGVuZChVbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGJpbmFyeUFyaXRoUHJvZmlsZSh1bnNp
Z25lZCBpKSB7IHJldHVybiBtX2JpbmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KKyAgICBVbmFyeUFy
aXRoUHJvZmlsZSYgdW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1cm4gbV91bmFy
eUFyaXRoUHJvZmlsZXNbaV07IH0KIAogcHJpdmF0ZToKICAgICB1c2luZyBPdXRPZkxpbmVKdW1w
VGFyZ2V0cyA9IEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9ja0dlbmVyYXRvci5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNjcsNiArNjcsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCB3YXNDb21waWxlZFdpdGhE
ZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPndhc0NvbXBpbGVk
V2l0aERlYnVnZ2luZ09wY29kZXMoKTsgfQogICAgIGJvb2wgaGFzQ2hlY2twb2ludHMoKSBjb25z
dCB7IHJldHVybiBtX2NvZGVCbG9jay0+aGFzQ2hlY2twb2ludHMoKTsgfQogICAgIGJvb2wgaGFz
VGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmhhc1RhaWxDYWxscygpOyB9
CisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkgeyByZXR1cm4gbV9jb2RlQmxv
Y2stPmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpOyB9CisgICAgdW5zaWduZWQgYWRkVW5hcnlBcml0
aFByb2ZpbGUoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKTsg
fQogCiAgICAgLy8gVXBkYXRpbmcgVW5saW5rZWRDb2RlQmxvY2suCiAgICAgdm9pZCBzZXRIYXND
aGVja3BvaW50cygpIHsgbV9jb2RlQmxvY2stPnNldEhhc0NoZWNrcG9pbnRzKCk7IH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRh
ZGF0YVRhYmxlLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiAr
NjQsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmxpbmtlZE1l
dGFkYXRhVGFibGUpOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+Cisg
ICAgdWludHB0cl90IG9mZnNldEluTWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90
IGJhc2VUeXBlT2Zmc2V0ID0gbV9pczMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bj
b2RlSURdIDogb2Zmc2V0VGFibGUxNigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAgICByZXR1
cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSkgKiBv
cGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogcHJpdmF0ZToKICAgICBlbnVtIEVtcHR5VGFn
IHsgRW1wdHkgfTsKIApAQCAtMTAxLDYgKzEwOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVy
biBzX29mZnNldDE2VGFibGVTaXplOwogICAgIH0KIAorCiAgICAgdXNpbmcgT2Zmc2V0MzIgPSB1
aW50MzJfdDsKICAgICB1c2luZyBPZmZzZXQxNiA9IHVpbnQxNl90OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyODIw
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAgdGVtcGxhdGU8dW5zaWduZWQgbnVtYmVyT2ZC
dWNrZXRzQXJndW1lbgogc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRzQXJndW1lbnQ7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNwZWNGYWlsQnVja2V0cyA9
IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRleE1hc2sgPSBudW1i
ZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgdG90YWxOdW1i
ZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNGYWlsQnVja2V0czsK
ICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKQEAgLTEzNCw3ICsxMzMsNyBAQCBzdHJ1Y3Qg
VmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9u
OwogICAgIH0KLSAgICAKKwogICAgIEVuY29kZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJl
ck9mQnVja2V0c107CiAKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9u
ZSB9OwpAQCAtMTU2LDYgKzE1NSw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVy
T2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRo
TG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAgICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmls
ZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxl
LCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OTgsNyArMTU5OCw3IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnkKICAgICAgICAgZW1pdFVuYXJ5
T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBvcF9uZWdhdGU6
Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0eXBlKTsKKyAgICAgICAg
T3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUsIG1fY29kZUJsb2NrLT5hZGRVbmFy
eUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBvcF9iaXRub3Q6CiAg
ICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90Pihkc3QsIHNyYyk7CkBAIC0xNjk2LDEzICsxNjk2
LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VHlwZU8KIAogUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbmMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewot
ICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BJbmM6OmVtaXQodGhpcywgc3Jj
RHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNy
Y0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWMoUmVnaXN0
ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BE
ZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUo
KSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24g
MjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODIsNyArNjgyLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBSZWdpc3RlcklEKj4KICAgICAgICAgZW1pdEJpbmFyeU9wKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3JjMiwgT3BlcmFuZFR5
cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBk
c3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAgICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMs
IGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1fY29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2Zp
bGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAyODIwMTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTcsNyArOTcsNiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJh
bWUqCiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5
cGUoKSkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VS
VChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCk7Ci0gICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJU
KGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIAogICAg
IGlmICghT3B0aW9uczo6dXNlT1NSRW50cnlUb0RGRygpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2
aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBF
TkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRl
ICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpJ
VC5oIgpAQCAtMzA5LDEwICszMTAsMTUgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKEND
YWxsSGVscGVycwogICAgICAgICAgICAgdHJ1ZUNhbGxlciA/IEFzc2VtYmx5SGVscGVyczo6VXNl
RXhpc3RpbmdUYWdSZWdpc3RlckNvbnRlbnRzIDogQXNzZW1ibHlIZWxwZXJzOjpDb3B5QmFzZWxp
bmVDYWxsZWVTYXZlZFJlZ2lzdGVyc0Zyb21CYXNlRnJhbWUsCiAgICAgICAgICAgICBHUFJJbmZv
OjpyZWdUMiwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1Q0KTsKIAorICAgICAgICAvLyBP
T1BTOiBDb25zaWRlciBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGZvciBiYXNlbGluZSBwYi9t
ZXRhZGF0YSByZWdpc3RlcnMKICAgICAgICAgaWYgKGNhbGxlcklzTExJbnQpIHsKICAgICAgICAg
ICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVD
b2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRh
dGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVC
bG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAgICAgICAg
aml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNsb3QoaW5s
aW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIp
KTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9y
KCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSks
IGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6
c19tZXRhZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVKSVRDb25z
dGFudFBvb2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2Rl
QmxvY2ssIEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgh
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw2ICs0MTAsOSBAQCB2b2lkIGFk
anVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVn
aXN0ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dl
ZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKKyAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4
aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGlu
ZUpJVENvbnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CisKICAgICAgICAgY29k
ZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKIAogICAgICAgICBCeXRl
Y29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMwLDYg
KzczMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihjYWxsZWVU
YWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5y
ZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNz
ZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFt
ZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogCiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAg
ICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBp
ICsgMSk7CkBAIC04ODksNyArODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwo
Tm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAg
aWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsKICAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0
RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1l
U2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ1LDYgKzc0NSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIHNodWZmbGVE
YXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdEpT
KTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3Mp
OwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7
CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAgICAgICAgICAgIEVk
Z2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwpAQCAt
ODk2LDcgKzg5Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUK
ICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNU
YWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VE
YXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICszOTg1LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJlZ2lzdGVyU2V0IHVzZWRS
ZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNv
ZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNlZFJlZ2lzdGVycywK
KyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwg
Y2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2VkUmVnaXN0ZXJzLAogICAg
ICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpTVmFsdWVSZWdzOjpwYXls
b2FkT25seShwcm9wZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQUlJlZywgc3R1YkluZm9H
UFIpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKIApAQCAt
MTQ3NzgsNyArMTQ3NzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93
Q2hpCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OwogICAgIEdQUlJlZyBzY29wZVJlZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcs
IG1faml0LmNvZGVCbG9jaygpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRl
eCk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMxNyw3ICs0MzE3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpID8gcGFyYW1zLmdwU2Ny
YXRjaCgwKSA6IEludmFsaWRHUFJSZWc7CiAKICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0g
Qm94PEpJVFB1dEJ5VmFsR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgIGppdC5j
b2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRl
SW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLAorICAgICAgICAgICAgICAgIGppdC5jb2RlQmxv
Y2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgs
IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLAogICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2
YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZv
R1BSKTsKIAogICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3lt
Ym9sID0gdHJ1ZTsKQEAgLTEwMTkxLDYgKzEwMTkxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtUGFzc2VkQXJnczsgaSA8IG51bUFsbG9jYXRl
ZEFyZ3M7ICsraSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MuYXBw
ZW5kKFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpKTsKICAgICAgICAgICAg
ICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAg
ICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0
dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGpp
dC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKHNlbWFudGljTm9kZU9yaWdpbik7CkBAIC0x
MDM0OSwxMyArMTAzNTAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZs
ZURhdGEuYXJncy5hcHBlbmQocGFyYW1zWzEgKyBpXS5yZWNvdmVyeUZvckpTVmFsdWUoKSk7CiAK
ICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtQXJnczsKKyAg
ICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygp
LT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc2h1
ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAKICAg
ICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2so
KS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsK
IAotICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWls
Q2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5r
SW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1Qw
LCBbJl0gewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZs
ZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxl
cihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgICAg
ICB9KTsKQEAgLTEwNjk4LDcgKzEwNzAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewog
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAg
ICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA5NzksNyArMTA5ODEsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFp
bENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENh
bGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xv
d1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6
cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2Fs
bFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDE3ICs0MiwyOCBAQCBjbGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAg
ICAgIHJldHVybiBpZiBlbXB0eT8KIAotICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgs
IGZpZWxkcykKKyAgICAgICAgZGVmIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBm
aWVsZE5hbWVzKQorICAgICAgICAgICAgZmllbGROYW1lcy5tYXAgZG8gfGZpZWxkTmFtZXwKKyAg
ICAgICAgICAgICAgICAiI3twcmVmaXh9c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGRO
YW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsxLi5dfSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgZW5kLmpvaW4oIlxu
IikKKyAgICAgICAgZW5kCisKKyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVs
ZHMsIGZpZWxkTmFtZXMpCiAgICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwK
ICAgICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAg
ICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5
cGUpfVxuI3twcmVmaXh9fTsiCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7
XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlLCBmaWVsZE5hbWVzKX1cbiN7
cHJlZml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIiN7
cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307IgorICAgICAgICAgICAgICAgICAg
ICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMu
cHVzaChmaWVsZE5hbWUpCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9f
c30gbV8je2ZpZWxkTmFtZX07IgogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5k
LmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxk
cygiICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVsZE5hbWVzID0gW10KKyAgICAgICAg
cHJlZml4ID0gIiAgICAgICAgIgorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKHByZWZp
eCwgQGZpZWxkcywgZmllbGROYW1lcykKKyAgICAgICAgZmllbGRzID0gZmllbGRzICsgIlxuIiAr
IGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQogCiAgICAgICAg
IGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBAaW5pdGlhbGl6
ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk4LDggKzY5OCwxMyBA
QCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzCiAKIHZvaWQgQXNzZW1i
bHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGlu
Zm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVj
dCksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xv
YmFsT2JqZWN0KHZtLCBpbmZvKTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0
dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8qIGlu
Zm8pCit7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAg
ICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNp
b24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTcxOCw2ICsxNzE4LDcgQEAgcHVibGljOgogICAgIH0KICAg
ICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExp
bmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2Jq
ZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3BhY2VPblN0YWNr
Rm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QmFzZWxpbmVKSVRDb2RlLmgiCisKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKKyNpbmNsdWRlICJK
dW1wVGFibGUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworSklUQWRkSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0aFByb2ZpbGUp
OyB9CitKSVRNdWxJQyogTWF0aElDSG9sZGVyOjphZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0K
K0pJVFN1YklDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklU
TmVnSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKwordm9pZCBN
YXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKQoreworICAgIG1f
YWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2FkZElDcyk7CisgICAgbV9tdWxJQ3MgPSBXVEZNb3Zl
KG90aGVyLm1fbXVsSUNzKTsKKyAgICBtX25lZ0lDcyA9IFdURk1vdmUob3RoZXIubV9uZWdJQ3Mp
OworICAgIG1fc3ViSUNzID0gV1RGTW92ZShvdGhlci5tX3N1YklDcyk7Cit9CisKK0Jhc2VsaW5l
SklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKKyAgICA6IERpcmVjdEpJVENvZGUo
V1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAg
ICwgTWF0aElDSG9sZGVyKCkKK3sgfQorCitCYXNlbGluZUpJVENvZGU6On5CYXNlbGluZUpJVENv
ZGUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiSklU
Q29kZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8v
Y2xhc3MgSklUQWRkSUM7CisvL2NsYXNzIEpJVE11bElDOworLy9jbGFzcyBKSVRTdWJJQzsKKy8v
Y2xhc3MgSklUTmVnSUM7CitjbGFzcyBCaW5hcnlBcml0aFByb2ZpbGU7CitjbGFzcyBVbmFyeUFy
aXRoUHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFNp
bXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKK2NsYXNzIE1hdGhJQ0hv
bGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhl
cik7CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAg
IEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRTdWJJ
QyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTmVnSUMqIGFkZEpJ
VE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CisKKyAgICAvKgorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJ
VEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBh
ZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJh
dG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUTXVsSUMqIGFkZE1h
dGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHBy
b2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dl
bmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+CisgICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisgICAgKi8KKworcHJpdmF0
ZToKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJ
Q3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3Vi
SUNzOworfTsKKworY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKK3B1YmxpYzoKKyAgICB1c2luZyBD
b25zdGFudCA9IHVuc2lnbmVkOworCisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7Cisg
ICAgICAgIEdsb2JhbE9iamVjdCwKKyAgICAgICAgQ2FsbExpbmtJbmZvLAorICAgICAgICBTdHJ1
Y3R1cmVTdHViSW5mbywKKyAgICAgICAgRnVuY3Rpb25EZWNsLAorICAgICAgICBGdW5jdGlvbkV4
cHIsCisgICAgfTsKKworICAgIHN0cnVjdCBWYWx1ZSB7CisgICAgICAgIC8vIE9PUFM6IE1ha2Ug
dGhlIHBvaW50ZXIgcGFja2VkLgorICAgICAgICBUeXBlIHR5cGU7CisgICAgICAgIHZvaWQqIHBh
eWxvYWQ7CisgICAgfTsKKworICAgIEpJVENvbnN0YW50UG9vbCgpID0gZGVmYXVsdDsKKyAgICBK
SVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAgICBKSVRDb25z
dGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworCisgICAg
Q29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXplKCk7CisgICAgICAgIG1f
Y29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1ZSBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fY29uc3Rh
bnRzOworfTsKKworCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29k
ZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2RlKENv
ZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJp
dHlDaGVjayk7CisgICAgfkJhc2VsaW5lSklUQ29kZSgpIG92ZXJyaWRlOworCisgICAgQmFnPFVu
bGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgQmFnPENhbGxMaW5rSW5m
bz4gbV9ldmFsQ2FsbExpbmtJbmZvczsgLy8gT09QUzogbWFrZSBzdXJlIHdlIHZpc2l0IHRoZXNl
IHNvbWVob3cuIE9yIGFzc2VydCB3ZSBkb24ndCBoYXZlIHRvLCBzaW5jZSB0aGV5J3JlIHZpcnR1
YWwgY2FsbHMuCisgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRT
dHViSW5mb3M7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBU
YWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXM7CisgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisgICAgSklUQ29uc3RhbnRQ
b29sIG1fY29uc3RhbnRQb29sOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCShyZXZpc2lvbiAy
ODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgc2l6ZV90IEJhc2VsaW5lSklUUGxhbjo6
Y29kZVNpemUoKSBjb25zdAogCiBDb21waWxhdGlvblJlc3VsdCBCYXNlbGluZUpJVFBsYW46OmZp
bmFsaXplKCkKIHsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6
ZU9uTWFpblRocmVhZCgpOworICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZp
bmFsaXplT25NYWluVGhyZWFkKG1fY29kZUJsb2NrKTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewog
ICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQo
bV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlz
aW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6Omxv
Z1NoYWRvd0NoaWNrZW5Qcm9sbwogICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CiB9
CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcg
c2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQotewotICAgIHN0b3Jl
UHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7Ci0gICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBjYWxsZWUpKSk7Ci0gICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsK
LSAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRP
RihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJ
bW1QdHIoY29kZUJsb2NrKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihT
aGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOwotfQotCiB2
b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQUlJl
ZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gy
KQogewogICAgIFNoYWRvd0NoaWNrZW4qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2Vu
KCk7CkBAIC03Miw2ICs2MiwyOCBAQCB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hp
Y2tlblBhCiAgICAgc3RvcmVQdHIoc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDFOb25BcmdHUFIp
KTsKIH0KIAorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK3ZvaWQgQ0NhbGxI
ZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tl
dCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBzdG9yZVB0cihHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOworICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVl
KSkpOworICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7CisgICAgc3Rv
cmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKKyAgICBzdG9yZVB0cihjb2RlQmxvY2ssIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBj
b2RlQmxvY2spKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRz
KCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKK30KKwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRo
aXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBs
KHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgp
OworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BS
UmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BS
UmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwg
Y29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwogdm9pZCBDQ2FsbEhlbHBlcnM6OmVtaXRK
SVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gd2hlcmUs
IFNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPiBlbWl0Q29kZSwgY29uc3QgY2hhciog
ZGVzY3JpcHRpb24pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODQw
LDcgKzg0MCwxNCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2Ugb3BlcmF0aW9ucyBjbG9iYmVyIGFs
bCB2b2xhdGlsZSByZWdpc3RlcnMuIFRoZXkgYXNzdW1lIHRoYXQgdGhlcmUgaXMgcm9vbSBvbiB0
aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sgdG8gbWFyc2hhbGwgY2FsbCBhcmd1bWVudHMuCiAgICAg
dm9pZCBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwg
R1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NvcGUpOwotICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQ
UlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CisKK3ByaXZhdGU6CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgdm9pZCBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1Jl
Z3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCk7CitwdWJsaWM6CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
KTsKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNr
ZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxvY2ss
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEg
cG9pbnRlciB0byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQu
CiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDEyIEBAIG5h
bWVzcGFjZSBKU0MgewogCiB2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNh
dmVSZWdpc3RlcnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CisgICAgc2V0dXBDYWxsZWVTYXZl
UmVnaXN0ZXJzKGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwordm9pZCBD
YWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lz
dGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMpCit7CiAgICAgUmVnaXN0ZXJT
ZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycyB7IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSB9OwotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2Nh
dGlvbnMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5zaXplKCk7ICsraSkgewogICAg
ICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5IHsgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChp
KSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZURhdGEuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMSArNDMsMTMg
QEAgcHVibGljOgogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOwogICAgIHVuc2lnbmVk
IG51bUxvY2FscyB7IFVJTlRfTUFYIH07CiAgICAgdW5zaWduZWQgbnVtUGFzc2VkQXJncyB7IFVJ
TlRfTUFYIH07CisgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycyB7IFVJTlRfTUFYIH07IC8vIE9u
IG91ciBtYWNoaW5lIGZyYW1lLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJNYXA8
VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOwogICAgIEdQUlJlZyBudW1iZXJUYWdSZWdpc3RlciB7
IEludmFsaWRHUFJSZWcgfTsKIAogICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENv
ZGVCbG9jayopOworICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lz
dGVyQXRPZmZzZXRMaXN0Kik7CiAjZW5kaWYKICAgICBWYWx1ZVJlY292ZXJ5IGNhbGxlZTsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVy
LmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEzICszOCwxMyBAQCBDYWxs
RnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhCiAgICAgOiBtX2ppdChqaXQpCiAg
ICAgLCBtX29sZEZyYW1lKGRhdGEubnVtTG9jYWxzICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUlu
UmVnaXN0ZXJzLCBudWxscHRyKQogICAgICwgbV9uZXdGcmFtZShkYXRhLmFyZ3Muc2l6ZSgpICsg
Q2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCi0gICAgLCBtX2FsaWdu
ZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMKLSAgICAgICAg
KyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoaml0LmNvZGVCbG9jaygpLT5udW1QYXJh
bWV0ZXJzKCkpKQorICAgICwgbV9hbGlnbmVkT2xkRnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEubnVt
UGFyYW1ldGVycykpCiAgICAgLCBtX2FsaWduZWROZXdGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnMKICAgICAgICAgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJh
bWUoZGF0YS5hcmdzLnNpemUoKSkpCiAgICAgLCBtX2ZyYW1lRGVsdGEobV9hbGlnbmVkTmV3RnJh
bWVTaXplIC0gbV9hbGlnbmVkT2xkRnJhbWVTaXplKQogICAgICwgbV9sb2NrZWRSZWdpc3RlcnMo
UmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpKQogICAgICwgbV9udW1QYXNzZWRBcmdzKGRhdGEu
bnVtUGFzc2VkQXJncykKKyAgICAsIG1fbnVtUGFyYW1ldGVycyhkYXRhLm51bVBhcmFtZXRlcnMp
CiB7CiAgICAgLy8gV2UgYXJlIGFsbG93ZWQgYWxsIHRoZSB1c3VhbCByZWdpc3RlcnMuLi4KICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOyApCkBA
IC00MjEsNyArNDIxLDcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclRhaWxD
YQogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIG1f
bmV3RnJhbWVCYXNlKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhcmd1bWVudENvdW50T0sg
PQogICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBt
X25ld0ZyYW1lQmFzZSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
bV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX251bVBhcmFtZXRlcnMpKTsKICAgICBtX2ppdC5hZGQz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkg
LSAxICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpLCBtX25ld0ZyYW1lQmFzZSk7
CiAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtc3RhY2tBbGln
bm1lbnRSZWdpc3RlcnMoKSksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5tdWwzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBtX25ld0ZyYW1lQmFz
ZSwgbV9uZXdGcmFtZUJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiAr
MTA0LDcgQEAgcHVibGljOgogICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBkYXRhOwogICAg
ICAgICBkYXRhLm51bUxvY2FscyA9IG51bUxvY2FscygpOwogICAgICAgICBkYXRhLm51bVBhc3Nl
ZEFyZ3MgPSBtX251bVBhc3NlZEFyZ3M7CisgICAgICAgIGRhdGEubnVtUGFyYW1ldGVycyA9IG1f
bnVtUGFyYW1ldGVyczsKICAgICAgICAgZGF0YS5jYWxsZWUgPSBnZXROZXcoVmlydHVhbFJlZ2lz
dGVyIHsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIH0pLT5yZWNvdmVyeSgpOwogICAgICAgICBkYXRh
LmFyZ3MucmVzaXplKGFyZ0NvdW50KCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFyZ0NvdW50KCk7ICsraSkKQEAgLTc5OCw2ICs3OTksNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
cGVyZm9ybVNhZmVXcml0ZXMoKTsKICAgICAKICAgICB1bnNpZ25lZCBtX251bVBhc3NlZEFyZ3Mg
eyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG1fbnVtUGFyYW1ldGVycyB7IFVJTlRfTUFYIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BCiB9CiAKIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICA6IEpT
SW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQorICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBu
dWxscHRyKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKICAgICAsIG1fbGFi
ZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKICAg
ICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtKQpAQCAtNzcsNiArNzcsOSBAQCBKSVQ6
OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQ
cm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKKyAgICBtX2dsb2JhbE9iamVjdENvbnN0YW50ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0KTsKKyAg
ICBtX3Byb2ZpbGVkQ29kZUJsb2NrID0gY29kZUJsb2NrOworICAgIG1fdW5saW5rZWRDb2RlQmxv
Y2sgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiB9CiAKIEpJVDo6fkpJVCgpCkBA
IC05MCw4ICs5Myw4IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEp1bXBMaXN0IHNraXBPcHRpbWl6ZTsKLSAgICAKLSAgICBz
a2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlv
bnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWJzb2x1dGVBZGRyZXNz
KG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgc2tp
cE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25z
OjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIEFTU0VSVCghbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpKTsKIAogICAgIGNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2
ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50
b3BFbnRyeUZyYW1lKTsKQEAgLTExMywxNSArMTE2LDIxIEBAIHZvaWQgSklUOjplbWl0Tm90aWZ5
V3JpdGUoV2F0Y2hwb2ludFNldCoKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50
ZXJUb1NldCkKK3ZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2lu
dGVyVG9TZXQpCiB7CisgICAgLy8gT09QUzogVGFrZSBhIGJvb2xlYW4gb3Igc29tZXRoaW5nIHNh
eWluZyBpZiB3ZSBjYW4gYmUgbnVsbC4KKyAgICBhdXRvIG9rID0gYnJhbmNoVGVzdFB0cihaZXJv
LCBwb2ludGVyVG9TZXQpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJl
c3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBvay5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCit2b2lkIEpJ
VDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIEdQUlJlZyBz
Y3JhdGNoR1BSKQogewotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+dmFyUmVhZE9ubHlXYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFs
VmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJS
ZWFkT25seVdhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKQEAgLTEyOSw3ICsxMzgsNyBAQCB2b2lk
IEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICAgICBpZiAoIUFTU0VSVF9FTkFCTEVE
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBKdW1wIG9rID0gYnJhbmNoUHRyKEVxdWFsLCByZWdU
MCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGJyZWFrcG9pbnQoKTsKICAgICBvay5saW5r
KHRoaXMpOwpAQCAtMTgxLDIxICsxOTAsNDEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwo
Y29uc3QgSW5zdHJ1YwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3ZvaWQgSklUOjpl
bWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9u
Q29kZSk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEpTRnVuY3Rpb246
Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJlc3VsdCk7CisgICAgYXV0byBoYXNF
eGVjdXRhYmxlID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHQsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0
aW9uOjpyYXJlRGF0YVRhZyksIHJlc3VsdCk7CisgICAgaGFzRXhlY3V0YWJsZS5saW5rKHRoaXMp
OworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkpCisgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QoKSksIHJlc3VsdCk7CisgICAgZWxzZQorICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9y
Q2FsbCgpKSwgcmVzdWx0KTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2U6Om9mZnNldE9mQ29kZUJsb2NrKCkpLCByZXN1bHQpOworICAgIGVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZXN1bHQsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7
Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKICAgICBpZiAoSklU
SW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2Rl
QmxvY2ssICJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fcHJvZmlsZWRD
b2RlQmxvY2ssICJcbiIpOwogICAgIAogICAgIGppdEFzc2VydFRhZ3NJblBsYWNlKCk7CiAgICAg
aml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsKICAgICAKLSAgICBhdXRvJiBpbnN0cnVjdGlv
bnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rp
b25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgYXV0byYg
aW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7CisgICAg
dW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwogCi0gICAgVk0m
IHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgQnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2Rl
SW5kZXgoMCk7CisKKyAgICAvLyBPT1BTOiBNYXliZSBvbmx5IGRvIHRoaXMgaWYgd2UgZGlzYWJs
ZSBzaGFyaW5nIHNvbWVob3c/CisgICAgLyoKKyAgICBWTSYgdm0gPSBtX3VubGlua2VkQ29kZUJs
b2NrLT52bSgpOwogICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1fY29k
ZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJsb2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmlu
aGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtKSkpIHsKICAgICAgICAgLy8gV2UgY2Fu
IG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2Rl
QmxvY2sncyBleGFjdGx5IG9uY2UuCiAgICAgICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxk
IGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRoZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRz
IHRvCkBAIC0yMzYsNiArMjY1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAgICovCiAKICAgICBtX2J5dGVj
b2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CiAgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNv
dW50OyApIHsKQEAgLTI3OCw4ICszMDgsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpCiAKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5l
SklURXhlY3V0aW9uKCkpKSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
Y29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBj
dHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxs
RnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBb
IiwgYnl0ZWNvZGVPZmZzZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwg
UmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0KQEAgLTUyNyw3ICs1NTcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJ
bmRleDsKIAotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7Cisg
ICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAg
ICAgICAKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0
YUxvZ0xuKCJCYXNlbGluZSBKSVQgZW1pdHRpbmcgc2xvdyBjb2RlIGZvciAiLCBtX2J5dGVjb2Rl
SW5kZXgsICIgYXQgb2Zmc2V0ICIsIChsb25nKWRlYnVnT2Zmc2V0KCkpOwpAQCAtNTQ1LDggKzU3
NSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKICAgICAg
ICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAg
ICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJs
b2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0
LCAiXSBTTE9XICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihj
dHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0K
QEAgLTY3NCw1NSArNzA0LDU2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAjZW5kaWYKIH0KIAordm9pZCBKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3Rh
bnRQb29sUmVnaXN0ZXJzKCkKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHNfbWV0YWRhdGFHUFIpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJlZ1QwKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZK
SVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKK30KKwordm9pZCBKSVQ6OmVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKQoreworICAgIEJhc2U6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNG
b3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklU
Q29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxl
dmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOworICAgIC8vIE9PUFM6IE1heWJl
IHRoaXMgc2hvdWxkIGJlIGRvbmUgb24gdW5saW5rZWQgY29kZSBibG9jaz8KKyAgICBERkc6OkNh
cGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZl
bCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIERGRzo6Q2Fubm90Q29tcGlsZToK
ICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2NhbkJlT3B0aW1p
emVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZh
bHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZToKICAgICBjYXNl
IERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IHRy
dWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwogICAgICAgICBt
X3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewotICAg
IGNhc2UgR2xvYmFsQ29kZToKLSAgICBjYXNlIE1vZHVsZUNvZGU6Ci0gICAgY2FzZSBFdmFsQ29k
ZToKLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAgICAgICAvLyBXZSBj
b3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4g
dW5pbmxpbmVhYmxlIGNhbGwuCi0gICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2
YXRpb24uCi0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBj
YW5JbmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbihtX2NvZGVCbG9jayk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZV
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51
bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9j
ay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9y
PFNpbXBsZUp1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1w
VGFibGVzKCkpOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklU
RGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFN0cmlu
Z0p1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGVzKCkpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5r
ZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBt
X3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpOworICAgICAg
ICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1
bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVk
VmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmls
ZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpKSkKLSAgICAg
ICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9jb2RlQmxv
Y2spOworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92
bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVG
b3JQcm9maWxlcigpKSkpIHsKKyAgICAgICAgLy8gT09QUzogYnVpbGQgYSBkaXNhc3NlbWJsZXIg
b2ZmIHVubGlua2VkIGNvZGUgYmxvY2sKKyAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5p
cXVlPEpJVERpc2Fzc2VtYmxlcj4obV9wcm9maWxlZENvZGVCbG9jayk7CisgICAgfQogICAgIGlm
IChVTkxJS0VMWShtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpKSB7CisgICAgICAgIC8vIE9P
UFM6IGJ1aWxkIHByb2ZpbGVyIGRpc2Fzc2VtYmxlciBvZmYgdW5saW5rZWQgY29kZSBibG9jawog
ICAgICAgICBtX2NvbXBpbGF0aW9uID0gYWRvcHRSZWYoCiAgICAgICAgICAgICBuZXcgUHJvZmls
ZXI6OkNvbXBpbGF0aW9uKAotICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fY29kZUJsb2NrKSwKKyAgICAgICAgICAgICAgICBt
X3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX3Byb2ZpbGVk
Q29kZUJsb2NrKSwKICAgICAgICAgICAgICAgICBQcm9maWxlcjo6QmFzZWxpbmUpKTsKLSAgICAg
ICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNv
ZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOworICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9m
aWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX3Byb2ZpbGVkQ29k
ZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpKTsKQEAgLTc0Miwx
MSArNzczLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAg
ICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsK
KyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSgpOwogCiAgICAgTGFi
ZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAotICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGludCBm
cmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXplID0gLWZyYW1l
VG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVUb3BPZmZzZXQpLCBjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDEpOwogICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CkBAIC03
NTcsMTYgKzc4OSwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemlu
CiAgICAgbW92ZShyZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzKCk7CisgICAgZW1p
dFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0
ZXJzKCk7CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3Rl
cnMoKTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
IHsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUpIHsKICAgICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hv
dWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50
ID0gMDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50
KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX3VubGlua2VkQ29k
ZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpID4gMSkpIHsKKyAgICAgICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDIpOworICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkg
KyBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+OjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlZ1QyKTsK
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV91
bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CiAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdhbnQgdG8gcHV0
IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCiAgICAgICAgICAgICAgICAgLy8ga2VlcCB0
aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gcmVjb3JkIHRo
ZSBkdW1teSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKSAmJiAhYXJndW1lbnQpCisgICAgICAgICAgICAgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxsRnJhbWU6OmFyZ3Vt
ZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC03NzcsMTIgKzgxMywxMiBAQCB2
b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgICAgICAgICAg
bG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsK
ICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRh
Z0dQUigpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSwgcmVzdWx0UmVn
cyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdzLCBBZGRyZXNzKHJlZ1Qy
LCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRP
ZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICAK
LSAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2RlQmxvY2stPmppdFR5cGUo
KSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXplTWFya2VyKSkKICAgICAg
ICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92ZSgqc2l6ZU1hcmtlciks
ICp0aGlzKTsKQEAgLTc5OSwyNCArODM1LDI3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dp
dGhvdXRGaW5hbGl6aW4KICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwog
ICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNhbGxPcGVyYXRpb25XaXRoQ2Fs
bEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJv
ciwgbV9jb2RlQmxvY2spOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZy
YW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwg
cmVnVDApOwogCiAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGlzIDEsIHdlIG5l
dmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCi0gICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBt
X2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5j
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKKyAgICBi
b29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSAhPSAxOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1
bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKICAgICAgICAgbV9hcml0eUNoZWNr
ID0gbGFiZWwoKTsKLSAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgJm1fY29kZUJsb2Nr
LT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7CisKICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUlu
UHJvbG9ndWUocmVnVDApOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkpKTsKIAog
ICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QxKTsKLSAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKS5saW5rVG8oYmVn
aW5MYWJlbCwgdGhpcyk7CisgICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKS5saW5rVG8o
YmVnaW5MYWJlbCwgdGhpcyk7CiAKICAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleCgwKTsKIAogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAg
ICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX2NvZGVC
bG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9w
ZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1l
Um9sbGJhY2tPbkV4Y2VwdGlvbihtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkg
PyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ss
IGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJyYW5jaFRlc3QzMiha
ZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwpAQCAtODM5LDcg
Kzg3OCw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAg
ICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKICAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVp
bGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKLSAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVu
aXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CisgICAgbV9saW5rQnVm
ZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBt
X3VubGlua2VkQ29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZm
b3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04NTgsOCArODk3LDggQEAgdm9pZCBKSVQ6Omxp
bmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAgICAgIGNhc2UgU3dpdGNo
UmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXI6
IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5z
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAg
ICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRP
ZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB1bmxpbmtlZFRh
YmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzW2pdOwpAQCAtODcxLDgg
KzkxMCw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU3dp
dGNoUmVjb3JkOjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8gY3Rp
RGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZv
ciAoYXV0byYgbG9jYXRpb24gOiB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUudmFsdWVzKCkp
IHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsb2NhdGlvbi5tX2JyYW5jaE9m
ZnNldDsKQEAgLTkwNiwzMiArOTQ1LDM1IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIHJlY29yZC5jYWxsZWUpOwogICAgIH0KIAot
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIpOwotICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVz
KG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5C
eVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNl
T2ZzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wcml2YXRlQnJh
bmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOworICAgIGF1dG8gZmluYWxpemVJQ3MgPSBbJl0gKGF1
dG8mIGdlbmVyYXRvcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5lcmF0b3JzKSB7
CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsKKyAgICAgICAg
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1fZG9uZSk7CisgICAgICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zbG93UGF0aEJlZ2luKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX2dldEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkc1dpdGhUaGlz
KTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5
VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9k
ZWxCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeUlkcyk7CisgICAgZmluYWxpemVJQ3Mo
bV9pbkJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9mcyk7CisgICAgZmluYWxp
emVJQ3MobV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7CiAKICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0
aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewotICAgICAgICBDYWxsTGlua0luZm8m
IGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAgICAgICAgaW5mby5zZXRD
b2RlTG9jYXRpb25zKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCi0gICAgICAgICAgICBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5k
b25lTG9jYXRpb24pKTsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIGluZm8gPSAqY29t
cGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBpbmZvLmRvbmVMb2Nh
dGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRp
b25JbmZvLmRvbmVMb2NhdGlvbik7CiAgICAgfQogCi0gICAgewotICAgICAgICBKSVRDb2RlTWFw
QnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2Rl
T2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0
KCkpCi0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+
KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY29kZUJs
b2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCkpOworICAgIEpJ
VENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOworICAgIGZvciAodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRl
Y29kZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0
KCkpCisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChi
eXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9s
YWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDI2ICs5ODIsMzcgQEAgdm9pZCBKSVQ6
OmxpbmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShtX2NvbXBpbGF0aW9uKSkgeworICAg
ICAgICAvLyBPT1BTOiBtYWtlIGJ5dGVjb2RlIHByb2ZpbGVyIGtub3cgYWJvdXQgdW5saW5rZWQg
Q0I/CiAgICAgICAgIGlmIChPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIo
KSkKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fY29tcGls
YXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsKLSAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2NvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOworICAg
ICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcHJvZmls
ZWRDb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCiAgICAgICAgIG1fcGNUb0NvZGVP
cmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpOwogICAgIAorICAgIC8vIE9PUFM6IE1h
a2UgYSB2ZXJzaW9uIG9mIENvZGVCbG9ja1dpdGhKSVRUeXBlIHRoYXQga25vd3MgYWJvdXQgVW5s
aW5rZWRDb2RlQmxvY2suCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBGSU5B
TElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAgICAgICAg
IkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlw
ZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAgICAgICAi
QmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAg
ICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hl
Y2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fYXJpdHlDaGVjayk7
Ci0gICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0
aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSk7CisgICAgbV9qaXRDb2RlID0gYWRv
cHRSZWYoKm5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaykpOworCisg
ICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBXVEZNb3ZlKG1fdW5saW5rZWRDYWxscyk7
CisgICAgbV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9zID0gV1RGTW92ZShtX2V2YWxDYWxs
TGlua0luZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3MgPSBXVEZNb3Zl
KG1fdW5saW5rZWRTdHViSW5mb3MpOworICAgIG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVz
ID0gV1RGTW92ZShtX3N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0Q29kZS0+bV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAg
IG1faml0Q29kZS0+bV9qaXRDb2RlTWFwID0gaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKTsK
KyAgICBtX2ppdENvZGUtPmFkb3B0TWF0aElDcyhtX21hdGhJQ3MpOworICAgIG1faml0Q29kZS0+
bV9jb25zdGFudFBvb2wgPSBXVEZNb3ZlKG1fY29uc3RhbnRQb29sKTsKIAogICAgIGlmIChKSVRJ
bnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBm
b3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1v
cnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5l
bmQoKS51bnRhZ2dlZFB0cigpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29k
ZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2VkQ29kZUJsb2NrLCByZXN1bHQuZXhl
Y3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxl
TWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBK
SVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxp
emVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTk2OCwyNSArMTAyMSwyMSBAQCBDb21w
aWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyCiAKICAgICBtX2xpbmtCdWZmZXIt
PnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCi0gICAgewotICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBtX2Nv
ZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVT
aHJpbmspOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2st
Pm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7Ci0gICAgICAgIEhhbmRsZXJJbmZv
JiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgIC8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgotICAgICAgICBoYW5kbGVyLm5hdGl2
ZUNvZGUgPSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5k
bGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7Ci0gICAgfQor
ICAgIC8vIE9PUFM6IERvbid0IHRoaW5rIHRoaXMgc2hyaW5rIGlzIHJlYWxseSBkb2luZyBhbnl0
aGluZyBhbnltb3JlLiBWZXJpZnkuCisgICAgLy97CisgICAgLy8gICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAvLyAgICBtX2NvZGVCbG9jay0+
c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwor
ICAgIC8vfQogCisgICAgLy8gT09QUzogbV9wY1RvQ29kZU9yaWdpbk1hcCBzaG91bGQgbGl2ZSBv
biBCYXNlbGluZUpJVENvZGUgZm9yIGJhc2VsaW5lIGNvZGVibG9ja3MuCiAgICAgaWYgKG1fcGNU
b0NvZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1h
cChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKKyAgICAgICAgbV9wcm9maWxlZENvZGVC
bG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKSk7
CiAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVK
SVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2ppdENvZGUtPnNpemUoKSkg
LwotICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNT
aXplKCkpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKIAotICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1f
aml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlu
a2VkQmFzZWxpbmVDb2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIHJldHVy
biBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CkBAIC05OTgsMTEgKzEwNDcsMTEgQEAgc2l6ZV90
IEpJVDo6Y29kZVNpemUoKSBjb25zdAogICAgIHJldHVybiBtX2xpbmtCdWZmZXItPnNpemUoKTsK
IH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKENv
ZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAg
ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgY29tcGlsZUFuZExp
bmtXaXRob3V0RmluYWxpemluZyhlZmZvcnQpOwotICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRo
cmVhZCgpOworICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZChjb2RlQmxvY2spOwogfQog
CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCkBAIC0xMDQyLDE4
ICsxMDkxLDI4IEBAIHZvaWQgSklUOjpkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUMKICAg
ICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKCptX3ZtLCAi
UHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24uIl9zKTsKIH0KIAotdW5zaWduZWQgSklUOjpm
cmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6
OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewog
ICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2Nh
bHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJz
KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSkp
OwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdpc3RlckNvdW50Rm9yRnJhbWVQb2ludGVyT2Zm
c2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAotaW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRG
b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGZyYW1lUmVnaXN0ZXJDb3Vu
dEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCitpbnQgSklUOjpzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBy
ZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVC
bG9jaykgLSAxKS5vZmZzZXQoKTsKIH0KIAoraW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBzdGFja1BvaW50ZXJPZmZzZXRG
b3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKwogSGFzaE1hcDxDU3RyaW5n
LCBTZWNvbmRzPiBKSVQ6OmNvbXBpbGVUaW1lU3RhdHMoKQogewogICAgIEhhc2hNYXA8Q1N0cmlu
ZywgU2Vjb25kcz4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lv
biAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw2ICszNyw3IEBACiAKICNkZWZpbmUgQVNTRVJUX0pJVF9PRkZTRVQoYWN0dWFs
LCBleHBlY3RlZCkgQVNTRVJUX1dJVEhfTUVTU0FHRShhY3R1YWwgPT0gZXhwZWN0ZWQsICJKSVQg
T2Zmc2V0IFwiJXNcIiBzaG91bGQgYmUgJWQsIG5vdCAlZC5cbiIsICNleHBlY3RlZCwgc3RhdGlj
X2Nhc3Q8aW50PihleHBlY3RlZCksIHN0YXRpY19jYXN0PGludD4oYWN0dWFsKSk7CiAKKyNpbmNs
dWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRl
ICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJKSVREaXNhc3NlbWJsZXIuaCIKQEAgLTQ0
LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJKSVRSaWdodFNo
aWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKKyNpbmNsdWRlICJM
TEludERhdGEuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlVu
dXNlZFBvaW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CkBAIC0xNDksMTQgKzE1
MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgc3RydWN0IENhbGxDb21waWxh
dGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhTdGFydDsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVMb2NhdGlvbjsKLSAgICAgICAgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm87CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1
bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBj
YWxsTGlua0luZm9Db25zdGFudDsKICAgICB9OwogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJl
dHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKLSAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJ
VCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1F
TlQgSklUIDogcHVibGljIEpTSW50ZXJmYWNlSklUIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJ
VFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogICAgICAg
ICBmcmllbmQgY2xhc3MgSklUVGh1bmtzOwpAQCAtMTcxLDYgKzE3Myw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBt
YXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCiAgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7CiAKKyAgICAgICAg
dXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgcHVibGljOgogICAgICAgICBKSVQo
Vk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0xNzgs
MjggKzE4MiwzMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVk0mIHZtKCkgeyByZXR1cm4g
KkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CiAKICAgICAgICAgdm9pZCBjb21waWxlQW5kTGlua1dp
dGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKLSAgICAgICAgQ29tcGlsYXRp
b25SZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1
bHQgZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKik7CiAgICAgICAgIHNpemVfdCBjb2Rl
U2l6ZSgpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZv
cmVDb21waWxlKCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQg
Y29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDAp
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVj
b2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJ
VCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoY29kZUJsb2Nr
LCBlZmZvcnQpOwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVn
aXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOworICAgICAgICBzdGF0aWMgaW50
IHN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogICAgICAgICBzdGF0
aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsKIAogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBjb21waWxlVGlt
ZVN0YXRzKCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTZWNvbmRzIHRvdGFs
Q29tcGlsZVRpbWUoKTsKIAorICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX21ldGFk
YXRhR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUjsKKyAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc19jb25zdGFudHNHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjpw
YkdQUjsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpOwogICAgICAgICB2b2lkIGxpbmsoKTsKLSAgICAg
ICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQp
OworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqLCBK
SVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBK
SVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5k
Q2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQpAQCAtMjIz
LDYgKzIzMiwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWRQdHJGcm9t
TWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkMzJGcm9t
TWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkOEZyb21N
ZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CisgICAg
ICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6
ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAg
ICAgICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0ZWNvZGUmLCBzaXpl
X3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAg
ICAgIHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwg
c2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBsb2Fk
Q29uc3RhbnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BSUmVnKTsKKyAgICBwcml2YXRlOgor
ICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2Fk
Q29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworCisgICAgICAgIHZv
aWQgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdU
MCk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5k
bGVyKTsKQEAgLTI1OCwxNiArMjkzLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6
OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJn
cyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgICYm
IE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExp
bmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxf
dmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAg
ICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lk
PiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
Y2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
ICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwo
Y29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0lu
ZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAg
IHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yODcsMTQgKzMyMiwxNSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBv
d25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAg
dm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcik7
CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMg
aW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3Jh
dGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwg
R1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgLy92b2lk
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAgICAgICAg
Ly92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3Mp
OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29k
ZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1Zh
bHVlUmVncyk7CkBAIC0zMDcsNiArMzQzLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwg
QXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklE
IGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJ
RCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAg
ICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYs
IHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwog
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBlY21hTW9k
ZShPcCk7CkBAIC01OTIsNyArNjMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
ICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjI2LDE0ICs2NjUs
MTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2Fz
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBi
b29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eU9yQnJhbmQsIEFjY2Vzc1R5cGUpOwotICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0SGFzUHJp
dmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5l
d0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFZh
ckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2
b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0
VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsK
KyAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNj
cmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MsIHVuc2lnbmVkIGRlcHRoKTsKICAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwog
I2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02NDUsNyArNjg0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAj
ZW5kaWYKICAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0
Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRl
clRvU2V0KTsKKyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBw
b2ludGVyVG9TZXQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVl
KiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKICAgICAg
ICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09m
T3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAg
ICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpAQCAtNjU0
LDYgKzY5Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRv
Q2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAg
ICAgICBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUg
Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVy
YW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRD
b25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY5NSwyNiArNzM1LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIg
fHwgcmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dF
TkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5l
cmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZS
T01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJB
VE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5l
cmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFt
ZSk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNv
bHZlU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIE1vZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5l
IHRoYW4gdXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVj
YXVzZSB3ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAg
ICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJl
c29sdmVUeXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JF
U09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNv
bHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShE
RUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9T
Q09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hh
ciogdGh1bmtOYW1lKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiwgc3RkOjpvcHRpb25h
bDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2Nv
cGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVu
a05hbWUpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1RydXRoeUdlbmVyYXRvcihW
TSYpOwpAQCAtNzU5LDEwICs3ODEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlv
bihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQo
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCk7CiAgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHQoQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7Ci0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRh
JiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICB2b2lk
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
TWV0YWRhdGEmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29u
c3QgQnl0ZWNvZGUmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQpOwogICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwg
dHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0
czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KQEAgLTgy
MCwyMCArODQyLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZz
ZXQpKTsKICAgICAgICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4g
QXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25U
eXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgT3BlcmF0aW9uVHlwZSBvcGVyYXRp
b24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgT3BlcmF0aW9uVHlw
ZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAg
ICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7
Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uLCByZXN1bHQpOworICAgICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICAgICAgfQogCi0g
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lIE1ldGFkYXRh
LCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25U
eXBlLCB0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjpl
bmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCB2b2lk
PgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBB
ZGRyZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBB
ZGRyZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAg
ICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50c0ZvckluZGlyZWN0Q2FsbDxPcGVyYXRp
b25UeXBlPih0YXJnZXQsIGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIEFk
ZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CisgICAg
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHRXaXRoUHJvZmlsZShieXRlY29kZSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJn
ZXQub2Zmc2V0KSwgcmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CkBAIC05MTgsMjUgKzk0MCwyMCBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBib29sIGNh
bkJlT3B0aW1pemVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZDsgfQotICAgICAgICBib29s
IGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZE9ySW5s
aW5lZDsgfQogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBtX3No
b3VsZEVtaXRQcm9maWxpbmc7IH0KICNlbHNlCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQo
KSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVk
KCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgLy8gRW5hYmxlcyB1c2Ugb2YgdmFsdWUgcHJv
ZmlsZXIgd2l0aCB0aWVyZWQgY29tcGlsYXRpb24gdHVybmVkIG9mZiwKICAgICAgICAgLy8gaW4g
d2hpY2ggY2FzZSBhbGwgY29kZSBnZXRzIHByb2ZpbGVkLgogICAgICAgICBib29sIHNob3VsZEVt
aXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBl
bWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOworCisgICAg
ICAgIHZvaWQgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworCiAgICAgICAgIHN0YXRpYyBib29s
IHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGls
ZVRpbWVzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB5b3UgbmVlZCB0byBjaGVjayBhIHZh
bHVlIGZyb20gdGhlIG1ldGFkYXRhIHRhYmxlIGFuZCB5b3UgbmVlZCBpdCB0bwotICAgICAgICAv
LyBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFzdCBhbmQgc2xvdyBwYXRoLCB0aGVuIHlvdSB3
YW50IHRvIHVzZSB0aGlzLgotICAgICAgICAvLyBJdCB3aWxsIGdpdmUgdGhlIHNsb3cgcGF0aCB0
aGUgc2FtZSB2YWx1ZSByZWFkIGJ5IHRoZSBmYXN0IHBhdGguCi0gICAgICAgIEdldFB1dEluZm8g
Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBCaW5hcnlPcD4KLSAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmls
ZShCaW5hcnlPcCk7CiAKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKQEAg
LTk2Myw5ICs5ODAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFNsb3dDYXNl
RW50cnk+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRj
aGVzOwogCi0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1
dEluZm9zOwotICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1f
Y29waWVkQXJpdGhQcm9maWxlczsKLQogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNr
czsKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJh
Y2s7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTk5LDExICsxMDEzLDI0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0aW9uKiwgVW5p
cXVlUmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVy
YXRpb25TdGF0ZTsKIAogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJv
b2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQ
cm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4OwogCi0gICAgICAgIFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgICAg
IENvZGVCbG9jayogbV9wcm9maWxlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVW5s
aW5rZWRDb2RlQmxvY2sqIG1fdW5saW5rZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisKKyAgICAg
ICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29k
ZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsK
KyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVjdENvbnN0YW50
IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAgICAgIEJhZzxV
bmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgICAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgICAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U2lt
cGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIEZpeGVkVmVjdG9yPFN0
cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAgICAgIHN0cnVj
dCBOb3RBQ29kZUJsb2NrIHsgfSBtX2NvZGVCbG9jazsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1
bWVudEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMzIwLDcgKzMyMSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdU
MSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIs
IHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihp
bnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7
CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCkBAIC01NzMsNyArNTc3LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KGNvbnN0IAogCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAg
IGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIyLDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlE
b3VibGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+dW5hcnlBcml0aFBy
b2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tX3Byb2ZpbGVJbmRleCk7
CisgICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9tYXRoSUNzLmFkZEpJVE5lZ0lDKGFyaXRoUHJv
ZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24s
IG5lZ2F0ZUlDKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhv
c2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0lu
dAogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7
CkBAIC04OTksOCArOTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0
cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRk
SUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEFkZD4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUQWRkSUMqIGFkZElDID0g
bV9tYXRoSUNzLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRv
TWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFz
dDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQpAQCAtOTQ1LDEwICs5NTAsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIGJvb2wgZ2VuZXJhdGVkSW5s
aW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CiAgICAgICAgIFVuYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxl
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVn
cyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAg
ICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBA
IC0xMDE1LDEwICsxMDIxLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlN
YXRoSUMKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAgICAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFBy
b2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFBy
b2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQ
cm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBh
ZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEw
NTUsMTMgKzEwNjIsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElD
PAogI2VuZGlmCiAKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0
aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJ
QykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNS
ZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVp
bnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBF
TkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAg
LTExMjAsMTMgKzExMjgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1h
dGhJQwogI2VuZGlmCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1h
dGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAg
aWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYg
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7Cisg
ICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAg
ICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJp
dHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdp
c2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwog
CiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVs
KCk7CkBAIC0xMTY2LDcgKzExNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxw
dHI7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOworICAgICAgICBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVC
bG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCku
bV9wcm9maWxlSW5kZXgpOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNv
ZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVy
YW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKQEAgLTEyMTEsOCArMTIyMCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAg
SklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVC
bG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCku
bV9wcm9maWxlSW5kZXgpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fbWF0aElDcy5hZGRKSVRN
dWxJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVu
dEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZh
bHVlTXVsKTsKIH0KQEAgLTEyMjcsOCArMTIzNiw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9t
dWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVFN1
YklDKiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwogICAgIG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAg
ZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
blZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BD
YWxsRXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwog
ICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6
OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwpAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQgSklUOjpj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKIAogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVn
VDEsIHJlZ1QwKTsKICAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUp
OwpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3Ry
dWN0aW8KICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKIAotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5r
ZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAog
ICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM0MSw3ICszNDEsNiBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgfQogCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKQEAgLTM1NCw3ICszNTMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKGNvbnN0IEluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBA
CiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIK
ICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmgiCiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRlICJTbG93UGF0
aENhbGwuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgpAQCAtNDQsNyArNDUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
KS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOwogfQogCkBAIC01MywxOCArNTQsMTggQEAgc3Rk
OjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9w
OjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9wOjpvcGNvZGVJRCAh
PSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHVuc2lnbmVk
IGNoZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGludCBhcmdDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwg
Y2hlY2twb2ludCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4o
c3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpKTsKIAor
CiAgICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihyZWdp
c3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApKSwg
cmVnVDApOwogICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwogICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDApOwotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBhcnJheVByb2ZpbGVGb3IobWV0YWRhdGEs
IGNoZWNrcG9pbnQpLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0
b3JlMzJUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CiAgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTc4LDcgKzc5LDcgQEAgc3RkOjplbmFi
bGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNv
ZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRl
Y29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3Rh
bnQpCiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50
czsKQEAgLTkxLDcgKzkyLDggQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0
ZWNvZAogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2Fy
ZEFyZ3VtZW50czsKICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25T
aXplRnJhbWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgLWZpcnN0RnJl
ZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
MCk7CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCByZWdUMCwgcmVnVDEsIC1maXJz
dEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0
aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCByZWdU
MSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTAxLDE0ICsxMDMsMTYgQEAgSklUOjpjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9
IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UKICAgICAgICAg
c2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3Bl
cmF0aW9uKHNldHVwT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9u
LCByZWdUMywgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50
IGNvdW50LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
KyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7Ci0gICAgSnVtcCBub3RCaWdnZXN0
ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMiwgaW5m
by0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7CisgICAgbG9hZENv
bnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpKSwgcmVnVDMpOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdU
MywgcmVnVDIpOworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5m
bzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CiAgICAgbm90Qmln
Z2VzdC5saW5rKHRoaXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgpAQCAtMTI3
LDE2ICsxMzEsMTYgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpCiB0ZW1w
bGF0ZTw+CiBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVj
b2RlKQogewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7
Ci0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFt
ZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVy
LCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7
CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25t
ZW50KCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwotCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5
dGVjb2RlKTsKIApAQCAtMTQ4LDcgKzE1Miw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5m
byogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9z
LmFkZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChD
YWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1i
eXRlY29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE2MCw0NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9m
ZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90
OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZp
cnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0
KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGls
ZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCi17Citib29sIEpJ
VDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNp
Z25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkgewogICAgIHJldHVybiBmYWxzZTsKIH0K
IAogdGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxs
JiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUs
IFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBD
YWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNz
ZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lz
dGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9j
YWxzID0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0
YS0+bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVt
UGFyYW1ldGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICBz
aHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rl
cjsKKyAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2
IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVm
ZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5h
cmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBieXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0K
KyAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVy
eTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAg
ICAgICBEYXRhRm9ybWF0SlMpOwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAg
ICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVm
ZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8t
PnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxs
ZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVm
ZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1wTGlzdCBzbG93
UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBD
YWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRD
b25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQ
YXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJl
Z1QwLCByZWdUMiwgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVm
ZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uo
c2xvd1BhdGhzKTsKKworICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8t
PmZyYW1lU2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9u
ZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIxOCwxNCAr
MjI2LDI1IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAg
ICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBD
YWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0g
ICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3Bf
Y2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVj
b2RlLCBpbmZvKTsKKworICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOwor
ICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgaW5mbyA9IG1fdW5s
aW5rZWRDYWxscy5hZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBl
Rm9yKG9wY29kZUlEKTsKKworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOworCisgICAgICAg
IEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4
KTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25J
bmZvKCkpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhd
LnVubGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFu
dDsKKyAgICB9CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7
CiAKICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICBhdXRvIGJ5dGVjb2RlSW5k
ZXggPSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7Ci0gICAgdWludDMy
X3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7Cisg
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQpKTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhv
bGRzIGNhbGxlZS4KQEAgLTIzNCwxNiArMjUzLDEyIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
KGNvbnN0IEluc3RydWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkg
PT0gY2FsbExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86
OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
by5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAgICBpZiAoY29t
cGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCisgICAgaWYg
KGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgsIGluZm9D
b25zdGFudCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGxvYWRDb25zdGFudChpbmZvQ29uc3Rh
bnQsIHJlZ1QyKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGF1
dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCBy
ZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAgICAgYXV0byBz
bG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCByZWdUMCwgcmVnVDIsIFsmXSB7CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKICAgICAgICAg
fSk7CkBAIC0yNTMsMTMgKzI2OCwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJ
bnN0cnVjdGlvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9
IGluZm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6WWVzKTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdERh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9uZUxvY2F0aW9u
ID0gbGFiZWwoKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRp
b247CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxp
Z25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0yNzMsMjAg
KzI4OCwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOwogCiAgICAgaWYg
KG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFy
YXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAg
ICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92
bSwgKnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKCptX3ZtLCAq
dGhpcywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVy
bkZyb21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpAQCAtMzk1LDE3ICs0MTAsMzAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogCiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwogICAgIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
c3R1YkluZm87CisKKyAgICBtb3ZlKHJlZ1QwLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
cmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BS
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlc3VsdEdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25leHQsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlz
KTsKIH0KQEAgLTQxNiwxMCArNDQ0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgaXRlcmF0
b3JHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgSnVtcExpc3Qgbm90
T2JqZWN0OwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9yR1BS
KSk7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckdQUikp
OwpAQCAtNDMyLDE5ICs0NTgsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29ucwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAg
Q2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJh
dG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBtb3Zl
KGl0ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0
eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50
R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZS
ZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogCiAg
ICAgYXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJ
dGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogCiAgICAgZG9uZS5saW5r
KHRoaXMpOwogfQpAQCAtNDUyLDcgKzQ3Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9uID0gKFsmXSAo
KSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKICAgICAgICAgY2Fz
ZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25hcnJvdzsKQEAgLTQ3MCw1
MCArNDkzLDc3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAg
ICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRpb25Nb2RlOjpH
ZW5lcmljKSkpOwogCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBvcjgoVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgQWJz
b2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2l0ZXJhdGlvbk1ldGFkYXRhLnNlZW5Nb2RlcykpOwor
ICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6
Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zm
c2V0T2ZTZWVuTW9kZXMoKSwgcmVnVDApOworICAgIG9yMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgcmVnVDApOworICAgIHN0b3Jl
OFRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9m
ZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0
T2ZTZWVuTW9kZXMoKSk7CiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1
Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9p
bnQoKTsKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2JqZWN0KSBpbiBy
ZWdUMAogCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGl0ZXJSZXN1
bHRHUFIgPSByZWdUMjsKLSAgICBHUFJSZWcgZG9uZUdQUiA9IHJlZ1QxOwotICAgIC8vIGl0ZXJS
ZXN1bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0IGJ5IGlkIGJlbG93Lgot
ICAgIG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnNjcmF0Y2g7CisgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIp
OwogCisgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQ7CiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
aXRlclJlc3VsdEdQUik7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5W
YWx1ZUdQUiA9PSBiYXNlR1BSKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUik7CiAKICAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVncyA9IFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJlc2VydmVkUmVn
cy5hZGQodmFsdWVHUFIpOworICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZChpdGVyQ2FsbFJlc3Vs
dEdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KSwgcHJlc2VydmVkUmVncywKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSks
IEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgcmVnVDMs
IEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIHByZXNlcnZlZFJlZ3MsCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHN0dWJJbmZvR1BS
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVn
cyB7IGRvbmVHUFIgfSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2tw
b2ludCgpOwogICAgIH0KIAotCiAgICAgewotICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MjsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CisgICAgICAgIFJlZ2lzdGVyU2V0
IHVzZWRSZWdpc3RlcnMoZG9uZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAgICAgICBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlv
bkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJy
YW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
Z2xvYmFsR1BSKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1vdmUoaXRl
ckNhbGxSZXN1bHRHUFIsIGJhc2VHUFIpOwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCByZWdUNCwgQWNjZXNzVHlwZTo6
R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMt
PnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7Cisg
ICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
ICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlc3VsdEdQUik7CiAK
ICAgICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwogICAgIH0KQEAgLTUyNyw1OSArNTc3
LDU1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChq
dW1wKCkpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgewogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVz
dWx0R1BSID0gcmVnVDI7CiAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAg
ICAgSnVtcExpc3Qgbm90T2JqZWN0OwotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElm
Tm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKGl0ZXJDYWxsUmVzdWx0R1BSKSk7CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKTsKICAgICAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAg
ICAgICAgCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOworICAg
ICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJDYWxsUmVzdWx0R1BS
KSk7CiAKLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwot
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhH
UFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0
aW9uKCkpLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUs
IGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotCi0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIHJlZ1QxKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxS
ZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LCBkb25lVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKKworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZG9uZVZSZWcsIGRvbmVHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90
T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAg
ICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjAp
OwogICAgIH0KIAogICAgIHsgICAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAg
ICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKICAgICAgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCk7CiAgICAgICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107
CiAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgQ2Fs
bCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIw
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCB2YWx1ZVZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0
ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFy
Z3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Cisg
ICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKICAg
ICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogCisKIG5h
bWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgREZHIHsKQEAgLTE1OSwxMCArMTYwLDEwIEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAg
ewotICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVz
ZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
Q2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKKyNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIApAQCAtNDYsMTAgKzQ3
LDkgQEAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBnYXJiYWdlU3R1YkluZgogSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQotICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAg
ICwgbV9qaXRUeXBlKGppdFR5cGUpCisgICAgOiBtX2ppdFR5cGUoaml0VHlwZSkKIHsKLSAgICBt
X3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNz
VHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKKyAgICBtX3N0dWJJbmZvID0g
Y29kZUJsb2NrID8gY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2lu
KSA6IGdhcmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNhbGxTaXRlSW5kZXggPSBj
YWxsU2l0ZTsKIAogICAgIG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJz
OwpAQCAtNTksNyArNTksNiBAQCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6
ZSgKICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgsIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCkKIHsKICAgICBtX3N0dWJJ
bmZvLT5zdGFydCA9IHN0YXJ0OwotCiAgICAgbV9zdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gZmFz
dFBhdGgubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihtX2RvbmUpOwogCiAgICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkKQEAgLTY3LDYgKzY2LDE1IEBAIHZvaWQgSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIG1fc3R1YkluZm8tPnNsb3dQYXRo
U3RhcnRMb2NhdGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KG1fc2xvd1BhdGhCZWdpbik7CiB9CiAKK3ZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6Omdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIG1fc3RhcnQgPSBq
aXQubGFiZWwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRU
eXBlKSk7CisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAg
IGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIG1f
ZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJh
dG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTEwLDcgKzEx
OCw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyBiYXNl
LCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUpCiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9y
aWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBz
dHViSW5mb0dQUikKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lLnVpZCgpID09
IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAgICwgbV9p
c0xlbmd0aEFjY2Vzcyhjb2RlQmxvY2sgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9j
ay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVO
QUJMRShKSVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0
aW9uVmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJK
U0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHV0S2luZC5oIgpAQCAtMzgsMTEgKzM5LDExNCBAQCBu
YW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXI7CiBjbGFzcyBDYWxsU2l0
ZUluZGV4OwogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklUOwogY2xhc3MgU3RydWN0dXJlU3R1
YkluZm87CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKIAogZW51bSBjbGFzcyBB
Y2Nlc3NUeXBlIDogaW50OF90OwogZW51bSBjbGFzcyBKSVRUeXBlIDogdWludDhfdDsKIAorc3Ry
dWN0IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKwor
c3RydWN0IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lRW51bWVyYXRvckdl
dEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJ
bmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86
OnJlZ1QyOworICAgIC8vIFdlIHJlbHkgb24gdGhpcyB3aGVuIGxpbmtpbmcgYSBDb2RlQmxvY2sg
YW5kIGluaXRpYWxpemluZyByZWdpc3RlcnMgZm9yIGEgR2V0QnlWYWwgU3R1YkluZm8uCisgICAg
c3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOwor
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHkpOworICAgIHN0YXRpY19hc3NlcnQocmVzdWx0ID09IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgc3RhdGljX2Fzc2VydChzdHViSW5mbyA9PSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbyk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5m
bzo6YXJndW1lbnRHUFIyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3RvID0gR1BS
SW5mbzo6YXJndW1lbnRHUFIzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gxID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMiA9IEdQUkluZm86Om5vbkFyZ0dQUjE7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZv
OjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnMgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyB0aGlzVmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5l
SW5CeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7Cit9OworCitzdHJ1Y3Qg
QmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBi
YXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUg
PSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBH
UFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGUgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3RydWN0
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YnJhbmQgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChicmFuZCA9PSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisKIGNsYXNzIEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
cigpIHsgfQpAQCAtNjIsMTUgKzE2NiwyMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZSgK
ICAgICAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93
UGF0aExpbmtCdWZmZXIsCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPiBzdGFydCk7Ci0gICAgCisKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9H
UFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogbV91bmxpbmtlZFN0dWJJbmZv
IHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKwogcHJvdGVjdGVk
OgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAg
ICAgU3RydWN0dXJlU3R1YkluZm8qIG1fc3R1YkluZm87CiAKK3B1YmxpYzoKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9kb25l
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Nsb3dQYXRoQmVnaW47Ci0gICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
bV9zbG93UGF0aENhbGw7IC8vIE9PUFM6IG1ha2UgcmVwb3J0Q2FsbCBwYXNzIHNvbWV0aGluZyBp
biB3ZSBjYW4gdXNlIGZvciB0aGUgbm9uLUNUSSB0aHVua3MgYnVpbGRzLiAKIH07CiAKIGNsYXNz
IEpJVEJ5SWRHZW5lcmF0b3IgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewpAQCAt
OTgsNyArMjA4LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBK
U1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7
CitwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0aEp1bXA7CiB9Owog
CkBAIC0xMzIsOCArMjQyLDggQEAgcHVibGljOgogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSA9
IGRlZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAotICAgICAgICBDb2RlQmxvY2sq
LCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYg
dXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFzZSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0
Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29k
ZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IENhY2hlYWJsZUlkZW50aWZpZXIsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVS
ZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwg
UHV0S2luZCk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVy
Jik7CiAgICAgCkBAIC0xNjMsMTEgKzI3Myw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJh
dGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpTVmFsdWVSZWdz
IG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93
UGF0aEp1bXA7CiB9OwogCkBAIC0xOTEsOCArMjk5LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBn
ZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1
bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yMTYsOCArMzIyLDYgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBh
dGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yNDEsOCArMzQ1LDYgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXBy
aXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yNzcsOCArMzc5
LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExp
bmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CiAKLXByaXZhdGU6Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBh
dGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMDIsMTEgKzQwMiw5IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
IAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV9y
ZXN1bHQ7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMzMCw4ICs0
MjgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjgy
MDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDEzICszNSwzOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykK
IHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVD
b25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09w
ZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Cit9CisKK0FM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciBzcmMpCit7
CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KSB7Cisg
ICAgICAgIC8vIE9PUFM6IGZpbmQgYSB3YXkgdG8gYXNzZXJ0IHRoYXQgYWxsIGxpbmsgdGltZSBj
b25zdGFudHMgYXJlIGNlbGxzLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzQ2VsbCgpOwogfQogCiBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
ICAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChzcmMpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0gU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVy
IGVudHJ5KQpAQCAtMTU2LDM2ICsxODEsMzYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeAogI2VuZGlmCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgot
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRh
LCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3Qp
CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVl
R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3Mo
cmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9yZShkc3QsIHJl
dHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCiAgICAgcmV0dXJuIGNhbGw7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBk
c3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KQogewogICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
dHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1Zh
bHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1
cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJu
VmFsdWVHUFIpOwogI2VuZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93
Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZp
cnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwo
cmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpCiAgICAgICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKIH0KIApAQCAtMjA1LDcgKzIzMCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhh
c0FueVNsb3dDYXNlcygKIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQo
KQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAg
ICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQo
KSArIDEpOwogCiAgICAgYXV0byByZXN1bHQgPSBtX2NoZWNrcG9pbnRMYWJlbHMuYWRkKG1fYnl0
ZWNvZGVJbmRleCwgbGFiZWwoKSk7CkBAIC0yMTUsNyArMjQwLDcgQEAgaW5saW5lIHZvaWQgSklU
OjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dU
b0hvdEZvckNoZWNrcG9pbnQoSnVtcCBqdW1wKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
bV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmlu
ZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNl
dCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBt
X2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwg
bV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byBpdGVyID0gbV9j
aGVja3BvaW50TGFiZWxzLmZpbmQobV9ieXRlY29kZUluZGV4KTsKQEAgLTI5MywyOSArMzE4LDM0
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRDb3VudChBYnN0cmEKIAogQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMp
CiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwo
KSktPmxlbmd0aCgpID09IDE7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCi17
Ci0gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7Ci0KLSAgICAvLyBXZSdyZSBpbiBh
IHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRv
IGEgZGlyZWN0Ci0gICAgLy8gc3RvcmUuCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdG9yZTY0
KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSNlbHNlCi0gICAgRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0gICAgc3RvcmUzMih2YWx1ZS5w
YXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7Ci0gICAgc3RvcmUzMih2
YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOwotI2VuZGlmCi19CisgICAg
aWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
dW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykg
PT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5n
KCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgo
KSA9PSAxOworfQorCisvLyBPT1BTCisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCisv
L3sKKy8vICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOworLy8KKy8vICAgIC8vIFdl
J3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2Fu
IGp1c3QgZG8gYSBkaXJlY3QKKy8vICAgIC8vIHN0b3JlLgorLy8jaWYgVVNFKEpTVkFMVUU2NCkK
Ky8vICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8j
ZWxzZQorLy8gICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJpdHdpc2Vf
Y2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Cisv
LyAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXls
b2FkKTsKKy8vICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMu
dGFnKTsKKy8vI2VuZGlmCisvL30KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBpbmxpbmUgc3Rk
OjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2Zp
bGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4gSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwog
I2Vsc2UKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKQEAgLTMyMywyNCAr
MzUzLDI1IEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWMKIAogaW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4p
IHsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWVSZWdzIHZhbHVl
KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2YWx1
ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOworICAgIHB0cmRpZmZfdCBvZmZzZXQg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVPZmZzZXRGb3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7Cisg
ICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBvZmZzZXQpKTsK
IH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyByZXN1bHRSZWcpCi17
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJl
c3VsdFJlZykpOwotfQorLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyByZXN1bHRSZWcpCisvL3sKKy8vICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRS
ZWcpKTsKKy8vfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEdQUlJlZyByZXN1
bHRSZWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEdQUlJlZyByZXN1
bHRSZWcpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJl
Z3MocmVzdWx0UmVnKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNW
YWx1ZVJlZ3MocmVzdWx0UmVnKSk7CiB9CiAjZW5kaWYKIApAQCAtMzYwLDYgKzM5MSwyMSBAQCBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXCiAgICAgfQogfQogCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHB0cmRpZmZfdCBvZmZz
ZXRPZkFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hH
UFIpCit7CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAgICBsb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHNjcmF0Y2hHUFIs
IGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmlsZSk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwg
UmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQoreworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
ICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2VsbEdQUiwg
c2NyYXRjaEdQUik7Cit9CisKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJldHVybiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CkBAIC0zODAsNyArNDI2LDcgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYg
KHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNv
bnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZElt
bVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxvYWRE
b3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTQyLDcgQEAgaW5saW5l
IHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxs
KHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTUyLDcgQEAgaW5saW5l
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklE
IHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAg
aWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQog
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0LDEx
ICs1NjAsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAgICAg
fQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0
dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU4NSwxNyBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1fYnl0
ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQu
CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1i
ZXIoKSkKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSkpLCBkc3QpOwotICAgICAgICBlbHNlCisgICAgICAgIHN3aXRjaCAobV91bmxpbmtlZENvZGVC
bG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkgeworICAgICAgICBj
YXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAgICAgY2FzZSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBt
b3ZlKEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvYWRDb2RlQmxv
Y2tDb25zdGFudChzcmMsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC01NjYsMTEgKzYxMyw2IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFu
dEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBS
ZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwpA
QCAtNTk1LDcgKzYzNyw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2UKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAoIW1fY29k
ZUJsb2NrLT5pc0tub3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHZSZWcpKQog
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAtNjM3LDMw
ICs2NzksNyBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7CiAg
ICAgaWYgKHRhcmdldCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4gbV9jb2Rl
QmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1BTFdBWVNfSU5M
SU5FIEdldFB1dEluZm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSBieXRlY29k
ZSkKLXsKLSAgICB1bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQgKyAxOyAvLyBI
YXNoTWFwIGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29w
aWVkR2V0UHV0SW5mb3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdl
dFB1dEluZm9zLmVuZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFs
dWUpOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2dldFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBn
ZXRQdXRJbmZvLm9wZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0aFByb2ZpbGUg
SklUOjpjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0gICAgdWludDY0
X3Qga2V5ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpICsgMSkg
PDwgMzIgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0YUlEKTsKLSAg
ICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5KTsKLSAgICBp
ZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAgICAgICByZXR1
cm4gaXRlcmF0b3ItPnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0aFByb2ZpbGUg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgbV9j
b3BpZWRBcml0aFByb2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJuIGFy
aXRoUHJvZmlsZTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVt
cE9mZnNldChpbnN0cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjgx
LDYgKzcwMCw2MSBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAg
ICAgcmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5
dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRhZGF0YShjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3Moc19tZXRhZGF0
YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0YWRhdGEoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQorewor
ICAgIGxvYWQ4KEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0
YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSB2YWx1
ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3Jl
OCh2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRh
ZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3Rv
cmUzMlRvTWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNp
emVfdCBvZmZzZXQpCit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BS
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sK
KyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCku
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHNfbWV0YWRhdGFHUFIs
IHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KGNvbnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQo
bV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BS
UmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkp
OworICAgIC8vIE9PUFM6IE1heWJlIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudD8KKyAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVzdWx0LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9y
QnVmZmVyKCkpLCByZXN1bHQpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlc3VsdCwgY29uc3RhbnQu
dG9Db25zdGFudEluZGV4KCkgKiBzaXplb2YoSlNWYWx1ZSkpLCByZXN1bHQpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyODIwMTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25z
dCBJbnN0cnVjdGlvCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JD
YXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJ
bW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNl
dCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihj
b2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hh
YmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC05OTcsNyArOTk3LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFi
bGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4K
ICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0
YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6
SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJs
ZSk7CiAKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFy
KGNvbnN0IEluc3QKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGlu
YXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRT
aW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxl
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
ICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29k
ZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxp
bmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDQyLDcgKzEw
NDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAg
ICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJ
bmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRU
YWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2
ICs0Myw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVmlydHVh
bFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFt
ZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTQsMTEgKzU2LDIyIEBAIHZv
aWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewot
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0g
ICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwotICAgICAg
ICBlbHNlCisgICAgICAgIC8vIE9PUFM6IG1vc3QgIk90aGVyIiBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24gY29uc3RhbnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQgZnJvbSB0aGUgVW5saW5rZWRDb2Rl
QmxvY2suIEl0J3MganVzdAorICAgICAgICAvLyBhIGNvdXBsZSB0eXBlcyB0aGF0IGNhbid0LiBD
cmVhdGUgYW4gYWJzdHJhY3Rpb24gZm9yIHRoYXQuCisKKyAgICAgICAgc3dpdGNoIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpKSB7Cisg
ICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICBj
YXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAg
ICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3Io
ZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDApOworICAgICAgICAg
ICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODcsMzcgKzEwMCwzNSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Q
cm9maWxlLnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxP
YmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAg
QWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8
SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpB
bGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwog
ICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3Jh
dGNoUmVnID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKIAot
ICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVs
c2UgewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5
ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Qo
cmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJl
ZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dD
YXNlcyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7
Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigp
LCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3
T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJlZyk7
CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVk
SW1tUHRyKG51bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklU
QWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVy
Zmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJl
UmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKKyAg
ICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKKyAg
ICBtdXRhdG9yRmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QpOworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdU
MzsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2Jq
ZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3Ry
dWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3
T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTEzMSw3ICsxNDIsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKICAgICAvLyBXZSBkb24ndCBq
dW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVt
cCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJ
bnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsK
KyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fZnVu
Y3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24pKSk7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CiAKQEAgLTE1NCwzMCArMTY2LDM4IEBA
IHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90
byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJh
c2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAg
ICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGgg
dGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBC
YXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvdG9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCB2YWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9HUFIp
OwogICAgIAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3Qg
YmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5o
YXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVl
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNl
T2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAg
ICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVn
VDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8v
IHByb3RvCi0gICAgICAgIHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNo
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IHJlc3VsdEdQUiwKKyAgICAgICAgdmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAgICAg
ICBzdHViSW5mb0dQUiwKKyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3Jh
dGNoMSwgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOwor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAg
CisKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCArMjEy
LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGlt
aXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZv
Ojpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25J
bnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwg
cmVnVDIsIHJlZ1QxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEp
OwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
c3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09IGFy
Z3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnZhbHVlID09IGFyZ3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRl
Y2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVn
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24q
KQpAQCAtMjQwLDcgKzI1OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmlu
ZWQoY28KIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWws
IHJlZ1QwLCByZWdUMSwgcmVnVDApOwogCkBAIC0zNzQsNyArMzkzLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOworICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRPZmZz
ZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0RnVu
Y3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwogI2Vsc2UKQEAgLTM4Myw5ICs0MDIsOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiB9CiAKICNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKQogewot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBqaXQuY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0Zv
cigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpOwpAQCAtNDExLDcgKzQzMCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShj
b25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQsOSArNDUyLDEwIEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZvaWQgSklUOjplbWl0
X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRG
dW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1
bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25h
bWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0ODQsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNGYWxzZXlHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzUwMSw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBi
ZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAg
IC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyArNTQwLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8vIEZpcnN0LCBoYW5k
bGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhl
IHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAg
IEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CiAKQEAgLTU0
Myw3ICs1NjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1CiAg
ICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVy
bywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAg
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTU4MiwxNSArNjAzLDEzIEBA
IHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KIHZvaWQgSklUOjplbWl0
X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEpTVmFsdWUgc3Bl
Y2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRl
cik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJ
bW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3Rh
bnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAgIENDYWxsSGVscGVyczo6
SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThU
b01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNvZGUsIE9wSm5lcVB0cjo6TWV0YWRhdGE6
Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwogICAg
IGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC02MjUsOCArNjQ0LDEwIEBAIHZvaWQgSklUOjplbWl0
X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVj
dEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1Zh
bHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAg
ICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
Z1QwKSwgdGFyZ2V0KTsKQEAgLTY0MCw3ICs2NjEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNjk1LDcgKzcxNiw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50
b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25U
aHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0
aW9uSGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTcxMSw3ICs3MzMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfdGhyb3dfaGFu
ZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1
bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB0aHJvd25WYWx1ZUdQUiA9IGFyZ3VtZW50
R1BSMTsKQEAgLTcyMCw3ICs3NDIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAg
ICBqaXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgYXJndW1lbnRHUFIwKTsKLSAgICBqaXQu
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKGFyZ3VtZW50
R1BSMCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKGFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFs
T2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwpAQCAtOTA4LDcgKzkzMCw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MTgs
NyArOTQxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCkBAIC05MzEsNyArOTU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVt
YmVyKGNvbnN0IEluc3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVy
KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk3NSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDAp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAo
c3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZS
ZWcpOwogfQpAQCAtOTc4LDcgKzEwMDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3Qo
Y29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNW
UmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7
CiB9CkBAIC05OTMsNyArMTAxNywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJ
bnN0cnVjdGlvCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRj
aE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgp
KSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2Rl
QmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gT09QUzogVGhpcyBpc24n
dCBlbGVnYW50LiBXaHkgYXJlbid0IHRoZXkgaW4gdGhlIGNhbGxlZSBzYXZlIGJ1ZmZlci4gSSBn
dWVzcyBiZWNhdXNlIHdlIGNhbiBPU1IgZXhpdCBoZXJlPworICAgIGVtaXRNYXRlcmlhbGl6ZU1l
dGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFi
bGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzgsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUg
cHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwotICAg
IGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJv
ZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9m
aWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JF
bnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25I
YW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVm
ZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2go
WyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAgICAg
ICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdzKTsK
LSAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBAIC0x
MDUzLDggKzEwNjgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3Ry
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwog
CiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNr
IHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5h
cHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9m
ZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVD
VElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5NiwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNj
cnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFi
bGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4K
LSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxl
SW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFy
YWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4LCB1
bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21p
bik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCkBA
IC0xMDk5LDIwICsxMTE1LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29u
c3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGlu
ZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNv
bnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
U3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRl
eCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykp
OwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJU
YWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVl
c3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVi
dWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9k
ZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0x
MTMzLDcgKzExNTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0
CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdU
MCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAg
LTExNDgsNyArMTE2Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1
Y3QKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25l
cV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTY2LDcg
KzExODMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAg
ICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwg
cmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTEx
ODgsMTIgKzEyMDUsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXpl
IG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRv
IGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBh
bmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9j
ay0+bnVtVmFycygpOworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51
bVZhcnMoKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9yIChzaXplX3Qg
aiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpOyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2Nr
KTsKKyAgICAKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAgZW1pdEVudGVy
T3B0aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCkBAIC0xMjEyLDcgKzEyMzEsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50
ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0
ZXJzOjplYnApOwpAQCAtMTMxMCwyMyArMTMyOSwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
c2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVj
dHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlw
ZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlE
LCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRvVGhpczo6TWV0
YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxK
U0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBS
ZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcg
PSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAtMTM0Miw3ICsx
MzU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxv
YWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90
eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBhbGxv
Y2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJl
RGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNoZWRGdW5jdGlv
biwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wQ3JlYXRlVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkQ2FsbGVlKCksIGNhY2hlZEZ1
bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIo
RXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRp
cGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFs
LCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxlQ2Fs
bGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzg3LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzk4LDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4o
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBy
ZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDAp
OwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFs
dWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0
dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDExLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEp
OwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQyMiw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1Qw
LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzNywxMSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNv
bnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
aGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlciho
YXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0
YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25z
dHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEds
b2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIz
KTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZh
bHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiB9CkBAIC0xNDMwLDcgKzE0NTAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVh
cmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50
c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV91
bmxpbmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1
cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0
aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCByZWdUMCk7CiAg
ICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCByZWdUMCwgVHJ1
c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkp
OwpAQCAtMTQ0MCw3ICsxNDYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0
IEluc3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRpZgotICAgICAg
ICBtb3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRSZWdzKTsKKyAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsxNDczLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAgLy8gRW1pdCB0
aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsK
KyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8sIFRy
dXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwK
LSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhl
Y3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAtMTUwOSw3ICsx
NTMwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1lbnRH
UFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTE1MjIsNyArMTU0NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9j
aGVja190cmFwcyhjb25zdCAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9jaGVja190cmFwc19oYW5kbGVy
R2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7
CkBAIC0xNTY0LDM0ICsxNTg2LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29u
c3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
cmVnZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBhcmd1bWVudEdQUjA7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29kZUJsb2NrLT5n
ZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVl
R1BSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmND
b21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKdW1w
IGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3Bl
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBh
cmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29w
ZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVu
dEdQUjEpOwogI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29k
ZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8g
Y29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5j
dGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRl
Y29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3Vt
ZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJh
dG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNf
ZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBk
c3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3lu
Y19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5
bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjIx
LDIzICsxNjQ1LDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7
CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7Cisg
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5k
aWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVu
Y3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByLCBi
aXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5j
dGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwog
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlE
ID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5
bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAg
LTE2NjQsMjkgKzE2ODksMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRv
cl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2Owog
ICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
dmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2Zp
bGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAg
ICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIyKTsKKyAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXpl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJh
eUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFy
cmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2Rl
LCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblBy
b2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAg
Jm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywgcmVnVDIsIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTQsOCArMTcyMCw5
IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CisgICAgLy8gT09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5r
ZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHR5cGUgcHJvZmlsZXIgaXMgZW5hYmxlZC4KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7
CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVM
b2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5t
X3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTc3NywyMCArMTgwNCwyNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25B
cmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJv
YmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRv
d1BhY2tldFJlZyA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7
IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2Ny
YXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNo
YWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1h
cmd1bWVudCByZWdpc3Rlci4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Cisg
ICAgICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBz
Y3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVC
bG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdU
MywgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAv
LyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxv
dyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6
IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVu
IHRoZSB1c2luZyB0aGUgY29udHJvbCBmbG93IHByb2ZpbGVyLgogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAg
QmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2lj
QmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlv
bi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsKQEAgLTE4NjAsNyArMTg5MSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmlu
ZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3
ICsxOTE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAg
IGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJl
Z3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBy
ZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ29kZUJs
b2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNs
dWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgpAQCAtMjg1NSw3ICsy
ODU2LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpT
VmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2Nr
LT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJs
b2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwog
ICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRk
cmVzcygpOwogCkBAIC0yODgwLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJ
bnQzMigpKQpAQCAtMjkwMyw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNl
bGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNT
dHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZh
bHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyODIwMTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
LCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1l
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVS
ZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDky
ICs0OSwxMDMgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlm
aWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMo
KSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAg
ICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1Qy
KTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVu
SWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50
aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VH
UFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJh
c2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3Jh
dGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVy
YXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9m
aWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2Rl
LCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5m
bygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHVi
SW5mb0dQUik7CisKKyAgICAgICAgLy8gT09QUy4gU3VwcG9ydCB0aGlzCisgICAgICAgIC8vaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAgICAgLy8gICAgZ2VuLnN0dWJJ
bmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgICAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+
CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5
dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGlm
IChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3Vt
ZW50R1BSMik7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNl
Ci0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICBBU1NFUlQoQnl0ZWNv
ZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9
PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNl
ZC4KLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwot
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGJh
c2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFy
ZzEgYXJnMSBhbHJlYWR5IHVzZWQuCisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0g
YXJndW1lbnRHUFIyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIHN0YXRpY19hc3Nl
cnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UgPT0gcmVnVDApOworICAgIHN0YXRpY19hc3NlcnQo
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkgPT0gcmVnVDEpOworCisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVU
eXBlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVy
blZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0x
NDksNyArMTYwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3Qg
YmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcv
RlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3Rz
LCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAg
ICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJu
QWRkcmVzcygpOwpAQCAtMTYwLDggKzE3MSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFy
Z3VtZW50R1BSNTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGlj
X2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0
aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKQEAgLTE4NywzNCArMTk4
LDQwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAg
ICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5m
b0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpHZXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewogICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKQEAgLTIyMyw5ICsyNDAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2
YXRlX25hbWUoYwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldFBy
aXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9u
R2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMjM1LDI2ICsyNTQsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2
YXRlX25hbWUoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3Vt
ZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9
PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsK
LSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMjY0LDcgKzI3Nyw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
QEAgLTMwMCwyMSArMzEzLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5k
KGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFBy
aXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwotICAgIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7CisKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRl
QnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIp
LCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0
dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3By
aXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQg
d3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIg
Y2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI0LDE3ICszNDQsMjIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hv
dWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9i
cmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKKwog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NH
ZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nl
c3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
YmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0zNDQsMjQgKzM2OSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
c2V0X3ByaXZhdGVfYnJhbmQoCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJh
bmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJh
c2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2
YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlw
ZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2
YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0
ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzcwLDE5
ICszODksMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjbwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCByZWdU
MSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YnJhbmQsIGJyYW5kR1BSKTsKKworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdU
Mik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQ
cml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1Yklu
Zm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2
YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIH0KIApAQCAtMzk0LDkgKzQyMiwxMSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
cmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6
ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTQwNiwyNCArNDM2LDE4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1
c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5k
OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRl
Y2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBl
cywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6
ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9k
aXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNSwzMCAr
NDU5LDQyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9m
aWxlKSwgcmVnVDMpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9m
aWxlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHByb2ZpbGVHUFIpOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0KTsKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQocHJvcGVydHkpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0g
dHJ1ZTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIsIHN0dWJJbmZvR1BSKTsKKyAgICAvLyBPT1BTOgorICAg
IC8vaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAvLyAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKworICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOworICAgIHN0dWJJbmZvLT5w
dXRLaW5kID0gc3RkOjppc19zYW1lX3Y8T3AsIE9wUHV0QnlWYWxEaXJlY3Q+ID8gUHV0S2luZDo6
RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVj
bWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQg
d3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTQ3NCwxNSArNTEwLDEyIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVj
bWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAg
ICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNt
YU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNDk4LDcg
KzUzMSwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBp
biB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIs
IGdlbi5zdHViSW5mbygpLCByZWdUMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQpOwor
ICAgIGlmIChpc0RpcmVjdCkKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRh
KGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSwgT3BQdXRCeVZhbERp
cmVjdDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7Cisg
ICAgZWxzZQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1
bWVudEdQUjQsIGFyZ3VtZW50R1BSNSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
CkBAIC01MTIsNyArNTU0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIENhbGwgY2Fs
bDsKICAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkg
PyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKTsKQEAgLTUyMyw3ICs1NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC01MzMs
MTggKzU3NSwyNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAg
ICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBi
ZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9G
VEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMs
IHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAg
IEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5B
ZGRyZXNzKCk7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q1
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb2Zp
bGVHUFIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICB7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWQoQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHksIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlLCBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpwcm9maWxlKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJl
Z1Q0KSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlucyhyZWdUNSkpOworICAgIH0KKwog
CiAgICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKQEAgLTU3MCwy
MCArNjE4LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwgSW52YWxp
ZEdQUlJlZywgcmVnVDQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0
eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIp
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
UHV0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPnByaXZhdGVGaWVsZFB1dEtpbmQgPSBieXRl
Y29kZS5tX3B1dEtpbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0
dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBw
ZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC01OTQsOCArNjUzLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7Ci0gICAg
UHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIFVO
VVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJbmRleCsrXTsKIApAQCAtNjAzLDEzICs2
NjEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBhdXRvIG9wZXJhdGlvbiA9IHB1
dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0
aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRo
ZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGdlbi5zdHViSW5mbygp
LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOworICAgIFByaXZhdGVGaWVsZFB1dEtp
bmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50
R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFI0KTsKKyAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJh
dGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZh
bFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudHNHUFIzLCBhcmd1bWVudEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNjIyLDE4ICs2ODQsMTIgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCkBAIC02NDMsMTQgKzY5OSwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
CiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
cmVnVDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0Owog
CkBAIC02ODAsNyArNzM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChj
b25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBy
ZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTY4OSw3ICs3NDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNv
bnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsK
ICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJl
Z1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTY5OSw3ICs3NTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3Nl
dHRlcl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJl
Z1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3NjgsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVz
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDMs
IHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNzE5LDcgKzc3OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFs
KGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJl
Z1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCBy
ZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3LDIzICs3ODgsMzMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lRGVs
QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZv
R1BSLCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9k
ZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJy
aWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyBy
ZWdpc3RlcnMuCkBAIC03NTksMTUgKzgzMCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERl
bEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRl
Y29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0
ZUJ5SWRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0
ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CkBAIC03ODEsMjQgKzg1NCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lk
KGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BS
MzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6
ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5
SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTgwOCw3ICs4NzYsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJv
dXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25n
aW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC04NDUsMjIgKzkxMywzMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFz
ZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxC
eVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlH
UFIsIHByb3BlcnR5KTsKKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEJhc2VsaW5l
RGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBK
U1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0
IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3Rl
cnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJy
aWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtODgzLDkgKzk2MiwxMSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVs
ZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUu
bV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBh
cmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3Vt
ZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0
aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50
R1BSMywgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtODk5LDI0ICs5ODAsMTkgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQ
UiA9IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZh
bHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVl
R1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKQEAgLTkyNiw3ICsxMDAyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQu
dGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtOTYxLDIyICsxMDM3LDMxIEBAIHZvaWQgSklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6
VHJ5R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdl
dEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
ICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
IH0KIApAQCAtOTg2LDE0ICsxMDcxLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0
X2J5X2lkKGNvbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dl
dEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRy
eUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwMDMsMjYgKzEwOTEsMjAgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogICAgIG1vdmUoSklUOjpU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBh
cmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNs
dHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAg
ICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDMwLDIyICsxMTEyLDMxIEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlw
ZTo6R2V0QnlJZERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGly
ZWN0KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkdldEJ5SWREaXJlY3Q7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcpOwogfQogCkBAIC0xMDU0LDE2ICsxMTQ1LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0Pigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFk
YXRhLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVn
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMTA3Myw4MyArMTE2Niw2MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJn
dW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1p
emUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGly
ZWN0T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRp
b25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNl
R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcp
OwogICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9k
ZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0
YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9k
ZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChyZWdUMCwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVBy
b2ZpbGUsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0
QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFk
YXRhOjpvZmZzZXRPZk1vZGUoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIEp1bXAgbm90QXJyYXlM
ZW5ndGhNb2RlID0gYnJhbmNoMzIoTm90RXF1YWwsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1
aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxl
bmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAg
ICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEs
IEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKLX0KKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVn
cywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogCi12b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7Ci0KLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlz
LmFwcGVuZChnZW4pOworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTE1OCwxNiArMTIyOSwxOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CkBAIC0xMTc3LDI2ICsxMjUwLDU3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogCi0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
c3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBl
bHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5
dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkV2l0
aFRoaXNSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0
aGlzR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZS
ZWcpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7
CisKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIHJlc3Vs
dFJlZ3MsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSwgc3R1Yklu
Zm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6R2V0QnlJZFdpdGhUaGlzOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJ
ZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
Zyk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyMDYsNyArMTMxMCw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
QEAgLTEyNDEsMTYgKzEzNDUsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93
aXRoX3RoaQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhU
aGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJ
bmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCBy
ZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgYXJndW1l
bnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlv
bkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xMjYwLDI4ICsxMzY3LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGkKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0
aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyOTEsNyArMTM5Miw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9u
cyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAog
ICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTEzMjksMjMg
KzE0MzAsMzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9
IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUg
dG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0
b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZl
IGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJh
dGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdh
eXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFs
dWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFz
ZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
YmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzdHVi
SW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3Qg
PyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0
QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6
IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShi
eXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRl
LWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsxNDc0LDE4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAgICAKICAgICBKSVRQ
dXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0
aW9uKCksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50
R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEzNzYsMjUgKzE0OTUsMTkgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlR1BS
ID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHBy
b3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
cHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
Z2VuLnNsb3dQYXRoRnVuY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRD
YWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQpAQCAtMTQwNCw3ICsxNTE3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdo
dCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhl
ciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAg
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAg
ICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTQ0MSwyMCArMTU1NCwzMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBy
ZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUlu
QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSk7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2lu
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQpAQCAtMTQ2MywxNCArMTU4NywxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5fYnlfaWQoY29uc3QgSW5zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNb
bV9pbkJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5C
eUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjA3LDIyIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Ig
d2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2lu
dCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJl
bnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRp
b25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2
YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkluQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUg
KzE2MzEsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwg
YmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVElu
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Oklu
QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NjYs
MTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9y
JiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BS
Myk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50
R1BSNCk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTU2LDU5ICsxNjg4
LDcwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdU
MTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFy
Z3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BS
ID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9m
aWxlR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHBy
b2ZpbGVHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRv
ciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBv
aW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZl
cmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJh
dGlvbkluQnlWYWxPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUp
Pjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZh
dGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5T3JCcmFuZCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5C
eVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRT
bG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5
cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gdHlwZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFw
cGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBl
IHR5cGUpCit2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5
cGUgdHlwZSkKIHsKLSAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgVU5VU0VEX1BB
UkFNKGJhc2UpOworICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7CisgICAgQVNTRVJUX1VOVVNF
RCh0eXBlLCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdl
biA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8g
b3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFu
ZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
YXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFz
UHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9u
SGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTE2MTgsMjcgKzE3NjEsMjEgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xv
dyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5T3JCcmFuZEdQUiA9
PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpLCBkZWNsdHlwZShv
cGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6
ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9u
YW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gdHlwZSA9
PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0
aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUg
PyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJy
YW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NTIsNyArMTc4OSw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKGMKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9k
c3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNsb3co
Ynl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSwgQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJp
dmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY2
NiwxOSArMTgwMywyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVfYnJhbmQo
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZUJyYW5kPigpOwotICAgIGVtaXRIYXNQcml2
YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAg
ICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0
ZWNvZGUubV9icmFuZCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQor
dm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0
Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQp
KSk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5q
ZWN0aW9uV2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4
KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFJl
c29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7Ci0gICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHJlZ1QwKTsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRlcHRoOyArK2kpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29w
ZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CkBAIC0xNjg4LDYgKzE4MjgsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNzAxLDcgKzE4NDIsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25z
dGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlw
ZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29w
ZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QxKTsKICAgICAgICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7CiAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNz
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRp
bmdFcG9jaCgpKSwgcmVnVDEpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25z
dGFudFNjb3BlKSwgcmVnVDApOwpAQCAtMTcxNSw3ICsxODU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNj
b3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9j
b2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0g
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwogICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzk0LDg3ICsx
OTM1LDEwNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fcmVzb2x2ZVR5cGU7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUg
PSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAg
ICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4
KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4
KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsK
IAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIC8vIElmIHdlIHByb2ZpbGUgY2VydGFpbiByZXNvbHZl
IHR5cGVzLCB3ZSdyZSBnYXVyYW50ZWVkIGFsbCBsaW5rZWQgY29kZSB3aWxsIGhhdmUgdGhlIHNh
bWUKKyAgICAvLyByZXNvbHZlIHR5cGUuCiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxl
VmFyKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJv
bm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9k
dWxlVmFyKSAKKyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZl
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVudCgpLCByZWdUMCk7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2Nr
LT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICAgICAgcHRyZGlmZl90IG1l
dGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1l
dGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0jZGVmaW5lIFJFU09MVkVfU0NPUEVfR0VORVJBVE9S
KHJlc29sdmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwK
LSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAg
ICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikK
KyAgICAgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAg
ICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJl
VmFyLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhciIpOwogICAgICAgICB9
OwotI3VuZGVmIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SCisKKyAgICAgICAgYXV0byBjbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAg
ICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyIpOworICAgICAgICB9OworCisgICAgICAg
IGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAg
ICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgc3RkOjpu
dWxsb3B0LCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgZ2VuZXJpYyIpOworICAgICAgICB9
OworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gY29kZTsKKyAgICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhcikKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0
b3IpOworICAgICAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIo
Y2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljUmVzb2x2ZVNjb3BlR2Vu
ZXJhdG9yKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogICAgIH0KIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BS
ZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVy
YXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+
IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5r
IGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQg
LyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KKworICAgIENDYWxsSGVscGVycyBqaXQ7CisKICAgICB1c2lu
ZyBNZXRhZGF0YSA9IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzY29wZUdQUiA9IHJlZ1Q2OyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBw
YXRoLgogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CiAgICAg
VU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVu
a0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5B
ZGRyZXNzKCk7CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMp
OwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdU
Myk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qg
c2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRH
UFJSZWcpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVn
KSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewog
ICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBn
bG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9i
YWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rp
b25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgo
RXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRy
dXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zhcklu
amVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0
LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBhdXRv
IGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykg
ewotICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mp
OwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRo
KSksIHJlZ1QxKTsKKyAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyk7CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAgIGpp
dC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7CiAKLSAgICAgICAgTGFiZWwgbG9vcCA9IGxhYmVs
KCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CisgICAg
ICAgIExhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgSnVtcCBkb25lID0gaml0LmJy
YW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICAgICAgICAgIGp1bXAoKS5s
aW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5zdWIz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1Rv
KGxvb3AsICZqaXQpOwogICAgICAgICB9Ci0gICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAg
ICAgZG9uZS5saW5rKCZqaXQpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewpAQCAtMTg4MiwxMiArMjA0MSwxMiBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkg
bG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSks
IGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIpOwotICAg
ICAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRh
ZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKLSAgICAgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RH
UFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSks
IHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxv
Y2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAg
ICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGlu
Z0Vwb2NoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zm
c2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAg
aml0Lm1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCkBAIC0xODk3LDExICsyMDU2LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZv
ckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZh
ciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
TGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAgICAg
ICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUg
PT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTE5MDksNyArMjA2OCw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3Vy
ZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
dW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBj
YXNlIE1vZHVsZVZhcjoKQEAgLTE5MTksODMgKzIwNzgsNDUgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJl
c29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5Lmxpbmso
dGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4
aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwg
KnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAg
ICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlz
dCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJv
cGVydHkubGluayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDApOwogCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgYXV0byBlbWl0Q2FzZSA9IFsmXSAoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGppdC5i
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAg
ICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOworICAgICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgIG5vdENhc2UubGluaygmaml0KTsKKyAgICAg
ICAgfTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgc2tpcFRv
RW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgZW1pdENhc2Uo
R2xvYmFsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBl
bWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1w
KCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAg
ICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCi0gICAg
cmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhp
cywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0
byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25M
YWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlv
bkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX1JF
U09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNH
ZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5r
SXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1
cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2Vu
ZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX3Jlc29s
dmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBF
KERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfUkVTT0xWRV9T
Q09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhl
IHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUg
TExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25z
IGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJl
bG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAg
Ly8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUgcmV0
dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwNjUsNiArMjE4Niw3IEBAIHZvaWQg
SklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0yMTc4LDcgKzIzMDAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yMTg2LDkgKzIzMDgsOSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNj
b3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0
cnVjdGlvbik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3Qs
IGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogI2Vsc2UgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yMTk2LDQxICsyMzE4LDUwIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBz
Y29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBt
ZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9m
aWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayku
bV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwog
ICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5k
ZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24p
OworCisgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAg
ICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIs
ICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAg
ICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZN
JiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmso
dm0sIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX2dldF9m
cm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0byBnZW5lcmljR2V0RnJv
bVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5l
cmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9n
ZXRfZnJvbV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
bWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVn
VDY7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCi0g
ICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRyX3QqIG9w
ZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVy
YW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZf
dCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1l
dGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZp
bmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9zY29w
ZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dl
bmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZ
UEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdFVF9GUk9N
X1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3Bl
R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQ
Uik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIp
OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQ
Uik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVy
YXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0KKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYgKHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdldENU
SVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgY29kZSA9
IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3Ip
OworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZyb21T
Y29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZy
b21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05h
bWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVz
b2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2Vu
ZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJh
c2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgpAQCAtMjIzOSw5OSArMjM3MCw4OCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6TWV0
YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVu
a0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5B
ZGRyZXNzKCk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIGppdC50YWdSZXR1cm5BZGRy
ZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BS
KTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFk
YXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFkYXRh
U3RydWN0dXJlT2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
bWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIs
IHJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVn
VDEpKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MSkpOworICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBz
Y29wZUdQUikgeworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPcEdl
dEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAg
ICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKICAgICB9OwogCi0gICAgYXV0
byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zh
ckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
YnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0
ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1Qz
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJl
Z1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKICAgICB9OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Qb2ludGVy
ID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihyZWcs
IHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIg
PSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywg
cmVnKTsKLSAgICB9OwotCiAgICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAoR1BSUmVn
IHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KDEg
PDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMy
KDMpLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50
OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1
c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmFkZFB0cihzY29wZUdQUiwg
b3BlcmFuZEdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CiAgICAgfTsK
IAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29s
IGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVyZSkp
OyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3Qg
Y2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0
aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVj
dGlvbi4KKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSKTsg
Ly8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNh
Y2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlv
bmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rp
b24uCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwogICAgICAg
ICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKICAgICAgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2ggPSByZWdUMjsKIAotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxK
dW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3Qo
KSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNl
LCByZWdUMyk7CisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZv
aWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVxdWFs
LCBiYXNlLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQp
KSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIG9mZnNldCk7CiAgICAgICAgICAgICBpZiAo
QVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJh
bmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9m
TGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJ
c05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsK
KyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJU
aGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsK
KyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZM
aW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAg
ICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxv
YWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5uZWczMihvZmZzZXQpOworICAgICAgICAg
ICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGpp
dC5sb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAg
ICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2Ug
R2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0
TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBv
aW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgZG9W
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9m
ZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAs
IHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFy
IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElm
RW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1
cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0g
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOworICAgICAgICAg
ICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFk
YXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsKICAgICAgICAgICAgIGVtaXRHZXRDbG9z
dXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpA
QCAtMjM0MSw4NiArMjQ2MSw2MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewot
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dl
dFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAg
ICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBp
c05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRv
RW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
KnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsK
KyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0
SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGpp
dC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5m
bygpKSwgcmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAg
ICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQ
cm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFs
c2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIs
IHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBq
aXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0
Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAgIEp1
bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5
ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGpp
dC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKCZq
aXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXIubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1w
KCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluaygm
aml0KTsKIAotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQorICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0
OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsK
KyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2Vy
dChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1Qw
LCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmls
ZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRh
dGE6Om9mZnNldE9mUHJvZmlsZSgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCku
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7
CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0
aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1Io
cmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0g
ICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2Nv
cGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJ
VCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcEdldEZyb21TY29wZVRo
dW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlXyIgI3Jlc29sdmVU
eXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQg
YnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUg
SklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQg
Z2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIg
Z2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lm
IENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjQ3MSw4
NiArMjU2OCw3OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB9
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklUOjplbWl0UHV0
R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
YXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBv
cGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1Zh
bHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVn
VDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZP
cGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9w
ZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAg
c3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZz
ZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KLQogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2Nv
cGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBH
ZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBT
dHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwot
ICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+
KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIFJl
c29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8gZW1p
dENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0
dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVj
dHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJl
c29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAg
ICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2Ug
ZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3Qu
CisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVj
a2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgp
LCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdU
MCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7
CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KSk7CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsK
IAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkg
LT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CisgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7CiAgICAgICAg
ICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRl
eChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Cisg
ICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMSwgVGltZXNF
aWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSk7CisgICAgICAgICAgICAvLyBPT1BTOiB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9u
IHRoYXQgdG9vayBHUFJSZWdzIGluc3RlYWQgb2YgVlJzCisgICAgICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2Fs
VmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAg
ICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgIGlm
ICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAo
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKyAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7
CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlm
ICghaXNJbml0aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25N
b2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0
IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAg
ICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAg
ICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoq
PihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpv
cGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwg
cmVnVDEpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEp
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5k
KQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9p
bnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxW
YXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRh
ZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25z
dGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2Fk
UHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZldhdGNocG9pbnRTZXQoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0
Y2hwb2ludChyZWdUMSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsK
KworICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0
aGF0IHRvb2sgYSBHUFJSZWcgZm9yIHZhbHVlLgorICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNl
IENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3Bl
LCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVn
VDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAgICAgICAgIGVt
aXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQmFzZUluZGV4
KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkpKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBo
YXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIG93bmVyL3ZhbHVlLgogICAgICAg
ICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTI1NjQsNTgg
KzI2NTQsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdl
dFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAK
LQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNh
bFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUg
dG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQubGluayh0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewor
ICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUgdGhpbmdzCisgICAg
Ly8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBp
cyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIsCisgICAgLy8gYWxs
IENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIKKyAgICAvLyBpZiB0aGUg
dmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhl
biB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hh
dCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlm
IChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikKKyAgICAgICAgZW1p
dENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBlbWl0Q29k
ZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZWxzZSB7CiAgICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dElu
Zm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOwogICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsK
KworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwor
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAK
ICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAgICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0Ogot
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKICAg
ICB9CiB9CiAKQEAgLTI2MjQsMTggKzI3MDgsMjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNv
bHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNv
bHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgaWYgKHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElmIGFueSBsaW5rZWQgQ29k
ZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENvZGVCbG9ja3MgYXJlIGd1
YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFyLgogICAgICAgICBKSVRT
bG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19w
YXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAg
ICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2UgewogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3Bl
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0
cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1bWVudEdQUjAsIGN1cnJl
bnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
ICAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5
dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIEFTU0VSVChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVu
dEluc3RydWN0aW9uKTsKIAogICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAgLTI2NTIsNyArMjczOSw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9u
cyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAog
ICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0
ZXJzOjplYnApOwpAQCAtMjcwMSw3ICsyNzg4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1l
bnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6
c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSks
IHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3NTks
NyArMjg0Niw2IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIHZv
aWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpAQCAtMjc2Nyw3ICsyODUz
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5k
ZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVn
VDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3ODksNyArMjg3NSw2IEBAIHRl
bXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3AKIHZvaWQgSklUOjplbWl0X29w
X2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRv
ck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAgLTI4MDUsNyArMjg5
MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKICAgICBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gbW9k
ZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBwcm9maWxlIGl0
IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CisgICAgaWYgKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVyYXRvck1ldGFkYXRh
ID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgewogICAgICAg
ICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNl
cy5hcHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKCh+SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSAmIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKQEAgLTI4NDcsNzggKzI5MzIsODcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5TmFtZSA9IGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lOwogICAgIFZpcnR1YWxSZWdpc3RlciBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IGRvbmVDYXNl
czsKIAotICAgIGF1dG8gcmVzdWx0R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHRHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxpbmVFbnVt
ZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDI7
CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5
VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG1vZGUsIHNjcmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
TmFtZSwgcHJvcGVydHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3MoJm1l
dGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9y
TWV0YWRhdGEoKSwgc2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAg
ICBzdG9yZThUb01ldGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlW
YWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChiYXNlR1BSKSk7CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2Rl
ZCB2YWx1ZS4KLSAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5k
ZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAg
SnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRj
aDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sg
dGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVn
VDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMyk7Ci0gICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVt
ZXJhdG9yLCBzY3JhdGNoMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0
Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAg
Ly8gQ29tcHV0ZSB0aGUgb2Zmc2V0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgs
IHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAg
ICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGlu
ZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5l
QWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkp
LCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2Fk
NjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAg
ICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIs
IEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSkpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3Jh
dGNoMik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdo
dCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBk
b25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2Yg
bGluZQogICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMy
KEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVu
ZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhz
Y3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9m
ZnNldCgpKSwgc2NyYXRjaDIpOworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5k
MzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZz
ZXRPZkZpcnN0UHJvcGVydHkgPSBvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNl
dCkgKiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAg
bG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQ
cm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3Jh
dGNoMiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAg
ICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5r
KHRoaXMpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1f
ZW51bWVyYXRvck1ldGFkYXRhKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJl
TWlzbWF0Y2gpLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5s
aW5rKHRoaXMpOwotICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkp
OworICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBU
cnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAg
IC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgcHJvcGVydHlHUFIpOwogCiAgICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNo
MSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWws
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjky
NywxMCArMzAyMSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8K
ICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVu
dW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNv
ZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2Vu
dW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUg
Z2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQ
YXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJ
bXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjkzOSw3ICszMDMyLDkgQEAgdm9pZCBKSVQ6OmVtaXRf
ZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJz
b2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVy
YXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3Rv
cmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRl
c3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAtMzAyOCw2ICszMTIzLDEzIEBAIHZvaWQgSklUOjpl
bWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBv
d25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJh
bmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNoR1BSKG93bmVyKSk7CisgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgp
LCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NTIs
NyArMTU1Miw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAog
dm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0g
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2Fs
bCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJh
d1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAgIHJldmVydENhbGwodm0sIGNhbGxM
aW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxK
SVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2lu
dC5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0
U2lkZVN0YXRlLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNv
bW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVy
cm9ySGFuZGxpbmdTY29wZS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4MjAx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxp
dHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBv
cGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBl
KQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBlbmQKLQog
ICAgICAgICBtZXRhZGF0YSh0MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAg
ICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBAIC0xMDIz
LDcgKzEwMTksNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAg
ICAgICAgICMgTWV0YWRhdGEgaW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRlZ2VyT3Bl
cmF0aW9uKHQyLCAuc2xvdykKICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2Nmciwg
dDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAg
ICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50
LCB0MSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4OSwyMiAr
MTA4NSwxOCBAQCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0
ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAKLSAgICBt
YWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRl
OjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1
XQotICAgIGVuZAotCiAgICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQsIHQw
KQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5l
cSB0MSwgSW50MzJUYWcsIC5vcE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZm
ZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFy
aXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJp
dGhQcm9maWxlSW50LCB0NSwgdDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdh
dGVTcmNOb3RJbnQ6CiAgICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4
b3JpIDB4ODAwMDAwMDAsIHQxCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51
bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxl
TnVtYmVyLCB0NSwgdDMpCiAgICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAg
LTExMTUsMTAgKzExMDcsNiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bj
b2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9w
ZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2Rl
U3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAg
ICAgICAgbWFjcm8gYXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmls
ZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCiAg
ICAgICAgIGdldChtX3JocywgdDIpCiAgICAgICAgIGdldChtX2xocywgdDApCkBAIC0xMTI2LDcg
KzExMTQsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAg
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAg
IGJpbmVxIHQyLCBJbnQzMlRhZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50MzJU
YWcsIC5vcDJOb3RJbnQKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkK
KyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9m
aWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVn
ZXJPcGVyYXRpb25BbmRTdG9yZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3Bh
dGNoKCkKQEAgLTExMzYsMTIgKzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShv
cGNvZGVOYW1lLCBvcAogICAgICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAgICAgICAg
YmliIHQzLCBMb3dlc3RUYWcsIC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAgICAgYmluZXEgdDMs
IEludDMyVGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVy
SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0
aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgICAg
ICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAgICAgICAg
ZmlpMmQgdDEsIHQzLCBmdDEKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJl
ck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
QXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJlYWR5Ogog
ICAgICAgICBnZXQobV9kc3QsIHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1
Myw3ICsxMTQxLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAog
ICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQg
b3BlcmFuZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAg
ICAgYmlhIHQzLCBMb3dlc3RUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFBy
b2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVT
dHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwg
ZnQwCiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJhdGlvbihm
dDEsIGZ0MCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5
KQpAQCAtNDQxLDggKzQ0MSwxMyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAg
ICAgICAgICAgICBtb3ZlIFBDLCBhMQogICAgICAgICAgICAgY0NhbGwyKF9sbGludF9sb29wX29z
cikKICAgICAgICAgICAgIGJ0cHogcjAsIC5yZWNvdmVyCi0KICAgICAgICAgICAgIG1vdmUgcjEs
IHNwCisKKyAgICAgICAgICAgICMgQmFzZWxpbmUgdXNlcyBMTEludCdzIFBCIHJlZ2lzdGVyIGZv
ciBpdHMgSklUIGNvbnN0YW50IHBvb2wuCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2Zy
XSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9qaXREYXRhW1BCXSwgUEIKKyAg
ICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6SklURGF0YTo6bV9qaXRDb25zdGFudFBvb2xbUEJd
LCBQQgorCiAgICAgICAgICAgICBpZiBBUk02NEUKICAgICAgICAgICAgICAgICBsZWFwIEpTQ0Nv
bmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4
cHIgR2F0ZTo6bG9vcE9TUkVudHJ5KSAqIFB0clNpemUsIGEyCiAgICAgICAgICAgICAgICAgam1w
IFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKQEAgLTEwNTYsMTAg
KzEwNjEsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1h
Y3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAg
ICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNy
byAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8g
dXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2Jp
dHNbdDJdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAg
IGxvYWRxIFtjZnIsIHQwLCA4XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpAQCAtMTA2
OSw3ICsxMDcwLDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgog
ICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51bWJlclRh
ZywgdDEKICAgICAgICAgc3RvcmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJp
dGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAgZGlzcGF0
Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMTM0LDExICsxMTM1LDYgQEAgZW5kKQogCiAKIGxsaW50
T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUo
dHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2Zp
bGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAgZ2V0KG1f
b3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCiAg
ICAgbWV0YWRhdGEodDEsIHQyKQpAQCAtMTE0NiwxMiArMTE0MiwxMiBAQCBsbGludE9wV2l0aE1l
dGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9w
TmVnYXRlU2xvdwogICAgIG5lZ2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAgIHVwZGF0
ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2Zp
bGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgIHJldHVybih0MykKIC5v
cE5lZ2F0ZU5vdEludDoKICAgICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNsb3cKICAg
ICB4b3JxIDB4ODAwMDAwMDAwMDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJp
dGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBB
cml0aFByb2ZpbGVOdW1iZXIsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0ZVNs
b3c6CkBAIC0xMTY0LDEwICsxMTYwLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNv
ZGVOYW1lLCBvcAogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNv
ZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQog
ICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0eXBlKQot
ICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFBy
b2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAg
ICAgICAgZ2V0KG1fcmhzLCB0MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCkBAIC0xMTc3LDcgKzExNjksNyBAQCBt
YWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdldChtX2Rz
dCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5zbG93LCB0
MikKIAotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwg
dDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTg3LDEwICsx
MTc5LDEwIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAg
ICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEK
ICAgICAgICAgZnEyZCB0MSwgZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVy
TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBB
cml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0MikKICAgICAgICAgam1wIC5vcDFOb3RJbnRS
ZWFkeQogICAgIC5vcDFOb3RJbnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxl
TnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0MikKICAgICAgICAgY2kyZHMgdDEsIGZ0MQog
ICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEyMDQsOSAr
MTE5Niw5IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKIAogICAg
IC5vcDJOb3RJbnQ6CiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGlu
dCwgdGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KLSAgICAgICAgZ2V0KG1fZHN0LCB0MikK
ICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBwcm9maWxlKEFyaXRo
UHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29k
ZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDIpCisgICAgICAgIGdldChtX2Rz
dCwgdDIpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQx
CiAgICAgICAgIGZxMmQgdDEsIGZ0MQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgyMDE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTU2LDYgKzI1NTYsMTcgQEAgbWFjcm8gbm90U3VwcG9ydGVkKCkKICAg
ICBlbmQKIGVuZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVj
dCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgVW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVv
cGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisg
ICAgb3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKwogLy8g
RklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0X1dJTiBjb25kaXRpb24gaGVyZSwg
c2luY2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUgZmFsc2Ugb24gV2luZG93cwogLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNgogaWYgV0VCQVNT
RU1CTFkgYW5kIG5vdCBYODZfNjRfV0lOCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShyZXZpc2lvbiAyODIwMTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDEwIEBAIHB1YmxpYzoKICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyKCkgPSBkZWZhdWx0OwogCiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlm
aWVyIGNyZWF0ZUZyb21DZWxsKEpTQ2VsbCogaWRlbnRpZmllcik7Ci0gICAgc3RhdGljIGlubGlu
ZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNo
ZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2Rl
QmxvY2sqLCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2Rl
QmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIGNvbnN0IElkZW50
aWZpZXImKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0
aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRp
YyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBDYWNoZWFibGVJZGVu
dGlmaWVyIGNyZWF0ZUZyb21SYXdCaXRzKHVpbnRwdHJfdCByYXdCaXRzKSB7IHJldHVybiBDYWNo
ZWFibGVJZGVudGlmaWVyKHJhd0JpdHMpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAko
cmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVh
YmxlSWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE0IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBl
KiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhjb2RlQmxvY2ssIGkuaW1wbCgpKTsKIH0KIAot
aW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Citpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxv
Y2stPmhhc0lkZW50aWZpZXIodWlkKSk7CiAgICAgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIo
dWlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBl
cy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlZFR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgiCiAKKyNpbmNsdWRlICJCYXNl
bGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJCeXRl
Y29kZUNhY2hlRXJyb3IuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBA
IEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklU
KQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRl
OjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7
Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmls
ZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJv
ZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3Vs
dC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9u
IDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVibGljOgogCiAgICAg
c3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9CiAgICAgc3RhdGlj
IGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAgc3RhdGljIGlubGlu
ZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsgfQorICAgIHN0
YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MzIsNiArNTMyLDcgQEAgYm9vbCBjYW5Vc2VXZWJB
c3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZURhdGFJQywgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDSW5PcHRpbWl6aW5nSklULCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNTaGFyaW5nLCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB1c2VCYXNlbGluZUpJVENvZGVTaGFy
aW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgLyogRmVhdHVyZSBGbGFn
cyAqL1wKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRF
eGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5Niw3ICszOTYsMTAgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0
aQogICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCiAgICAgICAgIGNvZGVCbG9j
ay0+dmFsaWRhdGUoKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQorICAgIFJlZlB0
cjxCYXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVC
bG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlOworICAgIGlmIChPcHRpb25zOjp1c2VCYXNl
bGluZUpJVENvZGVTaGFyaW5nKCkgJiYgYmFzZWxpbmVSZWYpCisgICAgICAgIGNvZGVCbG9jay0+
c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwo
KSk7CisgICAgZWxzZSBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKICAgICAgICAgc2V0dXBMTElu
dChjb2RlQmxvY2spOwogICAgIGVsc2UKICAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9CYWcuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDYgKzY2LDIwIEBAIHB1YmxpYzoKICAgICAgICAgb3RoZXIubV9oZWFk
ID0gbnVsbHB0cjsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEJhZyYg
b3BlcmF0b3I9KEJhZzxULCBVPiYmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHVud3JhcHBl
ZEhlYWQoKSA9PSBvdGhlci51bndyYXBwZWRIZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gKnRo
aXM7CisKKyAgICAgICAgQmFnIGRlc3Ryb3k7CisgICAgICAgIGRlc3Ryb3kubV9oZWFkID0gdW53
cmFwcGVkSGVhZCgpOworICAgICAgICBtX2hlYWQgPSBvdGhlci51bndyYXBwZWRIZWFkKCk7Cisg
ICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKwogICAgIH5CYWcoKQogICAgIHsKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkocmV2aXNpb24gMjgyMDE2KQorKysgVG9vbHMvU2NyaXB0
cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtNzcwLDE3ICs3NzAsMTgg
QEAgZW5kCiAKICMgRklYTUU6IG5lZWQgdG8gZml4IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTg3MDMgdG8gZW5hYmxlIHRoaXMgb24gTGludXgvTUlQUy4KIGRlZiBy
dW5CeXRlY29kZUNhY2hlSW1wbChvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMsICphZGRpdGlv
bmFsRW52KQotICAgIGlmICgkaG9zdE9TID09ICJkYXJ3aW4iKQotICAgICAgICBmaWxlVGVtcGxh
dGUgPSAiYnl0ZWNvZGUtY2FjaGUiCi0gICAgZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAk
YXJjaGl0ZWN0dXJlICE9ICJtaXBzIikKLSAgICAgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2Rl
LWNhY2hlWFhYWFhYIgotICAgIGVsc2UKLSAgICAgICAgc2tpcAotICAgICAgICByZXR1cm4KLSAg
ICBlbmQKKyAgICAjIE9PUFMKKyAgICAjaWYgKCRob3N0T1MgPT0gImRhcndpbiIpCisgICAgIyAg
ICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGUiCisgICAgI2Vsc2lmICgkaG9zdE9TID09
ICJsaW51eCIgJiYgJGFyY2hpdGVjdHVyZSAhPSAibWlwcyIpCisgICAgIyAgICBmaWxlVGVtcGxh
dGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhYWFgiCisgICAgI2Vsc2UKKyAgICAjICAgIHNraXAKKyAg
ICAjICAgIHJldHVybgorICAgICNlbmQKIAotICAgIG9wdGlvbnMgPSBCQVNFX09QVElPTlMgKyBG
VExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucyArICR0ZXN0U3BlY2lmaWNS
ZXF1aXJlZE9wdGlvbnMKLSAgICBhZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsic2gi
LCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIpLnRvX3Ms
IGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5kLCAkYmVuY2htYXJrLnRvX3NdICsgb3B0aW9u
cywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyLCAqYWRkaXRpb25hbEVu
dikKKyAgICAjb3B0aW9ucyA9IEJBU0VfT1BUSU9OUyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucworICAgICNh
ZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJi
eXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAq
dm1Db21tYW5kLCAkYmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxl
ciwgc2ltcGxlRXJyb3JIYW5kbGVyLCAqYWRkaXRpb25hbEVudikKIGVuZAogCiBkZWYgcnVuQnl0
ZWNvZGVDYWNoZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437331</attachid>
            <date>2021-09-03 18:09:55 -0700</date>
            <delta_ts>2021-09-07 14:54:49 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>433166</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODMyLDYgKzgzMiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjY4LDYgKzM2NjksOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjU4LDYgKzYyNjEsOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05Njk5LDYgKzk3MDQsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNjEz
MjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsOSArMjkwLDEwIEBAIG9wX2dyb3VwIDpQ
cm9maWxlZEJpbmFyeU9wLAogICAgICAgICBsaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAg
cmhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVz
LAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkCiAgICAgfSwKICAgICBtZXRhZGF0YTog
ewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0
aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9ncm91cCA6VmFsdWVQ
cm9maWxlZEJpbmFyeU9wLApAQCAtMzUxLDkgKzM1MiwxMCBAQCBvcF9ncm91cCA6VW5hcnlJblBs
YWNlUHJvZmlsZWRPcCwKICAgICBdLAogICAgIGFyZ3M6IHsKICAgICAgICAgc3JjRHN0OiBWaXJ0
dWFsUmVnaXN0ZXIsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlCisg
ICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3AgOnRv
X29iamVjdCwKQEAgLTM4NCw5ICszODYsMTAgQEAgb3AgOm5lZ2F0ZSwKICAgICAgICAgZHN0OiBW
aXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmQ6IFZpcnR1YWxSZWdpc3RlciwKICAgICAg
ICAgcmVzdWx0VHlwZTogUmVzdWx0VHlwZSwKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUsCisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgog
ICAgIH0KIAogb3AgOm5vdCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZp
c2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVP
cGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjggQEAg
VmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JJbXBsKEJ5dGVjbwogICAgICAgICByZXR1cm4g
Jm1ldGFkYXRhLm1fcHJvZmlsZTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
dWludHB0cl90IHZhbHVlUHJvZmlsZU9mZnNldEZvcih1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRleCk7CisgICAgaWYgY29uc3RleHBy
IChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3Jfb3BlbikgeworICAgICAgICBzd2l0
Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpzeW1i
b2xDYWxsOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmls
ZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNv
ZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiBj
b25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CisgICAg
ICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5l
eHQ6OmNvbXB1dGVOZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRS
ZXN1bHRQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJl
dHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRG9uZVByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIHJldHVybiBC
eXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpOworfQorCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZU1ldGFkYXRhPgogYm9vbCBoYXNWYWx1ZVByb2ZpbGVGb3IoQnl0ZWNvZGVN
ZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZp
c2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJ
bmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDExICsxMTQsNiBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7CiB9
CiAKLUNvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFz
dFBhdGhTdGFydCgpCi17Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0lu
dGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwotfQotCiBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKCFpc0RhdGFJQygpKTsKQEAgLTIyNSw2ICsyMjAsMTIgQEAgdm9pZCBDYWxs
TGlua0luZm86OnNldE1heEFyZ3VtZW50Q291bnRJbgogICAgIG1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSB2YWx1ZTsKIH0KIAorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChpc0RpcmVjdCgpICYmIGlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQpOwor
fQorCiB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRvIGhh
bmRsZVNwZWNpZmljQ2FsbGVlID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKQEAgLTI5OCwy
MyArMjk5LDExIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGMKICAg
ICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1
c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1Rh
aWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewotICAg
IHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7Ci0gICAgaWYgKGlzRGF0YUlDKCkpIHsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJl
Zyk7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwg
Y2FsbExpbmtJbmZvR1BSKTsKLSAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBj
YWxsTGlua0luZm9HUFI7Ci0gICAgfQotCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0Lmxh
YmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHNsb3dQYXRoOwogCi0gICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICBpZiAodXNl
RGF0YUlDID09IFVzZURhdGFJQzo6WWVzKSB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
aml0LnNjcmF0Y2hSZWdpc3RlcigpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7
IAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKQEAgLTMyMyw3ICsz
MTIsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAg
ICAgICBnb1BvbHltb3JwaGljID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25a
ZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5bW9ycGhpY0Nh
bGxlZU1hc2spKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsK
ICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgZ29Qb2x5bW9y
cGhpYy5saW5rKCZqaXQpOyAvLyBQb2x5bW9ycGhpYyBzdHViIGhhbmRsZXMgdGFpbCBjYWxsIHN0
YWNrIHByZXAuCiAgICAgICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Y2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkpLCBK
U0VudHJ5UHRyVGFnKTsKQEAgLTMzNiwxNCArMzI1LDE2IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQ
dHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVj
aywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKSk7CiAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAg
ICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwog
ICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAg
ICAgICAgICAgIHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT51LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51
LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNTMsMTMg
KzM0NCwzNCBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUMgdXNlRGF0YUlDKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwotICAg
IHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIs
IHVzZURhdGFJQywgbnVsbHB0cik7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKwor
ICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
b0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHUu
ZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKworICAg
IHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0lu
Zm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxG
YXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1Rh
aWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBj
YWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsK
KyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQ
YXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgVXNlRGF0YUlDOjpO
bywgaXNUYWlsQ2FsbCgpLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworfQorCitNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcp
OworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBj
YWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK01h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENh
bGwpKTsKIH0KIAogdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxs
SGVscGVycyYgaml0KQpAQCAtMzY5LDE3ICszODEsMzAgQEAgdm9pZCBDYWxsTGlua0luZm86OmVt
aXRTbG93UGF0aChWTSYgdm0sIAogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRy
eVB0clRhZyk7CiB9CiAKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0m
LCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBqaXQu
bW92ZShjYWxsTGlua0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVz
dGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5p
dGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxM
aW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAg
ICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2Rl
SW5kZXgpOworICAgIHNldFVwQ2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2Fs
bGVlR1BSKTsKKyAgICBtX2RvbmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVM
b2NhdGlvbjsKKyAgICBpZiAodW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkK
KyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxl
RGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpOyAvLyBPT1BTOiB0
aW1lIGZvciByZWYgY291bnRpbmc/CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMp
OworICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAg
IHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dl
bmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2
b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJ
Q3MoVXNlRGF0YUlDOjpObyk7CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwo
KTsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjIsNyBA
QCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZh
c3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAg
dS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBu
b3QgeWV0IGxpbmtlZCwgdGhpcyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9u
IDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVu
dW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAor
c3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJs
aWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVu
dW0gQ2FsbFR5cGUgeworICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9u
ZSwKICAgICAgICAgQ2FsbCwKICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDgg
QEAgcHVibGljOgogICAgICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAg
ICB2b2lkIGluaXRpYWxpemVEYXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxl
ZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFz
cyBVc2VEYXRhSUMgOiB1aW50OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAg
ICB9OwogCiBwcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBh
dGhJbXBsKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2Fs
bCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWls
Q2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVT
RURfUkVUVVJOOwogcHVibGljOgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVy
cyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVT
RURfUkVUVVJOOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0
UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZv
R1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRh
aWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAg
IHZvaWQgZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERp
cmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
IHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhl
bHBlcnMmKTsKKyAgICBzdGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhl
bHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0
dWIoKTsKIAogICAgIGJvb2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxV
c2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIx
MCw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0g
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwog
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsK
IApAQCAtMjQzLDExICsyNDksNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxs
cHRyOwogICAgIH0KIAotICAgIEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAg
ICAgICByZXR1cm4gbV9zbG93U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNl
KCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4
LDkgKzMwOSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBl
PihtX2NhbGxUeXBlKTsKICAgICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ2FsbExpbmtJbmZvLCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9
CiAKICAgICB1aW50MzJfdCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEs
NyArMzgyLDkgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsK
ICAgICB1bmlvbiBVbmlvblR5cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2Nh
dGlvbjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRy
VGFnPiBtX2NhbGxlZUxvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gbV9zbG93UGF0aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJ
QzsKICAgICB9IHU7CiAKQEAgLTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0
Q2FsbExpbmtJbmZvQ29kZU9yaQogICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigp
OwogfQogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleDsgLy8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRo
aXMgY2FuIHRyaXZpYWxseSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86
OkNhbGxUeXBlIGNhbGxUeXBlOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IGRvbmVMb2NhdGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURh
dGE+IGZyYW1lU2h1ZmZsZURhdGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MCw3ICszNzAsOCBA
QCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAvLyB3ZSBjYW4ndCBn
ZW5lcmF0ZSBkdXJpbmcgdW5saW5rZWQgYnl0ZWNvZGUgZ2VuZXJhdGlvbi4gVGhpcyBwcm9jZXNz
IGlzIG5vdCBhbGxvd2VkIHRvIGdlbmVyYXRlIGNvbnRyb2wKIC8vIGZsb3cgb3IgaW50cm9kdWNl
IG5ldyBsb2NhbHMuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgd2UgcmVseSBvbiBsaXZlbmVzcyBh
bmFseXNpcyB0byBiZSB0aGUgc2FtZSBmb3IKIC8vIGFsbCB0aGUgQ29kZUJsb2NrcyBvZiBhbiBV
bmxpbmtlZENvZGVCbG9jay4gV2UgcmVseSBvbiB0aGlzIGZhY3QgYnkgY2FjaGluZyB0aGUgbGl2
ZW5lc3MgYW5hbHlzaXMKLS8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4KKy8vIGluc2lkZSBV
bmxpbmtlZENvZGVCbG9jay4gQWxzbywgQmFzZWxpbmUgSklUIGNvZGUgaXMgc2hhcmVkIGJldHdl
ZW4gYWxsIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5rZWRDb2RlQmxvY2ssCisvLyBzbyB0aGUgYnl0
ZWNvZGUgbXVzdCByZW1haW4gdGhlIHNhbWUgYmV0d2VlbiBDb2RlQmxvY2tzIHNoYXJpbmcgYW4g
VW5saW5rZWRDb2RlQmxvY2suCiBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1
bmxpbmtlZENvZGVCbG9jaywKICAgICBKU1Njb3BlKiBzY29wZSkKIHsKQEAgLTQ2Niw2ICs0Njcs
MTkgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBi
cmVhazsgXAogICAgIH0KIAorI2RlZmluZSBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUo
X19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRB
KF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENv
ZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAg
ICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRD
b2RlLT51bmFyeUFyaXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAg
ICAgYnJlYWs7IFwKKyAgICB9CisKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1
Y3Rpb25TdHJlYW0gPSBpbnN0cnVjdGlvbnMoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3Ry
dWN0aW9uIDogaW5zdHJ1Y3Rpb25TdHJlYW0pIHsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQg
PSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKQEAgLTUyOCwxNCArNTQyLDE0IEBAIGJvb2wgQ29k
ZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgTElOSyhPcENyZWF0ZVBy
b21pc2UpCiAgICAgICAgIExJTksoT3BDcmVhdGVHZW5lcmF0b3IpCiAKLSAgICAgICAgTElOSyhP
cEFkZCkKLSAgICAgICAgTElOSyhPcE11bCkKLSAgICAgICAgTElOSyhPcERpdikKLSAgICAgICAg
TElOSyhPcFN1YikKLQotICAgICAgICBMSU5LKE9wTmVnYXRlKQotICAgICAgICBMSU5LKE9wSW5j
KQotICAgICAgICBMSU5LKE9wRGVjKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BS
T0ZJTEUoT3BBZGQpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcE11
bCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wRGl2KQorICAgICAg
ICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BTdWIpCisKKyAgICAgICAgTElOS19X
SVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BOZWdhdGUpCisgICAgICAgIExJTktfV0lUSF9VTkFS
WV9BUklUSF9QUk9GSUxFKE9wSW5jKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJP
RklMRShPcERlYykKIAogICAgICAgICBMSU5LKE9wSm5lcVB0cikKIApAQCAtNzg5LDYgKzgwMyw3
NiBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb25Db21tb24oVk0mCiAgICAgbV9vd25l
ckVkZ2Uuc2V0KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpjcmVhdGUodm0s
IHRoaXMpKTsKIH0KIAordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVD
b2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7CisgICAgc2V0SklUQ29kZShqaXRD
b2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8mIGppdENvZGVNYXAg
PSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAgICAgICAgIEhhbmRsZXJJbmZv
JiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiA8
cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAgaGFuZGxlci5uYXRpdmVDb2Rl
ID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQpKS5yZXRhZ2dl
ZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9CisgICAgfQorCisgICAgewor
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIGF1dG8m
IGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOworICAgICAgICBqaXREYXRh
Lm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGppdENvZGUtPm1fY29uc3Rh
bnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaml0Q29kZS0+
bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gZW50cnkgPSBq
aXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAgICAgIHN3aXRjaCAoZW50cnku
dHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9i
amVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gbV9n
bG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7CisgICAgICAgICAgICAg
ICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvID0gKnN0YXRpY19j
YXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9hZCk7CisgICAgICAgICAgICAg
ICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXREYXRhLm1fY2FsbExpbmtJbmZvcy5h
ZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAg
ICAgICAgICAgICAgLy8gT09QUzogZG9uJ3QgaGFyZGNvZGUgdGhlc2UgcmVnaXN0ZXJzIGxpa2Ug
dGhpcy4KKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmluaXRpYWxpemVEYXRhSUModm0o
KSwgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMik7
CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGNhbGxMaW5r
SW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbzogeworICAgICAg
ICAgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8gPSAq
c3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyo+KGVudHJ5LnBheWxvYWQpOwor
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGppdERhdGEubV9z
dHViSW5mb3MuYWRkKHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZSwgQ29kZU9yaWdpbih1bmxp
bmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+
aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKHRoaXMsIHVubGlua2VkU3R1
YkluZm8pOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBz
dHViSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6IHsKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBh
eWxvYWQpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBm
dW5jdGlvbkRlY2woaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwcjog
eworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oZW50cnkucGF5bG9hZCk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50
UG9vbFtpXSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0
Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIEdsb2JhbENvZGU6CisgICAgY2FzZSBNb2R1bGVD
b2RlOgorICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRnVuY3Rpb25Db2RlOgorICAgICAg
ICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0
ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCisgICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRo
YXQgb2JzZXJ2YXRpb24uCisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklu
bGluZShjYXBhYmlsaXR5TGV2ZWwoKSkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKHRoaXMp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3Vu
bGlua2VkQmFzZWxpbmVDb2RlID0gV1RGTW92ZShqaXRDb2RlKTsKK30KKwogQ29kZUJsb2NrOjp+
Q29kZUJsb2NrKCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTE1MTksMzkgKzE2MDMsNDAg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogCiAgICAgdXBkYXRl
QWxsUHJlZGljdGlvbnMoKTsKIAotI2lmIEVOQUJMRShKSVQpCi0gICAgYm9vbCBpc0VsaWdpYmxl
Rm9yTExJbnREb3duZ3JhZGUgPSBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZTsKLSAgICBt
X2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IGZhbHNlOwotICAgIC8vIElmIEJhc2VsaW5l
SklUIGNvZGUgaXMgbm90IGV4ZWN1dGluZywgYW5kIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCBl
eGlzdHMsIHdlIGF0dGVtcHQKLSAgICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFu
ZCByZWluc3RhbGwgTExJbnQgY29kZSB0byBzYXZlIEpJVCBtZW1vcnkuCi0gICAgaWYgKE9wdGlv
bnM6OnVzZUxMSW50KCkgJiYgIW1faGFzTGlua2VkT1NSRXhpdCAmJiBqaXRUeXBlKCkgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQgJiYgIW1fdm0tPmhlYXAuY29kZUJsb2NrU2V0KCkuaXNDdXJyZW50
bHlFeGVjdXRpbmcodGhpcykpIHsKLSAgICAgICAgaWYgKENvZGVCbG9jayogb3B0aW1pemVkQ29k
ZUJsb2NrID0gb3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKCFvcHRp
bWl6ZWRDb2RlQmxvY2stPm1fb3NyRXhpdENvdW50ZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAo
aXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0
Q29kZSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRyeXBvaW50
KHRoaXMpOwotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkgPT0g
SklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVy
cygpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxl
ckluZm8mIHVubGlua2VkSGFuZGxlciA9IG1fdW5saW5rZWRDb2RlLT5leGNlcHRpb25IYW5kbGVy
KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX3Jh
cmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVyLnRh
cmdldCkucHRyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUo
dW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFn
PihMTEludDo6aGFuZGxlQ2F0Y2goaW5zdHJ1Y3Rpb24ud2lkdGgoKSkuY29kZSgpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB1bmxpbmtJbmNvbWluZ0Nh
bGxzKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGNsZWFyIHRoZXNl
IG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxpemVVbmNvbmRpdGlvbmFsbHkgYWxsIGNvbXBpbGVy
IHRocmVhZHMKLSAgICAgICAgICAgICAgICAgICAgLy8gYXJlIHNhZmVwb2ludGVkLCBtZWFuaW5n
IHRoZXkncmUgcnVubmluZyBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIGJ5dGVjb2RlIHBhcnNlciwg
YW5kIGJ5dGVjb2RlCi0gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlciBpcyB0aGUgb25seSBk
YXRhIHN0cnVjdHVyZSBwb2ludGluZyBpbnRvIHRoZSB2YXJpb3VzICppbmZvcy4KLSAgICAgICAg
ICAgICAgICAgICAgcmVzZXRKSVREYXRhKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotI2VuZGlmCisvLyBPT1BTOiByZWNvbmNp
bGUgdGhpcworLy8jaWYgRU5BQkxFKEpJVCkKKy8vICAgIGJvb2wgaXNFbGlnaWJsZUZvckxMSW50
RG93bmdyYWRlID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGU7CisvLyAgICBtX2lzRWxp
Z2libGVGb3JMTEludERvd25ncmFkZSA9IGZhbHNlOworLy8gICAgLy8gSWYgQmFzZWxpbmVKSVQg
Y29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0
cywgd2UgYXR0ZW1wdAorLy8gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGluZSBKSVQgY29kZSBhbmQg
cmVpbnN0YWxsIExMSW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5LgorLy8gICAgaWYgKE9wdGlv
bnM6OnVzZUxMSW50KCkgJiYgIW1faGFzTGlua2VkT1NSRXhpdCAmJiBqaXRUeXBlKCkgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQgJiYgIW1fdm0tPmhlYXAuY29kZUJsb2NrU2V0KCkuaXNDdXJyZW50
bHlFeGVjdXRpbmcodGhpcykpIHsKKy8vICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRD
b2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisvLyAgICAgICAgICAgIGlmICgh
b3B0aW1pemVkQ29kZUJsb2NrLT5tX29zckV4aXRDb3VudGVyKSB7CisvLyAgICAgICAgICAgICAg
ICBpZiAoaXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlKSB7CisvLyAgICAgICAgICAgICAgICAg
ICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKKy8vICAgICAgICAgICAgICAgICAgICBMTEludDo6c2V0
RW50cnlwb2ludCh0aGlzKTsKKy8vICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChq
aXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7CisvLworLy8gICAgICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxpbmtlZENvZGUtPm51bWJlck9m
RXhjZXB0aW9uSGFuZGxlcnMoKTsgaSsrKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IG1fdW5saW5rZWRDb2Rl
LT5leGNlcHRpb25IYW5kbGVyKGkpOworLy8gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVy
SW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07CisvLyAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9ucygp
LmF0KHVubGlua2VkSGFuZGxlci50YXJnZXQpLnB0cigpOworLy8gICAgICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJl
bDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihMTEludDo6aGFuZGxlQ2F0Y2goaW5zdHJ1Y3Rpb24u
d2lkdGgoKSkuY29kZSgpKSk7CisvLyAgICAgICAgICAgICAgICAgICAgfQorLy8KKy8vICAgICAg
ICAgICAgICAgICAgICB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisvLworLy8gICAgICAgICAgICAg
ICAgICAgIC8vIEl0J3Mgc2FmZSB0byBjbGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGluIGZp
bmFsaXplVW5jb25kaXRpb25hbGx5IGFsbCBjb21waWxlciB0aHJlYWRzCisvLyAgICAgICAgICAg
ICAgICAgICAgLy8gYXJlIHNhZmVwb2ludGVkLCBtZWFuaW5nIHRoZXkncmUgcnVubmluZyBlaXRo
ZXIgYmVmb3JlIG9yIGFmdGVyIGJ5dGVjb2RlIHBhcnNlciwgYW5kIGJ5dGVjb2RlCisvLyAgICAg
ICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50
aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgorLy8gICAgICAgICAgICAgICAgICAgIHJlc2V0
SklURGF0YSgpOworLy8gICAgICAgICAgICAgICAgfSBlbHNlCisvLyAgICAgICAgICAgICAgICAg
ICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOworLy8gICAgICAgICAgICB9
CisvLyAgICAgICAgfQorLy8gICAgfQorLy8KKy8vI2VuZGlmCiAgICAgCiAgICAgaWYgKEpJVENv
ZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKQogICAgICAgICBmaW5hbGl6ZUxMSW50
SW5saW5lQ2FjaGVzKCk7CkBAIC0zMDc5LDcgKzMxNjQsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6
OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlw
ZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZv
cih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMt
PnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKQEAgLTMyOTUsMTMgKzMzODAsMTMgQEAgQmluYXJ5QXJpdGhQcm9maWxlKiBD
b2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAg
ICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEo
dGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9tdWw6Ci0gICAgICAgIHJl
dHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAg
ICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RpdjoKLSAgICAg
ICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzMxMywxMSAr
MzM5OCwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAg
ICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAg
ICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BJ
bmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+
YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9k
ZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJp
dGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMp
Lm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTM0OTEsNiArMzU3NiwxMSBAQCB2b2lkIENvZGVCbG9jazo6aml0U29vbigpCiAgICAgbV9sbGlu
dEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6
dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpqaXRO
ZXh0SW52b2NhdGlvbigpCit7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVz
aG9sZCgwLCB0aGlzKTsKK30KKwogYm9vbCBDb2RlQmxvY2s6Omhhc0luc3RhbGxlZFZNVHJhcEJy
ZWFrcG9pbnRzKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoU0lHTkFMX0JBU0VEX1ZNX1RSQVBTKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNp
b24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBAIGNsYXNzIE1ldGFkYXRhVGFibGU7CiBj
bGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKIGNsYXNzIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OwogY2xh
c3MgU3RydWN0dXJlU3R1YkluZm87CitjbGFzcyBCYXNlbGluZUpJVENvZGU7CiAKIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKENvZGVCbG9ja1JhcmVEYXRhKTsKIApAQCAt
MTU4LDcgKzE1OSw5IEBAIHB1YmxpYzoKICAgICBNZXRhZGF0YVRhYmxlKiBtZXRhZGF0YVRhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5nZXQoKTsgfQogCiAgICAgdW5zaWduZWQgbnVt
UGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQorcHJpdmF0ZToK
ICAgICB2b2lkIHNldE51bVBhcmFtZXRlcnModW5zaWduZWQgbmV3VmFsdWUpOworcHVibGljOgog
CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSBjb25zdCB7IHJldHVybiBt
X251bWJlck9mQXJndW1lbnRzVG9Ta2lwOyB9CiAKQEAgLTE2Nyw3ICsxNzAsNiBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQogICAg
IHVuc2lnbmVkIG51bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hl
Y2twb2ludHMoKSAqIG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKLSAgICB1bnNpZ25lZCogYWRk
cmVzc09mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KIAogICAgIENvZGVCbG9jayog
YWx0ZXJuYXRpdmUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihtX2Fs
dGVybmF0aXZlLmdldCgpKTsgfQpAQCAtMjMyLDE2ICsyMzQsNiBAQCBwdWJsaWM6CiAgICAgYm9v
bCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFs
bFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duQ2VsbChWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGFkZGlu
ZyBiYWNrIHRoZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJuIHRydWUgaWYgYHJlZ2AgaXMg
YHRoaXNgIGFuZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAgICAgICBpZiAocmVnLmlzQ29u
c3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2VsbCgpOwot
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
aXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fbnVtVmFycyk7CkBAIC0y
NjYsOCArMjU4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGdldElDU3RhdHVzTWFwKElDU3RhdHVz
TWFwJiByZXN1bHQpOwogICAgIAogI2lmIEVOQUJMRShKSVQpCisgICAgLy8gT09QUzogbW92ZSBh
cml0aG1ldGljIElDcyBhbmQgc3dpdGNoIHRhYmxlcyBvdXQgb2YgaGVyZSwgYW5kIG9udG8gSklU
Q29kZS4KICAgICBzdHJ1Y3QgSklURGF0YSB7CiAgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNU
X0FMTE9DQVRFRDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
IAogICAgICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9zOwogICAgICAgICBC
YWc8SklUQWRkSUM+IG1fYWRkSUNzOwpAQCAtMjgyLDkgKzI3NiwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1h
cDsKICAgICAgICAgYm9vbCBtX2hhc0NhbGxlZVNhdmVSZWdpc3RlcnMgeyBmYWxzZSB9OwogICAg
ICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7Ci0gICAgICAg
IEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworCisgICAgICAgIEZpeGVkVmVjdG9yPHZvaWQqPiBt
X2ppdENvbnN0YW50UG9vbDsKKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVENv
bnN0YW50UG9vbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKSVREYXRhLCBtX2ppdENvbnN0
YW50UG9vbCk7IH0KICAgICB9OwogCisgICAgdm9pZCBzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5l
Q29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPik7CisKICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRh
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyKQogICAgIHsKICAgICAgICAgaWYgKExJ
S0VMWShtX2ppdERhdGEpKQpAQCAtMjkzLDYgKzI5MSw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAg
SklURGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDb2RlQmxvY2ssIG1faml0RGF0YSk7IH0KKwogICAgIEpJVEFkZElDKiBhZGRKSVRB
ZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKik7CiAgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQ
cm9maWxlKik7CkBAIC0zMjIsMTYgKzMyMiw3IEBAIHB1YmxpYzoKICAgICAvLyBsb29raW5nIGZv
ciBhIENhbGxMaW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMu
CiAgICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVj
b2RlSW5kZXgpOwogICAgIAotICAgIHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFwJiYgaml0
Q29kZU1hcCkKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
KTsKLSAgICAgICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcCA9IFdURk1vdmUo
aml0Q29kZU1hcCk7Ci0gICAgfQotICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKQot
ICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAg
ICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcDsKLSAgICB9CisgICAg
Y29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpOwogCiAgICAgdm9pZCBzZXRQQ1RvQ29kZU9y
aWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOwogICAgIHN0ZDo6
b3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKHZvaWQqIHBjKTsKQEAgLTQ3Miw2ICs0NjMsNyBA
QCBwdWJsaWM6CiAKICAgICBTdHJpbmcgbmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7
CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJvZmls
ZXMpOyB9CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obV9udW1QYXJhbWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNlSklUKCkp
OwpAQCAtNTcyLDYgKzU2NCw3IEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
Z2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFu
dFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgQUxXQVlTX0lO
TElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUt
PmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHJlZyk7IH0KICAgICBBTFdBWVNfSU5M
SU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0
YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKGluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX2NvbnN0YW50UmVnaXN0ZXJzKSArIGRlY2x0eXBlKG1fY29uc3RhbnRS
ZWdpc3RlcnMpOjpkYXRhTWVtb3J5T2Zmc2V0KCk7IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4
XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1
bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC02MDEsNiArNTk0LDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKICAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+
bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIH0KKyAgICBTaW1wbGVKdW1wVGFi
bGUmIGJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICB2b2lkKiBi
YXNlbGluZUpJVENvbnN0YW50UG9vbCgpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAg
cmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wuZGF0YSgpOworICAgIH0KICNlbmRp
ZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygp
OyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkU3dpdGNoSnVt
cFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTYxMSw2ICs2MTAsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7CiAgICAgICAgIHJldHVybiBtX2pp
dERhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICB9CisgICAg
U3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCk7CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1
bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZVbmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOyB9CkBAIC02NDQsNiArNjQ0LDcgQEAgcHVibGljOgogICAgIGludDMyX3QgdGhyZXNo
b2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKICAgICB2b2lkIGppdEFmdGVyV2FybVVwKCk7
CiAgICAgdm9pZCBqaXRTb29uKCk7CisgICAgdm9pZCBqaXROZXh0SW52b2NhdGlvbigpOwogCiAg
ICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkg
Y29uc3QKICAgICB7CkBAIC03OTcsNiArNzk4LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNE
ZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CiAg
ICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1Z2dlclJl
cXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVxdWVzdHMp
OyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpOwog
ICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykKQEAgLTgz
OCw2ICs4NDAsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2NrIG1fbG9j
azsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJpdGZpZWxk
IGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBFTkFCTEUo
SklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBERkc6OkNh
cGFiaWxpdHlMZXZlbApAQCAtOTA2LDExICs5MDksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
Q29kZUJsb2NrLCBtX21ldGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJ
bnN0cnVjdGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9j
aywgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKTsgfQogCi0gICAgYm9vbCBsb29wSGludHNBcmVF
bGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCi0gICAgewotICAgICAgICAvLyBTb21lIGJ1
aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRoZXkgcnVu
LgotICAgICAgICByZXR1cm4gIW1fdW5saW5rZWRDb2RlLT5pc0J1aWx0aW5GdW5jdGlvbigpOwot
ICAgIH0KKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJu
KCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emlu
Z0Vhcmx5UmV0dXJuKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluYWxpemVMTEludElu
bGluZUNhY2hlcygpOwpAQCAtMTAwOCw3ICsxMDA3LDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1
cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8
SklUQ29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAgc3RkOjp1
bmlxdWVfcHRyPEpJVERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9j
a3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jawpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShyZXZpc2lv
biAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQog
CisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3Rz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRh
YmxlSW5saW5lcy5oIgpAQCAtMTI2LDQgKzEyNywyNCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFj
aExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZU19J
TkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJsb2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAgICBB
U1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFw
OworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGlu
ZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxp
bmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNl
bGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQo
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0Vk
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGlj
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNv
ZGVCbG9jayk7CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJs
b2NrKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRh
ZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkTWV0YWRhdGEuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3
IEBAIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGEKIAogc3RydWN0IEdl
dEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCB7CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJv
ZmlsZTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCwgYXJyYXlQ
cm9maWxlKTsgfQogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGFB
cnJheUxlbmd0aCkgPT0gMTIpOwogCkBAIC04OCw2ICs4OSw3IEBAIHVuaW9uIEdldEJ5SWRNb2Rl
TWV0YWRhdGEgewogICAgICAgICBHZXRCeUlkTW9kZSBtb2RlOwogICAgICAgICB1aW50OF90IGhp
dENvdW50Rm9yTExJbnRDYWNoaW5nOyAvLyBUaGlzIG11c3QgYmUgemVybyB3aGVuIHdlIHVzZSBQ
cm90b0xvYWQgbW9kZS4KICAgICB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2Rl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9
CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YURlZmF1bHQgZGVmYXVsdE1vZGU7CiAgICAgR2V0QnlJ
ZE1vZGVNZXRhZGF0YVVuc2V0IHVuc2V0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhQXJy
YXlMZW5ndGggYXJyYXlMZW5ndGhNb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zODUsNiArMzg1LDggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNj
ZXNzKAogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCisvLyBPT1BTOiBNYWtlIHRo
aXMgc3R1ZmYgd29yayB3aXRoIGRhdGEgaWNzIHRvIG5vdCBhc3N1bWUgaW5saW5lIGFjY2Vzcy4K
Kwogdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5s
aW5lQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQpCiB7CiAg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKQEAgLTQwNCw5ICs0MDYsMTIgQEAgdm9p
ZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogdm9pZCBJbmxpbmVBY2Nlc3M6
OnJld2lyZVN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4gdGFyZ2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAg
IC8vIE9PUFM6IG1ha2Ugc29tZSB2ZXJzaW9uIG9mIElubGluZUFjY2VzcyBmb3IgYmFzZWxpbmUu
IFBlcmhhcHMgbWFrZSBpdCBkYXRhIGRyaXZlbi4gT3IgcGVyaGFwcyBoYXZlIHRoZSBjb2RlCisg
ICAgICAgIC8vIGJlIHNoYXJlZCBzb21laG93IGJldHdlZW4gVW5saW5rZWRDb2RlQmxvY2tzLgor
CiAgICAgICAgIC8vIElmIGl0IGlzIG5vdCBHZXRCeUlkLWxpa2UtdGhpbmcsIHdlIGRvIG5vdCBl
bWl0IG5vcCBzbGVkIChlLmcuIEdldEJ5VmFsKS4KICAgICAgICAgLy8gVGhlIGNvZGUgaXMgYWxy
ZWFkeSBhbiBpbmRpcmVjdCBqdW1wLCBhbmQgb25seSB0aGluZyB3ZSBzaG91bGQgZG8gaXMgcmVw
bGFjaW5nIG1fY29kZVB0ci4KLSAgICAgICAgaWYgKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRp
ZmllcikgeworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQgJiYgc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CiAgICAgICAgICAg
ICAvLyBJZiBtX2NvZGVQdHIgaXMgcG9pbnRpbmcgdG8gc3R1YkluZm8uc2xvd1BhdGhTdGFydExv
Y2F0aW9uLCB0aGlzIG1lYW5zIHRoYXQgSW5saW5lQWNjZXNzIGNvZGUgaXMgbm90IGEgc3R1YiBv
bmUuCiAgICAgICAgICAgICAvLyBXZSByZXdyaXRlIHRoaXMgd2l0aCB0aGUgc3R1Yi1iYXNlZCBk
aXNwYXRjaGluZyBjb2RlIG9uY2UsIGFuZCBjb250aW51ZSB1c2luZyBpdCB1bnRpbCB3ZSByZXNl
dCB0aGUgY29kZS4KICAgICAgICAgICAgIGlmIChzdHViSW5mby5tX2NvZGVQdHIuZXhlY3V0YWJs
ZUFkZHJlc3MoKSA9PSBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24uZXhlY3V0YWJsZUFk
ZHJlc3MoKSkgewpAQCAtNDIxLDYgKzQyNiw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVT
dHViQXNKdW1wSW5BY2MKICAgICAgICAgICAgICAgICB9KSwgIklubGluZUFjY2VzczogbGlua2lu
ZyBzdHViIGNhbGwiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHN0dWJJ
bmZvLm1fY29kZVB0ciA9IHRhcmdldDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1l
dGFkYXRhLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAs
NyBAQCBPVkVSTE9BRF9CSVRXSVNFX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJ
dGVyYXRpb25Nb2RlTWV0YWRhdGEgewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSXRlcmF0aW9uTW9kZU1ldGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0YXRpY19h
c3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRpb25Nb2Rl
KSk7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxs
TGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
TExJbnRDYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDYgKzg3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJv
ZmlsZTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKExMSW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0K
IAogcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExp
bmtCaXQgeyB1bmxpbmtlZEJpdCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODIwMTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1Yklu
Zm8uaCIKIAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vz
cy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKIApAQCAtMjg1LDYgKzI4Niw3IEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAgICAgICAgcmVzZXRQdXRCeShjb2Rl
QmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5h
bWU6CiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZh
bCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgpAQCAtNDMw
LDYgKzQzMiwyMDQgQEAgQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpzZQog
ICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVUeXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nl
c3NUeXBlID0gdW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5r
ZWRTdHViSW5mby5zdGFydDsgLy8gT09QUzogZG8gd2UgbmVlZCBhIHN0YXJ0IGZvciBkYXRhIElD
cz8KKyAgICBkb25lTG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAg
ICBzbG93UGF0aFN0YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRM
b2NhdGlvbjsKKyAgICBjYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpOworICAgIGNvZGVPcmln
aW4gPSBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgbV9j
b2RlUHRyID0gc2xvd1BhdGhTdGFydExvY2F0aW9uOworCisgICAgdXNlZFJlZ2lzdGVycyA9IFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICBpZiAoYWNjZXNzVHlw
ZSA9PSBBY2Nlc3NUeXBlOjpHZXRCeUlkICYmIHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9yX25leHQsIHdlIGNhbid0
IGNsb2JiZXIgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgZWl0aGVyLgorICAgICAgICB1c2VkUmVnaXN0
ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gpOworICAgIH0KKworICAg
IHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25J
bkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5C
eUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0
dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAg
ICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAg
ICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHVi
SW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRl
RmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlk
U2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAg
ICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1
dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFN
b2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAg
ICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAg
ICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gdW5saW5r
ZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRC
eVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2
YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpT
ZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFBy
aXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25D
aGVja1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBz
d2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgor
ICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlH
UFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVH
UFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAgICAgICBoYXNDb25zdGFu
dElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gSW52YWxpZEdQUlJlZzsK
KyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlm
aWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAg
ICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIHZhbHVlR1BSID0gQmFz
ZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MucHJvdG90eXBl
R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICAgICAgbV9zdHVi
SW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFu
ZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNl
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3Bl
cnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFs
dWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHVi
SW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBoYXNDb25zdGFudElk
ZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAg
IHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9z
dHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAg
ICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9
IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRX
aXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0
aGlzVmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAg
ICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgor
ICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5m
b0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBpZiAo
YWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQdXRCeVZhbCkKKyAgICAgICAgICAgIG1fYXJyYXlQ
cm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlm
aWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAg
YmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBy
ZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKICNpZiBBU1NFUlRfRU5BQkxFRAogdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y2hlY2tDb25zaXN0ZW5jeSgpCiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2
aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJK
SVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAi
T3B0aW9ucy5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5o
IgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgpAQCAt
NTYsNiArNTcsNyBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgewogICAgIEdldEJ5
VmFsLAogICAgIFB1dEJ5SWQsCiAgICAgUHV0QnlWYWwsCisgICAgUHV0UHJpdmF0ZU5hbWUsCiAg
ICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC03OCw2ICs4
MCw4IEBAIGVudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKICAgICBTdHJpbmdMZW5ndGgK
IH07CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworCiBjbGFzcyBTdHJ1Y3R1
cmVTdHViSW5mbyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1YkluZm8p
OwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtOTgsNiArMTAyLDggQEAgcHVibGlj
OgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAorICAgIHZvaWQg
aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8mKTsKKwogICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwog
CiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBk
ZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCkBAIC00NDcsNiArNDUzLDE4
IEBAIGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW4KICAgICB9CiB9CiAK
K3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJp
dmF0ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSB9OworICAgIEVD
TUFNb2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgpIH07CisgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4OworICAgIC8vIE9PUFM6IERvIHdlIG5lZWQgc3RhcnQgZm9yIGRhdGEg
SUNzPworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsg
Ly8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNh
Y2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW5zdGFuY2VvZicg
Y2FjaGVzLgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2Nh
dGlvbjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xvd1Bh
dGhTdGFydExvY2F0aW9uOworfTsKKwogI2Vsc2UKIAogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKIAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAKKyNpbmNsdWRlICJC
YXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIK
ICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKQEAg
LTMxNiw0ICszMTcsMTYgQEAgaW50IFVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2Zm
cwogICAgIHJldHVybiBtX291dE9mTGluZUp1bXBUYXJnZXRzLmdldChieXRlY29kZU9mZnNldCk7
CiB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorYm9vbCBVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRl
bnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIC8vIE9PUFM6IGRvIHdoYXQg
Q29kZUJsb2NrIGRvZXMgYW5kIG1ha2UgYSBoYXNoIHRhYmxlPworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRl
bnRpZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5
dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRG
R0V4aXRQcm9maWxlLmgiCkBAIC02Miw2ICs2Myw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2Nr
OwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBC
YXNlbGluZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtU
aW1lQ29uc3RhbnQgOiBpbnQzMl90OwogCkBAIC0xNzUsNiArMTc3LDcgQEAgcHVibGljOgogCiAg
ICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdp
c3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVC
YXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsg
fQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5k
ZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJl
Z2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25z
dGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1
cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIx
MCwxNSBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7
IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsK
KyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4
KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisg
ICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9u
cygpLmF0KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGlu
c3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9u
IC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1Np
emUoKSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2ln
bmVkIG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9
CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAt
MzM0LDYgKzM0NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXpl
SW5CeXRlcygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6
aW5nRWFybHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVx
dWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0
dXJuICFpc0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KKworI2lmIEFTU0VSVF9FTkFCTEVECisg
ICAgYm9vbCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CisjZW5kaWYKIAogcHJv
dGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUs
IGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwpA
QCAtMzk0LDYgKzQxNSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZXhpY2FsU2NvcGVG
ZWF0dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CisgICAg
UmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6
CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2Rl
IG1fcGFyc2VNb2RlOwpAQCAtNDEwLDYgKzQzMiw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09Q
UzogYmluZCBhIGJldHRlciBwbGFjZSB0byBzdG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxC
aW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5h
cnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtNDU1LDYgKzQ4MCwy
OCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChp
bnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0
KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZM
aW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRk
QmluYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1f
YmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxl
cy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAg
ICAgbV91bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKFVuYXJ5QXJpdGhQcm9maWxlKCkpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmlu
YXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxl
c1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25l
ZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQogCiBwcml2YXRlOgogICAg
IHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6
T2Zmc2V0LCBpbnQ+OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MjAx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKICAgICBi
b29sIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX2Nv
ZGVCbG9jay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9CiAgICAgYm9vbCBo
YXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50
cygpOyB9CiAgICAgYm9vbCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay0+aGFzVGFpbENhbGxzKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUo
KSB7IHJldHVybiBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCk7IH0KKyAgICB1
bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRV
bmFyeUFyaXRoUHJvZmlsZSgpOyB9CiAKICAgICAvLyBVcGRhdGluZyBVbmxpbmtlZENvZGVCbG9j
ay4KICAgICB2b2lkIHNldEhhc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFzQ2hl
Y2twb2ludHMoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFVubGlua2VkTWV0YWRhdGFUYWJsZSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIE9wY29kZT4KKyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNv
bnN0IE9wY29kZSYgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQp
OworICAgICAgICB1aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRU
YWJsZTMyKClbT3Bjb2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNv
ZGVJRF07CisgICAgICAgIHJldHVybiBiYXNlVHlwZU9mZnNldCArIHNpemVvZih0eXBlbmFtZSBP
cGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7CisgICAgfQorCiBwcml2YXRl
OgogICAgIGVudW0gRW1wdHlUYWcgeyBFbXB0eSB9OwogCkBAIC0xMDEsNiArMTA5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAg
ICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2
X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQCB0ZW1wbGF0
ZTx1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHNBcmd1bWVuCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFz
ZSB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1i
ZXJPZkJ1Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJl
ck9mU3BlY0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1
Y2tldEluZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJl
ck9mU3BlY0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQpAQCAtMTM0
LDcgKzEzMyw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgCiAgICAgICAg
IHJldHVybiBtX3ByZWRpY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgRW5jb2RlZEpTVmFsdWUg
bV9idWNrZXRzW3RvdGFsTnVtYmVyT2ZCdWNrZXRzXTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIG1f
cHJlZGljdGlvbiB7IFNwZWNOb25lIH07CkBAIC0xNTYsNiArMTU1LDcgQEAgc3RydWN0IFZhbHVl
UHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldAogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlIDogcHVi
bGljIFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4gewogICAgIFZhbHVlUHJv
ZmlsZSgpIDogVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPigpIHsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0c1swXSk7IH0KIH07CiAKIHN0cnVjdCBWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU5OCw3ICsxNTk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRVbmFy
eQogICAgICAgICBlbWl0VW5hcnlPcDxPcE5vdD4oZHN0LCBzcmMpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBz
cmMsIHR5cGUpOworICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSwg
bV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIG9wX2JpdG5vdDoKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BCaXRub3Q+KGRzdCwgc3Jj
KTsKQEAgLTE2OTYsMTMgKzE2OTYsMTMgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRUeXBlTwogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluYyhSZWdp
c3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBP
cEluYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmls
ZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdERlYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BEZWM6OmVtaXQodGhp
cywgc3JjRHN0KTsKKyAgICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5h
ZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2
ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqPgogICAgICAg
ICBlbWl0QmluYXJ5T3AoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3Rl
cklEKiBzcmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJp
bmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMpOworICAgICAgICAgICAg
QmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcywgbV9jb2RlQmxvY2st
PmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAg
ICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJ
KHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw2IEBAIHZvaWQqIHByZXBhcmVPU1JF
bnRyeShWTSYgdm0sIENhbGxGcmFtZSoKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29k
ZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5p
c1N0aWxsVmFsaWQpOwogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VPU1JFbnRyeVRvREZHKCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJsb2Nr
SW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdPcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSAiSklULmgiCkBAIC0zMDksMTAgKzMxMCwxNSBAQCB2b2lkIHJlaWZ5
SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgICAgICB0cnVlQ2FsbGVyID8g
QXNzZW1ibHlIZWxwZXJzOjpVc2VFeGlzdGluZ1RhZ1JlZ2lzdGVyQ29udGVudHMgOiBBc3NlbWJs
eUhlbHBlcnM6OkNvcHlCYXNlbGluZUNhbGxlZVNhdmVkUmVnaXN0ZXJzRnJvbUJhc2VGcmFtZSwK
ICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVn
VDQpOwogCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhp
bmcgZm9yIGJhc2VsaW5lIHBiL21ldGFkYXRhIHJlZ2lzdGVycwogICAgICAgICBpZiAoY2FsbGVy
SXNMTEludCkgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNh
bGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CiAgICAgICAgICAg
ICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxs
RnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxl
R1BSKSk7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkp
LCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTElu
dDo6UmVnaXN0ZXJzOjpwYkdQUikpOworICAgICAgICB9IGVsc2UgaWYgKHRydWVDYWxsZXIpIHsK
KyAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQu
YmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOworICAgICAgICAgICAgaml0LnN0b3Jl
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ci0+bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNl
bGluZUNvZGVCbG9jaywgSklUOjpzX21ldGFkYXRhR1BSKSk7CisgICAgICAgICAgICBqaXQuc3Rv
cmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5iYXNlbGluZUpJVENvbnN0YW50UG9vbCgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2Fs
bEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgSklUOjpzX2NvbnN0YW50c0dQUikpOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQpAQCAtNDA0
LDYgKzQxMCw5IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKICAgICAgICAganVtcFRhcmdldCA9
IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKICAgICB9IGVsc2UgeworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKSwgSklUOjpzX21ldGFkYXRh
R1BSKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVC
bG9ja0ZvckV4aXQtPmJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkpLCBKSVQ6OnNfY29uc3RhbnRz
R1BSKTsKKwogICAgICAgICBjb2RlQmxvY2tGb3JFeGl0LT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0
cnVlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MzAsNiArNzMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENh
bGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNv
dmVyeTo6aW5QYWlyKGNhbGxlZVRhZ0dQUiwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAg
IHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAg
c2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0
ZXJzKCk7CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRB
cmdzOyArK2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgp
LnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTg4OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGlu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlk
R1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dD
YXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BS
LCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAg
ICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAg
ICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVG
b3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NDUsNiArNzQ1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQog
ICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2Fs
bGVlR1BSLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNp
emUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRB
cmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRl
cnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7
CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCBpICsgMSk7CkBAIC04OTYsNyArODk3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xv
d0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJ
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVn
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZd
IHsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAg
ICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBh
cmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1
LDcgKzM5ODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAg
ICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAog
ICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCks
IEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5
VmFsLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6
REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUs
IHVzZWRSZWdpc3RlcnMsCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZh
bGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNT
eW1ib2wgPSB0cnVlOwogCkBAIC0xNDc3OCw3ICsxNDc3OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7
CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcs
IHRoaXNSZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCksIGNhbGxTaXRlSW5kZXgpOwor
ICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhp
c1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJs
b2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNp
b24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzE3LDcgKzQzMTcsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZU
TEpJVCkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAg
ICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0g
ICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1h
bnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAg
ICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09y
aWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAg
ICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52
YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJ
bmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwpAQCAtMTAxOTEsNiArMTAxOTEsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRB
cmdzOyBpIDwgbnVtQWxsb2NhdGVkQXJnczsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAg
c2h1ZmZsZURhdGEuYXJncy5hcHBlbmQoVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmlu
ZWQoKSkpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0g
bnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1l
dGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygp
KTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50
aWNOb2RlT3JpZ2luKTsKQEAgLTEwMzQ5LDEzICsxMDM1MCwxNCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292
ZXJ5Rm9ySlNWYWx1ZSgpKTsKIAogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3Nl
ZEFyZ3MgPSBudW1BcmdzOworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRl
cnMgPSBqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0
LmNvZGVCbG9jaygpKTsKIAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2Fs
bCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52
YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAg
ICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2Fs
bCgpOwogICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA2OTgsNyArMTA3MDAsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYg
KGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0lu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJS
ZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAg
ICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BS
SW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JU
YWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDk3OSw3ICsxMDk4
MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBz
bG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAg
ICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0
aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdU
MCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBq
aXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNp
b24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5y
Ygkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAg
ZGVmIHN0cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBj
b252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRP
ZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVzLm1h
cCBkbyB8ZmllbGROYW1lfAorICAgICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisgICAg
ICAgICAgICBlbmQuam9pbigiXG4iKQorICAgICAgICBlbmQKKworICAgICAgICBkZWYgY29udmVy
dEZpZWxkcyhwcmVmaXgsIGZpZWxkcywgZmllbGROYW1lcykKICAgICAgICAgICAgIGZpZWxkcy5t
YXAgZG8gfGZpZWxkLCB0eXBlfAogICAgICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFz
aAotICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRz
KHByZWZpeCArICcgICAgJywgdHlwZSl9XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAg
ICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5
cGUsIGZpZWxkTmFtZXMpfVxuI3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsi
CisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAg
ICAgICAgICAgZmllbGROYW1lcy5wdXNoKGZpZWxkTmFtZSkKKyAgICAgICAgICAgICAgICAgICAg
IiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGROYW1lfTsiCiAgICAgICAgICAgICAgICAg
ZW5kCiAgICAgICAgICAgICBlbmQuam9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBm
aWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxk
TmFtZXMgPSBbXQorICAgICAgICBwcmVmaXggPSAiICAgICAgICAiCisgICAgICAgIGZpZWxkcyA9
IGNvbnZlcnRGaWVsZHMocHJlZml4LCBAZmllbGRzLCBmaWVsZE5hbWVzKQorICAgICAgICBmaWVs
ZHMgPSBmaWVsZHMgKyAiXG4iICsgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZp
ZWxkTmFtZXMpCiAKICAgICAgICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVy
cyAmJiAobm90IEBpbml0aWFsaXplcnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OTgsOCArNjk4LDEzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVl
U2F2ZXMKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGVtaXRWaXJ0dWFs
Q2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworfQorCit2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYg
dm0sIENhbGxMaW5rSW5mbyogaW5mbykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyks
IEdQUkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExp
bmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8g
Y2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRp
b25QdHJUYWc+KGNhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzE4LDYgKzE3MTgsNyBA
QCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsKICAgICAKICAgICB2
b2lkIG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25T
dGFja0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5l
SklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNl
bGluZUpJVENvZGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQmFzZWxpbmVKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKKworI2luY2x1ZGUgIkpJVE1h
dGhJQy5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJ
bmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKSVRBZGRJQyogTWF0aElDSG9sZGVyOjphZGRK
SVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJ
Q3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE11bElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11
bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5h
ZGQoYXJpdGhQcm9maWxlKTsgfQorSklUU3ViSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMo
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChh
cml0aFByb2ZpbGUpOyB9CitKSVROZWdJQyogTWF0aElDSG9sZGVyOjphZGRKSVROZWdJQyhVbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQ
cm9maWxlKTsgfQorCit2b2lkIE1hdGhJQ0hvbGRlcjo6YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRl
ciYgb3RoZXIpCit7CisgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAg
ICBtX211bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAgIG1fbmVnSUNzID0gV1RG
TW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3Vi
SUNzKTsKK30KKworQmFzZWxpbmVKSVRDb2RlOjpCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQor
ICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQpCisgICAgLCBNYXRoSUNIb2xkZXIoKQoreyB9CisKK0Jhc2VsaW5lSklU
Q29kZTo6fkJhc2VsaW5lSklUQ29kZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0lu
Zm8uaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworLy9jbGFzcyBKSVRBZGRJQzsKKy8vY2xhc3MgSklUTXVsSUM7Cisv
L2NsYXNzIEpJVFN1YklDOworLy9jbGFzcyBKSVROZWdJQzsKK2NsYXNzIEJpbmFyeUFyaXRoUHJv
ZmlsZTsKK2NsYXNzIFVuYXJ5QXJpdGhQcm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm87CitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJs
ZTsKKworY2xhc3MgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElD
cyhNYXRoSUNIb2xkZXImIG90aGVyKTsKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5
QXJpdGhQcm9maWxlKik7CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJv
ZmlsZSopOworICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsK
KyAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworICAgIC8q
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2
YWx1ZT46OnR5cGU+CisgICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUq
IHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4K
KyAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyBy
ZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBH
ZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1l
PEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lD
KiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5l
Z0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBl
bmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJ
VFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJp
bmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7
IH0KKyAgICAqLworCitwcml2YXRlOgorICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAg
QmFnPEpJVE11bElDPiBtX211bElDczsKKyAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAg
IEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Cit9OworCitjbGFzcyBKSVRDb25zdGFudFBvb2wgewor
cHVibGljOgorICAgIHVzaW5nIENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICBlbnVtIGNsYXNz
IFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAgR2xvYmFsT2JqZWN0LAorICAgICAgICBDYWxsTGlu
a0luZm8sCisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvLAorICAgICAgICBGdW5jdGlvbkRlY2ws
CisgICAgICAgIEZ1bmN0aW9uRXhwciwKKyAgICB9OworCisgICAgc3RydWN0IFZhbHVlIHsKKyAg
ICAgICAgLy8gT09QUzogTWFrZSB0aGUgcG9pbnRlciBwYWNrZWQuCisgICAgICAgIFR5cGUgdHlw
ZTsKKyAgICAgICAgdm9pZCogcGF5bG9hZDsKKyAgICB9OworCisgICAgSklUQ29uc3RhbnRQb29s
KCkgPSBkZWZhdWx0OworICAgIEpJVENvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2wmJikgPSBk
ZWZhdWx0OworICAgIEpJVENvbnN0YW50UG9vbCYgb3BlcmF0b3I9KEpJVENvbnN0YW50UG9vbCYm
KSA9IGRlZmF1bHQ7CisKKyAgICBDb25zdGFudCBhZGQoVHlwZSB0eXBlLCB2b2lkKiBwYXlsb2Fk
ID0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRz
LnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFudHMuYXBwZW5kKFZhbHVlIHsgdHlwZSwgcGF5bG9h
ZCB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzLnNpemUoKTsgfQorICAgIFZhbHVlIGF0KHNpemVf
dCBpKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpXTsgfQorCitwcml2YXRlOgorICAgIFZl
Y3RvcjxWYWx1ZT4gbV9jb25zdGFudHM7Cit9OworCisKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6
IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAg
ICBCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3Zl
cnJpZGU7CisKKyAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsK
KyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOyAvLyBPT1BTOiBtYWtl
IHN1cmUgd2UgdmlzaXQgdGhlc2Ugc29tZWhvdy4gT3IgYXNzZXJ0IHdlIGRvbid0IGhhdmUgdG8s
IHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KKyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1w
VGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFi
bGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1h
cDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklU
UGxhbi5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXpl
X3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0
IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUoKQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJl
c3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1
bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAg
IHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAg
Q09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29t
cGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2Fs
bEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0Nh
bGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2
b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2Nv
cGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6
UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNr
ZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBH
UFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBm
cmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tl
dDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihT
aGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdz
LCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0g
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tl
dCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwot
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxT
aXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2Vu
UGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJn
R1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tl
biA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAgLTcyLDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxw
ZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEKICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVz
cyhzY3JhdGNoMU5vbkFyZ0dQUikpOwogfQogCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1w
bChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3Bl
LCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQor
eworICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRv
d1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7
CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxN
YXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRo
aXNWYWx1ZSkpKTsKKyAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3Jl
UHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFk
b3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lk
IENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBj
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVC
bG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVn
cywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tl
dCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lk
IENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0lu
dGVybmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVt
aXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lv
biAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBv
cGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhh
dCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Agb2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBj
YWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChH
UFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAg
dm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1Zh
bHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4
KTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAg
ICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0
LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVC
bG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdz
IHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNr
ZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29w
ZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAg
IC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRl
IHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQo
Vk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJl
ZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzcsOCArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZs
ZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsK
KyAgICBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVS
ZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9u
cykKK3sKICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6
OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExp
c3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMt
PnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3Rl
clNhdmVMb2NhdGlvbnMtPmF0KGkpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDExICs0MywxMyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+
IGFyZ3M7CiAgICAgdW5zaWduZWQgbnVtTG9jYWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25l
ZCBudW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJz
IHsgVUlOVF9NQVggfTsgLy8gT24gb3VyIG1hY2hpbmUgZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBSZWdpc3Rlck1hcDxWYWx1ZVJlY292ZXJ5PiByZWdpc3RlcnM7CiAgICAgR1BSUmVn
IG51bWJlclRhZ1JlZ2lzdGVyIHsgSW52YWxpZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENh
bGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVS
ZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVl
UmVjb3ZlcnkgY2FsbGVlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2Fs
bEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsMTMgKzM4LDEzIEBAIENhbGxGcmFtZVNodWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EK
ICAgICA6IG1faml0KGppdCkKICAgICAsIG1fb2xkRnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxs
ZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1l
KGRhdGEuYXJncy5zaXplKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycywgbnVs
bHB0cikKLSAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJ
blJlZ2lzdGVycwotICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQu
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNp
emUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyByb3VuZEFyZ3VtZW50Q291bnRU
b0FsaWduRnJhbWUoZGF0YS5udW1QYXJhbWV0ZXJzKSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1l
U2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwogICAgICAgICArIHJvdW5kQXJn
dW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Muc2l6ZSgpKSkKICAgICAsIG1fZnJhbWVE
ZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUgLSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCiAgICAg
LCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBt
X251bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNzZWRBcmdzKQorICAgICwgbV9udW1QYXJhbWV0ZXJz
KGRhdGEubnVtUGFyYW1ldGVycykKIHsKICAgICAvLyBXZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVz
dWFsIHJlZ2lzdGVycy4uLgogICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIENhbGxGcmFtZVNodWZm
bGVyOjpwcmVwYXJlRm9yVGFpbENhCiAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
KyBQYXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGFyZ3VtZW50Q291bnRPSyA9CiAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpCZWxvd09yRXF1YWwsIG1fbmV3RnJhbWVCYXNlLAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSk7
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVy
cykpOwogICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tB
bGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVy
cyksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKC1zdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOwog
ICAgIG1faml0Lm11bDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lz
dGVyKSksIG1fbmV3RnJhbWVCYXNlLCBtX25ld0ZyYW1lQmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCShyZXZpc2lvbiAyODIwMTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIENhbGxGcmFtZVNo
dWZmbGVEYXRhIGRhdGE7CiAgICAgICAgIGRhdGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CiAg
ICAgICAgIGRhdGEubnVtUGFzc2VkQXJncyA9IG1fbnVtUGFzc2VkQXJnczsKKyAgICAgICAgZGF0
YS5udW1QYXJhbWV0ZXJzID0gbV9udW1QYXJhbWV0ZXJzOwogICAgICAgICBkYXRhLmNhbGxlZSA9
IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292
ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytpKQpAQCAtNzk4LDYgKzc5OSw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBwZXJmb3JtU2FmZVdyaXRlcygpOwogICAgIAogICAgIHVuc2ln
bmVkIG1fbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbV9udW1QYXJh
bWV0ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZv
aWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KQotICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBK
U0ludGVyZmFjZUpJVCgmdm0sIG51bGxwdHIpCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVy
cHJldGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5zaXplKCkgOiAwKQogICAgICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBA
IC03Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIK
ICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFs
T2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpHbG9iYWxPYmplY3QpOworICAgIG1fcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7Cisg
ICAgbV91bmxpbmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsK
IH0KIAogSklUOjp+SklUKCkKQEAgLTkwLDggKzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9w
dGltaXphdGlvbkNoZWNrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9w
dGltaXplOwotICAgIAotICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVk
LCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5
KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3Vu
dGVyKCkpKSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QwKTsKKyAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwg
VHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgp
KSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkp
KSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxM
SW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMjEgQEAg
dm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3Rp
ZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdh
dGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCkKIHsKKyAgICAvLyBPT1BTOiBUYWtlIGEgYm9v
bGVhbiBvciBzb21ldGhpbmcgc2F5aW5nIGlmIHdlIGNhbiBiZSBudWxsLgorICAgIGF1dG8gb2sg
PSBicmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNl
dE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIG9rLmxpbmso
dGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09
IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKQotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJSZWFkT25seVdhdGNocG9pbnQoKS0+YWRk
cmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykgeworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIp
OworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpT
R2xvYmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRj
aHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
KTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQpAQCAt
MTI5LDcgKzEzOCw3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAg
IGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBi
cmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtw
b2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CkBAIC0xODEsMjEgKzE5MCw0MSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJS
ZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVz
dWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3Vs
dCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4
ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgcmVzdWx0KTsKKyAgICBoYXNF
eGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29u
c3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVj
dXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBl
bHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCByZXN1bHQpOworCisgICAgbG9hZFB0cihBZGRy
ZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2so
KSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKTsKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MoKQogewogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygi
Q29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIkNvbXBp
bGluZyAiLCAqbV9wcm9maWxlZENvZGVCbG9jaywgIlxuIik7CiAgICAgCiAgICAgaml0QXNzZXJ0
VGFnc0luUGxhY2UoKTsKICAgICBqaXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgpOwogICAgIAot
ICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKLSAg
ICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LnNpemUoKTsKKyAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKTsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogCiAgICAgbV9jYWxsTGlua0luZm9J
bmRleCA9IDA7CiAKLSAgICBWTSYgdm0gPSBtX2NvZGVCbG9jay0+dm0oKTsKICAgICBCeXRlY29k
ZUluZGV4IHN0YXJ0Qnl0ZWNvZGVJbmRleCgwKTsKKworICAgIC8vIE9PUFM6IE1heWJlIG9ubHkg
ZG8gdGhpcyBpZiB3ZSBkaXNhYmxlIHNoYXJpbmcgc29tZWhvdz8KKyAgICAvKgorICAgIFZNJiB2
bSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnZtKCk7CiAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxvY2s+KHZt
KSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0pKSkg
ewogICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNhdXNlIHdl
IGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KICAgICAgICAgLy8gVGhp
cyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhlIExMSW50
IGRldGVybWluZXMgaXQgd2FudHMgdG8KQEAgLTIzNiw2ICsyNjUsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Cisg
ICAgKi8KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3Ig
KG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4LDggKzMwOCw4IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9
XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNb
b3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9j
ayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNTI3LDcgKzU1Nyw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBm
aXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRl
Y29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNv
ZGVJbmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJv
c2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNv
ZGUgZm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZz
ZXQoKSk7CkBAIC01NDUsOCArNTc1LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCkKIAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4
ZWN1dGlvbigpKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0
JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxD
YWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJ
VCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAi
IGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAg
ICAgICB9KTsKICAgICAgICAgfQpAQCAtNjc0LDU1ICs3MDQsNTYgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFs
aXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRh
ZGF0YUdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
SklURGF0YSgpKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2Nr
OjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOwor
fQorCit2b2lkIEpJVDo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1p
dFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtX
aXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZH
OjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7
CisgICAgLy8gT09QUzogTWF5YmUgdGhpcyBzaG91bGQgYmUgZG9uZSBvbiB1bmxpbmtlZCBjb2Rl
IGJsb2NrPworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVC
bG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2Ug
REZHOjpDYW5ub3RDb21waWxlOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0g
ICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91
bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpD
YW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBt
X2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5l
ZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2Nr
LT5jb2RlVHlwZSgpKSB7Ci0gICAgY2FzZSBHbG9iYWxDb2RlOgotICAgIGNhc2UgTW9kdWxlQ29k
ZToKLSAgICBjYXNlIEV2YWxDb2RlOgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdh
eXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNv
ZGU6Ci0gICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVj
YXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qg
b3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1
bmN0aW9uKG1fY29kZUJsb2NrKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKG1f
Y29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJs
b2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAg
IGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAg
ICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1w
VGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVy
T2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+
bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
ID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxv
Y2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAg
ICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZXMoKSkKKyAgICAgICAgICAgIG1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBs
ZUp1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1
bXBUYWJsZXMoKSk7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9
CiAKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9y
UHJvZmlsZXIoKSkpKQotICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlz
YXNzZW1ibGVyPihtX2NvZGVCbG9jayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBE
aXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6
ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpKSkgeworICAgICAgICAvLyBPT1BTOiBi
dWlsZCBhIGRpc2Fzc2VtYmxlciBvZmYgdW5saW5rZWQgY29kZSBibG9jaworICAgICAgICBtX2Rp
c2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJs
b2NrKTsKKyAgICB9CiAgICAgaWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
cikpIHsKKyAgICAgICAgLy8gT09QUzogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiB1
bmxpbmtlZCBjb2RlIGJsb2NrCiAgICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAg
ICAgICAgICAgIG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAgICAgICAgbV92
bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2sp
LAorICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0
ZWNvZGVzRm9yKG1fcHJvZmlsZWRDb2RlQmxvY2spLAogICAgICAgICAgICAgICAgIFByb2ZpbGVy
OjpCYXNlbGluZSkpOwotICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2Rl
cygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1f
Y29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXIsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJ
bmRleCgwKSkpOwpAQCAtNzQyLDExICs3NzMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbgogICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xv
Z3VlKCk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblBy
b2xvZ3VlKCk7CiAKICAgICBMYWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1l
VG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3Rlcik7CisgICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBt
YXhGcmFtZVNpemUgPSAtZnJhbWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihm
cmFtZVRvcE9mZnNldCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qg
c3RhY2tPdmVyZmxvdzsKQEAgLTc1NywxNiArNzg5LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5k
TGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2Fs
bGVlU2F2ZXMoKTsKKyAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0
TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVy
aWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFu
ZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZSkgeworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2Rl
VHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmco
KSAmJiAoIW1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7Cisg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1
bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9m
U3RvcmFnZSgpKSwgcmVnVDIpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50
ID0gMDsgYXJndW1lbnQgPCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsr
YXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3Is
IHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAg
ICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFs
bHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmICht
X2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAg
ICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNl
dCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAg
LTc3NywxMiArODEzLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6
aW4KICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zm
c2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0
UmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxG
cmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
dGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQo
YXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3Vs
dFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBW
YWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVCht
X2NvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6Omlz
SklUKG1fcHJvZmlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZ
KHNpemVNYXJrZXIpKQogICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChX
VEZNb3ZlKCpzaXplTWFya2VyKSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MzUsMjcgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAg
Y2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRo
cm93U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2Fs
bE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93
U3RhY2tPdmVyZmxvd0Vycm9yLCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBh
cmFtZXRlcnMgaXMgMSwgd2UgbmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJl
cXVpcmVzQXJpdHlGaXh1cCA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAg
ICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVz
QXJpdHlGaXh1cCkgeworICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewog
ICAgICAgICBtX2FyaXR5Q2hlY2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZElt
bTMyKDApLCAmbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAg
ICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQ
dXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVz
dGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdh
eXNCZUlubGluZWQoKSkpOwogCiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gz
MihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFy
YW1ldGVycykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSkpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRp
Y19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFj
a09uRXhjZXB0aW9uKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25z
dHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVy
YXRpb25DYWxsQXJpdHlDaGVjaywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMiht
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICAgICAgYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJl
bCwgdGhpcyk7CkBAIC04MzksNyArODc4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0
aG91dEZpbmFsaXppbgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVs
KCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwg
UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1f
bGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigq
dGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZv
cnQpKTsKKyAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3
IExpbmtCdWZmZXIoKnRoaXMsIG1fdW5saW5rZWRDb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2Zp
bGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4
OTcsOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsK
ICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0
Y2hSZWNvcmQ6OkNoYXJhY3RlcjogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAg
ICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxp
bmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
ICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVz
W3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0
Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZz
ZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gMDsgaiA8IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9m
ZnNldHNbal07CkBAIC04NzEsOCArOTEwLDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29u
c3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBT
dHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwog
ICAgICAgICAgICAgYXV0byBjdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3
aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNl
dF0pOwogICAgICAgICAgICAgZm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9v
ZmZzZXRUYWJsZS52YWx1ZXMoKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9
IGxvY2F0aW9uLm1fYnJhbmNoT2Zmc2V0OwpAQCAtOTA2LDMyICs5NDUsMzUgQEAgdm9pZCBKSVQ6
OmxpbmsoKQogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3Jk
LmNhbGxlZSk7CiAgICAgfQogCi0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywg
cGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRj
aEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBw
YXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hC
dWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZl
cik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwot
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAg
ZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisgICAgYXV0byBm
aW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8m
IGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8t
PnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2Vu
Lm1fc3RhcnQpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0
aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25l
KTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2Nh
dGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5t
X3Nsb3dQYXRoQmVnaW4pOworICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1f
Z2V0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX2dldEJ5SWRzV2l0aFRoaXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAg
IGZpbmFsaXplSUNzKG1fcHV0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsK
KyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRz
KTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3Rh
bmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKIAogICAg
IGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0g
ICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZv
OwotICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0
YXJ0KSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxM
aW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87Cisg
ICAgICAgIGluZm8uZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKLSAgICB7
Ci0gICAgICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVs
cy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmIChtX2xhYmVsc1ti
eXRlY29kZU9mZnNldF0uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRl
ci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIu
ZmluYWxpemUoKSk7CisgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7Cisg
ICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9s
YWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1ti
eXRlY29kZU9mZnNldF0uaXNTZXQoKSkKKyAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFw
cGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAKICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYg
Kzk4MiwzNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1f
Y29tcGlsYXRpb24pKSB7CisgICAgICAgIC8vIE9PUFM6IG1ha2UgYnl0ZWNvZGUgcHJvZmlsZXIg
a25vdyBhYm91dCB1bmxpbmtlZCBDQj8KICAgICAgICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxl
QmFzZWxpbmVGb3JQcm9maWxlcigpKQogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9y
dFRvUHJvZmlsZXIobV9jb21waWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBt
X3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAq
bV9jb21waWxhdGlvbik7CisgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRk
Q29tcGlsYXRpb24obV9wcm9maWxlZENvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOwogICAgIH0K
IAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkK
ICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5N
YXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAg
ICAgCisgICAgLy8gT09QUzogTWFrZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUg
dGhhdCBrbm93cyBhYm91dCBVbmxpbmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQ
dHJUYWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0Vu
dHJ5UHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5n
KENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkp
LmRhdGEoKSk7CisgICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmco
Q29kZUJsb2NrV2l0aEpJVFR5cGUobV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0
clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVj
dEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsK
KyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdp
dGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1v
dmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3Mg
PSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtl
ZFN0dWJJbmZvcyA9IFdURk1vdmUobV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2Rl
LT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAg
bV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFw
QnVpbGRlci5maW5hbGl6ZSgpOworICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElD
cyk7CisgICAgbV9qaXRDb2RlLT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBv
b2wpOwogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigi
SklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCBy
ZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5l
eGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9n
RigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRD
b2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIo
KSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAK
LUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4
LDI1ICsxMDIxLDIxIEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIK
IAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAK
LSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1f
bG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9j
azo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsK
LSAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFu
ZGxlcihpKTsKLSAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0g
ICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmlu
ZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4oKTsKLSAgICB9CisgICAgLy8gT09QUzogRG9uJ3QgdGhpbmsgdGhpcyBzaHJpbmsg
aXMgcmVhbGx5IGRvaW5nIGFueXRoaW5nIGFueW1vcmUuIFZlcmlmeS4KKyAgICAvL3sKKyAgICAv
LyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAg
IC8vICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5r
TW9kZTo6TGF0ZVNocmluayk7CisgICAgLy99CiAKKyAgICAvLyBPT1BTOiBtX3BjVG9Db2RlT3Jp
Z2luTWFwIHNob3VsZCBsaXZlIG9uIEJhc2VsaW5lSklUQ29kZSBmb3IgYmFzZWxpbmUgY29kZWJs
b2Nrcy4KICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkKLSAgICAgICAgbV9jb2RlQmxvY2st
PnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOworICAg
ICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1f
cGNUb0NvZGVPcmlnaW5NYXApKTsKIAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRl
Y29kZVdvcmRGb3JCYXNlbGluZUpJVC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+
KG1faml0Q29kZS0+c2l6ZSgpKSAvCi0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2Rl
QmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+
KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2Rl
QmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVC
bG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25O
dWxsKCkpOwogCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwx
MSArMTA0NywxMSBAQCBzaXplX3QgSklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
bGlua0J1ZmZlci0+c2l6ZSgpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVD
b21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJ
VDo6cHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKIHsKICAgICBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUo
KTsKICAgICBjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0
dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhy
ZWFkKGNvZGVCbG9jayk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhh
bmRsZXJzKCkKQEAgLTEwNDIsMTggKzEwOTEsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFBy
ZXBhcmF0aW9uQmVmb3JlQwogICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vz
c0xvZ0VudHJpZXMoKm1fdm0sICJQcmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwog
fQogCi11bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJs
b2NrKiBjb2RlQmxvY2spCiB7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2Rl
QmxvY2stPm51bUNhbGxlZUxvY2FscygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+
bnVtQ2FsbGVlTG9jYWxzKCkpKSk7CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291
bnRGb3JGcmFtZVBvaW50ZXJPZmZzZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpz
dGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6
OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1
cm4gZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7
Cit9CisKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayog
Y29kZUJsb2NrKQogewogICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJl
Z2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpz
dGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJu
IHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOwor
fQorCiBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7
CiAgICAgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NF
UlRfSklUX09GRlNFVChhY3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVh
bCA9PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxu
IiwgI2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50
PihhY3R1YWwpKTsKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERp
c2Fzc2VtYmxlci5oIgpAQCAtNDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgog
I2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFj
ZUpJVC5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2lu
TWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVS
ZWYuaD4KQEAgLTE0OSwxNCArMTUxLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAg
ICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxv
Y2F0aW9uOwotICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5s
aW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OwogICAgIH07CiAKICAgICB2
b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJ
VF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgY2xh
c3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAg
ICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3Mg
SklUU3R1YkNhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEsNiAr
MTczLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRp
c3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNl
dC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNl
dCA9IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBw
dWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUlu
ZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAg
ICAgIH5KSVQoKTsKQEAgLTE3OCwyOCArMTgyLDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2
b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQp
OwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAg
ICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsK
ICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5U
aHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRp
YyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNl
dCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQo
dm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7Cisg
ICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2
YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0
aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAg
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7
CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJs
b2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9j
ayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcs
IFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFNlY29uZHMgdG90YWxDb21waWxlVGltZSgpOwogCisgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRh
YmxlR1BSOworICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX2NvbnN0YW50c0dQUiA9
IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5r
UGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAgICAg
IHZvaWQgbGluaygpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShK
SVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVD
b21waWxlKENvZGVCbG9jayosIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAvLyBB
ZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4K
ICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24pCkBAIC0yMjMsNiArMjMyLDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAg
ICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZz
ZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAg
ICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZz
ZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAg
ICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNl
dCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBl
bmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSwg
Y29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnLCBj
b25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVibGlj
OgorICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJS
ZWcpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcp
OworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQ
UlJlZyk7CisKKyAgICAgICAgdm9pZCBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUo
R1BSUmVnIHJlc3VsdCA9IHJlZ1QwKTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1
bXAganVtcFRvSGFuZGxlcikKICAgICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVj
a3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpAQCAtMjU4LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2Rl
SUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFy
YXJncwogICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAg
ICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOwor
ICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6
b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1
Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMK
LSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5m
byopOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9w
JiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBi
b29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwo
Y29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4Nywx
NCArMzIyLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJp
ZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFy
cmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBl
bWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJh
cnJpZXIoR1BSUmVnIG93bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUg
dmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUg
Zm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9p
ZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAg
IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJl
Z3MpOworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUm
LCBHUFJSZWcpOworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2Rl
PiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOwor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9p
ZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKQEAgLTMwNyw2ICszNDMsMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
UmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIp
OwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklE
IGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hH
UFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVnaXN0ZXJJ
RCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKGNvbnN0IEJ5dGVjb2RlJiwgcHRyZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lz
dGVySUQgc2NyYXRjaEdQUik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAgLTU5Miw3ICs2MzIsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CkBAIC02MjYsMTQgKzY2NSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdm9pZCBlbWl0
SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSk7Ci0gICAgICAgIHZvaWQg
ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUpOworICAg
ICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlKTsKIAog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0Nv
bW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
LSAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUp
OworICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzLCBHUFJSZWcpOworICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJl
c29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVD
bG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwogICAgICAgICB2b2lkIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJl
Kiogc3RydWN0dXJlU2xvdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY0NSw3ICs2ODQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFy
KFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lk
IGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlm
eVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpOworICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0
ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEds
b2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0
Y2hwb2ludFNldCopOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0
KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0Kik7CkBAIC02NTQsNiArNjkzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0
dWFsUmVnaXN0ZXIpOwogCisgICAgICAgIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVy
KTsKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsK
ICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjk1
LDI2ICs3MzUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAhKHJlc29s
dmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIg
fHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKICAgICAgICAgfQogCi0jZGVmaW5lIERFQ0xB
UkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3Bl
XyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZF
X1RZUEUoREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9H
RVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKTsKLQotICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
dGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgLy8gTW9kdWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZp
Y2llbnQgdG8gZW1pdCBpbmxpbmUgdGhhbiB1c2UgYSB0aHVuay4KLSAgICAgICAgICAgIC8vIFJl
c29sdmVkQ2xvc3VyZVZhciBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9w
X3Jlc29sdmVfc2NvcGUuCi0gICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNv
bHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAgICAgfQot
Ci0jZGVmaW5lIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwK
LSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3Bf
cmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9S
X0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5k
ZWYgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJl
c29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1
bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1l
KTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlw
ZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwog
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1
ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CkBAIC03NTksMTAgKzc4MSwxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4p
OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJs
ZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsPgpAQCAtODIwLDIwICs4NDIsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBPcGVyYXRp
b25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0
aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxs
PgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBP
cGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBh
cmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5
dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwg
QXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVy
YXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRp
b24sIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uLCByZXN1
bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlw
ZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZS4uLiBB
cmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5
cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShN
ZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBC
eXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzRm9y
SW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5cGU+KHRhcmdldCwgYXJncy4uLik7Ci0gICAgICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRo
UHJvZmlsZShtZXRhZGF0YSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zm
c2V0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKEdQUklu
Zm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOwogICAgICAgICB9CiAKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4K
QEAgLTkxOCwyNSArOTQwLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1p
emVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBt
X2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2Zp
bGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAg
Ym9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2Fu
QmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFi
bGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQg
b2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAg
ICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5k
aWYKIAorICAgICAgICB2b2lkIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29s
UmVnaXN0ZXJzKCk7CisKKyAgICAgICAgdm9pZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisK
ICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRp
YyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlv
dSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBu
ZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBz
bG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwg
Z2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4K
LSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2Zp
bGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAogICAgICAgICBJbnRlcnByZXRlciog
bV9pbnRlcnByZXRlcjsKIApAQCAtOTYzLDkgKzk4MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxT
d2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5z
aWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEJp
bmFyeUFyaXRoUHJvZmlsZT4gbV9jb3BpZWRBcml0aFByb2ZpbGVzOwotCiAgICAgICAgIEp1bXBM
aXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNr
c1dpdGhDYWxsRnJhbWVSb2xsYmFjazsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBA
IC05OTksMTEgKzEwMTMsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29u
c3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0
cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9w
dGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAg
ICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+
IG1faml0Q29kZTsKKyAgICAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVs
bHB0ciB9OworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7
IG51bGxwdHIgfTsKKworICAgICAgICBNYXRoSUNIb2xkZXIgbV9tYXRoSUNzOworICAgICAgICBS
ZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENvZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQ
b29sIG1fY29uc3RhbnRQb29sOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1f
Z2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCkgfTsKKyAgICAgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7
CisgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAg
IEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAg
ICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAg
ICAgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXM7CisKKyAgICAgICAgc3RydWN0IE5vdEFDb2RlQmxvY2sgeyB9IG1fY29kZUJsb2NrOwogICAg
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSAr
MjkyLDEwIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9w
MikpIHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBh
cmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0zMjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAg
ICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25a
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0zNzIsNyArMzc1LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgIH0KIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qy
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTU3Myw3ICs1NzcsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgCiAKICAgICBlbWl0TG9hZChvcDEs
IHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdU
NCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25a
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjIsOCBAQCB2
b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0
X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAg
SklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmls
ZSk7CisgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29k
ZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRl
PigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3Mu
YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRk
KGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBi
ZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9w
ZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0
ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9w
ZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJv
ZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAg
ICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsK
ICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMp
OwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUs
MTAgKzk1MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAg
ICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhp
cywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUp
IHsKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJp
dGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAg
ICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0
aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3Mp
OwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUsMTAgKzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRN
YXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQu
aXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0
UmVncyk7CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsK
ICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdz
LCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdo
dFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwxMyArMTA2MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUVW5hcnlNYXRoSUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBh
dGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pN
aWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJ
QykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pN
aWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3Ms
IFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmls
ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElD
KSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihy
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1Bh
dGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwxMyArMTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRo
UmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pK
TWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3Rl
ZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0
LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0g
ZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVw
YXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRj
aEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0
ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRv
IHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExNjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQot
ICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmls
ZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERpdj4oKS5tX3Byb2ZpbGVJbmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFu
ZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlw
cGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkp
OwpAQCAtMTIxMSw4ICsxMjIwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3Ry
dWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
TXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE11bD4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUTXVsSUMqIG11bElD
ID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlv
blRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElD
RmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5i
aW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tX3Byb2Zp
bGVJbmRleCk7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFy
aXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1
Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAko
cmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRl
clJlZ2lzdGVyLCByZWdUMSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJl
c3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSksIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFs
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTksNyAr
MjU5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAg
ZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92
bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0
Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAg
ICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24g
PSBsYWJlbCgpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9p
bnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAt
MzQxLDcgKzM0MSw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4K
ICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykK
ICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzU0LDcgKzM1Myw3IEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MjAx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5o
IgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50Lmgi
CkBAIC00NCw3ICs0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAg
LTUzLDE4ICs1NCwxOCBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBv
cF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAg
ICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJ
RCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGls
ZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3Bv
aW50KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSAtc3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29k
ZSwgY2hlY2twb2ludCkpOwogCisKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYg
c2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNl
dEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5
UHJvZmlsZUZvcihtZXRhZGF0YSwgY2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1
cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENh
bGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86
Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5T
dHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgs
NyArNzksNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxs
X3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwg
T3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVw
RnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVl
ID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9
IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRp
b25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9w
ZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlv
bihzaXplT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24s
IHJlZ1QwLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVt
aXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJl
Z1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
ICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNp
emVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQg
KzEwMywxNiBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAg
ICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7
CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJn
c0ZyYW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09m
ZnNldCwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVy
YXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zm
c2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8g
UHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMy
KGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsK
LSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAg
ICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsK
KyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0g
YnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVz
cyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkpKTsKICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlh
bGl6ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEzMSwxNiBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxF
dmFsKGNvbnN0IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29u
c3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRk
cmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMSk7CisgICAgc3RvcmVQ
dHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNh
bGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7
Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25DYWxsRXZhbCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOwogCiAgICAg
ZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogCkBAIC0xNDgsNyArMTUyLDcgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+
KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5m
byhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9
IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAg
ICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwogCiAgICAgaW50
IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKQEAgLTE1Niw0MyArMTYwLDQ3IEBA
IHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAKICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lz
dGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSks
IHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Cisg
ICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAg
ICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1
bnNpZ25lZCkKLXsKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtl
ZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KSB7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxD
YWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8sIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZGV4KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5m
b0NvbnN0YW50KQogewotICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAg
IHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZs
ZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAg
ICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVT
aHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRh
PigpOworICAgIHNodWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwor
ICAgIHNodWZmbGVEYXRhLT5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpOworICAgIHNodWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUklu
Zm86Om51bWJlclRhZ1JlZ2lzdGVyOworICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAg
ICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2Yo
UmVnaXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7
CisgICAgc2h1ZmZsZURhdGEtPmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNo
dWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAg
ICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAg
ICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUu
bV9hcmd2LAogICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZm
bGVEYXRhLmNhbGxlZSA9Ci0gICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRh
Rm9ybWF0SlMpOwotICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2Nv
ZGVCbG9jayk7Ci0gICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Cisg
ICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRh
Rm9ybWF0SlMpOworICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJl
Z2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsK
IAotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0
aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0g
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRh
aWxDYWxsKCk7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7
CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRh
SUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlcigqdGhpcywgKnNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9
KTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNocmlu
a1RvRml0KCk7CisgICAgaW5mby0+ZnJhbWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURh
dGEpOworCiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9u
OwogICAgIApAQCAtMjE4LDE0ICsyMjYsMjUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29u
c3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29k
ZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRl
ciByZXR1cm4uCiAgICAgKi8KLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAg
IGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9j
ay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29t
cGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlua0lu
Zm8qIGluZm8gPSBudWxscHRyOworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0Nv
bnN0YW50ID0gVUlOVF9NQVg7CisgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgewor
ICAgICAgICBpbmZvID0gbV91bmxpbmtlZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENh
bGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25zdGFu
dCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5m
bywgaW5mbyk7CisKKyAgICAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkg
PT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAgICAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0Nv
bnN0YW50ID0gaW5mb0NvbnN0YW50OworICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRl
Y29kZSwgaW5mb0NvbnN0YW50KTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgot
ICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3Ry
dWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVj
b2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxv
Y2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSArIFRhZ09mZnNldCkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUs
IHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAtMjM0LDE2ICsyNTMsMTIgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2Fs
bEV2YWwoYnl0ZWNvZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29t
cGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0
VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0g
aW5mbzsKLQotICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5r
SW5mb0luZGV4KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxs
TGlua0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9h
ZENvbnN0YW50KGluZm9Db25zdGFudCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBb
Jl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxs
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNs
b3cocmVnVDIpOwogICAgICAgICB9KTsKQEAgLTI1MywxMyArMjY4LDEzIEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVn
VDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0g
Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAg
ICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRo
cyk7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVM
b2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5
dGVjb2RlKTsKQEAgLTI3MywyMCArMjg4LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJl
bCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50
LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsK
LSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5m
by0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0
YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlzLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdp
dGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBA
IC0zOTUsMTcgKzQxMCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0
IEluCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMt
Pm5leHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAg
ICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQpAQCAtNDE2LDEwICs0NDQsOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1Qw
OworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJ
Zk5vdENlbGwoaXRlcmF0b3JHUFIpKTsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90
T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBAIC00MzIsMTkgKzQ1OCwxNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRv
ckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihp
ZGVudCkucmF3Qml0cygpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIG1vdmUoaXRlcmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNv
ZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiAKICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmpl
Y3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JS
ZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BS
MCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00NTIsNyArNDc2LDYgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlG
YXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lk
dGgoKSkgewogICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zh
c3RfbmFycm93OwpAQCAtNDcwLDUwICs0OTMsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0
b3JfbmV4dChjb25zdCBJbgogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRo
aXMpOwotICAgIG9yOChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9u
TW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0
YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRl
cmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0
aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykp
LCByZWdUMCk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0
b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9u
TW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9w
SXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBh
ZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZh
bHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsK
LSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0g
cmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJz
dCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBz
dGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBw
cmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwot
ICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJl
Z3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5
TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVS
ZWdzKGRvbmVHUFIpLCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0
eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhk
b25lR1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlk
OworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAg
IGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQ
UlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsK
KyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3Vs
dEdQUik7CisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9y
KHVzZWRSZWdpc3RlcnMpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3Jh
dGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgZ2xvYmFs
R1BSID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29u
c3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAg
ICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVS
ZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgICAgICBKdW1wTGlz
dCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQ
UiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxHUFIpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29u
c3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFs
dWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiks
IHJlZ1Q0LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAg
ICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
KTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsK
KyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBy
ZXN1bHRHUFIgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92
YWx1ZSwgcmVzdWx0R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAg
ICAgfQpAQCAtNTI3LDU5ICs1NzcsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X25leHQoY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJD
YWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7
CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAg
ICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90
T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUu
aW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21f
Z2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChp
dGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmpl
Y3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRH
UFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAg
ICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUp
PihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBu
b3RPYmplY3QubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJv
d0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RP
YmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0
ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAog
ICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZh
bHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlk
c1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNz
KEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShp
dGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwg
QWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihp
ZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJl
Z2lzdGVyU2V0LmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBERkcgewpAQCAt
MTU5LDEwICsxNjAsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJ
VFR5cGUgaml0VHlwZSkKICAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2Vs
aW5lQ29kZShqaXRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
IU9wdGlvbnM6OnVzZURhdGFJQygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICByZXR1cm4gT3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJ
VC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5m
by5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJh
Z2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVC
bG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlw
ZShqaXRUeXBlKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2Nr
LT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygp
OworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFj
Y2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5m
by0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lz
dGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVm
ZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0
YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZv
LT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1f
ZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcs
NiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAg
bV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxK
SVRTdHViUm91dGluZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0
LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIp
Cit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENv
ZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZv
LCBzdHViSW5mb0dQUik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJ
bmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91
dGluZVB0clRhZyk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5l
cmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5
cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdp
c3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1Yklu
Zm9HUFIpCkBAIC0xMTAsNyArMTE4LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJ
ZEdlbmVyYXRvcgogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9H
UFIsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJs
b2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lz
dGVycywgYmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQotICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhw
cm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0
aC5pbXBsKCkpCisgICAgLCBtX2lzTGVuZ3RoQWNjZXNzKGNvZGVCbG9jayAmJiBwcm9wZXJ0eU5h
bWUudWlkKCkgPT0gY29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUudGFnR1BS
KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIK
KyNpbmNsdWRlICJKSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCkBA
IC0zOCwxMSArMzksMTE0IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRp
ZmllcjsKIGNsYXNzIENhbGxTaXRlSW5kZXg7CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7
CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvOwogCiBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5
cGUgOiB1aW50OF90OwogCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFz
ZWxpbmVEZWxCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBH
UFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BS
SW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3Qg
QmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4g
bGlua2luZyBhIENvZGVCbG9jayBhbmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRC
eVZhbCBTdHViSW5mby4KKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQg
PT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0
KHN0dWJJbmZvID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKwor
c3RydWN0IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvdG8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307
CisKK3N0cnVjdCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2Ug
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBH
UFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9
OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpy
ZWdUMTsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQ
UkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5m
bzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86
OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6
cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19h
c3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KGJyYW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOwor
fTsKKwogY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJ
VElubGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9CkBAIC02MiwxNSArMTY2LDIxIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGZpbmFsaXplKAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZm
ZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3Rh
bnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBtX3VubGlua2VkU3R1YkluZm8geyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSB9OworCiBwcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBK
SVRUeXBlIG1faml0VHlwZTsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAor
cHVibGljOgorICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1Bh
dGhCZWdpbjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsgLy8gT09QUzogbWFrZSByZXBvcnRD
YWxsIHBhc3Mgc29tZXRoaW5nIGluIHdlIGNhbiB1c2UgZm9yIHRoZSBub24tQ1RJIHRodW5rcyBi
dWlsZHMuIAogfTsKIAogY2xhc3MgSklUQnlJZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvciB7CkBAIC05OCw3ICsyMDgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1
ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zdGFydDsKK3B1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBt
X3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTEzMiw4ICsyNDIsOCBAQCBwdWJsaWM6CiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3Io
Ci0gICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgs
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBK
U1ZhbHVlUmVncyBiYXNlLAotICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJ
bmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2Rl
QmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1
ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVn
IHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFz
dFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKICAgICAKQEAgLTE2MywxMSArMjczLDkgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZh
dGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTE5MSw4ICsyOTksNiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAot
cHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICsz
MjIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTI0MSw4ICszNDUsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9z
dGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsK
IH07CiAKQEAgLTI3Nyw4ICszNzksNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExp
bmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVm
ZmVyKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTMwMiwxMSArNDAyLDkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0
aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsK
ICAgICBKU1ZhbHVlUmVncyBtX3Jlc3VsdDsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1w
OwogfTsKIApAQCAtMzMwLDggKzQyOCw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVy
YXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBt
X3Nsb3dQYXRoSnVtcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFu
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMp
Cit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzSW50MzIoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmly
dHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Okxp
bmtUaW1lQ29uc3RhbnQpIHsKKyAgICAgICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQg
dGhhdCBhbGwgbGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7
CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICBy
ZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3Jj
KSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJl
dHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBm
cm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJ
VDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
ZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29k
ZT4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZh
bHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAg
ICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5k
aWYKICAgICByZXR1cm4gY2FsbDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlv
biwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVu
Y3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVH
UFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhy
ZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0
dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29k
ZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZh
bmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVj
b2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0g
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhh
c0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVj
dGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNv
ZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVj
b2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2tw
b2ludExhYmVscy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAs
NyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVCht
X3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0No
ZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAK
ICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgp
OwpAQCAtMjkzLDI5ICszMTgsMzQgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50
KEFic3RyYQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIo
VmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQg
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBK
U1ZhbHVlUmVncyB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsK
LQotICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tl
dCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMp
OwotI2Vsc2UKLSAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lz
ZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsK
LSAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXls
b2FkKTsKLSAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRh
Zyk7Ci0jZW5kaWYKLX0KKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1l
Q29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Cit9CisKKy8vIE9PUFMKKy8vaW5saW5lIHZvaWQg
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBK
U1ZhbHVlUmVncyB2YWx1ZSkKKy8veworLy8gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmco
KSk7CisvLworLy8gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBv
bmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAorLy8gICAgLy8gc3RvcmUuCisv
LyNpZiBVU0UoSlNWQUxVRTY0KQorLy8gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9m
aWxlLm1fYnVja2V0cyk7CisvLyNlbHNlCisvLyAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVBy
b2ZpbGUubV9idWNrZXRzKTsKKy8vICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVz
Y3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOworLy8gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwg
JmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOworLy8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShP
cDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
ICNlbmRpZgpAQCAtMzIzLDI0ICszNTMsMjUgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3Rk
Ojppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJ
ZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgot
aW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygp
KQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2Zp
bGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7Cisg
ICAgcHRyZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRl
Y29kZT4obV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNl
dE9mRmlyc3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0
YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwg
R1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJv
ZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7Ci19CisvL2lubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJl
c3VsdFJlZykKKy8veworLy8gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUs
IEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworLy99CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFk
YXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBt
ZXRhZGF0YSwgR1BSUmVnIHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgor
aW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgR1BSUmVnIHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCkBA
IC0zNjAsNiArMzkxLDIxIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVcKICAgICB9CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lk
IEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIs
IFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7CisgICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMlRv
TWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
UmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit7CisgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9m
ZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1
Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3JhdGNoR1BSKTsKK30KKwogQUxXQVlTX0lOTElORSBpbnQz
Ml90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAg
ICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKQEAgLTM4MCw3ICs0
MjYsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJ
RCB2YWx1ZSkKIHsKICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXIocmVnKTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9v
bCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAg
bG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9
IGVsc2UKICAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKQEAgLTQ5
Niw3ICs1NDIsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0CiAK
IGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdp
c3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgewor
ICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQo
KSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUw
Niw3ICs1NTIsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAK
IGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdp
c3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25v
d25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYg
KHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAg
ICAgICBlbHNlCkBAIC01MTQsMTEgKzU2MCw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3Bl
cmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5p
c0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJf
dCYgY29uc3RhbnQpCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKQEAg
LTU0NCwxMSArNTg1LDE3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFs
UmUKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAg
ICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgc3dp
dGNoIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bihzcmMpKSB7CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2Vy
OgorICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAg
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
c3JjKTsKICAgICAgICAgICAgIG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRz
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgZHN0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU2NiwxMSArNjEz
LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0
dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigp
OwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20s
IGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01OTUsNyArNjM3LDcgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVn
KQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICgh
aXNLbm93bkNlbGwodlJlZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWcpOwogfQogCkBAIC02MzcsMzAgKzY3OSw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVt
cFRhcmdldChjb25zdCAKIHsKICAgICBpZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0
OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlv
bik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8o
T3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQotewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1f
bWV0YWRhdGFJRCArIDE7IC8vIEhhc2hNYXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBh
dXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRHZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0
ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQ
dXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdl
dFB1dEluZm9zLmFkZChrZXksIGdldFB1dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0
UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5F
IEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRl
Y29kZSkKLXsKLSAgICB1aW50NjRfdCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFy
eU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29k
ZS5tX21ldGFkYXRhSUQpOwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmls
ZXMuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQ
cm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKLSAgICBtX2NvcGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9m
aWxlKTsKLSAgICByZXR1cm4gYXJpdGhQcm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29k
ZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CkBAIC02ODEsNiArNzAwLDYxIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUg
SklUOjplY21hTW9kZTxPcFAKICAgICByZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2Fk
UHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwg
R1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91
bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNv
ZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2Fk
MzIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgp
Lm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
b2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQs
IEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDgoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29k
ZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBl
LCB0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0
YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBv
ZmZzZXQpCit7CisgICAgc3RvcmU4KHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2Rl
KSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBB
ZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBv
aW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0
LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV91bmxpbmtlZENv
ZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zm
c2V0KSwgc19tZXRhZGF0YUdQUiwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bG9hZENvbnN0YW50KEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY29uc3RhbnRJbmRleCwg
R1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19jb25zdGFudHNHUFIsIHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4oY29uc3RhbnRJbmRleCkgKiA4KSwgcmVzdWx0KTsKK30KKwor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZEdsb2JhbE9iamVjdChHUFJSZWcgcmVzdWx0KQor
eworICAgIGxvYWRDb25zdGFudChtX2dsb2JhbE9iamVjdENvbnN0YW50LCByZXN1bHQpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJl
Z2lzdGVyIGNvbnN0YW50LCBHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNv
bnN0YW50LmlzQ29uc3RhbnQoKSk7CisgICAgLy8gT09QUzogTWF5YmUgbWFrZSB0aGlzIG1vcmUg
ZWZmaWNpZW50PworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zm
c2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7CisgICAgbG9hZDY0KEFkZHJl
c3MocmVzdWx0LCBjb25zdGFudC50b0NvbnN0YW50SW5kZXgoKSAqIHNpemVvZihKU1ZhbHVlKSks
IHJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNh
bGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAK
ICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENs
ZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhj
ZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTk5Nyw3
ICs5OTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAKICAg
ICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhp
cyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5h
cHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9m
ZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVD
VElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTAyNCw3ICsxMDI0LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFi
bGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4K
ICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0
YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6
Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJs
ZSk7CiAKQEAgLTEwNDIsNyArMTA0Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJp
bmcoY29uc3QgSW4KIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGlu
YXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFi
bGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0
cmluZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9u
IDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cu
aCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBA
IC01NCwxMSArNTYsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9u
KgogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGlmIChz
cmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAg
ICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJl
c3NGb3IoZHN0KSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgLy8gT09QUzogbW9zdCAiT3RoZXIi
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudHMgY2FuIGp1c3QgYmUgZ3JhYmJlZCBm
cm9tIHRoZSBVbmxpbmtlZENvZGVCbG9jay4gSXQncyBqdXN0CisgICAgICAgIC8vIGEgY291cGxl
IHR5cGVzIHRoYXQgY2FuJ3QuIENyZWF0ZSBhbiBhYnN0cmFjdGlvbiBmb3IgdGhhdC4KKworICAg
ICAgICBzd2l0Y2ggKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHNyYykpIHsKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
OkludGVnZXI6CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6
IHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRD
b25zdGFudChzcmMpOwogICAgICAgICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUo
dmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3Jj
LCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC04NywzNyArMTAwLDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVj
dGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRh
Lm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9j
YXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9u
VmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUs
IEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQg
cmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsK
ICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVj
dHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAg
ICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBl
bWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxs
b2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZs
eSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVT
dG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAg
bXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAg
IGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6
Om9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1
cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBhdXRv
IGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgZW1pdEFsbG9jYXRlSlNP
YmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywg
c3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgbG9h
ZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRS
ZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBSZWdpc3RlcklE
IHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RB
bGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOworICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVj
dHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIApA
QCAtMTMxLDcgKzE0Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFu
Y2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsK
IAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5j
ZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJy
YW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikp
KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKIApA
QCAtMTU0LDMwICsxNjYsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBM
b2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkp
IGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3
ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZv
ciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm90b0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVy
czo6cHJvdG87CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3RvLCBwcm90b0dQUik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUg
Y2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdl
dF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSwgcHJvdG8pOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwg
dmFsdWUpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8p
OwogCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1
ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDUsCi0gICAgICAgIHJlZ1Qz
LCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgcmVzdWx0R1BSLAorICAgICAgICB2YWx1ZUdQUiwKKyAgICAg
ICAgcHJvdG9HUFIsCisgICAgICAgIHN0dWJJbmZvR1BSLAorICAgICAgICBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxLCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNj
cmF0Y2gyKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6Okluc3RhbmNlT2Y7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbnN0YW5jZU9m
cy5hcHBlbmQoZ2VuKTsKLSAgICAKKwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIApAQCAtMTkyLDE0ICsyMTIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSQogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9u
PGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBH
UFJJbmZvOjpub25BcmdHUFIwLCByZWdUMiwgcmVnVDEpOwotICAgIH0gZWxzZQotICAgICAgICBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6c3R1YkluZm8gPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2Vs
aW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWUgPT0gYXJndW1lbnRHUFIyKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG8gPT0gYXJndW1lbnRH
UFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4o
QWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3Rv
bShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0yNDAsNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAg
ICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM3NCw3ICsz
OTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiAjZWxzZQpA
QCAtMzgzLDkgKzQwMiw5IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlv
bioKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxl
ckdlbmVyYXRvcihWTSYpCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKIAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0
UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC00MTEsNyArNDMwLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTQzNCw5ICs0NTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNv
bnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDY1LDggKzQ4NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rp
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4
cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIp
LCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIo
dmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBh
ZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyAr
NTAxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8v
IGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcg
YXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1h
eSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGlj
aCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAg
LTUxOSw3ICs1NDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVj
CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIo
RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWln
biA9IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU2NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFf
bnVsbChjb25zdCBJbnN0cnUKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRk
SnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdl
dCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApA
QCAtNTgyLDE1ICs2MDMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVs
bChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFs
dWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRl
Y29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxs
KCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0
cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsK
LSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAg
IGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwg
cmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwg
T3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2NDQs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5j
aElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsK
ICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0
aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY2MSw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzE2
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBj
YWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1Qw
KTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzcz
Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93
blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtNzIwLDcgKzc0Miw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FW
RVNfUkVHSVNURVJTID4gMAogICAgIGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1
bWVudEdQUjApOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlckltcGwoYXJndW1lbnRHUFIwKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYXJndW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29u
c3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyAr
OTMwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5NDEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5z
dHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1Qy
LCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkzMSw3ICs5NTUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZS
ZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEs
NyArOTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGlu
ayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NzgsNyArMTAwMiw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdU
MCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk5Myw3ICsxMDE3LDEwIEBAIHZvaWQgSklUOjpl
bWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywg
Vk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAg
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxG
cmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAg
ICAvLyBPT1BTOiBUaGlzIGlzbid0IGVsZWdhbnQuIFdoeSBhcmVuJ3QgdGhleSBpbiB0aGUgY2Fs
bGVlIHNhdmUgYnVmZmVyLiBJIGd1ZXNzIGJlY2F1c2Ugd2UgY2FuIE9TUiBleGl0IGhlcmU/Cisg
ICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKIAog
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xl
YXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNl
cHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwy
MyArMTAzOCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAg
ICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIs
IGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1
OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0
YWRhdGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygp
KQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JF
bnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50
ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygp
KTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRl
ckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkp
OwogICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJu
VmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5r
KHRoaXMpOwotICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAg
ICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYg
cHJvZmlsZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAg
ICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxl
Jj4ocHJvZmlsZSksIHJlZ3MpOwotICAgICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiB9CiAKQEAgLTEwNTMsOCArMTA2OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0
ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNo
IGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRl
Y29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAg
IGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEz
ICsxMDk2LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAg
ICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhp
cyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVu
ZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0
LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRh
YmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJX
aXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4
LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEwOTksMjAgKzExMTUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUg
PSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBz
d2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29u
c3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3
aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3
aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5s
aW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVn
VDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCB0YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJn
dW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJs
b2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVn
VDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nh
c3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVz
dHMubGluayh0aGlzKTsKQEAgLTExMzMsNyArMTE1MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Vx
X251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNv
bXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1t
ZWRpYXRlID0ganVtcCgpOwpAQCAtMTE0OCw3ICsxMTY2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTExNjYsNyArMTE4Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxs
KGNvbnN0IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQ
dHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRp
YXRlID0ganVtcCgpOwpAQCAtMTE4OCwxMiArMTIwNSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNl
IHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHph
cCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAg
Ly8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVf
dCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91
bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0
SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0
ZUJhcnJpZXIobV9jb2RlQmxvY2spOworICAgIAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdU
MCk7CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEyMTIs
NyArMTIzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAg
ICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0xMzEwLDIzICsxMzI5LDE5IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29w
X3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1
Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJ
RDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7
CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2Fk
MzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCBy
ZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVU
aGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAg
ICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1f
Y2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVn
aXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0g
cmVnVDA7CkBAIC0xMzQyLDcgKzEzNTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhjb25zdCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJh
cmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9u
OjpyYXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVE
YXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxl
KCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0
dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBs
b2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNo
ZWRDYWxsZWUoKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxl
Q2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1Q
dHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAg
ICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzODcsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1
ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcg
KzEzOTgsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0
ZWRJbW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcgKzE0MTEsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
cmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxNDIy
LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEw
ICsxNDM3LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0
YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1
bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE0MzAsNyArMTQ1MCw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9v
cF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBpZiAoVU5MSUtF
TFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBt
X2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkp
IHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29w
c0ZvckZ1enppbmcoKSAmJiBtX3VubGlua2VkQ29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJs
ZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZt
KCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9h
ZFB0cihwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2hQ
dHIoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUlu
ZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xNDQwLDcgKzE0NjAsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAjZWxzZQogICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOwogI2VuZGlmCi0gICAgICAgIG1vdmVWYWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3By
KCkpOwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBA
IC0xNDUzLDggKzE0NzMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1CiAKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKICAgICBpZiAo
Y2FuQmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQz
MihQb3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJ
bmNyZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJs
b2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVz
cyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAg
fQogfQogCkBAIC0xNTA5LDcgKzE1MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tf
dHJhcHMoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBz
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhh
bmRsZVRyYXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTUyMiw3ICsxNTQ0LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9w
X2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNo
KFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTE1NjQsMzQgKzE1ODYsMzYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUu
bV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IGFy
Z3VtZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1f
dW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVD
ZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5
bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVj
b2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0
aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbCwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25z
dGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0g
T3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29k
ZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29k
ZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bj
b2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsK
ICAgICB9CiB9CiAKQEAgLTE2MjEsMjMgKzE2NDUsMjQgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5j
RXhwckNvbW1vbihjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2Rl
Lm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
YXJndW1lbnRHUFIxKTsKICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
biA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwor
ICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3Rh
bnQsIGFyZ3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7
CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24p
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0g
b3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9w
Y29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5
bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOwogICAgIH0KIH0KIApAQCAtMTY2NCwyOSArMTY4OSwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQg
PSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2Zp
bGUsIHJlZ1QwLCBzaXplKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQ
UjIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdB
cnJheTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVu
dEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0Fy
cmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdU
MCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmls
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAg
ICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmd1bWVudEdQUjIpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogI2Vsc2UKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNl
dE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMik7CiAgICAgZW1pdExvYWQoc2l6ZUlu
ZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBk
c3QsIHJlZ1QzLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0K
IApAQCAtMTY5NCw4ICsxNzIwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZShjbwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhh
dCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdHlwZSBwcm9maWxl
ciBpcyBlbmFibGVkLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlv
biA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRv
UHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCkBAIC0xNzc3LDIw
ICsxODA0LDI0IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAg
ICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdU
MiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4o
KTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0
Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lz
dGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0No
aWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJS
ZWcpOworICAgIHsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8g
VGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgorICAgICAgICBHUFJSZWcgc2Ny
YXRjaDJSZWcgPSByZWdUMjsKKyAgICAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgp
LCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgfQogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBs
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJl
Z1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkp
OworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
MSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1Zh
bHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0X29w
X3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CisgICAgLy8gT09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5r
ZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHVzaW5nIHRoZSBjb250cm9sIGZsb3cgcHJvZmlsZXIu
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlQ29u
dHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQ29kZUJsb2NrKTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlv
biA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMpOwpAQCAtMTg2MCw3
ICsxODkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAg
IG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAogICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJl
Z3MpOwogfQogCkBAIC0xODg2LDcgKzE5MTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJv
dG90eXBlX29mKGNvbnN0CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBh
eWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKICAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJB
cnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMu
aCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1Bh
dGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR09TUkVu
dHJ5LmgiCkBAIC0yODU1LDcgKzI4NTYsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtl
eSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwog
Ci0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0ID0gbGlua2VkVGFibGUubV9jdGlE
ZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKQEAgLTI4ODAsNyArMjg4MSw3IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29u
c3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1
bHQ7CiAgICAgaWYgKGtleS5pc0ludDMyKCkpCkBAIC0yOTAzLDcgKzI5MDQsNyBAQCBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7Ci0gICAgY29uc3Qg
U3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OwogCiAgICAgaWYgKGtleS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmluZ0ltcGwqIHZhbHVl
ID0gYXNTdHJpbmcoa2V5KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OCw3ICszNDgsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgSW52YWxpZEdQUlJlZywgSW52
YWxpZEdQUlJlZyk7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVl
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODIwMTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksOTIgKzQ5LDEwMyBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgaWYgKG1l
dGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4
TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQ29kZUJsb2NrKS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlW
YWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgeworICAgICAgICBhdXRvIG5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdENlbGwu
bGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIHNjcmF0Y2hHUFIsIGJhc2VH
UFIsIHByb3BlcnR5R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpyZXN1bHQpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6Okdl
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
ICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncywg
cmVnVDIpOwotICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQotICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgICAgICAvLyBPT1BTLiBTdXBwb3J0
IHRoaXMKKyAgICAgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAg
ICAgICAvLyAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKworICAg
ICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
R2V0QnlWYWw7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2Uo
Y29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYgKCFoYXNBbnlT
bG93Q2FzZXMoaXRlcikpCisgICAgICAgIHJldHVybjsKKworICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwor
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOwogCi0gICAg
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBtb3Zl
KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgbW92
ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0T2ZB
cnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBh
cmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0g
ICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2Rl
SW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAot
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBh
cmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVH
UFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAg
IENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAg
IHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7
CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9
PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsxNjAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAg
ICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNjAsOCArMTcxLDggQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BS
ID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIApAQCAtMTg3LDM0ICsxOTgsNDAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0
ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVn
cywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkdldFByaXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVy
KSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2
YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzI0MCwxMSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRh
ZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHks
IGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1NCwyMCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fz
c2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQ
cml2YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCkBAIC0yNjQsNyArMjc3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQu
dGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAwLDIxICszMTMsMjggQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVj
b2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgYnJh
bmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwotCiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5k
QWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAKICAg
ICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ug
c2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC0zMjQsMTcgKzM0NCwy
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1pdFdy
aXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJp
dmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIFVOVVNFRF9QQVJBTShjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJ
VFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nl
c1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIg
PSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZh
dGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzY5LDE4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2Vk
LgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwog
ICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7
CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9H
UFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0
eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1
bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6
QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5k
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0zNzAsMTkgKzM4OSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19w
cml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOworCisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNj
ZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAg
YWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCkBA
IC0zOTQsOSArNDIyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2Jy
YW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFy
Z3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVj
a1ByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtNDA2LDI0ICs0MzYsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVf
YnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09
IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Nh
bWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRp
bWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25H
ZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVj
a1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNDM1LDMwICs0NTksNDIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCBy
ZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJv
ZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBP
cDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAgICAg
SklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQpOwotICAgIGlm
IChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAg
ICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIp
OworICAgIC8vIE9PUFM6CisgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkp
KQorICAgIC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlW
YWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZh
bERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1
YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAt
NDc0LDE1ICs1MTAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRv
IGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAg
ICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAo
aXNEaXJlY3QpCkBAIC00OTgsNyArNTMxLDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBU
aGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmlj
dCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFy
Z3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRH
UFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGly
ZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlW
YWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUxMiw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdU
NTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAo
ZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9k
ZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlv
blB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU2NSw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKQEAgLTUzMywxOCArNTc1LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAg
ICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJTZXQgdXNlZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
dmFsdWUsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NF
UlQoIXVzZWQuY29udGFpbnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5z
KHJlZ1Q1KSk7CisgICAgfQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwg
dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxP
YmplY3RHUFIpOwpAQCAtNTcwLDIwICs2MTgsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3By
aXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1
ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlk
R1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0
ZUZpZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcg
U3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5
NCw4ICs2NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQ
cml2YXRlTmFtZT4oKTsKLSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29k
ZS5tX3B1dEtpbmQ7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAg
ICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4
KytdOwogCkBAIC02MDMsMTMgKzY2MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3By
aXZhdGVfbmFtZShjCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAg
IGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxE
ZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZp
ZWxkT3B0aW1pemU7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkg
YXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1Qy
OwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1
ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7Cisg
ICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworCisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQpOworICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2lu
ZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6
ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50c0dQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1c3RlZEltbVB0
cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02MjIsMTgg
KzY4NCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0MywxNCArNjk5LDE0IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
cmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1Qx
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzc0Niw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc1Nyw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0
dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJp
YnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
YXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzA5
LDcgKzc2OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAg
ICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzc5LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwg
cmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc4
OCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1
cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNo
b3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0
ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODMwLDE3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2Rl
bEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVs
ZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODU0LDE5IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIg
PSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2Rl
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5
X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODA4LDcgKzg3Niw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
QEAgLTg0NSwyMiArOTEzLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9w
ZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1
bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
Z1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
dHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZh
bDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBl
bWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJy
aWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVy
ZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTYy
LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9k
ZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQg
Kzk4MCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4
cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1p
emU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVC
eVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMDIsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIgKzEwMzcs
MzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1
bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3Ms
IHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5
cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNzEsMTcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
MTAwMywyNiArMTA5MSwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChj
b25zCiAgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVu
dEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGlj
X2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSksIGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6
ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblRyeUdldEJ5
SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMzAsMjIgKzExMTIs
MzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJl
Z3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYgKzExNDUsMTggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTY2LDYxIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBh
cmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8
fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVy
dHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlv
bkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVn
LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRD
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEp1
bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNz
KCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJy
YXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2FkOEZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEo
KSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihOb3RFcXVhbCwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVj
b2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJ
ZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNlR1BS
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAg
ICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
LQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQorICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRl
Y29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRo
aXNWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CiAKLSAgICBKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2
ICsxMjI5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsK
KyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNTAsNTcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRH
UFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVu
dEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRy
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2Fs
bCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0
aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlz
R1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBn
ZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dD
YXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQpAQCAtMTIwNiw3ICsxMzEwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQu
dGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0MSwxNiArMTM0NSwxOSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdp
dGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhp
c1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEyNjAsMjggKzEzNjcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNH
UFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2Vy
dChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRo
aXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI5MSw3
ICsxMzkyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRk
cmVzcygpOwpAQCAtMTMyOSwyMyArMTQzMCwzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
aWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVl
OwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgLy8g
SW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUg
b2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRl
ciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhC
ZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1
cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywg
cmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsK
IAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0
ZWNvZGUpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyh2YWx1ZUdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29k
ZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVj
dCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGlyZWN0
ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5l
Y21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3Ry
dWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTks
MTQgKzE0NzQsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRo
aXMpOwogICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9w
dXRCeUlkSW5kZXgrK107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwg
cmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRp
b24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3NiwyNSAr
MTQ5NSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcx
IGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0
YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xNDA0LDcgKzE1MTcsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQxLDIw
ICsxNTU0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTg3LDE3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0ODAs
MjggKzE2MDcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8v
IFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3Qg
dG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAg
ICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTUxMCwyNSArMTYzMSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92
YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCBy
ZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnNj
cmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2lu
QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQpAQCAtMTUzNywxNSArMTY2NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFs
KGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAg
IEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQ
b2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9w
dGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFy
Z3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTE1NTYsNTkgKzE2ODgsNzAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3Zh
bChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfdmFs
X3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAg
Ly8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVz
dCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0eXBl
KQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQs
IHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdp
c3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3co
VmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIEFTU0VSVCh0eXBlID09IEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJy
YW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAgVU5VU0VEX1BBUkFNKHByb3BlcnR5
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogCiAgICAgSklU
SW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlw
ZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3Bl
cmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24odHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2MSwyMSBAQCB2b2lkIEpJ
VDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0g
cmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJh
c2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFs
dWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhh
c1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVP
cHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Ns
b3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0
aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBv
cGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTY1Miw3ICsxNzg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUo
YwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2
YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAg
IGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRl
Y29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDE5ICsxODAzLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+
KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwg
Ynl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
QnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICgh
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQ
Uik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0ds
b2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2lu
dFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25l
ZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2ODgs
NiArMTgyOCw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09Q
UwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNj
b3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3MDEs
NyArMTg0Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9y
Q29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwg
cmVnVDEpOwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5k
aW5nRXBvY2gsIHJlZ1QxKTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNz
T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4NTYs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAg
IEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJs
b2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDAp
OwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7
CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTE3OTQsODcgKzE5MzUsMTA1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9m
aWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayku
bV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJU
KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBj
dXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9
IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJv
ZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBj
b2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRh
ZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmls
ZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmly
b25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRh
T2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOwor
ICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5t
ZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgUkVT
T0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNv
bHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3Ig
Z2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09M
VkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBb
XSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNj
b3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9z
dXJlVmFyIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKwor
ICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0g
W10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVT
Y29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5l
OiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7Cisg
ICAgICAgIH07CisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0g
W10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVT
Y29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBn
ZW5lcmljIik7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7
CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNv
bHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0
dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICBj
b2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVy
YXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdl
bmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChj
b2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSwgc3RkOjpv
cHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkK
IHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkg
d29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRh
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCiAgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAt
IHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAg
IFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUp
KTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRh
ZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7Cisg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1l
dGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQ
Uik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlv
bkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFs
T2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVj
ayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVj
dEdQUiA9IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9
PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsK
LSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFs
T2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6
b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNH
bG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hw
b2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAg
ICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0
YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBkb1ZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIs
IHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAg
ICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAg
ICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAgewot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwot
ICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwor
ICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICAg
ICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1
dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEy
ICsyMDQxLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50
U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAg
ICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGds
b2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwg
cmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4
aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2Jq
ZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9i
amVjdEdQUik7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIs
IEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJl
Z1QxKSk7CisgICAgICAgICAgICBqaXQubW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEgKzIwNTYsMTEgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNh
bFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBy
ZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAg
ICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2Jq
ZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZz
ZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsyMDY4
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAg
ICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENs
b3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMjA3OCw0NSBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsK
LQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90
R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewor
ICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5
cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxz
ZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCBy
ZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCBy
ZWdUMCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBhdXRv
IGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAgICAgICAgICAg
SnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAg
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgbm90Q2Fz
ZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQ
cm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBl
bWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENh
c2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENh
c2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29k
ZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygm
aml0KTsKICAgICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2Zp
bGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1Yihz
bG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
d0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVf
c2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0K
IAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZlX3Nj
b3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAg
aWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkp
IFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAg
ICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUs
ICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1G
T1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3Vu
ZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZN
JiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2Fu
IG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRoIGFs
cmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAtMjA2
NSw2ICsyMTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8g
T09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTIx
NzgsNyArMjMwMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTIxODYsOSArMjMw
OCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0
aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRp
b25HZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwog
fQogCiAjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTIxOTYsNDEgKzIzMTgs
NTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwor
ICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NF
UlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09
IGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBb
XSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJl
VmFyIik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRl
T3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Ms
ICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAg
ICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAg
ICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxs
b3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0g
ICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNl
dEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNl
dCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5
cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAg
c3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAg
IEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAg
IH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0
YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0
YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAg
ICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNl
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJ
U3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJD
YWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUs
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlv
bmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewog
ICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3Jr
IHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCkBAIC0yMjM5LDk5ICsyMzcwLDg4IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICB1c2luZyBNZXRhZGF0YSA9
IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAg
IFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUp
KTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisg
ICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0
cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0
LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAK
LSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVH
UFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAg
ICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwg
U3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSKSB7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1
cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAg
ICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkp
OwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9
IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSks
IHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBv
aW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
KyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlv
bldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBl
bWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykg
ewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwot
ICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFy
RnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0g
ICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRvIGVtaXRHZXRDbG9z
dXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7CiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBs
c2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2Nv
cGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CisgICAg
ICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOworICAgICAgICBq
aXQuYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSksIHJlZ1QwKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8g
ZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAg
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVj
dGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhl
IEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tp
bmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1Qw
OwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKICAgICAgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAgICAgICAgICBqaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAg
ICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBi
cmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQo
c2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGppdC5icmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgb2Zmc2V0
KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1
bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1
c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRX
aXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091
dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBq
aXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJz
dE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24o
SklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxp
bmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBu
ZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZz
ZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSksIHJlc3VsdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0Lm5lZzMy
KG9mZnNldCk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZz
ZXQpOworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBU
aW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3Bl
cmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0
VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdU
MCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkp
LCByZWdUMyk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwogICAg
ICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAg
ICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQxLDg2ICsyNDYxLDYzIEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAg
ICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVl
KTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0
Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBl
IGludG8gVDAKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0
YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5
cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmso
JmppdCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0
LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAg
ICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBK
dW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0ds
b2JhbFByb3BlcnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNl
LmFwcGVuZChqdW1wKCkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVt
cCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxz
ZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9
CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEp
OwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkpKTsKIAotICAgIHJldCgp
OworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xv
d0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5l
cmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVs
KHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFi
ZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dl
bmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJ
c1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVy
biB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5l
cmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zy
b21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBF
KERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9N
X1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8g
VGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0
aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3Rl
cnM6OmVicCk7CkBAIC0yNDcxLDg2ICsyNTY4LDc5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0g
ICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJl
Y3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAg
ICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwg
cmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90
aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJl
Z2lzdGVyKSkpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNj
b3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dElu
Zm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5y
ZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5t
X3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGVt
aXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlw
ZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVj
dHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ug
d2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmpl
Y3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUg
dmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFy
IGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBi
dXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2
ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAg
ICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6
Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRl
c3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBT
dHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRh
PEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJh
bmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAg
ICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFu
ZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5k
KCksIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9y
ZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgo
cmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIC8vIE9PUFM6IHdvdWxkIGJlIG5p
Y2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIEdQUlJlZ3MgaW5zdGVhZCBvZiBWUnMKKyAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZh
cjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5
cGUpOwotICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlh
bGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewor
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2so
cmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShi
eXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1Qw
KTsKKworICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0
SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBo
ZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hl
Y2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJh
bmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlu
ZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlh
YmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwg
Jm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJh
bmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAg
ICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdU
MSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNl
IHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3IgdmFsdWUuCisgICAgICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1
cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1p
dFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0
Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
V2F0Y2hwb2ludFNldCgpLCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVn
VDIpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9y
ZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxF
bnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOworCisgICAgICAgICAgICAvLyBPT1BT
OiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3Ig
b3duZXIvdmFsdWUuCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9k
dWxlVmFyOgpAQCAtMjU2NCw1OCArMjY1NCw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAg
IEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0
ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcu
Ci0KLSAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBD
bG9zdXJlVmFyLyBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4g
Y29tcGlsZSB0aGluZ3MKKyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNl
IHdlJ3ZlIHByb3ZlbiB0aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xv
c3VyZVZhciwKKyAgICAvLyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdl
J3JlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3Vy
ZVZhcgorICAgIC8vIGlmIHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQu
IElmIGl0IGlzIGZpcmVkLCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24n
dAorICAgIC8vIG1hdHRlciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChw
cm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1
cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9z
dXJlVmFyKQorICAgICAgICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2Ug
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygp
LCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0
cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBp
c0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHku
bGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKIAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEds
b2JhbFZhci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
KyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXIubGluayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7
Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjYyNCwxOCArMjcwOCwyMSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9TY29wZT4oKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1
dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcikgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAg
Ly8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5r
ZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1
bGVWYXIuCiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVy
dHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxz
ZSB7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUs
IGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29k
ZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICAgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRl
Y29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3
ICsyNzM5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAg
ICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNzAxLDcgKzI3ODgsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdU
MCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyODQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CkBAIC0yNzY3LDcgKzI4NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxf
ZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNl
dE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAt
Mjc4OSw3ICsyODc1LDYgQEAgdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxP
cAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9t
b2RlOwpAQCAtMjgwNSw3ICsyODkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9u
ZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlzIGlz
IHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBjYXNl
IGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRhZGF0YS5tX2Vu
dW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVy
ZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayku
bV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1
Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAg
ICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1v
ZGUpICYgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwpA
QCAtMjg0Nyw3OCArMjkzMiw4NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQo
Y29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBi
eXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0g
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAg
ICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIgPSByZWdUMDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFs
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVFbnVtZXJh
dG9yR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDEgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFs
UmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFz
ZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihtb2RlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUs
IHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7CiAKLSAgICBvcjgocmVnVDIs
IEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBs
b2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoMik7CisgICAgb3IzMihzY3Jh
dGNoMywgc2NyYXRjaDIpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaDIsIGJ5dGVjb2Rl
LCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFk
YXRhKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKICAgICAvLyBUaGlzIGlzIGFs
d2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgotICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVN
b2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRl
c3QzMihOb25aZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2Rl
KSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIHN0cnVjdHVyZU1pc21h
dGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsKKyAgICBsb2FkMzIoQWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAg
SnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoMiwgQWRk
cmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQuCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1l
cmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNz
Ci0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1Qz
LCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNh
cGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdU
MywgcmVnVDMpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0
KSwgcmVzdWx0R1BSKTsKLQorICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgc2lnbkV4dGVuZDMy
VG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIs
IHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkp
LCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIE90
aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDMpOwotICAgIG5lZzMyKHJl
Z1QzKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlR1BSKTsK
KyAgICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgbmVnMzIoc2NyYXRj
aDIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CiAgICAgY29u
c3RleHByIGludHB0cl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IG9mZnNldEluQnV0dGVyZmx5
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludHB0cl90PihzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNF
aWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICBsb2FkNjQoQmFz
ZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVy
dHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIHN0
cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlz
bWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgIHN0b3JlOFRvTWV0
YWRhdGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0
cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRC
eVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgaXNO
b3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc05vdEluZGV4ZWQgPSBi
cmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0
MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4
LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAgICBpc05vdEluZGV4ZWQu
bGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHBy
b2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNv
ZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIGRvbmVD
YXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwogfQogCkBAIC0yOTI3LDEwICszMDIxLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVyKTsKIH0KIAotdGVt
cGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBl
Pgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBT
bG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVt
ZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5l
cmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0yOTM5LDcgKzMwMzIs
OSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltCiAgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMCk7
Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1l
dGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgcmVnVDEpOworICAgIG9yMzIocmVn
VDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1QxLCBieXRlY29kZSwgQnl0ZWNv
ZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwogCkBAIC0zMDI4LDYgKzMx
MjMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogICAgIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQoreworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNlbGVjdFNjcmF0Y2hHUFIob3du
ZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Xcml0ZUJh
cnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNp
b24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU1Miw3ICsxNTUyLDcgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChW
TSYgdm0sIENhbGxMaW5rSQogCiB2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1i
bHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0KCkp
OworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5n
IENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7CiAgICAgCiAgICAg
cmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNp
b24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2Rl
T3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVk
ZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkVy
cm9yLmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCkBAIC0zNzAsNiArMzcxLDE2
IEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYKICAgICAKICAgICBj
b2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAKKyAgICBpZiAo
Y29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAg
UmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gYmFzZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2Vk
Q29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGU7CisgICAgICAgIGlmIChPcHRpb25z
Ojp1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nKCkgJiYgYmFzZWxpbmVSZWYpIHsKKyAgICAgICAg
ICAgIC8vZGF0YUxvZ0xuKCJTaGFyZWQgdmlhIExMSW50Iik7CisgICAgICAgICAgICBjb2RlQmxv
Y2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25O
dWxsKCkpOworICAgICAgICAgICAgY29kZUJsb2NrLT5qaXROZXh0SW52b2NhdGlvbigpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoIWNvZGVC
bG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tf
TE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgidGhyZXNob2xkIG5vdCBy
ZWFjaGVkLCBjb3VudGVyID0gIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsK
ICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJl
c2hvbGQgc2hvdWxkIGJlIGxpZnRlZC4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lv
biAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmlj
dEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2Rl
TmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRp
c3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2Zp
bGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAg
ZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEsIHQyKQogICAgICAgICBnZXQobV9zcmNEc3QsIHQw
KQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpA
QCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0
LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGluIHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50
ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAgICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNl
dFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50
KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZUludCwgdDEsIHQyKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEw
ODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwg
T3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQog
Ci0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBP
cE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1f
Yml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1ldGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVy
YW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAg
ICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BOZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAw
eDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJv
ZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdh
dGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQzKQogICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQog
Lm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJpYSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93
CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFBy
b2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRo
UHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAgIHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNs
b3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAgZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0
b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBk
b3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUs
IG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1
cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5
cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUs
IHQyKQogICAgICAgICBnZXQobV9yaHMsIHQyKQogICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAt
MTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBv
cAogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQog
ICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcsIC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMs
IEludDMyVGFnLCAub3AyTm90SW50Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJ
bnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFy
aXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAg
ICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAg
ICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsxMTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9t
U3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAg
ICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAub3AxTm90SW50T3AyRG91YmxlCiAgICAgICAgIGJp
bmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmls
ZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVj
dCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEK
ICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAg
ICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2Zp
bGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVT
dHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRS
ZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAK
QEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFt
ZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUg
c2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIp
CiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUo
QXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2ky
ZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVy
YXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjgyMDE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTQ0MSw4ICs0NDEsMTMgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxv
b3AoKQogICAgICAgICAgICAgbW92ZSBQQywgYTEKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRf
bG9vcF9vc3IpCiAgICAgICAgICAgICBidHB6IHIwLCAucmVjb3ZlcgotCiAgICAgICAgICAgICBt
b3ZlIHIxLCBzcAorCisgICAgICAgICAgICAjIEJhc2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdp
c3RlciBmb3IgaXRzIEpJVCBjb25zdGFudCBwb29sLgorICAgICAgICAgICAgbG9hZHAgQ29kZUJs
b2NrW2Nmcl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0s
IFBCCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQ
b29sW1BCXSwgUEIKKwogICAgICAgICAgICAgaWYgQVJNNjRFCiAgICAgICAgICAgICAgICAgbGVh
cCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAo
Y29uc3RleHByIEdhdGU6Omxvb3BPU1JFbnRyeSkgKiBQdHJTaXplLCBhMgogICAgICAgICAgICAg
ICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0x
MDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0
cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRp
b24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVj
dCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAg
IG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVv
cGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmls
ZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQog
ICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykK
QEAgLTEwNjksNyArMTA3MCw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVj
dCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBu
dW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3JlcSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVw
ZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAg
IGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAog
CiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQ
cm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJp
dGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAg
IGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAs
IHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikKQEAgLTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZm
ZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAg
ICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJp
dGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICByZXR1cm4o
dDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAgYnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVT
bG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAwMDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9m
aWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5l
Z2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogCiAub3BO
ZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE2MCw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3Rv
cmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1l
JSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJl
dHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUo
dHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
YXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVu
ZAotCiAgICAgICAgIGdldChtX3JocywgdDApCiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAg
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5
LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBn
ZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAu
c2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludElu
dCwgdDUsIHQyKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4
NywxMCArMTE3OSwxMCBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9w
CiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJU
YWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmls
ZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0
cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDIpCiAgICAgICAgIGptcCAub3Ax
Tm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRo
UHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29k
ZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDIpCiAgICAgICAgIGNpMmRzIHQx
LCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0x
MjA0LDkgKzExOTYsOSBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9w
CiAKICAgICAub3AyTm90SW50OgogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVs
eSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCi0gICAgICAgIGdldChtX2Rz
dCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJvZmls
ZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQyKQorICAgICAgICBn
ZXQobV9kc3QsIHQyKQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVy
VGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MjAx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQkod29ya2luZyBjb3B5KQpAQCAtMjU1Niw2ICsyNTU2LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRl
ZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUs
IFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBs
b2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwg
dGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5k
CisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9u
IGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRv
d3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlm
IFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgy
MDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmll
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRp
YyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25z
dCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cisg
ICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAg
ICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVh
YmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1
cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICsz
NSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5
cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJs
b2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7
CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
PgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywg
Y29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVu
dGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRU
eXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYWNoZWRUeXBlcy5oIgogCisjaW5jbHVk
ZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVDYWNoZUVycm9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0
ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5B
QkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChP
cE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVy
YW5kKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0
aFByb2ZpbGU7CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9h
cml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VS
VChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
bkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAg
IHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRp
YyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0K
KyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVj
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRh
YmxlQmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
CShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYgKzM4NSw5IEBAIHN0YXRpYyB2b2lkIG92
ZXJyaWRlRGVmYXVsdHMoKQogICAgICAgICBPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6
ZUFmdGVyV2FybVVwKCkgPSAxNTAwOwogICAgICAgICBPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdP
cHRpbWl6ZVNvb24oKSA9IDEwMDsKICAgICB9CisKKyAgICAvLyBPT1BTCisgICAgT3B0aW9uczo6
bWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvckJhc2VsaW5lKCkgPSA0
NTA7CiB9CiAKIHN0YXRpYyB2b2lkIGNvcnJlY3RPcHRpb25zKCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjgyMDE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMyLDYgKzUzMiw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7
CiAgICAgdihCb29sLCB1c2VEYXRhSUMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KEJvb2wsIHVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIHYoQm9vbCwgdXNlRGF0YUlDU2hhcmluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAorICAgIHYoQm9vbCwgdXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZywgdHJ1ZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgXAogICAgIC8qIEZlYXR1cmUgRmxhZ3MgKi9cCiAgICAgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5j
cHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
cmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNyArMzk2LDE0IEBAIHZv
aWQgU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGkKICAgICBpZiAoT3B0aW9uczo6
dmFsaWRhdGVCeXRlY29kZSgpKQogICAgICAgICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7CiAKLSAg
ICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKKyAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBi
YXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJh
c2VsaW5lQ29kZTsKKyAgICBpZiAoT3B0aW9uczo6dXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZygp
ICYmIGJhc2VsaW5lUmVmKSB7CisgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRC
YXNlbGluZUNvZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisKKyAgICAgICAgLy9k
YXRhTG9nTG4oY29kZUJsb2NrLT5qaXRFeGVjdXRlQ291bnRlcigpKTsKKyAgICAgICAgLy9pZiAo
Y29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5pc0J1aWx0aW5GdW5jdGlvbigpKQorICAg
ICAgICAvLyAgICBkYXRhTG9nTG4oIlNoYXJlZCBidWlsdGluISIpOworICAgIH0gZWxzZSBpZiAo
T3B0aW9uczo6dXNlTExJbnQoKSkKICAgICAgICAgc2V0dXBMTEludChjb2RlQmxvY2spOwogICAg
IGVsc2UKICAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24g
MjgyMDE2KQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYg
KzY2LDIwIEBAIHB1YmxpYzoKICAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKICAgICB9
CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEJhZyYgb3BlcmF0b3I9KEJhZzxULCBV
PiYmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHVud3JhcHBlZEhlYWQoKSA9PSBvdGhlci51
bndyYXBwZWRIZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAgQmFn
IGRlc3Ryb3k7CisgICAgICAgIGRlc3Ryb3kubV9oZWFkID0gdW53cmFwcGVkSGVhZCgpOworICAg
ICAgICBtX2hlYWQgPSBvdGhlci51bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG90aGVyLm1faGVh
ZCA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIH5CYWco
KQogICAgIHsKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1z
dHJlc3MtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0cwkocmV2aXNpb24gMjgyMDE2KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtNzcwLDE3ICs3NzAsMTggQEAgZW5kCiAKICMgRklYTUU6
IG5lZWQgdG8gZml4IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg3
MDMgdG8gZW5hYmxlIHRoaXMgb24gTGludXgvTUlQUy4KIGRlZiBydW5CeXRlY29kZUNhY2hlSW1w
bChvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMsICphZGRpdGlvbmFsRW52KQotICAgIGlmICgk
aG9zdE9TID09ICJkYXJ3aW4iKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2Fj
aGUiCi0gICAgZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAkYXJjaGl0ZWN0dXJlICE9ICJt
aXBzIikKLSAgICAgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlWFhYWFhYIgotICAg
IGVsc2UKLSAgICAgICAgc2tpcAotICAgICAgICByZXR1cm4KLSAgICBlbmQKKyAgICAjIE9PUFMK
KyAgICAjaWYgKCRob3N0T1MgPT0gImRhcndpbiIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAi
Ynl0ZWNvZGUtY2FjaGUiCisgICAgI2Vsc2lmICgkaG9zdE9TID09ICJsaW51eCIgJiYgJGFyY2hp
dGVjdHVyZSAhPSAibWlwcyIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2Fj
aGVYWFhYWFgiCisgICAgI2Vsc2UKKyAgICAjICAgIHNraXAKKyAgICAjICAgIHJldHVybgorICAg
ICNlbmQKIAotICAgIG9wdGlvbnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9OUyArIG9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMKLSAg
ICBhZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyAr
ICJieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19z
LCAqdm1Db21tYW5kLCAkYmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFu
ZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyLCAqYWRkaXRpb25hbEVudikKKyAgICAjb3B0aW9ucyA9
IEJBU0VfT1BUSU9OUyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
ICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucworICAgICNhZGRSdW5Db21tYW5kKCJieXRl
Y29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1jYWNoZS10ZXN0
LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5kLCAkYmVuY2ht
YXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5k
bGVyLCAqYWRkaXRpb25hbEVudikKIGVuZAogCiBkZWYgcnVuQnl0ZWNvZGVDYWNoZSgqb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437559</attachid>
            <date>2021-09-07 14:54:49 -0700</date>
            <delta_ts>2021-09-07 20:00:18 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>448148</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODMyLDYgKzgzMiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjY4LDYgKzM2NjksOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjU4LDYgKzYyNjEsOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05Njk5LDYgKzk3MDQsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNjEz
MjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsOSArMjkwLDEwIEBAIG9wX2dyb3VwIDpQ
cm9maWxlZEJpbmFyeU9wLAogICAgICAgICBsaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAg
cmhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVz
LAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkCiAgICAgfSwKICAgICBtZXRhZGF0YTog
ewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0
aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9ncm91cCA6VmFsdWVQ
cm9maWxlZEJpbmFyeU9wLApAQCAtMzUxLDkgKzM1MiwxMCBAQCBvcF9ncm91cCA6VW5hcnlJblBs
YWNlUHJvZmlsZWRPcCwKICAgICBdLAogICAgIGFyZ3M6IHsKICAgICAgICAgc3JjRHN0OiBWaXJ0
dWFsUmVnaXN0ZXIsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlCisg
ICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3AgOnRv
X29iamVjdCwKQEAgLTM4NCw5ICszODYsMTAgQEAgb3AgOm5lZ2F0ZSwKICAgICAgICAgZHN0OiBW
aXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmQ6IFZpcnR1YWxSZWdpc3RlciwKICAgICAg
ICAgcmVzdWx0VHlwZTogUmVzdWx0VHlwZSwKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUsCisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgog
ICAgIH0KIAogb3AgOm5vdCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZp
c2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVP
cGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjggQEAg
VmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JJbXBsKEJ5dGVjbwogICAgICAgICByZXR1cm4g
Jm1ldGFkYXRhLm1fcHJvZmlsZTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
dWludHB0cl90IHZhbHVlUHJvZmlsZU9mZnNldEZvcih1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRleCk7CisgICAgaWYgY29uc3RleHBy
IChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3Jfb3BlbikgeworICAgICAgICBzd2l0
Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpzeW1i
b2xDYWxsOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmls
ZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNv
ZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiBj
b25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CisgICAg
ICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5l
eHQ6OmNvbXB1dGVOZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRS
ZXN1bHRQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJl
dHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRG9uZVByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIHJldHVybiBC
eXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpOworfQorCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZU1ldGFkYXRhPgogYm9vbCBoYXNWYWx1ZVByb2ZpbGVGb3IoQnl0ZWNvZGVN
ZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZp
c2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJ
bmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDExICsxMTQsNiBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7CiB9
CiAKLUNvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFz
dFBhdGhTdGFydCgpCi17Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0lu
dGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwotfQotCiBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKCFpc0RhdGFJQygpKTsKQEAgLTIyNSw2ICsyMjAsMTIgQEAgdm9pZCBDYWxs
TGlua0luZm86OnNldE1heEFyZ3VtZW50Q291bnRJbgogICAgIG1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSB2YWx1ZTsKIH0KIAorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChpc0RpcmVjdCgpICYmIGlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQpOwor
fQorCiB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRvIGhh
bmRsZVNwZWNpZmljQ2FsbGVlID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKQEAgLTI5OCwy
MyArMjk5LDExIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGMKICAg
ICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1
c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1Rh
aWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewotICAg
IHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7Ci0gICAgaWYgKGlzRGF0YUlDKCkpIHsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJl
Zyk7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwg
Y2FsbExpbmtJbmZvR1BSKTsKLSAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBj
YWxsTGlua0luZm9HUFI7Ci0gICAgfQotCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0Lmxh
YmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHNsb3dQYXRoOwogCi0gICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICBpZiAodXNl
RGF0YUlDID09IFVzZURhdGFJQzo6WWVzKSB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
aml0LnNjcmF0Y2hSZWdpc3RlcigpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7
IAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKQEAgLTMyMyw3ICsz
MTIsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAg
ICAgICBnb1BvbHltb3JwaGljID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25a
ZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5bW9ycGhpY0Nh
bGxlZU1hc2spKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsK
ICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgZ29Qb2x5bW9y
cGhpYy5saW5rKCZqaXQpOyAvLyBQb2x5bW9ycGhpYyBzdHViIGhhbmRsZXMgdGFpbCBjYWxsIHN0
YWNrIHByZXAuCiAgICAgICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Y2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkpLCBK
U0VudHJ5UHRyVGFnKTsKQEAgLTMzNiwxNCArMzI1LDE2IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQ
dHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVj
aywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKSk7CiAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAg
ICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwog
ICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAg
ICAgICAgICAgIHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT51LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51
LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNTMsMTMg
KzM0NCwzNCBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUMgdXNlRGF0YUlDKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwotICAg
IHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIs
IHVzZURhdGFJQywgbnVsbHB0cik7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKwor
ICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
b0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHUu
ZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKworICAg
IHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0lu
Zm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxG
YXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1Rh
aWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBj
YWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsK
KyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQ
YXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgVXNlRGF0YUlDOjpO
bywgaXNUYWlsQ2FsbCgpLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworfQorCitNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcp
OworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBj
YWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK01h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENh
bGwpKTsKIH0KIAogdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxs
SGVscGVycyYgaml0KQpAQCAtMzY5LDE3ICszODEsMzAgQEAgdm9pZCBDYWxsTGlua0luZm86OmVt
aXRTbG93UGF0aChWTSYgdm0sIAogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRy
eVB0clRhZyk7CiB9CiAKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0m
LCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBqaXQu
bW92ZShjYWxsTGlua0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVz
dGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5p
dGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxM
aW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAg
ICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2Rl
SW5kZXgpOworICAgIHNldFVwQ2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2Fs
bGVlR1BSKTsKKyAgICBtX2RvbmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVM
b2NhdGlvbjsKKyAgICBpZiAodW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkK
KyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxl
RGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpOyAvLyBPT1BTOiB0
aW1lIGZvciByZWYgY291bnRpbmc/CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMp
OworICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAg
IHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dl
bmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2
b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJ
Q3MoVXNlRGF0YUlDOjpObyk7CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwo
KTsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjIsNyBA
QCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZh
c3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAg
dS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBu
b3QgeWV0IGxpbmtlZCwgdGhpcyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9u
IDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVu
dW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAor
c3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJs
aWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVu
dW0gQ2FsbFR5cGUgeworICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9u
ZSwKICAgICAgICAgQ2FsbCwKICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDgg
QEAgcHVibGljOgogICAgICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAg
ICB2b2lkIGluaXRpYWxpemVEYXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxl
ZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFz
cyBVc2VEYXRhSUMgOiB1aW50OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAg
ICB9OwogCiBwcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBh
dGhJbXBsKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2Fs
bCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWls
Q2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVT
RURfUkVUVVJOOwogcHVibGljOgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVy
cyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVT
RURfUkVUVVJOOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0
UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZv
R1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRh
aWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAg
IHZvaWQgZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERp
cmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
IHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhl
bHBlcnMmKTsKKyAgICBzdGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhl
bHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0
dWIoKTsKIAogICAgIGJvb2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxV
c2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIx
MCw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0g
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwog
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsK
IApAQCAtMjQzLDExICsyNDksNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxs
cHRyOwogICAgIH0KIAotICAgIEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAg
ICAgICByZXR1cm4gbV9zbG93U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNl
KCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4
LDkgKzMwOSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBl
PihtX2NhbGxUeXBlKTsKICAgICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ2FsbExpbmtJbmZvLCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9
CiAKICAgICB1aW50MzJfdCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEs
NyArMzgyLDkgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9j
YXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsK
ICAgICB1bmlvbiBVbmlvblR5cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2Nh
dGlvbjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRy
VGFnPiBtX2NhbGxlZUxvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gbV9zbG93UGF0aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJ
QzsKICAgICB9IHU7CiAKQEAgLTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0
Q2FsbExpbmtJbmZvQ29kZU9yaQogICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigp
OwogfQogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleDsgLy8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRo
aXMgY2FuIHRyaXZpYWxseSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86
OkNhbGxUeXBlIGNhbGxUeXBlOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IGRvbmVMb2NhdGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURh
dGE+IGZyYW1lU2h1ZmZsZURhdGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsOCBA
QCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQo
c291cmNlKCkucHJvdmlkZXIoKSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJh
bWV0ZXJzKCkpOworCisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2Rl
LT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQo
KS5hZGQodGhpcyk7CiB9CkBAIC0zMTgsNyArMzIwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgQwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIAogICAg
IG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOworICAgIC8vaml0
QWZ0ZXJXYXJtVXAoKTsKIAogICAgIGlmIChvdGhlci5tX3JhcmVEYXRhKSB7CiAgICAgICAgIGNy
ZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTM1OSw2ICszNjEsOCBAQCBDb2RlQmxvY2s6
OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCkucHJv
dmlkZXIoKSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpKTsKKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29k
ZS0+bGxpbnRFeGVjdXRlQ291bnRlcigpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0
KCkuYWRkKHRoaXMpOwogfQpAQCAtMzcwLDcgKzM3NCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2Nr
KFZNJiB2bSwgU3RydWN0dXJlKiAKIC8vIHdlIGNhbid0IGdlbmVyYXRlIGR1cmluZyB1bmxpbmtl
ZCBieXRlY29kZSBnZW5lcmF0aW9uLiBUaGlzIHByb2Nlc3MgaXMgbm90IGFsbG93ZWQgdG8gZ2Vu
ZXJhdGUgY29udHJvbAogLy8gZmxvdyBvciBpbnRyb2R1Y2UgbmV3IGxvY2Fscy4gVGhlIHJlYXNv
biBmb3IgdGhpcyBpcyB3ZSByZWx5IG9uIGxpdmVuZXNzIGFuYWx5c2lzIHRvIGJlIHRoZSBzYW1l
IGZvcgogLy8gYWxsIHRoZSBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLiBXZSBy
ZWx5IG9uIHRoaXMgZmFjdCBieSBjYWNoaW5nIHRoZSBsaXZlbmVzcyBhbmFseXNpcwotLy8gaW5z
aWRlIFVubGlua2VkQ29kZUJsb2NrLgorLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLiBBbHNv
LCBCYXNlbGluZSBKSVQgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgQ29kZUJsb2NrcyBvZiBh
biBVbmxpbmtlZENvZGVCbG9jaywKKy8vIHNvIHRoZSBieXRlY29kZSBtdXN0IHJlbWFpbiB0aGUg
c2FtZSBiZXR3ZWVuIENvZGVCbG9ja3Mgc2hhcmluZyBhbiBVbmxpbmtlZENvZGVCbG9jay4KIGJv
b2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93
bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAogICAg
IEpTU2NvcGUqIHNjb3BlKQogewpAQCAtNDY2LDYgKzQ3MSwxOSBAQCBib29sIENvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCisjZGVm
aW5lIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29w
KTogeyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxl
KGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNk
ZWZpbmUgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19v
cCk6IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0
YWRhdGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxl
KGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwog
ICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGluc3RydWN0
aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0
cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpOwpAQCAtNTI4LDE0ICs1NDYsMTQgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJvbWlzZSkKICAgICAgICAgTElOSyhP
cENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9wQWRkKQotICAgICAgICBMSU5LKE9w
TXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBMSU5LKE9wU3ViKQotCi0gICAgICAg
IExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMpCi0gICAgICAgIExJTksoT3BEZWMp
CisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcEFkZCkKKyAgICAgICAg
TElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVsKQorICAgICAgICBMSU5LX1dJVEhf
QklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJ
VEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklM
RShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMp
CisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wRGVjKQogCiAgICAgICAg
IExJTksoT3BKbmVxUHRyKQogCkBAIC03NjgsNyArNzg2LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgIC8vIHJlbHkgb24gdGhlIGluc3RydWN0aW9uIGNv
dW50IChhbmQgYXJlIGluIHRoZW9yeSBwZXJtaXR0ZWQgdG8gYWxzbyBpbnNwZWN0IHRoZQogICAg
IC8vIGluc3RydWN0aW9uIHN0cmVhbSB0byBtb3JlIGFjY3VyYXRlIGFzc2VzcyB0aGUgY29zdCBv
ZiB0aWVyLXVwKS4KICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJt
VXAoKTsKKyAgICAvL2ppdEFmdGVyV2FybVVwKCk7CiAKICAgICAvLyBJZiB0aGUgY29uY3VycmVu
dCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2RlIGJsb2NrJ3MgaGFzaCwgdGhlbiBjb21wdXRlIGl0
IGhlcmUKICAgICAvLyBzeW5jaHJvbm91c2x5LgpAQCAtNzg5LDYgKzgwNyw3NiBAQCB2b2lkIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb25Db21tb24oVk0mCiAgICAgbV9vd25lckVkZ2Uuc2V0KHZt
LCB0aGlzLCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpjcmVhdGUodm0sIHRoaXMpKTsKIH0K
IAordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNl
bGluZUpJVENvZGU+IGppdENvZGUpCit7CisgICAgc2V0SklUQ29kZShqaXRDb2RlLmNvcHlSZWYo
KSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8mIGppdENvZGVNYXAgPSB0aGlzLT5qaXRD
b2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZFeGNlcHRp
b25IYW5kbGVycygpOyArK2kpIHsKKyAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0g
ZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2Js
ZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gaml0Q29kZU1h
cC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPigpOworICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIGF1dG8mIGppdERhdGEgPSBl
bnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5t
X2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOworICAgICAgICBqaXREYXRhLm1faml0Q29uc3Rh
bnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUo
KSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBv
b2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2Nv
bnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAgICAgIHN3aXRjaCAoZW50cnkudHlwZSkgeworICAg
ICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdDoKKyAgICAg
ICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gbV9nbG9iYWxPYmplY3Qu
Z2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRD
YWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2Vk
Q2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9hZCk7CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJ
bmZvKiBjYWxsTGlua0luZm8gPSBqaXREYXRhLm1fY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdp
bih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAg
Ly8gT09QUzogZG9uJ3QgaGFyZGNvZGUgdGhlc2UgcmVnaXN0ZXJzIGxpa2UgdGhpcy4KKyAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPmluaXRpYWxpemVEYXRhSUModm0oKSwgdW5saW5rZWRD
YWxsTGlua0luZm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAg
ICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGNhbGxMaW5rSW5mbzsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbzogeworICAgICAgICAgICAgICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8gPSAqc3RhdGljX2Nhc3Q8
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyo+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGppdERhdGEubV9zdHViSW5mb3MuYWRk
KHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZSwgQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZv
LmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+aW5pdGlhbGl6ZUZy
b21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKHRoaXMsIHVubGlua2VkU3R1YkluZm8pOworICAg
ICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBzdHViSW5mbzsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6IHsKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQpOworICAg
ICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkRlY2wo
aW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwcjogeworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucGF5
bG9hZCk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1
bmN0aW9uRXhwcihpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKGNvZGVUeXBl
KCkpIHsKKyAgICBjYXNlIEdsb2JhbENvZGU6CisgICAgY2FzZSBNb2R1bGVDb2RlOgorICAgIGNh
c2UgRXZhbENvZGU6CisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRnVuY3Rpb25Db2RlOgorICAgICAgICAvLyBXZSBjb3Vs
ZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5p
bmxpbmVhYmxlIGNhbGwuCisgICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRp
b24uCisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShjYXBhYmls
aXR5TGV2ZWwoKSkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKHRoaXMpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxp
bmVDb2RlID0gV1RGTW92ZShqaXRDb2RlKTsKK30KKwogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkK
IHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTE1MTksMzkgKzE2MDcsNDAgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogCiAgICAgdXBkYXRlQWxsUHJlZGljdGlv
bnMoKTsKIAotI2lmIEVOQUJMRShKSVQpCi0gICAgYm9vbCBpc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUgPSBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZTsKLSAgICBtX2lzRWxpZ2libGVG
b3JMTEludERvd25ncmFkZSA9IGZhbHNlOwotICAgIC8vIElmIEJhc2VsaW5lSklUIGNvZGUgaXMg
bm90IGV4ZWN1dGluZywgYW5kIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCBleGlzdHMsIHdlIGF0
dGVtcHQKLSAgICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFuZCByZWluc3RhbGwg
TExJbnQgY29kZSB0byBzYXZlIEpJVCBtZW1vcnkuCi0gICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50
KCkgJiYgIW1faGFzTGlua2VkT1NSRXhpdCAmJiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxp
bmVKSVQgJiYgIW1fdm0tPmhlYXAuY29kZUJsb2NrU2V0KCkuaXNDdXJyZW50bHlFeGVjdXRpbmco
dGhpcykpIHsKLSAgICAgICAgaWYgKENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2NrID0gb3B0
aW1pemVkUmVwbGFjZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKCFvcHRpbWl6ZWRDb2RlQmxv
Y2stPm1fb3NyRXhpdENvdW50ZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNFbGlnaWJsZUZv
ckxMSW50RG93bmdyYWRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Q29kZSA9IG51bGxw
dHI7Ci0gICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRyeXBvaW50KHRoaXMpOwotICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50
ZXJwcmV0ZXJUaHVuayk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyBpKyspIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlu
a2VkSGFuZGxlciA9IG1fdW5saW5rZWRDb2RlLT5leGNlcHRpb25IYW5kbGVyKGkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX3JhcmVEYXRhLT5tX2V4
Y2VwdGlvbkhhbmRsZXJzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgaW5zdHJ1
Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVyLnRhcmdldCkucHRyKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5k
bGVyLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihMTEludDo6aGFu
ZGxlQ2F0Y2goaW5zdHJ1Y3Rpb24ud2lkdGgoKSkuY29kZSgpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGNsZWFyIHRoZXNlIG91dCBoZXJlIGJl
Y2F1c2UgaW4gZmluYWxpemVVbmNvbmRpdGlvbmFsbHkgYWxsIGNvbXBpbGVyIHRocmVhZHMKLSAg
ICAgICAgICAgICAgICAgICAgLy8gYXJlIHNhZmVwb2ludGVkLCBtZWFuaW5nIHRoZXkncmUgcnVu
bmluZyBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIGJ5dGVjb2RlIHBhcnNlciwgYW5kIGJ5dGVjb2Rl
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlciBpcyB0aGUgb25seSBkYXRhIHN0cnVjdHVy
ZSBwb2ludGluZyBpbnRvIHRoZSB2YXJpb3VzICppbmZvcy4KLSAgICAgICAgICAgICAgICAgICAg
cmVzZXRKSVREYXRhKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotI2VuZGlmCisvLyBPT1BTOiByZWNvbmNpbGUgdGhpcworLy8j
aWYgRU5BQkxFKEpJVCkKKy8vICAgIGJvb2wgaXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0g
bV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGU7CisvLyAgICBtX2lzRWxpZ2libGVGb3JMTElu
dERvd25ncmFkZSA9IGZhbHNlOworLy8gICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3Qg
ZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1w
dAorLy8gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGluZSBKSVQgY29kZSBhbmQgcmVpbnN0YWxsIExM
SW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5LgorLy8gICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50
KCkgJiYgIW1faGFzTGlua2VkT1NSRXhpdCAmJiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxp
bmVKSVQgJiYgIW1fdm0tPmhlYXAuY29kZUJsb2NrU2V0KCkuaXNDdXJyZW50bHlFeGVjdXRpbmco
dGhpcykpIHsKKy8vICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBv
cHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisvLyAgICAgICAgICAgIGlmICghb3B0aW1pemVkQ29k
ZUJsb2NrLT5tX29zckV4aXRDb3VudGVyKSB7CisvLyAgICAgICAgICAgICAgICBpZiAoaXNFbGln
aWJsZUZvckxMSW50RG93bmdyYWRlKSB7CisvLyAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2Rl
ID0gbnVsbHB0cjsKKy8vICAgICAgICAgICAgICAgICAgICBMTEludDo6c2V0RW50cnlwb2ludCh0
aGlzKTsKKy8vICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkgPT0g
SklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7CisvLworLy8gICAgICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxpbmtlZENvZGUtPm51bWJlck9mRXhjZXB0aW9uSGFu
ZGxlcnMoKTsgaSsrKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVubGlua2Vk
SGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IG1fdW5saW5rZWRDb2RlLT5leGNlcHRpb25I
YW5kbGVyKGkpOworLy8gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxl
ciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07CisvLyAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9ucygpLmF0KHVubGlua2Vk
SGFuZGxlci50YXJnZXQpLnB0cigpOworLy8gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVy
LmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPihMTEludDo6aGFuZGxlQ2F0Y2goaW5zdHJ1Y3Rpb24ud2lkdGgoKSkuY29k
ZSgpKSk7CisvLyAgICAgICAgICAgICAgICAgICAgfQorLy8KKy8vICAgICAgICAgICAgICAgICAg
ICB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisvLworLy8gICAgICAgICAgICAgICAgICAgIC8vIEl0
J3Mgc2FmZSB0byBjbGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGluIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5IGFsbCBjb21waWxlciB0aHJlYWRzCisvLyAgICAgICAgICAgICAgICAgICAgLy8g
YXJlIHNhZmVwb2ludGVkLCBtZWFuaW5nIHRoZXkncmUgcnVubmluZyBlaXRoZXIgYmVmb3JlIG9y
IGFmdGVyIGJ5dGVjb2RlIHBhcnNlciwgYW5kIGJ5dGVjb2RlCisvLyAgICAgICAgICAgICAgICAg
ICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50aW5nIGludG8gdGhl
IHZhcmlvdXMgKmluZm9zLgorLy8gICAgICAgICAgICAgICAgICAgIHJlc2V0SklURGF0YSgpOwor
Ly8gICAgICAgICAgICAgICAgfSBlbHNlCisvLyAgICAgICAgICAgICAgICAgICAgbV9pc0VsaWdp
YmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOworLy8gICAgICAgICAgICB9CisvLyAgICAgICAg
fQorLy8gICAgfQorLy8KKy8vI2VuZGlmCiAgICAgCiAgICAgaWYgKEpJVENvZGU6OmNvdWxkQmVJ
bnRlcnByZXRlZChqaXRUeXBlKCkpKQogICAgICAgICBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVz
KCk7CkBAIC0xNTc5LDcgKzE2NjgsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoCiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgotICAg
ICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKKyAgICAgICAg
ICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jb3VudCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgICAgICBj
b3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKQEAgLTI2NDAsNyArMjcyOSw3IEBA
IGF1dG8gQ29kZUJsb2NrOjp1cGRhdGVPU1JFeGl0Q291bnRlckFuZEMKIHZvaWQgQ29kZUJsb2Nr
OjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKIHsKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksICp0aGlzLCAiOiBPcHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi4iKTsKLSAg
ICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCgwLCB0aGlzKTsKKyAgICBtX2pp
dEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCgwKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6
OmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCkKQEAgLTI2NTQsNyArMjc0Myw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjpvcHRpbWl6ZUFmdGVyV2FybVVwKCkKICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksICp0aGlzLCAiOiBPcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuIik7CiAjaWYg
RU5BQkxFKERGR19KSVQpCiAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQo
Ci0gICAgICAgIGFkanVzdGVkQ291bnRlclZhbHVlKE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGlt
aXplQWZ0ZXJXYXJtVXAoKSksIHRoaXMpOworICAgICAgICBhZGp1c3RlZENvdW50ZXJWYWx1ZShP
cHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkpKTsKICNlbmRpZgogfQog
CkBAIC0yNjYzLDcgKzI3NTIsNyBAQCB2b2lkIENvZGVCbG9jazo6b3B0aW1pemVBZnRlckxvbmdX
YXJtVXAoCiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqdGhpcywgIjog
T3B0aW1pemluZyBhZnRlciBsb25nIHdhcm0tdXAuIik7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgbV9qaXRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoCi0gICAgICAgIGFkanVzdGVk
Q291bnRlclZhbHVlKE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVw
KCkpLCB0aGlzKTsKKyAgICAgICAgYWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNo
b2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSkpOwogI2VuZGlmCiB9CiAKQEAgLTI2NzIs
NyArMjc2MSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6ZVNvb24oKQogICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKnRoaXMsICI6IE9wdGltaXppbmcgc29vbi4iKTsK
ICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBtX2ppdEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVz
aG9sZCgKLSAgICAgICAgYWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9y
T3B0aW1pemVTb29uKCkpLCB0aGlzKTsKKyAgICAgICAgYWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0
aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVTb29uKCkpKTsKICNlbmRpZgogfQogCkBAIC0zMDc5
LDcgKzMxNjgsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAK
ICNpZiBFTkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAg
IHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJu
IEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMyOTUsMTMg
KzMzODQsMTMgQEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewog
ICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAg
cmV0dXJuICZwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7Cisg
ICAgICAgIHJldHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CiAgICAgY2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVs
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAg
ICAgICByZXR1cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8
T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzMxMywxMSArMzQwMiwxMSBAQCBVbmFyeUFyaXRoUHJv
ZmlsZSogQ29kZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQo
KSkgewogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0
ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5h
czxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9w
X2luYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhp
cykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM0ODEsMTQgKzM1NzAsMTkgQEAgaW50
MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMgogICAgIHJldHVybiB0aHJlc2hv
bGQ7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRBZnRlcldhcm1VcCgpCisvL3ZvaWQgQ29kZUJs
b2NrOjpqaXRBZnRlcldhcm1VcCgpCisvL3sKKy8vICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+
c2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRB
ZnRlcldhcm1VcCgpKSwgdGhpcyk7CisvL30KKwordm9pZCBDb2RlQmxvY2s6OmppdFNvb24oKQog
ewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9y
SklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKKyAgICBt
X2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0
aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRT
b29uKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXROZXh0SW52b2NhdGlvbigpCiB7Ci0gICAgbV9sbGlu
dEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6
dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVy
LT5zZXROZXdUaHJlc2hvbGQoMCk7CiB9CiAKIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRW
TVRyYXBCcmVha3BvaW50cygpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcg
QEAgY2xhc3MgTWV0YWRhdGFUYWJsZTsKIGNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3Mg
UmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJh
c2VsaW5lSklUQ29kZTsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
Q29kZUJsb2NrUmFyZURhdGEpOwogCkBAIC0xNTgsNyArMTU5LDkgQEAgcHVibGljOgogICAgIE1l
dGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdl
dCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNp
Z25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApA
QCAtMTY3LDcgKzE3MCw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0
dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRt
cHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4g
Jm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJh
bWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0
ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYg
KzIzNCw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRz
KCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlu
bGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3
ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2Rl
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEw
MTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdl
dENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19j
YXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2Niw4ICsyNTgsMTAgQEAgcHVibGljOgogICAgIHZv
aWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxF
KEpJVCkKKyAgICAvLyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVz
IG91dCBvZiBoZXJlLCBhbmQgb250byBKSVRDb2RlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAg
ICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5m
bz4gbV9zdHViSW5mb3M7CiAgICAgICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CkBAIC0yODIs
OSArMjc2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3Jp
Z2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2
ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2Fs
bGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAg
ICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lk
IHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwog
ICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2Nr
ZXIpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkpCkBAIC0yOTMsNiArMjkx
LDggQEAgcHVibGljOgogICAgIH0KICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZK
SVREYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9qaXREYXRhKTsg
fQorCiAgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwogICAg
IEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVROZWdJ
QyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKQEAgLTMyMiwxNiArMzIyLDcgQEAg
cHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXpl
IHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5r
SW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRK
SVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3Qg
SklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlciku
bV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7
CiAKICAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29k
ZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9p
ZCogcGMpOwpAQCAtNDcyLDYgKzQ2Myw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9y
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFy
Z3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZh
bHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRl
cnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01NzIsNiArNTY0LDcgQEAgcHVibGljOgog
ICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgo
KV0uZ2V0KCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBj
b25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25z
dCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNv
bnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW5k
ZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZl
cigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdpc3Rl
cnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQoKTsg
fQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJl
dHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVu
Y3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTYwMSw2
ICs1OTQsMTIgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwog
ICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07
CiAgICAgfQorICAgIFNpbXBsZUp1bXBUYWJsZSYgYmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUoaW50
IHRhYmxlSW5kZXgpOworICAgIHZvaWQqIGJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkKKyAgICB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSAmJiBqaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX2ppdENvbnN0YW50
UG9vbC5kYXRhKCk7CisgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRT
d2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9m
VW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1
bXBUYWJsZSYgdW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpA
QCAtNjExLDYgKzYxMCw3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXRE
YXRhKTsKICAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
W3RhYmxlSW5kZXhdOwogICAgIH0KKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5n
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKICNlbmRpZgogICAgIHNpemVfdCBudW1i
ZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5s
aW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAg
ICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dW5saW5rZWRT
dHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTYzMywyMSArNjMzLDIxIEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgY2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jv
c3NlZEFuZFNldCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+
Y2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CiAgICAgfQogCiAgICAgdm9pZCBk
b250SklUQW55dGltZVNvb24oKQogICAgIHsKLSAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVy
LmRlZmVySW5kZWZpbml0ZWx5KCk7CisgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+ZGVm
ZXJJbmRlZmluaXRlbHkoKTsKICAgICB9CiAKICAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChp
bnQzMl90IHRocmVzaG9sZCk7Ci0gICAgdm9pZCBqaXRBZnRlcldhcm1VcCgpOwogICAgIHZvaWQg
aml0U29vbigpOworICAgIHZvaWQgaml0TmV4dEludm9jYXRpb24oKTsKIAogICAgIGNvbnN0IEJh
c2VsaW5lRXhlY3V0aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgICAgICByZXR1cm4g
Km1fbGxpbnRFeGVjdXRlQ291bnRlcjsKICAgICB9CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8c3Rk
Ojp0dXBsZTxTdHJ1Y3R1cmVJRCwgdW5zaWduZWQ+LCBGaXhlZFZlY3RvcjxMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+PiBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFw
OwpAQCAtNzk3LDYgKzc5Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1
ZXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRl
YnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAg
dm9pZCBhZGRCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJl
bW92ZUJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCkBAIC04MzgsNiArODM5LDcg
QEAgcHVibGljOgogICAgIG11dGFibGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBi
b29sIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRo
ZSBKSVQgd2FudHMgdG8gc3RvcmUgdG8gaXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxv
Y2ssIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1
bnNpZ25lZCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2
ZWwKQEAgLTkwNiwxMSArOTA4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywg
bV9tZXRhZGF0YSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JG
dXp6aW5nRWFybHlSZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUg
cmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAg
cmV0dXJuICFtX3VubGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAg
Ym9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bigpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMo
KTsKQEAgLTEwMDgsNyArMTAwNiw5IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlV2F0Y2hwb2lu
dE1hcCBtX2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXA7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1f
aml0Q29kZTsKICNpZiBFTkFCTEUoSklUKQorcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxK
SVREYXRhPiBtX2ppdERhdGE7Citwcml2YXRlOgogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19KSVQp
CiAgICAgLy8gVGhpcyBpcyByZWxldmFudCB0byBub24tREZHIGNvZGUgYmxvY2tzIHRoYXQgc2Vy
dmUgYXMgdGhlIHByb2ZpbGVkIGNvZGUgYmxvY2sKQEAgLTEwMjcsNyArMTAyNyw3IEBAIHByaXZh
dGU6CiAKICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOwogICAgIAot
ICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAg
QmFzZWxpbmVFeGVjdXRpb25Db3VudGVyKiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgeyBudWxscHRy
IH07CiAKICAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9qaXRFeGVjdXRlQ291bnRlcjsK
ICAgICB1aW50MzJfdCBtX29zckV4aXRDb3VudGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyODIwMTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5l
cy5oIgpAQCAtMTI2LDQgKzEyNywyNCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2Fs
bExpbmtJbmZvCiAgICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZU19JTkxJTkUgY29u
c3QgSklUQ29kZU1hcCYgQ29kZUJsb2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAgICBBU1NFUlQoaml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFwOworfQorCitB
TFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN3aXRjaEp1
bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2Rl
Kj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQor
CitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN0cmlu
Z1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxp
bmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7
CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQog
ICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25D
b3VudGVyLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxOCArNTAs
MTggQEAgYm9vbCBFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OgogICAgIGlmICho
YXNDcm9zc2VkVGhyZXNob2xkKGNvZGVCbG9jaykpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IAotICAgIGlmIChzZXRUaHJlc2hvbGQoY29kZUJsb2NrKSkKKyAgICBpZiAoc2V0VGhyZXNob2xk
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAog
dGVtcGxhdGU8Q291bnRpbmdWYXJpYW50IGNvdW50aW5nVmFyaWFudD4KLXZvaWQgRXhlY3V0aW9u
Q291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjpzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hv
bGQsIENvZGVCbG9jayogY29kZUJsb2NrKQordm9pZCBFeGVjdXRpb25Db3VudGVyPGNvdW50aW5n
VmFyaWFudD46OnNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCkKIHsKICAgICByZXNl
dCgpOwogICAgIG1fYWN0aXZlVGhyZXNob2xkID0gdGhyZXNob2xkOwotICAgIHNldFRocmVzaG9s
ZChjb2RlQmxvY2spOworICAgIHNldFRocmVzaG9sZCgpOwogfQogCiB0ZW1wbGF0ZTxDb3VudGlu
Z1ZhcmlhbnQgY291bnRpbmdWYXJpYW50PgpAQCAtMTMzLDcgKzEzMyw3IEBAIGJvb2wgRXhlY3V0
aW9uQ291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjoKIH0KIAogdGVtcGxhdGU8Q291bnRpbmdWYXJp
YW50IGNvdW50aW5nVmFyaWFudD4KLWJvb2wgRXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1Zhcmlh
bnQ+OjpzZXRUaHJlc2hvbGQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCitib29sIEV4ZWN1dGlvbkNv
dW50ZXI8Y291bnRpbmdWYXJpYW50Pjo6c2V0VGhyZXNob2xkKCkKIHsKICAgICBpZiAobV9hY3Rp
dmVUaHJlc2hvbGQgPT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpIHsKICAg
ICAgICAgZGVmZXJJbmRlZmluaXRlbHkoKTsKQEAgLTE1OSw3ICsxNTksNyBAQCBib29sIEV4ZWN1
dGlvbkNvdW50ZXI8Y291bnRpbmdWYXJpYW50Pjo6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAotICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2NrID8gY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSA6IG51bGxwdHIsIHRocmVzaG9sZCk7CisgICAgdGhyZXNob2xk
ID0gY2xpcHBlZFRocmVzaG9sZCh0aHJlc2hvbGQpOwogICAgIAogICAgIG1fY291bnRlciA9IHN0
YXRpY19jYXN0PGludDMyX3Q+KC10aHJlc2hvbGQpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2aXNp
b24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNv
dW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBmb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7IC8vIElmIHlvdSB1c2UgdGhpcywgY2hlY2tJ
ZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoKSBtYXkgc3RpbGwgcmV0dXJuIGZhbHNlLgogICAgIGJv
b2wgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoQ29kZUJsb2NrKik7CiAgICAgYm9vbCBo
YXNDcm9zc2VkVGhyZXNob2xkKCkgY29uc3QgeyByZXR1cm4gbV9jb3VudGVyID49IDA7IH0KLSAg
ICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJsb2NrKik7Cisg
ICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQpOwogICAgIHZvaWQgZGVm
ZXJJbmRlZmluaXRlbHkoKTsKICAgICBkb3VibGUgY291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxkb3VibGU+KG1fdG90YWxDb3VudCkgKyBtX2NvdW50ZXI7IH0KICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKQEAgLTg2LDEzICs4Niw5IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgVCBjbGlwcGVkVGhy
ZXNob2xkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFQgdGhyZXNob2xkKQorICAgIHN0
YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoVCB0aHJlc2hvbGQpCiAgICAgewotICAgICAgICBpbnQz
Ml90IG1heFRocmVzaG9sZDsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnJhbmRvbWl6ZUV4ZWN1dGlv
bkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpICYmIGdsb2JhbE9iamVjdCkKLSAgICAgICAgICAg
IG1heFRocmVzaG9sZCA9IGdsb2JhbE9iamVjdC0+d2Vha1JhbmRvbUludGVnZXIoKSAlIG1heGlt
dW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbWF4VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVj
a3BvaW50cygpOworICAgICAgICBpbnQzMl90IG1heFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRp
b25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKTsKICAgICAgICAgaWYgKHRocmVzaG9sZCA+IG1h
eFRocmVzaG9sZCkKICAgICAgICAgICAgIHRocmVzaG9sZCA9IG1heFRocmVzaG9sZDsKICAgICAg
ICAgcmV0dXJuIHRocmVzaG9sZDsKQEAgLTEwMCw3ICs5Niw3IEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICBib29sIGhhc0Nyb3NzZWRUaHJlc2hvbGQoQ29kZUJsb2NrKikgY29uc3Q7Ci0gICAg
Ym9vbCBzZXRUaHJlc2hvbGQoQ29kZUJsb2NrKik7CisgICAgYm9vbCBzZXRUaHJlc2hvbGQoKTsK
ICAgICB2b2lkIHJlc2V0KCk7CiAKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHJldmlzaW9uIDI4MjAxNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9k
ZU1ldGFkYXRhCiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggewogICAg
IEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFk
YXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmlsZSk7IH0KIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsKIApAQCAtODgsNiArODks
NyBAQCB1bmlvbiBHZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUgbW9k
ZTsKICAgICAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBtdXN0
IGJlIHplcm8gd2hlbiB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlk
TW9kZU1ldGFkYXRhLCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0IGRl
ZmF1bHRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAgICAg
R2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9kZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZp
c2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYgKzM4NSw4IEBAIGJvb2wgSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcygKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsK
IH0KIAorLy8gT09QUzogTWFrZSB0aGlzIHN0dWZmIHdvcmsgd2l0aCBkYXRhIGljcyB0byBub3Qg
YXNzdW1lIGlubGluZSBhY2Nlc3MuCisKIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNK
dW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4gdGFyZ2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CkBA
IC00MDQsOSArNDA2LDEyIEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5B
Y2MKIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHRhcmdldCkKIHsKICAgICBpZiAoY29kZUJsb2NrLT51
c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBPT1BTOiBtYWtlIHNvbWUgdmVyc2lvbiBvZiBJbmxp
bmVBY2Nlc3MgZm9yIGJhc2VsaW5lLiBQZXJoYXBzIG1ha2UgaXQgZGF0YSBkcml2ZW4uIE9yIHBl
cmhhcHMgaGF2ZSB0aGUgY29kZQorICAgICAgICAvLyBiZSBzaGFyZWQgc29tZWhvdyBiZXR3ZWVu
IFVubGlua2VkQ29kZUJsb2Nrcy4KKwogICAgICAgICAvLyBJZiBpdCBpcyBub3QgR2V0QnlJZC1s
aWtlLXRoaW5nLCB3ZSBkbyBub3QgZW1pdCBub3Agc2xlZCAoZS5nLiBHZXRCeVZhbCkuCiAgICAg
ICAgIC8vIFRoZSBjb2RlIGlzIGFscmVhZHkgYW4gaW5kaXJlY3QganVtcCwgYW5kIG9ubHkgdGhp
bmcgd2Ugc2hvdWxkIGRvIGlzIHJlcGxhY2luZyBtX2NvZGVQdHIuCi0gICAgICAgIGlmIChzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0
VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcikgewogICAgICAgICAgICAgLy8gSWYgbV9jb2RlUHRyIGlzIHBvaW50aW5nIHRvIHN0
dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbiwgdGhpcyBtZWFucyB0aGF0IElubGluZUFjY2Vz
cyBjb2RlIGlzIG5vdCBhIHN0dWIgb25lLgogICAgICAgICAgICAgLy8gV2UgcmV3cml0ZSB0aGlz
IHdpdGggdGhlIHN0dWItYmFzZWQgZGlzcGF0Y2hpbmcgY29kZSBvbmNlLCBhbmQgY29udGludWUg
dXNpbmcgaXQgdW50aWwgd2UgcmVzZXQgdGhlIGNvZGUuCiAgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8ubV9jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0gc3R1YkluZm8uc2xvd1BhdGhTdGFy
dExvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpIHsKQEAgLTQyMSw2ICs0MjYsNyBAQCB2b2lk
IElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSks
ICJJbmxpbmVBY2Nlc3M6IGxpbmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KKwogICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0
aW9uTW9kZU1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgT1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9S
X0VOVU1fQ0xBUwogCiBzdHJ1Y3QgSXRlcmF0aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90
IHNlZW5Nb2RlcyB7IDAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVz
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1v
ZGVzKTsgfSAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9
PSBzaXplb2YoSXRlcmF0aW9uTW9kZSkpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjAx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBB
cnJheVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5m
bywgbV9hcnJheVByb2ZpbGUpOyB9CiAKIHByaXZhdGU6CiAgICAgdWludHB0cl90IG1fY2FsbGVl
T3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQgfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlm
aWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5j
bHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTI4
NSw2ICsyODYsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAg
ICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywg
KnRoaXMsIFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vz
c1R5cGU6OkluQnlJZDoKQEAgLTQzMCw2ICs0MzIsMjA0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBT
dHJ1Y3R1cmVTdHViSW5mbzo6c2UKICAgICBtX2NhY2hlVHlwZSA9IG5ld0NhY2hlVHlwZTsKIH0K
IAordm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2Vk
U3R1YkluZm8pCit7CisgICAgYWNjZXNzVHlwZSA9IHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlw
ZTsKKyAgICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8uc3RhcnQ7IC8vIE9PUFM6IGRvIHdlIG5l
ZWQgYSBzdGFydCBmb3IgZGF0YSBJQ3M/CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRTdHVi
SW5mby5kb25lTG9jYXRpb247CisgICAgc2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5rZWRT
dHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpKTsKKyAgICBjb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5
dGVjb2RlSW5kZXgpOworICAgIG1fY29kZVB0ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKwor
ICAgIHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCk7CisgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxpbmtl
ZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZvciBp
dGVyYXRvcl9uZXh0LCB3ZSBjYW4ndCBjbG9iYmVyIHRoZSBzY3JhdGNoIHJlZ2lzdGVyIGVpdGhl
ci4KKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpz
Y3JhdGNoKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25EZWxldGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0
ZUJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRC
eVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uSW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisg
ICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1p
emU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6
IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGlt
aXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAg
ICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0
S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1v
ZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAg
ICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAg
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgor
ICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZh
dGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtp
bmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAo
dW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFN
b2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0
cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIG1f
c2xvd09wZXJhdGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxkUHV0S2luZC5pc0Rl
ZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9w
ZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFs
c2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJ
RDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQ
UiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0
eUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5
SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CisgICAg
ICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIGhhc0NvbnN0YW50SWRl
bnRpZmllciA9IGZhbHNlOworICAgICAgICBwcm90b3R5cGVJc0tub3duT2JqZWN0ID0gZmFsc2U7
CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOwor
ICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
cHJvdG87CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlW
YWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlz
R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0
QnlJZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOwor
ICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRp
ZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1Jl
Z2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnRoaXNHUFIgPSBCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRl
bnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7Cisg
ICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAg
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9z
dHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFs
c2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFs
dWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6UHV0QnlWYWwp
CisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJp
dmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAg
ICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICB2YWx1ZUdQUiA9IElu
dmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiAj
aWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmNoZWNrQ29uc2lzdGVu
Y3koKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlci5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCiAj
aW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVTZXQuaCIKQEAgLTU2LDYgKzU3LDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBl
IDogaW50OF90IHsKICAgICBHZXRCeVZhbCwKICAgICBQdXRCeUlkLAogICAgIFB1dEJ5VmFsLAor
ICAgIFB1dFByaXZhdGVOYW1lLAogICAgIEluQnlJZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1By
aXZhdGVOYW1lLApAQCAtNzgsNiArODAsOCBAQCBlbnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhf
dCB7CiAgICAgU3RyaW5nTGVuZ3RoCiB9OwogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbzsKKwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFN0cnVjdHVyZVN0dWJJbmZvKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAg
LTk4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91
dFRvRGllKCk7CiAKKyAgICB2b2lkIGluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJik7CisKICAgICBERUNM
QVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFr
IHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRz
ZWxmLApAQCAtNDQ3LDYgKzQ1MywxOCBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNH
ZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7
CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQ
cml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRL
aW5kOjpub25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpzbG9wcHko
KSB9OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICAvLyBPT1BTOiBEbyB3
ZSBuZWVkIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHVi
Um91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUg
aW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUg
anVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N1cGVyU2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NCw3ICs4NCw3IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJTdGF0ZSgpCiAgICAgZG91Ymxl
IHBlcmNlbnRhZ2UgPSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsKICAgICBpZiAocGVyY2VudGFn
ZSAhPSBwZXJjZW50YWdlKQogICAgICAgICBwZXJjZW50YWdlID0gMC4wOwotICAgIGRhdGFMb2co
IlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAi
XG4iKTsKKyAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxh
ZzogIiwgcGVyY2VudGFnZSwgIiVcbiIpOwogfQogCiB2b2lkIGVuYWJsZVN1cGVyU2FtcGxlcigp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKIAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAKKyNpbmNsdWRlICJC
YXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIK
ICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKQEAg
LTc4LDYgKzc5LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgog
ICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tlcik7CiAgICAgICAgIG1fcmFy
ZURhdGEtPm1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAgfQorCisgICAgbV9sbGludEV4
ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlz
aXRvcj4KQEAgLTMxNiw0ICszMTksMTYgQEAgaW50IFVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxp
bmVKdW1wT2ZmcwogICAgIHJldHVybiBtX291dE9mTGluZUp1bXBUYXJnZXRzLmdldChieXRlY29k
ZU9mZnNldCk7CiB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorYm9vbCBVbmxpbmtlZENvZGVCbG9j
azo6aGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIC8vIE9PUFM6
IGRvIHdoYXQgQ29kZUJsb2NrIGRvZXMgYW5kIG1ha2UgYSBoYXNoIHRhYmxlPworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAg
ICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOSAr
MjUsMTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNp
bmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNp
bmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIK
ICNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8u
aCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCkBAIC02Miw2ICs2NCw3IEBAIGNsYXNzIFVubGlu
a2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU7CitjbGFzcyBCYXNlbGluZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVt
IGNsYXNzIExpbmtUaW1lQ29uc3RhbnQgOiBpbnQzMl90OwogCkBAIC0xNzUsNiArMTc4LDcgQEAg
cHVibGljOgogCiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYg
Y29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAg
Y29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3Rh
bnRJbmRleCgpXTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50
b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3Rh
bnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
c1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApA
QCAtMjA3LDYgKzIxMSwxNSBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlw
dE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1f
c2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlv
bnMoKSBjb25zdDsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29k
ZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRy
KCk7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24pCisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9
IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVj
dGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNp
emUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9u
c0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJu
IGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGlu
c3RydWN0aW9uc1NpemUoKSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0K
IAogICAgIHVuc2lnbmVkIG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2Fs
bGVlTG9jYWxzOyB9CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
VmFyczsgfQpAQCAtMzM0LDYgKzM0NywxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21l
dGFkYXRhLT5zaXplSW5CeXRlcygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxp
Z2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWls
dGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4K
KyAgICAgICAgcmV0dXJuICFpc0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KKworI2lmIEFTU0VS
VF9FTkFCTEVECisgICAgYm9vbCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7Cisj
ZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJl
KiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0
aW9uTW9kZT4pOwpAQCAtMzk0LDYgKzQxNiw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9s
ZXhpY2FsU2NvcGVGZWF0dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBt
X2xvY2s7CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29k
ZTsKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAgU291
cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEwLDYgKzQzMyw5IEBAIHByaXZhdGU6CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwog
CisgICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFjZSB0byBzdG9yZSB0aGlzIHN0dWZmPwor
ICAgIFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAg
ICBWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2ZpbGVzOwogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAt
NDU1LDYgKzQ4MSwzMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5l
SnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAgIGludCBvdXRPZkxp
bmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAgICB7CisgICAgICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgICAgICBy
ZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgfQorCisgICAg
dW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IHJlc3VsdCA9IG1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fYmluYXJ5
QXJpdGhQcm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNp
emUoKTsKKyAgICAgICAgbV91bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKFVuYXJ5QXJpdGhQcm9m
aWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5
QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJv
ZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorCisg
ICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1
cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZM
aW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47
CkBAIC00NjIsNiArNTEyLDcgQEAgcHJpdmF0ZToKICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBt
X291dE9mTGluZUp1bXBUYXJnZXRzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9y
YXJlRGF0YTsKICAgICBGaXhlZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Np
b25JbmZvOworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50
ZXI7CiAKIHByb3RlY3RlZDoKICAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKICAgICBib29sIHdhc0NvbXBpbGVkV2l0aERlYnVn
Z2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+d2FzQ29tcGlsZWRXaXRo
RGVidWdnaW5nT3Bjb2RlcygpOyB9CiAgICAgYm9vbCBoYXNDaGVja3BvaW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50cygpOyB9CiAgICAgYm9vbCBoYXNUYWls
Q2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aGFzVGFpbENhbGxzKCk7IH0KKyAg
ICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+
YWRkQmluYXJ5QXJpdGhQcm9maWxlKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJv
ZmlsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpOyB9CiAK
ICAgICAvLyBVcGRhdGluZyBVbmxpbmtlZENvZGVCbG9jay4KICAgICB2b2lkIHNldEhhc0NoZWNr
cG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFzQ2hlY2twb2ludHMoKTsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRh
VGFibGUuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwx
NCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVubGlua2VkTWV0YWRh
dGFUYWJsZSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZT4KKyAgICB1
aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYgb3Bjb2RlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQpOworICAgICAgICB1aW50cHRyX3QgYmFz
ZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bjb2RlOjpvcGNvZGVJ
RF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07CisgICAgICAgIHJldHVybiBi
YXNlVHlwZU9mZnNldCArIHNpemVvZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29k
ZS5tX21ldGFkYXRhSUQ7CisgICAgfQorCiBwcml2YXRlOgogICAgIGVudW0gRW1wdHlUYWcgeyBF
bXB0eSB9OwogCkBAIC0xMDEsNiArMTA5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNf
b2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQz
Ml90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQCB0ZW1wbGF0ZTx1bnNpZ25lZCBudW1iZXJPZkJ1Y2tl
dHNBcmd1bWVuCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1bWVudDsKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzID0gMTsK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9IG51bWJlck9m
QnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3RhbE51bWJlck9m
QnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzOwogICAg
IAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQpAQCAtMTM0LDcgKzEzMyw3IEBAIHN0cnVjdCBWYWx1
ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247CiAg
ICAgfQotICAgIAorCiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNrZXRzW3RvdGFsTnVtYmVyT2ZC
dWNrZXRzXTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbiB7IFNwZWNOb25lIH07
CkBAIC0xNTYsNiArMTU1LDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1
Y2tldAogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZhbHVlUHJvZmlsZVdpdGhMb2dO
dW1iZXJPZkJ1Y2tldHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgpIDogVmFsdWVQcm9maWxlV2l0
aExvZ051bWJlck9mQnVja2V0czwwPigpIHsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1f
YnVja2V0c1swXSk7IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5OCw3ICsxNTk4LDcgQEAgUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRVbmFyeQogICAgICAgICBlbWl0VW5hcnlPcDxP
cE5vdD4oZHN0LCBzcmMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAg
ICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUpOworICAgICAgICBPcE5l
Z2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJp
dGhQcm9maWxlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIG9wX2JpdG5vdDoKICAgICAg
ICAgZW1pdFVuYXJ5T3A8T3BCaXRub3Q+KGRzdCwgc3JjKTsKQEAgLTE2OTYsMTMgKzE2OTYsMTMg
QEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUeXBlTwogCiBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAg
T3BJbmM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNEc3Qs
IG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0
OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYyhSZWdpc3RlcklE
KiBzcmNEc3QpCiB7Ci0gICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcERlYzo6
ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsK
ICAgICByZXR1cm4gc3JjRHN0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODIw
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIFJlZ2lzdGVySUQqPgogICAgICAgICBlbWl0QmluYXJ5T3AoUmVnaXN0ZXJJ
RCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBzcmMyLCBPcGVyYW5kVHlwZXMg
dHlwZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwg
c3JjMSwgc3JjMiwgdHlwZXMpOworICAgICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywgZHN0
LCBzcmMxLCBzcmMyLCB0eXBlcywgbV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgp
KTsKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjQsNyArMTI0LDcgQEAgdm9pZCBKSVRDb2RlOjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKENvZAog
ewogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOwog
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgKmNvZGVCbG9jaywgIjogRlRM
LW9wdGltaXppbmcgbmV4dCBpbnZvY2F0aW9uLiIpOwotICAgIHRpZXJVcENvdW50ZXIuc2V0TmV3
VGhyZXNob2xkKDAsIGNvZGVCbG9jayk7CisgICAgdGllclVwQ291bnRlci5zZXROZXdUaHJlc2hv
bGQoMCk7CiB9CiAKIHZvaWQgSklUQ29kZTo6ZG9udE9wdGltaXplQW55dGltZVNvb24oQ29kZUJs
b2NrKiBjb2RlQmxvY2spCkBAIC0xNDAsOCArMTQwLDcgQEAgdm9pZCBKSVRDb2RlOjpvcHRpbWl6
ZUFmdGVyV2FybVVwKENvZGVCbAogICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgKmNvZGVCbG9jaywgIjogRlRMLW9wdGltaXppbmcgYWZ0ZXIgd2FybS11cC4iKTsKICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKICAgICB0
aWVyVXBDb3VudGVyLnNldE5ld1RocmVzaG9sZCgKLSAgICAgICAgYmFzZWxpbmUtPmFkanVzdGVk
Q291bnRlclZhbHVlKE9wdGlvbnM6OnRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXAo
KSksCi0gICAgICAgIGJhc2VsaW5lKTsKKyAgICAgICAgYmFzZWxpbmUtPmFkanVzdGVkQ291bnRl
clZhbHVlKE9wdGlvbnM6OnRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXAoKSkpOwog
fQogCiB2b2lkIEpJVENvZGU6Om9wdGltaXplU29vbihDb2RlQmxvY2sqIGNvZGVCbG9jaykKQEAg
LTE1MCw4ICsxNDksNyBAQCB2b2lkIEpJVENvZGU6Om9wdGltaXplU29vbihDb2RlQmxvY2sqIGNv
CiAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAqY29kZUJsb2NrLCAiOiBG
VEwtb3B0aW1pemluZyBzb29uLiIpOwogICAgIENvZGVCbG9jayogYmFzZWxpbmUgPSBjb2RlQmxv
Y2stPmJhc2VsaW5lVmVyc2lvbigpOwogICAgIHRpZXJVcENvdW50ZXIuc2V0TmV3VGhyZXNob2xk
KAotICAgICAgICBiYXNlbGluZS0+YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNo
b2xkRm9yRlRMT3B0aW1pemVTb29uKCkpLAotICAgICAgICBjb2RlQmxvY2spOworICAgICAgICBi
YXNlbGluZS0+YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9yRlRMT3B0
aW1pemVTb29uKCkpKTsKIH0KIAogdm9pZCBKSVRDb2RlOjpmb3JjZU9wdGltaXphdGlvblNsb3dQ
YXRoQ29uY3VycmVudGx5KENvZGVCbG9jayogY29kZUJsb2NrKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Nyw3ICs5Nyw2IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSoKICAg
ICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7
CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsK
LSAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJs
b2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCiAgICAgaWYgKCFP
cHRpb25zOjp1c2VPU1JFbnRyeVRvREZHKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAy
ODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShE
RkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0pJ
VENvZGUuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSklULmgiCkBA
IC0zMDksMTAgKzMxMCwxNSBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxw
ZXJzCiAgICAgICAgICAgICB0cnVlQ2FsbGVyID8gQXNzZW1ibHlIZWxwZXJzOjpVc2VFeGlzdGlu
Z1RhZ1JlZ2lzdGVyQ29udGVudHMgOiBBc3NlbWJseUhlbHBlcnM6OkNvcHlCYXNlbGluZUNhbGxl
ZVNhdmVkUmVnaXN0ZXJzRnJvbUJhc2VGcmFtZSwKICAgICAgICAgICAgIEdQUkluZm86OnJlZ1Qy
LCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDQpOwogCisgICAgICAgIC8vIE9PUFM6IENv
bnNpZGVyIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIGJhc2VsaW5lIHBiL21ldGFkYXRh
IHJlZ2lzdGVycwogICAgICAgICBpZiAoY2FsbGVySXNMTEludCkgewogICAgICAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9j
a0ZvcigqdHJ1ZUNhbGxlcik7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxl
KCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBM
TEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSk7CiAgICAgICAgICAgICBqaXQuc3Rv
cmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxs
RnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUikpOworICAg
ICAgICB9IGVsc2UgaWYgKHRydWVDYWxsZXIpIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVD
YWxsZXIpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVl
U2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgSklUOjpzX21ldGFk
YXRhR1BSKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5iYXNlbGluZUpJVENvbnN0YW50UG9v
bCgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywg
SklUOjpzX2NvbnN0YW50c0dQUikpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpbmxpbmVD
YWxsRnJhbWUtPmlzVmFyYXJncygpKQpAQCAtNDA0LDYgKzQxMCw5IEBAIHZvaWQgYWRqdXN0QW5k
SnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3RlcnM6
OnBjR1BSKTsKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4
aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2UgeworICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+bWV0
YWRhdGFUYWJsZSgpKSwgSklUOjpzX21ldGFkYXRhR1BSKTsKKyAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPmJhc2VsaW5lSklUQ29u
c3RhbnRQb29sKCkpLCBKSVQ6OnNfY29uc3RhbnRzR1BSKTsKKwogICAgICAgICBjb2RlQmxvY2tG
b3JFeGl0LT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5k
ZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzAsNiArNzMwLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAg
c2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZVRhZ0dQUiwg
Y2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShu
dW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3Mg
PSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9
IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsK
QEAgLTg4OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBu
b2RlCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNU
YWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1f
aml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNo
dWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxl
cihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZp
c2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDUsNiArNzQ1LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2Fs
bGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMpOwogICAg
ICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAg
ICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdF
ZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CkBAIC04OTYsNyAr
ODk3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIAog
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsK
LSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCht
X2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6
Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFt
ZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlz
aW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcgKzM5ODUsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVy
cyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdp
biwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAorICAgICAg
ICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0
ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVzZWRSZWdpc3RlcnMsCiAgICAgICAgIEpT
VmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5
KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAg
ICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogCkBAIC0xNDc3OCw3
ICsxNDc3OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAg
R1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgbV9qaXQu
Y29kZUJsb2NrKCksIGNhbGxTaXRlSW5kZXgpOworICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsKICAg
ICBub1Jlc3VsdChub2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzE3
LDcgKzQzMTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0g
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBwYXJhbXMuZ3BTY3JhdGNoKDAp
IDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8SklU
UHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgaml0LmNvZGVCbG9j
aygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwg
QWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBK
SVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNz
VHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwog
CiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0
cnVlOwpAQCAtMTAxOTEsNiArMTAxOTEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxsb2NhdGVkQXJnczsg
KytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQoVmFs
dWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSkpOwogICAgICAgICAgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAg
ICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxl
ZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVC
bG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50aWNOb2RlT3JpZ2luKTsKQEAgLTEwMzQ5LDEz
ICsxMDM1MCwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5h
cmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgpKTsKIAogICAgICAg
ICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1BcmdzOworICAgICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCktPm51bVBh
cmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0
YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKIAogICAgICAgICAg
ICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRD
YWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5z
ZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAg
ICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpV
c2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7
CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShz
aHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwg
c2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgICAgIH0pOwpA
QCAtMTA2OTgsNyArMTA3MDAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAg
ICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGpp
dCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8t
PmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAg
ICAgICAgICAgfSk7CkBAIC0xMDk3OSw3ICsxMDk4MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwg
WyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygp
OwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcg
KzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkKICAgICAgICAgcmV0
dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRz
KQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFt
ZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVzLm1hcCBkbyB8ZmllbGROYW1lfAorICAgICAgICAg
ICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0u
dXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisgICAgICAgICAgICBlbmQuam9pbigiXG4iKQorICAg
ICAgICBlbmQKKworICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcywgZmll
bGROYW1lcykKICAgICAgICAgICAgIGZpZWxkcy5tYXAgZG8gfGZpZWxkLCB0eXBlfAogICAgICAg
ICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAotICAgICAgICAgICAgICAgICAgICAiI3tw
cmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSl9XG4j
e3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29u
dmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUsIGZpZWxkTmFtZXMpfVxuI3twcmVmaXh9
fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9
I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAgICAgICAgICAgIGZpZWxk
TmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lcy5wdXNoKGZp
ZWxkTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7
ZmllbGROYW1lfTsiCiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmQuam9pbigi
XG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAg
ICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkTmFtZXMgPSBbXQorICAgICAgICBwcmVmaXgg
PSAiICAgICAgICAiCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMocHJlZml4LCBAZmll
bGRzLCBmaWVsZE5hbWVzKQorICAgICAgICBmaWVsZHMgPSBmaWVsZHMgKyAiXG4iICsgZ2VuZXJh
dGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCiAKICAgICAgICAgaW5pdHMg
PSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAmJiAobm90IEBpbml0aWFsaXplcnMuZW1w
dHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTgsOCArNjk4LDEzIEBAIHZvaWQg
QXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXMKIAogdm9pZCBBc3NlbWJseUhlbHBl
cnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQ
UkluZm86OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BS
SW5mbzo6cmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmpl
Y3Qodm0sIGluZm8pOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxs
V2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIENhbGxMaW5rSW5mbyogaW5mbykKK3sK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBDYWxs
IGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyODIw
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzE4LDYgKzE3MTgsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAg
IHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8q
KTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0m
LCBDYWxsTGlua0luZm8qKTsKICAgICAKICAgICB2b2lkIG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2Fs
bCgpOwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCYXNlbGlu
ZUpJVENvZGUuaCIKKworI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkp1bXBUYWJs
ZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitKSVRBZGRJQyogTWF0aElDSG9sZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJ
VE11bElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUU3Vi
SUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVROZWdJQyog
TWF0aElDSG9sZGVyOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
KSB7IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorCit2b2lkIE1hdGhJQ0hv
bGRlcjo6YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCit7CisgICAgbV9hZGRJQ3Mg
PSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICBtX211bElDcyA9IFdURk1vdmUob3RoZXIu
bV9tdWxJQ3MpOworICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAg
bV9zdWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKK30KKworQmFzZWxpbmVKSVRDb2Rl
OjpCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3Zl
KGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgLCBNYXRo
SUNIb2xkZXIoKQoreyB9CisKK0Jhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSgpCit7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9CYXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgi
CisjaW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy9jbGFzcyBK
SVRBZGRJQzsKKy8vY2xhc3MgSklUTXVsSUM7CisvL2NsYXNzIEpJVFN1YklDOworLy9jbGFzcyBK
SVROZWdJQzsKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVuYXJ5QXJpdGhQcm9m
aWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgU2ltcGxlSnVt
cFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3MgTWF0aElDSG9sZGVyIHsK
K3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKTsKKyAg
ICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTXVs
SUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1YklDKiBhZGRK
SVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklUTmVnSUMo
VW5hcnlBcml0aFByb2ZpbGUqKTsKKworICAgIC8qCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8
R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUQWRkSUMq
IGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFk
ZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBl
bmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJ
VE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJp
bmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7
IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9y
Pjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2Zp
bGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlw
ZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkg
eyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKyAgICAqLworCitwcml2YXRlOgorICAg
IEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKKyAg
ICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Cit9
OworCitjbGFzcyBKSVRDb25zdGFudFBvb2wgeworcHVibGljOgorICAgIHVzaW5nIENvbnN0YW50
ID0gdW5zaWduZWQ7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAg
R2xvYmFsT2JqZWN0LAorICAgICAgICBDYWxsTGlua0luZm8sCisgICAgICAgIFN0cnVjdHVyZVN0
dWJJbmZvLAorICAgICAgICBGdW5jdGlvbkRlY2wsCisgICAgICAgIEZ1bmN0aW9uRXhwciwKKyAg
ICB9OworCisgICAgc3RydWN0IFZhbHVlIHsKKyAgICAgICAgLy8gT09QUzogTWFrZSB0aGUgcG9p
bnRlciBwYWNrZWQuCisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgdm9pZCogcGF5bG9hZDsK
KyAgICB9OworCisgICAgSklUQ29uc3RhbnRQb29sKCkgPSBkZWZhdWx0OworICAgIEpJVENvbnN0
YW50UG9vbChKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworICAgIEpJVENvbnN0YW50UG9v
bCYgb3BlcmF0b3I9KEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBDb25zdGFu
dCBhZGQoVHlwZSB0eXBlLCB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cikKKyAgICB7CisgICAgICAg
IHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFu
dHMuYXBwZW5kKFZhbHVlIHsgdHlwZSwgcGF5bG9hZCB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRz
LnNpemUoKTsgfQorICAgIFZhbHVlIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2NvbnN0
YW50c1tpXTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxWYWx1ZT4gbV9jb25zdGFudHM7Cit9
OworCisKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJs
aWMgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxK
U0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNr
KTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisKKyAgICBCYWc8VW5saW5rZWRD
YWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2
YWxDYWxsTGlua0luZm9zOyAvLyBPT1BTOiBtYWtlIHN1cmUgd2UgdmlzaXQgdGhlc2Ugc29tZWhv
dy4gT3IgYXNzZXJ0IHdlIGRvbid0IGhhdmUgdG8sIHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxs
cy4KKyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZv
czsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsK
KyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
czsKKyAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9j
b25zdGFudFBvb2w7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6
ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUo
KQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWlu
VGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVP
bk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2Fz
ZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVC
bG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgy
MDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93
Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9p
ZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxl
ZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0
b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihj
b2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0No
aWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNh
bGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRP
RihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0Nh
bGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRv
d1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAg
ICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAg
LTcyLDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEK
ICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikpOwogfQog
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6
OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1Zh
bHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFj
a2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Cisg
ICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9yZVB0cihz
Y29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9j
aykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3Ms
IEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93
UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisK
K3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hh
ZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29k
ZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxv
Y2ssIGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVP
dmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVk
TGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlw
dGlvbikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQw
LDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0
aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Ag
b2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxv
Z1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcg
c2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BS
UmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQ
UlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRy
dXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworICAg
IHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVy
IHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2
b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBH
UFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxGcmFt
ZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBjYWxs
ZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07
Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9
IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJl
Z2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0
YS5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMyBAQCBwdWJs
aWM6CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWduZWQgbnVtTG9j
YWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsgVUlOVF9NQVgg
fTsKKyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8gT24gb3VyIG1h
Y2hpbmUgZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1hcDxWYWx1ZVJl
Y292ZXJ5PiByZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVyIHsgSW52YWxp
ZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2Nr
Kik7CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwogfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENhbGxGcmFtZVNo
dWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkKICAgICAsIG1f
b2xkRnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3Rl
cnMsIG51bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25lZE9sZEZy
YW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAgICAgICArIHJvdW5k
QXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSkpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnMgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5udW1QYXJhbWV0
ZXJzKSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJ
blJlZ2lzdGVycwogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRh
LmFyZ3Muc2l6ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUg
LSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3Rl
clNldDo6YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNz
ZWRBcmdzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykKIHsKICAg
ICAvLyBXZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAgIGZvciAo
dW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3
ICs0MjEsNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhCiAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFt
ZUJhc2UpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9CiAgICAg
ICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fbmV3RnJh
bWVCYXNlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5j
b2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAgIG1faml0LmFkZDMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBt
X2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudFJl
Z2lzdGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVCYXNlLCBtX25l
d0ZyYW1lQmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlci5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAgICAgIGRh
dGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2VkQXJncyA9
IG1fbnVtUGFzc2VkQXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9udW1QYXJh
bWV0ZXJzOwogICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBD
YWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5y
ZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291
bnQoKTsgKytpKQpAQCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwZXJmb3Jt
U2FmZVdyaXRlcygpOwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7IFVJTlRf
TUFYIH07CisgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2
aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Qnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJbnRlcmZh
Y2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51bGxwdHIp
CiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29k
ZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwgbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGlu
ZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAgIG1fcHJv
ZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9jayA9IGNv
ZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTkwLDgg
KzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNraXBPcHRp
bWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhl
Y3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lwT3B0aW1p
emUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1
dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21G
cmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5
RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMjEgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShX
YXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRl
QWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0
KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1Nl
dCkKIHsKKyAgICAvLyBPT1BTOiBUYWtlIGEgYm9vbGVhbiBvciBzb21ldGhpbmcgc2F5aW5nIGlm
IHdlIGNhbiBiZSBudWxsLgorICAgIGF1dG8gb2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBvaW50
ZXJUb1NldCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2lu
dGVyVG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOworICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0
VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hH
UFIpCiB7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT52YXJSZWFkT25seVdhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0z
MihJc0ludmFsaWRhdGVkKSkpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwg
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
c2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5
V2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChF
cXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjph
c3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQpAQCAtMTI5LDcgKzEzOCw3IEBAIHZvaWQgSklUOjph
c3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3RlciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7
CkBAIC0xODEsMjEgKzE5MCw0MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJ
bnN0cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRD
b2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsK
KyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUs
IHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0
T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFi
bGUgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJh
cmVEYXRhVGFnKSwgcmVzdWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0Zv
ckNvbnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkp
LCByZXN1bHQpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRv
Q2FsbEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKK30KKwog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogewogICAgIGlmIChKSVRJbnRlcm5h
bDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywg
IlxuIik7CisgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9wcm9maWxlZENvZGVCbG9j
aywgIlxuIik7CiAgICAgCiAgICAgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICBqaXRBc3Nl
cnRBcmd1bWVudENvdW50U2FuZSgpOwogICAgIAotICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBhdXRvJiBpbnN0cnVj
dGlvbnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKKyAgICB1bnNpZ25l
ZCBpbnN0cnVjdGlvbkNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpOwogCiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAKLSAgICBWTSYgdm0gPSBt
X2NvZGVCbG9jay0+dm0oKTsKICAgICBCeXRlY29kZUluZGV4IHN0YXJ0Qnl0ZWNvZGVJbmRleCgw
KTsKKworICAgIC8vIE9PUFM6IE1heWJlIG9ubHkgZG8gdGhpcyBpZiB3ZSBkaXNhYmxlIHNoYXJp
bmcgc29tZWhvdz8KKyAgICAvKgorICAgIFZNJiB2bSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnZt
KCk7CiAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2st
PmluaGVyaXRzPFByb2dyYW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0pKSkgewogICAgICAgICAvLyBXZSBjYW4gb25seSBk
byB0aGlzIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydz
IGV4YWN0bHkgb25jZS4KICAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52
YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8KQEAg
LTIzNiw2ICsyNjUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgKi8KIAogICAgIG1fYnl0ZWNvZGVDb3Vu
dEhhdmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkg
ewpAQCAtMjc4LDggKzMwOCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkK
IAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVj
dXRpb24oKSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxv
Y2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgewor
ICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+
KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRl
Y29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2lu
dGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgfQpAQCAtNTI3LDcgKzU1Nyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNl
cygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4Owog
Ci0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIAog
ICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4o
IkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9yICIsIG1fYnl0ZWNvZGVJbmRleCwg
IiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CkBAIC01NDUsOCArNTc1LDggQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBpZiAoVU5MSUtF
TFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewogICAgICAgICAgICAg
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAg
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAg
cHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsK
ICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNM
T1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgp
KSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNjc0
LDU1ICs3MDQsNTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRp
ZgogfQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xS
ZWdpc3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9m
ZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0
YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVn
aXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwor
fQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBt
X2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgLy8gT09QUzogTWF5YmUgdGhpcyBz
aG91bGQgYmUgZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJsb2NrPworICAgIERGRzo6Q2FwYWJpbGl0
eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAg
ICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAg
ICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklu
bGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpD
YW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAg
ICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxk
RW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7Ci0gICAgY2FzZSBH
bG9iYWxDb2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToKLSAgICBjYXNlIEV2YWxDb2RlOgotICAg
ICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAgIC8vIFdlIGNvdWxkIGhh
dmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGlu
ZWFibGUgY2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4K
LSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGlu
ZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29kZUJsb2NrKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZV
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1
cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxl
SnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMo
KSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxv
Y2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRh
YmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMo
KSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hK
dW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+
bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3dpdGNo
SnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV91bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgICAgIGlmICht
X3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
cygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8
U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9u
czo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBP
cHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKQotICAgICAgICBtX2Rp
c2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX2NvZGVCbG9jayk7Cisg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2Zp
bGVyKCkpKSkgeworICAgICAgICAvLyBPT1BTOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBvZmYgdW5s
aW5rZWQgY29kZSBibG9jaworICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklU
RGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICB9CiAgICAgaWYgKFVOTElL
RUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpIHsKKyAgICAgICAgLy8gT09QUzogYnVp
bGQgcHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiB1bmxpbmtlZCBjb2RlIGJsb2NrCiAgICAgICAg
IG1fY29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAgICAgICAgIG5ldyBQcm9maWxlcjo6Q29t
cGlsYXRpb24oCi0gICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5l
bnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAorICAgICAgICAgICAgICAgIG1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpCYXNlbGluZSkpOwotICAgICAgICBtX2Nv
bXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyLCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0
ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fcHJvZmlsZWRDb2RlQmxvY2sp
OwogICAgIH0KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVt
KGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwpAQCAtNzQyLDExICs3NzMs
MTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBu
b3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgIGlm
IChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAg
ICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKCk7CiAKICAgICBMYWJlbCBiZWdp
bkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAgaW50IGZyYW1lVG9w
T2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUgPSAtZnJhbWVUb3BPZmZz
ZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9mZnNldCksIGNhbGxGcmFtZVJl
Z2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxvdzsKQEAgLTc1NywxNiAr
Nzg5LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBt
b3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0U2F2ZUNh
bGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsK
KyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOwog
Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgeworICAg
IGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewog
ICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChzaG91bGRFbWl0
UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBh
cmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAg
ICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAmJiAoIW1fdW5saW5rZWRDb2RlQmxvY2st
PmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkg
PiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVk
VmVjdG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIpOworCisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBk
dW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBj
b25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15
IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3Rvcigp
ICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+
aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZz
ZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArODEzLDEyIEBAIHZvaWQgSklU
Ojpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAgICBsb2FkMzIo
QWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAg
ICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkp
OwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVC
bG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAg
ICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3Vt
ZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RC
dWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFJF
TEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgpKSk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmlsZWRDb2RlQmxvY2stPmpp
dFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQogICAgICAgICBtX3Zt
LT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgKnRoaXMp
OwpAQCAtNzk5LDI0ICs4MzUsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZp
bmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYg
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVS
b2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2Nv
ZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xs
YmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCByZWdUMCk7
CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2UgbmV2ZXIgcmVx
dWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fY29kZUJs
b2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgeworICAgIGJvb2wgcmVx
dWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpICE9
IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hlY2sgPSBsYWJl
bCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxvY2stPm1fc2hv
dWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwot
ICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1
ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDAs
IENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkpOwogCiAgICAgICAg
IGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVz
dGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhiZWdpbkxhYmVs
LCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZElt
bTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtUbyhiZWdpbkxh
YmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDAp
OwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAg
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29kZUJsb2NrLT5p
c0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9u
Q2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwg
YXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFj
a09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJh
dGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgYXJndW1l
bnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAg
ICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04MzksNyArODc4LDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBtX2Rp
c2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpk
ZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0
cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBtX2xpbmtCdWZmZXIgPSBz
dGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fdW5saW5r
ZWRDb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsK
ICAgICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4OTcsOCBAQCB2b2lkIEpJVDo6bGluaygpCiAg
ICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6
OkltbWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcjogewotICAg
ICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAg
ICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAg
bGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRj
aFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0p
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2VkVGFibGUubV9i
cmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zm
c2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEsOCArOTEwLDgg
QEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNv
cmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAg
ICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91
bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlEZWZhdWx0
ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNv
ZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yIChhdXRv
JiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMoKSkgewogICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNoT2Zmc2V0OwpA
QCAtOTA2LDMyICs5NDUsMzUgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7CiAgICAgfQogCi0gICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNo
ZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1f
ZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5
SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5VmFscywg
cGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIHBh
dGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vz
c2VzLCBwYXRjaEJ1ZmZlcik7CisgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2Vu
ZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAg
ICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAgICAgICB9
CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFsaXplSUNz
KG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMpOworICAg
IGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlWYWxzKTsK
KyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFs
cyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlW
YWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZv
IDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9
ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAgICBpbmZvLnNldENvZGVMb2Nh
dGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKLSAgICAgICAgICAgIHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2Nh
dGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlv
bkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGluZm8uZG9uZUxvY2F0aW9uID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8u
ZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIEpJVENvZGVNYXBCdWlsZGVy
IGppdENvZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQp
IHsKLSAgICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKLSAg
ICAgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRl
Y29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJl
bHNbYnl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxvY2stPnNl
dEpJVENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKSk7CisgICAgSklUQ29kZU1h
cEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zm
c2V0KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKKyAg
ICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
T2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1ti
eXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk4MiwzNyBAQCB2b2lkIEpJVDo6bGluaygp
CiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7CisgICAgICAgIC8v
IE9PUFM6IG1ha2UgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91dCB1bmxpbmtlZCBDQj8KICAg
ICAgICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKQogICAg
ICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21waWxhdGlvbi5n
ZXQoKSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PmFkZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CisgICAgICAgIG1f
dm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9maWxlZENvZGVC
bG9jaywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1h
cCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAgCisgICAgLy8gT09QUzogTWFrZSBhIHZl
cnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBVbmxpbmtlZENv
ZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NP
REUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAiQmFzZWxp
bmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJCYXNlbGlu
ZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wcm9m
aWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBt
X2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlD
aGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigq
bmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2pp
dENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBt
X2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5m
b3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1vdmUobV91bmxp
bmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZN
b3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRD
b2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOworICAgIG1f
aml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2RlLT5tX2NvbnN0
YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOwogCiAgICAgaWYgKEpJVEludGVybmFs
Ojp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBh
dCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5z
dGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVu
dGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAl
cCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxl
TWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnko
KS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6Zmlu
YWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFp
blRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXND
b21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICsxMDIxLDIxIEBAIENvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFp
blRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2Nr
LT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7
Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVy
T2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8mIGhhbmRs
ZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8gRklYTUU6
IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9
IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFy
Z2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9CisgICAgLy8g
T09QUzogRG9uJ3QgdGhpbmsgdGhpcyBzaHJpbmsgaXMgcmVhbGx5IGRvaW5nIGFueXRoaW5nIGFu
eW1vcmUuIFZlcmlmeS4KKyAgICAvL3sKKyAgICAvLyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgIC8vICAgIG1fY29kZUJsb2NrLT5zaHJpbmtU
b0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CisgICAgLy99
CiAKKyAgICAvLyBPT1BTOiBtX3BjVG9Db2RlT3JpZ2luTWFwIHNob3VsZCBsaXZlIG9uIEJhc2Vs
aW5lSklUQ29kZSBmb3IgYmFzZWxpbmUgY29kZWJsb2Nrcy4KICAgICBpZiAobV9wY1RvQ29kZU9y
aWdpbk1hcCkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1v
dmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5z
ZXRQQ1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKIAogICAg
IG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+YWRk
KAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgpKSAvCi0gICAg
ICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkp
OworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3Ry
dWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2Rl
LnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNl
bGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIENvbXBp
bGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTA0NywxMSBAQCBzaXplX3QgSklUOjpj
b2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZlci0+c2l6ZSgpOwogfQogCi1D
b21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBkb01haW5U
aHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBjb21waWxlQW5kTGlua1dpdGhv
dXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKCk7
CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVCbG9jayk7CiB9CiAKIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKQEAgLTEwNDIsMTggKzEwOTEs
MjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwogICAgICAgICBt
X3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQcmVwYXJp
bmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZyYW1lUmVn
aXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSA9
PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7CiAKICAg
ICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJPZmZzZXQoY29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
SW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNv
ZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2ludCBKSVQ6OnN0YWNrUG9pbnRl
ck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJldHVybiB2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKSAt
IDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2Rl
QmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNoTWFwPENTdHJpbmcsIFNlY29u
ZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3RyaW5nLCBTZWNv
bmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MjAx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWwsIGV4cGVj
dGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQg
XCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxp
bnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAorI2luY2x1ZGUgIkJh
c2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbW1v
blNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgpAQCAtNDQsNiArNDUs
NyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgorI2luY2x1ZGUgIkxMSW50RGF0
YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9p
bnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTE0OSwxNCArMTUxLDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5m
byB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2Vk
Q2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5r
SW5mb0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0Nh
bGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJp
dmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQg
OiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1Bh
dGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEsNiArMTczLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3Qg
YmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAorICAgICAgICB1c2luZyBC
YXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENv
ZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zm
c2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTE3OCwyOCArMTgy
LDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRl
cmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZp
bmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwotICAgICAgICBDb21waWxhdGlvblJlc3Vs
dCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5h
bGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkg
Y29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBp
bGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxl
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9y
dCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZz
ZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBj
b2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9y
dCk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNv
dW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFt
ZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQg
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMo
KTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21waWxl
VGltZSgpOwogCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIg
PSBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSOworICAgICAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzX2NvbnN0YW50c0dQUiA9IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSOwor
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAg
ICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgICAgICB2b2lkIHByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAgICAgIHZvaWQgbGluaygpOwotICAgICAgICBDb21w
aWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAg
ICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKENvZGVCbG9jayosIEpJVENvbXBp
bGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2Rl
LCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCkBAIC0yMjMsNiArMjMy
LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0
YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0
YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRh
KGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9p
ZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zm
c2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZv
aWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZz
ZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9p
ZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qg
b2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVibGljOgorICAgICAgICB2b2lkIGxvYWRDb25zdGFu
dCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgIHByaXZhdGU6CisgICAgICAg
IHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRDb2RlQmxv
Y2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisKKyAgICAgICAgdm9pZCBlbWl0
UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1QwKTsKKwog
ICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRvSGFuZGxlcikKICAgICAgICAg
ewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpA
QCAtMjU4LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9w
OjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgJiYgT3A6Om9w
Y29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9D
b25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdz
IHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwg
T3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlu
a0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAg
IGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4NywxNCArMzIyLDE1IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVt
aXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3du
ZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAogICAg
ICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdU
MCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICAvL3ZvaWQgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOworICAgICAgICAvL3ZvaWQg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBC
eXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgSlNW
YWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdz
KTsKQEAgLTMwNyw2ICszNDMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVBy
b2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQ
cm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0
Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZv
aWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgcHRyZGlm
Zl90LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsK
QEAgLTU5Miw3ICs2MzIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVj
a190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02MjYsMTQgKzY2NSwxNCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNV
bnNpZ25lZCk7CiAKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIg
ZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFu
ZCwgQWNjZXNzVHlwZSk7Ci0gICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxS
ZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUpOworICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xv
dyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4
cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0
aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1p
dFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUpOworICAgICAgICB2b2lkIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcpOworICAgICAg
ICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQ
Uik7CiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5z
aWduZWQgZGVwdGgpOwogICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZp
cnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKQEAgLTY0NSw3ICs2ODQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgog
ICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50
U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQp
OworICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJU
b1NldCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogICAgICAgICB2b2lk
IGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQg
ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CkBAIC02NTQsNiArNjkz
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJh
bWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgICAgIGJv
b2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSlNWYWx1ZSBnZXRDb25z
dGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25z
dGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50
Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjk1LDI2ICs3MzUsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNv
bHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFy
KTsKICAgICAgICAgfQogCi0jZGVmaW5lIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9S
KHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihW
TSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9HRVRfRlJPTV9TQ09Q
RV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQot
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKLQot
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29w
ZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gTW9k
dWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gZW1pdCBpbmxpbmUgdGhhbiB1
c2UgYSB0aHVuay4KLSAgICAgICAgICAgIC8vIFJlc29sdmVkQ2xvc3VyZVZhciBiZWNhdXNlIHdl
IGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9wX3Jlc29sdmVfc2NvcGUuCi0gICAgICAgICAg
ICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAgICAgfQotCi0jZGVmaW5lIERFQ0xBUkVfUkVTT0xWRV9T
Q09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBl
IyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVf
UkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVu
a05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29s
dmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5r
KFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7
CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
dmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CkBA
IC03NTksMTAgKzc4MSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAg
ICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChB
ZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25z
dCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsK
LSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0
YSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRl
Y29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKGNvbnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAg
ICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFt
ZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJh
dGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIwLDIwICs4
NDIsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkpOwog
ICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1l
IE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgog
ICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+Ojpo
YXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9wZXJh
dGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAg
ICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJv
ZmlsZShieXRlY29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVu
YW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5
cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3Mg
dGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3Mg
dGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5cGU+
KHRhcmdldCwgYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRkcmVzcyhH
UFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZz
ZXQpLCByZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bl
cmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOCwyNSArOTQwLDIwIEBAIG5hbWVz
cGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRp
bWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVP
cHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9
CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1p
dFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJl
dHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3
aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBj
YXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2Zp
bGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGVtaXRNYXRl
cmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgdm9p
ZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0
Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMo
KTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJv
bSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNv
bnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8g
dXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1l
IHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRH
ZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFy
eU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFy
eU9wKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtOTYzLDkg
Kzk4MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4g
bV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAK
LSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7
Ci0gICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9jb3BpZWRB
cml0aFByb2ZpbGVzOwotCiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwogICAg
ICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjazsKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC05OTksMTEgKzEwMTMsMjQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8
TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0
YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGlu
ZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAK
LSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAgICAgICAgQ29kZUJs
b2NrKiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBVbmxpbmtlZENv
ZGVCbG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKworICAgICAgICBNYXRo
SUNIb2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2pp
dENvZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAgICAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgQmFnPFVubGlua2Vk
Q2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgICAgIEJhZzxDYWxsTGlua0luZm8+
IG1fZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1w
VGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVt
cFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAgc3RydWN0IE5vdEFD
b2RlQmxvY2sgeyB9IG1fY29kZUJsb2NrOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZp
c2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBAIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9w
MSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1l
bnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BS
MSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMSk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMjAs
NyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAg
ICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAs
IHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/
IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzc1LDggQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CiAKQEAgLTU3Myw3ICs1NzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3coY29uc3QgCiAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExv
YWQob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiB9CiAKQEAgLTcxNyw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9w
KGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9jb2Rl
QmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZShj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBK
SVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsK
ICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRl
SUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVy
YXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAg
ZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAgLTg5
OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAK
IHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0
aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5s
aW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJ
Q3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRk
PihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJVDo6ZW1p
dE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2Rl
ID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsK
ICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hv
dWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRj
aEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRT
bG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUs
MTAgKzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwog
ICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAm
JiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Q
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRj
aEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dD
YXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwxMyAr
MTA2MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAjZW5k
aWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRo
UHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFBy
b2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50
ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
KSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50
ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
KSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFy
aXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24p
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJl
dF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdz
LCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwx
MyArMTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAj
ZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5h
cml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJp
dGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElD
R2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChi
aXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlv
biksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmls
ZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmln
aHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmln
aHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0
PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVn
VDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBF
TkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAg
LTExNjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlv
bioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5i
aW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tX3Byb2Zp
bGVJbmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29w
ZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0
ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjIwLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJ
QyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5i
aW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tX3Byb2Zp
bGVJbmRleCk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFy
aXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1
Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwp
OwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25z
dCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRk
SklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUU3ViSUMqIHN1
YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVj
dGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0
aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVT
dWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgog
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAgICAgc3Rv
cmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVy
RnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVn
VDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0z
MjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1p
dFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDcgKzM0MSw2IEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
c2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIK
ICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5o
IgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC00NCw3ICs0NSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1
bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVz
dGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1
YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDE4ICs1NCwxOCBAQCBzdGQ6OmVuYWJs
ZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29k
ZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3Rh
aWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVj
b2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0
ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hlY2tw
b2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50SW5jbHVk
aW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3Bv
aW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFja09m
ZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCisKICAgICBp
ZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zm
c2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7
CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7
Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0YSwgY2hlY2tw
b2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRv
TWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxM
aW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBB
cnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyArNzksNyBAQCBzdGQ6OmVuYWJsZV9pZl90
PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09
IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBD
YWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRl
Y29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAt
OTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAg
ICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1l
bnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFt
ZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0
ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0RnJlZVJl
Z2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0
RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJl
dHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEwMywxNiBAQCBKSVQ6OmNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0
aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9w
ZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVyYXRpb24o
c2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1Qz
LCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQu
CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxv
YWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFu
Y2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRy
ZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2FkQ29uc3RhbnQo
Y2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwg
Q2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCBy
ZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdU
Mik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZz
ZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RCaWdnZXN0Lmxp
bmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEz
MSwxNiBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRlbXBsYXRlPD4K
IGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBz
dG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxs
ZXJGcmFtZU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIGFyZ3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJlZ1QwKSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9k
ZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShyZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUp
OwogCkBAIC0xNDgsNyArMTUyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNl
KGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZv
ID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCkpOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5r
SW5mbzo6Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2Rl
Lm1fYXJndjsKQEAgLTE1Niw0MyArMTYwLDQ3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICog
c2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhzdGFj
a1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENh
bGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1v
dmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNv
ZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENh
bGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKLXsKK2Jvb2wgSklUOjpjb21w
aWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50KSB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1w
bGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVj
b2RlLCBDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQorYm9v
bCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5r
ZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewotICAgIENhbGxGcmFt
ZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3Mg
PSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBH
UFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBt
YWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOworICAgIHNodWZmbGVEYXRhLT5udW1Q
YXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAgIHNodWZmbGVEYXRhLT5udW1QYXJhbWV0
ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworICAgIHNodWZmbGVE
YXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworICAg
IHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVEYXRh
LmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1ZmZsZURhdGEtPmFyZ3MucmVz
aXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVj
b2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAg
ICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNw
bGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAgICAgICAgIERh
dGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAgICAgIFZh
bHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotICAgIHNodWZmbGVEYXRh
LnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7Ci0gICAgaW5mby0+c2V0RnJh
bWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZh
bHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgIHNodWZmbGVEYXRh
LT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9
IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5r
SW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0
aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgbG9hZENvbnN0YW50
KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0g
Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJl
Z1QyLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgKnNodWZmbGVEYXRh
KS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0
aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CisgICAgaW5mby0+ZnJhbWVT
aHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAgICAgYXV0byBkb25lTG9jYXRp
b24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjE4LDE0ICsyMjYsMjUg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENh
bGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciBy
ZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KLSAgICBDYWxs
TGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2
YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGlu
Zm8pOworCisgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0gVUlOVF9NQVg7CisgICAgaWYg
KG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBpbmZvID0gbV91bmxpbmtlZENh
bGxzLmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bj
b2RlSUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAgICAgQVNTRVJU
KG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAg
ICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7
CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5saW5r
ZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50OworICAg
IH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAogICAg
IC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0
aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1f
Y29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2Nh
dGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1aW50
MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygp
OwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZy
YW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2Fs
bGVlLgpAQCAtMjM0LDE2ICsyNTMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxs
TGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5
cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVu
ZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChjb21waWxlVGFp
bENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBpZiAoY29tcGls
ZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0YW50
KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFudCwgcmVn
VDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93
UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBD
YWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRo
cyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1Qw
LCByZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAg
ICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9KTsKQEAg
LTI1MywxMyArMjY4LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+
ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJl
bCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCArMjg4LDIw
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhp
cyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlzLCBy
ZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRh
aWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcgKzQxMCwzMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQt
PmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vz
c1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5
SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQpA
QCAtNDE2LDEwICs0NDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZv
ckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQot
ICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7
CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsKICAg
ICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBAIC00
MzIsMTkgKzQ1OCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25z
CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNh
bGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxk
ZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JHUFIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQp
LnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRlcmF0
b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBhdXRv
IGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9y
UmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7
CiB9CkBAIC00NTIsNyArNDc2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKICAg
ICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5hcnJv
dzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0OTMs
NzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1bXAg
ZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMp
KSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0ZUFk
ZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAgbG9h
ZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0
T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNl
ZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9NZXRh
ZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJ
dGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5N
b2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwog
ICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAK
LSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9
IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQ
UiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92
ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHBy
IEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2Ny
YXRjaDsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVz
dWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BS
ID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2
YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BSKTsK
ICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVz
ZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1
ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywgQWNjZXNz
VHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJl
c2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vz
c1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
ICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0g
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9u
ZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1
ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7
CiAgICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAg
ICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJl
Z2lzdGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICBH
UFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRj
aEdQUigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRvci5hbGxv
Y2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9
IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2Ny
YXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVj
dChnbG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZU
cnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxH
UFIpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJl
c3VsdEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpHZXRCeUlk
KTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChC
eXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUu
aW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0
dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBK
U1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAogICAgICAg
ICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1NzcsNTUgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7
CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBk
b25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIg
PSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1w
TGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxs
KGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENl
bGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRl
bnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAgICAK
ICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2Jq
ZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5v
dE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAot
ICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86
Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQ
UkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQ
UiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkp
OworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJl
ZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92
YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAg
fQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BS
UmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCog
aWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAg
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7
Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7
Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIw
LCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3Vs
dEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihp
ZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRH
UFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29k
ZS5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKKwogbmFtZXNwYWNl
IEpTQyB7CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtMTU5LDEwICsxNjAsMTAgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAgICB7Ci0gICAg
ICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNlRGF0YUlD
SW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgy
MDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFi
bGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUg
IklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBz
dGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2pp
dFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1Yklu
Zm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBj
b2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxv
Y2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2Fy
YmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRl
OwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01
OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAg
IExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0
YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExv
Y2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zbG93
UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJl
bCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsK
KyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgaml0LmNh
bGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9kb25lID0g
aml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAg
ICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpT
VmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0xMTAsNyArMTE4LDcgQEAg
SklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcgogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFs
dWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkK
ICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBj
YWxsU2l0ZSwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJbmZv
R1BSKQotICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJs
b2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCisgICAgLCBtX2lzTGVuZ3Ro
QWNjZXNzKGNvZGVCbG9jayAmJiBwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJsb2NrLT52bSgp
LnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFz
ZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNp
b24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEpJ
VCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25WYWxp
ZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFs
dWUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCkBAIC0zOCwxMSArMzksMTE0IEBAIG5hbWVzcGFj
ZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNsYXNzIENhbGxTaXRlSW5kZXg7
CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsK
K3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNzIEFjY2Vzc1R5
cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCitzdHJ1Y3QgQmFz
ZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBH
UFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BS
SW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3Qg
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
R1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxS
ZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJl
Z1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7
CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9jayBhbmQgaW5p
dGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KKyAgICBzdGF0aWNf
YXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3Rh
dGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjphcmd1
bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG8gPSBHUFJJbmZvOjph
cmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEg
PSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86
OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1Qx
OworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBH
UFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnMgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVj
dCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKK307CisKK3N0cnVjdCBCYXNlbGlu
ZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUklu
Zm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5m
bzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86
OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBicmFuZCA9
IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xhc3MgSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9
CkBAIC02MiwxNSArMTY2LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKAogICAgICAg
ICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlu
a0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CisK
KyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2VkU3R1YkluZm8geyBudWxs
cHRyIH07CisgICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBwcm90ZWN0ZWQ6Ci0gICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0VHlwZTsKICAgICBTdHJ1
Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgorICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQ
YXRoQ2FsbDsgLy8gT09QUzogbWFrZSByZXBvcnRDYWxsIHBhc3Mgc29tZXRoaW5nIGluIHdlIGNh
biB1c2UgZm9yIHRoZSBub24tQ1RJIHRodW5rcyBidWlsZHMuIAogfTsKIAogY2xhc3MgSklUQnlJ
ZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CkBAIC05OCw3ICsy
MDgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVS
ZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKK3B1Ymxp
YzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTEz
Miw4ICsyNDIsOCBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0gZGVmYXVs
dDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIEpJVFR5
cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLAotICAgICAgICBK
U1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNN
QU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2lu
LCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVh
YmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5k
KTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKICAg
ICAKQEAgLTE2MywxMSArMjczLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQ
YXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNl
OwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
bV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVt
cDsKIH07CiAKQEAgLTE5MSw4ICsyOTksNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRl
RmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Ns
b3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxl
SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNDUsNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI3Nyw4ICszNzksNiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZl
ciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAotcHJpdmF0ZToKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxl
SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSArNDAyLDkgQEAgcHVibGljOgog
ICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2
YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3Jlc3VsdDsK
IAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVy
OjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzMwLDggKzQyOCw2IEBA
IHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXIm
KTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODIwMTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAg
IHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91
YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENv
bnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFu
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBp
ZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9
PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAgICAgICAg
Ly8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBhbGwgbGluayB0aW1lIGNvbnN0YW50
cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIEFT
U0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5n
ZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50
VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkp
CkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxs
V2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBk
c3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3QgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5W
YWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFs
dWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2FsbDsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFk
YXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBC
eXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3Qp
CiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFs
dWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdz
KHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVl
R1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZO
b3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJl
Z2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQor
ICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwog
fQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xv
d0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhh
dCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VS
VChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhh
c0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7
CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRlY29kZUlu
ZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFu
Y2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9y
Q2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVj
b2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0g
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhh
c0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVj
dGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNv
ZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVj
b2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNrcG9p
bnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgsMzQgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAg
ICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0
cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVu
Z3RoKCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRl
KFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKLXsKLSAgICBB
U1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKLQotICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxl
IGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJl
Y3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQodmFsdWUu
Z3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UKLSAgICBFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRH
UFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAgICBzdG9yZTMyKHZhbHVlLnRh
Z0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKLX0KKyAgICBpZiAoIXNy
Yy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtl
ZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBh
c1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7
Cit9CisKKy8vIE9PUFMKKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRl
KFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKy8veworLy8g
ICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CisvLworLy8gICAgLy8gV2UncmUgaW4g
YSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBk
byBhIGRpcmVjdAorLy8gICAgLy8gc3RvcmUuCisvLyNpZiBVU0UoSlNWQUxVRTY0KQorLy8gICAg
c3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyNlbHNlCisv
LyAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vICAgIHN0
b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwor
Ly8gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOwor
Ly8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZh
bHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlBy
b2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1Qw
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQog
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzIzLDI0ICszNTMsMjUg
QEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewog
ICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7CisgICAgcHRyZGlmZl90IG9mZnNldCA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2Rl
KSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29kZT4obV9ieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKTsKKyAgICBzdG9y
ZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVn
KSk7Ci19CisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKKy8veworLy8gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwor
Ly99CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlc3VsdFJlZykK
K3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgR1BSUmVnIHJlc3VsdFJlZykK
IHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1
bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVn
cyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCkBAIC0zNjAsNiArMzkxLDIxIEBAIGlubGluZSB2
b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVcKICAgICB9CiB9CiAKK3RlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJy
YXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3sK
KyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CisgICAgICAgIGxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNv
ZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3Rl
cklEIHNjcmF0Y2hHUFIpCit7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5
dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJh
eVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3JhdGNo
R1BSKTsKK30KKwogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50
SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmFzSW50MzIoKTsKQEAgLTM4MCw3ICs0MjYsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0SW5pdFJlZ2lzdGVyCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZp
cnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAocmVnLmlz
Q29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQ
b29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZp
bkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZERvdWJsZShh
ZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKQEAgLTQ5Niw3ICs1NDIsNyBAQCBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2Nv
ZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkg
ewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUwNiw3ICs1NTIsNyBAQCBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQog
ewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlz
S25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MTQsMTEgKzU2MCw2
IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9CiB9CiAK
LUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdp
c3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRP
cGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9w
MiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKQEAgLTU0NCwxMSArNTg1LDE3IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBBU1NFUlQobV9ieXRlY29kZUlu
ZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29s
ZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAogICAg
IGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQot
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRz
dCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgc3dpdGNoIChtX3VubGlua2VkQ29kZUJsb2NrLT5j
b25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpKSB7CisgICAgICAgIGNhc2UgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICBjYXNlIFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91
bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIG1vdmUoSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0
YW50KHNyYywgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTU2NiwxMSArNjEzLDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0
Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZp
cnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVy
SUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01OTUs
NyArNjM3LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogCiBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0
ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2st
PmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY3OSw3
IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBpZiAo
dGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+
b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgR2V0
UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQotewot
ICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hNYXAg
ZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRHZXRQ
dXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0SW5m
b3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7Ci0g
ICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1dElu
Zm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6OmNv
cGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBrZXkg
PSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAzMiB8
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChpdGVy
YXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVy
YXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGllZEFy
aXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQcm9m
aWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0
KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiArNzAw
LDYxIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICByZXR1
cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2Fk
UHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNl
dCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBt
X3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRl
Y29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9h
ZDgoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgp
Lm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZhbHVl
LCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCku
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMyVG9N
ZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9m
ZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2Rl
KSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgc19tZXRhZGF0YUdQUiwgcmVzdWx0
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvbnN0YW50KEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgY29uc3RhbnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2Fk
UHRyKEFkZHJlc3Moc19jb25zdGFudHNHUFIsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oY29uc3Rh
bnRJbmRleCkgKiA4KSwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9h
ZEdsb2JhbE9iamVjdChHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRDb25zdGFudChtX2dsb2Jh
bE9iamVjdENvbnN0YW50LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
b2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBHUFJSZWcgcmVz
dWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CisgICAg
Ly8gT09QUzogTWF5YmUgbWFrZSB0aGlzIG1vcmUgZWZmaWNpZW50PworICAgIGxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIo
KSksIHJlc3VsdCk7CisgICAgbG9hZDY0KEFkZHJlc3MocmVzdWx0LCBjb25zdGFudC50b0NvbnN0
YW50SW5kZXgoKSAqIHNpemVvZihKU1ZhbHVlKSksIHJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3Ry
dWN0aW8KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zm
c2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihu
dWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsK
IAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9j
aygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2
bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTk5Nyw3ICs5OTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Ig
c3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNv
bnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2st
PnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNb
dGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5k
ZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlh
dGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApA
QCAtMTAyNCw3ICsxMDI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3Qg
SW5zdAogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMs
IHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1
bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9j
b2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1f
c3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgs
IGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFi
bGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwNDIsNyArMTA0Miw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KIAogICAgIC8vIGNyZWF0
ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBz
dGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJp
bmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3
aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBk
ZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAgIGxpbmtlZFRhYmxlLmVu
c3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDgg
QEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0
ZXIuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC01NCwxMSArNTYsMjIgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3NyYzsKIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAg
aWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7Ci0gICAgICAgIGVsc2UK
KyAgICAgICAgLy8gT09QUzogbW9zdCAiT3RoZXIiIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBj
b25zdGFudHMgY2FuIGp1c3QgYmUgZ3JhYmJlZCBmcm9tIHRoZSBVbmxpbmtlZENvZGVCbG9jay4g
SXQncyBqdXN0CisgICAgICAgIC8vIGEgY291cGxlIHR5cGVzIHRoYXQgY2FuJ3QuIENyZWF0ZSBh
biBhYnN0cmFjdGlvbiBmb3IgdGhhdC4KKworICAgICAgICBzd2l0Y2ggKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykpIHsKKyAgICAgICAg
Y2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6CisgICAgICAgIGNhc2UgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6IHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAg
c3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7CisgICAgICAgICAgICBzdG9y
ZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NywzNyArMTAwLDM1IEBAIHZvaWQg
SklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
c3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6
YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0
b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFs
T2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRv
cklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVn
aXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcg
PSByZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYg
KCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVz
dGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRS
ZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVz
dGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsK
LSAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJl
LT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9j
YXRvclJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6
Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIo
bnVsbHB0cik7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0
b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNj
cmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0
cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJ
bml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0
b3JGZW5jZSgqbV92bSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7CisKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUo
KTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3Qs
ICZ2bSgpLCBzdHJ1Y3R1cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2Vs
bChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzE0Miw4IEBAIHZvaWQgSklU
OjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYg
d2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3Rv
bWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNl
U3ltYm9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1
bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFk
ZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblBy
b3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKIApAQCAtMTU0LDMwICsxNjYsMzggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0
ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwg
cHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdl
IHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZp
cnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3RvLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5l
SW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm90b0dQ
UiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgY29uc3RleHByIEdQ
UlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVl
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBwcm90b0dQUik7CiAgICAg
CiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNl
bGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3Rh
bmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOwogCiAgICAgSklUSW5zdGFuY2VPZkdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8g
cmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8K
LSAgICAgICAgcmVnVDUsCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgcmVzdWx0
R1BSLAorICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgcHJvdG9HUFIsCisgICAgICAgIHN0dWJJ
bmZvR1BSLAorICAgICAgICBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxLCBC
YXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gyKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKKwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMTkyLDE0ICsyMTIsMTMgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIAogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFy
Z0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNl
T2ZPcHRpbWl6ZSk+KEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCByZWdUMiwg
cmVnVDEpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm8gPT0gYXJndW1lbnRH
UFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFs
dWUgPT0gYXJndW1lbnRHUFIyKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6cHJvdG8gPT0gYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUo
b3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0y
NDAsNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwog
CiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAs
IHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM3NCw3ICszOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7CiAgICAgcmV0KCk7CiAjZWxzZQpAQCAtMzgzLDkgKzQwMiw5IEBAIHZvaWQgSklU
OjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9w
X3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7Ci0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0YWNrUG9p
bnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdp
c3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBA
IC00MTEsNyArNDMwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElu
cwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NTIsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0
X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9u
TmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24s
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVn
VDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQ
UjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ4NCwxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxP
YmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwg
SlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7
CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNTAxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1NDAsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0Nl
bGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0
dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBt
YXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU2
NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAgICAvLyBG
aXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
Yml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs2MDMsMTMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5l
cV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9p
bnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAg
ICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
ICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxs
SGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1Q
dHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEp
LCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRl
Y29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVx
dWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRh
dGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwu
bGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2NDQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
cmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRh
cmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1
bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2Ny
YXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0
YXJnZXQpOwpAQCAtNjQwLDcgKzY2MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQg
Z2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIg
Z2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzE2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhy
b3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBj
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5
RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVn
VDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5k
bGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzczMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Ro
cm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2Vu
ZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BS
MjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpA
QCAtNzIwLDcgKzc0Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIGppdC5s
b2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5jb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRHUFIwKTsK
KyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYXJn
dW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RH
UFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyArOTMwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEs
IHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5NDEs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CiAKQEAgLTkzMSw3ICs5NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29u
c3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDAp
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVn
VDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVn
ICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9
CkBAIC05NzgsNyArMTAwMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJ
bnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0g
ZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAg
LTk5Myw3ICsxMDE3LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0
aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0
KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxs
cHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygp
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBPT1BTOiBUaGlzIGlzbid0IGVsZWdh
bnQuIFdoeSBhcmVuJ3QgdGhleSBpbiB0aGUgY2FsbGVlIHNhdmUgYnVmZmVyLiBJIGd1ZXNzIGJl
Y2F1c2Ugd2UgY2FuIE9TUiBleGl0IGhlcmU/CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFB
bmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZt
KCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyArMTAzOCwxMSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMs
IHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1
ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVj
b2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAm
dm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2
bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0g
YnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwotICAgIGlmIChidWZmZXIgJiYg
c2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewotICAgICAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSksIHJlZ3MpOwotICAgICAg
ICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKQEAgLTEwNTMsOCAr
MTA2OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChT
d2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBT
d2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxl
KHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsxMDk2LDE0IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVl
ID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Ig
c3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNv
bnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2st
PnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91
bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwg
bV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rlcikp
OwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgsIHVubGlua2Vk
VGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1
bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAg
ICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEwOTks
MjAgKzExMTUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgog
ICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAog
ICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0
aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5
dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAg
bGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hT
dHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJs
ZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRy
ZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9m
ZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJl
cXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9v
a1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTExMzMsNyAr
MTE1MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAg
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdU
MiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE0OCw3
ICsxMTY2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjYsNyArMTE4Myw3
IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
MCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwg
cmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE4OCwxMiAr
MTIwNSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAg
Ly8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNv
bnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQg
dW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNy
ZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1W
YXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygp
OwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBmb3IgKHNpemVfdCBqID0gQ29k
ZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7
IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOworICAg
IAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
MCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6
YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEyMTIsNyArMTIzMSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9oYW5k
bGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVi
cCk7CkBAIC0xMzEwLDIzICsxMzI5LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShj
b25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQg
PSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1Qx
LCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1Qy
KTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBj
YWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4q
IGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVy
SUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0
OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcgKzEzNTcsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9m
ZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9jYXRvclJl
Zyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0
YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNo
ZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BDcmVh
dGVUaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRDYWxsZWUoKSwgY2FjaGVkRnVuY3Rpb25S
ZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwg
Y2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxs
ZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxl
ZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxp
bmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzODcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEo
Y29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdU
MSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5W
YWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEzOTgsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CiAgICAg
Ym94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1
ZUdQUik7CkBAIC0xMzk0LDcgKzE0MTEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNv
bnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxNDIyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1Qx
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVH
UFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsxNDM3LDExIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0
b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0
YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3Rh
bmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZD
dXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9y
LCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFz
SW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25J
bnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwogICAg
IGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIg
fSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0K
QEAgLTE0MzAsNyArMTQ1MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1
c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbikKIHsKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9t
SW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxp
Z2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9u
czo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX3VubGlua2Vk
Q29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkg
ewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3Vu
dGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZFB0cihwdHIsIHJlZ1QwKTsKICAgICAgICAg
YXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2hQdHIoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1t
UHRyKE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0x
NDQwLDcgKzE0NjAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
CiAjZWxzZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZh
bHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCi0gICAgICAgIG1vdmVW
YWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlc3VsdFJlZ3MpOworICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkpOwogICAgICAgICBjaGVja1N0YWNrUG9p
bnRlckFsaWdubWVudCgpOwogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAg
ICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0xNDUzLDggKzE0NzMsOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBFbWl0IHRoZSBKSVQg
b3B0aW1pemF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgeworICAgICAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwog
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1c3RlZElt
bTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAotICAgICAg
ICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291
bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQogfQogCkBAIC0xNTA5LDcgKzE1MzAsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1bWVudEdQUjApOwog
I2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRH
UFIzOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMTUyMiw3ICsxNTQ0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3Ry
YXBzKGNvbnN0IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0
b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
ICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTE1
NjQsMzQgKzE1ODYsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0
cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhw
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHAp
KSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAs
IGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0
YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEp1bXAgbGF6eUp1
bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50
R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdU
MCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7
CiAjZW5kaWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2st
PmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFu
dCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVj
bCwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1f
ZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIy
KTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVu
YykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZt
KCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwog
ICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVy
YXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2MjEsMjMgKzE2
NDUsMjQgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNl
Ci0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0
TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgogCi0g
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4
cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVj
bCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAgICAgT3Bj
b2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
bmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
Mik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsK
ICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5l
cmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTY2NCwy
OSArMTY4OSwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50
IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNT
dGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZt
ZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQUjIpOworICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNldE9mQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0
aFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
c2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5k
ZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2Nh
dGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2l6ZUluZGV4LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQ
cm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwog
I2Vsc2UKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3
QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgp
LCByZWdUMik7CiAgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRh
dGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNzIwLDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
KyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2Rl
IGNhY2hpbmcgd2hlbiB0aGUgdHlwZSBwcm9maWxlciBpcyBlbmFibGVkLgogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBU
eXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9u
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0
VmlydHVhbFJlZ2lzdGVyOwogCkBAIC0xNzc3LDIwICsxODA0LDI0IEBAIHZvaWQgSklUOjplbWl0
X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAg
IT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBp
ZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0
UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhp
cyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJl
ZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFj
a2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50
IHJlZ2lzdGVyLgorICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAgICAg
ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gx
UmVnLCBzY3JhdGNoMlJlZyk7CisgICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChz
aGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdU
MSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVTRShK
U1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91Ymxl
IGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHVz
aW5nIHRoZSBjb250cm9sIGZsb3cgcHJvZmlsZXIuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlQ29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNpY0Js
b2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xv
Y2F0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0
RXhlY3V0ZUNvZGUoKnRoaXMpOwpAQCAtMTg2MCw3ICsxODkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCBy
ZXN1bHRSZWdzKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE5MTcs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1pdExv
YWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2Ny
YXRjaEdQUiwgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJl
Z3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJl
Z3MpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkRG
R0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCkBAIC0yODU1LDcgKzI4NTYsNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBr
ZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2Vs
aW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9p
ZCogcmVzdWx0ID0gbGlua2VkVGFibGUubV9jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7
CiAKQEAgLTI4ODAsNyArMjg4MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAg
ICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCku
bV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQ7CiAgICAgaWYgKGtleS5pc0ludDMyKCkp
CkBAIC0yOTAzLDcgKzI5MDQsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
U3dpdGNoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICB2b2lkKiByZXN1bHQ7Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNv
bnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogCiAgICAgaWYgKGtleS5pc1N0cmluZygp
KSB7CiAgICAgICAgIFN0cmluZ0ltcGwqIHZhbHVlID0gYXNTdHJpbmcoa2V5KS0+dmFsdWUoZ2xv
YmFsT2JqZWN0KS5pbXBsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0OCw3ICszNDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0
ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1Qx
KTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVn
VDUsIHJlZ1Q0KSwgSW52YWxpZEdQUlJlZywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLnN0dWJJ
bmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOTIgKzQ5LDEw
MyBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcHJvcGVydHlHUFIpOwogCi0gICAgaWYgKG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNv
dW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0g
ICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAg
IGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3NlZW5JZGVudGlm
aWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMo
KSkgeworICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7Cisg
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwg
c2NyYXRjaEdQUik7CiAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIp
OworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdl
dEJ5VmFsLCBkc3QsIHNjcmF0Y2hHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKICAgICB9IGVs
c2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwot
ICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJl
Z1QyKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VH
UFIsIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOwogCiAgICAgICAgIEpJVEdl
dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BS
KTsKKworICAgICAgICAvLyBPT1BTLiBTdXBwb3J0IHRoaXMKKyAgICAgICAgLy9pZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgICAgICAvLyAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChn
ZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKICAgICB9Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQg
SklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgaWYgKGhhc0Fu
eVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7CisgICAgaWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRlcikpCisgICAgICAgIHJl
dHVybjsKKworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAotICAg
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0
QnlWYWxJbmRleCsrXTsKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZh
bHNbbV9nZXRCeVZhbEluZGV4KytdOwogCi0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJv
ZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIy
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4
KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0
ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9
PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJv
cGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcx
IGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVu
dEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9w
ZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsx
NjAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNz
KCk7CkBAIC0xNjAsOCArMTcxLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRH
UFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3Nl
cnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMTg3LDM0ICsxOTgsNDAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0K
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAg
ICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpA
QCAtMjIzLDkgKzI0MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRQcml2
YXRlTmFtZU9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0yMzUsMjYgKzI1NCwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIy
OyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yNjQsNyArMjc3LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAw
LDIxICszMTMsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJy
YW5kPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFu
ZCwgYnJhbmRHUFIpOwotCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0
UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1Qy
KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2
YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9H
UFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6U2V0UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJy
YW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1i
YXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVy
cyByZWdpc3RlcnMuCkBAIC0zMjQsMTcgKzM0NCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRf
cHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0
ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogeworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRv
ciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4
KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBicmFuZEdQUik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTM0NCwyNCArMzY5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJp
dmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9
PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0
eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFu
ZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
blNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5k
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMTkgKzM4OSwy
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJy
YW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRl
QnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwg
YnJhbmRHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQ
cml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVC
cmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpD
aGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCkBAIC0zOTQsOSArNDIyLDExIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BS
ID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0MzYsMTggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAg
c3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUo
b3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5j
dGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFy
Z3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJh
bmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NTksNDIg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBy
ZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQ
b2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDIpLCByZWdUMywgcmVnVDQpOwotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9w
ZXJ0eSkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworICAgIC8vIE9PUFM6CisgICAgLy9pZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgIC8vICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQg
PSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3Qg
OiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUo
Ynl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChn
ZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1i
YXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MTAsMTIgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUg
PSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0
cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9
IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTMxLDE2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBm
YXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYg
KGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNl
CisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BS
NCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUx
Miw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAg
IGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUp
OwpAQCAtNTIzLDcgKzU2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUzMywxOCArNTc1
LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdU
MjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9
IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZChCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDQpKTsK
KyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAgfQorCiAKICAgICBq
aXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpAQCAtNTcwLDIwICs2MTgs
MzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVn
LCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2
YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1f
cHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2Vu
KTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2NTMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKLSAgICBQcml2YXRl
RmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgVU5VU0VEX1BB
UkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02MDMsMTMgKzY2MSwxNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5p
c0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6
IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3Qg
cGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIFRydXN0
ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRL
aW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworCisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQp
OworICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0
QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJp
dmF0ZUZpZWxkT3B0aW1pemU7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50c0dQ
UjMsIGFyZ3VtZW50R1BSNCwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02MjIsMTggKzY4NCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKQEAgLTY0MywxNCArNjk5LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAg
ICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4
MCw3ICs3MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBp
bnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCBy
ZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Nl
dHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5
LDcgKzc0Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGlu
dDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJl
Z1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNjk5LDcgKzc1Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5
X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdl
dHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzA5LDcgKzc2OCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAs
IHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03
MTksNyArNzc5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwog
ICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc4OCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAg
ICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNj
cmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6RGVsZXRlQnlJRDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
KyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAg
ICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlm
IGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQg
dGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVy
cy4KQEAgLTc1OSwxNSArODMwLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQo
Y29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
bEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9w
dGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5t
X2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTc4MSwyNCArODU0LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3Qg
SW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
Lm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGlt
aXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQo
cmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQpAQCAtODA4LDcgKzg3Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAg
ICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTg0NSwyMiArOTEzLDMzIEBAIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJv
cGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZh
bFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVu
ZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAg
ICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYg
YSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTYyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZh
bE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50
R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIz
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQgKzk4MCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJn
dW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSks
IGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0g
cmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAt
OTI2LDcgKzEwMDIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVj
dCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERG
Ry9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVj
dHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1
cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIgKzEwMzcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5
X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRC
eUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVz
dWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1
bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBA
IC05ODYsMTQgKzEwNzEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQo
Y29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlH
ZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJ
ZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTAwMywyNiArMTA5MSwyMCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbW92ZShKSVQ6OlRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwg
cHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9w
ZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
ZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTEwMzAsMjIgKzExMTIsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkRGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlJZERpcmVjdDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
CiB9CiAKQEAgLTEwNTQsMTYgKzExNDUsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF9kaXJlY3QoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9w
ZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xMDczLDgzICsxMTY2LDYxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fz
c2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRp
bWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5
SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVn
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
cmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVz
dWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAg
CiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJh
bmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5t
b2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJh
eUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwg
cmVnVDEpOworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9m
ZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1v
ZGUgPSBicmFuY2gzMihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpv
ZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpv
ZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90
QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNz
VHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOwotfQorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHVi
SW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRo
VGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5k
KGdlbik7CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2ICsxMjI5LDE4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAg
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSht
ZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTExNzcsMjYgKzEyNTAsNTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25z
dCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNz
ZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUu
bV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRD
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1Jl
Z2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAg
IEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpH
ZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0
dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhU
aGlzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0K
IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTIwNiw3ICsxMzEwLDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0
MSwxNiArMTM0NSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4Kytd
OwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMp
OworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEyNjAs
MjggKzEzNjcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8g
YXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1Jl
Z2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBh
cmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8
fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90
aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI5MSw3ICsxMzkyLDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTMyOSwyMyArMTQzMCwz
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNv
ZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRj
aCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25l
IHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBs
b2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2Rl
CiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0
aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJl
ZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAg
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHN0dWJJbmZvR1BS
LCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtp
bmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeUlkOwor
ICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2lu
ZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2Rl
KTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogICAg
IAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmll
ciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0NzQsMTggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+
KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4u
c2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1
bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBh
cmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3NiwyNSArMTQ5NSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRC
eUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJn
dW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0
dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlH
UFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlf
aWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xv
d1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2Vu
LnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CkBAIC0xNDA0LDcgKzE1MTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2Jh
bE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAg
IC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2Jh
bE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50
YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQxLDIwICsxNTU0LDMxIEBAIHZvaWQgSklUOjplbWl0
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTg3LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9i
eV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJ
ZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0ODAsMjggKzE2MDcsMjIgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJl
Z2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1l
bnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlz
QVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKICAgICAvLyBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRv
IGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNy
ZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1l
LgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJ
ZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2Fs
bCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5C
eUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRp
b25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxMCwyNSArMTYzMSwz
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
SW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BS
LCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUzNywxNSArMTY2NiwxOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9
IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9m
aWxlLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2Rl
LCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQ
UjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NTYsNTkgKzE2ODgsNzAgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJn
dW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0
dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
c3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29k
ZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQ
Uik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwg
ZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4g
Y3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5h
bWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5C
eVZhbE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92
YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChv
cGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlP
ckJyYW5kLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
SW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRH
UFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSB0eXBlOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6
ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkK
K3ZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVh
bFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBl
KQogewotICAgIEFTU0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5
cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFz
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHByb3BlcnR5KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUs
IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlQnJhbmQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9p
bkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRp
b25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVu
dEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
TmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2
YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMTYxOCwyNyArMTc2MSwyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1
YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVj
bHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlv
bkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVj
bHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6
IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJh
dGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxNzg5LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1By
aXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29k
ZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2Jy
YW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDE5ICsx
ODAzLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93
KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRI
YXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5t
X2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJ
VDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQ
UlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAg
ICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50
KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKwor
ICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNj
cmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25X
YXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWws
IEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1
c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNs
b3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZz
ZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2ODgsNiArMTgyOCw3IEBAIHZvaWQgSklUOjplbWl0
UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3MDEsNyArMTg0Miw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDEpOwogICAgICAgICAgICAgbG9hZDMy
KCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2No
KCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2Nv
cGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBK
U1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9j
ayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3OTQsODcgKzE5MzUsMTA1
IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KIHZvaWQgSklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29s
dmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFk
YXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VS
VChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAg
IEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3Ry
dWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAg
Y29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMs
IHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAg
IC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5n
ZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIp
IAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNl
IHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNl
dEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFP
ZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFU
YWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2
ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAg
ICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAg
ICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAg
ICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICBy
ZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJC
YXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7CiAgICAgICAgIH07Ci0jdW5k
ZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAg
cmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBn
ZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAg
cmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQs
ICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7CisgICAgICAgIH07CisKKyAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0
YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBjb2RlOworICAgICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQor
ICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7Cisg
ICAgICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3Ip
OworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAgICAgfQogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVT
Y29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUp
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJl
c29sdmVTY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2
ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJh
dGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2Vs
aW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFk
YXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0
YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3Bl
R1BSID0gcmVnVDY7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURf
UEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2Vk
Rm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3Mo
KTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAg
YWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAg
ICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykg
eworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKICAg
ICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAg
ICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGds
b2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9i
amVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVj
dEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNo
cG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwg
QWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFs
T2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9u
V2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNo
OChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwg
VHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJl
c29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAg
ICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVn
VDEpOworICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxT
Y29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAg
ICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFi
ZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVz
dDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhs
b29wLCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwg
JmppdCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25l
LmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEyICsyMDQxLDEyIEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAg
ICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFs
T2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNH
bG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEp
KTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBkb1Zh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xv
YmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gp
KSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RF
cXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkds
b2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubW92
ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKQEAgLTE4OTcsMTEgKzIwNTYsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJs
b2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAg
ICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxF
bnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVu
dCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsyMDY4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9k
dWxlVmFyOgpAQCAtMTkxOSw4MyArMjA3OCw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsK
LSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFy
KTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0
Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFk
YXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdUMCk7CiAKLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
ci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOworICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSkgeworICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGpp
dC5qdW1wKCkpOworICAgICAgICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9Owog
Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxW
YXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNl
KEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAK
LSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICByZXQoKTsK
KyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9C
QUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dD
YXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0
b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNs
b3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpU
aHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBK
SVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9T
Q09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRv
cihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRG
b3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07
IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29w
ZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5F
X1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xv
d19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsg
Z2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAv
IEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRk
cmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAtMjA2NSw2ICsyMTg2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTIxNzgsNyArMjMwMCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKQEAgLTIxODYsOSArMjMwOCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb24KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1l
bnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiAjZWxzZSAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKQEAgLTIxOTYsNDEgKzIzMTgsNTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0g
Ynl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRh
Lm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1
dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNT
RVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0g
Y3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAg
ICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVy
biBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2Vs
aW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8g
Y2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7
CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2Nv
cGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVH
ZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9t
X3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAo
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0gICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNs
b3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwot
ICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3Bl
cmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFk
YXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEp
OworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRf
RlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVz
b2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRf
RlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAgIH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVf
R0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQ
Uik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1ty
ZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1Yihj
bG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0
Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAg
ZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2Vu
ZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3Bl
VGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJv
bVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlw
ZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQg
YnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUg
SklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQg
Z2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CkBAIC0yMjM5LDk5ICsyMzcwLDg4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2Vk
Rm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3Mo
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
IAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRh
dGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAg
IGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRh
ZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIp
OwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1
cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0
YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDAp
OwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Cisg
ICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BS
KSB7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0
Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFu
Y2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdU
MSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRW
YXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewor
ICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0
aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4
KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJl
Z1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9G
KEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdh
dGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVk
KSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0g
KGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsK
LSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAo
aW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwot
ICAgIH07Ci0KICAgICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVH
UFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09
IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9w
ZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNl
dE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1t
MzIoMyksIG9wZXJhbmRHUFIpOworICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5k
R1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxF
bnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKICAgICB9OwogCi0gICAg
YXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJl
Y3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0
cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBz
dHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5
LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgor
ICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1
Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3Ry
dWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwg
cmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAog
ICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7CiAgICAgICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBvZmZzZXQgPSByZWdUMTsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aCA9IHJlZ1QyOwogCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9p
ZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVn
VDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1Qz
KTsKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsm
XSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIGJhc2Us
IHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZz
ZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRh
dGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgb2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRf
RU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihH
cmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0
T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAg
ICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwor
ICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAg
c2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJh
c2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNl
dCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2gpOworICAgICAgICAgICAgaml0Lm5lZzMyKG9mZnNldCk7CisgICAgICAgICAgICBqaXQu
c2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWQ2
NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNh
c2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZP
cGVyYW5kKCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDAp
OwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFRE
WiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShy
ZWdUMCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0
eShyZWdUMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoK
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCByZWdUMyk7CisgICAgICAgICAgICBkb1Zh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9m
ZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwogICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIo
c2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFt
aWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQx
LDg2ICsyNDYxLDYzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5m
bykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVt
cCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNl
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xv
YmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
eworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0g
ZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSks
IHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgaml0LmxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCBy
ZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJp
dHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4
aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgp
KTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQu
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5s
aW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7Cisg
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwog
Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Cisg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVl
UHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOwor
ICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zm
c2V0T2ZQcm9maWxlKCkpKTsKIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dl
dF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFt
ZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZl
VHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dl
dF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwK
LSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNv
bHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2
bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVz
b2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBc
Ci0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5F
UkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29w
ZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlz
IGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVj
YXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4
Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNDcxLDg2ICsyNTY4
LDc5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIH0KICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQp
OwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBh
ZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBp
bmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0g
ICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQs
IHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0
cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFy
aWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQotCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRv
U2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dElu
Zm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVy
ZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWlu
dHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFk
YXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5
cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2Rl
QmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9
IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hl
Y2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBm
b3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9z
Y29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAg
IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBj
YWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAg
ICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZv
ciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1Qx
KTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwog
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAg
ICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1w
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRy
KEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVn
VDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAgIG5l
Z1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAg
ICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAg
ICAgICAgICAgIC8vIE9PUFM6IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0
b29rIEdQUlJlZ3MgaW5zdGVhZCBvZiBWUnMKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
c2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAg
ICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAg
ZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAgaWYgKCFpc0lu
aXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAg
ICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKworICAg
ICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKKworICAgICAgICAgICAgaWYgKCFpc0lu
aXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkg
JiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlz
IHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAg
ICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJh
bmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRT
bG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHko
cmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7
CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAg
ICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpT
VmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxl
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1f
d2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2Nv
cGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hw
b2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50
KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAg
ICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9v
ayBhIEdQUlJlZyBmb3IgdmFsdWUuCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVy
YW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7Cisg
ICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdE5vdGlm
eVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDAs
IHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJs
ZXMoKSkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2
ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3Igb3duZXIvdmFsdWUuCiAgICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjU2NCw1OCArMjY1NCw1
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgIH0K
ICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAg
ICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mg
OiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5
bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJl
YWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAgICAgICAgaXNHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDog
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgLy8g
SWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJlVmFyLyBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGlsZSB0aGluZ3MKKyAgICAvLyB0aGF0
IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3ZlIHByb3ZlbiB0aGF0IGlzIHRoZSB0
eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZhciwKKyAgICAvLyBhbGwgQ29kZUJs
b2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgorICAgIC8vIGlmIHRoZSB2YXIgaW5q
ZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0IGlzIGZpcmVkLCB0aGVuIHdlIHRh
a2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAgIC8vIG1hdHRlciB3aGF0IHR5cGUg
d2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1
cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2Zp
bGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShS
ZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0g
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGVtaXRDb2RlKENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbHNlIHsKICAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVn
VDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVy
dHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAorICAgICAgICBKdW1wIG5v
dEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKHRoaXMpOworCisgICAg
ICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
ciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAogICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxp
bmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIH0K
IApAQCAtMjYyNCwxOCArMjcwOCwyMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBl
KCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgIFJlc29sdmVUeXBl
IHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sg
c2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFudGVl
ZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIuCiAgICAgICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhy
b3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBz
bG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3Ry
dWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAg
ICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4
KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fdW5saW5rZWRD
b2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBh
cmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3ICsyNzM5LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVi
cCk7CkBAIC0yNzAxLDcgKzI3ODgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1
bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJl
Z1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdl
T2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDAp
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDAp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyODQ2
LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1
bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkBAIC0yNzY3LDcgKzI4NTMsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCBy
ZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc4OSw3ICsyODc1LDYgQEAgdGVtcGxhdGUg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxPcAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
IAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwpAQCAtMjgwNSw3ICsyODkwLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3
ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBjYXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhl
IExMSW50LgotICAgIGlmIChtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJl
ZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVu
ZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoKH5KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpICYgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwpAQCAtMjg0Nyw3OCArMjkzMiw4NyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1l
cmF0b3JHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1l
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0
b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0g
ICAgYXV0byByZXN1bHRHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQ
UiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51
bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVudW1lcmF0b3JH
ZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdp
c3RlcnM6OnNjcmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9k
ZSwgc2NyYXRjaDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBw
cm9wZXJ0eUdQUik7CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEu
bV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0
YSgpLCBzY3JhdGNoMik7CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIpOworICAgIHN0b3Jl
OFRvTWV0YWRhdGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0
YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KGJhc2VHUFIpKTsKICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVl
LgotICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlz
Tm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzY3JhdGNoMywgVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3Ry
dWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0g
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QzKTsKLSAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IHNjcmF0Y2gxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJy
YW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21w
dXRlIHRoZSBvZmZzZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDMp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJ
ZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3Jh
Z2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3Mg
PSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1Qw
KTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQorICAgIEp1bXAg
b3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVz
cyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0
eU9mZnNldCgpKSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsK
KyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNl
cy5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAg
ICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVz
cyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9m
ZnNldCgpKSwgcmVnVDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0
cihyZWdUMywgcmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gx
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
LCBzY3JhdGNoMik7CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHNjcmF0Y2gyLCBzY3JhdGNoMik7CiAgICAgY29uc3RleHByIGludHB0cl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0
YXRpY19jYXN0PGludHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQo
QmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
KSwgcmVzdWx0R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBU
aW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVD
YXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7
Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1Nl
ZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJh
dG9yTWV0YWRhdGEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRj
aCksIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51
bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhp
cyk7Ci0gICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRy
dXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAg
SnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVw
bGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9w
ZXJ0eUdQUik7CiAKICAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAog
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5
VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTI3LDEwICsz
MDIxLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdl
bmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRv
ckdldEJ5VmFsPigpLCBpdGVyKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUs
IHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRv
cl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFs
Q2FzZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5j
dGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5t
X2VudW1lcmF0b3I7CkBAIC0yOTM5LDcgKzMwMzIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJh
dG9yX2hhc19wcm9wZXJ0eUltCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFk
ZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0
YWRhdGEoKSwgcmVnVDEpOworICAgIG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01l
dGFkYXRhKHJlZ1QxLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1l
cmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1
Y3R1cmVNb2RlKSkpOwogCkBAIC0zMDI4LDYgKzMxMjMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0
ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
ayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQor
eworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0o
KSwgb3duZXIsIHNlbGVjdFNjcmF0Y2hHUFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVy
KTsKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1Miw3ICsxNTUy
LDcgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogCiB2b2lkIHVu
bGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIs
IGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0KCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRl
cigmY2FsbExpbmtJbmZvKSk7CiAgICAgCiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZv
LCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPigpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAj
aW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3Rh
dGUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xv
d1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5k
bGluZ1Njb3BlLmgiCkBAIC0zNzAsNiArMzcxLDE2IEBAIGlubGluZSBib29sIGppdENvbXBpbGVB
bmRTZXRIZXVyaXN0aWNzKFYKICAgICAKICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25zKCk7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gYmFz
ZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNl
bGluZUNvZGU7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5n
KCkgJiYgYmFzZWxpbmVSZWYpIHsKKyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJTaGFyZWQgdmlh
IExMSW50Iik7CisgICAgICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxp
bmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29kZUJs
b2NrLT5qaXROZXh0SW52b2NhdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJl
YWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5
SklUQ29tcGlsZSIsICgidGhyZXNob2xkIG5vdCByZWFjaGVkLCBjb3VudGVyID0gIiwgY29kZUJs
b2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJlIGxpZnRlZC4iKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEs
IE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2Vy
T3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNv
ZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQot
ICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0
eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEs
IHQyKQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRb
Y2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8g
cHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGlu
IHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAg
ICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRh
dGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAgICBk
aXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBs
bGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9m
aWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1l
dGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BO
ZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAg
ICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAg
dXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQz
KQogICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJp
YSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQot
ICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5h
cnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAg
IHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAg
ZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVj
dCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJv
ZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAg
ICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMsIHQy
KQogICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcs
IC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0gICAg
ICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQog
ICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUo
dDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsx
MTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAg
ICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAu
b3AxTm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAg
ICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0
NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFk
eQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0g
ICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVw
ZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51
bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0
MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3Jv
IGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVy
YW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVs
eSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFn
LCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAg
ICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJ
bnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0
MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEsMTMg
QEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSBQQywg
YTEKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBidHB6
IHIwLCAucmVjb3ZlcgotCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisgICAgICAgICAgICAj
IEJhc2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFudCBw
b29sLgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgICAgICAgICBs
b2FkcCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2Rl
QmxvY2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwogICAgICAgICAgICAg
aWYgQVJNNjRFCiAgICAgICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlND
OjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6Omxvb3BPU1JFbnRy
eSkgKiBQdHJTaXplLCBhMgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0RXF1
YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1l
LCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0
eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQK
LQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0s
IHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3MCw3IEBAIG1hY3Jv
IHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJh
dGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3Jl
cSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2Zp
bGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJp
dGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpA
QCAtMTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25l
Z2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0
dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0
eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2Zp
bGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikK
QEAgLTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9w
TmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdp
IHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQ
cm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFBy
b2ZpbGVJbnQsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAg
YnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAw
MDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAg
ICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0
MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE2
MCw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUs
IHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBl
LCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3JocywgdDAp
CiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21T
dG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRl
Z2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmls
ZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBkaXNwYXRj
aCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRh
ZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0
MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVt
YmVyLCB0NSwgdDIpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50
T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVy
SW50LCB0NSwgdDIpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6
CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA0LDkgKzExOTYsOSBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAKICAgICAub3AyTm90SW50OgogICAgICAg
ICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVm
aW5pdGVseSBub3QuCi0gICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51
bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisg
ICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmls
ZUludE51bWJlciwgdDUsIHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBjaTJk
cyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBm
dDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTQxMiw3
ICsxNDEyLDggQEAgZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5jcmVtZW50LCBhY3Rp
b24pCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgYmFkZGlzIGluY3JlbWVudCwg
Q29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50
ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQorICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGlu
dEV4ZWN1dGVDb3VudGVyW3QwXSwgdDAKKyAgICBiYWRkaXMgaW5jcmVtZW50LCBCYXNlbGluZUV4
ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgIGFjdGlvbigpCiAg
ICAgLmNvbnRpbnVlOgogZW5kCkBAIC0xNDk1LDcgKzE0OTYsOCBAQCBtYWNybyBwcm9sb2d1ZShj
b2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgY29kZUJsb2NrR2V0dGVyKHQxKQogICAgIGNv
ZGVCbG9ja1NldHRlcih0MSkKICAgICBpZiBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQotICAg
ICAgICBiYWRkaXMgNSwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MV0sIC5jb250aW51ZQorICAgICAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MV0sIHQxCisgICAgICAgIGJhZGRp
cyA1LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MV0sIC5jb250aW51ZQog
ICAgICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAgICAg
ICAgbW92ZSBQQywgYTEKQEAgLTI1NTYsNiArMjU1OCwxNyBAQCBtYWNybyBub3RTdXBwb3J0ZWQo
KQogICAgIGVuZAogZW5kCiAKKworbWFjcm8gdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6
TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBV
bmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKworbWFjcm8gdXBkYXRlQmluYXJ5
QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9h
ZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRl
bXAKKyAgICBvcmggdHlwZSwgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAor
CiAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRoZSBYODZfNjRfV0lOIGNvbmRpdGlvbiBo
ZXJlLCBzaW5jZSBXRUJBU1NFTUJMWSBzaG91bGQgYWxyZWFkeSBiZSBmYWxzZSBvbiBXaW5kb3dz
CiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNzE2CiBpZiBX
RUJBU1NFTUJMWSBhbmQgbm90IFg4Nl82NF9XSU4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI4MjAx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsMTAgQEAgcHVibGljOgogICAgIENhY2hlYWJs
ZUlkZW50aWZpZXIoKSA9IGRlZmF1bHQ7CiAKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlk
ZW50aWZpZXIgY3JlYXRlRnJvbUNlbGwoSlNDZWxsKiBpZGVudGlmaWVyKTsKLSAgICBzdGF0aWMg
aW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKENvZGVCbG9jayosIGNvbnN0IElkZW50aWZpZXImKTsKLSAgICBzdGF0aWMgaW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KENvZGVCbG9jayosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgY29uc3Qg
SWRlbnRpZmllciYpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAg
IHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAg
c3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgY29uc3RleHByIENhY2hlYWJs
ZUlkZW50aWZpZXIgY3JlYXRlRnJvbVJhd0JpdHModWludHB0cl90IHJhd0JpdHMpIHsgcmV0dXJu
IENhY2hlYWJsZUlkZW50aWZpZXIocmF3Qml0cyk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5l
cy5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUs
MTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhD
b2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaSkKK3RlbXBsYXRlIDx0eXBl
bmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9j
a1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaSkKIHsKICAgICByZXR1cm4gY3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKGNvZGVCbG9jaywgaS5pbXBsKCkpOwog
fQogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4K
K2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGNv
ZGVCbG9jay0+aGFzSWRlbnRpZmllcih1aWQpKTsKICAgICByZXR1cm4gQ2FjaGVhYmxlSWRlbnRp
Zmllcih1aWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlw
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
ZFR5cGVzLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FjaGVkVHlwZXMuaCIKIAorI2luY2x1ZGUg
IkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlQ2FjaGVFcnJvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODAsNyArNDgw
LDcgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90bwogI2lmIEVOQUJM
RShKSVQpCiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3AoT3BO
ZWdhdGU6Ok1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZSByZXN1bHQsIEpTVmFsdWUgb3BlcmFu
ZCkKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQ
cm9maWxlOworICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gKm1ldGFkYXRhLm1fYXJp
dGhQcm9maWxlOwogICAgIHByb2ZpbGUub2JzZXJ2ZUFyZyhvcGVyYW5kKTsKICAgICBBU1NFUlQo
cmVzdWx0LmlzTnVtYmVyKCkgfHwgcmVzdWx0LmlzQmlnSW50KCkpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2
aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25F
eGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsyODksOCBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZlJhcmVEYXRhKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9yYXJlRGF0YSk7IH0KICAgICBz
dGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFzU3RyaW5nSW5SYXJlRGF0YSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihSYXJlRGF0YSwgbV9hc1N0cmluZyk7IH0KKyAgICBzdGF0aWMg
aW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9ja0ZvckNhbGwpOyB9Cisg
ICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3Qo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdCk7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJs
ZUJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAko
cmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NSw2ICszODUsOSBAQCBzdGF0aWMgdm9pZCBvdmVy
cmlkZURlZmF1bHRzKCkKICAgICAgICAgT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVB
ZnRlcldhcm1VcCgpID0gMTUwMDsKICAgICAgICAgT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0
aW1pemVTb29uKCkgPSAxMDA7CiAgICAgfQorCisgICAgLy8gT09QUworICAgIC8vT3B0aW9uczo6
bWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvckJhc2VsaW5lKCkgPSA0
NTA7CiB9CiAKIHN0YXRpYyB2b2lkIGNvcnJlY3RPcHRpb25zKCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjgyMDE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzA5LDcgKzMwOSw2IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7
CiAgICAgdihJbnQzMiwgZXZhbFRocmVzaG9sZE11bHRpcGxpZXIsIDEwLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KFVuc2lnbmVkLCBtYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0aCwg
MjU2LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCi0gICAgdihCb29sLCByYW5kb21pemVFeGVj
dXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9y
QmFzZWxpbmUsIDEwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1F
eGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JVcHBlclRpZXJzLCA1MDAwMCwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgXApAQCAtNTMyLDYgKzUzMSw3IEBAIGJvb2wgY2FuVXNlV2Vi
QXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihCb29sLCB1c2VEYXRhSUMsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCwgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDU2hhcmluZywgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgdXNlQmFzZWxpbmVKSVRDb2RlU2hh
cmluZywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIC8qIEZlYXR1cmUgRmxh
Z3MgKi9cCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0
RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTYsNyArMzk2LDE0IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1
dGkKICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVCeXRlY29kZSgpKQogICAgICAgICBjb2RlQmxv
Y2stPnZhbGlkYXRlKCk7CiAKLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKKyAgICBSZWZQ
dHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2Rl
QmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKKyAgICBpZiAoT3B0aW9uczo6dXNlQmFz
ZWxpbmVKSVRDb2RlU2hhcmluZygpICYmIGJhc2VsaW5lUmVmKSB7CisgICAgICAgIGNvZGVCbG9j
ay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5vbk51
bGwoKSk7CisKKyAgICAgICAgLy9kYXRhTG9nTG4oY29kZUJsb2NrLT5qaXRFeGVjdXRlQ291bnRl
cigpKTsKKyAgICAgICAgLy9pZiAoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5pc0J1
aWx0aW5GdW5jdGlvbigpKQorICAgICAgICAvLyAgICBkYXRhTG9nTG4oIlNoYXJlZCBidWlsdGlu
ISIpOworICAgIH0gZWxzZSBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKICAgICAgICAgc2V0dXBM
TEludChjb2RlQmxvY2spOwogICAgIGVsc2UKICAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9j
ayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3Vu
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50
VGllclVwQ291bnRlci5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkg
KzUyLDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCgpCiAgICAgewog
ICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAgICAgICAg
ICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldh
cm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0
aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVB
ZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRp
b25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0KIAogICAg
IGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtNjUsOSArNjUs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQogICAgIHsKICAgICAgICAgaWYg
KE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3VGhy
ZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRp
bWl6ZVNvb24oKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChP
cHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAg
ICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29u
KCkpOwogICAgIH0KIAogICAgIHN0cnVjdCBPU1JFbnRyeURhdGEgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCShyZXZpc2lvbiAyODIw
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CiAKIFRpZXJVcENvdW50OjpUaWVyVXBDb3VudCgpCiB7Ci0gICAgc2V0TmV3VGhyZXNo
b2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0
cik7CisgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXpl
QWZ0ZXJXYXJtVXAoKSk7CiB9CiAKIFRpZXJVcENvdW50Ojp+VGllclVwQ291bnQoKSA9IGRlZmF1
bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQu
aAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRp
ZXJVcENvdW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAg
IHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCh1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsK
ICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4
LCAiOiBPTUctb3B0aW1pemluZyBhZnRlciB3YXJtLXVwLiIpOwotICAgICAgICBzZXROZXdUaHJl
c2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxs
cHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09w
dGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0
aW9uVGhyZXNob2xkUmVhY2hlZCgpCkBAIC05MCwxNCArOTAsMTQgQEAgcHVibGljOgogICAgIHZv
aWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsK
ICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4
LCAiOiBPTUctb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uIik7Ci0gICAgICAgIHNldE5ld1Ro
cmVzaG9sZCgwLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKDApOwogICAgIH0K
IAogICAgIHZvaWQgb3B0aW1pemVTb29uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewog
ICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgs
ICI6IE9NRy1vcHRpbWl6aW5nIHNvb24uIik7CiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIGFkanVz
dG1lbnQgb25jZSB3ZSBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3YXNtIGZ1bmN0aW9ucy4K
LSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXpl
U29vbigpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICB2b2lkIHNldE9wdGltaXph
dGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCh1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMjgyMDE2KQor
KysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDIwIEBA
IHB1YmxpYzoKICAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEJhZyYgb3BlcmF0b3I9KEJhZzxULCBVPiYmIG90aGVy
KQorICAgIHsKKyAgICAgICAgaWYgKHVud3JhcHBlZEhlYWQoKSA9PSBvdGhlci51bndyYXBwZWRI
ZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAgQmFnIGRlc3Ryb3k7
CisgICAgICAgIGRlc3Ryb3kubV9oZWFkID0gdW53cmFwcGVkSGVhZCgpOworICAgICAgICBtX2hl
YWQgPSBvdGhlci51bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxw
dHI7CisKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIH5CYWcoKQogICAgIHsK
ICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVz
dHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkocmV2
aXNpb24gMjgyMDE2KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkod29y
a2luZyBjb3B5KQpAQCAtNzcwLDE3ICs3NzAsMTggQEAgZW5kCiAKICMgRklYTUU6IG5lZWQgdG8g
Zml4IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg3MDMgdG8gZW5h
YmxlIHRoaXMgb24gTGludXgvTUlQUy4KIGRlZiBydW5CeXRlY29kZUNhY2hlSW1wbChvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMsICphZGRpdGlvbmFsRW52KQotICAgIGlmICgkaG9zdE9TID09
ICJkYXJ3aW4iKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGUiCi0gICAg
ZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAkYXJjaGl0ZWN0dXJlICE9ICJtaXBzIikKLSAg
ICAgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlWFhYWFhYIgotICAgIGVsc2UKLSAg
ICAgICAgc2tpcAotICAgICAgICByZXR1cm4KLSAgICBlbmQKKyAgICAjIE9PUFMKKyAgICAjaWYg
KCRob3N0T1MgPT0gImRhcndpbiIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUt
Y2FjaGUiCisgICAgI2Vsc2lmICgkaG9zdE9TID09ICJsaW51eCIgJiYgJGFyY2hpdGVjdHVyZSAh
PSAibWlwcyIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhYWFgi
CisgICAgI2Vsc2UKKyAgICAjICAgIHNraXAKKyAgICAjICAgIHJldHVybgorICAgICNlbmQKIAot
ICAgIG9wdGlvbnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMKLSAgICBhZGRSdW5D
b21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29k
ZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21t
YW5kLCAkYmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2lt
cGxlRXJyb3JIYW5kbGVyLCAqYWRkaXRpb25hbEVudikKKyAgICAjb3B0aW9ucyA9IEJBU0VfT1BU
SU9OUyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RT
cGVjaWZpY1JlcXVpcmVkT3B0aW9ucworICAgICNhZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNo
ZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5z
aCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5kLCAkYmVuY2htYXJrLnRvX3Nd
ICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyLCAqYWRk
aXRpb25hbEVudikKIGVuZAogCiBkZWYgcnVuQnl0ZWNvZGVDYWNoZSgqb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437583</attachid>
            <date>2021-09-07 20:00:18 -0700</date>
            <delta_ts>2021-09-07 20:25:02 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>462643</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODMyLDYgKzgzMiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjY4LDYgKzM2NjksOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjU4LDYgKzYyNjEsOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05Njk5LDYgKzk3MDQsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNjEz
MjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAgb3AgOmdldF9hcmd1
bWVudCwKICAgICAgICAgaW5kZXg6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAg
ICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxl
LiosCiAgICAgfQogCiBvcCA6YXJndW1lbnRfY291bnQsCkBAIC0xODMsNyArMTgzLDcgQEAgb3Ag
OnRvX3RoaXMsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgY2FjaGVkU3RydWN0dXJlSUQ6IFN0
cnVjdHVyZUlELAogICAgICAgICB0b1RoaXNTdGF0dXM6IFRvVGhpc1N0YXR1cywKLSAgICAgICAg
cHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwK
ICAgICB9CiAKIG9wIDpjaGVja190ZHosCkBAIC0yOTAsOSArMjkwLDEwIEBAIG9wX2dyb3VwIDpQ
cm9maWxlZEJpbmFyeU9wLAogICAgICAgICBsaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAg
cmhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVz
LAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkCiAgICAgfSwKICAgICBtZXRhZGF0YTog
ewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0
aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9ncm91cCA6VmFsdWVQ
cm9maWxlZEJpbmFyeU9wLApAQCAtMzA5LDcgKzMxMCw3IEBAIG9wX2dyb3VwIDpWYWx1ZVByb2Zp
bGVkQmluYXJ5T3AsCiAgICAgICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAg
bWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlCisgICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6Yml0bm90LApAQCAtMzE4LDcgKzMxOSw3
IEBAIG9wIDpiaXRub3QsCiAgICAgICAgIG9wZXJhbmQ6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9
LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZQorICAgICAg
ICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlVuYXJ5T3AsCkBA
IC0zNTEsOSArMzUyLDEwIEBAIG9wX2dyb3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAg
IF0sCiAgICAgYXJnczogewogICAgICAgICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAg
ICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAg
ICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxl
OiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzYzLDcg
KzM2NSw3IEBAIG9wIDp0b19vYmplY3QsCiAgICAgICAgIG1lc3NhZ2U6IHVuc2lnbmVkLAogICAg
IH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVBy
b2ZpbGVkVW5hcnlPcCwKQEAgLTM3Niw3ICszNzgsNyBAQCBvcF9ncm91cCA6VmFsdWVQcm9maWxl
ZFVuYXJ5T3AsCiAgICAgICAgIG9wZXJhbmQ6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAg
IG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJv
ZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAgfQogCiBvcCA6bmVnYXRlLApAQCAtMzg0LDkgKzM4
NiwxMCBAQCBvcCA6bmVnYXRlLAogICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAg
ICAgb3BlcmFuZDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRU
eXBlLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApAQCAt
NDc3LDcgKzQ4MCw3IEBAIG9wIDpnZXRfYnlfaWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewog
ICAgICAgICBtb2RlTWV0YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCi0gICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAg
fQogCiBvcCA6Z2V0X2J5X2lkX3dpdGhfdGhpcywKQEAgLTQ4OCw3ICs0OTEsNyBAQCBvcCA6Z2V0
X2J5X2lkX3dpdGhfdGhpcywKICAgICAgICAgcHJvcGVydHk6IHVuc2lnbmVkLAogICAgIH0sCiAg
ICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBw
cm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAKIG9wIDpnZXRfYnlfdmFsX3dpdGhfdGhp
cywKQEAgLTQ5OSw3ICs1MDIsNyBAQCBvcCA6Z2V0X2J5X3ZhbF93aXRoX3RoaXMsCiAgICAgICAg
IHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmls
ZS4qLAogICAgIH0KIAogb3AgOmdldF9ieV9pZF9kaXJlY3QsCkBAIC01MDksNyArNTEyLDcgQEAg
b3AgOmdldF9ieV9pZF9kaXJlY3QsCiAgICAgICAgIHByb3BlcnR5OiB1bnNpZ25lZCwKICAgICB9
LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwgIyBub3Qg
dXNlZCBpbiBsbGludAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwgIyBub3QgdXNl
ZCBpbiBsbGludAogICAgICAgICBzdHJ1Y3R1cmVJRDogU3RydWN0dXJlSUQsCiAgICAgICAgIG9m
ZnNldDogdW5zaWduZWQsCiAgICAgfQpAQCAtNTIwLDcgKzUyMyw3IEBAIG9wIDpnZXRfcHJvdG90
eXBlX29mLAogICAgICAgICB2YWx1ZTogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0
YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxl
OiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAKIG9wIDp0cnlfZ2V0X2J5X2lkLApAQCAtNTMwLDcg
KzUzMyw3IEBAIG9wIDp0cnlfZ2V0X2J5X2lkLAogICAgICAgICBwcm9wZXJ0eTogdW5zaWduZWQs
CiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOnB1dF9ieV9p
ZCwKQEAgLTU3MSw3ICs1NzQsNyBAQCBvcCA6Z2V0X2J5X3ZhbCwKICAgICAgICAgcHJvcGVydHk6
IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAg
ICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBzZWVuSWRlbnRpZmllcnM6
IEdldEJ5VmFsSGlzdG9yeSwKICAgICB9CkBAIC01ODMsNyArNTg2LDcgQEAgb3AgOmdldF9wcml2
YXRlX25hbWUsCiAgICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHBy
b2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgICAgICBzdHJ1Y3R1cmVJRDogU3RydWN0dXJlSUQs
CiAgICAgICAgIG9mZnNldDogdW5zaWduZWQsCiAgICAgICAgIHByb3BlcnR5OiBXcml0ZUJhcnJp
ZXJbSlNDZWxsXSwKQEAgLTg0Miw3ICs4NDUsNyBAQCBvcCA6Y2FsbCwKICAgICB9LAogICAgIG1l
dGFkYXRhOiB7CiAgICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCi0gICAg
ICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxl
LiosCiAgICAgfQogCiBvcCA6dGFpbF9jYWxsLApAQCAtODU0LDcgKzg1Nyw3IEBAIG9wIDp0YWls
X2NhbGwsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewogICAgICAgICBjYWxsTGlua0luZm86IExM
SW50Q2FsbExpbmtJbmZvLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAg
IHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOmNhbGxfZXZhbCwKQEAgLTg2
Nyw3ICs4NzAsNyBAQCBvcCA6Y2FsbF9ldmFsLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKICAg
ICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKLSAgICAgICAgcHJvZmlsZTog
VmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAK
IG9wIDpjYWxsX3ZhcmFyZ3MsCkBAIC04ODEsNyArODg0LDcgQEAgb3AgOmNhbGxfdmFyYXJncywK
ICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9m
aWxlLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHByb2ZpbGU6IFZh
bHVlUHJvZmlsZS4qLAogICAgIH0sCiAgICAgdG1wczogewogICAgICAgICBhcmdDb3VudEluY2x1
ZGluZ1RoaXM6IHVuc2lnbmVkLApAQCAtOTAyLDcgKzkwNSw3IEBAIG9wIDp0YWlsX2NhbGxfdmFy
YXJncywKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJy
YXlQcm9maWxlLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0sCiAgICAgdG1wczogewogICAgICAgICBhcmdDb3Vu
dEluY2x1ZGluZ1RoaXM6IHVuc2lnbmVkCkBAIC05MjMsNyArOTI2LDcgQEAgb3AgOnRhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cywKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOmNvbnN0cnVj
dCwKQEAgLTkzNSw3ICs5MzgsNyBAQCBvcCA6Y29uc3RydWN0LAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKICAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKLSAgICAgICAg
cHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwK
ICAgICB9CiAKIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKQEAgLTk0OSw3ICs5NTIsNyBAQCBvcCA6
Y29uc3RydWN0X3ZhcmFyZ3MsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJh
eVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAor
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9LAogICAgIHRtcHM6IHsKICAg
ICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzOiB1bnNpZ25lZApAQCAtMTAyOCw3ICsxMDMxLDcg
QEAgb3AgOmdldF9mcm9tX3Njb3BlLAogICAgICAgICAgICAgc3RydWN0dXJlOiBXcml0ZUJhcnJp
ZXJCYXNlW1N0cnVjdHVyZV0sCiAgICAgICAgIH0sCiAgICAgICAgIG9wZXJhbmQ6IHVpbnRwdHJf
dCwgI29mZnNldCA2Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwgIyBvZmZzZXQgNwor
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwgIyBvZmZzZXQgNwogICAgIH0sCiAgICAg
bWV0YWRhdGFfaW5pdGlhbGl6ZXJzOiB7CiAgICAgICAgIGdldFB1dEluZm86IDpnZXRQdXRJbmZv
LApAQCAtMTA2NSw3ICsxMDY4LDcgQEAgb3AgOmdldF9mcm9tX2FyZ3VtZW50cywKICAgICAgICAg
aW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmls
ZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9
CiAKIG9wIDpwdXRfdG9fYXJndW1lbnRzLApAQCAtMTE4Nyw3ICsxMTkwLDcgQEAgb3AgOmVudW1l
cmF0b3JfZ2V0X2J5X3ZhbCwKICAgICAgICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lzdGVyLAog
ICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAor
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCiAgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFk
YXRhLAogICAgIH0KQEAgLTEyNDksMTEgKzEyNTIsMTEgQEAgb3AgOml0ZXJhdG9yX29wZW4sCiAg
ICAgfSwKICAgICBtZXRhZGF0YTogewogICAgICAgICBpdGVyYXRpb25NZXRhZGF0YTogSXRlcmF0
aW9uTW9kZU1ldGFkYXRhLAotICAgICAgICBpdGVyYWJsZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
KyAgICAgICAgaXRlcmFibGVQcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICAgICAgY2FsbExp
bmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKLSAgICAgICAgaXRlcmF0b3JQcm9maWxlOiBWYWx1
ZVByb2ZpbGUsCisgICAgICAgIGl0ZXJhdG9yUHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAg
ICAgIG1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwKLSAgICAgICAgbmV4dFByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgbmV4dFByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAog
ICAgIH0sCiAgICAgY2hlY2twb2ludHM6IHsKICAgICAgICAgc3ltYm9sQ2FsbDogbmlsLApAQCAt
MTI3NCwxMSArMTI3NywxMSBAQCBvcCA6aXRlcmF0b3JfbmV4dCwKICAgICAgICAgaXRlcmF0aW9u
TWV0YWRhdGE6IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwKICAgICAgICAgaXRlcmFibGVQcm9maWxl
OiBBcnJheVByb2ZpbGUsCiAgICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8s
Ci0gICAgICAgIG5leHRSZXN1bHRQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIG5leHRS
ZXN1bHRQcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICAgICAgZG9uZU1vZGVNZXRhZGF0YTog
R2V0QnlJZE1vZGVNZXRhZGF0YSwKLSAgICAgICAgZG9uZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
KyAgICAgICAgZG9uZVByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgICAgICB2YWx1ZU1vZGVN
ZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwKLSAgICAgICAgdmFsdWVQcm9maWxlOiBWYWx1
ZVByb2ZpbGUsCisgICAgICAgIHZhbHVlUHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAgfSwK
ICAgICB0bXBzOiB7CiAgICAgICAgIG5leHRSZXN1bHQ6IEpTVmFsdWUsCkBAIC0xMzIyLDcgKzEz
MjUsNyBAQCBvcCA6Z2V0X2ludGVybmFsX2ZpZWxkLAogICAgICAgICBpbmRleDogdW5zaWduZWQs
CiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOnB1dF9pbnRl
cm5hbF9maWVsZCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAy
ODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMjIgKzU3LDQ0IEBAIFZhbHVl
UHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICBVTlVTRURfUEFSQU0oY2hl
Y2twb2ludEluZGV4KTsKICAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlTWV0YWRhdGE6Om9wY29k
ZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKICAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5k
ZXgpIHsKLSAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJuICZt
ZXRhZGF0YS5tX2l0ZXJhdG9yUHJvZmlsZTsKLSAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
Z2V0TmV4dDogcmV0dXJuICZtZXRhZGF0YS5tX25leHRQcm9maWxlOworICAgICAgICBjYXNlIE9w
SXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1cm4gbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGU7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OmdldE5leHQ6IHJldHVybiBtZXRhZGF0
YS5tX25leHRQcm9maWxlOwogICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAKICAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRlY29kZU1l
dGFkYXRhOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CiAgICAgICAgIHN3aXRjaCAo
Y2hlY2twb2ludEluZGV4KSB7Ci0gICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVO
ZXh0OiByZXR1cm4gJm1ldGFkYXRhLm1fbmV4dFJlc3VsdFByb2ZpbGU7Ci0gICAgICAgIGNhc2Ug
T3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJldHVybiAmbWV0YWRhdGEubV9kb25lUHJvZmlsZTsK
LSAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiAmbWV0YWRhdGEu
bV92YWx1ZVByb2ZpbGU7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0
OiByZXR1cm4gbWV0YWRhdGEubV9uZXh0UmVzdWx0UHJvZmlsZTsKKyAgICAgICAgY2FzZSBPcEl0
ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIG1ldGFkYXRhLm1fZG9uZVByb2ZpbGU7CisgICAg
ICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1cm4gbWV0YWRhdGEubV92YWx1
ZVByb2ZpbGU7CiAgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgCiAgICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9m
aWxlOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQ
cm9maWxlT2Zmc2V0Rm9yKHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURf
UEFSQU0oY2hlY2twb2ludEluZGV4KTsKKyAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNv
ZGVJRCA9PSBvcF9pdGVyYXRvcl9vcGVuKSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludElu
ZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBC
eXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNh
c2UgT3BJdGVyYXRvck9wZW46OmdldE5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9m
ZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNv
ZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVj
a3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6
IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsK
KyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZEb25lUHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JO
ZXh0OjpnZXRWYWx1ZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVBy
b2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSAKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0
YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0
YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0m
IHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsKIH0KIAotQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKLXsK
LSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KG1f
ZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlz
RGF0YUlDKCkpOwpAQCAtMjI1LDYgKzIyMCwxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0TWF4
QXJndW1lbnRDb3VudEluCiAgICAgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZh
bHVlOwogfQogCitDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0lu
Zm86OmZhc3RQYXRoU3RhcnQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkgJiYg
aXNUYWlsQ2FsbCgpKTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50
ZXJuYWxQdHJUYWc+KHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCk7Cit9CisKIHZvaWQgQ2FsbExp
bmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogewogICAgIGF1dG8gaGFuZGxlU3BlY2lmaWNDYWxs
ZWUgPSBbJl0gKEpTRnVuY3Rpb24qIGNhbGxlZSkgewpAQCAtMjk4LDIzICsyOTksMTEgQEAgdm9p
ZCBDYWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxl
RGF0YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxM
aW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxl
ZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3Mo
dXNlRGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VS
VChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIp
OwotICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsK
LSAgICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQu
YWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFz
dFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0
UGF0aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1Bh
dGg7CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0
YUlDOjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lz
dGVyKCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlu
a0luZm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMxMiw3IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBo
aWMgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIs
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlz
VGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJl
cGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7
IC8vIFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAg
ICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIs
IG9mZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpA
QCAtMzM2LDE0ICszMjUsMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5m
bzo6ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
Y2FsbDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2Fs
bCkgewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxs
ID0gaml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwg
PSBqaXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8p
OwogICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2Rl
SUMubV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1f
Y2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0
clRhZz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVl
TG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVl
Q2hlY2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzQ0LDM0IEBAIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExp
c3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0
UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxs
cHRyKTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlD
KCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6
SW52YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlu
a0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0
UGF0aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlD
LCBpc1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJ
QywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVs
cGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFy
ZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAg
cmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwg
dXNlRGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRh
SUNzKFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGpp
dCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCks
IFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwg
R1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVt
aXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwg
VXNlRGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6
RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFz
dFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURh
dGFJQzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lk
IENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBA
IC0zNjksMTcgKzM4MSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2
bSwgCiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBv
ZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAor
dm9pZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5m
b0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZN
JiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcg
Y2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9
IENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgc2V0
VXBDYWxsKHVubGlua2VkQ2FsbExpbmtJbmZvLmNhbGxUeXBlLCBjYWxsZWVHUFIpOworICAgIG1f
ZG9uZUxvY2F0aW9uID0gdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uOworICAgIGlm
ICh1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKQorICAgICAgICBtX2ZyYW1l
U2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigqdW5saW5rZWRD
YWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSk7IC8vIE9PUFM6IHRpbWUgZm9yIHJlZiBjb3Vu
dGluZz8KKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgdS5kYXRhSUMu
bV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgc2V0U2xvd1BhdGhDYWxs
RGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0
ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZv
OjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoIWlzVGFpbENhbGwoKSk7CiAKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5v
KTsKIAotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0
aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRo
U3RhcnQpOwotICAgIH0pOwotCiAgICAgYXV0byBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAg
aml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICB1
LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpT
SW50ZXJuYWxQdHJUYWc+KGNhbGwpOwpAQCAtMzk3LDcgKzQyMiw3IEBAIHZvaWQgQ2FsbExpbmtJ
bmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGpp
dC5sYWJlbCgpOwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOworICAgICAgICB1LmNvZGVJQy5tX2Zhc3RQ
YXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBh
dGhTdGFydCk7CiAgICAgfSk7CiAKICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0
aGlzIGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw5ICs0MywxMSBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogZW51bSBPcGNvZGVJRCA6IHVu
c2lnbmVkOwogc3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogCitzdHJ1Y3QgVW5saW5rZWRD
YWxsTGlua0luZm87CisKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50
aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiBwdWJsaWM6Ci0gICAgZW51bSBDYWxsVHlwZSB7Cisg
ICAgZW51bSBDYWxsVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25lLAogICAgICAgICBDYWxs
LAogICAgICAgICBDYWxsVmFyYXJncywKQEAgLTE2NSw2ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6
ZURhdGFJQyhWTSYsIFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUik7CisKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWxsZWVHUFI7IH0KICAgICAKICAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVp
bnQ4X3QgewpAQCAtMTczLDEzICsxNzcsMTYgQEAgcHVibGljOgogICAgIH07CiAKIHByaXZhdGU6
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlD
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9S
RVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJ
bXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiBwdWJs
aWM6CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RGF0YUlDRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQ
UikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxl
ZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBh
cmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBlbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVU
VVJOOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChD
Q2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJl
cGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7CiAgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0
UGF0aChDQ2FsbEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxD
YWxsKTsKICAgICB2b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOworICAgIHN0
YXRpYyB2b2lkIGVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBj
YWxsTGlua0luZm9HUFIpOwogICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwogCiAgICAgYm9v
bCBpc0RhdGFJQygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VE
YXRhSUMpID09IFVzZURhdGFJQzo6WWVzOyB9CkBAIC0yMDMsNyArMjEwLDYgQEAgcHVibGljOgog
ICAgICAgICBtX2FsbG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwogCkBAIC0yNDMsMTEgKzI0
OSw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9zbG93U3R1YiA9IG51bGxwdHI7CiAgICAgfQogCi0g
ICAgSklUU3R1YlJvdXRpbmUqIHNsb3dTdHViKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Ns
b3dTdHViLmdldCgpOwotICAgIH0KLQogICAgIGJvb2wgc2Vlbk9uY2UoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1faGFzU2VlblNob3VsZFJlcGF0Y2g7CkBAIC0zMDgsOSArMzA5LDkgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUpOwog
ICAgIH0KIAotICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpczsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8s
IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIH0KIAogICAgIHVpbnQzMl90
IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTM4MSw3ICszODIsOSBAQCBwdWJs
aWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJu
YWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKKwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVuaW9uIFVuaW9u
VHlwZSB7CkBAIC0zOTcsNiArNDAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIENvZGVMb2Nh
dGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0aW9uOwogICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9j
YXRpb247CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBt
X3Nsb3dQYXRoU3RhcnQ7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CiAgICAgICAgIH0gY29kZUlDOwogICAgIH0gdTsKIApA
QCAtNDI0LDYgKzQyOCwxMyBAQCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2Rl
T3JpCiAgICAgcmV0dXJuIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCk7CiB9CiAKK3N0cnVjdCBV
bmxpbmtlZENhbGxMaW5rSW5mbyB7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OyAv
LyBDdXJyZW50bHksIG9ubHkgdXNlZCBieSBiYXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5
IHByb2R1Y2UgYSBDb2RlT3JpZ2luLgorICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5
cGU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9u
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxl
RGF0YTsKK307CisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw4IEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRl
cigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7CisKKyAg
ICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNv
dW50ZXIoKTsKICAgICAKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0K
QEAgLTMxOCw3ICszMjAsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBDCiAgICAgZmluaXNoQ3JlYXRpb25Db21tb24odm0pOwogCiAgICAgb3B0aW1pemVBZnRlcldh
cm1VcCgpOwotICAgIGppdEFmdGVyV2FybVVwKCk7CisgICAgLy9qaXRBZnRlcldhcm1VcCgpOwog
CiAgICAgaWYgKG90aGVyLm1fcmFyZURhdGEpIHsKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5l
Y2Vzc2FyeSgpOwpAQCAtMzU5LDcgKzM2MSw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2
bSwgU3RydWN0dXJlKiAKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBz
ZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAg
IAorCisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4
ZWN1dGVDb3VudGVyKCk7CisKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsK
IH0KIApAQCAtMzcwLDcgKzM3NCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3Ry
dWN0dXJlKiAKIC8vIHdlIGNhbid0IGdlbmVyYXRlIGR1cmluZyB1bmxpbmtlZCBieXRlY29kZSBn
ZW5lcmF0aW9uLiBUaGlzIHByb2Nlc3MgaXMgbm90IGFsbG93ZWQgdG8gZ2VuZXJhdGUgY29udHJv
bAogLy8gZmxvdyBvciBpbnRyb2R1Y2UgbmV3IGxvY2Fscy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBp
cyB3ZSByZWx5IG9uIGxpdmVuZXNzIGFuYWx5c2lzIHRvIGJlIHRoZSBzYW1lIGZvcgogLy8gYWxs
IHRoZSBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLiBXZSByZWx5IG9uIHRoaXMg
ZmFjdCBieSBjYWNoaW5nIHRoZSBsaXZlbmVzcyBhbmFseXNpcwotLy8gaW5zaWRlIFVubGlua2Vk
Q29kZUJsb2NrLgorLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLiBBbHNvLCBCYXNlbGluZSBK
SVQgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENv
ZGVCbG9jaywKKy8vIHNvIHRoZSBieXRlY29kZSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBiZXR3ZWVu
IENvZGVCbG9ja3Mgc2hhcmluZyBhbiBVbmxpbmtlZENvZGVCbG9jay4KIGJvb2wgQ29kZUJsb2Nr
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAogICAgIEpTU2NvcGUqIHNj
b3BlKQogewpAQCAtNDY2LDYgKzQ3MSwyMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCisjZGVmaW5lIExJTktfV0lU
SF9CSU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAg
ICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRo
UHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1f
cHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19X
SVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAg
ICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0
aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1f
cHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPT0gMCk7CisKICAgICBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25TdHJlYW0gPSBpbnN0cnVjdGlvbnMo
KTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uIDogaW5zdHJ1Y3Rpb25TdHJlYW0p
IHsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsK
QEAgLTUyOCwxNCArNTQ4LDE0IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFMKICAgICAgICAgTElOSyhPcENyZWF0ZVByb21pc2UpCiAgICAgICAgIExJTksoT3BDcmVh
dGVHZW5lcmF0b3IpCiAKLSAgICAgICAgTElOSyhPcEFkZCkKLSAgICAgICAgTElOSyhPcE11bCkK
LSAgICAgICAgTElOSyhPcERpdikKLSAgICAgICAgTElOSyhPcFN1YikKLQotICAgICAgICBMSU5L
KE9wTmVnYXRlKQotICAgICAgICBMSU5LKE9wSW5jKQotICAgICAgICBMSU5LKE9wRGVjKQorICAg
ICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BBZGQpCisgICAgICAgIExJTktf
V0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcE11bCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFS
WV9BUklUSF9QUk9GSUxFKE9wRGl2KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BS
T0ZJTEUoT3BTdWIpCisKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BO
ZWdhdGUpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wSW5jKQorICAg
ICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcERlYykKIAogICAgICAgICBMSU5L
KE9wSm5lcVB0cikKIApAQCAtNzYxLDYgKzc4MSwzNSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBTCiAjdW5kZWYgTElOS19GSUVMRAogI3VuZGVmIExJTksKIAorICAg
IGlmICghdW5saW5rZWRDb2RlQmxvY2soKS0+bV92YWx1ZVByb2ZpbGVzLnNpemUoKSAmJiBtX251
bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKQorICAgICAgICB1bmxpbmtlZENvZGVCbG9j
aygpLT5tX3ZhbHVlUHJvZmlsZXMgPSBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+KG1fbnVtYmVy
T2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMpOworCisgICAgaWYgKG1fbWV0YWRhdGEpIHsKKyAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgICAgICBhdXRvIGFzc2lnbiA9IFsmXSAoVmFs
dWVQcm9maWxlKiYgcHRyKSB7CisgICAgICAgICAgICBwdHIgPSAmdW5saW5rZWRDb2RlQmxvY2so
KS0+bV92YWx1ZVByb2ZpbGVzW2luZGV4KytdOworICAgICAgICB9OworCisjZGVmaW5lIFZJU0lU
KF9fb3ApIFwKKyAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1l
dGFkYXRhKSB7IGFzc2lnbihtZXRhZGF0YS5tX3Byb2ZpbGUpOyB9KTsKKyAgICAgICAgRk9SX0VB
Q0hfT1BDT0RFX1dJVEhfVkFMVUVfUFJPRklMRShWSVNJVCkKKyN1bmRlZiBWSVNJVAorCisgICAg
ICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRh
dGEpIHsgCisgICAgICAgICAgICBhc3NpZ24obWV0YWRhdGEubV9pdGVyYWJsZVByb2ZpbGUpOwor
ICAgICAgICAgICAgYXNzaWduKG1ldGFkYXRhLm1faXRlcmF0b3JQcm9maWxlKTsKKyAgICAgICAg
ICAgIGFzc2lnbihtZXRhZGF0YS5tX25leHRQcm9maWxlKTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEl0ZXJhdG9yTmV4dD4oWyZdIChhdXRvJiBtZXRhZGF0
YSkgeworICAgICAgICAgICAgYXNzaWduKG1ldGFkYXRhLm1fbmV4dFJlc3VsdFByb2ZpbGUpOwor
ICAgICAgICAgICAgYXNzaWduKG1ldGFkYXRhLm1fZG9uZVByb2ZpbGUpOworICAgICAgICAgICAg
YXNzaWduKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaW5kZXggPT0gbV9udW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxl
cyk7CisgICAgfQorCiAgICAgaWYgKG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhDb250
cm9sRmxvd1Byb2ZpbGVyT3Bjb2RlcygpKQogICAgICAgICBpbnNlcnRCYXNpY0Jsb2NrQm91bmRh
cmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIoKTsKIApAQCAtNzY4LDcgKzgxNyw3IEBAIGJvb2wg
Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAvLyByZWx5IG9uIHRoZSBp
bnN0cnVjdGlvbiBjb3VudCAoYW5kIGFyZSBpbiB0aGVvcnkgcGVybWl0dGVkIHRvIGFsc28gaW5z
cGVjdCB0aGUKICAgICAvLyBpbnN0cnVjdGlvbiBzdHJlYW0gdG8gbW9yZSBhY2N1cmF0ZSBhc3Nl
c3MgdGhlIGNvc3Qgb2YgdGllci11cCkuCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAg
IGppdEFmdGVyV2FybVVwKCk7CisgICAgLy9qaXRBZnRlcldhcm1VcCgpOwogCiAgICAgLy8gSWYg
dGhlIGNvbmN1cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRo
ZW4gY29tcHV0ZSBpdCBoZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAgLTc4OSw2ICs4Mzgs
NzcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3du
ZXJFZGdlLnNldCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZt
LCB0aGlzKSk7CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5l
Q29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPiBqaXRDb2RlKQoreworICAgIHNldEpJVENvZGUoaml0
Q29kZS5jb3B5UmVmKCkpOworCisgICAgeworICAgICAgICBjb25zdCBhdXRvJiBqaXRDb2RlTWFw
ID0gdGhpcy0+aml0Q29kZU1hcCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7CisgICAgICAgICAgICBIYW5kbGVySW5m
byYgaGFuZGxlciA9IGV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAvLyBGSVhNRTog
PHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KKyAgICAgICAgICAgIGhhbmRsZXIubmF0aXZlQ29k
ZSA9IGppdENvZGVNYXAuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdn
ZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsK
KyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBhdXRv
JiBqaXREYXRhID0gZW5zdXJlSklURGF0YShsb2NrZXIpOworCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGppdERhdGEubV9qaXRDb25zdGFudFBvb2wuaXNFbXB0eSgpKTsKKyAgICAgICAgaml0RGF0
YS5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5tX2NvbnN0
YW50UG9vbC5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGppdENvZGUt
Pm1fY29uc3RhbnRQb29sLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvIGVudHJ5ID0g
aml0Q29kZS0+bV9jb25zdGFudFBvb2wuYXQoaSk7CisgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5
LnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxP
YmplY3Q6CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IG1f
Z2xvYmFsT2JqZWN0LmdldCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbzogeworICAgICAgICAgICAg
ICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9ICpzdGF0aWNf
Y2FzdDxVbmxpbmtlZENhbGxMaW5rSW5mbyo+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAg
ICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0RGF0YS5tX2NhbGxMaW5rSW5mb3Mu
YWRkKENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCkpOworICAg
ICAgICAgICAgICAgIC8vIE9PUFM6IGRvbid0IGhhcmRjb2RlIHRoZXNlIHJlZ2lzdGVycyBsaWtl
IHRoaXMuCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFsaXplRGF0YUlDKHZt
KCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIp
OworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBjYWxsTGlu
a0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKKyAgICAg
ICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvID0g
KnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRyeS5wYXlsb2FkKTsK
KyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBqaXREYXRhLm1f
c3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUsIENvZGVPcmlnaW4odW5s
aW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8t
PmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyh0aGlzLCB1bmxpbmtlZFN0
dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0g
c3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsOiB7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5w
YXlsb2FkKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0g
ZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHI6
IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFu
dFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3dp
dGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBHbG9iYWxDb2RlOgorICAgIGNhc2UgTW9kdWxl
Q29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZ1bmN0aW9uQ29kZToKKyAgICAg
ICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRl
dGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgorICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0
aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5J
bmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlz
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKE9wdGlvbnM6OnVzZUJhc2VsaW5l
SklUQ29kZVNoYXJpbmcoKSkKKyAgICAgICAgdW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtl
ZEJhc2VsaW5lQ29kZSA9IFdURk1vdmUoaml0Q29kZSk7Cit9CisKIENvZGVCbG9jazo6fkNvZGVC
bG9jaygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC0xNTE5LDM5ICsxNjM5LDQwIEBAIHZv
aWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAogICAgIHVwZGF0ZUFsbFBy
ZWRpY3Rpb25zKCk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIGJvb2wgaXNFbGlnaWJsZUZvckxM
SW50RG93bmdyYWRlID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGU7Ci0gICAgbV9pc0Vs
aWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBmYWxzZTsKLSAgICAvLyBJZiBCYXNlbGluZUpJVCBj
b2RlIGlzIG5vdCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3Rz
LCB3ZSBhdHRlbXB0Ci0gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGluZSBKSVQgY29kZSBhbmQgcmVp
bnN0YWxsIExMSW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5LgotICAgIGlmIChPcHRpb25zOjp1
c2VMTEludCgpICYmICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1NldCgpLmlzQ3VycmVudGx5RXhl
Y3V0aW5nKHRoaXMpKSB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9j
ayA9IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKLSAgICAgICAgICAgIGlmICghb3B0aW1pemVk
Q29kZUJsb2NrLT5tX29zckV4aXRDb3VudGVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRWxp
Z2libGVGb3JMTEludERvd25ncmFkZSkgewotICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGUg
PSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBMTEludDo6c2V0RW50cnlwb2ludCh0aGlz
KTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0VHlwZSgpID09IEpJVFR5
cGU6OkludGVycHJldGVyVGh1bmspOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV91bmxpbmtlZENvZGUtPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZv
JiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlua2VkQ29kZS0+ZXhjZXB0aW9uSGFuZGxlcihpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0
YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8m
IGluc3RydWN0aW9uID0gKmluc3RydWN0aW9ucygpLmF0KHVubGlua2VkSGFuZGxlci50YXJnZXQp
LnB0cigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlu
a2VkSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oTExJ
bnQ6OmhhbmRsZUNhdGNoKGluc3RydWN0aW9uLndpZHRoKCkpLmNvZGUoKSkpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdW5saW5rSW5jb21pbmdDYWxscygp
OwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBjbGVhciB0aGVzZSBvdXQg
aGVyZSBiZWNhdXNlIGluIGZpbmFsaXplVW5jb25kaXRpb25hbGx5IGFsbCBjb21waWxlciB0aHJl
YWRzCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBzYWZlcG9pbnRlZCwgbWVhbmluZyB0aGV5
J3JlIHJ1bm5pbmcgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBieXRlY29kZSBwYXJzZXIsIGFuZCBi
eXRlY29kZQotICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBz
dHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5mb3MuCi0gICAgICAgICAgICAg
ICAgICAgIHJlc2V0SklURGF0YSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgICAgICBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNlbmRpZgorLy8gT09QUzogcmVjb25jaWxlIHRo
aXMKKy8vI2lmIEVOQUJMRShKSVQpCisvLyAgICBib29sIGlzRWxpZ2libGVGb3JMTEludERvd25n
cmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOworLy8gICAgbV9pc0VsaWdpYmxl
Rm9yTExJbnREb3duZ3JhZGUgPSBmYWxzZTsKKy8vICAgIC8vIElmIEJhc2VsaW5lSklUIGNvZGUg
aXMgbm90IGV4ZWN1dGluZywgYW5kIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCBleGlzdHMsIHdl
IGF0dGVtcHQKKy8vICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5z
dGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KKy8vICAgIGlmIChPcHRpb25zOjp1
c2VMTEludCgpICYmICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1NldCgpLmlzQ3VycmVudGx5RXhl
Y3V0aW5nKHRoaXMpKSB7CisvLyAgICAgICAgaWYgKENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJs
b2NrID0gb3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworLy8gICAgICAgICAgICBpZiAoIW9wdGlt
aXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgeworLy8gICAgICAgICAgICAgICAgaWYg
KGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSkgeworLy8gICAgICAgICAgICAgICAgICAgIG1f
aml0Q29kZSA9IG51bGxwdHI7CisvLyAgICAgICAgICAgICAgICAgICAgTExJbnQ6OnNldEVudHJ5
cG9pbnQodGhpcyk7CisvLyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0VHlw
ZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOworLy8KKy8vICAgICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2Vw
dGlvbkhhbmRsZXJzKCk7IGkrKykgeworLy8gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBV
bmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlua2VkQ29kZS0+ZXhj
ZXB0aW9uSGFuZGxlcihpKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8m
IGhhbmRsZXIgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOworLy8gICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1
bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAg
aGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWw8RXhj
ZXB0aW9uSGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZUNhdGNoKGluc3RydWN0aW9uLndpZHRo
KCkpLmNvZGUoKSkpOworLy8gICAgICAgICAgICAgICAgICAgIH0KKy8vCisvLyAgICAgICAgICAg
ICAgICAgICAgdW5saW5rSW5jb21pbmdDYWxscygpOworLy8KKy8vICAgICAgICAgICAgICAgICAg
ICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcworLy8gICAgICAgICAgICAgICAg
ICAgIC8vIGFyZSBzYWZlcG9pbnRlZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5pbmcgZWl0aGVyIGJl
Zm9yZSBvciBhZnRlciBieXRlY29kZSBwYXJzZXIsIGFuZCBieXRlY29kZQorLy8gICAgICAgICAg
ICAgICAgICAgIC8vIHBhcnNlciBpcyB0aGUgb25seSBkYXRhIHN0cnVjdHVyZSBwb2ludGluZyBp
bnRvIHRoZSB2YXJpb3VzICppbmZvcy4KKy8vICAgICAgICAgICAgICAgICAgICByZXNldEpJVERh
dGEoKTsKKy8vICAgICAgICAgICAgICAgIH0gZWxzZQorLy8gICAgICAgICAgICAgICAgICAgIG1f
aXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gdHJ1ZTsKKy8vICAgICAgICAgICAgfQorLy8g
ICAgICAgIH0KKy8vICAgIH0KKy8vCisvLyNlbmRpZgogICAgIAogICAgIGlmIChKSVRDb2RlOjpj
b3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKICAgICAgICAgZmluYWxpemVMTEludElubGlu
ZUNhY2hlcygpOwpAQCAtMTU3OSw3ICsxNzAwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KAogICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
azoKLSAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7Cisg
ICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y291bnQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAg
ICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CkBAIC0zMDc5LDcgKzMy
MDAsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBF
TkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVy
biBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMxNjQsNyArMzI4NSw3
IEBAIFZhbHVlUHJvZmlsZSogQ29kZUJsb2NrOjp0cnlHZXRWYWx1ZVByb2YKIAogI2RlZmluZSBD
QVNFKE9wKSBcCiAgICAgY2FzZSBPcDo6b3Bjb2RlSUQ6IFwKLSAgICAgICAgcmV0dXJuICZpbnN0
cnVjdGlvbi0+YXM8T3A+KCkubWV0YWRhdGEodGhpcykubV9wcm9maWxlOworICAgICAgICByZXR1
cm4gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fcHJvZmlsZTsKIAogICAg
ICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9WQUxVRV9QUk9GSUxFKENBU0UpCiAKQEAgLTMyOTUs
MTMgKzM0MTYsMTMgQEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQog
ewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAg
ICAgcmV0dXJuICZwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CiAgICAgY2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigp
Lm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9w
TXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgot
ICAgICAgICByZXR1cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJv
ZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BE
aXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+
YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzMxMywxMSArMzQzNCwxMSBAQCBVbmFyeUFyaXRo
UHJvZmlsZSogQ29kZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2Rl
SUQoKSkgewogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5l
Z2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBj
LT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNl
IG9wX2luYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcyku
bV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEo
dGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAm
cGMtPmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICBy
ZXR1cm4gcGMtPmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM0NjcsMjggKzM1ODgsMTkgQEAg
c3RkOjpvcHRpb25hbDxCeXRlY29kZUluZGV4PiBDb2RlQmxvY2s6OgogICAgIHJldHVybiBieXRl
Y29kZUluZGV4OwogfQogCi1pbnQzMl90IENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGludDMy
X3QgdGhyZXNob2xkKQotewotICAgIHN3aXRjaCAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0
aW1pemUoKSkgewotICAgIGNhc2UgVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU6Ci0gICAgICAgIHJl
dHVybiB0aHJlc2hvbGQ7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6RmFsc2U6Ci0gICAgICAgIHJldHVy
biB0aHJlc2hvbGQgKiA0OwotICAgIGNhc2UgVHJpU3RhdGU6OlRydWU6Ci0gICAgICAgIHJldHVy
biB0aHJlc2hvbGQgLyAyOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gdGhyZXNob2xkOwotfQorLy92b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQor
Ly97CisvLyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCh0aHJlc2hv
bGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSksIHRoaXMpOwor
Ly99CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRBZnRlcldhcm1VcCgpCit2b2lkIENvZGVCbG9jazo6
aml0U29vbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0
aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSksIHRo
aXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKHVubGlua2Vk
Q29kZUJsb2NrKCktPnRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRTb29u
KCkpLCB0aGlzKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmppdFNvb24oKQordm9pZCBDb2RlQmxv
Y2s6OmppdE5leHRJbnZvY2F0aW9uKCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0
TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRTb29u
KCkpLCB0aGlzKTsKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCgw
LCB0aGlzKTsKIH0KIAogYm9vbCBDb2RlQmxvY2s6Omhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9p
bnRzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQCBjbGFzcyBNZXRh
ZGF0YVRhYmxlOwogY2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CiBjbGFzcyBSZWdpc3RlckF0T2Zm
c2V0TGlzdDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworY2xhc3MgQmFzZWxpbmVKSVRDb2Rl
OwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihDb2RlQmxvY2tSYXJl
RGF0YSk7CiAKQEAgLTE1OCw3ICsxNTksOSBAQCBwdWJsaWM6CiAgICAgTWV0YWRhdGFUYWJsZSog
bWV0YWRhdGFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuZ2V0KCk7IH0KIAogICAg
IHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7
IH0KK3ByaXZhdGU6CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKHVuc2lnbmVkIG5ld1ZhbHVl
KTsKK3B1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkgY29u
c3QgeyByZXR1cm4gbV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgfQogCkBAIC0xNjcsNyArMTcw
LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251
bVZhcnM7IH0KICAgICB1bnNpZ25lZCBudW1UbXBzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtl
ZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50VG1wczsgfQogCi0gICAg
dW5zaWduZWQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0
ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CiAKICAg
ICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29k
ZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAgLTIzMiwxNiArMjM0LDYgQEAgcHVi
bGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAg
ICBib29sIGluc3RhbGxWTVRyYXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNL
bm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBD
b25zaWRlciBhZGRpbmcgYmFjayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVl
IGlmIGByZWdgIGlzIGB0aGlzYCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVn
KS5pc0NlbGwoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlT
X0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAg
ICB7CiAgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251
bVZhcnMpOwpAQCAtMjY2LDggKzI1OCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRJQ1N0YXR1
c01hcChJQ1N0YXR1c01hcCYgcmVzdWx0KTsKICAgICAKICNpZiBFTkFCTEUoSklUKQorICAgIC8v
IE9PUFM6IG1vdmUgYXJpdGhtZXRpYyBJQ3MgYW5kIHN3aXRjaCB0YWJsZXMgb3V0IG9mIGhlcmUs
IGFuZCBvbnRvIEpJVENvZGUuCiAgICAgc3RydWN0IEpJVERhdGEgewogICAgICAgICBXVEZfTUFL
RV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiAKICAgICAgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZv
czsKICAgICAgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKQEAgLTI4Miw5ICsyNzYsMTMgQEAg
cHVibGljOgogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNU
b0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXNDYWxsZWVTYXZlUmVnaXN0ZXJzIHsg
ZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0
ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKworICAgICAgICBGaXhlZFZl
Y3Rvcjx2b2lkKj4gbV9qaXRDb25zdGFudFBvb2w7CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklURGF0
YSwgbV9qaXRDb25zdGFudFBvb2wpOyB9CiAgICAgfTsKIAorICAgIHZvaWQgc2V0dXBXaXRoVW5s
aW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4pOworCiAgICAgSklURGF0YSYg
ZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikKICAgICB7CiAg
ICAgICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkKQEAgLTI5Myw2ICsyOTEsOCBAQCBwdWJsaWM6
CiAgICAgfQogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGFTbG93KGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdERhdGEpOyB9CisKICAgICBKSVRB
ZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CiAgICAgSklUTXVsSUMqIGFk
ZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwogICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJ
QyhVbmFyeUFyaXRoUHJvZmlsZSopOwpAQCAtMzIyLDE2ICszMjIsNyBAQCBwdWJsaWM6CiAgICAg
Ly8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2Yg
Y2FsbGluZyB0aGlzLgogICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNv
ZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICAKLSAgICB2b2lkIHNldEpJVENvZGVNYXAoSklU
Q29kZU1hcCYmIGppdENvZGVNYXApCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVN
YXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOwotICAgIH0KLSAgICBjb25zdCBKSVRDb2RlTWFwJiBq
aXRDb2RlTWFwKCkKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9s
b2NrKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXA7
Ci0gICAgfQorICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKTsKIAogICAgIHZvaWQg
c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYm
KTsKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyh2b2lkKiBwYyk7CkBAIC00
NzIsNiArNDYzLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5hbWVGb3JSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFyZ3VtZW50VmFs
dWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fYXJndW1l
bnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRWYWx1ZVBy
b2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5z
aXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykgfHwgIU9wdGlv
bnM6OnVzZUpJVCgpKTsKQEAgLTU3Miw2ICs1NjQsNyBAQCBwdWJsaWM6CiAgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQog
ICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1f
dW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihyZWcpOyB9CiAg
ICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5r
ZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihpbmRleCk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9jb25zdGFudFJlZ2lzdGVycykgKyBkZWNsdHlw
ZShtX2NvbnN0YW50UmVnaXN0ZXJzKTo6ZGF0YU1lbW9yeU9mZnNldCgpOyB9CiAKICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rp
b25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkg
eyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNjAxLDYgKzU5NCwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7CiAgICAgICAgIHJldHVy
biBtX2ppdERhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICB9CisgICAg
U2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7
CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFudFBvb2woKQorICAgIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQobV9qaXREYXRhICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCk7CisgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1faml0Q29uc3RhbnRQb29sLmRhdGEoKTsK
KyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRj
aEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENv
ZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9CkBAIC02MTEsNiArNjEw
LDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwogICAgICAg
ICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07
CiAgICAgfQorICAgIFN0cmluZ0p1bXBUYWJsZSYgYmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUoaW50IHRhYmxlSW5kZXgpOwogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRT
dHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51
bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxp
bmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNjMzLDIxICs2MzMsMjAgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpCiAgICAgewotICAgICAgICByZXR1
cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRo
aXMpOworICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jaGVja0lmVGhyZXNo
b2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKICAgICB9CiAKICAgICB2b2lkIGRvbnRKSVRBbnl0aW1l
U29vbigpCiAgICAgewotICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmlu
aXRlbHkoKTsKKyAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5kZWZlckluZGVmaW5pdGVs
eSgpOwogICAgIH0KIAotICAgIGludDMyX3QgdGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNo
b2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2FybVVwKCk7CiAgICAgdm9pZCBqaXRTb29uKCk7Cisg
ICAgdm9pZCBqaXROZXh0SW52b2NhdGlvbigpOwogCiAgICAgY29uc3QgQmFzZWxpbmVFeGVjdXRp
b25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAgICAgIHJldHVybiAqbV9sbGludEV4ZWN1
dGVDb3VudGVyOwogICAgIH0KIAogICAgIHR5cGVkZWYgSGFzaE1hcDxzdGQ6OnR1cGxlPFN0cnVj
dHVyZUlELCB1bnNpZ25lZD4sIEZpeGVkVmVjdG9yPExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVjdHVyZVdhdGNocG9pbnRNYXA7CkBAIC03OTcsNiAr
Nzk2LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CiAgICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0
c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVxdWVzdHMpOyB9CiAKICAgICB2b2lkIGFkZEJyZWFr
cG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpOwogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2lu
dCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykKQEAgLTgzOCw2ICs4MzgsNyBAQCBwdWJsaWM6CiAg
ICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKIAogICAgIGJvb2wgbV9zaG91bGRB
bHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJpdGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0
byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2hvdWxkQWx3YXlz
QmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zaG91bGRB
bHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBFTkFCTEUoSklUKQogICAgIHVuc2lnbmVkIG1fY2Fw
YWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBERkc6OkNhcGFiaWxpdHlMZXZlbApAQCAtOTA2LDEx
ICs5MDcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1ldGFkYXRh
VGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX21ldGFkYXRhKTsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnNSYXdQb2lu
dGVyKTsgfQogCi0gICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJl
dHVybigpCi0gICAgewotICAgICAgICAvLyBTb21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBh
bHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRoZXkgcnVuLgotICAgICAgICByZXR1cm4gIW1fdW5s
aW5rZWRDb2RlLT5pc0J1aWx0aW5GdW5jdGlvbigpOwotICAgIH0KKyAgICBib29sIGxvb3BIaW50
c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkgeyByZXR1cm4gbV91bmxpbmtlZENv
ZGUtPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCk7IH0KIAogcHJv
dGVjdGVkOgogICAgIHZvaWQgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwpAQCAtMTAwOCw3
ICsxMDA1LDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRH
ZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwogI2lm
IEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+IG1faml0
RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBUaGlz
IGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJv
ZmlsZWQgY29kZSBibG9jawpAQCAtMTAyNyw3ICsxMDI2LDcgQEAgcHJpdmF0ZToKIAogICAgIFdy
aXRlQmFycmllcjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAgICAgCi0gICAgQmFzZWxpbmVF
eGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICBCYXNlbGluZUV4ZWN1
dGlvbkNvdW50ZXIqIG1fbGxpbnRFeGVjdXRlQ291bnRlciB7IG51bGxwdHIgfTsKIAogICAgIEJh
c2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2ppdEV4ZWN1dGVDb3VudGVyOwogICAgIHVpbnQzMl90
IG1fb3NyRXhpdENvdW50ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJ
VENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxpbmVzLmgiCkBAIC0zOSwy
NSArNDAsMjIgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogCiAg
ICAgaWYgKG1fbWV0YWRhdGEpIHsKICNkZWZpbmUgVklTSVQoX19vcCkgXAotICAgICAgICBtX21l
dGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgZnVuYyhtZXRhZGF0
YS5tX3Byb2ZpbGUsIGZhbHNlKTsgfSk7Ci0KKyAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxf
X29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMoKm1ldGFkYXRhLm1fcHJvZmlsZSwgZmFs
c2UpOyB9KTsKICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVkFMVUVfUFJPRklMRShWSVNJ
VCkKLQogI3VuZGVmIFZJU0lUCiAKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEl0ZXJh
dG9yT3Blbj4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyAKLSAgICAgICAgICAgIGZ1bmMobWV0YWRh
dGEubV9pdGVyYWJsZVByb2ZpbGUsIGZhbHNlKTsKLSAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEu
bV9pdGVyYXRvclByb2ZpbGUsIGZhbHNlKTsKLSAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV9u
ZXh0UHJvZmlsZSwgZmFsc2UpOworICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEubV9pdGVyYWJs
ZVByb2ZpbGUsIGZhbHNlKTsKKyAgICAgICAgICAgIGZ1bmMoKm1ldGFkYXRhLm1faXRlcmF0b3JQ
cm9maWxlLCBmYWxzZSk7CisgICAgICAgICAgICBmdW5jKCptZXRhZGF0YS5tX25leHRQcm9maWxl
LCBmYWxzZSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BJ
dGVyYXRvck5leHQ+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsKLSAgICAgICAgICAgIGZ1bmMobWV0
YWRhdGEubV9uZXh0UmVzdWx0UHJvZmlsZSwgZmFsc2UpOwotICAgICAgICAgICAgZnVuYyhtZXRh
ZGF0YS5tX2RvbmVQcm9maWxlLCBmYWxzZSk7Ci0gICAgICAgICAgICBmdW5jKG1ldGFkYXRhLm1f
dmFsdWVQcm9maWxlLCBmYWxzZSk7CisgICAgICAgICAgICBmdW5jKCptZXRhZGF0YS5tX25leHRS
ZXN1bHRQcm9maWxlLCBmYWxzZSk7CisgICAgICAgICAgICBmdW5jKCptZXRhZGF0YS5tX2RvbmVQ
cm9maWxlLCBmYWxzZSk7CisgICAgICAgICAgICBmdW5jKCptZXRhZGF0YS5tX3ZhbHVlUHJvZmls
ZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCi0KIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KQEAgLTEyNiw0ICsxMjQsMjQgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hM
TEludENhbGxMaW5rSW5mbwogICAgIH0KIH0KIAorI2lmIEVOQUJMRShKSVQpCitBTFdBWVNfSU5M
SU5FIGNvbnN0IEpJVENvZGVNYXAmIENvZGVCbG9jazo6aml0Q29kZU1hcCgpCit7CisgICAgQVNT
RVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1faml0Q29kZU1hcDsK
K30KKworQUxXQVlTX0lOTElORSBTaW1wbGVKdW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5l
SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxp
bmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlc1t0YWJsZUluZGV4XTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNzAsNiArNzAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UqIHdyYXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwogICAgIAogICAgIHN0YXRpYyBF
eGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwQW5kQWN0aXZhdGUoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spOworCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLCBtX2NvZGVCbG9j
ayk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3Vu
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhl
Y3V0aW9uQ291bnRlci5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5
LDcgKzE1OSw3IEBAIGJvb2wgRXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjoKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdGhyZXNob2xkID0gY2xpcHBlZFRocmVz
aG9sZChjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIDogbnVsbHB0ciwgdGhy
ZXNob2xkKTsKKyAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKHRocmVzaG9sZCk7CiAg
ICAgCiAgICAgbV9jb3VudGVyID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXRocmVzaG9sZCk7CiAg
ICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNv
dW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhl
Y3V0aW9uQ291bnRlci5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2
MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsgLy8g
SWYgeW91IHVzZSB0aGlzLCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCgpIG1heSBzdGls
bCByZXR1cm4gZmFsc2UuCiAgICAgYm9vbCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChD
b2RlQmxvY2sqKTsKICAgICBib29sIGhhc0Nyb3NzZWRUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVy
biBtX2NvdW50ZXIgPj0gMDsgfQotICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhy
ZXNob2xkLCBDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRo
cmVzaG9sZCwgQ29kZUJsb2NrKiA9IG51bGxwdHIpOwogICAgIHZvaWQgZGVmZXJJbmRlZmluaXRl
bHkoKTsKICAgICBkb3VibGUgY291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1fdG90YWxDb3VudCkgKyBtX2NvdW50ZXI7IH0KICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKQEAgLTg2LDEzICs4Niw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFQgdGhyZXNob2xkKQorICAgIHN0YXRpYyBUIGNsaXBw
ZWRUaHJlc2hvbGQoVCB0aHJlc2hvbGQpCiAgICAgewotICAgICAgICBpbnQzMl90IG1heFRocmVz
aG9sZDsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdl
ZW5DaGVja3BvaW50cygpICYmIGdsb2JhbE9iamVjdCkKLSAgICAgICAgICAgIG1heFRocmVzaG9s
ZCA9IGdsb2JhbE9iamVjdC0+d2Vha1JhbmRvbUludGVnZXIoKSAlIG1heGltdW1FeGVjdXRpb25D
b3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF4
VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwor
ICAgICAgICBpbnQzMl90IG1heFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3
ZWVuQ2hlY2twb2ludHMoKTsKICAgICAgICAgaWYgKHRocmVzaG9sZCA+IG1heFRocmVzaG9sZCkK
ICAgICAgICAgICAgIHRocmVzaG9sZCA9IG1heFRocmVzaG9sZDsKICAgICAgICAgcmV0dXJuIHRo
cmVzaG9sZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0
YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZE1ldGFkYXRhLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAs
NyBAQCBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhCiAKIHN0cnVjdCBH
ZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggewogICAgIEFycmF5UHJvZmlsZSBhcnJheVBy
b2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5
UHJvZmlsZSk7IH0KIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRh
QXJyYXlMZW5ndGgpID09IDEyKTsKIApAQCAtODgsNiArODksNyBAQCB1bmlvbiBHZXRCeUlkTW9k
ZU1ldGFkYXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUgbW9kZTsKICAgICAgICAgdWludDhfdCBo
aXRDb3VudEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBtdXN0IGJlIHplcm8gd2hlbiB3ZSB1c2Ug
UHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9k
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhLCBtb2RlKTsg
fQogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0IGRlZmF1bHRNb2RlOwogICAgIEdldEJ5
SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YUFy
cmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzg1LDYgKzM4NSw4IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFj
Y2VzcygKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAorLy8gT09QUzogTWFrZSB0
aGlzIHN0dWZmIHdvcmsgd2l0aCBkYXRhIGljcyB0byBub3QgYXNzdW1lIGlubGluZSBhY2Nlc3Mu
CisKIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lu
bGluZUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gdGFyZ2V0KQogewog
ICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CkBAIC00MDQsOSArNDA2LDEyIEBAIHZv
aWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKIHZvaWQgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IHRhcmdldCkKIHsKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAg
ICAvLyBPT1BTOiBtYWtlIHNvbWUgdmVyc2lvbiBvZiBJbmxpbmVBY2Nlc3MgZm9yIGJhc2VsaW5l
LiBQZXJoYXBzIG1ha2UgaXQgZGF0YSBkcml2ZW4uIE9yIHBlcmhhcHMgaGF2ZSB0aGUgY29kZQor
ICAgICAgICAvLyBiZSBzaGFyZWQgc29tZWhvdyBiZXR3ZWVuIFVubGlua2VkQ29kZUJsb2Nrcy4K
KwogICAgICAgICAvLyBJZiBpdCBpcyBub3QgR2V0QnlJZC1saWtlLXRoaW5nLCB3ZSBkbyBub3Qg
ZW1pdCBub3Agc2xlZCAoZS5nLiBHZXRCeVZhbCkuCiAgICAgICAgIC8vIFRoZSBjb2RlIGlzIGFs
cmVhZHkgYW4gaW5kaXJlY3QganVtcCwgYW5kIG9ubHkgdGhpbmcgd2Ugc2hvdWxkIGRvIGlzIHJl
cGxhY2luZyBtX2NvZGVQdHIuCi0gICAgICAgIGlmIChzdHViSW5mby5oYXNDb25zdGFudElkZW50
aWZpZXIpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJh
c2VsaW5lSklUICYmIHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikgewogICAgICAgICAg
ICAgLy8gSWYgbV9jb2RlUHRyIGlzIHBvaW50aW5nIHRvIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRM
b2NhdGlvbiwgdGhpcyBtZWFucyB0aGF0IElubGluZUFjY2VzcyBjb2RlIGlzIG5vdCBhIHN0dWIg
b25lLgogICAgICAgICAgICAgLy8gV2UgcmV3cml0ZSB0aGlzIHdpdGggdGhlIHN0dWItYmFzZWQg
ZGlzcGF0Y2hpbmcgY29kZSBvbmNlLCBhbmQgY29udGludWUgdXNpbmcgaXQgdW50aWwgd2UgcmVz
ZXQgdGhlIGNvZGUuCiAgICAgICAgICAgICBpZiAoc3R1YkluZm8ubV9jb2RlUHRyLmV4ZWN1dGFi
bGVBZGRyZXNzKCkgPT0gc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpIHsKQEAgLTQyMSw2ICs0MjYsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nlc3M6IGxpbmtp
bmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBzdHVi
SW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVN
ZXRhZGF0YS5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQw
LDcgQEAgT1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBUwogCiBzdHJ1Y3Qg
SXRlcmF0aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90IHNlZW5Nb2RlcyB7IDAgfTsKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1vZGVzKTsgfSAKICAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9PSBzaXplb2YoSXRlcmF0aW9uTW9k
ZSkpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2Fs
bExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0xMSW50Q2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBBcnJheVByb2ZpbGUgbV9hcnJheVBy
b2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9hcnJheVByb2ZpbGUpOyB9
CiAKIHByaXZhdGU6CiAgICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhM
aW5rQml0IHsgdW5saW5rZWRCaXQgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMjgyMDE2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJ
bmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1
ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nl
c3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTI4NSw2ICsyODYsNyBAQCB2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgICAgIHJlc2V0UHV0QnkoY29k
ZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVO
YW1lOgogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlW
YWwpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKQEAgLTQz
MCw2ICs0MzIsMjA0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6c2UK
ICAgICBtX2NhY2hlVHlwZSA9IG5ld0NhY2hlVHlwZTsKIH0KIAordm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayos
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8pCit7CisgICAgYWNj
ZXNzVHlwZSA9IHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZTsKKyAgICBzdGFydCA9IHVubGlu
a2VkU3R1YkluZm8uc3RhcnQ7IC8vIE9PUFM6IGRvIHdlIG5lZWQgYSBzdGFydCBmb3IgZGF0YSBJ
Q3M/CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5kb25lTG9jYXRpb247Cisg
ICAgc2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5zbG93UGF0aFN0YXJ0
TG9jYXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKTsKKyAgICBjb2RlT3Jp
Z2luID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIG1f
Y29kZVB0ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKworICAgIHVzZWRSZWdpc3RlcnMgPSBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgaWYgKGFjY2Vzc1R5
cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZvciBpdGVyYXRvcl9uZXh0LCB3ZSBjYW4n
dCBjbG9iYmVyIHRoZSBzY3JhdGNoIHJlZ2lzdGVyIGVpdGhlci4KKyAgICAgICAgdXNlZFJlZ2lz
dGVycy5hZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKyAgICB9CisKKyAg
ICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFs
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
SW5CeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Oklu
QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRT
dHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAg
ICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAg
ICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1
YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0
ZUZpZWxkU2V0OgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAg
ICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21h
TW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAg
ICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAg
ICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlu
a2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0
QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJp
dmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
U2V0UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQ
cml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
c3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5
R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJ
bmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7
CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRp
ZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
Okluc3RhbmNlT2Y6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAg
ICAgICBwcm90b3R5cGVJc0tub3duT2JqZWN0ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBC
YXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnByb3RvdHlw
ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJh
bmQ6IAorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFz
ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZh
bHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsK
KyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1f
c3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAg
ICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIg
PSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlk
V2l0aFRoaXM6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAg
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAg
ICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0Owor
ICAgICAgICByZWdzLnRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAg
ICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYg
KGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5
UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2Ug
QWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRp
ZmllciA9IGZhbHNlOworICAgICAgICB2YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAg
IGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAg
cmVncy5icmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZv
aWQgU3RydWN0dXJlU3R1YkluZm86OmNoZWNrQ29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJl
dmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
SklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUg
Ik9wdGlvbnMuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKQEAg
LTU2LDYgKzU3LDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRC
eVZhbCwKICAgICBQdXRCeUlkLAogICAgIFB1dEJ5VmFsLAorICAgIFB1dFByaXZhdGVOYW1lLAog
ICAgIEluQnlJZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtNzgsNiAr
ODAsOCBAQCBlbnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CiAgICAgU3RyaW5nTGVuZ3Ro
CiB9OwogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKKwogY2xhc3MgU3RydWN0
dXJlU3R1YkluZm8gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZv
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTk4LDYgKzEwMiw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKKyAgICB2b2lk
IGluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvJik7CisKICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsK
IAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUg
ZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLApAQCAtNDQ3LDYgKzQ1Mywx
OCBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQog
CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHBy
aXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkgfTsKKyAgICBF
Q01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpzbG9wcHkoKSB9OworICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleDsKKyAgICAvLyBPT1BTOiBEbyB3ZSBuZWVkIHN0YXJ0IGZvciBkYXRh
IElDcz8KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7
IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBj
YWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2Yn
IGNhY2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9j
YXRpb247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQ
YXRoU3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZv
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxl
ci5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdXBlclNhbXBsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQg
cHJpbnRTdXBlclNhbXBsZXJTdGF0ZSgpCiAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAxMDAuMCAq
IGluIC8gKGluICsgb3V0KTsKICAgICBpZiAocGVyY2VudGFnZSAhPSBwZXJjZW50YWdlKQogICAg
ICAgICBwZXJjZW50YWdlID0gMC4wOwotICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQg
c3VwZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJQ
ZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIiVc
biIpOwogfQogCiB2b2lkIGVuYWJsZVN1cGVyU2FtcGxlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUg
IlVubGlua2VkQ29kZUJsb2NrLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNp
bmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0
cnVjdHMuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKQEAgLTc4LDYgKzc5LDggQEAgVW5saW5r
ZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgICAgICBjcmVhdGVSYXJlRGF0
YUlmTmVjZXNzYXJ5KGxvY2tlcik7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fcHJpdmF0ZUJyYW5k
UmVxdWlyZW1lbnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJpdmF0ZUJyYW5kUmVxdWlyZW1l
bnQ6Ok5lZWRlZCk7CiAgICAgfQorCisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1Ro
cmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJt
VXAoKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpAQCAtMzE2LDQgKzMxOSwz
MSBAQCBpbnQgVW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzCiAgICAgcmV0dXJu
IG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAorI2lmIEFT
U0VSVF9FTkFCTEVECitib29sIFVubGlua2VkQ29kZUJsb2NrOjpoYXNJZGVudGlmaWVyKFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgLy8gT09QUzogZG8gd2hhdCBDb2RlQmxvY2sgZG9l
cyBhbmQgbWFrZSBhIGhhc2ggdGFibGU/CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7CisgICAgICAgIGlmIChpZGVudGlmaWVyKGkpLmlt
cGwoKSA9PSB1aWQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorI2VuZGlmCisKK2ludDMyX3QgVW5saW5rZWRDb2RlQmxvY2s6OnRocmVzaG9s
ZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKK3sKKyAgICBzd2l0Y2ggKGRpZE9wdGltaXplKCkp
IHsKKyAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgorICAgICAgICByZXR1cm4gdGhy
ZXNob2xkOworICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgorICAgICAgICByZXR1cm4gdGhyZXNo
b2xkICogNDsKKyAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgorICAgICAgICByZXR1cm4gdGhyZXNo
b2xkIC8gMjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRo
cmVzaG9sZDsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAy
ODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOSArMjUsMTEgQEAKIAogI3ByYWdtYSBvbmNlCiAK
KyNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25z
LmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgor
I2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJ
bmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgi
CkBAIC02Miw2ICs2NCw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwog
Y2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGluZUpJVENvZGU7
CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29uc3RhbnQgOiBp
bnQzMl90OwogCkBAIC0xNzUsNiArMTc4LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4ZWRW
ZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJl
dHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29u
c3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdl
dCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYg
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIxMSwxNSBAQCBwdWJsaWM6
CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVy
biBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBj
b25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigp
OworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0
aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5z
dHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25z
QmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25zdCB7IHJl
dHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51bUNhbGxlZUxv
Y2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5zaWduZWQg
bnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDYgKzM0NywxNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpOwogICAg
IH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4o
KQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlz
IGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFpc0J1aWx0aW5G
dW5jdGlvbigpOworICAgIH0KKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgYm9vbCBoYXNJZGVu
dGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CisjZW5kaWYKKworICAgIGludDMyX3QgdGhyZXNo
b2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKIAogcHJvdGVjdGVkOgogICAgIFVubGlua2Vk
Q29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZv
JiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwpAQCAtMzk0LDYgKzQxOCw3IEBAIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJlcyA6IDQ7CiBwdWJsaWM6
CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29k
ZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1f
ZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEw
LDYgKzQzNSw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3Ry
ZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFj
ZSB0byBzdG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1f
YmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5h
cnlBcml0aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJv
ZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtNDU1LDYgKzQ4MywzMiBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7
CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBw
YykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNv
ZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29k
ZU9mZnNldCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5QXJpdGhQcm9maWxlcy5z
aXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQ
cm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVk
IGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9
IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV91bmFyeUFyaXRoUHJvZmls
ZXMuYXBwZW5kKFVuYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2ln
bmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJp
dGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5
QXJpdGhQcm9maWxlc1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGlu
dEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOyB9CisKKyAg
ICBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+IG1fdmFsdWVQcm9maWxlczsKIAogcHJpdmF0ZToK
ICAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJl
YW06Ok9mZnNldCwgaW50PjsKQEAgLTQ2Miw2ICs1MTYsNyBAQCBwcml2YXRlOgogICAgIE91dE9m
TGluZUp1bXBUYXJnZXRzIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHM7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOwogICAgIEZpeGVkVmVjdG9yPEV4cHJlc3Npb25SYW5n
ZUluZm8+IG1fZXhwcmVzc2lvbkluZm87CisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1f
bGxpbnRFeGVjdXRlQ291bnRlcjsKIAogcHJvdGVjdGVkOgogICAgIERFQ0xBUkVfVklTSVRfQ0hJ
TERSRU47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgyMDE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAgcHVibGljOgogICAgIGJvb2wgd2Fz
Q29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2Nr
LT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0KICAgICBib29sIGhhc0NoZWNr
cG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmhhc0NoZWNrcG9pbnRzKCk7IH0K
ICAgICBib29sIGhhc1RhaWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5oYXNU
YWlsQ2FsbHMoKTsgfQorICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpIHsgcmV0
dXJuIG1fY29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKTsgfQorICAgIHVuc2lnbmVk
IGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJp
dGhQcm9maWxlKCk7IH0KIAogICAgIC8vIFVwZGF0aW5nIFVubGlua2VkQ29kZUJsb2NrLgogICAg
IHZvaWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1fY29kZUJsb2NrLT5zZXRIYXNDaGVja3BvaW50
cygpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRh
ZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDYgKzY0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxlKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZzZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bj
b2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAg
ICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIo
KVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsK
KyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKHR5cGVuYW1lIE9wY29kZTo6
TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
ZW51bSBFbXB0eVRhZyB7IEVtcHR5IH07CiAKQEAgLTEwMSw2ICsxMDksNyBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gc19vZmZzZXQxNlRhYmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVzaW5n
IE9mZnNldDMyID0gdWludDMyX3Q7CiAgICAgdXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAko
cmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBAIHRlbXBsYXRlPHVuc2ln
bmVkIG51bWJlck9mQnVja2V0c0FyZ3VtZW4KIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVj
a2V0c0FyZ3VtZW50OwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZTcGVj
RmFpbEJ1Y2tldHMgPSAxOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYnVja2V0SW5k
ZXhNYXNrID0gbnVtYmVyT2ZCdWNrZXRzIC0gMTsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIHRvdGFsTnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRzICsgbnVtYmVyT2ZTcGVj
RmFpbEJ1Y2tldHM7CiAgICAgCiAgICAgVmFsdWVQcm9maWxlQmFzZSgpCkBAIC0xMTgsOCArMTE3
LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5l
dmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGlu
ZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkBAIC0xMzQsNyArMTMxLDcg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1f
cHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAgICBFbmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNb
dG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9u
IHsgU3BlY05vbmUgfTsKQEAgLTE1Niw2ICsxNTMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0
aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQ
cm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPiB7CiAgICAgVmFsdWVQcm9maWxlKCkgOiBW
YWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+KCkgeyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZh
bHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQogfTsKIAogc3RydWN0IFZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk4LDcgKzE1
OTgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFVuYXJ5CiAgICAgICAg
IGVtaXRVbmFyeU9wPE9wTm90Pihkc3QsIHNyYyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
b3BfbmVnYXRlOgotICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7
CisgICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0eXBlLCBtX2NvZGVCbG9j
ay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ugb3Bf
Yml0bm90OgogICAgICAgICBlbWl0VW5hcnlPcDxPcEJpdG5vdD4oZHN0LCBzcmMpOwpAQCAtMTY5
NiwxMyArMTY5NiwxMyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFR5cGVP
CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5jKFJlZ2lzdGVySUQqIHNy
Y0RzdCkKIHsKLSAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNEc3QpOworICAgIE9wSW5jOjplbWl0
KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAg
IHJldHVybiBzcmNEc3Q7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
RGVjKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3Qp
OworICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJp
dGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjgyLDcgKzY4Miw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmVnaXN0ZXJJRCo+CiAgICAgICAgIGVtaXRCaW5h
cnlPcChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIs
IE9wZXJhbmRUeXBlcyB0eXBlcykKICAgICAgICAgewotICAgICAgICAgICAgQmluYXJ5T3A6OmVt
aXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcyk7CisgICAgICAgICAgICBCaW5hcnlPcDo6
ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzLCBtX2NvZGVCbG9jay0+YWRkQmluYXJ5
QXJpdGhQcm9maWxlKCkpOwogICAgICAgICAgICAgcmV0dXJuIGRzdDsKICAgICAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24g
MjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2
bSwgQ2FsbEZyYW1lKgogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJs
b2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsK
ICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQpOwotICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwog
ICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxp
ZCk7CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9ERkcoKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJKSVQuaCIKQEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50
cyhWTSYgdm0sIENDYWxsSGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0
Y2ggKGppdC5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdK
SVQ6Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xp
cHBlZFRocmVzaG9sZChqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1
ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xp
cHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklU
VHlwZTo6RlRMSklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25D
b3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCks
IHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9u
Q291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0z
MDksMTAgKzMxMCwxNSBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJz
CiAgICAgICAgICAgICB0cnVlQ2FsbGVyID8gQXNzZW1ibHlIZWxwZXJzOjpVc2VFeGlzdGluZ1Rh
Z1JlZ2lzdGVyQ29udGVudHMgOiBBc3NlbWJseUhlbHBlcnM6OkNvcHlCYXNlbGluZUNhbGxlZVNh
dmVkUmVnaXN0ZXJzRnJvbUJhc2VGcmFtZSwKICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QyLCBH
UFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDQpOwogCisgICAgICAgIC8vIE9PUFM6IENvbnNp
ZGVyIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIGJhc2VsaW5lIHBiL21ldGFkYXRhIHJl
Z2lzdGVycwogICAgICAgICBpZiAoY2FsbGVySXNMTEludCkgewogICAgICAgICAgICAgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zv
cigqdHJ1ZUNhbGxlcik7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkp
LCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTElu
dDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSk7CiAgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVy
LT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJh
bWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUikpOworICAgICAg
ICB9IGVsc2UgaWYgKHRydWVDYWxsZXIpIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxs
ZXIpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2
ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgSklUOjpzX21ldGFkYXRh
R1BSKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5iYXNlbGluZUpJVENvbnN0YW50UG9vbCgp
KSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgSklU
OjpzX2NvbnN0YW50c0dQUikpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKQpAQCAtNDA0LDYgKzQxMCw5IEBAIHZvaWQgYWRqdXN0QW5kSnVt
cFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBj
R1BSKTsKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQ
dHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2UgeworICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRh
dGFUYWJsZSgpKSwgSklUOjpzX21ldGFkYXRhR1BSKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPmJhc2VsaW5lSklUQ29uc3Rh
bnRQb29sKCkpLCBKSVQ6OnNfY29uc3RhbnRzR1BSKTsKKwogICAgICAgICBjb2RlQmxvY2tGb3JF
eGl0LT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXgg
ZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzAsNiArNzMwLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1
ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZVRhZ0dQUiwgY2Fs
bGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1B
bGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBu
dW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1f
aml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAgICAgICAgICBF
ZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAg
LTg4OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2Rl
CiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWls
KSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0
LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJ
Qzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZm
bGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciht
X2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDUsNiArNzQ1LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVl
ID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMpOwogICAgICAg
ICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAg
ICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFy
YW1ldGVycygpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdl
ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CkBAIC04OTYsNyArODk3
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIAogICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAg
ICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2pp
dCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8s
IFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNo
dWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxl
cihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcgKzM5ODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9
IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwg
Y2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBt
X2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwg
QWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVzZWRSZWdpc3RlcnMsCiAgICAgICAgIEpTVmFs
dWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHBy
b3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogCkBAIC0xNDc3OCw3ICsx
NDc3OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BS
UmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgbV9qaXQuY29k
ZUJsb2NrKCksIGNhbGxTaXRlSW5kZXgpOworICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsKICAgICBu
b1Jlc3VsdChub2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzE3LDcg
KzQzMTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDog
SW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8SklUUHV0
QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygp
LCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNj
ZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRU
eXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlw
ZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwogCiAg
ICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVl
OwpAQCAtMTAxOTEsNiArMTAxOTEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxsb2NhdGVkQXJnczsgKytp
KQogICAgICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQoVmFsdWVS
ZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSkpOwogICAgICAgICAgICAgICAgICAgICBz
aHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgICAg
ICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVtUGFy
YW1ldGVycygpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNh
dmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9j
aygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50aWNOb2RlT3JpZ2luKTsKQEAgLTEwMzQ5LDEzICsx
MDM1MCwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdz
LmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgpKTsKIAogICAgICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1BcmdzOworICAgICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5z
ZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKIAogICAgICAgICAgICAg
ICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxs
TGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRV
cENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAg
ICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VE
YXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAg
ICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVm
ZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1
ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgICAgIH0pOwpAQCAt
MTA2OTgsNyArMTA3MDAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwg
R1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpO
bywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAg
ICAgICAgfSk7CkBAIC0xMDk3OSw3ICsxMDk4MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewot
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZd
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5l
cmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dl
bmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQy
LDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkKICAgICAgICAgcmV0dXJu
IGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQor
ICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMp
CisgICAgICAgICAgICBmaWVsZE5hbWVzLm1hcCBkbyB8ZmllbGROYW1lfAorICAgICAgICAgICAg
ICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBj
YXNlfSN7ZmllbGROYW1lWzEuLl19KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtXyN7ZmllbGROYW1lfSk7IH0iCisgICAgICAgICAgICBlbmQuam9pbigiXG4iKQorICAgICAg
ICBlbmQKKworICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcywgZmllbGRO
YW1lcykKICAgICAgICAgICAgIGZpZWxkcy5tYXAgZG8gfGZpZWxkLCB0eXBlfAogICAgICAgICAg
ICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAotICAgICAgICAgICAgICAgICAgICAiI3twcmVm
aXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSl9XG4je3By
ZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVy
dEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUsIGZpZWxkTmFtZXMpfVxuI3twcmVmaXh9fTsi
CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0
eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFt
ZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lcy5wdXNoKGZpZWxk
TmFtZSkKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7Zmll
bGROYW1lfTsiCiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmQuam9pbigiXG4i
KQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAgICAg
ICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkTmFtZXMgPSBbXQorICAgICAgICBwcmVmaXggPSAi
ICAgICAgICAiCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMocHJlZml4LCBAZmllbGRz
LCBmaWVsZE5hbWVzKQorICAgICAgICBmaWVsZHMgPSBmaWVsZHMgKyAiXG4iICsgZ2VuZXJhdGVP
ZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCiAKICAgICAgICAgaW5pdHMgPSBu
aWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAmJiAobm90IEBpbml0aWFsaXplcnMuZW1wdHk/
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTgsOCArNjk4LDEzIEBAIHZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXMKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUklu
Zm86OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5m
bzo6cmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qo
dm0sIGluZm8pOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0
aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIENhbGxMaW5rSW5mbyogaW5mbykKK3sKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNh
bGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyODIwMTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzE4LDYgKzE3MTgsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHZv
aWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsK
KyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBD
YWxsTGlua0luZm8qKTsKICAgICAKICAgICB2b2lkIG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgp
OwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCYXNlbGluZUpJ
VENvZGUuaCIKKworI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5o
IgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitK
SVRBZGRJQyogTWF0aElDSG9sZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE11
bElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUU3ViSUMq
IE1hdGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVROZWdJQyogTWF0
aElDSG9sZGVyOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7
IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorCit2b2lkIE1hdGhJQ0hvbGRl
cjo6YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCit7CisgICAgbV9hZGRJQ3MgPSBX
VEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICBtX211bElDcyA9IFdURk1vdmUob3RoZXIubV9t
dWxJQ3MpOworICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAgbV9z
dWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKK30KKworQmFzZWxpbmVKSVRDb2RlOjpC
YXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNv
ZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgLCBNYXRoSUNI
b2xkZXIoKQoreyB9CisKK0Jhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSgpCit7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9C
YXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisj
aW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy9jbGFzcyBKSVRB
ZGRJQzsKKy8vY2xhc3MgSklUTXVsSUM7CisvL2NsYXNzIEpJVFN1YklDOworLy9jbGFzcyBKSVRO
ZWdJQzsKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVuYXJ5QXJpdGhQcm9maWxl
Oworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgU2ltcGxlSnVtcFRh
YmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3MgTWF0aElDSG9sZGVyIHsKK3B1
YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKTsKKyAgICBK
SVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTXVsSUMq
IGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1YklDKiBhZGRKSVRT
dWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5h
cnlBcml0aFByb2ZpbGUqKTsKKworICAgIC8qCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2Vu
ZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUQWRkSUMqIGFk
ZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElD
KHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFt
ZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11
bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFy
eUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0K
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6
dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUq
IHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4K
KyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyBy
ZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKyAgICAqLworCitwcml2YXRlOgorICAgIEJh
ZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKKyAgICBC
YWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Cit9Owor
CitjbGFzcyBKSVRDb25zdGFudFBvb2wgeworcHVibGljOgorICAgIHVzaW5nIENvbnN0YW50ID0g
dW5zaWduZWQ7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAgR2xv
YmFsT2JqZWN0LAorICAgICAgICBDYWxsTGlua0luZm8sCisgICAgICAgIFN0cnVjdHVyZVN0dWJJ
bmZvLAorICAgICAgICBGdW5jdGlvbkRlY2wsCisgICAgICAgIEZ1bmN0aW9uRXhwciwKKyAgICB9
OworCisgICAgc3RydWN0IFZhbHVlIHsKKyAgICAgICAgLy8gT09QUzogTWFrZSB0aGUgcG9pbnRl
ciBwYWNrZWQuCisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgdm9pZCogcGF5bG9hZDsKKyAg
ICB9OworCisgICAgSklUQ29uc3RhbnRQb29sKCkgPSBkZWZhdWx0OworICAgIEpJVENvbnN0YW50
UG9vbChKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworICAgIEpJVENvbnN0YW50UG9vbCYg
b3BlcmF0b3I9KEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBDb25zdGFudCBh
ZGQoVHlwZSB0eXBlLCB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFudHMu
YXBwZW5kKFZhbHVlIHsgdHlwZSwgcGF5bG9hZCB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzLnNp
emUoKTsgfQorICAgIFZhbHVlIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50
c1tpXTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxWYWx1ZT4gbV9jb25zdGFudHM7Cit9Owor
CisKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMg
TWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKTsK
KyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisKKyAgICBCYWc8VW5saW5rZWRDYWxs
TGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxD
YWxsTGlua0luZm9zOyAvLyBPT1BTOiBtYWtlIHN1cmUgd2UgdmlzaXQgdGhlc2Ugc29tZWhvdy4g
T3IgYXNzZXJ0IHdlIGRvbid0IGhhdmUgdG8sIHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4K
KyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsK
KyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAg
ICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsK
KyAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25z
dGFudFBvb2w7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgp
IGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUoKQog
ewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhy
ZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1h
aW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBD
b21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9j
aywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyMDE2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hp
Y2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9pZCBD
Q2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNr
ZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29kZUJs
b2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVk
SW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkp
KTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNU
X09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3Jl
UHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0No
aWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2Rl
QmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNr
ZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxT
aXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihT
aGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxI
ZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAg
U2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAgLTcy
LDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEKICAg
ICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikpOwogfQogCisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6Omxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVl
UmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihT
aGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0
LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAg
c3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRP
RihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9yZVB0cihzY29w
ZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQ
YWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykp
KTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBj
YWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQ
UlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNp
dGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFj
a2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKK3Zv
aWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93
UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJs
b2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ss
IGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVy
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVkTGFt
YmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlv
bikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDE0
IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0aWxl
IHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Agb2YK
ICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxvZ1No
YWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2Ny
YXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3Bl
LCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVn
IHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJl
ZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0
ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworICAgIHZv
aWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1
ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRv
IHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2b2lk
IGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJS
ZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCShyZXZp
c2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVy
cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMo
Y29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxGcmFtZVNo
dWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNl
dExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBjYWxsZWVT
YXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07Ci0g
ICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9IGNv
ZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZ2lz
dGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5o
CShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMyBAQCBwdWJsaWM6
CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWduZWQgbnVtTG9jYWxz
IHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsK
KyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8gT24gb3VyIG1hY2hp
bmUgZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1hcDxWYWx1ZVJlY292
ZXJ5PiByZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVyIHsgSW52YWxpZEdQ
UlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7
CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNl
dExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwogfTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShyZXZp
c2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENhbGxGcmFtZVNodWZm
bGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkKICAgICAsIG1fb2xk
RnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMs
IG51bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBDYWxsRnJhbWU6
OmhlYWRlclNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25lZE9sZEZyYW1l
U2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAgICAgICArIHJvdW5kQXJn
dW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkp
CisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdp
c3RlcnMgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5udW1QYXJhbWV0ZXJz
KSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVycwogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLmFy
Z3Muc2l6ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUgLSBt
X2FsaWduZWRPbGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3RlclNl
dDo6YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNzZWRB
cmdzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykKIHsKICAgICAv
LyBXZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAgIGZvciAodW5z
aWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3ICs0
MjEsNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhCiAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFtZUJh
c2UpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9CiAgICAgICAg
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fbmV3RnJhbWVC
YXNlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5jb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAgIG1faml0LmFkZDMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBDYWxs
RnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2pp
dC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudFJlZ2lz
dGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVCYXNlLCBtX25ld0Zy
YW1lQmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVT
aHVmZmxlci5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBAQCBw
dWJsaWM6CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAgICAgIGRhdGEu
bnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2VkQXJncyA9IG1f
bnVtUGFzc2VkQXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9udW1QYXJhbWV0
ZXJzOwogICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxs
RnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5yZXNp
emUoYXJnQ291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQo
KTsgKytpKQpAQCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwZXJmb3JtU2Fm
ZVdyaXRlcygpOwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFY
IH07CisgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNp
b24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0
ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJbnRlcmZhY2VK
SVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51bGxwdHIpCiAg
ICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJs
b2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwgbV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhm
YWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAgIG1fcHJvZmls
ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9jayA9IGNvZGVC
bG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTkwLDggKzkz
LDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNraXBPcHRpbWl6
ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0
aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxv
Y2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lwT3B0aW1pemUu
YXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlv
bkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFt
ZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJh
bWUpOwpAQCAtMTEzLDE1ICsxMTYsMjEgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRj
aHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRk
cmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KQor
dm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCkK
IHsKKyAgICAvLyBPT1BTOiBUYWtlIGEgYm9vbGVhbiBvciBzb21ldGhpbmcgc2F5aW5nIGlmIHdl
IGNhbiBiZSBudWxsLgorICAgIGF1dG8gb2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJU
b1NldCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVy
VG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0lu
dmFsaWRhdGVkKSkpOworICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFy
UmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0VmFy
UmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIp
CiB7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52
YXJSZWFkT25seVdhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2Ny
YXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0
Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVh
bCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjphc3Nl
cnRTdGFja1BvaW50ZXJPZmZzZXQoKQpAQCAtMTI5LDcgKzEzOCw3IEBAIHZvaWQgSklUOjphc3Nl
cnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CkBA
IC0xODEsMjEgKzE5MCw0MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0
cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2Rl
QmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNT
RVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAg
ICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJl
c3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZF
eGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUg
PSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
SlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBG
dW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVE
YXRhVGFnKSwgcmVzdWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYg
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNv
bnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCBy
ZXN1bHQpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKK30KKwogdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogewogICAgIGlmIChKSVRJbnRlcm5hbDo6
dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxu
Iik7CisgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9wcm9maWxlZENvZGVCbG9jaywg
IlxuIik7CiAgICAgCiAgICAgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICBqaXRBc3NlcnRB
cmd1bWVudENvdW50U2FuZSgpOwogICAgIAotICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBhdXRvJiBpbnN0cnVjdGlv
bnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKKyAgICB1bnNpZ25lZCBp
bnN0cnVjdGlvbkNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpOwogCiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAKLSAgICBWTSYgdm0gPSBtX2Nv
ZGVCbG9jay0+dm0oKTsKICAgICBCeXRlY29kZUluZGV4IHN0YXJ0Qnl0ZWNvZGVJbmRleCgwKTsK
KworICAgIC8vIE9PUFM6IE1heWJlIG9ubHkgZG8gdGhpcyBpZiB3ZSBkaXNhYmxlIHNoYXJpbmcg
c29tZWhvdz8KKyAgICAvKgorICAgIFZNJiB2bSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnZtKCk7
CiAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmlu
aGVyaXRzPFByb2dyYW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9k
dWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0pKSkgewogICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0
aGlzIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4
YWN0bHkgb25jZS4KICAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxp
ZCBvdGhlcndpc2UuIFdoZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8KQEAgLTIz
Niw2ICsyNjUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgKi8KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhh
dmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewpA
QCAtMjc4LDggKzMwOCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAog
ICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRp
b24oKSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7
CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAg
ICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCkt
PmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29k
ZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVy
KGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
fQpAQCAtNTI3LDcgKzU1Nyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0g
ICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIAogICAg
ICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJh
c2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBh
dCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CkBAIC01NDUsOCArNTc1LDggQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewogICAgICAgICAgICAgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJv
YmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cg
Iiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwg
IiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNjc0LDU1
ICs3MDQsNTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgog
fQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdp
c3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNl
dE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50
UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0
ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQor
CiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2Nv
ZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgLy8gT09QUzogTWF5YmUgdGhpcyBzaG91
bGQgYmUgZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJsb2NrPworICAgIERGRzo6Q2FwYWJpbGl0eUxl
dmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAg
c3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAgICBt
X2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGlu
ZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5D
b21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAg
ICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1p
dFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7Ci0gICAgY2FzZSBHbG9i
YWxDb2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToKLSAgICBjYXNlIEV2YWxDb2RlOgotICAgICAg
ICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAgIC8vIFdlIGNvdWxkIGhhdmUg
YWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFi
bGUgY2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KLSAg
ICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShs
ZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29kZUJsb2NrKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dp
dGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9j
b2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxp
bmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVK
SVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVt
cFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7
Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1
bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tl
cikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxl
PihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7
CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1w
VGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3
aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3dpdGNoSnVt
cFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9j
ay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgICAgIGlmIChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygp
KQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3Ry
aW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRp
b25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKQotICAgICAgICBtX2Rpc2Fz
c2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX2NvZGVCbG9jayk7CisgICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVy
KCkpKSkgeworICAgICAgICAvLyBPT1BTOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBvZmYgdW5saW5r
ZWQgY29kZSBibG9jaworICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlz
YXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICB9CiAgICAgaWYgKFVOTElLRUxZ
KG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpIHsKKyAgICAgICAgLy8gT09QUzogYnVpbGQg
cHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiB1bmxpbmtlZCBjb2RlIGJsb2NrCiAgICAgICAgIG1f
Y29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAgICAgICAgIG5ldyBQcm9maWxlcjo6Q29tcGls
YXRpb24oCi0gICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1
cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAorICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVy
Qnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fcHJvZmlsZWRDb2RlQmxvY2sp
LAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpCYXNlbGluZSkpOwotICAgICAgICBtX2NvbXBp
bGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
LCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNv
ZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwog
ICAgIH0KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxh
YmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwpAQCAtNzQyLDExICs3NzMsMTIg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBub3Ao
KTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgIGlmICht
X3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAg
ZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKCk7CiAKICAgICBMYWJlbCBiZWdpbkxh
YmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAgaW50IGZyYW1lVG9wT2Zm
c2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUgPSAtZnJhbWVUb3BPZmZzZXQ7
CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9mZnNldCksIGNhbGxGcmFtZVJlZ2lz
dGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxvdzsKQEAgLTc1NywxNiArNzg5
LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtb3Zl
KHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0U2F2ZUNhbGxl
ZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKyAg
ICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOwogCi0g
ICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgeworICAgIGlm
IChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAg
ICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1
bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAg
ICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAmJiAoIW1fdW5saW5rZWRDb2RlQmxvY2stPmlz
Q29uc3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAx
KSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVkVmVj
dG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIpOworCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAv
LyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1t
eSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25z
aXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZh
bHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYm
ICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXND
b25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJ
bmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArODEzLDEyIEBAIHZvaWQgSklUOjpj
b21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAgICBsb2FkMzIoQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwog
I2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9j
ay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAg
ICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50
ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNr
ZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFJFTEVB
U0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmlsZWRDb2RlQmxvY2stPmppdFR5
cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQogICAgICAgICBtX3ZtLT5q
aXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgKnRoaXMpOwpA
QCAtNzk5LDI0ICs4MzUsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xs
YmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVC
bG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFj
a09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCByZWdUMCk7CiAK
ICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2UgbmV2ZXIgcmVxdWly
ZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fY29kZUJsb2Nr
LT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkg
PT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgeworICAgIGJvb2wgcmVxdWly
ZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpICE9IDE7
CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
ICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hlY2sgPSBsYWJlbCgp
OwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxvY2stPm1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAg
ICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShy
ZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkpOwogCiAgICAgICAgIGxv
YWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0
aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMy
KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtUbyhiZWdpbkxhYmVs
LCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwog
CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29kZUJsb2NrLT5pc0Nv
bnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2Fs
bEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgYXJn
dW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09u
RXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlv
bkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgYXJndW1lbnRH
UFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCks
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04MzksNyArODc4LDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBtX2Rpc2Fz
c2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZh
dWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxM
aW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6
OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6
OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fdW5saW5rZWRD
b2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKICAg
ICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4OTcsOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAg
ICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6Oklt
bWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcjogewotICAgICAg
ICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgbGlu
a2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0
clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2VkVGFibGUubV9icmFu
Y2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0
ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEsOCArOTEwLDggQEAg
dm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6
OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAg
ICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxp
bmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlEZWZhdWx0ID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVP
ZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yIChhdXRvJiBs
b2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMoKSkgewogICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNoT2Zmc2V0OwpAQCAt
OTA2LDMyICs5NDUsMzUgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7CiAgICAgfQogCi0gICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVD
YWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVs
QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRz
LCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5VmFscywgcGF0
Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIHBhdGNo
QnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2Vz
LCBwYXRjaEJ1ZmZlcik7CisgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2VuZXJh
dG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAgICAg
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1f
Z2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMpOworICAgIGZp
bmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlWYWxzKTsKKyAg
ICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFscyk7
CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlWYWxz
KTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3By
aXZhdGVCcmFuZEFjY2Vzc2VzKTsKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDog
bV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpj
b21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlv
bnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlv
bikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbklu
Zm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGluZm8uZG9uZUxvY2F0aW9uID0gcGF0
Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9u
ZUxvY2F0aW9uKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIEpJVENvZGVNYXBCdWlsZGVyIGpp
dENvZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0g
MDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsK
LSAgICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKLSAgICAg
ICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29k
ZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxvY2stPnNldEpJ
VENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKSk7CisgICAgSklUQ29kZU1hcEJ1
aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0
KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKKyAgICAg
ICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zm
c2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRl
Y29kZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERp
c2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk4MiwzNyBAQCB2b2lkIEpJVDo6bGluaygpCiAg
ICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7CisgICAgICAgIC8vIE9P
UFM6IG1ha2UgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91dCB1bmxpbmtlZCBDQj8KICAgICAg
ICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKQogICAgICAg
ICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21waWxhdGlvbi5nZXQo
KSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFk
ZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CisgICAgICAgIG1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9maWxlZENvZGVCbG9j
aywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFw
QnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9
IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAgCisgICAgLy8gT09QUzogTWFrZSBhIHZlcnNp
b24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBVbmxpbmtlZENvZGVC
bG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUo
CiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUg
SklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJCYXNlbGluZSBK
SVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wcm9maWxl
ZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2pp
dENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVj
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3
IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENv
ZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2pp
dENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3Mp
OworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1vdmUobV91bmxpbmtl
ZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3Zl
KG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2Rl
LT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOworICAgIG1faml0
Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2RlLT5tX2NvbnN0YW50
UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOwogCiAgICAgaWYgKEpJVEludGVybmFsOjp2
ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBb
JXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFy
dCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFn
Z2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBh
dCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVt
b3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+
ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxp
emVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRo
cmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNDb21w
aWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICsxMDIxLDIxIEBAIENvbXBpbGF0aW9uUmVz
dWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRo
cmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5z
aHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7Ci0g
ICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZF
eGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIg
PSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8gRklYTUU6IDxy
ZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IG1f
Y29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0
KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9CisgICAgLy8gT09Q
UzogRG9uJ3QgdGhpbmsgdGhpcyBzaHJpbmsgaXMgcmVhbGx5IGRvaW5nIGFueXRoaW5nIGFueW1v
cmUuIFZlcmlmeS4KKyAgICAvL3sKKyAgICAvLyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgIC8vICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0Zp
dChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CisgICAgLy99CiAK
KyAgICAvLyBPT1BTOiBtX3BjVG9Db2RlT3JpZ2luTWFwIHNob3VsZCBsaXZlIG9uIEJhc2VsaW5l
SklUQ29kZSBmb3IgYmFzZWxpbmUgY29kZWJsb2Nrcy4KICAgICBpZiAobV9wY1RvQ29kZU9yaWdp
bk1hcCkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUo
bV9wY1RvQ29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5zZXRQ
Q1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKIAogICAgIG1f
dm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+YWRkKAog
ICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgpKSAvCi0gICAgICAg
IHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOwor
ICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0
aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLnJl
bGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGlu
ZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIENvbXBpbGF0
aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTA0NywxMSBAQCBzaXplX3QgSklUOjpjb2Rl
U2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZlci0+c2l6ZSgpOwogfQogCi1Db21w
aWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVm
Zm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBkb01haW5UaHJl
YWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBjb21waWxlQW5kTGlua1dpdGhvdXRG
aW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKCk7Cisg
ICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVCbG9jayk7CiB9CiAKIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKQEAgLTEwNDIsMTggKzEwOTEsMjgg
QEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwogICAgICAgICBtX3Zt
LT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQcmVwYXJpbmcg
Zm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0
ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdp
c3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgQVNTRVJU
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSA9PSBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7CiAKICAgICBy
ZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJPZmZzZXQoY29kZUJs
b2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5S
ZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVC
bG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9m
ZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJldHVybiB2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKSAtIDEp
Lm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxv
Y2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+
IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRz
PiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWwsIGV4cGVjdGVk
KSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIl
c1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+
KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAorI2luY2x1ZGUgIkJhc2Vs
aW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbW1vblNs
b3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgpAQCAtNDQsNiArNDUsNyBA
QAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0
b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5o
IgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRl
ci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTE0OSwxNCArMTUxLDE0IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2Fs
bExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5m
b0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxl
ZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0
ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBw
dWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhD
YWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBKSVRUaHVua3M7CkBAIC0xNzEsNiArMTczLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUg
YWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBp
bnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNl
ID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVC
bG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0
ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTE3OCwyOCArMTgyLDMz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZh
Y2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBm
aW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6
ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29u
c3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUo
KTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQp
LnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2Rl
QmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7
CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50
Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJl
Z2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21waWxlVGlt
ZSgpOwogCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIgPSBM
TEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSOworICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzX2NvbnN0YW50c0dQUiA9IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSOworCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAgICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCk7CiAgICAgICAgIHZvaWQgbGluaygpOwotICAgICAgICBDb21waWxh
dGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgICAg
IENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKENvZGVCbG9jayosIEpJVENvbXBpbGF0
aW9uRWZmb3J0KTsKIAogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3
aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCkBAIC0yMjMsNiArMjMyLDMy
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShj
b25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShj
b25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNv
bnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBz
dG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0
KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQg
c3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBt
YXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zm
c2V0LCBHUFJSZWcpOworCisgICAgcHVibGljOgorICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1
bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgIHByaXZhdGU6CisgICAgICAgIHZv
aWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tD
b25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisKKyAgICAgICAgdm9pZCBlbWl0UHV0
Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1QwKTsKKwogICAg
ICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRvSGFuZGxlcikKICAgICAgICAgewog
ICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpAQCAt
MjU4LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpv
cGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgJiYgT3A6Om9wY29k
ZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25z
dGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5h
YmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8
IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6
Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0lu
Zm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJv
b2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYs
IFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21w
aWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4NywxNCArMzIyLDE1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRX
cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJh
cnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIp
OworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAogICAgICAg
ICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBh
bmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVl
UHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShW
YWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1l
dGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcpOwot
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOworICAgICAgICAvL3ZvaWQgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Y29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRl
Y29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgSlNWYWx1
ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVl
UHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRh
dGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsK
QEAgLTMwNyw2ICszNDMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2Zp
bGUqLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9m
aWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGNvbnN0IEJ5dGVjb2RlJiwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hH
UFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgcHRyZGlmZl90
LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAg
LTU5Miw3ICs2MzIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190
cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02MjYsMTQgKzY2NSwxNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNp
Z25lZCk7CiAKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwg
QWNjZXNzVHlwZSk7Ci0gICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdp
c3RlciBkc3QsIEFjY2Vzc1R5cGUpOworICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5LCBBY2Nlc3NUeXBlKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJD
b21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9u
Q2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFZh
clJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUpOworICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcpOworICAgICAgICB2
b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUik7
CiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZp
cnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWdu
ZWQgZGVwdGgpOwogICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKQEAgLTY0NSw3ICs2ODQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAg
ICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0
cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0
Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpOwor
ICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1Nl
dCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogICAgICAgICB2b2lkIGVt
aXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1p
dFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CkBAIC02NTQsNiArNjkzLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVI
ZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgICAgIGJvb2wg
aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFu
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFu
dEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50Q2hh
cihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjk1LDI2ICs3MzUsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsK
ICAgICAgICAgfQogCi0jZGVmaW5lIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJl
c29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYp
OwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9H
RU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQotICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRG
cm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKLQotICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gTW9kdWxl
VmFyIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gZW1pdCBpbmxpbmUgdGhhbiB1c2Ug
YSB0aHVuay4KLSAgICAgICAgICAgIC8vIFJlc29sdmVkQ2xvc3VyZVZhciBiZWNhdXNlIHdlIGRv
bid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9wX3Jlc29sdmVfc2NvcGUuCi0gICAgICAgICAgICBy
ZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUg
PT0gTW9kdWxlVmFyKTsKLSAgICAgICAgfQotCi0jZGVmaW5lIERFQ0xBUkVfUkVTT0xWRV9TQ09Q
RV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNH
ZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfUkVT
T0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVS
QVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2Vu
ZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05h
bWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVU
eXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZN
Jiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CiAK
ICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFs
dWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CkBAIC03
NTksMTAgKzc4MSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAg
ICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChBZGRy
ZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYs
IEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29k
ZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9p
ZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxl
KGNvbnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAg
ICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4u
LiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlv
blR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIwLDIwICs4NDIs
MjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9w
ZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAg
ICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNS
ZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlv
biwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAg
ICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShieXRlY29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1l
Li4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVu
YW1lIEJ5dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90
PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0gICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgdGFy
Z2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgdGFy
Z2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5cGU+KHRh
cmdldCwgYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRkcmVzcyhHUFJJ
bmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKGJ5dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQp
LCByZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0
aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOCwyNSArOTQwLDIwIEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6
ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRp
bWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAg
ICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFBy
b2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVy
biBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRo
IHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNl
IGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGlu
ZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGVtaXRNYXRlcmlh
bGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgdm9pZCBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29t
cGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0
aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNp
c3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNl
IHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZh
bHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQ
dXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9w
PgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9w
KTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtOTYzLDkgKzk4
MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9z
bG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKLSAg
ICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7Ci0g
ICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9jb3BpZWRBcml0
aFByb2ZpbGVzOwotCiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwogICAgICAg
ICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjazsKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC05OTksMTEgKzEwMTMsMjQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0
aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRl
OwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJl
T3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsK
ICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAg
ICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAgICAgICAgQ29kZUJsb2Nr
KiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBVbmxpbmtlZENvZGVC
bG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKworICAgICAgICBNYXRoSUNI
b2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENv
ZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAgICAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgQmFnPFVubGlua2VkQ2Fs
bExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1f
ZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
PiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFi
bGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRh
YmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAgc3RydWN0IE5vdEFDb2Rl
QmxvY2sgeyB9IG1fY29kZUJsb2NrOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lv
biAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkg
fHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRH
UFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMjAsNyAr
MzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAg
ICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFpl
cm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzc1LDggQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKQEAgLTU3Myw3ICs1NzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3co
Y29uc3QgCiAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQo
b3AyLCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CiAKQEAgLTcxNyw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKGNv
bnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRO
ZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAg
ICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMp
OwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRp
b25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1p
dE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJh
dGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAgLTg5OSw4
ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZv
aWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFBy
b2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5r
ZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
QWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3Mu
YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRk
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihh
ZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0g
bWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAg
ICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQ
Uiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93
Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUsMTAg
KzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAg
ICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9h
ZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQ
UiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNl
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwxMyArMTA2
MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAjZW5kaWYK
IAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJv
ZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2Zp
bGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBz
cmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRo
UHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
cmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChy
ZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNy
Y1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBy
ZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRI
X0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwxMyAr
MTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAjZW5k
aWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0
aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQ
cm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3
aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiks
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
bGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0
PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpf
SklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQs
IGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFC
TEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTEx
NjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioK
IAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAgICBp
ZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5h
cnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tX3Byb2ZpbGVJ
bmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJh
bmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNv
ZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjIwLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9t
dWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVs
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyog
bXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5h
cnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tX3Byb2ZpbGVJ
bmRleCk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFyaXRo
UHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rp
b24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwog
fQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJ
bnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
U3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFN1Yj4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUU3ViSUMqIHN1YklD
ID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlv
blRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElD
RmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIs
NyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAgICAgc3RvcmVQ
dHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJh
bWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IHJlZ1QxLCByZWdUMik7CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDAp
OwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zMjQs
NyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1
dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDcgKzM0MSw2IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xv
d1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Uo
Y29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRl
ICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUg
IkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNp
bmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgog
I2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC00NCw3ICs0NSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQo
Y29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGlu
YXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxS
ZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDE4ICs1NCwxOCBAQCBzdGQ6OmVuYWJsZV9p
Zl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlE
ICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxf
Y2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2Rl
LCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2lu
dCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5n
VGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50
KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNl
dEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCisKICAgICBpZiAo
T3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0
ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAg
ICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0g
ICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0YSwgY2hlY2twb2lu
dCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0
YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5r
SW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJh
eVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyArNzksNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAog
ICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9w
X2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMK
ICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxs
TGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29k
ZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtOTEs
NyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAg
ICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRz
OwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZv
clZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIs
IGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAgICBj
YWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lz
dGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJl
ZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVy
blZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0
YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEwMywxNiBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9u
U2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJh
dGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0
dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1QzLCBy
ZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRP
ZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gz
MihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNz
T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2FkQ29uc3RhbnQoY2Fs
bExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2Fs
bExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdU
Myk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7
CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRP
Zk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RCaWdnZXN0Lmxpbmso
dGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEzMSwx
NiBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRlbXBsYXRlPD4KIGJv
b2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7Ci0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9y
ZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJG
cmFtZU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IGFyZ3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5r
ZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1Qy
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KHJlZ1QwKSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52
YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0
eShyZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwog
CkBAIC0xNDgsNyArMTUyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNv
bnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0g
bV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkp
OworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5m
bzo6Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1f
YXJndjsKQEAgLTE1Niw0MyArMTYwLDQ3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6
ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAt
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwo
Km1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmlu
Z0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwo
Y29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKLXsKK2Jvb2wgSklUOjpjb21waWxl
VGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50KSB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0
ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2Rl
LCBDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQorYm9vbCBK
SVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRD
YWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewotICAgIENhbGxGcmFtZVNo
dWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBi
eXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJ
bmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQorICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBtYWtl
VW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOworICAgIHNodWZmbGVEYXRhLT5udW1QYXNz
ZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAgIHNodWZmbGVEYXRhLT5udW1QYXJhbWV0ZXJz
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworICAgIHNodWZmbGVEYXRh
LT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworICAgIHNo
dWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLmFy
Z3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1ZmZsZURhdGEtPmFyZ3MucmVzaXpl
KGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2Rl
Lm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAgICBz
aHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFj
ZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAgICAgICAgIERhdGFG
b3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAgICAgIFZhbHVl
UmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotICAgIHNodWZmbGVEYXRhLnNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7Ci0gICAgaW5mby0+c2V0RnJhbWVT
aHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVl
UmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgIHNodWZmbGVEYXRhLT5z
ZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGlu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlz
LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgbG9hZENvbnN0YW50KGNh
bGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1Qy
LCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgKnNodWZmbGVEYXRhKS5w
cmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMp
OworCisgICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CisgICAgaW5mby0+ZnJhbWVTaHVm
ZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAgICAgYXV0byBkb25lTG9jYXRpb24g
PSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
ZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjE4LDE0ICsyMjYsMjUgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxl
ciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0
b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KLSAgICBDYWxsTGlu
a0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwp
Ci0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8p
OworCisgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0gVUlOVF9NQVg7CisgICAgaWYgKG9w
Y29kZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBpbmZvID0gbV91bmxpbmtlZENhbGxz
LmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2Rl
SUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAgICAgQVNTRVJUKG1f
Y2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Cisg
ICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5saW5rZWRD
YWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50OworICAgIH0K
KyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAogICAgIC8v
IFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBB
cmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29k
ZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1aW50MzJf
dCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwog
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVl
LgpAQCAtMjM0LDE2ICsyNTMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5z
dHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlu
a0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVG
b3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChD
YWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChjb21waWxlVGFpbENh
bGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBpZiAoY29tcGlsZVRh
aWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFudCwgcmVnVDIp
OwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0
aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9
IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCBy
ZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAg
ICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9KTsKQEAgLTI1
MywxMyArMjY4LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1p
dEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZ
ZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgp
OwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
IAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCArMjg4LDIwIEBA
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7
CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlzLCByZWdU
Mik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxD
YWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcgKzQxMCwzMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1
bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmlt
cGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5
cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQpAQCAt
NDE2LDEwICs0NDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25z
CiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAg
ICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsKICAgICBu
b3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBAIC00MzIs
MTkgKzQ1OCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAg
ICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJh
d0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRlcmF0b3JH
UFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBhdXRvIGRv
bmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVz
dWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9
CkBAIC00NTIsNyArNDc2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKICAgICAg
ICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5hcnJvdzog
cmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0OTMsNzcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1bXAgZmFz
dENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7
CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0ZUFkZHJl
c3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAgbG9hZDhG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJ
dGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5N
b2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhf
dD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9NZXRhZGF0
YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVy
YXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rl
cygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAg
IC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAg
ICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJl
Z1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3
aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2
YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRj
aDsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3Vs
dDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0
R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09
IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
KTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1
ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAg
ICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2
ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJl
Z3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2Vy
dmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5
cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAg
ICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQ
UiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJl
Z3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAg
ICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgICAg
ICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lz
dGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJy
YW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxHUFIp
OworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3Vs
dEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsK
LSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1w
bCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJ
bmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1Zh
bHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAogICAgICAgICBp
dGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1NzcsNTUgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBpbGVPcENhbGxT
bG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpzY3JhdGNoOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25l
VlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSBy
ZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlz
dCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0
ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQg
PSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAg
ICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0
LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAotICAg
ICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5v
bkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRv
bmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwg
YXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQ
UjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVn
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwor
CisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
KworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywg
ZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNr
cG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAgfQog
CiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BSUmVn
IGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRl
bnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0g
ICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0g
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBp
dGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIy
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5o
CShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKKwogbmFtZXNwYWNlIEpT
QyB7CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtMTU5LDEwICsxNjAsMTAgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAgICB7Ci0gICAgICAg
IGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNlRGF0YUlDSW5P
cHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgyMDE2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIklu
bGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBzdGF0
aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2ppdFR5
cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1YkluZm8g
PSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2Rl
T3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxvY2sg
PyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFn
ZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwog
CiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3
ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIExp
bmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0YXJ0
ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5sb2Nh
dGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0
aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zbG93UGF0
aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgp
OworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKyAg
ICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgaml0LmNhbGwo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9kb25lID0gaml0
LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFs
dWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0xMTAsNyArMTE4LDcgQEAgSklU
R2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcgogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVS
ZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKICAg
ICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxs
U2l0ZSwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BS
KQotICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJsb2Nr
LT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCisgICAgLCBtX2lzTGVuZ3RoQWNj
ZXNzKGNvZGVCbG9jayAmJiBwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJsb2NrLT52bSgpLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZS5w
YXlsb2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNpb24g
MjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEpJVCkK
IAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25WYWxpZGF0
aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUu
aCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCkBAIC0zOCwxMSArMzksMTE0IEBAIG5hbWVzcGFjZSBK
U0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNsYXNzIENhbGxTaXRlSW5kZXg7CiBj
bGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK3N0
cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUg
OiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCitzdHJ1Y3QgQmFzZWxp
bmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5m
bzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzIHsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBH
UFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BS
SW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1Qx
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cisg
ICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9jayBhbmQgaW5pdGlh
bGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KKyAgICBzdGF0aWNfYXNz
ZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGlj
X2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7
CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjphcmd1bWVu
dEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG8gPSBHUFJJbmZvOjphcmd1
bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBH
UFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gy
ID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOwor
ICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQ
UkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJ
bmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnMgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHRo
aXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5SWRSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2Ug
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6
cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJl
Z1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2Ug
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBicmFuZCA9IEdQ
UkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9CkBA
IC02MiwxNSArMTY2LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKAogICAgICAgICBM
aW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1
ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0
YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJ
VCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2VkU3R1YkluZm8geyBudWxscHRy
IH07CisgICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBwcm90ZWN0ZWQ6Ci0gICAgQ29k
ZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0VHlwZTsKICAgICBTdHJ1Y3R1
cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgorICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQYXRo
Q2FsbDsgLy8gT09QUzogbWFrZSByZXBvcnRDYWxsIHBhc3Mgc29tZXRoaW5nIGluIHdlIGNhbiB1
c2UgZm9yIHRoZSBub24tQ1RJIHRodW5rcyBidWlsZHMuIAogfTsKIAogY2xhc3MgSklUQnlJZEdl
bmVyYXRvciA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CkBAIC05OCw3ICsyMDgs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdz
IG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKK3B1YmxpYzoK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTEzMiw4
ICsyNDIsOCBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0gZGVmYXVsdDsK
IAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUs
IENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLAotICAgICAgICBKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1v
ZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBD
YWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxl
SWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUs
IEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsK
ICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKICAgICAK
QEAgLTE2MywxMSArMjczLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRo
KE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwog
ICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9z
dGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsK
IH07CiAKQEAgLTE5MSw4ICsyOTksNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFz
dFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQ
YXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdl
bmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVt
cCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNDUsNiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0
Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI3Nyw4ICszNzksNiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwg
TGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVt
cCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSArNDAyLDkgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRl
OgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3Jlc3VsdDsKIAot
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQ
YXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzMwLDggKzQyOCw2IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
IAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklU
Ojppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJl
dHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91Ymxl
KCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
bnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAo
IXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAgICAgICAgLy8g
T09QUzogZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBhbGwgbGluayB0aW1lIGNvbnN0YW50cyBh
cmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBK
SVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIEFTU0VS
VChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50
KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRD
b25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9D
YWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBA
IC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0
aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3Qp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhm
dW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1
ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVH
UFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2FsbDsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRh
JiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBs
YXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7
CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVH
UFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAj
ZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJl
dHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BS
KSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RK
U0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lz
dGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQorICAg
IGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQog
CkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nh
c2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVCht
X3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0No
ZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAK
ICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRlY29kZUluZGV4
LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VU
b05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hl
Y2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2Rl
SW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xk
IHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAg
QVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0No
ZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlv
bkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJ
bmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNrcG9pbnRM
YWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgsMzQgQEAgQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICBy
ZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmlu
ZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3Ro
KCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKLXsKLSAgICBBU1NF
UlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKLQotICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNv
bmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QK
LSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQodmFsdWUuZ3By
KCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UKLSAgICBFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3Iq
Pih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIo
KSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQ
UigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKLX0KKyAgICBpZiAoIXNyYy5p
c0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0
cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Cit9
CisKKy8vIE9PUFMKKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKy8veworLy8gICAg
QVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CisvLworLy8gICAgLy8gV2UncmUgaW4gYSBz
aW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBh
IGRpcmVjdAorLy8gICAgLy8gc3RvcmUuCisvLyNpZiBVU0UoSlNWQUxVRTY0KQorLy8gICAgc3Rv
cmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyNlbHNlCisvLyAg
ICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vICAgIHN0b3Jl
MzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOworLy8g
ICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOworLy8j
ZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVl
UHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2Zp
bGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQogICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzIzLDI0ICszNTMsMjkgQEAg
aW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAg
IGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7CisKKyAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSB2
YWx1ZVByb2ZpbGVGb3IoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZh
bHVlUHJvZmlsZS5tX2J1Y2tldHMpOworICAgIC8vIE9PUFMKKyAgICAvL3B0cmRpZmZfdCBvZmZz
ZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJs
ZShieXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVPZmZzZXRGb3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7
CisgICAgLy9zdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG9mZnNl
dCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJl
ZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJl
Z3MocmVzdWx0UmVnKSk7Ci19CisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKKy8vewor
Ly8gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJl
c3VsdFJlZykpOworLy99CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVn
IHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgR1BSUmVn
IHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1Zh
bHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCkBAIC0zNjAsNiArMzk1LDIx
IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVcKICAgICB9CiB9CiAK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90
IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2Ny
YXRjaEdQUikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CisgICAgICAgIGxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2NyYXRj
aEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKKyAgICB9Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxs
R1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9m
aWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxs
R1BSLCBzY3JhdGNoR1BSKTsKK30KKwogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3Bl
cmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJuIGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKQEAgLTM4MCw3ICs0MzAsNyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAg
ICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKKyAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVz
dGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAgICAg
bG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKQEAgLTQ5Niw3ICs1NDYsNyBAQCBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0CiAKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0g
ICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93
bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUwNiw3ICs1NTYsNyBAQCBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lz
dGVySUQgdGFnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsK
KyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50
KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01
MTQsMTEgKzU2NCw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMK
ICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50
KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVh
bFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCiB7
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKQEAgLTU0NCwxMSArNTg5LDE3
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBBU1NFUlQo
bV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1
cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlz
IHNldC4KIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5p
c051bWJlcigpKQotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KHZhbHVlKSksIGRzdCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgc3dpdGNoIChtX3VubGlua2Vk
Q29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpKSB7CisgICAg
ICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICBjYXNl
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAg
ICAgIG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbG9hZENv
ZGVCbG9ja0NvbnN0YW50KHNyYywgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU2NiwxMSArNjE3LDYgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENv
bnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0
YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0
KSk7CkBAIC01OTUsNyArNjQxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93Q2FzZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJl
ZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02
MzcsMzAgKzY4Myw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAK
IHsKICAgICBpZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBt
X2NvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5
dGVjb2RlKQotewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7
IC8vIEhhc2hNYXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0g
bV9jb3BpZWRHZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29w
aWVkR2V0UHV0SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9y
LT52YWx1ZSk7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChr
ZXksIGdldFB1dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJv
ZmlsZSBKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1
aW50NjRfdCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkg
KyAxKSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQp
OwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwot
ICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAg
IHJldHVybiBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJv
ZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAg
ICBtX2NvcGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1
cm4gYXJpdGhQcm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxp
bmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBA
IC02ODEsNiArNzA0LDYxIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxP
cFAKICAgICByZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRh
KGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkK
K3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9j
ay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwg
cmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
c2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhzX21l
dGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRh
dGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0
YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQp
Cit7CisgICAgbG9hZDgoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2Nr
LT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBy
ZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRl
Y29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBl
IHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAg
c3RvcmU4KHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2st
Pm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjpzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRh
dGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRh
YmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0
KQoreworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRh
dGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgc19tZXRhZGF0
YUdQUiwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvbnN0YW50
KEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY29uc3RhbnRJbmRleCwgR1BSUmVnIHJlc3VsdCkK
K3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19jb25zdGFudHNHUFIsIHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oY29uc3RhbnRJbmRleCkgKiA4KSwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6bG9hZEdsb2JhbE9iamVjdChHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRDb25z
dGFudChtX2dsb2JhbE9iamVjdENvbnN0YW50LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50
LCBHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3Rh
bnQoKSk7CisgICAgLy8gT09QUzogTWF5YmUgbWFrZSB0aGlzIG1vcmUgZWZmaWNpZW50PworICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFudHNW
ZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7CisgICAgbG9hZDY0KEFkZHJlc3MocmVzdWx0LCBjb25z
dGFudC50b0NvbnN0YW50SW5kZXgoKSAqIHNpemVvZihKU1ZhbHVlKSksIHJlc3VsdCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNo
KGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFt
ZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNo
T2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZD
YXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTk5Nyw3ICs5OTcsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAKICAgICAvLyBjcmVhdGUganVt
cCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVt
ZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRj
aEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVj
b3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVj
b3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtl
ZFRhYmxlKTsKIApAQCAtMTAyNCw3ICsxMDI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2NoYXIoY29uc3QgSW5zdAogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBk
ZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtl
ZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBT
aW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5
dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAg
ICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwNDIs
NyArMTA0Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KIAog
ICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0
aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRl
Y29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAgIGxp
bmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDYgKzQzLDggQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJW
aXJ0dWFsUmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgor
CiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC01NCwxMSArNTYsMjIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgp
KSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgc3RvcmU2NChU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7Ci0g
ICAgICAgIGVsc2UKKyAgICAgICAgLy8gT09QUzogbW9zdCAiT3RoZXIiIFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbiBjb25zdGFudHMgY2FuIGp1c3QgYmUgZ3JhYmJlZCBmcm9tIHRoZSBVbmxpbmtl
ZENvZGVCbG9jay4gSXQncyBqdXN0CisgICAgICAgIC8vIGEgY291cGxlIHR5cGVzIHRoYXQgY2Fu
J3QuIENyZWF0ZSBhbiBhYnN0cmFjdGlvbiBmb3IgdGhhdC4KKworICAgICAgICBzd2l0Y2ggKG1f
dW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykp
IHsKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6CisgICAg
ICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6IHsKKyAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwog
ICAgICAgICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVz
c0Zvcihkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7CisgICAg
ICAgICAgICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NywzNyArMTAw
LDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklU
OjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09i
amVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNG
aW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
LSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJl
bnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVn
VDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklE
IHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1Qz
OwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0
ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09i
amVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2Nh
dG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywg
c2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJl
Zywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCpt
X3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2Nh
dG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkg
KyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJl
UmVnKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRy
dXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVn
LCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBi
dXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1
Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcp
OworICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcp
OworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9
IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmls
ZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAg
ZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzE0Miw4
IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRv
bid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAg
ICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90
b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVh
bCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwg
bV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKIApAQCAtMTU0LDMwICsxNjYs
MzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5k
cyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJz
LgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUg
d2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0Lgot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQ
UiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm90b0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAg
Y29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6
OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBwcm90
b0dQUik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwg
bXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3lt
Ym9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwg
dmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOwogCiAgICAgSklUSW5z
dGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwK
ICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdU
MSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDUsCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNj
cmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgcmVzdWx0R1BSLAorICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgcHJvdG9HUFIsCisg
ICAgICAgIHN0dWJJbmZvR1BSLAorICAgICAgICBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6
OnNjcmF0Y2gxLCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gyKTsKKworICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZv
cy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNl
T2Y7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsK
LSAgICAKKwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMTkyLDE0
ICsyMTIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAg
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwot
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9m
T3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQ
UkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJh
dGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdH
UFIwLCByZWdUMiwgcmVnVDEpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCBy
ZWdUMSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm8g
PT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6dmFsdWUgPT0gYXJndW1lbnRHUFIyKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2Vs
aW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG8gPT0gYXJndW1lbnRHUFIzKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRp
b248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3Vs
dFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50
R1BSMyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVj
dGlvbiopCkBAIC0yNDAsNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3Vu
ZGVmaW5lZChjbwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihF
cXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM3NCw3ICszOTMsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygmUmVnaXN0ZXJB
dE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiAjZWxzZQpAQCAtMzgzLDkgKzQwMiw5
IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYp
CiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5j
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNh
dmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdp
c3RlcnMoKSk7CkBAIC00MTEsNyArNDMwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0
aXZlKGNvbnN0IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9r
ZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NTIs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6
OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25O
YW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBh
cmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1l
LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ4NCwxMCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQ
UlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZG
YWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2Jh
bE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVn
cyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vs
c2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNTAxLDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1NDAsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3Qs
IGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBv
biB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Mo
cmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7
CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApA
QCAtNTQzLDcgKzU2NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0
cnUKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0
OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs2MDMs
MTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6
OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1
ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQ
b2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tD
b25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIHN0
b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2NDQsMTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFs
T2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCks
IEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1Qx
LCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIp
OworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY2MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91
dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdp
bmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzE2LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9F
eGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzczMyw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJv
d19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9
IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJn
dW1lbnRHUFIxOwpAQCAtNzIwLDcgKzc0Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4g
MAogICAgIGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAg
IGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJn
dW1lbnRHUFIwKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoYXJndW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyArOTMwLDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAg
LTkxOCw3ICs5NDEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJ
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0
ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEp
OwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CiB9CiAKQEAgLTkzMSw3ICs5NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
b19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RO
dW1iZXIocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTc1LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAg
IGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0VlJlZyk7CiB9CkBAIC05NzgsNyArMTAwMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX29i
amVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDAp
KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1Qw
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYg
KHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RW
UmVnKTsKIH0KQEAgLTk5Myw3ICsxMDE3LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNv
bnN0IEluc3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZv
ckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zm
c2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBPT1BTOiBUaGlz
IGlzbid0IGVsZWdhbnQuIFdoeSBhcmVuJ3QgdGhleSBpbiB0aGUgY2FsbGVlIHNhdmUgYnVmZmVy
LiBJIGd1ZXNzIGJlY2F1c2Ugd2UgY2FuIE9TUiBleGl0IGhlcmU/CisgICAgZW1pdE1hdGVyaWFs
aXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKIAogICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNh
dGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyArMTAzOCwxMSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQg
dHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7
Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2
bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFs
dWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1
ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tp
cE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwotICAgIGlm
IChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9y
RWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewotICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSksIHJl
Z3MpOwotICAgICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAK
QEAgLTEwNTMsOCArMTA2OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3Qg
SW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGlu
ZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRj
aGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZh
dWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVu
c3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsxMDk2LDE0IEBAIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVt
cCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVt
ZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtl
ZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVt
cFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
dGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6
OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFi
bGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5k
ZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5
cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxl
Lm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9
CiAKQEAgLTEwOTksMjAgKzExMTUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmlu
Zyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3Nj
cnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRp
b25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJp
bmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlu
a2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJs
ZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3Ry
aW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2Vy
UmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBD
b2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDApOwogICAgIEp1bXAg
bm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29k
ZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsK
QEAgLTExMzMsNyArMTE1MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5z
dHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWws
IHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgp
OwpAQCAtMTE0OCw3ICsxMTY2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJ
bnN0cnVjdAogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEx
NjYsNyArMTE4Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMK
IAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJl
Z1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpA
QCAtMTE4OCwxMiArMTIwNSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0
cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRp
YWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVy
cywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0
aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBjb3VudCA9IG1fY29k
ZUJsb2NrLT5udW1WYXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+bnVtVmFycygpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBmb3IgKHNp
emVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFs
UmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2Rl
QmxvY2spOworICAgIAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7CiAKICAgICBlbWl0
RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEyMTIsNyArMTIzMSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpv
cF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZS
ZWdpc3RlcnM6OmVicCk7CkBAIC0xMzEwLDIzICsxMzI5LDE5IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVk
U3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0
dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlz
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJC
YXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwog
ICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0
YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQy
LDcgKzEzNTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRP
Zk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQ
cm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyks
IGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlv
blJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0
aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1
bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BDcmVhdGVUaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRDYWxsZWUoKSwgY2Fj
aGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5j
aFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVu
TXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90
RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBoYXNTZWVuTXVsdGlw
bGVDYWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzODcsOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIs
IHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEzOTgsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCBy
ZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1
cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcgKzE0MTEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qy
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCBy
ZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxNDIyLDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwg
cmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsxNDM3LDExIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdp
c3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluc3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0
dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KQEAgLTE0MzAsNyArMTQ1MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0
dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9v
cEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICBpZiAoVU5M
SUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAm
JiBtX3VubGlua2VkQ29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJs
eVJldHVybigpKSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRF
eGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZFB0cihwdHIsIHJlZ1Qw
KTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2hQdHIoQmVsb3csIHJlZ1Qw
LCBUcnVzdGVkSW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1p
dCgpKSk7CkBAIC0xNDQwLDcgKzE0NjAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQo
Y29uc3QgSW5zdHJ1CiAjZWxzZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCi0g
ICAgICAgIG1vdmVWYWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlc3VsdFJlZ3Mp
OworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkpOwogICAgICAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CiAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0xNDUzLDggKzE0NzMs
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBF
bWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQo
KSkgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVy
bywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29w
KCkpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZK
SVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVzcyhyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQogfQogCkBAIC0xNTA5
LDcgKzE1MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1
bWVudEdQUjApOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gYXJndW1lbnRHUFIzOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTUyMiw3ICsxNTQ0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hh
bmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6
ZWJwKTsKQEAgLTE1NjQsMzQgKzE1ODYsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4
cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2RlQmxv
Y2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3
RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2Nv
cGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5t
X3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFy
Z3VtZW50R1BSMSk7CiAjZW5kaWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0g
bV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAg
YXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OkZ1bmN0aW9uRGVjbCwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwg
YXJndW1lbnRHUFIyKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19n
ZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19h
c3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3
X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAg
LTE2MjEsMjMgKzE2NDUsMjQgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25z
dCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRH
UFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qw
KTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsK
ICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2Nr
LT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3Rh
bnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4
cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5t
X2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BS
Mik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRv
cl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3lu
Y19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0
aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25l
d19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlv
bik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0K
IApAQCAtMTY2NCwyOSArMTY4OSwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2Vu
ZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2Fy
Z3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRo
UHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
Ci0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXpl
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQUjIpOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6
Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRo
X3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5t
X2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNl
dE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogI2Vsc2UKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSgpLCByZWdUMik7CiAgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVn
VDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2Zp
bGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAg
ICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIHJlZ1QzLCByZWdU
MiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsx
NzIwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1
bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdHlwZSBwcm9maWxlciBpcyBlbmFibGVkLgog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKTsKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1f
dHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVj
b2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCkBAIC0xNzc3LDIwICsxODA0LDI0IEBAIHZv
aWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBzdGF0aWNfYXNzZXJ0
KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2
ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcg
c2hhZG93UGFja2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJn
R1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJl
ZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0o
KSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIHsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEg
bm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgorICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdU
MjsKKyAgICAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRS
ZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgfQogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1f
Y29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMSk7CisgICAgbG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiks
IHJlZ1QzLCByZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2Vu
ZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJv
bF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8g
T09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5n
IHdoZW4gdGhlIHVzaW5nIHRoZSBjb250cm9sIGZsb3cgcHJvZmlsZXIuCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlQ29udHJvbEZsb3c+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsK
ICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9IG1ldGFkYXRhLm1f
YmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgYmFzaWNCbG9ja0xv
Y2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMpOwpAQCAtMTg2MCw3ICsxODkxLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIG1vdmVWYWx1ZShqc1Vu
ZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCkBAIC0x
ODg2LDcgKzE5MTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0
CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVz
dWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJD
b2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgog
I2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCkBAIC0yODU1
LDcgKzI4NTYsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAg
ICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2Rl
QmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChj
b2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1p
bik7CiAgICAgdm9pZCogcmVzdWx0ID0gbGlua2VkVGFibGUubV9jdGlEZWZhdWx0LmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CiAKQEAgLTI4ODAsNyArMjg4MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJs
b2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQ7CiAgICAgaWYgKGtl
eS5pc0ludDMyKCkpCkBAIC0yOTAzLDcgKzI5MDQsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2st
PmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogCiAgICAgaWYgKGtl
eS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmluZ0ltcGwqIHZhbHVlID0gYXNTdHJpbmcoa2V5
KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OCw3ICszNDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0
ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNW
YWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgSW52YWxpZEdQUlJlZywgSW52YWxpZEdQUlJlZyk7CiAg
ICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksOTIgKzQ5LDEwMyBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgaWYgKG1ldGFkYXRhLm1fc2Vlbklk
ZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlm
aWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwg
cmVnVDIpOworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5t
X3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9m
SWRlbnRpZmllcnMoKSkgeworICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
YmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29k
ZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0
KHNjcmF0Y2hHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUs
IG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIHNjcmF0Y2hHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BS
KTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAs
IHByb2ZpbGUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0
ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOwogCiAg
ICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQotICAgICAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWws
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3Ms
IHN0dWJJbmZvR1BSKTsKKworICAgICAgICAvLyBPT1BTLiBTdXBwb3J0IHRoaXMKKyAgICAgICAg
Ly9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgICAgICAvLyAgICBnZW4u
c3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKworICAgICAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAg
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlW
YWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2Rl
VHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlw
ZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRlcikp
CisgICAgICAgIHJldHVybjsKKworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOwogCi0gICAgICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwg
YXJndW1lbnRHUFIyKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwog
I2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChC
eXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFk
eSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQ
UjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAg
ICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsg
Ly8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVH
UFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGlj
X2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQo
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fz
c2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
Y29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsK
KyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0g
ICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAg
fQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
QEAgLTE0OSw3ICsxNjAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdS
ZXR1cm5BZGRyZXNzKCk7CkBAIC0xNjAsOCArMTcxLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BS
ID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIy
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMTg3LDM0
ICsxOTgsNDAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAog
ICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAg
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1l
LAorICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0
dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0
QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1
bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzI0MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X3ByaXZhdGVfbmFtZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9u
R2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMyk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVy
YXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1NCwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5
R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yNjQsNyAr
Mjc3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8v
IGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcg
YXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1h
eSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGlj
aCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVz
cygpOwpAQCAtMzAwLDIxICszMTMsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVf
YnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0g
ICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsK
KworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwotCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFu
ZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nh
c2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BS
KSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBXZSBzaG91bGQg
ZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFy
cmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC0zMjQsMTcgKzM0NCwyMiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNl
LCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2
YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24p
OworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFj
Y2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFu
ZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXpl
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzY5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fz
c2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNl
dFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46
OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0
X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19w
cml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0z
NzAsMTkgKzM4OSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNv
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQs
IHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFz
ZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihicmFuZCwgYnJhbmRHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSks
IHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpD
aGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBz
dHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCkBAIC0zOTQsOSArNDIyLDEx
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9w
dGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVu
dEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0MzYs
MTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJl
YWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6
YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFp
dHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVu
dFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9w
dGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9w
dGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hl
Y2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM1
LDMwICs0NTksNDIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwog
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7CisgICAg
bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9m
ZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
SlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQpOwotICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50
MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFs
dWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworICAgIC8vIE9PUFM6
CisgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgIC8vICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1Yklu
Zm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRL
aW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2Rl
ID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlW
YWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0
aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MTAsMTIg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1v
ZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAg
ICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAg
ICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00
OTgsNyArNTMxLDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkK
IAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1
cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
NCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5
VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1
KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFk
YXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUp
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMs
IGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTUxMiw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2Fs
bCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJp
Y3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAg
LTUzMywxOCArNTc1LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
cmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFp
bnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAg
fQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpAQCAt
NTcwLDIwICs2MTgsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25z
dAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJ
bnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFk
ZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5m
b0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9
IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2NTMsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsK
LSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7Cisg
ICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZhbEdl
bmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02MDMs
MTMgKzY2MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0aW9u
ID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmll
bGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQg
aW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJ
bmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisgICAgUHJpdmF0ZUZpZWxk
UHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworCisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjQpOworICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8g
b3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50c0dQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02MjIsMTggKzY4NCwxMiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0MywxNCArNjk5LDE0IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVn
VDQ7CiAKQEAgLTY4MCw3ICs3MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5
X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJl
Z1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5
SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNjg5LDcgKzc0Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlf
aWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJ
ZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNjk5LDcgKzc1Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0
ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdU
MSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJl
Z1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdU
MSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzA5LDcgKzc2OCw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJp
YnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBy
ZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC03MTksNyArNzc5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9i
eV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1Qy
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRl
cywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0
ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc4OCwzMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxp
bmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1
YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0
ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRl
LWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2Ji
ZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODMwLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXpl
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0z
MihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTc4MSwyNCArODU0LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxf
YnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1l
bnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwot
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9w
dGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVs
ZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0
YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lm
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODA4LDcgKzg3Niw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBi
ZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAg
IC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTg0NSwyMiArOTEz
LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qx
LCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGlu
ZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9w
ZXJ0eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFz
ZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJp
ZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJl
Z2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRl
LWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTYyLDExIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRl
Y29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlW
YWxPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJn
dW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQgKzk4MCwxOSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFN
b2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJu
VmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
CiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQpAQCAtOTI2LDcgKzEwMDIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0
IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVy
IGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAg
IGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIgKzEwMzcsMzEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZS
ZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NU
eXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQp
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNzEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Ry
eV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
W21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTAwMywyNiArMTA5MSwy
MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbW92ZShK
SVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1l
PGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMzAsMjIgKzExMTIsMzEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5
SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYgKzExNDUsMTggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJl
Y3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
bWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3Vs
dFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTY2LDYxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RP
cHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5
SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
VlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5n
dGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21v
ZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5
SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFy
cmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2Rl
TWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSnVtcCBub3RB
cnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6
Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFy
cmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBy
ZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOwotfQorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1
bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAKLXZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1
ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKLQotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0
aFRoaXMuYXBwZW5kKGdlbik7CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2ICsxMjI5LDE4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNTAsNTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwot
ICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVn
ID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVH
ZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZS
ZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNW
UmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwg
cmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBz
dHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9n
ZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTIwNiw3ICsx
MzEwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8v
IGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcg
YXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1h
eSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGlj
aCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVz
cygpOwpAQCAtMTI0MSwxNiArMTM0NSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlk
V2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRo
VGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1p
emUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRH
UFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBh
cmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3Bl
cmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTEyNjAsMjggKzEzNjcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3Vt
ZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdUMTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFy
Z3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0g
YXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVy
dHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAg
ICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0K
IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI5MSw3ICsxMzkyLDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTMy
OSwyMyArMTQzMCwzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGly
ZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUg
YWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwg
d2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRz
IGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBn
ZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJl
IGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJz
Ojp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRC
eUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiks
IHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRp
cmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0S2luZDo6RGly
ZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFN
b2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFwcGVu
ZChnZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQg
d3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0NzQsMTggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAogICAg
IEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRo
RnVuY3Rpb24oKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJn
dW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3NiwyNSArMTQ5NSwxOSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNl
LgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
QmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VH
UFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodmFs
dWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCkBAIC0xNDA0LDcgKzE1MTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAg
ICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQxLDIwICsxNTU0LDMxIEBAIHZv
aWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2Vs
aW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTg3LDE3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5C
eUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0ODAsMjggKzE2MDcsMjIgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVy
YXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5v
IHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRp
ZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9w
ZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5k
Q2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUx
MCwyNSArMTYzMSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVj
b2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwogCiAgICAg
SklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9H
UFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChn
ZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUzNywxNSAr
MTY2NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEpJVEluQnlWYWxHZW5l
cmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1l
bnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQ
UjQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJn
dW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NTYsNTkg
KzE2ODgsNzAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVy
dHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSks
IHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mg
bm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEg
ZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUo
b3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRp
bWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0SGFz
UHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBK
SVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZh
bHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vz
c1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNj
ZXNzVHlwZSB0eXBlKQogewotICAgIEFTU0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBVTlVT
RURfUEFSQU0oYmFzZSk7CisgICAgVU5VU0VEX1BBUkFNKHByb3BlcnR5KTsKKyAgICBBU1NFUlRf
VU5VU0VEKHR5cGUsIHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9
PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRv
ciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVy
YXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2MSwyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZh
dGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5k
R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0
eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9w
dGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2
YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0
eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5h
bWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
TmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2
YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxNzg5LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29k
ZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRl
U2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5
LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hh
c19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xNjY2LDE5ICsxODAzLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9i
cmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhh
c1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQp
OworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNl
LCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rp
b25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0
cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92
YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2ODgsNiArMTgyOCw3IEBAIHZv
aWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3MDEsNyArMTg0Miw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDEpOwogICAgICAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1Qx
KTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4NTYsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CiAgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3OTQs
ODcgKzE5MzUsMTA1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4K
IHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBl
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2Rl
SW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2Rl
SW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rp
b24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJl
c29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0
aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBN
b2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxF
bnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJl
c29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1Qw
KTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2Rl
QmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgICAgICBwdHJkaWZm
X3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNl
dEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5F
UkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJh
dG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0g
ewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVfR0VORVJB
VE9SKQorICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7Cisg
ICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENs
b3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7CiAgICAg
ICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBhdXRvIGNs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgewor
ICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Nj
b3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7CisgICAgICAgIH07CisKKyAg
ICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgewor
ICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBz
dGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7CisgICAg
ICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3Owor
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CisgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBD
bG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdl
bmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJ
U3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNSZXNvbHZlU2Nv
cGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJh
dGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFy
KiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZl
VHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUg
dGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBM
TEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAg
IHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBz
bG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsK
ICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJU
KHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1Jl
dHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBy
ZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSks
IHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1w
TGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52
YWxpZEdQUlJlZykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRH
UFJSZWcpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BSUmVn
KSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAgIGxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3Qo
KSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zhcklu
amVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJh
bmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1f
dmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAogICAg
IGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgbG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3Bl
RGVwdGgpKSwgcmVnVDEpOworICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAg
ICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAgICBMYWJlbCBsb29wID0g
bGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsK
KyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBq
aXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAgewotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAg
ICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVt
cCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0
LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5s
aW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBb
Jl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEyICsyMDQxLDEyIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxv
Y2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7
Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9i
amVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAg
ICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxC
aW5kaW5nRXBvY2gpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5i
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0
OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAg
ICAgICBqaXQubW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEgKzIwNTYsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNj
b3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xv
YmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAg
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAg
ICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkds
b2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGlj
YWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsyMDY4LDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1pdFJlc29sdmVD
bG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAg
ICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMjA3OCw0NSBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qg
c2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09G
RlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1w
IG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHku
bGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9i
YWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZl
VHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZh
ciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3Bl
cnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdUMCk7CiAKLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZd
IChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAgICAgICAgICAgSnVtcCBub3RDYXNlID0g
aml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7
CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOwor
ICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBlbWl0
Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7CisgICAg
ICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0
Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7
Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAK
LSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAg
ICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVf
c2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2Nh
dGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxv
Y2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJ
TkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5
cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICgh
dGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAg
IHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGpp
dC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3Bf
cmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZF
X1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9SRVNP
TFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAv
LyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRo
IHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVkIHRo
ZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAtMjA2NSw2ICsyMTg2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTIxNzgsNyArMjMwMCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTIxODYsOSArMjMwOCw5IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3Bl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUs
IGRzdCwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiAjZWxzZSAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTIxOTYsNDEgKzIzMTgsNTAgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIFJlc29sdmVUeXBl
IHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNv
ZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVj
dGlvbik7CisKKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7Cisg
ICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3Vy
ZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsK
KworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBb
XSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3Bf
Z2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyaWNH
ZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6
OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6
IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7
CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0gICAgICAgIHVpbnRwdHJf
dCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5t
X29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpT
VmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHRy
ZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJs
ZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRD
b2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAot
I2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9t
X3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRo
dW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09M
VkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAgIH07Ci0jdW5kZWYgR0VU
X0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
c2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFk
YXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29w
ZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFk
YXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Z2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0gICAg
fQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBjb2RlID0gdm0u
Z2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJl
c29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBj
b2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVy
YXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0
RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9w
R2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5l
cmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBl
PiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVu
ayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50
IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91
dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCkBAIC0yMjM5LDk5ICsyMzcwLDg4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3Bl
OjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJU
KHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1Jl
dHVybkFkZHJlc3MoKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAgaml0LnRhZ1JldHVy
bkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRh
dGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywg
bWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRM
b2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0
YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29w
ZUdQUiwgcmVnVDApOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJv
LCByZWdUMSkpOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKSk7CisgICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BS
UmVnIHNjb3BlR1BSKSB7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsK
KyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgIGppdC5sb2FkMzIo
QWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwor
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwogICAgIH07CiAKLSAg
ICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3Qs
IG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFw
cGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRP
ZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JK
RUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwg
cmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJl
c3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRy
KHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9p
bnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIo
cmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChH
UFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7CiAgICAgICAgIHN0YXRpY19hc3Nl
cnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBsc2hpZnQ2NChUcnVzdGVk
SW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRH
UFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5sc2hpZnQ2
NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOworICAgICAgICBqaXQuYWRkUHRyKHNjb3Bl
R1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BS
LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKICAg
ICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUs
IGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0g
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0
dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBk
b24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4g
QWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIg
aW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVH
UFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7CiAg
ICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwogICAgICAgICAgICAg
Y29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKICAgICAgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFt
YmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWws
IGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1
bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIo
RXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3Bl
cmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgb2Zmc2V0KTsKICAgICAgICAgICAg
IGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUg
PSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9m
ZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRo
aXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3Jl
YXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNl
dCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RP
dXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwot
ICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAg
ICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91
dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0Lm5lZzMyKG9mZnNldCk7CisgICAg
ICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgICAgICAg
ICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmly
c3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6
CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5k
aXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAg
ICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0
YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihy
ZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJh
bmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
YnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCByZWdUMyk7CisgICAg
ICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAg
TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwogICAgICAgICAgICAgZW1pdEdl
dENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVW
YXI6CkBAIC0yMzQxLDg2ICsyNDYxLDYzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAg
ICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQ
dXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0K
LSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAg
ICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5
cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9n
ZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAg
ICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQ
dXRJbmZvKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0g
ICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0ds
b2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5
LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
bm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFZh
ciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIp
KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsoJmppdCk7CisKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0LmJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxp
bmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsK
KyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkp
OworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGpp
dC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0
Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5s
aW5rKCZqaXQpOwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICB9CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0aWNf
YXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQo
cmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9w
cm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBN
ZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkpKTsKIAotICAgIHJldCgpOworICAgIGppdC5yZXQo
KTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0g
dm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxl
ci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJU
YWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVS
QVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0p
IFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZy
b21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAg
ICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNj
b3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVz
b2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJP
TV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRP
UgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9n
ZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVy
YXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNl
bGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0y
NDcxLDg2ICsyNTY4LDc5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotdm9pZCBKSVQ6OmVt
aXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVn
VDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0
KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0
LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJl
c3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12
b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRy
X3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsK
LSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQot
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUu
bV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwot
ICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwot
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwot
ICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90
KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7Cisg
ICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0
byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAg
ICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUg
c3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxs
eSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4K
KyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5j
ZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9i
amVjdC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVz
IGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0
dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVn
VDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsm
XSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAg
ICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsK
KyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAg
ICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBU
aW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpKTsKKyAgICAgICAgICAgIC8vIE9PUFM6IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZl
cnNpb24gdGhhdCB0b29rIEdQUlJlZ3MgaW5zdGVhZCBvZiBWUnMKKyAgICAgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2Fz
ZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExl
eGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpj
b25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwot
ICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUpOwotICAgICAgICAg
ICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkp
ICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwg
cmVnVDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJl
Z1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKKworICAgICAgICAg
ICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXph
dGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2Ug
Y2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHku
Ci0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAg
ICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShy
ZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0
d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0
Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEds
b2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUs
IG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisKKyAgICAgICAgICAg
IGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9m
ZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3Jp
dGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdU
MCkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJz
aW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3IgdmFsdWUuCisgICAgICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIo
c2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Cisg
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgp
LCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1
dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAg
ICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNl
SW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zm
c2V0T2ZWYXJpYWJsZXMoKSkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNl
IHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3Igb3duZXIvdmFsdWUuCiAg
ICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjU2
NCw1OCArMjY1NCw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2
YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAgICAgICAgaXNH
bG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0g
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5s
aW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJlVmFyLyBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGlsZSB0aGluZ3MK
KyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3ZlIHByb3ZlbiB0
aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZhciwKKyAgICAv
LyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgorICAgIC8vIGlm
IHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0IGlzIGZpcmVk
LCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAgIC8vIG1hdHRl
ciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIpOworICAgIGVs
c2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyKQorICAgICAg
ICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGVt
aXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbHNlIHsKICAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0
UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7CiAgICAg
ICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8g
TG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsK
ICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAgZW1pdENvZGUo
R2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAorICAg
ICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKHRo
aXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1
ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlz
KTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAKICAgICAgICAg
c2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFr
OwogICAgIH0KIH0KIApAQCAtMjYyNCwxOCArMjcwOCwyMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsK
LSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUp
LnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAg
IFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBpZiAocHJv
ZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYgYW55IGxpbmtl
ZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29kZUJsb2NrcyBh
cmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIuCiAgICAgICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3Ip
OwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRv
U2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3VtZW50R1BSMCwg
Y3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwogICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9i
eXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0
KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgQVNTRVJU
KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBj
dXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3ICsyNzM5LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZS
ZWdpc3RlcnM6OmVicCk7CkBAIC0yNzAxLDcgKzI3ODgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihh
cmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1l
bnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAt
Mjc1OSw3ICsyODQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
cgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkBAIC0yNzY3LDcg
KzI4NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVs
ZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc4OSw3ICsyODc1LDYg
QEAgdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxPcAogdm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVt
ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwpAQCAtMjgwNSw3
ICsyODkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogICAg
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1v
biBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBjYXNlIGl0IGlmIHdlIHByb2Zp
bGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0
YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKKyAgICBp
ZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9lbnVtZXJhdG9yTWV0
YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CiAg
ICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAgICAgICAgIG9wZXJhdGlv
bkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
KH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpICYgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwpAQCAtMjg0Nyw3OCArMjkz
Miw4NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9u
ZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGlu
ZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3Jh
dGNoMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9y
R2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVz
cygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1l
cmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoMik7CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIp
OworICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JH
ZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBl
bmNvZGVkIHZhbHVlLgotICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsK
KyAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBz
Y3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBD
aGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVN
aXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAK
ICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bmRleCwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gy
KTsKICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQg
aW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRP
ZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1Qy
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
KTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsK
LQorICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3Jh
dGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIs
IHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1l
c0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwog
ICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91
dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAg
c3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWdu
RXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRy
ZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25F
eHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CiAgICAgY29uc3RleHByIGludHB0cl90
IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsK
LSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIs
IHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIp
OwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNo
LmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRh
dGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZElt
bTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1
Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6
Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVN
b2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVy
bywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRN
b2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRj
aDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7
CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsK
KyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNj
cmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIGRvbmVDYXNlcy5saW5rKHRoaXMp
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBA
IC0yOTI3LDEwICszMDIxLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0
X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVyKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1l
IE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVt
aXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9u
VHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUg
U2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9w
ZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0yOTM5LDcgKzMwMzIsOSBAQCB2b2lkIEpJVDo6
ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMCk7Ci0gICAgb3I4KHJlZ1Qw
LCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAg
bG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZF
bnVtZXJhdG9yTWV0YWRhdGEoKSwgcmVnVDEpOworICAgIG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAg
ICBzdG9yZThUb01ldGFkYXRhKHJlZ1QxLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwogCkBAIC0zMDI4LDYgKzMxMjMsMTMgQEAgdm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogICAgIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BS
UmVnIG93bmVyKQoreworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJp
ZXJCcmFuY2godm0oKSwgb3duZXIsIHNlbGVjdFNjcmF0Y2hHUFIob3duZXIpKTsKKyAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwg
JnZtKCksIG93bmVyKTsKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU1Miw3ICsxNTUyLDcgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5r
SQogCiB2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykK
IHsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2lu
ZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0KCkpOworICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzog
IiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7CiAgICAgCiAgICAgcmV2ZXJ0Q2FsbCh2bSwg
Y2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFn
Z2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVj
a3BvaW50LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2hlY2twb2ludE9T
UkV4aXRTaWRlU3RhdGUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVk
ZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCkBAIC0zNzAsNiArMzcxLDE1IEBAIGlubGluZSBib29s
IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYKICAgICAKICAgICBjb2RlQmxvY2stPnVwZGF0
ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRU
eXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxCYXNl
bGluZUpJVENvZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygp
LT5tX3VubGlua2VkQmFzZWxpbmVDb2RlKSB7CisgICAgICAgICAgICAvL2RhdGFMb2dMbigiU2hh
cmVkIHZpYSBMTEludCIpOworICAgICAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtl
ZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAg
IGNvZGVCbG9jay0+aml0TmV4dEludm9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJl
c2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ss
ICJkZWxheUpJVENvbXBpbGUiLCAoInRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIs
IGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0
ZWQuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0
cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwg
aW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1l
JSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJl
dHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAg
ICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVu
YXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFk
YXRhKHQxLCB0MikKICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFn
T2Zmc2V0W2NmciwgdDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBA
IG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRh
ZGF0YSBpbiB0MSwgc3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5z
bG93KQogICAgICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAg
ICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAg
ICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVu
ZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFy
aXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjpt
X2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0K
ICAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRh
ZywgLm9wTmVnYXRlU3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRl
U2xvdwogICAgIG5lZ2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50
KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQs
IHQ1LCB0MykKICAgICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoK
ICAgICBiaWEgdDEsIExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAw
MCwgdDEKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVw
ZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0
MykKICAgICByZXR1cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEw
Nyw2IEBAIGVuZCkKIAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNv
ZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAg
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBh
cml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6
TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVd
Ci0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1f
cmhzLCB0MikKICAgICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIElu
dDMyVGFnLCAub3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdElu
dAotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRh
dGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1
LCB0MikKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFu
ZFN0b3JlKHQzLCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEz
NiwxMiArMTEyNCwxMiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9w
CiAgICAgICAgIGJpYSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2Vz
dFRhZywgLm9wMU5vdEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5z
bG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJl
ckludCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90
SW50UmVhZHkKICAgICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMs
IGZ0MQotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAg
ICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVO
dW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldCht
X2RzdCwgdDEpCiAgICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBA
QCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmly
c3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRl
ZmluaXRlbHkgbm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExv
d2VzdFRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJl
cikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQ
cm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAg
ZmlpMmQgdDEsIHQzLCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20JKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxNSAr
NjgsMTYgQEAgbWFjcm8gbWFrZVJldHVyblByb2ZpbGVkKG9wY29kZVN0cnVjdCwgZwogICAgIGZu
KG1hY3JvICh2YWx1ZSkKICAgICAgICAgbW92ZSB2YWx1ZSwgdDMKICAgICAgICAgbWV0YWRhdGEo
dDEsIHQyKQotICAgICAgICB2YWx1ZVByb2ZpbGUob3Bjb2RlU3RydWN0LCBtX3Byb2ZpbGUsIHQx
LCB0MykKKyAgICAgICAgdmFsdWVQcm9maWxlKG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCB0MSwg
dDMsIHQyKQogICAgICAgICBnZXQobV9kc3QsIHQxKQogICAgICAgICBzdG9yZXEgdDMsIFtjZnIs
IHQxLCA4XQogICAgICAgICBkaXNwYXRjaCgpCiAgICAgZW5kKQogZW5kCiAKLW1hY3JvIHZhbHVl
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHByb2ZpbGVOYW1lLCBtZXRhZGF0YSwgdmFsdWUpCi0gICAg
c3RvcmVxIHZhbHVlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6OiVwcm9maWxlTmFtZSUubV9i
dWNrZXRzW21ldGFkYXRhXQorbWFjcm8gdmFsdWVQcm9maWxlKG9wY29kZVN0cnVjdCwgcHJvZmls
ZU5hbWUsIG1ldGFkYXRhLCB2YWx1ZSwgc2NyYXRjaCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6OiVwcm9maWxlTmFtZSVbbWV0YWRhdGFdLCBzY3JhdGNoCisgICAgc3RvcmVx
IHZhbHVlLCBWYWx1ZVByb2ZpbGU6Om1fYnVja2V0c1tzY3JhdGNoXQogZW5kCiAKICMgQWZ0ZXIg
Y2FsbGluZywgY2FsbGluZyBieXRlY29kZSBpcyBjbGFpbWluZyBpbnB1dCByZWdpc3RlcnMgYXJl
IG5vdCB1c2VkLgpAQCAtODcsNyArODgsNyBAQCBtYWNybyBkaXNwYXRjaEFmdGVyQ2FsbChzaXpl
LCBvcGNvZGVTdHJ1CiAgICAgZ2V0KHNpemUsIG9wY29kZVN0cnVjdCwgZHN0VmlydHVhbFJlZ2lz
dGVyLCB0MSkKICAgICBzdG9yZXEgcjAsIFtjZnIsIHQxLCA4XQogICAgIG1ldGFkYXRhKHNpemUs
IG9wY29kZVN0cnVjdCwgdDIsIHQxKQotICAgIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHZh
bHVlUHJvZmlsZU5hbWUsIHQyLCByMCkKKyAgICB2YWx1ZVByb2ZpbGUob3Bjb2RlU3RydWN0LCB2
YWx1ZVByb2ZpbGVOYW1lLCB0MiwgcjAsIHQzKQogICAgIGRpc3BhdGNoKCkKIGVuZAogCkBAIC00
NDEsOCArNDQyLDEzIEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAg
ICAgIG1vdmUgUEMsIGExCiAgICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAg
ICAgICAgICAgYnRweiByMCwgLnJlY292ZXIKLQogICAgICAgICAgICAgbW92ZSByMSwgc3AKKwor
ICAgICAgICAgICAgIyBCYXNlbGluZSB1c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBK
SVQgY29uc3RhbnQgcG9vbC4KKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgor
ICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2ppdERhdGFbUEJdLCBQQgorICAgICAgICAg
ICAgbG9hZHAgQ29kZUJsb2NrOjpKSVREYXRhOjptX2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisK
ICAgICAgICAgICAgIGlmIEFSTTY0RQogICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsg
Y29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRl
Ojpsb29wT1NSRW50cnkpICogUHRyU2l6ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAgW2EyXSwg
TmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgSlNFbnRyeVB0clRhZwpAQCAtMTA1NiwxMCArMTA2Miw2
IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJl
T3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50
T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXpl
LCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVB
cml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6
TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0K
LSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEg
W2NmciwgdDAsIDhdLCB0MQogICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEw
NzEsNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAg
IGludGVnZXJPcGVyYXRpb24odDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQog
ICAgICAgICBzdG9yZXEgdDEsIFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2Zp
bGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAK
ICAgICAuc2xvdzoKQEAgLTExMzQsMTEgKzExMzYsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwg
bWV0YWRhdGEsIHJldHVybikKLQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQot
ICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVu
YXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5k
LCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRh
ZGF0YSh0MSwgdDIpCkBAIC0xMTQ2LDEyICsxMTQzLDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfbmVnYXRlLCBPcE5lZ2F0ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVT
bG93CiAgICAgbmVnaSB0MwogICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQ
cm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5l
Z2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRl
Tm90SW50OgogICAgIGJ0cXogdDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEg
MHg4MDAwMDAwMDAwMDAwMDAwLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2Zp
bGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJv
ZmlsZU51bWJlciwgdDEsIHQyKQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAg
LTExNjQsMTAgKzExNjEsNiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUs
IG9wCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVj
dCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAg
IG1ldGFkYXRhKHQ1LCB0MCkKIAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAg
ICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSAr
IEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBn
ZXQobV9yaHMsIHQwKQogICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkKQEAgLTExNzcsNyArMTE3MCw3IEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikK
ICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0g
ICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlB
cml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAg
ICAgICAgZGlzcGF0Y2goKQogCiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExODAsMTAg
QEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6
IHQxLCBudW1iZXJUYWcsIC5zbG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAg
ICBmcTJkIHQxLCBmdDEKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIp
CisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZU51bWJlck51bWJlciwgdDUsIHQyKQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAg
ICAgLm9wMU5vdEludE9wMkludDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJ
bnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRo
UHJvZmlsZU51bWJlckludCwgdDUsIHQyKQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9w
MU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNCw5ICsxMTk3LDkg
QEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogCiAgICAgLm9wMk5v
dEludDoKICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUg
c2Vjb25kIGlzIGRlZmluaXRlbHkgbm90LgotICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAg
ICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxl
SW50TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikK
ICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAg
ICAgZnEyZCB0MSwgZnQxCkBAIC0xNTA5LDcgKzE1MDIsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRh
KG9wX2dldF9ieV9pZF9kaXJlY3QsCiAgICAgYmluZXEgdDAsIHQxLCAub3BHZXRCeUlkRGlyZWN0
U2xvdwogICAgIGxvYWRpIE9wR2V0QnlJZERpcmVjdDo6TWV0YWRhdGE6Om1fb2Zmc2V0W3QyXSwg
dDEKICAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MywgdDApCi0gICAgdmFs
dWVQcm9maWxlKE9wR2V0QnlJZERpcmVjdCwgbV9wcm9maWxlLCB0MiwgdDApCisgICAgdmFsdWVQ
cm9maWxlKE9wR2V0QnlJZERpcmVjdCwgbV9wcm9maWxlLCB0MiwgdDAsIHQxKQogICAgIHJldHVy
bih0MCkKIAogLm9wR2V0QnlJZERpcmVjdFNsb3c6CkBAIC0xNTI5LDcgKzE1MjIsNyBAQCBtYWNy
byBwZXJmb3JtR2V0QnlJREhlbHBlcihvcGNvZGVTdHJ1Y3QsCiAgICAgYmluZXEgdDAsIHQxLCBz
bG93TGFiZWwKICAgICBsb2FkaXMgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFk
YXRhTmFtZSUuZGVmYXVsdE1vZGUuY2FjaGVkT2Zmc2V0W3QyXSwgdDEKICAgICBsb2FkUHJvcGVy
dHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MywgdDApCi0gICAgdmFsdWVQcm9maWxlKG9wY29kZVN0
cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgdDIsIHQwKQorICAgIHZhbHVlUHJvZmlsZShvcGNvZGVT
dHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIHQyLCB0MCwgdDEpCiAgICAgcmV0dXJuKHQwKQogCiAu
b3BHZXRCeUlkUHJvdG9Mb2FkOgpAQCAtMTU0MCw3ICsxNTMzLDcgQEAgbWFjcm8gcGVyZm9ybUdl
dEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LAogICAgIGxvYWRpcyAlb3Bjb2RlU3RydWN0JTo6TWV0
YWRhdGE6OiVtb2RlTWV0YWRhdGFOYW1lJS5wcm90b0xvYWRNb2RlLmNhY2hlZE9mZnNldFt0Ml0s
IHQxCiAgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRhTmFt
ZSUucHJvdG9Mb2FkTW9kZS5jYWNoZWRTbG90W3QyXSwgdDMKICAgICBsb2FkUHJvcGVydHlBdFZh
cmlhYmxlT2Zmc2V0KHQxLCB0MywgdDApCi0gICAgdmFsdWVQcm9maWxlKG9wY29kZVN0cnVjdCwg
dmFsdWVQcm9maWxlTmFtZSwgdDIsIHQwKQorICAgIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1Y3Qs
IHZhbHVlUHJvZmlsZU5hbWUsIHQyLCB0MCwgdDEpCiAgICAgcmV0dXJuKHQwKQogCiAub3BHZXRC
eUlkQXJyYXlMZW5ndGg6CkBAIC0xNTUzLDE0ICsxNTQ2LDE0IEBAIG1hY3JvIHBlcmZvcm1HZXRC
eUlESGVscGVyKG9wY29kZVN0cnVjdCwKICAgICBsb2FkaSAtc2l6ZW9mIEluZGV4aW5nSGVhZGVy
ICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhbdDBdLCB0MAogICAgIGJp
bHQgdDAsIDAsIHNsb3dMYWJlbAogICAgIG9ycSBudW1iZXJUYWcsIHQwCi0gICAgdmFsdWVQcm9m
aWxlKG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgdDIsIHQwKQorICAgIHZhbHVlUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIHQyLCB0MCwgdDEpCiAgICAgcmV0
dXJuKHQwKQogCiAub3BHZXRCeUlkVW5zZXQ6CiAgICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVy
ZUlEW3QzXSwgdDEKICAgICBsb2FkaSAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6OiVtb2RlTWV0
YWRhdGFOYW1lJS51bnNldE1vZGUuc3RydWN0dXJlSURbdDJdLCB0MAogICAgIGJpbmVxIHQwLCB0
MSwgc2xvd0xhYmVsCi0gICAgdmFsdWVQcm9maWxlKG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxl
TmFtZSwgdDIsIFZhbHVlVW5kZWZpbmVkKQorICAgIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1Y3Qs
IHZhbHVlUHJvZmlsZU5hbWUsIHQyLCBWYWx1ZVVuZGVmaW5lZCwgdDEpCiAgICAgcmV0dXJuKFZh
bHVlVW5kZWZpbmVkKQogCiBlbmQKQEAgLTE1NzcsNyArMTU3MCw3IEBAIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfZ2V0X2J5X2lkLCBPcEdldEIKIC5vc3JSZXR1cm5Qb2ludDoKICAgICBnZXR0ZXJT
ZXR0ZXJPU1JFeGl0UmV0dXJuUG9pbnQob3BfZ2V0X2J5X2lkLCBzaXplKQogICAgIG1ldGFkYXRh
KHQyLCB0MykKLSAgICB2YWx1ZVByb2ZpbGUoT3BHZXRCeUlkLCBtX3Byb2ZpbGUsIHQyLCByMCkK
KyAgICB2YWx1ZVByb2ZpbGUoT3BHZXRCeUlkLCBtX3Byb2ZpbGUsIHQyLCByMCwgdDMpCiAgICAg
cmV0dXJuKHIwKQogCiBlbmQpCkBAIC0xNjk4LDcgKzE2OTEsNyBAQCBsbGludE9wV2l0aE1ldGFk
YXRhKG9wX2dldF9ieV92YWwsIE9wR2V0CiAgICAgbWFjcm8gZmluaXNoR2V0QnlWYWwocmVzdWx0
LCBzY3JhdGNoKQogICAgICAgICBnZXQobV9kc3QsIHNjcmF0Y2gpCiAgICAgICAgIHN0b3JlcSBy
ZXN1bHQsIFtjZnIsIHNjcmF0Y2gsIDhdCi0gICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5VmFs
LCBtX3Byb2ZpbGUsIHQ1LCByZXN1bHQpCisgICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5VmFs
LCBtX3Byb2ZpbGUsIHQ1LCByZXN1bHQsIHNjcmF0Y2gpCiAgICAgICAgIGRpc3BhdGNoKCkKICAg
ICBlbmQKIApAQCAtMTc1OSw3ICsxNzUyLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRf
YnlfdmFsLCBPcEdldAogCiAub3BHZXRCeVZhbERvbmU6CiAgICAgc3RvcmVxIHQyLCBbY2ZyLCB0
MCwgOF0KLSAgICB2YWx1ZVByb2ZpbGUoT3BHZXRCeVZhbCwgbV9wcm9maWxlLCB0NSwgdDIpCisg
ICAgdmFsdWVQcm9maWxlKE9wR2V0QnlWYWwsIG1fcHJvZmlsZSwgdDUsIHQyLCB0MykKICAgICBk
aXNwYXRjaCgpCiAKIC5vcEdldEJ5VmFsTm90SW5kZXhlZFN0b3JhZ2U6CkBAIC0xNzcyLDcgKzE3
NjUsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0CiAub3NyUmV0
dXJuUG9pbnQ6CiAgICAgZ2V0dGVyU2V0dGVyT1NSRXhpdFJldHVyblBvaW50KG9wX2dldF9ieV92
YWwsIHNpemUpCiAgICAgbWV0YWRhdGEodDUsIHQyKQotICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5
VmFsLCBtX3Byb2ZpbGUsIHQ1LCByMCkKKyAgICB2YWx1ZVByb2ZpbGUoT3BHZXRCeVZhbCwgbV9w
cm9maWxlLCB0NSwgcjAsIHQyKQogICAgIHJldHVybihyMCkKIAogZW5kKQpAQCAtMTc5NCw3ICsx
Nzg3LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfcHJpdmF0ZV9uYW1lLAogCiAgICAg
bG9hZGkgT3BHZXRQcml2YXRlTmFtZTo6TWV0YWRhdGE6Om1fb2Zmc2V0W3QyXSwgdDEKICAgICBs
b2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MywgdDApCi0gICAgdmFsdWVQcm9maWxl
KE9wR2V0UHJpdmF0ZU5hbWUsIG1fcHJvZmlsZSwgdDIsIHQwKQorICAgIHZhbHVlUHJvZmlsZShP
cEdldFByaXZhdGVOYW1lLCBtX3Byb2ZpbGUsIHQyLCB0MCwgdDMpCiAgICAgcmV0dXJuKHQwKQog
CiAub3BHZXRQcml2YXRlTmFtZVNsb3c6CkBAIC0yNjYyLDcgKzI2NTUsNyBAQCBsbGludE9wV2l0
aE1ldGFkYXRhKG9wX2dldF9mcm9tX3Njb3BlLCBPCiAgICAgbWFjcm8gZ2V0UHJvcGVydHkoKQog
ICAgICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om1fb3BlcmFuZFt0NV0sIHQx
CiAgICAgICAgIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDEsIHQwLCB0MikKLSAgICAg
ICAgdmFsdWVQcm9maWxlKE9wR2V0RnJvbVNjb3BlLCBtX3Byb2ZpbGUsIHQ1LCB0MikKKyAgICAg
ICAgdmFsdWVQcm9maWxlKE9wR2V0RnJvbVNjb3BlLCBtX3Byb2ZpbGUsIHQ1LCB0MiwgdDMpCiAg
ICAgICAgIHJldHVybih0MikKICAgICBlbmQKIApAQCAtMjY3MCwxNCArMjY2MywxNCBAQCBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wX2dldF9mcm9tX3Njb3BlLCBPCiAgICAgICAgIGxvYWRwIE9wR2V0
RnJvbVNjb3BlOjpNZXRhZGF0YTo6bV9vcGVyYW5kW3Q1XSwgdDAKICAgICAgICAgbG9hZHEgW3Qw
XSwgdDAKICAgICAgICAgdGR6Q2hlY2tJZk5lY2Vzc2FyeSh0MCkKLSAgICAgICAgdmFsdWVQcm9m
aWxlKE9wR2V0RnJvbVNjb3BlLCBtX3Byb2ZpbGUsIHQ1LCB0MCkKKyAgICAgICAgdmFsdWVQcm9m
aWxlKE9wR2V0RnJvbVNjb3BlLCBtX3Byb2ZpbGUsIHQ1LCB0MCwgdDMpCiAgICAgICAgIHJldHVy
bih0MCkKICAgICBlbmQKIAogICAgIG1hY3JvIGdldENsb3N1cmVWYXIoKQogICAgICAgICBsb2Fk
cCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om1fb3BlcmFuZFt0NV0sIHQxCiAgICAgICAgIGxv
YWRxIEpTTGV4aWNhbEVudmlyb25tZW50X3ZhcmlhYmxlc1t0MCwgdDEsIDhdLCB0MAotICAgICAg
ICB2YWx1ZVByb2ZpbGUoT3BHZXRGcm9tU2NvcGUsIG1fcHJvZmlsZSwgdDUsIHQwKQorICAgICAg
ICB2YWx1ZVByb2ZpbGUoT3BHZXRGcm9tU2NvcGUsIG1fcHJvZmlsZSwgdDUsIHQwLCB0MykKICAg
ICAgICAgcmV0dXJuKHQwKQogICAgIGVuZAogCkBAIC0zMTU5LDcgKzMxNTIsNyBAQCBsbGludE9w
V2l0aE1ldGFkYXRhKG9wX2VudW1lcmF0b3JfZ2V0X2J5CiAgICAgbG9hZHEgY29uc3RleHByICgo
b2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpW3QwLCB0MiwgOF0sIHQyCiAKIC5kb25lOgotICAgIHZhbHVlUHJvZmlsZShPcEVu
dW1lcmF0b3JHZXRCeVZhbCwgbV9wcm9maWxlLCB0NSwgdDIpCisgICAgdmFsdWVQcm9maWxlKE9w
RW51bWVyYXRvckdldEJ5VmFsLCBtX3Byb2ZpbGUsIHQ1LCB0MiwgdDMpCiAgICAgcmV0dXJuKHQy
KQogCiAuZ2V0U2xvd1BhdGg6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTE0MTIsNyArMTQxMiw4IEBAIGVuZAogCiBtYWNybyBjaGVja1N3aXRjaFRvSklU
KGluY3JlbWVudCwgYWN0aW9uKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGJh
ZGRpcyBpbmNyZW1lbnQsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxp
bmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKKyAgICBsb2FkcCBD
b2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MF0sIHQwCisgICAgYmFkZGlzIGluY3Jl
bWVudCwgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUK
ICAgICBhY3Rpb24oKQogICAgIC5jb250aW51ZToKIGVuZApAQCAtMTQ5NSw3ICsxNDk2LDggQEAg
bWFjcm8gcHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvYwogICAgIGNvZGVCbG9ja0dl
dHRlcih0MSkKICAgICBjb2RlQmxvY2tTZXR0ZXIodDEpCiAgICAgaWYgbm90IChDX0xPT1Agb3Ig
Q19MT09QX1dJTikKLSAgICAgICAgYmFkZGlzIDUsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVD
b3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDFdLCAuY29udGlu
dWUKKyAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDFdLCB0
MAorICAgICAgICBiYWRkaXMgNSwgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJb
dDBdLCAuY29udGludWUKICAgICAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgICAgICBtb3ZlIGNm
ciwgYTAKICAgICAgICAgICAgIG1vdmUgUEMsIGExCkBAIC0yNTU2LDYgKzI1NTgsMTcgQEAgbWFj
cm8gbm90U3VwcG9ydGVkKCkKICAgICBlbmQKIGVuZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAK
KyAgICBvcmggdHlwZSwgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKK21h
Y3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRh
LCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2Zp
bGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9i
aXRzW3RlbXBdCitlbmQKKwogLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0
X1dJTiBjb25kaXRpb24gaGVyZSwgc2luY2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUg
ZmFsc2Ugb24gV2luZG93cwogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMzcxNgogaWYgV0VCQVNTRU1CTFkgYW5kIG5vdCBYODZfNjRfV0lOCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5o
CShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWFibGVJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDEwIEBAIHB1Ymxp
YzoKICAgICBDYWNoZWFibGVJZGVudGlmaWVyKCkgPSBkZWZhdWx0OwogCiAgICAgc3RhdGljIGlu
bGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21DZWxsKEpTQ2VsbCogaWRlbnRpZmll
cik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJik7Ci0g
ICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVh
YmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJs
b2NrVHlwZSosIGNvbnN0IElkZW50aWZpZXImKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29k
ZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBVbmlxdWVkU3Ry
aW5nSW1wbCopOwogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21SYXdCaXRzKHVpbnRwdHJfdCBy
YXdCaXRzKSB7IHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHJhd0JpdHMpOyB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxl
SWRlbnRpZmllcklubGluZXMuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsMTIgKzM1LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgQ2FjaGVh
YmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVu
dGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCiB7
CiAgICAgcmV0dXJuIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhjb2RlQmxv
Y2ssIGkuaW1wbCgpKTsKIH0KIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9j
ayogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQordGVtcGxhdGUgPHR5cGVuYW1l
IENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlw
ZSogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIEFTU0VSVF9VTlVT
RUQoY29kZUJsb2NrLCBjb2RlQmxvY2stPmhhc0lkZW50aWZpZXIodWlkKSk7CiAgICAgcmV0dXJu
IENhY2hlYWJsZUlkZW50aWZpZXIodWlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlZFR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhY2hlZFR5cGVz
LmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCdWlsdGluTmFt
ZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUNhY2hlRXJyb3IuaCIKICNpbmNsdWRlICJCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3Bh
dGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9y
VW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0
LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBt
ZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9
ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFu
ZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25F
eGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5
LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZSYXJl
RGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fcmFy
ZURhdGEpOyB9CiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0cmluZ0lu
UmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNTdHJpbmcp
OyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxs
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxv
Y2tGb3JDYWxsKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJs
b2NrRm9yQ29uc3RydWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0
YWJsZSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODUsNiArMzg1LDkgQEAg
c3RhdGljIHZvaWQgb3ZlcnJpZGVEZWZhdWx0cygpCiAgICAgICAgIE9wdGlvbnM6OnRocmVzaG9s
ZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSA9IDE1MDA7CiAgICAgICAgIE9wdGlvbnM6OnRo
cmVzaG9sZEZvck9NR09wdGltaXplU29vbigpID0gMTAwOwogICAgIH0KKworICAgIC8vIE9PUFMK
KyAgICAvL09wdGlvbnM6Om1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNG
b3JCYXNlbGluZSgpID0gNDUwOwogfQogCiBzdGF0aWMgdm9pZCBjb3JyZWN0T3B0aW9ucygpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlz
aW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNiBAQCBib29sIGNhblVzZVdlYkFzc2Vt
Ymx5RmFzdE1lbW9yeSgpOwogICAgIHYoSW50MzIsIGV2YWxUaHJlc2hvbGRNdWx0aXBsaWVyLCAx
MCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwgbWF4aW11bUV2YWxDYWNoZWFi
bGVTb3VyY2VMZW5ndGgsIDI1NiwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAotICAgIHYoQm9v
bCwgcmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihJbnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdl
ZW5DaGVja3BvaW50c0ZvckJhc2VsaW5lLCAxMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KEludDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yVXBwZXJU
aWVycywgNTAwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKQEAgLTUzMiw2ICs1MzEsNyBA
QCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoQm9vbCwgdXNlRGF0
YUlDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNJbk9w
dGltaXppbmdKSVQsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURh
dGFJQ1NoYXJpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIHVzZUJh
c2VsaW5lSklUQ29kZVNoYXJpbmcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAg
ICAvKiBGZWF0dXJlIEZsYWdzICovXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyODIwMTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzk2LDkgKzM5NiwxNiBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6
OnByZXBhcmVGb3JFeGVjdXRpCiAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlQnl0ZWNvZGUoKSkK
ICAgICAgICAgY29kZUJsb2NrLT52YWxpZGF0ZSgpOwogCi0gICAgaWYgKE9wdGlvbnM6OnVzZUxM
SW50KCkpCisgICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVmID0gY29k
ZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlKSB7Cisg
ICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoYmFzZWxpbmVS
ZWYucmVsZWFzZU5vbk51bGwoKSk7CisKKyAgICAgICAgLy9pZiAoY29kZUJsb2NrLT51bmxpbmtl
ZENvZGVCbG9jaygpLT5pc0J1aWx0aW5GdW5jdGlvbigpKQorICAgICAgICAvLyAgICBkYXRhTG9n
TG4oIlNoYXJlZCBidWlsdGluISIpOworICAgIH0gZWxzZSBpZiAoT3B0aW9uczo6dXNlTExJbnQo
KSkgeworICAgICAgICAvL2lmICghY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5pc0J1
aWx0aW5GdW5jdGlvbigpKQorICAgICAgICAvLyAgICBkYXRhTG9nTG4oUmF3UG9pbnRlcihjb2Rl
QmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpLCAiOiAiLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0
ZUNvdW50ZXIoKSk7CiAgICAgICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKLSAgICBlbHNlCisg
ICAgfSBlbHNlCiAgICAgICAgIHNldHVwSklUKHZtLCBjb2RlQmxvY2spOwogCiAgICAgaW5zdGFs
bENvZGUodm0sIGNvZGVCbG9jaywgY29kZUJsb2NrLT5jb2RlVHlwZSgpLCBjb2RlQmxvY2stPnNw
ZWNpYWxpemF0aW9uS2luZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21MTEludFRpZXJVcENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVy
V2FybVVwKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9C
QlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JC
QlFPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhy
ZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hv
bGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0
TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAo
KSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hl
ZCgpCkBAIC02NSw5ICs2NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplU29vbigpCiAg
ICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAg
ICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVT
b29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
c2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpLCBu
dWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRG
b3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAgICAgfQogCiAgICAgc3RydWN0IE9TUkVudHJ5RGF0YSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5j
cHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
aWVyVXBDb3VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogVGllclVwQ291bnQ6OlRpZXJVcENvdW50KCkKIHsK
LSAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRl
cldhcm1VcCgpLCBudWxscHRyKTsKKyAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNo
b2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKIH0KIAogVGllclVwQ291bnQ6On5UaWVy
VXBDb3VudCgpID0gZGVmYXVsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UaWVyVXBDb3VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UaWVyVXBDb3VudC5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NS
KCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuIik7Ci0g
ICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFm
dGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6
dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29s
IGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKQEAgLTkwLDE0ICs5MCwxNCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NS
KCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi4iKTsK
LSAgICAgICAgc2V0TmV3VGhyZXNob2xkKDAsIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJl
c2hvbGQoMCk7CiAgICAgfQogCiAgICAgdm9pZCBvcHRpbWl6ZVNvb24odWludDMyX3QgZnVuY3Rp
b25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgc29vbi4iKTsKICAgICAgICAgLy8g
RklYTUU6IE5lZWQgYWRqdXN0bWVudCBvbmNlIHdlIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0
IHdhc20gZnVuY3Rpb25zLgotICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNo
b2xkRm9yT01HT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hv
bGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAogICAg
IHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNiArNjYsMjAgQEAgcHVibGljOgogICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRy
OwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQmFnJiBvcGVyYXRvcj0o
QmFnPFQsIFU+JiYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodW53cmFwcGVkSGVhZCgpID09
IG90aGVyLnVud3JhcHBlZEhlYWQoKSkKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKworICAg
ICAgICBCYWcgZGVzdHJveTsKKyAgICAgICAgZGVzdHJveS5tX2hlYWQgPSB1bndyYXBwZWRIZWFk
KCk7CisgICAgICAgIG1faGVhZCA9IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgb3Ro
ZXIubV9oZWFkID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCiAg
ICAgfkJhZygpCiAgICAgewogICAgICAgICBjbGVhcigpOwpJbmRleDogVG9vbHMvU2NyaXB0cy9y
dW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mt
c3RyZXNzLXRlc3RzCShyZXZpc2lvbiAyODIwMTYpCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mt
c3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC03NzAsMTcgKzc3MCwxOCBAQCBlbmQKIAog
IyBGSVhNRTogbmVlZCB0byBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxODcwMyB0byBlbmFibGUgdGhpcyBvbiBMaW51eC9NSVBTLgogZGVmIHJ1bkJ5dGVjb2Rl
Q2FjaGVJbXBsKG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucywgKmFkZGl0aW9uYWxFbnYpCi0g
ICAgaWYgKCRob3N0T1MgPT0gImRhcndpbiIpCi0gICAgICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRl
Y29kZS1jYWNoZSIKLSAgICBlbHNpZiAoJGhvc3RPUyA9PSAibGludXgiICYmICRhcmNoaXRlY3R1
cmUgIT0gIm1pcHMiKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhY
WFgiCi0gICAgZWxzZQotICAgICAgICBza2lwCi0gICAgICAgIHJldHVybgotICAgIGVuZAorICAg
ICMgT09QUworICAgICNpZiAoJGhvc3RPUyA9PSAiZGFyd2luIikKKyAgICAjICAgIGZpbGVUZW1w
bGF0ZSA9ICJieXRlY29kZS1jYWNoZSIKKyAgICAjZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAm
JiAkYXJjaGl0ZWN0dXJlICE9ICJtaXBzIikKKyAgICAjICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRl
Y29kZS1jYWNoZVhYWFhYWCIKKyAgICAjZWxzZQorICAgICMgICAgc2tpcAorICAgICMgICAgcmV0
dXJuCisgICAgI2VuZAogCi0gICAgb3B0aW9ucyA9IEJBU0VfT1BUSU9OUyArIEZUTF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0
aW9ucwotICAgIGFkZFJ1bkNvbW1hbmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9I
ZWxwZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBs
YXRlLnRvX3MsICp2bUNvbW1hbmQsICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRP
dXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQorICAgICNv
cHRpb25zID0gQkFTRV9PUFRJT05TICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMgKyAkdGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25zCisgICAgI2FkZFJ1bkNvbW1h
bmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxwZXJzICsgImJ5dGVjb2RlLWNh
Y2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRlLnRvX3MsICp2bUNvbW1hbmQs
ICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVF
cnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQogZW5kCiAKIGRlZiBydW5CeXRlY29kZUNhY2hl
KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437586</attachid>
            <date>2021-09-07 20:25:02 -0700</date>
            <delta_ts>2021-09-07 22:05:22 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>464804</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODMyLDYgKzgzMiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjY4LDYgKzM2NjksOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjU4LDYgKzYyNjEsOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05Njk5LDYgKzk3MDQsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNjEz
MjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAgb3AgOmdldF9hcmd1
bWVudCwKICAgICAgICAgaW5kZXg6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAg
ICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxl
LiosCiAgICAgfQogCiBvcCA6YXJndW1lbnRfY291bnQsCkBAIC0xODMsNyArMTgzLDcgQEAgb3Ag
OnRvX3RoaXMsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgY2FjaGVkU3RydWN0dXJlSUQ6IFN0
cnVjdHVyZUlELAogICAgICAgICB0b1RoaXNTdGF0dXM6IFRvVGhpc1N0YXR1cywKLSAgICAgICAg
cHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwK
ICAgICB9CiAKIG9wIDpjaGVja190ZHosCkBAIC0yOTAsOSArMjkwLDEwIEBAIG9wX2dyb3VwIDpQ
cm9maWxlZEJpbmFyeU9wLAogICAgICAgICBsaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAg
cmhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVz
LAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkCiAgICAgfSwKICAgICBtZXRhZGF0YTog
ewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0
aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9ncm91cCA6VmFsdWVQ
cm9maWxlZEJpbmFyeU9wLApAQCAtMzA5LDcgKzMxMCw3IEBAIG9wX2dyb3VwIDpWYWx1ZVByb2Zp
bGVkQmluYXJ5T3AsCiAgICAgICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAg
bWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlCisgICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6Yml0bm90LApAQCAtMzE4LDcgKzMxOSw3
IEBAIG9wIDpiaXRub3QsCiAgICAgICAgIG9wZXJhbmQ6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9
LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZQorICAgICAg
ICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlVuYXJ5T3AsCkBA
IC0zNTEsOSArMzUyLDEwIEBAIG9wX2dyb3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAg
IF0sCiAgICAgYXJnczogewogICAgICAgICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAg
ICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAg
ICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxl
OiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzYzLDcg
KzM2NSw3IEBAIG9wIDp0b19vYmplY3QsCiAgICAgICAgIG1lc3NhZ2U6IHVuc2lnbmVkLAogICAg
IH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVBy
b2ZpbGVkVW5hcnlPcCwKQEAgLTM3Niw3ICszNzgsNyBAQCBvcF9ncm91cCA6VmFsdWVQcm9maWxl
ZFVuYXJ5T3AsCiAgICAgICAgIG9wZXJhbmQ6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAg
IG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJv
ZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAgfQogCiBvcCA6bmVnYXRlLApAQCAtMzg0LDkgKzM4
NiwxMCBAQCBvcCA6bmVnYXRlLAogICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAg
ICAgb3BlcmFuZDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRU
eXBlLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApAQCAt
NDc3LDcgKzQ4MCw3IEBAIG9wIDpnZXRfYnlfaWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewog
ICAgICAgICBtb2RlTWV0YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCi0gICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAg
fQogCiBvcCA6Z2V0X2J5X2lkX3dpdGhfdGhpcywKQEAgLTQ4OCw3ICs0OTEsNyBAQCBvcCA6Z2V0
X2J5X2lkX3dpdGhfdGhpcywKICAgICAgICAgcHJvcGVydHk6IHVuc2lnbmVkLAogICAgIH0sCiAg
ICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBw
cm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAKIG9wIDpnZXRfYnlfdmFsX3dpdGhfdGhp
cywKQEAgLTQ5OSw3ICs1MDIsNyBAQCBvcCA6Z2V0X2J5X3ZhbF93aXRoX3RoaXMsCiAgICAgICAg
IHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmls
ZS4qLAogICAgIH0KIAogb3AgOmdldF9ieV9pZF9kaXJlY3QsCkBAIC01MDksNyArNTEyLDcgQEAg
b3AgOmdldF9ieV9pZF9kaXJlY3QsCiAgICAgICAgIHByb3BlcnR5OiB1bnNpZ25lZCwKICAgICB9
LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwgIyBub3Qg
dXNlZCBpbiBsbGludAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwgIyBub3QgdXNl
ZCBpbiBsbGludAogICAgICAgICBzdHJ1Y3R1cmVJRDogU3RydWN0dXJlSUQsCiAgICAgICAgIG9m
ZnNldDogdW5zaWduZWQsCiAgICAgfQpAQCAtNTIwLDcgKzUyMyw3IEBAIG9wIDpnZXRfcHJvdG90
eXBlX29mLAogICAgICAgICB2YWx1ZTogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0
YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxl
OiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAKIG9wIDp0cnlfZ2V0X2J5X2lkLApAQCAtNTMwLDcg
KzUzMyw3IEBAIG9wIDp0cnlfZ2V0X2J5X2lkLAogICAgICAgICBwcm9wZXJ0eTogdW5zaWduZWQs
CiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOnB1dF9ieV9p
ZCwKQEAgLTU3MSw3ICs1NzQsNyBAQCBvcCA6Z2V0X2J5X3ZhbCwKICAgICAgICAgcHJvcGVydHk6
IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAg
ICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBzZWVuSWRlbnRpZmllcnM6
IEdldEJ5VmFsSGlzdG9yeSwKICAgICB9CkBAIC01ODMsNyArNTg2LDcgQEAgb3AgOmdldF9wcml2
YXRlX25hbWUsCiAgICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHBy
b2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgICAgICBzdHJ1Y3R1cmVJRDogU3RydWN0dXJlSUQs
CiAgICAgICAgIG9mZnNldDogdW5zaWduZWQsCiAgICAgICAgIHByb3BlcnR5OiBXcml0ZUJhcnJp
ZXJbSlNDZWxsXSwKQEAgLTg0Miw3ICs4NDUsNyBAQCBvcCA6Y2FsbCwKICAgICB9LAogICAgIG1l
dGFkYXRhOiB7CiAgICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCi0gICAg
ICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxl
LiosCiAgICAgfQogCiBvcCA6dGFpbF9jYWxsLApAQCAtODU0LDcgKzg1Nyw3IEBAIG9wIDp0YWls
X2NhbGwsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewogICAgICAgICBjYWxsTGlua0luZm86IExM
SW50Q2FsbExpbmtJbmZvLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAg
IHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOmNhbGxfZXZhbCwKQEAgLTg2
Nyw3ICs4NzAsNyBAQCBvcCA6Y2FsbF9ldmFsLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKICAg
ICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKLSAgICAgICAgcHJvZmlsZTog
VmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAK
IG9wIDpjYWxsX3ZhcmFyZ3MsCkBAIC04ODEsNyArODg0LDcgQEAgb3AgOmNhbGxfdmFyYXJncywK
ICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9m
aWxlLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHByb2ZpbGU6IFZh
bHVlUHJvZmlsZS4qLAogICAgIH0sCiAgICAgdG1wczogewogICAgICAgICBhcmdDb3VudEluY2x1
ZGluZ1RoaXM6IHVuc2lnbmVkLApAQCAtOTAyLDcgKzkwNSw3IEBAIG9wIDp0YWlsX2NhbGxfdmFy
YXJncywKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJy
YXlQcm9maWxlLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0sCiAgICAgdG1wczogewogICAgICAgICBhcmdDb3Vu
dEluY2x1ZGluZ1RoaXM6IHVuc2lnbmVkCkBAIC05MjMsNyArOTI2LDcgQEAgb3AgOnRhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cywKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOmNvbnN0cnVj
dCwKQEAgLTkzNSw3ICs5MzgsNyBAQCBvcCA6Y29uc3RydWN0LAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKICAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKLSAgICAgICAg
cHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwK
ICAgICB9CiAKIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKQEAgLTk0OSw3ICs5NTIsNyBAQCBvcCA6
Y29uc3RydWN0X3ZhcmFyZ3MsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJh
eVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAor
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9LAogICAgIHRtcHM6IHsKICAg
ICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzOiB1bnNpZ25lZApAQCAtMTAyOCw3ICsxMDMxLDcg
QEAgb3AgOmdldF9mcm9tX3Njb3BlLAogICAgICAgICAgICAgc3RydWN0dXJlOiBXcml0ZUJhcnJp
ZXJCYXNlW1N0cnVjdHVyZV0sCiAgICAgICAgIH0sCiAgICAgICAgIG9wZXJhbmQ6IHVpbnRwdHJf
dCwgI29mZnNldCA2Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwgIyBvZmZzZXQgNwor
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwgIyBvZmZzZXQgNwogICAgIH0sCiAgICAg
bWV0YWRhdGFfaW5pdGlhbGl6ZXJzOiB7CiAgICAgICAgIGdldFB1dEluZm86IDpnZXRQdXRJbmZv
LApAQCAtMTA2NSw3ICsxMDY4LDcgQEAgb3AgOmdldF9mcm9tX2FyZ3VtZW50cywKICAgICAgICAg
aW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmls
ZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9
CiAKIG9wIDpwdXRfdG9fYXJndW1lbnRzLApAQCAtMTE4Nyw3ICsxMTkwLDcgQEAgb3AgOmVudW1l
cmF0b3JfZ2V0X2J5X3ZhbCwKICAgICAgICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lzdGVyLAog
ICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAor
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCiAgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFk
YXRhLAogICAgIH0KQEAgLTEyNDksMTEgKzEyNTIsMTEgQEAgb3AgOml0ZXJhdG9yX29wZW4sCiAg
ICAgfSwKICAgICBtZXRhZGF0YTogewogICAgICAgICBpdGVyYXRpb25NZXRhZGF0YTogSXRlcmF0
aW9uTW9kZU1ldGFkYXRhLAotICAgICAgICBpdGVyYWJsZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
KyAgICAgICAgaXRlcmFibGVQcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICAgICAgY2FsbExp
bmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKLSAgICAgICAgaXRlcmF0b3JQcm9maWxlOiBWYWx1
ZVByb2ZpbGUsCisgICAgICAgIGl0ZXJhdG9yUHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAg
ICAgIG1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwKLSAgICAgICAgbmV4dFByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgbmV4dFByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAog
ICAgIH0sCiAgICAgY2hlY2twb2ludHM6IHsKICAgICAgICAgc3ltYm9sQ2FsbDogbmlsLApAQCAt
MTI3NCwxMSArMTI3NywxMSBAQCBvcCA6aXRlcmF0b3JfbmV4dCwKICAgICAgICAgaXRlcmF0aW9u
TWV0YWRhdGE6IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwKICAgICAgICAgaXRlcmFibGVQcm9maWxl
OiBBcnJheVByb2ZpbGUsCiAgICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8s
Ci0gICAgICAgIG5leHRSZXN1bHRQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIG5leHRS
ZXN1bHRQcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICAgICAgZG9uZU1vZGVNZXRhZGF0YTog
R2V0QnlJZE1vZGVNZXRhZGF0YSwKLSAgICAgICAgZG9uZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
KyAgICAgICAgZG9uZVByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgICAgICB2YWx1ZU1vZGVN
ZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwKLSAgICAgICAgdmFsdWVQcm9maWxlOiBWYWx1
ZVByb2ZpbGUsCisgICAgICAgIHZhbHVlUHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAgfSwK
ICAgICB0bXBzOiB7CiAgICAgICAgIG5leHRSZXN1bHQ6IEpTVmFsdWUsCkBAIC0xMzIyLDcgKzEz
MjUsNyBAQCBvcCA6Z2V0X2ludGVybmFsX2ZpZWxkLAogICAgICAgICBpbmRleDogdW5zaWduZWQs
CiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOnB1dF9pbnRl
cm5hbF9maWVsZCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAy
ODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMjAgKzU3LDQyIEBAIFZhbHVl
UHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICBVTlVTRURfUEFSQU0oY2hl
Y2twb2ludEluZGV4KTsKICAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlTWV0YWRhdGE6Om9wY29k
ZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKICAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5k
ZXgpIHsKLSAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJuICZt
ZXRhZGF0YS5tX2l0ZXJhdG9yUHJvZmlsZTsKLSAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
Z2V0TmV4dDogcmV0dXJuICZtZXRhZGF0YS5tX25leHRQcm9maWxlOworICAgICAgICBjYXNlIE9w
SXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1cm4gbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGU7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OmdldE5leHQ6IHJldHVybiBtZXRhZGF0
YS5tX25leHRQcm9maWxlOwogICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAKICAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRlY29kZU1l
dGFkYXRhOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CiAgICAgICAgIHN3aXRjaCAo
Y2hlY2twb2ludEluZGV4KSB7Ci0gICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVO
ZXh0OiByZXR1cm4gJm1ldGFkYXRhLm1fbmV4dFJlc3VsdFByb2ZpbGU7Ci0gICAgICAgIGNhc2Ug
T3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJldHVybiAmbWV0YWRhdGEubV9kb25lUHJvZmlsZTsK
LSAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiAmbWV0YWRhdGEu
bV92YWx1ZVByb2ZpbGU7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0
OiByZXR1cm4gbWV0YWRhdGEubV9uZXh0UmVzdWx0UHJvZmlsZTsKKyAgICAgICAgY2FzZSBPcEl0
ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIG1ldGFkYXRhLm1fZG9uZVByb2ZpbGU7CisgICAg
ICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1cm4gbWV0YWRhdGEubV92YWx1
ZVByb2ZpbGU7CiAgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgCi0gICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9m
aWxlOworICAgICAgICByZXR1cm4gbWV0YWRhdGEubV9wcm9maWxlOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yKHVuc2ln
bmVkIGNoZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURfUEFSQU0oY2hlY2twb2ludEluZGV4
KTsKKyAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9v
cGVuKSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2Ug
T3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9m
ZnNldE9mSXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46Omdl
dE5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFByb2ZpbGUoKTsK
KyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0
ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAg
ICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJh
dG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZEb25l
UHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1ZTogcmV0dXJu
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2ZpbGUoKTsKKyAgICAgICAgZGVm
YXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSAKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24g
MjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86
OnVubGluayhWTSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1D
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRo
U3RhcnQoKQotewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5h
bFB0clRhZz4obV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNF
X0FTU0VSVCghaXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJ
bmZvOjpzZXRNYXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID0gdmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNE
aXJlY3QoKSAmJiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwog
dm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVT
cGVjaWZpY0NhbGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5
OSwxMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9m
cmFtZVNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0
YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2Fs
bCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRV
c2VzRGF0YUlDcyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwot
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxM
aW5rSW5mb0dQUik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExp
bmtJbmZvR1BSOwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgp
OwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBzbG93UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJ
QyA9PSBVc2VEYXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5z
Y3JhdGNoUmVnaXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcg
QEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAg
Z29Qb2x5bW9ycGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywg
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVN
YXNrKSk7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAg
ICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMu
bGluaygmaml0KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBw
cmVwLgogICAgICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxM
aW5rSW5mb0dQUiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRy
eVB0clRhZyk7CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0
aFBhdGNoKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlm
IChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAg
ICAgICAgIGNhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNh
bGxMaW5rSW5mbyk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAg
ICAgICB1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2Rl
SUMubV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihjYWxsZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEzICszNDQs
MzQgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGpp
dCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVz
ZURhdGFJQykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1
cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VE
YXRhSUMsIG51bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBp
ZiAoaXNEYXRhSUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIg
IT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJ
Qy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1
cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQor
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2Fs
bCgpKTsKLSAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAg
c2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aElt
cGwodGhpcywgaml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlz
VGFpbENhbGwoKSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVs
cGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0
aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5m
b0dQUiwgVXNlRGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7
CiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBl
cnMmIGppdCkKQEAgLTM2OSwxNyArMzgxLDMwIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xv
d1BhdGgoVk0mIHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJU
YWcpOwogfQogCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUo
Y2FsbExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxp
emVEYXRhSUMoVk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0lu
Zm8sIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgbV9j
b2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4
KTsKKyAgICBzZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQ
Uik7CisgICAgbV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRp
b247CisgICAgaWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpCisgICAg
ICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+
KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBm
b3IgcmVmIGNvdW50aW5nPworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAg
ICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRT
bG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBD
YWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVz
ZURhdGFJQzo6Tm8pOwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0g
ICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAg
ICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNh
bGwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
CiAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CkBAIC0zOTcsNyArNDIyLDcgQEAgdm9p
ZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhcwogCiAgICAgYXV0byBmYXN0UGF0
aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgICAgIHUuY29k
ZUlDLm1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihmYXN0UGF0aFN0YXJ0KTsKICAgICB9KTsKIAogICAgIC8vIC0gSWYgd2UncmUgbm90IHll
dCBsaW5rZWQsIHRoaXMgaXMgYSBqdW1wIHRvIHRoZSBzbG93IHBhdGguCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODIw
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDExIEBAIGNsYXNzIEpTRnVuY3Rpb247CiBlbnVtIE9w
Y29kZUlEIDogdW5zaWduZWQ7CiBzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGE7CiAKK3N0cnVj
dCBVbmxpbmtlZENhbGxMaW5rSW5mbzsKKwogY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBh
Y2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIHB1YmxpYzoKLSAgICBlbnVtIENh
bGxUeXBlIHsKKyAgICBlbnVtIENhbGxUeXBlIDogdWludDhfdCB7CiAgICAgICAgIE5vbmUsCiAg
ICAgICAgIENhbGwsCiAgICAgICAgIENhbGxWYXJhcmdzLApAQCAtMTY1LDYgKzE2Nyw4IEBAIHB1
YmxpYzoKICAgICAgICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgfQogCisgICAgdm9p
ZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgVW5saW5rZWRDYWxsTGlua0luZm8mLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKwogICAgIEdQUlJlZyBjYWxsZWVHUFIo
KSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsgfQogICAgIAogICAgIGVudW0gY2xhc3MgVXNl
RGF0YUlDIDogdWludDhfdCB7CkBAIC0xNzMsMTMgKzE3NywxNiBAQCBwdWJsaWM6CiAgICAgfTsK
IAogcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1w
bChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVt
aXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxl
ZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGws
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKIHB1YmxpYzoKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRE
YXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwg
VXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2b2lk
IGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXREaXJlY3RU
YWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
Jik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9TdHViKCk7
CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VXNlRGF0
YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsyMTAsNiBA
QCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAotICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7CiAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7CiAKQEAg
LTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVsbHB0cjsK
ICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25jZSgpCiAg
ICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMwOCw5ICsz
MDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlwZT4obV9j
YWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENh
bGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgfQogCiAg
ICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgxLDcgKzM4
Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OworCisgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOworCiAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAg
dW5pb24gVW5pb25UeXBlIHsKQEAgLTM5Nyw2ICs0MDAsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsTG9jYXRpb247
CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4g
bV9jYWxsZWVMb2NhdGlvbjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJu
YWxQdHJUYWc+IG1fc2xvd1BhdGhTdGFydDsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKICAgICAgICAgfSBjb2RlSUM7CiAg
ICAgfSB1OwogCkBAIC00MjQsNiArNDI4LDEzIEBAIGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxM
aW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKTsKIH0K
IAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNh
biB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJbmZvOjpDYWxs
VHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBk
b25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBm
cmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDggQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJj
ZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVy
cygpKTsKKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxp
bnRFeGVjdXRlQ291bnRlcigpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRk
KHRoaXMpOwogfQpAQCAtMzE4LDcgKzMyMCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIEMKICAgICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKICAgICBvcHRp
bWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKKyAgICAvL2ppdEFmdGVy
V2FybVVwKCk7CiAKICAgICBpZiAob3RoZXIubV9yYXJlRGF0YSkgewogICAgICAgICBjcmVhdGVS
YXJlRGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC0zNTksNyArMzYxLDkgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVy
KCkpOwogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSk7Ci0gICAgCisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENv
ZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKKwogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCku
YWRkKHRoaXMpOwogfQogCkBAIC0zNzAsNyArMzc0LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2so
Vk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2FuJ3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2Vk
IGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJvY2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5l
cmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJvZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29u
IGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5lc3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUg
Zm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJl
bHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhlIGxpdmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNp
ZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suIEFsc28s
IEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFu
IFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhlIGJ5dGVjb2RlIG11c3QgcmVtYWluIHRoZSBz
YW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5nIGFuIFVubGlua2VkQ29kZUJsb2NrLgogYm9v
bCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3du
ZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCiAgICAg
SlNTY29wZSogc2NvcGUpCiB7CkBAIC00NjYsNiArNDcxLDIxIEBAIGJvb2wgQ29kZUJsb2NrOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgYnJlYWs7IFwKICAgICB9CiAKKyNkZWZp
bmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3Ap
OiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFk
YXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlLT5iaW5hcnlBcml0aFByb2ZpbGUo
Ynl0ZWNvZGUubV9wcm9maWxlSW5kZXgpOyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorI2Rl
ZmluZSBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29w
KTogeyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+dW5hcnlBcml0aFByb2ZpbGUo
Ynl0ZWNvZGUubV9wcm9maWxlSW5kZXgpOyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlQobV9udW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyA9PSAw
KTsKKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGlu
c3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVj
dGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5v
cGNvZGVJRCgpOwpAQCAtNTI4LDE0ICs1NDgsMTQgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJvbWlzZSkKICAgICAgICAg
TElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9wQWRkKQotICAgICAgICBM
SU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBMSU5LKE9wU3ViKQotCi0g
ICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMpCi0gICAgICAgIExJTkso
T3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcEFkZCkKKyAg
ICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVsKQorICAgICAgICBMSU5L
X1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAgIExJTktfV0lUSF9CSU5B
UllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhf
UFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUo
T3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wRGVjKQogCiAg
ICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC03NjEsNiArNzgxLDM1IEBAIGJvb2wgQ29kZUJs
b2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICN1bmRlZiBMSU5LX0ZJRUxECiAjdW5kZWYg
TElOSwogCisgICAgaWYgKCF1bmxpbmtlZENvZGVCbG9jay0+bV92YWx1ZVByb2ZpbGVzLnNpemUo
KSAmJiBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKQorICAgICAgICB1bmxpbmtl
ZENvZGVCbG9jay0+bV92YWx1ZVByb2ZpbGVzID0gRml4ZWRWZWN0b3I8VmFsdWVQcm9maWxlPiht
X251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsKKworICAgIGlmIChtX21ldGFkYXRh
KSB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICAgICAgYXV0byBhc3NpZ24gPSBb
Jl0gKFZhbHVlUHJvZmlsZSomIHB0cikgeworICAgICAgICAgICAgcHRyID0gJnVubGlua2VkQ29k
ZUJsb2NrLT5tX3ZhbHVlUHJvZmlsZXNbaW5kZXgrK107CisgICAgICAgIH07CisKKyNkZWZpbmUg
VklTSVQoX19vcCkgXAorICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0
byYgbWV0YWRhdGEpIHsgYXNzaWduKG1ldGFkYXRhLm1fcHJvZmlsZSk7IH0pOworICAgICAgICBG
T1JfRUFDSF9PUENPREVfV0lUSF9WQUxVRV9QUk9GSUxFKFZJU0lUKQorI3VuZGVmIFZJU0lUCisK
KyAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEl0ZXJhdG9yT3Blbj4oWyZdIChhdXRvJiBt
ZXRhZGF0YSkgeyAKKyAgICAgICAgICAgIGFzc2lnbihtZXRhZGF0YS5tX2l0ZXJhYmxlUHJvZmls
ZSk7CisgICAgICAgICAgICBhc3NpZ24obWV0YWRhdGEubV9pdGVyYXRvclByb2ZpbGUpOworICAg
ICAgICAgICAgYXNzaWduKG1ldGFkYXRhLm1fbmV4dFByb2ZpbGUpOworICAgICAgICB9KTsKKwor
ICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wSXRlcmF0b3JOZXh0PihbJl0gKGF1dG8mIG1l
dGFkYXRhKSB7CisgICAgICAgICAgICBhc3NpZ24obWV0YWRhdGEubV9uZXh0UmVzdWx0UHJvZmls
ZSk7CisgICAgICAgICAgICBhc3NpZ24obWV0YWRhdGEubV9kb25lUHJvZmlsZSk7CisgICAgICAg
ICAgICBhc3NpZ24obWV0YWRhdGEubV92YWx1ZVByb2ZpbGUpOworICAgICAgICB9KTsKKworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA9PSBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVBy
b2ZpbGVzKTsKKyAgICB9CisKICAgICBpZiAobV91bmxpbmtlZENvZGUtPndhc0NvbXBpbGVkV2l0
aENvbnRyb2xGbG93UHJvZmlsZXJPcGNvZGVzKCkpCiAgICAgICAgIGluc2VydEJhc2ljQmxvY2tC
b3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcigpOwogCkBAIC03NjgsNyArODE3LDcgQEAg
Ym9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgIC8vIHJlbHkgb24g
dGhlIGluc3RydWN0aW9uIGNvdW50IChhbmQgYXJlIGluIHRoZW9yeSBwZXJtaXR0ZWQgdG8gYWxz
byBpbnNwZWN0IHRoZQogICAgIC8vIGluc3RydWN0aW9uIHN0cmVhbSB0byBtb3JlIGFjY3VyYXRl
IGFzc2VzcyB0aGUgY29zdCBvZiB0aWVyLXVwKS4KICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7
Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKKyAgICAvL2ppdEFmdGVyV2FybVVwKCk7CiAKICAgICAv
LyBJZiB0aGUgY29uY3VycmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2RlIGJsb2NrJ3MgaGFz
aCwgdGhlbiBjb21wdXRlIGl0IGhlcmUKICAgICAvLyBzeW5jaHJvbm91c2x5LgpAQCAtNzg5LDYg
KzgzOCw3NyBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb25Db21tb24oVk0mCiAgICAg
bV9vd25lckVkZ2Uuc2V0KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpjcmVh
dGUodm0sIHRoaXMpKTsKIH0KIAordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFz
ZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7CisgICAgc2V0SklUQ29k
ZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8mIGppdENv
ZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAgICAgICAgIEhhbmRs
ZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAgaGFuZGxlci5uYXRp
dmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQpKS5y
ZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9CisgICAgfQorCisg
ICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAg
IGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOworICAgICAgICBq
aXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGppdENvZGUtPm1f
Y29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaml0
Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gZW50
cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAgICAgIHN3aXRjaCAo
ZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6Okds
b2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ld
ID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7CisgICAgICAg
ICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvID0gKnN0
YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9hZCk7CisgICAgICAg
ICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXREYXRhLm1fY2FsbExpbmtJ
bmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KSk7
CisgICAgICAgICAgICAgICAgLy8gT09QUzogZG9uJ3QgaGFyZGNvZGUgdGhlc2UgcmVnaXN0ZXJz
IGxpa2UgdGhpcy4KKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmluaXRpYWxpemVEYXRh
SUModm0oKSwgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpy
ZWdUMik7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGNh
bGxMaW5rSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbzogewor
ICAgICAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1Yklu
Zm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyo+KGVudHJ5LnBheWxv
YWQpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGppdERh
dGEubV9zdHViSW5mb3MuYWRkKHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZSwgQ29kZU9yaWdp
bih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBzdHVi
SW5mby0+aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKHRoaXMsIHVubGlu
a2VkU3R1YkluZm8pOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xb
aV0gPSBzdHViSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6IHsKKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVu
dHJ5LnBheWxvYWQpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xb
aV0gPSBmdW5jdGlvbkRlY2woaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9u
RXhwcjogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oZW50cnkucGF5bG9hZCk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENv
bnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIEdsb2JhbENvZGU6CisgICAgY2FzZSBN
b2R1bGVDb2RlOgorICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRnVuY3Rpb25Db2RlOgor
ICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ug
d2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCisgICAgICAgIC8vIERvbid0IG92ZXJy
aWRlIHRoYXQgb2JzZXJ2YXRpb24uCisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9
IGNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwoKSkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9u
KHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoT3B0aW9uczo6dXNlQmFz
ZWxpbmVKSVRDb2RlU2hhcmluZygpKQorICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3Vu
bGlua2VkQmFzZWxpbmVDb2RlID0gV1RGTW92ZShqaXRDb2RlKTsKK30KKwogQ29kZUJsb2NrOjp+
Q29kZUJsb2NrKCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTE1MTksMzkgKzE2MzksNDAg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogCiAgICAgdXBkYXRl
QWxsUHJlZGljdGlvbnMoKTsKIAotI2lmIEVOQUJMRShKSVQpCi0gICAgYm9vbCBpc0VsaWdpYmxl
Rm9yTExJbnREb3duZ3JhZGUgPSBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZTsKLSAgICBt
X2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IGZhbHNlOwotICAgIC8vIElmIEJhc2VsaW5l
SklUIGNvZGUgaXMgbm90IGV4ZWN1dGluZywgYW5kIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCBl
eGlzdHMsIHdlIGF0dGVtcHQKLSAgICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFu
ZCByZWluc3RhbGwgTExJbnQgY29kZSB0byBzYXZlIEpJVCBtZW1vcnkuCi0gICAgaWYgKE9wdGlv
bnM6OnVzZUxMSW50KCkgJiYgIW1faGFzTGlua2VkT1NSRXhpdCAmJiBqaXRUeXBlKCkgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQgJiYgIW1fdm0tPmhlYXAuY29kZUJsb2NrU2V0KCkuaXNDdXJyZW50
bHlFeGVjdXRpbmcodGhpcykpIHsKLSAgICAgICAgaWYgKENvZGVCbG9jayogb3B0aW1pemVkQ29k
ZUJsb2NrID0gb3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKCFvcHRp
bWl6ZWRDb2RlQmxvY2stPm1fb3NyRXhpdENvdW50ZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAo
aXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0
Q29kZSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRyeXBvaW50
KHRoaXMpOwotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkgPT0g
SklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVy
cygpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxl
ckluZm8mIHVubGlua2VkSGFuZGxlciA9IG1fdW5saW5rZWRDb2RlLT5leGNlcHRpb25IYW5kbGVy
KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX3Jh
cmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVyLnRh
cmdldCkucHRyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUo
dW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFn
PihMTEludDo6aGFuZGxlQ2F0Y2goaW5zdHJ1Y3Rpb24ud2lkdGgoKSkuY29kZSgpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB1bmxpbmtJbmNvbWluZ0Nh
bGxzKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGNsZWFyIHRoZXNl
IG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxpemVVbmNvbmRpdGlvbmFsbHkgYWxsIGNvbXBpbGVy
IHRocmVhZHMKLSAgICAgICAgICAgICAgICAgICAgLy8gYXJlIHNhZmVwb2ludGVkLCBtZWFuaW5n
IHRoZXkncmUgcnVubmluZyBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIGJ5dGVjb2RlIHBhcnNlciwg
YW5kIGJ5dGVjb2RlCi0gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlciBpcyB0aGUgb25seSBk
YXRhIHN0cnVjdHVyZSBwb2ludGluZyBpbnRvIHRoZSB2YXJpb3VzICppbmZvcy4KLSAgICAgICAg
ICAgICAgICAgICAgcmVzZXRKSVREYXRhKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotI2VuZGlmCisvLyBPT1BTOiByZWNvbmNp
bGUgdGhpcworLy8jaWYgRU5BQkxFKEpJVCkKKy8vICAgIGJvb2wgaXNFbGlnaWJsZUZvckxMSW50
RG93bmdyYWRlID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGU7CisvLyAgICBtX2lzRWxp
Z2libGVGb3JMTEludERvd25ncmFkZSA9IGZhbHNlOworLy8gICAgLy8gSWYgQmFzZWxpbmVKSVQg
Y29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0
cywgd2UgYXR0ZW1wdAorLy8gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGluZSBKSVQgY29kZSBhbmQg
cmVpbnN0YWxsIExMSW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5LgorLy8gICAgaWYgKE9wdGlv
bnM6OnVzZUxMSW50KCkgJiYgIW1faGFzTGlua2VkT1NSRXhpdCAmJiBqaXRUeXBlKCkgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQgJiYgIW1fdm0tPmhlYXAuY29kZUJsb2NrU2V0KCkuaXNDdXJyZW50
bHlFeGVjdXRpbmcodGhpcykpIHsKKy8vICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRD
b2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisvLyAgICAgICAgICAgIGlmICgh
b3B0aW1pemVkQ29kZUJsb2NrLT5tX29zckV4aXRDb3VudGVyKSB7CisvLyAgICAgICAgICAgICAg
ICBpZiAoaXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlKSB7CisvLyAgICAgICAgICAgICAgICAg
ICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKKy8vICAgICAgICAgICAgICAgICAgICBMTEludDo6c2V0
RW50cnlwb2ludCh0aGlzKTsKKy8vICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChq
aXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7CisvLworLy8gICAgICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxpbmtlZENvZGUtPm51bWJlck9m
RXhjZXB0aW9uSGFuZGxlcnMoKTsgaSsrKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IG1fdW5saW5rZWRDb2Rl
LT5leGNlcHRpb25IYW5kbGVyKGkpOworLy8gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVy
SW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07CisvLyAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9ucygp
LmF0KHVubGlua2VkSGFuZGxlci50YXJnZXQpLnB0cigpOworLy8gICAgICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJl
bDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihMTEludDo6aGFuZGxlQ2F0Y2goaW5zdHJ1Y3Rpb24u
d2lkdGgoKSkuY29kZSgpKSk7CisvLyAgICAgICAgICAgICAgICAgICAgfQorLy8KKy8vICAgICAg
ICAgICAgICAgICAgICB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisvLworLy8gICAgICAgICAgICAg
ICAgICAgIC8vIEl0J3Mgc2FmZSB0byBjbGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGluIGZp
bmFsaXplVW5jb25kaXRpb25hbGx5IGFsbCBjb21waWxlciB0aHJlYWRzCisvLyAgICAgICAgICAg
ICAgICAgICAgLy8gYXJlIHNhZmVwb2ludGVkLCBtZWFuaW5nIHRoZXkncmUgcnVubmluZyBlaXRo
ZXIgYmVmb3JlIG9yIGFmdGVyIGJ5dGVjb2RlIHBhcnNlciwgYW5kIGJ5dGVjb2RlCisvLyAgICAg
ICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50
aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgorLy8gICAgICAgICAgICAgICAgICAgIHJlc2V0
SklURGF0YSgpOworLy8gICAgICAgICAgICAgICAgfSBlbHNlCisvLyAgICAgICAgICAgICAgICAg
ICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOworLy8gICAgICAgICAgICB9
CisvLyAgICAgICAgfQorLy8gICAgfQorLy8KKy8vI2VuZGlmCiAgICAgCiAgICAgaWYgKEpJVENv
ZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKQogICAgICAgICBmaW5hbGl6ZUxMSW50
SW5saW5lQ2FjaGVzKCk7CkBAIC0xNTc5LDcgKzE3MDAsNyBAQCB2b2lkIENvZGVCbG9jazo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVu
azoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rOgotICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQo
KTsKKyAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jb3VudCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAg
ICAgICAgICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKQEAgLTMwNzks
NyArMzIwMCw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAog
I2lmIEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAg
cmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4g
SklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzE2NCw3ICsz
Mjg1LDcgQEAgVmFsdWVQcm9maWxlKiBDb2RlQmxvY2s6OnRyeUdldFZhbHVlUHJvZgogCiAjZGVm
aW5lIENBU0UoT3ApIFwKICAgICBjYXNlIE9wOjpvcGNvZGVJRDogXAotICAgICAgICByZXR1cm4g
Jmluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0YSh0aGlzKS5tX3Byb2ZpbGU7CisgICAgICAg
IHJldHVybiBpbnN0cnVjdGlvbi0+YXM8T3A+KCkubWV0YWRhdGEodGhpcykubV9wcm9maWxlOwog
CiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJTEUoQ0FTRSkKIApAQCAt
MzI5NSwxMyArMzQxNiwxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5
QXJpCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgot
ICAgICAgICByZXR1cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJv
ZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BN
dWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+
YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9z
dWI6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJp
dGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMp
Lm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5h
czxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJu
IHBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZh
dWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMzEzLDExICszNDM0LDExIEBAIFVuYXJ5
QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5v
cGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFz
PE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAg
IGNhc2Ugb3BfaW5jOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0
aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0
dXJuICZwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAg
ICAgIHJldHVybiBwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzQ2NywyOCArMzU4OCwx
OSBAQCBzdGQ6Om9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+IENvZGVCbG9jazo6CiAgICAgcmV0dXJu
IGJ5dGVjb2RlSW5kZXg7CiB9CiAKLWludDMyX3QgQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQo
aW50MzJfdCB0aHJlc2hvbGQpCi17Ci0gICAgc3dpdGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5k
aWRPcHRpbWl6ZSgpKSB7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKLSAgICAg
ICAgcmV0dXJuIHRocmVzaG9sZDsKLSAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKLSAgICAgICAg
cmV0dXJuIHRocmVzaG9sZCAqIDQ7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKLSAgICAgICAg
cmV0dXJuIHRocmVzaG9sZCAvIDI7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiB0aHJlc2hvbGQ7Ci19CisvL3ZvaWQgQ29kZUJsb2NrOjpqaXRBZnRlcldhcm1V
cCgpCisvL3sKKy8vICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKHRo
cmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSwgdGhp
cyk7CisvL30KIAotdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkKK3ZvaWQgQ29kZUJs
b2NrOjpqaXRTb29uKCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNo
b2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgp
KSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQodW5s
aW5rZWRDb2RlQmxvY2soKS0+dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJ
VFNvb24oKSksIHRoaXMpOwogfQogCi12b2lkIENvZGVCbG9jazo6aml0U29vbigpCit2b2lkIENv
ZGVCbG9jazo6aml0TmV4dEludm9jYXRpb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRl
ci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJ
VFNvb24oKSksIHRoaXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+c2V0TmV3VGhyZXNo
b2xkKDAsIHRoaXMpOwogfQogCiBib29sIENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJl
YWtwb2ludHMoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBAIGNsYXNz
IE1ldGFkYXRhVGFibGU7CiBjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKIGNsYXNzIFJlZ2lzdGVy
QXRPZmZzZXRMaXN0OwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CitjbGFzcyBCYXNlbGluZUpJ
VENvZGU7CiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKENvZGVCbG9j
a1JhcmVEYXRhKTsKIApAQCAtMTU4LDcgKzE1OSw5IEBAIHB1YmxpYzoKICAgICBNZXRhZGF0YVRh
YmxlKiBtZXRhZGF0YVRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5nZXQoKTsgfQog
CiAgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1l
dGVyczsgfQorcHJpdmF0ZToKICAgICB2b2lkIHNldE51bVBhcmFtZXRlcnModW5zaWduZWQgbmV3
VmFsdWUpOworcHVibGljOgogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAo
KSBjb25zdCB7IHJldHVybiBtX251bWJlck9mQXJndW1lbnRzVG9Ta2lwOyB9CiAKQEAgLTE2Nyw3
ICsxNzAsNiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtVmFyczsgfQogICAgIHVuc2lnbmVkIG51bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+aGFzQ2hlY2twb2ludHMoKSAqIG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAK
LSAgICB1bnNpZ25lZCogYWRkcmVzc09mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBh
cmFtZXRlcnM7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0K
IAogICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxDb2RlQmxvY2sqPihtX2FsdGVybmF0aXZlLmdldCgpKTsgfQpAQCAtMjMyLDE2ICsyMzQsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0
OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9v
bCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRoZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJu
IHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFuZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAg
ICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFu
dChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+
KG1fbnVtVmFycyk7CkBAIC0yNjYsOCArMjU4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGdldElD
U3RhdHVzTWFwKElDU3RhdHVzTWFwJiByZXN1bHQpOwogICAgIAogI2lmIEVOQUJMRShKSVQpCisg
ICAgLy8gT09QUzogbW92ZSBhcml0aG1ldGljIElDcyBhbmQgc3dpdGNoIHRhYmxlcyBvdXQgb2Yg
aGVyZSwgYW5kIG9udG8gSklUQ29kZS4KICAgICBzdHJ1Y3QgSklURGF0YSB7CiAgICAgICAgIFdU
Rl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1
YkluZm9zOwogICAgICAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOwpAQCAtMjgyLDkgKzI3Niwx
MyBAQCBwdWJsaWM6CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4g
bV9wY1RvQ29kZU9yaWdpbk1hcDsKICAgICAgICAgYm9vbCBtX2hhc0NhbGxlZVNhdmVSZWdpc3Rl
cnMgeyBmYWxzZSB9OwogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxlZVNhdmVS
ZWdpc3RlcnM7Ci0gICAgICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworCisgICAgICAgIEZp
eGVkVmVjdG9yPHZvaWQqPiBtX2ppdENvbnN0YW50UG9vbDsKKyAgICAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
SVREYXRhLCBtX2ppdENvbnN0YW50UG9vbCk7IH0KICAgICB9OwogCisgICAgdm9pZCBzZXR1cFdp
dGhVbmxpbmtlZEJhc2VsaW5lQ29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPik7CisKICAgICBKSVRE
YXRhJiBlbnN1cmVKSVREYXRhKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyKQogICAg
IHsKICAgICAgICAgaWYgKExJS0VMWShtX2ppdERhdGEpKQpAQCAtMjkzLDYgKzI5MSw4IEBAIHB1
YmxpYzoKICAgICB9CiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJik7CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURGF0YSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RGF0YSk7IH0KKwogICAg
IEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVRNdWxJ
QyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CiAgICAgSklUTmVnSUMqIGFkZEpJ
VE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CkBAIC0zMjIsMTYgKzMyMiw3IEBAIHB1YmxpYzoK
ICAgICAvLyBsb29raW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0aGUgY29z
dCBvZiBjYWxsaW5nIHRoaXMuCiAgICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JC
eXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwogICAgIAotICAgIHZvaWQgc2V0SklUQ29kZU1h
cChKSVRDb2RlTWFwJiYgaml0Q29kZU1hcCkKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0
Q29kZU1hcCA9IFdURk1vdmUoaml0Q29kZU1hcCk7Ci0gICAgfQotICAgIGNvbnN0IEpJVENvZGVN
YXAmIGppdENvZGVNYXAoKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2xvY2spOwotICAgICAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29k
ZU1hcDsKLSAgICB9CisgICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpOwogCiAgICAg
dm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5N
YXA+JiYpOwogICAgIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKHZvaWQqIHBjKTsK
QEAgLTQ3Miw2ICs0NjMsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgbmFtZUZvclJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJndW1l
bnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9h
cmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudFZh
bHVlUHJvZmlsZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRWYWx1ZVByb2Zp
bGVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9udW1QYXJhbWV0ZXJzKSB8fCAh
T3B0aW9uczo6dXNlSklUKCkpOwpAQCAtNTcyLDYgKzU2NCw3IEBAIHB1YmxpYzoKICAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgp
OyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1
cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHJlZyk7
IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKGluZGV4KTsgfQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0YW50UmVnaXN0ZXJzKSArIGRl
Y2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5T2Zmc2V0KCk7IH0KIAogICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1cm4gbV9m
dW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJPZkZ1bmN0aW9uRGVj
bHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC02MDEsNiArNTk0LDEy
IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKICAgICAgICAg
cmV0dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIH0K
KyAgICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUlu
ZGV4KTsKKyAgICB2b2lkKiBiYXNlbGluZUpJVENvbnN0YW50UG9vbCgpCisgICAgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUKTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wuZGF0
YSgpOworICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNoSnVt
cFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUm
IHVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlu
a2VkQ29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTYxMSw2
ICs2MTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7CiAg
ICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsKICAgICB9CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRjaEp1
bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29k
ZS0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0
IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShp
bnQgdGFibGVJbmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9CkBAIC02MzMsMjEgKzYzMywyMCBAQCBwdWJsaWM6
CiAKICAgICBib29sIGNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRT
ZXQodGhpcyk7CisgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNoZWNrSWZU
aHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOwogICAgIH0KIAogICAgIHZvaWQgZG9udEpJVEFu
eXRpbWVTb29uKCkKICAgICB7Ci0gICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5kZWZlcklu
ZGVmaW5pdGVseSgpOworICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmRlZmVySW5kZWZp
bml0ZWx5KCk7CiAgICAgfQogCi0gICAgaW50MzJfdCB0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0
aHJlc2hvbGQpOwotICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKTsKICAgICB2b2lkIGppdFNvb24o
KTsKKyAgICB2b2lkIGppdE5leHRJbnZvY2F0aW9uKCk7CiAKICAgICBjb25zdCBCYXNlbGluZUV4
ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICAgICAgcmV0dXJuICptX2xsaW50
RXhlY3V0ZUNvdW50ZXI7CiAgICAgfQogCiAgICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6dHVwbGU8
U3RydWN0dXJlSUQsIHVuc2lnbmVkPiwgRml4ZWRWZWN0b3I8TExJbnRQcm90b3R5cGVMb2FkQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0Y2hwb2ludE1hcDsKQEAgLTc5
Nyw2ICs3OTYsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBj
b25zdCB7IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJl
cXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDb2RlQmxvY2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRk
QnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVh
a3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQpAQCAtODM4LDYgKzgzOCw3IEBAIHB1Ymxp
YzoKICAgICBtdXRhYmxlIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwogCiAgICAgYm9vbCBtX3No
b3VsZEFsd2F5c0JlSW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQgYmVjYXVzZSB0aGUgSklUIHdh
bnRzIHRvIHN0b3JlIHRvIGl0LgorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRB
bHdheXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3No
b3VsZEFsd2F5c0JlSW5saW5lZCk7IH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdW5zaWduZWQg
bV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCkBAIC05
MDYsMTEgKzkwNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0
YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0YWRh
dGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50
ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jh
d1BvaW50ZXIpOyB9CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vh
cmx5UmV0dXJuKCkKLSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVk
IHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0gICAgICAgIHJldHVybiAh
bV91bmxpbmtlZENvZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAgfQorICAgIGJvb2wgbG9v
cEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7IHJldHVybiBtX3VubGlu
a2VkQ29kZS0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKTsgfQog
CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CkBAIC0x
MDA4LDcgKzEwMDUsOSBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9s
bGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7
CiAjaWYgRU5BQkxFKEpJVCkKK3B1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SklURGF0YT4g
bV9qaXREYXRhOworcHJpdmF0ZToKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8v
IFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRo
ZSBwcm9maWxlZCBjb2RlIGJsb2NrCkBAIC0xMDI3LDcgKzEwMjYsNyBAQCBwcml2YXRlOgogCiAg
ICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAgICBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9OwogCiAg
ICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAgICAgdWlu
dDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJhc2Vs
aW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIlVubGlua2VkTWV0YWRhdGFUYWJsZUlubGluZXMuaCIKQEAg
LTM5LDI1ICs0MCwyMiBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25z
CiAKICAgICBpZiAobV9tZXRhZGF0YSkgewogI2RlZmluZSBWSVNJVChfX29wKSBcCi0gICAgICAg
IG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBmdW5jKG1l
dGFkYXRhLm1fcHJvZmlsZSwgZmFsc2UpOyB9KTsKLQorICAgICAgICBtX21ldGFkYXRhLT5mb3JF
YWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgZnVuYygqbWV0YWRhdGEubV9wcm9maWxl
LCBmYWxzZSk7IH0pOwogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9WQUxVRV9QUk9GSUxF
KFZJU0lUKQotCiAjdW5kZWYgVklTSVQKIAogICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPE9w
SXRlcmF0b3JPcGVuPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IAotICAgICAgICAgICAgZnVuYyht
ZXRhZGF0YS5tX2l0ZXJhYmxlUHJvZmlsZSwgZmFsc2UpOwotICAgICAgICAgICAgZnVuYyhtZXRh
ZGF0YS5tX2l0ZXJhdG9yUHJvZmlsZSwgZmFsc2UpOwotICAgICAgICAgICAgZnVuYyhtZXRhZGF0
YS5tX25leHRQcm9maWxlLCBmYWxzZSk7CisgICAgICAgICAgICBmdW5jKCptZXRhZGF0YS5tX2l0
ZXJhYmxlUHJvZmlsZSwgZmFsc2UpOworICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEubV9pdGVy
YXRvclByb2ZpbGUsIGZhbHNlKTsKKyAgICAgICAgICAgIGZ1bmMoKm1ldGFkYXRhLm1fbmV4dFBy
b2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFj
aDxPcEl0ZXJhdG9yTmV4dD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgewotICAgICAgICAgICAgZnVu
YyhtZXRhZGF0YS5tX25leHRSZXN1bHRQcm9maWxlLCBmYWxzZSk7Ci0gICAgICAgICAgICBmdW5j
KG1ldGFkYXRhLm1fZG9uZVByb2ZpbGUsIGZhbHNlKTsKLSAgICAgICAgICAgIGZ1bmMobWV0YWRh
dGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKKyAgICAgICAgICAgIGZ1bmMoKm1ldGFkYXRhLm1f
bmV4dFJlc3VsdFByb2ZpbGUsIGZhbHNlKTsKKyAgICAgICAgICAgIGZ1bmMoKm1ldGFkYXRhLm1f
ZG9uZVByb2ZpbGUsIGZhbHNlKTsKKyAgICAgICAgICAgIGZ1bmMoKm1ldGFkYXRhLm1fdmFsdWVQ
cm9maWxlLCBmYWxzZSk7CiAgICAgICAgIH0pOwogICAgIH0gICAKLQogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgpAQCAtMTI2LDQgKzEyNCwyNCBAQCB2b2lkIENvZGVCbG9jazo6Zm9y
RWFjaExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZ
U19JTkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJsb2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAg
ICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9qaXRDb2Rl
TWFwOworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNl
bGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFz
ZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpi
YXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NF
UlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3Rh
dGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sq
IGNvZGVCbG9jayk7CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29k
ZUJsb2NrKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlv
bkNvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTksNyArMTU5LDcgQEAgYm9vbCBFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB0aHJlc2hvbGQgPSBjbGlwcGVk
VGhyZXNob2xkKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgOiBudWxscHRy
LCB0aHJlc2hvbGQpOworICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQodGhyZXNob2xk
KTsKICAgICAKICAgICBtX2NvdW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhyZXNob2xk
KTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0
aW9uQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRpb25Db3VudGVyLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgp
OyAvLyBJZiB5b3UgdXNlIHRoaXMsIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5
IHN0aWxsIHJldHVybiBmYWxzZS4KICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5k
U2V0KENvZGVCbG9jayopOwogICAgIGJvb2wgaGFzQ3Jvc3NlZFRocmVzaG9sZCgpIGNvbnN0IHsg
cmV0dXJuIG1fY291bnRlciA+PSAwOyB9Ci0gICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJf
dCB0aHJlc2hvbGQsIENvZGVCbG9jayopOworICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMy
X3QgdGhyZXNob2xkLCBDb2RlQmxvY2sqID0gbnVsbHB0cik7CiAgICAgdm9pZCBkZWZlckluZGVm
aW5pdGVseSgpOwogICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PGRvdWJsZT4obV90b3RhbENvdW50KSArIG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OwpAQCAtODYsMTMgKzg2LDkgQEAgcHVibGljOgogICAgIH0KICAgICAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVCB0aHJlc2hvbGQpCisgICAgc3RhdGljIFQg
Y2xpcHBlZFRocmVzaG9sZChUIHRocmVzaG9sZCkKICAgICB7Ci0gICAgICAgIGludDMyX3QgbWF4
VGhyZXNob2xkOwotICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRz
QmV0d2VlbkNoZWNrcG9pbnRzKCkgJiYgZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgbWF4VGhy
ZXNob2xkID0gZ2xvYmFsT2JqZWN0LT53ZWFrUmFuZG9tSW50ZWdlcigpICUgbWF4aW11bUV4ZWN1
dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
KCk7CisgICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50
c0JldHdlZW5DaGVja3BvaW50cygpOwogICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNo
b2xkKQogICAgICAgICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICByZXR1
cm4gdGhyZXNob2xkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkTWV0YWRhdGEuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2
ICs1MCw3IEBAIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGEKIAogc3Ry
dWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCB7CiAgICAgQXJyYXlQcm9maWxlIGFy
cmF5UHJvZmlsZTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCwg
YXJyYXlQcm9maWxlKTsgfQogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0
YWRhdGFBcnJheUxlbmd0aCkgPT0gMTIpOwogCkBAIC04OCw2ICs4OSw3IEBAIHVuaW9uIEdldEJ5
SWRNb2RlTWV0YWRhdGEgewogICAgICAgICBHZXRCeUlkTW9kZSBtb2RlOwogICAgICAgICB1aW50
OF90IGhpdENvdW50Rm9yTExJbnRDYWNoaW5nOyAvLyBUaGlzIG11c3QgYmUgemVybyB3aGVuIHdl
IHVzZSBQcm90b0xvYWQgbW9kZS4KICAgICB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1v
ZGUpOyB9CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YURlZmF1bHQgZGVmYXVsdE1vZGU7CiAgICAg
R2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0IHVuc2V0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFk
YXRhQXJyYXlMZW5ndGggYXJyYXlMZW5ndGhNb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zODUsNiArMzg1LDggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZkluQWNjZXNzKAogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCisvLyBPT1BTOiBN
YWtlIHRoaXMgc3R1ZmYgd29yayB3aXRoIGRhdGEgaWNzIHRvIG5vdCBhc3N1bWUgaW5saW5lIGFj
Y2Vzcy4KKwogdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVz
aW5nSW5saW5lQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQp
CiB7CiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKQEAgLTQwNCw5ICs0MDYsMTIg
QEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogdm9pZCBJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4gdGFyZ2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7Cisg
ICAgICAgIC8vIE9PUFM6IG1ha2Ugc29tZSB2ZXJzaW9uIG9mIElubGluZUFjY2VzcyBmb3IgYmFz
ZWxpbmUuIFBlcmhhcHMgbWFrZSBpdCBkYXRhIGRyaXZlbi4gT3IgcGVyaGFwcyBoYXZlIHRoZSBj
b2RlCisgICAgICAgIC8vIGJlIHNoYXJlZCBzb21laG93IGJldHdlZW4gVW5saW5rZWRDb2RlQmxv
Y2tzLgorCiAgICAgICAgIC8vIElmIGl0IGlzIG5vdCBHZXRCeUlkLWxpa2UtdGhpbmcsIHdlIGRv
IG5vdCBlbWl0IG5vcCBzbGVkIChlLmcuIEdldEJ5VmFsKS4KICAgICAgICAgLy8gVGhlIGNvZGUg
aXMgYWxyZWFkeSBhbiBpbmRpcmVjdCBqdW1wLCBhbmQgb25seSB0aGluZyB3ZSBzaG91bGQgZG8g
aXMgcmVwbGFjaW5nIG1fY29kZVB0ci4KLSAgICAgICAgaWYgKHN0dWJJbmZvLmhhc0NvbnN0YW50
SWRlbnRpZmllcikgeworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQgJiYgc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CiAgICAg
ICAgICAgICAvLyBJZiBtX2NvZGVQdHIgaXMgcG9pbnRpbmcgdG8gc3R1YkluZm8uc2xvd1BhdGhT
dGFydExvY2F0aW9uLCB0aGlzIG1lYW5zIHRoYXQgSW5saW5lQWNjZXNzIGNvZGUgaXMgbm90IGEg
c3R1YiBvbmUuCiAgICAgICAgICAgICAvLyBXZSByZXdyaXRlIHRoaXMgd2l0aCB0aGUgc3R1Yi1i
YXNlZCBkaXNwYXRjaGluZyBjb2RlIG9uY2UsIGFuZCBjb250aW51ZSB1c2luZyBpdCB1bnRpbCB3
ZSByZXNldCB0aGUgY29kZS4KICAgICAgICAgICAgIGlmIChzdHViSW5mby5tX2NvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSA9PSBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24uZXhlY3V0
YWJsZUFkZHJlc3MoKSkgewpAQCAtNDIxLDYgKzQyNiw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpy
ZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICAgICAgICAgICAgICB9KSwgIklubGluZUFjY2Vzczog
bGlua2luZyBzdHViIGNhbGwiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAg
IHN0dWJJbmZvLm1fY29kZVB0ciA9IHRhcmdldDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9u
TW9kZU1ldGFkYXRhLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NiArNDAsNyBAQCBPVkVSTE9BRF9CSVRXSVNFX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0
cnVjdCBJdGVyYXRpb25Nb2RlTWV0YWRhdGEgewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9
OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSXRlcmF0aW9uTW9kZU1ldGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRp
b25Nb2RlKSk7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJ
bnRDYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDYgKzg3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2Fy
cmF5UHJvZmlsZTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExMSW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmls
ZSk7IH0KIAogcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVl
V2l0aExpbmtCaXQgeyB1bmxpbmtlZEJpdCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODIw
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJl
U3R1YkluZm8uaCIKIAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhp
Y0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKIApAQCAtMjg1LDYgKzI4Niw3IEBAIHZv
aWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAgICAgICAgcmVzZXRQdXRC
eShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJp
dmF0ZU5hbWU6CiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5k
OjpCeVZhbCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgpA
QCAtNDMwLDYgKzQzMiwyMDQgQEAgQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZv
OjpzZQogICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVUeXBlOwogfQogCit2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJs
b2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3sKKyAg
ICBhY2Nlc3NUeXBlID0gdW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlOworICAgIHN0YXJ0ID0g
dW5saW5rZWRTdHViSW5mby5zdGFydDsgLy8gT09QUzogZG8gd2UgbmVlZCBhIHN0YXJ0IGZvciBk
YXRhIElDcz8KKyAgICBkb25lTG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlv
bjsKKyAgICBzbG93UGF0aFN0YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRo
U3RhcnRMb2NhdGlvbjsKKyAgICBjYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpOworICAgIGNv
ZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7Cisg
ICAgbV9jb2RlUHRyID0gc2xvd1BhdGhTdGFydExvY2F0aW9uOworCisgICAgdXNlZFJlZ2lzdGVy
cyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICBpZiAoYWNj
ZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpHZXRCeUlkICYmIHVubGlua2VkU3R1YkluZm8uYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkpIHsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9yX25leHQsIHdl
IGNhbid0IGNsb2JiZXIgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgZWl0aGVyLgorICAgICAgICB1c2Vk
UmVnaXN0ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gpOworICAgIH0K
KworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRl
QnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0
aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1bmxp
bmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6
CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQor
ICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5r
ZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0
aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQ
cml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25Q
dXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
OgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBj
YXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZv
LmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9w
dGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0
OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkK
KyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
dW5saW5rZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRp
b25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxT
ZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
blNldFByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5
VmFsOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFz
ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJv
cGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAg
dmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1f
c3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAgICAgICBoYXND
b25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxC
eUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7
CisgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIHZhbHVlR1BS
ID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MucHJv
dG90eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICAgICAg
bV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVCcmFuZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdz
LnByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAg
ICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAg
bV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBoYXNDb25z
dGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAg
ICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgIGNhc2Ug
QWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6
CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhp
c0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okdl
dEJ5SWRXaXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAg
ICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOwor
ICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0
ZXJzOjp0aGlzVmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsK
KyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFz
ZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVO
YW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFz
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJv
cGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAg
dmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9z
dHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAg
ICBpZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQdXRCeVZhbCkKKyAgICAgICAgICAgIG1f
YXJyYXlQcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAg
ICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAg
ICAgICByZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5k
OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKICNpZiBBU1NFUlRfRU5BQkxF
RAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y2hlY2tDb25zaXN0ZW5jeSgpCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5j
bHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJSZWdpc3Rl
clNldC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5o
IgpAQCAtNTYsNiArNTcsNyBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgewogICAg
IEdldEJ5VmFsLAogICAgIFB1dEJ5SWQsCiAgICAgUHV0QnlWYWwsCisgICAgUHV0UHJpdmF0ZU5h
bWUsCiAgICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC03
OCw2ICs4MCw4IEBAIGVudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKICAgICBTdHJpbmdM
ZW5ndGgKIH07CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworCiBjbGFzcyBT
dHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1
YkluZm8pOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtOTgsNiArMTAyLDggQEAg
cHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAorICAg
IHZvaWQgaW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayos
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mKTsKKwogICAgIERFQ0xBUkVfVklTSVRfQUdHUkVH
QVRFOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0
IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCkBAIC00NDcsNiAr
NDUzLDE4IEBAIGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW4KICAgICB9
CiB9CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVGaWVsZFB1dEtp
bmQgcHJpdmF0ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSB9Owor
ICAgIEVDTUFNb2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgpIH07CisgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4OworICAgIC8vIE9PUFM6IERvIHdlIG5lZWQgc3RhcnQgZm9y
IGRhdGEgSUNzPworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBz
dGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpi
eUlkIGNhY2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW5zdGFu
Y2VvZicgY2FjaGVzLgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRv
bmVMb2NhdGlvbjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4g
c2xvd1BhdGhTdGFydExvY2F0aW9uOworfTsKKwogI2Vsc2UKIAogY2xhc3MgU3RydWN0dXJlU3R1
YkluZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJT
YW1wbGVyLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAg
dm9pZCBwcmludFN1cGVyU2FtcGxlclN0YXRlKCkKICAgICBkb3VibGUgcGVyY2VudGFnZSA9IDEw
MC4wICogaW4gLyAoaW4gKyBvdXQpOwogICAgIGlmIChwZXJjZW50YWdlICE9IHBlcmNlbnRhZ2Up
CiAgICAgICAgIHBlcmNlbnRhZ2UgPSAwLjA7Ci0gICAgZGF0YUxvZygiUGVyY2VudCB0aW1lIGJl
aGluZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNlbnRhZ2UsICJcbiIpOworICAgIGRhdGFM
b2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdl
LCAiJVxuIik7CiB9CiAKIHZvaWQgZW5hYmxlU3VwZXJTYW1wbGVyKCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5j
bHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5o
IgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgogI2luY2x1ZGUgIkJ5dGVj
b2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgpAQCAtNzgsNiArNzksOCBAQCBV
bmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0mCiAgICAgICAgIGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkobG9ja2VyKTsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9wcml2YXRl
QnJhbmRSZXF1aXJlbWVudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcml2YXRlQnJhbmRSZXF1
aXJlbWVudDo6TmVlZGVkKTsKICAgICB9CisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0
TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRl
cldhcm1VcCgpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CkBAIC0zMTYsNCAr
MzE5LDMxIEBAIGludCBVbmxpbmtlZENvZGVCbG9jazo6b3V0T2ZMaW5lSnVtcE9mZnMKICAgICBy
ZXR1cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5nZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQogCisj
aWYgQVNTRVJUX0VOQUJMRUQKK2Jvb2wgVW5saW5rZWRDb2RlQmxvY2s6Omhhc0lkZW50aWZpZXIo
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICAvLyBPT1BTOiBkbyB3aGF0IENvZGVCbG9j
ayBkb2VzIGFuZCBtYWtlIGEgaGFzaCB0YWJsZT8KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtYmVyT2ZJZGVudGlmaWVycygpOyArK2kpIHsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIo
aSkuaW1wbCgpID09IHVpZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworaW50MzJfdCBVbmxpbmtlZENvZGVCbG9jazo6dGhy
ZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKQoreworICAgIHN3aXRjaCAoZGlkT3B0aW1p
emUoKSkgeworICAgIGNhc2UgVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU6CisgICAgICAgIHJldHVy
biB0aHJlc2hvbGQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6RmFsc2U6CisgICAgICAgIHJldHVybiB0
aHJlc2hvbGQgKiA0OworICAgIGNhc2UgVHJpU3RhdGU6OlRydWU6CisgICAgICAgIHJldHVybiB0
aHJlc2hvbGQgLyAyOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gdGhyZXNob2xkOworfQorCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw5ICsyNSwxMSBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVu
dGlvbnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxl
LmgiCisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkV4cHJlc3Npb25S
YW5nZUluZm8uaCIKICNpbmNsdWRlICJIYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIklkZW50aWZp
ZXIuaCIKQEAgLTYyLDYgKzY0LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiBjbGFzcyBV
bmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEJhc2VsaW5lSklU
Q29kZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKIGVudW0gY2xhc3MgTGlua1RpbWVDb25zdGFu
dCA6IGludDMyX3Q7CiAKQEAgLTE3NSw2ICsxNzgsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBG
aXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1
cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcp
IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQog
ICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgo
KV0uZ2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBAIC0yMDcsNiArMjExLDE1IEBAIHB1
YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogCiAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0OworICAgIGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIoKTsgfQorICAgIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAg
ICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQoMCku
cHRyKCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5z
dHJ1Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rpb24g
PCBpbnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0cnVj
dGlvbnNCZWdpbjsKKyAgICB9CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25zU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLnNpemUoKTsgfQogCiAgICAgdW5zaWduZWQgbnVtQ2Fs
bGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KICAgICB1bnNp
Z25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CkBAIC0zMzQsNiArMzQ3
LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWV0YWRhdGEtPnNpemVJbkJ5dGVzKCk7
CiAgICAgfQogCisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJl
dHVybigpCisgICAgeworICAgICAgICAvLyBTb21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBh
bHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRoZXkgcnVuLgorICAgICAgICByZXR1cm4gIWlzQnVp
bHRpbkZ1bmN0aW9uKCk7CisgICAgfQorCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29sIGhh
c0lkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyNlbmRpZgorCisgICAgaW50MzJfdCB0
aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOwogCiBwcm90ZWN0ZWQ6CiAgICAgVW5s
aW5rZWRDb2RlQmxvY2soVk0mLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJs
ZUluZm8mLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPik7CkBAIC0zOTQsNiArNDE4LDcg
QEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xleGljYWxTY29wZUZlYXR1cmVzIDogNDsKIHB1
YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKKyAgICBSZWZQdHI8QmFzZWxpbmVK
SVRDb2RlPiBtX3VubGlua2VkQmFzZWxpbmVDb2RlOwogcHJpdmF0ZToKICAgICBDb2RlRmVhdHVy
ZXMgbV9mZWF0dXJlcyB7IDAgfTsKICAgICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBA
IC00MTAsNiArNDM1LDkgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rp
b25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3M7CiAKKyAgICAvLyBPT1BTOiBiaW5kIGEgYmV0dGVy
IHBsYWNlIHRvIHN0b3JlIHRoaXMgc3R1ZmY/CisgICAgVmVjdG9yPEJpbmFyeUFyaXRoUHJvZmls
ZT4gbV9iaW5hcnlBcml0aFByb2ZpbGVzOworICAgIFZlY3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4g
bV91bmFyeUFyaXRoUHJvZmlsZXM7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OkV4
aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CkBAIC00NTUsNiArNDgzLDMyIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uLm9mZnNl
dCgpKTsKICAgICB9CisgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rp
b24qIHBjKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSB0aGlzLT5i
eXRlY29kZU9mZnNldChwYyk7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2Zp
bGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9iaW5hcnlBcml0aFByb2Zp
bGVzLnNpemUoKTsKKyAgICAgICAgbV9iaW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5hcnlB
cml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdW5z
aWduZWQgYWRkVW5hcnlBcml0aFByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVz
dWx0ID0gbV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX3VuYXJ5QXJpdGhQ
cm9maWxlcy5hcHBlbmQoVW5hcnlBcml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorCisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUo
dW5zaWduZWQgaSkgeyByZXR1cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5h
cnlBcml0aFByb2ZpbGUmIHVuYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1f
dW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIm
IGxsaW50RXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7IH0K
KworICAgIEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT4gbV92YWx1ZVByb2ZpbGVzOwogCiBwcml2
YXRlOgogICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlv
blN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwpAQCAtNDYyLDYgKzUxNiw3IEBAIHByaXZhdGU6CiAgICAg
T3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4ZWRWZWN0b3I8RXhwcmVzc2lv
blJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50
ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwogCiBwcm90ZWN0ZWQ6CiAgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9ja0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCShyZXZpc2lvbiAyODIwMTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
QmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKTsgfQogICAgIGJvb2wgaGFz
Q2hlY2twb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aGFzQ2hlY2twb2ludHMo
KTsgfQogICAgIGJvb2wgaGFzVGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2st
Pmhhc1RhaWxDYWxscygpOyB9CisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkg
eyByZXR1cm4gbV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpOyB9CisgICAgdW5z
aWduZWQgYWRkVW5hcnlBcml0aFByb2ZpbGUoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+YWRkVW5h
cnlBcml0aFByb2ZpbGUoKTsgfQogCiAgICAgLy8gVXBkYXRpbmcgVW5saW5rZWRDb2RlQmxvY2su
CiAgICAgdm9pZCBzZXRIYXNDaGVja3BvaW50cygpIHsgbV9jb2RlQmxvY2stPnNldEhhc0NoZWNr
cG9pbnRzKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNiArNjQsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUpOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNldEluTWV0YWRhdGFUYWJsZShjb25z
dCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2lzRmluYWxpemVkKTsK
KyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9pczMyQml0ID8gb2Zmc2V0VGFi
bGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUxNigpW09wY29kZTo6b3Bjb2Rl
SURdOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YodHlwZW5hbWUgT3Bj
b2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogcHJpdmF0ZToK
ICAgICBlbnVtIEVtcHR5VGFnIHsgRW1wdHkgfTsKIApAQCAtMTAxLDYgKzEwOSw3IEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiBzX29mZnNldDE2VGFibGVTaXplOwogICAgIH0KIAorCiAgICAg
dXNpbmcgT2Zmc2V0MzIgPSB1aW50MzJfdDsKICAgICB1c2luZyBPZmZzZXQxNiA9IHVpbnQxNl90
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmls
ZS5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAgdGVtcGxhdGU8
dW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzQXJndW1lbgogc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ug
ewogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVy
T2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJP
ZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNr
ZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJP
ZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKQEAgLTExOCw4
ICsxMTcsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJucyB0aGUgbmV3IG9u
ZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8vIHRoYXQgaXNuJ3QgZXhl
Y3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKQEAgLTEzNCw3ICsx
MzEsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIAogICAgICAgICByZXR1
cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29kZWRKU1ZhbHVlIG1fYnVj
a2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRp
Y3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTU2LDYgKzE1Myw3IEBAIHN0cnVjdCBWYWx1ZVByb2Zp
bGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1YmxpYyBW
YWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAgICBWYWx1ZVByb2ZpbGUo
KSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7IH0KKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBzdHJ1Y3QgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OTgs
NyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnkKICAg
ICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0
eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUsIG1fY29k
ZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90Pihkc3QsIHNyYyk7CkBA
IC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbmMoUmVnaXN0ZXJJ
RCogc3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BJbmM6
OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7
CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVjOjplbWl0KHRoaXMsIHNy
Y0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5h
cnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODIsNyArNjgyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklEKj4KICAgICAgICAgZW1p
dEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCog
c3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBCaW5hcnlP
cDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAgICAgICAgICAgIEJpbmFy
eU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1fY29kZUJsb2NrLT5hZGRC
aW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZp
c2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnko
Vk0mIHZtLCBDYWxsRnJhbWUqCiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChj
b2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZl
KCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAo
KSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aXNTdGls
bFZhbGlkKTsKIAogICAgIGlmICghT3B0aW9uczo6dXNlT1NSRW50cnlUb0RGRygpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGlu
ZXMuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIkpJVC5oIgpAQCAtMTE5LDEwICsxMjAsMTAgQEAgdm9pZCBoYW5kbGVFeGl0
Q291bnRzKFZNJiB2bSwgQ0NhbGxIZWxwZQogICAgIGludDMyX3QgY2xpcHBlZFZhbHVlOwogICAg
IHN3aXRjaCAoaml0LmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6
OkRGR0pJVDoKLSAgICAgICAgY2xpcHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVy
OjpjbGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdl
dFZhbHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVy
OjpjbGlwcGVkVGhyZXNob2xkKHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBKSVRUeXBlOjpGVExKSVQ6Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IFVwcGVyVGllckV4ZWN1
dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmpl
Y3QoKSwgdGFyZ2V0VmFsdWUpOworICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVj
dXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
QEAgLTMwOSwxMCArMzEwLDE1IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhl
bHBlcnMKICAgICAgICAgICAgIHRydWVDYWxsZXIgPyBBc3NlbWJseUhlbHBlcnM6OlVzZUV4aXN0
aW5nVGFnUmVnaXN0ZXJDb250ZW50cyA6IEFzc2VtYmx5SGVscGVyczo6Q29weUJhc2VsaW5lQ2Fs
bGVlU2F2ZWRSZWdpc3RlcnNGcm9tQmFzZUZyYW1lLAogICAgICAgICAgICAgR1BSSW5mbzo6cmVn
VDIsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUNCk7CiAKKyAgICAgICAgLy8gT09QUzog
Q29uc2lkZXIgaWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBmb3IgYmFzZWxpbmUgcGIvbWV0YWRh
dGEgcmVnaXN0ZXJzCiAgICAgICAgIGlmIChjYWxsZXJJc0xMSW50KSB7CiAgICAgICAgICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJs
b2NrRm9yKCp0cnVlQ2FsbGVyKTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFi
bGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ss
IExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpKTsKICAgICAgICAgICAgIGppdC5z
dG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JD
YWxsZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNh
bGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAodHJ1ZUNhbGxlcikgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1
ZUNhbGxlcik7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpLCBjYWxs
ZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBKSVQ6OnNfbWV0
YWRhdGFHUFIpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmJhc2VsaW5lSklUQ29uc3RhbnRQ
b29sKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2Nr
LCBKSVQ6OnNfY29uc3RhbnRzR1BSKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCkBAIC00MDQsNiArNDEwLDkgQEAgdm9pZCBhZGp1c3RB
bmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVy
czo6cGNHUFIpOwogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NS
RXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZSB7CisgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5t
ZXRhZGF0YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRhdGFHUFIpOworICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVKSVRD
b25zdGFudFBvb2woKSksIEpJVDo6c19jb25zdGFudHNHUFIpOworCiAgICAgICAgIGNvZGVCbG9j
a0ZvckV4aXQtPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CiAKICAgICAgICAgQnl0ZWNvZGVJ
bmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczMCw2ICs3MzAs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlVGFnR1BS
LCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXpl
KG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJn
cyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJz
ID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAgICAgICAg
ICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEp
OwpAQCAtODg5LDcgKzg5MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChp
c1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
bV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1l
U2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0NSw2ICs3NDUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5j
YWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVHUFIsIERhdGFGb3JtYXRKUyk7CiAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAg
ICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAg
ICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIGFy
Z0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTg5Niw3
ICs4OTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAg
CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkg
ewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZy
YW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNo
dWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5ODUsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmEKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0
ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3Jp
Z2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAg
ICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxT
aXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAg
SlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VHUFIpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsK
ICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAKQEAgLTE0Nzc4
LDcgKzE0Nzc4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAg
ICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5ncHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2pp
dC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJbmRleCk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKSksIGNhbGxTaXRlSW5kZXgpOwog
ICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
MTcsNyArNDMxNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIg
PSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0Y2go
MCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxK
SVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29kZUJs
b2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4
LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCks
IEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5
R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7
CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9
IHRydWU7CkBAIC0xMDE5MSw2ICsxMDE5MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1BbGxvY2F0ZWRBcmdz
OyArK2kpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChW
YWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2Fs
bGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29k
ZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhzZW1hbnRpY05vZGVPcmlnaW4pOwpAQCAtMTAzNDks
MTMgKzEwMzUwLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
LmFyZ3MuYXBwZW5kKHBhcmFtc1sxICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOwogCiAgICAg
ICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bUFyZ3M7CisgICAgICAg
ICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNodWZmbGVE
YXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogCiAgICAgICAg
ICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFk
ZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAg
ICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxG
YXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZd
IHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRh
KHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0
LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICAgICAgfSk7
CkBAIC0xMDY5OCw3ICsxMDcwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
aml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAg
ICAgICAgICAgICB9KTsKQEAgLTEwOTc5LDcgKzEwOTgxLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxs
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1Qw
LCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3b3JraW5nIGNvcHkpCkBAIC00Miwx
NyArNDIsMjggQEAgY2xhc3MgTWV0YWRhdGEKICAgICBkZWYgc3RydWN0KG9wKQogICAgICAgICBy
ZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVs
ZHMpCisgICAgICAgIGRlZiBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGRO
YW1lcykKKyAgICAgICAgICAgIGZpZWxkTmFtZXMubWFwIGRvIHxmaWVsZE5hbWV8CisgICAgICAg
ICAgICAgICAgIiN7cHJlZml4fXN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVsw
XS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisg
ICAgICAgIGVuZAorCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBm
aWVsZE5hbWVzKQogICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAg
ICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAgICAgICAgICAgICAgICAgICIj
e3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1c
biN7cHJlZml4fX07IgorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tj
b252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZp
eH19OyIKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZp
eH0je3R5cGUudG9fc30gbV8je2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmll
bGROYW1lID0gZmllbGQudG9fcworICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2go
ZmllbGROYW1lKQorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1f
I3tmaWVsZE5hbWV9OyIKICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2lu
KCJcbiIpCiAgICAgICAgIGVuZAogCi0gICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAg
ICAgICAgIiwgQGZpZWxkcykKKyAgICAgICAgZmllbGROYW1lcyA9IFtdCisgICAgICAgIHByZWZp
eCA9ICIgICAgICAgICIKKyAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBm
aWVsZHMsIGZpZWxkTmFtZXMpCisgICAgICAgIGZpZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5l
cmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKIAogICAgICAgICBpbml0
cyA9IG5pbAogICAgICAgICBpZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5l
bXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5OCw4ICs2OTgsMTMgQEAgdm9p
ZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVs
cGVyczo6ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwg
R1BSSW5mbzo6cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBH
UFJJbmZvOjpyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9i
amVjdCh2bSwgaW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENh
bGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQor
eworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENh
bGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE3MTgsNiArMTcxOCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5m
byopOworICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChW
TSYsIENhbGxMaW5rSW5mbyopOwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckND
YWxsKCk7CiAgICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhc2Vs
aW5lSklUQ29kZS5oIgorCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCisjaW5jbHVkZSAiSnVtcFRh
YmxlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK0pJVEFkZElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQor
SklUTXVsSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRT
dWJJQyogTWF0aElDSG9sZGVyOjphZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE5lZ0lD
KiBNYXRoSUNIb2xkZXI6OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisKK3ZvaWQgTWF0aElD
SG9sZGVyOjphZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcikKK3sKKyAgICBtX2FkZElD
cyA9IFdURk1vdmUob3RoZXIubV9hZGRJQ3MpOworICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhl
ci5tX211bElDcyk7CisgICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAg
ICBtX3N1YklDcyA9IFdURk1vdmUob3RoZXIubV9zdWJJQ3MpOworfQorCitCYXNlbGluZUpJVENv
ZGU6OkJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8
SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spCisgICAgOiBEaXJlY3RKSVRDb2RlKFdURk1v
dmUoY29kZSksIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAsIE1h
dGhJQ0hvbGRlcigpCit7IH0KKworQmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKCkK
K3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Jhc2VsaW5lSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgorI2luY2x1ZGUgIkpJVENvZGUu
aCIKKyNpbmNsdWRlICJKSVRDb2RlTWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvL2NsYXNz
IEpJVEFkZElDOworLy9jbGFzcyBKSVRNdWxJQzsKKy8vY2xhc3MgSklUU3ViSUM7CisvL2NsYXNz
IEpJVE5lZ0lDOworY2xhc3MgQmluYXJ5QXJpdGhQcm9maWxlOworY2xhc3MgVW5hcnlBcml0aFBy
b2ZpbGU7CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBTaW1wbGVK
dW1wVGFibGU7CitzdHJ1Y3QgU3RyaW5nSnVtcFRhYmxlOworCitjbGFzcyBNYXRoSUNIb2xkZXIg
eworcHVibGljOgorICAgIHZvaWQgYWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpOwor
ICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRN
dWxJQyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUU3ViSUMqIGFk
ZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJ
QyhVbmFyeUFyaXRoUHJvZmlsZSopOworCisgICAgLyoKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2Ft
ZTxHZW5lcmF0b3IsIEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRBZGRJ
QyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklU
QWRkSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5
cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwg
SklUTXVsR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE11bElDKiBhZGRNYXRoSUMo
QmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRNdWxJQyhwcm9maWxl
KTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVROZWdHZW5lcmF0
b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUTmVnSUMqIGFkZE1hdGhJQyhVbmFyeUFyaXRoUHJv
ZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTmVnSUMocHJvZmlsZSk7IH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUU3ViR2VuZXJhdG9yPjo6dmFsdWU+Ojp0
eXBlPgorICAgIEpJVFN1YklDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxl
KSB7IHJldHVybiBhZGRKSVRTdWJJQyhwcm9maWxlKTsgfQorICAgICovCisKK3ByaXZhdGU6Cisg
ICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOwor
ICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsK
K307CisKK2NsYXNzIEpJVENvbnN0YW50UG9vbCB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29uc3Rh
bnQgPSB1bnNpZ25lZDsKKworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAg
ICBHbG9iYWxPYmplY3QsCisgICAgICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAgU3RydWN0dXJl
U3R1YkluZm8sCisgICAgICAgIEZ1bmN0aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rpb25FeHByLAor
ICAgIH07CisKKyAgICBzdHJ1Y3QgVmFsdWUgeworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoZSBw
b2ludGVyIHBhY2tlZC4KKyAgICAgICAgVHlwZSB0eXBlOworICAgICAgICB2b2lkKiBwYXlsb2Fk
OworICAgIH07CisKKyAgICBKSVRDb25zdGFudFBvb2woKSA9IGRlZmF1bHQ7CisgICAgSklUQ29u
c3RhbnRQb29sKEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQ
b29sJiBvcGVyYXRvcj0oSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKworICAgIENvbnN0
YW50IGFkZChUeXBlIHR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxscHRyKQorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudHMuc2l6ZSgpOworICAgICAgICBtX2NvbnN0
YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBlLCBwYXlsb2FkIH0pOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFu
dHMuc2l6ZSgpOyB9CisgICAgVmFsdWUgYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRzW2ldOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50czsK
K307CisKKworY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1
YmxpYyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIEJhc2VsaW5lSklUQ29kZShDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hl
Y2spOworICAgIH5CYXNlbGluZUpJVENvZGUoKSBvdmVycmlkZTsKKworICAgIEJhZzxVbmxpbmtl
ZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1f
ZXZhbENhbGxMaW5rSW5mb3M7IC8vIE9PUFM6IG1ha2Ugc3VyZSB3ZSB2aXNpdCB0aGVzZSBzb21l
aG93LiBPciBhc3NlcnQgd2UgZG9uJ3QgaGF2ZSB0bywgc2luY2UgdGhleSdyZSB2aXJ0dWFsIGNh
bGxzLgorICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1Yklu
Zm9zOworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVz
OworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzOworICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworICAgIEpJVENvbnN0YW50UG9vbCBt
X2NvbnN0YW50UG9vbDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkocmV2aXNpb24gMjgyMDE2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHNpemVfdCBCYXNlbGluZUpJVFBsYW46OmNvZGVT
aXplKCkgY29uc3QKIAogQ29tcGlsYXRpb25SZXN1bHQgQmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6
ZSgpCiB7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1h
aW5UaHJlYWQoKTsKKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6
ZU9uTWFpblRocmVhZChtX2NvZGVCbG9jayk7CiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBj
YXNlIENvbXBpbGF0aW9uRmFpbGVkOgogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29k
ZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
ODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFk
b3dDaGlja2VuUHJvbG8KICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12
b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRv
d1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2Fs
bGVlKSkpOwotICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAg
c3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KGNvZGVCbG9jayksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
Y2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBD
Q2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hh
ZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsK
ICAgICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpA
QCAtNzIsNiArNjIsMjggQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5Q
YQogICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9
CiAKKwordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cit2b2lkIENDYWxsSGVscGVy
czo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpT
VmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2Nr
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgc3RvcmVQdHIoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1t
UHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsK
KyAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOworICAgIHN0b3JlUHRy
KHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNr
ZW46OlBhY2tldCwgc2NvcGUpKSk7CisgICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJs
b2NrKSkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIGNhbGxTaXRlSW5kZXgpKSk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVn
cywgR1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFk
b3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30K
Kwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBj
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVC
bG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKIHZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29k
ZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29w
ZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2Ny
aXB0aW9uKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4
NDAsMTQgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9s
YXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRv
cCBvZgogICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQg
bG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJl
ZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcg
c2NvcGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworCitwcml2YXRlOgorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBH
UFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlSW5kZXgpOworcHVibGljOgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
R1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwg
VHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7Cisg
ICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBK
U1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50
ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAg
IHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQs
IEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJ
KHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogdm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVn
aXN0ZXJzKENvZGVCbG9jayogY29kZUJsb2NrKQogeworICAgIHNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyhjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK3ZvaWQgQ2FsbEZy
YW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zKQorewogICAgIFJlZ2lzdGVyU2V0IGNh
bGxlZVNhdmVSZWdpc3RlcnMgeyBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkg
fTsKLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25z
ID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAg
UmVnaXN0ZXJBdE9mZnNldCBlbnRyeSB7IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVE
YXRhLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDEzIEBAIHB1
YmxpYzoKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJnczsKICAgICB1bnNpZ25lZCBudW1M
b2NhbHMgeyBVSU5UX01BWCB9OwogICAgIHVuc2lnbmVkIG51bVBhc3NlZEFyZ3MgeyBVSU5UX01B
WCB9OworICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OyAvLyBPbiBvdXIg
bWFjaGluZSBmcmFtZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVyTWFwPFZhbHVl
UmVjb3Zlcnk+IHJlZ2lzdGVyczsKICAgICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZh
bGlkR1BSUmVnIH07CiAKICAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxv
Y2sqKTsKKyAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCopOwogI2VuZGlmCiAgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJ
KHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgQ2FsbEZyYW1l
U2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYQogICAgIDogbV9qaXQoaml0KQogICAgICwg
bV9vbGRGcmFtZShkYXRhLm51bUxvY2FscyArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lz
dGVycywgbnVsbHB0cikKICAgICAsIG1fbmV3RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIENhbGxG
cmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQotICAgICwgbV9hbGlnbmVkT2xk
RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCi0gICAgICAgICsgcm91
bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpKSkKKyAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJ
blJlZ2lzdGVycyArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLm51bVBhcmFt
ZXRlcnMpKQogICAgICwgbV9hbGlnbmVkTmV3RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6
ZUluUmVnaXN0ZXJzCiAgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRh
dGEuYXJncy5zaXplKCkpKQogICAgICwgbV9mcmFtZURlbHRhKG1fYWxpZ25lZE5ld0ZyYW1lU2l6
ZSAtIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSkKICAgICAsIG1fbG9ja2VkUmVnaXN0ZXJzKFJlZ2lz
dGVyU2V0OjphbGxSZWdpc3RlcnMoKSkKICAgICAsIG1fbnVtUGFzc2VkQXJncyhkYXRhLm51bVBh
c3NlZEFyZ3MpCisgICAgLCBtX251bVBhcmFtZXRlcnMoZGF0YS5udW1QYXJhbWV0ZXJzKQogewog
ICAgIC8vIFdlIGFyZSBhbGxvd2VkIGFsbCB0aGUgdXN1YWwgcmVnaXN0ZXJzLi4uCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsgKQpAQCAtNDIx
LDcgKzQyMSw3IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCBtX25ld0Zy
YW1lQmFzZSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYXJndW1lbnRDb3VudE9LID0KICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbV9uZXdG
cmFtZUJhc2UsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1faml0
LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIobV9udW1QYXJhbWV0ZXJzKSk7CiAgICAgbV9qaXQuYWRkMzIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSAr
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwgbV9uZXdGcmFtZUJhc2UpOwogICAg
IG1faml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCkpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1f
bmV3RnJhbWVCYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3
IEBAIHB1YmxpYzoKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgZGF0YTsKICAgICAgICAg
ZGF0YS5udW1Mb2NhbHMgPSBudW1Mb2NhbHMoKTsKICAgICAgICAgZGF0YS5udW1QYXNzZWRBcmdz
ID0gbV9udW1QYXNzZWRBcmdzOworICAgICAgICBkYXRhLm51bVBhcmFtZXRlcnMgPSBtX251bVBh
cmFtZXRlcnM7CiAgICAgICAgIGRhdGEuY2FsbGVlID0gZ2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSB9KS0+cmVjb3ZlcnkoKTsKICAgICAgICAgZGF0YS5hcmdz
LnJlc2l6ZShhcmdDb3VudCgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdD
b3VudCgpOyArK2kpCkBAIC03OTgsNiArNzk5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBlcmZv
cm1TYWZlV3JpdGVzKCk7CiAgICAgCiAgICAgdW5zaWduZWQgbV9udW1QYXNzZWRBcmdzIHsgVUlO
VF9NQVggfTsKKyAgICB1bnNpZ25lZCBtX251bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgOiBKU0ludGVy
ZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgbnVsbHB0
cikKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhj
b2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCiAgICAgLCBt
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAgLTc3LDYgKzc3LDkgQEAgSklUOjpKSVQo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmls
aW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25zdGFudCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7CisgICAgbV9w
cm9maWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrID0g
Y29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtOTAs
OCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgICAg
ICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0gICAgCi0gICAgc2tpcE9w
dGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpl
eGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2Nv
ZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIHNraXBPcHRp
bWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhl
Y3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJv
bUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50
cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNiwyMSBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRl
KFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9T
ZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRv
U2V0KQogeworICAgIC8vIE9PUFM6IFRha2UgYSBib29sZWFuIG9yIHNvbWV0aGluZyBzYXlpbmcg
aWYgd2UgY2FuIGJlIG51bGwuCisgICAgYXV0byBvayA9IGJyYW5jaFRlc3RQdHIoWmVybywgcG9p
bnRlclRvU2V0KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHBv
aW50ZXJUb1NldCwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSk7CisgICAgb2subGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQordm9pZCBKSVQ6OmVt
aXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRj
aEdQUikKIHsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBl
ID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPnZhclJlYWRPbmx5V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFyUmVhZE9u
bHlXYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4
KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCkBAIC0xMjksNyArMTM4LDcgQEAgdm9pZCBKSVQ6
OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3RlciwgcmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCByZWdUMCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlz
KTsKQEAgLTE4MSwyMSArMTkwLDQxIEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0
IEluc3RydWMKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1
dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
OworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZz
ZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0
YWJsZSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHQsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpLCByZXN1bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAg
ICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2Nr
Rm9yQ29uc3RydWN0KCkpLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwo
KSksIHJlc3VsdCk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlOjpvZmZzZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIocmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworfQor
CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2Nr
LCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJs
b2NrLCAiXG4iKTsKICAgICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFz
c2VydEFyZ3VtZW50Q291bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291
bnQgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3Ry
dWN0aW9ucyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2ln
bmVkIGluc3RydWN0aW9uQ291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5zaXplKCk7CiAKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9
IG1fY29kZUJsb2NrLT52bSgpOwogICAgIEJ5dGVjb2RlSW5kZXggc3RhcnRCeXRlY29kZUluZGV4
KDApOworCisgICAgLy8gT09QUzogTWF5YmUgb25seSBkbyB0aGlzIGlmIHdlIGRpc2FibGUgc2hh
cmluZyBzb21laG93PworICAgIC8qCisgICAgVk0mIHZtID0gbV91bmxpbmtlZENvZGVCbG9jay0+
dm0oKTsKICAgICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4ICYmIChtX2NvZGVCbG9j
ay0+aW5oZXJpdHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0
czxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7CiAgICAgICAgIC8vIFdlIGNhbiBvbmx5
IGRvIHRoaXMgb3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFtQ29kZUJsb2Nr
J3MgZXhhY3RseSBvbmNlLgogICAgICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBiZSBp
bnZhbGlkIG90aGVyd2lzZS4gV2hlbiB0aGUgTExJbnQgZGV0ZXJtaW5lcyBpdCB3YW50cyB0bwpA
QCAtMjM2LDYgKzI2NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKyAgICAqLwogCiAgICAgbV9ieXRlY29kZUNv
dW50SGF2aW5nU2xvd0Nhc2UgPSAwOwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsg
KSB7CkBAIC0yNzgsOCArMzA4LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4
ZWN1dGlvbigpKSkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVC
bG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7
CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1l
Kj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5
dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1Bv
aW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9CkBAIC01MjcsNyArNTU3LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7
CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAg
ICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV91bmxpbmtlZENvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dM
bigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgIiwgbV9ieXRlY29kZUluZGV4
LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgpKTsKQEAgLTU0NSw4ICs1NzUsOCBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAg
ICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAg
ICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygp
OwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0g
U0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZw
KCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC02
NzQsNTUgKzcwNCw1NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2Vu
ZGlmCiB9CiAKK3ZvaWQgSklUOjplbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9v
bFJlZ2lzdGVycygpCit7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21ldGFkYXRhR1BSKTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29u
c3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7Cit9CisKK3ZvaWQgSklUOjplbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCkKK3sKKyAgICBCYXNlOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZS
ZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
Cit9CisKIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9
IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICAvLyBPT1BTOiBNYXliZSB0aGlz
IHNob3VsZCBiZSBkb25lIG9uIHVubGlua2VkIGNvZGUgYmxvY2s/CisgICAgREZHOjpDYXBhYmls
aXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsK
ICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAg
ICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9y
SW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6
OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwot
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91
bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQotICAgIAotICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNl
IEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1bGVDb2RlOgotICAgIGNhc2UgRXZhbENvZGU6Ci0g
ICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAgICAgICAgLy8gV2UgY291bGQg
aGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5s
aW5lYWJsZSBjYWxsLgotICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9u
LgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5s
aW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwotICAg
ICAgICBicmVhazsKLSAgICB9CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVu
c3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1w
bGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxl
cygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEo
bG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1w
VGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
cygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRj
aEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zd2l0
Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYg
KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3Rv
cjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
dHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYm
IE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1f
ZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsK
KyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJv
ZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIE9PUFM6IGJ1aWxkIGEgZGlzYXNzZW1ibGVyIG9mZiB1
bmxpbmtlZCBjb2RlIGJsb2NrCisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxK
SVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KICAgICBpZiAoVU5M
SUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBPT1BTOiBi
dWlsZCBwcm9maWxlciBkaXNhc3NlbWJsZXIgb2ZmIHVubGlua2VkIGNvZGUgYmxvY2sKICAgICAg
ICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpD
b21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9jayksCisgICAgICAgICAgICAgICAgbV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVC
bG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1f
Y29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRC
eXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0
ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CkBAIC03NDIsMTEgKzc3
MywxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAg
IG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAg
ICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJl
Z2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVU
b3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9m
ZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzU3LDE2
ICs3ODksMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAg
IG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZl
Q2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygp
OworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7
CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7
CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVt
aXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewor
ICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV91bmxpbmtlZENvZGVCbG9j
ay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4
ZWRWZWN0b3I8VmFsdWVQcm9maWxlPjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAg
ICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBh
IGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdz
IGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVt
bXkgdmFsdWUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9y
KCkgJiYgIWFyZ3VtZW50KQorICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNzc3LDEyICs4MTMsMTIgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQz
MihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAg
ICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIo
KSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fY29k
ZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3MpOwor
ICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwgYXJn
dW1lbnQgKiBzaXplb2YoVmFsdWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJz
dEJ1Y2tldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
UkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVCbG9jay0+
aml0VHlwZSgpKSk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAgICAgIG1f
dm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhp
cyk7CkBAIC03OTksMjQgKzgzNSwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluCiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBp
ZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1f
Y29kZUJsb2NrKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2ssIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIHJlZ1Qw
KTsKIAogICAgIC8vIElmIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciBy
ZXF1aXJlIGFyaXR5IGZpeHVwLgotICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2Rl
QmxvY2stPm1fbnVtUGFyYW1ldGVycyAhPSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5
cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAgYm9vbCBy
ZXF1aXJlc0FyaXR5Rml4dXAgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkg
IT0gMTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxh
YmVsKCk7Ci0gICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9z
aG91bGRBbHdheXNCZUlubGluZWQpOworCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7
Ci0gICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xv
Z3VlKHJlZ1QwKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAKICAgICAg
ICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpLCByZWdUMSk7Ci0gICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJlZ2luTGFi
ZWwsIHRoaXMpOworICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGJlZ2lu
TGFiZWwsIHRoaXMpOwogCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
MCk7CiAKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2RlQmxvY2st
PmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRp
b25DYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCBhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb24obV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3Bl
cmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBhcmd1
bWVudEdQUjApOwogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAg
ICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywg
cmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTgzOSw3ICs4Nzgs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6
OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVf
cHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9
IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV91bmxp
bmtlZENvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkp
OwogICAgIGxpbmsoKTsKIH0KIApAQCAtODU4LDggKzg5Nyw4IEBAIHZvaWQgSklUOjpsaW5rKCkK
ICAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewogICAgICAgICBjYXNlIFN3aXRjaFJlY29y
ZDo6SW1tZWRpYXRlOgogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyOiB7Ci0g
ICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAg
ICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAg
ICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dp
dGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0
XSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRUYWJsZS5t
X2JyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBv
ZmZzZXQgPSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3MSw4ICs5MTAs
OCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3aXRjaFJl
Y29yZDo6U3RyaW5nOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
ICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1
bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRl
Y29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKGF1
dG8mIGxvY2F0aW9uIDogdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hPZmZzZXQ7
CkBAIC05MDYsMzIgKzk0NSwzNSBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCByZWNvcmQuY2FsbGVlKTsKICAgICB9CiAKLSAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9kZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2lu
QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlWYWxz
LCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbnN0YW5jZU9mcywg
cGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5kQWNj
ZXNzZXMsIHBhdGNoQnVmZmVyKTsKKyAgICBhdXRvIGZpbmFsaXplSUNzID0gWyZdIChhdXRvJiBn
ZW5lcmF0b3JzKSB7CisgICAgICAgIGZvciAoYXV0byYgZ2VuIDogZ2VuZXJhdG9ycykgeworICAg
ICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+c3RhcnQgPSBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zdGFydCk7CisgICAgICAgICAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KGdlbi5tX2RvbmUpOworICAgICAgICAgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc2xvd1BhdGhCZWdpbik7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkcyk7CisgICAgZmluYWxpemVJ
Q3MobV9nZXRCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHNXaXRoVGhpcyk7Cisg
ICAgZmluYWxpemVJQ3MobV9wdXRCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9wdXRCeVZhbHMp
OworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlW
YWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1faW5C
eVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5zdGFuY2VPZnMpOworICAgIGZpbmFsaXplSUNz
KG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMpOwogCiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlvbklu
Zm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZv
ID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87Ci0gICAgICAgIGluZm8uc2V0Q29kZUxv
Y2F0aW9ucygKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0
clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQYXRoU3RhcnQpLAotICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxv
Y2F0aW9uKSk7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0
aW9uSW5mby51bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24g
PSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5m
by5kb25lTG9jYXRpb24pOwogICAgIH0KIAotICAgIHsKLSAgICAgICAgSklUQ29kZU1hcEJ1aWxk
ZXIgaml0Q29kZU1hcEJ1aWxkZXI7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNl
dCkgewotICAgICAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQot
ICAgICAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5
dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xh
YmVsc1tieXRlY29kZU9mZnNldF0pKTsKLSAgICAgICAgfQotICAgICAgICBtX2NvZGVCbG9jay0+
c2V0SklUQ29kZU1hcChqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpKTsKKyAgICBKSVRDb2Rl
TWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKKyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVP
ZmZzZXQpIHsKKyAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQor
ICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0XSkpOwogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpk
dW1wRGlzYXNzZW1ibHkoKSkpIHsKQEAgLTk0MCwyNiArOTgyLDM3IEBAIHZvaWQgSklUOjpsaW5r
KCkKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkobV9jb21waWxhdGlvbikpIHsKKyAgICAgICAg
Ly8gT09QUzogbWFrZSBieXRlY29kZSBwcm9maWxlciBrbm93IGFib3V0IHVubGlua2VkIENCPwog
ICAgICAgICBpZiAoT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpCiAg
ICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9u
LmdldCgpLCBwYXRjaEJ1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
ci0+YWRkQ29tcGlsYXRpb24obV9jb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAgICAgICAg
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2ZpbGVkQ29k
ZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2RlT3JpZ2lu
TWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlciksIHBhdGNoQnVmZmVyKTsKICAgICAKKyAgICAvLyBPT1BTOiBNYWtlIGEg
dmVyc2lvbiBvZiBDb2RlQmxvY2tXaXRoSklUVHlwZSB0aGF0IGtub3dzIGFib3V0IFVubGlua2Vk
Q29kZUJsb2NrLgogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVf
Q09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNl
bGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2Vs
aW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3By
b2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAg
IG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0
eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29kZSA9IGFkb3B0UmVm
KCpuZXcgQmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2spKTsKKworICAgIG1f
aml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gV1RGTW92ZShtX3VubGlua2VkQ2FsbHMpOworICAg
IG1faml0Q29kZS0+bV9ldmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJ
bmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0gV1RGTW92ZShtX3Vu
bGlua2VkU3R1YkluZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdU
Rk1vdmUobV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcyA9IFdURk1vdmUobV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2pp
dENvZGUtPm1faml0Q29kZU1hcCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCk7CisgICAg
bV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNzKTsKKyAgICBtX2ppdENvZGUtPm1fY29u
c3RhbnRQb29sID0gV1RGTW92ZShtX2NvbnN0YW50UG9vbCk7CiAKICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVw
IGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCkt
PnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCku
dW50YWdnZWRQdHIoKSk7CisgICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9y
ICVwIGF0IFslcCwgJXApLlxuIiwgbV91bmxpbmtlZENvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFi
bGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9y
eSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpm
aW5hbGl6ZU9uTWFpblRocmVhZCgpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25N
YWluVGhyZWFkKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFp
c0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogCkBAIC05NjgsMjUgKzEwMjEsMjEgQEAgQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5rQnVmZmVyLT5ydW5N
YWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MoKTsKIAotICAgIHsKLSAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgbV9jb2RlQmxv
Y2stPnNocmlua1RvRml0KGxvY2tlciwgQ29kZUJsb2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5r
KTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1i
ZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgewotICAgICAgICBIYW5kbGVySW5mbyYgaGFu
ZGxlciA9IG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOwotICAgICAgICAvLyBGSVhN
RTogPHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KLSAgICAgICAgaGFuZGxlci5uYXRpdmVDb2Rl
ID0gbV9jb2RlQmxvY2stPmppdENvZGVNYXAoKS5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50
YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOwotICAgIH0KKyAgICAv
LyBPT1BTOiBEb24ndCB0aGluayB0aGlzIHNocmluayBpcyByZWFsbHkgZG9pbmcgYW55dGhpbmcg
YW55bW9yZS4gVmVyaWZ5LgorICAgIC8veworICAgIC8vICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgLy8gICAgbV9jb2RlQmxvY2stPnNocmlu
a1RvRml0KGxvY2tlciwgQ29kZUJsb2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5rKTsKKyAgICAv
L30KIAorICAgIC8vIE9PUFM6IG1fcGNUb0NvZGVPcmlnaW5NYXAgc2hvdWxkIGxpdmUgb24gQmFz
ZWxpbmVKSVRDb2RlIGZvciBiYXNlbGluZSBjb2RlYmxvY2tzLgogICAgIGlmIChtX3BjVG9Db2Rl
T3JpZ2luTWFwKQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoV1RG
TW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKSk7CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2st
PnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOwogCiAg
ICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5h
ZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAg
ICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgp
KSk7CisgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zU2l6ZSgpKSk7CiAKLSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENv
ZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJh
c2VsaW5lQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4gQ29t
cGlsYXRpb25TdWNjZXNzZnVsOwogfQpAQCAtOTk4LDExICsxMDQ3LDExIEBAIHNpemVfdCBKSVQ6
OmNvZGVTaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAK
LUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGRvTWFp
blRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0
aG91dEZpbmFsaXppbmcoZWZmb3J0KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQo
KTsKKyAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxOCArMTA5
MSwyOCBAQCB2b2lkIEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAg
IG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBh
cmluZyBmb3IgSklUIGNvbXBpbGF0aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFt
ZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkp
ID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAog
ICAgIHJldHVybiByb3VuZExvY2FsUmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChj
b2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGxJblJlZ2lzdGVycyk7CiB9CiAKLWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENv
ZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBmcmFtZVJlZ2lzdGVyQ291bnRGb3Io
Y29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKworaW50IEpJVDo6c3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2sp
IC0gMSkub2Zmc2V0KCk7CiB9CiAKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNv
ZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKIEhhc2hNYXA8Q1N0cmluZywgU2Vj
b25kcz4gSklUOjpjb21waWxlVGltZVN0YXRzKCkKIHsKICAgICBIYXNoTWFwPENTdHJpbmcsIFNl
Y29uZHM+IHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjgy
MDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNiArMzcsNyBAQAogCiAjZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwgZXhw
ZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9mZnNl
dCBcIiVzXCIgc2hvdWxkIGJlICVkLCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19jYXN0
PGludD4oZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCisjaW5jbHVkZSAi
QmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29t
bW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCkBAIC00NCw2ICs0
NSw3IEBACiAjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCisjaW5jbHVkZSAiTExJbnRE
YXRhLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQ
b2ludGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsxNTEsMTQg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25J
bmZvIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247Ci0gICAgICAgIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5r
ZWRDYWxsTGlua0luZm87CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExp
bmtJbmZvQ29uc3RhbnQ7CiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3
Q2FsbGVlRnVuY3Rpb24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBw
cml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJ
VCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93
UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKICAgICAgICAgZnJp
ZW5kIGNsYXNzIEpJVFRodW5rczsKQEAgLTE3MSw2ICsxNzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5v
dCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgogICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCisgICAgICAgIHVzaW5n
IEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwg
Q29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVP
ZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMTc4LDI4ICsx
ODIsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0lu
dGVyZmFjZUpJVDo6dm0oKTsgfQogCiAgICAgICAgIHZvaWQgY29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVz
dWx0IGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZp
bmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayopOwogICAgICAgICBzaXplX3QgY29kZVNpemUo
KSBjb25zdDsKIAogICAgICAgICB2b2lkIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29t
cGlsZSgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBp
bGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9m
ZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBKSVQodm0s
IGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGNvZGVCbG9jaywgZWZm
b3J0KTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVy
Q291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZy
YW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIGludCBzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIGlu
dCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0
cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBp
bGVUaW1lKCk7CiAKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0YUdQ
UiA9IExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFI7CisgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNfY29uc3RhbnRzR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFI7
CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7CiAgICAgICAgIHZvaWQgcHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKICAgICAgICAgdm9pZCBsaW5rKCk7Ci0gICAgICAgIENv
bXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAg
ICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklUQ29t
cGlsYXRpb25FZmZvcnQpOwogCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNv
ZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwo
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2ICsy
MzIsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkUHRyRnJvbU1ldGFk
YXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFk
YXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0YWRh
dGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2
b2lkIHN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2
b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgbG9hZENvbnN0
YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZENvZGVC
bG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGVt
aXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOwor
CiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAgICAg
ICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7
CkBAIC0yNTgsMTYgKzI5MywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFi
bGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYg
T3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5m
b0NvbnN0YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3Rk
OjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFy
Z3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8
fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxM
aW5rSW5mb0NvbnN0YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAg
ICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0
IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwogICAgICAgICB2b2lk
IGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtMjg3LDE0ICszMjIsMTUgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQg
ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdy
aXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lcik7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpOwogCiAg
ICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJl
Z1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4K
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJl
Zyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIC8vdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7CisgICAgICAgIC8vdm9p
ZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShjb25zdCBCeXRlY29kZSYsIEdQUlJlZyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBK
U1ZhbHVlUmVncyk7CiAjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJl
Z3MpOwpAQCAtMzA3LDYgKzM0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lk
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5
UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJh
eVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2Ny
YXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBwdHJk
aWZmX3QsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3Ap
OwpAQCAtNTkyLDcgKzYzMiw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNiwxNCArNjY1LDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBp
c1Vuc2lnbmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJy
YW5kLCBBY2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVh
bFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVT
bG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5j
RXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBl
bWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhcklu
amVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAg
ICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNo
R1BSKTsKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1
bnNpZ25lZCBkZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBV
U0UoSlNWQUxVRTY0KQpAQCAtNjQ1LDcgKzY4NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlm
CiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1
aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9p
bnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1Nl
dCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRl
clRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZv
aWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9p
ZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NCw2ICs2
OTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAg
Ym9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENv
bnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENv
bnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3Rh
bnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC02OTUsMjYgKzczNSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJl
c29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVW
YXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFU
T1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9y
KFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX0dFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgot
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwot
Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNj
b3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBN
b2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFu
IHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2ZWRDbG9zdXJlVmFyIGJlY2F1c2Ug
d2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29wZS4KLSAgICAgICAg
ICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNkZWZpbmUgREVDTEFSRV9SRVNPTFZF
X1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5
cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFS
RV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVz
b2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1l
KTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mKTsK
QEAgLTc1OSwxMCArNzgxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwog
ICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFk
YXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5
dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsK
ICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3Bl
cmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjAsMjAg
Kzg0MiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7
CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+
CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46
Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAg
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlw
ZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwg
dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVz
cyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVz
cyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAg
ewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9uVHlw
ZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRyZXNz
KEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9m
ZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE4LDI1ICs5NDAsMjAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9w
dGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5C
ZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7
IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRF
bWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVy
IHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNo
IGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgZW1pdE1h
dGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAgICAgICB2
b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBv
cnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1l
cygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBm
cm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8gYmUg
Y29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0
byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNh
bWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNvcGll
ZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmlu
YXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmlu
YXJ5T3ApOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjMs
OSArOTgwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5
PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsK
IAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZv
czsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGll
ZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAg
ICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTk5OSwxMSArMTAxMywyNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBJbnN0cnVjdGlvbiosIFVuaXF1ZVJl
ZjxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+PiBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9u
U3RhdGU7CiAKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwotICAgICAgICBib29sIG1f
Y2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmls
aW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsK
IAotICAgICAgICBSZWZQdHI8RGlyZWN0SklUQ29kZT4gbV9qaXRDb2RlOworICAgICAgICBDb2Rl
QmxvY2sqIG1fcHJvZmlsZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFVubGlua2Vk
Q29kZUJsb2NrKiBtX3VubGlua2VkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworCisgICAgICAgIE1h
dGhJQ0hvbGRlciBtX21hdGhJQ3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1f
aml0Q29kZTsKKworICAgICAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAg
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5r
ZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5m
bz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1
bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdK
dW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBzdHJ1Y3QgTm90
QUNvZGVCbG9jayB7IH0gbV9jb2RlQmxvY2s7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJl
dmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIo
b3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewogICAgICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1
bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRH
UFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMy
MCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAg
ICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0
ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOworICAg
ICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0
TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91Ymxl
T3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2Nv
ZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxl
KGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubV9wcm9maWxlSW5kZXgpOworICAg
IEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUp
OwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdh
dGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9w
ZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAg
ICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAt
ODk5LDggKzkwNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QK
IAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFy
aXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91
bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BBZGQ+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0
aElDcy5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BB
ZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjpl
bWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNv
ZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUp
OwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9h
ZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3Jh
dGNoR1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOwor
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFk
ZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAx
NSwxMCArMTAyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElD
CiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxl
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxl
KTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmls
ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5v
blByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3Jh
dGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xv
d0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEz
ICsxMDYyLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNl
bmRpZgogCiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJp
dGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRo
UHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVp
bnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVp
bnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywg
YXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlv
biksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxF
KE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIw
LDEzICsxMTI4LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMK
ICNlbmRpZgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMt
PmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChh
cml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVw
YXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNl
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nh
c3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBy
ZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpA
QCAtMTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0
aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwog
ICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2st
PmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1fcHJv
ZmlsZUluZGV4KTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1f
b3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0
X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11
bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2st
PmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1fcHJv
ZmlsZUluZGV4KTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRkSklUTXVsSUMo
YXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0
cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11
bCk7CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNv
bnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRTdWJJQyog
c3ViSUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzMiw3ICsyMzIsNyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2
CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBz
dG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxs
ZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgcmVnVDEsIHJlZ1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAg
LTMyNCw3ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlv
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBl
bWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93
Q2FzZShjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2lu
Y2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxs
LmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJl
c3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
ZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmly
dHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4IEBAIHN0ZDo6ZW5h
YmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bj
b2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0
ZWNvZGUsIENhbGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBi
eXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBjaGVj
a3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJbmNs
dWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNr
cG9pbnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0YWNr
T2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKKwogICAg
IGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsK
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJP
ZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1Qw
KTsKICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qw
KTsKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVj
a3BvaW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMy
VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2Fs
bExpbmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSAr
IEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBk
b25lLmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0ZDo6ZW5hYmxlX2lm
X3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQg
PT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUs
IENhbGxMaW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQog
ewogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBA
IC05MSw3ICs5Miw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QK
ICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1
bWVudHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZy
YW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVSZWdp
c3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwor
ICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVl
UmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmly
c3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywg
cmV0dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJVDo6Y29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVy
YXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNldHVw
T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJhdGlv
bihzZXR1cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVn
VDMsIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3Vu
dC4KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5
bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJy
YW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFk
ZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25zdGFu
dChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSks
IHJlZ1QzKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJl
Z1QyKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9m
ZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dlc3Qu
bGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywxNiAr
MTMxLDE2IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxhdGU8
PgogYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkK
IHsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAg
IHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNh
bGxlckZyYW1lT2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdp
c3RlciwgYXJndW1lbnRHUFIxKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRk
cmVzcyhhcmd1bWVudEdQUjEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91
bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwg
cmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDApKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJldHVyblZhbHVlR1BSKSk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29k
ZSk7CiAKQEAgLTE0OCw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGlu
Zm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQo
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExp
bmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNv
ZGUubV9hcmd2OwpAQCAtMTU2LDQzICsxNjAsNDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQg
KiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXRWaXJ0dWFs
Q2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0
TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBpbmZvKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRl
Y29kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6OmNvbXBpbGVUYWls
Q2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQoteworYm9vbCBKSVQ6OmNv
bXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQs
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRl
bXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0
ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiti
b29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxp
bmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0gICAgQ2FsbEZy
YW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJn
cyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9
IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9
CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9
IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZsZURhdGEtPm51
bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhcmFt
ZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CisgICAgc2h1ZmZs
ZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Cisg
ICAgc2h1ZmZsZURhdGEtPm51bUxvY2FscyA9CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURh
dGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICBzaHVmZmxlRGF0YS0+YXJncy5y
ZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0
ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAg
ICAgIHNodWZmbGVEYXRhLT5hcmdzW2ldID0KICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluSlNTdGFjaygKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAg
RGF0YUZvcm1hdEpTKTsKICAgICB9Ci0gICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAg
VmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURh
dGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0g
VmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAgc2h1ZmZsZURh
dGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhz
ID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
KnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3Rh
bnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMg
PSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwg
cmVnVDIsIFsmXSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURh
dGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQ
YXRocyk7CisKKyAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFt
ZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2Nh
dGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0yMTgsMTQgKzIyNiwy
NSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0g
Q2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVy
IHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLwotICAgIENh
bGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxf
ZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwg
aW5mbyk7CisKKyAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBp
ZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKSB7CisgICAgICAgIGluZm8gPSBtX3VubGlua2Vk
Q2FsbHMuYWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihv
cGNvZGVJRCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZvKTsKKworICAgICAgICBBU1NF
UlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Cisg
ICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygp
KTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS51bmxp
bmtlZENhbGxMaW5rSW5mbyA9IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3RhbnQ7Cisg
ICAgfQorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQpOwogCiAg
ICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3
aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRlY29kZUluZGV4ID0g
bV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQzMl90IGxv
Y2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOworICAgIHVp
bnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRz
KCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVzcyhjYWxs
RnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBj
YWxsZWUuCkBAIC0yMzQsMTYgKzI1MywxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25z
dCBJbnN0cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNh
bGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxs
VHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAgaWYgKGNvbXBpbGVU
YWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQorICAgIGlmIChjb21w
aWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3Rh
bnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCBy
ZWdUMik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAgICBhdXRvIHNs
b3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1Bh
dGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVn
VDAsIHJlZ1QyLCBbJl0gewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
ICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CiAgICAgICAgIH0pOwpA
QCAtMjUzLDEzICsyNjgsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3RpbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBzbG93UGF0aHMgPSBpbmZv
LT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Olllcyk7CisgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXREYXRhSUNG
YXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyKTsKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxh
YmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwog
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjczLDIwICsyODgs
MjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMyk7CisgICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0
aGlzKTsKKyAgICBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgqbV92bSwgKnRoaXMs
IHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9t
VGFpbENhbGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKQEAgLTM5NSwxNyArNDEwLDMwIEBAIHZvaWQg
SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KIAogICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKICAgICAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworCisgICAgbW92ZShyZWdUMCwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1Qx
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXN1bHRHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9
CkBAIC00MTYsMTAgKzQ0NCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVu
KGNvbnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0
aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
Ci0gICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGl0ZXJhdG9yR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBMaXN0IG5vdE9iamVj
dDsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyYXRvckdQUikpOwog
ICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0b3JHUFIpKTsKQEAg
LTQzMiwxOSArNDU4LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNv
bnMKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkg
ewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
PGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyYXRvckdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgbW92ZShpdGVy
YXRvckdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIAogICAgIGF1
dG8gZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0
b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRvbmUubGluayh0aGlz
KTsKIH0KQEAgLTQ1Miw3ICs0NzYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
b3Blbihjb25zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wSXRlcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewog
ICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNhc2UgTmFy
cm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC00NzAsNTAgKzQ5
Myw3NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgSnVt
cCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJp
YykpKTsKIAogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgb3I4KFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIEFic29sdXRl
QWRkcmVzcygmbWV0YWRhdGEubV9pdGVyYXRpb25NZXRhZGF0YS5zZWVuTW9kZXMpKTsKKyAgICBs
b2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9m
U2Vlbk1vZGVzKCksIHJlZ1QwKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1
aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIHJlZ1QwKTsKKyAgICBzdG9yZThUb01l
dGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRP
Zkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9mU2Vl
bk1vZGVzKCkpOwogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9u
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7
CiAgICAgLy8gY2FsbCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkgaW4gcmVnVDAK
IAotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BS
ID0gcmVnVDI7Ci0gICAgR1BSUmVnIGRvbmVHUFIgPSByZWdUMTsKLSAgICAvLyBpdGVyUmVzdWx0
R1BSIHdpbGwgZ2V0IHRyYXNoZWQgYnkgdGhlIGZpcnN0IGdldCBieSBpZCBiZWxvdy4KLSAgICBt
b3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpz
Y3JhdGNoOworICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKIAor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0OwogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJS
ZXN1bHRHUFIpOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVH
UFIgPT0gYmFzZUdQUik7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIpOwogCiAgICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRk
KHZhbHVlR1BSKTsKKyAgICAgICAgcHJlc2VydmVkUmVncy5hZGQoaXRlckNhbGxSZXN1bHRHUFIp
OwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHBy
ZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1Zh
bHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHJlZ1QzLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBw
cmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzdHViSW5mb0dQUiwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyBk
b25lR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1Zh
bHVlUmVncyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQo
KTsKICAgICB9CiAKLQogICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7Ci0g
ICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdpc3RlclNldCB1c2Vk
UmVnaXN0ZXJzKGRvbmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxsb2NhdG9yLmFs
bG9jYXRlU2NyYXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25l
ID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGdsb2JhbEdQUik7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJ
ZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2Jh
bEdQUik7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtb3ZlKGl0ZXJDYWxs
UmVzdWx0R1BSLCBiYXNlR1BSKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQsIEFjY2Vzc1R5cGU6OkdldEJ5
SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1
ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRHUFIpOwogCiAgICAg
ICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01MjcsNTkgKzU3Nyw1NSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgp
KTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQ
UiA9IHJlZ1QyOwogCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAgIEp1
bXBMaXN0IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENl
bGwoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90
Q2VsbChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBp
ZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCk7CiAgICAgICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgICAg
IAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBub3RP
YmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAg
bm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyQ2FsbFJlc3VsdEdQUikpOwog
Ci0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkb25l
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLQotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGRvbmVWUmVnLCByZWdUMSk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0
R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3Vt
ZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9u
ZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7CisKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVW
UmVnLCBkb25lR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9y
Q2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVj
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKICAg
ICB9CiAKICAgICB7ICAgCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgICAgICBH
UFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpOwogICAgICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAg
ICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAgIENhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
IHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVz
dWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVu
dEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAgICAgfQot
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKIAorCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogbmFtZXNwYWNlIERGRyB7CkBAIC0xNTksMTAgKzE2MCwxMCBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgYm9vbCB1c2VEYXRhSUMoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKLSAg
ICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBPcHRpb25zOjp1c2VEYXRh
SUNJbk9wdGltaXppbmdKSVQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAy
ODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNhY2hl
YWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKQEAgLTQ2LDEwICs0Nyw5IEBA
IHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmYKIEpJVElubGluZUNhY2hl
R2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNl
dCYgdXNlZFJlZ2lzdGVycykKLSAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAsIG1f
aml0VHlwZShqaXRUeXBlKQorICAgIDogbV9qaXRUeXBlKGppdFR5cGUpCiB7Ci0gICAgbV9zdHVi
SW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUs
IGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5mbyA9IGNvZGVC
bG9jayA/IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBn
YXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2FsbFNp
dGU7CiAKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyczsKQEAg
LTU5LDcgKzU5LDYgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAg
ICAgTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoLCBDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpCiB7CiAgICAgbV9zdHViSW5mby0+
c3RhcnQgPSBzdGFydDsKLQogICAgIG1fc3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IGZhc3RQYXRo
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obV9kb25lKTsKIAogICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCkBAIC02Nyw2ICs2NiwxNSBAQCB2b2lkIEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0
TG9jYXRpb24gPSBzbG93UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3Ns
b3dQYXRoQmVnaW4pOwogfQogCit2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpnZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBtX3N0YXJ0ID0gaml0Lmxh
YmVsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkp
OworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBqaXQu
Y2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICBtX2RvbmUg
PSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwK
ICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTExMCw3ICsxMTgsNyBA
QCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yCiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNW
YWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
KQogICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4s
IGNhbGxTaXRlLCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1Yklu
Zm9HUFIpCi0gICAgLCBtX2lzTGVuZ3RoQWNjZXNzKHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2Rl
QmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAgICAsIG1faXNMZW5n
dGhBY2Nlc3MoY29kZUJsb2NrICYmIHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZt
KCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChi
YXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZp
c2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUo
SklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvblZh
bGlkYXRpb24uaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNW
YWx1ZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKQEAgLTM4LDExICszOSwxMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRl
eDsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZv
Oworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNz
VHlwZSA6IGludDhfdDsKIGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKK3N0cnVjdCBC
YXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBi
YXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHkgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQg
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBH
UFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVj
dCBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1
bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
byA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gg
PSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZh
bFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86
OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6
cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdU
MjsKKyAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFuZCBp
bml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgorICAgIHN0YXRp
Y19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQpOworICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gzID0gR1BSSW5mbzo6cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OmFy
Z3VtZW50R1BSMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUkluZm86
OmFyZ3VtZW50R1BSMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQ
UkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MSA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVn
VDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9
IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3Ry
dWN0IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworfTsKKworc3RydWN0IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BS
SW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5m
bzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBwcm9maWxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNl
bGluZVByaXZhdGVCcmFuZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJyYW5k
ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCiBjbGFzcyBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvciB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7
IH0KQEAgLTYyLDE1ICsxNjYsMjEgQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAg
ICAgIExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhM
aW5rQnVmZmVyLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4gc3RhcnQpOwotICAgIAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51
bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsg
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAg
ICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0
cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwotICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xv
d1BhdGhDYWxsOyAvLyBPT1BTOiBtYWtlIHJlcG9ydENhbGwgcGFzcyBzb21ldGhpbmcgaW4gd2Ug
Y2FuIHVzZSBmb3IgdGhlIG5vbi1DVEkgdGh1bmtzIGJ1aWxkcy4gCiB9OwogCiBjbGFzcyBKSVRC
eUlkR2VuZXJhdG9yIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTk4LDcg
KzIwOCw3IEBAIHByb3RlY3RlZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1
ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworcHVi
bGljOgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAt
MTMyLDggKzI0Miw4IEBAIHB1YmxpYzoKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZh
dWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklU
VHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAg
IEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBF
Q01BTW9kZSwgUHV0S2luZCk7CisgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNo
ZWFibGVJZGVudGlmaWVyLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2
YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtp
bmQpOwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwog
ICAgIApAQCAtMTYzLDExICsyNzMsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFz
dFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jh
c2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhK
dW1wOwogfTsKIApAQCAtMTkxLDggKzI5OSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJh
dGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1f
c2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjE2LDggKzMyMiw2IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFi
bGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjQxLDggKzM0NSw2IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRl
OgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVy
OjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjc3LDggKzM3OSw2IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVm
ZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOwogCi1wcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFi
bGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzAyLDExICs0MDIsOSBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXBy
aXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0
OwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMzAsOCArNDI4LDYg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxl
ciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAg
IE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSwxMyArMzUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0g
ICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNE
b3VibGUoKTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3Rh
bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuaXNEb3VibGUoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5k
Q29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0
YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9j
ay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNf
SU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAg
IGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICht
X3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMp
ID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAg
ICAvLyBPT1BTOiBmaW5kIGEgd2F5IHRvIGFzc2VydCB0aGF0IGFsbCBsaW5rIHRpbWUgY29uc3Rh
bnRzIGFyZSBjZWxscy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1Zh
bHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAg
QVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoc3JjKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25z
dGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbjo6TGlua1RpbWVDb25zdGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJ
bnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRy
eSkKQEAgLTE1NiwzNiArMTgxLDM2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENh
bGxXaXRoRXgKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVy
IGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewog
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVy
blZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5W
YWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0
YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQor
dGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0
IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRz
dCkKIHsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5W
YWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BS
KTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJl
Z3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFs
dWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVl
R1BSKTsKICNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykp
CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlT
bG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsK
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0
aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlu
c3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNT
RVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+
aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAx
KTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2Rl
SW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2
YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0
ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsK
LSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+
aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3Ry
dWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2tw
b2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwzNCBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewot
ICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
U3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5s
ZW5ndGgoKSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQotewotICAg
IEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0gICAgLy8gV2UncmUgaW4gYSBzaW1w
bGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRp
cmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1
ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQotICAgIEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3Jp
cHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAgIHN0b3JlMzIodmFsdWUucGF5bG9h
ZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwotICAgIHN0b3JlMzIodmFsdWUu
dGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgotfQorICAgIGlmICgh
c3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYm
IGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0g
MTsKK30KKworLy8gT09QUworLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQorLy97Cisv
LyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKKy8vCisvLyAgICAvLyBXZSdyZSBp
biBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0
IGRvIGEgZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lmIFVTRShKU1ZBTFVFNjQpCisvLyAg
ICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vI2Vsc2UK
Ky8vICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8
RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8gICAg
c3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7
CisvLyAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7
CisvLyNlbmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5h
YmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwg
VmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlm
UHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVn
VDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNl
CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsMjQgKzM1Mywy
OSBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKK3Rl
bXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7
CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29k
ZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKworICAgIFZhbHVlUHJvZmlsZSYgdmFsdWVQ
cm9maWxlID0gdmFsdWVQcm9maWxlRm9yKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2Rl
QmxvY2spLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKTsKKyAgICBzdG9yZTY0KHZhbHVl
LmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKyAgICAvLyBPT1BTCisgICAgLy9wdHJk
aWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1l
dGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPiht
X2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJz
dEJ1Y2tldCgpOworICAgIC8vc3RvcmU2NCh2YWx1ZS5ncHIoKSwgQWRkcmVzcyhzX21ldGFkYXRh
R1BSLCBvZmZzZXQpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJl
ZyByZXN1bHRSZWcpCi17Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUs
IEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwotfQorLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyByZXN1bHRS
ZWcpCisvL3sKKy8vICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1Zh
bHVlUmVncyhyZXN1bHRSZWcpKTsKKy8vfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4K
LWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRh
dGEsIEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CiB9CiAjZW5kaWYKIApAQCAtMzYw
LDYgKzM5NSwyMSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXCiAg
ICAgfQogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdp
c3RlcklEIHNjcmF0Y2hHUFIpCit7CisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewor
ICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlMzJUb01ldGFk
YXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmlsZSk7CisgICAgfQor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lz
dGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQoreworICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJl
SUQoKSwgY2VsbEdQUiwgc2NyYXRjaEdQUik7Cit9CisKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIHJl
dHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CkBAIC0zODAsNyArNDMwLDcg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQg
SklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFs
dWUpCiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVy
KHJlZyk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWRE
b3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyAr
NTQ2LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBp
ZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyAr
NTU2LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
cmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2Vs
bChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcu
aXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAg
ZWxzZQpAQCAtNTE0LDExICs1NjQsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25z
dGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlT
X0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNv
bnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQs
MTEgKzU4OSwxNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAg
ICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNv
ZGVJbmRleCBpcyBzZXQuCiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlm
ICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwotICAgICAgICBlbHNlCisgICAgICAgIHN3aXRjaCAo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3Jj
KSkgeworICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAg
ICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7
CiAgICAgICAgICAgICBtb3ZlKEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01NjYsMTEgKzYxNyw2IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpp
c09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBz
cmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0K
LQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRy
ZXNzRm9yKGRzdCkpOwpAQCAtNTk1LDcgKzY0MSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRKdW1wU2xvd0Nhc2UKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsK
LSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25v
d25DZWxsKHZSZWcpKQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsK
IH0KIApAQCAtNjM3LDMwICs2ODMsNyBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJn
ZXQoY29uc3QgCiB7CiAgICAgaWYgKHRhcmdldCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAg
ICByZXR1cm4gbV9jb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwot
fQotCi1BTFdBWVNfSU5MSU5FIEdldFB1dEluZm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0
VG9TY29wZSBieXRlY29kZSkKLXsKLSAgICB1bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFk
YXRhSUQgKyAxOyAvLyBIYXNoTWFwIGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBp
dGVyYXRvciA9IG1fY29waWVkR2V0UHV0SW5mb3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRv
ciAhPSBtX2NvcGllZEdldFB1dEluZm9zLmVuZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5m
byhpdGVyYXRvci0+dmFsdWUpOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2dldFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJ
bmZvcy5hZGQoa2V5LCBnZXRQdXRJbmZvLm9wZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dElu
Zm87Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5h
cnlBcml0aFByb2ZpbGUgSklUOjpjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUp
Ci17Ci0gICAgdWludDY0X3Qga2V5ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6
b3Bjb2RlSUQpICsgMSkgPDwgMzIgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9t
ZXRhZGF0YUlEKTsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZp
bmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgp
KQotICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7Ci0gICAgbV9jb3BpZWRBcml0aFByb2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7
Ci0gICAgcmV0dXJuIGFyaXRoUHJvZmlsZTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9j
ay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgpAQCAtNjgxLDYgKzcwNCw2MSBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6
ZWNtYU1vZGU8T3BQCiAgICAgcmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZy
b21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJl
ZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5r
ZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSAr
IG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYg
Ynl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFk
ZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZz
ZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhG
cm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJS
ZWcgcmVzdWx0KQoreworICAgIGxvYWQ4KEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtl
ZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsg
b2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRh
KFZhbHVlVHlwZSB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0
KQoreworICAgIHN0b3JlOCh2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBv
ZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6c3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29k
ZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVz
cyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldElu
TWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVy
SW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BS
UmVnIHJlc3VsdCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxv
Y2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCks
IHNfbWV0YWRhdGFHUFIsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxv
YWRDb25zdGFudChKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJl
ZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KGNvbnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAg
ICBsb2FkQ29uc3RhbnQobV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3Rl
ciBjb25zdGFudCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dC5pc0NvbnN0YW50KCkpOworICAgIC8vIE9PUFM6IE1heWJlIG1ha2UgdGhpcyBtb3JlIGVmZmlj
aWVudD8KKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBDb2RlQmxvY2s6Om9mZnNldE9m
Q29uc3RhbnRzVmVjdG9yQnVmZmVyKCkpLCByZXN1bHQpOworICAgIGxvYWQ2NChBZGRyZXNzKHJl
c3VsdCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2YoSlNWYWx1ZSkpLCByZXN1
bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZN
OjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJh
bWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4
Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlv
biA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC05OTcsNyArOTk3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogCiAgICAgLy8g
Y3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dp
dGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5k
KFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQs
IFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFi
bGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZv
ciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAg
Y29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJ
bmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJh
Y3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwog
CkBAIC0xMDQyLDcgKzEwNDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNv
bnN0IEluCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNb
dGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5k
ZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcp
KTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODIw
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw2ICs0Myw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAj
aW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclBy
aW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTQs
MTEgKzU2LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlz
Q29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAg
IHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9y
KGRzdCkpOwotICAgICAgICBlbHNlCisgICAgICAgIC8vIE9PUFM6IG1vc3QgIk90aGVyIiBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQgZnJvbSB0
aGUgVW5saW5rZWRDb2RlQmxvY2suIEl0J3MganVzdAorICAgICAgICAvLyBhIGNvdXBsZSB0eXBl
cyB0aGF0IGNhbid0LiBDcmVhdGUgYW4gYWJzdHJhY3Rpb24gZm9yIHRoYXQuCisKKyAgICAgICAg
c3dpdGNoIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbihzcmMpKSB7CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRl
Z2VyOgorICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7Cisg
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoc3JjKTsKICAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KSksIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVn
VDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
ODcsMzcgKzEwMCwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24q
CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29i
amVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9u
U2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2Fw
YWNpdHkoKSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1
YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3Vs
dFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAg
UmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVS
ZWcgPSByZWdUMzsKIAotICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwotICAgIGVsc2UgewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAg
IGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFs
bG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRv
ciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNj
cmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFn
ZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0
b3JGZW5jZSgqbV92bSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2Fk
UHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9m
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZz
ZXRPZkFsbG9jYXRvcigpLCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCks
IHN0cnVjdHVyZVJlZyk7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0
ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVj
dHVyZVJlZywgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFk
ZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBz
Y3JhdGNoUmVnKTsKKyAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBz
Y3JhdGNoUmVnKTsKKyAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1
Y3R1cmVSZWcgPSByZWdUMzsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVS
ZWcpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTEz
MSw3ICsxNDIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKICAg
ICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291
bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1
bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QxKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQ
dHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9i
YWxPYmplY3QsIG1fZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24pKSk7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CiAKQEAgLTE1
NCwzMCArMTY2LDM4IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0
aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRv
IHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2ls
bCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhl
IHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvdG9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnBy
b3RvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm90bywgcHJvdG9HUFIpOwogICAgIAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxz
LiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlf
aWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEs
IHByb3RvKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVl
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAog
ICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAg
ICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVn
VDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlm
ICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dD
YXNlKCk7CisgICAgICAgIHJlc3VsdEdQUiwKKyAgICAgICAgdmFsdWVHUFIsCisgICAgICAgIHBy
b3RvR1BSLAorICAgICAgICBzdHViSW5mb0dQUiwKKyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzOjpzY3JhdGNoMSwgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNo
Mik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpJbnN0YW5jZU9mOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBw
ZW5kKGdlbik7Ci0gICAgCisKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAK
QEAgLTE5MiwxNCArMjEyLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNv
bnN0IEkKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENh
bGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNs
dHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFy
Z0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMiwgcmVnVDEpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6
OnN0dWJJbmZvID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlID09IGFyZ3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fz
c2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBj
YWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBhcmd1bWVudEdQUjMpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29u
c3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMjQwLDcgKzI1OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5
cGVvZl9pc191bmRlZmluZWQoY28KIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNv
bXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwogCkBAIC0zNzQsNyArMzkzLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0g
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
JlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwogI2Vsc2UKQEAgLTM4
Myw5ICs0MDIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiB9
CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5l
cmF0b3IoVk0mKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
ICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQzMCw2IEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
cHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00
MzQsOSArNDUyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAK
IHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNl
dEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9m
dW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4
ICs0ODQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gx
ID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJv
b2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1w
KGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwg
SlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFy
Z2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVl
SXNGYWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVt
cChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzUwMSw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUg
PSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTks
NyArNTQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAg
IC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
ICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFs
LCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDAp
LCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBq
dW1wKCk7CiAKQEAgLTU0Myw3ICs1NjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwo
Y29uc3QgSW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAo
YnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwog
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
MCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTU4
MiwxNSArNjAzLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28K
IHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwot
ICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUu
bV9zcGVjaWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAg
c3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICBsb2Fk
Q29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAg
IENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNvZGUsIE9wSm5l
cVB0cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOwogICAgIGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC02MjUsOCArNjQ0LDEwIEBA
IHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRy
dXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFs
T2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxz
ZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTY0MCw3ICs2NjEsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNjk1LDcgKzcxNiw4IEBA
IHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAg
ICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTcxMSw3ICs3MzMsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6b3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB0aHJvd25WYWx1
ZUdQUiA9IGFyZ3VtZW50R1BSMTsKQEAgLTcyMCw3ICs3NDIsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JF
R0lTVEVSUyA+IDAKICAgICBqaXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgYXJndW1lbnRH
UFIwKTsKLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXJJbXBsKGFyZ3VtZW50R1BSMCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKGFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwpAQCAtOTA4LDcgKzkzMCw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogfQogCkBAIC05MTgsNyArOTQxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0
ZXEoY29uc3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVn
VDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MzEsNyArOTU1LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQog
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk3
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhp
cyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
Z1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTc4LDcgKzEwMDIsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDAp
OwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05OTMsNyArMTAxNywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpj
YWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVG
b3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8g
T09QUzogVGhpcyBpc24ndCBlbGVnYW50LiBXaHkgYXJlbid0IHRoZXkgaW4gdGhlIGNhbGxlZSBz
YXZlIGJ1ZmZlci4gSSBndWVzcyBiZWNhdXNlIHdlIGNhbiBPU1IgZXhpdCBoZXJlPworICAgIGVt
aXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKICAgICBj
YWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhj
ZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9u
ID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEw
MzgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8v
IGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMK
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRh
Lm1fYnVmZmVyOwotICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJB
dENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRD
YXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7Cisg
ICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENh
dGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAg
ICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIp
OwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlz
KTsKLSAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBi
dWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2Zp
bGUpIHsKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHBy
b2ZpbGUpLCByZWdzKTsKLSAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQogfQogCkBAIC0xMDUzLDggKzEwNjgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
aW1tKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2Rl
Lm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0
aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtl
ZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25z
dCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAg
ICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJ
bmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5r
ZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5
NiwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8g
Y3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dp
dGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dp
dGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dp
dGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1
bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBy
ZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVu
a25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5s
aW5rZWRUYWJsZS5tX21pbik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQ
dHJUYWcpOwogfQogCkBAIC0xMDk5LDIwICsxMTE1LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0
ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNo
IGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVu
bGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hS
ZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hS
ZWNvcmQ6OlN0cmluZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2Vk
VGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlw
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFi
bGVJbmRleCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50
R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQ
UiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygp
LT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsK
ICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGlu
dD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxp
bmsodGhpcyk7CkBAIC0xMTMzLDcgKzExNTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxs
KGNvbnN0IEluc3RydWN0CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJl
UHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0
ZSA9IGp1bXAoKTsKQEAgLTExNDgsNyArMTE2Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251
bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xMTY2LDcgKzExODMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25z
dCBJbnN0cnVjCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5v
dEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9
IGp1bXAoKTsKQEAgLTExODgsMTIgKzEyMDUsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIo
Y29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVt
LCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3Rh
bGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9i
amVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291
bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygpOworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bVZhcnMoKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAg
ICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRS
ZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJy
aWVyKG1fY29kZUJsb2NrKTsKKyAgICAKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwog
CiAgICAgZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCkBAIC0xMjEyLDcgKzEy
MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0
LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMTMxMCwyMyArMTMyOSwxOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJl
SUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNh
Y2hlZFN0cnVjdHVyZUlELCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFRvVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIp
OwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3Jp
dGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hl
ZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVy
SUQgcmFyZURhdGFSZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1Qw
OwpAQCAtMTM0Miw3ICsxMzU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29u
c3QgSW5zdAogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0
YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFy
ZURhdGFUYWcpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJl
ZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgp
IC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0
cihjYWNoZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wQ3JlYXRlVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkQ2Fs
bGVlKCksIGNhY2hlZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxl
ZXMgPSBicmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpT
Q2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoUHRyKE5vdEVxdWFsLCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFz
U2Vlbk11bHRpcGxlQ2FsbGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzg3LDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIs
IEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzk4
LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1t
MzIoMHgxKSwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVS
ZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDExLDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Qy
LCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25a
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQyMiw4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQz
NywxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VW
YWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BS
Myk7CisgICAgbG9hZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5m
bzo6YXJndW1lbnRHUFIzKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVl
UmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xNDMwLDcgKzE0NTAsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGlu
dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2Rl
QmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7Cisg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JG
dXp6aW5nKCkgJiYgbV91bmxpbmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JG
dXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdl
dExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIo
cHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJl
bG93LCByZWdUMCwgVHJ1c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0
ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTQ0MCw3ICsxNDYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bG9vcF9oaW50KGNvbnN0IEluc3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZgotICAgICAgICBtb3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsK
ICAgICAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1
Myw4ICsxNDczLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQog
CiAgICAgLy8gRW1pdCB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJl
T3B0aW1pemVkKCkpIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9z
aXRpdmVPclplcm8sIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVt
ZW50Rm9yTG9vcCgpKSwKLSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+
YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVn
VDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0K
IApAQCAtMTUwOSw3ICsxNTMwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBz
KGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVU
cmFwcywgYXJndW1lbnRHUFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1MjIsNyArMTU0NCw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9jaGVj
a190cmFwc19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZS
ZWdpc3RlcnM6OmVicCk7CkBAIC0xNTY0LDM0ICsxNTg2LDM2IEBAIHZvaWQgSklUOjplbWl0X29w
X25ld19yZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVn
ZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBhcmd1bWVu
dEdQUjA7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlu
a2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChk
c3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJ
VDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBKdW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5t
X3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRl
Y2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpGdW5jdGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8
dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQo
Y29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpv
cGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZt
KCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZt
KCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAg
fQogfQogCkBAIC0xNjIxLDIzICsxNjQ1LDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJD
b21tb24oY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2Nv
cGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Nj
b3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3Vt
ZW50R1BSMSk7CiAjZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBt
X2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBh
dXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
RnVuY3Rpb25FeHByLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
Ynl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBh
cmd1bWVudEdQUjIpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25l
d19nZW5lcmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBv
cF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJ
RCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsK
ICAgICB9CiB9CiAKQEAgLTE2NjQsMjkgKzE2ODksMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X2FzeW5jX2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0
ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBy
ZWdUMCwgc2l6ZSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIyKTsK
KyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6
Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIx
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTaXplPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAm
bWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgbWF0ZXJpYWxp
emVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFk
YXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1lbnRHUFIyKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFy
cmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNpemVJbmRleCwg
cmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNp
emVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBy
ZWdUMywgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAg
LTE2OTQsOCArMTcyMCw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUo
Y28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2Ug
dHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHR5cGUgcHJvZmlsZXIgaXMg
ZW5hYmxlZC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFBy
b2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBt
ZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2Zp
bGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTc3NywyMCArMTgw
NCwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgc3Rh
dGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3
ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAg
ICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJl
ZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4K
LSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2Vu
UGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsK
KyAgICB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMg
bXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
UmVnID0gcmVnVDI7CisgICAgICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hh
ZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIH0KICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiks
IHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKKyAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOwor
ICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJl
Z3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7
CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9m
aWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
eworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNv
ZGUgY2FjaGluZyB3aGVuIHRoZSB1c2luZyB0aGUgY29udHJvbCBmbG93IHByb2ZpbGVyLgogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZUNvbnRyb2xG
bG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBt
ZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGJh
c2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsKQEAgLTE4NjAsNyArMTg5
MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBtb3Zl
VmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
c3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsK
IH0KIApAQCAtMTg4Niw3ICsxOTE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlw
ZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nh
c2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQXJyYXlD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lu
bGluZXMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5o
IgpAQCAtMjg1NSw3ICsyODU2LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAg
IGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAg
ICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5t
X21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVs
dC5leGVjdXRhYmxlQWRkcmVzcygpOwogCkBAIC0yODgwLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0Owog
ICAgIGlmIChrZXkuaXNJbnQzMigpKQpAQCAtMjkwMyw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmlu
Z0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
Y29kZUJsb2NrLT5iYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAog
ICAgIGlmIChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFz
U3RyaW5nKGtleSktPnZhbHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRH
UFJSZWcpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDkyICs0OSwxMDMgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0
YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJl
ck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAs
IHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNN
YXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmso
dGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0KTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1Qy
KTsKLSAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAg
ICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7Cisg
ICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBy
ZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICAgICAgLy8gT09QUy4gU3VwcG9ydCB0aGlz
CisgICAgICAgIC8vaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAgICAg
Ly8gICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICAgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5
VmFsOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBz
dHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAg
ICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wY29kZVR5cGU+CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0
IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nh
c2VzKGl0ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1l
bnRHUFI0KTsKICNlbHNlCi0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAg
ICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4
KTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5
dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBh
cmcxIGFscmVhZHkgdXNlZC4KLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0g
YXJndW1lbnRHUFIyOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7Ci0KLSAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwotICAgICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgICAgICBDYWxs
IGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBh
cHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpOwotICAgICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwor
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UgPT0gcmVnVDApOworICAg
IHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkgPT0gcmVn
VDEpOworCisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5
dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJv
ZmlsZUdQUik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dl
dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwotICAgIH0KKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCkBAIC0xNDksNyArMTYwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdo
dCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhl
ciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAg
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAg
ICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTYwLDggKzE3MSw4IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2Jh
bE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSNTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFy
Z3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02
NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAK
QEAgLTE4NywzNCArMTk4LDQwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUo
Y29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1l
LAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQ
cml2YXRlTmFtZSwKKyAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1
bHRSZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5h
bWU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKQEAgLTIyMyw5ICsyNDAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEs
IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BS
Mik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1
bWVudEdQUjMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMjM1LDI2ICsyNTQsMjAgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2Vy
dChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0
ZU5hbWVPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpA
QCAtMjY0LDcgKzI3Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKQEAgLTMwMCwyMSArMzEzLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3Nl
dF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5t
X2JyYW5kOwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5kR1BS
ID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87
CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vz
c0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MoYnJhbmRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAgLy8g
V2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNl
IHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI0LDE3ICszNDQsMjIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRXcml0ZUJh
cnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVf
YnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudElu
c3RydWN0aW9uKTsKKwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBKSVRQcml2
YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9w
cml2YXRlQnJhbmRBY2Nlc3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVn
VDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJh
bmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0zNDQsMjQgKzM2OSwxOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShv
cGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlv
blRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3Vt
ZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNl
Ci0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGlt
aXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmCiAKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMzcwLDE5ICszODksMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0
ZV9icmFuZChjbwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJyYW5kLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFu
ZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0
dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKKworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNs
b3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJy
YW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIH0KIApAQCAtMzk0
LDkgKzQyMiwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJh
bmRHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BS
Mik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVu
dEdQUjMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2
YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTQw
NiwyNCArNDM2LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4K
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8v
IGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRS
ZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1
bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1
bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUp
Pjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2
YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTQzNSwzMCArNDU5LDQyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDMpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2
YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpwcm9maWxlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHByb2ZpbGVH
UFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1l
dGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKIAogICAgIEpJVFB1
dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0KTsKLSAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJv
cGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlH
UFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIsIHN0dWJJbmZvR1BSKTsKKyAg
ICAvLyBPT1BTOgorICAgIC8vaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAg
ICAvLyAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOwor
ICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gc3RkOjppc19zYW1lX3Y8T3AsIE9wUHV0QnlWYWxEaXJl
Y3Q+ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZv
LT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3Ry
dWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTQ3NCwx
NSArNTEwLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwog
ICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwotICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRl
Y29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICAgICAgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOwotICAgICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGly
ZWN0KQpAQCAtNDk4LDcgKzUzMSwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgLy8gVGhleSBh
cmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0
aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSwgcmVnVDIsIGdlbi5zdHViSW5mbygpLCByZWdUMyk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjQpOworICAgIGlmIChpc0RpcmVjdCkKKyAgICAgICAgbWF0ZXJpYWxpemVQb2lu
dGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4o
KSwgT3BQdXRCeVZhbERpcmVjdDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFy
Z3VtZW50R1BSNSk7CisgICAgZWxzZQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpLCBPcFB1dEJ5VmFsRGly
ZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0
KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJn
dW1lbnRHUFIzLCBhcmd1bWVudEdQUjQsIGFyZ3VtZW50R1BSNSk7CiAjZWxzZQogICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC01MTIsNyArNTU0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV92YWwoY29uc3QgSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBy
ZWdUNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9w
dXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogICAgIENhbGwgY2FsbDsKICAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFN
b2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDog
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRC
eVZhbE5vblN0cmljdE9wdGltaXplKTsKQEAgLTUyMyw3ICs1NjUsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCkBAIC01MzMsMTggKzU3NSwyNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0
IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVy
IGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAg
IGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IHJlZ1Q1OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVl
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2Zp
bGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVyU2V0IHVzZWQoQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVl
LCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlKTsKKyAgICAgICAgQVNTRVJUKCF1
c2VkLmNvbnRhaW5zKHJlZ1Q0KSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlucyhyZWdU
NSkpOworICAgIH0KKwogCiAgICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0Zv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0
R1BSKTsKQEAgLTU3MCwyMCArNjE4LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRl
X25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdz
KHJlZ1QyKSwgSW52YWxpZEdQUlJlZywgcmVnVDQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJl
Zywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPnByaXZhdGVGaWVs
ZFB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVj
dHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC01OTQsOCAr
NjUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0
ZU5hbWU+KCk7Ci0gICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9w
dXRLaW5kOworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgSklU
UHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJbmRleCsrXTsK
IApAQCAtNjAzLDEzICs2NjEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRl
X25hbWUoYwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBhdXRv
IG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5l
UHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9w
dGltaXplOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5IGFyZSBj
b25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIs
IGdlbi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOworICAgIFBy
aXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1
bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFI0KTsKKyAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNE
ZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBv
cGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBhcmd1bWVudHNHUFIzLCBhcmd1bWVudEdQUjQsIFRydXN0ZWRJbW1QdHIobnVs
bHB0cikpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNjIyLDE4ICs2ODQs
MTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIAogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bjsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC02NDMsMTQgKzY5OSwxNCBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1Qy
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IHJlZ1Q0OwogCkBAIC02ODAsNyArNzM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRHZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTY4OSw3ICs3NDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
c2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdU
MSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFNldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3NTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dl
dHRlciwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0
ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUs
IHJlZ1QxLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJp
YnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3
NjgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50
MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNzE5LDcgKzc3OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEs
IGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1Qx
LCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3LDIzICs3ODgsMzMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVy
czo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURl
bEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQ
UiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwK
LSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCBy
ZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7Cisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ7CisgICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdp
dGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQg
ZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFy
cmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC03NTksMTUgKzgzMCwxNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlk
SW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5
SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRy
dXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC03ODEsMjQgKzg1NCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJn
dW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENh
bGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRl
bGV0ZUJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTgwOCw3ICs4NzYsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMg
YXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUg
ZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBm
dW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3Qg
bWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC04
NDUsMjIgKzkxMywzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3Ry
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVs
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BS
ID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywg
cmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1Yklu
Zm9HUFIsIEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw7Cisg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0
R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3
cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBj
bG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0
aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtODgzLDkgKzk2MiwxMSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlbGV0ZUJ5VmFsT3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMywgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFs
dWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtODk5LDI0ICs5ODAs
MTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOwot
ICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlWYWxP
cHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKQEAgLTkyNiw3ICsxMDAyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtOTYxLDIyICsxMDM3LDMxIEBA
IHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsK
IAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdU
MSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpU
cnlHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OlRyeUdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2LDE0ICsxMDcxLDE3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwMDMs
MjYgKzEwOTEsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwog
ICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIx
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpLCBkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25UcnlHZXRCeUlkT3B0
aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDMwLDIyICsxMTEyLDMxIEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
LQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0
KTsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBy
ZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NU
eXBlOjpHZXRCeUlkRGlyZWN0KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMDU0LDE2ICsxMTQ1LDE4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkRGlyZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJ
ZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGlt
aXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTA3Myw4MyArMTE2Niw2MSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1l
bnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlz
QVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25HZXRC
eUlkRGlyZWN0T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6
dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpz
Y3JhdGNoOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZVZSZWcpOwogICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlO
YW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBKdW1wIG5v
dEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0
YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50
OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVu
Z3RoTW9kZS5hcnJheVByb2ZpbGUsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBH
ZXRCeUlkTW9kZU1ldGFkYXRhOjpvZmZzZXRPZk1vZGUoKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoMzIoTm90RXF1YWwsIFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwg
T3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2Rl
TWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFzZUdQUiwgc2Ny
YXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0K
IAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVz
dWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogCi12
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUu
bV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRo
aXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJl
Zyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5
SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwogCi0gICAgSklUR2V0QnlJ
ZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9n
ZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTE1OCwxNiArMTIy
OSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1tt
X2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMTc3LDI2ICsxMjUwLDU3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIz
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOworICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9
IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFz
ZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZVZSZWcpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlz
R1BSLCB0aGlzVlJlZyk7CisKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0
aGlzR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAg
LTEyMDYsNyArMTMxMCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKQEAgLTEyNDEsMTYgKzEzNDUsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhp
cz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9n
ZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRXaXRo
VGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Ro
aXNWYWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI4ICsxMzY3LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0g
cmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0
aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFz
ZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh0
aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0
aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyOTEsNyArMTM5
Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKQEAgLTEzMjksMjMgKzE0MzAsMzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNv
bnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9y
ZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVj
dCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhl
IGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4n
LCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYg
b2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1Qx
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAg
ICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2Rl
KSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAog
ICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6UHV0QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1
dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1v
ZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRC
eUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVy
ZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsx
NDc0LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsK
ICAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJ
ZEluZGV4KytdOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1Qw
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKGdl
bi5zbG93UGF0aEZ1bmN0aW9uKCksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEzNzYsMjUgKzE0OTUs
MTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhbHJl
YWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDE7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fz
c2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHZhbHVlR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCkpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTQwNCw3ICsxNTE3LDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25z
IGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJl
bG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAg
Ly8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTQ0MSwyMCArMTU1
NCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRH
UFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBy
ZWdUMSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlJZDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
ZywgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ2MywxNCArMTU4NywxNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsx
NjA3LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFy
ZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywg
dGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdp
dmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxk
ZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcs
IHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE1MTAsMjUgKzE2MzEsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNv
bnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwot
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNo
KTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAg
LTE1MzcsMTUgKzE2NjYsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25z
dCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5
VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJ
bkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
YXJndW1lbnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6
ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVu
dEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xNTU2LDU5ICsxNjg4LDcwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29u
c3QgSW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7
CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2Vy
dChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50
ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJy
YXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVw
YXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNv
LCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8g
Z2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1l
PGRlY2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJh
c2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9w
ZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlwZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIg
ZHN0LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7
CisgICAgVU5VU0VEX1BBUkFNKGJhc2UpOworICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7Cisg
ICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1l
IHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIAogICAgIEpJVEluQnlW
YWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlv
bkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHR5cGUgPT0g
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGlt
aXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE2MTgsMjcgKzE3NjEsMjEgQEAgdm9pZCBKSVQ6OmVt
aXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IHJlZ1Qx
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IEJhc2Vs
aW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5T3JCcmFuZEdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1p
emUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2
YXRlQnJhbmRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhh
c1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsK
LSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0
aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2
YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NTIs
NyArMTc4OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKGMKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNs
b3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAgICBlbWl0
SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUu
bV9wcm9wZXJ0eSwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTY2NiwxOSArMTgwMywyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFz
X3ByaXZhdGVfYnJhbmQoCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZUJyYW5kPigpOwot
ICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZUJyYW5kKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVj
b2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9icmFuZCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5k
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoIW5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxP
YmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6
Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVw
dGgpCiB7Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHJl
Z1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CkBAIC0xNjg4LDYgKzE4
MjgsNyBAQCB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNzAxLDcgKzE4
NDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAg
ICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVC
bG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1Qx
KTsKICAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vw
b2NoLCByZWdUMSk7CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
QWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xv
YmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwpAQCAtMTcxNSw3ICsxODU2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Nj
b3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhy
ZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29u
c3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwogICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0xNzk0LDg3ICsxOTM1LDEwNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3Bl
KGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRS
ZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fcmVz
b2x2ZVR5cGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0g
bV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEFTU0VSVChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVu
dEluc3RydWN0aW9uKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdU
NzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIC8vIElmIHdlIHByb2ZpbGUg
Y2VydGFpbiByZXNvbHZlIHR5cGVzLCB3ZSdyZSBnYXVyYW50ZWVkIGFsbCBsaW5rZWQgY29kZSB3
aWxsIGhhdmUgdGhlIHNhbWUKKyAgICAvLyByZXNvbHZlIHR5cGUuCiAKLSAgICBpZiAocmVzb2x2
ZVR5cGUgPT0gTW9kdWxlVmFyKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEu
bV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgaWYgKHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKKyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVu
dCgpLCByZWdUMCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNl
dCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICAg
ICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRh
dGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0jZGVmaW5lIFJFU09MVkVf
U0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5
cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVy
YXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShSRVNPTFZFX1ND
T1BFX0dFTkVSQVRPUikKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZN
JiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZh
ciIpOwogICAgICAgICB9OwotI3VuZGVmIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SCisKKyAgICAg
ICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChW
TSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVU
aHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3Bf
cmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyIpOworICAgICAg
ICB9OworCisgICAgICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvciA9IFtdIChW
TSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVU
aHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgZ2VuZXJp
YyIpOworICAgICAgICB9OworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIg
PSByZWdUNzsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwogICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CiAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAg
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5
cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNs
b3N1cmVWYXJHZW5lcmF0b3IpOworICAgICAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBl
ID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgY29kZSA9
IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3Ip
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmlj
UmVzb2x2ZVNjb3BlR2VuZXJhdG9yKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIH0KIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9u
YWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAg
ICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsg
d2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKworICAgIENDYWxsSGVscGVycyBq
aXQ7CisKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7IC8vIGluY29taW5nCiAgICAg
Y29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OyAvLyBpbmNvbWluZwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNz
IHRocnUgdG8gc2xvdyBwYXRoLgogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BS
ID0gcmVnVDQ7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBSRUxF
QVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSk7CiAK
LSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAot
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFU
YWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGpp
dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwor
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0
YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwog
CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVj
dEdQUiA9IEludmFsaWRHUFJSZWcpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBb
Jl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIg
PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3Mp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52
YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAg
ICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVj
dCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNl
dE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFs
T2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRT
ZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAg
IH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykgewotICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAg
IGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
bG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKKyAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdU
MCk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7CiAKLSAgICAgICAgTGFi
ZWwgbG9vcCA9IGxhYmVsKCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMSk7CisgICAgICAgIExhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgSnVt
cCBkb25lID0gaml0LmJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCBy
ZWdUMCk7Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICAg
ICAgICAgIGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAgICAgIGpp
dC5qdW1wKCkubGlua1RvKGxvb3AsICZqaXQpOwogICAgICAgICB9Ci0gICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgIH07CiAKICAgICBhdXRvIGVt
aXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewpAQCAtMTg4MiwxMiArMjA0
MSwxMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAg
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxP
YmplY3RHUFIpOwotICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1Qx
KTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxC
aW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQ
UiwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RH
UFIpOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0ds
b2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkp
OworICAgICAgICAgICAgaml0Lm1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xODk3LDExICsyMDU2LDExIEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6
Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkgZm9yIEdsb2JhbFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIq
LgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDAp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBD
b2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBk
b1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwg
cmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIg
fHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6
b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZH
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTE5MDksNyArMjA2OCw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgICAgIGVt
aXRSZXNvbHZlQ2xvc3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5q
dW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJl
VmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTE5MTksODMgKzIwNzgsNDUgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsK
IAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5Ogot
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2Jh
bFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzIDogR2xvYmFsTGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBp
ZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09
IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2Ugewog
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDAp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAg
ICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDAp
OwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgYXV0byBlbWl0
Q2FzZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgICAgIEp1bXAg
bm90Q2FzZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNv
bHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOworICAgICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgIG5vdENhc2UubGlu
aygmaml0KTsKKyAgICAgICAgfTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsK
LSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAg
ICAgICAgZW1pdENhc2UoR2xvYmFsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVy
dHkpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgZW1pdENh
c2UoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVz
b2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7
CiAgICAgfQogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpU
aHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19v
cF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNl
LCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nh
c2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNk
ZWZpbmUgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8j
I3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNv
bnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0g
ICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAg
IHJldHVybiBqaXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFz
ZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VB
Q0hfUkVTT0xWRV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBE
RUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0p
CiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5
IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1h
a2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxh
YmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxp
bmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkg
bm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZt
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5
IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwNjUsNiAr
MjE4Niw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29w
ZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0yMTc4LDcg
KzIzMDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yMTg2LDkgKzIzMDgsOSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdl
dEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0
RnJvbVNjb3BlLCBkc3QsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAog
I2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yMTk2LDQxICsyMzE4LDUwIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9t
U2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBS
ZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9
PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCisgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZN
JiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmso
dm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIp
OworICAgIH07CisKKyAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2Vu
ZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0
RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFz
ZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0
byBnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICBy
ZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwg
IkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjb3BlR1BSID0gcmVnVDY7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IHJlZ1Q1OwogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAg
ICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigm
bWV0YWRhdGEubV9vcGVyYW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1l
dGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRl
Y29kZSk7CiAKLSNkZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBv
cF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRp
YyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1Jf
RUFDSF9SRVNPTFZFX1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9Owot
I3VuZGVmIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZz
ZXQpLCBtZXRhZGF0YUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgc2NvcGVHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZz
ZXQpLCBtZXRhZGF0YUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zm
c2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwotICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNv
ZGU7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAg
Y29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAo
cHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykK
KyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3NHZW5lcmF0b3IpOworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIo
Z2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChj
b2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxS
ZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAv
LyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRo
IHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgpAQCAtMjIzOSw5OSArMjM3MCw4OCBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdl
dEZyb21TY29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9
IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBSRUxF
QVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSk7CiAK
LSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIGpp
dC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29k
ZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVn
VDMsIG1ldGFkYXRhR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBD
b2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQ
dHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAg
YXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBp
bnQzMl90IG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAg
IG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRl
c3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVj
dHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMSkpOworICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sg
PSBbJl0gKEdQUlJlZyBzY29wZUdQUikgeworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCkp
LCByZWdUMSk7CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICBq
aXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKICAg
ICB9OwogCi0gICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0g
KGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdU
Myk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xv
YmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNl
dDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAg
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRj
aHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVx
dWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAotICAgIGF1dG8gZW1pdEdl
dFZhckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAg
ICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZyb21J
bmRpcmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAg
ICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCiAgICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZh
ciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgewogICAgICAgICBz
dGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0
NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3BlR1BS
LCBvcGVyYW5kR1BSKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4
aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworICAgICAgICBq
aXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmFk
ZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
b3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCBy
ZWdUMCk7CiAgICAgfTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRD
b2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJl
c29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24g
c2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9i
YWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZv
ciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNo
ZWNrKHNjb3BlR1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNp
bmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFs
T2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3Ig
dGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKICAg
ICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7CiAgICAgICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKIAotICAgICAgICAgICAgaml0QXNzZXJ0
KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAg
ICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
LSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3Bl
ZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAgaml0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Cisg
ICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBqaXQu
YnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIG9mZnNldCk7CiAg
ICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlz
T3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJ
bW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJl
YXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxp
bmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJy
YW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9m
ZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZq
aXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIo
b2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsK
LSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0
LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBy
ZXN1bHQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5uZWczMihvZmZz
ZXQpOworICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNF
aWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
R2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQp
LCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZy
b21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOwor
ICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0
LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVn
VDMpOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsKICAgICAgICAg
ICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1
bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgTW9kdWxlVmFyOgpAQCAtMjM0MSw4NiArMjQ2MSw2MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChy
ZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRv
RW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVk
SW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUg
aW50byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVt
aXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0K
LSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBl
ID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUo
KnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7
Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRv
IFQwCisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9m
ZnNldE9mR2V0UHV0SW5mbygpKSwgcmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZElt
bTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGlu
dG8gVDAKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAg
ICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQp
OworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBu
b3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBp
c0dsb2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQ
cm9wZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Cisg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
LCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXIubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7
CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwot
ICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAg
ICAgc3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAg
ICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpKSk7CiAKLSAgICByZXQoKTsKKyAg
ICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxf
VEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNl
SGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9y
KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93
Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1
bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJ
VFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9HRVRfRlJPTV9T
Q09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0
b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2Vk
Rm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9
OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Nj
b3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJ
TkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9HRVRfRlJPTV9TQ09Q
RV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0
aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExM
SW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjpl
YnApOwpAQCAtMjQ3MSw4NiArMjU2OCw3OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZv
aWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0
b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0
Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9h
ZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1Qx
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdy
aXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVu
dmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3Rl
cikpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9
IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5
dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1
Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29k
ZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsK
KworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAg
ICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVT
bG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRv
bid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBB
ZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBp
bmplY3Rpb24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2Nv
cGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBs
b2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZlN0cnVjdHVyZSgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRy
KFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0
dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QxKSk7CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QyKTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1w
KHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0
cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSk7CisgICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAg
IH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90
LCByZWdUMSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCBy
ZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIo
cmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGlu
ZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1p
dFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1Qz
LCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICAvLyBPT1BTOiB3b3VsZCBiZSBuaWNlIHRv
IGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBHUFJSZWdzIGluc3RlYWQgb2YgVlJzCisgICAgICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAg
ICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2Fz
ZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0g
SlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxv
Y2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsK
LSAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0
aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKyAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29s
dmVUeXBlLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisK
KyAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8u
aW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFy
IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBi
ZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBz
dGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQot
ICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVj
dExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUlu
ZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRh
ZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworCisg
ICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1p
dE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFk
ZHJlc3MocmVnVDApKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBo
YXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIHZhbHVlLgorICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFy
OgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRD
bG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9p
bnRTZXQpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNo
cG9pbnRTZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsK
KyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChy
ZWdUMSwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291
bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIG93bmVy
L3ZhbHVlLgogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZh
cjoKQEAgLTI1NjQsNTggKzI2NTQsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUp
IHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIo
VHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29s
dmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1w
IGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQg
dG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0g
ICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5r
KHRoaXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3Vy
ZVZhci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBp
bGUgdGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2
ZSBwcm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVW
YXIsCisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIK
KyAgICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBp
dCBpcyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAg
ICAvLyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmls
ZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFy
KTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZh
cikKKyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChw
cm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQor
ICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAg
ZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVn
VDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxpbmso
dGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAg
IGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhp
cyk7CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFy
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxW
YXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
LmxpbmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwog
CiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAg
ICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTggKzI3MDgsMjEgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRv
U2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZv
KGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVW
YXIpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Cisg
ICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElm
IGFueSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENv
ZGVCbG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFy
LgogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dy
aXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2Ugewog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1
bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
ICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAgLTI2NTIsNyArMjcz
OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0
LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjcwMSw3ICsyNzg4LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERp
cmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKQEAgLTI3NTksNyArMjg0Niw2IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpT
Q2VsbCogb3duZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpA
QCAtMjc2Nyw3ICsyODUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KGNvbgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZklu
dGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3ODks
NyArMjg3NSw2IEBAIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3AKIHZv
aWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsK
QEAgLTI4MDUsNyArMjg5MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChj
b25zdCAKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUg
bW9zdCBjb21tb24gbW9kZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBp
ZiB3ZSBwcm9maWxlIGl0IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJh
dG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2Rl
KSB7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51
bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJl
TW9kZSkgewogICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOwogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAg
ICBvcGVyYXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKCh+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSAm
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKQEAgLTI4
NDcsNzggKzI5MzIsODcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNv
ZGUubV9tb2RlOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lOwogICAgIFZp
cnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEp1
bXBMaXN0IGRvbmVDYXNlczsKIAotICAgIGF1dG8gcmVzdWx0R1BSID0gcmVnVDA7CisgICAgY29u
c3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lz
dGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51
bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdl
dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gx
ID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lz
dGVyczo6c2NyYXRjaDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5l
RW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9k
ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdU
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHNjcmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5TmFtZSwgcHJvcGVydHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNv
bHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMs
IHNjcmF0Y2gyKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgT3BF
bnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgp
KTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CiAgICAgLy8gVGhpcyBpcyBhbHdheXMg
YW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KLSAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9
IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVy
aWNNb2RlKSk7CisgICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIo
Tm9uWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwog
CiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIEp1bXAg
c3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Mo
c2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0LgotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4
LCBzY3JhdGNoMik7CiAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9y
J3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAg
IEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMywgQWRk
cmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0
eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJl
Z1QzKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCksIHJl
c3VsdEdQUik7Ci0KKyAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHNjcmF0Y2gyLCBzY3JhdGNoMik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3Jh
dGNoMiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVz
dWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBPdGhlcndp
c2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVn
VDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBuZWczMihyZWdUMyk7
Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFzZUdQUik7CisgICAg
c3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIG5lZzMyKHNjcmF0Y2gyKTsK
KyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOwogICAgIGNvbnN0ZXhw
ciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBvZmZzZXRJbkJ1dHRlcmZseShmaXJz
dE91dE9mTGluZU9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQs
IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRl
eChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwg
cmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1
cmVNaXNtYXRjaC5saW5rKHRoaXMpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNo
KSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKyAgICBzdG9yZThUb01ldGFkYXRh
KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1
cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6
Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIGlzTm90T3du
U3RydWN0dXJlTW9kZS5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNo
VGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpJbmRleGVkTW9kZSkpOworICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFpl
cm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRl
eGVkTW9kZSkpOwogICAgIC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAgICAgaXNOb3RJbmRleGVkLmxpbmso
dGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxl
LCByZWdUMik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBi
YXNlR1BSLCBzY3JhdGNoMSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6Okdl
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlm
ICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dD
YXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBkb25lQ2FzZXMu
bGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKIH0KIApAQCAtMjkyNywxMCArMzAyMSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVt
ZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRl
IDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZv
aWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1Bh
dGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUs
IHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRv
cl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENh
c2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjkzOSw3ICszMDMyLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAg
IG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0
YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCBy
ZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAtMzAyOCw2ICszMTIzLDEz
IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKICAgICBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjplbWl0V3JpdGVC
YXJyaWVyKEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVk
ZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNoR1BSKG93bmVyKSk7
CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVy
U2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5s
aW5rKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZt
LCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCks
ICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAg
ICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxs
TGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAgIHJldmVy
dENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJCeXRlY29kZU9wZXJh
bmRzRm9yQ2hlY2twb2ludC5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNo
ZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5o
IgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5o
IgogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgpAQCAtMTUzLDcgKzE1NCw3IEBAIGlu
bGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWwKICAgICB9IHdoaWxlIChmYWxz
ZSkKIAogI2RlZmluZSBMTElOVF9QUk9GSUxFX1ZBTFVFKHZhbHVlKSBkbyB7IFwKLSAgICAgICAg
Ynl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX3Byb2ZpbGUubV9idWNrZXRzWzBdID0gSlNW
YWx1ZTo6ZW5jb2RlKHZhbHVlKTsgXAorICAgICAgICBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spLm1fcHJvZmlsZS0+bV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsgXAog
ICAgIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVmaW5lIExMSU5UX0NBTExfRU5EX0lNUEwoY2FsbEZy
YW1lLCBjYWxsVGFyZ2V0LCBjYWxsVGFyZ2V0VGFnKSBcCkBAIC0zNzAsNiArMzcxLDE1IEBAIGlu
bGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYKICAgICAKICAgICBjb2RlQmxv
Y2stPnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAKKyAgICBpZiAoY29kZUJs
b2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgaWYgKFJl
ZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENv
ZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlKSB7CisgICAgICAgICAgICAvL2RhdGFM
b2dMbigiU2hhcmVkIHZpYSBMTEludCIpOworICAgICAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdp
dGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICAgICAgICAgIGNvZGVCbG9jay0+aml0TmV4dEludm9jYXRpb24oKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNr
SWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChj
b2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoInRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291
bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRh
dGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3Vs
ZCBiZSBsaWZ0ZWQuIik7CkBAIC04NjAsNyArODcwLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2l0ZXJhdG9yXwogICAgIEpTVmFsdWUgcmVzdWx0ID0gcGVyZm9ybUxMSW50R2V0
QnlJRChwYywgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIGl0ZXJhdG9yLCB2bS5wcm9wZXJ0eU5h
bWVzLT5uZXh0LCBtZXRhZGF0YS5tX21vZGVNZXRhZGF0YSk7CiAgICAgTExJTlRfQ0hFQ0tfRVhD
RVBUSU9OKCk7CiAgICAgbmV4dFJlZ2lzdGVyID0gcmVzdWx0OwotICAgIGJ5dGVjb2RlLm1ldGFk
YXRhKGNvZGVCbG9jaykubV9uZXh0UHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fbmV4dFByb2Zp
bGUtPm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIExMSU5UX0VO
RCgpOwogfQogCkBAIC04ODAsNyArODkwLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX2l0ZXJhdG9yXwogICAgIEpTVmFsdWUgcmVzdWx0ID0gcGVyZm9ybUxMSW50R2V0QnlJRChw
YywgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIGl0ZXJhdG9yUmV0dXJuLCB2bS5wcm9wZXJ0eU5h
bWVzLT5kb25lLCBtZXRhZGF0YS5tX2RvbmVNb2RlTWV0YWRhdGEpOwogICAgIExMSU5UX0NIRUNL
X0VYQ0VQVElPTigpOwogICAgIGRvbmVSZWdpc3RlciA9IHJlc3VsdDsKLSAgICBieXRlY29kZS5t
ZXRhZGF0YShjb2RlQmxvY2spLm1fZG9uZVByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2RvbmVQ
cm9maWxlLT5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICBMTElO
VF9FTkQoKTsKIH0KIApAQCAtODk3LDcgKzkwNyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9pdGVyYXRvcl8KICAgICBKU1ZhbHVlIHJlc3VsdCA9IHBlcmZvcm1MTEludEdldEJ5
SUQocGMsIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBpdGVyYXRvclJldHVybiwgdm0ucHJvcGVy
dHlOYW1lcy0+dmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVNb2RlTWV0YWRhdGEpOwogICAgIExMSU5U
X0NIRUNLX0VYQ0VQVElPTigpOwogICAgIHZhbHVlUmVnaXN0ZXIgPSByZXN1bHQ7Ci0gICAgYnl0
ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX3ZhbHVlUHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
Lm1fdmFsdWVQcm9maWxlLT5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
ICAgICBMTElOVF9FTkQoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1
YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1l
LCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0
eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBlbmQK
LQogICAgICAgICBtZXRhZGF0YSh0MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAg
ICAgICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBAIC0x
MDIzLDcgKzEwMTksNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGlu
CiAgICAgICAgICMgTWV0YWRhdGEgaW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRlZ2Vy
T3BlcmF0aW9uKHQyLCAuc2xvdykKICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2Nm
ciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisg
ICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxl
SW50LCB0MSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4OSwy
MiArMTA4NSwxOCBAQCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5l
Z2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAKLSAg
ICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVn
YXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRz
W3Q1XQotICAgIGVuZAotCiAgICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQs
IHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBi
aW5lcSB0MSwgSW50MzJUYWcsIC5vcE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2Zm
ZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9maWxl
KEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwg
QXJpdGhQcm9maWxlSW50LCB0NSwgdDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BO
ZWdhdGVTcmNOb3RJbnQ6CiAgICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAg
ICB4b3JpIDB4ODAwMDAwMDAsIHQxCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmls
ZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9m
aWxlTnVtYmVyLCB0NSwgdDMpCiAgICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoK
QEAgLTExMTUsMTAgKzExMDcsNiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUo
b3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJs
ZU9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bj
b2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikK
LSAgICAgICAgbWFjcm8gYXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwgdDIp
CiAgICAgICAgIGdldChtX3JocywgdDIpCiAgICAgICAgIGdldChtX2xocywgdDApCkBAIC0xMTI2
LDcgKzExMTQsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAg
ICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAg
ICAgIGJpbmVxIHQyLCBJbnQzMlRhZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50
MzJUYWcsIC5vcDJOb3RJbnQKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludElu
dCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQ
cm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGlu
dGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRp
c3BhdGNoKCkKQEAgLTExMzYsMTIgKzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9y
ZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAgICAg
ICAgYmliIHQzLCBMb3dlc3RUYWcsIC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAgICAgYmluZXEg
dDMsIEludDMyVGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVt
YmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBB
cml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAg
ICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAgICAg
ICAgZmlpMmQgdDEsIHQzLCBmdDEKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51
bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVj
dCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJlYWR5
OgogICAgICAgICBnZXQobV9kc3QsIHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAt
MTE1Myw3ICsxMTQxLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBv
cAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNv
bmQgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAg
ICAgICAgYmlhIHQzLCBMb3dlc3RUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0
aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0
MCwgZnQwCiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJhdGlv
bihmdDEsIGZ0MCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBj
b3B5KQpAQCAtNjgsMTUgKzY4LDE2IEBAIG1hY3JvIG1ha2VSZXR1cm5Qcm9maWxlZChvcGNvZGVT
dHJ1Y3QsIGcKICAgICBmbihtYWNybyAodmFsdWUpCiAgICAgICAgIG1vdmUgdmFsdWUsIHQzCiAg
ICAgICAgIG1ldGFkYXRhKHQxLCB0MikKLSAgICAgICAgdmFsdWVQcm9maWxlKG9wY29kZVN0cnVj
dCwgbV9wcm9maWxlLCB0MSwgdDMpCisgICAgICAgIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1Y3Qs
IG1fcHJvZmlsZSwgdDEsIHQzLCB0MikKICAgICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAgICAg
c3RvcmVxIHQzLCBbY2ZyLCB0MSwgOF0KICAgICAgICAgZGlzcGF0Y2goKQogICAgIGVuZCkKIGVu
ZAogCi1tYWNybyB2YWx1ZVByb2ZpbGUob3Bjb2RlU3RydWN0LCBwcm9maWxlTmFtZSwgbWV0YWRh
dGEsIHZhbHVlKQotICAgIHN0b3JlcSB2YWx1ZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjol
cHJvZmlsZU5hbWUlLm1fYnVja2V0c1ttZXRhZGF0YV0KK21hY3JvIHZhbHVlUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIHByb2ZpbGVOYW1lLCBtZXRhZGF0YSwgdmFsdWUsIHNjcmF0Y2gpCisgICAgbG9h
ZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolcHJvZmlsZU5hbWUlW21ldGFkYXRhXSwgc2Ny
YXRjaAorICAgIHN0b3JlcSB2YWx1ZSwgVmFsdWVQcm9maWxlOjptX2J1Y2tldHNbc2NyYXRjaF0K
IGVuZAogCiAjIEFmdGVyIGNhbGxpbmcsIGNhbGxpbmcgYnl0ZWNvZGUgaXMgY2xhaW1pbmcgaW5w
dXQgcmVnaXN0ZXJzIGFyZSBub3QgdXNlZC4KQEAgLTg3LDcgKzg4LDcgQEAgbWFjcm8gZGlzcGF0
Y2hBZnRlckNhbGwoc2l6ZSwgb3Bjb2RlU3RydQogICAgIGdldChzaXplLCBvcGNvZGVTdHJ1Y3Qs
IGRzdFZpcnR1YWxSZWdpc3RlciwgdDEpCiAgICAgc3RvcmVxIHIwLCBbY2ZyLCB0MSwgOF0KICAg
ICBtZXRhZGF0YShzaXplLCBvcGNvZGVTdHJ1Y3QsIHQyLCB0MSkKLSAgICB2YWx1ZVByb2ZpbGUo
b3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCB0MiwgcjApCisgICAgdmFsdWVQcm9maWxl
KG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgdDIsIHIwLCB0MykKICAgICBkaXNwYXRj
aCgpCiBlbmQKIApAQCAtNDQxLDggKzQ0MiwxMyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9y
TG9vcCgpCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQogICAgICAgICAgICAgY0NhbGwyKF9sbGlu
dF9sb29wX29zcikKICAgICAgICAgICAgIGJ0cHogcjAsIC5yZWNvdmVyCi0KICAgICAgICAgICAg
IG1vdmUgcjEsIHNwCisKKyAgICAgICAgICAgICMgQmFzZWxpbmUgdXNlcyBMTEludCdzIFBCIHJl
Z2lzdGVyIGZvciBpdHMgSklUIGNvbnN0YW50IHBvb2wuCisgICAgICAgICAgICBsb2FkcCBDb2Rl
QmxvY2tbY2ZyXSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9qaXREYXRhW1BC
XSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6SklURGF0YTo6bV9qaXRDb25zdGFu
dFBvb2xbUEJdLCBQQgorCiAgICAgICAgICAgICBpZiBBUk02NEUKICAgICAgICAgICAgICAgICBs
ZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCAr
IChjb25zdGV4cHIgR2F0ZTo6bG9vcE9TUkVudHJ5KSAqIFB0clNpemUsIGEyCiAgICAgICAgICAg
ICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKQEAg
LTEwNTYsMTAgKzEwNjIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpu
c3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJh
dGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3Ry
dWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAg
ICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdDJdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDAp
CiAgICAgICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQz
KQpAQCAtMTA2OSw3ICsxMDcxLDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3Ry
dWN0LCBpbgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3Jx
IG51bWJlclRhZywgdDEKICAgICAgICAgc3RvcmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAg
dXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlB
cml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAg
ICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMTM0LDExICsxMTM2LDYgQEAgZW5kKQog
CiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0
aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAg
ICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0
MCwgdDMpCiAgICAgbWV0YWRhdGEodDEsIHQyKQpAQCAtMTE0NiwxMiArMTE0MywxMiBAQCBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZm
ZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0Mwot
ICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlB
cml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgIHJldHVy
bih0MykKIC5vcE5lZ2F0ZU5vdEludDoKICAgICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0
ZVNsb3cKICAgICB4b3JxIDB4ODAwMDAwMDAwMDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFBy
b2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9w
TmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAKIC5v
cE5lZ2F0ZVNsb3c6CkBAIC0xMTY0LDEwICsxMTYxLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21T
dG9yZShvcGNvZGVOYW1lLCBvcAogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5h
bWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
cmV0dXJuKQogICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmls
ZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAg
ZW5kCi0KICAgICAgICAgZ2V0KG1fcmhzLCB0MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAg
ICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCkBAIC0xMTc3LDcgKzEx
NzAsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAg
IGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAs
IC5zbG93LCB0MikKIAotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAg
ICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50
SW50LCB0NSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0x
MTg3LDEwICsxMTgwLDEwIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwg
b3AKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJl
clRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9m
aWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0MikKICAgICAgICAgam1wIC5v
cDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJp
dGhQcm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bj
b2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0MikKICAgICAgICAgY2kyZHMg
dDEsIGZ0MQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAg
LTEyMDQsOSArMTE5Nyw5IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwg
b3AKIAogICAgIC5vcDJOb3RJbnQ6CiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0
ZWx5IGFuIGludCwgdGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KLSAgICAgICAgZ2V0KG1f
ZHN0LCB0MikKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBwcm9m
aWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9m
aWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDIpCisgICAgICAg
IGdldChtX2RzdCwgdDIpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1i
ZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQpAQCAtMTUwOSw3ICsxNTAyLDcgQEAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWRfZGlyZWN0LAogICAgIGJpbmVxIHQwLCB0MSwg
Lm9wR2V0QnlJZERpcmVjdFNsb3cKICAgICBsb2FkaSBPcEdldEJ5SWREaXJlY3Q6Ok1ldGFkYXRh
OjptX29mZnNldFt0Ml0sIHQxCiAgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwg
dDMsIHQwKQotICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5SWREaXJlY3QsIG1fcHJvZmlsZSwgdDIs
IHQwKQorICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5SWREaXJlY3QsIG1fcHJvZmlsZSwgdDIsIHQw
LCB0MSkKICAgICByZXR1cm4odDApCiAKIC5vcEdldEJ5SWREaXJlY3RTbG93OgpAQCAtMTUyOSw3
ICsxNTIyLDcgQEAgbWFjcm8gcGVyZm9ybUdldEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LAogICAg
IGJpbmVxIHQwLCB0MSwgc2xvd0xhYmVsCiAgICAgbG9hZGlzICVvcGNvZGVTdHJ1Y3QlOjpNZXRh
ZGF0YTo6JW1vZGVNZXRhZGF0YU5hbWUlLmRlZmF1bHRNb2RlLmNhY2hlZE9mZnNldFt0Ml0sIHQx
CiAgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQwKQotICAgIHZhbHVl
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIHQyLCB0MCkKKyAgICB2YWx1
ZVByb2ZpbGUob3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCB0MiwgdDAsIHQxKQogICAg
IHJldHVybih0MCkKIAogLm9wR2V0QnlJZFByb3RvTG9hZDoKQEAgLTE1NDAsNyArMTUzMyw3IEBA
IG1hY3JvIHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwKICAgICBsb2FkaXMgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRhTmFtZSUucHJvdG9Mb2FkTW9kZS5j
YWNoZWRPZmZzZXRbdDJdLCB0MQogICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
JW1vZGVNZXRhZGF0YU5hbWUlLnByb3RvTG9hZE1vZGUuY2FjaGVkU2xvdFt0Ml0sIHQzCiAgICAg
bG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQwKQotICAgIHZhbHVlUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIHQyLCB0MCkKKyAgICB2YWx1ZVByb2Zp
bGUob3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCB0MiwgdDAsIHQxKQogICAgIHJldHVy
bih0MCkKIAogLm9wR2V0QnlJZEFycmF5TGVuZ3RoOgpAQCAtMTU1MywxNCArMTU0NiwxNCBAQCBt
YWNybyBwZXJmb3JtR2V0QnlJREhlbHBlcihvcGNvZGVTdHJ1Y3QsCiAgICAgbG9hZGkgLXNpemVv
ZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3Ro
W3QwXSwgdDAKICAgICBiaWx0IHQwLCAwLCBzbG93TGFiZWwKICAgICBvcnEgbnVtYmVyVGFnLCB0
MAotICAgIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIHQyLCB0
MCkKKyAgICB2YWx1ZVByb2ZpbGUob3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCB0Miwg
dDAsIHQxKQogICAgIHJldHVybih0MCkKIAogLm9wR2V0QnlJZFVuc2V0OgogICAgIGxvYWRpIEpT
Q2VsbDo6bV9zdHJ1Y3R1cmVJRFt0M10sIHQxCiAgICAgbG9hZGkgJW9wY29kZVN0cnVjdCU6Ok1l
dGFkYXRhOjolbW9kZU1ldGFkYXRhTmFtZSUudW5zZXRNb2RlLnN0cnVjdHVyZUlEW3QyXSwgdDAK
ICAgICBiaW5lcSB0MCwgdDEsIHNsb3dMYWJlbAotICAgIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1
Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIHQyLCBWYWx1ZVVuZGVmaW5lZCkKKyAgICB2YWx1ZVByb2Zp
bGUob3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCB0MiwgVmFsdWVVbmRlZmluZWQsIHQx
KQogICAgIHJldHVybihWYWx1ZVVuZGVmaW5lZCkKIAogZW5kCkBAIC0xNTc3LDcgKzE1NzAsNyBA
QCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV9pZCwgT3BHZXRCCiAub3NyUmV0dXJuUG9p
bnQ6CiAgICAgZ2V0dGVyU2V0dGVyT1NSRXhpdFJldHVyblBvaW50KG9wX2dldF9ieV9pZCwgc2l6
ZSkKICAgICBtZXRhZGF0YSh0MiwgdDMpCi0gICAgdmFsdWVQcm9maWxlKE9wR2V0QnlJZCwgbV9w
cm9maWxlLCB0MiwgcjApCisgICAgdmFsdWVQcm9maWxlKE9wR2V0QnlJZCwgbV9wcm9maWxlLCB0
MiwgcjAsIHQzKQogICAgIHJldHVybihyMCkKIAogZW5kKQpAQCAtMTY5OCw3ICsxNjkxLDcgQEAg
bGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfdmFsLCBPcEdldAogICAgIG1hY3JvIGZpbmlz
aEdldEJ5VmFsKHJlc3VsdCwgc2NyYXRjaCkKICAgICAgICAgZ2V0KG1fZHN0LCBzY3JhdGNoKQog
ICAgICAgICBzdG9yZXEgcmVzdWx0LCBbY2ZyLCBzY3JhdGNoLCA4XQotICAgICAgICB2YWx1ZVBy
b2ZpbGUoT3BHZXRCeVZhbCwgbV9wcm9maWxlLCB0NSwgcmVzdWx0KQorICAgICAgICB2YWx1ZVBy
b2ZpbGUoT3BHZXRCeVZhbCwgbV9wcm9maWxlLCB0NSwgcmVzdWx0LCBzY3JhdGNoKQogICAgICAg
ICBkaXNwYXRjaCgpCiAgICAgZW5kCiAKQEAgLTE3NTksNyArMTc1Miw3IEBAIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfZ2V0X2J5X3ZhbCwgT3BHZXQKIAogLm9wR2V0QnlWYWxEb25lOgogICAgIHN0
b3JlcSB0MiwgW2NmciwgdDAsIDhdCi0gICAgdmFsdWVQcm9maWxlKE9wR2V0QnlWYWwsIG1fcHJv
ZmlsZSwgdDUsIHQyKQorICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5VmFsLCBtX3Byb2ZpbGUsIHQ1
LCB0MiwgdDMpCiAgICAgZGlzcGF0Y2goKQogCiAub3BHZXRCeVZhbE5vdEluZGV4ZWRTdG9yYWdl
OgpAQCAtMTc3Miw3ICsxNzY1LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfdmFs
LCBPcEdldAogLm9zclJldHVyblBvaW50OgogICAgIGdldHRlclNldHRlck9TUkV4aXRSZXR1cm5Q
b2ludChvcF9nZXRfYnlfdmFsLCBzaXplKQogICAgIG1ldGFkYXRhKHQ1LCB0MikKLSAgICB2YWx1
ZVByb2ZpbGUoT3BHZXRCeVZhbCwgbV9wcm9maWxlLCB0NSwgcjApCisgICAgdmFsdWVQcm9maWxl
KE9wR2V0QnlWYWwsIG1fcHJvZmlsZSwgdDUsIHIwLCB0MikKICAgICByZXR1cm4ocjApCiAKIGVu
ZCkKQEAgLTE3OTQsNyArMTc4Nyw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X3ByaXZh
dGVfbmFtZSwKIAogICAgIGxvYWRpIE9wR2V0UHJpdmF0ZU5hbWU6Ok1ldGFkYXRhOjptX29mZnNl
dFt0Ml0sIHQxCiAgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQwKQot
ICAgIHZhbHVlUHJvZmlsZShPcEdldFByaXZhdGVOYW1lLCBtX3Byb2ZpbGUsIHQyLCB0MCkKKyAg
ICB2YWx1ZVByb2ZpbGUoT3BHZXRQcml2YXRlTmFtZSwgbV9wcm9maWxlLCB0MiwgdDAsIHQzKQog
ICAgIHJldHVybih0MCkKIAogLm9wR2V0UHJpdmF0ZU5hbWVTbG93OgpAQCAtMjY2Miw3ICsyNjU1
LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfZnJvbV9zY29wZSwgTwogICAgIG1hY3Jv
IGdldFByb3BlcnR5KCkKICAgICAgICAgbG9hZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpt
X29wZXJhbmRbdDVdLCB0MQogICAgICAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQx
LCB0MCwgdDIpCi0gICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEZyb21TY29wZSwgbV9wcm9maWxl
LCB0NSwgdDIpCisgICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEZyb21TY29wZSwgbV9wcm9maWxl
LCB0NSwgdDIsIHQzKQogICAgICAgICByZXR1cm4odDIpCiAgICAgZW5kCiAKQEAgLTI2NzAsMTQg
KzI2NjMsMTQgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfZnJvbV9zY29wZSwgTwogICAg
ICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om1fb3BlcmFuZFt0NV0sIHQwCiAg
ICAgICAgIGxvYWRxIFt0MF0sIHQwCiAgICAgICAgIHRkekNoZWNrSWZOZWNlc3NhcnkodDApCi0g
ICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEZyb21TY29wZSwgbV9wcm9maWxlLCB0NSwgdDApCisg
ICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEZyb21TY29wZSwgbV9wcm9maWxlLCB0NSwgdDAsIHQz
KQogICAgICAgICByZXR1cm4odDApCiAgICAgZW5kCiAKICAgICBtYWNybyBnZXRDbG9zdXJlVmFy
KCkKICAgICAgICAgbG9hZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVd
LCB0MQogICAgICAgICBsb2FkcSBKU0xleGljYWxFbnZpcm9ubWVudF92YXJpYWJsZXNbdDAsIHQx
LCA4XSwgdDAKLSAgICAgICAgdmFsdWVQcm9maWxlKE9wR2V0RnJvbVNjb3BlLCBtX3Byb2ZpbGUs
IHQ1LCB0MCkKKyAgICAgICAgdmFsdWVQcm9maWxlKE9wR2V0RnJvbVNjb3BlLCBtX3Byb2ZpbGUs
IHQ1LCB0MCwgdDMpCiAgICAgICAgIHJldHVybih0MCkKICAgICBlbmQKIApAQCAtMzE1OSw3ICsz
MTUyLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9lbnVtZXJhdG9yX2dldF9ieQogICAgIGxv
YWRxIGNvbnN0ZXhwciAoKG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKVt0MCwgdDIsIDhdLCB0MgogCiAuZG9uZToKLSAgICB2
YWx1ZVByb2ZpbGUoT3BFbnVtZXJhdG9yR2V0QnlWYWwsIG1fcHJvZmlsZSwgdDUsIHQyKQorICAg
IHZhbHVlUHJvZmlsZShPcEVudW1lcmF0b3JHZXRCeVZhbCwgbV9wcm9maWxlLCB0NSwgdDIsIHQz
KQogICAgIHJldHVybih0MikKIAogLmdldFNsb3dQYXRoOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24g
MjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEyLDcgKzE0MTIsOCBAQCBlbmQKIAogbWFjcm8g
Y2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlvbikKICAgICBsb2FkcCBDb2RlQmxvY2tb
Y2ZyXSwgdDAKLSAgICBiYWRkaXMgaW5jcmVtZW50LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRl
Q291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRp
bnVlCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDBdLCB0MAor
ICAgIGJhZGRpcyBpbmNyZW1lbnQsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVy
W3QwXSwgLmNvbnRpbnVlCiAgICAgYWN0aW9uKCkKICAgICAuY29udGludWU6CiBlbmQKQEAgLTE0
OTUsNyArMTQ5Niw4IEBAIG1hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2MK
ICAgICBjb2RlQmxvY2tHZXR0ZXIodDEpCiAgICAgY29kZUJsb2NrU2V0dGVyKHQxKQogICAgIGlm
IG5vdCAoQ19MT09QIG9yIENfTE9PUF9XSU4pCi0gICAgICAgIGJhZGRpcyA1LCBDb2RlQmxvY2s6
Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3Vu
dGVyW3QxXSwgLmNvbnRpbnVlCisgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1
dGVDb3VudGVyW3QxXSwgdDAKKyAgICAgICAgYmFkZGlzIDUsIEJhc2VsaW5lRXhlY3V0aW9uQ291
bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgICAgIGlmIEpTVkFMVUU2NAogICAg
ICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQpAQCAtMjU1Niw2
ICsyNTU4LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNy
byB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0
ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVb
bWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNb
dGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90
IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNo
b3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0
X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRp
Zmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
YWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4
ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsK
IAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChK
U0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmll
ciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3Qg
SWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmlu
Z0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0
aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJ
ZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tU
eXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlk
ZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCop
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3
Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdC
aXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjAxNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25z
dCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Citpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJ
ZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVu
dGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZp
ZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsK
ICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVp
ZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyODIw
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJDYWNoZWRUeXBlcy5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5j
bHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDYWNoZUVycm9yLmgiCiAj
aW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBQUk9GSUxFX1ZBTFVFX0lOKHZhbHVlX18sIG1fcHJvZmlsZSkKIAogI2RlZmluZSBQUk9GSUxF
X1ZBTFVFX0lOKHZhbHVlLCBwcm9maWxlTmFtZSkgZG8geyBcCi0gICAgICAgIGJ5dGVjb2RlLm1l
dGFkYXRhKGNvZGVCbG9jaykucHJvZmlsZU5hbWUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5j
b2RlKHZhbHVlKTsgXAorICAgICAgICBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLnByb2Zp
bGVOYW1lLT5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOyBcCiAgICAgfSB3
aGlsZSAoZmFsc2UpCiAKIHN0YXRpYyB2b2lkIHRocm93QXJpdHlDaGVja1N0YWNrT3ZlcmZsb3dF
cnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUaHJvd1Njb3BlJiBzY29wZSkKQEAg
LTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3Rv
CiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5
QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNW
YWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRh
dGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0
YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwog
ICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0
YWJsZS5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRh
KTsgfQogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVE
YXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQor
ICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9y
Q2FsbCk7IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0Zv
ckNvbnN0cnVjdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUs
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBFeGVjdXRhYmxlQmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYgKzM4NSw5IEBAIHN0YXRp
YyB2b2lkIG92ZXJyaWRlRGVmYXVsdHMoKQogICAgICAgICBPcHRpb25zOjp0aHJlc2hvbGRGb3JP
TUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkgPSAxNTAwOwogICAgICAgICBPcHRpb25zOjp0aHJlc2hv
bGRGb3JPTUdPcHRpbWl6ZVNvb24oKSA9IDEwMDsKICAgICB9CisKKyAgICAvLyBPT1BTCisgICAg
Ly9PcHRpb25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yQmFz
ZWxpbmUoKSA9IDQ1MDsKIH0KIAogc3RhdGljIHZvaWQgY29ycmVjdE9wdGlvbnMoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAy
ODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDYgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZh
c3RNZW1vcnkoKTsKICAgICB2KEludDMyLCBldmFsVGhyZXNob2xkTXVsdGlwbGllciwgMTAsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1heGltdW1FdmFsQ2FjaGVhYmxlU291
cmNlTGVuZ3RoLCAyNTYsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKLSAgICB2KEJvb2wsIHJh
bmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hl
Y2twb2ludHNGb3JCYXNlbGluZSwgMTAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJbnQz
MiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvclVwcGVyVGllcnMs
IDUwMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkBAIC01MzIsNiArNTMxLDcgQEAgYm9v
bCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZURhdGFJQywg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDSW5PcHRpbWl6
aW5nSklULCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNT
aGFyaW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB1c2VCYXNlbGlu
ZUpJVENvZGVTaGFyaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgLyog
RmVhdHVyZSBGbGFncyAqL1wKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5Niw5ICszOTYsMTYgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpwcmVw
YXJlRm9yRXhlY3V0aQogICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCiAgICAg
ICAgIGNvZGVCbG9jay0+dmFsaWRhdGUoKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgp
KQorICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9j
ay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAg
ICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJl
bGVhc2VOb25OdWxsKCkpOworCisgICAgICAgIC8vaWYgKGNvZGVCbG9jay0+dW5saW5rZWRDb2Rl
QmxvY2soKS0+aXNCdWlsdGluRnVuY3Rpb24oKSkKKyAgICAgICAgLy8gICAgZGF0YUxvZ0xuKCJT
aGFyZWQgYnVpbHRpbiEiKTsKKyAgICB9IGVsc2UgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpIHsK
KyAgICAgICAgLy9pZiAoIWNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+aXNCdWlsdGlu
RnVuY3Rpb24oKSkKKyAgICAgICAgLy8gICAgZGF0YUxvZ0xuKFJhd1BvaW50ZXIoY29kZUJsb2Nr
LT51bmxpbmtlZENvZGVCbG9jaygpKSwgIjogIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3Vu
dGVyKCkpOwogICAgICAgICBzZXR1cExMSW50KGNvZGVCbG9jayk7Ci0gICAgZWxzZQorICAgIH0g
ZWxzZQogICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrKTsKIAogICAgIGluc3RhbGxDb2Rl
KHZtLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+Y29kZVR5cGUoKSwgY29kZUJsb2NrLT5zcGVjaWFs
aXphdGlvbktpbmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRUaWVyVXBDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDkgKzUyLDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1V
cCgpCiAgICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkp
Ci0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0
aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9s
ZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9y
T01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1Ro
cmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwog
ICAgIH0KIAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpA
QCAtNjUsOSArNjUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQogICAgIHsK
ICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAg
ICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplU29vbigp
LCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hv
bGRGb3JCQlFPcHRpbWl6ZVNvb24oKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5l
d1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0
cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01H
T3B0aW1pemVTb29uKCkpOwogICAgIH0KIAogICAgIHN0cnVjdCBPU1JFbnRyeURhdGEgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVw
Q291bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CiAKIFRpZXJVcENvdW50OjpUaWVyVXBDb3VudCgpCiB7Ci0gICAg
c2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJt
VXAoKSwgbnVsbHB0cik7CisgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZv
ck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiB9CiAKIFRpZXJVcENvdW50Ojp+VGllclVwQ291
bnQoKSA9IGRlZmF1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGll
clVwQ291bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGllclVwQ291bnQuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAg
cHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCh1aW50MzJfdCBmdW5jdGlvbklu
ZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBm
dW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBhZnRlciB3YXJtLXVwLiIpOwotICAgICAg
ICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldh
cm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVj
a0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCkBAIC05MCwxNCArOTAsMTQgQEAgcHVi
bGljOgogICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbih1aW50MzJfdCBmdW5jdGlvbklu
ZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBm
dW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uIik7Ci0gICAg
ICAgIHNldE5ld1RocmVzaG9sZCgwLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xk
KDApOwogICAgIH0KIAogICAgIHZvaWQgb3B0aW1pemVTb29uKHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1
bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIHNvb24uIik7CiAgICAgICAgIC8vIEZJWE1F
OiBOZWVkIGFkanVzdG1lbnQgb25jZSB3ZSBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3YXNt
IGZ1bmN0aW9ucy4KLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZv
ck9NR09wdGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9w
dGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICB2b2lk
IHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCh1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNp
b24gMjgyMDE2KQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDYgKzY2LDIwIEBAIHB1YmxpYzoKICAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKICAg
ICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEJhZyYgb3BlcmF0b3I9KEJhZzxU
LCBVPiYmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHVud3JhcHBlZEhlYWQoKSA9PSBvdGhl
ci51bndyYXBwZWRIZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAg
QmFnIGRlc3Ryb3k7CisgICAgICAgIGRlc3Ryb3kubV9oZWFkID0gdW53cmFwcGVkSGVhZCgpOwor
ICAgICAgICBtX2hlYWQgPSBvdGhlci51bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG90aGVyLm1f
aGVhZCA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIH5C
YWcoKQogICAgIHsKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpz
Yy1zdHJlc3MtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVz
cy10ZXN0cwkocmV2aXNpb24gMjgyMDE2KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVz
cy10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtNzcwLDE3ICs3NzAsMTggQEAgZW5kCiAKICMgRklY
TUU6IG5lZWQgdG8gZml4IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTg3MDMgdG8gZW5hYmxlIHRoaXMgb24gTGludXgvTUlQUy4KIGRlZiBydW5CeXRlY29kZUNhY2hl
SW1wbChvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMsICphZGRpdGlvbmFsRW52KQotICAgIGlm
ICgkaG9zdE9TID09ICJkYXJ3aW4iKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUt
Y2FjaGUiCi0gICAgZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAkYXJjaGl0ZWN0dXJlICE9
ICJtaXBzIikKLSAgICAgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlWFhYWFhYIgot
ICAgIGVsc2UKLSAgICAgICAgc2tpcAotICAgICAgICByZXR1cm4KLSAgICBlbmQKKyAgICAjIE9P
UFMKKyAgICAjaWYgKCRob3N0T1MgPT0gImRhcndpbiIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUg
PSAiYnl0ZWNvZGUtY2FjaGUiCisgICAgI2Vsc2lmICgkaG9zdE9TID09ICJsaW51eCIgJiYgJGFy
Y2hpdGVjdHVyZSAhPSAibWlwcyIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUt
Y2FjaGVYWFhYWFgiCisgICAgI2Vsc2UKKyAgICAjICAgIHNraXAKKyAgICAjICAgIHJldHVybgor
ICAgICNlbmQKIAotICAgIG9wdGlvbnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9OUyArIG9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMK
LSAgICBhZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVy
cyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50
b19zLCAqdm1Db21tYW5kLCAkYmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0
SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyLCAqYWRkaXRpb25hbEVudikKKyAgICAjb3B0aW9u
cyA9IEJBU0VfT1BUSU9OUyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucworICAgICNhZGRSdW5Db21tYW5kKCJi
eXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1jYWNoZS10
ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5kLCAkYmVu
Y2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JI
YW5kbGVyLCAqYWRkaXRpb25hbEVudikKIGVuZAogCiBkZWYgcnVuQnl0ZWNvZGVDYWNoZSgqb3B0
aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437591</attachid>
            <date>2021-09-07 22:05:22 -0700</date>
            <delta_ts>2021-09-07 22:11:43 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>467705</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODMyLDYgKzgzMiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjY4LDYgKzM2NjksOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjU4LDYgKzYyNjEsOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05Njk5LDYgKzk3MDQsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNjEz
MjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAgb3AgOmdldF9hcmd1
bWVudCwKICAgICAgICAgaW5kZXg6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAg
ICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxl
LiosCiAgICAgfQogCiBvcCA6YXJndW1lbnRfY291bnQsCkBAIC0xODMsNyArMTgzLDcgQEAgb3Ag
OnRvX3RoaXMsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgY2FjaGVkU3RydWN0dXJlSUQ6IFN0
cnVjdHVyZUlELAogICAgICAgICB0b1RoaXNTdGF0dXM6IFRvVGhpc1N0YXR1cywKLSAgICAgICAg
cHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwK
ICAgICB9CiAKIG9wIDpjaGVja190ZHosCkBAIC0yOTAsOSArMjkwLDEwIEBAIG9wX2dyb3VwIDpQ
cm9maWxlZEJpbmFyeU9wLAogICAgICAgICBsaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAg
cmhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVz
LAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkCiAgICAgfSwKICAgICBtZXRhZGF0YTog
ewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0
aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9ncm91cCA6VmFsdWVQ
cm9maWxlZEJpbmFyeU9wLApAQCAtMzA5LDcgKzMxMCw3IEBAIG9wX2dyb3VwIDpWYWx1ZVByb2Zp
bGVkQmluYXJ5T3AsCiAgICAgICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAg
bWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlCisgICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6Yml0bm90LApAQCAtMzE4LDcgKzMxOSw3
IEBAIG9wIDpiaXRub3QsCiAgICAgICAgIG9wZXJhbmQ6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9
LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZQorICAgICAg
ICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlVuYXJ5T3AsCkBA
IC0zNTEsOSArMzUyLDEwIEBAIG9wX2dyb3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAg
IF0sCiAgICAgYXJnczogewogICAgICAgICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAg
ICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAg
ICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxl
OiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzYzLDcg
KzM2NSw3IEBAIG9wIDp0b19vYmplY3QsCiAgICAgICAgIG1lc3NhZ2U6IHVuc2lnbmVkLAogICAg
IH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVBy
b2ZpbGVkVW5hcnlPcCwKQEAgLTM3Niw3ICszNzgsNyBAQCBvcF9ncm91cCA6VmFsdWVQcm9maWxl
ZFVuYXJ5T3AsCiAgICAgICAgIG9wZXJhbmQ6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAg
IG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJv
ZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAgfQogCiBvcCA6bmVnYXRlLApAQCAtMzg0LDkgKzM4
NiwxMCBAQCBvcCA6bmVnYXRlLAogICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAg
ICAgb3BlcmFuZDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRU
eXBlLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApAQCAt
NDc3LDcgKzQ4MCw3IEBAIG9wIDpnZXRfYnlfaWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewog
ICAgICAgICBtb2RlTWV0YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCi0gICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAg
fQogCiBvcCA6Z2V0X2J5X2lkX3dpdGhfdGhpcywKQEAgLTQ4OCw3ICs0OTEsNyBAQCBvcCA6Z2V0
X2J5X2lkX3dpdGhfdGhpcywKICAgICAgICAgcHJvcGVydHk6IHVuc2lnbmVkLAogICAgIH0sCiAg
ICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBw
cm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAKIG9wIDpnZXRfYnlfdmFsX3dpdGhfdGhp
cywKQEAgLTQ5OSw3ICs1MDIsNyBAQCBvcCA6Z2V0X2J5X3ZhbF93aXRoX3RoaXMsCiAgICAgICAg
IHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmls
ZS4qLAogICAgIH0KIAogb3AgOmdldF9ieV9pZF9kaXJlY3QsCkBAIC01MDksNyArNTEyLDcgQEAg
b3AgOmdldF9ieV9pZF9kaXJlY3QsCiAgICAgICAgIHByb3BlcnR5OiB1bnNpZ25lZCwKICAgICB9
LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwgIyBub3Qg
dXNlZCBpbiBsbGludAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwgIyBub3QgdXNl
ZCBpbiBsbGludAogICAgICAgICBzdHJ1Y3R1cmVJRDogU3RydWN0dXJlSUQsCiAgICAgICAgIG9m
ZnNldDogdW5zaWduZWQsCiAgICAgfQpAQCAtNTIwLDcgKzUyMyw3IEBAIG9wIDpnZXRfcHJvdG90
eXBlX29mLAogICAgICAgICB2YWx1ZTogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0
YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxl
OiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAKIG9wIDp0cnlfZ2V0X2J5X2lkLApAQCAtNTMwLDcg
KzUzMyw3IEBAIG9wIDp0cnlfZ2V0X2J5X2lkLAogICAgICAgICBwcm9wZXJ0eTogdW5zaWduZWQs
CiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOnB1dF9ieV9p
ZCwKQEAgLTU3MSw3ICs1NzQsNyBAQCBvcCA6Z2V0X2J5X3ZhbCwKICAgICAgICAgcHJvcGVydHk6
IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAg
ICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBzZWVuSWRlbnRpZmllcnM6
IEdldEJ5VmFsSGlzdG9yeSwKICAgICB9CkBAIC01ODMsNyArNTg2LDcgQEAgb3AgOmdldF9wcml2
YXRlX25hbWUsCiAgICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHBy
b2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgICAgICBzdHJ1Y3R1cmVJRDogU3RydWN0dXJlSUQs
CiAgICAgICAgIG9mZnNldDogdW5zaWduZWQsCiAgICAgICAgIHByb3BlcnR5OiBXcml0ZUJhcnJp
ZXJbSlNDZWxsXSwKQEAgLTg0Miw3ICs4NDUsNyBAQCBvcCA6Y2FsbCwKICAgICB9LAogICAgIG1l
dGFkYXRhOiB7CiAgICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCi0gICAg
ICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxl
LiosCiAgICAgfQogCiBvcCA6dGFpbF9jYWxsLApAQCAtODU0LDcgKzg1Nyw3IEBAIG9wIDp0YWls
X2NhbGwsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewogICAgICAgICBjYWxsTGlua0luZm86IExM
SW50Q2FsbExpbmtJbmZvLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAg
IHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOmNhbGxfZXZhbCwKQEAgLTg2
Nyw3ICs4NzAsNyBAQCBvcCA6Y2FsbF9ldmFsLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKICAg
ICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKLSAgICAgICAgcHJvZmlsZTog
VmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAK
IG9wIDpjYWxsX3ZhcmFyZ3MsCkBAIC04ODEsNyArODg0LDcgQEAgb3AgOmNhbGxfdmFyYXJncywK
ICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9m
aWxlLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHByb2ZpbGU6IFZh
bHVlUHJvZmlsZS4qLAogICAgIH0sCiAgICAgdG1wczogewogICAgICAgICBhcmdDb3VudEluY2x1
ZGluZ1RoaXM6IHVuc2lnbmVkLApAQCAtOTAyLDcgKzkwNSw3IEBAIG9wIDp0YWlsX2NhbGxfdmFy
YXJncywKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJy
YXlQcm9maWxlLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0sCiAgICAgdG1wczogewogICAgICAgICBhcmdDb3Vu
dEluY2x1ZGluZ1RoaXM6IHVuc2lnbmVkCkBAIC05MjMsNyArOTI2LDcgQEAgb3AgOnRhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cywKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOmNvbnN0cnVj
dCwKQEAgLTkzNSw3ICs5MzgsNyBAQCBvcCA6Y29uc3RydWN0LAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKICAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKLSAgICAgICAg
cHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwK
ICAgICB9CiAKIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKQEAgLTk0OSw3ICs5NTIsNyBAQCBvcCA6
Y29uc3RydWN0X3ZhcmFyZ3MsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJh
eVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAor
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9LAogICAgIHRtcHM6IHsKICAg
ICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzOiB1bnNpZ25lZApAQCAtMTAyOCw3ICsxMDMxLDcg
QEAgb3AgOmdldF9mcm9tX3Njb3BlLAogICAgICAgICAgICAgc3RydWN0dXJlOiBXcml0ZUJhcnJp
ZXJCYXNlW1N0cnVjdHVyZV0sCiAgICAgICAgIH0sCiAgICAgICAgIG9wZXJhbmQ6IHVpbnRwdHJf
dCwgI29mZnNldCA2Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwgIyBvZmZzZXQgNwor
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwgIyBvZmZzZXQgNwogICAgIH0sCiAgICAg
bWV0YWRhdGFfaW5pdGlhbGl6ZXJzOiB7CiAgICAgICAgIGdldFB1dEluZm86IDpnZXRQdXRJbmZv
LApAQCAtMTA2NSw3ICsxMDY4LDcgQEAgb3AgOmdldF9mcm9tX2FyZ3VtZW50cywKICAgICAgICAg
aW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmls
ZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9
CiAKIG9wIDpwdXRfdG9fYXJndW1lbnRzLApAQCAtMTE4Nyw3ICsxMTkwLDcgQEAgb3AgOmVudW1l
cmF0b3JfZ2V0X2J5X3ZhbCwKICAgICAgICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lzdGVyLAog
ICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAor
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCiAgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFk
YXRhLAogICAgIH0KQEAgLTEyNDksMTEgKzEyNTIsMTEgQEAgb3AgOml0ZXJhdG9yX29wZW4sCiAg
ICAgfSwKICAgICBtZXRhZGF0YTogewogICAgICAgICBpdGVyYXRpb25NZXRhZGF0YTogSXRlcmF0
aW9uTW9kZU1ldGFkYXRhLAotICAgICAgICBpdGVyYWJsZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
KyAgICAgICAgaXRlcmFibGVQcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICAgICAgY2FsbExp
bmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKLSAgICAgICAgaXRlcmF0b3JQcm9maWxlOiBWYWx1
ZVByb2ZpbGUsCisgICAgICAgIGl0ZXJhdG9yUHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAg
ICAgIG1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwKLSAgICAgICAgbmV4dFByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgbmV4dFByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAog
ICAgIH0sCiAgICAgY2hlY2twb2ludHM6IHsKICAgICAgICAgc3ltYm9sQ2FsbDogbmlsLApAQCAt
MTI3NCwxMSArMTI3NywxMSBAQCBvcCA6aXRlcmF0b3JfbmV4dCwKICAgICAgICAgaXRlcmF0aW9u
TWV0YWRhdGE6IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwKICAgICAgICAgaXRlcmFibGVQcm9maWxl
OiBBcnJheVByb2ZpbGUsCiAgICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8s
Ci0gICAgICAgIG5leHRSZXN1bHRQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIG5leHRS
ZXN1bHRQcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICAgICAgZG9uZU1vZGVNZXRhZGF0YTog
R2V0QnlJZE1vZGVNZXRhZGF0YSwKLSAgICAgICAgZG9uZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
KyAgICAgICAgZG9uZVByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgICAgICB2YWx1ZU1vZGVN
ZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwKLSAgICAgICAgdmFsdWVQcm9maWxlOiBWYWx1
ZVByb2ZpbGUsCisgICAgICAgIHZhbHVlUHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAgfSwK
ICAgICB0bXBzOiB7CiAgICAgICAgIG5leHRSZXN1bHQ6IEpTVmFsdWUsCkBAIC0xMzIyLDcgKzEz
MjUsNyBAQCBvcCA6Z2V0X2ludGVybmFsX2ZpZWxkLAogICAgICAgICBpbmRleDogdW5zaWduZWQs
CiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOnB1dF9pbnRl
cm5hbF9maWVsZCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAy
ODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMjAgKzU3LDQyIEBAIFZhbHVl
UHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICBVTlVTRURfUEFSQU0oY2hl
Y2twb2ludEluZGV4KTsKICAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlTWV0YWRhdGE6Om9wY29k
ZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKICAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5k
ZXgpIHsKLSAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJuICZt
ZXRhZGF0YS5tX2l0ZXJhdG9yUHJvZmlsZTsKLSAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
Z2V0TmV4dDogcmV0dXJuICZtZXRhZGF0YS5tX25leHRQcm9maWxlOworICAgICAgICBjYXNlIE9w
SXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1cm4gbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGU7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OmdldE5leHQ6IHJldHVybiBtZXRhZGF0
YS5tX25leHRQcm9maWxlOwogICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAKICAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRlY29kZU1l
dGFkYXRhOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CiAgICAgICAgIHN3aXRjaCAo
Y2hlY2twb2ludEluZGV4KSB7Ci0gICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVO
ZXh0OiByZXR1cm4gJm1ldGFkYXRhLm1fbmV4dFJlc3VsdFByb2ZpbGU7Ci0gICAgICAgIGNhc2Ug
T3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJldHVybiAmbWV0YWRhdGEubV9kb25lUHJvZmlsZTsK
LSAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiAmbWV0YWRhdGEu
bV92YWx1ZVByb2ZpbGU7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0
OiByZXR1cm4gbWV0YWRhdGEubV9uZXh0UmVzdWx0UHJvZmlsZTsKKyAgICAgICAgY2FzZSBPcEl0
ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIG1ldGFkYXRhLm1fZG9uZVByb2ZpbGU7CisgICAg
ICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1cm4gbWV0YWRhdGEubV92YWx1
ZVByb2ZpbGU7CiAgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgCi0gICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9m
aWxlOworICAgICAgICByZXR1cm4gbWV0YWRhdGEubV9wcm9maWxlOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yKHVuc2ln
bmVkIGNoZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURfUEFSQU0oY2hlY2twb2ludEluZGV4
KTsKKyAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9v
cGVuKSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2Ug
T3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9m
ZnNldE9mSXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46Omdl
dE5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFByb2ZpbGUoKTsK
KyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0
ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAg
ICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJh
dG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZEb25l
UHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1ZTogcmV0dXJu
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2ZpbGUoKTsKKyAgICAgICAgZGVm
YXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSAKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24g
MjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86
OnVubGluayhWTSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1D
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRo
U3RhcnQoKQotewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5h
bFB0clRhZz4obV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNF
X0FTU0VSVCghaXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJ
bmZvOjpzZXRNYXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID0gdmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNE
aXJlY3QoKSAmJiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwog
dm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVT
cGVjaWZpY0NhbGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5
OSwxMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9m
cmFtZVNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0
YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2Fs
bCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRV
c2VzRGF0YUlDcyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwot
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxM
aW5rSW5mb0dQUik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExp
bmtJbmZvR1BSOwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgp
OwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBzbG93UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJ
QyA9PSBVc2VEYXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5z
Y3JhdGNoUmVnaXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcg
QEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAg
Z29Qb2x5bW9ycGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywg
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVN
YXNrKSk7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAg
ICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMu
bGluaygmaml0KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBw
cmVwLgogICAgICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxM
aW5rSW5mb0dQUiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRy
eVB0clRhZyk7CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0
aFBhdGNoKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlm
IChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAg
ICAgICAgIGNhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNh
bGxMaW5rSW5mbyk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAg
ICAgICB1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2Rl
SUMubV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihjYWxsZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEzICszNDQs
MzQgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGpp
dCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVz
ZURhdGFJQykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1
cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VE
YXRhSUMsIG51bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBp
ZiAoaXNEYXRhSUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIg
IT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJ
Qy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1
cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQor
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2Fs
bCgpKTsKLSAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAg
c2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aElt
cGwodGhpcywgaml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlz
VGFpbENhbGwoKSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVs
cGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0
aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5m
b0dQUiwgVXNlRGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7
CiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBl
cnMmIGppdCkKQEAgLTM2OSwxNyArMzgxLDMwIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xv
d1BhdGgoVk0mIHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJU
YWcpOwogfQogCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUo
Y2FsbExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxp
emVEYXRhSUMoVk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0lu
Zm8sIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgbV9j
b2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4
KTsKKyAgICBzZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQ
Uik7CisgICAgbV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRp
b247CisgICAgaWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpCisgICAg
ICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+
KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBm
b3IgcmVmIGNvdW50aW5nPworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAg
ICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRT
bG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBD
YWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVz
ZURhdGFJQzo6Tm8pOwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0g
ICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAg
ICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNh
bGwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
CiAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CkBAIC0zOTcsNyArNDIyLDcgQEAgdm9p
ZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhcwogCiAgICAgYXV0byBmYXN0UGF0
aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgICAgIHUuY29k
ZUlDLm1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihmYXN0UGF0aFN0YXJ0KTsKICAgICB9KTsKIAogICAgIC8vIC0gSWYgd2UncmUgbm90IHll
dCBsaW5rZWQsIHRoaXMgaXMgYSBqdW1wIHRvIHRoZSBzbG93IHBhdGguCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODIw
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDExIEBAIGNsYXNzIEpTRnVuY3Rpb247CiBlbnVtIE9w
Y29kZUlEIDogdW5zaWduZWQ7CiBzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGE7CiAKK3N0cnVj
dCBVbmxpbmtlZENhbGxMaW5rSW5mbzsKKwogY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBh
Y2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIHB1YmxpYzoKLSAgICBlbnVtIENh
bGxUeXBlIHsKKyAgICBlbnVtIENhbGxUeXBlIDogdWludDhfdCB7CiAgICAgICAgIE5vbmUsCiAg
ICAgICAgIENhbGwsCiAgICAgICAgIENhbGxWYXJhcmdzLApAQCAtMTY1LDYgKzE2Nyw4IEBAIHB1
YmxpYzoKICAgICAgICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgfQogCisgICAgdm9p
ZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgVW5saW5rZWRDYWxsTGlua0luZm8mLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKwogICAgIEdQUlJlZyBjYWxsZWVHUFIo
KSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsgfQogICAgIAogICAgIGVudW0gY2xhc3MgVXNl
RGF0YUlDIDogdWludDhfdCB7CkBAIC0xNzMsMTMgKzE3NywxNiBAQCBwdWJsaWM6CiAgICAgfTsK
IAogcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1w
bChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVt
aXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxl
ZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGws
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKIHB1YmxpYzoKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRE
YXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwg
VXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2b2lk
IGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXREaXJlY3RU
YWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
Jik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9TdHViKCk7
CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VXNlRGF0
YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsyMTAsNiBA
QCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAotICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7CiAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7CiAKQEAg
LTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVsbHB0cjsK
ICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25jZSgpCiAg
ICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMwOCw5ICsz
MDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlwZT4obV9j
YWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENh
bGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgfQogCiAg
ICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgxLDcgKzM4
Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OworCisgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOworCiAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAg
dW5pb24gVW5pb25UeXBlIHsKQEAgLTM5Nyw2ICs0MDAsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsTG9jYXRpb247
CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4g
bV9jYWxsZWVMb2NhdGlvbjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJu
YWxQdHJUYWc+IG1fc2xvd1BhdGhTdGFydDsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKICAgICAgICAgfSBjb2RlSUM7CiAg
ICAgfSB1OwogCkBAIC00MjQsNiArNDI4LDEzIEBAIGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxM
aW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKTsKIH0K
IAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNh
biB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJbmZvOjpDYWxs
VHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBk
b25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBm
cmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDggQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJj
ZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVy
cygpKTsKKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxp
bnRFeGVjdXRlQ291bnRlcigpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRk
KHRoaXMpOwogfQpAQCAtMzE4LDcgKzMyMCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIEMKICAgICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKICAgICBvcHRp
bWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKKyAgICAvL2ppdEFmdGVy
V2FybVVwKCk7CiAKICAgICBpZiAob3RoZXIubV9yYXJlRGF0YSkgewogICAgICAgICBjcmVhdGVS
YXJlRGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC0zNTksNyArMzYxLDkgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVy
KCkpOwogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSk7Ci0gICAgCisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENv
ZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKKwogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCku
YWRkKHRoaXMpOwogfQogCkBAIC0zNzAsMTAgKzM3NCwxMyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhWTSYgdm0sIFN0cnVjdHVyZSogCiAvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5r
ZWQgYnl0ZWNvZGUgZ2VuZXJhdGlvbi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdl
bmVyYXRlIGNvbnRyb2wKIC8vIGZsb3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFz
b24gZm9yIHRoaXMgaXMgd2UgcmVseSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2Ft
ZSBmb3IKIC8vIGFsbCB0aGUgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2Ug
cmVseSBvbiB0aGlzIGZhY3QgYnkgY2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKLS8vIGlu
c2lkZSBVbmxpbmtlZENvZGVCbG9jay4KKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4gQWxz
bywgQmFzZWxpbmUgSklUIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3Mgb2Yg
YW4gVW5saW5rZWRDb2RlQmxvY2ssCisvLyBzbyB0aGUgYnl0ZWNvZGUgbXVzdCByZW1haW4gdGhl
IHNhbWUgYmV0d2VlbiBDb2RlQmxvY2tzIHNoYXJpbmcgYW4gVW5saW5rZWRDb2RlQmxvY2suCiBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKICAg
ICBKU1Njb3BlKiBzY29wZSkKIHsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7IC8vIFdl
IG5lZWQgdG8gc2V0IHVwIG91ciB2YWx1ZSBwcm9maWxlIHBvaW50ZXJzLgorCiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIApAQCAt
NDM1LDcgKzQ0Miw4IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMK
ICAgICAvLyBCb29ra2VlcCB0aGUgc3Ryb25nbHkgcmVmZXJlbmNlZCBtb2R1bGUgZW52aXJvbm1l
bnRzLgogICAgIEhhc2hTZXQ8SlNNb2R1bGVFbnZpcm9ubWVudCo+IHN0cm9uZ2x5UmVmZXJlbmNl
ZE1vZHVsZUVudmlyb25tZW50czsKIAotICAgIGF1dG8gbGlua19wcm9maWxlID0gWyZdKGNvbnN0
IGF1dG8mIC8qaW5zdHJ1Y3Rpb24qLywgYXV0byAvKmJ5dGVjb2RlKi8sIGF1dG8mIC8qbWV0YWRh
dGEqLykgeworICAgIGF1dG8gbGlua19wcm9maWxlID0gWyZdKGNvbnN0IGF1dG8mIC8qaW5zdHJ1
Y3Rpb24qLywgYXV0byAvKmJ5dGVjb2RlKi8sIGF1dG8mIG1ldGFkYXRhKSB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lX3Y8VmFsdWVQcm9maWxlKiwgZGVjbHR5cGUobWV0YWRh
dGEubV9wcm9maWxlKT4pOwogICAgICAgICBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2Zp
bGVzKys7CiAgICAgfTsKIApAQCAtNDY2LDYgKzQ3NCwxOSBAQCBib29sIENvZGVCbG9jazo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCisjZGVmaW5l
IExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTog
eyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0
YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJ5
dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZp
bmUgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6
IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRh
dGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5
dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwogICAg
IGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9u
cygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVh
bSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
OwpAQCAtNDk5LDkgKzUyMCw5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFMKIAogICAgICAgICBMSU5LKE9wR2V0QnlJZCwgcHJvZmlsZSkKIAotICAgICAgICBMSU5L
KE9wRW51bWVyYXRvck5leHQsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BFbnVtZXJhdG9ySW5C
eVZhbCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwg
cHJvZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JOZXh0KQorICAgICAgICBMSU5LKE9w
RW51bWVyYXRvckluQnlWYWwpCisgICAgICAgIExJTksoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVy
dHkpCiAgICAgICAgIExJTksoT3BFbnVtZXJhdG9yR2V0QnlWYWwsIHByb2ZpbGUpCiAKICAgICAg
ICAgTElOSyhPcENhbGwsIHByb2ZpbGUpCkBAIC01MjgsMTQgKzU0OSwxNCBAQCBib29sIENvZGVC
bG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQcm9t
aXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTksoT3BB
ZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAgIExJ
TksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcEluYykK
LSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9G
SUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BNdWwp
CisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAgICAg
TElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktfV0lU
SF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllf
QVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJ
TEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2MSw2ICs3ODIsNDYg
QEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogI3VuZGVmIExJTktf
RklFTEQKICN1bmRlZiBMSU5LCiAKKyAgICBpZiAobV9tZXRhZGF0YSkgeworICAgICAgICB1bnNp
Z25lZCBzaXplID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkgXAorICAgICAgICBzaXplICs9IG1f
bWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJ
VEhfVkFMVUVfUFJPRklMRShDT1VOVCkKKyN1bmRlZiBDT1VOVAorICAgICAgICBzaXplICs9IG1f
bWV0YWRhdGEtPm51bUVudHJpZXM8T3BJdGVyYXRvck9wZW4+KCkgKiAzOworICAgICAgICBzaXpl
ICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BJdGVyYXRvck5leHQ+KCkgKiAzOworCisgICAg
ICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2stPm1fdmFsdWVQcm9maWxlcy5zaXplKCkgJiYgc2l6
ZSkgeworICAgICAgICAgICAgdW5saW5rZWRDb2RlQmxvY2stPm1fdmFsdWVQcm9maWxlcyA9IEZp
eGVkVmVjdG9yPFZhbHVlUHJvZmlsZT4oc2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c2l6ZSkgeworICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgICAgICAgICAgYXV0
byBhc3NpZ24gPSBbJl0gKFZhbHVlUHJvZmlsZSomIHB0cikgeworICAgICAgICAgICAgICAgIHB0
ciA9ICZ1bmxpbmtlZENvZGVCbG9jay0+bV92YWx1ZVByb2ZpbGVzW2luZGV4KytdOworICAgICAg
ICAgICAgfTsKKworI2RlZmluZSBWSVNJVChfX29wKSBcCisgICAgICAgICAgICBtX21ldGFkYXRh
LT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgYXNzaWduKG1ldGFkYXRhLm1f
cHJvZmlsZSk7IH0pOworICAgICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVkFMVUVfUFJP
RklMRShWSVNJVCkKKyN1bmRlZiBWSVNJVAorCisgICAgICAgICAgICBtX21ldGFkYXRhLT5mb3JF
YWNoPE9wSXRlcmF0b3JPcGVuPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IAorICAgICAgICAgICAg
ICAgIGFzc2lnbihtZXRhZGF0YS5tX2l0ZXJhYmxlUHJvZmlsZSk7CisgICAgICAgICAgICAgICAg
YXNzaWduKG1ldGFkYXRhLm1faXRlcmF0b3JQcm9maWxlKTsKKyAgICAgICAgICAgICAgICBhc3Np
Z24obWV0YWRhdGEubV9uZXh0UHJvZmlsZSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEl0ZXJhdG9yTmV4dD4oWyZdIChhdXRvJiBtZXRhZGF0
YSkgeworICAgICAgICAgICAgICAgIGFzc2lnbihtZXRhZGF0YS5tX25leHRSZXN1bHRQcm9maWxl
KTsKKyAgICAgICAgICAgICAgICBhc3NpZ24obWV0YWRhdGEubV9kb25lUHJvZmlsZSk7CisgICAg
ICAgICAgICAgICAgYXNzaWduKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlKTsKKyAgICAgICAgICAg
IH0pOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA9PSBzaXplKTsKKyAgICAg
ICAgfQorICAgIH0KKwogICAgIGlmIChtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoQ29u
dHJvbEZsb3dQcm9maWxlck9wY29kZXMoKSkKICAgICAgICAgaW5zZXJ0QmFzaWNCbG9ja0JvdW5k
YXJpZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKCk7CiAKQEAgLTc2OCw3ICs4MjksNyBAQCBib29s
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgLy8gcmVseSBvbiB0aGUg
aW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRlZCB0byBhbHNvIGlu
c3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUgYWNjdXJhdGUgYXNz
ZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAg
ICBqaXRBZnRlcldhcm1VcCgpOworICAgIC8vaml0QWZ0ZXJXYXJtVXAoKTsKIAogICAgIC8vIElm
IHRoZSBjb25jdXJyZW50IHRocmVhZCB3aWxsIHdhbnQgdGhlIGNvZGUgYmxvY2sncyBoYXNoLCB0
aGVuIGNvbXB1dGUgaXQgaGVyZQogICAgIC8vIHN5bmNocm9ub3VzbHkuCkBAIC03ODksNiArODUw
LDc3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbkNvbW1vbihWTSYKICAgICBtX293
bmVyRWRnZS5zZXQodm0sIHRoaXMsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmNyZWF0ZSh2
bSwgdGhpcykpOwogfQogCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNlbGlu
ZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRDb2RlKGpp
dENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0Q29kZU1h
cCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFuZGxlcklu
Zm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8gRklYTUU6
IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5hdGl2ZUNv
ZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFn
Z2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7
CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgYXV0
byYgaml0RGF0YSA9IGVuc3VyZUpJVERhdGEobG9ja2VyKTsKKworICAgICAgICBSRUxFQVNFX0FT
U0VSVChqaXREYXRhLm1faml0Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CisgICAgICAgIGppdERh
dGEubV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+bV9jb25z
dGFudFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqaXRDb2Rl
LT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBlbnRyeSA9
IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOworICAgICAgICAgICAgc3dpdGNoIChlbnRy
eS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFs
T2JqZWN0OgorICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBt
X2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAgICAgICAg
ICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8gPSAqc3RhdGlj
X2Nhc3Q8VW5saW5rZWRDYWxsTGlua0luZm8qPihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAgICAg
ICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxsTGlua0luZm9z
LmFkZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAg
ICAgICAgICAgICAgICAvLyBPT1BTOiBkb24ndCBoYXJkY29kZSB0aGVzZSByZWdpc3RlcnMgbGlr
ZSB0aGlzLgorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+aW5pdGlhbGl6ZURhdGFJQyh2
bSgpLCB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1Qy
KTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gY2FsbExp
bmtJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7CisgICAg
ICAgICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbyA9
ICpzdGF0aWNfY2FzdDxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKj4oZW50cnkucGF5bG9hZCk7
CisgICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gaml0RGF0YS5t
X3N0dWJJbmZvcy5hZGQodW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlLCBDb2RlT3JpZ2luKHVu
bGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT5pbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8odGhpcywgdW5saW5rZWRT
dHViSW5mbyk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9
IHN0dWJJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbDogeworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnku
cGF5bG9hZCk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9
IGZ1bmN0aW9uRGVjbChpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHBy
OiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3Rh
bnRQb29sW2ldID0gZnVuY3Rpb25FeHByKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN3
aXRjaCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICBjYXNlIE1vZHVs
ZUNvZGU6CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGlu
ZWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAg
ICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBk
ZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUg
dGhhdCBvYnNlcnZhdGlvbi4KKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2Fu
SW5saW5lKGNhcGFiaWxpdHlMZXZlbCgpKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24odGhp
cyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChPcHRpb25zOjp1c2VCYXNlbGlu
ZUpJVENvZGVTaGFyaW5nKCkpCisgICAgICAgIHVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5r
ZWRCYXNlbGluZUNvZGUgPSBXVEZNb3ZlKGppdENvZGUpOworfQorCiBDb2RlQmxvY2s6On5Db2Rl
QmxvY2soKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtMTUxOSwzOSArMTY1MSw0MCBAQCB2
b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAKICAgICB1cGRhdGVBbGxQ
cmVkaWN0aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29sIGlzRWxpZ2libGVGb3JM
TEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwotICAgIG1faXNF
bGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8gSWYgQmFzZWxpbmVKSVQg
Y29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0
cywgd2UgYXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJl
aW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAgICBpZiAoT3B0aW9uczo6
dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4
ZWN1dGluZyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxv
Y2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wdGltaXpl
ZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAgICAgICAgICAgICAgIGlmIChpc0Vs
aWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2Rl
ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhp
cyk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRU
eXBlOjpJbnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7
IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5m
byYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURh
dGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRv
JiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0
KS5wdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxp
bmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExM
SW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMo
KTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0
IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhy
ZWFkcwotICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhl
eSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQg
Ynl0ZWNvZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEg
c3RydWN0dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgotICAgICAgICAgICAg
ICAgICAgICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYKKy8vIE9PUFM6IHJlY29uY2lsZSB0
aGlzCisvLyNpZiBFTkFCTEUoSklUKQorLy8gICAgYm9vbCBpc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUgPSBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZTsKKy8vICAgIG1faXNFbGlnaWJs
ZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7CisvLyAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2Rl
IGlzIG5vdCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3
ZSBhdHRlbXB0CisvLyAgICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFuZCByZWlu
c3RhbGwgTExJbnQgY29kZSB0byBzYXZlIEpJVCBtZW1vcnkuCisvLyAgICBpZiAoT3B0aW9uczo6
dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4
ZWN1dGluZyh0aGlzKSkgeworLy8gICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVC
bG9jayA9IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKy8vICAgICAgICAgICAgaWYgKCFvcHRp
bWl6ZWRDb2RlQmxvY2stPm1fb3NyRXhpdENvdW50ZXIpIHsKKy8vICAgICAgICAgICAgICAgIGlm
IChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKKy8vICAgICAgICAgICAgICAgICAgICBt
X2ppdENvZGUgPSBudWxscHRyOworLy8gICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRy
eXBvaW50KHRoaXMpOworLy8gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKKy8vCisvLyAgICAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNl
cHRpb25IYW5kbGVycygpOyBpKyspIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4
Y2VwdGlvbkhhbmRsZXIoaSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZv
JiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKKy8vICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQo
dW5saW5rZWRIYW5kbGVyLnRhcmdldCkucHRyKCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAg
IGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0
aCgpKS5jb2RlKCkpKTsKKy8vICAgICAgICAgICAgICAgICAgICB9CisvLworLy8gICAgICAgICAg
ICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKKy8vCisvLyAgICAgICAgICAgICAgICAg
ICAgLy8gSXQncyBzYWZlIHRvIGNsZWFyIHRoZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkgYWxsIGNvbXBpbGVyIHRocmVhZHMKKy8vICAgICAgICAgICAgICAg
ICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBi
ZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKKy8vICAgICAgICAg
ICAgICAgICAgICAvLyBwYXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcg
aW50byB0aGUgdmFyaW91cyAqaW5mb3MuCisvLyAgICAgICAgICAgICAgICAgICAgcmVzZXRKSVRE
YXRhKCk7CisvLyAgICAgICAgICAgICAgICB9IGVsc2UKKy8vICAgICAgICAgICAgICAgICAgICBt
X2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IHRydWU7CisvLyAgICAgICAgICAgIH0KKy8v
ICAgICAgICB9CisvLyAgICB9CisvLworLy8jZW5kaWYKICAgICAKICAgICBpZiAoSklUQ29kZTo6
Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxp
bmVDYWNoZXMoKTsKQEAgLTE1NzksNyArMTcxMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1
bms6Ci0gICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOwor
ICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNvdW50KCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAg
ICAgICAgIGNvdW50ID0gbV9qaXRFeGVjdXRlQ291bnRlci5jb3VudCgpOwpAQCAtMzA3OSw3ICsz
MjEyLDcgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYg
RU5BQkxFKEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1
cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6
OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMTY0LDcgKzMyOTcs
NyBAQCBWYWx1ZVByb2ZpbGUqIENvZGVCbG9jazo6dHJ5R2V0VmFsdWVQcm9mCiAKICNkZWZpbmUg
Q0FTRShPcCkgXAogICAgIGNhc2UgT3A6Om9wY29kZUlEOiBcCi0gICAgICAgIHJldHVybiAmaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fcHJvZmlsZTsKKyAgICAgICAgcmV0
dXJuIGluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0YSh0aGlzKS5tX3Byb2ZpbGU7CiAKICAg
ICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVkFMVUVfUFJPRklMRShDQVNFKQogCkBAIC0zMjk1
LDEzICszNDI4LDEzIEBAIEJpbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkK
IHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGNhc2Ugb3BfbXVsOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoK
LSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9w
RGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMt
PmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzMTMsMTEgKzM0NDYsMTEgQEAgVW5hcnlBcml0
aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0aAogewogICAgIHN3aXRjaCAocGMtPm9wY29k
ZUlEKCkpIHsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BO
ZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBw
Yy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2Fz
ZSBvcF9pbmM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMp
Lm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4g
JnBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAg
cmV0dXJuIHBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAg
ICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zNDY3LDI4ICszNjAwLDE5IEBA
IHN0ZDo6b3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0
ZWNvZGVJbmRleDsKIH0KIAotaW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQz
Ml90IHRocmVzaG9sZCkKLXsKLSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9w
dGltaXplKCkpIHsKLSAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICBy
ZXR1cm4gdGhyZXNob2xkOwotICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1
cm4gdGhyZXNob2xkICogNDsKLSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1
cm4gdGhyZXNob2xkIC8gMjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIHRocmVzaG9sZDsKLX0KKy8vdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkK
Ky8veworLy8gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQodGhyZXNo
b2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsK
Ky8vfQogCi12b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBDb2RlQmxvY2s6
OmppdFNvb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQo
dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0
aGlzKTsKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCh1bmxpbmtl
ZENvZGVCbG9jaygpLT50aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29v
bigpKSwgdGhpcyk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3ZvaWQgQ29kZUJs
b2NrOjpqaXROZXh0SW52b2NhdGlvbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNl
dE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29v
bigpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQo
MCwgdGhpcyk7CiB9CiAKIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3Bv
aW50cygpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcgQEAgY2xhc3MgTWV0
YWRhdGFUYWJsZTsKIGNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9m
ZnNldExpc3Q7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29k
ZTsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFy
ZURhdGEpOwogCkBAIC0xNTgsNyArMTU5LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUq
IG1ldGFkYXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAg
ICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJz
OyB9Citwcml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1
ZSk7CitwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE3
MCw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1WYXJzOyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5r
ZWRDb2RlLT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAg
IHVuc2lnbmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1l
dGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAg
ICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENv
ZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzNCw2IEBAIHB1
YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAg
ICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlz
S25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTog
Q29uc2lkZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1
ZSBpZiBgcmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAg
IGlmIChyZWcuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJl
ZykuaXNDZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAg
ICAgewogICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9u
dW1WYXJzKTsKQEAgLTI2Niw4ICsyNTgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0
dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAv
LyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJl
LCBhbmQgb250byBKSVRDb2RlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01B
S0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5m
b3M7CiAgICAgICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CkBAIC0yODIsOSArMjc2LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3Bj
VG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7
IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lz
dGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRW
ZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERh
dGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVu
bGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEm
IGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewog
ICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkpCkBAIC0yOTMsNiArMjkxLDggQEAgcHVibGlj
OgogICAgIH0KICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVREYXRhKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9qaXREYXRhKTsgfQorCiAgICAgSklU
QWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwogICAgIEpJVE11bElDKiBh
ZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVROZWdJQyogYWRkSklUTmVn
SUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKQEAgLTMyMiwxNiArMzIyLDcgQEAgcHVibGljOgogICAg
IC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9m
IGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVj
b2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJ
VENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihtX2xvY2spOwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2Rl
TWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYg
aml0Q29kZU1hcCgpCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1f
bG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFw
OwotICAgIH0KKyAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKICAgICB2b2lk
IHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4m
Jik7CiAgICAgc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwpAQCAt
NDcyLDYgKzQ2Myw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZh
bHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQ
cm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMu
c2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRp
b25zOjp1c2VKSVQoKSk7CkBAIC01NzIsNiArNTY0LDcgQEAgcHVibGljOgogICAgIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJl
dHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0K
ICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBt
X3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKTsgfQog
ICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlu
a2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW5kZXgpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5
cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0
aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygp
IHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTYwMSw2ICs1OTQsMTIgQEAg
cHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwogICAgICAgICByZXR1
cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgfQorICAg
IFNpbXBsZUp1bXBUYWJsZSYgYmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgp
OworICAgIHZvaWQqIGJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkKKyAgICB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1faml0RGF0YSAmJiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpOworICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbC5kYXRhKCk7
CisgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTd2l0
Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNjExLDYgKzYx
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKICAgICAg
ICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OwogICAgIH0KKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KTsKICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5u
dW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0
YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTYzMywyMSArNjMzLDIwIEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgY2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0
aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y2hlY2tJZlRocmVz
aG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CiAgICAgfQogCiAgICAgdm9pZCBkb250SklUQW55dGlt
ZVNvb24oKQogICAgIHsKLSAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZp
bml0ZWx5KCk7CisgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+ZGVmZXJJbmRlZmluaXRl
bHkoKTsKICAgICB9CiAKLSAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVz
aG9sZCk7Ci0gICAgdm9pZCBqaXRBZnRlcldhcm1VcCgpOwogICAgIHZvaWQgaml0U29vbigpOwor
ICAgIHZvaWQgaml0TmV4dEludm9jYXRpb24oKTsKIAogICAgIGNvbnN0IEJhc2VsaW5lRXhlY3V0
aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgICAgICByZXR1cm4gKm1fbGxpbnRFeGVj
dXRlQ291bnRlcjsKICAgICB9CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8c3RkOjp0dXBsZTxTdHJ1
Y3R1cmVJRCwgdW5zaWduZWQ+LCBGaXhlZFZlY3RvcjxMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQ+PiBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwOwpAQCAtNzk3LDYg
Kzc5Niw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0
IHsgcmV0dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVz
dHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVh
a3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9p
bnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCkBAIC04MzgsNiArODM4LDcgQEAgcHVibGljOgog
ICAgIG11dGFibGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMg
dG8gc3RvcmUgdG8gaXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5
c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2Nh
cGFiaWxpdHlMZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNiwx
MSArOTA3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0
YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7
IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9p
bnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlS
ZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8g
YWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3Vu
bGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHBy
b3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKQEAgLTEwMDgs
NyArMTAwNSw5IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlV2F0Y2hwb2ludE1hcCBtX2xsaW50
R2V0QnlJZFdhdGNocG9pbnRNYXA7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZTsKICNp
ZiBFTkFCTEUoSklUKQorcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVREYXRhPiBtX2pp
dERhdGE7Citwcml2YXRlOgogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gVGhp
cyBpcyByZWxldmFudCB0byBub24tREZHIGNvZGUgYmxvY2tzIHRoYXQgc2VydmUgYXMgdGhlIHBy
b2ZpbGVkIGNvZGUgYmxvY2sKQEAgLTEwMjcsNyArMTAyNiw3IEBAIHByaXZhdGU6CiAKICAgICBX
cml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOwogICAgIAotICAgIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAgQmFzZWxpbmVFeGVj
dXRpb25Db3VudGVyKiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgeyBudWxscHRyIH07CiAKICAgICBC
YXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9qaXRFeGVjdXRlQ291bnRlcjsKICAgICB1aW50MzJf
dCBtX29zckV4aXRDb3VudGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQmFzZWxpbmVK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5oIgpAQCAtMzks
MjUgKzQwLDIyIEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKIAog
ICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKLSAgICAgICAgbV9t
ZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRh
dGEubV9wcm9maWxlLCBmYWxzZSk7IH0pOwotCisgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8
X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBmdW5jKCptZXRhZGF0YS5tX3Byb2ZpbGUsIGZh
bHNlKTsgfSk7CiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJTEUoVklT
SVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BJdGVy
YXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCi0gICAgICAgICAgICBmdW5jKG1ldGFk
YXRhLm1faXRlcmFibGVQcm9maWxlLCBmYWxzZSk7Ci0gICAgICAgICAgICBmdW5jKG1ldGFkYXRh
Lm1faXRlcmF0b3JQcm9maWxlLCBmYWxzZSk7Ci0gICAgICAgICAgICBmdW5jKG1ldGFkYXRhLm1f
bmV4dFByb2ZpbGUsIGZhbHNlKTsKKyAgICAgICAgICAgIGZ1bmMoKm1ldGFkYXRhLm1faXRlcmFi
bGVQcm9maWxlLCBmYWxzZSk7CisgICAgICAgICAgICBmdW5jKCptZXRhZGF0YS5tX2l0ZXJhdG9y
UHJvZmlsZSwgZmFsc2UpOworICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEubV9uZXh0UHJvZmls
ZSwgZmFsc2UpOwogICAgICAgICB9KTsKIAogICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPE9w
SXRlcmF0b3JOZXh0PihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7Ci0gICAgICAgICAgICBmdW5jKG1l
dGFkYXRhLm1fbmV4dFJlc3VsdFByb2ZpbGUsIGZhbHNlKTsKLSAgICAgICAgICAgIGZ1bmMobWV0
YWRhdGEubV9kb25lUHJvZmlsZSwgZmFsc2UpOwotICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5t
X3ZhbHVlUHJvZmlsZSwgZmFsc2UpOworICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEubV9uZXh0
UmVzdWx0UHJvZmlsZSwgZmFsc2UpOworICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEubV9kb25l
UHJvZmlsZSwgZmFsc2UpOworICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEubV92YWx1ZVByb2Zp
bGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CkBAIC0xMjYsNCArMTI0LDI0IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNo
TExJbnRDYWxsTGlua0luZm8KICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoSklUKQorQUxXQVlTX0lO
TElORSBjb25zdCBKSVRDb2RlTWFwJiBDb2RlQmxvY2s6OmppdENvZGVNYXAoKQoreworICAgIEFT
U0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVNYXA7
Cit9CisKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5l
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGlu
ZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07Cit9CisKK0FMV0FZU19JTkxJTkUgU3RyaW5nSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2Vs
aW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChq
aXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcwLDYgKzcwLDggQEAgcHVibGljOgogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlKiB3cmFwKENvZGVCbG9jayogY29kZUJsb2NrKTsKICAgICAKICAgICBzdGF0aWMg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcEFuZEFjdGl2YXRlKENvZGVCbG9jayogY29k
ZUJsb2NrKTsKKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2soKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSwgbV9jb2RlQmxv
Y2spOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291
bnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGlvbkNvdW50ZXIuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
OSw3ICsxNTksNyBAQCBib29sIEV4ZWN1dGlvbkNvdW50ZXI8Y291bnRpbmdWYXJpYW50Pjo6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJl
c2hvbGQoY29kZUJsb2NrID8gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSA6IG51bGxwdHIsIHRo
cmVzaG9sZCk7CisgICAgdGhyZXNob2xkID0gY2xpcHBlZFRocmVzaG9sZCh0aHJlc2hvbGQpOwog
ICAgIAogICAgIG1fY291bnRlciA9IHN0YXRpY19jYXN0PGludDMyX3Q+KC10aHJlc2hvbGQpOwog
ICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25D
b3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGlvbkNvdW50ZXIuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyAr
NjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7IC8v
IElmIHlvdSB1c2UgdGhpcywgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoKSBtYXkgc3Rp
bGwgcmV0dXJuIGZhbHNlLgogICAgIGJvb2wgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQo
Q29kZUJsb2NrKik7CiAgICAgYm9vbCBoYXNDcm9zc2VkVGhyZXNob2xkKCkgY29uc3QgeyByZXR1
cm4gbV9jb3VudGVyID49IDA7IH0KLSAgICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRo
cmVzaG9sZCwgQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0
aHJlc2hvbGQsIENvZGVCbG9jayogPSBudWxscHRyKTsKICAgICB2b2lkIGRlZmVySW5kZWZpbml0
ZWx5KCk7CiAgICAgZG91YmxlIGNvdW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91
YmxlPihtX3RvdGFsQ291bnQpICsgbV9jb3VudGVyOyB9CiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CkBAIC04NiwxMyArODYsOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUIHRocmVzaG9sZCkKKyAgICBzdGF0aWMgVCBjbGlw
cGVkVGhyZXNob2xkKFQgdGhyZXNob2xkKQogICAgIHsKLSAgICAgICAgaW50MzJfdCBtYXhUaHJl
c2hvbGQ7Ci0gICAgICAgIGlmIChPcHRpb25zOjpyYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3
ZWVuQ2hlY2twb2ludHMoKSAmJiBnbG9iYWxPYmplY3QpCi0gICAgICAgICAgICBtYXhUaHJlc2hv
bGQgPSBnbG9iYWxPYmplY3QtPndlYWtSYW5kb21JbnRlZ2VyKCkgJSBtYXhpbXVtRXhlY3V0aW9u
Q291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1h
eFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKTsK
KyAgICAgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0
d2VlbkNoZWNrcG9pbnRzKCk7CiAgICAgICAgIGlmICh0aHJlc2hvbGQgPiBtYXhUaHJlc2hvbGQp
CiAgICAgICAgICAgICB0aHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7CiAgICAgICAgIHJldHVybiB0
aHJlc2hvbGQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1l
dGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRNZXRhZGF0YS5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUw
LDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YQogCiBzdHJ1Y3Qg
R2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIHsKICAgICBBcnJheVByb2ZpbGUgYXJyYXlQ
cm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBhcnJh
eVByb2ZpbGUpOyB9CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0
YUFycmF5TGVuZ3RoKSA9PSAxMik7CiAKQEAgLTg4LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1v
ZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3Qg
aGl0Q291bnRGb3JMTEludENhY2hpbmc7IC8vIFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNl
IFByb3RvTG9hZCBtb2RlLgogICAgIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1v
ZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7
IH0KICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhRGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRC
eUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5zZXRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFB
cnJheUxlbmd0aCBhcnJheUxlbmd0aE1vZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4NSw2ICszODUsOCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5B
Y2Nlc3MoCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKKy8vIE9PUFM6IE1ha2Ug
dGhpcyBzdHVmZiB3b3JrIHdpdGggZGF0YSBpY3MgdG8gbm90IGFzc3VtZSBpbmxpbmUgYWNjZXNz
LgorCiB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJ
bmxpbmVBY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHRhcmdldCkKIHsK
ICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewpAQCAtNDA0LDkgKzQwNiwxMiBAQCB2
b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiB2b2lkIElubGluZUFjY2Vz
czo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiB0YXJnZXQpCiB7CiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAg
ICAgLy8gT09QUzogbWFrZSBzb21lIHZlcnNpb24gb2YgSW5saW5lQWNjZXNzIGZvciBiYXNlbGlu
ZS4gUGVyaGFwcyBtYWtlIGl0IGRhdGEgZHJpdmVuLiBPciBwZXJoYXBzIGhhdmUgdGhlIGNvZGUK
KyAgICAgICAgLy8gYmUgc2hhcmVkIHNvbWVob3cgYmV0d2VlbiBVbmxpbmtlZENvZGVCbG9ja3Mu
CisKICAgICAgICAgLy8gSWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90
IGVtaXQgbm9wIHNsZWQgKGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAvLyBUaGUgY29kZSBpcyBh
bHJlYWR5IGFuIGluZGlyZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyBy
ZXBsYWNpbmcgbV9jb2RlUHRyLgotICAgICAgICBpZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVu
dGlmaWVyKSB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpC
YXNlbGluZUpJVCAmJiBzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKICAgICAgICAg
ICAgIC8vIElmIG1fY29kZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0
TG9jYXRpb24sIHRoaXMgbWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHVi
IG9uZS4KICAgICAgICAgICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2Vk
IGRpc3BhdGNoaW5nIGNvZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJl
c2V0IHRoZSBjb2RlLgogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRh
YmxlQWRkcmVzcygpID09IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKSB7CkBAIC00MjEsNiArNDI2LDcgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2ly
ZVN0dWJBc0p1bXBJbkFjYwogICAgICAgICAgICAgICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5r
aW5nIHN0dWIgY2FsbCIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgc3R1
YkluZm8ubV9jb2RlUHRyID0gdGFyZ2V0OwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2Rl
TWV0YWRhdGEuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0
MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0VfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0
IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7CiAgICAgdWludDhfdCBzZWVuTW9kZXMgeyAwIH07Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNlZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0YWRhdGEsIHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGlj
X2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc2Vlbk1vZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1v
ZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENh
bGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MTEludENhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
ODcsNiArODcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQ
cm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJbnRDYWxsTGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsg
fQogCiBwcml2YXRlOgogICAgIHVpbnRwdHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRo
TGlua0JpdCB7IHVubGlua2VkQml0IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYxLDYgKzYxLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZ1bmMoKm1ldGFkYXRhKTsKICAg
ICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAgICBBTFdBWVNfSU5MSU5FIHNpemVf
dCBudW1FbnRyaWVzKCkKKyAgICB7CisgICAgICAgIGF1dG8qIHN0YXJ0ID0gYml0d2lzZV9jYXN0
PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdldChPcDo6b3Bjb2RlSUQpKTsKKyAgICAgICAgYXV0
byogZW5kID0gYml0d2lzZV9jYXN0PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdldEltcGwoT3A6
Om9wY29kZUlEICsgMSkpOworICAgICAgICByZXR1cm4gZW5kIC0gc3RhcnQ7CisgICAgfQorCiAg
ICAgc2l6ZV90IHNpemVJbkJ5dGVzKCk7CiAKICAgICB2b2lkIHJlZigpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJ
KHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNs
dWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1
ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogCkBAIC0yODUs
NiArMjg2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAg
ICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0
aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NU
eXBlOjpJbkJ5SWQ6CkBAIC00MzAsNiArNDMyLDIwNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAK
K3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0
dWJJbmZvKQoreworICAgIGFjY2Vzc1R5cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7
CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0YXJ0OyAvLyBPT1BTOiBkbyB3ZSBuZWVk
IGEgc3RhcnQgZm9yIGRhdGEgSUNzPworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1Yklu
Zm8uZG9uZUxvY2F0aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1
YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSk7CisgICAgY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRl
Y29kZUluZGV4KTsKKyAgICBtX2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAg
ICB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
OworICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRT
dHViSW5mby5ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGb3IgaXRl
cmF0b3JfbmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0aGUgc2NyYXRjaCByZWdpc3RlciBlaXRoZXIu
CisgICAgICAgIHVzZWRSZWdpc3RlcnMuYWRkKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2Ny
YXRjaCk7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
RGVsZXRlQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpEZWxldGVCeUlEOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVC
eUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlW
YWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkluQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgor
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisg
ICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOiAK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAg
ICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtp
bmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2Rl
LmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAg
ICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAg
ICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1
dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5k
KSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVu
bGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9k
ZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZp
bmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVy
YXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNz
VHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNl
OworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6
CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlH
UFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJl
Z2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpHZXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgorICAgICAg
ICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgcHJvdG90eXBlSXNLbm93bk9iamVjdCA9IGZhbHNlOwor
ICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAg
ICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnBy
b3RvOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFs
OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0g
ZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6Cisg
ICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5
SWQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAg
ICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVncy50aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlk
V2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2
YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlw
ZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNl
OworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVl
OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsKQor
ICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9maWxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZh
dGVCcmFuZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAg
ICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBJbnZh
bGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgICAgIHJlZ3MuYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YnJhbmQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogI2lm
IEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5
KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2lu
Y2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlU2V0LmgiCkBAIC01Niw2ICs1Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6
IGludDhfdCB7CiAgICAgR2V0QnlWYWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAg
ICBQdXRQcml2YXRlTmFtZSwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2
YXRlTmFtZSwKQEAgLTc4LDYgKzgwLDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3Qg
ewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05
OCw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRU
b0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFS
RV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayBy
ZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2Vs
ZiwKQEAgLTQ0Nyw2ICs0NTMsMTggQEAgaW5saW5lIGF1dG8gYXBwcm9wcmlhdGVHZW5lcmljR2V0
QnlJZEZ1bgogICAgIH0KIH0KIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8gewor
ICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQ7CisgICAgUHJp
dmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kIHsgUHJpdmF0ZUZpZWxkUHV0S2lu
ZDo6bm9uZSgpIH07CisgICAgRUNNQU1vZGUgZWNtYU1vZGUgeyBFQ01BTW9kZTo6c2xvcHB5KCkg
fTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgLy8gT09QUzogRG8gd2Ug
bmVlZCBzdGFydCBmb3IgZGF0YSBJQ3M/CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+IHN0YXJ0OyAvLyBUaGlzIGlzIGVpdGhlciB0aGUgc3RhcnQgb2YgdGhlIGlu
bGluZSBJQyBmb3IgKmJ5SWQgY2FjaGVzLiBvciB0aGUgbG9jYXRpb24gb2YgcGF0Y2hhYmxlIGp1
bXAgZm9yICdpbnN0YW5jZW9mJyBjYWNoZXMuCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPiBzbG93UGF0aFN0YXJ0TG9jYXRpb247Cit9OworCiAjZWxzZQogCiBjbGFz
cyBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdXBlclNhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODQsNyArODQsNyBAQCB2b2lkIHByaW50U3VwZXJTYW1wbGVyU3RhdGUoKQogICAgIGRvdWJsZSBw
ZXJjZW50YWdlID0gMTAwLjAgKiBpbiAvIChpbiArIG91dCk7CiAgICAgaWYgKHBlcmNlbnRhZ2Ug
IT0gcGVyY2VudGFnZSkKICAgICAgICAgcGVyY2VudGFnZSA9IDAuMDsKLSAgICBkYXRhTG9nKCJQ
ZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIlxu
Iik7CisgICAgZGF0YUxvZygiUGVyY2VudCB0aW1lIGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6
ICIsIHBlcmNlbnRhZ2UsICIlXG4iKTsKIH0KIAogdm9pZCBlbmFibGVTdXBlclNhbXBsZXIoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogCisjaW5jbHVkZSAiQmFz
ZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCiAj
aW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCkBAIC03
OCw2ICs3OSw4IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSYKICAg
ICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeShsb2NrZXIpOwogICAgICAgICBtX3JhcmVE
YXRhLT5tX3ByaXZhdGVCcmFuZFJlcXVpcmVtZW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
aXZhdGVCcmFuZFJlcXVpcmVtZW50OjpOZWVkZWQpOwogICAgIH0KKworICAgIG1fbGxpbnRFeGVj
dXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVz
aG9sZEZvckpJVEFmdGVyV2FybVVwKCkpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KQEAgLTMxNiw0ICszMTksMzEgQEAgaW50IFVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVK
dW1wT2ZmcwogICAgIHJldHVybiBtX291dE9mTGluZUp1bXBUYXJnZXRzLmdldChieXRlY29kZU9m
ZnNldCk7CiB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorYm9vbCBVbmxpbmtlZENvZGVCbG9jazo6
aGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIC8vIE9PUFM6IGRv
IHdoYXQgQ29kZUJsb2NrIGRvZXMgYW5kIG1ha2UgYSBoYXNoIHRhYmxlPworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBp
ZiAoaWRlbnRpZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitpbnQzMl90IFVubGlua2Vk
Q29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dp
dGNoIChkaWRPcHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToK
KyAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKKyAg
ICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKKyAg
ICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDExIEBA
CiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAi
Qnl0ZWNvZGVDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkNvZGVUeXBlLmgiCiAjaW5jbHVkZSAi
REZHRXhpdFByb2ZpbGUuaCIKKyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVk
ZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5j
bHVkZSAiSWRlbnRpZmllci5oIgpAQCAtNjIsNiArNjQsNyBAQCBjbGFzcyBVbmxpbmtlZENvZGVC
bG9jazsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOwogY2xhc3MgVW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworY2xh
c3MgQmFzZWxpbmVKSVRDb2RlOwogc3RydWN0IEV4ZWN1dGFibGVJbmZvOwogZW51bSBjbGFzcyBM
aW5rVGltZUNvbnN0YW50IDogaW50MzJfdDsKIApAQCAtMTc1LDYgKzE3OCw3IEBAIHB1YmxpYzoK
IAogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50
UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIGNvbnN0IFdy
aXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgo
KV07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFu
dEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRv
Q29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsg
cmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKQEAgLTIwNyw2
ICsyMTEsMTUgQEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1v
ZGUpOyB9CiAKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29u
c3Q7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uQXQoQnl0ZWNvZGVJbmRleCBp
bmRleCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5kZXgpLnB0cigpOyB9Cisg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
KQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVj
dGlvbnMoKS5hdCgwKS5wdHIoKTsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zRW5k
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihpbnN0cnVjdGlvbnNCZWdpbikgKyBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0cnVjdGlvbiA+PSBpbnN0cnVjdGlvbnNCZWdpbiAm
JiBpbnN0cnVjdGlvbiA8IGluc3RydWN0aW9uc0VuZCk7CisgICAgICAgIHJldHVybiBpbnN0cnVj
dGlvbiAtIGluc3RydWN0aW9uc0JlZ2luOworICAgIH0KKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlv
bnNTaXplKCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyB9CiAKICAgICB1
bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2Fs
czsgfQogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0K
QEAgLTMzNCw2ICszNDcsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tZXRhZGF0YS0+
c2l6ZUluQnl0ZXMoKTsKICAgICB9CiAKKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9y
RnV6emluZ0Vhcmx5UmV0dXJuKCkKKyAgICB7CisgICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJl
IHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCisgICAgICAg
IHJldHVybiAhaXNCdWlsdGluRnVuY3Rpb24oKTsKKyAgICB9CisKKyNpZiBBU1NFUlRfRU5BQkxF
RAorICAgIGJvb2wgaGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOworI2VuZGlmCisK
KyAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7CiAKIHByb3Rl
Y3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSosIENvZGVUeXBlLCBj
b25zdCBFeGVjdXRhYmxlSW5mbyYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+KTsKQEAg
LTM5NCw2ICs0MTgsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGV4aWNhbFNjb3BlRmVh
dHVyZXMgOiA0OwogcHVibGljOgogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOworICAgIFJl
ZlB0cjxCYXNlbGluZUpJVENvZGU+IG1fdW5saW5rZWRCYXNlbGluZUNvZGU7CiBwcml2YXRlOgog
ICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzIHsgMCB9OwogICAgIFNvdXJjZVBhcnNlTW9kZSBt
X3BhcnNlTW9kZTsKQEAgLTQxMCw2ICs0MzUsOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbnN0cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVjdGlvbnM7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzczsKIAorICAgIC8vIE9PUFM6
IGJpbmQgYSBiZXR0ZXIgcGxhY2UgdG8gc3RvcmUgdGhpcyBzdHVmZj8KKyAgICBWZWN0b3I8Qmlu
YXJ5QXJpdGhQcm9maWxlPiBtX2JpbmFyeUFyaXRoUHJvZmlsZXM7CisgICAgVmVjdG9yPFVuYXJ5
QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKIAogI2lmIEVOQUJMRShERkdfSklU
KQogICAgIERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKQEAgLTQ1NSw2ICs0ODMsMzIg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5z
dHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChj
b25zdCBJbnN0cnVjdGlvbiogcGMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGlu
ZUp1bXBPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZEJp
bmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2Jp
bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX2JpbmFyeUFyaXRoUHJvZmlsZXMu
YXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSBtX3VuYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAg
IG1fdW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChVbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGJpbmFy
eUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX2JpbmFyeUFyaXRoUHJvZmlsZXNb
aV07IH0KKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgdW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQg
aSkgeyByZXR1cm4gbV91bmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KKworICAgIEJhc2VsaW5lRXhl
Y3V0aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIHsgcmV0dXJuIG1fbGxpbnRFeGVj
dXRlQ291bnRlcjsgfQorCisgICAgRml4ZWRWZWN0b3I8VmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJv
ZmlsZXM7CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNo
TWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjIsNiArNTE2LDcgQEAg
cHJpdmF0ZToKICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRz
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZl
Y3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAKIHByb3RlY3RlZDoKICAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgJKHJl
dmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9ja0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIHB1
YmxpYzoKICAgICBib29sIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7
IHJldHVybiBtX2NvZGVCbG9jay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9
CiAgICAgYm9vbCBoYXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5o
YXNDaGVja3BvaW50cygpOyB9CiAgICAgYm9vbCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVy
biBtX2NvZGVCbG9jay0+aGFzVGFpbENhbGxzKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlB
cml0aFByb2ZpbGUoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxl
KCk7IH0KKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpIHsgcmV0dXJuIG1fY29k
ZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpOyB9CiAKICAgICAvLyBVcGRhdGluZyBVbmxp
bmtlZENvZGVCbG9jay4KICAgICB2b2lkIHNldEhhc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9j
ay0+c2V0SGFzQ2hlY2twb2ludHMoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgy
MDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxNCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFVubGlua2VkTWV0YWRhdGFUYWJsZSk7CiAgICAgfQogCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZT4KKyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
aXNGaW5hbGl6ZWQpOworICAgICAgICB1aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJC
aXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bjb2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClb
T3Bjb2RlOjpvcGNvZGVJRF07CisgICAgICAgIHJldHVybiBiYXNlVHlwZU9mZnNldCArIHNpemVv
Zih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7CisgICAg
fQorCiBwcml2YXRlOgogICAgIGVudW0gRW1wdHlUYWcgeyBFbXB0eSB9OwogCkBAIC0xMDEsNiAr
MTA5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAg
ICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNl
dDE2ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NiBAQCB0ZW1wbGF0ZTx1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHNBcmd1bWVuCiBzdHJ1Y3QgVmFs
dWVQcm9maWxlQmFzZSB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1
Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVj
a2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJh
c2UoKQpAQCAtMTE4LDggKzExNyw2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1
cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJvbSBhbnkgdGhyZWFkCi0gICAgLy8g
dGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAgU3BlY3VsYXRlZFR5cGUgY29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiAgICAgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkg
ewpAQCAtMTM0LDcgKzEzMSw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAg
CiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgRW5jb2Rl
ZEpTVmFsdWUgbV9idWNrZXRzW3RvdGFsTnVtYmVyT2ZCdWNrZXRzXTsKIAogICAgIFNwZWN1bGF0
ZWRUeXBlIG1fcHJlZGljdGlvbiB7IFNwZWNOb25lIH07CkBAIC0xNTYsNiArMTUzLDcgQEAgc3Ry
dWN0IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldAogCiBzdHJ1Y3QgVmFsdWVQcm9m
aWxlIDogcHVibGljIFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4gewogICAg
IFZhbHVlUHJvZmlsZSgpIDogVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPigp
IHsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0c1swXSk7IH0KIH07CiAKIHN0
cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxl
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU5OCw3ICsxNTk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRVbmFyeQogICAgICAgICBlbWl0VW5hcnlPcDxPcE5vdD4oZHN0LCBzcmMpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhp
cywgZHN0LCBzcmMsIHR5cGUpOworICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNy
YywgdHlwZSwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIG9wX2JpdG5vdDoKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BCaXRub3Q+
KGRzdCwgc3JjKTsKQEAgLTE2OTYsMTMgKzE2OTYsMTMgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRUeXBlTwogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEluYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0
KTsKKyAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFy
aXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdERlYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BEZWM6
OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29k
ZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY4Miw3ICs2ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQq
PgogICAgICAgICBlbWl0QmluYXJ5T3AoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMx
LCBSZWdpc3RlcklEKiBzcmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMpOworICAg
ICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcywgbV9j
b2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgICAgIHJldHVybiBk
c3Q7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw2IEBAIHZvaWQqIHBy
ZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSoKICAgICBBU1NFUlQoSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBBU1NFUlQoIWNvZGVCbG9j
ay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0Nv
bW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VPU1JFbnRyeVRv
REZHKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAi
Q29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJE
RkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSklULmgiCkBAIC0xMTksMTAgKzEyMCwxMCBAQCB2
b2lkIGhhbmRsZUV4aXRDb3VudHMoVk0mIHZtLCBDQ2FsbEhlbHBlCiAgICAgaW50MzJfdCBjbGlw
cGVkVmFsdWU7CiAgICAgc3dpdGNoIChqaXQuY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewogICAg
IGNhc2UgSklUVHlwZTo6REZHSklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBCYXNlbGluZUV4
ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxP
YmplY3QoKSwgdGFyZ2V0VmFsdWUpOworICAgICAgICBjbGlwcGVkVmFsdWUgPSBCYXNlbGluZUV4
ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQodGFyZ2V0VmFsdWUpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKLSAgICAgICAgY2xpcHBlZFZhbHVlID0g
VXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChqaXQuY29kZUJsb2Nr
KCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9
IFVwcGVyVGllckV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQodGFyZ2V0VmFsdWUp
OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMzA5LDEwICszMTAsMTUgQEAgdm9pZCByZWlmeUlubGluZWRDYWxs
RnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICAgICAgdHJ1ZUNhbGxlciA/IEFzc2VtYmx5SGVs
cGVyczo6VXNlRXhpc3RpbmdUYWdSZWdpc3RlckNvbnRlbnRzIDogQXNzZW1ibHlIZWxwZXJzOjpD
b3B5QmFzZWxpbmVDYWxsZWVTYXZlZFJlZ2lzdGVyc0Zyb21CYXNlRnJhbWUsCiAgICAgICAgICAg
ICBHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1Q0KTsKIAorICAg
ICAgICAvLyBPT1BTOiBDb25zaWRlciBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGZvciBiYXNl
bGluZSBwYi9tZXRhZGF0YSByZWdpc3RlcnMKICAgICAgICAgaWYgKGNhbGxlcklzTExJbnQpIHsK
ICAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQu
YmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3Jl
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ci0+bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNl
bGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAg
ICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2
ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVy
czo6cGJHUFIpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRh
VGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxv
Y2ssIEpJVDo6c19tZXRhZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxp
bmVKSVRDb25zdGFudFBvb2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFz
ZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw2ICs0MTAsOSBA
QCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBM
TEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlv
bi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBl
bHNlIHsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVC
bG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0
LT5iYXNlbGluZUpJVENvbnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CisKICAg
ICAgICAgY29kZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKIAogICAg
ICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzMwLDYgKzczMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFp
cihjYWxsZWVUYWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1ZmZsZURh
dGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0
YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVEYXRh
Lm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7
CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCBpICsgMSk7CkBAIC04ODksNyArODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2Fz
ZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBpbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsKICAg
ICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAg
aW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAg
Q2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ1LDYgKzc0NSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAg
IHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0
YUZvcm1hdEpTKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9j
YXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBh
c3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQu
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAgICAg
ICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSAr
IDEpOwpAQCAtODk2LDcgKzg5Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAg
ICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0lu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAg
ICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICszOTg1LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJlZ2lzdGVy
U2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBKSVRQdXRC
eVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpE
RkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNlZFJl
Z2lzdGVycywKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29k
ZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2VkUmVnaXN0
ZXJzLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzOjpwYXlsb2FkT25seShwcm9wZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQUlJlZywg
c3R1YkluZm9HUFIpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1
ZTsKIApAQCAtMTQ3NzgsNyArMTQ3NzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TG9nU2hhZG93Q2hpCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBzY29wZVJlZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9q
aXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywg
c2NvcGVSZWcsIG1faml0LmNvZGVCbG9jaygpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5s
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29w
ZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2Fs
bFNpdGVJbmRleCk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMxNyw3ICs0MzE3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpID8gcGFy
YW1zLmdwU2NyYXRjaCgwKSA6IEludmFsaWRHUFJSZWc7CiAKICAgICAgICAgICAgIGF1dG8gZ2Vu
ZXJhdG9yID0gQm94PEpJVFB1dEJ5VmFsR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAgICAgICAgICAg
ICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4s
IGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLAorICAgICAgICAgICAgICAgIGpp
dC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxT
aXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLAogICAgICAgICAgICAgICAgIHBh
cmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcs
IHN0dWJJbmZvR1BSKTsKIAogICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKQEAgLTEwMTkxLDYgKzEwMTkxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtUGFzc2VkQXJnczsgaSA8IG51
bUFsbG9jYXRlZEFyZ3M7ICsraSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
LmFyZ3MuYXBwZW5kKFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpKTsKICAg
ICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFy
Z3M7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQu
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZs
ZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKHNlbWFudGljTm9kZU9yaWdp
bik7CkBAIC0xMDM0OSwxMyArMTAzNTAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQocGFyYW1zWzEgKyBpXS5yZWNvdmVyeUZvckpTVmFs
dWUoKSk7CiAKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVt
QXJnczsKKyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2so
KSk7CiAKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5j
b2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUkluZm86
OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8t
PmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRv
IHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUklu
Zm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZy
YW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAg
ICAgICAgICAgICB9KTsKQEAgLTEwNjk4LDcgKzEwNzAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxs
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1Qw
LCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA5NzksNyArMTA5ODEsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAg
aWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRH
UFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwg
R1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVG
b3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDE3ICs0MiwyOCBAQCBjbGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qo
b3ApCiAgICAgICAgIHJldHVybiBpZiBlbXB0eT8KIAotICAgICAgICBkZWYgY29udmVydEZpZWxk
cyhwcmVmaXgsIGZpZWxkcykKKyAgICAgICAgZGVmIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMo
cHJlZml4LCBmaWVsZE5hbWVzKQorICAgICAgICAgICAgZmllbGROYW1lcy5tYXAgZG8gfGZpZWxk
TmFtZXwKKyAgICAgICAgICAgICAgICAiI3twcmVmaXh9c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsxLi5dfSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgZW5k
LmpvaW4oIlxuIikKKyAgICAgICAgZW5kCisKKyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJl
Zml4LCBmaWVsZHMsIGZpZWxkTmFtZXMpCiAgICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVs
ZCwgdHlwZXwKICAgICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAg
ICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAn
ICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZp
eH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlLCBmaWVsZE5h
bWVzKX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307IgorICAgICAgICAg
ICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAgICAgICAgICAgIGZp
ZWxkTmFtZXMucHVzaChmaWVsZE5hbWUpCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0j
e3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgogICAgICAgICAgICAgICAgIGVuZAogICAgICAg
ICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0gY29u
dmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVsZE5hbWVzID0gW10K
KyAgICAgICAgcHJlZml4ID0gIiAgICAgICAgIgorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0Rmll
bGRzKHByZWZpeCwgQGZpZWxkcywgZmllbGROYW1lcykKKyAgICAgICAgZmllbGRzID0gZmllbGRz
ICsgIlxuIiArIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQog
CiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBA
aW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk4LDgg
KzY5OCwxMyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzCiAKIHZv
aWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGds
b2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0
TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBpbmZvKTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6
OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlu
a0luZm8qIGluZm8pCit7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpy
ZWdUMik7CiAgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwg
JnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlv
biA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihj
YWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxOCw2ICsxNzE4LDcgQEAgcHVibGljOgog
ICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5n
R2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3Bh
Y2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2Fs
bCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2Rl
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5l
SklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCisKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKKyNp
bmNsdWRlICJKdW1wVGFibGUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworSklUQWRkSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUQWRkSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0
aFByb2ZpbGUpOyB9CitKSVRNdWxJQyogTWF0aElDSG9sZGVyOjphZGRKSVRNdWxJQyhCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJv
ZmlsZSk7IH0KK0pJVFN1YklDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxl
KTsgfQorSklUTmVnSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0K
Kwordm9pZCBNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKQor
eworICAgIG1fYWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2FkZElDcyk7CisgICAgbV9tdWxJQ3Mg
PSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAgICBtX25lZ0lDcyA9IFdURk1vdmUob3RoZXIu
bV9uZWdJQ3MpOworICAgIG1fc3ViSUNzID0gV1RGTW92ZShvdGhlci5tX3N1YklDcyk7Cit9CisK
K0Jhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4g
Y29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKKyAgICA6IERpcmVj
dEpJVENvZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklUKQorICAgICwgTWF0aElDSG9sZGVyKCkKK3sgfQorCitCYXNlbGluZUpJVENvZGU6On5CYXNl
bGluZUpJVENvZGUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5j
bHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKKy8vY2xhc3MgSklUQWRkSUM7CisvL2NsYXNzIEpJVE11bElDOworLy9jbGFzcyBKSVRT
dWJJQzsKKy8vY2xhc3MgSklUTmVnSUM7CitjbGFzcyBCaW5hcnlBcml0aFByb2ZpbGU7CitjbGFz
cyBVbmFyeUFyaXRoUHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwor
c3RydWN0IFNpbXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKK2NsYXNz
IE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9s
ZGVyJiBvdGhlcik7CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmls
ZSopOworICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAg
ICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTmVn
SUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CisKKyAgICAvKgorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBl
PgorICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7
IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3Nh
bWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUTXVs
SUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJ
VE11bElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3Is
IEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVROZWdJQyogYWRkTWF0aElD
KFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxl
KTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0
b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisgICAgKi8K
KworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJ
Qz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3Vi
SUM+IG1fc3ViSUNzOworfTsKKworY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKK3B1YmxpYzoKKyAg
ICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisgICAgZW51bSBjbGFzcyBUeXBlIDogdWlu
dDhfdCB7CisgICAgICAgIEdsb2JhbE9iamVjdCwKKyAgICAgICAgQ2FsbExpbmtJbmZvLAorICAg
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAgRnVuY3Rpb25EZWNsLAorICAgICAgICBG
dW5jdGlvbkV4cHIsCisgICAgfTsKKworICAgIHN0cnVjdCBWYWx1ZSB7CisgICAgICAgIC8vIE9P
UFM6IE1ha2UgdGhlIHBvaW50ZXIgcGFja2VkLgorICAgICAgICBUeXBlIHR5cGU7CisgICAgICAg
IHZvaWQqIHBheWxvYWQ7CisgICAgfTsKKworICAgIEpJVENvbnN0YW50UG9vbCgpID0gZGVmYXVs
dDsKKyAgICBKSVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAg
ICBKSVRDb25zdGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0
OworCisgICAgQ29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIp
CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXplKCk7Cisg
ICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1ZSBhdChzaXplX3QgaSkgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+
IG1fY29uc3RhbnRzOworfTsKKworCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGly
ZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVK
SVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiB3aXRoQXJpdHlDaGVjayk7CisgICAgfkJhc2VsaW5lSklUQ29kZSgpIG92ZXJyaWRlOworCisg
ICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgQmFnPENh
bGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsgLy8gT09QUzogbWFrZSBzdXJlIHdlIHZp
c2l0IHRoZXNlIHNvbWVob3cuIE9yIGFzc2VydCB3ZSBkb24ndCBoYXZlIHRvLCBzaW5jZSB0aGV5
J3JlIHZpcnR1YWwgY2FsbHMuCisgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1f
dW5saW5rZWRTdHViSW5mb3M7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3
aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXM7CisgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisgICAgSklU
Q29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklU
UGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgc2l6ZV90IEJhc2VsaW5l
SklUUGxhbjo6Y29kZVNpemUoKSBjb25zdAogCiBDb21waWxhdGlvblJlc3VsdCBCYXNlbGluZUpJ
VFBsYW46OmZpbmFsaXplKCkKIHsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2pp
dC5maW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9
IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKG1fY29kZUJsb2NrKTsKICAgICBzd2l0Y2ggKHJl
c3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CiAgICAgICAgIENPREVCTE9DS19M
T0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZh
aWxlZCIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5j
cHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxI
ZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDYgQEAgdm9pZCBDQ2FsbEhl
bHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sbwogICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2Nv
cGUpKSk7CiB9CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3Bl
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQotewot
ICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7Ci0g
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJr
ZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCBjYWxsZWUpKSk7Ci0gICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNW
YWx1ZSkpKTsKLSAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVD
VF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwotICAgIHN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKLSAgICBzdG9yZTMy
KFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0
LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkp
OwotfQotCiB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYg
dm0sIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVn
IHNjcmF0Y2gyKQogewogICAgIFNoYWRvd0NoaWNrZW4qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFk
b3dDaGlja2VuKCk7CkBAIC03Miw2ICs2MiwyOCBAQCB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJl
U2hhZG93Q2hpY2tlblBhCiAgICAgc3RvcmVQdHIoc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDFO
b25BcmdHUFIpKTsKIH0KIAorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK3Zv
aWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNo
YWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2Nr
VHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBzdG9y
ZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOworICAgIHN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgY2FsbGVlKSkpOworICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFj
a2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7
CisgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKKyAgICBzdG9yZVB0cihjb2RlQmxv
Y2ssIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6
UGFja2V0LCBjb2RlQmxvY2spKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJ
bmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKK30KKwordm9pZCBDQ2FsbEhlbHBl
cnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFs
dWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxT
aXRlSW5kZXgpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBz
Y29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQorewor
ICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdz
LCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwogdm9pZCBDQ2FsbEhlbHBl
cnM6OmVtaXRKSVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRh
Zz4gd2hlcmUsIFNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPiBlbWl0Q29kZSwgY29u
c3QgY2hhciogZGVzY3JpcHRpb24pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMjgyMDE2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtODQwLDcgKzg0MCwxNCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2Ugb3BlcmF0aW9ucyBj
bG9iYmVyIGFsbCB2b2xhdGlsZSByZWdpc3RlcnMuIFRoZXkgYXNzdW1lIHRoYXQgdGhlcmUgaXMg
cm9vbSBvbiB0aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sgdG8gbWFyc2hhbGwgY2FsbCBhcmd1bWVu
dHMuCiAgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoR1BSUmVnIHNoYWRv
d1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NvcGUpOwotICAgIHZvaWQgbG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CisKK3ByaXZh
dGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgdm9pZCBsb2dT
aGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJl
Z3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxT
aXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CitwdWJsaWM6CisgICAgdm9pZCBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywg
R1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4KTsKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBj
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisKICAgICAvLyBMZWF2ZXMg
YmVoaW5kIGEgcG9pbnRlciB0byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFk
b3dQYWNrZXQuCiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVn
IHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVEYXRhLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3
LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1
cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CisgICAgc2V0dXBD
YWxsZWVTYXZlUmVnaXN0ZXJzKGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30K
Kwordm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMpCit7CiAgICAg
UmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycyB7IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNh
dmVSZWdpc3RlcnMoKSB9OwotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3Rl
clNhdmVMb2NhdGlvbnMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5zaXplKCk7ICsr
aSkgewogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5IHsgcmVnaXN0ZXJTYXZlTG9jYXRp
b25zLT5hdChpKSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVT
aHVmZmxlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Mywx
MSArNDMsMTMgQEAgcHVibGljOgogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOwogICAg
IHVuc2lnbmVkIG51bUxvY2FscyB7IFVJTlRfTUFYIH07CiAgICAgdW5zaWduZWQgbnVtUGFzc2Vk
QXJncyB7IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycyB7IFVJTlRfTUFY
IH07IC8vIE9uIG91ciBtYWNoaW5lIGZyYW1lLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVn
aXN0ZXJNYXA8VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOwogICAgIEdQUlJlZyBudW1iZXJUYWdS
ZWdpc3RlciB7IEludmFsaWRHUFJSZWcgfTsKIAogICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVn
aXN0ZXJzKENvZGVCbG9jayopOworICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0Kik7CiAjZW5kaWYKICAgICBWYWx1ZVJlY292ZXJ5IGNh
bGxlZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVyLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEzICszOCwx
MyBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhCiAgICAgOiBtX2pp
dChqaXQpCiAgICAgLCBtX29sZEZyYW1lKGRhdGEubnVtTG9jYWxzICsgQ2FsbGVyRnJhbWVBbmRQ
Qzo6c2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQogICAgICwgbV9uZXdGcmFtZShkYXRhLmFyZ3Mu
c2l6ZSgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCi0gICAg
LCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMK
LSAgICAgICAgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoaml0LmNvZGVCbG9jaygp
LT5udW1QYXJhbWV0ZXJzKCkpKQorICAgICwgbV9hbGlnbmVkT2xkRnJhbWVTaXplKENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1l
KGRhdGEubnVtUGFyYW1ldGVycykpCiAgICAgLCBtX2FsaWduZWROZXdGcmFtZVNpemUoQ2FsbEZy
YW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMKICAgICAgICAgKyByb3VuZEFyZ3VtZW50Q291bnRU
b0FsaWduRnJhbWUoZGF0YS5hcmdzLnNpemUoKSkpCiAgICAgLCBtX2ZyYW1lRGVsdGEobV9hbGln
bmVkTmV3RnJhbWVTaXplIC0gbV9hbGlnbmVkT2xkRnJhbWVTaXplKQogICAgICwgbV9sb2NrZWRS
ZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpKQogICAgICwgbV9udW1QYXNzZWRB
cmdzKGRhdGEubnVtUGFzc2VkQXJncykKKyAgICAsIG1fbnVtUGFyYW1ldGVycyhkYXRhLm51bVBh
cmFtZXRlcnMpCiB7CiAgICAgLy8gV2UgYXJlIGFsbG93ZWQgYWxsIHRoZSB1c3VhbCByZWdpc3Rl
cnMuLi4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsg
aS0tOyApCkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFy
ZUZvclRhaWxDYQogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9m
ZnNldCksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhcmd1bWVu
dENvdW50T0sgPQogICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dP
ckVxdWFsLCBtX25ld0ZyYW1lQmFzZSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpOworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX251bVBhcmFtZXRlcnMpKTsKICAgICBt
X2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50UmVn
aXN0ZXJzKCkgLSAxICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpLCBtX25ld0Zy
YW1lQmFzZSk7CiAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigt
c3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5t
dWwzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBtX25l
d0ZyYW1lQmFzZSwgbV9uZXdGcmFtZUJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDQsNiArMTA0LDcgQEAgcHVibGljOgogICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBk
YXRhOwogICAgICAgICBkYXRhLm51bUxvY2FscyA9IG51bUxvY2FscygpOwogICAgICAgICBkYXRh
Lm51bVBhc3NlZEFyZ3MgPSBtX251bVBhc3NlZEFyZ3M7CisgICAgICAgIGRhdGEubnVtUGFyYW1l
dGVycyA9IG1fbnVtUGFyYW1ldGVyczsKICAgICAgICAgZGF0YS5jYWxsZWUgPSBnZXROZXcoVmly
dHVhbFJlZ2lzdGVyIHsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIH0pLT5yZWNvdmVyeSgpOwogICAg
ICAgICBkYXRhLmFyZ3MucmVzaXplKGFyZ0NvdW50KCkpOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFyZ0NvdW50KCk7ICsraSkKQEAgLTc5OCw2ICs3OTksNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgcGVyZm9ybVNhZmVXcml0ZXMoKTsKICAgICAKICAgICB1bnNpZ25lZCBtX251bVBh
c3NlZEFyZ3MgeyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG1fbnVtUGFyYW1ldGVycyB7IFVJ
TlRfTUFYIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BCiB9CiAKIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkK
LSAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQorICAgIDogSlNJbnRlcmZhY2VK
SVQoJnZtLCBudWxscHRyKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKICAg
ICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
IDogMCkKICAgICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtKQpAQCAtNzcsNiArNzcs
OSBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX3No
b3VsZEVtaXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKKyAgICBtX2dsb2JhbE9iamVjdENvbnN0
YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2Jq
ZWN0KTsKKyAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrID0gY29kZUJsb2NrOworICAgIG1fdW5saW5r
ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiB9CiAKIEpJVDo6
fkpJVCgpCkBAIC05MCw4ICs5Myw4IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25D
aGVjaygpCiAgICAgICAgIHJldHVybjsKIAogICAgIEp1bXBMaXN0IHNraXBPcHRpbWl6ZTsKLSAg
ICAKLSAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZElt
bTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWJzb2x1
dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwor
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7
CisgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0z
MihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFkZHJlc3Mo
cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIEFT
U0VSVCghbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKIAogICAgIGNvcHlMTEludEJhc2VsaW5l
Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTExMywxNSArMTE2LDIxIEBAIHZvaWQgSklUOjpl
bWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCoKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5v
dEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoR1BS
UmVnIHBvaW50ZXJUb1NldCkKK3ZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQ
UlJlZyBwb2ludGVyVG9TZXQpCiB7CisgICAgLy8gT09QUzogVGFrZSBhIGJvb2xlYW4gb3Igc29t
ZXRoaW5nIHNheWluZyBpZiB3ZSBjYW4gYmUgbnVsbC4KKyAgICBhdXRvIG9rID0gYnJhbmNoVGVz
dFB0cihaZXJvLCBwb2ludGVyVG9TZXQpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1
YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBvay5saW5rKHRoaXMpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUp
Cit2b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUs
IEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIg
fHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+dmFyUmVhZE9ubHlXYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRl
KCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBpZiAocmVzb2x2ZVR5cGUg
PT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpIHsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVj
dCwgbV92YXJSZWFkT25seVdhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6
b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKQEAgLTEyOSw3ICsxMzgs
NyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICAgICBpZiAoIUFTU0VS
VF9FTkFCTEVEKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBKdW1wIG9rID0gYnJhbmNoUHRyKEVx
dWFsLCByZWdUMCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGJyZWFrcG9pbnQoKTsKICAg
ICBvay5saW5rKHRoaXMpOwpAQCAtMTgxLDIxICsxOTAsNDEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
Q2FzZUNhbGwoY29uc3QgSW5zdHJ1YwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3Zv
aWQgSklUOjplbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZSk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEpT
RnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJlc3VsdCk7CisgICAg
YXV0byBoYXNFeGVjdXRhYmxlID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHQsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgbG9hZFB0
cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkg
LSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHJlc3VsdCk7CisgICAgaGFzRXhlY3V0YWJsZS5s
aW5rKHRoaXMpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkp
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zm
c2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSksIHJlc3VsdCk7CisgICAgZWxzZQorICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29k
ZUJsb2NrRm9yQ2FsbCgpKSwgcmVzdWx0KTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQs
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6Om9mZnNldE9mQ29kZUJsb2NrKCkpLCByZXN1bHQp
OworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZXN1bHQsIENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKICAg
ICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAi
LCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1f
cHJvZmlsZWRDb2RlQmxvY2ssICJcbiIpOwogICAgIAogICAgIGppdEFzc2VydFRhZ3NJblBsYWNl
KCk7CiAgICAgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsKICAgICAKLSAgICBhdXRvJiBp
bnN0cnVjdGlvbnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Ci0gICAgdW5zaWduZWQg
aW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7Cisg
ICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCk7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwog
Ci0gICAgVk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgQnl0ZWNvZGVJbmRleCBzdGFy
dEJ5dGVjb2RlSW5kZXgoMCk7CisKKyAgICAvLyBPT1BTOiBNYXliZSBvbmx5IGRvIHRoaXMgaWYg
d2UgZGlzYWJsZSBzaGFyaW5nIHNvbWVob3c/CisgICAgLyoKKyAgICBWTSYgdm0gPSBtX3VubGlu
a2VkQ29kZUJsb2NrLT52bSgpOwogICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgg
JiYgKG1fY29kZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJsb2NrPih2bSkgfHwgbV9jb2Rl
QmxvY2stPmluaGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtKSkpIHsKICAgICAgICAg
Ly8gV2UgY2FuIG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBleGVjdXRlIFBy
b2dyYW1Db2RlQmxvY2sncyBleGFjdGx5IG9uY2UuCiAgICAgICAgIC8vIFRoaXMgb3B0aW1pemF0
aW9uIHdvdWxkIGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRoZSBMTEludCBkZXRlcm1pbmVz
IGl0IHdhbnRzIHRvCkBAIC0yMzYsNiArMjY1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAgICovCiAKICAg
ICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CiAgICAgZm9yIChtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0
cnVjdGlvbkNvdW50OyApIHsKQEAgLTI3OCw4ICszMDgsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFj
ZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpD
b250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0
eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9n
TG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwg
IiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTUyNyw3ICs1NTcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1f
Ynl0ZWNvZGVJbmRleDsKIAotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCku
cHRyKCk7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBt
X3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0
cigpOwogICAgICAgICAKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJCYXNlbGluZSBKSVQgZW1pdHRpbmcgc2xvdyBjb2RlIGZvciAiLCBt
X2J5dGVjb2RlSW5kZXgsICIgYXQgb2Zmc2V0ICIsIChsb25nKWRlYnVnT2Zmc2V0KCkpOwpAQCAt
NTQ1LDggKzU3NSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAg
ICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkp
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9j
azsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7Cisg
ICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4o
KS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVj
b2RlT2Zmc2V0LCAiXSBTTE9XICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3
UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0KQEAgLTY3NCw1NSArNzA0LDU2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpCiAjZW5kaWYKIH0KIAordm9pZCBKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRh
QW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCkKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHNfbWV0YWRhdGFHUFIpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSks
IHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6
b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKK30KKwordm9pZCBK
SVQ6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKQoreworICAgIEJhc2U6OmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6Q2FwYWJpbGl0
eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOworICAgIC8vIE9P
UFM6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGRvbmUgb24gdW5saW5rZWQgY29kZSBibG9jaz8KKyAg
ICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmNhcGFi
aWxpdHlMZXZlbCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIERGRzo6Q2Fubm90
Q29tcGlsZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZToK
ICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5CZU9wdGlt
aXplZCA9IHRydWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwog
ICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChtX2NvZGVCbG9jay0+Y29kZVR5cGUo
KSkgewotICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICBjYXNlIE1vZHVsZUNvZGU6Ci0gICAgY2Fz
ZSBFdmFsQ29kZToKLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
ID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAgICAg
ICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0
ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCi0gICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRo
YXQgb2JzZXJ2YXRpb24uCi0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5s
aW5lZCAmPSBjYW5JbmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbihtX2Nv
ZGVCbG9jayk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICAgIGlmIChtX2NvZGVCbG9jay0+
bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX2NvZGVCbG9jay0+bnVtYmVy
T2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgewotICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAobV9jb2Rl
QmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBt
X2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IEZp
eGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
d2l0Y2hKdW1wVGFibGVzKCkpOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+
ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVj
dG9yPFN0cmluZ0p1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGVzKCkpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJl
ck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAgICAgaWYgKG1fdW5s
aW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAg
ICAgICAgICBtX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+
KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkp
OworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
cyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CiAgICAgfQogCi0gICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkp
KSkKLSAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4o
bV9jb2RlQmxvY2spOworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHko
KSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxl
QmFzZWxpbmVGb3JQcm9maWxlcigpKSkpIHsKKyAgICAgICAgLy8gT09QUzogYnVpbGQgYSBkaXNh
c3NlbWJsZXIgb2ZmIHVubGlua2VkIGNvZGUgYmxvY2sKKyAgICAgICAgbV9kaXNhc3NlbWJsZXIg
PSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9wcm9maWxlZENvZGVCbG9jayk7CisgICAg
fQogICAgIGlmIChVTkxJS0VMWShtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpKSB7CisgICAg
ICAgIC8vIE9PUFM6IGJ1aWxkIHByb2ZpbGVyIGRpc2Fzc2VtYmxlciBvZmYgdW5saW5rZWQgY29k
ZSBibG9jawogICAgICAgICBtX2NvbXBpbGF0aW9uID0gYWRvcHRSZWYoCiAgICAgICAgICAgICBu
ZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKAotICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0
ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fY29kZUJsb2NrKSwKKyAgICAgICAg
ICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvciht
X3Byb2ZpbGVkQ29kZUJsb2NrKSwKICAgICAgICAgICAgICAgICBQcm9maWxlcjo6QmFzZWxpbmUp
KTsKLSAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOworICAgICAgICBtX2NvbXBpbGF0aW9u
LT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpKTsK
QEAgLTc0MiwxMSArNzczLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW4KICAgICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAg
IGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5j
dGlvbkNvZGUpCisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSgpOwog
CiAgICAgTGFiZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAotICAgIGludCBmcmFtZVRvcE9mZnNldCA9
IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwor
ICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2Vk
Q29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXpl
ID0gLWZyYW1lVG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVUb3BPZmZz
ZXQpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwogICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZs
b3c7CkBAIC03NTcsMTYgKzc4OSwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluCiAgICAgbW92ZShyZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzKCk7
CisgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRNYXRlcmlhbGl6ZVRhZ0No
ZWNrUmVnaXN0ZXJzKCk7CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBv
b2xSZWdpc3RlcnMoKTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5j
dGlvbkNvZGUpIHsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBG
dW5jdGlvbkNvZGUpIHsKICAgICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyAr
K2FyZ3VtZW50KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpID4gMSkpIHsKKyAgICAgICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDIpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVBy
b2ZpbGVzKCkgKyBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+OjpvZmZzZXRPZlN0b3JhZ2UoKSks
IHJlZ1QyKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3Vt
ZW50IDwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7
CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdh
bnQgdG8gcHV0IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCiAgICAgICAgICAgICAgICAg
Ly8ga2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8g
cmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2st
PmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCisgICAgICAgICAgICAgICAgaWYgKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxsRnJh
bWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC03NzcsMTIgKzgx
MywxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAg
ICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpKTsKICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rl
ciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1
bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSwg
cmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdzLCBBZGRy
ZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpICsgVmFsdWVQcm9maWxl
OjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2RlQmxvY2st
PmppdFR5cGUoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXplTWFya2Vy
KSkKICAgICAgICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92ZSgqc2l6
ZU1hcmtlciksICp0aGlzKTsKQEAgLTc5OSwyNCArODM1LDI3IEBAIHZvaWQgSklUOjpjb21waWxl
QW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUlu
ZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNhbGxPcGVyYXRp
b25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3Zl
cmZsb3dFcnJvciwgbV9jb2RlQmxvY2spOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb25X
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZs
b3dFcnJvciwgcmVnVDApOwogCiAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGlz
IDEsIHdlIG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCi0gICAgYm9vbCByZXF1aXJlc0FyaXR5
Rml4dXAgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7Ci0gICAgaWYgKG1fY29k
ZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXAp
IHsKKyAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSAhPSAxOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKICAgICAgICAgbV9h
cml0eUNoZWNrID0gbGFiZWwoKTsKLSAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgJm1f
Y29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7CisKICAgICAgICAgZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJs
b2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICBlbWl0UHV0Q29kZUJsb2Nr
VG9GcmFtZUluUHJvbG9ndWUocmVnVDApOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDAp
LCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVk
KCkpKTsKIAogICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QxKTsKLSAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKS5s
aW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CisgICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDEsIFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkp
KS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAKICAgICAgICAgbV9ieXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleCgwKTsKIAogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQz
Ml90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlv
bihtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlD
aGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
Q2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0
cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFy
aXR5Q2hlY2ssIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJyYW5j
aFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwpA
QCAtODM5LDcgKzg3OCw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6
aW4KICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKICAgICBt
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKLSAgICBtX2xpbmtCdWZmZXIg
PSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fY29k
ZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CisgICAg
bV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVy
KCp0aGlzLCBtX3VubGlua2VkQ29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGlu
ZUpJVCwgZWZmb3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04NTgsOCArODk3LDggQEAgdm9p
ZCBKSVQ6OmxpbmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAgICAgIGNh
c2UgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpD
aGFyYWN0ZXI6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3Jk
LmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB1
bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewogICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIG9mZnNldCA9IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzW2pdOwpA
QCAtODcxLDggKzkxMCw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2UgU3dpdGNoUmVjb3JkOjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5s
aW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAgICAgICAg
IGF1dG8gY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+
KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAg
ICAgICAgIGZvciAoYXV0byYgbG9jYXRpb24gOiB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUu
dmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsb2NhdGlvbi5t
X2JyYW5jaE9mZnNldDsKQEAgLTkwNiwzMiArOTQ1LDM1IEBAIHZvaWQgSklUOjpsaW5rKCkKICAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIHJlY29yZC5jYWxsZWUpOwog
ICAgIH0KIAotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHMsIHBhdGNoQnVmZmVy
KTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIpOwot
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIp
OwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAg
ICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1faW5CeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyht
X2luc3RhbmNlT2ZzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9w
cml2YXRlQnJhbmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOworICAgIGF1dG8gZmluYWxpemVJQ3Mg
PSBbJl0gKGF1dG8mIGdlbmVyYXRvcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5l
cmF0b3JzKSB7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsK
KyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1fZG9uZSk7CisgICAgICAg
ICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zbG93UGF0aEJl
Z2luKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzKTsK
KyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlk
c1dpdGhUaGlzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX3B1dEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeUlkcyk7CisgICAgZmluYWxp
emVJQ3MobV9kZWxCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeUlkcyk7CisgICAgZmlu
YWxpemVJQ3MobV9pbkJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9mcyk7Cisg
ICAgZmluYWxpemVJQ3MobV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7CiAKICAgICBmb3IgKGF1dG8m
IGNvbXBpbGF0aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewotICAgICAgICBDYWxs
TGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAgICAgICAg
aW5mby5zZXRDb2RlTG9jYXRpb25zKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCi0gICAg
ICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0
aW9uSW5mby5kb25lTG9jYXRpb24pKTsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIGlu
Zm8gPSAqY29tcGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBpbmZv
LmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
Y29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbik7CiAgICAgfQogCi0gICAgewotICAgICAgICBK
SVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyAr
K2J5dGVjb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZz
ZXRdLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50
cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAgICB9Ci0gICAgICAg
IG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCkp
OworICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOworICAgIGZvciAodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUo
KTsgKytieXRlY29kZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZz
ZXRdLmlzU2V0KCkpCisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNv
ZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0
clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAgICAgaWYgKFVOTElL
RUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDI2ICs5ODIsMzcgQEAg
dm9pZCBKSVQ6OmxpbmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShtX2NvbXBpbGF0aW9u
KSkgeworICAgICAgICAvLyBPT1BTOiBtYWtlIGJ5dGVjb2RlIHByb2ZpbGVyIGtub3cgYWJvdXQg
dW5saW5rZWQgQ0I/CiAgICAgICAgIGlmIChPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9y
UHJvZmlsZXIoKSkKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVy
KG1fY29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsKLSAgICAgICAgbV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2NvZGVCbG9jaywgKm1fY29tcGlsYXRp
b24pOworICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9u
KG1fcHJvZmlsZWRDb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKICAgICB9CiAKICAgICBpZiAo
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCiAgICAgICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3Zl
KG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpOwogICAgIAorICAgIC8v
IE9PUFM6IE1ha2UgYSB2ZXJzaW9uIG9mIENvZGVCbG9ja1dpdGhKSVRUeXBlIHRoYXQga25vd3Mg
YWJvdXQgVW5saW5rZWRDb2RlQmxvY2suCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1
bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywK
LSAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tX
aXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwor
ICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dp
dGhKSVRUeXBlKG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0
YSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0
aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fYXJp
dHlDaGVjayk7Ci0gICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJl
c3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSk7CisgICAgbV9qaXRD
b2RlID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVj
aykpOworCisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBXVEZNb3ZlKG1fdW5saW5r
ZWRDYWxscyk7CisgICAgbV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9zID0gV1RGTW92ZSht
X2V2YWxDYWxsTGlua0luZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3Mg
PSBXVEZNb3ZlKG1fdW5saW5rZWRTdHViSW5mb3MpOworICAgIG1faml0Q29kZS0+bV9zd2l0Y2hK
dW1wVGFibGVzID0gV1RGTW92ZShtX3N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0Q29kZS0+
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMpOworICAgIG1faml0Q29kZS0+bV9qaXRDb2RlTWFwID0gaml0Q29kZU1hcEJ1aWxkZXIuZmlu
YWxpemUoKTsKKyAgICBtX2ppdENvZGUtPmFkb3B0TWF0aElDcyhtX21hdGhJQ3MpOworICAgIG1f
aml0Q29kZS0+bV9jb25zdGFudFBvb2wgPSBXVEZNb3ZlKG1fY29uc3RhbnRQb29sKTsKIAogICAg
IGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0
ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1
dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1l
bW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5l
cmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2VkQ29kZUJsb2NrLCBy
ZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5l
eGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQogCi1Db21waWxhdGlv
blJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJ
VDo6ZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTk2OCwyNSArMTAyMSwy
MSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyCiAKICAgICBtX2xp
bmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCi0gICAgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAg
ICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01v
ZGU6OkxhdGVTaHJpbmspOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9j
b2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7Ci0gICAgICAgIEhh
bmRsZXJJbmZvJiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0g
ICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgotICAgICAgICBoYW5k
bGVyLm5hdGl2ZUNvZGUgPSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQoQnl0ZWNvZGVJ
bmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7
Ci0gICAgfQorICAgIC8vIE9PUFM6IERvbid0IHRoaW5rIHRoaXMgc2hyaW5rIGlzIHJlYWxseSBk
b2luZyBhbnl0aGluZyBhbnltb3JlLiBWZXJpZnkuCisgICAgLy97CisgICAgLy8gICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAvLyAgICBtX2Nv
ZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVT
aHJpbmspOworICAgIC8vfQogCisgICAgLy8gT09QUzogbV9wY1RvQ29kZU9yaWdpbk1hcCBzaG91
bGQgbGl2ZSBvbiBCYXNlbGluZUpJVENvZGUgZm9yIGJhc2VsaW5lIGNvZGVibG9ja3MuCiAgICAg
aWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29k
ZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKKyAgICAgICAgbV9wcm9m
aWxlZENvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoV1RGTW92ZShtX3BjVG9Db2RlT3Jp
Z2luTWFwKSk7CiAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9y
QmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2ppdENvZGUt
PnNpemUoKSkgLwotICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnNTaXplKCkpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKIAotICAgIG1fY29kZUJsb2NrLT5zZXRK
SVRDb2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBjb2RlQmxvY2stPnNldHVw
V2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAog
ICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CkBAIC05OTgsMTEgKzEwNDcsMTEg
QEAgc2l6ZV90IEpJVDo6Y29kZVNpemUoKSBjb25zdAogICAgIHJldHVybiBtX2xpbmtCdWZmZXIt
PnNpemUoKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSVRD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVD
b21waWxlKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiB7CiAgICAgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgY29t
cGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhlZmZvcnQpOwotICAgIHJldHVybiBmaW5hbGl6
ZU9uTWFpblRocmVhZCgpOworICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZChjb2RlQmxv
Y2spOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCkBA
IC0xMDQyLDE4ICsxMDkxLDI4IEBAIHZvaWQgSklUOjpkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJl
Zm9yZUMKICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVz
KCptX3ZtLCAiUHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24uIl9zKTsKIH0KIAotdW5zaWdu
ZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNp
Z25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJs
b2NrKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxv
Y2FscygpKSkpOwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdpc3RlckNvdW50Rm9yRnJhbWVQ
b2ludGVyT2Zmc2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAotaW50IEpJVDo6c3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lz
dGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGZyYW1lUmVn
aXN0ZXJDb3VudEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCitpbnQg
SklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3RlckNvdW50
Rm9yKGNvZGVCbG9jaykgLSAxKS5vZmZzZXQoKTsKIH0KIAoraW50IEpJVDo6c3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBzdGFja1BvaW50
ZXJPZmZzZXRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKwogSGFzaE1h
cDxDU3RyaW5nLCBTZWNvbmRzPiBKSVQ6OmNvbXBpbGVUaW1lU3RhdHMoKQogewogICAgIEhhc2hN
YXA8Q1N0cmluZywgU2Vjb25kcz4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAKICNkZWZpbmUgQVNTRVJUX0pJVF9PRkZT
RVQoYWN0dWFsLCBleHBlY3RlZCkgQVNTRVJUX1dJVEhfTUVTU0FHRShhY3R1YWwgPT0gZXhwZWN0
ZWQsICJKSVQgT2Zmc2V0IFwiJXNcIiBzaG91bGQgYmUgJWQsIG5vdCAlZC5cbiIsICNleHBlY3Rl
ZCwgc3RhdGljX2Nhc3Q8aW50PihleHBlY3RlZCksIHN0YXRpY19jYXN0PGludD4oYWN0dWFsKSk7
CiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIK
ICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJKSVREaXNhc3NlbWJsZXIu
aCIKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJK
SVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKKyNp
bmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2lu
Y2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CkBAIC0x
NDksMTQgKzE1MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgc3RydWN0IENh
bGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1Bh
dGhTdGFydDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVMb2NhdGlvbjsKLSAg
ICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CisgICAgICAgIFVubGlua2VkQ2FsbExp
bmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKICAgICB9OwogCiAgICAgdm9pZCBjdGlQYXRj
aENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKLSAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJ
R05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgIGNsYXNzIEpJVF9DTEFT
U19BTElHTk1FTlQgSklUIDogcHVibGljIEpTSW50ZXJmYWNlSklUIHsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxs
OwogICAgICAgICBmcmllbmQgY2xhc3MgSklUVGh1bmtzOwpAQCAtMTcxLDYgKzE3Myw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQs
IGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCiAgICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7CiAK
KyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgcHVibGljOgogICAg
ICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NS
RW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7
CkBAIC0xNzgsMjggKzE4MiwzMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVk0mIHZtKCkg
eyByZXR1cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CiAKICAgICAgICAgdm9pZCBjb21waWxl
QW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKLSAgICAgICAg
Q29tcGlsYXRpb25SZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICAgICAgQ29tcGls
YXRpb25SZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKik7CiAgICAgICAgIHNp
emVfdCBjb2RlU2l6ZSgpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgZG9NYWluVGhyZWFkUHJlcGFy
YXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgQ29tcGlsYXRp
b25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29k
ZUluZGV4KDApKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxv
Y2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOworICAgICAgICAgICAg
cmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUo
Y29kZUJsb2NrLCBlZmZvcnQpOwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogICAgICAgICBzdGF0
aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOworICAgICAgICBz
dGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogICAg
ICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsKIAogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBj
b21waWxlVGltZVN0YXRzKCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTZWNv
bmRzIHRvdGFsQ29tcGlsZVRpbWUoKTsKIAorICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzX21ldGFkYXRhR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUjsKKyAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19jb25zdGFudHNHUFIgPSBMTEludDo6UmVn
aXN0ZXJzOjpwYkdQUjsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVNYWluUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAg
ICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpOwogICAgICAgICB2b2lkIGxpbmso
KTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRp
b25FZmZvcnQpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShDb2Rl
QmxvY2sqLCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBv
dXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENh
bGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
KQpAQCAtMjIzLDYgKzIzMiwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlm
CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxv
YWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBs
b2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBs
b2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7
CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNv
ZGU+CisgICAgICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUsIGNvbnN0IEJ5dGVj
b2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgorICAgICAgICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0ZWNv
ZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CisgICAgICAgIHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgIHB1YmxpYzoKKyAgICAgICAg
dm9pZCBsb2FkQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BSUmVnKTsKKyAgICBw
cml2YXRlOgorICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKKyAgICAgICAg
dm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworCisg
ICAgICAgIHZvaWQgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1
bHQgPSByZWdUMCk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBUb0hh
bmRsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChq
dW1wVG9IYW5kbGVyKTsKQEAgLTI1OCwxNiArMjkzLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2Nh
bGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAg
ICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bj
b2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4g
Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2
b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEID09
IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MK
ICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBP
cDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwg
dm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAg
ICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5r
SW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxl
VGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7
CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yODcsMTQgKzMyMiwxNSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxS
ZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsK
ICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEdQUlJl
ZyBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHBy
b2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAg
ICAvLyBzY3JhdGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1l
dGFkYXRhJiwgR1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAg
ICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsK
KyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNW
YWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25z
dCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRh
dGEmLCBKU1ZhbHVlUmVncyk7CkBAIC0zMDcsNiArMzQzLDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQg
Y2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKICAgICAgICAg
dm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBS
ZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwg
UmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBC
eXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0
Y2hHUFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9k
ZSBlY21hTW9kZShPcCk7CkBAIC01OTIsNyArNjMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjI2
LDE0ICs2NjUsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hp
ZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUpOwotICAgICAgICB2b2lkIGVtaXRIYXNQcml2
YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKKyAgICAgICAgdm9pZCBl
bWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJh
c2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZv
aWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZv
aWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwot
ICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlKTsKKyAgICAgICAg
dm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywg
R1BSUmVnKTsKKyAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwg
R1BSUmVnIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKICAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVy
ZVNsb3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02NDUsNyArNjg0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5
V3JpdGUoV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJS
ZWcgcG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50
KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJs
ZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiog
YWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kiop
OwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCop
OwpAQCAtNjU0LDYgKzY5Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1p
dFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVy
KTsKIAorICAgICAgICBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAg
IEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJv
b2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBp
c09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY5NSwyNiArNzM1LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBH
bG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVU
eXBlID09IE1vZHVsZVZhcik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9N
X1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVU
eXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xB
UkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIq
IHRodW5rTmFtZSk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2Vk
Rm9yT3BSZXNvbHZlU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIE1vZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVt
aXQgaW5saW5lIHRoYW4gdXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1
cmVWYXIgYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Nj
b3BlLgotICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJl
VmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBE
RUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2Nv
cGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09M
VkVfVFlQRShERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVf
UkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiwgc3Rk
OjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BS
ZXNvbHZlU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBj
aGFyKiB0aHVua05hbWUpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1RydXRoeUdl
bmVyYXRvcihWTSYpOwpAQCAtNzU5LDEwICs3ODEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tP
bkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCk7CiAgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZXN1bHQoQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7Ci0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxl
KE1ldGFkYXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotICAg
ICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoTWV0YWRhdGEmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0
ZWNvZGU+CisgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQpOwogICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0
aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5j
dGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bD4KQEAgLTgyMCwyMCArODQyLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRh
cmdldC5vZmZzZXQpKTsKICAgICAgICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1l
dGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlw
ZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxP
cGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgT3BlcmF0aW9uVHlw
ZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgT3Bl
cmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJn
cykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4o
YXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uLCByZXN1bHQp
OworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICAg
ICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1l
IE1ldGFkYXRhLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGVyYXRpb25UeXBlLCB0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAg
ICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVz
dWx0LCB2b2lkPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1l
dGFkYXRhLCBBZGRyZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBh
cmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5
dGVjb2RlLCBBZGRyZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBh
cmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50c0ZvckluZGlyZWN0Q2Fs
bDxPcGVyYXRpb25UeXBlPih0YXJnZXQsIGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0
YWRhdGEsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3Vs
dCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShieXRlY29kZSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdH
UFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CkBAIC05MTgsMjUg
Kzk0MCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAg
ICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZDsgfQotICAg
ICAgICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGlt
aXplZE9ySW5saW5lZDsgfQogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJl
dHVybiBtX3Nob3VsZEVtaXRQcm9maWxpbmc7IH0KICNlbHNlCiAgICAgICAgIGJvb2wgY2FuQmVP
cHRpbWl6ZWQoKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICBib29sIGNhbkJlT3B0aW1pemVk
T3JJbmxpbmVkKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgLy8gRW5hYmxlcyB1c2Ugb2Yg
dmFsdWUgcHJvZmlsZXIgd2l0aCB0aWVyZWQgY29tcGlsYXRpb24gdHVybmVkIG9mZiwKICAgICAg
ICAgLy8gaW4gd2hpY2ggY2FzZSBhbGwgY29kZSBnZXRzIHByb2ZpbGVkLgogICAgICAgICBib29s
IHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAg
ICAgdm9pZCBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygp
OworCisgICAgICAgIHZvaWQgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworCiAgICAgICAgIHN0
YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21w
dXRlQ29tcGlsZVRpbWVzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB5b3UgbmVlZCB0byBj
aGVjayBhIHZhbHVlIGZyb20gdGhlIG1ldGFkYXRhIHRhYmxlIGFuZCB5b3UgbmVlZCBpdCB0bwot
ICAgICAgICAvLyBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFzdCBhbmQgc2xvdyBwYXRoLCB0
aGVuIHlvdSB3YW50IHRvIHVzZSB0aGlzLgotICAgICAgICAvLyBJdCB3aWxsIGdpdmUgdGhlIHNs
b3cgcGF0aCB0aGUgc2FtZSB2YWx1ZSByZWFkIGJ5IHRoZSBmYXN0IHBhdGguCi0gICAgICAgIEdl
dFB1dEluZm8gY29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUpOwotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLSAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFy
aXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0
ZXI7CiAKQEAgLTk2Myw5ICs5ODAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9y
PFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3Jk
PiBtX3N3aXRjaGVzOwogCi0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2Nv
cGllZEdldFB1dEluZm9zOwotICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0aFBy
b2ZpbGU+IG1fY29waWVkQXJpdGhQcm9maWxlczsKLQogICAgICAgICBKdW1wTGlzdCBtX2V4Y2Vw
dGlvbkNoZWNrczsKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZy
YW1lUm9sbGJhY2s7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTk5LDExICsx
MDEzLDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0
aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0g
ICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3No
b3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlC
eXRlY29kZUluZGV4OwogCi0gICAgICAgIFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7
CisgICAgICAgIENvZGVCbG9jayogbV9wcm9maWxlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKyAg
ICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fdW5saW5rZWRDb2RlQmxvY2sgeyBudWxscHRyIH07
CisKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRyPEJhc2Vs
aW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0
YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVj
dENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAg
ICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgICAgICBC
YWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgICAgICBCYWc8VW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICAgICAgRml4ZWRW
ZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIEZpeGVk
VmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAg
ICAgIHN0cnVjdCBOb3RBQ29kZUJsb2NrIHsgfSBtX2NvZGVCbG9jazsKICAgICB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCBhcmd1bWVudEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVu
dEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIy
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMzIwLDcgKzMyMSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByZWdUMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qy
LCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3
NSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAK
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC01NzMsNyArNTc3LDggQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IAogCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVn
VDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDQsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIyLDggQEAgdm9pZCBKSVQ6OmVt
aXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBVbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+
KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE5lZ0lDKiBu
ZWdhdGVJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIFVu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+dW5h
cnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tX3Byb2Zp
bGVJbmRleCk7CisgICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9tYXRoSUNzLmFkZEpJVE5lZ0lD
KGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIG5lZ2F0ZUlDKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRv
IGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBi
ZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZSk7CkBAIC04OTksOCArOTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChj
b25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUQWRkSUMq
IGFkZElDID0gbV9tYXRoSUNzLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0
cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0
TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQpAQCAtOTQ1LDEwICs5NTAsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIGJvb2wgZ2Vu
ZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CiAgICAgICAg
IFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgp
OworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJp
dGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgc3JjUmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzKTsKICAgICB9IGVs
c2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVt
cHMpOwogCkBAIC0xMDE1LDEwICsxMDIxLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChK
SVRCaW5hcnlNYXRoSUMKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkK
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAg
ICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9m
aWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlm
IChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQog
ICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7
CiAKQEAgLTEwNTUsMTMgKzEwNjIsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVu
YXJ5TWF0aElDPAogI2VuZGlmCiAKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsK
ICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAg
ICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1t
UHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0g
ZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4o
cmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7
CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFi
ZWwoKTsKQEAgLTExMjAsMTMgKzExMjgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJ
VEJpbmFyeU1hdGhJQwogI2VuZGlmCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
NCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0g
ICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0
aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1p
Yz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3Ms
IHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9m
aWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdU
NCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlv
biksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiks
IHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1h
dGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVu
ZCA9IGxhYmVsKCk7CkBAIC0xMTY2LDcgKzExNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IG51bGxwdHI7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJp
dGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBhcml0aFByb2ZpbGUgPSAmbV91bmxp
bmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BEaXY+KCkubV9wcm9maWxlSW5kZXgpOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJh
bmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQg
cmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKQEAgLTEyMTEs
OCArMTIyMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAog
dm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRo
UHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxp
bmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BNdWw+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fbWF0aElD
cy5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5h
ZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+
KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9w
ZXJhdGlvblZhbHVlTXVsKTsKIH0KQEAgLTEyMjcsOCArMTIzNiw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0g
bV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQ
cm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubV9wcm9maWxlSW5kZXgpOwor
ICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUp
OwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJ
Qyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwo
Y29uc3QgT3BDYWxsRXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlciwg
cmVnVDEpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBD
YWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkp
LCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwpAQCAtMjU5LDcgKzI1OSw3IEBAIHZv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKIAogICAgIGVtaXRMb2FkKGNh
bGxlZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQo
Ynl0ZWNvZGUpOwpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNv
bnN0IEluc3RydWN0aW8KICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsK
IAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM0MSw3ICszNDEs
NiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgfQogCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgaWYgKG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8
fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM1NCw3ICszNTMsNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3Vu
bGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRl
ICJTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgpAQCAtNDQsNyAr
NDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOwogfQogCkBAIC01MywxOCArNTQs
MTggQEAgc3RkOjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJh
cmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9wOjpv
cGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKK0pJVDo6Y29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAg
IHVuc2lnbmVkIGNoZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGlu
dCBhcmdDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0Zvcihi
eXRlY29kZSwgY2hlY2twb2ludCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19j
YXN0PGludD4oc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9p
bnQpKTsKIAorCiAgICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdU
aGlzKDApKSwgcmVnVDApOwogICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDApOwotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBhcnJheVByb2ZpbGVGb3Io
bWV0YWRhdGEsIGNoZWNrcG9pbnQpLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7Cisg
ICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJbmZvOjpvZmZzZXRPZkFy
cmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQo
KSk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTc4LDcgKzc5LDcgQEAg
c3RkOjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8
IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJ
bmZvQ29uc3RhbnQpCiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5t
X2FyZ3VtZW50czsKQEAgLTkxLDcgKzkyLDggQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYgYnl0ZWNvZAogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1l
Rm9yRm9yd2FyZEFyZ3VtZW50czsKICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBv
cGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwg
LWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCByZWdUMCwgcmVn
VDEsIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJn
c0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCop
KSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTAxLDE0ICsxMDMsMTYgQEAg
SklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9w
ZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UK
ICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAg
ICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1Qw
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVw
T3BlcmF0aW9uLCByZWdUMywgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDAp
OwogICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhl
IGFyZ3VtZW50IGNvdW50LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRy
ZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7Ci0gICAgSnVtcCBu
b3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmUzMihy
ZWdUMiwgaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7Cisg
ICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpKSwgcmVnVDMpOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFi
b3ZlLCByZWdUMywgcmVnVDIpOworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENh
bGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CiAg
ICAgbm90QmlnZ2VzdC5saW5rKHRoaXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMn
LgpAQCAtMTI3LDE2ICsxMzEsMTYgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBP
cCYpCiB0ZW1wbGF0ZTw+CiBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2
YWwmIGJ5dGVjb2RlKQogewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCByZWdUMSk7Ci0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEs
IENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9m
ZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZh
bCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwotCi0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2
YWwsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxs
UmVzdWx0KGJ5dGVjb2RlKTsKIApAQCAtMTQ4LDcgKzE1Miw3IEBAIHZvaWQgSklUOjpjb21waWxl
Q2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENh
bGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxs
TGlua0luZm9zLmFkZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNl
dFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9m
ZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE2MCw0NyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihy
ZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9h
ZDY0KEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxs
RnJhbWVTbG90OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0g
ICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGlu
Zm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0
dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRD
YWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJ
VDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCi17
Citib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0lu
Zm8qLCB1bnNpZ25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkgewogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cFRhaWxDYWxsJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYg
Ynl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkK
IHsKLSAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0
YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJl
clRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURh
dGEubnVtTG9jYWxzID0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+
IHNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBz
aHVmZmxlRGF0YS0+bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxl
RGF0YS0+bnVtUGFyYW1ldGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJU
YWdSZWdpc3RlcjsKKyAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNv
ZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsK
LSAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZm
bGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5h
cmdzW2ldID0KKyAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFs
dWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAg
ICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxs
ZWUgPQotICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsK
LSAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwot
ICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVE
YXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsK
KyAgICBzaHVmZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zm
c2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1w
TGlzdCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAs
IHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0gewotICAgICAgICBDYWxs
RnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwor
ICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIEp1bXBM
aXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRo
aXMsICpzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRk
U2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKworICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwor
ICAgIGluZm8tPmZyYW1lU2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAg
IGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAg
LTIxOCwxNCArMjI2LDI1IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAg
ICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgog
ICAgICovCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2Rl
SUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxM
aW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZy
YW1lKGJ5dGVjb2RlLCBpbmZvKTsKKworICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0g
bnVsbHB0cjsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJ
TlRfTUFYOworICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgaW5m
byA9IG1fdW5saW5rZWRDYWxscy5hZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86
OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsKKworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOwor
CisgICAgICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5r
SW5mb0luZGV4KTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29t
cGlsYXRpb25JbmZvKCkpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLnVubGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGlu
Zm9Db25zdGFudDsKKyAgICB9CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9D
b25zdGFudCk7CiAKICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICBhdXRvIGJ5
dGVjb2RlSW5kZXggPSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7Ci0g
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5i
aXRzKCk7CisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMp
LCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdP
ZmZzZXQpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8v
IHJlZ1QwIGhvbGRzIGNhbGxlZS4KQEAgLTIzNCwxNiArMjUzLDEyIEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVj
b2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5m
by5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxs
TGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAg
ICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkp
CisgICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5k
ZXgsIGluZm9Db25zdGFudCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGxvYWRDb25zdGFudChp
bmZvQ29uc3RhbnQsIHJlZ1QyKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0g
ICAgICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMs
IHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAg
ICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsK
ICAgICAgICAgfSk7CkBAIC0yNTMsMTMgKzI2OCwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNs
b3dQYXRocyA9IGluZm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5m
bzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9u
ZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBk
b25lTG9jYXRpb247CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBA
IC0yNzMsMjAgKzI4OCwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0
IEluCiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOwog
CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93
UGF0aCgqbV92bSwgKnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRo
KCptX3ZtLCAqdGhpcywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJ
VERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpAQCAtMzk1LDE3ICs0
MTAsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogCiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwogICAg
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisKKyAgICBtb3ZlKHJlZ1QwLCBiYXNlR1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+
aW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0
dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25leHQsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgZmFzdENhc2Uu
bGluayh0aGlzKTsKIH0KQEAgLTQxNiwxMCArNDQ0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9y
T3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKKyAgICBHUFJS
ZWcgaXRlcmF0b3JHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgSnVt
cExpc3Qgbm90T2JqZWN0OwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0
ZXJhdG9yR1BSKSk7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVy
YXRvckdQUikpOwpAQCAtNDMyLDE5ICs0NTgsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX29wZW4oY29ucwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjAsIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0b3JHUFIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0Jp
dHMoKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBtb3ZlKGl0ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgbmV4dFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogCiAgICAgYXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhp
cyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RP
YmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogCiAgICAg
ZG9uZS5saW5rKHRoaXMpOwogfQpAQCAtNDUyLDcgKzQ3Niw2IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9u
ID0gKFsmXSAoKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKICAg
ICAgICAgY2FzZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25hcnJvdzsK
QEAgLTQ3MCw1MCArNDkzLDc3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29u
c3QgSW4KICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRp
b25Nb2RlOjpHZW5lcmljKSkpOwogCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBv
cjgoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVy
aWMpKSwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2l0ZXJhdGlvbk1ldGFkYXRhLnNlZW5N
b2RlcykpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6
TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRh
ZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSwgcmVnVDApOworICAgIG9yMzIoVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgcmVnVDApOwor
ICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0
YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0
YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSk7CiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yTmV4
dD4oaW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgYWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQoKTsKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2Jq
ZWN0KSBpbiByZWdUMAogCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVn
IGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKLSAgICBHUFJSZWcgZG9uZUdQUiA9IHJlZ1QxOwotICAg
IC8vIGl0ZXJSZXN1bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0IGJ5IGlk
IGJlbG93LgotICAgIG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgaXRlckNhbGxS
ZXN1bHRHUFIpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoaXRlclJlc3VsdEdQUik7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChyZXR1cm5WYWx1ZUdQUiA9PSBiYXNlR1BSKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVn
cyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJl
c2VydmVkUmVncy5hZGQodmFsdWVHUFIpOworICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZChpdGVy
Q2FsbFJlc3VsdEdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25l
LmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BS
KSwgcmVnVDMsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9u
ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHN0
dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBK
U1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAgICAgewotICAgICAgICBHUFJSZWcgc2NyYXRj
aDEgPSByZWdUMjsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CisgICAgICAgIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9uZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAg
ICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0
ZXJzKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIGdsb2JhbEdQUiA9IHNjcmF0
Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0
IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BS
KSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9u
RG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNo
MSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgZ2xvYmFsR1BSKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAg
IG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGJhc2VHUFIpOwogCiAgICAgICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCByZWdUNCwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3Bl
cnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKLSAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlc3Vs
dEdQUik7CiAKICAgICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwogICAgIH0KQEAgLTUy
Nyw1OSArNTc3LDU1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMK
ICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBp
dGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hl
Y2twb2ludChqdW1wKCkpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgewogICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7Ci0gICAgICAgIEdQUlJl
ZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwotICAgICAgICBub3RPYmplY3QuYXBwZW5k
KGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJDYWxsUmVzdWx0R1BSKSk7CiAKICAgICAgICAgVW5pcXVl
ZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKTsKICAg
ICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRl
eCsrXTsKICAgICAgICAgCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQ
UikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJDYWxs
UmVzdWx0R1BSKSk7CiAKLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFy
Z0dQUjApOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotCi0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIHJlZ1QxKTsKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7CisgICAgICAgIG1vdmUo
aXRlckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUs
IEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBkb25lVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihp
ZGVudCkucmF3Qml0cygpKTsKKworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoZG9uZVZSZWcsIGRvbmVHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0Lmxp
bmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJl
c3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSkpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1
bWVudEdQUjApOwogICAgIH0KIAogICAgIHsgICAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFs
dWU7Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKICAgICAgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCk7
CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CiAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAg
ICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpu
b25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2
YWx1ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCB2YWx1ZVZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1
bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2
YWx1ZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKICAgICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5o
IgogCisKIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgREZHIHsKQEAgLTE1OSwxMCArMTYw
LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5
cGUpCiAgICAgewotICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0
VHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1
c2VEYXRhSUMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIE9w
dGlvbnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKKyNpbmNsdWRlICJKSVQuaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIApAQCAt
NDYsMTAgKzQ3LDkgQEAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBnYXJiYWdlU3R1YkluZgog
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKAogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQotICAgIDogbV9jb2RlQmxvY2soY29kZUJs
b2NrKQotICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCisgICAgOiBtX2ppdFR5cGUoaml0VHlwZSkK
IHsKLSAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1Yklu
Zm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKKyAgICBtX3N0
dWJJbmZvID0gY29kZUJsb2NrID8gY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBj
b2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNhbGxTaXRl
SW5kZXggPSBjYWxsU2l0ZTsKIAogICAgIG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMgPSB1c2Vk
UmVnaXN0ZXJzOwpAQCAtNTksNyArNTksNiBAQCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
OjpmaW5hbGl6ZSgKICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1Bh
dGgsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCkKIHsKICAg
ICBtX3N0dWJJbmZvLT5zdGFydCA9IHN0YXJ0OwotCiAgICAgbV9zdHViSW5mby0+ZG9uZUxvY2F0
aW9uID0gZmFzdFBhdGgubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihtX2RvbmUpOwogCiAg
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkKQEAgLTY3LDYgKzY2LDE1IEBA
IHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIG1fc3R1YkluZm8t
PnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KG1fc2xvd1BhdGhCZWdpbik7CiB9CiAKK3ZvaWQgSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIG1f
c3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSk7CisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9H
UFIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRC
eUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUs
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlw
ZSBhY2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1Zh
bHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAt
MTEwLDcgKzExOCw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUpCiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlw
ZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2Us
IHZhbHVlLCBzdHViSW5mb0dQUikKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1l
LnVpZCgpID09IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQor
ICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhjb2RlQmxvY2sgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09
IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAi
SklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHV0S2luZC5oIgpAQCAtMzgsMTEgKzM5
LDExNCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXI7CiBjbGFz
cyBDYWxsU2l0ZUluZGV4OwogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklUOwogY2xhc3MgU3Ry
dWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKIAogZW51
bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90OwogZW51bSBjbGFzcyBKSVRUeXBlIDogdWludDhf
dDsKIAorc3RydWN0IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lRGVsQnlJ
ZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1Qy
OworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lRW51
bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBi
YXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQg
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OnJlZ1QyOworICAgIC8vIFdlIHJlbHkgb24gdGhpcyB3aGVuIGxpbmtpbmcgYSBD
b2RlQmxvY2sgYW5kIGluaXRpYWxpemluZyByZWdpc3RlcnMgZm9yIGEgR2V0QnlWYWwgU3R1Yklu
Zm8uCisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpY19hc3NlcnQocmVzdWx0ID09IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgc3RhdGljX2Fzc2VydChzdHViSW5mbyA9
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbyk7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKK307CisKK3N0cnVjdCBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
ID0gR1BSSW5mbzo6YXJndW1lbnRHUFIyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHBy
b3RvID0gR1BSSW5mbzo6YXJndW1lbnRHUFIzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86Om5vbkFyZ0dQUjE7Cit9OworCitzdHJ1Y3Qg
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkg
PSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpy
ZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVn
VDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnMgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyB0aGlzVmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0
IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHQgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdU
MTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QyOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGUgPSBHUFJJbmZvOjpyZWdUMzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Q0OworfTsK
Kworc3RydWN0IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYnJhbmQgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2Ug
PT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChi
cmFuZCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisKIGNsYXNz
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcigpIHsgfQpAQCAtNjIsMTUgKzE2NiwyMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBm
aW5hbGl6ZSgKICAgICAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVm
ZmVyJiBzbG93UGF0aExpbmtCdWZmZXIsCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiBzdGFydCk7Ci0gICAgCisKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcg
c3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogbV91bmxpbmtl
ZFN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKwog
cHJvdGVjdGVkOgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgSklUVHlwZSBtX2pp
dFR5cGU7CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIG1fc3R1YkluZm87CiAKK3B1YmxpYzoKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9kb25lOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Nsb3dQYXRoQmVnaW47Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7IC8vIE9PUFM6IG1ha2UgcmVwb3J0Q2FsbCBwYXNzIHNv
bWV0aGluZyBpbiB3ZSBjYW4gdXNlIGZvciB0aGUgbm9uLUNUSSB0aHVua3MgYnVpbGRzLiAKIH07
CiAKIGNsYXNzIEpJVEJ5SWRHZW5lcmF0b3IgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IgewpAQCAtOTgsNyArMjA4LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTVmFsdWVSZWdzIG1fYmFz
ZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fc3RhcnQ7CitwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0aEp1
bXA7CiB9OwogCkBAIC0xMzIsOCArMjQyLDggQEAgcHVibGljOgogICAgIEpJVFB1dEJ5SWRHZW5l
cmF0b3IoKSA9IGRlZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAotICAgICAgICBD
b2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3Mg
YmFzZSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BS
UmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgSklU
VHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2Us
IEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBF
Q01BTW9kZSwgUHV0S2luZCk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3Jv
QXNzZW1ibGVyJik7CiAgICAgCkBAIC0xNjMsMTEgKzI3Myw5IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpT
VmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1
bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0xOTEsOCArMjk5LDYgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBh
dGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yMTYsOCArMzIyLDYgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXBy
aXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yNDEsOCArMzQ1
LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVy
Jik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0y
NzcsOCArMzc5LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBm
YXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CiAKLXBy
aXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMDIsMTEgKzQw
Miw5IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3Nl
bWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1
ZVJlZ3MgbV9yZXN1bHQ7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTMzMCw4ICs0MjgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRo
KE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1
bXA7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2
aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwzOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lz
dGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlm
ICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7
Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0
YW50KSB7CisgICAgICAgIC8vIE9PUFM6IGZpbmQgYSB3YXkgdG8gYXNzZXJ0IHRoYXQgYWxsIGxp
bmsgdGltZSBjb25zdGFudHMgYXJlIGNlbGxzLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzQ2VsbCgpOwogfQogCiBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVy
IHNyYykKIHsKICAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7Ci0gICAgcmV0dXJuIG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0gU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKKyAgICByZXR1cm4gbV91bmxp
bmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVh
bFJlZ2lzdGVyIGVudHJ5KQpAQCAtMTU2LDM2ICsxODEsMzYgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6YXBwZW5kQ2FsbFdpdGhFeAogI2VuZGlmCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1l
dGFkYXRhPgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdp
c3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJl
dHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNW
YWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9y
ZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCiAgICAgcmV0
dXJuIGNhbGw7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxS
ZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVu
Y3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVH
UFIyLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BS
MiwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNL
bm93bkNlbGwocmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpCiAgICAgICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjA1LDcgKzIzMCw3IEBAIEFMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6Omhhc0FueVNsb3dDYXNlcygKIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENo
ZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAi
VGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdl
bmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVCht
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50
cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5
dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNo
ZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byByZXN1bHQgPSBtX2NoZWNrcG9pbnRMYWJlbHMu
YWRkKG1fYnl0ZWNvZGVJbmRleCwgbGFiZWwoKSk7CkBAIC0yMTUsNyArMjQwLDcgQEAgaW5saW5l
IHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludAogaW5saW5lIHZvaWQgSklUOjplbWl0
SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCBqdW1wKQogewogICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUlu
ZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5
dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygp
KTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byBp
dGVyID0gbV9jaGVja3BvaW50TGFiZWxzLmZpbmQobV9ieXRlY29kZUluZGV4KTsKQEAgLTI5Mywy
OSArMzE4LDM0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRDb3VudChBYnN0cmEKIAog
QUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdp
c3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUpCi17Ci0gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7Ci0KLSAgICAvLyBX
ZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNh
biBqdXN0IGRvIGEgZGlyZWN0Ci0gICAgLy8gc3RvcmUuCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSNlbHNlCi0g
ICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJpdHdpc2VfY2FzdDxFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0gICAgc3RvcmUz
Mih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7Ci0gICAg
c3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOwotI2VuZGlm
Ci19CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkp
LT5sZW5ndGgoKSA9PSAxOworfQorCisvLyBPT1BTCisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUpCisvL3sKKy8vICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOworLy8KKy8v
ICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwg
c28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKKy8vICAgIC8vIHN0b3JlLgorLy8jaWYgVVNFKEpT
VkFMVUU2NCkKKy8vICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tl
dHMpOworLy8jZWxzZQorLy8gICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9
IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVj
a2V0cyk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFz
Qml0cy5wYXlsb2FkKTsKKy8vICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9y
LT5hc0JpdHMudGFnKTsKKy8vI2VuZGlmCisvL30KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBp
bmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRh
OjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4gSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSkKIHsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogI2Vsc2UKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKQEAg
LTMyMywyNCArMzUzLDI5IEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxk
ZWMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9w
Y29kZSguLi4pIHsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWVS
ZWdzIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVl
UmVncyB2YWx1ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFk
YXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOworCisgICAgVmFsdWVQ
cm9maWxlJiB2YWx1ZVByb2ZpbGUgPSB2YWx1ZVByb2ZpbGVGb3IoYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jayksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOworICAg
IHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworICAgIC8vIE9P
UFMKKyAgICAvL3B0cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVPZmZzZXRG
b3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpICsgVmFsdWVQcm9maWxl
OjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7CisgICAgLy9zdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRy
ZXNzKHNfbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVl
UHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7Ci19CisvL2lubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwg
R1BSUmVnIHJlc3VsdFJlZykKKy8veworLy8gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1
ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworLy99CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1l
dGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgR1BSUmVnIHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNl
bmRpZgogCkBAIC0zNjAsNiArMzk1LDIxIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVcKICAgICB9CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklE
IGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKSB7CisgICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxs
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
c3RvcmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9m
aWxlKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2
b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit7Cisg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFz
dFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3JhdGNoR1BSKTsKK30KKwogQUxXQVlTX0lO
TElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBz
cmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKQEAg
LTM4MCw3ICs0MzAsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVy
CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQ
UmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNv
bnN0YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsK
ICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVl
KTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVl
KTsKQEAgLTQ5Niw3ICs1NDYsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFs
UmVnaXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZp
cnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwo
cmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlz
Q29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVs
c2UKQEAgLTUwNiw3ICs1NTYsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZp
cnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewotICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAg
ICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwogICAgICAgICBlbHNlCkBAIC01MTQsMTEgKzU2NCw2IEBAIGlubGluZSB2b2lkIEpJVDo6
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0
dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigp
OwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBv
cCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9w
MSkpIHsKQEAgLTU0NCwxMSArNTg5LDE3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRH
ZXRWaXJ0dWFsUmUKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgp
KSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7Ci0gICAgICAgIGVsc2UKKyAg
ICAgICAgc3dpdGNoIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihzcmMpKSB7CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpJbnRlZ2VyOgorICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91Ymxl
OiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlKSksIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgZHN0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU2
NiwxMSArNjE3LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17
Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
aXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9y
ZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01OTUsNyArNjQxLDcgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdp
c3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQor
ICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY4Myw3IEBAIEFMV0FZU19JTkxJTkUgaW50
IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBpZiAodGFyZ2V0KQogICAgICAgICByZXR1
cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChp
bnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdl
dFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQotewotICAgIHVuc2lnbmVkIGtleSA9IGJ5
dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hNYXAgZG9lc24ndCBsaWtlIDAgYXMgYSBr
ZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRHZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0g
ICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0SW5mb3MuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJ
bmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAgICBt
X2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1dEluZm8ub3BlcmFuZCgpKTsKLSAgICBy
ZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdB
WVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5h
cnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFy
aXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRo
UHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmlu
YXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwg
YXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQcm9maWxlOworICAgIHJldHVybiBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiArNzA0LDYxIEBAIEFMV0FZU19JTkxJTkUg
RUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICByZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgp
OwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90
IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0
YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sK
KyAgICBsb2FkMzIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5t
ZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1
bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDgoQWRkcmVzcyhzX21ldGFkYXRh
R1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJs
ZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0
b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFH
UFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcgdmFsdWUs
IGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTMy
KHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFk
YXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjptYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXpl
X3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV91
bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNv
ZGUpICsgb2Zmc2V0KSwgc19tZXRhZGF0YUdQUiwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bG9hZENvbnN0YW50KEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY29uc3Rh
bnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19jb25zdGFu
dHNHUFIsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oY29uc3RhbnRJbmRleCkgKiA4KSwgcmVzdWx0
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZEdsb2JhbE9iamVjdChHUFJSZWcg
cmVzdWx0KQoreworICAgIGxvYWRDb25zdGFudChtX2dsb2JhbE9iamVjdENvbnN0YW50LCByZXN1
bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQo
VmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CisgICAgLy8gT09QUzogTWF5YmUgbWFrZSB0
aGlzIG1vcmUgZWZmaWNpZW50PworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVC
bG9jazo6b2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7CisgICAgbG9h
ZDY0KEFkZHJlc3MocmVzdWx0LCBjb25zdGFudC50b0NvbnN0YW50SW5kZXgoKSAqIHNpemVvZihK
U1ZhbHVlKSksIHJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMxLDcgKzkzMSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdp
c3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdU
MywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRy
aWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0
Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsK
QEAgLTk5Nyw3ICs5OTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IElu
c3RyCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJs
ZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTAyNCw3ICsxMDI0LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogCiAgICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9z
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRj
aFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRj
aFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5s
aW5rZWRUYWJsZSk7CiAKQEAgLTEwNDIsNyArMTA0Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9zdHJpbmcoY29uc3QgSW4KIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0
Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hS
ZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hS
ZWNvcmQ6OlN0cmluZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2Vk
VGFibGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAKICNpbmNsdWRlICJUeXBlUHJv
ZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCkBAIC01NCwxMSArNTYsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IElu
c3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAog
ICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigp
KQotICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KSksIGFkZHJlc3NGb3IoZHN0KSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgLy8gT09QUzogbW9z
dCAiT3RoZXIiIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudHMgY2FuIGp1c3QgYmUg
Z3JhYmJlZCBmcm9tIHRoZSBVbmxpbmtlZENvZGVCbG9jay4gSXQncyBqdXN0CisgICAgICAgIC8v
IGEgY291cGxlIHR5cGVzIHRoYXQgY2FuJ3QuIENyZWF0ZSBhbiBhYnN0cmFjdGlvbiBmb3IgdGhh
dC4KKworICAgICAgICBzd2l0Y2ggKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKHNyYykpIHsKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkludGVnZXI6CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpEb3VibGU6IHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVl
OjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29u
c3RhbnQoc3JjLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9y
KGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC04NywzNyArMTAwLDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25z
dCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6
ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0
dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2Nh
dG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2Nh
dGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJl
Z2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcg
PSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBSZWdpc3Rl
cklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwot
ICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29u
c3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxp
emVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
LSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Ci0g
ICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0
ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9i
amVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0
T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
KyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgZW1pdEFs
bG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9j
YXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7
CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFn
ZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRTbG93Q2Fz
ZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBS
ZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEu
bV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOwor
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZt
KCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BS
KTsKIH0KIApAQCAtMTMxLDcgKzE0Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19o
YXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUs
IHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5o
YXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBi
cmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VW
YWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xG
dW5jdGlvbikpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJl
Z1QwKTsKIApAQCAtMTU0LDMwICsxNjYsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAK
LSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNw
ZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZh
bCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4g
dXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm90b0dQUiA9IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6cHJvdG87CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3RvLCBwcm90b0dQUik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdGhhdCBw
cm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQg
YnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSwgcHJvdG8pOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2
YWx1ZUdQUiwgdmFsdWUpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQ
UiwgcHJvdG8pOwogCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1Qy
LCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDUsCi0gICAg
ICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgcmVzdWx0R1BSLAorICAgICAgICB2YWx1ZUdQ
UiwKKyAgICAgICAgcHJvdG9HUFIsCisgICAgICAgIHN0dWJJbmZvR1BSLAorICAgICAgICBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxLCBCYXNlbGluZUluc3RhbmNlb2ZSZWdp
c3RlcnM6OnNjcmF0Y2gyKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9p
bnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKKwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIApAQCAtMTkyLDE0ICsyMTIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2YoY29uc3QgSQogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxs
T3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3Mo
R1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCByZWdUMiwgcmVnVDEpOwotICAgIH0gZWxzZQot
ICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVyczo6c3R1YkluZm8gPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWUgPT0gYXJndW1lbnRHUFIyKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG8gPT0g
YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9w
dGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0yNDAsNyArMjU5LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogCiAgICAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAs
IHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAg
LTM3NCw3ICszOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24q
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7
CiAjZWxzZQpAQCAtMzgzLDkgKzQwMiw5IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJ
bnN0cnVjdGlvbioKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9y
KFZNJiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9y
ZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAg
IGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC00MTEsNyArNDMwLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogCiAgICAgaWYgKGRzdCAhPSBz
cmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTQzNCw5ICs0NTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVy
dHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0
aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNDY1LDggKzQ4NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3Qg
SW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0g
cmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAg
ICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVl
OwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJ
ZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxP
YmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdl
dENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBA
IC00ODAsNyArNTAxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmpl
Y3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBE
RkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmpl
Y3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
LSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBy
ZWdUMTsKQEAgLTUxOSw3ICs1NDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25z
dCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChi
cmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU2NCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBj
YXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUu
CiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJy
YW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKIApAQCAtNTgyLDE1ICs2MDMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmlu
ZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3Bl
cmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50
ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9
IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXND
ZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1w
ZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVy
LCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKDEpLCBi
eXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYy
NSw4ICs2NDQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpbwog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHBy
IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRK
dW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNj
cmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwg
dGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZh
bHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRk
SnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY2
MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02
OTUsNyArNzE2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpbwog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qx
KTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVn
VDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAt
NzExLDcgKzczMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8K
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAg
ICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtNzIwLDcgKzc0Miw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIAogI2lmIE5VTUJFUl9PRl9D
QUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZy
YW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRHUFIwKTsKKyAgICBqaXQuY29weUNhbGxlZVNh
dmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYXJndW1lbnRHUFIwKTsKICNlbmRpZgog
CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CkBA
IC05MDgsNyArOTMwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0
ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEp
OwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5NDEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkzMSw3ICs5NTUs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgCiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVn
ICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9
CkBAIC05NTEsNyArOTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJ
bnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNC
aWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NzgsNyArMTAwMiw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9i
amVjdChyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk5Myw3ICsxMDE3LDEwIEBAIHZv
aWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVz
cyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rl
cik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywg
Vk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisKKyAgICAvLyBPT1BTOiBUaGlzIGlzbid0IGVsZWdhbnQuIFdoeSBhcmVuJ3QgdGhleSBp
biB0aGUgY2FsbGVlIHNhdmUgYnVmZmVyLiBJIGd1ZXNzIGJlY2F1c2Ugd2UgY2FuIE9TUiBleGl0
IGhlcmU/CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3Rl
cnMoKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJp
ZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRj
aGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpA
QCAtMTAxMSwyMyArMTAzOCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0
cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRo
ZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVm
ZmVyID0gbWV0YWRhdGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
VHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4
LmFzQml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25U
cnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXgu
YXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1
bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JF
bnRyeS5saW5rKHRoaXMpOwotICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7
Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCBy
ZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFs
dWVQcm9maWxlJj4ocHJvZmlsZSksIHJlZ3MpOwotICAgICAgICB9KTsKLSAgICB9CiAjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCiB9CiAKQEAgLTEwNTMsOCArMTA2OCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRp
bmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBm
b3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRl
eCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0
ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBA
IC0xMDgxLDEzICsxMDk2LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0
IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGlu
ZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRj
aGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZh
dWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVu
c3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENo
YXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0
YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEwOTksMjAgKzExMTUsMjIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBz
Y3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRh
YmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQu
Ci0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAg
U3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJ
VGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0
aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5
cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2Fk
MzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0
cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwg
c3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVn
Z2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTExMzMsNyArMTE1MSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdU
MiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIp
OwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAg
d2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE0OCw3ICsxMTY2LDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjYsNyArMTE4Myw3IEBAIHZvaWQgSklUOjplbWl0X29w
X25lcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAg
IGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE4OCwxMiArMTIwNSwxNCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRv
ZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0
ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25n
aW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgot
ICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CisgICAgc2l6ZV90IGNv
dW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpOwogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAg
ICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKIAotICAg
IGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOworICAgIAorICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFdyaXRlQmFy
cmllcihyZWdUMCk7CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vsc2UK
QEAgLTEyMTIsNyArMTIzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3Ry
dWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkK
IHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4
Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0xMzEwLDIzICsxMzI5
LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklU
OjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRT
dHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0
LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsK
LSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1
cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2Nh
bGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1l
dGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7
CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVz
dWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcgKzEzNTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
cmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBG
dW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBK
U0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNl
dE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7
CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlzOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZDYWNoZWRDYWxsZWUoKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vl
bk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRy
dXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25S
ZWcpKTsKICAgICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcyLDcg
KzEzODcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihy
ZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBA
IC0xMzgyLDcgKzEzOTgsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3Ry
dWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIHhv
cjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1
ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcgKzE0
MTEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQw
NCw3ICsxNDIyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Ywog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBA
IC0xNDE4LDEwICsxNDM3LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1
c3RvbSgKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0
cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUu
bV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFs
dWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE0MzAsNyArMTQ1MCw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVt
aXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBp
ZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enpp
bmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlS
ZXR1cm4oKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5m
aW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX3VubGlua2VkQ29kZUJsb2NrLT5sb29wSGludHNB
cmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAgICAgICB1aW50cHRyX3Qq
IHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAg
ICAgICAgbG9hZFB0cihwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4g
PSBicmFuY2hQdHIoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0
dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xNDQwLDcgKzE0NjAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAjZWxzZQogICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmCi0gICAgICAgIG1vdmVWYWx1ZShtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlc3Vs
dFJlZ3MuZ3ByKCkpOwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAg
ICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CkBAIC0xNDUzLDggKzE0NzMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQo
Y29uc3QgSW5zdHJ1CiAKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAK
ICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlv
bkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNz
KG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICAg
ICAgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkp
KSk7CiAgICAgfQogfQogCkBAIC0xNTA5LDcgKzE1MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhh
bmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTUyMiw3ICsxNTQ0
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogI2lmIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAg
IGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTE1NjQsMzQgKzE1ODYsMzYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0g
Ynl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4
cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2Jh
bEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0PFJl
Z0V4cCo+KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBl
bWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVt
aXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXls
b2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKLSAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29k
ZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbCwgYml0d2lzZV9jYXN0PHZvaWQq
PihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAg
IGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKIAogICAgIE9wY29kZUlEIG9w
Y29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2Ug
aWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2Ug
aWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBB
U1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2
bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2MjEsMjMgKzE2NDUsMjQgQEAgdm9pZCBKSVQ6OmVt
aXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2Fk
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlv
bkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nh
c3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3Rh
bnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6
b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBk
c3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bj
b2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0
aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYg
KG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24p
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwg
JnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAg
QVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTY2NCwyOSArMTY4OSwzMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2Fy
Z2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2Nh
dGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVl
c1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBh
cmd1bWVudEdQUjIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29k
ZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgp
LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgc2l6ZSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0
aDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUlu
ZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
QW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsK
KyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlX
aXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmd1bWVu
dEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogI2Vsc2UKKyAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRh
dGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMik7CiAgICAgZW1pdExv
YWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQ
cm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAj
ZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNzIwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Fy
cmF5X3dpdGhfc2l6ZShjbwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUg
Y2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdHlw
ZSBwcm9maWxlciBpcyBlbmFibGVkLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5
cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCkBA
IC0xNzc3LDIwICsxODA0LDI0IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tl
bl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BS
MCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlj
a2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7Ci0gICAgR1BS
UmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3Vt
ZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3Vy
ZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywg
c2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJn
R1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgorICAgICAgICBH
UFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBh
Y2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Cisg
ICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJl
Z1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qz
KTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFs
dWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0
UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklU
OjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBv
ZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHVzaW5nIHRoZSBjb250cm9sIGZsb3cg
cHJvZmlsZXIuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
cm9maWxlQ29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxv
Y2tMb2NhdGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMpOwpA
QCAtMTg2MCw3ICsxODkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0
IElucwogICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAogICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE5MTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFs
dWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsK
ICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4MjAx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNp
bmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29t
bW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUg
IkRGR09TUkVudHJ5LmgiCkBAIC0yODU1LDcgKzI4NTYsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVC
bG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0ID0gbGlua2VkVGFi
bGUubV9jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKQEAgLTI4ODAsNyArMjg4MSw3
IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVl
IGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFz
ZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2
b2lkKiByZXN1bHQ7CiAgICAgaWYgKGtleS5pc0ludDMyKCkpCkBAIC0yOTAzLDcgKzI5MDQsNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7Ci0g
ICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5n
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwogCiAgICAgaWYgKGtleS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmluZ0lt
cGwqIHZhbHVlID0gYXNTdHJpbmcoa2V5KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OCw3ICsz
NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5VmFs
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgSW52YWxpZEdQ
UlJlZywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1i
b2wgPSB0cnVlOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lv
biAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOTIgKzQ5LDEwMyBAQCBuYW1lc3BhY2UgSlNDIHsK
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0g
ICAgaWYgKG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRC
eVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGlmIChieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9u
czo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgeworICAgICAgICBhdXRvIG5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAg
IG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIHNjcmF0Y2hH
UFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogCi0g
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpyZXN1bHQpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVz
dWx0UmVncywgcmVnVDIpOwotICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVy
dHkpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7
Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgICAgICAvLyBPT1BT
LiBTdXBwb3J0IHRoaXMKKyAgICAgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVy
dHkpKQorICAgICAgICAvLyAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1
ZTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFs
U2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewot
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYg
KCFoYXNBbnlTbG93Q2FzZXMoaXRlcikpCisgICAgICAgIHJldHVybjsKKworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0QnlW
YWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4Kytd
OwogCi0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7
CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1lbnRH
UFI0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1p
emUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBt
X2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQ
Uik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BS
NDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlz
QVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRH
UFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQ
Uik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
YnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwg
IWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQ
UjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9
PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwotICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsxNjAsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNjAsOCArMTcxLDgg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJn
dW1lbnRHUFIxKTsKIApAQCAtMTg3LDM0ICsxOTgsNDAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7
CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwg
cmVzdWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRT
bG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJp
dmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhhc0FueVNsb3dD
YXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzI0MCwxMSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
cHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3Qs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1NCwyMCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNl
ZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAg
c3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRl
X25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZh
bHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCkBAIC0yNjQsNyArMjc3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAg
ICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAwLDIxICszMTMsMjggQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFu
ZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBH
UFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwotCiAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJp
dmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOwor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdl
bik7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Yg
c2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC0zMjQs
MTcgKzM0NCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAg
ICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIFVOVVNFRF9Q
QVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJh
bmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRP
cHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzY5
LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxy
ZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6
OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlz
QVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
c3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJh
aXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50
VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJp
dmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5k
aWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMTkgKzM4OSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFu
ZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5k
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOworCisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0
ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4p
OwogfQogCkBAIC0zOTQsOSArNDIyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19w
cml2YXRlX2JyYW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtNDA2LDI0ICs0MzYsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRl
QnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShv
cGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRl
X25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NTksNDIgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAs
IHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFz
ZUdQUiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5
dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIp
OwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQp
OwotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1
YkluZm9HUFIpOworICAgIC8vIE9PUFM6CisgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
cHJvcGVydHkpKQorICAgIC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0
cnVlOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwg
T3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7
CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2Fu
IHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBj
ZWxsLgpAQCAtNDc0LDE1ICs1MTAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7
Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9
IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7
Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAK
ICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTMxLDE2IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
ICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9i
YmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9k
ZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBt
YXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCks
IE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1
bWVudEdQUjUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUxMiw3ICs1NTQsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNE
aXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3Ry
aWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6
IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6
IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU2NSw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUzMywxOCArNTc1LDI0IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7
CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsK
KyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
LCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6dmFsdWUsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAg
ICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2Vk
LmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAgfQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9m
ZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSk7CiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCBnbG9iYWxPYmplY3RHUFIpOwpAQCAtNTcwLDIwICs2MTgsMzEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIp
LCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5m
by0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3
cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2Vs
bC4KQEAgLTU5NCw4ICs2NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1l
KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKLSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQg
PSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlv
bik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRC
eVZhbEluZGV4KytdOwogCkBAIC02MDMsMTMgKzY2MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X3ByaXZhdGVfbmFtZShjCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAotICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9u
UHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0
UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJl
ZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQ
UiA9IHJlZ1QyOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5
R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5h
bWU+KCk7CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRL
aW5kOworCisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQpOworICAgIGF1dG8gb3BlcmF0aW9u
ID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmll
bGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Cisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50c0dQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1
c3RlZEltbVB0cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC02MjIsMTggKzY4NCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZShjCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9w
dXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0MywxNCAr
Njk5LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3MzYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlv
bnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzc0Niw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVn
VDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc1Nyw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJp
YnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJl
Z1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNzA5LDcgKzc2OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFs
KGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJl
Z1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCBy
ZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzc5LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRl
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1Qz
LCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03
MjcsMjMgKzc4OCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwg
YmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVE
ZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAg
IC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBz
aW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODMwLDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxC
eUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODU0LDE5IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNt
YU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlH
UFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSks
IGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVn
VDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODA4
LDcgKzg3Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZU
TCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywg
d2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKQEAgLTg0NSwyMiArOTEzLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92
YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVE
ZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVs
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFk
ZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpE
ZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQo
Z2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdl
IHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3
cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04
ODMsOSArOTYyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
cmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUu
bV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC04OTksMjQgKzk4MCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25z
dCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5
VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRp
b25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
ICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0K
IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMDIsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEs
MjIgKzEwMzcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDAp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
c3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIs
IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNzEsMTcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVn
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMTAwMywyNiArMTA5MSwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZChjb25zCiAgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5
SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
blRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMzAs
MjIgKzExMTIsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVj
dD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVn
VDApOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BS
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1Yklu
Zm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYgKzEx
NDUsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BS
Mik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRC
eUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTY2LDYxIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBl
KG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0g
ICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0
YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2Fk
OEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2Rl
TWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihOb3RFcXVh
bCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxl
bmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgp
ICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmso
dGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQorICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6
R2V0QnlJZCk7CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZS
ZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIHRoaXNWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CiAK
LSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1
bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBA
IC0xMTU4LDE2ICsxMjI5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29u
c3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNTAsNTcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBhcmd1bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3Bl
cnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0
X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVH
UFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BS
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0
aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0
aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dl
bmVyYXRvciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtMTIwNiw3ICsxMzEwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAg
ICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0MSwxNiArMTM0NSwxOSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJ
ZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEyNjAsMjggKzEzNjcsMjIgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4K
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHRoaXNHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpA
QCAtMTI5MSw3ICsxMzkyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFn
UmV0dXJuQWRkcmVzcygpOwpAQCAtMTMyOSwyMyArMTQzMCwzNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgp
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUs
IGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8g
anVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMg
J2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRo
ZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9t
IHRoaXMuCiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZh
bHVlVlJlZywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
QmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0
Y2g7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVn
LCB2YWx1ZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNt
YU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9k
ZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6
Ok5vdERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5k
ID0gZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0
dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0
ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4K
QEAgLTEzNTksMTQgKzE0NzQsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChj
b25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0
QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNh
bGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
MTM3NiwyNSArMTQ5NSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0
IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIz
OyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkp
OwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xNDA0LDcgKzE1MTcsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBA
IC0xNDQxLDIwICsxNTU0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IElu
c3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpz
dHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZS
ZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBK
SVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOwor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsx
NTg3LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5
SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
QEAgLTE0ODAsMjggKzE2MDcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNv
bnN0IElucwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dl
dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVk
LgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRo
dW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTUxMCwyNSArMTYzMSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBw
cm9maWxlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnNjcmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
cmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6Oklu
QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQpAQCAtMTUzNywxNSArMTY2NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFs
SW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0
ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5CeVZhbE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTE1NTYsNTkgKzE2ODgsNzAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVu
dEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwog
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1h
dGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9n
ZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5l
ZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUg
dGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5
cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1p
emUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNz
VHlwZSB0eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisK
KyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZp
cnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0SGFzUHJp
dmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIEFTU0VSVCh0eXBl
ID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFz
UHJpdmF0ZUJyYW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAgVU5VU0VEX1BBUkFN
KHByb3BlcnR5KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0gQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwog
CiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRl
eCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0g
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGlt
aXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVy
YXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1By
aXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMp
OwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2MSwyMSBA
QCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJy
YW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJy
YW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJp
dmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9w
ZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1l
ID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVC
cmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9
PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0
aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTY1Miw3ICsxNzg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2
YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVt
aXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9i
YXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDE5ICsxODAzLDIyIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2
YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29k
ZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlQnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNo
ZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewog
ICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qo
c2NyYXRjaEdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZT
RVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hH
UFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwg
V2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJl
Z1QwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
QEAgLTE2ODgsNiArMTgyOCw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVh
bFJlZ2kKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Cisg
ICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
QEAgLTE3MDEsNyArMTg0Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29u
c3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFu
dFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSwgcmVnVDEpOwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExl
eGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0xNzE1
LDcgKzE4NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAg
ICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAg
ICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSwgcmVnVDApOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUp
LCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTE3OTQsODcgKzE5MzUsMTA1IEBAIHZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZl
VHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
LSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVj
b2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7Cisg
ICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUlu
ZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRh
ZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8g
SWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxs
IGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAot
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4
aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90
IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0
YWRhdGEpOworICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNk
ZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2Nv
cGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5l
cmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9z
Y29wZSBDbG9zdXJlVmFyIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5F
UkFUT1IKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2Vu
ZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywg
IkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzIik7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2Vu
ZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2
ZV9zY29wZSBnZW5lcmljIik7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BS
ID0gcmVnVDY7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUNTsKIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7
CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BS
KTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJh
dG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAo
cHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZt
LmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2Zp
bGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAg
ICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrc0dlbmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRD
VElTdHViKGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2
bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24g
Y2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6
Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8g
aW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29t
aW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBp
bmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRH
UFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVz
b2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJu
QWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zm
c2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0
YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBt
ZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdFZh
ckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgeworICAgIGF1dG8gZG9WYXJJbmpl
Y3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGds
b2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgaWYgKCFuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9i
amVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIg
PSByZWdUNDsKLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0K
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9G
KEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hw
b2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7
CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdU
MywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJl
Z1QwKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBkb1Zhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgaml0Lm1vdmUo
c2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsK
IAotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgp
OworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAg
ICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZz
ZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
cmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwg
cmVnVDApOworICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwor
ICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsK
IAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBA
IC0xODgyLDEyICsyMDQxLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6
OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5n
RXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5v
dEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9m
R2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUo
Z2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSks
IGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxP
YmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBv
Y2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubW92ZShnbG9iYWxPYmplY3RHUFIsIHJl
Z1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEgKzIwNTYs
MTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAg
ICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBjb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xv
YmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
R2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDAp
OworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2Jq
ZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkw
OSw3ICsyMDY4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgot
ICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBS
ZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyAr
MjA3OCw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
ICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSks
IHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENv
ZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgq
cmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOwor
ICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZl
VHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAgICAgICBq
aXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVU
eXBlKCkpLCByZWdUMCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5s
aW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAg
ICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAg
ICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAg
ICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSk7CisgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAg
ICAgbm90Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0Q2Fz
ZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOwor
ICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAg
ICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAg
ICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9F
bmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0
Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZm
ZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtO
YW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2
ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9y
ZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwK
LSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNv
bHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2
bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVz
b2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwK
LSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJB
VE9SKQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2Vu
ZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVu
Y3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNl
CiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVj
dCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERG
Ry9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVj
dHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFz
dCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0
KQpAQCAtMjA2NSw2ICsyMTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpcwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKQEAgLTIxNzgsNyArMjMwMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTIx
ODYsOSArMjMwOCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24K
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0
YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
LCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogfQogCiAjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTIxOTYs
NDEgKzIzMTgsNTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZl
VHlwZSgpOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsK
IAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2Rl
SW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5l
cmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRG
cm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29w
ZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6
OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAg
IH07CisKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZt
KSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwg
c3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAg
ICB9OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFs
VmFyKSB7Ci0gICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJv
bVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxv
Y2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRh
ZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1Io
cmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwK
LSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAg
ICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1Ip
Ci0gICAgICAgIH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJl
VmFyKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsK
KyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0g
dm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXRO
YWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtLCBz
dGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtO
YW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4g
b25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCkBAIC0yMjM5LDk5ICsyMzcwLDg4
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICB1c2luZyBN
ZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJl
Z1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVz
b2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwot
ICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7
CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xv
d0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJS
ZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCksIHJl
Z1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgYXV0byBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSKSB7CisgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1Qw
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1Qx
KSk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSkpOwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsm
XSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rp
b25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBp
ZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwot
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdU
Myk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1Qz
LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zh
ckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0g
ICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BS
UmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQp
LCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJS
ZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCks
IHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRvIGVt
aXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BS
KSB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwot
ICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBh
ZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3Bl
cmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdU
MCk7CisgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwor
ICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSksIHJlZ1QwKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewor
ICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAg
ICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMg
dmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGlu
ZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRs
ZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZh
ciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcg
YnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVz
IGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dCA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsK
ICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAgICAg
ICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsK
LSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29k
ZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAg
IHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5q
aXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAg
ICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBD
b2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAgICAg
IH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgp
KSwgb2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAg
ICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9m
ZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAg
ICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAg
ICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRP
ZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJ
bW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdp
dGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0
T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAg
ICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zm
c2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZz
ZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGJh
c2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAg
aml0Lm5lZzMyKG9mZnNldCk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIob2Zm
c2V0LCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwg
b2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAg
ICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJh
bmQpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
b3BlcmFuZCkpLCByZWdUMyk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVn
VDMpOwogICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVt
cCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZh
cjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQxLDg2ICsyNDYxLDY1IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAK
LSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsK
LSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
ID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2Fs
VmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlw
ZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8
fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5k
MzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJl
c29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5h
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5s
aW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAg
ICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsK
KyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFs
VmFyLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKwor
ICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAg
ICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVt
cCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0gICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAg
ICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNraXBUb0VuZC5s
aW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0
KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNr
ZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSksIHJlZ1QxKTsKKyAg
ICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVmFsdWVQcm9maWxlOjpvZmZzZXRP
ZkZpcnN0QnVja2V0KCkpKTsKKyAgICAvL2ppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFk
YXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNl
dE9mRmlyc3RCdWNrZXQoKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05h
bWUpOwogfQogCi0jZGVmaW5lIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2
ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9n
ZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBc
Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVz
b2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQo
dm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHJl
c29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsg
XAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VO
RVJBVE9SKQotI3VuZGVmIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhp
cyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJl
Y2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShY
ODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjQ0OSw3ICsyNTQ4
LDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIENhbGwg
b3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2VwdGlv
bkNoZWNrID0gaml0LmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAgICBq
aXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgT0JK
RUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX3Byb2ZpbGUpKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOworICAgIGppdC5zdG9y
ZTY0KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBWYWx1ZVByb2Zp
bGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOworICAgIC8vaml0LnN0b3JlNjQocmVnVDAsIEFk
ZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0
YSwgbV9wcm9maWxlKSkpOwogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1i
ZXJUYWcpLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2XzY0KQpA
QCAtMjQ3MSw4NiArMjU3Miw3OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklU
OjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRy
KHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
YXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2lu
dFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihh
ZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNl
dCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsK
LX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVj
b2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2Rl
KTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUu
c2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkg
eworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAg
IHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAg
ICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsg
Ly8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNh
Y2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlv
bmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rp
b24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24g
c2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9i
YWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFu
ZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0
cnVjdHVyZSgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCByZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8s
IHJlZ1QxKSk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKSk7CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QyKTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQp
PihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7Cisg
ICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsK
IAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdU
MSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7
CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIs
IEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNl
dCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdU
MSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7CisgICAgICAgICAgICAvLyBPT1BTOiB3b3VsZCBiZSBuaWNlIHRvIGhhdmUg
YSB2ZXJzaW9uIHRoYXQgdG9vayBHUFJSZWdzIGluc3RlYWQgb2YgVlJzCisgICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAg
IGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAg
ICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9k
ZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKyAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBl
LCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAg
ICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlh
bGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewog
ICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNl
IHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNh
bGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5t
X3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQ
dXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZh
bHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworCisgICAgICAg
ICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdE5vdGlm
eVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3Mo
cmVnVDApKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEg
dmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIHZhbHVlLgorICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJl
VmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQp
OworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRT
ZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAg
ICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwg
QmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUg
bmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIG93bmVyL3ZhbHVl
LgogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAg
LTI1NjQsNTggKzI2NTgsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBl
IGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0
IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAgICAg
IGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZhci8g
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUgdGhp
bmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBwcm92
ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIsCisg
ICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIKKyAgICAv
LyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBpcyBm
aXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAvLyBt
YXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsKKyAg
ICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikKKyAg
ICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxl
ZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAg
ICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZWxzZSB7
CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOwog
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7
IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGlu
ayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIs
IHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmso
dGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAgICAg
ICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBk
ZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBi
cmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTggKzI3MTIsMjEgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+
KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVj
b2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsK
KyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgaWYg
KHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElmIGFueSBs
aW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENvZGVCbG9j
a3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFyLgogICAg
ICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vy
cm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2UgewogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1bWVudEdQ
UjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09
IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIEFT
U0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkg
PT0gY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAgLTI2NTIsNyArMjc0Myw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2go
WDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjcwMSw3ICsyNzkyLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFy
Z3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAK
QEAgLTI3NTksNyArMjg1MCw2IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCog
b3duZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpAQCAtMjc2
Nyw3ICsyODU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFs
RmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3ODksNyArMjg3
OSw2IEBAIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3AKIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAgLTI4
MDUsNyArMjg5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAK
ICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBj
b21tb24gbW9kZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBw
cm9maWxlIGl0IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0
YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7Cisg
ICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVyYXRv
ck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkg
ewogICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOwogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVy
YXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKCh+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSAmIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKQEAgLTI4NDcsNzgg
KzI5MzYsODcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9t
b2RlOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0
IGRvbmVDYXNlczsKIAotICAgIGF1dG8gcmVzdWx0R1BSID0gcmVnVDA7CisgICAgY29uc3RleHBy
IEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6
cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFz
ZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6
c2NyYXRjaDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVy
YXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVn
VDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG1vZGUsIHNjcmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5TmFtZSwgcHJvcGVydHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFk
ZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZF
bnVtZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0
Y2gyKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgT3BFbnVtZXJh
dG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50
MzIgZW5jb2RlZCB2YWx1ZS4KLSAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2Rl
KSk7CisgICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVy
bywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4
ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAg
Ly8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0
dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRj
aDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkp
OwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5kZXgsIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3Jh
dGNoMik7CiAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2Fj
aGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAg
b3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsK
LSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQ
Uik7Ci0KKyAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
c2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0
Y2gyLCBzY3JhdGNoMik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwg
VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BS
KTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQn
cyBvdXQgb2YgbGluZQogICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwot
ICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAg
c2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIo
QWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBz
aWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRw
dHJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9m
TGluZU9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNl
R1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0
R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNt
YXRjaC5saW5rKHRoaXMpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1l
dGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0
ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2Rl
U3RydWN0dXJlTWlzbWF0Y2gpLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFk
YXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0
dXJlTW9kZS5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRl
eGVkTW9kZSkpOworICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNj
cmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSkpOwogICAgIC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAgICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7
Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdU
Mik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BS
LCBzY3JhdGNoMSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBkb25lQ2FzZXMubGluayh0
aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IApAQCAtMjkyNywxMCArMzAyNSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9y
X2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklU
OjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5j
dGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVu
YW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNf
cHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0
IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjkzOSw3ICszMDM2LDkgQEAgdm9pZCBK
SVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChy
ZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOwor
ICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNl
dE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCByZWdUMSk7
CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAtMzAyOCw2ICszMTI3LDEzIEBAIHZv
aWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKICAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVy
KEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBi
YXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNoR1BSKG93bmVyKSk7CisgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRo
aXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxs
TGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxp
bmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0lu
Zm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAgIHJldmVydENhbGwo
dm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5y
ZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9y
Q2hlY2twb2ludC5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNoZWNrcG9p
bnRPU1JFeGl0U2lkZVN0YXRlLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2lu
Y2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgpAQCAtMTUzLDcgKzE1NCw3IEBAIGlubGluZSBK
U1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWwKICAgICB9IHdoaWxlIChmYWxzZSkKIAog
I2RlZmluZSBMTElOVF9QUk9GSUxFX1ZBTFVFKHZhbHVlKSBkbyB7IFwKLSAgICAgICAgYnl0ZWNv
ZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX3Byb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6
ZW5jb2RlKHZhbHVlKTsgXAorICAgICAgICBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1f
cHJvZmlsZS0+bV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsgXAogICAgIH0g
d2hpbGUgKGZhbHNlKQogCiAjZGVmaW5lIExMSU5UX0NBTExfRU5EX0lNUEwoY2FsbEZyYW1lLCBj
YWxsVGFyZ2V0LCBjYWxsVGFyZ2V0VGFnKSBcCkBAIC0zNzAsNiArMzcxLDE1IEBAIGlubGluZSBi
b29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYKICAgICAKICAgICBjb2RlQmxvY2stPnVw
ZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5q
aXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxC
YXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9j
aygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlKSB7CisgICAgICAgICAgICAvL2RhdGFMb2dMbigi
U2hhcmVkIHZpYSBMTEludCIpOworICAgICAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxp
bmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAg
ICAgIGNvZGVCbG9jay0+aml0TmV4dEludm9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRU
aHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxv
Y2ssICJkZWxheUpJVENvbXBpbGUiLCAoInRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRlciA9
ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBs
aWZ0ZWQuIik7CkBAIC04NjAsNyArODcwLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX2l0ZXJhdG9yXwogICAgIEpTVmFsdWUgcmVzdWx0ID0gcGVyZm9ybUxMSW50R2V0QnlJRChw
YywgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIGl0ZXJhdG9yLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
ZXh0LCBtZXRhZGF0YS5tX21vZGVNZXRhZGF0YSk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9O
KCk7CiAgICAgbmV4dFJlZ2lzdGVyID0gcmVzdWx0OwotICAgIGJ5dGVjb2RlLm1ldGFkYXRhKGNv
ZGVCbG9jaykubV9uZXh0UHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKKyAgICBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fbmV4dFByb2ZpbGUtPm1f
YnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIExMSU5UX0VORCgpOwog
fQogCkBAIC04ODAsNyArODkwLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2l0
ZXJhdG9yXwogICAgIEpTVmFsdWUgcmVzdWx0ID0gcGVyZm9ybUxMSW50R2V0QnlJRChwYywgY29k
ZUJsb2NrLCBnbG9iYWxPYmplY3QsIGl0ZXJhdG9yUmV0dXJuLCB2bS5wcm9wZXJ0eU5hbWVzLT5k
b25lLCBtZXRhZGF0YS5tX2RvbmVNb2RlTWV0YWRhdGEpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQ
VElPTigpOwogICAgIGRvbmVSZWdpc3RlciA9IHJlc3VsdDsKLSAgICBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spLm1fZG9uZVByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2RvbmVQcm9maWxl
LT5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICBMTElOVF9FTkQo
KTsKIH0KIApAQCAtODk3LDcgKzkwNyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9pdGVyYXRvcl8KICAgICBKU1ZhbHVlIHJlc3VsdCA9IHBlcmZvcm1MTEludEdldEJ5SUQocGMs
IGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBpdGVyYXRvclJldHVybiwgdm0ucHJvcGVydHlOYW1l
cy0+dmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVNb2RlTWV0YWRhdGEpOwogICAgIExMSU5UX0NIRUNL
X0VYQ0VQVElPTigpOwogICAgIHZhbHVlUmVnaXN0ZXIgPSByZXN1bHQ7Ci0gICAgYnl0ZWNvZGUu
bWV0YWRhdGEoY29kZUJsb2NrKS5tX3ZhbHVlUHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fdmFs
dWVQcm9maWxlLT5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICBM
TElOVF9FTkQoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxpdHlK
dW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNv
ZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8l
b3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1l
dGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQot
ICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFBy
b2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBlbmQKLQogICAg
ICAgICBtZXRhZGF0YSh0MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAg
IGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBAIC0xMDIzLDcg
KzEwMTksNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAg
ICAgICMgTWV0YWRhdGEgaW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRlZ2VyT3BlcmF0
aW9uKHQyLCAuc2xvdykKICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAs
IDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAg
IHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0
MSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4OSwyMiArMTA4
NSwxOCBAQCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAKLSAgICBtYWNy
byB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpN
ZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQot
ICAgIGVuZAotCiAgICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQsIHQwKQog
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5lcSB0
MSwgSW50MzJUYWcsIC5vcE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYs
IC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRo
UHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQ
cm9maWxlSW50LCB0NSwgdDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdhdGVT
cmNOb3RJbnQ6CiAgICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3Jp
IDB4ODAwMDAwMDAsIHQxCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJl
cikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVt
YmVyLCB0NSwgdDMpCiAgICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTEx
MTUsMTAgKzExMDcsNiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2Rl
TmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9wZXJh
dGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3Ry
dWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAg
ICAgbWFjcm8gYXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6
bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCiAgICAg
ICAgIGdldChtX3JocywgdDIpCiAgICAgICAgIGdldChtX2xocywgdDApCkBAIC0xMTI2LDcgKzEx
MTQsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJp
bmVxIHQyLCBJbnQzMlRhZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcs
IC5vcDJOb3RJbnQKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAg
ICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxl
SW50SW50LCB0NSwgdDIpCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJP
cGVyYXRpb25BbmRTdG9yZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3BhdGNo
KCkKQEAgLTExMzYsMTIgKzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNv
ZGVOYW1lLCBvcAogICAgICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAgICAgICAgYmli
IHQzLCBMb3dlc3RUYWcsIC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAgICAgYmluZXEgdDMsIElu
dDMyVGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50
KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFBy
b2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgICAgICBq
bXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAgICAgICAgZmlp
MmQgdDEsIHQzLCBmdDEKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51
bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJp
dGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAg
ICAgICBnZXQobV9kc3QsIHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1Myw3
ICsxMTQxLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAg
ICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgb3Bl
cmFuZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAg
YmlhIHQzLCBMb3dlc3RUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2Zp
bGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1
Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQw
CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJhdGlvbihmdDEs
IGZ0MCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpA
QCAtNjgsMTUgKzY4LDE2IEBAIG1hY3JvIG1ha2VSZXR1cm5Qcm9maWxlZChvcGNvZGVTdHJ1Y3Qs
IGcKICAgICBmbihtYWNybyAodmFsdWUpCiAgICAgICAgIG1vdmUgdmFsdWUsIHQzCiAgICAgICAg
IG1ldGFkYXRhKHQxLCB0MikKLSAgICAgICAgdmFsdWVQcm9maWxlKG9wY29kZVN0cnVjdCwgbV9w
cm9maWxlLCB0MSwgdDMpCisgICAgICAgIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIG1fcHJv
ZmlsZSwgdDEsIHQzLCB0MikKICAgICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAgICAgc3RvcmVx
IHQzLCBbY2ZyLCB0MSwgOF0KICAgICAgICAgZGlzcGF0Y2goKQogICAgIGVuZCkKIGVuZAogCi1t
YWNybyB2YWx1ZVByb2ZpbGUob3Bjb2RlU3RydWN0LCBwcm9maWxlTmFtZSwgbWV0YWRhdGEsIHZh
bHVlKQotICAgIHN0b3JlcSB2YWx1ZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolcHJvZmls
ZU5hbWUlLm1fYnVja2V0c1ttZXRhZGF0YV0KK21hY3JvIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1
Y3QsIHByb2ZpbGVOYW1lLCBtZXRhZGF0YSwgdmFsdWUsIHNjcmF0Y2gpCisgICAgbG9hZHAgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolcHJvZmlsZU5hbWUlW21ldGFkYXRhXSwgc2NyYXRjaAor
ICAgIHN0b3JlcSB2YWx1ZSwgVmFsdWVQcm9maWxlOjptX2J1Y2tldHNbc2NyYXRjaF0KIGVuZAog
CiAjIEFmdGVyIGNhbGxpbmcsIGNhbGxpbmcgYnl0ZWNvZGUgaXMgY2xhaW1pbmcgaW5wdXQgcmVn
aXN0ZXJzIGFyZSBub3QgdXNlZC4KQEAgLTg3LDcgKzg4LDcgQEAgbWFjcm8gZGlzcGF0Y2hBZnRl
ckNhbGwoc2l6ZSwgb3Bjb2RlU3RydQogICAgIGdldChzaXplLCBvcGNvZGVTdHJ1Y3QsIGRzdFZp
cnR1YWxSZWdpc3RlciwgdDEpCiAgICAgc3RvcmVxIHIwLCBbY2ZyLCB0MSwgOF0KICAgICBtZXRh
ZGF0YShzaXplLCBvcGNvZGVTdHJ1Y3QsIHQyLCB0MSkKLSAgICB2YWx1ZVByb2ZpbGUob3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCB0MiwgcjApCisgICAgdmFsdWVQcm9maWxlKG9wY29k
ZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgdDIsIHIwLCB0MykKICAgICBkaXNwYXRjaCgpCiBl
bmQKIApAQCAtNDQxLDggKzQ0MiwxMyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgp
CiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQogICAgICAgICAgICAgY0NhbGwyKF9sbGludF9sb29w
X29zcikKICAgICAgICAgICAgIGJ0cHogcjAsIC5yZWNvdmVyCi0KICAgICAgICAgICAgIG1vdmUg
cjEsIHNwCisKKyAgICAgICAgICAgICMgQmFzZWxpbmUgdXNlcyBMTEludCdzIFBCIHJlZ2lzdGVy
IGZvciBpdHMgSklUIGNvbnN0YW50IHBvb2wuCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tb
Y2ZyXSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9qaXREYXRhW1BCXSwgUEIK
KyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6SklURGF0YTo6bV9qaXRDb25zdGFudFBvb2xb
UEJdLCBQQgorCiAgICAgICAgICAgICBpZiBBUk02NEUKICAgICAgICAgICAgICAgICBsZWFwIEpT
Q0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25z
dGV4cHIgR2F0ZTo6bG9vcE9TUkVudHJ5KSAqIFB0clNpemUsIGEyCiAgICAgICAgICAgICAgICAg
am1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKQEAgLTEwNTYs
MTAgKzEwNjIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAK
IG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikK
ICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFj
cm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjpt
X2JpdHNbdDJdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAg
ICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpAQCAt
MTA2OSw3ICsxMDcxLDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBp
bgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51bWJl
clRhZywgdDEKICAgICAgICAgc3RvcmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRl
QXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFBy
b2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAgZGlz
cGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMTM0LDExICsxMTM2LDYgQEAgZW5kKQogCiAKIGxs
aW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwg
ZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2Zp
bGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFBy
b2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAgZ2V0
KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMp
CiAgICAgbWV0YWRhdGEodDEsIHQyKQpAQCAtMTE0NiwxMiArMTE0MywxMiBAQCBsbGludE9wV2l0
aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwg
Lm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAgIHVw
ZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFBy
b2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgIHJldHVybih0MykK
IC5vcE5lZ2F0ZU5vdEludDoKICAgICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNsb3cK
ICAgICB4b3JxIDB4ODAwMDAwMDAwMDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUo
QXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRl
LCBBcml0aFByb2ZpbGVOdW1iZXIsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0
ZVNsb3c6CkBAIC0xMTY0LDEwICsxMTYxLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShv
cGNvZGVOYW1lLCBvcAogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBv
cGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQogICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0eXBl
KQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0K
ICAgICAgICAgZ2V0KG1fcmhzLCB0MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCkBAIC0xMTc3LDcgKzExNzAsNyBA
QCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdldCht
X2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5zbG93
LCB0MikKIAotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0
NSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTg3LDEw
ICsxMTgwLDEwIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAg
ICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRhZywg
dDEKICAgICAgICAgZnEyZCB0MSwgZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVt
YmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0MikKICAgICAgICAgam1wIC5vcDFOb3RJ
bnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9m
aWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3Ry
dWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0MikKICAgICAgICAgY2kyZHMgdDEsIGZ0
MQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEyMDQs
OSArMTE5Nyw5IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKIAog
ICAgIC5vcDJOb3RJbnQ6CiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFu
IGludCwgdGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KLSAgICAgICAgZ2V0KG1fZHN0LCB0
MikKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBwcm9maWxlKEFy
aXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9w
Y29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDIpCisgICAgICAgIGdldCht
X2RzdCwgdDIpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcs
IHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQpAQCAtMTUwOSw3ICsxNTAyLDcgQEAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF9nZXRfYnlfaWRfZGlyZWN0LAogICAgIGJpbmVxIHQwLCB0MSwgLm9wR2V0
QnlJZERpcmVjdFNsb3cKICAgICBsb2FkaSBPcEdldEJ5SWREaXJlY3Q6Ok1ldGFkYXRhOjptX29m
ZnNldFt0Ml0sIHQxCiAgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQw
KQotICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5SWREaXJlY3QsIG1fcHJvZmlsZSwgdDIsIHQwKQor
ICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5SWREaXJlY3QsIG1fcHJvZmlsZSwgdDIsIHQwLCB0MSkK
ICAgICByZXR1cm4odDApCiAKIC5vcEdldEJ5SWREaXJlY3RTbG93OgpAQCAtMTUyOSw3ICsxNTIy
LDcgQEAgbWFjcm8gcGVyZm9ybUdldEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LAogICAgIGJpbmVx
IHQwLCB0MSwgc2xvd0xhYmVsCiAgICAgbG9hZGlzICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
JW1vZGVNZXRhZGF0YU5hbWUlLmRlZmF1bHRNb2RlLmNhY2hlZE9mZnNldFt0Ml0sIHQxCiAgICAg
bG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQwKQotICAgIHZhbHVlUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIHQyLCB0MCkKKyAgICB2YWx1ZVByb2Zp
bGUob3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCB0MiwgdDAsIHQxKQogICAgIHJldHVy
bih0MCkKIAogLm9wR2V0QnlJZFByb3RvTG9hZDoKQEAgLTE1NDAsNyArMTUzMyw3IEBAIG1hY3Jv
IHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwKICAgICBsb2FkaXMgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRhTmFtZSUucHJvdG9Mb2FkTW9kZS5jYWNoZWRP
ZmZzZXRbdDJdLCB0MQogICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6JW1vZGVN
ZXRhZGF0YU5hbWUlLnByb3RvTG9hZE1vZGUuY2FjaGVkU2xvdFt0Ml0sIHQzCiAgICAgbG9hZFBy
b3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQwKQotICAgIHZhbHVlUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIHQyLCB0MCkKKyAgICB2YWx1ZVByb2ZpbGUob3Bj
b2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCB0MiwgdDAsIHQxKQogICAgIHJldHVybih0MCkK
IAogLm9wR2V0QnlJZEFycmF5TGVuZ3RoOgpAQCAtMTU1MywxNCArMTU0NiwxNCBAQCBtYWNybyBw
ZXJmb3JtR2V0QnlJREhlbHBlcihvcGNvZGVTdHJ1Y3QsCiAgICAgbG9hZGkgLXNpemVvZiBJbmRl
eGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QwXSwg
dDAKICAgICBiaWx0IHQwLCAwLCBzbG93TGFiZWwKICAgICBvcnEgbnVtYmVyVGFnLCB0MAotICAg
IHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIHQyLCB0MCkKKyAg
ICB2YWx1ZVByb2ZpbGUob3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCB0MiwgdDAsIHQx
KQogICAgIHJldHVybih0MCkKIAogLm9wR2V0QnlJZFVuc2V0OgogICAgIGxvYWRpIEpTQ2VsbDo6
bV9zdHJ1Y3R1cmVJRFt0M10sIHQxCiAgICAgbG9hZGkgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjolbW9kZU1ldGFkYXRhTmFtZSUudW5zZXRNb2RlLnN0cnVjdHVyZUlEW3QyXSwgdDAKICAgICBi
aW5lcSB0MCwgdDEsIHNsb3dMYWJlbAotICAgIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHZh
bHVlUHJvZmlsZU5hbWUsIHQyLCBWYWx1ZVVuZGVmaW5lZCkKKyAgICB2YWx1ZVByb2ZpbGUob3Bj
b2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCB0MiwgVmFsdWVVbmRlZmluZWQsIHQxKQogICAg
IHJldHVybihWYWx1ZVVuZGVmaW5lZCkKIAogZW5kCkBAIC0xNTc3LDcgKzE1NzAsNyBAQCBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV9pZCwgT3BHZXRCCiAub3NyUmV0dXJuUG9pbnQ6CiAg
ICAgZ2V0dGVyU2V0dGVyT1NSRXhpdFJldHVyblBvaW50KG9wX2dldF9ieV9pZCwgc2l6ZSkKICAg
ICBtZXRhZGF0YSh0MiwgdDMpCi0gICAgdmFsdWVQcm9maWxlKE9wR2V0QnlJZCwgbV9wcm9maWxl
LCB0MiwgcjApCisgICAgdmFsdWVQcm9maWxlKE9wR2V0QnlJZCwgbV9wcm9maWxlLCB0MiwgcjAs
IHQzKQogICAgIHJldHVybihyMCkKIAogZW5kKQpAQCAtMTY5OCw3ICsxNjkxLDcgQEAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfdmFsLCBPcEdldAogICAgIG1hY3JvIGZpbmlzaEdldEJ5
VmFsKHJlc3VsdCwgc2NyYXRjaCkKICAgICAgICAgZ2V0KG1fZHN0LCBzY3JhdGNoKQogICAgICAg
ICBzdG9yZXEgcmVzdWx0LCBbY2ZyLCBzY3JhdGNoLCA4XQotICAgICAgICB2YWx1ZVByb2ZpbGUo
T3BHZXRCeVZhbCwgbV9wcm9maWxlLCB0NSwgcmVzdWx0KQorICAgICAgICB2YWx1ZVByb2ZpbGUo
T3BHZXRCeVZhbCwgbV9wcm9maWxlLCB0NSwgcmVzdWx0LCBzY3JhdGNoKQogICAgICAgICBkaXNw
YXRjaCgpCiAgICAgZW5kCiAKQEAgLTE3NTksNyArMTc1Miw3IEBAIGxsaW50T3BXaXRoTWV0YWRh
dGEob3BfZ2V0X2J5X3ZhbCwgT3BHZXQKIAogLm9wR2V0QnlWYWxEb25lOgogICAgIHN0b3JlcSB0
MiwgW2NmciwgdDAsIDhdCi0gICAgdmFsdWVQcm9maWxlKE9wR2V0QnlWYWwsIG1fcHJvZmlsZSwg
dDUsIHQyKQorICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5VmFsLCBtX3Byb2ZpbGUsIHQ1LCB0Miwg
dDMpCiAgICAgZGlzcGF0Y2goKQogCiAub3BHZXRCeVZhbE5vdEluZGV4ZWRTdG9yYWdlOgpAQCAt
MTc3Miw3ICsxNzY1LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfdmFsLCBPcEdl
dAogLm9zclJldHVyblBvaW50OgogICAgIGdldHRlclNldHRlck9TUkV4aXRSZXR1cm5Qb2ludChv
cF9nZXRfYnlfdmFsLCBzaXplKQogICAgIG1ldGFkYXRhKHQ1LCB0MikKLSAgICB2YWx1ZVByb2Zp
bGUoT3BHZXRCeVZhbCwgbV9wcm9maWxlLCB0NSwgcjApCisgICAgdmFsdWVQcm9maWxlKE9wR2V0
QnlWYWwsIG1fcHJvZmlsZSwgdDUsIHIwLCB0MikKICAgICByZXR1cm4ocjApCiAKIGVuZCkKQEAg
LTE3OTQsNyArMTc4Nyw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X3ByaXZhdGVfbmFt
ZSwKIAogICAgIGxvYWRpIE9wR2V0UHJpdmF0ZU5hbWU6Ok1ldGFkYXRhOjptX29mZnNldFt0Ml0s
IHQxCiAgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQwKQotICAgIHZh
bHVlUHJvZmlsZShPcEdldFByaXZhdGVOYW1lLCBtX3Byb2ZpbGUsIHQyLCB0MCkKKyAgICB2YWx1
ZVByb2ZpbGUoT3BHZXRQcml2YXRlTmFtZSwgbV9wcm9maWxlLCB0MiwgdDAsIHQzKQogICAgIHJl
dHVybih0MCkKIAogLm9wR2V0UHJpdmF0ZU5hbWVTbG93OgpAQCAtMjY2Miw3ICsyNjU1LDcgQEAg
bGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfZnJvbV9zY29wZSwgTwogICAgIG1hY3JvIGdldFBy
b3BlcnR5KCkKICAgICAgICAgbG9hZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJh
bmRbdDVdLCB0MQogICAgICAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwg
dDIpCi0gICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEZyb21TY29wZSwgbV9wcm9maWxlLCB0NSwg
dDIpCisgICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEZyb21TY29wZSwgbV9wcm9maWxlLCB0NSwg
dDIsIHQzKQogICAgICAgICByZXR1cm4odDIpCiAgICAgZW5kCiAKQEAgLTI2NzAsMTQgKzI2NjMs
MTQgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfZnJvbV9zY29wZSwgTwogICAgICAgICBs
b2FkcCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om1fb3BlcmFuZFt0NV0sIHQwCiAgICAgICAg
IGxvYWRxIFt0MF0sIHQwCiAgICAgICAgIHRkekNoZWNrSWZOZWNlc3NhcnkodDApCi0gICAgICAg
IHZhbHVlUHJvZmlsZShPcEdldEZyb21TY29wZSwgbV9wcm9maWxlLCB0NSwgdDApCisgICAgICAg
IHZhbHVlUHJvZmlsZShPcEdldEZyb21TY29wZSwgbV9wcm9maWxlLCB0NSwgdDAsIHQzKQogICAg
ICAgICByZXR1cm4odDApCiAgICAgZW5kCiAKICAgICBtYWNybyBnZXRDbG9zdXJlVmFyKCkKICAg
ICAgICAgbG9hZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MQog
ICAgICAgICBsb2FkcSBKU0xleGljYWxFbnZpcm9ubWVudF92YXJpYWJsZXNbdDAsIHQxLCA4XSwg
dDAKLSAgICAgICAgdmFsdWVQcm9maWxlKE9wR2V0RnJvbVNjb3BlLCBtX3Byb2ZpbGUsIHQ1LCB0
MCkKKyAgICAgICAgdmFsdWVQcm9maWxlKE9wR2V0RnJvbVNjb3BlLCBtX3Byb2ZpbGUsIHQ1LCB0
MCwgdDMpCiAgICAgICAgIHJldHVybih0MCkKICAgICBlbmQKIApAQCAtMzE1OSw3ICszMTUyLDcg
QEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9lbnVtZXJhdG9yX2dldF9ieQogICAgIGxvYWRxIGNv
bnN0ZXhwciAoKG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKVt0MCwgdDIsIDhdLCB0MgogCiAuZG9uZToKLSAgICB2YWx1ZVBy
b2ZpbGUoT3BFbnVtZXJhdG9yR2V0QnlWYWwsIG1fcHJvZmlsZSwgdDUsIHQyKQorICAgIHZhbHVl
UHJvZmlsZShPcEVudW1lcmF0b3JHZXRCeVZhbCwgbV9wcm9maWxlLCB0NSwgdDIsIHQzKQogICAg
IHJldHVybih0MikKIAogLmdldFNsb3dQYXRoOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgyMDE2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDEyLDcgKzE0MTIsOCBAQCBlbmQKIAogbWFjcm8gY2hlY2tT
d2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlvbikKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
dDAKLSAgICBiYWRkaXMgaW5jcmVtZW50LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRl
ciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCisg
ICAgbG9hZHAgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDBdLCB0MAorICAgIGJh
ZGRpcyBpbmNyZW1lbnQsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwg
LmNvbnRpbnVlCiAgICAgYWN0aW9uKCkKICAgICAuY29udGludWU6CiBlbmQKQEAgLTE0OTUsNyAr
MTQ5Niw4IEBAIG1hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2MKICAgICBj
b2RlQmxvY2tHZXR0ZXIodDEpCiAgICAgY29kZUJsb2NrU2V0dGVyKHQxKQogICAgIGlmIG5vdCAo
Q19MT09QIG9yIENfTE9PUF9XSU4pCi0gICAgICAgIGJhZGRpcyA1LCBDb2RlQmxvY2s6Om1fbGxp
bnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3Qx
XSwgLmNvbnRpbnVlCisgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3Vu
dGVyW3QxXSwgdDAKKyAgICAgICAgYmFkZGlzIDUsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6
bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgICAgIGlmIEpTVkFMVUU2NAogICAgICAgICAg
ICAgbW92ZSBjZnIsIGEwCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQpAQCAtMjU1Niw2ICsyNTU4
LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNybyB1cGRh
dGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQor
ICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRh
dGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0K
K2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBl
LCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
YXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQg
dGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNob3VsZCBh
bHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0X1dJTgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlk
ZW50aWZpZXIuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCwx
MCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsKIAogICAg
IHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChKU0NlbGwq
IGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRp
ZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmluZ0ltcGwq
KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlm
aWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwg
VW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZp
ZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3Qml0cyh1
aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdCaXRzKTsg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlm
aWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVu
dGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJZGVudGlm
aWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVy
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENv
ZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBB
U1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVpZCkpOwog
ICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyODIwMTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJD
YWNoZWRUeXBlcy5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
QnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDYWNoZUVycm9yLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBQUk9G
SUxFX1ZBTFVFX0lOKHZhbHVlX18sIG1fcHJvZmlsZSkKIAogI2RlZmluZSBQUk9GSUxFX1ZBTFVF
X0lOKHZhbHVlLCBwcm9maWxlTmFtZSkgZG8geyBcCi0gICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRh
KGNvZGVCbG9jaykucHJvZmlsZU5hbWUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlKTsgXAorICAgICAgICBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLnByb2ZpbGVOYW1l
LT5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOyBcCiAgICAgfSB3aGlsZSAo
ZmFsc2UpCiAKIHN0YXRpYyB2b2lkIHRocm93QXJpdHlDaGVja1N0YWNrT3ZlcmZsb3dFcnJvcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUaHJvd1Njb3BlJiBzY29wZSkKQEAgLTQ4MCw3
ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYg
RU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhP
cChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBv
cGVyYW5kKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9h
cml0aFByb2ZpbGU7CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEu
bV9hcml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFT
U0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5o
CShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQog
ICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0
YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7
IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0
cnVjdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVj
dXRhYmxlQmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYgKzM4NSw5IEBAIHN0YXRpYyB2b2lk
IG92ZXJyaWRlRGVmYXVsdHMoKQogICAgICAgICBPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRp
bWl6ZUFmdGVyV2FybVVwKCkgPSAxNTAwOwogICAgICAgICBPcHRpb25zOjp0aHJlc2hvbGRGb3JP
TUdPcHRpbWl6ZVNvb24oKSA9IDEwMDsKICAgICB9CisKKyAgICAvLyBPT1BTCisgICAgLy9PcHRp
b25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yQmFzZWxpbmUo
KSA9IDQ1MDsKIH0KIAogc3RhdGljIHZvaWQgY29ycmVjdE9wdGlvbnMoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyODIwMTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDksNyArMzA5LDYgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1v
cnkoKTsKICAgICB2KEludDMyLCBldmFsVGhyZXNob2xkTXVsdGlwbGllciwgMTAsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1heGltdW1FdmFsQ2FjaGVhYmxlU291cmNlTGVu
Z3RoLCAyNTYsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKLSAgICB2KEJvb2wsIHJhbmRvbWl6
ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2lu
dHNGb3JCYXNlbGluZSwgMTAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJbnQzMiwgbWF4
aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvclVwcGVyVGllcnMsIDUwMDAw
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkBAIC01MzIsNiArNTMxLDcgQEAgYm9vbCBjYW5V
c2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZURhdGFJQywgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDSW5PcHRpbWl6aW5nSklU
LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNTaGFyaW5n
LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB1c2VCYXNlbGluZUpJVENv
ZGVTaGFyaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgLyogRmVhdHVy
ZSBGbGFncyAqL1wKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5Niw5ICszOTYsMTYgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9y
RXhlY3V0aQogICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCiAgICAgICAgIGNv
ZGVCbG9jay0+dmFsaWRhdGUoKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQorICAg
IGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5s
aW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICBjb2Rl
QmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VO
b25OdWxsKCkpOworCisgICAgICAgIC8vaWYgKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2so
KS0+aXNCdWlsdGluRnVuY3Rpb24oKSkKKyAgICAgICAgLy8gICAgZGF0YUxvZ0xuKCJTaGFyZWQg
YnVpbHRpbiEiKTsKKyAgICB9IGVsc2UgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpIHsKKyAgICAg
ICAgLy9pZiAoIWNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+aXNCdWlsdGluRnVuY3Rp
b24oKSkKKyAgICAgICAgLy8gICAgZGF0YUxvZ0xuKFJhd1BvaW50ZXIoY29kZUJsb2NrLT51bmxp
bmtlZENvZGVCbG9jaygpKSwgIjogIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkp
OwogICAgICAgICBzZXR1cExMSW50KGNvZGVCbG9jayk7Ci0gICAgZWxzZQorICAgIH0gZWxzZQog
ICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrKTsKIAogICAgIGluc3RhbGxDb2RlKHZtLCBj
b2RlQmxvY2ssIGNvZGVCbG9jay0+Y29kZVR5cGUoKSwgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlv
bktpbmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVy
VXBDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUxMSW50VGllclVwQ291bnRlci5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDkgKzUyLDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCgpCiAg
ICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAg
ICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVB
ZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRp
b25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0
aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9s
ZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0K
IAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtNjUs
OSArNjUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQogICAgIHsKICAgICAg
ICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0
TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpLCBudWxs
cHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JC
QlFPcHRpbWl6ZVNvb24oKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVz
aG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1p
emVTb29uKCkpOwogICAgIH0KIAogICAgIHN0cnVjdCBPU1JFbnRyeURhdGEgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCShyZXZpc2lv
biAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CiAKIFRpZXJVcENvdW50OjpUaWVyVXBDb3VudCgpCiB7Ci0gICAgc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwg
bnVsbHB0cik7CisgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09w
dGltaXplQWZ0ZXJXYXJtVXAoKSk7CiB9CiAKIFRpZXJVcENvdW50Ojp+VGllclVwQ291bnQoKSA9
IGRlZmF1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVw
Q291bnQuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVRpZXJVcENvdW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCh1aW50MzJfdCBmdW5jdGlvbkluZGV4KQog
ICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlv
bkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBhZnRlciB3YXJtLXVwLiIpOwotICAgICAgICBzZXRO
ZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgp
LCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZv
ck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0
aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCkBAIC05MCwxNCArOTAsMTQgQEAgcHVibGljOgog
ICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQog
ICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlv
bkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uIik7Ci0gICAgICAgIHNl
dE5ld1RocmVzaG9sZCgwLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKDApOwog
ICAgIH0KIAogICAgIHZvaWQgb3B0aW1pemVTb29uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAg
ICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0aW9u
SW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIHNvb24uIik7CiAgICAgICAgIC8vIEZJWE1FOiBOZWVk
IGFkanVzdG1lbnQgb25jZSB3ZSBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3YXNtIGZ1bmN0
aW9ucy4KLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09w
dGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICB2b2lkIHNldE9w
dGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCh1aW50MzJfdCBmdW5j
dGlvbkluZGV4LCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMjgy
MDE2KQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2
LDIwIEBAIHB1YmxpYzoKICAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEJhZyYgb3BlcmF0b3I9KEJhZzxULCBVPiYm
IG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHVud3JhcHBlZEhlYWQoKSA9PSBvdGhlci51bndy
YXBwZWRIZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAgQmFnIGRl
c3Ryb3k7CisgICAgICAgIGRlc3Ryb3kubV9oZWFkID0gdW53cmFwcGVkSGVhZCgpOworICAgICAg
ICBtX2hlYWQgPSBvdGhlci51bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG90aGVyLm1faGVhZCA9
IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIH5CYWcoKQog
ICAgIHsKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJl
c3MtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0
cwkocmV2aXNpb24gMjgyMDE2KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0
cwkod29ya2luZyBjb3B5KQpAQCAtNzcwLDE3ICs3NzAsMTggQEAgZW5kCiAKICMgRklYTUU6IG5l
ZWQgdG8gZml4IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg3MDMg
dG8gZW5hYmxlIHRoaXMgb24gTGludXgvTUlQUy4KIGRlZiBydW5CeXRlY29kZUNhY2hlSW1wbChv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMsICphZGRpdGlvbmFsRW52KQotICAgIGlmICgkaG9z
dE9TID09ICJkYXJ3aW4iKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGUi
Ci0gICAgZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAkYXJjaGl0ZWN0dXJlICE9ICJtaXBz
IikKLSAgICAgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlWFhYWFhYIgotICAgIGVs
c2UKLSAgICAgICAgc2tpcAotICAgICAgICByZXR1cm4KLSAgICBlbmQKKyAgICAjIE9PUFMKKyAg
ICAjaWYgKCRob3N0T1MgPT0gImRhcndpbiIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0
ZWNvZGUtY2FjaGUiCisgICAgI2Vsc2lmICgkaG9zdE9TID09ICJsaW51eCIgJiYgJGFyY2hpdGVj
dHVyZSAhPSAibWlwcyIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVY
WFhYWFgiCisgICAgI2Vsc2UKKyAgICAjICAgIHNraXAKKyAgICAjICAgIHJldHVybgorICAgICNl
bmQKIAotICAgIG9wdGlvbnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9OUyArIG9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMKLSAgICBh
ZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJi
eXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAq
dm1Db21tYW5kLCAkYmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxl
ciwgc2ltcGxlRXJyb3JIYW5kbGVyLCAqYWRkaXRpb25hbEVudikKKyAgICAjb3B0aW9ucyA9IEJB
U0VfT1BUSU9OUyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsg
JHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucworICAgICNhZGRSdW5Db21tYW5kKCJieXRlY29k
ZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhl
bHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5kLCAkYmVuY2htYXJr
LnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVy
LCAqYWRkaXRpb25hbEVudikKIGVuZAogCiBkZWYgcnVuQnl0ZWNvZGVDYWNoZSgqb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437592</attachid>
            <date>2021-09-07 22:11:43 -0700</date>
            <delta_ts>2021-09-08 11:55:09 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>467705</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODMyLDYgKzgzMiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjY4LDYgKzM2NjksOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjU4LDYgKzYyNjEsOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05Njk5LDYgKzk3MDQsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNjEz
MjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAgb3AgOmdldF9hcmd1
bWVudCwKICAgICAgICAgaW5kZXg6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAg
ICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxl
LiosCiAgICAgfQogCiBvcCA6YXJndW1lbnRfY291bnQsCkBAIC0xODMsNyArMTgzLDcgQEAgb3Ag
OnRvX3RoaXMsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgY2FjaGVkU3RydWN0dXJlSUQ6IFN0
cnVjdHVyZUlELAogICAgICAgICB0b1RoaXNTdGF0dXM6IFRvVGhpc1N0YXR1cywKLSAgICAgICAg
cHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwK
ICAgICB9CiAKIG9wIDpjaGVja190ZHosCkBAIC0yOTAsOSArMjkwLDEwIEBAIG9wX2dyb3VwIDpQ
cm9maWxlZEJpbmFyeU9wLAogICAgICAgICBsaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAg
cmhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVz
LAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkCiAgICAgfSwKICAgICBtZXRhZGF0YTog
ewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0
aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9ncm91cCA6VmFsdWVQ
cm9maWxlZEJpbmFyeU9wLApAQCAtMzA5LDcgKzMxMCw3IEBAIG9wX2dyb3VwIDpWYWx1ZVByb2Zp
bGVkQmluYXJ5T3AsCiAgICAgICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAg
bWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlCisgICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6Yml0bm90LApAQCAtMzE4LDcgKzMxOSw3
IEBAIG9wIDpiaXRub3QsCiAgICAgICAgIG9wZXJhbmQ6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9
LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZQorICAgICAg
ICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlVuYXJ5T3AsCkBA
IC0zNTEsOSArMzUyLDEwIEBAIG9wX2dyb3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAg
IF0sCiAgICAgYXJnczogewogICAgICAgICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAg
ICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAg
ICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxl
OiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzYzLDcg
KzM2NSw3IEBAIG9wIDp0b19vYmplY3QsCiAgICAgICAgIG1lc3NhZ2U6IHVuc2lnbmVkLAogICAg
IH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVBy
b2ZpbGVkVW5hcnlPcCwKQEAgLTM3Niw3ICszNzgsNyBAQCBvcF9ncm91cCA6VmFsdWVQcm9maWxl
ZFVuYXJ5T3AsCiAgICAgICAgIG9wZXJhbmQ6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAg
IG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJv
ZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAgfQogCiBvcCA6bmVnYXRlLApAQCAtMzg0LDkgKzM4
NiwxMCBAQCBvcCA6bmVnYXRlLAogICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAg
ICAgb3BlcmFuZDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRU
eXBlLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApAQCAt
NDc3LDcgKzQ4MCw3IEBAIG9wIDpnZXRfYnlfaWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewog
ICAgICAgICBtb2RlTWV0YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCi0gICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAg
fQogCiBvcCA6Z2V0X2J5X2lkX3dpdGhfdGhpcywKQEAgLTQ4OCw3ICs0OTEsNyBAQCBvcCA6Z2V0
X2J5X2lkX3dpdGhfdGhpcywKICAgICAgICAgcHJvcGVydHk6IHVuc2lnbmVkLAogICAgIH0sCiAg
ICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBw
cm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAKIG9wIDpnZXRfYnlfdmFsX3dpdGhfdGhp
cywKQEAgLTQ5OSw3ICs1MDIsNyBAQCBvcCA6Z2V0X2J5X3ZhbF93aXRoX3RoaXMsCiAgICAgICAg
IHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmls
ZS4qLAogICAgIH0KIAogb3AgOmdldF9ieV9pZF9kaXJlY3QsCkBAIC01MDksNyArNTEyLDcgQEAg
b3AgOmdldF9ieV9pZF9kaXJlY3QsCiAgICAgICAgIHByb3BlcnR5OiB1bnNpZ25lZCwKICAgICB9
LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwgIyBub3Qg
dXNlZCBpbiBsbGludAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwgIyBub3QgdXNl
ZCBpbiBsbGludAogICAgICAgICBzdHJ1Y3R1cmVJRDogU3RydWN0dXJlSUQsCiAgICAgICAgIG9m
ZnNldDogdW5zaWduZWQsCiAgICAgfQpAQCAtNTIwLDcgKzUyMyw3IEBAIG9wIDpnZXRfcHJvdG90
eXBlX29mLAogICAgICAgICB2YWx1ZTogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0
YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxl
OiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAKIG9wIDp0cnlfZ2V0X2J5X2lkLApAQCAtNTMwLDcg
KzUzMyw3IEBAIG9wIDp0cnlfZ2V0X2J5X2lkLAogICAgICAgICBwcm9wZXJ0eTogdW5zaWduZWQs
CiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOnB1dF9ieV9p
ZCwKQEAgLTU3MSw3ICs1NzQsNyBAQCBvcCA6Z2V0X2J5X3ZhbCwKICAgICAgICAgcHJvcGVydHk6
IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAg
ICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBzZWVuSWRlbnRpZmllcnM6
IEdldEJ5VmFsSGlzdG9yeSwKICAgICB9CkBAIC01ODMsNyArNTg2LDcgQEAgb3AgOmdldF9wcml2
YXRlX25hbWUsCiAgICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHBy
b2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgICAgICBzdHJ1Y3R1cmVJRDogU3RydWN0dXJlSUQs
CiAgICAgICAgIG9mZnNldDogdW5zaWduZWQsCiAgICAgICAgIHByb3BlcnR5OiBXcml0ZUJhcnJp
ZXJbSlNDZWxsXSwKQEAgLTg0Miw3ICs4NDUsNyBAQCBvcCA6Y2FsbCwKICAgICB9LAogICAgIG1l
dGFkYXRhOiB7CiAgICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCi0gICAg
ICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxl
LiosCiAgICAgfQogCiBvcCA6dGFpbF9jYWxsLApAQCAtODU0LDcgKzg1Nyw3IEBAIG9wIDp0YWls
X2NhbGwsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewogICAgICAgICBjYWxsTGlua0luZm86IExM
SW50Q2FsbExpbmtJbmZvLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAg
IHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOmNhbGxfZXZhbCwKQEAgLTg2
Nyw3ICs4NzAsNyBAQCBvcCA6Y2FsbF9ldmFsLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKICAg
ICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKLSAgICAgICAgcHJvZmlsZTog
VmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAK
IG9wIDpjYWxsX3ZhcmFyZ3MsCkBAIC04ODEsNyArODg0LDcgQEAgb3AgOmNhbGxfdmFyYXJncywK
ICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9m
aWxlLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHByb2ZpbGU6IFZh
bHVlUHJvZmlsZS4qLAogICAgIH0sCiAgICAgdG1wczogewogICAgICAgICBhcmdDb3VudEluY2x1
ZGluZ1RoaXM6IHVuc2lnbmVkLApAQCAtOTAyLDcgKzkwNSw3IEBAIG9wIDp0YWlsX2NhbGxfdmFy
YXJncywKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJy
YXlQcm9maWxlLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0sCiAgICAgdG1wczogewogICAgICAgICBhcmdDb3Vu
dEluY2x1ZGluZ1RoaXM6IHVuc2lnbmVkCkBAIC05MjMsNyArOTI2LDcgQEAgb3AgOnRhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cywKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOmNvbnN0cnVj
dCwKQEAgLTkzNSw3ICs5MzgsNyBAQCBvcCA6Y29uc3RydWN0LAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKICAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKLSAgICAgICAg
cHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwK
ICAgICB9CiAKIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKQEAgLTk0OSw3ICs5NTIsNyBAQCBvcCA6
Y29uc3RydWN0X3ZhcmFyZ3MsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJh
eVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAor
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9LAogICAgIHRtcHM6IHsKICAg
ICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzOiB1bnNpZ25lZApAQCAtMTAyOCw3ICsxMDMxLDcg
QEAgb3AgOmdldF9mcm9tX3Njb3BlLAogICAgICAgICAgICAgc3RydWN0dXJlOiBXcml0ZUJhcnJp
ZXJCYXNlW1N0cnVjdHVyZV0sCiAgICAgICAgIH0sCiAgICAgICAgIG9wZXJhbmQ6IHVpbnRwdHJf
dCwgI29mZnNldCA2Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwgIyBvZmZzZXQgNwor
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwgIyBvZmZzZXQgNwogICAgIH0sCiAgICAg
bWV0YWRhdGFfaW5pdGlhbGl6ZXJzOiB7CiAgICAgICAgIGdldFB1dEluZm86IDpnZXRQdXRJbmZv
LApAQCAtMTA2NSw3ICsxMDY4LDcgQEAgb3AgOmdldF9mcm9tX2FyZ3VtZW50cywKICAgICAgICAg
aW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmls
ZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9
CiAKIG9wIDpwdXRfdG9fYXJndW1lbnRzLApAQCAtMTE4Nyw3ICsxMTkwLDcgQEAgb3AgOmVudW1l
cmF0b3JfZ2V0X2J5X3ZhbCwKICAgICAgICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lzdGVyLAog
ICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAor
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCiAgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFk
YXRhLAogICAgIH0KQEAgLTEyNDksMTEgKzEyNTIsMTEgQEAgb3AgOml0ZXJhdG9yX29wZW4sCiAg
ICAgfSwKICAgICBtZXRhZGF0YTogewogICAgICAgICBpdGVyYXRpb25NZXRhZGF0YTogSXRlcmF0
aW9uTW9kZU1ldGFkYXRhLAotICAgICAgICBpdGVyYWJsZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
KyAgICAgICAgaXRlcmFibGVQcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICAgICAgY2FsbExp
bmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKLSAgICAgICAgaXRlcmF0b3JQcm9maWxlOiBWYWx1
ZVByb2ZpbGUsCisgICAgICAgIGl0ZXJhdG9yUHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAg
ICAgIG1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwKLSAgICAgICAgbmV4dFByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgbmV4dFByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAog
ICAgIH0sCiAgICAgY2hlY2twb2ludHM6IHsKICAgICAgICAgc3ltYm9sQ2FsbDogbmlsLApAQCAt
MTI3NCwxMSArMTI3NywxMSBAQCBvcCA6aXRlcmF0b3JfbmV4dCwKICAgICAgICAgaXRlcmF0aW9u
TWV0YWRhdGE6IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwKICAgICAgICAgaXRlcmFibGVQcm9maWxl
OiBBcnJheVByb2ZpbGUsCiAgICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8s
Ci0gICAgICAgIG5leHRSZXN1bHRQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIG5leHRS
ZXN1bHRQcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICAgICAgZG9uZU1vZGVNZXRhZGF0YTog
R2V0QnlJZE1vZGVNZXRhZGF0YSwKLSAgICAgICAgZG9uZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
KyAgICAgICAgZG9uZVByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgICAgICB2YWx1ZU1vZGVN
ZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwKLSAgICAgICAgdmFsdWVQcm9maWxlOiBWYWx1
ZVByb2ZpbGUsCisgICAgICAgIHZhbHVlUHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAgfSwK
ICAgICB0bXBzOiB7CiAgICAgICAgIG5leHRSZXN1bHQ6IEpTVmFsdWUsCkBAIC0xMzIyLDcgKzEz
MjUsNyBAQCBvcCA6Z2V0X2ludGVybmFsX2ZpZWxkLAogICAgICAgICBpbmRleDogdW5zaWduZWQs
CiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOnB1dF9pbnRl
cm5hbF9maWVsZCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAy
ODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMjAgKzU3LDQyIEBAIFZhbHVl
UHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICBVTlVTRURfUEFSQU0oY2hl
Y2twb2ludEluZGV4KTsKICAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlTWV0YWRhdGE6Om9wY29k
ZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKICAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5k
ZXgpIHsKLSAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJuICZt
ZXRhZGF0YS5tX2l0ZXJhdG9yUHJvZmlsZTsKLSAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
Z2V0TmV4dDogcmV0dXJuICZtZXRhZGF0YS5tX25leHRQcm9maWxlOworICAgICAgICBjYXNlIE9w
SXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1cm4gbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGU7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OmdldE5leHQ6IHJldHVybiBtZXRhZGF0
YS5tX25leHRQcm9maWxlOwogICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAKICAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRlY29kZU1l
dGFkYXRhOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CiAgICAgICAgIHN3aXRjaCAo
Y2hlY2twb2ludEluZGV4KSB7Ci0gICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVO
ZXh0OiByZXR1cm4gJm1ldGFkYXRhLm1fbmV4dFJlc3VsdFByb2ZpbGU7Ci0gICAgICAgIGNhc2Ug
T3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJldHVybiAmbWV0YWRhdGEubV9kb25lUHJvZmlsZTsK
LSAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiAmbWV0YWRhdGEu
bV92YWx1ZVByb2ZpbGU7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0
OiByZXR1cm4gbWV0YWRhdGEubV9uZXh0UmVzdWx0UHJvZmlsZTsKKyAgICAgICAgY2FzZSBPcEl0
ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIG1ldGFkYXRhLm1fZG9uZVByb2ZpbGU7CisgICAg
ICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1cm4gbWV0YWRhdGEubV92YWx1
ZVByb2ZpbGU7CiAgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgCi0gICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9m
aWxlOworICAgICAgICByZXR1cm4gbWV0YWRhdGEubV9wcm9maWxlOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yKHVuc2ln
bmVkIGNoZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURfUEFSQU0oY2hlY2twb2ludEluZGV4
KTsKKyAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9v
cGVuKSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2Ug
T3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9m
ZnNldE9mSXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46Omdl
dE5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFByb2ZpbGUoKTsK
KyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0
ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAg
ICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJh
dG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZEb25l
UHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1ZTogcmV0dXJu
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2ZpbGUoKTsKKyAgICAgICAgZGVm
YXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSAKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24g
MjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86
OnVubGluayhWTSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1D
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRo
U3RhcnQoKQotewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5h
bFB0clRhZz4obV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNF
X0FTU0VSVCghaXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJ
bmZvOjpzZXRNYXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID0gdmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNE
aXJlY3QoKSAmJiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwog
dm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVT
cGVjaWZpY0NhbGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5
OSwxMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9m
cmFtZVNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0
YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2Fs
bCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRV
c2VzRGF0YUlDcyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwot
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxM
aW5rSW5mb0dQUik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExp
bmtJbmZvR1BSOwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgp
OwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBzbG93UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJ
QyA9PSBVc2VEYXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5z
Y3JhdGNoUmVnaXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcg
QEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAg
Z29Qb2x5bW9ycGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywg
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVN
YXNrKSk7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAg
ICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMu
bGluaygmaml0KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBw
cmVwLgogICAgICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxM
aW5rSW5mb0dQUiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRy
eVB0clRhZyk7CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0
aFBhdGNoKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlm
IChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAg
ICAgICAgIGNhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNh
bGxMaW5rSW5mbyk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAg
ICAgICB1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2Rl
SUMubV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihjYWxsZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEzICszNDQs
MzQgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGpp
dCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVz
ZURhdGFJQykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1
cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VE
YXRhSUMsIG51bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBp
ZiAoaXNEYXRhSUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIg
IT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJ
Qy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1
cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQor
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2Fs
bCgpKTsKLSAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAg
c2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aElt
cGwodGhpcywgaml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlz
VGFpbENhbGwoKSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVs
cGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0
aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5m
b0dQUiwgVXNlRGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7
CiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBl
cnMmIGppdCkKQEAgLTM2OSwxNyArMzgxLDMwIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xv
d1BhdGgoVk0mIHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJU
YWcpOwogfQogCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUo
Y2FsbExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxp
emVEYXRhSUMoVk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0lu
Zm8sIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgbV9j
b2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4
KTsKKyAgICBzZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQ
Uik7CisgICAgbV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRp
b247CisgICAgaWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpCisgICAg
ICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+
KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBm
b3IgcmVmIGNvdW50aW5nPworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAg
ICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRT
bG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBD
YWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVz
ZURhdGFJQzo6Tm8pOwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0g
ICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAg
ICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNh
bGwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
CiAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CkBAIC0zOTcsNyArNDIyLDcgQEAgdm9p
ZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhcwogCiAgICAgYXV0byBmYXN0UGF0
aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgICAgIHUuY29k
ZUlDLm1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihmYXN0UGF0aFN0YXJ0KTsKICAgICB9KTsKIAogICAgIC8vIC0gSWYgd2UncmUgbm90IHll
dCBsaW5rZWQsIHRoaXMgaXMgYSBqdW1wIHRvIHRoZSBzbG93IHBhdGguCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODIw
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDExIEBAIGNsYXNzIEpTRnVuY3Rpb247CiBlbnVtIE9w
Y29kZUlEIDogdW5zaWduZWQ7CiBzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGE7CiAKK3N0cnVj
dCBVbmxpbmtlZENhbGxMaW5rSW5mbzsKKwogY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBh
Y2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIHB1YmxpYzoKLSAgICBlbnVtIENh
bGxUeXBlIHsKKyAgICBlbnVtIENhbGxUeXBlIDogdWludDhfdCB7CiAgICAgICAgIE5vbmUsCiAg
ICAgICAgIENhbGwsCiAgICAgICAgIENhbGxWYXJhcmdzLApAQCAtMTY1LDYgKzE2Nyw4IEBAIHB1
YmxpYzoKICAgICAgICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgfQogCisgICAgdm9p
ZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgVW5saW5rZWRDYWxsTGlua0luZm8mLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKwogICAgIEdQUlJlZyBjYWxsZWVHUFIo
KSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsgfQogICAgIAogICAgIGVudW0gY2xhc3MgVXNl
RGF0YUlDIDogdWludDhfdCB7CkBAIC0xNzMsMTMgKzE3NywxNiBAQCBwdWJsaWM6CiAgICAgfTsK
IAogcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1w
bChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVt
aXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxl
ZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGws
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKIHB1YmxpYzoKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRE
YXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwg
VXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2b2lk
IGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXREaXJlY3RU
YWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
Jik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9TdHViKCk7
CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VXNlRGF0
YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsyMTAsNiBA
QCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAotICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7CiAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7CiAKQEAg
LTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVsbHB0cjsK
ICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25jZSgpCiAg
ICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMwOCw5ICsz
MDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlwZT4obV9j
YWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENh
bGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgfQogCiAg
ICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgxLDcgKzM4
Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OworCisgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOworCiAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAg
dW5pb24gVW5pb25UeXBlIHsKQEAgLTM5Nyw2ICs0MDAsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsTG9jYXRpb247
CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4g
bV9jYWxsZWVMb2NhdGlvbjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJu
YWxQdHJUYWc+IG1fc2xvd1BhdGhTdGFydDsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKICAgICAgICAgfSBjb2RlSUM7CiAg
ICAgfSB1OwogCkBAIC00MjQsNiArNDI4LDEzIEBAIGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxM
aW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKTsKIH0K
IAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNh
biB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJbmZvOjpDYWxs
VHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBk
b25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBm
cmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDggQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJj
ZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVy
cygpKTsKKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxp
bnRFeGVjdXRlQ291bnRlcigpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRk
KHRoaXMpOwogfQpAQCAtMzE4LDcgKzMyMCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIEMKICAgICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKICAgICBvcHRp
bWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKKyAgICAvL2ppdEFmdGVy
V2FybVVwKCk7CiAKICAgICBpZiAob3RoZXIubV9yYXJlRGF0YSkgewogICAgICAgICBjcmVhdGVS
YXJlRGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC0zNTksNyArMzYxLDkgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVy
KCkpOwogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSk7Ci0gICAgCisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENv
ZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKKwogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCku
YWRkKHRoaXMpOwogfQogCkBAIC0zNzAsMTAgKzM3NCwxMyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhWTSYgdm0sIFN0cnVjdHVyZSogCiAvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5r
ZWQgYnl0ZWNvZGUgZ2VuZXJhdGlvbi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdl
bmVyYXRlIGNvbnRyb2wKIC8vIGZsb3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFz
b24gZm9yIHRoaXMgaXMgd2UgcmVseSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2Ft
ZSBmb3IKIC8vIGFsbCB0aGUgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2Ug
cmVseSBvbiB0aGlzIGZhY3QgYnkgY2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKLS8vIGlu
c2lkZSBVbmxpbmtlZENvZGVCbG9jay4KKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4gQWxz
bywgQmFzZWxpbmUgSklUIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3Mgb2Yg
YW4gVW5saW5rZWRDb2RlQmxvY2ssCisvLyBzbyB0aGUgYnl0ZWNvZGUgbXVzdCByZW1haW4gdGhl
IHNhbWUgYmV0d2VlbiBDb2RlQmxvY2tzIHNoYXJpbmcgYW4gVW5saW5rZWRDb2RlQmxvY2suCiBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKICAg
ICBKU1Njb3BlKiBzY29wZSkKIHsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7IC8vIFdl
IG5lZWQgdG8gc2V0IHVwIG91ciB2YWx1ZSBwcm9maWxlIHBvaW50ZXJzLgorCiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIApAQCAt
NDM1LDcgKzQ0Miw4IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMK
ICAgICAvLyBCb29ra2VlcCB0aGUgc3Ryb25nbHkgcmVmZXJlbmNlZCBtb2R1bGUgZW52aXJvbm1l
bnRzLgogICAgIEhhc2hTZXQ8SlNNb2R1bGVFbnZpcm9ubWVudCo+IHN0cm9uZ2x5UmVmZXJlbmNl
ZE1vZHVsZUVudmlyb25tZW50czsKIAotICAgIGF1dG8gbGlua19wcm9maWxlID0gWyZdKGNvbnN0
IGF1dG8mIC8qaW5zdHJ1Y3Rpb24qLywgYXV0byAvKmJ5dGVjb2RlKi8sIGF1dG8mIC8qbWV0YWRh
dGEqLykgeworICAgIGF1dG8gbGlua19wcm9maWxlID0gWyZdKGNvbnN0IGF1dG8mIC8qaW5zdHJ1
Y3Rpb24qLywgYXV0byAvKmJ5dGVjb2RlKi8sIGF1dG8mIG1ldGFkYXRhKSB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lX3Y8VmFsdWVQcm9maWxlKiwgZGVjbHR5cGUobWV0YWRh
dGEubV9wcm9maWxlKT4pOwogICAgICAgICBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2Zp
bGVzKys7CiAgICAgfTsKIApAQCAtNDY2LDYgKzQ3NCwxOSBAQCBib29sIENvZGVCbG9jazo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCisjZGVmaW5l
IExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTog
eyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0
YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJ5
dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZp
bmUgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6
IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRh
dGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5
dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwogICAg
IGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9u
cygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVh
bSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
OwpAQCAtNDk5LDkgKzUyMCw5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFMKIAogICAgICAgICBMSU5LKE9wR2V0QnlJZCwgcHJvZmlsZSkKIAotICAgICAgICBMSU5L
KE9wRW51bWVyYXRvck5leHQsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BFbnVtZXJhdG9ySW5C
eVZhbCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwg
cHJvZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JOZXh0KQorICAgICAgICBMSU5LKE9w
RW51bWVyYXRvckluQnlWYWwpCisgICAgICAgIExJTksoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVy
dHkpCiAgICAgICAgIExJTksoT3BFbnVtZXJhdG9yR2V0QnlWYWwsIHByb2ZpbGUpCiAKICAgICAg
ICAgTElOSyhPcENhbGwsIHByb2ZpbGUpCkBAIC01MjgsMTQgKzU0OSwxNCBAQCBib29sIENvZGVC
bG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQcm9t
aXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTksoT3BB
ZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAgIExJ
TksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcEluYykK
LSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9G
SUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BNdWwp
CisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAgICAg
TElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktfV0lU
SF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllf
QVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJ
TEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2MSw2ICs3ODIsNDYg
QEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogI3VuZGVmIExJTktf
RklFTEQKICN1bmRlZiBMSU5LCiAKKyAgICBpZiAobV9tZXRhZGF0YSkgeworICAgICAgICB1bnNp
Z25lZCBzaXplID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkgXAorICAgICAgICBzaXplICs9IG1f
bWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJ
VEhfVkFMVUVfUFJPRklMRShDT1VOVCkKKyN1bmRlZiBDT1VOVAorICAgICAgICBzaXplICs9IG1f
bWV0YWRhdGEtPm51bUVudHJpZXM8T3BJdGVyYXRvck9wZW4+KCkgKiAzOworICAgICAgICBzaXpl
ICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BJdGVyYXRvck5leHQ+KCkgKiAzOworCisgICAg
ICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2stPm1fdmFsdWVQcm9maWxlcy5zaXplKCkgJiYgc2l6
ZSkgeworICAgICAgICAgICAgdW5saW5rZWRDb2RlQmxvY2stPm1fdmFsdWVQcm9maWxlcyA9IEZp
eGVkVmVjdG9yPFZhbHVlUHJvZmlsZT4oc2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c2l6ZSkgeworICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgICAgICAgICAgYXV0
byBhc3NpZ24gPSBbJl0gKFZhbHVlUHJvZmlsZSomIHB0cikgeworICAgICAgICAgICAgICAgIHB0
ciA9ICZ1bmxpbmtlZENvZGVCbG9jay0+bV92YWx1ZVByb2ZpbGVzW2luZGV4KytdOworICAgICAg
ICAgICAgfTsKKworI2RlZmluZSBWSVNJVChfX29wKSBcCisgICAgICAgICAgICBtX21ldGFkYXRh
LT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgYXNzaWduKG1ldGFkYXRhLm1f
cHJvZmlsZSk7IH0pOworICAgICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVkFMVUVfUFJP
RklMRShWSVNJVCkKKyN1bmRlZiBWSVNJVAorCisgICAgICAgICAgICBtX21ldGFkYXRhLT5mb3JF
YWNoPE9wSXRlcmF0b3JPcGVuPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IAorICAgICAgICAgICAg
ICAgIGFzc2lnbihtZXRhZGF0YS5tX2l0ZXJhYmxlUHJvZmlsZSk7CisgICAgICAgICAgICAgICAg
YXNzaWduKG1ldGFkYXRhLm1faXRlcmF0b3JQcm9maWxlKTsKKyAgICAgICAgICAgICAgICBhc3Np
Z24obWV0YWRhdGEubV9uZXh0UHJvZmlsZSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEl0ZXJhdG9yTmV4dD4oWyZdIChhdXRvJiBtZXRhZGF0
YSkgeworICAgICAgICAgICAgICAgIGFzc2lnbihtZXRhZGF0YS5tX25leHRSZXN1bHRQcm9maWxl
KTsKKyAgICAgICAgICAgICAgICBhc3NpZ24obWV0YWRhdGEubV9kb25lUHJvZmlsZSk7CisgICAg
ICAgICAgICAgICAgYXNzaWduKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlKTsKKyAgICAgICAgICAg
IH0pOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA9PSBzaXplKTsKKyAgICAg
ICAgfQorICAgIH0KKwogICAgIGlmIChtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoQ29u
dHJvbEZsb3dQcm9maWxlck9wY29kZXMoKSkKICAgICAgICAgaW5zZXJ0QmFzaWNCbG9ja0JvdW5k
YXJpZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKCk7CiAKQEAgLTc2OCw3ICs4MjksNyBAQCBib29s
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgLy8gcmVseSBvbiB0aGUg
aW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRlZCB0byBhbHNvIGlu
c3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUgYWNjdXJhdGUgYXNz
ZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAg
ICBqaXRBZnRlcldhcm1VcCgpOworICAgIC8vaml0QWZ0ZXJXYXJtVXAoKTsKIAogICAgIC8vIElm
IHRoZSBjb25jdXJyZW50IHRocmVhZCB3aWxsIHdhbnQgdGhlIGNvZGUgYmxvY2sncyBoYXNoLCB0
aGVuIGNvbXB1dGUgaXQgaGVyZQogICAgIC8vIHN5bmNocm9ub3VzbHkuCkBAIC03ODksNiArODUw
LDc3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbkNvbW1vbihWTSYKICAgICBtX293
bmVyRWRnZS5zZXQodm0sIHRoaXMsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmNyZWF0ZSh2
bSwgdGhpcykpOwogfQogCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNlbGlu
ZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRDb2RlKGpp
dENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0Q29kZU1h
cCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFuZGxlcklu
Zm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8gRklYTUU6
IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5hdGl2ZUNv
ZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFn
Z2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7
CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgYXV0
byYgaml0RGF0YSA9IGVuc3VyZUpJVERhdGEobG9ja2VyKTsKKworICAgICAgICBSRUxFQVNFX0FT
U0VSVChqaXREYXRhLm1faml0Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CisgICAgICAgIGppdERh
dGEubV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+bV9jb25z
dGFudFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqaXRDb2Rl
LT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBlbnRyeSA9
IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOworICAgICAgICAgICAgc3dpdGNoIChlbnRy
eS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFs
T2JqZWN0OgorICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBt
X2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAgICAgICAg
ICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8gPSAqc3RhdGlj
X2Nhc3Q8VW5saW5rZWRDYWxsTGlua0luZm8qPihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAgICAg
ICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxsTGlua0luZm9z
LmFkZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAg
ICAgICAgICAgICAgICAvLyBPT1BTOiBkb24ndCBoYXJkY29kZSB0aGVzZSByZWdpc3RlcnMgbGlr
ZSB0aGlzLgorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+aW5pdGlhbGl6ZURhdGFJQyh2
bSgpLCB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1Qy
KTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gY2FsbExp
bmtJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7CisgICAg
ICAgICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbyA9
ICpzdGF0aWNfY2FzdDxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKj4oZW50cnkucGF5bG9hZCk7
CisgICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gaml0RGF0YS5t
X3N0dWJJbmZvcy5hZGQodW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlLCBDb2RlT3JpZ2luKHVu
bGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT5pbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8odGhpcywgdW5saW5rZWRT
dHViSW5mbyk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9
IHN0dWJJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbDogeworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnku
cGF5bG9hZCk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9
IGZ1bmN0aW9uRGVjbChpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHBy
OiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3Rh
bnRQb29sW2ldID0gZnVuY3Rpb25FeHByKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN3
aXRjaCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICBjYXNlIE1vZHVs
ZUNvZGU6CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGlu
ZWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAg
ICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBk
ZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUg
dGhhdCBvYnNlcnZhdGlvbi4KKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2Fu
SW5saW5lKGNhcGFiaWxpdHlMZXZlbCgpKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24odGhp
cyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChPcHRpb25zOjp1c2VCYXNlbGlu
ZUpJVENvZGVTaGFyaW5nKCkpCisgICAgICAgIHVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5r
ZWRCYXNlbGluZUNvZGUgPSBXVEZNb3ZlKGppdENvZGUpOworfQorCiBDb2RlQmxvY2s6On5Db2Rl
QmxvY2soKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtMTUxOSwzOSArMTY1MSw0MCBAQCB2
b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAKICAgICB1cGRhdGVBbGxQ
cmVkaWN0aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29sIGlzRWxpZ2libGVGb3JM
TEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwotICAgIG1faXNF
bGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8gSWYgQmFzZWxpbmVKSVQg
Y29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0
cywgd2UgYXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJl
aW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAgICBpZiAoT3B0aW9uczo6
dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4
ZWN1dGluZyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxv
Y2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wdGltaXpl
ZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAgICAgICAgICAgICAgIGlmIChpc0Vs
aWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2Rl
ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhp
cyk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRU
eXBlOjpJbnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7
IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5m
byYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURh
dGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRv
JiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0
KS5wdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxp
bmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExM
SW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMo
KTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0
IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhy
ZWFkcwotICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhl
eSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQg
Ynl0ZWNvZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEg
c3RydWN0dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgotICAgICAgICAgICAg
ICAgICAgICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYKKy8vIE9PUFM6IHJlY29uY2lsZSB0
aGlzCisvLyNpZiBFTkFCTEUoSklUKQorLy8gICAgYm9vbCBpc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUgPSBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZTsKKy8vICAgIG1faXNFbGlnaWJs
ZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7CisvLyAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2Rl
IGlzIG5vdCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3
ZSBhdHRlbXB0CisvLyAgICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFuZCByZWlu
c3RhbGwgTExJbnQgY29kZSB0byBzYXZlIEpJVCBtZW1vcnkuCisvLyAgICBpZiAoT3B0aW9uczo6
dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4
ZWN1dGluZyh0aGlzKSkgeworLy8gICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVC
bG9jayA9IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKy8vICAgICAgICAgICAgaWYgKCFvcHRp
bWl6ZWRDb2RlQmxvY2stPm1fb3NyRXhpdENvdW50ZXIpIHsKKy8vICAgICAgICAgICAgICAgIGlm
IChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKKy8vICAgICAgICAgICAgICAgICAgICBt
X2ppdENvZGUgPSBudWxscHRyOworLy8gICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRy
eXBvaW50KHRoaXMpOworLy8gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKKy8vCisvLyAgICAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNl
cHRpb25IYW5kbGVycygpOyBpKyspIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4
Y2VwdGlvbkhhbmRsZXIoaSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZv
JiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKKy8vICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQo
dW5saW5rZWRIYW5kbGVyLnRhcmdldCkucHRyKCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAg
IGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0
aCgpKS5jb2RlKCkpKTsKKy8vICAgICAgICAgICAgICAgICAgICB9CisvLworLy8gICAgICAgICAg
ICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKKy8vCisvLyAgICAgICAgICAgICAgICAg
ICAgLy8gSXQncyBzYWZlIHRvIGNsZWFyIHRoZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkgYWxsIGNvbXBpbGVyIHRocmVhZHMKKy8vICAgICAgICAgICAgICAg
ICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBi
ZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKKy8vICAgICAgICAg
ICAgICAgICAgICAvLyBwYXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcg
aW50byB0aGUgdmFyaW91cyAqaW5mb3MuCisvLyAgICAgICAgICAgICAgICAgICAgcmVzZXRKSVRE
YXRhKCk7CisvLyAgICAgICAgICAgICAgICB9IGVsc2UKKy8vICAgICAgICAgICAgICAgICAgICBt
X2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IHRydWU7CisvLyAgICAgICAgICAgIH0KKy8v
ICAgICAgICB9CisvLyAgICB9CisvLworLy8jZW5kaWYKICAgICAKICAgICBpZiAoSklUQ29kZTo6
Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxp
bmVDYWNoZXMoKTsKQEAgLTE1NzksNyArMTcxMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1
bms6Ci0gICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOwor
ICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNvdW50KCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAg
ICAgICAgIGNvdW50ID0gbV9qaXRFeGVjdXRlQ291bnRlci5jb3VudCgpOwpAQCAtMzA3OSw3ICsz
MjEyLDcgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYg
RU5BQkxFKEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1
cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6
OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMTY0LDcgKzMyOTcs
NyBAQCBWYWx1ZVByb2ZpbGUqIENvZGVCbG9jazo6dHJ5R2V0VmFsdWVQcm9mCiAKICNkZWZpbmUg
Q0FTRShPcCkgXAogICAgIGNhc2UgT3A6Om9wY29kZUlEOiBcCi0gICAgICAgIHJldHVybiAmaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fcHJvZmlsZTsKKyAgICAgICAgcmV0
dXJuIGluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0YSh0aGlzKS5tX3Byb2ZpbGU7CiAKICAg
ICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVkFMVUVfUFJPRklMRShDQVNFKQogCkBAIC0zMjk1
LDEzICszNDI4LDEzIEBAIEJpbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkK
IHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGNhc2Ugb3BfbXVsOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoK
LSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9w
RGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMt
PmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzMTMsMTEgKzM0NDYsMTEgQEAgVW5hcnlBcml0
aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0aAogewogICAgIHN3aXRjaCAocGMtPm9wY29k
ZUlEKCkpIHsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BO
ZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBw
Yy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2Fz
ZSBvcF9pbmM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMp
Lm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4g
JnBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAg
cmV0dXJuIHBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAg
ICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zNDY3LDI4ICszNjAwLDE5IEBA
IHN0ZDo6b3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0
ZWNvZGVJbmRleDsKIH0KIAotaW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQz
Ml90IHRocmVzaG9sZCkKLXsKLSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9w
dGltaXplKCkpIHsKLSAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICBy
ZXR1cm4gdGhyZXNob2xkOwotICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1
cm4gdGhyZXNob2xkICogNDsKLSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1
cm4gdGhyZXNob2xkIC8gMjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIHRocmVzaG9sZDsKLX0KKy8vdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkK
Ky8veworLy8gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQodGhyZXNo
b2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsK
Ky8vfQogCi12b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBDb2RlQmxvY2s6
OmppdFNvb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQo
dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0
aGlzKTsKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCh1bmxpbmtl
ZENvZGVCbG9jaygpLT50aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29v
bigpKSwgdGhpcyk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3ZvaWQgQ29kZUJs
b2NrOjpqaXROZXh0SW52b2NhdGlvbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNl
dE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29v
bigpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQo
MCwgdGhpcyk7CiB9CiAKIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3Bv
aW50cygpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcgQEAgY2xhc3MgTWV0
YWRhdGFUYWJsZTsKIGNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9m
ZnNldExpc3Q7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29k
ZTsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFy
ZURhdGEpOwogCkBAIC0xNTgsNyArMTU5LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUq
IG1ldGFkYXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAg
ICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJz
OyB9Citwcml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1
ZSk7CitwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE3
MCw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1WYXJzOyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5r
ZWRDb2RlLT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAg
IHVuc2lnbmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1l
dGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAg
ICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENv
ZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzNCw2IEBAIHB1
YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAg
ICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlz
S25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTog
Q29uc2lkZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1
ZSBpZiBgcmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAg
IGlmIChyZWcuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJl
ZykuaXNDZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAg
ICAgewogICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9u
dW1WYXJzKTsKQEAgLTI2Niw4ICsyNTgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0
dXNNYXAoSUNTdGF0dXNNYXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAv
LyBPT1BTOiBtb3ZlIGFyaXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJl
LCBhbmQgb250byBKSVRDb2RlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01B
S0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5m
b3M7CiAgICAgICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CkBAIC0yODIsOSArMjc2LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3Bj
VG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7
IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lz
dGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRW
ZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERh
dGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVu
bGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEm
IGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewog
ICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkpCkBAIC0yOTMsNiArMjkxLDggQEAgcHVibGlj
OgogICAgIH0KICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50
SlNMb2NrZXImKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVREYXRhKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9qaXREYXRhKTsgfQorCiAgICAgSklU
QWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwogICAgIEpJVE11bElDKiBh
ZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVROZWdJQyogYWRkSklUTmVn
SUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKQEAgLTMyMiwxNiArMzIyLDcgQEAgcHVibGljOgogICAg
IC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9m
IGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVj
b2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJ
VENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihtX2xvY2spOwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2Rl
TWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYg
aml0Q29kZU1hcCgpCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1f
bG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFw
OwotICAgIH0KKyAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKICAgICB2b2lk
IHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4m
Jik7CiAgICAgc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwpAQCAt
NDcyLDYgKzQ2Myw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZh
bHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQ
cm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMu
c2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRp
b25zOjp1c2VKSVQoKSk7CkBAIC01NzIsNiArNTY0LDcgQEAgcHVibGljOgogICAgIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJl
dHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0K
ICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBt
X3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKTsgfQog
ICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlu
a2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW5kZXgpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5
cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0
aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygp
IHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTYwMSw2ICs1OTQsMTIgQEAg
cHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwogICAgICAgICByZXR1
cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgfQorICAg
IFNpbXBsZUp1bXBUYWJsZSYgYmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgp
OworICAgIHZvaWQqIGJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkKKyAgICB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1faml0RGF0YSAmJiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpOworICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbC5kYXRhKCk7
CisgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTd2l0
Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNjExLDYgKzYx
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKICAgICAg
ICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OwogICAgIH0KKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KTsKICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5u
dW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0
YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTYzMywyMSArNjMzLDIwIEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgY2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0
aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y2hlY2tJZlRocmVz
aG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CiAgICAgfQogCiAgICAgdm9pZCBkb250SklUQW55dGlt
ZVNvb24oKQogICAgIHsKLSAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZp
bml0ZWx5KCk7CisgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+ZGVmZXJJbmRlZmluaXRl
bHkoKTsKICAgICB9CiAKLSAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVz
aG9sZCk7Ci0gICAgdm9pZCBqaXRBZnRlcldhcm1VcCgpOwogICAgIHZvaWQgaml0U29vbigpOwor
ICAgIHZvaWQgaml0TmV4dEludm9jYXRpb24oKTsKIAogICAgIGNvbnN0IEJhc2VsaW5lRXhlY3V0
aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgICAgICByZXR1cm4gKm1fbGxpbnRFeGVj
dXRlQ291bnRlcjsKICAgICB9CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8c3RkOjp0dXBsZTxTdHJ1
Y3R1cmVJRCwgdW5zaWduZWQ+LCBGaXhlZFZlY3RvcjxMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQ+PiBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwOwpAQCAtNzk3LDYg
Kzc5Niw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0
IHsgcmV0dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVz
dHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVh
a3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9p
bnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCkBAIC04MzgsNiArODM4LDcgQEAgcHVibGljOgog
ICAgIG11dGFibGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMg
dG8gc3RvcmUgdG8gaXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5
c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2Nh
cGFiaWxpdHlMZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNiwx
MSArOTA3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0
YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7
IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9p
bnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlS
ZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8g
YWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3Vu
bGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHBy
b3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKQEAgLTEwMDgs
NyArMTAwNSw5IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlV2F0Y2hwb2ludE1hcCBtX2xsaW50
R2V0QnlJZFdhdGNocG9pbnRNYXA7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZTsKICNp
ZiBFTkFCTEUoSklUKQorcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVREYXRhPiBtX2pp
dERhdGE7Citwcml2YXRlOgogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gVGhp
cyBpcyByZWxldmFudCB0byBub24tREZHIGNvZGUgYmxvY2tzIHRoYXQgc2VydmUgYXMgdGhlIHBy
b2ZpbGVkIGNvZGUgYmxvY2sKQEAgLTEwMjcsNyArMTAyNiw3IEBAIHByaXZhdGU6CiAKICAgICBX
cml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOwogICAgIAotICAgIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAgQmFzZWxpbmVFeGVj
dXRpb25Db3VudGVyKiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgeyBudWxscHRyIH07CiAKICAgICBC
YXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9qaXRFeGVjdXRlQ291bnRlcjsKICAgICB1aW50MzJf
dCBtX29zckV4aXRDb3VudGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQmFzZWxpbmVK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5oIgpAQCAtMzks
MjUgKzQwLDIyIEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKIAog
ICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKLSAgICAgICAgbV9t
ZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRh
dGEubV9wcm9maWxlLCBmYWxzZSk7IH0pOwotCisgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8
X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBmdW5jKCptZXRhZGF0YS5tX3Byb2ZpbGUsIGZh
bHNlKTsgfSk7CiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJTEUoVklT
SVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BJdGVy
YXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCi0gICAgICAgICAgICBmdW5jKG1ldGFk
YXRhLm1faXRlcmFibGVQcm9maWxlLCBmYWxzZSk7Ci0gICAgICAgICAgICBmdW5jKG1ldGFkYXRh
Lm1faXRlcmF0b3JQcm9maWxlLCBmYWxzZSk7Ci0gICAgICAgICAgICBmdW5jKG1ldGFkYXRhLm1f
bmV4dFByb2ZpbGUsIGZhbHNlKTsKKyAgICAgICAgICAgIGZ1bmMoKm1ldGFkYXRhLm1faXRlcmFi
bGVQcm9maWxlLCBmYWxzZSk7CisgICAgICAgICAgICBmdW5jKCptZXRhZGF0YS5tX2l0ZXJhdG9y
UHJvZmlsZSwgZmFsc2UpOworICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEubV9uZXh0UHJvZmls
ZSwgZmFsc2UpOwogICAgICAgICB9KTsKIAogICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPE9w
SXRlcmF0b3JOZXh0PihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7Ci0gICAgICAgICAgICBmdW5jKG1l
dGFkYXRhLm1fbmV4dFJlc3VsdFByb2ZpbGUsIGZhbHNlKTsKLSAgICAgICAgICAgIGZ1bmMobWV0
YWRhdGEubV9kb25lUHJvZmlsZSwgZmFsc2UpOwotICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5t
X3ZhbHVlUHJvZmlsZSwgZmFsc2UpOworICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEubV9uZXh0
UmVzdWx0UHJvZmlsZSwgZmFsc2UpOworICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEubV9kb25l
UHJvZmlsZSwgZmFsc2UpOworICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEubV92YWx1ZVByb2Zp
bGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CkBAIC0xMjYsNCArMTI0LDI0IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNo
TExJbnRDYWxsTGlua0luZm8KICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoSklUKQorQUxXQVlTX0lO
TElORSBjb25zdCBKSVRDb2RlTWFwJiBDb2RlQmxvY2s6OmppdENvZGVNYXAoKQoreworICAgIEFT
U0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVNYXA7
Cit9CisKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5l
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGlu
ZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07Cit9CisKK0FMV0FZU19JTkxJTkUgU3RyaW5nSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2Vs
aW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChq
aXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcwLDYgKzcwLDggQEAgcHVibGljOgogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlKiB3cmFwKENvZGVCbG9jayogY29kZUJsb2NrKTsKICAgICAKICAgICBzdGF0aWMg
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcEFuZEFjdGl2YXRlKENvZGVCbG9jayogY29k
ZUJsb2NrKTsKKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2soKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSwgbV9jb2RlQmxv
Y2spOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291
bnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGlvbkNvdW50ZXIuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
OSw3ICsxNTksNyBAQCBib29sIEV4ZWN1dGlvbkNvdW50ZXI8Y291bnRpbmdWYXJpYW50Pjo6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJl
c2hvbGQoY29kZUJsb2NrID8gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSA6IG51bGxwdHIsIHRo
cmVzaG9sZCk7CisgICAgdGhyZXNob2xkID0gY2xpcHBlZFRocmVzaG9sZCh0aHJlc2hvbGQpOwog
ICAgIAogICAgIG1fY291bnRlciA9IHN0YXRpY19jYXN0PGludDMyX3Q+KC10aHJlc2hvbGQpOwog
ICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25D
b3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGlvbkNvdW50ZXIuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyAr
NjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7IC8v
IElmIHlvdSB1c2UgdGhpcywgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoKSBtYXkgc3Rp
bGwgcmV0dXJuIGZhbHNlLgogICAgIGJvb2wgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQo
Q29kZUJsb2NrKik7CiAgICAgYm9vbCBoYXNDcm9zc2VkVGhyZXNob2xkKCkgY29uc3QgeyByZXR1
cm4gbV9jb3VudGVyID49IDA7IH0KLSAgICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRo
cmVzaG9sZCwgQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0
aHJlc2hvbGQsIENvZGVCbG9jayogPSBudWxscHRyKTsKICAgICB2b2lkIGRlZmVySW5kZWZpbml0
ZWx5KCk7CiAgICAgZG91YmxlIGNvdW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91
YmxlPihtX3RvdGFsQ291bnQpICsgbV9jb3VudGVyOyB9CiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CkBAIC04NiwxMyArODYsOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUIHRocmVzaG9sZCkKKyAgICBzdGF0aWMgVCBjbGlw
cGVkVGhyZXNob2xkKFQgdGhyZXNob2xkKQogICAgIHsKLSAgICAgICAgaW50MzJfdCBtYXhUaHJl
c2hvbGQ7Ci0gICAgICAgIGlmIChPcHRpb25zOjpyYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3
ZWVuQ2hlY2twb2ludHMoKSAmJiBnbG9iYWxPYmplY3QpCi0gICAgICAgICAgICBtYXhUaHJlc2hv
bGQgPSBnbG9iYWxPYmplY3QtPndlYWtSYW5kb21JbnRlZ2VyKCkgJSBtYXhpbXVtRXhlY3V0aW9u
Q291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1h
eFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKTsK
KyAgICAgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0
d2VlbkNoZWNrcG9pbnRzKCk7CiAgICAgICAgIGlmICh0aHJlc2hvbGQgPiBtYXhUaHJlc2hvbGQp
CiAgICAgICAgICAgICB0aHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7CiAgICAgICAgIHJldHVybiB0
aHJlc2hvbGQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1l
dGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRNZXRhZGF0YS5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUw
LDcgQEAgc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YQogCiBzdHJ1Y3Qg
R2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIHsKICAgICBBcnJheVByb2ZpbGUgYXJyYXlQ
cm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBhcnJh
eVByb2ZpbGUpOyB9CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0
YUFycmF5TGVuZ3RoKSA9PSAxMik7CiAKQEAgLTg4LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1v
ZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3Qg
aGl0Q291bnRGb3JMTEludENhY2hpbmc7IC8vIFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNl
IFByb3RvTG9hZCBtb2RlLgogICAgIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1v
ZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7
IH0KICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhRGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRC
eUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5zZXRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFB
cnJheUxlbmd0aCBhcnJheUxlbmd0aE1vZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4NSw2ICszODUsOCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5B
Y2Nlc3MoCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKKy8vIE9PUFM6IE1ha2Ug
dGhpcyBzdHVmZiB3b3JrIHdpdGggZGF0YSBpY3MgdG8gbm90IGFzc3VtZSBpbmxpbmUgYWNjZXNz
LgorCiB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJ
bmxpbmVBY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHRhcmdldCkKIHsK
ICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewpAQCAtNDA0LDkgKzQwNiwxMiBAQCB2
b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiB2b2lkIElubGluZUFjY2Vz
czo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiB0YXJnZXQpCiB7CiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAg
ICAgLy8gT09QUzogbWFrZSBzb21lIHZlcnNpb24gb2YgSW5saW5lQWNjZXNzIGZvciBiYXNlbGlu
ZS4gUGVyaGFwcyBtYWtlIGl0IGRhdGEgZHJpdmVuLiBPciBwZXJoYXBzIGhhdmUgdGhlIGNvZGUK
KyAgICAgICAgLy8gYmUgc2hhcmVkIHNvbWVob3cgYmV0d2VlbiBVbmxpbmtlZENvZGVCbG9ja3Mu
CisKICAgICAgICAgLy8gSWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90
IGVtaXQgbm9wIHNsZWQgKGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAvLyBUaGUgY29kZSBpcyBh
bHJlYWR5IGFuIGluZGlyZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyBy
ZXBsYWNpbmcgbV9jb2RlUHRyLgotICAgICAgICBpZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVu
dGlmaWVyKSB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpC
YXNlbGluZUpJVCAmJiBzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKICAgICAgICAg
ICAgIC8vIElmIG1fY29kZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0
TG9jYXRpb24sIHRoaXMgbWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHVi
IG9uZS4KICAgICAgICAgICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2Vk
IGRpc3BhdGNoaW5nIGNvZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJl
c2V0IHRoZSBjb2RlLgogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRh
YmxlQWRkcmVzcygpID09IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKSB7CkBAIC00MjEsNiArNDI2LDcgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2ly
ZVN0dWJBc0p1bXBJbkFjYwogICAgICAgICAgICAgICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5r
aW5nIHN0dWIgY2FsbCIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgc3R1
YkluZm8ubV9jb2RlUHRyID0gdGFyZ2V0OwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2Rl
TWV0YWRhdGEuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0
MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0VfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0
IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7CiAgICAgdWludDhfdCBzZWVuTW9kZXMgeyAwIH07Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNlZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0YWRhdGEsIHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGlj
X2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc2Vlbk1vZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1v
ZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENh
bGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MTEludENhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
ODcsNiArODcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQ
cm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJbnRDYWxsTGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsg
fQogCiBwcml2YXRlOgogICAgIHVpbnRwdHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRo
TGlua0JpdCB7IHVubGlua2VkQml0IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYxLDYgKzYxLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZ1bmMoKm1ldGFkYXRhKTsKICAg
ICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAgICBBTFdBWVNfSU5MSU5FIHNpemVf
dCBudW1FbnRyaWVzKCkKKyAgICB7CisgICAgICAgIGF1dG8qIHN0YXJ0ID0gYml0d2lzZV9jYXN0
PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdldChPcDo6b3Bjb2RlSUQpKTsKKyAgICAgICAgYXV0
byogZW5kID0gYml0d2lzZV9jYXN0PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdldEltcGwoT3A6
Om9wY29kZUlEICsgMSkpOworICAgICAgICByZXR1cm4gZW5kIC0gc3RhcnQ7CisgICAgfQorCiAg
ICAgc2l6ZV90IHNpemVJbkJ5dGVzKCk7CiAKICAgICB2b2lkIHJlZigpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJ
KHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNs
dWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1
ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogCkBAIC0yODUs
NiArMjg2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAg
ICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0
aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NU
eXBlOjpJbkJ5SWQ6CkBAIC00MzAsNiArNDMyLDIwNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAK
K3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0
dWJJbmZvKQoreworICAgIGFjY2Vzc1R5cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7
CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0YXJ0OyAvLyBPT1BTOiBkbyB3ZSBuZWVk
IGEgc3RhcnQgZm9yIGRhdGEgSUNzPworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1Yklu
Zm8uZG9uZUxvY2F0aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1
YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSk7CisgICAgY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRl
Y29kZUluZGV4KTsKKyAgICBtX2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAg
ICB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
OworICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRT
dHViSW5mby5ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGb3IgaXRl
cmF0b3JfbmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0aGUgc2NyYXRjaCByZWdpc3RlciBlaXRoZXIu
CisgICAgICAgIHVzZWRSZWdpc3RlcnMuYWRkKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2Ny
YXRjaCk7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
RGVsZXRlQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpEZWxldGVCeUlEOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVC
eUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlW
YWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkluQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgor
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisg
ICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOiAK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAg
ICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtp
bmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2Rl
LmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAg
ICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAg
ICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1
dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5k
KSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVu
bGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9k
ZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZp
bmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVy
YXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNz
VHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNl
OworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6
CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlH
UFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJl
Z2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpHZXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgorICAgICAg
ICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgcHJvdG90eXBlSXNLbm93bk9iamVjdCA9IGZhbHNlOwor
ICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAg
ICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnBy
b3RvOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFs
OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0g
ZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6Cisg
ICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5
SWQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAg
ICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVncy50aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlk
V2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2
YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlw
ZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNl
OworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVl
OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsKQor
ICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9maWxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZh
dGVCcmFuZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAg
ICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBJbnZh
bGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgICAgIHJlZ3MuYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YnJhbmQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogI2lm
IEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5
KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2lu
Y2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlU2V0LmgiCkBAIC01Niw2ICs1Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6
IGludDhfdCB7CiAgICAgR2V0QnlWYWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAg
ICBQdXRQcml2YXRlTmFtZSwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2
YXRlTmFtZSwKQEAgLTc4LDYgKzgwLDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3Qg
ewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05
OCw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRU
b0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFS
RV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayBy
ZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2Vs
ZiwKQEAgLTQ0Nyw2ICs0NTMsMTggQEAgaW5saW5lIGF1dG8gYXBwcm9wcmlhdGVHZW5lcmljR2V0
QnlJZEZ1bgogICAgIH0KIH0KIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8gewor
ICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQ7CisgICAgUHJp
dmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kIHsgUHJpdmF0ZUZpZWxkUHV0S2lu
ZDo6bm9uZSgpIH07CisgICAgRUNNQU1vZGUgZWNtYU1vZGUgeyBFQ01BTW9kZTo6c2xvcHB5KCkg
fTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgLy8gT09QUzogRG8gd2Ug
bmVlZCBzdGFydCBmb3IgZGF0YSBJQ3M/CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJv
dXRpbmVQdHJUYWc+IHN0YXJ0OyAvLyBUaGlzIGlzIGVpdGhlciB0aGUgc3RhcnQgb2YgdGhlIGlu
bGluZSBJQyBmb3IgKmJ5SWQgY2FjaGVzLiBvciB0aGUgbG9jYXRpb24gb2YgcGF0Y2hhYmxlIGp1
bXAgZm9yICdpbnN0YW5jZW9mJyBjYWNoZXMuCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPiBzbG93UGF0aFN0YXJ0TG9jYXRpb247Cit9OworCiAjZWxzZQogCiBjbGFz
cyBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdXBlclNhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODQsNyArODQsNyBAQCB2b2lkIHByaW50U3VwZXJTYW1wbGVyU3RhdGUoKQogICAgIGRvdWJsZSBw
ZXJjZW50YWdlID0gMTAwLjAgKiBpbiAvIChpbiArIG91dCk7CiAgICAgaWYgKHBlcmNlbnRhZ2Ug
IT0gcGVyY2VudGFnZSkKICAgICAgICAgcGVyY2VudGFnZSA9IDAuMDsKLSAgICBkYXRhTG9nKCJQ
ZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIlxu
Iik7CisgICAgZGF0YUxvZygiUGVyY2VudCB0aW1lIGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6
ICIsIHBlcmNlbnRhZ2UsICIlXG4iKTsKIH0KIAogdm9pZCBlbmFibGVTdXBlclNhbXBsZXIoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogCisjaW5jbHVkZSAiQmFz
ZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCiAj
aW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCkBAIC03
OCw2ICs3OSw4IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSYKICAg
ICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeShsb2NrZXIpOwogICAgICAgICBtX3JhcmVE
YXRhLT5tX3ByaXZhdGVCcmFuZFJlcXVpcmVtZW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBy
aXZhdGVCcmFuZFJlcXVpcmVtZW50OjpOZWVkZWQpOwogICAgIH0KKworICAgIG1fbGxpbnRFeGVj
dXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVz
aG9sZEZvckpJVEFmdGVyV2FybVVwKCkpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KQEAgLTMxNiw0ICszMTksMzEgQEAgaW50IFVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVK
dW1wT2ZmcwogICAgIHJldHVybiBtX291dE9mTGluZUp1bXBUYXJnZXRzLmdldChieXRlY29kZU9m
ZnNldCk7CiB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorYm9vbCBVbmxpbmtlZENvZGVCbG9jazo6
aGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIC8vIE9PUFM6IGRv
IHdoYXQgQ29kZUJsb2NrIGRvZXMgYW5kIG1ha2UgYSBoYXNoIHRhYmxlPworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBp
ZiAoaWRlbnRpZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitpbnQzMl90IFVubGlua2Vk
Q29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dp
dGNoIChkaWRPcHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToK
KyAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKKyAg
ICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKKyAg
ICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDExIEBA
CiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAi
Qnl0ZWNvZGVDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkNvZGVUeXBlLmgiCiAjaW5jbHVkZSAi
REZHRXhpdFByb2ZpbGUuaCIKKyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVk
ZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5j
bHVkZSAiSWRlbnRpZmllci5oIgpAQCAtNjIsNiArNjQsNyBAQCBjbGFzcyBVbmxpbmtlZENvZGVC
bG9jazsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOwogY2xhc3MgVW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworY2xh
c3MgQmFzZWxpbmVKSVRDb2RlOwogc3RydWN0IEV4ZWN1dGFibGVJbmZvOwogZW51bSBjbGFzcyBM
aW5rVGltZUNvbnN0YW50IDogaW50MzJfdDsKIApAQCAtMTc1LDYgKzE3OCw3IEBAIHB1YmxpYzoK
IAogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50
UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIGNvbnN0IFdy
aXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgo
KV07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFu
dEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRv
Q29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsg
cmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKQEAgLTIwNyw2
ICsyMTEsMTUgQEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1v
ZGUpOyB9CiAKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29u
c3Q7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uQXQoQnl0ZWNvZGVJbmRleCBp
bmRleCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5kZXgpLnB0cigpOyB9Cisg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
KQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVj
dGlvbnMoKS5hdCgwKS5wdHIoKTsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zRW5k
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihpbnN0cnVjdGlvbnNCZWdpbikgKyBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0cnVjdGlvbiA+PSBpbnN0cnVjdGlvbnNCZWdpbiAm
JiBpbnN0cnVjdGlvbiA8IGluc3RydWN0aW9uc0VuZCk7CisgICAgICAgIHJldHVybiBpbnN0cnVj
dGlvbiAtIGluc3RydWN0aW9uc0JlZ2luOworICAgIH0KKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlv
bnNTaXplKCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyB9CiAKICAgICB1
bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2Fs
czsgfQogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0K
QEAgLTMzNCw2ICszNDcsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tZXRhZGF0YS0+
c2l6ZUluQnl0ZXMoKTsKICAgICB9CiAKKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9y
RnV6emluZ0Vhcmx5UmV0dXJuKCkKKyAgICB7CisgICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJl
IHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCisgICAgICAg
IHJldHVybiAhaXNCdWlsdGluRnVuY3Rpb24oKTsKKyAgICB9CisKKyNpZiBBU1NFUlRfRU5BQkxF
RAorICAgIGJvb2wgaGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOworI2VuZGlmCisK
KyAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7CiAKIHByb3Rl
Y3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSosIENvZGVUeXBlLCBj
b25zdCBFeGVjdXRhYmxlSW5mbyYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+KTsKQEAg
LTM5NCw2ICs0MTgsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGV4aWNhbFNjb3BlRmVh
dHVyZXMgOiA0OwogcHVibGljOgogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOworICAgIFJl
ZlB0cjxCYXNlbGluZUpJVENvZGU+IG1fdW5saW5rZWRCYXNlbGluZUNvZGU7CiBwcml2YXRlOgog
ICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzIHsgMCB9OwogICAgIFNvdXJjZVBhcnNlTW9kZSBt
X3BhcnNlTW9kZTsKQEAgLTQxMCw2ICs0MzUsOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbnN0cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVjdGlvbnM7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzczsKIAorICAgIC8vIE9PUFM6
IGJpbmQgYSBiZXR0ZXIgcGxhY2UgdG8gc3RvcmUgdGhpcyBzdHVmZj8KKyAgICBWZWN0b3I8Qmlu
YXJ5QXJpdGhQcm9maWxlPiBtX2JpbmFyeUFyaXRoUHJvZmlsZXM7CisgICAgVmVjdG9yPFVuYXJ5
QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKIAogI2lmIEVOQUJMRShERkdfSklU
KQogICAgIERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKQEAgLTQ1NSw2ICs0ODMsMzIg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5z
dHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChj
b25zdCBJbnN0cnVjdGlvbiogcGMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGlu
ZUp1bXBPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZEJp
bmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2Jp
bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX2JpbmFyeUFyaXRoUHJvZmlsZXMu
YXBwZW5kKEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSBtX3VuYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAg
IG1fdW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChVbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGJpbmFy
eUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX2JpbmFyeUFyaXRoUHJvZmlsZXNb
aV07IH0KKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgdW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQg
aSkgeyByZXR1cm4gbV91bmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KKworICAgIEJhc2VsaW5lRXhl
Y3V0aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIHsgcmV0dXJuIG1fbGxpbnRFeGVj
dXRlQ291bnRlcjsgfQorCisgICAgRml4ZWRWZWN0b3I8VmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJv
ZmlsZXM7CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNo
TWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjIsNiArNTE2LDcgQEAg
cHJpdmF0ZToKICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRz
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZl
Y3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAKIHByb3RlY3RlZDoKICAg
ICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgJKHJl
dmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9ja0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIHB1
YmxpYzoKICAgICBib29sIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7
IHJldHVybiBtX2NvZGVCbG9jay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9
CiAgICAgYm9vbCBoYXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5o
YXNDaGVja3BvaW50cygpOyB9CiAgICAgYm9vbCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVy
biBtX2NvZGVCbG9jay0+aGFzVGFpbENhbGxzKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlB
cml0aFByb2ZpbGUoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxl
KCk7IH0KKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpIHsgcmV0dXJuIG1fY29k
ZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpOyB9CiAKICAgICAvLyBVcGRhdGluZyBVbmxp
bmtlZENvZGVCbG9jay4KICAgICB2b2lkIHNldEhhc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9j
ay0+c2V0SGFzQ2hlY2twb2ludHMoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgy
MDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxNCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFVubGlua2VkTWV0YWRhdGFUYWJsZSk7CiAgICAgfQogCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZT4KKyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
aXNGaW5hbGl6ZWQpOworICAgICAgICB1aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJC
aXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bjb2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClb
T3Bjb2RlOjpvcGNvZGVJRF07CisgICAgICAgIHJldHVybiBiYXNlVHlwZU9mZnNldCArIHNpemVv
Zih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7CisgICAg
fQorCiBwcml2YXRlOgogICAgIGVudW0gRW1wdHlUYWcgeyBFbXB0eSB9OwogCkBAIC0xMDEsNiAr
MTA5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAg
ICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNl
dDE2ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NiBAQCB0ZW1wbGF0ZTx1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHNBcmd1bWVuCiBzdHJ1Y3QgVmFs
dWVQcm9maWxlQmFzZSB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1
Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVj
a2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJh
c2UoKQpAQCAtMTE4LDggKzExNyw2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1
cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJvbSBhbnkgdGhyZWFkCi0gICAgLy8g
dGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAgU3BlY3VsYXRlZFR5cGUgY29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiAgICAgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkg
ewpAQCAtMTM0LDcgKzEzMSw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAg
CiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgRW5jb2Rl
ZEpTVmFsdWUgbV9idWNrZXRzW3RvdGFsTnVtYmVyT2ZCdWNrZXRzXTsKIAogICAgIFNwZWN1bGF0
ZWRUeXBlIG1fcHJlZGljdGlvbiB7IFNwZWNOb25lIH07CkBAIC0xNTYsNiArMTUzLDcgQEAgc3Ry
dWN0IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldAogCiBzdHJ1Y3QgVmFsdWVQcm9m
aWxlIDogcHVibGljIFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4gewogICAg
IFZhbHVlUHJvZmlsZSgpIDogVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPigp
IHsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0c1swXSk7IH0KIH07CiAKIHN0
cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxl
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU5OCw3ICsxNTk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRVbmFyeQogICAgICAgICBlbWl0VW5hcnlPcDxPcE5vdD4oZHN0LCBzcmMpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhp
cywgZHN0LCBzcmMsIHR5cGUpOworICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNy
YywgdHlwZSwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIG9wX2JpdG5vdDoKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BCaXRub3Q+
KGRzdCwgc3JjKTsKQEAgLTE2OTYsMTMgKzE2OTYsMTMgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRUeXBlTwogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEluYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0
KTsKKyAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFy
aXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdERlYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BEZWM6
OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29k
ZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY4Miw3ICs2ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQq
PgogICAgICAgICBlbWl0QmluYXJ5T3AoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMx
LCBSZWdpc3RlcklEKiBzcmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMpOworICAg
ICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcywgbV9j
b2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgICAgIHJldHVybiBk
c3Q7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw2IEBAIHZvaWQqIHBy
ZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSoKICAgICBBU1NFUlQoSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBBU1NFUlQoIWNvZGVCbG9j
ay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0Nv
bW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VPU1JFbnRyeVRv
REZHKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAi
Q29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJE
RkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSklULmgiCkBAIC0xMTksMTAgKzEyMCwxMCBAQCB2
b2lkIGhhbmRsZUV4aXRDb3VudHMoVk0mIHZtLCBDQ2FsbEhlbHBlCiAgICAgaW50MzJfdCBjbGlw
cGVkVmFsdWU7CiAgICAgc3dpdGNoIChqaXQuY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewogICAg
IGNhc2UgSklUVHlwZTo6REZHSklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBCYXNlbGluZUV4
ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxP
YmplY3QoKSwgdGFyZ2V0VmFsdWUpOworICAgICAgICBjbGlwcGVkVmFsdWUgPSBCYXNlbGluZUV4
ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQodGFyZ2V0VmFsdWUpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKLSAgICAgICAgY2xpcHBlZFZhbHVlID0g
VXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChqaXQuY29kZUJsb2Nr
KCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9
IFVwcGVyVGllckV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQodGFyZ2V0VmFsdWUp
OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMzA5LDEwICszMTAsMTUgQEAgdm9pZCByZWlmeUlubGluZWRDYWxs
RnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICAgICAgdHJ1ZUNhbGxlciA/IEFzc2VtYmx5SGVs
cGVyczo6VXNlRXhpc3RpbmdUYWdSZWdpc3RlckNvbnRlbnRzIDogQXNzZW1ibHlIZWxwZXJzOjpD
b3B5QmFzZWxpbmVDYWxsZWVTYXZlZFJlZ2lzdGVyc0Zyb21CYXNlRnJhbWUsCiAgICAgICAgICAg
ICBHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1Q0KTsKIAorICAg
ICAgICAvLyBPT1BTOiBDb25zaWRlciBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGZvciBiYXNl
bGluZSBwYi9tZXRhZGF0YSByZWdpc3RlcnMKICAgICAgICAgaWYgKGNhbGxlcklzTExJbnQpIHsK
ICAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQu
YmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3Jl
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ci0+bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNl
bGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAg
ICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2
ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVy
czo6cGJHUFIpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRh
VGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxv
Y2ssIEpJVDo6c19tZXRhZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxp
bmVKSVRDb25zdGFudFBvb2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFz
ZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw2ICs0MTAsOSBA
QCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBM
TEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlv
bi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBl
bHNlIHsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVC
bG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0
LT5iYXNlbGluZUpJVENvbnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CisKICAg
ICAgICAgY29kZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKIAogICAg
ICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzMwLDYgKzczMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFp
cihjYWxsZWVUYWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1ZmZsZURh
dGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0
YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVEYXRh
Lm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7
CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCBpICsgMSk7CkBAIC04ODksNyArODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2Fz
ZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBpbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsKICAg
ICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAg
aW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAg
Q2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ1LDYgKzc0NSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAg
IHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0
YUZvcm1hdEpTKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9j
YXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBh
c3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQu
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAgICAg
ICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSAr
IDEpOwpAQCAtODk2LDcgKzg5Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAg
ICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0lu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAg
ICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICszOTg1LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJlZ2lzdGVy
U2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBKSVRQdXRC
eVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpE
RkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNlZFJl
Z2lzdGVycywKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29k
ZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2VkUmVnaXN0
ZXJzLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzOjpwYXlsb2FkT25seShwcm9wZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQUlJlZywg
c3R1YkluZm9HUFIpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1
ZTsKIApAQCAtMTQ3NzgsNyArMTQ3NzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TG9nU2hhZG93Q2hpCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBzY29wZVJlZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9q
aXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywg
c2NvcGVSZWcsIG1faml0LmNvZGVCbG9jaygpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5s
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29w
ZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2Fs
bFNpdGVJbmRleCk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMxNyw3ICs0MzE3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpID8gcGFy
YW1zLmdwU2NyYXRjaCgwKSA6IEludmFsaWRHUFJSZWc7CiAKICAgICAgICAgICAgIGF1dG8gZ2Vu
ZXJhdG9yID0gQm94PEpJVFB1dEJ5VmFsR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAgICAgICAgICAg
ICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4s
IGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLAorICAgICAgICAgICAgICAgIGpp
dC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxT
aXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLAogICAgICAgICAgICAgICAgIHBh
cmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcs
IHN0dWJJbmZvR1BSKTsKIAogICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKQEAgLTEwMTkxLDYgKzEwMTkxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtUGFzc2VkQXJnczsgaSA8IG51
bUFsbG9jYXRlZEFyZ3M7ICsraSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
LmFyZ3MuYXBwZW5kKFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpKTsKICAg
ICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFy
Z3M7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQu
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZs
ZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKHNlbWFudGljTm9kZU9yaWdp
bik7CkBAIC0xMDM0OSwxMyArMTAzNTAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQocGFyYW1zWzEgKyBpXS5yZWNvdmVyeUZvckpTVmFs
dWUoKSk7CiAKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVt
QXJnczsKKyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2so
KSk7CiAKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5j
b2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUkluZm86
OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8t
PmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRv
IHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUklu
Zm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZy
YW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAg
ICAgICAgICAgICB9KTsKQEAgLTEwNjk4LDcgKzEwNzAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxs
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1Qw
LCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA5NzksNyArMTA5ODEsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAg
aWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRH
UFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwg
R1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVG
b3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDE3ICs0MiwyOCBAQCBjbGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qo
b3ApCiAgICAgICAgIHJldHVybiBpZiBlbXB0eT8KIAotICAgICAgICBkZWYgY29udmVydEZpZWxk
cyhwcmVmaXgsIGZpZWxkcykKKyAgICAgICAgZGVmIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMo
cHJlZml4LCBmaWVsZE5hbWVzKQorICAgICAgICAgICAgZmllbGROYW1lcy5tYXAgZG8gfGZpZWxk
TmFtZXwKKyAgICAgICAgICAgICAgICAiI3twcmVmaXh9c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsxLi5dfSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgZW5k
LmpvaW4oIlxuIikKKyAgICAgICAgZW5kCisKKyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJl
Zml4LCBmaWVsZHMsIGZpZWxkTmFtZXMpCiAgICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVs
ZCwgdHlwZXwKICAgICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAg
ICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAn
ICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZp
eH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlLCBmaWVsZE5h
bWVzKX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307IgorICAgICAgICAg
ICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAgICAgICAgICAgIGZp
ZWxkTmFtZXMucHVzaChmaWVsZE5hbWUpCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0j
e3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgogICAgICAgICAgICAgICAgIGVuZAogICAgICAg
ICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0gY29u
dmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVsZE5hbWVzID0gW10K
KyAgICAgICAgcHJlZml4ID0gIiAgICAgICAgIgorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0Rmll
bGRzKHByZWZpeCwgQGZpZWxkcywgZmllbGROYW1lcykKKyAgICAgICAgZmllbGRzID0gZmllbGRz
ICsgIlxuIiArIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQog
CiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBA
aW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk4LDgg
KzY5OCwxMyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzCiAKIHZv
aWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGds
b2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0
TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBpbmZvKTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6
OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlu
a0luZm8qIGluZm8pCit7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpy
ZWdUMik7CiAgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwg
JnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlv
biA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihj
YWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxOCw2ICsxNzE4LDcgQEAgcHVibGljOgog
ICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5n
R2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3Bh
Y2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2Fs
bCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2Rl
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5l
SklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCisKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKKyNp
bmNsdWRlICJKdW1wVGFibGUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworSklUQWRkSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUQWRkSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0
aFByb2ZpbGUpOyB9CitKSVRNdWxJQyogTWF0aElDSG9sZGVyOjphZGRKSVRNdWxJQyhCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJv
ZmlsZSk7IH0KK0pJVFN1YklDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxl
KTsgfQorSklUTmVnSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0K
Kwordm9pZCBNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKQor
eworICAgIG1fYWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2FkZElDcyk7CisgICAgbV9tdWxJQ3Mg
PSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAgICBtX25lZ0lDcyA9IFdURk1vdmUob3RoZXIu
bV9uZWdJQ3MpOworICAgIG1fc3ViSUNzID0gV1RGTW92ZShvdGhlci5tX3N1YklDcyk7Cit9CisK
K0Jhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4g
Y29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKKyAgICA6IERpcmVj
dEpJVENvZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklUKQorICAgICwgTWF0aElDSG9sZGVyKCkKK3sgfQorCitCYXNlbGluZUpJVENvZGU6On5CYXNl
bGluZUpJVENvZGUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5j
bHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKKy8vY2xhc3MgSklUQWRkSUM7CisvL2NsYXNzIEpJVE11bElDOworLy9jbGFzcyBKSVRT
dWJJQzsKKy8vY2xhc3MgSklUTmVnSUM7CitjbGFzcyBCaW5hcnlBcml0aFByb2ZpbGU7CitjbGFz
cyBVbmFyeUFyaXRoUHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwor
c3RydWN0IFNpbXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKK2NsYXNz
IE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9s
ZGVyJiBvdGhlcik7CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmls
ZSopOworICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAg
ICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTmVn
SUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CisKKyAgICAvKgorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBl
PgorICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7
IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3Nh
bWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUTXVs
SUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJ
VE11bElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3Is
IEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVROZWdJQyogYWRkTWF0aElD
KFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxl
KTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0
b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisgICAgKi8K
KworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJ
Qz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3Vi
SUM+IG1fc3ViSUNzOworfTsKKworY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKK3B1YmxpYzoKKyAg
ICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisgICAgZW51bSBjbGFzcyBUeXBlIDogdWlu
dDhfdCB7CisgICAgICAgIEdsb2JhbE9iamVjdCwKKyAgICAgICAgQ2FsbExpbmtJbmZvLAorICAg
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAgRnVuY3Rpb25EZWNsLAorICAgICAgICBG
dW5jdGlvbkV4cHIsCisgICAgfTsKKworICAgIHN0cnVjdCBWYWx1ZSB7CisgICAgICAgIC8vIE9P
UFM6IE1ha2UgdGhlIHBvaW50ZXIgcGFja2VkLgorICAgICAgICBUeXBlIHR5cGU7CisgICAgICAg
IHZvaWQqIHBheWxvYWQ7CisgICAgfTsKKworICAgIEpJVENvbnN0YW50UG9vbCgpID0gZGVmYXVs
dDsKKyAgICBKSVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAg
ICBKSVRDb25zdGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0
OworCisgICAgQ29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIp
CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXplKCk7Cisg
ICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1ZSBhdChzaXplX3QgaSkgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+
IG1fY29uc3RhbnRzOworfTsKKworCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGly
ZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVK
SVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiB3aXRoQXJpdHlDaGVjayk7CisgICAgfkJhc2VsaW5lSklUQ29kZSgpIG92ZXJyaWRlOworCisg
ICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgQmFnPENh
bGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsgLy8gT09QUzogbWFrZSBzdXJlIHdlIHZp
c2l0IHRoZXNlIHNvbWVob3cuIE9yIGFzc2VydCB3ZSBkb24ndCBoYXZlIHRvLCBzaW5jZSB0aGV5
J3JlIHZpcnR1YWwgY2FsbHMuCisgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1f
dW5saW5rZWRTdHViSW5mb3M7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3
aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXM7CisgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisgICAgSklU
Q29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklU
UGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgc2l6ZV90IEJhc2VsaW5l
SklUUGxhbjo6Y29kZVNpemUoKSBjb25zdAogCiBDb21waWxhdGlvblJlc3VsdCBCYXNlbGluZUpJ
VFBsYW46OmZpbmFsaXplKCkKIHsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2pp
dC5maW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9
IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKG1fY29kZUJsb2NrKTsKICAgICBzd2l0Y2ggKHJl
c3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CiAgICAgICAgIENPREVCTE9DS19M
T0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZh
aWxlZCIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5j
cHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxI
ZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDYgQEAgdm9pZCBDQ2FsbEhl
bHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sbwogICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2Nv
cGUpKSk7CiB9CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3Bl
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQotewot
ICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7Ci0g
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJr
ZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCBjYWxsZWUpKSk7Ci0gICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNW
YWx1ZSkpKTsKLSAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVD
VF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwotICAgIHN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKLSAgICBzdG9yZTMy
KFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0
LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkp
OwotfQotCiB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYg
dm0sIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVn
IHNjcmF0Y2gyKQogewogICAgIFNoYWRvd0NoaWNrZW4qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFk
b3dDaGlja2VuKCk7CkBAIC03Miw2ICs2MiwyOCBAQCB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJl
U2hhZG93Q2hpY2tlblBhCiAgICAgc3RvcmVQdHIoc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDFO
b25BcmdHUFIpKTsKIH0KIAorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK3Zv
aWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNo
YWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2Nr
VHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBzdG9y
ZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOworICAgIHN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgY2FsbGVlKSkpOworICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFj
a2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7
CisgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKKyAgICBzdG9yZVB0cihjb2RlQmxv
Y2ssIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6
UGFja2V0LCBjb2RlQmxvY2spKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJ
bmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKK30KKwordm9pZCBDQ2FsbEhlbHBl
cnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFs
dWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxT
aXRlSW5kZXgpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBz
Y29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQorewor
ICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdz
LCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwogdm9pZCBDQ2FsbEhlbHBl
cnM6OmVtaXRKSVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRh
Zz4gd2hlcmUsIFNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPiBlbWl0Q29kZSwgY29u
c3QgY2hhciogZGVzY3JpcHRpb24pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMjgyMDE2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtODQwLDcgKzg0MCwxNCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2Ugb3BlcmF0aW9ucyBj
bG9iYmVyIGFsbCB2b2xhdGlsZSByZWdpc3RlcnMuIFRoZXkgYXNzdW1lIHRoYXQgdGhlcmUgaXMg
cm9vbSBvbiB0aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sgdG8gbWFyc2hhbGwgY2FsbCBhcmd1bWVu
dHMuCiAgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoR1BSUmVnIHNoYWRv
d1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NvcGUpOwotICAgIHZvaWQgbG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CisKK3ByaXZh
dGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgdm9pZCBsb2dT
aGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJl
Z3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxT
aXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CitwdWJsaWM6CisgICAgdm9pZCBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywg
R1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4KTsKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBj
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisKICAgICAvLyBMZWF2ZXMg
YmVoaW5kIGEgcG9pbnRlciB0byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFk
b3dQYWNrZXQuCiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVn
IHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVEYXRhLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3
LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1
cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CisgICAgc2V0dXBD
YWxsZWVTYXZlUmVnaXN0ZXJzKGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30K
Kwordm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMpCit7CiAgICAg
UmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycyB7IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNh
dmVSZWdpc3RlcnMoKSB9OwotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3Rl
clNhdmVMb2NhdGlvbnMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5zaXplKCk7ICsr
aSkgewogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5IHsgcmVnaXN0ZXJTYXZlTG9jYXRp
b25zLT5hdChpKSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVT
aHVmZmxlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Mywx
MSArNDMsMTMgQEAgcHVibGljOgogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOwogICAg
IHVuc2lnbmVkIG51bUxvY2FscyB7IFVJTlRfTUFYIH07CiAgICAgdW5zaWduZWQgbnVtUGFzc2Vk
QXJncyB7IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycyB7IFVJTlRfTUFY
IH07IC8vIE9uIG91ciBtYWNoaW5lIGZyYW1lLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVn
aXN0ZXJNYXA8VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOwogICAgIEdQUlJlZyBudW1iZXJUYWdS
ZWdpc3RlciB7IEludmFsaWRHUFJSZWcgfTsKIAogICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVn
aXN0ZXJzKENvZGVCbG9jayopOworICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0Kik7CiAjZW5kaWYKICAgICBWYWx1ZVJlY292ZXJ5IGNh
bGxlZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVyLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEzICszOCwx
MyBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhCiAgICAgOiBtX2pp
dChqaXQpCiAgICAgLCBtX29sZEZyYW1lKGRhdGEubnVtTG9jYWxzICsgQ2FsbGVyRnJhbWVBbmRQ
Qzo6c2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQogICAgICwgbV9uZXdGcmFtZShkYXRhLmFyZ3Mu
c2l6ZSgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCi0gICAg
LCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMK
LSAgICAgICAgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoaml0LmNvZGVCbG9jaygp
LT5udW1QYXJhbWV0ZXJzKCkpKQorICAgICwgbV9hbGlnbmVkT2xkRnJhbWVTaXplKENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1l
KGRhdGEubnVtUGFyYW1ldGVycykpCiAgICAgLCBtX2FsaWduZWROZXdGcmFtZVNpemUoQ2FsbEZy
YW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMKICAgICAgICAgKyByb3VuZEFyZ3VtZW50Q291bnRU
b0FsaWduRnJhbWUoZGF0YS5hcmdzLnNpemUoKSkpCiAgICAgLCBtX2ZyYW1lRGVsdGEobV9hbGln
bmVkTmV3RnJhbWVTaXplIC0gbV9hbGlnbmVkT2xkRnJhbWVTaXplKQogICAgICwgbV9sb2NrZWRS
ZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpKQogICAgICwgbV9udW1QYXNzZWRB
cmdzKGRhdGEubnVtUGFzc2VkQXJncykKKyAgICAsIG1fbnVtUGFyYW1ldGVycyhkYXRhLm51bVBh
cmFtZXRlcnMpCiB7CiAgICAgLy8gV2UgYXJlIGFsbG93ZWQgYWxsIHRoZSB1c3VhbCByZWdpc3Rl
cnMuLi4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsg
aS0tOyApCkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFy
ZUZvclRhaWxDYQogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9m
ZnNldCksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhcmd1bWVu
dENvdW50T0sgPQogICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dP
ckVxdWFsLCBtX25ld0ZyYW1lQmFzZSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpOworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX251bVBhcmFtZXRlcnMpKTsKICAgICBt
X2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50UmVn
aXN0ZXJzKCkgLSAxICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpLCBtX25ld0Zy
YW1lQmFzZSk7CiAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigt
c3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5t
dWwzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBtX25l
d0ZyYW1lQmFzZSwgbV9uZXdGcmFtZUJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDQsNiArMTA0LDcgQEAgcHVibGljOgogICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBk
YXRhOwogICAgICAgICBkYXRhLm51bUxvY2FscyA9IG51bUxvY2FscygpOwogICAgICAgICBkYXRh
Lm51bVBhc3NlZEFyZ3MgPSBtX251bVBhc3NlZEFyZ3M7CisgICAgICAgIGRhdGEubnVtUGFyYW1l
dGVycyA9IG1fbnVtUGFyYW1ldGVyczsKICAgICAgICAgZGF0YS5jYWxsZWUgPSBnZXROZXcoVmly
dHVhbFJlZ2lzdGVyIHsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIH0pLT5yZWNvdmVyeSgpOwogICAg
ICAgICBkYXRhLmFyZ3MucmVzaXplKGFyZ0NvdW50KCkpOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFyZ0NvdW50KCk7ICsraSkKQEAgLTc5OCw2ICs3OTksNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgcGVyZm9ybVNhZmVXcml0ZXMoKTsKICAgICAKICAgICB1bnNpZ25lZCBtX251bVBh
c3NlZEFyZ3MgeyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG1fbnVtUGFyYW1ldGVycyB7IFVJ
TlRfTUFYIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BCiB9CiAKIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkK
LSAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQorICAgIDogSlNJbnRlcmZhY2VK
SVQoJnZtLCBudWxscHRyKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKICAg
ICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
IDogMCkKICAgICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtKQpAQCAtNzcsNiArNzcs
OSBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX3No
b3VsZEVtaXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKKyAgICBtX2dsb2JhbE9iamVjdENvbnN0
YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2Jq
ZWN0KTsKKyAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrID0gY29kZUJsb2NrOworICAgIG1fdW5saW5r
ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiB9CiAKIEpJVDo6
fkpJVCgpCkBAIC05MCw4ICs5Myw4IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25D
aGVjaygpCiAgICAgICAgIHJldHVybjsKIAogICAgIEp1bXBMaXN0IHNraXBPcHRpbWl6ZTsKLSAg
ICAKLSAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZElt
bTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWJzb2x1
dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwor
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7
CisgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0z
MihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFkZHJlc3Mo
cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIEFT
U0VSVCghbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKIAogICAgIGNvcHlMTEludEJhc2VsaW5l
Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTExMywxNSArMTE2LDIxIEBAIHZvaWQgSklUOjpl
bWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCoKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5v
dEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoR1BS
UmVnIHBvaW50ZXJUb1NldCkKK3ZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQ
UlJlZyBwb2ludGVyVG9TZXQpCiB7CisgICAgLy8gT09QUzogVGFrZSBhIGJvb2xlYW4gb3Igc29t
ZXRoaW5nIHNheWluZyBpZiB3ZSBjYW4gYmUgbnVsbC4KKyAgICBhdXRvIG9rID0gYnJhbmNoVGVz
dFB0cihaZXJvLCBwb2ludGVyVG9TZXQpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1
YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBvay5saW5rKHRoaXMpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUp
Cit2b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUs
IEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIg
fHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+dmFyUmVhZE9ubHlXYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRl
KCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBpZiAocmVzb2x2ZVR5cGUg
PT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpIHsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVj
dCwgbV92YXJSZWFkT25seVdhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6
b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfQog
fQogCiB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKQEAgLTEyOSw3ICsxMzgs
NyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICAgICBpZiAoIUFTU0VS
VF9FTkFCTEVEKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBKdW1wIG9rID0gYnJhbmNoUHRyKEVx
dWFsLCByZWdUMCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGJyZWFrcG9pbnQoKTsKICAg
ICBvay5saW5rKHRoaXMpOwpAQCAtMTgxLDIxICsxOTAsNDEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
Q2FzZUNhbGwoY29uc3QgSW5zdHJ1YwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3Zv
aWQgSklUOjplbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZSk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEpT
RnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJlc3VsdCk7CisgICAg
YXV0byBoYXNFeGVjdXRhYmxlID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHQsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgbG9hZFB0
cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkg
LSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHJlc3VsdCk7CisgICAgaGFzRXhlY3V0YWJsZS5s
aW5rKHRoaXMpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkp
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zm
c2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSksIHJlc3VsdCk7CisgICAgZWxzZQorICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29k
ZUJsb2NrRm9yQ2FsbCgpKSwgcmVzdWx0KTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQs
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6Om9mZnNldE9mQ29kZUJsb2NrKCkpLCByZXN1bHQp
OworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZXN1bHQsIENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKICAg
ICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAi
LCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1f
cHJvZmlsZWRDb2RlQmxvY2ssICJcbiIpOwogICAgIAogICAgIGppdEFzc2VydFRhZ3NJblBsYWNl
KCk7CiAgICAgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsKICAgICAKLSAgICBhdXRvJiBp
bnN0cnVjdGlvbnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Ci0gICAgdW5zaWduZWQg
aW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7Cisg
ICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCk7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwog
Ci0gICAgVk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgQnl0ZWNvZGVJbmRleCBzdGFy
dEJ5dGVjb2RlSW5kZXgoMCk7CisKKyAgICAvLyBPT1BTOiBNYXliZSBvbmx5IGRvIHRoaXMgaWYg
d2UgZGlzYWJsZSBzaGFyaW5nIHNvbWVob3c/CisgICAgLyoKKyAgICBWTSYgdm0gPSBtX3VubGlu
a2VkQ29kZUJsb2NrLT52bSgpOwogICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgg
JiYgKG1fY29kZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJsb2NrPih2bSkgfHwgbV9jb2Rl
QmxvY2stPmluaGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtKSkpIHsKICAgICAgICAg
Ly8gV2UgY2FuIG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBleGVjdXRlIFBy
b2dyYW1Db2RlQmxvY2sncyBleGFjdGx5IG9uY2UuCiAgICAgICAgIC8vIFRoaXMgb3B0aW1pemF0
aW9uIHdvdWxkIGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRoZSBMTEludCBkZXRlcm1pbmVz
IGl0IHdhbnRzIHRvCkBAIC0yMzYsNiArMjY1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAgICovCiAKICAg
ICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CiAgICAgZm9yIChtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0
cnVjdGlvbkNvdW50OyApIHsKQEAgLTI3OCw4ICszMDgsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFj
ZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpD
b250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0
eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9n
TG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwg
IiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTUyNyw3ICs1NTcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1f
Ynl0ZWNvZGVJbmRleDsKIAotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCku
cHRyKCk7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBt
X3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0
cigpOwogICAgICAgICAKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJCYXNlbGluZSBKSVQgZW1pdHRpbmcgc2xvdyBjb2RlIGZvciAiLCBt
X2J5dGVjb2RlSW5kZXgsICIgYXQgb2Zmc2V0ICIsIChsb25nKWRlYnVnT2Zmc2V0KCkpOwpAQCAt
NTQ1LDggKzU3NSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAg
ICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkp
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9j
azsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7Cisg
ICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4o
KS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVj
b2RlT2Zmc2V0LCAiXSBTTE9XICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3
UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0KQEAgLTY3NCw1NSArNzA0LDU2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpCiAjZW5kaWYKIH0KIAordm9pZCBKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRh
QW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCkKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHNfbWV0YWRhdGFHUFIpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSks
IHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6
b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKK30KKwordm9pZCBK
SVQ6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKQoreworICAgIEJhc2U6OmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6Q2FwYWJpbGl0
eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOworICAgIC8vIE9P
UFM6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGRvbmUgb24gdW5saW5rZWQgY29kZSBibG9jaz8KKyAg
ICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmNhcGFi
aWxpdHlMZXZlbCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIERGRzo6Q2Fubm90
Q29tcGlsZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZToK
ICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5CZU9wdGlt
aXplZCA9IHRydWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwog
ICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChtX2NvZGVCbG9jay0+Y29kZVR5cGUo
KSkgewotICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICBjYXNlIE1vZHVsZUNvZGU6Ci0gICAgY2Fz
ZSBFdmFsQ29kZToKLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
ID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAgICAg
ICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0
ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCi0gICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRo
YXQgb2JzZXJ2YXRpb24uCi0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5s
aW5lZCAmPSBjYW5JbmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbihtX2Nv
ZGVCbG9jayk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICAgIGlmIChtX2NvZGVCbG9jay0+
bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX2NvZGVCbG9jay0+bnVtYmVy
T2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgewotICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAobV9jb2Rl
QmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBt
X2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IEZp
eGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
d2l0Y2hKdW1wVGFibGVzKCkpOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+
ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVj
dG9yPFN0cmluZ0p1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGVzKCkpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJl
ck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAgICAgaWYgKG1fdW5s
aW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAg
ICAgICAgICBtX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+
KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkp
OworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
cyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CiAgICAgfQogCi0gICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkp
KSkKLSAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4o
bV9jb2RlQmxvY2spOworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHko
KSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxl
QmFzZWxpbmVGb3JQcm9maWxlcigpKSkpIHsKKyAgICAgICAgLy8gT09QUzogYnVpbGQgYSBkaXNh
c3NlbWJsZXIgb2ZmIHVubGlua2VkIGNvZGUgYmxvY2sKKyAgICAgICAgbV9kaXNhc3NlbWJsZXIg
PSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9wcm9maWxlZENvZGVCbG9jayk7CisgICAg
fQogICAgIGlmIChVTkxJS0VMWShtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpKSB7CisgICAg
ICAgIC8vIE9PUFM6IGJ1aWxkIHByb2ZpbGVyIGRpc2Fzc2VtYmxlciBvZmYgdW5saW5rZWQgY29k
ZSBibG9jawogICAgICAgICBtX2NvbXBpbGF0aW9uID0gYWRvcHRSZWYoCiAgICAgICAgICAgICBu
ZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKAotICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0
ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fY29kZUJsb2NrKSwKKyAgICAgICAg
ICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvciht
X3Byb2ZpbGVkQ29kZUJsb2NrKSwKICAgICAgICAgICAgICAgICBQcm9maWxlcjo6QmFzZWxpbmUp
KTsKLSAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOworICAgICAgICBtX2NvbXBpbGF0aW9u
LT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpKTsK
QEAgLTc0MiwxMSArNzczLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW4KICAgICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAg
IGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5j
dGlvbkNvZGUpCisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSgpOwog
CiAgICAgTGFiZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAotICAgIGludCBmcmFtZVRvcE9mZnNldCA9
IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwor
ICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2Vk
Q29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXpl
ID0gLWZyYW1lVG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVUb3BPZmZz
ZXQpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwogICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZs
b3c7CkBAIC03NTcsMTYgKzc4OSwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluCiAgICAgbW92ZShyZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzKCk7
CisgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRNYXRlcmlhbGl6ZVRhZ0No
ZWNrUmVnaXN0ZXJzKCk7CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBv
b2xSZWdpc3RlcnMoKTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5j
dGlvbkNvZGUpIHsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBG
dW5jdGlvbkNvZGUpIHsKICAgICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyAr
K2FyZ3VtZW50KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpID4gMSkpIHsKKyAgICAgICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDIpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVBy
b2ZpbGVzKCkgKyBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+OjpvZmZzZXRPZlN0b3JhZ2UoKSks
IHJlZ1QyKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3Vt
ZW50IDwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7
CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdh
bnQgdG8gcHV0IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCiAgICAgICAgICAgICAgICAg
Ly8ga2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8g
cmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2st
PmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCisgICAgICAgICAgICAgICAgaWYgKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxsRnJh
bWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC03NzcsMTIgKzgx
MywxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAg
ICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpKTsKICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rl
ciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1
bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSwg
cmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdzLCBBZGRy
ZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpICsgVmFsdWVQcm9maWxl
OjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2RlQmxvY2st
PmppdFR5cGUoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXplTWFya2Vy
KSkKICAgICAgICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92ZSgqc2l6
ZU1hcmtlciksICp0aGlzKTsKQEAgLTc5OSwyNCArODM1LDI3IEBAIHZvaWQgSklUOjpjb21waWxl
QW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUlu
ZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNhbGxPcGVyYXRp
b25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3Zl
cmZsb3dFcnJvciwgbV9jb2RlQmxvY2spOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb25X
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZs
b3dFcnJvciwgcmVnVDApOwogCiAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGlz
IDEsIHdlIG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCi0gICAgYm9vbCByZXF1aXJlc0FyaXR5
Rml4dXAgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7Ci0gICAgaWYgKG1fY29k
ZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXAp
IHsKKyAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSAhPSAxOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKICAgICAgICAgbV9h
cml0eUNoZWNrID0gbGFiZWwoKTsKLSAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgJm1f
Y29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7CisKICAgICAgICAgZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJs
b2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICBlbWl0UHV0Q29kZUJsb2Nr
VG9GcmFtZUluUHJvbG9ndWUocmVnVDApOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDAp
LCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVk
KCkpKTsKIAogICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QxKTsKLSAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKS5s
aW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CisgICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDEsIFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkp
KS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAKICAgICAgICAgbV9ieXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleCgwKTsKIAogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQz
Ml90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlv
bihtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlD
aGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
Q2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0
cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFy
aXR5Q2hlY2ssIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJyYW5j
aFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwpA
QCAtODM5LDcgKzg3OCw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6
aW4KICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKICAgICBt
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKLSAgICBtX2xpbmtCdWZmZXIg
PSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fY29k
ZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CisgICAg
bV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVy
KCp0aGlzLCBtX3VubGlua2VkQ29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGlu
ZUpJVCwgZWZmb3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04NTgsOCArODk3LDggQEAgdm9p
ZCBKSVQ6OmxpbmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAgICAgIGNh
c2UgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpD
aGFyYWN0ZXI6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3Jk
LmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB1
bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewogICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIG9mZnNldCA9IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzW2pdOwpA
QCAtODcxLDggKzkxMCw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2UgU3dpdGNoUmVjb3JkOjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5s
aW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAgICAgICAg
IGF1dG8gY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+
KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAg
ICAgICAgIGZvciAoYXV0byYgbG9jYXRpb24gOiB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUu
dmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsb2NhdGlvbi5t
X2JyYW5jaE9mZnNldDsKQEAgLTkwNiwzMiArOTQ1LDM1IEBAIHZvaWQgSklUOjpsaW5rKCkKICAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIHJlY29yZC5jYWxsZWUpOwog
ICAgIH0KIAotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHMsIHBhdGNoQnVmZmVy
KTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIpOwot
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIp
OwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAg
ICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1faW5CeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyht
X2luc3RhbmNlT2ZzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9w
cml2YXRlQnJhbmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOworICAgIGF1dG8gZmluYWxpemVJQ3Mg
PSBbJl0gKGF1dG8mIGdlbmVyYXRvcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5l
cmF0b3JzKSB7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsK
KyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1fZG9uZSk7CisgICAgICAg
ICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zbG93UGF0aEJl
Z2luKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzKTsK
KyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlk
c1dpdGhUaGlzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX3B1dEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeUlkcyk7CisgICAgZmluYWxp
emVJQ3MobV9kZWxCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeUlkcyk7CisgICAgZmlu
YWxpemVJQ3MobV9pbkJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9mcyk7Cisg
ICAgZmluYWxpemVJQ3MobV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7CiAKICAgICBmb3IgKGF1dG8m
IGNvbXBpbGF0aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewotICAgICAgICBDYWxs
TGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAgICAgICAg
aW5mby5zZXRDb2RlTG9jYXRpb25zKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCi0gICAg
ICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0
aW9uSW5mby5kb25lTG9jYXRpb24pKTsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIGlu
Zm8gPSAqY29tcGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBpbmZv
LmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
Y29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbik7CiAgICAgfQogCi0gICAgewotICAgICAgICBK
SVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyAr
K2J5dGVjb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZz
ZXRdLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50
cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAgICB9Ci0gICAgICAg
IG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCkp
OworICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOworICAgIGZvciAodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUo
KTsgKytieXRlY29kZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZz
ZXRdLmlzU2V0KCkpCisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNv
ZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0
clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAgICAgaWYgKFVOTElL
RUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDI2ICs5ODIsMzcgQEAg
dm9pZCBKSVQ6OmxpbmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShtX2NvbXBpbGF0aW9u
KSkgeworICAgICAgICAvLyBPT1BTOiBtYWtlIGJ5dGVjb2RlIHByb2ZpbGVyIGtub3cgYWJvdXQg
dW5saW5rZWQgQ0I/CiAgICAgICAgIGlmIChPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9y
UHJvZmlsZXIoKSkKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVy
KG1fY29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsKLSAgICAgICAgbV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2NvZGVCbG9jaywgKm1fY29tcGlsYXRp
b24pOworICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9u
KG1fcHJvZmlsZWRDb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKICAgICB9CiAKICAgICBpZiAo
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCiAgICAgICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3Zl
KG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpOwogICAgIAorICAgIC8v
IE9PUFM6IE1ha2UgYSB2ZXJzaW9uIG9mIENvZGVCbG9ja1dpdGhKSVRUeXBlIHRoYXQga25vd3Mg
YWJvdXQgVW5saW5rZWRDb2RlQmxvY2suCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1
bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywK
LSAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tX
aXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwor
ICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dp
dGhKSVRUeXBlKG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0
YSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0
aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fYXJp
dHlDaGVjayk7Ci0gICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJl
c3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSk7CisgICAgbV9qaXRD
b2RlID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVj
aykpOworCisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBXVEZNb3ZlKG1fdW5saW5r
ZWRDYWxscyk7CisgICAgbV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9zID0gV1RGTW92ZSht
X2V2YWxDYWxsTGlua0luZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3Mg
PSBXVEZNb3ZlKG1fdW5saW5rZWRTdHViSW5mb3MpOworICAgIG1faml0Q29kZS0+bV9zd2l0Y2hK
dW1wVGFibGVzID0gV1RGTW92ZShtX3N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0Q29kZS0+
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMpOworICAgIG1faml0Q29kZS0+bV9qaXRDb2RlTWFwID0gaml0Q29kZU1hcEJ1aWxkZXIuZmlu
YWxpemUoKTsKKyAgICBtX2ppdENvZGUtPmFkb3B0TWF0aElDcyhtX21hdGhJQ3MpOworICAgIG1f
aml0Q29kZS0+bV9jb25zdGFudFBvb2wgPSBXVEZNb3ZlKG1fY29uc3RhbnRQb29sKTsKIAogICAg
IGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0
ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1
dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1l
bW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5l
cmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2VkQ29kZUJsb2NrLCBy
ZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5l
eGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQogCi1Db21waWxhdGlv
blJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJ
VDo6ZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTk2OCwyNSArMTAyMSwy
MSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyCiAKICAgICBtX2xp
bmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCi0gICAgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAg
ICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01v
ZGU6OkxhdGVTaHJpbmspOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9j
b2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7Ci0gICAgICAgIEhh
bmRsZXJJbmZvJiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0g
ICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgotICAgICAgICBoYW5k
bGVyLm5hdGl2ZUNvZGUgPSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQoQnl0ZWNvZGVJ
bmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7
Ci0gICAgfQorICAgIC8vIE9PUFM6IERvbid0IHRoaW5rIHRoaXMgc2hyaW5rIGlzIHJlYWxseSBk
b2luZyBhbnl0aGluZyBhbnltb3JlLiBWZXJpZnkuCisgICAgLy97CisgICAgLy8gICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAvLyAgICBtX2Nv
ZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVT
aHJpbmspOworICAgIC8vfQogCisgICAgLy8gT09QUzogbV9wY1RvQ29kZU9yaWdpbk1hcCBzaG91
bGQgbGl2ZSBvbiBCYXNlbGluZUpJVENvZGUgZm9yIGJhc2VsaW5lIGNvZGVibG9ja3MuCiAgICAg
aWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29k
ZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKKyAgICAgICAgbV9wcm9m
aWxlZENvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoV1RGTW92ZShtX3BjVG9Db2RlT3Jp
Z2luTWFwKSk7CiAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9y
QmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2ppdENvZGUt
PnNpemUoKSkgLwotICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnNTaXplKCkpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKIAotICAgIG1fY29kZUJsb2NrLT5zZXRK
SVRDb2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBjb2RlQmxvY2stPnNldHVw
V2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAog
ICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CkBAIC05OTgsMTEgKzEwNDcsMTEg
QEAgc2l6ZV90IEpJVDo6Y29kZVNpemUoKSBjb25zdAogICAgIHJldHVybiBtX2xpbmtCdWZmZXIt
PnNpemUoKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSVRD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVD
b21waWxlKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiB7CiAgICAgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgY29t
cGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhlZmZvcnQpOwotICAgIHJldHVybiBmaW5hbGl6
ZU9uTWFpblRocmVhZCgpOworICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZChjb2RlQmxv
Y2spOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCkBA
IC0xMDQyLDE4ICsxMDkxLDI4IEBAIHZvaWQgSklUOjpkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJl
Zm9yZUMKICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVz
KCptX3ZtLCAiUHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24uIl9zKTsKIH0KIAotdW5zaWdu
ZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNp
Z25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJs
b2NrKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxv
Y2FscygpKSkpOwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdpc3RlckNvdW50Rm9yRnJhbWVQ
b2ludGVyT2Zmc2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAotaW50IEpJVDo6c3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lz
dGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGZyYW1lUmVn
aXN0ZXJDb3VudEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCitpbnQg
SklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3RlckNvdW50
Rm9yKGNvZGVCbG9jaykgLSAxKS5vZmZzZXQoKTsKIH0KIAoraW50IEpJVDo6c3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBzdGFja1BvaW50
ZXJPZmZzZXRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKwogSGFzaE1h
cDxDU3RyaW5nLCBTZWNvbmRzPiBKSVQ6OmNvbXBpbGVUaW1lU3RhdHMoKQogewogICAgIEhhc2hN
YXA8Q1N0cmluZywgU2Vjb25kcz4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAKICNkZWZpbmUgQVNTRVJUX0pJVF9PRkZT
RVQoYWN0dWFsLCBleHBlY3RlZCkgQVNTRVJUX1dJVEhfTUVTU0FHRShhY3R1YWwgPT0gZXhwZWN0
ZWQsICJKSVQgT2Zmc2V0IFwiJXNcIiBzaG91bGQgYmUgJWQsIG5vdCAlZC5cbiIsICNleHBlY3Rl
ZCwgc3RhdGljX2Nhc3Q8aW50PihleHBlY3RlZCksIHN0YXRpY19jYXN0PGludD4oYWN0dWFsKSk7
CiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIK
ICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJKSVREaXNhc3NlbWJsZXIu
aCIKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJK
SVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKKyNp
bmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2lu
Y2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CkBAIC0x
NDksMTQgKzE1MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgc3RydWN0IENh
bGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1Bh
dGhTdGFydDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVMb2NhdGlvbjsKLSAg
ICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CisgICAgICAgIFVubGlua2VkQ2FsbExp
bmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKICAgICB9OwogCiAgICAgdm9pZCBjdGlQYXRj
aENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKLSAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJ
R05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgIGNsYXNzIEpJVF9DTEFT
U19BTElHTk1FTlQgSklUIDogcHVibGljIEpTSW50ZXJmYWNlSklUIHsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxs
OwogICAgICAgICBmcmllbmQgY2xhc3MgSklUVGh1bmtzOwpAQCAtMTcxLDYgKzE3Myw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQs
IGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCiAgICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7CiAK
KyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgcHVibGljOgogICAg
ICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NS
RW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7
CkBAIC0xNzgsMjggKzE4MiwzMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVk0mIHZtKCkg
eyByZXR1cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CiAKICAgICAgICAgdm9pZCBjb21waWxl
QW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKLSAgICAgICAg
Q29tcGlsYXRpb25SZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICAgICAgQ29tcGls
YXRpb25SZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKik7CiAgICAgICAgIHNp
emVfdCBjb2RlU2l6ZSgpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgZG9NYWluVGhyZWFkUHJlcGFy
YXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgQ29tcGlsYXRp
b25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29k
ZUluZGV4KDApKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxv
Y2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOworICAgICAgICAgICAg
cmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUo
Y29kZUJsb2NrLCBlZmZvcnQpOwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogICAgICAgICBzdGF0
aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOworICAgICAgICBz
dGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogICAg
ICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsKIAogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBj
b21waWxlVGltZVN0YXRzKCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTZWNv
bmRzIHRvdGFsQ29tcGlsZVRpbWUoKTsKIAorICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzX21ldGFkYXRhR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUjsKKyAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19jb25zdGFudHNHUFIgPSBMTEludDo6UmVn
aXN0ZXJzOjpwYkdQUjsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVNYWluUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAg
ICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpOwogICAgICAgICB2b2lkIGxpbmso
KTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRp
b25FZmZvcnQpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShDb2Rl
QmxvY2sqLCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBv
dXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENh
bGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9u
KQpAQCAtMjIzLDYgKzIzMiwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlm
CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxv
YWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBs
b2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBs
b2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7
CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNv
ZGU+CisgICAgICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUsIGNvbnN0IEJ5dGVj
b2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgorICAgICAgICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0ZWNv
ZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CisgICAgICAgIHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgIHB1YmxpYzoKKyAgICAgICAg
dm9pZCBsb2FkQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BSUmVnKTsKKyAgICBw
cml2YXRlOgorICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKKyAgICAgICAg
dm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworCisg
ICAgICAgIHZvaWQgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1
bHQgPSByZWdUMCk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBUb0hh
bmRsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChq
dW1wVG9IYW5kbGVyKTsKQEAgLTI1OCwxNiArMjkzLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2Nh
bGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAg
ICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bj
b2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4g
Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2
b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEID09
IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MK
ICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBP
cDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwg
dm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAg
ICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5r
SW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxl
VGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7
CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yODcsMTQgKzMyMiwxNSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxS
ZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsK
ICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEdQUlJl
ZyBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHBy
b2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAg
ICAvLyBzY3JhdGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1l
dGFkYXRhJiwgR1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAg
ICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsK
KyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNW
YWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25z
dCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRh
dGEmLCBKU1ZhbHVlUmVncyk7CkBAIC0zMDcsNiArMzQzLDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQg
Y2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKICAgICAgICAg
dm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBS
ZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwg
UmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBC
eXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0
Y2hHUFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9k
ZSBlY21hTW9kZShPcCk7CkBAIC01OTIsNyArNjMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjI2
LDE0ICs2NjUsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hp
ZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUpOwotICAgICAgICB2b2lkIGVtaXRIYXNQcml2
YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKKyAgICAgICAgdm9pZCBl
bWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJh
c2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZv
aWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZv
aWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwot
ICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlKTsKKyAgICAgICAg
dm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywg
R1BSUmVnKTsKKyAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwg
R1BSUmVnIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKICAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVy
ZVNsb3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02NDUsNyArNjg0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5
V3JpdGUoV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJS
ZWcgcG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50
KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJs
ZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiog
YWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kiop
OwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCop
OwpAQCAtNjU0LDYgKzY5Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1p
dFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVy
KTsKIAorICAgICAgICBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAg
IEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJv
b2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBp
c09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY5NSwyNiArNzM1LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBH
bG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVU
eXBlID09IE1vZHVsZVZhcik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9N
X1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVU
eXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xB
UkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIq
IHRodW5rTmFtZSk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2Vk
Rm9yT3BSZXNvbHZlU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIE1vZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVt
aXQgaW5saW5lIHRoYW4gdXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1
cmVWYXIgYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Nj
b3BlLgotICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJl
VmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBE
RUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2Nv
cGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09M
VkVfVFlQRShERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVf
UkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiwgc3Rk
OjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BS
ZXNvbHZlU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBj
aGFyKiB0aHVua05hbWUpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1RydXRoeUdl
bmVyYXRvcihWTSYpOwpAQCAtNzU5LDEwICs3ODEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tP
bkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCk7CiAgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZXN1bHQoQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7Ci0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxl
KE1ldGFkYXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotICAg
ICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoTWV0YWRhdGEmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0
ZWNvZGU+CisgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQpOwogICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0
aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5j
dGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bD4KQEAgLTgyMCwyMCArODQyLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRh
cmdldC5vZmZzZXQpKTsKICAgICAgICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1l
dGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlw
ZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxP
cGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgT3BlcmF0aW9uVHlw
ZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgT3Bl
cmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJn
cykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4o
YXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uLCByZXN1bHQp
OworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICAg
ICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1l
IE1ldGFkYXRhLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGVyYXRpb25UeXBlLCB0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAg
ICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVz
dWx0LCB2b2lkPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1l
dGFkYXRhLCBBZGRyZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBh
cmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5
dGVjb2RlLCBBZGRyZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBh
cmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50c0ZvckluZGlyZWN0Q2Fs
bDxPcGVyYXRpb25UeXBlPih0YXJnZXQsIGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0
YWRhdGEsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3Vs
dCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShieXRlY29kZSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdH
UFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CkBAIC05MTgsMjUg
Kzk0MCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAg
ICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZDsgfQotICAg
ICAgICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGlt
aXplZE9ySW5saW5lZDsgfQogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJl
dHVybiBtX3Nob3VsZEVtaXRQcm9maWxpbmc7IH0KICNlbHNlCiAgICAgICAgIGJvb2wgY2FuQmVP
cHRpbWl6ZWQoKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICBib29sIGNhbkJlT3B0aW1pemVk
T3JJbmxpbmVkKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgLy8gRW5hYmxlcyB1c2Ugb2Yg
dmFsdWUgcHJvZmlsZXIgd2l0aCB0aWVyZWQgY29tcGlsYXRpb24gdHVybmVkIG9mZiwKICAgICAg
ICAgLy8gaW4gd2hpY2ggY2FzZSBhbGwgY29kZSBnZXRzIHByb2ZpbGVkLgogICAgICAgICBib29s
IHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAg
ICAgdm9pZCBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygp
OworCisgICAgICAgIHZvaWQgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworCiAgICAgICAgIHN0
YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21w
dXRlQ29tcGlsZVRpbWVzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB5b3UgbmVlZCB0byBj
aGVjayBhIHZhbHVlIGZyb20gdGhlIG1ldGFkYXRhIHRhYmxlIGFuZCB5b3UgbmVlZCBpdCB0bwot
ICAgICAgICAvLyBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFzdCBhbmQgc2xvdyBwYXRoLCB0
aGVuIHlvdSB3YW50IHRvIHVzZSB0aGlzLgotICAgICAgICAvLyBJdCB3aWxsIGdpdmUgdGhlIHNs
b3cgcGF0aCB0aGUgc2FtZSB2YWx1ZSByZWFkIGJ5IHRoZSBmYXN0IHBhdGguCi0gICAgICAgIEdl
dFB1dEluZm8gY29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUpOwotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLSAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFy
aXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0
ZXI7CiAKQEAgLTk2Myw5ICs5ODAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9y
PFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3Jk
PiBtX3N3aXRjaGVzOwogCi0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2Nv
cGllZEdldFB1dEluZm9zOwotICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0aFBy
b2ZpbGU+IG1fY29waWVkQXJpdGhQcm9maWxlczsKLQogICAgICAgICBKdW1wTGlzdCBtX2V4Y2Vw
dGlvbkNoZWNrczsKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZy
YW1lUm9sbGJhY2s7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTk5LDExICsx
MDEzLDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0
aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0g
ICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3No
b3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlC
eXRlY29kZUluZGV4OwogCi0gICAgICAgIFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7
CisgICAgICAgIENvZGVCbG9jayogbV9wcm9maWxlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKyAg
ICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fdW5saW5rZWRDb2RlQmxvY2sgeyBudWxscHRyIH07
CisKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRyPEJhc2Vs
aW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0
YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVj
dENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAg
ICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgICAgICBC
YWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgICAgICBCYWc8VW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICAgICAgRml4ZWRW
ZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIEZpeGVk
VmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAg
ICAgIHN0cnVjdCBOb3RBQ29kZUJsb2NrIHsgfSBtX2NvZGVCbG9jazsKICAgICB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCBhcmd1bWVudEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVu
dEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIy
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMzIwLDcgKzMyMSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByZWdUMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qy
LCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3
NSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAK
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC01NzMsNyArNTc3LDggQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IAogCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVn
VDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDQsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIyLDggQEAgdm9pZCBKSVQ6OmVt
aXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBVbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+
KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE5lZ0lDKiBu
ZWdhdGVJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIFVu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+dW5h
cnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tX3Byb2Zp
bGVJbmRleCk7CisgICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9tYXRoSUNzLmFkZEpJVE5lZ0lD
KGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIG5lZ2F0ZUlDKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRv
IGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBi
ZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0
aE5lZ2F0ZSk7CkBAIC04OTksOCArOTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChj
b25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUQWRkSUMq
IGFkZElDID0gbV9tYXRoSUNzLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0
cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0
TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQpAQCAtOTQ1LDEwICs5NTAsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIGJvb2wgZ2Vu
ZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CiAgICAgICAg
IFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgp
OworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJp
dGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgc3JjUmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzKTsKICAgICB9IGVs
c2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVt
cHMpOwogCkBAIC0xMDE1LDEwICsxMDIxLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChK
SVRCaW5hcnlNYXRoSUMKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkK
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAg
ICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9m
aWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlm
IChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQog
ICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7
CiAKQEAgLTEwNTUsMTMgKzEwNjIsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVu
YXJ5TWF0aElDPAogI2VuZGlmCiAKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsK
ICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAg
ICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1t
UHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0g
ZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4o
cmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7
CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFi
ZWwoKTsKQEAgLTExMjAsMTMgKzExMjgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJ
VEJpbmFyeU1hdGhJQwogI2VuZGlmCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
NCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0g
ICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0
aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1p
Yz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3Ms
IHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9m
aWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdU
NCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlv
biksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiks
IHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1h
dGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVu
ZCA9IGxhYmVsKCk7CkBAIC0xMTY2LDcgKzExNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IG51bGxwdHI7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJp
dGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBhcml0aFByb2ZpbGUgPSAmbV91bmxp
bmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BEaXY+KCkubV9wcm9maWxlSW5kZXgpOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJh
bmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQg
cmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKQEAgLTEyMTEs
OCArMTIyMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAog
dm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRo
UHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxp
bmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BNdWw+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fbWF0aElD
cy5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5h
ZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+
KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9w
ZXJhdGlvblZhbHVlTXVsKTsKIH0KQEAgLTEyMjcsOCArMTIzNiw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0g
bV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQ
cm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubV9wcm9maWxlSW5kZXgpOwor
ICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUp
OwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJ
Qyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwo
Y29uc3QgT3BDYWxsRXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlciwg
cmVnVDEpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBD
YWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkp
LCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwpAQCAtMjU5LDcgKzI1OSw3IEBAIHZv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKIAogICAgIGVtaXRMb2FkKGNh
bGxlZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQo
Ynl0ZWNvZGUpOwpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNv
bnN0IEluc3RydWN0aW8KICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsK
IAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM0MSw3ICszNDEs
NiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgfQogCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgaWYgKG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8
fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM1NCw3ICszNTMsNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3Vu
bGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRl
ICJTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgpAQCAtNDQsNyAr
NDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOwogfQogCkBAIC01MywxOCArNTQs
MTggQEAgc3RkOjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJh
cmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9wOjpv
cGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKK0pJVDo6Y29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAg
IHVuc2lnbmVkIGNoZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGlu
dCBhcmdDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0Zvcihi
eXRlY29kZSwgY2hlY2twb2ludCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19j
YXN0PGludD4oc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9p
bnQpKTsKIAorCiAgICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdU
aGlzKDApKSwgcmVnVDApOwogICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDApOwotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBhcnJheVByb2ZpbGVGb3Io
bWV0YWRhdGEsIGNoZWNrcG9pbnQpLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7Cisg
ICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJbmZvOjpvZmZzZXRPZkFy
cmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQo
KSk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTc4LDcgKzc5LDcgQEAg
c3RkOjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8
IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJ
bmZvQ29uc3RhbnQpCiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5t
X2FyZ3VtZW50czsKQEAgLTkxLDcgKzkyLDggQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYgYnl0ZWNvZAogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1l
Rm9yRm9yd2FyZEFyZ3VtZW50czsKICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBv
cGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwg
LWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCByZWdUMCwgcmVn
VDEsIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJn
c0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCop
KSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTAxLDE0ICsxMDMsMTYgQEAg
SklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9w
ZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UK
ICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAg
ICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1Qw
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVw
T3BlcmF0aW9uLCByZWdUMywgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDAp
OwogICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhl
IGFyZ3VtZW50IGNvdW50LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRy
ZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7Ci0gICAgSnVtcCBu
b3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmUzMihy
ZWdUMiwgaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7Cisg
ICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpKSwgcmVnVDMpOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFi
b3ZlLCByZWdUMywgcmVnVDIpOworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENh
bGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CiAg
ICAgbm90QmlnZ2VzdC5saW5rKHRoaXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMn
LgpAQCAtMTI3LDE2ICsxMzEsMTYgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBP
cCYpCiB0ZW1wbGF0ZTw+CiBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2
YWwmIGJ5dGVjb2RlKQogewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCByZWdUMSk7Ci0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEs
IENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9m
ZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZh
bCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwotCi0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2
YWwsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxs
UmVzdWx0KGJ5dGVjb2RlKTsKIApAQCAtMTQ4LDcgKzE1Miw3IEBAIHZvaWQgSklUOjpjb21waWxl
Q2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENh
bGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxs
TGlua0luZm9zLmFkZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNl
dFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9m
ZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE2MCw0NyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihy
ZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9h
ZDY0KEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxs
RnJhbWVTbG90OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0g
ICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGlu
Zm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0
dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRD
YWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJ
VDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCi17
Citib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0lu
Zm8qLCB1bnNpZ25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkgewogICAgIHJldHVybiBm
YWxzZTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cFRhaWxDYWxsJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYg
Ynl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkK
IHsKLSAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0
YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJl
clRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURh
dGEubnVtTG9jYWxzID0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+
IHNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBz
aHVmZmxlRGF0YS0+bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxl
RGF0YS0+bnVtUGFyYW1ldGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJU
YWdSZWdpc3RlcjsKKyAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNv
ZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsK
LSAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZm
bGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5h
cmdzW2ldID0KKyAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFs
dWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAg
ICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxs
ZWUgPQotICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsK
LSAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwot
ICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVE
YXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsK
KyAgICBzaHVmZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zm
c2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1w
TGlzdCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAs
IHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0gewotICAgICAgICBDYWxs
RnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwor
ICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIEp1bXBM
aXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRo
aXMsICpzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRk
U2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKworICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwor
ICAgIGluZm8tPmZyYW1lU2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAg
IGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAg
LTIxOCwxNCArMjI2LDI1IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAg
ICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgog
ICAgICovCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2Rl
SUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxM
aW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZy
YW1lKGJ5dGVjb2RlLCBpbmZvKTsKKworICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0g
bnVsbHB0cjsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJ
TlRfTUFYOworICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgaW5m
byA9IG1fdW5saW5rZWRDYWxscy5hZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86
OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsKKworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOwor
CisgICAgICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5r
SW5mb0luZGV4KTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29t
cGlsYXRpb25JbmZvKCkpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLnVubGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGlu
Zm9Db25zdGFudDsKKyAgICB9CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9D
b25zdGFudCk7CiAKICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICBhdXRvIGJ5
dGVjb2RlSW5kZXggPSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7Ci0g
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5i
aXRzKCk7CisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMp
LCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdP
ZmZzZXQpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8v
IHJlZ1QwIGhvbGRzIGNhbGxlZS4KQEAgLTIzNCwxNiArMjUzLDEyIEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVj
b2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5m
by5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxs
TGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAg
ICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkp
CisgICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5k
ZXgsIGluZm9Db25zdGFudCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGxvYWRDb25zdGFudChp
bmZvQ29uc3RhbnQsIHJlZ1QyKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0g
ICAgICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMs
IHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAg
ICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsK
ICAgICAgICAgfSk7CkBAIC0yNTMsMTMgKzI2OCwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNs
b3dQYXRocyA9IGluZm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5m
bzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9u
ZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBk
b25lTG9jYXRpb247CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBA
IC0yNzMsMjAgKzI4OCwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0
IEluCiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOwog
CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93
UGF0aCgqbV92bSwgKnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRo
KCptX3ZtLCAqdGhpcywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJ
VERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpAQCAtMzk1LDE3ICs0
MTAsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogCiAgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwogICAg
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisKKyAgICBtb3ZlKHJlZ1QwLCBiYXNlR1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+
aW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0
dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25leHQsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgZmFzdENhc2Uu
bGluayh0aGlzKTsKIH0KQEAgLTQxNiwxMCArNDQ0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9y
T3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKKyAgICBHUFJS
ZWcgaXRlcmF0b3JHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgSnVt
cExpc3Qgbm90T2JqZWN0OwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0
ZXJhdG9yR1BSKSk7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVy
YXRvckdQUikpOwpAQCAtNDMyLDE5ICs0NTgsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX29wZW4oY29ucwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjAsIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0b3JHUFIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0Jp
dHMoKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBtb3ZlKGl0ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgbmV4dFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogCiAgICAgYXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhp
cyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RP
YmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogCiAgICAg
ZG9uZS5saW5rKHRoaXMpOwogfQpAQCAtNDUyLDcgKzQ3Niw2IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9u
ID0gKFsmXSAoKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKICAg
ICAgICAgY2FzZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25hcnJvdzsK
QEAgLTQ3MCw1MCArNDkzLDc3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29u
c3QgSW4KICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRp
b25Nb2RlOjpHZW5lcmljKSkpOwogCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBv
cjgoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVy
aWMpKSwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2l0ZXJhdGlvbk1ldGFkYXRhLnNlZW5N
b2RlcykpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6
TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRh
ZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSwgcmVnVDApOworICAgIG9yMzIoVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgcmVnVDApOwor
ICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0
YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0
YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSk7CiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yTmV4
dD4oaW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgYWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQoKTsKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2Jq
ZWN0KSBpbiByZWdUMAogCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVn
IGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKLSAgICBHUFJSZWcgZG9uZUdQUiA9IHJlZ1QxOwotICAg
IC8vIGl0ZXJSZXN1bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0IGJ5IGlk
IGJlbG93LgotICAgIG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgaXRlckNhbGxS
ZXN1bHRHUFIpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoaXRlclJlc3VsdEdQUik7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChyZXR1cm5WYWx1ZUdQUiA9PSBiYXNlR1BSKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVn
cyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJl
c2VydmVkUmVncy5hZGQodmFsdWVHUFIpOworICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZChpdGVy
Q2FsbFJlc3VsdEdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25l
LmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BS
KSwgcmVnVDMsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9u
ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHN0
dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBK
U1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAgICAgewotICAgICAgICBHUFJSZWcgc2NyYXRj
aDEgPSByZWdUMjsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CisgICAgICAgIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9uZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAg
ICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0
ZXJzKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIGdsb2JhbEdQUiA9IHNjcmF0
Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0
IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BS
KSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9u
RG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNo
MSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgZ2xvYmFsR1BSKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAg
IG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGJhc2VHUFIpOwogCiAgICAgICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCByZWdUNCwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3Bl
cnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKLSAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0p
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlc3Vs
dEdQUik7CiAKICAgICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwogICAgIH0KQEAgLTUy
Nyw1OSArNTc3LDU1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMK
ICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBp
dGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hl
Y2twb2ludChqdW1wKCkpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgewogICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7Ci0gICAgICAgIEdQUlJl
ZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwotICAgICAgICBub3RPYmplY3QuYXBwZW5k
KGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJDYWxsUmVzdWx0R1BSKSk7CiAKICAgICAgICAgVW5pcXVl
ZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKTsKICAg
ICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRl
eCsrXTsKICAgICAgICAgCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQ
UikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJDYWxs
UmVzdWx0R1BSKSk7CiAKLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFy
Z0dQUjApOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotCi0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIHJlZ1QxKTsKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7CisgICAgICAgIG1vdmUo
aXRlckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUs
IEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBkb25lVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihp
ZGVudCkucmF3Qml0cygpKTsKKworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoZG9uZVZSZWcsIGRvbmVHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0Lmxp
bmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJl
c3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSkpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1
bWVudEdQUjApOwogICAgIH0KIAogICAgIHsgICAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFs
dWU7Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKICAgICAgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCk7
CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CiAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAg
ICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpu
b25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2
YWx1ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCB2YWx1ZVZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1
bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2
YWx1ZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKICAgICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5o
IgogCisKIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgREZHIHsKQEAgLTE1OSwxMCArMTYw
LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5
cGUpCiAgICAgewotICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0
VHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1
c2VEYXRhSUMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIE9w
dGlvbnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKKyNpbmNsdWRlICJKSVQuaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIApAQCAt
NDYsMTAgKzQ3LDkgQEAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBnYXJiYWdlU3R1YkluZgog
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKAogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQotICAgIDogbV9jb2RlQmxvY2soY29kZUJs
b2NrKQotICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCisgICAgOiBtX2ppdFR5cGUoaml0VHlwZSkK
IHsKLSAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1Yklu
Zm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKKyAgICBtX3N0
dWJJbmZvID0gY29kZUJsb2NrID8gY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBj
b2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNhbGxTaXRl
SW5kZXggPSBjYWxsU2l0ZTsKIAogICAgIG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMgPSB1c2Vk
UmVnaXN0ZXJzOwpAQCAtNTksNyArNTksNiBAQCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
OjpmaW5hbGl6ZSgKICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1Bh
dGgsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCkKIHsKICAg
ICBtX3N0dWJJbmZvLT5zdGFydCA9IHN0YXJ0OwotCiAgICAgbV9zdHViSW5mby0+ZG9uZUxvY2F0
aW9uID0gZmFzdFBhdGgubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihtX2RvbmUpOwogCiAg
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkKQEAgLTY3LDYgKzY2LDE1IEBA
IHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIG1fc3R1YkluZm8t
PnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRp
bmVQdHJUYWc+KG1fc2xvd1BhdGhCZWdpbik7CiB9CiAKK3ZvaWQgSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIG1f
c3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSk7CisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9H
UFIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRC
eUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUs
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlw
ZSBhY2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1Zh
bHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAt
MTEwLDcgKzExOCw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUpCiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlw
ZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2Us
IHZhbHVlLCBzdHViSW5mb0dQUikKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1l
LnVpZCgpID09IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQor
ICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhjb2RlQmxvY2sgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09
IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAi
SklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHV0S2luZC5oIgpAQCAtMzgsMTEgKzM5
LDExNCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXI7CiBjbGFz
cyBDYWxsU2l0ZUluZGV4OwogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklUOwogY2xhc3MgU3Ry
dWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKIAogZW51
bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90OwogZW51bSBjbGFzcyBKSVRUeXBlIDogdWludDhf
dDsKIAorc3RydWN0IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lRGVsQnlJ
ZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1Qy
OworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lRW51
bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBi
YXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQg
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OnJlZ1QyOworICAgIC8vIFdlIHJlbHkgb24gdGhpcyB3aGVuIGxpbmtpbmcgYSBD
b2RlQmxvY2sgYW5kIGluaXRpYWxpemluZyByZWdpc3RlcnMgZm9yIGEgR2V0QnlWYWwgU3R1Yklu
Zm8uCisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpY19hc3NlcnQocmVzdWx0ID09IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgc3RhdGljX2Fzc2VydChzdHViSW5mbyA9
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbyk7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKK307CisKK3N0cnVjdCBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
ID0gR1BSSW5mbzo6YXJndW1lbnRHUFIyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHBy
b3RvID0gR1BSSW5mbzo6YXJndW1lbnRHUFIzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86Om5vbkFyZ0dQUjE7Cit9OworCitzdHJ1Y3Qg
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkg
PSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpy
ZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVn
VDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnMgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyB0aGlzVmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0
IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHQgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdU
MTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QyOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGUgPSBHUFJJbmZvOjpyZWdUMzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Q0OworfTsK
Kworc3RydWN0IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYnJhbmQgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2Ug
PT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChi
cmFuZCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisKIGNsYXNz
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcigpIHsgfQpAQCAtNjIsMTUgKzE2NiwyMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBm
aW5hbGl6ZSgKICAgICAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVm
ZmVyJiBzbG93UGF0aExpbmtCdWZmZXIsCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiBzdGFydCk7Ci0gICAgCisKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcg
c3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogbV91bmxpbmtl
ZFN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKwog
cHJvdGVjdGVkOgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgSklUVHlwZSBtX2pp
dFR5cGU7CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIG1fc3R1YkluZm87CiAKK3B1YmxpYzoKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9kb25lOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Nsb3dQYXRoQmVnaW47Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7IC8vIE9PUFM6IG1ha2UgcmVwb3J0Q2FsbCBwYXNzIHNv
bWV0aGluZyBpbiB3ZSBjYW4gdXNlIGZvciB0aGUgbm9uLUNUSSB0aHVua3MgYnVpbGRzLiAKIH07
CiAKIGNsYXNzIEpJVEJ5SWRHZW5lcmF0b3IgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IgewpAQCAtOTgsNyArMjA4LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTVmFsdWVSZWdzIG1fYmFz
ZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fc3RhcnQ7CitwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0aEp1
bXA7CiB9OwogCkBAIC0xMzIsOCArMjQyLDggQEAgcHVibGljOgogICAgIEpJVFB1dEJ5SWRHZW5l
cmF0b3IoKSA9IGRlZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAotICAgICAgICBD
b2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3Mg
YmFzZSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BS
UmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgSklU
VHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2Us
IEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBF
Q01BTW9kZSwgUHV0S2luZCk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3Jv
QXNzZW1ibGVyJik7CiAgICAgCkBAIC0xNjMsMTEgKzI3Myw5IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpT
VmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1
bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0xOTEsOCArMjk5LDYgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBh
dGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yMTYsOCArMzIyLDYgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXBy
aXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yNDEsOCArMzQ1
LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVy
Jik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0y
NzcsOCArMzc5LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBm
YXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CiAKLXBy
aXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMDIsMTEgKzQw
Miw5IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3Nl
bWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1
ZVJlZ3MgbV9yZXN1bHQ7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTMzMCw4ICs0MjgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRo
KE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1
bXA7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2
aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwzOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lz
dGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlm
ICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7
Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0
YW50KSB7CisgICAgICAgIC8vIE9PUFM6IGZpbmQgYSB3YXkgdG8gYXNzZXJ0IHRoYXQgYWxsIGxp
bmsgdGltZSBjb25zdGFudHMgYXJlIGNlbGxzLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzQ2VsbCgpOwogfQogCiBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVy
IHNyYykKIHsKICAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7Ci0gICAgcmV0dXJuIG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0gU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKKyAgICByZXR1cm4gbV91bmxp
bmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVh
bFJlZ2lzdGVyIGVudHJ5KQpAQCAtMTU2LDM2ICsxODEsMzYgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6YXBwZW5kQ2FsbFdpdGhFeAogI2VuZGlmCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1l
dGFkYXRhPgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdp
c3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJl
dHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNW
YWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9y
ZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCiAgICAgcmV0
dXJuIGNhbGw7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxS
ZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0
dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVu
Y3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVH
UFIyLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BS
MiwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNL
bm93bkNlbGwocmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpCiAgICAgICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjA1LDcgKzIzMCw3IEBAIEFMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6Omhhc0FueVNsb3dDYXNlcygKIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENo
ZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAi
VGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdl
bmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVCht
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50
cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5
dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNo
ZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byByZXN1bHQgPSBtX2NoZWNrcG9pbnRMYWJlbHMu
YWRkKG1fYnl0ZWNvZGVJbmRleCwgbGFiZWwoKSk7CkBAIC0yMTUsNyArMjQwLDcgQEAgaW5saW5l
IHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludAogaW5saW5lIHZvaWQgSklUOjplbWl0
SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCBqdW1wKQogewogICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUlu
ZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5
dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygp
KTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byBp
dGVyID0gbV9jaGVja3BvaW50TGFiZWxzLmZpbmQobV9ieXRlY29kZUluZGV4KTsKQEAgLTI5Mywy
OSArMzE4LDM0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRDb3VudChBYnN0cmEKIAog
QUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdp
c3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUpCi17Ci0gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7Ci0KLSAgICAvLyBX
ZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNh
biBqdXN0IGRvIGEgZGlyZWN0Ci0gICAgLy8gc3RvcmUuCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSNlbHNlCi0g
ICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJpdHdpc2VfY2FzdDxFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0gICAgc3RvcmUz
Mih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7Ci0gICAg
c3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOwotI2VuZGlm
Ci19CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkp
LT5sZW5ndGgoKSA9PSAxOworfQorCisvLyBPT1BTCisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUpCisvL3sKKy8vICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOworLy8KKy8v
ICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwg
c28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKKy8vICAgIC8vIHN0b3JlLgorLy8jaWYgVVNFKEpT
VkFMVUU2NCkKKy8vICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tl
dHMpOworLy8jZWxzZQorLy8gICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9
IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVj
a2V0cyk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFz
Qml0cy5wYXlsb2FkKTsKKy8vICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9y
LT5hc0JpdHMudGFnKTsKKy8vI2VuZGlmCisvL30KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBp
bmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRh
OjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4gSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSkKIHsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogI2Vsc2UKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKQEAg
LTMyMywyNCArMzUzLDI5IEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxk
ZWMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9w
Y29kZSguLi4pIHsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWVS
ZWdzIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVl
UmVncyB2YWx1ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFk
YXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOworCisgICAgVmFsdWVQ
cm9maWxlJiB2YWx1ZVByb2ZpbGUgPSB2YWx1ZVByb2ZpbGVGb3IoYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jayksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpOworICAg
IHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworICAgIC8vIE9P
UFMKKyAgICAvL3B0cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVPZmZzZXRG
b3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpICsgVmFsdWVQcm9maWxl
OjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7CisgICAgLy9zdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRy
ZXNzKHNfbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVl
UHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7Ci19CisvL2lubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwg
R1BSUmVnIHJlc3VsdFJlZykKKy8veworLy8gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1
ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworLy99CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1l
dGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgR1BSUmVnIHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNl
bmRpZgogCkBAIC0zNjAsNiArMzk1LDIxIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVcKICAgICB9CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklE
IGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKSB7CisgICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxs
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
c3RvcmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9m
aWxlKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2
b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit7Cisg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFz
dFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3JhdGNoR1BSKTsKK30KKwogQUxXQVlTX0lO
TElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBz
cmMpCiB7CiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKQEAg
LTM4MCw3ICs0MzAsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVy
CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQ
UmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNv
bnN0YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsK
ICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVl
KTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVl
KTsKQEAgLTQ5Niw3ICs1NDYsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFs
UmVnaXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZp
cnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwo
cmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlz
Q29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVs
c2UKQEAgLTUwNiw3ICs1NTYsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZp
cnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewotICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAg
ICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwogICAgICAgICBlbHNlCkBAIC01MTQsMTEgKzU2NCw2IEBAIGlubGluZSB2b2lkIEpJVDo6
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0
dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigp
OwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBv
cCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9w
MSkpIHsKQEAgLTU0NCwxMSArNTg5LDE3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRH
ZXRWaXJ0dWFsUmUKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgp
KSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7Ci0gICAgICAgIGVsc2UKKyAg
ICAgICAgc3dpdGNoIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihzcmMpKSB7CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpJbnRlZ2VyOgorICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91Ymxl
OiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlKSksIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgZHN0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU2
NiwxMSArNjE3LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17
Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
aXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9y
ZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01OTUsNyArNjQxLDcgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdp
c3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQor
ICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY4Myw3IEBAIEFMV0FZU19JTkxJTkUgaW50
IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBpZiAodGFyZ2V0KQogICAgICAgICByZXR1
cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChp
bnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdl
dFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQotewotICAgIHVuc2lnbmVkIGtleSA9IGJ5
dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hNYXAgZG9lc24ndCBsaWtlIDAgYXMgYSBr
ZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRHZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0g
ICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0SW5mb3MuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJ
bmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAgICBt
X2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1dEluZm8ub3BlcmFuZCgpKTsKLSAgICBy
ZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdB
WVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5h
cnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFy
aXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRo
UHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmlu
YXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwg
YXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQcm9maWxlOworICAgIHJldHVybiBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiArNzA0LDYxIEBAIEFMV0FZU19JTkxJTkUg
RUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICByZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgp
OwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90
IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0
YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sK
KyAgICBsb2FkMzIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5t
ZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1
bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDgoQWRkcmVzcyhzX21ldGFkYXRh
R1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJs
ZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0
b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFH
UFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcgdmFsdWUs
IGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTMy
KHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFk
YXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjptYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXpl
X3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV91
bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNv
ZGUpICsgb2Zmc2V0KSwgc19tZXRhZGF0YUdQUiwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bG9hZENvbnN0YW50KEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY29uc3Rh
bnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19jb25zdGFu
dHNHUFIsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oY29uc3RhbnRJbmRleCkgKiA4KSwgcmVzdWx0
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZEdsb2JhbE9iamVjdChHUFJSZWcg
cmVzdWx0KQoreworICAgIGxvYWRDb25zdGFudChtX2dsb2JhbE9iamVjdENvbnN0YW50LCByZXN1
bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQo
VmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CisgICAgLy8gT09QUzogTWF5YmUgbWFrZSB0
aGlzIG1vcmUgZWZmaWNpZW50PworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVC
bG9jazo6b2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7CisgICAgbG9h
ZDY0KEFkZHJlc3MocmVzdWx0LCBjb25zdGFudC50b0NvbnN0YW50SW5kZXgoKSAqIHNpemVvZihK
U1ZhbHVlKSksIHJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMxLDcgKzkzMSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdp
c3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdU
MywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRy
aWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0
Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsK
QEAgLTk5Nyw3ICs5OTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IElu
c3RyCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJs
ZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTAyNCw3ICsxMDI0LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogCiAgICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9z
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRj
aFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRj
aFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5s
aW5rZWRUYWJsZSk7CiAKQEAgLTEwNDIsNyArMTA0Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9zdHJpbmcoY29uc3QgSW4KIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0
Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hS
ZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hS
ZWNvcmQ6OlN0cmluZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2Vk
VGFibGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAKICNpbmNsdWRlICJUeXBlUHJv
ZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCkBAIC01NCwxMSArNTYsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IElu
c3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAog
ICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigp
KQotICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KSksIGFkZHJlc3NGb3IoZHN0KSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgLy8gT09QUzogbW9z
dCAiT3RoZXIiIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudHMgY2FuIGp1c3QgYmUg
Z3JhYmJlZCBmcm9tIHRoZSBVbmxpbmtlZENvZGVCbG9jay4gSXQncyBqdXN0CisgICAgICAgIC8v
IGEgY291cGxlIHR5cGVzIHRoYXQgY2FuJ3QuIENyZWF0ZSBhbiBhYnN0cmFjdGlvbiBmb3IgdGhh
dC4KKworICAgICAgICBzd2l0Y2ggKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKHNyYykpIHsKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkludGVnZXI6CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpEb3VibGU6IHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVl
OjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29u
c3RhbnQoc3JjLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9y
KGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC04NywzNyArMTAwLDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25z
dCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6
ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0
dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2Nh
dG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2Nh
dGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJl
Z2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcg
PSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBSZWdpc3Rl
cklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwot
ICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29u
c3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxp
emVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
LSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Ci0g
ICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0
ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9i
amVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0
T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
KyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgZW1pdEFs
bG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9j
YXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7
CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFn
ZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRTbG93Q2Fz
ZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBS
ZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEu
bV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOwor
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZt
KCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BS
KTsKIH0KIApAQCAtMTMxLDcgKzE0Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19o
YXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUs
IHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5o
YXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBi
cmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VW
YWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xG
dW5jdGlvbikpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJl
Z1QwKTsKIApAQCAtMTU0LDMwICsxNjYsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAK
LSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNw
ZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZh
bCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4g
dXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm90b0dQUiA9IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6cHJvdG87CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3RvLCBwcm90b0dQUik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdGhhdCBw
cm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQg
YnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSwgcHJvdG8pOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2
YWx1ZUdQUiwgdmFsdWUpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQ
UiwgcHJvdG8pOwogCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1Qy
LCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDUsCi0gICAg
ICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgcmVzdWx0R1BSLAorICAgICAgICB2YWx1ZUdQ
UiwKKyAgICAgICAgcHJvdG9HUFIsCisgICAgICAgIHN0dWJJbmZvR1BSLAorICAgICAgICBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxLCBCYXNlbGluZUluc3RhbmNlb2ZSZWdp
c3RlcnM6OnNjcmF0Y2gyKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9p
bnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKKwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIApAQCAtMTkyLDE0ICsyMTIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2YoY29uc3QgSQogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxs
T3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3Mo
R1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCByZWdUMiwgcmVnVDEpOwotICAgIH0gZWxzZQot
ICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVyczo6c3R1YkluZm8gPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWUgPT0gYXJndW1lbnRHUFIyKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG8gPT0g
YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9w
dGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0yNDAsNyArMjU5LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogCiAgICAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAs
IHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAg
LTM3NCw3ICszOTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24q
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7
CiAjZWxzZQpAQCAtMzgzLDkgKzQwMiw5IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJ
bnN0cnVjdGlvbioKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9y
KFZNJiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9y
ZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAg
IGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC00MTEsNyArNDMwLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogCiAgICAgaWYgKGRzdCAhPSBz
cmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTQzNCw5ICs0NTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVy
dHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0
aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNDY1LDggKzQ4NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3Qg
SW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0g
cmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAg
ICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVl
OwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJ
ZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxP
YmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdl
dENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBA
IC00ODAsNyArNTAxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmpl
Y3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBE
RkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmpl
Y3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
LSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBy
ZWdUMTsKQEAgLTUxOSw3ICs1NDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25z
dCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChi
cmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU2NCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBj
YXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUu
CiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJy
YW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKIApAQCAtNTgyLDE1ICs2MDMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmlu
ZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3Bl
cmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50
ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9
IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXND
ZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1w
ZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVy
LCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKDEpLCBi
eXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYy
NSw4ICs2NDQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpbwog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHBy
IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRK
dW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNj
cmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwg
dGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZh
bHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRk
SnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY2
MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02
OTUsNyArNzE2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpbwog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qx
KTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVn
VDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAt
NzExLDcgKzczMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8K
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAg
ICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtNzIwLDcgKzc0Miw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIAogI2lmIE5VTUJFUl9PRl9D
QUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZy
YW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRHUFIwKTsKKyAgICBqaXQuY29weUNhbGxlZVNh
dmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYXJndW1lbnRHUFIwKTsKICNlbmRpZgog
CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CkBA
IC05MDgsNyArOTMwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0
ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEp
OwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5NDEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkzMSw3ICs5NTUs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgCiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVn
ICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9
CkBAIC05NTEsNyArOTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJ
bnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNC
aWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NzgsNyArMTAwMiw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9i
amVjdChyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk5Myw3ICsxMDE3LDEwIEBAIHZv
aWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVz
cyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rl
cik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywg
Vk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisKKyAgICAvLyBPT1BTOiBUaGlzIGlzbid0IGVsZWdhbnQuIFdoeSBhcmVuJ3QgdGhleSBp
biB0aGUgY2FsbGVlIHNhdmUgYnVmZmVyLiBJIGd1ZXNzIGJlY2F1c2Ugd2UgY2FuIE9TUiBleGl0
IGhlcmU/CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3Rl
cnMoKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJp
ZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRj
aGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpA
QCAtMTAxMSwyMyArMTAzOCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0
cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRo
ZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVm
ZmVyID0gbWV0YWRhdGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
VHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4
LmFzQml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25U
cnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXgu
YXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1
bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JF
bnRyeS5saW5rKHRoaXMpOwotICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlciYgcHJvZmlsZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7
Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCBy
ZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFs
dWVQcm9maWxlJj4ocHJvZmlsZSksIHJlZ3MpOwotICAgICAgICB9KTsKLSAgICB9CiAjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCiB9CiAKQEAgLTEwNTMsOCArMTA2OCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRp
bmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBm
b3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRl
eCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0
ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBA
IC0xMDgxLDEzICsxMDk2LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0
IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGlu
ZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRj
aGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZh
dWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVu
c3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENo
YXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0
YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEwOTksMjAgKzExMTUsMjIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBz
Y3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRh
YmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQu
Ci0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAg
U3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJ
VGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0
aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5
cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2Fk
MzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0
cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwg
c3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVn
Z2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTExMzMsNyArMTE1MSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdU
MiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIp
OwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAg
d2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE0OCw3ICsxMTY2LDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjYsNyArMTE4Myw3IEBAIHZvaWQgSklUOjplbWl0X29w
X25lcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVn
VDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAg
IGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE4OCwxMiArMTIwNSwxNCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRv
ZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0
ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25n
aW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgot
ICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CisgICAgc2l6ZV90IGNv
dW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpOwogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAg
ICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKIAotICAg
IGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOworICAgIAorICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFdyaXRlQmFy
cmllcihyZWdUMCk7CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vsc2UK
QEAgLTEyMTIsNyArMTIzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3Ry
dWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkK
IHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4
Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0xMzEwLDIzICsxMzI5
LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklU
OjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRT
dHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0
LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsK
LSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1
cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2Nh
bGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1l
dGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7
CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVz
dWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcgKzEzNTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
cmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBG
dW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBK
U0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNl
dE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7
CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlzOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZDYWNoZWRDYWxsZWUoKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vl
bk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRy
dXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25S
ZWcpKTsKICAgICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcyLDcg
KzEzODcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihy
ZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBA
IC0xMzgyLDcgKzEzOTgsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3Ry
dWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIHhv
cjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1
ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcgKzE0
MTEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQw
NCw3ICsxNDIyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Ywog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBA
IC0xNDE4LDEwICsxNDM3LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1
c3RvbSgKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0
cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUu
bV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFs
dWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE0MzAsNyArMTQ1MCw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVt
aXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBp
ZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enpp
bmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlS
ZXR1cm4oKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5m
aW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX3VubGlua2VkQ29kZUJsb2NrLT5sb29wSGludHNB
cmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAgICAgICB1aW50cHRyX3Qq
IHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAg
ICAgICAgbG9hZFB0cihwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4g
PSBicmFuY2hQdHIoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0
dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xNDQwLDcgKzE0NjAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAjZWxzZQogICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmCi0gICAgICAgIG1vdmVWYWx1ZShtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlc3Vs
dFJlZ3MuZ3ByKCkpOwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAg
ICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CkBAIC0xNDUzLDggKzE0NzMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQo
Y29uc3QgSW5zdHJ1CiAKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAK
ICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlv
bkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNz
KG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICAg
ICAgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkp
KSk7CiAgICAgfQogfQogCkBAIC0xNTA5LDcgKzE1MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhh
bmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTUyMiw3ICsxNTQ0
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogI2lmIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAg
IGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTE1NjQsMzQgKzE1ODYsMzYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0g
Ynl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4
cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2Jh
bEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0PFJl
Z0V4cCo+KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBl
bWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVt
aXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXls
b2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKLSAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29k
ZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbCwgYml0d2lzZV9jYXN0PHZvaWQq
PihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAg
IGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKIAogICAgIE9wY29kZUlEIG9w
Y29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2Ug
aWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2Ug
aWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBB
U1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2
bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2MjEsMjMgKzE2NDUsMjQgQEAgdm9pZCBKSVQ6OmVt
aXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2Fk
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlv
bkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nh
c3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3Rh
bnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6
b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBk
c3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bj
b2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0
aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYg
KG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24p
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwg
JnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAg
QVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTY2NCwyOSArMTY4OSwzMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2Fy
Z2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2Nh
dGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVl
c1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBh
cmd1bWVudEdQUjIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29k
ZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgp
LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgc2l6ZSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0
aDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUlu
ZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
QW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsK
KyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlX
aXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmd1bWVu
dEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogI2Vsc2UKKyAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRh
dGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMik7CiAgICAgZW1pdExv
YWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQ
cm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAj
ZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNzIwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Fy
cmF5X3dpdGhfc2l6ZShjbwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUg
Y2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdHlw
ZSBwcm9maWxlciBpcyBlbmFibGVkLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5
cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCkBA
IC0xNzc3LDIwICsxODA0LDI0IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tl
bl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BS
MCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlj
a2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7Ci0gICAgR1BS
UmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3Vt
ZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3Vy
ZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywg
c2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJn
R1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgorICAgICAgICBH
UFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBh
Y2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Cisg
ICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJl
Z1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qz
KTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFs
dWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0
UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklU
OjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBv
ZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHVzaW5nIHRoZSBjb250cm9sIGZsb3cg
cHJvZmlsZXIuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
cm9maWxlQ29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxv
Y2tMb2NhdGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMpOwpA
QCAtMTg2MCw3ICsxODkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0
IElucwogICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAogICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE5MTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFs
dWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsK
ICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4MjAx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNp
bmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29t
bW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUg
IkRGR09TUkVudHJ5LmgiCkBAIC0yODU1LDcgKzI4NTYsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVC
bG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0ID0gbGlua2VkVGFi
bGUubV9jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKQEAgLTI4ODAsNyArMjg4MSw3
IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVl
IGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFz
ZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2
b2lkKiByZXN1bHQ7CiAgICAgaWYgKGtleS5pc0ludDMyKCkpCkBAIC0yOTAzLDcgKzI5MDQsNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7Ci0g
ICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5n
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwogCiAgICAgaWYgKGtleS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmluZ0lt
cGwqIHZhbHVlID0gYXNTdHJpbmcoa2V5KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OCw3ICsz
NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5VmFs
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgSW52YWxpZEdQ
UlJlZywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1i
b2wgPSB0cnVlOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lv
biAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOTIgKzQ5LDEwMyBAQCBuYW1lc3BhY2UgSlNDIHsK
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0g
ICAgaWYgKG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRC
eVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGlmIChieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9u
czo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgeworICAgICAgICBhdXRvIG5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAg
IG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIHNjcmF0Y2hH
UFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogCi0g
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpyZXN1bHQpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVz
dWx0UmVncywgcmVnVDIpOwotICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVy
dHkpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7
Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgICAgICAvLyBPT1BT
LiBTdXBwb3J0IHRoaXMKKyAgICAgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVy
dHkpKQorICAgICAgICAvLyAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1
ZTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFs
U2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewot
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYg
KCFoYXNBbnlTbG93Q2FzZXMoaXRlcikpCisgICAgICAgIHJldHVybjsKKworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0QnlW
YWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4Kytd
OwogCi0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7
CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1lbnRH
UFI0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1p
emUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBt
X2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQ
Uik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BS
NDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlz
QVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRH
UFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQ
Uik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
YnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwg
IWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQ
UjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9
PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwotICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsxNjAsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNjAsOCArMTcxLDgg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJn
dW1lbnRHUFIxKTsKIApAQCAtMTg3LDM0ICsxOTgsNDAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7
CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwg
cmVzdWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRT
bG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJp
dmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhhc0FueVNsb3dD
YXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzI0MCwxMSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
cHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3Qs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1NCwyMCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNl
ZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAg
c3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRl
X25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZh
bHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCkBAIC0yNjQsNyArMjc3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAg
ICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAwLDIxICszMTMsMjggQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFu
ZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBH
UFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwotCiAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJp
dmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOwor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdl
bik7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Yg
c2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC0zMjQs
MTcgKzM0NCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAg
ICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIFVOVVNFRF9Q
QVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJh
bmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRP
cHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzY5
LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxy
ZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6
OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlz
QVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
c3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJh
aXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50
VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJp
dmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5k
aWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMTkgKzM4OSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFu
ZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5k
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOworCisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0
ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4p
OwogfQogCkBAIC0zOTQsOSArNDIyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19w
cml2YXRlX2JyYW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtNDA2LDI0ICs0MzYsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRl
QnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShv
cGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRl
X25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NTksNDIgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAs
IHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFz
ZUdQUiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5
dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIp
OwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQp
OwotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1
YkluZm9HUFIpOworICAgIC8vIE9PUFM6CisgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
cHJvcGVydHkpKQorICAgIC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0
cnVlOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwg
T3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7
CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2Fu
IHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBj
ZWxsLgpAQCAtNDc0LDE1ICs1MTAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7
Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9
IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7
Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAK
ICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTMxLDE2IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
ICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9i
YmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9k
ZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBt
YXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCks
IE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1
bWVudEdQUjUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUxMiw3ICs1NTQsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNE
aXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3Ry
aWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6
IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6
IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU2NSw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUzMywxOCArNTc1LDI0IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7
CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsK
KyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
LCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6dmFsdWUsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAg
ICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2Vk
LmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAgfQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9m
ZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSk7CiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCBnbG9iYWxPYmplY3RHUFIpOwpAQCAtNTcwLDIwICs2MTgsMzEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIp
LCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5m
by0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3
cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2Vs
bC4KQEAgLTU5NCw4ICs2NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1l
KGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKLSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQg
PSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlv
bik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRC
eVZhbEluZGV4KytdOwogCkBAIC02MDMsMTMgKzY2MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X3ByaXZhdGVfbmFtZShjCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAotICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9u
UHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0
UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJl
ZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQ
UiA9IHJlZ1QyOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5
R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5h
bWU+KCk7CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRL
aW5kOworCisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQpOworICAgIGF1dG8gb3BlcmF0aW9u
ID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmll
bGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Cisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50c0dQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1
c3RlZEltbVB0cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC02MjIsMTggKzY4NCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZShjCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9w
dXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0MywxNCAr
Njk5LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3MzYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlv
bnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzc0Niw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVn
VDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc1Nyw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJp
YnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJl
Z1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNzA5LDcgKzc2OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFs
KGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJl
Z1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCBy
ZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzc5LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRl
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1Qz
LCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03
MjcsMjMgKzc4OCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwg
YmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVE
ZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAg
IC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBz
aW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODMwLDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxC
eUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODU0LDE5IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNt
YU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlH
UFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSks
IGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVn
VDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODA4
LDcgKzg3Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZU
TCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywg
d2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKQEAgLTg0NSwyMiArOTEzLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92
YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVE
ZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVs
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFk
ZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpE
ZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQo
Z2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94
Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdl
IHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3
cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04
ODMsOSArOTYyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
cmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUu
bV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC04OTksMjQgKzk4MCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25z
dCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5
VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRp
b25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
ICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0K
IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMDIsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEs
MjIgKzEwMzcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDAp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
c3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIs
IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNzEsMTcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVn
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMTAwMywyNiArMTA5MSwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZChjb25zCiAgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5
SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
blRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMzAs
MjIgKzExMTIsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVj
dD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVn
VDApOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BS
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1Yklu
Zm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYgKzEx
NDUsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BS
Mik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRC
eUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTY2LDYxIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBl
KG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0g
ICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0
YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2Fk
OEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2Rl
TWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihOb3RFcXVh
bCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxl
bmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgp
ICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmso
dGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQorICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6
R2V0QnlJZCk7CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZS
ZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIHRoaXNWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CiAK
LSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1
bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBA
IC0xMTU4LDE2ICsxMjI5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29u
c3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNTAsNTcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBhcmd1bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3Bl
cnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0
X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVH
UFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BS
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0
aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0
aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dl
bmVyYXRvciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtMTIwNiw3ICsxMzEwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAg
ICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0MSwxNiArMTM0NSwxOSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJ
ZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEyNjAsMjggKzEzNjcsMjIgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4K
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHRoaXNHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpA
QCAtMTI5MSw3ICsxMzkyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFn
UmV0dXJuQWRkcmVzcygpOwpAQCAtMTMyOSwyMyArMTQzMCwzNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgp
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUs
IGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8g
anVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMg
J2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRo
ZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9t
IHRoaXMuCiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZh
bHVlVlJlZywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
QmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0
Y2g7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVn
LCB2YWx1ZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNt
YU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9k
ZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6
Ok5vdERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5k
ID0gZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0
dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0
ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4K
QEAgLTEzNTksMTQgKzE0NzQsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChj
b25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0
QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNh
bGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
MTM3NiwyNSArMTQ5NSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0
IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIz
OyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkp
OwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xNDA0LDcgKzE1MTcsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBA
IC0xNDQxLDIwICsxNTU0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IElu
c3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpz
dHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZS
ZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBK
SVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOwor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsx
NTg3LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5
SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
QEAgLTE0ODAsMjggKzE2MDcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNv
bnN0IElucwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dl
dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVk
LgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRo
dW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTUxMCwyNSArMTYzMSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBw
cm9maWxlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnNjcmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
cmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6Oklu
QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQpAQCAtMTUzNywxNSArMTY2NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFs
SW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0
ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5CeVZhbE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTE1NTYsNTkgKzE2ODgsNzAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVu
dEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwog
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1h
dGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9n
ZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5l
ZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUg
dGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5
cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1p
emUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNz
VHlwZSB0eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisK
KyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZp
cnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0SGFzUHJp
dmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIEFTU0VSVCh0eXBl
ID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFz
UHJpdmF0ZUJyYW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAgVU5VU0VEX1BBUkFN
KHByb3BlcnR5KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0gQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwog
CiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRl
eCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0g
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGlt
aXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVy
YXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1By
aXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMp
OwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2MSwyMSBA
QCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJy
YW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJy
YW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJp
dmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9w
ZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1l
ID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVC
cmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9
PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0
aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTY1Miw3ICsxNzg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2
YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVt
aXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9i
YXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDE5ICsxODAzLDIyIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2
YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29k
ZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlQnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNo
ZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewog
ICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qo
c2NyYXRjaEdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZT
RVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hH
UFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwg
V2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJl
Z1QwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
QEAgLTE2ODgsNiArMTgyOCw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVh
bFJlZ2kKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Cisg
ICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
QEAgLTE3MDEsNyArMTg0Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29u
c3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFu
dFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSwgcmVnVDEpOwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExl
eGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0xNzE1
LDcgKzE4NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAg
ICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAg
ICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSwgcmVnVDApOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUp
LCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTE3OTQsODcgKzE5MzUsMTA1IEBAIHZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZl
VHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
LSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVj
b2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7Cisg
ICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUlu
ZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRh
ZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8g
SWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxs
IGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAot
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4
aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90
IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0
YWRhdGEpOworICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNk
ZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2Nv
cGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5l
cmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9z
Y29wZSBDbG9zdXJlVmFyIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5F
UkFUT1IKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2Vu
ZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywg
IkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzIik7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2Vu
ZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2
ZV9zY29wZSBnZW5lcmljIik7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BS
ID0gcmVnVDY7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUNTsKIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7
CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BS
KTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJh
dG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAo
cHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZt
LmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2Zp
bGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAg
ICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrc0dlbmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRD
VElTdHViKGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2
bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24g
Y2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6
Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8g
aW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29t
aW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBp
bmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRH
UFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVz
b2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJu
QWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zm
c2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0
YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBt
ZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdFZh
ckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgeworICAgIGF1dG8gZG9WYXJJbmpl
Y3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGds
b2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgaWYgKCFuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9i
amVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIg
PSByZWdUNDsKLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0K
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9G
KEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hw
b2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7
CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdU
MywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJl
Z1QwKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBkb1Zhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgaml0Lm1vdmUo
c2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsK
IAotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgp
OworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAg
ICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZz
ZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
cmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwg
cmVnVDApOworICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwor
ICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsK
IAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBA
IC0xODgyLDEyICsyMDQxLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6
OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5n
RXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5v
dEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9m
R2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUo
Z2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSks
IGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxP
YmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBv
Y2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubW92ZShnbG9iYWxPYmplY3RHUFIsIHJl
Z1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEgKzIwNTYs
MTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAg
ICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBjb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xv
YmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
R2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDAp
OworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2Jq
ZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkw
OSw3ICsyMDY4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgot
ICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBS
ZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyAr
MjA3OCw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
ICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSks
IHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENv
ZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgq
cmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOwor
ICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZl
VHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAgICAgICBq
aXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVU
eXBlKCkpLCByZWdUMCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5s
aW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAg
ICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAg
ICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAg
ICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSk7CisgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAg
ICAgbm90Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0Q2Fz
ZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOwor
ICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAg
ICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAg
ICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9F
bmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0
Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZm
ZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtO
YW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2
ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9y
ZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwK
LSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNv
bHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2
bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVz
b2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwK
LSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJB
VE9SKQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2Vu
ZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVu
Y3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNl
CiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVj
dCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERG
Ry9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVj
dHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFz
dCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0
KQpAQCAtMjA2NSw2ICsyMTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpcwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKQEAgLTIxNzgsNyArMjMwMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTIx
ODYsOSArMjMwOCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24K
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0
YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
LCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogfQogCiAjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTIxOTYs
NDEgKzIzMTgsNTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZl
VHlwZSgpOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsK
IAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2Rl
SW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5l
cmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRG
cm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29w
ZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6
OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAg
IH07CisKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZt
KSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwg
c3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAg
ICB9OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFs
VmFyKSB7Ci0gICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJv
bVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxv
Y2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRh
ZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1Io
cmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwK
LSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAg
ICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1Ip
Ci0gICAgICAgIH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJl
VmFyKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsK
KyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0g
dm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXRO
YWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtLCBz
dGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtO
YW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4g
b25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCkBAIC0yMjM5LDk5ICsyMzcwLDg4
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICB1c2luZyBN
ZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJl
Z1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVz
b2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwot
ICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7
CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xv
d0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJS
ZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCksIHJl
Z1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgYXV0byBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSKSB7CisgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1Qw
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1Qx
KSk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSkpOwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsm
XSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rp
b25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBp
ZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwot
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdU
Myk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1Qz
LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zh
ckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0g
ICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BS
UmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQp
LCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJS
ZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCks
IHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRvIGVt
aXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BS
KSB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwot
ICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBh
ZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3Bl
cmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdU
MCk7CisgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwor
ICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSksIHJlZ1QwKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewor
ICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAg
ICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMg
dmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGlu
ZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRs
ZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZh
ciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcg
YnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVz
IGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dCA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsK
ICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAgICAg
ICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsK
LSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29k
ZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAg
IHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5q
aXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAg
ICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBD
b2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAgICAg
IH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgp
KSwgb2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAg
ICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9m
ZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAg
ICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAg
ICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRP
ZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJ
bW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdp
dGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0
T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAg
ICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zm
c2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZz
ZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGJh
c2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAg
aml0Lm5lZzMyKG9mZnNldCk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIob2Zm
c2V0LCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwg
b2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAg
ICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJh
bmQpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
b3BlcmFuZCkpLCByZWdUMyk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVn
VDMpOwogICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVt
cCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZh
cjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQxLDg2ICsyNDYxLDY1IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAK
LSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsK
LSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
ID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2Fs
VmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlw
ZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8
fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5k
MzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJl
c29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5h
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5s
aW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAg
ICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsK
KyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFs
VmFyLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKwor
ICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAg
ICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVt
cCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0gICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAg
ICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNraXBUb0VuZC5s
aW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0
KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNr
ZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSksIHJlZ1QxKTsKKyAg
ICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVmFsdWVQcm9maWxlOjpvZmZzZXRP
ZkZpcnN0QnVja2V0KCkpKTsKKyAgICAvL2ppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFk
YXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNl
dE9mRmlyc3RCdWNrZXQoKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05h
bWUpOwogfQogCi0jZGVmaW5lIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2
ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9n
ZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBc
Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVz
b2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQo
dm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHJl
c29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsg
XAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VO
RVJBVE9SKQotI3VuZGVmIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhp
cyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJl
Y2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShY
ODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjQ0OSw3ICsyNTQ4
LDkgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIENhbGwg
b3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2VwdGlv
bkNoZWNrID0gaml0LmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAgICBq
aXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgT0JK
RUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX3Byb2ZpbGUpKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOworICAgIGppdC5zdG9y
ZTY0KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBWYWx1ZVByb2Zp
bGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOworICAgIC8vaml0LnN0b3JlNjQocmVnVDAsIEFk
ZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0
YSwgbV9wcm9maWxlKSkpOwogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1i
ZXJUYWcpLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2XzY0KQpA
QCAtMjQ3MSw4NiArMjU3Miw3OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklU
OjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRy
KHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
YXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2lu
dFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihh
ZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNl
dCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsK
LX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVj
b2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2Rl
KTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUu
c2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkg
eworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAg
IHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAg
ICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsg
Ly8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNh
Y2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlv
bmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rp
b24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24g
c2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9i
YWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFu
ZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0
cnVjdHVyZSgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCByZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8s
IHJlZ1QxKSk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKSk7CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QyKTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQp
PihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7Cisg
ICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsK
IAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdU
MSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7
CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIs
IEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNl
dCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdU
MSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7CisgICAgICAgICAgICAvLyBPT1BTOiB3b3VsZCBiZSBuaWNlIHRvIGhhdmUg
YSB2ZXJzaW9uIHRoYXQgdG9vayBHUFJSZWdzIGluc3RlYWQgb2YgVlJzCisgICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAg
IGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAg
ICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9k
ZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKyAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBl
LCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAg
ICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlh
bGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewog
ICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNl
IHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNh
bGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5t
X3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQ
dXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZh
bHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworCisgICAgICAg
ICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdE5vdGlm
eVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3Mo
cmVnVDApKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEg
dmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIHZhbHVlLgorICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJl
VmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQp
OworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRT
ZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAg
ICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwg
QmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUg
bmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIG93bmVyL3ZhbHVl
LgogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAg
LTI1NjQsNTggKzI2NTgsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBl
IGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0
IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAgICAg
IGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZhci8g
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUgdGhp
bmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBwcm92
ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIsCisg
ICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIKKyAgICAv
LyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBpcyBm
aXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAvLyBt
YXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsKKyAg
ICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikKKyAg
ICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxl
ZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAg
ICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZWxzZSB7
CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOwog
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7
IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGlu
ayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIs
IHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmso
dGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAgICAg
ICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBk
ZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBi
cmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTggKzI3MTIsMjEgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+
KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVj
b2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsK
KyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgaWYg
KHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElmIGFueSBs
aW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENvZGVCbG9j
a3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFyLgogICAg
ICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vy
cm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2UgewogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1bWVudEdQ
UjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09
IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIEFT
U0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkg
PT0gY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAgLTI2NTIsNyArMjc0Myw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2go
WDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjcwMSw3ICsyNzkyLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFy
Z3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAK
QEAgLTI3NTksNyArMjg1MCw2IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCog
b3duZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpAQCAtMjc2
Nyw3ICsyODU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFs
RmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3ODksNyArMjg3
OSw2IEBAIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3AKIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAgLTI4
MDUsNyArMjg5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAK
ICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBj
b21tb24gbW9kZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBw
cm9maWxlIGl0IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0
YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7Cisg
ICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVyYXRv
ck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkg
ewogICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOwogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVy
YXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKCh+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSAmIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKQEAgLTI4NDcsNzgg
KzI5MzYsODcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9t
b2RlOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0
IGRvbmVDYXNlczsKIAotICAgIGF1dG8gcmVzdWx0R1BSID0gcmVnVDA7CisgICAgY29uc3RleHBy
IEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6
cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFz
ZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6
c2NyYXRjaDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVy
YXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVn
VDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG1vZGUsIHNjcmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5TmFtZSwgcHJvcGVydHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFk
ZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZF
bnVtZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0
Y2gyKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgT3BFbnVtZXJh
dG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50
MzIgZW5jb2RlZCB2YWx1ZS4KLSAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2Rl
KSk7CisgICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVy
bywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4
ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAg
Ly8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0
dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRj
aDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkp
OwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5kZXgsIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3Jh
dGNoMik7CiAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2Fj
aGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAg
b3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsK
LSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQ
Uik7Ci0KKyAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
c2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0
Y2gyLCBzY3JhdGNoMik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwg
VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BS
KTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQn
cyBvdXQgb2YgbGluZQogICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwot
ICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAg
c2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIo
QWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBz
aWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRw
dHJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9m
TGluZU9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNl
R1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0
R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNt
YXRjaC5saW5rKHRoaXMpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1l
dGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0
ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2Rl
U3RydWN0dXJlTWlzbWF0Y2gpLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFk
YXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0
dXJlTW9kZS5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRl
eGVkTW9kZSkpOworICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNj
cmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSkpOwogICAgIC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAgICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7
Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdU
Mik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BS
LCBzY3JhdGNoMSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBkb25lQ2FzZXMubGluayh0
aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IApAQCAtMjkyNywxMCArMzAyNSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9y
X2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklU
OjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5j
dGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVu
YW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNf
cHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0
IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjkzOSw3ICszMDM2LDkgQEAgdm9pZCBK
SVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChy
ZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOwor
ICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNl
dE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCByZWdUMSk7
CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAtMzAyOCw2ICszMTI3LDEzIEBAIHZv
aWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKICAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVy
KEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBi
YXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNoR1BSKG93bmVyKSk7CisgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRo
aXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxs
TGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxp
bmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0lu
Zm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAgIHJldmVydENhbGwo
dm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5y
ZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9y
Q2hlY2twb2ludC5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNoZWNrcG9p
bnRPU1JFeGl0U2lkZVN0YXRlLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2lu
Y2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgpAQCAtMTUzLDcgKzE1NCw3IEBAIGlubGluZSBK
U1ZhbHVlIGdldE9wZXJhbmQoQ2FsbEZyYW1lKiBjYWwKICAgICB9IHdoaWxlIChmYWxzZSkKIAog
I2RlZmluZSBMTElOVF9QUk9GSUxFX1ZBTFVFKHZhbHVlKSBkbyB7IFwKLSAgICAgICAgYnl0ZWNv
ZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX3Byb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6
ZW5jb2RlKHZhbHVlKTsgXAorICAgICAgICBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1f
cHJvZmlsZS0+bV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsgXAogICAgIH0g
d2hpbGUgKGZhbHNlKQogCiAjZGVmaW5lIExMSU5UX0NBTExfRU5EX0lNUEwoY2FsbEZyYW1lLCBj
YWxsVGFyZ2V0LCBjYWxsVGFyZ2V0VGFnKSBcCkBAIC0zNzAsNiArMzcxLDE1IEBAIGlubGluZSBi
b29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYKICAgICAKICAgICBjb2RlQmxvY2stPnVw
ZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5q
aXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxC
YXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9j
aygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlKSB7CisgICAgICAgICAgICAvL2RhdGFMb2dMbigi
U2hhcmVkIHZpYSBMTEludCIpOworICAgICAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxp
bmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAg
ICAgIGNvZGVCbG9jay0+aml0TmV4dEludm9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRU
aHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxv
Y2ssICJkZWxheUpJVENvbXBpbGUiLCAoInRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRlciA9
ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBs
aWZ0ZWQuIik7CkBAIC04NjAsNyArODcwLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX2l0ZXJhdG9yXwogICAgIEpTVmFsdWUgcmVzdWx0ID0gcGVyZm9ybUxMSW50R2V0QnlJRChw
YywgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIGl0ZXJhdG9yLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
ZXh0LCBtZXRhZGF0YS5tX21vZGVNZXRhZGF0YSk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9O
KCk7CiAgICAgbmV4dFJlZ2lzdGVyID0gcmVzdWx0OwotICAgIGJ5dGVjb2RlLm1ldGFkYXRhKGNv
ZGVCbG9jaykubV9uZXh0UHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKKyAgICBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fbmV4dFByb2ZpbGUtPm1f
YnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIExMSU5UX0VORCgpOwog
fQogCkBAIC04ODAsNyArODkwLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2l0
ZXJhdG9yXwogICAgIEpTVmFsdWUgcmVzdWx0ID0gcGVyZm9ybUxMSW50R2V0QnlJRChwYywgY29k
ZUJsb2NrLCBnbG9iYWxPYmplY3QsIGl0ZXJhdG9yUmV0dXJuLCB2bS5wcm9wZXJ0eU5hbWVzLT5k
b25lLCBtZXRhZGF0YS5tX2RvbmVNb2RlTWV0YWRhdGEpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQ
VElPTigpOwogICAgIGRvbmVSZWdpc3RlciA9IHJlc3VsdDsKLSAgICBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spLm1fZG9uZVByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2RvbmVQcm9maWxl
LT5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICBMTElOVF9FTkQo
KTsKIH0KIApAQCAtODk3LDcgKzkwNyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9pdGVyYXRvcl8KICAgICBKU1ZhbHVlIHJlc3VsdCA9IHBlcmZvcm1MTEludEdldEJ5SUQocGMs
IGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBpdGVyYXRvclJldHVybiwgdm0ucHJvcGVydHlOYW1l
cy0+dmFsdWUsIG1ldGFkYXRhLm1fdmFsdWVNb2RlTWV0YWRhdGEpOwogICAgIExMSU5UX0NIRUNL
X0VYQ0VQVElPTigpOwogICAgIHZhbHVlUmVnaXN0ZXIgPSByZXN1bHQ7Ci0gICAgYnl0ZWNvZGUu
bWV0YWRhdGEoY29kZUJsb2NrKS5tX3ZhbHVlUHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fdmFs
dWVQcm9maWxlLT5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICBM
TElOVF9FTkQoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxpdHlK
dW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNv
ZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8l
b3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1l
dGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQot
ICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFBy
b2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBlbmQKLQogICAg
ICAgICBtZXRhZGF0YSh0MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAg
IGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBAIC0xMDIzLDcg
KzEwMTksNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAg
ICAgICMgTWV0YWRhdGEgaW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRlZ2VyT3BlcmF0
aW9uKHQyLCAuc2xvdykKICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAs
IDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAg
IHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0
MSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4OSwyMiArMTA4
NSwxOCBAQCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAKLSAgICBtYWNy
byB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpN
ZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQot
ICAgIGVuZAotCiAgICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQsIHQwKQog
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5lcSB0
MSwgSW50MzJUYWcsIC5vcE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYs
IC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRo
UHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQ
cm9maWxlSW50LCB0NSwgdDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdhdGVT
cmNOb3RJbnQ6CiAgICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3Jp
IDB4ODAwMDAwMDAsIHQxCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJl
cikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVt
YmVyLCB0NSwgdDMpCiAgICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTEx
MTUsMTAgKzExMDcsNiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2Rl
TmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9wZXJh
dGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3Ry
dWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAg
ICAgbWFjcm8gYXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6
bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCiAgICAg
ICAgIGdldChtX3JocywgdDIpCiAgICAgICAgIGdldChtX2xocywgdDApCkBAIC0xMTI2LDcgKzEx
MTQsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJp
bmVxIHQyLCBJbnQzMlRhZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcs
IC5vcDJOb3RJbnQKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAg
ICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxl
SW50SW50LCB0NSwgdDIpCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJP
cGVyYXRpb25BbmRTdG9yZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3BhdGNo
KCkKQEAgLTExMzYsMTIgKzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNv
ZGVOYW1lLCBvcAogICAgICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAgICAgICAgYmli
IHQzLCBMb3dlc3RUYWcsIC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAgICAgYmluZXEgdDMsIElu
dDMyVGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50
KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFBy
b2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgICAgICBq
bXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAgICAgICAgZmlp
MmQgdDEsIHQzLCBmdDEKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51
bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJp
dGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAg
ICAgICBnZXQobV9kc3QsIHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1Myw3
ICsxMTQxLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAg
ICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgb3Bl
cmFuZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAg
YmlhIHQzLCBMb3dlc3RUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2Zp
bGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1
Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQw
CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJhdGlvbihmdDEs
IGZ0MCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpA
QCAtNjgsMTUgKzY4LDE2IEBAIG1hY3JvIG1ha2VSZXR1cm5Qcm9maWxlZChvcGNvZGVTdHJ1Y3Qs
IGcKICAgICBmbihtYWNybyAodmFsdWUpCiAgICAgICAgIG1vdmUgdmFsdWUsIHQzCiAgICAgICAg
IG1ldGFkYXRhKHQxLCB0MikKLSAgICAgICAgdmFsdWVQcm9maWxlKG9wY29kZVN0cnVjdCwgbV9w
cm9maWxlLCB0MSwgdDMpCisgICAgICAgIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIG1fcHJv
ZmlsZSwgdDEsIHQzLCB0MikKICAgICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAgICAgc3RvcmVx
IHQzLCBbY2ZyLCB0MSwgOF0KICAgICAgICAgZGlzcGF0Y2goKQogICAgIGVuZCkKIGVuZAogCi1t
YWNybyB2YWx1ZVByb2ZpbGUob3Bjb2RlU3RydWN0LCBwcm9maWxlTmFtZSwgbWV0YWRhdGEsIHZh
bHVlKQotICAgIHN0b3JlcSB2YWx1ZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolcHJvZmls
ZU5hbWUlLm1fYnVja2V0c1ttZXRhZGF0YV0KK21hY3JvIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1
Y3QsIHByb2ZpbGVOYW1lLCBtZXRhZGF0YSwgdmFsdWUsIHNjcmF0Y2gpCisgICAgbG9hZHAgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolcHJvZmlsZU5hbWUlW21ldGFkYXRhXSwgc2NyYXRjaAor
ICAgIHN0b3JlcSB2YWx1ZSwgVmFsdWVQcm9maWxlOjptX2J1Y2tldHNbc2NyYXRjaF0KIGVuZAog
CiAjIEFmdGVyIGNhbGxpbmcsIGNhbGxpbmcgYnl0ZWNvZGUgaXMgY2xhaW1pbmcgaW5wdXQgcmVn
aXN0ZXJzIGFyZSBub3QgdXNlZC4KQEAgLTg3LDcgKzg4LDcgQEAgbWFjcm8gZGlzcGF0Y2hBZnRl
ckNhbGwoc2l6ZSwgb3Bjb2RlU3RydQogICAgIGdldChzaXplLCBvcGNvZGVTdHJ1Y3QsIGRzdFZp
cnR1YWxSZWdpc3RlciwgdDEpCiAgICAgc3RvcmVxIHIwLCBbY2ZyLCB0MSwgOF0KICAgICBtZXRh
ZGF0YShzaXplLCBvcGNvZGVTdHJ1Y3QsIHQyLCB0MSkKLSAgICB2YWx1ZVByb2ZpbGUob3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCB0MiwgcjApCisgICAgdmFsdWVQcm9maWxlKG9wY29k
ZVN0cnVjdCwgdmFsdWVQcm9maWxlTmFtZSwgdDIsIHIwLCB0MykKICAgICBkaXNwYXRjaCgpCiBl
bmQKIApAQCAtNDQxLDggKzQ0MiwxMyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgp
CiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQogICAgICAgICAgICAgY0NhbGwyKF9sbGludF9sb29w
X29zcikKICAgICAgICAgICAgIGJ0cHogcjAsIC5yZWNvdmVyCi0KICAgICAgICAgICAgIG1vdmUg
cjEsIHNwCisKKyAgICAgICAgICAgICMgQmFzZWxpbmUgdXNlcyBMTEludCdzIFBCIHJlZ2lzdGVy
IGZvciBpdHMgSklUIGNvbnN0YW50IHBvb2wuCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tb
Y2ZyXSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9qaXREYXRhW1BCXSwgUEIK
KyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6SklURGF0YTo6bV9qaXRDb25zdGFudFBvb2xb
UEJdLCBQQgorCiAgICAgICAgICAgICBpZiBBUk02NEUKICAgICAgICAgICAgICAgICBsZWFwIEpT
Q0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25z
dGV4cHIgR2F0ZTo6bG9vcE9TUkVudHJ5KSAqIFB0clNpemUsIGEyCiAgICAgICAgICAgICAgICAg
am1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKQEAgLTEwNTYs
MTAgKzEwNjIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAK
IG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikK
ICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFj
cm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjpt
X2JpdHNbdDJdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAg
ICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpAQCAt
MTA2OSw3ICsxMDcxLDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBp
bgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51bWJl
clRhZywgdDEKICAgICAgICAgc3RvcmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRl
QXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFBy
b2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAgZGlz
cGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMTM0LDExICsxMTM2LDYgQEAgZW5kKQogCiAKIGxs
aW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwg
ZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2Zp
bGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFBy
b2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAgZ2V0
KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMp
CiAgICAgbWV0YWRhdGEodDEsIHQyKQpAQCAtMTE0NiwxMiArMTE0MywxMiBAQCBsbGludE9wV2l0
aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwg
Lm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAgIHVw
ZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFBy
b2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgIHJldHVybih0MykK
IC5vcE5lZ2F0ZU5vdEludDoKICAgICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNsb3cK
ICAgICB4b3JxIDB4ODAwMDAwMDAwMDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUo
QXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRl
LCBBcml0aFByb2ZpbGVOdW1iZXIsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0
ZVNsb3c6CkBAIC0xMTY0LDEwICsxMTYxLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShv
cGNvZGVOYW1lLCBvcAogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBv
cGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQogICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0eXBl
KQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0K
ICAgICAgICAgZ2V0KG1fcmhzLCB0MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCkBAIC0xMTc3LDcgKzExNzAsNyBA
QCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdldCht
X2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5zbG93
LCB0MikKIAotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0
NSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTg3LDEw
ICsxMTgwLDEwIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAg
ICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRhZywg
dDEKICAgICAgICAgZnEyZCB0MSwgZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVt
YmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0MikKICAgICAgICAgam1wIC5vcDFOb3RJ
bnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9m
aWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3Ry
dWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0MikKICAgICAgICAgY2kyZHMgdDEsIGZ0
MQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEyMDQs
OSArMTE5Nyw5IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKIAog
ICAgIC5vcDJOb3RJbnQ6CiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFu
IGludCwgdGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KLSAgICAgICAgZ2V0KG1fZHN0LCB0
MikKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBwcm9maWxlKEFy
aXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9w
Y29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDIpCisgICAgICAgIGdldCht
X2RzdCwgdDIpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcs
IHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQpAQCAtMTUwOSw3ICsxNTAyLDcgQEAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF9nZXRfYnlfaWRfZGlyZWN0LAogICAgIGJpbmVxIHQwLCB0MSwgLm9wR2V0
QnlJZERpcmVjdFNsb3cKICAgICBsb2FkaSBPcEdldEJ5SWREaXJlY3Q6Ok1ldGFkYXRhOjptX29m
ZnNldFt0Ml0sIHQxCiAgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQw
KQotICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5SWREaXJlY3QsIG1fcHJvZmlsZSwgdDIsIHQwKQor
ICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5SWREaXJlY3QsIG1fcHJvZmlsZSwgdDIsIHQwLCB0MSkK
ICAgICByZXR1cm4odDApCiAKIC5vcEdldEJ5SWREaXJlY3RTbG93OgpAQCAtMTUyOSw3ICsxNTIy
LDcgQEAgbWFjcm8gcGVyZm9ybUdldEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LAogICAgIGJpbmVx
IHQwLCB0MSwgc2xvd0xhYmVsCiAgICAgbG9hZGlzICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
JW1vZGVNZXRhZGF0YU5hbWUlLmRlZmF1bHRNb2RlLmNhY2hlZE9mZnNldFt0Ml0sIHQxCiAgICAg
bG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQwKQotICAgIHZhbHVlUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIHQyLCB0MCkKKyAgICB2YWx1ZVByb2Zp
bGUob3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCB0MiwgdDAsIHQxKQogICAgIHJldHVy
bih0MCkKIAogLm9wR2V0QnlJZFByb3RvTG9hZDoKQEAgLTE1NDAsNyArMTUzMyw3IEBAIG1hY3Jv
IHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwKICAgICBsb2FkaXMgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRhTmFtZSUucHJvdG9Mb2FkTW9kZS5jYWNoZWRP
ZmZzZXRbdDJdLCB0MQogICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6JW1vZGVN
ZXRhZGF0YU5hbWUlLnByb3RvTG9hZE1vZGUuY2FjaGVkU2xvdFt0Ml0sIHQzCiAgICAgbG9hZFBy
b3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQwKQotICAgIHZhbHVlUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIHQyLCB0MCkKKyAgICB2YWx1ZVByb2ZpbGUob3Bj
b2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCB0MiwgdDAsIHQxKQogICAgIHJldHVybih0MCkK
IAogLm9wR2V0QnlJZEFycmF5TGVuZ3RoOgpAQCAtMTU1MywxNCArMTU0NiwxNCBAQCBtYWNybyBw
ZXJmb3JtR2V0QnlJREhlbHBlcihvcGNvZGVTdHJ1Y3QsCiAgICAgbG9hZGkgLXNpemVvZiBJbmRl
eGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QwXSwg
dDAKICAgICBiaWx0IHQwLCAwLCBzbG93TGFiZWwKICAgICBvcnEgbnVtYmVyVGFnLCB0MAotICAg
IHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIHQyLCB0MCkKKyAg
ICB2YWx1ZVByb2ZpbGUob3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCB0MiwgdDAsIHQx
KQogICAgIHJldHVybih0MCkKIAogLm9wR2V0QnlJZFVuc2V0OgogICAgIGxvYWRpIEpTQ2VsbDo6
bV9zdHJ1Y3R1cmVJRFt0M10sIHQxCiAgICAgbG9hZGkgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjolbW9kZU1ldGFkYXRhTmFtZSUudW5zZXRNb2RlLnN0cnVjdHVyZUlEW3QyXSwgdDAKICAgICBi
aW5lcSB0MCwgdDEsIHNsb3dMYWJlbAotICAgIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHZh
bHVlUHJvZmlsZU5hbWUsIHQyLCBWYWx1ZVVuZGVmaW5lZCkKKyAgICB2YWx1ZVByb2ZpbGUob3Bj
b2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCB0MiwgVmFsdWVVbmRlZmluZWQsIHQxKQogICAg
IHJldHVybihWYWx1ZVVuZGVmaW5lZCkKIAogZW5kCkBAIC0xNTc3LDcgKzE1NzAsNyBAQCBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV9pZCwgT3BHZXRCCiAub3NyUmV0dXJuUG9pbnQ6CiAg
ICAgZ2V0dGVyU2V0dGVyT1NSRXhpdFJldHVyblBvaW50KG9wX2dldF9ieV9pZCwgc2l6ZSkKICAg
ICBtZXRhZGF0YSh0MiwgdDMpCi0gICAgdmFsdWVQcm9maWxlKE9wR2V0QnlJZCwgbV9wcm9maWxl
LCB0MiwgcjApCisgICAgdmFsdWVQcm9maWxlKE9wR2V0QnlJZCwgbV9wcm9maWxlLCB0MiwgcjAs
IHQzKQogICAgIHJldHVybihyMCkKIAogZW5kKQpAQCAtMTY5OCw3ICsxNjkxLDcgQEAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfdmFsLCBPcEdldAogICAgIG1hY3JvIGZpbmlzaEdldEJ5
VmFsKHJlc3VsdCwgc2NyYXRjaCkKICAgICAgICAgZ2V0KG1fZHN0LCBzY3JhdGNoKQogICAgICAg
ICBzdG9yZXEgcmVzdWx0LCBbY2ZyLCBzY3JhdGNoLCA4XQotICAgICAgICB2YWx1ZVByb2ZpbGUo
T3BHZXRCeVZhbCwgbV9wcm9maWxlLCB0NSwgcmVzdWx0KQorICAgICAgICB2YWx1ZVByb2ZpbGUo
T3BHZXRCeVZhbCwgbV9wcm9maWxlLCB0NSwgcmVzdWx0LCBzY3JhdGNoKQogICAgICAgICBkaXNw
YXRjaCgpCiAgICAgZW5kCiAKQEAgLTE3NTksNyArMTc1Miw3IEBAIGxsaW50T3BXaXRoTWV0YWRh
dGEob3BfZ2V0X2J5X3ZhbCwgT3BHZXQKIAogLm9wR2V0QnlWYWxEb25lOgogICAgIHN0b3JlcSB0
MiwgW2NmciwgdDAsIDhdCi0gICAgdmFsdWVQcm9maWxlKE9wR2V0QnlWYWwsIG1fcHJvZmlsZSwg
dDUsIHQyKQorICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5VmFsLCBtX3Byb2ZpbGUsIHQ1LCB0Miwg
dDMpCiAgICAgZGlzcGF0Y2goKQogCiAub3BHZXRCeVZhbE5vdEluZGV4ZWRTdG9yYWdlOgpAQCAt
MTc3Miw3ICsxNzY1LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfdmFsLCBPcEdl
dAogLm9zclJldHVyblBvaW50OgogICAgIGdldHRlclNldHRlck9TUkV4aXRSZXR1cm5Qb2ludChv
cF9nZXRfYnlfdmFsLCBzaXplKQogICAgIG1ldGFkYXRhKHQ1LCB0MikKLSAgICB2YWx1ZVByb2Zp
bGUoT3BHZXRCeVZhbCwgbV9wcm9maWxlLCB0NSwgcjApCisgICAgdmFsdWVQcm9maWxlKE9wR2V0
QnlWYWwsIG1fcHJvZmlsZSwgdDUsIHIwLCB0MikKICAgICByZXR1cm4ocjApCiAKIGVuZCkKQEAg
LTE3OTQsNyArMTc4Nyw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X3ByaXZhdGVfbmFt
ZSwKIAogICAgIGxvYWRpIE9wR2V0UHJpdmF0ZU5hbWU6Ok1ldGFkYXRhOjptX29mZnNldFt0Ml0s
IHQxCiAgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQwKQotICAgIHZh
bHVlUHJvZmlsZShPcEdldFByaXZhdGVOYW1lLCBtX3Byb2ZpbGUsIHQyLCB0MCkKKyAgICB2YWx1
ZVByb2ZpbGUoT3BHZXRQcml2YXRlTmFtZSwgbV9wcm9maWxlLCB0MiwgdDAsIHQzKQogICAgIHJl
dHVybih0MCkKIAogLm9wR2V0UHJpdmF0ZU5hbWVTbG93OgpAQCAtMjY2Miw3ICsyNjU1LDcgQEAg
bGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfZnJvbV9zY29wZSwgTwogICAgIG1hY3JvIGdldFBy
b3BlcnR5KCkKICAgICAgICAgbG9hZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJh
bmRbdDVdLCB0MQogICAgICAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwg
dDIpCi0gICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEZyb21TY29wZSwgbV9wcm9maWxlLCB0NSwg
dDIpCisgICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEZyb21TY29wZSwgbV9wcm9maWxlLCB0NSwg
dDIsIHQzKQogICAgICAgICByZXR1cm4odDIpCiAgICAgZW5kCiAKQEAgLTI2NzAsMTQgKzI2NjMs
MTQgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfZnJvbV9zY29wZSwgTwogICAgICAgICBs
b2FkcCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om1fb3BlcmFuZFt0NV0sIHQwCiAgICAgICAg
IGxvYWRxIFt0MF0sIHQwCiAgICAgICAgIHRkekNoZWNrSWZOZWNlc3NhcnkodDApCi0gICAgICAg
IHZhbHVlUHJvZmlsZShPcEdldEZyb21TY29wZSwgbV9wcm9maWxlLCB0NSwgdDApCisgICAgICAg
IHZhbHVlUHJvZmlsZShPcEdldEZyb21TY29wZSwgbV9wcm9maWxlLCB0NSwgdDAsIHQzKQogICAg
ICAgICByZXR1cm4odDApCiAgICAgZW5kCiAKICAgICBtYWNybyBnZXRDbG9zdXJlVmFyKCkKICAg
ICAgICAgbG9hZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MQog
ICAgICAgICBsb2FkcSBKU0xleGljYWxFbnZpcm9ubWVudF92YXJpYWJsZXNbdDAsIHQxLCA4XSwg
dDAKLSAgICAgICAgdmFsdWVQcm9maWxlKE9wR2V0RnJvbVNjb3BlLCBtX3Byb2ZpbGUsIHQ1LCB0
MCkKKyAgICAgICAgdmFsdWVQcm9maWxlKE9wR2V0RnJvbVNjb3BlLCBtX3Byb2ZpbGUsIHQ1LCB0
MCwgdDMpCiAgICAgICAgIHJldHVybih0MCkKICAgICBlbmQKIApAQCAtMzE1OSw3ICszMTUyLDcg
QEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9lbnVtZXJhdG9yX2dldF9ieQogICAgIGxvYWRxIGNv
bnN0ZXhwciAoKG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKVt0MCwgdDIsIDhdLCB0MgogCiAuZG9uZToKLSAgICB2YWx1ZVBy
b2ZpbGUoT3BFbnVtZXJhdG9yR2V0QnlWYWwsIG1fcHJvZmlsZSwgdDUsIHQyKQorICAgIHZhbHVl
UHJvZmlsZShPcEVudW1lcmF0b3JHZXRCeVZhbCwgbV9wcm9maWxlLCB0NSwgdDIsIHQzKQogICAg
IHJldHVybih0MikKIAogLmdldFNsb3dQYXRoOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgyMDE2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDEyLDcgKzE0MTIsOCBAQCBlbmQKIAogbWFjcm8gY2hlY2tT
d2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlvbikKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
dDAKLSAgICBiYWRkaXMgaW5jcmVtZW50LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRl
ciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCisg
ICAgbG9hZHAgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDBdLCB0MAorICAgIGJh
ZGRpcyBpbmNyZW1lbnQsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwg
LmNvbnRpbnVlCiAgICAgYWN0aW9uKCkKICAgICAuY29udGludWU6CiBlbmQKQEAgLTE0OTUsNyAr
MTQ5Niw4IEBAIG1hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2MKICAgICBj
b2RlQmxvY2tHZXR0ZXIodDEpCiAgICAgY29kZUJsb2NrU2V0dGVyKHQxKQogICAgIGlmIG5vdCAo
Q19MT09QIG9yIENfTE9PUF9XSU4pCi0gICAgICAgIGJhZGRpcyA1LCBDb2RlQmxvY2s6Om1fbGxp
bnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3Qx
XSwgLmNvbnRpbnVlCisgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3Vu
dGVyW3QxXSwgdDAKKyAgICAgICAgYmFkZGlzIDUsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6
bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgICAgIGlmIEpTVkFMVUU2NAogICAgICAgICAg
ICAgbW92ZSBjZnIsIGEwCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQpAQCAtMjU1Niw2ICsyNTU4
LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNybyB1cGRh
dGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQor
ICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRh
dGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0K
K2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBl
LCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
YXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQg
dGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNob3VsZCBh
bHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0X1dJTgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlk
ZW50aWZpZXIuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCwx
MCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsKIAogICAg
IHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChKU0NlbGwq
IGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRp
ZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmluZ0ltcGwq
KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlm
aWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwg
VW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZp
ZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3Qml0cyh1
aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdCaXRzKTsg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlm
aWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVu
dGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJZGVudGlm
aWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVy
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENv
ZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBB
U1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVpZCkpOwog
ICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyODIwMTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJD
YWNoZWRUeXBlcy5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
QnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDYWNoZUVycm9yLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBQUk9G
SUxFX1ZBTFVFX0lOKHZhbHVlX18sIG1fcHJvZmlsZSkKIAogI2RlZmluZSBQUk9GSUxFX1ZBTFVF
X0lOKHZhbHVlLCBwcm9maWxlTmFtZSkgZG8geyBcCi0gICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRh
KGNvZGVCbG9jaykucHJvZmlsZU5hbWUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlKTsgXAorICAgICAgICBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLnByb2ZpbGVOYW1l
LT5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOyBcCiAgICAgfSB3aGlsZSAo
ZmFsc2UpCiAKIHN0YXRpYyB2b2lkIHRocm93QXJpdHlDaGVja1N0YWNrT3ZlcmZsb3dFcnJvcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUaHJvd1Njb3BlJiBzY29wZSkKQEAgLTQ4MCw3
ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYg
RU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhP
cChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBv
cGVyYW5kKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9h
cml0aFByb2ZpbGU7CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEu
bV9hcml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFT
U0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5o
CShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQog
ICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0
YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7
IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0
cnVjdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVj
dXRhYmxlQmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYgKzM4NSw5IEBAIHN0YXRpYyB2b2lk
IG92ZXJyaWRlRGVmYXVsdHMoKQogICAgICAgICBPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRp
bWl6ZUFmdGVyV2FybVVwKCkgPSAxNTAwOwogICAgICAgICBPcHRpb25zOjp0aHJlc2hvbGRGb3JP
TUdPcHRpbWl6ZVNvb24oKSA9IDEwMDsKICAgICB9CisKKyAgICAvLyBPT1BTCisgICAgLy9PcHRp
b25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yQmFzZWxpbmUo
KSA9IDQ1MDsKIH0KIAogc3RhdGljIHZvaWQgY29ycmVjdE9wdGlvbnMoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyODIwMTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDksNyArMzA5LDYgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1v
cnkoKTsKICAgICB2KEludDMyLCBldmFsVGhyZXNob2xkTXVsdGlwbGllciwgMTAsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1heGltdW1FdmFsQ2FjaGVhYmxlU291cmNlTGVu
Z3RoLCAyNTYsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKLSAgICB2KEJvb2wsIHJhbmRvbWl6
ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2lu
dHNGb3JCYXNlbGluZSwgMTAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJbnQzMiwgbWF4
aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvclVwcGVyVGllcnMsIDUwMDAw
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkBAIC01MzIsNiArNTMxLDcgQEAgYm9vbCBjYW5V
c2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZURhdGFJQywgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDSW5PcHRpbWl6aW5nSklU
LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNTaGFyaW5n
LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB1c2VCYXNlbGluZUpJVENv
ZGVTaGFyaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgLyogRmVhdHVy
ZSBGbGFncyAqL1wKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5Niw5ICszOTYsMTYgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9y
RXhlY3V0aQogICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCiAgICAgICAgIGNv
ZGVCbG9jay0+dmFsaWRhdGUoKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQorICAg
IGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5s
aW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICBjb2Rl
QmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VO
b25OdWxsKCkpOworCisgICAgICAgIC8vaWYgKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2so
KS0+aXNCdWlsdGluRnVuY3Rpb24oKSkKKyAgICAgICAgLy8gICAgZGF0YUxvZ0xuKCJTaGFyZWQg
YnVpbHRpbiEiKTsKKyAgICB9IGVsc2UgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpIHsKKyAgICAg
ICAgLy9pZiAoIWNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+aXNCdWlsdGluRnVuY3Rp
b24oKSkKKyAgICAgICAgLy8gICAgZGF0YUxvZ0xuKFJhd1BvaW50ZXIoY29kZUJsb2NrLT51bmxp
bmtlZENvZGVCbG9jaygpKSwgIjogIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkp
OwogICAgICAgICBzZXR1cExMSW50KGNvZGVCbG9jayk7Ci0gICAgZWxzZQorICAgIH0gZWxzZQog
ICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrKTsKIAogICAgIGluc3RhbGxDb2RlKHZtLCBj
b2RlQmxvY2ssIGNvZGVCbG9jay0+Y29kZVR5cGUoKSwgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlv
bktpbmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVy
VXBDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUxMSW50VGllclVwQ291bnRlci5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDkgKzUyLDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCgpCiAg
ICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAg
ICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVB
ZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRp
b25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0
aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9s
ZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0K
IAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtNjUs
OSArNjUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQogICAgIHsKICAgICAg
ICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0
TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpLCBudWxs
cHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JC
QlFPcHRpbWl6ZVNvb24oKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVz
aG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1p
emVTb29uKCkpOwogICAgIH0KIAogICAgIHN0cnVjdCBPU1JFbnRyeURhdGEgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCShyZXZpc2lv
biAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CiAKIFRpZXJVcENvdW50OjpUaWVyVXBDb3VudCgpCiB7Ci0gICAgc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwg
bnVsbHB0cik7CisgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09w
dGltaXplQWZ0ZXJXYXJtVXAoKSk7CiB9CiAKIFRpZXJVcENvdW50Ojp+VGllclVwQ291bnQoKSA9
IGRlZmF1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVw
Q291bnQuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVRpZXJVcENvdW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCh1aW50MzJfdCBmdW5jdGlvbkluZGV4KQog
ICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlv
bkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBhZnRlciB3YXJtLXVwLiIpOwotICAgICAgICBzZXRO
ZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgp
LCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZv
ck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0
aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCkBAIC05MCwxNCArOTAsMTQgQEAgcHVibGljOgog
ICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQog
ICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlv
bkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uIik7Ci0gICAgICAgIHNl
dE5ld1RocmVzaG9sZCgwLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKDApOwog
ICAgIH0KIAogICAgIHZvaWQgb3B0aW1pemVTb29uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAg
ICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0aW9u
SW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIHNvb24uIik7CiAgICAgICAgIC8vIEZJWE1FOiBOZWVk
IGFkanVzdG1lbnQgb25jZSB3ZSBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3YXNtIGZ1bmN0
aW9ucy4KLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09w
dGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICB2b2lkIHNldE9w
dGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCh1aW50MzJfdCBmdW5j
dGlvbkluZGV4LCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMjgy
MDE2KQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2
LDIwIEBAIHB1YmxpYzoKICAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEJhZyYgb3BlcmF0b3I9KEJhZzxULCBVPiYm
IG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHVud3JhcHBlZEhlYWQoKSA9PSBvdGhlci51bndy
YXBwZWRIZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAgQmFnIGRl
c3Ryb3k7CisgICAgICAgIGRlc3Ryb3kubV9oZWFkID0gdW53cmFwcGVkSGVhZCgpOworICAgICAg
ICBtX2hlYWQgPSBvdGhlci51bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG90aGVyLm1faGVhZCA9
IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIH5CYWcoKQog
ICAgIHsKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJl
c3MtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0
cwkocmV2aXNpb24gMjgyMDE2KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0
cwkod29ya2luZyBjb3B5KQpAQCAtNzcwLDE3ICs3NzAsMTggQEAgZW5kCiAKICMgRklYTUU6IG5l
ZWQgdG8gZml4IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg3MDMg
dG8gZW5hYmxlIHRoaXMgb24gTGludXgvTUlQUy4KIGRlZiBydW5CeXRlY29kZUNhY2hlSW1wbChv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMsICphZGRpdGlvbmFsRW52KQotICAgIGlmICgkaG9z
dE9TID09ICJkYXJ3aW4iKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGUi
Ci0gICAgZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAkYXJjaGl0ZWN0dXJlICE9ICJtaXBz
IikKLSAgICAgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlWFhYWFhYIgotICAgIGVs
c2UKLSAgICAgICAgc2tpcAotICAgICAgICByZXR1cm4KLSAgICBlbmQKKyAgICAjIE9PUFMKKyAg
ICAjaWYgKCRob3N0T1MgPT0gImRhcndpbiIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0
ZWNvZGUtY2FjaGUiCisgICAgI2Vsc2lmICgkaG9zdE9TID09ICJsaW51eCIgJiYgJGFyY2hpdGVj
dHVyZSAhPSAibWlwcyIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVY
WFhYWFgiCisgICAgI2Vsc2UKKyAgICAjICAgIHNraXAKKyAgICAjICAgIHJldHVybgorICAgICNl
bmQKIAotICAgIG9wdGlvbnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9OUyArIG9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMKLSAgICBh
ZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJi
eXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAq
dm1Db21tYW5kLCAkYmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxl
ciwgc2ltcGxlRXJyb3JIYW5kbGVyLCAqYWRkaXRpb25hbEVudikKKyAgICAjb3B0aW9ucyA9IEJB
U0VfT1BUSU9OUyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsg
JHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucworICAgICNhZGRSdW5Db21tYW5kKCJieXRlY29k
ZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhl
bHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5kLCAkYmVuY2htYXJr
LnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVy
LCAqYWRkaXRpb25hbEVudikKIGVuZAogCiBkZWYgcnVuQnl0ZWNvZGVDYWNoZSgqb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437652</attachid>
            <date>2021-09-08 11:55:09 -0700</date>
            <delta_ts>2021-09-16 19:10:43 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>469599</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODMyLDYgKzgzMiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjY4LDYgKzM2NjksOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjU4LDYgKzYyNjEsOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05Njk5LDYgKzk3MDQsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNjEz
MjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCShy
ZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAgb3AgOmdldF9hcmd1
bWVudCwKICAgICAgICAgaW5kZXg6IGludCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAg
ICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxl
LiosCiAgICAgfQogCiBvcCA6YXJndW1lbnRfY291bnQsCkBAIC0xODMsNyArMTgzLDcgQEAgb3Ag
OnRvX3RoaXMsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgY2FjaGVkU3RydWN0dXJlSUQ6IFN0
cnVjdHVyZUlELAogICAgICAgICB0b1RoaXNTdGF0dXM6IFRvVGhpc1N0YXR1cywKLSAgICAgICAg
cHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwK
ICAgICB9CiAKIG9wIDpjaGVja190ZHosCkBAIC0yOTAsOSArMjkwLDEwIEBAIG9wX2dyb3VwIDpQ
cm9maWxlZEJpbmFyeU9wLAogICAgICAgICBsaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAg
cmhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVz
LAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkCiAgICAgfSwKICAgICBtZXRhZGF0YTog
ewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0
aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9ncm91cCA6VmFsdWVQ
cm9maWxlZEJpbmFyeU9wLApAQCAtMzA5LDcgKzMxMCw3IEBAIG9wX2dyb3VwIDpWYWx1ZVByb2Zp
bGVkQmluYXJ5T3AsCiAgICAgICAgIHJoczogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAg
bWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlCisgICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6Yml0bm90LApAQCAtMzE4LDcgKzMxOSw3
IEBAIG9wIDpiaXRub3QsCiAgICAgICAgIG9wZXJhbmQ6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9
LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZQorICAgICAg
ICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlVuYXJ5T3AsCkBA
IC0zNTEsOSArMzUyLDEwIEBAIG9wX2dyb3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAg
IF0sCiAgICAgYXJnczogewogICAgICAgICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAg
ICAgcHJvZmlsZUluZGV4OiB1bnNpZ25lZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAg
ICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxl
OiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzYzLDcg
KzM2NSw3IEBAIG9wIDp0b19vYmplY3QsCiAgICAgICAgIG1lc3NhZ2U6IHVuc2lnbmVkLAogICAg
IH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVBy
b2ZpbGVkVW5hcnlPcCwKQEAgLTM3Niw3ICszNzgsNyBAQCBvcF9ncm91cCA6VmFsdWVQcm9maWxl
ZFVuYXJ5T3AsCiAgICAgICAgIG9wZXJhbmQ6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAg
IG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJv
ZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAgfQogCiBvcCA6bmVnYXRlLApAQCAtMzg0LDkgKzM4
NiwxMCBAQCBvcCA6bmVnYXRlLAogICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAg
ICAgb3BlcmFuZDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRU
eXBlLAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAg
YXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApAQCAt
NDc3LDcgKzQ4MCw3IEBAIG9wIDpnZXRfYnlfaWQsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewog
ICAgICAgICBtb2RlTWV0YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCi0gICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAg
fQogCiBvcCA6Z2V0X2J5X2lkX3dpdGhfdGhpcywKQEAgLTQ4OCw3ICs0OTEsNyBAQCBvcCA6Z2V0
X2J5X2lkX3dpdGhfdGhpcywKICAgICAgICAgcHJvcGVydHk6IHVuc2lnbmVkLAogICAgIH0sCiAg
ICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBw
cm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAKIG9wIDpnZXRfYnlfdmFsX3dpdGhfdGhp
cywKQEAgLTQ5OSw3ICs1MDIsNyBAQCBvcCA6Z2V0X2J5X3ZhbF93aXRoX3RoaXMsCiAgICAgICAg
IHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAg
ICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmls
ZS4qLAogICAgIH0KIAogb3AgOmdldF9ieV9pZF9kaXJlY3QsCkBAIC01MDksNyArNTEyLDcgQEAg
b3AgOmdldF9ieV9pZF9kaXJlY3QsCiAgICAgICAgIHByb3BlcnR5OiB1bnNpZ25lZCwKICAgICB9
LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwgIyBub3Qg
dXNlZCBpbiBsbGludAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwgIyBub3QgdXNl
ZCBpbiBsbGludAogICAgICAgICBzdHJ1Y3R1cmVJRDogU3RydWN0dXJlSUQsCiAgICAgICAgIG9m
ZnNldDogdW5zaWduZWQsCiAgICAgfQpAQCAtNTIwLDcgKzUyMyw3IEBAIG9wIDpnZXRfcHJvdG90
eXBlX29mLAogICAgICAgICB2YWx1ZTogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0
YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxl
OiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAKIG9wIDp0cnlfZ2V0X2J5X2lkLApAQCAtNTMwLDcg
KzUzMyw3IEBAIG9wIDp0cnlfZ2V0X2J5X2lkLAogICAgICAgICBwcm9wZXJ0eTogdW5zaWduZWQs
CiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOnB1dF9ieV9p
ZCwKQEAgLTU3MSw3ICs1NzQsNyBAQCBvcCA6Z2V0X2J5X3ZhbCwKICAgICAgICAgcHJvcGVydHk6
IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAg
ICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBzZWVuSWRlbnRpZmllcnM6
IEdldEJ5VmFsSGlzdG9yeSwKICAgICB9CkBAIC01ODMsNyArNTg2LDcgQEAgb3AgOmdldF9wcml2
YXRlX25hbWUsCiAgICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHBy
b2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgICAgICBzdHJ1Y3R1cmVJRDogU3RydWN0dXJlSUQs
CiAgICAgICAgIG9mZnNldDogdW5zaWduZWQsCiAgICAgICAgIHByb3BlcnR5OiBXcml0ZUJhcnJp
ZXJbSlNDZWxsXSwKQEAgLTg0Miw3ICs4NDUsNyBAQCBvcCA6Y2FsbCwKICAgICB9LAogICAgIG1l
dGFkYXRhOiB7CiAgICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8sCi0gICAg
ICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxl
LiosCiAgICAgfQogCiBvcCA6dGFpbF9jYWxsLApAQCAtODU0LDcgKzg1Nyw3IEBAIG9wIDp0YWls
X2NhbGwsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewogICAgICAgICBjYWxsTGlua0luZm86IExM
SW50Q2FsbExpbmtJbmZvLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAg
IHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOmNhbGxfZXZhbCwKQEAgLTg2
Nyw3ICs4NzAsNyBAQCBvcCA6Y2FsbF9ldmFsLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKICAg
ICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKLSAgICAgICAgcHJvZmlsZTog
VmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9CiAK
IG9wIDpjYWxsX3ZhcmFyZ3MsCkBAIC04ODEsNyArODg0LDcgQEAgb3AgOmNhbGxfdmFyYXJncywK
ICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9m
aWxlLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHByb2ZpbGU6IFZh
bHVlUHJvZmlsZS4qLAogICAgIH0sCiAgICAgdG1wczogewogICAgICAgICBhcmdDb3VudEluY2x1
ZGluZ1RoaXM6IHVuc2lnbmVkLApAQCAtOTAyLDcgKzkwNSw3IEBAIG9wIDp0YWlsX2NhbGxfdmFy
YXJncywKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJy
YXlQcm9maWxlLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIHByb2Zp
bGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0sCiAgICAgdG1wczogewogICAgICAgICBhcmdDb3Vu
dEluY2x1ZGluZ1RoaXM6IHVuc2lnbmVkCkBAIC05MjMsNyArOTI2LDcgQEAgb3AgOnRhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cywKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOmNvbnN0cnVj
dCwKQEAgLTkzNSw3ICs5MzgsNyBAQCBvcCA6Y29uc3RydWN0LAogICAgIH0sCiAgICAgbWV0YWRh
dGE6IHsKICAgICAgICAgY2FsbExpbmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKLSAgICAgICAg
cHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwK
ICAgICB9CiAKIG9wIDpjb25zdHJ1Y3RfdmFyYXJncywKQEAgLTk0OSw3ICs5NTIsNyBAQCBvcCA6
Y29uc3RydWN0X3ZhcmFyZ3MsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewogICAgICAgICBhcnJh
eVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAor
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9LAogICAgIHRtcHM6IHsKICAg
ICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzOiB1bnNpZ25lZApAQCAtMTAyOCw3ICsxMDMxLDcg
QEAgb3AgOmdldF9mcm9tX3Njb3BlLAogICAgICAgICAgICAgc3RydWN0dXJlOiBXcml0ZUJhcnJp
ZXJCYXNlW1N0cnVjdHVyZV0sCiAgICAgICAgIH0sCiAgICAgICAgIG9wZXJhbmQ6IHVpbnRwdHJf
dCwgI29mZnNldCA2Ci0gICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwgIyBvZmZzZXQgNwor
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwgIyBvZmZzZXQgNwogICAgIH0sCiAgICAg
bWV0YWRhdGFfaW5pdGlhbGl6ZXJzOiB7CiAgICAgICAgIGdldFB1dEluZm86IDpnZXRQdXRJbmZv
LApAQCAtMTA2NSw3ICsxMDY4LDcgQEAgb3AgOmdldF9mcm9tX2FyZ3VtZW50cywKICAgICAgICAg
aW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmls
ZTogVmFsdWVQcm9maWxlLAorICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICB9
CiAKIG9wIDpwdXRfdG9fYXJndW1lbnRzLApAQCAtMTE4Nyw3ICsxMTkwLDcgQEAgb3AgOmVudW1l
cmF0b3JfZ2V0X2J5X3ZhbCwKICAgICAgICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lzdGVyLAog
ICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAor
ICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCiAgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFk
YXRhLAogICAgIH0KQEAgLTEyNDksMTEgKzEyNTIsMTEgQEAgb3AgOml0ZXJhdG9yX29wZW4sCiAg
ICAgfSwKICAgICBtZXRhZGF0YTogewogICAgICAgICBpdGVyYXRpb25NZXRhZGF0YTogSXRlcmF0
aW9uTW9kZU1ldGFkYXRhLAotICAgICAgICBpdGVyYWJsZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
KyAgICAgICAgaXRlcmFibGVQcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICAgICAgY2FsbExp
bmtJbmZvOiBMTEludENhbGxMaW5rSW5mbywKLSAgICAgICAgaXRlcmF0b3JQcm9maWxlOiBWYWx1
ZVByb2ZpbGUsCisgICAgICAgIGl0ZXJhdG9yUHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAg
ICAgIG1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwKLSAgICAgICAgbmV4dFByb2Zp
bGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgbmV4dFByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAog
ICAgIH0sCiAgICAgY2hlY2twb2ludHM6IHsKICAgICAgICAgc3ltYm9sQ2FsbDogbmlsLApAQCAt
MTI3NCwxMSArMTI3NywxMSBAQCBvcCA6aXRlcmF0b3JfbmV4dCwKICAgICAgICAgaXRlcmF0aW9u
TWV0YWRhdGE6IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwKICAgICAgICAgaXRlcmFibGVQcm9maWxl
OiBBcnJheVByb2ZpbGUsCiAgICAgICAgIGNhbGxMaW5rSW5mbzogTExJbnRDYWxsTGlua0luZm8s
Ci0gICAgICAgIG5leHRSZXN1bHRQcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIG5leHRS
ZXN1bHRQcm9maWxlOiBWYWx1ZVByb2ZpbGUuKiwKICAgICAgICAgZG9uZU1vZGVNZXRhZGF0YTog
R2V0QnlJZE1vZGVNZXRhZGF0YSwKLSAgICAgICAgZG9uZVByb2ZpbGU6IFZhbHVlUHJvZmlsZSwK
KyAgICAgICAgZG9uZVByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgICAgICB2YWx1ZU1vZGVN
ZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwKLSAgICAgICAgdmFsdWVQcm9maWxlOiBWYWx1
ZVByb2ZpbGUsCisgICAgICAgIHZhbHVlUHJvZmlsZTogVmFsdWVQcm9maWxlLiosCiAgICAgfSwK
ICAgICB0bXBzOiB7CiAgICAgICAgIG5leHRSZXN1bHQ6IEpTVmFsdWUsCkBAIC0xMzIyLDcgKzEz
MjUsNyBAQCBvcCA6Z2V0X2ludGVybmFsX2ZpZWxkLAogICAgICAgICBpbmRleDogdW5zaWduZWQs
CiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUs
CisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZS4qLAogICAgIH0KIAogb3AgOnB1dF9pbnRl
cm5hbF9maWVsZCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAy
ODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMjAgKzU3LDQyIEBAIFZhbHVl
UHJvZmlsZSogdmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICBVTlVTRURfUEFSQU0oY2hl
Y2twb2ludEluZGV4KTsKICAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlTWV0YWRhdGE6Om9wY29k
ZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKICAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5k
ZXgpIHsKLSAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJuICZt
ZXRhZGF0YS5tX2l0ZXJhdG9yUHJvZmlsZTsKLSAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6
Z2V0TmV4dDogcmV0dXJuICZtZXRhZGF0YS5tX25leHRQcm9maWxlOworICAgICAgICBjYXNlIE9w
SXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1cm4gbWV0YWRhdGEubV9pdGVyYXRvclByb2Zp
bGU7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OmdldE5leHQ6IHJldHVybiBtZXRhZGF0
YS5tX25leHRQcm9maWxlOwogICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAKICAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRlY29kZU1l
dGFkYXRhOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CiAgICAgICAgIHN3aXRjaCAo
Y2hlY2twb2ludEluZGV4KSB7Ci0gICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVO
ZXh0OiByZXR1cm4gJm1ldGFkYXRhLm1fbmV4dFJlc3VsdFByb2ZpbGU7Ci0gICAgICAgIGNhc2Ug
T3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJldHVybiAmbWV0YWRhdGEubV9kb25lUHJvZmlsZTsK
LSAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiAmbWV0YWRhdGEu
bV92YWx1ZVByb2ZpbGU7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0
OiByZXR1cm4gbWV0YWRhdGEubV9uZXh0UmVzdWx0UHJvZmlsZTsKKyAgICAgICAgY2FzZSBPcEl0
ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIG1ldGFkYXRhLm1fZG9uZVByb2ZpbGU7CisgICAg
ICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlOiByZXR1cm4gbWV0YWRhdGEubV92YWx1
ZVByb2ZpbGU7CiAgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgCi0gICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9m
aWxlOworICAgICAgICByZXR1cm4gbWV0YWRhdGEubV9wcm9maWxlOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yKHVuc2ln
bmVkIGNoZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURfUEFSQU0oY2hlY2twb2ludEluZGV4
KTsKKyAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9v
cGVuKSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2Ug
T3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9m
ZnNldE9mSXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46Omdl
dE5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFByb2ZpbGUoKTsK
KyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0
ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAg
ICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJh
dG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZEb25l
UHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1ZTogcmV0dXJu
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2ZpbGUoKTsKKyAgICAgICAgZGVm
YXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSAKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24g
MjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86
OnVubGluayhWTSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1D
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRo
U3RhcnQoKQotewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5h
bFB0clRhZz4obV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNF
X0FTU0VSVCghaXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJ
bmZvOjpzZXRNYXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID0gdmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNE
aXJlY3QoKSAmJiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwog
dm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVT
cGVjaWZpY0NhbGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5
OSwxMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9m
cmFtZVNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0
YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2Fs
bCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRV
c2VzRGF0YUlDcyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwot
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxM
aW5rSW5mb0dQUik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExp
bmtJbmZvR1BSOwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgp
OwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBzbG93UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJ
QyA9PSBVc2VEYXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5z
Y3JhdGNoUmVnaXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcg
QEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAg
Z29Qb2x5bW9ycGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywg
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVN
YXNrKSk7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAg
ICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMu
bGluaygmaml0KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBw
cmVwLgogICAgICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxM
aW5rSW5mb0dQUiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRy
eVB0clRhZyk7CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0
aFBhdGNoKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlm
IChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAg
ICAgICAgIGNhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgY2FsbCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNh
bGxMaW5rSW5mbyk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAg
ICAgICB1LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+
dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2Rl
SUMubV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihjYWxsZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEzICszNDQs
MzQgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGpp
dCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVz
ZURhdGFJQykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1
cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VE
YXRhSUMsIG51bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBp
ZiAoaXNEYXRhSUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIg
IT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJ
Qy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1
cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQor
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2Fs
bCgpKTsKLSAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAg
c2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aElt
cGwodGhpcywgaml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlz
VGFpbENhbGwoKSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVs
cGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0
aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5m
b0dQUiwgVXNlRGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7
CiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBl
cnMmIGppdCkKQEAgLTM2OSwxNyArMzgxLDMwIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xv
d1BhdGgoVk0mIHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJU
YWcpOwogfQogCit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUo
Y2FsbExpbmtJbmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxp
emVEYXRhSUMoVk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0lu
Zm8sIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgbV9j
b2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4
KTsKKyAgICBzZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQ
Uik7CisgICAgbV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRp
b247CisgICAgaWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpCisgICAg
ICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+
KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBm
b3IgcmVmIGNvdW50aW5nPworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAg
ICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRT
bG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBD
YWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVz
ZURhdGFJQzo6Tm8pOwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0g
ICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAg
ICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNh
bGwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
CiAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CkBAIC0zOTcsNyArNDIyLDcgQEAgdm9p
ZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhcwogCiAgICAgYXV0byBmYXN0UGF0
aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgICAgIHUuY29k
ZUlDLm1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihmYXN0UGF0aFN0YXJ0KTsKICAgICB9KTsKIAogICAgIC8vIC0gSWYgd2UncmUgbm90IHll
dCBsaW5rZWQsIHRoaXMgaXMgYSBqdW1wIHRvIHRoZSBzbG93IHBhdGguCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODIw
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDExIEBAIGNsYXNzIEpTRnVuY3Rpb247CiBlbnVtIE9w
Y29kZUlEIDogdW5zaWduZWQ7CiBzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGE7CiAKK3N0cnVj
dCBVbmxpbmtlZENhbGxMaW5rSW5mbzsKKwogY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBh
Y2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIHB1YmxpYzoKLSAgICBlbnVtIENh
bGxUeXBlIHsKKyAgICBlbnVtIENhbGxUeXBlIDogdWludDhfdCB7CiAgICAgICAgIE5vbmUsCiAg
ICAgICAgIENhbGwsCiAgICAgICAgIENhbGxWYXJhcmdzLApAQCAtMTY1LDYgKzE2Nyw4IEBAIHB1
YmxpYzoKICAgICAgICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgfQogCisgICAgdm9p
ZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgVW5saW5rZWRDYWxsTGlua0luZm8mLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKwogICAgIEdQUlJlZyBjYWxsZWVHUFIo
KSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsgfQogICAgIAogICAgIGVudW0gY2xhc3MgVXNl
RGF0YUlDIDogdWludDhfdCB7CkBAIC0xNzMsMTMgKzE3NywxNiBAQCBwdWJsaWM6CiAgICAgfTsK
IAogcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1w
bChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVt
aXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxl
ZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGws
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKIHB1YmxpYzoKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRE
YXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwg
VXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2b2lk
IGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXREaXJlY3RU
YWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
Jik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9TdHViKCk7
CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VXNlRGF0
YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsyMTAsNiBA
QCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAotICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7CiAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7CiAKQEAg
LTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVsbHB0cjsK
ICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25jZSgpCiAg
ICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMwOCw5ICsz
MDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlwZT4obV9j
YWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENh
bGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgfQogCiAg
ICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgxLDcgKzM4
Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OworCisgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOworCiAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAg
dW5pb24gVW5pb25UeXBlIHsKQEAgLTM5Nyw2ICs0MDAsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsTG9jYXRpb247
CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4g
bV9jYWxsZWVMb2NhdGlvbjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJu
YWxQdHJUYWc+IG1fc2xvd1BhdGhTdGFydDsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKICAgICAgICAgfSBjb2RlSUM7CiAg
ICAgfSB1OwogCkBAIC00MjQsNiArNDI4LDEzIEBAIGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxM
aW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKTsKIH0K
IAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVj
b2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNh
biB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJbmZvOjpDYWxs
VHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBk
b25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBm
cmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDggQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJj
ZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVy
cygpKTsKKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxp
bnRFeGVjdXRlQ291bnRlcigpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRk
KHRoaXMpOwogfQpAQCAtMzE4LDcgKzMyMCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIEMKICAgICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKICAgICBvcHRp
bWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKKyAgICAvL2ppdEFmdGVy
V2FybVVwKCk7CiAKICAgICBpZiAob3RoZXIubV9yYXJlRGF0YSkgewogICAgICAgICBjcmVhdGVS
YXJlRGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC0zNTksNyArMzYxLDkgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVy
KCkpOwogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSk7Ci0gICAgCisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENv
ZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKKwogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCku
YWRkKHRoaXMpOwogfQogCkBAIC0zNzAsMTAgKzM3NCwxMyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhWTSYgdm0sIFN0cnVjdHVyZSogCiAvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5r
ZWQgYnl0ZWNvZGUgZ2VuZXJhdGlvbi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdl
bmVyYXRlIGNvbnRyb2wKIC8vIGZsb3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFz
b24gZm9yIHRoaXMgaXMgd2UgcmVseSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2Ft
ZSBmb3IKIC8vIGFsbCB0aGUgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2Ug
cmVseSBvbiB0aGlzIGZhY3QgYnkgY2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKLS8vIGlu
c2lkZSBVbmxpbmtlZENvZGVCbG9jay4KKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4gQWxz
bywgQmFzZWxpbmUgSklUIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3Mgb2Yg
YW4gVW5saW5rZWRDb2RlQmxvY2ssCisvLyBzbyB0aGUgYnl0ZWNvZGUgbXVzdCByZW1haW4gdGhl
IHNhbWUgYmV0d2VlbiBDb2RlQmxvY2tzIHNoYXJpbmcgYW4gVW5saW5rZWRDb2RlQmxvY2suCiBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKICAg
ICBKU1Njb3BlKiBzY29wZSkKIHsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7IC8vIFdl
IG5lZWQgdG8gc2V0IHVwIG91ciB2YWx1ZSBwcm9maWxlIHBvaW50ZXJzLgorCiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIApAQCAt
NDM1LDcgKzQ0Miw4IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMK
ICAgICAvLyBCb29ra2VlcCB0aGUgc3Ryb25nbHkgcmVmZXJlbmNlZCBtb2R1bGUgZW52aXJvbm1l
bnRzLgogICAgIEhhc2hTZXQ8SlNNb2R1bGVFbnZpcm9ubWVudCo+IHN0cm9uZ2x5UmVmZXJlbmNl
ZE1vZHVsZUVudmlyb25tZW50czsKIAotICAgIGF1dG8gbGlua19wcm9maWxlID0gWyZdKGNvbnN0
IGF1dG8mIC8qaW5zdHJ1Y3Rpb24qLywgYXV0byAvKmJ5dGVjb2RlKi8sIGF1dG8mIC8qbWV0YWRh
dGEqLykgeworICAgIGF1dG8gbGlua19wcm9maWxlID0gWyZdKGNvbnN0IGF1dG8mIC8qaW5zdHJ1
Y3Rpb24qLywgYXV0byAvKmJ5dGVjb2RlKi8sIGF1dG8mIG1ldGFkYXRhKSB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lX3Y8VmFsdWVQcm9maWxlKiwgZGVjbHR5cGUobWV0YWRh
dGEubV9wcm9maWxlKT4pOwogICAgICAgICBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2Zp
bGVzKys7CiAgICAgfTsKIApAQCAtNDY2LDYgKzQ3NCwxOSBAQCBib29sIENvZGVCbG9jazo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCisjZGVmaW5l
IExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTog
eyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0
YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJ5
dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZp
bmUgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6
IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRh
dGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5
dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwogICAg
IGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9u
cygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVh
bSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgp
OwpAQCAtNDk5LDkgKzUyMCw5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFMKIAogICAgICAgICBMSU5LKE9wR2V0QnlJZCwgcHJvZmlsZSkKIAotICAgICAgICBMSU5L
KE9wRW51bWVyYXRvck5leHQsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BFbnVtZXJhdG9ySW5C
eVZhbCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwg
cHJvZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JOZXh0KQorICAgICAgICBMSU5LKE9w
RW51bWVyYXRvckluQnlWYWwpCisgICAgICAgIExJTksoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVy
dHkpCiAgICAgICAgIExJTksoT3BFbnVtZXJhdG9yR2V0QnlWYWwsIHByb2ZpbGUpCiAKICAgICAg
ICAgTElOSyhPcENhbGwsIHByb2ZpbGUpCkBAIC01MjgsMTQgKzU0OSwxNCBAQCBib29sIENvZGVC
bG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQcm9t
aXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTksoT3BB
ZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAgIExJ
TksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcEluYykK
LSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9G
SUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BNdWwp
CisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAgICAg
TElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktfV0lU
SF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllf
QVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJ
TEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2MSw2ICs3ODIsNjIg
QEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogI3VuZGVmIExJTktf
RklFTEQKICN1bmRlZiBMSU5LCiAKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBudW1i
ZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpOworICAgICAgICBpZiAobV9tZXRhZGF0YSkgewor
I2RlZmluZSBDT1VOVChfX29wKSBcCisgICAgICAgICAgICBzaXplICs9IG1fbWV0YWRhdGEtPm51
bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVF
X1BST0ZJTEUoQ09VTlQpCisjdW5kZWYgQ09VTlQKKyAgICAgICAgICAgIHNpemUgKz0gbV9tZXRh
ZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9yT3Blbj4oKSAqIDM7CisgICAgICAgICAgICBzaXpl
ICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BJdGVyYXRvck5leHQ+KCkgKiAzOworICAgICAg
ICB9CisKKworICAgICAgICBib29sIGRpZEFsbG9jYXRlID0gZmFsc2U7CisgICAgICAgIGlmICgh
dW5saW5rZWRDb2RlQmxvY2stPm1fdmFsdWVQcm9maWxlcy5zaXplKCkgJiYgc2l6ZSkgeworICAg
ICAgICAgICAgdW5saW5rZWRDb2RlQmxvY2stPm1fdmFsdWVQcm9maWxlcyA9IEZpeGVkVmVjdG9y
PFZhbHVlUHJvZmlsZT4oc2l6ZSk7CisgICAgICAgICAgICBkaWRBbGxvY2F0ZSA9IHRydWU7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
UGFyYW1ldGVycygpOyArK2kpCisgICAgICAgICAgICAgICAgdmFsdWVQcm9maWxlRm9yQXJndW1l
bnQoaSkuY2xlYXJCdWNrZXRzKCk7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCk7IC8vIFRoZSBmaXJzdCBudW1iZXJP
ZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHByb2ZpbGVzIGFyZSBhcmd1bWVudCB2YWx1ZSBwcm9m
aWxlcworCisgICAgICAgIGlmIChtX21ldGFkYXRhKSB7CisgICAgICAgICAgICBhdXRvIGFzc2ln
biA9IFsmXSAoVmFsdWVQcm9maWxlKiYgcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIHByb2Zp
bGUgPSAmdW5saW5rZWRDb2RlQmxvY2stPm1fdmFsdWVQcm9maWxlc1tpbmRleCsrXTsKKworICAg
ICAgICAgICAgICAgIGlmICghZGlkQWxsb2NhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
VGhlc2UgY291bGQgYmUgc3RhbGUsIHNvIGNsZWFyICdlbSBvdXQuCisgICAgICAgICAgICAgICAg
ICAgIC8vIE9PUFM6IG1ha2UgdGhpcyBjbGVhbmVyLiBNYXliZSBmaW5hbGl6ZSBpbiBVbmxpbmtl
ZENvZGVCbG9jaz8KKyAgICAgICAgICAgICAgICAgICAgcHJvZmlsZS0+Y2xlYXJCdWNrZXRzKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworI2RlZmluZSBWSVNJVChfX29w
KSBcCisgICAgICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0
YWRhdGEpIHsgYXNzaWduKG1ldGFkYXRhLm1fcHJvZmlsZSk7IH0pOworICAgICAgICAgICAgRk9S
X0VBQ0hfT1BDT0RFX1dJVEhfVkFMVUVfUFJPRklMRShWSVNJVCkKKyN1bmRlZiBWSVNJVAorCisg
ICAgICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wSXRlcmF0b3JPcGVuPihbJl0gKGF1dG8m
IG1ldGFkYXRhKSB7IAorICAgICAgICAgICAgICAgIGFzc2lnbihtZXRhZGF0YS5tX2l0ZXJhYmxl
UHJvZmlsZSk7CisgICAgICAgICAgICAgICAgYXNzaWduKG1ldGFkYXRhLm1faXRlcmF0b3JQcm9m
aWxlKTsKKyAgICAgICAgICAgICAgICBhc3NpZ24obWV0YWRhdGEubV9uZXh0UHJvZmlsZSk7Cisg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEl0ZXJh
dG9yTmV4dD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeworICAgICAgICAgICAgICAgIGFzc2lnbiht
ZXRhZGF0YS5tX25leHRSZXN1bHRQcm9maWxlKTsKKyAgICAgICAgICAgICAgICBhc3NpZ24obWV0
YWRhdGEubV9kb25lUHJvZmlsZSk7CisgICAgICAgICAgICAgICAgYXNzaWduKG1ldGFkYXRhLm1f
dmFsdWVQcm9maWxlKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIH0KKworICAgICAgICBS
RUxFQVNFX0FTU0VSVChpbmRleCA9PSBzaXplKTsKKyAgICB9CisKICAgICBpZiAobV91bmxpbmtl
ZENvZGUtPndhc0NvbXBpbGVkV2l0aENvbnRyb2xGbG93UHJvZmlsZXJPcGNvZGVzKCkpCiAgICAg
ICAgIGluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcigpOwog
CkBAIC03NjgsNyArODQ1LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgUwogICAgIC8vIHJlbHkgb24gdGhlIGluc3RydWN0aW9uIGNvdW50IChhbmQgYXJlIGluIHRo
ZW9yeSBwZXJtaXR0ZWQgdG8gYWxzbyBpbnNwZWN0IHRoZQogICAgIC8vIGluc3RydWN0aW9uIHN0
cmVhbSB0byBtb3JlIGFjY3VyYXRlIGFzc2VzcyB0aGUgY29zdCBvZiB0aWVyLXVwKS4KICAgICBv
cHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKKyAgICAvL2ppdEFm
dGVyV2FybVVwKCk7CiAKICAgICAvLyBJZiB0aGUgY29uY3VycmVudCB0aHJlYWQgd2lsbCB3YW50
IHRoZSBjb2RlIGJsb2NrJ3MgaGFzaCwgdGhlbiBjb21wdXRlIGl0IGhlcmUKICAgICAvLyBzeW5j
aHJvbm91c2x5LgpAQCAtNzg5LDYgKzg2Niw3NyBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb25Db21tb24oVk0mCiAgICAgbV9vd25lckVkZ2Uuc2V0KHZtLCB0aGlzLCBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlOjpjcmVhdGUodm0sIHRoaXMpKTsKIH0KIAordm9pZCBDb2RlQmxvY2s6
OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENv
ZGUpCit7CisgICAgc2V0SklUQ29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAg
ICAgIGNvbnN0IGF1dG8mIGppdENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kp
IHsKKyAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihp
KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAg
ICAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5k
ZXgoaGFuZGxlci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tl
cik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5p
c0VtcHR5KCkpOworICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0
b3I8dm9pZCo+KGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsK
KyAgICAgICAgICAgIHN3aXRjaCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRD
b25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRh
Lm1faml0Q29uc3RhbnRQb29sW2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2Fs
bExpbmtJbmZvOiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlu
a2VkQ2FsbExpbmtJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50
cnkucGF5bG9hZCk7CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
PSBqaXREYXRhLm1fY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5r
SW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgLy8gT09QUzogZG9uJ3QgaGFy
ZGNvZGUgdGhlc2UgcmVnaXN0ZXJzIGxpa2UgdGhpcy4KKyAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPmluaXRpYWxpemVEYXRhSUModm0oKSwgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUklu
Zm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2pp
dENvbnN0YW50UG9vbFtpXSA9IGNhbGxMaW5rSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbzogeworICAgICAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8mIHVubGlua2VkU3R1YkluZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyo+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IGppdERhdGEubV9zdHViSW5mb3MuYWRkKHVubGlua2VkU3R1YkluZm8u
YWNjZXNzVHlwZSwgQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpKTsK
KyAgICAgICAgICAgICAgICBzdHViSW5mby0+aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKHRoaXMsIHVubGlua2VkU3R1YkluZm8pOworICAgICAgICAgICAgICAgIGppdERh
dGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBzdHViSW5mbzsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpGdW5jdGlvbkRlY2w6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAgICAgIGppdERh
dGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkRlY2woaW5kZXgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwcjogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZCk7CisgICAgICAgICAg
ICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIEds
b2JhbENvZGU6CisgICAgY2FzZSBNb2R1bGVDb2RlOgorICAgIGNhc2UgRXZhbENvZGU6CisgICAg
ICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRnVuY3Rpb25Db2RlOgorICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0
IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCisg
ICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRpb24uCisgICAgICAgIG1fc2hv
dWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwoKSkgJiYgREZH
OjptaWdodElubGluZUZ1bmN0aW9uKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBpZiAoT3B0aW9uczo6dXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZygpKQorICAgICAgICB1bmxp
bmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlID0gV1RGTW92ZShqaXRDb2Rl
KTsKK30KKwogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsK
QEAgLTkyOCw4ICsxMDc2LDYgQEAgdm9pZCBDb2RlQmxvY2s6OnNldEFsdGVybmF0aXZlKFZNJiB2
bSwgQwogdm9pZCBDb2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnModW5zaWduZWQgbmV3VmFsdWUp
CiB7CiAgICAgbV9udW1QYXJhbWV0ZXJzID0gbmV3VmFsdWU7Ci0KLSAgICBtX2FyZ3VtZW50VmFs
dWVQcm9maWxlcyA9IEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT4oT3B0aW9uczo6dXNlSklUKCkg
PyBuZXdWYWx1ZSA6IDApOwogfQogCiBDb2RlQmxvY2sqIENvZGVCbG9jazo6c3BlY2lhbE9TUkVu
dHJ5QmxvY2tPck51bGwoKQpAQCAtMTUxOSwzOSArMTY2NSw0MCBAQCB2b2lkIENvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwog
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29sIGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9
IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwotICAgIG1faXNFbGlnaWJsZUZvckxMSW50
RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhl
Y3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAot
ICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBj
b2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAh
bV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAm
JiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkg
ewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9v
c3JFeGl0Q291bnRlcikgewotICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnRE
b3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKLSAg
ICAgICAgICAgICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7Ci0gICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
dW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5k
bGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9u
SGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9
ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENv
ZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRj
aChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKLQotICAgICAgICAg
ICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBp
biBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwotICAgICAgICAg
ICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVp
dGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKLSAgICAg
ICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50
aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgotICAgICAgICAgICAgICAgICAgICByZXNldEpJ
VERhdGEoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9p
c0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0jZW5kaWYKKy8vIE9PUFM6IHJlY29uY2lsZSB0aGlzCisvLyNpZiBFTkFC
TEUoSklUKQorLy8gICAgYm9vbCBpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBtX2lzRWxp
Z2libGVGb3JMTEludERvd25ncmFkZTsKKy8vICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdy
YWRlID0gZmFsc2U7CisvLyAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBleGVjdXRp
bmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0CisvLyAg
ICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFuZCByZWluc3RhbGwgTExJbnQgY29k
ZSB0byBzYXZlIEpJVCBtZW1vcnkuCisvLyAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAh
bV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAm
JiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkg
eworLy8gICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXpl
ZFJlcGxhY2VtZW50KCkpIHsKKy8vICAgICAgICAgICAgaWYgKCFvcHRpbWl6ZWRDb2RlQmxvY2st
Pm1fb3NyRXhpdENvdW50ZXIpIHsKKy8vICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9y
TExJbnREb3duZ3JhZGUpIHsKKy8vICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGUgPSBudWxs
cHRyOworLy8gICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRyeXBvaW50KHRoaXMpOwor
Ly8gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBl
OjpJbnRlcnByZXRlclRodW5rKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygp
OyBpKyspIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVy
SW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIo
aSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9y
YXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKKy8vICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVy
LnRhcmdldCkucHRyKCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlh
bGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsK
Ky8vICAgICAgICAgICAgICAgICAgICB9CisvLworLy8gICAgICAgICAgICAgICAgICAgIHVubGlu
a0luY29taW5nQ2FsbHMoKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBzYWZl
IHRvIGNsZWFyIHRoZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkgYWxsIGNvbXBpbGVyIHRocmVhZHMKKy8vICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2Fm
ZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIg
Ynl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKKy8vICAgICAgICAgICAgICAgICAgICAvLyBw
YXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0aGUgdmFyaW91
cyAqaW5mb3MuCisvLyAgICAgICAgICAgICAgICAgICAgcmVzZXRKSVREYXRhKCk7CisvLyAgICAg
ICAgICAgICAgICB9IGVsc2UKKy8vICAgICAgICAgICAgICAgICAgICBtX2lzRWxpZ2libGVGb3JM
TEludERvd25ncmFkZSA9IHRydWU7CisvLyAgICAgICAgICAgIH0KKy8vICAgICAgICB9CisvLyAg
ICB9CisvLworLy8jZW5kaWYKICAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJl
dGVkKGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKQEAg
LTE1NzksNyArMTcyNiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgKICAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6Ci0gICAgICAgICAg
ICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOworICAgICAgICAgICAgY291
bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNvdW50KCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIGNvdW50ID0g
bV9qaXRFeGVjdXRlQ291bnRlci5jb3VudCgpOwpAQCAtMzA3OSw3ICszMjI2LDcgQEAgdW5zaWdu
ZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJl
Z2lzdGVyQ291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJD
b3VudEZvcih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMTY0LDcgKzMzMTEsNyBAQCBWYWx1ZVByb2Zp
bGUqIENvZGVCbG9jazo6dHJ5R2V0VmFsdWVQcm9mCiAKICNkZWZpbmUgQ0FTRShPcCkgXAogICAg
IGNhc2UgT3A6Om9wY29kZUlEOiBcCi0gICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9w
PigpLm1ldGFkYXRhKHRoaXMpLm1fcHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9u
LT5hczxPcD4oKS5tZXRhZGF0YSh0aGlzKS5tX3Byb2ZpbGU7CiAKICAgICAgICAgRk9SX0VBQ0hf
T1BDT0RFX1dJVEhfVkFMVUVfUFJPRklMRShDQVNFKQogCkBAIC0zMjk1LDEzICszNDQyLDEzIEBA
IEJpbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2gg
KHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNh
c2Ugb3BfbXVsOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJu
ICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTMzMTMsMTEgKzM0NjAsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6dW5hcnlBcml0aAogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGNhc2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0zNDY3LDI4ICszNjE0LDE5IEBAIHN0ZDo6b3B0aW9uYWw8
Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKIH0K
IAotaW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkK
LXsKLSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXplKCkpIHsKLSAg
ICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xk
OwotICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkICog
NDsKLSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8g
MjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRocmVzaG9s
ZDsKLX0KKy8vdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkKKy8veworLy8gICAgbV9s
bGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlv
bnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKKy8vfQogCi12b2lkIENv
ZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBDb2RlQmxvY2s6OmppdFNvb24oKQogewot
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklU
KE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKKyAgICBtX2xs
aW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCh1bmxpbmtlZENvZGVCbG9jaygpLT50
aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7CiB9
CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXROZXh0SW52
b2NhdGlvbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0
aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7Cisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAK
IGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcgQEAgY2xhc3MgTWV0YWRhdGFUYWJsZTsKIGNs
YXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBjbGFz
cyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAogREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEpOwogCkBAIC0x
NTgsNyArMTU5LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUo
KSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1Q
YXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgog
ICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAK
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1f
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE3MCw2IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAg
dW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVj
a3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRy
ZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBh
bHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0
ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzNCw2IEBAIHB1YmxpYzoKICAgICBib29s
IGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxs
Vk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1
YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5n
IGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBg
dGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAgICBy
ZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2
Niw4ICsyNTgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNN
YXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3ZlIGFy
aXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLCBhbmQgb250byBKSVRD
b2RlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
CiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgICAgIEJh
ZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CkBAIC0yODIsOSArMjc2LDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFw
OwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAg
ICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAg
SklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1f
aml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29u
c3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3Rh
bnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVD
b2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElL
RUxZKG1faml0RGF0YSkpCkBAIC0yOTMsNiArMjkxLDggQEAgcHVibGljOgogICAgIH0KICAgICBK
SVREYXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVREYXRhKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9qaXREYXRhKTsgfQorCiAgICAgSklUQWRkSUMqIGFkZEpJVEFk
ZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwogICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5h
cnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFBy
b2ZpbGUqKTsKQEAgLTMyMiwxNiArMzIyLDcgQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9y
IGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4K
ICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNv
ZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRD
b2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShq
aXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0g
ICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAg
IHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBj
b25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKICAgICB2b2lkIHNldFBDVG9Db2RlT3Jp
Z2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpv
cHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwpAQCAtNDc0LDE1ICs0NjUsMTYg
QEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMo
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9udW1QYXJhbWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNl
SklUKCkpOwotICAgICAgICByZXR1cm4gbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpOwor
ICAgICAgICAvLyBPT1BTOiBicmluZyB0aGlzIGJhY2ssIGJ1dCByZXF1aXJlcyBMTEludCBjaGFu
Z2VzLgorICAgICAgICAvL3JldHVybiBPcHRpb25zOjp1c2VKSVQoKSA/IG51bVBhcmFtZXRlcnMo
KSA6IDA7CisgICAgICAgIHJldHVybiBudW1QYXJhbWV0ZXJzKCk7CiAgICAgfQogCiAgICAgVmFs
dWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudEluZGV4
KQogICAgIHsKICAgICAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsgLy8gVGhpcyBpcyBv
bmx5IGNhbGxlZCBmcm9tIHRoZSB2YXJpb3VzIEpJVCBjb21waWxlcnMgb3IgcGxhY2VzIHRoYXQg
Zmlyc3QgY2hlY2sgbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMgYmVmb3JlIGNhbGxpbmcg
dGhpcy4KLSAgICAgICAgVmFsdWVQcm9maWxlJiByZXN1bHQgPSBtX2FyZ3VtZW50VmFsdWVQcm9m
aWxlc1thcmd1bWVudEluZGV4XTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoYXJndW1lbnRJbmRleCA8IG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVz
KCkpOworICAgICAgICByZXR1cm4gdW5saW5rZWRDb2RlQmxvY2soKS0+bV92YWx1ZVByb2ZpbGVz
W2FyZ3VtZW50SW5kZXhdOwogICAgIH0KIAogICAgIFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxl
Rm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKQEAgLTU3Miw2ICs1NjQsNyBAQCBwdWJs
aWM6CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3Rl
ciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJ
bmRleCgpXS5nZXQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcp
IGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbihyZWcpOyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24odW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bihpbmRleCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29uc3RhbnRzVmVjdG9y
QnVmZmVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9jb25zdGFudFJl
Z2lzdGVycykgKyBkZWNsdHlwZShtX2NvbnN0YW50UmVnaXN0ZXJzKTo6ZGF0YU1lbW9yeU9mZnNl
dCgpOyB9CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgp
IHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBpbnQgbnVtYmVy
T2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQpAQCAt
NjAxLDYgKzU5NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0
YSk7CiAgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsKICAgICB9CisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJs
ZShpbnQgdGFibGVJbmRleCk7CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFudFBvb2woKQor
ICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhICYmIGppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1faml0Q29u
c3RhbnRQb29sLmRhdGEoKTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxp
bmtlZFN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVt
YmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2VkU2lt
cGxlSnVtcFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OyB9CkBAIC02MTEsNiArNjEwLDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X2ppdERhdGEpOwogICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07CiAgICAgfQorICAgIFN0cmluZ0p1bXBUYWJsZSYgYmFzZWxpbmVT
dHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOwogI2VuZGlmCiAgICAgc2l6ZV90
IG51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4g
bV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7
IH0KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNjMzLDIxICs2MzMs
MjAgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpCiAg
ICAgewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNoZWNrSWZUaHJlc2hv
bGRDcm9zc2VkQW5kU2V0KHRoaXMpOworICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3Vu
dGVyLT5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKICAgICB9CiAKICAgICB2
b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCiAgICAgewotICAgICAgICBtX2xsaW50RXhlY3V0ZUNv
dW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVy
LT5kZWZlckluZGVmaW5pdGVseSgpOwogICAgIH0KIAotICAgIGludDMyX3QgdGhyZXNob2xkRm9y
SklUKGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2FybVVwKCk7CiAgICAg
dm9pZCBqaXRTb29uKCk7CisgICAgdm9pZCBqaXROZXh0SW52b2NhdGlvbigpOwogCiAgICAgY29u
c3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAgICAgIHJl
dHVybiAqbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIH0KIAogICAgIHR5cGVkZWYgSGFzaE1h
cDxzdGQ6OnR1cGxlPFN0cnVjdHVyZUlELCB1bnNpZ25lZD4sIEZpeGVkVmVjdG9yPExMSW50UHJv
dG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVjdHVyZVdhdGNocG9p
bnRNYXA7CkBAIC03OTcsNiArNzk2LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNEZWJ1Z2dl
clJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CiAgICAgdm9p
ZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1Z2dlclJlcXVlc3Rz
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVxdWVzdHMpOyB9CiAK
ICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpOwogICAgIHZv
aWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykKQEAgLTgzOCw2ICs4
MzgsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKIAog
ICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJpdGZpZWxkIGJlY2F1
c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBFTkFCTEUoSklUKQog
ICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBERkc6OkNhcGFiaWxp
dHlMZXZlbApAQCAtOTA2LDExICs5MDcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX21ldGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0cnVj
dGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9p
bnN0cnVjdGlvbnNSYXdQb2ludGVyKTsgfQogCi0gICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJs
ZUZvckZ1enppbmdFYXJseVJldHVybigpCi0gICAgewotICAgICAgICAvLyBTb21lIGJ1aWx0aW5z
IGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRoZXkgcnVuLgotICAg
ICAgICByZXR1cm4gIW1fdW5saW5rZWRDb2RlLT5pc0J1aWx0aW5GdW5jdGlvbigpOwotICAgIH0K
KyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluYWxpemVMTEludElubGluZUNh
Y2hlcygpOwpAQCAtMTAwOCwxNCArMTAwNSwxNSBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZVdh
dGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwogICAgIFJlZlB0cjxKSVRD
b2RlPiBtX2ppdENvZGU7CiAjaWYgRU5BQkxFKEpJVCkKK3B1YmxpYzoKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SklURGF0YT4gbV9qaXREYXRhOworcHJpdmF0ZToKICNlbmRpZgogI2lmIEVOQUJMRShE
RkdfSklUKQogICAgIC8vIFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0
aGF0IHNlcnZlIGFzIHRoZSBwcm9maWxlZCBjb2RlIGJsb2NrCiAgICAgLy8gZm9yIERGRyBjb2Rl
IGJsb2Nrcy4KICAgICBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXIgbV9s
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZXM7CiAjZW5kaWYKLSAgICBGaXhlZFZlY3RvcjxWYWx1ZVBy
b2ZpbGU+IG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzOwogCiAgICAgLy8gQ29uc3RhbnQgUG9vbAog
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWdpc3RlcikgPT0gc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPiksIFJlZ2lzdGVyX211c3RfYmVfc2FtZV9zaXplX2FzX1dyaXRlQmFycmllcl9V
bmtub3duKTsKQEAgLTEwMjcsNyArMTAyNSw3IEBAIHByaXZhdGU6CiAKICAgICBXcml0ZUJhcnJp
ZXI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOwogICAgIAotICAgIEJhc2VsaW5lRXhlY3V0aW9u
Q291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3Vu
dGVyKiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgeyBudWxscHRyIH07CiAKICAgICBCYXNlbGluZUV4
ZWN1dGlvbkNvdW50ZXIgbV9qaXRFeGVjdXRlQ291bnRlcjsKICAgICB1aW50MzJfdCBtX29zckV4
aXRDb3VudGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
a0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgi
CiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5oIgpAQCAtMzksMjUgKzQwLDIy
IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKIAogICAgIGlmICht
X21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKLSAgICAgICAgbV9tZXRhZGF0YS0+
Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9wcm9m
aWxlLCBmYWxzZSk7IH0pOwotCisgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZd
IChhdXRvJiBtZXRhZGF0YSkgeyBmdW5jKCptZXRhZGF0YS5tX3Byb2ZpbGUsIGZhbHNlKTsgfSk7
CiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJTEUoVklTSVQpCi0KICN1
bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck9wZW4+
KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCi0gICAgICAgICAgICBmdW5jKG1ldGFkYXRhLm1faXRl
cmFibGVQcm9maWxlLCBmYWxzZSk7Ci0gICAgICAgICAgICBmdW5jKG1ldGFkYXRhLm1faXRlcmF0
b3JQcm9maWxlLCBmYWxzZSk7Ci0gICAgICAgICAgICBmdW5jKG1ldGFkYXRhLm1fbmV4dFByb2Zp
bGUsIGZhbHNlKTsKKyAgICAgICAgICAgIGZ1bmMoKm1ldGFkYXRhLm1faXRlcmFibGVQcm9maWxl
LCBmYWxzZSk7CisgICAgICAgICAgICBmdW5jKCptZXRhZGF0YS5tX2l0ZXJhdG9yUHJvZmlsZSwg
ZmFsc2UpOworICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEubV9uZXh0UHJvZmlsZSwgZmFsc2Up
OwogICAgICAgICB9KTsKIAogICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wSXRlcmF0b3JO
ZXh0PihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7Ci0gICAgICAgICAgICBmdW5jKG1ldGFkYXRhLm1f
bmV4dFJlc3VsdFByb2ZpbGUsIGZhbHNlKTsKLSAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV9k
b25lUHJvZmlsZSwgZmFsc2UpOwotICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJv
ZmlsZSwgZmFsc2UpOworICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEubV9uZXh0UmVzdWx0UHJv
ZmlsZSwgZmFsc2UpOworICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEubV9kb25lUHJvZmlsZSwg
ZmFsc2UpOworICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNl
KTsKICAgICAgICAgfSk7CiAgICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+CkBAIC0xMjYsNCArMTI0LDI0IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoTExJbnRDYWxs
TGlua0luZm8KICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoSklUKQorQUxXQVlTX0lOTElORSBjb25z
dCBKSVRDb2RlTWFwJiBDb2RlQmxvY2s6OmppdENvZGVNYXAoKQoreworICAgIEFTU0VSVChqaXRU
eXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxC
YXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVNYXA7Cit9CisKK0FM
V0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5lU3dpdGNoSnVt
cFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUq
PihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisK
K0FMV0FZU19JTkxJTkUgU3RyaW5nSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5lU3RyaW5n
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGlu
ZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2Rl
QmxvY2tFZGdlLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcw
LDYgKzcwLDggQEAgcHVibGljOgogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
KiB3cmFwKENvZGVCbG9jayogY29kZUJsb2NrKTsKICAgICAKICAgICBzdGF0aWMgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZSogd3JhcEFuZEFjdGl2YXRlKENvZGVCbG9jayogY29kZUJsb2NrKTsK
KworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2soKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSwgbV9jb2RlQmxvY2spOyB9CiAg
ICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNv
dW50ZXIuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTks
NyBAQCBib29sIEV4ZWN1dGlvbkNvdW50ZXI8Y291bnRpbmdWYXJpYW50Pjo6CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQoY29k
ZUJsb2NrID8gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSA6IG51bGxwdHIsIHRocmVzaG9sZCk7
CisgICAgdGhyZXNob2xkID0gY2xpcHBlZFRocmVzaG9sZCh0aHJlc2hvbGQpOwogICAgIAogICAg
IG1fY291bnRlciA9IHN0YXRpY19jYXN0PGludDMyX3Q+KC10aHJlc2hvbGQpOwogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNv
dW50ZXIuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBmb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7IC8vIElmIHlvdSB1
c2UgdGhpcywgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoKSBtYXkgc3RpbGwgcmV0dXJu
IGZhbHNlLgogICAgIGJvb2wgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoQ29kZUJsb2Nr
Kik7CiAgICAgYm9vbCBoYXNDcm9zc2VkVGhyZXNob2xkKCkgY29uc3QgeyByZXR1cm4gbV9jb3Vu
dGVyID49IDA7IH0KLSAgICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwg
Q29kZUJsb2NrKik7CisgICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQs
IENvZGVCbG9jayogPSBudWxscHRyKTsKICAgICB2b2lkIGRlZmVySW5kZWZpbml0ZWx5KCk7CiAg
ICAgZG91YmxlIGNvdW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3Rv
dGFsQ291bnQpICsgbV9jb3VudGVyOyB9CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CkBAIC04NiwxMyArODYsOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBUIHRocmVzaG9sZCkKKyAgICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNo
b2xkKFQgdGhyZXNob2xkKQogICAgIHsKLSAgICAgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQ7Ci0g
ICAgICAgIGlmIChPcHRpb25zOjpyYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2tw
b2ludHMoKSAmJiBnbG9iYWxPYmplY3QpCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBnbG9i
YWxPYmplY3QtPndlYWtSYW5kb21JbnRlZ2VyKCkgJSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0
d2VlbkNoZWNrcG9pbnRzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1heFRocmVzaG9s
ZCA9IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKTsKKyAgICAgICAg
aW50MzJfdCBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNr
cG9pbnRzKCk7CiAgICAgICAgIGlmICh0aHJlc2hvbGQgPiBtYXhUaHJlc2hvbGQpCiAgICAgICAg
ICAgICB0aHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7CiAgICAgICAgIHJldHVybiB0aHJlc2hvbGQ7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRh
ZGF0YS5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgc3Rh
dGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YQogCiBzdHJ1Y3QgR2V0QnlJZE1v
ZGVNZXRhZGF0YUFycmF5TGVuZ3RoIHsKICAgICBBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlOwor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBhcnJheVByb2ZpbGUp
OyB9CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVu
Z3RoKSA9PSAxMik7CiAKQEAgLTg4LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0
YSB7CiAgICAgICAgIEdldEJ5SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRG
b3JMTEludENhY2hpbmc7IC8vIFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9h
ZCBtb2RlLgogICAgIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBH
ZXRCeUlkTW9kZU1ldGFkYXRhRGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1l
dGFkYXRhVW5zZXQgdW5zZXRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0
aCBhcnJheUxlbmd0aE1vZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
NSw2ICszODUsOCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoCiAg
ICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKKy8vIE9PUFM6IE1ha2UgdGhpcyBzdHVm
ZiB3b3JrIHdpdGggZGF0YSBpY3MgdG8gbm90IGFzc3VtZSBpbmxpbmUgYWNjZXNzLgorCiB2b2lk
IElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nl
c3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHRhcmdldCkKIHsKICAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewpAQCAtNDA0LDkgKzQwNiwxMiBAQCB2b2lkIElubGlu
ZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJn
ZXQpCiB7CiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gT09Q
UzogbWFrZSBzb21lIHZlcnNpb24gb2YgSW5saW5lQWNjZXNzIGZvciBiYXNlbGluZS4gUGVyaGFw
cyBtYWtlIGl0IGRhdGEgZHJpdmVuLiBPciBwZXJoYXBzIGhhdmUgdGhlIGNvZGUKKyAgICAgICAg
Ly8gYmUgc2hhcmVkIHNvbWVob3cgYmV0d2VlbiBVbmxpbmtlZENvZGVCbG9ja3MuCisKICAgICAg
ICAgLy8gSWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9w
IHNsZWQgKGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFu
IGluZGlyZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcg
bV9jb2RlUHRyLgotICAgICAgICBpZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7
CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCAmJiBzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElm
IG1fY29kZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24s
IHRoaXMgbWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAg
ICAgICAgICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNo
aW5nIGNvZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBj
b2RlLgogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVz
cygpID09IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygp
KSB7CkBAIC00MjEsNiArNDI2LDcgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1
bXBJbkFjYwogICAgICAgICAgICAgICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5raW5nIHN0dWIg
Y2FsbCIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgc3R1YkluZm8ubV9j
b2RlUHRyID0gdGFyZ2V0OwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEu
aAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0
ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIE9W
RVJMT0FEX0JJVFdJU0VfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0IEl0ZXJhdGlv
bk1vZGVNZXRhZGF0YSB7CiAgICAgdWludDhfdCBzZWVuTW9kZXMgeyAwIH07CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZlNlZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJ
dGVyYXRpb25Nb2RlTWV0YWRhdGEsIHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGljX2Fzc2VydChz
aXplb2YoZGVjbHR5cGUoc2Vlbk1vZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1vZGUpKTsKIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENh
bGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcs
NyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOwor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoTExJbnRDYWxsTGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQogCiBwcml2
YXRlOgogICAgIHVpbnRwdHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7
IHVubGlua2VkQml0IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0
YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9NZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYx
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZ1bmMoKm1ldGFkYXRhKTsKICAgICB9CiAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBudW1FbnRy
aWVzKCkKKyAgICB7CisgICAgICAgIGF1dG8qIHN0YXJ0ID0gYml0d2lzZV9jYXN0PHR5cGVuYW1l
IE9wOjpNZXRhZGF0YSo+KGdldChPcDo6b3Bjb2RlSUQpKTsKKyAgICAgICAgYXV0byogZW5kID0g
Yml0d2lzZV9jYXN0PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdldEltcGwoT3A6Om9wY29kZUlE
ICsgMSkpOworICAgICAgICByZXR1cm4gZW5kIC0gc3RhcnQ7CisgICAgfQorCiAgICAgc2l6ZV90
IHNpemVJbkJ5dGVzKCk7CiAKICAgICB2b2lkIHJlZigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9u
IDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJTdHJ1
Y3R1cmVTdHViSW5mby5oIgogCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMu
aCIKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIlBvbHlt
b3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogCkBAIC0yODUsNiArMjg2LDcg
QEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgICAgICByZXNl
dFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQ
dXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRC
eUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5
SWQ6CkBAIC00MzAsNiArNDMyLDIwNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3ZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhD
b2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvKQor
eworICAgIGFjY2Vzc1R5cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3Rh
cnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0YXJ0OyAvLyBPT1BTOiBkbyB3ZSBuZWVkIGEgc3RhcnQg
Zm9yIGRhdGEgSUNzPworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxv
Y2F0aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xv
d1BhdGhTdGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KEJ5
dGVjb2RlSW5kZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNldCgpKSk7Cisg
ICAgY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4
KTsKKyAgICBtX2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICB1c2VkUmVn
aXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIGlm
IChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4
dCwgd2UgY2FuJ3QgY2xvYmJlciB0aGUgc2NyYXRjaCByZWdpc3RlciBlaXRoZXIuCisgICAgICAg
IHVzZWRSZWdpc3RlcnMuYWRkKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaCk7Cisg
ICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpE
ZWxldGVCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlW
YWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVC
eUlEOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1p
emU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJ
ZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAgIG1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOiAKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBzd2l0Y2gg
KHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERp
cmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0
KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1
bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0
QnlWYWw6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1
YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpE
aXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmlj
dCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSB1bmxpbmtlZFN0dWJJbmZvLnByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSA/IG9w
ZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRC
eVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVs
ZXRlQnlWYWw6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVn
cy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAg
ICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAg
ICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGlu
ZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBJbnZh
bGlkR1BSUmVnOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZh
bDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25z
dGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBm
YWxzZTsKKyAgICAgICAgcHJvdG90eXBlSXNLbm93bk9iamVjdCA9IGZhbHNlOworICAgICAgICBi
YXNlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgdmFs
dWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVn
cy5wcm90b3R5cGVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgIGNh
c2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFz
UHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7Cisg
ICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAg
IHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5Owor
ICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFs
aWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0
QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVn
cy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVl
OworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OnJlc3VsdDsKKyAgICAgICAgcmVncy50aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0
QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0
cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNl
R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9
IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJp
dmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVn
cy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAg
ICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgICAg
ICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87Cisg
ICAgICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsKQorICAgICAgICAg
ICAgbV9hcnJheVByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBoYXNDb25z
dGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVn
OworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7
CisgICAgICAgIHJlZ3MuYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6
YnJhbmQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogI2lmIEFTU0VSVF9F
TkFCTEVECiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIK
ICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUgIlJl
Z2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
U2V0LmgiCkBAIC01Niw2ICs1Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7
CiAgICAgR2V0QnlWYWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2
YXRlTmFtZSwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwK
QEAgLTc4LDYgKzgwLDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0
cmluZ0xlbmd0aAogfTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1
cmVTdHViSW5mbyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDIs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwog
CisgICAgdm9pZCBpbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJs
b2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9B
R0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2Vz
IHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTQ0
Nyw2ICs0NTMsMTggQEAgaW5saW5lIGF1dG8gYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bgog
ICAgIH0KIH0KIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8geworICAgIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQ7CisgICAgUHJpdmF0ZUZpZWxk
UHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kIHsgUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgp
IH07CisgICAgRUNNQU1vZGUgZWNtYU1vZGUgeyBFQ01BTW9kZTo6c2xvcHB5KCkgfTsKKyAgICBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgLy8gT09QUzogRG8gd2UgbmVlZCBzdGFy
dCBmb3IgZGF0YSBJQ3M/CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IHN0YXJ0OyAvLyBUaGlzIGlzIGVpdGhlciB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJQyBm
b3IgKmJ5SWQgY2FjaGVzLiBvciB0aGUgbG9jYXRpb24gb2YgcGF0Y2hhYmxlIGp1bXAgZm9yICdp
bnN0YW5jZW9mJyBjYWNoZXMuCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gZG9uZUxvY2F0aW9uOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiBzbG93UGF0aFN0YXJ0TG9jYXRpb247Cit9OworCiAjZWxzZQogCiBjbGFzcyBTdHJ1Y3R1
cmVTdHViSW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNh
bXBsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dXBlclNhbXBsZXIuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQs
NyBAQCB2b2lkIHByaW50U3VwZXJTYW1wbGVyU3RhdGUoKQogICAgIGRvdWJsZSBwZXJjZW50YWdl
ID0gMTAwLjAgKiBpbiAvIChpbiArIG91dCk7CiAgICAgaWYgKHBlcmNlbnRhZ2UgIT0gcGVyY2Vu
dGFnZSkKICAgICAgICAgcGVyY2VudGFnZSA9IDAuMDsKLSAgICBkYXRhTG9nKCJQZXJjZW50IHRp
bWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIlxuIik7CisgICAg
ZGF0YUxvZygiUGVyY2VudCB0aW1lIGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNl
bnRhZ2UsICIlXG4iKTsKIH0KIAogdm9pZCBlbmFibGVTdXBlclNhbXBsZXIoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRD
b2RlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAi
Qnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCkBAIC03OCw2ICs3OSw4
IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSYKICAgICAgICAgY3Jl
YXRlUmFyZURhdGFJZk5lY2Vzc2FyeShsb2NrZXIpOwogICAgICAgICBtX3JhcmVEYXRhLT5tX3By
aXZhdGVCcmFuZFJlcXVpcmVtZW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByaXZhdGVCcmFu
ZFJlcXVpcmVtZW50OjpOZWVkZWQpOwogICAgIH0KKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRl
ci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJ
VEFmdGVyV2FybVVwKCkpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KQEAgLTMx
Niw0ICszMTksMzEgQEAgaW50IFVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2Zmcwog
ICAgIHJldHVybiBtX291dE9mTGluZUp1bXBUYXJnZXRzLmdldChieXRlY29kZU9mZnNldCk7CiB9
CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorYm9vbCBVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRlbnRp
ZmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIC8vIE9PUFM6IGRvIHdoYXQgQ29k
ZUJsb2NrIGRvZXMgYW5kIG1ha2UgYSBoYXNoIHRhYmxlPworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRp
ZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitpbnQzMl90IFVubGlua2VkQ29kZUJsb2Nr
Ojp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRP
cHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAg
cmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0
dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0
dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAko
cmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDExIEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVD
b252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkNvZGVUeXBlLmgiCiAjaW5jbHVkZSAiREZHRXhpdFBy
b2ZpbGUuaCIKKyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVkZSAiRXhwcmVz
c2lvblJhbmdlSW5mby5oIgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiSWRl
bnRpZmllci5oIgpAQCAtNjIsNiArNjQsNyBAQCBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKIGNs
YXNzIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworY2xhc3MgQmFzZWxp
bmVKSVRDb2RlOwogc3RydWN0IEV4ZWN1dGFibGVJbmZvOwogZW51bSBjbGFzcyBMaW5rVGltZUNv
bnN0YW50IDogaW50MzJfdDsKIApAQCAtMTc1LDYgKzE3OCw3IEBAIHB1YmxpYzoKIAogICAgIGNv
bnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJz
KCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIGNvbnN0IFdyaXRlQmFycmll
cjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHJlZykgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCld
OyB9CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3Rl
ciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJ
bmRleCgpXS5nZXQoKTsgfQogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1f
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKQEAgLTIwNyw2ICsyMTEsMTUg
QEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1vZGUpOyB9CiAK
ICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3Q7CisgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uQXQoQnl0ZWNvZGVJbmRleCBpbmRleCkgY29u
c3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5kZXgpLnB0cigpOyB9CisgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQorICAgIHsK
KyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5h
dCgwKS5wdHIoKTsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zRW5kID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihpbnN0cnVjdGlvbnNCZWdpbikgKyBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChpbnN0cnVjdGlvbiA+PSBpbnN0cnVjdGlvbnNCZWdpbiAmJiBpbnN0cnVj
dGlvbiA8IGluc3RydWN0aW9uc0VuZCk7CisgICAgICAgIHJldHVybiBpbnN0cnVjdGlvbiAtIGlu
c3RydWN0aW9uc0JlZ2luOworICAgIH0KKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbnNTaXplKCkg
Y29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyB9CiAKICAgICB1bnNpZ25lZCBu
dW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogICAg
IHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KQEAgLTMzNCw2
ICszNDcsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tZXRhZGF0YS0+c2l6ZUluQnl0
ZXMoKTsKICAgICB9CiAKKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vh
cmx5UmV0dXJuKCkKKyAgICB7CisgICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVk
IHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCisgICAgICAgIHJldHVybiAh
aXNCdWlsdGluRnVuY3Rpb24oKTsKKyAgICB9CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGJv
b2wgaGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOworI2VuZGlmCisKKyAgICBpbnQz
Ml90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7CiAKIHByb3RlY3RlZDoKICAg
ICBVbmxpbmtlZENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVj
dXRhYmxlSW5mbyYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+KTsKQEAgLTM5NCw2ICs0
MTgsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGV4aWNhbFNjb3BlRmVhdHVyZXMgOiA0
OwogcHVibGljOgogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOworICAgIFJlZlB0cjxCYXNl
bGluZUpJVENvZGU+IG1fdW5saW5rZWRCYXNlbGluZUNvZGU7CiBwcml2YXRlOgogICAgIENvZGVG
ZWF0dXJlcyBtX2ZlYXR1cmVzIHsgMCB9OwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9k
ZTsKQEAgLTQxMCw2ICs0MzUsOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnN0
cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVjdGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzczsKIAorICAgIC8vIE9PUFM6IGJpbmQgYSBi
ZXR0ZXIgcGxhY2UgdG8gc3RvcmUgdGhpcyBzdHVmZj8KKyAgICBWZWN0b3I8QmluYXJ5QXJpdGhQ
cm9maWxlPiBtX2JpbmFyeUFyaXRoUHJvZmlsZXM7CisgICAgVmVjdG9yPFVuYXJ5QXJpdGhQcm9m
aWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIERG
Rzo6RXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKQEAgLTQ1NSw2ICs0ODMsMzIgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24u
b2Zmc2V0KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0
cnVjdGlvbiogcGMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHRo
aXMtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZz
ZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRo
UHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2JpbmFyeUFyaXRo
UHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKEJp
bmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25l
ZCByZXN1bHQgPSBtX3VuYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fdW5hcnlB
cml0aFByb2ZpbGVzLmFwcGVuZChVbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGJpbmFyeUFyaXRoUHJv
ZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX2JpbmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KKyAg
ICBVbmFyeUFyaXRoUHJvZmlsZSYgdW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1
cm4gbV91bmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KKworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291
bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIHsgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRl
cjsgfQorCisgICAgRml4ZWRWZWN0b3I8VmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CiAK
IHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjIsNiArNTE2LDcgQEAgcHJpdmF0ZToK
ICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZlY3RvcjxFeHBy
ZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5lRXhlY3V0aW9u
Q291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAKIHByb3RlY3RlZDoKICAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4
MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
a0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKICAg
ICBib29sIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBt
X2NvZGVCbG9jay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9CiAgICAgYm9v
bCBoYXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5oYXNDaGVja3Bv
aW50cygpOyB9CiAgICAgYm9vbCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVC
bG9jay0+aGFzVGFpbENhbGxzKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2Zp
bGUoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCk7IH0KKyAg
ICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5h
ZGRVbmFyeUFyaXRoUHJvZmlsZSgpOyB9CiAKICAgICAvLyBVcGRhdGluZyBVbmxpbmtlZENvZGVC
bG9jay4KICAgICB2b2lkIHNldEhhc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFz
Q2hlY2twb2ludHMoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgyMDE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFVubGlua2VkTWV0YWRhdGFUYWJsZSk7CiAgICAgfQogCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIE9wY29kZT4KKyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGNvbnN0IE9wY29kZSYgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6
ZWQpOworICAgICAgICB1aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZz
ZXRUYWJsZTMyKClbT3Bjb2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpv
cGNvZGVJRF07CisgICAgICAgIHJldHVybiBiYXNlVHlwZU9mZnNldCArIHNpemVvZih0eXBlbmFt
ZSBPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7CisgICAgfQorCiBwcml2
YXRlOgogICAgIGVudW0gRW1wdHlUYWcgeyBFbXB0eSB9OwogCkBAIC0xMDEsNiArMTA5LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisK
ICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWlu
dDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2Zp
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQ
cm9maWxlLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDExIEBAIHRl
bXBsYXRlPHVuc2lnbmVkIG51bWJlck9mQnVja2V0c0FyZ3VtZW4KIHN0cnVjdCBWYWx1ZVByb2Zp
bGVCYXNlIHsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mQnVja2V0cyA9
IG51bWJlck9mQnVja2V0c0FyZ3VtZW50OwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
bnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHMgPSAxOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgYnVja2V0SW5kZXhNYXNrID0gbnVtYmVyT2ZCdWNrZXRzIC0gMTsKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRzICsg
bnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHM7CiAgICAgCiAgICAgVmFsdWVQcm9maWxlQmFzZSgpCiAg
ICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tl
dHM7ICsraSkKLSAgICAgICAgICAgIG1fYnVja2V0c1tpXSA9IEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOworICAgICAgICBjbGVhckJ1Y2tldHMoKTsKICAgICB9CiAgICAgCiAgICAgRW5jb2Rl
ZEpTVmFsdWUqIHNwZWNGYWlsQnVja2V0KHVuc2lnbmVkIGkpCkBAIC01NCw2ICs1MiwxMiBAQCBz
dHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIEFTU0VSVChudW1iZXJPZkJ1Y2tldHMg
KyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHMpOwogICAgICAgICByZXR1cm4gbV9idWNrZXRzICsg
bnVtYmVyT2ZCdWNrZXRzICsgaTsKICAgICB9CisKKyAgICB2b2lkIGNsZWFyQnVja2V0cygpCisg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tl
dHM7ICsraSkKKyAgICAgICAgICAgIG1fYnVja2V0c1tpXSA9IEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOworICAgIH0KICAgICAKICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyh1bnNp
Z25lZCBidWNrZXQpIGNvbnN0CiAgICAgewpAQCAtMTE4LDggKzEyMiw2IEBAIHN0cnVjdCBWYWx1
ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRo
ZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJv
bSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAg
U3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxO
dW1iZXJPZkJ1Y2tldHM7ICsraSkgewpAQCAtMTM0LDcgKzEzNiw3IEBAIHN0cnVjdCBWYWx1ZVBy
b2ZpbGVCYXNlIHsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247CiAgICAg
fQotICAgIAorCiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNrZXRzW3RvdGFsTnVtYmVyT2ZCdWNr
ZXRzXTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbiB7IFNwZWNOb25lIH07CkBA
IC0xNTYsNiArMTU4LDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tl
dAogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1i
ZXJPZkJ1Y2tldHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgpIDogVmFsdWVQcm9maWxlV2l0aExv
Z051bWJlck9mQnVja2V0czwwPigpIHsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZG
aXJzdEJ1Y2tldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1fYnVj
a2V0c1swXSk7IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIg
OiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAy
ODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5OCw3ICsxNTk4LDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRVbmFyeQogICAgICAgICBlbWl0VW5hcnlPcDxPcE5v
dD4oZHN0LCBzcmMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAg
ICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUpOworICAgICAgICBPcE5lZ2F0
ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQ
cm9maWxlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIG9wX2JpdG5vdDoKICAgICAgICAg
ZW1pdFVuYXJ5T3A8T3BCaXRub3Q+KGRzdCwgc3JjKTsKQEAgLTE2OTYsMTMgKzE2OTYsMTMgQEAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUeXBlTwogCiBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BJ
bmM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1f
Y29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0Owog
fQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYyhSZWdpc3RlcklEKiBz
cmNEc3QpCiB7Ci0gICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcERlYzo6ZW1p
dCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAg
ICByZXR1cm4gc3JjRHN0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODIwMTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIFJlZ2lzdGVySUQqPgogICAgICAgICBlbWl0QmluYXJ5T3AoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBzcmMyLCBPcGVyYW5kVHlwZXMgdHlw
ZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3Jj
MSwgc3JjMiwgdHlwZXMpOworICAgICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBz
cmMxLCBzcmMyLCB0eXBlcywgbV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsK
ICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Nyw3ICs5Nyw2IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSoKICAg
ICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7
CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsK
LSAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJs
b2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCiAgICAgaWYgKCFP
cHRpb25zOjp1c2VPU1JFbnRyeVRvREZHKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAy
ODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShE
RkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0pJ
VENvZGUuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSklULmgiCkBA
IC0xMTksMTAgKzEyMCwxMCBAQCB2b2lkIGhhbmRsZUV4aXRDb3VudHMoVk0mIHZtLCBDQ2FsbEhl
bHBlCiAgICAgaW50MzJfdCBjbGlwcGVkVmFsdWU7CiAgICAgc3dpdGNoIChqaXQuY29kZUJsb2Nr
KCktPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgotICAgICAgICBjbGlw
cGVkVmFsdWUgPSBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoaml0
LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKSwgdGFyZ2V0VmFsdWUpOworICAgICAgICBjbGlw
cGVkVmFsdWUgPSBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQodGFy
Z2V0VmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKLSAg
ICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRo
cmVzaG9sZChqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7Cisg
ICAgICAgIGNsaXBwZWRWYWx1ZSA9IFVwcGVyVGllckV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRU
aHJlc2hvbGQodGFyZ2V0VmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzA5LDEwICszMTAsMTUgQEAg
dm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICAgICAgdHJ1
ZUNhbGxlciA/IEFzc2VtYmx5SGVscGVyczo6VXNlRXhpc3RpbmdUYWdSZWdpc3RlckNvbnRlbnRz
IDogQXNzZW1ibHlIZWxwZXJzOjpDb3B5QmFzZWxpbmVDYWxsZWVTYXZlZFJlZ2lzdGVyc0Zyb21C
YXNlRnJhbWUsCiAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6cmVnVDEsIEdQ
UkluZm86OnJlZ1Q0KTsKIAorICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpZiB3ZSBuZWVkIHRv
IGRvIGFueXRoaW5nIGZvciBiYXNlbGluZSBwYi9tZXRhZGF0YSByZWdpc3RlcnMKICAgICAgICAg
aWYgKGNhbGxlcklzTExJbnQpIHsKICAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwog
ICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3Qo
aW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0
YWRhdGFUYWJsZUdQUikpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3
UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVC
bG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVl
Q2FsbGVyKSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAg
IGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxG
cmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19tZXRhZGF0YUdQUikpOworICAgICAgICAg
ICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVC
bG9ja0ZvckNhbGxlci0+YmFzZWxpbmVKSVRDb25zdGFudFBvb2woKSksIGNhbGxlZVNhdmVTbG90
KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19jb25zdGFudHNHUFIp
KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkKQEAgLTQwNCw2ICs0MTAsOSBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0s
IENDYWxsCiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1
bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJVDo6
c19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGluZUpJVENvbnN0YW50UG9vbCgpKSwgSklUOjpz
X2NvbnN0YW50c0dQUik7CisKICAgICAgICAgY29kZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRP
U1JFeGl0ID0gdHJ1ZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQu
bV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgy
MDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMwLDYgKzczMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9
IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihjYWxsZWVUYWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpOwog
ICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAg
ICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9q
aXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CkBAIC04ODksNyArODkwLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93
Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQ
UiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAg
ICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVl
UGF5bG9hZEdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxs
KSB7CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0
YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRh
KS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzQ1LDYgKzc0NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6
OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRh
LmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEu
bnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5u
dW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFy
Z3M7ICsraSkgewogICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCku
dmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwpAQCAtODk2LDcgKzg5Nyw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52
YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBz
bG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxs
ZWVHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewog
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxl
RGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVE
YXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzk4NSw3ICszOTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dFBy
aXZhdGVOYQogICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0
ZXJzKCk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNv
ZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NU
eXBlOjpQdXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCks
IEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dFBy
aXZhdGVOYW1lLCB1c2VkUmVnaXN0ZXJzLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkoYmFzZUdQUiksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShwcm9wZXJ0eUdQUiksIHZhbHVl
UmVncywgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwogICAgIGdlbi5zdHViSW5mbygpLT5w
cm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKIApAQCAtMTQ3NzgsNyArMTQ3NzgsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBzY29wZVJlZyA9IHNj
b3BlLmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93
UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIG1faml0LmNvZGVCbG9jaygpLCBjYWxsU2l0
ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNr
ZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1f
aml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMxNyw3ICs0MzE3LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpGVExKSVQpID8gcGFyYW1zLmdwU2NyYXRjaCgwKSA6IEludmFsaWRHUFJSZWc7CiAK
ICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVFB1dEJ5VmFsR2VuZXJhdG9yPjo6
Y3JlYXRlKAotICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklU
LCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
LAorICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2Rl
U2VtYW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1l
LAogICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKIAogICAgICAgICAgICAgZ2VuZXJh
dG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKQEAgLTEwMTkxLDYgKzEw
MTkxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bnVtUGFzc2VkQXJnczsgaSA8IG51bUFsbG9jYXRlZEFyZ3M7ICsraSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MuYXBwZW5kKFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50
KGpzVW5kZWZpbmVkKCkpKTsKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFz
c2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
Lm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5j
b2RlQmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJ
bmZvKHNlbWFudGljTm9kZU9yaWdpbik7CkBAIC0xMDM0OSwxMyArMTAzNTAsMTQgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQocGFyYW1zWzEg
KyBpXS5yZWNvdmVyeUZvckpTVmFsdWUoKSk7CiAKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0
YS5udW1QYXNzZWRBcmdzID0gbnVtQXJnczsKKyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5u
dW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVn
aXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmln
aW4pOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5m
bzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIGF1dG8gc2xv
d1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6
cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsK
KyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAg
ICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwNjk4LDcgKzEwNzAwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQ
YXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAg
ICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJ
bnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0
aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0
LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5w
cmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA5
NzksNyArMTA5ODEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRv
bmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAg
ICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BS
SW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywg
WyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAg
ICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJi
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEu
cmIJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
TWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0MiwyOCBAQCBjbGFzcyBNZXRh
ZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJldHVybiBpZiBlbXB0eT8KIAotICAg
ICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcykKKyAgICAgICAgZGVmIGdlbmVy
YXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQorICAgICAgICAgICAgZmll
bGROYW1lcy5tYXAgZG8gfGZpZWxkTmFtZXwKKyAgICAgICAgICAgICAgICAiI3twcmVmaXh9c3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsx
Li5dfSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0p
OyB9IgorICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKKyAgICAgICAgZW5kCisKKyAgICAgICAg
ZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGZpZWxkTmFtZXMpCiAgICAgICAgICAg
ICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAgICAgICBpZiB0eXBlLmtp
bmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29u
dmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCisgICAgICAg
ICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsg
JyAgICAnLCB0eXBlLCBmaWVsZE5hbWVzKX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7Zmll
bGQudG9fc307IgorICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisg
ICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVzaChmaWVsZE5hbWUpCisgICAgICAgICAg
ICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgogICAgICAg
ICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAK
LSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzKQorICAg
ICAgICBmaWVsZE5hbWVzID0gW10KKyAgICAgICAgcHJlZml4ID0gIiAgICAgICAgIgorICAgICAg
ICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKHByZWZpeCwgQGZpZWxkcywgZmllbGROYW1lcykKKyAg
ICAgICAgZmllbGRzID0gZmllbGRzICsgIlxuIiArIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMo
cHJlZml4LCBmaWVsZE5hbWVzKQogCiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBp
bml0aWFsaXplcnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MjAx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjk4LDggKzY5OCwxMyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVz
dG9yZUNhbGxlZVNhdmVzCiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8p
CiB7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBl
bWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBpbmZvKTsKK30KKwor
dm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxP
YmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCit7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsK
ICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAg
ICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJ
VENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxOCw2
ICsxNzE4LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2Fs
bChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0Vmly
dHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAg
ICAgCiAgICAgdm9pZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xh
aW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9CYXNlbGluZUpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCisKKyNpbmNs
dWRlICJKSVRNYXRoSUMuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKKyNpbmNsdWRlICJTdHJ1
Y3R1cmVTdHViSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSklUQWRkSUMqIE1hdGhJQ0hv
bGRlcjo6YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0
dXJuIG1fYWRkSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRNdWxJQyogTWF0aElDSG9sZGVy
OjphZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4g
bV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVFN1YklDKiBNYXRoSUNIb2xkZXI6OmFk
ZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1
YklDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUTmVnSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklU
TmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJQ3Mu
YWRkKGFyaXRoUHJvZmlsZSk7IH0KKwordm9pZCBNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyhN
YXRoSUNIb2xkZXImIG90aGVyKQoreworICAgIG1fYWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2Fk
ZElDcyk7CisgICAgbV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAgICBtX25l
Z0lDcyA9IFdURk1vdmUob3RoZXIubV9uZWdJQ3MpOworICAgIG1fc3ViSUNzID0gV1RGTW92ZShv
dGhlci5tX3N1YklDcyk7Cit9CisKK0Jhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKENv
ZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJp
dHlDaGVjaykKKyAgICA6IERpcmVjdEpJVENvZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hl
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICwgTWF0aElDSG9sZGVyKCkKK3sgfQorCitC
YXNlbGluZUpJVENvZGU6On5CYXNlbGluZUpJVENvZGUoKQoreworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklU
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
Q2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVENvZGVN
YXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vY2xhc3MgSklUQWRkSUM7CisvL2NsYXNzIEpJ
VE11bElDOworLy9jbGFzcyBKSVRTdWJJQzsKKy8vY2xhc3MgSklUTmVnSUM7CitjbGFzcyBCaW5h
cnlBcml0aFByb2ZpbGU7CitjbGFzcyBVbmFyeUFyaXRoUHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFNpbXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJp
bmdKdW1wVGFibGU7CisKK2NsYXNzIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBh
ZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcik7CisgICAgSklUQWRkSUMqIGFkZEpJVEFk
ZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5h
cnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQ
cm9maWxlKik7CisgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7
CisKKyAgICAvKgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+CisgICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAg
ICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVy
biBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2Vu
ZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUU3ViSUMqIGFk
ZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklD
KHByb2ZpbGUpOyB9CisgICAgKi8KKworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRk
SUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25l
Z0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKworY2xhc3MgSklUQ29uc3Rh
bnRQb29sIHsKK3B1YmxpYzoKKyAgICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisgICAg
ZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIEdsb2JhbE9iamVjdCwKKyAgICAg
ICAgQ2FsbExpbmtJbmZvLAorICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAgRnVu
Y3Rpb25EZWNsLAorICAgICAgICBGdW5jdGlvbkV4cHIsCisgICAgfTsKKworICAgIHN0cnVjdCBW
YWx1ZSB7CisgICAgICAgIC8vIE9PUFM6IE1ha2UgdGhlIHBvaW50ZXIgcGFja2VkLgorICAgICAg
ICBUeXBlIHR5cGU7CisgICAgICAgIHZvaWQqIHBheWxvYWQ7CisgICAgfTsKKworICAgIEpJVENv
bnN0YW50UG9vbCgpID0gZGVmYXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQ
b29sJiYpID0gZGVmYXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25z
dGFudFBvb2wmJikgPSBkZWZhdWx0OworCisgICAgQ29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9p
ZCogcGF5bG9hZCA9IG51bGxwdHIpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBt
X2NvbnN0YW50cy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5
cGUsIHBheWxvYWQgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1
ZSBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0
ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fY29uc3RhbnRzOworfTsKKworCitjbGFzcyBCYXNlbGlu
ZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7Citw
dWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwg
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayk7CisgICAgfkJhc2VsaW5lSklU
Q29kZSgpIG92ZXJyaWRlOworCisgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlu
a2VkQ2FsbHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsgLy8g
T09QUzogbWFrZSBzdXJlIHdlIHZpc2l0IHRoZXNlIHNvbWVob3cuIE9yIGFzc2VydCB3ZSBkb24n
dCBoYXZlIHRvLCBzaW5jZSB0aGV5J3JlIHZpcnR1YWwgY2FsbHMuCisgICAgQmFnPFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgRml4ZWRWZWN0b3I8
U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3Ry
aW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisgICAgSklUQ29kZU1hcCBt
X2ppdENvZGVNYXA7CisgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2Vs
aW5lSklUUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9C
YXNlbGluZUpJVFBsYW4uY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUw
LDcgQEAgc2l6ZV90IEJhc2VsaW5lSklUUGxhbjo6Y29kZVNpemUoKSBjb25zdAogCiBDb21waWxh
dGlvblJlc3VsdCBCYXNlbGluZUpJVFBsYW46OmZpbmFsaXplKCkKIHsKLSAgICBDb21waWxhdGlv
blJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgIENvbXBp
bGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKG1fY29kZUJs
b2NrKTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6
CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBp
bGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYg
KzQzLDYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sbwogICAgIHN0
b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CiB9CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dT
aGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0
aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4KQotewotICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgZnJhbWUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Ci0gICAgc3RvcmVWYWx1
ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKLSAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNj
b3BlKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVC
bG9jaykpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSks
IEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFj
a2V0LCBjYWxsU2l0ZUluZGV4KSkpOwotfQotCiB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hh
ZG93Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3Jh
dGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAgIFNoYWRvd0NoaWNrZW4qIHNo
YWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCk7CkBAIC03Miw2ICs2MiwyOCBAQCB2b2lk
IENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhCiAgICAgc3RvcmVQdHIoc2NyYXRj
aDIsIEFkZHJlc3Moc2NyYXRjaDFOb25BcmdHUFIpKTsKIH0KIAorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZT4KK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFp
bFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQ
UlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNp
dGVJbmRleCkKK3sKKyAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IGZyYW1lKSkpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFj
a2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOworICAgIHN0b3JlVmFsdWUodGhpc1Jl
Z3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6
UGFja2V0LCB0aGlzVmFsdWUpKSk7CisgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93
UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsK
KyAgICBzdG9yZVB0cihjb2RlQmxvY2ssIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7CisgICAgc3RvcmUzMihU
cnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwg
T0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsK
K30KKwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJl
ZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0
ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAg
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNj
b3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJl
Z3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChz
aGFkb3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsK
K30KKwogdm9pZCBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gd2hlcmUsIFNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVs
cGVycyYpPiBlbWl0Q29kZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pCiB7CiAgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMu
aAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhl
bHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODQwLDcgKzg0MCwxNCBAQCBwdWJsaWM6CiAgICAg
Ly8gVGhlc2Ugb3BlcmF0aW9ucyBjbG9iYmVyIGFsbCB2b2xhdGlsZSByZWdpc3RlcnMuIFRoZXkg
YXNzdW1lIHRoYXQgdGhlcmUgaXMgcm9vbSBvbiB0aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sgdG8g
bWFyc2hhbGwgY2FsbCBhcmd1bWVudHMuCiAgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuUHJvbG9n
dWVQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2Nv
cGUpOwotICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2Fs
bFNpdGVJbmRleCk7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9j
a1R5cGU+CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNo
YWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2Nr
VHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CitwdWJsaWM6Cisg
ICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBK
U1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9j
aywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNr
ZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBH
UFJSZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eCk7CisKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEgcG9pbnRlciB0byB0aGUgUGFja2V0IHdlIHNo
b3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQuCiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlj
a2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJn
R1BSLCBHUFJSZWcgc2NyYXRjaDIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDggKzM3LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIENhbGxG
cmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiB7CisgICAgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvZGVCbG9jay0+Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBD
YWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNh
dmVMb2NhdGlvbnMpCit7CiAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycyB7IFJl
Z2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB9OwotICAgIGNvbnN0IFJlZ2lzdGVy
QXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMgPSBjb2RlQmxvY2stPmNhbGxlZVNh
dmVSZWdpc3RlcnMoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJTYXZl
TG9jYXRpb25zLT5zaXplKCk7ICsraSkgewogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5
IHsgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChpKSB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkocmV2aXNpb24gMjgyMDE2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MywxMSArNDMsMTMgQEAgcHVibGljOgogICAgIFZlY3RvcjxWYWx1
ZVJlY292ZXJ5PiBhcmdzOwogICAgIHVuc2lnbmVkIG51bUxvY2FscyB7IFVJTlRfTUFYIH07CiAg
ICAgdW5zaWduZWQgbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbnVt
UGFyYW1ldGVycyB7IFVJTlRfTUFYIH07IC8vIE9uIG91ciBtYWNoaW5lIGZyYW1lLgogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJNYXA8VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOwog
ICAgIEdQUlJlZyBudW1iZXJUYWdSZWdpc3RlciB7IEludmFsaWRHUFJSZWcgfTsKIAogICAgIHZv
aWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayopOworICAgIHZvaWQgc2V0dXBD
YWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0Kik7CiAjZW5kaWYK
ICAgICBWYWx1ZVJlY292ZXJ5IGNhbGxlZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDEzICszOCwxMyBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1
ZmZsZXIoQ0NhCiAgICAgOiBtX2ppdChqaXQpCiAgICAgLCBtX29sZEZyYW1lKGRhdGEubnVtTG9j
YWxzICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQogICAgICwg
bV9uZXdGcmFtZShkYXRhLmFyZ3Muc2l6ZSgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdp
c3RlcnMsIG51bGxwdHIpCi0gICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnMKLSAgICAgICAgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWdu
RnJhbWUoaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpKQorICAgICwgbV9hbGlnbmVk
T2xkRnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgcm91bmRBcmd1
bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEubnVtUGFyYW1ldGVycykpCiAgICAgLCBtX2FsaWdu
ZWROZXdGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMKICAgICAgICAg
KyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5hcmdzLnNpemUoKSkpCiAgICAg
LCBtX2ZyYW1lRGVsdGEobV9hbGlnbmVkTmV3RnJhbWVTaXplIC0gbV9hbGlnbmVkT2xkRnJhbWVT
aXplKQogICAgICwgbV9sb2NrZWRSZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygp
KQogICAgICwgbV9udW1QYXNzZWRBcmdzKGRhdGEubnVtUGFzc2VkQXJncykKKyAgICAsIG1fbnVt
UGFyYW1ldGVycyhkYXRhLm51bVBhcmFtZXRlcnMpCiB7CiAgICAgLy8gV2UgYXJlIGFsbG93ZWQg
YWxsIHRoZSB1c3VhbCByZWdpc3RlcnMuLi4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOyApCkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBDYWxs
RnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclRhaWxDYQogICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBhcmd1bWVudENvdW50T0sgPQogICAgICAgICBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBtX25ld0ZyYW1lQmFzZSwKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX251
bVBhcmFtZXRlcnMpKTsKICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkgLSAxICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXpl
SW5SZWdpc3RlcnMpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigtc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSksIG1fbmV3RnJh
bWVCYXNlKTsKICAgICBtX2ppdC5tdWwzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNp
emVvZihSZWdpc3RlcikpLCBtX25ld0ZyYW1lQmFzZSwgbV9uZXdGcmFtZUJhc2UpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkocmV2aXNp
b24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDcgQEAgcHVibGljOgogICAgICAgICBD
YWxsRnJhbWVTaHVmZmxlRGF0YSBkYXRhOwogICAgICAgICBkYXRhLm51bUxvY2FscyA9IG51bUxv
Y2FscygpOwogICAgICAgICBkYXRhLm51bVBhc3NlZEFyZ3MgPSBtX251bVBhc3NlZEFyZ3M7Cisg
ICAgICAgIGRhdGEubnVtUGFyYW1ldGVycyA9IG1fbnVtUGFyYW1ldGVyczsKICAgICAgICAgZGF0
YS5jYWxsZWUgPSBnZXROZXcoVmlydHVhbFJlZ2lzdGVyIHsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
IH0pLT5yZWNvdmVyeSgpOwogICAgICAgICBkYXRhLmFyZ3MucmVzaXplKGFyZ0NvdW50KCkpOwog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50KCk7ICsraSkKQEAgLTc5OCw2
ICs3OTksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcGVyZm9ybVNhZmVXcml0ZXMoKTsKICAgICAK
ICAgICB1bnNpZ25lZCBtX251bVBhc3NlZEFyZ3MgeyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVk
IG1fbnVtUGFyYW1ldGVycyB7IFVJTlRfTUFYIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyAr
NjksNyBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BCiB9CiAKIEpJ
VDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2Nr
KQorICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBudWxscHRyKQogICAgICwgbV9pbnRlcnByZXRl
cih2bS5pbnRlcnByZXRlcikKICAgICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKICAgICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyKHZtKQpAQCAtNzcsNiArNzcsOSBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX2xv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKKyAg
ICBtX2dsb2JhbE9iamVjdENvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0KTsKKyAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrID0gY29k
ZUJsb2NrOworICAgIG1fdW5saW5rZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnVubGlua2VkQ29k
ZUJsb2NrKCk7CiB9CiAKIEpJVDo6fkpJVCgpCkBAIC05MCw4ICs5Myw4IEBAIHZvaWQgSklUOjpl
bWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAgICAgICAgIHJldHVybjsKIAogICAgIEp1bXBM
aXN0IHNraXBPcHRpbWl6ZTsKLSAgICAKLSAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFk
ZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1l
bnRGb3JFbnRyeSgpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRF
eGVjdXRlQ291bnRlcigpKSkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQz
MihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50
Rm9yRW50cnkoKSksIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRl
Q291bnRlcigpKSkpOwogICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKIAog
ICAgIGNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTExMywxNSAr
MTE2LDIxIEBAIHZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCoKICAgICBh
ZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNz
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCkKK3ZvaWQgSklUOjplbWl0Tm90
aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpCiB7CisgICAgLy8gT09QUzog
VGFrZSBhIGJvb2xlYW4gb3Igc29tZXRoaW5nIHNheWluZyBpZiB3ZSBjYW4gYmUgbnVsbC4KKyAg
ICBhdXRvIG9rID0gYnJhbmNoVGVzdFB0cihaZXJvLCBwb2ludGVyVG9TZXQpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50
U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAg
ICBvay5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCit2b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFyUmVhZE9ubHlXYXRjaHBv
aW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
KyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChz
Y3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJSZWFkT25seVdhdGNocG9pbnQpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRj
aEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKQEAgLTEyOSw3ICsxMzgsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKICAgICBpZiAoIUFTU0VSVF9FTkFCTEVEKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBK
dW1wIG9rID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIGJyZWFrcG9pbnQoKTsKICAgICBvay5saW5rKHRoaXMpOwpAQCAtMTgxLDIxICsxOTAsNDEg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1YwogICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJv
bG9ndWUoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSk7CisgICAgZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZXN1bHQpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZXN1bHQsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURh
dGEoKSksIHJlc3VsdCk7CisgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gYnJhbmNoVGVzdFB0ciha
ZXJvLCByZXN1bHQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVE
YXRhVGFnKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25SYXJlRGF0YTo6
b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHJlc3VsdCk7
CisgICAgaGFzRXhlY3V0YWJsZS5saW5rKHRoaXMpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJs
b2NrLT5pc0NvbnN0cnVjdG9yKCkpCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSksIHJlc3Vs
dCk7CisgICAgZWxzZQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4
ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpKSwgcmVzdWx0KTsKKworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZXN1bHQsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6Om9mZnNldE9m
Q29kZUJsb2NrKCkpLCByZXN1bHQpOworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZXN1
bHQsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKIHsKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAg
IGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgICAgICBkYXRh
TG9nKCJDb21waWxpbmcgIiwgKm1fcHJvZmlsZWRDb2RlQmxvY2ssICJcbiIpOwogICAgIAogICAg
IGppdEFzc2VydFRhZ3NJblBsYWNlKCk7CiAgICAgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUo
KTsKICAgICAKLSAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5zaXplKCk7CisgICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2Fs
bExpbmtJbmZvSW5kZXggPSAwOwogCi0gICAgVk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAg
ICAgQnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7CisKKyAgICAvLyBPT1BTOiBN
YXliZSBvbmx5IGRvIHRoaXMgaWYgd2UgZGlzYWJsZSBzaGFyaW5nIHNvbWVob3c/CisgICAgLyoK
KyAgICBWTSYgdm0gPSBtX3VubGlua2VkQ29kZUJsb2NrLT52bSgpOwogICAgIGlmIChtX2xvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1fY29kZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29k
ZUJsb2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmluaGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2s+KHZtKSkpIHsKICAgICAgICAgLy8gV2UgY2FuIG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24g
YmVjYXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2RlQmxvY2sncyBleGFjdGx5IG9uY2UuCiAgICAg
ICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxkIGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVu
IHRoZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRzIHRvCkBAIC0yMzYsNiArMjY1LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQorICAgICovCiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7
CiAgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKQEAgLTI3OCw4ICszMDgsOCBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7Ci0gICAgICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJv
YmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdICIsIG9w
Y29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAi
LCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTUyNyw3ICs1NTcs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIEJ5dGVj
b2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAotICAgICAgICBjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5h
dChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICAKICAgICAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJCYXNlbGluZSBKSVQgZW1pdHRp
bmcgc2xvdyBjb2RlIGZvciAiLCBtX2J5dGVjb2RlSW5kZXgsICIgYXQgb2Zmc2V0ICIsIChsb25n
KWRlYnVnT2Zmc2V0KCkpOwpAQCAtNTQ1LDggKzU3NSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFz
ZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9i
ZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSBTTE9XICIsIG9wY29kZU5hbWVzW29w
Y29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2sp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTY3NCw1NSArNzA0LDU2IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAjZW5kaWYKIH0KIAordm9pZCBKSVQ6OmVt
aXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCkKK3sKKyAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUo
KSksIHNfbWV0YWRhdGFHUFIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkpJVERhdGEoKSksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNfY29uc3Rh
bnRzR1BSKTsKK30KKwordm9pZCBKSVQ6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKQoreworICAg
IEJhc2U6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0Ojps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBp
bGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQog
ewotICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxp
dHlMZXZlbCgpOworICAgIC8vIE9PUFM6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGRvbmUgb24gdW5s
aW5rZWQgY29kZSBibG9jaz8KKyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsK
ICAgICBjYXNlIERGRzo6Q2Fubm90Q29tcGlsZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9
IGZhbHNlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAg
ICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIERGRzo6Q2FuQ29tcGlsZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToK
ICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IHRydWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQgPSB0cnVlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVl
OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgCi0gICAgc3dpdGNoICht
X2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewotICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICBjYXNl
IE1vZHVsZUNvZGU6Ci0gICAgY2FzZSBFdmFsQ29kZToKLSAgICAgICAgbV9jb2RlQmxvY2stPm1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RnVuY3Rpb25Db2RlOgotICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRv
IGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCi0gICAgICAg
IC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRpb24uCi0gICAgICAgIG1fY29kZUJsb2Nr
LT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUobGV2ZWwpICYmIERGRzo6bWln
aHRJbmxpbmVGdW5jdGlvbihtX2NvZGVCbG9jayk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAot
ICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8
fCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkg
ewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2sp
OwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1f
c3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV9jb2RlQmxv
Y2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpOwotICAgICAgICBpZiAobV9j
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51
bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOworICAgIGlmIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fdW5s
aW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkp
IHsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0
Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZl
Y3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGVzKCkpOworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+
bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV91
bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMo
KSk7CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgp
IHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVC
YXNlbGluZUZvclByb2ZpbGVyKCkpKSkKLSAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5p
cXVlPEpJVERpc2Fzc2VtYmxlcj4obV9jb2RlQmxvY2spOworICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYm
IE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpIHsKKyAgICAgICAg
Ly8gT09QUzogYnVpbGQgYSBkaXNhc3NlbWJsZXIgb2ZmIHVubGlua2VkIGNvZGUgYmxvY2sKKyAg
ICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9wcm9m
aWxlZENvZGVCbG9jayk7CisgICAgfQogICAgIGlmIChVTkxJS0VMWShtX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIpKSB7CisgICAgICAgIC8vIE9PUFM6IGJ1aWxkIHByb2ZpbGVyIGRpc2Fzc2Vt
YmxlciBvZmYgdW5saW5rZWQgY29kZSBibG9jawogICAgICAgICBtX2NvbXBpbGF0aW9uID0gYWRv
cHRSZWYoCiAgICAgICAgICAgICBuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKAotICAgICAgICAg
ICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1f
Y29kZUJsb2NrKSwKKyAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX3Byb2ZpbGVkQ29kZUJsb2NrKSwKICAgICAgICAgICAgICAg
ICBQcm9maWxlcjo6QmFzZWxpbmUpKTsKLSAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmls
ZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOwor
ICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLCBtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAg
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2lu
KEJ5dGVjb2RlSW5kZXgoMCkpKTsKQEAgLTc0MiwxMSArNzczLDEyIEBAIHZvaWQgSklUOjpjb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVu
Y3Rpb25Qcm9sb2d1ZSgpOwotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9j
aywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9j
ay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpCisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tU
b0ZyYW1lSW5Qcm9sb2d1ZSgpOwogCiAgICAgTGFiZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAotICAg
IGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAg
dW5zaWduZWQgbWF4RnJhbWVTaXplID0gLWZyYW1lVG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoZnJhbWVUb3BPZmZzZXQpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwogICAg
IEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CkBAIC03NTcsMTYgKzc4OSwxNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgbW92ZShyZWdUMSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBl
bWl0U2F2ZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0
ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAg
IGVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CisgICAgZW1pdE1hdGVyaWFsaXpl
TWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKIAotICAgIGlmIChtX2NvZGVCbG9j
ay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKKyAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgQVNTRVJUKCFtX2J5
dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2NvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0
UHJvZmlsaW5nKCkgJiYgKCFtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwg
bV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID4gMSkpIHsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fdW5saW5rZWRDb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElm
IHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHBy
b2ZpbGluZyBzaXRlICh0bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3Rl
bnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUu
Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFy
Z3VtZW50KQorICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0
cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1
ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNzc3LDEyICs4MTAsMTIgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgICAgICAgICAg
ICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CiAjZW5k
aWYKLSAgICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fY29kZUJsb2NrLT52
YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3MpOworICAgICAgICAg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobV9wcm9maWxlZENvZGVCbG9jay0+dmFsdWVQ
cm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNK
SVQobV9jb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2Rl
Ojppc0pJVChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlmIChVTkxJ
S0VMWShzaXplTWFya2VyKSkKICAgICAgICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtF
bmQoV1RGTW92ZSgqc2l6ZU1hcmtlciksICp0aGlzKTsKQEAgLTc5OSwyNCArODMyLDI3IEBAIHZv
aWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtX2J5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4o
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwot
ICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRp
b25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgbV9jb2RlQmxvY2spOworICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDApOworICAg
IGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25U
aHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgcmVnVDApOwogCiAgICAgLy8gSWYgdGhlIG51bWJlciBv
ZiBwYXJhbWV0ZXJzIGlzIDEsIHdlIG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCi0gICAgYm9v
bCByZXF1aXJlc0FyaXR5Rml4dXAgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7
Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1
aXJlc0FyaXR5Rml4dXApIHsKKyAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAhPSAxOworICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXAp
IHsKICAgICAgICAgbV9hcml0eUNoZWNrID0gbGFiZWwoKTsKLSAgICAgICAgc3RvcmU4KFRydXN0
ZWRJbW0zMigwKSwgJm1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7CisKICAg
ICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICBl
bWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUocmVnVDApOworICAgICAgICBzdG9yZTgo
VHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxk
QWx3YXlzQmVJbmxpbmVkKCkpKTsKIAogICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QxKTsKLSAgICAgICAgYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251
bVBhcmFtZXRlcnMpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CisgICAgICAgIGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCkpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAKICAgICAgICAgbV9i
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKIAogICAgICAgICBpZiAobWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1z
dGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9s
bGJhY2tPbkV4Y2VwdGlvbihtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9u
Q29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVC
bG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX3VubGlua2VkQ29k
ZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDog
b3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGlmIChtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgICAgIGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1RvKGJlZ2lu
TGFiZWwsIHRoaXMpOwpAQCAtODM5LDcgKzg3NSw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShs
YWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVs
KCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKLSAg
ICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZm
ZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwg
ZWZmb3J0KSk7CisgICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+
KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX3VubGlua2VkQ29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQ
cm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04NTgs
OCArODk0LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBl
KSB7CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2Ug
U3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXI6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2lt
cGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
ICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRh
Ymxlc1t0YWJsZUluZGV4XTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2Rl
T2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IDA7IGogPCB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikg
ewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHVubGlua2VkVGFibGUubV9icmFu
Y2hPZmZzZXRzW2pdOwpAQCAtODcxLDggKzkwNyw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpTdHJpbmc6IHsKLSAgICAgICAgICAg
IGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAg
ICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmlu
Z0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKICAgICAgICAgICAgIGF1dG8gY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRP
ZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgbG9jYXRpb24gOiB1bmxpbmtlZFRhYmxl
Lm1fb2Zmc2V0VGFibGUudmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBsb2NhdGlvbi5tX2JyYW5jaE9mZnNldDsKQEAgLTkwNiwzMiArOTQyLDM1IEBAIHZvaWQg
SklUOjpsaW5rKCkKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIHJl
Y29yZC5jYWxsZWUpOwogICAgIH0KIAotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJ
ZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywg
cGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhp
cywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIHBh
dGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0Y2hC
dWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVmZmVy
KTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIpOwot
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX2luc3RhbmNlT2ZzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOworICAgIGF1
dG8gZmluYWxpemVJQ3MgPSBbJl0gKGF1dG8mIGdlbmVyYXRvcnMpIHsKKyAgICAgICAgZm9yIChh
dXRvJiBnZW4gOiBnZW5lcmF0b3JzKSB7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvLT5zdGFydCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KGdlbi5tX3N0YXJ0KTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVM
b2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1f
ZG9uZSk7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0
TG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihn
ZW4ubV9zbG93UGF0aEJlZ2luKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmaW5hbGl6ZUlD
cyhtX2dldEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5VmFscyk7CisgICAgZmluYWxp
emVJQ3MobV9nZXRCeUlkc1dpdGhUaGlzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsK
KyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeUlk
cyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5C
eUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9p
bnN0YW5jZU9mcyk7CisgICAgZmluYWxpemVJQ3MobV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7CiAK
ICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykg
ewotICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5r
SW5mbzsKLSAgICAgICAgaW5mby5zZXRDb2RlTG9jYXRpb25zKAotICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1Bh
dGhTdGFydCksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pKTsKKyAgICAgICAgVW5saW5rZWRD
YWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZv
OworICAgICAgICBpbmZvLmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJ
bnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbik7CiAgICAgfQogCi0g
ICAgewotICAgICAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9s
YWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJl
bHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1
aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAg
ICAgICB9Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWls
ZGVyLmZpbmFsaXplKCkpOworICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVy
OworICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8
IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJl
bHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRl
ci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQog
CiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQw
LDI2ICs5NzksMzcgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VM
WShtX2NvbXBpbGF0aW9uKSkgeworICAgICAgICAvLyBPT1BTOiBtYWtlIGJ5dGVjb2RlIHByb2Zp
bGVyIGtub3cgYWJvdXQgdW5saW5rZWQgQ0I/CiAgICAgICAgIGlmIChPcHRpb25zOjpkaXNhc3Nl
bWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5y
ZXBvcnRUb1Byb2ZpbGVyKG1fY29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsKLSAgICAg
ICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2NvZGVCbG9j
aywgKm1fY29tcGlsYXRpb24pOworICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PmFkZENvbXBpbGF0aW9uKG1fcHJvZmlsZWRDb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKICAg
ICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5n
KCkpCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3Jp
Z2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIp
OwogICAgIAorICAgIC8vIE9PUFM6IE1ha2UgYSB2ZXJzaW9uIG9mIENvZGVCbG9ja1dpdGhKSVRU
eXBlIHRoYXQga25vd3MgYWJvdXQgVW5saW5rZWRDb2RlQmxvY2suCiAgICAgQ29kZVJlZjxKU0Vu
dHJ5UHRyVGFnPiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwg
SlNFbnRyeVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0
cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQpKS5kYXRhKCkpOworICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3Ry
aW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50
cnlQdHJUYWc+KG1fYXJpdHlDaGVjayk7Ci0gICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBE
aXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
KSk7CisgICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0
LCB3aXRoQXJpdHlDaGVjaykpOworCisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBX
VEZNb3ZlKG1fdW5saW5rZWRDYWxscyk7CisgICAgbV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0lu
Zm9zID0gV1RGTW92ZShtX2V2YWxDYWxsTGlua0luZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fdW5s
aW5rZWRTdHViSW5mb3MgPSBXVEZNb3ZlKG1fdW5saW5rZWRTdHViSW5mb3MpOworICAgIG1faml0
Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N3aXRjaEp1bXBUYWJsZXMpOwor
ICAgIG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0Q29kZS0+bV9qaXRDb2RlTWFwID0gaml0Q29k
ZU1hcEJ1aWxkZXIuZmluYWxpemUoKTsKKyAgICBtX2ppdENvZGUtPmFkb3B0TWF0aElDcyhtX21h
dGhJQ3MpOworICAgIG1faml0Q29kZS0+bV9jb25zdGFudFBvb2wgPSBXVEZNb3ZlKG1fY29uc3Rh
bnRQb29sKTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxv
Z0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9j
aywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1
bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKKyAgICAgICAgZGF0
YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlu
a2VkQ29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2Vk
UHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwog
fQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKCkKK0NvbXBp
bGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAg
LTk2OCwyNSArMTAxOCwyMSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWlu
VGhyCiAKICAgICBtX2xpbmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygp
OwogCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2Nr
LT5tX2xvY2spOwotICAgICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2Rl
QmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytp
KSB7Ci0gICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlv
bkhhbmRsZXIoaSk7Ci0gICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+
LgotICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgp
LmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+KCk7Ci0gICAgfQorICAgIC8vIE9PUFM6IERvbid0IHRoaW5rIHRoaXMgc2hy
aW5rIGlzIHJlYWxseSBkb2luZyBhbnl0aGluZyBhbnltb3JlLiBWZXJpZnkuCisgICAgLy97Cisg
ICAgLy8gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAvLyAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNo
cmlua01vZGU6OkxhdGVTaHJpbmspOworICAgIC8vfQogCisgICAgLy8gT09QUzogbV9wY1RvQ29k
ZU9yaWdpbk1hcCBzaG91bGQgbGl2ZSBvbiBCYXNlbGluZUpJVENvZGUgZm9yIGJhc2VsaW5lIGNv
ZGVibG9ja3MuCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJs
b2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsK
KyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoV1RGTW92
ZShtX3BjVG9Db2RlT3JpZ2luTWFwKSk7CiAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVy
Qnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91
YmxlPihtX2ppdENvZGUtPnNpemUoKSkgLwotICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8ZG91
YmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKIAotICAgIG1f
Y29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBj
b2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKG1faml0Q29kZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKIAogICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CkBAIC05
OTgsMTEgKzEwNDQsMTEgQEAgc2l6ZV90IEpJVDo6Y29kZVNpemUoKSBjb25zdAogICAgIHJldHVy
biBtX2xpbmtCdWZmZXItPnNpemUoKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2
YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitDb21waWxhdGlvblJlc3Vs
dCBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21w
aWxlKCk7CiAgICAgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhlZmZvcnQpOwotICAg
IHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgIHJldHVybiBmaW5hbGl6ZU9uTWFp
blRocmVhZChjb2RlQmxvY2spOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRp
b25IYW5kbGVycygpCkBAIC0xMDQyLDE4ICsxMDg4LDI4IEBAIHZvaWQgSklUOjpkb01haW5UaHJl
YWRQcmVwYXJhdGlvbkJlZm9yZUMKICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnBy
b2Nlc3NMb2dFbnRyaWVzKCptX3ZtLCAiUHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24uIl9z
KTsKIH0KIAotdW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENv
ZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Y29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpKSkpOwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdpc3Rl
ckNvdW50Rm9yRnJhbWVQb2ludGVyT2Zmc2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkg
KyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAotaW50IEpJ
VDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQg
SklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAg
cmV0dXJuIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2Nr
KCkpOworfQorCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJh
bWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jaykgLSAxKS5vZmZzZXQoKTsKIH0KIAoraW50IEpJ
VDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJl
dHVybiBzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygp
KTsKK30KKwogSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBKSVQ6OmNvbXBpbGVUaW1lU3RhdHMo
KQogewogICAgIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gcmVzdWx0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAKICNkZWZpbmUg
QVNTRVJUX0pJVF9PRkZTRVQoYWN0dWFsLCBleHBlY3RlZCkgQVNTRVJUX1dJVEhfTUVTU0FHRShh
Y3R1YWwgPT0gZXhwZWN0ZWQsICJKSVQgT2Zmc2V0IFwiJXNcIiBzaG91bGQgYmUgJWQsIG5vdCAl
ZC5cbiIsICNleHBlY3RlZCwgc3RhdGljX2Nhc3Q8aW50PihleHBlY3RlZCksIHN0YXRpY19jYXN0
PGludD4oYWN0dWFsKSk7CiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJK
SVREaXNhc3NlbWJsZXIuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJKSVRNYXRoSUMu
aCIKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRl
cmZhY2VKSVQuaCIKKyNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9y
aWdpbk1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5p
cXVlUmVmLmg+CkBAIC0xNDksMTQgKzE1MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9Owog
CiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgc2xvd1BhdGhTdGFydDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRv
bmVMb2NhdGlvbjsKLSAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CisgICAgICAg
IFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKICAgICB9OwogCiAg
ICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKLSAgICBjbGFz
cyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAg
IGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHVibGljIEpTSW50ZXJmYWNlSklUIHsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUVGh1bmtzOwpAQCAtMTcx
LDYgKzE3Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRo
ZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBv
ZmZzZXQuCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRP
ZmZzZXQgPSAyNTY7CiAKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAg
ICAgcHVibGljOgogICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNv
ZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwog
ICAgICAgICB+SklUKCk7CkBAIC0xNzgsMjggKzE4MiwzMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgVk0mIHZtKCkgeyByZXR1cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CiAKICAgICAg
ICAgdm9pZCBjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZm
b3J0KTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQoKTsK
KyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2Nr
Kik7CiAgICAgICAgIHNpemVfdCBjb2RlU2l6ZSgpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgZG9N
YWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgICAgIAogICAgICAgICBz
dGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVP
ZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
SklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQp
OworICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCku
cHJpdmF0ZUNvbXBpbGUoY29kZUJsb2NrLCBlZmZvcnQpOwogICAgICAgICB9CiAKKyAgICAgICAg
c3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayop
OwogICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9j
ayopOworICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENv
ZGVCbG9jayopOwogICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihDb2Rl
QmxvY2sqKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSGFzaE1hcDxDU3Ry
aW5nLCBTZWNvbmRzPiBjb21waWxlVGltZVN0YXRzKCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBTZWNvbmRzIHRvdGFsQ29tcGlsZVRpbWUoKTsKIAorICAgICAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzX21ldGFkYXRhR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRh
dGFUYWJsZUdQUjsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19jb25zdGFudHNH
UFIgPSBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUjsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZv
aWQgcHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxl
TGlua1Bhc3MoKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpOwogICAg
ICAgICB2b2lkIGxpbmsoKTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBp
bGUoSklUQ29tcGlsYXRpb25FZmZvcnQpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2
YXRlQ29tcGlsZShDb2RlQmxvY2sqLCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAgICAg
Ly8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hl
Y2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IGZ1bmN0aW9uKQpAQCAtMjIzLDYgKzIzMiwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgfQogI2VuZGlmCiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
ICAgICAgICB2b2lkIGxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qg
b2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
KyAgICAgICAgdm9pZCBsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qg
b2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
KyAgICAgICAgdm9pZCBsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwg
dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5
cGUsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQUlJl
ZywgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgIHB1
YmxpYzoKKyAgICAgICAgdm9pZCBsb2FkQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwg
R1BSUmVnKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BS
UmVnKTsKKyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVy
LCBHUFJSZWcpOworCisgICAgICAgIHZvaWQgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xv
Z3VlKEdQUlJlZyByZXN1bHQgPSByZWdUMCk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25DaGVj
ayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0aW9u
Q2hlY2tzLmFwcGVuZChqdW1wVG9IYW5kbGVyKTsKQEAgLTI1OCwxNiArMjkzLDE2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9w
Y29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0
X3ZhcmFyZ3MKICAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFy
YXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0g
ICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8q
KTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAg
T3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29u
c3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlu
a0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25z
dCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAg
ICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyos
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxF
dmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0y
ODcsMTQgKzMyMiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVC
YXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3du
ZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZv
aWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKTsKKyAgICAgICAgdm9pZCBlbWl0V3Jp
dGVCYXJyaWVyKEdQUlJlZyBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQg
dGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxh
YmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAg
IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwogICAg
ICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJl
Z3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFs
dWVSZWdzKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEdQUlJlZyk7CisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3Qg
Qnl0ZWNvZGUmLCBKU1ZhbHVlUmVncyk7CiAjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRh
JiwgSlNWYWx1ZVJlZ3MpOwpAQCAtMzA3LDYgKzM0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNl
bGxHUFIsIEFycmF5UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAgICAgICAgIHZv
aWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVn
aXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJl
Z2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0
ZWNvZGUmLCBwdHJkaWZmX3QsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNo
R1BSKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUg
ZWNtYU1vZGUoT3ApOwpAQCAtNTkyLDcgKzYzMiw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNiwx
NCArNjY1LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0
U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZp
cnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0
ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1p
dEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNl
LCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lk
IGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lk
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAg
ICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZv
aWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQ
UlJlZyk7CisgICAgICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQ
UlJlZyBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVT
bG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjQ1LDcgKzY4NCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdy
aXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVn
IHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChH
UFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUo
SlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7
CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFk
ZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsK
ICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVp
bnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsK
QEAgLTY1NCw2ICs2OTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQ
dXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7
CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBK
U1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29s
IGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNP
cGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC02OTUsMjYgKzczNSw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gR2xv
YmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlw
ZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9HRVRfRlJPTV9T
Q09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlw
ZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJF
X0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9GUk9NX1NDT1BF
X0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0
aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZv
ck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0
IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2ZWRDbG9zdXJl
VmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29w
ZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZh
ciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNkZWZpbmUgREVD
TEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Njb3Bl
XyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZF
X1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX1JF
U09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNv
bnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6
b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hh
ciogdGh1bmtOYW1lKTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5l
cmF0b3IoVk0mKTsKQEAgLTc1OSwxMCArNzgxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25F
eGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQpOwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShN
ZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAg
ICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKE1ldGFkYXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKGNvbnN0IEJ5dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVj
b2RlPgorICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlv
blR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rp
b25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+
CkBAIC04MjAsMjAgKzg0MiwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJn
ZXQub2Zmc2V0KSk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3Bl
cmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUg
b3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJh
dGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3Mp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFy
Z3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAg
IH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBN
ZXRhZGF0YSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bl
cmF0aW9uVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3Vs
dCwgdm9pZD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRh
ZGF0YSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJn
cykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJn
cykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8
T3BlcmF0aW9uVHlwZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFk
YXRhLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQp
OworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BS
MCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE4LDI1ICs5
NDAsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAg
Ym9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAg
ICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1
cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0
aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9y
SW5saW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZh
bHVlIHByb2ZpbGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAg
IC8vIGluIHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBz
aG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAg
IHZvaWQgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsK
KworICAgICAgICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0
aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0
ZUNvbXBpbGVUaW1lcygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hl
Y2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAg
ICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhl
biB5b3Ugd2FudCB0byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93
IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQ
dXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0
aFByb2ZpbGUoQmluYXJ5T3ApOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVy
OwogCkBAIC05NjMsOSArOTgwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxT
bG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4g
bV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3Bp
ZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9m
aWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRp
b25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFt
ZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTk5OSwxMSArMTAx
MywyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBJbnN0cnVjdGlv
biosIFVuaXF1ZVJlZjxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+PiBtX2luc3RydWN0aW9uVG9NYXRo
SUNHZW5lcmF0aW9uU3RhdGU7CiAKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwotICAg
ICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91
bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleDsKIAotICAgICAgICBSZWZQdHI8RGlyZWN0SklUQ29kZT4gbV9qaXRDb2RlOwor
ICAgICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisgICAg
ICAgIFVubGlua2VkQ29kZUJsb2NrKiBtX3VubGlua2VkQ29kZUJsb2NrIHsgbnVsbHB0ciB9Owor
CisgICAgICAgIE1hdGhJQ0hvbGRlciBtX21hdGhJQ3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGlu
ZUpJVENvZGU+IG1faml0Q29kZTsKKworICAgICAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFu
dFBvb2w7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RD
b25zdGFudCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAg
ICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFn
PENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAgICAgICAgQmFnPFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgICAgIEZpeGVkVmVj
dG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBGaXhlZFZl
Y3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAg
ICBzdHJ1Y3QgTm90QUNvZGVCbG9jayB7IH0gbV9jb2RlQmxvY2s7CiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0
aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09wZXJhbmRD
b25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewogICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCBhcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MiwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRH
UFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7
CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVy
byA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MiwgcmVnVDEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwg
cmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICszNzUs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1Qw
KTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklUOjplbWl0
QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyogbmVn
YXRlSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBVbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPnVuYXJ5
QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubV9wcm9maWxl
SW5kZXgpOworICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJQyhh
cml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3Ry
dWN0aW9uLCBuZWdhdGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBj
YWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUg
YSBCaWdJbnQKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhO
ZWdhdGUpOwpAQCAtODk5LDggKzkwNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29u
c3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFk
ZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVEFkZElDKiBh
ZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
QWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUwLDExIEBA
IHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdlbmVy
YXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBV
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRo
UHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmls
ZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBlbHNl
CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBz
KTsKIApAQCAtMTAxNSwxMCArMTAyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklU
QmluYXJ5TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAgICAg
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmls
ZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
YXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKICAg
ICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwog
CkBAIC0xMDU1LDEzICsxMDYyLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFy
eU1hdGhJQzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAg
ICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
aWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVs
c2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJl
cGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlv
biksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwog
CiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVs
KCk7CkBAIC0xMTIwLDEzICsxMTI4LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRC
aW5hcnlNYXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQp
OwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAg
ICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJ
QykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+
KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmls
ZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQs
IGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24p
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCBy
ZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRo
SUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQg
PSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNv
bnN0IEluc3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJm1fdW5saW5r
ZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGl2PigpLm1fcHJvZmlsZUluZGV4KTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5k
KGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJp
Z2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjExLDgg
KzEyMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZv
aWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFBy
b2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5r
ZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TXVsPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3Mu
YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRk
KGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPiht
dWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZU11bCk7CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbXVsKGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJv
ZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1fcHJvZmlsZUluZGV4KTsKKyAg
ICBKSVRTdWJJQyogc3ViSUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsK
ICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMp
OwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODIw
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzMiw3ICsyMzIsNyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNv
bnN0IE9wQ2FsbEV2CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJl
Z1QxKTsKICAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2Fs
bEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwg
cmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxs
ZWUsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5
dGVjb2RlKTsKQEAgLTMyNCw3ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25z
dCBJbnN0cnVjdGlvCiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiAr
MzQsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAi
U2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpl
bWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4
IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJn
cyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bj
b2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1
bnNpZ25lZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQg
YXJnQ291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0
ZWNvZGUsIGNoZWNrcG9pbnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2Fz
dDxpbnQ+KHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50
KSk7CiAKKwogICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhp
cygwKSksIHJlZ1QwKTsKICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1l
dGFkYXRhLCBjaGVja3BvaW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAg
ICAgICBzdG9yZTMyVG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6
Om9mZnNldE9mQ2FsbExpbmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkp
OwogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0
ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBP
cDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5m
b0NvbnN0YW50KQogewogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5t
X3RoaXNWYWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9h
cmd1bWVudHM7CkBAIC05MSw3ICs5Miw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmIGJ5dGVjb2QKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZv
ckZvcndhcmRBcmd1bWVudHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3Bl
cmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRp
b24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1m
aXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDApOworICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1Qx
LCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NG
cmFtZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkp
KSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJ
VDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVy
YXRpb24gPSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAg
ICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAg
Y2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9w
ZXJhdGlvbiwgcmVnVDMsIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsK
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBh
cmd1bWVudCBjb3VudC4KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVz
c09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90
QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVn
VDIsIGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAg
IGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSksIHJlZ1QzKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92
ZSwgcmVnVDMsIHJlZ1QyKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxs
TGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAg
IG5vdEJpZ2dlc3QubGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4K
QEAgLTEyNywxNiArMTMxLDE2IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3Am
KQogdGVtcGxhdGU8PgogYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFs
JiBieXRlY29kZSkKIHsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlciwg
cmVnVDEpOwotICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBD
YWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFj
a1BvaW50ZXJSZWdpc3RlciwgYXJndW1lbnRHUFIxKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVS
ZWdpc3RlciwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZz
ZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9k
ZS52YWx1ZSgpKSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWws
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKLQotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFs
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkVtcHR5KHJldHVyblZhbHVlR1BSKSk7CiAKICAgICBlbWl0UHV0Q2FsbFJl
c3VsdChieXRlY29kZSk7CiAKQEAgLTE0OCw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxs
TGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExp
bmtJbmZvcy5hZGQoQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRV
cENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZz
ZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAtMTU2LDQzICsxNjAsNDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVn
aXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2
NChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAg
IGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZv
KTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBlbWl0VmlydHVh
bENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBpbmZvKTsKKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2Fs
bFJlc3VsdChieXRlY29kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6
OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQotewor
Ym9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZv
KiwgdW5zaWduZWQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpIHsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BU
YWlsQ2FsbCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJ
bmZvSW5kZXgpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5
dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7
Ci0gICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEu
bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJU
YWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRh
Lm51bUxvY2FscyA9CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBz
aHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1
ZmZsZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURh
dGEtPm51bVBhcmFtZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7
CisgICAgc2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFn
UmVnaXN0ZXI7CisgICAgc2h1ZmZsZURhdGEtPm51bUxvY2FscyA9CiAgICAgICAgIGJ5dGVjb2Rl
Lm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0g
ICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICBzaHVmZmxl
RGF0YS0+YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJn
c1tpXSA9CisgICAgICAgIHNodWZmbGVEYXRhLT5hcmdzW2ldID0KICAgICAgICAgICAgIFZhbHVl
UmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAg
ICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKICAgICB9Ci0gICAgc2h1ZmZsZURhdGEuY2FsbGVl
ID0KLSAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0g
ICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAg
ICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICBzaHVmZmxlRGF0
YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Cisg
ICAgc2h1ZmZsZURhdGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogCi0gICAgSnVtcExp
c3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCBy
ZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKLSAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAg
ICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKKyAgICBKdW1wTGlz
dCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlz
LCAqc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgIH0pOwogICAgIGFkZFNs
b3dDYXNlKHNsb3dQYXRocyk7CisKKyAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAg
ICBpbmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7CisKICAgICBh
dXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0y
MTgsMTQgKzIyNiwyNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlv
CiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAg
ICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAg
ICAqLwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlE
ICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlu
a0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBjb21waWxlU2V0dXBGcmFt
ZShieXRlY29kZSwgaW5mbyk7CisKKyAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51
bGxwdHI7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5U
X01BWDsKKyAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKSB7CisgICAgICAgIGluZm8g
PSBtX3VubGlua2VkQ2FsbHMuYWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpj
YWxsVHlwZUZvcihvcGNvZGVJRCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZvKTsKKwor
ICAgICAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0lu
Zm9JbmRleCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBp
bGF0aW9uSW5mbygpKTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS51bmxpbmtlZENhbGxMaW5rSW5mbyA9IGluZm87CisgICAgICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZv
Q29uc3RhbnQ7CisgICAgfQorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29u
c3RhbnQpOwogCiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRl
Y29kZUluZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAg
IHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0
cygpOworICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwg
QWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zm
c2V0KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyBy
ZWdUMCBob2xkcyBjYWxsZWUuCkBAIC0yMzQsMTYgKzI1MywxMiBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29k
ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8u
c2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExp
bmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxh
dGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAg
aWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQor
ICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4
LCBpbmZvQ29uc3RhbnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3RhbnQoaW5m
b0NvbnN0YW50LCByZWdUMik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAg
ICAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCBy
ZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7CisgICAgICAg
IGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0
aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0gewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CiAg
ICAgICAgIH0pOwpAQCAtMjUzLDEzICsyNjgsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
Y29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBzbG93
UGF0aHMgPSBpbmZvLT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6Olllcyk7CisgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86
OmVtaXREYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyKTsKICAgICBhdXRvIGRvbmVM
b2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIG1f
Y2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9u
ZUxvY2F0aW9uOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9p
bnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAt
MjczLDIwICsyODgsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bgogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKIAog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1Bh
dGgoKm1fdm0sICp0aGlzKTsKKyAgICBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgq
bV92bSwgKnRoaXMsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRE
aWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKQEAgLTM5NSwxNyArNDEw
LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KIAogICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKICAgICAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnN0dWJJbmZvOworCisgICAgbW92ZShyZWdUMCwgYmFzZUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmlt
cGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHVi
SW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9uZXh0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxp
bmsodGhpcyk7CiB9CkBAIC00MTYsMTAgKzQ0NCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9vcGVuKGNvbnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9w
ZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVn
IGl0ZXJhdG9yR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBM
aXN0IG5vdE9iamVjdDsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVy
YXRvckdQUikpOwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0
b3JHUFIpKTsKQEAgLTQzMiwxOSArNDU4LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9vcGVuKGNvbnMKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIw
LCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgbW92ZShpdGVyYXRvckdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IG5leHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdC
aXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIAogICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2Jq
ZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRv
bmUubGluayh0aGlzKTsKIH0KQEAgLTQ1Miw3ICs0NzYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3Jfb3Blbihjb25zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9
IChbJl0gKCkgewogICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAg
ICAgIGNhc2UgTmFycm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBA
IC00NzAsNTAgKzQ5Myw3NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0
IEluCiAgICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9u
TW9kZTo6R2VuZXJpYykpKTsKIAogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgb3I4
KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmlj
KSksIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9pdGVyYXRpb25NZXRhZGF0YS5zZWVuTW9k
ZXMpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1l
dGFkYXRhOjpvZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRh
dGE6Om9mZnNldE9mU2Vlbk1vZGVzKCksIHJlZ1QwKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIHJlZ1QwKTsKKyAg
ICBzdG9yZThUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFk
YXRhOjpvZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6
Om9mZnNldE9mU2Vlbk1vZGVzKCkpOwogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+
KGluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRD
aGVja3BvaW50KCk7CiAgICAgLy8gY2FsbCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVj
dCkgaW4gcmVnVDAKIAotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBp
dGVyUmVzdWx0R1BSID0gcmVnVDI7Ci0gICAgR1BSUmVnIGRvbmVHUFIgPSByZWdUMTsKLSAgICAv
LyBpdGVyUmVzdWx0R1BSIHdpbGwgZ2V0IHRyYXNoZWQgYnkgdGhlIGZpcnN0IGdldCBieSBpZCBi
ZWxvdy4KLSAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIGl0ZXJDYWxsUmVz
dWx0R1BSKTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0OwogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGl0ZXJSZXN1bHRHUFIpOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHN0YXRpY19hc3NlcnQo
cmV0dXJuVmFsdWVHUFIgPT0gYmFzZUdQUik7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3Mg
PSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNl
cnZlZFJlZ3MuYWRkKHZhbHVlR1BSKTsKKyAgICAgICAgcHJlc2VydmVkUmVncy5hZGQoaXRlckNh
bGxSZXN1bHRHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5p
bXBsKCkpLCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiks
IHJlZ1QzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAg
ICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUu
aW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzdHVi
SW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNW
YWx1ZVJlZ3MgeyBkb25lR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
ID0gcmVnVDI7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdp
c3RlclNldCB1c2VkUmVnaXN0ZXJzKGRvbmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAg
ICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVy
cyk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVT
Y3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3Iu
YWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNo
QWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBp
dGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiks
IHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRv
bmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIGdsb2JhbEdQUik7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBt
b3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBiYXNlR1BSKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQsIEFjY2Vz
c1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0
eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZv
cy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRC
eUlkOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBz
dHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRH
UFIpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01Mjcs
NTkgKzU3Nyw1NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNr
cG9pbnQoanVtcCgpKTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgIHsKICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAgICAgICBHUFJSZWcg
aXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChi
cmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5k
KGJyYW5jaElmTm90Q2VsbChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCiAgICAgICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCk7CiAgICAg
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CiAgICAgICAgIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAot
ICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIp
KTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyQ2FsbFJl
c3VsdEdQUikpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFk
ZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygp
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLQotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCByZWdUMSk7Ci0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOworICAgICAgICBtb3ZlKGl0
ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgZG9uZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQpLnJhd0JpdHMoKSk7CisKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGRvbmVWUmVnLCBkb25lR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5r
KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1
bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1l
bnRHUFIwKTsKICAgICB9CiAKICAgICB7ICAgCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVl
OwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCiAgICAgICAgIFVuaXF1
ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpOwog
ICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAg
ICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFs
dWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgdmFsdWVWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0
R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3Vt
ZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFs
dWVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIK
IAorCiBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIERGRyB7CkBAIC0xNTksMTAgKzE2MCwx
MCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCB1c2VEYXRhSUMoSklUVHlwZSBqaXRUeXBl
KQogICAgIHsKLSAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5
cGUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNl
RGF0YUlDKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBPcHRp
b25zOjp1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKQEAgLTQ2
LDEwICs0Nyw5IEBAIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmYKIEpJ
VElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25z
dCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKLSAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9j
aykKLSAgICAsIG1faml0VHlwZShqaXRUeXBlKQorICAgIDogbV9qaXRUeXBlKGppdFR5cGUpCiB7
Ci0gICAgbV9zdHViSW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZv
KGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHVi
SW5mbyA9IGNvZGVCbG9jayA/IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29k
ZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUlu
ZGV4ID0gY2FsbFNpdGU7CiAKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzID0gdXNlZFJl
Z2lzdGVyczsKQEAgLTU5LDcgKzU5LDYgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6
ZmluYWxpemUoCiAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRo
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpCiB7CiAgICAg
bV9zdHViSW5mby0+c3RhcnQgPSBzdGFydDsKLQogICAgIG1fc3R1YkluZm8tPmRvbmVMb2NhdGlv
biA9IGZhc3RQYXRoLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obV9kb25lKTsKIAogICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCkBAIC02Nyw2ICs2NiwxNSBAQCB2
b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBtX3N0dWJJbmZvLT5z
bG93UGF0aFN0YXJ0TG9jYXRpb24gPSBzbG93UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPihtX3Nsb3dQYXRoQmVnaW4pOwogfQogCit2b2lkIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBtX3N0
YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlD
KG1faml0VHlwZSkpOworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BS
KTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsK
KyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJ
ZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1
ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTEx
MCw3ICsxMTgsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycywKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJl
Z3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlw
ZSBhY2Nlc3NUeXBlKQogICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUs
IGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2
YWx1ZSwgc3R1YkluZm9HUFIpCi0gICAgLCBtX2lzTGVuZ3RoQWNjZXNzKHByb3BlcnR5TmFtZS51
aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAg
ICAsIG1faXNMZW5ndGhBY2Nlc3MoY29kZUJsb2NrICYmIHByb3BlcnR5TmFtZS51aWQoKSA9PSBj
b2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChiYXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkpJ
VE9wZXJhdGlvblZhbGlkYXRpb24uaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKQEAgLTM4LDExICszOSwx
MTQgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3Mg
Q2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVj
dHVyZVN0dWJJbmZvOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0g
Y2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7
CiAKK3N0cnVjdCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRS
ZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpy
ZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Qz
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsK
K307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUVudW1l
cmF0b3JHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBH
UFJJbmZvOjpyZWdUMjsKKyAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29k
ZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZv
LgorICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5mbzo6cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1
bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9
IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90
byA9IEdQUkluZm86OmFyZ3VtZW50R1BSMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMSA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOworfTsKKworc3RydWN0IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1Qy
OworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgdGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBC
YXNlbGluZUluQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworfTsKKwor
c3RydWN0IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9maWxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUNDsKK307CisK
K3N0cnVjdCBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJyYW5kID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQoYnJh
bmQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCiBjbGFzcyBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDE1ICsxNjYsMjEgQEAgcHVibGljOgogICAgIHZvaWQgZmlu
YWxpemUoCiAgICAgICAgIExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZl
ciYgc2xvd1BhdGhMaW5rQnVmZmVyLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHVi
Um91dGluZVB0clRhZz4gc3RhcnQpOwotICAgIAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0
dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRT
dHViSW5mbyB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKIHBy
b3RlY3RlZDoKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRU
eXBlOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwotICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOworICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIG1fc2xvd1BhdGhDYWxsOyAvLyBPT1BTOiBtYWtlIHJlcG9ydENhbGwgcGFzcyBzb21l
dGhpbmcgaW4gd2UgY2FuIHVzZSBmb3IgdGhlIG5vbi1DVEkgdGh1bmtzIGJ1aWxkcy4gCiB9Owog
CiBjbGFzcyBKSVRCeUlkR2VuZXJhdG9yIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
IHsKQEAgLTk4LDcgKzIwOCw3IEBAIHByb3RlY3RlZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7
CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OworcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1w
OwogfTsKIApAQCAtMTMyLDggKzI0Miw4IEBAIHB1YmxpYzoKICAgICBKSVRQdXRCeUlkR2VuZXJh
dG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29k
ZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJh
c2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJl
ZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CisgICAgICAgIENvZGVCbG9jayosIEpJVFR5
cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBK
U1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNN
QU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fz
c2VtYmxlciYpOwogICAgIApAQCAtMTYzLDExICsyNzMsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1Zh
bHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1w
IG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTkxLDggKzI5OSw2IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRj
aGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjE2LDggKzMyMiw2IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2
YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjQxLDggKzM0NSw2
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYp
OwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjc3
LDggKzM3OSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFz
dFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOwogCi1wcml2
YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzAyLDExICs0MDIs
OSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1i
bGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVS
ZWdzIG1fcmVzdWx0OwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0z
MzAsOCArNDI4LDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChN
YWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1w
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlz
aW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Okxp
bmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAo
IXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwor
fQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFu
dCkgeworICAgICAgICAvLyBPT1BTOiBmaW5kIGEgd2F5IHRvIGFzc2VydCB0aGF0IGFsbCBsaW5r
IHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlT
X0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBz
cmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5r
ZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxS
ZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiArMTgxLDM2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBt
ZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmly
dHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lO
TElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1
cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFs
dWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUo
ZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogICAgIHJldHVy
biBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVh
bFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0
aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BS
MiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIs
IHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25v
d25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVj
a3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRo
aXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5l
cmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9j
b2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMo
KSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRl
Y29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFk
ZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2
b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRl
eCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRl
Y29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7
CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRl
ciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsNyAr
MzE4LDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRDb3VudChBYnN0cmEKIAogQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5h
c0NlbGwoKSktPmxlbmd0aCgpID09IDE7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCiBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpT
VmFsdWVSZWdzIHZhbHVlKQpAQCAtMzE1LDcgKzM0NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRh
ZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlm
CkBAIC0zMjMsMTIgKzM1MiwxNyBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Nh
bWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmls
ZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1Zh
bHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQg
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNW
YWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvciht
ZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKworICAgIFZh
bHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlID0gdmFsdWVQcm9maWxlRm9yKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgdmFsdWUpOworICAgIC8v
IE9PUFMKKyAgICAvL3B0cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRh
ZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVPZmZz
ZXRGb3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpICsgVmFsdWVQcm9m
aWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7CisgICAgLy9zdG9yZTY0KHZhbHVlLmdwcigpLCBB
ZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
QEAgLTMzNywxMCArMzcxLDEwIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZSgKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJl
Z3MocmVzdWx0UmVnKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BS
UmVnIHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQg
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgR1BS
UmVnIHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBK
U1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCkBAIC0zNjAsNiArMzk0
LDIxIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVcKICAgICB9CiB9
CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlm
Zl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQg
c2NyYXRjaEdQUikKK3sKKyAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CisgICAgICAg
IGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2Ny
YXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKKyAgICB9Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit7CisgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBj
ZWxsR1BSLCBzY3JhdGNoR1BSKTsKK30KKwogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0
T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgcmV0dXJuIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmFzSW50MzIoKTsKQEAgLTM4MCw3ICs0MjksNyBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyCiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsK
ICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsK
KyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShU
cnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAg
ICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKQEAgLTQ5Niw3ICs1NDUsNyBA
QCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0CiAKIGlubGluZSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNL
bm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUwNiw3ICs1NTUsNyBA
QCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAKIGlubGluZSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJl
Z2lzdGVySUQgdGFnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykp
IHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0
YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBA
IC01MTQsMTEgKzU2Myw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkg
JiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQp
CiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKQEAgLTU0NCwxMSArNTg4
LDE3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBBU1NF
UlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4
IGlzIHNldC4KIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1
ZS5pc051bWJlcigpKQotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKHZhbHVlKSksIGRzdCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgc3dpdGNoIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpKSB7Cisg
ICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICBj
YXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAg
ICAgICAgIG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbG9h
ZENvZGVCbG9ja0NvbnN0YW50KHNyYywgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU2NiwxMSArNjE2LDYgQEAgQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0Nv
bnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3Io
ZHN0KSk7CkBAIC01OTUsNyArNjQwLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93Q2FzZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwo
dlJlZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBA
IC02MzcsMzAgKzY4Miw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25z
dCAKIHsKICAgICBpZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVy
biBtX2NvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFM
V0FZU19JTkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3Bl
IGJ5dGVjb2RlKQotewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCAr
IDE7IC8vIEhhc2hNYXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9jb3BpZWRHZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1f
Y29waWVkR2V0UHV0SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJh
dG9yLT52YWx1ZSk7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFk
ZChrZXksIGdldFB1dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRo
UHJvZmlsZSBKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAg
ICB1aW50NjRfdCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJ
RCkgKyAxKSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRh
SUQpOwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkp
OwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAg
ICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRo
UHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
LSAgICBtX2NvcGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICBy
ZXR1cm4gYXJpdGhQcm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRP
ZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CkBAIC02ODEsNiArNzAzLDYxIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9k
ZTxPcFAKICAgICByZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFk
YXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3Vs
dCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVC
bG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0
KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhz
X21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0
YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRh
ZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1
bHQpCit7CisgICAgbG9hZDgoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJs
b2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQp
LCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBC
eXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVU
eXBlIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7Cisg
ICAgc3RvcmU4KHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxv
Y2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0
YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0
YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVz
dWx0KQoreworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bWV0
YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgc19tZXRh
ZGF0YUdQUiwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvbnN0
YW50KEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY29uc3RhbnRJbmRleCwgR1BSUmVnIHJlc3Vs
dCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19jb25zdGFudHNHUFIsIHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oY29uc3RhbnRJbmRleCkgKiA4KSwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bG9hZEdsb2JhbE9iamVjdChHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRD
b25zdGFudChtX2dsb2JhbE9iamVjdENvbnN0YW50LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0
YW50LCBHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29u
c3RhbnQoKSk7CisgICAgLy8gT09QUzogTWF5YmUgbWFrZSB0aGlzIG1vcmUgZWZmaWNpZW50Pwor
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFu
dHNWZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7CisgICAgbG9hZDY0KEFkZHJlc3MocmVzdWx0LCBj
b25zdGFudC50b0NvbnN0YW50SW5kZXgoKSAqIHNpemVvZihKU1ZhbHVlKSksIHJlc3VsdCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9u
IDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Nh
dGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxG
cmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNh
dGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9u
SWZDYXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTk5Nyw3ICs5OTcsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAKICAgICAvLyBjcmVhdGUg
anVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3Rh
dGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAg
IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3
aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNo
UmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNo
UmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxp
bmtlZFRhYmxlKTsKIApAQCAtMTAyNCw3ICsxMDI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2NoYXIoY29uc3QgSW5zdAogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRj
aCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBt
X2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7
CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEw
NDIsNyArMTA0Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4K
IAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFj
ayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3RyaW5n
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9i
eXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAg
IGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDYgKzQzLDggQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRl
ICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5o
IgorCiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC01NCwxMSArNTYs
MjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGlmIChzcmMuaXNDb25zdGFu
dCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
c3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgc3RvcmU2
NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7
Ci0gICAgICAgIGVsc2UKKyAgICAgICAgLy8gT09QUzogbW9zdCAiT3RoZXIiIFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbiBjb25zdGFudHMgY2FuIGp1c3QgYmUgZ3JhYmJlZCBmcm9tIHRoZSBVbmxp
bmtlZENvZGVCbG9jay4gSXQncyBqdXN0CisgICAgICAgIC8vIGEgY291cGxlIHR5cGVzIHRoYXQg
Y2FuJ3QuIENyZWF0ZSBhbiBhYnN0cmFjdGlvbiBmb3IgdGhhdC4KKworICAgICAgICBzd2l0Y2gg
KG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNy
YykpIHsKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6Cisg
ICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6IHsKKyAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMp
OwogICAgICAgICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRk
cmVzc0Zvcihkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7Cisg
ICAgICAgICAgICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NywzNyAr
MTAwLDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQg
SklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
SlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
KTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1
cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0g
cmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3Rl
cklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJl
Z1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBi
dXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVK
U09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxs
b2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJl
Zywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3Vs
dFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNl
KCptX3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxs
b2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxl
KCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0
dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9
IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVn
LCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhz
dHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hS
ZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hS
ZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJl
ZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAg
ICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzE0
Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdl
IGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4K
LSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Q
cm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RF
cXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVj
dCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKIApAQCAtMTU0LDMwICsx
NjYsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVy
YW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0
ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRv
bmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0
LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm90b0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87Cisg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBw
cm90b0dQUik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VW
YWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3Ig
U3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8p
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOwogCiAgICAgSklU
SW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICBy
ZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDUsCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8v
IHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
KyAgICAgICAgcmVzdWx0R1BSLAorICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgcHJvdG9HUFIs
CisgICAgICAgIHN0dWJJbmZvR1BSLAorICAgICAgICBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnNjcmF0Y2gxLCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gyKTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3Rh
bmNlT2Y7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2Vu
KTsKLSAgICAKKwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMTky
LDE0ICsyMTIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQog
ICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0g
ICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5j
ZU9mT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9w
ZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25B
cmdHUFIwLCByZWdUMiwgcmVnVDEpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qy
LCByZWdUMSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1Yklu
Zm8gPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6dmFsdWUgPT0gYXJndW1lbnRHUFIyKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG8gPT0gYXJndW1lbnRHUFIzKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVy
YXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0
cnVjdGlvbiopCkBAIC0yNDAsNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lz
X3VuZGVmaW5lZChjbwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0
cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM3NCw3ICszOTMsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygmUmVnaXN0
ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAg
IGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiAjZWxzZQpAQCAtMzgzLDkgKzQw
Miw5IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lm
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihW
TSYpCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGpp
dC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSk7CkBAIC00MTEsNyArNDMwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJp
bWl0aXZlKGNvbnN0IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0
eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0
NTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBK
SVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rp
b25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9u
LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9u
YW1lLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25v
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ4NCwx
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHBy
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNo
SWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZw
UmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGds
b2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVl
UmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwog
I2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNl
eUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNTAxLDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1Qw
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1NDAs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmly
c3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJp
dCBvbiB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdl
dCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsK
IApAQCAtNTQzLDcgKzU2NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJ
bnN0cnUKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hU
ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFy
Z2V0KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs2
MDMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBK
SVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQ
dHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNW
YWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNp
YWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgo
VHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxv
Y2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAg
IHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdl
dCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2NDQsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RH
UFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUp
LCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY2MSw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzE2LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1w
VG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzczMyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90
aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0g
YXJndW1lbnRHUFIxOwpAQCAtNzIwLDcgKzc0Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJT
ID4gMAogICAgIGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwot
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwo
YXJndW1lbnRHUFIwKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoYXJndW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyArOTMwLDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAK
QEAgLTkxOCw3ICs5NDEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25z
dCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3Ry
aWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkzMSw3ICs5NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90b19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3ROdW1iZXIocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTc1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwog
ICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0VlJlZyk7CiB9CkBAIC05NzgsNyArMTAwMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVn
VDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
Z1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAg
aWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3RWUmVnKTsKIH0KQEAgLTk5Myw3ICsxMDE3LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNo
KGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFt
ZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNo
T2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBPT1BTOiBU
aGlzIGlzbid0IGVsZWdhbnQuIFdoeSBhcmVuJ3QgdGhleSBpbiB0aGUgY2FsbGVlIHNhdmUgYnVm
ZmVyLiBJIGd1ZXNzIGJlY2F1c2Ugd2UgY2FuIE9TUiBleGl0IGhlcmU/CisgICAgZW1pdE1hdGVy
aWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKIAogICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25J
ZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyArMTAzOCwxMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1l
bnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVl
UHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZm
ZXI7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBj
YWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gs
ICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5k
VmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRW
YWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8g
c2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwotICAg
IGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+
Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewot
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSks
IHJlZ3MpOwotICAgICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9
CiAKQEAgLTEwNTMsOCArMTA2OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29u
c3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1
dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxl
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3
aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBk
ZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxl
LmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsxMDk2LDE0IEBA
IHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUg
anVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3Rh
dGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAg
IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNo
SnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNv
cmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNv
cmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2Vk
VGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxl
SW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktl
eVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRh
YmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CiB9CiAKQEAgLTEwOTksMjAgKzExMTUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5t
X3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGlu
YXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0
YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6
U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVn
Z2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDApOwogICAgIEp1
bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRl
Y29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlz
KTsKQEAgLTExMzMsNyArMTE1MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3Qg
SW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1
YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVt
cCgpOwpAQCAtMTE0OCw3ICsxMTY2LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25z
dCBJbnN0cnVjdAogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTExNjYsNyArMTE4Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3Ry
dWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWws
IHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgp
OwpAQCAtMTE4OCwxMiArMTIwNSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJ
bnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGlu
aXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2lu
dGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxp
ZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBjb3VudCA9IG1f
Y29kZUJsb2NrLT5udW1WYXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVC
bG9jay0+bnVtVmFycygpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBmb3Ig
KHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5pdFJlZ2lzdGVy
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIobV9j
b2RlQmxvY2spOworICAgIAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7CiAKICAgICBl
bWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEyMTIsNyArMTIzMSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChY
ODZSZWdpc3RlcnM6OmVicCk7CkBAIC0xMzEwLDIzICsxMzI5LDE5IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2Fj
aGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3Ry
dWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9U
aGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJp
ZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVl
OwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJl
RGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0x
MzQyLDcgKzEzNTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZz
ZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdp
dGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRh
ZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5j
dGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1
bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hl
ZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShi
eXRlY29kZSwgT3BDcmVhdGVUaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRDYWxsZWUoKSwg
Y2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJy
YW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpz
ZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIo
Tm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBoYXNTZWVuTXVs
dGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzODcsOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVn
VDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEzOTgsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEp
LCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcgKzE0MTEsOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1Qw
LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxNDIyLDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdU
MiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsxNDM3LDExIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkluc3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVy
blZhbHVlR1BSKTsKIH0KQEAgLTE0MzAsNyArMTQ1MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6
cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+
bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmco
KSAmJiBtX3VubGlua2VkQ29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdF
YXJseVJldHVybigpKSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhp
bnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZFB0cihwdHIsIHJl
Z1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2hQdHIoQmVsb3csIHJl
Z1QwLCBUcnVzdGVkSW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNM
aW1pdCgpKSk7CkBAIC0xNDQwLDcgKzE0NjAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hp
bnQoY29uc3QgSW5zdHJ1CiAjZWxzZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
Ci0gICAgICAgIG1vdmVWYWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlc3VsdFJl
Z3MpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkpOwogICAgICAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgICAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CiAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0xNDUzLDggKzE0
NzMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAKICAgICAv
LyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2FuQmVPcHRpbWl6
ZWQoKSkgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2ZU9y
WmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JM
b29wKCkpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNz
T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVzcyhyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQogfQogCkBAIC0x
NTA5LDcgKzE1MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3Qg
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBh
cmd1bWVudEdQUjApOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTUyMiw3ICsxNTQ0LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2NoZWNrX3RyYXBz
X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxs
SGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVy
czo6ZWJwKTsKQEAgLTE1NjQsMzQgKzE1ODYsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3Jl
Z2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IGFyZ3VtZW50R1BSMDsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2Rl
QmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0
TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29k
ZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUs
IGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVj
ID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7Cisg
ICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OkZ1bmN0aW9uRGVjbCwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFu
dCwgYXJndW1lbnRHUFIyKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlE
OwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25l
d19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25l
d19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3Bf
bmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAK
QEAgLTE2MjEsMjMgKzE2NDUsMjQgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihj
b25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1l
bnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIx
KTsKICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJs
b2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29u
c3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlv
bkV4cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29k
ZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50
R1BSMik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVy
YXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19h
c3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9w
X25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5j
dGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0K
IH0KIApAQCAtMTY2NCwyOSArMTY4OSwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNf
Z2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5t
X2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBz
aXplKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQUjIpOworICAgIG1h
dGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheTo6TWV0YWRh
dGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93
aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0
YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50
ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9m
ZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fy
cmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogI2Vsc2UKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSgpLCByZWdUMik7CiAgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwg
cmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFBy
b2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAot
ICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIHJlZ1QzLCBy
ZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApAQCAtMTY5NCw4
ICsxNzIwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJuIG9m
ZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdHlwZSBwcm9maWxlciBpcyBlbmFibGVk
LgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5
cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRh
Lm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5
dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCkBAIC0xNzc3LDIwICsxODA0LDI0IEBA
IHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBzdGF0aWNfYXNz
ZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwg
aGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJS
ZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9u
QXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQ
UlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQo
dm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIHsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJl
IGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgorICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBy
ZWdUMjsKKyAgICAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNr
ZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgfQogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMs
IG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMSk7CisgICAgbG9n
U2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdU
MiksIHJlZ1QzLCByZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAog
I2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29u
dHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAg
Ly8gT09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNo
aW5nIHdoZW4gdGhlIHVzaW5nIHRoZSBjb250cm9sIGZsb3cgcHJvZmlsZXIuCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlQ29udHJvbEZsb3c+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9IG1ldGFkYXRh
Lm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgYmFzaWNCbG9j
a0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMpOwpAQCAtMTg2MCw3ICsxODkxLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIG1vdmVWYWx1ZShq
c1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCkBA
IC0xODg2LDcgKzE5MTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNv
bnN0CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwg
cmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJBcnJheUNvbnN0cnVj
dG9yLmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRl
ICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5o
IgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCkBAIC0y
ODU1LDcgKzI4NTYsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNo
CiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0gICAgY29uc3Qg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBj
b2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEFTU0VS
VChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09
IG1pbik7CiAgICAgdm9pZCogcmVzdWx0ID0gbGlua2VkVGFibGUubV9jdGlEZWZhdWx0LmV4ZWN1
dGFibGVBZGRyZXNzKCk7CiAKQEAgLTI4ODAsNyArMjg4MSw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29k
ZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQ7CiAgICAgaWYg
KGtleS5pc0ludDMyKCkpCkBAIC0yOTAzLDcgKzI5MDQsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxv
Y2stPmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogCiAgICAgaWYg
KGtleS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmluZ0ltcGwqIHZhbHVlID0gYXNTdHJpbmco
a2V5KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9u
IDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OCw3ICszNDgsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0
QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJp
dmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwg
SlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgSW52YWxpZEdQUlJlZywgSW52YWxpZEdQUlJlZyk7
CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDksOTIgKzQ5LDEwMyBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgaWYgKG1ldGFkYXRhLm1fc2Vl
bklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVu
dGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmls
ZSwgcmVnVDIpOworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJl
ck9mSWRlbnRpZmllcnMoKSkgeworICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRl
Y29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUsIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIHNjcmF0Y2hHUFIsIGJhc2VHUFIsIHByb3BlcnR5
R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVn
VDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
Ynl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOwog
CiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAg
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQotICAgICAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAg
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJl
Z3MsIHN0dWJJbmZvR1BSKTsKKworICAgICAgICAvLyBPT1BTLiBTdXBwb3J0IHRoaXMKKyAgICAg
ICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgICAgICAvLyAgICBn
ZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKworICAgICAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7Cisg
ICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
ICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0
QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3Bj
b2RlVHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2Rl
VHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRl
cikpCisgICAgICAgIHJldHVybjsKKworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOwogCi0gICAgICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgbW92ZShCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgYXJndW1lbnRHUFIyKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQp
OwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VS
VChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVP
ZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxy
ZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVu
dEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsK
LSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2Zp
bGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3Rh
dGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3Nl
cnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGlj
X2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BS
KTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3Zh
bF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0g
ICAgfQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKQEAgLTE0OSw3ICsxNjAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2Jh
bE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAg
IC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2Jh
bE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50
YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNjAsOCArMTcxLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0
R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBh
cmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRH
UFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwog
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMTg3
LDM0ICsxOTgsNDAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
IAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAg
ICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgcmVnVDIpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVO
YW1lLAorICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3Ms
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBz
dHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1f
Z2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7
CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzI0MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0
aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BS
Myk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBv
cGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1NCwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9w
dGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0
UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yNjQs
NyArMjc3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRk
cmVzcygpOwpAQCAtMzAwLDIxICszMTMsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZh
dGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7
Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgYnJhbmRHUFIgPSByZWdU
MTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwotCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhi
cmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5k
R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBXZSBzaG91
bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUt
YmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC0zMjQsMTcgKzM0NCwyMiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1pdFdyaXRlQmFycmllcihi
YXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9w
cml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rp
b24pOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVFByaXZhdGVCcmFu
ZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVC
cmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGlt
aXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzY5LDE4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGlj
X2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlv
blNldFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRz
PGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBl
cz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVj
a19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0zNzAsMTkgKzM4OSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5k
KGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJh
bmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87
CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIp
LCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCkBAIC0zOTQsOSArNDIy
LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFu
ZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0
MzYsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBh
bHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAh
aXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BS
MSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25U
cmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1
bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFt
ZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFu
ZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDM1LDMwICs0NTksNDIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7Cisg
ICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6
Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQpOwotICAgIGlmIChpc09wZXJhbmRD
b25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlz
SW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2Fz
ZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpT
VmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworICAgIC8vIE9P
UFM6CisgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgIC8vICAg
IGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1
YkluZm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQ
dXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFN
b2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0
QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MTAs
MTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNN
QU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7
CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
ICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBA
IC00OTgsNyArNTMxLDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25m
aWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRC
eVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSks
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
LCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1
dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRH
UFI1KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1l
dGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emUpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMsIGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTUxMiw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0Owog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92
YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAg
Q2FsbCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
QEAgLTUzMywxOCArNTc1LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BS
ID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQg
dXNlZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29u
dGFpbnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7Cisg
ICAgfQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpA
QCAtNTcwLDIwICs2MTgsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShj
b25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIp
LCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHVi
SW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2lu
ZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5
VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdp
dGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2NTMsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4o
KTsKLSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7
CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZh
bEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02
MDMsMTMgKzY2MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShj
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0
aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRl
RmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3Vy
ZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0
dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisgICAgUHJpdmF0ZUZp
ZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworCisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1
bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BS
Myk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjQpOworICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlv
blB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50c0dQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02MjIsMTggKzY4NCwxMiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0MywxNCArNjk5LDE0IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBi
ZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAg
IC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
cmVnVDQ7CiAKQEAgLTY4MCw3ICs3MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVy
X2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
ckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNjg5LDcgKzc0Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVy
QnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc1Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
ZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCBy
ZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVn
VDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEs
IHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBy
ZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzA5LDcgKzc2OCw4IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFs
LCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC03MTksNyArNzc5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmli
dXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJp
YnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc4OCwzMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFz
ZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3
cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdy
aXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNs
b2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODMwLDE3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAg
ICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsr
XTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGlt
aXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODU0LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQ
UjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJ
ZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODA4LDcgKzg3Niw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9u
cyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAog
ICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTg0NSwyMiAr
OTEzLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNl
bGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChw
cm9wZXJ0eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwg
QmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJh
cnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJz
IHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTYyLDExIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRl
QnlWYWxPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
YXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQgKzk4MCwxOSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVj
bWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0
dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMDIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
ICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAg
ICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIgKzEwMzcsMzEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nl
c3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5
SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVu
ZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNzEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTAwMywyNiArMTA5
MSwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbW92
ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNl
Ci0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMzAsMjIgKzExMTIsMzEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWREaXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYgKzExNDUsMTggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTY2LDYxIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7
CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJl
Y3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENh
bGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdl
dEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlM
ZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5t
X21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdl
dEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2Rl
LmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRN
b2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSnVtcCBu
b3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5
SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0
YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdz
LCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcpOwotfQorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBy
ZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAKLXZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNW
YWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcs
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKLQot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRo
aXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRz
V2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2ICsxMjI5LDE4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJ
ZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNTAsNTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
OwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNW
UmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhp
c1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRo
aXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIp
LCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
bV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTIwNiw3
ICsxMzEwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRk
cmVzcygpOwpAQCAtMTI0MSwxNiArMTM0NSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRC
eUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRX
aXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwg
b3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTEyNjAsMjggKzEzNjcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1Jl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIg
PT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJv
cGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgZWxzZQotICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI5MSw3ICsxMzkyLDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAt
MTMyOSwyMyArMTQzMCwzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wg
ZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8g
YmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNl
dCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1l
bnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3
ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQg
YXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0
ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAg
IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0S2luZDo6
RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVj
bWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFw
cGVuZChnZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0NzQsMTgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAog
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgr
K107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQ
YXRoRnVuY3Rpb24oKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
YXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
I2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3NiwyNSArMTQ5NSwxOSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4g
dXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJh
c2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQo
dmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCkBAIC0xNDA0LDcgKzE1MTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
CiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQxLDIwICsxNTU0LDMxIEBA
IHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUlu
QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTg3LDE3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
aW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0ODAsMjggKzE2MDcsMjIg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdl
bmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdz
IG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBh
IGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBl
KG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJu
VmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTUxMCwyNSArMTYzMSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5z
dHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5
dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwogCiAg
ICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1Yklu
Zm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUzNywx
NSArMTY2NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEpJVEluQnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJn
dW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVu
dEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3Qs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywg
YXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NTYs
NTkgKzE2ODgsNzAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgog
CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VH
UFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJv
cGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmls
ZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2Zp
bGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxs
R2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJl
J3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0
IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5
cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHBy
IEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BS
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAg
ICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5C
eVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwog
fQogCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFj
Y2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwg
QWNjZXNzVHlwZSB0eXBlKQogewotICAgIEFTU0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBV
TlVTRURfUEFSQU0oYmFzZSk7CisgICAgVU5VU0VEX1BBUkFNKHByb3BlcnR5KTsKKyAgICBBU1NF
UlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJp
dmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBv
cGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2MSwyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1By
aXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJy
YW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRl
Y2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFu
ZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2
YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9w
cml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0
ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2
YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQ
cml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxNzg5
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRl
Y29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2
YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3Bl
cnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xNjY2LDE5ICsxODAzLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0
ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1p
dEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJh
bmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9i
YXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmpl
Y3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwg
bV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsK
LSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2ODgsNiArMTgyOCw3IEBA
IHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3MDEsNyArMTg0Miw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2Nv
cGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJl
c29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25z
dGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDEpOwogICAg
ICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJl
Z1QxKTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4NTYsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNv
bnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVU
eXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNj
b3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CiAgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3
OTQsODcgKzE5MzUsMTA1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVU
eXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlw
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVj
b2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVj
b2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRD
b2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWlu
IHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2
ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGlj
YWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlw
ZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJl
Z1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9j
b2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgICAgICBwdHJk
aWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9m
ZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9H
RU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2Vu
ZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1td
ID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVfR0VO
RVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7
CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0s
IENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7CiAg
ICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBhdXRv
IGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkg
eworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZt
LCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNvbHZl
X3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7CisgICAgICAgIH07CisK
KyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkg
eworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZt
LCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7Cisg
ICAgICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3
OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CisgICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZh
ckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0
Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNSZXNvbHZl
U2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2Vu
ZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBj
aGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNv
bHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBU
aGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRo
ZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlv
bnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMg
YmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAg
ICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwog
ICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4
cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0
byBzbG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdU
NDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNT
RVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRh
Z1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkp
LCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUo
KSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBK
dW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZd
IChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
SW52YWxpZEdQUlJlZykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFs
aWRHUFJSZWcpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BS
UmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zh
ckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
YnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0
ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3Qs
IG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zm
c2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAog
ICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgbG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNj
b3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAg
ICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAgICBMYWJlbCBsb29w
ID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1Qx
KTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUg
PSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAgewotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
LSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAg
anVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICAgICAg
aml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICAgICAgaml0Lmp1bXAo
KS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMp
OworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUg
PSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEyICsyMDQxLDEyIEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2Rl
QmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQ
Uik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAg
ICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2Jh
bE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdF
cG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdU
MCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7Cisg
ICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGlj
YWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2Jq
ZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAg
ICAgICAgICBqaXQubW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEgKzIwNTYsMTEgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFu
dFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3Ig
R2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAg
ICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7
CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRP
Zkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExl
eGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsyMDY4LDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1pdFJlc29s
dmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAg
ICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMjA3OCw0NSBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAg
c3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNU
X09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBK
dW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBH
bG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNv
bHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFBy
b3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RH
bG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdUMCk7CiAKLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAg
ICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBhdXRvIGVtaXRDYXNlID0g
WyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAgICAgICAgICAgSnVtcCBub3RDYXNl
ID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBl
KSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgbm90Q2FzZS5saW5rKCZqaXQp
OworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBl
bWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7Cisg
ICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9
CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsK
LSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29s
dmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVM
b2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsK
KyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29k
ZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBE
RUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2
ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHBy
ICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAg
ICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJu
IGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTog
b3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNP
TFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9S
RVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAg
ICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3
aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVk
IHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAtMjA2NSw2ICsyMTg2LDcg
QEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTIxNzgsNyArMjMwMCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTIxODYsOSArMjMwOCw5IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0RnJvbVNj
b3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRGcm9tU2Nv
cGUsIGRzdCwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiAjZWxzZSAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTIxOTYsNDEgKzIzMTgsNTAgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIFJlc29sdmVU
eXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAogICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0
ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0
ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtl
ZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0
cnVjdGlvbik7CisKKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7
CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xv
c3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAg
fTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3Ig
PSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2Nv
cGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTog
b3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAgICBhdXRvIGdlbmVy
aWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBK
SVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxp
bmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCiAgICAgY29uc3RleHBy
IEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVH
UFIgPSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVn
VDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0gICAgICAgIHVpbnRw
dHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0
YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
cHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFU
YWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsK
IAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX2dldF9m
cm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0
IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JF
U09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAgIH07Ci0jdW5kZWYg
R0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1l
dGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBz
Y29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1l
dGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0g
ICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAg
ICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBjb2RlID0g
dm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNlIGlmIChwcm9maWxl
ZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAg
ICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dl
bmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmlj
R2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0
ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIq
IHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpn
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVU
eXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0
aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExM
SW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCkBAIC0yMjM5LDk5ICsyMzcwLDg4IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNj
b3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7
CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNT
RVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRh
Z1JldHVybkFkZHJlc3MoKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0
YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdU
MywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3Qg
bWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShz
Y29wZUdQUiwgcmVnVDApOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0ciha
ZXJvLCByZWdUMSkpOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKSk7CisgICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAo
R1BSUmVnIHNjb3BlR1BSKSB7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1Qx
KTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgIGppdC5sb2Fk
MzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEp
OworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwogICAgIH07CiAK
LSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmpl
Y3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNl
LmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZz
ZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Cisg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
T0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQp
KSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFk
ZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0z
MihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFyRnJv
bVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBs
b2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2Fk
UHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0
UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQ
dHIocmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0gWyZd
IChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7CiAgICAgICAgIHN0YXRpY19h
c3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBsc2hpZnQ2NChUcnVz
dGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJh
bmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52
aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5sc2hp
ZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOworICAgICAgICBqaXQuYWRkUHRyKHNj
b3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhvcGVyYW5k
R1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsK
ICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8gZW1pdENvZGUgPSBb
Jl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5
cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3Ry
dWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3
ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVj
dC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2
YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2Nv
cGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2Ug
ZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3Qu
IEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFy
IGluamVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7
CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwogICAgICAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKICAgICAgICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVk
TGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1
YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRh
PEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAg
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQ
dHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
b3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgb2Zmc2V0KTsKICAgICAgICAg
ICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxp
bmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJ
VE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5r
KHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIo
R3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9m
ZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNO
b3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQp
OwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAg
ICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0Lm5lZzMyKG9mZnNldCk7Cisg
ICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgICAg
ICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1
bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxW
YXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAo
aW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50
ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAg
ICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRh
ZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
YnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCByZWdUMyk7Cisg
ICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BS
LCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwogICAgICAgICAgICAgZW1p
dEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsK
KyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1
bGVWYXI6CkBAIC0yMzQxLDg2ICsyNDYxLDY1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVU
eXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0g
ICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
Ci0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVz
b2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0g
ICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUo
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAg
ICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNF
X0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2
ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAg
ICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwg
bV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAg
ICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZH
ZXRQdXRJbmZvKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0
UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAog
Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBp
c0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3Bl
cnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2Jh
bFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxW
YXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsoJmppdCk7CisKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0LmJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7
CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
UHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5
LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAg
ICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1w
KCkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
aml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICB9CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAg
IGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0
aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3Jl
NjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwg
bV9wcm9maWxlKSkpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFk
YXRhOjpvZmZzZXRPZlByb2ZpbGUoKSksIHJlZ1QxKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwg
QWRkcmVzcyhyZWdUMSwgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKKyAg
ICAvL2ppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zm
c2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSk7CiAK
LSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAg
ICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9t
X3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9j
YXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVM
b2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERF
RklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29s
dmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhw
ciAoIXRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAg
ICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVy
biBqaXQuZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6
IG9wX2dldF9mcm9tX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JF
U09MVkVfVFlQRShERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklO
RV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQog
ewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3
b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2go
WDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjQ0OSw3ICsyNTQ4LDkgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIENhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwo
T3BlcmF0aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0LmVtaXROb25Q
YXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRk
cmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJU
YWdSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSwgR1BSSW5m
bzo6bnVtYmVyVGFnUmVnaXN0ZXIpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNr
ZXQoKSkpOworICAgIC8vaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVy
VGFnUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOwogICAg
IGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2XzY0KQpAQCAtMjQ3MSw4NiArMjU3Miw3OSBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFi
bGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0
KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0K
LXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVz
c09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJl
Y3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVt
aXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdU
MSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRD
bG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVn
VDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxl
cygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3Bl
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdl
dFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJf
dCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5t
X29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBlIHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0g
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUg
c3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAgICAg
ICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhl
IHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCByZWdUMSk7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisKICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKIAogICAgICAgICAg
ICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVh
bCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0g
ICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CisgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsK
KyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIo
cmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVn
VDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBz
dG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAg
ICAgICAvLyBPT1BTOiB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBH
UFJSZWdzIGluc3RlYWQgb2YgVlJzCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAg
ICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNv
ZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRW
YXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgIGlmICghaXNJbml0aWFs
aXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUg
PT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykpIHsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAg
ICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7CisKKyAgICAgICAg
ICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6
Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0aWFs
aXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdl
IG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92
ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAgICAg
IGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0
VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xv
dCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCks
IHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1Qw
KSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOworICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAg
ICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3
aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNo
cG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRT
ZXQoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdU
MSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsK
KyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAgICAg
ICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBH
UFJSZWcgZm9yIHZhbHVlLgorICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6
CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNs
b3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVn
VDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDApOworICAgICAg
ICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0
ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
cmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJlZ1QwLCByZWdU
MiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkp
KTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lv
biB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIG93bmVyL3ZhbHVlLgogICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTI1NjQsNTggKzI2NTgsNTIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICB9CiAgICAg
fTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAg
ICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1
dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBK
dW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5j
aDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xv
YmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWlj
LCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1p
bml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5s
aW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2Jh
bExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0K
LSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShy
ZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIC8vIElmIGFu
eSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUgdGhpbmdzCisgICAgLy8gdGhhdCB3YXkg
Zm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3
ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIsCisgICAgLy8gYWxsIENvZGVCbG9ja3Mg
d2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIKKyAgICAvLyBpZiB0aGUgdmFyIGluamVjdGlv
biB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRo
ZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFy
ZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFy
KQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJl
c29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoUmVzb2x2
ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsK
KyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVk
SW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUg
aW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwog
ICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsK
ICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKKyAgICAgICAgSnVtcCBub3RHbG9i
YWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIp
KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsKKworICAgICAgICBK
dW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAog
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0
Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAg
LTI2MjQsMTggKzI3MTIsMjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShj
b25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwot
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9m
aWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayku
bV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBh
IE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENvZGVCbG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAg
ICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFyLgogICAgICAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0
cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2UgewogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlv
bik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgQVNT
RVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgp
ID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9u
KTsKIAogICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1l
bnRHUFIyOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKQEAgLTI2NTIsNyArMjc0Myw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0
aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcg
dG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpA
QCAtMjcwMSw3ICsyNzkyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7
CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNl
dCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3NTksNyArMjg1MCw2IEBA
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIHZvaWQgSklUOjplbWl0
X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWdu
ZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpAQCAtMjc2Nyw3ICsyODU3LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDAp
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3ODksNyArMjg3OSw2IEBAIHRlbXBsYXRlIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV92YWw8T3AKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jf
bmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAgLTI4MDUsNyArMjg5NCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKICAgICBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gbW9kZSBzZXQgd2UgdGVu
ZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBwcm9maWxlIGl0IGluIHRoZSBMTElu
dC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgewogICAgICAgICBHUFJSZWcgZW51
bWVyYXRvckdQUiA9IHJlZ1QzOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1l
cmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQoYnJh
bmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKCh+SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSAmIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKQEAgLTI4NDcsNzggKzI5MzYsODcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
R2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHlOYW1lOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0g
Ynl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKIAotICAgIGF1
dG8gcmVzdWx0R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBC
YXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVudW1lcmF0
b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlW
YWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBC
YXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJz
OjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHNj
cmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcHJvcGVy
dHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51
bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wRW51
bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwg
c2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZThUb01l
dGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNl
R1BSKSk7CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KLSAg
ICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdU
MiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBpc05vdE93
blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVy
ZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7
Ci0gICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywg
QWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBzY3Jh
dGNoMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgc2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gz
MihOb3RFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0ZSB0
aGUgb2Zmc2V0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8gSWYgaW5k
ZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0
aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0g
ICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4
KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1wIG91dE9m
TGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2Ny
YXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSkpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CisgICAg
bG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBw
ZW5kKGp1bXAoKSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91
dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVn
VDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSksIHJlZ1QzKTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVn
VDMsIHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2Ny
YXRjaDIpOworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3Jh
dGNoMiwgc2NyYXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkgPSBvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJhc2VJ
bmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJl
c3VsdEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNF
aWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMu
YXBwZW5kKGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOwotICAg
IHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3du
U3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1l
dGFkYXRhKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCBi
eXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0
b3JNZXRhZGF0YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRoaXMpOwot
ICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVk
SW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIEp1bXAg
aXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJlcGxhY2Ug
dGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
ZGV4LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJvcGVydHlH
UFIpOwogCiAgICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAKICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1
YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMu
YXBwZW5kKGdlbik7CiAKICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjkyNywxMCArMzAyNSw5
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0
ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRC
eVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBl
bmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFz
X3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25z
dCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2Up
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25U
eXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
U2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yOwpAQCAtMjkzOSw3ICszMDM2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9o
YXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNz
KCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRh
KCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0
YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9y
TWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJl
TW9kZSkpKTsKIApAQCAtMzAyOCw2ICszMTI3LDEzIEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKEpTQ2VsbCogb3duZXIKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhp
cyk7CiB9CiAKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcikKK3sKKyAg
ICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93
bmVyLCBzZWxlY3RTY3JhdGNoR1BSKG93bmVyKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7Cisg
ICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NTIsNyArMTU1Miw3IEBA
IHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtD
YWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xu
SWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxs
TGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1w
RGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNh
bGxMaW5rSW5mbykpOwogICAgIAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0u
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGlu
ZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oIgogI2luY2x1
ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgi
CisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRo
c0lubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdT
Y29wZS5oIgpAQCAtMTUzLDcgKzE1NCw3IEBAIGlubGluZSBKU1ZhbHVlIGdldE9wZXJhbmQoQ2Fs
bEZyYW1lKiBjYWwKICAgICB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmluZSBMTElOVF9QUk9GSUxF
X1ZBTFVFKHZhbHVlKSBkbyB7IFwKLSAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2Nr
KS5tX3Byb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsgXAorICAg
ICAgICBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fcHJvZmlsZS0+bV9idWNrZXRzWzBd
ID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVm
aW5lIExMSU5UX0NBTExfRU5EX0lNUEwoY2FsbEZyYW1lLCBjYWxsVGFyZ2V0LCBjYWxsVGFyZ2V0
VGFnKSBcCkBAIC0zNzAsNiArMzcxLDE1IEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRI
ZXVyaXN0aWNzKFYKICAgICAKICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVBy
ZWRpY3Rpb25zKCk7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6
QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2Vs
aW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxp
bmVDb2RlKSB7CisgICAgICAgICAgICAvL2RhdGFMb2dMbigiU2hhcmVkIHZpYSBMTEludCIpOwor
ICAgICAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNl
bGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+aml0TmV4
dEludm9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsK
ICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUi
LCAoInRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRF
eGVjdXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7CkBAIC04NjAsNyAr
ODcwLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yXwogICAgIEpT
VmFsdWUgcmVzdWx0ID0gcGVyZm9ybUxMSW50R2V0QnlJRChwYywgY29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIGl0ZXJhdG9yLCB2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0LCBtZXRhZGF0YS5tX21vZGVN
ZXRhZGF0YSk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgbmV4dFJlZ2lzdGVy
ID0gcmVzdWx0OwotICAgIGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9uZXh0UHJvZmls
ZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBieXRlY29kZS5t
ZXRhZGF0YShjb2RlQmxvY2spLm1fbmV4dFByb2ZpbGUtPm1fYnVja2V0c1swXSA9IEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwogICAgIExMSU5UX0VORCgpOwogfQogCkBAIC04ODAsNyArODkwLDcg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2l0ZXJhdG9yXwogICAgIEpTVmFsdWUg
cmVzdWx0ID0gcGVyZm9ybUxMSW50R2V0QnlJRChwYywgY29kZUJsb2NrLCBnbG9iYWxPYmplY3Qs
IGl0ZXJhdG9yUmV0dXJuLCB2bS5wcm9wZXJ0eU5hbWVzLT5kb25lLCBtZXRhZGF0YS5tX2RvbmVN
b2RlTWV0YWRhdGEpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogICAgIGRvbmVSZWdp
c3RlciA9IHJlc3VsdDsKLSAgICBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fZG9uZVBy
b2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgYnl0ZWNv
ZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2RvbmVQcm9maWxlLT5tX2J1Y2tldHNbMF0gPSBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKICAgICBMTElOVF9FTkQoKTsKIH0KIApAQCAtODk3LDcgKzkw
Nyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pdGVyYXRvcl8KICAgICBKU1Zh
bHVlIHJlc3VsdCA9IHBlcmZvcm1MTEludEdldEJ5SUQocGMsIGNvZGVCbG9jaywgZ2xvYmFsT2Jq
ZWN0LCBpdGVyYXRvclJldHVybiwgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWUsIG1ldGFkYXRhLm1f
dmFsdWVNb2RlTWV0YWRhdGEpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogICAgIHZh
bHVlUmVnaXN0ZXIgPSByZXN1bHQ7Ci0gICAgYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5t
X3ZhbHVlUHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fdmFsdWVQcm9maWxlLT5tX2J1Y2tldHNb
MF0gPSBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICBMTElOVF9FTkQoKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BK
bnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVy
YXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0
cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAg
ICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUs
ICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0MSwgdDIp
CiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGJpbmVxIFRhZ09mZnNldFtjZnIs
IHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBAIC0xMDIzLDcgKzEwMTksNyBAQCBtYWNybyBwcmVP
cChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgICMgTWV0YWRhdGEgaW4gdDEs
IHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQyLCAuc2xvdykKICAgICAg
ICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFy
aXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9m
aWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAgICAgIGRpc3Bh
dGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4OSwyMiArMTA4NSwxOCBAQCBlbmQpCiAKIGxsaW50
T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAKLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUo
dHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2Zp
bGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgIGVuZAotCiAgICAgbWV0YWRh
dGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5lcSB0MSwgSW50MzJUYWcsIC5vcE5lZ2F0
ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBu
ZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRh
dGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0NSwgdDMpCiAg
ICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdhdGVTcmNOb3RJbnQ6CiAgICAgYmlhIHQx
LCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JpIDB4ODAwMDAwMDAsIHQxCi0gICAg
dXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFy
aXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0NSwgdDMpCiAgICAgcmV0
dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExMTUsMTAgKzExMDcsNiBAQCBlbmQp
CiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBp
bnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9wZXJhdGlvbikKICAgICBsbGludE9wV2l0
aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gYXJpdGhQcm9maWxl
KHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBl
bmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCiAgICAgICAgIGdldChtX3JocywgdDIpCiAg
ICAgICAgIGdldChtX2xocywgdDApCkBAIC0xMTI2LDcgKzExMTQsNyBAQCBtYWNybyBiaW5hcnlP
cEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCBJbnQzMlRhZywgLm9w
MU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5vcDJOb3RJbnQKLSAgICAgICAg
YXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAg
ICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0Mywg
dDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKQEAgLTExMzYsMTIgKzExMjQs
MTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBi
aWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAgICAgICAgYmliIHQzLCBMb3dlc3RUYWcsIC5vcDFO
b3RJbnRPcDJEb3VibGUKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAuc2xvdwotICAgICAg
ICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0
NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAg
ICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKLSAgICAg
ICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVy
LCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQxKQog
ICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1Myw3ICsxMTQxLDcgQEAgbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQg
aXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IG5v
dC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYmlhIHQzLCBMb3dlc3RUYWcsIC5z
bG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51
bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGZpaTJkIHQxLCB0
MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJhdGlvbihmdDEsIGZ0MCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNjgsMTUgKzY4LDE2IEBAIG1h
Y3JvIG1ha2VSZXR1cm5Qcm9maWxlZChvcGNvZGVTdHJ1Y3QsIGcKICAgICBmbihtYWNybyAodmFs
dWUpCiAgICAgICAgIG1vdmUgdmFsdWUsIHQzCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKLSAg
ICAgICAgdmFsdWVQcm9maWxlKG9wY29kZVN0cnVjdCwgbV9wcm9maWxlLCB0MSwgdDMpCisgICAg
ICAgIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIG1fcHJvZmlsZSwgdDEsIHQzLCB0MikKICAg
ICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAgICAgc3RvcmVxIHQzLCBbY2ZyLCB0MSwgOF0KICAg
ICAgICAgZGlzcGF0Y2goKQogICAgIGVuZCkKIGVuZAogCi1tYWNybyB2YWx1ZVByb2ZpbGUob3Bj
b2RlU3RydWN0LCBwcm9maWxlTmFtZSwgbWV0YWRhdGEsIHZhbHVlKQotICAgIHN0b3JlcSB2YWx1
ZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolcHJvZmlsZU5hbWUlLm1fYnVja2V0c1ttZXRh
ZGF0YV0KK21hY3JvIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHByb2ZpbGVOYW1lLCBtZXRh
ZGF0YSwgdmFsdWUsIHNjcmF0Y2gpCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjolcHJvZmlsZU5hbWUlW21ldGFkYXRhXSwgc2NyYXRjaAorICAgIHN0b3JlcSB2YWx1ZSwgVmFs
dWVQcm9maWxlOjptX2J1Y2tldHNbc2NyYXRjaF0KIGVuZAogCiAjIEFmdGVyIGNhbGxpbmcsIGNh
bGxpbmcgYnl0ZWNvZGUgaXMgY2xhaW1pbmcgaW5wdXQgcmVnaXN0ZXJzIGFyZSBub3QgdXNlZC4K
QEAgLTg3LDcgKzg4LDcgQEAgbWFjcm8gZGlzcGF0Y2hBZnRlckNhbGwoc2l6ZSwgb3Bjb2RlU3Ry
dQogICAgIGdldChzaXplLCBvcGNvZGVTdHJ1Y3QsIGRzdFZpcnR1YWxSZWdpc3RlciwgdDEpCiAg
ICAgc3RvcmVxIHIwLCBbY2ZyLCB0MSwgOF0KICAgICBtZXRhZGF0YShzaXplLCBvcGNvZGVTdHJ1
Y3QsIHQyLCB0MSkKLSAgICB2YWx1ZVByb2ZpbGUob3Bjb2RlU3RydWN0LCB2YWx1ZVByb2ZpbGVO
YW1lLCB0MiwgcjApCisgICAgdmFsdWVQcm9maWxlKG9wY29kZVN0cnVjdCwgdmFsdWVQcm9maWxl
TmFtZSwgdDIsIHIwLCB0MykKICAgICBkaXNwYXRjaCgpCiBlbmQKIApAQCAtNDQxLDggKzQ0Miwx
MyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgICAgICAgICBtb3ZlIFBD
LCBhMQogICAgICAgICAgICAgY0NhbGwyKF9sbGludF9sb29wX29zcikKICAgICAgICAgICAgIGJ0
cHogcjAsIC5yZWNvdmVyCi0KICAgICAgICAgICAgIG1vdmUgcjEsIHNwCisKKyAgICAgICAgICAg
ICMgQmFzZWxpbmUgdXNlcyBMTEludCdzIFBCIHJlZ2lzdGVyIGZvciBpdHMgSklUIGNvbnN0YW50
IHBvb2wuCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKKyAgICAgICAgICAg
IGxvYWRwIENvZGVCbG9jazo6bV9qaXREYXRhW1BCXSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENv
ZGVCbG9jazo6SklURGF0YTo6bV9qaXRDb25zdGFudFBvb2xbUEJdLCBQQgorCiAgICAgICAgICAg
ICBpZiBBUk02NEUKICAgICAgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBK
U0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6bG9vcE9TUkVu
dHJ5KSAqIFB0clNpemUsIGEyCiAgICAgICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklU
R2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKQEAgLTEwNTYsMTAgKzEwNjIsNiBAQCBzdHJpY3RF
cXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5h
bWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFk
YXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxl
KHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDJdCi0gICAgICAgIGVu
ZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGxvYWRxIFtjZnIsIHQwLCA4
XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpAQCAtMTA2OSw3ICsxMDcxLDcgQEAgbWFj
cm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICBpbnRlZ2VyT3Bl
cmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51bWJlclRhZywgdDEKICAgICAgICAgc3Rv
cmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJv
ZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBB
cml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6
CkBAIC0xMTM0LDExICsxMTM2LDYgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
bmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBy
ZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3Jo
IHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCiAgICAgbWV0YWRhdGEodDEsIHQy
KQpAQCAtMTE0NiwxMiArMTE0MywxMiBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwg
T3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5l
Z2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0
aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRo
UHJvZmlsZUludCwgdDEsIHQyKQogICAgIHJldHVybih0MykKIC5vcE5lZ2F0ZU5vdEludDoKICAg
ICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JxIDB4ODAwMDAwMDAw
MDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQor
ICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIs
IHQxLCB0MikKICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTY0LDEwICsx
MTYxLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgIGxs
aW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChz
aXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0YSh0
NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5
cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fcmhzLCB0
MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZShzaXplLCB0MCwgdDEpCkBAIC0xMTc3LDcgKzExNzAsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3Rv
bVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGlu
dGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5zbG93LCB0MikKIAotICAgICAgICBwcm9m
aWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxl
KG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGRpc3Bh
dGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTg3LDEwICsxMTgwLDEwIEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYnRxeiB0MSwgbnVtYmVy
VGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwg
ZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1
cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJO
dW1iZXIsIHQ1LCB0MikKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJ
bnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAg
ICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1i
ZXJJbnQsIHQ1LCB0MikKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgIC5vcDFOb3RJbnRSZWFk
eToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEyMDQsOSArMTE5Nyw5IEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKIAogICAgIC5vcDJOb3RJbnQ6CiAgICAg
ICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBpcyBk
ZWZpbml0ZWx5IG5vdC4KLSAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYnRxeiB0MSwg
bnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikK
KyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9m
aWxlSW50TnVtYmVyLCB0NSwgdDIpCisgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGNp
MmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEs
IGZ0MQpAQCAtMTUwOSw3ICsxNTAyLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlf
aWRfZGlyZWN0LAogICAgIGJpbmVxIHQwLCB0MSwgLm9wR2V0QnlJZERpcmVjdFNsb3cKICAgICBs
b2FkaSBPcEdldEJ5SWREaXJlY3Q6Ok1ldGFkYXRhOjptX29mZnNldFt0Ml0sIHQxCiAgICAgbG9h
ZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQwKQotICAgIHZhbHVlUHJvZmlsZShP
cEdldEJ5SWREaXJlY3QsIG1fcHJvZmlsZSwgdDIsIHQwKQorICAgIHZhbHVlUHJvZmlsZShPcEdl
dEJ5SWREaXJlY3QsIG1fcHJvZmlsZSwgdDIsIHQwLCB0MSkKICAgICByZXR1cm4odDApCiAKIC5v
cEdldEJ5SWREaXJlY3RTbG93OgpAQCAtMTUyOSw3ICsxNTIyLDcgQEAgbWFjcm8gcGVyZm9ybUdl
dEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LAogICAgIGJpbmVxIHQwLCB0MSwgc2xvd0xhYmVsCiAg
ICAgbG9hZGlzICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6JW1vZGVNZXRhZGF0YU5hbWUlLmRl
ZmF1bHRNb2RlLmNhY2hlZE9mZnNldFt0Ml0sIHQxCiAgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJs
ZU9mZnNldCh0MSwgdDMsIHQwKQotICAgIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHZhbHVl
UHJvZmlsZU5hbWUsIHQyLCB0MCkKKyAgICB2YWx1ZVByb2ZpbGUob3Bjb2RlU3RydWN0LCB2YWx1
ZVByb2ZpbGVOYW1lLCB0MiwgdDAsIHQxKQogICAgIHJldHVybih0MCkKIAogLm9wR2V0QnlJZFBy
b3RvTG9hZDoKQEAgLTE1NDAsNyArMTUzMyw3IEBAIG1hY3JvIHBlcmZvcm1HZXRCeUlESGVscGVy
KG9wY29kZVN0cnVjdCwKICAgICBsb2FkaXMgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolbW9k
ZU1ldGFkYXRhTmFtZSUucHJvdG9Mb2FkTW9kZS5jYWNoZWRPZmZzZXRbdDJdLCB0MQogICAgIGxv
YWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6JW1vZGVNZXRhZGF0YU5hbWUlLnByb3RvTG9h
ZE1vZGUuY2FjaGVkU2xvdFt0Ml0sIHQzCiAgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNl
dCh0MSwgdDMsIHQwKQotICAgIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmls
ZU5hbWUsIHQyLCB0MCkKKyAgICB2YWx1ZVByb2ZpbGUob3Bjb2RlU3RydWN0LCB2YWx1ZVByb2Zp
bGVOYW1lLCB0MiwgdDAsIHQxKQogICAgIHJldHVybih0MCkKIAogLm9wR2V0QnlJZEFycmF5TGVu
Z3RoOgpAQCAtMTU1MywxNCArMTU0NiwxNCBAQCBtYWNybyBwZXJmb3JtR2V0QnlJREhlbHBlcihv
cGNvZGVTdHJ1Y3QsCiAgICAgbG9hZGkgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5n
SGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QwXSwgdDAKICAgICBiaWx0IHQwLCAwLCBz
bG93TGFiZWwKICAgICBvcnEgbnVtYmVyVGFnLCB0MAotICAgIHZhbHVlUHJvZmlsZShvcGNvZGVT
dHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIHQyLCB0MCkKKyAgICB2YWx1ZVByb2ZpbGUob3Bjb2Rl
U3RydWN0LCB2YWx1ZVByb2ZpbGVOYW1lLCB0MiwgdDAsIHQxKQogICAgIHJldHVybih0MCkKIAog
Lm9wR2V0QnlJZFVuc2V0OgogICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0M10sIHQx
CiAgICAgbG9hZGkgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRhTmFtZSUu
dW5zZXRNb2RlLnN0cnVjdHVyZUlEW3QyXSwgdDAKICAgICBiaW5lcSB0MCwgdDEsIHNsb3dMYWJl
bAotICAgIHZhbHVlUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHZhbHVlUHJvZmlsZU5hbWUsIHQyLCBW
YWx1ZVVuZGVmaW5lZCkKKyAgICB2YWx1ZVByb2ZpbGUob3Bjb2RlU3RydWN0LCB2YWx1ZVByb2Zp
bGVOYW1lLCB0MiwgVmFsdWVVbmRlZmluZWQsIHQxKQogICAgIHJldHVybihWYWx1ZVVuZGVmaW5l
ZCkKIAogZW5kCkBAIC0xNTc3LDcgKzE1NzAsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dl
dF9ieV9pZCwgT3BHZXRCCiAub3NyUmV0dXJuUG9pbnQ6CiAgICAgZ2V0dGVyU2V0dGVyT1NSRXhp
dFJldHVyblBvaW50KG9wX2dldF9ieV9pZCwgc2l6ZSkKICAgICBtZXRhZGF0YSh0MiwgdDMpCi0g
ICAgdmFsdWVQcm9maWxlKE9wR2V0QnlJZCwgbV9wcm9maWxlLCB0MiwgcjApCisgICAgdmFsdWVQ
cm9maWxlKE9wR2V0QnlJZCwgbV9wcm9maWxlLCB0MiwgcjAsIHQzKQogICAgIHJldHVybihyMCkK
IAogZW5kKQpAQCAtMTY5OCw3ICsxNjkxLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRf
YnlfdmFsLCBPcEdldAogICAgIG1hY3JvIGZpbmlzaEdldEJ5VmFsKHJlc3VsdCwgc2NyYXRjaCkK
ICAgICAgICAgZ2V0KG1fZHN0LCBzY3JhdGNoKQogICAgICAgICBzdG9yZXEgcmVzdWx0LCBbY2Zy
LCBzY3JhdGNoLCA4XQotICAgICAgICB2YWx1ZVByb2ZpbGUoT3BHZXRCeVZhbCwgbV9wcm9maWxl
LCB0NSwgcmVzdWx0KQorICAgICAgICB2YWx1ZVByb2ZpbGUoT3BHZXRCeVZhbCwgbV9wcm9maWxl
LCB0NSwgcmVzdWx0LCBzY3JhdGNoKQogICAgICAgICBkaXNwYXRjaCgpCiAgICAgZW5kCiAKQEAg
LTE3NTksNyArMTc1Miw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X3ZhbCwgT3BH
ZXQKIAogLm9wR2V0QnlWYWxEb25lOgogICAgIHN0b3JlcSB0MiwgW2NmciwgdDAsIDhdCi0gICAg
dmFsdWVQcm9maWxlKE9wR2V0QnlWYWwsIG1fcHJvZmlsZSwgdDUsIHQyKQorICAgIHZhbHVlUHJv
ZmlsZShPcEdldEJ5VmFsLCBtX3Byb2ZpbGUsIHQ1LCB0MiwgdDMpCiAgICAgZGlzcGF0Y2goKQog
CiAub3BHZXRCeVZhbE5vdEluZGV4ZWRTdG9yYWdlOgpAQCAtMTc3Miw3ICsxNzY1LDcgQEAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfdmFsLCBPcEdldAogLm9zclJldHVyblBvaW50Ogog
ICAgIGdldHRlclNldHRlck9TUkV4aXRSZXR1cm5Qb2ludChvcF9nZXRfYnlfdmFsLCBzaXplKQog
ICAgIG1ldGFkYXRhKHQ1LCB0MikKLSAgICB2YWx1ZVByb2ZpbGUoT3BHZXRCeVZhbCwgbV9wcm9m
aWxlLCB0NSwgcjApCisgICAgdmFsdWVQcm9maWxlKE9wR2V0QnlWYWwsIG1fcHJvZmlsZSwgdDUs
IHIwLCB0MikKICAgICByZXR1cm4ocjApCiAKIGVuZCkKQEAgLTE3OTQsNyArMTc4Nyw3IEBAIGxs
aW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X3ByaXZhdGVfbmFtZSwKIAogICAgIGxvYWRpIE9wR2V0
UHJpdmF0ZU5hbWU6Ok1ldGFkYXRhOjptX29mZnNldFt0Ml0sIHQxCiAgICAgbG9hZFByb3BlcnR5
QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQwKQotICAgIHZhbHVlUHJvZmlsZShPcEdldFByaXZh
dGVOYW1lLCBtX3Byb2ZpbGUsIHQyLCB0MCkKKyAgICB2YWx1ZVByb2ZpbGUoT3BHZXRQcml2YXRl
TmFtZSwgbV9wcm9maWxlLCB0MiwgdDAsIHQzKQogICAgIHJldHVybih0MCkKIAogLm9wR2V0UHJp
dmF0ZU5hbWVTbG93OgpAQCAtMjY2Miw3ICsyNjU1LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF9nZXRfZnJvbV9zY29wZSwgTwogICAgIG1hY3JvIGdldFByb3BlcnR5KCkKICAgICAgICAgbG9h
ZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MQogICAgICAgICBs
b2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIpCi0gICAgICAgIHZhbHVlUHJv
ZmlsZShPcEdldEZyb21TY29wZSwgbV9wcm9maWxlLCB0NSwgdDIpCisgICAgICAgIHZhbHVlUHJv
ZmlsZShPcEdldEZyb21TY29wZSwgbV9wcm9maWxlLCB0NSwgdDIsIHQzKQogICAgICAgICByZXR1
cm4odDIpCiAgICAgZW5kCiAKQEAgLTI2NzAsMTQgKzI2NjMsMTQgQEAgbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF9nZXRfZnJvbV9zY29wZSwgTwogICAgICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6
TWV0YWRhdGE6Om1fb3BlcmFuZFt0NV0sIHQwCiAgICAgICAgIGxvYWRxIFt0MF0sIHQwCiAgICAg
ICAgIHRkekNoZWNrSWZOZWNlc3NhcnkodDApCi0gICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEZy
b21TY29wZSwgbV9wcm9maWxlLCB0NSwgdDApCisgICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEZy
b21TY29wZSwgbV9wcm9maWxlLCB0NSwgdDAsIHQzKQogICAgICAgICByZXR1cm4odDApCiAgICAg
ZW5kCiAKICAgICBtYWNybyBnZXRDbG9zdXJlVmFyKCkKICAgICAgICAgbG9hZHAgT3BHZXRGcm9t
U2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MQogICAgICAgICBsb2FkcSBKU0xleGlj
YWxFbnZpcm9ubWVudF92YXJpYWJsZXNbdDAsIHQxLCA4XSwgdDAKLSAgICAgICAgdmFsdWVQcm9m
aWxlKE9wR2V0RnJvbVNjb3BlLCBtX3Byb2ZpbGUsIHQ1LCB0MCkKKyAgICAgICAgdmFsdWVQcm9m
aWxlKE9wR2V0RnJvbVNjb3BlLCBtX3Byb2ZpbGUsIHQ1LCB0MCwgdDMpCiAgICAgICAgIHJldHVy
bih0MCkKICAgICBlbmQKIApAQCAtMzE1OSw3ICszMTUyLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF9lbnVtZXJhdG9yX2dldF9ieQogICAgIGxvYWRxIGNvbnN0ZXhwciAoKG9mZnNldEluQnV0
dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKVt0
MCwgdDIsIDhdLCB0MgogCiAuZG9uZToKLSAgICB2YWx1ZVByb2ZpbGUoT3BFbnVtZXJhdG9yR2V0
QnlWYWwsIG1fcHJvZmlsZSwgdDUsIHQyKQorICAgIHZhbHVlUHJvZmlsZShPcEVudW1lcmF0b3JH
ZXRCeVZhbCwgbV9wcm9maWxlLCB0NSwgdDIsIHQzKQogICAgIHJldHVybih0MikKIAogLmdldFNs
b3dQYXRoOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDEyLDcgKzE0MTIsOCBAQCBlbmQKIAogbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQs
IGFjdGlvbikKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBiYWRkaXMgaW5jcmVt
ZW50LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9u
Q291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCisgICAgbG9hZHAgQ29kZUJsb2NrOjpt
X2xsaW50RXhlY3V0ZUNvdW50ZXJbdDBdLCB0MAorICAgIGJhZGRpcyBpbmNyZW1lbnQsIEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgYWN0aW9u
KCkKICAgICAuY29udGludWU6CiBlbmQKQEAgLTE0OTUsNyArMTQ5Niw4IEBAIG1hY3JvIHByb2xv
Z3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2MKICAgICBjb2RlQmxvY2tHZXR0ZXIodDEpCiAg
ICAgY29kZUJsb2NrU2V0dGVyKHQxKQogICAgIGlmIG5vdCAoQ19MT09QIG9yIENfTE9PUF9XSU4p
Ci0gICAgICAgIGJhZGRpcyA1LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJh
c2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QxXSwgLmNvbnRpbnVlCisgICAgICAg
IGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyW3QxXSwgdDAKKyAgICAgICAg
YmFkZGlzIDUsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRp
bnVlCiAgICAgICAgIGlmIEpTVkFMVUU2NAogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAg
ICAgICAgICBtb3ZlIFBDLCBhMQpAQCAtMTYwOSwxNCArMTYxMSwxNiBAQCBtYWNybyBmdW5jdGlv
bkluaXRpYWxpemF0aW9uKHByb2ZpbGVBcmdTCiAgICAgIyBvcHRpbWFsIHdheSBmb3IgYXJjaGl0
ZWN0dXJlcyB0aGF0IGhhdmUgbW9yZSB0aGFuIGZpdmUgcmVnaXN0ZXJzIGF2YWlsYWJsZQogICAg
ICMgZm9yIGFyYml0cmFyeSB1c2UgaW4gdGhlIGludGVycHJldGVyLgogICAgIGxvYWRpIENvZGVC
bG9jazo6bV9udW1QYXJhbWV0ZXJzW3QxXSwgdDAKLSAgICBhZGRwIC1wcm9maWxlQXJnU2tpcCwg
dDAgIyBVc2UgYWRkaSBiZWNhdXNlIHRoYXQncyB3aGF0IGhhcyB0aGUgcGVlcGhvbGUKKyAgICBh
ZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAKICAgICBhc3NlcnQobWFjcm8gKG9rKSBicGd0ZXEgdDAs
IDAsIG9rIGVuZCkKICAgICBidHB6IHQwLCAuYXJndW1lbnRQcm9maWxlRG9uZQotICAgIGxvYWRw
IENvZGVCbG9jazo6bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMgKyBGaXhlZFZlY3Rvcjo6bV9zdG9y
YWdlICsgUmVmQ291bnRlZEFycmF5OjptX2RhdGFbdDFdLCB0MworICAgIGxvYWRwIENvZGVCbG9j
azo6bV91bmxpbmtlZENvZGVbdDFdLCB0MworICAgICMgT09QUzogUmVtb3ZlIGJyYW5jaCBvciBy
ZW1ha2UgaXQgc28gd2UgY2FuIHNraXAgdGhpcyB3LyBKSVQgZGlzYWJsZWQuCisgICAgbG9hZHAg
VW5saW5rZWRDb2RlQmxvY2s6Om1fdmFsdWVQcm9maWxlcyArIEZpeGVkVmVjdG9yOjptX3N0b3Jh
Z2UgKyBSZWZDb3VudGVkQXJyYXk6Om1fZGF0YVt0M10sIHQzCiAgICAgYnRweiB0MywgLmFyZ3Vt
ZW50UHJvZmlsZURvbmUgIyBXaGVuIHdlIGNhbid0IEpJVCwgd2UgZG9uJ3QgYWxsb2NhdGUgYW55
IGFyZ3VtZW50IHZhbHVlIHByb2ZpbGVzLgogICAgIG11bHAgc2l6ZW9mIFZhbHVlUHJvZmlsZSwg
dDAsIHQyICMgQWFhYWFoaGhoISBOZWVkIHN0cmVuZ3RoIHJlZHVjdGlvbiEKICAgICBsc2hpZnRw
IDMsIHQwICMgb2Zmc2V0IG9mIGxhc3QgSlNWYWx1ZSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLgot
ICAgIGFkZHAgdDIsIHQzICMgcG9pbnRlciB0byBlbmQgb2YgVmFsdWVQcm9maWxlIGFycmF5IGlu
IENvZGVCbG9jazo6bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuCisgICAgYWRkcCB0MiwgdDMgIyBw
b2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gdGhlIHZhbHVlIHByb2ZpbGUg
YXJyYXkuCiAuYXJndW1lbnRQcm9maWxlTG9vcDoKICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAg
bG9hZHEgVGhpc0FyZ3VtZW50T2Zmc2V0IC0gOCArIHByb2ZpbGVBcmdTa2lwICogOFtjZnIsIHQw
XSwgdDIKQEAgLTI1NTYsNiArMjU2MCwxNyBAQCBtYWNybyBub3RTdXBwb3J0ZWQoKQogICAgIGVu
ZAogZW5kCiAKKworbWFjcm8gdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0
eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBVbmFyeUFyaXRo
UHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKworbWFjcm8gdXBkYXRlQmluYXJ5QXJpdGhQcm9m
aWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBv
cmggdHlwZSwgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCiAvLyBGSVhN
RTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRoZSBYODZfNjRfV0lOIGNvbmRpdGlvbiBoZXJlLCBzaW5j
ZSBXRUJBU1NFTUJMWSBzaG91bGQgYWxyZWFkeSBiZSBmYWxzZSBvbiBXaW5kb3dzCiAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNzE2CiBpZiBXRUJBU1NFTUJM
WSBhbmQgbm90IFg4Nl82NF9XSU4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsOCArNDgsMTAgQEAgcHVibGljOgogICAgIENhY2hlYWJsZUlkZW50aWZp
ZXIoKSA9IGRlZmF1bHQ7CiAKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Y3JlYXRlRnJvbUNlbGwoSlNDZWxsKiBpZGVudGlmaWVyKTsKLSAgICBzdGF0aWMgaW5saW5lIENh
Y2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENv
ZGVCbG9jayosIGNvbnN0IElkZW50aWZpZXImKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJs
ZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9j
ayosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9j
a1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgY29uc3QgSWRlbnRpZmll
ciYpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBp
bmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2soQ29kZUJsb2NrVHlwZSosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGlu
bGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoVW5p
cXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgY29uc3RleHByIENhY2hlYWJsZUlkZW50aWZp
ZXIgY3JlYXRlRnJvbVJhd0JpdHModWludHB0cl90IHJhd0JpdHMpIHsgcmV0dXJuIENhY2hlYWJs
ZUlkZW50aWZpZXIocmF3Qml0cyk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCShyZXZp
c2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTQgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sq
IGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2Rl
QmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNv
ZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaSkKIHsKICAgICByZXR1cm4gY3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKGNvZGVCbG9jaywgaS5pbXBsKCkpOwogfQogCi1pbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBD
YWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGNvZGVCbG9jay0+
aGFzSWRlbnRpZmllcih1aWQpKTsKICAgICByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcih1aWQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNw
cAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVkVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FjaGVkVHlwZXMuaCIKIAorI2luY2x1ZGUgIkJhc2VsaW5l
SklUQ29kZS5oIgogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2Rl
Q2FjaGVFcnJvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwCShyZXZpc2lvbiAyODIwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgUFJPRklMRV9WQUxVRV9JTih2YWx1ZV9fLCBtX3Byb2ZpbGUpCiAK
ICNkZWZpbmUgUFJPRklMRV9WQUxVRV9JTih2YWx1ZSwgcHJvZmlsZU5hbWUpIGRvIHsgXAotICAg
ICAgICBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLnByb2ZpbGVOYW1lLm1fYnVja2V0c1sw
XSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7IFwKKyAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEo
Y29kZUJsb2NrKS5wcm9maWxlTmFtZS0+bV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlKTsgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCiBzdGF0aWMgdm9pZCB0aHJvd0FyaXR5Q2hl
Y2tTdGFja092ZXJmbG93RXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGhyb3dT
Y29wZSYgc2NvcGUpCkBAIC00ODAsNyArNDgwLDcgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19Q
QVRIKHNsb3dfcGF0aF90bwogI2lmIEVOQUJMRShKSVQpCiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0
aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3AoT3BOZWdhdGU6Ok1ldGFkYXRhJiBtZXRhZGF0YSwgSlNW
YWx1ZSByZXN1bHQsIEpTVmFsdWUgb3BlcmFuZCkKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSYg
cHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworICAgIFVuYXJ5QXJpdGhQcm9maWxl
JiBwcm9maWxlID0gKm1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOwogICAgIHByb2ZpbGUub2JzZXJ2
ZUFyZyhvcGVyYW5kKTsKICAgICBBU1NFUlQocmVzdWx0LmlzTnVtYmVyKCkgfHwgcmVzdWx0Lmlz
QmlnSW50KCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
bkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4OSw2ICsyODksOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBv
ZmZzZXRPZlJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0
YWJsZSwgbV9yYXJlRGF0YSk7IH0KICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRP
ZkFzU3RyaW5nSW5SYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihSYXJlRGF0YSwg
bV9hc1N0cmluZyk7IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVC
bG9ja0ZvckNhbGwoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxl
LCBtX2NvZGVCbG9ja0ZvckNhbGwpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zm
c2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVu
Y3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7IH0KIAogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NSw2
ICszODUsOSBAQCBzdGF0aWMgdm9pZCBvdmVycmlkZURlZmF1bHRzKCkKICAgICAgICAgT3B0aW9u
czo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpID0gMTUwMDsKICAgICAgICAg
T3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkgPSAxMDA7CiAgICAgfQorCisg
ICAgLy8gT09QUworICAgIC8vT3B0aW9uczo6bWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5D
aGVja3BvaW50c0ZvckJhc2VsaW5lKCkgPSA0NTA7CiB9CiAKIHN0YXRpYyB2b2lkIGNvcnJlY3RP
cHRpb25zKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw2IEBAIGJvb2wgY2Fu
VXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihJbnQzMiwgZXZhbFRocmVzaG9sZE11
bHRpcGxpZXIsIDEwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBtYXhpbXVt
RXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0aCwgMjU2LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBc
Ci0gICAgdihCb29sLCByYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMs
IGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9u
Q291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yQmFzZWxpbmUsIDEwMDAsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2lu
dHNGb3JVcHBlclRpZXJzLCA1MDAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXApAQCAtNTMy
LDYgKzUzMSw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihC
b29sLCB1c2VEYXRhSUMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVz
ZURhdGFJQ0luT3B0aW1pemluZ0pJVCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYo
Qm9vbCwgdXNlRGF0YUlDU2hhcmluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYo
Qm9vbCwgdXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgXAogICAgIC8qIEZlYXR1cmUgRmxhZ3MgKi9cCiAgICAgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlz
aW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1
dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsOSArMzk2LDExIEBAIHZvaWQgU2NyaXB0
RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGkKICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVC
eXRlY29kZSgpKQogICAgICAgICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7CiAKLSAgICBpZiAoT3B0
aW9uczo6dXNlTExJbnQoKSkKKyAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gYmFzZWxp
bmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGlu
ZUNvZGUpIHsKKyAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29k
ZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9IGVsc2UgaWYgKE9wdGlvbnM6
OnVzZUxMSW50KCkpIHsKICAgICAgICAgc2V0dXBMTEludChjb2RlQmxvY2spOwotICAgIGVsc2UK
KyAgICB9IGVsc2UKICAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CiAKICAgICBpbnN0
YWxsQ29kZSh2bSwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmNvZGVUeXBlKCksIGNvZGVCbG9jay0+
c3BlY2lhbGl6YXRpb25LaW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUxMSW50VGllclVwQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkocmV2aXNpb24gMjgyMDE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0
ZXJXYXJtVXAoKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBU
b0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZv
ckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdU
aHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldhcm1VcCgpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBz
ZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1V
cCgpKTsKICAgICB9CiAKICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFj
aGVkKCkKQEAgLTY1LDkgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVTb29uKCkK
ICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9CQlEoKSkKLSAg
ICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6
ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6
dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29uKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCks
IG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9s
ZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICBzdHJ1Y3QgT1NSRW50cnlEYXRh
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50
LmNwcAkocmV2aXNpb24gMjgyMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVRpZXJVcENvdW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBUaWVyVXBDb3VudDo6VGllclVwQ291bnQoKQog
ewotICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFm
dGVyV2FybVVwKCksIG51bGxwdHIpOworICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJl
c2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogfQogCiBUaWVyVXBDb3VudDo6flRp
ZXJVcENvdW50KCkgPSBkZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVRpZXJVcENvdW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRpZXJVcENvdW50LmgJKHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3
Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAodWludDMyX3QgZnVu
Y3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgYWZ0ZXIgd2FybS11cC4iKTsK
LSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXpl
QWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25z
Ojp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0KIAogICAgIGJv
b2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtOTAsMTQgKzkwLDE0
IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24odWludDMyX3QgZnVu
Y3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgbmV4dCBpbnZvY2F0aW9uLiIp
OwotICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1Ro
cmVzaG9sZCgwKTsKICAgICB9CiAKICAgICB2b2lkIG9wdGltaXplU29vbih1aW50MzJfdCBmdW5j
dGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBzb29uLiIpOwogICAgICAgICAv
LyBGSVhNRTogTmVlZCBhZGp1c3RtZW50IG9uY2Ugd2UgZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJv
dXQgd2FzbSBmdW5jdGlvbnMuCi0gICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJl
c2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVz
aG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAgICAgfQogCiAg
ICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQo
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQpJbmRleDog
U291cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJ
KHJldmlzaW9uIDI4MjAxNikKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw2ICs2NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxw
dHI7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBCYWcmIG9wZXJhdG9y
PShCYWc8VCwgVT4mJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh1bndyYXBwZWRIZWFkKCkg
PT0gb3RoZXIudW53cmFwcGVkSGVhZCgpKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworCisg
ICAgICAgIEJhZyBkZXN0cm95OworICAgICAgICBkZXN0cm95Lm1faGVhZCA9IHVud3JhcHBlZEhl
YWQoKTsKKyAgICAgICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgpOworICAgICAgICBv
dGhlci5tX2hlYWQgPSBudWxscHRyOworCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisK
ICAgICB+QmFnKCkKICAgICB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBUb29scy9TY3JpcHRz
L3J1bi1qc2Mtc3RyZXNzLXRlc3RzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVuLWpz
Yy1zdHJlc3MtdGVzdHMJKHJldmlzaW9uIDI4MjAxNikKKysrIFRvb2xzL1NjcmlwdHMvcnVuLWpz
Yy1zdHJlc3MtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTc3MCwxNyArNzcwLDE4IEBAIGVuZAog
CiAjIEZJWE1FOiBuZWVkIHRvIGZpeCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE4NzAzIHRvIGVuYWJsZSB0aGlzIG9uIExpbnV4L01JUFMuCiBkZWYgcnVuQnl0ZWNv
ZGVDYWNoZUltcGwob3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zLCAqYWRkaXRpb25hbEVudikK
LSAgICBpZiAoJGhvc3RPUyA9PSAiZGFyd2luIikKLSAgICAgICAgZmlsZVRlbXBsYXRlID0gImJ5
dGVjb2RlLWNhY2hlIgotICAgIGVsc2lmICgkaG9zdE9TID09ICJsaW51eCIgJiYgJGFyY2hpdGVj
dHVyZSAhPSAibWlwcyIpCi0gICAgICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1jYWNoZVhY
WFhYWCIKLSAgICBlbHNlCi0gICAgICAgIHNraXAKLSAgICAgICAgcmV0dXJuCi0gICAgZW5kCisg
ICAgIyBPT1BTCisgICAgI2lmICgkaG9zdE9TID09ICJkYXJ3aW4iKQorICAgICMgICAgZmlsZVRl
bXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlIgorICAgICNlbHNpZiAoJGhvc3RPUyA9PSAibGludXgi
ICYmICRhcmNoaXRlY3R1cmUgIT0gIm1pcHMiKQorICAgICMgICAgZmlsZVRlbXBsYXRlID0gImJ5
dGVjb2RlLWNhY2hlWFhYWFhYIgorICAgICNlbHNlCisgICAgIyAgICBza2lwCisgICAgIyAgICBy
ZXR1cm4KKyAgICAjZW5kCiAKLSAgICBvcHRpb25zID0gQkFTRV9PUFRJT05TICsgRlRMX09QVElP
TlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMgKyAkdGVzdFNwZWNpZmljUmVxdWlyZWRP
cHRpb25zCi0gICAgYWRkUnVuQ29tbWFuZCgiYnl0ZWNvZGUtY2FjaGUiLCBbInNoIiwgKHBhdGhU
b0hlbHBlcnMgKyAiYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIuc2giKS50b19zLCBmaWxlVGVt
cGxhdGUudG9fcywgKnZtQ29tbWFuZCwgJGJlbmNobWFyay50b19zXSArIG9wdGlvbnMsIHNpbGVu
dE91dHB1dEhhbmRsZXIsIHNpbXBsZUVycm9ySGFuZGxlciwgKmFkZGl0aW9uYWxFbnYpCisgICAg
I29wdGlvbnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMKKyAgICAjYWRkUnVuQ29t
bWFuZCgiYnl0ZWNvZGUtY2FjaGUiLCBbInNoIiwgKHBhdGhUb0hlbHBlcnMgKyAiYnl0ZWNvZGUt
Y2FjaGUtdGVzdC1oZWxwZXIuc2giKS50b19zLCBmaWxlVGVtcGxhdGUudG9fcywgKnZtQ29tbWFu
ZCwgJGJlbmNobWFyay50b19zXSArIG9wdGlvbnMsIHNpbGVudE91dHB1dEhhbmRsZXIsIHNpbXBs
ZUVycm9ySGFuZGxlciwgKmFkZGl0aW9uYWxFbnYpCiBlbmQKIAogZGVmIHJ1bkJ5dGVjb2RlQ2Fj
aGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438430</attachid>
            <date>2021-09-16 19:10:43 -0700</date>
            <delta_ts>2021-09-16 19:18:57 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>455271</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjYyMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAJ
KHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJh
eVByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMyLDcgQEAgdm9pZCBBcnJh
eVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJlZGljdAogewogICAgIG1fb2JzZXJ2ZWRBcnJheU1v
ZGVzIHw9IGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKGxhc3RTZWVuU3RydWN0dXJlKTsKICAgICAK
KyAgICAvLyBPT1BTOiBJcyBpdCBvayBmb3IgdGhpcyB0byByYWNlPyBJIHRoaW5rIHNvLgogICAg
IGlmICghbV9kaWRQZXJmb3JtRmlyc3RSdW5QcnVuaW5nCiAgICAgICAgICYmIGhhc1R3b09yTW9y
ZUJpdHNTZXQobV9vYnNlcnZlZEFycmF5TW9kZXMpKSB7CiAgICAgICAgIG1fb2JzZXJ2ZWRBcnJh
eU1vZGVzID0gYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUobGFzdFNlZW5TdHJ1Y3R1cmUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCShy
ZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsOSArMjkwLDEwIEBAIG9wX2dyb3VwIDpQ
cm9maWxlZEJpbmFyeU9wLAogICAgICAgICBsaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAg
cmhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVz
LAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkCiAgICAgfSwKICAgICBtZXRhZGF0YTog
ewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0
aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9ncm91cCA6VmFsdWVQ
cm9maWxlZEJpbmFyeU9wLApAQCAtMzUxLDkgKzM1MiwxMCBAQCBvcF9ncm91cCA6VW5hcnlJblBs
YWNlUHJvZmlsZWRPcCwKICAgICBdLAogICAgIGFyZ3M6IHsKICAgICAgICAgc3JjRHN0OiBWaXJ0
dWFsUmVnaXN0ZXIsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlCisg
ICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3AgOnRv
X29iamVjdCwKQEAgLTM4NCw5ICszODYsMTAgQEAgb3AgOm5lZ2F0ZSwKICAgICAgICAgZHN0OiBW
aXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmQ6IFZpcnR1YWxSZWdpc3RlciwKICAgICAg
ICAgcmVzdWx0VHlwZTogUmVzdWx0VHlwZSwKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUsCisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgog
ICAgIH0KIAogb3AgOm5vdCwKQEAgLTQ3OCw2ICs0ODEsNyBAQCBvcCA6Z2V0X2J5X2lkLAogICAg
IG1ldGFkYXRhOiB7CiAgICAgICAgIG1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwK
ICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFy
cmF5UHJvZmlsZSwKICAgICB9CiAKIG9wIDpnZXRfYnlfaWRfd2l0aF90aGlzLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
T3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Myw2ICs3MywyOCBAQCBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZv
ckltcGwoQnl0ZWNvCiAgICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9maWxlOwogfQogCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQcm9maWxlT2Zmc2V0
Rm9yKHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURfUEFSQU0oY2hlY2tw
b2ludEluZGV4KTsKKyAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9p
dGVyYXRvcl9vcGVuKSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAg
ICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mSXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck9wZW46OmdldE5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFBy
b2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlE
ID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgp
IHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJldHVybiBCeXRl
Y29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKKyAgICAgICAgY2Fz
ZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZEb25lUHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1
ZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2ZpbGUoKTsKKyAg
ICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSAKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZQ
cm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29s
IGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQg
Y2hlY2twb2ludEluZGV4KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJF
TEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsKIH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4g
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFy
dCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5m
bzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpA
QCAtMjI1LDYgKzIyMCwxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0TWF4QXJndW1lbnRDb3Vu
dEluCiAgICAgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZhbHVlOwogfQogCitD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRo
U3RhcnQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkgJiYgaXNUYWlsQ2FsbCgp
KTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+
KHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNp
dFdlYWsoVk0mIHZtKQogewogICAgIGF1dG8gaGFuZGxlU3BlY2lmaWNDYWxsZWUgPSBbJl0gKEpT
RnVuY3Rpb24qIGNhbGxlZSkgewpAQCAtMjk4LDIzICsyOTksMTEgQEAgdm9pZCBDYWxsTGlua0lu
Zm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5r
VG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1p
dEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBV
c2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsK
LSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0lu
Zm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwotICAgICAgICB1
LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAgICB9Ci0KLSAg
ICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsK
LSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKLSAgICBp
ZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlDOjpZZXMpIHsK
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7CiAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMxMiw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMgPSBqaXQuYnJh
bmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkg
eworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxD
YWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8vIFBvbHltb3Jw
aGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAgICAgIGppdC5m
YXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mTW9u
b21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAtMzM2LDE0ICsz
MjUsMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKLSAgICAg
ICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAg
ICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJU
YWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhckNh
bGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwogICAgICAgICBq
aXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAg
ICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsZWVM
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxsZWVD
aGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbExvY2F0aW9u
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7
CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOwogICAg
ICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzQ0LDM0IEBAIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0
LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRyKTsKKyAgICBz
ZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJl
Zyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwg
Y2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBj
YWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhp
cywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBpc1RhaWxDYWxs
KCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxs
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBX
VEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJ
Qzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BS
LCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdURk1vdmUocHJl
cGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxl
ZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxs
TGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aElt
cGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZ
ZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxM
aW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJ
bmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51
bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCB0
cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0zNjksMTcgKzM4
MSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgCiAgICAgaml0
LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQ
YXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9pZCBDYWxsTGlu
a0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5m
bzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7
Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2bSwgVW5saW5r
ZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcgY2FsbGVlR1BSLCBH
UFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4o
dW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgc2V0VXBDYWxsKHVubGlu
a2VkQ2FsbExpbmtJbmZvLmNhbGxUeXBlLCBjYWxsZWVHUFIpOworICAgIG1fZG9uZUxvY2F0aW9u
ID0gdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtlZENh
bGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKQorICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEg
PSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigqdW5saW5rZWRDYWxsTGlua0luZm8u
ZnJhbWVTaHVmZmxlRGF0YSk7IC8vIE9PUFM6IHRpbWUgZm9yIHJlZiBjb3VudGluZz8KKyAgICBz
ZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24o
dm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENv
ZGU8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFp
bENhbGwoKSk7CiAKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKIAotICAgIGF1
dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAg
IH0pOwotCiAgICAgYXV0byBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICB1LmNvZGVJQy5tX2Nh
bGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+KGNhbGwpOwpAQCAtMzk3LDcgKzQyMiw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGly
ZWN0VGFpbENhbGxGYXMKIAogICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwog
ICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KGZhc3RQYXRoU3RhcnQpOworICAgICAgICB1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CiAg
ICAgfSk7CiAKICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEganVt
cCB0byB0aGUgc2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0
MywxMSBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogc3Ry
dWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87
CisKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2Fs
bExpbmtJbmZvPiB7CiBwdWJsaWM6Ci0gICAgZW51bSBDYWxsVHlwZSB7CisgICAgZW51bSBDYWxs
VHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25lLAogICAgICAgICBDYWxsLAogICAgICAgICBD
YWxsVmFyYXJncywKQEAgLTE2NSw2ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGVl
R1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYs
IFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUik7CisKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxs
ZWVHUFI7IH0KICAgICAKICAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgewpAQCAt
MTczLDEzICsxNzcsMTYgQEAgcHVibGljOgogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5r
SW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4g
cHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CisgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVT
RURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxD
YWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2Fs
bCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxD
YWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJik7CiAgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2
b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOworICAgIHN0YXRpYyB2b2lkIGVt
aXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpOwogICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVz
ZURhdGFJQzo6WWVzOyB9CkBAIC0yMDMsNyArMjEwLDYgQEAgcHVibGljOgogICAgICAgICBtX2Fs
bG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwogCkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9zbG93U3R1YiA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgSklUU3R1YlJv
dXRpbmUqIHNsb3dTdHViKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Nsb3dTdHViLmdldCgp
OwotICAgIH0KLQogICAgIGJvb2wgc2Vlbk9uY2UoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
aGFzU2VlblNob3VsZFJlcGF0Y2g7CkBAIC0zMDgsOSArMzA5LDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUpOwogICAgIH0KIAotICAg
IHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsK
KyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIH0KIAogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTM4MSw3ICszODIsOSBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFz
dFBhdGhTdGFydDsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZh
c3RQYXRoU3RhcnQoKTsKKwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC0z
OTcsNiArNDAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0
aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247CiAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoU3Rh
cnQ7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zh
c3RQYXRoU3RhcnQ7CiAgICAgICAgIH0gY29kZUlDOwogICAgIH0gdTsKIApAQCAtNDI0LDYgKzQy
OCwxMyBAQCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpCiAgICAgcmV0
dXJuIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCk7CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxM
aW5rSW5mbyB7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHks
IG9ubHkgdXNlZCBieSBiYXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBD
b2RlT3JpZ2luLgorICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307CisK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODI2
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2
bSwgU3RydWN0dXJlKiAKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBz
ZXROdW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7CisKKyAgICBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKICAg
ICAKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KQEAgLTMxOCw3ICsz
MjAsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDCiAgICAgZmlu
aXNoQ3JlYXRpb25Db21tb24odm0pOwogCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAg
IGppdEFmdGVyV2FybVVwKCk7CisgICAgLy9qaXRBZnRlcldhcm1VcCgpOwogCiAgICAgaWYgKG90
aGVyLm1fcmFyZURhdGEpIHsKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwpA
QCAtMzU5LDcgKzM2MSw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJl
KiAKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0
ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9s
bGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVy
KCk7CisKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcw
LDEwICszNzQsMTMgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAog
Ly8gd2UgY2FuJ3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24u
IFRoaXMgcHJvY2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93
IG9yIGludHJvZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkg
b24gbGl2ZW5lc3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVC
bG9ja3Mgb2YgYW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNh
Y2hpbmcgdGhlIGxpdmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2su
CisvLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlz
IHNoYXJlZCBiZXR3ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAor
Ly8gc28gdGhlIGJ5dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2Nr
cyBzaGFyaW5nIGFuIFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtl
ZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7Cisg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOyAvLyBXZSBuZWVkIHRvIHNldCB1cCBvdXIgdmFs
dWUgcHJvZmlsZSBwb2ludGVycy4KKwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKQEAgLTQzNSw3ICs0NDIsNyBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgLy8gQm9va2tlZXAgdGhlIHN0
cm9uZ2x5IHJlZmVyZW5jZWQgbW9kdWxlIGVudmlyb25tZW50cy4KICAgICBIYXNoU2V0PEpTTW9k
dWxlRW52aXJvbm1lbnQqPiBzdHJvbmdseVJlZmVyZW5jZWRNb2R1bGVFbnZpcm9ubWVudHM7CiAK
LSAgICBhdXRvIGxpbmtfcHJvZmlsZSA9IFsmXShjb25zdCBhdXRvJiAvKmluc3RydWN0aW9uKi8s
IGF1dG8gLypieXRlY29kZSovLCBhdXRvJiAvKm1ldGFkYXRhKi8pIHsKKyAgICBhdXRvIGxpbmtf
cHJvZmlsZSA9IFsmXShjb25zdCBhdXRvJiAvKmluc3RydWN0aW9uKi8sIGF1dG8gLypieXRlY29k
ZSovLCBhdXRvJikgewogICAgICAgICBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVz
Kys7CiAgICAgfTsKIApAQCAtNDY2LDYgKzQ3MywxOSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCisjZGVmaW5lIExJ
TktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBc
CisgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5t
X2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJ5dGVj
b2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUg
TElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsg
XAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEu
bV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVj
b2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygp
OwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkg
ewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpA
QCAtNDk5LDkgKzUxOSw5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IFMKIAogICAgICAgICBMSU5LKE9wR2V0QnlJZCwgcHJvZmlsZSkKIAotICAgICAgICBMSU5LKE9w
RW51bWVyYXRvck5leHQsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BFbnVtZXJhdG9ySW5CeVZh
bCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgcHJv
ZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JOZXh0KQorICAgICAgICBMSU5LKE9wRW51
bWVyYXRvckluQnlWYWwpCisgICAgICAgIExJTksoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkp
CiAgICAgICAgIExJTksoT3BFbnVtZXJhdG9yR2V0QnlWYWwsIHByb2ZpbGUpCiAKICAgICAgICAg
TElOSyhPcENhbGwsIHByb2ZpbGUpCkBAIC01MjgsMTQgKzU0OCwxNCBAQCBib29sIENvZGVCbG9j
azo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQcm9taXNl
KQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTksoT3BBZGQp
Ci0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAgIExJTkso
T3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcEluYykKLSAg
ICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BNdWwpCisg
ICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAgICAgTElO
S19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktfV0lUSF9V
TkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJ
VEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUo
T3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2OCw3ICs3ODgsNyBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgLy8gcmVseSBvbiB0
aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRlZCB0byBhbHNv
IGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUgYWNjdXJhdGUg
YXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsK
LSAgICBqaXRBZnRlcldhcm1VcCgpOworICAgIC8vaml0QWZ0ZXJXYXJtVXAoKTsKIAogICAgIC8v
IElmIHRoZSBjb25jdXJyZW50IHRocmVhZCB3aWxsIHdhbnQgdGhlIGNvZGUgYmxvY2sncyBoYXNo
LCB0aGVuIGNvbXB1dGUgaXQgaGVyZQogICAgIC8vIHN5bmNocm9ub3VzbHkuCkBAIC03ODksNiAr
ODA5LDc3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbkNvbW1vbihWTSYKICAgICBt
X293bmVyRWRnZS5zZXQodm0sIHRoaXMsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmNyZWF0
ZSh2bSwgdGhpcykpOwogfQogCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNl
bGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRDb2Rl
KGppdENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0Q29k
ZU1hcCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFuZGxl
ckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5hdGl2
ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJl
dGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAg
YXV0byYgaml0RGF0YSA9IGVuc3VyZUpJVERhdGEobG9ja2VyKTsKKworICAgICAgICBSRUxFQVNF
X0FTU0VSVChqaXREYXRhLm1faml0Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CisgICAgICAgIGpp
dERhdGEubV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+bV9j
b25zdGFudFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqaXRD
b2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBlbnRy
eSA9IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOworICAgICAgICAgICAgc3dpdGNoIChl
bnRyeS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xv
YmFsT2JqZWN0OgorICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0g
PSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAgICAg
ICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8gPSAqc3Rh
dGljX2Nhc3Q8VW5saW5rZWRDYWxsTGlua0luZm8qPihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAg
ICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxsTGlua0lu
Zm9zLmFkZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpKTsK
KyAgICAgICAgICAgICAgICAvLyBPT1BTOiBkb24ndCBoYXJkY29kZSB0aGVzZSByZWdpc3RlcnMg
bGlrZSB0aGlzLgorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+aW5pdGlhbGl6ZURhdGFJ
Qyh2bSgpLCB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJl
Z1QyKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gY2Fs
bExpbmtJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7Cisg
ICAgICAgICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5m
byA9ICpzdGF0aWNfY2FzdDxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKj4oZW50cnkucGF5bG9h
ZCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gaml0RGF0
YS5tX3N0dWJJbmZvcy5hZGQodW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlLCBDb2RlT3JpZ2lu
KHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT5pbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8odGhpcywgdW5saW5r
ZWRTdHViSW5mbyk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtp
XSA9IHN0dWJJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbDogeworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50
cnkucGF5bG9hZCk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtp
XSA9IGZ1bmN0aW9uRGVjbChpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25F
eHByOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gZnVuY3Rpb25FeHByKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICBjYXNlIE1v
ZHVsZUNvZGU6CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlu
bGluZWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6Cisg
ICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3
ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJp
ZGUgdGhhdCBvYnNlcnZhdGlvbi4KKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0g
Y2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCgpKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24o
dGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghdW5saW5rZWRDb2RlQmxv
Y2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSAmJiBPcHRpb25zOjp1c2VCYXNlbGluZUpJVENv
ZGVTaGFyaW5nKCkpCisgICAgICAgIHVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNl
bGluZUNvZGUgPSBXVEZNb3ZlKGppdENvZGUpOworfQorCiBDb2RlQmxvY2s6On5Db2RlQmxvY2so
KQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtMTUxOSwzOSArMTYxMCw0MCBAQCB2b2lkIENv
ZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0
aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29sIGlzRWxpZ2libGVGb3JMTEludERv
d25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwotICAgIG1faXNFbGlnaWJs
ZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBp
cyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2Ug
YXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFs
bCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAgICBpZiAoT3B0aW9uczo6dXNlTExJ
bnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGlu
Zyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBv
cHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wdGltaXplZENvZGVC
bG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxl
Rm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVs
bHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJ
bnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5s
aW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1f
ZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0
cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhh
bmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50Ojpo
YW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKLQot
ICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUg
YmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwot
ICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBy
dW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNv
ZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0
dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgotICAgICAgICAgICAgICAgICAg
ICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYKKy8vIE9PUFM6IHJlY29uY2lsZSB0aGlzCisv
LyNpZiBFTkFCTEUoSklUKQorLy8gICAgYm9vbCBpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUg
PSBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZTsKKy8vICAgIG1faXNFbGlnaWJsZUZvckxM
SW50RG93bmdyYWRlID0gZmFsc2U7CisvLyAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5v
dCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRl
bXB0CisvLyAgICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFuZCByZWluc3RhbGwg
TExJbnQgY29kZSB0byBzYXZlIEpJVCBtZW1vcnkuCisvLyAgICBpZiAoT3B0aW9uczo6dXNlTExJ
bnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGlu
Zyh0aGlzKSkgeworLy8gICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9
IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKy8vICAgICAgICAgICAgaWYgKCFvcHRpbWl6ZWRD
b2RlQmxvY2stPm1fb3NyRXhpdENvdW50ZXIpIHsKKy8vICAgICAgICAgICAgICAgIGlmIChpc0Vs
aWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKKy8vICAgICAgICAgICAgICAgICAgICBtX2ppdENv
ZGUgPSBudWxscHRyOworLy8gICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRyeXBvaW50
KHRoaXMpOworLy8gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25I
YW5kbGVycygpOyBpKyspIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5r
ZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlv
bkhhbmRsZXIoaSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5k
bGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKKy8vICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5r
ZWRIYW5kbGVyLnRhcmdldCkucHRyKCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRs
ZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5j
b2RlKCkpKTsKKy8vICAgICAgICAgICAgICAgICAgICB9CisvLworLy8gICAgICAgICAgICAgICAg
ICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgLy8g
SXQncyBzYWZlIHRvIGNsZWFyIHRoZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkgYWxsIGNvbXBpbGVyIHRocmVhZHMKKy8vICAgICAgICAgICAgICAgICAgICAv
LyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUg
b3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKKy8vICAgICAgICAgICAgICAg
ICAgICAvLyBwYXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0
aGUgdmFyaW91cyAqaW5mb3MuCisvLyAgICAgICAgICAgICAgICAgICAgcmVzZXRKSVREYXRhKCk7
CisvLyAgICAgICAgICAgICAgICB9IGVsc2UKKy8vICAgICAgICAgICAgICAgICAgICBtX2lzRWxp
Z2libGVGb3JMTEludERvd25ncmFkZSA9IHRydWU7CisvLyAgICAgICAgICAgIH0KKy8vICAgICAg
ICB9CisvLyAgICB9CisvLworLy8jZW5kaWYKICAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRC
ZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNo
ZXMoKTsKQEAgLTE1NzksNyArMTY3MSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseSgKICAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6Ci0g
ICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOworICAgICAg
ICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNvdW50KCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAg
IGNvdW50ID0gbV9qaXRFeGVjdXRlQ291bnRlci5jb3VudCgpOwpAQCAtMzExOCw3ICszMjEwLDcg
QEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1l
UmVnaXN0ZXJDb3VudEZvcih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMzM0LDEzICszNDI2LDEzIEBA
IEJpbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2gg
KHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNh
c2Ugb3BfbXVsOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJu
ICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTMzNTIsMTEgKzM0NDQsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6dW5hcnlBcml0aAogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGNhc2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0zNTA2LDI4ICszNTk4LDE5IEBAIHN0ZDo6b3B0aW9uYWw8
Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKIH0K
IAotaW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkK
LXsKLSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXplKCkpIHsKLSAg
ICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xk
OwotICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkICog
NDsKLSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8g
MjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRocmVzaG9s
ZDsKLX0KKy8vdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkKKy8veworLy8gICAgbV9s
bGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlv
bnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKKy8vfQogCi12b2lkIENv
ZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBDb2RlQmxvY2s6OmppdFNvb24oKQogewot
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklU
KE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKKyAgICBtX2xs
aW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCh1bmxpbmtlZENvZGVCbG9jaygpLT50
aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7CiB9
CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXROZXh0SW52
b2NhdGlvbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0
aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7Cisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAK
IGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcgQEAgY2xhc3MgTWV0YWRhdGFUYWJsZTsKIGNs
YXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBjbGFz
cyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAogREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEpOwogCkBAIC0x
NTgsNyArMTU5LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUo
KSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1Q
YXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgog
ICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAK
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1f
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE3MCw2IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAg
dW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVj
a3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRy
ZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBh
bHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0
ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzNCw2IEBAIHB1YmxpYzoKICAgICBib29s
IGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxs
Vk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1
YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5n
IGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBg
dGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAgICBy
ZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2
Niw4ICsyNTgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNN
YXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3ZlIGFy
aXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLCBhbmQgb250byBKSVRD
b2RlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
CiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgICAgIEJh
ZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CkBAIC0yODIsOSArMjc2LDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFw
OwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAg
ICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAg
SklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1f
aml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29u
c3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3Rh
bnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVD
b2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElL
RUxZKG1faml0RGF0YSkpCkBAIC0yOTMsNiArMjkxLDggQEAgcHVibGljOgogICAgIH0KICAgICBK
SVREYXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVREYXRhKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9qaXREYXRhKTsgfQorCiAgICAgSklUQWRkSUMqIGFkZEpJVEFk
ZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwogICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5h
cnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFBy
b2ZpbGUqKTsKQEAgLTMyMiwxNiArMzIyLDcgQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9y
IGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4K
ICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNv
ZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRD
b2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShq
aXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0g
ICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAg
IHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBj
b25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKICAgICB2b2lkIHNldFBDVG9Db2RlT3Jp
Z2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpv
cHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwpAQCAtNDcyLDEwICs0NjMsMTIg
QEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5hbWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIp
OwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2Zp
bGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgp
KTsKICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKTsKKyAgICAg
ICAgCiAgICAgfQogCiAgICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudCh1
bnNpZ25lZCBhcmd1bWVudEluZGV4KQpAQCAtNTcxLDYgKzU2NCw3IEBAIHB1YmxpYzoKICAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29u
c3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdl
dCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHJl
Zyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFu
dFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKGluZGV4KTsg
fQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0YW50UmVnaXN0ZXJzKSAr
IGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5T2Zmc2V0KCk7IH0KIAog
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1cm4g
bV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJPZkZ1bmN0aW9u
RGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC02MDAsNiArNTk0
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKICAgICAg
ICAgcmV0dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAg
IH0KKyAgICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJs
ZUluZGV4KTsKKyAgICB2b2lkKiBiYXNlbGluZUpJVENvbnN0YW50UG9vbCgpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wu
ZGF0YSgpOworICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIHVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTYx
MCw2ICs2MTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7
CiAgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKICAgICB9CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRj
aEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZV
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNv
bnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZShpbnQgdGFibGVJbmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9CkBAIC02MzIsMjEgKzYzMywyMCBAQCBwdWJs
aWM6CiAKICAgICBib29sIGNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRB
bmRTZXQodGhpcyk7CisgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNoZWNr
SWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOwogICAgIH0KIAogICAgIHZvaWQgZG9udEpJ
VEFueXRpbWVTb29uKCkKICAgICB7Ci0gICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5kZWZl
ckluZGVmaW5pdGVseSgpOworICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmRlZmVySW5k
ZWZpbml0ZWx5KCk7CiAgICAgfQogCi0gICAgaW50MzJfdCB0aHJlc2hvbGRGb3JKSVQoaW50MzJf
dCB0aHJlc2hvbGQpOwotICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKTsKICAgICB2b2lkIGppdFNv
b24oKTsKKyAgICB2b2lkIGppdE5leHRJbnZvY2F0aW9uKCk7CiAKICAgICBjb25zdCBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICAgICAgcmV0dXJuICptX2xs
aW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgfQogCiAgICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6dHVw
bGU8U3RydWN0dXJlSUQsIHVuc2lnbmVkPiwgRml4ZWRWZWN0b3I8TExJbnRQcm90b3R5cGVMb2Fk
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0Y2hwb2ludE1hcDsKQEAg
LTc5Nyw2ICs3OTcsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMo
KSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dl
clJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQg
YWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVC
cmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQpAQCAtODM4LDYgKzgzOSw3IEBAIHB1
YmxpYzoKICAgICBtdXRhYmxlIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwogCiAgICAgYm9vbCBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQgYmVjYXVzZSB0aGUgSklU
IHdhbnRzIHRvIHN0b3JlIHRvIGl0LgorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91
bGRBbHdheXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7IH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdW5zaWdu
ZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCkBA
IC05MDcsMTEgKzkwOSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
TWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0
YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1Bv
aW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9u
c1Jhd1BvaW50ZXIpOyB9CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emlu
Z0Vhcmx5UmV0dXJuKCkKLSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVp
cmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0gICAgICAgIHJldHVy
biAhbV91bmxpbmtlZENvZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAgfQorICAgIGJvb2wg
bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7IHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKTsg
fQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CkBA
IC0xMDA5LDcgKzEwMDcsOSBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAg
bV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENv
ZGU7CiAjaWYgRU5BQkxFKEpJVCkKK3B1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SklURGF0
YT4gbV9qaXREYXRhOworcHJpdmF0ZToKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAg
IC8vIFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFz
IHRoZSBwcm9maWxlZCBjb2RlIGJsb2NrCkBAIC0xMDI4LDcgKzEwMjgsNyBAQCBwcml2YXRlOgog
CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAgICBC
YXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9Owog
CiAgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAgICAg
dWludDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgyNjIyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJh
c2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlVubGlua2VkTWV0YWRhdGFUYWJsZUlubGluZXMuaCIK
QEAgLTQwLDkgKzQxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29u
cwogICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICAgICAg
bV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0
YWRhdGEubV9wcm9maWxlLCBmYWxzZSk7IH0pOwotCiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9X
SVRIX1ZBTFVFX1BST0ZJTEUoVklTSVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0
YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCkBA
IC01Nyw3ICs1Niw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMK
ICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAg
ICAgfSk7CiAgICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC05
OSw0ICs5NywyNCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvCiAg
ICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZU19JTkxJTkUgY29uc3QgSklUQ29kZU1h
cCYgQ29kZUJsb2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRD
b2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFwOworfQorCitBTFdBWVNfSU5MSU5F
IFNpbXBsZUp1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQg
dGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2Rl
LmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5M
SU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBU
YWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4o
bV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwor
fQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5o
CShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcChDb2Rl
QmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQogICAgIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAko
cmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1
dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAgYm9vbCBF
eGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKLSAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9jayA/IGNv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQpOworICAgIHRocmVz
aG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAgICBtX2NvdW50ZXIg
PSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHJl
dmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRp
b25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAg
IHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRoaXMsIGNo
ZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxzZS4KICAg
ICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwogICAgIGJv
b2wgaGFzQ3Jvc3NlZFRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlciA+PSAwOyB9
Ci0gICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayop
OworICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2RlQmxvY2sq
ID0gbnVsbHB0cik7CiAgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwogICAgIGRvdWJsZSBj
b3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENvdW50KSAr
IG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpAQCAtODYs
MTMgKzg2LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgVCB0aHJlc2hvbGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChUIHRocmVz
aG9sZCkKICAgICB7Ci0gICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwotICAgICAgICBpZiAo
T3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCkgJiYg
Z2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2JqZWN0LT53
ZWFrUmFuZG9tSW50ZWdlcigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3Bv
aW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBtYXhpbXVt
RXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAgIGludDMyX3QgbWF4
VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwog
ICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAgICAgICAgdGhyZXNo
b2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xkOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkocmV2
aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRN
ZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBHZXRCeUlk
TW9kZU1ldGFkYXRhVW5zZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRh
ZGF0YVVuc2V0KSA9PSAxMik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5n
dGggeworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBhcnJheVBy
b2ZpbGUpOyB9CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07CiBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsKQEAgLTg4
LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRN
b2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7IC8vIFRo
aXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
R2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhRGVm
YXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5zZXRNb2Rl
OwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1vZGU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNw
cAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
bGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NSw2ICszODUsOCBAQCBib29sIElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJ
bmxpbmU7CiB9CiAKKy8vIE9PUFM6IE1ha2UgdGhpcyBzdHVmZiB3b3JrIHdpdGggZGF0YSBpY3Mg
dG8gbm90IGFzc3VtZSBpbmxpbmUgYWNjZXNzLgorCiB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHRhcmdldCkKIHsKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkgewpAQCAtNDA0LDkgKzQwNiwxMiBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjCiB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQpCiB7CiAgICAgaWYgKGNvZGVC
bG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gT09QUzogbWFrZSBzb21lIHZlcnNpb24g
b2YgSW5saW5lQWNjZXNzIGZvciBiYXNlbGluZS4gUGVyaGFwcyBtYWtlIGl0IGRhdGEgZHJpdmVu
LiBPciBwZXJoYXBzIGhhdmUgdGhlIGNvZGUKKyAgICAgICAgLy8gYmUgc2hhcmVkIHNvbWVob3cg
YmV0d2VlbiBVbmxpbmtlZENvZGVCbG9ja3MuCisKICAgICAgICAgLy8gSWYgaXQgaXMgbm90IEdl
dEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQgKGUuZy4gR2V0QnlWYWwp
LgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGlyZWN0IGp1bXAsIGFuZCBv
bmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2RlUHRyLgotICAgICAgICBp
ZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAgICAgIGlmIChjb2RlQmxv
Y2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBzdHViSW5mby5oYXNDb25z
dGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29kZVB0ciBpcyBwb2ludGlu
ZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMgbWVhbnMgdGhhdCBJbmxp
bmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAgICAgIC8vIFdlIHJld3Jp
dGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNvZGUgb25jZSwgYW5kIGNv
bnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgogICAgICAgICAgICAgaWYg
KHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09IHN0dWJJbmZvLnNsb3dQ
YXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CkBAIC00MjEsNiArNDI2LDcg
QEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgICAgICAgICAg
ICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5raW5nIHN0dWIgY2FsbCIpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CisKICAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gdGFyZ2V0OwogICAg
ICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24gMjgyNjIyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0VfT1BFUkFU
T1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7CiAgICAg
dWludDhfdCBzZWVuTW9kZXMgeyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNl
ZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0YWRhdGEs
IHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc2Vlbk1v
ZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCShyZXZpc2lv
biAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlu
a0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJbnRDYWxs
TGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQogCiBwcml2YXRlOgogICAgIHVpbnRwdHJfdCBt
X2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0IH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0YWRhdGFUYWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgJKHJl
dmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0
YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGZ1bmMoKm1ldGFkYXRhKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBudW1FbnRyaWVzKCkKKyAgICB7CisgICAgICAg
IGF1dG8qIHN0YXJ0ID0gYml0d2lzZV9jYXN0PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdldChP
cDo6b3Bjb2RlSUQpKTsKKyAgICAgICAgYXV0byogZW5kID0gYml0d2lzZV9jYXN0PHR5cGVuYW1l
IE9wOjpNZXRhZGF0YSo+KGdldEltcGwoT3A6Om9wY29kZUlEICsgMSkpOworICAgICAgICByZXR1
cm4gZW5kIC0gc3RhcnQ7CisgICAgfQorCiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCk7CiAKICAg
ICB2b2lkIHJlZigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiAj
aW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5j
bHVkZSAiUmVwYXRjaC5oIgogCkBAIC0yODUsNiArMjg2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRo
aXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlw
ZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAg
ICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CkBAIC00MzAsNiArNDMyLDIw
NCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNo
ZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRp
YWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvKQoreworICAgIGFjY2Vzc1R5cGUgPSB1
bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZv
LnN0YXJ0OyAvLyBPT1BTOiBkbyB3ZSBuZWVkIGEgc3RhcnQgZm9yIGRhdGEgSUNzPworICAgIGRv
bmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9uOworICAgIHNsb3dQYXRo
U3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOwor
ICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5saW5rZWRT
dHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNldCgpKSk7CisgICAgY29kZU9yaWdpbiA9IENvZGVP
cmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBtX2NvZGVQdHIgPSBz
bG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vz
c1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0
aGUgc2NyYXRjaCByZWdpc3RlciBlaXRoZXIuCisgICAgICAgIHVzZWRSZWdpc3RlcnMuYWRkKEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaCk7CisgICAgfQorCisgICAgc3dpdGNoIChh
Y2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkluQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlJZERpcmVjdE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25IYXNQcml2YXRlTmFtZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0
S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlm
ICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFN
b2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoK
KyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHN3aXRj
aCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90
RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJp
Y3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBp
ZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1
dFByaXZhdGVOYW1lOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZv
LnByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5l
UHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVC
cmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5k
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2
YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0
ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoYWNj
ZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVE
ZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJh
c2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmll
ciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2
YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0
dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxz
ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9m
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgcHJvdG90
eXBlSXNLbm93bk9iamVjdCA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAg
ICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJh
c2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIg
PSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BS
ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRC
eUlkRGlyZWN0OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgor
ICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVn
cy50aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsK
KyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlk
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRo
aXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlk
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lz
dGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGlmIChhY2Nlc3NUeXBl
ID09IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsKQorICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxz
ZTsKKyAgICAgICAgdmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MuYnJhbmRH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyODI2
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJSb3V0
aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgi
CisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCkBAIC01Niw2ICs1Nyw3
IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlWYWwsCiAgICAg
UHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAgICBJbkJ5SWQs
CiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzgwLDggQEAgZW51
bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAorc3Ry
dWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZv
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFsaXpl
RnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBD
aGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0
IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTQ0Nyw2ICs0NTMsMTggQEAgaW5saW5l
IGF1dG8gYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bgogICAgIH0KIH0KIAorc3RydWN0IFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8geworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAg
ICBQdXRLaW5kIHB1dEtpbmQ7CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQ
dXRLaW5kIHsgUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpIH07CisgICAgRUNNQU1vZGUgZWNt
YU1vZGUgeyBFQ01BTW9kZTo6c2xvcHB5KCkgfTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXg7CisgICAgLy8gT09QUzogRG8gd2UgbmVlZCBzdGFydCBmb3IgZGF0YSBJQ3M/CisgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0OyAvLyBUaGlzIGlz
IGVpdGhlciB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJQyBmb3IgKmJ5SWQgY2FjaGVzLiBvciB0
aGUgbG9jYXRpb24gb2YgcGF0Y2hhYmxlIGp1bXAgZm9yICdpbnN0YW5jZW9mJyBjYWNoZXMuCisg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzbG93UGF0aFN0YXJ0TG9j
YXRpb247Cit9OworCiAjZWxzZQogCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCShyZXZp
c2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1w
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB2b2lkIHByaW50U3VwZXJT
YW1wbGVyU3RhdGUoKQogICAgIGRvdWJsZSBwZXJjZW50YWdlID0gMTAwLjAgKiBpbiAvIChpbiAr
IG91dCk7CiAgICAgaWYgKHBlcmNlbnRhZ2UgIT0gcGVyY2VudGFnZSkKICAgICAgICAgcGVyY2Vu
dGFnZSA9IDAuMDsKLSAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBs
ZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIlxuIik7CisgICAgZGF0YUxvZygiUGVyY2VudCB0aW1l
IGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNlbnRhZ2UsICIlXG4iKTsKIH0KIAog
dm9pZCBlbmFibGVTdXBlclNhbXBsZXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODI2MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJVbmxpbmtlZENv
ZGVCbG9jay5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAj
aW5jbHVkZSAiQ2xhc3NJbmZvLmgiCkBAIC03OCw2ICs3OSw4IEBAIFVubGlua2VkQ29kZUJsb2Nr
OjpVbmxpbmtlZENvZGVCbG9jayhWTSYKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2Fy
eShsb2NrZXIpOwogICAgICAgICBtX3JhcmVEYXRhLT5tX3ByaXZhdGVCcmFuZFJlcXVpcmVtZW50
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByaXZhdGVCcmFuZFJlcXVpcmVtZW50OjpOZWVkZWQp
OwogICAgIH0KKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhy
ZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KQEAgLTMxNiw2ICszMTksMzMgQEAgaW50IFVu
bGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2ZmcwogICAgIHJldHVybiBtX291dE9mTGlu
ZUp1bXBUYXJnZXRzLmdldChieXRlY29kZU9mZnNldCk7CiB9CiAKKyNpZiBBU1NFUlRfRU5BQkxF
RAorYm9vbCBVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQoreworICAgIC8vIE9PUFM6IGRvIHdoYXQgQ29kZUJsb2NrIGRvZXMgYW5kIG1ha2Ug
YSBoYXNoIHRhYmxlPworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50
aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkgPT0gdWlk
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KyNlbmRpZgorCitpbnQzMl90IFVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50
MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRPcHRpbWl6ZSgpKSB7CisgICAgY2Fz
ZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKKyAg
ICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7Cisg
ICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7Cisg
ICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0aHJlc2hvbGQ7Cit9
CisKKwogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcygpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWV0YWRhdGEtPmlzRmluYWxpemVkKCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTIgQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJBcnJh
eVByb2ZpbGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAi
Q29kZVR5cGUuaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorI2luY2x1ZGUgIkV4ZWN1
dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCiAjaW5jbHVk
ZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCkBAIC02NCw2ICs2Niw3
IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGluZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0
YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29uc3RhbnQgOiBpbnQzMl90OwogCkBAIC0x
NzUsNiArMTc4LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJy
aWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVn
aXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
Y29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50
UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9j
b25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29u
c3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIxMSwxNSBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJT
Y3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNl
clNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMo
KS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0
cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigpOworICAgICAgICBjb25z
dCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0
aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGlu
c3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9u
ID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsK
KyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQor
ICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlv
bnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0
IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDEwICszNDcsMjEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9tZXRhZGF0YS0+c2l6ZUluQnl0ZXMoKTsKICAgICB9CiAKKyAgICBib29s
IGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKKyAgICB7CisgICAg
ICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUg
bG9vcHMgdGhleSBydW4uCisgICAgICAgIHJldHVybiAhaXNCdWlsdGluRnVuY3Rpb24oKTsKKyAg
ICB9CiAgICAgdm9pZCBhbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKCk7CiAgICAgVW5saW5rZWRWYWx1
ZVByb2ZpbGUmIHVubGlua2VkVmFsdWVQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBt
X3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9CiAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUmIHVubGlu
a2VkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2FycmF5UHJvZmlsZXNb
aW5kZXhdOyB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGJvb2wgaGFzSWRlbnRpZmllcihV
bmlxdWVkU3RyaW5nSW1wbCopOworI2VuZGlmCisKKyAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJ
VChpbnQzMl90IHRocmVzaG9sZCk7CisKIHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9j
ayhWTSYsIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYsIE9wdGlv
blNldDxDb2RlR2VuZXJhdGlvbk1vZGU+KTsKIApAQCAtMzk3LDYgKzQyMSw3IEBAIHByaXZhdGU6
CiAgICAgdW5zaWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAg
Q29uY3VycmVudEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91
bmxpbmtlZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVy
ZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEzLDYgKzQz
OCw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBt
X2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFjZSB0byBz
dG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5
QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0
aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBt
X2V4aXRQcm9maWxlOwpAQCAtNDU4LDYgKzQ4NiwzMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAg
fQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZz
ZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNl
dCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7
CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxl
KCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZFVu
YXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fdW5h
cnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV91bmFyeUFyaXRoUHJvZmlsZXMuYXBw
ZW5kKFVuYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkp
IHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9m
aWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQ
cm9maWxlc1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1
dGVDb3VudGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOyB9CiAKIHByaXZhdGU6
CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjUsNiArNTE3LDcgQEAgcHJpdmF0ZToKICAgICBPdXRP
ZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZlY3RvcjxFeHByZXNzaW9uUmFu
Z2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBt
X2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRWYWx1ZVByb2Zp
bGU+IG1fdmFsdWVQcm9maWxlczsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZEFycmF5UHJvZmls
ZT4gbV9hcnJheVByb2ZpbGVzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAkocmV2aXNp
b24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAgcHVibGlj
OgogICAgIGJvb2wgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0
dXJuIG1fY29kZUJsb2NrLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0KICAg
ICBib29sIGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmhhc0No
ZWNrcG9pbnRzKCk7IH0KICAgICBib29sIGhhc1RhaWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZUJsb2NrLT5oYXNUYWlsQ2FsbHMoKTsgfQorICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRo
UHJvZmlsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKTsg
fQorICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkgeyByZXR1cm4gbV9jb2RlQmxv
Y2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCk7IH0KIAogICAgIC8vIFVwZGF0aW5nIFVubGlua2Vk
Q29kZUJsb2NrLgogICAgIHZvaWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1fY29kZUJsb2NrLT5z
ZXRIYXNDaGVja3BvaW50cygpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZpc2lvbiAyODI2MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxlKTsKICAgICB9CiAKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZzZXRJbk1ldGFkYXRh
VGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9pc0Zp
bmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9IG1faXMzMkJpdCA/
IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRhYmxlMTYoKVtPcGNv
ZGU6Om9wY29kZUlEXTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKHR5
cGVuYW1lIE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9CisK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAgdW5zaWduZWQgbnVtRW50cmll
cygpOwogCkBAIC0xMDcsNiArMTE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zm
c2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90
OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MjYyMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsMTMgKzQ1LDExIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKIAogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNr
ZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNwZWNG
YWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRl
eE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNG
YWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKICAgICB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQotICAg
ICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAg
ICAgIGNsZWFyQnVja2V0cygpOwogICAgIH0KICAgICAKICAgICBFbmNvZGVkSlNWYWx1ZSogc3Bl
Y0ZhaWxCdWNrZXQodW5zaWduZWQgaSkKQEAgLTU5LDYgKzU3LDEyIEBAIHN0cnVjdCBWYWx1ZVBy
b2ZpbGVCYXNlIHsKICAgICAgICAgQVNTRVJUKG51bWJlck9mQnVja2V0cyArIGkgPCB0b3RhbE51
bWJlck9mQnVja2V0cyk7CiAgICAgICAgIHJldHVybiBtX2J1Y2tldHMgKyBudW1iZXJPZkJ1Y2tl
dHMgKyBpOwogICAgIH0KKworICAgIHZvaWQgY2xlYXJCdWNrZXRzKCkKKyAgICB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQorICAg
ICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAg
fQogICAgIAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tldCkg
Y29uc3QKICAgICB7CkBAIC0xMjMsOCArMTI3LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ug
ewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24g
YW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQK
LSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlw
ZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAg
ICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0
czsgKytpKSB7CkBAIC0xMzksNyArMTQxLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ugewog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAg
ICBFbmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAg
U3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE2MSw2ICsxNjMs
NyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBW
YWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czww
PiB7CiAgICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNr
ZXRzPDA+KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQog
fTsKIAogc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1
ZVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTk4LDcgKzE1OTgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFVuYXJ5CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wTm90Pihkc3QsIHNyYyk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICBPcE5lZ2F0ZTo6
ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CisgICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMs
IGRzdCwgc3JjLCB0eXBlLCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfYml0bm90OgogICAgICAgICBlbWl0VW5hcnlPcDxP
cEJpdG5vdD4oZHN0LCBzcmMpOwpAQCAtMTY5NiwxMyArMTY5NiwxMyBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFR5cGVPCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0SW5jKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcEluYzo6ZW1pdCh0aGlz
LCBzcmNEc3QpOworICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFk
ZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVjKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAg
ICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QpOworICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0Rz
dCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNE
c3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNjgyLDcgKzY4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmVn
aXN0ZXJJRCo+CiAgICAgICAgIGVtaXRCaW5hcnlPcChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcykKICAgICAgICAg
ewotICAgICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBl
cyk7CisgICAgICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5
cGVzLCBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICAgICAg
cmV0dXJuIGRzdDsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDYgQEAg
dm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKgogICAgIEFTU0VSVChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwotICAgIEFTU0VSVCgh
Y29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGUo
KS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZU9T
UkVudHJ5VG9ERkcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNp
bmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2lu
Y2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIKQEAgLTExOSwxMCArMTIw
LDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxsSGVscGUKICAgICBpbnQz
Ml90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2ggKGppdC5jb2RlQmxvY2soKS0+aml0VHlwZSgp
KSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJh
c2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChqaXQuY29kZUJsb2NrKCkt
Pmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJh
c2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgotICAgICAgICBjbGlwcGVk
VmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGppdC5j
b2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xpcHBl
ZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJn
ZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMDksMTAgKzMxMCwxNSBAQCB2b2lkIHJlaWZ5SW5s
aW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgICAgICB0cnVlQ2FsbGVyID8gQXNz
ZW1ibHlIZWxwZXJzOjpVc2VFeGlzdGluZ1RhZ1JlZ2lzdGVyQ29udGVudHMgOiBBc3NlbWJseUhl
bHBlcnM6OkNvcHlCYXNlbGluZUNhbGxlZVNhdmVkUmVnaXN0ZXJzRnJvbUJhc2VGcmFtZSwKICAg
ICAgICAgICAgIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDQp
OwogCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcg
Zm9yIGJhc2VsaW5lIHBiL21ldGFkYXRhIHJlZ2lzdGVycwogICAgICAgICBpZiAoY2FsbGVySXNM
TEludCkgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CiAgICAgICAgICAgICBq
aXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJh
bWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BS
KSk7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBj
YWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6
UmVnaXN0ZXJzOjpwYkdQUikpOworICAgICAgICB9IGVsc2UgaWYgKHRydWVDYWxsZXIpIHsKKyAg
ICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFz
ZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOworICAgICAgICAgICAgaml0LnN0b3JlUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+
bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGlu
ZUNvZGVCbG9jaywgSklUOjpzX21ldGFkYXRhR1BSKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVy
LT5iYXNlbGluZUpJVENvbnN0YW50UG9vbCgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZy
YW1lLCBiYXNlbGluZUNvZGVCbG9jaywgSklUOjpzX2NvbnN0YW50c0dQUikpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQpAQCAtNDA0LDYg
KzQxMCw5IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKICAgICAgICAganVtcFRhcmdldCA9IGRl
c3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
ICAgICB9IGVsc2UgeworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKSwgSklUOjpzX21ldGFkYXRhR1BS
KTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9j
a0ZvckV4aXQtPmJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkpLCBKSVQ6OnNfY29uc3RhbnRzR1BS
KTsKKwogICAgICAgICBjb2RlQmxvY2tGb3JFeGl0LT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVl
OwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MzAsNiArNzMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwo
Tm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVy
eTo6aW5QYWlyKGNhbGxlZVRhZ0dQUiwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICBz
aHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1
ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCk7CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdz
OyArK2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZh
ckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTg4OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8t
PmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BS
UmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNl
cyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBb
Jl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAg
ICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAg
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JU
YWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzQs
NiArODM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAg
ICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVl
R1BSLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUo
bnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdz
ID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMg
PSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAg
ICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChu
b2RlLCBpICsgMSk7CkBAIC05ODUsNyArOTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nh
c2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBD
YWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAg
ICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVG
b3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcg
KzM5ODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAg
UmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAg
IEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJ
VFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
LCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZH
SklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVz
ZWRSZWdpc3RlcnMsCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlk
R1BSUmVnLCBzdHViSW5mb0dQUik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1i
b2wgPSB0cnVlOwogCkBAIC0xNDc3Myw3ICsxNDc3Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CiAK
LSAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRo
aXNSZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCksIGNhbGxTaXRlSW5kZXgpOworICAg
IG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1Jl
Z3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2Nr
KCkpLCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24g
MjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MzE3LDcgKzQzMTcsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJ
VCkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAg
YXV0byBnZW5lcmF0b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAg
ICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRp
Y09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAg
ICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdp
biwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAg
ICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxp
ZEdQUlJlZywgc3R1YkluZm9HUFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZv
KCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwpAQCAtMTAyODUsNiArMTAyODUsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdz
OyBpIDwgbnVtQWxsb2NhdGVkQXJnczsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc2h1
ZmZsZURhdGEuYXJncy5hcHBlbmQoVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQo
KSkpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVt
UGFzc2VkQXJnczsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVy
cyA9IGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50aWNO
b2RlT3JpZ2luKTsKQEAgLTEwNDQzLDEzICsxMDQ0NCwxNCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292ZXJ5
Rm9ySlNWYWx1ZSgpKTsKIAogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFy
Z3MgPSBudW1BcmdzOworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMg
PSBqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNv
ZGVCbG9jaygpKTsKIAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZv
ID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwg
R1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxM
aW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxp
ZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAg
ICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGpp
dCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAg
IENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OwogICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA3OTIsNyArMTA3OTQsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlz
VGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8t
PmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAg
c2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5m
bzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWls
Q2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMTA3Myw3ICsxMTA3NSw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAg
ICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwg
SW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
cHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24g
MjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgko
d29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVm
IHN0cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252
ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRPZkZ1
bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVzLm1hcCBk
byB8ZmllbGROYW1lfAorICAgICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisgICAgICAg
ICAgICBlbmQuam9pbigiXG4iKQorICAgICAgICBlbmQKKworICAgICAgICBkZWYgY29udmVydEZp
ZWxkcyhwcmVmaXgsIGZpZWxkcywgZmllbGROYW1lcykKICAgICAgICAgICAgIGZpZWxkcy5tYXAg
ZG8gfGZpZWxkLCB0eXBlfAogICAgICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAot
ICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHBy
ZWZpeCArICcgICAgJywgdHlwZSl9XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAg
IiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUs
IGZpZWxkTmFtZXMpfVxuI3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisg
ICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAg
ICAgICAgZmllbGROYW1lcy5wdXNoKGZpZWxkTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgIiN7
cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGROYW1lfTsiCiAgICAgICAgICAgICAgICAgZW5k
CiAgICAgICAgICAgICBlbmQuam9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVs
ZHMgPSBjb252ZXJ0RmllbGRzKCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkTmFt
ZXMgPSBbXQorICAgICAgICBwcmVmaXggPSAiICAgICAgICAiCisgICAgICAgIGZpZWxkcyA9IGNv
bnZlcnRGaWVsZHMocHJlZml4LCBAZmllbGRzLCBmaWVsZE5hbWVzKQorICAgICAgICBmaWVsZHMg
PSBmaWVsZHMgKyAiXG4iICsgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxk
TmFtZXMpCiAKICAgICAgICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAm
JiAobm90IEBpbml0aWFsaXplcnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OTgsOCArNjk4LDEzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2
ZXMKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2Fs
bFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworfQorCit2b2lkIEFzc2VtYmx5
SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0s
IENhbGxMaW5rSW5mbyogaW5mbykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQ
UkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtU
YXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8gY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRpb25Q
dHJUYWc+KGNhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIwLDYgKzE3MjAsNyBAQCBw
dWJsaWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhv
dXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsKICAgICAKICAgICB2b2lk
IG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFj
a0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklU
Q29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGlu
ZUpJVENvZGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKKworI2luY2x1ZGUgIkpJVE1hdGhJ
Qy5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZv
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKSVRBZGRJQyogTWF0aElDSG9sZGVyOjphZGRKSVRB
ZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3Mu
YWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE11bElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElD
KEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQo
YXJpdGhQcm9maWxlKTsgfQorSklUU3ViSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0
aFByb2ZpbGUpOyB9CitKSVROZWdJQyogTWF0aElDSG9sZGVyOjphZGRKSVROZWdJQyhVbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9m
aWxlKTsgfQorCit2b2lkIE1hdGhJQ0hvbGRlcjo6YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYg
b3RoZXIpCit7CisgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICBt
X211bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAgIG1fbmVnSUNzID0gV1RGTW92
ZShvdGhlci5tX25lZ0lDcyk7CisgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNz
KTsKK30KKworQmFzZWxpbmVKSVRDb2RlOjpCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5
UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAg
IDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQpCisgICAgLCBNYXRoSUNIb2xkZXIoKQoreyB9CisKK0Jhc2VsaW5lSklUQ29k
ZTo6fkJhc2VsaW5lSklUQ29kZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8u
aCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworLy9jbGFzcyBKSVRBZGRJQzsKKy8vY2xhc3MgSklUTXVsSUM7CisvL2Ns
YXNzIEpJVFN1YklDOworLy9jbGFzcyBKSVROZWdJQzsKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmls
ZTsKK2NsYXNzIFVuYXJ5QXJpdGhQcm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm87CitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsK
KworY2xhc3MgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhN
YXRoSUNIb2xkZXImIG90aGVyKTsKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJp
dGhQcm9maWxlKik7CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmls
ZSopOworICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAg
ICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworICAgIC8qCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+CisgICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAg
ICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1
cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdl
bmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBh
ZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lD
KHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFt
ZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1
YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFy
eUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0K
KyAgICAqLworCitwcml2YXRlOgorICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFn
PEpJVE11bElDPiBtX211bElDczsKKyAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJh
ZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Cit9OworCitjbGFzcyBKSVRDb25zdGFudFBvb2wgeworcHVi
bGljOgorICAgIHVzaW5nIENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICBlbnVtIGNsYXNzIFR5
cGUgOiB1aW50OF90IHsKKyAgICAgICAgR2xvYmFsT2JqZWN0LAorICAgICAgICBDYWxsTGlua0lu
Zm8sCisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvLAorICAgICAgICBGdW5jdGlvbkRlY2wsCisg
ICAgICAgIEZ1bmN0aW9uRXhwciwKKyAgICB9OworCisgICAgc3RydWN0IFZhbHVlIHsKKyAgICAg
ICAgLy8gT09QUzogTWFrZSB0aGUgcG9pbnRlciBwYWNrZWQuCisgICAgICAgIFR5cGUgdHlwZTsK
KyAgICAgICAgdm9pZCogcGF5bG9hZDsKKyAgICB9OworCisgICAgSklUQ29uc3RhbnRQb29sKCkg
PSBkZWZhdWx0OworICAgIEpJVENvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2wmJikgPSBkZWZh
dWx0OworICAgIEpJVENvbnN0YW50UG9vbCYgb3BlcmF0b3I9KEpJVENvbnN0YW50UG9vbCYmKSA9
IGRlZmF1bHQ7CisKKyAgICBDb25zdGFudCBhZGQoVHlwZSB0eXBlLCB2b2lkKiBwYXlsb2FkID0g
bnVsbHB0cikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNp
emUoKTsKKyAgICAgICAgbV9jb25zdGFudHMuYXBwZW5kKFZhbHVlIHsgdHlwZSwgcGF5bG9hZCB9
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzLnNpemUoKTsgfQorICAgIFZhbHVlIGF0KHNpemVfdCBp
KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpXTsgfQorCitwcml2YXRlOgorICAgIFZlY3Rv
cjxWYWx1ZT4gbV9jb25zdGFudHM7Cit9OworCisKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1
YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBC
YXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJp
ZGU7CisKKyAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAg
ICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOyAvLyBPT1BTOiBtYWtlIHN1
cmUgd2UgdmlzaXQgdGhlc2Ugc29tZWhvdy4gT3IgYXNzZXJ0IHdlIGRvbid0IGhhdmUgdG8sIHNp
bmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KKyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFi
bGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+
IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsK
KyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxh
bi5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFz
ZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3Qg
QmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJh
c2VsaW5lSklUUGxhbjo6ZmluYWxpemUoKQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3Vs
dCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQg
cmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3
aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09E
RUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGls
YXRpb24gZmFpbGVkIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhl
bHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxI
ZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lk
IENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUs
IEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFj
a2V0LCBzY29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJS
ZWcgc2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5k
ZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFt
ZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6
dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFk
b3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tl
dCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAg
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwg
T0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRl
SW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFj
a2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BS
LCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9
IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAgLTcyLDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJz
OjplbnN1cmVTaGFkb3dDaGlja2VuUGEKICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhz
Y3JhdGNoMU5vbkFyZ0dQUikpOwogfQogCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChH
UFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBD
b2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQorewor
ICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7Cisg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJr
ZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNW
YWx1ZSkpKTsKKyAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVD
VF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRy
KGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihj
YWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lkIEND
YWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tl
dCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9j
aywgY2FsbFNpdGVJbmRleCk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywg
R1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5k
ZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwg
dGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lkIEND
YWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVy
bmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRD
b2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAy
ODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVy
YXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0
aGVyZSBpcyByb29tIG9uIHRoZSB0b3Agb2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxs
IGFyZ3VtZW50cy4KICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJS
ZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9p
ZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVl
UmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsK
KworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2
b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBK
U1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9j
aywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRo
aXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgpOworICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
R1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwg
R1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8v
IExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRv
IGluIHNoYWRvd1BhY2tldC4KICAgICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0m
LCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBz
Y3JhdGNoMik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEuY3BwCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsOCArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURh
dGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAg
ICBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykK
K3sKICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZt
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
OwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNp
emUoKTsgKytpKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNh
dmVMb2NhdGlvbnMtPmF0KGkpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDExICs0MywxMyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFy
Z3M7CiAgICAgdW5zaWduZWQgbnVtTG9jYWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBu
dW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsg
VUlOVF9NQVggfTsgLy8gT24gb3VyIG1hY2hpbmUgZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBSZWdpc3Rlck1hcDxWYWx1ZVJlY292ZXJ5PiByZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51
bWJlclRhZ1JlZ2lzdGVyIHsgSW52YWxpZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxl
ZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVj
b3ZlcnkgY2FsbGVlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZy
YW1lU2h1ZmZsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
MTMgKzM4LDEzIEBAIENhbGxGcmFtZVNodWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EKICAg
ICA6IG1faml0KGppdCkKICAgICAsIG1fb2xkRnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJG
cmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1lKGRh
dGEuYXJncy5zaXplKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycywgbnVsbHB0
cikKLSAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVycwotICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29k
ZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUo
Q2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyByb3VuZEFyZ3VtZW50Q291bnRUb0Fs
aWduRnJhbWUoZGF0YS5udW1QYXJhbWV0ZXJzKSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6
ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwogICAgICAgICArIHJvdW5kQXJndW1l
bnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Muc2l6ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0
YShtX2FsaWduZWROZXdGcmFtZVNpemUgLSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCiAgICAgLCBt
X2xvY2tlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX251
bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNzZWRBcmdzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGRh
dGEubnVtUGFyYW1ldGVycykKIHsKICAgICAvLyBXZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFs
IHJlZ2lzdGVycy4uLgogICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVy
OjpwcmVwYXJlRm9yVGFpbENhCiAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQ
YXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGFyZ3VtZW50Q291bnRPSyA9CiAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpCZWxvd09yRXF1YWwsIG1fbmV3RnJhbWVCYXNlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSk7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVycykp
OwogICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGln
bm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyks
IG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKC1zdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOwogICAg
IG1faml0Lm11bDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVy
KSksIG1fbmV3RnJhbWVCYXNlLCBtX25ld0ZyYW1lQmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCShyZXZpc2lvbiAyODI2MjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNCw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVEYXRhIGRhdGE7CiAgICAgICAgIGRhdGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CiAgICAg
ICAgIGRhdGEubnVtUGFzc2VkQXJncyA9IG1fbnVtUGFzc2VkQXJnczsKKyAgICAgICAgZGF0YS5u
dW1QYXJhbWV0ZXJzID0gbV9udW1QYXJhbWV0ZXJzOwogICAgICAgICBkYXRhLmNhbGxlZSA9IGdl
dE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5
KCk7CiAgICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytpKQpAQCAtNzk4LDYgKzc5OSw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBwZXJmb3JtU2FmZVdyaXRlcygpOwogICAgIAogICAgIHVuc2lnbmVk
IG1fbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0
ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KQotICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0lu
dGVyZmFjZUpJVCgmdm0sIG51bGxwdHIpCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJl
dGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5zaXplKCkgOiAwKQogICAgICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03
Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAg
ICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2Jq
ZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpH
bG9iYWxPYmplY3QpOworICAgIG1fcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAg
bV91bmxpbmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0K
IAogSklUOjp+SklUKCkKQEAgLTkwLDggKzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGlt
aXphdGlvbkNoZWNrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGlt
aXplOwotICAgIAotICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBU
cnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkp
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVy
KCkpKSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QwKTsKKyAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1
c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwg
QWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7
CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50
QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMjEgQEAgdm9p
ZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlX
cml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNo
cG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCkKIHsKKyAgICAvLyBPT1BTOiBUYWtlIGEgYm9vbGVh
biBvciBzb21ldGhpbmcgc2F5aW5nIGlmIHdlIGNhbiBiZSBudWxsLgorICAgIGF1dG8gb2sgPSBi
cmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
OChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIG9rLmxpbmsodGhp
cyk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEds
b2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KQotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJSZWFkT25seVdhdGNocG9pbnQoKS0+YWRkcmVz
c09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykgeworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwor
ICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xv
YmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBv
aW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQpAQCAtMTI5
LDcgKzEzOCw3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgIGlm
ICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBicmFu
Y2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2lu
dCgpOwogICAgIG9rLmxpbmsodGhpcyk7CkBAIC0xODEsMjEgKzE5MCw0MSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
IH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcg
cmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
c3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0
KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1
dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgcmVzdWx0KTsKKyAgICBoYXNFeGVj
dXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRh
YmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBlbHNl
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zm
c2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCByZXN1bHQpOworCisgICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSks
IHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKTsKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogewogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29t
cGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIkNvbXBpbGlu
ZyAiLCAqbV9wcm9maWxlZENvZGVCbG9jaywgIlxuIik7CiAgICAgCiAgICAgaml0QXNzZXJ0VGFn
c0luUGxhY2UoKTsKICAgICBqaXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgpOwogICAgIAotICAg
IGF1dG8mIGluc3RydWN0aW9ucyA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKLSAgICB1
bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNp
emUoKTsKKyAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKTsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogCiAgICAgbV9jYWxsTGlua0luZm9JbmRl
eCA9IDA7CiAKLSAgICBWTSYgdm0gPSBtX2NvZGVCbG9jay0+dm0oKTsKICAgICBCeXRlY29kZUlu
ZGV4IHN0YXJ0Qnl0ZWNvZGVJbmRleCgwKTsKKworICAgIC8vIE9PUFM6IE1heWJlIG9ubHkgZG8g
dGhpcyBpZiB3ZSBkaXNhYmxlIHNoYXJpbmcgc29tZWhvdz8KKyAgICAvKgorICAgIFZNJiB2bSA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPnZtKCk7CiAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxvY2s+KHZtKSB8
fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0pKSkgewog
ICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGV4
ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KICAgICAgICAgLy8gVGhpcyBv
cHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhlIExMSW50IGRl
dGVybWluZXMgaXQgd2FudHMgdG8KQEAgLTIzNiw2ICsyNjUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAg
Ki8KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1f
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4LDggKzMwOCw4IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAo
UHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bj
b2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNTI3LDcgKzU1Nyw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJz
dFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29k
ZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJ
bmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUg
Zm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQo
KSk7CkBAIC01NDUsOCArNTc1LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2Vz
KCkKIAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1
dGlvbigpKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
Y29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBj
dHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxs
RnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBb
IiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNm
ciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQpAQCAtNjc0LDU1ICs3MDQsNTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXpl
TWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0
YUdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklU
RGF0YSgpKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpK
SVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQor
Cit2b2lkIEpJVDo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJl
c3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRo
b3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpD
YXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7Cisg
ICAgLy8gT09QUzogTWF5YmUgdGhpcyBzaG91bGQgYmUgZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJs
b2NrPworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9j
ay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZH
OjpDYW5ub3RDb21waWxlOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAg
ICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRF
bWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5D
b21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2Nh
bkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9
IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5j
b2RlVHlwZSgpKSB7Ci0gICAgY2FzZSBHbG9iYWxDb2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToK
LSAgICBjYXNlIEV2YWxDb2RlOgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNC
ZUlubGluZWQgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6
Ci0gICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVz
ZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3Zl
cnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0
aW9uKG1fY29kZUJsb2NrKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2Nr
LT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlm
IChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFi
bGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZV
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29k
ZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0g
Rml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2st
Pm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9j
ay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICBp
ZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMo
KSkKKyAgICAgICAgICAgIG1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1
bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBU
YWJsZXMoKSk7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJs
b2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAK
LSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJv
ZmlsZXIoKSkpKQotICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNz
ZW1ibGVyPihtX2NvZGVCbG9jayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNh
c3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlz
YXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpKSkgeworICAgICAgICAvLyBPT1BTOiBidWls
ZCBhIGRpc2Fzc2VtYmxlciBvZmYgdW5saW5rZWQgY29kZSBibG9jaworICAgICAgICBtX2Rpc2Fz
c2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2Nr
KTsKKyAgICB9CiAgICAgaWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikp
IHsKKyAgICAgICAgLy8gT09QUzogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiB1bmxp
bmtlZCBjb2RlIGJsb2NrCiAgICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAg
ICAgICAgIG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAgICAgICAgbV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAor
ICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNv
ZGVzRm9yKG1fcHJvZmlsZWRDb2RlQmxvY2spLAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpC
YXNlbGluZSkpOwotICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2Rlcygq
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1fY29t
cGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmls
ZXIsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRl
eCgwKSkpOwpAQCAtNzQyLDExICs3NzMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0
aG91dEZpbmFsaXppbgogICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3Vl
KCk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xv
Z3VlKCk7CiAKICAgICBMYWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9w
T2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3Rlcik7CisgICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhG
cmFtZVNpemUgPSAtZnJhbWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFt
ZVRvcE9mZnNldCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3Rh
Y2tPdmVyZmxvdzsKQEAgLTc1NywxNiArNzg5LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW4KICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVl
U2F2ZXMoKTsKKyAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlz
dDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFs
aXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENv
bnN0YW50UG9vbFJlZ2lzdGVycygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZSkgeworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7
Ci0gICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAm
JiAoIW1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVu
dFZhbHVlUHJvZmlsZXMoKSArIEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3Rv
cmFnZSgpKSwgcmVnVDIpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0g
MDsgYXJndW1lbnQgPCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJn
dW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRo
ZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAg
ICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkg
d2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2Nv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBp
ZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9
IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3
NywxMiArODEzLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4K
ICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVn
cy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFn
KSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJn
dW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJl
Z3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1
ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2Nv
ZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklU
KG1fcHJvZmlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNp
emVNYXJrZXIpKQogICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZN
b3ZlKCpzaXplTWFya2VyKSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MzUsMjcgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQog
ICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2Fs
bE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93
U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9w
ZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3Rh
Y2tPdmVyZmxvd0Vycm9yLCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFt
ZXRlcnMgaXMgMSwgd2UgbmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVp
cmVzQXJpdHlGaXh1cCA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBp
ZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJp
dHlGaXh1cCkgeworICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAg
ICAgICBtX2FyaXR5Q2hlY2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMy
KDApLCAmbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBl
bWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
bV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRD
b2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVk
SW1tMzIoMCksIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNC
ZUlubGluZWQoKSkpOwogCiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1l
dGVycykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSkpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19j
YXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09u
RXhjZXB0aW9uKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1
Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRp
b25DYWxsQXJpdHlDaGVjaywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAg
ICAgYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwg
dGhpcyk7CkBAIC04MzksNyArODc4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkp
OwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlu
a0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhp
cywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQp
KTsKKyAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExp
bmtCdWZmZXIoKnRoaXMsIG1fdW5saW5rZWRDb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6
OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4OTcs
OCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAg
ICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hS
ZWNvcmQ6OkNoYXJhY3RlcjogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAg
ICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQg
KyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MDsgaiA8IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNl
dHNbal07CkBAIC04NzEsOCArOTEwLDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJp
bmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAg
ICAgICAgICAgYXV0byBjdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRj
aFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0p
OwogICAgICAgICAgICAgZm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZz
ZXRUYWJsZS52YWx1ZXMoKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxv
Y2F0aW9uLm1fYnJhbmNoT2Zmc2V0OwpAQCAtOTA2LDMyICs5NDUsMzUgQEAgdm9pZCBKSVQ6Omxp
bmsoKQogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNh
bGxlZSk7CiAgICAgfQogCi0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0
Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1
ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRj
aEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZm
ZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7
Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1faW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisgICAgYXV0byBmaW5h
bGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdl
biA6IGdlbmVyYXRvcnMpIHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0
YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1f
c3RhcnQpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9u
ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsK
KyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlv
biA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Ns
b3dQYXRoQmVnaW4pOworICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0
QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X2dldEJ5SWRzV2l0aFRoaXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZp
bmFsaXplSUNzKG1fcHV0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAg
ICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsK
KyAgICBmaW5hbGl6ZUlDcyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNl
T2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKIAogICAgIGZv
ciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAg
ICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwot
ICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0
KSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
Y29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5r
SW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAg
ICAgIGluZm8uZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKLSAgICB7Ci0g
ICAgICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5z
aXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRl
Y29kZU9mZnNldF0uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5h
cHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmlu
YWxpemUoKSk7CisgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAg
Zm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJl
bHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRl
Y29kZU9mZnNldF0uaXNTZXQoKSkKKyAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVu
ZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxK
U0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBp
ZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk4
MiwzNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29t
cGlsYXRpb24pKSB7CisgICAgICAgIC8vIE9PUFM6IG1ha2UgYnl0ZWNvZGUgcHJvZmlsZXIga25v
dyBhYm91dCB1bmxpbmtlZCBDQj8KICAgICAgICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFz
ZWxpbmVGb3JQcm9maWxlcigpKQogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRv
UHJvZmlsZXIobV9jb21waWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3Zt
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9j
b21waWxhdGlvbik7CisgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29t
cGlsYXRpb24obV9wcm9maWxlZENvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAog
ICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAg
ICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+
KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAg
CisgICAgLy8gT09QUzogTWFrZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhh
dCBrbm93cyBhYm91dCBVbmxpbmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJU
YWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5
UHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENv
ZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRh
dGEoKSk7CisgICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29k
ZUJsb2NrV2l0aEpJVFR5cGUobV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRh
Zz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJ
VENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAg
ICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhB
cml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUo
bV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBX
VEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0
dWJJbmZvcyA9IFdURk1vdmUobV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5t
X3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9q
aXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVp
bGRlci5maW5hbGl6ZSgpOworICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7
CisgICAgbV9qaXRDb2RlLT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wp
OwogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklU
IGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1
bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVj
dXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigi
SklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2Rl
QmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwg
cmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25S
ZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1
ICsxMDIxLDIxIEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAog
ICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAg
ICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9j
ayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6
U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAg
ICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxl
cihpKTsKLSAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAg
ICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChC
eXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4oKTsKLSAgICB9CisgICAgLy8gT09QUzogRG9uJ3QgdGhpbmsgdGhpcyBzaHJpbmsgaXMg
cmVhbGx5IGRvaW5nIGFueXRoaW5nIGFueW1vcmUuIFZlcmlmeS4KKyAgICAvL3sKKyAgICAvLyAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgIC8v
ICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9k
ZTo6TGF0ZVNocmluayk7CisgICAgLy99CiAKKyAgICAvLyBPT1BTOiBtX3BjVG9Db2RlT3JpZ2lu
TWFwIHNob3VsZCBsaXZlIG9uIEJhc2VsaW5lSklUQ29kZSBmb3IgYmFzZWxpbmUgY29kZWJsb2Nr
cy4KICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNl
dFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOworICAgICAg
ICBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNU
b0NvZGVPcmlnaW5NYXApKTsKIAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29k
ZVdvcmRGb3JCYXNlbGluZUpJVC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1f
aml0Q29kZS0+c2l6ZSgpKSAvCi0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxv
Y2stPmluc3RydWN0aW9uc1NpemUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxv
Y2stPnNldEpJVENvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9j
ay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxs
KCkpOwogCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSAr
MTA0NywxMSBAQCBzaXplX3QgSklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlu
a0J1ZmZlci0+c2l6ZSgpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21w
aWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6
cHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKIHsKICAgICBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsK
ICAgICBjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJu
IGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFk
KGNvZGVCbG9jayk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRs
ZXJzKCkKQEAgLTEwNDIsMTggKzEwOTEsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBh
cmF0aW9uQmVmb3JlQwogICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xv
Z0VudHJpZXMoKm1fdm0sICJQcmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQog
Ci11bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCiB7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRSZWdpc3RlcnMoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVt
Q2FsbGVlTG9jYWxzKCkpKSk7CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRG
b3JGcmFtZVBvaW50ZXJPZmZzZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZy
YW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4g
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9
CisKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29k
ZUJsb2NrKQogewogICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lz
dGVyQ291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0
YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQor
CiBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAg
ICAgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRf
SklUX09GRlNFVChhY3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9
PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwg
I2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50Pihh
Y3R1YWwpKTsKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fz
c2VtYmxlci5oIgpAQCAtNDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2lu
Y2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJ
VC5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFw
LmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYu
aD4KQEAgLTE0OSwxNCArMTUxLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBz
dHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0
aW9uOwotICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5r
ZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lk
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJVF9D
TEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgY2xhc3Mg
SklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgICAg
ICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklU
U3R1YkNhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEsNiArMTcz
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3Bs
YWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4K
ICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9
IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBwdWJs
aWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAg
IH5KSVQoKTsKQEAgLTE3OCwyOCArMTgyLDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBW
TSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lk
IGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwot
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAg
ICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAg
ICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJl
YWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBD
b21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJ
VENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9
IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0s
IGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAg
ICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRl
Q29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMg
dW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7Cisg
ICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2Nr
Kik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayop
OwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNl
Y29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFNlY29uZHMgdG90YWxDb21waWxlVGltZSgpOwogCisgICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxl
R1BSOworICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX2NvbnN0YW50c0dQUiA9IExM
SW50OjpSZWdpc3RlcnM6OnBiR1BSOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5rUGFz
cygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAgICAgIHZv
aWQgbGluaygpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRD
b21waWxhdGlvbkVmZm9ydCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21w
aWxlKENvZGVCbG9jayosIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAvLyBBZGQg
YSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAg
ICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
ZnVuY3Rpb24pCkBAIC0yMjMsNiArMjMyLDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9
CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAg
IHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQs
IEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQs
IEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwg
R1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFt
ZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSwgY29u
c3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnLCBjb25z
dCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Y29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVibGljOgor
ICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcp
OworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcpOwor
ICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJl
Zyk7CisKKyAgICAgICAgdm9pZCBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BS
UmVnIHJlc3VsdCA9IHJlZ1QwKTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1bXAg
anVtcFRvSGFuZGxlcikKICAgICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3Mu
YXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpAQCAtMjU4LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQg
IT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJn
cwogICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYm
IE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAg
LCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAg
ICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bj
b2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3Rf
dmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAg
ICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyop
OworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwg
Q2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29s
IGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29u
c3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4NywxNCAr
MzIyLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIo
VmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmll
ck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0
V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJp
ZXIoR1BSUmVnIG93bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFs
dWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9y
CiAgICAgICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0g
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3Mp
OworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBH
UFJSZWcpOworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2Zp
bGUmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGNvbnN0IEJ5dGVjb2RlJiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKQEAgLTMwNSw4ICszNDEsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9w
OjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CiAgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsK
IAotICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklE
IGNlbGxHUFIsIEFycmF5UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7Ci0gICAgICAg
IHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwg
UmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIs
IFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3Qg
Qnl0ZWNvZGUmLCBwdHJkaWZmX3QsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3Jh
dGNoR1BSKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1v
ZGUgZWNtYU1vZGUoT3ApOwpAQCAtNTkzLDcgKzYzMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYy
NywxNCArNjY0LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNo
aWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRl
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJp
dmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQg
ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBi
YXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsK
LSAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAg
IHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3Ms
IEdQUlJlZyk7CisgICAgICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUs
IEdQUlJlZyBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjQ2LDcgKzY4Myw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJl
Z2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlm
eVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BS
UmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2lu
dChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFi
bGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0
Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoq
IGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoq
KTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
KTsKQEAgLTY1NSw2ICs2OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVt
aXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rl
cik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAg
ICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBi
b29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wg
aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC02OTYsMjYgKzczNCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0g
R2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9HRVRfRlJP
TV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZl
VHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNM
QVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFy
KiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNl
ZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBl
bWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2ZWRDbG9z
dXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9z
Y29wZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3Vy
ZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNkZWZpbmUg
REVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Nj
b3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNP
TFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJF
X1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUs
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0
ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3Qg
Y2hhciogdGh1bmtOYW1lKTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlH
ZW5lcmF0b3IoVk0mKTsKQEAgLTc2MCwxMCArNzgwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNr
T25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQpOwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAg
ICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKE1ldGFkYXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7Cisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPgorICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJh
dGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVu
Y3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNh
bGw+CkBAIC04MjEsMjAgKzg0MSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0
YXJnZXQub2Zmc2V0KSk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8
T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5
cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9w
ZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFy
Z3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+
KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0
KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAg
ICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFt
ZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jl
c3VsdCwgdm9pZD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBt
ZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4g
YXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4g
YXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENh
bGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1l
dGFkYXRhLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1
bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJn
R1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE5LDI1
ICs5MzksMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAg
ICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAg
ICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRp
bWl6ZWRPcklubGluZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyBy
ZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJl
T3B0aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXpl
ZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9m
IHZhbHVlIHByb2ZpbGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAg
ICAgIC8vIGluIHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9v
bCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAg
ICAgIHZvaWQgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMo
KTsKKworICAgICAgICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBz
dGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29t
cHV0ZUNvbXBpbGVUaW1lcygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8g
Y2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8K
LSAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwg
dGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBz
bG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBH
ZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRB
cml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJl
dGVyOwogCkBAIC05NjQsOSArOTc5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29y
ZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9j
b3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQ
cm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNl
cHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxG
cmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEwMDAsMTEg
KzEwMTIsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1
Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRv
TWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsK
LSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1f
c2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29k
ZTsKKyAgICAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9Owor
ICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIg
fTsKKworICAgICAgICBNYXRoSUNIb2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8QmFz
ZWxpbmVKSVRDb2RlPiBtX2ppdENvZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29u
c3RhbnRQb29sOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2Jq
ZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAg
ICAgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgICAg
IEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAgICBGaXhl
ZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgRml4
ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAg
ICAgICAgc3RydWN0IE5vdEFDb2RlQmxvY2sgeyB9IG1fY29kZUJsb2NrOwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQ
UjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/
IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0zMjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJlZ1QxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDIsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyAr
Mzc1LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0K
IAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTU3Myw3ICs1NzcsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgCiAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6
ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0
ZT4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMq
IG5lZ2F0ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAg
VW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51
bmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJv
ZmlsZUluZGV4KTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVn
SUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIg
dG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2Fu
IGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFy
aXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0
KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJ
QyogYWRkSUMgPSBtX21hdGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2lu
c3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVt
aXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25W
YWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwx
MSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBn
ZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElD
R2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAg
ICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxl
KCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChh
cml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUp
OworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0g
ZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhK
dW1wcyk7CiAKQEAgLTEwMTUsMTAgKzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0
KEpJVEJpbmFyeU1hdGhJQwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgp
KQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAg
ICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFBy
b2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAg
aWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJl
Z3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOwor
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNl
CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBz
KTsKIApAQCAtMTA1NSwxMyArMTA2MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklU
VW5hcnlNYXRoSUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQp
OwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAg
ICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAg
fSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWlj
PihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVu
Y3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMp
KTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBs
YWJlbCgpOwpAQCAtMTEyMCwxMyArMTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUQmluYXJ5TWF0aElDCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewog
ICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkK
LSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pK
TWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFBy
b2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJl
Z1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9u
KSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRo
RW5kID0gbGFiZWwoKTsKQEAgLTExNjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rp
dihjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBh
cml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3Vu
bGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERpdj4oKS5tX3Byb2ZpbGVJbmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3Bl
cmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFu
ZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIx
MSw4ICsxMjIwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJp
dGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3Vu
bGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE11bD4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRo
SUNzLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElD
LmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11
bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwg
b3BlcmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMg
PSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0
aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tX3Byb2ZpbGVJbmRleCk7
CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmls
ZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1
YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24g
MjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bChjb25zdCBPcENhbGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCByZWdUMSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEs
IENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSksIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTksNyArMjU5LDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAgZW1pdExvYWQo
Y2FsbGVlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3Vs
dChieXRlY29kZSk7CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
Y29uc3QgSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgp
OwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdu
bWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDcgKzM0
MSw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdz
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1
ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC00NCw3
ICs0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJ
VDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5j
aGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDE4ICs1
NCwxOCBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3Zh
cmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6
Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAg
ICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
aW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9y
KGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGlj
X2Nhc3Q8aW50PihzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2tw
b2ludCkpOwogCisKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1p
dFByb2ZpbGluZygpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGlu
Z1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZv
cihtZXRhZGF0YSwgY2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsK
KyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFk
YXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9m
QXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJ
RCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyArNzksNyBA
QCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3Mg
fHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlu
a0luZm9Db25zdGFudCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNv
ZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2Rl
Lm1fYXJndW1lbnRzOwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNv
bnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJh
bWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9
IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qx
LCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCBy
ZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJh
cmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lk
KikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEwMywxNiBA
QCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVw
T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxz
ZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwot
ICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVn
VDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0
dXBPcGVyYXRpb24sIHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdU
MCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0
aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFk
ZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1w
IG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMy
KHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsK
KyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIo
QWJvdmUsIHJlZ1QzLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwg
Q2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsK
ICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhp
cycuCkBAIC0xMjcsMTYgKzEzMSwxNiBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0
IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxs
RXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdU
MSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZy
YW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1l
T2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxF
dmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7Ci0KLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxs
RXZhbCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENh
bGxSZXN1bHQoYnl0ZWNvZGUpOwogCkBAIC0xNDgsNyArMTUyLDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAg
Q2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENh
bGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+
c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVy
T2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKQEAgLTE1Niw0MyArMTYwLDQ3IEBAIHZvaWQgSklU
Ojpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBs
b2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsK
LSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
aW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZp
cnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1
dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wg
SklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkK
LXsKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5r
SW5mbyosIHVuc2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KSB7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0
IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxs
JiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50
KQogewotICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVE
YXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVt
YmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxl
RGF0YS5udW1Mb2NhbHMgPQorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0
YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOworICAg
IHNodWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAgIHNodWZm
bGVEYXRhLT5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpOworICAgIHNodWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJl
clRhZ1JlZ2lzdGVyOworICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBieXRl
Y29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIp
OwotICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1
ZmZsZURhdGEtPmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRh
LmFyZ3NbaV0gPQorICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBW
YWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAgICAgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAog
ICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNh
bGxlZSA9Ci0gICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMp
OwotICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7
Ci0gICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZs
ZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMp
OworICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRP
ZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1
bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdU
MCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENh
bGxGcmFtZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7
CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVt
cExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0
aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigq
dGhpcywgKnNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBh
ZGRTbG93Q2FzZShzbG93UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7
CisgICAgaW5mby0+ZnJhbWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAg
ICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApA
QCAtMjE4LDE0ICsyMjYsMjUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgog
ICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4u
CiAgICAgKi8KLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNv
ZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2Fs
bExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVw
RnJhbWUoYnl0ZWNvZGUsIGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8g
PSBudWxscHRyOworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0g
VUlOVF9NQVg7CisgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBp
bmZvID0gbV91bmxpbmtlZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5m
bzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7
CisKKyAgICAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExp
bmtJbmZvSW5kZXgpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxD
b21waWxhdGlvbkluZm8oKSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0g
aW5mb0NvbnN0YW50OworICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5m
b0NvbnN0YW50KTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8g
Ynl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsK
LSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgp
LmJpdHMoKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0
cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRh
Z09mZnNldCkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsg
Ly8gcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAtMjM0LDE2ICsyNTMsMTIgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0
ZWNvZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25J
bmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENh
bGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQot
ICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4
KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9J
bmRleCwgaW5mb0NvbnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50
KGluZm9Db25zdGFudCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsK
LSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhp
cywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAg
ICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIp
OwogICAgICAgICB9KTsKQEAgLTI1MywxMyArMjY4LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BD
YWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8g
c2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJ
bmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBk
b25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9
IGRvbmVMb2NhdGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsK
QEAgLTI3MywyMCArMjg4LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29u
c3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7
CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNs
b3dQYXRoKCptX3ZtLCAqdGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1Bh
dGgoKm1fdm0sICp0aGlzLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24o
SklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcg
KzQxMCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAg
ICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50
LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2Fz
ZS5saW5rKHRoaXMpOwogfQpAQCAtNDE2LDEwICs0NDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0
b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQ
UlJlZyBpdGVyYXRvckdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBK
dW1wTGlzdCBub3RPYmplY3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlcmF0b3JHUFIpKTsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0
ZXJhdG9yR1BSKSk7CkBAIC00MzIsMTkgKzQ1OCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIG1vdmUoaXRlcmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBuZXh0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCku
cmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiAKICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0
aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05v
dE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAg
ICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00NTIsNyArNDc2LDYgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4
dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rp
b24gPSAoWyZdICgpIHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewog
ICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93
OwpAQCAtNDcwLDUwICs0OTMsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbgogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJh
dGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAg
IG9yOChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2Vu
ZXJpYykpLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vl
bk1vZGVzKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1l
dGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7
CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFk
YXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JO
ZXh0PihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludCgpOwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNP
YmplY3QpIGluIHJlZ1QwCiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJS
ZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0g
ICAgLy8gaXRlclJlc3VsdEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkg
aWQgYmVsb3cuCi0gICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2Fs
bFJlc3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRS
ZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBw
cmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0
ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRv
bmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVH
UFIpLCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5k
b25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VU
b05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3Jh
dGNoMSA9IHJlZ1QyOwotICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAg
UmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7Cisg
ICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdp
c3RlcnMpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2Ny
YXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExp
c3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVH
UFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRp
b25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBnbG9iYWxHUFIpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQ
UlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAg
ICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgp
KSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJv
cGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAg
ICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVz
dWx0R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAt
NTI3LDU5ICs1NzcsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29u
cwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JD
aGVja3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BS
UmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFw
cGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlx
dWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwog
ICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0
R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNh
bGxSZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0Jp
dHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92
ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29k
ZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3Qu
bGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9y
UmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFy
Z3VtZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBV
bmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwo
KTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5
SWRJbmRleCsrXTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAot
ICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86
Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBH
UFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVl
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJl
c3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0
LmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtMTU5LDEwICsx
NjAsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0
VHlwZSkKICAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShq
aXRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6
OnVzZURhdGFJQygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4g
T3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBA
IC00NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5m
CiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBl
KQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHVi
SW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1f
c3R1YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUs
IGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNp
dGVJbmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVz
ZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3I6OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93
UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewog
ICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9j
YXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAK
ICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUg
QEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5m
by0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91
dGluZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAg
bV9zdGFydCA9IGppdC5sYWJlbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURh
dGFJQyhtX2ppdFR5cGUpKTsKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5m
b0dQUik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJ
VEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlw
ZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpT
VmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBA
IC0xMTAsNyArMTE4LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRv
cgogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsCiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSkKICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRU
eXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycywgYmFz
ZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQotICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5h
bWUudWlkKCkgPT0gY29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkp
CisgICAgLCBtX2lzTGVuZ3RoQWNjZXNzKGNvZGVCbG9jayAmJiBwcm9wZXJ0eU5hbWUudWlkKCkg
PT0gY29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoYmFzZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuaAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRl
ICJKSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCkBAIC0zOCwxMSAr
MzksMTE0IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNs
YXNzIENhbGxTaXRlSW5kZXg7CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBT
dHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBl
bnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50
OF90OwogCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxC
eUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpy
ZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVn
VDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVF
bnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6cmVnVDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBh
IENvZGVCbG9jayBhbmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHVi
SW5mby4KKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZv
ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cHJvdG8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVj
dCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpy
ZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1
Y3QgQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKK307
CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJl
Z1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9
OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFz
ZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KGJyYW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xh
c3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yKCkgeyB9CkBAIC02MiwxNSArMTY2LDIxIEBAIHB1YmxpYzoKICAgICB2b2lk
IGZpbmFsaXplKAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtC
dWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJl
ZyBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlu
a2VkU3R1YkluZm8geyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9Owor
CiBwcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1f
aml0VHlwZTsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgor
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX2RvbmU7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsgLy8gT09QUzogbWFrZSByZXBvcnRDYWxsIHBhc3Mg
c29tZXRoaW5nIGluIHdlIGNhbiB1c2UgZm9yIHRoZSBub24tQ1RJIHRodW5rcyBidWlsZHMuIAog
fTsKIAogY2xhc3MgSklUQnlJZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvciB7CkBAIC05OCw3ICsyMDgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9i
YXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKK3B1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKQEAgLTEzMiw4ICsyNDIsOCBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdl
bmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAg
IENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVn
cyBiYXNlLAotICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBH
UFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBK
SVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gs
IEVDTUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImKTsKICAgICAKQEAgLTE2MywxMSArMjczLDkgQEAgcHVibGljOgogCiAgICAg
dm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAg
SlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxl
SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTE5MSw4ICsyOTksNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjIsNiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAot
cHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICsz
NDUsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTI3Nyw4ICszNzksNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXIm
IGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAot
cHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSAr
NDAyLDkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fz
c2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1Zh
bHVlUmVncyBtX3Jlc3VsdDsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0Owog
ICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApA
QCAtMzMwLDggKzQyOCw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShy
ZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAg
aWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
dW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykg
PT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIo
KTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lz
dGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29u
c3RhbnQpIHsKKyAgICAgICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBhbGwg
bGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtl
ZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0
dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjphcHBlbmRDYWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0
YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24s
IFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwg
cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBK
U1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0
b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICBy
ZXR1cm4gY2FsbDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVh
bFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZp
cnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhm
dW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1
ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVH
UFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5p
c0tub3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0
Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgs
ICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9p
bnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVs
cy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxp
bmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
SW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRz
KCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRv
IGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkz
LDI5ICszMTgsMzMgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQog
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJl
Z2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVn
cyB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKLQotICAgIC8v
IFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2Ug
Y2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UK
LSAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSAgICBzdG9y
ZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAg
ICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5k
aWYKLX0KKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwo
KSktPmxlbmd0aCgpID09IDE7Cit9CisKKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkK
Ky8veworLy8gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CisvLworLy8gICAgLy8g
V2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBj
YW4ganVzdCBkbyBhIGRpcmVjdAorLy8gICAgLy8gc3RvcmUuCisvLyNpZiBVU0UoSlNWQUxVRTY0
KQorLy8gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Cisv
LyNlbHNlCisvLyAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lz
ZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsK
Ky8vICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBh
eWxvYWQpOworLy8gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0
cy50YWcpOworLy8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBz
dGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJv
ZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7
CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzIzLDQx
ICszNTIsNDIgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4u
LikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjpl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFs
dWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZh
bHVlKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7CisKKyAgICBwdHJkaWZmX3Qgb2Zm
c2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgp
OworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0
KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVn
KQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVn
cyhyZXN1bHRSZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97Cisv
LyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVz
dWx0UmVnKSk7CisvL30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcg
cmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcg
cmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFs
dWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKLWlubGluZSB2b2lkIEpJVDo6
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJy
YXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsK
ICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBhcnJheVByb2ZpbGUtPmFk
ZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRh
KHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmlsZSk7CiAgICAgfQogfQog
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3Rl
cklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0
Y2hHUFIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJl
Z2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQogewotICAgIGlmIChzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwot
ICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYXJyYXlQcm9maWxlR1BSLCBBcnJh
eVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKSk7Ci0gICAgfQorICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVu
U3RydWN0dXJlSUQoKSwgY2VsbEdQUiwgc2NyYXRjaEdQUik7CiB9CiAKIEFMV0FZU19JTkxJTkUg
aW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQpA
QCAtMzgwLDcgKzQxMCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0
ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywg
RlBSZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+
Y29uc3RhbnRSZWdpc3RlcihyZWcpOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGlu
Q29uc3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcp
OwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFs
dWUpOwogICAgIH0gZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFs
dWUpOwpAQCAtNDk2LDcgKzUyNiw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1
YWxSZWdpc3QKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
VmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2Vs
bChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcu
aXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAg
ZWxzZQpAQCAtNTA2LDcgKzUzNiw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
VmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVC
bG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewog
ICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNCwxMSArNTQ0LDYgQEAgaW5saW5lIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29s
IEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICBy
ZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMy
KCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXIm
IG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSkgewpAQCAtNTQ0LDExICs1NjksMTcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhv
ZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwg
c28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50
KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChz
cmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQor
ICAgICAgICBzd2l0Y2ggKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKHNyYykpIHsKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkludGVnZXI6CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3Vi
bGU6IHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5n
ZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAgbW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUo
dmFsdWUpKSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3QpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
NTY2LDExICs1OTcsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJl
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykK
LXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0
b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTU5NSw3ICs2MjEsNyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJl
Z2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykp
CisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTYzNywzMCArNjYzLDcgQEAgQUxXQVlTX0lOTElORSBp
bnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewogICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJl
dHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0
KGluc3RydWN0aW9uKTsKLX0KLQotQUxXQVlTX0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVk
R2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNvZGUpCi17Ci0gICAgdW5zaWduZWQga2V5ID0g
Ynl0ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsgLy8gSGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBh
IGtleQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsK
LSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1
dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAg
IG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAg
IHJldHVybiBnZXRQdXRJbmZvOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFM
V0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJp
bmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50
NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVk
QXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJp
dGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBC
aW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1fY29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5
LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBhcml0aFByb2ZpbGU7CisgICAgcmV0dXJuIG1f
dW5saW5rZWRDb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY4MSw2ICs2ODQsNjEgQEAgQUxXQVlTX0lOTElO
RSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0
KCk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXpl
X3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX21ldGFk
YXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFU
YWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEo
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQor
eworICAgIGxvYWQzMihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2st
Pm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6
ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKHNfbWV0YWRh
dGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRh
YmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
c3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTgodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0
YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZyB2YWx1
ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3Jl
MzIodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0
YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1h
dGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNp
emVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMiht
X3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRl
Y29kZSkgKyBvZmZzZXQpLCBzX21ldGFkYXRhR1BSLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjpsb2FkQ29uc3RhbnQoSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjb25z
dGFudEluZGV4LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX2NvbnN0
YW50c0dQUiwgc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1
bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJl
ZyByZXN1bHQpCit7CisgICAgbG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJl
c3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFu
dChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKKyAgICAvLyBPT1BTOiBNYXliZSBtYWtl
IHRoaXMgbW9yZSBlZmZpY2llbnQ/CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVzdWx0KTsKKyAgICBs
b2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9m
KEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzEsNyArOTMxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJl
Z1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJl
dHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXND
YXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
OwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3Qg
SW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25z
LCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4
LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRh
YmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDI0LDcgKzEwMjQsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAKICAgICAvLyBjcmVh
dGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2gg
c3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dp
dGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dp
dGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1
bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3ICsxMDQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3
aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25z
dCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRj
aFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRj
aFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5r
ZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQAogI2luY2x1ZGUgIlR5cGVQ
cm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKQEAgLTU0LDExICs1NiwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwog
CiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVy
KCkpCi0gICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFs
dWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKLSAgICAgICAgZWxzZQorICAgICAgICAvLyBPT1BTOiBt
b3N0ICJPdGhlciIgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50cyBjYW4ganVzdCBi
ZSBncmFiYmVkIGZyb20gdGhlIFVubGlua2VkQ29kZUJsb2NrLiBJdCdzIGp1c3QKKyAgICAgICAg
Ly8gYSBjb3VwbGUgdHlwZXMgdGhhdCBjYW4ndC4gQ3JlYXRlIGFuIGFic3RyYWN0aW9uIGZvciB0
aGF0LgorCisgICAgICAgIHN3aXRjaCAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkgeworICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkRvdWJsZTogeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBzdG9yZTY0KEltbTY0KEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tD
b25zdGFudChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NG
b3IoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTg3LDM3ICsxMDAsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNv
bnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxv
Y2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxv
Y2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAg
UmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJl
ZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lz
dGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CiAKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7
Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpj
b25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlh
bGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsK
LSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1l
dGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2Fk
UHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9m
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZz
ZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVSZWcpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0
QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxs
b2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2Vz
KTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CisgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAg
IFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0
YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7
CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAm
dm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogfQogCkBAIC0xMzEsNyArMTQyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVz
X2hhc19pbnN0YW5jZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1
ZSwgcmVnVDApOwogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9s
Lmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9
IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5j
ZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNU
X09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2Z1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJv
bEZ1bmN0aW9uKSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rvciwg
cmVnVDApOwogCkBAIC0xNTQsMzAgKzE2NiwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsK
IAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJl
c3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNl
VmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhl
biB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
Ojp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3RvR1BSID0gQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BSKTsKICAgICAKICAgICAvLyBDaGVjayB0aGF0
IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tl
ZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Rv
R1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVn
VDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUNSwKLSAg
ICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICByZXN1bHRHUFIsCisgICAgICAgIHZhbHVl
R1BSLAorICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgc3R1YkluZm9HUFIsCisgICAgICAgIEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDEsIEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6c2NyYXRjaDIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAorCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQgKzIxMiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVz
cyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19h
c3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIp
OworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9
PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9m
T3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTI0MCw3ICsyNTksNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAKICAgICBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApA
QCAtMzc0LDcgKzM5Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlv
bioKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwotICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQo
KTsKICNlbHNlCkBAIC0zODMsOSArNDAyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0
IEluc3RydWN0aW9uKgogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0
b3IoVk0mIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9w
X3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJikKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAg
ICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0Ojps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAgLTQxMSw3ICs0MzAsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAKICAgICBpZiAoZHN0ICE9
IHNyYykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNDM0LDkgKzQ1MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9w
ZXJ0eV9rZXkoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVu
Y3Rpb25OYW1lLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC00NjUsOCArNDg0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25z
dCBJbnN0cnVjdGkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIg
PSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwog
ICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRy
dWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSks
IHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5j
aElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2Jh
bE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCku
Z2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsK
QEAgLTQ4MCw3ICs1MDEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOwpAQCAtNTE5LDcgKzU0MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNv
bnN0IEluc3RydWMKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVtcCBpc05v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1Qy
LCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1w
KGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2Jq
ZWN0SXNGb3JlaWduID0ganVtcCgpOwogCkBAIC01NDMsNyArNTY0LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydQogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxs
IGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVy
ZS4KICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKSwgdGFyZ2V0KTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIs
IHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAo
YnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0g
anVtcCgpOwogCkBAIC01ODIsMTUgKzYwMywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVm
aW5lZF9vcl9udWxsKGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0
ZWNvZGUubV92YWx1ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRP
cGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVjaWFsUG9p
bnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFs
ID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5h
c0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1
bXBlZCk7CisgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50
ZXIsIHJlZ1QxKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1
YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSks
IGJ5dGVjb2RlLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwogfQpAQCAt
NjI1LDggKzY0NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlv
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4
cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFk
ZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIp
LCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIo
dmFsdWVJc1RydXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBh
ZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDAsNyAr
NjYxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8v
IGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcg
YXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1h
eSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGlj
aCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAg
LTY5NSw3ICs3MTYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlv
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDEpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBy
ZWdUMSwgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxzZQog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CkBA
IC03MTEsNyArNzMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rp
bwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgdGhyb3duVmFsdWVHUFIgPSBhcmd1bWVudEdQUjE7CkBAIC03MjAsNyArNzQyLDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogCiAjaWYgTlVNQkVSX09G
X0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgaml0LmxvYWRQdHIoJnZtLnRvcEVudHJ5
RnJhbWUsIGFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVySW1wbChhcmd1bWVudEdQUjApOworICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihhcmd1bWVudEdQUjApOwogI2VuZGlm
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsK
QEAgLTkwOCw3ICs5MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0
IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJp
Y3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdU
MSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTE4LDcgKzk0MSw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTMxLDcgKzk1
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKICAgICAKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZS
ZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsK
IH0KQEAgLTk1MSw3ICs5NzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0
IEluc3RyCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKICAgICBp
c0JpZ0ludC5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk3OCw3ICsxMDAyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTkzLDcgKzEwMTcsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQ2NChBZGRy
ZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lz
dGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1Qz
LCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKworICAgIC8vIE9PUFM6IFRoaXMgaXNuJ3QgZWxlZ2FudC4gV2h5IGFyZW4ndCB0aGV5
IGluIHRoZSBjYWxsZWUgc2F2ZSBidWZmZXIuIEkgZ3Vlc3MgYmVjYXVzZSB3ZSBjYW4gT1NSIGV4
aXQgaGVyZT8KKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lz
dGVycygpOwogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0
cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0Nh
dGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7
CkBAIC0xMDExLDIzICsxMDM4LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IElu
c3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8g
dGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBi
dWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKLSAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0
UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7
Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5k
ZXguYXNCaXRzKCkpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
blRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRl
eC5hc0JpdHMoKSk7CiAgICAgYXV0byBza2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8s
IHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9T
UkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5n
KCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1Qw
KTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQs
IHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxW
YWx1ZVByb2ZpbGUmPihwcm9maWxlKSwgcmVncyk7Ci0gICAgICAgIH0pOwotICAgIH0KICNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIApAQCAtMTA1Myw4ICsxMDY4LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1
dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxl
IGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0g
ICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVz
W3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUlu
ZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRp
YXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAK
QEAgLTEwODEsMTMgKzEwOTYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29u
c3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0
aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25z
LCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dp
dGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRl
ZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUu
ZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
Q2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIApAQCAtMTA5OSwyMCArMTExNSwyMiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVs
dE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVD
VElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdX
aXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5
VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgpOwogICAgIGZhckp1
bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOwotICAgIGxv
YWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOworICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVl
c3RzKCkpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0
MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgp
LCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVi
dWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwpAQCAtMTEzMyw3ICsxMTUxLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
Mik7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVt
cCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTQ4LDcgKzExNjYsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE2Niw3ICsxMTgzLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmVxX251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAg
ICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3
YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTg4LDEyICsxMjA1LDE0IEBAIHZvaWQgSklU
OjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBDVEkg
ZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdp
c3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xv
bmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUu
Ci0gICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKKyAgICBzaXplX3Qg
Y291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1WYXJzKCk7CiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCiAg
ICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCi0g
ICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CisgICAgCisgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0V3JpdGVC
YXJyaWVyKHJlZ1QwKTsKIAogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAjZWxz
ZQpAQCAtMTIxMiw3ICsxMjMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5z
dHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZt
KQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUo
WDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTEzMTAsMjMgKzEz
MjksMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlz
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hl
ZFN0cnVjdHVyZUlEOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNE
c3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkp
OwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVj
dHVyZUlEKCksIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1f
Y2FsbGVlOwotICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAm
bWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdU
MDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBy
ZXN1bHRSZWcgPSByZWdUMDsKQEAgLTEzNDIsNyArMTM1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcs
IEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAt
IEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zm
c2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVn
KTsKIAotICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcENyZWF0ZVRoaXM6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkNhY2hlZENhbGxlZSgpLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNT
ZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywg
VHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlv
blJlZykpOwogICAgIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIs
NyArMTM4Nyw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFu
KHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0K
QEAgLTEzODIsNyArMTM5OCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5z
dHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAg
eG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZh
bHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyAr
MTQxMSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0x
NDA0LDcgKzE0MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVj
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAK
QEAgLTE0MTgsMTAgKzE0MzcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKAogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29u
c3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29k
ZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50
R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1
bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTQzMCw3ICsxNDUwLDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6
emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJs
eVJldHVybigpKSkgeworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21J
bmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fdW5saW5rZWRDb2RlQmxvY2stPmxvb3BIaW50
c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJf
dCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwog
ICAgICAgICBsb2FkUHRyKHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVy
biA9IGJyYW5jaFB0cihCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFybHlS
ZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTE0NDAsNyArMTQ2MCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICNlbHNlCiAgICAgICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKLSAgICAgICAgbW92ZVZhbHVlKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVz
dWx0UmVncy5ncHIoKSk7CiAgICAgICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAg
ICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoKTsKQEAgLTE0NTMsOCArMTQ3Myw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGlu
dChjb25zdCBJbnN0cnUKIAogICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6
IAogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaEFkZDMyKFBvc2l0aXZlT3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0
aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCi0gICAgICAgICAgICBBYnNvbHV0ZUFkZHJl
c3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAg
ICAgICBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIo
KSkpKTsKICAgICB9CiB9CiAKQEAgLTE1MDksNyArMTUzMCw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFyZ3VtZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTIyLDcgKzE1
NDQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAjaWYgRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAg
ICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMTU2NCwzNCArMTU4NiwzNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAg
PSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4
cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVn
RXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xv
YmFsR1BSID0gYXJndW1lbnRHUFIwOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8
UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAg
IGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAg
ZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVj
b2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7Cisg
ICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwogCiAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5j
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxz
ZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxz
ZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVj
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAg
IEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwg
JnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTYyMSwyMyArMTY0NSwyNCBAQCB2b2lkIEpJVDo6
ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxv
YWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29k
ZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCiAKLSAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0
aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwciwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25z
dGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9w
OjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24s
IGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0
aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBp
ZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlv
bik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAg
ICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjY0LDI5ICsxNjg5LDMwIEBAIHZvaWQg
SklUOjplbWl0X29wX25ld19hc3luY19nZW5lcmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1f
YXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFs
dWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IGFyZ3VtZW50R1BSMik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVj
b2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxl
KCksIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBzaXplKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVu
Z3RoOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXpl
SW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNp
emVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAp
OworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJh
eVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ3Vt
ZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAjZWxzZQorICAgIG1hdGVyaWFs
aXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKICAgICBlbWl0
TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlv
blByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFu
ZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
ICNlbmRpZgogfQogCkBAIC0xNjk0LDggKzE3MjAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKGNvCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJs
ZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB0
eXBlIHByb2ZpbGVyIGlzIGVuYWJsZWQuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVk
VHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAK
QEAgLTE3NzcsMjAgKzE4MDQsMjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdH
UFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0No
aWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBH
UFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJn
dW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5z
dXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVn
LCBzY3JhdGNoMlJlZyk7CisgICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25B
cmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2Vu
UGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsK
KyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwg
cmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNW
YWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNr
ZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJu
IG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdXNpbmcgdGhlIGNvbnRyb2wgZmxv
dyBwcm9maWxlci4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNC
bG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7
CkBAIC0xODYwLDcgKzE4OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29u
c3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwogCiAgICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE4ODYsNyArMTkxNyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMp
OwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjgy
NjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgog
I2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlm
aWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJD
b21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVk
ZSAiREZHT1NSRW50cnkuaCIKQEAgLTI4NTUsNyArMjg1Niw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29k
ZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQgPSBsaW5rZWRU
YWJsZS5tX2N0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIApAQCAtMjg4MCw3ICsyODgx
LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFs
dWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5i
YXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2Nr
LT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAg
IHZvaWQqIHJlc3VsdDsKICAgICBpZiAoa2V5LmlzSW50MzIoKSkKQEAgLTI5MDMsNyArMjkwNCw3
IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHZvaWQqIHJlc3VsdDsK
LSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJp
bmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CiAKICAgICBpZiAoa2V5LmlzU3RyaW5nKCkpIHsKICAgICAgICAgU3RyaW5n
SW1wbCogdmFsdWUgPSBhc1N0cmluZyhrZXkpLT52YWx1ZShnbG9iYWxPYmplY3QpLmltcGwoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDcg
KzM0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlW
YWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlk
R1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlz
aW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5MiArNDksMTAzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAK
LSAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6Omdl
dEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRp
b25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CisgICAgICAgIGF1dG8g
bm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRj
aEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAK
LSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnJlc3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBy
ZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9w
ZXJ0eSkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1
ZTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBh
ZGRTbG93Q2FzZSgpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgICAgIC8vIE9P
UFMuIFN1cHBvcnQgdGhpcworICAgICAgICAvL2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9w
ZXJ0eSkpCisgICAgICAgIC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0
cnVlOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRS
ZWdzKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIH0KLQogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlW
YWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAgICBp
ZiAoIWhhc0FueVNsb3dDYXNlcyhpdGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOworICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgr
K107CiAKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwg
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEp
OworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgYXJndW1lbnRHUFIz
KTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBhcmd1bWVu
dEdQUjQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6b2Zmc2V0T2ZB
cnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBh
cmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0g
ICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2Rl
SW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAot
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBh
cmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVH
UFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAg
IENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAg
IHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7
CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9
PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQ
Uik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92
YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwot
ICAgIH0KKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCkBAIC0xNDksNyArMTYwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQu
dGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTYwLDggKzE3MSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVj
dEdQUiA9IGFyZ3VtZW50R1BSNTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50
R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKQEAgLTE4
NywzNCArMTk4LDQwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAg
ICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZSwKKyAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdz
LCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3Mp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewogICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKQEAgLTIyMyw5ICsyNDAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9wcml2YXRlX25hbWUoYwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQ
UjMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwg
b3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtMjM1LDI2ICsyNTQsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9wcml2YXRlX25hbWUoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9w
ZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVP
cHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdl
dFByaXZhdGVOYW1lT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMjY0
LDcgKzI3Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZU
TCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywg
d2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKQEAgLTMwMCwyMSArMzEzLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2
YXRlX2JyYW5kKGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFNldFByaXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5k
OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5kR1BSID0gcmVn
VDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
YnJhbmRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNs
b3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFu
ZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gV2Ugc2hv
dWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRl
LWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI0LDE3ICszNDQsMjIgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRXcml0ZUJhcnJpZXIo
YmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRf
cHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0
aW9uKTsKKwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBKSVRQcml2YXRlQnJh
bmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRl
QnJhbmRBY2Nlc3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRp
bWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0zNDQsMjQgKzM2OSwxOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRp
b25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0
czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlw
ZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hl
Y2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMzcwLDE5ICszODksMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFu
ZChjbwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJy
YW5kLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZv
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKKworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BS
KSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIH0KIApAQCAtMzk0LDkgKzQy
MiwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJh
bmRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJn
dW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTQwNiwyNCAr
NDM2LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEg
YWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3Rl
cnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwg
IWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQ
UjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9H
UFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9u
VHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJn
dW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJh
bmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
bkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQzNSwzMCArNDU5LDQyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihwcm9maWxlKSwgcmVnVDMpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpwcm9maWxlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCByZWdUMywgcmVnVDQpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHByb2ZpbGVHUFIpOwor
ICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZB
cnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCk7Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KHByb3BlcnR5KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRy
dWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWVHUFIpLCBwcm9maWxlR1BSLCBzdHViSW5mb0dQUik7CisgICAgLy8gT09QUzoKKyAgICAv
L2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCisgICAgLy8gICAgZ2VuLnN0dWJJ
bmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDsKKyAgICBzdHViSW5mby0+cHV0
S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsRGlyZWN0PiA/IFB1dEtpbmQ6OkRp
cmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21h
TW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0
dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBw
ZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00NzQsMTUgKzUxMCwxMiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21h
TW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBu
dWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFN
b2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTQ5OCw3ICs1
MzEsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4g
dGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RP
cHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFI0KTsKKyAg
ICBpZiAoaXNEaXJlY3QpCisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0
YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAg
ICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFs
PigpLCBPcFB1dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1l
bnRHUFI1KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFN
b2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDog
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRC
eVZhbE5vblN0cmljdE9wdGltaXplKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQsIGFyZ3VtZW50R1BSNSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC01MTIsNyArNTU0LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSByZWdUNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gcmVnVDU7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogICAgIENhbGwgY2FsbDsKICAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGly
ZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAo
ZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKQEAgLTUyMyw3ICs1NjUsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC01MzMsMTggKzU3NSwyNCBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJv
dXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25n
aW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q1OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICB7Cisg
ICAgICAgIFJlZ2lzdGVyU2V0IHVzZWQoQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwg
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnZhbHVlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlKTsKKyAgICAg
ICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q0KSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5j
b250YWlucyhyZWdUNSkpOworICAgIH0KKwogCiAgICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZz
ZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykp
OwogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
Z2xvYmFsT2JqZWN0R1BSKTsKQEAgLTU3MCwyMCArNjE4LDMxIEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2
YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSks
IEpTVmFsdWVSZWdzKHJlZ1QyKSwgSW52YWxpZEdQUlJlZywgcmVnVDQpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
SW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8t
PnByaXZhdGVGaWVsZFB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3Jp
dGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwu
CkBAIC01OTQsOCArNjUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShj
b25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0g
Ynl0ZWNvZGUubV9wdXRLaW5kOworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24p
OwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlW
YWxJbmRleCsrXTsKIApAQCAtNjAzLDEzICs2NjEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9wcml2YXRlX25hbWUoYwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKLSAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1
dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFBy
aXZhdGVGaWVsZE9wdGltaXplOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAv
LyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQu
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSByZWdUMjsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQ
UiwgdmFsdWVHUFIsIGdlbi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1l
PigpOworICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2lu
ZDsKKworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFI0KTsKKyAgICBhdXRvIG9wZXJhdGlvbiA9
IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxk
T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudHNHUFIzLCBhcmd1bWVudEdQUjQsIFRydXN0
ZWRJbW1QdHIobnVsbHB0cikpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
NjIyLDE4ICs2ODQsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUo
YwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIAogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0
X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvbik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC02NDMsMTQgKzY5
OSwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNz
KCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCkBAIC02ODAsNyArNzM2LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJ
ZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25z
LCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdU
MSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY4OSw3ICs3NDYsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Fj
Y2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlk
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMs
IHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1Qx
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3NTcsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1
dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdl
dHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgp
LCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdU
MCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTcwOSw3ICs3NjgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChj
b25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdU
MSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdU
Mik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVn
VDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzE5LDcgKzc3OSw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRT
ZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywg
cmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3
LDIzICs3ODgsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJh
c2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVs
QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNs
b3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQo
KTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ7Cisg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcg
U3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAv
LyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2lu
Y2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC03NTksMTUgKzgzMCwxNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJ
ZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC03ODEsMjQgKzg1NCwxOSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFN
b2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBl
Y21hTW9kZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBh
cHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1Qw
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTgwOCw3
ICs4NzYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRy
ZXNzKCk7CkBAIC04NDUsMjIgKzkxMywzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFs
KGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgcHJvcGVydHkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVs
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKwogICAgIEpJVERlbEJ5
VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRT
bG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgc3R1YkluZm9HUFIsIEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVs
ZXRlQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdl
bik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBz
aG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3Jp
dGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBT
dHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtODgz
LDkgKzk2MiwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJl
Z1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
ODk5LDI0ICs5ODAsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3Qg
SQogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV92YWxfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZh
bE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
RGVsZXRlQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTkyNiw3ICsxMDAyLDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtOTYxLDIy
ICsxMDM3LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6cmVzdWx0KTsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1
bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBB
Y2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2LDE0ICsxMDcxLDE3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTEwMDMsMjYgKzEwOTEsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRf
YnlfaWQoY29ucwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAg
IHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1p
emUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlk
T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25U
cnlHZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
ZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDMwLDIy
ICsxMTEyLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBy
ZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZv
R1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKworICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMDU0LDE2ICsxMTQ1
LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIp
OworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJ
ZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
I2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTA3Myw4MyArMTE2Niw2MSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAg
ICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92
bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAg
ICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRl
QWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgJm1ldGFkYXRhLm1fbW9kZU1ldGFk
YXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDhG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1l
dGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhOjpvZmZzZXRPZk1vZGUoKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoMzIoTm90RXF1YWws
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5n
dGgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSAr
IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwg
YmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRo
aXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOwotfQorICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwogCi12b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90
aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNW
UmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
VlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7
Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCi0g
ICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0
UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAt
MTE1OCwxNiArMTIyOSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50
R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMTc3LDI2ICsxMjUwLDU3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFIzOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhU
aGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhU
aGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3IgZ2VuKAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyh0aGlzR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKQEAgLTEyMDYsNyArMTMxMCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAg
ICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTEyNDEsMTYgKzEzNDUsMTkgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
V2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlv
bkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3RoaXNWYWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1
bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVu
dEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI4ICsxMzY3LDIyIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0
aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3Rh
dGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAg
LTEyOTEsNyArMTM5Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKQEAgLTEzMjksMjMgKzE0MzAsMzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBh
bmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1
c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdo
b3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUg
U3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0
aGlzLgogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1
ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNo
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywg
dmFsdWVHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
VlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFN
b2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUo
Ynl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpO
b3REaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9
IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHVi
SW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUg
bmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBA
IC0xMzU5LDE0ICsxNDc0LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29u
c3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbih0aGlzKTsKICAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5
SWRzW21fcHV0QnlJZEluZGV4KytdOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxs
T3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEz
NzYsMjUgKzE0OTUsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJ
bgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsg
Ly8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
cmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKTsKLSAgICBl
bHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCkpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTQwNCw3ICsxNTE3LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAt
MTQ0MSwyMCArMTU1NCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0
cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklU
SW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZWdUMSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlJZDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ2MywxNCArMTU4
NywxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xNDgwLDI4ICsxNjA3LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25z
dCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNz
ZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
c3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4K
ICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVu
ayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2MzEsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJv
ZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NjYsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbElu
ZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJy
YXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBhcmd1bWVudEdQUjMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IGFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1p
emUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMTU1Niw1OSArMTY4OCw3MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNv
bnN0IEluCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIz
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fz
c2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihwcm9maWxlKSwgcHJvZmlsZUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mg
bm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEg
ZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUo
b3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRp
bWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0SGFz
UHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBK
SVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZh
bHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vz
c1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNj
ZXNzVHlwZSB0eXBlKQogewotICAgIEFTU0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBVTlVT
RURfUEFSQU0oYmFzZSk7CisgICAgVU5VU0VEX1BBUkFNKHByb3BlcnR5KTsKKyAgICBBU1NFUlRf
VU5VU0VEKHR5cGUsIHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9
PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRv
ciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVy
YXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2MSwyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZh
dGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5k
R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0
eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9w
dGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2
YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0
eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5h
bWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
TmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2
YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxNzg5LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29k
ZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRl
U2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5
LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hh
c19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xNjY2LDE5ICsxODAzLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9i
cmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhh
c1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQp
OworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNl
LCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rp
b25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0
cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92
YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2ODgsNiArMTgyOCw3IEBAIHZv
aWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3MDEsNyArMTg0Miw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDEpOwogICAgICAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1Qx
KTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4NTYsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CiAgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3OTQs
ODcgKzE5MzUsMTA1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4K
IHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBl
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2Rl
SW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2Rl
SW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rp
b24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJl
c29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0
aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBN
b2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxF
bnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJl
c29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1Qw
KTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2Rl
QmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgICAgICBwdHJkaWZm
X3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNl
dEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CisKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyR2Vu
ZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVf
c2NvcGUgQ2xvc3VyZVZhciIpOworICAgICAgICB9OworCisgICAgICAgIGF1dG8gY2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAg
ICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MiKTsKKyAgICAgICAgfTsKIAotI2RlZmluZSBS
RVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jl
c29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVT
T0xWRV9TQ09QRV9HRU5FUkFUT1IpCisgICAgICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdl
bmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX3Jlc29s
dmVfc2NvcGUgZ2VuZXJpYyIpOwogICAgICAgICB9OwotI3VuZGVmIFJFU09MVkVfU0NPUEVfR0VO
RVJBVE9SCisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3Owor
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CisgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBD
bG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdl
bmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJ
U3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNSZXNvbHZlU2Nv
cGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJh
dGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFy
KiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZl
VHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUg
dGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBM
TEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAg
IHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBz
bG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsK
ICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJU
KHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1Jl
dHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBy
ZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSks
IHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1w
TGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52
YWxpZEdQUlJlZykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRH
UFJSZWcpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BSUmVn
KSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAgIGxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3Qo
KSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zhcklu
amVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJh
bmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1f
dmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAogICAg
IGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgbG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3Bl
RGVwdGgpKSwgcmVnVDEpOworICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAg
ICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAgICBMYWJlbCBsb29wID0g
bGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsK
KyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBq
aXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAgewotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAg
ICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVt
cCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0
LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5s
aW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBb
Jl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEyICsyMDQxLDEyIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxv
Y2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7
Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9i
amVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAg
ICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxC
aW5kaW5nRXBvY2gpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5i
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0
OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAg
ICAgICBqaXQubW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEgKzIwNTYsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNj
b3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xv
YmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAg
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAg
ICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkds
b2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGlj
YWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsyMDY4LDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1pdFJlc29sdmVD
bG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAg
ICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMjA3OCw0NSBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qg
c2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09G
RlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1w
IG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHku
bGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9i
YWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZl
VHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZh
ciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3Bl
cnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsK
KyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0
T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDApOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZd
IChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAgICAgICAgICAgSnVtcCBub3RDYXNlID0g
aml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7
CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOwor
ICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBlbWl0
Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7CisgICAg
ICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0
Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7
Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAK
LSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAg
ICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVf
c2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2Nh
dGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxv
Y2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJ
TkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5
cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICgh
dGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAg
IHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGpp
dC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3Bf
cmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZF
X1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9SRVNP
TFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAv
LyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRo
IHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVkIHRo
ZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAtMjA2NSw2ICsyMTg2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTIxNzgsNyArMjMwMCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTIxODYsOSArMjMwOCw5IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3Bl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUs
IGRzdCwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiAjZWxzZSAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTIxOTYsNDEgKzIzMTgsNTAgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIFJlc29sdmVUeXBl
IHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNv
ZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVj
dGlvbik7CisKKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7Cisg
ICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3Vy
ZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsK
KworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBb
XSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3Bf
Z2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyaWNH
ZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6
OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6
IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7
CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0gICAgICAgIHVpbnRwdHJf
dCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5t
X29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpT
VmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHRy
ZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJs
ZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRD
b2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAot
I2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9t
X3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRo
dW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09M
VkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAgIH07Ci0jdW5kZWYgR0VU
X0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
c2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFk
YXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29w
ZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFk
YXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Z2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0gICAg
fQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBjb2RlID0gdm0u
Z2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJl
c29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBj
b2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVy
YXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0
RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9w
R2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5l
cmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBl
PiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVu
ayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50
IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91
dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCkBAIC0yMjM5LDk5ICsyMzcwLDg4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3Bl
OjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJU
KHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1Jl
dHVybkFkZHJlc3MoKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAgaml0LnRhZ1JldHVy
bkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRh
dGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywg
bWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRM
b2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0
YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29w
ZUdQUiwgcmVnVDApOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJv
LCByZWdUMSkpOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKSk7CisgICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BS
UmVnIHNjb3BlR1BSKSB7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsK
KyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgIGppdC5sb2FkMzIo
QWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwor
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwogICAgIH07CiAKLSAg
ICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3Qs
IG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFw
cGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRP
ZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JK
RUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwg
cmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJl
c3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRy
KHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9p
bnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIo
cmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChH
UFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7CiAgICAgICAgIHN0YXRpY19hc3Nl
cnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBsc2hpZnQ2NChUcnVzdGVk
SW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRH
UFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5sc2hpZnQ2
NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOworICAgICAgICBqaXQuYWRkUHRyKHNjb3Bl
R1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BS
LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKICAg
ICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUs
IGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0g
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0
dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBk
b24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4g
QWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIg
aW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVH
UFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7CiAg
ICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwogICAgICAgICAgICAg
Y29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKICAgICAgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFt
YmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWws
IGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1
bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIo
RXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3Bl
cmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgb2Zmc2V0KTsKICAgICAgICAgICAg
IGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUg
PSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9m
ZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRo
aXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3Jl
YXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNl
dCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RP
dXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwot
ICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAg
ICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91
dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0Lm5lZzMyKG9mZnNldCk7CisgICAg
ICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgICAgICAg
ICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmly
c3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6
CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5k
aXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAg
ICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0
YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihy
ZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJh
bmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
YnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCByZWdUMyk7CisgICAg
ICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAg
TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwogICAgICAgICAgICAgZW1pdEdl
dENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVW
YXI6CkBAIC0yMzQxLDg2ICsyNDYxLDYzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAg
ICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQ
dXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0K
LSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAg
ICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5
cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9n
ZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwg
ZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgaml0Lmxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkp
LCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
bm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFZh
ciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIp
KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsoJmppdCk7CisKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0LmJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxp
bmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsK
KyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkp
OworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGpp
dC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0
Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5s
aW5rKCZqaXQpOwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICB9CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0aWNf
YXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQo
cmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9w
cm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBN
ZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RC
dWNrZXQoKSkpOwogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93
Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNs
b3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0K
IAotI2RlZmluZSBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBc
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zyb21f
c2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAg
ICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBl
KSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAot
ICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZlVHlw
ZSwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9
Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikK
LSN1bmRlZiBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJh
dG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rp
b24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAg
ICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBi
ZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9G
VEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMs
IHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAg
IEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQog
ICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTI0NDksNyArMjU0Niw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBDYWxsIG9wZXJhdGlv
biA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9
IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0pOwogCi0gICAgaml0LnN0b3Jl
NjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRy
ZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxl
KCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgIGppdC5tb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdp
c3Rlcik7CiAKICNpZiBDUFUoWDg2XzY0KQpAQCAtMjQ3MSw4NiArMjU2OCw3OSBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1
ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3Rp
ZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklU
OjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBv
aW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlX
cml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAg
c3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFy
KFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdU
MCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJl
c3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3Bl
cmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8g
PSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVT
bG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFu
ZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQp
OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJv
b2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1
dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNo
ZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIg
aW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1
dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBj
aGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUg
Y2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJl
cyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRp
dGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmpl
Y3Rpb24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCByZWdUMSk7CisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisKICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKIAogICAgICAgICAgICAgaml0QXNz
ZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAs
IHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICAgICAg
ICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6
Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwot
ICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBzdG9yZVB0cihy
ZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICAvLyBP
T1BTOiB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBHUFJSZWdzIGlu
c3RlYWQgb2YgVlJzCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Nj
b3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhy
ZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29u
c3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25s
eUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihn
ZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpIHsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRW
YXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
T3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihi
eXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8g
ZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVk
IHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1Qw
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
LSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAg
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVt
aXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJh
bmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQp
OwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVn
VDEpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAg
ICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAgICAgICAgLy8gT09Q
UzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9y
IHZhbHVlLgorICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsK
LSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVl
LCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworCisg
ICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9h
ZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9p
bnQocmVnVDApOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwor
ICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNF
aWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKworICAg
ICAgICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRv
b2sgYSBHUFJSZWcgZm9yIG93bmVyL3ZhbHVlLgogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTI1NjQsNTggKzI2NTQsNTIgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAg
IHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJl
Z1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
cmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xv
YmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZl
VHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNh
bFZhcikpOwotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4g
aGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXpl
ZCBjb25zdCBiaW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkg
PyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxW
YXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAg
aXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQg
Q29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUgdGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBD
b2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJl
LiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIsCisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBD
bG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2Un
cmUgYWx3YXlzIENsb3N1cmVWYXIKKyAgICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBv
aW50IGlzbid0IGZpcmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBh
dGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWlj
YWxseS4KKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAg
ICBlbWl0Q29kZShDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBl
ID09IFJlc29sdmVkQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJl
VmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAg
bG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0
UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAog
CiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBp
c0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3Bl
cnR5LCBmYWxzZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAg
ICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OworICAgICAgICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRD
b2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGlu
ayh0aGlzKTsKKwogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAg
ICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywg
dHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTgg
KzI3MDgsMjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29s
dmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJ
bmZvLnJlc29sdmVUeXBlKCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxl
VmFyKSB7CisgICAgICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZh
ciwgdGhlbiBhbGwgbGlua2VkIENvZGVCbG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8g
dG8gYWxzbyBzZWUgTW9kdWxlVmFyLgogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhD
YWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2Rl
X3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKICAgICB9IGVsc2UgewogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRUb1Njb3BlLCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxz
ZQogICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFT
U0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJl
bnRJbnN0cnVjdGlvbik7CisgICAgICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAogICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwog
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKQEAgLTI2NTIsNyArMjczOSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQg
Z2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIg
Z2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lm
IENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjcwMSw3
ICsyNzg4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAg
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9h
ZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5k
ZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3NTksNyArMjg0Niw2IEBAIHZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9p
bnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxG
aWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OwpAQCAtMjc2Nyw3ICsyODUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKQEAgLTI4MjMsNyArMjkwOSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9w
cm9wZXJ0eV9lbnVtZXJhdG8KIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9k
ZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAgLTI4MzksNyArMjkyNCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwog
CiAgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gbW9kZSBzZXQgd2UgdGVuZCB0byBzZWUs
IHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBwcm9maWxlIGl0IGluIHRoZSBMTEludC4KLSAgICBp
ZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgewogICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQ
UiA9IHJlZ1QzOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVu
dW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMy
KE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKCh+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpPd25TdHJ1Y3R1cmVNb2RlKSAmIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW51bWVyYXRp
b25Nb2RlTWFzaykpKTsKQEAgLTI4ODEsNzggKzI5NjYsODcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHlOYW1lOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKIAotICAgIGF1dG8gcmVzdWx0
R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUVu
dW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3Rl
cnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZUVu
dW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNo
MzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHNjcmF0Y2gzKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcHJvcGVydHlHUFIpOwog
Ci0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1l
dGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdl
dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaDIp
OworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHNj
cmF0Y2gyLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CiAg
ICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KLSAgICBKdW1wIGlz
Tm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3Rl
ZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBpc05vdE93blN0cnVjdHVy
ZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVt
cCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7Cisg
ICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVh
bCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0
LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8gSWYgaW5kZXggaXMgbGVz
cyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3Mg
YW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1wIG91dE9mTGluZUFjY2Vz
cyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwor
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CisgICAgbG9hZDY0KEJh
c2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAo
KSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91dE9mTGluZUFj
Y2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1Qz
KTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1Qz
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDIpOwor
ICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2Ny
YXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBv
ZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnRw
dHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdU
MCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7
CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgb2Zm
c2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1
bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOwotICAgIHN0b3JlOChU
cnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJl
TW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsK
KyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCBieXRlY29kZSwg
T3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0
YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRoaXMpOwotICAgIEp1bXAg
aXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIEp1bXAgaXNOb3RJbmRl
eGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJlcGxhY2UgdGhlIHN0cmlu
ZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdU
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAg
ICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAKICAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIp
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdl
bik7CiAKICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjk2MSwxMCArMzA1NSw5IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFs
U2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwg
aXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93
UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5
SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVU
eXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9p
ZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhG
dW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpA
QCAtMjk3Myw3ICszMDY2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0
YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1Qx
KTsKKyAgICBvcjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwg
Ynl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEo
KSk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsK
IApAQCAtMzA2Miw2ICszMTU3LDEzIEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAK
K3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxl
Y3RTY3JhdGNoR1BSKG93bmVyKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0YXRpYyB2
b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2
bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8u
ZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1i
bHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5m
bykpOwogICAgIAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1
YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4o
KSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oIgogI2luY2x1ZGUgIkNhbGxG
cmFtZS5oIgogI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCisjaW5jbHVk
ZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMu
aCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgpA
QCAtMzcwLDYgKzM3MSwxNSBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGlj
cyhWCiAgICAgCiAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9u
cygpOwogCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5l
SklUKSB7CisgICAgICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9
IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkg
eworICAgICAgICAgICAgLy9kYXRhTG9nTG4oIlNoYXJlZCB2aWEgTExJbnQiKTsKKyAgICAgICAg
ICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoYmFzZWxpbmVSZWYu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmppdE5leHRJbnZvY2F0
aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwogICAg
IGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAg
IENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJ0aHJl
c2hvbGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNv
dW50ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIg
ICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c20JKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEyLDEwICsxMDEy
LDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBw
cmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0
ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Qx
XQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0MSwgdDIpCiAgICAgICAgIGdldCht
X3NyY0RzdCwgdDApCiAgICAgICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgSW50MzJU
YWcsIC5zbG93CkBAIC0xMDIzLDcgKzEwMTksNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBv
cGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgICMgTWV0YWRhdGEgaW4gdDEsIHNyY0RzdCBpbiB0Mgog
ICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQyLCAuc2xvdykKICAgICAgICAgc3RvcmVpIHQyLCBQ
YXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0
aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVj
dCwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5z
bG93OgpAQCAtMTA4OSwyMiArMTA4NSwxOCBAQCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRh
LCByZXR1cm4pCiAKLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAg
b3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRo
UHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgIGVuZAotCiAgICAgbWV0YWRhdGEodDUsIHQwKQogICAg
IGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAs
IHQxLCB0MikKICAgICBiaW5lcSB0MSwgSW50MzJUYWcsIC5vcE5lZ2F0ZVNyY05vdEludAogICAg
IGJ0aXogdDIsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQyCi0gICAgdXBk
YXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJv
ZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0NSwgdDMpCiAgICAgcmV0dXJuIChJbnQz
MlRhZywgdDIpCiAub3BOZWdhdGVTcmNOb3RJbnQ6CiAgICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5v
cE5lZ2F0ZVNsb3cKICAgICB4b3JpIDB4ODAwMDAwMDAsIHQxCi0gICAgdXBkYXRlQXJpdGhQcm9m
aWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5l
Z2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0NSwgdDMpCiAgICAgcmV0dXJuKHQxLCB0MikKIAog
Lm9wTmVnYXRlU2xvdzoKQEAgLTExMTUsMTAgKzExMDcsNiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFy
eU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9u
QW5kU3RvcmUsIGRvdWJsZU9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVv
cGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0
YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gYXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAg
ICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSAr
IEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBt
ZXRhZGF0YSh0NSwgdDIpCiAgICAgICAgIGdldChtX3JocywgdDIpCiAgICAgICAgIGdldChtX2xo
cywgdDApCkBAIC0xMTI2LDcgKzExMTQsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9w
Y29kZU5hbWUsIG9wCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQw
LCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCBJbnQzMlRhZywgLm9wMU5vdEludAogICAgICAg
ICBiaW5lcSB0MywgSW50MzJUYWcsIC5vcDJOb3RJbnQKLSAgICAgICAgYXJpdGhQcm9maWxlKEFy
aXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29k
ZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGdldChtX2RzdCwg
dDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MywgdDEsIHQwLCAuc2xvdywg
dDIpCiAgICAgICAgIGRpc3BhdGNoKCkKQEAgLTExMzYsMTIgKzExMjQsMTIgQEAgbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBiaWEgdDIsIExvd2VzdFRh
ZywgLnNsb3cKICAgICAgICAgYmliIHQzLCBMb3dlc3RUYWcsIC5vcDFOb3RJbnRPcDJEb3VibGUK
ICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUo
QXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2ky
ZHMgdDEsIGZ0MQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9w
MkRvdWJsZToKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKLSAgICAgICAgYXJpdGhQcm9maWxl
KEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9m
aWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAg
Lm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQxKQogICAgICAgICBmaWkyZCB0
MCwgdDIsIGZ0MApAQCAtMTE1Myw3ICsxMTQxLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9y
ZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBh
biBpbnQsIHRoZSBzZWNvbmQgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0
KG1fZHN0LCB0MikKICAgICAgICAgYmlhIHQzLCBMb3dlc3RUYWcsIC5zbG93Ci0gICAgICAgIGFy
aXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQog
ICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCiAgICAgICAg
IGRvdWJsZU9wZXJhdGlvbihmdDEsIGZ0MCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyODI2
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNDQxLDggKzQ0MSwxMyBAQCBtYWNybyBjaGVja1N3aXRj
aFRvSklURm9yTG9vcCgpCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQogICAgICAgICAgICAgY0Nh
bGwyKF9sbGludF9sb29wX29zcikKICAgICAgICAgICAgIGJ0cHogcjAsIC5yZWNvdmVyCi0KICAg
ICAgICAgICAgIG1vdmUgcjEsIHNwCisKKyAgICAgICAgICAgICMgQmFzZWxpbmUgdXNlcyBMTElu
dCdzIFBCIHJlZ2lzdGVyIGZvciBpdHMgSklUIGNvbnN0YW50IHBvb2wuCisgICAgICAgICAgICBs
b2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9q
aXREYXRhW1BCXSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6SklURGF0YTo6bV9q
aXRDb25zdGFudFBvb2xbUEJdLCBQQgorCiAgICAgICAgICAgICBpZiBBUk02NEUKICAgICAgICAg
ICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmln
R2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6bG9vcE9TUkVudHJ5KSAqIFB0clNpemUsIGEyCiAg
ICAgICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQ
dHJUYWcKQEAgLTEwNTYsMTAgKzEwNjEsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmlj
dGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50
ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwg
b3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVy
bikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBv
cmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5
QXJpdGhQcm9maWxlOjptX2JpdHNbdDJdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3Ny
Y0RzdCwgdDApCiAgICAgICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDEKICAgICAgICAgbWV0YWRh
dGEodDIsIHQzKQpAQCAtMTA2OSw3ICsxMDcwLDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwg
b3Bjb2RlU3RydWN0LCBpbgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQxLCAuc2xvdykKICAg
ICAgICAgb3JxIG51bWJlclRhZywgdDEKICAgICAgICAgc3RvcmVxIHQxLCBbY2ZyLCB0MCwgOF0K
LSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBk
YXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQyLCB0
MykKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMTM0LDExICsxMTM1LDYg
QEAgZW5kKQogCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0KLSAgICBtYWNybyB1
cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRh
ZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAg
IGVuZAotCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZShzaXplLCB0MCwgdDMpCiAgICAgbWV0YWRhdGEodDEsIHQyKQpAQCAtMTE0NiwxMiArMTE0Miwx
MiBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsCiAgICAgYnRpeiB0
MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDMKICAgICBvcnEgbnVtYmVy
VGFnLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBk
YXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQog
ICAgIHJldHVybih0MykKIC5vcE5lZ2F0ZU5vdEludDoKICAgICBidHF6IHQzLCBudW1iZXJUYWcs
IC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JxIDB4ODAwMDAwMDAwMDAwMDAwMCwgdDMKLSAgICB1cGRh
dGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQ
cm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQxLCB0MikKICAgICByZXR1cm4o
dDMpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTY0LDEwICsxMTYwLDYgQEAgbWFjcm8gYmluYXJ5
T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
JW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBt
ZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKLSAgICAgICAgbWFj
cm8gcHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpN
ZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0K
LSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fcmhzLCB0MCkKICAgICAgICAgZ2V0KG1fbGhz
LCB0MikKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCkBAIC0x
MTc3LDcgKzExNjksNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9w
CiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9y
ZSh0MSwgdDAsIC5zbG93LCB0MikKIAotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludElu
dCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQ
cm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5vcDFOb3RJ
bnQ6CkBAIC0xMTg3LDEwICsxMTc5LDEwIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bj
b2RlTmFtZSwgb3AKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwogICAgICAgICBh
ZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCi0gICAgICAgIHByb2ZpbGUo
QXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0MikKICAgICAg
ICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJJbnQ6Ci0gICAgICAgIHBy
b2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFBy
b2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0MikKICAgICAg
ICAgY2kyZHMgdDEsIGZ0MQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0
LCB0MikKQEAgLTEyMDQsOSArMTE5Niw5IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bj
b2RlTmFtZSwgb3AKIAogICAgIC5vcDJOb3RJbnQ6CiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBp
cyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KLSAgICAg
ICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwotICAg
ICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5
QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDIp
CisgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAg
YWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQpAQCAtMTUxOCw3ICsxNTEw
LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWRfZGlyZWN0LAogZW5kKQogCiAj
IFRoZSBiYXNlIG9iamVjdCBpcyBleHBlY3RlZCBpbiB0MwotbWFjcm8gcGVyZm9ybUdldEJ5SURI
ZWxwZXIob3Bjb2RlU3RydWN0LCBtb2RlTWV0YWRhdGFOYW1lLCB2YWx1ZVByb2ZpbGVOYW1lLCBz
bG93TGFiZWwsIHNpemUsIG1ldGFkYXRhLCByZXR1cm4pCittYWNybyBwZXJmb3JtR2V0QnlJREhl
bHBlcihvcGNvZGVTdHJ1Y3QsIG1vZGVNZXRhZGF0YU5hbWUsIHZhbHVlUHJvZmlsZU5hbWUsIHNs
b3dMYWJlbCwgc2l6ZSwgbWV0YWRhdGEsIHJldHVybiwgZG9BcnJheVByb2ZpbGUpCiAgICAgbWV0
YWRhdGEodDIsIHQxKQogICAgIGxvYWRiICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6JW1vZGVN
ZXRhZGF0YU5hbWUlLm1vZGVbdDJdLCB0MQogCkBAIC0xNTQ2LDcgKzE1MzgsNyBAQCBtYWNybyBw
ZXJmb3JtR2V0QnlJREhlbHBlcihvcGNvZGVTdHJ1Y3QsCiAub3BHZXRCeUlkQXJyYXlMZW5ndGg6
CiAgICAgYmJuZXEgdDEsIGNvbnN0ZXhwciBHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgsIC5vcEdl
dEJ5SWRVbnNldAogICAgIG1vdmUgdDMsIHQwCi0gICAgYXJyYXlQcm9maWxlKCVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6JW1vZGVNZXRhZGF0YU5hbWUlLmFycmF5TGVuZ3RoTW9kZS5hcnJheVBy
b2ZpbGUsIHQwLCB0MiwgdDUpCisgICAgZG9BcnJheVByb2ZpbGUodDAsIHQyLCB0NSwgdDEpCiAg
ICAgYnRpeiB0MCwgSXNBcnJheSwgc2xvd0xhYmVsCiAgICAgYnRpeiB0MCwgSW5kZXhpbmdTaGFw
ZU1hc2ssIHNsb3dMYWJlbAogICAgIGxvYWRDYWdlZEpTVmFsdWUoSlNPYmplY3Q6Om1fYnV0dGVy
Zmx5W3QzXSwgdDAsIHQxKQpAQCAtMTU2OCw3ICsxNTYwLDEwIEBAIGVuZAogbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF9nZXRfYnlfaWQsIE9wR2V0QnlJZCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgZ2V0KG1fYmFzZSwgdDApCiAgICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZUNlbGwoc2l6ZSwgdDAsIHQzLCAub3BHZXRCeUlkU2xvdykKLSAgICBwZXJm
b3JtR2V0QnlJREhlbHBlcihPcEdldEJ5SWQsIG1fbW9kZU1ldGFkYXRhLCBtX3Byb2ZpbGUsIC5v
cEdldEJ5SWRTbG93LCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuKQorICAgIHBlcmZvcm1HZXRCeUlE
SGVscGVyKE9wR2V0QnlJZCwgbV9tb2RlTWV0YWRhdGEsIG1fcHJvZmlsZSwgLm9wR2V0QnlJZFNs
b3csIHNpemUsIG1ldGFkYXRhLCByZXR1cm4sCisgICAgICAgIG1hY3JvIChjZWxsQW5kSW5kZXhp
bmdUeXBlLCBtZXRhZGF0YSwgc2NyYXRjaDEsIHNjcmF0Y2gyKQorICAgICAgICAgICAgYXJyYXlQ
cm9maWxlKE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLCBjZWxsQW5kSW5kZXhp
bmdUeXBlLCBtZXRhZGF0YSwgc2NyYXRjaDEpCisgICAgICAgIGVuZCkKIAogLm9wR2V0QnlJZFNs
b3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfZ2V0X2J5X2lkKQpAQCAtMzAw
Miw3ICsyOTk3LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9vcGVuLCBPcAog
CiAgICAgbG9hZFZhcmlhYmxlKGdldCwgbV9pdGVyYXRvciwgdDMpCiAgICAgYnRxbnogdDMsIG5v
dENlbGxNYXNrLCAuaXRlcmF0b3JPcGVuR2VuZXJpY0dldE5leHRTbG93Ci0gICAgcGVyZm9ybUdl
dEJ5SURIZWxwZXIoT3BJdGVyYXRvck9wZW4sIG1fbW9kZU1ldGFkYXRhLCBtX25leHRQcm9maWxl
LCAuaXRlcmF0b3JPcGVuR2VuZXJpY0dldE5leHRTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVO
ZXh0QW5kRGlzcGF0Y2gpCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck9wZW4s
IG1fbW9kZU1ldGFkYXRhLCBtX25leHRQcm9maWxlLCAuaXRlcmF0b3JPcGVuR2VuZXJpY0dldE5l
eHRTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVOZXh0QW5kRGlzcGF0Y2gsIG1hY3JvKGEsIGIs
IGMsIGQpIGVuZCkKIAogLml0ZXJhdG9yT3BlbkdlbmVyaWNHZXROZXh0U2xvdzoKICAgICBjYWxs
U2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2dldF9uZXh0KQpAQCAtMzA2
MSw3ICszMDU2LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0LCBPcAog
CiAgICAgbG9hZFZhcmlhYmxlKGdldCwgbV92YWx1ZSwgdDMpCiAgICAgYnRxbnogdDMsIG5vdENl
bGxNYXNrLCAuZ2V0RG9uZVNsb3cKLSAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9y
TmV4dCwgbV9kb25lTW9kZU1ldGFkYXRhLCBtX2RvbmVQcm9maWxlLCAuZ2V0RG9uZVNsb3csIHNp
emUsIG1ldGFkYXRhLCBzdG9yZURvbmVBbmRKbXBUb0dldFZhbHVlKQorICAgIHBlcmZvcm1HZXRC
eUlESGVscGVyKE9wSXRlcmF0b3JOZXh0LCBtX2RvbmVNb2RlTWV0YWRhdGEsIG1fZG9uZVByb2Zp
bGUsIC5nZXREb25lU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlRG9uZUFuZEptcFRvR2V0VmFs
dWUsIG1hY3JvKGEsIGIsIGMsIGQpIGVuZCkKIAogLmdldERvbmVTbG93OgogICAgIGNhbGxTbG93
UGF0aChfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfZ2V0X2RvbmUpCkBAIC0zMDg2LDcg
KzMwODEsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wCiAgICAg
IyBSZWxvYWQgdGhlIG5leHQgcmVzdWx0IHRtcCBzaW5jZSB0aGUgZ2V0X2J5X2lkIGFib3ZlIG1h
eSBoYXZlIGNsb2JiZXJlZCB0My4KICAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX3ZhbHVlLCB0MykK
ICAgICAjIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgaWYgdGhlIGl0ZXJhdG9yIHJlc3VsdCBpcyBh
IGNlbGwgaGVyZSBzaW5jZSB3ZSB3aWxsIGhhdmUgdGhyb3duIGFuIGVycm9yIGJlZm9yZS4KLSAg
ICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV92YWx1ZU1vZGVNZXRhZGF0
YSwgbV92YWx1ZVByb2ZpbGUsIC5nZXRWYWx1ZVNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZVZh
bHVlQW5kRGlzcGF0Y2gpCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck5leHQs
IG1fdmFsdWVNb2RlTWV0YWRhdGEsIG1fdmFsdWVQcm9maWxlLCAuZ2V0VmFsdWVTbG93LCBzaXpl
LCBtZXRhZGF0YSwgc3RvcmVWYWx1ZUFuZERpc3BhdGNoLCBtYWNybyhhLCBiLCBjLCBkKSBlbmQp
CiAKIC5nZXRWYWx1ZVNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfaXRl
cmF0b3JfbmV4dF9nZXRfdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyODI2MjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTE0MjAsNyArMTQyMCw4IEBAIGVuZAogCiBtYWNybyBjaGVja1N3aXRjaFRv
SklUKGluY3JlbWVudCwgYWN0aW9uKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAg
IGJhZGRpcyBpbmNyZW1lbnQsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFz
ZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKKyAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MF0sIHQwCisgICAgYmFkZGlzIGlu
Y3JlbWVudCwgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGlu
dWUKICAgICBhY3Rpb24oKQogICAgIC5jb250aW51ZToKIGVuZApAQCAtMTUwMyw3ICsxNTA0LDgg
QEAgbWFjcm8gcHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvYwogICAgIGNvZGVCbG9j
a0dldHRlcih0MSkKICAgICBjb2RlQmxvY2tTZXR0ZXIodDEpCiAgICAgaWYgbm90IChDX0xPT1Ag
b3IgQ19MT09QX1dJTikKLSAgICAgICAgYmFkZGlzIDUsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1
dGVDb3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDFdLCAuY29u
dGludWUKKyAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDFd
LCB0MAorICAgICAgICBiYWRkaXMgNSwgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50
ZXJbdDBdLCAuY29udGludWUKICAgICAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgICAgICBtb3Zl
IGNmciwgYTAKICAgICAgICAgICAgIG1vdmUgUEMsIGExCkBAIC0xNjE3LDE0ICsxNjE5LDE0IEBA
IG1hY3JvIGZ1bmN0aW9uSW5pdGlhbGl6YXRpb24ocHJvZmlsZUFyZ1MKICAgICAjIG9wdGltYWwg
d2F5IGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gZml2ZSByZWdpc3RlcnMg
YXZhaWxhYmxlCiAgICAgIyBmb3IgYXJiaXRyYXJ5IHVzZSBpbiB0aGUgaW50ZXJwcmV0ZXIuCiAg
ICAgbG9hZGkgQ29kZUJsb2NrOjptX251bVBhcmFtZXRlcnNbdDFdLCB0MAotICAgIGFkZHAgLXBy
b2ZpbGVBcmdTa2lwLCB0MCAjIFVzZSBhZGRpIGJlY2F1c2UgdGhhdCdzIHdoYXQgaGFzIHRoZSBw
ZWVwaG9sZQorICAgIGFkZHAgLXByb2ZpbGVBcmdTa2lwLCB0MAogICAgIGFzc2VydChtYWNybyAo
b2spIGJwZ3RlcSB0MCwgMCwgb2sgZW5kKQogICAgIGJ0cHogdDAsIC5hcmd1bWVudFByb2ZpbGVE
b25lCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2FyZ3VtZW50VmFsdWVQcm9maWxlcyArIEZpeGVk
VmVjdG9yOjptX3N0b3JhZ2UgKyBSZWZDb3VudGVkQXJyYXk6Om1fZGF0YVt0MV0sIHQzCiAgICAg
YnRweiB0MywgLmFyZ3VtZW50UHJvZmlsZURvbmUgIyBXaGVuIHdlIGNhbid0IEpJVCwgd2UgZG9u
J3QgYWxsb2NhdGUgYW55IGFyZ3VtZW50IHZhbHVlIHByb2ZpbGVzLgogICAgIG11bHAgc2l6ZW9m
IFZhbHVlUHJvZmlsZSwgdDAsIHQyICMgQWFhYWFoaGhoISBOZWVkIHN0cmVuZ3RoIHJlZHVjdGlv
biEKICAgICBsc2hpZnRwIDMsIHQwICMgb2Zmc2V0IG9mIGxhc3QgSlNWYWx1ZSBhcmd1bWVudHMg
b24gdGhlIHN0YWNrLgotICAgIGFkZHAgdDIsIHQzICMgcG9pbnRlciB0byBlbmQgb2YgVmFsdWVQ
cm9maWxlIGFycmF5IGluIENvZGVCbG9jazo6bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuCisgICAg
YWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gdGhl
IHZhbHVlIHByb2ZpbGUgYXJyYXkuCiAuYXJndW1lbnRQcm9maWxlTG9vcDoKICAgICBpZiBKU1ZB
TFVFNjQKICAgICAgICAgbG9hZHEgVGhpc0FyZ3VtZW50T2Zmc2V0IC0gOCArIHByb2ZpbGVBcmdT
a2lwICogOFtjZnIsIHQwXSwgdDIKQEAgLTI1NjMsNiArMjU2NSwxNyBAQCBtYWNybyBub3RTdXBw
b3J0ZWQoKQogICAgIGVuZAogZW5kCiAKKworbWFjcm8gdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0
eXBlLCBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKworbWFjcm8gdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisg
ICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0
YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0K
K2VuZAorCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRoZSBYODZfNjRfV0lOIGNvbmRp
dGlvbiBoZXJlLCBzaW5jZSBXRUJBU1NFTUJMWSBzaG91bGQgYWxyZWFkeSBiZSBmYWxzZSBvbiBX
aW5kb3dzCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNzE2
CiBpZiBXRUJBU1NFTUJMWSBhbmQgbm90IFg4Nl82NF9XSU4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9u
IDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50
aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsMTAgQEAgcHVibGljOgogICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIoKSA9IGRlZmF1bHQ7CiAKICAgICBzdGF0aWMgaW5saW5lIENhY2hl
YWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUNlbGwoSlNDZWxsKiBpZGVudGlmaWVyKTsKLSAgICBz
dGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKENvZGVCbG9jayosIGNvbnN0IElkZW50aWZpZXImKTsKLSAgICBzdGF0aWMg
aW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKENvZGVCbG9jayosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlm
aWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwg
Y29uc3QgSWRlbnRpZmllciYpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
PgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIFVuaXF1ZWRTdHJpbmdJbXBsKik7
CiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgY29uc3RleHByIENh
Y2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbVJhd0JpdHModWludHB0cl90IHJhd0JpdHMpIHsg
cmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIocmF3Qml0cyk7IH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwx
MiArMzUsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlm
aWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaSkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENv
ZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaSkKIHsKICAgICByZXR1
cm4gY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKGNvZGVCbG9jaywgaS5pbXBs
KCkpOwogfQogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxv
Y2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxv
Y2ssIGNvZGVCbG9jay0+aGFzSWRlbnRpZmllcih1aWQpKTsKICAgICByZXR1cm4gQ2FjaGVhYmxl
SWRlbnRpZmllcih1aWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVkVHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlZFR5cGVzLmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FjaGVkVHlwZXMuaCIKIAorI2lu
Y2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2lu
Y2x1ZGUgIkJ5dGVjb2RlQ2FjaGVFcnJvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODAs
NyArNDgwLDcgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90bwogI2lm
IEVOQUJMRShKSVQpCiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRo
T3AoT3BOZWdhdGU6Ok1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZSByZXN1bHQsIEpTVmFsdWUg
b3BlcmFuZCkKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9IG1ldGFkYXRhLm1f
YXJpdGhQcm9maWxlOworICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gKm1ldGFkYXRh
Lm1fYXJpdGhQcm9maWxlOwogICAgIHByb2ZpbGUub2JzZXJ2ZUFyZyhvcGVyYW5kKTsKICAgICBB
U1NFUlQocmVzdWx0LmlzTnVtYmVyKCkgfHwgcmVzdWx0LmlzQmlnSW50KCkpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUu
aAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsyODksOCBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZlJhcmVEYXRhKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9yYXJlRGF0YSk7IH0K
ICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFzU3RyaW5nSW5SYXJlRGF0YSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihSYXJlRGF0YSwgbV9hc1N0cmluZyk7IH0KKyAgICBz
dGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9ja0ZvckNhbGwp
OyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDb25z
dHJ1Y3QoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdCk7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRXhl
Y3V0YWJsZUJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NSw2ICszODUsOSBAQCBzdGF0aWMgdm9p
ZCBvdmVycmlkZURlZmF1bHRzKCkKICAgICAgICAgT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0
aW1pemVBZnRlcldhcm1VcCgpID0gMTUwMDsKICAgICAgICAgT3B0aW9uczo6dGhyZXNob2xkRm9y
T01HT3B0aW1pemVTb29uKCkgPSAxMDA7CiAgICAgfQorCisgICAgLy8gT09QUworICAgIC8vT3B0
aW9uczo6bWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvckJhc2VsaW5l
KCkgPSA0NTA7CiB9CiAKIHN0YXRpYyB2b2lkIGNvcnJlY3RPcHRpb25zKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjgyNjIy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw2IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVt
b3J5KCk7CiAgICAgdihJbnQzMiwgZXZhbFRocmVzaG9sZE11bHRpcGxpZXIsIDEwLCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBtYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJjZUxl
bmd0aCwgMjU2LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCi0gICAgdihCb29sLCByYW5kb21p
emVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9p
bnRzRm9yQmFzZWxpbmUsIDEwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1h
eGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JVcHBlclRpZXJzLCA1MDAw
MCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXApAQCAtNTMyLDYgKzUzMSw3IEBAIGJvb2wgY2Fu
VXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihCb29sLCB1c2VEYXRhSUMsIGZhbHNl
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ0luT3B0aW1pemluZ0pJ
VCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDU2hhcmlu
ZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgdXNlQmFzZWxpbmVKSVRD
b2RlU2hhcmluZywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIC8qIEZlYXR1
cmUgRmxhZ3MgKi9cCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTYsOSArMzk2LDExIEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZv
ckV4ZWN1dGkKICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVCeXRlY29kZSgpKQogICAgICAgICBj
b2RlQmxvY2stPnZhbGlkYXRlKCk7CiAKLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKKyAg
ICBpZiAoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gYmFzZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVu
bGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUpIHsKKyAgICAgICAgY29k
ZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICB9IGVsc2UgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpIHsKICAgICAg
ICAgc2V0dXBMTEludChjb2RlQmxvY2spOwotICAgIGVsc2UKKyAgICB9IGVsc2UKICAgICAgICAg
c2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CiAKICAgICBpbnN0YWxsQ29kZSh2bSwgY29kZUJsb2Nr
LCBjb2RlQmxvY2stPmNvZGVUeXBlKCksIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRp
ZXJVcENvdW50ZXIuaAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1
Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgIHsKICAg
ICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAg
c2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJt
VXAoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhy
ZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0
ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9u
czo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBi
b29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKQEAgLTY1LDkgKzY1LDkg
QEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVTb29uKCkKICAgICB7CiAgICAgICAgIGlmIChP
cHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9CQlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVz
aG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1p
emVTb29uKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0
aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICAg
ICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigp
KTsKICAgICB9CiAKICAgICBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAkocmV2aXNpb24gMjgyNjIy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewogCiBUaWVyVXBDb3VudDo6VGllclVwQ291bnQoKQogewotICAgIHNldE5ld1RocmVzaG9s
ZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIp
OworICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFm
dGVyV2FybVVwKCkpOwogfQogCiBUaWVyVXBDb3VudDo6flRpZXJVcENvdW50KCkgPSBkZWZhdWx0
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJ
KHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVy
VXBDb3VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAodWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAg
ICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwg
IjogT01HLW9wdGltaXppbmcgYWZ0ZXIgd2FybS11cC4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNo
b2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0
cik7CisgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRp
bWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0KIAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlv
blRocmVzaG9sZFJlYWNoZWQoKQpAQCAtOTAsMTQgKzkwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lk
IG9wdGltaXplTmV4dEludm9jYXRpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAg
ICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwg
IjogT01HLW9wdGltaXppbmcgbmV4dCBpbnZvY2F0aW9uLiIpOwotICAgICAgICBzZXROZXdUaHJl
c2hvbGQoMCwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9sZCgwKTsKICAgICB9CiAK
ICAgICB2b2lkIG9wdGltaXplU29vbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAg
ICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAi
OiBPTUctb3B0aW1pemluZyBzb29uLiIpOwogICAgICAgICAvLyBGSVhNRTogTmVlZCBhZGp1c3Rt
ZW50IG9uY2Ugd2UgZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2FzbSBmdW5jdGlvbnMuCi0g
ICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNv
b24oKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hv
bGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRp
b25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQodWludDMyX3QgZnVuY3Rpb25JbmRl
eCwgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQpJbmRleDogU291cmNlL1dURi93dGYvQmFnLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJKHJldmlzaW9uIDI4MjYyMikKKysr
IFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwyMCBAQCBw
dWJsaWM6CiAgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CiAgICAgfQogCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KKyAgICBCYWcmIG9wZXJhdG9yPShCYWc8VCwgVT4mJiBvdGhlcikK
KyAgICB7CisgICAgICAgIGlmICh1bndyYXBwZWRIZWFkKCkgPT0gb3RoZXIudW53cmFwcGVkSGVh
ZCgpKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgICAgIEJhZyBkZXN0cm95Owor
ICAgICAgICBkZXN0cm95Lm1faGVhZCA9IHVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgbV9oZWFk
ID0gb3RoZXIudW53cmFwcGVkSGVhZCgpOworICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRy
OworCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICB+QmFnKCkKICAgICB7CiAg
ICAgICAgIGNsZWFyKCk7CkluZGV4OiBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3Rz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHJldmlz
aW9uIDI4MjYyMikKKysrIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHdvcmtp
bmcgY29weSkKQEAgLTc3NiwxNyArNzc2LDE4IEBAIGVuZAogCiAjIEZJWE1FOiBuZWVkIHRvIGZp
eCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4NzAzIHRvIGVuYWJs
ZSB0aGlzIG9uIExpbnV4L01JUFMuCiBkZWYgcnVuQnl0ZWNvZGVDYWNoZUltcGwob3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zLCAqYWRkaXRpb25hbEVudikKLSAgICBpZiAoJGhvc3RPUyA9PSAi
ZGFyd2luIikKLSAgICAgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlIgotICAgIGVs
c2lmICgkaG9zdE9TID09ICJsaW51eCIgJiYgJGFyY2hpdGVjdHVyZSAhPSAibWlwcyIpCi0gICAg
ICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1jYWNoZVhYWFhYWCIKLSAgICBlbHNlCi0gICAg
ICAgIHNraXAKLSAgICAgICAgcmV0dXJuCi0gICAgZW5kCisgICAgIyBPT1BTCisgICAgI2lmICgk
aG9zdE9TID09ICJkYXJ3aW4iKQorICAgICMgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNh
Y2hlIgorICAgICNlbHNpZiAoJGhvc3RPUyA9PSAibGludXgiICYmICRhcmNoaXRlY3R1cmUgIT0g
Im1pcHMiKQorICAgICMgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlWFhYWFhYIgor
ICAgICNlbHNlCisgICAgIyAgICBza2lwCisgICAgIyAgICByZXR1cm4KKyAgICAjZW5kCiAKLSAg
ICBvcHRpb25zID0gQkFTRV9PUFRJT05TICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMgKyAkdGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25zCi0gICAgYWRkUnVuQ29t
bWFuZCgiYnl0ZWNvZGUtY2FjaGUiLCBbInNoIiwgKHBhdGhUb0hlbHBlcnMgKyAiYnl0ZWNvZGUt
Y2FjaGUtdGVzdC1oZWxwZXIuc2giKS50b19zLCBmaWxlVGVtcGxhdGUudG9fcywgKnZtQ29tbWFu
ZCwgJGJlbmNobWFyay50b19zXSArIG9wdGlvbnMsIHNpbGVudE91dHB1dEhhbmRsZXIsIHNpbXBs
ZUVycm9ySGFuZGxlciwgKmFkZGl0aW9uYWxFbnYpCisgICAgI29wdGlvbnMgPSBCQVNFX09QVElP
TlMgKyBGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucyArICR0ZXN0U3Bl
Y2lmaWNSZXF1aXJlZE9wdGlvbnMKKyAgICAjYWRkUnVuQ29tbWFuZCgiYnl0ZWNvZGUtY2FjaGUi
LCBbInNoIiwgKHBhdGhUb0hlbHBlcnMgKyAiYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIuc2gi
KS50b19zLCBmaWxlVGVtcGxhdGUudG9fcywgKnZtQ29tbWFuZCwgJGJlbmNobWFyay50b19zXSAr
IG9wdGlvbnMsIHNpbGVudE91dHB1dEhhbmRsZXIsIHNpbXBsZUVycm9ySGFuZGxlciwgKmFkZGl0
aW9uYWxFbnYpCiBlbmQKIAogZGVmIHJ1bkJ5dGVjb2RlQ2FjaGUoKm9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438431</attachid>
            <date>2021-09-16 19:18:57 -0700</date>
            <delta_ts>2021-09-16 19:29:37 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>455358</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjYyMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAJ
KHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJh
eVByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMyLDcgQEAgdm9pZCBBcnJh
eVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJlZGljdAogewogICAgIG1fb2JzZXJ2ZWRBcnJheU1v
ZGVzIHw9IGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKGxhc3RTZWVuU3RydWN0dXJlKTsKICAgICAK
KyAgICAvLyBPT1BTOiBJcyBpdCBvayBmb3IgdGhpcyB0byByYWNlPyBJIHRoaW5rIHNvLgogICAg
IGlmICghbV9kaWRQZXJmb3JtRmlyc3RSdW5QcnVuaW5nCiAgICAgICAgICYmIGhhc1R3b09yTW9y
ZUJpdHNTZXQobV9vYnNlcnZlZEFycmF5TW9kZXMpKSB7CiAgICAgICAgIG1fb2JzZXJ2ZWRBcnJh
eU1vZGVzID0gYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUobGFzdFNlZW5TdHJ1Y3R1cmUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCShy
ZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsOSArMjkwLDEwIEBAIG9wX2dyb3VwIDpQ
cm9maWxlZEJpbmFyeU9wLAogICAgICAgICBsaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAg
cmhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVz
LAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkCiAgICAgfSwKICAgICBtZXRhZGF0YTog
ewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0
aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9ncm91cCA6VmFsdWVQ
cm9maWxlZEJpbmFyeU9wLApAQCAtMzUxLDkgKzM1MiwxMCBAQCBvcF9ncm91cCA6VW5hcnlJblBs
YWNlUHJvZmlsZWRPcCwKICAgICBdLAogICAgIGFyZ3M6IHsKICAgICAgICAgc3JjRHN0OiBWaXJ0
dWFsUmVnaXN0ZXIsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlCisg
ICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3AgOnRv
X29iamVjdCwKQEAgLTM4NCw5ICszODYsMTAgQEAgb3AgOm5lZ2F0ZSwKICAgICAgICAgZHN0OiBW
aXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmQ6IFZpcnR1YWxSZWdpc3RlciwKICAgICAg
ICAgcmVzdWx0VHlwZTogUmVzdWx0VHlwZSwKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUsCisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgog
ICAgIH0KIAogb3AgOm5vdCwKQEAgLTQ3OCw2ICs0ODEsNyBAQCBvcCA6Z2V0X2J5X2lkLAogICAg
IG1ldGFkYXRhOiB7CiAgICAgICAgIG1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwK
ICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFy
cmF5UHJvZmlsZSwKICAgICB9CiAKIG9wIDpnZXRfYnlfaWRfd2l0aF90aGlzLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
T3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Myw2ICs3MywyOCBAQCBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZv
ckltcGwoQnl0ZWNvCiAgICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9maWxlOwogfQogCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQcm9maWxlT2Zmc2V0
Rm9yKHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURfUEFSQU0oY2hlY2tw
b2ludEluZGV4KTsKKyAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9p
dGVyYXRvcl9vcGVuKSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAg
ICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mSXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck9wZW46OmdldE5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFBy
b2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlE
ID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgp
IHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJldHVybiBCeXRl
Y29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKKyAgICAgICAgY2Fz
ZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZEb25lUHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1
ZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2ZpbGUoKTsKKyAg
ICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSAKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZQ
cm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29s
IGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQg
Y2hlY2twb2ludEluZGV4KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJF
TEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsKIH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4g
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFy
dCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5m
bzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpA
QCAtMjI1LDYgKzIyMCwxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0TWF4QXJndW1lbnRDb3Vu
dEluCiAgICAgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZhbHVlOwogfQogCitD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRo
U3RhcnQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkgJiYgaXNUYWlsQ2FsbCgp
KTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+
KHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNp
dFdlYWsoVk0mIHZtKQogewogICAgIGF1dG8gaGFuZGxlU3BlY2lmaWNDYWxsZWUgPSBbJl0gKEpT
RnVuY3Rpb24qIGNhbGxlZSkgewpAQCAtMjk4LDIzICsyOTksMTEgQEAgdm9pZCBDYWxsTGlua0lu
Zm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5r
VG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1p
dEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBV
c2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsK
LSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0lu
Zm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwotICAgICAgICB1
LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAgICB9Ci0KLSAg
ICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsK
LSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKLSAgICBp
ZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlDOjpZZXMpIHsK
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7CiAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMxMiw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMgPSBqaXQuYnJh
bmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkg
eworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxD
YWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8vIFBvbHltb3Jw
aGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAgICAgIGppdC5m
YXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mTW9u
b21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAtMzM2LDE0ICsz
MjUsMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKLSAgICAg
ICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAg
ICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJU
YWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhckNh
bGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwogICAgICAgICBq
aXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAg
ICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsZWVM
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxsZWVD
aGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbExvY2F0aW9u
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7
CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOwogICAg
ICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzQ0LDM0IEBAIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0
LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRyKTsKKyAgICBz
ZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJl
Zyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwg
Y2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBj
YWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhp
cywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBpc1RhaWxDYWxs
KCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxs
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBX
VEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJ
Qzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BS
LCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdURk1vdmUocHJl
cGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxl
ZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxs
TGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aElt
cGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZ
ZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxM
aW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJ
bmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51
bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCB0
cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0zNjksMTcgKzM4
MSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgCiAgICAgaml0
LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQ
YXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9pZCBDYWxsTGlu
a0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5m
bzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7
Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2bSwgVW5saW5r
ZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcgY2FsbGVlR1BSLCBH
UFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4o
dW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgc2V0VXBDYWxsKHVubGlu
a2VkQ2FsbExpbmtJbmZvLmNhbGxUeXBlLCBjYWxsZWVHUFIpOworICAgIG1fZG9uZUxvY2F0aW9u
ID0gdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtlZENh
bGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKQorICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEg
PSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigqdW5saW5rZWRDYWxsTGlua0luZm8u
ZnJhbWVTaHVmZmxlRGF0YSk7IC8vIE9PUFM6IHRpbWUgZm9yIHJlZiBjb3VudGluZz8KKyAgICBz
ZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24o
dm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENv
ZGU8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFp
bENhbGwoKSk7CiAKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKIAotICAgIGF1
dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAg
IH0pOwotCiAgICAgYXV0byBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICB1LmNvZGVJQy5tX2Nh
bGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+KGNhbGwpOwpAQCAtMzk3LDcgKzQyMiw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGly
ZWN0VGFpbENhbGxGYXMKIAogICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwog
ICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KGZhc3RQYXRoU3RhcnQpOworICAgICAgICB1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CiAg
ICAgfSk7CiAKICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEganVt
cCB0byB0aGUgc2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0
MywxMSBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogc3Ry
dWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87
CisKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2Fs
bExpbmtJbmZvPiB7CiBwdWJsaWM6Ci0gICAgZW51bSBDYWxsVHlwZSB7CisgICAgZW51bSBDYWxs
VHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25lLAogICAgICAgICBDYWxsLAogICAgICAgICBD
YWxsVmFyYXJncywKQEAgLTE2NSw2ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGVl
R1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYs
IFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUik7CisKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxs
ZWVHUFI7IH0KICAgICAKICAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgewpAQCAt
MTczLDEzICsxNzcsMTYgQEAgcHVibGljOgogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5r
SW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4g
cHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CisgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVT
RURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxD
YWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2Fs
bCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxD
YWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJik7CiAgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2
b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOworICAgIHN0YXRpYyB2b2lkIGVt
aXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpOwogICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVz
ZURhdGFJQzo6WWVzOyB9CkBAIC0yMDMsNyArMjEwLDYgQEAgcHVibGljOgogICAgICAgICBtX2Fs
bG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwogCkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9zbG93U3R1YiA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgSklUU3R1YlJv
dXRpbmUqIHNsb3dTdHViKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Nsb3dTdHViLmdldCgp
OwotICAgIH0KLQogICAgIGJvb2wgc2Vlbk9uY2UoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
aGFzU2VlblNob3VsZFJlcGF0Y2g7CkBAIC0zMDgsOSArMzA5LDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUpOwogICAgIH0KIAotICAg
IHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsK
KyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIH0KIAogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTM4MSw3ICszODIsOSBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFz
dFBhdGhTdGFydDsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZh
c3RQYXRoU3RhcnQoKTsKKwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC0z
OTcsNiArNDAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0
aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247CiAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoU3Rh
cnQ7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zh
c3RQYXRoU3RhcnQ7CiAgICAgICAgIH0gY29kZUlDOwogICAgIH0gdTsKIApAQCAtNDI0LDYgKzQy
OCwxMyBAQCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpCiAgICAgcmV0
dXJuIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCk7CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxM
aW5rSW5mbyB7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHks
IG9ubHkgdXNlZCBieSBiYXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBD
b2RlT3JpZ2luLgorICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307CisK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODI2
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2
bSwgU3RydWN0dXJlKiAKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBz
ZXROdW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7CisKKyAgICBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKICAg
ICAKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KQEAgLTMxOCw3ICsz
MjAsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDCiAgICAgZmlu
aXNoQ3JlYXRpb25Db21tb24odm0pOwogCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAg
IGppdEFmdGVyV2FybVVwKCk7CisgICAgLy9qaXRBZnRlcldhcm1VcCgpOwogCiAgICAgaWYgKG90
aGVyLm1fcmFyZURhdGEpIHsKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwpA
QCAtMzU5LDcgKzM2MSw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJl
KiAKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0
ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9s
bGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVy
KCk7CisKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcw
LDEwICszNzQsMTMgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAog
Ly8gd2UgY2FuJ3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24u
IFRoaXMgcHJvY2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93
IG9yIGludHJvZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkg
b24gbGl2ZW5lc3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVC
bG9ja3Mgb2YgYW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNh
Y2hpbmcgdGhlIGxpdmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2su
CisvLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlz
IHNoYXJlZCBiZXR3ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAor
Ly8gc28gdGhlIGJ5dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2Nr
cyBzaGFyaW5nIGFuIFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtl
ZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7Cisg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOyAvLyBXZSBuZWVkIHRvIHNldCB1cCBvdXIgdmFs
dWUgcHJvZmlsZSBwb2ludGVycy4KKwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKQEAgLTQzNSw3ICs0NDIsNyBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgLy8gQm9va2tlZXAgdGhlIHN0
cm9uZ2x5IHJlZmVyZW5jZWQgbW9kdWxlIGVudmlyb25tZW50cy4KICAgICBIYXNoU2V0PEpTTW9k
dWxlRW52aXJvbm1lbnQqPiBzdHJvbmdseVJlZmVyZW5jZWRNb2R1bGVFbnZpcm9ubWVudHM7CiAK
LSAgICBhdXRvIGxpbmtfcHJvZmlsZSA9IFsmXShjb25zdCBhdXRvJiAvKmluc3RydWN0aW9uKi8s
IGF1dG8gLypieXRlY29kZSovLCBhdXRvJiAvKm1ldGFkYXRhKi8pIHsKKyAgICBhdXRvIGxpbmtf
cHJvZmlsZSA9IFsmXShjb25zdCBhdXRvJiAvKmluc3RydWN0aW9uKi8sIGF1dG8gLypieXRlY29k
ZSovLCBhdXRvJikgewogICAgICAgICBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVz
Kys7CiAgICAgfTsKIApAQCAtNDY2LDYgKzQ3MywxOSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCisjZGVmaW5lIExJ
TktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBc
CisgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5t
X2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJ5dGVj
b2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUg
TElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsg
XAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEu
bV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVj
b2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygp
OwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkg
ewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpA
QCAtNDk5LDkgKzUxOSw5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IFMKIAogICAgICAgICBMSU5LKE9wR2V0QnlJZCwgcHJvZmlsZSkKIAotICAgICAgICBMSU5LKE9w
RW51bWVyYXRvck5leHQsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BFbnVtZXJhdG9ySW5CeVZh
bCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgcHJv
ZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JOZXh0KQorICAgICAgICBMSU5LKE9wRW51
bWVyYXRvckluQnlWYWwpCisgICAgICAgIExJTksoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkp
CiAgICAgICAgIExJTksoT3BFbnVtZXJhdG9yR2V0QnlWYWwsIHByb2ZpbGUpCiAKICAgICAgICAg
TElOSyhPcENhbGwsIHByb2ZpbGUpCkBAIC01MjgsMTQgKzU0OCwxNCBAQCBib29sIENvZGVCbG9j
azo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQcm9taXNl
KQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTksoT3BBZGQp
Ci0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAgIExJTkso
T3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcEluYykKLSAg
ICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BNdWwpCisg
ICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAgICAgTElO
S19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktfV0lUSF9V
TkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJ
VEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUo
T3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2OCw3ICs3ODgsNyBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgLy8gcmVseSBvbiB0
aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRlZCB0byBhbHNv
IGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUgYWNjdXJhdGUg
YXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsK
LSAgICBqaXRBZnRlcldhcm1VcCgpOworICAgIC8vaml0QWZ0ZXJXYXJtVXAoKTsKIAogICAgIC8v
IElmIHRoZSBjb25jdXJyZW50IHRocmVhZCB3aWxsIHdhbnQgdGhlIGNvZGUgYmxvY2sncyBoYXNo
LCB0aGVuIGNvbXB1dGUgaXQgaGVyZQogICAgIC8vIHN5bmNocm9ub3VzbHkuCkBAIC03ODksNiAr
ODA5LDc3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbkNvbW1vbihWTSYKICAgICBt
X293bmVyRWRnZS5zZXQodm0sIHRoaXMsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmNyZWF0
ZSh2bSwgdGhpcykpOwogfQogCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNl
bGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRDb2Rl
KGppdENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0Q29k
ZU1hcCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFuZGxl
ckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5hdGl2
ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJl
dGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAg
YXV0byYgaml0RGF0YSA9IGVuc3VyZUpJVERhdGEobG9ja2VyKTsKKworICAgICAgICBSRUxFQVNF
X0FTU0VSVChqaXREYXRhLm1faml0Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CisgICAgICAgIGpp
dERhdGEubV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+bV9j
b25zdGFudFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqaXRD
b2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBlbnRy
eSA9IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOworICAgICAgICAgICAgc3dpdGNoIChl
bnRyeS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xv
YmFsT2JqZWN0OgorICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0g
PSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAgICAg
ICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8gPSAqc3Rh
dGljX2Nhc3Q8VW5saW5rZWRDYWxsTGlua0luZm8qPihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAg
ICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxsTGlua0lu
Zm9zLmFkZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpKTsK
KyAgICAgICAgICAgICAgICAvLyBPT1BTOiBkb24ndCBoYXJkY29kZSB0aGVzZSByZWdpc3RlcnMg
bGlrZSB0aGlzLgorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+aW5pdGlhbGl6ZURhdGFJ
Qyh2bSgpLCB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJl
Z1QyKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gY2Fs
bExpbmtJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7Cisg
ICAgICAgICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5m
byA9ICpzdGF0aWNfY2FzdDxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKj4oZW50cnkucGF5bG9h
ZCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gaml0RGF0
YS5tX3N0dWJJbmZvcy5hZGQodW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlLCBDb2RlT3JpZ2lu
KHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT5pbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8odGhpcywgdW5saW5r
ZWRTdHViSW5mbyk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtp
XSA9IHN0dWJJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbDogeworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50
cnkucGF5bG9hZCk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtp
XSA9IGZ1bmN0aW9uRGVjbChpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25F
eHByOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gZnVuY3Rpb25FeHByKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICBjYXNlIE1v
ZHVsZUNvZGU6CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlu
bGluZWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6Cisg
ICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3
ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJp
ZGUgdGhhdCBvYnNlcnZhdGlvbi4KKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0g
Y2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCgpKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24o
dGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghdW5saW5rZWRDb2RlQmxv
Y2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSAmJiBPcHRpb25zOjp1c2VCYXNlbGluZUpJVENv
ZGVTaGFyaW5nKCkpCisgICAgICAgIHVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNl
bGluZUNvZGUgPSBXVEZNb3ZlKGppdENvZGUpOworfQorCiBDb2RlQmxvY2s6On5Db2RlQmxvY2so
KQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtMTUxOSwzOSArMTYxMCw0MCBAQCB2b2lkIENv
ZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0
aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29sIGlzRWxpZ2libGVGb3JMTEludERv
d25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwotICAgIG1faXNFbGlnaWJs
ZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBp
cyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2Ug
YXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFs
bCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAgICBpZiAoT3B0aW9uczo6dXNlTExJ
bnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGlu
Zyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBv
cHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wdGltaXplZENvZGVC
bG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxl
Rm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVs
bHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJ
bnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5s
aW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1f
ZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0
cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhh
bmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50Ojpo
YW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKLQot
ICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUg
YmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwot
ICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBy
dW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNv
ZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0
dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgotICAgICAgICAgICAgICAgICAg
ICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYKKy8vIE9PUFM6IHJlY29uY2lsZSB0aGlzCisv
LyNpZiBFTkFCTEUoSklUKQorLy8gICAgYm9vbCBpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUg
PSBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZTsKKy8vICAgIG1faXNFbGlnaWJsZUZvckxM
SW50RG93bmdyYWRlID0gZmFsc2U7CisvLyAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5v
dCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRl
bXB0CisvLyAgICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFuZCByZWluc3RhbGwg
TExJbnQgY29kZSB0byBzYXZlIEpJVCBtZW1vcnkuCisvLyAgICBpZiAoT3B0aW9uczo6dXNlTExJ
bnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGlu
Zyh0aGlzKSkgeworLy8gICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9
IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKy8vICAgICAgICAgICAgaWYgKCFvcHRpbWl6ZWRD
b2RlQmxvY2stPm1fb3NyRXhpdENvdW50ZXIpIHsKKy8vICAgICAgICAgICAgICAgIGlmIChpc0Vs
aWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKKy8vICAgICAgICAgICAgICAgICAgICBtX2ppdENv
ZGUgPSBudWxscHRyOworLy8gICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRyeXBvaW50
KHRoaXMpOworLy8gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25I
YW5kbGVycygpOyBpKyspIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5r
ZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlv
bkhhbmRsZXIoaSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5k
bGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKKy8vICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5r
ZWRIYW5kbGVyLnRhcmdldCkucHRyKCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRs
ZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5j
b2RlKCkpKTsKKy8vICAgICAgICAgICAgICAgICAgICB9CisvLworLy8gICAgICAgICAgICAgICAg
ICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgLy8g
SXQncyBzYWZlIHRvIGNsZWFyIHRoZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkgYWxsIGNvbXBpbGVyIHRocmVhZHMKKy8vICAgICAgICAgICAgICAgICAgICAv
LyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUg
b3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKKy8vICAgICAgICAgICAgICAg
ICAgICAvLyBwYXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0
aGUgdmFyaW91cyAqaW5mb3MuCisvLyAgICAgICAgICAgICAgICAgICAgcmVzZXRKSVREYXRhKCk7
CisvLyAgICAgICAgICAgICAgICB9IGVsc2UKKy8vICAgICAgICAgICAgICAgICAgICBtX2lzRWxp
Z2libGVGb3JMTEludERvd25ncmFkZSA9IHRydWU7CisvLyAgICAgICAgICAgIH0KKy8vICAgICAg
ICB9CisvLyAgICB9CisvLworLy8jZW5kaWYKICAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRC
ZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNo
ZXMoKTsKQEAgLTE1NzksNyArMTY3MSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseSgKICAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6Ci0g
ICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOworICAgICAg
ICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNvdW50KCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAg
IGNvdW50ID0gbV9qaXRFeGVjdXRlQ291bnRlci5jb3VudCgpOwpAQCAtMzExOCw3ICszMjEwLDcg
QEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1l
UmVnaXN0ZXJDb3VudEZvcih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMzM0LDEzICszNDI2LDEzIEBA
IEJpbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2gg
KHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNh
c2Ugb3BfbXVsOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJu
ICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTMzNTIsMTEgKzM0NDQsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6dW5hcnlBcml0aAogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGNhc2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0zNTA2LDI4ICszNTk4LDE5IEBAIHN0ZDo6b3B0aW9uYWw8
Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKIH0K
IAotaW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkK
LXsKLSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXplKCkpIHsKLSAg
ICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xk
OwotICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkICog
NDsKLSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8g
MjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRocmVzaG9s
ZDsKLX0KKy8vdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkKKy8veworLy8gICAgbV9s
bGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlv
bnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKKy8vfQogCi12b2lkIENv
ZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBDb2RlQmxvY2s6OmppdFNvb24oKQogewot
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklU
KE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKKyAgICBtX2xs
aW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCh1bmxpbmtlZENvZGVCbG9jaygpLT50
aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7CiB9
CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXROZXh0SW52
b2NhdGlvbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0
aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7Cisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAK
IGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcgQEAgY2xhc3MgTWV0YWRhdGFUYWJsZTsKIGNs
YXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBjbGFz
cyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAogREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEpOwogCkBAIC0x
NTgsNyArMTU5LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUo
KSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1Q
YXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgog
ICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAK
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1f
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE3MCw2IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAg
dW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVj
a3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRy
ZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBh
bHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0
ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzNCw2IEBAIHB1YmxpYzoKICAgICBib29s
IGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxs
Vk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1
YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5n
IGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBg
dGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAgICBy
ZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2
Niw4ICsyNTgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNN
YXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3ZlIGFy
aXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLCBhbmQgb250byBKSVRD
b2RlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
CiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgICAgIEJh
ZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CkBAIC0yODIsOSArMjc2LDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFw
OwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAg
ICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAg
SklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1f
aml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29u
c3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3Rh
bnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVD
b2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElL
RUxZKG1faml0RGF0YSkpCkBAIC0yOTMsNiArMjkxLDggQEAgcHVibGljOgogICAgIH0KICAgICBK
SVREYXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVREYXRhKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9qaXREYXRhKTsgfQorCiAgICAgSklUQWRkSUMqIGFkZEpJVEFk
ZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwogICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5h
cnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFBy
b2ZpbGUqKTsKQEAgLTMyMiwxNiArMzIyLDcgQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9y
IGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4K
ICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNv
ZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRD
b2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShq
aXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0g
ICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAg
IHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBj
b25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKICAgICB2b2lkIHNldFBDVG9Db2RlT3Jp
Z2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpv
cHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwpAQCAtNDcyLDEwICs0NjMsMTIg
QEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5hbWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIp
OwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2Zp
bGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgp
KTsKICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKTsKKyAgICAg
ICAgCiAgICAgfQogCiAgICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudCh1
bnNpZ25lZCBhcmd1bWVudEluZGV4KQpAQCAtNTcxLDYgKzU2NCw3IEBAIHB1YmxpYzoKICAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29u
c3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdl
dCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHJl
Zyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFu
dFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKGluZGV4KTsg
fQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0YW50UmVnaXN0ZXJzKSAr
IGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5T2Zmc2V0KCk7IH0KIAog
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1cm4g
bV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJPZkZ1bmN0aW9u
RGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC02MDAsNiArNTk0
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKICAgICAg
ICAgcmV0dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAg
IH0KKyAgICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJs
ZUluZGV4KTsKKyAgICB2b2lkKiBiYXNlbGluZUpJVENvbnN0YW50UG9vbCgpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wu
ZGF0YSgpOworICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIHVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTYx
MCw2ICs2MTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7
CiAgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKICAgICB9CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRj
aEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZV
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNv
bnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZShpbnQgdGFibGVJbmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9CkBAIC02MzIsMjEgKzYzMywyMCBAQCBwdWJs
aWM6CiAKICAgICBib29sIGNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRB
bmRTZXQodGhpcyk7CisgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNoZWNr
SWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOwogICAgIH0KIAogICAgIHZvaWQgZG9udEpJ
VEFueXRpbWVTb29uKCkKICAgICB7Ci0gICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5kZWZl
ckluZGVmaW5pdGVseSgpOworICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmRlZmVySW5k
ZWZpbml0ZWx5KCk7CiAgICAgfQogCi0gICAgaW50MzJfdCB0aHJlc2hvbGRGb3JKSVQoaW50MzJf
dCB0aHJlc2hvbGQpOwotICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKTsKICAgICB2b2lkIGppdFNv
b24oKTsKKyAgICB2b2lkIGppdE5leHRJbnZvY2F0aW9uKCk7CiAKICAgICBjb25zdCBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICAgICAgcmV0dXJuICptX2xs
aW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgfQogCiAgICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6dHVw
bGU8U3RydWN0dXJlSUQsIHVuc2lnbmVkPiwgRml4ZWRWZWN0b3I8TExJbnRQcm90b3R5cGVMb2Fk
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0Y2hwb2ludE1hcDsKQEAg
LTc5Nyw2ICs3OTcsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMo
KSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dl
clJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQg
YWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVC
cmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQpAQCAtODM4LDYgKzgzOSw3IEBAIHB1
YmxpYzoKICAgICBtdXRhYmxlIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwogCiAgICAgYm9vbCBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQgYmVjYXVzZSB0aGUgSklU
IHdhbnRzIHRvIHN0b3JlIHRvIGl0LgorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91
bGRBbHdheXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7IH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdW5zaWdu
ZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCkBA
IC05MDcsMTEgKzkwOSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
TWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0
YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1Bv
aW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9u
c1Jhd1BvaW50ZXIpOyB9CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emlu
Z0Vhcmx5UmV0dXJuKCkKLSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVp
cmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0gICAgICAgIHJldHVy
biAhbV91bmxpbmtlZENvZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAgfQorICAgIGJvb2wg
bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7IHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKTsg
fQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CkBA
IC0xMDA5LDcgKzEwMDcsOSBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAg
bV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENv
ZGU7CiAjaWYgRU5BQkxFKEpJVCkKK3B1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SklURGF0
YT4gbV9qaXREYXRhOworcHJpdmF0ZToKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAg
IC8vIFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFz
IHRoZSBwcm9maWxlZCBjb2RlIGJsb2NrCkBAIC0xMDI4LDcgKzEwMjgsNyBAQCBwcml2YXRlOgog
CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAgICBC
YXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9Owog
CiAgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAgICAg
dWludDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgyNjIyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJh
c2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlVubGlua2VkTWV0YWRhdGFUYWJsZUlubGluZXMuaCIK
QEAgLTQwLDkgKzQxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29u
cwogICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICAgICAg
bV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0
YWRhdGEubV9wcm9maWxlLCBmYWxzZSk7IH0pOwotCiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9X
SVRIX1ZBTFVFX1BST0ZJTEUoVklTSVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0
YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCkBA
IC01Nyw3ICs1Niw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMK
ICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAg
ICAgfSk7CiAgICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC05
OSw0ICs5NywyNCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvCiAg
ICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZU19JTkxJTkUgY29uc3QgSklUQ29kZU1h
cCYgQ29kZUJsb2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRD
b2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFwOworfQorCitBTFdBWVNfSU5MSU5F
IFNpbXBsZUp1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQg
dGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2Rl
LmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5M
SU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBU
YWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4o
bV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwor
fQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5o
CShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcChDb2Rl
QmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQogICAgIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAko
cmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1
dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAgYm9vbCBF
eGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKLSAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9jayA/IGNv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQpOworICAgIHRocmVz
aG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAgICBtX2NvdW50ZXIg
PSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHJl
dmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRp
b25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAg
IHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRoaXMsIGNo
ZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxzZS4KICAg
ICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwogICAgIGJv
b2wgaGFzQ3Jvc3NlZFRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlciA+PSAwOyB9
Ci0gICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayop
OworICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2RlQmxvY2sq
ID0gbnVsbHB0cik7CiAgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwogICAgIGRvdWJsZSBj
b3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENvdW50KSAr
IG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpAQCAtODYs
MTMgKzg2LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgVCB0aHJlc2hvbGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChUIHRocmVz
aG9sZCkKICAgICB7Ci0gICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwotICAgICAgICBpZiAo
T3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCkgJiYg
Z2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2JqZWN0LT53
ZWFrUmFuZG9tSW50ZWdlcigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3Bv
aW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBtYXhpbXVt
RXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAgIGludDMyX3QgbWF4
VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwog
ICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAgICAgICAgdGhyZXNo
b2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xkOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkocmV2
aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRN
ZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBHZXRCeUlk
TW9kZU1ldGFkYXRhVW5zZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRh
ZGF0YVVuc2V0KSA9PSAxMik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5n
dGggeworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBhcnJheVBy
b2ZpbGUpOyB9CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07CiBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsKQEAgLTg4
LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRN
b2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7IC8vIFRo
aXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
R2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhRGVm
YXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5zZXRNb2Rl
OwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1vZGU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNw
cAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
bGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NSw2ICszODUsOCBAQCBib29sIElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJ
bmxpbmU7CiB9CiAKKy8vIE9PUFM6IE1ha2UgdGhpcyBzdHVmZiB3b3JrIHdpdGggZGF0YSBpY3Mg
dG8gbm90IGFzc3VtZSBpbmxpbmUgYWNjZXNzLgorCiB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHRhcmdldCkKIHsKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkgewpAQCAtNDA0LDkgKzQwNiwxMiBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjCiB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQpCiB7CiAgICAgaWYgKGNvZGVC
bG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gT09QUzogbWFrZSBzb21lIHZlcnNpb24g
b2YgSW5saW5lQWNjZXNzIGZvciBiYXNlbGluZS4gUGVyaGFwcyBtYWtlIGl0IGRhdGEgZHJpdmVu
LiBPciBwZXJoYXBzIGhhdmUgdGhlIGNvZGUKKyAgICAgICAgLy8gYmUgc2hhcmVkIHNvbWVob3cg
YmV0d2VlbiBVbmxpbmtlZENvZGVCbG9ja3MuCisKICAgICAgICAgLy8gSWYgaXQgaXMgbm90IEdl
dEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQgKGUuZy4gR2V0QnlWYWwp
LgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGlyZWN0IGp1bXAsIGFuZCBv
bmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2RlUHRyLgotICAgICAgICBp
ZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAgICAgIGlmIChjb2RlQmxv
Y2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBzdHViSW5mby5oYXNDb25z
dGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29kZVB0ciBpcyBwb2ludGlu
ZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMgbWVhbnMgdGhhdCBJbmxp
bmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAgICAgIC8vIFdlIHJld3Jp
dGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNvZGUgb25jZSwgYW5kIGNv
bnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgogICAgICAgICAgICAgaWYg
KHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09IHN0dWJJbmZvLnNsb3dQ
YXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CkBAIC00MjEsNiArNDI2LDcg
QEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgICAgICAgICAg
ICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5raW5nIHN0dWIgY2FsbCIpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CisKICAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gdGFyZ2V0OwogICAg
ICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24gMjgyNjIyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0VfT1BFUkFU
T1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7CiAgICAg
dWludDhfdCBzZWVuTW9kZXMgeyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNl
ZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0YWRhdGEs
IHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc2Vlbk1v
ZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCShyZXZpc2lv
biAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlu
a0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJbnRDYWxs
TGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQogCiBwcml2YXRlOgogICAgIHVpbnRwdHJfdCBt
X2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0IH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0YWRhdGFUYWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgJKHJl
dmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0
YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGZ1bmMoKm1ldGFkYXRhKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBudW1FbnRyaWVzKCkKKyAgICB7CisgICAgICAg
IGF1dG8qIHN0YXJ0ID0gYml0d2lzZV9jYXN0PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdldChP
cDo6b3Bjb2RlSUQpKTsKKyAgICAgICAgYXV0byogZW5kID0gYml0d2lzZV9jYXN0PHR5cGVuYW1l
IE9wOjpNZXRhZGF0YSo+KGdldEltcGwoT3A6Om9wY29kZUlEICsgMSkpOworICAgICAgICByZXR1
cm4gZW5kIC0gc3RhcnQ7CisgICAgfQorCiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCk7CiAKICAg
ICB2b2lkIHJlZigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiAj
aW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5j
bHVkZSAiUmVwYXRjaC5oIgogCkBAIC0yODUsNiArMjg2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRo
aXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlw
ZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAg
ICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CkBAIC00MzAsNiArNDMyLDIw
NCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNo
ZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRp
YWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvKQoreworICAgIGFjY2Vzc1R5cGUgPSB1
bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZv
LnN0YXJ0OyAvLyBPT1BTOiBkbyB3ZSBuZWVkIGEgc3RhcnQgZm9yIGRhdGEgSUNzPworICAgIGRv
bmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9uOworICAgIHNsb3dQYXRo
U3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOwor
ICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5saW5rZWRT
dHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNldCgpKSk7CisgICAgY29kZU9yaWdpbiA9IENvZGVP
cmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBtX2NvZGVQdHIgPSBz
bG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vz
c1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0
aGUgc2NyYXRjaCByZWdpc3RlciBlaXRoZXIuCisgICAgICAgIHVzZWRSZWdpc3RlcnMuYWRkKEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaCk7CisgICAgfQorCisgICAgc3dpdGNoIChh
Y2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkluQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlJZERpcmVjdE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25IYXNQcml2YXRlTmFtZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0
S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlm
ICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFN
b2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoK
KyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHN3aXRj
aCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90
RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJp
Y3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBp
ZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1
dFByaXZhdGVOYW1lOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZv
LnByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5l
UHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVC
cmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5k
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2
YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0
ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoYWNj
ZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVE
ZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJh
c2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmll
ciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2
YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0
dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxz
ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9m
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgcHJvdG90
eXBlSXNLbm93bk9iamVjdCA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAg
ICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJh
c2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIg
PSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BS
ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRC
eUlkRGlyZWN0OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgor
ICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVn
cy50aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsK
KyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlk
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRo
aXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlk
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lz
dGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGlmIChhY2Nlc3NUeXBl
ID09IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsKQorICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxz
ZTsKKyAgICAgICAgdmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MuYnJhbmRH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyODI2
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJSb3V0
aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgi
CisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCkBAIC01Niw2ICs1Nyw3
IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlWYWwsCiAgICAg
UHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAgICBJbkJ5SWQs
CiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzgwLDggQEAgZW51
bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAorc3Ry
dWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZv
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFsaXpl
RnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBD
aGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0
IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTQ0Nyw2ICs0NTMsMTggQEAgaW5saW5l
IGF1dG8gYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bgogICAgIH0KIH0KIAorc3RydWN0IFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8geworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAg
ICBQdXRLaW5kIHB1dEtpbmQ7CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQ
dXRLaW5kIHsgUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpIH07CisgICAgRUNNQU1vZGUgZWNt
YU1vZGUgeyBFQ01BTW9kZTo6c2xvcHB5KCkgfTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXg7CisgICAgLy8gT09QUzogRG8gd2UgbmVlZCBzdGFydCBmb3IgZGF0YSBJQ3M/CisgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0OyAvLyBUaGlzIGlz
IGVpdGhlciB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJQyBmb3IgKmJ5SWQgY2FjaGVzLiBvciB0
aGUgbG9jYXRpb24gb2YgcGF0Y2hhYmxlIGp1bXAgZm9yICdpbnN0YW5jZW9mJyBjYWNoZXMuCisg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzbG93UGF0aFN0YXJ0TG9j
YXRpb247Cit9OworCiAjZWxzZQogCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCShyZXZp
c2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1w
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB2b2lkIHByaW50U3VwZXJT
YW1wbGVyU3RhdGUoKQogICAgIGRvdWJsZSBwZXJjZW50YWdlID0gMTAwLjAgKiBpbiAvIChpbiAr
IG91dCk7CiAgICAgaWYgKHBlcmNlbnRhZ2UgIT0gcGVyY2VudGFnZSkKICAgICAgICAgcGVyY2Vu
dGFnZSA9IDAuMDsKLSAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBs
ZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIlxuIik7CisgICAgZGF0YUxvZygiUGVyY2VudCB0aW1l
IGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNlbnRhZ2UsICIlXG4iKTsKIH0KIAog
dm9pZCBlbmFibGVTdXBlclNhbXBsZXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODI2MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJVbmxpbmtlZENv
ZGVCbG9jay5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAj
aW5jbHVkZSAiQ2xhc3NJbmZvLmgiCkBAIC03OCw2ICs3OSw4IEBAIFVubGlua2VkQ29kZUJsb2Nr
OjpVbmxpbmtlZENvZGVCbG9jayhWTSYKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2Fy
eShsb2NrZXIpOwogICAgICAgICBtX3JhcmVEYXRhLT5tX3ByaXZhdGVCcmFuZFJlcXVpcmVtZW50
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByaXZhdGVCcmFuZFJlcXVpcmVtZW50OjpOZWVkZWQp
OwogICAgIH0KKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhy
ZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KQEAgLTMxNiw2ICszMTksMzMgQEAgaW50IFVu
bGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2ZmcwogICAgIHJldHVybiBtX291dE9mTGlu
ZUp1bXBUYXJnZXRzLmdldChieXRlY29kZU9mZnNldCk7CiB9CiAKKyNpZiBBU1NFUlRfRU5BQkxF
RAorYm9vbCBVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQoreworICAgIC8vIE9PUFM6IGRvIHdoYXQgQ29kZUJsb2NrIGRvZXMgYW5kIG1ha2Ug
YSBoYXNoIHRhYmxlPworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50
aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkgPT0gdWlk
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KyNlbmRpZgorCitpbnQzMl90IFVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50
MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRPcHRpbWl6ZSgpKSB7CisgICAgY2Fz
ZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKKyAg
ICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7Cisg
ICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7Cisg
ICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0aHJlc2hvbGQ7Cit9
CisKKwogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcygpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWV0YWRhdGEtPmlzRmluYWxpemVkKCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTIgQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJBcnJh
eVByb2ZpbGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAi
Q29kZVR5cGUuaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorI2luY2x1ZGUgIkV4ZWN1
dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCiAjaW5jbHVk
ZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCkBAIC02NCw2ICs2Niw3
IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGluZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0
YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29uc3RhbnQgOiBpbnQzMl90OwogCkBAIC0x
NzUsNiArMTc4LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJy
aWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVn
aXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
Y29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50
UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9j
b25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29u
c3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIxMSwxNSBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJT
Y3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNl
clNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMo
KS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0
cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigpOworICAgICAgICBjb25z
dCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0
aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGlu
c3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9u
ID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsK
KyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQor
ICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlv
bnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0
IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDEwICszNDcsMjEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9tZXRhZGF0YS0+c2l6ZUluQnl0ZXMoKTsKICAgICB9CiAKKyAgICBib29s
IGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKKyAgICB7CisgICAg
ICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUg
bG9vcHMgdGhleSBydW4uCisgICAgICAgIHJldHVybiAhaXNCdWlsdGluRnVuY3Rpb24oKTsKKyAg
ICB9CiAgICAgdm9pZCBhbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKCk7CiAgICAgVW5saW5rZWRWYWx1
ZVByb2ZpbGUmIHVubGlua2VkVmFsdWVQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBt
X3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9CiAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUmIHVubGlu
a2VkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2FycmF5UHJvZmlsZXNb
aW5kZXhdOyB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGJvb2wgaGFzSWRlbnRpZmllcihV
bmlxdWVkU3RyaW5nSW1wbCopOworI2VuZGlmCisKKyAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJ
VChpbnQzMl90IHRocmVzaG9sZCk7CisKIHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9j
ayhWTSYsIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYsIE9wdGlv
blNldDxDb2RlR2VuZXJhdGlvbk1vZGU+KTsKIApAQCAtMzk3LDYgKzQyMSw3IEBAIHByaXZhdGU6
CiAgICAgdW5zaWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAg
Q29uY3VycmVudEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91
bmxpbmtlZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVy
ZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEzLDYgKzQz
OCw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBt
X2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFjZSB0byBz
dG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5
QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0
aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBt
X2V4aXRQcm9maWxlOwpAQCAtNDU4LDYgKzQ4NiwzMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAg
fQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZz
ZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNl
dCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7
CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxl
KCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZFVu
YXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fdW5h
cnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV91bmFyeUFyaXRoUHJvZmlsZXMuYXBw
ZW5kKFVuYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkp
IHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9m
aWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQ
cm9maWxlc1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1
dGVDb3VudGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOyB9CiAKIHByaXZhdGU6
CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjUsNiArNTE3LDcgQEAgcHJpdmF0ZToKICAgICBPdXRP
ZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZlY3RvcjxFeHByZXNzaW9uUmFu
Z2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBt
X2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRWYWx1ZVByb2Zp
bGU+IG1fdmFsdWVQcm9maWxlczsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZEFycmF5UHJvZmls
ZT4gbV9hcnJheVByb2ZpbGVzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAkocmV2aXNp
b24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAgcHVibGlj
OgogICAgIGJvb2wgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0
dXJuIG1fY29kZUJsb2NrLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0KICAg
ICBib29sIGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmhhc0No
ZWNrcG9pbnRzKCk7IH0KICAgICBib29sIGhhc1RhaWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZUJsb2NrLT5oYXNUYWlsQ2FsbHMoKTsgfQorICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRo
UHJvZmlsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKTsg
fQorICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkgeyByZXR1cm4gbV9jb2RlQmxv
Y2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCk7IH0KIAogICAgIC8vIFVwZGF0aW5nIFVubGlua2Vk
Q29kZUJsb2NrLgogICAgIHZvaWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1fY29kZUJsb2NrLT5z
ZXRIYXNDaGVja3BvaW50cygpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZpc2lvbiAyODI2MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxlKTsKICAgICB9CiAKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZzZXRJbk1ldGFkYXRh
VGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9pc0Zp
bmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9IG1faXMzMkJpdCA/
IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRhYmxlMTYoKVtPcGNv
ZGU6Om9wY29kZUlEXTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKHR5
cGVuYW1lIE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9CisK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAgdW5zaWduZWQgbnVtRW50cmll
cygpOwogCkBAIC0xMDcsNiArMTE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zm
c2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90
OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MjYyMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsMTMgKzQ1LDExIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKIAogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNr
ZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNwZWNG
YWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRl
eE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNG
YWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKICAgICB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQotICAg
ICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAg
ICAgIGNsZWFyQnVja2V0cygpOwogICAgIH0KICAgICAKICAgICBFbmNvZGVkSlNWYWx1ZSogc3Bl
Y0ZhaWxCdWNrZXQodW5zaWduZWQgaSkKQEAgLTU5LDYgKzU3LDEyIEBAIHN0cnVjdCBWYWx1ZVBy
b2ZpbGVCYXNlIHsKICAgICAgICAgQVNTRVJUKG51bWJlck9mQnVja2V0cyArIGkgPCB0b3RhbE51
bWJlck9mQnVja2V0cyk7CiAgICAgICAgIHJldHVybiBtX2J1Y2tldHMgKyBudW1iZXJPZkJ1Y2tl
dHMgKyBpOwogICAgIH0KKworICAgIHZvaWQgY2xlYXJCdWNrZXRzKCkKKyAgICB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQorICAg
ICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAg
fQogICAgIAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tldCkg
Y29uc3QKICAgICB7CkBAIC0xMjMsOCArMTI3LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ug
ewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24g
YW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQK
LSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlw
ZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAg
ICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0
czsgKytpKSB7CkBAIC0xMzksNyArMTQxLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ugewog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAg
ICBFbmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAg
U3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE2MSw2ICsxNjMs
NyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBW
YWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czww
PiB7CiAgICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNr
ZXRzPDA+KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQog
fTsKIAogc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1
ZVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTk4LDcgKzE1OTgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFVuYXJ5CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wTm90Pihkc3QsIHNyYyk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICBPcE5lZ2F0ZTo6
ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CisgICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMs
IGRzdCwgc3JjLCB0eXBlLCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfYml0bm90OgogICAgICAgICBlbWl0VW5hcnlPcDxP
cEJpdG5vdD4oZHN0LCBzcmMpOwpAQCAtMTY5NiwxMyArMTY5NiwxMyBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFR5cGVPCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0SW5jKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcEluYzo6ZW1pdCh0aGlz
LCBzcmNEc3QpOworICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFk
ZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVjKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAg
ICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QpOworICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0Rz
dCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNE
c3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNjgyLDcgKzY4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmVn
aXN0ZXJJRCo+CiAgICAgICAgIGVtaXRCaW5hcnlPcChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIHNyYzEsIFJlZ2lzdGVySUQqIHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcykKICAgICAgICAg
ewotICAgICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBl
cyk7CisgICAgICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5
cGVzLCBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICAgICAg
cmV0dXJuIGRzdDsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDYgQEAg
dm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKgogICAgIEFTU0VSVChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwotICAgIEFTU0VSVCgh
Y29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGUo
KS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZU9T
UkVudHJ5VG9ERkcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNp
bmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2lu
Y2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIKQEAgLTExOSwxMCArMTIw
LDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxsSGVscGUKICAgICBpbnQz
Ml90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2ggKGppdC5jb2RlQmxvY2soKS0+aml0VHlwZSgp
KSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJh
c2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChqaXQuY29kZUJsb2NrKCkt
Pmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJh
c2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgotICAgICAgICBjbGlwcGVk
VmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGppdC5j
b2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xpcHBl
ZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJn
ZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMDksMTAgKzMxMCwxNSBAQCB2b2lkIHJlaWZ5SW5s
aW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgICAgICB0cnVlQ2FsbGVyID8gQXNz
ZW1ibHlIZWxwZXJzOjpVc2VFeGlzdGluZ1RhZ1JlZ2lzdGVyQ29udGVudHMgOiBBc3NlbWJseUhl
bHBlcnM6OkNvcHlCYXNlbGluZUNhbGxlZVNhdmVkUmVnaXN0ZXJzRnJvbUJhc2VGcmFtZSwKICAg
ICAgICAgICAgIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDQp
OwogCisgICAgICAgIC8vIE9PUFM6IENvbnNpZGVyIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcg
Zm9yIGJhc2VsaW5lIHBiL21ldGFkYXRhIHJlZ2lzdGVycwogICAgICAgICBpZiAoY2FsbGVySXNM
TEludCkgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CiAgICAgICAgICAgICBq
aXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJh
bWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BS
KSk7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBj
YWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6
UmVnaXN0ZXJzOjpwYkdQUikpOworICAgICAgICB9IGVsc2UgaWYgKHRydWVDYWxsZXIpIHsKKyAg
ICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFz
ZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOworICAgICAgICAgICAgaml0LnN0b3JlUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+
bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGlu
ZUNvZGVCbG9jaywgSklUOjpzX21ldGFkYXRhR1BSKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVy
LT5iYXNlbGluZUpJVENvbnN0YW50UG9vbCgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZy
YW1lLCBiYXNlbGluZUNvZGVCbG9jaywgSklUOjpzX2NvbnN0YW50c0dQUikpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQpAQCAtNDA0LDYg
KzQxMCw5IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKICAgICAgICAganVtcFRhcmdldCA9IGRl
c3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
ICAgICB9IGVsc2UgeworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKSwgSklUOjpzX21ldGFkYXRhR1BS
KTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9j
a0ZvckV4aXQtPmJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkpLCBKSVQ6OnNfY29uc3RhbnRzR1BS
KTsKKwogICAgICAgICBjb2RlQmxvY2tGb3JFeGl0LT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVl
OwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MzAsNiArNzMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwo
Tm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVy
eTo6aW5QYWlyKGNhbGxlZVRhZ0dQUiwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICBz
aHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1
ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCk7CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdz
OyArK2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZh
ckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTg4OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8t
PmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BS
UmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNl
cyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBb
Jl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAg
ICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAg
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JU
YWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzQs
NiArODM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAg
ICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVl
R1BSLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUo
bnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdz
ID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMg
PSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAg
ICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChu
b2RlLCBpICsgMSk7CkBAIC05ODUsNyArOTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nh
c2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBD
YWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAg
ICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVG
b3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcg
KzM5ODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAg
UmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAg
IEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJ
VFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
LCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZH
SklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVz
ZWRSZWdpc3RlcnMsCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlk
R1BSUmVnLCBzdHViSW5mb0dQUik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1i
b2wgPSB0cnVlOwogCkBAIC0xNDc3Myw3ICsxNDc3Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CiAK
LSAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRo
aXNSZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCksIGNhbGxTaXRlSW5kZXgpOworICAg
IG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1Jl
Z3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2Nr
KCkpLCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24g
MjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MzE3LDcgKzQzMTcsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJ
VCkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAg
YXV0byBnZW5lcmF0b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAg
ICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRp
Y09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAg
ICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdp
biwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAg
ICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxp
ZEdQUlJlZywgc3R1YkluZm9HUFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZv
KCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwpAQCAtMTAyODUsNiArMTAyODUsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdz
OyBpIDwgbnVtQWxsb2NhdGVkQXJnczsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc2h1
ZmZsZURhdGEuYXJncy5hcHBlbmQoVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQo
KSkpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVt
UGFzc2VkQXJnczsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVy
cyA9IGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50aWNO
b2RlT3JpZ2luKTsKQEAgLTEwNDQzLDEzICsxMDQ0NCwxNCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292ZXJ5
Rm9ySlNWYWx1ZSgpKTsKIAogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFy
Z3MgPSBudW1BcmdzOworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMg
PSBqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNv
ZGVCbG9jaygpKTsKIAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZv
ID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwg
R1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxM
aW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxp
ZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAg
ICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGpp
dCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAg
IENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OwogICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA3OTIsNyArMTA3OTQsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlz
VGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8t
PmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAg
c2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5m
bzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWls
Q2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMTA3Myw3ICsxMTA3NSw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAg
ICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwg
SW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
cHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24g
MjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgko
d29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVm
IHN0cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252
ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRPZkZ1
bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVzLm1hcCBk
byB8ZmllbGROYW1lfAorICAgICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisgICAgICAg
ICAgICBlbmQuam9pbigiXG4iKQorICAgICAgICBlbmQKKworICAgICAgICBkZWYgY29udmVydEZp
ZWxkcyhwcmVmaXgsIGZpZWxkcywgZmllbGROYW1lcykKICAgICAgICAgICAgIGZpZWxkcy5tYXAg
ZG8gfGZpZWxkLCB0eXBlfAogICAgICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAot
ICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHBy
ZWZpeCArICcgICAgJywgdHlwZSl9XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAg
IiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUs
IGZpZWxkTmFtZXMpfVxuI3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisg
ICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAg
ICAgICAgZmllbGROYW1lcy5wdXNoKGZpZWxkTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgIiN7
cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGROYW1lfTsiCiAgICAgICAgICAgICAgICAgZW5k
CiAgICAgICAgICAgICBlbmQuam9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVs
ZHMgPSBjb252ZXJ0RmllbGRzKCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkTmFt
ZXMgPSBbXQorICAgICAgICBwcmVmaXggPSAiICAgICAgICAiCisgICAgICAgIGZpZWxkcyA9IGNv
bnZlcnRGaWVsZHMocHJlZml4LCBAZmllbGRzLCBmaWVsZE5hbWVzKQorICAgICAgICBmaWVsZHMg
PSBmaWVsZHMgKyAiXG4iICsgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxk
TmFtZXMpCiAKICAgICAgICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAm
JiAobm90IEBpbml0aWFsaXplcnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OTgsOCArNjk4LDEzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2
ZXMKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2Fs
bFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworfQorCit2b2lkIEFzc2VtYmx5
SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0s
IENhbGxMaW5rSW5mbyogaW5mbykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQ
UkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtU
YXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8gY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRpb25Q
dHJUYWc+KGNhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIwLDYgKzE3MjAsNyBAQCBw
dWJsaWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhv
dXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsKICAgICAKICAgICB2b2lk
IG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFj
a0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklU
Q29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGlu
ZUpJVENvZGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKKworI2luY2x1ZGUgIkpJVE1hdGhJ
Qy5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZv
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKSVRBZGRJQyogTWF0aElDSG9sZGVyOjphZGRKSVRB
ZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3Mu
YWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE11bElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElD
KEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQo
YXJpdGhQcm9maWxlKTsgfQorSklUU3ViSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0
aFByb2ZpbGUpOyB9CitKSVROZWdJQyogTWF0aElDSG9sZGVyOjphZGRKSVROZWdJQyhVbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9m
aWxlKTsgfQorCit2b2lkIE1hdGhJQ0hvbGRlcjo6YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYg
b3RoZXIpCit7CisgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICBt
X211bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAgIG1fbmVnSUNzID0gV1RGTW92
ZShvdGhlci5tX25lZ0lDcyk7CisgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNz
KTsKK30KKworQmFzZWxpbmVKSVRDb2RlOjpCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5
UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAg
IDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQpCisgICAgLCBNYXRoSUNIb2xkZXIoKQoreyB9CisKK0Jhc2VsaW5lSklUQ29k
ZTo6fkJhc2VsaW5lSklUQ29kZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8u
aCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworLy9jbGFzcyBKSVRBZGRJQzsKKy8vY2xhc3MgSklUTXVsSUM7CisvL2Ns
YXNzIEpJVFN1YklDOworLy9jbGFzcyBKSVROZWdJQzsKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmls
ZTsKK2NsYXNzIFVuYXJ5QXJpdGhQcm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm87CitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsK
KworY2xhc3MgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhN
YXRoSUNIb2xkZXImIG90aGVyKTsKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJp
dGhQcm9maWxlKik7CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmls
ZSopOworICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAg
ICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworICAgIC8qCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+CisgICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAg
ICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1
cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdl
bmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBh
ZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lD
KHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFt
ZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1
YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFy
eUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0K
KyAgICAqLworCitwcml2YXRlOgorICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFn
PEpJVE11bElDPiBtX211bElDczsKKyAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJh
ZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Cit9OworCitjbGFzcyBKSVRDb25zdGFudFBvb2wgeworcHVi
bGljOgorICAgIHVzaW5nIENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICBlbnVtIGNsYXNzIFR5
cGUgOiB1aW50OF90IHsKKyAgICAgICAgR2xvYmFsT2JqZWN0LAorICAgICAgICBDYWxsTGlua0lu
Zm8sCisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvLAorICAgICAgICBGdW5jdGlvbkRlY2wsCisg
ICAgICAgIEZ1bmN0aW9uRXhwciwKKyAgICB9OworCisgICAgc3RydWN0IFZhbHVlIHsKKyAgICAg
ICAgLy8gT09QUzogTWFrZSB0aGUgcG9pbnRlciBwYWNrZWQuCisgICAgICAgIFR5cGUgdHlwZTsK
KyAgICAgICAgdm9pZCogcGF5bG9hZDsKKyAgICB9OworCisgICAgSklUQ29uc3RhbnRQb29sKCkg
PSBkZWZhdWx0OworICAgIEpJVENvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2wmJikgPSBkZWZh
dWx0OworICAgIEpJVENvbnN0YW50UG9vbCYgb3BlcmF0b3I9KEpJVENvbnN0YW50UG9vbCYmKSA9
IGRlZmF1bHQ7CisKKyAgICBDb25zdGFudCBhZGQoVHlwZSB0eXBlLCB2b2lkKiBwYXlsb2FkID0g
bnVsbHB0cikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNp
emUoKTsKKyAgICAgICAgbV9jb25zdGFudHMuYXBwZW5kKFZhbHVlIHsgdHlwZSwgcGF5bG9hZCB9
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzLnNpemUoKTsgfQorICAgIFZhbHVlIGF0KHNpemVfdCBp
KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpXTsgfQorCitwcml2YXRlOgorICAgIFZlY3Rv
cjxWYWx1ZT4gbV9jb25zdGFudHM7Cit9OworCisKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1
YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBC
YXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJp
ZGU7CisKKyAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAg
ICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOyAvLyBPT1BTOiBtYWtlIHN1
cmUgd2UgdmlzaXQgdGhlc2Ugc29tZWhvdy4gT3IgYXNzZXJ0IHdlIGRvbid0IGhhdmUgdG8sIHNp
bmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KKyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFi
bGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+
IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsK
KyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxh
bi5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFz
ZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3Qg
QmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJh
c2VsaW5lSklUUGxhbjo6ZmluYWxpemUoKQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3Vs
dCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQg
cmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3
aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09E
RUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGls
YXRpb24gZmFpbGVkIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhl
bHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxI
ZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lk
IENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUs
IEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFj
a2V0LCBzY29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJS
ZWcgc2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5k
ZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFt
ZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6
dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFk
b3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tl
dCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAg
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwg
T0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRl
SW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFj
a2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BS
LCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9
IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAgLTcyLDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJz
OjplbnN1cmVTaGFkb3dDaGlja2VuUGEKICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhz
Y3JhdGNoMU5vbkFyZ0dQUikpOwogfQogCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChH
UFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBD
b2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQorewor
ICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7Cisg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJr
ZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNW
YWx1ZSkpKTsKKyAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVD
VF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRy
KGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihj
YWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lkIEND
YWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tl
dCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9j
aywgY2FsbFNpdGVJbmRleCk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywg
R1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5k
ZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwg
dGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lkIEND
YWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVy
bmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRD
b2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAy
ODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVy
YXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0
aGVyZSBpcyByb29tIG9uIHRoZSB0b3Agb2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxs
IGFyZ3VtZW50cy4KICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJS
ZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9p
ZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVl
UmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsK
KworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2
b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBK
U1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9j
aywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRo
aXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgpOworICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
R1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwg
R1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8v
IExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRv
IGluIHNoYWRvd1BhY2tldC4KICAgICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0m
LCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBz
Y3JhdGNoMik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEuY3BwCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsOCArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURh
dGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAg
ICBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykK
K3sKICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZt
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
OwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNp
emUoKTsgKytpKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNh
dmVMb2NhdGlvbnMtPmF0KGkpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDExICs0MywxMyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFy
Z3M7CiAgICAgdW5zaWduZWQgbnVtTG9jYWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBu
dW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsg
VUlOVF9NQVggfTsgLy8gT24gb3VyIG1hY2hpbmUgZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBSZWdpc3Rlck1hcDxWYWx1ZVJlY292ZXJ5PiByZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51
bWJlclRhZ1JlZ2lzdGVyIHsgSW52YWxpZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxl
ZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVj
b3ZlcnkgY2FsbGVlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZy
YW1lU2h1ZmZsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
MTMgKzM4LDEzIEBAIENhbGxGcmFtZVNodWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EKICAg
ICA6IG1faml0KGppdCkKICAgICAsIG1fb2xkRnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJG
cmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1lKGRh
dGEuYXJncy5zaXplKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycywgbnVsbHB0
cikKLSAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVycwotICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29k
ZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUo
Q2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyByb3VuZEFyZ3VtZW50Q291bnRUb0Fs
aWduRnJhbWUoZGF0YS5udW1QYXJhbWV0ZXJzKSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6
ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwogICAgICAgICArIHJvdW5kQXJndW1l
bnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Muc2l6ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0
YShtX2FsaWduZWROZXdGcmFtZVNpemUgLSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCiAgICAgLCBt
X2xvY2tlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX251
bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNzZWRBcmdzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGRh
dGEubnVtUGFyYW1ldGVycykKIHsKICAgICAvLyBXZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFs
IHJlZ2lzdGVycy4uLgogICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVy
OjpwcmVwYXJlRm9yVGFpbENhCiAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQ
YXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGFyZ3VtZW50Q291bnRPSyA9CiAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpCZWxvd09yRXF1YWwsIG1fbmV3RnJhbWVCYXNlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSk7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVycykp
OwogICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGln
bm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyks
IG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKC1zdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOwogICAg
IG1faml0Lm11bDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVy
KSksIG1fbmV3RnJhbWVCYXNlLCBtX25ld0ZyYW1lQmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCShyZXZpc2lvbiAyODI2MjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNCw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVEYXRhIGRhdGE7CiAgICAgICAgIGRhdGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CiAgICAg
ICAgIGRhdGEubnVtUGFzc2VkQXJncyA9IG1fbnVtUGFzc2VkQXJnczsKKyAgICAgICAgZGF0YS5u
dW1QYXJhbWV0ZXJzID0gbV9udW1QYXJhbWV0ZXJzOwogICAgICAgICBkYXRhLmNhbGxlZSA9IGdl
dE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5
KCk7CiAgICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytpKQpAQCAtNzk4LDYgKzc5OSw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBwZXJmb3JtU2FmZVdyaXRlcygpOwogICAgIAogICAgIHVuc2lnbmVk
IG1fbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0
ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KQotICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0lu
dGVyZmFjZUpJVCgmdm0sIG51bGxwdHIpCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJl
dGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5zaXplKCkgOiAwKQogICAgICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03
Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAg
ICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2Jq
ZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpH
bG9iYWxPYmplY3QpOworICAgIG1fcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAg
bV91bmxpbmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0K
IAogSklUOjp+SklUKCkKQEAgLTkwLDggKzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGlt
aXphdGlvbkNoZWNrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGlt
aXplOwotICAgIAotICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBU
cnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkp
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVy
KCkpKSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QwKTsKKyAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1
c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwg
QWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7
CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50
QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMjEgQEAgdm9p
ZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlX
cml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNo
cG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCkKIHsKKyAgICAvLyBPT1BTOiBUYWtlIGEgYm9vbGVh
biBvciBzb21ldGhpbmcgc2F5aW5nIGlmIHdlIGNhbiBiZSBudWxsLgorICAgIGF1dG8gb2sgPSBi
cmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
OChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIG9rLmxpbmsodGhp
cyk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEds
b2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KQotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJSZWFkT25seVdhdGNocG9pbnQoKS0+YWRkcmVz
c09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykgeworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwor
ICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xv
YmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBv
aW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQpAQCAtMTI5
LDcgKzEzOCw3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgIGlm
ICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBicmFu
Y2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2lu
dCgpOwogICAgIG9rLmxpbmsodGhpcyk7CkBAIC0xODEsMjEgKzE5MCw0MSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
IH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcg
cmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
c3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0
KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1
dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgcmVzdWx0KTsKKyAgICBoYXNFeGVj
dXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRh
YmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBlbHNl
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zm
c2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCByZXN1bHQpOworCisgICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSks
IHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKTsKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogewogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29t
cGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIkNvbXBpbGlu
ZyAiLCAqbV9wcm9maWxlZENvZGVCbG9jaywgIlxuIik7CiAgICAgCiAgICAgaml0QXNzZXJ0VGFn
c0luUGxhY2UoKTsKICAgICBqaXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgpOwogICAgIAotICAg
IGF1dG8mIGluc3RydWN0aW9ucyA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKLSAgICB1
bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNp
emUoKTsKKyAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKTsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogCiAgICAgbV9jYWxsTGlua0luZm9JbmRl
eCA9IDA7CiAKLSAgICBWTSYgdm0gPSBtX2NvZGVCbG9jay0+dm0oKTsKICAgICBCeXRlY29kZUlu
ZGV4IHN0YXJ0Qnl0ZWNvZGVJbmRleCgwKTsKKworICAgIC8vIE9PUFM6IE1heWJlIG9ubHkgZG8g
dGhpcyBpZiB3ZSBkaXNhYmxlIHNoYXJpbmcgc29tZWhvdz8KKyAgICAvKgorICAgIFZNJiB2bSA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPnZtKCk7CiAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxvY2s+KHZtKSB8
fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0pKSkgewog
ICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGV4
ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KICAgICAgICAgLy8gVGhpcyBv
cHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhlIExMSW50IGRl
dGVybWluZXMgaXQgd2FudHMgdG8KQEAgLTIzNiw2ICsyNjUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAg
Ki8KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1f
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4LDggKzMwOCw4IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAo
UHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bj
b2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNTI3LDcgKzU1Nyw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJz
dFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29k
ZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJ
bmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUg
Zm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQo
KSk7CkBAIC01NDUsOCArNTc1LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2Vz
KCkKIAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1
dGlvbigpKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
Y29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBj
dHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxs
RnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBb
IiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNm
ciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQpAQCAtNjc0LDU1ICs3MDQsNTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXpl
TWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0
YUdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklU
RGF0YSgpKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpK
SVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQor
Cit2b2lkIEpJVDo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJl
c3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRo
b3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpD
YXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7Cisg
ICAgLy8gT09QUzogTWF5YmUgdGhpcyBzaG91bGQgYmUgZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJs
b2NrPworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9j
ay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZH
OjpDYW5ub3RDb21waWxlOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAg
ICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRF
bWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5D
b21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2Nh
bkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9
IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5j
b2RlVHlwZSgpKSB7Ci0gICAgY2FzZSBHbG9iYWxDb2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToK
LSAgICBjYXNlIEV2YWxDb2RlOgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNC
ZUlubGluZWQgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6
Ci0gICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVz
ZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3Zl
cnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0
aW9uKG1fY29kZUJsb2NrKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2Nr
LT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlm
IChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFi
bGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZV
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29k
ZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0g
Rml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2st
Pm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9j
ay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICBp
ZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMo
KSkKKyAgICAgICAgICAgIG1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1
bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBU
YWJsZXMoKSk7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJs
b2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAK
LSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJv
ZmlsZXIoKSkpKQotICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNz
ZW1ibGVyPihtX2NvZGVCbG9jayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNh
c3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlz
YXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpKSkgeworICAgICAgICAvLyBPT1BTOiBidWls
ZCBhIGRpc2Fzc2VtYmxlciBvZmYgdW5saW5rZWQgY29kZSBibG9jaworICAgICAgICBtX2Rpc2Fz
c2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2Nr
KTsKKyAgICB9CiAgICAgaWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikp
IHsKKyAgICAgICAgLy8gT09QUzogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiB1bmxp
bmtlZCBjb2RlIGJsb2NrCiAgICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAg
ICAgICAgIG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAgICAgICAgbV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAor
ICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNv
ZGVzRm9yKG1fcHJvZmlsZWRDb2RlQmxvY2spLAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpC
YXNlbGluZSkpOwotICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2Rlcygq
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1fY29t
cGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmls
ZXIsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRl
eCgwKSkpOwpAQCAtNzQyLDExICs3NzMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0
aG91dEZpbmFsaXppbgogICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3Vl
KCk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xv
Z3VlKCk7CiAKICAgICBMYWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9w
T2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3Rlcik7CisgICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhG
cmFtZVNpemUgPSAtZnJhbWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFt
ZVRvcE9mZnNldCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3Rh
Y2tPdmVyZmxvdzsKQEAgLTc1NywxNiArNzg5LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW4KICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVl
U2F2ZXMoKTsKKyAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlz
dDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFs
aXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENv
bnN0YW50UG9vbFJlZ2lzdGVycygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZSkgeworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7
Ci0gICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAm
JiAoIW1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVu
dFZhbHVlUHJvZmlsZXMoKSArIEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3Rv
cmFnZSgpKSwgcmVnVDIpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0g
MDsgYXJndW1lbnQgPCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJn
dW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRo
ZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAg
ICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkg
d2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2Nv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBp
ZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9
IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3
NywxMiArODEzLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4K
ICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVn
cy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFn
KSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJn
dW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJl
Z3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1
ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2Nv
ZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklU
KG1fcHJvZmlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNp
emVNYXJrZXIpKQogICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZN
b3ZlKCpzaXplTWFya2VyKSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MzUsMjcgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQog
ICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2Fs
bE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93
U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9w
ZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3Rh
Y2tPdmVyZmxvd0Vycm9yLCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFt
ZXRlcnMgaXMgMSwgd2UgbmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVp
cmVzQXJpdHlGaXh1cCA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBp
ZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJp
dHlGaXh1cCkgeworICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAg
ICAgICBtX2FyaXR5Q2hlY2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMy
KDApLCAmbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBl
bWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
bV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRD
b2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVk
SW1tMzIoMCksIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNC
ZUlubGluZWQoKSkpOwogCiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1l
dGVycykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSkpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19j
YXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09u
RXhjZXB0aW9uKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1
Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRp
b25DYWxsQXJpdHlDaGVjaywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAg
ICAgYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwg
dGhpcyk7CkBAIC04MzksNyArODc4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkp
OwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlu
a0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhp
cywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQp
KTsKKyAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExp
bmtCdWZmZXIoKnRoaXMsIG1fdW5saW5rZWRDb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6
OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4OTcs
OCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAg
ICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hS
ZWNvcmQ6OkNoYXJhY3RlcjogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAg
ICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQg
KyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MDsgaiA8IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNl
dHNbal07CkBAIC04NzEsOCArOTEwLDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJp
bmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAg
ICAgICAgICAgYXV0byBjdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRj
aFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0p
OwogICAgICAgICAgICAgZm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZz
ZXRUYWJsZS52YWx1ZXMoKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxv
Y2F0aW9uLm1fYnJhbmNoT2Zmc2V0OwpAQCAtOTA2LDMyICs5NDUsMzUgQEAgdm9pZCBKSVQ6Omxp
bmsoKQogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNh
bGxlZSk7CiAgICAgfQogCi0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0
Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1
ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRj
aEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZm
ZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7
Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1faW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisgICAgYXV0byBmaW5h
bGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdl
biA6IGdlbmVyYXRvcnMpIHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0
YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1f
c3RhcnQpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9u
ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsK
KyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlv
biA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Ns
b3dQYXRoQmVnaW4pOworICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0
QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X2dldEJ5SWRzV2l0aFRoaXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZp
bmFsaXplSUNzKG1fcHV0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAg
ICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsK
KyAgICBmaW5hbGl6ZUlDcyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNl
T2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKIAogICAgIGZv
ciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAg
ICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwot
ICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0
KSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
Y29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5r
SW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAg
ICAgIGluZm8uZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKLSAgICB7Ci0g
ICAgICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5z
aXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRl
Y29kZU9mZnNldF0uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5h
cHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmlu
YWxpemUoKSk7CisgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAg
Zm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJl
bHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRl
Y29kZU9mZnNldF0uaXNTZXQoKSkKKyAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVu
ZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxK
U0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBp
ZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk4
MiwzNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29t
cGlsYXRpb24pKSB7CisgICAgICAgIC8vIE9PUFM6IG1ha2UgYnl0ZWNvZGUgcHJvZmlsZXIga25v
dyBhYm91dCB1bmxpbmtlZCBDQj8KICAgICAgICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFz
ZWxpbmVGb3JQcm9maWxlcigpKQogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRv
UHJvZmlsZXIobV9jb21waWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3Zt
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9j
b21waWxhdGlvbik7CisgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29t
cGlsYXRpb24obV9wcm9maWxlZENvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAog
ICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAg
ICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+
KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAg
CisgICAgLy8gT09QUzogTWFrZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhh
dCBrbm93cyBhYm91dCBVbmxpbmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJU
YWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5
UHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENv
ZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRh
dGEoKSk7CisgICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29k
ZUJsb2NrV2l0aEpJVFR5cGUobV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRh
Zz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJ
VENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAg
ICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhB
cml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUo
bV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBX
VEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0
dWJJbmZvcyA9IFdURk1vdmUobV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5t
X3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9q
aXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVp
bGRlci5maW5hbGl6ZSgpOworICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7
CisgICAgbV9qaXRDb2RlLT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wp
OwogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklU
IGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1
bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVj
dXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigi
SklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2Rl
QmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwg
cmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25S
ZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1
ICsxMDIxLDIxIEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAog
ICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAg
ICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9j
ayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6
U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAg
ICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxl
cihpKTsKLSAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAg
ICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChC
eXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0
clRhZz4oKTsKLSAgICB9CisgICAgLy8gT09QUzogRG9uJ3QgdGhpbmsgdGhpcyBzaHJpbmsgaXMg
cmVhbGx5IGRvaW5nIGFueXRoaW5nIGFueW1vcmUuIFZlcmlmeS4KKyAgICAvL3sKKyAgICAvLyAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgIC8v
ICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9k
ZTo6TGF0ZVNocmluayk7CisgICAgLy99CiAKKyAgICAvLyBPT1BTOiBtX3BjVG9Db2RlT3JpZ2lu
TWFwIHNob3VsZCBsaXZlIG9uIEJhc2VsaW5lSklUQ29kZSBmb3IgYmFzZWxpbmUgY29kZWJsb2Nr
cy4KICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNl
dFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOworICAgICAg
ICBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNU
b0NvZGVPcmlnaW5NYXApKTsKIAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29k
ZVdvcmRGb3JCYXNlbGluZUpJVC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1f
aml0Q29kZS0+c2l6ZSgpKSAvCi0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxv
Y2stPmluc3RydWN0aW9uc1NpemUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxv
Y2stPnNldEpJVENvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9j
ay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxs
KCkpOwogCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSAr
MTA0NywxMSBAQCBzaXplX3QgSklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlu
a0J1ZmZlci0+c2l6ZSgpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21w
aWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6
cHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKIHsKICAgICBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsK
ICAgICBjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJu
IGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFk
KGNvZGVCbG9jayk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRs
ZXJzKCkKQEAgLTEwNDIsMTggKzEwOTEsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBh
cmF0aW9uQmVmb3JlQwogICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xv
Z0VudHJpZXMoKm1fdm0sICJQcmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQog
Ci11bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCiB7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRSZWdpc3RlcnMoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVt
Q2FsbGVlTG9jYWxzKCkpKSk7CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRG
b3JGcmFtZVBvaW50ZXJPZmZzZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZy
YW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4g
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9
CisKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29k
ZUJsb2NrKQogewogICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lz
dGVyQ291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0
YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQor
CiBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAg
ICAgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRf
SklUX09GRlNFVChhY3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9
PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwg
I2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50Pihh
Y3R1YWwpKTsKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fz
c2VtYmxlci5oIgpAQCAtNDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2lu
Y2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJ
VC5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFw
LmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYu
aD4KQEAgLTE0OSwxNCArMTUxLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBz
dHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0
aW9uOwotICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5r
ZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lk
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJVF9D
TEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgY2xhc3Mg
SklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgICAg
ICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklU
U3R1YkNhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEsNiArMTcz
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3Bs
YWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4K
ICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9
IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBwdWJs
aWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4
IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAg
IH5KSVQoKTsKQEAgLTE3OCwyOCArMTgyLDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBW
TSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lk
IGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwot
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAg
ICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAg
ICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJl
YWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBD
b21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJ
VENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9
IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0s
IGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAg
ICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRl
Q29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMg
dW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7Cisg
ICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2Nr
Kik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayop
OwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNl
Y29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFNlY29uZHMgdG90YWxDb21waWxlVGltZSgpOwogCisgICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxl
R1BSOworICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX2NvbnN0YW50c0dQUiA9IExM
SW50OjpSZWdpc3RlcnM6OnBiR1BSOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5rUGFz
cygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAgICAgIHZv
aWQgbGluaygpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRD
b21waWxhdGlvbkVmZm9ydCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21w
aWxlKENvZGVCbG9jayosIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAvLyBBZGQg
YSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAg
ICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
ZnVuY3Rpb24pCkBAIC0yMjMsNiArMjMyLDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9
CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAg
IHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQs
IEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQs
IEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwg
R1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFt
ZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSwgY29u
c3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnLCBjb25z
dCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Y29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVibGljOgor
ICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcp
OworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcpOwor
ICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJl
Zyk7CisKKyAgICAgICAgdm9pZCBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BS
UmVnIHJlc3VsdCA9IHJlZ1QwKTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1bXAg
anVtcFRvSGFuZGxlcikKICAgICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3Mu
YXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpAQCAtMjU4LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQg
IT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJn
cwogICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYm
IE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAg
LCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAg
ICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bj
b2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3Rf
dmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAg
ICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyop
OworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwg
Q2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29s
IGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29u
c3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4NywxNCAr
MzIyLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIo
VmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmll
ck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0
V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJp
ZXIoR1BSUmVnIG93bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFs
dWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9y
CiAgICAgICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0g
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3Mp
OworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBH
UFJSZWcpOworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2Zp
bGUmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGNvbnN0IEJ5dGVjb2RlJiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKQEAgLTMwNSw4ICszNDEsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9w
OjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CiAgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsK
IAotICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklE
IGNlbGxHUFIsIEFycmF5UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7Ci0gICAgICAg
IHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwg
UmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIs
IFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3Qg
Qnl0ZWNvZGUmLCBwdHJkaWZmX3QsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3Jh
dGNoR1BSKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1v
ZGUgZWNtYU1vZGUoT3ApOwpAQCAtNTkzLDcgKzYzMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYy
NywxNCArNjY0LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNo
aWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRl
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJp
dmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQg
ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBi
YXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsK
LSAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAg
IHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3Ms
IEdQUlJlZyk7CisgICAgICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUs
IEdQUlJlZyBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1
cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjQ2LDcgKzY4Myw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJl
Z2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlm
eVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BS
UmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2lu
dChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFi
bGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0
Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoq
IGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoq
KTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
KTsKQEAgLTY1NSw2ICs2OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVt
aXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rl
cik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAg
ICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBi
b29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wg
aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC02OTYsMjYgKzczNCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0g
R2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9HRVRfRlJP
TV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZl
VHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNM
QVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFy
KiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNl
ZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBl
bWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2ZWRDbG9z
dXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9z
Y29wZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3Vy
ZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNkZWZpbmUg
REVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Nj
b3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNP
TFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJF
X1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUs
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0
ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3Qg
Y2hhciogdGh1bmtOYW1lKTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlH
ZW5lcmF0b3IoVk0mKTsKQEAgLTc2MCwxMCArNzgwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNr
T25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQpOwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAg
ICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKE1ldGFkYXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7Cisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPgorICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJh
dGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVu
Y3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNh
bGw+CkBAIC04MjEsMjAgKzg0MSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0
YXJnZXQub2Zmc2V0KSk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8
T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5
cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9w
ZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFy
Z3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+
KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0
KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAg
ICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFt
ZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jl
c3VsdCwgdm9pZD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBt
ZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4g
YXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4g
YXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENh
bGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1l
dGFkYXRhLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1
bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJn
R1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE5LDI1
ICs5MzksMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAg
ICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAg
ICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRp
bWl6ZWRPcklubGluZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyBy
ZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJl
T3B0aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXpl
ZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9m
IHZhbHVlIHByb2ZpbGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAg
ICAgIC8vIGluIHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9v
bCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAg
ICAgIHZvaWQgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMo
KTsKKworICAgICAgICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBz
dGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29t
cHV0ZUNvbXBpbGVUaW1lcygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8g
Y2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8K
LSAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwg
dGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBz
bG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBH
ZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRB
cml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJl
dGVyOwogCkBAIC05NjQsOSArOTc5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29y
ZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9j
b3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQ
cm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNl
cHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxG
cmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEwMDAsMTEg
KzEwMTIsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1
Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRv
TWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsK
LSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1f
c2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29k
ZTsKKyAgICAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9Owor
ICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIg
fTsKKworICAgICAgICBNYXRoSUNIb2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8QmFz
ZWxpbmVKSVRDb2RlPiBtX2ppdENvZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29u
c3RhbnRQb29sOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2Jq
ZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAg
ICAgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgICAg
IEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAgICBGaXhl
ZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgRml4
ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAg
ICAgICAgc3RydWN0IE5vdEFDb2RlQmxvY2sgeyB9IG1fY29kZUJsb2NrOwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQ
UjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/
IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0zMjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJlZ1QxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDIsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyAr
Mzc1LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0K
IAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTU3Myw3ICs1NzcsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgCiAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6
ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0
ZT4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMq
IG5lZ2F0ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAg
VW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51
bmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJv
ZmlsZUluZGV4KTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVn
SUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIg
dG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2Fu
IGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFy
aXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0
KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJ
QyogYWRkSUMgPSBtX21hdGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2lu
c3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVt
aXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25W
YWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwx
MSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBn
ZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElD
R2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAg
ICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxl
KCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChh
cml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUp
OworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0g
ZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhK
dW1wcyk7CiAKQEAgLTEwMTUsMTAgKzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0
KEpJVEJpbmFyeU1hdGhJQwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgp
KQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAg
ICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFBy
b2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAg
aWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJl
Z3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOwor
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNl
CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBz
KTsKIApAQCAtMTA1NSwxMyArMTA2MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklU
VW5hcnlNYXRoSUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQp
OwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAg
ICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAg
fSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWlj
PihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVu
Y3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMp
KTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBs
YWJlbCgpOwpAQCAtMTEyMCwxMyArMTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUQmluYXJ5TWF0aElDCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewog
ICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkK
LSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pK
TWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFBy
b2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJl
Z1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9u
KSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRo
RW5kID0gbGFiZWwoKTsKQEAgLTExNjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rp
dihjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBh
cml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3Vu
bGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERpdj4oKS5tX3Byb2ZpbGVJbmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3Bl
cmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFu
ZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIx
MSw4ICsxMjIwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJp
dGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3Vu
bGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE11bD4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRo
SUNzLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElD
LmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11
bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwg
b3BlcmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMg
PSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0
aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tX3Byb2ZpbGVJbmRleCk7
CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmls
ZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1
YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24g
MjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bChjb25zdCBPcENhbGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCByZWdUMSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEs
IENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSksIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTksNyArMjU5LDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAgZW1pdExvYWQo
Y2FsbGVlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3Vs
dChieXRlY29kZSk7CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
Y29uc3QgSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgp
OwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdu
bWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDcgKzM0
MSw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdz
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1
ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC00NCw3
ICs0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJ
VDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5j
aGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDE4ICs1
NCwxOCBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3Zh
cmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6
Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAg
ICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
aW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9y
KGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGlj
X2Nhc3Q8aW50PihzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2tw
b2ludCkpOwogCisKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1p
dFByb2ZpbGluZygpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGlu
Z1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZv
cihtZXRhZGF0YSwgY2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsK
KyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFk
YXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9m
QXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJ
RCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyArNzksNyBA
QCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3Mg
fHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlu
a0luZm9Db25zdGFudCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNv
ZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2Rl
Lm1fYXJndW1lbnRzOwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNv
bnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJh
bWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9
IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qx
LCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCBy
ZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJh
cmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lk
KikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEwMywxNiBA
QCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVw
T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxz
ZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwot
ICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVn
VDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0
dXBPcGVyYXRpb24sIHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdU
MCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0
aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFk
ZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1w
IG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMy
KHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsK
KyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIo
QWJvdmUsIHJlZ1QzLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwg
Q2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsK
ICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhp
cycuCkBAIC0xMjcsMTYgKzEzMSwxNiBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0
IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxs
RXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdU
MSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZy
YW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1l
T2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxF
dmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7Ci0KLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxs
RXZhbCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENh
bGxSZXN1bHQoYnl0ZWNvZGUpOwogCkBAIC0xNDgsNyArMTUyLDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAg
Q2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENh
bGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+
c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVy
T2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKQEAgLTE1Niw0MyArMTYwLDQ3IEBAIHZvaWQgSklU
Ojpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBs
b2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsK
LSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
aW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZp
cnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1
dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wg
SklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkK
LXsKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5r
SW5mbyosIHVuc2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KSB7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0
IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxs
JiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50
KQogewotICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVE
YXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVt
YmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxl
RGF0YS5udW1Mb2NhbHMgPQorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0
YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOworICAg
IHNodWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAgIHNodWZm
bGVEYXRhLT5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpOworICAgIHNodWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJl
clRhZ1JlZ2lzdGVyOworICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBieXRl
Y29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIp
OwotICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1
ZmZsZURhdGEtPmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRh
LmFyZ3NbaV0gPQorICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBW
YWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAgICAgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAog
ICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNh
bGxlZSA9Ci0gICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMp
OwotICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7
Ci0gICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZs
ZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMp
OworICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRP
ZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1
bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdU
MCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENh
bGxGcmFtZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7
CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVt
cExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0
aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigq
dGhpcywgKnNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBh
ZGRTbG93Q2FzZShzbG93UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7
CisgICAgaW5mby0+ZnJhbWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAg
ICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApA
QCAtMjE4LDE0ICsyMjYsMjUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgog
ICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4u
CiAgICAgKi8KLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNv
ZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2Fs
bExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVw
RnJhbWUoYnl0ZWNvZGUsIGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8g
PSBudWxscHRyOworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0g
VUlOVF9NQVg7CisgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBp
bmZvID0gbV91bmxpbmtlZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5m
bzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7
CisKKyAgICAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExp
bmtJbmZvSW5kZXgpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxD
b21waWxhdGlvbkluZm8oKSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0g
aW5mb0NvbnN0YW50OworICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5m
b0NvbnN0YW50KTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8g
Ynl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsK
LSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgp
LmJpdHMoKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0
cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRh
Z09mZnNldCkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsg
Ly8gcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAtMjM0LDE2ICsyNTMsMTIgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0
ZWNvZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25J
bmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENh
bGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQot
ICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4
KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9J
bmRleCwgaW5mb0NvbnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50
KGluZm9Db25zdGFudCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsK
LSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhp
cywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAg
ICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIp
OwogICAgICAgICB9KTsKQEAgLTI1MywxMyArMjY4LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BD
YWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8g
c2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJ
bmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBk
b25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9
IGRvbmVMb2NhdGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsK
QEAgLTI3MywyMCArMjg4LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29u
c3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7
CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNs
b3dQYXRoKCptX3ZtLCAqdGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1Bh
dGgoKm1fdm0sICp0aGlzLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24o
SklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcg
KzQxMCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAg
ICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50
LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2Fz
ZS5saW5rKHRoaXMpOwogfQpAQCAtNDE2LDEwICs0NDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0
b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQ
UlJlZyBpdGVyYXRvckdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBK
dW1wTGlzdCBub3RPYmplY3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlcmF0b3JHUFIpKTsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0
ZXJhdG9yR1BSKSk7CkBAIC00MzIsMTkgKzQ1OCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIG1vdmUoaXRlcmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBuZXh0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCku
cmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiAKICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0
aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05v
dE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAg
ICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00NTIsNyArNDc2LDYgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4
dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rp
b24gPSAoWyZdICgpIHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewog
ICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93
OwpAQCAtNDcwLDUwICs0OTMsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbgogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJh
dGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAg
IG9yOChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2Vu
ZXJpYykpLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vl
bk1vZGVzKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1l
dGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7
CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFk
YXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JO
ZXh0PihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludCgpOwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNP
YmplY3QpIGluIHJlZ1QwCiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJS
ZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0g
ICAgLy8gaXRlclJlc3VsdEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkg
aWQgYmVsb3cuCi0gICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2Fs
bFJlc3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRS
ZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBw
cmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0
ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRv
bmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVH
UFIpLCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5k
b25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VU
b05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3Jh
dGNoMSA9IHJlZ1QyOwotICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAg
UmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7Cisg
ICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdp
c3RlcnMpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2Ny
YXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExp
c3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVH
UFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRp
b25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBnbG9iYWxHUFIpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQ
UlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAg
ICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgp
KSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJv
cGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAg
ICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIg
fSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVz
dWx0R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAt
NTI3LDU5ICs1NzcsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29u
cwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JD
aGVja3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BS
UmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFw
cGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlx
dWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwog
ICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0
R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNh
bGxSZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0Jp
dHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92
ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29k
ZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3Qu
bGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9y
UmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFy
Z3VtZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBV
bmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwo
KTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5
SWRJbmRleCsrXTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAot
ICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86
Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBH
UFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVl
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJl
c3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0
LmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtMTU5LDEwICsx
NjAsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0
VHlwZSkKICAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShq
aXRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6
OnVzZURhdGFJQygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4g
T3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBA
IC00NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5m
CiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBl
KQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHVi
SW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1f
c3R1YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUs
IGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNp
dGVJbmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVz
ZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3I6OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93
UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewog
ICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9j
YXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAK
ICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUg
QEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5m
by0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91
dGluZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAg
bV9zdGFydCA9IGppdC5sYWJlbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURh
dGFJQyhtX2ppdFR5cGUpKTsKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5m
b0dQUik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJ
VEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlw
ZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpT
VmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBA
IC0xMTAsNyArMTE4LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRv
cgogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsCiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSkKICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRU
eXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycywgYmFz
ZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQotICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5h
bWUudWlkKCkgPT0gY29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkp
CisgICAgLCBtX2lzTGVuZ3RoQWNjZXNzKGNvZGVCbG9jayAmJiBwcm9wZXJ0eU5hbWUudWlkKCkg
PT0gY29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoYmFzZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuaAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRl
ICJKSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCkBAIC0zOCwxMSAr
MzksMTE0IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNs
YXNzIENhbGxTaXRlSW5kZXg7CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBT
dHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBl
bnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50
OF90OwogCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxC
eUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpy
ZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVn
VDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVF
bnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6cmVnVDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBh
IENvZGVCbG9jayBhbmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHVi
SW5mby4KKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZv
ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cHJvdG8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVj
dCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpy
ZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1
Y3QgQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKK307
CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJl
Z1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9
OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFz
ZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KGJyYW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xh
c3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yKCkgeyB9CkBAIC02MiwxNSArMTY2LDIxIEBAIHB1YmxpYzoKICAgICB2b2lk
IGZpbmFsaXplKAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtC
dWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJl
ZyBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlu
a2VkU3R1YkluZm8geyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9Owor
CiBwcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1f
aml0VHlwZTsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgor
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX2RvbmU7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsgLy8gT09QUzogbWFrZSByZXBvcnRDYWxsIHBhc3Mg
c29tZXRoaW5nIGluIHdlIGNhbiB1c2UgZm9yIHRoZSBub24tQ1RJIHRodW5rcyBidWlsZHMuIAog
fTsKIAogY2xhc3MgSklUQnlJZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvciB7CkBAIC05OCw3ICsyMDgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9i
YXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKK3B1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKQEAgLTEzMiw4ICsyNDIsOCBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdl
bmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAg
IENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVn
cyBiYXNlLAotICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBH
UFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBK
SVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gs
IEVDTUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImKTsKICAgICAKQEAgLTE2MywxMSArMjczLDkgQEAgcHVibGljOgogCiAgICAg
dm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAg
SlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxl
SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTE5MSw4ICsyOTksNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjIsNiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAot
cHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICsz
NDUsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTI3Nyw4ICszNzksNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXIm
IGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAot
cHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSAr
NDAyLDkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fz
c2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1Zh
bHVlUmVncyBtX3Jlc3VsdDsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0Owog
ICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApA
QCAtMzMwLDggKzQyOCw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShy
ZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAg
aWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
dW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykg
PT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIo
KTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lz
dGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29u
c3RhbnQpIHsKKyAgICAgICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBhbGwg
bGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtl
ZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0
dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjphcHBlbmRDYWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0
YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24s
IFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwg
cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBK
U1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0
b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICBy
ZXR1cm4gY2FsbDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVh
bFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZp
cnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhm
dW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1
ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVH
UFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5p
c0tub3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0
Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgs
ICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9p
bnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVs
cy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxp
bmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
SW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRz
KCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRv
IGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkz
LDI5ICszMTgsMzMgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQog
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJl
Z2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVn
cyB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKLQotICAgIC8v
IFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2Ug
Y2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UK
LSAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSAgICBzdG9y
ZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAg
ICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5k
aWYKLX0KKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwo
KSktPmxlbmd0aCgpID09IDE7Cit9CisKKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkK
Ky8veworLy8gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CisvLworLy8gICAgLy8g
V2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBj
YW4ganVzdCBkbyBhIGRpcmVjdAorLy8gICAgLy8gc3RvcmUuCisvLyNpZiBVU0UoSlNWQUxVRTY0
KQorLy8gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Cisv
LyNlbHNlCisvLyAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lz
ZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsK
Ky8vICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBh
eWxvYWQpOworLy8gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0
cy50YWcpOworLy8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBz
dGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJv
ZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7
CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzIzLDQx
ICszNTIsNDIgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4u
LikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjpl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFs
dWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZh
bHVlKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7CisKKyAgICBwdHJkaWZmX3Qgb2Zm
c2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgp
OworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0
KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVn
KQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVn
cyhyZXN1bHRSZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97Cisv
LyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVz
dWx0UmVnKSk7CisvL30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcg
cmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcg
cmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFs
dWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKLWlubGluZSB2b2lkIEpJVDo6
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJy
YXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsK
ICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBhcnJheVByb2ZpbGUtPmFk
ZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRh
KHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmlsZSk7CiAgICAgfQogfQog
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3Rl
cklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0
Y2hHUFIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJl
Z2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQogewotICAgIGlmIChzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwot
ICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYXJyYXlQcm9maWxlR1BSLCBBcnJh
eVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKSk7Ci0gICAgfQorICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVu
U3RydWN0dXJlSUQoKSwgY2VsbEdQUiwgc2NyYXRjaEdQUik7CiB9CiAKIEFMV0FZU19JTkxJTkUg
aW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQpA
QCAtMzgwLDcgKzQxMCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0
ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywg
RlBSZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+
Y29uc3RhbnRSZWdpc3RlcihyZWcpOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGlu
Q29uc3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcp
OwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFs
dWUpOwogICAgIH0gZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFs
dWUpOwpAQCAtNDk2LDcgKzUyNiw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1
YWxSZWdpc3QKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
VmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2Vs
bChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcu
aXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAg
ZWxzZQpAQCAtNTA2LDcgKzUzNiw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
VmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVC
bG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewog
ICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNCwxMSArNTQ0LDYgQEAgaW5saW5lIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29s
IEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICBy
ZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMy
KCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXIm
IG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSkgewpAQCAtNTQ0LDExICs1NjksMTcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhv
ZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwg
c28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50
KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChz
cmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQor
ICAgICAgICBzd2l0Y2ggKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKHNyYykpIHsKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkludGVnZXI6CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3Vi
bGU6IHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5n
ZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAgbW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUo
dmFsdWUpKSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3QpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
NTY2LDExICs1OTcsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJl
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykK
LXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0
b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTU5NSw3ICs2MjEsNyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJl
Z2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykp
CisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTYzNywzMCArNjYzLDcgQEAgQUxXQVlTX0lOTElORSBp
bnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewogICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJl
dHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0
KGluc3RydWN0aW9uKTsKLX0KLQotQUxXQVlTX0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVk
R2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNvZGUpCi17Ci0gICAgdW5zaWduZWQga2V5ID0g
Ynl0ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsgLy8gSGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBh
IGtleQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsK
LSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1
dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAg
IG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAg
IHJldHVybiBnZXRQdXRJbmZvOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFM
V0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJp
bmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50
NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVk
QXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJp
dGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBC
aW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1fY29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5
LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBhcml0aFByb2ZpbGU7CisgICAgcmV0dXJuIG1f
dW5saW5rZWRDb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY4MSw2ICs2ODQsNjEgQEAgQUxXQVlTX0lOTElO
RSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0
KCk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXpl
X3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX21ldGFk
YXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFU
YWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEo
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQor
eworICAgIGxvYWQzMihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2st
Pm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6
ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKHNfbWV0YWRh
dGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRh
YmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
c3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTgodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0
YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZyB2YWx1
ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3Jl
MzIodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0
YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1h
dGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNp
emVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMiht
X3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRl
Y29kZSkgKyBvZmZzZXQpLCBzX21ldGFkYXRhR1BSLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjpsb2FkQ29uc3RhbnQoSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjb25z
dGFudEluZGV4LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX2NvbnN0
YW50c0dQUiwgc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1
bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJl
ZyByZXN1bHQpCit7CisgICAgbG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJl
c3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFu
dChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKKyAgICAvLyBPT1BTOiBNYXliZSBtYWtl
IHRoaXMgbW9yZSBlZmZpY2llbnQ/CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVzdWx0KTsKKyAgICBs
b2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9m
KEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzEsNyArOTMxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJl
Z1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJl
dHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXND
YXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
OwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3Qg
SW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25z
LCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4
LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRh
YmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDI0LDcgKzEwMjQsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAKICAgICAvLyBjcmVh
dGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2gg
c3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dp
dGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dp
dGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1
bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3ICsxMDQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3
aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25z
dCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRj
aFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRj
aFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5r
ZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQAogI2luY2x1ZGUgIlR5cGVQ
cm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKQEAgLTU0LDExICs1NiwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwog
CiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVy
KCkpCi0gICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFs
dWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKLSAgICAgICAgZWxzZQorICAgICAgICAvLyBPT1BTOiBt
b3N0ICJPdGhlciIgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50cyBjYW4ganVzdCBi
ZSBncmFiYmVkIGZyb20gdGhlIFVubGlua2VkQ29kZUJsb2NrLiBJdCdzIGp1c3QKKyAgICAgICAg
Ly8gYSBjb3VwbGUgdHlwZXMgdGhhdCBjYW4ndC4gQ3JlYXRlIGFuIGFic3RyYWN0aW9uIGZvciB0
aGF0LgorCisgICAgICAgIHN3aXRjaCAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkgeworICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkRvdWJsZTogeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBzdG9yZTY0KEltbTY0KEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tD
b25zdGFudChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NG
b3IoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTg3LDM3ICsxMDAsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNv
bnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxv
Y2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxv
Y2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAg
UmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJl
ZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lz
dGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CiAKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7
Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpj
b25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlh
bGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsK
LSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1l
dGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2Fk
UHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9m
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZz
ZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVSZWcpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0
QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxs
b2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2Vz
KTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CisgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAg
IFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0
YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7
CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAm
dm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogfQogCkBAIC0xMzEsNyArMTQyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVz
X2hhc19pbnN0YW5jZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1
ZSwgcmVnVDApOwogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9s
Lmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9
IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5j
ZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNU
X09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2Z1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJv
bEZ1bmN0aW9uKSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rvciwg
cmVnVDApOwogCkBAIC0xNTQsMzAgKzE2NiwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsK
IAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJl
c3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNl
VmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhl
biB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
Ojp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3RvR1BSID0gQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BSKTsKICAgICAKICAgICAvLyBDaGVjayB0aGF0
IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tl
ZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Rv
R1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVn
VDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUNSwKLSAg
ICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICByZXN1bHRHUFIsCisgICAgICAgIHZhbHVl
R1BSLAorICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgc3R1YkluZm9HUFIsCisgICAgICAgIEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDEsIEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6c2NyYXRjaDIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAorCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQgKzIxMiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVz
cyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19h
c3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIp
OworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9
PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9m
T3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTI0MCw3ICsyNTksNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAKICAgICBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApA
QCAtMzc0LDcgKzM5Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlv
bioKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwotICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQo
KTsKICNlbHNlCkBAIC0zODMsOSArNDAyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0
IEluc3RydWN0aW9uKgogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0
b3IoVk0mIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9w
X3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJikKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAg
ICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0Ojps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAgLTQxMSw3ICs0MzAsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAKICAgICBpZiAoZHN0ICE9
IHNyYykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNDM0LDkgKzQ1MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9w
ZXJ0eV9rZXkoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVu
Y3Rpb25OYW1lLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC00NjUsOCArNDg0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25z
dCBJbnN0cnVjdGkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIg
PSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwog
ICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRy
dWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSks
IHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5j
aElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2Jh
bE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCku
Z2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsK
QEAgLTQ4MCw3ICs1MDEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOwpAQCAtNTE5LDcgKzU0MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNv
bnN0IEluc3RydWMKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVtcCBpc05v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1Qy
LCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1w
KGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2Jq
ZWN0SXNGb3JlaWduID0ganVtcCgpOwogCkBAIC01NDMsNyArNTY0LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydQogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxs
IGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVy
ZS4KICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKSwgdGFyZ2V0KTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIs
IHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAo
YnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0g
anVtcCgpOwogCkBAIC01ODIsMTUgKzYwMywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVm
aW5lZF9vcl9udWxsKGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0
ZWNvZGUubV92YWx1ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRP
cGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVjaWFsUG9p
bnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFs
ID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5h
c0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1
bXBlZCk7CisgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50
ZXIsIHJlZ1QxKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1
YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSks
IGJ5dGVjb2RlLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwogfQpAQCAt
NjI1LDggKzY0NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlv
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4
cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFk
ZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIp
LCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIo
dmFsdWVJc1RydXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBh
ZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDAsNyAr
NjYxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8v
IGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcg
YXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1h
eSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGlj
aCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAg
LTY5NSw3ICs3MTYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlv
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDEpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBy
ZWdUMSwgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxzZQog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CkBA
IC03MTEsNyArNzMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rp
bwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgdGhyb3duVmFsdWVHUFIgPSBhcmd1bWVudEdQUjE7CkBAIC03MjAsNyArNzQyLDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogCiAjaWYgTlVNQkVSX09G
X0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgaml0LmxvYWRQdHIoJnZtLnRvcEVudHJ5
RnJhbWUsIGFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVySW1wbChhcmd1bWVudEdQUjApOworICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihhcmd1bWVudEdQUjApOwogI2VuZGlm
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsK
QEAgLTkwOCw3ICs5MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0
IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJp
Y3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdU
MSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTE4LDcgKzk0MSw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTMxLDcgKzk1
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKICAgICAKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZS
ZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsK
IH0KQEAgLTk1MSw3ICs5NzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0
IEluc3RyCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKICAgICBp
c0JpZ0ludC5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk3OCw3ICsxMDAyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTkzLDcgKzEwMTcsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQ2NChBZGRy
ZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lz
dGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1Qz
LCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKworICAgIC8vIE9PUFM6IFRoaXMgaXNuJ3QgZWxlZ2FudC4gV2h5IGFyZW4ndCB0aGV5
IGluIHRoZSBjYWxsZWUgc2F2ZSBidWZmZXIuIEkgZ3Vlc3MgYmVjYXVzZSB3ZSBjYW4gT1NSIGV4
aXQgaGVyZT8KKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lz
dGVycygpOwogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0
cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0Nh
dGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7
CkBAIC0xMDExLDIzICsxMDM4LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IElu
c3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8g
dGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBi
dWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKLSAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0
UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7
Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5k
ZXguYXNCaXRzKCkpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
blRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRl
eC5hc0JpdHMoKSk7CiAgICAgYXV0byBza2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8s
IHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9T
UkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5n
KCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1Qw
KTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQs
IHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxW
YWx1ZVByb2ZpbGUmPihwcm9maWxlKSwgcmVncyk7Ci0gICAgICAgIH0pOwotICAgIH0KICNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIApAQCAtMTA1Myw4ICsxMDY4LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1
dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxl
IGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0g
ICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVz
W3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUlu
ZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRp
YXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAK
QEAgLTEwODEsMTMgKzEwOTYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29u
c3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0
aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25z
LCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dp
dGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRl
ZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUu
ZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
Q2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIApAQCAtMTA5OSwyMCArMTExNSwyMiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVs
dE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVD
VElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdX
aXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5
VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgpOwogICAgIGZhckp1
bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOwotICAgIGxv
YWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOworICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVl
c3RzKCkpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0
MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgp
LCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVi
dWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwpAQCAtMTEzMyw3ICsxMTUxLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
Mik7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVt
cCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTQ4LDcgKzExNjYsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE2Niw3ICsxMTgzLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmVxX251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAg
ICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3
YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTg4LDEyICsxMjA1LDE0IEBAIHZvaWQgSklU
OjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBDVEkg
ZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdp
c3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xv
bmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUu
Ci0gICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKKyAgICBzaXplX3Qg
Y291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1WYXJzKCk7CiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCiAg
ICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCi0g
ICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CisgICAgCisgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0V3JpdGVC
YXJyaWVyKHJlZ1QwKTsKIAogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAjZWxz
ZQpAQCAtMTIxMiw3ICsxMjMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5z
dHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZt
KQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUo
WDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTEzMTAsMjMgKzEz
MjksMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlz
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hl
ZFN0cnVjdHVyZUlEOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNE
c3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkp
OwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVj
dHVyZUlEKCksIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1f
Y2FsbGVlOwotICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAm
bWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdU
MDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBy
ZXN1bHRSZWcgPSByZWdUMDsKQEAgLTEzNDIsNyArMTM1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcs
IEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAt
IEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zm
c2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVn
KTsKIAotICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcENyZWF0ZVRoaXM6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkNhY2hlZENhbGxlZSgpLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNT
ZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywg
VHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlv
blJlZykpOwogICAgIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIs
NyArMTM4Nyw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFu
KHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0K
QEAgLTEzODIsNyArMTM5OCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5z
dHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAg
eG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZh
bHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyAr
MTQxMSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0x
NDA0LDcgKzE0MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVj
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAK
QEAgLTE0MTgsMTAgKzE0MzcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKAogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29u
c3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29k
ZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50
R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1
bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTQzMCw3ICsxNDUwLDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6
emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJs
eVJldHVybigpKSkgeworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21J
bmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fdW5saW5rZWRDb2RlQmxvY2stPmxvb3BIaW50
c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJf
dCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwog
ICAgICAgICBsb2FkUHRyKHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVy
biA9IGJyYW5jaFB0cihCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFybHlS
ZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTE0NDAsNyArMTQ2MCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICNlbHNlCiAgICAgICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKLSAgICAgICAgbW92ZVZhbHVlKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVz
dWx0UmVncy5ncHIoKSk7CiAgICAgICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAg
ICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoKTsKQEAgLTE0NTMsOCArMTQ3Myw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGlu
dChjb25zdCBJbnN0cnUKIAogICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6
IAogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaEFkZDMyKFBvc2l0aXZlT3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0
aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCi0gICAgICAgICAgICBBYnNvbHV0ZUFkZHJl
c3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAg
ICAgICBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIo
KSkpKTsKICAgICB9CiB9CiAKQEAgLTE1MDksNyArMTUzMCw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFyZ3VtZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTIyLDcgKzE1
NDQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAjaWYgRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAg
ICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMTU2NCwzNCArMTU4NiwzNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAg
PSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4
cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVn
RXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xv
YmFsR1BSID0gYXJndW1lbnRHUFIwOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8
UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAg
IGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAg
ZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVj
b2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7Cisg
ICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwogCiAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5j
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxz
ZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxz
ZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVj
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAg
IEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwg
JnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTYyMSwyMyArMTY0NSwyNCBAQCB2b2lkIEpJVDo6
ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxv
YWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29k
ZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCiAKLSAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0
aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwciwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25z
dGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9w
OjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24s
IGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0
aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBp
ZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlv
bik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAg
ICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjY0LDI5ICsxNjg5LDMwIEBAIHZvaWQg
SklUOjplbWl0X29wX25ld19hc3luY19nZW5lcmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1f
YXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFs
dWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IGFyZ3VtZW50R1BSMik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVj
b2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxl
KCksIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBzaXplKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVu
Z3RoOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXpl
SW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNp
emVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAp
OworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJh
eVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ3Vt
ZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAjZWxzZQorICAgIG1hdGVyaWFs
aXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKICAgICBlbWl0
TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlv
blByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFu
ZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
ICNlbmRpZgogfQogCkBAIC0xNjk0LDggKzE3MjAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKGNvCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJs
ZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB0
eXBlIHByb2ZpbGVyIGlzIGVuYWJsZWQuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVk
VHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAK
QEAgLTE3NzcsMjAgKzE4MDQsMjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdH
UFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0No
aWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBH
UFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJn
dW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5z
dXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVn
LCBzY3JhdGNoMlJlZyk7CisgICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25B
cmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2Vu
UGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsK
KyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwg
cmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNW
YWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNr
ZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJu
IG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdXNpbmcgdGhlIGNvbnRyb2wgZmxv
dyBwcm9maWxlci4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNC
bG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7
CkBAIC0xODYwLDcgKzE4OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29u
c3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwogCiAgICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE4ODYsNyArMTkxNyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMp
OwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjgy
NjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgog
I2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlm
aWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJD
b21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVk
ZSAiREZHT1NSRW50cnkuaCIKQEAgLTI4NTUsNyArMjg1Niw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29k
ZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQgPSBsaW5rZWRU
YWJsZS5tX2N0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIApAQCAtMjg4MCw3ICsyODgx
LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFs
dWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5i
YXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2Nr
LT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAg
IHZvaWQqIHJlc3VsdDsKICAgICBpZiAoa2V5LmlzSW50MzIoKSkKQEAgLTI5MDMsNyArMjkwNCw3
IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHZvaWQqIHJlc3VsdDsK
LSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJp
bmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CiAKICAgICBpZiAoa2V5LmlzU3RyaW5nKCkpIHsKICAgICAgICAgU3RyaW5n
SW1wbCogdmFsdWUgPSBhc1N0cmluZyhrZXkpLT52YWx1ZShnbG9iYWxPYmplY3QpLmltcGwoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDcg
KzM0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlW
YWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlk
R1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlz
aW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5MiArNDksMTAzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAK
LSAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6Omdl
dEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRp
b25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CisgICAgICAgIGF1dG8g
bm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRj
aEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAK
LSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnJlc3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBy
ZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9w
ZXJ0eSkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1
ZTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBh
ZGRTbG93Q2FzZSgpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgICAgIC8vIE9P
UFMuIFN1cHBvcnQgdGhpcworICAgICAgICAvL2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9w
ZXJ0eSkpCisgICAgICAgIC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0
cnVlOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRS
ZWdzKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIH0KLQogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlW
YWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAgICBp
ZiAoIWhhc0FueVNsb3dDYXNlcyhpdGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOworICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgr
K107CiAKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwg
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEp
OworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgYXJndW1lbnRHUFIz
KTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBhcmd1bWVu
dEdQUjQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBl
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
T2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Cisg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Cisg
ICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRl
eCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3Vt
ZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9
IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIg
PT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxl
KSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRp
bWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkg
dXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9
PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFs
dWVHUFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsxNjAsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMg
YXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUg
ZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBm
dW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3Qg
bWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0x
NjAsOCArMTcxLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVy
dHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMTg3LDM0ICsxOTgsNDAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnJlc3VsdCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVO
YW1lOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJU
KGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkg
KzI0MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9w
dGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFy
Z3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYg
KzI1NCwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcx
IGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yNjQsNyArMjc3LDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25z
IGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJl
bG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAg
Ly8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAwLDIxICszMTMs
MjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6
YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRH
UFIpOwotCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwog
CiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJy
YW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQs
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJp
dmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNz
ZXMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0
IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3Rl
cnMuCkBAIC0zMjQsMTcgKzM0NCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9i
cmFuZChjb25zCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewor
ICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0g
bV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQ
Uik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2
YXRlQnJhbmQ+KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFy
Z3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQ
cml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTM0NCwyNCArMzY5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFu
ZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7
IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJh
bmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBh
cmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1l
PEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXpl
KT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFBy
aXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZh
dGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMTkgKzM4OSwyOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0
ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdp
c3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIp
OworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAg
ICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJh
bmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZh
dGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2Vz
LmFwcGVuZChnZW4pOwogfQogCkBAIC0zOTQsOSArNDIyLDExIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFu
ZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0MzYsMTggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJp
dmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fz
c2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0
czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlw
ZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NTksNDIgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
ZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChi
eXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCks
IHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBy
ZWdUMywgcmVnVDQpOwotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0g
ICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJv
ZmlsZUdQUiwgc3R1YkluZm9HUFIpOworICAgIC8vIE9PUFM6CisgICAgLy9pZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgIC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0
eUlzSW50MzIgPSB0cnVlOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBzdGQ6Omlz
X3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5k
OjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUp
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAg
ICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlm
IGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MTAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9k
ZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAg
IGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAg
ICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2Rl
Lm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTMxLDE2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGgg
YW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVj
dCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVj
bWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0
KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAgICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0QnlWYWw+KCksIE9wUHV0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBhcmd1bWVudEdQUjUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3Qg
PyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0
aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21h
TW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJh
dGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUxMiw3ICs1NTQsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9u
ID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU2
NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUzMywxOCArNTc1LDI0IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9u
cyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAog
ICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJl
Z1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnBy
b2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1Owor
ICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUp
OworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJU
KCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAgfQorCiAKICAgICBqaXQuc3RvcmUzMihieXRl
Y29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpAQCAtNTcwLDIwICs2MTgsMzEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworCisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUs
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBz
dHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElD
IGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2Ug
aXMgY2VsbC4KQEAgLTU5NCw4ICs2NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0
ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKLSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1
dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0
cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNb
bV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02MDMsMTMgKzY2MSwxNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5
VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNs
b2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHBy
b3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0
cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJp
dmF0ZU5hbWU+KCk7CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUu
bV9wdXRLaW5kOworCisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQpOworICAgIGF1dG8gb3Bl
cmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2
YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1p
emU7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50c0dQUjMsIGFyZ3VtZW50R1BS
NCwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CkBAIC02MjIsMTggKzY4NCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZShjCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0
OwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9H
UFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0
MywxNCArNjk5LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0
IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZH
L0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0
cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0g
ICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVy
bkFkZHJlc3MoKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3MzYsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRH
ZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlv
bnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzc0Niw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNl
dHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
b3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc1Nyw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90
IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVn
VDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNzA5LDcgKzc2OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdU
Mik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0
ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1
dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzc5LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWws
IHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC03MjcsMjMgKzc4OCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3Qg
SW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxC
eUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxC
eUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFz
ZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNo
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRl
QnlJRDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwog
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdy
aXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxs
LgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1
ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSAr
ODMwLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODU0LDE5
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJv
cGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFs
dWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIg
PT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpA
QCAtODA4LDcgKzg3Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKQEAgLTg0NSwyMiArOTEzLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworCiAgICAg
SklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c2Ny
YXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Cisg
ICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAg
IC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBz
aW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3Jp
dGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwu
CkBAIC04ODMsOSArOTYyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNv
bnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0
ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CkBAIC04OTksMjQgKzk4MCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3Zh
bChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BS
MzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENh
bGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRl
bGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChv
cGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMDIsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBA
IC05NjEsMjIgKzEwMzcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25z
dCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
cmVnVDApOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNl
R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcp
OwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1Yklu
Zm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNzEs
MTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlk
T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQ
UjIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtMTAwMywyNiArMTA5MSwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dHJ5X2dldF9ieV9pZChjb25zCiAgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQ
UjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02
NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwog
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5
SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENh
bGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRy
eUdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVH
UFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTEwMzAsMjIgKzExMTIsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChj
b25zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBi
YXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZS
ZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3Vs
dFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3Mp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQs
MTYgKzExNDUsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRE
aXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3Vt
ZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRp
b25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTY2
LDYxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNl
Ci0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVu
dCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwg
QWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9t
b2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAg
ICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihO
b3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpB
cnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRh
ZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJv
ZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2Rl
LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6
OkdldEJ5SWQpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7Ci19CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRl
Y29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRo
aXNWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7Ci0KLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0
UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwog
fQogCkBAIC0xMTU4LDE2ICsxMjI5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNTAs
NTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0g
YXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBhcmd1bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJu
VmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZh
bHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZh
bHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRo
aXNWYWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRC
eUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0
KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4p
OworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQpAQCAtMTIwNiw3ICsxMzEwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0MSwxNiArMTM0NSwxOSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwg
b3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBy
ZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1p
emUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEyNjAsMjggKzEzNjcsMjIgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGlu
IHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1Zh
bHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwot
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhU
aGlzT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRp
b25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQpAQCAtMTI5MSw3ICsxMzkyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTMyOSwyMyArMTQzMCwzNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0Rp
cmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1
Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAg
Ly8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdp
c3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0
aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5j
ZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVn
VDAsIHZhbHVlVlJlZywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OnNjcmF0Y2g7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VW
UmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFs
dWVWUmVnLCB2YWx1ZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdU
MiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBl
Y21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1
dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5w
dXRLaW5kID0gZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0Owor
ICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAogICAgIC8vIElDIGNh
biB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMg
Y2VsbC4KQEAgLTEzNTksMTQgKzE0NzQsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlv
bigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOwor
ICAgIGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwpAQCAtMTM3NiwyNSArMTQ5NSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lk
KGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1l
bnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2
YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50
R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FS
TTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHBy
b3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigp
OwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rp
b24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xNDA0LDcgKzE1
MTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNz
KCk7CkBAIC0xNDQxLDIwICsxNTU0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0
ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAK
ICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5C
eUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYz
LDE0ICsxNTg3LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BS
Mik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTE0ODAsMjggKzE2MDcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5
X2lkKGNvbnN0IElucwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93
X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3
ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGlj
YXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVj
bHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxMCwyNSArMTYzMSwzMyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2Fz
ZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUzNywxNSArMTY2NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9p
bkJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1l
dGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NTYsNTkgKzE2ODgsNzAgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBh
cmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0
KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xv
d19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0
IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBs
aWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwg
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1p
emU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwg
QWNjZXNzVHlwZSB0eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQ
Uik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVT
bG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0
SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2Us
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIEFTU0VS
VCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlw
ZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAgVU5VU0VE
X1BBUkFNKHByb3BlcnR5KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0gQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJh
bmQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlW
YWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5
cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFt
ZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNh
bGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlv
bkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6
ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVu
dEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2
MSwyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9u
SGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1l
T3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0
eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9u
R2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1By
aXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
dHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVO
YW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxNzg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwot
ICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNv
ZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDE5ICsxODAzLDIyIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0
LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhi
eXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNo
ZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVj
dGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BS
KQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0
YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxP
YmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVD
VF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNj
cmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRj
aEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJl
Z1QwKTsKQEAgLTE2ODgsNiArMTgyOCw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUo
VmlydHVhbFJlZ2kKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKQEAgLTE3MDEsNyArMTg0Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpj
b25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwor
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSwgcmVnVDEpOwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2ds
b2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwog
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBA
IC0xNzE1LDcgKzE4NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFu
dFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50
U2NvcGUpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3OTQsODcgKzE5MzUsMTA1IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBS
ZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5
cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4
KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlv
bik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRl
Y29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJl
ZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSBy
ZWdUNjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7Cisg
ICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRl
ZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlw
ZS4KIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsK
KyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2Fk
UHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNl
dE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRy
ZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJs
ZSgmbWV0YWRhdGEpOworICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlu
a2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7
CisKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAg
ICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9z
dXJlVmFyLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhciIpOworICAgICAg
ICB9OworCisgICAgICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5l
cmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAi
QmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MiKTsKKyAgICAgICAgfTsKIAotI2RlZmluZSBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNv
bHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAg
ICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAg
ICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCisgICAg
ICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAg
ICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgc3Rk
OjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgZ2VuZXJpYyIpOwogICAgICAg
ICB9OwotI3VuZGVmIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SCisKKyAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNj
b3BlR1BSID0gcmVnVDY7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSByZWdUNTsKIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29w
ZUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFk
YXRhR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Z2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAg
ICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29k
ZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYg
KHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
CisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2
bS5nZXRDVElTdHViKGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0
TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5r
KFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNo
YXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVu
Y3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNl
CiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVj
dCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERG
Ry9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVj
dHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgor
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZl
U2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdU
NzsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8v
IGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1
OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHByIEdQ
UlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVP
ZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2Nv
cGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFn
UmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBt
ZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJl
Z1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8g
ZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgeworICAgIGF1dG8gZG9W
YXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgaWYgKCFuZWVk
c1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGds
b2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmpl
Y3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAg
ICAgIH0KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09G
RlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMp
OwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywg
V2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBy
ZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVz
cyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElz
SW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0g
WyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVH
UFIsIHJlZ1QwKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBk
b1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgaml0
Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJl
Z1QxKTsKIAotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25l
ID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5s
YWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1Qx
KTsKICAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3Bl
OjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4
dCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDEpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAg
IH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAg
ICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
KSB7CkBAIC0xODgyLDEyICsyMDQxLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxC
aW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9m
ZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAg
IG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsK
KyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhn
bG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5k
aW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubW92ZShnbG9iYWxPYmplY3RH
UFIsIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEg
KzIwNTYsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAg
ICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFu
ZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBm
b3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0g
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUg
PT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwg
cmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xv
YmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpA
QCAtMTkwOSw3ICsyMDY4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5h
bWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkx
OSw4MyArMjA3OCw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVU
eXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENv
ZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5
cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9y
ZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDApOwog
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OworICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkg
eworICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7CisgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAg
ICAgICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBl
bWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxW
YXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBz
a2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7
CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZt
KCkuZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0
Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
dGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1Io
cmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAg
ICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29w
ZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklU
IGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlw
ZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SKQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Nj
b3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRo
aXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBi
ZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2Jh
bE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAg
IC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2Jh
bE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBU
aGUgZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUo
WDg2XzY0KQpAQCAtMjA2NSw2ICsyMTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFy
KFZpcnR1YWxSZWdpcwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKQEAgLTIxNzgsNyArMjMwMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdU
MCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
QEAgLTIxODYsOSArMjMwOCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29w
ZShjb24KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSht
ZXRhZGF0YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogfQogCiAjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAg
LTIxOTYsNDEgKzIzMTgsNTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KGNvbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29w
ZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5y
ZXNvbHZlVHlwZSgpOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5
cGUoKTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5
dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBhdXRvIGNsb3N1cmVW
YXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRl
T3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJv
bV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVy
biBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIp
OworICAgIH07CisKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAo
Vk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVu
ayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMi
KTsKKyAgICB9OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3Owog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0g
R2xvYmFsVmFyKSB7Ci0gICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0
VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdU
MCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9j
b2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZf
dCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5F
UkFUT1IocmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVy
YXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9
IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5F
UkFUT1IpCi0gICAgICAgIH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBD
bG9zdXJlVmFyKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJh
dG9yKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBj
b2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAg
IGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0m
IHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciog
dGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlv
biBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCkBAIC0yMjM5LDk5ICsy
MzcwLDg4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICB1
c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQ
UiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2Nv
cGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVn
VDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBy
ZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExp
c3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZd
IChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsKLSAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNl
dCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwot
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgYXV0byBlbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSKSB7CisgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIs
IHJlZ1QwKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8s
IHJlZ1QxKSk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0
LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSkpOwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJ
bmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAg
ICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkp
LCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNz
KHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJ
bnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9m
ZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAg
ICAgCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFu
ZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9w
ZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAg
YXV0byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5k
LCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3Bl
cmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KICAgICBh
dXRvIGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVy
YW5kR1BSKSB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3Rl
cikpOwotICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAg
ICAgICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJl
c3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkp
LCByZWdUMCk7CisgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRH
UFIpOworICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zm
c2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9
IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFu
ZCkgeworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7
CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBj
b3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBh
bnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3Bl
IGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1p
dExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292
ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55
dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBo
YW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdCA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSBy
ZWdUMTsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0g
ICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBK
dW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAg
ICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsK
KyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAg
ICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3Bl
cmFuZCgpKSwgb2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAg
ICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1
YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAg
ICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAg
ICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAg
aXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRy
dXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5h
Ym9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAg
IGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7
Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9Q
dHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNo
LCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAg
ICAgICAgaml0Lm5lZzMyKG9mZnNldCk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9Q
dHIob2Zmc2V0LCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2Ny
YXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdU
MCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAg
aWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAg
ICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAg
ICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fb3BlcmFuZCkpLCByZWdUMyk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgp
KSwgcmVnVDMpOwogICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1Qz
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xv
c3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQxLDg2ICsyNDYxLDYzIEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAg
IH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0g
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGlu
ayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxM
ZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNv
bHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwot
ICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAg
ICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBN
ZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5hbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVz
b2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsK
LSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRo
aXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
VmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90
R2xvYmFsVmFyLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0
Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0
KTsKKworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OworICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsK
KyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwog
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAg
ICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
aXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0g
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwor
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7
CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIHNsb3dDYXNl
LmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJl
c29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGlu
aygmaml0KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVy
T2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIs
IE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0
KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkg
KyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogCi0gICAgcmV0KCk7Cisg
ICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFM
X1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2Fz
ZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRv
cik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xv
d0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRo
dW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBK
SVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfR0VUX0ZST01f
U0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJh
dG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNl
ZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsg
fTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRl
T3BHZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9z
Y29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVG
SU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUg
dGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBM
TEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6
ZWJwKTsKQEAgLTI0NDksNyArMjU0Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICBDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRh
Zyk7CiAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0
aW9uQ2hlY2sodm0pOwogCi0gICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6
bnVtYmVyVGFnUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkp
OworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lz
dGVyLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9m
Rmlyc3RCdWNrZXQoKSkpOwogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1i
ZXJUYWcpLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2XzY0KQpA
QCAtMjQ3MSw4NiArMjU2OCw3OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklU
OjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRy
KHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
YXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2lu
dFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihh
ZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNl
dCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsK
LX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVj
b2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2Rl
KTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUu
c2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkg
eworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAg
IHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAg
ICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsg
Ly8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNh
Y2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlv
bmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rp
b24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24g
c2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9i
YWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFu
ZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0
cnVjdHVyZSgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCByZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8s
IHJlZ1QxKSk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKSk7CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QyKTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQp
PihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7Cisg
ICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsK
IAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdU
MSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7
CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIs
IEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNl
dCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdU
MSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7CisgICAgICAgICAgICAvLyBPT1BTOiB3b3VsZCBiZSBuaWNlIHRvIGhhdmUg
YSB2ZXJzaW9uIHRoYXQgdG9vayBHUFJSZWdzIGluc3RlYWQgb2YgVlJzCisgICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAg
IGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAg
ICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9k
ZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKyAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBl
LCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAg
ICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlh
bGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewog
ICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNl
IHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNh
bGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5t
X3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQ
dXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZh
bHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworCisgICAgICAg
ICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdE5vdGlm
eVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3Mo
cmVnVDApKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEg
dmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIHZhbHVlLgorICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJl
VmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQp
OworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRT
ZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAg
ICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwg
QmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUg
bmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIG93bmVyL3ZhbHVl
LgogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAg
LTI1NjQsNTggKzI2NTQsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBl
IGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0
IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAgICAg
IGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZhci8g
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUgdGhp
bmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBwcm92
ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIsCisg
ICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIKKyAgICAv
LyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBpcyBm
aXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAvLyBt
YXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsKKyAg
ICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikKKyAg
ICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxl
ZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAg
ICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZWxzZSB7
CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOwog
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7
IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGlu
ayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIs
IHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmso
dGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAgICAg
ICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBk
ZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBi
cmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTggKzI3MDgsMjEgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+
KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVj
b2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsK
KyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgaWYg
KHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElmIGFueSBs
aW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENvZGVCbG9j
a3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFyLgogICAg
ICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vy
cm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2UgewogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1bWVudEdQ
UjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09
IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIEFT
U0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkg
PT0gY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAgLTI2NTIsNyArMjczOSw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2go
WDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjcwMSw3ICsyNzg4LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFy
Z3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAK
QEAgLTI3NTksNyArMjg0Niw2IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCog
b3duZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpAQCAtMjc2
Nyw3ICsyODUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFs
RmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI4MjMsNyArMjkw
OSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG8KIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAgLTI4
MzksNyArMjkyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAK
ICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBj
b21tb24gbW9kZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBw
cm9maWxlIGl0IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0
YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7Cisg
ICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVyYXRv
ck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkg
ewogICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOwogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVy
YXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKCh+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSAmIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKQEAgLTI4ODEsNzgg
KzI5NjYsODcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9t
b2RlOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0
IGRvbmVDYXNlczsKIAotICAgIGF1dG8gcmVzdWx0R1BSID0gcmVnVDA7CisgICAgY29uc3RleHBy
IEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6
cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFz
ZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6
c2NyYXRjaDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVy
YXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVn
VDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG1vZGUsIHNjcmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5TmFtZSwgcHJvcGVydHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFk
ZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZF
bnVtZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0
Y2gyKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgT3BFbnVtZXJh
dG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50
MzIgZW5jb2RlZCB2YWx1ZS4KLSAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2Rl
KSk7CisgICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVy
bywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4
ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAg
Ly8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0
dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRj
aDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkp
OwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5kZXgsIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3Jh
dGNoMik7CiAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2Fj
aGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAg
b3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsK
LSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQ
Uik7Ci0KKyAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
c2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0
Y2gyLCBzY3JhdGNoMik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwg
VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BS
KTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQn
cyBvdXQgb2YgbGluZQogICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwot
ICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAg
c2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIo
QWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBz
aWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRw
dHJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9m
TGluZU9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNl
R1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0
R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNt
YXRjaC5saW5rKHRoaXMpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1l
dGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0
ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2Rl
U3RydWN0dXJlTWlzbWF0Y2gpLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFk
YXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0
dXJlTW9kZS5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRl
eGVkTW9kZSkpOworICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNj
cmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSkpOwogICAgIC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAgICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7
Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdU
Mik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BS
LCBzY3JhdGNoMSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBkb25lQ2FzZXMubGluayh0
aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IApAQCAtMjk2MSwxMCArMzA1NSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9y
X2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklU
OjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5j
dGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVu
YW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNf
cHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0
IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjk3Myw3ICszMDY2LDkgQEAgdm9pZCBK
SVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChy
ZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOwor
ICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNl
dE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCByZWdUMSk7
CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAtMzA2Miw2ICszMTU3LDEzIEBAIHZv
aWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKICAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVy
KEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBi
YXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNoR1BSKG93bmVyKSk7CisgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRo
aXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI4MjYyMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxs
TGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxp
bmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0lu
Zm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAgIHJldmVydENhbGwo
dm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5y
ZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MjYyMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9y
Q2hlY2twb2ludC5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNoZWNrcG9p
bnRPU1JFeGl0U2lkZVN0YXRlLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2lu
Y2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgpAQCAtMzcwLDYgKzM3MSwxNSBAQCBpbmxpbmUg
Ym9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAgICAgCiAgICAgY29kZUJsb2NrLT51
cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwogCisgICAgaWYgKGNvZGVCbG9jay0+
aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIGlmIChSZWZQdHI8
QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxv
Y2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICAgICAgLy9kYXRhTG9nTG4o
IlNoYXJlZCB2aWEgTExJbnQiKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5s
aW5rZWRCYXNlbGluZUNvZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAg
ICAgICBjb2RlQmxvY2stPmppdE5leHRJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklU
VGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJs
b2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJ0aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNvdW50ZXIg
PSAiLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgICAgICBkYXRhTG9n
TG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUg
bGlmdGVkLiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4MjYyMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Ao
am5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1
Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2Rl
TmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRh
LCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAg
ICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUg
KyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBlbmQKLQogICAgICAgICBt
ZXRhZGF0YSh0MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGJpbmVx
IFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBAIC0xMDIzLDcgKzEwMTks
NyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgICMg
TWV0YWRhdGEgaW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQy
LCAuc2xvdykKICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCi0g
ICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0
ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIp
CiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4OSwyMiArMTA4NSwxOCBA
QCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8g
KHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAKLSAgICBtYWNybyB1cGRh
dGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0
YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgIGVu
ZAotCiAgICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5lcSB0MSwgSW50
MzJUYWcsIC5vcE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYsIC5vcE5l
Z2F0ZVNsb3cKICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmls
ZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxl
SW50LCB0NSwgdDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdhdGVTcmNOb3RJ
bnQ6CiAgICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JpIDB4ODAw
MDAwMDAsIHQxCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAg
ICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0
NSwgdDMpCiAgICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExMTUsMTAg
KzExMDcsNiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwg
b3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9wZXJhdGlvbikK
ICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFj
cm8gYXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVj
dCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRz
W3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCiAgICAgICAgIGdl
dChtX3JocywgdDIpCiAgICAgICAgIGdldChtX2xocywgdDApCkBAIC0xMTI2LDcgKzExMTQsNyBA
QCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQy
LCBJbnQzMlRhZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5vcDJO
b3RJbnQKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50
LCB0NSwgdDIpCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRp
b25BbmRTdG9yZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKQEAg
LTExMzYsMTIgKzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1l
LCBvcAogICAgICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAgICAgICAgYmliIHQzLCBM
b3dlc3RUYWcsIC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFn
LCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAg
ICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVO
dW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgICAgICBqbXAgLm9w
MU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAgICAgICAgZmlpMmQgdDEs
IHQzLCBmdDEKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikK
KyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9m
aWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBn
ZXQobV9kc3QsIHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1Myw3ICsxMTQx
LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAj
IEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgb3BlcmFuZCBp
cyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYmlhIHQz
LCBMb3dlc3RUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRO
dW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFy
aXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAg
ICAgIGZpaTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJhdGlvbihmdDEsIGZ0MCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNDQx
LDggKzQ0MSwxMyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgICAgICAg
ICBtb3ZlIFBDLCBhMQogICAgICAgICAgICAgY0NhbGwyKF9sbGludF9sb29wX29zcikKICAgICAg
ICAgICAgIGJ0cHogcjAsIC5yZWNvdmVyCi0KICAgICAgICAgICAgIG1vdmUgcjEsIHNwCisKKyAg
ICAgICAgICAgICMgQmFzZWxpbmUgdXNlcyBMTEludCdzIFBCIHJlZ2lzdGVyIGZvciBpdHMgSklU
IGNvbnN0YW50IHBvb2wuCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKKyAg
ICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9qaXREYXRhW1BCXSwgUEIKKyAgICAgICAgICAg
IGxvYWRwIENvZGVCbG9jazo6SklURGF0YTo6bV9qaXRDb25zdGFudFBvb2xbUEJdLCBQQgorCiAg
ICAgICAgICAgICBpZiBBUk02NEUKICAgICAgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNv
bnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6
bG9vcE9TUkVudHJ5KSAqIFB0clNpemUsIGEyCiAgICAgICAgICAgICAgICAgam1wIFthMl0sIE5h
dGl2ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKQEAgLTEwNTYsMTAgKzEwNjEsNiBA
QCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9w
KG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9w
V2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJp
dGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1l
dGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDJdCi0g
ICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGxvYWRxIFtj
ZnIsIHQwLCA4XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpAQCAtMTA2OSw3ICsxMDcw
LDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICBp
bnRlZ2VyT3BlcmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51bWJlclRhZywgdDEKICAg
ICAgICAgc3RvcmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxl
KEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAgZGlzcGF0Y2goKQogCiAg
ICAgLnNsb3c6CkBAIC0xMTM0LDExICsxMTM1LDYgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1l
dGFkYXRhLCByZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAg
ICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFy
eUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAgZ2V0KG1fb3BlcmFuZCwg
dDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCiAgICAgbWV0YWRh
dGEodDEsIHQyKQpAQCAtMTE0NiwxMiArMTE0MiwxMiBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9w
X25lZ2F0ZSwgT3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xv
dwogICAgIG5lZ2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJv
ZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdh
dGUsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgIHJldHVybih0MykKIC5vcE5lZ2F0ZU5v
dEludDoKICAgICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JxIDB4
ODAwMDAwMDAwMDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxl
TnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2Zp
bGVOdW1iZXIsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0x
MTY0LDEwICsxMTYwLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBv
cAogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3Qs
IG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBt
ZXRhZGF0YSh0NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0eXBlKQotICAgICAgICAg
ICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBC
aW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0
KG1fcmhzLCB0MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCkBAIC0xMTc3LDcgKzExNjksNyBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAg
ICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5zbG93LCB0MikKIAotICAg
ICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAg
ICAgIGRpc3BhdGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTg3LDEwICsxMTc5LDEwIEBA
IG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYnRxeiB0
MSwgbnVtYmVyVGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAg
ZnEyZCB0MSwgZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQor
ICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2Zp
bGVOdW1iZXJOdW1iZXIsIHQ1LCB0MikKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAg
IC5vcDFOb3RJbnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50
KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFBy
b2ZpbGVOdW1iZXJJbnQsIHQ1LCB0MikKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgIC5vcDFO
b3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEyMDQsOSArMTE5Niw5IEBA
IG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKIAogICAgIC5vcDJOb3RJ
bnQ6CiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNl
Y29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KLSAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAg
YnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUlu
dE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
QXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDIpCisgICAgICAgIGdldChtX2RzdCwgdDIpCiAg
ICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAg
IGZxMmQgdDEsIGZ0MQpAQCAtMTUxOCw3ICsxNTEwLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF9nZXRfYnlfaWRfZGlyZWN0LAogZW5kKQogCiAjIFRoZSBiYXNlIG9iamVjdCBpcyBleHBlY3Rl
ZCBpbiB0MwotbWFjcm8gcGVyZm9ybUdldEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LCBtb2RlTWV0
YWRhdGFOYW1lLCB2YWx1ZVByb2ZpbGVOYW1lLCBzbG93TGFiZWwsIHNpemUsIG1ldGFkYXRhLCBy
ZXR1cm4pCittYWNybyBwZXJmb3JtR2V0QnlJREhlbHBlcihvcGNvZGVTdHJ1Y3QsIG1vZGVNZXRh
ZGF0YU5hbWUsIHZhbHVlUHJvZmlsZU5hbWUsIHNsb3dMYWJlbCwgc2l6ZSwgbWV0YWRhdGEsIHJl
dHVybiwgZG9BcnJheVByb2ZpbGUpCiAgICAgbWV0YWRhdGEodDIsIHQxKQogICAgIGxvYWRiICVv
cGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6JW1vZGVNZXRhZGF0YU5hbWUlLm1vZGVbdDJdLCB0MQog
CkBAIC0xNTQ2LDcgKzE1MzgsNyBAQCBtYWNybyBwZXJmb3JtR2V0QnlJREhlbHBlcihvcGNvZGVT
dHJ1Y3QsCiAub3BHZXRCeUlkQXJyYXlMZW5ndGg6CiAgICAgYmJuZXEgdDEsIGNvbnN0ZXhwciBH
ZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgsIC5vcEdldEJ5SWRVbnNldAogICAgIG1vdmUgdDMsIHQw
Ci0gICAgYXJyYXlQcm9maWxlKCVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6JW1vZGVNZXRhZGF0
YU5hbWUlLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUsIHQwLCB0MiwgdDUpCisgICAgZG9B
cnJheVByb2ZpbGUodDAsIHQyLCB0NSwgdDEpCiAgICAgYnRpeiB0MCwgSXNBcnJheSwgc2xvd0xh
YmVsCiAgICAgYnRpeiB0MCwgSW5kZXhpbmdTaGFwZU1hc2ssIHNsb3dMYWJlbAogICAgIGxvYWRD
YWdlZEpTVmFsdWUoSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QzXSwgdDAsIHQxKQpAQCAtMTU2OCw3
ICsxNTYwLDEwIEBAIGVuZAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWQsIE9wR2V0
QnlJZCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAg
Z2V0KG1fYmFzZSwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUNlbGwoc2l6ZSwgdDAs
IHQzLCAub3BHZXRCeUlkU2xvdykKLSAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEdldEJ5SWQs
IG1fbW9kZU1ldGFkYXRhLCBtX3Byb2ZpbGUsIC5vcEdldEJ5SWRTbG93LCBzaXplLCBtZXRhZGF0
YSwgcmV0dXJuKQorICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wR2V0QnlJZCwgbV9tb2RlTWV0
YWRhdGEsIG1fcHJvZmlsZSwgLm9wR2V0QnlJZFNsb3csIHNpemUsIG1ldGFkYXRhLCByZXR1cm4s
CisgICAgICAgIG1hY3JvIChjZWxsQW5kSW5kZXhpbmdUeXBlLCBtZXRhZGF0YSwgc2NyYXRjaDEs
IHNjcmF0Y2gyKQorICAgICAgICAgICAgYXJyYXlQcm9maWxlKE9wR2V0QnlJZDo6TWV0YWRhdGE6
Om1fYXJyYXlQcm9maWxlLCBjZWxsQW5kSW5kZXhpbmdUeXBlLCBtZXRhZGF0YSwgc2NyYXRjaDEp
CisgICAgICAgIGVuZCkKIAogLm9wR2V0QnlJZFNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGlu
dF9zbG93X3BhdGhfZ2V0X2J5X2lkKQpAQCAtMzAwMiw3ICsyOTk3LDcgQEAgbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF9pdGVyYXRvcl9vcGVuLCBPcAogCiAgICAgbG9hZFZhcmlhYmxlKGdldCwgbV9p
dGVyYXRvciwgdDMpCiAgICAgYnRxbnogdDMsIG5vdENlbGxNYXNrLCAuaXRlcmF0b3JPcGVuR2Vu
ZXJpY0dldE5leHRTbG93Ci0gICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck9wZW4s
IG1fbW9kZU1ldGFkYXRhLCBtX25leHRQcm9maWxlLCAuaXRlcmF0b3JPcGVuR2VuZXJpY0dldE5l
eHRTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVOZXh0QW5kRGlzcGF0Y2gpCisgICAgcGVyZm9y
bUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck9wZW4sIG1fbW9kZU1ldGFkYXRhLCBtX25leHRQcm9m
aWxlLCAuaXRlcmF0b3JPcGVuR2VuZXJpY0dldE5leHRTbG93LCBzaXplLCBtZXRhZGF0YSwgc3Rv
cmVOZXh0QW5kRGlzcGF0Y2gsIG1hY3JvKGEsIGIsIGMsIGQpIGVuZCkKIAogLml0ZXJhdG9yT3Bl
bkdlbmVyaWNHZXROZXh0U2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9p
dGVyYXRvcl9vcGVuX2dldF9uZXh0KQpAQCAtMzA2MSw3ICszMDU2LDcgQEAgbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0LCBPcAogCiAgICAgbG9hZFZhcmlhYmxlKGdldCwgbV92
YWx1ZSwgdDMpCiAgICAgYnRxbnogdDMsIG5vdENlbGxNYXNrLCAuZ2V0RG9uZVNsb3cKLSAgICBw
ZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV9kb25lTW9kZU1ldGFkYXRhLCBt
X2RvbmVQcm9maWxlLCAuZ2V0RG9uZVNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZURvbmVBbmRK
bXBUb0dldFZhbHVlKQorICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JOZXh0LCBt
X2RvbmVNb2RlTWV0YWRhdGEsIG1fZG9uZVByb2ZpbGUsIC5nZXREb25lU2xvdywgc2l6ZSwgbWV0
YWRhdGEsIHN0b3JlRG9uZUFuZEptcFRvR2V0VmFsdWUsIG1hY3JvKGEsIGIsIGMsIGQpIGVuZCkK
IAogLmdldERvbmVTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2l0ZXJh
dG9yX25leHRfZ2V0X2RvbmUpCkBAIC0zMDg2LDcgKzMwODEsNyBAQCBsbGludE9wV2l0aE1ldGFk
YXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wCiAgICAgIyBSZWxvYWQgdGhlIG5leHQgcmVzdWx0IHRt
cCBzaW5jZSB0aGUgZ2V0X2J5X2lkIGFib3ZlIG1heSBoYXZlIGNsb2JiZXJlZCB0My4KICAgICBs
b2FkVmFyaWFibGUoZ2V0LCBtX3ZhbHVlLCB0MykKICAgICAjIFdlIGRvbid0IG5lZWQgdG8gY2hl
Y2sgaWYgdGhlIGl0ZXJhdG9yIHJlc3VsdCBpcyBhIGNlbGwgaGVyZSBzaW5jZSB3ZSB3aWxsIGhh
dmUgdGhyb3duIGFuIGVycm9yIGJlZm9yZS4KLSAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0
ZXJhdG9yTmV4dCwgbV92YWx1ZU1vZGVNZXRhZGF0YSwgbV92YWx1ZVByb2ZpbGUsIC5nZXRWYWx1
ZVNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZVZhbHVlQW5kRGlzcGF0Y2gpCisgICAgcGVyZm9y
bUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck5leHQsIG1fdmFsdWVNb2RlTWV0YWRhdGEsIG1fdmFs
dWVQcm9maWxlLCAuZ2V0VmFsdWVTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVWYWx1ZUFuZERp
c3BhdGNoLCBtYWNybyhhLCBiLCBjLCBkKSBlbmQpCiAKIC5nZXRWYWx1ZVNsb3c6CiAgICAgY2Fs
bFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9nZXRfdmFsdWUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE0MjAsNyArMTQyMCw4
IEBAIGVuZAogCiBtYWNybyBjaGVja1N3aXRjaFRvSklUKGluY3JlbWVudCwgYWN0aW9uKQogICAg
IGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGJhZGRpcyBpbmNyZW1lbnQsIENvZGVCbG9j
azo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2Nv
dW50ZXJbdDBdLCAuY29udGludWUKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRl
Q291bnRlclt0MF0sIHQwCisgICAgYmFkZGlzIGluY3JlbWVudCwgQmFzZWxpbmVFeGVjdXRpb25D
b3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICBhY3Rpb24oKQogICAgIC5jb250
aW51ZToKIGVuZApAQCAtMTUwMyw3ICsxNTA0LDggQEAgbWFjcm8gcHJvbG9ndWUoY29kZUJsb2Nr
R2V0dGVyLCBjb2RlQmxvYwogICAgIGNvZGVCbG9ja0dldHRlcih0MSkKICAgICBjb2RlQmxvY2tT
ZXR0ZXIodDEpCiAgICAgaWYgbm90IChDX0xPT1Agb3IgQ19MT09QX1dJTikKLSAgICAgICAgYmFk
ZGlzIDUsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVjdXRp
b25Db3VudGVyOjptX2NvdW50ZXJbdDFdLCAuY29udGludWUKKyAgICAgICAgbG9hZHAgQ29kZUJs
b2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDFdLCB0MAorICAgICAgICBiYWRkaXMgNSwgQmFz
ZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICAgICAg
aWYgSlNWQUxVRTY0CiAgICAgICAgICAgICBtb3ZlIGNmciwgYTAKICAgICAgICAgICAgIG1vdmUg
UEMsIGExCkBAIC0xNjE3LDE0ICsxNjE5LDE0IEBAIG1hY3JvIGZ1bmN0aW9uSW5pdGlhbGl6YXRp
b24ocHJvZmlsZUFyZ1MKICAgICAjIG9wdGltYWwgd2F5IGZvciBhcmNoaXRlY3R1cmVzIHRoYXQg
aGF2ZSBtb3JlIHRoYW4gZml2ZSByZWdpc3RlcnMgYXZhaWxhYmxlCiAgICAgIyBmb3IgYXJiaXRy
YXJ5IHVzZSBpbiB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgbG9hZGkgQ29kZUJsb2NrOjptX251bVBh
cmFtZXRlcnNbdDFdLCB0MAotICAgIGFkZHAgLXByb2ZpbGVBcmdTa2lwLCB0MCAjIFVzZSBhZGRp
IGJlY2F1c2UgdGhhdCdzIHdoYXQgaGFzIHRoZSBwZWVwaG9sZQorICAgIGFkZHAgLXByb2ZpbGVB
cmdTa2lwLCB0MAogICAgIGFzc2VydChtYWNybyAob2spIGJwZ3RlcSB0MCwgMCwgb2sgZW5kKQog
ICAgIGJ0cHogdDAsIC5hcmd1bWVudFByb2ZpbGVEb25lCiAgICAgbG9hZHAgQ29kZUJsb2NrOjpt
X2FyZ3VtZW50VmFsdWVQcm9maWxlcyArIEZpeGVkVmVjdG9yOjptX3N0b3JhZ2UgKyBSZWZDb3Vu
dGVkQXJyYXk6Om1fZGF0YVt0MV0sIHQzCiAgICAgYnRweiB0MywgLmFyZ3VtZW50UHJvZmlsZURv
bmUgIyBXaGVuIHdlIGNhbid0IEpJVCwgd2UgZG9uJ3QgYWxsb2NhdGUgYW55IGFyZ3VtZW50IHZh
bHVlIHByb2ZpbGVzLgogICAgIG11bHAgc2l6ZW9mIFZhbHVlUHJvZmlsZSwgdDAsIHQyICMgQWFh
YWFoaGhoISBOZWVkIHN0cmVuZ3RoIHJlZHVjdGlvbiEKICAgICBsc2hpZnRwIDMsIHQwICMgb2Zm
c2V0IG9mIGxhc3QgSlNWYWx1ZSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLgotICAgIGFkZHAgdDIs
IHQzICMgcG9pbnRlciB0byBlbmQgb2YgVmFsdWVQcm9maWxlIGFycmF5IGluIENvZGVCbG9jazo6
bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuCisgICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVu
ZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gdGhlIHZhbHVlIHByb2ZpbGUgYXJyYXkuCiAuYXJn
dW1lbnRQcm9maWxlTG9vcDoKICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgbG9hZHEgVGhpc0Fy
Z3VtZW50T2Zmc2V0IC0gOCArIHByb2ZpbGVBcmdTa2lwICogOFtjZnIsIHQwXSwgdDIKQEAgLTI1
NjMsNiArMjU2NSwxNyBAQCBtYWNybyBub3RTdXBwb3J0ZWQoKQogICAgIGVuZAogZW5kCiAKKwor
bWFjcm8gdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0
YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9m
aWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBVbmFyeUFyaXRoUHJvZmlsZTo6bV9i
aXRzW3RlbXBdCitlbmQKKworbWFjcm8gdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0
cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1l
dGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgQmlu
YXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCiAvLyBGSVhNRTogV2Ugc2hvdWxk
IG5vdCBuZWVkIHRoZSBYODZfNjRfV0lOIGNvbmRpdGlvbiBoZXJlLCBzaW5jZSBXRUJBU1NFTUJM
WSBzaG91bGQgYWxyZWFkeSBiZSBmYWxzZSBvbiBXaW5kb3dzCiAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNzE2CiBpZiBXRUJBU1NFTUJMWSBhbmQgbm90IFg4
Nl82NF9XSU4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlk
ZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDgsOCArNDgsMTAgQEAgcHVibGljOgogICAgIENhY2hlYWJsZUlkZW50aWZpZXIoKSA9IGRlZmF1
bHQ7CiAKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUNl
bGwoSlNDZWxsKiBpZGVudGlmaWVyKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50
aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayosIGNv
bnN0IElkZW50aWZpZXImKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayosIFVuaXF1ZWRT
dHJpbmdJbXBsKik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAg
c3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgY29uc3QgSWRlbnRpZmllciYpOworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVh
YmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJs
b2NrVHlwZSosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFi
bGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0lt
cGwqKTsKICAgICBzdGF0aWMgY29uc3RleHByIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJv
bVJhd0JpdHModWludHB0cl90IHJhd0JpdHMpIHsgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIo
cmF3Qml0cyk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVh
YmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lvbiAyODI2MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTQgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Y29uc3QgSWRlbnRpZmllciYgaSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgor
aW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29u
c3QgSWRlbnRpZmllciYgaSkKIHsKICAgICByZXR1cm4gY3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKGNvZGVCbG9jaywgaS5pbXBsKCkpOwogfQogCi1pbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVu
dGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
CiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGNvZGVCbG9jay0+aGFzSWRlbnRpZmll
cih1aWQpKTsKICAgICByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcih1aWQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkocmV2aXNpb24g
MjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiQ2FjaGVkVHlwZXMuaCIKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgog
I2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ2FjaGVFcnJvci5o
IgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lv
biAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODAsNyArNDgwLDcgQEAgSlNDX0RFRklORV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF90bwogI2lmIEVOQUJMRShKSVQpCiBzdGF0aWMgdm9pZCB1
cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3AoT3BOZWdhdGU6Ok1ldGFkYXRhJiBtZXRh
ZGF0YSwgSlNWYWx1ZSByZXN1bHQsIEpTVmFsdWUgb3BlcmFuZCkKIHsKLSAgICBVbmFyeUFyaXRo
UHJvZmlsZSYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworICAgIFVuYXJ5QXJp
dGhQcm9maWxlJiBwcm9maWxlID0gKm1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOwogICAgIHByb2Zp
bGUub2JzZXJ2ZUFyZyhvcGVyYW5kKTsKICAgICBBU1NFUlQocmVzdWx0LmlzTnVtYmVyKCkgfHwg
cmVzdWx0LmlzQmlnSW50KCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjgyNjIyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4OSw2ICsyODksOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgaW5saW5lIHB0
cmRpZmZfdCBvZmZzZXRPZlJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0
aW9uRXhlY3V0YWJsZSwgbV9yYXJlRGF0YSk7IH0KICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZf
dCBvZmZzZXRPZkFzU3RyaW5nSW5SYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihS
YXJlRGF0YSwgbV9hc1N0cmluZyk7IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZz
ZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25F
eGVjdXRhYmxlLCBtX2NvZGVCbG9ja0ZvckNhbGwpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJk
aWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7IH0KIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4NSw2ICszODUsOSBAQCBzdGF0aWMgdm9pZCBvdmVycmlkZURlZmF1bHRzKCkKICAgICAg
ICAgT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpID0gMTUwMDsK
ICAgICAgICAgT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkgPSAxMDA7CiAg
ICAgfQorCisgICAgLy8gT09QUworICAgIC8vT3B0aW9uczo6bWF4aW11bUV4ZWN1dGlvbkNvdW50
c0JldHdlZW5DaGVja3BvaW50c0ZvckJhc2VsaW5lKCkgPSA0NTA7CiB9CiAKIHN0YXRpYyB2b2lk
IGNvcnJlY3RPcHRpb25zKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw2IEBA
IGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihJbnQzMiwgZXZhbFRo
cmVzaG9sZE11bHRpcGxpZXIsIDEwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVk
LCBtYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0aCwgMjU2LCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICBcCi0gICAgdihCb29sLCByYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hl
Y2twb2ludHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMyLCBtYXhpbXVt
RXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yQmFzZWxpbmUsIDEwMDAsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVu
Q2hlY2twb2ludHNGb3JVcHBlclRpZXJzLCA1MDAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
XApAQCAtNTMyLDYgKzUzMSw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7
CiAgICAgdihCb29sLCB1c2VEYXRhSUMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KEJvb2wsIHVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIHYoQm9vbCwgdXNlRGF0YUlDU2hhcmluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAorICAgIHYoQm9vbCwgdXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZywgdHJ1ZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgXAogICAgIC8qIEZlYXR1cmUgRmxhZ3MgKi9cCiAgICAgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5j
cHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
cmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsOSArMzk2LDExIEBAIHZv
aWQgU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGkKICAgICBpZiAoT3B0aW9uczo6
dmFsaWRhdGVCeXRlY29kZSgpKQogICAgICAgICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7CiAKLSAg
ICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKKyAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklUQ29k
ZT4gYmFzZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5r
ZWRCYXNlbGluZUNvZGUpIHsKKyAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJh
c2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9IGVsc2UgaWYg
KE9wdGlvbnM6OnVzZUxMSW50KCkpIHsKICAgICAgICAgc2V0dXBMTEludChjb2RlQmxvY2spOwot
ICAgIGVsc2UKKyAgICB9IGVsc2UKICAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CiAK
ICAgICBpbnN0YWxsQ29kZSh2bSwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmNvZGVUeXBlKCksIGNv
ZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkocmV2aXNpb24gMjgy
NjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9w
dGltaXplQWZ0ZXJXYXJtVXAoKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTElu
dFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgICAg
ICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldh
cm1VcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlv
bnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVB
ZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJl
c2hvbGRSZWFjaGVkKCkKQEAgLTY1LDkgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1p
emVTb29uKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9C
QlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JC
QlFPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQo
T3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29uKCkpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1p
emVTb29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICBzdHJ1Y3QgT1NS
RW50cnlEYXRhIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBD
b3VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRp
ZXJVcENvdW50LmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBUaWVyVXBDb3VudDo6VGllclVw
Q291bnQoKQogewotICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdP
cHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgIHNldE5ld1RocmVzaG9sZChPcHRp
b25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogfQogCiBUaWVyVXBD
b3VudDo6flRpZXJVcENvdW50KCkgPSBkZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAodWlu
dDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgYWZ0ZXIgd2Fy
bS11cC4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9N
R09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9s
ZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0K
IAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtOTAs
MTQgKzkwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24odWlu
dDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgbmV4dCBpbnZv
Y2F0aW9uLiIpOwotICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCwgbnVsbHB0cik7CisgICAgICAg
IHNldE5ld1RocmVzaG9sZCgwKTsKICAgICB9CiAKICAgICB2b2lkIG9wdGltaXplU29vbih1aW50
MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6
dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBzb29uLiIpOwog
ICAgICAgICAvLyBGSVhNRTogTmVlZCBhZGp1c3RtZW50IG9uY2Ugd2UgZ2V0IG1vcmUgaW5mb3Jt
YXRpb24gYWJvdXQgd2FzbSBmdW5jdGlvbnMuCi0gICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRp
b25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAg
ICAgfQogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRp
b25SZXN1bHQodWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0
KQpJbmRleDogU291cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvQmFnLmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw2ICs2NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG90aGVyLm1faGVh
ZCA9IG51bGxwdHI7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBCYWcm
IG9wZXJhdG9yPShCYWc8VCwgVT4mJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh1bndyYXBw
ZWRIZWFkKCkgPT0gb3RoZXIudW53cmFwcGVkSGVhZCgpKQorICAgICAgICAgICAgcmV0dXJuICp0
aGlzOworCisgICAgICAgIEJhZyBkZXN0cm95OworICAgICAgICBkZXN0cm95Lm1faGVhZCA9IHVu
d3JhcHBlZEhlYWQoKTsKKyAgICAgICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgpOwor
ICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOworCisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisKICAgICB+QmFnKCkKICAgICB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBUb29s
cy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHJldmlzaW9uIDI4MjYyMikKKysrIFRvb2xzL1Njcmlw
dHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTc3NiwxNyArNzc2LDE4
IEBAIGVuZAogCiAjIEZJWE1FOiBuZWVkIHRvIGZpeCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE4NzAzIHRvIGVuYWJsZSB0aGlzIG9uIExpbnV4L01JUFMuCiBkZWYg
cnVuQnl0ZWNvZGVDYWNoZUltcGwob3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zLCAqYWRkaXRp
b25hbEVudikKLSAgICBpZiAoJGhvc3RPUyA9PSAiZGFyd2luIikKLSAgICAgICAgZmlsZVRlbXBs
YXRlID0gImJ5dGVjb2RlLWNhY2hlIgotICAgIGVsc2lmICgkaG9zdE9TID09ICJsaW51eCIgJiYg
JGFyY2hpdGVjdHVyZSAhPSAibWlwcyIpCi0gICAgICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29k
ZS1jYWNoZVhYWFhYWCIKLSAgICBlbHNlCi0gICAgICAgIHNraXAKLSAgICAgICAgcmV0dXJuCi0g
ICAgZW5kCisgICAgIyBPT1BTCisgICAgI2lmICgkaG9zdE9TID09ICJkYXJ3aW4iKQorICAgICMg
ICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlIgorICAgICNlbHNpZiAoJGhvc3RPUyA9
PSAibGludXgiICYmICRhcmNoaXRlY3R1cmUgIT0gIm1pcHMiKQorICAgICMgICAgZmlsZVRlbXBs
YXRlID0gImJ5dGVjb2RlLWNhY2hlWFhYWFhYIgorICAgICNlbHNlCisgICAgIyAgICBza2lwCisg
ICAgIyAgICByZXR1cm4KKyAgICAjZW5kCiAKLSAgICBvcHRpb25zID0gQkFTRV9PUFRJT05TICsg
RlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMgKyAkdGVzdFNwZWNpZmlj
UmVxdWlyZWRPcHRpb25zCi0gICAgYWRkUnVuQ29tbWFuZCgiYnl0ZWNvZGUtY2FjaGUiLCBbInNo
IiwgKHBhdGhUb0hlbHBlcnMgKyAiYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIuc2giKS50b19z
LCBmaWxlVGVtcGxhdGUudG9fcywgKnZtQ29tbWFuZCwgJGJlbmNobWFyay50b19zXSArIG9wdGlv
bnMsIHNpbGVudE91dHB1dEhhbmRsZXIsIHNpbXBsZUVycm9ySGFuZGxlciwgKmFkZGl0aW9uYWxF
bnYpCisgICAgI29wdGlvbnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9OUyArIG9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMKKyAgICAj
YWRkUnVuQ29tbWFuZCgiYnl0ZWNvZGUtY2FjaGUiLCBbInNoIiwgKHBhdGhUb0hlbHBlcnMgKyAi
Ynl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIuc2giKS50b19zLCBmaWxlVGVtcGxhdGUudG9fcywg
KnZtQ29tbWFuZCwgJGJlbmNobWFyay50b19zXSArIG9wdGlvbnMsIHNpbGVudE91dHB1dEhhbmRs
ZXIsIHNpbXBsZUVycm9ySGFuZGxlciwgKmFkZGl0aW9uYWxFbnYpCiBlbmQKIAogZGVmIHJ1bkJ5
dGVjb2RlQ2FjaGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438433</attachid>
            <date>2021-09-16 19:29:37 -0700</date>
            <delta_ts>2021-09-17 19:16:03 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>455457</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjYyMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAJ
KHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJh
eVByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMyLDcgQEAgdm9pZCBBcnJh
eVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJlZGljdAogewogICAgIG1fb2JzZXJ2ZWRBcnJheU1v
ZGVzIHw9IGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKGxhc3RTZWVuU3RydWN0dXJlKTsKICAgICAK
KyAgICAvLyBPT1BTOiBJcyBpdCBvayBmb3IgdGhpcyB0byByYWNlPyBJIHRoaW5rIHNvLgogICAg
IGlmICghbV9kaWRQZXJmb3JtRmlyc3RSdW5QcnVuaW5nCiAgICAgICAgICYmIGhhc1R3b09yTW9y
ZUJpdHNTZXQobV9vYnNlcnZlZEFycmF5TW9kZXMpKSB7CiAgICAgICAgIG1fb2JzZXJ2ZWRBcnJh
eU1vZGVzID0gYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUobGFzdFNlZW5TdHJ1Y3R1cmUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCShy
ZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsOSArMjkwLDEwIEBAIG9wX2dyb3VwIDpQ
cm9maWxlZEJpbmFyeU9wLAogICAgICAgICBsaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAg
cmhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVz
LAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkCiAgICAgfSwKICAgICBtZXRhZGF0YTog
ewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0
aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9ncm91cCA6VmFsdWVQ
cm9maWxlZEJpbmFyeU9wLApAQCAtMzUxLDkgKzM1MiwxMCBAQCBvcF9ncm91cCA6VW5hcnlJblBs
YWNlUHJvZmlsZWRPcCwKICAgICBdLAogICAgIGFyZ3M6IHsKICAgICAgICAgc3JjRHN0OiBWaXJ0
dWFsUmVnaXN0ZXIsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlCisg
ICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3AgOnRv
X29iamVjdCwKQEAgLTM4NCw5ICszODYsMTAgQEAgb3AgOm5lZ2F0ZSwKICAgICAgICAgZHN0OiBW
aXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmQ6IFZpcnR1YWxSZWdpc3RlciwKICAgICAg
ICAgcmVzdWx0VHlwZTogUmVzdWx0VHlwZSwKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUsCisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgog
ICAgIH0KIAogb3AgOm5vdCwKQEAgLTQ3OCw2ICs0ODEsNyBAQCBvcCA6Z2V0X2J5X2lkLAogICAg
IG1ldGFkYXRhOiB7CiAgICAgICAgIG1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwK
ICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFy
cmF5UHJvZmlsZSwKICAgICB9CiAKIG9wIDpnZXRfYnlfaWRfd2l0aF90aGlzLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
T3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Myw2ICs3MywyOCBAQCBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZv
ckltcGwoQnl0ZWNvCiAgICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9maWxlOwogfQogCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQcm9maWxlT2Zmc2V0
Rm9yKHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURfUEFSQU0oY2hlY2tw
b2ludEluZGV4KTsKKyAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9p
dGVyYXRvcl9vcGVuKSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAg
ICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mSXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck9wZW46OmdldE5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFBy
b2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlE
ID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgp
IHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJldHVybiBCeXRl
Y29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKKyAgICAgICAgY2Fz
ZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZEb25lUHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1
ZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2ZpbGUoKTsKKyAg
ICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSAKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZQ
cm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29s
IGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQg
Y2hlY2twb2ludEluZGV4KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJF
TEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsKIH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4g
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFy
dCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5m
bzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpA
QCAtMjI1LDYgKzIyMCwxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0TWF4QXJndW1lbnRDb3Vu
dEluCiAgICAgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZhbHVlOwogfQogCitD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRo
U3RhcnQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkgJiYgaXNUYWlsQ2FsbCgp
KTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+
KHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNp
dFdlYWsoVk0mIHZtKQogewogICAgIGF1dG8gaGFuZGxlU3BlY2lmaWNDYWxsZWUgPSBbJl0gKEpT
RnVuY3Rpb24qIGNhbGxlZSkgewpAQCAtMjk4LDIzICsyOTksMTEgQEAgdm9pZCBDYWxsTGlua0lu
Zm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5r
VG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1p
dEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBV
c2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsK
LSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0lu
Zm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwotICAgICAgICB1
LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAgICB9Ci0KLSAg
ICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsK
LSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKLSAgICBp
ZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlDOjpZZXMpIHsK
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7CiAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMxMiw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMgPSBqaXQuYnJh
bmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkg
eworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxD
YWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8vIFBvbHltb3Jw
aGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAgICAgIGppdC5m
YXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mTW9u
b21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAtMzM2LDE0ICsz
MjUsMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKLSAgICAg
ICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAg
ICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJU
YWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhckNh
bGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwogICAgICAgICBq
aXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAg
ICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsZWVM
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxsZWVD
aGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbExvY2F0aW9u
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7
CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOwogICAg
ICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzQ0LDM0IEBAIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0
LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRyKTsKKyAgICBz
ZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJl
Zyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwg
Y2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBj
YWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhp
cywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBpc1RhaWxDYWxs
KCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxs
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBX
VEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJ
Qzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BS
LCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdURk1vdmUocHJl
cGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxl
ZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxs
TGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aElt
cGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZ
ZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxM
aW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJ
bmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51
bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCB0
cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0zNjksMTcgKzM4
MSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgCiAgICAgaml0
LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQ
YXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9pZCBDYWxsTGlu
a0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5m
bzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7
Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2bSwgVW5saW5r
ZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcgY2FsbGVlR1BSLCBH
UFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4o
dW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgc2V0VXBDYWxsKHVubGlu
a2VkQ2FsbExpbmtJbmZvLmNhbGxUeXBlLCBjYWxsZWVHUFIpOworICAgIG1fZG9uZUxvY2F0aW9u
ID0gdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtlZENh
bGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKQorICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEg
PSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigqdW5saW5rZWRDYWxsTGlua0luZm8u
ZnJhbWVTaHVmZmxlRGF0YSk7IC8vIE9PUFM6IHRpbWUgZm9yIHJlZiBjb3VudGluZz8KKyAgICBz
ZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24o
dm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENv
ZGU8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFp
bENhbGwoKSk7CiAKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKIAotICAgIGF1
dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAg
IH0pOwotCiAgICAgYXV0byBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICB1LmNvZGVJQy5tX2Nh
bGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+KGNhbGwpOwpAQCAtMzk3LDcgKzQyMiw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGly
ZWN0VGFpbENhbGxGYXMKIAogICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwog
ICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KGZhc3RQYXRoU3RhcnQpOworICAgICAgICB1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CiAg
ICAgfSk7CiAKICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEganVt
cCB0byB0aGUgc2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0
MywxMSBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogc3Ry
dWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87
CisKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2Fs
bExpbmtJbmZvPiB7CiBwdWJsaWM6Ci0gICAgZW51bSBDYWxsVHlwZSB7CisgICAgZW51bSBDYWxs
VHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25lLAogICAgICAgICBDYWxsLAogICAgICAgICBD
YWxsVmFyYXJncywKQEAgLTE2NSw2ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGVl
R1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYs
IFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUik7CisKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxs
ZWVHUFI7IH0KICAgICAKICAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgewpAQCAt
MTczLDEzICsxNzcsMTYgQEAgcHVibGljOgogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5r
SW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4g
cHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CisgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVT
RURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxD
YWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2Fs
bCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxD
YWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJik7CiAgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2
b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOworICAgIHN0YXRpYyB2b2lkIGVt
aXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpOwogICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVz
ZURhdGFJQzo6WWVzOyB9CkBAIC0yMDMsNyArMjEwLDYgQEAgcHVibGljOgogICAgICAgICBtX2Fs
bG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwogCkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9zbG93U3R1YiA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgSklUU3R1YlJv
dXRpbmUqIHNsb3dTdHViKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Nsb3dTdHViLmdldCgp
OwotICAgIH0KLQogICAgIGJvb2wgc2Vlbk9uY2UoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
aGFzU2VlblNob3VsZFJlcGF0Y2g7CkBAIC0zMDgsOSArMzA5LDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUpOwogICAgIH0KIAotICAg
IHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsK
KyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIH0KIAogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTM4MSw3ICszODIsOSBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFz
dFBhdGhTdGFydDsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZh
c3RQYXRoU3RhcnQoKTsKKwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC0z
OTcsNiArNDAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0
aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247CiAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoU3Rh
cnQ7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zh
c3RQYXRoU3RhcnQ7CiAgICAgICAgIH0gY29kZUlDOwogICAgIH0gdTsKIApAQCAtNDI0LDYgKzQy
OCwxMyBAQCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpCiAgICAgcmV0
dXJuIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCk7CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxM
aW5rSW5mbyB7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHks
IG9ubHkgdXNlZCBieSBiYXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBD
b2RlT3JpZ2luLgorICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307CisK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODI2
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2
bSwgU3RydWN0dXJlKiAKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBz
ZXROdW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7CisKKyAgICBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKICAg
ICAKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KQEAgLTMxOCw3ICsz
MjAsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDCiAgICAgZmlu
aXNoQ3JlYXRpb25Db21tb24odm0pOwogCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAg
IGppdEFmdGVyV2FybVVwKCk7CisgICAgLy9qaXRBZnRlcldhcm1VcCgpOwogCiAgICAgaWYgKG90
aGVyLm1fcmFyZURhdGEpIHsKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwpA
QCAtMzU5LDcgKzM2MSw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJl
KiAKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0
ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9s
bGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVy
KCk7CisKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcw
LDEwICszNzQsMTMgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAog
Ly8gd2UgY2FuJ3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24u
IFRoaXMgcHJvY2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93
IG9yIGludHJvZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkg
b24gbGl2ZW5lc3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVC
bG9ja3Mgb2YgYW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNh
Y2hpbmcgdGhlIGxpdmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2su
CisvLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlz
IHNoYXJlZCBiZXR3ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAor
Ly8gc28gdGhlIGJ5dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2Nr
cyBzaGFyaW5nIGFuIFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtl
ZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7Cisg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOyAvLyBXZSBuZWVkIHRvIHNldCB1cCBvdXIgdmFs
dWUgcHJvZmlsZSBwb2ludGVycy4KKwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKQEAgLTQzNSw3ICs0NDIsNyBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgLy8gQm9va2tlZXAgdGhlIHN0
cm9uZ2x5IHJlZmVyZW5jZWQgbW9kdWxlIGVudmlyb25tZW50cy4KICAgICBIYXNoU2V0PEpTTW9k
dWxlRW52aXJvbm1lbnQqPiBzdHJvbmdseVJlZmVyZW5jZWRNb2R1bGVFbnZpcm9ubWVudHM7CiAK
LSAgICBhdXRvIGxpbmtfcHJvZmlsZSA9IFsmXShjb25zdCBhdXRvJiAvKmluc3RydWN0aW9uKi8s
IGF1dG8gLypieXRlY29kZSovLCBhdXRvJiAvKm1ldGFkYXRhKi8pIHsKKyAgICBhdXRvIGxpbmtf
cHJvZmlsZSA9IFsmXShjb25zdCBhdXRvJiAvKmluc3RydWN0aW9uKi8sIGF1dG8gLypieXRlY29k
ZSovLCBhdXRvJikgewogICAgICAgICBtX251bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVz
Kys7CiAgICAgfTsKIApAQCAtNDY2LDYgKzQ3MywxOSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCisjZGVmaW5lIExJ
TktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBc
CisgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5t
X2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJ5dGVj
b2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUg
TElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsg
XAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEu
bV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVj
b2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygp
OwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkg
ewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpA
QCAtNDk5LDkgKzUxOSw5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IFMKIAogICAgICAgICBMSU5LKE9wR2V0QnlJZCwgcHJvZmlsZSkKIAotICAgICAgICBMSU5LKE9w
RW51bWVyYXRvck5leHQsIHByb2ZpbGUpCi0gICAgICAgIExJTksoT3BFbnVtZXJhdG9ySW5CeVZh
bCwgcHJvZmlsZSkKLSAgICAgICAgTElOSyhPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgcHJv
ZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JOZXh0KQorICAgICAgICBMSU5LKE9wRW51
bWVyYXRvckluQnlWYWwpCisgICAgICAgIExJTksoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkp
CiAgICAgICAgIExJTksoT3BFbnVtZXJhdG9yR2V0QnlWYWwsIHByb2ZpbGUpCiAKICAgICAgICAg
TElOSyhPcENhbGwsIHByb2ZpbGUpCkBAIC01MjgsMTQgKzU0OCwxNCBAQCBib29sIENvZGVCbG9j
azo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQcm9taXNl
KQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTksoT3BBZGQp
Ci0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAgIExJTkso
T3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcEluYykKLSAg
ICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BNdWwpCisg
ICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAgICAgTElO
S19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktfV0lUSF9V
TkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJ
VEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUo
T3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2OCw3ICs3ODgsNyBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgLy8gcmVseSBvbiB0
aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRlZCB0byBhbHNv
IGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUgYWNjdXJhdGUg
YXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsK
LSAgICBqaXRBZnRlcldhcm1VcCgpOworICAgIC8vaml0QWZ0ZXJXYXJtVXAoKTsKIAogICAgIC8v
IElmIHRoZSBjb25jdXJyZW50IHRocmVhZCB3aWxsIHdhbnQgdGhlIGNvZGUgYmxvY2sncyBoYXNo
LCB0aGVuIGNvbXB1dGUgaXQgaGVyZQogICAgIC8vIHN5bmNocm9ub3VzbHkuCkBAIC03ODksNiAr
ODA5LDc3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbkNvbW1vbihWTSYKICAgICBt
X293bmVyRWRnZS5zZXQodm0sIHRoaXMsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmNyZWF0
ZSh2bSwgdGhpcykpOwogfQogCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNl
bGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRDb2Rl
KGppdENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0Q29k
ZU1hcCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFuZGxl
ckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5hdGl2
ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJl
dGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAg
YXV0byYgaml0RGF0YSA9IGVuc3VyZUpJVERhdGEobG9ja2VyKTsKKworICAgICAgICBSRUxFQVNF
X0FTU0VSVChqaXREYXRhLm1faml0Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CisgICAgICAgIGpp
dERhdGEubV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+bV9j
b25zdGFudFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqaXRD
b2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBlbnRy
eSA9IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOworICAgICAgICAgICAgc3dpdGNoIChl
bnRyeS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xv
YmFsT2JqZWN0OgorICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0g
PSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAgICAg
ICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8gPSAqc3Rh
dGljX2Nhc3Q8VW5saW5rZWRDYWxsTGlua0luZm8qPihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAg
ICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxsTGlua0lu
Zm9zLmFkZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpKTsK
KyAgICAgICAgICAgICAgICAvLyBPT1BTOiBkb24ndCBoYXJkY29kZSB0aGVzZSByZWdpc3RlcnMg
bGlrZSB0aGlzLgorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+aW5pdGlhbGl6ZURhdGFJ
Qyh2bSgpLCB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJl
Z1QyKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gY2Fs
bExpbmtJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7Cisg
ICAgICAgICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5m
byA9ICpzdGF0aWNfY2FzdDxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKj4oZW50cnkucGF5bG9h
ZCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gaml0RGF0
YS5tX3N0dWJJbmZvcy5hZGQodW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlLCBDb2RlT3JpZ2lu
KHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT5pbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8odGhpcywgdW5saW5r
ZWRTdHViSW5mbyk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtp
XSA9IHN0dWJJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbDogeworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50
cnkucGF5bG9hZCk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtp
XSA9IGZ1bmN0aW9uRGVjbChpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25F
eHByOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gZnVuY3Rpb25FeHByKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICBjYXNlIE1v
ZHVsZUNvZGU6CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlu
bGluZWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6Cisg
ICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3
ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJp
ZGUgdGhhdCBvYnNlcnZhdGlvbi4KKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0g
Y2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCgpKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24o
dGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghdW5saW5rZWRDb2RlQmxv
Y2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSAmJiBPcHRpb25zOjp1c2VCYXNlbGluZUpJVENv
ZGVTaGFyaW5nKCkpCisgICAgICAgIHVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNl
bGluZUNvZGUgPSBXVEZNb3ZlKGppdENvZGUpOworfQorCiBDb2RlQmxvY2s6On5Db2RlQmxvY2so
KQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtMTUxOSwzOSArMTYxMCw0MCBAQCB2b2lkIENv
ZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0
aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29sIGlzRWxpZ2libGVGb3JMTEludERv
d25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwotICAgIG1faXNFbGlnaWJs
ZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBp
cyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2Ug
YXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFs
bCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAgICBpZiAoT3B0aW9uczo6dXNlTExJ
bnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGlu
Zyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBv
cHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wdGltaXplZENvZGVC
bG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxl
Rm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVs
bHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJ
bnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5s
aW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1f
ZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0
cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhh
bmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50Ojpo
YW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKLQot
ICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUg
YmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwot
ICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBy
dW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNv
ZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0
dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgotICAgICAgICAgICAgICAgICAg
ICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYKKy8vIE9PUFM6IHJlY29uY2lsZSB0aGlzCisv
LyNpZiBFTkFCTEUoSklUKQorLy8gICAgYm9vbCBpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUg
PSBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZTsKKy8vICAgIG1faXNFbGlnaWJsZUZvckxM
SW50RG93bmdyYWRlID0gZmFsc2U7CisvLyAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5v
dCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRl
bXB0CisvLyAgICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFuZCByZWluc3RhbGwg
TExJbnQgY29kZSB0byBzYXZlIEpJVCBtZW1vcnkuCisvLyAgICBpZiAoT3B0aW9uczo6dXNlTExJ
bnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGlu
Zyh0aGlzKSkgeworLy8gICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9
IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKy8vICAgICAgICAgICAgaWYgKCFvcHRpbWl6ZWRD
b2RlQmxvY2stPm1fb3NyRXhpdENvdW50ZXIpIHsKKy8vICAgICAgICAgICAgICAgIGlmIChpc0Vs
aWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKKy8vICAgICAgICAgICAgICAgICAgICBtX2ppdENv
ZGUgPSBudWxscHRyOworLy8gICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRyeXBvaW50
KHRoaXMpOworLy8gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25I
YW5kbGVycygpOyBpKyspIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5r
ZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlv
bkhhbmRsZXIoaSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5k
bGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKKy8vICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5r
ZWRIYW5kbGVyLnRhcmdldCkucHRyKCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRs
ZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlv
bkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5j
b2RlKCkpKTsKKy8vICAgICAgICAgICAgICAgICAgICB9CisvLworLy8gICAgICAgICAgICAgICAg
ICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgLy8g
SXQncyBzYWZlIHRvIGNsZWFyIHRoZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkgYWxsIGNvbXBpbGVyIHRocmVhZHMKKy8vICAgICAgICAgICAgICAgICAgICAv
LyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUg
b3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKKy8vICAgICAgICAgICAgICAg
ICAgICAvLyBwYXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0
aGUgdmFyaW91cyAqaW5mb3MuCisvLyAgICAgICAgICAgICAgICAgICAgcmVzZXRKSVREYXRhKCk7
CisvLyAgICAgICAgICAgICAgICB9IGVsc2UKKy8vICAgICAgICAgICAgICAgICAgICBtX2lzRWxp
Z2libGVGb3JMTEludERvd25ncmFkZSA9IHRydWU7CisvLyAgICAgICAgICAgIH0KKy8vICAgICAg
ICB9CisvLyAgICB9CisvLworLy8jZW5kaWYKICAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRC
ZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNo
ZXMoKTsKQEAgLTE1NzksNyArMTY3MSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseSgKICAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6Ci0g
ICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOworICAgICAg
ICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNvdW50KCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAg
IGNvdW50ID0gbV9qaXRFeGVjdXRlQ291bnRlci5jb3VudCgpOwpAQCAtMzExOCw3ICszMjEwLDcg
QEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1l
UmVnaXN0ZXJDb3VudEZvcih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMzM0LDEzICszNDI2LDEzIEBA
IEJpbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2gg
KHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNh
c2Ugb3BfbXVsOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJu
ICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTMzNTIsMTEgKzM0NDQsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6dW5hcnlBcml0aAogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGNhc2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0zNTA2LDI4ICszNTk4LDE5IEBAIHN0ZDo6b3B0aW9uYWw8
Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKIH0K
IAotaW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkK
LXsKLSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXplKCkpIHsKLSAg
ICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xk
OwotICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkICog
NDsKLSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8g
MjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRocmVzaG9s
ZDsKLX0KKy8vdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkKKy8veworLy8gICAgbV9s
bGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlv
bnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKKy8vfQogCi12b2lkIENv
ZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBDb2RlQmxvY2s6OmppdFNvb24oKQogewot
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklU
KE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKKyAgICBtX2xs
aW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCh1bmxpbmtlZENvZGVCbG9jaygpLT50
aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7CiB9
CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXROZXh0SW52
b2NhdGlvbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0
aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7Cisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAK
IGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcgQEAgY2xhc3MgTWV0YWRhdGFUYWJsZTsKIGNs
YXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBjbGFz
cyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAogREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEpOwogCkBAIC0x
NTgsNyArMTU5LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUo
KSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1Q
YXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgog
ICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAK
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1f
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE3MCw2IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAg
dW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVj
a3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRy
ZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBh
bHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0
ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzNCw2IEBAIHB1YmxpYzoKICAgICBib29s
IGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxs
Vk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1
YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5n
IGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBg
dGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAgICBy
ZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2
Niw4ICsyNTgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0SUNTdGF0dXNNYXAoSUNTdGF0dXNN
YXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBPT1BTOiBtb3ZlIGFy
aXRobWV0aWMgSUNzIGFuZCBzd2l0Y2ggdGFibGVzIG91dCBvZiBoZXJlLCBhbmQgb250byBKSVRD
b2RlLgogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
CiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgICAgIEJh
ZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CkBAIC0yODIsOSArMjc2LDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFw
OwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAg
ICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAg
SklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1f
aml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29u
c3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3Rh
bnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVD
b2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElL
RUxZKG1faml0RGF0YSkpCkBAIC0yOTMsNiArMjkxLDggQEAgcHVibGljOgogICAgIH0KICAgICBK
SVREYXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVREYXRhKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9qaXREYXRhKTsgfQorCiAgICAgSklUQWRkSUMqIGFkZEpJVEFk
ZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwogICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5h
cnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFBy
b2ZpbGUqKTsKQEAgLTMyMiwxNiArMzIyLDcgQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9y
IGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4K
ICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNv
ZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRD
b2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShq
aXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0g
ICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAg
IHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBj
b25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKICAgICB2b2lkIHNldFBDVG9Db2RlT3Jp
Z2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpv
cHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwpAQCAtNDcyLDEwICs0NjMsMTIg
QEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5hbWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIp
OwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2Zp
bGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgp
KTsKICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKTsKKyAgICAg
ICAgCiAgICAgfQogCiAgICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudCh1
bnNpZ25lZCBhcmd1bWVudEluZGV4KQpAQCAtNTcxLDYgKzU2NCw3IEBAIHB1YmxpYzoKICAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29u
c3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdl
dCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHJl
Zyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFu
dFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKGluZGV4KTsg
fQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0YW50UmVnaXN0ZXJzKSAr
IGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5T2Zmc2V0KCk7IH0KIAog
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1cm4g
bV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJPZkZ1bmN0aW9u
RGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC02MDAsNiArNTk0
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKICAgICAg
ICAgcmV0dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAg
IH0KKyAgICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJs
ZUluZGV4KTsKKyAgICB2b2lkKiBiYXNlbGluZUpJVENvbnN0YW50UG9vbCgpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wu
ZGF0YSgpOworICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIHVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTYx
MCw2ICs2MTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7
CiAgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKICAgICB9CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRj
aEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZV
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNv
bnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZShpbnQgdGFibGVJbmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9CkBAIC02MzIsMjEgKzYzMywyMCBAQCBwdWJs
aWM6CiAKICAgICBib29sIGNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRB
bmRTZXQodGhpcyk7CisgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNoZWNr
SWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOwogICAgIH0KIAogICAgIHZvaWQgZG9udEpJ
VEFueXRpbWVTb29uKCkKICAgICB7Ci0gICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5kZWZl
ckluZGVmaW5pdGVseSgpOworICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmRlZmVySW5k
ZWZpbml0ZWx5KCk7CiAgICAgfQogCi0gICAgaW50MzJfdCB0aHJlc2hvbGRGb3JKSVQoaW50MzJf
dCB0aHJlc2hvbGQpOwotICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKTsKICAgICB2b2lkIGppdFNv
b24oKTsKKyAgICB2b2lkIGppdE5leHRJbnZvY2F0aW9uKCk7CiAKICAgICBjb25zdCBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICAgICAgcmV0dXJuICptX2xs
aW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgfQogCiAgICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6dHVw
bGU8U3RydWN0dXJlSUQsIHVuc2lnbmVkPiwgRml4ZWRWZWN0b3I8TExJbnRQcm90b3R5cGVMb2Fk
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0Y2hwb2ludE1hcDsKQEAg
LTc5Nyw2ICs3OTcsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMo
KSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dl
clJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQg
YWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVC
cmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQpAQCAtODM4LDYgKzgzOSw3IEBAIHB1
YmxpYzoKICAgICBtdXRhYmxlIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwogCiAgICAgYm9vbCBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQgYmVjYXVzZSB0aGUgSklU
IHdhbnRzIHRvIHN0b3JlIHRvIGl0LgorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91
bGRBbHdheXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7IH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdW5zaWdu
ZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCkBA
IC05MDcsMTEgKzkwOSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
TWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0
YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1Bv
aW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9u
c1Jhd1BvaW50ZXIpOyB9CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emlu
Z0Vhcmx5UmV0dXJuKCkKLSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVp
cmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0gICAgICAgIHJldHVy
biAhbV91bmxpbmtlZENvZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAgfQorICAgIGJvb2wg
bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7IHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKTsg
fQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CkBA
IC0xMDA5LDcgKzEwMDcsOSBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAg
bV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENv
ZGU7CiAjaWYgRU5BQkxFKEpJVCkKK3B1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SklURGF0
YT4gbV9qaXREYXRhOworcHJpdmF0ZToKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAg
IC8vIFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFz
IHRoZSBwcm9maWxlZCBjb2RlIGJsb2NrCkBAIC0xMDI4LDcgKzEwMjgsNyBAQCBwcml2YXRlOgog
CiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAgICBC
YXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9Owog
CiAgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAgICAg
dWludDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgyNjIyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJh
c2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlVubGlua2VkTWV0YWRhdGFUYWJsZUlubGluZXMuaCIK
QEAgLTQwLDkgKzQxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29u
cwogICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICAgICAg
bV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0
YWRhdGEubV9wcm9maWxlLCBmYWxzZSk7IH0pOwotCiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9X
SVRIX1ZBTFVFX1BST0ZJTEUoVklTSVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0
YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCkBA
IC01Nyw3ICs1Niw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMK
ICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAg
ICAgfSk7CiAgICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC05
OSw0ICs5NywyNCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvCiAg
ICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZU19JTkxJTkUgY29uc3QgSklUQ29kZU1h
cCYgQ29kZUJsb2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRD
b2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFwOworfQorCitBTFdBWVNfSU5MSU5F
IFNpbXBsZUp1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQg
dGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2Rl
LmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5M
SU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBU
YWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4o
bV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwor
fQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5o
CShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcChDb2Rl
QmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQogICAgIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAko
cmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1
dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAgYm9vbCBF
eGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKLSAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9jayA/IGNv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQpOworICAgIHRocmVz
aG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAgICBtX2NvdW50ZXIg
PSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHJl
dmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRp
b25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAg
IHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRoaXMsIGNo
ZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxzZS4KICAg
ICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwogICAgIGJv
b2wgaGFzQ3Jvc3NlZFRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlciA+PSAwOyB9
Ci0gICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayop
OworICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2RlQmxvY2sq
ID0gbnVsbHB0cik7CiAgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwogICAgIGRvdWJsZSBj
b3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENvdW50KSAr
IG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpAQCAtODYs
MTMgKzg2LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgVCB0aHJlc2hvbGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChUIHRocmVz
aG9sZCkKICAgICB7Ci0gICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwotICAgICAgICBpZiAo
T3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCkgJiYg
Z2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2JqZWN0LT53
ZWFrUmFuZG9tSW50ZWdlcigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3Bv
aW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBtYXhpbXVt
RXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAgIGludDMyX3QgbWF4
VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwog
ICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAgICAgICAgdGhyZXNo
b2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xkOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkocmV2
aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRN
ZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBHZXRCeUlk
TW9kZU1ldGFkYXRhVW5zZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRh
ZGF0YVVuc2V0KSA9PSAxMik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5n
dGggeworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBhcnJheVBy
b2ZpbGUpOyB9CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07CiBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsKQEAgLTg4
LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRN
b2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7IC8vIFRo
aXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
R2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhRGVm
YXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5zZXRNb2Rl
OwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1vZGU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNw
cAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
bGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NSw2ICszODUsOCBAQCBib29sIElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJ
bmxpbmU7CiB9CiAKKy8vIE9PUFM6IE1ha2UgdGhpcyBzdHVmZiB3b3JrIHdpdGggZGF0YSBpY3Mg
dG8gbm90IGFzc3VtZSBpbmxpbmUgYWNjZXNzLgorCiB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHRhcmdldCkKIHsKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkgewpAQCAtNDA0LDkgKzQwNiwxMiBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjCiB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQpCiB7CiAgICAgaWYgKGNvZGVC
bG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gT09QUzogbWFrZSBzb21lIHZlcnNpb24g
b2YgSW5saW5lQWNjZXNzIGZvciBiYXNlbGluZS4gUGVyaGFwcyBtYWtlIGl0IGRhdGEgZHJpdmVu
LiBPciBwZXJoYXBzIGhhdmUgdGhlIGNvZGUKKyAgICAgICAgLy8gYmUgc2hhcmVkIHNvbWVob3cg
YmV0d2VlbiBVbmxpbmtlZENvZGVCbG9ja3MuCisKICAgICAgICAgLy8gSWYgaXQgaXMgbm90IEdl
dEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQgKGUuZy4gR2V0QnlWYWwp
LgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGlyZWN0IGp1bXAsIGFuZCBv
bmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2RlUHRyLgotICAgICAgICBp
ZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAgICAgIGlmIChjb2RlQmxv
Y2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBzdHViSW5mby5oYXNDb25z
dGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29kZVB0ciBpcyBwb2ludGlu
ZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMgbWVhbnMgdGhhdCBJbmxp
bmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAgICAgIC8vIFdlIHJld3Jp
dGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNvZGUgb25jZSwgYW5kIGNv
bnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgogICAgICAgICAgICAgaWYg
KHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09IHN0dWJJbmZvLnNsb3dQ
YXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CkBAIC00MjEsNiArNDI2LDcg
QEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgICAgICAgICAg
ICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5raW5nIHN0dWIgY2FsbCIpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CisKICAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gdGFyZ2V0OwogICAg
ICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24gMjgyNjIyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0VfT1BFUkFU
T1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7CiAgICAg
dWludDhfdCBzZWVuTW9kZXMgeyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNl
ZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0YWRhdGEs
IHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc2Vlbk1v
ZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCShyZXZpc2lv
biAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlu
a0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJbnRDYWxs
TGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQogCiBwcml2YXRlOgogICAgIHVpbnRwdHJfdCBt
X2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0IH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0YWRhdGFUYWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgJKHJl
dmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0
YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGZ1bmMoKm1ldGFkYXRhKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBudW1FbnRyaWVzKCkKKyAgICB7CisgICAgICAg
IGF1dG8qIHN0YXJ0ID0gYml0d2lzZV9jYXN0PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdldChP
cDo6b3Bjb2RlSUQpKTsKKyAgICAgICAgYXV0byogZW5kID0gYml0d2lzZV9jYXN0PHR5cGVuYW1l
IE9wOjpNZXRhZGF0YSo+KGdldEltcGwoT3A6Om9wY29kZUlEICsgMSkpOworICAgICAgICByZXR1
cm4gZW5kIC0gc3RhcnQ7CisgICAgfQorCiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCk7CiAKICAg
ICB2b2lkIHJlZigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiAj
aW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5j
bHVkZSAiUmVwYXRjaC5oIgogCkBAIC0yODUsNiArMjg2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRo
aXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlw
ZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAg
ICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CkBAIC00MzAsNiArNDMyLDIw
NCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNo
ZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRp
YWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvKQoreworICAgIGFjY2Vzc1R5cGUgPSB1
bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZv
LnN0YXJ0OyAvLyBPT1BTOiBkbyB3ZSBuZWVkIGEgc3RhcnQgZm9yIGRhdGEgSUNzPworICAgIGRv
bmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9uOworICAgIHNsb3dQYXRo
U3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOwor
ICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5saW5rZWRT
dHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNldCgpKSk7CisgICAgY29kZU9yaWdpbiA9IENvZGVP
cmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBtX2NvZGVQdHIgPSBz
bG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vz
c1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0
aGUgc2NyYXRjaCByZWdpc3RlciBlaXRoZXIuCisgICAgICAgIHVzZWRSZWdpc3RlcnMuYWRkKEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaCk7CisgICAgfQorCisgICAgc3dpdGNoIChh
Y2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkluQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlJZERpcmVjdE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25IYXNQcml2YXRlTmFtZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0
S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlm
ICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1
dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFN
b2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRp
cmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoK
KyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHN3aXRj
aCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90
RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJp
Y3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBp
ZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1
dFByaXZhdGVOYW1lOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZv
LnByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5l
UHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVC
cmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5k
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2
YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0
ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoYWNj
ZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVE
ZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJh
c2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmll
ciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2
YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0
dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxz
ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9m
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgcHJvdG90
eXBlSXNLbm93bk9iamVjdCA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAg
ICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJh
c2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIg
PSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BS
ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRC
eUlkRGlyZWN0OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgor
ICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVn
cy50aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsK
KyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlk
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRo
aXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlk
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lz
dGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGlmIChhY2Nlc3NUeXBl
ID09IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsKQorICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxz
ZTsKKyAgICAgICAgdmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MuYnJhbmRH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyODI2
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJSb3V0
aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgi
CisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCkBAIC01Niw2ICs1Nyw3
IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlWYWwsCiAgICAg
UHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAgICBJbkJ5SWQs
CiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzgwLDggQEAgZW51
bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAorc3Ry
dWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZv
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFsaXpl
RnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBD
aGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0
IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTQ0Nyw2ICs0NTMsMTggQEAgaW5saW5l
IGF1dG8gYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bgogICAgIH0KIH0KIAorc3RydWN0IFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8geworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAg
ICBQdXRLaW5kIHB1dEtpbmQ7CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQ
dXRLaW5kIHsgUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpIH07CisgICAgRUNNQU1vZGUgZWNt
YU1vZGUgeyBFQ01BTW9kZTo6c2xvcHB5KCkgfTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXg7CisgICAgLy8gT09QUzogRG8gd2UgbmVlZCBzdGFydCBmb3IgZGF0YSBJQ3M/CisgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0OyAvLyBUaGlzIGlz
IGVpdGhlciB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJQyBmb3IgKmJ5SWQgY2FjaGVzLiBvciB0
aGUgbG9jYXRpb24gb2YgcGF0Y2hhYmxlIGp1bXAgZm9yICdpbnN0YW5jZW9mJyBjYWNoZXMuCisg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzbG93UGF0aFN0YXJ0TG9j
YXRpb247Cit9OworCiAjZWxzZQogCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCShyZXZp
c2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1w
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB2b2lkIHByaW50U3VwZXJT
YW1wbGVyU3RhdGUoKQogICAgIGRvdWJsZSBwZXJjZW50YWdlID0gMTAwLjAgKiBpbiAvIChpbiAr
IG91dCk7CiAgICAgaWYgKHBlcmNlbnRhZ2UgIT0gcGVyY2VudGFnZSkKICAgICAgICAgcGVyY2Vu
dGFnZSA9IDAuMDsKLSAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBs
ZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIlxuIik7CisgICAgZGF0YUxvZygiUGVyY2VudCB0aW1l
IGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNlbnRhZ2UsICIlXG4iKTsKIH0KIAog
dm9pZCBlbmFibGVTdXBlclNhbXBsZXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODI2MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJVbmxpbmtlZENv
ZGVCbG9jay5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAj
aW5jbHVkZSAiQ2xhc3NJbmZvLmgiCkBAIC03OCw2ICs3OSw4IEBAIFVubGlua2VkQ29kZUJsb2Nr
OjpVbmxpbmtlZENvZGVCbG9jayhWTSYKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2Fy
eShsb2NrZXIpOwogICAgICAgICBtX3JhcmVEYXRhLT5tX3ByaXZhdGVCcmFuZFJlcXVpcmVtZW50
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByaXZhdGVCcmFuZFJlcXVpcmVtZW50OjpOZWVkZWQp
OwogICAgIH0KKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhy
ZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KQEAgLTMxNiw2ICszMTksMzMgQEAgaW50IFVu
bGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2ZmcwogICAgIHJldHVybiBtX291dE9mTGlu
ZUp1bXBUYXJnZXRzLmdldChieXRlY29kZU9mZnNldCk7CiB9CiAKKyNpZiBBU1NFUlRfRU5BQkxF
RAorYm9vbCBVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQoreworICAgIC8vIE9PUFM6IGRvIHdoYXQgQ29kZUJsb2NrIGRvZXMgYW5kIG1ha2Ug
YSBoYXNoIHRhYmxlPworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50
aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkgPT0gdWlk
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KyNlbmRpZgorCitpbnQzMl90IFVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50
MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRPcHRpbWl6ZSgpKSB7CisgICAgY2Fz
ZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKKyAg
ICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7Cisg
ICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7Cisg
ICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0aHJlc2hvbGQ7Cit9
CisKKwogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcygpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWV0YWRhdGEtPmlzRmluYWxpemVkKCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTIgQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJBcnJh
eVByb2ZpbGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAi
Q29kZVR5cGUuaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorI2luY2x1ZGUgIkV4ZWN1
dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCiAjaW5jbHVk
ZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCkBAIC02NCw2ICs2Niw3
IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGluZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0
YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29uc3RhbnQgOiBpbnQzMl90OwogCkBAIC0x
NzUsNiArMTc4LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJy
aWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVn
aXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
Y29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50
UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9j
b25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29u
c3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIxMSwxNSBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJT
Y3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNl
clNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMo
KS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0
cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigpOworICAgICAgICBjb25z
dCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0
aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGlu
c3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9u
ID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsK
KyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQor
ICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlv
bnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0
IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDEwICszNDcsMjEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9tZXRhZGF0YS0+c2l6ZUluQnl0ZXMoKTsKICAgICB9CiAKKyAgICBib29s
IGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKKyAgICB7CisgICAg
ICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUg
bG9vcHMgdGhleSBydW4uCisgICAgICAgIHJldHVybiAhaXNCdWlsdGluRnVuY3Rpb24oKTsKKyAg
ICB9CiAgICAgdm9pZCBhbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKCk7CiAgICAgVW5saW5rZWRWYWx1
ZVByb2ZpbGUmIHVubGlua2VkVmFsdWVQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBt
X3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9CiAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUmIHVubGlu
a2VkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2FycmF5UHJvZmlsZXNb
aW5kZXhdOyB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGJvb2wgaGFzSWRlbnRpZmllcihV
bmlxdWVkU3RyaW5nSW1wbCopOworI2VuZGlmCisKKyAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJ
VChpbnQzMl90IHRocmVzaG9sZCk7CisKIHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9j
ayhWTSYsIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYsIE9wdGlv
blNldDxDb2RlR2VuZXJhdGlvbk1vZGU+KTsKIApAQCAtMzk3LDYgKzQyMSw3IEBAIHByaXZhdGU6
CiAgICAgdW5zaWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAg
Q29uY3VycmVudEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91
bmxpbmtlZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVy
ZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEzLDYgKzQz
OCw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBt
X2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFjZSB0byBz
dG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5
QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0
aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBt
X2V4aXRQcm9maWxlOwpAQCAtNDU4LDYgKzQ4NiwzMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAg
fQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZz
ZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNl
dCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7
CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxl
KCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZFVu
YXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fdW5h
cnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV91bmFyeUFyaXRoUHJvZmlsZXMuYXBw
ZW5kKFVuYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkp
IHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9m
aWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQ
cm9maWxlc1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1
dGVDb3VudGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOyB9CiAKIHByaXZhdGU6
CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjUsNiArNTE3LDcgQEAgcHJpdmF0ZToKICAgICBPdXRP
ZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZlY3RvcjxFeHByZXNzaW9uUmFu
Z2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBt
X2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRWYWx1ZVByb2Zp
bGU+IG1fdmFsdWVQcm9maWxlczsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZEFycmF5UHJvZmls
ZT4gbV9hcnJheVByb2ZpbGVzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAkocmV2aXNp
b24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAgcHVibGlj
OgogICAgIGJvb2wgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0
dXJuIG1fY29kZUJsb2NrLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0KICAg
ICBib29sIGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmhhc0No
ZWNrcG9pbnRzKCk7IH0KICAgICBib29sIGhhc1RhaWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZUJsb2NrLT5oYXNUYWlsQ2FsbHMoKTsgfQorICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRo
UHJvZmlsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKTsg
fQorICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkgeyByZXR1cm4gbV9jb2RlQmxv
Y2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCk7IH0KIAogICAgIC8vIFVwZGF0aW5nIFVubGlua2Vk
Q29kZUJsb2NrLgogICAgIHZvaWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1fY29kZUJsb2NrLT5z
ZXRIYXNDaGVja3BvaW50cygpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZpc2lvbiAyODI2MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxlKTsKICAgICB9CiAKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZzZXRJbk1ldGFkYXRh
VGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9pc0Zp
bmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9IG1faXMzMkJpdCA/
IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRhYmxlMTYoKVtPcGNv
ZGU6Om9wY29kZUlEXTsKKyAgICAgICAgYmFzZVR5cGVPZmZzZXQgPSByb3VuZFVwVG9NdWx0aXBs
ZU9mKGFsaWdub2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSksIGJhc2VUeXBlT2Zmc2V0KTsK
KyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKHR5cGVuYW1lIE9wY29kZTo6
TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAgdW5zaWduZWQgbnVtRW50cmllcygpOwogCkBAIC0xMDcs
NiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7
CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9m
ZnNldDE2ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTMg
KzQ1LDExIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRzQXJndW1lbnQ7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNwZWNGYWlsQnVja2V0cyA9IDE7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRleE1hc2sgPSBudW1iZXJP
ZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgdG90YWxOdW1iZXJP
ZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNGYWlsQnVja2V0czsKICAg
ICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQotICAgICAgICAgICAgbV9idWNr
ZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgIGNsZWFyQnVja2V0
cygpOwogICAgIH0KICAgICAKICAgICBFbmNvZGVkSlNWYWx1ZSogc3BlY0ZhaWxCdWNrZXQodW5z
aWduZWQgaSkKQEAgLTU5LDYgKzU3LDEyIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAg
ICAgICAgQVNTRVJUKG51bWJlck9mQnVja2V0cyArIGkgPCB0b3RhbE51bWJlck9mQnVja2V0cyk7
CiAgICAgICAgIHJldHVybiBtX2J1Y2tldHMgKyBudW1iZXJPZkJ1Y2tldHMgKyBpOwogICAgIH0K
KworICAgIHZvaWQgY2xlYXJCdWNrZXRzKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQorICAgICAgICAgICAgbV9idWNr
ZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgfQogICAgIAogICAgIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tldCkgY29uc3QKICAgICB7CkBA
IC0xMjMsOCArMTI3LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhl
IG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlz
bid0IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkBAIC0x
MzksNyArMTQxLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICAKICAgICAg
ICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAgICBFbmNvZGVkSlNWYWx1
ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAgU3BlY3VsYXRlZFR5cGUg
bV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE2MSw2ICsxNjMsNyBAQCBzdHJ1Y3QgVmFs
dWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGUgOiBw
dWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPiB7CiAgICAgVmFsdWVQ
cm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+KCkgeyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQogfTsKIAogc3RydWN0IFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTk4LDcgKzE1OTgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFVu
YXJ5CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wTm90Pihkc3QsIHNyYyk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3Qs
IHNyYywgdHlwZSk7CisgICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0eXBl
LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2Ugb3BfYml0bm90OgogICAgICAgICBlbWl0VW5hcnlPcDxPcEJpdG5vdD4oZHN0LCBz
cmMpOwpAQCAtMTY5NiwxMyArMTY5NiwxMyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFR5cGVPCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5jKFJl
Z2lzdGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNEc3QpOworICAg
IE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9m
aWxlKCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0RGVjKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcERlYzo6ZW1pdCh0
aGlzLCBzcmNEc3QpOworICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2st
PmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjgyLDcg
KzY4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmVnaXN0ZXJJRCo+CiAgICAg
ICAgIGVtaXRCaW5hcnlPcChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlZ2lz
dGVySUQqIHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcykKICAgICAgICAgewotICAgICAgICAgICAg
QmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcyk7CisgICAgICAgICAg
ICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzLCBtX2NvZGVCbG9j
ay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICAgICAgcmV0dXJuIGRzdDsKICAg
ICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNw
cAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDYgQEAgdm9pZCogcHJlcGFyZU9T
UkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKgogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwotICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRD
b2RlTWFwKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCkt
PmlzU3RpbGxWYWxpZCk7CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9ERkcoKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxv
Y2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIKQEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFu
ZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxsSGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1
ZTsKICAgICBzd2l0Y2ggKGppdC5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBK
SVRUeXBlOjpERkdKSVQ6Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9u
Q291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgp
LCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9u
Q291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRp
ZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xv
YmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJU
aWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0zMDksMTAgKzMxMCwxNSBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMo
Q0NhbGxIZWxwZXJzCiAgICAgICAgICAgICB0cnVlQ2FsbGVyID8gQXNzZW1ibHlIZWxwZXJzOjpV
c2VFeGlzdGluZ1RhZ1JlZ2lzdGVyQ29udGVudHMgOiBBc3NlbWJseUhlbHBlcnM6OkNvcHlCYXNl
bGluZUNhbGxlZVNhdmVkUmVnaXN0ZXJzRnJvbUJhc2VGcmFtZSwKICAgICAgICAgICAgIEdQUklu
Zm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDQpOwogCisgICAgICAgIC8v
IE9PUFM6IENvbnNpZGVyIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIGJhc2VsaW5lIHBi
L21ldGFkYXRhIHJlZ2lzdGVycwogICAgICAgICBpZiAoY2FsbGVySXNMTEludCkgewogICAgICAg
ICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGlu
ZUNvZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRh
ZGF0YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29k
ZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSk7CiAgICAgICAgICAg
ICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBjYWxsZWVTYXZlU2xvdChp
bmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQ
UikpOworICAgICAgICB9IGVsc2UgaWYgKHRydWVDYWxsZXIpIHsKKyAgICAgICAgICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tG
b3IoKnRydWVDYWxsZXIpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgp
KSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgSklU
OjpzX21ldGFkYXRhR1BSKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5iYXNlbGluZUpJVENv
bnN0YW50UG9vbCgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNv
ZGVCbG9jaywgSklUOjpzX2NvbnN0YW50c0dQUikpOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQpAQCAtNDA0LDYgKzQxMCw5IEBAIHZvaWQg
YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSksIExMSW50OjpS
ZWdpc3RlcnM6OnBjR1BSKTsKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFn
Z2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2Ugewor
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9y
RXhpdC0+bWV0YWRhdGFUYWJsZSgpKSwgSklUOjpzX21ldGFkYXRhR1BSKTsKKyAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPmJhc2Vs
aW5lSklUQ29uc3RhbnRQb29sKCkpLCBKSVQ6OnNfY29uc3RhbnRzR1BSKTsKKwogICAgICAgICBj
b2RlQmxvY2tGb3JFeGl0LT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwogCiAgICAgICAgIEJ5
dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzAs
NiArNzMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAg
ICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxl
ZVRhZ0dQUiwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdz
LnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBh
c3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFy
YW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAg
ICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IGkgKyAxKTsKQEAgLTg4OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAg
ICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0gewogICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5z
ZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzQsNiArODM0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZs
ZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0
SlMpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJn
cyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJn
czsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAgICAg
RWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CkBA
IC05ODUsNyArOTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChp
c1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxG
YXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKICAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxs
RnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcgKzM5ODUsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAgIEpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwg
Y29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1c2VkUmVnaXN0ZXJz
LAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2lu
LCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVzZWRSZWdpc3RlcnMsCiAg
ICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwgSlNWYWx1ZVJlZ3M6OnBh
eWxvYWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5m
b0dQUik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogCkBA
IC0xNDc3Myw3ICsxNDc3Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFk
b3dDaGkKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIo
KSk7CiAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dT
aGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJl
ZywgbV9qaXQuY29kZUJsb2NrKCksIGNhbGxTaXRlSW5kZXgpOworICAgIG1faml0LmxvZ1NoYWRv
d0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUlu
ZGV4KTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MzE3LDcgKzQzMTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBwYXJhbXMuZ3BT
Y3JhdGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAgYXV0byBnZW5lcmF0b3Ig
PSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgaml0
LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNp
dGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgaml0LmNvZGVC
bG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRl
eCwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgcGFyYW1zLnVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1Yklu
Zm9HUFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5SXNT
eW1ib2wgPSB0cnVlOwpAQCAtMTAyODUsNiArMTAyODUsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxsb2Nh
dGVkQXJnczsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5h
cHBlbmQoVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSkpOwogICAgICAgICAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAg
ICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5z
ZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0g
aml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50aWNOb2RlT3JpZ2luKTsKQEAg
LTEwNDQzLDEzICsxMDQ0NCwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgpKTsK
IAogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1BcmdzOwor
ICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBz
aHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKIAog
ICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9j
aygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDAp
OwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1Bh
dGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVn
VDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVm
ZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAg
ICAgIH0pOwpAQCAtMTA3OTIsNyArMTA3OTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAg
ICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6
VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAg
ICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMTA3Myw3ICsxMTA3NSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNU
YWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZv
OjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxD
YWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjgyNjIyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpA
QCAtNDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkKICAg
ICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZp
eCwgZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgs
IGZpZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVzLm1hcCBkbyB8ZmllbGROYW1lfAor
ICAgICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVs
ZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisgICAgICAgICAgICBlbmQuam9pbigi
XG4iKQorICAgICAgICBlbmQKKworICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZp
ZWxkcywgZmllbGROYW1lcykKICAgICAgICAgICAgIGZpZWxkcy5tYXAgZG8gfGZpZWxkLCB0eXBl
fAogICAgICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAotICAgICAgICAgICAgICAg
ICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywg
dHlwZSl9XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9u
IHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUsIGZpZWxkTmFtZXMpfVxu
I3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAi
I3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAgICAgICAg
ICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1l
cy5wdXNoKGZpZWxkTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50
b19zfSBtXyN7ZmllbGROYW1lfTsiCiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBl
bmQuam9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0Rmll
bGRzKCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkTmFtZXMgPSBbXQorICAgICAg
ICBwcmVmaXggPSAiICAgICAgICAiCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMocHJl
Zml4LCBAZmllbGRzLCBmaWVsZE5hbWVzKQorICAgICAgICBmaWVsZHMgPSBmaWVsZHMgKyAiXG4i
ICsgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCiAKICAgICAg
ICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAmJiAobm90IEBpbml0aWFs
aXplcnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTgsOCArNjk4LDEz
IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXMKIAogdm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
aW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2Jq
ZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdH
bG9iYWxPYmplY3Qodm0sIGluZm8pOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZp
cnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIENhbGxMaW5rSW5mbyog
aW5mbykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsK
ICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtUYXNrKFs9LCAmdm1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZp
c2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIwLDYgKzE3MjAsNyBAQCBwdWJsaWM6CiAgICAgfQog
ICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBDYWxs
TGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxP
YmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsKICAgICAKICAgICB2b2lkIG1ha2VTcGFjZU9uU3Rh
Y2tGb3JDQ2FsbCgpOwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCYXNlbGluZUpJVENvZGUuaCIKKworI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUg
Ikp1bXBUYWJsZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitKSVRBZGRJQyogTWF0aElDSG9sZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmls
ZSk7IH0KK0pJVE11bElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsg
fQorSklUU3ViSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitK
SVROZWdJQyogTWF0aElDSG9sZGVyOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorCit2b2lk
IE1hdGhJQ0hvbGRlcjo6YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCit7CisgICAg
bV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICBtX211bElDcyA9IFdURk1v
dmUob3RoZXIubV9tdWxJQ3MpOworICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lD
cyk7CisgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKK30KKworQmFzZWxp
bmVKSVRDb2RlOjpCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgIDogRGlyZWN0SklUQ29k
ZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisg
ICAgLCBNYXRoSUNIb2xkZXIoKQoreyB9CisKK0Jhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklU
Q29kZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJK
SVRDb2RlLmgiCisjaW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Ly9jbGFzcyBKSVRBZGRJQzsKKy8vY2xhc3MgSklUTXVsSUM7CisvL2NsYXNzIEpJVFN1YklDOwor
Ly9jbGFzcyBKSVROZWdJQzsKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVuYXJ5
QXJpdGhQcm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3Qg
U2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3MgTWF0aElD
SG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90
aGVyKTsKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Cisg
ICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1
YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRk
SklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworICAgIC8qCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6
OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAg
SklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJu
IGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJh
dG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5l
cmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRNdWxJQyogYWRk
TWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVsSUMo
cHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
ID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVn
R2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5hcnlB
cml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZh
bHVlPjo6dHlwZT4KKyAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSog
cHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKyAgICAqLworCitwcml2
YXRlOgorICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBtX211
bElDczsKKyAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJhZzxKSVRTdWJJQz4gbV9z
dWJJQ3M7Cit9OworCitjbGFzcyBKSVRDb25zdGFudFBvb2wgeworcHVibGljOgorICAgIHVzaW5n
IENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsK
KyAgICAgICAgR2xvYmFsT2JqZWN0LAorICAgICAgICBDYWxsTGlua0luZm8sCisgICAgICAgIFN0
cnVjdHVyZVN0dWJJbmZvLAorICAgICAgICBGdW5jdGlvbkRlY2wsCisgICAgICAgIEZ1bmN0aW9u
RXhwciwKKyAgICB9OworCisgICAgc3RydWN0IFZhbHVlIHsKKyAgICAgICAgLy8gT09QUzogTWFr
ZSB0aGUgcG9pbnRlciBwYWNrZWQuCisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgdm9pZCog
cGF5bG9hZDsKKyAgICB9OworCisgICAgSklUQ29uc3RhbnRQb29sKCkgPSBkZWZhdWx0OworICAg
IEpJVENvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworICAgIEpJVENv
bnN0YW50UG9vbCYgb3BlcmF0b3I9KEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisKKyAg
ICBDb25zdGFudCBhZGQoVHlwZSB0eXBlLCB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cikKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAg
bV9jb25zdGFudHMuYXBwZW5kKFZhbHVlIHsgdHlwZSwgcGF5bG9hZCB9KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRzLnNpemUoKTsgfQorICAgIFZhbHVlIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50c1tpXTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxWYWx1ZT4gbV9jb25z
dGFudHM7Cit9OworCisKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRD
b2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBCYXNlbGluZUpJVENvZGUo
Q29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhB
cml0eUNoZWNrKTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisKKyAgICBCYWc8
VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICBCYWc8Q2FsbExpbmtJ
bmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOyAvLyBPT1BTOiBtYWtlIHN1cmUgd2UgdmlzaXQgdGhl
c2Ugc29tZWhvdy4gT3IgYXNzZXJ0IHdlIGRvbid0IGhhdmUgdG8sIHNpbmNlIHRoZXkncmUgdmly
dHVhbCBjYWxscy4KKyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtl
ZFN0dWJJbmZvczsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVt
cFRhYmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlczsKKyAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFu
dFBvb2wgbV9jb25zdGFudFBvb2w7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9u
IDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFu
Ojpjb2RlU2l6ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6
ZmluYWxpemUoKQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFs
aXplT25NYWluVGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQu
ZmluYWxpemVPbk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7
CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVO
VChtX2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2
aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6
bG9nU2hhZG93Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93
UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsK
IH0KIAotdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJl
ZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVC
bG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3Rv
cmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkp
OwotICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cihjb2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVD
VF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0K
IHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BS
UmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRj
aDIpCiB7CiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNr
ZW4oKTsKQEAgLTcyLDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dD
aGlja2VuUGEKICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQ
UikpOwogfQogCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2Fs
bEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFj
a2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNv
ZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxs
ZWUpKSk7CisgICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBz
dG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFk
b3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IGNvZGVCbG9jaykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJp
dHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9n
U2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3Mg
dGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRl
SW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldElt
cGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRl
eCk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChH
UFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBH
UFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9n
U2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3Bl
LCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1p
dEpJVENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVy
ZSwgU2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFy
KiBkZXNjcmlwdGlvbikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04
NDAsNyArODQwLDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIg
YWxsIHZvbGF0aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9u
IHRoZSB0b3Agb2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAg
ICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0
LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywg
R1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlz
UmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcg
c2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5k
ZXgpOworICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9j
aywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQg
YSBwb2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tl
dC4KICAgICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93
UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURh
dGEuY3BwCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVl
U2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNh
dmVSZWdpc3RlcnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lk
IENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVn
aXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3Rl
clNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lz
dGVycygpIH07Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxv
Y2F0aW9ucyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0
KGkpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVT
aHVmZmxlRGF0YS5oCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0Mywx
MyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWdu
ZWQgbnVtTG9jYWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsg
VUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8g
T24gb3VyIG1hY2hpbmUgZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1h
cDxWYWx1ZVJlY292ZXJ5PiByZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVy
IHsgSW52YWxpZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMo
Q29kZUJsb2NrKik7CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVn
aXN0ZXJBdE9mZnNldExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwog
fTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXIuY3BwCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENh
bGxGcmFtZVNodWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkK
ICAgICAsIG1fb2xkRnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXpl
SW5SZWdpc3RlcnMsIG51bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkg
KyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxp
Z25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAgICAg
ICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBh
cmFtZXRlcnMoKSkpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnMgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5u
dW1QYXJhbWV0ZXJzKSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVycwogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25G
cmFtZShkYXRhLmFyZ3Muc2l6ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdG
cmFtZVNpemUgLSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVy
cyhSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0
YS5udW1QYXNzZWRBcmdzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVy
cykKIHsKICAgICAvLyBXZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgog
ICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkK
QEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFp
bENhCiAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwg
bV9uZXdGcmFtZUJhc2UpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRP
SyA9CiAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWws
IG1fbmV3RnJhbWVCYXNlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAgIG1faml0LmFk
ZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSAtIDEgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNl
KTsKICAgICBtX2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0Fs
aWdubWVudFJlZ2lzdGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVC
YXNlLCBtX25ld0ZyYW1lQmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlci5oCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2
ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAg
ICAgICAgIGRhdGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFz
c2VkQXJncyA9IG1fbnVtUGFzc2VkQXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0g
bV9udW1QYXJhbWV0ZXJzOwogICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVn
aXN0ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRh
dGEuYXJncy5yZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXJnQ291bnQoKTsgKytpKQpAQCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBwZXJmb3JtU2FmZVdyaXRlcygpOwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJn
cyB7IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVgg
fTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDog
SlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0s
IG51bGxwdHIpCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9s
YWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQog
ICAgICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJ
VDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1p
dFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOwor
ICAgIG1fcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVC
bG9jayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkK
QEAgLTkwLDggKzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAg
IHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0
aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJl
c3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBz
a2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlv
bnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwg
Q29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVT
YXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgp
LnRvcEVudHJ5RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMjEgQEAgdm9pZCBKSVQ6OmVtaXROb3Rp
ZnlXcml0ZShXYXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJ
bnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9p
bnRlclRvU2V0KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBv
aW50ZXJUb1NldCkKIHsKKyAgICAvLyBPT1BTOiBUYWtlIGEgYm9vbGVhbiBvciBzb21ldGhpbmcg
c2F5aW5nIGlmIHdlIGNhbiBiZSBudWxsLgorICAgIGF1dG8gb2sgPSBicmFuY2hUZXN0UHRyKFpl
cm8sIHBvaW50ZXJUb1NldCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRk
cmVzcyhwb2ludGVyVG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQg
SklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKK3ZvaWQg
SklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVn
IHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNv
bHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLT52YXJSZWFkT25seVdhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRy
dXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9i
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykg
eworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkUHRy
KEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zh
clJlYWRPbmx5V2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRP
ZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9CiAKIHZv
aWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQpAQCAtMTI5LDcgKzEzOCw3IEBAIHZv
aWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJM
RUQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJl
Z1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxp
bmsodGhpcyk7CkBAIC0xODEsMjEgKzE5MCw0MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2Fs
bChjb25zdCBJbnN0cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6
OmVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAg
IFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90
OjpjYWxsZWUsIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlv
bjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhh
c0V4ZWN1dGFibGUgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3MocmVzdWx0LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVu
Y3Rpb246OnJhcmVEYXRhVGFnKSwgcmVzdWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhp
cyk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNv
ZGVCbG9ja0ZvckNvbnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tG
b3JDYWxsKCkpLCByZXN1bHQpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAg
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KTsKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogewogICAgIGlmIChK
SVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2Nv
ZGVCbG9jaywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9wcm9maWxl
ZENvZGVCbG9jaywgIlxuIik7CiAgICAgCiAgICAgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAg
ICBqaXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgpOwogICAgIAotICAgIGF1dG8mIGluc3RydWN0
aW9ucyA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKLSAgICB1bnNpZ25lZCBpbnN0cnVj
dGlvbkNvdW50ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBhdXRv
JiBpbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKKyAg
ICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpOwogCiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAKLSAgICBW
TSYgdm0gPSBtX2NvZGVCbG9jay0+dm0oKTsKICAgICBCeXRlY29kZUluZGV4IHN0YXJ0Qnl0ZWNv
ZGVJbmRleCgwKTsKKworICAgIC8vIE9PUFM6IE1heWJlIG9ubHkgZG8gdGhpcyBpZiB3ZSBkaXNh
YmxlIHNoYXJpbmcgc29tZWhvdz8KKyAgICAvKgorICAgIFZNJiB2bSA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPnZtKCk7CiAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9j
b2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+
aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0pKSkgewogICAgICAgICAvLyBXZSBj
YW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNv
ZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KICAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291
bGQgYmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQgd2Fu
dHMgdG8KQEAgLTIzNiw2ICsyNjUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgKi8KIAogICAgIG1fYnl0
ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9u
Q291bnQ7ICkgewpAQCAtMjc4LDggKzMwOCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxp
bmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQm
IGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENh
bGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklU
IFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAi
LCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgfQpAQCAtNTI3LDcgKzU1Nyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29k
ZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24g
PSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsK
KyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAg
ICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBk
YXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9yICIsIG1fYnl0ZWNv
ZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CkBAIC01NDUsOCAr
NTc1LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBp
ZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewogICAg
ICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAg
ICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAg
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2Rl
QmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZz
ZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVy
KGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
fQpAQCAtNjc0LDU1ICs3MDQsNTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2Vz
KCkKICNlbmRpZgogfQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25z
dGFudFBvb2xSZWdpc3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDAp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRP
ZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6ZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZl
c0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOworfQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhK
SVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwg
bGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgLy8gT09QUzogTWF5
YmUgdGhpcyBzaG91bGQgYmUgZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJsb2NrPworICAgIERGRzo6
Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxl
dmVsKCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxl
OgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRp
bWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0g
ZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNh
c2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0g
dHJ1ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAg
IG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7Ci0g
ICAgY2FzZSBHbG9iYWxDb2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToKLSAgICBjYXNlIEV2YWxD
b2RlOgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxz
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAgIC8vIFdl
IGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBh
biB1bmlubGluZWFibGUgY2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNl
cnZhdGlvbi4KLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9
IGNhbklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29kZUJsb2Nr
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+
bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJs
b2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0
b3I8U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1
bXBUYWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0
cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVK
SVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3Ry
aW5nSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1
bXBUYWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAg
IG1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV91bmxp
bmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAg
ICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4
ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtF
TFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKQotICAg
ICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX2NvZGVC
bG9jayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8ICht
X3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGlu
ZUZvclByb2ZpbGVyKCkpKSkgeworICAgICAgICAvLyBPT1BTOiBidWlsZCBhIGRpc2Fzc2VtYmxl
ciBvZmYgdW5saW5rZWQgY29kZSBibG9jaworICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VV
bmlxdWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICB9CiAgICAg
aWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpIHsKKyAgICAgICAgLy8g
T09QUzogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiB1bmxpbmtlZCBjb2RlIGJsb2Nr
CiAgICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAgICAgICAgIG5ldyBQcm9m
aWxlcjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAorICAgICAgICAgICAgICAg
IG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fcHJvZmls
ZWRDb2RlQmxvY2spLAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpCYXNlbGluZSkpOwotICAg
ICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFBy
b2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fcHJvZmlsZWRD
b2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5h
cHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwpAQCAtNzQy
LDExICs3NzMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgog
ICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
OworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKCk7CiAKICAgICBM
YWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAgaW50
IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUgPSAtZnJh
bWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9mZnNldCksIGNh
bGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxvdzsKQEAg
LTc1NywxNiArNzg5LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6
aW4KICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsKKyAgICBl
bWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdp
c3RlcnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lz
dGVycygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkgeworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9u
Q29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChz
aG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1l
bnQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAmJiAoIW1fdW5saW5rZWRD
b2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMo
KSArIEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIp
OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBt
X3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAg
ICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBw
dXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBrZWVw
IHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQg
dGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25z
dHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArODEzLDEyIEBA
IHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZz
ZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3Mu
dGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVn
VDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNl
dE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlw
ZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQogICAg
ICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2Vy
KSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MzUsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7
CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxs
RnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9y
LCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2Ug
bmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9
IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2RlQmxvY2st
PmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgeworICAg
IGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0g
RnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hl
Y2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxv
Y2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1l
SW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJl
c3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkpOwog
CiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJl
Z1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhi
ZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwg
VHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtU
byhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29k
ZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkK
ICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29k
ZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDog
b3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3Io
KSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVj
aywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMy
KFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04Mzks
NyArODc4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAg
ICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6
dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ss
IExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBtX2xpbmtC
dWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMs
IG1fdW5saW5rZWRDb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBl
ZmZvcnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4OTcsOCBAQCB2b2lkIEpJVDo6
bGluaygpCiAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAgICAgICAgY2FzZSBTd2l0
Y2hSZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rl
cjogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2st
PnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAg
ICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVs
dE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2Vk
VGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEs
OCArOTEwLDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBT
d2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBj
dGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJl
bHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAg
Zm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMo
KSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNo
T2Zmc2V0OwpAQCAtOTA2LDMyICs5NDUsMzUgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7CiAgICAgfQog
Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7Ci0gICAg
ZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNo
ZXMobV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9p
bkJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFu
Y2VPZnMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVC
cmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAo
YXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMp
IHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZp
bmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRo
aXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0
QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKIAogICAgIGZvciAoYXV0byYgY29tcGls
YXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAgICAgIENhbGxMaW5rSW5m
byYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAgICBpbmZvLnNl
dENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50
ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKLSAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZv
LmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpj
b21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGluZm8uZG9uZUxv
Y2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxh
dGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIEpJVENvZGVN
YXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNv
ZGVPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNT
ZXQoKSkKLSAgICAgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJ
bmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRh
Zz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb2Rl
QmxvY2stPnNldEpJVENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKSk7CisgICAg
SklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5
dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNT
ZXQoKSkKKyAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4
KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPiht
X2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk4MiwzNyBAQCB2b2lkIEpJ
VDo6bGluaygpCiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7Cisg
ICAgICAgIC8vIE9PUFM6IG1ha2UgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91dCB1bmxpbmtl
ZCBDQj8KICAgICAgICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxl
cigpKQogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21w
aWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7Cisg
ICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9m
aWxlZENvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAogICAgIGlmIChtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAgICAgbV9wY1RvQ29k
ZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAgCisgICAgLy8gT09QUzog
TWFrZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBV
bmxpbmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJ
TkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAg
ICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRU
eXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAg
ICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5
cGUobV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwog
ICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlD
aGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNr
KTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3
aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBh
ZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisK
KyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxz
KTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENh
bGxMaW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1v
dmUobV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJs
ZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7Cisg
ICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgp
OworICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2Rl
LT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOwogCiAgICAgaWYgKEpJ
VEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2Rl
IGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1l
bW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCkt
PmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBj
b2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5l
eGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFi
bGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0
IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5h
bGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICsxMDIxLDIxIEBAIENv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZl
ci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1f
Y29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0
ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9j
ay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxlcklu
Zm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAg
Ly8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0
aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhh
bmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9
CisgICAgLy8gT09QUzogRG9uJ3QgdGhpbmsgdGhpcyBzaHJpbmsgaXMgcmVhbGx5IGRvaW5nIGFu
eXRoaW5nIGFueW1vcmUuIFZlcmlmeS4KKyAgICAvL3sKKyAgICAvLyAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgIC8vICAgIG1fY29kZUJsb2Nr
LT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7
CisgICAgLy99CiAKKyAgICAvLyBPT1BTOiBtX3BjVG9Db2RlT3JpZ2luTWFwIHNob3VsZCBsaXZl
IG9uIEJhc2VsaW5lSklUQ29kZSBmb3IgYmFzZWxpbmUgY29kZWJsb2Nrcy4KICAgICBpZiAobV9w
Y1RvQ29kZU9yaWdpbk1hcCkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2lu
TWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXAp
KTsKIAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGlu
ZUpJVC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgp
KSAvCi0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9u
c1NpemUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxv
Y2stPmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUo
bV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5s
aW5rZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0
dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTA0NywxMSBAQCBzaXpl
X3QgSklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZlci0+c2l6ZSgp
OwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAg
ICBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBjb21waWxlQW5k
TGlua1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFsaXplT25NYWlu
VGhyZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVCbG9jayk7CiB9
CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKQEAgLTEwNDIs
MTggKzEwOTEsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwog
ICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0s
ICJQcmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6
OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJ
VDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7
CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxv
Y2FscygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3Rl
cnMoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkp
KSk7CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJP
ZmZzZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRG
b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3Vu
dEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVSZWdpc3RlckNv
dW50Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2ludCBKSVQ6OnN0
YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAg
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29k
ZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRG
b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9pbnRlck9mZnNl
dEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNoTWFwPENTdHJp
bmcsIFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3Ry
aW5nLCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlz
aW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1
YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJ
VCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0
aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAorI2lu
Y2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgpAQCAt
NDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0
U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgorI2luY2x1ZGUg
IkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAi
VW51c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTE0OSwxNCAr
MTUxLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBp
bGF0aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0
OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8q
IHVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IGNhbGxMaW5rSW5mb0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQg
SklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdO
TUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3Mg
SklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEsNiArMTczLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdl
IG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KICAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAorICAgICAg
ICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBwdWJsaWM6CiAgICAgICAgIEpJ
VChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5
dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTE3
OCwyOCArMTgyLDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWTSYgdm0oKSB7IHJldHVy
biAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lkIGNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwotICAgICAgICBDb21waWxh
dGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBDb21waWxhdGlvblJl
c3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAgICAgICAgc2l6ZV90IGNv
ZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJl
Zm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3Vs
dCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgo
MCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0
ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4g
SklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShjb2RlQmxv
Y2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyBp
bnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0
YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOwogCiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVU
aW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90
YWxDb21waWxlVGltZSgpOwogCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfbWV0
YWRhdGFHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSOworICAgICAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzX2NvbnN0YW50c0dQUiA9IExMSW50OjpSZWdpc3RlcnM6
OnBiR1BSOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgICAgICB2
b2lkIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAgICAgIHZvaWQgbGluaygpOwotICAg
ICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9y
dCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKENvZGVCbG9jayos
IEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9t
IEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBl
bmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCkBAIC0y
MjMsNiArMjMyLDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAorICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZy
b21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQzMkZy
b21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQ4RnJv
bU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KKyAg
ICAgICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSwgY29uc3QgQnl0ZWNvZGUmLCBz
aXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYsIHNp
emVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAg
ICAgICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUm
LCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVibGljOgorICAgICAgICB2b2lkIGxv
YWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgIHByaXZhdGU6
CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcpOworICAgICAgICB2b2lkIGxv
YWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisKKyAgICAgICAg
dm9pZCBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCA9IHJl
Z1QwKTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRvSGFuZGxlcikK
ICAgICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGp1bXBUb0hh
bmRsZXIpOwpAQCAtMjU4LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0
ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJh
cmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAg
JiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAh
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxl
U2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNv
bXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxs
TGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2Fs
bF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAg
ICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZv
aWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAgICAg
ICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4NywxNCArMzIyLDE1IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVy
IG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAg
ICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpT
Q2VsbCogb3duZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVy
KTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBp
cyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNj
cmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEm
LCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICAvL3Zv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOworICAgICAg
ICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVn
cyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVj
b2RlJiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpT
VmFsdWVSZWdzKTsKQEAgLTMwNSw4ICszNDEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9w
cm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CiAgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsKIAotICAgICAgICB2b2lk
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5
UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7Ci0gICAgICAgIHZvaWQgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJh
eVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2Ny
YXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBwdHJk
aWZmX3QsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3Ap
OwpAQCAtNTkzLDcgKzYzMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNywxNCArNjY0LDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBp
c1Vuc2lnbmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJy
YW5kLCBBY2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVh
bFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVT
bG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5j
RXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBl
bWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhcklu
amVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAg
ICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNo
R1BSKTsKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1
bnNpZ25lZCBkZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBV
U0UoSlNWQUxVRTY0KQpAQCAtNjQ2LDcgKzY4Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlm
CiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1
aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9p
bnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1Nl
dCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRl
clRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZv
aWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9p
ZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NSw2ICs2
OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAg
Ym9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENv
bnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENv
bnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3Rh
bnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC02OTYsMjYgKzczNCw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJl
c29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVW
YXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFU
T1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9y
KFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX0dFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgot
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwot
Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNj
b3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBN
b2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFu
IHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2ZWRDbG9zdXJlVmFyIGJlY2F1c2Ug
d2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29wZS4KLSAgICAgICAg
ICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNkZWZpbmUgREVDTEFSRV9SRVNPTFZF
X1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5
cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFS
RV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVz
b2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1l
KTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mKTsK
QEAgLTc2MCwxMCArNzgwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwog
ICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFk
YXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5
dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsK
ICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3Bl
cmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjEsMjAg
Kzg0MSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7
CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+
CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46
Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3Bl
cmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAg
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlw
ZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwg
dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVz
cyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVz
cyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAg
ewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9uVHlw
ZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRyZXNz
KEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9m
ZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE5LDI1ICs5MzksMjAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9w
dGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5C
ZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7
IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRF
bWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVy
IHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNo
IGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgZW1pdE1h
dGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAgICAgICB2
b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBv
cnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1l
cygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBm
cm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8gYmUg
Y29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0
byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNh
bWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNvcGll
ZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmlu
YXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmlu
YXJ5T3ApOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjQs
OSArOTc5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5
PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsK
IAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZv
czsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGll
ZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAg
ICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEwMDAsMTEgKzEwMTIsMjQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVS
ZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlv
blN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBt
X2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2Zp
bGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7
CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAgICAgICAgQ29k
ZUJsb2NrKiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBVbmxpbmtl
ZENvZGVCbG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKworICAgICAgICBN
YXRoSUNIb2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBt
X2ppdENvZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAg
ICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgQmFnPFVubGlu
a2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgICAgIEJhZzxDYWxsTGlua0lu
Zm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVK
dW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U3RyaW5n
SnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAgc3RydWN0IE5v
dEFDb2RlQmxvY2sgeyB9IG1fY29kZUJsb2NrOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShy
ZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0
aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBAIHZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFy
KG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJn
dW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50
R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMSk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIpOworICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0z
MjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQog
ICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVn
VDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVy
dCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QxKTsKKyAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzc1LDggQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiB9CiAKQEAgLTU3Myw3ICs1NzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3coY29uc3QgCiAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1p
dExvYWQob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJs
ZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9j
b2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmls
ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJvZmlsZUluZGV4KTsKKyAg
ICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9maWxl
KTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVn
YXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBv
cGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAg
ICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAg
LTg5OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0
CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhh
cml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1f
dW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21h
dGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRo
SUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9w
QWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVD
b2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRl
KTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYg
c2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2Ny
YXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBh
ZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEw
MTUsMTAgKzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJ
QwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmls
ZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmls
ZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2Zp
bGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChu
b25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2Ny
YXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNs
b3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwx
MyArMTA2MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAj
ZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFy
aXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0
aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJl
aW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJl
aW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3Ms
IGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVy
cHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRS
ZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJM
RShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEy
MCwxMyArMTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElD
CiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0
aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lz
ZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywg
cmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNp
ZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsK
QEAgLTExNjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVj
dGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsK
ICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAm
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2Nr
LT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tX3By
b2ZpbGVJbmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5t
X29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQo
Ynl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjIwLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRN
dWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2Nr
LT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tX3By
b2ZpbGVJbmRleCk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElD
KGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVN
dWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChj
b25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUU3ViSUMq
IHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0
cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0
TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxF
dgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAgICAg
c3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2Fs
bGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwg
cmVnVDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBA
IC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAg
ZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDcgKzM0MSw2IEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Iu
aCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2Fs
bC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC00NCw3ICs0NSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxS
ZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZp
cnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDE4ICs1NCwxOCBAQCBzdGQ6OmVu
YWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9w
Y29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9w
X3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hl
Y2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50SW5j
bHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVj
a3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFj
a09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCisKICAg
ICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVy
T2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdU
MCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0YSwgY2hl
Y2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUz
MlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNh
bGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKCkg
KyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyArNzksNyBAQCBzdGQ6OmVuYWJsZV9p
Zl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlE
ID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2Rl
LCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBi
eXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkK
IHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpA
QCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29k
CiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJn
dW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVG
cmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVlUmVn
aXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsK
KyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0RnJl
ZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZp
cnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMs
IHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEwMywxNiBAQCBKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3Bl
cmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1
cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVyYXRp
b24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJl
Z1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291
bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBh
eWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBi
cmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5h
ZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2FkQ29uc3Rh
bnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkp
LCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCBy
ZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpv
ZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RCaWdnZXN0
LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0xMjcsMTYg
KzEzMSwxNiBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRlbXBsYXRl
PD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUp
CiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAg
ICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpj
YWxsZXJGcmFtZU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIGFyZ3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFk
ZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSks
IHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21h
TW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNv
ZGUpOwogCkBAIC0xNDgsNyArMTUyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBp
bmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRk
KENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxM
aW5rSW5mbzo6Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVj
b2RlLm1fYXJndjsKQEAgLTE1Niw0MyArMTYwLDQ3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2
YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0VmlydHVh
bENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91
dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0
ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFp
bENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKLXsKK2Jvb2wgSklUOjpj
b21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVk
LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KSB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0
ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5
dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQor
Ym9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5s
aW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewotICAgIENhbGxG
cmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFy
Z3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIg
PSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMg
PQorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEg
PSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOworICAgIHNodWZmbGVEYXRhLT5u
dW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAgIHNodWZmbGVEYXRhLT5udW1QYXJh
bWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworICAgIHNodWZm
bGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwor
ICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVE
YXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1ZmZsZURhdGEtPmFyZ3Mu
cmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5
dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAg
ICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5Ojpk
aXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAgICAgICAg
IERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAgICAg
IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotICAgIHNodWZmbGVE
YXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7Ci0gICAgaW5mby0+c2V0
RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9
IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgIHNodWZmbGVE
YXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1bXBMaXN0IHNsb3dQYXRo
cyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgbG9hZENvbnN0
YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhz
ID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAs
IHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgKnNodWZmbGVE
YXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93
UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CisgICAgaW5mby0+ZnJh
bWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAgICAgYXV0byBkb25lTG9j
YXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjE4LDE0ICsyMjYs
MjUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAt
IENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENhbGxl
ciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KLSAgICBD
YWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxs
X2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUs
IGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0gVUlOVF9NQVg7CisgICAg
aWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBpbmZvID0gbV91bmxpbmtl
ZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Io
b3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAgICAgQVNT
RVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwor
ICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8o
KSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5s
aW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50Owor
ICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAog
ICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwg
d2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9
IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1
aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0
cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMg
Y2FsbGVlLgpAQCAtMjM0LDE2ICsyNTMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29u
c3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBj
YWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2Fs
bFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFw
cGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChjb21waWxl
VGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBpZiAoY29t
cGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0
YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFudCwg
cmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBz
bG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1Qy
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQ
YXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJl
Z1QwLCByZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
ICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9KTsK
QEAgLTI1MywxMyArMjY4LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3Ry
dWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5m
by0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0
YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBs
YWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsK
IAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCArMjg4
LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdz
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAq
dGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlz
LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJv
bVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcgKzQxMCwzMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdU
MSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4
dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwog
fQpAQCAtNDE2LDEwICs0NDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmpl
Y3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsK
ICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBA
IC00MzIsMTkgKzQ1OCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
IHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JH
UFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRl
cmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBh
dXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJh
dG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhp
cyk7CiB9CkBAIC00NTIsNyArNDc2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsK
ICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5h
cnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0
OTMsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1
bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIy
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVy
aWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0
ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAg
bG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRP
ZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9N
ZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0
T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNl
ZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlv
biwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgp
OwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1Qw
CiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQ
UiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3Vs
dEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAg
bW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3Rl
eHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
c2NyYXRjaDsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVy
UmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVl
R1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFk
ZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BS
KTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBw
cmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNW
YWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
cHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwog
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsg
ZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNW
YWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50
KCk7CiAgICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwot
ICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigp
OworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRvci5h
bGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9u
ZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChnbG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNo
SWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwg
ZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9i
YWxHUFIpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbW92ZShpdGVyQ2Fs
bFJlc3VsdEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFs
dWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAogICAg
ICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1NzcsNTUg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAo
KSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRH
UFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBK
dW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RD
ZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5v
dENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCog
aWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAg
ICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90
T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsK
IAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUklu
Zm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9u
ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3Vs
dEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxk
ZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRv
bmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25l
VlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZv
ckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmpl
Y3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAg
ICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAg
R1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1w
bCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAog
ICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNh
bGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdH
UFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJl
c3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1l
bnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0K
LQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKKwogbmFtZXNw
YWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtMTU5LDEwICsxNjAsMTAgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAgICB7Ci0g
ICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNlRGF0
YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24g
MjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBA
QCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBt
X2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1
YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBl
LCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2Rl
QmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDog
Z2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxT
aXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBA
IC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAog
ICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8t
PnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0
aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFy
dExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9z
bG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGppdC5s
YWJlbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUp
KTsKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgaml0
LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9kb25l
ID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3Io
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUs
CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2Us
IEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0xMTAsNyArMTE4LDcg
QEAgSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcgogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpT
VmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSkKICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2lu
LCBjYWxsU2l0ZSwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJ
bmZvR1BSKQotICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29k
ZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCisgICAgLCBtX2lzTGVu
Z3RoQWNjZXNzKGNvZGVCbG9jayAmJiBwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJsb2NrLT52
bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
YmFzZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2
aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxF
KEpJVCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25W
YWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCkBAIC0zOCwxMSArMzksMTE0IEBAIG5hbWVz
cGFjZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNsYXNzIENhbGxTaXRlSW5k
ZXg7CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5m
bzsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNzIEFjY2Vz
c1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCitzdHJ1Y3Qg
QmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
R1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1
Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
ID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlW
YWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9jayBhbmQg
aW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KKyAgICBzdGF0
aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAg
c3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjph
cmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG8gPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBH
UFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJl
Z1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
byA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gg
PSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnMg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0
cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5
SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKK307CisKK3N0cnVjdCBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2Ug
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQ
UkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BS
SW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUklu
Zm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFz
ZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBicmFu
ZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xhc3MgSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKCkg
eyB9CkBAIC02MiwxNSArMTY2LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKAogICAg
ICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRo
TGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2VkU3R1YkluZm8geyBu
dWxscHRyIH07CisgICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBwcm90ZWN0ZWQ6Ci0g
ICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0VHlwZTsKICAgICBT
dHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgorICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Ns
b3dQYXRoQ2FsbDsgLy8gT09QUzogbWFrZSByZXBvcnRDYWxsIHBhc3Mgc29tZXRoaW5nIGluIHdl
IGNhbiB1c2UgZm9yIHRoZSBub24tQ1RJIHRodW5rcyBidWlsZHMuIAogfTsKIAogY2xhc3MgSklU
QnlJZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CkBAIC05OCw3
ICsyMDgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFs
dWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKK3B1
YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTEzMiw4ICsyNDIsOCBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0gZGVm
YXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIEpJ
VFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLAotICAgICAg
ICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwg
RUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2Fj
aGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRL
aW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
ICAgICAKQEAgLTE2MywxMSArMjczLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZh
c3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9i
YXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKQEAgLTE5MSw4ICsyOTksNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVy
YXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBt
X3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjIsNiBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hh
YmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNDUsNiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0
ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI3Nyw4ICszNzksNiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1
ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAotcHJpdmF0ZToKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hh
YmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSArNDAyLDkgQEAgcHVibGlj
OgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1w
cml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3Jlc3Vs
dDsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzMwLDggKzQyOCw2
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODI2MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewot
ICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
RG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0
YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25z
dGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAg
ICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3Jj
KSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAgICAg
ICAgLy8gT09QUzogZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBhbGwgbGluayB0aW1lIGNvbnN0
YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAg
IEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29u
c3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0
SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50
cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRD
YWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3Rl
ciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIp
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1
cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJu
VmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2FsbDsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1l
dGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
K3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBk
c3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJu
VmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZh
bHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVh
bFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcp
KQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55
U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7
CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBz
aG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28g
dGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFT
U0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkt
Pmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsg
MSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRlY29k
ZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFk
dmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90
Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5
dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhv
dC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7
Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkt
Pmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNr
cG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgsMzMgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
LSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+
bGVuZ3RoKCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKLXsKLSAg
ICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKLQotICAgIC8vIFdlJ3JlIGluIGEgc2lt
cGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBk
aXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQodmFs
dWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UKLSAgICBFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSAgICBzdG9yZTMyKHZhbHVlLnBheWxv
YWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAgICBzdG9yZTMyKHZhbHVl
LnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKLX0KKyAgICBpZiAo
IXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAm
JiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09
IDE7Cit9CisKKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVl
UHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKy8veworLy8gICAgQVNT
RVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CisvLworLy8gICAgLy8gV2UncmUgaW4gYSBzaW1w
bGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRp
cmVjdAorLy8gICAgLy8gc3RvcmUuCisvLyNpZiBVU0UoSlNWQUxVRTY0KQorLy8gICAgc3RvcmU2
NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyNlbHNlCisvLyAgICBF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vICAgIHN0b3JlMzIo
dmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOworLy8gICAg
c3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOworLy8jZW5k
aWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJv
ZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVk
T3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQogICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzIzLDQxICszNTIsNDIgQEAgaW5s
aW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxp
bmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAgIGlm
ICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5j
aGVja3BvaW50KCkpLCB2YWx1ZSk7CisKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsg
dmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0b3JlNjQo
dmFsdWUuZ3ByKCksIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsK
LX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmls
ZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97CisvLyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisvL30K
IAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVt
cGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJl
ZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJl
c3VsdFJlZykpOwogfQogI2VuZGlmCiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiBhcnJheVBy
b2ZpbGUsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0
IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdp
c3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoc2hvdWxk
RW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAg
ICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVu
U3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5
dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmlsZSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJl
Z2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQ
UiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQogewotICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5n
KCkpIHsKLSAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMy
KHNjcmF0Y2hHUFIsIEFkZHJlc3MoYXJyYXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNl
dE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKSk7Ci0gICAgfQorICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwg
Y2VsbEdQUiwgc2NyYXRjaEdQUik7CiB9CiAKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6Omdl
dE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQpAQCAtMzgwLDcgKzQxMCw3
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZh
bHVlKQogewogICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rl
cihyZWcpOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0g
bV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2Fk
RG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxz
ZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcg
KzUyNiw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5s
aW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVy
IHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAg
aWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQog
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcg
KzUzNiw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5s
aW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVy
IHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNl
bGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVn
LmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAg
IGVsc2UKQEAgLTUxNCwxMSArNTQ0LDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RKUwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5k
Q29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29u
c3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIg
b3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBj
b25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0
LDExICs1NjksMTcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQog
ICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVj
b2RlSW5kZXggaXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBp
ZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQorICAgICAgICBzd2l0Y2gg
KG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNy
YykpIHsKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6Cisg
ICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6IHsKKyAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMp
OwogICAgICAgICAgICAgbW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTY2LDExICs1OTcsNiBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4g
c3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19
Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRk
cmVzc0Zvcihkc3QpKTsKQEAgLTU5NSw3ICs2MjEsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dDYXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tu
b3duQ2VsbCh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7
CiB9CiAKQEAgLTYzNywzMCArNjYzLDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFy
Z2V0KGNvbnN0IAogewogICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0g
ICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsK
LX0KLQotQUxXQVlTX0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1
dFRvU2NvcGUgYnl0ZWNvZGUpCi17Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRh
ZGF0YUlEICsgMTsgLy8gSGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2NvcGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0
b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1dElu
Zm8oaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0
SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJ
bmZvOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmlu
YXJ5QXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2Rl
KQotewotICAgIHVpbnQ2NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6
Om9wY29kZUlEKSArIDEpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1f
bWV0YWRhdGFJRCk7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5m
aW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2Zp
bGUgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIG1fY29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUp
OwotICAgIHJldHVybiBhcml0aFByb2ZpbGU7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxv
Y2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KQEAgLTY4MSw2ICs2ODQsNjEgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6
OmVjbWFNb2RlPE9wUAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQdHJG
cm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJS
ZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlu
a2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkg
KyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQzMihB
ZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQ4
RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BS
UmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5r
ZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSAr
IG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5
cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRhZGF0
YShWYWx1ZVR5cGUgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNl
dCkKK3sKKyAgICBzdG9yZTgodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtl
ZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsg
b2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OnN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwgY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlMzIodmFsdWUsIEFkZHJl
c3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQ
UlJlZyByZXN1bHQpCit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJs
b2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQp
LCBzX21ldGFkYXRhR1BSLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
b2FkQ29uc3RhbnQoSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBHUFJS
ZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX2NvbnN0YW50c0dQUiwgc3RhdGlj
X2Nhc3Q8dWludHB0cl90Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7Cisg
ICAgbG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisKK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0
ZXIgY29uc3RhbnQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uc3Rh
bnQuaXNDb25zdGFudCgpKTsKKyAgICAvLyBPT1BTOiBNYXliZSBtYWtlIHRoaXMgbW9yZSBlZmZp
Y2llbnQ/CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVzdWx0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhy
ZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVz
dWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAko
cmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBW
TTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBz
dG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZy
YW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJF
eGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRp
b24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTk3LDcgKzk5
Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKIAogICAgIC8v
IGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3
aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVu
ZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0
LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRh
YmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDI0LDcgKzEwMjQsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBm
b3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxl
SW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFy
YWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsK
IApAQCAtMTA0Miw3ICsxMDQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhj
b25zdCBJbgogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlv
bnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFN0cmlu
Z0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
W3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUlu
ZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5n
KSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgy
NjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgog
I2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQ
cmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTU0
LDExICs1NiwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgaWYgKHNyYy5p
c0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAg
ICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zv
cihkc3QpKTsKLSAgICAgICAgZWxzZQorICAgICAgICAvLyBPT1BTOiBtb3N0ICJPdGhlciIgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50cyBjYW4ganVzdCBiZSBncmFiYmVkIGZyb20g
dGhlIFVubGlua2VkQ29kZUJsb2NrLiBJdCdzIGp1c3QKKyAgICAgICAgLy8gYSBjb3VwbGUgdHlw
ZXMgdGhhdCBjYW4ndC4gQ3JlYXRlIGFuIGFic3RyYWN0aW9uIGZvciB0aGF0LgorCisgICAgICAg
IHN3aXRjaCAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oc3JjKSkgeworICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50
ZWdlcjoKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZTogewor
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0
YW50KHNyYyk7CiAgICAgICAgICAgICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIHJl
Z1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTg3LDM3ICsxMDAsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9u
Kgogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9v
YmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlv
blNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNh
cGFjaXR5KCkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0
dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1
bHRSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAg
IFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0dXJl
UmVnID0gcmVnVDM7CiAKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAg
ICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRB
bGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0
b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBz
Y3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3Jh
Z2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtdXRh
dG9yRmVuY2UoKm1fdm0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAgbG9h
ZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRP
Zk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zm
c2V0T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgp
LCBzdHJ1Y3R1cmVSZWcpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGF1dG8gYnV0
dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVj
dChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1
Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBsb2FkOChB
ZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwg
c2NyYXRjaFJlZyk7CisgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywg
c2NyYXRjaFJlZyk7CisgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7
CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIFJlZ2lzdGVySUQgc3Ry
dWN0dXJlUmVnID0gcmVnVDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9j
YXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CisgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJl
UmVnKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0x
MzEsNyArMTQyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCiAg
ICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdv
dWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5m
dW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNo
UHRyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTR2xv
YmFsT2JqZWN0LCBtX2Z1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKSkpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOwogCkBAIC0x
NTQsMzAgKzE2NiwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3Ry
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQg
dGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50
byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdp
bGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRo
ZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3RvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpw
cm90bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvdG8sIHByb3RvR1BSKTsKICAgICAKICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxs
cy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5
X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qx
LCBwcm90byk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1
ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CiAK
ICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0g
ICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUNSwKLSAgICAgICAgcmVnVDMsIHJl
Z1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICByZXN1bHRHUFIsCisgICAgICAgIHZhbHVlR1BSLAorICAgICAgICBw
cm90b0dQUiwKKyAgICAgICAgc3R1YkluZm9HUFIsCisgICAgICAgIEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6c2NyYXRjaDEsIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRj
aDIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6SW5zdGFuY2VPZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFw
cGVuZChnZW4pOwotICAgIAorCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
CkBAIC0xOTIsMTQgKzIxMiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihj
b25zdCBJCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBD
YWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkluc3RhbmNlT2ZPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVj
bHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhHUFJJbmZvOjpub25B
cmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
OjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIpOworICAgIHN0YXRpY19h
c3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9PSBhcmd1bWVudEdQUjMp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
Y2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRHUFIzKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNv
bnN0IEluc3RydWN0aW9uKikKQEAgLTI0MCw3ICsyNTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1Qy
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBj
b21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzc0LDcgKzM5Myw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwot
ICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMo
KSk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKICNlbHNlCkBAIC0z
ODMsOSArNDAyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgog
fQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2Vu
ZXJhdG9yKFZNJikKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgaml0LmVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAgLTQxMSw3ICs0MzAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAKICAgICBpZiAoZHN0ICE9IHNyYykKICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDM0LDkgKzQ1MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
CiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
ZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZnVuY3Rpb24sIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25hbWUsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NjUs
OCArNDg0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGkKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBi
b29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVt
cChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3Jh
dGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCks
IEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1Qx
LCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRh
cmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1
ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1
bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTQ4MCw3ICs1MDEs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQg
bWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFp
bGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlu
bGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1h
eSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
ID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNTE5
LDcgKzU0MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAg
ICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7
CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVh
bCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1Qw
KSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0g
anVtcCgpOwogCkBAIC01NDMsNyArNTY0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxs
KGNvbnN0IEluc3RydQogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sg
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBhZGRKdW1w
KGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsK
ICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCkBAIC01
ODIsMTUgKzYwMywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNv
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsK
LSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2Rl
Lm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwotICAg
IHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgbG9h
ZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QxKTsKKyAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdU
MSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVjb2RlLCBPcEpu
ZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwogfQpAQCAtNjI1LDggKzY0NCwxMCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQ
UlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZU
cnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2Jh
bE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVn
cyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vs
c2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc1RydXRoeUdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDAsNyArNjYxLDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTY5NSw3ICs3MTYsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMSwgcmVnVDApOwog
ICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CkBAIC03MTEsNyArNzMzLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhyb3duVmFs
dWVHUFIgPSBhcmd1bWVudEdQUjE7CkBAIC03MjAsNyArNzQyLDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogCiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19S
RUdJU1RFUlMgPiAwCiAgICAgaml0LmxvYWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIGFyZ3VtZW50
R1BSMCk7Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVySW1wbChhcmd1bWVudEdQUjApOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcihhcmd1bWVudEdQUjApOwogI2VuZGlmCiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKQEAgLTkwOCw3ICs5MzAs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIApAQCAtOTE4LDcgKzk0MSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmlj
dGVxKGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qy
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJl
Z1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTMxLDcgKzk1NSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKICAgICAKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykK
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk1MSw3ICs5
NzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RyCiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKICAgICBpc0JpZ0ludC5saW5rKHRo
aXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk3OCw3ICsxMDAyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTkzLDcgKzEwMTcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6
Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1l
Rm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8v
IE9PUFM6IFRoaXMgaXNuJ3QgZWxlZ2FudC4gV2h5IGFyZW4ndCB0aGV5IGluIHRoZSBjYWxsZWUg
c2F2ZSBidWZmZXIuIEkgZ3Vlc3MgYmVjYXVzZSB3ZSBjYW4gT1NSIGV4aXQgaGVyZT8KKyAgICBl
bWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOwogCiAgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4
Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlv
biA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMDExLDIzICsx
MDM4LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAv
LyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRj
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAog
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0
YS5tX2J1ZmZlcjsKLSAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0g
ICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVy
QXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0
Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwor
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRD
YXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAg
ICAgYXV0byBza2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BS
KTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhp
cyk7Ci0gICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAg
YnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9m
aWxlKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKLSAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihw
cm9maWxlKSwgcmVncyk7Ci0gICAgICAgIH0pOwotICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKIH0KIApAQCAtMTA1Myw4ICsxMDY4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2ltbShjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29k
ZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVz
dGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29u
c3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwog
ICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2Rl
SW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlu
a2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwODEsMTMgKzEw
OTYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIFZp
cnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8v
IGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3
aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3
aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3
aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUo
dW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwg
cmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3du
S2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhV
bmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgsIHVu
bGlua2VkVGFibGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNo
UHRyVGFnKTsKIH0KIApAQCAtMTA5OSwyMCArMTExNSwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9z
d2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5
dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRj
aCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBV
bmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNo
UmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNo
UmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtl
ZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5
cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRh
YmxlSW5kZXgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVu
dEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVH
UFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOwotICAgIGxvYWQzMihjb2RlQmxvY2so
KS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOworICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkpLCByZWdUMCk7
CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDAp
OwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxp
bnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5s
aW5rKHRoaXMpOwpAQCAtMTEzMyw3ICsxMTUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVs
bChjb25zdCBJbnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFy
ZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7CkBAIC0xMTQ4LDcgKzExNjYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9u
dWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTE2Niw3ICsxMTgzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29u
c3QgSW5zdHJ1YwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihO
b3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUg
PSBqdW1wKCk7CkBAIC0xMTg4LDEyICsxMjA1LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVy
KGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhl
bSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0
YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBv
YmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgc2l6ZV90IGNv
dW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKKyAgICBzaXplX3QgY291bnQgPSBtX3VubGlu
a2VkQ29kZUJsb2NrLT5udW1WYXJzKCk7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
ICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3Bh
Y2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCiAgICAgICAgIGVtaXRJbml0
UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCi0gICAgZW1pdFdyaXRlQmFy
cmllcihtX2NvZGVCbG9jayk7CisgICAgCisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwKTsK
IAogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAjZWxzZQpAQCAtMTIxMiw3ICsx
MjMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGpp
dC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTEzMTAsMjMgKzEzMjksMTkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVy
ZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAog
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihj
YWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1Qy
KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwotICAgIFdy
aXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNo
ZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3Rl
cklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdU
MDsKQEAgLTEzNDIsNyArMTM1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNv
bnN0IEluc3QKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURh
dGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Q
cm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rpb246OnJh
cmVEYXRhVGFnKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFS
ZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSAr
IE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUo
KSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKIAotICAgIGxvYWRQ
dHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcENyZWF0ZVRoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZENh
bGxlZSgpLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxs
ZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihK
U0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFB0cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhh
c1NlZW5NdWx0aXBsZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM4Nyw4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BS
LCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIsNyArMTM5
OCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZElt
bTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVl
UmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyArMTQxMSw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdU
MiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzE0MjIsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0
MzcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZp
cnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNl
VmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50
R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTQzMCw3ICsxNDUwLDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hp
bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAgIGlmIChVTkxJS0VMWShP
cHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29k
ZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewor
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9y
RnV6emluZygpICYmIG1fdW5saW5rZWRDb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9y
RnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0oKS5n
ZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkUHRy
KHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaFB0cihC
ZWxvdywgcmVnVDAsIFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5p
dGVMb29wc0xpbWl0KCkpKTsKQEAgLTE0NDAsNyArMTQ2MCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2xvb3BfaGludChjb25zdCBJbnN0cnUKICNlbHNlCiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYKLSAgICAgICAgbW92ZVZhbHVlKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
cmVzdWx0UmVncyk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVzdWx0UmVncy5ncHIoKSk7
CiAgICAgICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTE0
NTMsOCArMTQ3Myw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUK
IAogICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAogICAgIGlmIChjYW5C
ZU9wdGltaXplZCgpKSB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBv
c2l0aXZlT3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3Jl
bWVudEZvckxvb3AoKSksCi0gICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2st
PmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAgICAgICBBZGRyZXNzKHJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9CiB9
CiAKQEAgLTE1MDksNyArMTUzMCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFw
cyhjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxl
VHJhcHMsIGFyZ3VtZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTIyLDcgKzE1NDQsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfY2hl
Y2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2
UmVnaXN0ZXJzOjplYnApOwpAQCAtMTU2NCwzNCArMTU4NiwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3Jl
Z2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1l
bnRHUFIwOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxp
bmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBK
SVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2Fk
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25E
ZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50
KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6
b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4
ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQg
PT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2
bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQg
PT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJ
RCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBm
dW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAg
IH0KIH0KIApAQCAtMTYyMSwyMyArMTY0NSwyNCBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHBy
Q29tbW9uKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3Bl
LCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1
bWVudEdQUjEpOwogI2VuZGlmCiAKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0g
bV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAg
YXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OkZ1bmN0aW9uRXhwciwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwg
YXJndW1lbnRHUFIyKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgp
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0g
b3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2Rl
SUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVn
VDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dl
bmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7
CiAgICAgfQogfQogCkBAIC0xNjY0LDI5ICsxNjg5LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX25l
d19hc3luY19nZW5lcmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5
dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwg
cmVnVDAsIHNpemUpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0
KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMik7
CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BS
MSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBzaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlX
aXRoU2l6ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAg
Jm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIG1hdGVyaWFs
aXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ3VtZW50R1BSMik7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiAjZWxzZQorICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZB
cnJheUFsbG9jYXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKICAgICBlbWl0TG9hZChzaXplSW5kZXgs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwg
cmVnVDMsIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQogCkBA
IC0xNjk0LDggKzE3MjAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXpl
KGNvCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdl
IHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB0eXBlIHByb2ZpbGVyIGlz
IGVuYWJsZWQuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
cm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0g
bWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9m
aWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE3NzcsMjAgKzE4
MDQsMjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIHN0
YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAi
d2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwog
ICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFS
ZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIu
Ci0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7
CisgICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlz
IG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAgIEdQUlJlZyBzY3JhdGNo
MlJlZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNo
YWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIp
LCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7Cisg
ICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QxKTsK
KyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVS
ZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkp
OwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJv
ZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKKyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBj
b2RlIGNhY2hpbmcgd2hlbiB0aGUgdXNpbmcgdGhlIGNvbnRyb2wgZmxvdyBwcm9maWxlci4KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVDb250cm9s
Rmxvdz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0g
bWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBi
YXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7CkBAIC0xODYwLDcgKzE4
OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgbW92
ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwogCiAgICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7
CiB9CiAKQEAgLTE4ODYsNyArMTkxNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5
cGVfb2YoY29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwogICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5
Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgor
I2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnku
aCIKQEAgLTI4NTUsNyArMjg1Niw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAg
ICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCku
bV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQgPSBsaW5rZWRUYWJsZS5tX2N0aURlZmF1
bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIApAQCAtMjg4MCw3ICsyODgxLDcgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBT
aW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdDsK
ICAgICBpZiAoa2V5LmlzSW50MzIoKSkKQEAgLTI5MDMsNyArMjkwNCw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHZvaWQqIHJlc3VsdDsKLSAgICBjb25zdCBTdHJp
bmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IGNvZGVCbG9jay0+YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAK
ICAgICBpZiAoa2V5LmlzU3RyaW5nKCkpIHsKICAgICAgICAgU3RyaW5nSW1wbCogdmFsdWUgPSBh
c1N0cmluZyhrZXkpLT52YWx1ZShnbG9iYWxPYmplY3QpLmltcGwoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAko
cmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDcgKzM0OCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlkR1BSUmVnLCBJbnZhbGlk
R1BSUmVnKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw5MiArNDksMTAzIEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQ
UiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBpZiAobWV0YWRh
dGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1i
ZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCBwcm9maWxlLCByZWdUMik7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElD
TWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90Q2VsbC5saW5r
KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFzZUdQUiwg
cHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJl
c3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAg
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzLCByZWdU
Mik7Ci0gICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRTbG93Q2FzZSgpOwor
ICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwg
cmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgICAgIC8vIE9PUFMuIFN1cHBvcnQgdGhp
cworICAgICAgICAvL2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCisgICAgICAg
IC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZv
cy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRC
eVZhbDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAg
ICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIH0KLQogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcGNvZGVUeXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25z
dCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAgICBpZiAoIWhhc0FueVNsb3dD
YXNlcyhpdGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOworICAgIEpJVEdldEJ5VmFsR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CiAKLSAgICAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIG1vdmUoQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBtb3ZlKEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxp
emVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUs
IGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRH
UFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
LSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5
dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsK
KyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIz
OyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIx
KTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7
Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlf
dmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0g
ICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlz
QVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEp
OworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSBy
ZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJv
ZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsxNjAsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJv
dXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25n
aW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNjAsOCArMTcxLDggQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9m
aWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1l
bnRHUFIxKTsKIApAQCAtMTg3LDM0ICsxOTgsNDAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3By
aXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0
UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVz
dWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0
eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhhc0FueVNsb3dDYXNl
cyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRQcml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzI0MCwxMSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJv
cGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1NCwyMCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4K
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25h
bWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1
cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCkBAIC0yNjQsNyArMjc3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdo
dCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhl
ciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAg
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAg
ICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAwLDIxICszMTMsMjggQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9
IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJS
ZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwotCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0
ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7
CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2Vx
dWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC0zMjQsMTcg
KzM0NCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAg
ZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9z
ZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIFVOVVNFRF9QQVJB
TShjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRB
Y2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJh
bmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNl
dFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRp
bWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRH
UFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzY5LDE4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFk
eSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJy
YW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRz
PGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlw
ZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXpl
OwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYK
IAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMTkgKzM4OSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
aGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOworCisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJy
YW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwog
fQogCkBAIC0zOTQsOSArNDIyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2
YXRlX2JyYW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBi
YXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJh
bmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtNDA2LDI0ICs0MzYsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3By
aXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3Vt
ZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5
R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJh
bmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVy
YXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25h
bWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NTksNDIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
dmFsdWVHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQ
UiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVj
b2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwog
CiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQpOwot
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1Yklu
Zm9HUFIpOworICAgIC8vIE9PUFM6CisgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJv
cGVydHkpKQorICAgIC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVl
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQ
dXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7Cisg
ICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdy
aXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxs
LgpAQCAtNDc0LDE1ICs1MTAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0g
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsm
XShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
ICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0g
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAg
ICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTMxLDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAg
ICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVy
ZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0
KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJn
dW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5
VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVBy
b2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9w
UHV0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUxMiw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdU
NTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAo
ZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9k
ZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlv
blB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU2NSw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKQEAgLTUzMywxOCArNTc1LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAg
ICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJTZXQgdXNlZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
dmFsdWUsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NF
UlQoIXVzZWQuY29udGFpbnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5z
KHJlZ1Q1KSk7CisgICAgfQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwg
dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxP
YmplY3RHUFIpOwpAQCAtNTcwLDIwICs2MTgsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3By
aXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1
ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlk
R1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0
ZUZpZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcg
U3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5
NCw4ICs2NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQ
cml2YXRlTmFtZT4oKTsKLSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29k
ZS5tX3B1dEtpbmQ7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAg
ICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4
KytdOwogCkBAIC02MDMsMTMgKzY2MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3By
aXZhdGVfbmFtZShjCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAg
IGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxE
ZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZp
ZWxkT3B0aW1pemU7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkg
YXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1Qy
OwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1
ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7Cisg
ICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworCisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQpOworICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2lu
ZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6
ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50c0dQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1c3RlZEltbVB0
cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02MjIsMTgg
KzY4NCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0MywxNCArNjk5LDE0IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
cmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1Qx
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzc0Niw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc1Nyw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0
dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJp
YnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
YXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzA5
LDcgKzc2OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAg
ICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzc5LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwg
cmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc4
OCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1
cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNo
b3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0
ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODMwLDE3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2Rl
bEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVs
ZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODU0LDE5IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIg
PSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2Rl
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5
X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODA4LDcgKzg3Niw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
QEAgLTg0NSwyMiArOTEzLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9w
ZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1
bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
Z1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
dHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZh
bDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBl
bWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJy
aWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVy
ZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTYy
LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9k
ZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQg
Kzk4MCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4
cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1p
emU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVC
eVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMDIsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIgKzEwMzcs
MzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1
bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3Ms
IHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5
cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNzEsMTcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
MTAwMywyNiArMTA5MSwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChj
b25zCiAgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVu
dEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGlj
X2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSksIGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6
ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblRyeUdldEJ5
SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMzAsMjIgKzExMTIs
MzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6cmVzdWx0KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJl
Z3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYgKzExNDUsMTggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTY2LDYxIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBh
cmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8
fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVy
dHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlv
bkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVn
LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRD
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEp1
bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNz
KCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJy
YXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2FkOEZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEo
KSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihOb3RFcXVhbCwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVj
b2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJ
ZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNlR1BS
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAg
ICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
LQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Ci19
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CiAKLXZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1
ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKLQotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KLSAgICBKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2
ICsxMjI5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsK
KyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNTAsNTcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRH
UFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVu
dEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRy
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2Fs
bCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0
aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlz
R1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBn
ZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dD
YXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQpAQCAtMTIwNiw3ICsxMzEwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQu
dGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0MSwxNiArMTM0NSwxOSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdp
dGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhp
c1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEyNjAsMjggKzEzNjcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNH
UFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2Vy
dChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRo
aXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI5MSw3
ICsxMzkyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRk
cmVzcygpOwpAQCAtMTMyOSwyMyArMTQzMCwzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
aWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVl
OwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgLy8g
SW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUg
b2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRl
ciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhC
ZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1
cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywg
cmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsK
IAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0
ZWNvZGUpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyh2YWx1ZUdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29k
ZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVj
dCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGlyZWN0
ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5l
Y21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3Ry
dWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTks
MTQgKzE0NzQsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRo
aXMpOwogICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9w
dXRCeUlkSW5kZXgrK107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwg
cmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRp
b24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3NiwyNSAr
MTQ5NSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcx
IGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0
YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xNDA0LDcgKzE1MTcsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQxLDIw
ICsxNTU0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTg3LDE3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0ODAs
MjggKzE2MDcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8v
IFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3Qg
dG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAg
ICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTUxMCwyNSArMTYzMSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92
YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCBy
ZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnNj
cmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2lu
QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQpAQCAtMTUzNywxNSArMTY2NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFs
KGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAg
IEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQ
b2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9w
dGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFy
Z3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTE1NTYsNTkgKzE2ODgsNzAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3Zh
bChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfdmFs
X3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAg
Ly8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVz
dCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0eXBl
KQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQs
IHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdp
c3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3co
VmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIEFTU0VSVCh0eXBlID09IEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJy
YW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAgVU5VU0VEX1BBUkFNKHByb3BlcnR5
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogCiAgICAgSklU
SW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlw
ZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3Bl
cmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24odHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2MSwyMSBAQCB2b2lkIEpJ
VDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0g
cmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJh
c2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFs
dWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhh
c1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVP
cHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Ns
b3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0
aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBv
cGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTY1Miw3ICsxNzg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUo
YwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2
YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAg
IGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRl
Y29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDE5ICsxODAzLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+
KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwg
Ynl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
QnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICgh
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQ
Uik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0ds
b2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2lu
dFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25l
ZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2ODgs
NiArMTgyOCw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09Q
UwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNj
b3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3MDEs
NyArMTg0Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9y
Q29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwg
cmVnVDEpOwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5k
aW5nRXBvY2gsIHJlZ1QxKTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNz
T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4NTYs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAg
IEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJs
b2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDAp
OwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7
CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTE3OTQsODcgKzE5MzUsMTA1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9m
aWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayku
bV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJU
KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBj
dXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9
IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJv
ZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBj
b2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRh
ZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmls
ZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmly
b25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRh
T2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOwor
ICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5t
ZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CisKKyAgICAgICAgYXV0
byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJu
IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxp
bmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhciIpOworICAgICAgICB9OworCisgICAgICAg
IGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0m
IHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsodm0sIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX3Jl
c29sdmVfc2NvcGUgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MiKTsKKyAgICAgICAg
fTsKIAotI2RlZmluZSBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVz
b2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25z
dCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9S
RVNPTFZFX1RZUEUoUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCisgICAgICAgIGF1dG8gZ2VuZXJp
Y1Jlc29sdmVTY29wZUdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVy
biBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFz
ZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgZ2VuZXJpYyIpOwogICAgICAgICB9OwotI3VuZGVmIFJF
U09MVkVfU0NPUEVfR0VORVJBVE9SCisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7
CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNv
bHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0
dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICBj
b2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVy
YXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdl
bmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChj
b2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSwgc3RkOjpv
cHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkK
IHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkg
d29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRh
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCiAgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAt
IHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAg
IFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUp
KTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRh
ZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7Cisg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1l
dGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQ
Uik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlv
bkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFs
T2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVj
ayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVj
dEdQUiA9IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9
PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsK
LSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFs
T2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6
b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNH
bG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hw
b2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAg
ICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0
YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBkb1ZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIs
IHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAg
ICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAg
ICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAgewot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwot
ICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwor
ICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICAg
ICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1
dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEy
ICsyMDQxLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50
U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAg
ICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGds
b2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwg
cmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4
aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2Jq
ZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9i
amVjdEdQUik7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIs
IEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJl
Z1QxKSk7CisgICAgICAgICAgICBqaXQubW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEgKzIwNTYsMTEgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNh
bFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBy
ZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAg
ICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2Jq
ZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZz
ZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsyMDY4
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAg
ICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENs
b3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMjA3OCw0NSBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsK
LQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90
R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewor
ICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5
cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxz
ZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCBy
ZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXIubGluayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBN
ZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDApOwogCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBhdXRv
IGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAgICAgICAgICAg
SnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAg
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgbm90Q2Fz
ZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQ
cm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBl
bWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENh
c2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENh
c2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29k
ZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygm
aml0KTsKICAgICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2Zp
bGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1Yihz
bG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
d0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVf
c2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0K
IAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZlX3Nj
b3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAg
aWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkp
IFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAg
ICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUs
ICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1G
T1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3Vu
ZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZN
JiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2Fu
IG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRoIGFs
cmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAtMjA2
NSw2ICsyMTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8g
T09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTIx
NzgsNyArMjMwMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTIxODYsOSArMjMw
OCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0
aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRp
b25HZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwog
fQogCiAjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTIxOTYsNDEgKzIzMTgs
NTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwor
ICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NF
UlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09
IGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBb
XSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJl
VmFyIik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRl
T3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Ms
ICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAg
ICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAg
ICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxs
b3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0g
ICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNl
dEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNl
dCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5
cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAg
c3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAg
IEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAg
IH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0
YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0
YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAg
ICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNl
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJ
U3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJD
YWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUs
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlv
bmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewog
ICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3Jr
IHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCkBAIC0yMjM5LDk5ICsyMzcwLDg4IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICB1c2luZyBNZXRhZGF0YSA9
IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAg
IFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUp
KTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisg
ICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0
cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0
LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAK
LSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVH
UFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAg
ICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwg
U3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSKSB7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1
cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAg
ICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkp
OwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9
IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSks
IHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBv
aW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
KyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlv
bldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBl
bWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykg
ewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwot
ICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFy
RnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0g
ICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRvIGVtaXRHZXRDbG9z
dXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7CiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBs
c2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2Nv
cGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CisgICAg
ICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOworICAgICAgICBq
aXQuYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSksIHJlZ1QwKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8g
ZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAg
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVj
dGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhl
IEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tp
bmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1Qw
OwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKICAgICAgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAgICAgICAgICBqaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAg
ICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBi
cmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQo
c2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGppdC5icmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgb2Zmc2V0
KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1
bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1
c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRX
aXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091
dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBq
aXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJz
dE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24o
SklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxp
bmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBu
ZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZz
ZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSksIHJlc3VsdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0Lm5lZzMy
KG9mZnNldCk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZz
ZXQpOworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBU
aW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3Bl
cmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0
VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdU
MCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkp
LCByZWdUMyk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwogICAg
ICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAg
ICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQxLDg2ICsyNDYxLDYzIEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAg
ICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVl
KTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0
Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBl
IGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
LSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsK
KyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0
T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIo
R2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBU
MAogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmso
JmppdCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0
LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAg
ICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBK
dW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0ds
b2JhbFByb3BlcnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNl
LmFwcGVuZChqdW1wKCkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVt
cCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxz
ZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9
CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEp
OwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6
Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwog
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgp
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRj
aEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
dGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9S
KHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6b3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAot
ICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNj
b3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBK
SVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZV8iICNyZXNvbHZl
VHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX0dFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0K
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9m
cm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVk
IGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5l
IEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0
IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVy
IGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNp
ZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTI0NDks
NyArMjU0Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICBDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgSnVtcCBl
eGNlcHRpb25DaGVjayA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0pOwog
Ci0gICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0
ZXIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9y
ZTY0KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBNZXRhZGF0YTo6
b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkp
OwogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZv
OjpudW1iZXJUYWdSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2XzY0KQpAQCAtMjQ3MSw4NiArMjU2
OCw3OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB9CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFs
VmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5k
KTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiog
YWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kiog
aW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwot
ICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5k
LCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQ
dHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZh
cmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KLQogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRU
b1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJ
bmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1
cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVp
bnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRh
ZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29sdmVU
eXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENvZGUg
PSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2
ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNo
ZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMg
Zm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVf
c2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAg
ICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3Qg
Y2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisgICAg
ICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBm
b3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCByZWdU
MSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Cisg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAg
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisK
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKIAogICAg
ICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVt
cCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0
cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
MCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CisgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
Z1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9T
Y29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7CiAgICAgICAgICAgICBu
ZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdU
MCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAg
ICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMSwgVGltZXNFaWdodCwg
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Cisg
ICAgICAgICAgICAvLyBPT1BTOiB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQg
dG9vayBHUFJSZWdzIGluc3RlYWQgb2YgVlJzCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgog
ICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29w
ZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAg
IGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgIGlmICghaXNJ
bml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2
ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7CisKKyAg
ICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0
YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJ
bml0aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkp
ICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5
cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAg
ICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVy
YW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5k
U2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5
KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEp
OworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAg
ICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJs
ZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5t
X3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNj
b3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNo
cG9pbnRTZXQoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2lu
dChyZWdUMSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QxKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAg
ICAgICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRv
b2sgYSBHUFJSZWcgZm9yIHZhbHVlLgorICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29w
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1
cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0g
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3Bl
cmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDApOwor
ICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXROb3Rp
ZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFi
bGVzKCkpKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBoYXZlIGEg
dmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIG93bmVyL3ZhbHVlLgogICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTI1NjQsNTggKzI2NTQs
NTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICB9
CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9
IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
IDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBE
eW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxy
ZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6
IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0
Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIC8v
IElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUgdGhpbmdzCisgICAgLy8gdGhh
dCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBpcyB0aGUg
dHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIsCisgICAgLy8gYWxsIENvZGVC
bG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIKKyAgICAvLyBpZiB0aGUgdmFyIGlu
amVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhlbiB3ZSB0
YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hhdCB0eXBl
IHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9z
dXJlVmFyKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9m
aWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUo
UmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBlbWl0Q29kZShDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZWxzZSB7CiAgICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJl
Z1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOwogICAgICAgICBhbmQzMihU
cnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2
ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3Bl
cnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsKKworICAg
ICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAg
ICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlz
KTsKIAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5s
aW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKICAgICB9CiB9
CiAKQEAgLTI2MjQsMTggKzI3MDgsMjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19z
Y29wZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlw
ZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNvbHZlVHlw
ZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2Nr
IHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENvZGVCbG9ja3MgYXJlIGd1YXJhbnRl
ZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFyLgogICAgICAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Ro
cm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2UgewogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlv
bik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0
cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAg
ICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2Rl
SW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIEFTU0VSVChtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3Ry
dWN0aW9uKTsKIAogICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
YXJndW1lbnRHUFIyOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAgLTI2NTIsNyArMjczOSw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjpl
YnApOwpAQCAtMjcwMSw3ICsyNzg4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJn
dW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBy
ZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFn
ZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1Qw
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3NTksNyArMjg0
Niw2IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIHZvaWQgSklU
OjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
dW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpAQCAtMjc2Nyw3ICsyODUzLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJ
bnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwg
cmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI4MjMsNyArMjkwOSw2IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG8KIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAgLTI4MzksNyArMjkyNCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKICAgICBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gbW9kZSBzZXQg
d2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBwcm9maWxlIGl0IGluIHRo
ZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CisgICAgaWYgKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgewogICAgICAgICBHUFJS
ZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBl
bmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKCh+SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSAmIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKQEAgLTI4ODEsNzggKzI5NjYsODcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVt
ZXJhdG9yR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFt
ZSA9IGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKIAot
ICAgIGF1dG8gcmVzdWx0R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRH
UFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVu
dW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxpbmVFbnVtZXJhdG9y
R2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVn
aXN0ZXJzOjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1v
ZGUsIHNjcmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwg
cHJvcGVydHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRh
Lm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRh
dGEoKSwgc2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9y
ZThUb01ldGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1l
dGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChiYXNlR1BSKSk7CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1
ZS4KLSAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBp
c05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRy
dXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0
cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwot
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMyk7Ci0gICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1
Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCBzY3JhdGNoMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBi
cmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29t
cHV0ZSB0aGUgb2Zmc2V0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1Qz
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8g
SWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9y
YWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNz
ID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdU
MCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1w
IG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJl
c3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSkpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7
CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNP
YmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2Fz
ZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQog
ICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJl
c3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9Q
dHIocmVnVDMsIHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNo
MSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSwgc2NyYXRjaDIpOworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0
cihzY3JhdGNoMiwgc2NyYXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkgPSBvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBz
dGF0aWNfY2FzdDxpbnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0
KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0
eSksIHJlc3VsdEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwg
VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25l
Q2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMp
OwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNT
ZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVy
YXRvck1ldGFkYXRhKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0
Y2gpLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVu
dW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRo
aXMpOwotICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBU
cnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAg
IEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVk
SW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJl
cGxhY2UgdGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluZGV4LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJv
cGVydHlHUFIpOwogCiAgICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAK
ICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRC
eVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjk2MSwxMCAr
MzA1NSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBn
ZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0
b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBl
LCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0
b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJh
bENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVu
Y3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yOwpAQCAtMjk3Myw3ICszMDY2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVy
YXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVB
ZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1l
dGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9N
ZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVt
ZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMiha
ZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3Ry
dWN0dXJlTW9kZSkpKTsKIApAQCAtMzA2Miw2ICszMTU3LDEzIEBAIHZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxp
bmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcikK
K3sKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZt
KCksIG93bmVyLCBzZWxlY3RTY3JhdGNoR1BSKG93bmVyKSk7CisgICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25l
cik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NTIsNyArMTU1
Miw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1
bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0
YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAi
LCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25z
OjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50
ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5m
bywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHVi
Um91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oIgog
I2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNs
b3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFu
ZGxpbmdTY29wZS5oIgpAQCAtMzcwLDYgKzM3MSwxNSBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxl
QW5kU2V0SGV1cmlzdGljcyhWCiAgICAgCiAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVBy
b2ZpbGVQcmVkaWN0aW9ucygpOwogCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2Rl
PiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtl
ZEJhc2VsaW5lQ29kZSkgeworICAgICAgICAgICAgLy9kYXRhTG9nTG4oIlNoYXJlZCB2aWEgTExJ
bnQiKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNv
ZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBjb2RlQmxvY2st
PmppdE5leHRJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKwogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hl
ZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlKSVRD
b21waWxlIiwgKCJ0aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2RlQmxvY2st
PmxsaW50RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BK
bnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVy
YXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0
cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAg
ICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUs
ICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0MSwgdDIp
CiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGJpbmVxIFRhZ09mZnNldFtjZnIs
IHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBAIC0xMDIzLDcgKzEwMTksNyBAQCBtYWNybyBwcmVP
cChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgICMgTWV0YWRhdGEgaW4gdDEs
IHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQyLCAuc2xvdykKICAgICAg
ICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFy
aXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9m
aWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAgICAgIGRpc3Bh
dGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4OSwyMiArMTA4NSwxOCBAQCBlbmQpCiAKIGxsaW50
T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAKLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUo
dHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2Zp
bGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgIGVuZAotCiAgICAgbWV0YWRh
dGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5lcSB0MSwgSW50MzJUYWcsIC5vcE5lZ2F0
ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBu
ZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRh
dGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0NSwgdDMpCiAg
ICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdhdGVTcmNOb3RJbnQ6CiAgICAgYmlhIHQx
LCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JpIDB4ODAwMDAwMDAsIHQxCi0gICAg
dXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFy
aXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0NSwgdDMpCiAgICAgcmV0
dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExMTUsMTAgKzExMDcsNiBAQCBlbmQp
CiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBp
bnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9wZXJhdGlvbikKICAgICBsbGludE9wV2l0
aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gYXJpdGhQcm9maWxl
KHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBl
bmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCiAgICAgICAgIGdldChtX3JocywgdDIpCiAg
ICAgICAgIGdldChtX2xocywgdDApCkBAIC0xMTI2LDcgKzExMTQsNyBAQCBtYWNybyBiaW5hcnlP
cEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCBJbnQzMlRhZywgLm9w
MU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5vcDJOb3RJbnQKLSAgICAgICAg
YXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAg
ICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0Mywg
dDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKQEAgLTExMzYsMTIgKzExMjQs
MTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBi
aWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAgICAgICAgYmliIHQzLCBMb3dlc3RUYWcsIC5vcDFO
b3RJbnRPcDJEb3VibGUKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAuc2xvdwotICAgICAg
ICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0
NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAg
ICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKLSAgICAg
ICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVy
LCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQxKQog
ICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1Myw3ICsxMTQxLDcgQEAgbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQg
aXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IG5v
dC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYmlhIHQzLCBMb3dlc3RUYWcsIC5z
bG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51
bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGZpaTJkIHQxLCB0
MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJhdGlvbihmdDEsIGZ0MCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNDQxLDggKzQ0MSwxMyBAQCBt
YWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQog
ICAgICAgICAgICAgY0NhbGwyKF9sbGludF9sb29wX29zcikKICAgICAgICAgICAgIGJ0cHogcjAs
IC5yZWNvdmVyCi0KICAgICAgICAgICAgIG1vdmUgcjEsIHNwCisKKyAgICAgICAgICAgICMgQmFz
ZWxpbmUgdXNlcyBMTEludCdzIFBCIHJlZ2lzdGVyIGZvciBpdHMgSklUIGNvbnN0YW50IHBvb2wu
CisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKKyAgICAgICAgICAgIGxvYWRw
IENvZGVCbG9jazo6bV9qaXREYXRhW1BCXSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9j
azo6SklURGF0YTo6bV9qaXRDb25zdGFudFBvb2xbUEJdLCBQQgorCiAgICAgICAgICAgICBpZiBB
Uk02NEUKICAgICAgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9m
ZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6bG9vcE9TUkVudHJ5KSAq
IFB0clNpemUsIGEyCiAgICAgICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0
clRhZyAjIEpTRW50cnlQdHJUYWcKQEAgLTEwNTYsMTAgKzEwNjEsNiBAQCBzdHJpY3RFcXVhbGl0
eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9w
Y29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9w
XyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwg
bWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUp
Ci0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRo
UHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDJdCi0gICAgICAgIGVuZAotCiAg
ICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDEK
ICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpAQCAtMTA2OSw3ICsxMDcwLDcgQEAgbWFjcm8gcHJl
T3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9u
KHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51bWJlclRhZywgdDEKICAgICAgICAgc3RvcmVxIHQx
LCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUlu
dCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFBy
b2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0x
MTM0LDExICsxMTM1LDYgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRl
LCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4p
Ci0KLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUs
IE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6
bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCiAgICAgbWV0YWRhdGEodDEsIHQyKQpAQCAt
MTE0NiwxMiArMTE0MiwxMiBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdh
dGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDMK
ICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2Zp
bGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmls
ZUludCwgdDEsIHQyKQogICAgIHJldHVybih0MykKIC5vcE5lZ2F0ZU5vdEludDoKICAgICBidHF6
IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JxIDB4ODAwMDAwMDAwMDAwMDAw
MCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVw
ZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQxLCB0
MikKICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTY0LDEwICsxMTYwLDYg
QEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgIGxsaW50T3BX
aXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0YSh0NSwgdDAp
CiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVv
cGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2Zp
bGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fcmhzLCB0MCkKICAg
ICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXpl
LCB0MCwgdDEpCkBAIC0xMTc3LDcgKzExNjksNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3Jl
KG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJP
cGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5zbG93LCB0MikKIAotICAgICAgICBwcm9maWxlKEFy
aXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29k
ZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkK
IAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTg3LDEwICsxMTc5LDEwIEBAIG1hY3JvIGJpbmFyeU9w
Q3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAu
c2xvdwogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCi0g
ICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVC
aW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIs
IHQ1LCB0MikKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJJ
bnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRh
dGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQs
IHQ1LCB0MikKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAg
ICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEyMDQsOSArMTE5Niw5IEBAIG1hY3JvIGJpbmFyeU9w
Q3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKIAogICAgIC5vcDJOb3RJbnQ6CiAgICAgICAgICMg
Rmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBpcyBkZWZpbml0
ZWx5IG5vdC4KLSAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYnRxeiB0MSwgbnVtYmVy
VGFnLCAuc2xvdwotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAg
ICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50
TnVtYmVyLCB0NSwgdDIpCisgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGNpMmRzIHQw
LCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQpA
QCAtMTUxOCw3ICsxNTEwLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWRfZGly
ZWN0LAogZW5kKQogCiAjIFRoZSBiYXNlIG9iamVjdCBpcyBleHBlY3RlZCBpbiB0MwotbWFjcm8g
cGVyZm9ybUdldEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LCBtb2RlTWV0YWRhdGFOYW1lLCB2YWx1
ZVByb2ZpbGVOYW1lLCBzbG93TGFiZWwsIHNpemUsIG1ldGFkYXRhLCByZXR1cm4pCittYWNybyBw
ZXJmb3JtR2V0QnlJREhlbHBlcihvcGNvZGVTdHJ1Y3QsIG1vZGVNZXRhZGF0YU5hbWUsIHZhbHVl
UHJvZmlsZU5hbWUsIHNsb3dMYWJlbCwgc2l6ZSwgbWV0YWRhdGEsIHJldHVybiwgZG9BcnJheVBy
b2ZpbGUpCiAgICAgbWV0YWRhdGEodDIsIHQxKQogICAgIGxvYWRiICVvcGNvZGVTdHJ1Y3QlOjpN
ZXRhZGF0YTo6JW1vZGVNZXRhZGF0YU5hbWUlLm1vZGVbdDJdLCB0MQogCkBAIC0xNTQ2LDcgKzE1
MzgsNyBAQCBtYWNybyBwZXJmb3JtR2V0QnlJREhlbHBlcihvcGNvZGVTdHJ1Y3QsCiAub3BHZXRC
eUlkQXJyYXlMZW5ndGg6CiAgICAgYmJuZXEgdDEsIGNvbnN0ZXhwciBHZXRCeUlkTW9kZTo6QXJy
YXlMZW5ndGgsIC5vcEdldEJ5SWRVbnNldAogICAgIG1vdmUgdDMsIHQwCi0gICAgYXJyYXlQcm9m
aWxlKCVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6JW1vZGVNZXRhZGF0YU5hbWUlLmFycmF5TGVu
Z3RoTW9kZS5hcnJheVByb2ZpbGUsIHQwLCB0MiwgdDUpCisgICAgZG9BcnJheVByb2ZpbGUodDAs
IHQyLCB0NSwgdDEpCiAgICAgYnRpeiB0MCwgSXNBcnJheSwgc2xvd0xhYmVsCiAgICAgYnRpeiB0
MCwgSW5kZXhpbmdTaGFwZU1hc2ssIHNsb3dMYWJlbAogICAgIGxvYWRDYWdlZEpTVmFsdWUoSlNP
YmplY3Q6Om1fYnV0dGVyZmx5W3QzXSwgdDAsIHQxKQpAQCAtMTU2OCw3ICsxNTYwLDEwIEBAIGVu
ZAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWQsIE9wR2V0QnlJZCwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgZ2V0KG1fYmFzZSwgdDAp
CiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUNlbGwoc2l6ZSwgdDAsIHQzLCAub3BHZXRCeUlk
U2xvdykKLSAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEdldEJ5SWQsIG1fbW9kZU1ldGFkYXRh
LCBtX3Byb2ZpbGUsIC5vcEdldEJ5SWRTbG93LCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuKQorICAg
IHBlcmZvcm1HZXRCeUlESGVscGVyKE9wR2V0QnlJZCwgbV9tb2RlTWV0YWRhdGEsIG1fcHJvZmls
ZSwgLm9wR2V0QnlJZFNsb3csIHNpemUsIG1ldGFkYXRhLCByZXR1cm4sCisgICAgICAgIG1hY3Jv
IChjZWxsQW5kSW5kZXhpbmdUeXBlLCBtZXRhZGF0YSwgc2NyYXRjaDEsIHNjcmF0Y2gyKQorICAg
ICAgICAgICAgYXJyYXlQcm9maWxlKE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxl
LCBjZWxsQW5kSW5kZXhpbmdUeXBlLCBtZXRhZGF0YSwgc2NyYXRjaDEpCisgICAgICAgIGVuZCkK
IAogLm9wR2V0QnlJZFNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfZ2V0
X2J5X2lkKQpAQCAtMzAwMiw3ICsyOTk3LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVy
YXRvcl9vcGVuLCBPcAogCiAgICAgbG9hZFZhcmlhYmxlKGdldCwgbV9pdGVyYXRvciwgdDMpCiAg
ICAgYnRxbnogdDMsIG5vdENlbGxNYXNrLCAuaXRlcmF0b3JPcGVuR2VuZXJpY0dldE5leHRTbG93
Ci0gICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck9wZW4sIG1fbW9kZU1ldGFkYXRh
LCBtX25leHRQcm9maWxlLCAuaXRlcmF0b3JPcGVuR2VuZXJpY0dldE5leHRTbG93LCBzaXplLCBt
ZXRhZGF0YSwgc3RvcmVOZXh0QW5kRGlzcGF0Y2gpCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIo
T3BJdGVyYXRvck9wZW4sIG1fbW9kZU1ldGFkYXRhLCBtX25leHRQcm9maWxlLCAuaXRlcmF0b3JP
cGVuR2VuZXJpY0dldE5leHRTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVOZXh0QW5kRGlzcGF0
Y2gsIG1hY3JvKGEsIGIsIGMsIGQpIGVuZCkKIAogLml0ZXJhdG9yT3BlbkdlbmVyaWNHZXROZXh0
U2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2dl
dF9uZXh0KQpAQCAtMzA2MSw3ICszMDU2LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVy
YXRvcl9uZXh0LCBPcAogCiAgICAgbG9hZFZhcmlhYmxlKGdldCwgbV92YWx1ZSwgdDMpCiAgICAg
YnRxbnogdDMsIG5vdENlbGxNYXNrLCAuZ2V0RG9uZVNsb3cKLSAgICBwZXJmb3JtR2V0QnlJREhl
bHBlcihPcEl0ZXJhdG9yTmV4dCwgbV9kb25lTW9kZU1ldGFkYXRhLCBtX2RvbmVQcm9maWxlLCAu
Z2V0RG9uZVNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZURvbmVBbmRKbXBUb0dldFZhbHVlKQor
ICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JOZXh0LCBtX2RvbmVNb2RlTWV0YWRh
dGEsIG1fZG9uZVByb2ZpbGUsIC5nZXREb25lU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlRG9u
ZUFuZEptcFRvR2V0VmFsdWUsIG1hY3JvKGEsIGIsIGMsIGQpIGVuZCkKIAogLmdldERvbmVTbG93
OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfZ2V0X2Rv
bmUpCkBAIC0zMDg2LDcgKzMwODEsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9y
X25leHQsIE9wCiAgICAgIyBSZWxvYWQgdGhlIG5leHQgcmVzdWx0IHRtcCBzaW5jZSB0aGUgZ2V0
X2J5X2lkIGFib3ZlIG1heSBoYXZlIGNsb2JiZXJlZCB0My4KICAgICBsb2FkVmFyaWFibGUoZ2V0
LCBtX3ZhbHVlLCB0MykKICAgICAjIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgaWYgdGhlIGl0ZXJh
dG9yIHJlc3VsdCBpcyBhIGNlbGwgaGVyZSBzaW5jZSB3ZSB3aWxsIGhhdmUgdGhyb3duIGFuIGVy
cm9yIGJlZm9yZS4KLSAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV92
YWx1ZU1vZGVNZXRhZGF0YSwgbV92YWx1ZVByb2ZpbGUsIC5nZXRWYWx1ZVNsb3csIHNpemUsIG1l
dGFkYXRhLCBzdG9yZVZhbHVlQW5kRGlzcGF0Y2gpCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIo
T3BJdGVyYXRvck5leHQsIG1fdmFsdWVNb2RlTWV0YWRhdGEsIG1fdmFsdWVQcm9maWxlLCAuZ2V0
VmFsdWVTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVWYWx1ZUFuZERpc3BhdGNoLCBtYWNybyhh
LCBiLCBjLCBkKSBlbmQpCiAKIC5nZXRWYWx1ZVNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGlu
dF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9nZXRfdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lv
biAyODI2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE0MjAsNyArMTQyMCw4IEBAIGVuZAogCiBtYWNy
byBjaGVja1N3aXRjaFRvSklUKGluY3JlbWVudCwgYWN0aW9uKQogICAgIGxvYWRwIENvZGVCbG9j
a1tjZnJdLCB0MAotICAgIGJhZGRpcyBpbmNyZW1lbnQsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1
dGVDb3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29u
dGludWUKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MF0sIHQw
CisgICAgYmFkZGlzIGluY3JlbWVudCwgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50
ZXJbdDBdLCAuY29udGludWUKICAgICBhY3Rpb24oKQogICAgIC5jb250aW51ZToKIGVuZApAQCAt
MTUwMyw3ICsxNTA0LDggQEAgbWFjcm8gcHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxv
YwogICAgIGNvZGVCbG9ja0dldHRlcih0MSkKICAgICBjb2RlQmxvY2tTZXR0ZXIodDEpCiAgICAg
aWYgbm90IChDX0xPT1Agb3IgQ19MT09QX1dJTikKLSAgICAgICAgYmFkZGlzIDUsIENvZGVCbG9j
azo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2Nv
dW50ZXJbdDFdLCAuY29udGludWUKKyAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2xsaW50RXhl
Y3V0ZUNvdW50ZXJbdDFdLCB0MAorICAgICAgICBiYWRkaXMgNSwgQmFzZWxpbmVFeGVjdXRpb25D
b3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICAgICAgaWYgSlNWQUxVRTY0CiAg
ICAgICAgICAgICBtb3ZlIGNmciwgYTAKICAgICAgICAgICAgIG1vdmUgUEMsIGExCkBAIC0xNjE3
LDE0ICsxNjE5LDE0IEBAIG1hY3JvIGZ1bmN0aW9uSW5pdGlhbGl6YXRpb24ocHJvZmlsZUFyZ1MK
ICAgICAjIG9wdGltYWwgd2F5IGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBtb3JlIHRoYW4g
Zml2ZSByZWdpc3RlcnMgYXZhaWxhYmxlCiAgICAgIyBmb3IgYXJiaXRyYXJ5IHVzZSBpbiB0aGUg
aW50ZXJwcmV0ZXIuCiAgICAgbG9hZGkgQ29kZUJsb2NrOjptX251bVBhcmFtZXRlcnNbdDFdLCB0
MAotICAgIGFkZHAgLXByb2ZpbGVBcmdTa2lwLCB0MCAjIFVzZSBhZGRpIGJlY2F1c2UgdGhhdCdz
IHdoYXQgaGFzIHRoZSBwZWVwaG9sZQorICAgIGFkZHAgLXByb2ZpbGVBcmdTa2lwLCB0MAogICAg
IGFzc2VydChtYWNybyAob2spIGJwZ3RlcSB0MCwgMCwgb2sgZW5kKQogICAgIGJ0cHogdDAsIC5h
cmd1bWVudFByb2ZpbGVEb25lCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2FyZ3VtZW50VmFsdWVQ
cm9maWxlcyArIEZpeGVkVmVjdG9yOjptX3N0b3JhZ2UgKyBSZWZDb3VudGVkQXJyYXk6Om1fZGF0
YVt0MV0sIHQzCiAgICAgYnRweiB0MywgLmFyZ3VtZW50UHJvZmlsZURvbmUgIyBXaGVuIHdlIGNh
bid0IEpJVCwgd2UgZG9uJ3QgYWxsb2NhdGUgYW55IGFyZ3VtZW50IHZhbHVlIHByb2ZpbGVzLgog
ICAgIG11bHAgc2l6ZW9mIFZhbHVlUHJvZmlsZSwgdDAsIHQyICMgQWFhYWFoaGhoISBOZWVkIHN0
cmVuZ3RoIHJlZHVjdGlvbiEKICAgICBsc2hpZnRwIDMsIHQwICMgb2Zmc2V0IG9mIGxhc3QgSlNW
YWx1ZSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLgotICAgIGFkZHAgdDIsIHQzICMgcG9pbnRlciB0
byBlbmQgb2YgVmFsdWVQcm9maWxlIGFycmF5IGluIENvZGVCbG9jazo6bV9hcmd1bWVudFZhbHVl
UHJvZmlsZXMuCisgICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2Zp
bGUgYXJyYXkgaW4gdGhlIHZhbHVlIHByb2ZpbGUgYXJyYXkuCiAuYXJndW1lbnRQcm9maWxlTG9v
cDoKICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgbG9hZHEgVGhpc0FyZ3VtZW50T2Zmc2V0IC0g
OCArIHByb2ZpbGVBcmdTa2lwICogOFtjZnIsIHQwXSwgdDIKQEAgLTI1NjMsNiArMjU2NSwxNyBA
QCBtYWNybyBub3RTdXBwb3J0ZWQoKQogICAgIGVuZAogZW5kCiAKKworbWFjcm8gdXBkYXRlVW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBs
b2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwg
dGVtcAorICAgIG9yaCB0eXBlLCBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQK
KworbWFjcm8gdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0
YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRo
UHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgQmluYXJ5QXJpdGhQcm9maWxl
OjptX2JpdHNbdGVtcF0KK2VuZAorCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRoZSBY
ODZfNjRfV0lOIGNvbmRpdGlvbiBoZXJlLCBzaW5jZSBXRUJBU1NFTUJMWSBzaG91bGQgYWxyZWFk
eSBiZSBmYWxzZSBvbiBXaW5kb3dzCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAzNzE2CiBpZiBXRUJBU1NFTUJMWSBhbmQgbm90IFg4Nl82NF9XSU4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlm
aWVyLmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsMTAgQEAg
cHVibGljOgogICAgIENhY2hlYWJsZUlkZW50aWZpZXIoKSA9IGRlZmF1bHQ7CiAKICAgICBzdGF0
aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUNlbGwoSlNDZWxsKiBpZGVu
dGlmaWVyKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayosIGNvbnN0IElkZW50aWZpZXIm
KTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayosIFVuaXF1ZWRTdHJpbmdJbXBsKik7Cisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBD
YWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhD
b2RlQmxvY2tUeXBlKiwgY29uc3QgSWRlbnRpZmllciYpOworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIFVuaXF1
ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0
aWMgY29uc3RleHByIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbVJhd0JpdHModWludHB0
cl90IHJhd0JpdHMpIHsgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIocmF3Qml0cyk7IH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lvbiAyODI2MjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSwxMiArMzUsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBD
YWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmll
ciYgaSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJs
ZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYg
aSkKIHsKICAgICByZXR1cm4gY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKGNv
ZGVCbG9jaywgaS5pbXBsKCkpOwogfQogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxv
Y2tUeXBlKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgQVNTRVJU
X1VOVVNFRChjb2RlQmxvY2ssIGNvZGVCbG9jay0+aGFzSWRlbnRpZmllcih1aWQpKTsKICAgICBy
ZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcih1aWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FjaGVk
VHlwZXMuaCIKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ1aWx0
aW5OYW1lcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ2FjaGVFcnJvci5oIgogI2luY2x1ZGUgIkJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODI2MjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00ODAsNyArNDgwLDcgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNs
b3dfcGF0aF90bwogI2lmIEVOQUJMRShKSVQpCiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFByb2Zp
bGVGb3JVbmFyeUFyaXRoT3AoT3BOZWdhdGU6Ok1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZSBy
ZXN1bHQsIEpTVmFsdWUgb3BlcmFuZCkKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmls
ZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9m
aWxlID0gKm1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOwogICAgIHByb2ZpbGUub2JzZXJ2ZUFyZyhv
cGVyYW5kKTsKICAgICBBU1NFUlQocmVzdWx0LmlzTnVtYmVyKCkgfHwgcmVzdWx0LmlzQmlnSW50
KCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1
dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2
ICsyODksOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRP
ZlJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwg
bV9yYXJlRGF0YSk7IH0KICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFzU3Ry
aW5nSW5SYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihSYXJlRGF0YSwgbV9hc1N0
cmluZyk7IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0Zv
ckNhbGwoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2Nv
ZGVCbG9ja0ZvckNhbGwpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZD
b2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25F
eGVjdXRhYmxlLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7IH0KIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NSw2ICszODUs
OSBAQCBzdGF0aWMgdm9pZCBvdmVycmlkZURlZmF1bHRzKCkKICAgICAgICAgT3B0aW9uczo6dGhy
ZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpID0gMTUwMDsKICAgICAgICAgT3B0aW9u
czo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkgPSAxMDA7CiAgICAgfQorCisgICAgLy8g
T09QUworICAgIC8vT3B0aW9uczo6bWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3Bv
aW50c0ZvckJhc2VsaW5lKCkgPSA0NTA7CiB9CiAKIHN0YXRpYyB2b2lkIGNvcnJlY3RPcHRpb25z
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAko
cmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw2IEBAIGJvb2wgY2FuVXNlV2Vi
QXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihJbnQzMiwgZXZhbFRocmVzaG9sZE11bHRpcGxp
ZXIsIDEwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBtYXhpbXVtRXZhbENh
Y2hlYWJsZVNvdXJjZUxlbmd0aCwgMjU2LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCi0gICAg
dihCb29sLCByYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNl
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRz
QmV0d2VlbkNoZWNrcG9pbnRzRm9yQmFzZWxpbmUsIDEwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JV
cHBlclRpZXJzLCA1MDAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXApAQCAtNTMyLDYgKzUz
MSw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihCb29sLCB1
c2VEYXRhSUMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJ
Q0luT3B0aW1pemluZ0pJVCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwg
dXNlRGF0YUlDU2hhcmluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwg
dXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
XAogICAgIC8qIEZlYXR1cmUgRmxhZ3MgKi9cCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI4
MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsOSArMzk2LDExIEBAIHZvaWQgU2NyaXB0RXhlY3V0
YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGkKICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVCeXRlY29k
ZSgpKQogICAgICAgICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7CiAKLSAgICBpZiAoT3B0aW9uczo6
dXNlTExJbnQoKSkKKyAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gYmFzZWxpbmVSZWYg
PSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUp
IHsKKyAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNl
bGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9IGVsc2UgaWYgKE9wdGlvbnM6OnVzZUxM
SW50KCkpIHsKICAgICAgICAgc2V0dXBMTEludChjb2RlQmxvY2spOwotICAgIGVsc2UKKyAgICB9
IGVsc2UKICAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CiAKICAgICBpbnN0YWxsQ29k
ZSh2bSwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmNvZGVUeXBlKCksIGNvZGVCbG9jay0+c3BlY2lh
bGl6YXRpb25LaW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxM
SW50VGllclVwQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkocmV2aXNpb24gMjgyNjIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw5ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJt
VXAoKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgp
KQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9w
dGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hv
bGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZv
ck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdU
aHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsK
ICAgICB9CiAKICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkK
QEAgLTY1LDkgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVTb29uKCkKICAgICB7
CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9CQlEoKSkKLSAgICAgICAg
ICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZVNvb24o
KSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNo
b2xkRm9yQkJRT3B0aW1pemVTb29uKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRO
ZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCksIG51bGxw
dHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9N
R09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAko
cmV2aXNpb24gMjgyNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJV
cENvdW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewogCiBUaWVyVXBDb3VudDo6VGllclVwQ291bnQoKQogewotICAg
IHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2Fy
bVVwKCksIG51bGxwdHIpOworICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRG
b3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogfQogCiBUaWVyVXBDb3VudDo6flRpZXJVcENv
dW50KCkgPSBkZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRp
ZXJVcENvdW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVRpZXJVcENvdW50LmgJKHJldmlzaW9uIDI4MjYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAodWludDMyX3QgZnVuY3Rpb25J
bmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwg
ZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgYWZ0ZXIgd2FybS11cC4iKTsKLSAgICAg
ICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJX
YXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJl
c2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0KIAogICAgIGJvb2wgY2hl
Y2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtOTAsMTQgKzkwLDE0IEBAIHB1
YmxpYzoKICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24odWludDMyX3QgZnVuY3Rpb25J
bmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwg
ZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgbmV4dCBpbnZvY2F0aW9uLiIpOwotICAg
ICAgICBzZXROZXdUaHJlc2hvbGQoMCwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9s
ZCgwKTsKICAgICB9CiAKICAgICB2b2lkIG9wdGltaXplU29vbih1aW50MzJfdCBmdW5jdGlvbklu
ZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBm
dW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBzb29uLiIpOwogICAgICAgICAvLyBGSVhN
RTogTmVlZCBhZGp1c3RtZW50IG9uY2Ugd2UgZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2Fz
bSBmdW5jdGlvbnMuCi0gICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRG
b3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9sZChP
cHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAgICAgfQogCiAgICAgdm9p
ZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQodWludDMy
X3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQpJbmRleDogU291cmNl
L1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJKHJldmlz
aW9uIDI4MjYyMikKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw2ICs2NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CiAg
ICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBCYWcmIG9wZXJhdG9yPShCYWc8
VCwgVT4mJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh1bndyYXBwZWRIZWFkKCkgPT0gb3Ro
ZXIudW53cmFwcGVkSGVhZCgpKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgICAg
IEJhZyBkZXN0cm95OworICAgICAgICBkZXN0cm95Lm1faGVhZCA9IHVud3JhcHBlZEhlYWQoKTsK
KyAgICAgICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgpOworICAgICAgICBvdGhlci5t
X2hlYWQgPSBudWxscHRyOworCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICB+
QmFnKCkKICAgICB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBUb29scy9TY3JpcHRzL3J1bi1q
c2Mtc3RyZXNzLXRlc3RzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJl
c3MtdGVzdHMJKHJldmlzaW9uIDI4MjYyMikKKysrIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJl
c3MtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTc3NiwxNyArNzc2LDE4IEBAIGVuZAogCiAjIEZJ
WE1FOiBuZWVkIHRvIGZpeCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE4NzAzIHRvIGVuYWJsZSB0aGlzIG9uIExpbnV4L01JUFMuCiBkZWYgcnVuQnl0ZWNvZGVDYWNo
ZUltcGwob3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zLCAqYWRkaXRpb25hbEVudikKLSAgICBp
ZiAoJGhvc3RPUyA9PSAiZGFyd2luIikKLSAgICAgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2Rl
LWNhY2hlIgotICAgIGVsc2lmICgkaG9zdE9TID09ICJsaW51eCIgJiYgJGFyY2hpdGVjdHVyZSAh
PSAibWlwcyIpCi0gICAgICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1jYWNoZVhYWFhYWCIK
LSAgICBlbHNlCi0gICAgICAgIHNraXAKLSAgICAgICAgcmV0dXJuCi0gICAgZW5kCisgICAgIyBP
T1BTCisgICAgI2lmICgkaG9zdE9TID09ICJkYXJ3aW4iKQorICAgICMgICAgZmlsZVRlbXBsYXRl
ID0gImJ5dGVjb2RlLWNhY2hlIgorICAgICNlbHNpZiAoJGhvc3RPUyA9PSAibGludXgiICYmICRh
cmNoaXRlY3R1cmUgIT0gIm1pcHMiKQorICAgICMgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2Rl
LWNhY2hlWFhYWFhYIgorICAgICNlbHNlCisgICAgIyAgICBza2lwCisgICAgIyAgICByZXR1cm4K
KyAgICAjZW5kCiAKLSAgICBvcHRpb25zID0gQkFTRV9PUFRJT05TICsgRlRMX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMgKyAkdGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25z
Ci0gICAgYWRkUnVuQ29tbWFuZCgiYnl0ZWNvZGUtY2FjaGUiLCBbInNoIiwgKHBhdGhUb0hlbHBl
cnMgKyAiYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIuc2giKS50b19zLCBmaWxlVGVtcGxhdGUu
dG9fcywgKnZtQ29tbWFuZCwgJGJlbmNobWFyay50b19zXSArIG9wdGlvbnMsIHNpbGVudE91dHB1
dEhhbmRsZXIsIHNpbXBsZUVycm9ySGFuZGxlciwgKmFkZGl0aW9uYWxFbnYpCisgICAgI29wdGlv
bnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0
aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMKKyAgICAjYWRkUnVuQ29tbWFuZCgi
Ynl0ZWNvZGUtY2FjaGUiLCBbInNoIiwgKHBhdGhUb0hlbHBlcnMgKyAiYnl0ZWNvZGUtY2FjaGUt
dGVzdC1oZWxwZXIuc2giKS50b19zLCBmaWxlVGVtcGxhdGUudG9fcywgKnZtQ29tbWFuZCwgJGJl
bmNobWFyay50b19zXSArIG9wdGlvbnMsIHNpbGVudE91dHB1dEhhbmRsZXIsIHNpbXBsZUVycm9y
SGFuZGxlciwgKmFkZGl0aW9uYWxFbnYpCiBlbmQKIAogZGVmIHJ1bkJ5dGVjb2RlQ2FjaGUoKm9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438541</attachid>
            <date>2021-09-17 19:16:03 -0700</date>
            <delta_ts>2021-09-19 19:22:44 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>455230</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJh
eVByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMyLDcgQEAgdm9pZCBBcnJh
eVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJlZGljdAogewogICAgIG1fb2JzZXJ2ZWRBcnJheU1v
ZGVzIHw9IGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKGxhc3RTZWVuU3RydWN0dXJlKTsKICAgICAK
KyAgICAvLyBPT1BTOiBJcyBpdCBvayBmb3IgdGhpcyB0byByYWNlPyBJIHRoaW5rIHNvLgogICAg
IGlmICghbV9kaWRQZXJmb3JtRmlyc3RSdW5QcnVuaW5nCiAgICAgICAgICYmIGhhc1R3b09yTW9y
ZUJpdHNTZXQobV9vYnNlcnZlZEFycmF5TW9kZXMpKSB7CiAgICAgICAgIG1fb2JzZXJ2ZWRBcnJh
eU1vZGVzID0gYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUobGFzdFNlZW5TdHJ1Y3R1cmUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsOSArMjkwLDEwIEBAIG9wX2dyb3VwIDpQ
cm9maWxlZEJpbmFyeU9wLAogICAgICAgICBsaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAg
cmhzOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVz
LAorICAgICAgICBwcm9maWxlSW5kZXg6IHVuc2lnbmVkCiAgICAgfSwKICAgICBtZXRhZGF0YTog
ewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0
aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9ncm91cCA6VmFsdWVQ
cm9maWxlZEJpbmFyeU9wLApAQCAtMzUxLDkgKzM1MiwxMCBAQCBvcF9ncm91cCA6VW5hcnlJblBs
YWNlUHJvZmlsZWRPcCwKICAgICBdLAogICAgIGFyZ3M6IHsKICAgICAgICAgc3JjRHN0OiBWaXJ0
dWFsUmVnaXN0ZXIsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlCisg
ICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3AgOnRv
X29iamVjdCwKQEAgLTM4NCw5ICszODYsMTAgQEAgb3AgOm5lZ2F0ZSwKICAgICAgICAgZHN0OiBW
aXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG9wZXJhbmQ6IFZpcnR1YWxSZWdpc3RlciwKICAgICAg
ICAgcmVzdWx0VHlwZTogUmVzdWx0VHlwZSwKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUsCisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgog
ICAgIH0KIAogb3AgOm5vdCwKQEAgLTQ3OCw2ICs0ODEsNyBAQCBvcCA6Z2V0X2J5X2lkLAogICAg
IG1ldGFkYXRhOiB7CiAgICAgICAgIG1vZGVNZXRhZGF0YTogR2V0QnlJZE1vZGVNZXRhZGF0YSwK
ICAgICAgICAgcHJvZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFy
cmF5UHJvZmlsZSwKICAgICB9CiAKIG9wIDpnZXRfYnlfaWRfd2l0aF90aGlzLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
T3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Myw2ICs3MywyOCBAQCBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZv
ckltcGwoQnl0ZWNvCiAgICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9maWxlOwogfQogCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQcm9maWxlT2Zmc2V0
Rm9yKHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURfUEFSQU0oY2hlY2tw
b2ludEluZGV4KTsKKyAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9p
dGVyYXRvcl9vcGVuKSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAg
ICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mSXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck9wZW46OmdldE5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFBy
b2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlE
ID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgp
IHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJldHVybiBCeXRl
Y29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKKyAgICAgICAgY2Fz
ZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZEb25lUHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1
ZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2ZpbGUoKTsKKyAg
ICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSAKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZQ
cm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29s
IGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQg
Y2hlY2twb2ludEluZGV4KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJF
TEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsKIH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4g
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFy
dCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5m
bzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpA
QCAtMjI1LDYgKzIyMCwxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0TWF4QXJndW1lbnRDb3Vu
dEluCiAgICAgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZhbHVlOwogfQogCitD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRo
U3RhcnQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkgJiYgaXNUYWlsQ2FsbCgp
KTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+
KHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNp
dFdlYWsoVk0mIHZtKQogewogICAgIGF1dG8gaGFuZGxlU3BlY2lmaWNDYWxsZWUgPSBbJl0gKEpT
RnVuY3Rpb24qIGNhbGxlZSkgewpAQCAtMjk4LDIzICsyOTksMTEgQEAgdm9pZCBDYWxsTGlua0lu
Zm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5r
VG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1p
dEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBV
c2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsK
LSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0lu
Zm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwotICAgICAgICB1
LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAgICB9Ci0KLSAg
ICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsK
LSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKLSAgICBp
ZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlDOjpZZXMpIHsK
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7CiAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMxMiw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMgPSBqaXQuYnJh
bmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkg
eworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxD
YWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8vIFBvbHltb3Jw
aGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAgICAgIGppdC5m
YXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mTW9u
b21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAtMzM2LDE0ICsz
MjUsMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKLSAgICAg
ICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAg
ICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJU
YWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhckNh
bGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwogICAgICAgICBq
aXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAg
ICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsZWVM
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxsZWVD
aGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbExvY2F0aW9u
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7
CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOwogICAg
ICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzQ0LDM0IEBAIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0
LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRyKTsKKyAgICBz
ZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJl
Zyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwg
Y2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBj
YWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhp
cywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBpc1RhaWxDYWxs
KCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxs
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBX
VEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJ
Qzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BS
LCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdURk1vdmUocHJl
cGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxl
ZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxs
TGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aElt
cGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZ
ZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxM
aW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJ
bmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51
bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCB0
cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0zNjksMTcgKzM4
MSwzMCBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgCiAgICAgaml0
LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQ
YXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9pZCBDYWxsTGlu
a0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5m
bzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7
Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2bSwgVW5saW5r
ZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcgY2FsbGVlR1BSLCBH
UFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4o
dW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgc2V0VXBDYWxsKHVubGlu
a2VkQ2FsbExpbmtJbmZvLmNhbGxUeXBlLCBjYWxsZWVHUFIpOworICAgIG1fZG9uZUxvY2F0aW9u
ID0gdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtlZENh
bGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKQorICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEg
PSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigqdW5saW5rZWRDYWxsTGlua0luZm8u
ZnJhbWVTaHVmZmxlRGF0YSk7IC8vIE9PUFM6IHRpbWUgZm9yIHJlZiBjb3VudGluZz8KKyAgICBz
ZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24o
dm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENv
ZGU8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFp
bENhbGwoKSk7CiAKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKIAotICAgIGF1
dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAg
IH0pOwotCiAgICAgYXV0byBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICB1LmNvZGVJQy5tX2Nh
bGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+KGNhbGwpOwpAQCAtMzk3LDcgKzQyMiw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGly
ZWN0VGFpbENhbGxGYXMKIAogICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwog
ICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KGZhc3RQYXRoU3RhcnQpOworICAgICAgICB1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CiAg
ICAgfSk7CiAKICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEganVt
cCB0byB0aGUgc2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0
MywxMSBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogc3Ry
dWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87
CisKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2Fs
bExpbmtJbmZvPiB7CiBwdWJsaWM6Ci0gICAgZW51bSBDYWxsVHlwZSB7CisgICAgZW51bSBDYWxs
VHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25lLAogICAgICAgICBDYWxsLAogICAgICAgICBD
YWxsVmFyYXJncywKQEAgLTE2NSw2ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGVl
R1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYs
IFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUik7CisKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxs
ZWVHUFI7IH0KICAgICAKICAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgewpAQCAt
MTczLDEzICsxNzcsMTYgQEAgcHVibGljOgogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5r
SW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4g
cHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CisgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVT
RURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxD
YWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2Fs
bCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxD
YWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJik7CiAgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2
b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOworICAgIHN0YXRpYyB2b2lkIGVt
aXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpOwogICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVz
ZURhdGFJQzo6WWVzOyB9CkBAIC0yMDMsNyArMjEwLDYgQEAgcHVibGljOgogICAgICAgICBtX2Fs
bG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwogCkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9zbG93U3R1YiA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgSklUU3R1YlJv
dXRpbmUqIHNsb3dTdHViKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Nsb3dTdHViLmdldCgp
OwotICAgIH0KLQogICAgIGJvb2wgc2Vlbk9uY2UoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
aGFzU2VlblNob3VsZFJlcGF0Y2g7CkBAIC0zMDgsOSArMzA5LDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUpOwogICAgIH0KIAotICAg
IHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsK
KyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIH0KIAogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTM4MSw3ICszODIsOSBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFz
dFBhdGhTdGFydDsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZh
c3RQYXRoU3RhcnQoKTsKKwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC0z
OTcsNiArNDAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxs
PEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0
aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247CiAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoU3Rh
cnQ7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zh
c3RQYXRoU3RhcnQ7CiAgICAgICAgIH0gY29kZUlDOwogICAgIH0gdTsKIApAQCAtNDI0LDYgKzQy
OCwxMyBAQCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpCiAgICAgcmV0
dXJuIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCk7CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxM
aW5rSW5mbyB7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHks
IG9ubHkgdXNlZCBieSBiYXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBD
b2RlT3JpZ2luLgorICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307CisK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2
bSwgU3RydWN0dXJlKiAKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBz
ZXROdW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7CisKKyAgICBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKICAg
ICAKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KQEAgLTMxOCw3ICsz
MjAsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDCiAgICAgZmlu
aXNoQ3JlYXRpb25Db21tb24odm0pOwogCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAg
IGppdEFmdGVyV2FybVVwKCk7CisgICAgLy9qaXRBZnRlcldhcm1VcCgpOwogCiAgICAgaWYgKG90
aGVyLm1fcmFyZURhdGEpIHsKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwpA
QCAtMzU5LDcgKzM2MSw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJl
KiAKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0
ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9s
bGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVy
KCk7CisKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcw
LDEwICszNzQsMTMgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAog
Ly8gd2UgY2FuJ3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24u
IFRoaXMgcHJvY2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93
IG9yIGludHJvZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkg
b24gbGl2ZW5lc3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVC
bG9ja3Mgb2YgYW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNh
Y2hpbmcgdGhlIGxpdmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2su
CisvLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlz
IHNoYXJlZCBiZXR3ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAor
Ly8gc28gdGhlIGJ5dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2Nr
cyBzaGFyaW5nIGFuIFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtl
ZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7Cisg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOyAvLyBXZSBuZWVkIHRvIHNldCB1cCBvdXIgdmFs
dWUgcHJvZmlsZSBwb2ludGVycy4KKwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKQEAgLTQ3MSw2ICs0NzgsMTkgQEAgYm9vbCBD
b2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBicmVhazsgXAogICAg
IH0KIAorI2RlZmluZSBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAg
IENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAg
ICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPmJpbmFyeUFy
aXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwK
KyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAg
ICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisg
ICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlLT51bmFyeUFy
aXRoUHJvZmlsZShieXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwK
KyAgICB9CisKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25TdHJlYW0g
PSBpbnN0cnVjdGlvbnMoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uIDogaW5z
dHJ1Y3Rpb25TdHJlYW0pIHsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlv
bi0+b3Bjb2RlSUQoKTsKQEAgLTUzMywxNCArNTUzLDE0IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgTElOSyhPcENyZWF0ZVByb21pc2UpCiAgICAg
ICAgIExJTksoT3BDcmVhdGVHZW5lcmF0b3IpCiAKLSAgICAgICAgTElOSyhPcEFkZCkKLSAgICAg
ICAgTElOSyhPcE11bCkKLSAgICAgICAgTElOSyhPcERpdikKLSAgICAgICAgTElOSyhPcFN1YikK
LQotICAgICAgICBMSU5LKE9wTmVnYXRlKQotICAgICAgICBMSU5LKE9wSW5jKQotICAgICAgICBM
SU5LKE9wRGVjKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BBZGQp
CisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcE11bCkKKyAgICAgICAg
TElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wRGl2KQorICAgICAgICBMSU5LX1dJVEhf
QklOQVJZX0FSSVRIX1BST0ZJTEUoT3BTdWIpCisKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FS
SVRIX1BST0ZJTEUoT3BOZWdhdGUpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9G
SUxFKE9wSW5jKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcERlYykK
IAogICAgICAgICBMSU5LKE9wSm5lcVB0cikKIApAQCAtNzY5LDcgKzc4OSw3IEBAIGJvb2wgQ29k
ZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAvLyByZWx5IG9uIHRoZSBpbnN0
cnVjdGlvbiBjb3VudCAoYW5kIGFyZSBpbiB0aGVvcnkgcGVybWl0dGVkIHRvIGFsc28gaW5zcGVj
dCB0aGUKICAgICAvLyBpbnN0cnVjdGlvbiBzdHJlYW0gdG8gbW9yZSBhY2N1cmF0ZSBhc3Nlc3Mg
dGhlIGNvc3Qgb2YgdGllci11cCkuCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGpp
dEFmdGVyV2FybVVwKCk7CisgICAgLy9qaXRBZnRlcldhcm1VcCgpOwogCiAgICAgLy8gSWYgdGhl
IGNvbmN1cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4g
Y29tcHV0ZSBpdCBoZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAgLTc5Myw2ICs4MTMsNzcg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3duZXJF
ZGdlLnNldCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZtLCB0
aGlzKSk7CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29k
ZShSZWY8QmFzZWxpbmVKSVRDb2RlPiBqaXRDb2RlKQoreworICAgIHNldEpJVENvZGUoaml0Q29k
ZS5jb3B5UmVmKCkpOworCisgICAgeworICAgICAgICBjb25zdCBhdXRvJiBqaXRDb2RlTWFwID0g
dGhpcy0+aml0Q29kZU1hcCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJl
ck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7CisgICAgICAgICAgICBIYW5kbGVySW5mbyYg
aGFuZGxlciA9IGV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAvLyBGSVhNRTogPHJk
YXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KKyAgICAgICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9
IGppdENvZGVNYXAuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBhdXRvJiBq
aXREYXRhID0gZW5zdXJlSklURGF0YShsb2NrZXIpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGppdERhdGEubV9qaXRDb25zdGFudFBvb2wuaXNFbXB0eSgpKTsKKyAgICAgICAgaml0RGF0YS5t
X2ppdENvbnN0YW50UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5tX2NvbnN0YW50
UG9vbC5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGppdENvZGUtPm1f
Y29uc3RhbnRQb29sLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvIGVudHJ5ID0gaml0
Q29kZS0+bV9jb25zdGFudFBvb2wuYXQoaSk7CisgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5LnR5
cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmpl
Y3Q6CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IG1fZ2xv
YmFsT2JqZWN0LmdldCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbzogeworICAgICAgICAgICAgICAg
IFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9ICpzdGF0aWNfY2Fz
dDxVbmxpbmtlZENhbGxMaW5rSW5mbyo+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAgICAg
IENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0RGF0YS5tX2NhbGxMaW5rSW5mb3MuYWRk
KENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAg
ICAgICAgICAgIC8vIE9PUFM6IGRvbid0IGhhcmRjb2RlIHRoZXNlIHJlZ2lzdGVycyBsaWtlIHRo
aXMuCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFsaXplRGF0YUlDKHZtKCks
IHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIpOwor
ICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBjYWxsTGlua0lu
Zm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKKyAgICAgICAg
ICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvID0gKnN0
YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRyeS5wYXlsb2FkKTsKKyAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBqaXREYXRhLm1fc3R1
YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUsIENvZGVPcmlnaW4odW5saW5r
ZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8tPmlu
aXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyh0aGlzLCB1bmxpbmtlZFN0dWJJ
bmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gc3R1
YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsOiB7CisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wYXls
b2FkKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVu
Y3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHI6IHsK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBv
b2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNo
IChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBHbG9iYWxDb2RlOgorICAgIGNhc2UgTW9kdWxlQ29k
ZToKKyAgICBjYXNlIEV2YWxDb2RlOgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9
IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZ1bmN0aW9uQ29kZToKKyAgICAgICAg
Ly8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVj
dGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgorICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0
IG9ic2VydmF0aW9uLgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5Jbmxp
bmUoY2FwYWJpbGl0eUxldmVsKCkpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlzKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCF1bmxpbmtlZENvZGVCbG9jaygpLT5t
X3VubGlua2VkQmFzZWxpbmVDb2RlICYmIE9wdGlvbnM6OnVzZUJhc2VsaW5lSklUQ29kZVNoYXJp
bmcoKSkKKyAgICAgICAgdW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29k
ZSA9IFdURk1vdmUoaml0Q29kZSk7Cit9CisKIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7CiAg
ICAgVk0mIHZtID0gKm1fdm07CkBAIC0xNTM0LDM5ICsxNjI1LDQwIEBAIHZvaWQgQ29kZUJsb2Nr
OjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAogICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7
CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIGJvb2wgaXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRl
ID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGU7Ci0gICAgbV9pc0VsaWdpYmxlRm9yTExJ
bnREb3duZ3JhZGUgPSBmYWxzZTsKLSAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBl
eGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0
Ci0gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGluZSBKSVQgY29kZSBhbmQgcmVpbnN0YWxsIExMSW50
IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5LgotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpICYm
ICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
ICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1NldCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMp
KSB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXpl
ZFJlcGxhY2VtZW50KCkpIHsKLSAgICAgICAgICAgIGlmICghb3B0aW1pemVkQ29kZUJsb2NrLT5t
X29zckV4aXRDb3VudGVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRWxpZ2libGVGb3JMTElu
dERvd25ncmFkZSkgewotICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGUgPSBudWxscHRyOwot
ICAgICAgICAgICAgICAgICAgICBMTEludDo6c2V0RW50cnlwb2ludCh0aGlzKTsKLSAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJl
dGVyVGh1bmspOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV91bmxpbmtlZENvZGUtPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhh
bmRsZXIgPSBtX3VubGlua2VkQ29kZS0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRp
b25IYW5kbGVyc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9u
ID0gKmluc3RydWN0aW9ucygpLmF0KHVubGlua2VkSGFuZGxlci50YXJnZXQpLnB0cigpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwg
Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZUNh
dGNoKGluc3RydWN0aW9uLndpZHRoKCkpLmNvZGUoKSkpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgdW5saW5rSW5jb21pbmdDYWxscygpOwotCi0gICAgICAg
ICAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBjbGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNl
IGluIGZpbmFsaXplVW5jb25kaXRpb25hbGx5IGFsbCBjb21waWxlciB0aHJlYWRzCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGFyZSBzYWZlcG9pbnRlZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5pbmcg
ZWl0aGVyIGJlZm9yZSBvciBhZnRlciBieXRlY29kZSBwYXJzZXIsIGFuZCBieXRlY29kZQotICAg
ICAgICAgICAgICAgICAgICAvLyBwYXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9p
bnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5mb3MuCi0gICAgICAgICAgICAgICAgICAgIHJlc2V0
SklURGF0YSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBt
X2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSNlbmRpZgorLy8gT09QUzogcmVjb25jaWxlIHRoaXMKKy8vI2lmIEVO
QUJMRShKSVQpCisvLyAgICBib29sIGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNF
bGlnaWJsZUZvckxMSW50RG93bmdyYWRlOworLy8gICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUgPSBmYWxzZTsKKy8vICAgIC8vIElmIEJhc2VsaW5lSklUIGNvZGUgaXMgbm90IGV4ZWN1
dGluZywgYW5kIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCBleGlzdHMsIHdlIGF0dGVtcHQKKy8v
ICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBj
b2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KKy8vICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpICYm
ICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
ICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1NldCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMp
KSB7CisvLyAgICAgICAgaWYgKENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2NrID0gb3B0aW1p
emVkUmVwbGFjZW1lbnQoKSkgeworLy8gICAgICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9j
ay0+bV9vc3JFeGl0Q291bnRlcikgeworLy8gICAgICAgICAgICAgICAgaWYgKGlzRWxpZ2libGVG
b3JMTEludERvd25ncmFkZSkgeworLy8gICAgICAgICAgICAgICAgICAgIG1faml0Q29kZSA9IG51
bGxwdHI7CisvLyAgICAgICAgICAgICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7
CisvLyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0VHlwZSgpID09IEpJVFR5
cGU6OkludGVycHJldGVyVGh1bmspOworLy8KKy8vICAgICAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJz
KCk7IGkrKykgeworLy8gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRs
ZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlua2VkQ29kZS0+ZXhjZXB0aW9uSGFuZGxl
cihpKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBt
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOworLy8gICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRs
ZXIudGFyZ2V0KS5wdHIoKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5pbml0
aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4oTExJbnQ6OmhhbmRsZUNhdGNoKGluc3RydWN0aW9uLndpZHRoKCkpLmNvZGUoKSkp
OworLy8gICAgICAgICAgICAgICAgICAgIH0KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgdW5s
aW5rSW5jb21pbmdDYWxscygpOworLy8KKy8vICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNh
ZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcworLy8gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBz
YWZlcG9pbnRlZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5pbmcgZWl0aGVyIGJlZm9yZSBvciBhZnRl
ciBieXRlY29kZSBwYXJzZXIsIGFuZCBieXRlY29kZQorLy8gICAgICAgICAgICAgICAgICAgIC8v
IHBhcnNlciBpcyB0aGUgb25seSBkYXRhIHN0cnVjdHVyZSBwb2ludGluZyBpbnRvIHRoZSB2YXJp
b3VzICppbmZvcy4KKy8vICAgICAgICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsKKy8vICAg
ICAgICAgICAgICAgIH0gZWxzZQorLy8gICAgICAgICAgICAgICAgICAgIG1faXNFbGlnaWJsZUZv
ckxMSW50RG93bmdyYWRlID0gdHJ1ZTsKKy8vICAgICAgICAgICAgfQorLy8gICAgICAgIH0KKy8v
ICAgIH0KKy8vCisvLyNlbmRpZgogICAgIAogICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJw
cmV0ZWQoaml0VHlwZSgpKSkKICAgICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwpA
QCAtMTU5NCw3ICsxNjg2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KAogICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAgICAgICAg
ICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CisgICAgICAgICAgICBj
b3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y291bnQoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgY291bnQg
PSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CkBAIC0zMTMzLDcgKzMyMjUsNyBAQCB1bnNp
Z25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUoSklUKQog
ICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBKSVQ6OmZyYW1l
UmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3Rl
ckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMzNDksMTMgKzM0NDEsMTMgQEAgQmluYXJ5
QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRjaCAocGMtPm9w
Y29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BB
ZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+
YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9t
dWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJp
dGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMp
Lm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1cm4gJnBjLT5h
czxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJu
IHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNl
IG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcyku
bV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEo
dGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAg
fQpAQCAtMzM2NywxMSArMzQ1OSwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjp1
bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3Bf
bmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAgICAgICAgcmV0
dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAg
ICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVjPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGVjPigp
Lm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTM1MjEsMjggKzM2MTMsMTkgQEAgc3RkOjpvcHRpb25hbDxCeXRlY29k
ZUluZGV4PiBDb2RlQmxvY2s6OgogICAgIHJldHVybiBieXRlY29kZUluZGV4OwogfQogCi1pbnQz
Ml90IENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKQotewotICAg
IHN3aXRjaCAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUoKSkgewotICAgIGNhc2Ug
VHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQ7Ci0gICAg
Y2FzZSBUcmlTdGF0ZTo6RmFsc2U6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQgKiA0OwotICAg
IGNhc2UgVHJpU3RhdGU6OlRydWU6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQgLyAyOwotICAg
IH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gdGhyZXNob2xkOwotfQor
Ly92b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQorLy97CisvLyAgICBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhy
ZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSksIHRoaXMpOworLy99CiAKLXZvaWQgQ29kZUJsb2Nr
OjpqaXRBZnRlcldhcm1VcCgpCit2b2lkIENvZGVCbG9jazo6aml0U29vbigpCiB7Ci0gICAgbV9s
bGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9u
czo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSksIHRoaXMpOworICAgIG1fbGxpbnRFeGVj
dXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKHVubGlua2VkQ29kZUJsb2NrKCktPnRocmVzaG9s
ZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRTb29uKCkpLCB0aGlzKTsKIH0KIAotdm9p
ZCBDb2RlQmxvY2s6OmppdFNvb24oKQordm9pZCBDb2RlQmxvY2s6OmppdE5leHRJbnZvY2F0aW9u
KCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9s
ZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRTb29uKCkpLCB0aGlzKTsKKyAgICBtX2xs
aW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCgwLCB0aGlzKTsKIH0KIAogYm9vbCBD
b2RlQmxvY2s6Omhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQCBjbGFzcyBNZXRhZGF0YVRhYmxlOwogY2xhc3MgUENU
b0NvZGVPcmlnaW5NYXA7CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKIGNsYXNzIFN0cnVj
dHVyZVN0dWJJbmZvOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogCiBERUNMQVJFX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihDb2RlQmxvY2tSYXJlRGF0YSk7CiAKQEAgLTE1OCw3ICsx
NTksOSBAQCBwdWJsaWM6CiAgICAgTWV0YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWV0YWRhdGEuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIG51bVBhcmFtZXRl
cnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6CiAgICAgdm9p
ZCBzZXROdW1QYXJhbWV0ZXJzKHVuc2lnbmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoKIAogICAgIHVu
c2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcDsgfQogCkBAIC0xNjcsNyArMTcwLDYgQEAgcHVibGljOgogICAgIHVu
c2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KICAgICB1bnNpZ25l
ZCBudW1UbXBzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRz
KCkgKiBtYXhOdW1DaGVja3BvaW50VG1wczsgfQogCi0gICAgdW5zaWduZWQqIGFkZHJlc3NPZk51
bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
Q29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0
aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2
ZS5nZXQoKSk7IH0KQEAgLTIzMiwxNiArMjM0LDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5z
dGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBC
cmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lz
dGVyIHJlZykKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYmFjayB0
aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlzIGB0aGlzYCBh
bmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkp
Ci0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKLQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9y
YXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAgIHJldHVybiBy
ZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAtMjY2LDggKzI1
OCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRJQ1N0YXR1c01hcChJQ1N0YXR1c01hcCYgcmVz
dWx0KTsKICAgICAKICNpZiBFTkFCTEUoSklUKQorICAgIC8vIE9PUFM6IG1vdmUgYXJpdGhtZXRp
YyBJQ3MgYW5kIHN3aXRjaCB0YWJsZXMgb3V0IG9mIGhlcmUsIGFuZCBvbnRvIEpJVENvZGUuCiAg
ICAgc3RydWN0IEpJVERhdGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FU
RUQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICAg
ICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKICAgICAgICAgQmFnPEpJVEFk
ZElDPiBtX2FkZElDczsKQEAgLTI4Miw5ICsyNzYsMTMgQEAgcHVibGljOgogICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAg
ICAgIGJvb2wgbV9oYXNDYWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVn
aXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgICAgICBKSVRDb2Rl
TWFwIG1faml0Q29kZU1hcDsKKworICAgICAgICBGaXhlZFZlY3Rvcjx2b2lkKj4gbV9qaXRDb25z
dGFudFBvb2w7CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb25zdGFudFBv
b2woKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwgbV9qaXRDb25zdGFudFBvb2wp
OyB9CiAgICAgfTsKIAorICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVm
PEJhc2VsaW5lSklUQ29kZT4pOworCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBD
b25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkobV9q
aXREYXRhKSkKQEAgLTI5Myw2ICsyOTEsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIEpJVERhdGEm
IGVuc3VyZUpJVERhdGFTbG93KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpOwogCisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
Q29kZUJsb2NrLCBtX2ppdERhdGEpOyB9CisKICAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKik7CiAgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRo
UHJvZmlsZSopOwogICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSop
OwpAQCAtMzIyLDE2ICszMjIsNyBAQCBwdWJsaWM6CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxs
TGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgogICAgIENh
bGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4
KTsKICAgICAKLSAgICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29kZU1hcCYmIGppdENvZGVNYXAp
Ci0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAg
ICAgIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVN
YXApOwotICAgIH0KLSAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCkKLSAgICB7Ci0g
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJu
IGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXA7Ci0gICAgfQorICAgIGNvbnN0IEpJ
VENvZGVNYXAmIGppdENvZGVNYXAoKTsKIAogICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAo
c3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKICAgICBzdGQ6Om9wdGlvbmFs
PENvZGVPcmlnaW4+IGZpbmRQQyh2b2lkKiBwYyk7CkBAIC00NzIsMTAgKzQ2MywxMiBAQCBwdWJs
aWM6CiAKICAgICBTdHJpbmcgbmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9
CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9udW1QYXJhbWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNlSklUKCkpOwogICAg
ICAgICByZXR1cm4gbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICAKICAg
ICB9CiAKICAgICBWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KHVuc2lnbmVk
IGFyZ3VtZW50SW5kZXgpCkBAIC01NzEsNiArNTY0LDcgQEAgcHVibGljOgogICAgIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJl
dHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0K
ICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBt
X3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKTsgfQog
ICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlu
a2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW5kZXgpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5
cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0
aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygp
IHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTYwMCw2ICs1OTQsMTIgQEAg
cHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwogICAgICAgICByZXR1
cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgfQorICAg
IFNpbXBsZUp1bXBUYWJsZSYgYmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgp
OworICAgIHZvaWQqIGJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkKKyAgICB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1faml0RGF0YSAmJiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpOworICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbC5kYXRhKCk7
CisgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTd2l0
Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNjEwLDYgKzYx
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKICAgICAg
ICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OwogICAgIH0KKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KTsKICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5u
dW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0
YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7IH0KQEAgLTYzMiwyMSArNjMzLDIwIEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgY2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0
aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y2hlY2tJZlRocmVz
aG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CiAgICAgfQogCiAgICAgdm9pZCBkb250SklUQW55dGlt
ZVNvb24oKQogICAgIHsKLSAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZp
bml0ZWx5KCk7CisgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+ZGVmZXJJbmRlZmluaXRl
bHkoKTsKICAgICB9CiAKLSAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVz
aG9sZCk7Ci0gICAgdm9pZCBqaXRBZnRlcldhcm1VcCgpOwogICAgIHZvaWQgaml0U29vbigpOwor
ICAgIHZvaWQgaml0TmV4dEludm9jYXRpb24oKTsKIAogICAgIGNvbnN0IEJhc2VsaW5lRXhlY3V0
aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgICAgICByZXR1cm4gKm1fbGxpbnRFeGVj
dXRlQ291bnRlcjsKICAgICB9CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8c3RkOjp0dXBsZTxTdHJ1
Y3R1cmVJRCwgdW5zaWduZWQ+LCBGaXhlZFZlY3RvcjxMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQ+PiBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwOwpAQCAtNzk3LDYg
Kzc5Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0
IHsgcmV0dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVz
dHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVh
a3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9p
bnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCkBAIC04MzgsNiArODM5LDcgQEAgcHVibGljOgog
ICAgIG11dGFibGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMg
dG8gc3RvcmUgdG8gaXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5
c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2Nh
cGFiaWxpdHlMZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNywx
MSArOTA5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0
YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7
IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9p
bnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlS
ZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8g
YWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3Vu
bGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHBy
b3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKQEAgLTEwMTAs
NyArMTAwOCw5IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlV2F0Y2hwb2ludE1hcCBtX2xsaW50
R2V0QnlJZFdhdGNocG9pbnRNYXA7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZTsKICNp
ZiBFTkFCTEUoSklUKQorcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVREYXRhPiBtX2pp
dERhdGE7Citwcml2YXRlOgogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gVGhp
cyBpcyByZWxldmFudCB0byBub24tREZHIGNvZGUgYmxvY2tzIHRoYXQgc2VydmUgYXMgdGhlIHBy
b2ZpbGVkIGNvZGUgYmxvY2sKQEAgLTEwMjksNyArMTAyOSw3IEBAIHByaXZhdGU6CiAKICAgICBX
cml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOwogICAgIAotICAgIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAgQmFzZWxpbmVFeGVj
dXRpb25Db3VudGVyKiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgeyBudWxscHRyIH07CiAKICAgICBC
YXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9qaXRFeGVjdXRlQ291bnRlcjsKICAgICB1aW50MzJf
dCBtX29zckV4aXRDb3VudGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQmFzZWxpbmVK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5oIgpAQCAtNDAs
OSArNDEsNyBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAg
aWYgKG1fbWV0YWRhdGEpIHsKICNkZWZpbmUgVklTSVQoX19vcCkgXAogICAgICAgICBtX21ldGFk
YXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgZnVuYyhtZXRhZGF0YS5t
X3Byb2ZpbGUsIGZhbHNlKTsgfSk7Ci0KICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVkFM
VUVfUFJPRklMRShWSVNJVCkKLQogI3VuZGVmIFZJU0lUCiAKICAgICAgICAgbV9tZXRhZGF0YS0+
Zm9yRWFjaDxPcEl0ZXJhdG9yT3Blbj4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyAKQEAgLTU3LDcg
KzU2LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgICAg
ICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFsc2UpOwogICAgICAgICB9KTsK
ICAgICB9ICAgCi0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KQEAgLTk5LDQgKzk3
LDI0IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoTExJbnRDYWxsTGlua0luZm8KICAgICB9CiB9
CiAKKyNpZiBFTkFCTEUoSklUKQorQUxXQVlTX0lOTElORSBjb25zdCBKSVRDb2RlTWFwJiBDb2Rl
QmxvY2s6OmppdENvZGVNYXAoKQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6
QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPiht
X2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVNYXA7Cit9CisKK0FMV0FZU19JTkxJTkUgU2ltcGxl
SnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUlu
ZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkp
LT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisKK0FMV0FZU19JTkxJTkUgU3Ry
aW5nSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGlu
dCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxp
bmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENv
ZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisjZW5k
aWYKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAgcHVibGlj
OgogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwKENvZGVCbG9jayog
Y29kZUJsb2NrKTsKICAgICAKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSog
d3JhcEFuZEFjdGl2YXRlKENvZGVCbG9jayogY29kZUJsb2NrKTsKKworICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZSwgbV9jb2RlQmxvY2spOyB9CiAgICAgCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291
bnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCBib29sIEV4ZWN1dGlv
bkNvdW50ZXI8Y291bnRpbmdWYXJpYW50Pjo6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2NrID8gY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSA6IG51bGxwdHIsIHRocmVzaG9sZCk7CisgICAgdGhyZXNob2xkID0g
Y2xpcHBlZFRocmVzaG9sZCh0aHJlc2hvbGQpOwogICAgIAogICAgIG1fY291bnRlciA9IHN0YXRp
Y19jYXN0PGludDMyX3Q+KC10aHJlc2hvbGQpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBm
b3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7IC8vIElmIHlvdSB1c2UgdGhpcywgY2hlY2tJZlRo
cmVzaG9sZENyb3NzZWRBbmRTZXQoKSBtYXkgc3RpbGwgcmV0dXJuIGZhbHNlLgogICAgIGJvb2wg
Y2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoQ29kZUJsb2NrKik7CiAgICAgYm9vbCBoYXND
cm9zc2VkVGhyZXNob2xkKCkgY29uc3QgeyByZXR1cm4gbV9jb3VudGVyID49IDA7IH0KLSAgICB2
b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJsb2NrKik7CisgICAg
dm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayogPSBudWxs
cHRyKTsKICAgICB2b2lkIGRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgZG91YmxlIGNvdW50KCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291bnQpICsgbV9jb3Vu
dGVyOyB9CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkBAIC04NiwxMyArODYs
OSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
c3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBU
IHRocmVzaG9sZCkKKyAgICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKFQgdGhyZXNob2xkKQog
ICAgIHsKLSAgICAgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQ7Ci0gICAgICAgIGlmIChPcHRpb25z
OjpyYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKSAmJiBnbG9iYWxP
YmplY3QpCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBnbG9iYWxPYmplY3QtPndlYWtSYW5k
b21JbnRlZ2VyKCkgJSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1heFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRp
b25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKTsKKyAgICAgICAgaW50MzJfdCBtYXhUaHJlc2hv
bGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CiAgICAgICAg
IGlmICh0aHJlc2hvbGQgPiBtYXhUaHJlc2hvbGQpCiAgICAgICAgICAgICB0aHJlc2hvbGQgPSBt
YXhUaHJlc2hvbGQ7CiAgICAgICAgIHJldHVybiB0aHJlc2hvbGQ7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0
YWRhdGFVbnNldCB7CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhVW5z
ZXQpID09IDEyKTsKIAogc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCB7Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmlsZSk7
IH0KICAgICBBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCkgPT0gMTIpOwpAQCAtODgsNiArODks
NyBAQCB1bmlvbiBHZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUgbW9k
ZTsKICAgICAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBtdXN0
IGJlIHplcm8gd2hlbiB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlk
TW9kZU1ldGFkYXRhLCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0IGRl
ZmF1bHRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAgICAg
R2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9kZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYgKzM4NSw4IEBAIGJvb2wgSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcygKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsK
IH0KIAorLy8gT09QUzogTWFrZSB0aGlzIHN0dWZmIHdvcmsgd2l0aCBkYXRhIGljcyB0byBub3Qg
YXNzdW1lIGlubGluZSBhY2Nlc3MuCisKIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNK
dW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4gdGFyZ2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CkBA
IC00MDQsOSArNDA2LDEyIEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5B
Y2MKIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHRhcmdldCkKIHsKICAgICBpZiAoY29kZUJsb2NrLT51
c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBPT1BTOiBtYWtlIHNvbWUgdmVyc2lvbiBvZiBJbmxp
bmVBY2Nlc3MgZm9yIGJhc2VsaW5lLiBQZXJoYXBzIG1ha2UgaXQgZGF0YSBkcml2ZW4uIE9yIHBl
cmhhcHMgaGF2ZSB0aGUgY29kZQorICAgICAgICAvLyBiZSBzaGFyZWQgc29tZWhvdyBiZXR3ZWVu
IFVubGlua2VkQ29kZUJsb2Nrcy4KKwogICAgICAgICAvLyBJZiBpdCBpcyBub3QgR2V0QnlJZC1s
aWtlLXRoaW5nLCB3ZSBkbyBub3QgZW1pdCBub3Agc2xlZCAoZS5nLiBHZXRCeVZhbCkuCiAgICAg
ICAgIC8vIFRoZSBjb2RlIGlzIGFscmVhZHkgYW4gaW5kaXJlY3QganVtcCwgYW5kIG9ubHkgdGhp
bmcgd2Ugc2hvdWxkIGRvIGlzIHJlcGxhY2luZyBtX2NvZGVQdHIuCi0gICAgICAgIGlmIChzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0
VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcikgewogICAgICAgICAgICAgLy8gSWYgbV9jb2RlUHRyIGlzIHBvaW50aW5nIHRvIHN0
dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbiwgdGhpcyBtZWFucyB0aGF0IElubGluZUFjY2Vz
cyBjb2RlIGlzIG5vdCBhIHN0dWIgb25lLgogICAgICAgICAgICAgLy8gV2UgcmV3cml0ZSB0aGlz
IHdpdGggdGhlIHN0dWItYmFzZWQgZGlzcGF0Y2hpbmcgY29kZSBvbmNlLCBhbmQgY29udGludWUg
dXNpbmcgaXQgdW50aWwgd2UgcmVzZXQgdGhlIGNvZGUuCiAgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8ubV9jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0gc3R1YkluZm8uc2xvd1BhdGhTdGFy
dExvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpIHsKQEAgLTQyMSw2ICs0MjYsNyBAQCB2b2lk
IElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSks
ICJJbmxpbmVBY2Nlc3M6IGxpbmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KKwogICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0
aW9uTW9kZU1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgT1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9S
X0VOVU1fQ0xBUwogCiBzdHJ1Y3QgSXRlcmF0aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90
IHNlZW5Nb2RlcyB7IDAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVz
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1v
ZGVzKTsgfSAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9
PSBzaXplb2YoSXRlcmF0aW9uTW9kZSkpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBB
cnJheVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5m
bywgbV9hcnJheVByb2ZpbGUpOyB9CiAKIHByaXZhdGU6CiAgICAgdWludHB0cl90IG1fY2FsbGVl
T3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQgfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUuaAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAg
ZnVuYygqbWV0YWRhdGEpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAg
IEFMV0FZU19JTkxJTkUgc2l6ZV90IG51bUVudHJpZXMoKQorICAgIHsKKyAgICAgICAgYXV0byog
c3RhcnQgPSBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUgT3A6Ok1ldGFkYXRhKj4oZ2V0KE9wOjpvcGNv
ZGVJRCkpOworICAgICAgICBhdXRvKiBlbmQgPSBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUgT3A6Ok1l
dGFkYXRhKj4oZ2V0SW1wbChPcDo6b3Bjb2RlSUQgKyAxKSk7CisgICAgICAgIHJldHVybiBlbmQg
LSBzdGFydDsKKyAgICB9CisKICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKTsKIAogICAgIHZvaWQg
cmVmKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRl
ICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJS
ZXBhdGNoLmgiCiAKQEAgLTI4NSw2ICsyODYsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpy
ZXNldChjb25zdCBDb25jCiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0
QnlLaW5kOjpCeUlkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRC
eVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgogICAgICAgICByZXNl
dFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKQEAgLTQzMCw2ICs0MzIsMjA0IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6c2UKICAgICBtX2NhY2hlVHlwZSA9
IG5ld0NhY2hlVHlwZTsKIH0KIAordm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZy
b21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8pCit7CisgICAgYWNjZXNzVHlwZSA9IHVubGlua2Vk
U3R1YkluZm8uYWNjZXNzVHlwZTsKKyAgICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8uc3RhcnQ7
IC8vIE9PUFM6IGRvIHdlIG5lZWQgYSBzdGFydCBmb3IgZGF0YSBJQ3M/CisgICAgZG9uZUxvY2F0
aW9uID0gdW5saW5rZWRTdHViSW5mby5kb25lTG9jYXRpb247CisgICAgc2xvd1BhdGhTdGFydExv
Y2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgY2Fs
bFNpdGVJbmRleCA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bmxpbmtlZFN0dWJJbmZv
LmJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKTsKKyAgICBjb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1
bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIG1fY29kZVB0ciA9IHNsb3dQYXRo
U3RhcnRMb2NhdGlvbjsKKworICAgIHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6
R2V0QnlJZCAmJiB1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSB7
CisgICAgICAgIC8vIEZvciBpdGVyYXRvcl9uZXh0LCB3ZSBjYW4ndCBjbG9iYmVyIHRoZSBzY3Jh
dGNoIHJlZ2lzdGVyIGVpdGhlci4KKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5
cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpJbnN0YW5jZU9mOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5j
ZU9mT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZh
bDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OlRyeUdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRy
eUdldEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpH
ZXRCeUlkRGlyZWN0OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlk
RGlyZWN0T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0
QnlJZFdpdGhUaGlzOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlk
V2l0aFRoaXNPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1By
aXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFz
UHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6R2V0UHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25H
ZXRQcml2YXRlTmFtZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OlB1dEJ5SWQ6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7
CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlu
a2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNT
dHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJp
dmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0
cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1bmxp
bmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6
CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQor
ICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxp
bmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0
ZU5hbWU6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJpdmF0
ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRl
RmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgor
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFu
ZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBl
KSB7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxC
eVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVE
ZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1
ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVlR1BS
ID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9H
UFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0
UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAg
ICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAg
cmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5Owor
ICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAg
ICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBwcm90b3R5cGVJc0tu
b3duT2JqZWN0ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnM6OnZhbHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZTogCisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBoYXND
b25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
SW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsK
KyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2Vs
aW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNl
bGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJl
Y3Q6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElk
ZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBt
X3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnRoaXNH
UFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAg
ICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAg
ICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9
IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2
YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNj
ZXNzVHlwZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQ
cml2YXRlQnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAg
ICAgICB2YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQ
UiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OmNoZWNrQ29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIK
ICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNs
dWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKQEAgLTU2LDYgKzU3LDcgQEAgZW51
bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRCeVZhbCwKICAgICBQdXRCeUlk
LAogICAgIFB1dEJ5VmFsLAorICAgIFB1dFByaXZhdGVOYW1lLAogICAgIEluQnlJZCwKICAgICBJ
bkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtNzgsNiArODAsOCBAQCBlbnVtIGNsYXNz
IENhY2hlVHlwZSA6IGludDhfdCB7CiAgICAgU3RyaW5nTGVuZ3RoCiB9OwogCitzdHJ1Y3QgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKKwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZvKTsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKQEAgLTk4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlcmVm
KCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKKyAgICB2b2lkIGluaXRpYWxpemVGcm9tVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvJik7CisKICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIENoZWNrIGlm
IHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9lcywg
dGhlbiBpdCByZXNldHMgaXRzZWxmLApAQCAtNDQ3LDYgKzQ1MywxOCBAQCBpbmxpbmUgYXV0byBh
cHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1dEtp
bmQgcHV0S2luZDsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQg
eyBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSB7
IEVDTUFNb2RlOjpzbG9wcHkoKSB9OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsK
KyAgICAvLyBPT1BTOiBEbyB3ZSBuZWVkIHN0YXJ0IGZvciBkYXRhIElDcz8KKyAgICBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVy
IHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2Nh
dGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsK
K307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJT
dGF0ZSgpCiAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsK
ICAgICBpZiAocGVyY2VudGFnZSAhPSBwZXJjZW50YWdlKQogICAgICAgICBwZXJjZW50YWdlID0g
MC4wOwotICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFn
OiAiLCBwZXJjZW50YWdlLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5k
IHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIiVcbiIpOwogfQogCiB2b2lkIGVu
YWJsZVN1cGVyU2FtcGxlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2Nr
LmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRl
ICJDbGFzc0luZm8uaCIKQEAgLTc4LDYgKzc5LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlu
a2VkQ29kZUJsb2NrKFZNJgogICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tl
cik7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAg
fQorCisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRG
b3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpAQCAtMzE2LDYgKzMxOSwzMyBAQCBpbnQgVW5saW5rZWRD
b2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzCiAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRh
cmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECitib29s
IFVubGlua2VkQ29kZUJsb2NrOjpoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
Cit7CisgICAgLy8gT09QUzogZG8gd2hhdCBDb2RlQmxvY2sgZG9lcyBhbmQgbWFrZSBhIGhhc2gg
dGFibGU/CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMo
KTsgKytpKSB7CisgICAgICAgIGlmIChpZGVudGlmaWVyKGkpLmltcGwoKSA9PSB1aWQpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlm
CisKK2ludDMyX3QgVW5saW5rZWRDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRo
cmVzaG9sZCkKK3sKKyAgICBzd2l0Y2ggKGRpZE9wdGltaXplKCkpIHsKKyAgICBjYXNlIFRyaVN0
YXRlOjpJbmRldGVybWluYXRlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkOworICAgIGNhc2Ug
VHJpU3RhdGU6OkZhbHNlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkICogNDsKKyAgICBjYXNl
IFRyaVN0YXRlOjpUcnVlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8gMjsKKyAgICB9Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRocmVzaG9sZDsKK30KKworCiB2
b2lkIFVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKCkKIHsKICAgICBS
RUxFQVNFX0FTU0VSVCghbV9tZXRhZGF0YS0+aXNGaW5hbGl6ZWQoKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxMiBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5UHJvZmls
ZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDb2RlVHlw
ZS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCisjaW5jbHVkZSAiRXhlY3V0aW9uQ291
bnRlci5oIgogI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5nZUluZm8uaCIKICNpbmNsdWRlICJIYW5k
bGVySW5mby5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKQEAgLTY0LDYgKzY2LDcgQEAgY2xh
c3MgVW5saW5rZWRDb2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjsK
IGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZTsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5m
bzsKIGVudW0gY2xhc3MgTGlua1RpbWVDb25zdGFudCA6IGludDMyX3Q7CiAKQEAgLTE3NSw2ICsx
NzgsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5r
bm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7
IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcu
dG9Db25zdGFudEluZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFu
dFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBn
ZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50
UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBjb25zdCBGaXhl
ZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjsgfQogCkBAIC0yMDcsNiArMjExLDE1IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1v
ZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0
TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGlu
c3RydWN0aW9ucygpIGNvbnN0OworICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0
KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLmF0KGlu
ZGV4KS5wdHIoKTsgfQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9u
c0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgICAgIGNvbnN0IGF1dG8q
IGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5z
dHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNFbmQpOworICAgICAg
ICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CisgICAgdW5z
aWduZWQgaW5zdHJ1Y3Rpb25zU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLnNp
emUoKTsgfQogCiAgICAgdW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4g
bV9udW1DYWxsZWVMb2NhbHM7IH0KICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1
cm4gbV9udW1WYXJzOyB9CkBAIC0zMzQsMTAgKzM0NywyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhp
bnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8g
U29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0
aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFpc0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KICAg
ICB2b2lkIGFsbG9jYXRlU2hhcmVkUHJvZmlsZXMoKTsKICAgICBVbmxpbmtlZFZhbHVlUHJvZmls
ZSYgdW5saW5rZWRWYWx1ZVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVQ
cm9maWxlc1tpbmRleF07IH0KICAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSYgdW5saW5rZWRBcnJh
eVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlc1tpbmRleF07
IH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgYm9vbCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRT
dHJpbmdJbXBsKik7CisjZW5kaWYKKworICAgIGludDMyX3QgdGhyZXNob2xkRm9ySklUKGludDMy
X3QgdGhyZXNob2xkKTsKKwogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwg
U3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENv
ZGVHZW5lcmF0aW9uTW9kZT4pOwogCkBAIC0zOTcsNiArNDIxLDcgQEAgcHJpdmF0ZToKICAgICB1
bnNpZ25lZCBtX2xleGljYWxTY29wZUZlYXR1cmVzIDogNDsKIHB1YmxpYzoKICAgICBDb25jdXJy
ZW50SlNMb2NrIG1fbG9jazsKKyAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX3VubGlua2Vk
QmFzZWxpbmVDb2RlOwogcHJpdmF0ZToKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlcyB7IDAg
fTsKICAgICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC00MTMsNiArNDM4LDkgQEAg
cHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1
Y3Rpb25zOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IG1f
bGl2ZW5lc3M7CiAKKyAgICAvLyBPT1BTOiBiaW5kIGEgYmV0dGVyIHBsYWNlIHRvIHN0b3JlIHRo
aXMgc3R1ZmY/CisgICAgVmVjdG9yPEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9iaW5hcnlBcml0aFBy
b2ZpbGVzOworICAgIFZlY3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4gbV91bmFyeUFyaXRoUHJvZmls
ZXM7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFBy
b2ZpbGU7CkBAIC00NTgsNiArNDg2LDMwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVy
biBvdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uLm9mZnNldCgpKTsKICAgICB9CisgICAg
aW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQorICAgIHsKKyAg
ICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSB0aGlzLT5ieXRlY29kZU9mZnNldChwYyk7
CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUoKQorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gbV9iaW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAg
ICAgbV9iaW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5hcnlBcml0aFByb2ZpbGUoKSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkVW5hcnlBcml0
aFByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV91bmFyeUFyaXRo
UHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX3VuYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoVW5h
cnlBcml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
QmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1
cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHVu
YXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlBcml0aFByb2ZpbGVz
W2ldOyB9CisKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50
ZXIoKSB7IHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7IH0KIAogcHJpdmF0ZToKICAgICB1
c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9m
ZnNldCwgaW50PjsKQEAgLTQ2NSw2ICs1MTcsNyBAQCBwcml2YXRlOgogICAgIE91dE9mTGluZUp1
bXBUYXJnZXRzIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJh
cmVEYXRhPiBtX3JhcmVEYXRhOwogICAgIEZpeGVkVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+
IG1fZXhwcmVzc2lvbkluZm87CisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRF
eGVjdXRlQ291bnRlcjsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZFZhbHVlUHJvZmlsZT4gbV92
YWx1ZVByb2ZpbGVzOwogICAgIEZpeGVkVmVjdG9yPFVubGlua2VkQXJyYXlQcm9maWxlPiBtX2Fy
cmF5UHJvZmlsZXM7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tH
ZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3QgeyByZXR1cm4gbV9j
b2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKTsgfQogICAgIGJvb2wg
aGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aGFzQ2hlY2twb2lu
dHMoKTsgfQogICAgIGJvb2wgaGFzVGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxv
Y2stPmhhc1RhaWxDYWxscygpOyB9CisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxl
KCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpOyB9CisgICAg
dW5zaWduZWQgYWRkVW5hcnlBcml0aFByb2ZpbGUoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+YWRk
VW5hcnlBcml0aFByb2ZpbGUoKTsgfQogCiAgICAgLy8gVXBkYXRpbmcgVW5saW5rZWRDb2RlQmxv
Y2suCiAgICAgdm9pZCBzZXRIYXNDaGVja3BvaW50cygpIHsgbV9jb2RlQmxvY2stPnNldEhhc0No
ZWNrcG9pbnRzKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUpOwogICAgIH0KIAorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNldEluTWV0YWRhdGFUYWJsZShj
b25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2lzRmluYWxpemVk
KTsKKyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9pczMyQml0ID8gb2Zmc2V0
VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUxNigpW09wY29kZTo6b3Bj
b2RlSURdOworICAgICAgICBiYXNlVHlwZU9mZnNldCA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxp
Z25vZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSwgYmFzZVR5cGVPZmZzZXQpOworICAgICAg
ICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0
YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCeXRlY29kZT4KICAgICB1bnNpZ25lZCBudW1FbnRyaWVzKCk7CiAKQEAgLTEwNyw2ICsxMTYs
NyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc19vZmZzZXQxNlRhYmxlU2l6ZTsKICAgICB9
CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAgICAgdXNpbmcgT2Zmc2V0MTYg
PSB1aW50MTZfdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMyArNDUsMTEg
QEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1bWVudDsKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzID0gMTsKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9IG51bWJlck9mQnVja2V0
cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3RhbE51bWJlck9mQnVja2V0
cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzOwogICAgIAogICAg
IFZhbHVlUHJvZmlsZUJhc2UoKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCi0gICAgICAgICAgICBtX2J1Y2tldHNbaV0g
PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgY2xlYXJCdWNrZXRzKCk7CiAg
ICAgfQogICAgIAogICAgIEVuY29kZWRKU1ZhbHVlKiBzcGVjRmFpbEJ1Y2tldCh1bnNpZ25lZCBp
KQpAQCAtNTksNiArNTcsMTIgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICBB
U1NFUlQobnVtYmVyT2ZCdWNrZXRzICsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzKTsKICAgICAg
ICAgcmV0dXJuIG1fYnVja2V0cyArIG51bWJlck9mQnVja2V0cyArIGk7CiAgICAgfQorCisgICAg
dm9pZCBjbGVhckJ1Y2tldHMoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCisgICAgICAgICAgICBtX2J1Y2tldHNbaV0g
PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICB9CiAgICAgCiAgICAgY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8odW5zaWduZWQgYnVja2V0KSBjb25zdAogICAgIHsKQEAgLTEyMyw4
ICsxMjcsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJucyB0aGUgbmV3IG9u
ZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8vIHRoYXQgaXNuJ3QgZXhl
Y3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKQEAgLTEzOSw3ICsx
NDEsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIAogICAgICAgICByZXR1
cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29kZWRKU1ZhbHVlIG1fYnVj
a2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRp
Y3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTYxLDYgKzE2Myw3IEBAIHN0cnVjdCBWYWx1ZVByb2Zp
bGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1YmxpYyBW
YWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAgICBWYWx1ZVByb2ZpbGUo
KSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7IH0KKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBzdHJ1Y3QgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OTgs
NyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnkKICAg
ICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0
eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5cGUsIG1fY29k
ZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90Pihkc3QsIHNyYyk7CkBA
IC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbmMoUmVnaXN0ZXJJ
RCogc3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BJbmM6
OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7
CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVjOjplbWl0KHRoaXMsIHNy
Y0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5h
cnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODIsNyArNjgyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklEKj4KICAgICAgICAgZW1p
dEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCog
c3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBCaW5hcnlP
cDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAgICAgICAgICAgIEJpbmFy
eU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1fY29kZUJsb2NrLT5hZGRC
aW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnko
Vk0mIHZtLCBDYWxsRnJhbWUqCiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChj
b2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZl
KCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAo
KSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aXNTdGls
bFZhbGlkKTsKIAogICAgIGlmICghT3B0aW9uczo6dXNlT1NSRW50cnlUb0RGRygpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGlu
ZXMuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIkpJVC5oIgpAQCAtMTE5LDEwICsxMjAsMTAgQEAgdm9pZCBoYW5kbGVFeGl0
Q291bnRzKFZNJiB2bSwgQ0NhbGxIZWxwZQogICAgIGludDMyX3QgY2xpcHBlZFZhbHVlOwogICAg
IHN3aXRjaCAoaml0LmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6
OkRGR0pJVDoKLSAgICAgICAgY2xpcHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVy
OjpjbGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdl
dFZhbHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVy
OjpjbGlwcGVkVGhyZXNob2xkKHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBKSVRUeXBlOjpGVExKSVQ6Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IFVwcGVyVGllckV4ZWN1
dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmpl
Y3QoKSwgdGFyZ2V0VmFsdWUpOworICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVj
dXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
QEAgLTMwOSwxMCArMzEwLDE1IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhl
bHBlcnMKICAgICAgICAgICAgIHRydWVDYWxsZXIgPyBBc3NlbWJseUhlbHBlcnM6OlVzZUV4aXN0
aW5nVGFnUmVnaXN0ZXJDb250ZW50cyA6IEFzc2VtYmx5SGVscGVyczo6Q29weUJhc2VsaW5lQ2Fs
bGVlU2F2ZWRSZWdpc3RlcnNGcm9tQmFzZUZyYW1lLAogICAgICAgICAgICAgR1BSSW5mbzo6cmVn
VDIsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUNCk7CiAKKyAgICAgICAgLy8gT09QUzog
Q29uc2lkZXIgaWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBmb3IgYmFzZWxpbmUgcGIvbWV0YWRh
dGEgcmVnaXN0ZXJzCiAgICAgICAgIGlmIChjYWxsZXJJc0xMSW50KSB7CiAgICAgICAgICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJs
b2NrRm9yKCp0cnVlQ2FsbGVyKTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFi
bGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ss
IExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpKTsKICAgICAgICAgICAgIGppdC5z
dG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JD
YWxsZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNh
bGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAodHJ1ZUNhbGxlcikgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1
ZUNhbGxlcik7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpLCBjYWxs
ZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBKSVQ6OnNfbWV0
YWRhdGFHUFIpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmJhc2VsaW5lSklUQ29uc3RhbnRQ
b29sKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2Nr
LCBKSVQ6OnNfY29uc3RhbnRzR1BSKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCkBAIC00MDQsNiArNDEwLDkgQEAgdm9pZCBhZGp1c3RB
bmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVy
czo6cGNHUFIpOwogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NS
RXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZSB7CisgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5t
ZXRhZGF0YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRhdGFHUFIpOworICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVKSVRD
b25zdGFudFBvb2woKSksIEpJVDo6c19jb25zdGFudHNHUFIpOworCiAgICAgICAgIGNvZGVCbG9j
a0ZvckV4aXQtPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CiAKICAgICAgICAgQnl0ZWNvZGVJ
bmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczMCw2ICs3MzAs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlVGFnR1BS
LCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXpl
KG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJn
cyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJz
ID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAgICAgICAg
ICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEp
OwpAQCAtODg5LDcgKzg5MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChp
c1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
bV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1l
U2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzNCw2ICs4MzQsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5j
YWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVHUFIsIERhdGFGb3JtYXRKUyk7CiAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAg
ICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAg
ICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIGFy
Z0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTk4NSw3
ICs5ODYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAg
CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkg
ewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZy
YW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNo
dWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5ODUsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmEKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0
ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3Jp
Z2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAg
ICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxT
aXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAg
SlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VHUFIpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsK
ICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAKQEAgLTE0Nzcz
LDcgKzE0NzczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAg
ICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5ncHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2pp
dC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJbmRleCk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKSksIGNhbGxTaXRlSW5kZXgpOwog
ICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
MTcsNyArNDMxNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIg
PSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0Y2go
MCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxK
SVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29kZUJs
b2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4
LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCks
IEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5
R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7
CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9
IHRydWU7CkBAIC0xMDI4NSw2ICsxMDI4NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1BbGxvY2F0ZWRBcmdz
OyArK2kpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChW
YWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2Fs
bGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29k
ZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhzZW1hbnRpY05vZGVPcmlnaW4pOwpAQCAtMTA0NDMs
MTMgKzEwNDQ0LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
LmFyZ3MuYXBwZW5kKHBhcmFtc1sxICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOwogCiAgICAg
ICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bUFyZ3M7CisgICAgICAg
ICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNodWZmbGVE
YXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogCiAgICAgICAg
ICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFk
ZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAg
ICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxG
YXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZd
IHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRh
KHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0
LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICAgICAgfSk7
CkBAIC0xMDc5Miw3ICsxMDc5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
aml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAg
ICAgICAgICAgICB9KTsKQEAgLTExMDczLDcgKzExMDc1LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxs
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1Qw
LCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3b3JraW5nIGNvcHkpCkBAIC00Miwx
NyArNDIsMjggQEAgY2xhc3MgTWV0YWRhdGEKICAgICBkZWYgc3RydWN0KG9wKQogICAgICAgICBy
ZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVs
ZHMpCisgICAgICAgIGRlZiBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGRO
YW1lcykKKyAgICAgICAgICAgIGZpZWxkTmFtZXMubWFwIGRvIHxmaWVsZE5hbWV8CisgICAgICAg
ICAgICAgICAgIiN7cHJlZml4fXN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVsw
XS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisg
ICAgICAgIGVuZAorCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBm
aWVsZE5hbWVzKQogICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAg
ICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAgICAgICAgICAgICAgICAgICIj
e3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1c
biN7cHJlZml4fX07IgorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tj
b252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZp
eH19OyIKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZp
eH0je3R5cGUudG9fc30gbV8je2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmll
bGROYW1lID0gZmllbGQudG9fcworICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2go
ZmllbGROYW1lKQorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1f
I3tmaWVsZE5hbWV9OyIKICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2lu
KCJcbiIpCiAgICAgICAgIGVuZAogCi0gICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAg
ICAgICAgIiwgQGZpZWxkcykKKyAgICAgICAgZmllbGROYW1lcyA9IFtdCisgICAgICAgIHByZWZp
eCA9ICIgICAgICAgICIKKyAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBm
aWVsZHMsIGZpZWxkTmFtZXMpCisgICAgICAgIGZpZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5l
cmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKIAogICAgICAgICBpbml0
cyA9IG5pbAogICAgICAgICBpZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5l
bXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5OCw4ICs2OTgsMTMgQEAgdm9p
ZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVs
cGVyczo6ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwg
R1BSSW5mbzo6cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBH
UFJJbmZvOjpyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9i
amVjdCh2bSwgaW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENh
bGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQor
eworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENh
bGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE3MjAsNiArMTcyMCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5m
byopOworICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChW
TSYsIENhbGxMaW5rSW5mbyopOwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckND
YWxsKCk7CiAgICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhc2Vs
aW5lSklUQ29kZS5oIgorCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCisjaW5jbHVkZSAiSnVtcFRh
YmxlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK0pJVEFkZElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQor
SklUTXVsSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRT
dWJJQyogTWF0aElDSG9sZGVyOjphZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE5lZ0lD
KiBNYXRoSUNIb2xkZXI6OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisKK3ZvaWQgTWF0aElD
SG9sZGVyOjphZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcikKK3sKKyAgICBtX2FkZElD
cyA9IFdURk1vdmUob3RoZXIubV9hZGRJQ3MpOworICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhl
ci5tX211bElDcyk7CisgICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAg
ICBtX3N1YklDcyA9IFdURk1vdmUob3RoZXIubV9zdWJJQ3MpOworfQorCitCYXNlbGluZUpJVENv
ZGU6OkJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8
SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spCisgICAgOiBEaXJlY3RKSVRDb2RlKFdURk1v
dmUoY29kZSksIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAsIE1h
dGhJQ0hvbGRlcigpCit7IH0KKworQmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKCkK
K3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Jhc2VsaW5lSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgorI2luY2x1ZGUgIkpJVENvZGUu
aCIKKyNpbmNsdWRlICJKSVRDb2RlTWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvL2NsYXNz
IEpJVEFkZElDOworLy9jbGFzcyBKSVRNdWxJQzsKKy8vY2xhc3MgSklUU3ViSUM7CisvL2NsYXNz
IEpJVE5lZ0lDOworY2xhc3MgQmluYXJ5QXJpdGhQcm9maWxlOworY2xhc3MgVW5hcnlBcml0aFBy
b2ZpbGU7CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBTaW1wbGVK
dW1wVGFibGU7CitzdHJ1Y3QgU3RyaW5nSnVtcFRhYmxlOworCitjbGFzcyBNYXRoSUNIb2xkZXIg
eworcHVibGljOgorICAgIHZvaWQgYWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpOwor
ICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRN
dWxJQyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUU3ViSUMqIGFk
ZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJ
QyhVbmFyeUFyaXRoUHJvZmlsZSopOworCisgICAgLyoKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2Ft
ZTxHZW5lcmF0b3IsIEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRBZGRJ
QyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklU
QWRkSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5
cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwg
SklUTXVsR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIEpJVE11bElDKiBhZGRNYXRoSUMo
QmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRNdWxJQyhwcm9maWxl
KTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVROZWdHZW5lcmF0
b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUTmVnSUMqIGFkZE1hdGhJQyhVbmFyeUFyaXRoUHJv
ZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTmVnSUMocHJvZmlsZSk7IH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUU3ViR2VuZXJhdG9yPjo6dmFsdWU+Ojp0
eXBlPgorICAgIEpJVFN1YklDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxl
KSB7IHJldHVybiBhZGRKSVRTdWJJQyhwcm9maWxlKTsgfQorICAgICovCisKK3ByaXZhdGU6Cisg
ICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOwor
ICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsK
K307CisKK2NsYXNzIEpJVENvbnN0YW50UG9vbCB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29uc3Rh
bnQgPSB1bnNpZ25lZDsKKworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAg
ICBHbG9iYWxPYmplY3QsCisgICAgICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAgU3RydWN0dXJl
U3R1YkluZm8sCisgICAgICAgIEZ1bmN0aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rpb25FeHByLAor
ICAgIH07CisKKyAgICBzdHJ1Y3QgVmFsdWUgeworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoZSBw
b2ludGVyIHBhY2tlZC4KKyAgICAgICAgVHlwZSB0eXBlOworICAgICAgICB2b2lkKiBwYXlsb2Fk
OworICAgIH07CisKKyAgICBKSVRDb25zdGFudFBvb2woKSA9IGRlZmF1bHQ7CisgICAgSklUQ29u
c3RhbnRQb29sKEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQ
b29sJiBvcGVyYXRvcj0oSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKworICAgIENvbnN0
YW50IGFkZChUeXBlIHR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxscHRyKQorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudHMuc2l6ZSgpOworICAgICAgICBtX2NvbnN0
YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBlLCBwYXlsb2FkIH0pOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFu
dHMuc2l6ZSgpOyB9CisgICAgVmFsdWUgYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRzW2ldOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50czsK
K307CisKKworY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1
YmxpYyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIEJhc2VsaW5lSklUQ29kZShDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hl
Y2spOworICAgIH5CYXNlbGluZUpJVENvZGUoKSBvdmVycmlkZTsKKworICAgIEJhZzxVbmxpbmtl
ZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1f
ZXZhbENhbGxMaW5rSW5mb3M7IC8vIE9PUFM6IG1ha2Ugc3VyZSB3ZSB2aXNpdCB0aGVzZSBzb21l
aG93LiBPciBhc3NlcnQgd2UgZG9uJ3QgaGF2ZSB0bywgc2luY2UgdGhleSdyZSB2aXJ0dWFsIGNh
bGxzLgorICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1Yklu
Zm9zOworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVz
OworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzOworICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworICAgIEpJVENvbnN0YW50UG9vbCBt
X2NvbnN0YW50UG9vbDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHNpemVfdCBCYXNlbGluZUpJVFBsYW46OmNvZGVT
aXplKCkgY29uc3QKIAogQ29tcGlsYXRpb25SZXN1bHQgQmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6
ZSgpCiB7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1h
aW5UaHJlYWQoKTsKKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6
ZU9uTWFpblRocmVhZChtX2NvZGVCbG9jayk7CiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBj
YXNlIENvbXBpbGF0aW9uRmFpbGVkOgogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29k
ZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFk
b3dDaGlja2VuUHJvbG8KICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12
b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRv
d1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2Fs
bGVlKSkpOwotICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAg
c3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KGNvZGVCbG9jayksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
Y2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBD
Q2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hh
ZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsK
ICAgICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpA
QCAtNzIsNiArNjIsMjggQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5Q
YQogICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9
CiAKKwordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cit2b2lkIENDYWxsSGVscGVy
czo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpT
VmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2Nr
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgc3RvcmVQdHIoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1t
UHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsK
KyAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOworICAgIHN0b3JlUHRy
KHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNr
ZW46OlBhY2tldCwgc2NvcGUpKSk7CisgICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJs
b2NrKSkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIGNhbGxTaXRlSW5kZXgpKSk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVn
cywgR1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFk
b3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30K
Kwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBj
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVC
bG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKIHZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29k
ZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29w
ZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2Ny
aXB0aW9uKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4
NDAsMTQgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9s
YXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRv
cCBvZgogICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQg
bG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJl
ZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcg
c2NvcGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworCitwcml2YXRlOgorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBH
UFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlSW5kZXgpOworcHVibGljOgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
R1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwg
VHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7Cisg
ICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBK
U1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50
ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAg
IHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQs
IEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogdm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVn
aXN0ZXJzKENvZGVCbG9jayogY29kZUJsb2NrKQogeworICAgIHNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyhjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK3ZvaWQgQ2FsbEZy
YW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zKQorewogICAgIFJlZ2lzdGVyU2V0IGNh
bGxlZVNhdmVSZWdpc3RlcnMgeyBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkg
fTsKLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25z
ID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAg
UmVnaXN0ZXJBdE9mZnNldCBlbnRyeSB7IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVE
YXRhLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDEzIEBAIHB1
YmxpYzoKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJnczsKICAgICB1bnNpZ25lZCBudW1M
b2NhbHMgeyBVSU5UX01BWCB9OwogICAgIHVuc2lnbmVkIG51bVBhc3NlZEFyZ3MgeyBVSU5UX01B
WCB9OworICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OyAvLyBPbiBvdXIg
bWFjaGluZSBmcmFtZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVyTWFwPFZhbHVl
UmVjb3Zlcnk+IHJlZ2lzdGVyczsKICAgICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZh
bGlkR1BSUmVnIH07CiAKICAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxv
Y2sqKTsKKyAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCopOwogI2VuZGlmCiAgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgQ2FsbEZyYW1l
U2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYQogICAgIDogbV9qaXQoaml0KQogICAgICwg
bV9vbGRGcmFtZShkYXRhLm51bUxvY2FscyArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lz
dGVycywgbnVsbHB0cikKICAgICAsIG1fbmV3RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIENhbGxG
cmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQotICAgICwgbV9hbGlnbmVkT2xk
RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCi0gICAgICAgICsgcm91
bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpKSkKKyAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJ
blJlZ2lzdGVycyArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLm51bVBhcmFt
ZXRlcnMpKQogICAgICwgbV9hbGlnbmVkTmV3RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6
ZUluUmVnaXN0ZXJzCiAgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRh
dGEuYXJncy5zaXplKCkpKQogICAgICwgbV9mcmFtZURlbHRhKG1fYWxpZ25lZE5ld0ZyYW1lU2l6
ZSAtIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSkKICAgICAsIG1fbG9ja2VkUmVnaXN0ZXJzKFJlZ2lz
dGVyU2V0OjphbGxSZWdpc3RlcnMoKSkKICAgICAsIG1fbnVtUGFzc2VkQXJncyhkYXRhLm51bVBh
c3NlZEFyZ3MpCisgICAgLCBtX251bVBhcmFtZXRlcnMoZGF0YS5udW1QYXJhbWV0ZXJzKQogewog
ICAgIC8vIFdlIGFyZSBhbGxvd2VkIGFsbCB0aGUgdXN1YWwgcmVnaXN0ZXJzLi4uCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsgKQpAQCAtNDIx
LDcgKzQyMSw3IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCBtX25ld0Zy
YW1lQmFzZSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYXJndW1lbnRDb3VudE9LID0KICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbV9uZXdG
cmFtZUJhc2UsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1faml0
LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIobV9udW1QYXJhbWV0ZXJzKSk7CiAgICAgbV9qaXQuYWRkMzIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSAr
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwgbV9uZXdGcmFtZUJhc2UpOwogICAg
IG1faml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCkpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1f
bmV3RnJhbWVCYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3
IEBAIHB1YmxpYzoKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgZGF0YTsKICAgICAgICAg
ZGF0YS5udW1Mb2NhbHMgPSBudW1Mb2NhbHMoKTsKICAgICAgICAgZGF0YS5udW1QYXNzZWRBcmdz
ID0gbV9udW1QYXNzZWRBcmdzOworICAgICAgICBkYXRhLm51bVBhcmFtZXRlcnMgPSBtX251bVBh
cmFtZXRlcnM7CiAgICAgICAgIGRhdGEuY2FsbGVlID0gZ2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSB9KS0+cmVjb3ZlcnkoKTsKICAgICAgICAgZGF0YS5hcmdz
LnJlc2l6ZShhcmdDb3VudCgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdD
b3VudCgpOyArK2kpCkBAIC03OTgsNiArNzk5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBlcmZv
cm1TYWZlV3JpdGVzKCk7CiAgICAgCiAgICAgdW5zaWduZWQgbV9udW1QYXNzZWRBcmdzIHsgVUlO
VF9NQVggfTsKKyAgICB1bnNpZ25lZCBtX251bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgOiBKU0ludGVy
ZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgbnVsbHB0
cikKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhj
b2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCiAgICAgLCBt
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAgLTc3LDYgKzc3LDkgQEAgSklUOjpKSVQo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmls
aW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25zdGFudCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7CisgICAgbV9w
cm9maWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrID0g
Y29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtOTAs
OCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgICAg
ICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0gICAgCi0gICAgc2tpcE9w
dGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpl
eGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2Nv
ZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIHNraXBPcHRp
bWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhl
Y3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJv
bUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50
cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNiwyMSBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRl
KFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9T
ZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRv
U2V0KQogeworICAgIC8vIE9PUFM6IFRha2UgYSBib29sZWFuIG9yIHNvbWV0aGluZyBzYXlpbmcg
aWYgd2UgY2FuIGJlIG51bGwuCisgICAgYXV0byBvayA9IGJyYW5jaFRlc3RQdHIoWmVybywgcG9p
bnRlclRvU2V0KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHBv
aW50ZXJUb1NldCwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSk7CisgICAgb2subGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQordm9pZCBKSVQ6OmVt
aXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRj
aEdQUikKIHsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBl
ID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPnZhclJlYWRPbmx5V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFyUmVhZE9u
bHlXYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4
KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6
OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCkBAIC0xMjksNyArMTM4LDcgQEAgdm9pZCBKSVQ6
OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3RlciwgcmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCByZWdUMCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlz
KTsKQEAgLTE4MSwyMSArMTkwLDQxIEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0
IEluc3RydWMKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1
dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
OworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZz
ZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0
YWJsZSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHQsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpLCByZXN1bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAg
ICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2Nr
Rm9yQ29uc3RydWN0KCkpLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwo
KSksIHJlc3VsdCk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlOjpvZmZzZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIocmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworfQor
CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2Nr
LCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJs
b2NrLCAiXG4iKTsKICAgICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFz
c2VydEFyZ3VtZW50Q291bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291
bnQgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3Ry
dWN0aW9ucyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2ln
bmVkIGluc3RydWN0aW9uQ291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5zaXplKCk7CiAKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9
IG1fY29kZUJsb2NrLT52bSgpOwogICAgIEJ5dGVjb2RlSW5kZXggc3RhcnRCeXRlY29kZUluZGV4
KDApOworCisgICAgLy8gT09QUzogTWF5YmUgb25seSBkbyB0aGlzIGlmIHdlIGRpc2FibGUgc2hh
cmluZyBzb21laG93PworICAgIC8qCisgICAgVk0mIHZtID0gbV91bmxpbmtlZENvZGVCbG9jay0+
dm0oKTsKICAgICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4ICYmIChtX2NvZGVCbG9j
ay0+aW5oZXJpdHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0
czxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7CiAgICAgICAgIC8vIFdlIGNhbiBvbmx5
IGRvIHRoaXMgb3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFtQ29kZUJsb2Nr
J3MgZXhhY3RseSBvbmNlLgogICAgICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBiZSBp
bnZhbGlkIG90aGVyd2lzZS4gV2hlbiB0aGUgTExJbnQgZGV0ZXJtaW5lcyBpdCB3YW50cyB0bwpA
QCAtMjM2LDYgKzI2NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKyAgICAqLwogCiAgICAgbV9ieXRlY29kZUNv
dW50SGF2aW5nU2xvd0Nhc2UgPSAwOwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsg
KSB7CkBAIC0yNzgsOCArMzA4LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4
ZWN1dGlvbigpKSkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVC
bG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7
CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1l
Kj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5
dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1Bv
aW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9CkBAIC01MjcsNyArNTU3LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7
CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAg
ICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV91bmxpbmtlZENvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dM
bigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgIiwgbV9ieXRlY29kZUluZGV4
LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgpKTsKQEAgLTU0NSw4ICs1NzUsOCBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAg
ICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAg
ICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygp
OwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0g
U0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZw
KCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC02
NzQsNTUgKzcwNCw1NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2Vu
ZGlmCiB9CiAKK3ZvaWQgSklUOjplbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9v
bFJlZ2lzdGVycygpCit7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21ldGFkYXRhR1BSKTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29u
c3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7Cit9CisKK3ZvaWQgSklUOjplbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCkKK3sKKyAgICBCYXNlOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZS
ZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
Cit9CisKIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9
IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICAvLyBPT1BTOiBNYXliZSB0aGlz
IHNob3VsZCBiZSBkb25lIG9uIHVubGlua2VkIGNvZGUgYmxvY2s/CisgICAgREZHOjpDYXBhYmls
aXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsK
ICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAg
ICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9y
SW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6
OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwot
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91
bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQotICAgIAotICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNl
IEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1bGVDb2RlOgotICAgIGNhc2UgRXZhbENvZGU6Ci0g
ICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAgICAgICAgLy8gV2UgY291bGQg
aGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5s
aW5lYWJsZSBjYWxsLgotICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9u
LgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5s
aW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwotICAg
ICAgICBicmVhazsKLSAgICB9CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVu
c3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1w
bGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxl
cygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEo
bG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1w
VGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
cygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRj
aEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zd2l0
Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYg
KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3Rv
cjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
dHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYm
IE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1f
ZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsK
KyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJv
ZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIE9PUFM6IGJ1aWxkIGEgZGlzYXNzZW1ibGVyIG9mZiB1
bmxpbmtlZCBjb2RlIGJsb2NrCisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxK
SVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KICAgICBpZiAoVU5M
SUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBPT1BTOiBi
dWlsZCBwcm9maWxlciBkaXNhc3NlbWJsZXIgb2ZmIHVubGlua2VkIGNvZGUgYmxvY2sKICAgICAg
ICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpD
b21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9jayksCisgICAgICAgICAgICAgICAgbV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVC
bG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1f
Y29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRC
eXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0
ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CkBAIC03NDIsMTEgKzc3
MywxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAg
IG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAg
ICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJl
Z2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVU
b3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9m
ZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzU3LDE2
ICs3ODksMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAg
IG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZl
Q2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygp
OworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7
CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7
CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVt
aXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewor
ICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV91bmxpbmtlZENvZGVCbG9j
ay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4
ZWRWZWN0b3I8VmFsdWVQcm9maWxlPjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAg
ICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBh
IGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdz
IGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVt
bXkgdmFsdWUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9y
KCkgJiYgIWFyZ3VtZW50KQorICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNzc3LDEyICs4MTMsMTIgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQz
MihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAg
ICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIo
KSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fY29k
ZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3MpOwor
ICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwgYXJn
dW1lbnQgKiBzaXplb2YoVmFsdWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJz
dEJ1Y2tldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
UkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVCbG9jay0+
aml0VHlwZSgpKSk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAgICAgIG1f
dm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhp
cyk7CkBAIC03OTksMjQgKzgzNSwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluCiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBp
ZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1f
Y29kZUJsb2NrKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2ssIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIHJlZ1Qw
KTsKIAogICAgIC8vIElmIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciBy
ZXF1aXJlIGFyaXR5IGZpeHVwLgotICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2Rl
QmxvY2stPm1fbnVtUGFyYW1ldGVycyAhPSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5
cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAgYm9vbCBy
ZXF1aXJlc0FyaXR5Rml4dXAgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkg
IT0gMTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxh
YmVsKCk7Ci0gICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9z
aG91bGRBbHdheXNCZUlubGluZWQpOworCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7
Ci0gICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xv
Z3VlKHJlZ1QwKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAKICAgICAg
ICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpLCByZWdUMSk7Ci0gICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJlZ2luTGFi
ZWwsIHRoaXMpOworICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGJlZ2lu
TGFiZWwsIHRoaXMpOwogCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
MCk7CiAKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2RlQmxvY2st
PmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRp
b25DYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCBhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb24obV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3Bl
cmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBhcmd1
bWVudEdQUjApOwogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAg
ICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywg
cmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTgzOSw3ICs4Nzgs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6
OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVf
cHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9
IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV91bmxp
bmtlZENvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkp
OwogICAgIGxpbmsoKTsKIH0KIApAQCAtODU4LDggKzg5Nyw4IEBAIHZvaWQgSklUOjpsaW5rKCkK
ICAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewogICAgICAgICBjYXNlIFN3aXRjaFJlY29y
ZDo6SW1tZWRpYXRlOgogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyOiB7Ci0g
ICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAg
ICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAg
ICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dp
dGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0
XSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRUYWJsZS5t
X2JyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBv
ZmZzZXQgPSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3MSw4ICs5MTAs
OCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3aXRjaFJl
Y29yZDo6U3RyaW5nOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
ICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1
bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRl
Y29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKGF1
dG8mIGxvY2F0aW9uIDogdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hPZmZzZXQ7
CkBAIC05MDYsMzIgKzk0NSwzNSBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCByZWNvcmQuY2FsbGVlKTsKICAgICB9CiAKLSAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9kZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2lu
QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlWYWxz
LCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbnN0YW5jZU9mcywg
cGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5kQWNj
ZXNzZXMsIHBhdGNoQnVmZmVyKTsKKyAgICBhdXRvIGZpbmFsaXplSUNzID0gWyZdIChhdXRvJiBn
ZW5lcmF0b3JzKSB7CisgICAgICAgIGZvciAoYXV0byYgZ2VuIDogZ2VuZXJhdG9ycykgeworICAg
ICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+c3RhcnQgPSBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zdGFydCk7CisgICAgICAgICAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KGdlbi5tX2RvbmUpOworICAgICAgICAgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc2xvd1BhdGhCZWdpbik7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkcyk7CisgICAgZmluYWxpemVJ
Q3MobV9nZXRCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHNXaXRoVGhpcyk7Cisg
ICAgZmluYWxpemVJQ3MobV9wdXRCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9wdXRCeVZhbHMp
OworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlW
YWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1faW5C
eVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5zdGFuY2VPZnMpOworICAgIGZpbmFsaXplSUNz
KG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMpOwogCiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlvbklu
Zm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZv
ID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87Ci0gICAgICAgIGluZm8uc2V0Q29kZUxv
Y2F0aW9ucygKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0
clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQYXRoU3RhcnQpLAotICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxv
Y2F0aW9uKSk7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0
aW9uSW5mby51bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24g
PSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5m
by5kb25lTG9jYXRpb24pOwogICAgIH0KIAotICAgIHsKLSAgICAgICAgSklUQ29kZU1hcEJ1aWxk
ZXIgaml0Q29kZU1hcEJ1aWxkZXI7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNl
dCkgewotICAgICAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQot
ICAgICAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5
dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xh
YmVsc1tieXRlY29kZU9mZnNldF0pKTsKLSAgICAgICAgfQotICAgICAgICBtX2NvZGVCbG9jay0+
c2V0SklUQ29kZU1hcChqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpKTsKKyAgICBKSVRDb2Rl
TWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKKyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVP
ZmZzZXQpIHsKKyAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQor
ICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0XSkpOwogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpk
dW1wRGlzYXNzZW1ibHkoKSkpIHsKQEAgLTk0MCwyNiArOTgyLDM3IEBAIHZvaWQgSklUOjpsaW5r
KCkKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkobV9jb21waWxhdGlvbikpIHsKKyAgICAgICAg
Ly8gT09QUzogbWFrZSBieXRlY29kZSBwcm9maWxlciBrbm93IGFib3V0IHVubGlua2VkIENCPwog
ICAgICAgICBpZiAoT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpCiAg
ICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9u
LmdldCgpLCBwYXRjaEJ1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
ci0+YWRkQ29tcGlsYXRpb24obV9jb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAgICAgICAg
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2ZpbGVkQ29k
ZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2RlT3JpZ2lu
TWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlciksIHBhdGNoQnVmZmVyKTsKICAgICAKKyAgICAvLyBPT1BTOiBNYWtlIGEg
dmVyc2lvbiBvZiBDb2RlQmxvY2tXaXRoSklUVHlwZSB0aGF0IGtub3dzIGFib3V0IFVubGlua2Vk
Q29kZUJsb2NrLgogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVf
Q09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNl
bGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2Vs
aW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3By
b2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAg
IG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0
eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29kZSA9IGFkb3B0UmVm
KCpuZXcgQmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2spKTsKKworICAgIG1f
aml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gV1RGTW92ZShtX3VubGlua2VkQ2FsbHMpOworICAg
IG1faml0Q29kZS0+bV9ldmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJ
bmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0gV1RGTW92ZShtX3Vu
bGlua2VkU3R1YkluZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdU
Rk1vdmUobV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcyA9IFdURk1vdmUobV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2pp
dENvZGUtPm1faml0Q29kZU1hcCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCk7CisgICAg
bV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNzKTsKKyAgICBtX2ppdENvZGUtPm1fY29u
c3RhbnRQb29sID0gV1RGTW92ZShtX2NvbnN0YW50UG9vbCk7CiAKICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVw
IGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCkt
PnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCku
dW50YWdnZWRQdHIoKSk7CisgICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9y
ICVwIGF0IFslcCwgJXApLlxuIiwgbV91bmxpbmtlZENvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFi
bGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9y
eSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpm
aW5hbGl6ZU9uTWFpblRocmVhZCgpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25N
YWluVGhyZWFkKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFp
c0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogCkBAIC05NjgsMjUgKzEwMjEsMjEgQEAgQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5rQnVmZmVyLT5ydW5N
YWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MoKTsKIAotICAgIHsKLSAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgbV9jb2RlQmxv
Y2stPnNocmlua1RvRml0KGxvY2tlciwgQ29kZUJsb2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5r
KTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1i
ZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgewotICAgICAgICBIYW5kbGVySW5mbyYgaGFu
ZGxlciA9IG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOwotICAgICAgICAvLyBGSVhN
RTogPHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KLSAgICAgICAgaGFuZGxlci5uYXRpdmVDb2Rl
ID0gbV9jb2RlQmxvY2stPmppdENvZGVNYXAoKS5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50
YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOwotICAgIH0KKyAgICAv
LyBPT1BTOiBEb24ndCB0aGluayB0aGlzIHNocmluayBpcyByZWFsbHkgZG9pbmcgYW55dGhpbmcg
YW55bW9yZS4gVmVyaWZ5LgorICAgIC8veworICAgIC8vICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgLy8gICAgbV9jb2RlQmxvY2stPnNocmlu
a1RvRml0KGxvY2tlciwgQ29kZUJsb2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5rKTsKKyAgICAv
L30KIAorICAgIC8vIE9PUFM6IG1fcGNUb0NvZGVPcmlnaW5NYXAgc2hvdWxkIGxpdmUgb24gQmFz
ZWxpbmVKSVRDb2RlIGZvciBiYXNlbGluZSBjb2RlYmxvY2tzLgogICAgIGlmIChtX3BjVG9Db2Rl
T3JpZ2luTWFwKQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoV1RG
TW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKSk7CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2st
PnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOwogCiAg
ICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5h
ZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAg
ICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgp
KSk7CisgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zU2l6ZSgpKSk7CiAKLSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENv
ZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJh
c2VsaW5lQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4gQ29t
cGlsYXRpb25TdWNjZXNzZnVsOwogfQpAQCAtOTk4LDExICsxMDQ3LDExIEBAIHNpemVfdCBKSVQ6
OmNvZGVTaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAK
LUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGRvTWFp
blRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0
aG91dEZpbmFsaXppbmcoZWZmb3J0KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQo
KTsKKyAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxOCArMTA5
MSwyOCBAQCB2b2lkIEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAg
IG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBh
cmluZyBmb3IgSklUIGNvbXBpbGF0aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFt
ZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkp
ID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAog
ICAgIHJldHVybiByb3VuZExvY2FsUmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChj
b2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGxJblJlZ2lzdGVycyk7CiB9CiAKLWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENv
ZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBmcmFtZVJlZ2lzdGVyQ291bnRGb3Io
Y29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKworaW50IEpJVDo6c3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJu
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2sp
IC0gMSkub2Zmc2V0KCk7CiB9CiAKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNv
ZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKIEhhc2hNYXA8Q1N0cmluZywgU2Vj
b25kcz4gSklUOjpjb21waWxlVGltZVN0YXRzKCkKIHsKICAgICBIYXNoTWFwPENTdHJpbmcsIFNl
Y29uZHM+IHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNiArMzcsNyBAQAogCiAjZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwgZXhw
ZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9mZnNl
dCBcIiVzXCIgc2hvdWxkIGJlICVkLCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19jYXN0
PGludD4oZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCisjaW5jbHVkZSAi
QmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29t
bW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCkBAIC00NCw2ICs0
NSw3IEBACiAjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCisjaW5jbHVkZSAiTExJbnRE
YXRhLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQ
b2ludGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsxNTEsMTQg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25J
bmZvIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247Ci0gICAgICAgIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5r
ZWRDYWxsTGlua0luZm87CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExp
bmtJbmZvQ29uc3RhbnQ7CiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3
Q2FsbGVlRnVuY3Rpb24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBw
cml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJ
VCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93
UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKICAgICAgICAgZnJp
ZW5kIGNsYXNzIEpJVFRodW5rczsKQEAgLTE3MSw2ICsxNzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5v
dCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgogICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCisgICAgICAgIHVzaW5n
IEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwg
Q29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVP
ZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMTc4LDI4ICsx
ODIsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0lu
dGVyZmFjZUpJVDo6dm0oKTsgfQogCiAgICAgICAgIHZvaWQgY29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVz
dWx0IGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZp
bmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayopOwogICAgICAgICBzaXplX3QgY29kZVNpemUo
KSBjb25zdDsKIAogICAgICAgICB2b2lkIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29t
cGlsZSgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBp
bGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9m
ZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBKSVQodm0s
IGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGNvZGVCbG9jaywgZWZm
b3J0KTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVy
Q291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZy
YW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIGludCBzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIGlu
dCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0
cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBp
bGVUaW1lKCk7CiAKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0YUdQ
UiA9IExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFI7CisgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNfY29uc3RhbnRzR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFI7
CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7CiAgICAgICAgIHZvaWQgcHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKICAgICAgICAgdm9pZCBsaW5rKCk7Ci0gICAgICAgIENv
bXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAg
ICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklUQ29t
cGlsYXRpb25FZmZvcnQpOwogCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNv
ZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwo
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2ICsy
MzIsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkUHRyRnJvbU1ldGFk
YXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFk
YXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0YWRh
dGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2
b2lkIHN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2
b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgbG9hZENvbnN0
YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZENvZGVC
bG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGVt
aXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOwor
CiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAgICAg
ICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7
CkBAIC0yNTgsMTYgKzI5MywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFi
bGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYg
T3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5m
b0NvbnN0YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3Rk
OjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFy
Z3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8
fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxM
aW5rSW5mb0NvbnN0YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAg
ICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0
IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwogICAgICAgICB2b2lk
IGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtMjg3LDE0ICszMjIsMTUgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQg
ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdy
aXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lcik7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpOwogCiAg
ICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJl
Z1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4K
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJl
Zyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIC8vdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7CisgICAgICAgIC8vdm9p
ZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShjb25zdCBCeXRlY29kZSYsIEdQUlJlZyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBK
U1ZhbHVlUmVncyk7CiAjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJl
Z3MpOwpAQCAtMzA1LDggKzM0MSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjpl
bmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUp
LCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4KICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpOwogCi0gICAgICAgIHZvaWQgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxl
KiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmls
ZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChj
b25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwg
UmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01
OTMsNyArNjMxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
am5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjI3LDE0ICs2NjQsMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWdu
ZWQpOwogCiAgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFj
Y2Vzc1R5cGUpOwotICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29t
bW9uKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNo
ZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2b2lkIGVtaXRWYXJS
ZWFkT25seUNoZWNrKFJlc29sdmVUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9u
Q2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsKKyAgICAgICAgdm9p
ZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwog
ICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVk
IGRlcHRoKTsKICAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCkBAIC02NDYsNyArNjgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAg
ICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCop
OwotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsKKyAg
ICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQp
OwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQ
dXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpAQCAtNjU1LDYgKzY5Miw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgICAgICBib29sIGlz
S25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRP
cGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJ
bnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIo
VmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY5NiwyNiArNzM0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7CiAg
ICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNv
bHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsK
LSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VO
RVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJv
bVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KLSAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1vZHVsZVZh
ciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4gdXNlIGEg
dGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3ZSBkb24n
dCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAgICAgICAgICAgcmV0
dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09
IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2Vu
ZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX1JFU09M
VkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFU
T1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVy
YXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1l
KTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlw
ZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYs
IHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwogCiAg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVl
SXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1RydXRoeUdlbmVyYXRvcihWTSYpOwpAQCAtNzYw
LDEwICs3ODAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAg
IHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoQWRkcmVz
cywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1l
dGFkYXRhPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7Ci0gICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICB2b2lkIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBB
ZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQnl0ZWNvZGU+CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUm
LCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShj
b25zdCBCeXRlY29kZSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAg
ICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4g
QXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25U
eXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KQEAgLTgyMSwyMCArODQxLDIw
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVy
YXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBC
eXRlY29kZSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAg
ICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVz
dWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24s
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAg
ICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRo
UHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
Ynl0ZWNvZGUsIG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICAgICAgfQogCi0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFtZS4u
LiBBcmdzPgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFt
ZSBCeXRlY29kZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxG
dW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCB2b2lkPgotICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNzIHRhcmdl
dCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBBZGRyZXNzIHRhcmdl
dCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAg
ICAgICAgICBzZXR1cEFyZ3VtZW50c0ZvckluZGlyZWN0Q2FsbDxPcGVyYXRpb25UeXBlPih0YXJn
ZXQsIGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIEFkZHJlc3MoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShieXRlY29kZSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwg
cmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlv
blR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CkBAIC05MTksMjUgKzkzOSwyMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVk
KCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZDsgfQotICAgICAgICBib29sIGNhbkJlT3B0aW1p
emVkT3JJbmxpbmVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsgfQogICAg
ICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBtX3Nob3VsZEVtaXRQcm9m
aWxpbmc7IH0KICNlbHNlCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBm
YWxzZTsgfQotICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICAgICAgLy8gRW5hYmxlcyB1c2Ugb2YgdmFsdWUgcHJvZmlsZXIgd2l0aCB0
aWVyZWQgY29tcGlsYXRpb24gdHVybmVkIG9mZiwKICAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSBh
bGwgY29kZSBnZXRzIHByb2ZpbGVkLgogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmco
KSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBlbWl0TWF0ZXJpYWxp
emVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOworCisgICAgICAgIHZvaWQgZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOworCiAgICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBp
bGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7Ci0g
ICAgICAgIAotICAgICAgICAvLyBJZiB5b3UgbmVlZCB0byBjaGVjayBhIHZhbHVlIGZyb20gdGhl
IG1ldGFkYXRhIHRhYmxlIGFuZCB5b3UgbmVlZCBpdCB0bwotICAgICAgICAvLyBiZSBjb25zaXN0
ZW50IGFjcm9zcyB0aGUgZmFzdCBhbmQgc2xvdyBwYXRoLCB0aGVuIHlvdSB3YW50IHRvIHVzZSB0
aGlzLgotICAgICAgICAvLyBJdCB3aWxsIGdpdmUgdGhlIHNsb3cgcGF0aCB0aGUgc2FtZSB2YWx1
ZSByZWFkIGJ5IHRoZSBmYXN0IHBhdGguCi0gICAgICAgIEdldFB1dEluZm8gY29waWVkR2V0UHV0
SW5mbyhPcFB1dFRvU2NvcGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4K
LSAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7
CiAKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKQEAgLTk2NCw5ICs5Nzks
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xv
d0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCi0gICAg
ICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwotICAg
ICAgICBIYXNoTWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQ
cm9maWxlczsKLQogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAg
SnVtcExpc3QgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7CiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTAwMCwxMSArMTAxMiwyNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBJbnN0cnVjdGlvbiosIFVuaXF1ZVJlZjxNYXRo
SUNHZW5lcmF0aW9uU3RhdGU+PiBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGU7
CiAKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwotICAgICAgICBib29sIG1fY2FuQmVP
cHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwog
ICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKIAotICAg
ICAgICBSZWZQdHI8RGlyZWN0SklUQ29kZT4gbV9qaXRDb2RlOworICAgICAgICBDb2RlQmxvY2sq
IG1fcHJvZmlsZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFVubGlua2VkQ29kZUJs
b2NrKiBtX3VubGlua2VkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworCisgICAgICAgIE1hdGhJQ0hv
bGRlciBtX21hdGhJQ3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1faml0Q29k
ZTsKKworICAgICAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5rZWRDYWxs
TGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9l
dmFsQ2FsbExpbmtJbmZvczsKKyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+
IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJs
ZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFi
bGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBzdHJ1Y3QgTm90QUNvZGVC
bG9jayB7IH0gbV9jb2RlQmxvY2s7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8
fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewogICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQ
UjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMyMCw3ICsz
MjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAg
IH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVn
VDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVy
byA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOworICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0K
IApAQCAtNTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhj
b25zdCAKIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChv
cDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KIApAQCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29u
c3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVE5l
Z0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAg
IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJQyk7
CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlv
blZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0
TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAtODk5LDgg
KzkwNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJv
ZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtl
ZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BB
ZGQ+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0aElDcy5h
ZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQo
Y3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFk
ZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJh
dGlvblZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjplbWl0TWF0
aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBt
YXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAg
IGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRF
bWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BS
LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dD
YXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAxNSwxMCAr
MTAyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAg
ICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BS
LCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2Uo
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEzICsxMDYy
LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNlbmRpZgog
CiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9m
aWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmls
ZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnBy
ZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNy
Y1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnBy
ZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCBy
ZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQ
cm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBy
ZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJl
aW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3Jj
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nh
c3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJl
Z1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhf
SUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIwLDEzICsx
MTI4LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICNlbmRp
ZgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRo
UHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFBy
b2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdp
c2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBs
ZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJl
Z3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJl
Z3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9K
SVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwg
bGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJM
RShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTE2
Niw3ICsxMTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgog
CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwogICAgIGlm
IChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFy
eUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1fcHJvZmlsZUlu
ZGV4KTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFu
ZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29k
ZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+
KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBt
dWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFy
eUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1fcHJvZmlsZUlu
ZGV4KTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRkSklUTXVsSUMoYXJpdGhQ
cm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlv
biwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3Ry
dWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9
CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IElu
c3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRT
dWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU3ViPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRTdWJJQyogc3ViSUMg
PSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9u
VG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNG
YXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw3
ICsyMzIsNyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBzdG9yZVB0
cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFt
ZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
cmVnVDEsIHJlZ1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7
CiAgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTMyNCw3
ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAg
YWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0
Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93
UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShj
b25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
IkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
SklUSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2lu
Y2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAj
aW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChj
b25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5h
dGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJl
Z2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4IEBAIHN0ZDo6ZW5hYmxlX2lm
X3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQg
IT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUs
IENhbGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29k
ZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50
ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJbmNsdWRpbmdU
aGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnQp
OwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0YWNrT2Zmc2V0
SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKKwogICAgIGlmIChP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQg
KyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKICAg
ICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAg
ICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVja3BvaW50
KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9NZXRh
ZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJ
bmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5
UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBkb25lLmxp
bmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAg
ICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwog
LCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxM
aW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2Rl
LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewogICAg
IFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC05MSw3
ICs5Miw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAg
ICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7
CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9y
VmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3Rlciwg
Zmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOworICAgIGNh
bGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0
ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVl
UmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJu
VmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
LShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25T
ZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNldHVwT3BlcmF0
aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJhdGlvbihzZXR1
cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVnVDMsIHJl
Z1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9m
ZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMy
KEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFkZHJlc3NP
Zk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25zdGFudChjYWxs
TGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDYWxs
TGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJlZ1Qz
KTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1QyKTsK
KyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9m
TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dlc3QubGluayh0
aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywxNiArMTMxLDE2
IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxhdGU8PgogYm9v
bCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkKIHsKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAgIHN0b3Jl
UHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZy
YW1lT2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlciwg
YXJndW1lbnRHUFIxKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhh
cmd1bWVudEdQUjEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmVnVDApKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZh
bHVlKCkpLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5
KHJldHVyblZhbHVlR1BSKSk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiAK
QEAgLTE0OCw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29u
c3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBt
X2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7
CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQoQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZv
OjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9h
cmd2OwpAQCAtMTU2LDQzICsxNjAsNDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXRWaXJ0dWFsQ2FsbCgq
bV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5n
R2xvYmFsT2JqZWN0KCptX3ZtLCBpbmZvKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3Rh
Y2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChj
b25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQoteworYm9vbCBKSVQ6OmNvbXBpbGVU
YWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQsIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQpIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRl
PD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUs
IENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCitib29sIEpJ
VDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENh
bGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0gICAgQ2FsbEZyYW1lU2h1
ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5
dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQUklu
Zm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9CisgICAg
c3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9IG1ha2VV
bmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhc3Nl
ZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhcmFtZXRlcnMg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CisgICAgc2h1ZmZsZURhdGEt
Pm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAgc2h1
ZmZsZURhdGEtPm51bUxvY2FscyA9CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEuYXJn
cy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUo
Ynl0ZWNvZGUubV9hcmdjKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUu
bV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgIHNo
dWZmbGVEYXRhLT5hcmdzW2ldID0KICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNl
ZEluSlNTdGFjaygKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudElu
Y2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAgRGF0YUZv
cm1hdEpTKTsKICAgICB9Ci0gICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAgVmFsdWVS
ZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURhdGEuc2V0
dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRGcmFtZVNo
dWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVS
ZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAgc2h1ZmZsZURhdGEtPnNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6OlllcywgWyZdIHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMs
IHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3RhbnQoY2Fs
bExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxs
TGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIs
IFsmXSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURhdGEpLnBy
ZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7
CisKKyAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFtZVNodWZm
bGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9
IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5k
b25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0yMTgsMTQgKzIyNiwyNSBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVy
IGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3Rv
cmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLwotICAgIENhbGxMaW5r
SW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkK
LSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpKTsKLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7
CisKKyAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBpZiAob3Bj
b2RlSUQgIT0gb3BfY2FsbF9ldmFsKSB7CisgICAgICAgIGluZm8gPSBtX3VubGlua2VkQ2FsbHMu
YWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJ
RCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZvKTsKKworICAgICAgICBBU1NFUlQobV9j
YWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKKyAg
ICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS51bmxpbmtlZENh
bGxMaW5rSW5mbyA9IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3RhbnQ7CisgICAgfQor
ICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQpOwogCiAgICAgLy8g
U1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFy
Z3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRlY29kZUluZGV4ID0gbV9jb2Rl
QmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQzMl90IGxvY2F0aW9u
Qml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOworICAgIHVpbnQzMl90
IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7CiAg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVzcyhjYWxsRnJhbWVS
ZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxsZWUu
CkBAIC0yMzQsMTYgKzI1MywxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0
cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5r
SW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZv
cihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENh
bGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAgaWYgKGNvbXBpbGVUYWlsQ2Fs
bChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQorICAgIGlmIChjb21waWxlVGFp
bENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3RhbnQpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCByZWdUMik7
CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAgICBhdXRvIHNsb3dQYXRo
cyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1BhdGhzID0g
Q2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJl
Z1QyLCBbJl0gewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAg
ICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CiAgICAgICAgIH0pOwpAQCAtMjUz
LDEzICsyNjgsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0
RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olll
cyk7CisgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0
aCgqdGhpcywgcmVnVDAsIHJlZ1QyKTsKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogCi0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjczLDIwICsyODgsMjAgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Myk7CisgICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlzKTsK
KyAgICBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgqbV92bSwgKnRoaXMsIHJlZ1Qy
KTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENh
bGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
ICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcD4oKTsKQEAgLTM5NSwxNyArNDEwLDMwIEBAIHZvaWQgSklUOjpl
bWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKICAgICAKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwor
CisgICAgbW92ZShyZWdUMCwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1w
bCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMu
YXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1
bHRHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CkBAIC00
MTYsMTAgKzQ0NCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMK
ICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBp
dGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hl
Y2twb2ludChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAg
R1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKICAg
ICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyYXRvckdQUikpOwogICAgIG5v
dE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0b3JHUFIpKTsKQEAgLTQzMiwx
OSArNDU4LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAg
ICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJ
bmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0
eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyYXRvckdQUiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgbW92ZShpdGVyYXRvckdQ
UiwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIAogICAgIGF1dG8gZG9u
ZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1
bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKIH0K
QEAgLTQ1Miw3ICs0NzYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRl
cmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewogICAgICAg
ICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNhc2UgTmFycm93OiBy
ZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC00NzAsNTAgKzQ5Myw3NyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgSnVtcCBmYXN0
Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpKTsK
IAogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgb3I4KFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIEFic29sdXRlQWRkcmVz
cygmbWV0YWRhdGEubV9pdGVyYXRpb25NZXRhZGF0YS5zZWVuTW9kZXMpKTsKKyAgICBsb2FkOEZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0
ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9mU2Vlbk1v
ZGVzKCksIHJlZ1QwKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90
PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIHJlZ1QwKTsKKyAgICBzdG9yZThUb01ldGFkYXRh
KHJlZ1QwLCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJh
dGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9mU2Vlbk1vZGVz
KCkpOwogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAg
Ly8gY2FsbCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkgaW4gcmVnVDAKIAotICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVn
VDI7Ci0gICAgR1BSUmVnIGRvbmVHUFIgPSByZWdUMTsKLSAgICAvLyBpdGVyUmVzdWx0R1BSIHdp
bGwgZ2V0IHRyYXNoZWQgYnkgdGhlIGZpcnN0IGdldCBieSBpZCBiZWxvdy4KLSAgICBtb3ZlKHZh
bHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNo
OworICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKIAorICAgIGNv
bnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0
OwogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1bHRH
UFIpOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0g
YmFzZUdQUik7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIp
OwogCiAgICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHZhbHVl
R1BSKTsKKyAgICAgICAgcHJlc2VydmVkUmVncy5hZGQoaXRlckNhbGxSZXN1bHRHUFIpOwogICAg
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZl
ZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVn
cyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHJlZ1QzLCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2
ZWRSZWdzLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BS
IH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVn
cyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAg
ICB9CiAKLQogICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7Ci0gICAgICAg
IEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0
ZXJzKGRvbmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7CisgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRl
U2NyYXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJh
bmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGds
b2JhbEdQUik7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRo
eSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1Qw
LCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbEdQUik7
CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0
R1BSLCBiYXNlR1BSKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwot
ICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBs
KCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1Yklu
Zm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
ICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVu
ZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFs
dWVSZWdzIHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRHUFIpOwogCiAgICAgICAgIGl0
ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01MjcsNTkgKzU3Nyw1NSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnNjcmF0Y2g7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wSXRlcmF0b3JOZXh0PigpOwogICAgIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVW
UmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJl
Z1QyOwogCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAgIEp1bXBMaXN0
IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRl
clJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChp
dGVyQ2FsbFJlc3VsdEdQUikpOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9
IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCk7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgICAgIAogICAg
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBub3RPYmplY3Qu
YXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2Jq
ZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCi0gICAg
ICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9u
ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkb25lVlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGRvbmVWUmVnLCByZWdUMSk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgcmVnVDApOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBh
cmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBl
KG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisK
KyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwor
CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6cmVzdWx0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBk
b25lR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVl
LCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2tw
b2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKICAgICB9CiAK
ICAgICB7ICAgCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgICAgICBHUFJSZWcg
aXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVu
dCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAg
ICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAg
ICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0
ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BS
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50
KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIp
OworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAgICAgfQotCiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKIAorCiBuYW1lc3BhY2UgSlND
IHsKIAogbmFtZXNwYWNlIERGRyB7CkBAIC0xNTksMTAgKzE2MCwxMCBAQCBwdWJsaWM6CiAKICAg
ICBzdGF0aWMgYm9vbCB1c2VEYXRhSUMoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKLSAgICAgICAg
aWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBPcHRpb25zOjp1c2VEYXRhSUNJbk9w
dGltaXppbmdKSVQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODI2NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNhY2hlYWJsZUlk
ZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSW5s
aW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKQEAgLTQ2LDEwICs0Nyw5IEBAIHN0YXRp
YyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmYKIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycykKLSAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAsIG1faml0VHlw
ZShqaXRUeXBlKQorICAgIDogbV9qaXRUeXBlKGppdFR5cGUpCiB7Ci0gICAgbV9zdHViSW5mbyA9
IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVP
cmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5mbyA9IGNvZGVCbG9jayA/
IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdl
U3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGU7CiAK
ICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyczsKQEAgLTU5LDcg
KzU5LDYgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgTGlu
a0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpCiB7CiAgICAgbV9zdHViSW5mby0+c3RhcnQg
PSBzdGFydDsKLQogICAgIG1fc3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IGZhc3RQYXRoLmxvY2F0
aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obV9kb25lKTsKIAogICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKG1faml0VHlwZSkpCkBAIC02Nyw2ICs2NiwxNSBAQCB2b2lkIEpJVElubGluZUNhY2hl
R2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRp
b24gPSBzbG93UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3Nsb3dQYXRo
QmVnaW4pOwogfQogCit2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7
CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworICAg
IGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBqaXQuY2FsbChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICBtX2RvbmUgPSBqaXQu
bGFiZWwoKTsKK30KKwogSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1
ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTExMCw3ICsxMTgsNyBAQCBKSVRH
ZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJl
Z3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAg
IDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxT
aXRlLCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIp
Ci0gICAgLCBtX2lzTGVuZ3RoQWNjZXNzKHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2st
PnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAgICAsIG1faXNMZW5ndGhBY2Nl
c3MoY29kZUJsb2NrICYmIHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlLnBh
eWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoSklUKQog
CiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvblZhbGlkYXRp
b24uaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5o
IgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKQEAgLTM4LDExICszOSwxMTQgQEAgbmFtZXNwYWNlIEpT
QyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNs
YXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworc3Ry
dWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6
IGludDhfdDsKIGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKK3N0cnVjdCBCYXNlbGlu
ZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUklu
Zm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZv
OjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkg
PSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQ
UkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJ
bmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAg
ICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0aWFs
aXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgorICAgIHN0YXRpY19hc3Nl
cnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsK
KyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpy
ZXN1bHQpOworICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MiA9IEdQUkluZm86OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gz
ID0gR1BSSW5mbzo6cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50
R1BSMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86
OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQ
UkluZm86Om5vbkFyZ0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIg
PSBHUFJJbmZvOjpub25BcmdHUFIxOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7Cisg
ICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2Up
OworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BS
SW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUklu
Zm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJh
c2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdGhp
c1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlJZFJlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0
QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6
cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpy
ZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVn
VDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBwcm9maWxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJyYW5kID0gR1BS
SW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvciB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAg
LTYyLDE1ICsxNjYsMjEgQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExp
bmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVm
ZmVyLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3Rh
cnQpOwotICAgIAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklU
JiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIg
fTsKKyAgICB1bnNpZ25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBDb2Rl
QmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVy
ZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwotICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIG1fc2xvd1BhdGhDYWxsOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhD
YWxsOyAvLyBPT1BTOiBtYWtlIHJlcG9ydENhbGwgcGFzcyBzb21ldGhpbmcgaW4gd2UgY2FuIHVz
ZSBmb3IgdGhlIG5vbi1DVEkgdGh1bmtzIGJ1aWxkcy4gCiB9OwogCiBjbGFzcyBKSVRCeUlkR2Vu
ZXJhdG9yIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTk4LDcgKzIwOCw3
IEBAIHByb3RlY3RlZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3Mg
bV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworcHVibGljOgog
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTMyLDgg
KzI0Miw4IEBAIHB1YmxpYzoKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0Owog
CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwg
Q29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFs
dWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9k
ZSwgUHV0S2luZCk7CisgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENh
bGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJ
ZGVudGlmaWVyLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwg
R1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOwog
ICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogICAgIApA
QCAtMTYzLDExICsyNzMsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgo
TWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAg
ICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0
YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwog
fTsKIApAQCAtMTkxLDggKzI5OSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0
UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1Bh
dGhKdW1wOwogfTsKIApAQCAtMjE2LDggKzMyMiw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2Vu
ZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1w
IG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjQxLDggKzM0NSw2IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRj
aGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjc3LDggKzM3OSw2IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBM
aW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1w
IG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzAyLDExICs0MDIsOSBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6
CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0OwogCi0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBh
dGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMzAsOCArNDI4LDYgQEAgcHVi
bGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwog
Ci1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxMyArMzUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6
OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0
dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUo
KTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
aXNEb3VibGUoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29u
c3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICgh
c3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBP
T1BTOiBmaW5kIGEgd2F5IHRvIGFzc2VydCB0aGF0IGFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFy
ZSBjZWxscy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJ
VDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJU
KHNyYy5pc0NvbnN0YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
c3JjKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAg
LTE1NiwzNiArMTgxLDM2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRo
RXgKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
K3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1
bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVl
R1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQ
UjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNl
bHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0
dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIp
KTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAg
aWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAK
QEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2Fz
ZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1f
Ynl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hl
Y2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAog
ICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgs
IGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRv
TmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVj
a3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJ
bmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBB
U1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hl
Y2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExh
YmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwzMyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJl
dHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5n
KCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgo
KSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQotewotICAgIEFTU0VS
VChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29u
ZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAot
ICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIo
KSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQotICAgIEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+
KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigp
LCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwotICAgIHN0b3JlMzIodmFsdWUudGFnR1BS
KCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgotfQorICAgIGlmICghc3JjLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3Ry
aW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30K
KworLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxl
JiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQorLy97CisvLyAgICBBU1NFUlQoc2hv
dWxkRW1pdFByb2ZpbGluZygpKTsKKy8vCisvLyAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25m
aWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0Cisv
LyAgICAvLyBzdG9yZS4KKy8vI2lmIFVTRShKU1ZBTFVFNjQpCisvLyAgICBzdG9yZTY0KHZhbHVl
LmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vI2Vsc2UKKy8vICAgIEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVz
Y3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8gICAgc3RvcmUzMih2YWx1ZS5w
YXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7CisvLyAgICBzdG9yZTMy
KHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7CisvLyNlbmRpZgorLy99
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjpp
c19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6
dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUo
T3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsNDEgKzM1Miw0MiBAQCBpbmxpbmUgc3Rk
OjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0
IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKSksIHZhbHVlKTsKKworICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyB2YWx1ZVBy
b2ZpbGVPZmZzZXRGb3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpICsg
VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7CisgICAgc3RvcmU2NCh2YWx1ZS5n
cHIoKSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBvZmZzZXQpKTsKIH0KIAogI2lmIFVTRShKU1ZB
TFVFNjQpCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9m
aWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyByZXN1bHRSZWcpCi17Ci0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwotfQorLy9p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1
ZVByb2ZpbGUsIEdQUlJlZyByZXN1bHRSZWcpCisvL3sKKy8vICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKy8vfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVn
KSk7CiB9CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwg
UmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5s
aW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQg
Y2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQogewogICAgIGlmIChzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpIHsKICAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBz
dG9yZTMyKHNjcmF0Y2hHUFIsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1
cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUs
IG9mZnNldE9mQXJyYXlQcm9maWxlKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJ
RCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdp
c3RlcklEIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewot
ICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRj
aEdQUiwgQWRkcmVzcyhhcnJheVByb2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0
U2VlblN0cnVjdHVyZUlEKCkpKTsKLSAgICB9CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxl
KCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BS
LCBzY3JhdGNoR1BSKTsKIH0KIAogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCkBAIC0zODAsNyArNDEwLDcgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7
CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUo
VHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTI2LDcg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQog
ewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlz
S25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTM2LDcg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBS
ZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcp
KSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpA
QCAtNTE0LDExICs1NDQsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFu
dEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50
KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU2
OSwxNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNT
RVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRl
eCBpcyBzZXQuCiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFs
dWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZSkpLCBkc3QpOwotICAgICAgICBlbHNlCisgICAgICAgIHN3aXRjaCAobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkgewor
ICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAgICAg
Y2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAg
ICAgICAgICBtb3ZlKEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxv
YWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01NjYsMTEgKzU5Nyw2IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXND
b25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9y
KGRzdCkpOwpAQCAtNTk1LDcgKzYyMSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd0Nhc2UKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBp
ZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxs
KHZSZWcpKQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApA
QCAtNjM3LDMwICs2NjMsNyBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29u
c3QgCiB7CiAgICAgaWYgKHRhcmdldCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1
cm4gbV9jb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1B
TFdBWVNfSU5MSU5FIEdldFB1dEluZm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29w
ZSBieXRlY29kZSkKLXsKLSAgICB1bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQg
KyAxOyAvLyBIYXNoTWFwIGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRv
ciA9IG1fY29waWVkR2V0UHV0SW5mb3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBt
X2NvcGllZEdldFB1dEluZm9zLmVuZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVy
YXRvci0+dmFsdWUpOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2dldFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5h
ZGQoa2V5LCBnZXRQdXRJbmZvLm9wZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0
aFByb2ZpbGUgSklUOjpjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0g
ICAgdWludDY0X3Qga2V5ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2Rl
SUQpICsgMSkgPDwgMzIgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0
YUlEKTsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5
KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAg
ICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0
aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
Ci0gICAgbV9jb3BpZWRBcml0aFByb2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAg
cmV0dXJuIGFyaXRoUHJvZmlsZTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0
T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgpAQCAtNjgxLDYgKzY4NCw2MSBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1v
ZGU8T3BQCiAgICAgcmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRh
ZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1
bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2Rl
QmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNl
dCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3Mo
c19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1l
dGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVz
dWx0KQoreworICAgIGxvYWQ4KEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVC
bG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0
KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUg
Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKFZhbHVl
VHlwZSB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQorewor
ICAgIHN0b3JlOCh2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJs
b2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQp
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6c3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVzcyhzX21l
dGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRh
dGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5
dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJl
c3VsdCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHNfbWV0
YWRhdGFHUFIsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25z
dGFudChKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1
bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KGNvbnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2Fk
Q29uc3RhbnQobV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25z
dGFudCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0Nv
bnN0YW50KCkpOworICAgIC8vIE9PUFM6IE1heWJlIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudD8K
KyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3Rh
bnRzVmVjdG9yQnVmZmVyKCkpLCByZXN1bHQpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlc3VsdCwg
Y29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2YoSlNWYWx1ZSkpLCByZXN1bHQpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
YXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpjYWxs
RnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JD
YXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlv
bklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC05OTcsNyArOTk3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogCiAgICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9z
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRj
aFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRj
aFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5s
aW5rZWRUYWJsZSk7CiAKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9jaGFyKGNvbnN0IEluc3QKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0
Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3Qg
VW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwg
bV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rlcikp
OwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0x
MDQyLDcgKzEwNDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IElu
CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJh
Y2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmlu
Z0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJ
bmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1f
Ynl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAg
ICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw2ICs0Myw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVk
ZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIu
aCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTQsMTEgKzU2
LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3Rh
bnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50
KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3Jl
NjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkp
OwotICAgICAgICBlbHNlCisgICAgICAgIC8vIE9PUFM6IG1vc3QgIk90aGVyIiBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24gY29uc3RhbnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQgZnJvbSB0aGUgVW5s
aW5rZWRDb2RlQmxvY2suIEl0J3MganVzdAorICAgICAgICAvLyBhIGNvdXBsZSB0eXBlcyB0aGF0
IGNhbid0LiBDcmVhdGUgYW4gYWJzdHJhY3Rpb24gZm9yIHRoYXQuCisKKyAgICAgICAgc3dpdGNo
IChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihz
cmMpKSB7CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgor
ICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKICAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFk
ZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDApOwor
ICAgICAgICAgICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODcsMzcg
KzEwMCwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFs
bG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9
IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25j
dXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JG
b3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9
IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0
ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSBy
ZWdUMzsKIAotICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OwotICAgIGVsc2UgewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8g
YnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRl
SlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFs
bG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hS
ZWcsIHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1
bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5j
ZSgqbV92bSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFs
bG9jYXRvcigpLCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVj
dHVyZVJlZyk7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkg
PSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3Vs
dFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJl
ZywgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Mo
c3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNo
UmVnKTsKKyAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNo
UmVnKTsKKyAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVS
ZWcgPSByZWdUMzsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwog
ICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTEzMSw3ICsx
NDIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKICAgICAvLyBX
ZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8u
Ci0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9u
UHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QxKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90
RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmpl
Y3QsIG1fZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24pKSk7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CiAKQEAgLTE1NCwzMCAr
MTY2LDM4IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3Bl
cmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lz
dGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBk
b25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3Vs
dC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvdG9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
SW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywg
cHJvdG9HUFIpOwogICAgIAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNl
VmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9y
IFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3Rv
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJ
VEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAg
cmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVnVDQpOyAv
LyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgICAgIHJlc3VsdEdQUiwKKyAgICAgICAgdmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BS
LAorICAgICAgICBzdHViSW5mb0dQUiwKKyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjpzY3JhdGNoMSwgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisK
KyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0
YW5jZU9mOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdl
bik7Ci0gICAgCisKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5
MiwxNCArMjEyLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkK
ICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFu
Y2VPZk9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShv
cGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MiwgcmVnVDEpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJ
bmZvID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnZhbHVlID09IGFyZ3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChC
YXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3Bl
cmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBy
ZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudEdQUjMpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5z
dHJ1Y3Rpb24qKQpAQCAtMjQwLDcgKzI1OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9p
c191bmRlZmluZWQoY28KIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQ
dHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwogCkBAIC0zNzQsNyArMzkzLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lz
dGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAg
ICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwogI2Vsc2UKQEAgLTM4Myw5ICs0
MDIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiB9CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3Io
Vk0mKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBq
aXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZl
UmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQzMCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3By
aW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVy
dHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQsOSAr
NDUyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZvaWQg
SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0
aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlv
biwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
bmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
b3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0ODQs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5j
aElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsK
ICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNGYWxz
ZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzUwMSw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyArNTQw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8vIEZp
cnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBi
aXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJn
ZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7
CiAKQEAgLTU0Myw3ICs1NjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3Qg
SW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRh
cmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTU4MiwxNSAr
NjAzLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KIHZvaWQg
SklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVx
UHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEpT
VmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVj
aWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4
KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICBsb2FkQ29kZUJs
b2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAgIENDYWxs
SGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNvZGUsIE9wSm5lcVB0cjo6
TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOwogICAgIGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC02MjUsOCArNjQ0LDEwIEBAIHZvaWQg
SklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGds
b2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0
R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVl
KSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTY0MCw3ICs2NjEsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNjk1LDcgKzcxNiw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAgICAganVt
cFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTcxMSw3ICs3MzMsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3Bf
dGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSBhcmd1bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB0aHJvd25WYWx1ZUdQUiA9
IGFyZ3VtZW50R1BSMTsKQEAgLTcyMCw3ICs3NDIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVS
UyA+IDAKICAgICBqaXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgYXJndW1lbnRHUFIwKTsK
LSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBs
KGFyZ3VtZW50R1BSMCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKGFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwpAQCAtOTA4LDcgKzkzMCw4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQog
CkBAIC05MTgsNyArOTQxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29u
c3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0
cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MzEsNyArOTU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk3NSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsK
ICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdFZSZWcpOwogfQpAQCAtOTc4LDcgKzEwMDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
b19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAg
IGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0VlJlZyk7CiB9CkBAIC05OTMsNyArMTAxNywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRj
aChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJh
bWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRj
aE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gT09QUzog
VGhpcyBpc24ndCBlbGVnYW50LiBXaHkgYXJlbid0IHRoZXkgaW4gdGhlIGNhbGxlZSBzYXZlIGJ1
ZmZlci4gSSBndWVzcyBiZWNhdXNlIHdlIGNhbiBPU1IgZXhpdCBoZXJlPworICAgIGVtaXRNYXRl
cmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKICAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9u
SWZDYXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzgsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3Vt
ZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVm
ZmVyOwotICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNo
LCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFu
ZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5k
VmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRv
IHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBF
eGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAg
ICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXIt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsK
LSAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUp
LCByZWdzKTsKLSAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQog
fQogCkBAIC0xMDUzLDggKzEwNjgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNv
bnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2Ny
dXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlv
bnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2st
PnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJs
ZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5NiwxNCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRj
aEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVj
b3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVj
b3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtl
ZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBl
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJs
ZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25L
ZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRU
YWJsZS5tX21pbik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcp
OwogfQogCkBAIC0xMDk5LDIwICsxMTE1LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9z
dHJpbmcoY29uc3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUu
bV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3Rp
bmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91
bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
dGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6
OlN0cmluZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRl
eCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1
Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBK
dW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0
ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhp
cyk7CkBAIC0xMTMzLDcgKzExNTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0
IEluc3RydWN0CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKQEAgLTExNDgsNyArMTE2Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29u
c3QgSW5zdHJ1Y3QKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xMTY2LDcgKzExODMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0
cnVjCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFs
LCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAo
KTsKQEAgLTExODgsMTIgKzEyMDUsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBp
bml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9p
bnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBs
aWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBt
X2NvZGVCbG9jay0+bnVtVmFycygpOworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPm51bVZhcnMoKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9y
IChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rl
cih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1f
Y29kZUJsb2NrKTsKKyAgICAKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAg
ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCkBAIC0xMjEyLDcgKzEyMzEsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2go
WDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMTMxMCwyMyArMTMyOSwxOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNh
Y2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0
cnVjdHVyZUlELCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRv
VGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVh
dGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJy
aWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxl
ZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFy
ZURhdGFSZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAt
MTM0Miw3ICsxMzU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5z
dAogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVX
aXRoUHJvdG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFU
YWcpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVu
Y3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNo
ZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wQ3JlYXRlVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkQ2FsbGVlKCks
IGNhY2hlZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBi
cmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6
c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRy
KE5vdEVxdWFsLCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11
bHRpcGxlQ2FsbGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzg3LDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJl
Z1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFs
dWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzk4LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgx
KSwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDExLDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQyMiw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVn
VDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzNywxMSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihjb25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIzKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CiB9CkBAIC0xNDMwLDcgKzE0NTAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2st
Pmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5n
KCkgJiYgbV91bmxpbmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5n
RWFybHlSZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BI
aW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCBy
ZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3Bz
TGltaXQoKSkpOwpAQCAtMTQ0MCw3ICsxNDYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9o
aW50KGNvbnN0IEluc3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZgotICAgICAgICBtb3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsx
NDczLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAg
Ly8gRW1pdCB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1p
emVkKCkpIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVP
clplcm8sIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9y
TG9vcCgpKSwKLSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVz
c09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAt
MTUwOSw3ICsxNTMwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0
IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywg
YXJndW1lbnRHUFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1MjIsNyArMTU0NCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9jaGVja190cmFw
c19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3Rl
cnM6OmVicCk7CkBAIC0xNTY0LDM0ICsxNTg2LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19y
ZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQocmVnZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBhcmd1bWVudEdQUjA7
CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29k
ZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJl
dHVyblZhbHVlR1BSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1p
dE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBKdW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
LCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhl
YyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwor
ICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpGdW5jdGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3Rh
bnQsIGFyZ3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJ
RDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9w
X25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVj
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0
aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQog
CkBAIC0xNjIxLDIzICsxNjQ1LDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24o
Y29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3Vt
ZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBy
ZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BS
MSk7CiAjZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVC
bG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNv
bnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rp
b25FeHByLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNv
ZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVu
dEdQUjIpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYg
KG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5l
cmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdf
YXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBv
cF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9
CiB9CiAKQEAgLTE2NjQsMjkgKzE2ODksMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5j
X2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUu
bV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwg
c2l6ZSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIyKTsKKyAgICBt
YXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFk
YXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlf
d2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXpl
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRh
dGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2lu
dGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRh
KGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxs
b2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEs
IHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQ
cm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwK
LSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywg
cmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTQs
OCArMTcyMCw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBv
ZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHR5cGUgcHJvZmlsZXIgaXMgZW5hYmxl
ZC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVU
eXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0
YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBi
eXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTc3NywyMCArMTgwNCwyNCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgc3RhdGljX2Fz
c2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxs
IGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BS
UmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5v
bkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBH
UFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0
KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBi
ZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0g
cmVnVDI7CisgICAgICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFj
a2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIH0KICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1Qz
LCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOworICAgIGxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVn
VDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAK
ICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2Nv
bnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAg
IC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2Fj
aGluZyB3aGVuIHRoZSB1c2luZyB0aGUgY29udHJvbCBmbG93IHByb2ZpbGVyLgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZUNvbnRyb2xGbG93Pigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0
YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGJhc2ljQmxv
Y2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsKQEAgLTE4NjAsNyArMTg5MSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBtb3ZlVmFsdWUo
anNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJl
Z3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIApA
QCAtMTg4Niw3ICsxOTE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihj
b25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCks
IHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xv
d0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMu
aCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgpAQCAt
Mjg1NSw3ICsyODU2LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRj
aAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0
IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
Y29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NF
UlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9
PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdC5leGVj
dXRhYmxlQWRkcmVzcygpOwogCkBAIC0yODgwLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlm
IChrZXkuaXNJbnQzMigpKQpAQCAtMjkwMyw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZ0p1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJs
b2NrLT5iYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAogICAgIGlm
IChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5n
KGtleSktPnZhbHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFBy
aXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiks
IEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcp
OwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDkyICs0OSwxMDMgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3Nl
ZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRl
bnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2Zp
bGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1i
ZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0
ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsK
IAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAg
ICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRS
ZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICAgICAgLy8gT09QUy4gU3VwcG9ydCB0aGlzCisgICAg
ICAgIC8vaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAgICAgLy8gICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICAgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOwor
ICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dl
dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Y29kZVR5cGU+CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29k
ZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0
ZXIpKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKLSAgICAgICAgSklU
R2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsK
KyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXgrK107CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50
ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFy
cmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFy
Z3VtZW50R1BSNCk7CiAjZWxzZQotICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAg
ICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJ
bmRleCk7CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRl
eChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKIAotICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OwotICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OworICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0g
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFy
ZzEgYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQ
UiA9IGFyZ3VtZW50R1BSMjsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwotCi0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
LSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKLSAgICAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICAgICAg
Q2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25HZXRCeVZhbE9wdGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKTsKLSAgICAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgorICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
CisgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CisgICAg
c3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlID09IHJlZ1QwKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5ID09
IHJlZ1QxKTsKKworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0
YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCks
IHByb2ZpbGVHUFIpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKLSAgICB9CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQpAQCAtMTQ5LDcgKzE2MCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAg
ICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE2MCw4ICsxNzEsOCBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIg
PSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlz
QVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEp
OwogCkBAIC0xODcsMzQgKzE5OCw0MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9u
YW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdz
LCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwg
cmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIp
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZh
dGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yMjMsOSArMjQwLDExIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFk
YXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHBy
b3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
YXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTIzNSwyNiArMjU0LDIwIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNz
ZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19h
c3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFBy
aXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChv
cGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFs
dWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVl
R1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKQEAgLTI2NCw3ICsyNzcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2Jh
bE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAg
IC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2Jh
bE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50
YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0zMDAsMjEgKzMxMywyOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNv
ZGUubV9icmFuZDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBicmFu
ZEdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQ
UiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7Ci0KICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRB
Y2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKGJyYW5kR1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIAogICAg
IC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBz
aW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTMyNCwxNyArMzQ0LDIy
IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2
YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJl
bnRJbnN0cnVjdGlvbik7CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklU
UHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2Vz
W21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9
IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwog
I2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMzQ0LDI0ICszNjksMTggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQu
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5
cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVu
Y3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpB
cmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAg
ZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRP
cHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZgogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTM3MCwxOSArMzg5LDI4IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3By
aXZhdGVfYnJhbmQoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihicmFuZCwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwogCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nl
c3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBh
ZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiB9CiAKQEAg
LTM5NCw5ICs0MjIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJh
bgogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIs
IGJyYW5kR1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJn
dW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNr
UHJpdmF0ZUJyYW5kT3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC00MDYsMjQgKzQzNiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9i
cmFuCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIy
OyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0g
YXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2Ft
ZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGlt
aXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdl
dFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNr
UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC00MzUsMzAgKzQ1OSw0MiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVn
VDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHJlZ1QzKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJlZ1Q0KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQ
Uik7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9m
aWxlR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAKICAgICBK
SVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCk7Ci0gICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBwcm9maWxlR1BSLCBzdHViSW5mb0dQUik7
CisgICAgLy8gT09QUzoKKyAgICAvL2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkp
CisgICAgLy8gICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZh
bDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFs
RGlyZWN0PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHVi
SW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00
NzQsMTUgKzUxMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKLSAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8g
Ynl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKLSAgICAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAg
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChp
c0RpcmVjdCkKQEAgLTQ5OCw3ICs1MzEsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSQogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRo
ZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0
KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEsIHJlZ1QyLCBnZW4uc3R1YkluZm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQ
UjMpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFI0KTsKKyAgICBpZiAoaXNEaXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJl
Y3Q+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBhcmd1bWVudEdQUjUpOworICAgIGVsc2UKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZh
bDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVy
YXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RP
cHRpbWl6ZSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMywgYXJndW1lbnRHUFI0LCBhcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtNTEyLDcgKzU1NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVn
VDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0
X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICAgICBDYWxsIGNhbGw7CiAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9k
ZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSk7CkBAIC01MjMsNyArNTY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQpAQCAtNTMzLDE4ICs1NzUsMjQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSByZWdUNTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxl
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgeworICAgICAgICBSZWdpc3Rl
clNldCB1c2VkKEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5LCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZSwg
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZSk7CisgICAgICAgIEFTU0VSVCghdXNl
ZC5jb250YWlucyhyZWdUNCkpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDUp
KTsKKyAgICB9CisKIAogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQ
Uik7CkBAIC01NzAsMjAgKzYxOCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9u
YW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0
dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhy
ZWdUMiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcs
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmllbGRQ
dXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBz
dHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1f
cHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1
cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTk0LDggKzY1
Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVO
YW1lPigpOwotICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0
S2luZDsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgIEpJVFB1
dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAK
QEAgLTYwMywxMyArNjYxLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9u
YW1lKGMKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgYXV0byBv
cGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVBy
aXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRp
bWl6ZTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgLy8gVGhleSBhcmUgY29u
ZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7Ci0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBn
ZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKKyAgICBQcml2
YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1l
bnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVm
aW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3Bl
cmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgYXJndW1lbnRzR1BSMywgYXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxw
dHIpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjg0LDEy
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBD
YWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247
Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNjQzLDE0ICs2OTksMTQgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSByZWdUNDsKIApAQCAtNjgwLDcgKzczNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
ZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1Qx
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC02ODksNyArNzQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Nl
dHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRT
ZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02OTksNyArNzU3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0
ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVy
LCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBy
ZWdUMSwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRD
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1
dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MDksNyArNzY4
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMy
X3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTcxOSw3ICs3NzksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
c2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBh
dHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwg
YXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyNywyMyArNzg4LDMzIEBA
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6
OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxC
eUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBK
U1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRo
b3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVt
aXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJp
ZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNzU5LDE1ICs4MzAsMTcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZElu
ZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlk
T3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVz
dGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtNzgxLDI0ICs4NTQsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3Vt
ZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfaWRfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxl
dGVCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25EZWxldGVCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC04MDgsNyArODc2LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtODQ1
LDIyICs5MTMsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZv
R1BSLCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3Jp
dGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xv
YmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5NjIsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
ZWxldGVCeVZhbE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBhcmd1bWVudEdQUjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCArOTgwLDE5
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUu
bV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0
aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2Vy
dChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCkBAIC05MjYsNyArMTAwMiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0
aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcg
dG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
ICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTk2MSwyMiArMTAzNywzMSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQp
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0K
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEs
IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6VHJ5
R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpUcnlHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMu
YXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CiB9CiAKQEAgLTk4NiwxNCArMTA3MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDAzLDI2
ICsxMDkxLDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKICAg
ICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKSwgZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGlt
aXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAzMCwyMiArMTExMiwzMSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7
CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVn
VDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlw
ZTo6R2V0QnlJZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiArMTE0NSwxOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZERpcmVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJ
bmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwNzMsODMgKzExNjYsNjEgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50
R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FS
TTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1Yklu
Zm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7
CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJ
ZERpcmVjdE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZh
bHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5
X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVy
blZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVy
blZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2Ny
YXRjaDsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgSnVtcCBub3RB
cnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFk
YXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhf
dD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0
aE1vZGUuYXJyYXlQcm9maWxlLCByZWdUMSk7CisgICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0
QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlKCksIHNjcmF0Y2hHUFIpOworICAgICAgICBK
dW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSksIHNjcmF0Y2hH
UFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIE9w
R2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1l
dGFkYXRhQXJyYXlMZW5ndGg6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGJhc2VHUFIsIHNjcmF0
Y2hHUFIpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3Vs
dFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhp
cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBz
dHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlz
VlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcp
OworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwogCi0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQotICAgIEpJVEdldEJ5SWRX
aXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0
QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTExNTgsMTYgKzEyMjks
MTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
LCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3NywyNiArMTI1MCw1NyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQ
UiwgdGhpc1ZSZWcpOworCisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhp
c0dQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
KyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0x
MjA2LDcgKzEzMTAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVj
dCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERG
Ry9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVj
dHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1
cm5BZGRyZXNzKCk7CkBAIC0xMjQxLDE2ICsxMzQ1LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJ
VEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0
QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRo
aXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBh
cmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlz
VmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtMTI2MCwyOCArMTM2NywyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IHJl
Z1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhU
aGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VH
UFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodGhp
c0dQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
LCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKLSAgICBlbHNl
Ci0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjkxLDcgKzEzOTIs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQg
bWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFp
bGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlu
bGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1h
eSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7
CkBAIC0xMzI5LDIzICsxNDMwLDM3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25z
dCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAg
Ym9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICAvLyBJbiBvcmRl
ciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qg
b2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBh
cmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywg
YW5kIHdlIGdlbmVyYXRlIGNvZGUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9m
ZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaEdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCBiYXNlR1BSLCB2YWx1ZVZSZWcsIHZhbHVlR1BSKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAg
SklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDMsIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSks
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZh
bHVlR1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAg
ICAgICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OlB1dEJ5SWQ7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBkaXJlY3QgPyBQdXRL
aW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2Rl
ID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAgICAgCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMTM1OSwxNCArMTQ3
NCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAg
ICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJ
bmRleCsrXTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdmFsdWUsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbihnZW4u
c2xvd1BhdGhGdW5jdGlvbigpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMzc2LDI1ICsxNDk1LDE5
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYWxyZWFk
eSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fz
c2VydCh2YWx1ZUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IGdlbi5zbG93UGF0aEZ1bmN0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChnZW4uc2xvd1BhdGhGdW5jdGlvbigpKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTE0MDQsNyArMTUxNyw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE0NDEsMjAgKzE1NTQs
MzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BS
ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDEpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5f
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0NjMsMTQgKzE1ODcsMTcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTQ4MCwyOCArMTYw
NywyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVD
YWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRo
ZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZl
IGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVj
bHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xNTEwLDI1ICsxNjMxLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25z
dCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoYnl0ZWNvZGUsIGJhc2VHUFIsIEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7
CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
dHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpJbkJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMu
YXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0x
NTM3LDE1ICsxNjY2LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3Qg
SW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZh
bD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSklUSW5C
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBhcmd1bWVudEdQUjMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFy
Z3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUs
IGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRH
UFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
MTU1Niw1OSArMTY4OCw3MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0
IEluCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2Vy
dChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihw
cm9maWxlKSwgcHJvZmlsZUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVy
SW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV92YWxfcHJlcGFy
ZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywg
dGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdp
dmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxk
ZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRC
eVZhbE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNl
LCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOwogCi0gICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0
dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IHR5
cGU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0SGFz
UHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSB0eXBlKQordm9pZCBK
SVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0g
ICAgQVNTRVJUKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIFVOVVNFRF9QQVJBTShiYXNlKTsKKyAg
ICBVTlVTRURfUEFSQU0ocHJvcGVydHkpOworICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9
PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVCcmFuZCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxz
W21faW5CeVZhbEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1By
aXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQ
UjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7
CisgICAgY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8g
b3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFu
ZE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNjE4
LDI3ICsxNzYxLDIxIEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2kK
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eU9yQnJhbmRHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eU9yQnJhbmRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eU9yQnJhbmRHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShv
cGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Nh
bWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpLCBkZWNsdHlwZShv
cGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IHR5cGUgPT0gQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0
aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFz
UHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjUyLDcgKzE3ODksNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaGFzX3ByaXZhdGVfbmFtZShjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZU5h
bWU+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlTmFtZSk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0
LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fcHJvcGVydHksIEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVOYW1lKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfYnJhbmQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NjYsMTkgKzE4MDMsMjIg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEhhc1ByaXZhdGVCcmFuZD4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNv
ZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhhc1ByaXZh
dGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQs
IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5q
ZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0
VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIHNj
cmF0Y2hHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAg
cmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRk
cmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworCisgICAgbG9h
ZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQ
UiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9p
bnQpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVz
cyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1t
MzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewotICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgcmVnVDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsg
KytpKQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4
dCgpKSwgcmVnVDApOwpAQCAtMTY4OCw2ICsxODI4LDcgQEAgdm9pZCBKSVQ6OmVtaXRSZXNvbHZl
Q2xvc3VyZShWaXJ0dWFsUmVnaQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQg
SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwpAQCAtMTcwMSw3ICsxODQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVz
b2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2Nr
KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMSk7CiAgICAgICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwogICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJl
Z1QxKSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJl
Z1QwKTsKQEAgLTE3MTUsNyArMTg1Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6
OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7
CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Y29uc3RhbnRTY29wZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTc5NCw4NyArMTkzNSwxMDUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogdm9pZCBKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3Bl
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9y
ZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4
cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29w
ZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUg
Z2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVz
b2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwg
cmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAg
ICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVsc2UgewotICAg
ICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5
dGVjb2RlKTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZt
KSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmso
dm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7
CisgICAgICAgIH07CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5
cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBz
dGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAg
Rk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAgICBh
dXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2
bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5r
KHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNv
bHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7CiAgICAgICAgIH07
Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBhdXRvIGdlbmVyaWNS
ZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4g
SklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2Vs
aW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMiKTsKKyAgICAgICAgfTsKKworICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0
KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7
CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAg
ICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAg
ZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7CisgICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAg
ICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNj
b3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkg
dGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklU
IGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBP
cFJlc29sdmVTY29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQ
UiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSBy
ZWdUNjsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gcmVnVDU7IC8vIGluY29taW5nIC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4KICAgICBjb25z
dGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwogICAgIFVOVVNFRF9QQVJBTShi
eXRlY29kZU9mZnNldEdQUik7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcFJl
c29sdmVTY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAg
IGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIo
cmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5h
ZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0g
ICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CisgICAg
YXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgewogICAgICAgICBp
ZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgICAgIGds
b2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2Jq
ZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKICAgICAgICAgfQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkp
LCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNz
KHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJ
bnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RH
UFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBv
aW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFs
LCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0UmVzb2x2ZUNs
b3N1cmUgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgbW92
ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7Cisg
ICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBqaXQubW92ZShzY29wZUdQUiwgcmVnVDApOworICAgICAgICBqaXQubG9hZDMyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVw
dGgpKSwgcmVnVDEpOwogCi0gICAgICAgIExhYmVsIGxvb3AgPSBsYWJlbCgpOwotICAgICAgICBK
dW1wIGRvbmUgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOworICAgICAgICBMYWJlbCBsb29w
ID0gaml0LmxhYmVsKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVy
bywgcmVnVDEpOwogICAgICAgICB7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3AsIHRo
aXMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zm
c2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMSk7CisgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsK
ICAgICAgICAgfQotICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluaygm
aml0KTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUpIHsKQEAgLTE4ODIsMTIgKzIwNDEsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAg
ICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkuCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RH
UFIpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2xvYmFs
TGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9i
amVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAg
ICAgICAgICAgbW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmpl
Y3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdU
MSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4
aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKGdsb2Jh
bE9iamVjdEdQUiwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAt
MTg5NywxMSArMjA1NiwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBs
b2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAogICAgICAgICAg
ICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZpcm9u
bWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25t
ZW50KCkpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCBy
ZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1
cmVWYXI6CkBAIC0xOTA5LDcgKzIwNjgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6
CkBAIC0xOTE5LDgzICsyMDc4LDQ1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
cmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwot
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0g
ICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpy
ZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwot
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCBy
ZWdUMCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CisgICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKSB7CisgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlKTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgICAgICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7Cisg
ICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFs
TGV4aWNhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAotICAgIHJldCgpOworICAgIGpp
dC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVO
S19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5k
bGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0g
ICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VI
YW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9SRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6Om9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2
bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wUmVz
b2x2ZVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAg
ICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BSZXNvbHZl
U2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlXyIgI3Jl
c29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfUkVTT0xW
RV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9S
Ci0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3Jl
c29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0
ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxp
bmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
ICAgIC8vIFRoZSBmYXN0IHBhdGggYWxyZWFkeSBwdXNoZWQgdGhlIHJldHVybiBhZGRyZXNzLgog
I2lmIENQVShYODZfNjQpCkBAIC0yMDY1LDYgKzIxODYsNyBAQCB2b2lkIEpJVDo6ZW1pdEdldENs
b3N1cmVWYXIoVmlydHVhbFJlZ2lzCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKKyAgICAvLyBPT1BTCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMjE3OCw3ICsyMzAwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQpAQCAtMjE4Niw5ICsyMzA4LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBhcmd1bWVudEdQUjAs
IGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKICNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQpAQCAtMjE5Niw0MSArMjMxOCw1MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29k
ZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlw
ZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5y
ZXNvbHZlVHlwZSgpOwogCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0
ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NF
UlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50
SW5zdHJ1Y3Rpb24pOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlv
bkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKworICAgIGF1dG8g
Y2xvc3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6
Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9w
X2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0byBjbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAg
ICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9z
dXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRv
ciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21T
Y29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUg
Z2VuZXJpYyIpOworICAgIH07CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0g
cmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAotICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxWYXIpIHsKLSAgICAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0gICAgICAg
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHJlZ1QwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZz
ZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAg
cHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0jZGVmaW5lIEdFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlw
ZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJh
dG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKEdFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUikKLSAgICAgICAgfTsKLSN1bmRlZiBHRVRfRlJPTV9TQ09QRV9HRU5FUkFU
T1IKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwotICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAg
ICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVU
eXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICB9CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVW
YXJHZW5lcmF0b3IpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHVi
KGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICBlbHNlCisg
ICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3Ip
OworCisgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlz
IGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVj
YXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KQEAgLTIy
MzksOTkgKzIzNzAsODggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcEdl
dEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAg
IENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxl
KCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFi
bGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAg
ICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hl
Y2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJfdCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNl
dCkgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0
dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBhdXRv
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIpIHsKKyAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgcmVnVDEpOworICAgICAgICBqaXQubW92ZShz
Y29wZUdQUiwgcmVnVDApOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQ
dHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1
Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CiAgICAgfTsKIAotICAgIGF1dG8gZW1pdFZhckluamVj
dGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgYXV0
byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRj
aHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWws
IEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwor
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9i
YWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2lu
dFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAg
ICAgfTsKICAgICAKLSAgICBhdXRvIGVtaXRHZXRWYXJGcm9tUG9pbnRlciA9IFsmXSAoaW50MzJf
dCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07
Ci0KLSAgICBhdXRvIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyID0gWyZdIChpbnQzMl90
IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsK
LQogICAgIGF1dG8gZW1pdEdldENsb3N1cmVWYXIgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgR1BS
UmVnIG9wZXJhbmRHUFIpIHsKICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9m
KFJlZ2lzdGVyKSk7Ci0gICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQ
Uik7Ci0gICAgICAgIGFkZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LmxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwg
b3BlcmFuZEdQUik7CisgICAgICAgIGppdC5hZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwor
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOwogICAgIH07CiAKLSAgICBhdXRvIGVt
aXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKSB7CisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVH
UFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9zdHJ1Y3R1cmUpKTsgLy8gU3RydWN0dXJl
IGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVy
ZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29s
dmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAg
ICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUik7IC8vIFN0cnVjdHVyZSBj
aGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVz
IGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZl
X3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAgICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSByZWdUMDsKICAgICAgICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG9m
ZnNldCA9IHJlZ1QxOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gcmVn
VDI7CiAKLSAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZd
ICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgcmVnVDMpOworICAg
ICAgICAgICAgaml0LmppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+
IEp1bXAgeworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gaml0LmJyYW5jaFB0cihFcXVhbCwgYmFzZSwgcmVnVDMp
OwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIG9mZnNldCk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zm
c2V0T2ZPcGVyYW5kKCkpLCBvZmZzZXQpOwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVE
KSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJU
aGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsK
LSAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUp
OwotICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CisgICAgICAgICAgICAg
ICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9m
ZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAg
ICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CisgICAgICAg
ICAgICAgICAgaXNPdXRPZkxpbmUubGluaygmaml0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0
ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4
KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7
CisgICAgICAgICAgICBqaXQubmVnMzIob2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5zaWduRXh0
ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZDY0KEJhc2VJ
bmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAt
IDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxW
YXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5k
KQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQo
KSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKHJlZ1QwLCByZWdUMCk7CiAgICAg
ICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNr
LgotICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QwKSk7
CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHJlZ1Qw
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAg
ICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7
Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0T2ZP
cGVyYW5kKCkpLCByZWdUMyk7CiAgICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZUdQ
UiwgcmVnVDMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAg
ICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVz
b2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTIzNDEsODYgKzI0
NjEsNjMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAg
ICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJl
Z1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
cmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihy
ZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6
IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0g
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAg
aWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsK
ICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDAp
OwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSksIHJlZ1QwKTsKKyAgICAgICAg
aml0LmFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8g
TG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
LmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gaml0LmJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAg
ICAgICBub3RHbG9iYWxWYXIubGluaygmaml0KTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb24gPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5s
aW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGppdC5icmFuY2gz
MihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CisgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluaygmaml0KTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5q
dW1wKCkpOworICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmso
JmppdCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGppdC5i
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsoJmpp
dCk7CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBU
b0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAogICAgIHN0YXRpY19hc3NlcnQoVmFsdWVQcm9maWxl
OjpudW1iZXJPZkJ1Y2tldHMgPT0gMSk7Ci0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0
LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlBy
b2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAKLSAgICBy
ZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlz
LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRv
IHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3Bl
R2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25M
YWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlv
bkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9H
RVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBl
IyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRo
dW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICBy
ZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQu
Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dl
dF9mcm9tX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVf
VFlQRShERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9HRVRf
RlJPTV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAg
IC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdp
dGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVn
aXN0ZXJzOjplYnApOwpAQCAtMjQ0OSw3ICsyNTQ2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgIENhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0
aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0LmVtaXROb25QYXRjaGFi
bGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhH
UFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3By
b2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVy
VGFnUmVnaXN0ZXIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6
b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKIAogI2lmIENQVShY
ODZfNjQpCkBAIC0yNDcxLDg2ICsyNTY4LDc5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
dm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAg
c3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RX
YXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBs
b2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVn
VDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5
V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8o
Ynl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0
cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGVtaXRD
b2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JP
cGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgp
OworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsK
ICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
ewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVy
ZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2Ug
ZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3Qu
IEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFy
IGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGlu
amVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQg
dGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9z
Y29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAg
IGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9m
ZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQ
dHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1
Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1
bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAg
ICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNs
b3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCks
IHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0
cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVn
VDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIC8vIE9PUFM6IHdvdWxkIGJlIG5pY2Ug
dG8gaGF2ZSBhIHZlcnNpb24gdGhhdCB0b29rIEdQUlJlZ3MgaW5zdGVhZCBvZiBWUnMKKyAgICAg
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoK
ICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUg
PSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVC
bG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUp
OwotICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6
YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVz
b2x2ZVR5cGUsIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsK
KworICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5m
by5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJl
IGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tz
IHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQp
Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGly
ZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxl
SW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRT
bG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0
V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisK
KyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAgICBl
bWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwg
QWRkcmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNlIHRv
IGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3IgdmFsdWUuCisgICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1
dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hw
b2ludFNldCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0
Y2hwb2ludFNldCgpLCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIp
OworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0
KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZp
cm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBX
b3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3Igb3du
ZXIvdmFsdWUuCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxl
VmFyOgpAQCAtMjU2NCw1OCArMjY1NCw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlw
ZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVz
b2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5j
aDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1
bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1w
dCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0K
LSAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2Rl
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxp
bmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAg
IHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9z
dXJlVmFyLyBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29t
cGlsZSB0aGluZ3MKKyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdl
J3ZlIHByb3ZlbiB0aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3Vy
ZVZhciwKKyAgICAvLyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3Jl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZh
cgorICAgIC8vIGlmIHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElm
IGl0IGlzIGZpcmVkLCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAor
ICAgIC8vIG1hdHRlciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9m
aWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVW
YXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJl
VmFyKQorICAgICAgICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYg
KHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
CisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAg
ICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1l
dGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCBy
ZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyks
IHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0ds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
UHJvcGVydHkpKTsKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGlu
ayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAg
ICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKIAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxW
YXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2Jh
bFZhci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXIubGluayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0g
ICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjYyNCwxOCArMjcwOCwyMSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
VG9TY29wZT4oKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dElu
Zm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVs
ZVZhcikgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsK
KyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8g
SWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQg
Q29kZUJsb2NrcyBhcmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVW
YXIuCiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudElu
c3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlf
d3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFy
Z3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9m
ZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAg
ICAgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29k
ZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3ICsy
NzM5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8v
IGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcg
YXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1h
eSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGlj
aCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBq
aXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNzAxLDcgKzI3ODgsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwg
RGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKIH0KIApAQCAtMjc1OSw3ICsyODQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIo
SlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CkBAIC0yNzY3LDcgKzI4NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmll
bGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9m
SW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjgy
Myw3ICsyOTA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0bwog
dm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2Rl
OwpAQCAtMjgzOSwxMSArMjkyNCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25l
eHQoY29uc3QgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMg
dGhlIG1vc3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2Ug
aXQgaWYgd2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51
bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJl
TW9kZSkgeworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5t
X2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVj
dHVyZU1vZGUpIHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMu
YXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigofkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgJiBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spKSk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRh
ZGF0YSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6
Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKKwogICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFN0cnVjdHVyZUlET2Zmc2V0KCkpLCBpbmRleEdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2Vz
LmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwogCkBAIC0yODgxLDc4ICsyOTcyLDg3IEBAIHZv
aWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0X29w
X2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51
bWVyYXRvckdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5h
bWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CiAK
LSAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVF
bnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gyID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJl
Z2lzdGVyczo6c2NyYXRjaDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
b2RlLCBzY3JhdGNoMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUs
IHByb3BlcnR5R1BSKTsKIAotICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0
YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFk
YXRhKCksIHNjcmF0Y2gyKTsKKyAgICBvcjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7CisgICAgc3Rv
cmU4VG9NZXRhZGF0YShzY3JhdGNoMiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwoYmFzZUdQUikpOwogICAgIC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQgdmFs
dWUuCi0gICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRN
b2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgIEp1bXAg
aXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHNjcmF0Y2gzLCBU
cnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKIAogICAgIC8vIENoZWNrIHRoZSBz
dHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsK
LSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDMpOwotICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3Ry
dWN0dXJlSURPZmZzZXQoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgc2NyYXRjaDEpOworICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0g
YnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKIAogICAgIC8vIENv
bXB1dGUgdGhlIG9mZnNldC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdU
Myk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgc2NyYXRjaDIpOwogICAgIC8v
IElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3Rv
cmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2Vz
cyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVn
VDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7Ci0gICAgbG9hZDY0KEJh
c2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwotCisgICAgSnVt
cCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBBZGRy
ZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIp
OworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIEpT
T2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNh
c2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUK
ICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRy
ZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbmVnMzIocmVnVDMpOwotICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHJlZ1QzLCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2VHUFIpOworICAgIHN1YjMyKEFkZHJlc3Moc2NyYXRj
aDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSksIHNjcmF0Y2gyKTsKKyAgICBuZWczMihzY3JhdGNoMik7CisgICAgc2lnbkV4dGVuZDMyVG9Q
dHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKICAgICBjb25zdGV4cHIgaW50cHRyX3Qgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5ID0gb2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpICog
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVy
dHkpLCByZXN1bHRHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIs
IFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CiAgICAgZG9u
ZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgc3RydWN0dXJlTWlzbWF0Y2gubGluayh0aGlz
KTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFz
U2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2VudW1l
cmF0b3JNZXRhZGF0YSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21h
dGNoKSwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZF
bnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBpc05vdE93blN0cnVjdHVyZU1vZGUubGluayh0
aGlzKTsKLSAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwg
VHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKKyAg
ICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBzY3JhdGNoMywgVHJ1c3Rl
ZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKICAgICAvLyBS
ZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbmRleCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHBy
b3BlcnR5R1BSKTsKIAogICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaDEpOwog
CiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVnVDIpOwotICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0
QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5NjEsMTAg
KzMwNjEsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfCiAgICAg
Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yR2V0QnlWYWw+KCksIGl0ZXIpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlw
ZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9lbnVtZXJh
dG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVy
YWxDYXNlKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBTbG93UGF0aEZ1
bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQogewotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcjsKQEAgLTI5NzMsNyArMzA3Miw5IEBAIHZvaWQgSklUOjplbWl0X2VudW1l
cmF0b3JfaGFzX3Byb3BlcnR5SW0KICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QwKTsKLSAgICBvcjgocmVnVDAsIEFic29sdXRl
QWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21N
ZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JN
ZXRhZGF0YSgpLCByZWdUMSk7CisgICAgb3IzMihyZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRv
TWV0YWRhdGEocmVnVDEsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51
bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIo
WmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0
cnVjdHVyZU1vZGUpKSk7CiAKQEAgLTMwNjIsNiArMzE2MywxMyBAQCB2b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcihKU0NlbGwqIG93bmVyCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5s
aW5rKHRoaXMpOwogfQogCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIp
Cit7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2
bSgpLCBvd25lciwgc2VsZWN0U2NyYXRjaEdQUihvd25lcikpOworICAgIGNhbGxPcGVyYXRpb25O
b0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3du
ZXIpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUyLDcgKzE1
NTIsNyBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAKIHZvaWQg
dW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIGRh
dGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQg
IiwgY2FsbExpbmtJbmZvLmZhc3RQYXRoU3RhcnQoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2lu
dGVyKCZjYWxsTGlua0luZm8pKTsKICAgICAKICAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0lu
Zm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaCIK
ICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVT
dGF0ZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25T
bG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckhh
bmRsaW5nU2NvcGUuaCIKQEAgLTM3MCw2ICszNzEsMTUgQEAgaW5saW5lIGJvb2wgaml0Q29tcGls
ZUFuZFNldEhldXJpc3RpY3MoVgogICAgIAogICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsVmFsdWVQ
cm9maWxlUHJlZGljdGlvbnMoKTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBK
SVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklUQ29k
ZT4gYmFzZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5r
ZWRCYXNlbGluZUNvZGUpIHsKKyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJTaGFyZWQgdmlhIExM
SW50Iik7CisgICAgICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVD
b2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29kZUJsb2Nr
LT5qaXROZXh0SW52b2NhdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICB9CisKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNo
ZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5SklU
Q29tcGlsZSIsICgidGhyZXNob2xkIG5vdCByZWFjaGVkLCBjb3VudGVyID0gIiwgY29kZUJsb2Nr
LT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6
dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJlIGxpZnRlZC4iKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpA
QCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9w
Sm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3Bl
cmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVT
dHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAg
ICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBl
LCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEsIHQy
KQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRbY2Zy
LCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8gcHJl
T3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGluIHQx
LCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAgICAg
ICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVB
cml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAgICBkaXNw
YXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRp
c3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxl
KHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9m
aWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1ldGFk
YXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BOZWdh
dGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAg
bmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBk
YXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQzKQog
ICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJpYSB0
MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQotICAg
IHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlB
cml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAgIHJl
dHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAgZW5k
KQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwg
aW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAg
ZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMsIHQyKQog
ICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmluYXJ5
T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcsIC5v
cDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0gICAgICAg
IGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAg
ICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDMs
IHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsxMTI0
LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAg
YmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAub3Ax
Tm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAgICAg
ICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmlu
YXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwg
dDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQog
ICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0gICAg
ICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJl
ciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MSkK
ICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVyYW5k
IGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBu
b3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFnLCAu
c2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAg
ICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRO
dW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0MSwg
dDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEsMTMgQEAg
bWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSBQQywgYTEK
ICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBidHB6IHIw
LCAucmVjb3ZlcgotCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisgICAgICAgICAgICAjIEJh
c2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFudCBwb29s
LgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgICAgICAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxv
Y2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwogICAgICAgICAgICAgaWYg
QVJNNjRFCiAgICAgICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpv
ZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6Omxvb3BPU1JFbnRyeSkg
KiBQdHJTaXplLCBhMgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQ
dHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0RXF1YWxp
dHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBv
cGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBl
KQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQKLQog
ICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQx
CiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3MCw3IEBAIG1hY3JvIHBy
ZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJhdGlv
bih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3JlcSB0
MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJ
bnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQ
cm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAt
MTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0
ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBl
LCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6
Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikKQEAg
LTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVn
YXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQz
CiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9m
aWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2Zp
bGVJbnQsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAgYnRx
eiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAwMDAw
MDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1
cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0MSwg
dDIpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE2MCw2
IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGludE9w
V2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQw
KQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAl
b3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3JocywgdDApCiAg
ICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6
ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9y
ZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2Vy
T3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmlsZShB
cml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBkaXNwYXRjaCgp
CiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBAQCBtYWNybyBiaW5hcnlP
cEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywg
LnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQot
ICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVy
LCB0NSwgdDIpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3Ay
SW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50
LCB0NSwgdDIpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6CiAg
ICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA0LDkgKzExOTYsOSBAQCBtYWNybyBiaW5hcnlP
cEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAKICAgICAub3AyTm90SW50OgogICAgICAgICAj
IEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5p
dGVseSBub3QuCi0gICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJl
clRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAg
ICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUlu
dE51bWJlciwgdDUsIHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBjaTJkcyB0
MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEK
QEAgLTE1MTgsNyArMTUxMCw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X2lkX2Rp
cmVjdCwKIGVuZCkKIAogIyBUaGUgYmFzZSBvYmplY3QgaXMgZXhwZWN0ZWQgaW4gdDMKLW1hY3Jv
IHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwgbW9kZU1ldGFkYXRhTmFtZSwgdmFs
dWVQcm9maWxlTmFtZSwgc2xvd0xhYmVsLCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuKQorbWFjcm8g
cGVyZm9ybUdldEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LCBtb2RlTWV0YWRhdGFOYW1lLCB2YWx1
ZVByb2ZpbGVOYW1lLCBzbG93TGFiZWwsIHNpemUsIG1ldGFkYXRhLCByZXR1cm4sIGRvQXJyYXlQ
cm9maWxlKQogICAgIG1ldGFkYXRhKHQyLCB0MSkKICAgICBsb2FkYiAlb3Bjb2RlU3RydWN0JTo6
TWV0YWRhdGE6OiVtb2RlTWV0YWRhdGFOYW1lJS5tb2RlW3QyXSwgdDEKIApAQCAtMTU0Niw3ICsx
NTM4LDcgQEAgbWFjcm8gcGVyZm9ybUdldEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LAogLm9wR2V0
QnlJZEFycmF5TGVuZ3RoOgogICAgIGJibmVxIHQxLCBjb25zdGV4cHIgR2V0QnlJZE1vZGU6OkFy
cmF5TGVuZ3RoLCAub3BHZXRCeUlkVW5zZXQKICAgICBtb3ZlIHQzLCB0MAotICAgIGFycmF5UHJv
ZmlsZSglb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6OiVtb2RlTWV0YWRhdGFOYW1lJS5hcnJheUxl
bmd0aE1vZGUuYXJyYXlQcm9maWxlLCB0MCwgdDIsIHQ1KQorICAgIGRvQXJyYXlQcm9maWxlKHQw
LCB0MiwgdDUsIHQxKQogICAgIGJ0aXogdDAsIElzQXJyYXksIHNsb3dMYWJlbAogICAgIGJ0aXog
dDAsIEluZGV4aW5nU2hhcGVNYXNrLCBzbG93TGFiZWwKICAgICBsb2FkQ2FnZWRKU1ZhbHVlKEpT
T2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQwLCB0MSkKQEAgLTE1NjgsNyArMTU2MCwxMCBAQCBl
bmQKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X2lkLCBPcEdldEJ5SWQsIG1hY3JvIChz
aXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIGdldChtX2Jhc2UsIHQw
KQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxsKHNpemUsIHQwLCB0MywgLm9wR2V0QnlJ
ZFNsb3cpCi0gICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BHZXRCeUlkLCBtX21vZGVNZXRhZGF0
YSwgbV9wcm9maWxlLCAub3BHZXRCeUlkU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHJldHVybikKKyAg
ICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEdldEJ5SWQsIG1fbW9kZU1ldGFkYXRhLCBtX3Byb2Zp
bGUsIC5vcEdldEJ5SWRTbG93LCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuLAorICAgICAgICBtYWNy
byAoY2VsbEFuZEluZGV4aW5nVHlwZSwgbWV0YWRhdGEsIHNjcmF0Y2gxLCBzY3JhdGNoMikKKyAg
ICAgICAgICAgIGFycmF5UHJvZmlsZShPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptX2FycmF5UHJvZmls
ZSwgY2VsbEFuZEluZGV4aW5nVHlwZSwgbWV0YWRhdGEsIHNjcmF0Y2gxKQorICAgICAgICBlbmQp
CiAKIC5vcEdldEJ5SWRTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2dl
dF9ieV9pZCkKQEAgLTMwMDIsNyArMjk5Nyw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRl
cmF0b3Jfb3BlbiwgT3AKIAogICAgIGxvYWRWYXJpYWJsZShnZXQsIG1faXRlcmF0b3IsIHQzKQog
ICAgIGJ0cW56IHQzLCBub3RDZWxsTWFzaywgLml0ZXJhdG9yT3BlbkdlbmVyaWNHZXROZXh0U2xv
dwotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JPcGVuLCBtX21vZGVNZXRhZGF0
YSwgbV9uZXh0UHJvZmlsZSwgLml0ZXJhdG9yT3BlbkdlbmVyaWNHZXROZXh0U2xvdywgc2l6ZSwg
bWV0YWRhdGEsIHN0b3JlTmV4dEFuZERpc3BhdGNoKQorICAgIHBlcmZvcm1HZXRCeUlESGVscGVy
KE9wSXRlcmF0b3JPcGVuLCBtX21vZGVNZXRhZGF0YSwgbV9uZXh0UHJvZmlsZSwgLml0ZXJhdG9y
T3BlbkdlbmVyaWNHZXROZXh0U2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlTmV4dEFuZERpc3Bh
dGNoLCBtYWNybyhhLCBiLCBjLCBkKSBlbmQpCiAKIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4
dFNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9n
ZXRfbmV4dCkKQEAgLTMwNjEsNyArMzA1Niw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRl
cmF0b3JfbmV4dCwgT3AKIAogICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fdmFsdWUsIHQzKQogICAg
IGJ0cW56IHQzLCBub3RDZWxsTWFzaywgLmdldERvbmVTbG93Ci0gICAgcGVyZm9ybUdldEJ5SURI
ZWxwZXIoT3BJdGVyYXRvck5leHQsIG1fZG9uZU1vZGVNZXRhZGF0YSwgbV9kb25lUHJvZmlsZSwg
LmdldERvbmVTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1ZSkK
KyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV9kb25lTW9kZU1ldGFk
YXRhLCBtX2RvbmVQcm9maWxlLCAuZ2V0RG9uZVNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZURv
bmVBbmRKbXBUb0dldFZhbHVlLCBtYWNybyhhLCBiLCBjLCBkKSBlbmQpCiAKIC5nZXREb25lU2xv
dzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2dldF9k
b25lKQpAQCAtMzA4Niw3ICszMDgxLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRv
cl9uZXh0LCBPcAogICAgICMgUmVsb2FkIHRoZSBuZXh0IHJlc3VsdCB0bXAgc2luY2UgdGhlIGdl
dF9ieV9pZCBhYm92ZSBtYXkgaGF2ZSBjbG9iYmVyZWQgdDMuCiAgICAgbG9hZFZhcmlhYmxlKGdl
dCwgbV92YWx1ZSwgdDMpCiAgICAgIyBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBpdGVy
YXRvciByZXN1bHQgaXMgYSBjZWxsIGhlcmUgc2luY2Ugd2Ugd2lsbCBoYXZlIHRocm93biBhbiBl
cnJvciBiZWZvcmUuCi0gICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck5leHQsIG1f
dmFsdWVNb2RlTWV0YWRhdGEsIG1fdmFsdWVQcm9maWxlLCAuZ2V0VmFsdWVTbG93LCBzaXplLCBt
ZXRhZGF0YSwgc3RvcmVWYWx1ZUFuZERpc3BhdGNoKQorICAgIHBlcmZvcm1HZXRCeUlESGVscGVy
KE9wSXRlcmF0b3JOZXh0LCBtX3ZhbHVlTW9kZU1ldGFkYXRhLCBtX3ZhbHVlUHJvZmlsZSwgLmdl
dFZhbHVlU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlVmFsdWVBbmREaXNwYXRjaCwgbWFjcm8o
YSwgYiwgYywgZCkgZW5kKQogCiAuZ2V0VmFsdWVTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxp
bnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfZ2V0X3ZhbHVlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNp
b24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIwLDcgKzE0MjAsOCBAQCBlbmQKIAogbWFj
cm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlvbikKICAgICBsb2FkcCBDb2RlQmxv
Y2tbY2ZyXSwgdDAKLSAgICBiYWRkaXMgaW5jcmVtZW50LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVj
dXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNv
bnRpbnVlCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDBdLCB0
MAorICAgIGJhZGRpcyBpbmNyZW1lbnQsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3Vu
dGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgYWN0aW9uKCkKICAgICAuY29udGludWU6CiBlbmQKQEAg
LTE1MDMsNyArMTUwNCw4IEBAIG1hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJs
b2MKICAgICBjb2RlQmxvY2tHZXR0ZXIodDEpCiAgICAgY29kZUJsb2NrU2V0dGVyKHQxKQogICAg
IGlmIG5vdCAoQ19MT09QIG9yIENfTE9PUF9XSU4pCi0gICAgICAgIGJhZGRpcyA1LCBDb2RlQmxv
Y2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9j
b3VudGVyW3QxXSwgLmNvbnRpbnVlCisgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4
ZWN1dGVDb3VudGVyW3QxXSwgdDAKKyAgICAgICAgYmFkZGlzIDUsIEJhc2VsaW5lRXhlY3V0aW9u
Q291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgICAgIGlmIEpTVkFMVUU2NAog
ICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQpAQCAtMTYx
NywxNCArMTYxOSwxNCBAQCBtYWNybyBmdW5jdGlvbkluaXRpYWxpemF0aW9uKHByb2ZpbGVBcmdT
CiAgICAgIyBvcHRpbWFsIHdheSBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgbW9yZSB0aGFu
IGZpdmUgcmVnaXN0ZXJzIGF2YWlsYWJsZQogICAgICMgZm9yIGFyYml0cmFyeSB1c2UgaW4gdGhl
IGludGVycHJldGVyLgogICAgIGxvYWRpIENvZGVCbG9jazo6bV9udW1QYXJhbWV0ZXJzW3QxXSwg
dDAKLSAgICBhZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAgIyBVc2UgYWRkaSBiZWNhdXNlIHRoYXQn
cyB3aGF0IGhhcyB0aGUgcGVlcGhvbGUKKyAgICBhZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAKICAg
ICBhc3NlcnQobWFjcm8gKG9rKSBicGd0ZXEgdDAsIDAsIG9rIGVuZCkKICAgICBidHB6IHQwLCAu
YXJndW1lbnRQcm9maWxlRG9uZQogICAgIGxvYWRwIENvZGVCbG9jazo6bV9hcmd1bWVudFZhbHVl
UHJvZmlsZXMgKyBGaXhlZFZlY3Rvcjo6bV9zdG9yYWdlICsgUmVmQ291bnRlZEFycmF5OjptX2Rh
dGFbdDFdLCB0MwogICAgIGJ0cHogdDMsIC5hcmd1bWVudFByb2ZpbGVEb25lICMgV2hlbiB3ZSBj
YW4ndCBKSVQsIHdlIGRvbid0IGFsbG9jYXRlIGFueSBhcmd1bWVudCB2YWx1ZSBwcm9maWxlcy4K
ICAgICBtdWxwIHNpemVvZiBWYWx1ZVByb2ZpbGUsIHQwLCB0MiAjIEFhYWFhaGhoaCEgTmVlZCBz
dHJlbmd0aCByZWR1Y3Rpb24hCiAgICAgbHNoaWZ0cCAzLCB0MCAjIG9mZnNldCBvZiBsYXN0IEpT
VmFsdWUgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4KLSAgICBhZGRwIHQyLCB0MyAjIHBvaW50ZXIg
dG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBpbiBDb2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1
ZVByb2ZpbGVzLgorICAgIGFkZHAgdDIsIHQzICMgcG9pbnRlciB0byBlbmQgb2YgVmFsdWVQcm9m
aWxlIGFycmF5IGluIHRoZSB2YWx1ZSBwcm9maWxlIGFycmF5LgogLmFyZ3VtZW50UHJvZmlsZUxv
b3A6CiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIGxvYWRxIFRoaXNBcmd1bWVudE9mZnNldCAt
IDggKyBwcm9maWxlQXJnU2tpcCAqIDhbY2ZyLCB0MF0sIHQyCkBAIC0yNTYzLDYgKzI1NjUsMTcg
QEAgbWFjcm8gbm90U3VwcG9ydGVkKCkKICAgICBlbmQKIGVuZAogCisKK21hY3JvIHVwZGF0ZVVu
YXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAg
bG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0s
IHRlbXAKKyAgICBvcmggdHlwZSwgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5k
CisKK21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1l
dGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJvZmls
ZTo6bV9iaXRzW3RlbXBdCitlbmQKKwogLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGUg
WDg2XzY0X1dJTiBjb25kaXRpb24gaGVyZSwgc2luY2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFscmVh
ZHkgYmUgZmFsc2Ugb24gV2luZG93cwogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMzcxNgogaWYgV0VCQVNTRU1CTFkgYW5kIG5vdCBYODZfNjRfV0lOCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRp
Zmllci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDEwIEBA
IHB1YmxpYzoKICAgICBDYWNoZWFibGVJZGVudGlmaWVyKCkgPSBkZWZhdWx0OwogCiAgICAgc3Rh
dGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21DZWxsKEpTQ2VsbCogaWRl
bnRpZmllcik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVy
Jik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUg
Q2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
Q29kZUJsb2NrVHlwZSosIGNvbnN0IElkZW50aWZpZXImKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBVbmlx
dWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21SYXdCaXRzKHVpbnRw
dHJfdCByYXdCaXRzKSB7IHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHJhd0JpdHMpOyB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUg
Q2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZp
ZXImIGkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFi
bGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXIm
IGkpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhj
b2RlQmxvY2ssIGkuaW1wbCgpKTsKIH0KIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENv
ZGVCbG9jayogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQordGVtcGxhdGUgPHR5
cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJs
b2NrVHlwZSogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIEFTU0VS
VF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxvY2stPmhhc0lkZW50aWZpZXIodWlkKSk7CiAgICAg
cmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIodWlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhY2hl
ZFR5cGVzLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCdWls
dGluTmFtZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUNhY2hlRXJyb3IuaCIKICNpbmNsdWRlICJC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChz
bG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9m
aWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUg
cmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2Zp
bGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJv
ZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmco
b3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0lu
dCgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODks
NiArMjg5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0
T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUs
IG1fcmFyZURhdGEpOyB9CiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0
cmluZ0luUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNT
dHJpbmcpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tG
b3JDYWxsKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9j
b2RlQmxvY2tGb3JDYWxsKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9m
Q29kZUJsb2NrRm9yQ29uc3RydWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9u
RXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODUsNiArMzg1
LDkgQEAgc3RhdGljIHZvaWQgb3ZlcnJpZGVEZWZhdWx0cygpCiAgICAgICAgIE9wdGlvbnM6OnRo
cmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSA9IDE1MDA7CiAgICAgICAgIE9wdGlv
bnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpID0gMTAwOwogICAgIH0KKworICAgIC8v
IE9PUFMKKyAgICAvL09wdGlvbnM6Om1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2tw
b2ludHNGb3JCYXNlbGluZSgpID0gNDUwOwogfQogCiBzdGF0aWMgdm9pZCBjb3JyZWN0T3B0aW9u
cygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNiBAQCBib29sIGNhblVzZVdl
YkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoSW50MzIsIGV2YWxUaHJlc2hvbGRNdWx0aXBs
aWVyLCAxMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwgbWF4aW11bUV2YWxD
YWNoZWFibGVTb3VyY2VMZW5ndGgsIDI1NiwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAotICAg
IHYoQm9vbCwgcmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzLCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJbnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50
c0JldHdlZW5DaGVja3BvaW50c0ZvckJhc2VsaW5lLCAxMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9y
VXBwZXJUaWVycywgNTAwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKQEAgLTUzMiw2ICs1
MzEsNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoQm9vbCwg
dXNlRGF0YUlDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRh
SUNJbk9wdGltaXppbmdKSVQsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2ws
IHVzZURhdGFJQ1NoYXJpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2ws
IHVzZUJhc2VsaW5lSklUQ29kZVNoYXJpbmcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IFwKICAgICAvKiBGZWF0dXJlIEZsYWdzICovXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDkgKzM5NiwxMSBAQCB2b2lkIFNjcmlwdEV4ZWN1
dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpCiAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlQnl0ZWNv
ZGUoKSkKICAgICAgICAgY29kZUJsb2NrLT52YWxpZGF0ZSgpOwogCi0gICAgaWYgKE9wdGlvbnM6
OnVzZUxMSW50KCkpCisgICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVm
ID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2Rl
KSB7CisgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoYmFz
ZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfSBlbHNlIGlmIChPcHRpb25zOjp1c2VM
TEludCgpKSB7CiAgICAgICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKLSAgICBlbHNlCisgICAg
fSBlbHNlCiAgICAgICAgIHNldHVwSklUKHZtLCBjb2RlQmxvY2spOwogCiAgICAgaW5zdGFsbENv
ZGUodm0sIGNvZGVCbG9jaywgY29kZUJsb2NrLT5jb2RlVHlwZSgpLCBjb2RlQmxvY2stPnNwZWNp
YWxpemF0aW9uS2luZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21M
TEludFRpZXJVcENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNTIsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2Fy
bVVwKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9CQlEo
KSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFP
cHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNo
b2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRG
b3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7
CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgp
CkBAIC02NSw5ICs2NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplU29vbigpCiAgICAg
ewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAgICAg
ICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29u
KCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvckJCUU9wdGltaXplU29vbigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0
TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpLCBudWxs
cHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JP
TUdPcHRpbWl6ZVNvb24oKSk7CiAgICAgfQogCiAgICAgc3RydWN0IE9TUkVudHJ5RGF0YSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVy
VXBDb3VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogVGllclVwQ291bnQ6OlRpZXJVcENvdW50KCkKIHsKLSAg
ICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldh
cm1VcCgpLCBudWxscHRyKTsKKyAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xk
Rm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKIH0KIAogVGllclVwQ291bnQ6On5UaWVyVXBD
b3VudCgpID0gZGVmYXVsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
aWVyVXBDb3VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UaWVyVXBDb3VudC5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCks
IGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuIik7Ci0gICAg
ICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVy
V2FybVVwKCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhy
ZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNo
ZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKQEAgLTkwLDE0ICs5MCwxNCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCks
IGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi4iKTsKLSAg
ICAgICAgc2V0TmV3VGhyZXNob2xkKDAsIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hv
bGQoMCk7CiAgICAgfQogCiAgICAgdm9pZCBvcHRpbWl6ZVNvb24odWludDMyX3QgZnVuY3Rpb25J
bmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwg
ZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgc29vbi4iKTsKICAgICAgICAgLy8gRklY
TUU6IE5lZWQgYWRqdXN0bWVudCBvbmNlIHdlIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdh
c20gZnVuY3Rpb25zLgotICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xk
Rm9yT01HT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQo
T3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAogICAgIHZv
aWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgsIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNiArNjYsMjAgQEAgcHVibGljOgogICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOwog
ICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQmFnJiBvcGVyYXRvcj0oQmFn
PFQsIFU+JiYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodW53cmFwcGVkSGVhZCgpID09IG90
aGVyLnVud3JhcHBlZEhlYWQoKSkKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKworICAgICAg
ICBCYWcgZGVzdHJveTsKKyAgICAgICAgZGVzdHJveS5tX2hlYWQgPSB1bndyYXBwZWRIZWFkKCk7
CisgICAgICAgIG1faGVhZCA9IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgb3RoZXIu
bV9oZWFkID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCiAgICAg
fkJhZygpCiAgICAgewogICAgICAgICBjbGVhcigpOwpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4t
anNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3Ry
ZXNzLXRlc3RzCShyZXZpc2lvbiAyODI2NzUpCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3Ry
ZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC03NzYsMTcgKzc3NiwxOCBAQCBlbmQKIAogIyBG
SVhNRTogbmVlZCB0byBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxODcwMyB0byBlbmFibGUgdGhpcyBvbiBMaW51eC9NSVBTLgogZGVmIHJ1bkJ5dGVjb2RlQ2Fj
aGVJbXBsKG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucywgKmFkZGl0aW9uYWxFbnYpCi0gICAg
aWYgKCRob3N0T1MgPT0gImRhcndpbiIpCi0gICAgICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29k
ZS1jYWNoZSIKLSAgICBlbHNpZiAoJGhvc3RPUyA9PSAibGludXgiICYmICRhcmNoaXRlY3R1cmUg
IT0gIm1pcHMiKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhYWFgi
Ci0gICAgZWxzZQotICAgICAgICBza2lwCi0gICAgICAgIHJldHVybgotICAgIGVuZAorICAgICMg
T09QUworICAgICNpZiAoJGhvc3RPUyA9PSAiZGFyd2luIikKKyAgICAjICAgIGZpbGVUZW1wbGF0
ZSA9ICJieXRlY29kZS1jYWNoZSIKKyAgICAjZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAk
YXJjaGl0ZWN0dXJlICE9ICJtaXBzIikKKyAgICAjICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29k
ZS1jYWNoZVhYWFhYWCIKKyAgICAjZWxzZQorICAgICMgICAgc2tpcAorICAgICMgICAgcmV0dXJu
CisgICAgI2VuZAogCi0gICAgb3B0aW9ucyA9IEJBU0VfT1BUSU9OUyArIEZUTF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9u
cwotICAgIGFkZFJ1bkNvbW1hbmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxw
ZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRl
LnRvX3MsICp2bUNvbW1hbmQsICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRw
dXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQorICAgICNvcHRp
b25zID0gQkFTRV9PUFRJT05TICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMgKyAkdGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25zCisgICAgI2FkZFJ1bkNvbW1hbmQo
ImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxwZXJzICsgImJ5dGVjb2RlLWNhY2hl
LXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRlLnRvX3MsICp2bUNvbW1hbmQsICRi
ZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJv
ckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQogZW5kCiAKIGRlZiBydW5CeXRlY29kZUNhY2hlKCpv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438629</attachid>
            <date>2021-09-19 19:22:44 -0700</date>
            <delta_ts>2021-09-19 19:31:02 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>479345</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9m
aWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJy
YXlQcm9maWxlLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw2ICsxMzIs
NyBAQCB2b2lkIEFycmF5UHJvZmlsZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0CiB7CiAgICAgbV9v
YnNlcnZlZEFycmF5TW9kZXMgfD0gYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUobGFzdFNlZW5TdHJ1
Y3R1cmUpOwogICAgIAorICAgIC8vIE9PUFM6IElzIGl0IG9rIGZvciB0aGlzIHRvIHJhY2U/IEkg
dGhpbmsgc28uCiAgICAgaWYgKCFtX2RpZFBlcmZvcm1GaXJzdFJ1blBydW5pbmcKICAgICAgICAg
JiYgaGFzVHdvT3JNb3JlQml0c1NldChtX29ic2VydmVkQXJyYXlNb2RlcykpIHsKICAgICAgICAg
bV9vYnNlcnZlZEFycmF5TW9kZXMgPSBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShsYXN0U2VlblN0
cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsMTAg
QEAgb3BfZ3JvdXAgOlByb2ZpbGVkQmluYXJ5T3AsCiAgICAgICAgIGxoczogVmlydHVhbFJlZ2lz
dGVyLAogICAgICAgICByaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZFR5cGVz
OiBPcGVyYW5kVHlwZXMsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxl
CisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
X2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTEsOSArMzUyLDEwIEBAIG9wX2dy
b3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgIF0sCiAgICAgYXJnczogewogICAgICAg
ICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg0LDkgKzM4NiwxMCBAQCBvcCA6bmVnYXRlLAog
ICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZDogVmlydHVhbFJl
Z2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLAorICAgICAgICBwcm9maWxl
SW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQ
cm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFy
aXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApAQCAtNDc4LDYgKzQ4MSw3IEBAIG9wIDpn
ZXRfYnlfaWQsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgbW9kZU1ldGFkYXRhOiBHZXRCeUlk
TW9kZU1ldGFkYXRhLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgIH0KIAogb3AgOmdldF9ieV9pZF93aXRoX3Ro
aXMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVj
a3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBAIFZhbHVlUHJvZmlsZSog
dmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJuICZtZXRhZGF0YS5tX3By
b2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK3VpbnRwdHJfdCB2YWx1
ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4KQoreworICAgIFVOVVNF
RF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9w
Y29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50
SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJu
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRvclByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZOZXh0UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRl
Y29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3JfbmV4dCkgeworICAgICAgICBzd2l0Y2ggKGNo
ZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4
dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZSgp
OworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXREb25lOiByZXR1cm4gQnl0ZWNvZGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkRvbmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck5leHQ6OmdldFZhbHVlOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlZhbHVl
UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfSBlbHNlIAorICAgICAgICByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZlByb2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVN
ZXRhZGF0YT4KIGJvb2wgaGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFk
YXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhW
TSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQot
ewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4o
bV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRN
YXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
dmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5r
SW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSAm
JiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwogdm9pZCBDYWxs
TGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVTcGVjaWZpY0Nh
bGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5OSwxMSBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9mcmFtZVNodWZm
bGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRVc2VzRGF0YUlD
cyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwotICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQ
Uik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BS
OwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9m
YXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZh
c3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJQyA9PSBVc2VE
YXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVn
aXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxM
aW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcgQEAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAgZ29Qb2x5bW9y
cGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVNYXNrKSk7CiAg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
aXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBw
cmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMubGluaygmaml0
KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBwcmVwLgogICAg
ICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQ
Uiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7
CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGNh
bGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
byk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICB1LmNv
ZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMu
bV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMubV9jYWxs
ZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxs
ZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEzICszNDQsMzQgQEAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQykK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIG51
bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBpZiAoaXNEYXRh
SUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVn
OjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRh
SUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0
YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKLSAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAgc2V0VXNlc0Rh
dGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywg
aml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlzVGFpbENhbGwo
KSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4g
ZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CiB9CiAKIHZv
aWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkK
QEAgLTM2OSwxNyArMzgxLDMwIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0m
IHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIs
IG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQog
Cit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUoY2FsbExpbmtJ
bmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBK
U0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMo
Vk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgbV9jb2RlT3JpZ2lu
ID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBz
ZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAg
bV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247CisgICAg
aWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpCisgICAgICAgIG1fZnJh
bWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCp1bmxpbmtl
ZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNv
dW50aW5nPworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJ
Qy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENh
bGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBs
YXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0lu
Zm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNF
X0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6
Tm8pOwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQ
YXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBh
dGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAg
ICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAg
IHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CkBAIC0zOTcsNyArNDIyLDcgQEAgdm9pZCBDYWxsTGlu
a0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhcwogCiAgICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0g
aml0LmxhYmVsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgICAgIHUuY29kZUlDLm1fZmFz
dFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0
UGF0aFN0YXJ0KTsKICAgICB9KTsKIAogICAgIC8vIC0gSWYgd2UncmUgbm90IHlldCBsaW5rZWQs
IHRoaXMgaXMgYSBqdW1wIHRvIHRoZSBzbG93IHBhdGguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDkgKzQzLDExIEBAIGNsYXNzIEpTRnVuY3Rpb247CiBlbnVtIE9wY29kZUlEIDog
dW5zaWduZWQ7CiBzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGE7CiAKK3N0cnVjdCBVbmxpbmtl
ZENhbGxMaW5rSW5mbzsKKwogY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1Nl
bnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIHB1YmxpYzoKLSAgICBlbnVtIENhbGxUeXBlIHsK
KyAgICBlbnVtIENhbGxUeXBlIDogdWludDhfdCB7CiAgICAgICAgIE5vbmUsCiAgICAgICAgIENh
bGwsCiAgICAgICAgIENhbGxWYXJhcmdzLApAQCAtMTY1LDYgKzE2Nyw4IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgfQogCisgICAgdm9pZCBpbml0aWFs
aXplRGF0YUlDKFZNJiwgVW5saW5rZWRDYWxsTGlua0luZm8mLCBHUFJSZWcgY2FsbGVlR1BSLCBH
UFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKwogICAgIEdQUlJlZyBjYWxsZWVHUFIoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxlZUdQUjsgfQogICAgIAogICAgIGVudW0gY2xhc3MgVXNlRGF0YUlDIDog
dWludDhfdCB7CkBAIC0xNzMsMTMgKzE3NywxNiBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0
ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhl
bHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VE
X1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0
aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIHB1
YmxpYzoKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXREYXRhSUNGYXN0
UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZv
R1BSKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJl
cGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBH
UFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlD
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9S
RVRVUk47CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRo
KENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBw
cmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2b2lkIGVtaXREaXJl
Y3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXREaXJlY3RUYWlsQ2FsbEZh
c3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJik7CisgICAg
c3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9TdHViKCk7CiAKICAgICBi
b29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VXNlRGF0YUlDPihtX3Vz
ZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsyMTAsNiBAQCBwdWJsaWM6
CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7CiAKQEAgLTI0MywxMSAr
MjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVsbHB0cjsKICAgICB9CiAK
LSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
c2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25jZSgpCiAgICAgewogICAg
ICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMwOCw5ICszMDksOSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlwZT4obV9jYWxsVHlwZSk7
CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5m
bywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgfQogCiAgICAgdWludDMy
X3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgxLDcgKzM4Miw5IEBAIHB1
YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5h
bFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OworCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOworCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAgdW5pb24gVW5p
b25UeXBlIHsKQEAgLTM5Nyw2ICs0MDAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsTG9jYXRpb247CiAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsZWVM
b2NhdGlvbjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IG1fc2xvd1BhdGhTdGFydDsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJu
YWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKICAgICAgICAgfSBjb2RlSUM7CiAgICAgfSB1Owog
CkBAIC00MjQsNiArNDI4LDEzIEBAIGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxMaW5rSW5mb0Nv
ZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKTsKIH0KIAorc3RydWN0
IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7
IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNhbiB0cml2aWFs
bHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxs
VHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRp
b247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBmcmFtZVNodWZm
bGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDggQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3Zp
ZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKKwor
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxpbnRFeGVjdXRl
Q291bnRlcigpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwog
fQpAQCAtMzE4LDcgKzMyMCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIEMKICAgICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKICAgICBvcHRpbWl6ZUFmdGVy
V2FybVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKKyAgICAvL2ppdEFmdGVyV2FybVVwKCk7
CiAKICAgICBpZiAob3RoZXIubV9yYXJlRGF0YSkgewogICAgICAgICBjcmVhdGVSYXJlRGF0YUlm
TmVjZXNzYXJ5KCk7CkBAIC0zNTksNyArMzYxLDkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0m
IHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkpOwogICAg
IHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7Ci0g
ICAgCisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50
RXhlY3V0ZUNvdW50ZXIoKTsKKwogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMp
OwogfQogCkBAIC0zNzAsMTAgKzM3NCwxMyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0s
IFN0cnVjdHVyZSogCiAvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5rZWQgYnl0ZWNv
ZGUgZ2VuZXJhdGlvbi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdlbmVyYXRlIGNv
bnRyb2wKIC8vIGZsb3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFzb24gZm9yIHRo
aXMgaXMgd2UgcmVseSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2FtZSBmb3IKIC8v
IGFsbCB0aGUgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2UgcmVseSBvbiB0
aGlzIGZhY3QgYnkgY2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKLS8vIGluc2lkZSBVbmxp
bmtlZENvZGVCbG9jay4KKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4gQWxzbywgQmFzZWxp
bmUgSklUIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5r
ZWRDb2RlQmxvY2ssCisvLyBzbyB0aGUgYnl0ZWNvZGUgbXVzdCByZW1haW4gdGhlIHNhbWUgYmV0
d2VlbiBDb2RlQmxvY2tzIHNoYXJpbmcgYW4gVW5saW5rZWRDb2RlQmxvY2suCiBib29sIENvZGVC
bG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKICAgICBKU1Njb3Bl
KiBzY29wZSkKIHsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7IC8vIFdlIG5lZWQgdG8g
c2V0IHVwIG91ciB2YWx1ZSBwcm9maWxlIHBvaW50ZXJzLgorCiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIApAQCAtNDcxLDYgKzQ3
OCwxOSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAg
IGJyZWFrOyBcCiAgICAgfQogCisjZGVmaW5lIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklM
RShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURB
VEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2Vk
Q29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAg
ICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJ
TEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFE
QVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtl
ZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAg
ICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5z
dHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTMzLDE0ICs1NTMsMTQgQEAgYm9vbCBD
b2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRl
UHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5L
KE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAg
ICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJ
bmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9w
TXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5L
X1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC03NjksNyArNzg5
LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgIC8vIHJl
bHkgb24gdGhlIGluc3RydWN0aW9uIGNvdW50IChhbmQgYXJlIGluIHRoZW9yeSBwZXJtaXR0ZWQg
dG8gYWxzbyBpbnNwZWN0IHRoZQogICAgIC8vIGluc3RydWN0aW9uIHN0cmVhbSB0byBtb3JlIGFj
Y3VyYXRlIGFzc2VzcyB0aGUgY29zdCBvZiB0aWVyLXVwKS4KICAgICBvcHRpbWl6ZUFmdGVyV2Fy
bVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKKyAgICAvL2ppdEFmdGVyV2FybVVwKCk7CiAK
ICAgICAvLyBJZiB0aGUgY29uY3VycmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2RlIGJsb2Nr
J3MgaGFzaCwgdGhlbiBjb21wdXRlIGl0IGhlcmUKICAgICAvLyBzeW5jaHJvbm91c2x5LgpAQCAt
NzkzLDYgKzgxMyw3NyBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb25Db21tb24oVk0m
CiAgICAgbV9vd25lckVkZ2Uuc2V0KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
OjpjcmVhdGUodm0sIHRoaXMpKTsKIH0KIAordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlu
a2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7CisgICAgc2V0
SklUQ29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8m
IGppdENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAgICAgICAg
IEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAgaGFuZGxl
ci5uYXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJn
ZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9CisgICAg
fQorCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Cisg
ICAgICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOworICAg
ICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGppdENv
ZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1
dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAgICAgIHN3
aXRjaCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5
cGU6Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQ
b29sW2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7Cisg
ICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZv
ID0gKnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9hZCk7Cisg
ICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXREYXRhLm1fY2Fs
bExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUlu
ZGV4KSk7CisgICAgICAgICAgICAgICAgLy8gT09QUzogZG9uJ3QgaGFyZGNvZGUgdGhlc2UgcmVn
aXN0ZXJzIGxpa2UgdGhpcy4KKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmluaXRpYWxp
emVEYXRhSUModm0oKSwgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtp
XSA9IGNhbGxMaW5rSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bzogeworICAgICAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2Vk
U3R1YkluZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyo+KGVudHJ5
LnBheWxvYWQpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IGppdERhdGEubV9zdHViSW5mb3MuYWRkKHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZSwgQ29k
ZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICBzdHViSW5mby0+aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKHRoaXMs
IHVubGlua2VkU3R1YkluZm8pOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFu
dFBvb2xbaV0gPSBzdHViSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6
IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFu
dFBvb2xbaV0gPSBmdW5jdGlvbkRlY2woaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1
bmN0aW9uRXhwcjogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZCk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5t
X2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIEdsb2JhbENvZGU6CisgICAg
Y2FzZSBNb2R1bGVDb2RlOgorICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAgIG1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRnVuY3Rpb25D
b2RlOgorICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJl
Y2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCisgICAgICAgIC8vIERvbid0
IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRpb24uCisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxp
bmVkICY9IGNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwoKSkgJiYgREZHOjptaWdodElubGluZUZ1
bmN0aW9uKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIXVubGlua2Vk
Q29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUgJiYgT3B0aW9uczo6dXNlQmFzZWxp
bmVKSVRDb2RlU2hhcmluZygpKQorICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlu
a2VkQmFzZWxpbmVDb2RlID0gV1RGTW92ZShqaXRDb2RlKTsKK30KKwogQ29kZUJsb2NrOjp+Q29k
ZUJsb2NrKCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTE1MzQsMzkgKzE2MjUsNDAgQEAg
dm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogCiAgICAgdXBkYXRlQWxs
UHJlZGljdGlvbnMoKTsKIAotI2lmIEVOQUJMRShKSVQpCi0gICAgYm9vbCBpc0VsaWdpYmxlRm9y
TExJbnREb3duZ3JhZGUgPSBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZTsKLSAgICBtX2lz
RWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IGZhbHNlOwotICAgIC8vIElmIEJhc2VsaW5lSklU
IGNvZGUgaXMgbm90IGV4ZWN1dGluZywgYW5kIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCBleGlz
dHMsIHdlIGF0dGVtcHQKLSAgICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFuZCBy
ZWluc3RhbGwgTExJbnQgY29kZSB0byBzYXZlIEpJVCBtZW1vcnkuCi0gICAgaWYgKE9wdGlvbnM6
OnVzZUxMSW50KCkgJiYgIW1faGFzTGlua2VkT1NSRXhpdCAmJiBqaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQgJiYgIW1fdm0tPmhlYXAuY29kZUJsb2NrU2V0KCkuaXNDdXJyZW50bHlF
eGVjdXRpbmcodGhpcykpIHsKLSAgICAgICAgaWYgKENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJs
b2NrID0gb3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKCFvcHRpbWl6
ZWRDb2RlQmxvY2stPm1fb3NyRXhpdENvdW50ZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNF
bGlnaWJsZUZvckxMSW50RG93bmdyYWRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Q29k
ZSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRyeXBvaW50KHRo
aXMpOwotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkgPT0gSklU
VHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygp
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxlcklu
Zm8mIHVubGlua2VkSGFuZGxlciA9IG1fdW5saW5rZWRDb2RlLT5leGNlcHRpb25IYW5kbGVyKGkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX3JhcmVE
YXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVyLnRhcmdl
dCkucHRyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5s
aW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihM
TEludDo6aGFuZGxlQ2F0Y2goaW5zdHJ1Y3Rpb24ud2lkdGgoKSkuY29kZSgpKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB1bmxpbmtJbmNvbWluZ0NhbGxz
KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGNsZWFyIHRoZXNlIG91
dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxpemVVbmNvbmRpdGlvbmFsbHkgYWxsIGNvbXBpbGVyIHRo
cmVhZHMKLSAgICAgICAgICAgICAgICAgICAgLy8gYXJlIHNhZmVwb2ludGVkLCBtZWFuaW5nIHRo
ZXkncmUgcnVubmluZyBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIGJ5dGVjb2RlIHBhcnNlciwgYW5k
IGJ5dGVjb2RlCi0gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlciBpcyB0aGUgb25seSBkYXRh
IHN0cnVjdHVyZSBwb2ludGluZyBpbnRvIHRoZSB2YXJpb3VzICppbmZvcy4KLSAgICAgICAgICAg
ICAgICAgICAgcmVzZXRKSVREYXRhKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotI2VuZGlmCisvLyBPT1BTOiByZWNvbmNpbGUg
dGhpcworLy8jaWYgRU5BQkxFKEpJVCkKKy8vICAgIGJvb2wgaXNFbGlnaWJsZUZvckxMSW50RG93
bmdyYWRlID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGU7CisvLyAgICBtX2lzRWxpZ2li
bGVGb3JMTEludERvd25ncmFkZSA9IGZhbHNlOworLy8gICAgLy8gSWYgQmFzZWxpbmVKSVQgY29k
ZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0cywg
d2UgYXR0ZW1wdAorLy8gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGluZSBKSVQgY29kZSBhbmQgcmVp
bnN0YWxsIExMSW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5LgorLy8gICAgaWYgKE9wdGlvbnM6
OnVzZUxMSW50KCkgJiYgIW1faGFzTGlua2VkT1NSRXhpdCAmJiBqaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQgJiYgIW1fdm0tPmhlYXAuY29kZUJsb2NrU2V0KCkuaXNDdXJyZW50bHlF
eGVjdXRpbmcodGhpcykpIHsKKy8vICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2Rl
QmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisvLyAgICAgICAgICAgIGlmICghb3B0
aW1pemVkQ29kZUJsb2NrLT5tX29zckV4aXRDb3VudGVyKSB7CisvLyAgICAgICAgICAgICAgICBp
ZiAoaXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlKSB7CisvLyAgICAgICAgICAgICAgICAgICAg
bV9qaXRDb2RlID0gbnVsbHB0cjsKKy8vICAgICAgICAgICAgICAgICAgICBMTEludDo6c2V0RW50
cnlwb2ludCh0aGlzKTsKKy8vICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXRU
eXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7CisvLworLy8gICAgICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxpbmtlZENvZGUtPm51bWJlck9mRXhj
ZXB0aW9uSGFuZGxlcnMoKTsgaSsrKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IG1fdW5saW5rZWRDb2RlLT5l
eGNlcHRpb25IYW5kbGVyKGkpOworLy8gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5m
byYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07CisvLyAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9ucygpLmF0
KHVubGlua2VkSGFuZGxlci50YXJnZXQpLnB0cigpOworLy8gICAgICAgICAgICAgICAgICAgICAg
ICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbDxF
eGNlcHRpb25IYW5kbGVyUHRyVGFnPihMTEludDo6aGFuZGxlQ2F0Y2goaW5zdHJ1Y3Rpb24ud2lk
dGgoKSkuY29kZSgpKSk7CisvLyAgICAgICAgICAgICAgICAgICAgfQorLy8KKy8vICAgICAgICAg
ICAgICAgICAgICB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisvLworLy8gICAgICAgICAgICAgICAg
ICAgIC8vIEl0J3Mgc2FmZSB0byBjbGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGluIGZpbmFs
aXplVW5jb25kaXRpb25hbGx5IGFsbCBjb21waWxlciB0aHJlYWRzCisvLyAgICAgICAgICAgICAg
ICAgICAgLy8gYXJlIHNhZmVwb2ludGVkLCBtZWFuaW5nIHRoZXkncmUgcnVubmluZyBlaXRoZXIg
YmVmb3JlIG9yIGFmdGVyIGJ5dGVjb2RlIHBhcnNlciwgYW5kIGJ5dGVjb2RlCisvLyAgICAgICAg
ICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50aW5n
IGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgorLy8gICAgICAgICAgICAgICAgICAgIHJlc2V0SklU
RGF0YSgpOworLy8gICAgICAgICAgICAgICAgfSBlbHNlCisvLyAgICAgICAgICAgICAgICAgICAg
bV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOworLy8gICAgICAgICAgICB9Cisv
LyAgICAgICAgfQorLy8gICAgfQorLy8KKy8vI2VuZGlmCiAgICAgCiAgICAgaWYgKEpJVENvZGU6
OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKQogICAgICAgICBmaW5hbGl6ZUxMSW50SW5s
aW5lQ2FjaGVzKCk7CkBAIC0xNTk0LDcgKzE2ODYsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRo
dW5rOgotICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsK
KyAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jb3VudCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAg
ICAgICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKQEAgLTMxMzMsNyAr
MzIyNSw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lm
IEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0
dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzM0OSwxMyArMzQ0
MSwxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAg
c3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAg
IHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwor
ICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9m
aWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERp
dj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC0zMzY3LDExICszNDU5LDExIEBAIFVuYXJ5QXJpdGhQcm9maWxl
KiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7
CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigp
Lm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9w
TmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5j
OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5t
X2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8
T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBw
Yy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzUyMSwyOCArMzYxMywxOSBAQCBzdGQ6Om9w
dGlvbmFsPEJ5dGVjb2RlSW5kZXg+IENvZGVCbG9jazo6CiAgICAgcmV0dXJuIGJ5dGVjb2RlSW5k
ZXg7CiB9CiAKLWludDMyX3QgQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJl
c2hvbGQpCi17Ci0gICAgc3dpdGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5kaWRPcHRpbWl6ZSgp
KSB7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKLSAgICAgICAgcmV0dXJuIHRo
cmVzaG9sZDsKLSAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKLSAgICAgICAgcmV0dXJuIHRocmVz
aG9sZCAqIDQ7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKLSAgICAgICAgcmV0dXJuIHRocmVz
aG9sZCAvIDI7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB0
aHJlc2hvbGQ7Ci19CisvL3ZvaWQgQ29kZUJsb2NrOjpqaXRBZnRlcldhcm1VcCgpCisvL3sKKy8v
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJ
VChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSwgdGhpcyk7CisvL30KIAot
dm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXRTb29u
KCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9s
ZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSwgdGhpcyk7Cisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQodW5saW5rZWRDb2RlQmxv
Y2soKS0+dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRo
aXMpOwogfQogCi12b2lkIENvZGVCbG9jazo6aml0U29vbigpCit2b2lkIENvZGVCbG9jazo6aml0
TmV4dEludm9jYXRpb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJl
c2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRo
aXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMp
OwogfQogCiBib29sIENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBj
b25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBAIGNsYXNzIE1ldGFkYXRhVGFi
bGU7CiBjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKIGNsYXNzIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
OwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CitjbGFzcyBCYXNlbGluZUpJVENvZGU7CiAKIERF
Q0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKENvZGVCbG9ja1JhcmVEYXRhKTsK
IApAQCAtMTU4LDcgKzE1OSw5IEBAIHB1YmxpYzoKICAgICBNZXRhZGF0YVRhYmxlKiBtZXRhZGF0
YVRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5nZXQoKTsgfQogCiAgICAgdW5zaWdu
ZWQgbnVtUGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQorcHJp
dmF0ZToKICAgICB2b2lkIHNldE51bVBhcmFtZXRlcnModW5zaWduZWQgbmV3VmFsdWUpOworcHVi
bGljOgogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSBjb25zdCB7IHJl
dHVybiBtX251bWJlck9mQXJndW1lbnRzVG9Ta2lwOyB9CiAKQEAgLTE2Nyw3ICsxNzAsNiBAQCBw
dWJsaWM6CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsg
fQogICAgIHVuc2lnbmVkIG51bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
aGFzQ2hlY2twb2ludHMoKSAqIG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKLSAgICB1bnNpZ25l
ZCogYWRkcmVzc09mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KIAogICAgIENvZGVC
bG9jayogYWx0ZXJuYXRpdmUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sq
PihtX2FsdGVybmF0aXZlLmdldCgpKTsgfQpAQCAtMjMyLDE2ICsyMzQsNiBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wg
aW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVy
IGFkZGluZyBiYWNrIHRoZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJuIHRydWUgaWYgYHJl
Z2AgaXMgYHRoaXNgIGFuZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAgICAgICBpZiAocmVn
LmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2Vs
bCgpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fbnVtVmFycyk7
CkBAIC0yNjYsOCArMjU4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGdldElDU3RhdHVzTWFwKElD
U3RhdHVzTWFwJiByZXN1bHQpOwogICAgIAogI2lmIEVOQUJMRShKSVQpCisgICAgLy8gT09QUzog
bW92ZSBhcml0aG1ldGljIElDcyBhbmQgc3dpdGNoIHRhYmxlcyBvdXQgb2YgaGVyZSwgYW5kIG9u
dG8gSklUQ29kZS4KICAgICBzdHJ1Y3QgSklURGF0YSB7CiAgICAgICAgIFdURl9NQUtFX1NUUlVD
VF9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKIAogICAgICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9zOwogICAg
ICAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOwpAQCAtMjgyLDkgKzI3NiwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9y
aWdpbk1hcDsKICAgICAgICAgYm9vbCBtX2hhc0NhbGxlZVNhdmVSZWdpc3RlcnMgeyBmYWxzZSB9
OwogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7Ci0g
ICAgICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworCisgICAgICAgIEZpeGVkVmVjdG9yPHZv
aWQqPiBtX2ppdENvbnN0YW50UG9vbDsKKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkpJVENvbnN0YW50UG9vbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKSVREYXRhLCBtX2pp
dENvbnN0YW50UG9vbCk7IH0KICAgICB9OwogCisgICAgdm9pZCBzZXR1cFdpdGhVbmxpbmtlZEJh
c2VsaW5lQ29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPik7CisKICAgICBKSVREYXRhJiBlbnN1cmVK
SVREYXRhKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyKQogICAgIHsKICAgICAgICAg
aWYgKExJS0VMWShtX2ppdERhdGEpKQpAQCAtMjkzLDYgKzI5MSw4IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
Jik7CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURGF0YSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RGF0YSk7IH0KKwogICAgIEpJVEFkZElDKiBh
ZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVRNdWxJQyogYWRkSklUTXVs
SUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CiAgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5
QXJpdGhQcm9maWxlKik7CkBAIC0zMjIsMTYgKzMyMiw3IEBAIHB1YmxpYzoKICAgICAvLyBsb29r
aW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5n
IHRoaXMuCiAgICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4
KEJ5dGVjb2RlSW5kZXgpOwogICAgIAotICAgIHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFw
JiYgaml0Q29kZU1hcCkKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKLSAgICAgICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcCA9IFdU
Rk1vdmUoaml0Q29kZU1hcCk7Ci0gICAgfQotICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVN
YXAoKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwot
ICAgICAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcDsKLSAgICB9
CisgICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpOwogCiAgICAgdm9pZCBzZXRQQ1Rv
Q29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOwogICAg
IHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKHZvaWQqIHBjKTsKQEAgLTQ3MiwxMCAr
NDYzLDEyIEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJv
ZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFs
dWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxl
cygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgp
ID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1
c2VKSVQoKSk7CiAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCk7
CisgICAgICAgIAogICAgIH0KIAogICAgIFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlRm9yQXJn
dW1lbnQodW5zaWduZWQgYXJndW1lbnRJbmRleCkKQEAgLTU3MSw2ICs1NjQsNyBAQCBwdWJsaWM6
CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBy
ZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXS5nZXQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
IGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbihyZWcpOyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24g
Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihp
bmRleCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVm
ZmVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9jb25zdGFudFJlZ2lz
dGVycykgKyBkZWNsdHlwZShtX2NvbnN0YW50UmVnaXN0ZXJzKTo6ZGF0YU1lbW9yeU9mZnNldCgp
OyB9CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsg
cmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZG
dW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNjAw
LDYgKzU5NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7
CiAgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKICAgICB9CisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShp
bnQgdGFibGVJbmRleCk7CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFudFBvb2woKQorICAg
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhICYmIGppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1faml0Q29uc3Rh
bnRQb29sLmRhdGEoKTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtl
ZFN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVy
T2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2VkU2ltcGxl
SnVtcFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyByZXR1
cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9
CkBAIC02MTAsNiArNjEwLDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2pp
dERhdGEpOwogICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgfQorICAgIFN0cmluZ0p1bXBUYWJsZSYgYmFzZWxpbmVTdHJp
bmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOwogI2VuZGlmCiAgICAgc2l6ZV90IG51
bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7IH0K
ICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNjMyLDIxICs2MzMsMjAg
QEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpCiAgICAg
ewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNoZWNrSWZUaHJlc2hvbGRD
cm9zc2VkQW5kU2V0KHRoaXMpOworICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVy
LT5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKICAgICB9CiAKICAgICB2b2lk
IGRvbnRKSVRBbnl0aW1lU29vbigpCiAgICAgewotICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50
ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5k
ZWZlckluZGVmaW5pdGVseSgpOwogICAgIH0KIAotICAgIGludDMyX3QgdGhyZXNob2xkRm9ySklU
KGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2FybVVwKCk7CiAgICAgdm9p
ZCBqaXRTb29uKCk7CisgICAgdm9pZCBqaXROZXh0SW52b2NhdGlvbigpOwogCiAgICAgY29uc3Qg
QmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAgICAgIHJldHVy
biAqbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIH0KIAogICAgIHR5cGVkZWYgSGFzaE1hcDxz
dGQ6OnR1cGxlPFN0cnVjdHVyZUlELCB1bnNpZ25lZD4sIEZpeGVkVmVjdG9yPExMSW50UHJvdG90
eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVjdHVyZVdhdGNocG9pbnRN
YXA7CkBAIC03OTcsNiArNzk3LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNEZWJ1Z2dlclJl
cXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CiAgICAgdm9pZCog
ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1Z2dlclJlcXVlc3RzOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVxdWVzdHMpOyB9CiAKICAg
ICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpOwogICAgIHZvaWQg
cmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykKQEAgLTgzOCw2ICs4Mzks
NyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKIAogICAg
IGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJpdGZpZWxkIGJlY2F1c2Ug
dGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVC
bG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBFTkFCTEUoSklUKQogICAg
IHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBERkc6OkNhcGFiaWxpdHlM
ZXZlbApAQCAtOTA3LDExICs5MDksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX21ldGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0cnVjdGlv
bnNSYXdQb2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9pbnN0
cnVjdGlvbnNSYXdQb2ludGVyKTsgfQogCi0gICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZv
ckZ1enppbmdFYXJseVJldHVybigpCi0gICAgewotICAgICAgICAvLyBTb21lIGJ1aWx0aW5zIGFy
ZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRoZXkgcnVuLgotICAgICAg
ICByZXR1cm4gIW1fdW5saW5rZWRDb2RlLT5pc0J1aWx0aW5GdW5jdGlvbigpOwotICAgIH0KKyAg
ICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkgeyByZXR1
cm4gbV91bmxpbmtlZENvZGUtPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0
dXJuKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluYWxpemVMTEludElubGluZUNhY2hl
cygpOwpAQCAtMTAxMCw3ICsxMDA4LDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBv
aW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4g
bV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEpJVERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBz
ZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jawpAQCAtMTAyOSw3ICsxMDI5LDcgQEAgcHJp
dmF0ZToKIAogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAgICAg
Ci0gICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAg
ICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIqIG1fbGxpbnRFeGVjdXRlQ291bnRlciB7IG51bGxw
dHIgfTsKIAogICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2ppdEV4ZWN1dGVDb3VudGVy
OwogICAgIHVpbnQzMl90IG1fb3NyRXhpdENvdW50ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxp
bmVzLmgiCkBAIC00MCw5ICs0MSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9m
aWxlKGNvbnMKICAgICBpZiAobV9tZXRhZGF0YSkgewogI2RlZmluZSBWSVNJVChfX29wKSBcCiAg
ICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBm
dW5jKG1ldGFkYXRhLm1fcHJvZmlsZSwgZmFsc2UpOyB9KTsKLQogICAgICAgICBGT1JfRUFDSF9P
UENPREVfV0lUSF9WQUxVRV9QUk9GSUxFKFZJU0lUKQotCiAjdW5kZWYgVklTSVQKIAogICAgICAg
ICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wSXRlcmF0b3JPcGVuPihbJl0gKGF1dG8mIG1ldGFkYXRh
KSB7IApAQCAtNTcsNyArNTYsNiBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmls
ZShjb25zCiAgICAgICAgICAgICBmdW5jKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLCBmYWxzZSk7
CiAgICAgICAgIH0pOwogICAgIH0gICAKLQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgpAQCAtOTksNCArOTcsMjQgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5r
SW5mbwogICAgIH0KIH0KIAorI2lmIEVOQUJMRShKSVQpCitBTFdBWVNfSU5MSU5FIGNvbnN0IEpJ
VENvZGVNYXAmIENvZGVCbG9jazo6aml0Q29kZU1hcCgpCit7CisgICAgQVNTRVJUKGppdFR5cGUo
KSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2Vs
aW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1faml0Q29kZU1hcDsKK30KKworQUxXQVlT
X0lOTElORSBTaW1wbGVKdW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTd2l0Y2hKdW1wVGFi
bGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1f
aml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKworQUxX
QVlTX0lOTElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTdHJpbmdTd2l0
Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklU
Q29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2UuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiAr
NzAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdy
YXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwogICAgIAogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlKiB3cmFwQW5kQWN0aXZhdGUoQ29kZUJsb2NrKiBjb2RlQmxvY2spOworCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLCBtX2NvZGVCbG9jayk7IH0KICAgICAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRl
ci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRpb25Db3VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBA
IGJvb2wgRXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgdGhyZXNob2xkID0gY2xpcHBlZFRocmVzaG9sZChjb2RlQmxv
Y2sgPyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIDogbnVsbHB0ciwgdGhyZXNob2xkKTsKKyAg
ICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKHRocmVzaG9sZCk7CiAgICAgCiAgICAgbV9j
b3VudGVyID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXRocmVzaG9sZCk7CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRl
ci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhlY3V0aW9uQ291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsgLy8gSWYgeW91IHVzZSB0
aGlzLCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCgpIG1heSBzdGlsbCByZXR1cm4gZmFs
c2UuCiAgICAgYm9vbCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sqKTsK
ICAgICBib29sIGhhc0Nyb3NzZWRUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVybiBtX2NvdW50ZXIg
Pj0gMDsgfQotICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2Rl
QmxvY2sqKTsKKyAgICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29k
ZUJsb2NrKiA9IG51bGxwdHIpOwogICAgIHZvaWQgZGVmZXJJbmRlZmluaXRlbHkoKTsKICAgICBk
b3VibGUgY291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdG90YWxD
b3VudCkgKyBtX2NvdW50ZXI7IH0KICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
QEAgLTg2LDEzICs4Niw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFQgdGhyZXNob2xkKQorICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQo
VCB0aHJlc2hvbGQpCiAgICAgewotICAgICAgICBpbnQzMl90IG1heFRocmVzaG9sZDsKLSAgICAg
ICAgaWYgKE9wdGlvbnM6OnJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50
cygpICYmIGdsb2JhbE9iamVjdCkKLSAgICAgICAgICAgIG1heFRocmVzaG9sZCA9IGdsb2JhbE9i
amVjdC0+d2Vha1JhbmRvbUludGVnZXIoKSAlIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVu
Q2hlY2twb2ludHMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0g
bWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOworICAgICAgICBpbnQz
Ml90IG1heFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2lu
dHMoKTsKICAgICAgICAgaWYgKHRocmVzaG9sZCA+IG1heFRocmVzaG9sZCkKICAgICAgICAgICAg
IHRocmVzaG9sZCA9IG1heFRocmVzaG9sZDsKICAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRh
LmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBzdHJ1Y3Qg
R2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0IHsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRN
b2RlTWV0YWRhdGFVbnNldCkgPT0gMTIpOwogCiBzdHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YUFy
cmF5TGVuZ3RoIHsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCwg
YXJyYXlQcm9maWxlKTsgfQogICAgIEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGU7CiB9Owogc3Rh
dGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoKSA9PSAxMik7
CkBAIC04OCw2ICs4OSw3IEBAIHVuaW9uIEdldEJ5SWRNb2RlTWV0YWRhdGEgewogICAgICAgICBH
ZXRCeUlkTW9kZSBtb2RlOwogICAgICAgICB1aW50OF90IGhpdENvdW50Rm9yTExJbnRDYWNoaW5n
OyAvLyBUaGlzIG11c3QgYmUgemVybyB3aGVuIHdlIHVzZSBQcm90b0xvYWQgbW9kZS4KICAgICB9
OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9CiAgICAgR2V0QnlJZE1vZGVNZXRh
ZGF0YURlZmF1bHQgZGVmYXVsdE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0IHVu
c2V0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggYXJyYXlMZW5ndGhN
b2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0
dXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEzLDcgQEAgR2V0
QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICByZXR1cm4gR2V0
QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpH
ZXRCeUlkU2VsZjogewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5t
X2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9j
ay0+dm0oKSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zvcklt
cHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93
VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
ciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw3IEBAIEluQnlTdGF0dXMgSW5CeVN0YXR1czo6Y29tcHV0
ZUZvclN0dWJJbmYKICAgICAgICAgcmV0dXJuIEluQnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAK
ICAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjogewotICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7Cisg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUodm0pOwogICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdG
b3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIEluQnlTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJ
bmZvLT5pZGVudGlmaWVyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
NiwxMSArMTc2LDE2IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgbGlua0NvZGVJbmxpbmUK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQ
cm9wZXJ0eUFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTZWxmUHJvcGVydHlBY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAg
ICAgLy8gVGhlc2UgZHluYW1pYyBzbG90cyBnZXQgZmlsbGVkIGluLiBOb3RoaW5nIGVsc2UgdG8g
ZG8uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIENDYWxsSGVscGVycyBqaXQ7
CiAgICAgCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5mby5iYXNlR1BSOwpAQCAtMjMzLDIzICsy
MzgsMzEgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBoYXNGcmVlUmVnaXN0ZQogICAgIHJl
dHVybiBnZXRTY3JhdGNoUmVnaXN0ZXIoc3R1YkluZm8pICE9IEludmFsaWRHUFJSZWc7CiB9CiAK
LWJvb2wgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCitib29sIElubGlu
ZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
IHsKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGhhc0ZyZWVSZWdpc3RlcihzdHViSW5mbyk7CiB9CiAK
LWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1Yklu
Zm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBB
U1NFUlQoY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvZmZzZXQpKTsK
KyAgICBBU1NFUlQoY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1
YkluZm8sIG9mZnNldCkpOworCisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAg
ICAgICAgLy8gVGhlc2Ugc2xvdHMgZ2V0IGZpbGxlZCBpbi4gTm90aGluZyBlbHNlIHRvIGRvLgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCkBA
IC0zNjMsMTMgKzM3NiwxOCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5n
dGgoCiB9CiAKIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitib29sIElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVy
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkgeworICAgICAgICAvLyBUaGVzZSBzbG90cyBnZXQgZmlsbGVkIGluLiBOb3RoaW5nIGVsc2Ug
dG8gZG8uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIEdQUlJlZyBiYXNlID0g
c3R1YkluZm8uYmFzZUdQUjsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVl
UmVncygpOwogCkBAIC0zODUsNiArNDAzLDggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
U2VsZkluQWNjZXNzKAogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCisvLyBPT1BT
OiBNYWtlIHRoaXMgc3R1ZmYgd29yayB3aXRoIGRhdGEgaWNzIHRvIG5vdCBhc3N1bWUgaW5saW5l
IGFjY2Vzcy4KKwogdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05v
dFVzaW5nSW5saW5lQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJn
ZXQpCiB7CiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKQEAgLTQwNCw5ICs0MjQs
MTIgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogdm9pZCBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4gdGFyZ2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7
CisgICAgICAgIC8vIE9PUFM6IG1ha2Ugc29tZSB2ZXJzaW9uIG9mIElubGluZUFjY2VzcyBmb3Ig
YmFzZWxpbmUuIFBlcmhhcHMgbWFrZSBpdCBkYXRhIGRyaXZlbi4gT3IgcGVyaGFwcyBoYXZlIHRo
ZSBjb2RlCisgICAgICAgIC8vIGJlIHNoYXJlZCBzb21laG93IGJldHdlZW4gVW5saW5rZWRDb2Rl
QmxvY2tzLgorCiAgICAgICAgIC8vIElmIGl0IGlzIG5vdCBHZXRCeUlkLWxpa2UtdGhpbmcsIHdl
IGRvIG5vdCBlbWl0IG5vcCBzbGVkIChlLmcuIEdldEJ5VmFsKS4KICAgICAgICAgLy8gVGhlIGNv
ZGUgaXMgYWxyZWFkeSBhbiBpbmRpcmVjdCBqdW1wLCBhbmQgb25seSB0aGluZyB3ZSBzaG91bGQg
ZG8gaXMgcmVwbGFjaW5nIG1fY29kZVB0ci4KLSAgICAgICAgaWYgKHN0dWJJbmZvLmhhc0NvbnN0
YW50SWRlbnRpZmllcikgeworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQgJiYgc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CiAg
ICAgICAgICAgICAvLyBJZiBtX2NvZGVQdHIgaXMgcG9pbnRpbmcgdG8gc3R1YkluZm8uc2xvd1Bh
dGhTdGFydExvY2F0aW9uLCB0aGlzIG1lYW5zIHRoYXQgSW5saW5lQWNjZXNzIGNvZGUgaXMgbm90
IGEgc3R1YiBvbmUuCiAgICAgICAgICAgICAvLyBXZSByZXdyaXRlIHRoaXMgd2l0aCB0aGUgc3R1
Yi1iYXNlZCBkaXNwYXRjaGluZyBjb2RlIG9uY2UsIGFuZCBjb250aW51ZSB1c2luZyBpdCB1bnRp
bCB3ZSByZXNldCB0aGUgY29kZS4KICAgICAgICAgICAgIGlmIChzdHViSW5mby5tX2NvZGVQdHIu
ZXhlY3V0YWJsZUFkZHJlc3MoKSA9PSBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSkgewpAQCAtNDIxLDcgKzQ0NCw5IEBAIHZvaWQgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICAgICAgICAgICAgICB9KSwgIklubGluZUFjY2Vz
czogbGlua2luZyBzdHViIGNhbGwiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAg
ICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHRhcmdldDsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNz
IGNvZGUuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCw4ICs0NTksMTQgQEAgdm9p
ZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgIH0pLCAiSW5saW5lQWNj
ZXNzOiBsaW5raW5nIGNvbnN0YW50IGp1bXAiKTsKIH0KIAotdm9pZCBJbmxpbmVBY2Nlc3M6OnJl
c2V0U3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKK3ZvaWQgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogeworICAgIGlmIChj
b2RlQmxvY2stPnVzZURhdGFJQygpICYmIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUKSB7CisgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHN0dWJJbmZvLnNs
b3dQYXRoU3RhcnRMb2NhdGlvbjsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3Zlcihz
dHViSW5mby5zdGFydC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8
dm9pZChDQ2FsbEhlbHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgIC8v
IFdlIGRvbid0IG5lZWQgYSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBq
dW1waW5nIGludG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4KICAgICAgICAgYXV0byBqdW1wID0gaml0
Lmp1bXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nl
c3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5l
QWNjZXNzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbmxpbmVBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTksMTMgKzk5LDEzIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KHNpemUsIHNpemVGb3JQcm9wZXJ0eUFjY2Vz
cygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vz
cyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBz
dGF0aWMgYm9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1Yklu
Zm8mLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVy
dHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQp
OworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0
YXRpYyBib29sIGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0
ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1
Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVBcnJh
eUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKICAgICBzdGF0aWMgYm9vbCBp
c0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYpOwogICAgIHN0YXRpYyBi
b29sIGdlbmVyYXRlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7Ci0g
ICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mLCBT
dHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJbkFjY2VzcyhDb2RlQmxv
Y2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBib29sIGdl
bmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJik7CiAKICAgICBzdGF0aWMgdm9p
ZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2VzcyhDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9k
ZU1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDYgKzQwLDcgQEAgT1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9SX0VOVU1f
Q0xBUwogCiBzdHJ1Y3QgSXRlcmF0aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90IHNlZW5N
b2RlcyB7IDAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVzKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1vZGVzKTsg
fSAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9PSBzaXpl
b2YoSXRlcmF0aW9uTW9kZSkpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBBcnJheVBy
b2ZpbGUgbV9hcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5
UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9h
cnJheVByb2ZpbGUpOyB9CiAKIHByaXZhdGU6CiAgICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0
U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQgfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsNiArNjUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgZnVuYygq
bWV0YWRhdGEpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAgIEFMV0FZ
U19JTkxJTkUgc2l6ZV90IG51bUVudHJpZXMoKQorICAgIHsKKyAgICAgICAgYXV0byogc3RhcnQg
PSBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUgT3A6Ok1ldGFkYXRhKj4oZ2V0KE9wOjpvcGNvZGVJRCkp
OworICAgICAgICBhdXRvKiBlbmQgPSBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUgT3A6Ok1ldGFkYXRh
Kj4oZ2V0SW1wbChPcDo6b3Bjb2RlSUQgKyAxKSk7CisgICAgICAgIHJldHVybiBlbmQgLSBzdGFy
dDsKKyAgICB9CisKICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKTsKIAogICAgIHZvaWQgcmVmKCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNw
cAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDEwICsxODAsMTAgQEAgUHV0QnlT
dGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwogICAgICAgICBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQodWlkKTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAg
IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1
aWQpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZtKCkpOworICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBp
ZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFu
dDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZpZXIpLCBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIFB1dEJ5VmFy
aWFudDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZpZXIpLCBzdHJ1Y3R1cmUsIG9mZnNldCk7CiAg
ICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1
YkluZm8pOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHVi
SW5mby5oIgogCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNs
dWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNj
ZXNzLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogCkBAIC02NSw5ICs2Niw5IEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkU2VsZigKICAgICBBU1NFUlQoaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyKTsKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OkdldEJ5SWRT
ZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNz
QmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVy
KGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNl
bGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRBcnJh
eUxlbmd0aChjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIpCkBAIC04Nyw5ICs4
OCw5IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGEKICAgICBBU1NF
UlQobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxv
Y2tlciwgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZSk7CiAgICAgbV9pZGVudGlmaWVyID0gaWRl
bnRpZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRl
QmFycmllcihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVC
bG9jay0+dm0oKS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYu
b2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjppbml0SW5CeUlkU2VsZihjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGlubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBpZGVudGlmaWVyKQpAQCAtOTcsOSArOTgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojppbml0SW5CeUlkU2VsZihjCiAgICAgQVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6
VW5zZXQpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6SW5CeUlkU2VsZik7
CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
KTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlLT5pZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndyaXRlQmFycmllcihjb2Rl
QmxvY2spOwotICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxmT2Zm
c2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCkBAIC0y
MzYsNyArMjM3LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbwog
ICAgICAgICAvLyB3ZSdyZSBidWZmZXJlZCBpcyBiZWNhdXNlIHdlIHJlbHkgb24gaXQgdG8gcmVz
ZXQgZHVyaW5nIEdDIGlmIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZQogICAgICAgICAvLyBp
cyBjb2xsZWN0ZWQuCiAgICAgICAgIG1faWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgICAgIG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUgPSAwOwogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgZ2VuZXJhdGVk
IHNvbWUgY29kZSB0aGVuIHdlIGRvbid0IHdhbnQgdG8gYXR0ZW1wdCB0byByZXBhdGNoIGluIHRo
ZSBmdXR1cmUgdW50aWwgd2UKICAgICAgICAgLy8gZ2F0aGVyIGVub3VnaCBjYXNlcy4KQEAgLTI1
MSw3ICsyNTIsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiB7
CiAgICAgY2xlYXJCdWZmZXJlZFN0cnVjdHVyZXMoKTsKICAgICBtX2lkZW50aWZpZXIgPSBudWxs
cHRyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5jbGVhcigpOworICAgIG1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2Fj
aGVUeXBlOjpVbnNldCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg1LDYgKzI4Niw3IEBAIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAgICAgICAgcmVzZXRQdXRCeShj
b2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0
ZU5hbWU6CiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpC
eVZhbCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgpAQCAt
MzYwLDggKzM2Miw4IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4K
ICAgICB9CiAKICAgICBib29sIGlzVmFsaWQgPSB0cnVlOwotICAgIGlmIChtX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUpCi0gICAgICAgIGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChtX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKQorICAgICAgICBpc1ZhbGlkICY9
IHZtLmhlYXAuaXNNYXJrZWQoc3RydWN0dXJlKTsKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2Fj
aGVUeXBlOjpTdHViKQogICAgICAgICBpc1ZhbGlkICY9IHUuc3R1Yi0+dmlzaXRXZWFrKHZtKTsK
IApAQCAtMzc1LDggKzM3Nyw4IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1Jl
ZmVyZW4KIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojpwcm9wYWdhdGVUcmFuc2l0aW9ucyhWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmIChtX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCi0gICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpKQorICAgICAgICBzdHJ1
Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENh
Y2hlVHlwZTo6U3R1YikKICAgICAgICAgdS5zdHViLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNp
dG9yKTsKQEAgLTQzMCw2ICs0MzIsMjA0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmVT
dHViSW5mbzo6c2UKICAgICBtX2NhY2hlVHlwZSA9IG5ld0NhY2hlVHlwZTsKIH0KIAordm9pZCBT
dHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KENvZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8p
Cit7CisgICAgYWNjZXNzVHlwZSA9IHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZTsKKyAgICBz
dGFydCA9IHVubGlua2VkU3R1YkluZm8uc3RhcnQ7IC8vIE9PUFM6IGRvIHdlIG5lZWQgYSBzdGFy
dCBmb3IgZGF0YSBJQ3M/CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5kb25l
TG9jYXRpb247CisgICAgc2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5z
bG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENhbGxTaXRlSW5kZXgo
Qnl0ZWNvZGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKTsK
KyAgICBjb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5k
ZXgpOworICAgIG1fY29kZVB0ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKworICAgIHVzZWRS
ZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAg
aWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxpbmtlZFN0dWJJbmZv
LmJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZvciBpdGVyYXRvcl9u
ZXh0LCB3ZSBjYW4ndCBjbG9iYmVyIHRoZSBzY3JhdGNoIHJlZ2lzdGVyIGVpdGhlci4KKyAgICAg
ICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoKTsK
KyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVC
eVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0
ZUJ5SUQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5C
eUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJ
ZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgICAgIG1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6IAorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIHN3aXRj
aCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90
RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJp
Y3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlk
U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYg
KHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0
cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQ
dXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAg
ICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRT
dHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6
OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3Ry
aWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpID8g
b3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpE
ZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAg
ICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBy
ZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Cisg
ICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAg
ICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IElu
dmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5
VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0Nv
bnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IGZhbHNlOworICAgICAgICBwcm90b3R5cGVJc0tub3duT2JqZWN0ID0gZmFsc2U7CisgICAgICAg
IGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICB2
YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBy
ZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87Cisg
ICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgY2FzZSBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsK
KyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAg
ICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAg
aGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52
YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpH
ZXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBy
ZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRy
dWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVy
czo6cmVzdWx0OworICAgICAgICByZWdzLnRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVH
ZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJh
c2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BS
ID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQ
cml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAg
ICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBy
ZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Cisg
ICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAg
ICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6UHV0QnlWYWwpCisgICAgICAg
ICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2Zp
bGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5k
OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIGhhc0Nv
bnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICB2YWx1ZUdQUiA9IEludmFsaWRHUFJS
ZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiAjaWYgQVNTRVJU
X0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmNoZWNrQ29uc2lzdGVuY3koKQogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5o
IgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAi
UmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1
cmVTZXQuaCIKQEAgLTU2LDYgKzU3LDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90
IHsKICAgICBHZXRCeVZhbCwKICAgICBQdXRCeUlkLAogICAgIFB1dEJ5VmFsLAorICAgIFB1dFBy
aXZhdGVOYW1lLAogICAgIEluQnlJZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1l
LApAQCAtNzgsNiArODAsOCBAQCBlbnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CiAgICAg
U3RyaW5nTGVuZ3RoCiB9OwogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKKwog
Y2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cnVj
dHVyZVN0dWJJbmZvKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTk4LDYgKzEw
Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7
CiAKKyAgICB2b2lkIGluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2Rl
QmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJik7CisKICAgICBERUNMQVJFX1ZJU0lU
X0FHR1JFR0FURTsKIAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5j
ZXMgdGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLApAQCAt
MzI1LDEzICszMzEsMTkgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIENvZGVPcmlnaW4gY29k
ZU9yaWdpbjsKKyAgICBQcm9wZXJ0eU9mZnNldCBieUlkU2VsZk9mZnNldDsKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoU3RydWN0dXJlU3R1YkluZm8sIGJ5SWRTZWxmT2Zmc2V0KTsgfQorICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUp
OyB9CiAgICAgdW5pb24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0OwotICAgICAgICB9IGJ5SWRTZWxmOwogICAgICAgICBQb2x5bW9ycGhpY0Fj
Y2Vzcyogc3R1YjsKICAgICB9IHU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlOworICAgIFN0cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZShWTSYgdm0pCisgICAgeworICAgICAgICBpZiAoIW1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gdm0u
Z2V0U3RydWN0dXJlKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgfQorICAgIFN0
cnVjdHVyZUlEIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSB7IDAgfTsKIHByaXZhdGU6CiAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgLy8gUmVwcmVzZW50cyB0
aG9zZSBzdHJ1Y3R1cmVzIHRoYXQgYWxyZWFkeSBoYXZlIGJ1ZmZlcmVkIEFjY2Vzc0Nhc2VzIGlu
IHRoZSBQb2x5bW9ycGhpY0FjY2Vzcy4KQEAgLTQ0Nyw2ICs0NTksMTggQEAgaW5saW5lIGF1dG8g
YXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bgogICAgIH0KIH0KIAorc3RydWN0IFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8geworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICBQdXRL
aW5kIHB1dEtpbmQ7CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5k
IHsgUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpIH07CisgICAgRUNNQU1vZGUgZWNtYU1vZGUg
eyBFQ01BTW9kZTo6c2xvcHB5KCkgfTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7
CisgICAgLy8gT09QUzogRG8gd2UgbmVlZCBzdGFydCBmb3IgZGF0YSBJQ3M/CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0OyAvLyBUaGlzIGlzIGVpdGhl
ciB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJQyBmb3IgKmJ5SWQgY2FjaGVzLiBvciB0aGUgbG9j
YXRpb24gb2YgcGF0Y2hhYmxlIGp1bXAgZm9yICdpbnN0YW5jZW9mJyBjYWNoZXMuCisgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzbG93UGF0aFN0YXJ0TG9jYXRpb247
Cit9OworCiAjZWxzZQogCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB2b2lkIHByaW50U3VwZXJTYW1wbGVy
U3RhdGUoKQogICAgIGRvdWJsZSBwZXJjZW50YWdlID0gMTAwLjAgKiBpbiAvIChpbiArIG91dCk7
CiAgICAgaWYgKHBlcmNlbnRhZ2UgIT0gcGVyY2VudGFnZSkKICAgICAgICAgcGVyY2VudGFnZSA9
IDAuMDsKLSAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxh
ZzogIiwgcGVyY2VudGFnZSwgIlxuIik7CisgICAgZGF0YUxvZygiUGVyY2VudCB0aW1lIGJlaGlu
ZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNlbnRhZ2UsICIlXG4iKTsKIH0KIAogdm9pZCBl
bmFibGVTdXBlclNhbXBsZXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9j
ay5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVk
ZSAiQ2xhc3NJbmZvLmgiCkBAIC03OCw2ICs3OSw4IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxp
bmtlZENvZGVCbG9jayhWTSYKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeShsb2Nr
ZXIpOwogICAgICAgICBtX3JhcmVEYXRhLT5tX3ByaXZhdGVCcmFuZFJlcXVpcmVtZW50ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByaXZhdGVCcmFuZFJlcXVpcmVtZW50OjpOZWVkZWQpOwogICAg
IH0KKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xk
Rm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KQEAgLTMxNiw2ICszMTksMzMgQEAgaW50IFVubGlua2Vk
Q29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2ZmcwogICAgIHJldHVybiBtX291dE9mTGluZUp1bXBU
YXJnZXRzLmdldChieXRlY29kZU9mZnNldCk7CiB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorYm9v
bCBVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQoreworICAgIC8vIE9PUFM6IGRvIHdoYXQgQ29kZUJsb2NrIGRvZXMgYW5kIG1ha2UgYSBoYXNo
IHRhYmxlPworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJz
KCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRp
ZgorCitpbnQzMl90IFVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0
aHJlc2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRPcHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlT
dGF0ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNl
IFRyaVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2Fz
ZSBUcmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwog
dm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcygpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIW1fbWV0YWRhdGEtPmlzRmluYWxpemVkKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTIgQEAKIAogI3ByYWdt
YSBvbmNlCiAKKyNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJBcnJheVByb2Zp
bGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQ29kZVR5
cGUuaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNv
dW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCiAjaW5jbHVkZSAiSGFu
ZGxlckluZm8uaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCkBAIC02NCw2ICs2Niw3IEBAIGNs
YXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7
CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGluZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUlu
Zm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29uc3RhbnQgOiBpbnQzMl90OwogCkBAIC0xNzUsNiAr
MTc4LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVu
a25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJz
OyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVn
LnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3Rh
bnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0
ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
Z2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFu
dFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4
ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b247IH0KIApAQCAtMjA3LDYgKzIxMSwxNSBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRN
b2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlw
dE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBp
bnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25B
dChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChp
bmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlv
bnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRv
KiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0
aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGlu
c3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAg
ICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVu
c2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5z
aXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0
dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDEwICszNDcsMjEgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9tZXRhZGF0YS0+c2l6ZUluQnl0ZXMoKTsKICAgICB9CiAKKyAgICBib29sIGxvb3BI
aW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKKyAgICB7CisgICAgICAgIC8v
IFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMg
dGhleSBydW4uCisgICAgICAgIHJldHVybiAhaXNCdWlsdGluRnVuY3Rpb24oKTsKKyAgICB9CiAg
ICAgdm9pZCBhbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKCk7CiAgICAgVW5saW5rZWRWYWx1ZVByb2Zp
bGUmIHVubGlua2VkVmFsdWVQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ZhbHVl
UHJvZmlsZXNbaW5kZXhdOyB9CiAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUmIHVubGlua2VkQXJy
YXlQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2FycmF5UHJvZmlsZXNbaW5kZXhd
OyB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGJvb2wgaGFzSWRlbnRpZmllcihVbmlxdWVk
U3RyaW5nSW1wbCopOworI2VuZGlmCisKKyAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQz
Ml90IHRocmVzaG9sZCk7CisKIHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSYs
IFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYsIE9wdGlvblNldDxD
b2RlR2VuZXJhdGlvbk1vZGU+KTsKIApAQCAtMzk3LDYgKzQyMSw3IEBAIHByaXZhdGU6CiAgICAg
dW5zaWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3Vy
cmVudEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtl
ZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAw
IH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEzLDYgKzQzOCw5IEBA
IHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3Ry
dWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBt
X2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFjZSB0byBzdG9yZSB0
aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQ
cm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2Zp
bGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQ
cm9maWxlOwpAQCAtNDU4LDYgKzQ4NiwzMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAg
IGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMp
OworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNldCk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAg
ICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJp
dGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fdW5hcnlBcml0
aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV91bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKFVu
YXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0
dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1
bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxl
c1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3Vu
dGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOyB9CiAKIHByaXZhdGU6CiAgICAg
dXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpP
ZmZzZXQsIGludD47CkBAIC00NjUsNiArNTE3LDcgQEAgcHJpdmF0ZToKICAgICBPdXRPZkxpbmVK
dW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxS
YXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZv
PiBtX2V4cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50
RXhlY3V0ZUNvdW50ZXI7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRWYWx1ZVByb2ZpbGU+IG1f
dmFsdWVQcm9maWxlczsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZEFycmF5UHJvZmlsZT4gbV9h
cnJheVByb2ZpbGVzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAgcHVibGljOgogICAg
IGJvb2wgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZUJsb2NrLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0KICAgICBib29s
IGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmhhc0NoZWNrcG9p
bnRzKCk7IH0KICAgICBib29sIGhhc1RhaWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJs
b2NrLT5oYXNUYWlsQ2FsbHMoKTsgfQorICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmls
ZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKTsgfQorICAg
IHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmFk
ZFVuYXJ5QXJpdGhQcm9maWxlKCk7IH0KIAogICAgIC8vIFVwZGF0aW5nIFVubGlua2VkQ29kZUJs
b2NrLgogICAgIHZvaWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1fY29kZUJsb2NrLT5zZXRIYXND
aGVja3BvaW50cygpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxlKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZzZXRJbk1ldGFkYXRhVGFibGUo
Y29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9pc0ZpbmFsaXpl
ZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9IG1faXMzMkJpdCA/IG9mZnNl
dFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9w
Y29kZUlEXTsKKyAgICAgICAgYmFzZVR5cGVPZmZzZXQgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFs
aWdub2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSksIGJhc2VUeXBlT2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKHR5cGVuYW1lIE9wY29kZTo6TWV0YWRh
dGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CiAgICAgdW5zaWduZWQgbnVtRW50cmllcygpOwogCkBAIC0xMDcsNiArMTE2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAg
fQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2
ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTMgKzQ1LDEx
IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tl
dHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tl
dHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAg
ICBWYWx1ZVByb2ZpbGVCYXNlKCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQotICAgICAgICAgICAgbV9idWNrZXRzW2ld
ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgIGNsZWFyQnVja2V0cygpOwog
ICAgIH0KICAgICAKICAgICBFbmNvZGVkSlNWYWx1ZSogc3BlY0ZhaWxCdWNrZXQodW5zaWduZWQg
aSkKQEAgLTU5LDYgKzU3LDEyIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAg
QVNTRVJUKG51bWJlck9mQnVja2V0cyArIGkgPCB0b3RhbE51bWJlck9mQnVja2V0cyk7CiAgICAg
ICAgIHJldHVybiBtX2J1Y2tldHMgKyBudW1iZXJPZkJ1Y2tldHMgKyBpOwogICAgIH0KKworICAg
IHZvaWQgY2xlYXJCdWNrZXRzKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQorICAgICAgICAgICAgbV9idWNrZXRzW2ld
ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgfQogICAgIAogICAgIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tldCkgY29uc3QKICAgICB7CkBAIC0xMjMs
OCArMTI3LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBv
bmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4
ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkBAIC0xMzksNyAr
MTQxLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICAKICAgICAgICAgcmV0
dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAgICBFbmNvZGVkSlNWYWx1ZSBtX2J1
Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVk
aWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE2MSw2ICsxNjMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9m
aWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGUgOiBwdWJsaWMg
VmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPiB7CiAgICAgVmFsdWVQcm9maWxl
KCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+KCkgeyB9CisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQogfTsKIAogc3RydWN0IFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk4
LDcgKzE1OTgsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFVuYXJ5CiAg
ICAgICAgIGVtaXRVbmFyeU9wPE9wTm90Pihkc3QsIHNyYyk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywg
dHlwZSk7CisgICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0eXBlLCBtX2Nv
ZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2Ugb3BfYml0bm90OgogICAgICAgICBlbWl0VW5hcnlPcDxPcEJpdG5vdD4oZHN0LCBzcmMpOwpA
QCAtMTY5NiwxMyArMTY5NiwxMyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFR5cGVPCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5jKFJlZ2lzdGVy
SUQqIHNyY0RzdCkKIHsKLSAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNEc3QpOworICAgIE9wSW5j
OjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkp
OwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0RGVjKFJlZ2lzdGVySUQqIHNyY0RzdCkKIHsKLSAgICBPcERlYzo6ZW1pdCh0aGlzLCBz
cmNEc3QpOworICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0RzdCwgbV9jb2RlQmxvY2stPmFkZFVu
YXJ5QXJpdGhQcm9maWxlKCkpOwogICAgIHJldHVybiBzcmNEc3Q7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjgyLDcgKzY4Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmVnaXN0ZXJJRCo+CiAgICAgICAgIGVt
aXRCaW5hcnlPcChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYzEsIFJlZ2lzdGVySUQq
IHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcykKICAgICAgICAgewotICAgICAgICAgICAgQmluYXJ5
T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcyk7CisgICAgICAgICAgICBCaW5h
cnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzLCBtX2NvZGVCbG9jay0+YWRk
QmluYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICAgICAgcmV0dXJuIGRzdDsKICAgICAgICAg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5
KFZNJiB2bSwgQ2FsbEZyYW1lKgogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
Y29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQpOwotICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFw
KCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3Rp
bGxWYWxpZCk7CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9ERkcoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJKSVQuaCIKQEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhp
dENvdW50cyhWTSYgdm0sIENDYWxsSGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAg
ICBzd2l0Y2ggKGppdC5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBl
OjpERkdKSVQ6Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRl
cjo6Y2xpcHBlZFRocmVzaG9sZChqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJn
ZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRl
cjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSklUVHlwZTo6RlRMSklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVj
dXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2Jq
ZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhl
Y3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC0zMDksMTAgKzMxMCwxNSBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxI
ZWxwZXJzCiAgICAgICAgICAgICB0cnVlQ2FsbGVyID8gQXNzZW1ibHlIZWxwZXJzOjpVc2VFeGlz
dGluZ1RhZ1JlZ2lzdGVyQ29udGVudHMgOiBBc3NlbWJseUhlbHBlcnM6OkNvcHlCYXNlbGluZUNh
bGxlZVNhdmVkUmVnaXN0ZXJzRnJvbUJhc2VGcmFtZSwKICAgICAgICAgICAgIEdQUkluZm86OnJl
Z1QyLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDQpOwogCisgICAgICAgIC8vIE9PUFM6
IENvbnNpZGVyIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIGJhc2VsaW5lIHBiL21ldGFk
YXRhIHJlZ2lzdGVycwogICAgICAgICBpZiAoY2FsbGVySXNMTEludCkgewogICAgICAgICAgICAg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVC
bG9ja0ZvcigqdHJ1ZUNhbGxlcik7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRh
YmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2Nr
LCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSk7CiAgICAgICAgICAgICBqaXQu
c3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9y
Q2FsbGVyLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVD
YWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUikpOwor
ICAgICAgICB9IGVsc2UgaWYgKHRydWVDYWxsZXIpIHsKKyAgICAgICAgICAgIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRy
dWVDYWxsZXIpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKSwgY2Fs
bGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgSklUOjpzX21l
dGFkYXRhR1BSKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5iYXNlbGluZUpJVENvbnN0YW50
UG9vbCgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9j
aywgSklUOjpzX2NvbnN0YW50c0dQUikpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpbmxp
bmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQpAQCAtNDA0LDYgKzQxMCw5IEBAIHZvaWQgYWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3Rl
cnM6OnBjR1BSKTsKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9T
UkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2UgeworICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+
bWV0YWRhdGFUYWJsZSgpKSwgSklUOjpzX21ldGFkYXRhR1BSKTsKKyAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPmJhc2VsaW5lSklU
Q29uc3RhbnRQb29sKCkpLCBKSVQ6OnNfY29uc3RhbnRzR1BSKTsKKwogICAgICAgICBjb2RlQmxv
Y2tGb3JFeGl0LT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwogCiAgICAgICAgIEJ5dGVjb2Rl
SW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzAsNiArNzMw
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAg
ICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZVRhZ0dQ
UiwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6
ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFy
Z3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVy
cyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAx
KTsKQEAgLTg4OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2Rl
KiBub2RlCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAo
aXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0gewogICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFt
ZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzQsNiArODM0LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZsZURhdGEu
Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMpOwog
ICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAg
ICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAgICAgRWRnZSBh
cmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CkBAIC05ODUs
NyArOTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAg
IAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwp
IHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0
aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJ
Qzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcgKzM5ODUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lz
dGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9y
aWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAorICAg
ICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxs
U2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVzZWRSZWdpc3RlcnMsCiAgICAgICAg
IEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRP
bmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7
CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogCkBAIC0xNDc3
Myw3ICsxNDc3Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGkK
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAg
ICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgbV9q
aXQuY29kZUJsb2NrKCksIGNhbGxTaXRlSW5kZXgpOworICAgIG1faml0LmxvZ1NoYWRvd0NoaWNr
ZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsK
ICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MzE3LDcgKzQzMTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBwYXJhbXMuZ3BTY3JhdGNo
KDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8
SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgaml0LmNvZGVC
bG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRl
eCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygp
LCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNj
ZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0
eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIp
OwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wg
PSB0cnVlOwpAQCAtMTAyODUsNiArMTAyODUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxsb2NhdGVkQXJn
czsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQo
VmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSkpOwogICAgICAgICAgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAg
ICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENh
bGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNv
ZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50aWNOb2RlT3JpZ2luKTsKQEAgLTEwNDQz
LDEzICsxMDQ0NCwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0
YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgpKTsKIAogICAg
ICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1BcmdzOworICAgICAg
ICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzaHVmZmxl
RGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKIAogICAgICAg
ICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5h
ZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwogCi0g
ICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBj
YWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsm
XSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0
YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGpp
dCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgICAgIH0p
OwpAQCAtMTA3OTIsNyArMTA3OTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0
YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0lu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAg
ICAgICAgICAgICAgfSk7CkBAIC0xMTA3Myw3ICsxMTA3NSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2Fs
bCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0
aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdU
MCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xv
dygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkKICAgICAgICAg
cmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmll
bGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxk
TmFtZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVzLm1hcCBkbyB8ZmllbGROYW1lfAorICAgICAg
ICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5hbWVb
MF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisgICAgICAgICAgICBlbmQuam9pbigiXG4iKQor
ICAgICAgICBlbmQKKworICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcywg
ZmllbGROYW1lcykKICAgICAgICAgICAgIGZpZWxkcy5tYXAgZG8gfGZpZWxkLCB0eXBlfAogICAg
ICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAotICAgICAgICAgICAgICAgICAgICAi
I3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSl9
XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7
Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUsIGZpZWxkTmFtZXMpfVxuI3twcmVm
aXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAiI3twcmVm
aXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAgICAgICAgICAgIGZp
ZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lcy5wdXNo
KGZpZWxkTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBt
XyN7ZmllbGROYW1lfTsiCiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmQuam9p
bigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIg
ICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkTmFtZXMgPSBbXQorICAgICAgICBwcmVm
aXggPSAiICAgICAgICAiCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMocHJlZml4LCBA
ZmllbGRzLCBmaWVsZE5hbWVzKQorICAgICAgICBmaWVsZHMgPSBmaWVsZHMgKyAiXG4iICsgZ2Vu
ZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCiAKICAgICAgICAgaW5p
dHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAmJiAobm90IEBpbml0aWFsaXplcnMu
ZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsNiArMzY3LDI4IEBAIHZv
aWQgQXNzZW1ibHlIZWxwZXJzOjpsb2FkUHJvcGVydHkoR1BSUmUKICAgICAgICAgcmVzdWx0KTsK
IH0KIAordm9pZCBBc3NlbWJseUhlbHBlcnM6OnN0b3JlUHJvcGVydHkoSlNWYWx1ZVJlZ3MgdmFs
dWUsIEdQUlJlZyBvYmplY3QsIEdQUlJlZyBvZmZzZXQsIEdQUlJlZyBzY3JhdGNoKQoreworICAg
IEp1bXAgaXNJbmxpbmUgPSBicmFuY2gzMihMZXNzVGhhbiwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3Mob2JqZWN0
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBuZWczMihvZmZz
ZXQpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICBKdW1wIHJl
YWR5ID0ganVtcCgpOworICAgIAorICAgIGlzSW5saW5lLmxpbmsodGhpcyk7CisgICAgYWRkUHRy
KAorICAgICAgICBUcnVzdGVkSW1tMzIoCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90
PihzaXplb2YoSlNPYmplY3QpKSAtCisgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMikgKiBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSksCisgICAgICAgIG9iamVjdCwgc2NyYXRjaCk7CisgICAgCisgICAg
cmVhZHkubGluayh0aGlzKTsKKyAgICAKKyAgICBzdG9yZVZhbHVlKHZhbHVlLAorICAgICAgICBC
YXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKK30KKwogdm9pZCBBc3NlbWJseUhl
bHBlcnM6OmVtaXRMb2FkU3RydWN0dXJlKFZNJiB2bSwgUmVnaXN0ZXJJRCBzb3VyY2UsIFJlZ2lz
dGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCkBA
IC02OTgsOCArNzIwLDEzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2
ZXMKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2Fs
bFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworfQorCit2b2lkIEFzc2VtYmx5
SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0s
IENhbGxMaW5rSW5mbyogaW5mbykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQ
UkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtU
YXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8gY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRpb25Q
dHJUYWc+KGNhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsOCArMjM0LDkgQEAgcHVi
bGljOgogI2VuZGlmCiAgICAgfQogICAgIAotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNsb2JiZXJz
IG9mZnNldC4KKyAgICAvLyBOb3RlIHRoYXQgdGhlc2UgY2xvYmJlciBvZmZzZXQuCiAgICAgdm9p
ZCBsb2FkUHJvcGVydHkoR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNldCwgSlNWYWx1ZVJlZ3Mg
cmVzdWx0KTsKKyAgICB2b2lkIHN0b3JlUHJvcGVydHkoSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJl
ZyBvYmplY3QsIEdQUlJlZyBvZmZzZXQsIEdQUlJlZyBzY3JhdGNoKTsKIAogICAgIHZvaWQgbW92
ZVZhbHVlUmVncyhKU1ZhbHVlUmVncyBzcmNSZWdzLCBKU1ZhbHVlUmVncyBkZXN0UmVncykKICAg
ICB7CkBAIC0xNzIwLDYgKzE3MjEsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHZvaWQg
ZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKKyAg
ICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBDYWxs
TGlua0luZm8qKTsKICAgICAKICAgICB2b2lkIG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwog
ICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCYXNlbGluZUpJVENv
ZGUuaCIKKworI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgor
I2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKSVRB
ZGRJQyogTWF0aElDSG9sZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE11bElD
KiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUU3ViSUMqIE1h
dGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUp
IHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVROZWdJQyogTWF0aElD
SG9sZGVyOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJl
dHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorCit2b2lkIE1hdGhJQ0hvbGRlcjo6
YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCit7CisgICAgbV9hZGRJQ3MgPSBXVEZN
b3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICBtX211bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJ
Q3MpOworICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAgbV9zdWJJ
Q3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKK30KKworQmFzZWxpbmVKSVRDb2RlOjpCYXNl
bGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUp
LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgLCBNYXRoSUNIb2xk
ZXIoKQoreyB9CisKK0Jhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSgpCit7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNl
bGluZUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jh
c2VsaW5lSklUQ29kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5j
bHVkZSAiSklUQ29kZU1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy9jbGFzcyBKSVRBZGRJ
QzsKKy8vY2xhc3MgSklUTXVsSUM7CisvL2NsYXNzIEpJVFN1YklDOworLy9jbGFzcyBKSVROZWdJ
QzsKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVuYXJ5QXJpdGhQcm9maWxlOwor
c3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxl
Oworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3MgTWF0aElDSG9sZGVyIHsKK3B1Ymxp
YzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKTsKKyAgICBKSVRB
ZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTXVsSUMqIGFk
ZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlB
cml0aFByb2ZpbGUqKTsKKworICAgIC8qCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJh
dG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUQWRkSUMqIGFkZE1h
dGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHBy
b2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdl
bmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFy
aXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFs
dWU+Ojp0eXBlPgorICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAg
ICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1
cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKyAgICAqLworCitwcml2YXRlOgorICAgIEJhZzxK
SVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKKyAgICBCYWc8
SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Cit9OworCitj
bGFzcyBKSVRDb25zdGFudFBvb2wgeworcHVibGljOgorICAgIHVzaW5nIENvbnN0YW50ID0gdW5z
aWduZWQ7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAgR2xvYmFs
T2JqZWN0LAorICAgICAgICBDYWxsTGlua0luZm8sCisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZv
LAorICAgICAgICBGdW5jdGlvbkRlY2wsCisgICAgICAgIEZ1bmN0aW9uRXhwciwKKyAgICB9Owor
CisgICAgc3RydWN0IFZhbHVlIHsKKyAgICAgICAgLy8gT09QUzogTWFrZSB0aGUgcG9pbnRlciBw
YWNrZWQuCisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgdm9pZCogcGF5bG9hZDsKKyAgICB9
OworCisgICAgSklUQ29uc3RhbnRQb29sKCkgPSBkZWZhdWx0OworICAgIEpJVENvbnN0YW50UG9v
bChKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworICAgIEpJVENvbnN0YW50UG9vbCYgb3Bl
cmF0b3I9KEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBDb25zdGFudCBhZGQo
VHlwZSB0eXBlLCB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHVuc2ln
bmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFudHMuYXBw
ZW5kKFZhbHVlIHsgdHlwZSwgcGF5bG9hZCB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzLnNpemUo
KTsgfQorICAgIFZhbHVlIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tp
XTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxWYWx1ZT4gbV9jb25zdGFudHM7Cit9OworCisK
K2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0
aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5
UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKTsKKyAg
ICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisKKyAgICBCYWc8VW5saW5rZWRDYWxsTGlu
a0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxs
TGlua0luZm9zOyAvLyBPT1BTOiBtYWtlIHN1cmUgd2UgdmlzaXQgdGhlc2Ugc29tZWhvdy4gT3Ig
YXNzZXJ0IHdlIGRvbid0IGhhdmUgdG8sIHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KKyAg
ICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAg
ICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBG
aXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAg
ICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFu
dFBvb2w7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNv
bnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUoKQogewot
ICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFk
KCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5U
aHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21w
aWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywg
ImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tl
blByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9pZCBDQ2Fs
bEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQs
IEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29kZUJsb2Nr
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1t
UHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsK
LSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRy
KHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNr
ZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxv
Y2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRl
SW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFk
b3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxw
ZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tl
dCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hh
ZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAgLTcyLDYg
KzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEKICAgICBz
dG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikpOwogfQogCisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVn
cyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0No
aWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFk
b3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgc3Rv
cmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihT
aGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9yZVB0cihzY29wZSwg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsK
KyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxs
U2l0ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJl
ZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0
LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKK3ZvaWQg
Q0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFj
a2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2Nr
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNh
bGxTaXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVkTGFtYmRh
PHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikK
IHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDE0IEBA
IHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJl
Z2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Agb2YKICAg
ICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxvZ1NoYWRv
d0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRj
aDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChH
UFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBD
b2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0
SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJ
bW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworICAgIHZvaWQg
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJl
Z3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRo
ZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2b2lkIGVu
c3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcg
c2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhD
b2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29k
ZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZm
bGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExp
c3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZl
UmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07Ci0gICAg
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVC
bG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZ2lzdGVy
QXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMyBAQCBwdWJsaWM6CiAg
ICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWduZWQgbnVtTG9jYWxzIHsg
VUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAg
ICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8gT24gb3VyIG1hY2hpbmUg
ZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1hcDxWYWx1ZVJlY292ZXJ5
PiByZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVyIHsgSW52YWxpZEdQUlJl
ZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7Cisg
ICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExp
c3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwogfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENhbGxGcmFtZVNodWZmbGVy
OjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkKICAgICAsIG1fb2xkRnJh
bWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsIG51
bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6
ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAgICAgICArIHJvdW5kQXJndW1l
bnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpCisg
ICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3Rl
cnMgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5udW1QYXJhbWV0ZXJzKSkK
ICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lz
dGVycwogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Mu
c2l6ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUgLSBtX2Fs
aWduZWRPbGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6
YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNzZWRBcmdz
KQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykKIHsKICAgICAvLyBX
ZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAgIGZvciAodW5zaWdu
ZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3ICs0MjEs
NyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhCiAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFtZUJhc2Up
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9CiAgICAgICAgIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fbmV3RnJhbWVCYXNl
LAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5h
bmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudFJlZ2lzdGVy
cygpKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVCYXNlLCBtX25ld0ZyYW1l
QmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
Zmxlci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBAQCBwdWJs
aWM6CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAgICAgIGRhdGEubnVt
TG9jYWxzID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2VkQXJncyA9IG1fbnVt
UGFzc2VkQXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9udW1QYXJhbWV0ZXJz
OwogICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJh
bWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5yZXNpemUo
YXJnQ291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsg
KytpKQpAQCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwZXJmb3JtU2FmZVdy
aXRlcygpOwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07
CisgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJl
dHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNv
ZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJbnRlcmZhY2VKSVQo
JnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51bGxwdHIpCiAgICAg
LCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2Nr
ID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwgbV9wY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxz
ZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAgIG1fcHJvZmlsZWRD
b2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9jayA9IGNvZGVCbG9j
ay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTkwLDggKzkzLDgg
QEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNraXBPcHRpbWl6ZS5h
cHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9u
Q291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2st
PmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lwT3B0aW1pemUuYXBw
ZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNv
dW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9y
UmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUp
OwpAQCAtMTEzLDE1ICsxMTYsMjEgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBv
aW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVz
cyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KQordm9p
ZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCkKIHsK
KyAgICAvLyBPT1BTOiBUYWtlIGEgYm9vbGVhbiBvciBzb21ldGhpbmcgc2F5aW5nIGlmIHdlIGNh
biBiZSBudWxsLgorICAgIGF1dG8gb2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1Nl
dCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9T
ZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOworICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVh
ZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0VmFyUmVh
ZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7
Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4
KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJS
ZWFkT25seVdhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0lu
dmFsaWRhdGVkKSkpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRj
aEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0Y2hw
b2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwg
QWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjphc3NlcnRT
dGFja1BvaW50ZXJPZmZzZXQoKQpAQCAtMTI5LDcgKzEzOCw3IEBAIHZvaWQgSklUOjphc3NlcnRT
dGFja1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJl
Z1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3Vu
bGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
cmVnVDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CkBAIC0x
ODEsMjEgKzE5MCw0MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVj
CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2RlQmxv
Y2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJU
KG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlc3Vs
dCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVj
dXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBi
cmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5j
dGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRh
VGFnKSwgcmVzdWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYgKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0
cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCByZXN1
bHQpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKK30KKwogdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogewogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVy
Ym9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7
CisgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9wcm9maWxlZENvZGVCbG9jaywgIlxu
Iik7CiAgICAgCiAgICAgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICBqaXRBc3NlcnRBcmd1
bWVudENvdW50U2FuZSgpOwogICAgIAotICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKTsKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBhdXRvJiBpbnN0cnVjdGlvbnMg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKKyAgICB1bnNpZ25lZCBpbnN0
cnVjdGlvbkNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
OwogCiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAKLSAgICBWTSYgdm0gPSBtX2NvZGVC
bG9jay0+dm0oKTsKICAgICBCeXRlY29kZUluZGV4IHN0YXJ0Qnl0ZWNvZGVJbmRleCgwKTsKKwor
ICAgIC8vIE9PUFM6IE1heWJlIG9ubHkgZG8gdGhpcyBpZiB3ZSBkaXNhYmxlIHNoYXJpbmcgc29t
ZWhvdz8KKyAgICAvKgorICAgIFZNJiB2bSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnZtKCk7CiAg
ICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVy
aXRzPFByb2dyYW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxl
UHJvZ3JhbUNvZGVCbG9jaz4odm0pKSkgewogICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlz
IG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0
bHkgb25jZS4KICAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBv
dGhlcndpc2UuIFdoZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8KQEAgLTIzNiw2
ICsyNjUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CisgICAgKi8KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmlu
Z1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
MCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewpAQCAt
Mjc4LDggKzMwOCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAg
ICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
ICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24o
KSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAg
ICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAg
ICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNv
ZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9m
ZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0
eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpA
QCAtNTI3LDcgKzU1Nyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAK
ICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2Vs
aW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBv
ZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CkBAIC01NDUsOCArNTc1LDggQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewogICAgICAgICAgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVE
ZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwg
b3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBA
ICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNjc0LDU1ICs3
MDQsNTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQog
Cit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3Rl
cnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
TWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9v
bCgpKSwgc19jb25zdGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJB
dE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCiB2
b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVC
bG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgLy8gT09QUzogTWF5YmUgdGhpcyBzaG91bGQg
YmUgZG9uZSBvbiB1bmxpbmtlZCBjb2RlIGJsb2NrPworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVs
IGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dp
dGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAgICBtX2Nh
bkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQg
PSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21w
aWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAg
bV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1pdFBy
b2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAK
LSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7Ci0gICAgY2FzZSBHbG9iYWxD
b2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToKLSAgICBjYXNlIEV2YWxDb2RlOgotICAgICAgICBt
X2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxy
ZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUg
Y2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KLSAgICAg
ICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShsZXZl
bCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29kZUJsb2NrKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2Rl
QmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRh
YmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7Ci0g
ICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlciku
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiht
X2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZXMoKSkgeworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVy
T2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3dpdGNoSnVtcFRh
YmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+
bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgICAgIGlmIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQor
ICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5n
SnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25z
OjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKQotICAgICAgICBtX2Rpc2Fzc2Vt
YmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX2NvZGVCbG9jayk7CisgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkp
KSkgeworICAgICAgICAvLyBPT1BTOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBvZmYgdW5saW5rZWQg
Y29kZSBibG9jaworICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNz
ZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICB9CiAgICAgaWYgKFVOTElLRUxZKG1f
dm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpIHsKKyAgICAgICAgLy8gT09QUzogYnVpbGQgcHJv
ZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiB1bmxpbmtlZCBjb2RlIGJsb2NrCiAgICAgICAgIG1fY29t
cGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAgICAgICAgIG5ldyBQcm9maWxlcjo6Q29tcGlsYXRp
b24oCi0gICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVC
eXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAorICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0
ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fcHJvZmlsZWRDb2RlQmxvY2spLAog
ICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpCYXNlbGluZSkpOwotICAgICAgICBtX2NvbXBpbGF0
aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBt
X2NvZGVCbG9jayk7CisgICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVz
KCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAg
IH0KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVs
KCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwpAQCAtNzQyLDExICs3NzMsMTIgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBub3AoKTsK
IAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVh
ZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgIGlmIChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgZW1p
dFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKCk7CiAKICAgICBMYWJlbCBiZWdpbkxhYmVs
KHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAgaW50IGZyYW1lVG9wT2Zmc2V0
ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUgPSAtZnJhbWVUb3BPZmZzZXQ7CiAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9mZnNldCksIGNhbGxGcmFtZVJlZ2lzdGVy
LCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxvdzsKQEAgLTc1NywxNiArNzg5LDIw
IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtb3ZlKHJl
Z1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0U2F2ZUNhbGxlZVNh
dmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdp
c3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKyAgICBl
bWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOwogCi0gICAg
aWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgeworICAgIGlmICht
X3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAg
ICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVu
dCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAmJiAoIW1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29u
c3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAxKSkg
eworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIs
IENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVkVmVjdG9y
PFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIpOworCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX3VubGlua2VkQ29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBw
cm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0
ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVl
LgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFh
cmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25z
dHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNs
dWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArODEzLDEyIEBAIHZvaWQgSklUOjpjb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAg
ICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+
dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAg
ICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50ICog
c2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQo
KSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFJFTEVBU0Vf
QVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmlsZWRDb2RlQmxvY2stPmppdFR5cGUo
KSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQogICAgICAgICBtX3ZtLT5qaXRT
aXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgKnRoaXMpOwpAQCAt
Nzk5LDI0ICs4MzUsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1z
dGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFj
a09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVCbG9j
ayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09u
RXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCByZWdUMCk7CiAKICAg
ICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2UgbmV2ZXIgcmVxdWlyZSBh
cml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fY29kZUJsb2NrLT5t
X251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0g
RnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgeworICAgIGJvb2wgcmVxdWlyZXNB
cml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpICE9IDE7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYm
IHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hlY2sgPSBsYWJlbCgpOwot
ICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgICAg
ICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShyZWdU
MCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDAsIENvZGVC
bG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkpOwogCiAgICAgICAgIGxvYWQz
MihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwg
cmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1t
MzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlz
KTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1f
dW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtUbyhiZWdpbkxhYmVsLCB0
aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogCiAg
ICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29kZUJsb2NrLT5pc0NvbnN0
cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFy
aXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgYXJndW1l
bnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhj
ZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNv
bnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgYXJndW1lbnRHUFIw
KTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04MzksNyArODc4LDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBtX2Rpc2Fzc2Vt
Ymxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0
Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5r
QnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlBy
b2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVu
aXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fdW5saW5rZWRDb2Rl
QmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKICAgICBs
aW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4OTcsOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAg
IHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkltbWVk
aWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcjogewotICAgICAgICAg
ICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBT
aW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxl
JiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgbGlua2Vk
VGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRh
Zz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2VkVGFibGUubV9icmFuY2hP
ZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0g
dW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEsOCArOTEwLDggQEAgdm9p
ZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OlN0
cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9j
b2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAg
IGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlEZWZhdWx0ID0gcGF0
Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZz
ZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yIChhdXRvJiBsb2Nh
dGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMoKSkgewogICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNoT2Zmc2V0OwpAQCAtOTA2
LDMyICs5NDUsMzUgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7CiAgICAgfQogCi0gICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNo
ZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVD
YWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVz
KG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9k
ZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlW
YWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRzLCBw
YXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5VmFscywgcGF0Y2hC
dWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIHBhdGNoQnVm
ZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBw
YXRjaEJ1ZmZlcik7CisgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2VuZXJhdG9y
cykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAgICAgICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxK
SVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAgICAgICB9CisgICAg
fTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0
QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMpOworICAgIGZpbmFs
aXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlWYWxzKTsKKyAgICBm
aW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFscyk7Cisg
ICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlWYWxzKTsK
KyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3ByaXZh
dGVCcmFuZEFjY2Vzc2VzKTsKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9j
YWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21w
aWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMo
Ci0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNv
bXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbikp
OworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8u
dW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGluZm8uZG9uZUxvY2F0aW9uID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxv
Y2F0aW9uKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENv
ZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsg
Ynl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKLSAg
ICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKLSAgICAgICAg
ICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9m
ZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0
ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxvY2stPnNldEpJVENv
ZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKSk7CisgICAgSklUQ29kZU1hcEJ1aWxk
ZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7
CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKKyAgICAgICAg
ICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29k
ZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fz
c2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk4MiwzNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAg
fQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7CisgICAgICAgIC8vIE9PUFM6
IG1ha2UgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91dCB1bmxpbmtlZCBDQj8KICAgICAgICAg
aWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKQogICAgICAgICAg
ICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21waWxhdGlvbi5nZXQoKSwg
cGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENv
bXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CisgICAgICAgIG1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9maWxlZENvZGVCbG9jaywg
Km1fY29tcGlsYXRpb24pOwogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1h
a2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAgCisgICAgLy8gT09QUzogTWFrZSBhIHZlcnNpb24g
b2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBVbmxpbmtlZENvZGVCbG9j
ay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUoCiAg
ICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgSklU
IGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJCYXNlbGluZSBKSVQg
Y29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wcm9maWxlZENv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2ppdENv
ZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IEJh
c2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENvZGUt
Pm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2ppdENv
ZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOwor
ICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1vdmUobV91bmxpbmtlZFN0
dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1f
c3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5t
X2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOworICAgIG1faml0Q29k
ZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2RlLT5tX2NvbnN0YW50UG9v
bCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOwogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAs
ICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgp
LnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2Vk
UHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBb
JXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5
KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5k
KCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVP
bk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVh
ZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNDb21waWxh
dGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICsxMDIxLDIxIEBAIENvbXBpbGF0aW9uUmVzdWx0
IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRocmVh
ZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zaHJp
bmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7Ci0gICAg
fQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNl
cHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBt
X2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8gRklYTUU6IDxyZGFy
Oi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IG1fY29k
ZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSku
cmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9CisgICAgLy8gT09QUzog
RG9uJ3QgdGhpbmsgdGhpcyBzaHJpbmsgaXMgcmVhbGx5IGRvaW5nIGFueXRoaW5nIGFueW1vcmUu
IFZlcmlmeS4KKyAgICAvL3sKKyAgICAvLyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1f
Y29kZUJsb2NrLT5tX2xvY2spOworICAgIC8vICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChs
b2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7CisgICAgLy99CiAKKyAg
ICAvLyBPT1BTOiBtX3BjVG9Db2RlT3JpZ2luTWFwIHNob3VsZCBsaXZlIG9uIEJhc2VsaW5lSklU
Q29kZSBmb3IgYmFzZWxpbmUgY29kZWJsb2Nrcy4KICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1h
cCkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9w
Y1RvQ29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5zZXRQQ1Rv
Q29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKIAogICAgIG1fdm0t
Pm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+YWRkKAogICAg
ICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgpKSAvCi0gICAgICAgIHN0
YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOworICAg
ICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9u
c1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLnJlbGVh
c2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNv
ZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIENvbXBpbGF0aW9u
U3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTA0NywxMSBAQCBzaXplX3QgSklUOjpjb2RlU2l6
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZlci0+c2l6ZSgpOwogfQogCi1Db21waWxh
dGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9y
dCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBkb01haW5UaHJlYWRQ
cmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAg
cmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVCbG9jayk7CiB9CiAKIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKQEAgLTEwNDIsMTggKzEwOTEsMjggQEAg
dm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwogICAgICAgICBtX3ZtLT50
eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQcmVwYXJpbmcgZm9y
IEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJD
b3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3Rl
ckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgQVNTRVJUKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSA9PSBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7CiAKICAgICByZXR1
cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJPZmZzZXQoY29kZUJsb2Nr
LT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdp
c3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sq
IGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9j
ay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNl
dEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJldHVybiB2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9m
ZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2st
PnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IEpJ
VDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBy
ZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYg
KzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWwsIGV4cGVjdGVkKSBB
U1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wi
IHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4
cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAorI2luY2x1ZGUgIkJhc2VsaW5l
SklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQ
YXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgpAQCAtNDQsNiArNDUsNyBAQAog
I2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3Iu
aCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgog
I2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5o
IgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTE0OSwxNCArMTUxLDE0IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExp
bmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0Nv
bnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhS
ZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1
bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBK
U0ludGVyZmFjZUpJVCB7CisgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJs
aWMgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxs
OwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBKSVRUaHVua3M7CkBAIC0xNzEsNiArMTczLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJs
ZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
cGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0g
SlNJbnRlcmZhY2VKSVQ7CisKICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9j
ayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0g
Qnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTE3OCwyOCArMTgyLDMzIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VK
SVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5h
bGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9u
TWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7
CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsK
ICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnBy
aXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxv
Y2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAg
ICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9y
KFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lz
dGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21waWxlVGltZSgp
OwogCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIgPSBMTElu
dDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSOworICAgICAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzX2NvbnN0YW50c0dQUiA9IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSOworCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAgICAgICAg
IHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCk7CiAgICAgICAgIHZvaWQgbGluaygpOwotICAgICAgICBDb21waWxhdGlv
blJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgICAgIENv
bXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKENvZGVCbG9jayosIEpJVENvbXBpbGF0aW9u
RWZmb3J0KTsKIAogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRo
b3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCkBAIC0yMjMsNiArMjMyLDMyIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25z
dCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25z
dCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0
IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9y
ZThUb01ldGFkYXRhKFZhbHVlVHlwZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsK
KworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3Rv
cmUzMlRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOwor
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0
LCBHUFJSZWcpOworCisgICAgcHVibGljOgorICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNp
Z25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQg
bG9hZEdsb2JhbE9iamVjdChHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25z
dGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisKKyAgICAgICAgdm9pZCBlbWl0UHV0Q29k
ZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1QwKTsKKwogICAgICAg
ICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRvSGFuZGxlcikKICAgICAgICAgewogICAg
ICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpAQCAtMjU4
LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8
CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNv
ZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlE
ICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFu
dCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9w
OjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9D
b25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wg
Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVu
bGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAg
ICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21waWxl
Q2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKQEAgLTI4NywxNCArMzIyLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0
ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJp
ZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOwor
ICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAogICAgICAgICAv
LyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQg
dGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJv
ZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFk
YXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcpOwotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOworICAgICAgICAvL3ZvaWQgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29u
c3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29k
ZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgSlNWYWx1ZVJl
Z3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJv
ZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+
IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKQEAg
LTMwNSw4ICszNDEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQ
cm9maWxlPjo6dmFsdWUsIHZvaWQ+CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlBy
b2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsKIAotICAgICAgICB2b2lkIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZSosIFJlZ2lz
dGVySUQgc2NyYXRjaEdQUik7Ci0gICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJl
Z2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0
ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBwdHJkaWZmX3QsIFJlZ2lzdGVy
SUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3ApOwpAQCAtNTkzLDcgKzYz
MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNywxNCArNjY0LDE0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAog
ICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBl
KTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwg
QWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdp
c3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHks
IEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlD
aGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgZW1pdFZh
clJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICAgICAgICAg
dm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7
CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQpA
QCAtNjQ2LDcgKzY4Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQg
ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFu
ZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAg
ICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZv
aWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAg
ICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NSw2ICs2OTIsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdp
c3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxS
ZWdpc3Rlcik7CkBAIC02OTYsMjYgKzczNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJl
c29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9
CiAKLSNkZWZpbmUgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUp
IFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
b3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAg
IEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikK
LSN1bmRlZiBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRo
dW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVz
ZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgot
ICAgICAgICAgICAgLy8gUmVzb2x2ZWRDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRo
ZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29wZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJl
c29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVW
YXIpOwotICAgICAgICB9Ci0KLSNkZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRP
UihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihW
TSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BF
X0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRl
T3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25z
dCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mLCBzdGQ6Om9w
dGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKIAogICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzRmFsc2V5
R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mKTsKQEAgLTc2MCwxMCArNzgw
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBl
bmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2b2lkIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4K
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgQWRkcmVzcywg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVj
b2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7Cisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0
ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAg
ICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhh
c1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjEsMjAgKzg0MSwyMCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRk
cmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7CiAgICAgICAgIH0KIAot
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlw
ZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGUs
IHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFj
cm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRh
ZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNl
dHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
bWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2Rl
LCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4gQXJncz4K
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgQnl0ZWNv
ZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25U
cmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAg
c2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0LCBhcmdz
Li4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRyZXNzKEdQUkluZm86Om5vbkFy
Z0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNv
ZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7
CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0
eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE5LDI1ICs5MzksMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0
dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5s
aW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAgICAgYm9v
bCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9
CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGllcmVkIGNv
bXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxsIGNvZGUg
Z2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1
cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgZW1pdE1hdGVyaWFsaXplTWV0YWRh
dGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAgICAgICB2b2lkIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMo
KTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAgICAgICAK
LSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRhZGF0
YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jv
c3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KLSAg
ICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBi
eSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQ
dXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCiAgICAg
ICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjQsOSArOTc5LDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsK
ICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNo
TWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFz
aE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7
Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0
IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKQEAgLTEwMDAsMTEgKzEwMTIsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJh
dGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAg
ICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVk
T3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAg
Qnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVm
UHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAgICAgICAgQ29kZUJsb2NrKiBtX3Byb2Zp
bGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogbV91
bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKworICAgICAgICBNYXRoSUNIb2xkZXIgbV9t
YXRoSUNzOworICAgICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENvZGU7CisKKyAg
ICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAgICAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZv
PiBtX3VubGlua2VkQ2FsbHM7CisgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxM
aW5rSW5mb3M7CisgICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlu
a2VkU3R1YkluZm9zOworICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dp
dGNoSnVtcFRhYmxlczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAgc3RydWN0IE5vdEFDb2RlQmxvY2sgeyB9
IG1fY29kZUJsb2NrOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAyODI2NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMjAsNyArMzIxLDggQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAg
ICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25a
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChW
aQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qy
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywg
cmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGlu
dmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzc1LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
UkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIs
IHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVy
dCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTU3
Myw3ICs1NzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgCiAK
ICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdU
MywgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGlu
dmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAg
LTcxNyw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3Ry
CiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJ
VE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVROZWdJQyogbmVn
YXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOwogICAgIC8v
IEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5l
Z2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ0Zh
c3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRo
TmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5MDQsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjpl
bWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJ
VEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwor
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxv
Y2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1f
cHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3MuYWRkSklUQWRk
SUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1
ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3Qo
SklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5n
ZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdl
bmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
c2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2Zp
bGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVn
cywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNj
cmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUsMTAgKzEwMjEsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgICAgICBlbHNl
IGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0
UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBz
Y3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJl
Z3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwxMyArMTA2MiwxNCBAQCB2
b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAjZW5kaWYKIAogICAgIFVu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hv
dWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBU
cnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVn
cywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7
CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIHNy
Y1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJl
dF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRy
dXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklU
T3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3Jj
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRT
KQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwxMyArMTEyOCwxNCBA
QCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAjZW5kaWYKIAogICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUo
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0
YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3Ms
IHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3
aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiks
IHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1h
dGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBs
ZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0
aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3Bl
cmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0
aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdz
LCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9J
Q19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExNjYsNyArMTE3
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxk
RW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Cisg
ICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFBy
b2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tX3Byb2ZpbGVJbmRleCk7CiAK
ICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5m
aXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVy
YW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjIwLDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFBy
b2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tX3Byb2ZpbGVJbmRleCk7Cisg
ICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7
CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElD
KTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIy
Nyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdAog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJp
dGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3Vu
bGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFN1Yj4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9tYXRo
SUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElD
LmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1
Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwg
b3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDcg
QEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAgICAgc3RvcmVQdHIoY2FsbEZy
YW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQo
KSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBy
ZWdUMik7CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKGNvbnN0IAogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwogICAgIGVt
aXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zMjQsNyArMzI0LDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dD
YXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
ICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1
bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDcgKzM0MSw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFy
dCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAt
MzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDYWxsRnJh
bWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVElubGlu
ZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJT
ZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUg
IlN0YWNrQWxpZ25tZW50LmgiCkBAIC00NCw3ICs0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3Am
IGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3Io
Ynl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3Rlcigp
LCByZWdUMCk7CiB9CiAKQEAgLTUzLDE4ICs1NCwxOCBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAg
IE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2Nv
bnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJh
cmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwg
dm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlu
a0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA9IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKICAgICBp
bnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNldEluUmVnaXN0
ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCisKICAgICBpZiAoT3A6Om9wY29k
ZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZy
YW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1
bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgIHN0
b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0YSwgY2hlY2twb2ludCkuYWRkcmVz
c09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEocmVn
VDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsg
TExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6
Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMp
OwogICAgIH0KIApAQCAtNzgsNyArNzksNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpv
cGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVj
dF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8
IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4K
LUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8q
IGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtOTEsNyArOTIsOCBA
QCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVP
cGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVs
c2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7
Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFy
QXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0
aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJz
dFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVy
KSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BS
LCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25t
ZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CkBAIC0xMDEsMTQgKzEwMywxNiBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3
YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9w
ZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRp
b24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJl
Z1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1QzLCByZWdUMSwgcmVn
VDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
cmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCBy
ZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwg
cmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZv
Q29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZv
OjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CisgICAg
SnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CisgICAgc3Rv
cmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAg
ICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEzMSwxNiBAQCBib29s
IEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpj
b21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxs
RnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNl
dCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFyZ3VtZW50
R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlZ1QxLCByZWdUMik7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1Qw
KSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwg
YXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXR1cm5W
YWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogCkBAIC0xNDgs
NyArMTUyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxv
Y2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENh
bGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwg
cmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKQEAg
LTE1Niw0MyArMTYwLDQ3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25z
dCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lz
dGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9i
amVjdCgqbV92bSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3Am
LCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKLXsKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwo
Y29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50KSB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29s
IEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBDYWxsTGlu
a0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQorYm9vbCBKSVQ6OmNvbXBp
bGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0lu
Zm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewotICAgIENhbGxGcmFtZVNodWZmbGVEYXRh
IHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5t
X2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQorICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENh
bGxGcmFtZVNodWZmbGVEYXRhPigpOworICAgIHNodWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0g
Ynl0ZWNvZGUubV9hcmdjOworICAgIHNodWZmbGVEYXRhLT5udW1QYXJhbWV0ZXJzID0gbV91bmxp
bmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworICAgIHNodWZmbGVEYXRhLT5udW1iZXJU
YWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworICAgIHNodWZmbGVEYXRh
LT5udW1Mb2NhbHMgPQogICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXpl
KGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1ZmZsZURhdGEtPmFyZ3MucmVzaXplKGJ5dGVjb2Rl
Lm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsg
KytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAgICBzaHVmZmxlRGF0
YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3Rh
Y2soCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7
CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVl
U2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7Ci0gICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0
YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6
OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxl
ZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0
YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxl
RGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5m
b0NvbnN0YW50LCByZWdUMik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0gewor
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgKnNodWZmbGVEYXRhKS5wcmVwYXJlRm9y
VGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworCisgICAg
c2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CisgICAgaW5mby0+ZnJhbWVTaHVmZmxlRGF0YSA9
IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgp
OwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0
aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjE4LDE0ICsyMjYsMjUgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFs
aXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxs
RnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KLSAgICBDYWxsTGlua0luZm8qIGlu
Zm8gPSBudWxscHRyOwotICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAg
IGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOworCisgICAg
VW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0gVUlOVF9NQVg7CisgICAgaWYgKG9wY29kZUlEICE9
IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBpbmZvID0gbV91bmxpbmtlZENhbGxzLmFkZCgpOwor
ICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBp
bmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpOworCisg
ICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAgICAgQVNTRVJUKG1fY2FsbENvbXBp
bGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CisgICAgICAgIG1f
Y2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlua0lu
Zm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50OworICAgIH0KKyAgICBjb21w
aWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAogICAgIC8vIFNQIGhvbGRz
IG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENv
dW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2NrLT5i
eXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBD
YWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIs
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAtMjM0
LDE2ICsyNTMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRl
eCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2Rl
SUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGls
YXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNv
ZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5
dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkKICAgICAgICAg
cmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFudCwgcmVnVDIpOwogICAgIGlm
IChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBpbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5r
SW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZd
IHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHBy
ZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9KTsKQEAgLTI1MywxMyArMjY4
LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRo
KCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAg
IGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIGFk
ZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVt
aXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCArMjg4LDIwIEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNs
b3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAg
IGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNh
bGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CisgICAgQ2Fs
bExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlzLCByZWdUMik7CiAKICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykg
ewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcgKzQxMCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
dGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2
bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIG1v
dmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlwZTo6
R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5
SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
bmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0R1BSKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQpAQCAtNDE2LDEwICs0
NDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQo
anVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEdQUlJlZyBp
dGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgbm90T2Jq
ZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsKICAgICBub3RPYmplY3Qu
YXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBAIC00MzIsMTkgKzQ1OCwx
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsK
LSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFk
ZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIG5l
eHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRlcmF0b3JHUFIsIGFyZ3Vt
ZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBhdXRvIGRvbmUgPSBqdW1w
KCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RP
YmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00NTIs
NyArNDc2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4
dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKICAgICAgICAgc3dpdGNo
IChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0
ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0OTMsNzcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1bXAgZmFzdENhc2UgPSBi
cmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAKICAgICBn
ZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFk
YXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAgbG9hZDhGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25N
ZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpLCBy
ZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0
aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMCwg
Ynl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRh
ZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpKTsKICAg
ICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIC8vIGNhbGwg
cmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAgICBHUFJSZWcg
dmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwotICAg
IEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3aWxsIGdldCB0
cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2YWx1ZUdQUiwg
aXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBpdGVy
Q2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBt
b3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7
Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIp
OworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAg
ICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7Cisg
ICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChC
eXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAot
ICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
Zmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJl
c3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
Qnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywK
KyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5
SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93
Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25l
R1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwg
ZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0K
ICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgICAgICBHUFJSZWcg
c2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhkb25l
R1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAg
ICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1
dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIp
OworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwg
SlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdU
MSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxHUFIpOworCisgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYmFz
ZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCku
cHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7
IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25E
b25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1NzcsNTUgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpzY3JhdGNoOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJh
dG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5
dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAog
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmpl
Y3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRH
UFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxS
ZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnBy
b3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChi
cmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBl
bmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxs
IGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFy
Z0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJS
ZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25l
VlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRH
UFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworCisgICAgICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNh
bGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVt
cCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0
ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAg
IAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1
bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgp
LnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0
cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7CiAKIG5h
bWVzcGFjZSBERkcgewpAQCAtMTU5LDEwICsxNjAsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAgICB7Ci0gICAgICAgIGlmICghT3B0
aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlm
IChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5n
SklUKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vz
cy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0
dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUg
aml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlw
ZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVC
bG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6
IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxv
Y2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZv
KCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9z
dHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBA
IHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXIm
IGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7
Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyht
X2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
cjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xv
d1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsK
IH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BS
KQoreworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRD
b2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5m
bywgc3R1YkluZm9HUFIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJv
dXRpbmVQdHJUYWcpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRCeUlkR2Vu
ZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRU
eXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJ
bmZvR1BSKQpAQCAtMTEwLDcgKzExOCw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5
SWRHZW5lcmF0b3IKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZv
R1BSLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVC
bG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdp
c3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3Mo
cHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGguaW1wbCgpKQorICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhjb2RlQmxvY2sgJiYgcHJvcGVydHlO
YW1lLnVpZCgpID09IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgp
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQ
UigpKTsKIH0KQEAgLTEyMCw2ICsxMjgsMzQgQEAgdm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpn
ZW5lcmF0ZUZhc3RQYQogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIG1faXNMZW5ndGhBY2Nl
c3MgPyBJbmxpbmVBY2Nlc3M6OnNpemVGb3JMZW5ndGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6
c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCit2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6
OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1Yklu
Zm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1
c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAg
ICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcg
YmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRj
aCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBHUFJSZWcgcmVzdWx0
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisKKyAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIGdv
U2xvdyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlk
U2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWRQcm9wZXJ0eShiYXNlLCBzY3Jh
dGNoLCBKU1ZhbHVlUmVncyB7IHJlc3VsdCB9KTsKKyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1
bXAoKTsKKworICAgIGdvU2xvdy5saW5rKCZqaXQpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0
cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0KTsK
KyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKworCiBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIENhY2hl
YWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIHZhbHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTM4LDYgKzE3NCwzNCBA
QCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2VuZXJhCiAgICAgZ2VuZXJhdGVG
YXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9
CiAKK3ZvaWQgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9H
UFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkp
OworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChz
dHViSW5mbywgc3R1YkluZm9HUFIpOworCisgICAgLy8gT09QUzogc2hhcmUgY29kZSB3LyBKSVRH
ZXRCeUlkR2VuZXJhdG9yCisgICAgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEdQUlJlZyByZXN1bHQgPSBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBnb1Nsb3cg
PSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZP
ZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHJvcGVydHkoYmFzZSwgc2NyYXRjaCwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7
CisKKyAgICBnb1Nsb3cubGluaygmaml0KTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSks
IEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAg
bV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5
SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcg
c2NyYXRjaCwgCkBAIC0xNDksNiArMjEzLDM0IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1
dEJ5SWRHZW5lcmF0b3IKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzLmNsZWFyKHNjcmF0
Y2gpOwogfQogCit2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQ
UikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7
CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0
dWJJbmZvLCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6c2NyYXRjaDsKKyAgICBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIEdQUlJlZyB2YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6dmFsdWU7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAg
ICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIGdvU2xvdyA9IGppdC5icmFuY2gzMihD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUoKSkpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRj
aCk7CisgICAgaml0LnN0b3JlUHJvcGVydHkoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBiYXNlLCBz
Y3JhdGNoLCBzY3JhdGNoMik7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAg
ICBnb1Nsb3cubGluaygmaml0KTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25l
ID0gaml0LmxhYmVsKCk7Cit9CisKIHZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVG
YXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQogewogICAgIGdlbmVyYXRlRmFzdENvbW1vbihq
aXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5UmVwbGFjZSgpKTsKQEAgLTMwMCw2ICsz
OTIsMzEgQEAgdm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdAogICAgIGdl
bmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNz
KCkpOwogfQogCit2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BS
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsK
KworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1
YkluZm8sIHN0dWJJbmZvR1BSKTsKKworICAgIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0
ZXJzOjpyZXN1bHQ7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZXN1bHQpOworICAgIGF1dG8gZ29TbG93ID0gaml0LmJyYW5jaDMyKENDYWxs
SGVscGVyczo6Tm90RXF1YWwsIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
KCkpKTsKKyAgICBqaXQuYm94Qm9vbGVhbih0cnVlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdCB9KTsK
KyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIGdvU2xvdy5saW5rKCZqaXQp
OworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwor
CisgICAgZmluaXNoZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30K
KwogSklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6SklUSW5zdGFuY2VPZkdlbmVyYXRvcigKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwKICAgICBjb25zdCBSZWdpc3RlclNldCYg
dXNlZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgcHJvdG90
eXBlLCBHUFJSZWcgc3R1YkluZm9HUFIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODI2NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVk
ZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvblZhbGlkYXRpb24uaCIKICNp
bmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1
ZGUgIlB1dEtpbmQuaCIKQEAgLTM4LDExICszOSwxMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFz
cyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVC
bG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsK
IGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKK3N0cnVjdCBCYXNlbGluZURlbEJ5VmFs
UmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6
cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Qz
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsK
K307CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZv
OjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJl
Z1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdU
MzsKK307CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICAvLyBXZSBy
ZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVn
aXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgorICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHBy
b3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0
aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOwor
ICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJ
bmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUklu
Zm86OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5m
bzo6cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUkluZm86OmFyZ3VtZW50R1BSMzsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OmFyZ3VtZW50
R1BSMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86Om5v
bkFyZ0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZv
Ojpub25BcmdHUFIxOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
X2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1Qz
OworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0
QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1
bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdGhpc1ZhbHVlID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBH
UFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BS
SW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnMgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjpyZWdUMTsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5SWRSZWdpc3Rl
cnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitz
dHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9m
aWxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJyYW5kID0gR1BSSW5mbzo6cmVnVDE7
CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJh
c2UpOworICAgIHN0YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BS
SW5mbzo6cmVnVDI7Cit9OworCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90
ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDE1ICsxNjgs
MjEgQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZmZXImIGZh
c3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAogICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwotICAgIAor
CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQg
c3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIgfTsKKyAgICB1bnNp
Z25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBt
X3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbV9zbG93UGF0aEJlZ2luOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1Bh
dGhDYWxsOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOyAvLyBPT1BT
OiBtYWtlIHJlcG9ydENhbGwgcGFzcyBzb21ldGhpbmcgaW4gd2UgY2FuIHVzZSBmb3IgdGhlIG5v
bi1DVEkgdGh1bmtzIGJ1aWxkcy4gCiB9OwogCiBjbGFzcyBKSVRCeUlkR2VuZXJhdG9yIDogcHVi
bGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTk4LDcgKzIxMCw3IEBAIHByb3RlY3Rl
ZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAot
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworcHVibGljOgogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTExLDYgKzIyMyw3IEBAIHB1
YmxpYzoKICAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJl
ZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQ
YXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BS
KTsKIAogcHJpdmF0ZToKICAgICBib29sIG1faXNMZW5ndGhBY2Nlc3M7CkBAIC0xMjQsNiArMjM3
LDcgQEAgcHVibGljOgogICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBD
YWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxl
SWRlbnRpZmllciwKICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVSZWdzIGJhc2Us
IEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCisgICAgdm9pZCBn
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25z
dGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImKTsKIH07CiAKQEAgLTEzMiwxMCArMjQ2LDExIEBAIHB1YmxpYzoKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRv
cigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRl
eCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIs
IEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1
YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CisgICAgICAgIENv
ZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAgICAgICBKU1Zh
bHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJS
ZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVG
YXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5m
b0dQUik7CiAgICAgCiAgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0aW9u
KCk7CiAKQEAgLTE2MywxMSArMjc4LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZh
c3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9i
YXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKQEAgLTE5MSw4ICszMDQsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVy
YXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBt
X3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjcsNiBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hh
YmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNTAsNiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0
ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI1NSw2ICszNjIsNyBA
QCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBH
UFJSZWcgc3R1YkluZm9HUFIpOwogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwg
dW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIH07CiAKIGNs
YXNzIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IgewpAQCAtMjc3LDggKzM4NSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmluYWxp
emUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExp
bmtCdWZmZXIpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsK
IApAQCAtMzAyLDExICs0MDgsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZh
c3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9i
YXNlOwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0OwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0
aEp1bXA7CiB9OwogCkBAIC0zMzAsOCArNDM0LDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQg
Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVK
dW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzggQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91
YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkg
JiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAoIXNyYy5pc0Nv
bnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKK30KKworQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVy
IHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3Rh
bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBPT1BTOiBmaW5kIGEgd2F5IHRvIGFz
c2VydCB0aGF0IGFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0Nl
bGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwot
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7Cisg
ICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiArMTgxLDM2IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRpZgogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNl
bHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0
dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIp
KTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNzIGZ1
bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVz
cyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5W
YWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVS
ZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0
LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogfQogCiBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcp
KQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6
OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1f
Ynl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQi
KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4
KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmlu
c3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9i
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9j
aGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcg
KzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsK
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0
aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlu
c3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNT
RVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+
aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAx
KTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJ
bmRleCk7CkBAIC0yOTMsMjkgKzMxOCwzMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwotfQotCi1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2Zp
bGUsIEpTVmFsdWVSZWdzIHZhbHVlKQotewotICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5n
KCkpOwotCi0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUg
YnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVj
a2V0cyk7Ci0jZWxzZQotICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBi
aXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tl
dHMpOwotICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRz
LnBheWxvYWQpOwotICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0Jp
dHMudGFnKTsKLSNlbmRpZgotfQorICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlu
a1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30KKworLy9pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFs
dWVSZWdzIHZhbHVlKQorLy97CisvLyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsK
Ky8vCisvLyAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBi
dWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lm
IFVTRShKU1ZBTFVFNjQpCisvLyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUu
bV9idWNrZXRzKTsKKy8vI2Vsc2UKKy8vICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmls
ZS5tX2J1Y2tldHMpOworLy8gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlw
dG9yLT5hc0JpdHMucGF5bG9hZCk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVz
Y3JpcHRvci0+YXNCaXRzLnRhZyk7CisvLyNlbmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpN
ZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2Vu
ZGlmCkBAIC0zMjMsNDEgKzM1Miw0MiBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJv
ZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBK
U1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZv
cihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKworICAg
IHB0cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNl
dEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVPZmZzZXRGb3I8Qnl0ZWNv
ZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRP
ZkZpcnN0QnVja2V0KCk7CisgICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgQWRkcmVzcyhzX21ldGFk
YXRhR1BSLCBvZmZzZXQpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQ
UlJlZyByZXN1bHRSZWcpCi17Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2Zp
bGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwotfQorLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyByZXN1
bHRSZWcpCisvL3sKKy8vICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBK
U1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKy8vfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0
YWRhdGEsIEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CiB9CiAjZW5kaWYKIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BS
KQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZm
X3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBz
Y3JhdGNoR1BSKQogewogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIGFy
cmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3Rv
cmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxl
KTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJl
Z2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCiB7
Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBsb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhcnJheVBy
b2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpKTsK
LSAgICB9CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRl
Y29kZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9m
ZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3JhdGNoR1BSKTsKIH0KIAog
QUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxS
ZWdpc3RlciBzcmMpCkBAIC0zODAsNyArNDEwLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9
IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25z
dGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVz
c0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTI2LDcgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAg
ICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTM2LDcgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3du
Q2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0LDExICs1NDQsNiBAQCBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAgICAgfQogfQogCi1BTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZp
cnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU2OSwxNyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7
IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKICAgICBpZiAo
c3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwot
ICAgICAgICBlbHNlCisgICAgICAgIHN3aXRjaCAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkgeworICAgICAgICBjYXNlIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBtb3ZlKEltbTY0KEpT
VmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChz
cmMsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC01NjYsMTEgKzU5Nyw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwog
fQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFs
UmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZy
b20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNTk1LDcgKzYy
MSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKIAogQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQg
cmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tu
b3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHZSZWcpKQogICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAtNjM3LDMwICs2NjMsNyBAQCBB
TFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7CiAgICAgaWYgKHRhcmdl
dCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPm91dE9m
TGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1BTFdBWVNfSU5MSU5FIEdldFB1dElu
Zm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSBieXRlY29kZSkKLXsKLSAgICB1
bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQgKyAxOyAvLyBIYXNoTWFwIGRvZXNu
J3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkR2V0UHV0SW5m
b3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdldFB1dEluZm9zLmVu
ZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFsdWUpOwotICAgIEdl
dFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2dl
dFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBnZXRQdXRJbmZvLm9w
ZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0aFByb2ZpbGUgSklUOjpjb3BpZWRB
cml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0gICAgdWludDY0X3Qga2V5ID0gKHN0
YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpICsgMSkgPDwgMzIgfCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0YUlEKTsKLSAgICBhdXRvIGl0ZXJh
dG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3Ig
IT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlcmF0b3It
PnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgbV9jb3BpZWRBcml0aFBy
b2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJuIGFyaXRoUHJvZmlsZTsK
KyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0
cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjgxLDYgKzY4NCw2MSBA
QCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0dXJuIEVD
TUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYg
Ynl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQz
MkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQ
UlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxp
bmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUp
ICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQ4KEFk
ZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZz
ZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSB2YWx1ZSwgY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlOCh2YWx1ZSwgQWRk
cmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNl
dEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmUzMlRvTWV0YWRh
dGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQp
Cit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBv
ZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHNfbWV0YWRhdGFHUFIsIHJlc3VsdCk7Cit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvbnN0YW50SW5k
ZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRHbG9i
YWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9nbG9iYWxPYmpl
Y3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENv
ZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BSUmVnIHJlc3VsdCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOworICAgIC8vIE9P
UFM6IE1heWJlIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudD8KKyAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJl
c3MocmVzdWx0LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkpLCBy
ZXN1bHQpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlc3VsdCwgY29uc3RhbnQudG9Db25zdGFudElu
ZGV4KCkgKiBzaXplb2YoSlNWYWx1ZSkpLCByZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlv
CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0
ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3Vu
bGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7
CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUik7CkBAIC05OTcsNyArOTk3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2ltbShjb25zdCBJbnN0cgogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRj
aCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBt
X2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7
CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEw
MjQsNyArMTAyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QK
IAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFj
ayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJs
b2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRj
aGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZh
dWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVu
c3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDQyLDcgKzEwNDIsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAKICAgICAvLyBjcmVhdGUganVt
cCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVt
ZW50LgogICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVs
dE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVD
VElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBACiAj
aW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgi
CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTQsMTEgKzU2LDIyIEBAIHZvaWQgSklUOjplbWl0
X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0
ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICgh
dmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwotICAgICAgICBlbHNlCisgICAg
ICAgIC8vIE9PUFM6IG1vc3QgIk90aGVyIiBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3Rh
bnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQgZnJvbSB0aGUgVW5saW5rZWRDb2RlQmxvY2suIEl0J3Mg
anVzdAorICAgICAgICAvLyBhIGNvdXBsZSB0eXBlcyB0aGF0IGNhbid0LiBDcmVhdGUgYW4gYWJz
dHJhY3Rpb24gZm9yIHRoYXQuCisKKyAgICAgICAgc3dpdGNoIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpKSB7CisgICAgICAgIGNhc2Ug
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAgICBjYXNlIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIHN0b3Jl
NjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
bG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChy
ZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODcsMzcgKzEwMCwzNSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVj
dHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9j
YXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxsb2NhdG9yIGFs
bG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVj
dD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVy
SUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVn
VDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKIAotICAgIGlmICghYWxs
b2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVsc2UgewotICAgICAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZElt
bVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBK
SVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAg
ICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7Ci0gICAgICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSAr
IE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpLCBhbGxvY2F0b3JS
ZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJlZyk7CisKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxw
dHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2
YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBzY3JhdGNo
UmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1
cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBlbWl0SW5pdGlh
bGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKKyAgICBtdXRhdG9yRmVu
Y2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwor
CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKKwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0o
KSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTEzMSw3ICsxNDIsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlciho
YXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtu
b3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJ
bnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJv
bEZ1bmN0aW9uKCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBKdW1wIGN1
c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fZnVuY3Rpb25Qcm90b0hh
c0luc3RhbmNlU3ltYm9sRnVuY3Rpb24pKSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGNvbnN0cnVjdG9yLCByZWdUMCk7CiAKQEAgLTE1NCwzMCArMTY2LDM4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2Rl
Lm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3Rv
LCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2Ug
cmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwg
YW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90
bywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9HUFIgPSBC
YXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9HUFIpOwogICAgIAogICAg
IC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0g
dGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4K
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3Vs
dAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAg
ICAgIHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHJlc3VsdEdQUiwK
KyAgICAgICAgdmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAgICAgICBzdHViSW5mb0dQ
UiwKKyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMSwgQmFzZWxp
bmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCisKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCArMjEyLDEzIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOwotICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIw
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0
aW1pemUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgcmVnVDIsIHJlZ1Qx
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5z
dGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOwotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgc3RhdGljX2Fzc2Vy
dChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09IGFyZ3VtZW50R1BSMSk7
CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlID09
IGFyZ3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdp
c3RlcnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJh
dGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMjQwLDcg
KzI1OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KIAogICAg
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdU
MSwgcmVnVDApOwogCkBAIC0zNzQsNyArMzkzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNv
bnN0IEluc3RydWN0aW9uKgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OworICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOwogICAgIHJldCgpOwogI2Vsc2UKQEAgLTM4Myw5ICs0MDIsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRf
aGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKQogewotICAgIEpJVCBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJB
dE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDEx
LDcgKzQzMCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKIAog
ICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQsOSArNDUyLDEwIEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5j
dGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0ODQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0
R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFs
dWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAg
IGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNo
MSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVn
VDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzUwMSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyArNTQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNh
c2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4K
ICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8s
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgp
LCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDAp
OwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVl
cmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CiAKQEAgLTU0Myw3ICs1NjQsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1CiAgICAgLy8gRmlyc3Qs
IGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBv
biB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7
CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNO
b3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTU4MiwxNSArNjAzLDEzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIg
PSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7Ci0gICAgQVNT
RVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAg
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNw
ZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1l
dGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUu
bV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9
IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRy
dXN0ZWRJbW0zMigxKSwgYnl0ZWNvZGUsIE9wSm5lcVB0cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFz
SnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwogICAgIGVxdWFsLmxpbmso
dGhpcyk7CiB9CkBAIC02MjUsOCArNjQ0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNv
bnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Qz
OwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1
ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJy
YW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGds
b2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
KCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0
KTsKQEAgLTY0MCw3ICs2NjEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2Jh
bE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAg
IC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2Jh
bE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MSA9IHJlZ1QxOwpAQCAtNjk1LDcgKzcxNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNv
bnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1l
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2
bSgpKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFy
Z3VtZW50R1BSMjsKQEAgLTcxMSw3ICs3MzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhj
b25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfdGhyb3dfaGFuZGxlckdlbmVyYXRv
cihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAg
ICAgY29uc3RleHByIEdQUlJlZyB0aHJvd25WYWx1ZUdQUiA9IGFyZ3VtZW50R1BSMTsKQEAgLTcy
MCw3ICs3NDIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAK
ICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICBqaXQubG9hZFB0
cigmdm0udG9wRW50cnlGcmFtZSwgYXJndW1lbnRHUFIwKTsKLSAgICBqaXQuY29weUNhbGxlZVNh
dmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKGFyZ3VtZW50R1BSMCk7CisgICAg
aml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGFyZ3VtZW50
R1BSMCk7CiAjZW5kaWYKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
YXJndW1lbnRHUFIwOwpAQCAtOTA4LDcgKzkzMCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9q
c3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdU
MiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MTgsNyArOTQxLDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQog
CkBAIC05MzEsNyArOTU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IElu
c3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsK
ICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihy
ZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBk
c3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAt
OTc4LDcgKzEwMDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZS
ZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05OTMs
NyArMTAxNywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAg
ICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciks
IEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gT09QUzogVGhpcyBpc24ndCBlbGVnYW50LiBX
aHkgYXJlbid0IHRoZXkgaW4gdGhlIGNhbGxlZSBzYXZlIGJ1ZmZlci4gSSBndWVzcyBiZWNhdXNl
IHdlIGNhbiBPU1IgZXhpdCBoZXJlPworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29u
c3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsK
ICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9y
aW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVn
aXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwotICAgIGlmIChidWZmZXIg
fHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUlu
ZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCks
IG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5j
aFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFn
KTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVmZmVyICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAgICAgICAgIEpTVmFsdWVS
ZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9m
aWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdzKTsKLSAgICAgICAgfSk7
Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBAIC0xMDUzLDggKzEwNjgs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3Jl
YXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNo
IHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
LSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3
aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNo
UmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNo
UmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxp
bmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5NiwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9z
d2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5
dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRj
aCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAg
ICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxl
Lm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRH
UFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CiAgICAgZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCkBAIC0xMDk5LDIwICsx
MTE1LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
ICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29k
ZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAgIGxpbmtl
ZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5n
V2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRl
eCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVi
dWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygp
LCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0
cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBl
KSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0xMTMzLDcgKzExNTEs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJl
Z1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTExNDgsNyArMTE2
Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTY2LDcgKzExODMsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1Qw
KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTExODgsMTIgKzEyMDUs
MTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIEV2
ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFu
dAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVj
ZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2lu
ZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycygp
OworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMoKTsKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwg
Y291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKKyAgICAKKyAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwor
ICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAgZW1pdEVudGVyT3B0aW1pemF0aW9u
Q2hlY2soKTsKICNlbHNlCkBAIC0xMjEyLDcgKzEyMzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnRlcihjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfaGFuZGxlckdl
bmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpA
QCAtMTMxMCwyMyArMTMyOSwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3Qg
SW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1l
dGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmlu
YWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7Cisg
ICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRvVGhpczo6TWV0YWRhdGE6Om9mZnNl
dE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVl
ID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNo
ZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNh
bGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKICAg
ICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAtMTM0Miw3ICsxMzU3LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWRQdHIoQWRkcmVz
cyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRP
ZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBhbGxvY2F0b3JSZWcpOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0
T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRo
UHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcp
LCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNoZWRGdW5jdGlvbiwgY2FjaGVkRnVu
Y3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wQ3JlYXRlVGhp
czo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkQ2FsbGVlKCksIGNhY2hlZEZ1bmN0aW9uUmVnKTsK
ICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1YWwsIGNhY2hl
ZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2Jq
ZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBjYWxsZWVSZWcs
IGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcy5saW5rKHRo
aXMpOwpAQCAtMTM3Miw3ICsxMzg3LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0
IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwog
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJu
VmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzk4LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAs
IHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwogICAgIGJveEJv
b2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIp
OwpAQCAtMTM5NCw3ICsxNDExLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJ
bnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiB9CiAKQEAgLTE0MDQsNyArMTQyMiw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVx
KGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzNywxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0g
Ynl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VW
YWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0
cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZh
bHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9t
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIEdQUkluZm86OmFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgR1BS
SW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3Rh
bmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFu
Y2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEs
IEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKICAgICBib3hC
b29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0x
NDMwLDcgKzE0NTAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20o
CiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmlu
aXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxl
Rm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJl
dHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV91bmxpbmtlZENvZGVC
bG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKICAg
ICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihp
bnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8g
c2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbVB0cihP
cHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAtMTQ0MCw3
ICsxNDYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogI2Vs
c2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRpZgotICAgICAgICBtb3ZlVmFsdWUo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICBl
bWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsxNDczLDkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAgLy8gRW1pdCB0aGUgSklUIG9wdGlt
aXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKKyAgICAgICAgbG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8sIFRydXN0ZWRJbW0zMihP
cHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwKLSAgICAgICAgICAg
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIo
KSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRF
eGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAtMTUwOSw3ICsxNTMwLDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1lbnRHUFIwKTsKICNlbHNl
CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMzsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
QEAgLTE1MjIsNyArMTU0NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhj
b25zdCAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJhdG9yKFZN
JiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYg
Q1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0xNTY0LDM0
ICsxNTg2LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHIKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwor
ICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBhcmd1bWVudEdQUjA7CisgICAgbG9hZEdsb2JhbE9iamVj
dChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBnbG9i
YWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChy
ZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKdW1wIGxhenlKdW1wOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEp
OwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOwor
ICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vu
ZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5j
dGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2wsIGJp
dHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0
aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAK
ICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwg
JnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBl
bHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3Jf
ZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjIxLDIzICsxNjQ1LDI0
IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAg
IGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQ
YXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKIAotICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5
dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByLCBiaXR3aXNlX2Nhc3Q8
dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7
CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwogICAgIE9wY29kZUlE
IG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19m
dW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwog
ICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHApCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZt
KCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
KTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAg
ZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9y
X2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2NjQsMjkgKzE2
ODksMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdQogdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdB
cnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGludCBzaXpl
ID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQu
b2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRh
dGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIyKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxs
b2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9m
aWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIHNpemUp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0g
Ynl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlLCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVj
b2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlv
blByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNp
emVJbmRleCwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmls
ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICNlbHNl
CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5
V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVn
VDIpOwogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywgcmVnVDIsIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTQsOCArMTcyMCw5IEBAIHZvaWQgSklU
OjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJv
ZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAg
Ly8gT09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBvZmYgdW5saW5rZWQgY29kZSBjYWNo
aW5nIHdoZW4gdGhlIHR5cGUgcHJvZmlsZXIgaXMgZW5hYmxlZC4KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxv
Y2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1
YWxSZWdpc3RlcjsKIApAQCAtMTc3NywyMCArMTgwNCwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9s
b2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJl
Z1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhp
cyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9
IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVz
dCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBy
ZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJl
Zywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdp
c3Rlci4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVuc3Vy
ZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywg
c2NyYXRjaDJSZWcpOworICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlLCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93
UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxV
RTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVj
ayB0aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB1c2luZyB0
aGUgY29udHJvbCBmbG93IHByb2ZpbGVyLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xv
Y2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlv
bjsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1
dGVDb2RlKCp0aGlzKTsKQEAgLTE4NjAsNyArMTg5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9hcmd1bWVudChjb25zdCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0
UmVncyk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxOTE3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJv
dG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hH
UFIsIHNsb3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXJp
dGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNh
Y2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5o
IgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJERkdEcml2
ZXIuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgpAQCAtMjg1NSw3ICsyODU2LDcgQEAgSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBj
b25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtl
ZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJl
c3VsdCA9IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwogCkBA
IC0yODgwLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dp
dGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0gICAgY29u
c3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEFT
U0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWlu
ID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJbnQzMigpKQpAQCAt
MjkwMyw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRj
aAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
dm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBj
b2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBT
dHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN0cmluZ1N3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNTdHJpbmcoKSkgewog
ICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZhbHVlKGdsb2JhbE9i
amVjdCkuaW1wbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFt
ZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAK
ICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCBy
ZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwxMDMgQEAg
bmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
LSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgp
ID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAg
ICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBpZiAo
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMu
Y291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsK
KyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0
Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZh
bCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBz
Y3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0
eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisK
KyAgICAgICAgLy8gT09QUy4gU3VwcG9ydCB0aGlzCisgICAgICAgIC8vaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KHByb3BlcnR5KSkKKyAgICAgICAgLy8gICAgZ2VuLnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgICAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+CiB2b2lkIEpJVDo6
Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGlmIChoYXNBbnlTbG93
Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCi0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIEpJ
VEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107
CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUs
IHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
LCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVu
dEdQUjIpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQot
ICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgQVNTRVJUKEJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0g
bV9ieXRlY29kZUluZGV4KTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gYXJndW1lbnRHUFI0OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQu
Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKLSAgICAgICAgc3RhdGljX2Fzc2Vy
dChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwotCi0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGlt
aXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRp
b25HZXRCeVZhbE9wdGltaXplKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcx
IGFyZzEgYWxyZWFkeSB1c2VkLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFy
Z3VtZW50R1BSMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlID09IHJlZ1QwKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5ID09IHJlZ1QxKTsKKworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlw
ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOworICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ5
LDcgKzE2MCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZU
TCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywg
d2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKQEAgLTE2MCw4ICsxNzEsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1
bWVudEdQUjU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGlj
X2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0xODcsMzQgKzE5OCw0
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJv
cGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklU
R2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAg
ICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9H
UFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6R2V0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMu
YXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3Mp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKICAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CkBAIC0yMjMsOSArMjQwLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lKGMKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2
YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdl
dFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTIzNSwyNiArMjU0LDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lKGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVu
dEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0g
YXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFt
ZU9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTI2NCw3ICsyNzcsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBA
IC0zMDAsMjEgKzMxMywyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChj
b25zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2
YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKLSAgICBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOworCisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJyYW5kLCBicmFuZEdQUik7Ci0KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwg
cmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNl
dFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHVi
SW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2
YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdy
aXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNs
b2JiZXJzIHJlZ2lzdGVycy4KQEAgLTMyNCwxNyArMzQ0LDIyIEBAIHZvaWQgSklUOjplbWl0X29w
X3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3Vs
ZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJh
bmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2Vu
ZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNz
SW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VHUFIsIGJyYW5kR1BSKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtMzQ0LDI0ICszNjksMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Nl
dF9wcml2YXRlX2JyYW5kKAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJl
Z1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHBy
b3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZgogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVf
YnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM3MCwxOSAr
Mzg5LDI4IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY28KICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgcmVnVDEp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpD
aGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJp
dmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZv
R1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0
ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiB9CiAKQEAgLTM5NCw5ICs0MjIsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJh
bmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNo
ZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC00MDYsMjQgKzQzNiwxOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNl
ZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNs
dHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMs
IEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUp
Pjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7
Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25DaGVja1ByaXZh
dGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGly
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzUsMzAgKzQ1
OSw0MiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmls
ZSksIHJlZ1QzKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmls
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVn
VDMsIHJlZ1Q0KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9maWxlR1BSKTsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZB
cnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCk7Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KHByb3BlcnR5KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRy
dWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWVHUFIpLCBwcm9maWxlR1BSLCBzdHViSW5mb0dQUik7CisgICAgLy8gT09QUzoKKyAgICAv
L2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCisgICAgLy8gICAgZ2VuLnN0dWJJ
bmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDsKKyAgICBzdHViSW5mby0+cHV0
S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsRGlyZWN0PiA/IFB1dEtpbmQ6OkRp
cmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21h
TW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0
dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBw
ZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00NzQsMTUgKzUxMCwxMiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21h
TW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBu
dWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFN
b2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTQ5OCw3ICs1
MzEsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4g
dGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RP
cHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFI0KTsKKyAg
ICBpZiAoaXNEaXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCksIE9wUHV0QnlWYWxEaXJl
Y3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAg
IGVsc2UKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9w
dGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0
LCBhcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNTEy
LDcgKzU1NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBDYWxsIGNhbGw7CiAgICAg
YXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRC
eVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7
CkBAIC01MjMsNyArNTY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNTMzLDE4ICs1NzUs
MjQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0
IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZh
aWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBp
bmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBt
YXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNTsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1Qy
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0g
cmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDU7CisgICAgeworICAgICAgICBSZWdpc3RlclNldCB1c2VkKEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
LCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6cHJvZmlsZSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlucyhyZWdUNCkpOwor
ICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDUpKTsKKyAgICB9CisKIAogICAgIGpp
dC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CkBAIC01NzAsMjAgKzYxOCwz
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1
ZUdQUik7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIEludmFsaWRHUFJSZWcs
IHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQ
dXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZv
cy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZh
dGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmllbGRQdXRLaW5kID0gYnl0ZWNvZGUubV9w
dXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4p
OwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJy
aWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTk0LDggKzY1Myw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9w
cml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwotICAgIFByaXZhdGVG
aWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBVTlVTRURfUEFS
QU0oY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKQEAgLTYwMywxMyArNjYxLDE3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlz
RGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDog
b3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBw
YXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3Rl
ZEltbVB0cihudWxscHRyKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtp
bmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7
CisgICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRC
eVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2
YXRlRmllbGRPcHRpbWl6ZTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRzR1BS
MywgYXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjg0LDEyIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgZWxzZQotICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQpAQCAtNjQzLDE0ICs2OTksMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdo
dCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhl
ciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAg
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAg
ICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1QzOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIApAQCAtNjgw
LDcgKzczNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGlu
dDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDIsIHJl
Z1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0
dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02ODks
NyArNzQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50
MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Mik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMiwgcmVn
VDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
aW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0
ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC02OTksNyArNzU3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlf
aQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyU2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MDksNyArNzY4LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5
VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwg
cmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Nl
dHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcx
OSw3ICs3NzksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAg
ICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTcyNywyMyArNzg4LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdp
c3RlcnM6OnNjcmF0Y2g7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKICAg
ICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJl
Z1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgc2Ny
YXRjaEdQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpEZWxldGVCeUlEOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlJZHMu
YXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwor
ICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAg
ICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYg
YSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0
aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJz
LgpAQCAtNzU5LDE1ICs4MzAsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChj
b25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVs
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9l
Y21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1
bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
NzgxLDI0ICs4NTQsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJ
bgogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUu
bV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemU7Ci0gICAg
ZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1p
emUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChy
ZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCkBAIC04MDgsNyArODc2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAg
ICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtODQ1LDIyICs5MTMsMzMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0
eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9w
ZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBCYXNlbGluZURlbEJ5VmFs
UmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5k
IG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAg
IC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBh
IGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5NjIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
T3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRH
UFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIFRy
dXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCArOTgwLDE5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1
bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwg
ZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSBy
ZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC05
MjYsNyArMTAwMiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0
IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZH
L0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0
cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0g
ICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVy
bkFkZHJlc3MoKTsKQEAgLTk2MSwyMiArMTAzNywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlf
Z2V0X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5
SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1
bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisKKyAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOwor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3Vs
dFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAg
LTk4NiwxNCArMTA3MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChj
b25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdl
dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5k
ZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlk
T3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDAzLDI2ICsxMDkxLDIwIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKICAgICBtb3ZlKEpJVDo6VHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3Bl
cmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVn
LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTAzMCwyMiArMTExMiwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisK
KyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRC
eUlkRGlyZWN0OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
IH0KIApAQCAtMTA1NCwxNiArMTE0NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3Bl
cmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTEwNzMsODMgKzExNjYsNjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJl
Y3QoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNz
ZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
c3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKSwgZGVj
bHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJ
ZERpcmVjdE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBy
ZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
VlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1
bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKICAgICAK
ICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRF
bWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFu
Y2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1v
ZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5
TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAs
ICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCBy
ZWdUMSk7CisgICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1l
dGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zm
c2V0T2ZNb2RlKCksIHNjcmF0Y2hHUFIpOworICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9k
ZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4o
R2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9m
ZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGg6Om9m
ZnNldE9mQXJyYXlQcm9maWxlKCksIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RB
cnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NU
eXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4p
OwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
Zyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcg
PSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOworICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKLQotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQo
Z2VuKTsKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5
SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CiB9CiAKQEAgLTExNTgsMTYgKzEyMjksMTggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAg
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1l
dGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
MTE3NywyNiArMTI1MCw1NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIx
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5t
X3RoaXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVn
aXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
YmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworCisgICAg
SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiksIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dEJ5SWRXaXRoVGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRo
aXMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQog
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjA2LDcgKzEzMTAsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMjQx
LDE2ICsxMzQ1LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107
CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIGFyZ3VtZW50R1BSMyk7
CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlk
V2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTI2MCwy
OCArMTM2NywyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBh
cmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVn
aXN0ZXJzOjp0aGlzVmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodGhpc0dQUiA9PSBhcmd1bWVudEdQUjEp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF93aXRoX3Ro
aXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBl
bmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
dHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJl
dHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjkxLDcgKzEzOTIsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJv
dXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25n
aW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMzI5LDIzICsxNDMwLDM3
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29k
ZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNo
IGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUg
cG9pbnRlciwKICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxv
YWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUK
ICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRo
ZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lUHV0
QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVn
LCBiYXNlR1BSLCB2YWx1ZVZSZWcsIHZhbHVlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgcmVnVDMsIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc3R1YkluZm9HUFIs
IHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0ID8gUHV0S2lu
ZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5SWQ7Cisg
ICAgc3R1YkluZm8tPnB1dEtpbmQgPSBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5k
OjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUp
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAg
CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVy
IGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMTM1OSwxNCArMTQ3NCwxOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4o
KTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAgICAgCiAgICAgSklUUHV0QnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5z
bG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGFyZ3Vt
ZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFy
Z3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC0xMzc2LDI1ICsxNDk1LDE5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5
SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBhcmd1
bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9p
ZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IGdlbi5zbG93
UGF0aEZ1bmN0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChnZW4u
c2xvd1BhdGhGdW5jdGlvbigpKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
QEAgLTE0MDQsNyArMTUxNyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKQEAgLTE0NDEsMjAgKzE1NTQsMzEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
dHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRzLmFw
cGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKQEAgLTE0NjMsMTQgKzE1ODcsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5
X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlk
SW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTQ4MCwyOCArMTYwNywyMiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVn
aXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVu
dEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIp
OwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8g
ZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3Jl
YXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUu
CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5
SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
bkluQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEwLDI1ICsxNjMxLDMz
IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJv
cGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIs
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CiAKICAgICBKSVRJbkJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOwor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNTM3LDE1ICsxNjY2LDE4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0g
bV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BS
Mik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjMpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwog
I2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTU1Niw1OSArMTY4OCw3MCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1
bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2Rl
LCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BS
KTsKICAgICAvLyBzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBk
byBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBj
cmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFt
ZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5
VmFsT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKT46OnZhbHVl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3Zh
bF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkluQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
IAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9y
QnJhbmQsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0g
ICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBhZGRTbG93Q2FzZSgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHByb3Bl
cnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisKKyAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IHR5cGU7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJl
Z2lzdGVyIGRzdCwgQWNjZXNzVHlwZSB0eXBlKQordm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xv
dyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAgQVNTRVJUKHR5cGUgPT0gQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
QnJhbmQpOworICAgIFVOVVNFRF9QQVJBTShiYXNlKTsKKyAgICBVTlVTRURfUEFSQU0ocHJvcGVy
dHkpOworICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2
YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiAKICAgICBK
SVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBv
cGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbih0
eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5h
bWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNjE4LDI3ICsxNzYxLDIxIEBAIHZvaWQg
SklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2kKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eU9yQnJhbmRHUFIg
PSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eU9yQnJhbmRHUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2Vy
dChwcm9wZXJ0eU9yQnJhbmRHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlTmFt
ZU9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2
YWx1ZSk7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9u
SGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFt
ZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVy
YXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbCh0eXBlID09IEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6
IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9o
YXNfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xNjUyLDcgKzE3ODksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVfbmFt
ZShjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZU5hbWU+KCk7Ci0gICAgZW1pdEhhc1By
aXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7Cisg
ICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5
dGVjb2RlLm1fcHJvcGVydHksIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE2NjYsMTkgKzE4MDMsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVCcmFu
ZD4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6
Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0
LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVCcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYg
KCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNo
R1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpT
R2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBv
aW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2ln
bmVkIGRlcHRoKQogewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyk7CisgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQogICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwpAQCAtMTY4
OCw2ICsxODI4LDcgQEAgdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaQog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBP
T1BTCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZl
U2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAtMTcw
MSw3ICsxODQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgog
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAg
ICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVG
b3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCByZWdUMSk7CiAgICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCwgcmVnVDEpOwogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90
RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJl
c3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CiAgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKQEAgLTE3MTUsNyArMTg1
Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAg
ICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2Rl
QmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdU
MCk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1Qw
KTsKICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTc5NCw4NyArMTkzNSwxMDUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbgogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFJlc29sdmVUeXBlIHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KS5tX3Jlc29sdmVUeXBlOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NF
UlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09
IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BS
ID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJZiB3ZSBw
cm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2Vk
IGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0gICAgaWYg
KHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1l
dGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlmIChwcm9m
aWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52
aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRh
dGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7
CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2st
Pm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKKworICAgICAgICBh
dXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1
cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNl
bGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgICAgIH07CiAKLSNkZWZp
bmUgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVf
IyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5l
cmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBF
KFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0
dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09Q
RV9HRU5FUkFUT1IKKworICAgICAgICBhdXRvIGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3Ig
PSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2
ZVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3Bl
IGdlbmVyaWMiKTsKKyAgICAgICAgfTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFk
YXRhR1BSID0gcmVnVDc7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdU
NjsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1Owog
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwogICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jl
c29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgICAgIGlmIChwcm9maWxl
ZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJ
U3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAg
IGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2Vu
ZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIo
Z2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxs
KGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6
Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1l
KQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25s
eSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcFJlc29sdmVTY29wZTo6TWV0YWRh
dGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OyAvLyBpbmNvbWlu
ZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsgLy8gaW5jb21pbmcKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7IC8vIGluY29taW5n
IC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4KICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IHJlZ1Q0OwogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZU9mZnNldEdQUik7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlw
ZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIGppdC50YWdSZXR1cm5BZGRyZXNz
KCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1l
dGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsK
KyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9m
TWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRh
R1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9i
YWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgYXV0byBkb1ZhckluamVjdGlvbkNo
ZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gSW52YWxpZEdQUlJlZykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BS
ID09IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0
OwotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgfQotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9i
YWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNs
b3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0
OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRj
aHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
KTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0UmVzb2x2ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7CisgICAgICAgIGRvVmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBqaXQubW92ZShzY29wZUdQ
UiwgcmVnVDApOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOwogCi0gICAg
ICAgIExhYmVsIGxvb3AgPSBsYWJlbCgpOwotICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0
MzIoWmVybywgcmVnVDEpOworICAgICAgICBMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7CisgICAg
ICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOwogICAgICAgICB7
Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4
dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7
Ci0gICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3AsIHRoaXMpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7
CisgICAgICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAgICAg
ICAgICBqaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsKICAgICAgICAgfQotICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvbmUubGluaygmaml0KTsKICAgICB9OwogCiAgICAg
YXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKQEAgLTE4ODIs
MTIgKzIwNDEsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkuCi0g
ICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwg
Z2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkp
LCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxM
ZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShnbG9iYWxP
YmplY3RHUFIsIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFs
T2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAg
aml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQ
UiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwg
cmVnVDEpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTg5NywxMSArMjA1NiwxMSBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAogICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhp
Y2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAg
ICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKQotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxP
YmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAg
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9m
ZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0xOTA5LDcgKzIw
NjgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAg
ICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVk
Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0xOTE5LDgzICsyMDc4LDQ1
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDAp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBl
bHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSks
IHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdUMCk7CiAKLSAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGF1
dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAgICAg
ICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKKyAg
ICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICBub3RD
YXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICB9CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2Jh
bFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAg
IGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0
Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0
Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5r
KCZqaXQpOwogICAgIH0KIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHVi
KHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2
ZV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwog
fQogCi0jZGVmaW5lIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkg
XAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jlc29sdmVf
c2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAg
ICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBl
KSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAot
ICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhyZXNvbHZlVHlw
ZSwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0K
LUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0j
dW5kZWYgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3Io
Vk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBj
YW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIC8vIFRoZSBmYXN0IHBhdGgg
YWxyZWFkeSBwdXNoZWQgdGhlIHJldHVybiBhZGRyZXNzLgogI2lmIENQVShYODZfNjQpCkBAIC0y
MDY1LDYgKzIxODYsNyBAQCB2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lz
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAv
LyBPT1BTCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwpAQCAt
MjE3OCw3ICsyMzAwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjE4Niw5ICsy
MzA4LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVy
YXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJh
dGlvbkdldEZyb21TY29wZSwgZHN0LCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7
CiB9CiAKICNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMjE5Niw0MSArMjMx
OCw1MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7
CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9m
ZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEFT
U0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkg
PT0gY3VycmVudEluc3RydWN0aW9uKTsKKworICAgIGF1dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9
IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29w
ZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1
cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJh
dGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKwor
ICAgIGF1dG8gZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAg
ICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBzdGQ6Om51
bGxvcHQsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgZ2VuZXJpYyIpOworICAgIH07CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSByZWdUNTsKIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsK
LSAgICAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0gICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRl
cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zm
c2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoYnl0ZWNvZGUpOwogCi0jZGVmaW5lIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZl
VHlwZSkgb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAg
ICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAg
ICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSAgICAg
ICAgfTsKLSN1bmRlZiBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFk
YXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFk
YXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLSAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBjb2RlOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisg
ICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAgIGVs
c2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGUgPSB2bS5nZXRD
VElTdHViKGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IpOworCisgICAgZW1pdE5ha2VkTmVh
ckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0
aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7
CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdv
cmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KQEAgLTIyMzksOTkgKzIzNzAsODggQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIHVzaW5nIE1ldGFkYXRh
ID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRh
dGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlw
ZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIENDYWxsSGVscGVycyBqaXQ7CisK
KyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRk
UHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBq
aXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsK
IAotICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29w
ZUdQUiwgaW50MzJfdCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCkgewotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSwgcmVnVDEpOwot
ICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qx
LCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIpIHsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVj
dHVyZSgpKSwgcmVnVDEpOworICAgICAgICBqaXQubW92ZShzY29wZUdQUiwgcmVnVDApOworICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAg
ICAgICAgaml0LmxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KSk7CiAgICAgfTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNr
ID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGlmICghbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRP
RihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNo
cG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OworICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0
aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJh
bmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKICAgICAKLSAgICBhdXRv
IGVtaXRHZXRWYXJGcm9tUG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVn
KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7
Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRHZXRW
YXJGcm9tSW5kaXJlY3RQb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcp
IHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsK
LSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQogICAgIGF1dG8gZW1pdEdldENs
b3N1cmVWYXIgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIG9wZXJhbmRHUFIpIHsKICAg
ICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAg
IGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGFkZFB0cihz
Y29wZUdQUiwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BS
LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKKyAg
ICAgICAgaml0LmxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQUik7CisgICAgICAg
IGppdC5hZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOworICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxl
cygpKSwgcmVnVDApOwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgYXV0
byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAg
ICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIsIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV9zdHJ1Y3R1cmUpKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5q
ZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0
aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVj
a2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhzY29wZUdQUik7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVj
dGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhl
IEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tp
bmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgogCiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSByZWdUMDsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gcmVn
VDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwogICAgICAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CiAKLSAgICAgICAgICAgIGpp
dEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAg
ICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmppdEFzc2Vy
dChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgeworICAgICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gaml0LmJyYW5jaFB0cihFcXVhbCwgYmFzZSwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwog
Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIG9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBvZmZz
ZXQpOwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAg
SnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBU
cnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBhYm9y
dFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAgICAgICAgIGlz
T3V0T2ZMaW5lLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9
IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNv
bihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CisgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUu
bGluaygmaml0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAg
IG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9m
ZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBqaXQubmVn
MzIob2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9m
ZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQs
IFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksIHJlc3VsdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9v
cGVyYW5kKSwgcmVnVDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRH
ZXRWYXJGcm9tUG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QwKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKHJlZ1QwLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5k
KSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMyk7CiAg
ICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZUdQUiwgcmVnVDMpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTIzNDEsODYgKzI0NjEsNjMgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3
aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIo
VHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29s
dmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAg
ICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRy
dWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVt
aXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5
cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZz
ZXRPZkdldFB1dEluZm8oKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LmFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRv
IFQwCiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CisgICAgICAg
IEp1bXAgbm90R2xvYmFsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGlu
aygmaml0KTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBq
aXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAg
ICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKCZqaXQpOworCisgICAgICAg
IEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGppdC5icmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGlz
R2xvYmFsUHJvcGVydHkubGluaygmaml0KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVy
dHkpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOwor
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsoJmppdCk7CiAKLSAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5q
dW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZh
bHNlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAg
IH0KIAogICAgIHN0YXRpY19hc3NlcnQoVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0g
MSk7Ci0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJl
c3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmls
ZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7
CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZt
KCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIu
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFn
LCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFU
T1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBc
Ci0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BHZXRGcm9t
U2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAg
IEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcEdldEZyb21TY29w
ZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlXyIgI3Jlc29s
dmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfR0VUX0ZST01f
U0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IK
LQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0
ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxp
bmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
I2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjQ0
OSw3ICsyNTQ2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgIENhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICBKdW1w
IGV4Y2VwdGlvbkNoZWNrID0gaml0LmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7
CiAKLSAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdp
c3RlciwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0
b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE1ldGFkYXRh
OjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgp
KSk7CiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUklu
Zm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKIAogI2lmIENQVShYODZfNjQpCkBAIC0yNDcxLDg2ICsy
NTY4LDc5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIH0KICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9i
YWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJh
bmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUq
KiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
KiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7
Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJh
bmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6
ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9y
ZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQotCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1
dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAg
dWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1l
dGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2
ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29k
ZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNv
bHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUg
Y2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJl
cyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2
ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAg
ICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24n
dCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAg
ICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJl
Z1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAg
ICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsK
KwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAg
ICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBK
dW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAg
IG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJl
Z1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAg
ICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0
LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsK
KyAgICAgICAgICAgIC8vIE9PUFM6IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIHZlcnNpb24gdGhh
dCB0b29rIEdQUlJlZ3MgaW5zdGVhZCBvZiBWUnMKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJp
ZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6
CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNj
b3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAgaWYgKCFp
c0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwor
ICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKwor
ICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKKworICAgICAgICAgICAgaWYgKCFp
c0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUo
KSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3
YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAg
ICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9w
ZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJh
bmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdU
MSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0g
ICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0
PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlh
YmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRh
Lm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50
U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxvYWRQdHJG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0
Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBv
aW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworCisg
ICAgICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYSB2ZXJzaW9uIHRoYXQg
dG9vayBhIEdQUlJlZyBmb3IgdmFsdWUuCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNj
b3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xv
c3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpv
cGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7
CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdE5v
dGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVn
VDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSkpOworCisgICAgICAgICAgICAvLyBPT1BTOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUg
YSB2ZXJzaW9uIHRoYXQgdG9vayBhIEdQUlJlZyBmb3Igb3duZXIvdmFsdWUuCiAgICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjU2NCw1OCArMjY1
NCw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAg
IH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0g
ICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFy
ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8v
IER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBh
bHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAgICAgICAgaXNHbG9iYWxMZXhp
Y2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
IDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVt
aXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0g
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAg
Ly8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJlVmFyLyBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGlsZSB0aGluZ3MKKyAgICAvLyB0
aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3ZlIHByb3ZlbiB0aGF0IGlzIHRo
ZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZhciwKKyAgICAvLyBhbGwgQ29k
ZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgorICAgIC8vIGlmIHRoZSB2YXIg
aW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0IGlzIGZpcmVkLCB0aGVuIHdl
IHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAgIC8vIG1hdHRlciB3aGF0IHR5
cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENs
b3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29k
ZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGVtaXRDb2RlKENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbHNlIHsKICAgICAgICAgSnVt
cExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywg
cmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7CiAgICAgICAgIGFuZDMy
KFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAg
SnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJv
cGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAorICAgICAgICBKdW1w
IG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKHRoaXMpOworCisg
ICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAogICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAKICAgICAgICAgc2tpcFRvRW5k
LmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0K
IH0KIApAQCAtMjYyNCwxOCArMjcwOCwyMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVU
eXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgIFJlc29sdmVU
eXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxv
Y2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFu
dGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIuCiAgICAgICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
dGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAg
ICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3VtZW50R1BSMCwgY3VycmVudElu
c3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAg
ICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUlu
ZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNv
ZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5z
dHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3ICsyNzM5LDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25z
IGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJl
bG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAg
Ly8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6
OmVicCk7CkBAIC0yNzAxLDcgKzI3ODgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMs
IHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9y
YWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVn
VDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVn
VDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsy
ODQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkBAIC0yNzY3LDcgKzI4NTMsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBK
U0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkp
LCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjgyMyw3ICsyOTA5LDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0bwogdm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4
dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwpAQCAtMjgzOSwxMSArMjkyNCwx
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiAgICAgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIG1vZGUg
c2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2UgaXQgaWYgd2UgcHJvZmlsZSBpdCBp
biB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgeworICAgIGlmIChieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9
PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKICAgICAgICAg
R1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUNDsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVt
ZXJhdG9yR1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihO
b25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigofkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
T3duU3RydWN0dXJlTW9kZSkgJiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0aW9u
TW9kZU1hc2spKSk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5l
eHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25T
dHJ1Y3R1cmVNb2RlKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlOFRvTWV0YWRhdGEoc2Ny
YXRjaEdQUiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVu
dW1lcmF0b3JNZXRhZGF0YSgpKTsKKwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhlbnVtZXJhdG9y
R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBpbmRleEdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2gzMihOb3RF
cXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSkpOwogCkBAIC0yODgxLDc4ICsyOTcyLDg3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3Byb3Bl
cnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51
bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CiAKLSAgICBhdXRvIHJlc3VsdEdQUiA9
IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVFbnVtZXJh
dG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpz
Y3JhdGNoMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gQmFzZWxpbmVFbnVtZXJh
dG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDM7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5TmFtZSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCBzY3JhdGNoMyk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHByb3BlcnR5R1BSKTsKIAotICAg
IG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0
YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZh
bDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHNjcmF0Y2gyKTsKKyAg
ICBvcjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7CisgICAgc3RvcmU4VG9NZXRhZGF0YShzY3JhdGNo
MiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVt
ZXJhdG9yTWV0YWRhdGEoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVn
VDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUikpOwogICAgIC8v
IFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQgdmFsdWUuCi0gICAgSnVtcCBpc05vdE93
blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDIsIFRydXN0ZWRJbW0z
MihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2Rl
ID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
R2VuZXJpY01vZGUpKTsKIAogICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDMpOwotICAgIEp1bXAgc3Ry
dWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgc2NyYXRjaDEpOworICAgIGxv
YWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0
Y2gyKTsKKyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHNj
cmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbmRleCwgc2NyYXRjaDIpOwogICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhh
biB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlu
bGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNP
YmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QzLCByZWdUMyk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMs
IFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwotCisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBz
aWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOworICAgIGxvYWQ2NChCYXNlSW5k
ZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwog
CiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKICAgICBvdXRPZkxpbmVBY2Nlc3Mu
bGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMyk7Ci0g
ICAgbmVnMzIocmVnVDMpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IGJhc2VHUFIpOworICAgIHN1YjMyKEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBu
ZWczMihzY3JhdGNoMik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gy
KTsKICAgICBjb25zdGV4cHIgaW50cHRyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gb2Zmc2V0
SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpICogc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJl
Z1QzLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAg
IGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIG9mZnNldE9m
Rmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkp
OwogCiAgICAgc3RydWN0dXJlTWlzbWF0Y2gubGluayh0aGlzKTsKLSAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVT
dHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSk7CisgICAg
c3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpI
YXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgYnl0ZWNvZGUsIE9wRW51
bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7
CiAKICAgICBpc05vdE93blN0cnVjdHVyZU1vZGUubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTm90
SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKKyAgICBKdW1wIGlzTm90SW5kZXhlZCA9
IGJyYW5jaFRlc3QzMihaZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKICAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0
aCB0aGUgaW5kZXguCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHByb3BlcnR5R1BSKTsKIAogICAgIGlz
Tm90SW5kZXhlZC5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaDEpOwogCiAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5
VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
CiAgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5NjEsMTAgKzMwNjEsOSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfCiAgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dD
YXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0ZXIp
OwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhG
dW5jdGlvblR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlwZSYg
Ynl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQordGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgSklU
OjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rp
b25UeXBlIGdlbmVyYWxDYXNlKQogewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKQEAgLTI5
NzMsNyArMzA3Miw5IEBAIHZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW0K
ICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1v
ZGUsIHJlZ1QwKTsKLSAgICBvcjgocmVnVDAsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9l
bnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgQnl0
ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCByZWdUMSk7Cisg
ICAgb3IzMihyZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDEsIGJ5dGVj
b2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwog
CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAKQEAg
LTMwNjIsNiArMzE2MywxMyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCit2b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpCit7CisgICAgSnVtcCBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2VsZWN0U2Ny
YXRjaEdQUihvd25lcikpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNyArMzA0LDcgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNo
cG9pbnRTZXQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJvbVByb3h5
KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlLCBzbG90
LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxp
bmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgTE9HX0lD
KChJQ0V2ZW50OjpHZXRCeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRp
Zmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFzZSgpID09
IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hp
bmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBAIC03
MzEsMTEgKzczMSwxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShK
CiAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1l
bnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAg
ICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxh
Y2Uoc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgICAgICYm
IElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywg
c3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgICAgICYmICFv
bGRTdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAg
ICAgICAgICAmJiAhaXNQcm94eSkgewogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1
YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJp
YXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7CkBA
IC0xMTMyLDcgKzExMzIsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5
KAogICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlCiAgICAgICAgICAg
ICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVj
dHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7Ci0gICAgICAgICAgICAgICAg
Ym9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFj
Y2VzcyhzdHViSW5mbywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRl
ZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKGNvZGVCbG9j
aywgc3R1YkluZm8sIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENv
ZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5U2Vs
ZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09
IGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJv
cGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpAQCAtMTU1Miw3
ICsxNTUyLDcgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogCiB2
b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAg
ICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBjYWxs
IGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0KCkpOworICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3
UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7CiAgICAgCiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExp
bmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50
LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRT
aWRlU3RhdGUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29t
bW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXJy
b3JIYW5kbGluZ1Njb3BlLmgiCkBAIC0zNzAsNiArMzcxLDE1IEBAIGlubGluZSBib29sIGppdENv
bXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYKICAgICAKICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFZh
bHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkg
IT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJ
VENvZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX3Vu
bGlua2VkQmFzZWxpbmVDb2RlKSB7CisgICAgICAgICAgICAvL2RhdGFMb2dMbigiU2hhcmVkIHZp
YSBMTEludCIpOworICAgICAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2Vs
aW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGNvZGVC
bG9jay0+aml0TmV4dEludm9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgfQorCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRS
ZWFjaGVkKCkpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxh
eUpJVENvbXBpbGUiLCAoInRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNvZGVC
bG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVx
LCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdl
ck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bj
b2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikK
LSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmgg
dHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJp
dGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQx
LCB0MikKICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0
W2NmciwgdDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3Jv
IHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBp
biB0MSwgc3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQog
ICAgICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBk
YXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0
aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAg
ZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAog
bGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJv
ZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRo
UHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBt
ZXRhZGF0YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9w
TmVnYXRlU3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwog
ICAgIG5lZ2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAg
IHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0
MykKICAgICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBi
aWEgdDEsIExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEK
LSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVu
YXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAg
ICByZXR1cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBA
IGVuZCkKIAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1
Y3QsIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50
T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXpl
LCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFBy
b2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAg
ICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0
MikKICAgICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFn
LCAub3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAg
ICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikK
ICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3Jl
KHQzLCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiAr
MTEyNCwxMiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAg
ICAgIGJpYSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywg
Lm9wMU5vdEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0g
ICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwg
dDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVh
ZHkKICAgICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQot
ICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1
cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJO
dW1iZXIsIHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwg
dDEpCiAgICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNy
byBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3Bl
cmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRl
bHkgbm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRh
ZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAg
ICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxl
SW50TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQg
dDEsIHQzLCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20JKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEz
IEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMs
IGExCiAgICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRw
eiByMCwgLnJlY292ZXIKLQogICAgICAgICAgICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAg
IyBCYXNlbGluZSB1c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQg
cG9vbC4KKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAg
bG9hZHAgQ29kZUJsb2NrOjptX2ppdERhdGFbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29k
ZUJsb2NrOjpKSVREYXRhOjptX2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAg
IGlmIEFSTTY0RQogICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpT
Qzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50
cnkpICogUHRyU2l6ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRH
YXRlUHRyVGFnICMgSlNFbnRyeVB0clRhZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVx
dWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFt
ZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRh
dGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3Bh
dGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUo
dHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
YXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5k
Ci0KICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhd
LCB0MQogICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNy
byBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVy
YXRpb24odDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9y
ZXEgdDEsIFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9m
aWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFy
aXRoUHJvZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoK
QEAgLTExMzQsMTEgKzExMzUsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9u
ZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJl
dHVybikKLQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmgg
dHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIp
CkBAIC0xMTQ2LDEyICsxMTQyLDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBP
cE5lZ2F0ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVn
aSB0MwogICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRo
UHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQ
cm9maWxlSW50LCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAg
IGJ0cXogdDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAw
MDAwMDAwLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisg
ICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwg
dDEsIHQyKQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzEx
NjAsNiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1
LCB0MCkKIAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlw
ZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRo
UHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQw
KQogICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
KHNpemUsIHQwLCB0MSkKQEAgLTExNzcsNyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9t
U3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50
ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2Zp
bGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZGlzcGF0
Y2goKQogCiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJU
YWcsIC5zbG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBm
dDEKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVw
ZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51
bWJlciwgdDUsIHQyKQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdElu
dE9wMkludDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJl
ckludCwgdDUsIHQyKQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5
OgogICAgICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNCw5ICsxMTk2LDkgQEAgbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogCiAgICAgLm9wMk5vdEludDoKICAgICAg
ICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIGlzIGRl
ZmluaXRlbHkgbm90LgotICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6IHQxLCBu
dW1iZXJUYWcsIC5zbG93Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQor
ICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2Zp
bGVJbnROdW1iZXIsIHQ1LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgY2ky
ZHMgdDAsIGZ0MAogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwg
ZnQxCkBAIC0xNTE4LDcgKzE1MTAsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV9p
ZF9kaXJlY3QsCiBlbmQpCiAKICMgVGhlIGJhc2Ugb2JqZWN0IGlzIGV4cGVjdGVkIGluIHQzCi1t
YWNybyBwZXJmb3JtR2V0QnlJREhlbHBlcihvcGNvZGVTdHJ1Y3QsIG1vZGVNZXRhZGF0YU5hbWUs
IHZhbHVlUHJvZmlsZU5hbWUsIHNsb3dMYWJlbCwgc2l6ZSwgbWV0YWRhdGEsIHJldHVybikKK21h
Y3JvIHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwgbW9kZU1ldGFkYXRhTmFtZSwg
dmFsdWVQcm9maWxlTmFtZSwgc2xvd0xhYmVsLCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuLCBkb0Fy
cmF5UHJvZmlsZSkKICAgICBtZXRhZGF0YSh0MiwgdDEpCiAgICAgbG9hZGIgJW9wY29kZVN0cnVj
dCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRhTmFtZSUubW9kZVt0Ml0sIHQxCiAKQEAgLTE1NDYs
NyArMTUzOCw3IEBAIG1hY3JvIHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwKIC5v
cEdldEJ5SWRBcnJheUxlbmd0aDoKICAgICBiYm5lcSB0MSwgY29uc3RleHByIEdldEJ5SWRNb2Rl
OjpBcnJheUxlbmd0aCwgLm9wR2V0QnlJZFVuc2V0CiAgICAgbW92ZSB0MywgdDAKLSAgICBhcnJh
eVByb2ZpbGUoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRhTmFtZSUuYXJy
YXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgdDAsIHQyLCB0NSkKKyAgICBkb0FycmF5UHJvZmls
ZSh0MCwgdDIsIHQ1LCB0MSkKICAgICBidGl6IHQwLCBJc0FycmF5LCBzbG93TGFiZWwKICAgICBi
dGl6IHQwLCBJbmRleGluZ1NoYXBlTWFzaywgc2xvd0xhYmVsCiAgICAgbG9hZENhZ2VkSlNWYWx1
ZShKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MCwgdDEpCkBAIC0xNTY4LDcgKzE1NjAsMTAg
QEAgZW5kCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV9pZCwgT3BHZXRCeUlkLCBtYWNy
byAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBnZXQobV9iYXNl
LCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlQ2VsbChzaXplLCB0MCwgdDMsIC5vcEdl
dEJ5SWRTbG93KQotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wR2V0QnlJZCwgbV9tb2RlTWV0
YWRhdGEsIG1fcHJvZmlsZSwgLm9wR2V0QnlJZFNsb3csIHNpemUsIG1ldGFkYXRhLCByZXR1cm4p
CisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BHZXRCeUlkLCBtX21vZGVNZXRhZGF0YSwgbV9w
cm9maWxlLCAub3BHZXRCeUlkU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHJldHVybiwKKyAgICAgICAg
bWFjcm8gKGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFkYXRhLCBzY3JhdGNoMSwgc2NyYXRjaDIp
CisgICAgICAgICAgICBhcnJheVByb2ZpbGUoT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9hcnJheVBy
b2ZpbGUsIGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFkYXRhLCBzY3JhdGNoMSkKKyAgICAgICAg
ZW5kKQogCiAub3BHZXRCeUlkU2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0
aF9nZXRfYnlfaWQpCkBAIC0zMDAyLDcgKzI5OTcsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9w
X2l0ZXJhdG9yX29wZW4sIE9wCiAKICAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX2l0ZXJhdG9yLCB0
MykKICAgICBidHFueiB0Mywgbm90Q2VsbE1hc2ssIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4
dFNsb3cKLSAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yT3BlbiwgbV9tb2RlTWV0
YWRhdGEsIG1fbmV4dFByb2ZpbGUsIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3csIHNp
emUsIG1ldGFkYXRhLCBzdG9yZU5leHRBbmREaXNwYXRjaCkKKyAgICBwZXJmb3JtR2V0QnlJREhl
bHBlcihPcEl0ZXJhdG9yT3BlbiwgbV9tb2RlTWV0YWRhdGEsIG1fbmV4dFByb2ZpbGUsIC5pdGVy
YXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZU5leHRBbmRE
aXNwYXRjaCwgbWFjcm8oYSwgYiwgYywgZCkgZW5kKQogCiAuaXRlcmF0b3JPcGVuR2VuZXJpY0dl
dE5leHRTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29w
ZW5fZ2V0X25leHQpCkBAIC0zMDYxLDcgKzMwNTYsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9w
X2l0ZXJhdG9yX25leHQsIE9wCiAKICAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX3ZhbHVlLCB0MykK
ICAgICBidHFueiB0Mywgbm90Q2VsbE1hc2ssIC5nZXREb25lU2xvdwotICAgIHBlcmZvcm1HZXRC
eUlESGVscGVyKE9wSXRlcmF0b3JOZXh0LCBtX2RvbmVNb2RlTWV0YWRhdGEsIG1fZG9uZVByb2Zp
bGUsIC5nZXREb25lU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlRG9uZUFuZEptcFRvR2V0VmFs
dWUpCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck5leHQsIG1fZG9uZU1vZGVN
ZXRhZGF0YSwgbV9kb25lUHJvZmlsZSwgLmdldERvbmVTbG93LCBzaXplLCBtZXRhZGF0YSwgc3Rv
cmVEb25lQW5kSm1wVG9HZXRWYWx1ZSwgbWFjcm8oYSwgYiwgYywgZCkgZW5kKQogCiAuZ2V0RG9u
ZVNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9n
ZXRfZG9uZSkKQEAgLTMwODYsNyArMzA4MSw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRl
cmF0b3JfbmV4dCwgT3AKICAgICAjIFJlbG9hZCB0aGUgbmV4dCByZXN1bHQgdG1wIHNpbmNlIHRo
ZSBnZXRfYnlfaWQgYWJvdmUgbWF5IGhhdmUgY2xvYmJlcmVkIHQzLgogICAgIGxvYWRWYXJpYWJs
ZShnZXQsIG1fdmFsdWUsIHQzKQogICAgICMgV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0aGUg
aXRlcmF0b3IgcmVzdWx0IGlzIGEgY2VsbCBoZXJlIHNpbmNlIHdlIHdpbGwgaGF2ZSB0aHJvd24g
YW4gZXJyb3IgYmVmb3JlLgotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JOZXh0
LCBtX3ZhbHVlTW9kZU1ldGFkYXRhLCBtX3ZhbHVlUHJvZmlsZSwgLmdldFZhbHVlU2xvdywgc2l6
ZSwgbWV0YWRhdGEsIHN0b3JlVmFsdWVBbmREaXNwYXRjaCkKKyAgICBwZXJmb3JtR2V0QnlJREhl
bHBlcihPcEl0ZXJhdG9yTmV4dCwgbV92YWx1ZU1vZGVNZXRhZGF0YSwgbV92YWx1ZVByb2ZpbGUs
IC5nZXRWYWx1ZVNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZVZhbHVlQW5kRGlzcGF0Y2gsIG1h
Y3JvKGEsIGIsIGMsIGQpIGVuZCkKIAogLmdldFZhbHVlU2xvdzoKICAgICBjYWxsU2xvd1BhdGgo
X2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2dldF92YWx1ZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTQyMCw3ICsxNDIwLDggQEAgZW5kCiAK
IG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5jcmVtZW50LCBhY3Rpb24pCiAgICAgbG9hZHAgQ29k
ZUJsb2NrW2Nmcl0sIHQwCi0gICAgYmFkZGlzIGluY3JlbWVudCwgQ29kZUJsb2NrOjptX2xsaW50
RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0s
IC5jb250aW51ZQorICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyW3Qw
XSwgdDAKKyAgICBiYWRkaXMgaW5jcmVtZW50LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1f
Y291bnRlclt0MF0sIC5jb250aW51ZQogICAgIGFjdGlvbigpCiAgICAgLmNvbnRpbnVlOgogZW5k
CkBAIC0xNTAzLDcgKzE1MDQsOCBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNv
ZGVCbG9jCiAgICAgY29kZUJsb2NrR2V0dGVyKHQxKQogICAgIGNvZGVCbG9ja1NldHRlcih0MSkK
ICAgICBpZiBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQotICAgICAgICBiYWRkaXMgNSwgQ29k
ZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6
Om1fY291bnRlclt0MV0sIC5jb250aW51ZQorICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxp
bnRFeGVjdXRlQ291bnRlclt0MV0sIHQwCisgICAgICAgIGJhZGRpcyA1LCBCYXNlbGluZUV4ZWN1
dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgICAgICBpZiBKU1ZBTFVF
NjQKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAgICAgICAgbW92ZSBQQywgYTEKQEAg
LTE2MTcsMTQgKzE2MTksMTQgQEAgbWFjcm8gZnVuY3Rpb25Jbml0aWFsaXphdGlvbihwcm9maWxl
QXJnUwogICAgICMgb3B0aW1hbCB3YXkgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIG1vcmUg
dGhhbiBmaXZlIHJlZ2lzdGVycyBhdmFpbGFibGUKICAgICAjIGZvciBhcmJpdHJhcnkgdXNlIGlu
IHRoZSBpbnRlcnByZXRlci4KICAgICBsb2FkaSBDb2RlQmxvY2s6Om1fbnVtUGFyYW1ldGVyc1t0
MV0sIHQwCi0gICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQwICMgVXNlIGFkZGkgYmVjYXVzZSB0
aGF0J3Mgd2hhdCBoYXMgdGhlIHBlZXBob2xlCisgICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQw
CiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnBndGVxIHQwLCAwLCBvayBlbmQpCiAgICAgYnRweiB0
MCwgLmFyZ3VtZW50UHJvZmlsZURvbmUKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fYXJndW1lbnRW
YWx1ZVByb2ZpbGVzICsgRml4ZWRWZWN0b3I6Om1fc3RvcmFnZSArIFJlZkNvdW50ZWRBcnJheTo6
bV9kYXRhW3QxXSwgdDMKICAgICBidHB6IHQzLCAuYXJndW1lbnRQcm9maWxlRG9uZSAjIFdoZW4g
d2UgY2FuJ3QgSklULCB3ZSBkb24ndCBhbGxvY2F0ZSBhbnkgYXJndW1lbnQgdmFsdWUgcHJvZmls
ZXMuCiAgICAgbXVscCBzaXplb2YgVmFsdWVQcm9maWxlLCB0MCwgdDIgIyBBYWFhYWhoaGghIE5l
ZWQgc3RyZW5ndGggcmVkdWN0aW9uIQogICAgIGxzaGlmdHAgMywgdDAgIyBvZmZzZXQgb2YgbGFz
dCBKU1ZhbHVlIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCi0gICAgYWRkcCB0MiwgdDMgIyBwb2lu
dGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gQ29kZUJsb2NrOjptX2FyZ3VtZW50
VmFsdWVQcm9maWxlcy4KKyAgICBhZGRwIHQyLCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9mIFZhbHVl
UHJvZmlsZSBhcnJheSBpbiB0aGUgdmFsdWUgcHJvZmlsZSBhcnJheS4KIC5hcmd1bWVudFByb2Zp
bGVMb29wOgogICAgIGlmIEpTVkFMVUU2NAogICAgICAgICBsb2FkcSBUaGlzQXJndW1lbnRPZmZz
ZXQgLSA4ICsgcHJvZmlsZUFyZ1NraXAgKiA4W2NmciwgdDBdLCB0MgpAQCAtMjU2Myw2ICsyNTY1
LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNybyB1cGRh
dGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQor
ICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRh
dGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0K
K2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBl
LCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
YXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQg
dGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNob3VsZCBh
bHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0X1dJTgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlk
ZW50aWZpZXIuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCwx
MCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsKIAogICAg
IHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChKU0NlbGwq
IGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRp
ZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmluZ0ltcGwq
KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlm
aWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwg
VW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZp
ZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3Qml0cyh1
aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdCaXRzKTsg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlm
aWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVu
dGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJZGVudGlm
aWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVy
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENv
ZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBB
U1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVpZCkpOwog
ICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJD
YWNoZWRUeXBlcy5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
QnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDYWNoZUVycm9yLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BB
VEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRo
UHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1Zh
bHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBw
cm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5hcnlBcml0aFByb2ZpbGUm
IHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNlcnZl
QXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQuaXNC
aWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
RXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
Mjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9m
ZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRh
YmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9m
QXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFJhcmVEYXRhLCBt
X2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJs
b2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUs
IG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZz
ZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5j
dGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsgfQogCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYg
KzM4NSw5IEBAIHN0YXRpYyB2b2lkIG92ZXJyaWRlRGVmYXVsdHMoKQogICAgICAgICBPcHRpb25z
Ojp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkgPSAxNTAwOwogICAgICAgICBP
cHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSA9IDEwMDsKICAgICB9CisKKyAg
ICAvLyBPT1BTCisgICAgLy9PcHRpb25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNo
ZWNrcG9pbnRzRm9yQmFzZWxpbmUoKSA9IDQ1MDsKIH0KIAogc3RhdGljIHZvaWQgY29ycmVjdE9w
dGlvbnMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlz
dC5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDYgQEAgYm9vbCBjYW5V
c2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEludDMyLCBldmFsVGhyZXNob2xkTXVs
dGlwbGllciwgMTAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1heGltdW1F
dmFsQ2FjaGVhYmxlU291cmNlTGVuZ3RoLCAyNTYsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwK
LSAgICB2KEJvb2wsIHJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25D
b3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JCYXNlbGluZSwgMTAwMCwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgdihJbnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50
c0ZvclVwcGVyVGllcnMsIDUwMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkBAIC01MzIs
NiArNTMxLDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJv
b2wsIHVzZURhdGFJQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNl
RGF0YUlDSW5PcHRpbWl6aW5nSklULCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihC
b29sLCB1c2VEYXRhSUNTaGFyaW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihC
b29sLCB1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICBcCiAgICAgLyogRmVhdHVyZSBGbGFncyAqL1wKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNp
b24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Niw5ICszOTYsMTEgQEAgdm9pZCBTY3JpcHRF
eGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aQogICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5
dGVjb2RlKCkpCiAgICAgICAgIGNvZGVCbG9jay0+dmFsaWRhdGUoKTsKIAotICAgIGlmIChPcHRp
b25zOjp1c2VMTEludCgpKQorICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGlu
ZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5l
Q29kZSkgeworICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2Rl
KGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0gZWxzZSBpZiAoT3B0aW9uczo6
dXNlTExJbnQoKSkgewogICAgICAgICBzZXR1cExMSW50KGNvZGVCbG9jayk7Ci0gICAgZWxzZQor
ICAgIH0gZWxzZQogICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrKTsKIAogICAgIGluc3Rh
bGxDb2RlKHZtLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+Y29kZVR5cGUoKSwgY29kZUJsb2NrLT5z
cGVjaWFsaXphdGlvbktpbmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTExJbnRUaWVyVXBDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRl
cldhcm1VcCgpCiAgICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRv
QkJRKCkpCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9y
QkJRT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1Ro
cmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNo
b2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVw
KCkpOwogICAgIH0KIAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNo
ZWQoKQpAQCAtNjUsOSArNjUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQog
ICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgpKQotICAg
ICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXpl
U29vbigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0
aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZVNvb24oKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwg
bnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xk
Rm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAogICAgIHN0cnVjdCBPU1JFbnRyeURhdGEg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQu
Y3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGllclVwQ291bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIFRpZXJVcENvdW50OjpUaWVyVXBDb3VudCgpCiB7
Ci0gICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0
ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiB9CiAKIFRpZXJVcENvdW50Ojp+VGll
clVwQ291bnQoKSA9IGRlZmF1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVGllclVwQ291bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGllclVwQ291bnQuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzcz
LDcgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCh1aW50MzJfdCBmdW5j
dGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBhZnRlciB3YXJtLXVwLiIpOwot
ICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVB
ZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9v
bCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCkBAIC05MCwxNCArOTAsMTQg
QEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbih1aW50MzJfdCBmdW5j
dGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uIik7
Ci0gICAgICAgIHNldE5ld1RocmVzaG9sZCgwLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhy
ZXNob2xkKDApOwogICAgIH0KIAogICAgIHZvaWQgb3B0aW1pemVTb29uKHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NS
KCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIHNvb24uIik7CiAgICAgICAgIC8v
IEZJWE1FOiBOZWVkIGFkanVzdG1lbnQgb25jZSB3ZSBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91
dCB3YXNtIGZ1bmN0aW9ucy4KLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvck9NR09wdGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNo
b2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAg
ICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCh1
aW50MzJfdCBmdW5jdGlvbkluZGV4LCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY2LDYgKzY2LDIwIEBAIHB1YmxpYzoKICAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0
cjsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEJhZyYgb3BlcmF0b3I9
KEJhZzxULCBVPiYmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHVud3JhcHBlZEhlYWQoKSA9
PSBvdGhlci51bndyYXBwZWRIZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAg
ICAgICAgQmFnIGRlc3Ryb3k7CisgICAgICAgIGRlc3Ryb3kubV9oZWFkID0gdW53cmFwcGVkSGVh
ZCgpOworICAgICAgICBtX2hlYWQgPSBvdGhlci51bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG90
aGVyLm1faGVhZCA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwog
ICAgIH5CYWcoKQogICAgIHsKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
cnVuLWpzYy1zdHJlc3MtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNj
LXN0cmVzcy10ZXN0cwkocmV2aXNpb24gMjgyNjc1KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNj
LXN0cmVzcy10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtNzc2LDE3ICs3NzYsMTggQEAgZW5kCiAK
ICMgRklYTUU6IG5lZWQgdG8gZml4IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTg3MDMgdG8gZW5hYmxlIHRoaXMgb24gTGludXgvTUlQUy4KIGRlZiBydW5CeXRlY29k
ZUNhY2hlSW1wbChvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMsICphZGRpdGlvbmFsRW52KQot
ICAgIGlmICgkaG9zdE9TID09ICJkYXJ3aW4iKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0
ZWNvZGUtY2FjaGUiCi0gICAgZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAkYXJjaGl0ZWN0
dXJlICE9ICJtaXBzIikKLSAgICAgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlWFhY
WFhYIgotICAgIGVsc2UKLSAgICAgICAgc2tpcAotICAgICAgICByZXR1cm4KLSAgICBlbmQKKyAg
ICAjIE9PUFMKKyAgICAjaWYgKCRob3N0T1MgPT0gImRhcndpbiIpCisgICAgIyAgICBmaWxlVGVt
cGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGUiCisgICAgI2Vsc2lmICgkaG9zdE9TID09ICJsaW51eCIg
JiYgJGFyY2hpdGVjdHVyZSAhPSAibWlwcyIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0
ZWNvZGUtY2FjaGVYWFhYWFgiCisgICAgI2Vsc2UKKyAgICAjICAgIHNraXAKKyAgICAjICAgIHJl
dHVybgorICAgICNlbmQKIAotICAgIG9wdGlvbnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9w
dGlvbnMKLSAgICBhZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRv
SGVscGVycyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1w
bGF0ZS50b19zLCAqdm1Db21tYW5kLCAkYmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50
T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyLCAqYWRkaXRpb25hbEVudikKKyAgICAj
b3B0aW9ucyA9IEJBU0VfT1BUSU9OUyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lm
aWNPcHRpb25zICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucworICAgICNhZGRSdW5Db21t
YW5kKCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1j
YWNoZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5k
LCAkYmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxl
RXJyb3JIYW5kbGVyLCAqYWRkaXRpb25hbEVudikKIGVuZAogCiBkZWYgcnVuQnl0ZWNvZGVDYWNo
ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438630</attachid>
            <date>2021-09-19 19:31:02 -0700</date>
            <delta_ts>2021-09-20 15:00:46 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>483391</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9m
aWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJy
YXlQcm9maWxlLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw2ICsxMzIs
NyBAQCB2b2lkIEFycmF5UHJvZmlsZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0CiB7CiAgICAgbV9v
YnNlcnZlZEFycmF5TW9kZXMgfD0gYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmUobGFzdFNlZW5TdHJ1
Y3R1cmUpOwogICAgIAorICAgIC8vIE9PUFM6IElzIGl0IG9rIGZvciB0aGlzIHRvIHJhY2U/IEkg
dGhpbmsgc28uCiAgICAgaWYgKCFtX2RpZFBlcmZvcm1GaXJzdFJ1blBydW5pbmcKICAgICAgICAg
JiYgaGFzVHdvT3JNb3JlQml0c1NldChtX29ic2VydmVkQXJyYXlNb2RlcykpIHsKICAgICAgICAg
bV9vYnNlcnZlZEFycmF5TW9kZXMgPSBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZShsYXN0U2VlblN0
cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsMTAg
QEAgb3BfZ3JvdXAgOlByb2ZpbGVkQmluYXJ5T3AsCiAgICAgICAgIGxoczogVmlydHVhbFJlZ2lz
dGVyLAogICAgICAgICByaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZFR5cGVz
OiBPcGVyYW5kVHlwZXMsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxl
CisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
X2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTEsOSArMzUyLDEwIEBAIG9wX2dy
b3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgIF0sCiAgICAgYXJnczogewogICAgICAg
ICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg0LDkgKzM4NiwxMCBAQCBvcCA6bmVnYXRlLAog
ICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZDogVmlydHVhbFJl
Z2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLAorICAgICAgICBwcm9maWxl
SW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQ
cm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFy
aXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApAQCAtNDc4LDYgKzQ4MSw3IEBAIG9wIDpn
ZXRfYnlfaWQsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgbW9kZU1ldGFkYXRhOiBHZXRCeUlk
TW9kZU1ldGFkYXRhLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgIH0KIAogb3AgOmdldF9ieV9pZF93aXRoX3Ro
aXMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVj
a3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBAIFZhbHVlUHJvZmlsZSog
dmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJuICZtZXRhZGF0YS5tX3By
b2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK3VpbnRwdHJfdCB2YWx1
ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4KQoreworICAgIFVOVVNF
RF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9w
Y29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50
SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJu
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRvclByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZOZXh0UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRl
Y29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3JfbmV4dCkgeworICAgICAgICBzd2l0Y2ggKGNo
ZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4
dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZSgp
OworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXREb25lOiByZXR1cm4gQnl0ZWNvZGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkRvbmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck5leHQ6OmdldFZhbHVlOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlZhbHVl
UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfSBlbHNlIAorICAgICAgICByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZlByb2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVN
ZXRhZGF0YT4KIGJvb2wgaGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFk
YXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhW
TSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQot
ewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4o
bV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRN
YXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
dmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5r
SW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSAm
JiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwogdm9pZCBDYWxs
TGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVTcGVjaWZpY0Nh
bGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5OSwxMSBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9mcmFtZVNodWZm
bGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRVc2VzRGF0YUlD
cyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwotICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQ
Uik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BS
OwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9m
YXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZh
c3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJQyA9PSBVc2VE
YXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVn
aXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxM
aW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcgQEAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAgZ29Qb2x5bW9y
cGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVNYXNrKSk7CiAg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
aXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBw
cmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMubGluaygmaml0
KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBwcmVwLgogICAg
ICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQ
Uiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7
CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGNh
bGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
byk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICB1LmNv
ZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMu
bV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMubV9jYWxs
ZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxs
ZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEzICszNDQsMzQgQEAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQykK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIG51
bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBpZiAoaXNEYXRh
SUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVn
OjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRh
SUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0
YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKLSAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAgc2V0VXNlc0Rh
dGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywg
aml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlzVGFpbENhbGwo
KSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4g
ZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CiB9CiAKIHZv
aWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkK
QEAgLTM2OSwxNyArMzgxLDMwIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0m
IHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIs
IG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQog
Cit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUoY2FsbExpbmtJ
bmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBK
U0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMo
Vk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgbV9jb2RlT3JpZ2lu
ID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBz
ZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAg
bV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247CisgICAg
aWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpCisgICAgICAgIG1fZnJh
bWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCp1bmxpbmtl
ZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsgLy8gT09QUzogdGltZSBmb3IgcmVmIGNv
dW50aW5nPworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJ
Qy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENh
bGxEZXN0aW5hdGlvbih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBs
YXRlIHJldGFnZ2VkQ29kZTxKU0VudHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0lu
Zm86OmVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNF
X0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6
Tm8pOwogCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQ
YXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBh
dGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAg
ICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAg
IHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CkBAIC0zOTcsNyArNDIyLDcgQEAgdm9pZCBDYWxsTGlu
a0luZm86OmVtaXREaXJlY3RUYWlsQ2FsbEZhcwogCiAgICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0g
aml0LmxhYmVsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CisgICAgICAgIHUuY29kZUlDLm1fZmFz
dFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0
UGF0aFN0YXJ0KTsKICAgICB9KTsKIAogICAgIC8vIC0gSWYgd2UncmUgbm90IHlldCBsaW5rZWQs
IHRoaXMgaXMgYSBqdW1wIHRvIHRoZSBzbG93IHBhdGguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDkgKzQzLDExIEBAIGNsYXNzIEpTRnVuY3Rpb247CiBlbnVtIE9wY29kZUlEIDog
dW5zaWduZWQ7CiBzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGE7CiAKK3N0cnVjdCBVbmxpbmtl
ZENhbGxMaW5rSW5mbzsKKwogY2xhc3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1Nl
bnRpbmVsTm9kZTxDYWxsTGlua0luZm8+IHsKIHB1YmxpYzoKLSAgICBlbnVtIENhbGxUeXBlIHsK
KyAgICBlbnVtIENhbGxUeXBlIDogdWludDhfdCB7CiAgICAgICAgIE5vbmUsCiAgICAgICAgIENh
bGwsCiAgICAgICAgIENhbGxWYXJhcmdzLApAQCAtMTY1LDYgKzE2Nyw4IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9jYWxsZWVHUFIgPSBjYWxsZWVHUFI7CiAgICAgfQogCisgICAgdm9pZCBpbml0aWFs
aXplRGF0YUlDKFZNJiwgVW5saW5rZWRDYWxsTGlua0luZm8mLCBHUFJSZWcgY2FsbGVlR1BSLCBH
UFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKKwogICAgIEdQUlJlZyBjYWxsZWVHUFIoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxlZUdQUjsgfQogICAgIAogICAgIGVudW0gY2xhc3MgVXNlRGF0YUlDIDog
dWludDhfdCB7CkBAIC0xNzMsMTMgKzE3NywxNiBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0
ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhl
bHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VE
X1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0
aEltcGwoQ2FsbExpbmtJbmZvKiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIHB1
YmxpYzoKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXREYXRhSUNGYXN0
UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZv
R1BSKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBlbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJl
cGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBH
UFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlD
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9S
RVRVUk47CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRo
KENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBw
cmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2b2lkIGVtaXREaXJl
Y3RGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGVtaXREaXJlY3RUYWlsQ2FsbEZh
c3RQYXRoKENDYWxsSGVscGVycyYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpOwogICAgIHZvaWQgZW1pdFNsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJik7CisgICAg
c3RhdGljIHZvaWQgZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUik7CiAgICAgdm9pZCByZXZlcnRDYWxsVG9TdHViKCk7CiAKICAgICBi
b29sIGlzRGF0YUlDKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VXNlRGF0YUlDPihtX3Vz
ZURhdGFJQykgPT0gVXNlRGF0YUlDOjpZZXM7IH0KQEAgLTIwMyw3ICsyMTAsNiBAQCBwdWJsaWM6
CiAgICAgICAgIG1fYWxsb3dTdHVicyA9IGZhbHNlOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBzbG93UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uKCk7CiAKQEAgLTI0MywxMSAr
MjQ5LDYgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3dTdHViID0gbnVsbHB0cjsKICAgICB9CiAK
LSAgICBKSVRTdHViUm91dGluZSogc2xvd1N0dWIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
c2xvd1N0dWIuZ2V0KCk7Ci0gICAgfQotCiAgICAgYm9vbCBzZWVuT25jZSgpCiAgICAgewogICAg
ICAgICByZXR1cm4gbV9oYXNTZWVuU2hvdWxkUmVwYXRjaDsKQEAgLTMwOCw5ICszMDksOSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWxsVHlwZT4obV9jYWxsVHlwZSk7
CiAgICAgfQogCi0gICAgdWludDMyX3QqIGFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICZtX21heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5m
bywgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgfQogCiAgICAgdWludDMy
X3QgbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQpAQCAtMzgxLDcgKzM4Miw5IEBAIHB1
YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5h
bFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OworCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOworCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gbV9kb25lTG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IG1fc2xvd1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAgdW5pb24gVW5p
b25UeXBlIHsKQEAgLTM5Nyw2ICs0MDAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsTG9jYXRpb247CiAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsZWVM
b2NhdGlvbjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IG1fc2xvd1BhdGhTdGFydDsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJu
YWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKICAgICAgICAgfSBjb2RlSUM7CiAgICAgfSB1Owog
CkBAIC00MjQsNiArNDI4LDEzIEBAIGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxMaW5rSW5mb0Nv
ZGVPcmkKICAgICByZXR1cm4gY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKTsKIH0KIAorc3RydWN0
IFVubGlua2VkQ2FsbExpbmtJbmZvIHsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7
IC8vIEN1cnJlbnRseSwgb25seSB1c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNhbiB0cml2aWFs
bHkgcHJvZHVjZSBhIENvZGVPcmlnaW4uCisgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxs
VHlwZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRp
b247CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBmcmFtZVNodWZm
bGVEYXRhOworfTsKKwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNiArMzA4LDggQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3Zp
ZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKKwor
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxpbnRFeGVjdXRl
Q291bnRlcigpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwog
fQpAQCAtMzE4LDcgKzMyMCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIEMKICAgICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKICAgICBvcHRpbWl6ZUFmdGVy
V2FybVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKKyAgICAvL2ppdEFmdGVyV2FybVVwKCk7
CiAKICAgICBpZiAob3RoZXIubV9yYXJlRGF0YSkgewogICAgICAgICBjcmVhdGVSYXJlRGF0YUlm
TmVjZXNzYXJ5KCk7CkBAIC0zNTksNyArMzYxLDkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0m
IHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkpOwogICAg
IHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7Ci0g
ICAgCisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50
RXhlY3V0ZUNvdW50ZXIoKTsKKwogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMp
OwogfQogCkBAIC0zNzAsMTAgKzM3NCwxMyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0s
IFN0cnVjdHVyZSogCiAvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5rZWQgYnl0ZWNv
ZGUgZ2VuZXJhdGlvbi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdlbmVyYXRlIGNv
bnRyb2wKIC8vIGZsb3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFzb24gZm9yIHRo
aXMgaXMgd2UgcmVseSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2FtZSBmb3IKIC8v
IGFsbCB0aGUgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2UgcmVseSBvbiB0
aGlzIGZhY3QgYnkgY2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKLS8vIGluc2lkZSBVbmxp
bmtlZENvZGVCbG9jay4KKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4gQWxzbywgQmFzZWxp
bmUgSklUIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5r
ZWRDb2RlQmxvY2ssCisvLyBzbyB0aGUgYnl0ZWNvZGUgbXVzdCByZW1haW4gdGhlIHNhbWUgYmV0
d2VlbiBDb2RlQmxvY2tzIHNoYXJpbmcgYW4gVW5saW5rZWRDb2RlQmxvY2suCiBib29sIENvZGVC
bG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKICAgICBKU1Njb3Bl
KiBzY29wZSkKIHsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7IC8vIFdlIG5lZWQgdG8g
c2V0IHVwIG91ciB2YWx1ZSBwcm9maWxlIHBvaW50ZXJzLgorCiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIApAQCAtNDcxLDYgKzQ3
OCwxOSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAg
IGJyZWFrOyBcCiAgICAgfQogCisjZGVmaW5lIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklM
RShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURB
VEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2Vk
Q29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAg
ICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJ
TEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFE
QVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtl
ZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKGJ5dGVjb2RlLm1fcHJvZmlsZUluZGV4KTsgXAorICAg
ICAgICBicmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvblN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5z
dHJ1Y3Rpb24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJ
RCA9IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTMzLDE0ICs1NTMsMTQgQEAgYm9vbCBD
b2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRl
UHJvbWlzZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5L
KE9wQWRkKQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAg
ICBMSU5LKE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJ
bmMpCi0gICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9w
TXVsKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5L
X1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC03NjksNyArNzg5
LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgIC8vIHJl
bHkgb24gdGhlIGluc3RydWN0aW9uIGNvdW50IChhbmQgYXJlIGluIHRoZW9yeSBwZXJtaXR0ZWQg
dG8gYWxzbyBpbnNwZWN0IHRoZQogICAgIC8vIGluc3RydWN0aW9uIHN0cmVhbSB0byBtb3JlIGFj
Y3VyYXRlIGFzc2VzcyB0aGUgY29zdCBvZiB0aWVyLXVwKS4KICAgICBvcHRpbWl6ZUFmdGVyV2Fy
bVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKKyAgICAvL2ppdEFmdGVyV2FybVVwKCk7CiAK
ICAgICAvLyBJZiB0aGUgY29uY3VycmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2RlIGJsb2Nr
J3MgaGFzaCwgdGhlbiBjb21wdXRlIGl0IGhlcmUKICAgICAvLyBzeW5jaHJvbm91c2x5LgpAQCAt
NzkzLDYgKzgxMyw3NyBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb25Db21tb24oVk0m
CiAgICAgbV9vd25lckVkZ2Uuc2V0KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
OjpjcmVhdGUodm0sIHRoaXMpKTsKIH0KIAordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlu
a2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7CisgICAgc2V0
SklUQ29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8m
IGppdENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAgICAgICAg
IEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAgaGFuZGxl
ci5uYXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJn
ZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9CisgICAg
fQorCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Cisg
ICAgICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOworICAg
ICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGppdENv
ZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1
dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAgICAgIHN3
aXRjaCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5
cGU6Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQ
b29sW2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7Cisg
ICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZv
ID0gKnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9hZCk7Cisg
ICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXREYXRhLm1fY2Fs
bExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUlu
ZGV4KSk7CisgICAgICAgICAgICAgICAgLy8gT09QUzogZG9uJ3QgaGFyZGNvZGUgdGhlc2UgcmVn
aXN0ZXJzIGxpa2UgdGhpcy4KKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmluaXRpYWxp
emVEYXRhSUModm0oKSwgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtp
XSA9IGNhbGxMaW5rSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bzogeworICAgICAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2Vk
U3R1YkluZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyo+KGVudHJ5
LnBheWxvYWQpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IGppdERhdGEubV9zdHViSW5mb3MuYWRkKHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZSwgQ29k
ZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICBzdHViSW5mby0+aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKHRoaXMs
IHVubGlua2VkU3R1YkluZm8pOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFu
dFBvb2xbaV0gPSBzdHViSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6
IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFu
dFBvb2xbaV0gPSBmdW5jdGlvbkRlY2woaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1
bmN0aW9uRXhwcjogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZCk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5t
X2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIEdsb2JhbENvZGU6CisgICAg
Y2FzZSBNb2R1bGVDb2RlOgorICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAgIG1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRnVuY3Rpb25D
b2RlOgorICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJl
Y2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCisgICAgICAgIC8vIERvbid0
IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRpb24uCisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxp
bmVkICY9IGNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwoKSkgJiYgREZHOjptaWdodElubGluZUZ1
bmN0aW9uKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIXVubGlua2Vk
Q29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUgJiYgT3B0aW9uczo6dXNlQmFzZWxp
bmVKSVRDb2RlU2hhcmluZygpKQorICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlu
a2VkQmFzZWxpbmVDb2RlID0gV1RGTW92ZShqaXRDb2RlKTsKK30KKwogQ29kZUJsb2NrOjp+Q29k
ZUJsb2NrKCkKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTE1MzQsMzkgKzE2MjUsNDAgQEAg
dm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogCiAgICAgdXBkYXRlQWxs
UHJlZGljdGlvbnMoKTsKIAotI2lmIEVOQUJMRShKSVQpCi0gICAgYm9vbCBpc0VsaWdpYmxlRm9y
TExJbnREb3duZ3JhZGUgPSBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZTsKLSAgICBtX2lz
RWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IGZhbHNlOwotICAgIC8vIElmIEJhc2VsaW5lSklU
IGNvZGUgaXMgbm90IGV4ZWN1dGluZywgYW5kIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCBleGlz
dHMsIHdlIGF0dGVtcHQKLSAgICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFuZCBy
ZWluc3RhbGwgTExJbnQgY29kZSB0byBzYXZlIEpJVCBtZW1vcnkuCi0gICAgaWYgKE9wdGlvbnM6
OnVzZUxMSW50KCkgJiYgIW1faGFzTGlua2VkT1NSRXhpdCAmJiBqaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQgJiYgIW1fdm0tPmhlYXAuY29kZUJsb2NrU2V0KCkuaXNDdXJyZW50bHlF
eGVjdXRpbmcodGhpcykpIHsKLSAgICAgICAgaWYgKENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJs
b2NrID0gb3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKCFvcHRpbWl6
ZWRDb2RlQmxvY2stPm1fb3NyRXhpdENvdW50ZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNF
bGlnaWJsZUZvckxMSW50RG93bmdyYWRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Q29k
ZSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRyeXBvaW50KHRo
aXMpOwotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkgPT0gSklU
VHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygp
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkSGFuZGxlcklu
Zm8mIHVubGlua2VkSGFuZGxlciA9IG1fdW5saW5rZWRDb2RlLT5leGNlcHRpb25IYW5kbGVyKGkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX3JhcmVE
YXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVyLnRhcmdl
dCkucHRyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5s
aW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihM
TEludDo6aGFuZGxlQ2F0Y2goaW5zdHJ1Y3Rpb24ud2lkdGgoKSkuY29kZSgpKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB1bmxpbmtJbmNvbWluZ0NhbGxz
KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGNsZWFyIHRoZXNlIG91
dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxpemVVbmNvbmRpdGlvbmFsbHkgYWxsIGNvbXBpbGVyIHRo
cmVhZHMKLSAgICAgICAgICAgICAgICAgICAgLy8gYXJlIHNhZmVwb2ludGVkLCBtZWFuaW5nIHRo
ZXkncmUgcnVubmluZyBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIGJ5dGVjb2RlIHBhcnNlciwgYW5k
IGJ5dGVjb2RlCi0gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlciBpcyB0aGUgb25seSBkYXRh
IHN0cnVjdHVyZSBwb2ludGluZyBpbnRvIHRoZSB2YXJpb3VzICppbmZvcy4KLSAgICAgICAgICAg
ICAgICAgICAgcmVzZXRKSVREYXRhKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotI2VuZGlmCisvLyBPT1BTOiByZWNvbmNpbGUg
dGhpcworLy8jaWYgRU5BQkxFKEpJVCkKKy8vICAgIGJvb2wgaXNFbGlnaWJsZUZvckxMSW50RG93
bmdyYWRlID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGU7CisvLyAgICBtX2lzRWxpZ2li
bGVGb3JMTEludERvd25ncmFkZSA9IGZhbHNlOworLy8gICAgLy8gSWYgQmFzZWxpbmVKSVQgY29k
ZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0cywg
d2UgYXR0ZW1wdAorLy8gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGluZSBKSVQgY29kZSBhbmQgcmVp
bnN0YWxsIExMSW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5LgorLy8gICAgaWYgKE9wdGlvbnM6
OnVzZUxMSW50KCkgJiYgIW1faGFzTGlua2VkT1NSRXhpdCAmJiBqaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQgJiYgIW1fdm0tPmhlYXAuY29kZUJsb2NrU2V0KCkuaXNDdXJyZW50bHlF
eGVjdXRpbmcodGhpcykpIHsKKy8vICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2Rl
QmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisvLyAgICAgICAgICAgIGlmICghb3B0
aW1pemVkQ29kZUJsb2NrLT5tX29zckV4aXRDb3VudGVyKSB7CisvLyAgICAgICAgICAgICAgICBp
ZiAoaXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlKSB7CisvLyAgICAgICAgICAgICAgICAgICAg
bV9qaXRDb2RlID0gbnVsbHB0cjsKKy8vICAgICAgICAgICAgICAgICAgICBMTEludDo6c2V0RW50
cnlwb2ludCh0aGlzKTsKKy8vICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXRU
eXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7CisvLworLy8gICAgICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxpbmtlZENvZGUtPm51bWJlck9mRXhj
ZXB0aW9uSGFuZGxlcnMoKTsgaSsrKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IG1fdW5saW5rZWRDb2RlLT5l
eGNlcHRpb25IYW5kbGVyKGkpOworLy8gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5m
byYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07CisvLyAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9ucygpLmF0
KHVubGlua2VkSGFuZGxlci50YXJnZXQpLnB0cigpOworLy8gICAgICAgICAgICAgICAgICAgICAg
ICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbDxF
eGNlcHRpb25IYW5kbGVyUHRyVGFnPihMTEludDo6aGFuZGxlQ2F0Y2goaW5zdHJ1Y3Rpb24ud2lk
dGgoKSkuY29kZSgpKSk7CisvLyAgICAgICAgICAgICAgICAgICAgfQorLy8KKy8vICAgICAgICAg
ICAgICAgICAgICB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisvLworLy8gICAgICAgICAgICAgICAg
ICAgIC8vIEl0J3Mgc2FmZSB0byBjbGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGluIGZpbmFs
aXplVW5jb25kaXRpb25hbGx5IGFsbCBjb21waWxlciB0aHJlYWRzCisvLyAgICAgICAgICAgICAg
ICAgICAgLy8gYXJlIHNhZmVwb2ludGVkLCBtZWFuaW5nIHRoZXkncmUgcnVubmluZyBlaXRoZXIg
YmVmb3JlIG9yIGFmdGVyIGJ5dGVjb2RlIHBhcnNlciwgYW5kIGJ5dGVjb2RlCisvLyAgICAgICAg
ICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50aW5n
IGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgorLy8gICAgICAgICAgICAgICAgICAgIHJlc2V0SklU
RGF0YSgpOworLy8gICAgICAgICAgICAgICAgfSBlbHNlCisvLyAgICAgICAgICAgICAgICAgICAg
bV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOworLy8gICAgICAgICAgICB9Cisv
LyAgICAgICAgfQorLy8gICAgfQorLy8KKy8vI2VuZGlmCiAgICAgCiAgICAgaWYgKEpJVENvZGU6
OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKQogICAgICAgICBmaW5hbGl6ZUxMSW50SW5s
aW5lQ2FjaGVzKCk7CkBAIC0xNTk0LDcgKzE2ODYsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRo
dW5rOgotICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsK
KyAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jb3VudCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAg
ICAgICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKQEAgLTMxMzMsNyAr
MzIyNSw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lm
IEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0
dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzM0OSwxMyArMzQ0
MSwxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAg
c3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAg
IHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwor
ICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9m
aWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERp
dj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC0zMzY3LDExICszNDU5LDExIEBAIFVuYXJ5QXJpdGhQcm9maWxl
KiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7
CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigp
Lm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9w
TmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5j
OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5t
X2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8
T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBw
Yy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzUyMSwyOCArMzYxMywxOSBAQCBzdGQ6Om9w
dGlvbmFsPEJ5dGVjb2RlSW5kZXg+IENvZGVCbG9jazo6CiAgICAgcmV0dXJuIGJ5dGVjb2RlSW5k
ZXg7CiB9CiAKLWludDMyX3QgQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJl
c2hvbGQpCi17Ci0gICAgc3dpdGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5kaWRPcHRpbWl6ZSgp
KSB7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKLSAgICAgICAgcmV0dXJuIHRo
cmVzaG9sZDsKLSAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKLSAgICAgICAgcmV0dXJuIHRocmVz
aG9sZCAqIDQ7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKLSAgICAgICAgcmV0dXJuIHRocmVz
aG9sZCAvIDI7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB0
aHJlc2hvbGQ7Ci19CisvL3ZvaWQgQ29kZUJsb2NrOjpqaXRBZnRlcldhcm1VcCgpCisvL3sKKy8v
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJ
VChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSwgdGhpcyk7CisvL30KIAot
dm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXRTb29u
KCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9s
ZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSwgdGhpcyk7Cisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQodW5saW5rZWRDb2RlQmxv
Y2soKS0+dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRo
aXMpOwogfQogCi12b2lkIENvZGVCbG9jazo6aml0U29vbigpCit2b2lkIENvZGVCbG9jazo6aml0
TmV4dEludm9jYXRpb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJl
c2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRo
aXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMp
OwogfQogCiBib29sIENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBj
b25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBAIGNsYXNzIE1ldGFkYXRhVGFi
bGU7CiBjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKIGNsYXNzIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
OwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CitjbGFzcyBCYXNlbGluZUpJVENvZGU7CiAKIERF
Q0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKENvZGVCbG9ja1JhcmVEYXRhKTsK
IApAQCAtMTU4LDcgKzE1OSw5IEBAIHB1YmxpYzoKICAgICBNZXRhZGF0YVRhYmxlKiBtZXRhZGF0
YVRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5nZXQoKTsgfQogCiAgICAgdW5zaWdu
ZWQgbnVtUGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQorcHJp
dmF0ZToKICAgICB2b2lkIHNldE51bVBhcmFtZXRlcnModW5zaWduZWQgbmV3VmFsdWUpOworcHVi
bGljOgogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSBjb25zdCB7IHJl
dHVybiBtX251bWJlck9mQXJndW1lbnRzVG9Ta2lwOyB9CiAKQEAgLTE2Nyw3ICsxNzAsNiBAQCBw
dWJsaWM6CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsg
fQogICAgIHVuc2lnbmVkIG51bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
aGFzQ2hlY2twb2ludHMoKSAqIG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKLSAgICB1bnNpZ25l
ZCogYWRkcmVzc09mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KIAogICAgIENvZGVC
bG9jayogYWx0ZXJuYXRpdmUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sq
PihtX2FsdGVybmF0aXZlLmdldCgpKTsgfQpAQCAtMjMyLDE2ICsyMzQsNiBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wg
aW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVy
IGFkZGluZyBiYWNrIHRoZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJuIHRydWUgaWYgYHJl
Z2AgaXMgYHRoaXNgIGFuZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAgICAgICBpZiAocmVn
LmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2Vs
bCgpOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fbnVtVmFycyk7
CkBAIC0yNjYsOCArMjU4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGdldElDU3RhdHVzTWFwKElD
U3RhdHVzTWFwJiByZXN1bHQpOwogICAgIAogI2lmIEVOQUJMRShKSVQpCisgICAgLy8gT09QUzog
bW92ZSBhcml0aG1ldGljIElDcyBhbmQgc3dpdGNoIHRhYmxlcyBvdXQgb2YgaGVyZSwgYW5kIG9u
dG8gSklUQ29kZS4KICAgICBzdHJ1Y3QgSklURGF0YSB7CiAgICAgICAgIFdURl9NQUtFX1NUUlVD
VF9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKIAogICAgICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9zOwogICAg
ICAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOwpAQCAtMjgyLDkgKzI3NiwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9y
aWdpbk1hcDsKICAgICAgICAgYm9vbCBtX2hhc0NhbGxlZVNhdmVSZWdpc3RlcnMgeyBmYWxzZSB9
OwogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7Ci0g
ICAgICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworCisgICAgICAgIEZpeGVkVmVjdG9yPHZv
aWQqPiBtX2ppdENvbnN0YW50UG9vbDsKKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkpJVENvbnN0YW50UG9vbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKSVREYXRhLCBtX2pp
dENvbnN0YW50UG9vbCk7IH0KICAgICB9OwogCisgICAgdm9pZCBzZXR1cFdpdGhVbmxpbmtlZEJh
c2VsaW5lQ29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPik7CisKICAgICBKSVREYXRhJiBlbnN1cmVK
SVREYXRhKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyKQogICAgIHsKICAgICAgICAg
aWYgKExJS0VMWShtX2ppdERhdGEpKQpAQCAtMjkzLDYgKzI5MSw4IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
Jik7CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURGF0YSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RGF0YSk7IH0KKwogICAgIEpJVEFkZElDKiBh
ZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKICAgICBKSVRNdWxJQyogYWRkSklUTXVs
SUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CiAgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5
QXJpdGhQcm9maWxlKik7CkBAIC0zMjIsMTYgKzMyMiw3IEBAIHB1YmxpYzoKICAgICAvLyBsb29r
aW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBjYWxsaW5n
IHRoaXMuCiAgICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4
KEJ5dGVjb2RlSW5kZXgpOwogICAgIAotICAgIHZvaWQgc2V0SklUQ29kZU1hcChKSVRDb2RlTWFw
JiYgaml0Q29kZU1hcCkKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKLSAgICAgICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcCA9IFdU
Rk1vdmUoaml0Q29kZU1hcCk7Ci0gICAgfQotICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVN
YXAoKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwot
ICAgICAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1faml0Q29kZU1hcDsKLSAgICB9
CisgICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpOwogCiAgICAgdm9pZCBzZXRQQ1Rv
Q29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYpOwogICAg
IHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKHZvaWQqIHBjKTsKQEAgLTQ3MiwxMCAr
NDYzLDEyIEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJv
ZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFs
dWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxl
cygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgp
ID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1
c2VKSVQoKSk7CiAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCk7
CisgICAgICAgIAogICAgIH0KIAogICAgIFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlRm9yQXJn
dW1lbnQodW5zaWduZWQgYXJndW1lbnRJbmRleCkKQEAgLTU3MSw2ICs1NjQsNyBAQCBwdWJsaWM6
CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBy
ZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXS5nZXQoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
IGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbihyZWcpOyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24g
Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihp
bmRleCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVm
ZmVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9jb25zdGFudFJlZ2lz
dGVycykgKyBkZWNsdHlwZShtX2NvbnN0YW50UmVnaXN0ZXJzKTo6ZGF0YU1lbW9yeU9mZnNldCgp
OyB9CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsg
cmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZG
dW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNjAw
LDYgKzU5NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7
CiAgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKICAgICB9CisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShp
bnQgdGFibGVJbmRleCk7CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFudFBvb2woKQorICAg
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhICYmIGppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1faml0Q29uc3Rh
bnRQb29sLmRhdGEoKTsKKyAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtl
ZFN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVy
T2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2VkU2ltcGxl
SnVtcFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyByZXR1
cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9
CkBAIC02MTAsNiArNjEwLDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2pp
dERhdGEpOwogICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgfQorICAgIFN0cmluZ0p1bXBUYWJsZSYgYmFzZWxpbmVTdHJp
bmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOwogI2VuZGlmCiAgICAgc2l6ZV90IG51
bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7IH0K
ICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQpAQCAtNjMyLDIxICs2MzMsMjAg
QEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpCiAgICAg
ewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNoZWNrSWZUaHJlc2hvbGRD
cm9zc2VkQW5kU2V0KHRoaXMpOworICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVy
LT5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKICAgICB9CiAKICAgICB2b2lk
IGRvbnRKSVRBbnl0aW1lU29vbigpCiAgICAgewotICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50
ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5k
ZWZlckluZGVmaW5pdGVseSgpOwogICAgIH0KIAotICAgIGludDMyX3QgdGhyZXNob2xkRm9ySklU
KGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2FybVVwKCk7CiAgICAgdm9p
ZCBqaXRTb29uKCk7CisgICAgdm9pZCBqaXROZXh0SW52b2NhdGlvbigpOwogCiAgICAgY29uc3Qg
QmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAgICAgIHJldHVy
biAqbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIH0KIAogICAgIHR5cGVkZWYgSGFzaE1hcDxz
dGQ6OnR1cGxlPFN0cnVjdHVyZUlELCB1bnNpZ25lZD4sIEZpeGVkVmVjdG9yPExMSW50UHJvdG90
eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVjdHVyZVdhdGNocG9pbnRN
YXA7CkBAIC03OTcsNiArNzk3LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNEZWJ1Z2dlclJl
cXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CiAgICAgdm9pZCog
ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1Z2dlclJlcXVlc3RzOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVxdWVzdHMpOyB9CiAKICAg
ICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpOwogICAgIHZvaWQg
cmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykKQEAgLTgzOCw2ICs4Mzks
NyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKIAogICAg
IGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJpdGZpZWxkIGJlY2F1c2Ug
dGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVC
bG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBFTkFCTEUoSklUKQogICAg
IHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBERkc6OkNhcGFiaWxpdHlM
ZXZlbApAQCAtOTA3LDExICs5MDksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX21ldGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0cnVjdGlv
bnNSYXdQb2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9pbnN0
cnVjdGlvbnNSYXdQb2ludGVyKTsgfQogCi0gICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZv
ckZ1enppbmdFYXJseVJldHVybigpCi0gICAgewotICAgICAgICAvLyBTb21lIGJ1aWx0aW5zIGFy
ZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRoZXkgcnVuLgotICAgICAg
ICByZXR1cm4gIW1fdW5saW5rZWRDb2RlLT5pc0J1aWx0aW5GdW5jdGlvbigpOwotICAgIH0KKyAg
ICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkgeyByZXR1
cm4gbV91bmxpbmtlZENvZGUtPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0
dXJuKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluYWxpemVMTEludElubGluZUNhY2hl
cygpOwpAQCAtMTAxMCw3ICsxMDA4LDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBv
aW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4g
bV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEpJVERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBz
ZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jawpAQCAtMTAyOSw3ICsxMDI5LDcgQEAgcHJp
dmF0ZToKIAogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAgICAg
Ci0gICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAg
ICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIqIG1fbGxpbnRFeGVjdXRlQ291bnRlciB7IG51bGxw
dHIgfTsKIAogICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2ppdEV4ZWN1dGVDb3VudGVy
OwogICAgIHVpbnQzMl90IG1fb3NyRXhpdENvdW50ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxp
bmVzLmgiCkBAIC00MCw5ICs0MSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9m
aWxlKGNvbnMKICAgICBpZiAobV9tZXRhZGF0YSkgewogI2RlZmluZSBWSVNJVChfX29wKSBcCiAg
ICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBm
dW5jKG1ldGFkYXRhLm1fcHJvZmlsZSwgZmFsc2UpOyB9KTsKLQogICAgICAgICBGT1JfRUFDSF9P
UENPREVfV0lUSF9WQUxVRV9QUk9GSUxFKFZJU0lUKQotCiAjdW5kZWYgVklTSVQKIAogICAgICAg
ICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wSXRlcmF0b3JPcGVuPihbJl0gKGF1dG8mIG1ldGFkYXRh
KSB7IApAQCAtNTcsNyArNTYsNiBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmls
ZShjb25zCiAgICAgICAgICAgICBmdW5jKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLCBmYWxzZSk7
CiAgICAgICAgIH0pOwogICAgIH0gICAKLQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgpAQCAtOTksNCArOTcsMjQgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5r
SW5mbwogICAgIH0KIH0KIAorI2lmIEVOQUJMRShKSVQpCitBTFdBWVNfSU5MSU5FIGNvbnN0IEpJ
VENvZGVNYXAmIENvZGVCbG9jazo6aml0Q29kZU1hcCgpCit7CisgICAgQVNTRVJUKGppdFR5cGUo
KSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2Vs
aW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1faml0Q29kZU1hcDsKK30KKworQUxXQVlT
X0lOTElORSBTaW1wbGVKdW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTd2l0Y2hKdW1wVGFi
bGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1f
aml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKworQUxX
QVlTX0lOTElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTdHJpbmdTd2l0
Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklU
Q29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9j
a0VkZ2UuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiAr
NzAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdy
YXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwogICAgIAogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlKiB3cmFwQW5kQWN0aXZhdGUoQ29kZUJsb2NrKiBjb2RlQmxvY2spOworCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLCBtX2NvZGVCbG9jayk7IH0KICAgICAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRl
ci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRpb25Db3VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBA
IGJvb2wgRXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgdGhyZXNob2xkID0gY2xpcHBlZFRocmVzaG9sZChjb2RlQmxv
Y2sgPyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIDogbnVsbHB0ciwgdGhyZXNob2xkKTsKKyAg
ICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKHRocmVzaG9sZCk7CiAgICAgCiAgICAgbV9j
b3VudGVyID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXRocmVzaG9sZCk7CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRl
ci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhlY3V0aW9uQ291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsgLy8gSWYgeW91IHVzZSB0
aGlzLCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCgpIG1heSBzdGlsbCByZXR1cm4gZmFs
c2UuCiAgICAgYm9vbCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sqKTsK
ICAgICBib29sIGhhc0Nyb3NzZWRUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVybiBtX2NvdW50ZXIg
Pj0gMDsgfQotICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2Rl
QmxvY2sqKTsKKyAgICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29k
ZUJsb2NrKiA9IG51bGxwdHIpOwogICAgIHZvaWQgZGVmZXJJbmRlZmluaXRlbHkoKTsKICAgICBk
b3VibGUgY291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdG90YWxD
b3VudCkgKyBtX2NvdW50ZXI7IH0KICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
QEAgLTg2LDEzICs4Niw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFQgdGhyZXNob2xkKQorICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQo
VCB0aHJlc2hvbGQpCiAgICAgewotICAgICAgICBpbnQzMl90IG1heFRocmVzaG9sZDsKLSAgICAg
ICAgaWYgKE9wdGlvbnM6OnJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50
cygpICYmIGdsb2JhbE9iamVjdCkKLSAgICAgICAgICAgIG1heFRocmVzaG9sZCA9IGdsb2JhbE9i
amVjdC0+d2Vha1JhbmRvbUludGVnZXIoKSAlIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVu
Q2hlY2twb2ludHMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0g
bWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOworICAgICAgICBpbnQz
Ml90IG1heFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2lu
dHMoKTsKICAgICAgICAgaWYgKHRocmVzaG9sZCA+IG1heFRocmVzaG9sZCkKICAgICAgICAgICAg
IHRocmVzaG9sZCA9IG1heFRocmVzaG9sZDsKICAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRh
LmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBzdHJ1Y3Qg
R2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0IHsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRN
b2RlTWV0YWRhdGFVbnNldCkgPT0gMTIpOwogCiBzdHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YUFy
cmF5TGVuZ3RoIHsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCwg
YXJyYXlQcm9maWxlKTsgfQogICAgIEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGU7CiB9Owogc3Rh
dGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoKSA9PSAxMik7
CkBAIC04OCw2ICs4OSw3IEBAIHVuaW9uIEdldEJ5SWRNb2RlTWV0YWRhdGEgewogICAgICAgICBH
ZXRCeUlkTW9kZSBtb2RlOwogICAgICAgICB1aW50OF90IGhpdENvdW50Rm9yTExJbnRDYWNoaW5n
OyAvLyBUaGlzIG11c3QgYmUgemVybyB3aGVuIHdlIHVzZSBQcm90b0xvYWQgbW9kZS4KICAgICB9
OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9CiAgICAgR2V0QnlJZE1vZGVNZXRh
ZGF0YURlZmF1bHQgZGVmYXVsdE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0IHVu
c2V0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggYXJyYXlMZW5ndGhN
b2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0
dXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEzLDcgQEAgR2V0
QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICByZXR1cm4gR2V0
QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpH
ZXRCeUlkU2VsZjogewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5t
X2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9j
ay0+dm0oKSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zvcklt
cHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93
VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
ciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw3IEBAIEluQnlTdGF0dXMgSW5CeVN0YXR1czo6Y29tcHV0
ZUZvclN0dWJJbmYKICAgICAgICAgcmV0dXJuIEluQnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAK
ICAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjogewotICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7Cisg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUodm0pOwogICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdG
b3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIEluQnlTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJ
bmZvLT5pZGVudGlmaWVyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
NiwxMSArMTc2LDE2IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgbGlua0NvZGVJbmxpbmUK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQ
cm9wZXJ0eUFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTZWxmUHJvcGVydHlBY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAg
ICAgLy8gVGhlc2UgZHluYW1pYyBzbG90cyBnZXQgZmlsbGVkIGluLiBOb3RoaW5nIGVsc2UgdG8g
ZG8uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIENDYWxsSGVscGVycyBqaXQ7
CiAgICAgCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5mby5iYXNlR1BSOwpAQCAtMjMzLDIzICsy
MzgsMzEgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBoYXNGcmVlUmVnaXN0ZQogICAgIHJl
dHVybiBnZXRTY3JhdGNoUmVnaXN0ZXIoc3R1YkluZm8pICE9IEludmFsaWRHUFJSZWc7CiB9CiAK
LWJvb2wgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCitib29sIElubGlu
ZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
IHsKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGhhc0ZyZWVSZWdpc3RlcihzdHViSW5mbyk7CiB9CiAK
LWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1Yklu
Zm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBB
U1NFUlQoY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvZmZzZXQpKTsK
KyAgICBBU1NFUlQoY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1
YkluZm8sIG9mZnNldCkpOworCisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAg
ICAgICAgLy8gVGhlc2Ugc2xvdHMgZ2V0IGZpbGxlZCBpbi4gTm90aGluZyBlbHNlIHRvIGRvLgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCkBA
IC0yNzksMjIgKzI5MiwyNSBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVy
dHlSCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNz
Ojppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNB
cnJheSogYXJyYXkpCitib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5
KiBhcnJheSkKIHsKICAgICBBU1NFUlQoYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7
CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoIWhhc0ZyZWVSZWdp
c3RlcihzdHViSW5mbykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhaGFz
QW55QXJyYXlTdG9yYWdlKGFycmF5LT5pbmRleGluZ1R5cGUoKSkgJiYgYXJyYXktPmluZGV4aW5n
VHlwZSgpICE9IEFycmF5Q2xhc3M7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFy
cmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiti
b29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBB
U1NFUlQoaXNDYWNoZWFibGVBcnJheUxlbmd0aChzdHViSW5mbywgYXJyYXkpKTsKKyAgICBBU1NF
UlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNoZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0
dWJJbmZvLCBhcnJheSkpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZp
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMxOSwxNyArMzM1LDIwIEBAIGJvb2wgSW5s
aW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKFMKICAgICByZXR1cm4gbGlua2VkQ29kZUlu
bGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJs
ZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiBo
YXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorYm9vbCBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgQVNTRVJUKGlzQ2FjaGVhYmxlU3RyaW5nTGVu
Z3RoKHN0dWJJbmZvKSk7CisgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGlzQ2FjaGVhYmxl
U3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pKTsKIAogICAgIGlmICghc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNjMsMTMg
KzM4MiwxOCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoCiB9CiAK
IAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitib29sIElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAg
ICAgICAvLyBUaGVzZSBzbG90cyBnZXQgZmlsbGVkIGluLiBOb3RoaW5nIGVsc2UgdG8gZG8uCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIEdQUlJlZyBiYXNlID0gc3R1YkluZm8u
YmFzZUdQUjsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVncygpOwog
CkBAIC0zODUsNiArNDA5LDggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNj
ZXNzKAogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCisvLyBPT1BTOiBNYWtlIHRo
aXMgc3R1ZmYgd29yayB3aXRoIGRhdGEgaWNzIHRvIG5vdCBhc3N1bWUgaW5saW5lIGFjY2Vzcy4K
Kwogdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5s
aW5lQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB0YXJnZXQpCiB7CiAg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKQEAgLTQwNCw5ICs0MzAsMTIgQEAgdm9p
ZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogdm9pZCBJbmxpbmVBY2Nlc3M6
OnJld2lyZVN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4gdGFyZ2V0KQogewogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAg
IC8vIE9PUFM6IG1ha2Ugc29tZSB2ZXJzaW9uIG9mIElubGluZUFjY2VzcyBmb3IgYmFzZWxpbmUu
IFBlcmhhcHMgbWFrZSBpdCBkYXRhIGRyaXZlbi4gT3IgcGVyaGFwcyBoYXZlIHRoZSBjb2RlCisg
ICAgICAgIC8vIGJlIHNoYXJlZCBzb21laG93IGJldHdlZW4gVW5saW5rZWRDb2RlQmxvY2tzLgor
CiAgICAgICAgIC8vIElmIGl0IGlzIG5vdCBHZXRCeUlkLWxpa2UtdGhpbmcsIHdlIGRvIG5vdCBl
bWl0IG5vcCBzbGVkIChlLmcuIEdldEJ5VmFsKS4KICAgICAgICAgLy8gVGhlIGNvZGUgaXMgYWxy
ZWFkeSBhbiBpbmRpcmVjdCBqdW1wLCBhbmQgb25seSB0aGluZyB3ZSBzaG91bGQgZG8gaXMgcmVw
bGFjaW5nIG1fY29kZVB0ci4KLSAgICAgICAgaWYgKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRp
ZmllcikgeworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQgJiYgc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CiAgICAgICAgICAg
ICAvLyBJZiBtX2NvZGVQdHIgaXMgcG9pbnRpbmcgdG8gc3R1YkluZm8uc2xvd1BhdGhTdGFydExv
Y2F0aW9uLCB0aGlzIG1lYW5zIHRoYXQgSW5saW5lQWNjZXNzIGNvZGUgaXMgbm90IGEgc3R1YiBv
bmUuCiAgICAgICAgICAgICAvLyBXZSByZXdyaXRlIHRoaXMgd2l0aCB0aGUgc3R1Yi1iYXNlZCBk
aXNwYXRjaGluZyBjb2RlIG9uY2UsIGFuZCBjb250aW51ZSB1c2luZyBpdCB1bnRpbCB3ZSByZXNl
dCB0aGUgY29kZS4KICAgICAgICAgICAgIGlmIChzdHViSW5mby5tX2NvZGVQdHIuZXhlY3V0YWJs
ZUFkZHJlc3MoKSA9PSBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24uZXhlY3V0YWJsZUFk
ZHJlc3MoKSkgewpAQCAtNDIxLDcgKzQ1MCw5IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVT
dHViQXNKdW1wSW5BY2MKICAgICAgICAgICAgICAgICB9KSwgIklubGluZUFjY2VzczogbGlua2lu
ZyBzdHViIGNhbGwiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHN0dWJJ
bmZvLm1fY29kZVB0ciA9IHRhcmdldDsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCw4ICs0NjUsMTQgQEAgdm9pZCBJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5r
aW5nIGNvbnN0YW50IGp1bXAiKTsKIH0KIAotdm9pZCBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFz
SnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3Zv
aWQgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogeworICAgIGlmIChjb2RlQmxvY2st
PnVzZURhdGFJQygpICYmIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKSB7CisgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHN0dWJJbmZvLnNsb3dQYXRoU3Rh
cnRMb2NhdGlvbjsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
ID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5mby5z
dGFydC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChDQ2Fs
bEhlbHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgIC8vIFdlIGRvbid0
IG5lZWQgYSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1waW5nIGlu
dG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4KICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Jbmxp
bmVBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTksMTQgKzk5LDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWF4KHNpemUsIHNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhTdHJ1Y3R1
cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMgYm9v
bCBjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBQcm9w
ZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNl
KFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0
YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0Fy
cmF5Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0dXJl
U3R1YkluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0cnVjdHVy
ZVN0dWJJbmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNj
ZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIGJvb2wgZ2Vu
ZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBn
ZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYs
IFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBjYW5HZW5lcmF0
ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBQcm9w
ZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNl
KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZz
ZXQpOworICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiwg
U3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFi
bGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0
aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZv
JiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNjZXNzKENvZGVC
bG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIGJvb2wg
Z2VuZXJhdGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIAog
ICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNj
ZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFiZWw8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KTsKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5B
Y2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRTdHViUm91dGluZVB0clRhZz4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0VfT1BF
UkFUT1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7CiAg
ICAgdWludDhfdCBzZWVuTW9kZXMgeyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZlNlZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0YWRh
dGEsIHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc2Vl
bk1vZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxs
TGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJbnRD
YWxsTGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQogCiBwcml2YXRlOgogICAgIHVpbnRwdHJf
dCBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0IH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0YWRhdGFUYWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRh
ZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGZ1bmMoKm1ldGFkYXRhKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBudW1FbnRyaWVzKCkKKyAgICB7CisgICAg
ICAgIGF1dG8qIHN0YXJ0ID0gYml0d2lzZV9jYXN0PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdl
dChPcDo6b3Bjb2RlSUQpKTsKKyAgICAgICAgYXV0byogZW5kID0gYml0d2lzZV9jYXN0PHR5cGVu
YW1lIE9wOjpNZXRhZGF0YSo+KGdldEltcGwoT3A6Om9wY29kZUlEICsgMSkpOworICAgICAgICBy
ZXR1cm4gZW5kIC0gc3RhcnQ7CisgICAgfQorCiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCk7CiAK
ICAgICB2b2lkIHJlZigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCwxMCAr
MTgwLDEwIEBAIFB1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIo
KTsKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHVpZCk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHVi
SW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShwcm9maWxlZEJsb2NrLT52bSgpKTsKKyAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJl
dHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3R1YkluZm8t
Pm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3RydWN0
dXJlLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lv
bihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVk
ZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRl
ICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKIApAQCAtNjUsOSAr
NjYsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYoCiAgICAgQVNT
RVJUKGhhc0NvbnN0YW50SWRlbnRpZmllcik7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2Fj
aGVUeXBlOjpHZXRCeUlkU2VsZik7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAg
ICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUg
PSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5o
ZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zm
c2V0OworICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjppbml0QXJyYXlMZW5ndGgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9j
a2VyKQpAQCAtODcsOSArODgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJ
ZFJlcGxhCiAgICAgQVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAg
IHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2UpOwogICAgIG1f
aWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAg
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+
aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsK
LSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9m
ZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEluQnlJZFNlbGYoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlKiBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTk3LDkgKzk4LDkgQEAgdm9pZCBT
dHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEluQnlJZFNlbGYoYwogICAgIEFTU0VSVChtX2NhY2hlVHlw
ZSA9PSBDYWNoZVR5cGU6OlVuc2V0KTsKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5
cGU6OkluQnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53
cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsK
KyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5m
bzo6ZGVyZWYoKQpAQCAtMjM2LDcgKzIzNyw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3Ry
dWN0dXJlU3R1YkluZm8KICAgICAgICAgLy8gd2UncmUgYnVmZmVyZWQgaXMgYmVjYXVzZSB3ZSBy
ZWx5IG9uIGl0IHRvIHJlc2V0IGR1cmluZyBHQyBpZiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmUKICAgICAgICAgLy8gaXMgY29sbGVjdGVkLgogICAgICAgICBtX2lkZW50aWZpZXIgPSBudWxs
cHRyOwotICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAg
ICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKICAgICAgICAgCiAgICAgICAgIC8v
IElmIHdlIGdlbmVyYXRlZCBzb21lIGNvZGUgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGF0dGVtcHQg
dG8gcmVwYXRjaCBpbiB0aGUgZnV0dXJlIHVudGlsIHdlCiAgICAgICAgIC8vIGdhdGhlciBlbm91
Z2ggY2FzZXMuCkBAIC0yNTEsNyArMjUyLDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVz
ZXQoY29uc3QgQ29uYwogewogICAgIGNsZWFyQnVmZmVyZWRTdHJ1Y3R1cmVzKCk7CiAgICAgbV9p
ZGVudGlmaWVyID0gbnVsbHB0cjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xl
YXIoKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOwogCiAgICAgaWYgKG1f
Y2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTI4NSw2
ICsyODYsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAg
ICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OlB1dFByaXZhdGVOYW1lOgogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRo
aXMsIFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5
cGU6OkluQnlJZDoKQEAgLTM2MCw4ICszNjIsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2
aXNpdFdlYWtSZWZlcmVuCiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKLSAgICBp
ZiAobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQotICAgICAgICBpc1ZhbGlkICY9IHZtLmhl
YXAuaXNNYXJrZWQobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICBpZiAo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSkKKyAg
ICAgICAgaXNWYWxpZCAmPSB2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZSk7CiAgICAgaWYgKG1f
Y2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikKICAgICAgICAgaXNWYWxpZCAmPSB1LnN0dWIt
PnZpc2l0V2Vhayh2bSk7CiAKQEAgLTM3NSw4ICszNzcsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjp2aXNpdFdlYWtSZWZlcmVuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBT
dHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikK
IHsKLSAgICBpZiAobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQotICAgICAgICBtX2lubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIGlmIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodmlzaXRvci52bSgp
KSkKKyAgICAgICAgc3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIAogICAgIGlmICht
X2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIHUuc3R1Yi0+cHJvcGFnYXRl
VHJhbnNpdGlvbnModmlzaXRvcik7CkBAIC00MzAsNiArNDMyLDIwNCBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5
cGU7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1
bmxpbmtlZFN0dWJJbmZvKQoreworICAgIGFjY2Vzc1R5cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFj
Y2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0YXJ0OyAvLyBPT1BTOiBk
byB3ZSBuZWVkIGEgc3RhcnQgZm9yIGRhdGEgSUNzPworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlu
a2VkU3R1YkluZm8uZG9uZUxvY2F0aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVu
bGlua2VkU3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXgg
PSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKSk7CisgICAgY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHVi
SW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBtX2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRp
b247CisKKyAgICB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpOworICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYg
dW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAv
LyBGb3IgaXRlcmF0b3JfbmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0aGUgc2NyYXRjaCByZWdpc3Rl
ciBlaXRoZXIuCisgICAgICAgIHVzZWRSZWdpc3RlcnMuYWRkKEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6c2NyYXRjaCk7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25EZWxldGVCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6R2V0QnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFs
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VP
ZjoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlH
ZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0
aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVj
dDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGlt
aXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhp
czoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0
aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVC
cmFuZDogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFu
ZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZh
dGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlk
OgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBj
YXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZv
LmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoK
KyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisg
ICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0
cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERl
ZmluZToKKyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZp
bmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5m
by5wdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAg
ICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5m
by5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnByaXZhdGVGaWVsZFB1dEtp
bmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1p
emUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNh
c2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmll
ciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6
YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRl
bGV0ZUJ5SUQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAg
IGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3Mu
cHJvcGVydHlHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5l
RGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxp
bmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1l
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVy
dHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFs
dWVHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBoYXNDb25z
dGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgcHJvdG90eXBlSXNLbm93bk9iamVjdCA9
IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2
YWx1ZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdp
c3RlcnM6OnByb3RvOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpJbkJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgIGNh
c2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVu
dGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJ
bkJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJl
Z3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUlu
QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlJZFJl
Z2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OlRyeUdldEJ5SWQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0g
dHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBoYXNDb25zdGFu
dElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0
aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlk
V2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVncy50aGlzR1BSID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICAgICAgbV9zdHViSW5m
b0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBoYXNDb25z
dGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwor
ICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAg
ICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2Ug
QWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmll
ciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsKQorICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpwcm9maWxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OlNldFByaXZhdGVCcmFuZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5k
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgdmFsdWVH
UFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJh
bmRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MuYnJhbmRHUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVja0Nv
bnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHV0S2lu
ZC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCkBAIC01Niw2ICs1Nyw3IEBAIGVudW0gY2xhc3MgQWNj
ZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlWYWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRC
eVZhbCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAg
ICBIYXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzgwLDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUg
OiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CkBAIC05OCw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZv
aWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAg
ICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBo
YXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVz
ZXRzIGl0c2VsZiwKQEAgLTMyNSwxMyArMzMxLDE5IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAg
ICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CisgICAgUHJvcGVydHlPZmZzZXQgYnlJZFNlbGZPZmZz
ZXQ7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBieUlkU2VsZk9mZnNldCk7IH0K
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgbV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlKTsgfQogICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgfSBieUlkU2VsZjsKICAgICAg
ICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAgICAgfSB1OwotICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIGlu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUp
OworICAgIH0KKyAgICBTdHJ1Y3R1cmVJRCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAw
IH07CiBwcml2YXRlOgogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAg
IC8vIFJlcHJlc2VudHMgdGhvc2Ugc3RydWN0dXJlcyB0aGF0IGFscmVhZHkgaGF2ZSBidWZmZXJl
ZCBBY2Nlc3NDYXNlcyBpbiB0aGUgUG9seW1vcnBoaWNBY2Nlc3MuCkBAIC00NDcsNiArNDU5LDE4
IEBAIGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW4KICAgICB9CiB9CiAK
K3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJp
dmF0ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSB9OworICAgIEVD
TUFNb2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgpIH07CisgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4OworICAgIC8vIE9PUFM6IERvIHdlIG5lZWQgc3RhcnQgZm9yIGRhdGEg
SUNzPworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsg
Ly8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNh
Y2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW5zdGFuY2VvZicg
Y2FjaGVzLgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2Nh
dGlvbjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xvd1Bh
dGhTdGFydExvY2F0aW9uOworfTsKKwogI2Vsc2UKIAogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVy
LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N1cGVyU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBw
cmludFN1cGVyU2FtcGxlclN0YXRlKCkKICAgICBkb3VibGUgcGVyY2VudGFnZSA9IDEwMC4wICog
aW4gLyAoaW4gKyBvdXQpOwogICAgIGlmIChwZXJjZW50YWdlICE9IHBlcmNlbnRhZ2UpCiAgICAg
ICAgIHBlcmNlbnRhZ2UgPSAwLjA7Ci0gICAgZGF0YUxvZygiUGVyY2VudCB0aW1lIGJlaGluZCBz
dXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNlbnRhZ2UsICJcbiIpOworICAgIGRhdGFMb2coIlBl
cmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiJVxu
Iik7CiB9CiAKIHZvaWQgZW5hYmxlU3VwZXJTYW1wbGVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNp
b24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAi
VW5saW5rZWRDb2RlQmxvY2suaCIKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2lu
Y2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3Ry
dWN0cy5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgpAQCAtNzgsNiArNzksOCBAQCBVbmxpbmtl
ZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0mCiAgICAgICAgIGNyZWF0ZVJhcmVEYXRh
SWZOZWNlc3NhcnkobG9ja2VyKTsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9wcml2YXRlQnJhbmRS
ZXF1aXJlbWVudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcml2YXRlQnJhbmRSZXF1aXJlbWVu
dDo6TmVlZGVkKTsKICAgICB9CisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhy
ZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1V
cCgpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CkBAIC0zMTYsNiArMzE5LDMz
IEBAIGludCBVbmxpbmtlZENvZGVCbG9jazo6b3V0T2ZMaW5lSnVtcE9mZnMKICAgICByZXR1cm4g
bV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5nZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQogCisjaWYgQVNT
RVJUX0VOQUJMRUQKK2Jvb2wgVW5saW5rZWRDb2RlQmxvY2s6Omhhc0lkZW50aWZpZXIoVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICAvLyBPT1BTOiBkbyB3aGF0IENvZGVCbG9jayBkb2Vz
IGFuZCBtYWtlIGEgaGFzaCB0YWJsZT8KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
YmVyT2ZJZGVudGlmaWVycygpOyArK2kpIHsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIoaSkuaW1w
bCgpID09IHVpZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisjZW5kaWYKKworaW50MzJfdCBVbmxpbmtlZENvZGVCbG9jazo6dGhyZXNob2xk
Rm9ySklUKGludDMyX3QgdGhyZXNob2xkKQoreworICAgIHN3aXRjaCAoZGlkT3B0aW1pemUoKSkg
eworICAgIGNhc2UgVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU6CisgICAgICAgIHJldHVybiB0aHJl
c2hvbGQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6RmFsc2U6CisgICAgICAgIHJldHVybiB0aHJlc2hv
bGQgKiA0OworICAgIGNhc2UgVHJpU3RhdGU6OlRydWU6CisgICAgICAgIHJldHVybiB0aHJlc2hv
bGQgLyAyOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gdGhy
ZXNob2xkOworfQorCisKIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJv
ZmlsZXMoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX21ldGFkYXRhLT5pc0ZpbmFsaXplZCgp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1
LDEyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5j
bHVkZSAiQXJyYXlQcm9maWxlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgog
I2luY2x1ZGUgIkNvZGVUeXBlLmgiCiAjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKKyNpbmNs
dWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5o
IgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgpAQCAt
NjQsNiArNjYsNyBAQCBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNz
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogc3Ry
dWN0IEV4ZWN1dGFibGVJbmZvOwogZW51bSBjbGFzcyBMaW5rVGltZUNvbnN0YW50IDogaW50MzJf
dDsKIApAQCAtMTc1LDYgKzE3OCw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZpeGVkVmVjdG9y
PFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9j
b25zdGFudFJlZ2lzdGVyczsgfQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29u
c3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0
YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4g
bV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsg
fQogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uOyB9CiAKQEAgLTIwNyw2ICsyMTEsMTUgQEAgcHVibGljOgogICAg
IEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1vZGUpOyB9CiAKICAgICBjb25zdCBJbnN0
cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3Q7CisgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uQXQoQnl0ZWNvZGVJbmRleCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5z
dHJ1Y3Rpb25zKCkuYXQoaW5kZXgpLnB0cigpOyB9CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgY29uc3Qg
YXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5hdCgwKS5wdHIoKTsKKyAg
ICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zRW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbnN0cnVjdGlvbnNC
ZWdpbikgKyBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChp
bnN0cnVjdGlvbiA+PSBpbnN0cnVjdGlvbnNCZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGluc3RydWN0
aW9uc0VuZCk7CisgICAgICAgIHJldHVybiBpbnN0cnVjdGlvbiAtIGluc3RydWN0aW9uc0JlZ2lu
OworICAgIH0KKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbnNTaXplKCkgY29uc3QgeyByZXR1cm4g
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMo
KSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogICAgIHVuc2lnbmVkIG51bVZh
cnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KQEAgLTMzNCwxMCArMzQ3LDIxIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWV0YWRhdGEtPnNpemVJbkJ5dGVzKCk7CiAgICAgfQog
CisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCisg
ICAgeworICAgICAgICAvLyBTb21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29t
cGxldGUgdGhlIGxvb3BzIHRoZXkgcnVuLgorICAgICAgICByZXR1cm4gIWlzQnVpbHRpbkZ1bmN0
aW9uKCk7CisgICAgfQogICAgIHZvaWQgYWxsb2NhdGVTaGFyZWRQcm9maWxlcygpOwogICAgIFVu
bGlua2VkVmFsdWVQcm9maWxlJiB1bmxpbmtlZFZhbHVlUHJvZmlsZSh1bnNpZ25lZCBpbmRleCkg
eyByZXR1cm4gbV92YWx1ZVByb2ZpbGVzW2luZGV4XTsgfQogICAgIFVubGlua2VkQXJyYXlQcm9m
aWxlJiB1bmxpbmtlZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9hcnJh
eVByb2ZpbGVzW2luZGV4XTsgfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29sIGhhc0lk
ZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyNlbmRpZgorCisgICAgaW50MzJfdCB0aHJl
c2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOworCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5r
ZWRDb2RlQmxvY2soVk0mLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUlu
Zm8mLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPik7CiAKQEAgLTM5Nyw2ICs0MjEsNyBA
QCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGV4aWNhbFNjb3BlRmVhdHVyZXMgOiA0OwogcHVi
bGljOgogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOworICAgIFJlZlB0cjxCYXNlbGluZUpJ
VENvZGU+IG1fdW5saW5rZWRCYXNlbGluZUNvZGU7CiBwcml2YXRlOgogICAgIENvZGVGZWF0dXJl
cyBtX2ZlYXR1cmVzIHsgMCB9OwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKQEAg
LTQxMyw2ICs0MzgsOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlv
blN0cmVhbT4gbV9pbnN0cnVjdGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzczsKIAorICAgIC8vIE9PUFM6IGJpbmQgYSBiZXR0ZXIg
cGxhY2UgdG8gc3RvcmUgdGhpcyBzdHVmZj8KKyAgICBWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxl
PiBtX2JpbmFyeUFyaXRoUHJvZmlsZXM7CisgICAgVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPiBt
X3VuYXJ5QXJpdGhQcm9maWxlczsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIERGRzo6RXhp
dFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKQEAgLTQ1OCw2ICs0ODYsMzAgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0
KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlv
biogcGMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5
dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpOworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZEJpbmFyeUFyaXRoUHJvZmls
ZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2JpbmFyeUFyaXRoUHJvZmls
ZXMuc2l6ZSgpOworICAgICAgICBtX2JpbmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKEJpbmFyeUFy
aXRoUHJvZmlsZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1
bHQgPSBtX3VuYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fdW5hcnlBcml0aFBy
b2ZpbGVzLmFwcGVuZChVbmFyeUFyaXRoUHJvZmlsZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGJpbmFyeUFyaXRoUHJvZmlsZSh1
bnNpZ25lZCBpKSB7IHJldHVybiBtX2JpbmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KKyAgICBVbmFy
eUFyaXRoUHJvZmlsZSYgdW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1cm4gbV91
bmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KKworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciYg
bGxpbnRFeGVjdXRlQ291bnRlcigpIHsgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsgfQog
CiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0
cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwpAQCAtNDY1LDYgKzUxNyw3IEBAIHByaXZhdGU6
CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4ZWRWZWN0b3I8RXhw
cmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNlbGluZUV4ZWN1dGlv
bkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIEZpeGVkVmVjdG9yPFVubGlua2Vk
VmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRB
cnJheVByb2ZpbGU+IG1fYXJyYXlQcm9maWxlczsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9y
LmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4
IEBAIHB1YmxpYzoKICAgICBib29sIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBj
b25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2Rl
cygpOyB9CiAgICAgYm9vbCBoYXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJs
b2NrLT5oYXNDaGVja3BvaW50cygpOyB9CiAgICAgYm9vbCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7
IHJldHVybiBtX2NvZGVCbG9jay0+aGFzVGFpbENhbGxzKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRC
aW5hcnlBcml0aFByb2ZpbGUoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQ
cm9maWxlKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpIHsgcmV0dXJu
IG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpOyB9CiAKICAgICAvLyBVcGRhdGlu
ZyBVbmxpbmtlZENvZGVCbG9jay4KICAgICB2b2lkIHNldEhhc0NoZWNrcG9pbnRzKCkgeyBtX2Nv
ZGVCbG9jay0+c2V0SGFzQ2hlY2twb2ludHMoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2aXNp
b24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0
YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxNSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVubGlua2VkTWV0YWRhdGFUYWJsZSk7CiAgICAg
fQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZT4KKyAgICB1aW50cHRyX3Qgb2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1faXNGaW5hbGl6ZWQpOworICAgICAgICB1aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQgPSBt
X2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bjb2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRUYWJs
ZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07CisgICAgICAgIGJhc2VUeXBlT2Zmc2V0ID0gcm91bmRV
cFRvTXVsdGlwbGVPZihhbGlnbm9mKHR5cGVuYW1lIE9wY29kZTo6TWV0YWRhdGEpLCBiYXNlVHlw
ZU9mZnNldCk7CisgICAgICAgIHJldHVybiBiYXNlVHlwZU9mZnNldCArIHNpemVvZih0eXBlbmFt
ZSBPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7CisgICAgfQorCiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgogICAgIHVuc2lnbmVkIG51bUVudHJpZXMoKTsK
IApAQCAtMTA3LDYgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzX29mZnNldDE2
VGFibGVTaXplOwogICAgIH0KIAorCiAgICAgdXNpbmcgT2Zmc2V0MzIgPSB1aW50MzJfdDsKICAg
ICB1c2luZyBPZmZzZXQxNiA9IHVpbnQxNl90OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDEzICs0NSwxMSBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0c0Fy
Z3VtZW50OwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZTcGVjRmFpbEJ1
Y2tldHMgPSAxOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYnVja2V0SW5kZXhNYXNr
ID0gbnVtYmVyT2ZCdWNrZXRzIC0gMTsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHRv
dGFsTnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRzICsgbnVtYmVyT2ZTcGVjRmFpbEJ1
Y2tldHM7CiAgICAgCiAgICAgVmFsdWVQcm9maWxlQmFzZSgpCiAgICAgewotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkKLSAgICAgICAg
ICAgIG1fYnVja2V0c1tpXSA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgICAgICBj
bGVhckJ1Y2tldHMoKTsKICAgICB9CiAgICAgCiAgICAgRW5jb2RlZEpTVmFsdWUqIHNwZWNGYWls
QnVja2V0KHVuc2lnbmVkIGkpCkBAIC01OSw2ICs1NywxMiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxl
QmFzZSB7CiAgICAgICAgIEFTU0VSVChudW1iZXJPZkJ1Y2tldHMgKyBpIDwgdG90YWxOdW1iZXJP
ZkJ1Y2tldHMpOwogICAgICAgICByZXR1cm4gbV9idWNrZXRzICsgbnVtYmVyT2ZCdWNrZXRzICsg
aTsKICAgICB9CisKKyAgICB2b2lkIGNsZWFyQnVja2V0cygpCisgICAgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkKKyAgICAgICAg
ICAgIG1fYnVja2V0c1tpXSA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIH0KICAg
ICAKICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyh1bnNpZ25lZCBidWNrZXQpIGNvbnN0
CiAgICAgewpAQCAtMTIzLDggKzEyNyw2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCBy
ZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJvbSBhbnkgdGhyZWFkCi0gICAg
Ly8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAgU3BlY3VsYXRlZFR5cGUgY29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiAgICAgewog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsr
aSkgewpAQCAtMTM5LDcgKzE0MSw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAg
ICAgCiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgRW5j
b2RlZEpTVmFsdWUgbV9idWNrZXRzW3RvdGFsTnVtYmVyT2ZCdWNrZXRzXTsKIAogICAgIFNwZWN1
bGF0ZWRUeXBlIG1fcHJlZGljdGlvbiB7IFNwZWNOb25lIH07CkBAIC0xNjEsNiArMTYzLDcgQEAg
c3RydWN0IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldAogCiBzdHJ1Y3QgVmFsdWVQ
cm9maWxlIDogcHVibGljIFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4gewog
ICAgIFZhbHVlUHJvZmlsZSgpIDogVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czww
PigpIHsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0c1swXSk7IH0KIH07CiAK
IHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9m
aWxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU5OCw3ICsxNTk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRVbmFyeQogICAgICAgICBlbWl0VW5hcnlPcDxPcE5vdD4oZHN0LCBzcmMpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAgT3BOZWdhdGU6OmVtaXQo
dGhpcywgZHN0LCBzcmMsIHR5cGUpOworICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3Qs
IHNyYywgdHlwZSwgbV9jb2RlQmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIG9wX2JpdG5vdDoKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BCaXRu
b3Q+KGRzdCwgc3JjKTsKQEAgLTE2OTYsMTMgKzE2OTYsMTMgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRUeXBlTwogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEluYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BJbmM6OmVtaXQodGhpcywgc3Jj
RHN0KTsKKyAgICBPcEluYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFy
eUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BE
ZWM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1f
Y29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0Owog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY4Miw3ICs2ODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFJlZ2lzdGVy
SUQqPgogICAgICAgICBlbWl0QmluYXJ5T3AoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBz
cmMxLCBSZWdpc3RlcklEKiBzcmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMpOwor
ICAgICAgICAgICAgQmluYXJ5T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcywg
bV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgICAgIHJldHVy
biBkc3Q7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw2IEBAIHZvaWQq
IHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSoKICAgICBBU1NFUlQoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBBU1NFUlQoIWNvZGVC
bG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRm
Z0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VPU1JFbnRy
eVRvREZHKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVk
ZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRl
ICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSklULmgiCkBAIC0xMTksMTAgKzEyMCwxMCBA
QCB2b2lkIGhhbmRsZUV4aXRDb3VudHMoVk0mIHZtLCBDQ2FsbEhlbHBlCiAgICAgaW50MzJfdCBj
bGlwcGVkVmFsdWU7CiAgICAgc3dpdGNoIChqaXQuY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewog
ICAgIGNhc2UgSklUVHlwZTo6REZHSklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9i
YWxPYmplY3QoKSwgdGFyZ2V0VmFsdWUpOworICAgICAgICBjbGlwcGVkVmFsdWUgPSBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQodGFyZ2V0VmFsdWUpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKLSAgICAgICAgY2xpcHBlZFZhbHVl
ID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChqaXQuY29kZUJs
b2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1
ZSA9IFVwcGVyVGllckV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQodGFyZ2V0VmFs
dWUpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzA5LDEwICszMTAsMTUgQEAgdm9pZCByZWlmeUlubGluZWRD
YWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICAgICAgdHJ1ZUNhbGxlciA/IEFzc2VtYmx5
SGVscGVyczo6VXNlRXhpc3RpbmdUYWdSZWdpc3RlckNvbnRlbnRzIDogQXNzZW1ibHlIZWxwZXJz
OjpDb3B5QmFzZWxpbmVDYWxsZWVTYXZlZFJlZ2lzdGVyc0Zyb21CYXNlRnJhbWUsCiAgICAgICAg
ICAgICBHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1Q0KTsKIAor
ICAgICAgICAvLyBPT1BTOiBDb25zaWRlciBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGZvciBi
YXNlbGluZSBwYi9tZXRhZGF0YSByZWdpc3RlcnMKICAgICAgICAgaWYgKGNhbGxlcklzTExJbnQp
IHsKICAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBq
aXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0
b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNh
bGxlci0+bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBi
YXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwog
ICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVl
U2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lz
dGVyczo6cGJHUFIpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAg
ICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5l
Q29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFk
YXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2Rl
QmxvY2ssIEpJVDo6c19tZXRhZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFz
ZWxpbmVKSVRDb25zdGFudFBvb2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwg
YmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw2ICs0MTAs
OSBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
LCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5h
dGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAg
fSBlbHNlIHsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNv
ZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7Cisg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JF
eGl0LT5iYXNlbGluZUpJVENvbnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CisK
ICAgICAgICAgY29kZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKIAog
ICAgICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzMwLDYgKzczMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6Omlu
UGFpcihjYWxsZWVUYWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1ZmZs
ZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxl
RGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVE
YXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwog
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytp
KSB7CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCBpICsgMSk7CkBAIC04ODksNyArODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBp
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAg
ICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAg
ICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODM0LDYgKzgz
NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwg
RGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFs
bG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51
bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9q
aXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAg
ICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
aSArIDEpOwpAQCAtOTg1LDcgKzk4Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsK
ICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICszOTg1
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBKSVRQ
dXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBl
OjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNl
ZFJlZ2lzdGVycywKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwg
Y29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2VkUmVn
aXN0ZXJzLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpTVmFs
dWVSZWdzOjpwYXlsb2FkT25seShwcm9wZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQUlJl
Zywgc3R1YkluZm9HUFIpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0g
dHJ1ZTsKIApAQCAtMTQ3NzMsNyArMTQ3NzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTG9nU2hhZG93Q2hpCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9k
ZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBzY29wZVJlZyA9IHNjb3BlLmdwcigpOwogCi0gICAg
bV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVn
cywgc2NvcGVSZWcsIG1faml0LmNvZGVCbG9jaygpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBtX2pp
dC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBz
Y29wZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwg
Y2FsbFNpdGVJbmRleCk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMxNyw3ICs0MzE3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpID8g
cGFyYW1zLmdwU2NyYXRjaCgwKSA6IEludmFsaWRHUFJSZWc7CiAKICAgICAgICAgICAgIGF1dG8g
Z2VuZXJhdG9yID0gQm94PEpJVFB1dEJ5VmFsR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAgICAgICAg
ICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmln
aW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLAorICAgICAgICAgICAgICAg
IGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNh
bGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLAogICAgICAgICAgICAgICAg
IHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJS
ZWcsIHN0dWJJbmZvR1BSKTsKIAogICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5w
cm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKQEAgLTEwMjg1LDYgKzEwMjg1LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtUGFzc2VkQXJnczsgaSA8
IG51bUFsbG9jYXRlZEFyZ3M7ICsraSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVE
YXRhLmFyZ3MuYXBwZW5kKFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpKTsK
ICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3Nl
ZEFyZ3M7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBq
aXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgc2h1
ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKHNlbWFudGljTm9kZU9y
aWdpbik7CkBAIC0xMDQ0MywxMyArMTA0NDQsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQocGFyYW1zWzEgKyBpXS5yZWNvdmVyeUZvckpT
VmFsdWUoKSk7CiAKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0g
bnVtQXJnczsKKyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0
LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxv
Y2soKSk7CiAKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGpp
dC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4pOwogICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUklu
Zm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0lu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJS
ZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICBh
dXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQ
UkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICBDYWxs
RnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAg
ICAgICAgICAgICAgICB9KTsKQEAgLTEwNzkyLDcgKzEwNzk0LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQ
YXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJl
Z1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxT
bG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtMTEwNzMsNyArMTEwNzUsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFs
aWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGpp
dCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBh
cmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDE3ICs0MiwyOCBAQCBjbGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1
Y3Qob3ApCiAgICAgICAgIHJldHVybiBpZiBlbXB0eT8KIAotICAgICAgICBkZWYgY29udmVydEZp
ZWxkcyhwcmVmaXgsIGZpZWxkcykKKyAgICAgICAgZGVmIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlv
bnMocHJlZml4LCBmaWVsZE5hbWVzKQorICAgICAgICAgICAgZmllbGROYW1lcy5tYXAgZG8gfGZp
ZWxkTmFtZXwKKyAgICAgICAgICAgICAgICAiI3twcmVmaXh9c3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsxLi5dfSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAg
ZW5kLmpvaW4oIlxuIikKKyAgICAgICAgZW5kCisKKyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMo
cHJlZml4LCBmaWVsZHMsIGZpZWxkTmFtZXMpCiAgICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxm
aWVsZCwgdHlwZXwKICAgICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAg
ICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXgg
KyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCisgICAgICAgICAgICAgICAgICAgICIje3By
ZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlLCBmaWVs
ZE5hbWVzKX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307IgorICAgICAg
ICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAgICAgICAgICAg
IGZpZWxkTmFtZXMucHVzaChmaWVsZE5hbWUpCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZp
eH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgogICAgICAgICAgICAgICAgIGVuZAogICAg
ICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0g
Y29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVsZE5hbWVzID0g
W10KKyAgICAgICAgcHJlZml4ID0gIiAgICAgICAgIgorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0
RmllbGRzKHByZWZpeCwgQGZpZWxkcywgZmllbGROYW1lcykKKyAgICAgICAgZmllbGRzID0gZmll
bGRzICsgIlxuIiArIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVz
KQogCiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5v
dCBAaW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3
LDYgKzM2NywyOCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6bG9hZFByb3BlcnR5KEdQUlJlCiAg
ICAgICAgIHJlc3VsdCk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9yZVByb3BlcnR5
KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBHUFJSZWcg
c2NyYXRjaCkKK3sKKyAgICBKdW1wIGlzSW5saW5lID0gYnJhbmNoMzIoTGVzc1RoYW4sIG9mZnNl
dCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgCisgICAgbG9hZFB0
cihBZGRyZXNzKG9iamVjdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7
CisgICAgbmVnMzIob2Zmc2V0KTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNl
dCk7CisgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKKyAgICAKKyAgICBpc0lubGluZS5saW5rKHRo
aXMpOworICAgIGFkZFB0cigKKyAgICAgICAgVHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEpTT2JqZWN0KSkgLQorICAgICAgICAgICAgKHN0YXRp
Y19jYXN0PGludDMyX3Q+KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDIpICogc3RhdGljX2Nhc3Q8
aW50MzJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpLAorICAgICAgICBvYmplY3QsIHNjcmF0
Y2gpOworICAgIAorICAgIHJlYWR5LmxpbmsodGhpcyk7CisgICAgCisgICAgc3RvcmVWYWx1ZSh2
YWx1ZSwKKyAgICAgICAgQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Cit9CisK
IHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVyZShWTSYgdm0sIFJlZ2lzdGVy
SUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQpAQCAtNjk4LDggKzcyMCwxMyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6
cmVzdG9yZUNhbGxlZVNhdmVzCiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENh
bGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGlu
Zm8pCiB7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKKyAg
ICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBpbmZvKTsKK30K
Kwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9i
YWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCit7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwo
KTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewog
ICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
PEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjM0
LDggKzIzNCw5IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKLSAgICAvLyBOb3RlIHRo
YXQgdGhpcyBjbG9iYmVycyBvZmZzZXQuCisgICAgLy8gTm90ZSB0aGF0IHRoZXNlIGNsb2JiZXIg
b2Zmc2V0LgogICAgIHZvaWQgbG9hZFByb3BlcnR5KEdQUlJlZyBvYmplY3QsIEdQUlJlZyBvZmZz
ZXQsIEpTVmFsdWVSZWdzIHJlc3VsdCk7CisgICAgdm9pZCBzdG9yZVByb3BlcnR5KEpTVmFsdWVS
ZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBHUFJSZWcgc2NyYXRjaCk7
CiAKICAgICB2b2lkIG1vdmVWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3Mgc3JjUmVncywgSlNWYWx1ZVJl
Z3MgZGVzdFJlZ3MpCiAgICAgewpAQCAtMTcyMCw2ICsxNzIxLDcgQEAgcHVibGljOgogICAgIH0K
ICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2Fs
bExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFs
T2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3BhY2VPblN0
YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQmFzZWxpbmVKSVRDb2RlLmgiCisKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKKyNpbmNsdWRl
ICJKdW1wVGFibGUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworSklUQWRkSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUQWRkSUMoQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0aFByb2Zp
bGUpOyB9CitKSVRNdWxJQyogTWF0aElDSG9sZGVyOjphZGRKSVRNdWxJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7
IH0KK0pJVFN1YklDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQor
SklUTmVnSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKwordm9p
ZCBNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKQoreworICAg
IG1fYWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2FkZElDcyk7CisgICAgbV9tdWxJQ3MgPSBXVEZN
b3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAgICBtX25lZ0lDcyA9IFdURk1vdmUob3RoZXIubV9uZWdJ
Q3MpOworICAgIG1fc3ViSUNzID0gV1RGTW92ZShvdGhlci5tX3N1YklDcyk7Cit9CisKK0Jhc2Vs
aW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwg
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKKyAgICA6IERpcmVjdEpJVENv
ZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKQor
ICAgICwgTWF0aElDSG9sZGVyKCkKK3sgfQorCitCYXNlbGluZUpJVENvZGU6On5CYXNlbGluZUpJ
VENvZGUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAi
SklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
Ky8vY2xhc3MgSklUQWRkSUM7CisvL2NsYXNzIEpJVE11bElDOworLy9jbGFzcyBKSVRTdWJJQzsK
Ky8vY2xhc3MgSklUTmVnSUM7CitjbGFzcyBCaW5hcnlBcml0aFByb2ZpbGU7CitjbGFzcyBVbmFy
eUFyaXRoUHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0
IFNpbXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKK2NsYXNzIE1hdGhJ
Q0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBv
dGhlcik7CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwor
ICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRT
dWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTmVnSUMqIGFk
ZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CisKKyAgICAvKgorICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3Rk
Ojppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAg
IEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVy
biBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2Vu
ZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgSklUTXVsSUMqIGFk
ZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElD
KHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFt
ZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5l
Z0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5
QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2
YWx1ZT46OnR5cGU+CisgICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUq
IHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisgICAgKi8KKworcHJp
dmF0ZToKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9t
dWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1f
c3ViSUNzOworfTsKKworY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKK3B1YmxpYzoKKyAgICB1c2lu
ZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7
CisgICAgICAgIEdsb2JhbE9iamVjdCwKKyAgICAgICAgQ2FsbExpbmtJbmZvLAorICAgICAgICBT
dHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAgRnVuY3Rpb25EZWNsLAorICAgICAgICBGdW5jdGlv
bkV4cHIsCisgICAgfTsKKworICAgIHN0cnVjdCBWYWx1ZSB7CisgICAgICAgIC8vIE9PUFM6IE1h
a2UgdGhlIHBvaW50ZXIgcGFja2VkLgorICAgICAgICBUeXBlIHR5cGU7CisgICAgICAgIHZvaWQq
IHBheWxvYWQ7CisgICAgfTsKKworICAgIEpJVENvbnN0YW50UG9vbCgpID0gZGVmYXVsdDsKKyAg
ICBKSVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAgICBKSVRD
b25zdGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworCisg
ICAgQ29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIpCisgICAg
eworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXplKCk7CisgICAgICAg
IG1fY29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1ZSBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1
cm4gbV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fY29u
c3RhbnRzOworfTsKKworCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklU
Q29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2Rl
KENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRo
QXJpdHlDaGVjayk7CisgICAgfkJhc2VsaW5lSklUQ29kZSgpIG92ZXJyaWRlOworCisgICAgQmFn
PFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgQmFnPENhbGxMaW5r
SW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsgLy8gT09QUzogbWFrZSBzdXJlIHdlIHZpc2l0IHRo
ZXNlIHNvbWVob3cuIE9yIGFzc2VydCB3ZSBkb24ndCBoYXZlIHRvLCBzaW5jZSB0aGV5J3JlIHZp
cnR1YWwgY2FsbHMuCisgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5r
ZWRTdHViSW5mb3M7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1
bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXM7CisgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisgICAgSklUQ29uc3Rh
bnRQb29sIG1fY29uc3RhbnRQb29sOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgc2l6ZV90IEJhc2VsaW5lSklUUGxh
bjo6Y29kZVNpemUoKSBjb25zdAogCiBDb21waWxhdGlvblJlc3VsdCBCYXNlbGluZUpJVFBsYW46
OmZpbmFsaXplKCkKIHsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5h
bGl6ZU9uTWFpblRocmVhZCgpOworICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0
LmZpbmFsaXplT25NYWluVGhyZWFkKG1fY29kZUJsb2NrKTsKICAgICBzd2l0Y2ggKHJlc3VsdCkg
ewogICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZF
TlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6
OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sbwogICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRv
d1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7
CiB9CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJS
ZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQotewotICAgIHN0
b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwg
T0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7Ci0gICAgc3Rv
cmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSks
IEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFj
a2V0LCBjYWxsZWUpKSk7Ci0gICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkp
KTsKLSAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwotICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIoY29kZUJsb2NrKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRP
RihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKLSAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOwotfQot
CiB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQ
UlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0
Y2gyKQogewogICAgIFNoYWRvd0NoaWNrZW4qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlj
a2VuKCk7CkBAIC03Miw2ICs2MiwyOCBAQCB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93
Q2hpY2tlblBhCiAgICAgc3RvcmVQdHIoc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDFOb25BcmdH
UFIpKTsKIH0KIAorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK3ZvaWQgQ0Nh
bGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBj
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBzdG9yZVB0cihH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOworICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2Fs
bGVlKSkpOworICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7CisgICAg
c3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKKyAgICBzdG9yZVB0cihjb2RlQmxvY2ssIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBjb2RlQmxvY2spKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5i
aXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNr
ZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKK30KKwordm9pZCBDQ2FsbEhlbHBlcnM6Omxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdz
IHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJ
bXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5k
ZXgpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
R1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwg
R1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIGxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdzLCBzY29w
ZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwogdm9pZCBDQ2FsbEhlbHBlcnM6OmVt
aXRKSVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gd2hl
cmUsIFNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPiBlbWl0Q29kZSwgY29uc3QgY2hh
ciogZGVzY3JpcHRpb24pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
ODQwLDcgKzg0MCwxNCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2Ugb3BlcmF0aW9ucyBjbG9iYmVy
IGFsbCB2b2xhdGlsZSByZWdpc3RlcnMuIFRoZXkgYXNzdW1lIHRoYXQgdGhlcmUgaXMgcm9vbSBv
biB0aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sgdG8gbWFyc2hhbGwgY2FsbCBhcmd1bWVudHMuCiAg
ICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tl
dCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NvcGUpOwotICAgIHZvaWQgbG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3Ms
IEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CisKK3ByaXZhdGU6Cisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgdm9pZCBsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGVJbmRleCk7CitwdWJsaWM6CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFp
bFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVn
IHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4KTsKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxv
Y2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisKICAgICAvLyBMZWF2ZXMgYmVoaW5k
IGEgcG9pbnRlciB0byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNr
ZXQuCiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRv
d1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVE
YXRhLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDEyIEBA
IG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxl
ZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CisgICAgc2V0dXBDYWxsZWVT
YXZlUmVnaXN0ZXJzKGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwordm9p
ZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJl
Z2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMpCit7CiAgICAgUmVnaXN0
ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycyB7IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdp
c3RlcnMoKSB9OwotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVM
b2NhdGlvbnMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5zaXplKCk7ICsraSkgewog
ICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5IHsgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5h
dChpKSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZURhdGEuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMSArNDMs
MTMgQEAgcHVibGljOgogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOwogICAgIHVuc2ln
bmVkIG51bUxvY2FscyB7IFVJTlRfTUFYIH07CiAgICAgdW5zaWduZWQgbnVtUGFzc2VkQXJncyB7
IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycyB7IFVJTlRfTUFYIH07IC8v
IE9uIG91ciBtYWNoaW5lIGZyYW1lLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJN
YXA8VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOwogICAgIEdQUlJlZyBudW1iZXJUYWdSZWdpc3Rl
ciB7IEludmFsaWRHUFJSZWcgfTsKIAogICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJz
KENvZGVCbG9jayopOworICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJl
Z2lzdGVyQXRPZmZzZXRMaXN0Kik7CiAjZW5kaWYKICAgICBWYWx1ZVJlY292ZXJ5IGNhbGxlZTsK
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVyLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEzICszOCwxMyBAQCBD
YWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhCiAgICAgOiBtX2ppdChqaXQp
CiAgICAgLCBtX29sZEZyYW1lKGRhdGEubnVtTG9jYWxzICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6
ZUluUmVnaXN0ZXJzLCBudWxscHRyKQogICAgICwgbV9uZXdGcmFtZShkYXRhLmFyZ3Muc2l6ZSgp
ICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCi0gICAgLCBtX2Fs
aWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMKLSAgICAg
ICAgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoaml0LmNvZGVCbG9jaygpLT5udW1Q
YXJhbWV0ZXJzKCkpKQorICAgICwgbV9hbGlnbmVkT2xkRnJhbWVTaXplKENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEu
bnVtUGFyYW1ldGVycykpCiAgICAgLCBtX2FsaWduZWROZXdGcmFtZVNpemUoQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnMKICAgICAgICAgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWdu
RnJhbWUoZGF0YS5hcmdzLnNpemUoKSkpCiAgICAgLCBtX2ZyYW1lRGVsdGEobV9hbGlnbmVkTmV3
RnJhbWVTaXplIC0gbV9hbGlnbmVkT2xkRnJhbWVTaXplKQogICAgICwgbV9sb2NrZWRSZWdpc3Rl
cnMoUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpKQogICAgICwgbV9udW1QYXNzZWRBcmdzKGRh
dGEubnVtUGFzc2VkQXJncykKKyAgICAsIG1fbnVtUGFyYW1ldGVycyhkYXRhLm51bVBhcmFtZXRl
cnMpCiB7CiAgICAgLy8gV2UgYXJlIGFsbG93ZWQgYWxsIHRoZSB1c3VhbCByZWdpc3RlcnMuLi4K
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOyAp
CkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclRh
aWxDYQogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCks
IG1fbmV3RnJhbWVCYXNlKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhcmd1bWVudENvdW50
T0sgPQogICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFs
LCBtX25ld0ZyYW1lQmFzZSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIobV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpOworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX251bVBhcmFtZXRlcnMpKTsKICAgICBtX2ppdC5h
ZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJz
KCkgLSAxICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpLCBtX25ld0ZyYW1lQmFz
ZSk7CiAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtc3RhY2tB
bGlnbm1lbnRSZWdpc3RlcnMoKSksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5tdWwzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBtX25ld0ZyYW1l
QmFzZSwgbV9uZXdGcmFtZUJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQs
NiArMTA0LDcgQEAgcHVibGljOgogICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBkYXRhOwog
ICAgICAgICBkYXRhLm51bUxvY2FscyA9IG51bUxvY2FscygpOwogICAgICAgICBkYXRhLm51bVBh
c3NlZEFyZ3MgPSBtX251bVBhc3NlZEFyZ3M7CisgICAgICAgIGRhdGEubnVtUGFyYW1ldGVycyA9
IG1fbnVtUGFyYW1ldGVyczsKICAgICAgICAgZGF0YS5jYWxsZWUgPSBnZXROZXcoVmlydHVhbFJl
Z2lzdGVyIHsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIH0pLT5yZWNvdmVyeSgpOwogICAgICAgICBk
YXRhLmFyZ3MucmVzaXplKGFyZ0NvdW50KCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFyZ0NvdW50KCk7ICsraSkKQEAgLTc5OCw2ICs3OTksNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgcGVyZm9ybVNhZmVXcml0ZXMoKTsKICAgICAKICAgICB1bnNpZ25lZCBtX251bVBhc3NlZEFy
Z3MgeyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG1fbnVtUGFyYW1ldGVycyB7IFVJTlRfTUFY
IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhSZXR1cm5BCiB9CiAKIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICA6
IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQorICAgIDogSlNJbnRlcmZhY2VKSVQoJnZt
LCBudWxscHRyKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKICAgICAsIG1f
bGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkK
ICAgICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtKQpAQCAtNzcsNiArNzcsOSBAQCBK
SVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVt
aXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKKyAgICBtX2dsb2JhbE9iamVjdENvbnN0YW50ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0KTsK
KyAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrID0gY29kZUJsb2NrOworICAgIG1fdW5saW5rZWRDb2Rl
QmxvY2sgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiB9CiAKIEpJVDo6fkpJVCgp
CkBAIC05MCw4ICs5Myw4IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygp
CiAgICAgICAgIHJldHVybjsKIAogICAgIEp1bXBMaXN0IHNraXBPcHRpbWl6ZTsKLSAgICAKLSAg
ICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9w
dGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWJzb2x1dGVBZGRy
ZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgIGxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAg
c2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRp
b25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFkZHJlc3MocmVnVDAs
IENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIEFTU0VSVCgh
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKIAogICAgIGNvcHlMTEludEJhc2VsaW5lQ2FsbGVl
U2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS50b3BFbnRyeUZyYW1lKTsKQEAgLTExMywxNSArMTE2LDIxIEBAIHZvaWQgSklUOjplbWl0Tm90
aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCoKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElz
SW52YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBv
aW50ZXJUb1NldCkKK3ZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBw
b2ludGVyVG9TZXQpCiB7CisgICAgLy8gT09QUzogVGFrZSBhIGJvb2xlYW4gb3Igc29tZXRoaW5n
IHNheWluZyBpZiB3ZSBjYW4gYmUgbnVsbC4KKyAgICBhdXRvIG9rID0gYnJhbmNoVGVzdFB0ciha
ZXJvLCBwb2ludGVyVG9TZXQpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFk
ZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBvay5saW5rKHRoaXMpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCit2b2lk
IEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIEdQUlJl
ZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+dmFyUmVhZE9ubHlXYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xv
YmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
IHsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92
YXJSZWFkT25seVdhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKQEAgLTEyOSw3ICsxMzgsNyBAQCB2
b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICAgICBpZiAoIUFTU0VSVF9FTkFC
TEVEKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBKdW1wIG9rID0gYnJhbmNoUHRyKEVxdWFsLCBy
ZWdUMCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGJyZWFrcG9pbnQoKTsKICAgICBvay5s
aW5rKHRoaXMpOwpAQCAtMTgxLDIxICsxOTAsNDEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNh
bGwoY29uc3QgSW5zdHJ1YwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3ZvaWQgSklU
OjplbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0
aW9uQ29kZSk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEpTRnVuY3Rp
b246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJlc3VsdCk7CisgICAgYXV0byBo
YXNFeGVjdXRhYmxlID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgbG9hZFB0cihBZGRy
ZXNzKHJlc3VsdCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1
bmN0aW9uOjpyYXJlRGF0YVRhZyksIHJlc3VsdCk7CisgICAgaGFzRXhlY3V0YWJsZS5saW5rKHRo
aXMpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkpCisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZD
b2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSksIHJlc3VsdCk7CisgICAgZWxzZQorICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2Nr
Rm9yQ2FsbCgpKSwgcmVzdWx0KTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2U6Om9mZnNldE9mQ29kZUJsb2NrKCkpLCByZXN1bHQpOworICAg
IGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZXN1bHQsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKICAgICBpZiAo
SklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9j
b2RlQmxvY2ssICJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fcHJvZmls
ZWRDb2RlQmxvY2ssICJcbiIpOwogICAgIAogICAgIGppdEFzc2VydFRhZ3NJblBsYWNlKCk7CiAg
ICAgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsKICAgICAKLSAgICBhdXRvJiBpbnN0cnVj
dGlvbnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1
Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgYXV0
byYgaW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Cisg
ICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwogCi0gICAg
Vk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgQnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVj
b2RlSW5kZXgoMCk7CisKKyAgICAvLyBPT1BTOiBNYXliZSBvbmx5IGRvIHRoaXMgaWYgd2UgZGlz
YWJsZSBzaGFyaW5nIHNvbWVob3c/CisgICAgLyoKKyAgICBWTSYgdm0gPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT52bSgpOwogICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1f
Y29kZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJsb2NrPih2bSkgfHwgbV9jb2RlQmxvY2st
PmluaGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtKSkpIHsKICAgICAgICAgLy8gV2Ug
Y2FuIG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBleGVjdXRlIFByb2dyYW1D
b2RlQmxvY2sncyBleGFjdGx5IG9uY2UuCiAgICAgICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIHdv
dWxkIGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRoZSBMTEludCBkZXRlcm1pbmVzIGl0IHdh
bnRzIHRvCkBAIC0yMzYsNiArMjY1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAgICovCiAKICAgICBtX2J5
dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CiAgICAgZm9yIChtX2J5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlv
bkNvdW50OyApIHsKQEAgLTI3OCw4ICszMDgsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiAKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2Vs
aW5lSklURXhlY3V0aW9uKCkpKSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0
JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxD
YWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJ
VCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIg
IiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0KQEAgLTUyNyw3ICs1NTcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVTbG93Q2FzZXMoKQogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNv
ZGVJbmRleDsKIAotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7
CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX3VubGlu
a2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwog
ICAgICAgICAKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJCYXNlbGluZSBKSVQgZW1pdHRpbmcgc2xvdyBjb2RlIGZvciAiLCBtX2J5dGVj
b2RlSW5kZXgsICIgYXQgb2Zmc2V0ICIsIChsb25nKWRlYnVnT2Zmc2V0KCkpOwpAQCAtNTQ1LDgg
KzU3NSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKICAg
ICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAg
ICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAg
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29k
ZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zm
c2V0LCAiXSBTTE9XICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRl
cihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7CiAgICAgICAg
IH0KQEAgLTY3NCw1NSArNzA0LDU2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNl
cygpCiAjZW5kaWYKIH0KIAordm9pZCBKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29u
c3RhbnRQb29sUmVnaXN0ZXJzKCkKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHNfbWV0YWRhdGFHUFIpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJlZ1Qw
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0
T2ZKSVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKQoreworICAgIEJhc2U6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmco
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6Q2FwYWJpbGl0eUxldmVs
IGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOworICAgIC8vIE9PUFM6IE1h
eWJlIHRoaXMgc2hvdWxkIGJlIGRvbmUgb24gdW5saW5rZWQgY29kZSBibG9jaz8KKyAgICBERkc6
OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmNhcGFiaWxpdHlM
ZXZlbCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIERGRzo6Q2Fubm90Q29tcGls
ZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2NhbkJlT3B0
aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9
IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZToKICAgICBj
YXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9
IHRydWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwogICAgICAg
ICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBkZWZh
dWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewot
ICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICBjYXNlIE1vZHVsZUNvZGU6Ci0gICAgY2FzZSBFdmFs
Q29kZToKLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFs
c2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAgICAgICAvLyBX
ZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQg
YW4gdW5pbmxpbmVhYmxlIGNhbGwuCi0gICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2Jz
ZXJ2YXRpb24uCi0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAm
PSBjYW5JbmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbihtX2NvZGVCbG9j
ayk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVy
T2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgewotICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAobV9jb2RlQmxvY2st
Pm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVC
bG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVj
dG9yPFNpbXBsZUp1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hK
dW1wVGFibGVzKCkpOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
dHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJl
SklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFN0
cmluZ0p1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGVzKCkpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAg
ICBtX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fdW5s
aW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpOworICAg
ICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZp
eGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZV
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CiAgICAgfQogCi0gICAgaWYgKFVOTElL
RUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpKSkKLSAg
ICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9jb2Rl
QmxvY2spOworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAo
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxp
bmVGb3JQcm9maWxlcigpKSkpIHsKKyAgICAgICAgLy8gT09QUzogYnVpbGQgYSBkaXNhc3NlbWJs
ZXIgb2ZmIHVubGlua2VkIGNvZGUgYmxvY2sKKyAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtl
VW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9wcm9maWxlZENvZGVCbG9jayk7CisgICAgfQogICAg
IGlmIChVTkxJS0VMWShtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpKSB7CisgICAgICAgIC8v
IE9PUFM6IGJ1aWxkIHByb2ZpbGVyIGRpc2Fzc2VtYmxlciBvZmYgdW5saW5rZWQgY29kZSBibG9j
awogICAgICAgICBtX2NvbXBpbGF0aW9uID0gYWRvcHRSZWYoCiAgICAgICAgICAgICBuZXcgUHJv
ZmlsZXI6OkNvbXBpbGF0aW9uKAotICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fY29kZUJsb2NrKSwKKyAgICAgICAgICAgICAg
ICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX3Byb2Zp
bGVkQ29kZUJsb2NrKSwKICAgICAgICAgICAgICAgICBQcm9maWxlcjo6QmFzZWxpbmUpKTsKLSAg
ICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0
ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOworICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQ
cm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX3Byb2ZpbGVk
Q29kZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIu
YXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpKTsKQEAgLTc0
MiwxMSArNzczLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4K
ICAgICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgIGVtaXRQ
dXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUpCisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSgpOwogCiAgICAg
TGFiZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAotICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGlu
dCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXplID0gLWZy
YW1lVG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVUb3BPZmZzZXQpLCBj
YWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwogICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CkBA
IC03NTcsMTYgKzc4OSwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxp
emluCiAgICAgbW92ZShyZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3Rh
Y2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzKCk7CisgICAg
ZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVn
aXN0ZXJzKCk7CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdp
c3RlcnMoKTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUpIHsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUpIHsKICAgICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAo
c2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3Vt
ZW50ID0gMDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3Vt
ZW50KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX3VubGlua2Vk
Q29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpID4gMSkpIHsKKyAgICAgICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDIpOworICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVz
KCkgKyBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+OjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlZ1Qy
KTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwg
bV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CiAgICAg
ICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdhbnQgdG8g
cHV0IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCiAgICAgICAgICAgICAgICAgLy8ga2Vl
cCB0aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gcmVjb3Jk
IHRoZSBkdW1teSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29u
c3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCisgICAgICAgICAgICAgICAgaWYgKG1fdW5saW5rZWRD
b2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxsRnJhbWU6OmFy
Z3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC03NzcsMTIgKzgxMywxMiBA
QCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgICAgICAg
ICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigp
KTsKICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zm
c2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdz
LnRhZ0dQUigpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSwgcmVzdWx0
UmVncyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdzLCBBZGRyZXNzKHJl
Z1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpICsgVmFsdWVQcm9maWxlOjpvZmZz
ZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2RlQmxvY2stPmppdFR5
cGUoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXplTWFya2VyKSkKICAg
ICAgICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92ZSgqc2l6ZU1hcmtl
ciksICp0aGlzKTsKQEAgLTc5OSwyNCArODM1LDI3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW4KICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDAp
OwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNhbGxPcGVyYXRpb25XaXRo
Q2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dF
cnJvciwgbV9jb2RlQmxvY2spOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb25XaXRoQ2Fs
bEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJv
ciwgcmVnVDApOwogCiAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGlzIDEsIHdl
IG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCi0gICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAg
PSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7Ci0gICAgaWYgKG1fY29kZUJsb2Nr
LT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKKyAg
ICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSAhPSAxOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKICAgICAgICAgbV9hcml0eUNo
ZWNrID0gbGFiZWwoKTsKLSAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgJm1fY29kZUJs
b2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7CisKICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFt
ZUluUHJvbG9ndWUocmVnVDApOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCBBZGRy
ZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkpKTsK
IAogICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyksIHJlZ1QxKTsKLSAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKS5saW5rVG8o
YmVnaW5MYWJlbCwgdGhpcyk7CisgICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEs
IFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKS5saW5r
VG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAKICAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKTsKIAogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwp
CiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90Piht
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX2Nv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6
IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwor
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZy
YW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9y
KCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hl
Y2ssIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJyYW5jaFRlc3Qz
MihaZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwpAQCAtODM5
LDcgKzg3OCw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAg
ICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKICAgICBtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFw
QnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKLSAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6
OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2Nr
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CisgICAgbV9saW5r
QnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlz
LCBtX3VubGlua2VkQ29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwg
ZWZmb3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04NTgsOCArODk3LDggQEAgdm9pZCBKSVQ6
OmxpbmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAgICAgIGNhc2UgU3dp
dGNoUmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpDaGFyYWN0
ZXI6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtl
ZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAg
ICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1
bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB1bmxpbmtl
ZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgICAgIHVu
c2lnbmVkIG9mZnNldCA9IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzW2pdOwpAQCAtODcx
LDggKzkxMCw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
U3dpdGNoUmVjb3JkOjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8g
Y3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFi
ZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAg
IGZvciAoYXV0byYgbG9jYXRpb24gOiB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUudmFsdWVz
KCkpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsb2NhdGlvbi5tX2JyYW5j
aE9mZnNldDsKQEAgLTkwNiwzMiArOTQ1LDM1IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIHJlY29yZC5jYWxsZWUpOwogICAgIH0K
IAotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAg
ICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIpOwotICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5h
bGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1f
aW5CeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luc3Rh
bmNlT2ZzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wcml2YXRl
QnJhbmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOworICAgIGF1dG8gZmluYWxpemVJQ3MgPSBbJl0g
KGF1dG8mIGdlbmVyYXRvcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5lcmF0b3Jz
KSB7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsKKyAgICAg
ICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1fZG9uZSk7CisgICAgICAgICAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zbG93UGF0aEJlZ2luKTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzKTsKKyAgICBm
aW5hbGl6ZUlDcyhtX2dldEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkc1dpdGhU
aGlzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1
dEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeUlkcyk7CisgICAgZmluYWxpemVJQ3Mo
bV9kZWxCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeUlkcyk7CisgICAgZmluYWxpemVJ
Q3MobV9pbkJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9mcyk7CisgICAgZmlu
YWxpemVJQ3MobV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7CiAKICAgICBmb3IgKGF1dG8mIGNvbXBp
bGF0aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewotICAgICAgICBDYWxsTGlua0lu
Zm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAgICAgICAgaW5mby5z
ZXRDb2RlTG9jYXRpb25zKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCi0gICAgICAgICAg
ICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5m
by5kb25lTG9jYXRpb24pKTsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIGluZm8gPSAq
Y29tcGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBpbmZvLmRvbmVM
b2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGls
YXRpb25JbmZvLmRvbmVMb2NhdGlvbik7CiAgICAgfQogCi0gICAgewotICAgICAgICBKSVRDb2Rl
TWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVj
b2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlz
U2V0KCkpCi0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJU
YWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY29k
ZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCkpOworICAg
IEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOworICAgIGZvciAodW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKyti
eXRlY29kZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlz
U2V0KCkpCisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRl
eChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4o
bV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDI2ICs5ODIsMzcgQEAgdm9pZCBK
SVQ6OmxpbmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShtX2NvbXBpbGF0aW9uKSkgewor
ICAgICAgICAvLyBPT1BTOiBtYWtlIGJ5dGVjb2RlIHByb2ZpbGVyIGtub3cgYWJvdXQgdW5saW5r
ZWQgQ0I/CiAgICAgICAgIGlmIChPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmls
ZXIoKSkKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fY29t
cGlsYXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsKLSAgICAgICAgbV92bS0+bV9wZXJCeXRlY29k
ZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2NvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOwor
ICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcHJv
ZmlsZWRDb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKICAgICB9CiAKICAgICBpZiAobV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCiAgICAgICAgIG1fcGNUb0Nv
ZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpOwogICAgIAorICAgIC8vIE9PUFM6
IE1ha2UgYSB2ZXJzaW9uIG9mIENvZGVCbG9ja1dpdGhKSVRUeXBlIHRoYXQga25vd3MgYWJvdXQg
VW5saW5rZWRDb2RlQmxvY2suCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBG
SU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAgICAg
ICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklU
VHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAgICAg
ICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRU
eXBlKG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsK
ICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5
Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fYXJpdHlDaGVj
ayk7Ci0gICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwg
d2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSk7CisgICAgbV9qaXRDb2RlID0g
YWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaykpOwor
CisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBXVEZNb3ZlKG1fdW5saW5rZWRDYWxs
cyk7CisgICAgbV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9zID0gV1RGTW92ZShtX2V2YWxD
YWxsTGlua0luZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3MgPSBXVEZN
b3ZlKG1fdW5saW5rZWRTdHViSW5mb3MpOworICAgIG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFi
bGVzID0gV1RGTW92ZShtX3N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0Q29kZS0+bV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOwor
ICAgIG1faml0Q29kZS0+bV9qaXRDb2RlTWFwID0gaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUo
KTsKKyAgICBtX2ppdENvZGUtPmFkb3B0TWF0aElDcyhtX21hdGhJQ3MpOworICAgIG1faml0Q29k
ZS0+bV9jb25zdGFudFBvb2wgPSBXVEZNb3ZlKG1fY29uc3RhbnRQb29sKTsKIAogICAgIGlmIChK
SVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29k
ZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVN
ZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgp
LT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQg
Y29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2VkQ29kZUJsb2NrLCByZXN1bHQu
ZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRh
YmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQogCi1Db21waWxhdGlvblJlc3Vs
dCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6Zmlu
YWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTk2OCwyNSArMTAyMSwyMSBAQCBD
b21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyCiAKICAgICBtX2xpbmtCdWZm
ZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCi0gICAgewotICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBt
X2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6Okxh
dGVTaHJpbmspOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxv
Y2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7Ci0gICAgICAgIEhhbmRsZXJJ
bmZvJiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAg
IC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgotICAgICAgICBoYW5kbGVyLm5h
dGl2ZUNvZGUgPSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQoQnl0ZWNvZGVJbmRleCho
YW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7Ci0gICAg
fQorICAgIC8vIE9PUFM6IERvbid0IHRoaW5rIHRoaXMgc2hyaW5rIGlzIHJlYWxseSBkb2luZyBh
bnl0aGluZyBhbnltb3JlLiBWZXJpZnkuCisgICAgLy97CisgICAgLy8gICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAvLyAgICBtX2NvZGVCbG9j
ay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmsp
OworICAgIC8vfQogCisgICAgLy8gT09QUzogbV9wY1RvQ29kZU9yaWdpbk1hcCBzaG91bGQgbGl2
ZSBvbiBCYXNlbGluZUpJVENvZGUgZm9yIGJhc2VsaW5lIGNvZGVibG9ja3MuCiAgICAgaWYgKG1f
cGNUb0NvZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdp
bk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKKyAgICAgICAgbV9wcm9maWxlZENv
ZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFw
KSk7CiAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxp
bmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2ppdENvZGUtPnNpemUo
KSkgLwotICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnNTaXplKCkpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3VubGlua2VkQ29kZUJs
b2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKIAotICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2Rl
KG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVu
bGlua2VkQmFzZWxpbmVDb2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIHJl
dHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CkBAIC05OTgsMTEgKzEwNDcsMTEgQEAgc2l6
ZV90IEpJVDo6Y29kZVNpemUoKSBjb25zdAogICAgIHJldHVybiBtX2xpbmtCdWZmZXItPnNpemUo
KTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSVRDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxl
KENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAg
ICAgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgY29tcGlsZUFu
ZExpbmtXaXRob3V0RmluYWxpemluZyhlZmZvcnQpOwotICAgIHJldHVybiBmaW5hbGl6ZU9uTWFp
blRocmVhZCgpOworICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZChjb2RlQmxvY2spOwog
fQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCkBAIC0xMDQy
LDE4ICsxMDkxLDI4IEBAIHZvaWQgSklUOjpkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUMK
ICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKCptX3Zt
LCAiUHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24uIl9zKTsKIH0KIAotdW5zaWduZWQgSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBK
SVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQog
ewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVM
b2NhbHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0
ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fscygp
KSkpOwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdpc3RlckNvdW50Rm9yRnJhbWVQb2ludGVy
T2Zmc2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAotaW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291
bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGZyYW1lUmVnaXN0ZXJD
b3VudEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCitpbnQgSklUOjpz
dGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAg
ICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNv
ZGVCbG9jaykgLSAxKS5vZmZzZXQoKTsKIH0KIAoraW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBzdGFja1BvaW50ZXJPZmZz
ZXRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKwogSGFzaE1hcDxDU3Ry
aW5nLCBTZWNvbmRzPiBKSVQ6OmNvbXBpbGVUaW1lU3RhdHMoKQogewogICAgIEhhc2hNYXA8Q1N0
cmluZywgU2Vjb25kcz4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAKICNkZWZpbmUgQVNTRVJUX0pJVF9PRkZTRVQoYWN0
dWFsLCBleHBlY3RlZCkgQVNTRVJUX1dJVEhfTUVTU0FHRShhY3R1YWwgPT0gZXhwZWN0ZWQsICJK
SVQgT2Zmc2V0IFwiJXNcIiBzaG91bGQgYmUgJWQsIG5vdCAlZC5cbiIsICNleHBlY3RlZCwgc3Rh
dGljX2Nhc3Q8aW50PihleHBlY3RlZCksIHN0YXRpY19jYXN0PGludD4oYWN0dWFsKSk7CiAKKyNp
bmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJKSVREaXNhc3NlbWJsZXIuaCIKQEAg
LTQ0LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJKSVRSaWdo
dFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKKyNpbmNsdWRl
ICJMTEludERhdGEuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUg
IlVudXNlZFBvaW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CkBAIC0xNDksMTQg
KzE1MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgc3RydWN0IENhbGxDb21w
aWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhTdGFy
dDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVMb2NhdGlvbjsKLSAgICAgICAg
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZv
KiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBjYWxsTGlua0luZm9Db25zdGFudDsKICAgICB9OwogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxC
eVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKLSAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5U
IEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgIGNsYXNzIEpJVF9DTEFTU19BTElH
Tk1FTlQgSklUIDogcHVibGljIEpTSW50ZXJmYWNlSklUIHsKICAgICAgICAgZnJpZW5kIGNsYXNz
IEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogICAg
ICAgICBmcmllbmQgY2xhc3MgSklUVGh1bmtzOwpAQCAtMTcxLDYgKzE3Myw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3
ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCiAgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7CiAKKyAgICAg
ICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgcHVibGljOgogICAgICAgICBK
SVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0x
NzgsMjggKzE4MiwzMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVk0mIHZtKCkgeyByZXR1
cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CiAKICAgICAgICAgdm9pZCBjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKLSAgICAgICAgQ29tcGls
YXRpb25SZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICAgICAgQ29tcGlsYXRpb25S
ZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKik7CiAgICAgICAgIHNpemVfdCBj
b2RlU2l6ZSgpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25C
ZWZvcmVDb21waWxlKCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1
bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4
KDApKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5
dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJu
IEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoY29kZUJs
b2NrLCBlZmZvcnQpOwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1l
UmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogICAgICAgICBzdGF0aWMgdW5z
aWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOworICAgICAgICBzdGF0aWMg
aW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogICAgICAgICBz
dGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsKIAogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBjb21waWxl
VGltZVN0YXRzKCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTZWNvbmRzIHRv
dGFsQ29tcGlsZVRpbWUoKTsKIAorICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX21l
dGFkYXRhR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUjsKKyAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19jb25zdGFudHNHUFIgPSBMTEludDo6UmVnaXN0ZXJz
OjpwYkdQUjsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpOwogICAgICAgICB2b2lkIGxpbmsoKTsKLSAg
ICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZv
cnQpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sq
LCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJv
bSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBw
ZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQpAQCAt
MjIzLDYgKzIzMiwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlmCiAKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWRQdHJG
cm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkMzJG
cm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkOEZy
b21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUsIGNvbnN0IEJ5dGVjb2RlJiwg
c2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
ICAgICAgICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0ZWNvZGUmLCBz
aXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2Rl
Jiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBs
b2FkQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BSUmVnKTsKKyAgICBwcml2YXRl
OgorICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKKyAgICAgICAgdm9pZCBs
b2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworCisgICAgICAg
IHZvaWQgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQgPSBy
ZWdUMCk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBUb0hhbmRsZXIp
CiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9I
YW5kbGVyKTsKQEAgLTI1OCwxNiArMjkzLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBz
dGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFy
YXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAg
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQg
IT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGls
ZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2Fs
bExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2Nh
bGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAg
ICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4g
Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2
b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgotICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyos
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENh
bGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAg
ICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yODcsMTQgKzMyMiwxNSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3Rl
ciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAg
ICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihK
U0NlbGwqIG93bmVyKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25l
cik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUg
aXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBz
Y3JhdGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRh
JiwgR1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgLy92
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAgICAg
ICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJl
Z3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRl
Y29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBK
U1ZhbHVlUmVncyk7CkBAIC0zMDUsOCArMzQxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1f
cHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPgogICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSk7CiAKLSAgICAgICAgdm9p
ZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJh
eVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwotICAgICAgICB2b2lkIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJy
YXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNj
cmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAg
IHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgcHRy
ZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9w
KTsKQEAgLTU5Myw3ICs2MzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
aGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02MjcsMTQgKzY2NCwxNCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wg
aXNVbnNpZ25lZCk7CiAKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JC
cmFuZCwgQWNjZXNzVHlwZSk7Ci0gICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1
YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUpOworICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRl
U2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVu
Y0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHZvaWQg
ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUpOworICAgICAgICB2b2lkIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcpOworICAg
ICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRj
aEdQUik7CiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywg
dW5zaWduZWQgZGVwdGgpOwogICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKQEAgLTY0Niw3ICs2ODMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRp
ZgogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBv
aW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9T
ZXQpOworICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50
ZXJUb1NldCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9w
ZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogICAgICAgICB2
b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZv
aWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CkBAIC02NTUsNiAr
NjkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgICAg
IGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSlNWYWx1ZSBnZXRD
b25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0
YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjk2LDI2ICs3MzQsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCBy
ZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxl
VmFyKTsKICAgICAgICAgfQogCi0jZGVmaW5lIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJB
VE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRv
cihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9HRVRfRlJPTV9T
Q09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IK
LQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRl
T3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsK
LQotICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVT
Y29wZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8g
TW9kdWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gZW1pdCBpbmxpbmUgdGhh
biB1c2UgYSB0aHVuay4KLSAgICAgICAgICAgIC8vIFJlc29sdmVkQ2xvc3VyZVZhciBiZWNhdXNl
IHdlIGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9wX3Jlc29sdmVfc2NvcGUuCi0gICAgICAg
ICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAgICAgfQotCi0jZGVmaW5lIERFQ0xBUkVfUkVTT0xW
RV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVU
eXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xB
UkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9SRVNPTFZFX1NDT1BF
X0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0
aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJl
c29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFt
ZSk7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7
CkBAIC03NjAsMTAgKzc4MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25z
dCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsK
ICAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dChBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRh
ZGF0YSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBC
eXRlY29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAg
ICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7
CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBl
bmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9w
ZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIxLDIw
ICs4NDEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkp
OwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVu
YW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdz
PgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+
OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7
CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAg
ICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRo
UHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5
cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJs
ZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJl
c3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJl
c3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5
cGU+KHRhcmdldCwgYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRkcmVz
cyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5v
ZmZzZXQpLCByZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOSwyNSArOTM5LDIwIEBAIG5h
bWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVP
cHRpbWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2Fu
QmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVk
OyB9CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxk
RW1pdFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7
IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxl
ciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGlj
aCBjYXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFBy
b2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGVtaXRN
YXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAgICAgICAg
dm9pZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVw
b3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGlt
ZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUg
ZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJl
IGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQg
dG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBz
YW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3Bp
ZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJp
bmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJp
bmFyeU9wKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtOTY0
LDkgKzk3OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7
CiAKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5m
b3M7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9jb3Bp
ZWRBcml0aFByb2ZpbGVzOwotCiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwog
ICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjazsK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMDAwLDExICsxMDEyLDI0IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0aW9uKiwgVW5pcXVl
UmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRp
b25TdGF0ZTsKIAogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJvb2wg
bV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9m
aWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4
OwogCi0gICAgICAgIFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgICAgIENv
ZGVCbG9jayogbV9wcm9maWxlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVW5saW5r
ZWRDb2RlQmxvY2sqIG1fdW5saW5rZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisKKyAgICAgICAg
TWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4g
bV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAg
ICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVjdENvbnN0YW50IHsg
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAgICAgIEJhZzxVbmxp
bmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgICAgICBCYWc8Q2FsbExpbmtJ
bmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgICAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxl
SnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIEZpeGVkVmVjdG9yPFN0cmlu
Z0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAgICAgIHN0cnVjdCBO
b3RBQ29kZUJsb2NrIHsgfSBtX2NvZGVCbG9jazsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hh
cihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFy
Z3VtZW50R1BSMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVu
dEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MzIwLDcgKzMyMSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkK
ICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJl
Z1QwLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZl
cnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogfQogCkBAIC01NzMsNyArNTc3LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KGNvbnN0IAogCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVt
aXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIyLDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3Vi
bGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+dW5hcnlBcml0aFByb2Zp
bGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tX3Byb2ZpbGVJbmRleCk7Cisg
ICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9tYXRoSUNzLmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmls
ZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG5l
Z2F0ZUlDKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ug
b3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAog
ICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CkBA
IC04OTksOCArOTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVj
dAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRo
UHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMo
YXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZt
X3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEFkZD4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9t
YXRoSUNzLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0
aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxP
cEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQpAQCAtOTQ1LDEwICs5NTAsMTEgQEAgdm9pZCBKSVQ6
OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5l
Q29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CiAgICAgICAgIFVuYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNj
cmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAg
YWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0x
MDE1LDEwICsxMDIxLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRo
SUMKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAgICAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2Zp
bGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2Zp
bGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlv
biwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9m
aWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
bm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNj
cmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRT
bG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwNTUs
MTMgKzEwNjIsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAog
I2VuZGlmCiAKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5h
cml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJp
dGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElD
R2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChy
ZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChy
ZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdz
LCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRl
cnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFC
TEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTEx
MjAsMTMgKzExMjgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJ
QwogI2VuZGlmCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJ
Qy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYg
KGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVu
Y3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAg
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3Ms
IHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdp
c2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3Ms
IHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2Vf
Y2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3Ms
IHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAj
aWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7
CkBAIC0xMTY2LDcgKzExNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1
Y3Rpb24qCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7
CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOworICAgICAgICBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9j
ay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubV9w
cm9maWxlSW5kZXgpOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUu
bV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5k
KGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKQEAgLTEyMTEsOCArMTIyMCw4IEBA
IHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVt
aXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklU
TXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7Cisg
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9j
ay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubV9w
cm9maWxlSW5kZXgpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fbWF0aElDcy5hZGRKSVRNdWxJ
Qyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudElu
c3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVl
TXVsKTsKIH0KQEAgLTEyMjcsOCArMTIzNiw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwo
Y29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2st
PmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVFN1YklD
KiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1p
dE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxs
RXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwogICAg
IHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNh
bGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCByZWdUMSwgcmVnVDIpOwpAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQgSklUOjpjb21w
aWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKIAogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEs
IHJlZ1QwKTsKICAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpA
QCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW8KICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKIAotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRD
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAg
IGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM0MSw3ICszNDEsNiBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgfQogCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKQEAgLTM1NCw3ICszNTMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNs
b3dDYXNlKGNvbnN0IEluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJKSVRJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmgiCiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRlICJTbG93UGF0aENh
bGwuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgpAQCAtNDQsNyArNDUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxs
UmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52
aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOwogfQogCkBAIC01MywxOCArNTQsMTggQEAgc3RkOjpl
bmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpv
cGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9wOjpvcGNvZGVJRCAhPSBv
cF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBi
eXRlY29kZSwgQ2FsbExpbmtJbmZvKikKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
IGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHVuc2lnbmVkIGNo
ZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGludCBhcmdDb3VudElu
Y2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hl
Y2twb2ludCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oc3Rh
Y2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpKTsKIAorCiAg
ICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
ewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rl
ck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApKSwgcmVn
VDApOwogICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwogICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDApOwotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBhcnJheVByb2ZpbGVGb3IobWV0YWRhdGEsIGNo
ZWNrcG9pbnQpLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3Jl
MzJUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZD
YWxsTGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
ICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CiAgICAgICAg
IGRvbmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTc4LDcgKzc5LDcgQEAgc3RkOjplbmFibGVf
aWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29k
ZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQp
CiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
OwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsK
QEAgLTkxLDcgKzkyLDggQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZAogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFy
Z3VtZW50czsKICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXpl
RnJhbWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgLWZpcnN0RnJlZVJl
Z2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7
CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCByZWdUMCwgcmVnVDEsIC1maXJzdEZy
ZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1m
aXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0aGlz
LCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTAxLDE0ICsxMDMsMTYgQEAgSklUOjpjb21waWxl
U2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9w
ZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UKICAgICAgICAgc2V0
dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0
aW9uKHNldHVwT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBy
ZWdUMywgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNv
dW50LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQ
YXlsb2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7Ci0gICAgSnVtcCBub3RCaWdnZXN0ID0g
YnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMiwgaW5mby0+
YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7CisgICAgbG9hZENvbnN0
YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVn
VDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
KSwgcmVnVDMpOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMywg
cmVnVDIpOworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6
b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CiAgICAgbm90QmlnZ2Vz
dC5saW5rKHRoaXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgpAQCAtMTI3LDE2
ICsxMzEsMTYgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpCiB0ZW1wbGF0
ZTw+CiBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVjb2Rl
KQogewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7Ci0g
ICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6
Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19j
YXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkp
LCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVj
b2RlKTsKIApAQCAtMTQ4LDcgKzE1Miw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyog
aW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFk
ZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxs
TGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRl
Y29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE2MCw0NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNl
dCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1
YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhv
dXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5
dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRh
aWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCi17Citib29sIEpJVDo6
Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25l
ZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkgewogICAgIHJldHVybiBmYWxzZTsKIH0KIAog
dGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBi
eXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkK
K2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVu
bGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxs
RnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRB
cmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVy
ID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxz
ID0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRh
ID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+
bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFy
YW1ldGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICBzaHVm
ZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsK
KyAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxl
RGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5hcmdz
LnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
eXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAg
ICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6
ZGlzcGxhY2VkSW5KU1N0YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAgICAg
ICBEYXRhRm9ybWF0SlMpOwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAgICAg
ICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVmZmxl
RGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8tPnNl
dEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxsZWUg
PSBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxl
RGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1wTGlzdCBzbG93UGF0
aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxl
cigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRDb25z
dGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRo
cyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1Qw
LCByZWdUMiwgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxl
RGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xv
d1BhdGhzKTsKKworICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8tPmZy
YW1lU2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9uZUxv
Y2F0aW9uID0gbGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIxOCwxNCArMjI2
LDI1IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAg
LSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxs
ZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0gICAg
Q2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2Fs
bF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2Rl
LCBpbmZvKTsKKworICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOworICAg
IGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgaW5mbyA9IG1fdW5saW5r
ZWRDYWxscy5hZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9y
KG9wY29kZUlEKTsKKworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOworCisgICAgICAgIEFT
U0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsK
KyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZv
KCkpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnVu
bGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFudDsK
KyAgICB9CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7CiAK
ICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyks
IHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICBhdXRvIGJ5dGVjb2RlSW5kZXgg
PSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7Ci0gICAgdWludDMyX3Qg
bG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7CisgICAg
dWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLmJp
dHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBZGRyZXNzKGNh
bGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQpKTsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhvbGRz
IGNhbGxlZS4KQEAgLTIzNCwxNiArMjUzLDEyIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNv
bnN0IEluc3RydWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0g
Y2FsbExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNh
bGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5h
cHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAgICBpZiAoY29tcGls
ZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCisgICAgaWYgKGNv
bXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgsIGluZm9Db25z
dGFudCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGxvYWRDb25zdGFudChpbmZvQ29uc3RhbnQs
IHJlZ1QyKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGF1dG8g
c2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdU
MiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAgICAgYXV0byBzbG93
UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBy
ZWdUMCwgcmVnVDIsIFsmXSB7CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKICAgICAgICAgfSk7
CkBAIC0yNTMsMTMgKzI2OCwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0
cnVjdGlvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9IGlu
Zm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6WWVzKTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0g
bGFiZWwoKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247
CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25t
ZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0yNzMsMjAgKzI4
OCwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOwogCiAgICAgaWYgKG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJn
cyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92bSwg
KnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKCptX3ZtLCAqdGhp
cywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZy
b21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpAQCAtMzk1LDE3ICs0MTAsMzAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogCiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwogICAgIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisKKyAgICBtb3ZlKHJlZ1QwLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX25leHQpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlc3VsdEdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25l
eHQsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsK
IH0KQEAgLTQxNiwxMCArNDQ0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1
Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9I
b3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgaXRlcmF0b3JH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgSnVtcExpc3Qgbm90T2Jq
ZWN0OwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9yR1BSKSk7
CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckdQUikpOwpA
QCAtNDMyLDE5ICs0NTgsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29ucwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2Fs
bCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJhdG9y
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50KS5yYXdCaXRzKCkpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBtb3ZlKGl0
ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBl
KG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogCiAgICAg
YXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVy
YXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogCiAgICAgZG9uZS5saW5rKHRo
aXMpOwogfQpAQCAtNDUyLDcgKzQ3Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9uID0gKFsmXSAoKSB7
CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKICAgICAgICAgY2FzZSBO
YXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25hcnJvdzsKQEAgLTQ3MCw1MCAr
NDkzLDc3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBK
dW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
MiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRpb25Nb2RlOjpHZW5l
cmljKSkpOwogCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBvcjgoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgQWJzb2x1
dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2l0ZXJhdGlvbk1ldGFkYXRhLnNlZW5Nb2RlcykpOworICAg
IGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9m
ZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0
T2ZTZWVuTW9kZXMoKSwgcmVnVDApOworICAgIG9yMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgcmVnVDApOworICAgIHN0b3JlOFRv
TWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNl
dE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZT
ZWVuTW9kZXMoKSk7CiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rp
b24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQo
KTsKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2JqZWN0KSBpbiByZWdU
MAogCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGl0ZXJSZXN1bHRH
UFIgPSByZWdUMjsKLSAgICBHUFJSZWcgZG9uZUdQUiA9IHJlZ1QxOwotICAgIC8vIGl0ZXJSZXN1
bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0IGJ5IGlkIGJlbG93LgotICAg
IG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnNjcmF0Y2g7CisgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOwog
CisgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpyZXN1bHQ7CiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaXRl
clJlc3VsdEdQUik7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1
ZUdQUiA9PSBiYXNlR1BSKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUik7CiAKICAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVncyA9IFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJlc2VydmVkUmVncy5h
ZGQodmFsdWVHUFIpOworICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZChpdGVyQ2FsbFJlc3VsdEdQ
Uik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
cHJlc2VydmVkUmVncywKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpT
VmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgcmVnVDMsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSks
IHByZXNlcnZlZFJlZ3MsCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHN0dWJJbmZvR1BSLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7
IGRvbmVHUFIgfSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpT
VmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2lu
dCgpOwogICAgIH0KIAotCiAgICAgewotICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsK
LSAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVz
ZWRSZWdpc3RlcnMoZG9uZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAgICAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIo
KTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNj
cmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0b3Iu
YWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRv
bmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3QoZ2xvYmFsR1BSKTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5j
aElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xv
YmFsR1BSKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1vdmUoaXRlckNh
bGxSZXN1bHRHUFIsIGJhc2VHUFIpOwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdz
KHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCByZWdUNCwgQWNjZXNzVHlwZTo6R2V0
QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZh
bHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAg
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlc3VsdEdQUik7CiAKICAg
ICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwogICAgIH0KQEAgLTUyNyw1OSArNTc3LDU1
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1w
KCkpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgewogICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0
R1BSID0gcmVnVDI7CiAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAgICAg
SnVtcExpc3Qgbm90T2JqZWN0OwotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90
Q2VsbChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZO
b3RDZWxsKGl0ZXJDYWxsUmVzdWx0R1BSKSk7CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKTsKICAgICAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAg
ICAgCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAgIG5v
dE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOworICAgICAg
ICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJDYWxsUmVzdWx0R1BSKSk7
CiAKLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJ
bmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRv
bmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotCi0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIHJlZ1QxKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1
bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBk
b25lVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0
cygpKTsKKworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9u
ZVZSZWcsIGRvbmVHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2Jq
ZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwog
ICAgIH0KIAogICAgIHsgICAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgICAg
IEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCk7CiAgICAgICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAK
ICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgQ2FsbCBj
YWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCB2YWx1ZVZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJS
ZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFyZ3Vt
ZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKICAgICB9
Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogCisKIG5hbWVz
cGFjZSBKU0MgewogCiBuYW1lc3BhY2UgREZHIHsKQEAgLTE1OSwxMCArMTYwLDEwIEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgewot
ICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURh
dGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJJbmxpbmVBY2Nlc3MuaCIKKyNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJMaW5rQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIApAQCAtNDYsMTAgKzQ3LDkg
QEAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBnYXJiYWdlU3R1YkluZgogSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzKQotICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICwg
bV9qaXRUeXBlKGppdFR5cGUpCisgICAgOiBtX2ppdFR5cGUoaml0VHlwZSkKIHsKLSAgICBtX3N0
dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlw
ZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKKyAgICBtX3N0dWJJbmZvID0gY29k
ZUJsb2NrID8gY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6
IGdhcmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNhbGxTaXRlSW5kZXggPSBjYWxs
U2l0ZTsKIAogICAgIG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzOwpA
QCAtNTksNyArNTksNiBAQCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgK
ICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgsIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCkKIHsKICAgICBtX3N0dWJJbmZv
LT5zdGFydCA9IHN0YXJ0OwotCiAgICAgbV9zdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gZmFzdFBh
dGgubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihtX2RvbmUpOwogCiAgICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkKQEAgLTY3LDYgKzY2LDE1IEBAIHZvaWQgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIG1fc3R1YkluZm8tPnNsb3dQYXRoU3Rh
cnRMb2NhdGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1f
c2xvd1BhdGhCZWdpbik7CiB9CiAKK3ZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQ
UlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgUkVM
RUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworICAgIGppdC5sb2Fk
Q29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQ
dHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsK
K30KKwogSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxT
aXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTExMCw3ICsxMTgsNyBAQCBKSVRHZXRCeUlkR2Vu
ZXJhdG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJ
VFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUs
IEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAgIDogSklUQnlJ
ZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBhY2Nl
c3NUeXBlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCi0gICAgLCBt
X2lzTGVuZ3RoQWNjZXNzKHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAgICAsIG1faXNMZW5ndGhBY2Nlc3MoY29kZUJs
b2NrICYmIHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1l
cy0+bGVuZ3RoLmltcGwoKSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlLnBheWxvYWRHUFIo
KSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9CkBAIC0xMjAsNiArMTI4LDM0IEBAIHZvaWQgSklUR2V0
QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGEKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0
LCBtX2lzTGVuZ3RoQWNjZXNzID8gSW5saW5lQWNjZXNzOjpzaXplRm9yTGVuZ3RoQWNjZXNzKCkg
OiBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAordm9pZCBKSVRH
ZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQs
IHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGpp
dC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIp
OworCisgICAgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7Cisg
ICAgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworCisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRj
aCk7CisgICAgYXV0byBnb1Nsb3cgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQu
bG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHJv
cGVydHkoYmFzZSwgc2NyYXRjaCwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBm
aW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBnb1Nsb3cubGluaygmaml0KTsKKyAgICBqaXQu
Y2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlz
aGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKKwogSklUR2V0
QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IoCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycywKICAgICBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyB2YWx1ZSwgSlNWYWx1
ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAg
LTEzOCw2ICsxNzQsMzQgQEAgdm9pZCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVy
YQogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3Bl
cnR5QWNjZXNzKCkpOwogfQogCit2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywg
R1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURh
dGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAgIGpp
dC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKworICAgIC8vIE9PUFM6IHNo
YXJlIGNvZGUgdy8gSklUR2V0QnlJZEdlbmVyYXRvcgorICAgIEdQUlJlZyBiYXNlID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSBC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBHUFJSZWcgcmVz
dWx0ID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdDsKKworICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOwor
ICAgIGF1dG8gZ29TbG93ID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNj
cmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQubG9hZFByb3BlcnR5
KGJhc2UsIHNjcmF0Y2gsIEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOworICAgIGF1dG8gZmluaXNo
ZWQgPSBqaXQuanVtcCgpOworCisgICAgZ29TbG93LmxpbmsoJmppdCk7CisgICAgaml0LmNhbGwo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hlZC5s
aW5rKCZqaXQpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRQdXRCeUlkR2Vu
ZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBK
SVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZp
ZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHVi
SW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIApAQCAtMTQ5LDYgKzIxMywzNCBAQCBKSVRQdXRCeUlk
R2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lz
dGVycy5jbGVhcihzY3JhdGNoKTsKIH0KIAordm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBH
UFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0
YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0
LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworCisgICAgR1BSUmVnIGJhc2Ug
PSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgR1BSUmVnIHNjcmF0Y2gyID0g
QmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBHUFJSZWcgdmFsdWUgPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBnb1Nsb3cg
PSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZP
ZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5zdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHsg
dmFsdWUgfSwgYmFzZSwgc2NyYXRjaCwgc2NyYXRjaDIpOworICAgIGF1dG8gZmluaXNoZWQgPSBq
aXQuanVtcCgpOworCisgICAgZ29TbG93LmxpbmsoJmppdCk7CisgICAgaml0LmNhbGwoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZD
b2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hlZC5saW5rKCZq
aXQpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiB2b2lkIEpJVFB1dEJ5SWRHZW5l
cmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKIHsKICAgICBnZW5l
cmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eVJlcGxhY2Uo
KSk7CkBAIC0zMDAsNiArMzkyLDMxIEBAIHZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0
ZUZhc3RQYXQKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVG
b3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAordm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQ
UlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQu
bG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9
IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIEdQUlJlZyByZXN1bHQgPSBCYXNl
bGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGdvU2xvdyA9IGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCByZXN1bHQsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmJveEJvb2xlYW4odHJ1ZSwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBn
b1Nsb3cubGluaygmaml0KTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25lID0g
aml0LmxhYmVsKCk7Cit9CisKIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OkpJVEluc3RhbmNlT2ZH
ZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsCiAgICAgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEdQUlJlZyByZXN1bHQsIEdQUlJlZyB2YWx1
ZSwgR1BSUmVnIHByb3RvdHlwZSwgR1BSUmVnIHN0dWJJbmZvR1BSLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxF
KEpJVCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25W
YWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCkBAIC0zOCwxMSArMzksMTE2IEBAIG5hbWVz
cGFjZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNsYXNzIENhbGxTaXRlSW5k
ZXg7CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5m
bzsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNzIEFjY2Vz
c1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCitzdHJ1Y3Qg
QmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
R1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1
Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
ID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlW
YWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9jayBhbmQg
aW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KKyAgICBzdGF0
aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAg
c3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjph
cmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG8gPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBH
UFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJl
Z1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
byA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gg
PSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnMg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0
cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBi
YXNlID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVQdXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJ
bmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUklu
Zm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZv
OjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86
OnJlZ1Q0OworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBicmFuZCA9
IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xhc3MgSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9
CkBAIC02MiwxNSArMTY4LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKAogICAgICAg
ICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlu
a0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CisK
KyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2VkU3R1YkluZm8geyBudWxs
cHRyIH07CisgICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBwcm90ZWN0ZWQ6Ci0gICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0VHlwZTsKICAgICBTdHJ1
Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgorICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQ
YXRoQ2FsbDsgLy8gT09QUzogbWFrZSByZXBvcnRDYWxsIHBhc3Mgc29tZXRoaW5nIGluIHdlIGNh
biB1c2UgZm9yIHRoZSBub24tQ1RJIHRodW5rcyBidWlsZHMuIAogfTsKIAogY2xhc3MgSklUQnlJ
ZEdlbmVyYXRvciA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CkBAIC05OCw3ICsy
MTAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVS
ZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKK3B1Ymxp
YzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTEx
MSw2ICsyMjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVS
ZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUpOwogICAgIAogICAgIHZv
aWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQ
UlJlZyBzdHViSW5mb0dQUik7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzTGVuZ3RoQWNjZXNz
OwpAQCAtMTI0LDYgKzIzNyw3IEBAIHB1YmxpYzoKICAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlw
ZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdp
c3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBK
U1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BS
KTsKIAorICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2ln
bmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAgICAgdm9pZCBnZW5l
cmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiB9OwogCkBAIC0xMzIsMTAgKzI0NiwxMSBA
QCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNo
ZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLAotICAgICAgICBKU1ZhbHVlUmVncyB2
YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtp
bmQpOworICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUlu
ZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmll
ciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBz
dHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAg
ICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50
LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogICAgIAogICAgIFZfSklUT3BlcmF0aW9uX0dTc2lKSkMg
c2xvd1BhdGhGdW5jdGlvbigpOwogCkBAIC0xNjMsMTEgKzI3OCw5IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgogICAg
IEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJs
ZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0xOTEsOCArMzA0LDYgQEAgcHVibGljOgog
CiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yMTYsOCArMzI3LDYgQEAg
cHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAK
LXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9B
c3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yNDEsOCAr
MzUwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1i
bGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBA
IC0yNTUsNiArMzYyLDcgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIAogICAgIHZvaWQgZ2VuZXJhdGVG
YXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5m
b0dQUik7CiB9OwogCiBjbGFzcyBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGZpbmFsIDogcHVibGlj
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTI3Nyw4ICszODUsNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1
ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Ns
b3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSArNDA4LDkgQEAgcHVibGljOgogICAgIAogICAg
IHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgogICAg
IEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3Jlc3VsdDsKIAotICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFi
bGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzMwLDggKzQzNCw2IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJp
dmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMg
KzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09w
ZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBz
cmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cisg
ICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNy
YykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91
YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50
KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxXQVlTX0lOTElORSBib29s
IEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5p
c0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAgICAgICAgLy8gT09QUzog
ZmluZCBhIHdheSB0byBhc3NlcnQgdGhhdCBhbGwgbGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2Vs
bHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6Omdl
dENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMu
aXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7
CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtU
aW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFu
dChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJh
bWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xNTYs
MzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4CiAj
ZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlv
bik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIs
IHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2FsbDsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRh
ZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYg
Ynl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZh
bHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAg
ICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5k
aWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJl
ZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQorICAgIGlmICgh
aXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0y
MDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAog
aW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVj
b2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0
KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlu
a2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9p
bnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBh
dXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJl
bCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRD
aGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2lu
dChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgs
ICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGgg
Z2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9p
bnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMu
ZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgsMzMgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpp
c09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4g
c3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYm
IGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0g
MTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJv
ZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hv
dWxkRW1pdFByb2ZpbGluZygpKTsKLQotICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3Vy
YXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAv
LyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZh
bHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UKLSAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
KiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1
ZVByb2ZpbGUubV9idWNrZXRzKTsKLSAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRl
c2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAm
ZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKLX0KKyAgICBpZiAoIXNyYy5pc0NvbnN0
YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9j
ay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Cit9CisKKy8v
aW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFs
dWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKy8veworLy8gICAgQVNTRVJUKHNob3VsZEVt
aXRQcm9maWxpbmcoKSk7CisvLworLy8gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJh
dGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAorLy8gICAg
Ly8gc3RvcmUuCisvLyNpZiBVU0UoSlNWQUxVRTY0KQorLy8gICAgc3RvcmU2NCh2YWx1ZS5ncHIo
KSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyNlbHNlCisvLyAgICBFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vICAgIHN0b3JlMzIodmFsdWUucGF5bG9h
ZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOworLy8gICAgc3RvcmUzMih2YWx1
ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOworLy8jZW5kaWYKKy8vfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2Ft
ZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVl
LCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5
dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzIzLDQxICszNTIsNDIgQEAgaW5saW5lIHN0ZDo6ZW5h
YmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFk
YXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRl
Y29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAgIGlmICghc2hvdWxkRW1p
dFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkp
LCB2YWx1ZSk7CisKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+
bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxl
T2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVl
UHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCks
IEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYg
dmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKLX0KKy8vaW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9m
aWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97CisvLyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisvL30KIAotdGVtcGxhdGU8
dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5h
bWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwog
fQogI2VuZGlmCiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIFJlZ2lz
dGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2
b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxH
UFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKSB7CiAgICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmUz
MihzY3JhdGNoR1BSLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQo
KSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBvZmZz
ZXRPZkFycmF5UHJvZmlsZSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJy
YXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Qnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJ
RCBzY3JhdGNoR1BSKQogewotICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAg
ICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIs
IEFkZHJlc3MoYXJyYXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5T
dHJ1Y3R1cmVJRCgpKSk7Ci0gICAgfQorICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsg
QXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2VsbEdQUiwgc2Ny
YXRjaEdQUik7CiB9CiAKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25z
dGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQpAQCAtMzgwLDcgKzQxMCw3IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExv
YWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewogICAg
IGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
aW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOworICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0
ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAgICBs
b2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcgKzUyNiw3IEBAIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3du
Q2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcgKzUzNiw3IEBAIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0
ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgewor
ICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQo
KSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUx
NCwxMSArNTQ0LDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwog
ICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQo
VmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFs
UmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsK
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0LDExICs1NjksMTcg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVCht
X2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVy
aW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMg
c2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlz
TnVtYmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
dmFsdWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQorICAgICAgICBzd2l0Y2ggKG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykpIHsKKyAgICAg
ICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6CisgICAgICAgIGNhc2Ug
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6IHsKKyAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAg
ICAgbW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBsb2FkQ29k
ZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTY2LDExICs1OTcsNiBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29u
c3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3Rh
bnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3Qp
KTsKQEAgLTU5NSw3ICs2MjEsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNs
b3dDYXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFt
X2NvZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVn
KSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTYz
NywzMCArNjYzLDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAog
ewogICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKLX0KLQotQUxXQVlT
X0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0
ZWNvZGUpCi17Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsg
Ly8gSGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8gaXRlcmF0b3IgPSBt
X2NvcGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3Bp
ZWRHZXRQdXRJbmZvcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3It
PnZhbHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtl
eSwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJbmZvOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9m
aWxlIEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVp
bnQ2NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSAr
IDEpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7
Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0g
ICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9m
aWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAg
IG1fY29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVy
biBhcml0aFByb2ZpbGU7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPm91dE9mTGlu
ZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAg
LTY4MSw2ICs2ODQsNjEgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9w
UAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEo
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQor
eworICAgIGxvYWRQdHIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2Nr
LT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBy
ZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBz
aXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQzMihBZGRyZXNzKHNfbWV0
YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0
YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRh
KGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkK
K3sKKyAgICBsb2FkOChBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2st
Pm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVj
b2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUg
dmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBz
dG9yZTgodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+
bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OnN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2Rl
LCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlMzIodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0
YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0
YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQp
Cit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBzX21ldGFkYXRh
R1BSLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29uc3RhbnQo
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBHUFJSZWcgcmVzdWx0KQor
eworICAgIGxvYWRQdHIoQWRkcmVzcyhzX2NvbnN0YW50c0dQUiwgc3RhdGljX2Nhc3Q8dWludHB0
cl90Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZENvbnN0
YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQs
IEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFu
dCgpKTsKKyAgICAvLyBPT1BTOiBNYXliZSBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQ/CisgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlc3VsdCk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgQ29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1Zl
Y3RvckJ1ZmZlcigpKSwgcmVzdWx0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0
YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2go
Y29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1l
Rm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hP
ZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNh
dGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1w
IHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1l
bnQuCiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNo
SnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNv
cmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNv
cmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2Vk
VGFibGUpOwogCkBAIC0xMDI0LDcgKzEwMjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
Y2hhcihjb25zdCBJbnN0CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRl
c3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAg
ICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3
ICsxMDQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAg
ICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRo
aXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVj
b2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlu
a2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNiArNDMsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZp
cnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisK
IG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTU0LDExICs1NiwyMiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkp
IHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMp
OwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBzdG9yZTY0KFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKLSAg
ICAgICAgZWxzZQorICAgICAgICAvLyBPT1BTOiBtb3N0ICJPdGhlciIgU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uIGNvbnN0YW50cyBjYW4ganVzdCBiZSBncmFiYmVkIGZyb20gdGhlIFVubGlua2Vk
Q29kZUJsb2NrLiBJdCdzIGp1c3QKKyAgICAgICAgLy8gYSBjb3VwbGUgdHlwZXMgdGhhdCBjYW4n
dC4gQ3JlYXRlIGFuIGFic3RyYWN0aW9uIGZvciB0aGF0LgorCisgICAgICAgIHN3aXRjaCAobV91
bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkg
eworICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAg
ICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAg
ICAgICAgICAgICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNz
Rm9yKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIHJlZ1QwKTsKKyAgICAg
ICAgICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICsxMDAs
MzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2Jq
ZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0Zp
bmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwot
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVu
dGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdU
MDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQg
c2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7
CiAKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRl
cmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0
b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBz
bG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVn
LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1f
dm0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0
b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSAr
IE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVS
ZWcpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1
c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcs
IEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1
dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVj
dHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7
CisgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7
CisgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0g
cmVnVDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
LnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBl
bWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0xMzEsNyArMTQyLDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCiAgICAgLy8gV2UgZG9u
J3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAg
IEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3Rv
SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
MSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFs
LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBt
X2Z1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKSkpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOwogCkBAIC0xNTQsMzAgKzE2Niwz
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRz
IChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMu
Ci0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3
aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3RvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgdmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3Rv
R1BSKTsKICAgICAKICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBt
dXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1i
b2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2
YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0
YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAog
ICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1Qx
LCAvLyBwcm90bwotICAgICAgICByZWdUNSwKLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2Ny
YXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICByZXN1bHRHUFIsCisgICAgICAgIHZhbHVlR1BSLAorICAgICAgICBwcm90b0dQUiwKKyAg
ICAgICAgc3R1YkluZm9HUFIsCisgICAgICAgIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
c2NyYXRjaDEsIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VP
ZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwot
ICAgIAorCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQg
KzIxMiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAg
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZP
cHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0
aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJl
Z1QxKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9
PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxp
bmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlv
bjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50
R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0
VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRH
UFIzKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0
aW9uKikKQEAgLTI0MCw3ICsyNTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5k
ZWZpbmVkKGNvCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzc0LDcgKzM5Myw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCZSZWdpc3RlckF0
T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKICNlbHNlCkBAIC0zODMsOSArNDAyLDkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogfQogCiAjaWYgRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJikK
IHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaml0LmNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKQEAgLTQxMSw3ICs0MzAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRp
dmUoY29uc3QgSW5zCiAKICAgICBpZiAoZHN0ICE9IHNyYykKICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tl
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM0LDkgKzQ1Miwx
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiB2b2lkIEpJVDo6
ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5h
bWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUs
IGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NjUsOCArNDg0LDEwIEBA
IHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGkKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZh
bHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFs
T2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxz
ZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTQ4MCw3ICs1MDEsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNTE5LDcgKzU0MCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICAvLyBGaXJzdCwg
aGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9u
IHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsK
ICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwogCkBA
IC01NDMsNyArNTY0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3Ry
dQogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4
KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQp
OwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCkBAIC01ODIsMTUgKzYwMywx
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBKU1ZhbHVl
IHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBv
aW50ZXIpOwotICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVz
dGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgbG9hZENvZGVCbG9ja0Nv
bnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QxKTsKKyAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgc3Rv
cmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVjb2RlLCBPcEpuZXFQdHI6Ok1ldGFk
YXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
ICAgICBlcXVhbC5saW5rKHRoaXMpOwogfQpAQCAtNjI1LDggKzY0NCwxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxP
YmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwg
SlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7
CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc1RydXRoeUdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZWdUMCksIHRhcmdldCk7CkBAIC02NDAsNyArNjYxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTY5NSw3ICs3MTYsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMSwgcmVnVDApOwogICAgIGp1bXBUb0V4
Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CkBAIC03MTEsNyArNzMzLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Rocm93
X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxs
SGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
YXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhyb3duVmFsdWVHUFIgPSBhcmd1
bWVudEdQUjE7CkBAIC03MjAsNyArNzQyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogCiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAw
CiAgICAgaml0LmxvYWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIGFyZ3VtZW50R1BSMCk7Ci0gICAg
aml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChhcmd1
bWVudEdQUjApOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcihhcmd1bWVudEdQUjApOwogI2VuZGlmCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGds
b2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKQEAgLTkwOCw3ICs5MzAsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAt
OTE4LDcgKzk0MSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3Rl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKIH0KIApAQCAtOTMxLDcgKzk1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X251bWJlcihjb25zdCBJbnN0cnUKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51
bWJlcihyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk1MSw3ICs5NzUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RyCiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3ROdW1iZXIocmVnVDApKTsKICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
Z1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAg
aWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3RWUmVnKTsKIH0KQEAgLTk3OCw3ICsxMDAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2Jq
ZWN0KGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkp
OwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDAp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAo
c3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZS
ZWcpOwogfQpAQCAtOTkzLDcgKzEwMTcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29u
c3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9y
Q2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVk
SW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZz
ZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Y29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIE9PUFM6IFRoaXMg
aXNuJ3QgZWxlZ2FudC4gV2h5IGFyZW4ndCB0aGV5IGluIHRoZSBjYWxsZWUgc2F2ZSBidWZmZXIu
IEkgZ3Vlc3MgYmVjYXVzZSB3ZSBjYW4gT1NSIGV4aXQgaGVyZT8KKyAgICBlbWl0TWF0ZXJpYWxp
emVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOwogCiAgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0
Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMDExLDIzICsxMDM4LDExIEBAIHZv
aWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0
eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsK
LSAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZt
KCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1
ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVl
UHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBza2lw
T1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0
aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYg
KGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0gICAg
ICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSwgcmVn
cyk7Ci0gICAgICAgIH0pOwotICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIApA
QCAtMTA1Myw4ICsxMDY4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJ
bnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5l
ZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0
cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRT
aW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNo
ZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1
bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5z
dXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwODEsMTMgKzEwOTYsMTQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1w
IHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1l
bnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0
YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6
Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJs
ZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRl
eCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1
dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlw
ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUu
bV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0K
IApAQCAtMTA5OSwyMCArMTExNSwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5n
KGNvbnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2Ny
dXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlv
bnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmlu
Z0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxl
SW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJp
bmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIHRhYmxlSW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNo
UHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlYnVnPigpOwotICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJS
ZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkpLCByZWdUMCk7CiAgICAgSnVtcCBu
b0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2Rl
Lm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwpA
QCAtMTEzMyw3ICsxMTUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0
cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CkBAIC0xMTQ4LDcgKzExNjYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IElu
c3RydWN0CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE2
Niw3ICsxMTgzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Ywog
CiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVn
VDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBA
IC0xMTg4LDEyICsxMjA1LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3Ry
dWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlh
bGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJz
LCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRp
bWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgc2l6ZV90IGNvdW50ID0gbV9jb2Rl
QmxvY2stPm51bVZhcnMoKTsKKyAgICBzaXplX3QgY291bnQgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT5udW1WYXJzKCk7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGZvciAoc2l6
ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxS
ZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCiAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVC
bG9jayk7CisgICAgCisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QwKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwKTsKIAogICAgIGVtaXRF
bnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAjZWxzZQpAQCAtMTIxMiw3ICsxMjMxLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9w
X2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJl
Z2lzdGVyczo6ZWJwKTsKQEAgLTEzMTAsMjMgKzEzMjksMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRT
dHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1
cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BUb1RoaXM6
Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1QyKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwotICAgIFdyaXRlQmFycmllckJh
c2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAg
ICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRh
UmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKQEAgLTEzNDIs
NyArMTM1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAg
ICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9m
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFBy
b3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwg
YWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9u
UmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rp
b246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKIAotICAgIGxvYWRQdHIoY2FjaGVkRnVu
Y3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcENyZWF0ZVRoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZENhbGxlZSgpLCBjYWNo
ZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNo
UHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5N
dWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RF
cXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0aXBs
ZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM4Nyw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwg
cmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVn
cyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIsNyArMTM5OCw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJl
Z1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVy
blZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qs
IHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyArMTQxMSw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzE0MjIsOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0MzcsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1
cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogfQpAQCAtMTQzMCw3ICsxNDUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1
cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29w
SGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYm
IG1fdW5saW5rZWRDb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4
ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkUHRyKHB0ciwgcmVnVDAp
OwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaFB0cihCZWxvdywgcmVnVDAs
IFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0
KCkpKTsKQEAgLTE0NDAsNyArMTQ2MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChj
b25zdCBJbnN0cnUKICNlbHNlCiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKLSAg
ICAgICAgbW92ZVZhbHVlKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVzdWx0UmVncyk7
CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVzdWx0UmVncy5ncHIoKSk7CiAgICAgICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTE0NTMsOCArMTQ3Myw5
IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKIAogICAgIC8vIEVt
aXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAogICAgIGlmIChjYW5CZU9wdGltaXplZCgp
KSB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZlT3JaZXJv
LCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3Ao
KSksCi0gICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJ
VEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAgICAgICBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9CiB9CiAKQEAgLTE1MDks
NyArMTUzMCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFyZ3Vt
ZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC0xNTIyLDcgKzE1NDQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2hlY2tfdHJhcHMoY29uc3QgCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfY2hlY2tfdHJhcHNfaGFu
ZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjpl
YnApOwpAQCAtMTU2NCwzNCArMTU4NiwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhw
KGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRHUFIwOworICAg
IGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXROZXdG
dW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
SnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1f
c2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJn
dW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBt
X2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBh
dXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
Ynl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBh
cmd1bWVudEdQUjIpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dl
bmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Fz
eW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdf
YXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAt
MTYyMSwyMyArMTY0NSwyNCBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0
IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQ
UjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwog
I2VuZGlmCiAKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2st
PmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFu
dCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhw
ciwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1f
ZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIy
KTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9y
X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5j
X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3
X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9u
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0
aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQog
CkBAIC0xNjY0LDI5ICsxNjg5LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19nZW5l
cmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJn
djsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQ
cm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwK
LSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMik7CisgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBzaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CiAjZWxzZQorICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRl
Y29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRp
b25Qcm9maWxlKCksIHJlZ1QyKTsKICAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdU
MCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmls
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAg
ICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJlZ1Qy
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQogCkBAIC0xNjk0LDggKzE3
MjAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAKIHZvaWQg
SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVu
bGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB0eXBlIHByb2ZpbGVyIGlzIGVuYWJsZWQuCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90
eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNv
ZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE3NzcsMjAgKzE4MDQsMjQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQo
bm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZl
IHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBz
aGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdH
UFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVn
IHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgp
LCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgeworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBu
b24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1Qy
OworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJl
Zywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9j
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFk
b3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwg
cmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5k
aWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9s
X2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICAvLyBP
T1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtlZCBjb2RlIGNhY2hpbmcg
d2hlbiB0aGUgdXNpbmcgdGhlIGNvbnRyb2wgZmxvdyBwcm9maWxlci4KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwog
ICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9i
YXNpY0Jsb2NrTG9jYXRpb247CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9j
YXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7CkBAIC0xODYwLDcgKzE4OTEsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5k
ZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE4
ODYsNyArMTkxNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QK
ICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCwgcmVzdWx0UmVncyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkNv
ZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKQEAgLTI4NTUs
NyArMjg1Niw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAg
ICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1w
bGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVC
bG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNv
ZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWlu
KTsKICAgICB2b2lkKiByZXN1bHQgPSBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKIApAQCAtMjg4MCw3ICsyODgxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxv
Y2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoa2V5
LmlzSW50MzIoKSkKQEAgLTI5MDMsNyArMjkwNCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25Td2l0Y2gKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIHZvaWQqIHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAKICAgICBpZiAoa2V5
LmlzU3RyaW5nKCkpIHsKICAgICAgICAgU3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmluZyhrZXkp
LT52YWx1ZShnbG9iYWxPYmplY3QpLmltcGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDcgKzM0OCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRl
TmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1Zh
bHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsKICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw5MiArNDksMTAzIEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRl
bnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZp
ZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCBy
ZWdUMik7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1f
c2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJ
ZGVudGlmaWVycygpKSB7CisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChi
YXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2Rl
LCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
c2NyYXRjaEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwg
b3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwg
cHJvZmlsZSwgcmVnVDIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRl
Y29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CiAKICAg
ICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywg
c3R1YkluZm9HUFIpOworCisgICAgICAgIC8vIE9PUFMuIFN1cHBvcnQgdGhpcworICAgICAgICAv
L2lmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCisgICAgICAgIC8vICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICAg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeVZh
bHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogICAgIH0KLQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVU
eXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBl
JiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAgICBpZiAoIWhhc0FueVNsb3dDYXNlcyhpdGVyKSkK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCi0gICAgICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CisgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9n
ZXRCeVZhbEluZGV4KytdOworCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVBy
b2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVu
dEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAg
IEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgp
OworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFy
ZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBh
cmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwg
Y2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3Vt
ZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAg
IHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Cisg
ICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRp
Y19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAg
c3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdU
MSk7CisKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9m
aWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0
X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
KworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKQEAgLTE0OSw3ICsxNjAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0
IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVy
IGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAg
IGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNjAsOCArMTcxLDggQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFs
T2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJn
dW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0
KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIApA
QCAtMTg3LDM0ICsxOTgsNDAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShj
b25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUs
Ci0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFBy
aXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3Vs
dFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0
UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFt
ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzI0MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJl
Z1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwg
b3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3Vt
ZW50R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1NCwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRl
TmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBA
IC0yNjQsNyArMjc3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmpl
Y3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBE
RkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmpl
Y3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
LSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0
dXJuQWRkcmVzcygpOwpAQCAtMzAwLDIxICszMTMsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0
X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1f
YnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgYnJhbmRHUFIg
PSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwotCiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNz
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAg
YWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBX
ZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ug
d3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC0zMjQsMTcgKzM0NCwyMiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9i
cmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5z
dHJ1Y3Rpb24pOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVFByaXZh
dGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3By
aXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdU
MTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFu
ZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzY5LDE4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAg
c3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwog
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9w
ZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9u
VHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1l
bnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1p
emUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0zNzAsMTkgKzM4OSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRl
X2JyYW5kKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnJhbmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5k
R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1
YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJh
bmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCkBAIC0zOTQs
OSArNDIyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFu
ZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50
R1BSMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZh
dGVCcmFuZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2
LDI0ICs0MzYsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8g
YXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVu
Y3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+
OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2
YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZh
dGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNDM1LDMwICs0NTksNDIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZh
bHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwor
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQ
Uik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQpOwotICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRT
bG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworICAg
IC8vIE9PUFM6CisgICAgLy9pZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAg
IC8vICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7Cisg
ICAgc3R1YkluZm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVj
dD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8t
PmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1
Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1
ICs1MTAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAg
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAg
ICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVj
b2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJl
Y3QpCkBAIC00OTgsNyArNTMxLDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFy
ZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRp
b25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRp
bWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50
R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50
ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0Pigp
LCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJn
dW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWw6Ok1l
dGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1p
emUpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMsIGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTUxMiw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0Owog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92
YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAg
Q2FsbCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
QEAgLTUzMywxOCArNTc1LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BS
ID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQg
dXNlZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29u
dGFpbnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7Cisg
ICAgfQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpA
QCAtNTcwLDIwICs2MTgsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShj
b25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
bzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIp
LCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHVi
SW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2lu
ZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5
VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdp
dGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2NTMsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4o
KTsKLSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7
CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZh
bEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02
MDMsMTMgKzY2MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShj
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0
aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRl
RmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3Vy
ZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0
dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisgICAgUHJpdmF0ZUZp
ZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworCisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1
bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BS
Myk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjQpOworICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlv
blB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50c0dQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02MjIsMTggKzY4NCwxMiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0MywxNCArNjk5LDE0IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBi
ZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAg
IC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
cmVnVDQ7CiAKQEAgLTY4MCw3ICs3MzYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVy
X2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
ckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNjg5LDcgKzc0Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
cmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVy
QnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc1Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
ZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCBy
ZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVn
VDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEs
IHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBy
ZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzA5LDcgKzc2OCw4IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFs
LCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC03MTksNyArNzc5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmli
dXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJp
YnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc4OCwzMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFz
ZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3
cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdy
aXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNs
b2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODMwLDE3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAg
ICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsr
XTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGlt
aXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODU0LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQ
UjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJ
ZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODA4LDcgKzg3Niw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9u
cyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAog
ICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTg0NSwyMiAr
OTEzLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNl
bGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChw
cm9wZXJ0eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwg
QmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJh
cnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJz
IHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTYyLDExIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRl
QnlWYWxPcHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
YXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQgKzk4MCwxOSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVj
bWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0
dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMDIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
ICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAg
ICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIgKzEwMzcsMzEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotCi0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nl
c3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5
SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVu
ZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNzEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTAwMywyNiArMTA5
MSwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbW92
ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNl
Ci0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMzAsMjIgKzExMTIsMzEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWREaXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYgKzExNDUsMTggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTY2LDYxIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7
CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJl
Y3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENh
bGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdl
dEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlM
ZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5t
X21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdl
dEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2Rl
LmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRN
b2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSnVtcCBu
b3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5
SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0
YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdz
LCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0
aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1Yklu
Zm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcs
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlk
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKIAotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KLSAgICBKSVRHZXRCeUlkV2l0aFRo
aXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRz
V2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2ICsxMjI5LDE4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJ
ZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNTAsNTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
OwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNW
UmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhp
c1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRo
aXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIp
LCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
bV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTIwNiw3
ICsxMzEwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRk
cmVzcygpOwpAQCAtMTI0MSwxNiArMTM0NSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRC
eUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRX
aXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwg
b3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTEyNjAsMjggKzEzNjcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1Jl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIg
PT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJv
cGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgZWxzZQotICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI5MSw3ICsxMzkyLDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAt
MTMyOSwyMyArMTQzMCwzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5z
dHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wg
ZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8g
YmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNl
dCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1l
bnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3
ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQg
YXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0
ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAg
IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0S2luZDo6
RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVj
bWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFw
cGVuZChnZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0NzQsMTgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAog
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgr
K107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQ
YXRoRnVuY3Rpb24oKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
YXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
I2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3NiwyNSArMTQ5NSwxOSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4g
dXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJh
c2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQo
dmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCkBAIC0xNDA0LDcgKzE1MTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
CiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQxLDIwICsxNTU0LDMxIEBA
IHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUlu
QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTg3LDE3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
aW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0ODAsMjggKzE2MDcsMjIg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdl
bmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdz
IG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBh
IGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBl
KG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJu
VmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTUxMCwyNSArMTYzMSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5z
dHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5
dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwogCiAg
ICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1Yklu
Zm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUzNywx
NSArMTY2NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEpJVEluQnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJn
dW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVu
dEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3Qs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywg
YXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NTYs
NTkgKzE2ODgsNzAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgog
CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VH
UFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJv
cGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmls
ZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2Zp
bGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxs
R2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJl
J3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0
IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5
cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHBy
IEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpzdHViSW5mbzsKIAotICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworCisgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5m
b0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOwor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZh
dGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklUOjpl
bWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJh
c2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIEFT
U0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAgVU5V
U0VEX1BBUkFNKHByb3BlcnR5KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0gQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
QnJhbmQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2lu
QnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRl
TmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAg
IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJh
dGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyAr
MTc2MSwyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwog
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0
aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRl
Y2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0
aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhh
c1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZh
dGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxNzg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigp
OwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFz
UHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0
ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
TmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDE5ICsxODAzLDIyIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1f
ZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xv
dyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlv
bkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhcklu
amVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNo
R1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVy
bjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NP
ZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9i
YWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9C
SkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSks
IHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2Ny
YXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElz
SW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkK
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSks
IHJlZ1QwKTsKQEAgLTE2ODgsNiArMTgyOCw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1
cmUoVmlydHVhbFJlZ2kKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKQEAgLTE3MDEsNyArMTg0Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3Bl
Ojpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgcmVnVDEpOwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkp
OwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7
CkBAIC0xNzE1LDcgKzE4NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNv
bnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25z
dGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0
YW50U2NvcGUpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3OTQsODcgKzE5MzUsMTA1IEBAIHZvaWQgSklU
OjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29s
dmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAg
ICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUu
bV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2
ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVj
dGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9i
eXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQ
UlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUNjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7
CisgICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJh
bnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUg
dHlwZS4KIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1Qw
KTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBs
b2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9m
ZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAg
cHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFU
YWJsZSgmbWV0YWRhdGEpOworICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29k
ZSk7CisKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgewor
ICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBD
bG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhciIpOworICAg
ICAgICB9OwogCi0jZGVmaW5lIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBv
cF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGlj
IGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9F
QUNIX1JFU09MVkVfVFlQRShSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyAgICAgICAgYXV0byBj
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsK
KyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwg
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9z
Y29wZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyIpOwogICAgICAgICB9OwotI3Vu
ZGVmIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SCisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2
ZVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTog
b3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjb3BlR1BSID0gcmVnVDY7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZz
ZXRHUFIgPSByZWdUNTsKIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBz
Y29wZUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1l
dGFkYXRhR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAg
ICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAg
Y29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2Ug
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUg
PSB2bS5nZXRDVElTdHViKGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBl
bWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQog
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0
IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMg
ZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNh
dXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNv
bHZlU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSBy
ZWdUNzsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7
IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJl
Z1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHBy
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNv
ZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZl
U2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQu
dGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1Qz
LCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29k
ZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRy
KHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1
dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgeworICAgIGF1dG8g
ZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywg
R1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgaWYgKCFu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYg
KGdsb2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxP
YmplY3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQ
Uik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAg
ICAgICAgIH0KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNU
X09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVn
VDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdU
MywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkp
LCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRk
cmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJl
ID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2Nv
cGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAg
ICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAg
aml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSks
IHJlZ1QxKTsKIAotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBk
b25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGpp
dC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QxKTsKICAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Nj
b3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9m
TmV4dCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
cmVnVDEpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAg
ICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7
CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlKSB7CkBAIC0xODgyLDEyICsyMDQxLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8v
IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGlj
YWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6
Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAg
ICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09G
RlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxC
aW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubW92ZShnbG9iYWxPYmpl
Y3RHUFIsIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcs
MTEgKzIwNTYsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAg
ICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMg
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8v
IGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQo
KSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgp
KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
R2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDAp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFy
OgpAQCAtMTkwOSw3ICsyMDY4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBE
eW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAt
MTkxOSw4MyArMjA3OCw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29s
dmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAg
ICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1p
dENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAg
ICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNF
X0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2
ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAg
ICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwg
bV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwot
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDAp
OwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOworICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSkgeworICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShy
ZXNvbHZlVHlwZSk7CisgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOwor
ICAgICAgICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAg
ICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGlj
YWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0
OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0
KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9
IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxl
ci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFU
T1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwK
LSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVT
Y29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAg
SklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3Bl
VGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZl
VHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NP
UEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZl
X3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5
IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJ
VCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgog
ICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGds
b2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAv
LyBUaGUgZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBD
UFUoWDg2XzY0KQpAQCAtMjA2NSw2ICsyMTg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJl
VmFyKFZpcnR1YWxSZWdpcwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKQEAgLTIxNzgsNyArMjMwMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKQEAgLTIxODYsOSArMjMwOCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9z
Y29wZShjb24KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwogfQogCiAjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
QEAgLTIxOTYsNDEgKzIzMTgsNTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Nj
b3BlKGNvbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdCht
X2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBhdXRvIGNsb3N1
cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVy
YXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRf
ZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJl
dHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZh
ciIpOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBb
XSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVy
aWMiKTsKKyAgICB9OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUg
PT0gR2xvYmFsVmFyKSB7Ci0gICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0
R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCBy
ZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0g
bV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRp
ZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9H
RU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dl
bmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNb
XSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9H
RU5FUkFUT1IpCi0gICAgICAgIH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0p
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2Vu
ZXJhdG9yKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAg
ICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKwor
ICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmso
Vk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hh
ciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5j
dGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UK
ICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0
IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCkBAIC0yMjM5LDk5
ICsyMzcwLDg4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4
cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29w
ZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9t
U2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwg
cmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkp
LCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVt
cExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0g
WyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9m
ZnNldCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEp
OwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgYXV0byBlbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSKSB7CisgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVH
UFIsIHJlZ1QwKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFpl
cm8sIHJlZ1QxKSk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJl
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMSkpOwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25D
aGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9W
YXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewog
ICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2lu
dCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2Jq
ZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6
Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07
CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3Bl
cmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0g
ICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVy
YW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
b3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KICAg
ICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBv
cGVyYW5kR1BSKSB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdp
c3RlcikpOwotICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwot
ICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVz
KCkpLCByZWdUMCk7CisgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJh
bmRHUFIpOworICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6
b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29k
ZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkgeworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
KSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVj
ayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZv
ciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Nj
b3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sg
Y292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3Ig
YW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29w
ZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIHJlc3VsdCA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQg
PSByZWdUMTsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwog
Ci0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAt
PiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAg
ICAgIGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1w
IHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAg
ICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9m
T3BlcmFuZCgpKSwgb2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewot
ICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9y
RXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAg
ICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAg
ICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1
bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQs
IFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGpp
dC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAg
ICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRj
aCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMy
VG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3Jh
dGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAg
ICAgICAgICAgaml0Lm5lZzMyKG9mZnNldCk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMy
VG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgo
c2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgog
ICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBy
ZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAg
ICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAg
ICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAg
ICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fb3BlcmFuZCkpLCByZWdUMyk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFu
ZCgpKSwgcmVnVDMpOwogICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJl
Z1QzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVk
Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQxLDg2ICsyNDYxLDYz
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7
Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1Qw
KTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2
ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHku
bGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9i
YWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChy
ZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xv
c3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAg
ICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAg
ICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAv
LyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkp
OwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5h
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIp
KTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5r
KHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xv
YmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAg
bm90R2xvYmFsVmFyLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
aml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygm
aml0KTsKKworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgp
KTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQp
OwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5s
aW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBqaXQuYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKCZqaXQpOwog
Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
OworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNr
aXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQu
bGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVt
YmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFH
UFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9y
ZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxl
KCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogCi0gICAgcmV0KCk7
CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93
Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVy
YXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwo
c2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6
OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJl
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfR0VUX0ZS
T01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2Vu
ZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lz
VXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJu
IHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVy
YXRlT3BHZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9nZXRfZnJv
bV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUo
REVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfR0VUX0ZST01f
U0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBU
aGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRo
ZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlv
bnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMg
YmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAg
ICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxs
SGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVy
czo6ZWJwKTsKQEAgLTI0NDksNyArMjU0Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICBDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0
clRhZyk7CiAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhj
ZXB0aW9uQ2hlY2sodm0pOwogCi0gICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5m
bzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxl
KSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNl
dE9mRmlyc3RCdWNrZXQoKSkpOwogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpO
dW1iZXJUYWcpLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2XzY0
KQpAQCAtMjQ3MSw4NiArMjU2OCw3OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZvaWQg
SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3Jl
UHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJ
bmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hw
b2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0
cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCog
c2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRl
KHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmly
b25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3Rlcikp
KTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5
dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVj
b2RlKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5
cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1
cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9
IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFu
ZCkgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKwor
ICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAg
ICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90
KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0
IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRp
dGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmpl
Y3Rpb24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2Fk
UHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZlN0cnVjdHVyZSgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFpl
cm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJl
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QxKSk7CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZv
aWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0p
KTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCBy
ZWdUMSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdU
MSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVn
VDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9m
ZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCBy
ZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICAvLyBPT1BTOiB3b3VsZCBiZSBuaWNlIHRvIGhh
dmUgYSB2ZXJzaW9uIHRoYXQgdG9vayBHUFJSZWdzIGluc3RlYWQgb2YgVlJzCisgICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAg
ICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBH
bG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNT
Y29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2sp
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAg
ICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9u
TW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKyAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVU
eXBlLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisKKyAg
ICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5p
dGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8
IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkg
ewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNh
dXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0
aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAg
ICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
RW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGly
ZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0
YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVt
aXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCks
IHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworCisgICAg
ICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdE5v
dGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJl
c3MocmVnVDApKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQgYmUgbmljZSB0byBoYXZl
IGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIHZhbHVlLgorICAgICAgICAgICAgZW1p
dFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgog
ICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9z
dXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRT
ZXQpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9p
bnRTZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAg
ICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdU
MSwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKworICAgICAgICAgICAgLy8gT09QUzogV291bGQg
YmUgbmljZSB0byBoYXZlIGEgdmVyc2lvbiB0aGF0IHRvb2sgYSBHUFJSZWcgZm9yIG93bmVyL3Zh
bHVlLgogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoK
QEAgLTI1NjQsNTggKzI2NTQsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNv
bnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
LSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVU
eXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlz
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8g
cHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAg
ICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRo
aXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lw
VG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZh
ci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUg
dGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBw
cm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIs
CisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIKKyAg
ICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBp
cyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAv
LyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsK
KyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikK
KyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9m
aWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAg
ICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZWxz
ZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDAp
OwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVt
aXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7
CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsK
KyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIu
bGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24g
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAg
IG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxp
bmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAg
ICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAg
ICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTggKzI3MDgsMjEgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2Nv
cGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5
dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIp
IHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAg
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElmIGFu
eSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENvZGVC
bG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFyLgog
ICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRl
X2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2UgewogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1bWVu
dEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQp
ID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAg
IEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAgLTI2NTIsNyArMjczOSw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1
c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjcwMSw3ICsyNzg4LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVj
dEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKQEAgLTI3NTksNyArMjg0Niw2IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpAQCAt
Mjc2Nyw3ICsyODUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNv
bgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVy
bmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
Z1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI4MjMsNyAr
MjkwOSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG8KIHZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAg
LTI4MzksMTEgKzI5MjQsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNv
bnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlzIGlzIHRoZSBt
b3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBjYXNlIGl0IGlm
IHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRhZGF0YS5tX2VudW1lcmF0
b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUp
IHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9lbnVt
ZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVN
b2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVu
ZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoKH5KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpICYgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcEVudW1lcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEo
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdG9y
ZThUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JOZXh0OjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CisKICAgICAgICAgbG9hZDMyKEFk
ZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgaW5kZXhHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBl
bmQoYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSkpKTsKIApAQCAtMjg4MSw3OCArMjk3Miw4NyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0
b3JHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAg
YXV0byByZXN1bHRHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVy
YXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRC
eVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9
IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3Rl
cnM6OnNjcmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwg
c2NyYXRjaDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBwcm9w
ZXJ0eUdQUik7CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9l
bnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BF
bnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgp
LCBzY3JhdGNoMik7CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIpOworICAgIHN0b3JlOFRv
TWV0YWRhdGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRh
dGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJh
c2VHUFIpKTsKICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgot
ICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
Z1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlzTm90
T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzY3JhdGNoMywgVHJ1c3Rl
ZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3RydWN0
dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qz
KTsKLSAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qz
LCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVy
ZUlET2Zmc2V0KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHNj
cmF0Y2gxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5j
aDMyKE5vdEVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21wdXRl
IHRoZSBvZmZzZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDMpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJZiBp
bmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2Us
IHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsK
LSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQorICAgIEp1bXAgb3V0
T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhz
Y3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9m
ZnNldCgpKSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAg
ICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5h
cHBlbmQoanVtcCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAg
b3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSwgcmVnVDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihy
ZWdUMywgcmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gxLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBz
Y3JhdGNoMik7CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNj
cmF0Y2gyLCBzY3JhdGNoMik7CiAgICAgY29uc3RleHByIGludHB0cl90IG9mZnNldE9mRmlyc3RQ
cm9wZXJ0eSA9IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0YXRp
Y19jYXN0PGludHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwg
cmVzdWx0R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1l
c0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNl
cy5hcHBlbmQoanVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7Ci0g
ICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5P
d25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9y
TWV0YWRhdGEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCks
IGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVy
YXRvck1ldGFkYXRhKCkpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7
Ci0gICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0
ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgSnVt
cCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0z
MihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVwbGFj
ZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9wZXJ0
eUdQUik7CiAKICAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAogICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
dHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAogICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTYxLDEwICszMDYx
LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVy
YXRlR2V0QnlWYWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdl
dEJ5VmFsPigpLCBpdGVyKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5
cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9o
YXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNv
bnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2Fz
ZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlv
blR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2Rl
LCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7CkBAIC0yOTczLDcgKzMwNzIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9y
X2hhc19wcm9wZXJ0eUltCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJl
c3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRh
dGEoKSwgcmVnVDEpOworICAgIG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFk
YXRhKHJlZ1QxLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0
b3JNZXRhZGF0YSgpKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1
cmVNb2RlKSkpOwogCkBAIC0zMDYyLDYgKzMxNjMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lcgogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0
aGlzKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQorewor
ICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwg
b3duZXIsIHNlbGVjdFNjcmF0Y2hHUFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsK
KyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDkgKzIzNiw5IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgIGlm
IChpc0pTQXJyYXkoYmFzZUNlbGwpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNh
Y2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKICAgICAgICAgICAgICAgICAgICAgJiYgc2xv
dC5zbG90QmFzZSgpID09IGJhc2VDZWxsCi0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFj
Y2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihi
YXNlQ2VsbCkpKSB7CisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNo
ZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJh
c2VDZWxsKSkpIHsKIAotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxp
bmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxK
U0FycmF5Kj4oYmFzZUNlbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRD
b2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywg
c3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6
aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5m
by5pbml0QXJyYXlMZW5ndGgobG9ja2VyKTsKQEAgLTI0OSw4ICsyNDksOCBAQCBzdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0
aCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNl
Q2VsbCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2Fj
aGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2Fj
aGVhYmxlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKSkgewotICAgICAgICAgICAgICAgICAgICBib29s
IGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3Ro
KHN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hl
YWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKSkgeworICAgICAgICAgICAgICAg
ICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3Ry
aW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pOwogICAgICAgICAgICAgICAgICAgICBpZiAo
Z2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRC
eUZ1bmN0aW9uKGtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRT
dHJpbmdMZW5ndGgobG9ja2VyKTsKQEAgLTMwNCw3ICszMDQsNyBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hw
b2ludFNldCgpCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpCiAgICAgICAgICAgICAgICAgJiYgIWxvYWRUYXJnZXRGcm9tUHJveHkp
IHsKLSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGlu
ZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoY29kZUJsb2NrLCBz
dHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAg
ICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICBMT0dfSUMo
KElDRXZlbnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0g
YmFzZVZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGlu
Z1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTcz
MSwxMSArNzMxLDExIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5KEoK
ICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVu
dCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAg
ICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFj
ZShzdHViSW5mbywgc2xvdC5jYWNoZWRPZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYg
SW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBz
dHViSW5mbywgc2xvdC5jYWNoZWRPZmZzZXQoKSkKICAgICAgICAgICAgICAgICAgICAgJiYgIW9s
ZFN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAgICAgICAgICAgICAg
ICAgICAgICYmICFpc1Byb3h5KSB7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
U2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9m
ZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0g
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHVi
SW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IExPR19JQygoSUNFdmVudDo6UHV0QnlTZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlh
dGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKQEAg
LTExMzIsNyArMTEzMiw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnko
CiAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2UKICAgICAgICAgICAg
ICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0
dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgICAgICAgICBi
b29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNj
ZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVk
Q29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoY29kZUJsb2Nr
LCBzdHViSW5mbywgc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29k
ZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxm
UGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0g
YmFzZSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9w
ZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBAIC0xNTUyLDcg
KzE1NTIsNyBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAKIHZv
aWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwg
YXQgIiwgY2FsbExpbmtJbmZvLmZhc3RQYXRoU3RhcnQoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQ
b2ludGVyKCZjYWxsTGlua0luZm8pKTsKICAgICAKICAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlu
a0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQu
aCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNp
ZGVTdGF0ZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21t
b25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJv
ckhhbmRsaW5nU2NvcGUuaCIKQEAgLTM3MCw2ICszNzEsMTUgQEAgaW5saW5lIGJvb2wgaml0Q29t
cGlsZUFuZFNldEhldXJpc3RpY3MoVgogICAgIAogICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsVmFs
dWVQcm9maWxlUHJlZGljdGlvbnMoKTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAh
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklU
Q29kZT4gYmFzZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5s
aW5rZWRCYXNlbGluZUNvZGUpIHsKKyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJTaGFyZWQgdmlh
IExMSW50Iik7CisgICAgICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxp
bmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29kZUJs
b2NrLT5qaXROZXh0SW52b2NhdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJl
YWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5
SklUQ29tcGlsZSIsICgidGhyZXNob2xkIG5vdCByZWFjaGVkLCBjb3VudGVyID0gIiwgY29kZUJs
b2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJlIGxpZnRlZC4iKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEs
IE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2Vy
T3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNv
ZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQot
ICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0
eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEs
IHQyKQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRb
Y2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8g
cHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGlu
IHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAg
ICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRh
dGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAgICBk
aXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBs
bGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9m
aWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1l
dGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BO
ZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAg
ICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAg
dXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQz
KQogICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJp
YSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQot
ICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5h
cnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAg
IHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAg
ZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVj
dCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJv
ZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAg
ICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMsIHQy
KQogICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcs
IC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0gICAg
ICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQog
ICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUo
dDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsx
MTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAg
ICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAu
b3AxTm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAg
ICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0
NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFk
eQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0g
ICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVw
ZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51
bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0
MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3Jv
IGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVy
YW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVs
eSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFn
LCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAg
ICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJ
bnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0
MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEsMTMg
QEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSBQQywg
YTEKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBidHB6
IHIwLCAucmVjb3ZlcgotCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisgICAgICAgICAgICAj
IEJhc2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFudCBw
b29sLgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgICAgICAgICBs
b2FkcCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2Rl
QmxvY2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwogICAgICAgICAgICAg
aWYgQVJNNjRFCiAgICAgICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlND
OjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6Omxvb3BPU1JFbnRy
eSkgKiBQdHJTaXplLCBhMgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0RXF1
YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1l
LCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0
eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQK
LQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0s
IHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3MCw3IEBAIG1hY3Jv
IHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJh
dGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3Jl
cSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2Zp
bGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJp
dGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpA
QCAtMTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25l
Z2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0
dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0
eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2Zp
bGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikK
QEAgLTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9w
TmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdp
IHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQ
cm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFBy
b2ZpbGVJbnQsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAg
YnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAw
MDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAg
ICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0
MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE2
MCw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUs
IHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBl
LCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3JocywgdDAp
CiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21T
dG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRl
Z2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmls
ZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBkaXNwYXRj
aCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRh
ZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0
MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVt
YmVyLCB0NSwgdDIpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50
T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVy
SW50LCB0NSwgdDIpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6
CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA0LDkgKzExOTYsOSBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAKICAgICAub3AyTm90SW50OgogICAgICAg
ICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVm
aW5pdGVseSBub3QuCi0gICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51
bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisg
ICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmls
ZUludE51bWJlciwgdDUsIHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBjaTJk
cyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBm
dDEKQEAgLTE1MTgsNyArMTUxMCw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X2lk
X2RpcmVjdCwKIGVuZCkKIAogIyBUaGUgYmFzZSBvYmplY3QgaXMgZXhwZWN0ZWQgaW4gdDMKLW1h
Y3JvIHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwgbW9kZU1ldGFkYXRhTmFtZSwg
dmFsdWVQcm9maWxlTmFtZSwgc2xvd0xhYmVsLCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuKQorbWFj
cm8gcGVyZm9ybUdldEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LCBtb2RlTWV0YWRhdGFOYW1lLCB2
YWx1ZVByb2ZpbGVOYW1lLCBzbG93TGFiZWwsIHNpemUsIG1ldGFkYXRhLCByZXR1cm4sIGRvQXJy
YXlQcm9maWxlKQogICAgIG1ldGFkYXRhKHQyLCB0MSkKICAgICBsb2FkYiAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6OiVtb2RlTWV0YWRhdGFOYW1lJS5tb2RlW3QyXSwgdDEKIApAQCAtMTU0Niw3
ICsxNTM4LDcgQEAgbWFjcm8gcGVyZm9ybUdldEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LAogLm9w
R2V0QnlJZEFycmF5TGVuZ3RoOgogICAgIGJibmVxIHQxLCBjb25zdGV4cHIgR2V0QnlJZE1vZGU6
OkFycmF5TGVuZ3RoLCAub3BHZXRCeUlkVW5zZXQKICAgICBtb3ZlIHQzLCB0MAotICAgIGFycmF5
UHJvZmlsZSglb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6OiVtb2RlTWV0YWRhdGFOYW1lJS5hcnJh
eUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCB0MCwgdDIsIHQ1KQorICAgIGRvQXJyYXlQcm9maWxl
KHQwLCB0MiwgdDUsIHQxKQogICAgIGJ0aXogdDAsIElzQXJyYXksIHNsb3dMYWJlbAogICAgIGJ0
aXogdDAsIEluZGV4aW5nU2hhcGVNYXNrLCBzbG93TGFiZWwKICAgICBsb2FkQ2FnZWRKU1ZhbHVl
KEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQwLCB0MSkKQEAgLTE1NjgsNyArMTU2MCwxMCBA
QCBlbmQKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X2lkLCBPcEdldEJ5SWQsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIGdldChtX2Jhc2Us
IHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxsKHNpemUsIHQwLCB0MywgLm9wR2V0
QnlJZFNsb3cpCi0gICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BHZXRCeUlkLCBtX21vZGVNZXRh
ZGF0YSwgbV9wcm9maWxlLCAub3BHZXRCeUlkU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHJldHVybikK
KyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEdldEJ5SWQsIG1fbW9kZU1ldGFkYXRhLCBtX3By
b2ZpbGUsIC5vcEdldEJ5SWRTbG93LCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuLAorICAgICAgICBt
YWNybyAoY2VsbEFuZEluZGV4aW5nVHlwZSwgbWV0YWRhdGEsIHNjcmF0Y2gxLCBzY3JhdGNoMikK
KyAgICAgICAgICAgIGFycmF5UHJvZmlsZShPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptX2FycmF5UHJv
ZmlsZSwgY2VsbEFuZEluZGV4aW5nVHlwZSwgbWV0YWRhdGEsIHNjcmF0Y2gxKQorICAgICAgICBl
bmQpCiAKIC5vcEdldEJ5SWRTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRo
X2dldF9ieV9pZCkKQEAgLTMwMDIsNyArMjk5Nyw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
aXRlcmF0b3Jfb3BlbiwgT3AKIAogICAgIGxvYWRWYXJpYWJsZShnZXQsIG1faXRlcmF0b3IsIHQz
KQogICAgIGJ0cW56IHQzLCBub3RDZWxsTWFzaywgLml0ZXJhdG9yT3BlbkdlbmVyaWNHZXROZXh0
U2xvdwotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JPcGVuLCBtX21vZGVNZXRh
ZGF0YSwgbV9uZXh0UHJvZmlsZSwgLml0ZXJhdG9yT3BlbkdlbmVyaWNHZXROZXh0U2xvdywgc2l6
ZSwgbWV0YWRhdGEsIHN0b3JlTmV4dEFuZERpc3BhdGNoKQorICAgIHBlcmZvcm1HZXRCeUlESGVs
cGVyKE9wSXRlcmF0b3JPcGVuLCBtX21vZGVNZXRhZGF0YSwgbV9uZXh0UHJvZmlsZSwgLml0ZXJh
dG9yT3BlbkdlbmVyaWNHZXROZXh0U2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlTmV4dEFuZERp
c3BhdGNoLCBtYWNybyhhLCBiLCBjLCBkKSBlbmQpCiAKIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0
TmV4dFNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Bl
bl9nZXRfbmV4dCkKQEAgLTMwNjEsNyArMzA1Niw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
aXRlcmF0b3JfbmV4dCwgT3AKIAogICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fdmFsdWUsIHQzKQog
ICAgIGJ0cW56IHQzLCBub3RDZWxsTWFzaywgLmdldERvbmVTbG93Ci0gICAgcGVyZm9ybUdldEJ5
SURIZWxwZXIoT3BJdGVyYXRvck5leHQsIG1fZG9uZU1vZGVNZXRhZGF0YSwgbV9kb25lUHJvZmls
ZSwgLmdldERvbmVTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1
ZSkKKyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV9kb25lTW9kZU1l
dGFkYXRhLCBtX2RvbmVQcm9maWxlLCAuZ2V0RG9uZVNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9y
ZURvbmVBbmRKbXBUb0dldFZhbHVlLCBtYWNybyhhLCBiLCBjLCBkKSBlbmQpCiAKIC5nZXREb25l
U2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2dl
dF9kb25lKQpAQCAtMzA4Niw3ICszMDgxLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVy
YXRvcl9uZXh0LCBPcAogICAgICMgUmVsb2FkIHRoZSBuZXh0IHJlc3VsdCB0bXAgc2luY2UgdGhl
IGdldF9ieV9pZCBhYm92ZSBtYXkgaGF2ZSBjbG9iYmVyZWQgdDMuCiAgICAgbG9hZFZhcmlhYmxl
KGdldCwgbV92YWx1ZSwgdDMpCiAgICAgIyBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBp
dGVyYXRvciByZXN1bHQgaXMgYSBjZWxsIGhlcmUgc2luY2Ugd2Ugd2lsbCBoYXZlIHRocm93biBh
biBlcnJvciBiZWZvcmUuCi0gICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck5leHQs
IG1fdmFsdWVNb2RlTWV0YWRhdGEsIG1fdmFsdWVQcm9maWxlLCAuZ2V0VmFsdWVTbG93LCBzaXpl
LCBtZXRhZGF0YSwgc3RvcmVWYWx1ZUFuZERpc3BhdGNoKQorICAgIHBlcmZvcm1HZXRCeUlESGVs
cGVyKE9wSXRlcmF0b3JOZXh0LCBtX3ZhbHVlTW9kZU1ldGFkYXRhLCBtX3ZhbHVlUHJvZmlsZSwg
LmdldFZhbHVlU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlVmFsdWVBbmREaXNwYXRjaCwgbWFj
cm8oYSwgYiwgYywgZCkgZW5kKQogCiAuZ2V0VmFsdWVTbG93OgogICAgIGNhbGxTbG93UGF0aChf
bGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfZ2V0X3ZhbHVlKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIwLDcgKzE0MjAsOCBAQCBlbmQKIAog
bWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlvbikKICAgICBsb2FkcCBDb2Rl
QmxvY2tbY2ZyXSwgdDAKLSAgICBiYWRkaXMgaW5jcmVtZW50LCBDb2RlQmxvY2s6Om1fbGxpbnRF
eGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwg
LmNvbnRpbnVlCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDBd
LCB0MAorICAgIGJhZGRpcyBpbmNyZW1lbnQsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9j
b3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgYWN0aW9uKCkKICAgICAuY29udGludWU6CiBlbmQK
QEAgLTE1MDMsNyArMTUwNCw4IEBAIG1hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29k
ZUJsb2MKICAgICBjb2RlQmxvY2tHZXR0ZXIodDEpCiAgICAgY29kZUJsb2NrU2V0dGVyKHQxKQog
ICAgIGlmIG5vdCAoQ19MT09QIG9yIENfTE9PUF9XSU4pCi0gICAgICAgIGJhZGRpcyA1LCBDb2Rl
QmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6
bV9jb3VudGVyW3QxXSwgLmNvbnRpbnVlCisgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGlu
dEV4ZWN1dGVDb3VudGVyW3QxXSwgdDAKKyAgICAgICAgYmFkZGlzIDUsIEJhc2VsaW5lRXhlY3V0
aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgICAgIGlmIEpTVkFMVUU2
NAogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQpAQCAt
MTYxNywxNCArMTYxOSwxNCBAQCBtYWNybyBmdW5jdGlvbkluaXRpYWxpemF0aW9uKHByb2ZpbGVB
cmdTCiAgICAgIyBvcHRpbWFsIHdheSBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgbW9yZSB0
aGFuIGZpdmUgcmVnaXN0ZXJzIGF2YWlsYWJsZQogICAgICMgZm9yIGFyYml0cmFyeSB1c2UgaW4g
dGhlIGludGVycHJldGVyLgogICAgIGxvYWRpIENvZGVCbG9jazo6bV9udW1QYXJhbWV0ZXJzW3Qx
XSwgdDAKLSAgICBhZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAgIyBVc2UgYWRkaSBiZWNhdXNlIHRo
YXQncyB3aGF0IGhhcyB0aGUgcGVlcGhvbGUKKyAgICBhZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAK
ICAgICBhc3NlcnQobWFjcm8gKG9rKSBicGd0ZXEgdDAsIDAsIG9rIGVuZCkKICAgICBidHB6IHQw
LCAuYXJndW1lbnRQcm9maWxlRG9uZQogICAgIGxvYWRwIENvZGVCbG9jazo6bV9hcmd1bWVudFZh
bHVlUHJvZmlsZXMgKyBGaXhlZFZlY3Rvcjo6bV9zdG9yYWdlICsgUmVmQ291bnRlZEFycmF5Ojpt
X2RhdGFbdDFdLCB0MwogICAgIGJ0cHogdDMsIC5hcmd1bWVudFByb2ZpbGVEb25lICMgV2hlbiB3
ZSBjYW4ndCBKSVQsIHdlIGRvbid0IGFsbG9jYXRlIGFueSBhcmd1bWVudCB2YWx1ZSBwcm9maWxl
cy4KICAgICBtdWxwIHNpemVvZiBWYWx1ZVByb2ZpbGUsIHQwLCB0MiAjIEFhYWFhaGhoaCEgTmVl
ZCBzdHJlbmd0aCByZWR1Y3Rpb24hCiAgICAgbHNoaWZ0cCAzLCB0MCAjIG9mZnNldCBvZiBsYXN0
IEpTVmFsdWUgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4KLSAgICBhZGRwIHQyLCB0MyAjIHBvaW50
ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBpbiBDb2RlQmxvY2s6Om1fYXJndW1lbnRW
YWx1ZVByb2ZpbGVzLgorICAgIGFkZHAgdDIsIHQzICMgcG9pbnRlciB0byBlbmQgb2YgVmFsdWVQ
cm9maWxlIGFycmF5IGluIHRoZSB2YWx1ZSBwcm9maWxlIGFycmF5LgogLmFyZ3VtZW50UHJvZmls
ZUxvb3A6CiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIGxvYWRxIFRoaXNBcmd1bWVudE9mZnNl
dCAtIDggKyBwcm9maWxlQXJnU2tpcCAqIDhbY2ZyLCB0MF0sIHQyCkBAIC0yNTYzLDYgKzI1NjUs
MTcgQEAgbWFjcm8gbm90U3VwcG9ydGVkKCkKICAgICBlbmQKIGVuZAogCisKK21hY3JvIHVwZGF0
ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisg
ICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0
YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQor
ZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUs
IG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKwogLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0
aGUgWDg2XzY0X1dJTiBjb25kaXRpb24gaGVyZSwgc2luY2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFs
cmVhZHkgYmUgZmFsc2Ugb24gV2luZG93cwogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMzcxNgogaWYgV0VCQVNTRU1CTFkgYW5kIG5vdCBYODZfNjRfV0lOCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRl
bnRpZmllci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDEw
IEBAIHB1YmxpYzoKICAgICBDYWNoZWFibGVJZGVudGlmaWVyKCkgPSBkZWZhdWx0OwogCiAgICAg
c3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21DZWxsKEpTQ2VsbCog
aWRlbnRpZmllcik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlm
aWVyJik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBVbmlxdWVkU3RyaW5nSW1wbCop
OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2soQ29kZUJsb2NrVHlwZSosIGNvbnN0IElkZW50aWZpZXImKTsKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZp
ZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBV
bmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmll
ciBjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21SYXdCaXRzKHVp
bnRwdHJfdCByYXdCaXRzKSB7IHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHJhd0JpdHMpOyB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50
aWZpZXImIGkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNo
ZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZp
ZXImIGkpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhjb2RlQmxvY2ssIGkuaW1wbCgpKTsKIH0KIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KENvZGVCbG9jayogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQordGVtcGxhdGUg
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29k
ZUJsb2NrVHlwZSogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIEFT
U0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxvY2stPmhhc0lkZW50aWZpZXIodWlkKSk7CiAg
ICAgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIodWlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNh
Y2hlZFR5cGVzLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJC
dWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUNhY2hlRXJyb3IuaCIKICNpbmNsdWRl
ICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQ
cm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFs
dWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHBy
b2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYg
cHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVB
cmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0Jp
Z0ludCgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25F
eGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODksNiArMjg5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zm
c2V0T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFi
bGUsIG1fcmFyZURhdGEpOyB9CiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZB
c1N0cmluZ0luUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1f
YXNTdHJpbmcpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxv
Y2tGb3JDYWxsKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwg
bV9jb2RlQmxvY2tGb3JDYWxsKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNl
dE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0
aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODUsNiAr
Mzg1LDkgQEAgc3RhdGljIHZvaWQgb3ZlcnJpZGVEZWZhdWx0cygpCiAgICAgICAgIE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSA9IDE1MDA7CiAgICAgICAgIE9w
dGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpID0gMTAwOwogICAgIH0KKworICAg
IC8vIE9PUFMKKyAgICAvL09wdGlvbnM6Om1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hl
Y2twb2ludHNGb3JCYXNlbGluZSgpID0gNDUwOwogfQogCiBzdGF0aWMgdm9pZCBjb3JyZWN0T3B0
aW9ucygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNiBAQCBib29sIGNhblVz
ZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoSW50MzIsIGV2YWxUaHJlc2hvbGRNdWx0
aXBsaWVyLCAxMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwgbWF4aW11bUV2
YWxDYWNoZWFibGVTb3VyY2VMZW5ndGgsIDI1NiwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAot
ICAgIHYoQm9vbCwgcmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzLCBm
YWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJbnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNv
dW50c0JldHdlZW5DaGVja3BvaW50c0ZvckJhc2VsaW5lLCAxMDAwLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
Rm9yVXBwZXJUaWVycywgNTAwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKQEAgLTUzMiw2
ICs1MzEsNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoQm9v
bCwgdXNlRGF0YUlDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VE
YXRhSUNJbk9wdGltaXppbmdKSVQsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJv
b2wsIHVzZURhdGFJQ1NoYXJpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJv
b2wsIHVzZUJhc2VsaW5lSklUQ29kZVNoYXJpbmcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIFwKICAgICAvKiBGZWF0dXJlIEZsYWdzICovXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDkgKzM5NiwxMSBAQCB2b2lkIFNjcmlwdEV4
ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpCiAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlQnl0
ZWNvZGUoKSkKICAgICAgICAgY29kZUJsb2NrLT52YWxpZGF0ZSgpOwogCi0gICAgaWYgKE9wdGlv
bnM6OnVzZUxMSW50KCkpCisgICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2VsaW5l
UmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVD
b2RlKSB7CisgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUo
YmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfSBlbHNlIGlmIChPcHRpb25zOjp1
c2VMTEludCgpKSB7CiAgICAgICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKLSAgICBlbHNlCisg
ICAgfSBlbHNlCiAgICAgICAgIHNldHVwSklUKHZtLCBjb2RlQmxvY2spOwogCiAgICAgaW5zdGFs
bENvZGUodm0sIGNvZGVCbG9jaywgY29kZUJsb2NrLT5jb2RlVHlwZSgpLCBjb2RlQmxvY2stPnNw
ZWNpYWxpemF0aW9uS2luZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21MTEludFRpZXJVcENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVy
V2FybVVwKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9C
QlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JC
QlFPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhy
ZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hv
bGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0
TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAo
KSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hl
ZCgpCkBAIC02NSw5ICs2NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplU29vbigpCiAg
ICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAg
ICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVT
b29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
c2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpLCBu
dWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRG
b3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAgICAgfQogCiAgICAgc3RydWN0IE9TUkVudHJ5RGF0YSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5j
cHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
aWVyVXBDb3VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogVGllclVwQ291bnQ6OlRpZXJVcENvdW50KCkKIHsK
LSAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRl
cldhcm1VcCgpLCBudWxscHRyKTsKKyAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNo
b2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKIH0KIAogVGllclVwQ291bnQ6On5UaWVy
VXBDb3VudCgpID0gZGVmYXVsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UaWVyVXBDb3VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UaWVyVXBDb3VudC5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NS
KCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuIik7Ci0g
ICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFm
dGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6
dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29s
IGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKQEAgLTkwLDE0ICs5MCwxNCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NS
KCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi4iKTsK
LSAgICAgICAgc2V0TmV3VGhyZXNob2xkKDAsIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJl
c2hvbGQoMCk7CiAgICAgfQogCiAgICAgdm9pZCBvcHRpbWl6ZVNvb24odWludDMyX3QgZnVuY3Rp
b25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgc29vbi4iKTsKICAgICAgICAgLy8g
RklYTUU6IE5lZWQgYWRqdXN0bWVudCBvbmNlIHdlIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0
IHdhc20gZnVuY3Rpb25zLgotICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNo
b2xkRm9yT01HT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hv
bGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAogICAg
IHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNiArNjYsMjAgQEAgcHVibGljOgogICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRy
OwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQmFnJiBvcGVyYXRvcj0o
QmFnPFQsIFU+JiYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodW53cmFwcGVkSGVhZCgpID09
IG90aGVyLnVud3JhcHBlZEhlYWQoKSkKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKworICAg
ICAgICBCYWcgZGVzdHJveTsKKyAgICAgICAgZGVzdHJveS5tX2hlYWQgPSB1bndyYXBwZWRIZWFk
KCk7CisgICAgICAgIG1faGVhZCA9IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgb3Ro
ZXIubV9oZWFkID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCiAg
ICAgfkJhZygpCiAgICAgewogICAgICAgICBjbGVhcigpOwpJbmRleDogVG9vbHMvU2NyaXB0cy9y
dW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mt
c3RyZXNzLXRlc3RzCShyZXZpc2lvbiAyODI2NzUpCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mt
c3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC03NzYsMTcgKzc3NiwxOCBAQCBlbmQKIAog
IyBGSVhNRTogbmVlZCB0byBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxODcwMyB0byBlbmFibGUgdGhpcyBvbiBMaW51eC9NSVBTLgogZGVmIHJ1bkJ5dGVjb2Rl
Q2FjaGVJbXBsKG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucywgKmFkZGl0aW9uYWxFbnYpCi0g
ICAgaWYgKCRob3N0T1MgPT0gImRhcndpbiIpCi0gICAgICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRl
Y29kZS1jYWNoZSIKLSAgICBlbHNpZiAoJGhvc3RPUyA9PSAibGludXgiICYmICRhcmNoaXRlY3R1
cmUgIT0gIm1pcHMiKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhY
WFgiCi0gICAgZWxzZQotICAgICAgICBza2lwCi0gICAgICAgIHJldHVybgotICAgIGVuZAorICAg
ICMgT09QUworICAgICNpZiAoJGhvc3RPUyA9PSAiZGFyd2luIikKKyAgICAjICAgIGZpbGVUZW1w
bGF0ZSA9ICJieXRlY29kZS1jYWNoZSIKKyAgICAjZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAm
JiAkYXJjaGl0ZWN0dXJlICE9ICJtaXBzIikKKyAgICAjICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRl
Y29kZS1jYWNoZVhYWFhYWCIKKyAgICAjZWxzZQorICAgICMgICAgc2tpcAorICAgICMgICAgcmV0
dXJuCisgICAgI2VuZAogCi0gICAgb3B0aW9ucyA9IEJBU0VfT1BUSU9OUyArIEZUTF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0
aW9ucwotICAgIGFkZFJ1bkNvbW1hbmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9I
ZWxwZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBs
YXRlLnRvX3MsICp2bUNvbW1hbmQsICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRP
dXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQorICAgICNv
cHRpb25zID0gQkFTRV9PUFRJT05TICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMgKyAkdGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25zCisgICAgI2FkZFJ1bkNvbW1h
bmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxwZXJzICsgImJ5dGVjb2RlLWNh
Y2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRlLnRvX3MsICp2bUNvbW1hbmQs
ICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVF
cnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQogZW5kCiAKIGRlZiBydW5CeXRlY29kZUNhY2hl
KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438736</attachid>
            <date>2021-09-20 15:00:46 -0700</date>
            <delta_ts>2021-09-20 16:08:46 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>496202</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsMTAg
QEAgb3BfZ3JvdXAgOlByb2ZpbGVkQmluYXJ5T3AsCiAgICAgICAgIGxoczogVmlydHVhbFJlZ2lz
dGVyLAogICAgICAgICByaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZFR5cGVz
OiBPcGVyYW5kVHlwZXMsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxl
CisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
X2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTEsOSArMzUyLDEwIEBAIG9wX2dy
b3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgIF0sCiAgICAgYXJnczogewogICAgICAg
ICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg0LDkgKzM4NiwxMCBAQCBvcCA6bmVnYXRlLAog
ICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZDogVmlydHVhbFJl
Z2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLAorICAgICAgICBwcm9maWxl
SW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQ
cm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFy
aXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApAQCAtNDc4LDYgKzQ4MSw3IEBAIG9wIDpn
ZXRfYnlfaWQsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgbW9kZU1ldGFkYXRhOiBHZXRCeUlk
TW9kZU1ldGFkYXRhLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgIH0KIAogb3AgOmdldF9ieV9pZF93aXRoX3Ro
aXMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVj
a3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBAIFZhbHVlUHJvZmlsZSog
dmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJuICZtZXRhZGF0YS5tX3By
b2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK3VpbnRwdHJfdCB2YWx1
ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4KQoreworICAgIFVOVVNF
RF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9w
Y29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50
SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJu
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRvclByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZOZXh0UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRl
Y29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3JfbmV4dCkgeworICAgICAgICBzd2l0Y2ggKGNo
ZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4
dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZSgp
OworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXREb25lOiByZXR1cm4gQnl0ZWNvZGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkRvbmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck5leHQ6OmdldFZhbHVlOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlZhbHVl
UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfSBlbHNlIAorICAgICAgICByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZlByb2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVN
ZXRhZGF0YT4KIGJvb2wgaGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFk
YXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhW
TSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQot
ewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4o
bV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRN
YXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
dmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5r
SW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSAm
JiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwogdm9pZCBDYWxs
TGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVTcGVjaWZpY0Nh
bGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5OSwxMSBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9mcmFtZVNodWZm
bGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRVc2VzRGF0YUlD
cyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwotICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQ
Uik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BS
OwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9m
YXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZh
c3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJQyA9PSBVc2VE
YXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVn
aXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxM
aW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcgQEAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAgZ29Qb2x5bW9y
cGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVNYXNrKSk7CiAg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
aXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBw
cmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMubGluaygmaml0
KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBwcmVwLgogICAg
ICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQ
Uiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7
CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGNh
bGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
byk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICB1LmNv
ZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMu
bV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMubV9jYWxs
ZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxs
ZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEzICszNDQsMzQgQEAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQykK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIG51
bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBpZiAoaXNEYXRh
SUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVn
OjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRh
SUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0
YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKLSAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAgc2V0VXNlc0Rh
dGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywg
aml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlzVGFpbENhbGwo
KSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4g
ZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CiB9CiAKIHZv
aWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkK
QEAgLTM2OSwxNyArMzgxLDMyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0m
IHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIs
IG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQog
Cit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUoY2FsbExpbmtJ
bmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBK
U0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMo
Vk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgbV9jb2RlT3JpZ2lu
ID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBz
ZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAg
bV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247CisgICAg
aWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpIHsKKyAgICAgICAgLy8g
RklYTUU6IEl0J2QgYmUgbmljZSBpZiB0aGlzIGp1c3Qgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBz
dHJ1Y3R1cmUuCisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZy
YW1lU2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsK
KyAgICB9CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlD
Lm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxh
dGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpO
byk7CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAg
dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBq
aXQubGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0
UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQ
YXRoU3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwg
dGhpcyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1
bnNpZ25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2Vk
Q2FsbExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2Vu
dGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgewor
ICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2Fs
bCwKICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAg
ICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxp
emVEYXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsg
cmV0dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1
aW50OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRl
OgotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
QywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURf
UkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRo
SW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVi
bGljOgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQ
YXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVj
dEZhc3RQYXRoKENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWls
Q2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBz
dGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJv
b2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNl
RGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsy
NDksNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAot
ICAgIEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9z
bG93U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsK
ICAgICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZv
LCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJf
dCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlv
blR5cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9j
YXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxv
Y2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
bV9zbG93UGF0aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5h
bFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAK
QEAgLTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29k
ZU9yaQogICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3Qg
VW5saW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsg
Ly8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxs
eSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxU
eXBlOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlv
bjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZs
ZURhdGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsOCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlk
ZXIoKSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVD
b3VudGVyKCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9
CkBAIC0zMTgsNyArMzIwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgQwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIAogICAgIG9wdGltaXplQWZ0ZXJX
YXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOworICAgIC8vaml0QWZ0ZXJXYXJtVXAoKTsK
IAogICAgIGlmIChvdGhlci5tX3JhcmVEYXRhKSB7CiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZO
ZWNlc3NhcnkoKTsKQEAgLTM1OSw3ICszNjEsOSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYg
dm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlkZXIoKSk7CiAgICAg
c2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKLSAg
ICAKKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxpbnRF
eGVjdXRlQ291bnRlcigpOworCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7
CiB9CiAKQEAgLTM3MCwxMCArMzc0LDEzIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwg
U3RydWN0dXJlKiAKIC8vIHdlIGNhbid0IGdlbmVyYXRlIGR1cmluZyB1bmxpbmtlZCBieXRlY29k
ZSBnZW5lcmF0aW9uLiBUaGlzIHByb2Nlc3MgaXMgbm90IGFsbG93ZWQgdG8gZ2VuZXJhdGUgY29u
dHJvbAogLy8gZmxvdyBvciBpbnRyb2R1Y2UgbmV3IGxvY2Fscy4gVGhlIHJlYXNvbiBmb3IgdGhp
cyBpcyB3ZSByZWx5IG9uIGxpdmVuZXNzIGFuYWx5c2lzIHRvIGJlIHRoZSBzYW1lIGZvcgogLy8g
YWxsIHRoZSBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLiBXZSByZWx5IG9uIHRo
aXMgZmFjdCBieSBjYWNoaW5nIHRoZSBsaXZlbmVzcyBhbmFseXNpcwotLy8gaW5zaWRlIFVubGlu
a2VkQ29kZUJsb2NrLgorLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLiBBbHNvLCBCYXNlbGlu
ZSBKSVQgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtl
ZENvZGVCbG9jaywKKy8vIHNvIHRoZSBieXRlY29kZSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBiZXR3
ZWVuIENvZGVCbG9ja3Mgc2hhcmluZyBhbiBVbmxpbmtlZENvZGVCbG9jay4KIGJvb2wgQ29kZUJs
b2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAogICAgIEpTU2NvcGUq
IHNjb3BlKQogeworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsgLy8gV2UgbmVlZCB0byBz
ZXQgdXAgb3VyIHZhbHVlIHByb2ZpbGUgcG9pbnRlcnMuCisKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgZmluaXNoQ3JlYXRpb25Db21tb24odm0pOwogCkBAIC00NzEsNiArNDc4
LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAg
YnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRD
b2RlLT5iaW5hcnlBcml0aFByb2ZpbGUoYnl0ZWNvZGUubV9wcm9maWxlSW5kZXgpOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorI2RlZmluZSBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklM
RShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURB
VEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2Vk
Q29kZS0+dW5hcnlBcml0aFByb2ZpbGUoYnl0ZWNvZGUubV9wcm9maWxlSW5kZXgpOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0
cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMsMTQgKzU1MywxNCBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQ
cm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTkso
T3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAg
IExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcElu
YykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BN
dWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAg
ICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktf
V0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5B
UllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2OSw3ICs3ODks
NyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgLy8gcmVs
eSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRlZCB0
byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUgYWNj
dXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0ZXJXYXJt
VXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOworICAgIC8vaml0QWZ0ZXJXYXJtVXAoKTsKIAog
ICAgIC8vIElmIHRoZSBjb25jdXJyZW50IHRocmVhZCB3aWxsIHdhbnQgdGhlIGNvZGUgYmxvY2sn
cyBoYXNoLCB0aGVuIGNvbXB1dGUgaXQgaGVyZQogICAgIC8vIHN5bmNocm9ub3VzbHkuCkBAIC03
OTMsNiArODEzLDc3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbkNvbW1vbihWTSYK
ICAgICBtX293bmVyRWRnZS5zZXQodm0sIHRoaXMsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OmNyZWF0ZSh2bSwgdGhpcykpOwogfQogCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5r
ZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRK
SVRDb2RlKGppdENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYg
aml0Q29kZU1hcCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAg
SGFuZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAg
Ly8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVy
Lm5hdGl2ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdl
dCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAg
ICAgICAgYXV0byYgaml0RGF0YSA9IGVuc3VyZUpJVERhdGEobG9ja2VyKTsKKworICAgICAgICBS
RUxFQVNFX0FTU0VSVChqaXREYXRhLm1faml0Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CisgICAg
ICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29k
ZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0
byBlbnRyeSA9IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOworICAgICAgICAgICAgc3dp
dGNoIChlbnRyeS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6R2xvYmFsT2JqZWN0OgorICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBv
b2xbaV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAg
ICAgICAgICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8g
PSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRDYWxsTGlua0luZm8qPihlbnRyeS5wYXlsb2FkKTsKKyAg
ICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxs
TGlua0luZm9zLmFkZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5k
ZXgpKTsKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBkb24ndCBoYXJkY29kZSB0aGVzZSByZWdp
c3RlcnMgbGlrZSB0aGlzLgorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+aW5pdGlhbGl6
ZURhdGFJQyh2bSgpLCB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUklu
Zm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ld
ID0gY2FsbExpbmtJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
OiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRT
dHViSW5mbyA9ICpzdGF0aWNfY2FzdDxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKj4oZW50cnku
cGF5bG9hZCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
aml0RGF0YS5tX3N0dWJJbmZvcy5hZGQodW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlLCBDb2Rl
T3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT5pbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8odGhpcywg
dW5saW5rZWRTdHViSW5mbyk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50
UG9vbFtpXSA9IHN0dWJJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbDog
eworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oZW50cnkucGF5bG9hZCk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50
UG9vbFtpXSA9IGZ1bmN0aW9uRGVjbChpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVu
Y3Rpb25FeHByOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihlbnRyeS5wYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1f
aml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25FeHByKGluZGV4KTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICBj
YXNlIE1vZHVsZUNvZGU6CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgbV9zaG91bGRBbHdh
eXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGdW5jdGlvbkNv
ZGU6CisgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVj
YXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qg
b3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGlu
ZWQgJj0gY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCgpKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVu
Y3Rpb24odGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghdW5saW5rZWRD
b2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSAmJiBPcHRpb25zOjp1c2VCYXNlbGlu
ZUpJVENvZGVTaGFyaW5nKCkpCisgICAgICAgIHVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5r
ZWRCYXNlbGluZUNvZGUgPSBXVEZNb3ZlKGppdENvZGUpOworfQorCiBDb2RlQmxvY2s6On5Db2Rl
QmxvY2soKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtMTUzNCwzOSArMTYyNSw0MCBAQCB2
b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAKICAgICB1cGRhdGVBbGxQ
cmVkaWN0aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29sIGlzRWxpZ2libGVGb3JM
TEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwotICAgIG1faXNF
bGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8gSWYgQmFzZWxpbmVKSVQg
Y29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0
cywgd2UgYXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJl
aW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAgICBpZiAoT3B0aW9uczo6
dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4
ZWN1dGluZyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxv
Y2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wdGltaXpl
ZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAgICAgICAgICAgICAgIGlmIChpc0Vs
aWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2Rl
ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhp
cyk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRU
eXBlOjpJbnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7
IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5m
byYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURh
dGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRv
JiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0
KS5wdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxp
bmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExM
SW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMo
KTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0
IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhy
ZWFkcwotICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhl
eSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQg
Ynl0ZWNvZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEg
c3RydWN0dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgotICAgICAgICAgICAg
ICAgICAgICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYKKy8vIE9PUFM6IHJlY29uY2lsZSB0
aGlzCisvLyNpZiBFTkFCTEUoSklUKQorLy8gICAgYm9vbCBpc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUgPSBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZTsKKy8vICAgIG1faXNFbGlnaWJs
ZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7CisvLyAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2Rl
IGlzIG5vdCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3
ZSBhdHRlbXB0CisvLyAgICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFuZCByZWlu
c3RhbGwgTExJbnQgY29kZSB0byBzYXZlIEpJVCBtZW1vcnkuCisvLyAgICBpZiAoT3B0aW9uczo6
dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4
ZWN1dGluZyh0aGlzKSkgeworLy8gICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVC
bG9jayA9IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKy8vICAgICAgICAgICAgaWYgKCFvcHRp
bWl6ZWRDb2RlQmxvY2stPm1fb3NyRXhpdENvdW50ZXIpIHsKKy8vICAgICAgICAgICAgICAgIGlm
IChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKKy8vICAgICAgICAgICAgICAgICAgICBt
X2ppdENvZGUgPSBudWxscHRyOworLy8gICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRy
eXBvaW50KHRoaXMpOworLy8gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKKy8vCisvLyAgICAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNl
cHRpb25IYW5kbGVycygpOyBpKyspIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4
Y2VwdGlvbkhhbmRsZXIoaSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZv
JiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKKy8vICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQo
dW5saW5rZWRIYW5kbGVyLnRhcmdldCkucHRyKCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAg
IGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0
aCgpKS5jb2RlKCkpKTsKKy8vICAgICAgICAgICAgICAgICAgICB9CisvLworLy8gICAgICAgICAg
ICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKKy8vCisvLyAgICAgICAgICAgICAgICAg
ICAgLy8gSXQncyBzYWZlIHRvIGNsZWFyIHRoZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkgYWxsIGNvbXBpbGVyIHRocmVhZHMKKy8vICAgICAgICAgICAgICAg
ICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBi
ZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKKy8vICAgICAgICAg
ICAgICAgICAgICAvLyBwYXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcg
aW50byB0aGUgdmFyaW91cyAqaW5mb3MuCisvLyAgICAgICAgICAgICAgICAgICAgcmVzZXRKSVRE
YXRhKCk7CisvLyAgICAgICAgICAgICAgICB9IGVsc2UKKy8vICAgICAgICAgICAgICAgICAgICBt
X2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IHRydWU7CisvLyAgICAgICAgICAgIH0KKy8v
ICAgICAgICB9CisvLyAgICB9CisvLworLy8jZW5kaWYKICAgICAKICAgICBpZiAoSklUQ29kZTo6
Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxp
bmVDYWNoZXMoKTsKQEAgLTE1OTQsNyArMTY4Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1
bms6Ci0gICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOwor
ICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNvdW50KCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAg
ICAgICAgIGNvdW50ID0gbV9qaXRFeGVjdXRlQ291bnRlci5jb3VudCgpOwpAQCAtMTY3NSwzMCAr
MTc2Nyw2IEBAIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmYKICAgICBy
ZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3R1YkluZm9zLmFkZChhY2Nlc3NUeXBlLCBj
b2RlT3JpZ2luKTsKIH0KIAotSklUQWRkSUMqIENvZGVCbG9jazo6YWRkSklUQWRkSUMoQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9hZGRJQ3Mu
YWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVE11bElDKiBDb2RlQmxvY2s6OmFkZEpJVE11bElD
KEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1f
bXVsSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVRTdWJJQyogQ29kZUJsb2NrOjphZGRK
SVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9j
a2VyKS5tX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUTmVnSUMqIENvZGVCbG9j
azo6YWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQogU3RydWN0dXJlU3R1
YkluZm8qIENvZGVCbG9jazo6ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsK
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CkBAIC0zMTMzLDcgKzMyMDEs
NyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFC
TEUoSklUKQogICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBK
SVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJh
bWVSZWdpc3RlckNvdW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMzNDksMTMgKzM0MTcsMTMg
QEAgQmluYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRj
aCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZw
Yy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJl
dHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAg
Y2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRo
aXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMzM2NywxMSArMzQzNSwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29k
ZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAg
IGNhc2Ugb3BfbmVnYXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0
ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAg
ICAgICAgcmV0dXJuICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0
aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVj
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFz
PE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM1MjEsMjggKzM1ODksMTkgQEAgc3RkOjpvcHRpb25h
bDxCeXRlY29kZUluZGV4PiBDb2RlQmxvY2s6OgogICAgIHJldHVybiBieXRlY29kZUluZGV4Owog
fQogCi1pbnQzMl90IENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xk
KQotewotICAgIHN3aXRjaCAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUoKSkgewot
ICAgIGNhc2UgVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU6Ci0gICAgICAgIHJldHVybiB0aHJlc2hv
bGQ7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6RmFsc2U6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQg
KiA0OwotICAgIGNhc2UgVHJpU3RhdGU6OlRydWU6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQg
LyAyOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gdGhyZXNo
b2xkOwotfQorLy92b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQorLy97CisvLyAgICBt
X2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0
aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSksIHRoaXMpOworLy99CiAKLXZvaWQg
Q29kZUJsb2NrOjpqaXRBZnRlcldhcm1VcCgpCit2b2lkIENvZGVCbG9jazo6aml0U29vbigpCiB7
Ci0gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JK
SVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSksIHRoaXMpOworICAgIG1f
bGxpbnRFeGVjdXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKHVubGlua2VkQ29kZUJsb2NrKCkt
PnRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRTb29uKCkpLCB0aGlzKTsK
IH0KIAotdm9pZCBDb2RlQmxvY2s6OmppdFNvb24oKQordm9pZCBDb2RlQmxvY2s6OmppdE5leHRJ
bnZvY2F0aW9uKCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xk
KHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRTb29uKCkpLCB0aGlzKTsK
KyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCgwLCB0aGlzKTsKIH0K
IAogYm9vbCBDb2RlQmxvY2s6Omhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3QK
QEAgLTM1ODgsMjggKzM2NDcsOCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRzKCkK
ICAgICBkb3VibGUgbnVtU3VicyA9IDAuMDsKICAgICBkb3VibGUgdG90YWxTdWJTaXplID0gMC4w
OwogCi0gICAgYXV0byBjb3VudElDcyA9IFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsKLSAg
ICAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBjb2RlQmxvY2stPm1faml0RGF0YS5nZXQoKSkgewot
ICAgICAgICAgICAgZm9yIChKSVRBZGRJQyogYWRkSUMgOiBqaXREYXRhLT5tX2FkZElDcykgewot
ICAgICAgICAgICAgICAgIG51bUFkZHMrKzsKLSAgICAgICAgICAgICAgICB0b3RhbEFkZFNpemUg
Kz0gYWRkSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAo
SklUTXVsSUMqIG11bElDIDogaml0RGF0YS0+bV9tdWxJQ3MpIHsKLSAgICAgICAgICAgICAgICBu
dW1NdWxzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxNdWxTaXplICs9IG11bElDLT5jb2RlU2l6
ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJVE5lZ0lDKiBuZWdJQyA6
IGppdERhdGEtPm1fbmVnSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtTmVncysrOwotICAgICAg
ICAgICAgICAgIHRvdGFsTmVnU2l6ZSArPSBuZWdJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZm9yIChKSVRTdWJJQyogc3ViSUMgOiBqaXREYXRhLT5tX3N1YklD
cykgewotICAgICAgICAgICAgICAgIG51bVN1YnMrKzsKLSAgICAgICAgICAgICAgICB0b3RhbFN1
YlNpemUgKz0gc3ViSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAg
ICBhdXRvIGNvdW50SUNzID0gWyZdIChDb2RlQmxvY2sqKSB7CisgICAgICAgIC8vIEZJWE1FOiBX
ZSBuZWVkIHRvIHJlLWltcGxlbWVudCB0aGlzIHVzaW5nIEpJVENvZGUuCiAgICAgfTsKICAgICBo
ZWFwKCktPmZvckVhY2hDb2RlQmxvY2soY291bnRJQ3MpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk3LDYgKzk3LDcgQEAgY2xhc3MgTWV0YWRhdGFUYWJsZTsKIGNsYXNzIFBDVG9Db2RlT3JpZ2lu
TWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5m
bzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEpOwogCkBAIC0xNTgsNyArMTU5LDkgQEAgcHVi
bGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBt
X21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFy
YW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXA7IH0KIApAQCAtMTY3LDcgKzE3MCw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1W
YXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygp
IGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVja3BvaW50cygpICogbWF4TnVt
Q2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJz
KCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywg
bV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9
CkBAIC0yMzIsMTYgKzIzNCw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJh
cEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMo
KTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0g
ICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXph
dGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGlu
IHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgp
ID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2OCwyMyArMjYwLDIyIEBAIHB1
YmxpYzoKICNpZiBFTkFCTEUoSklUKQogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RG
X01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHVi
SW5mb3M7Ci0gICAgICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7Ci0gICAgICAgIEJhZzxKSVRN
dWxJQz4gbV9tdWxJQ3M7Ci0gICAgICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7Ci0gICAgICAg
IEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7CiAgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2Fs
bExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFj
a2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICAg
ICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIFBhY2tlZFJhd1NlbnRp
bmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7
Ci0gICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVz
OwotICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlczsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3Bj
VG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7
IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lz
dGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRW
ZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERh
dGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVu
bGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEm
IGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewog
ICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkpCkBAIC0yOTMsMjIgKzI4NCw3IEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJik7CiAKLSAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9m
aWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwot
ICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVFN1
YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLQotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3Rk
Ojppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAg
IEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVy
biBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2Vu
ZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUTXVsSUMqIGFk
ZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElD
KHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFt
ZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5l
Z0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5
QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQot
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2
YWx1ZT46OnR5cGU+Ci0gICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUq
IHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX2ppdERhdGEpOyB9CiAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8o
QWNjZXNzVHlwZSwgQ29kZU9yaWdpbik7CiAKQEAgLTMyMiwxNiArMjk4LDcgQEAgcHVibGljOgog
ICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0
IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5
dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFw
KEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRD
b2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1h
cCYgaml0Q29kZU1hcCgpCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2Rl
TWFwOwotICAgIH0KKyAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKICAgICB2
b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1h
cD4mJik7CiAgICAgc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwpA
QCAtNDcyLDEwICs0MzksMTIgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5hbWVGb3JSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFyZ3Vt
ZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1f
YXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRW
YWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQcm9m
aWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykgfHwg
IU9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRWYWx1ZVByb2Zp
bGVzLnNpemUoKTsKKyAgICAgICAgCiAgICAgfQogCiAgICAgVmFsdWVQcm9maWxlJiB2YWx1ZVBy
b2ZpbGVGb3JBcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudEluZGV4KQpAQCAtNTcxLDYgKzU0MCw3
IEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVh
bFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9D
b25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKHJlZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKGluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFu
dHNWZWN0b3JCdWZmZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2Nv
bnN0YW50UmVnaXN0ZXJzKSArIGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVt
b3J5T2Zmc2V0KCk7IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGlu
dCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGlu
dCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgp
OyB9CkBAIC01OTUsMjIgKzU2NSwyMiBAQCBwdWJsaWM6CiAgICAgLy8gSnVtcCBUYWJsZXMKIAog
I2lmIEVOQUJMRShKSVQpCi0gICAgU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFibGUoaW50
IHRhYmxlSW5kZXgpCisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJs
ZShpbnQgdGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3
aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25z
dGFudFBvb2woKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKLSAg
ICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBv
b2wuZGF0YSgpOwogICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dp
dGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIHVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBt
X3VubGlua2VkQ29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIAot
I2lmIEVOQUJMRShKSVQpCi0gICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFi
bGUoaW50IHRhYmxlSW5kZXgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERh
dGEpOwotICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNb
dGFibGVJbmRleF07Ci0gICAgfQorI2lmIEVOQUJMRShERkdfSklUKQorICAgIFN0cmluZ0p1bXBU
YWJsZSYgZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICBTaW1w
bGVKdW1wVGFibGUmIGRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CiAjZW5kaWYK
KwogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlu
a2VkQ29kZS0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIApA
QCAtNjMyLDIxICs2MDIsMjAgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNo
b2xkUmVhY2hlZCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVy
LmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOworICAgICAgICByZXR1cm4gbV9s
bGludEV4ZWN1dGVDb3VudGVyLT5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsK
ICAgICB9CiAKICAgICB2b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCiAgICAgewotICAgICAgICBt
X2xsaW50RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICAgICAgbV9sbGlu
dEV4ZWN1dGVDb3VudGVyLT5kZWZlckluZGVmaW5pdGVseSgpOwogICAgIH0KIAotICAgIGludDMy
X3QgdGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVy
V2FybVVwKCk7CiAgICAgdm9pZCBqaXRTb29uKCk7CisgICAgdm9pZCBqaXROZXh0SW52b2NhdGlv
bigpOwogCiAgICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVD
b3VudGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50
ZXI7CisgICAgICAgIHJldHVybiAqbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIH0KIAogICAg
IHR5cGVkZWYgSGFzaE1hcDxzdGQ6OnR1cGxlPFN0cnVjdHVyZUlELCB1bnNpZ25lZD4sIEZpeGVk
VmVjdG9yPExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0
cnVjdHVyZVdhdGNocG9pbnRNYXA7CkBAIC03OTcsNiArNzY2LDcgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVl
c3RzOyB9CiAgICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9k
ZWJ1Z2dlclJlcXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2Vy
UmVxdWVzdHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2Vy
UmVxdWVzdHMpOyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtw
b2ludHMpOwogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50
cykKQEAgLTgzOCw2ICs4MDgsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNM
b2NrIG1fbG9jazsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBh
IGJpdGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNp
ZiBFTkFCTEUoSklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAv
LyBERkc6OkNhcGFiaWxpdHlMZXZlbApAQCAtOTA3LDExICs4NzgsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX21ldGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KENvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKTsgfQogCi0gICAgYm9vbCBsb29w
SGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCi0gICAgewotICAgICAgICAv
LyBTb21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxvb3Bz
IHRoZXkgcnVuLgotICAgICAgICByZXR1cm4gIW1fdW5saW5rZWRDb2RlLT5pc0J1aWx0aW5GdW5j
dGlvbigpOwotICAgIH0KKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vh
cmx5UmV0dXJuKCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmxvb3BIaW50c0FyZUVsaWdpYmxl
Rm9yRnV6emluZ0Vhcmx5UmV0dXJuKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluYWxp
emVMTEludElubGluZUNhY2hlcygpOwpAQCAtMTAxMCw3ICs5NzcsOSBAQCBwcml2YXRlOgogICAg
IFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwogICAg
IFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7CiAjaWYgRU5BQkxFKEpJVCkKK3B1YmxpYzoKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SklURGF0YT4gbV9qaXREYXRhOworcHJpdmF0ZToKICNlbmRpZgog
I2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBj
b2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRoZSBwcm9maWxlZCBjb2RlIGJsb2NrCkBAIC0xMDI5
LDcgKzk5OCw3IEBAIHByaXZhdGU6CiAKICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2Fs
dGVybmF0aXZlOwogICAgIAotICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXI7CisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyKiBtX2xsaW50RXhlY3V0
ZUNvdW50ZXIgeyBudWxscHRyIH07CiAKICAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9q
aXRFeGVjdXRlQ291bnRlcjsKICAgICB1aW50MzJfdCBtX29zckV4aXRDb3VudGVyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSwxMCBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVj
b2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0pJVENv
ZGUuaCIKICNpbmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxpbmVzLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtNDAsOSArNDIsNyBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVl
UHJvZmlsZShjb25zCiAgICAgaWYgKG1fbWV0YWRhdGEpIHsKICNkZWZpbmUgVklTSVQoX19vcCkg
XAogICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEp
IHsgZnVuYyhtZXRhZGF0YS5tX3Byb2ZpbGUsIGZhbHNlKTsgfSk7Ci0KICAgICAgICAgRk9SX0VB
Q0hfT1BDT0RFX1dJVEhfVkFMVUVfUFJPRklMRShWSVNJVCkKLQogI3VuZGVmIFZJU0lUCiAKICAg
ICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEl0ZXJhdG9yT3Blbj4oWyZdIChhdXRvJiBtZXRh
ZGF0YSkgeyAKQEAgLTU3LDcgKzU3LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVBy
b2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFs
c2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCi0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KQEAgLTk5LDQgKzk4LDM4IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoTExJbnRDYWxs
TGlua0luZm8KICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoSklUKQorQUxXQVlTX0lOTElORSBjb25z
dCBKSVRDb2RlTWFwJiBDb2RlQmxvY2s6OmppdENvZGVNYXAoKQoreworICAgIEFTU0VSVChqaXRU
eXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxC
YXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVNYXA7Cit9CisKK0FM
V0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5lU3dpdGNoSnVt
cFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUq
PihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisK
K0FMV0FZU19JTkxJTkUgU3RyaW5nSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5lU3RyaW5n
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGlu
ZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShERkdfSklUKQorQUxXQVlTX0lOTElO
RSBTaW1wbGVKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3dpdGNoSnVtcFRhYmxlKGludCB0YWJs
ZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9z
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1
bXBUYWJsZSYgQ29kZUJsb2NrOjpkZmdTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5k
ZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxERkc6OkpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAgcHVibGljOgogICAgIHN0YXRpYyBFeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwKENvZGVCbG9jayogY29kZUJsb2NrKTsKICAgICAK
ICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcEFuZEFjdGl2YXRlKENv
ZGVCbG9jayogY29kZUJsb2NrKTsKKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2Rl
QmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZSwgbV9jb2RlQmxvY2spOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhlY3V0aW9uQ291bnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCBib29sIEV4ZWN1dGlvbkNvdW50ZXI8Y291bnRpbmdW
YXJpYW50Pjo6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHRocmVzaG9sZCA9
IGNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2NrID8gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSA6
IG51bGxwdHIsIHRocmVzaG9sZCk7CisgICAgdGhyZXNob2xkID0gY2xpcHBlZFRocmVzaG9sZCh0
aHJlc2hvbGQpOwogICAgIAogICAgIG1fY291bnRlciA9IHN0YXRpY19jYXN0PGludDMyX3Q+KC10
aHJlc2hvbGQpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JjZVNsb3dQYXRoQ29uY3Vy
cmVudGx5KCk7IC8vIElmIHlvdSB1c2UgdGhpcywgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRT
ZXQoKSBtYXkgc3RpbGwgcmV0dXJuIGZhbHNlLgogICAgIGJvb2wgY2hlY2tJZlRocmVzaG9sZENy
b3NzZWRBbmRTZXQoQ29kZUJsb2NrKik7CiAgICAgYm9vbCBoYXNDcm9zc2VkVGhyZXNob2xkKCkg
Y29uc3QgeyByZXR1cm4gbV9jb3VudGVyID49IDA7IH0KLSAgICB2b2lkIHNldE5ld1RocmVzaG9s
ZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXROZXdUaHJlc2hv
bGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayogPSBudWxscHRyKTsKICAgICB2b2lkIGRl
ZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgZG91YmxlIGNvdW50KCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291bnQpICsgbV9jb3VudGVyOyB9CiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkBAIC04NiwxMyArODYsOSBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIFQgY2xpcHBlZFRo
cmVzaG9sZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUIHRocmVzaG9sZCkKKyAgICBz
dGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKFQgdGhyZXNob2xkKQogICAgIHsKLSAgICAgICAgaW50
MzJfdCBtYXhUaHJlc2hvbGQ7Ci0gICAgICAgIGlmIChPcHRpb25zOjpyYW5kb21pemVFeGVjdXRp
b25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKSAmJiBnbG9iYWxPYmplY3QpCi0gICAgICAgICAg
ICBtYXhUaHJlc2hvbGQgPSBnbG9iYWxPYmplY3QtPndlYWtSYW5kb21JbnRlZ2VyKCkgJSBtYXhp
bXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1heFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hl
Y2twb2ludHMoKTsKKyAgICAgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0
aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CiAgICAgICAgIGlmICh0aHJlc2hvbGQgPiBt
YXhUaHJlc2hvbGQpCiAgICAgICAgICAgICB0aHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7CiAgICAg
ICAgIHJldHVybiB0aHJlc2hvbGQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlJZE1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB7CiBzdGF0
aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQpID09IDEyKTsKIAogc3Ry
dWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCB7CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlk
TW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmlsZSk7IH0KICAgICBBcnJheVByb2Zp
bGUgYXJyYXlQcm9maWxlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0
YWRhdGFBcnJheUxlbmd0aCkgPT0gMTIpOwpAQCAtODgsNiArODksNyBAQCB1bmlvbiBHZXRCeUlk
TW9kZU1ldGFkYXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUgbW9kZTsKICAgICAgICAgdWludDhf
dCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBtdXN0IGJlIHplcm8gd2hlbiB3ZSB1
c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
TW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhLCBtb2Rl
KTsgfQogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0IGRlZmF1bHRNb2RlOwogICAgIEdl
dEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0
YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjEzLDcgKzIxMyw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9y
U3R1YkkKICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAg
ICAKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6IHsKLSAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgp
OworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZtKCkpOwogICAgICAgICBpZiAoc3RydWN0dXJl
LT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0
dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlm
aWVyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0
dXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5CeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBJbkJ5
U3RhdHVzIEluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mCiAgICAgICAgIHJldHVybiBJbkJ5
U3RhdHVzKE5vSW5mb3JtYXRpb24pOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6
IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0
dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKTsKICAgICAgICAgaWYgKHN0cnVj
dHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKICAgICAgICAgICAg
IHJldHVybiBJbkJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTEgKzE3NiwxNiBAQCBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBib29sIGxpbmtDb2RlSW5saW5lCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQor
Ym9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25z
dGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxv
Y2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIFRoZXNlIGR5bmFtaWMgc2xvdHMgZ2V0IGZp
bGxlZCBpbi4gTm90aGluZyBlbHNlIHRvIGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIAogICAgIEdQUlJlZyBiYXNlID0gc3R1Yklu
Zm8uYmFzZUdQUjsKQEAgLTIzMywyMyArMjM4LDMxIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJv
b2wgaGFzRnJlZVJlZ2lzdGUKICAgICByZXR1cm4gZ2V0U2NyYXRjaFJlZ2lzdGVyKHN0dWJJbmZv
KSAhPSBJbnZhbGlkR1BSUmVnOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVT
ZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5
UmVwbGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFu
dElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2st
PnVzZURhdGFJQygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIGlmIChpc0lubGluZU9m
ZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBoYXNGcmVl
UmVnaXN0ZXIoc3R1YkluZm8pOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxm
UHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQVNTRVJUKGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVw
bGFjZShzdHViSW5mbywgb2Zmc2V0KSk7CisgICAgQVNTRVJUKGNhbkdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBvZmZzZXQpKTsKKworICAgIGlmIChjb2Rl
QmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIFRoZXNlIHNsb3RzIGdldCBmaWxsZWQg
aW4uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIApAQCAtMjc5LDIyICsyOTIsMjUgQEAgYm9vbCBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UgogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5l
OwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6
OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgQVNTRVJUKGFycmF5LT5p
bmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFu
dElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2st
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCiAgICAgaWYgKCFoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICByZXR1cm4gIWhhc0FueUFycmF5U3RvcmFnZShhcnJheS0+aW5kZXhpbmdU
eXBlKCkpICYmIGFycmF5LT5pbmRleGluZ1R5cGUoKSAhPSBBcnJheUNsYXNzOwogfQogCi1ib29s
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlM
ZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
SlNBcnJheSogYXJyYXkpCiB7Ci0gICAgQVNTRVJUKGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1
YkluZm8sIGFycmF5KSk7CisgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGlzQ2FjaGVhYmxl
QXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywgYXJyYXkpKTsKIAogICAgIGlmICghc3R1
YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0z
MTksMTcgKzMzNSwyMCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChT
CiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpp
c0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitib29s
IElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhh
c0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNv
ZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0KIAot
Ym9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewotICAgIEFT
U0VSVChpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChzdHViSW5mbykpOworICAgIEFTU0VSVF9VTlVT
RUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZv
KSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzYzLDEzICszODIsMTggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlU3RyaW5nTGVuZ3RoKAogfQogCiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNl
bGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0Nv
bnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVC
bG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gVGhlc2Ugc2xvdHMgZ2V0IGZpbGxlZCBp
bi4gTm90aGluZyBlbHNlIHRvIGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAg
ICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VHUFI7CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUg
PSBzdHViSW5mby52YWx1ZVJlZ3MoKTsKIApAQCAtNDA2LDcgKzQzMCw3IEBAIHZvaWQgSW5saW5l
QWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRh
SUMoKSkgewogICAgICAgICAvLyBJZiBpdCBpcyBub3QgR2V0QnlJZC1saWtlLXRoaW5nLCB3ZSBk
byBub3QgZW1pdCBub3Agc2xlZCAoZS5nLiBHZXRCeVZhbCkuCiAgICAgICAgIC8vIFRoZSBjb2Rl
IGlzIGFscmVhZHkgYW4gaW5kaXJlY3QganVtcCwgYW5kIG9ubHkgdGhpbmcgd2Ugc2hvdWxkIGRv
IGlzIHJlcGxhY2luZyBtX2NvZGVQdHIuCi0gICAgICAgIGlmIChzdHViSW5mby5oYXNDb25zdGFu
dElkZW50aWZpZXIpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5
cGU6OkJhc2VsaW5lSklUICYmIHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikgewogICAg
ICAgICAgICAgLy8gSWYgbV9jb2RlUHRyIGlzIHBvaW50aW5nIHRvIHN0dWJJbmZvLnNsb3dQYXRo
U3RhcnRMb2NhdGlvbiwgdGhpcyBtZWFucyB0aGF0IElubGluZUFjY2VzcyBjb2RlIGlzIG5vdCBh
IHN0dWIgb25lLgogICAgICAgICAgICAgLy8gV2UgcmV3cml0ZSB0aGlzIHdpdGggdGhlIHN0dWIt
YmFzZWQgZGlzcGF0Y2hpbmcgY29kZSBvbmNlLCBhbmQgY29udGludWUgdXNpbmcgaXQgdW50aWwg
d2UgcmVzZXQgdGhlIGNvZGUuCiAgICAgICAgICAgICBpZiAoc3R1YkluZm8ubV9jb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCkgPT0gc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpIHsKQEAgLTQyMSw3ICs0NDUsOSBAQCB2b2lkIElubGluZUFjY2Vzczo6
cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nlc3M6
IGxpbmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAg
ICBzdHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBj
b2RlLgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzQsOCArNDYwLDE0IEBAIHZvaWQg
SW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICB9KSwgIklubGluZUFjY2Vz
czogbGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pCit2b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKKyAgICBpZiAoY29k
ZUJsb2NrLT51c2VEYXRhSUMoKSAmJiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCkgeworICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSBzdHViSW5mby5zbG93
UGF0aFN0YXJ0TG9jYXRpb247CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLgorICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1
YkluZm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZv
aWQoQ0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAvLyBX
ZSBkb24ndCBuZWVkIGEgbm9wIHNsZWQgaGVyZSBiZWNhdXNlIG5vYm9keSBzaG91bGQgYmUganVt
cGluZyBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCiAgICAgICAgIGF1dG8ganVtcCA9IGppdC5q
dW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFj
Y2Vzcy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5saW5lQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDE0ICs5OSwxNCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBzdGQ6Om1heChzaXplLCBzaXplRm9yUHJvcGVydHlBY2Nlc3Mo
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3Mo
U3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3Rh
dGljIGJvb2wgY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZv
JiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5
UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsK
LSAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZv
JiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKFN0
cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChT
dHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNl
bGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBi
b29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGlj
IGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1
YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgY2Fu
R2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZv
JiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5
UmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3Bl
cnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENvZGVC
bG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGlz
Q2FjaGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cisg
ICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJbkFjY2Vz
cyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOworICAgIHN0YXRp
YyBib29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZv
Jik7CiAKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lu
bGluZUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CiAgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1YkFz
SnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2Rl
TWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBPVkVSTE9BRF9CSVRX
SVNFX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJdGVyYXRpb25Nb2RlTWV0YWRh
dGEgewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSXRlcmF0aW9uTW9k
ZU1ldGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0
eXBlKHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRpb25Nb2RlKSk7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8u
aAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xM
SW50Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KExMSW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KIAogcHJpdmF0ZToKICAgICB1
aW50cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgeyB1bmxpbmtlZEJp
dCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0YWRhdGFU
YWJsZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSwxNCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBmdW5jKCptZXRhZGF0YSk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CisgICAgQUxXQVlTX0lOTElORSBzaXplX3QgbnVtRW50cmllcygpCisgICAg
eworICAgICAgICBhdXRvKiBzdGFydCA9IGJpdHdpc2VfY2FzdDx0eXBlbmFtZSBPcDo6TWV0YWRh
dGEqPihnZXQoT3A6Om9wY29kZUlEKSk7CisgICAgICAgIGF1dG8qIGVuZCA9IGJpdHdpc2VfY2Fz
dDx0eXBlbmFtZSBPcDo6TWV0YWRhdGEqPihnZXRJbXBsKE9wOjpvcGNvZGVJRCArIDEpKTsKKyAg
ICAgICAgcmV0dXJuIGVuZCAtIHN0YXJ0OworICAgIH0KKwogICAgIHNpemVfdCBzaXplSW5CeXRl
cygpOwogCiAgICAgdm9pZCByZWYoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODAsMTAgKzE4MCwxMCBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJ
CiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVu
dGlmaWVyKCk7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVp
ZCgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCh1aWQpOwotICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0o
KSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3Vy
cmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAg
ICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0
dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAg
ICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciks
IHN0cnVjdHVyZSwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVu
dGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAj
aW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAg
LTY1LDkgKzY2LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKAog
ICAgIEFTU0VSVChoYXNDb25zdGFudElkZW50aWZpZXIpOwogICAgIHNldENhY2hlVHlwZShsb2Nr
ZXIsIENhY2hlVHlwZTo6R2V0QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZp
ZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2st
PnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNl
dCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6aW5pdEFycmF5TGVuZ3RoKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJh
c2UmIGxvY2tlcikKQEAgLTg3LDkgKzg4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5p
dFB1dEJ5SWRSZXBsYQogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0
KTsKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlKTsK
ICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUp
OworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVC
bG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZz
ZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxm
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC05Nyw5ICs5OCw5IEBA
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGMKICAgICBBU1NFUlQobV9j
YWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwg
Q2FjaGVUeXBlOjpJbkJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwot
ICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgp
LmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBv
ZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJl
U3R1YkluZm86OmRlcmVmKCkKQEAgLTIzNiw3ICsyMzcsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVz
dWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgIC8vIHdlJ3JlIGJ1ZmZlcmVkIGlzIGJlY2F1
c2Ugd2UgcmVseSBvbiBpdCB0byByZXNldCBkdXJpbmcgR0MgaWYgbV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlCiAgICAgICAgIC8vIGlzIGNvbGxlY3RlZC4KICAgICAgICAgbV9pZGVudGlmaWVy
ID0gbnVsbHB0cjsKLSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7
CisgICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAgICAgICAgIAogICAg
ICAgICAvLyBJZiB3ZSBnZW5lcmF0ZWQgc29tZSBjb2RlIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBh
dHRlbXB0IHRvIHJlcGF0Y2ggaW4gdGhlIGZ1dHVyZSB1bnRpbCB3ZQogICAgICAgICAvLyBnYXRo
ZXIgZW5vdWdoIGNhc2VzLgpAQCAtMjUxLDcgKzI1Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OnJlc2V0KGNvbnN0IENvbmMKIHsKICAgICBjbGVhckJ1ZmZlcmVkU3RydWN0dXJlcygpOwog
ICAgIG1faWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlLmNsZWFyKCk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKIAogICAg
IGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CkBA
IC0yODUsNiArMjg2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29u
YwogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxv
Y2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpJbkJ5SWQ6CkBAIC0zNjAsOCArMzYyLDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7
Ci0gICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgaXNWYWxpZCAm
PSB2bS5oZWFwLmlzTWFya2VkKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7Cisg
ICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2
bSkpCisgICAgICAgIGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpOwogICAg
IGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIGlzVmFsaWQgJj0g
dS5zdHViLT52aXNpdFdlYWsodm0pOwogCkBAIC0zNzUsOCArMzc3LDggQEAgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImIHZp
c2l0b3IpCiB7Ci0gICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAg
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBp
ZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZpc2l0
b3Iudm0oKSkpCisgICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAKICAg
ICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICB1LnN0dWItPnBy
b3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwpAQCAtNDMwLDYgKzQzMiwyMDQgQEAgQUxXQVlT
X0lOTElORSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1fY2FjaGVUeXBlID0gbmV3
Q2FjaGVUeXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBlID0gdW5saW5rZWRTdHVi
SW5mby5hY2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHViSW5mby5zdGFydDsKKyAg
ICBkb25lTG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93
UGF0aFN0YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlv
bjsKKyAgICBjYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KHVubGlu
a2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpOworICAgIGNvZGVPcmlnaW4gPSBD
b2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgbV9jb2RlUHRy
ID0gc2xvd1BhdGhTdGFydExvY2F0aW9uOworCisgICAgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICBpZiAoYWNjZXNzVHlwZSA9PSBB
Y2Nlc3NUeXBlOjpHZXRCeUlkICYmIHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkpIHsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9yX25leHQsIHdlIGNhbid0IGNsb2Ji
ZXIgdGhlICJkb250Q2xvYmJlclJlZ2lzdGVyIiByZWdpc3RlciBlaXRoZXIuCisgICAgICAgIHVz
ZWRSZWdpc3RlcnMuYWRkKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdp
c3Rlcik7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
RGVsZXRlQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpEZWxldGVCeUlEOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVC
eUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlW
YWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkluQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgor
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisg
ICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOiAK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAg
ICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtp
bmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2Rl
LmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAg
ICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAg
ICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1
dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5k
KSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVu
bGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9k
ZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZp
bmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVy
YXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNz
VHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNl
OworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6
CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlH
UFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJl
Z2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpHZXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgorICAgICAg
ICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgcHJvdG90eXBlSXNLbm93bk9iamVjdCA9IGZhbHNlOwor
ICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAg
ICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnBy
b3RvOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFs
OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0g
ZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6Cisg
ICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5
SWQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAg
ICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVncy50aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlk
V2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2
YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlw
ZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNl
OworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVl
OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsKQor
ICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9maWxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZh
dGVCcmFuZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAg
ICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBJbnZh
bGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgICAgIHJlZ3MuYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YnJhbmQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogI2lm
IEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5
KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2lu
Y2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlU2V0LmgiCkBAIC01Niw2ICs1Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6
IGludDhfdCB7CiAgICAgR2V0QnlWYWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAg
ICBQdXRQcml2YXRlTmFtZSwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2
YXRlTmFtZSwKQEAgLTc4LDYgKzgwLDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3Qg
ewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05
OCw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRU
b0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFS
RV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayBy
ZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2Vs
ZiwKQEAgLTMyNSwxMyArMzMxLDE5IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW47CisgICAgUHJvcGVydHlPZmZzZXQgYnlJZFNlbGZPZmZzZXQ7CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBieUlkU2VsZk9mZnNldCk7IH0KKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgbV9pbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKTsgfQogICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgfSBieUlkU2VsZjsKICAgICAgICAgUG9seW1v
cnBoaWNBY2Nlc3MqIHN0dWI7CiAgICAgfSB1OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIHZtLmdldFN0cnVjdHVyZShtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIH0K
KyAgICBTdHJ1Y3R1cmVJRCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAwIH07CiBwcml2
YXRlOgogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIC8vIFJlcHJl
c2VudHMgdGhvc2Ugc3RydWN0dXJlcyB0aGF0IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nlc3ND
YXNlcyBpbiB0aGUgUG9seW1vcnBoaWNBY2Nlc3MuCkBAIC00NDcsNiArNDU5LDE3IEBAIGlubGlu
ZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW4KICAgICB9CiB9CiAKK3N0cnVjdCBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Cisg
ICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxk
UHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSB9OworICAgIEVDTUFNb2RlIGVj
bWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgpIH07CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFy
dDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlk
IGNhY2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW5zdGFuY2Vv
ZicgY2FjaGVzLgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVM
b2NhdGlvbjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xv
d1BhdGhTdGFydExvY2F0aW9uOworfTsKKwogI2Vsc2UKIAogY2xhc3MgU3RydWN0dXJlU3R1Yklu
Zm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1w
bGVyLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N1cGVyU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdm9p
ZCBwcmludFN1cGVyU2FtcGxlclN0YXRlKCkKICAgICBkb3VibGUgcGVyY2VudGFnZSA9IDEwMC4w
ICogaW4gLyAoaW4gKyBvdXQpOwogICAgIGlmIChwZXJjZW50YWdlICE9IHBlcmNlbnRhZ2UpCiAg
ICAgICAgIHBlcmNlbnRhZ2UgPSAwLjA7Ci0gICAgZGF0YUxvZygiUGVyY2VudCB0aW1lIGJlaGlu
ZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNlbnRhZ2UsICJcbiIpOworICAgIGRhdGFMb2co
IlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAi
JVxuIik7CiB9CiAKIHZvaWQgZW5hYmxlU3VwZXJTYW1wbGVyKCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVk
ZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgog
I2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2Rl
U3RydWN0cy5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgpAQCAtNzgsNiArNzksOCBAQCBVbmxp
bmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0mCiAgICAgICAgIGNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkobG9ja2VyKTsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9wcml2YXRlQnJh
bmRSZXF1aXJlbWVudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcml2YXRlQnJhbmRSZXF1aXJl
bWVudDo6TmVlZGVkKTsKICAgICB9CisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3
VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldh
cm1VcCgpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CkBAIC0zMTYsNiArMzE5
LDQ4IEBAIGludCBVbmxpbmtlZENvZGVCbG9jazo6b3V0T2ZMaW5lSnVtcE9mZnMKICAgICByZXR1
cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5nZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQogCisjaWYg
QVNTRVJUX0VOQUJMRUQKK2Jvb2wgVW5saW5rZWRDb2RlQmxvY2s6Omhhc0lkZW50aWZpZXIoVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpID4g
MTAwKSB7CisgICAgICAgIGlmIChudW1iZXJPZklkZW50aWZpZXJzKCkgIT0gbV9jYWNoZWRJZGVu
dGlmaWVyVWlkcy5zaXplKCkpIHsKKyAgICAgICAgICAgIExvY2tlciBsb2NrZXIobV9jYWNoZWRJ
ZGVudGlmaWVyVWlkc0xvY2spOworICAgICAgICAgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1w
bCo+IGNhY2hlZElkZW50aWZpZXJVaWRzOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllciA9IGlkZW50aWZpZXIoaSk7CisgICAgICAgICAgICAg
ICAgY2FjaGVkSWRlbnRpZmllclVpZHMuYWRkKGlkZW50aWZpZXIuaW1wbCgpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAg
IG1fY2FjaGVkSWRlbnRpZmllclVpZHMgPSBXVEZNb3ZlKGNhY2hlZElkZW50aWZpZXJVaWRzKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX2NhY2hlZElkZW50aWZpZXJVaWRzLmNvbnRh
aW5zKHVpZCk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9m
SWRlbnRpZmllcnMoKTsgKytpKSB7CisgICAgICAgIGlmIChpZGVudGlmaWVyKGkpLmltcGwoKSA9
PSB1aWQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorI2VuZGlmCisKK2ludDMyX3QgVW5saW5rZWRDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJ
VChpbnQzMl90IHRocmVzaG9sZCkKK3sKKyAgICBzd2l0Y2ggKGRpZE9wdGltaXplKCkpIHsKKyAg
ICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xk
OworICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkICog
NDsKKyAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8g
MjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRocmVzaG9s
ZDsKK30KKworCiB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVz
KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9tZXRhZGF0YS0+aXNGaW5hbGl6ZWQoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxMiBA
QAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUg
IkFycmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNs
dWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCisjaW5jbHVkZSAi
RXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5nZUluZm8uaCIKICNp
bmNsdWRlICJIYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKQEAgLTY0LDYg
KzY2LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZENvZGVCbG9j
a0dlbmVyYXRvcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIHN0cnVjdCBF
eGVjdXRhYmxlSW5mbzsKIGVudW0gY2xhc3MgTGlua1RpbWVDb25zdGFudCA6IGludDMyX3Q7CiAK
QEAgLTE3NSw2ICsxNzgsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGaXhlZFZlY3RvcjxXcml0
ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3Rh
bnRSZWdpc3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJl
Z2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29u
c3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAg
ICBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjsgfQogCkBAIC0yMDcsNiArMjExLDE1IEBAIHB1YmxpYzoKICAgICBKU1Bh
cnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpT
UGFyc2VyU2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rp
b25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0OworICAgIGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0
aW9ucygpLmF0KGluZGV4KS5wdHIoKTsgfQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8q
IGluc3RydWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgICAg
IGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5z
dHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4p
ICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1
Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNF
bmQpOworICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAg
ICB9CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25zU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGluc3Ry
dWN0aW9ucygpLnNpemUoKTsgfQogCiAgICAgdW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29u
c3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KICAgICB1bnNpZ25lZCBudW1WYXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CkBAIC0zMzQsMTAgKzM0NywyMSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpOwogICAgIH0KIAorICAg
IGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQorICAgIHsK
KyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRl
IHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFpc0J1aWx0aW5GdW5jdGlvbigp
OworICAgIH0KICAgICB2b2lkIGFsbG9jYXRlU2hhcmVkUHJvZmlsZXMoKTsKICAgICBVbmxpbmtl
ZFZhbHVlUHJvZmlsZSYgdW5saW5rZWRWYWx1ZVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0
dXJuIG1fdmFsdWVQcm9maWxlc1tpbmRleF07IH0KICAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSYg
dW5saW5rZWRBcnJheVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fYXJyYXlQcm9m
aWxlc1tpbmRleF07IH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgYm9vbCBoYXNJZGVudGlm
aWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CisjZW5kaWYKKworICAgIGludDMyX3QgdGhyZXNob2xk
Rm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKKwogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29k
ZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwg
T3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwogCkBAIC0zOTcsNiArNDIxLDcgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX2xleGljYWxTY29wZUZlYXR1cmVzIDogNDsKIHB1YmxpYzoK
ICAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKKyAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2Rl
PiBtX3VubGlua2VkQmFzZWxpbmVDb2RlOwogcHJpdmF0ZToKICAgICBDb2RlRmVhdHVyZXMgbV9m
ZWF0dXJlcyB7IDAgfTsKICAgICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC00MTMs
NiArNDM4LDkgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJl
YW0+IG1faW5zdHJ1Y3Rpb25zOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM+IG1fbGl2ZW5lc3M7CiAKKyAgICAvLyBPT1BTOiBiaW5kIGEgYmV0dGVyIHBsYWNl
IHRvIHN0b3JlIHRoaXMgc3R1ZmY/CisgICAgVmVjdG9yPEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9i
aW5hcnlBcml0aFByb2ZpbGVzOworICAgIFZlY3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4gbV91bmFy
eUFyaXRoUHJvZmlsZXM7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9m
aWxlIG1fZXhpdFByb2ZpbGU7CkBAIC00NTgsNiArNDg2LDMwIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uLm9mZnNldCgpKTsK
ICAgICB9CisgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBj
KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSB0aGlzLT5ieXRlY29k
ZU9mZnNldChwYyk7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUoKQor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9iaW5hcnlBcml0aFByb2ZpbGVzLnNp
emUoKTsKKyAgICAgICAgbV9iaW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5hcnlBcml0aFBy
b2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdW5zaWduZWQg
YWRkVW5hcnlBcml0aFByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0g
bV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX3VuYXJ5QXJpdGhQcm9maWxl
cy5hcHBlbmQoVW5hcnlBcml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWdu
ZWQgaSkgeyByZXR1cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0
aFByb2ZpbGUmIHVuYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlB
cml0aFByb2ZpbGVzW2ldOyB9CisKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50
RXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7IH0KIAogcHJp
dmF0ZToKICAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5zdHJ1Y3Rp
b25TdHJlYW06Ok9mZnNldCwgaW50PjsKQEAgLTQ2NSw5ICs1MTcsMTUgQEAgcHJpdmF0ZToKICAg
ICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZlY3RvcjxFeHByZXNz
aW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291
bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRWYWx1
ZVByb2ZpbGU+IG1fdmFsdWVQcm9maWxlczsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZEFycmF5
UHJvZmlsZT4gbV9hcnJheVByb2ZpbGVzOwogCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBMb2Nr
IG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrOworICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0lt
cGwqPiBtX2NhY2hlZElkZW50aWZpZXJVaWRzOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShK
U0NlbGwqLCBWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKICAgICBi
b29sIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX2Nv
ZGVCbG9jay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9CiAgICAgYm9vbCBo
YXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50
cygpOyB9CiAgICAgYm9vbCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay0+aGFzVGFpbENhbGxzKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUo
KSB7IHJldHVybiBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCk7IH0KKyAgICB1
bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRV
bmFyeUFyaXRoUHJvZmlsZSgpOyB9CiAKICAgICAvLyBVcGRhdGluZyBVbmxpbmtlZENvZGVCbG9j
ay4KICAgICB2b2lkIHNldEhhc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFzQ2hl
Y2twb2ludHMoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFVubGlua2VkTWV0YWRhdGFUYWJsZSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIE9wY29kZT4KKyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNv
bnN0IE9wY29kZSYgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQp
OworICAgICAgICB1aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRU
YWJsZTMyKClbT3Bjb2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNv
ZGVJRF07CisgICAgICAgIGJhc2VUeXBlT2Zmc2V0ID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGln
bm9mKHR5cGVuYW1lIE9wY29kZTo6TWV0YWRhdGEpLCBiYXNlVHlwZU9mZnNldCk7CisgICAgICAg
IHJldHVybiBiYXNlVHlwZU9mZnNldCArIHNpemVvZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRh
KSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7CisgICAgfQorCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgogICAgIHVuc2lnbmVkIG51bUVudHJpZXMoKTsKIApAQCAtMTA3LDYgKzExNiw3
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzX29mZnNldDE2VGFibGVTaXplOwogICAgIH0K
IAorCiAgICAgdXNpbmcgT2Zmc2V0MzIgPSB1aW50MzJfdDsKICAgICB1c2luZyBPZmZzZXQxNiA9
IHVpbnQxNl90OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQ
cm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zh
bHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEzICs0NSwxMSBA
QCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0c0FyZ3VtZW50OwogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHMgPSAxOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYnVja2V0SW5kZXhNYXNrID0gbnVtYmVyT2ZCdWNrZXRz
IC0gMTsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZCdWNrZXRz
ID0gbnVtYmVyT2ZCdWNrZXRzICsgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHM7CiAgICAgCiAgICAg
VmFsdWVQcm9maWxlQmFzZSgpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkKLSAgICAgICAgICAgIG1fYnVja2V0c1tpXSA9
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgICAgICBjbGVhckJ1Y2tldHMoKTsKICAg
ICB9CiAgICAgCiAgICAgRW5jb2RlZEpTVmFsdWUqIHNwZWNGYWlsQnVja2V0KHVuc2lnbmVkIGkp
CkBAIC01OSw2ICs1NywxMiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIEFT
U0VSVChudW1iZXJPZkJ1Y2tldHMgKyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHMpOwogICAgICAg
ICByZXR1cm4gbV9idWNrZXRzICsgbnVtYmVyT2ZCdWNrZXRzICsgaTsKICAgICB9CisKKyAgICB2
b2lkIGNsZWFyQnVja2V0cygpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkKKyAgICAgICAgICAgIG1fYnVja2V0c1tpXSA9
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIH0KICAgICAKICAgICBjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mbyh1bnNpZ25lZCBidWNrZXQpIGNvbnN0CiAgICAgewpAQCAtMTIzLDgg
KzEyNyw2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25l
LiBOZXZlciBjYWxsIHRoaXMgZnJvbSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVj
dXRpbmcgdGhlIGNvZGUuCiAgICAgU3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0
aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkgewpAQCAtMTM5LDcgKzE0
MSw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgCiAgICAgICAgIHJldHVy
biBtX3ByZWRpY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNr
ZXRzW3RvdGFsTnVtYmVyT2ZCdWNrZXRzXTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGlj
dGlvbiB7IFNwZWNOb25lIH07CkBAIC0xNjEsNiArMTYzLDcgQEAgc3RydWN0IFZhbHVlUHJvZmls
ZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldAogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZh
bHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgp
IDogVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPigpIHsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0c1swXSk7IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5OCw3
ICsxNTk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRVbmFyeQogICAg
ICAgICBlbWl0VW5hcnlPcDxPcE5vdD4oZHN0LCBzcmMpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5
cGUpOworICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSwgbV9jb2Rl
QmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IG9wX2JpdG5vdDoKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BCaXRub3Q+KGRzdCwgc3JjKTsKQEAg
LTE2OTYsMTMgKzE2OTYsMTMgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRU
eXBlTwogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluYyhSZWdpc3RlcklE
KiBzcmNEc3QpCiB7Ci0gICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcEluYzo6
ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsK
ICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdERlYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BEZWM6OmVtaXQodGhpcywgc3Jj
RHN0KTsKKyAgICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFy
eUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqPgogICAgICAgICBlbWl0
QmluYXJ5T3AoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBz
cmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJpbmFyeU9w
OjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMpOworICAgICAgICAgICAgQmluYXJ5
T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcywgbV9jb2RlQmxvY2stPmFkZEJp
bmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0pldHRp
c29uaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5oIgpAQCAtMzQsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5o
IgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0
LmgiCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSlNDYXN0LmgiCiAjaW5jbHVk
ZSAiUHJvZmlsZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIlJlY29yZGVkU3RhdHVzZXMuaCIK
QEAgLTcwLDcgKzcyLDcgQEAgc3RydWN0IFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uIHsKICAgICBX
cml0ZUJhcnJpZXI8SlNDZWxsPiBtX3RvOwogfTsKICAgICAgICAgCi1jbGFzcyBDb21tb25EYXRh
IHsKK2NsYXNzIENvbW1vbkRhdGEgOiBwdWJsaWMgTWF0aElDSG9sZGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDb21tb25EYXRhKTsKIHB1YmxpYzoKICAgICBDb21tb25EYXRhKCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKIAorc3RydWN0IFNp
bXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKIG5hbWVzcGFjZSBERkcg
ewogCiBjbGFzcyBKSVRDb21waWxlcjsKQEAgLTE0MCw2ICsxNDMsOCBAQCBwdWJsaWM6CiAgICAg
SGFzaE1hcDxCeXRlY29kZUluZGV4LCBUcmlnZ2VyUmVhc29uPiB0aWVyVXBFbnRyeVRyaWdnZXJz
OwogCiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9vc3JFbnRyeUJsb2NrOworICAgIEZp
eGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZpeGVk
VmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwogICAgIHVu
c2lnbmVkIG9zckVudHJ5UmV0cnk7CiAgICAgYm9vbCBhYmFuZG9uT1NSRW50cnk7CiAjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSwxMyArMTg1
LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAKICAg
ICBtX2dyYXBoLnJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7CiAKLSAgICBpZiAoIW1fZ3JhcGgubV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSB8fCAhbV9ncmFwaC5tX3N3aXRjaEp1bXBU
YWJsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9j
b2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fc3dpdGNoSnVt
cFRhYmxlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0
YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N3aXRjaEp1
bXBUYWJsZXMpOwotICAgIH0KKyAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBU
YWJsZXMuaXNFbXB0eSgpKTsKKyAgICBpZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzLmlzRW1wdHkoKSkgCisgICAgICAgIG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgaWYg
KCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpCisgICAgICAgIG1faml0Q29k
ZS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxl
cyk7CiAKICAgICBmb3IgKEJhZzxTd2l0Y2hEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fZ3JhcGgu
bV9zd2l0Y2hEYXRhLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CiAgICAgICAgIFN3aXRjaERh
dGEmIGRhdGEgPSAqKml0ZXI7CkBAIC0xOTksMTIgKzE5OCwxMiBAQCB2b2lkIEpJVENvbXBpbGVy
OjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIGNhc2UgU3dpdGNoQ2hhcjoKICAgICAg
ICAgY2FzZSBTd2l0Y2hJbW06IHsKICAgICAgICAgICAgIGlmICghZGF0YS5kaWRVc2VKdW1wVGFi
bGUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF0u
aXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUg
PSBtX2dyYXBoLnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7
Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2st
PnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVz
W2RhdGEuc3dpdGNoVGFibGVJbmRleF07CiAgICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0aURl
ZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFk
c1tkYXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0pOwogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKSA9PSB1bmxpbmtlZFRhYmxlLm1f
YnJhbmNoT2Zmc2V0cy5zaXplKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbGlu
a2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKTsgai0tOykKQEAgLTIxOSwxMiArMjE4LDEyIEBA
IHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKIAogICAgICAgICBjYXNl
IFN3aXRjaFN0cmluZzogewogICAgICAgICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkg
ewotICAgICAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRh
YmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQobV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJs
ZUluZGV4XS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5r
ZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0
Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRl
eCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9qaXRDb2Rl
LT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XTsKICAgICAg
ICAgICAgIGF1dG8gY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0
clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2stPmluZGV4XSk7CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuc2l6ZSgpID09
IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS5zaXplKCkgKyAxKTsKICAgICAgICAgICAgIGZv
ciAoYXV0byYgZW50cnkgOiBsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk3LDcgKzk3LDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1l
KgogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBl
KCkpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpOwotICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFTU0VSVChj
b2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKICAgICBp
ZiAoIU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9ERkcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
REZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQu
aCIKQEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIEND
YWxsSGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2ggKGppdC5jb2Rl
QmxvY2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAgICAg
IGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9s
ZChqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAg
IGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9s
ZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklU
OgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlw
cGVkVGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVl
KTsKKyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xp
cHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMTMsNiArMzE0LDEw
IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2Rl
QmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFU
YWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9j
aywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAgICAgICAgaml0
LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5l
Q2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpKTsK
KyAgICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0
cnVlQ2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSksIGNh
bGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19t
ZXRhZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVKSVRDb25zdGFu
dFBvb2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxv
Y2ssIEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghaW5s
aW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw2ICs0MDksOSBAQCB2b2lkIGFkanVz
dEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0
ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxP
U1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKKyAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQt
Pm1ldGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGluZUpJ
VENvbnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CisKICAgICAgICAgY29kZUJs
b2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKIAogICAgICAgICBCeXRlY29k
ZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNhY2hlYWJsZUlk
ZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUg
IkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRG
R0pJVENvZGUuaCIKQEAgLTI4NjksNyArMjg3MCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25GaW5kU3cKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FM
TF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1l
LT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
Y29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxl
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKICAgICBBU1NFUlQodmFsdWUuaXNEb3VibGUoKSk7CiAgICAgZG91YmxlIGFzRG91Ymxl
ID0gdmFsdWUuYXNEb3VibGUoKTsKQEAgLTI4OTAsNyArMjg5MSw3IEBAIEpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKIAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgbnVsbHB0cik7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBj
b2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBT
dHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5kZmdTdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgcmV0dXJuIGxpbmtlZFRhYmxlLmN0aUZvclZhbHVl
KCp1bmxpbmtlZFRhYmxlLCBzdHJJbXBsKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzAs
NiArNzMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAg
ICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxl
ZVRhZ0dQUiwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdz
LnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBh
c3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFy
YW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAg
ICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IGkgKyAxKTsKQEAgLTg4OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAg
ICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0gewogICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5z
ZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzQsNiArODM0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZs
ZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0
SlMpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJn
cyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJn
czsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAgICAg
RWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CkBA
IC05ODUsNyArOTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChp
c1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxG
YXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKICAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxs
RnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcgKzM5ODUsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAgIEpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwg
Y29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1c2VkUmVnaXN0ZXJz
LAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2lu
LCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVzZWRSZWdpc3RlcnMsCiAg
ICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwgSlNWYWx1ZVJlZ3M6OnBh
eWxvYWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5m
b0dQUik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogCkBA
IC00OTA1LDcgKzQ5MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQo
Tm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFz
ZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgp
OwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxv
Y2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVEFkZElDKGFyaXRo
UHJvZmlsZSk7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24u
YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9
IG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rp
b24gPSBvcGVyYXRpb25WYWx1ZUFkZDsKICAgICAKQEAgLTQ5ODksNyArNDk4OSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVN1YihOb2QKICAgICBDb2RlQmxvY2sqIGJhc2Vs
aW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9y
Qnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2pp
dC5jb2RlQmxvY2soKS0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRTdWJJQyog
c3ViSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUp
OwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6
ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViOwog
CkBAIC01NTcxLDcgKzU1NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVO
ZWdhdGUoCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCku
YmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRl
eCgpOwogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVC
bG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwot
ICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJQyhhcml0
aFByb2ZpbGUpOworICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9u
LmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24g
PSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1
bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGU7CiAgICAgY29tcGlsZU1hdGhJQyhub2RlLCBu
ZWdJQywgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwpAQCAtNTgx
NSw3ICs1ODE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTXVsKE5vZAog
ICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5l
Q29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5i
aW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJ
VE11bElDKiBtdWxJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRNdWxJQyhhcml0aFByb2Zp
bGUpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJ
VE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVy
YXRpb25WYWx1ZU11bE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0g
b3BlcmF0aW9uVmFsdWVNdWw7CiAKQEAgLTE0NzczLDcgKzE0NzczLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNj
b3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5n
cHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tl
dFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJbmRl
eCk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVn
LCB0aGlzUmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5j
b2RlQmxvY2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMjAsNiArMjMyMCwxOCBAQCBwcml2YXRlOgog
ICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVFN1YkdlbmVyYXRvcj4oYXJpdGhQcm9maWxl
LCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CiAgICAgfQogCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVEFkZElDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRh
JiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFk
ZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0
b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUTXVsSUMq
IGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9maWxlKiBw
cm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0
eXBlPgorICAgIHN0YXRpYyBKSVROZWdJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29t
bW9uLCBVbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVE5l
Z0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBl
bmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJ
VFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUU3ViSUMqIGFkZE1h
dGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxl
KSB7IHJldHVybiBjb21tb24uYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKwogICAgIHZvaWQgY29t
cGlsZVZhbHVlTXVsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CkBAIC0yMzkx
LDcgKzI0MDMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAgICAgICAgICAgICBCb3g8TWF0
aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBCb3g8TWF0aElDR2Vu
ZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgSklUVW5hcnlNYXRoSUM8
R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRoSUM8R2VuZXJhdG9y
Pihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRv
cj4qIG1hdGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRDb2RlLT5jb21tb24s
IGFyaXRoUHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdl
bmVyYXRvcihKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLCBKU1ZhbHVlUmVncyhwYXJhbXNb
MV0uZ3ByKCkpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKIAogICAgICAgICAgICAgICAgIGJvb2wg
c2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwpAQCAtMjUwMCw3ICsyNTEyLDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4g
bWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0
ZSgpOwotICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMg
PSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSk7Cisg
ICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGFkZE1h
dGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRDb2RlLT5jb21tb24sIGFyaXRoUHJvZmlsZSk7CiAg
ICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFu
ZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLAogICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBKU1ZhbHVlUmVncyhwYXJh
bXNbMl0uZ3ByKCkpLCBwYXJhbXMuZnBTY3JhdGNoKDApLAogICAgICAgICAgICAgICAgICAgICBw
YXJhbXMuZnBTY3JhdGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKQEAgLTQzMTcsNyArNDMy
OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0Y2goMCkgOiBJbnZh
bGlkR1BSUmVnOwogCiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeVZh
bEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJ
VFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NU
eXBlOjpQdXRCeVZhbCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6
OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQ
dXRQcml2YXRlTmFtZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNW
YWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAKICAgICAg
ICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CkBA
IC0xMDI4NSw2ICsxMDI5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1BbGxvY2F0ZWRBcmdzOyArK2kpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChWYWx1ZVJlY292
ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZm
bGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0
ZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJl
Z2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCkt
PmFkZENhbGxMaW5rSW5mbyhzZW1hbnRpY05vZGVPcmlnaW4pOwpAQCAtMTA0NDMsMTMgKzEwNDU2
LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MuYXBw
ZW5kKHBhcmFtc1sxICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOwogCiAgICAgICAgICAgICAg
ICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bUFyZ3M7CisgICAgICAgICAgICAgICAg
c2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVw
Q2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogCiAgICAgICAgICAgICAgICAg
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5r
SW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2Fs
bChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAg
ICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChq
aXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJ
Qzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVE
YXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxl
RGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDc5
Miw3ICsxMDgwNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9u
ZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJ
bmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBb
Jl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAg
ICB9KTsKQEAgLTExMDczLDcgKzExMDg3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewog
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAg
ICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRv
ci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjgg
QEAgY2xhc3MgTWV0YWRhdGEKICAgICBkZWYgc3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYg
ZW1wdHk/CiAKLSAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAg
ICAgIGRlZiBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKKyAg
ICAgICAgICAgIGZpZWxkTmFtZXMubWFwIGRvIHxmaWVsZE5hbWV8CisgICAgICAgICAgICAgICAg
IiN7cHJlZml4fXN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51cGNhc2V9
I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
I3tmaWVsZE5hbWV9KTsgfSIKKyAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisgICAgICAgIGVu
ZAorCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBmaWVsZE5hbWVz
KQogICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAg
ICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11
bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4
fX07IgorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0Rmll
bGRzKHByZWZpeCArICcgICAgJywgdHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZpeH19OyIKICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUu
dG9fc30gbV8je2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0g
ZmllbGQudG9fcworICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2goZmllbGROYW1l
KQorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZE5h
bWV9OyIKICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAg
ICAgICAgIGVuZAogCi0gICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwg
QGZpZWxkcykKKyAgICAgICAgZmllbGROYW1lcyA9IFtdCisgICAgICAgIHByZWZpeCA9ICIgICAg
ICAgICIKKyAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBmaWVsZHMsIGZp
ZWxkTmFtZXMpCisgICAgICAgIGZpZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5lcmF0ZU9mZnNl
dE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKIAogICAgICAgICBpbml0cyA9IG5pbAog
ICAgICAgICBpZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Nyw2ICszNjcsMjggQEAgdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmxvYWRQcm9wZXJ0eShHUFJSZQogICAgICAgICByZXN1bHQpOwogfQogCit2b2lk
IEFzc2VtYmx5SGVscGVyczo6c3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVn
IG9iamVjdCwgR1BSUmVnIG9mZnNldCwgR1BSUmVnIHNjcmF0Y2gpCit7CisgICAgSnVtcCBpc0lu
bGluZSA9IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9m
TGluZU9mZnNldCkpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIG5lZzMyKG9mZnNldCk7CisgICAg
c2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgIEp1bXAgcmVhZHkgPSBqdW1w
KCk7CisgICAgCisgICAgaXNJbmxpbmUubGluayh0aGlzKTsKKyAgICBhZGRQdHIoCisgICAgICAg
IFRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihK
U09iamVjdCkpIC0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDxpbnQzMl90PihmaXJzdE91dE9m
TGluZU9mZnNldCkgLSAyKSAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpKSwKKyAgICAgICAgb2JqZWN0LCBzY3JhdGNoKTsKKyAgICAKKyAgICByZWFkeS5saW5r
KHRoaXMpOworICAgIAorICAgIHN0b3JlVmFsdWUodmFsdWUsCisgICAgICAgIEJhc2VJbmRleChz
Y3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dExvYWRTdHJ1Y3R1cmUoVk0mIHZtLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0
LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY5OCw4ICs3
MjAsMTMgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lk
IEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9i
YWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1v
dmluZ0dsb2JhbE9iamVjdCh2bSwgaW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpl
bWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJ
bmZvKiBpbmZvKQoreworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVn
VDIpOwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2
bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2Fs
bCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw4ICsyMzQsOSBAQCBwdWJsaWM6CiAjZW5k
aWYKICAgICB9CiAgICAgCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgY2xvYmJlcnMgb2Zmc2V0Lgor
ICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBjbG9iYmVyIG9mZnNldC4KICAgICB2b2lkIGxvYWRQcm9w
ZXJ0eShHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpOwor
ICAgIHZvaWQgc3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwg
R1BSUmVnIG9mZnNldCwgR1BSUmVnIHNjcmF0Y2gpOwogCiAgICAgdm9pZCBtb3ZlVmFsdWVSZWdz
KEpTVmFsdWVSZWdzIHNyY1JlZ3MsIEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAgIHsKQEAgLTE3
MjAsNiArMTcyMSw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVh
bENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1p
dFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyop
OwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCBy
ZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgorCisj
aW5jbHVkZSAiSklUTWF0aElDLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCisjaW5jbHVkZSAi
U3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVEFkZElDKiBNYXRo
SUNIb2xkZXI6OmFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7
IHJldHVybiBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUTXVsSUMqIE1hdGhJQ0hv
bGRlcjo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0
dXJuIG1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRTdWJJQyogTWF0aElDSG9sZGVy
OjphZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4g
bV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE5lZ0lDKiBNYXRoSUNIb2xkZXI6OmFk
ZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbmVn
SUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisKK3ZvaWQgTWF0aElDSG9sZGVyOjphZG9wdE1hdGhJ
Q3MoTWF0aElDSG9sZGVyJiBvdGhlcikKK3sKKyAgICBtX2FkZElDcyA9IFdURk1vdmUob3RoZXIu
bV9hZGRJQ3MpOworICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhlci5tX211bElDcyk7CisgICAg
bV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICBtX3N1YklDcyA9IFdURk1v
dmUob3RoZXIubV9zdWJJQ3MpOworfQorCitCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29k
ZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0
aEFyaXR5Q2hlY2spCisgICAgOiBEaXJlY3RKSVRDb2RlKFdURk1vdmUoY29kZSksIHdpdGhBcml0
eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAsIE1hdGhJQ0hvbGRlcigpCit7IH0K
KworQmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKCkKK3sKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRD
b2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGlu
ZUpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkNhbGxMaW5rSW5mby5oIgorI2luY2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRlICJKSVRD
b2RlTWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCaW5hcnlBcml0aFByb2ZpbGU7
CitjbGFzcyBVbmFyeUFyaXRoUHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvOworc3RydWN0IFNpbXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisK
K2NsYXNzIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0
aElDSG9sZGVyJiBvdGhlcik7CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRo
UHJvZmlsZSopOworICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUq
KTsKKyAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAg
SklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CisKK3ByaXZhdGU6Cisg
ICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOwor
ICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsK
K307CisKK2NsYXNzIEpJVENvbnN0YW50UG9vbCB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29uc3Rh
bnQgPSB1bnNpZ25lZDsKKworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAg
ICBHbG9iYWxPYmplY3QsCisgICAgICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAgU3RydWN0dXJl
U3R1YkluZm8sCisgICAgICAgIEZ1bmN0aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rpb25FeHByLAor
ICAgIH07CisKKyAgICBzdHJ1Y3QgVmFsdWUgeworICAgICAgICAvLyBPT1BTOiBNYWtlIHRoZSBw
b2ludGVyIHBhY2tlZC4KKyAgICAgICAgVHlwZSB0eXBlOworICAgICAgICB2b2lkKiBwYXlsb2Fk
OworICAgIH07CisKKyAgICBKSVRDb25zdGFudFBvb2woKSA9IGRlZmF1bHQ7CisgICAgSklUQ29u
c3RhbnRQb29sKEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQ
b29sJiBvcGVyYXRvcj0oSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKworICAgIENvbnN0
YW50IGFkZChUeXBlIHR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxscHRyKQorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudHMuc2l6ZSgpOworICAgICAgICBtX2NvbnN0
YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBlLCBwYXlsb2FkIH0pOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFu
dHMuc2l6ZSgpOyB9CisgICAgVmFsdWUgYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRzW2ldOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50czsK
K307CisKKworY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1
YmxpYyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIEJhc2VsaW5lSklUQ29kZShDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hl
Y2spOworICAgIH5CYXNlbGluZUpJVENvZGUoKSBvdmVycmlkZTsKKworICAgIEJhZzxVbmxpbmtl
ZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1f
ZXZhbENhbGxMaW5rSW5mb3M7IC8vIE9PUFM6IG1ha2Ugc3VyZSB3ZSB2aXNpdCB0aGVzZSBzb21l
aG93LiBPciBhc3NlcnQgd2UgZG9uJ3QgaGF2ZSB0bywgc2luY2UgdGhleSdyZSB2aXJ0dWFsIGNh
bGxzLgorICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1Yklu
Zm9zOworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVz
OworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzOworICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworICAgIEpJVENvbnN0YW50UG9vbCBt
X2NvbnN0YW50UG9vbDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHNpemVfdCBCYXNlbGluZUpJVFBsYW46OmNvZGVT
aXplKCkgY29uc3QKIAogQ29tcGlsYXRpb25SZXN1bHQgQmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6
ZSgpCiB7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1h
aW5UaHJlYWQoKTsKKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6
ZU9uTWFpblRocmVhZChtX2NvZGVCbG9jayk7CiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBj
YXNlIENvbXBpbGF0aW9uRmFpbGVkOgogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29k
ZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFk
b3dDaGlja2VuUHJvbG8KICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12
b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRv
d1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2Fs
bGVlKSkpOwotICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAg
c3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KGNvZGVCbG9jayksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
Y2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBD
Q2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hh
ZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsK
ICAgICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpA
QCAtNzIsNiArNjIsMjggQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5Q
YQogICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9
CiAKKwordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cit2b2lkIENDYWxsSGVscGVy
czo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpT
VmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2Nr
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgc3RvcmVQdHIoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1t
UHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsK
KyAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOworICAgIHN0b3JlUHRy
KHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNr
ZW46OlBhY2tldCwgc2NvcGUpKSk7CisgICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJs
b2NrKSkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIGNhbGxTaXRlSW5kZXgpKSk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVn
cywgR1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFk
b3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30K
Kwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBj
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVC
bG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKIHZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29k
ZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29w
ZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2Ny
aXB0aW9uKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4
NDAsMTQgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9s
YXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRv
cCBvZgogICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQg
bG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJl
ZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcg
c2NvcGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworCitwcml2YXRlOgorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBH
UFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlSW5kZXgpOworcHVibGljOgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
R1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwg
VHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7Cisg
ICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBK
U1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50
ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAg
IHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQs
IEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogdm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVn
aXN0ZXJzKENvZGVCbG9jayogY29kZUJsb2NrKQogeworICAgIHNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyhjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK3ZvaWQgQ2FsbEZy
YW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zKQorewogICAgIFJlZ2lzdGVyU2V0IGNh
bGxlZVNhdmVSZWdpc3RlcnMgeyBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkg
fTsKLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25z
ID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAg
UmVnaXN0ZXJBdE9mZnNldCBlbnRyeSB7IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVE
YXRhLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDEzIEBAIHB1
YmxpYzoKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJnczsKICAgICB1bnNpZ25lZCBudW1M
b2NhbHMgeyBVSU5UX01BWCB9OwogICAgIHVuc2lnbmVkIG51bVBhc3NlZEFyZ3MgeyBVSU5UX01B
WCB9OworICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OyAvLyBPbiBvdXIg
bWFjaGluZSBmcmFtZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVyTWFwPFZhbHVl
UmVjb3Zlcnk+IHJlZ2lzdGVyczsKICAgICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZh
bGlkR1BSUmVnIH07CiAKICAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxv
Y2sqKTsKKyAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCopOwogI2VuZGlmCiAgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgQ2FsbEZyYW1l
U2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYQogICAgIDogbV9qaXQoaml0KQogICAgICwg
bV9vbGRGcmFtZShkYXRhLm51bUxvY2FscyArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lz
dGVycywgbnVsbHB0cikKICAgICAsIG1fbmV3RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIENhbGxG
cmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQotICAgICwgbV9hbGlnbmVkT2xk
RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCi0gICAgICAgICsgcm91
bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpKSkKKyAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJ
blJlZ2lzdGVycyArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLm51bVBhcmFt
ZXRlcnMpKQogICAgICwgbV9hbGlnbmVkTmV3RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6
ZUluUmVnaXN0ZXJzCiAgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRh
dGEuYXJncy5zaXplKCkpKQogICAgICwgbV9mcmFtZURlbHRhKG1fYWxpZ25lZE5ld0ZyYW1lU2l6
ZSAtIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSkKICAgICAsIG1fbG9ja2VkUmVnaXN0ZXJzKFJlZ2lz
dGVyU2V0OjphbGxSZWdpc3RlcnMoKSkKICAgICAsIG1fbnVtUGFzc2VkQXJncyhkYXRhLm51bVBh
c3NlZEFyZ3MpCisgICAgLCBtX251bVBhcmFtZXRlcnMoZGF0YS5udW1QYXJhbWV0ZXJzKQogewog
ICAgIC8vIFdlIGFyZSBhbGxvd2VkIGFsbCB0aGUgdXN1YWwgcmVnaXN0ZXJzLi4uCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsgKQpAQCAtNDIx
LDcgKzQyMSw3IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCBtX25ld0Zy
YW1lQmFzZSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYXJndW1lbnRDb3VudE9LID0KICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbV9uZXdG
cmFtZUJhc2UsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1faml0
LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIobV9udW1QYXJhbWV0ZXJzKSk7CiAgICAgbV9qaXQuYWRkMzIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSAr
IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwgbV9uZXdGcmFtZUJhc2UpOwogICAg
IG1faml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCkpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1f
bmV3RnJhbWVCYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3
IEBAIHB1YmxpYzoKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgZGF0YTsKICAgICAgICAg
ZGF0YS5udW1Mb2NhbHMgPSBudW1Mb2NhbHMoKTsKICAgICAgICAgZGF0YS5udW1QYXNzZWRBcmdz
ID0gbV9udW1QYXNzZWRBcmdzOworICAgICAgICBkYXRhLm51bVBhcmFtZXRlcnMgPSBtX251bVBh
cmFtZXRlcnM7CiAgICAgICAgIGRhdGEuY2FsbGVlID0gZ2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSB9KS0+cmVjb3ZlcnkoKTsKICAgICAgICAgZGF0YS5hcmdz
LnJlc2l6ZShhcmdDb3VudCgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdD
b3VudCgpOyArK2kpCkBAIC03OTgsNiArNzk5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBlcmZv
cm1TYWZlV3JpdGVzKCk7CiAgICAgCiAgICAgdW5zaWduZWQgbV9udW1QYXNzZWRBcmdzIHsgVUlO
VF9NQVggfTsKKyAgICB1bnNpZ25lZCBtX251bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
LCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgOiBKU0ludGVy
ZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgbnVsbHB0
cikKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhj
b2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCiAgICAgLCBt
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAgLTc3LDYgKzc3LDkgQEAgSklUOjpKSVQo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmls
aW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25zdGFudCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7CisgICAgbV9w
cm9maWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrID0g
Y29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtOTAs
OCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgICAg
ICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0gICAgCi0gICAgc2tpcE9w
dGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpl
eGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2Nv
ZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIHNraXBPcHRp
bWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhl
Y3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJv
bUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50
cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNiwyMCBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRl
KFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9T
ZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRv
U2V0KQogeworICAgIGF1dG8gb2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9TZXQs
IFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOworICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVhZE9u
bHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0VmFyUmVhZE9u
bHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0g
ICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJSZWFk
T25seVdhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQ
UiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2lu
dCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRk
cmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjphc3NlcnRTdGFj
a1BvaW50ZXJPZmZzZXQoKQpAQCAtMTI5LDcgKzEzNyw3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFj
a1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Qw
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CkBAIC0xODEs
MjEgKzE4OSw0MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjCiAg
ICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tU
b0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
dW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRh
YmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBicmFu
Y2hUZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5j
dGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlv
blJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFn
KSwgcmVzdWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYgKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVj
dCgpKSwgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQs
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCByZXN1bHQp
OworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKK30KKwogdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogewogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9z
ZSkKLSAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7Cisg
ICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9wcm9maWxlZENvZGVCbG9jaywgIlxuIik7
CiAgICAgCiAgICAgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICBqaXRBc3NlcnRBcmd1bWVu
dENvdW50U2FuZSgpOwogICAgIAotICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKTsKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKKyAgICB1bnNpZ25lZCBpbnN0cnVj
dGlvbkNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwog
CiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAKLSAgICBWTSYgdm0gPSBtX2NvZGVCbG9j
ay0+dm0oKTsKICAgICBCeXRlY29kZUluZGV4IHN0YXJ0Qnl0ZWNvZGVJbmRleCgwKTsKKworICAg
IC8vIE9PUFM6IE1heWJlIG9ubHkgZG8gdGhpcyBpZiB3ZSBkaXNhYmxlIHNoYXJpbmcgc29tZWhv
dz8KKyAgICAvKgorICAgIFZNJiB2bSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnZtKCk7CiAgICAg
aWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRz
PFByb2dyYW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxlUHJv
Z3JhbUNvZGVCbG9jaz4odm0pKSkgewogICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9w
dGltaXphdGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0bHkg
b25jZS4KICAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBvdGhl
cndpc2UuIFdoZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8KQEAgLTIzNiw2ICsy
NjQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CisgICAgKi8KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Ns
b3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4
LDggKzMwNyw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAg
ICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAg
ICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkp
IHsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAg
ICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVC
bG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNl
dCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5m
cCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAt
NTI3LDcgKzU1Niw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAg
ICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAgICAg
IGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAgICBp
ZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5l
IEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZz
ZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CkBAIC01NDUsOCArNTc0LDggQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9u
czo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewogICAgICAgICAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1
ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bj
b2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIs
IGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNjc0LDU1ICs3MDMs
NTUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCit2
b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMo
KQoreworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0
YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgp
KSwgc19jb25zdGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpCit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9m
ZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCiB2b2lk
IEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9j
ay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBt
X3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBzd2l0Y2ggKGxldmVs
KSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6
ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwog
ICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxp
bmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwotICAgICAgICBtX2NhbkJlT3B0
aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0g
dHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAgIHN3aXRj
aCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAg
Y2FzZSBNb2R1bGVDb2RlOgotICAgIGNhc2UgRXZhbENvZGU6Ci0gICAgICAgIG1fY29kZUJsb2Nr
LT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZ1bmN0aW9uQ29kZToKLSAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBp
dCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgotICAg
ICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgotICAgICAgICBtX2NvZGVC
bG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGxldmVsKSAmJiBERkc6
Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwotICAgICAgICBicmVhazsKLSAgICB9
CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVz
KCkgfHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVz
KCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9s
b2NrKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVt
cFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2Vy
KS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fY29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKLSAgICAgICAgaWYg
KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQot
ICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fY29kZUJsb2Nr
LT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBt
X3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
cygpKSB7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVzID0gRml4
ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxv
Y2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAg
ICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+
KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzKCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1i
bHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2Vt
YmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFr
ZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsKKyAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
ciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBvZmYgb2YgVW5saW5rZWRDb2RlQmxv
Y2suCisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+
KG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KICAgICBpZiAoVU5MSUtFTFkobV92bS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBGSVhNRTogYnVpbGQgcHJvZmlsZXIg
ZGlzYXNzZW1ibGVyIG9mZiBVbmxpbmtlZENvZGVCbG9jay4KICAgICAgICAgbV9jb21waWxhdGlv
biA9IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbigKLSAg
ICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rl
c0ZvcihtX2NvZGVCbG9jayksCisgICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVCbG9jayksCiAgICAgICAg
ICAgICAgICAgUHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1fY29tcGlsYXRpb24tPmFk
ZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJs
b2NrKTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAg
IAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29k
ZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CkBAIC03NDIsMTEgKzc3MSwxMiBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG5vcCgpOwogCiAgICAg
ZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9j
b2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgaWYgKG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAgICAgICBlbWl0UHV0Q29k
ZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7
CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
OwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Qx
KTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzU3LDE2ICs3ODcsMjAgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1vdmUocmVnVDEsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
Ci0gICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3Io
JlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOworICAgIGVtaXRNYXRl
cmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKLSAgICBpZiAobV9j
b2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAgaWYgKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VS
VCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
ewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9j
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgeworICAgICAgICBpZiAoc2hv
dWxkRW1pdFByb2ZpbGluZygpICYmICghbV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3Rv
cigpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA+IDEpKSB7CisgICAg
ICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgQ29kZUJs
b2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4ZWRWZWN0b3I8VmFsdWVQ
cm9maWxlPjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMg
aXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGlu
ZyBzaXRlICh0bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1
dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCi0gICAg
ICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50
KQorICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9y
KCkgJiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1Ro
aXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKICNpZiBV
U0UoSlNWQUxVRTY0KQpAQCAtNzc3LDEyICs4MTEsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRM
aW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxG
cmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
cGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgICAgICAgICAgICAgbG9h
ZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CiAjZW5kaWYKLSAg
ICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fY29kZUJsb2NrLT52YWx1ZVBy
b2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAg
IHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwgYXJndW1lbnQgKiBzaXplb2Yo
VmFsdWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlQo
IUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCghSklUQ29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAK
ICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAgICAgIG1fdm0tPmppdFNpemVTdGF0
aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhpcyk7CkBAIC03OTksMjQg
KzgzMywyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAg
bV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19j
YXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNl
cHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2NrKTsKKyAg
ICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ss
IHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRp
b24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIHJlZ1QwKTsKIAogICAgIC8vIElm
IHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciByZXF1aXJlIGFyaXR5IGZp
eHVwLgotICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2RlQmxvY2stPm1fbnVtUGFy
YW1ldGVycyAhPSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4
dXAgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgIT0gMTsKKyAgICBpZiAo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWly
ZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxhYmVsKCk7Ci0gICAgICAg
IHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlu
bGluZWQpOworCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgICAgIGVtaXRQ
dXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KTsKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKHJlZ1QwKTsKKyAg
ICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpv
ZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAKICAgICAgICAgbG9hZDMyKHBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMSk7
Ci0gICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX2Nv
ZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOworICAg
ICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV91bmxpbmtl
ZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwog
CiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAKICAgICAgICAg
aWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3Io
KSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVj
aywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAp
OworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24o
bV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0
QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBhcmd1bWVudEdQUjApOwogICAg
ICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIp
LmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTgzOSw3ICs4NzYsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5z
ZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3Jp
Z2luKCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+
KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
QmFzZWxpbmVKSVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0
cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV91bmxpbmtlZENvZGVCbG9jaywg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOwogICAgIGxpbmsoKTsK
IH0KIApAQCAtODU4LDggKzg5NSw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgc3dpdGNo
IChyZWNvcmQudHlwZSkgewogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlOgog
ICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyOiB7Ci0gICAgICAgICAgICBjb25z
dCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBsaW5rZWRUYWJsZS5t
X2N0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xh
YmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMu
c2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB1bmxpbmtl
ZFRhYmxlLm1fYnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3MSw4ICs5MDgsOCBAQCB2b2lkIEpJVDo6
bGluaygpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6U3RyaW5nOiB7
Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKLSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAg
ICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJl
Y29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGxvY2F0aW9uIDog
dW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAgICAgICAgICAgICAgICAg
dW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hPZmZzZXQ7CkBAIC05MDYsMzIgKzk0
MywzNSBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHJl
Y29yZC5mcm9tLCByZWNvcmQuY2FsbGVlKTsKICAgICB9CiAKLSAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2dldEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dl
dEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyht
X3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRC
eVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRz
LCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIHBh
dGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIHBhdGNoQnVm
ZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlWYWxzLCBwYXRjaEJ1ZmZlcik7
Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbnN0YW5jZU9mcywgcGF0Y2hCdWZmZXIpOwot
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMsIHBhdGNoQnVm
ZmVyKTsKKyAgICBhdXRvIGZpbmFsaXplSUNzID0gWyZdIChhdXRvJiBnZW5lcmF0b3JzKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgZ2VuIDogZ2VuZXJhdG9ycykgeworICAgICAgICAgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mby0+c3RhcnQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPihnZW4ubV9zdGFydCk7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvLT5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGdlbi5tX2RvbmUpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+
c2xvd1BhdGhTdGFydExvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91
dGluZVB0clRhZz4oZ2VuLm1fc2xvd1BhdGhCZWdpbik7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgZmluYWxpemVJQ3MobV9nZXRCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeVZhbHMp
OworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHNXaXRoVGhpcyk7CisgICAgZmluYWxpemVJQ3Mo
bV9wdXRCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9wdXRCeVZhbHMpOworICAgIGZpbmFsaXpl
SUNzKG1fZGVsQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlWYWxzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX2luQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeVZhbHMpOworICAgIGZp
bmFsaXplSUNzKG1faW5zdGFuY2VPZnMpOworICAgIGZpbmFsaXplSUNzKG1fcHJpdmF0ZUJyYW5k
QWNjZXNzZXMpOwogCiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlvbkluZm8gOiBtX2NhbGxDb21w
aWxhdGlvbkluZm8pIHsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9u
SW5mby5jYWxsTGlua0luZm87Ci0gICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKLSAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRp
b25JbmZvLnNsb3dQYXRoU3RhcnQpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CisgICAg
ICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxpbmtl
ZENhbGxMaW5rSW5mbzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24p
OwogICAgIH0KIAotICAgIHsKLSAgICAgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1
aWxkZXI7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29k
ZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgewotICAgICAgICAg
ICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQotICAgICAgICAgICAgICAg
IGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwg
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9m
ZnNldF0pKTsKLSAgICAgICAgfQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChq
aXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpKTsKKyAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRD
b2RlTWFwQnVpbGRlcjsKKyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0
ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKKyAgICAg
ICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQorICAgICAgICAgICAgaml0
Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0
XSkpOwogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHko
KSkpIHsKQEAgLTk0MCwyNiArOTgwLDM3IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICB9CiAKICAg
ICBpZiAoVU5MSUtFTFkobV9jb21waWxhdGlvbikpIHsKKyAgICAgICAgLy8gRklYTUU6IHNob3Vs
ZCB3ZSBtYWtlIHRoZSBieXRlY29kZSBwcm9maWxlciBrbm93IGFib3V0IFVubGlua2VkQ29kZUJs
b2NrPwogICAgICAgICBpZiAoT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVy
KCkpCiAgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBp
bGF0aW9uLmdldCgpLCBwYXRjaEJ1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9jb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAg
ICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2Zp
bGVkQ29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlciksIHBhdGNoQnVmZmVyKTsKICAgICAKKyAgICAvLyBGSVhNRTog
TWFrZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBV
bmxpbmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJ
TkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAg
ICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRU
eXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAg
ICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5
cGUobV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwog
ICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlD
aGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNr
KTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3
aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBh
ZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisK
KyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxz
KTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENh
bGxMaW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1v
dmUobV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJs
ZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7Cisg
ICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgp
OworICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2Rl
LT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOwogCiAgICAgaWYgKEpJ
VEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2Rl
IGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1l
bW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCkt
PmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBj
b2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5l
eGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFi
bGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0
IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5h
bGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICsxMDE5LDE1IEBAIENv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZl
ci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1f
Y29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0
ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9j
ay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxlcklu
Zm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAg
Ly8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0
aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhh
bmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9
Ci0KKyAgICAvLyBPT1BTOiBtX3BjVG9Db2RlT3JpZ2luTWFwIHNob3VsZCBsaXZlIG9uIEJhc2Vs
aW5lSklUQ29kZSBmb3IgYmFzZWxpbmUgY29kZWJsb2Nrcy4KICAgICBpZiAobV9wY1RvQ29kZU9y
aWdpbk1hcCkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1v
dmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5z
ZXRQQ1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKIAogICAg
IG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+YWRk
KAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgpKSAvCi0gICAg
ICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkp
OworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3Ry
dWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2Rl
LnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNl
bGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIENvbXBp
bGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTAzOSwxMSBAQCBzaXplX3QgSklUOjpj
b2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZlci0+c2l6ZSgpOwogfQogCi1D
b21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBkb01haW5U
aHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBjb21waWxlQW5kTGlua1dpdGhv
dXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKCk7
CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVCbG9jayk7CiB9CiAKIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKQEAgLTEwNDIsMTggKzEwODMs
MjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwogICAgICAgICBt
X3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQcmVwYXJp
bmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZyYW1lUmVn
aXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSA9
PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7CiAKICAg
ICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJPZmZzZXQoY29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
SW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNv
ZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2ludCBKSVQ6OnN0YWNrUG9pbnRl
ck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJldHVybiB2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKSAt
IDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2Rl
QmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNoTWFwPENTdHJpbmcsIFNlY29u
ZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3RyaW5nLCBTZWNv
bmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWwsIGV4cGVj
dGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQg
XCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxp
bnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAorI2luY2x1ZGUgIkJh
c2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbW1v
blNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgpAQCAtNDQsNiArNDUs
NyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgorI2luY2x1ZGUgIkxMSW50RGF0
YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9p
bnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTE0OSwxNCArMTUxLDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5m
byB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2Vk
Q2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5r
SW5mb0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0Nh
bGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJp
dmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQg
OiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1Bh
dGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEsNiArMTczLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3Qg
YmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAorICAgICAgICB1c2luZyBC
YXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENv
ZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zm
c2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTE3OCwyOCArMTgy
LDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRl
cmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZp
bmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwotICAgICAgICBDb21waWxhdGlvblJlc3Vs
dCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5h
bGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkg
Y29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBp
bGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxl
KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9y
dCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZz
ZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBj
b2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9y
dCk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNv
dW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFt
ZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQg
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMo
KTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21waWxl
VGltZSgpOwogCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIg
PSBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSOworICAgICAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzX2NvbnN0YW50c0dQUiA9IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSOwor
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAg
ICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgICAgICB2b2lkIHByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAgICAgIHZvaWQgbGluaygpOwotICAgICAgICBDb21w
aWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAg
ICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKENvZGVCbG9jayosIEpJVENvbXBp
bGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2Rl
LCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCkBAIC0yMjMsNiArMjMy
LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0
YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0
YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRh
KGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9p
ZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zm
c2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZv
aWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZz
ZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9p
ZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qg
b2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVibGljOgorICAgICAgICB2b2lkIGxvYWRDb25zdGFu
dCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgIHByaXZhdGU6CisgICAgICAg
IHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRDb2RlQmxv
Y2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisKKyAgICAgICAgdm9pZCBlbWl0
UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1QwKTsKKwog
ICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRvSGFuZGxlcikKICAgICAgICAg
ewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpA
QCAtMjU4LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9w
OjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgJiYgT3A6Om9w
Y29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9D
b25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdz
IHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwg
T3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlu
a0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAg
IGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4NywxNCArMzIyLDE1IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVt
aXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3du
ZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAogICAg
ICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdU
MCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICAvL3ZvaWQgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOworICAgICAgICAvL3ZvaWQg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBC
eXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgSlNW
YWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdz
KTsKQEAgLTMwNSw4ICszNDEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5h
YmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwg
VmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsKIAotICAgICAgICB2b2lkIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZSos
IFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7Ci0gICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVH
UFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29u
c3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBwdHJkaWZmX3QsIFJl
Z2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKIAogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3ApOwpAQCAtNTkz
LDcgKzYzMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBz
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNywxNCArNjY0LDE0IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVk
KTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZp
cnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nl
c3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVy
IGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1v
bihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0VmFyUmVh
ZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNo
ZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAgICAgIHZvaWQg
ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICAg
ICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBk
ZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJl
Z2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxV
RTY0KQpAQCAtNjQ2LDcgKzY4Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAg
IHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qg
b3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsK
LSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAg
ICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsK
ICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1
dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0
Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NSw2ICs2OTIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tu
b3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50
KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZp
cnR1YWxSZWdpc3Rlcik7CkBAIC02OTYsMjYgKzczNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBl
ID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwogICAg
ICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2
ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0g
ICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVS
QVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21T
Y29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwotCi0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBNb2R1bGVWYXIg
YmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRo
dW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2ZWRDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3Qg
dXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29wZS4KLSAgICAgICAgICAgIHJldHVy
biAhKHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBN
b2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNkZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVy
YXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZF
X1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9S
Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0
ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7
CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdl
bmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+
LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mLCBz
dGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKIAogICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlz
RmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mKTsKQEAgLTc2MCwx
MCArNzgwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2
b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3Ms
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgQWRk
cmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwg
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29u
c3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAg
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlw
ZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjEsMjAgKzg0MSwyMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7CiAgICAgICAg
IH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0
aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0
ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3Vs
dCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5
dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4g
QXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUg
Qnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVu
Y3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQs
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyB0YXJnZXQs
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAg
ICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0
LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRyZXNzKEdQUkluZm86
Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
Ynl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJl
c3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25U
eXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE5LDI1ICs5MzksMjAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgp
IHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXpl
ZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAg
ICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmls
aW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGll
cmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxs
IGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkg
eyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgZW1pdE1hdGVyaWFsaXpl
TWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAgICAgICB2b2lkIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxl
VGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAg
ICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBt
ZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVu
dCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhp
cy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUg
cmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dElu
Zm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0g
ICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwog
CiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjQsOSArOTc5LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dD
YXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAotICAgICAg
ICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAg
ICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJv
ZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1
bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEwMDAsMTEgKzEwMTIsMjQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElD
R2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwog
CiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0
aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAg
ICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAg
ICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAgICAgICAgQ29kZUJsb2NrKiBt
X3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBVbmxpbmtlZENvZGVCbG9j
ayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKworICAgICAgICBNYXRoSUNIb2xk
ZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENvZGU7
CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAgICAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgQmFnPFVubGlua2VkQ2FsbExp
bmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZh
bENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBt
X3VubGlua2VkU3R1YkluZm9zOworICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+
IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxl
PiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAgc3RydWN0IE5vdEFDb2RlQmxv
Y2sgeyB9IG1fY29kZUJsb2NrOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwg
aXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIw
KTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMjAsNyArMzIx
LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9
CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Mik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1Qx
KTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8g
OiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBy
ZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzc1LDggQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
cmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAK
QEAgLTU3Myw3ICs1NzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29u
c3QgCiAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3Ay
LCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKQEAgLTcxNyw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0
IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9jb2RlQmxvY2st
PmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVROZWdJ
QyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBt
X2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOwog
ICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25W
YWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
bkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5
MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQg
SklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwot
ICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2Zp
bGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRD
b2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRk
PigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3MuYWRk
SklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRp
b25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0
aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBp
ZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1p
dFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmls
ZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwg
c3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2Fz
ZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUsMTAgKzEw
MjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgICAg
ICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwg
bGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwxMyArMTA2Miwx
NCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAjZW5kaWYKIAog
ICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmls
ZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVn
VDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWlu
dGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1Jl
Z3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0
PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdU
NCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lD
X1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwxMyArMTEy
OCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAjZW5kaWYK
IAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFBy
b2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9m
aWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJh
dGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNl
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpf
SklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklU
T3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUo
TUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExNjYs
NyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAog
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAgICBpZiAo
c2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlB
cml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tX3Byb2ZpbGVJbmRl
eCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRU
eXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUu
bV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjIwLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigp
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVs
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlB
cml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tX3Byb2ZpbGVJbmRl
eCk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFyaXRoUHJv
ZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24s
IG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQpA
QCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0
cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3Vi
SUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFN1Yj4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUU3ViSUMqIHN1YklDID0g
bV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRv
TWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFz
dDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyAr
MjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAgICAgc3RvcmVQdHIo
Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVP
ZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJl
Z1QxLCByZWdUMik7CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKGNvbnN0IAogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwog
ICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBp
bmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxp
Z25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zMjQsNyAr
MzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGFk
ZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENh
bGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDcgKzM0MSw2IEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1Bh
dGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29u
c3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJD
YWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJ
VElubGluZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2lu
Y2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC00NCw3ICs0NSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29u
c3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRp
b25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdp
c3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDE4ICs1NCwxOCBAQCBzdGQ6OmVuYWJsZV9pZl90
PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9
IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2Fs
bF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBD
YWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUs
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9
IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5nVGhp
cyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsK
ICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNldElu
UmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCisKICAgICBpZiAoT3A6
Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsg
Q2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAg
ICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAg
ICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0YSwgY2hlY2twb2ludCku
YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRh
dGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5m
bygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVBy
b2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyArNzksNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAg
IE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2Nv
bnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwg
dm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlu
a0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtOTEsNyAr
OTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAg
IHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwog
ICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZh
cmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZp
cnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAgICBjYWxs
T3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVy
LCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJl
Z2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZh
bHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0o
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNr
QWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEwMywxNiBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0
dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlv
biA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBP
cGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1QzLCByZWdU
MSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5WYWx1
ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZz
ZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihB
Ym92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZN
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExp
bmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExp
bmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7
CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7Cisg
ICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RCaWdnZXN0LmxpbmsodGhp
cyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEzMSwxNiBA
QCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wg
SklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0
cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFt
ZU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFy
Z3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRD
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHJlZ1QxLCByZWdUMik7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5
KHJlZ1QwKSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1
ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShy
ZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogCkBA
IC0xNDgsNyArMTUyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0
IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9j
b2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwor
ICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6
Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJn
djsKQEAgLTE1Niw0MyArMTYwLDQ3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9m
KFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1f
dm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0ds
b2JhbE9iamVjdCgqbV92bSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29u
c3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKLXsKK2Jvb2wgSklUOjpjb21waWxlVGFp
bENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50KSB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+
Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBD
YWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQorYm9vbCBKSVQ6
OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxs
TGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewotICAgIENhbGxGcmFtZVNodWZm
bGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRl
Y29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZv
OjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQorICAgIHN0
ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5p
cXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOworICAgIHNodWZmbGVEYXRhLT5udW1QYXNzZWRB
cmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAgIHNodWZmbGVEYXRhLT5udW1QYXJhbWV0ZXJzID0g
bV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworICAgIHNodWZmbGVEYXRhLT5u
dW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworICAgIHNodWZm
bGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLmFyZ3Mu
cmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1ZmZsZURhdGEtPmFyZ3MucmVzaXplKGJ5
dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1f
YXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAgICBzaHVm
ZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJ
bkpTU3RhY2soCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNs
dWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAgICAgICAgIERhdGFGb3Jt
YXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAgICAgIFZhbHVlUmVj
b3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotICAgIHNodWZmbGVEYXRhLnNldHVw
Q2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7Ci0gICAgaW5mby0+c2V0RnJhbWVTaHVm
ZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVj
b3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgIHNodWZmbGVEYXRhLT5zZXR1
cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGluZm8t
PmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6
VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCBz
aHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgbG9hZENvbnN0YW50KGNhbGxM
aW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExp
bmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBb
Jl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgKnNodWZmbGVEYXRhKS5wcmVw
YXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwor
CisgICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CisgICAgaW5mby0+ZnJhbWVTaHVmZmxl
RGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBs
YWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9u
ZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjE4LDE0ICsyMjYsMjUgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBp
bml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3Jl
cyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KLSAgICBDYWxsTGlua0lu
Zm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0g
ICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOwor
CisgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0gVUlOVF9NQVg7CisgICAgaWYgKG9wY29k
ZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBpbmZvID0gbV91bmxpbmtlZENhbGxzLmFk
ZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
ICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQp
OworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAgICAgQVNTRVJUKG1fY2Fs
bENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBt
X2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CisgICAg
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5saW5rZWRDYWxs
TGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50OworICAgIH0KKyAg
ICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAogICAgIC8vIFNQ
IGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1
bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29kZUJs
b2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgpA
QCAtMjM0LDE2ICsyNTMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0lu
Zm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Io
b3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxs
Q29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChjb21waWxlVGFpbENhbGwo
Ynl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBpZiAoY29tcGlsZVRhaWxD
YWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFudCwgcmVnVDIpOwog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMg
PSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENh
bGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdU
MiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAg
ICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9KTsKQEAgLTI1Mywx
MyArMjY4LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZh
c3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMp
OworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwog
ICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5r
ZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAog
ICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCArMjg4LDIwIEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMp
OworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7Cisg
ICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlzLCByZWdUMik7
CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxs
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcgKzQxMCwzMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwor
ICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwo
KSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNjZXNz
VHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
Qnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6
OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFw
cGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0
R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQpAQCAtNDE2
LDEwICs0NDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNr
cG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEdQ
UlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAg
bm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsKICAgICBub3RP
YmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBAIC00MzIsMTkg
KzQ1OCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAg
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JHUFIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0Jp
dHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRlcmF0b3JHUFIs
IGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBhdXRvIGRvbmUg
PSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0
SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CkBA
IC00NTIsNyArNDc2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29u
cwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJh
dG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKICAgICAgICAg
c3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5hcnJvdzogcmV0
dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0OTMsNzcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1bXAgZmFzdENh
c2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAK
ICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0ZUFkZHJlc3Mo
Jm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAgbG9hZDhGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVy
YXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rl
cygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4o
SXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShy
ZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRp
b25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rlcygp
KTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIC8v
IGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAgICBH
UFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1Qy
OwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3aWxs
IGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2YWx1
ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJl
ZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2Ji
ZXJSZWdpc3RlcjsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7
CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChp
dGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZh
bHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdz
LmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0
R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwg
SlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIs
IEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4p
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdz
IHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
SlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3Bv
aW50KCk7CiAgICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qy
OwotICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQg
dXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRl
U2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRv
ci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9u
RG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNo
MSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChnbG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJh
bmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBn
bG9iYWxHUFIpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbW92ZShpdGVy
Q2FsbFJlc3VsdEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+
dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAg
ICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAog
ICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1Nzcs
NTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1
bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyOworCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BS
UmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFw
cGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlx
dWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwog
ICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0
R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNh
bGxSZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0Jp
dHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92
ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29k
ZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3Qu
bGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9y
UmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFy
Z3VtZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBV
bmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwo
KTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5
SWRJbmRleCsrXTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAot
ICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86
Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBH
UFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVl
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJl
c3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0
LmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBERkcgewpAQCAtMTU5LDEwICsx
NjAsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0
VHlwZSkKICAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShq
aXRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6
OnVzZURhdGFJQygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4g
T3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBA
IC00NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5m
CiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBl
KQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHVi
SW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1f
c3R1YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUs
IGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNp
dGVJbmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVz
ZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3I6OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93
UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewog
ICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9j
YXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAK
ICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUg
QEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5m
by0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91
dGluZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25l
ZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIG1fc3RhcnQgPSBqaXQubGFi
ZWwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7
CisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGppdC5j
YWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIG1fZG9uZSA9
IGppdC5sYWJlbCgpOworfQorCiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKAog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAog
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBK
U1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTEwLDcgKzExOCw3IEBA
IEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxT
aXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAg
IENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUp
CiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwg
Y2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5m
b0dQUikKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVC
bG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAgICwgbV9pc0xlbmd0
aEFjY2Vzcyhjb2RlQmxvY2sgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9jay0+dm0o
KS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJh
c2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAgLTEyMCw2ICsxMjgsMzQg
QEAgdm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIGdlbmVyYXRl
RmFzdENvbW1vbihqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNpemVGb3JM
ZW5ndGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwog
fQogCit2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAg
ICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZv
LCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6c2NyYXRjaDsKKyAgICBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpyZXN1bHQ7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQu
bG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIGdvU2xvdyA9IGppdC5icmFuY2gzMihDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUo
KSkpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7Cisg
ICAgaml0LmxvYWRQcm9wZXJ0eShiYXNlLCBzY3JhdGNoLCBKU1ZhbHVlUmVncyB7IHJlc3VsdCB9
KTsKKyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIGdvU2xvdy5saW5rKCZq
aXQpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OworCisgICAgZmluaXNoZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsK
K30KKworCiBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dl
bmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdz
IHZhbHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0
dWJJbmZvR1BSKQpAQCAtMTM4LDYgKzE3NCwzNCBAQCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dl
bmVyYXRvcjo6Z2VuZXJhCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNz
OjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKK3ZvaWQgSklUR2V0QnlJZFdpdGhUaGlz
R2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2ln
bmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
SklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJl
bCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworCisg
ICAgLy8gT09QUzogc2hhcmUgY29kZSB3LyBKSVRHZXRCeUlkR2VuZXJhdG9yCisgICAgR1BSUmVn
IGJhc2UgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJS
ZWcgc2NyYXRjaCA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzY3JhdGNoOwor
ICAgIEdQUlJlZyByZXN1bHQgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVz
dWx0OworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaCk7CisgICAgYXV0byBnb1Nsb3cgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJz
OjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsK
KyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGpp
dC5sb2FkUHJvcGVydHkoYmFzZSwgc2NyYXRjaCwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7Cisg
ICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBnb1Nsb3cubGluaygmaml0KTsK
KyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKwor
ICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisK
IEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2Fj
aGVhYmxlSWRlbnRpZmllciwKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1
ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgCkBAIC0xNDksNiArMjEzLDM0
IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IKICAgICBtX3N0dWJJ
bmZvLT51c2VkUmVnaXN0ZXJzLmNsZWFyKHNjcmF0Y2gpOwogfQogCit2b2lkIEpJVFB1dEJ5SWRH
ZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWdu
ZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChK
SVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVs
KCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisKKyAg
ICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJS
ZWcgc2NyYXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBHUFJS
ZWcgc2NyYXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIEdQ
UlJlZyB2YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAg
ICBhdXRvIGdvU2xvdyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3Jh
dGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5sb2FkMzIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0LnN0b3JlUHJvcGVydHko
SlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBiYXNlLCBzY3JhdGNoLCBzY3JhdGNoMik7CisgICAgYXV0
byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBnb1Nsb3cubGluaygmaml0KTsKKyAgICBq
aXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZp
bmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIHZvaWQg
SklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0
KQogewogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclBy
b3BlcnR5UmVwbGFjZSgpKTsKQEAgLTMwMCw2ICszOTIsMzIgQEAgdm9pZCBKSVRJbkJ5SWRHZW5l
cmF0b3I6OmdlbmVyYXRlRmFzdFBhdAogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGlu
ZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCit2b2lkIEpJVEluQnlJZEdl
bmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25l
ZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJ
VENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwo
KTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKworICAg
IEdQUlJlZyBiYXNlID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVn
IHJlc3VsdCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgR1BSUmVnIHNj
cmF0Y2ggPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGF1
dG8gZ29TbG93ID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmJveEJvb2xlYW4o
dHJ1ZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5q
dW1wKCk7CisKKyAgICBnb1Nsb3cubGluaygmaml0KTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQ
dHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7
CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6
OkpJVEluc3RhbmNlT2ZHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5
cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXgsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHByb3RvdHlwZSwgR1BSUmVnIHN0dWJJbmZvR1BSLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRl
ICJKSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCkBAIC0zOCwxMSAr
MzksMTE4IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNs
YXNzIENhbGxTaXRlSW5kZXg7CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBT
dHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBl
bnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50
OF90OwogCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxC
eUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpy
ZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVn
VDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVF
bnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6cmVnVDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBh
IENvZGVCbG9jayBhbmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHVi
SW5mby4KKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZv
ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cHJvdG8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVj
dCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpy
ZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBkb250Q2xvYmJlclJlZ2lzdGVyID0g
R1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB0aGlzVmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307
CisKK3N0cnVjdCBCYXNlbGluZUluQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKK307CisKK3N0cnVjdCBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9
IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0g
R1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQ
UkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BS
SW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBwcm9maWxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJy
YW5kID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCiBjbGFzcyBKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvciB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Io
KSB7IH0KQEAgLTYyLDE1ICsxNzAsMjEgQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAg
ICAgICAgIExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1Bh
dGhMaW5rQnVmZmVyLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4gc3RhcnQpOwotICAgIAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BS
KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7
IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoK
LSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAg
IFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwotICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1f
c2xvd1BhdGhDYWxsOyAvLyBPT1BTOiBtYWtlIHJlcG9ydENhbGwgcGFzcyBzb21ldGhpbmcgaW4g
d2UgY2FuIHVzZSBmb3IgdGhlIG5vbi1DVEkgdGh1bmtzIGJ1aWxkcy4gCiB9OwogCiBjbGFzcyBK
SVRCeUlkR2VuZXJhdG9yIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTk4
LDcgKzIxMiw3IEBAIHByb3RlY3RlZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNW
YWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0Owor
cHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApA
QCAtMTExLDYgKzIyNSw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNW
YWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSk7CiAgICAgCiAg
ICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFu
dCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIAogcHJpdmF0ZToKICAgICBib29sIG1faXNMZW5ndGhB
Y2Nlc3M7CkBAIC0xMjQsNiArMjM5LDcgQEAgcHVibGljOgogICAgICAgICBDb2RlQmxvY2sqLCBK
SVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFs
dWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc3R1Yklu
Zm9HUFIpOwogCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwg
dW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICB2b2lk
IGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIH07CiAKQEAgLTEzMiwxMCArMjQ4
LDExIEBAIHB1YmxpYzoKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAg
ICAgSklUUHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29k
ZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFsdWVS
ZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwg
UHV0S2luZCk7CisgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxT
aXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVu
dGlmaWVyLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BS
UmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOwogICAg
IAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQg
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29u
c3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAgICAgCiAgICAgVl9KSVRPcGVyYXRpb25fR1Nz
aUpKQyBzbG93UGF0aEZ1bmN0aW9uKCk7CiAKQEAgLTE2MywxMSArMjgwLDkgQEAgcHVibGljOgog
CiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6
CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0
Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTE5MSw4ICszMDYsNiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJp
dmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjks
NiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXIm
KTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0
MSw4ICszNTIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9B
c3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFy
dDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07
CiAKQEAgLTI1NSw2ICszNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2Us
IEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiAgICAgdm9pZCBnZW5l
cmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0
dWJJbmZvR1BSKTsKIH07CiAKIGNsYXNzIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZmluYWwgOiBw
dWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewpAQCAtMjc3LDggKzM4Nyw2IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBM
aW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1w
IG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzAyLDExICs0MTAsOSBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6
CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0OwogCi0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBh
dGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMzAsOCArNDM2LDYgQEAgcHVi
bGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwog
Ci1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxMyArMzUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6
OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0
dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUo
KTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
aXNEb3VibGUoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29u
c3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICgh
c3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBP
T1BTOiBmaW5kIGEgd2F5IHRvIGFzc2VydCB0aGF0IGFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFy
ZSBjZWxscy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJ
VDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJU
KHNyYy5pc0NvbnN0YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
c3JjKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAg
LTE1NiwzNiArMTgxLDM2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRo
RXgKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
K3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1
bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVl
R1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQ
UjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNl
bHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0
dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIp
KTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAg
aWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAK
QEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2Fz
ZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1f
Ynl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hl
Y2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAog
ICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgs
IGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRv
TmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVj
a3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJ
bmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBB
U1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hl
Y2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExh
YmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwzMyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJl
dHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5n
KCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgo
KSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQotewotICAgIEFTU0VS
VChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29u
ZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAot
ICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIo
KSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQotICAgIEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+
KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigp
LCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwotICAgIHN0b3JlMzIodmFsdWUudGFnR1BS
KCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgotfQorICAgIGlmICghc3JjLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3Ry
aW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30K
KworLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxl
JiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQorLy97CisvLyAgICBBU1NFUlQoc2hv
dWxkRW1pdFByb2ZpbGluZygpKTsKKy8vCisvLyAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25m
aWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0Cisv
LyAgICAvLyBzdG9yZS4KKy8vI2lmIFVTRShKU1ZBTFVFNjQpCisvLyAgICBzdG9yZTY0KHZhbHVl
LmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vI2Vsc2UKKy8vICAgIEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVz
Y3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8gICAgc3RvcmUzMih2YWx1ZS5w
YXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7CisvLyAgICBzdG9yZTMy
KHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7CisvLyNlbmRpZgorLy99
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjpp
c19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6
dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUo
T3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsNDEgKzM1Miw0MiBAQCBpbmxpbmUgc3Rk
OjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0
IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKSksIHZhbHVlKTsKKworICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyB2YWx1ZVBy
b2ZpbGVPZmZzZXRGb3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpICsg
VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7CisgICAgc3RvcmU2NCh2YWx1ZS5n
cHIoKSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBvZmZzZXQpKTsKIH0KIAogI2lmIFVTRShKU1ZB
TFVFNjQpCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9m
aWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyByZXN1bHRSZWcpCi17Ci0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwotfQorLy9p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1
ZVByb2ZpbGUsIEdQUlJlZyByZXN1bHRSZWcpCisvL3sKKy8vICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKy8vfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVn
KSk7CiB9CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwg
UmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5s
aW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQg
Y2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQogewogICAgIGlmIChzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpIHsKICAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBz
dG9yZTMyKHNjcmF0Y2hHUFIsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1
cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUs
IG9mZnNldE9mQXJyYXlQcm9maWxlKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJ
RCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdp
c3RlcklEIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewot
ICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRj
aEdQUiwgQWRkcmVzcyhhcnJheVByb2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0
U2VlblN0cnVjdHVyZUlEKCkpKTsKLSAgICB9CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxl
KCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BS
LCBzY3JhdGNoR1BSKTsKIH0KIAogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCkBAIC0zODAsNyArNDEwLDcgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7
CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUo
VHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTI2LDcg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQog
ewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlz
S25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTM2LDcg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBS
ZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcp
KSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpA
QCAtNTE0LDExICs1NDQsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFu
dEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50
KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU2
OSwxNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNT
RVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRl
eCBpcyBzZXQuCiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFs
dWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZSkpLCBkc3QpOwotICAgICAgICBlbHNlCisgICAgICAgIHN3aXRjaCAobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkgewor
ICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAgICAg
Y2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAg
ICAgICAgICBtb3ZlKEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxv
YWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01NjYsMTEgKzU5Nyw2IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXND
b25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9y
KGRzdCkpOwpAQCAtNTk1LDcgKzYyMSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd0Nhc2UKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBp
ZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxs
KHZSZWcpKQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApA
QCAtNjM3LDMwICs2NjMsNyBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29u
c3QgCiB7CiAgICAgaWYgKHRhcmdldCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1
cm4gbV9jb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1B
TFdBWVNfSU5MSU5FIEdldFB1dEluZm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29w
ZSBieXRlY29kZSkKLXsKLSAgICB1bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQg
KyAxOyAvLyBIYXNoTWFwIGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRv
ciA9IG1fY29waWVkR2V0UHV0SW5mb3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBt
X2NvcGllZEdldFB1dEluZm9zLmVuZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVy
YXRvci0+dmFsdWUpOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2dldFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5h
ZGQoa2V5LCBnZXRQdXRJbmZvLm9wZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0
aFByb2ZpbGUgSklUOjpjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0g
ICAgdWludDY0X3Qga2V5ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2Rl
SUQpICsgMSkgPDwgMzIgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0
YUlEKTsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5
KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAg
ICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0
aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
Ci0gICAgbV9jb3BpZWRBcml0aFByb2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAg
cmV0dXJuIGFyaXRoUHJvZmlsZTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0
T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgpAQCAtNjgxLDYgKzY4NCw2MSBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1v
ZGU8T3BQCiAgICAgcmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRh
ZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1
bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2Rl
QmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNl
dCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3Mo
c19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1l
dGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVz
dWx0KQoreworICAgIGxvYWQ4KEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVC
bG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0
KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUg
Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKFZhbHVl
VHlwZSB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQorewor
ICAgIHN0b3JlOCh2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJs
b2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQp
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6c3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVzcyhzX21l
dGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRh
dGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5
dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJl
c3VsdCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHNfbWV0
YWRhdGFHUFIsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25z
dGFudChKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1
bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KGNvbnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2Fk
Q29uc3RhbnQobV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25z
dGFudCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0Nv
bnN0YW50KCkpOworICAgIC8vIE9PUFM6IE1heWJlIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudD8K
KyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3Rh
bnRzVmVjdG9yQnVmZmVyKCkpLCByZXN1bHQpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlc3VsdCwg
Y29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2YoSlNWYWx1ZSkpLCByZXN1bHQpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
YXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpjYWxs
RnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JD
YXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlv
bklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC05OTcsNyArOTk3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogCiAgICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9z
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRj
aFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRj
aFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5s
aW5rZWRUYWJsZSk7CiAKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9jaGFyKGNvbnN0IEluc3QKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0
Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3Qg
VW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwg
bV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rlcikp
OwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0x
MDQyLDcgKzEwNDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IElu
CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJh
Y2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmlu
Z0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJ
bmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1f
Ynl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAg
ICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw2ICs0Myw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVk
ZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIu
aCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTQsMTEgKzU2
LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3Rh
bnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50
KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3Jl
NjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkp
OwotICAgICAgICBlbHNlCisgICAgICAgIC8vIE9PUFM6IG1vc3QgIk90aGVyIiBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24gY29uc3RhbnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQgZnJvbSB0aGUgVW5s
aW5rZWRDb2RlQmxvY2suIEl0J3MganVzdAorICAgICAgICAvLyBhIGNvdXBsZSB0eXBlcyB0aGF0
IGNhbid0LiBDcmVhdGUgYW4gYWJzdHJhY3Rpb24gZm9yIHRoYXQuCisKKyAgICAgICAgc3dpdGNo
IChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihz
cmMpKSB7CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgor
ICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKICAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFk
ZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDApOwor
ICAgICAgICAgICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODcsMzcg
KzEwMCwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFs
bG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9
IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25j
dXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JG
b3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9
IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0
ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSBy
ZWdUMzsKIAotICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OwotICAgIGVsc2UgewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8g
YnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRl
SlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFs
bG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hS
ZWcsIHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1
bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5j
ZSgqbV92bSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFs
bG9jYXRvcigpLCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVj
dHVyZVJlZyk7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkg
PSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3Vs
dFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJl
ZywgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Mo
c3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNo
UmVnKTsKKyAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNo
UmVnKTsKKyAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVS
ZWcgPSByZWdUMzsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwog
ICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTEzMSw3ICsx
NDIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKICAgICAvLyBX
ZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8u
Ci0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9u
UHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QxKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90
RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmpl
Y3QsIG1fZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24pKSk7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CiAKQEAgLTE1NCwzMCAr
MTY2LDM4IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3Bl
cmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lz
dGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBk
b25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3Vs
dC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvdG9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
SW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywg
cHJvdG9HUFIpOwogICAgIAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNl
VmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9y
IFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3Rv
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJ
VEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAg
cmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVnVDQpOyAv
LyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgICAgIHJlc3VsdEdQUiwKKyAgICAgICAgdmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BS
LAorICAgICAgICBzdHViSW5mb0dQUiwKKyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjpzY3JhdGNoMSwgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisK
KyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0
YW5jZU9mOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdl
bik7Ci0gICAgCisKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5
MiwxNCArMjEyLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkK
ICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFu
Y2VPZk9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShv
cGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MiwgcmVnVDEpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJ
bmZvID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnZhbHVlID09IGFyZ3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChC
YXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3Bl
cmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBy
ZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudEdQUjMpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5z
dHJ1Y3Rpb24qKQpAQCAtMjQwLDcgKzI1OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9p
c191bmRlZmluZWQoY28KIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQ
dHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwogCkBAIC0zNzQsNyArMzkzLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lz
dGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAg
ICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwogI2Vsc2UKQEAgLTM4Myw5ICs0
MDIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiB9CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3Io
Vk0mKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBq
aXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZl
UmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQzMCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3By
aW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVy
dHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQsOSAr
NDUyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZvaWQg
SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0
aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlv
biwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
bmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
b3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0ODQs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5j
aElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsK
ICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNGYWxz
ZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzUwMSw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyArNTQw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8vIEZp
cnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBi
aXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJn
ZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7
CiAKQEAgLTU0Myw3ICs1NjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3Qg
SW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRh
cmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTU4MiwxNSAr
NjAzLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KIHZvaWQg
SklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVx
UHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEpT
VmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVj
aWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4
KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICBsb2FkQ29kZUJs
b2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAgIENDYWxs
SGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNvZGUsIE9wSm5lcVB0cjo6
TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOwogICAgIGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC02MjUsOCArNjQ0LDEwIEBAIHZvaWQg
SklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGds
b2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0
R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVl
KSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTY0MCw3ICs2NjEsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNjk1LDcgKzcxNiw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAgICAganVt
cFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTcxMSw3ICs3MzMsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3Bf
dGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSBhcmd1bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB0aHJvd25WYWx1ZUdQUiA9
IGFyZ3VtZW50R1BSMTsKQEAgLTcyMCw3ICs3NDIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVS
UyA+IDAKICAgICBqaXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgYXJndW1lbnRHUFIwKTsK
LSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBs
KGFyZ3VtZW50R1BSMCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKGFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwpAQCAtOTA4LDcgKzkzMCw4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQog
CkBAIC05MTgsNyArOTQxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29u
c3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0
cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MzEsNyArOTU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk3NSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsK
ICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdFZSZWcpOwogfQpAQCAtOTc4LDcgKzEwMDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
b19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAg
IGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0VlJlZyk7CiB9CkBAIC05OTMsNyArMTAxNywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRj
aChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJh
bWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRj
aE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gT09QUzog
VGhpcyBpc24ndCBlbGVnYW50LiBXaHkgYXJlbid0IHRoZXkgaW4gdGhlIGNhbGxlZSBzYXZlIGJ1
ZmZlci4gSSBndWVzcyBiZWNhdXNlIHdlIGNhbiBPU1IgZXhpdCBoZXJlPworICAgIGVtaXRNYXRl
cmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKICAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9u
SWZDYXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzgsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3Vt
ZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVm
ZmVyOwotICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNo
LCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFu
ZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5k
VmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRv
IHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBF
eGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAg
ICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXIt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsK
LSAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUp
LCByZWdzKTsKLSAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQog
fQogCkBAIC0xMDUzLDggKzEwNjgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNv
bnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2Ny
dXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlv
bnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2st
PnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJs
ZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5NiwxNCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRj
aEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVj
b3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVj
b3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtl
ZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBl
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJs
ZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25L
ZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRU
YWJsZS5tX21pbik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcp
OwogfQogCkBAIC0xMDk5LDIwICsxMTE1LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9z
dHJpbmcoY29uc3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUu
bV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3Rp
bmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91
bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
dGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6
OlN0cmluZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRl
eCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1
Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBK
dW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0
ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhp
cyk7CkBAIC0xMTMzLDcgKzExNTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0
IEluc3RydWN0CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKQEAgLTExNDgsNyArMTE2Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29u
c3QgSW5zdHJ1Y3QKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xMTY2LDcgKzExODMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0
cnVjCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFs
LCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAo
KTsKQEAgLTExODgsMTIgKzEyMDUsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBp
bml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9p
bnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBs
aWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBt
X2NvZGVCbG9jay0+bnVtVmFycygpOworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPm51bVZhcnMoKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9y
IChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rl
cih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1f
Y29kZUJsb2NrKTsKKyAgICAKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAg
ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCkBAIC0xMjEyLDcgKzEyMzEsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2go
WDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMTMxMCwyMyArMTMyOSwxOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNh
Y2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0
cnVjdHVyZUlELCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRv
VGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVh
dGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJy
aWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxl
ZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFy
ZURhdGFSZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAt
MTM0Miw3ICsxMzU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5z
dAogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVX
aXRoUHJvdG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFU
YWcpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVu
Y3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNo
ZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wQ3JlYXRlVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkQ2FsbGVlKCks
IGNhY2hlZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBi
cmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6
c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRy
KE5vdEVxdWFsLCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11
bHRpcGxlQ2FsbGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzg3LDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJl
Z1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFs
dWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzk4LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgx
KSwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDExLDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQyMiw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVn
VDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzNywxMSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihjb25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIzKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CiB9CkBAIC0xNDMwLDcgKzE0NTAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2st
Pmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5n
KCkgJiYgbV91bmxpbmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5n
RWFybHlSZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BI
aW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCBy
ZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3Bz
TGltaXQoKSkpOwpAQCAtMTQ0MCw3ICsxNDYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9o
aW50KGNvbnN0IEluc3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZgotICAgICAgICBtb3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsx
NDczLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAg
Ly8gRW1pdCB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1p
emVkKCkpIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVP
clplcm8sIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9y
TG9vcCgpKSwKLSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVz
c09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAt
MTUwOSw3ICsxNTMwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0
IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywg
YXJndW1lbnRHUFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1MjIsNyArMTU0NCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9jaGVja190cmFw
c19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3Rl
cnM6OmVicCk7CkBAIC0xNTY0LDM0ICsxNTg2LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19y
ZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQocmVnZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBhcmd1bWVudEdQUjA7
CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29k
ZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJl
dHVyblZhbHVlR1BSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1p
dE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBKdW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
LCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhl
YyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwor
ICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpGdW5jdGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3Rh
bnQsIGFyZ3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJ
RDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9w
X25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVj
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0
aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQog
CkBAIC0xNjIxLDIzICsxNjQ1LDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24o
Y29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3Vt
ZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBy
ZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BS
MSk7CiAjZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVC
bG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNv
bnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rp
b25FeHByLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNv
ZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVu
dEdQUjIpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYg
KG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5l
cmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdf
YXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBv
cF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9
CiB9CiAKQEAgLTE2NjQsMjkgKzE2ODksMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5j
X2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUu
bV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwg
c2l6ZSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIyKTsKKyAgICBt
YXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFk
YXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlf
d2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXpl
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRh
dGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2lu
dGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRh
KGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxs
b2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEs
IHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQ
cm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwK
LSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywg
cmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTQs
OCArMTcyMCw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUzogRG91YmxlIGNoZWNrIHRoYXQgd2UgdHVybiBv
ZmYgdW5saW5rZWQgY29kZSBjYWNoaW5nIHdoZW4gdGhlIHR5cGUgcHJvZmlsZXIgaXMgZW5hYmxl
ZC4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVU
eXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0
YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBi
eXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTc3NywyMCArMTgwNCwyNCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgc3RhdGljX2Fz
c2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxs
IGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BS
UmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5v
bkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBH
UFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0
KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBi
ZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0g
cmVnVDI7CisgICAgICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFj
a2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIH0KICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1Qz
LCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOworICAgIGxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVn
VDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAK
ICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2Nv
bnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAg
IC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2Fj
aGluZyB3aGVuIHRoZSB1c2luZyB0aGUgY29udHJvbCBmbG93IHByb2ZpbGVyLgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZUNvbnRyb2xGbG93Pigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0
YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGJhc2ljQmxv
Y2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsKQEAgLTE4NjAsNyArMTg5MSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBtb3ZlVmFsdWUo
anNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJl
Z3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIApA
QCAtMTg4Niw3ICsxOTE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihj
b25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCks
IHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xv
d0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMu
aCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgpAQCAt
Mjg1NSw3ICsyODU2LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRj
aAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0
IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
Y29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NF
UlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9
PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdC5leGVj
dXRhYmxlQWRkcmVzcygpOwogCkBAIC0yODgwLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlm
IChrZXkuaXNJbnQzMigpKQpAQCAtMjkwMyw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZ0p1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJs
b2NrLT5iYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAogICAgIGlm
IChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5n
KGtleSktPnZhbHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFBy
aXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiks
IEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcp
OwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDkyICs0OSwxMDIgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3Nl
ZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRl
bnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2Zp
bGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1i
ZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0
ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsK
IAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKKyAg
ICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJl
c3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQz
MiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4p
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKICAgICB9Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQgSklU
OjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgaWYgKGhhc0FueVNs
b3dDYXNlcyhpdGVyKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CisgICAgaWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRlcikpCisgICAgICAgIHJldHVy
bjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOworICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAg
SklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsr
XTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmls
ZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJh
c2UsIGFyZ3VtZW50R1BSMyk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRl
Y29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3Vt
ZW50R1BSMik7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNl
Ci0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICBBU1NFUlQoQnl0ZWNv
ZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9
PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNl
ZC4KLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwot
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGJh
c2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFy
ZzEgYXJnMSBhbHJlYWR5IHVzZWQuCisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0g
YXJndW1lbnRHUFIyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIHN0YXRpY19hc3Nl
cnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UgPT0gcmVnVDApOworICAgIHN0YXRpY19hc3NlcnQo
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkgPT0gcmVnVDEpOworCisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVU
eXBlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVy
blZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0x
NDksNyArMTU5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3Qg
YmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcv
RlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3Rz
LCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAg
ICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJu
QWRkcmVzcygpOwpAQCAtMTYwLDggKzE3MCw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFy
Z3VtZW50R1BSNTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGlj
X2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0
aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKQEAgLTE4NywzNCArMTk3
LDQwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAg
ICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5m
b0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpHZXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewogICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKQEAgLTIyMyw5ICsyMzksMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2
YXRlX25hbWUoYwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldFBy
aXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9u
R2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMjM1LDI2ICsyNTMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2
YXRlX25hbWUoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3Vt
ZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9
PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsK
LSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMjY0LDcgKzI3Niw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
QEAgLTMwMCwyMSArMzEyLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5k
KGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFBy
aXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwotICAgIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7CisKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRl
QnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIp
LCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0
dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3By
aXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQg
d3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIg
Y2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI0LDE3ICszNDMsMjIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hv
dWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9i
cmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKKwog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NH
ZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nl
c3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
YmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0zNDQsMjQgKzM2OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
c2V0X3ByaXZhdGVfYnJhbmQoCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJh
bmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJh
c2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2
YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlw
ZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2
YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0
ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzcwLDE5
ICszODgsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjbwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCByZWdU
MSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdU
Mik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQ
cml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1Yklu
Zm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2
YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIH0KIApAQCAtMzk0LDkgKzQyMSwxMSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
cmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6
ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTQwNiwyNCArNDM1LDE4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1
c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5k
OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRl
Y2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBl
cywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6
ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9k
aXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNSwzMCAr
NDU4LDQyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9m
aWxlKSwgcmVnVDMpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9m
aWxlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBy
ZWdUMywgcmVnVDQpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHByb2ZpbGVHUFIpOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIs
IHN0dWJJbmZvR1BSKTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkp
CiAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1
YkluZm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQ
dXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFN
b2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0
QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MDks
MTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNN
QU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7
CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
ICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBA
IC00OTgsNyArNTMwLDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25m
aWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRC
eVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSks
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
LCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1
dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRH
UFI1KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5v
blN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlW
YWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFy
Z3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTUxMiw3ICs1NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBj
YWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU2NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUz
MywxOCArNTc0LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0
IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZH
L0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0
cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0g
ICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVy
bkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVn
VDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVH
UFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
ZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZChC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMo
cmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAgfQor
CiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpAQCAtNTcw
LDIwICs2MTcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAog
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
Mik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJbnZh
bGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNs
b3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQ
Uik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9IGJ5
dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQg
d3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2NTIsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKLSAg
ICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAg
VU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02MDMsMTMg
KzY2MCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0aW9uID0g
cHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4g
dGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZv
KCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisgICAgUHJpdmF0ZUZpZWxkUHV0
S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworCisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQ
UjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjQpOworICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5
VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFy
Z3VtZW50c0dQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02MjIsMTggKzY4MywxMiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwot
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0MywxNCArNjk4LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91
dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdp
bmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7
CiAKQEAgLTY4MCw3ICs3MzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lk
KGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1Qw
KTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQs
IHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNjg5LDcgKzc0NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQo
Y29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwg
cmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNjk5LDcgKzc1Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
c2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1Qy
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwg
cmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzA5LDcgKzc2Nyw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0
ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdU
MywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC03MTksNyArNzc4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92
YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
cmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywg
cmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMs
IHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc4NywzMyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVE
ZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAg
ICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1Yklu
Zm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1i
YXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJh
cnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJz
IHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODI5LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklU
RGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVs
ZXRlQnlJZE9wdGltaXplLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTc4MSwyNCArODUzLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlf
aWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRH
UFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHBy
b3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRl
QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODA4LDcgKzg3NSw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTg0NSwyMiArOTEyLDMz
IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBi
YXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURl
bEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0
eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxp
bmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIg
YXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lz
dGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJh
cnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTYxLDExIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
ZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29k
ZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJn
dW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxP
cHRpbWl6ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQgKzk3OSwxOSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2Rl
R1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUu
dmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFs
dWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQpAQCAtOTI2LDcgKzEwMDEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgog
ICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGds
b2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGpp
dC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIgKzEwMzYsMzEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBl
OjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5
R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4p
OwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcp
OwogfQogCkBAIC05ODYsMTQgKzEwNzAsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21f
Z2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
VHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTAwMywyNiArMTA5MCwyMCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbW92ZShKSVQ6
OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRl
Y2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMzAsMjIgKzExMTEsMzEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NU
eXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWRE
aXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYgKzExNDQsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0
YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZS
ZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CkBAIC0xMDczLDgzICsxMTY1LDYxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBh
cmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNl
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAg
c3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHBy
b3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRE
aXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJh
c2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJl
Zyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhN
b2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVN
ZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRN
b2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5
UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BH
ZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0
YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSnVtcCBub3RBcnJh
eUxlbmd0aE1vZGUgPSBicmFuY2gzMihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1l
dGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5
TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAg
ICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdU
MSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKKyAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRo
aXMuYXBwZW5kKGdlbik7CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7Cisg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2ICsxMjI4LDE4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4
KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTExNzcsMjYgKzEyNDksNTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkp
OworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0g
Ynl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworCisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRC
eUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcs
IHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
VlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVn
KTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgcmVz
dWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBzdHVi
SW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRC
eUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTIwNiw3ICsxMzA5
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0
IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZh
aWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBp
bmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBt
YXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OwpAQCAtMTI0MSwxNiArMTM0NCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0
aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhp
c0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBhcmd1
bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
QEAgLTEyNjAsMjggKzEzNjYsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93
aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdUMTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJn
dW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0
dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlH
UFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI5MSw3ICsxMzkxLDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTMyOSwy
MyArMTQyOSwzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0
ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJs
ZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ug
c3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhh
dmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5l
cmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFs
d2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2
YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHN0
dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVj
dCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQ
dXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0
IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2Rl
KGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChn
ZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3Jp
dGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0NzMsMTggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVu
Y3Rpb24oKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3NiwyNSArMTQ5NCwxOSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFz
ZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVH
UFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwg
cHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCkBAIC0xNDA0LDcgKzE1MTYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
ICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAg
ICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQxLDIwICsxNTUzLDMxIEBAIHZvaWQg
SklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5l
SW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBz
dHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1f
aW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTg2LDE3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlk
c1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25J
bkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0ODAsMjggKzE2MDYsMjIgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHBy
b3BlcnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
ciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBv
aW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZl
cmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJh
dGlvbkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46
OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0
X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVH
UFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lu
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxMCwy
NSArMTYzMCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2Rl
LCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwogCiAgICAgSklU
SW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIp
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
SW5CeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4p
OwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUzNywxNSArMTY2
NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRh
KGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBh
cmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRH
UFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjQp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1l
bnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NTYsNTkgKzE2
ODcsNzAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJl
Z1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0g
YXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlH
UFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHBy
b2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0
YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwg
cHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJh
dG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8g
cG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlm
ZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3Bl
cmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0SGFzUHJp
dmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHlPckJyYW5kLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJl
ZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKIAotICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJy
YW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworCisgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93
KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0SGFz
UHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIEFTU0VSVCh0
eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAgVU5VU0VEX1BB
UkFNKHByb3BlcnR5KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0gQWNjZXNzVHlw
ZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQp
OwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJ
bmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUg
PT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9w
dGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxP
cGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhh
c1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwg
ZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2MCwy
MSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlP
ckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlP
ckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFz
UHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBl
KG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0
UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVO
YW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZh
dGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTY1Miw3ICsxNzg4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19w
cml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAg
IGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUu
bV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDE5ICsxODAyLDIyIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQ
cml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRl
Y29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNr
KGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlv
bkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQog
ewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRl
KCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmpl
Y3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0
Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQ
UiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qw
KTsKQEAgLTE2ODgsNiArMTgyNyw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmly
dHVhbFJlZ2kKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKQEAgLTE3MDEsNyArMTg0MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUo
Y29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25z
dGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSwgcmVnVDEpOwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2Jh
bExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0x
NzE1LDcgKzE4NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IElu
CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
ICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNj
b3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgcmVnVDApOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2Nv
cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTE3OTQsODcgKzE5MzQsMTA1IEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNv
bHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29w
ZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7
CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5
dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7
CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29k
ZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBt
ZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdU
NjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAg
Ly8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQg
YWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4K
IAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAg
ICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
TGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlm
Zl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgm
bWV0YWRhdGEpOworICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CisK
KyAgICAgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAg
ICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJl
VmFyLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhciIpOworICAgICAgICB9
OwogCi0jZGVmaW5lIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9yZXNv
bHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0
IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JF
U09MVkVfVFlQRShSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyAgICAgICAgYXV0byBjbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAg
ICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyIpOwogICAgICAgICB9OwotI3VuZGVmIFJF
U09MVkVfU0NPUEVfR0VORVJBVE9SCisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3Bl
R2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJh
dGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVz
b2x2ZV9zY29wZSBnZW5lcmljIik7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3Bl
R1BSID0gcmVnVDY7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSByZWdUNTsKIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQ
Uik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRh
R1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2Vu
ZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9
IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisg
ICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrc0dlbmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5n
ZXRDVElTdHViKGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFr
ZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZN
JiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIq
IHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rp
b24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAg
ICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBi
ZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9G
VEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMs
IHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2Nv
cGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsg
Ly8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGlu
Y29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAv
LyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZz
ZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUo
cmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0
dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRh
ZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1Qz
LCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1p
dFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgeworICAgIGF1dG8gZG9WYXJJ
bmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVn
IGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgaWYgKCFuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2Jh
bE9iamVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RH
UFIgPSByZWdUNDsKLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAg
IH0KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNF
VE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwot
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0
Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQp
KSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdU
Myk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhy
ZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZd
IChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIs
IHJlZ1QwKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBkb1Zh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgaml0Lm1v
dmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1Qx
KTsKIAotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0g
YnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJl
bCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsK
ICAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgp
KSwgcmVnVDApOworICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEp
OworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0K
LSAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAg
fTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7
CkBAIC0xODgyLDEyICsyMDQwLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2Nv
cGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29k
ZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5k
aW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNl
dE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1v
dmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3Qo
KSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9i
YWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5n
RXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubW92ZShnbG9iYWxPYmplY3RHUFIs
IHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEgKzIw
NTUsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAg
ICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3Ig
R2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVn
VDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFs
T2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAt
MTkwOSw3ICsyMDY3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWlj
OgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4
MyArMjA3Nyw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAg
ICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBl
KSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0K
LSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUo
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lw
VG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUp
OworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNv
bHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDApOwogCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwor
ICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewor
ICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZl
VHlwZSk7CisgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAg
ICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNl
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0
Q2FzZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIp
OworICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAg
ICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAg
ICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAg
ICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lw
VG9FbmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCku
Z2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hC
dWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwog
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1
bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVz
b2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpv
cF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7
IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShy
ZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGpp
dCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmso
cmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7
IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VO
RVJBVE9SKQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMg
ZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNh
dXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUg
ZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2
XzY0KQpAQCAtMjA2NSw2ICsyMTg1LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZp
cnR1YWxSZWdpcwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKQEAgLTIxNzgsNyArMjI5OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAg
LTIxODYsOSArMjMwNyw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShj
b24KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRh
ZGF0YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5z
dHJ1Y3Rpb24pOwogfQogCiAjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTIx
OTYsNDEgKzIzMTcsNTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNv
bgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
LSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVj
b2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBhdXRvIGNsb3N1cmVWYXJH
ZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9z
Y29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBK
SVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOwor
ICAgIH07CisKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0m
IHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2
bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsK
KyAgICB9OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xv
YmFsVmFyKSB7Ci0gICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFy
RnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2Rl
QmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBt
ZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5N
ZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFU
T1IocmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRv
ciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsK
LSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFU
T1IpCi0gICAgICAgIH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9z
dXJlVmFyKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9y
KTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2Rl
ID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVt
aXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZt
LCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBj
YW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCkBAIC0yMjM5LDk5ICsyMzY5
LDg4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICB1c2lu
ZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9
IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUo
cmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMp
OwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdU
Myk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qg
c2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChH
UFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCks
IHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgYXV0byBlbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSKSB7CisgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJl
Z1QwKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJl
Z1QxKSk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSkpOwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9
IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmpl
Y3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAg
ICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBy
ZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJl
Z1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBt
X3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNl
dE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAg
Ci0gICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwg
R1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJh
bmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0
byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBH
UFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFu
ZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRv
IGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5k
R1BSKSB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3Rlcikp
OwotICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAg
ICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
b3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCBy
ZWdUMCk7CisgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIp
OworICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkg
eworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAg
ICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3Zl
cnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0
aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhh
bmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJz
IHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhp
bmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5k
bGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gcmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdCA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdU
MTsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAg
ICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1w
IHsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGpp
dC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAg
ICAgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAg
ICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFu
ZCgpKSwgb2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAg
ICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAg
ICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAg
ICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNP
dXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0
ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9y
dFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlz
T3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0g
ICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIo
b2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBv
ZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAg
ICAgaml0Lm5lZzMyKG9mZnNldCk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIo
b2Zmc2V0LCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRj
aCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29w
ZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYg
KHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAg
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fb3BlcmFuZCkpLCByZWdUMyk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwg
cmVnVDMpOwogICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
anVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3Vy
ZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQxLDg2ICsyNDYwLDYzIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
LSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAg
ICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAg
ICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8g
TG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0
aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhp
Y2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZl
VHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZh
ciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRh
ZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihU
cnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2
ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMp
OworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFy
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xv
YmFsVmFyLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1
bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsK
KworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwor
ICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEds
b2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQu
anVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0gICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNraXBUb0Vu
ZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29s
dmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygm
aml0KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZC
dWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJl
Z1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBW
YWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogCi0gICAgcmV0KCk7CisgICAg
aml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RI
VU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhh
bmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcik7
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nh
c2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5r
KTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9y
KFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZv
ck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsg
XAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29w
ZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5F
X0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfR0VUX0ZST01fU0NPUEVf
R0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpz
bG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1
bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTElu
dCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJv
dXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25n
aW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJw
KTsKQEAgLTI0NDksNyArMjU0NSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICBDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7
CiAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9u
Q2hlY2sodm0pOwogCi0gICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVt
YmVyVGFnUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOwor
ICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVy
LCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmly
c3RCdWNrZXQoKSkpOwogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJU
YWcpLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2XzY0KQpAQCAt
MjQ3MSw4NiArMjU2Nyw3NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklUOjpl
bWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJl
Z1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNl
dCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRy
ZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0
cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQot
ewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7
Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50
OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0K
LQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2Rl
Lm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
LSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsK
LSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsK
LSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xv
dCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewor
ICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1
dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3
aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
ICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8g
U3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hl
IHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFs
bHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24u
CisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2lu
Y2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxP
YmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxl
cyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVj
dHVyZSgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCByZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJl
Z1QxKSk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKSk7CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QyKTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihb
Jl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAg
ICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7CiAg
ICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJh
c2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAt
IDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMSwg
VGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3Bl
KiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNv
bHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3Rh
bnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNo
ZWNrKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQ
dXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpIHsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRWYXJS
ZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3Bl
cmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihieXRl
Y29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8g
YSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRv
IGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRpcmVj
dExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9t
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQ
dXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRT
bG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwot
ICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDEp
OworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAg
IHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAg
ICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFy
KHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwor
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQo
KSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQ
dXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAgICAg
ICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCkpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29w
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIE1vZHVsZVZhcjoKQEAgLTI1NjQsNTggKzI2NTAsNTIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsK
LSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDAp
OyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkp
OwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikp
OwotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVu
IGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25z
dCBiaW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAg
ICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRy
dWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFs
c2UpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJs
b2NrIHNlZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRo
ZW4gd2UgY2FuIGNvbXBpbGUgdGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxv
Y2tzLCBzaW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3
ZSdyZSBhIENsb3N1cmVWYXIsCisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJl
VmFyLiBJZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3
YXlzIENsb3N1cmVWYXIKKyAgICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlz
bid0IGZpcmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNv
IGl0IGRvZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4K
KyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0
Q29kZShDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJl
c29sdmVkQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsK
KyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7CisgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdl
dFB1dEluZm8oKSwgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAg
ICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2Jh
bFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBm
YWxzZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1p
dENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAg
ICAgICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlz
KTsKKwogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAg
ICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTggKzI3MDQs
MjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBj
b3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBl
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJl
c29sdmVUeXBlKCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7
CisgICAgICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhl
biBhbGwgbGlua2VkIENvZGVCbG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxz
byBzZWUgTW9kdWxlVmFyLgogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRv
bmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
ICAgICB9IGVsc2UgewogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRUb1Njb3BlLCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAg
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVCht
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0
cnVjdGlvbik7CisgICAgICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlv
bkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
QEAgLTI2NTIsNyArMjczNSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShY
ODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjcwMSw3ICsyNzg0
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFk
ZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3NTksNyArMjg0Miw2IEBAIHZvaWQgSklUOjplbWl0
V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5h
bF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OwpAQCAtMjc2Nyw3ICsyODQ5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1w
bDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKQEAgLTI4MjMsNyArMjkwNSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm9wZXJ0
eV9lbnVtZXJhdG8KIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5
dGVjb2RlLm1fbW9kZTsKQEAgLTI4MzksMTEgKzI5MjAsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAg
ICAvLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28g
c3BlY2lhbCBjYXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmICht
ZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok93blN0cnVjdHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jaykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0g
cmVnVDM7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAgICAgICAgIG9w
ZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpICYgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgIGxvYWQ4RnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZF
bnVtZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG9yMzIoVHJ1c3RlZElt
bTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSksIHNjcmF0Y2hH
UFIpOworICAgICAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBPcEVu
dW1lcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CisK
ICAgICAgICAgbG9hZDMyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSwgaW5kZXhHUFIpOwogICAgICAgICBv
cGVyYXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4R1BSLCBBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpKTsKIApAQCAtMjg4MSw3OCAr
Mjk2OCw4NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21v
ZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3Qg
ZG9uZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9y
R2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNl
bGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpz
Y3JhdGNoMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJh
dG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdU
Mik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRlQWRk
cmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVu
dW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoMik7CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRj
aDIpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0
b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQz
MiBlbmNvZGVkIHZhbHVlLgotICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUp
KTsKKyAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJv
LCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhl
ZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAv
LyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJh
dG9yLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1
cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNo
MSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7
CiAKICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbmRleCwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0
Y2gyKTsKICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNo
ZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBv
dXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJl
Z1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0
KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwot
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BS
KTsKLQorICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBz
Y3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRj
aDIsIHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBU
aW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIp
OwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdz
IG91dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0g
ICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBz
aWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihB
ZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNh
cGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNp
Z25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CiAgICAgY29uc3RleHByIGludHB0
cl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VH
UFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRH
UFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21h
dGNoLmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0
YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3Rl
ZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVT
dHJ1Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRh
dGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1
cmVNb2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIo
WmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4
ZWRNb2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2Ny
YXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
KSk7CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsK
LSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1Qy
KTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIs
IHNjcmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWws
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIGRvbmVDYXNlcy5saW5rKHRo
aXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
CkBAIC0yOTYxLDEwICszMDU3LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3Jf
Z2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVyKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgotdm9pZCBKSVQ6
OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0
aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5h
bWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19w
cm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3Qg
Qnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKIHsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0
b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0yOTczLDcgKzMwNjgsOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMCk7Ci0gICAgb3I4KHJl
Z1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7Cisg
ICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgcmVnVDEpOworICAgIG9yMzIocmVnVDAsIHJlZ1QxKTsK
KyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1QxLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwogCkBAIC0zMDYyLDYgKzMxNTksMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogICAgIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIo
R1BSUmVnIG93bmVyKQoreworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJh
cnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNlbGVjdFNjcmF0Y2hHUFIob3duZXIpKTsKKyAgICBj
YWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0
aCwgJnZtKCksIG93bmVyKTsKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhp
cyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjM2LDkgKzIzNiw5IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5
KEoKICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZUNlbGwpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKICAgICAgICAg
ICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VDZWxsCi0gICAgICAgICAgICAg
ICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChzdHViSW5mbywg
anNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7CisgICAgICAgICAgICAgICAgICAgICYmIElu
bGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBq
c0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKIAotICAgICAgICAgICAgICAgICAgICBib29s
IGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgo
c3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5
TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywg
YXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHViSW5mby5pbml0QXJyYXlMZW5ndGgobG9ja2VyKTsKQEAgLTI0OSw4ICsy
NDksOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAg
ICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nl
c3NDYXNlOjpBcnJheUxlbmd0aCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXNKU1N0cmluZyhiYXNlQ2VsbCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8u
Y2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICAgICAmJiBJ
bmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKSkgewotICAgICAg
ICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5s
aW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKSkg
eworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3By
aWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLmluaXRTdHJpbmdMZW5ndGgobG9ja2VyKTsKQEAgLTMwNCw3ICszMDQsNyBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICAg
ICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVy
ZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAgICAgICAgICAgICAgICAgJiYgIWxv
YWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJ
bmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKHN0dWJJbmZv
LCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGJvb2wg
Z2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlB
Y2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAg
ICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKQEAgLTczMSwxMSArNzMxLDExIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZVB1dEJ5KEoKICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUtPmRpZENhY2hl
UHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBl
OjpVbnNldAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRl
U2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgc2xvdC5jYWNoZWRPZmZzZXQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJl
cGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgc2xvdC5jYWNoZWRPZmZzZXQoKSkKICAgICAgICAg
ICAgICAgICAgICAgJiYgIW9sZFN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpCiAgICAgICAgICAgICAgICAgICAgICYmICFpc1Byb3h5KSB7CiAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xkU3RydWN0
dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5l
cmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxh
Y2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlTZWxmUGF0Y2gsIG9sZFN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBz
dHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtp
bmQsIHB1dEtpbmQpKTsKQEAgLTExMzIsNyArMTEzMiw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZUluQnkoCiAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09
IGJhc2UKICAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKICAgICAgICAg
ICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsK
LSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZkluQWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAg
ICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxm
SW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlKTsKICAgICAgICAgICAgICAg
ICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICBMT0dfSUMo
KElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUt
PnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7CkBAIC0xNTUyLDcgKzE1NTIsNyBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2
bSwgQ2FsbExpbmtJCiAKIHZvaWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvKQogewotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgp
LCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmZhc3RQYXRoU3RhcnQoKSk7Cisg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2Fs
bExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlua0luZm8pKTsKICAgICAKICAgICByZXZl
cnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVy
YXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVPcGVy
YW5kc0ZvckNoZWNrcG9pbnQuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMu
aCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3Iu
aCIKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKQEAgLTM3MCw2ICszNzEsMTUgQEAg
aW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVgogICAgIAogICAgIGNvZGVC
bG9jay0+dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoKTsKIAorICAgIGlmIChjb2Rl
QmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICBpZiAo
UmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gYmFzZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2Vk
Q29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUpIHsKKyAgICAgICAgICAgIC8vZGF0
YUxvZ0xuKCJTaGFyZWQgdmlhIExMSW50Iik7CisgICAgICAgICAgICBjb2RlQmxvY2stPnNldHVw
V2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOwor
ICAgICAgICAgICAgY29kZUJsb2NrLT5qaXROZXh0SW52b2NhdGlvbigpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hl
Y2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5U
KGNvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgidGhyZXNob2xkIG5vdCByZWFjaGVkLCBj
b3VudGVyID0gIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICAgICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hv
dWxkIGJlIGxpZnRlZC4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODI2NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0
LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5
SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bj
b2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
JW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBt
ZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkK
LSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAg
ICAgICAgbWV0YWRhdGEodDEsIHQyKQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAg
ICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3
ICsxMDE5LDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAg
ICAgICAjIE1ldGFkYXRhIGluIHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJh
dGlvbih0MiwgLnNsb3cpCiAgICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQw
LCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAg
ICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwg
dDEsIHQyKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEw
ODUsMTggQEAgZW5kKQogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUs
IG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFj
cm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6
TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0K
LSAgICBlbmQKLQogICAgIG1ldGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkK
ICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEg
dDEsIEludDMyVGFnLCAub3BOZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZm
LCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0
aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRo
UHJvZmlsZUludCwgdDUsIHQzKQogICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRl
U3JjTm90SW50OgogICAgIGJpYSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9y
aSAweDgwMDAwMDAwLCB0MQotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1i
ZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51
bWJlciwgdDUsIHQzKQogICAgIHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0x
MTE1LDEwICsxMTA3LDYgQEAgZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29k
ZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVy
YXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0
cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAg
ICAgIG1hY3JvIGFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6
Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAg
ICAgICBnZXQobV9yaHMsIHQyKQogICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsx
MTE0LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBi
aW5lcSB0MiwgSW50MzJUYWcsIC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFn
LCAub3AyTm90SW50Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisg
ICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmls
ZUludEludCwgdDUsIHQyKQogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2Vy
T3BlcmF0aW9uQW5kU3RvcmUodDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRj
aCgpCkBAIC0xMTM2LDEyICsxMTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bj
b2RlTmFtZSwgb3AKICAgICAgICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJp
YiB0MywgTG93ZXN0VGFnLCAub3AxTm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJ
bnQzMlRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcklu
dCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQ
cm9maWxlTnVtYmVySW50LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAg
am1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZp
aTJkIHQxLCB0MywgZnQxCi0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJO
dW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFy
aXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAg
ICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMs
NyArMTE0MSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAg
ICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9w
ZXJhbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAg
IGJpYSB0MywgTG93ZXN0VGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9m
aWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3Ry
dWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0
MAogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQx
LCBmdDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkK
QEAgLTQ0MSw4ICs0NDEsMTMgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAg
ICAgICAgICAgbW92ZSBQQywgYTEKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3Ip
CiAgICAgICAgICAgICBidHB6IHIwLCAucmVjb3ZlcgotCiAgICAgICAgICAgICBtb3ZlIHIxLCBz
cAorCisgICAgICAgICAgICAjIEJhc2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3Ig
aXRzIEpJVCBjb25zdGFudCBwb29sLgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0s
IFBCCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCisgICAg
ICAgICAgICBsb2FkcCBDb2RlQmxvY2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwg
UEIKKwogICAgICAgICAgICAgaWYgQVJNNjRFCiAgICAgICAgICAgICAgICAgbGVhcCBKU0NDb25m
aWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHBy
IEdhdGU6Omxvb3BPU1JFbnRyeSkgKiBQdHJTaXplLCBhMgogICAgICAgICAgICAgICAgIGptcCBb
YTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsx
MDYxLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNy
byBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAg
bGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8g
KHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVw
ZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRz
W3QyXQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBs
b2FkcSBbY2ZyLCB0MCwgOF0sIHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjks
NyArMTA3MCw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAg
ICAgICAgaW50ZWdlck9wZXJhdGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcs
IHQxCiAgICAgICAgIHN0b3JlcSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRo
UHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxl
KG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNo
KCkKIAogICAgIC5zbG93OgpAQCAtMTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAogCiBsbGludE9w
V2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3Bh
dGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5
cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxl
ICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29w
ZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAg
IG1ldGFkYXRhKHQxLCB0MikKQEAgLTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5l
Z2F0ZVNsb3cKICAgICBuZWdpIHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVB
cml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxl
KE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAub3BO
ZWdhdGVOb3RJbnQ6CiAgICAgYnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAg
eG9ycSAweDgwMDAwMDAwMDAwMDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRo
UHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJp
dGhQcm9maWxlTnVtYmVyLCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93
OgpAQCAtMTE2NCwxMCArMTE2MCw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2Rl
TmFtZSwgb3AKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2Rl
U3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAg
ICAgICAgbWV0YWRhdGEodDUsIHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAg
ICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9m
aWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAg
ICAgIGdldChtX3JocywgdDApCiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFj
cm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3Qs
IHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIp
CiAKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQy
KQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3
OSwxMCBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAg
IGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAg
ICAgICAgIGZxMmQgdDEsIGZ0MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51
bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJp
dGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDIpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVh
ZHkKICAgICAub3AxTm90SW50T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51
bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
QXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDIpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAg
ICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA0LDkgKzEx
OTYsOSBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAKICAgICAu
b3AyTm90SW50OgogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQs
IHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCi0gICAgICAgIGdldChtX2RzdCwgdDIpCiAg
ICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFBy
b2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVT
dHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQyKQorICAgICAgICBnZXQobV9kc3Qs
IHQyKQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQog
ICAgICAgICBmcTJkIHQxLCBmdDEKQEAgLTE1MTgsNyArMTUxMCw3IEBAIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfZ2V0X2J5X2lkX2RpcmVjdCwKIGVuZCkKIAogIyBUaGUgYmFzZSBvYmplY3QgaXMg
ZXhwZWN0ZWQgaW4gdDMKLW1hY3JvIHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwg
bW9kZU1ldGFkYXRhTmFtZSwgdmFsdWVQcm9maWxlTmFtZSwgc2xvd0xhYmVsLCBzaXplLCBtZXRh
ZGF0YSwgcmV0dXJuKQorbWFjcm8gcGVyZm9ybUdldEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LCBt
b2RlTWV0YWRhdGFOYW1lLCB2YWx1ZVByb2ZpbGVOYW1lLCBzbG93TGFiZWwsIHNpemUsIG1ldGFk
YXRhLCByZXR1cm4sIGRvQXJyYXlQcm9maWxlKQogICAgIG1ldGFkYXRhKHQyLCB0MSkKICAgICBs
b2FkYiAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6OiVtb2RlTWV0YWRhdGFOYW1lJS5tb2RlW3Qy
XSwgdDEKIApAQCAtMTU0Niw3ICsxNTM4LDcgQEAgbWFjcm8gcGVyZm9ybUdldEJ5SURIZWxwZXIo
b3Bjb2RlU3RydWN0LAogLm9wR2V0QnlJZEFycmF5TGVuZ3RoOgogICAgIGJibmVxIHQxLCBjb25z
dGV4cHIgR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoLCAub3BHZXRCeUlkVW5zZXQKICAgICBtb3Zl
IHQzLCB0MAotICAgIGFycmF5UHJvZmlsZSglb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6OiVtb2Rl
TWV0YWRhdGFOYW1lJS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCB0MCwgdDIsIHQ1KQor
ICAgIGRvQXJyYXlQcm9maWxlKHQwLCB0MiwgdDUsIHQxKQogICAgIGJ0aXogdDAsIElzQXJyYXks
IHNsb3dMYWJlbAogICAgIGJ0aXogdDAsIEluZGV4aW5nU2hhcGVNYXNrLCBzbG93TGFiZWwKICAg
ICBsb2FkQ2FnZWRKU1ZhbHVlKEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQwLCB0MSkKQEAg
LTE1NjgsNyArMTU2MCwxMCBAQCBlbmQKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X2lk
LCBPcEdldEJ5SWQsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQogICAgIGdldChtX2Jhc2UsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxsKHNp
emUsIHQwLCB0MywgLm9wR2V0QnlJZFNsb3cpCi0gICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BH
ZXRCeUlkLCBtX21vZGVNZXRhZGF0YSwgbV9wcm9maWxlLCAub3BHZXRCeUlkU2xvdywgc2l6ZSwg
bWV0YWRhdGEsIHJldHVybikKKyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEdldEJ5SWQsIG1f
bW9kZU1ldGFkYXRhLCBtX3Byb2ZpbGUsIC5vcEdldEJ5SWRTbG93LCBzaXplLCBtZXRhZGF0YSwg
cmV0dXJuLAorICAgICAgICBtYWNybyAoY2VsbEFuZEluZGV4aW5nVHlwZSwgbWV0YWRhdGEsIHNj
cmF0Y2gxLCBzY3JhdGNoMikKKyAgICAgICAgICAgIGFycmF5UHJvZmlsZShPcEdldEJ5SWQ6Ok1l
dGFkYXRhOjptX2FycmF5UHJvZmlsZSwgY2VsbEFuZEluZGV4aW5nVHlwZSwgbWV0YWRhdGEsIHNj
cmF0Y2gxKQorICAgICAgICBlbmQpCiAKIC5vcEdldEJ5SWRTbG93OgogICAgIGNhbGxTbG93UGF0
aChfbGxpbnRfc2xvd19wYXRoX2dldF9ieV9pZCkKQEAgLTMwMDIsNyArMjk5Nyw3IEBAIGxsaW50
T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3Jfb3BlbiwgT3AKIAogICAgIGxvYWRWYXJpYWJsZShn
ZXQsIG1faXRlcmF0b3IsIHQzKQogICAgIGJ0cW56IHQzLCBub3RDZWxsTWFzaywgLml0ZXJhdG9y
T3BlbkdlbmVyaWNHZXROZXh0U2xvdwotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0
b3JPcGVuLCBtX21vZGVNZXRhZGF0YSwgbV9uZXh0UHJvZmlsZSwgLml0ZXJhdG9yT3BlbkdlbmVy
aWNHZXROZXh0U2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlTmV4dEFuZERpc3BhdGNoKQorICAg
IHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JPcGVuLCBtX21vZGVNZXRhZGF0YSwgbV9u
ZXh0UHJvZmlsZSwgLml0ZXJhdG9yT3BlbkdlbmVyaWNHZXROZXh0U2xvdywgc2l6ZSwgbWV0YWRh
dGEsIHN0b3JlTmV4dEFuZERpc3BhdGNoLCBtYWNybyhhLCBiLCBjLCBkKSBlbmQpCiAKIC5pdGVy
YXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93
X3BhdGhfaXRlcmF0b3Jfb3Blbl9nZXRfbmV4dCkKQEAgLTMwNjEsNyArMzA1Niw3IEBAIGxsaW50
T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3JfbmV4dCwgT3AKIAogICAgIGxvYWRWYXJpYWJsZShn
ZXQsIG1fdmFsdWUsIHQzKQogICAgIGJ0cW56IHQzLCBub3RDZWxsTWFzaywgLmdldERvbmVTbG93
Ci0gICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck5leHQsIG1fZG9uZU1vZGVNZXRh
ZGF0YSwgbV9kb25lUHJvZmlsZSwgLmdldERvbmVTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVE
b25lQW5kSm1wVG9HZXRWYWx1ZSkKKyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9y
TmV4dCwgbV9kb25lTW9kZU1ldGFkYXRhLCBtX2RvbmVQcm9maWxlLCAuZ2V0RG9uZVNsb3csIHNp
emUsIG1ldGFkYXRhLCBzdG9yZURvbmVBbmRKbXBUb0dldFZhbHVlLCBtYWNybyhhLCBiLCBjLCBk
KSBlbmQpCiAKIC5nZXREb25lU2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0
aF9pdGVyYXRvcl9uZXh0X2dldF9kb25lKQpAQCAtMzA4Niw3ICszMDgxLDcgQEAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0LCBPcAogICAgICMgUmVsb2FkIHRoZSBuZXh0IHJl
c3VsdCB0bXAgc2luY2UgdGhlIGdldF9ieV9pZCBhYm92ZSBtYXkgaGF2ZSBjbG9iYmVyZWQgdDMu
CiAgICAgbG9hZFZhcmlhYmxlKGdldCwgbV92YWx1ZSwgdDMpCiAgICAgIyBXZSBkb24ndCBuZWVk
IHRvIGNoZWNrIGlmIHRoZSBpdGVyYXRvciByZXN1bHQgaXMgYSBjZWxsIGhlcmUgc2luY2Ugd2Ug
d2lsbCBoYXZlIHRocm93biBhbiBlcnJvciBiZWZvcmUuCi0gICAgcGVyZm9ybUdldEJ5SURIZWxw
ZXIoT3BJdGVyYXRvck5leHQsIG1fdmFsdWVNb2RlTWV0YWRhdGEsIG1fdmFsdWVQcm9maWxlLCAu
Z2V0VmFsdWVTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVWYWx1ZUFuZERpc3BhdGNoKQorICAg
IHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JOZXh0LCBtX3ZhbHVlTW9kZU1ldGFkYXRh
LCBtX3ZhbHVlUHJvZmlsZSwgLmdldFZhbHVlU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlVmFs
dWVBbmREaXNwYXRjaCwgbWFjcm8oYSwgYiwgYywgZCkgZW5kKQogCiAuZ2V0VmFsdWVTbG93Ogog
ICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfZ2V0X3ZhbHVl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIwLDcg
KzE0MjAsOCBAQCBlbmQKIAogbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlv
bikKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBiYWRkaXMgaW5jcmVtZW50LCBD
b2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRl
cjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2xsaW50
RXhlY3V0ZUNvdW50ZXJbdDBdLCB0MAorICAgIGJhZGRpcyBpbmNyZW1lbnQsIEJhc2VsaW5lRXhl
Y3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgYWN0aW9uKCkKICAg
ICAuY29udGludWU6CiBlbmQKQEAgLTE1MDMsNyArMTUwNCw4IEBAIG1hY3JvIHByb2xvZ3VlKGNv
ZGVCbG9ja0dldHRlciwgY29kZUJsb2MKICAgICBjb2RlQmxvY2tHZXR0ZXIodDEpCiAgICAgY29k
ZUJsb2NrU2V0dGVyKHQxKQogICAgIGlmIG5vdCAoQ19MT09QIG9yIENfTE9PUF9XSU4pCi0gICAg
ICAgIGJhZGRpcyA1LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QxXSwgLmNvbnRpbnVlCisgICAgICAgIGxvYWRw
IENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyW3QxXSwgdDAKKyAgICAgICAgYmFkZGlz
IDUsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCiAg
ICAgICAgIGlmIEpTVkFMVUU2NAogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAgICAgICAg
ICBtb3ZlIFBDLCBhMQpAQCAtMTYxNywxNCArMTYxOSwxNCBAQCBtYWNybyBmdW5jdGlvbkluaXRp
YWxpemF0aW9uKHByb2ZpbGVBcmdTCiAgICAgIyBvcHRpbWFsIHdheSBmb3IgYXJjaGl0ZWN0dXJl
cyB0aGF0IGhhdmUgbW9yZSB0aGFuIGZpdmUgcmVnaXN0ZXJzIGF2YWlsYWJsZQogICAgICMgZm9y
IGFyYml0cmFyeSB1c2UgaW4gdGhlIGludGVycHJldGVyLgogICAgIGxvYWRpIENvZGVCbG9jazo6
bV9udW1QYXJhbWV0ZXJzW3QxXSwgdDAKLSAgICBhZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAgIyBV
c2UgYWRkaSBiZWNhdXNlIHRoYXQncyB3aGF0IGhhcyB0aGUgcGVlcGhvbGUKKyAgICBhZGRwIC1w
cm9maWxlQXJnU2tpcCwgdDAKICAgICBhc3NlcnQobWFjcm8gKG9rKSBicGd0ZXEgdDAsIDAsIG9r
IGVuZCkKICAgICBidHB6IHQwLCAuYXJndW1lbnRQcm9maWxlRG9uZQogICAgIGxvYWRwIENvZGVC
bG9jazo6bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMgKyBGaXhlZFZlY3Rvcjo6bV9zdG9yYWdlICsg
UmVmQ291bnRlZEFycmF5OjptX2RhdGFbdDFdLCB0MwogICAgIGJ0cHogdDMsIC5hcmd1bWVudFBy
b2ZpbGVEb25lICMgV2hlbiB3ZSBjYW4ndCBKSVQsIHdlIGRvbid0IGFsbG9jYXRlIGFueSBhcmd1
bWVudCB2YWx1ZSBwcm9maWxlcy4KICAgICBtdWxwIHNpemVvZiBWYWx1ZVByb2ZpbGUsIHQwLCB0
MiAjIEFhYWFhaGhoaCEgTmVlZCBzdHJlbmd0aCByZWR1Y3Rpb24hCiAgICAgbHNoaWZ0cCAzLCB0
MCAjIG9mZnNldCBvZiBsYXN0IEpTVmFsdWUgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4KLSAgICBh
ZGRwIHQyLCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBpbiBDb2Rl
QmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLgorICAgIGFkZHAgdDIsIHQzICMgcG9pbnRl
ciB0byBlbmQgb2YgVmFsdWVQcm9maWxlIGFycmF5IGluIHRoZSB2YWx1ZSBwcm9maWxlIGFycmF5
LgogLmFyZ3VtZW50UHJvZmlsZUxvb3A6CiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIGxvYWRx
IFRoaXNBcmd1bWVudE9mZnNldCAtIDggKyBwcm9maWxlQXJnU2tpcCAqIDhbY2ZyLCB0MF0sIHQy
CkBAIC0yNTYzLDYgKzI1NjUsMTcgQEAgbWFjcm8gbm90U3VwcG9ydGVkKCkKICAgICBlbmQKIGVu
ZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwg
bWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Fy
aXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgVW5hcnlBcml0aFByb2Zp
bGU6Om1fYml0c1t0ZW1wXQorZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1
Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5
cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKwogLy8gRklYTUU6IFdl
IHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0X1dJTiBjb25kaXRpb24gaGVyZSwgc2luY2UgV0VC
QVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUgZmFsc2Ugb24gV2luZG93cwogLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNgogaWYgV0VCQVNTRU1CTFkgYW5k
IG5vdCBYODZfNjRfV0lOCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDggKzQ4LDEwIEBAIHB1YmxpYzoKICAgICBDYWNoZWFibGVJZGVudGlmaWVyKCkg
PSBkZWZhdWx0OwogCiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0
ZUZyb21DZWxsKEpTQ2VsbCogaWRlbnRpZmllcik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFi
bGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxv
Y2sqLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVu
dGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBV
bmlxdWVkU3RyaW5nSW1wbCopOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
PgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIGNvbnN0IElkZW50aWZpZXImKTsK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KENvZGVCbG9ja1R5cGUqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBpbmxpbmUg
Q2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKFVuaXF1ZWRT
dHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBDYWNoZWFibGVJZGVudGlmaWVyIGNy
ZWF0ZUZyb21SYXdCaXRzKHVpbnRwdHJfdCByYXdCaXRzKSB7IHJldHVybiBDYWNoZWFibGVJZGVu
dGlmaWVyKHJhd0JpdHMpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRp
ZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE0IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxv
Y2ssIGNvbnN0IElkZW50aWZpZXImIGkpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhjb2RlQmxvY2ssIGkuaW1wbCgpKTsKIH0KIAotaW5saW5lIENh
Y2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVh
YmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxvY2stPmhhc0lk
ZW50aWZpZXIodWlkKSk7CiAgICAgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIodWlkKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5
cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENv
ZGUuaCIKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUNhY2hl
RXJyb3IuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19ERUZJ
TkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3RhdGlj
IHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0
YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgVW5h
cnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICBV
bmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKICAg
ICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051bWJl
cigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGlu
bGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9CiAgICAgc3RhdGljIGlubGluZSBw
dHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoUmFyZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZm
X3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1
bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsgfQorICAgIHN0YXRpYyBpbmxp
bmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qp
OyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDYgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZh
c3RNZW1vcnkoKTsKICAgICB2KEludDMyLCBldmFsVGhyZXNob2xkTXVsdGlwbGllciwgMTAsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1heGltdW1FdmFsQ2FjaGVhYmxlU291
cmNlTGVuZ3RoLCAyNTYsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKLSAgICB2KEJvb2wsIHJh
bmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hl
Y2twb2ludHNGb3JCYXNlbGluZSwgMTAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJbnQz
MiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvclVwcGVyVGllcnMs
IDUwMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkBAIC01MzIsNiArNTMxLDcgQEAgYm9v
bCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZURhdGFJQywg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDSW5PcHRpbWl6
aW5nSklULCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNT
aGFyaW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB1c2VCYXNlbGlu
ZUpJVENvZGVTaGFyaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgLyog
RmVhdHVyZSBGbGFncyAqL1wKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5Niw5ICszOTYsMTEgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpwcmVw
YXJlRm9yRXhlY3V0aQogICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCiAgICAg
ICAgIGNvZGVCbG9jay0+dmFsaWRhdGUoKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgp
KQorICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9j
ay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAg
ICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJl
bGVhc2VOb25OdWxsKCkpOworICAgIH0gZWxzZSBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkgewog
ICAgICAgICBzZXR1cExMSW50KGNvZGVCbG9jayk7Ci0gICAgZWxzZQorICAgIH0gZWxzZQogICAg
ICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrKTsKIAogICAgIGluc3RhbGxDb2RlKHZtLCBjb2Rl
QmxvY2ssIGNvZGVCbG9jay0+Y29kZVR5cGUoKSwgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktp
bmQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBD
b3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxM
SW50VGllclVwQ291bnRlci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDkgKzUyLDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCgpCiAgICAg
ewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAgICAg
ICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRl
cldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25z
Ojp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1p
emVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChP
cHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0KIAog
ICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtNjUsOSAr
NjUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQogICAgIHsKICAgICAgICAg
aWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpLCBudWxscHRy
KTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFP
cHRpbWl6ZVNvb24oKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9s
ZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVT
b29uKCkpOwogICAgIH0KIAogICAgIHN0cnVjdCBPU1JFbnRyeURhdGEgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CiAKIFRpZXJVcENvdW50OjpUaWVyVXBDb3VudCgpCiB7Ci0gICAgc2V0TmV3VGhy
ZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVs
bHB0cik7CisgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGlt
aXplQWZ0ZXJXYXJtVXAoKSk7CiB9CiAKIFRpZXJVcENvdW50Ojp+VGllclVwQ291bnQoKSA9IGRl
ZmF1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291
bnQuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVRpZXJVcENvdW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCh1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAg
IHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbklu
ZGV4LCAiOiBPTUctb3B0aW1pemluZyBhZnRlciB3YXJtLXVwLiIpOwotICAgICAgICBzZXROZXdU
aHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBu
dWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9N
R09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0aW1p
emF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCkBAIC05MCwxNCArOTAsMTQgQEAgcHVibGljOgogICAg
IHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAg
IHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbklu
ZGV4LCAiOiBPTUctb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uIik7Ci0gICAgICAgIHNldE5l
d1RocmVzaG9sZCgwLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKDApOwogICAg
IH0KIAogICAgIHZvaWQgb3B0aW1pemVTb29uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAg
ewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5k
ZXgsICI6IE9NRy1vcHRpbWl6aW5nIHNvb24uIik7CiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIGFk
anVzdG1lbnQgb25jZSB3ZSBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3YXNtIGZ1bmN0aW9u
cy4KLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGlt
aXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRo
cmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICB2b2lkIHNldE9wdGlt
aXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCh1aW50MzJfdCBmdW5jdGlv
bkluZGV4LCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9C
YWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDIw
IEBAIHB1YmxpYzoKICAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEJhZyYgb3BlcmF0b3I9KEJhZzxULCBVPiYmIG90
aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHVud3JhcHBlZEhlYWQoKSA9PSBvdGhlci51bndyYXBw
ZWRIZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAgQmFnIGRlc3Ry
b3k7CisgICAgICAgIGRlc3Ryb3kubV9oZWFkID0gdW53cmFwcGVkSGVhZCgpOworICAgICAgICBt
X2hlYWQgPSBvdGhlci51bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG90aGVyLm1faGVhZCA9IG51
bGxwdHI7CisKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIH5CYWcoKQogICAg
IHsKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3Mt
dGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwko
cmV2aXNpb24gMjgyNjc1KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwko
d29ya2luZyBjb3B5KQpAQCAtNzc2LDE3ICs3NzYsMTggQEAgZW5kCiAKICMgRklYTUU6IG5lZWQg
dG8gZml4IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg3MDMgdG8g
ZW5hYmxlIHRoaXMgb24gTGludXgvTUlQUy4KIGRlZiBydW5CeXRlY29kZUNhY2hlSW1wbChvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMsICphZGRpdGlvbmFsRW52KQotICAgIGlmICgkaG9zdE9T
ID09ICJkYXJ3aW4iKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGUiCi0g
ICAgZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAkYXJjaGl0ZWN0dXJlICE9ICJtaXBzIikK
LSAgICAgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlWFhYWFhYIgotICAgIGVsc2UK
LSAgICAgICAgc2tpcAotICAgICAgICByZXR1cm4KLSAgICBlbmQKKyAgICAjIE9PUFMKKyAgICAj
aWYgKCRob3N0T1MgPT0gImRhcndpbiIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNv
ZGUtY2FjaGUiCisgICAgI2Vsc2lmICgkaG9zdE9TID09ICJsaW51eCIgJiYgJGFyY2hpdGVjdHVy
ZSAhPSAibWlwcyIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhY
WFgiCisgICAgI2Vsc2UKKyAgICAjICAgIHNraXAKKyAgICAjICAgIHJldHVybgorICAgICNlbmQK
IAotICAgIG9wdGlvbnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMKLSAgICBhZGRS
dW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRl
Y29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1D
b21tYW5kLCAkYmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwg
c2ltcGxlRXJyb3JIYW5kbGVyLCAqYWRkaXRpb25hbEVudikKKyAgICAjb3B0aW9ucyA9IEJBU0Vf
T1BUSU9OUyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRl
c3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucworICAgICNhZGRSdW5Db21tYW5kKCJieXRlY29kZS1j
YWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBl
ci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5kLCAkYmVuY2htYXJrLnRv
X3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyLCAq
YWRkaXRpb25hbEVudikKIGVuZAogCiBkZWYgcnVuQnl0ZWNvZGVDYWNoZSgqb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438747</attachid>
            <date>2021-09-20 16:08:46 -0700</date>
            <delta_ts>2021-09-20 17:11:38 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>501784</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsMTAg
QEAgb3BfZ3JvdXAgOlByb2ZpbGVkQmluYXJ5T3AsCiAgICAgICAgIGxoczogVmlydHVhbFJlZ2lz
dGVyLAogICAgICAgICByaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZFR5cGVz
OiBPcGVyYW5kVHlwZXMsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxl
CisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
X2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTEsOSArMzUyLDEwIEBAIG9wX2dy
b3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgIF0sCiAgICAgYXJnczogewogICAgICAg
ICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg0LDkgKzM4NiwxMCBAQCBvcCA6bmVnYXRlLAog
ICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZDogVmlydHVhbFJl
Z2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLAorICAgICAgICBwcm9maWxl
SW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQ
cm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFy
aXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApAQCAtNDc4LDYgKzQ4MSw3IEBAIG9wIDpn
ZXRfYnlfaWQsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgbW9kZU1ldGFkYXRhOiBHZXRCeUlk
TW9kZU1ldGFkYXRhLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgIH0KIAogb3AgOmdldF9ieV9pZF93aXRoX3Ro
aXMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVj
a3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBAIFZhbHVlUHJvZmlsZSog
dmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJuICZtZXRhZGF0YS5tX3By
b2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK3VpbnRwdHJfdCB2YWx1
ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4KQoreworICAgIFVOVVNF
RF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9w
Y29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50
SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJu
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRvclByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZOZXh0UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRl
Y29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3JfbmV4dCkgeworICAgICAgICBzd2l0Y2ggKGNo
ZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4
dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZSgp
OworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXREb25lOiByZXR1cm4gQnl0ZWNvZGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkRvbmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck5leHQ6OmdldFZhbHVlOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlZhbHVl
UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfSBlbHNlIAorICAgICAgICByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZlByb2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVN
ZXRhZGF0YT4KIGJvb2wgaGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFk
YXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhW
TSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQot
ewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4o
bV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRN
YXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
dmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5r
SW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSAm
JiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwogdm9pZCBDYWxs
TGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVTcGVjaWZpY0Nh
bGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5OSwxMSBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9mcmFtZVNodWZm
bGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRVc2VzRGF0YUlD
cyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwotICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQ
Uik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BS
OwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9m
YXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZh
c3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJQyA9PSBVc2VE
YXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVn
aXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxM
aW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcgQEAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAgZ29Qb2x5bW9y
cGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVNYXNrKSk7CiAg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
aXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBw
cmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMubGluaygmaml0
KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBwcmVwLgogICAg
ICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQ
Uiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7
CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGNh
bGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
byk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICB1LmNv
ZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMu
bV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMubV9jYWxs
ZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxs
ZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEzICszNDQsMzQgQEAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQykK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIG51
bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBpZiAoaXNEYXRh
SUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVn
OjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRh
SUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0
YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKLSAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAgc2V0VXNlc0Rh
dGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywg
aml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlzVGFpbENhbGwo
KSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4g
ZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CiB9CiAKIHZv
aWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkK
QEAgLTM2OSwxNyArMzgxLDMyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0m
IHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIs
IG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQog
Cit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUoY2FsbExpbmtJ
bmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBK
U0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMo
Vk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgbV9jb2RlT3JpZ2lu
ID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBz
ZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAg
bV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247CisgICAg
aWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpIHsKKyAgICAgICAgLy8g
RklYTUU6IEl0J2QgYmUgbmljZSBpZiB0aGlzIGp1c3Qgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBz
dHJ1Y3R1cmUuCisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZy
YW1lU2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsK
KyAgICB9CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlD
Lm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxh
dGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpO
byk7CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAg
dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBq
aXQubGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0
UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQ
YXRoU3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwg
dGhpcyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1
bnNpZ25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2Vk
Q2FsbExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2Vu
dGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgewor
ICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2Fs
bCwKICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAg
ICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxp
emVEYXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsg
cmV0dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1
aW50OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRl
OgotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
QywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURf
UkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRo
SW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVi
bGljOgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQ
YXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVj
dEZhc3RQYXRoKENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWls
Q2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBz
dGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJv
b2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNl
RGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsy
NDksNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAot
ICAgIEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9z
bG93U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsK
ICAgICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZv
LCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJf
dCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlv
blR5cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9j
YXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxv
Y2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
bV9zbG93UGF0aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5h
bFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAK
QEAgLTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29k
ZU9yaQogICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3Qg
VW5saW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsg
Ly8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxs
eSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxU
eXBlOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlv
bjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZs
ZURhdGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsOCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlk
ZXIoKSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVD
b3VudGVyKCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9
CkBAIC0zMTgsNyArMzIwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgQwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIAogICAgIG9wdGltaXplQWZ0ZXJX
YXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOworICAgIC8vaml0QWZ0ZXJXYXJtVXAoKTsK
IAogICAgIGlmIChvdGhlci5tX3JhcmVEYXRhKSB7CiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZO
ZWNlc3NhcnkoKTsKQEAgLTM1OSw3ICszNjEsOSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYg
dm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlkZXIoKSk7CiAgICAg
c2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKLSAg
ICAKKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxpbnRF
eGVjdXRlQ291bnRlcigpOworCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7
CiB9CiAKQEAgLTM3MCwxMCArMzc0LDEzIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwg
U3RydWN0dXJlKiAKIC8vIHdlIGNhbid0IGdlbmVyYXRlIGR1cmluZyB1bmxpbmtlZCBieXRlY29k
ZSBnZW5lcmF0aW9uLiBUaGlzIHByb2Nlc3MgaXMgbm90IGFsbG93ZWQgdG8gZ2VuZXJhdGUgY29u
dHJvbAogLy8gZmxvdyBvciBpbnRyb2R1Y2UgbmV3IGxvY2Fscy4gVGhlIHJlYXNvbiBmb3IgdGhp
cyBpcyB3ZSByZWx5IG9uIGxpdmVuZXNzIGFuYWx5c2lzIHRvIGJlIHRoZSBzYW1lIGZvcgogLy8g
YWxsIHRoZSBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLiBXZSByZWx5IG9uIHRo
aXMgZmFjdCBieSBjYWNoaW5nIHRoZSBsaXZlbmVzcyBhbmFseXNpcwotLy8gaW5zaWRlIFVubGlu
a2VkQ29kZUJsb2NrLgorLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLiBBbHNvLCBCYXNlbGlu
ZSBKSVQgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtl
ZENvZGVCbG9jaywKKy8vIHNvIHRoZSBieXRlY29kZSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBiZXR3
ZWVuIENvZGVCbG9ja3Mgc2hhcmluZyBhbiBVbmxpbmtlZENvZGVCbG9jay4KIGJvb2wgQ29kZUJs
b2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAogICAgIEpTU2NvcGUq
IHNjb3BlKQogeworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsgLy8gV2UgbmVlZCB0byBz
ZXQgdXAgb3VyIHZhbHVlIHByb2ZpbGUgcG9pbnRlcnMuCisKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgZmluaXNoQ3JlYXRpb25Db21tb24odm0pOwogCkBAIC00NzEsNiArNDc4
LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAg
YnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRD
b2RlLT5iaW5hcnlBcml0aFByb2ZpbGUoYnl0ZWNvZGUubV9wcm9maWxlSW5kZXgpOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorI2RlZmluZSBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklM
RShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURB
VEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2Vk
Q29kZS0+dW5hcnlBcml0aFByb2ZpbGUoYnl0ZWNvZGUubV9wcm9maWxlSW5kZXgpOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0
cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMsMTQgKzU1MywxNCBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQ
cm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTkso
T3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAg
IExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcElu
YykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BN
dWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAg
ICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktf
V0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5B
UllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2OSw3ICs3ODks
NyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgLy8gcmVs
eSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRlZCB0
byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUgYWNj
dXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0ZXJXYXJt
VXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOworICAgIC8vaml0QWZ0ZXJXYXJtVXAoKTsKIAog
ICAgIC8vIElmIHRoZSBjb25jdXJyZW50IHRocmVhZCB3aWxsIHdhbnQgdGhlIGNvZGUgYmxvY2sn
cyBoYXNoLCB0aGVuIGNvbXB1dGUgaXQgaGVyZQogICAgIC8vIHN5bmNocm9ub3VzbHkuCkBAIC03
OTMsNiArODEzLDc3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbkNvbW1vbihWTSYK
ICAgICBtX293bmVyRWRnZS5zZXQodm0sIHRoaXMsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OmNyZWF0ZSh2bSwgdGhpcykpOwogfQogCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5r
ZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRK
SVRDb2RlKGppdENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYg
aml0Q29kZU1hcCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAg
SGFuZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAg
Ly8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVy
Lm5hdGl2ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdl
dCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAg
ICAgICAgYXV0byYgaml0RGF0YSA9IGVuc3VyZUpJVERhdGEobG9ja2VyKTsKKworICAgICAgICBS
RUxFQVNFX0FTU0VSVChqaXREYXRhLm1faml0Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CisgICAg
ICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29k
ZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0
byBlbnRyeSA9IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOworICAgICAgICAgICAgc3dp
dGNoIChlbnRyeS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6R2xvYmFsT2JqZWN0OgorICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBv
b2xbaV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAg
ICAgICAgICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8g
PSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRDYWxsTGlua0luZm8qPihlbnRyeS5wYXlsb2FkLmdldCgp
KTsKKyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEu
bV9jYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVj
b2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBkb24ndCBoYXJkY29kZSB0aGVz
ZSByZWdpc3RlcnMgbGlrZSB0aGlzLgorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+aW5p
dGlhbGl6ZURhdGFJQyh2bSgpLCB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAs
IEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQ
b29sW2ldID0gY2FsbExpbmtJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvOiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5s
aW5rZWRTdHViSW5mbyA9ICpzdGF0aWNfY2FzdDxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKj4o
ZW50cnkucGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gaml0RGF0YS5tX3N0dWJJbmZvcy5hZGQodW5saW5rZWRTdHViSW5mby5hY2Nl
c3NUeXBlLCBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCkpOworICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8odGhpcywgdW5saW5rZWRTdHViSW5mbyk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5t
X2ppdENvbnN0YW50UG9vbFtpXSA9IHN0dWJJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1
bmN0aW9uRGVjbDogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgaml0
RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9uRGVjbChpbmRleCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAg
ICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25FeHBy
KGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAg
IGNhc2UgR2xvYmFsQ29kZToKKyAgICBjYXNlIE1vZHVsZUNvZGU6CisgICAgY2FzZSBFdmFsQ29k
ZToKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxy
ZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUg
Y2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KKyAgICAg
ICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCgp
KSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24odGhpcyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29k
ZSAmJiBPcHRpb25zOjp1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nKCkpCisgICAgICAgIHVubGlu
a2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUgPSBXVEZNb3ZlKGppdENvZGUp
OworfQorCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpA
QCAtODkyLDYgKzk4Myw3IEBAIFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFu
dFIKICAgICAgICAgc3dpdGNoIChyZXByZXNlbnRhdGlvbikgewogICAgICAgICBjYXNlIFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKICAgICAgICAgICAgIGNvbnN0
YW50ID0gZ2xvYmFsT2JqZWN0LT5saW5rVGltZUNvbnN0YW50KHN0YXRpY19jYXN0PExpbmtUaW1l
Q29uc3RhbnQ+KGNvbnN0YW50LmFzSW50MzJBc0FueUludCgpKSk7CisgICAgICAgICAgICBBU1NF
UlQoY29uc3RhbnQuaXNDZWxsKCkpOyAvLyBVbmxpbmtlZCBCYXNlbGluZSBKSVQgcmVxdWlyZXMg
dGhpcy4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjo6T3RoZXI6CiAgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJ
bnRlZ2VyOgpAQCAtMTUzNCwzOSArMTYyNiw0MCBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogCi0jaWYgRU5B
QkxFKEpJVCkKLSAgICBib29sIGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGln
aWJsZUZvckxMSW50RG93bmdyYWRlOwotICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRl
ID0gZmFsc2U7Ci0gICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhlY3V0aW5nLCBh
bmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAotICAgIC8vIHRv
IGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNh
dmUgSklUIG1lbW9yeS4KLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5r
ZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+
aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkgewotICAgICAg
ICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVu
dCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291
bnRlcikgewotICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKLSAgICAgICAgICAg
ICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsK
LQotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRD
b2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91
bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNb
aV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVj
dGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlv
bkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVj
dGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKLQotICAgICAgICAgICAgICAgICAg
ICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwotICAgICAgICAgICAgICAgICAg
ICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZv
cmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKLSAgICAgICAgICAgICAg
ICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50aW5nIGludG8g
dGhlIHZhcmlvdXMgKmluZm9zLgotICAgICAgICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9pc0VsaWdpYmxl
Rm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0jZW5kaWYKKy8vIE9PUFM6IHJlY29uY2lsZSB0aGlzCisvLyNpZiBFTkFCTEUoSklUKQor
Ly8gICAgYm9vbCBpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBtX2lzRWxpZ2libGVGb3JM
TEludERvd25ncmFkZTsKKy8vICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFs
c2U7CisvLyAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBleGVjdXRpbmcsIGFuZCBh
biBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0CisvLyAgICAvLyB0byBk
aXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFuZCByZWluc3RhbGwgTExJbnQgY29kZSB0byBzYXZl
IEpJVCBtZW1vcnkuCisvLyAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5r
ZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+
aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkgeworLy8gICAg
ICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXplZFJlcGxhY2Vt
ZW50KCkpIHsKKy8vICAgICAgICAgICAgaWYgKCFvcHRpbWl6ZWRDb2RlQmxvY2stPm1fb3NyRXhp
dENvdW50ZXIpIHsKKy8vICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUpIHsKKy8vICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGUgPSBudWxscHRyOworLy8g
ICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRyeXBvaW50KHRoaXMpOworLy8gICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnBy
ZXRlclRodW5rKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyBpKyspIHsK
Ky8vICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5s
aW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7CisvLyAg
ICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+
bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYg
aW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVyLnRhcmdldCku
cHRyKCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxp
bmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExM
SW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKKy8vICAgICAg
ICAgICAgICAgICAgICB9CisvLworLy8gICAgICAgICAgICAgICAgICAgIHVubGlua0luY29taW5n
Q2FsbHMoKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGNsZWFy
IHRoZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxpemVVbmNvbmRpdGlvbmFsbHkgYWxsIGNv
bXBpbGVyIHRocmVhZHMKKy8vICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQs
IG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUg
cGFyc2VyLCBhbmQgYnl0ZWNvZGUKKy8vICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXIgaXMg
dGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5mb3Mu
CisvLyAgICAgICAgICAgICAgICAgICAgcmVzZXRKSVREYXRhKCk7CisvLyAgICAgICAgICAgICAg
ICB9IGVsc2UKKy8vICAgICAgICAgICAgICAgICAgICBtX2lzRWxpZ2libGVGb3JMTEludERvd25n
cmFkZSA9IHRydWU7CisvLyAgICAgICAgICAgIH0KKy8vICAgICAgICB9CisvLyAgICB9CisvLwor
Ly8jZW5kaWYKICAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5
cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKQEAgLTE1OTQsNyAr
MTY4Nyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICAg
ICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6Ci0gICAgICAgICAgICBjb3VudCA9
IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOworICAgICAgICAgICAgY291bnQgPSBtX2xs
aW50RXhlY3V0ZUNvdW50ZXItPmNvdW50KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIGNvdW50ID0gbV9qaXRFeGVj
dXRlQ291bnRlci5jb3VudCgpOwpAQCAtMTY3NSwzMCArMTc2OCw2IEBAIFN0cnVjdHVyZVN0dWJJ
bmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmYKICAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2Nr
ZXIpLm1fc3R1YkluZm9zLmFkZChhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKTsKIH0KIAotSklUQWRk
SUMqIENvZGVCbG9jazo6YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVy
biBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0K
LUpJVE11bElDKiBDb2RlQmxvY2s6OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAg
ICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUp
OwotfQotCi1KSVRTdWJJQyogQ29kZUJsb2NrOjphZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N1YklDcy5hZGQoYXJpdGhQ
cm9maWxlKTsKLX0KLQotSklUTmVnSUMqIENvZGVCbG9jazo6YWRkSklUTmVnSUMoVW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX25lZ0lDcy5hZGQo
YXJpdGhQcm9maWxlKTsKLX0KLQogU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6ZmluZFN0
dWJJbmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CkBAIC0zMTMzLDcgKzMyMDIsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6
OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlw
ZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZv
cih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMt
PnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKQEAgLTMzNDksMTMgKzM0MTgsMTMgQEAgQmluYXJ5QXJpdGhQcm9maWxlKiBD
b2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAg
ICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEo
dGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9tdWw6Ci0gICAgICAgIHJl
dHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAg
ICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RpdjoKLSAgICAg
ICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzM2NywxMSAr
MzQzNiwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAg
ICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAg
ICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BJ
bmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+
YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9k
ZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJp
dGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMp
Lm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTM0NzIsMjIgKzM1NDEsMTYgQEAgdm9pZCBDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3Vu
ZGFyaQogfQogCiAjaWYgRU5BQkxFKEpJVCkKLXZvaWQgQ29kZUJsb2NrOjpzZXRQQ1RvQ29kZU9y
aWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYgbWFwKSAKLXsgCi0g
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIGVuc3VyZUpJVERhdGEo
bG9ja2VyKS5tX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtYXApOwotfQotCiBzdGQ6Om9w
dGlvbmFsPENvZGVPcmlnaW4+IENvZGVCbG9jazo6ZmluZFBDKHZvaWQqIHBjKQogeworICAgIGlm
IChhdXRvKiBwY1RvQ29kZU9yaWdpbk1hcCA9IG1faml0Q29kZS0+cGNUb0NvZGVPcmlnaW5NYXAo
KSkgeworICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0g
cGNUb0NvZGVPcmlnaW5NYXAtPmZpbmRQQyhwYykpCisgICAgICAgICAgICByZXR1cm4gY29kZU9y
aWdpbjsKKyAgICB9CisKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKICAgICAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsK
LSAgICAgICAgICAgIGlmIChqaXREYXRhLT5tX3BjVG9Db2RlT3JpZ2luTWFwKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IGppdERh
dGEtPm1fcGNUb0NvZGVPcmlnaW5NYXAtPmZpbmRQQyhwYykpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBjb2RlT3JpZ2luOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBmb3IgKFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb250YWluc1BDKHBjKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4oc3R1YkluZm8tPmNvZGVPcmln
aW4pOwpAQCAtMzUyMSwyOCArMzU4NCwxOSBAQCBzdGQ6Om9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+
IENvZGVCbG9jazo6CiAgICAgcmV0dXJuIGJ5dGVjb2RlSW5kZXg7CiB9CiAKLWludDMyX3QgQ29k
ZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpCi17Ci0gICAgc3dpdGNo
ICh1bmxpbmtlZENvZGVCbG9jaygpLT5kaWRPcHRpbWl6ZSgpKSB7Ci0gICAgY2FzZSBUcmlTdGF0
ZTo6SW5kZXRlcm1pbmF0ZToKLSAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKLSAgICBjYXNlIFRy
aVN0YXRlOjpGYWxzZToKLSAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7Ci0gICAgY2FzZSBU
cmlTdGF0ZTo6VHJ1ZToKLSAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7Ci0gICAgfQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB0aHJlc2hvbGQ7Ci19CisvL3ZvaWQg
Q29kZUJsb2NrOjpqaXRBZnRlcldhcm1VcCgpCisvL3sKKy8vICAgIG1fbGxpbnRFeGVjdXRlQ291
bnRlci0+c2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRG
b3JKSVRBZnRlcldhcm1VcCgpKSwgdGhpcyk7CisvL30KIAotdm9pZCBDb2RlQmxvY2s6OmppdEFm
dGVyV2FybVVwKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKIHsKLSAgICBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJl
c2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3Vu
dGVyLT5zZXROZXdUaHJlc2hvbGQodW5saW5rZWRDb2RlQmxvY2soKS0+dGhyZXNob2xkRm9ySklU
KE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOwogfQogCi12b2lkIENvZGVC
bG9jazo6aml0U29vbigpCit2b2lkIENvZGVCbG9jazo6aml0TmV4dEludm9jYXRpb24oKQogewot
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklU
KE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOworICAgIG1fbGxpbnRFeGVj
dXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwogfQogCiBib29sIENvZGVCbG9j
azo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdApAQCAtMzU4OCwyOCArMzY0
Miw4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRvdWJsZSBudW1T
dWJzID0gMC4wOwogICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKLSAgICBhdXRvIGNv
dW50SUNzID0gWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICBpZiAoYXV0byog
aml0RGF0YSA9IGNvZGVCbG9jay0+bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3Ig
KEpJVEFkZElDKiBhZGRJQyA6IGppdERhdGEtPm1fYWRkSUNzKSB7Ci0gICAgICAgICAgICAgICAg
bnVtQWRkcysrOwotICAgICAgICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29kZVNp
emUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMg
OiBqaXREYXRhLT5tX211bElDcykgewotICAgICAgICAgICAgICAgIG51bU11bHMrKzsKLSAgICAg
ICAgICAgICAgICB0b3RhbE11bFNpemUgKz0gbXVsSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lDIDogaml0RGF0YS0+bV9uZWdJ
Q3MpIHsKLSAgICAgICAgICAgICAgICBudW1OZWdzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxO
ZWdTaXplICs9IG5lZ0lDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBmb3IgKEpJVFN1YklDKiBzdWJJQyA6IGppdERhdGEtPm1fc3ViSUNzKSB7Ci0gICAgICAgICAg
ICAgICAgbnVtU3VicysrOwotICAgICAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJQy0+
Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8gY291bnRJQ3Mg
PSBbJl0gKENvZGVCbG9jayopIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmUtaW1w
bGVtZW50IHRoaXMgdXNpbmcgSklUQ29kZS4KICAgICB9OwogICAgIGhlYXAoKS0+Zm9yRWFjaENv
ZGVCbG9jayhjb3VudElDcyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCBj
bGFzcyBKU01vZHVsZUVudmlyb25tZW50OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
Y2xhc3MgTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OwogY2xh
c3MgTWV0YWRhdGFUYWJsZTsKLWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0
ZXJBdE9mZnNldExpc3Q7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5l
SklUQ29kZTsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJs
b2NrUmFyZURhdGEpOwogCkBAIC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRh
VGFibGUqIG1ldGFkYXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9
CiAKICAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJh
bWV0ZXJzOyB9Citwcml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBu
ZXdWYWx1ZSk7CitwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3
LDcgKzE2OSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1
cm4gbV9udW1WYXJzOyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1f
dW5saW5rZWRDb2RlLT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0K
IAotICAgIHVuc2lnbmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVt
UGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJz
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsg
fQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2
IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29u
c3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBi
b29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBG
SVhNRTogQ29uc2lkZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1
cm4gdHJ1ZSBpZiBgcmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0g
ICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0
YW50KHJlZykuaXNDZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBy
ZWcpCiAgICAgewogICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGlu
dD4obV9udW1WYXJzKTsKQEAgLTI2OCwyMyArMjU5LDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUo
SklUKQogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
CiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAgICAgIEJh
ZzxKSVRBZGRJQz4gbV9hZGRJQ3M7Ci0gICAgICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Ci0g
ICAgICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7Ci0gICAgICAgIEJhZzxKSVRTdWJJQz4gbV9z
dWJJQ3M7CiAgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAg
ICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxMaW5rZWRM
aXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhp
Y0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAgICAgIEZpeGVkVmVj
dG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBGaXhlZFZl
Y3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwog
ICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAg
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklU
Q29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0
Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3Rh
bnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQ
b29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2Rl
KFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZ
KG1faml0RGF0YSkpCkBAIC0yOTMsMjIgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgSklU
RGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAKLSAg
ICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVs
SUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRK
SVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhC
aW5hcnlBcml0aFByb2ZpbGUqKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3Is
IHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRv
ciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVEFkZElDKiBhZGRNYXRo
SUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9m
aWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5l
cmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0
aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9Ci0KLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVl
Pjo6dHlwZT4KLSAgICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9m
aWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6
OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAg
SklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJu
IGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJ
VERhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdERhdGEpOyB9
CiAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSwgQ29kZU9y
aWdpbik7CiAKQEAgLTMyMiwxOCArMjk2LDggQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9y
IGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4K
ICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNv
ZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRD
b2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShq
aXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0g
ICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAg
IHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBj
b25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKLSAgICB2b2lkIHNldFBDVG9Db2RlT3Jp
Z2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpv
cHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwogCiAgICAgdm9pZCBzZXRDYWxs
ZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0KTsKQEAgLTQ3MiwxMCArNDM2LDEyIEBAIHB1Ymxp
YzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0K
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAg
ICAgIHJldHVybiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCk7CisgICAgICAgIAogICAg
IH0KIAogICAgIFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlRm9yQXJndW1lbnQodW5zaWduZWQg
YXJndW1lbnRJbmRleCkKQEAgLTU3MSw2ICs1MzcsNyBAQCBwdWJsaWM6CiAgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQog
ICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1f
dW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihyZWcpOyB9CiAg
ICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5r
ZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihpbmRleCk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9jb25zdGFudFJlZ2lzdGVycykgKyBkZWNsdHlw
ZShtX2NvbnN0YW50UmVnaXN0ZXJzKTo6ZGF0YU1lbW9yeU9mZnNldCgpOyB9CiAKICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rp
b25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkg
eyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNTk1LDIyICs1NjIsMjIgQEAg
cHVibGljOgogICAgIC8vIEp1bXAgVGFibGVzCiAKICNpZiBFTkFCTEUoSklUKQotICAgIFNpbXBs
ZUp1bXBUYWJsZSYgc3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorICAgIFNpbXBsZUp1
bXBUYWJsZSYgYmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIFN0
cmluZ0p1bXBUYWJsZSYgYmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5k
ZXgpOworICAgIHZvaWQqIGJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkKICAgICB7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7Ci0gICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1f
c3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9q
aXREYXRhICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJl
dHVybiBtX2ppdERhdGEtPm1faml0Q29uc3RhbnRQb29sLmRhdGEoKTsKICAgICB9CiAjZW5kaWYK
ICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJl
dHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsg
fQogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBU
YWJsZShpbnQgdGFibGVJbmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIFN0cmlu
Z0p1bXBUYWJsZSYgc3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQotICAgIHsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAgICAgcmV0dXJuIG1faml0
RGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwotICAgIH0KKyNpZiBF
TkFCTEUoREZHX0pJVCkKKyAgICBTdHJpbmdKdW1wVGFibGUmIGRmZ1N0cmluZ1N3aXRjaEp1bXBU
YWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBkZmdTd2l0Y2hKdW1w
VGFibGUoaW50IHRhYmxlSW5kZXgpOwogI2VuZGlmCisKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29k
ZS0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0
IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShp
bnQgdGFibGVJbmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9CiAKQEAgLTYzMiwyMSArNTk5LDIwIEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgY2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFu
ZFNldCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y2hlY2tJ
ZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CiAgICAgfQogCiAgICAgdm9pZCBkb250SklU
QW55dGltZVNvb24oKQogICAgIHsKLSAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVy
SW5kZWZpbml0ZWx5KCk7CisgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+ZGVmZXJJbmRl
ZmluaXRlbHkoKTsKICAgICB9CiAKLSAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90
IHRocmVzaG9sZCk7Ci0gICAgdm9pZCBqaXRBZnRlcldhcm1VcCgpOwogICAgIHZvaWQgaml0U29v
bigpOworICAgIHZvaWQgaml0TmV4dEludm9jYXRpb24oKTsKIAogICAgIGNvbnN0IEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgICAgICByZXR1cm4gKm1fbGxp
bnRFeGVjdXRlQ291bnRlcjsKICAgICB9CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8c3RkOjp0dXBs
ZTxTdHJ1Y3R1cmVJRCwgdW5zaWduZWQ+LCBGaXhlZFZlY3RvcjxMTEludFByb3RvdHlwZUxvYWRB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+PiBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwOwpAQCAt
Nzk3LDYgKzc2Myw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygp
IGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2Vy
UmVxdWVzdHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBh
ZGRCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJy
ZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCkBAIC04MzgsNiArODA1LDcgQEAgcHVi
bGljOgogICAgIG11dGFibGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQg
d2FudHMgdG8gc3RvcmUgdG8gaXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3Vs
ZEFsd2F5c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25l
ZCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAg
LTkwNywxMSArODc1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZN
ZXRhZGF0YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRh
ZGF0YSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9p
bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5n
RWFybHlSZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWly
ZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJu
ICFtX3VubGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBs
b29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5s
aW5rZWRDb2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9
CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKQEAg
LTEwMTAsNyArOTc0LDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1f
bGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2Rl
OwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+
IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAv
LyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0
aGUgcHJvZmlsZWQgY29kZSBibG9jawpAQCAtMTAyOSw3ICs5OTUsNyBAQCBwcml2YXRlOgogCiAg
ICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAgICBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9OwogCiAg
ICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAgICAgdWlu
dDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsOCArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCYXNl
bGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRN
ZXRhZGF0YVRhYmxlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkgKzQyLDcg
QEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlmIChtX21l
dGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9y
RWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9wcm9maWxl
LCBmYWxzZSk7IH0pOwotCiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJ
TEUoVklTSVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8
T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1Nyw2IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwzOCBAQCB2
b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQogCisjaWYg
RU5BQkxFKEpJVCkKK0FMV0FZU19JTkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJsb2NrOjpq
aXRDb2RlTWFwKCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2Rl
LmdldCgpKS0+bV9qaXRDb2RlTWFwOworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJs
ZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sK
KyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBU
YWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgp
KS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxv
Y2s6OmRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0
VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6
SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBl
KCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRD
b2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3
MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3Jh
cChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQogICAgIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAg
Ym9vbCBFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9j
ayA/IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQpOworICAg
IHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAgICBtX2Nv
dW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRo
aXMsIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxz
ZS4KICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwog
ICAgIGJvb2wgaGFzQ3Jvc3NlZFRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlciA+
PSAwOyB9Ci0gICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVC
bG9jayopOworICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2Rl
QmxvY2sqID0gbnVsbHB0cik7CiAgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwogICAgIGRv
dWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENv
dW50KSArIG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpA
QCAtODYsMTMgKzg2LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVCB0aHJlc2hvbGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChU
IHRocmVzaG9sZCkKICAgICB7Ci0gICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwotICAgICAg
ICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
KCkgJiYgZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2Jq
ZWN0LT53ZWFrUmFuZG9tSW50ZWdlcigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5D
aGVja3BvaW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBt
YXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAgIGludDMy
X3QgbWF4VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50
cygpOwogICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAgICAgICAg
dGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xkOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEu
aAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBH
ZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1v
ZGVNZXRhZGF0YVVuc2V0KSA9PSAxMik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJy
YXlMZW5ndGggeworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBh
cnJheVByb2ZpbGUpOyB9CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07CiBzdGF0
aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsK
QEAgLTg4LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdl
dEJ5SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7
IC8vIFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFk
YXRhRGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5z
ZXRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1v
ZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1
cy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCBHZXRC
eVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAgICAgIHJldHVybiBHZXRC
eVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAgICAgICAgCiAgICAgY2FzZSBDYWNoZVR5cGU6Okdl
dEJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPm1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShwcm9maWxlZEJsb2Nr
LT52bSgpKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1w
dXJlUHJvcGVydHkoKSkKICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dW
ZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
IGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRl
Rm9yU3R1YkluZgogICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAog
ICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1Yklu
Zm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2
LDExICsxNzYsMTYgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlBy
b3BlcnR5QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVNlbGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAg
ICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBk
by4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsK
ICAgICAKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0yMzMsMjMgKzIz
OCwzMSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3RlCiAgICAgcmV0
dXJuIGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJlZzsKIH0KIAot
Ym9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5l
QWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQog
ewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0KIAot
Ym9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5m
by5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFT
U0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkpOwor
ICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHVi
SW5mbywgb2Zmc2V0KSk7CisKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAg
ICAgICAvLyBUaGVzZSBzbG90cyBnZXQgZmlsbGVkIGluLiBOb3RoaW5nIGVsc2UgdG8gZG8uCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKQEAg
LTI3OSwyMiArMjkyLDI1IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0
eVIKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6
OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0Fy
cmF5KiBhcnJheSkKK2Jvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkq
IGFycmF5KQogewogICAgIEFTU0VSVChhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsK
IAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghaGFzRnJlZVJlZ2lz
dGVyKHN0dWJJbmZvKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFoYXNB
bnlBcnJheVN0b3JhZ2UoYXJyYXktPmluZGV4aW5nVHlwZSgpKSAmJiBhcnJheS0+aW5kZXhpbmdU
eXBlKCkgIT0gQXJyYXlDbGFzczsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJy
YXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKK2Jv
b2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQogewotICAgIEFT
U0VSVChpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBhcnJheSkpOworICAgIEFTU0VS
VF9VTlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1
YkluZm8sIGFycmF5KSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmll
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE5LDE3ICszMzUsMjAgQEAgYm9vbCBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoUwogICAgIHJldHVybiBsaW5rZWRDb2RlSW5s
aW5lOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxl
U3RyaW5nTGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIGhh
c0ZyZWVSZWdpc3RlcihzdHViSW5mbyk7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitib29sIElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKLSAgICBBU1NFUlQoaXNDYWNoZWFibGVTdHJpbmdMZW5n
dGgoc3R1YkluZm8pKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNoZWFibGVT
dHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbykpOwogCiAgICAgaWYgKCFzdHViSW5mby5o
YXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM2MywxMyAr
MzgyLDE4IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aCgKIH0KIAog
Ci1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2Jvb2wgSW5saW5lQWNjZXNzOjpn
ZW5lcmF0ZVNlbGZJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAg
ICAgIC8vIFRoZXNlIHNsb3RzIGdldCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5mby5i
YXNlR1BSOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAK
QEAgLTQwNiw3ICs0MzAsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcElu
QWNjCiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgLy8gSWYgaXQg
aXMgbm90IEdldEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQgKGUuZy4g
R2V0QnlWYWwpLgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGlyZWN0IGp1
bXAsIGFuZCBvbmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2RlUHRyLgot
ICAgICAgICBpZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAgICAgIGlm
IChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBzdHViSW5m
by5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29kZVB0ciBp
cyBwb2ludGluZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMgbWVhbnMg
dGhhdCBJbmxpbmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAgICAgIC8v
IFdlIHJld3JpdGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNvZGUgb25j
ZSwgYW5kIGNvbnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgogICAgICAg
ICAgICAgaWYgKHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09IHN0dWJJ
bmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CkBAIC00MjEs
NyArNDQ1LDkgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAg
ICAgICAgICAgICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5raW5nIHN0dWIgY2FsbCIpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gdGFy
Z2V0OworICAgICAgICBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOyAv
LyBDbGVhciBvdXQgdGhlIGlubGluZSBhY2Nlc3MgY29kZS4KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtNDM0LDggKzQ2MCwxNCBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjCiAgICAgfSksICJJbmxpbmVBY2Nlc3M6IGxpbmtpbmcgY29uc3RhbnQganVtcCIp
OwogfQogCi12b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQordm9pZCBJbmxpbmVBY2Nlc3M6OnJl
c2V0U3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCiB7CisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkgJiYgY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgc3R1
YkluZm8ubV9jb2RlUHRyID0gc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgICAg
ICBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOyAvLyBDbGVhciBvdXQg
dGhlIGlubGluZSBhY2Nlc3MgY29kZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEND
YWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKHN0dWJJbmZvLnN0YXJ0LnJldGFnZ2VkPEpTSW50
ZXJuYWxQdHJUYWc+KCksIHNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPihbJl0oQ0Nh
bGxIZWxwZXJzJiBqaXQpIHsKICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhIG5vcCBzbGVkIGhl
cmUgYmVjYXVzZSBub2JvZHkgc2hvdWxkIGJlIGp1bXBpbmcgaW50byB0aGUgbWlkZGxlIG9mIGFu
IElDLgogICAgICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC05OSwxNCArOTksMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RkOjpt
YXgoc2l6ZSwgc2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBi
b29sIGdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0
dXJlKiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGNhbkdlbmVyYXRlU2VsZlBy
b3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBz
dGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8m
LCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFi
bGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMg
Ym9vbCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIHN0
YXRpYyBib29sIGdlbmVyYXRlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5
Kik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1Yklu
Zm8mLCBTdHJ1Y3R1cmUqKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVN0cmluZ0xlbmd0aChT
dHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5
QWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVy
dHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFj
ZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBz
dGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0
dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJv
b2wgaXNDYWNoZWFibGVBcnJheUxlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYs
IEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChDb2Rl
QmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlQXJy
YXlMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAg
c3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1
YkluZm8mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVN0cmluZ0xlbmd0
aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogCiAgICAgc3RhdGljIHZvaWQgcmV3
aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4p
OwogICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
Pik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1l
dGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0
ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDYgKzQwLDcgQEAgT1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xB
UwogCiBzdHJ1Y3QgSXRlcmF0aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90IHNlZW5Nb2Rl
cyB7IDAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVzKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1vZGVzKTsgfSAK
ICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9PSBzaXplb2Yo
SXRlcmF0aW9uTW9kZSkpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBBcnJheVByb2Zp
bGUgbV9hcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJv
ZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9hcnJh
eVByb2ZpbGUpOyB9CiAKIHByaXZhdGU6CiAgICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0U2Vl
bkNhbGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNiArNjUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgZnVuYygqbWV0
YWRhdGEpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAgIEFMV0FZU19J
TkxJTkUgc2l6ZV90IG51bUVudHJpZXMoKQorICAgIHsKKyAgICAgICAgYXV0byogc3RhcnQgPSBi
aXR3aXNlX2Nhc3Q8dHlwZW5hbWUgT3A6Ok1ldGFkYXRhKj4oZ2V0KE9wOjpvcGNvZGVJRCkpOwor
ICAgICAgICBhdXRvKiBlbmQgPSBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUgT3A6Ok1ldGFkYXRhKj4o
Z2V0SW1wbChPcDo6b3Bjb2RlSUQgKyAxKSk7CisgICAgICAgIHJldHVybiBlbmQgLSBzdGFydDsK
KyAgICB9CisKICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKTsKIAogICAgIHZvaWQgcmVmKCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDEwICsxODAsMTAgQEAgUHV0QnlTdGF0
dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwogICAgICAgICBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQodWlkKTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAgIHN0
dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQp
OworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZtKCkpOworICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAo
aXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6
cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZpZXIpLCBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFu
dDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZpZXIpLCBzdHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAg
ICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1Yklu
Zm8pOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5m
by5oIgogCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRl
ICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNz
LmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogCkBAIC02NSw5ICs2Niw5IEBAIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OmluaXRHZXRCeUlkU2VsZigKICAgICBBU1NFUlQoaGFzQ29uc3RhbnRJZGVu
dGlmaWVyKTsKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OkdldEJ5SWRTZWxm
KTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNv
ZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZP
ZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRBcnJheUxl
bmd0aChjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIpCkBAIC04Nyw5ICs4OCw5
IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGEKICAgICBBU1NFUlQo
bV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tl
ciwgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZSk7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRp
ZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFy
cmllcihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVCbG9j
ay0+dm0oKS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYub2Zm
c2V0ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjppbml0SW5CeUlkU2VsZihjb25zdCBDb25jdXJyZW50SlNMb2NrZXJC
YXNlJiBsb2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgQ2FjaGVhYmxlSWRlbnRpZmll
ciBpZGVudGlmaWVyKQpAQCAtOTcsOSArOTgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0SW5CeUlkU2VsZihjCiAgICAgQVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5z
ZXQpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6SW5CeUlkU2VsZik7CiAg
ICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsK
KyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlLT5pZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxv
Y2spOwotICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxmT2Zmc2V0
ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCkBAIC0yMzYs
NyArMjM3LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbwogICAg
ICAgICAvLyB3ZSdyZSBidWZmZXJlZCBpcyBiZWNhdXNlIHdlIHJlbHkgb24gaXQgdG8gcmVzZXQg
ZHVyaW5nIEdDIGlmIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZQogICAgICAgICAvLyBpcyBj
b2xsZWN0ZWQuCiAgICAgICAgIG1faWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgICAgIG1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUgPSAwOwogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgZ2VuZXJhdGVkIHNv
bWUgY29kZSB0aGVuIHdlIGRvbid0IHdhbnQgdG8gYXR0ZW1wdCB0byByZXBhdGNoIGluIHRoZSBm
dXR1cmUgdW50aWwgd2UKICAgICAgICAgLy8gZ2F0aGVyIGVub3VnaCBjYXNlcy4KQEAgLTI1MSw3
ICsyNTIsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiB7CiAg
ICAgY2xlYXJCdWZmZXJlZFN0cnVjdHVyZXMoKTsKICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRy
OwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5jbGVhcigpOworICAgIG1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVU
eXBlOjpVbnNldCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg1LDYgKzI4Niw3IEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAgICAgICAgcmVzZXRQdXRCeShjb2Rl
QmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5h
bWU6CiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZh
bCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgpAQCAtMzYw
LDggKzM2Miw4IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAg
ICB9CiAKICAgICBib29sIGlzVmFsaWQgPSB0cnVlOwotICAgIGlmIChtX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpCi0gICAgICAgIGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChtX2lubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKQorICAgICAgICBpc1ZhbGlkICY9IHZt
LmhlYXAuaXNNYXJrZWQoc3RydWN0dXJlKTsKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVU
eXBlOjpTdHViKQogICAgICAgICBpc1ZhbGlkICY9IHUuc3R1Yi0+dmlzaXRXZWFrKHZtKTsKIApA
QCAtMzc1LDggKzM3Nyw4IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVy
ZW4KIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpw
cm9wYWdhdGVUcmFuc2l0aW9ucyhWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmIChtX2lubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCi0gICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0g
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpKQorICAgICAgICBzdHJ1Y3R1
cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hl
VHlwZTo6U3R1YikKICAgICAgICAgdS5zdHViLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9y
KTsKQEAgLTQzMCw2ICs0MzIsMjA0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6c2UKICAgICBtX2NhY2hlVHlwZSA9IG5ld0NhY2hlVHlwZTsKIH0KIAordm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENv
ZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8pCit7
CisgICAgYWNjZXNzVHlwZSA9IHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZTsKKyAgICBzdGFy
dCA9IHVubGlua2VkU3R1YkluZm8uc3RhcnQ7CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRT
dHViSW5mby5kb25lTG9jYXRpb247CisgICAgc2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5r
ZWRTdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKTsKKyAgICBjb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZv
LmJ5dGVjb2RlSW5kZXgpOworICAgIG1fY29kZVB0ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsK
KworICAgIHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCk7CisgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxp
bmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZv
ciBpdGVyYXRvcl9uZXh0LCB3ZSBjYW4ndCBjbG9iYmVyIHRoZSAiZG9udENsb2JiZXJSZWdpc3Rl
ciIgcmVnaXN0ZXIgZWl0aGVyLgorICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXIpOworICAgIH0KKworICAgIHN3aXRj
aCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgor
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZv
LnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAg
ICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5l
Y21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRT
ZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJp
dmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICBz
d2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6
Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlz
U3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAg
ICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gdW5saW5rZWRTdHVi
SW5mby5wcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERl
ZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmll
bGRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2
YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVC
cmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNr
UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2gg
KGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAg
ICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBC
YXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBC
YXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJz
OjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAg
ICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAg
bV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0g
ZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFu
Y2VPZjoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHBy
b3RvdHlwZUlzS25vd25PYmplY3QgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5l
SW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MucHJvdG90eXBlR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICAgICAgbV9zdHViSW5mb0dQ
UiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisg
ICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5m
b0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6
R2V0QnlJZERpcmVjdDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFs
aWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhp
czoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAg
IHJlZ3MudGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFs
dWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0
QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVn
cy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAg
ICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBpZiAoYWNjZXNz
VHlwZSA9PSBBY2Nlc3NUeXBlOjpQdXRCeVZhbCkKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxl
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0g
ZmFsc2U7CisgICAgICAgIHZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQ
UiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLmJy
YW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgICAgICBt
X3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKICNpZiBBU1NFUlRfRU5BQkxFRAogdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6Y2hlY2tDb25zaXN0ZW5jeSgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKSVRTdHVi
Um91dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3B0aW9u
cy5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgpAQCAtNTYsNiAr
NTcsNyBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgewogICAgIEdldEJ5VmFsLAog
ICAgIFB1dEJ5SWQsCiAgICAgUHV0QnlWYWwsCisgICAgUHV0UHJpdmF0ZU5hbWUsCiAgICAgSW5C
eUlkLAogICAgIEluQnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC03OCw2ICs4MCw4IEBA
IGVudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKICAgICBTdHJpbmdMZW5ndGgKIH07CiAK
K3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworCiBjbGFzcyBTdHJ1Y3R1cmVTdHVi
SW5mbyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1YkluZm8pOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtOTgsNiArMTAyLDggQEAgcHVibGljOgogICAg
IHZvaWQgZGVyZWYoKTsKICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAorICAgIHZvaWQgaW5pdGlh
bGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8mKTsKKwogICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAg
Ly8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJ
ZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCkBAIC0zMjUsMTMgKzMzMSwxOSBAQCBw
cml2YXRlOgogCiBwdWJsaWM6CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOworICAgIFByb3Bl
cnR5T2Zmc2V0IGJ5SWRTZWxmT2Zmc2V0OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZC
eUlkU2VsZk9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5m
bywgYnlJZFNlbGZPZmZzZXQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJl
U3R1YkluZm8sIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7IH0KICAgICB1bmlvbiB7Ci0g
ICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAg
ICAgIH0gYnlJZFNlbGY7CiAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBzdHViOwogICAgIH0g
dTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmU7CisgICAgU3RydWN0dXJlKiBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKFZNJiB2bSkKKyAg
ICB7CisgICAgICAgIGlmICghbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB2bS5nZXRTdHJ1Y3R1cmUobV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICB9CisgICAgU3RydWN0dXJlSUQgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlIHsgMCB9OwogcHJpdmF0ZToKICAgICBDYWNoZWFibGVJZGVudGlm
aWVyIG1faWRlbnRpZmllcjsKICAgICAvLyBSZXByZXNlbnRzIHRob3NlIHN0cnVjdHVyZXMgdGhh
dCBhbHJlYWR5IGhhdmUgYnVmZmVyZWQgQWNjZXNzQ2FzZXMgaW4gdGhlIFBvbHltb3JwaGljQWNj
ZXNzLgpAQCAtNDQ3LDYgKzQ1OSwxNyBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNH
ZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7
CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQ
cml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRL
aW5kOjpub25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpzbG9wcHko
KSB9OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBz
dGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBv
ZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisK
ICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJTdGF0ZSgp
CiAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsKICAgICBp
ZiAocGVyY2VudGFnZSAhPSBwZXJjZW50YWdlKQogICAgICAgICBwZXJjZW50YWdlID0gMC4wOwot
ICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBw
ZXJjZW50YWdlLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVy
IHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIiVcbiIpOwogfQogCiB2b2lkIGVuYWJsZVN1
cGVyU2FtcGxlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAK
KyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDbGFz
c0luZm8uaCIKQEAgLTc4LDYgKzc5LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29k
ZUJsb2NrKFZNJgogICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tlcik7CiAg
ICAgICAgIG1fcmFyZURhdGEtPm1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAgfQorCisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQo
T3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgpAQCAtMzE2LDYgKzMxOSw0OCBAQCBpbnQgVW5saW5rZWRDb2RlQmxv
Y2s6Om91dE9mTGluZUp1bXBPZmZzCiAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMu
Z2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECitib29sIFVubGlu
a2VkQ29kZUJsb2NrOjpoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7Cisg
ICAgaWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSA+IDEwMCkgeworICAgICAgICBpZiAobnVtYmVy
T2ZJZGVudGlmaWVycygpICE9IG1fY2FjaGVkSWRlbnRpZmllclVpZHMuc2l6ZSgpKSB7CisgICAg
ICAgICAgICBMb2NrZXIgbG9ja2VyKG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrKTsKKyAgICAg
ICAgICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBjYWNoZWRJZGVudGlmaWVyVWlkczsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJz
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIg
PSBpZGVudGlmaWVyKGkpOworICAgICAgICAgICAgICAgIGNhY2hlZElkZW50aWZpZXJVaWRzLmFk
ZChpZGVudGlmaWVyLmltcGwoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAgICBtX2NhY2hlZElkZW50aWZpZXJVaWRzID0g
V1RGTW92ZShjYWNoZWRJZGVudGlmaWVyVWlkcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5jb250YWlucyh1aWQpOworICAgIH0KKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAg
ICAgICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitpbnQzMl90IFVu
bGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpCit7Cisg
ICAgc3dpdGNoIChkaWRPcHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1p
bmF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIFRyaVN0YXRlOjpGYWxz
ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6VHJ1
ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwogdm9pZCBVbmxpbmtlZENv
ZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
IW1fbWV0YWRhdGEtPmlzRmluYWxpemVkKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKICNpbmNsdWRl
ICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNpbmNsdWRl
ICJERkdFeGl0UHJvZmlsZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNs
dWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNp
bmNsdWRlICJJZGVudGlmaWVyLmgiCkBAIC02NCw2ICs2Niw3IEBAIGNsYXNzIFVubGlua2VkQ29k
ZUJsb2NrOwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7Citj
bGFzcyBCYXNlbGluZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNz
IExpbmtUaW1lQ29uc3RhbnQgOiBpbnQzMl90OwogCkBAIC0xNzUsNiArMTc4LDcgQEAgcHVibGlj
OgogCiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3Rh
bnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3Qg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmly
dHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcu
dG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkg
eyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3
LDYgKzIxMSwxNSBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0
TW9kZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBj
b25zdDsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4
IGluZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0K
KyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3Ry
dWN0aW9ucygpLmF0KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNF
bmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2lu
ICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3Ry
dWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0
aW9uc1NpemUoKSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAg
IHVuc2lnbmVkIG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9j
YWxzOyB9CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsg
fQpAQCAtMzM0LDEwICszNDcsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tZXRhZGF0
YS0+c2l6ZUluQnl0ZXMoKTsKICAgICB9CiAKKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxl
Rm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKKyAgICB7CisgICAgICAgIC8vIFNvbWUgYnVpbHRpbnMg
YXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCisgICAg
ICAgIHJldHVybiAhaXNCdWlsdGluRnVuY3Rpb24oKTsKKyAgICB9CiAgICAgdm9pZCBhbGxvY2F0
ZVNoYXJlZFByb2ZpbGVzKCk7CiAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUmIHVubGlua2VkVmFs
dWVQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZXNbaW5kZXhd
OyB9CiAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUmIHVubGlua2VkQXJyYXlQcm9maWxlKHVuc2ln
bmVkIGluZGV4KSB7IHJldHVybiBtX2FycmF5UHJvZmlsZXNbaW5kZXhdOyB9CiAKKyNpZiBBU1NF
UlRfRU5BQkxFRAorICAgIGJvb2wgaGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwor
I2VuZGlmCisKKyAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7
CisKIHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSosIENv
ZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1v
ZGU+KTsKIApAQCAtMzk3LDYgKzQyMSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZXhp
Y2FsU2NvcGVGZWF0dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xv
Y2s7CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsK
IHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNl
UGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEzLDYgKzQzOCw5IEBAIHByaXZhdGU6CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCisg
ICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFjZSB0byBzdG9yZSB0aGlzIHN0dWZmPworICAg
IFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBW
ZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2ZpbGVzOwogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtNDU4
LDYgKzQ4NiwzMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVt
cE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVK
dW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgICAgICByZXR1
cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgfQorCisgICAgdW5z
aWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJl
c3VsdCA9IG1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJp
dGhQcm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUo
KTsKKyAgICAgICAgbV91bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKFVuYXJ5QXJpdGhQcm9maWxl
KCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJp
dGhQcm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmls
ZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorCisgICAg
QmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4g
bV9sbGludEV4ZWN1dGVDb3VudGVyOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5l
SnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBA
IC00NjUsOSArNTE3LDE1IEBAIHByaXZhdGU6CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9v
dXRPZkxpbmVKdW1wVGFyZ2V0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFy
ZURhdGE7CiAgICAgRml4ZWRWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9u
SW5mbzsKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVy
OwogICAgIEZpeGVkVmVjdG9yPFVubGlua2VkVmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7
CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+IG1fYXJyYXlQcm9maWxlczsK
IAorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgTG9jayBtX2NhY2hlZElkZW50aWZpZXJVaWRzTG9j
azsKKyAgICBIYXNoU2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gbV9jYWNoZWRJZGVudGlmaWVyVWlk
czsKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAg
ICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9ja0dlbmVyYXRvci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNjcsNiArNjcsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dp
bmdPcGNvZGVzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERl
YnVnZ2luZ09wY29kZXMoKTsgfQogICAgIGJvb2wgaGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJl
dHVybiBtX2NvZGVCbG9jay0+aGFzQ2hlY2twb2ludHMoKTsgfQogICAgIGJvb2wgaGFzVGFpbENh
bGxzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmhhc1RhaWxDYWxscygpOyB9CisgICAg
dW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmFk
ZEJpbmFyeUFyaXRoUHJvZmlsZSgpOyB9CisgICAgdW5zaWduZWQgYWRkVW5hcnlBcml0aFByb2Zp
bGUoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKTsgfQogCiAg
ICAgLy8gVXBkYXRpbmcgVW5saW5rZWRDb2RlQmxvY2suCiAgICAgdm9pZCBzZXRIYXNDaGVja3Bv
aW50cygpIHsgbV9jb2RlQmxvY2stPnNldEhhc0NoZWNrcG9pbnRzKCk7IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRh
YmxlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTUg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRh
VGFibGUpOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWlu
dHB0cl90IG9mZnNldEluTWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VU
eXBlT2Zmc2V0ID0gbV9pczMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURd
IDogb2Zmc2V0VGFibGUxNigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAgICBiYXNlVHlwZU9m
ZnNldCA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25vZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFk
YXRhKSwgYmFzZVR5cGVPZmZzZXQpOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBz
aXplb2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOwor
ICAgIH0KKwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KICAgICB1bnNpZ25lZCBu
dW1FbnRyaWVzKCk7CiAKQEAgLTEwNyw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gc19vZmZzZXQxNlRhYmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0g
dWludDMyX3Q7CiAgICAgdXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NSwxMyArNDUsMTEgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ug
ewogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1i
ZXJPZkJ1Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJl
ck9mU3BlY0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1
Y2tldEluZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJl
ck9mU3BlY0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQogICAgIHsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyAr
K2kpCi0gICAgICAgICAgICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKKyAgICAgICAgY2xlYXJCdWNrZXRzKCk7CiAgICAgfQogICAgIAogICAgIEVuY29kZWRKU1Zh
bHVlKiBzcGVjRmFpbEJ1Y2tldCh1bnNpZ25lZCBpKQpAQCAtNTksNiArNTcsMTIgQEAgc3RydWN0
IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZCdWNrZXRzICsgaSA8
IHRvdGFsTnVtYmVyT2ZCdWNrZXRzKTsKICAgICAgICAgcmV0dXJuIG1fYnVja2V0cyArIG51bWJl
ck9mQnVja2V0cyArIGk7CiAgICAgfQorCisgICAgdm9pZCBjbGVhckJ1Y2tldHMoKQorICAgIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyAr
K2kpCisgICAgICAgICAgICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKKyAgICB9CiAgICAgCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8odW5zaWduZWQg
YnVja2V0KSBjb25zdAogICAgIHsKQEAgLTEyMyw4ICsxMjcsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9m
aWxlQmFzZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJl
ZGljdGlvbiBhbmQgcmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55
IHRocmVhZAotICAgIC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1
bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVy
T2ZCdWNrZXRzOyArK2kpIHsKQEAgLTEzOSw3ICsxNDEsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxl
QmFzZSB7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAg
ICAKKwogICAgIEVuY29kZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107
CiAKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTYx
LDYgKzE2Myw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAog
c3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZC
dWNrZXRzPDA+IHsKICAgICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1i
ZXJPZkJ1Y2tldHM8MD4oKSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RC
dWNrZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNb
MF0pOyB9CiB9OwogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVi
bGljIFZhbHVlUHJvZmlsZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnkKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRz
dCwgc3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9w
TmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVt
aXQodGhpcywgZHN0LCBzcmMsIHR5cGUsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmls
ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRV
bmFyeU9wPE9wQml0bm90Pihkc3QsIHNyYyk7CkBAIC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRJbmMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wSW5jOjpl
bWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVC
bG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAog
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0
KQogewotICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhp
cywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0
dXJuIHNyY0RzdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC02ODIsNyArNjgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBSZWdpc3RlcklEKj4KICAgICAgICAgZW1pdEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNy
YzIsIHR5cGVzKTsKKyAgICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwg
c3JjMiwgdHlwZXMsIG1fY29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENv
ZGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKICNpbmNs
dWRlICJERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKICNpbmNs
dWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKQEAgLTM0LDYgKzM1LDcgQEAK
ICNpbmNsdWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5o
IgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZVNldC5oIgorI2luY2x1ZGUgIkpJVE1hdGhJQy5o
IgogI2luY2x1ZGUgIkpTQ2FzdC5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGlsYXRpb24uaCIK
ICNpbmNsdWRlICJSZWNvcmRlZFN0YXR1c2VzLmgiCkBAIC00NCw2ICs0Niw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBJZGVudGlmaWVyOworY2xhc3MgUENU
b0NvZGVPcmlnaW5NYXA7CiBjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKIAogbmFtZXNwYWNlIERG
RyB7CkBAIC03MCw3ICs3Myw3IEBAIHN0cnVjdCBXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiB7CiAg
ICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV90bzsKIH07CiAgICAgICAgIAotY2xhc3MgQ29tbW9u
RGF0YSB7CitjbGFzcyBDb21tb25EYXRhIDogcHVibGljIE1hdGhJQ0hvbGRlciB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CiBwdWJsaWM6CiAgICAgQ29tbW9uRGF0YSgp
CkBAIC0xMTYsNiArMTE5LDcgQEAgcHVibGljOgogICAgIEZpeGVkVmVjdG9yPENvZGVCbG9ja0pl
dHRpc29uaW5nV2F0Y2hwb2ludD4gbV93YXRjaHBvaW50czsKICAgICBGaXhlZFZlY3RvcjxBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50czsK
ICAgICBGaXhlZFZlY3RvcjxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+
IG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50czsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgUmVj
b3JkZWRTdGF0dXNlcyByZWNvcmRlZFN0YXR1c2VzOwogICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1l
bnQ+IG1fanVtcFJlcGxhY2VtZW50czsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRD
b2RlLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBUcmFja2VkUmVmZXJlbmNlczsKIAorc3RydWN0IFNpbXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBT
dHJpbmdKdW1wVGFibGU7CisKIG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBKSVRDb21waWxlcjsK
QEAgLTEwMSw2ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2lu
PiBmaW5kUEMoQ29kZUJsb2NrKiwgdm9pZCogcGMpIGZpbmFsOwogCiAgICAgdXNpbmcgRGlyZWN0
SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkc7CisKKyAgICBQQ1RvQ29kZU9yaWdpbk1h
cCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBjb21tb24ubV9wY1RvQ29k
ZU9yaWdpbk1hcC5nZXQoKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklU
Q29tcGlsZXI7IC8vIEFsbG93IEpJVENvbXBpbGVyIHRvIGNhbGwgc2V0Q29kZVJlZigpLgpAQCAt
MTQwLDYgKzE0NSw4IEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPEJ5dGVjb2RlSW5kZXgsIFRyaWdn
ZXJSZWFzb24+IHRpZXJVcEVudHJ5VHJpZ2dlcnM7CiAKICAgICBXcml0ZUJhcnJpZXI8Q29kZUJs
b2NrPiBtX29zckVudHJ5QmxvY2s7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBt
X3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgdW5zaWduZWQgb3NyRW50cnlSZXRyeTsKICAgICBi
b29sIGFiYW5kb25PU1JFbnRyeTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg1LDEzICsxODUsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlu
ayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIAogICAgIG1fZ3JhcGgucmVnaXN0ZXJGcm96ZW5WYWx1
ZXMoKTsKIAotICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0
eSgpIHx8ICFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAg
aWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOwotICAg
ICAgICBpZiAoIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVz
ID0gV1RGTW92ZShtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7Ci0gICAgfQorICAgIEFTU0VS
VChtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpOworICAgIEFT
U0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpOworICAgIGlmICgh
bV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKSAKKyAgICAgICAgbV9q
aXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBpZiAoIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVz
LmlzRW1wdHkoKSkKKyAgICAgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZN
b3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKIAogICAgIGZvciAoQmFnPFN3aXRjaERh
dGE+OjppdGVyYXRvciBpdGVyID0gbV9ncmFwaC5tX3N3aXRjaERhdGEuYmVnaW4oKTsgISFpdGVy
OyArK2l0ZXIpIHsKICAgICAgICAgU3dpdGNoRGF0YSYgZGF0YSA9ICoqaXRlcjsKQEAgLTE5OSwx
MiArMTk4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAg
ICAgICAgY2FzZSBTd2l0Y2hDaGFyOgogICAgICAgICBjYXNlIFN3aXRjaEltbTogewogICAgICAg
ICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VChtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCkuaXNF
bXB0eSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBU
YWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5rZWRTd2l0Y2hKdW1w
VGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNo
VGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XTsKICAg
ICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2stPmlu
ZGV4XSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJsZS5tX2N0aU9mZnNl
dHMuc2l6ZSgpID09IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKSk7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuc2l6ZSgp
OyBqLS07KQpAQCAtMjE5LDEyICsyMTgsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5r
QnVmZmVyJiBsaW5rQgogCiAgICAgICAgIGNhc2UgU3dpdGNoU3RyaW5nOiB7CiAgICAgICAgICAg
ICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1f
Y29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KS5p
c0VtcHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlzRW1wdHkoKSk7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IFVu
bGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN0
cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICAgICAg
U3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hK
dW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tk
YXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlEZWZhdWx0ID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxs
VGhyb3VnaC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtl
ZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCkgPT0gdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxl
LnNpemUoKSArIDEpOwogICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGxpbmtlZFRhYmxl
Lm1fY3RpT2Zmc2V0cykKQEAgLTMzMyw3ICszMzIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5r
KExpbmtCdWZmZXImIGxpbmtCCiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0UENUb0Nv
ZGVPcmlnaW5NYXAobWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpKTsKKyAgICAgICAgbV9qaXRDb2RlLT5j
b21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+
KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBsaW5rQnVmZmVyKTsKIH0KIAog
c3RhdGljIHZvaWQgZW1pdFN0YWNrT3ZlcmZsb3dDaGVjayhKSVRDb21waWxlciYgaml0LCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QmIHN0YWNrT3ZlcmZsb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3
LDcgKzk3LDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKgogICAg
IEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsK
ICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwot
ICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFTU0VSVChjb2RlQmxv
Y2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKICAgICBpZiAoIU9w
dGlvbnM6OnVzZU9TUkVudHJ5VG9ERkcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERG
R19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHSklU
Q29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIKQEAg
LTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxsSGVs
cGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2ggKGppdC5jb2RlQmxvY2so
KS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAgICAgIGNsaXBw
ZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChqaXQu
Y29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNsaXBw
ZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJn
ZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgotICAg
ICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhy
ZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsKKyAg
ICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRo
cmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMTMsNiArMzE0LDEwIEBAIHZv
aWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tG
b3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgp
KSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJ
bnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAgICAgICAgaml0LnN0b3Jl
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZy
YW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpKTsKKyAgICAg
ICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2Vs
aW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2Fs
bGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxlZVNh
dmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19tZXRhZGF0
YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVKSVRDb25zdGFudFBvb2wo
KSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJ
VDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghaW5saW5lQ2Fs
bEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw2ICs0MDksOSBAQCB2b2lkIGFkanVzdEFuZEp1
bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpw
Y0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0
UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPm1ldGFk
YXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGluZUpJVENvbnN0
YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CisKICAgICAgICAgY29kZUJsb2NrRm9y
RXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4
IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1v
blNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR0pJVENv
ZGUuaCIKQEAgLTI4NjksNyArMjg3MCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25GaW5kU3cKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsRnJhbWUpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJs
b2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBBU1NFUlQodmFsdWUuaXNEb3VibGUoKSk7CiAgICAgZG91YmxlIGFzRG91YmxlID0gdmFs
dWUuYXNEb3VibGUoKTsKQEAgLTI4OTAsNyArMjg5MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25Td2l0Y2gKIAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgbnVsbHB0cik7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxv
Y2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5kZmdTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CiAgICAgcmV0dXJuIGxpbmtlZFRhYmxlLmN0aUZvclZhbHVlKCp1bmxp
bmtlZFRhYmxlLCBzdHJJbXBsKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzAsNiArNzMw
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAg
ICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZVRhZ0dQ
UiwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6
ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFy
Z3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVy
cyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAx
KTsKQEAgLTg4OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2Rl
KiBub2RlCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAo
aXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0gewogICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFt
ZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzQsNiArODM0LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZsZURhdGEu
Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMpOwog
ICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAg
ICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAgICAgRWRnZSBh
cmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CkBAIC05ODUs
NyArOTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAg
IAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwp
IHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0
aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJ
Qzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcgKzM5ODUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lz
dGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9y
aWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAorICAg
ICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxs
U2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVzZWRSZWdpc3RlcnMsCiAgICAgICAg
IEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRP
bmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7
CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogCkBAIC00OTA1
LDcgKzQ5MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAg
ICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVD
b2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJp
bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklU
QWRkSUMqIGFkZElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVEFkZElDKGFyaXRoUHJvZmls
ZSk7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklU
QWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJh
dGlvblZhbHVlQWRkT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBv
cGVyYXRpb25WYWx1ZUFkZDsKICAgICAKQEAgLTQ5ODksNyArNDk4OSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVN1YihOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNv
ZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2ppdC5jb2Rl
QmxvY2soKS0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRTdWJJQyogc3ViSUMg
PSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwogICAg
IGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZTsKICAg
ICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViOwogCkBAIC01
NTcxLDcgKzU1NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVOZWdhdGUo
CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxp
bmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwog
ICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+
dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJ
VE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJQyhhcml0aFByb2Zp
bGUpOworICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJ
VE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVy
YXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
ID0gb3BlcmF0aW9uQXJpdGhOZWdhdGU7CiAgICAgY29tcGlsZU1hdGhJQyhub2RlLCBuZWdJQywg
cmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwpAQCAtNTgxNSw3ICs1
ODE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTXVsKE5vZAogICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlB
cml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVE11bElD
KiBtdWxJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwor
ICAgIEpJVE11bElDKiBtdWxJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVE11bElD
KGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25W
YWx1ZU11bE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0
aW9uVmFsdWVNdWw7CiAKQEAgLTE0NzczLDcgKzE0NzczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5ncHIoKTsK
IAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
dGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJbmRleCk7Cisg
ICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlz
UmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxv
Y2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9p
bnQ6OlJlCiAKICAgICBpZiAodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygp
KSB7CiAgICAgICAgIEIzOjpQQ1RvT3JpZ2luTWFwIG9yaWdpbk1hcCA9IHN0YXRlLnByb2MtPnJl
bGVhc2VQQ1RvT3JpZ2luTWFwKCk7Ci0gICAgICAgIGNvZGVCbG9jay0+c2V0UENUb0NvZGVPcmln
aW5NYXAobWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyKHZtLCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5r
QnVmZmVyKSk7CisgICAgICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5tX3BjVG9Db2RlT3JpZ2lu
TWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyKHZtLCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5r
QnVmZmVyKTsKICAgICB9CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBs
YWJlbCA9IHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZjxKU0Vu
dHJ5UHRyVGFnPihzdGF0ZS5wcm9jLT5jb2RlKCkuZW50cnlwb2ludExhYmVsKDApKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAyODI2NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNjgsNiArNjgsOCBAQCBwdWJsaWM6CiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24o
KSBvdmVycmlkZTsKICAgICBzdGF0aWMgcHRyZGlmZl90IGNvbW1vbkRhdGFPZmZzZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklUQ29kZSwgY29tbW9uKTsgfQogICAgIHZvaWQgc2hyaW5r
VG9GaXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikgb3ZlcnJpZGU7CisKKyAgICBQQ1RvQ29k
ZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBjb21tb24u
bV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQogICAgIAogICAgIERGRzo6Q29tbW9uRGF0YSBj
b21tb247CiAgICAgVmVjdG9yPE9TUkV4aXQ+IG1fb3NyRXhpdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMyMCw2ICsyMzIwLDE4IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbXBpbGVC
aW5hcnlNYXRoSUM8SklUU3ViR2VuZXJhdG9yPihhcml0aFByb2ZpbGUsIHJlcGF0Y2hpbmdGdW5j
dGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6
aXNfc2FtZTxHZW5lcmF0b3IsIEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBz
dGF0aWMgSklUQWRkSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5
QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUQWRkSUMocHJvZmls
ZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTXVsR2VuZXJh
dG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRNdWxJQyogYWRkTWF0aElDKERGRzo6
Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJu
IGNvbW1vbi5hZGRKSVRNdWxJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3Nh
bWU8R2VuZXJhdG9yLCBKSVROZWdHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGlj
IEpJVE5lZ0lDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIFVuYXJ5QXJpdGhQ
cm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUTmVnSUMocHJvZmlsZSk7IH0K
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUU3ViR2VuZXJhdG9yPjo6
dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRTdWJJQyogYWRkTWF0aElDKERGRzo6Q29tbW9u
RGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1v
bi5hZGRKSVRTdWJJQyhwcm9maWxlKTsgfQorCiAgICAgdm9pZCBjb21waWxlVmFsdWVNdWwoKQog
ICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKQEAgLTIzOTEsNyArMjQwMyw3IEBAIHBy
aXZhdGU6CiAjZW5kaWYKIAogICAgICAgICAgICAgICAgIEJveDxNYXRoSUNHZW5lcmF0aW9uU3Rh
dGU+IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+Ojpj
cmVhdGUoKTsKLSAgICAgICAgICAgICAgICBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRo
SUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSk7
CisgICAgICAgICAgICAgICAgSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gYWRk
TWF0aElDPEdlbmVyYXRvcj4oc3RhdGUtPmppdENvZGUtPmNvbW1vbiwgYXJpdGhQcm9maWxlKTsK
ICAgICAgICAgICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKEpTVmFsdWVS
ZWdzKHBhcmFtc1swXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIHBhcmFt
cy5ncFNjcmF0Y2goMCkpOwogCiAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmls
aW5nID0gZmFsc2U7CkBAIC0yNTAwLDcgKzI1MTIsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAg
ICAgICAgICAgICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUgPSBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAg
ICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxvY2so
KS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgICAgICBK
SVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gYWRkTWF0aElDPEdlbmVyYXRvcj4o
c3RhdGUtPmppdENvZGUtPmNvbW1vbiwgYXJpdGhQcm9maWxlKTsKICAgICAgICAgICAgICAgICBt
YXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQs
IEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSksCiAgICAgICAgICAgICAgICAgICAgIEpTVmFs
dWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBhcmFtc1syXS5ncHIoKSksIHBh
cmFtcy5mcFNjcmF0Y2goMCksCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mcFNjcmF0Y2go
MSksIHBhcmFtcy5ncFNjcmF0Y2goMCkpOwpAQCAtNDMxNyw3ICs0MzI5LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpGVExKSVQpID8gcGFyYW1zLmdwU2NyYXRjaCgwKSA6IEludmFsaWRHUFJSZWc7CiAKICAg
ICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVFB1dEJ5VmFsR2VuZXJhdG9yPjo6Y3Jl
YXRlKAotICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBu
b2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLAor
ICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2Vt
YW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLAog
ICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKIAogICAgICAgICAgICAgZ2VuZXJhdG9y
LT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKQEAgLTEwMjg1LDYgKzEwMjk3
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVt
UGFzc2VkQXJnczsgaSA8IG51bUFsbG9jYXRlZEFyZ3M7ICsraSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLmFyZ3MuYXBwZW5kKFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpz
VW5kZWZpbmVkKCkpKTsKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2Vk
QXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51
bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAg
ICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2Rl
QmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZv
KHNlbWFudGljTm9kZU9yaWdpbik7CkBAIC0xMDQ0MywxMyArMTA0NTYsMTQgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQocGFyYW1zWzEgKyBp
XS5yZWNvdmVyeUZvckpTVmFsdWUoKSk7CiAKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5u
dW1QYXNzZWRBcmdzID0gbnVtQXJnczsKKyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1Q
YXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0
ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4p
OwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6
VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIGF1dG8gc2xvd1Bh
dGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVn
VDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxG
YXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAg
ICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9y
VGFpbENhbGwoKTsKICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwNzkyLDcgKzEwODA2LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRo
OwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAg
ICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2Fs
bExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZh
bGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChq
aXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVw
YXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtMTEwNzMs
NyArMTEwODcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7
CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAg
c2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5m
bzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZd
IHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWls
Q2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAg
fSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0
YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0MiwyOCBAQCBjbGFzcyBNZXRhZGF0
YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJldHVybiBpZiBlbXB0eT8KIAotICAgICAg
ICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcykKKyAgICAgICAgZGVmIGdlbmVyYXRl
T2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQorICAgICAgICAgICAgZmllbGRO
YW1lcy5tYXAgZG8gfGZpZWxkTmFtZXwKKyAgICAgICAgICAgICAgICAiI3twcmVmaXh9c3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsxLi5d
fSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9
IgorICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKKyAgICAgICAgZW5kCisKKyAgICAgICAgZGVm
IGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGZpZWxkTmFtZXMpCiAgICAgICAgICAgICBm
aWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRf
b2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVy
dEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCisgICAgICAgICAg
ICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAg
ICAnLCB0eXBlLCBmaWVsZE5hbWVzKX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQu
dG9fc307IgorICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAg
ICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVzaChmaWVsZE5hbWUpCisgICAgICAgICAgICAg
ICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgogICAgICAgICAg
ICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAg
ICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzKQorICAgICAg
ICBmaWVsZE5hbWVzID0gW10KKyAgICAgICAgcHJlZml4ID0gIiAgICAgICAgIgorICAgICAgICBm
aWVsZHMgPSBjb252ZXJ0RmllbGRzKHByZWZpeCwgQGZpZWxkcywgZmllbGROYW1lcykKKyAgICAg
ICAgZmllbGRzID0gZmllbGRzICsgIlxuIiArIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJl
Zml4LCBmaWVsZE5hbWVzKQogCiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0
aWFsaXplcnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzY3LDYgKzM2NywyOCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6bG9hZFBy
b3BlcnR5KEdQUlJlCiAgICAgICAgIHJlc3VsdCk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJz
OjpzdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcg
b2Zmc2V0LCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBKdW1wIGlzSW5saW5lID0gYnJhbmNoMzIo
TGVzc1RoYW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Cisg
ICAgCisgICAgbG9hZFB0cihBZGRyZXNzKG9iamVjdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaCk7CisgICAgbmVnMzIob2Zmc2V0KTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0
cihvZmZzZXQsIG9mZnNldCk7CisgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKKyAgICAKKyAgICBp
c0lubGluZS5saW5rKHRoaXMpOworICAgIGFkZFB0cigKKyAgICAgICAgVHJ1c3RlZEltbTMyKAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEpTT2JqZWN0KSkgLQorICAg
ICAgICAgICAgKHN0YXRpY19jYXN0PGludDMyX3Q+KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDIp
ICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpLAorICAgICAg
ICBvYmplY3QsIHNjcmF0Y2gpOworICAgIAorICAgIHJlYWR5LmxpbmsodGhpcyk7CisgICAgCisg
ICAgc3RvcmVWYWx1ZSh2YWx1ZSwKKyAgICAgICAgQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwg
VGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSk7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVyZShW
TSYgdm0sIFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2Ny
YXRjaCkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjk4LDggKzcyMCwxMyBAQCB2b2lkIEFz
c2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzCiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJz
OjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJ
bmZvOjpyZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUklu
Zm86OnJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0
KHZtLCBpbmZvKTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCit7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBj
YWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjM0LDggKzIzNCw5IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAK
LSAgICAvLyBOb3RlIHRoYXQgdGhpcyBjbG9iYmVycyBvZmZzZXQuCisgICAgLy8gTm90ZSB0aGF0
IHRoZXNlIGNsb2JiZXIgb2Zmc2V0LgogICAgIHZvaWQgbG9hZFByb3BlcnR5KEdQUlJlZyBvYmpl
Y3QsIEdQUlJlZyBvZmZzZXQsIEpTVmFsdWVSZWdzIHJlc3VsdCk7CisgICAgdm9pZCBzdG9yZVBy
b3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBH
UFJSZWcgc2NyYXRjaCk7CiAKICAgICB2b2lkIG1vdmVWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3Mgc3Jj
UmVncywgSlNWYWx1ZVJlZ3MgZGVzdFJlZ3MpCiAgICAgewpAQCAtMTcyMCw2ICsxNzIxLDcgQEAg
cHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRo
b3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9p
ZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3Rh
Y2tGb3JDQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJ
VENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxp
bmVKSVRDb2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Jhc2VsaW5lSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCisKKyNpbmNsdWRlICJKSVRNYXRo
SUMuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5m
by5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSklUQWRkSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklU
QWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRkSUNz
LmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRNdWxJQyogTWF0aElDSG9sZGVyOjphZGRKSVRNdWxJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9tdWxJQ3MuYWRk
KGFyaXRoUHJvZmlsZSk7IH0KK0pJVFN1YklDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVFN1YklDKEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1YklDcy5hZGQoYXJp
dGhQcm9maWxlKTsgfQorSklUTmVnSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTmVnSUMoVW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJv
ZmlsZSk7IH0KKwordm9pZCBNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXIm
IG90aGVyKQoreworICAgIG1fYWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2FkZElDcyk7CisgICAg
bV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAgICBtX25lZ0lDcyA9IFdURk1v
dmUob3RoZXIubV9uZWdJQ3MpOworICAgIG1fc3ViSUNzID0gV1RGTW92ZShvdGhlci5tX3N1YklD
cyk7Cit9CisKK0Jhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRy
eVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKKyAg
ICA6IERpcmVjdEpJVENvZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklUKQorICAgICwgTWF0aElDSG9sZGVyKCkKK3sgfQorCitCYXNlbGluZUpJVENv
ZGU6On5CYXNlbGluZUpJVENvZGUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZv
LmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVuYXJ5QXJp
dGhQcm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgU2lt
cGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3MgTWF0aElDSG9s
ZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVy
KTsKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAg
SklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1YklD
KiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklU
TmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+
IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lD
PiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKworY2xhc3MgSklU
Q29uc3RhbnRQb29sIHsKK3B1YmxpYzoKKyAgICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOwor
CisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIEdsb2JhbE9iamVjdCwK
KyAgICAgICAgQ2FsbExpbmtJbmZvLAorICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAg
ICAgRnVuY3Rpb25EZWNsLAorICAgICAgICBGdW5jdGlvbkV4cHIsCisgICAgfTsKKworICAgIHN0
cnVjdCBWYWx1ZSB7CisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgUGFja2VkUHRyPHZvaWQ+
IHBheWxvYWQ7CisgICAgfTsKKworICAgIEpJVENvbnN0YW50UG9vbCgpID0gZGVmYXVsdDsKKyAg
ICBKSVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAgICBKSVRD
b25zdGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworCisg
ICAgQ29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIpCisgICAg
eworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXplKCk7CisgICAgICAg
IG1fY29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1ZSBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1
cm4gbV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fY29u
c3RhbnRzOworfTsKKworCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklU
Q29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2Rl
KENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRo
QXJpdHlDaGVjayk7CisgICAgfkJhc2VsaW5lSklUQ29kZSgpIG92ZXJyaWRlOworICAgIFBDVG9D
b2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcGNU
b0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KKworICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4g
bV91bmxpbmtlZENhbGxzOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5m
b3M7IC8vIE9PUFM6IG1ha2Ugc3VyZSB3ZSB2aXNpdCB0aGVzZSBzb21laG93LiBPciBhc3NlcnQg
d2UgZG9uJ3QgaGF2ZSB0bywgc2luY2UgdGhleSdyZSB2aXJ0dWFsIGNhbGxzLgorICAgIEJhZzxV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgIEZpeGVk
VmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZpeGVkVmVj
dG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAgIEpJVENv
ZGVNYXAgbV9qaXRDb2RlTWFwOworICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5N
YXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNvbnN0
CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUoKQogewotICAg
IENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKCk7
CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJl
YWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxh
dGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRl
bGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblBy
b2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhl
bHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpT
VmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAg
ICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNj
b3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2sp
LCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5k
ZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJz
OjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwg
R1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93
Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAgLTcyLDYgKzYy
LDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEKICAgICBzdG9y
ZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikpOwogfQogCisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRv
d0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0
aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNr
ZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dD
aGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgc3RvcmVW
YWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFk
b3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9yZVB0cihzY29wZSwgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0
ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBz
Y29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0
aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKK3ZvaWQgQ0Nh
bGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0
LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxT
aXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVkTGFtYmRhPHZv
aWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKIHsK
ICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
Q2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ND
YWxsSGVscGVycy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDE0IEBAIHB1
YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJlZ2lz
dGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Agb2YKICAgICAv
LyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxvZ1NoYWRvd0No
aWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDEs
IEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJS
ZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2Rl
QmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1w
bChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3Bl
LCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsK
K3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFk
b3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1Q
dHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworICAgIHZvaWQgbG9n
U2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3Mg
dGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRoZSBQ
YWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2b2lkIGVuc3Vy
ZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2Ny
YXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29kZUJs
b2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVE
YXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVn
aXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07Ci0gICAgY29u
c3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVCbG9j
ay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBy
ZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMyBAQCBwdWJsaWM6CiAgICAg
VmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWduZWQgbnVtTG9jYWxzIHsgVUlO
VF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAgICB1
bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8gT24gb3VyIG1hY2hpbmUgZnJh
bWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1hcDxWYWx1ZVJlY292ZXJ5PiBy
ZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVyIHsgSW52YWxpZEdQUlJlZyB9
OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7CisgICAg
dm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
KTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENhbGxGcmFtZVNodWZmbGVyOjpD
YWxsRnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkKICAgICAsIG1fb2xkRnJhbWUo
ZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsIG51bGxw
dHIpCiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBDYWxsRnJhbWU6OmhlYWRl
clNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAgICAgICArIHJvdW5kQXJndW1lbnRD
b3VudFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpCisgICAg
LCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMg
KyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5udW1QYXJhbWV0ZXJzKSkKICAg
ICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVy
cwogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Muc2l6
ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUgLSBtX2FsaWdu
ZWRPbGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6YWxs
UmVnaXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNzZWRBcmdzKQor
ICAgICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykKIHsKICAgICAvLyBXZSBh
cmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAgIGZvciAodW5zaWduZWQg
aSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3ICs0MjEsNyBA
QCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhCiAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFtZUJhc2UpOwog
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9CiAgICAgICAgIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fbmV3RnJhbWVCYXNlLAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBDYWxsRnJhbWU6
OmhlYWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5hbmQz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudFJlZ2lzdGVycygp
KSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVCYXNlLCBtX25ld0ZyYW1lQmFz
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
ci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBAQCBwdWJsaWM6
CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAgICAgIGRhdGEubnVtTG9j
YWxzID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2VkQXJncyA9IG1fbnVtUGFz
c2VkQXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9udW1QYXJhbWV0ZXJzOwog
ICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVT
bG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJn
Q291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytp
KQpAQCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwZXJmb3JtU2FmZVdyaXRl
cygpOwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07Cisg
ICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVy
bkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJ
bmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJbnRlcmZhY2VKSVQoJnZt
LCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51bGxwdHIpCiAgICAgLCBt
X2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8g
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwgbV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkK
ICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAgIG1fcHJvZmlsZWRDb2Rl
QmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+
dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTkwLDggKzkzLDggQEAg
dm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNraXBPcHRpbWl6ZS5hcHBl
bmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291
bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFk
ZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lwT3B0aW1pemUuYXBwZW5k
KGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50
ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVn
aXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpA
QCAtMTEzLDE1ICsxMTYsMjAgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50
U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhz
ZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KQordm9pZCBK
SVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCkKIHsKKyAg
ICBhdXRvIG9rID0gYnJhbmNoVGVzdFB0cihaZXJvLCBwb2ludGVyVG9TZXQpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50
U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAg
ICBvay5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCit2b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFyUmVhZE9ubHlXYXRjaHBv
aW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
KyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChz
Y3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJSZWFkT25seVdhdGNocG9pbnQpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRj
aEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKQEAgLTEyOSw3ICsxMzcsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKICAgICBpZiAoIUFTU0VSVF9FTkFCTEVEKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBK
dW1wIG9rID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIGJyZWFrcG9pbnQoKTsKICAgICBvay5saW5rKHRoaXMpOwpAQCAtMTgxLDIxICsxODksNDEg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1YwogICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJv
bG9ndWUoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSk7CisgICAgZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZXN1bHQpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZXN1bHQsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURh
dGEoKSksIHJlc3VsdCk7CisgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gYnJhbmNoVGVzdFB0ciha
ZXJvLCByZXN1bHQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVE
YXRhVGFnKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25SYXJlRGF0YTo6
b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHJlc3VsdCk7
CisgICAgaGFzRXhlY3V0YWJsZS5saW5rKHRoaXMpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJs
b2NrLT5pc0NvbnN0cnVjdG9yKCkpCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSksIHJlc3Vs
dCk7CisgICAgZWxzZQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4
ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpKSwgcmVzdWx0KTsKKworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZXN1bHQsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6Om9mZnNldE9m
Q29kZUJsb2NrKCkpLCByZXN1bHQpOworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZXN1
bHQsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKIHsKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAg
IGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgICAgICBkYXRh
TG9nKCJDb21waWxpbmcgIiwgKm1fcHJvZmlsZWRDb2RlQmxvY2ssICJcbiIpOwogICAgIAogICAg
IGppdEFzc2VydFRhZ3NJblBsYWNlKCk7CiAgICAgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUo
KTsKICAgICAKLSAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5zaXplKCk7CisgICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2Fs
bExpbmtJbmZvSW5kZXggPSAwOwogCi0gICAgVk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAg
ICAgQnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7CisKKyAgICAvLyBPT1BTOiBN
YXliZSBvbmx5IGRvIHRoaXMgaWYgd2UgZGlzYWJsZSBzaGFyaW5nIHNvbWVob3c/CisgICAgLyoK
KyAgICBWTSYgdm0gPSBtX3VubGlua2VkQ29kZUJsb2NrLT52bSgpOwogICAgIGlmIChtX2xvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1fY29kZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29k
ZUJsb2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmluaGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2s+KHZtKSkpIHsKICAgICAgICAgLy8gV2UgY2FuIG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24g
YmVjYXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2RlQmxvY2sncyBleGFjdGx5IG9uY2UuCiAgICAg
ICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxkIGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVu
IHRoZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRzIHRvCkBAIC0yMzYsNiArMjY0LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQorICAgICovCiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7
CiAgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKQEAgLTI3OCw4ICszMDcsOCBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7Ci0gICAgICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJv
YmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdICIsIG9w
Y29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAi
LCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTUyNyw3ICs1NTYs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIEJ5dGVj
b2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAotICAgICAgICBjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5h
dChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICAKICAgICAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJCYXNlbGluZSBKSVQgZW1pdHRp
bmcgc2xvdyBjb2RlIGZvciAiLCBtX2J5dGVjb2RlSW5kZXgsICIgYXQgb2Zmc2V0ICIsIChsb25n
KWRlYnVnT2Zmc2V0KCkpOwpAQCAtNTQ1LDggKzU3NCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFz
ZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9i
ZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSBTTE9XICIsIG9wY29kZU5hbWVzW29w
Y29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2sp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTY3NCw1NSArNzAzLDU1IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAjZW5kaWYKIH0KIAordm9pZCBKSVQ6OmVt
aXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCkKK3sKKyAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUo
KSksIHNfbWV0YWRhdGFHUFIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkpJVERhdGEoKSksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNfY29uc3Rh
bnRzR1BSKTsKK30KKwordm9pZCBKSVQ6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKQoreworICAg
IEJhc2U6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0Ojps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBp
bGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQog
ewotICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxp
dHlMZXZlbCgpOworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENv
ZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNh
c2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7
Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9z
aG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZH
OjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAg
ICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5s
aW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJs
b2NrLT5jb2RlVHlwZSgpKSB7Ci0gICAgY2FzZSBHbG9iYWxDb2RlOgotICAgIGNhc2UgTW9kdWxl
Q29kZToKLSAgICBjYXNlIEV2YWxDb2RlOgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRB
bHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlv
bkNvZGU6Ci0gICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2Ug
YmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KLSAgICAgICAgLy8gRG9u
J3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hv
dWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGlu
ZUZ1bmN0aW9uKG1fY29kZUJsb2NrKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYg
KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAg
ICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hK
dW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9j
ay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZV
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENv
ZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAg
ICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBU
YWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNp
bXBsZUp1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRj
aEp1bXBUYWJsZXMoKSk7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2Vk
Q29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAg
ICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1f
dm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5l
Rm9yUHJvZmlsZXIoKSkpKQotICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklU
RGlzYXNzZW1ibGVyPihtX2NvZGVCbG9jayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9u
czo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpKSkgeworICAgICAgICAvLyBGSVhN
RTogYnVpbGQgYSBkaXNhc3NlbWJsZXIgb2ZmIG9mIFVubGlua2VkQ29kZUJsb2NrLgorICAgICAg
ICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVk
Q29kZUJsb2NrKTsKKyAgICB9CiAgICAgaWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlcikpIHsKKyAgICAgICAgLy8gRklYTUU6IGJ1aWxkIHByb2ZpbGVyIGRpc2Fzc2VtYmxl
ciBvZmYgVW5saW5rZWRDb2RlQmxvY2suCiAgICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9wdFJl
ZigKICAgICAgICAgICAgIG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAgICAg
ICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2Rl
QmxvY2spLAorICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5z
dXJlQnl0ZWNvZGVzRm9yKG1fcHJvZmlsZWRDb2RlQmxvY2spLAogICAgICAgICAgICAgICAgIFBy
b2ZpbGVyOjpCYXNlbGluZSkpOwotICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5
dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAg
ICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBtX3Bj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0
ZWNvZGVJbmRleCgwKSkpOwpAQCAtNzQyLDExICs3NzEsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlv
blByb2xvZ3VlKCk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5j
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJh
bWVJblByb2xvZ3VlKCk7CiAKICAgICBMYWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50
IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3Rlcik7CisgICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNp
Z25lZCBtYXhGcmFtZVNpemUgPSAtZnJhbWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihmcmFtZVRvcE9mZnNldCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVt
cExpc3Qgc3RhY2tPdmVyZmxvdzsKQEAgLTc1NywxNiArNzg3LDIwIEBAIHZvaWQgSklUOjpjb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVtaXRT
YXZlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0
T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1p
dE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRh
ZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5j
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgeworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9m
aWxpbmcoKSAmJiAoIW1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAgZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdU
Mik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0
T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46Om9m
ZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3Ry
dWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8K
ICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3Qg
YWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAg
IGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAg
ICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1
bWVudCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50
IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50
KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKQEAgLTc3NywxMiArODExLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRG
aW5hbGl6aW4KICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rl
ciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwg
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJn
dW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVl
KHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmls
ZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjpp
c0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENv
ZGU6OmlzSklUKG1fcHJvZmlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVO
TElLRUxZKHNpemVNYXJrZXIpKQogICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFy
a0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MzMsMjcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJ
bmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90
PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJh
dGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlv
blRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVy
IG9mIHBhcmFtZXRlcnMgaXMgMSwgd2UgbmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBi
b29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0g
MTsKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJl
cXVpcmVzQXJpdHlGaXh1cCkgeworICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxp
bmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1
cCkgewogICAgICAgICBtX2FyaXR5Q2hlY2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKDApLCAmbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwog
ICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAg
IGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3Jl
OChUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91
bGRBbHdheXNCZUlubGluZWQoKSkpOwogCiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1f
bnVtUGFyYW1ldGVycykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNo
MzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSkpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBt
X2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
LXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVS
b2xsYmFja09uRXhjZXB0aW9uKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRp
b25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRD
b2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sg
OiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVn
aW5MYWJlbCwgdGhpcyk7CkBAIC04MzksNyArODc2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRM
aW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2Rl
KGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFi
ZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAot
ICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1
ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklU
LCBlZmZvcnQpKTsKKyAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZl
cj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fdW5saW5rZWRDb2RlQmxvY2ssIExpbmtCdWZmZXI6
OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAgLTg1
OCw4ICs4OTUsOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5
cGUpIHsKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAgY2Fz
ZSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcjogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRT
aW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0
ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNv
ZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytq
KSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2Jy
YW5jaE9mZnNldHNbal07CkBAIC04NzEsOCArOTA4LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAg
ICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAg
ICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3Ry
aW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5r
ZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOwogICAgICAgICAgICAgYXV0byBjdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVs
dE9mZnNldF0pOwogICAgICAgICAgICAgZm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFi
bGUubV9vZmZzZXRUYWJsZS52YWx1ZXMoKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9m
ZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNoT2Zmc2V0OwpAQCAtOTA2LDMyICs5NDMsMzUgQEAgdm9p
ZCBKSVQ6OmxpbmsoKQogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwg
cmVjb3JkLmNhbGxlZSk7CiAgICAgfQogCi0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRC
eUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxz
LCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhU
aGlzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywg
cGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRj
aEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZm
ZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7
Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAg
ZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisgICAg
YXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3Ig
KGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRh
Zz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9u
ZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4u
bV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3Rh
cnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXpl
SUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMp
OworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5
SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9p
bkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsK
IAogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZv
KSB7Ci0gICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExp
bmtJbmZvOwotICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93
UGF0aFN0YXJ0KSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtl
ZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0lu
Zm87CisgICAgICAgIGluZm8uZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAK
LSAgICB7Ci0gICAgICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBt
X2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmIChtX2xh
YmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBqaXRDb2RlTWFw
QnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAoaml0Q29kZU1hcEJ1
aWxkZXIuZmluYWxpemUoKSk7CisgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxk
ZXI7CisgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0
IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgIGlmIChtX2xh
YmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKKyAgICAgICAgICAgIGppdENvZGVNYXBCdWls
ZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAgICB9
CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpKSB7CkBAIC05
NDAsMjYgKzk4MCwzNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgfQogCiAgICAgaWYgKFVOTElL
RUxZKG1fY29tcGlsYXRpb24pKSB7CisgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgd2UgbWFrZSB0
aGUgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91dCBVbmxpbmtlZENvZGVCbG9jaz8KICAgICAg
ICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKQogICAgICAg
ICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21waWxhdGlvbi5nZXQo
KSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFk
ZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CisgICAgICAgIG1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9maWxlZENvZGVCbG9j
aywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFw
QnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9
IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAgCisgICAgLy8gRklYTUU6IE1ha2UgYSB2ZXJz
aW9uIG9mIENvZGVCbG9ja1dpdGhKSVRUeXBlIHRoYXQga25vd3MgYWJvdXQgVW5saW5rZWRDb2Rl
QmxvY2suCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBGSU5BTElaRV9DT0RF
KAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5l
IEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAgICAgICAiQmFzZWxpbmUg
SklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcHJvZmls
ZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fYXJpdHlDaGVjayk7Ci0gICAgbV9q
aXRDb2RlID0gYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hl
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSk7CisgICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5l
dyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaykpOworCisgICAgbV9qaXRD
b2RlLT5tX3VubGlua2VkQ2FsbHMgPSBXVEZNb3ZlKG1fdW5saW5rZWRDYWxscyk7CisgICAgbV9q
aXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9zID0gV1RGTW92ZShtX2V2YWxDYWxsTGlua0luZm9z
KTsKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3MgPSBXVEZNb3ZlKG1fdW5saW5r
ZWRTdHViSW5mb3MpOworICAgIG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92
ZShtX3N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzID0gV1RGTW92ZShtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0Q29k
ZS0+bV9qaXRDb2RlTWFwID0gaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKTsKKyAgICBtX2pp
dENvZGUtPmFkb3B0TWF0aElDcyhtX21hdGhJQ3MpOworICAgIG1faml0Q29kZS0+bV9jb25zdGFu
dFBvb2wgPSBXVEZNb3ZlKG1fY29uc3RhbnRQb29sKTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6
dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQg
WyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3Rh
cnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRh
Z2dlZFB0cigpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAg
YXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2VkQ29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1l
bW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCkt
PmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFs
aXplT25NYWluVGhyZWFkKCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5U
aHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzQ29t
cGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTk2OCwyNSArMTAxOSwxNCBAQCBDb21waWxhdGlvblJl
c3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyCiAKICAgICBtX2xpbmtCdWZmZXItPnJ1bk1haW5U
aHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBtX2NvZGVCbG9jay0+
c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwot
ICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9m
RXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7Ci0gICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVy
ID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgIC8vIEZJWE1FOiA8
cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgotICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBt
X2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdl
dCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7Ci0gICAgfQotCiAgICAgaWYg
KG1fcGNUb0NvZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9y
aWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKKyAgICAgICAgbV9qaXRDb2Rl
LT5tX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKTsKIAog
ICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+
YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgpKSAvCi0g
ICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUo
KSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPmlu
c3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRD
b2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRC
YXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIENv
bXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTAzOCwxMSBAQCBzaXplX3QgSklU
Ojpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZlci0+c2l6ZSgpOwogfQog
Ci1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBkb01h
aW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBjb21waWxlQW5kTGlua1dp
dGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFk
KCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVCbG9jayk7CiB9CiAKIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKQEAgLTEwNDIsMTggKzEw
ODIsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwogICAgICAg
ICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQcmVw
YXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZyYW1l
UmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJh
bWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAg
QVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fscygp
KSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7CiAK
ICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJPZmZzZXQo
Y29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihD
b2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVSZWdpc3RlckNvdW50Rm9y
KGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2ludCBKSVQ6OnN0YWNrUG9p
bnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2Nr
KSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9pbnRlck9mZnNldEZvcihj
b2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNoTWFwPENTdHJpbmcsIFNl
Y29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3RyaW5nLCBT
ZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWwsIGV4
cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBPZmZz
ZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNfY2Fz
dDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAorI2luY2x1ZGUg
IkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNv
bW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgpAQCAtNDQsNiAr
NDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgorI2luY2x1ZGUgIkxMSW50
RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiVW51c2Vk
UG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTE0OSwxNCArMTUxLDE0
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9u
SW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlu
a2VkQ2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxM
aW5rSW5mb0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJu
QWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5l
d0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDog
cHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBK
SVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xv
d1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEsNiArMTczLDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBu
b3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KICAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAorICAgICAgICB1c2lu
ZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYs
IENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2Rl
T2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTE3OCwyOCAr
MTgyLDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJ
bnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwotICAgICAgICBDb21waWxhdGlvblJl
c3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBm
aW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAgICAgICAgc2l6ZV90IGNvZGVTaXpl
KCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNv
bXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21w
aWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVm
Zm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVP
ZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4gSklUKHZt
LCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVm
Zm9ydCk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3Rl
ckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBm
cmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyBpbnQgc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBp
bnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOwogCiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3Rh
dHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21w
aWxlVGltZSgpOwogCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfbWV0YWRhdGFH
UFIgPSBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSOworICAgICAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzX2NvbnN0YW50c0dQUiA9IExMSW50OjpSZWdpc3RlcnM6OnBiR1BS
OworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7
CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgICAgICB2b2lkIHBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAgICAgIHZvaWQgbGluaygpOwotICAgICAgICBD
b21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7Cisg
ICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKENvZGVCbG9jayosIEpJVENv
bXBpbGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBj
b2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxs
KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCkBAIC0yMjMsNiAr
MjMyLDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRh
ZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRh
ZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFk
YXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qg
b2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAg
IHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXpl
X3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVibGljOgorICAgICAgICB2b2lkIGxvYWRDb25z
dGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgIHByaXZhdGU6CisgICAg
ICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRDb2Rl
QmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisKKyAgICAgICAgdm9pZCBl
bWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1QwKTsK
KwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRvSGFuZGxlcikKICAgICAg
ICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIp
OwpAQCAtMjU4LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5h
YmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYm
IE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgJiYgT3A6
Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0lu
Zm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0
ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJh
cmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAg
fHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxl
U2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNv
bXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxs
TGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAg
ICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25z
dCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgs
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9p
ZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4NywxNCArMzIyLDE1IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVy
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lk
IGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
cml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCog
b3duZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAog
ICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiBy
ZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2gu
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJS
ZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICAvL3ZvaWQgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOworICAgICAgICAvL3Zv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Cisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwg
SlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVS
ZWdzKTsKQEAgLTMwNSw4ICszNDEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxl
KSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsKIAotICAgICAgICB2b2lkIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmls
ZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7Ci0gICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2Zp
bGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
Y29uc3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQ
Uik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBwdHJkaWZmX3Qs
IFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKIAogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3ApOwpAQCAt
NTkzLDcgKzYzMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3Ry
YXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNywxNCArNjY0LDE0IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2ln
bmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBB
Y2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lz
dGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZp
cnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNv
bW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0VmFy
UmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlv
bkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAgICAgIHZv
aWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKTsK
ICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25l
ZCBkZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNW
QUxVRTY0KQpAQCAtNjQ2LDcgKzY4Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAg
ICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRy
X3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQq
KTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7Cisg
ICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0
KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1p
dFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0
UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NSw2ICs2OTIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhl
YWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBp
c0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50
SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFy
KFZpcnR1YWxSZWdpc3Rlcik7CkBAIC02OTYsMjYgKzczNCw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVU
eXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwog
ICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVz
b2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7
Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dF
TkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZy
b21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwotCi0gICAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBNb2R1bGVW
YXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBh
IHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2ZWRDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9u
J3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29wZS4KLSAgICAgICAgICAgIHJl
dHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNkZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BF
X0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dl
bmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNP
TFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJB
VE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5l
cmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFt
ZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5
cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0m
LCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKIAog
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1
ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mKTsKQEAgLTc2
MCwxMCArNzgwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAg
ICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJl
c3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwg
QWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2Rl
JiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lk
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
Y29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAg
ICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9u
VHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjEsMjAgKzg0MSwy
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7CiAgICAg
ICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3Bl
cmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Qnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jl
c3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9u
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxl
KGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUu
Li4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5h
bWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8
RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyB0YXJn
ZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyB0YXJn
ZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAg
ICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9uVHlwZT4odGFy
Z2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRyZXNzKEdQUklu
Zm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2Zp
bGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCks
IHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRp
b25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE5LDI1ICs5MzksMjAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXpl
ZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGlt
aXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7IH0KICAg
ICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJv
ZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGgg
dGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNoIGNhc2Ug
YWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5n
KCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgZW1pdE1hdGVyaWFs
aXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAgICAgICB2b2lkIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21w
aWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwot
ICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRo
ZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8gYmUgY29uc2lz
dGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2Ug
dGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFs
dWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1
dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+
Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3Ap
OwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjQsOSArOTc5
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Ns
b3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAotICAg
ICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAg
ICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRo
UHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAg
IEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEwMDAsMTEgKzEwMTIsMjQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0
aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRl
OwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJl
T3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsK
ICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAg
ICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAgICAgICAgQ29kZUJsb2Nr
KiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBVbmxpbmtlZENvZGVC
bG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKworICAgICAgICBNYXRoSUNI
b2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENv
ZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAgICAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgQmFnPFVubGlua2VkQ2Fs
bExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1f
ZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
PiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFi
bGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRh
YmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAgc3RydWN0IE5vdEFDb2Rl
QmxvY2sgeyB9IG1fY29kZUJsb2NrOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkg
fHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRH
UFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMjAsNyAr
MzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAg
ICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFpl
cm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzc1LDggQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKQEAgLTU3Myw3ICs1NzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3co
Y29uc3QgCiAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQo
b3AyLCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CiAKQEAgLTcxNyw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKGNv
bnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX2NvZGVC
bG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRO
ZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAg
ICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMp
OwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRp
b25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1p
dE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJh
dGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAgLTg5OSw4
ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZv
aWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFBy
b2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5r
ZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
QWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3Mu
YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRk
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihh
ZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0g
bWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAg
ICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQ
Uiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93
Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUsMTAg
KzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAg
ICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9h
ZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQ
UiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNl
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwxMyArMTA2
MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAjZW5kaWYK
IAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJv
ZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2Zp
bGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBz
cmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRo
UHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
cmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChy
ZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNy
Y1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBy
ZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRI
X0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwxMyAr
MTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAjZW5k
aWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0
aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQ
cm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3
aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiks
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
bGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0
PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpf
SklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQs
IGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFC
TEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTEx
NjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioK
IAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAgICBp
ZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5h
cnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tX3Byb2ZpbGVJ
bmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJh
bmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNv
ZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjIwLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9t
dWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVs
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyog
bXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5h
cnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tX3Byb2ZpbGVJ
bmRleCk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFyaXRo
UHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rp
b24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwog
fQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJ
bnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
U3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFN1Yj4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUU3ViSUMqIHN1YklD
ID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlv
blRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElD
RmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIs
NyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAgICAgc3RvcmVQ
dHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJh
bWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IHJlZ1QxLCByZWdUMik7CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDAp
OwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zMjQs
NyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1
dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDcgKzM0MSw2IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xv
d1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Uo
Y29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRl
ICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUg
IkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNp
bmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgog
I2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC00NCw3ICs0NSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQo
Y29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGlu
YXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxS
ZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDE4ICs1NCwxOCBAQCBzdGQ6OmVuYWJsZV9p
Zl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlE
ICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxf
Y2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2Rl
LCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2lu
dCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5n
VGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50
KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNl
dEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCisKICAgICBpZiAo
T3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0
ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAg
ICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0g
ICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0YSwgY2hlY2twb2lu
dCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0
YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5r
SW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJh
eVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyArNzksNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAog
ICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9w
X2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMK
ICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxs
TGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29k
ZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtOTEs
NyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAg
ICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRz
OwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZv
clZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIs
IGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAgICBj
YWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lz
dGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJl
ZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVy
blZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0
YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEwMywxNiBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9u
U2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJh
dGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0
dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1QzLCBy
ZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRP
ZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gz
MihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNz
T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2FkQ29uc3RhbnQoY2Fs
bExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2Fs
bExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdU
Myk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7
CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRP
Zk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RCaWdnZXN0Lmxpbmso
dGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEzMSwx
NiBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRlbXBsYXRlPD4KIGJv
b2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7Ci0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9y
ZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJG
cmFtZU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IGFyZ3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5r
ZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1Qy
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KHJlZ1QwKSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52
YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0
eShyZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwog
CkBAIC0xNDgsNyArMTUyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNv
bnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0g
bV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkp
OworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5m
bzo6Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1f
YXJndjsKQEAgLTE1Niw0MyArMTYwLDQ3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6
ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAt
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwo
Km1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmlu
Z0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwo
Y29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKLXsKK2Jvb2wgSklUOjpjb21waWxl
VGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50KSB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0
ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2Rl
LCBDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQorYm9vbCBK
SVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRD
YWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewotICAgIENhbGxGcmFtZVNo
dWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBi
eXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJ
bmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQorICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBtYWtl
VW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOworICAgIHNodWZmbGVEYXRhLT5udW1QYXNz
ZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAgIHNodWZmbGVEYXRhLT5udW1QYXJhbWV0ZXJz
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworICAgIHNodWZmbGVEYXRh
LT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworICAgIHNo
dWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLmFy
Z3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1ZmZsZURhdGEtPmFyZ3MucmVzaXpl
KGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2Rl
Lm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAgICBz
aHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFj
ZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJ
bmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAgICAgICAgIERhdGFG
b3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAgICAgIFZhbHVl
UmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotICAgIHNodWZmbGVEYXRhLnNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7Ci0gICAgaW5mby0+c2V0RnJhbWVT
aHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVl
UmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgIHNodWZmbGVEYXRhLT5z
ZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGlu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlz
LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgbG9hZENvbnN0YW50KGNh
bGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1Qy
LCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgKnNodWZmbGVEYXRhKS5w
cmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMp
OworCisgICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CisgICAgaW5mby0+ZnJhbWVTaHVm
ZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAgICAgYXV0byBkb25lTG9jYXRpb24g
PSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
ZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjE4LDE0ICsyMjYsMjUgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxl
ciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0
b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KLSAgICBDYWxsTGlu
a0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwp
Ci0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8p
OworCisgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0gVUlOVF9NQVg7CisgICAgaWYgKG9w
Y29kZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBpbmZvID0gbV91bmxpbmtlZENhbGxz
LmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2Rl
SUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAgICAgQVNTRVJUKG1f
Y2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Cisg
ICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5saW5rZWRD
YWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50OworICAgIH0K
KyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAogICAgIC8v
IFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBB
cmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29k
ZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1aW50MzJf
dCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwog
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVl
LgpAQCAtMjM0LDE2ICsyNTMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5z
dHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlu
a0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVG
b3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChD
YWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChjb21waWxlVGFpbENh
bGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBpZiAoY29tcGlsZVRh
aWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFudCwgcmVnVDIp
OwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0
aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9
IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCBy
ZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAg
ICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9KTsKQEAgLTI1
MywxMyArMjY4LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1p
dEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZ
ZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgp
OwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
IAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCArMjg4LDIwIEBA
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7
CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlzLCByZWdU
Mik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxD
YWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcgKzQxMCwzMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1
bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmlt
cGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5
cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQpAQCAt
NDE2LDEwICs0NDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25z
CiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAg
ICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsKICAgICBu
b3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBAIC00MzIs
MTkgKzQ1OCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAg
ICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJh
d0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRlcmF0b3JH
UFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBhdXRvIGRv
bmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVz
dWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9
CkBAIC00NTIsNyArNDc2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKICAgICAg
ICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5hcnJvdzog
cmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0OTMsNzcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1bXAgZmFz
dENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7
CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0ZUFkZHJl
c3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAgbG9hZDhG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJ
dGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5N
b2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhf
dD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9NZXRhZGF0
YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVy
YXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rl
cygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAg
IC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAg
ICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJl
Z1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3
aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2
YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENs
b2JiZXJSZWdpc3RlcjsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQ
Uik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVy
blZhbHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRS
ZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVz
dWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgp
KSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdU
MywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwo
KSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9H
UFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVj
a3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJl
Z1QyOwotICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJT
ZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOwor
ICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRj
aEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0
aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3Jh
dGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0g
YnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3Jh
dGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LCBnbG9iYWxHUFIpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1
bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbW92ZShp
dGVyQ2FsbFJlc3VsdEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1l
cy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsK
KyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsK
IAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1
NzcsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50
KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyOworCiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAg
R1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5h
cHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0
LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBV
bmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgp
OwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJ
ZEluZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVz
dWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRl
ckNhbGxSZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwot
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5
cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJh
d0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0g
ICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAg
bW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRl
Y29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKGlkZW50KS5yYXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmpl
Y3QubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJh
dG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3Qs
IGFyZ3VtZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUu
bV92YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmlt
cGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dl
dEJ5SWRJbmRleCsrXTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUklu
Zm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZh
bHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2Fs
bFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVz
cyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCku
cmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsMTEg
QEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3Rl
clNldC5oIgogCisKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsK
KwogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBDb21tb25EYXRhOwogY2xhc3MgSklUQ29kZTsKQEAg
LTE1OSwxMCArMTYyLDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIHVzZURhdGFJQyhK
SVRUeXBlIGppdFR5cGUpCiAgICAgewotICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNl
bGluZUNvZGUoaml0VHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYg
KCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgcmV0dXJuIE9wdGlvbnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApA
QCAtMjIzLDYgKzIyNiw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25zdCB7
IHJldHVybiBtX3NoYXJlQXR0cmlidXRlID09IFNoYXJlQXR0cmlidXRlOjpTaGFyZWQ7IH0KIAor
ICAgIHZpcnR1YWwgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgeyByZXR1
cm4gbnVsbHB0cjsgfQorCiBwcml2YXRlOgogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFNo
YXJlQXR0cmlidXRlIG1fc2hhcmVBdHRyaWJ1dGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBA
QCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBt
X2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1
YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBl
LCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2Rl
QmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDog
Z2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxT
aXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBA
IC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAog
ICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8t
PnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0
aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFy
dExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9z
bG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BS
UmVnIHN0dWJJbmZvR1BSKQoreworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisgICAgaml0LmxvYWRD
b25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0
cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwor
fQorCiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1
ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTEwLDcgKzExOCw3IEBAIEpJVEdldEJ5SWRHZW5l
cmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklU
VHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNp
dGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50
aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwg
R1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiAgICAgOiBKSVRCeUlk
R2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vz
c1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKLSAgICAsIG1f
aXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9jay0+dm0oKS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhjb2RlQmxv
Y2sgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2UucGF5bG9hZEdQUigp
ICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAgLTEyMCw2ICsxMjgsMzQgQEAgdm9pZCBKSVRHZXRC
eUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQs
IG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNpemVGb3JMZW5ndGhBY2Nlc3MoKSA6
IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCit2b2lkIEpJVEdl
dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwg
dW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0
LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7
CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAg
ICBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisKKyAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNo
KTsKKyAgICBhdXRvIGdvU2xvdyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFs
LCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5s
b2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWRQcm9w
ZXJ0eShiYXNlLCBzY3JhdGNoLCBKU1ZhbHVlUmVncyB7IHJlc3VsdCB9KTsKKyAgICBhdXRvIGZp
bmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIGdvU2xvdy5saW5rKCZqaXQpOworICAgIGppdC5j
YWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNo
ZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKworCiBKSVRHZXRC
eUlkV2l0aFRoaXNHZW5lcmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcigKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIHZhbHVlLCBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAt
MTM4LDYgKzE3NCwzNCBAQCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2VuZXJh
CiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVy
dHlBY2Nlc3MoKSk7CiB9CiAKK3ZvaWQgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpnZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBH
UFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0
YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0
LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworCisgICAgLy8gT09QUzogc2hh
cmUgY29kZSB3LyBKSVRHZXRCeUlkR2VuZXJhdG9yCisgICAgR1BSUmVnIGJhc2UgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJh
c2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEdQUlJlZyByZXN1
bHQgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OworCisgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7Cisg
ICAgYXV0byBnb1Nsb3cgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2Ny
YXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHJvcGVydHko
YmFzZSwgc2NyYXRjaCwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hl
ZCA9IGppdC5qdW1wKCk7CisKKyAgICBnb1Nsb3cubGluaygmaml0KTsKKyAgICBqaXQuY2FsbChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxp
bmsoJmppdCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVFB1dEJ5SWRHZW5l
cmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJ
VFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmll
ciwKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJ
bmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgCkBAIC0xNDksNiArMjEzLDM0IEBAIEpJVFB1dEJ5SWRH
ZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0
ZXJzLmNsZWFyKHNjcmF0Y2gpOwogfQogCit2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQ
UlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQu
bG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9
IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBHUFJSZWcgc2NyYXRjaDIgPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIEdQUlJlZyB2YWx1ZSA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIGdvU2xvdyA9
IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9m
ZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0LnN0b3JlUHJvcGVydHkoSlNWYWx1ZVJlZ3MgeyB2
YWx1ZSB9LCBiYXNlLCBzY3JhdGNoLCBzY3JhdGNoMik7CisgICAgYXV0byBmaW5pc2hlZCA9IGpp
dC5qdW1wKCk7CisKKyAgICBnb1Nsb3cubGluaygmaml0KTsKKyAgICBqaXQuY2FsbChDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNv
ZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmpp
dCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIHZvaWQgSklUUHV0QnlJZEdlbmVy
YXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQogewogICAgIGdlbmVy
YXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5UmVwbGFjZSgp
KTsKQEAgLTMwMCw2ICszOTIsMzIgQEAgdm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRl
RmFzdFBhdAogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZv
clByb3BlcnR5QWNjZXNzKCkpOwogfQogCit2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BS
UmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJ
QyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAgIGppdC5s
b2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKworICAgIEdQUlJlZyBiYXNlID0g
QmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHJlc3VsdCA9IEJhc2Vs
aW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGlu
ZUluQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
ZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGF1dG8gZ29TbG93ID0gaml0
LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmJveEJvb2xlYW4odHJ1ZSwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBn
b1Nsb3cubGluaygmaml0KTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25lID0g
aml0LmxhYmVsKCk7Cit9CisKIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OkpJVEluc3RhbmNlT2ZH
ZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsCiAgICAgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEdQUlJlZyByZXN1bHQsIEdQUlJlZyB2YWx1
ZSwgR1BSUmVnIHByb3RvdHlwZSwgR1BSUmVnIHN0dWJJbmZvR1BSLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxF
KEpJVCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25W
YWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCkBAIC0zOCwxMSArMzksMTE4IEBAIG5hbWVz
cGFjZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNsYXNzIENhbGxTaXRlSW5k
ZXg7CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5m
bzsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNzIEFjY2Vz
c1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCitzdHJ1Y3Qg
QmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
R1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1
Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
ID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlW
YWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9jayBhbmQg
aW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KKyAgICBzdGF0
aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAg
c3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjph
cmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG8gPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBH
UFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJl
Z1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
byA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gg
PSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnMg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBkb250Q2xvYmJlclJlZ2lzdGVyID0gR1BSSW5mbzo6cmVnVDM7
Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnMgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyB0aGlzVmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNl
bGluZUluQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1Qx
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7Cit9
OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBwcm9maWxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJyYW5kID0gR1BSSW5mbzo6
cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7
CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDE1
ICsxNzAsMjEgQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZm
ZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAog
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwot
ICAgIAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5z
aWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIgfTsKKyAg
ICB1bnNpZ25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2sq
IG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBtX3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
c3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1f
c2xvd1BhdGhDYWxsOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOyAv
LyBPT1BTOiBtYWtlIHJlcG9ydENhbGwgcGFzcyBzb21ldGhpbmcgaW4gd2UgY2FuIHVzZSBmb3Ig
dGhlIG5vbi1DVEkgdGh1bmtzIGJ1aWxkcy4gCiB9OwogCiBjbGFzcyBKSVRCeUlkR2VuZXJhdG9y
IDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTk4LDcgKzIxMiw3IEBAIHBy
b3RlY3RlZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1
ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworcHVibGljOgogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTExLDYgKzIyNSw3
IEBAIHB1YmxpYzoKICAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUs
IEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0
ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJ
bmZvR1BSKTsKIAogcHJpdmF0ZToKICAgICBib29sIG1faXNMZW5ndGhBY2Nlc3M7CkBAIC0xMjQs
NiArMjM5LDcgQEAgcHVibGljOgogICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2Fj
aGVhYmxlSWRlbnRpZmllciwKICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVSZWdz
IGJhc2UsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCisgICAg
dm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1Yklu
Zm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImKTsKIH07CiAKQEAgLTEzMiwxMCArMjQ4LDExIEBAIHB1YmxpYzoK
ICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdl
bmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNp
dGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50
aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJS
ZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CisgICAg
ICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0
IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAgICAg
ICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BS
LCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQgZ2Vu
ZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBz
dHViSW5mb0dQUik7CiAgICAgCiAgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1
bmN0aW9uKCk7CiAKQEAgLTE2MywxMSArMjgwLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5l
cmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJl
Z3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Ns
b3dQYXRoSnVtcDsKIH07CiAKQEAgLTE5MSw4ICszMDYsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxl
SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjksNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNTIsNiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAot
cHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI1NSw2ICsz
NjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZh
bHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1h
Y3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
SklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIH07
CiAKIGNsYXNzIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IgewpAQCAtMjc3LDggKzM4Nyw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
ZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93
UGF0aExpbmtCdWZmZXIpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1w
OwogfTsKIApAQCAtMzAyLDExICs0MTAsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5l
cmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJl
Z3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0OwogCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9z
bG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMzAsOCArNDM2LDYgQEAgcHVibGljOgogICAgIAogICAg
IHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRj
aGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzggQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0
YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0
YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAoIXNy
Yy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtl
ZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKK30K
KworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJl
Z2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1l
Q29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tu
b3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5j
b25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBBbGwgbGluayB0aW1lIGNv
bnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewog
ICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+
Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIg
ZW50cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBl
bmRDYWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1B
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEs
IGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdp
c3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
IHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVH
UFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhy
ZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0
dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2FsbDsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxl
KE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRz
dCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3Rl
ciBkc3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFs
dWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVy
blZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5W
YWx1ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dD
YXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmly
dHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChy
ZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFz
QW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgp
CiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhv
ZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwg
c28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAg
IEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
ICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRl
Y29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6
OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1Rv
SG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSht
X2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBt
X2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2No
ZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgsMzMg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykK
IHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgp
KS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxp
bmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKLXsK
LSAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKLQotICAgIC8vIFdlJ3JlIGluIGEg
c2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8g
YSBkaXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQo
dmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UKLSAgICBFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSAgICBzdG9yZTMyKHZhbHVlLnBh
eWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAgICBzdG9yZTMyKHZh
bHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKLX0KKyAgICBp
ZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9
PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmco
KSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgp
ID09IDE7Cit9CisKKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKy8veworLy8gICAg
QVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CisvLworLy8gICAgLy8gV2UncmUgaW4gYSBz
aW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBh
IGRpcmVjdAorLy8gICAgLy8gc3RvcmUuCisvLyNpZiBVU0UoSlNWQUxVRTY0KQorLy8gICAgc3Rv
cmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyNlbHNlCisvLyAg
ICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vICAgIHN0b3Jl
MzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOworLy8g
ICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOworLy8j
ZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVl
UHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2Zp
bGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQogICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzIzLDQxICszNTIsNDIgQEAg
aW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAg
IGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7CisKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxp
bmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUp
ICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0b3Jl
NjQodmFsdWUuZ3ByKCksIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRl
KFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcp
KTsKLX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJv
ZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97CisvLyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7Cisv
L30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQor
dGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQog
ewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3Vs
dFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdz
KHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiBhcnJh
eVByb2ZpbGUsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBS
ZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoc2hv
dWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RT
ZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHNjcmF0Y2hHUFIs
IGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmlsZSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIs
IFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2Vs
bEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQogewotICAgIGlmIChzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKLSAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9y
ZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYXJyYXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9m
ZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKSk7Ci0gICAgfQorICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFy
cmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQo
KSwgY2VsbEdQUiwgc2NyYXRjaEdQUik7CiB9CiAKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6
OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQpAQCAtMzgwLDcgKzQx
MCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2
b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklE
IHZhbHVlKQogewogICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdp
c3RlcihyZWcpOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29s
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBs
b2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0g
ZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2
LDcgKzUyNiw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAog
aW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lz
dGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7Cisg
ICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgp
KQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2
LDcgKzUzNiw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAog
aW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lz
dGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93
bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAo
cmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAg
ICAgIGVsc2UKQEAgLTUxNCwxMSArNTQ0LDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNs
b3dDYXNlSWZOb3RKUwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVy
YW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlz
Q29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90
JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAt
NTQ0LDExICs1NjksMTcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxS
ZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25s
eSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5
dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAg
ICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQorICAgICAgICBzd2l0
Y2ggKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KHNyYykpIHsKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6
CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6IHsKKyAgICAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChz
cmMpOwogICAgICAgICAgICAgbW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3QpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTY2LDExICs1OTcs
NiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1
cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7
Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwg
YWRkcmVzc0Zvcihkc3QpKTsKQEAgLTU5NSw3ICs2MjEsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcp
CiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFp
c0tub3duQ2VsbCh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Zyk7CiB9CiAKQEAgLTYzNywzMCArNjYzLDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1w
VGFyZ2V0KGNvbnN0IAogewogICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7
Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9u
KTsKLX0KLQotQUxXQVlTX0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhP
cFB1dFRvU2NvcGUgYnl0ZWNvZGUpCi17Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9t
ZXRhZGF0YUlEICsgMTsgLy8gSGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1
dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRl
cmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1
dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0
UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQ
dXRJbmZvOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUg
QmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVj
b2RlKQotewotICAgIHVpbnQ2NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5
T3A6Om9wY29kZUlEKSArIDEpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2Rl
Lm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxl
cy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFBy
b2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOwotICAgIG1fY29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2Zp
bGUpOwotICAgIHJldHVybiBhcml0aFByb2ZpbGU7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
QmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KQEAgLTY4MSw2ICs2ODQsNjEgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBK
SVQ6OmVjbWFNb2RlPE9wUAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQ
dHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBH
UFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29k
ZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQz
MihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCku
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxv
YWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwg
R1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2Rl
KSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUs
IHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRh
ZGF0YShWYWx1ZVR5cGUgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9m
ZnNldCkKK3sKKyAgICBzdG9yZTgodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxp
bmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUp
ICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OnN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwgY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlMzIodmFsdWUsIEFk
ZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZz
ZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQs
IEdQUlJlZyByZXN1bHQpCit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29k
ZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZz
ZXQpLCBzX21ldGFkYXRhR1BSLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
Ojpsb2FkQ29uc3RhbnQoSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBH
UFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX2NvbnN0YW50c0dQUiwgc3Rh
dGljX2Nhc3Q8dWludHB0cl90Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7
CisgICAgbG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVn
aXN0ZXIgY29uc3RhbnQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY29u
c3RhbnQuaXNDb25zdGFudCgpKTsKKyAgICAvLyBPT1BTOiBNYXliZSBtYWtlIHRoaXMgbW9yZSBl
ZmZpY2llbnQ/CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVzdWx0KTsKKyAgICBsb2FkNjQoQWRkcmVz
cyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKEpTVmFsdWUpKSwg
cmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qz
LCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAg
ICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2Fs
bEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAog
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xl
YXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNl
cHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTk3LDcg
Kzk5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKIAogICAg
IC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlz
IHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5z
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFw
cGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zm
c2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNU
SVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDI0LDcgKzEwMjQsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJs
ZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50Lgog
ICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRh
YmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpD
aGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxl
KTsKIApAQCAtMTA0Miw3ICsxMDQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmlu
Zyhjb25zdCBJbgogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5h
dGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJs
ZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3Ry
aW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5o
IgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAg
LTU0LDExICs1NiwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24q
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgaWYgKHNy
Yy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAg
ICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVz
c0Zvcihkc3QpKTsKLSAgICAgICAgZWxzZQorICAgICAgICAvLyBPT1BTOiBtb3N0ICJPdGhlciIg
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50cyBjYW4ganVzdCBiZSBncmFiYmVkIGZy
b20gdGhlIFVubGlua2VkQ29kZUJsb2NrLiBJdCdzIGp1c3QKKyAgICAgICAgLy8gYSBjb3VwbGUg
dHlwZXMgdGhhdCBjYW4ndC4gQ3JlYXRlIGFuIGFic3RyYWN0aW9uIGZvciB0aGF0LgorCisgICAg
ICAgIHN3aXRjaCAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24oc3JjKSkgeworICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
SW50ZWdlcjoKKyAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZTog
eworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CiAgICAgICAgICAgICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2
YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMs
IHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTg3LDM3ICsxMDAsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0
aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEu
bV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2Nh
dGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGlu
ZUNhcGFjaXR5KCkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25W
aXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwg
QWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCBy
ZXN1bHRSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwog
ICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0
dXJlUmVnID0gcmVnVDM7CiAKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAg
ICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVt
aXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxv
Y2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5
LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0
b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBt
dXRhdG9yRmVuY2UoKm1fdm0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZz
ZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6
b2Zmc2V0T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVy
ZSgpLCBzdHJ1Y3R1cmVSZWcpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGF1dG8g
YnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0QWxsb2NhdGVKU09i
amVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBz
dHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBsb2Fk
OChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSwgc2NyYXRjaFJlZyk7CisgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJl
Zywgc2NyYXRjaFJlZyk7CisgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIFJlZ2lzdGVySUQg
c3RydWN0dXJlUmVnID0gcmVnVDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFs
bG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CisgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0
dXJlUmVnKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBA
IC0xMzEsNyArMTQyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5j
ZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwog
CiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNl
IHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJh
bmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpT
R2xvYmFsT2JqZWN0LCBtX2Z1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKSkp
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOwogCkBA
IC0xNTQsMzAgKzE2NiwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IElu
c3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExv
YWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkg
aW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdl
IHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9y
IHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3RvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
Ojpwcm90bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvdG8sIHByb3RvR1BSKTsKICAgICAKICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBj
ZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0
X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxLCBwcm90byk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2
YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7
CiAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVl
Ci0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUNSwKLSAgICAgICAgcmVnVDMs
IHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRT
bG93Q2FzZSgpOworICAgICAgICByZXN1bHRHUFIsCisgICAgICAgIHZhbHVlR1BSLAorICAgICAg
ICBwcm90b0dQUiwKKyAgICAgICAgc3R1YkluZm9HUFIsCisgICAgICAgIEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVyczo6c2NyYXRjaDEsIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2Ny
YXRjaDIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6SW5zdGFuY2VPZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luc3RhbmNlT2Zz
LmFwcGVuZChnZW4pOwotICAgIAorCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCkBAIC0xOTIsMTQgKzIxMiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248
ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhHUFJJbmZvOjpu
b25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBy
ZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQ
UkluZm86Om5vbkFyZ0dQUjAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxp
bmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIpOworICAgIHN0YXRp
Y19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9PSBhcmd1bWVudEdQ
UjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9t
KGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTI0MCw3ICsyNTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJl
Z1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAg
ICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzc0LDcgKzM5
Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwotICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKICNlbHNlCkBA
IC0zODMsOSArNDAyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9u
KgogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVy
R2VuZXJhdG9yKFZNJikKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgaml0LmVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAgLTQxMSw3ICs0MzAsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAKICAgICBpZiAoZHN0ICE9IHNyYykKICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNDM0LDkgKzQ1MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29u
c3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZnVuY3Rpb24sIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25hbWUsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00
NjUsOCArNDg0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGkK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhw
ciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRk
SnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiks
IHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2
YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFk
ZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTQ4MCw3ICs1
MDEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAt
NTE5LDcgKzU0MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMK
ICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihF
cXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJl
Z1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWdu
ID0ganVtcCgpOwogCkBAIC01NDMsNyArNTY0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9u
dWxsKGNvbnN0IEluc3RydQogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hl
Y2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBhZGRK
dW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0
KTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCkBA
IC01ODIsMTUgKzYwMywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxs
KGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1
ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVj
b2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwo
KSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwot
ICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAg
bG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QxKTsK
KyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVjb2RlLCBP
cEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAgICBhZGRKdW1wKGp1
bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwogfQpAQCAtNjI1LDggKzY0NCwx
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHBy
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNo
SWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZw
UmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGds
b2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVl
UmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwog
I2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc1RydXRo
eUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDAsNyArNjYxLDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1Qw
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTY5NSw3ICs3MTYs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMSwgcmVnVDAp
OwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxzZQogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CkBAIC03MTEsNyArNzMz
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhyb3du
VmFsdWVHUFIgPSBhcmd1bWVudEdQUjE7CkBAIC03MjAsNyArNzQyLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogCiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZF
U19SRUdJU1RFUlMgPiAwCiAgICAgaml0LmxvYWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIGFyZ3Vt
ZW50R1BSMCk7Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVySW1wbChhcmd1bWVudEdQUjApOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihhcmd1bWVudEdQUjApOwogI2VuZGlmCiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKQEAgLTkwOCw3ICs5
MzAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KIApAQCAtOTE4LDcgKzk0MSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0
cmljdGVxKGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIs
IHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTMxLDcgKzk1NSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKICAgICAKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJl
ZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk1MSw3
ICs5NzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RyCiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKICAgICBpc0JpZ0ludC5saW5r
KHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk3OCw3ICsxMDAyLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1Qw
KSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
Z1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTkzLDcgKzEwMTcsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBW
TTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBz
dG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZy
YW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAg
IC8vIE9PUFM6IFRoaXMgaXNuJ3QgZWxlZ2FudC4gV2h5IGFyZW4ndCB0aGV5IGluIHRoZSBjYWxs
ZWUgc2F2ZSBidWZmZXIuIEkgZ3Vlc3MgYmVjYXVzZSB3ZSBjYW4gT1NSIGV4aXQgaGVyZT8KKyAg
ICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOwogCiAg
ICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVh
ckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2Vw
dGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMDExLDIz
ICsxMDM4LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAg
ICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwg
ZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5
OAogCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRh
ZGF0YS5tX2J1ZmZlcjsKLSAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkp
Ci0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVu
dGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRl
ckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkp
OworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVy
QXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7
CiAgICAgYXV0byBza2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVl
R1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5W
YWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5Lmxpbmso
dGhpcyk7Ci0gICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAg
ICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBw
cm9maWxlKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKLSAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAg
ICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUm
Pihwcm9maWxlKSwgcmVncyk7Ci0gICAgICAgIH0pOwotICAgIH0KICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKIH0KIApAQCAtMTA1Myw4ICsxMDY4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2ltbShjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRl
Y29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2gg
ZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
Y29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1w
bGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVj
b2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAg
bGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwODEsMTMg
KzEwOTYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAg
IFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAg
IC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlz
IHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5z
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5k
KFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQs
IFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFi
bGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtu
b3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldp
dGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgs
IHVubGlua2VkVGFibGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dp
dGNoUHRyVGFnKTsKIH0KIApAQCAtMTA5OSwyMCArMTExNSwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9
IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3
aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25z
dCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dp
dGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dp
dGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxp
bmtlZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdU
MCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktl
eVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHRhYmxlSW5kZXgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1
bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOwotICAgIGxvYWQzMihjb2RlQmxv
Y2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOworICAgIGxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkpLCByZWdU
MCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVn
VDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2Fz
dDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0
cy5saW5rKHRoaXMpOwpAQCAtMTEzMyw3ICsxMTUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFf
bnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29t
cGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1l
ZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTQ4LDcgKzExNjYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9l
cV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTE2Niw3ICsxMTgzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwo
Y29uc3QgSW5zdHJ1YwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0
cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7CkBAIC0xMTg4LDEyICsxMjA1LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2Ug
dGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFw
IHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAv
LyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgc2l6ZV90
IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKKyAgICBzaXplX3QgY291bnQgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1WYXJzKCk7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZl
U3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCiAgICAgICAgIGVtaXRJ
bml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCi0gICAgZW1pdFdyaXRl
QmFycmllcihtX2NvZGVCbG9jayk7CisgICAgCisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1Qw
KTsKIAogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAjZWxzZQpAQCAtMTIxMiw3
ICsxMjMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogI2lm
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAg
IGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTEzMTAsMjMgKzEzMjksMTkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVj
dHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlE
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsK
IAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQz
MihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJl
Z1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRo
aXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwotICAg
IFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9j
YWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdp
c3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSBy
ZWdUMDsKQEAgLTEzNDIsNyArMTM1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlz
KGNvbnN0IEluc3QKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFy
ZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rpb246
OnJhcmVEYXRhVGFnKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURh
dGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUo
KSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1Y3R1
cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKIAotICAgIGxv
YWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcENyZWF0ZVRoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hl
ZENhbGxlZSgpLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVD
YWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0
cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFB0cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAg
IGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM4Nyw4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIsNyAr
MTM5OCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3Rl
ZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1Zh
bHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyArMTQxMSw4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBy
ZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzE0MjIs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgsMTAg
KzE0MzcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAg
IFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3Rh
bmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTQzMCw3ICsxNDUwLDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29w
X2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAgIGlmIChVTkxJS0VM
WShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1f
Y29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkg
eworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3Bz
Rm9yRnV6emluZygpICYmIG1fdW5saW5rZWRDb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxl
Rm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0o
KS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2Fk
UHRyKHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaFB0
cihCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5m
aW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTE0NDAsNyArMTQ2MCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICNlbHNlCiAgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CiAjZW5kaWYKLSAgICAgICAgbW92ZVZhbHVlKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVzdWx0UmVncy5ncHIo
KSk7CiAgICAgICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAg
LTE0NTMsOCArMTQ3Myw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnUKIAogICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAogICAgIGlmIChj
YW5CZU9wdGltaXplZCgpKSB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMy
KFBvc2l0aXZlT3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlcklu
Y3JlbWVudEZvckxvb3AoKSksCi0gICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxv
Y2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAgICAgICBBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9
CiB9CiAKQEAgLTE1MDksNyArMTUzMCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190
cmFwcyhjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFu
ZGxlVHJhcHMsIGFyZ3VtZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTIyLDcgKzE1NDQsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3Bf
Y2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2go
WDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMTU2NCwzNCArMTU4NiwzNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5t
X3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJn
dW1lbnRHUFIwOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91
bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNl
bGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9p
ZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXls
b2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rp
b25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0
YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBP
cDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNv
ZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwog
ICAgIH0KIH0KIApAQCAtMTYyMSwyMyArMTY0NSwyNCBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNF
eHByQ29tbW9uKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBh
cmd1bWVudEdQUjEpOwogI2VuZGlmCiAKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9u
ID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7Cisg
ICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OkZ1bmN0aW9uRXhwciwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFu
dCwgYXJndW1lbnRHUFIyKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsK
IAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCks
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBv
cF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2
bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQg
PT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bj
b2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
Mik7CiAgICAgfQogfQogCkBAIC0xNjY0LDI5ICsxNjg5LDMwIEBAIHZvaWQgSklUOjplbWl0X29w
X25ld19hc3luY19nZW5lcmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9
IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSwgcmVnVDAsIHNpemUpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zm
c2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3VtZW50R1BS
Mik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0Fy
cmF5OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50
R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBzaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJy
YXlXaXRoU2l6ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1Qw
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ3VtZW50R1BSMik7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAjZWxzZQorICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKICAgICBlbWl0TG9hZChzaXplSW5k
ZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRz
dCwgcmVnVDMsIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQog
CkBAIC0xNjk0LDggKzE3MjAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9z
aXplKGNvCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFM6IERvdWJsZSBjaGVjayB0aGF0
IHdlIHR1cm4gb2ZmIHVubGlua2VkIGNvZGUgY2FjaGluZyB3aGVuIHRoZSB0eXBlIHByb2ZpbGVy
IGlzIGVuYWJsZWQuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9u
ID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Q
cm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE3NzcsMjAg
KzE4MDQsMjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAg
IHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1Qy
LCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigp
OwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRj
aDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0
ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hp
Y2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJl
Zyk7CisgICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBU
aGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMlJlZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCks
IHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVn
VDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7
CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qx
KTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFs
dWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICAvLyBPT1BTOiBEb3VibGUgY2hlY2sgdGhhdCB3ZSB0dXJuIG9mZiB1bmxpbmtl
ZCBjb2RlIGNhY2hpbmcgd2hlbiB0aGUgdXNpbmcgdGhlIGNvbnRyb2wgZmxvdyBwcm9maWxlci4K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVDb250
cm9sRmxvdz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9u
ID0gbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7CkBAIC0xODYwLDcg
KzE4OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAg
bW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwogCiAgICAgZG9uZS5saW5rKHRo
aXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVn
cyk7CiB9CiAKQEAgLTE4ODYsNyArMTkxNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90
b3R5cGVfb2YoY29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwogICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFy
cmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5o
IgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0
aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50
cnkuaCIKQEAgLTI4NTUsNyArMjg1Niw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5
KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAK
LSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQgPSBsaW5rZWRUYWJsZS5tX2N0aURl
ZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIApAQCAtMjg4MCw3ICsyODgxLDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25z
dCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3Vs
dDsKICAgICBpZiAoa2V5LmlzSW50MzIoKSkKQEAgLTI5MDMsNyArMjkwNCw3IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHZvaWQqIHJlc3VsdDsKLSAgICBjb25zdCBT
dHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CiAKICAgICBpZiAoa2V5LmlzU3RyaW5nKCkpIHsKICAgICAgICAgU3RyaW5nSW1wbCogdmFsdWUg
PSBhc1N0cmluZyhrZXkpLT52YWx1ZShnbG9iYWxPYmplY3QpLmltcGwoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDcgKzM0OCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlkR1BSUmVnLCBJbnZh
bGlkR1BSUmVnKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7
CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw5MiArNDksMTAyIEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlW
YWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVn
VDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBpZiAobWV0
YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhO
dW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZh
bElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90Q2VsbC5s
aW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFzZUdQ
UiwgcHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnJlc3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0
QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzLCBy
ZWdUMik7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKICAgICAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgICAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+
CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5
dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGlm
IChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKLSAgICAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5
VmFsSW5kZXgrK107CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zm
c2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAg
QVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7
CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50
R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFy
Z3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0g
YXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwg
cHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNl
ZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBh
cmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVH
UFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsxNTksNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNjAs
OCArMTcwLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdU
MTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0g
YXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlH
UFIgPT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMTg3LDM0ICsxOTcsNDAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owot
ICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnJlc3VsdCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQo
KTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1l
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhh
c0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzIz
OSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMjM1LDI2ICsyNTMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9w
cml2YXRlX25hbWUoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBh
cmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldFByaXZh
dGVOYW1lT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMjY0LDcgKzI3
Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKQEAgLTMwMCwyMSArMzEyLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2Jy
YW5kKGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNl
dFByaXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwotICAg
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7CisK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRH
UFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiks
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVt
aXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJp
ZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI0LDE3ICszNDMsMjIgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwg
U2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0
ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsK
KwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nl
c3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRB
Y2Nlc3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVz
cyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BS
Myk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0zNDQsMjQgKzM2OCwxOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkg
dXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFu
ZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0
KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxk
ZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVz
LCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXpl
KT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsK
LSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblNldFByaXZhdGVC
cmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmCiAK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMzcwLDE5ICszODgsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hl
Y2tfcHJpdmF0ZV9icmFuZChjbwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJyYW5kLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdp
c3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7CiAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFu
ZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIH0K
IApAQCAtMzk0LDkgKzQyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0
ZV9icmFuCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFz
ZUdQUiwgYnJhbmRHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFy
Z3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5k
LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC00MDYsMjQgKzQzNSwxOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJh
aXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRU
eXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGlt
aXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzUsMzAgKzQ1OCw0MiBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0g
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHJlZ1QzKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwot
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJlZ1Q0KTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9maWxlR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgcHJvZmlsZUdQUik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiks
IHJlZ1QzLCByZWdUNCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBwcm9maWxlR1BSLCBzdHViSW5mb0dQUik7
CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICBnZW4u
c3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOworICAgIHN0dWJJbmZvLT5wdXRLaW5k
ID0gc3RkOjppc19zYW1lX3Y8T3AsIE9wUHV0QnlWYWxEaXJlY3Q+ID8gUHV0S2luZDo6RGlyZWN0
IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2Rl
KGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQo
Z2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUt
YmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTQ3NCwxNSArNTA5LDEyIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2Rl
ID0gRUNNQU1vZGU6OnN0cmljdCgpOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxw
dHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUg
PSBieXRlY29kZS5tX2VjbWFNb2RlOwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNDk4LDcgKzUzMCwx
NiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUg
ZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGdlbi5z
dHViSW5mbygpLCByZWdUMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQpOworICAgIGlm
IChpc0RpcmVjdCkKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSwgT3BQdXRCeVZhbERpcmVjdDo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAgZWxz
ZQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEJ5VmFsPigpLCBPcFB1dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBjYWxsT3BlcmF0aW9uKEFkZHJlc3MoYXJn
dW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFy
Z3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTUxMiw3ICs1NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBj
YWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU2NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUz
MywxOCArNTc0LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0
IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZH
L0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0
cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0g
ICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVy
bkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVn
VDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVH
UFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
ZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZChC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMo
cmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAgfQor
CiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpAQCAtNTcw
LDIwICs2MTcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAog
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
Mik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgdmFsdWVHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJbnZh
bGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNs
b3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQ
Uik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9IGJ5
dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQg
d3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2NTIsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKLSAg
ICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAg
VU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02MDMsMTMg
KzY2MCwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0aW9uID0g
cHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4g
dGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZv
KCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisgICAgUHJpdmF0ZUZpZWxkUHV0
S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworCisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQ
UjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQUjQsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50c0dQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1
c3RlZEltbVB0cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC02MjIsMTggKzY4MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZShjCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9w
dXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0MywxNCAr
Njk3LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3MzQsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlv
bnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzc0NCw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVn
VDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc1NSw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJp
YnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJl
Z1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNzA5LDcgKzc2Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFs
KGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJl
Z1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCBy
ZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzc3LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRl
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1Qz
LCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03
MjcsMjMgKzc4NiwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwg
YmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVE
ZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAg
IC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBz
aW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODI4LDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxC
eUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRp
b24oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwpAQCAtNzgxLDI0ICs4NTIsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChj
b25zdCBJbgogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7
CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNDsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVy
dHlHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemU7
Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeUlk
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fz
c2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC04MDgsNyArODc0LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtODQ1LDIyICs5MTEsMzMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2Up
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BS
LCBwcm9wZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBCYXNlbGluZURl
bEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0
aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJz
LgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmll
ciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5NjAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0
ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVu
dEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgY2FsbE9wZXJhdGlvbihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21h
TW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTks
MjQgKzk3OCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25z
dGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxl
dGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0
YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lm
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMDAsNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlv
bnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMg
YmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAg
ICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxs
SGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIgKzEw
MzUsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6cmVzdWx0KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJl
Z3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vz
c1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNjksMTcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNh
bGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDAzLDI2ICsxMDg5LDIw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKICAgICBtb3ZlKEpJ
VDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8
ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAzMCwyMiArMTExMCwzMSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
VlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vz
c1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiArMTE0MywxOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVj
dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSht
ZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTA3Myw4MyAr
MTE2NCw2MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2Ft
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpLCBkZWNsdHlwZShvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAg
ZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0
aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAg
ICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogICAgIAogICAgIGlmICgq
aWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkgewotICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1
YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7
Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgJm1ldGFkYXRh
Lm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUsIHJlZ1QxKTsKKyAg
ICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9m
ZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhOjpvZmZzZXRPZk1vZGUo
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNo
MzIoTm90RXF1YWwsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9k
ZTo6QXJyYXlMZW5ndGgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2Rl
TWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3Ro
TW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5
SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOwotCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJl
c3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVn
KTsKIH0KIApAQCAtMTE1OCwxNiArMTIyNywxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
LCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNDgsNTcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1l
bnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1
bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lk
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAg
Q2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0
aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRv
ciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNs
b3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQpAQCAtMTIwNiw3ICsxMzA4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0MSwxNiArMTM0MywxOSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRo
VGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0
QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTEyNjAsMjggKzEzNjUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdUMTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1l
bnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lm
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI5MSw3ICsxMzkwLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTMyOSwyMyAr
MTQyOCwzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0g
Ynl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0
byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3Rv
cmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUg
YmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0
ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5
cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhi
YXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisg
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHN0dWJJ
bmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/
IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisK
KyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRC
eUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDog
UHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5
dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4p
OwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUt
YmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0NzIsMTggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVl
LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQ
UjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTEzNzYsMjUgKzE0OTMsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lz
dGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRC
eUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBh
cmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8
fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlR1BSID09IGFyZ3VtZW50R1BS
MSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gZ2VuLnNsb3dQYXRoRnVu
Y3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKGdlbi5zbG93UGF0
aEZ1bmN0aW9uKCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTQw
NCw3ICsxNTE1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3Qg
YmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcv
RlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3Rz
LCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAg
ICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJu
QWRkcmVzcygpOwpAQCAtMTQ0MSwyMCArMTU1MiwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9i
eV9pZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBi
YXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZS
ZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZv
R1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkluQnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpA
QCAtMTQ2MywxNCArMTU4NSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29u
c3QgSW5zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsr
XTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xNDgwLDI4ICsxNjA1LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25z
dCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNz
ZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
c3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4K
ICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVu
ayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2MjksMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJv
ZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NjQsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbElu
ZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0aW9uKEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBk
c3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BS
MywgYXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1
NTYsNTkgKzE2ODYsNzAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJ
bgogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJh
c2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJv
ZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVBy
b2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVD
YWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRo
ZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZl
IGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVj
bHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0eXBlKQogewotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKIAotICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHVi
SW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBl
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1By
aXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklU
OjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewotICAg
IEFTU0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAg
VU5VU0VEX1BBUkFNKHByb3BlcnR5KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0g
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2
YXRlQnJhbmQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1tt
X2luQnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2
YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOwor
ICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTE2MTgsMjcgKzE3NTksMjEgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRl
U2xvdyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IHJlZ1QxOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5T3JCcmFuZEdQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpLCBkZWNsdHlw
ZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gdHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX25hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NTIsNyArMTc4Nyw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKGMKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUu
bV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNs
b3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
cHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTY2NiwxOSArMTgwMSwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVfYnJh
bmQoCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZUJyYW5kPigpOwotICAgIGVtaXRIYXNQ
cml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsK
KyAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwg
Ynl0ZWNvZGUubV9icmFuZCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KQordm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwg
QWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9u
V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFy
SW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2g4KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7Ci0gICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHJlZ1QwKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRlcHRoOyArK2kpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CkBAIC0xNjg4LDYgKzE4MjYsNyBAQCB2b2lk
IEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNzAxLDcgKzE4NDAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRT
Y29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QxKTsKICAgICAgICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7
CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRy
ZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihj
b25zdGFudFNjb3BlKSwgcmVnVDApOwpAQCAtMTcxNSw3ICsxODU0LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFu
dFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwg
bV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwogICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzk0LDg3
ICsxOTMzLDEwNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fcmVzb2x2ZVR5cGU7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
ICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUlu
ZGV4KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUlu
ZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9u
KTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIC8vIElmIHdlIHByb2ZpbGUgY2VydGFpbiByZXNv
bHZlIHR5cGVzLCB3ZSdyZSBnYXVyYW50ZWVkIGFsbCBsaW5rZWQgY29kZSB3aWxsIGhhdmUgdGhl
IHNhbWUKKyAgICAvLyByZXNvbHZlIHR5cGUuCiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9k
dWxlVmFyKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52
aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0g
TW9kdWxlVmFyKSAKKyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNv
bHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVudCgpLCByZWdUMCk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJs
b2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICAgICAgcHRyZGlmZl90
IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOworCisgICAgICAgIGF1dG8gY2xvc3VyZVZhckdlbmVy
YXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BS
ZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Nj
b3BlIENsb3N1cmVWYXIiKTsKKyAgICAgICAgfTsKIAotI2RlZmluZSBSRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5l
cmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10g
PSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVTT0xWRV9TQ09QRV9HRU5F
UkFUT1IpCisgICAgICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5l
cmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAi
QmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MiKTsKICAgICAgICAgfTsKLSN1bmRlZiBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgorCisgICAg
ICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAg
ICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgc3Rk
OjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgZ2VuZXJpYyIpOworICAgICAg
ICB9OworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gY29kZTsKKyAgICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xv
c3VyZVZhcikKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5l
cmF0b3IpOworICAgICAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0
dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljUmVzb2x2ZVNjb3Bl
R2VuZXJhdG9yKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogICAgIH0KIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciog
dGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Omdl
bmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5
cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRo
dW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJ
bnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKworICAgIENDYWxsSGVscGVycyBqaXQ7CisKICAgICB1
c2luZyBNZXRhZGF0YSA9IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzY29wZUdQUiA9IHJlZ1Q2OyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xv
dyBwYXRoLgogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CiAg
ICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0
aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1
cm5BZGRyZXNzKCk7CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVn
VDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBy
ZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExp
c3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFs
aWRHUFJSZWcpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BS
UmVnKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykg
ewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhn
bG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmpl
Y3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zh
ckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBh
dXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykgewotICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURl
cHRoKSksIHJlZ1QxKTsKKyAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAg
IGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7CiAKLSAgICAgICAgTGFiZWwgbG9vcCA9IGxh
YmVsKCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7Cisg
ICAgICAgIExhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgSnVtcCBkb25lID0gaml0
LmJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAg
ICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICAgICAgICAgIGp1bXAo
KS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5z
dWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCkubGlu
a1RvKGxvb3AsICZqaXQpOwogICAgICAgICB9Ci0gICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZd
IChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewpAQCAtMTg4MiwxMiArMjAzOSwxMiBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2Nr
KCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAgICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3Qo
KSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIpOwot
ICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKLSAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmpl
Y3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2go
KSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAg
ICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6
b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAg
ICAgaml0Lm1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCkBAIC0xODk3LDExICsyMDU0LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29w
ZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2Jh
bFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAg
ICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
LSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAg
ICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTE5MDksNyArMjA2Niw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xv
c3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAg
ICBjYXNlIE1vZHVsZVZhcjoKQEAgLTE5MTksODMgKzIwNzYsNDUgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5Lmxp
bmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFs
TGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5
cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIg
fHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAg
ICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1w
TGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0
eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Cisg
ICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9m
UmVzb2x2ZVR5cGUoKSksIHJlZ1QwKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgYXV0byBlbWl0Q2FzZSA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGpp
dC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwor
ICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOworICAgICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgIG5vdENhc2UubGluaygmaml0KTsKKyAg
ICAgICAgfTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgZW1pdENh
c2UoR2xvYmFsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHkpOworICAgICAg
ICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5q
dW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwot
ICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCi0g
ICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
dGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAg
YXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Nj
b3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRp
b25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2Nh
dGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5F
X1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBl
IyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRo
dW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICBy
ZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQu
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX3Jl
c29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfUkVTT0xW
RV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8g
VGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0
aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUg
cmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwNjUsNiArMjE4NCw3IEBAIHZv
aWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0yMTc4LDcgKzIyOTgsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yMTg2LDkgKzIzMDYsOSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEZyb21TY29wZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBk
c3QsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogI2Vsc2UgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yMTk2LDQxICsyMzE2LDUwIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUg
PSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBSZXNvbHZlVHlwZSBw
cm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2Rl
SW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2Rl
SW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rp
b24pOworCisgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAg
ICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVW
YXIsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisK
KyAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10g
KFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1
bmsodm0sIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX2dl
dF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0byBnZW5lcmljR2V0
RnJvbVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpn
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBv
cF9nZXRfZnJvbV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0g
cmVnVDY7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1Owog
Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRyX3Qq
IG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9v
cGVyYW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRp
ZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Jm1ldGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNk
ZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9z
Y29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZF
X1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNj
b3BlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0
YUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVH
UFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0
YUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdl
bmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0K
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYg
KHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdl
dENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgY29k
ZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0
b3IpOworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZy
b21TY29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdl
dEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVu
a05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJh
dGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4g
cmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsg
Z2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAv
IEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgpAQCAtMjIzOSw5OSArMjM2OCw4OCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6
TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBSRUxFQVNFX0FTU0VSVCh0
aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1
cm5BZGRyZXNzKCk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIGppdC50YWdSZXR1cm5B
ZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRh
R1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1l
dGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFk
YXRhU3RydWN0dXJlT2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVH
UFIsIHJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywg
cmVnVDEpKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSkpOworICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJl
ZyBzY29wZUdQUikgeworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBP
cEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCkpLCByZWdUMSk7Cisg
ICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICBqaXQubG9hZDMyKEFk
ZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKICAgICB9OwogCi0gICAg
YXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBt
X3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVD
VF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJl
Z1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNz
KHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJ
bnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Qb2lu
dGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihy
ZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJl
ZywgcmVnKTsKLSAgICB9OwotCiAgICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAoR1BS
UmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgewogICAgICAgICBzdGF0aWNfYXNzZXJ0
KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BS
KTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworICAgICAgICBqaXQubHNoaWZ0NjQo
VHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmFkZFB0cihzY29wZUdQ
Uiwgb3BlcmFuZEdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CiAgICAg
fTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBi
b29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVy
ZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BS
KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0
IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRp
dGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmpl
Y3Rpb24uCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwogICAg
ICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKICAgICAgICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2ggPSByZWdUMjsKIAotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJk
YTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBi
YXNlLCByZWdUMyk7CisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1w
KHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVx
dWFsLCBiYXNlLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJh
bmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIG9mZnNldCk7CiAgICAgICAgICAgICBp
ZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0g
YnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91
dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZz
ZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlz
KTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
KTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0
T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAg
ICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAg
IGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5uZWczMihvZmZzZXQpOworICAgICAg
ICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IGppdC5sb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgog
ICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGly
ZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAg
ZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6
Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIocmVn
VDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJy
YW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENs
b3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOworICAgICAg
ICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1l
dGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsKICAgICAgICAgICAgIGVtaXRHZXRD
bG9zdXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFy
OgpAQCAtMjM0MSw4NiArMjQ1OSw2MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0g
ICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAg
ICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBl
KTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0
UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAg
ICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZh
bHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGppdC5sb2Fk
MzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwg
cmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIg
PSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
aml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAg
IEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3Bl
cnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9
IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5r
KCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Cisg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXIubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQu
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5q
dW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGlu
aygmaml0KTsKIAotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQorICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZh
dWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVh
azsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fz
c2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJl
Z1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJv
ZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0
YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVj
a2V0KCkpKTsKIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nh
c2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93
Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Nj
b3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAK
LSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Nj
b3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAg
aWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkp
IFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAg
ICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUs
ICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQot
Rk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0j
dW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRv
cihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9u
IGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAg
ICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNDQ5LDcgKzI1NDQsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgQ2FsbCBvcGVyYXRpb24g
PSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBq
aXQuZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKIAotICAgIGppdC5zdG9yZTY0
KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVz
cyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgp
ICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICBqaXQubW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0
ZXIpOwogCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTI0NzEsODYgKzI1NjYsNzYgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUq
IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5
V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2lu
dFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3Jp
dGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0
b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDAp
OwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNz
KHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJh
bmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0g
Y29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUg
PSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xv
dCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRT
bG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsK
IAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29s
IGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29s
dmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJ
bmZvLnJlc29sdmVUeXBlKCk7CisKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGlu
amVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQg
dGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hl
Y2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNo
ZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMg
Zm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LgorICAgICAgICAgICAgLy8gQWRkaXRp
b25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0
aW9uLgorICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOworICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICAgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworCiAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAKICAgICAgICAgICAgIGppdEFzc2Vy
dChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAg
bG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgICAgICAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwogICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAg
ICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0Vp
Z2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgc3RvcmVQdHIocmVn
VDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9m
ZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNl
IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNv
bnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0g
ICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0gICAgICAgICAg
ICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkg
JiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisgICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBy
ZWdUMCk7CisgICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSwgcmVn
VDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDApOworCisgICAgICAgICAg
ICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLmluaXRpYWxpemF0
aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKICAgICAg
ICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBj
YW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4K
LSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAg
ICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFs
dWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUq
Pigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCksIHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QxKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3
aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRj
aHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xv
YmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwg
bWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
Y29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKworICAgICAgICAgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0
ZVdhdGNocG9pbnQocmVnVDEpOworCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1Qw
KSk7CisKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBj
YXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwg
bWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKworICAg
ICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
T3BlcmFuZCgpLCByZWdUMik7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50
KHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qx
KTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAg
ICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWln
aHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSk7CisKICAgICAg
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yNTY0LDU4
ICsyNjQ5LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAg
ICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
Ci0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGlj
YWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVl
IHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAgICAgICBpc0dsb2Jh
bExleGljYWxWYXIubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotCi0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAg
ICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmso
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
KyAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1cmVWYXIvIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21waWxlIHRoaW5ncworICAg
IC8vIHRoYXQgd2F5IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2UndmUgcHJvdmVuIHRoYXQg
aXMgdGhlIHR5cGUgd2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJlVmFyLAorICAgIC8vIGFs
bCBDb2RlQmxvY2tzIHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFyCisgICAgLy8gaWYgdGhl
IHZhciBpbmplY3Rpb24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYgaXQgaXMgZmlyZWQsIHRo
ZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0CisgICAgLy8gbWF0dGVyIHdo
YXQgdHlwZSB3ZSBhcmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PT0gQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcik7CisgICAgZWxzZSBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIpCisgICAgICAgIGVt
aXRDb2RlKFJlc29sdmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgZW1pdENv
ZGUoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVsc2UgewogICAgICAg
ICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJ
bmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1QwKTsKICAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCisgICAgICAg
IEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsodGhpcyk7
CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwog
CiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CiAKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAogICAgICAgICBza2lw
VG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CiAg
ICAgfQogfQogCkBAIC0yNjI0LDE4ICsyNzAzLDIxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfdG9fc2NvcGUoY29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVz
b2x2ZVR5cGUoKTsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgUmVz
b2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGlmIChwcm9maWxl
ZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJZiBhbnkgbGlua2VkIENv
ZGVCbG9jayBzYXcgYSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBDb2RlQmxvY2tzIGFyZSBn
dWFyYW50ZWVkCisgICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZhci4KICAgICAgICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAg
ICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29w
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5z
dHJ1Y3Rpb24pOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJndW1lbnRHUFIwLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
CiAgICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVj
b2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9i
eXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBBU1NFUlQobV91
bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJl
bnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CkBAIC0yNjUyLDcgKzI3MzQsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lz
dGVyczo6ZWJwKTsKQEAgLTI3MDEsNyArMjc4Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9m
cm9tX2FyZ3VtZW50cyhjb24KICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3Vt
ZW50cywgcmVnVDApOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6
OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
LCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNzU5
LDcgKzI4NDEsNiBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKQEAgLTI3NjcsNyArMjg0
OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb24KICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGlu
ZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
Z1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yODIzLDcgKzI5MDQsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvCiB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0
b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CkBAIC0yODM5LDExICsy
OTE5LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKICAgICBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24g
bW9kZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBwcm9maWxl
IGl0IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEg
PT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CisgICAgaWYg
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVyYXRvck1ldGFk
YXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgewogICAg
ICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1Q0OwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoVGVz
dDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKCh+SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSAmIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW51bWVy
YXRpb25Nb2RlTWFzaykpKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BFbnVtZXJh
dG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHNjcmF0Y2hH
UFIpOworICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok93blN0cnVjdHVyZU1vZGUpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmU4VG9NZXRhZGF0
YShzY3JhdGNoR1BSLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNl
dE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOworCiAgICAgICAgIGxvYWQzMihBZGRyZXNzKGVudW1l
cmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSksIGluZGV4R1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpKSk7CiAKQEAgLTI4ODEsNzggKzI5NjcsODcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHlOYW1lOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKIAotICAgIGF1dG8gcmVzdWx0
R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUVu
dW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3Rl
cnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZUVu
dW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNo
MzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHNjcmF0Y2gzKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcHJvcGVydHlHUFIpOwog
Ci0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1l
dGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdl
dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaDIp
OworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHNj
cmF0Y2gyLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CiAg
ICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KLSAgICBKdW1wIGlz
Tm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3Rl
ZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBpc05vdE93blN0cnVjdHVy
ZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVt
cCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7Cisg
ICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVh
bCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0
LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8gSWYgaW5kZXggaXMgbGVz
cyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3Mg
YW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1wIG91dE9mTGluZUFjY2Vz
cyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwor
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CisgICAgbG9hZDY0KEJh
c2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAo
KSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91dE9mTGluZUFj
Y2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1Qz
KTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1Qz
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDIpOwor
ICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2Ny
YXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBv
ZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnRw
dHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdU
MCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7
CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgb2Zm
c2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1
bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOwotICAgIHN0b3JlOChU
cnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJl
TW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsK
KyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCBieXRlY29kZSwg
T3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0
YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRoaXMpOwotICAgIEp1bXAg
aXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIEp1bXAgaXNOb3RJbmRl
eGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJlcGxhY2UgdGhlIHN0cmlu
ZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdU
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAg
ICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAKICAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIp
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdl
bik7CiAKICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjk2MSwxMCArMzA1Niw5IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFs
U2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwg
aXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93
UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5
SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVU
eXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9p
ZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhG
dW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpA
QCAtMjk3Myw3ICszMDY3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0
YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1Qx
KTsKKyAgICBvcjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwg
Ynl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEo
KSk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsK
IApAQCAtMzA2Miw2ICszMTU4LDEzIEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAK
K3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxl
Y3RTY3JhdGNoR1BSKG93bmVyKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw5ICsyMzYsOSBAQCBzdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICBpZiAoaXNKU0FycmF5
KGJhc2VDZWxsKSkgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9
PSBDYWNoZVR5cGU6OlVuc2V0CiAgICAgICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2Uo
KSA9PSBiYXNlQ2VsbAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2Fj
aGVhYmxlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkg
eworICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlM
ZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7
CiAKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJh
c2VDZWxsKSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBq
c0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5l
cmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVu
Y3Rpb24oa2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5
TGVuZ3RoKGxvY2tlcik7CkBAIC0yNDksOCArMjQ5LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNl
OjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgsIHByb3BlcnR5
TmFtZSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSlNTdHJpbmcoYmFzZUNlbGwpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5z
ZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmlu
Z0xlbmd0aChzdHViSW5mbykpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRD
b2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChzdHViSW5mbyk7
CisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdM
ZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbykpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBn
ZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChj
b2RlQmxvY2ssIHN0dWJJbmZvKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENv
ZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihr
aW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0U3RyaW5nTGVuZ3Ro
KGxvY2tlcik7CkBAIC0zMDQsNyArMzA0LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQog
ICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoKQogICAgICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJvbVByb3h5KSB7Ci0gICAgICAg
ICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVNlbGZQcm9wZXJ0eUFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKKyAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVy
YXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpH
ZXRCeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkp
OwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZv
clJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBAIC03MzEsMTEgKzczMSwx
MSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShKCiAgICAgICAgICAg
ICAgICAgb2xkU3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJ
bmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAg
JiYgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8s
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vz
czo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIHNs
b3QuY2FjaGVkT2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgICAgICYmICFvbGRTdHJ1Y3R1cmUt
Pm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAgICAgICAgICAmJiAh
aXNQcm94eSkgewogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgYm9v
bCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0
eVJlcGxhY2Uoc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIG9sZFN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChn
ZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElD
RXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwg
c2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBh
dGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemlu
Z1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7CkBAIC0xMTMyLDcgKzEx
MzIsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAogICAgICAgICAg
ICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlCiAgICAgICAgICAgICAgICAgJiYgIXNs
b3Qud2F0Y2hwb2ludFNldCgpCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0
ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhzdHViSW5m
bywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUg
PSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8s
IHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsK
ICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5U2VsZlBhdGNoLCBzdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBs
YWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpAQCAtMTU1Miw3ICsxNTUyLDcgQEAg
c3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogCiB2b2lkIHVubGlua0Nh
bGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5J
ZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxM
aW5rSW5mby5mYXN0UGF0aFN0YXJ0KCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBE
aXNhc3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2Fs
bExpbmtJbmZvKSk7CiAgICAgCiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5n
ZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPigpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVk
ZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIK
KyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhz
SW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Nj
b3BlLmgiCkBAIC0zNzAsNiArMzcxLDE1IEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRI
ZXVyaXN0aWNzKFYKICAgICAKICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVBy
ZWRpY3Rpb25zKCk7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6
QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2Vs
aW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxp
bmVDb2RlKSB7CisgICAgICAgICAgICAvL2RhdGFMb2dMbigiU2hhcmVkIHZpYSBMTEludCIpOwor
ICAgICAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNl
bGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+aml0TmV4
dEludm9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsK
ICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUi
LCAoInRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRF
eGVjdXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTIs
MTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAK
IG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikK
ICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFj
cm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjpt
X2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAg
ICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhd
LCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9wKG9wY29k
ZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwgc3JjRHN0
IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAgICAgICBzdG9y
ZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9m
aWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bj
b2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0Y2goKQog
CiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwg
bWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQot
ICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVu
YXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0YSh0NSwg
dDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShz
aXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90
SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDIK
LSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5
QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAgICByZXR1
cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEsIExvd2Vz
dFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1cGRhdGVB
cml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9m
aWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1cm4odDEs
IHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkKIAogbWFj
cm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJP
cGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRh
dGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3Bh
dGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkK
LSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAg
ICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAgICAgICAg
Z2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9t
U3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWco
c2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAub3AxTm90SW50
CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAgICBhcml0aFBy
b2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZ2V0
KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0MSwgdDAs
IC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwxMiBAQCBt
YWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJpYSB0Miwg
TG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5vdEludE9w
MkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRo
UHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAg
ICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3Ax
Tm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAgICBhcml0
aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlB
cml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0
NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAgICAgICAg
IGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5hcnlPcEN1
c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZp
bml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90LgogICAg
ICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cKLSAg
ICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0
NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEK
ICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEzIEBAIG1hY3JvIGNo
ZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMsIGExCiAgICAgICAg
ICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRweiByMCwgLnJlY292
ZXIKLQogICAgICAgICAgICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAgIyBCYXNlbGluZSB1
c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQgcG9vbC4KKyAgICAg
ICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJs
b2NrOjptX2ppdERhdGFbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjpKSVRE
YXRhOjptX2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAgIGlmIEFSTTY0RQog
ICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZK
U0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50cnkpICogUHRyU2l6
ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMg
SlNFbnRyeVB0clRhZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9w
KGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3Ry
dWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29k
ZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0
YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAg
ICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxl
ICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0KICAgICAgICAg
Z2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQogICAgICAg
ICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNybyBwcmVPcChvcGNv
ZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDEsIC5z
bG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEgdDEsIFtjZnIs
IHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAg
ICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUlu
dCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTExMzQsMTEg
KzExMzUsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVn
YXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLQotICAg
IG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdh
dGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNb
dDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0xMTQ2LDEy
ICsxMTQyLDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwKICAg
ICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MwogICAgIG9y
cSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkK
KyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0
MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0cXogdDMsIG51
bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAwLCB0Mwot
ICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5h
cnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEsIHQyKQogICAg
IHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNjAsNiBAQCBtYWNy
byBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAotICAg
ICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9i
aXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQogICAgICAgICBn
ZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0
MSkKQEAgLTExNzcsNyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2Rl
TmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlv
bkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9m
aWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAg
Lm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21T
dG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93CiAg
ICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKLSAgICAgICAg
cHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQy
KQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkludDoKLSAg
ICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQy
KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBn
ZXQobV9kc3QsIHQyKQpAQCAtMTIwNCw5ICsxMTk2LDkgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21T
dG9yZShvcGNvZGVOYW1lLCBvcAogCiAgICAgLm9wMk5vdEludDoKICAgICAgICAgIyBGaXJzdCBv
cGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIGlzIGRlZmluaXRlbHkgbm90
LgotICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5z
bG93Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRh
dGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIs
IHQ1LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgY2kyZHMgdDAsIGZ0MAog
ICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCkBAIC0xNTE4
LDcgKzE1MTAsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV9pZF9kaXJlY3QsCiBl
bmQpCiAKICMgVGhlIGJhc2Ugb2JqZWN0IGlzIGV4cGVjdGVkIGluIHQzCi1tYWNybyBwZXJmb3Jt
R2V0QnlJREhlbHBlcihvcGNvZGVTdHJ1Y3QsIG1vZGVNZXRhZGF0YU5hbWUsIHZhbHVlUHJvZmls
ZU5hbWUsIHNsb3dMYWJlbCwgc2l6ZSwgbWV0YWRhdGEsIHJldHVybikKK21hY3JvIHBlcmZvcm1H
ZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwgbW9kZU1ldGFkYXRhTmFtZSwgdmFsdWVQcm9maWxl
TmFtZSwgc2xvd0xhYmVsLCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuLCBkb0FycmF5UHJvZmlsZSkK
ICAgICBtZXRhZGF0YSh0MiwgdDEpCiAgICAgbG9hZGIgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjolbW9kZU1ldGFkYXRhTmFtZSUubW9kZVt0Ml0sIHQxCiAKQEAgLTE1NDYsNyArMTUzOCw3IEBA
IG1hY3JvIHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwKIC5vcEdldEJ5SWRBcnJh
eUxlbmd0aDoKICAgICBiYm5lcSB0MSwgY29uc3RleHByIEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0
aCwgLm9wR2V0QnlJZFVuc2V0CiAgICAgbW92ZSB0MywgdDAKLSAgICBhcnJheVByb2ZpbGUoJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRhTmFtZSUuYXJyYXlMZW5ndGhNb2Rl
LmFycmF5UHJvZmlsZSwgdDAsIHQyLCB0NSkKKyAgICBkb0FycmF5UHJvZmlsZSh0MCwgdDIsIHQ1
LCB0MSkKICAgICBidGl6IHQwLCBJc0FycmF5LCBzbG93TGFiZWwKICAgICBidGl6IHQwLCBJbmRl
eGluZ1NoYXBlTWFzaywgc2xvd0xhYmVsCiAgICAgbG9hZENhZ2VkSlNWYWx1ZShKU09iamVjdDo6
bV9idXR0ZXJmbHlbdDNdLCB0MCwgdDEpCkBAIC0xNTY4LDcgKzE1NjAsMTAgQEAgZW5kCiBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV9pZCwgT3BHZXRCeUlkLCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBnZXQobV9iYXNlLCB0MCkKICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlQ2VsbChzaXplLCB0MCwgdDMsIC5vcEdldEJ5SWRTbG93KQot
ICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wR2V0QnlJZCwgbV9tb2RlTWV0YWRhdGEsIG1fcHJv
ZmlsZSwgLm9wR2V0QnlJZFNsb3csIHNpemUsIG1ldGFkYXRhLCByZXR1cm4pCisgICAgcGVyZm9y
bUdldEJ5SURIZWxwZXIoT3BHZXRCeUlkLCBtX21vZGVNZXRhZGF0YSwgbV9wcm9maWxlLCAub3BH
ZXRCeUlkU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHJldHVybiwKKyAgICAgICAgbWFjcm8gKGNlbGxB
bmRJbmRleGluZ1R5cGUsIG1ldGFkYXRhLCBzY3JhdGNoMSwgc2NyYXRjaDIpCisgICAgICAgICAg
ICBhcnJheVByb2ZpbGUoT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUsIGNlbGxB
bmRJbmRleGluZ1R5cGUsIG1ldGFkYXRhLCBzY3JhdGNoMSkKKyAgICAgICAgZW5kKQogCiAub3BH
ZXRCeUlkU2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9nZXRfYnlfaWQp
CkBAIC0zMDAyLDcgKzI5OTcsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX29w
ZW4sIE9wCiAKICAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX2l0ZXJhdG9yLCB0MykKICAgICBidHFu
eiB0Mywgbm90Q2VsbE1hc2ssIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3cKLSAgICBw
ZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yT3BlbiwgbV9tb2RlTWV0YWRhdGEsIG1fbmV4
dFByb2ZpbGUsIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3csIHNpemUsIG1ldGFkYXRh
LCBzdG9yZU5leHRBbmREaXNwYXRjaCkKKyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJh
dG9yT3BlbiwgbV9tb2RlTWV0YWRhdGEsIG1fbmV4dFByb2ZpbGUsIC5pdGVyYXRvck9wZW5HZW5l
cmljR2V0TmV4dFNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZU5leHRBbmREaXNwYXRjaCwgbWFj
cm8oYSwgYiwgYywgZCkgZW5kKQogCiAuaXRlcmF0b3JPcGVuR2VuZXJpY0dldE5leHRTbG93Ogog
ICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fZ2V0X25leHQp
CkBAIC0zMDYxLDcgKzMwNTYsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX25l
eHQsIE9wCiAKICAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX3ZhbHVlLCB0MykKICAgICBidHFueiB0
Mywgbm90Q2VsbE1hc2ssIC5nZXREb25lU2xvdwotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9w
SXRlcmF0b3JOZXh0LCBtX2RvbmVNb2RlTWV0YWRhdGEsIG1fZG9uZVByb2ZpbGUsIC5nZXREb25l
U2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlRG9uZUFuZEptcFRvR2V0VmFsdWUpCisgICAgcGVy
Zm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck5leHQsIG1fZG9uZU1vZGVNZXRhZGF0YSwgbV9k
b25lUHJvZmlsZSwgLmdldERvbmVTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVEb25lQW5kSm1w
VG9HZXRWYWx1ZSwgbWFjcm8oYSwgYiwgYywgZCkgZW5kKQogCiAuZ2V0RG9uZVNsb3c6CiAgICAg
Y2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9nZXRfZG9uZSkKQEAg
LTMwODYsNyArMzA4MSw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3JfbmV4dCwg
T3AKICAgICAjIFJlbG9hZCB0aGUgbmV4dCByZXN1bHQgdG1wIHNpbmNlIHRoZSBnZXRfYnlfaWQg
YWJvdmUgbWF5IGhhdmUgY2xvYmJlcmVkIHQzLgogICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fdmFs
dWUsIHQzKQogICAgICMgV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0aGUgaXRlcmF0b3IgcmVz
dWx0IGlzIGEgY2VsbCBoZXJlIHNpbmNlIHdlIHdpbGwgaGF2ZSB0aHJvd24gYW4gZXJyb3IgYmVm
b3JlLgotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JOZXh0LCBtX3ZhbHVlTW9k
ZU1ldGFkYXRhLCBtX3ZhbHVlUHJvZmlsZSwgLmdldFZhbHVlU2xvdywgc2l6ZSwgbWV0YWRhdGEs
IHN0b3JlVmFsdWVBbmREaXNwYXRjaCkKKyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJh
dG9yTmV4dCwgbV92YWx1ZU1vZGVNZXRhZGF0YSwgbV92YWx1ZVByb2ZpbGUsIC5nZXRWYWx1ZVNs
b3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZVZhbHVlQW5kRGlzcGF0Y2gsIG1hY3JvKGEsIGIsIGMs
IGQpIGVuZCkKIAogLmdldFZhbHVlU2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3df
cGF0aF9pdGVyYXRvcl9uZXh0X2dldF92YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQkod29ya2luZyBjb3B5KQpAQCAtMTQyMCw3ICsxNDIwLDggQEAgZW5kCiAKIG1hY3JvIGNoZWNr
U3dpdGNoVG9KSVQoaW5jcmVtZW50LCBhY3Rpb24pCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0s
IHQwCi0gICAgYmFkZGlzIGluY3JlbWVudCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50
ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQor
ICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyW3QwXSwgdDAKKyAgICBi
YWRkaXMgaW5jcmVtZW50LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0s
IC5jb250aW51ZQogICAgIGFjdGlvbigpCiAgICAgLmNvbnRpbnVlOgogZW5kCkBAIC0xNTAzLDcg
KzE1MDQsOCBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAg
Y29kZUJsb2NrR2V0dGVyKHQxKQogICAgIGNvZGVCbG9ja1NldHRlcih0MSkKICAgICBpZiBub3Qg
KENfTE9PUCBvciBDX0xPT1BfV0lOKQotICAgICAgICBiYWRkaXMgNSwgQ29kZUJsb2NrOjptX2xs
aW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0
MV0sIC5jb250aW51ZQorICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291
bnRlclt0MV0sIHQwCisgICAgICAgIGJhZGRpcyA1LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6
Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAg
ICAgIG1vdmUgY2ZyLCBhMAogICAgICAgICAgICAgbW92ZSBQQywgYTEKQEAgLTE2MTcsMTQgKzE2
MTksMTQgQEAgbWFjcm8gZnVuY3Rpb25Jbml0aWFsaXphdGlvbihwcm9maWxlQXJnUwogICAgICMg
b3B0aW1hbCB3YXkgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIG1vcmUgdGhhbiBmaXZlIHJl
Z2lzdGVycyBhdmFpbGFibGUKICAgICAjIGZvciBhcmJpdHJhcnkgdXNlIGluIHRoZSBpbnRlcnBy
ZXRlci4KICAgICBsb2FkaSBDb2RlQmxvY2s6Om1fbnVtUGFyYW1ldGVyc1t0MV0sIHQwCi0gICAg
YWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQwICMgVXNlIGFkZGkgYmVjYXVzZSB0aGF0J3Mgd2hhdCBo
YXMgdGhlIHBlZXBob2xlCisgICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQwCiAgICAgYXNzZXJ0
KG1hY3JvIChvaykgYnBndGVxIHQwLCAwLCBvayBlbmQpCiAgICAgYnRweiB0MCwgLmFyZ3VtZW50
UHJvZmlsZURvbmUKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVz
ICsgRml4ZWRWZWN0b3I6Om1fc3RvcmFnZSArIFJlZkNvdW50ZWRBcnJheTo6bV9kYXRhW3QxXSwg
dDMKICAgICBidHB6IHQzLCAuYXJndW1lbnRQcm9maWxlRG9uZSAjIFdoZW4gd2UgY2FuJ3QgSklU
LCB3ZSBkb24ndCBhbGxvY2F0ZSBhbnkgYXJndW1lbnQgdmFsdWUgcHJvZmlsZXMuCiAgICAgbXVs
cCBzaXplb2YgVmFsdWVQcm9maWxlLCB0MCwgdDIgIyBBYWFhYWhoaGghIE5lZWQgc3RyZW5ndGgg
cmVkdWN0aW9uIQogICAgIGxzaGlmdHAgMywgdDAgIyBvZmZzZXQgb2YgbGFzdCBKU1ZhbHVlIGFy
Z3VtZW50cyBvbiB0aGUgc3RhY2suCi0gICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBv
ZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gQ29kZUJsb2NrOjptX2FyZ3VtZW50VmFsdWVQcm9maWxl
cy4KKyAgICBhZGRwIHQyLCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJh
eSBpbiB0aGUgdmFsdWUgcHJvZmlsZSBhcnJheS4KIC5hcmd1bWVudFByb2ZpbGVMb29wOgogICAg
IGlmIEpTVkFMVUU2NAogICAgICAgICBsb2FkcSBUaGlzQXJndW1lbnRPZmZzZXQgLSA4ICsgcHJv
ZmlsZUFyZ1NraXAgKiA4W2NmciwgdDBdLCB0MgpAQCAtMjU2Myw2ICsyNTY1LDE3IEBAIG1hY3Jv
IG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVv
cGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisg
ICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNy
byB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwg
dGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxl
W21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0
c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9X
SU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZh
bHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVh
YmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6
CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIp
OwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAg
IHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJs
ZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9j
a1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmlu
Z0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25z
dGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3
Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlk
ZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJs
ZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQor
dGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRp
ZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewog
ICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2Nr
LCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sq
IGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBD
b2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUq
IGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VE
KGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBD
YWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWRUeXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYWNoZWRUeXBlcy5o
IgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVz
LmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDYWNoZUVycm9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRo
X3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVu
YXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwg
SlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0
YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAq
bWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQp
OwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhl
Y3V0YWJsZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURh
dGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVE
YXRhKTsgfQogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJh
cmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsg
fQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2Nr
Rm9yQ2FsbCk7IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9j
a0ZvckNvbnN0cnVjdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFi
bGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBFeGVjdXRhYmxlQmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw2
IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihJbnQzMiwgZXZh
bFRocmVzaG9sZE11bHRpcGxpZXIsIDEwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2ln
bmVkLCBtYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0aCwgMjU2LCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICBcCi0gICAgdihCb29sLCByYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVu
Q2hlY2twb2ludHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMyLCBtYXhp
bXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yQmFzZWxpbmUsIDEwMDAsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3
ZWVuQ2hlY2twb2ludHNGb3JVcHBlclRpZXJzLCA1MDAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgXApAQCAtNTMyLDYgKzUzMSw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5
KCk7CiAgICAgdihCb29sLCB1c2VEYXRhSUMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KEJvb2wsIHVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDU2hhcmluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAorICAgIHYoQm9vbCwgdXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZywgdHJ1ZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgXAogICAgIC8qIEZlYXR1cmUgRmxhZ3MgKi9cCiAgICAgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJs
ZS5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsOSArMzk2LDExIEBA
IHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGkKICAgICBpZiAoT3B0aW9u
czo6dmFsaWRhdGVCeXRlY29kZSgpKQogICAgICAgICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7CiAK
LSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKKyAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklU
Q29kZT4gYmFzZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5s
aW5rZWRCYXNlbGluZUNvZGUpIHsKKyAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtl
ZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9IGVsc2Ug
aWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpIHsKICAgICAgICAgc2V0dXBMTEludChjb2RlQmxvY2sp
OwotICAgIGVsc2UKKyAgICB9IGVsc2UKICAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7
CiAKICAgICBpbnN0YWxsQ29kZSh2bSwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmNvZGVUeXBlKCks
IGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291
bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IG9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21M
TEludFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAg
ICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRl
cldhcm1VcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9w
dGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1p
emVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25U
aHJlc2hvbGRSZWFjaGVkKCkKQEAgLTY1LDkgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0
aW1pemVTb29uKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1Vw
VG9CQlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRG
b3JCQlFPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hv
bGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29uKCkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0
aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlv
bnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICBzdHJ1Y3Qg
T1NSRW50cnlEYXRhIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVy
VXBDb3VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVRpZXJVcENvdW50LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBUaWVyVXBDb3VudDo6VGll
clVwQ291bnQoKQogewotICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JP
TUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgIHNldE5ld1RocmVzaG9sZChP
cHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogfQogCiBUaWVy
VXBDb3VudDo6flRpZXJVcENvdW50KCkgPSBkZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAo
dWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgYWZ0ZXIg
d2FybS11cC4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZv
ck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVz
aG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAg
IH0KIAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAt
OTAsMTQgKzkwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24o
dWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgbmV4dCBp
bnZvY2F0aW9uLiIpOwotICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCwgbnVsbHB0cik7CisgICAg
ICAgIHNldE5ld1RocmVzaG9sZCgwKTsKICAgICB9CiAKICAgICB2b2lkIG9wdGltaXplU29vbih1
aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBzb29uLiIp
OwogICAgICAgICAvLyBGSVhNRTogTmVlZCBhZGp1c3RtZW50IG9uY2Ugd2UgZ2V0IG1vcmUgaW5m
b3JtYXRpb24gYWJvdXQgd2FzbSBmdW5jdGlvbnMuCi0gICAgICAgIHNldE5ld1RocmVzaG9sZChP
cHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAg
IHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7
CiAgICAgfQogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGls
YXRpb25SZXN1bHQodWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25SZXN1bHQgcmVz
dWx0KQpJbmRleDogU291cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvQmFnLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG90aGVyLm1f
aGVhZCA9IG51bGxwdHI7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBC
YWcmIG9wZXJhdG9yPShCYWc8VCwgVT4mJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh1bndy
YXBwZWRIZWFkKCkgPT0gb3RoZXIudW53cmFwcGVkSGVhZCgpKQorICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworCisgICAgICAgIEJhZyBkZXN0cm95OworICAgICAgICBkZXN0cm95Lm1faGVhZCA9
IHVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgp
OworICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOworCisgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICB9CisKICAgICB+QmFnKCkKICAgICB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYWNr
ZWQuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL1dURi93dGYvUGFja2VkLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE4Niw3ICsxODYsMTAgQEAgcHVibGljOgogICAgIH0KIAogICAgIFQqIG9w
ZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgPSBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWVfdjxULCB2b2lkPj4+CiAgICAgVCYg
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisKICAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuICFnZXQoKTsgfQogCiAgICAgLy8gVGhpcyBjb252ZXJzaW9uIG9w
ZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhl
ciBpbnRlZ2VyIHR5cGVzLgpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCShyZXZp
c2lvbiAyODI2NzUpCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NzYsMTcgKzc3NiwxOCBAQCBlbmQKIAogIyBGSVhNRTogbmVlZCB0byBm
aXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODcwMyB0byBlbmFi
bGUgdGhpcyBvbiBMaW51eC9NSVBTLgogZGVmIHJ1bkJ5dGVjb2RlQ2FjaGVJbXBsKG9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucywgKmFkZGl0aW9uYWxFbnYpCi0gICAgaWYgKCRob3N0T1MgPT0g
ImRhcndpbiIpCi0gICAgICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1jYWNoZSIKLSAgICBl
bHNpZiAoJGhvc3RPUyA9PSAibGludXgiICYmICRhcmNoaXRlY3R1cmUgIT0gIm1pcHMiKQotICAg
ICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhYWFgiCi0gICAgZWxzZQotICAg
ICAgICBza2lwCi0gICAgICAgIHJldHVybgotICAgIGVuZAorICAgICMgT09QUworICAgICNpZiAo
JGhvc3RPUyA9PSAiZGFyd2luIikKKyAgICAjICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1j
YWNoZSIKKyAgICAjZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAkYXJjaGl0ZWN0dXJlICE9
ICJtaXBzIikKKyAgICAjICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1jYWNoZVhYWFhYWCIK
KyAgICAjZWxzZQorICAgICMgICAgc2tpcAorICAgICMgICAgcmV0dXJuCisgICAgI2VuZAogCi0g
ICAgb3B0aW9ucyA9IEJBU0VfT1BUSU9OUyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucwotICAgIGFkZFJ1bkNv
bW1hbmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxwZXJzICsgImJ5dGVjb2Rl
LWNhY2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRlLnRvX3MsICp2bUNvbW1h
bmQsICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1w
bGVFcnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQorICAgICNvcHRpb25zID0gQkFTRV9PUFRJ
T05TICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMgKyAkdGVzdFNw
ZWNpZmljUmVxdWlyZWRPcHRpb25zCisgICAgI2FkZFJ1bkNvbW1hbmQoImJ5dGVjb2RlLWNhY2hl
IiwgWyJzaCIsIChwYXRoVG9IZWxwZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyLnNo
IikudG9fcywgZmlsZVRlbXBsYXRlLnRvX3MsICp2bUNvbW1hbmQsICRiZW5jaG1hcmsudG9fc10g
KyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRsZXIsICphZGRp
dGlvbmFsRW52KQogZW5kCiAKIGRlZiBydW5CeXRlY29kZUNhY2hlKCpvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438757</attachid>
            <date>2021-09-20 17:11:38 -0700</date>
            <delta_ts>2021-09-20 21:31:25 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>501169</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsMTAg
QEAgb3BfZ3JvdXAgOlByb2ZpbGVkQmluYXJ5T3AsCiAgICAgICAgIGxoczogVmlydHVhbFJlZ2lz
dGVyLAogICAgICAgICByaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZFR5cGVz
OiBPcGVyYW5kVHlwZXMsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxl
CisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
X2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTEsOSArMzUyLDEwIEBAIG9wX2dy
b3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgIF0sCiAgICAgYXJnczogewogICAgICAg
ICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg0LDkgKzM4NiwxMCBAQCBvcCA6bmVnYXRlLAog
ICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZDogVmlydHVhbFJl
Z2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLAorICAgICAgICBwcm9maWxl
SW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQ
cm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFy
aXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApAQCAtNDc4LDYgKzQ4MSw3IEBAIG9wIDpn
ZXRfYnlfaWQsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgbW9kZU1ldGFkYXRhOiBHZXRCeUlk
TW9kZU1ldGFkYXRhLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgIH0KIAogb3AgOmdldF9ieV9pZF93aXRoX3Ro
aXMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVj
a3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBAIFZhbHVlUHJvZmlsZSog
dmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJuICZtZXRhZGF0YS5tX3By
b2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK3VpbnRwdHJfdCB2YWx1
ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4KQoreworICAgIFVOVVNF
RF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9w
Y29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50
SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJu
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRvclByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZOZXh0UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRl
Y29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3JfbmV4dCkgeworICAgICAgICBzd2l0Y2ggKGNo
ZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4
dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZSgp
OworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXREb25lOiByZXR1cm4gQnl0ZWNvZGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkRvbmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck5leHQ6OmdldFZhbHVlOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlZhbHVl
UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfSBlbHNlIAorICAgICAgICByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZlByb2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVN
ZXRhZGF0YT4KIGJvb2wgaGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFk
YXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhW
TSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQot
ewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4o
bV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRN
YXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
dmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5r
SW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSAm
JiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwogdm9pZCBDYWxs
TGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVTcGVjaWZpY0Nh
bGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5OSwxMSBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9mcmFtZVNodWZm
bGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRVc2VzRGF0YUlD
cyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwotICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQ
Uik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BS
OwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9m
YXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZh
c3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJQyA9PSBVc2VE
YXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVn
aXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxM
aW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcgQEAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAgZ29Qb2x5bW9y
cGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVNYXNrKSk7CiAg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
aXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBw
cmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMubGluaygmaml0
KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBwcmVwLgogICAg
ICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQ
Uiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7
CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGNh
bGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
byk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICB1LmNv
ZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMu
bV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMubV9jYWxs
ZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxs
ZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEzICszNDQsMzQgQEAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQykK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIG51
bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBpZiAoaXNEYXRh
SUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVn
OjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRh
SUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0
YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKLSAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAgc2V0VXNlc0Rh
dGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywg
aml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlzVGFpbENhbGwo
KSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4g
ZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CiB9CiAKIHZv
aWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkK
QEAgLTM2OSwxNyArMzgxLDMyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0m
IHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIs
IG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQog
Cit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUoY2FsbExpbmtJ
bmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBK
U0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMo
Vk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgbV9jb2RlT3JpZ2lu
ID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBz
ZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAg
bV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247CisgICAg
aWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpIHsKKyAgICAgICAgLy8g
RklYTUU6IEl0J2QgYmUgbmljZSBpZiB0aGlzIGp1c3Qgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBz
dHJ1Y3R1cmUuCisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZy
YW1lU2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsK
KyAgICB9CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlD
Lm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxh
dGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpO
byk7CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAg
dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBq
aXQubGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0
UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQ
YXRoU3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwg
dGhpcyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1
bnNpZ25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2Vk
Q2FsbExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2Vu
dGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgewor
ICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2Fs
bCwKICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAg
ICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxp
emVEYXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsg
cmV0dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1
aW50OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRl
OgotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
QywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURf
UkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRo
SW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVi
bGljOgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQ
YXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVj
dEZhc3RQYXRoKENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWls
Q2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBz
dGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJv
b2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNl
RGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsy
NDksNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAot
ICAgIEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9z
bG93U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsK
ICAgICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZv
LCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJf
dCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlv
blR5cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9j
YXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxv
Y2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
bV9zbG93UGF0aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5h
bFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAK
QEAgLTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29k
ZU9yaQogICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3Qg
VW5saW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsg
Ly8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxs
eSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxU
eXBlOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlv
bjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZs
ZURhdGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsOCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlk
ZXIoKSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVD
b3VudGVyKCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9
CkBAIC0zMTgsNyArMzIwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgQwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIAogICAgIG9wdGltaXplQWZ0ZXJX
YXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOworICAgIC8vaml0QWZ0ZXJXYXJtVXAoKTsK
IAogICAgIGlmIChvdGhlci5tX3JhcmVEYXRhKSB7CiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZO
ZWNlc3NhcnkoKTsKQEAgLTM1OSw3ICszNjEsOSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYg
dm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlkZXIoKSk7CiAgICAg
c2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKLSAg
ICAKKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxpbnRF
eGVjdXRlQ291bnRlcigpOworCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7
CiB9CiAKQEAgLTM3MCwxMCArMzc0LDEzIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwg
U3RydWN0dXJlKiAKIC8vIHdlIGNhbid0IGdlbmVyYXRlIGR1cmluZyB1bmxpbmtlZCBieXRlY29k
ZSBnZW5lcmF0aW9uLiBUaGlzIHByb2Nlc3MgaXMgbm90IGFsbG93ZWQgdG8gZ2VuZXJhdGUgY29u
dHJvbAogLy8gZmxvdyBvciBpbnRyb2R1Y2UgbmV3IGxvY2Fscy4gVGhlIHJlYXNvbiBmb3IgdGhp
cyBpcyB3ZSByZWx5IG9uIGxpdmVuZXNzIGFuYWx5c2lzIHRvIGJlIHRoZSBzYW1lIGZvcgogLy8g
YWxsIHRoZSBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLiBXZSByZWx5IG9uIHRo
aXMgZmFjdCBieSBjYWNoaW5nIHRoZSBsaXZlbmVzcyBhbmFseXNpcwotLy8gaW5zaWRlIFVubGlu
a2VkQ29kZUJsb2NrLgorLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLiBBbHNvLCBCYXNlbGlu
ZSBKSVQgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtl
ZENvZGVCbG9jaywKKy8vIHNvIHRoZSBieXRlY29kZSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBiZXR3
ZWVuIENvZGVCbG9ja3Mgc2hhcmluZyBhbiBVbmxpbmtlZENvZGVCbG9jay4KIGJvb2wgQ29kZUJs
b2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAogICAgIEpTU2NvcGUq
IHNjb3BlKQogeworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsgLy8gV2UgbmVlZCB0byBz
ZXQgdXAgb3VyIHZhbHVlIHByb2ZpbGUgcG9pbnRlcnMuCisKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgZmluaXNoQ3JlYXRpb25Db21tb24odm0pOwogCkBAIC00NzEsNiArNDc4
LDE5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAg
YnJlYWs7IFwKICAgICB9CiAKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRD
b2RlLT5iaW5hcnlBcml0aFByb2ZpbGUoYnl0ZWNvZGUubV9wcm9maWxlSW5kZXgpOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorI2RlZmluZSBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklM
RShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURB
VEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2Vk
Q29kZS0+dW5hcnlBcml0aFByb2ZpbGUoYnl0ZWNvZGUubV9wcm9maWxlSW5kZXgpOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0
cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMsMTQgKzU1MywxNCBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQ
cm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTkso
T3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAg
IExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcElu
YykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BN
dWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAg
ICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktf
V0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5B
UllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2OSw3ICs3ODks
NyBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgLy8gcmVs
eSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRlZCB0
byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUgYWNj
dXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0ZXJXYXJt
VXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOworICAgIC8vaml0QWZ0ZXJXYXJtVXAoKTsKIAog
ICAgIC8vIElmIHRoZSBjb25jdXJyZW50IHRocmVhZCB3aWxsIHdhbnQgdGhlIGNvZGUgYmxvY2sn
cyBoYXNoLCB0aGVuIGNvbXB1dGUgaXQgaGVyZQogICAgIC8vIHN5bmNocm9ub3VzbHkuCkBAIC03
OTMsNiArODEzLDc3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbkNvbW1vbihWTSYK
ICAgICBtX293bmVyRWRnZS5zZXQodm0sIHRoaXMsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6
OmNyZWF0ZSh2bSwgdGhpcykpOwogfQogCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5r
ZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRK
SVRDb2RlKGppdENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYg
aml0Q29kZU1hcCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAg
SGFuZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAg
Ly8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVy
Lm5hdGl2ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdl
dCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAg
ICAgICAgYXV0byYgaml0RGF0YSA9IGVuc3VyZUpJVERhdGEobG9ja2VyKTsKKworICAgICAgICBS
RUxFQVNFX0FTU0VSVChqaXREYXRhLm1faml0Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CisgICAg
ICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29k
ZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0
byBlbnRyeSA9IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOworICAgICAgICAgICAgc3dp
dGNoIChlbnRyeS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6R2xvYmFsT2JqZWN0OgorICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBv
b2xbaV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAg
ICAgICAgICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8g
PSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRDYWxsTGlua0luZm8qPihlbnRyeS5wYXlsb2FkLmdldCgp
KTsKKyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEu
bV9jYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVj
b2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAvLyBPT1BTOiBkb24ndCBoYXJkY29kZSB0aGVz
ZSByZWdpc3RlcnMgbGlrZSB0aGlzLgorICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+aW5p
dGlhbGl6ZURhdGFJQyh2bSgpLCB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAs
IEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQ
b29sW2ldID0gY2FsbExpbmtJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvOiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5s
aW5rZWRTdHViSW5mbyA9ICpzdGF0aWNfY2FzdDxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKj4o
ZW50cnkucGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gaml0RGF0YS5tX3N0dWJJbmZvcy5hZGQodW5saW5rZWRTdHViSW5mby5hY2Nl
c3NUeXBlLCBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCkpOworICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8odGhpcywgdW5saW5rZWRTdHViSW5mbyk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5t
X2ppdENvbnN0YW50UG9vbFtpXSA9IHN0dWJJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1
bmN0aW9uRGVjbDogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgaml0
RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9uRGVjbChpbmRleCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAg
ICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25FeHBy
KGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAg
IGNhc2UgR2xvYmFsQ29kZToKKyAgICBjYXNlIE1vZHVsZUNvZGU6CisgICAgY2FzZSBFdmFsQ29k
ZToKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxy
ZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUg
Y2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KKyAgICAg
ICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCgp
KSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24odGhpcyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29k
ZSAmJiBPcHRpb25zOjp1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nKCkpCisgICAgICAgIHVubGlu
a2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUgPSBXVEZNb3ZlKGppdENvZGUp
OworfQorCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpA
QCAtODkyLDYgKzk4Myw3IEBAIFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFu
dFIKICAgICAgICAgc3dpdGNoIChyZXByZXNlbnRhdGlvbikgewogICAgICAgICBjYXNlIFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKICAgICAgICAgICAgIGNvbnN0
YW50ID0gZ2xvYmFsT2JqZWN0LT5saW5rVGltZUNvbnN0YW50KHN0YXRpY19jYXN0PExpbmtUaW1l
Q29uc3RhbnQ+KGNvbnN0YW50LmFzSW50MzJBc0FueUludCgpKSk7CisgICAgICAgICAgICBBU1NF
UlQoY29uc3RhbnQuaXNDZWxsKCkpOyAvLyBVbmxpbmtlZCBCYXNlbGluZSBKSVQgcmVxdWlyZXMg
dGhpcy4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjo6T3RoZXI6CiAgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJ
bnRlZ2VyOgpAQCAtMTUzNCwzOSArMTYyNiw0MCBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogCi0jaWYgRU5B
QkxFKEpJVCkKLSAgICBib29sIGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGln
aWJsZUZvckxMSW50RG93bmdyYWRlOwotICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRl
ID0gZmFsc2U7Ci0gICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhlY3V0aW5nLCBh
bmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAotICAgIC8vIHRv
IGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNh
dmUgSklUIG1lbW9yeS4KLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5r
ZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+
aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkgewotICAgICAg
ICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVu
dCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291
bnRlcikgewotICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKLSAgICAgICAgICAg
ICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsK
LQotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRD
b2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91
bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNb
aV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVj
dGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlv
bkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVj
dGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKLQotICAgICAgICAgICAgICAgICAg
ICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwotICAgICAgICAgICAgICAgICAg
ICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZv
cmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKLSAgICAgICAgICAgICAg
ICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50aW5nIGludG8g
dGhlIHZhcmlvdXMgKmluZm9zLgotICAgICAgICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9pc0VsaWdpYmxl
Rm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0jZW5kaWYKKy8vIE9PUFM6IHJlY29uY2lsZSB0aGlzCisvLyNpZiBFTkFCTEUoSklUKQor
Ly8gICAgYm9vbCBpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBtX2lzRWxpZ2libGVGb3JM
TEludERvd25ncmFkZTsKKy8vICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFs
c2U7CisvLyAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBleGVjdXRpbmcsIGFuZCBh
biBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0CisvLyAgICAvLyB0byBk
aXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFuZCByZWluc3RhbGwgTExJbnQgY29kZSB0byBzYXZl
IEpJVCBtZW1vcnkuCisvLyAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5r
ZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+
aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkgeworLy8gICAg
ICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXplZFJlcGxhY2Vt
ZW50KCkpIHsKKy8vICAgICAgICAgICAgaWYgKCFvcHRpbWl6ZWRDb2RlQmxvY2stPm1fb3NyRXhp
dENvdW50ZXIpIHsKKy8vICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUpIHsKKy8vICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGUgPSBudWxscHRyOworLy8g
ICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRyeXBvaW50KHRoaXMpOworLy8gICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnBy
ZXRlclRodW5rKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyBpKyspIHsK
Ky8vICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5s
aW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7CisvLyAg
ICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+
bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYg
aW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVyLnRhcmdldCku
cHRyKCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxp
bmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExM
SW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKKy8vICAgICAg
ICAgICAgICAgICAgICB9CisvLworLy8gICAgICAgICAgICAgICAgICAgIHVubGlua0luY29taW5n
Q2FsbHMoKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGNsZWFy
IHRoZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxpemVVbmNvbmRpdGlvbmFsbHkgYWxsIGNv
bXBpbGVyIHRocmVhZHMKKy8vICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQs
IG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUg
cGFyc2VyLCBhbmQgYnl0ZWNvZGUKKy8vICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXIgaXMg
dGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5mb3Mu
CisvLyAgICAgICAgICAgICAgICAgICAgcmVzZXRKSVREYXRhKCk7CisvLyAgICAgICAgICAgICAg
ICB9IGVsc2UKKy8vICAgICAgICAgICAgICAgICAgICBtX2lzRWxpZ2libGVGb3JMTEludERvd25n
cmFkZSA9IHRydWU7CisvLyAgICAgICAgICAgIH0KKy8vICAgICAgICB9CisvLyAgICB9CisvLwor
Ly8jZW5kaWYKICAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5
cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKQEAgLTE1OTQsNyAr
MTY4Nyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICAg
ICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6Ci0gICAgICAgICAgICBjb3VudCA9
IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOworICAgICAgICAgICAgY291bnQgPSBtX2xs
aW50RXhlY3V0ZUNvdW50ZXItPmNvdW50KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIGNvdW50ID0gbV9qaXRFeGVj
dXRlQ291bnRlci5jb3VudCgpOwpAQCAtMTY3NSwzMCArMTc2OCw2IEBAIFN0cnVjdHVyZVN0dWJJ
bmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmYKICAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2Nr
ZXIpLm1fc3R1YkluZm9zLmFkZChhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKTsKIH0KIAotSklUQWRk
SUMqIENvZGVCbG9jazo6YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVy
biBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0K
LUpJVE11bElDKiBDb2RlQmxvY2s6OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAg
ICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUp
OwotfQotCi1KSVRTdWJJQyogQ29kZUJsb2NrOjphZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N1YklDcy5hZGQoYXJpdGhQ
cm9maWxlKTsKLX0KLQotSklUTmVnSUMqIENvZGVCbG9jazo6YWRkSklUTmVnSUMoVW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX25lZ0lDcy5hZGQo
YXJpdGhQcm9maWxlKTsKLX0KLQogU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6ZmluZFN0
dWJJbmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CkBAIC0zMTMzLDcgKzMyMDIsNyBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6
OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUoSklUKQogICAgIGNhc2UgSklUVHlw
ZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZv
cih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMt
PnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKQEAgLTMzNDksMTMgKzM0MTgsMTMgQEAgQmluYXJ5QXJpdGhQcm9maWxlKiBD
b2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAg
ICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEo
dGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BBZGQ+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9tdWw6Ci0gICAgICAgIHJl
dHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAg
ICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcFN1Yj4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcFN1Yj4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RpdjoKLSAgICAg
ICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzM2NywxMSAr
MzQzNiwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjp1bmFyeUFyaXRoCiB7CiAg
ICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgICAg
ICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BJ
bmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+
YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9k
ZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJp
dGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGVjPigpLm1ldGFkYXRhKHRoaXMp
Lm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTM0NzIsMjIgKzM1NDEsMTYgQEAgdm9pZCBDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3Vu
ZGFyaQogfQogCiAjaWYgRU5BQkxFKEpJVCkKLXZvaWQgQ29kZUJsb2NrOjpzZXRQQ1RvQ29kZU9y
aWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYgbWFwKSAKLXsgCi0g
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIGVuc3VyZUpJVERhdGEo
bG9ja2VyKS5tX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtYXApOwotfQotCiBzdGQ6Om9w
dGlvbmFsPENvZGVPcmlnaW4+IENvZGVCbG9jazo6ZmluZFBDKHZvaWQqIHBjKQogeworICAgIGlm
IChhdXRvKiBwY1RvQ29kZU9yaWdpbk1hcCA9IG1faml0Q29kZS0+cGNUb0NvZGVPcmlnaW5NYXAo
KSkgeworICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0g
cGNUb0NvZGVPcmlnaW5NYXAtPmZpbmRQQyhwYykpCisgICAgICAgICAgICByZXR1cm4gY29kZU9y
aWdpbjsKKyAgICB9CisKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKICAgICAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsK
LSAgICAgICAgICAgIGlmIChqaXREYXRhLT5tX3BjVG9Db2RlT3JpZ2luTWFwKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IGppdERh
dGEtPm1fcGNUb0NvZGVPcmlnaW5NYXAtPmZpbmRQQyhwYykpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBjb2RlT3JpZ2luOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBmb3IgKFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1YkluZm9zKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb250YWluc1BDKHBjKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4oc3R1YkluZm8tPmNvZGVPcmln
aW4pOwpAQCAtMzUyMSwyOCArMzU4NCwxOSBAQCBzdGQ6Om9wdGlvbmFsPEJ5dGVjb2RlSW5kZXg+
IENvZGVCbG9jazo6CiAgICAgcmV0dXJuIGJ5dGVjb2RlSW5kZXg7CiB9CiAKLWludDMyX3QgQ29k
ZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpCi17Ci0gICAgc3dpdGNo
ICh1bmxpbmtlZENvZGVCbG9jaygpLT5kaWRPcHRpbWl6ZSgpKSB7Ci0gICAgY2FzZSBUcmlTdGF0
ZTo6SW5kZXRlcm1pbmF0ZToKLSAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKLSAgICBjYXNlIFRy
aVN0YXRlOjpGYWxzZToKLSAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7Ci0gICAgY2FzZSBU
cmlTdGF0ZTo6VHJ1ZToKLSAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7Ci0gICAgfQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB0aHJlc2hvbGQ7Ci19CisvL3ZvaWQg
Q29kZUJsb2NrOjpqaXRBZnRlcldhcm1VcCgpCisvL3sKKy8vICAgIG1fbGxpbnRFeGVjdXRlQ291
bnRlci0+c2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRG
b3JKSVRBZnRlcldhcm1VcCgpKSwgdGhpcyk7CisvL30KIAotdm9pZCBDb2RlQmxvY2s6OmppdEFm
dGVyV2FybVVwKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKIHsKLSAgICBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJl
c2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3Vu
dGVyLT5zZXROZXdUaHJlc2hvbGQodW5saW5rZWRDb2RlQmxvY2soKS0+dGhyZXNob2xkRm9ySklU
KE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOwogfQogCi12b2lkIENvZGVC
bG9jazo6aml0U29vbigpCit2b2lkIENvZGVCbG9jazo6aml0TmV4dEludm9jYXRpb24oKQogewot
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklU
KE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOworICAgIG1fbGxpbnRFeGVj
dXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwogfQogCiBib29sIENvZGVCbG9j
azo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdApAQCAtMzU4OCwyOCArMzY0
Miw4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRvdWJsZSBudW1T
dWJzID0gMC4wOwogICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKLSAgICBhdXRvIGNv
dW50SUNzID0gWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICBpZiAoYXV0byog
aml0RGF0YSA9IGNvZGVCbG9jay0+bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3Ig
KEpJVEFkZElDKiBhZGRJQyA6IGppdERhdGEtPm1fYWRkSUNzKSB7Ci0gICAgICAgICAgICAgICAg
bnVtQWRkcysrOwotICAgICAgICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29kZVNp
emUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMg
OiBqaXREYXRhLT5tX211bElDcykgewotICAgICAgICAgICAgICAgIG51bU11bHMrKzsKLSAgICAg
ICAgICAgICAgICB0b3RhbE11bFNpemUgKz0gbXVsSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lDIDogaml0RGF0YS0+bV9uZWdJ
Q3MpIHsKLSAgICAgICAgICAgICAgICBudW1OZWdzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxO
ZWdTaXplICs9IG5lZ0lDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBmb3IgKEpJVFN1YklDKiBzdWJJQyA6IGppdERhdGEtPm1fc3ViSUNzKSB7Ci0gICAgICAgICAg
ICAgICAgbnVtU3VicysrOwotICAgICAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJQy0+
Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8gY291bnRJQ3Mg
PSBbJl0gKENvZGVCbG9jayopIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmUtaW1w
bGVtZW50IHRoaXMgdXNpbmcgSklUQ29kZS4KICAgICB9OwogICAgIGhlYXAoKS0+Zm9yRWFjaENv
ZGVCbG9jayhjb3VudElDcyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCBj
bGFzcyBKU01vZHVsZUVudmlyb25tZW50OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
Y2xhc3MgTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OwogY2xh
c3MgTWV0YWRhdGFUYWJsZTsKLWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0
ZXJBdE9mZnNldExpc3Q7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5l
SklUQ29kZTsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJs
b2NrUmFyZURhdGEpOwogCkBAIC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRh
VGFibGUqIG1ldGFkYXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9
CiAKICAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJh
bWV0ZXJzOyB9Citwcml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBu
ZXdWYWx1ZSk7CitwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tp
cCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3
LDcgKzE2OSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1
cm4gbV9udW1WYXJzOyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1f
dW5saW5rZWRDb2RlLT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0K
IAotICAgIHVuc2lnbmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVt
UGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJz
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsg
fQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2
IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29u
c3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBi
b29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBG
SVhNRTogQ29uc2lkZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1
cm4gdHJ1ZSBpZiBgcmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0g
ICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0
YW50KHJlZykuaXNDZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBy
ZWcpCiAgICAgewogICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGlu
dD4obV9udW1WYXJzKTsKQEAgLTI2OCwyMyArMjU5LDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUo
SklUKQogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
CiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAgICAgIEJh
ZzxKSVRBZGRJQz4gbV9hZGRJQ3M7Ci0gICAgICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Ci0g
ICAgICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7Ci0gICAgICAgIEJhZzxKSVRTdWJJQz4gbV9z
dWJJQ3M7CiAgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAg
ICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxMaW5rZWRM
aXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhp
Y0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAgICAgIEZpeGVkVmVj
dG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBGaXhlZFZl
Y3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwog
ICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAg
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklU
Q29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0
Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3Rh
bnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQ
b29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2Rl
KFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZ
KG1faml0RGF0YSkpCkBAIC0yOTMsMjIgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgSklU
RGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAKLSAg
ICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVs
SUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRK
SVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhC
aW5hcnlBcml0aFByb2ZpbGUqKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3Is
IHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRv
ciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVEFkZElDKiBhZGRNYXRo
SUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9m
aWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5l
cmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0
aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9Ci0KLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVl
Pjo6dHlwZT4KLSAgICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9m
aWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6
OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAg
SklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJu
IGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJ
VERhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdERhdGEpOyB9
CiAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSwgQ29kZU9y
aWdpbik7CiAKQEAgLTMyMiwxOCArMjk2LDggQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9y
IGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4K
ICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNv
ZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRD
b2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShq
aXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0g
ICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAg
IHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBj
b25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKLSAgICB2b2lkIHNldFBDVG9Db2RlT3Jp
Z2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpv
cHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwogCiAgICAgdm9pZCBzZXRDYWxs
ZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0KTsKQEAgLTQ3MiwxMCArNDM2LDEyIEBAIHB1Ymxp
YzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0K
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAg
ICAgIHJldHVybiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCk7CisgICAgICAgIAogICAg
IH0KIAogICAgIFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlRm9yQXJndW1lbnQodW5zaWduZWQg
YXJndW1lbnRJbmRleCkKQEAgLTU3MSw2ICs1MzcsNyBAQCBwdWJsaWM6CiAgICAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQog
ICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1f
dW5saW5rZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihyZWcpOyB9CiAg
ICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5r
ZWRDb2RlLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihpbmRleCk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9jb25zdGFudFJlZ2lzdGVycykgKyBkZWNsdHlw
ZShtX2NvbnN0YW50UmVnaXN0ZXJzKTo6ZGF0YU1lbW9yeU9mZnNldCgpOyB9CiAKICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rp
b25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkg
eyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNTk1LDIyICs1NjIsMjIgQEAg
cHVibGljOgogICAgIC8vIEp1bXAgVGFibGVzCiAKICNpZiBFTkFCTEUoSklUKQotICAgIFNpbXBs
ZUp1bXBUYWJsZSYgc3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorICAgIFNpbXBsZUp1
bXBUYWJsZSYgYmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIFN0
cmluZ0p1bXBUYWJsZSYgYmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5k
ZXgpOworICAgIHZvaWQqIGJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkKICAgICB7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7Ci0gICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1f
c3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9q
aXREYXRhICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJl
dHVybiBtX2ppdERhdGEtPm1faml0Q29uc3RhbnRQb29sLmRhdGEoKTsKICAgICB9CiAjZW5kaWYK
ICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJl
dHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsg
fQogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBU
YWJsZShpbnQgdGFibGVJbmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIFN0cmlu
Z0p1bXBUYWJsZSYgc3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQotICAgIHsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAgICAgcmV0dXJuIG1faml0
RGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwotICAgIH0KKyNpZiBF
TkFCTEUoREZHX0pJVCkKKyAgICBTdHJpbmdKdW1wVGFibGUmIGRmZ1N0cmluZ1N3aXRjaEp1bXBU
YWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBkZmdTd2l0Y2hKdW1w
VGFibGUoaW50IHRhYmxlSW5kZXgpOwogI2VuZGlmCisKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29k
ZS0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0
IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShp
bnQgdGFibGVJbmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOyB9CiAKQEAgLTYzMiwyMSArNTk5LDIwIEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgY2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFu
ZFNldCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y2hlY2tJ
ZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CiAgICAgfQogCiAgICAgdm9pZCBkb250SklU
QW55dGltZVNvb24oKQogICAgIHsKLSAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVy
SW5kZWZpbml0ZWx5KCk7CisgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+ZGVmZXJJbmRl
ZmluaXRlbHkoKTsKICAgICB9CiAKLSAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90
IHRocmVzaG9sZCk7Ci0gICAgdm9pZCBqaXRBZnRlcldhcm1VcCgpOwogICAgIHZvaWQgaml0U29v
bigpOworICAgIHZvaWQgaml0TmV4dEludm9jYXRpb24oKTsKIAogICAgIGNvbnN0IEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgICAgICByZXR1cm4gKm1fbGxp
bnRFeGVjdXRlQ291bnRlcjsKICAgICB9CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8c3RkOjp0dXBs
ZTxTdHJ1Y3R1cmVJRCwgdW5zaWduZWQ+LCBGaXhlZFZlY3RvcjxMTEludFByb3RvdHlwZUxvYWRB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+PiBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwOwpAQCAt
Nzk3LDYgKzc2Myw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygp
IGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2Vy
UmVxdWVzdHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBh
ZGRCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJy
ZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpCkBAIC04MzgsNiArODA1LDcgQEAgcHVi
bGljOgogICAgIG11dGFibGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQg
d2FudHMgdG8gc3RvcmUgdG8gaXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3Vs
ZEFsd2F5c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25l
ZCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAg
LTkwNywxMSArODc1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZN
ZXRhZGF0YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRh
ZGF0YSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9p
bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5n
RWFybHlSZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWly
ZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJu
ICFtX3VubGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBs
b29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5s
aW5rZWRDb2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9
CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKQEAg
LTEwMTAsNyArOTc0LDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1f
bGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2Rl
OwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+
IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAv
LyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0
aGUgcHJvZmlsZWQgY29kZSBibG9jawpAQCAtMTAyOSw3ICs5OTUsNyBAQCBwcml2YXRlOgogCiAg
ICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAgICBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9OwogCiAg
ICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAgICAgdWlu
dDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsOCArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCYXNl
bGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRN
ZXRhZGF0YVRhYmxlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkgKzQyLDcg
QEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlmIChtX21l
dGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9y
RWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9wcm9maWxl
LCBmYWxzZSk7IH0pOwotCiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJ
TEUoVklTSVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8
T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1Nyw2IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwzOCBAQCB2
b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQogCisjaWYg
RU5BQkxFKEpJVCkKK0FMV0FZU19JTkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJsb2NrOjpq
aXRDb2RlTWFwKCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2Rl
LmdldCgpKS0+bV9qaXRDb2RlTWFwOworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJs
ZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sK
KyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBU
YWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgp
KS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxv
Y2s6OmRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0
VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6
SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBl
KCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRD
b2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3
MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3Jh
cChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQogICAgIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAg
Ym9vbCBFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9j
ayA/IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQpOworICAg
IHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAgICBtX2Nv
dW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRo
aXMsIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxz
ZS4KICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwog
ICAgIGJvb2wgaGFzQ3Jvc3NlZFRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlciA+
PSAwOyB9Ci0gICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVC
bG9jayopOworICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2Rl
QmxvY2sqID0gbnVsbHB0cik7CiAgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwogICAgIGRv
dWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENv
dW50KSArIG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpA
QCAtODYsMTMgKzg2LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVCB0aHJlc2hvbGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChU
IHRocmVzaG9sZCkKICAgICB7Ci0gICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwotICAgICAg
ICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
KCkgJiYgZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2Jq
ZWN0LT53ZWFrUmFuZG9tSW50ZWdlcigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5D
aGVja3BvaW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBt
YXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAgIGludDMy
X3QgbWF4VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50
cygpOwogICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAgICAgICAg
dGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xkOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEu
aAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBH
ZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1v
ZGVNZXRhZGF0YVVuc2V0KSA9PSAxMik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJy
YXlMZW5ndGggeworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBh
cnJheVByb2ZpbGUpOyB9CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07CiBzdGF0
aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsK
QEAgLTg4LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdl
dEJ5SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7
IC8vIFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFk
YXRhRGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5z
ZXRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1v
ZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1
cy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCBHZXRC
eVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAgICAgIHJldHVybiBHZXRC
eVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAgICAgICAgCiAgICAgY2FzZSBDYWNoZVR5cGU6Okdl
dEJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPm1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShwcm9maWxlZEJsb2Nr
LT52bSgpKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1w
dXJlUHJvcGVydHkoKSkKICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dW
ZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
IGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRl
Rm9yU3R1YkluZgogICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAog
ICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1Yklu
Zm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2
LDExICsxNzYsMTYgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlBy
b3BlcnR5QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVNlbGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAg
ICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBk
by4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsK
ICAgICAKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0yMzMsMjMgKzIz
OCwzMSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3RlCiAgICAgcmV0
dXJuIGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJlZzsKIH0KIAot
Ym9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5l
QWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQog
ewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0KIAot
Ym9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5m
by5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFT
U0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkpOwor
ICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHVi
SW5mbywgb2Zmc2V0KSk7CisKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAg
ICAgICAvLyBUaGVzZSBzbG90cyBnZXQgZmlsbGVkIGluLiBOb3RoaW5nIGVsc2UgdG8gZG8uCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKQEAg
LTI3OSwyMiArMjkyLDI1IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0
eVIKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6
OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0Fy
cmF5KiBhcnJheSkKK2Jvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkq
IGFycmF5KQogewogICAgIEFTU0VSVChhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsK
IAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghaGFzRnJlZVJlZ2lz
dGVyKHN0dWJJbmZvKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFoYXNB
bnlBcnJheVN0b3JhZ2UoYXJyYXktPmluZGV4aW5nVHlwZSgpKSAmJiBhcnJheS0+aW5kZXhpbmdU
eXBlKCkgIT0gQXJyYXlDbGFzczsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJy
YXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKK2Jv
b2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQogewotICAgIEFT
U0VSVChpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBhcnJheSkpOworICAgIEFTU0VS
VF9VTlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1
YkluZm8sIGFycmF5KSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmll
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE5LDE3ICszMzUsMjAgQEAgYm9vbCBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoUwogICAgIHJldHVybiBsaW5rZWRDb2RlSW5s
aW5lOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxl
U3RyaW5nTGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIGhh
c0ZyZWVSZWdpc3RlcihzdHViSW5mbyk7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitib29sIElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKLSAgICBBU1NFUlQoaXNDYWNoZWFibGVTdHJpbmdMZW5n
dGgoc3R1YkluZm8pKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNoZWFibGVT
dHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbykpOwogCiAgICAgaWYgKCFzdHViSW5mby5o
YXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM2MywxMyAr
MzgyLDE4IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aCgKIH0KIAog
Ci1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2Jvb2wgSW5saW5lQWNjZXNzOjpn
ZW5lcmF0ZVNlbGZJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAg
ICAgIC8vIFRoZXNlIHNsb3RzIGdldCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5mby5i
YXNlR1BSOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAK
QEAgLTQwNiw3ICs0MzAsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcElu
QWNjCiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgLy8gSWYgaXQg
aXMgbm90IEdldEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQgKGUuZy4g
R2V0QnlWYWwpLgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGlyZWN0IGp1
bXAsIGFuZCBvbmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2RlUHRyLgot
ICAgICAgICBpZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAgICAgIGlm
IChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBzdHViSW5m
by5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29kZVB0ciBp
cyBwb2ludGluZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMgbWVhbnMg
dGhhdCBJbmxpbmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAgICAgIC8v
IFdlIHJld3JpdGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNvZGUgb25j
ZSwgYW5kIGNvbnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgogICAgICAg
ICAgICAgaWYgKHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09IHN0dWJJ
bmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CkBAIC00MjEs
NyArNDQ1LDkgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAg
ICAgICAgICAgICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5raW5nIHN0dWIgY2FsbCIpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gdGFy
Z2V0OworICAgICAgICBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOyAv
LyBDbGVhciBvdXQgdGhlIGlubGluZSBhY2Nlc3MgY29kZS4KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtNDM0LDggKzQ2MCwxNCBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjCiAgICAgfSksICJJbmxpbmVBY2Nlc3M6IGxpbmtpbmcgY29uc3RhbnQganVtcCIp
OwogfQogCi12b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQordm9pZCBJbmxpbmVBY2Nlc3M6OnJl
c2V0U3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8pCiB7CisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkgJiYgY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgc3R1
YkluZm8ubV9jb2RlUHRyID0gc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgICAg
ICBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOyAvLyBDbGVhciBvdXQg
dGhlIGlubGluZSBhY2Nlc3MgY29kZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEND
YWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKHN0dWJJbmZvLnN0YXJ0LnJldGFnZ2VkPEpTSW50
ZXJuYWxQdHJUYWc+KCksIHNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPihbJl0oQ0Nh
bGxIZWxwZXJzJiBqaXQpIHsKICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhIG5vcCBzbGVkIGhl
cmUgYmVjYXVzZSBub2JvZHkgc2hvdWxkIGJlIGp1bXBpbmcgaW50byB0aGUgbWlkZGxlIG9mIGFu
IElDLgogICAgICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC05OSwxNCArOTksMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RkOjpt
YXgoc2l6ZSwgc2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBi
b29sIGdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0
dXJlKiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGNhbkdlbmVyYXRlU2VsZlBy
b3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBz
dGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8m
LCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFi
bGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMg
Ym9vbCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIHN0
YXRpYyBib29sIGdlbmVyYXRlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5
Kik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1Yklu
Zm8mLCBTdHJ1Y3R1cmUqKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVN0cmluZ0xlbmd0aChT
dHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5
QWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVy
dHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFj
ZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBz
dGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0
dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJv
b2wgaXNDYWNoZWFibGVBcnJheUxlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYs
IEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChDb2Rl
QmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlQXJy
YXlMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAg
c3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1
YkluZm8mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVN0cmluZ0xlbmd0
aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogCiAgICAgc3RhdGljIHZvaWQgcmV3
aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4p
OwogICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
Pik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1l
dGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0
ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDYgKzQwLDcgQEAgT1ZFUkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xB
UwogCiBzdHJ1Y3QgSXRlcmF0aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90IHNlZW5Nb2Rl
cyB7IDAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVzKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1vZGVzKTsgfSAK
ICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9PSBzaXplb2Yo
SXRlcmF0aW9uTW9kZSkpOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBBcnJheVByb2Zp
bGUgbV9hcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJv
ZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9hcnJh
eVByb2ZpbGUpOyB9CiAKIHByaXZhdGU6CiAgICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0U2Vl
bkNhbGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNiArNjUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgZnVuYygqbWV0
YWRhdGEpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAgIEFMV0FZU19J
TkxJTkUgc2l6ZV90IG51bUVudHJpZXMoKQorICAgIHsKKyAgICAgICAgYXV0byogc3RhcnQgPSBi
aXR3aXNlX2Nhc3Q8dHlwZW5hbWUgT3A6Ok1ldGFkYXRhKj4oZ2V0KE9wOjpvcGNvZGVJRCkpOwor
ICAgICAgICBhdXRvKiBlbmQgPSBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUgT3A6Ok1ldGFkYXRhKj4o
Z2V0SW1wbChPcDo6b3Bjb2RlSUQgKyAxKSk7CisgICAgICAgIHJldHVybiBlbmQgLSBzdGFydDsK
KyAgICB9CisKICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKTsKIAogICAgIHZvaWQgcmVmKCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDEwICsxODAsMTAgQEAgUHV0QnlTdGF0
dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwogICAgICAgICBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQodWlkKTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAgIHN0
dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQp
OworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZtKCkpOworICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAo
aXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6
cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZpZXIpLCBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFu
dDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZpZXIpLCBzdHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAg
ICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1Yklu
Zm8pOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5m
by5oIgogCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRl
ICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNz
LmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogCkBAIC02NSw5ICs2Niw5IEBAIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OmluaXRHZXRCeUlkU2VsZigKICAgICBBU1NFUlQoaGFzQ29uc3RhbnRJZGVu
dGlmaWVyKTsKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OkdldEJ5SWRTZWxm
KTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNv
ZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZP
ZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRBcnJheUxl
bmd0aChjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIpCkBAIC04Nyw5ICs4OCw5
IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRQdXRCeUlkUmVwbGEKICAgICBBU1NFUlQo
bV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tl
ciwgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFjZSk7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRp
ZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFy
cmllcihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVCbG9j
ay0+dm0oKS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYub2Zm
c2V0ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjppbml0SW5CeUlkU2VsZihjb25zdCBDb25jdXJyZW50SlNMb2NrZXJC
YXNlJiBsb2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgQ2FjaGVhYmxlSWRlbnRpZmll
ciBpZGVudGlmaWVyKQpAQCAtOTcsOSArOTgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0SW5CeUlkU2VsZihjCiAgICAgQVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5z
ZXQpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6SW5CeUlkU2VsZik7CiAg
ICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsK
KyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlLT5pZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxv
Y2spOwotICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxmT2Zmc2V0
ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCkBAIC0yMzYs
NyArMjM3LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbwogICAg
ICAgICAvLyB3ZSdyZSBidWZmZXJlZCBpcyBiZWNhdXNlIHdlIHJlbHkgb24gaXQgdG8gcmVzZXQg
ZHVyaW5nIEdDIGlmIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZQogICAgICAgICAvLyBpcyBj
b2xsZWN0ZWQuCiAgICAgICAgIG1faWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgICAgIG1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUgPSAwOwogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgZ2VuZXJhdGVkIHNv
bWUgY29kZSB0aGVuIHdlIGRvbid0IHdhbnQgdG8gYXR0ZW1wdCB0byByZXBhdGNoIGluIHRoZSBm
dXR1cmUgdW50aWwgd2UKICAgICAgICAgLy8gZ2F0aGVyIGVub3VnaCBjYXNlcy4KQEAgLTI1MSw3
ICsyNTIsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiB7CiAg
ICAgY2xlYXJCdWZmZXJlZFN0cnVjdHVyZXMoKTsKICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRy
OwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5jbGVhcigpOworICAgIG1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVU
eXBlOjpVbnNldCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg1LDYgKzI4Niw3IEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKICAgICAgICAgcmVzZXRQdXRCeShjb2Rl
QmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5SWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5h
bWU6CiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZh
bCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgpAQCAtMzYw
LDggKzM2Miw4IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAg
ICB9CiAKICAgICBib29sIGlzVmFsaWQgPSB0cnVlOwotICAgIGlmIChtX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpCi0gICAgICAgIGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChtX2lubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKQorICAgICAgICBpc1ZhbGlkICY9IHZt
LmhlYXAuaXNNYXJrZWQoc3RydWN0dXJlKTsKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVU
eXBlOjpTdHViKQogICAgICAgICBpc1ZhbGlkICY9IHUuc3R1Yi0+dmlzaXRXZWFrKHZtKTsKIApA
QCAtMzc1LDggKzM3Nyw4IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVy
ZW4KIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpw
cm9wYWdhdGVUcmFuc2l0aW9ucyhWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmIChtX2lubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCi0gICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CisgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0g
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpKQorICAgICAgICBzdHJ1Y3R1
cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwogCiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hl
VHlwZTo6U3R1YikKICAgICAgICAgdS5zdHViLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9y
KTsKQEAgLTQzMCw2ICs0MzIsMjA0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6c2UKICAgICBtX2NhY2hlVHlwZSA9IG5ld0NhY2hlVHlwZTsKIH0KIAordm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENv
ZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8pCit7
CisgICAgYWNjZXNzVHlwZSA9IHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZTsKKyAgICBzdGFy
dCA9IHVubGlua2VkU3R1YkluZm8uc3RhcnQ7CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRT
dHViSW5mby5kb25lTG9jYXRpb247CisgICAgc2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5r
ZWRTdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKTsKKyAgICBjb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZv
LmJ5dGVjb2RlSW5kZXgpOworICAgIG1fY29kZVB0ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsK
KworICAgIHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCk7CisgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxp
bmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZv
ciBpdGVyYXRvcl9uZXh0LCB3ZSBjYW4ndCBjbG9iYmVyIHRoZSAiZG9udENsb2JiZXJSZWdpc3Rl
ciIgcmVnaXN0ZXIgZWl0aGVyLgorICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXIpOworICAgIH0KKworICAgIHN3aXRj
aCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgor
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZv
LnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAg
ICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5l
Y21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRT
ZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJp
dmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICBz
d2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6
Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlz
U3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAg
ICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gdW5saW5rZWRTdHVi
SW5mby5wcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERl
ZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmll
bGRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2
YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVC
cmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNr
UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2gg
KGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAg
ICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBC
YXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBC
YXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJz
OjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAg
ICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAg
bV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0g
ZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFu
Y2VPZjoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHBy
b3RvdHlwZUlzS25vd25PYmplY3QgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5l
SW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MucHJvdG90eXBlR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICAgICAgbV9zdHViSW5mb0dQ
UiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisg
ICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5m
b0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6
R2V0QnlJZERpcmVjdDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFs
aWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhp
czoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAg
IHJlZ3MudGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFs
dWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0
QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVn
cy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAg
ICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBpZiAoYWNjZXNz
VHlwZSA9PSBBY2Nlc3NUeXBlOjpQdXRCeVZhbCkKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxl
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0g
ZmFsc2U7CisgICAgICAgIHZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQ
UiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLmJy
YW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgICAgICBt
X3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKICNpZiBBU1NFUlRfRU5BQkxFRAogdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6Y2hlY2tDb25zaXN0ZW5jeSgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKSVRTdHVi
Um91dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3B0aW9u
cy5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgpAQCAtNTYsNiAr
NTcsNyBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3QgewogICAgIEdldEJ5VmFsLAog
ICAgIFB1dEJ5SWQsCiAgICAgUHV0QnlWYWwsCisgICAgUHV0UHJpdmF0ZU5hbWUsCiAgICAgSW5C
eUlkLAogICAgIEluQnlWYWwsCiAgICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC03OCw2ICs4MCw4IEBA
IGVudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50OF90IHsKICAgICBTdHJpbmdMZW5ndGgKIH07CiAK
K3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworCiBjbGFzcyBTdHJ1Y3R1cmVTdHVi
SW5mbyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1YkluZm8pOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtOTgsNiArMTAyLDggQEAgcHVibGljOgogICAg
IHZvaWQgZGVyZWYoKTsKICAgICB2b2lkIGFib3V0VG9EaWUoKTsKIAorICAgIHZvaWQgaW5pdGlh
bGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8mKTsKKwogICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAg
Ly8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJ
ZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBpdHNlbGYsCkBAIC0zMjUsMTMgKzMzMSwxOSBAQCBw
cml2YXRlOgogCiBwdWJsaWM6CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOworICAgIFByb3Bl
cnR5T2Zmc2V0IGJ5SWRTZWxmT2Zmc2V0OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZC
eUlkU2VsZk9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5m
bywgYnlJZFNlbGZPZmZzZXQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJl
U3R1YkluZm8sIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7IH0KICAgICB1bmlvbiB7Ci0g
ICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAg
ICAgIH0gYnlJZFNlbGY7CiAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzKiBzdHViOwogICAgIH0g
dTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmU7CisgICAgU3RydWN0dXJlKiBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKFZNJiB2bSkKKyAg
ICB7CisgICAgICAgIGlmICghbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB2bS5nZXRTdHJ1Y3R1cmUobV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICB9CisgICAgU3RydWN0dXJlSUQgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlIHsgMCB9OwogcHJpdmF0ZToKICAgICBDYWNoZWFibGVJZGVudGlm
aWVyIG1faWRlbnRpZmllcjsKICAgICAvLyBSZXByZXNlbnRzIHRob3NlIHN0cnVjdHVyZXMgdGhh
dCBhbHJlYWR5IGhhdmUgYnVmZmVyZWQgQWNjZXNzQ2FzZXMgaW4gdGhlIFBvbHltb3JwaGljQWNj
ZXNzLgpAQCAtNDQ3LDYgKzQ1OSwxNyBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNH
ZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7
CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQ
cml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRL
aW5kOjpub25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpzbG9wcHko
KSB9OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBz
dGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBv
ZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisK
ICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJTdGF0ZSgp
CiAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsKICAgICBp
ZiAocGVyY2VudGFnZSAhPSBwZXJjZW50YWdlKQogICAgICAgICBwZXJjZW50YWdlID0gMC4wOwot
ICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBw
ZXJjZW50YWdlLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVy
IHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIiVcbiIpOwogfQogCiB2b2lkIGVuYWJsZVN1
cGVyU2FtcGxlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAK
KyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDbGFz
c0luZm8uaCIKQEAgLTc4LDYgKzc5LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29k
ZUJsb2NrKFZNJgogICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tlcik7CiAg
ICAgICAgIG1fcmFyZURhdGEtPm1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAgfQorCisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQo
T3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgpAQCAtMzE2LDYgKzMxOSw0OCBAQCBpbnQgVW5saW5rZWRDb2RlQmxv
Y2s6Om91dE9mTGluZUp1bXBPZmZzCiAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMu
Z2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECitib29sIFVubGlu
a2VkQ29kZUJsb2NrOjpoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7Cisg
ICAgaWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSA+IDEwMCkgeworICAgICAgICBpZiAobnVtYmVy
T2ZJZGVudGlmaWVycygpICE9IG1fY2FjaGVkSWRlbnRpZmllclVpZHMuc2l6ZSgpKSB7CisgICAg
ICAgICAgICBMb2NrZXIgbG9ja2VyKG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrKTsKKyAgICAg
ICAgICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBjYWNoZWRJZGVudGlmaWVyVWlkczsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJz
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIg
PSBpZGVudGlmaWVyKGkpOworICAgICAgICAgICAgICAgIGNhY2hlZElkZW50aWZpZXJVaWRzLmFk
ZChpZGVudGlmaWVyLmltcGwoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAgICBtX2NhY2hlZElkZW50aWZpZXJVaWRzID0g
V1RGTW92ZShjYWNoZWRJZGVudGlmaWVyVWlkcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5jb250YWlucyh1aWQpOworICAgIH0KKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAg
ICAgICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitpbnQzMl90IFVu
bGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpCit7Cisg
ICAgc3dpdGNoIChkaWRPcHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1p
bmF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIFRyaVN0YXRlOjpGYWxz
ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6VHJ1
ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwogdm9pZCBVbmxpbmtlZENv
ZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
IW1fbWV0YWRhdGEtPmlzRmluYWxpemVkKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKICNpbmNsdWRl
ICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNpbmNsdWRl
ICJERkdFeGl0UHJvZmlsZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNs
dWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNp
bmNsdWRlICJJZGVudGlmaWVyLmgiCkBAIC02NCw2ICs2Niw3IEBAIGNsYXNzIFVubGlua2VkQ29k
ZUJsb2NrOwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7Citj
bGFzcyBCYXNlbGluZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNz
IExpbmtUaW1lQ29uc3RhbnQgOiBpbnQzMl90OwogCkBAIC0xNzUsNiArMTc4LDcgQEAgcHVibGlj
OgogCiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3Rh
bnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3Qg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0
YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmly
dHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcu
dG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkg
eyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3
LDYgKzIxMSwxNSBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0
TW9kZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBj
b25zdDsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4
IGluZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0K
KyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3Ry
dWN0aW9ucygpLmF0KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNF
bmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2lu
ICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3Ry
dWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0
aW9uc1NpemUoKSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAg
IHVuc2lnbmVkIG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9j
YWxzOyB9CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsg
fQpAQCAtMzM0LDEwICszNDcsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tZXRhZGF0
YS0+c2l6ZUluQnl0ZXMoKTsKICAgICB9CiAKKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxl
Rm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKKyAgICB7CisgICAgICAgIC8vIFNvbWUgYnVpbHRpbnMg
YXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCisgICAg
ICAgIHJldHVybiAhaXNCdWlsdGluRnVuY3Rpb24oKTsKKyAgICB9CiAgICAgdm9pZCBhbGxvY2F0
ZVNoYXJlZFByb2ZpbGVzKCk7CiAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUmIHVubGlua2VkVmFs
dWVQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZXNbaW5kZXhd
OyB9CiAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUmIHVubGlua2VkQXJyYXlQcm9maWxlKHVuc2ln
bmVkIGluZGV4KSB7IHJldHVybiBtX2FycmF5UHJvZmlsZXNbaW5kZXhdOyB9CiAKKyNpZiBBU1NF
UlRfRU5BQkxFRAorICAgIGJvb2wgaGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwor
I2VuZGlmCisKKyAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7
CisKIHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSosIENv
ZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1v
ZGU+KTsKIApAQCAtMzk3LDYgKzQyMSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZXhp
Y2FsU2NvcGVGZWF0dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xv
Y2s7CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsK
IHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNl
UGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEzLDYgKzQzOCw5IEBAIHByaXZhdGU6CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCisg
ICAgLy8gT09QUzogYmluZCBhIGJldHRlciBwbGFjZSB0byBzdG9yZSB0aGlzIHN0dWZmPworICAg
IFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBW
ZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2ZpbGVzOwogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtNDU4
LDYgKzQ4NiwzMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVt
cE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVK
dW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgICAgICByZXR1
cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgfQorCisgICAgdW5z
aWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJl
c3VsdCA9IG1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJp
dGhQcm9maWxlcy5hcHBlbmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUo
KTsKKyAgICAgICAgbV91bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKFVuYXJ5QXJpdGhQcm9maWxl
KCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJp
dGhQcm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmls
ZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorCisgICAg
QmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4g
bV9sbGludEV4ZWN1dGVDb3VudGVyOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5l
SnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBA
IC00NjUsOSArNTE3LDE1IEBAIHByaXZhdGU6CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9v
dXRPZkxpbmVKdW1wVGFyZ2V0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFy
ZURhdGE7CiAgICAgRml4ZWRWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9u
SW5mbzsKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVy
OwogICAgIEZpeGVkVmVjdG9yPFVubGlua2VkVmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7
CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+IG1fYXJyYXlQcm9maWxlczsK
IAorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgTG9jayBtX2NhY2hlZElkZW50aWZpZXJVaWRzTG9j
azsKKyAgICBIYXNoU2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gbV9jYWNoZWRJZGVudGlmaWVyVWlk
czsKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAg
ICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9ja0dlbmVyYXRvci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNjcsNiArNjcsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dp
bmdPcGNvZGVzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERl
YnVnZ2luZ09wY29kZXMoKTsgfQogICAgIGJvb2wgaGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJl
dHVybiBtX2NvZGVCbG9jay0+aGFzQ2hlY2twb2ludHMoKTsgfQogICAgIGJvb2wgaGFzVGFpbENh
bGxzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmhhc1RhaWxDYWxscygpOyB9CisgICAg
dW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQcm9maWxlKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmFk
ZEJpbmFyeUFyaXRoUHJvZmlsZSgpOyB9CisgICAgdW5zaWduZWQgYWRkVW5hcnlBcml0aFByb2Zp
bGUoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKTsgfQogCiAg
ICAgLy8gVXBkYXRpbmcgVW5saW5rZWRDb2RlQmxvY2suCiAgICAgdm9pZCBzZXRIYXNDaGVja3Bv
aW50cygpIHsgbV9jb2RlQmxvY2stPnNldEhhc0NoZWNrcG9pbnRzKCk7IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRh
YmxlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTUg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRh
VGFibGUpOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWlu
dHB0cl90IG9mZnNldEluTWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VU
eXBlT2Zmc2V0ID0gbV9pczMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURd
IDogb2Zmc2V0VGFibGUxNigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAgICBiYXNlVHlwZU9m
ZnNldCA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25vZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFk
YXRhKSwgYmFzZVR5cGVPZmZzZXQpOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBz
aXplb2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOwor
ICAgIH0KKwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KICAgICB1bnNpZ25lZCBu
dW1FbnRyaWVzKCk7CiAKQEAgLTEwNyw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gc19vZmZzZXQxNlRhYmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0g
dWludDMyX3Q7CiAgICAgdXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NSwxMyArNDUsMTEgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ug
ewogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1i
ZXJPZkJ1Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJl
ck9mU3BlY0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1
Y2tldEluZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJl
ck9mU3BlY0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQogICAgIHsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyAr
K2kpCi0gICAgICAgICAgICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKKyAgICAgICAgY2xlYXJCdWNrZXRzKCk7CiAgICAgfQogICAgIAogICAgIEVuY29kZWRKU1Zh
bHVlKiBzcGVjRmFpbEJ1Y2tldCh1bnNpZ25lZCBpKQpAQCAtNTksNiArNTcsMTIgQEAgc3RydWN0
IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZCdWNrZXRzICsgaSA8
IHRvdGFsTnVtYmVyT2ZCdWNrZXRzKTsKICAgICAgICAgcmV0dXJuIG1fYnVja2V0cyArIG51bWJl
ck9mQnVja2V0cyArIGk7CiAgICAgfQorCisgICAgdm9pZCBjbGVhckJ1Y2tldHMoKQorICAgIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyAr
K2kpCisgICAgICAgICAgICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKKyAgICB9CiAgICAgCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8odW5zaWduZWQg
YnVja2V0KSBjb25zdAogICAgIHsKQEAgLTEyMyw4ICsxMjcsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9m
aWxlQmFzZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJl
ZGljdGlvbiBhbmQgcmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55
IHRocmVhZAotICAgIC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1
bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVy
T2ZCdWNrZXRzOyArK2kpIHsKQEAgLTEzOSw3ICsxNDEsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxl
QmFzZSB7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAg
ICAKKwogICAgIEVuY29kZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107
CiAKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTYx
LDYgKzE2Myw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAog
c3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZC
dWNrZXRzPDA+IHsKICAgICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1i
ZXJPZkJ1Y2tldHM8MD4oKSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RC
dWNrZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNb
MF0pOyB9CiB9OwogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVi
bGljIFZhbHVlUHJvZmlsZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnkKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRz
dCwgc3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9w
TmVnYXRlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVt
aXQodGhpcywgZHN0LCBzcmMsIHR5cGUsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmls
ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRV
bmFyeU9wPE9wQml0bm90Pihkc3QsIHNyYyk7CkBAIC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRJbmMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wSW5jOjpl
bWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVC
bG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAog
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0
KQogewotICAgIE9wRGVjOjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhp
cywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0
dXJuIHNyY0RzdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC02ODIsNyArNjgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBSZWdpc3RlcklEKj4KICAgICAgICAgZW1pdEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNy
YzIsIHR5cGVzKTsKKyAgICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwg
c3JjMiwgdHlwZXMsIG1fY29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENv
ZGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKICNpbmNs
dWRlICJERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKICNpbmNs
dWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKQEAgLTM0LDcgKzM1LDkgQEAK
ICNpbmNsdWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5o
IgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZVNldC5oIgorI2luY2x1ZGUgIkpJVE1hdGhJQy5o
IgogI2luY2x1ZGUgIkpTQ2FzdC5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAj
aW5jbHVkZSAiUHJvZmlsZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIlJlY29yZGVkU3RhdHVz
ZXMuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CkBAIC03MCw3ICs3Myw3IEBAIHN0cnVjdCBXZWFr
UmVmZXJlbmNlVHJhbnNpdGlvbiB7CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV90bzsKIH07
CiAgICAgICAgIAotY2xhc3MgQ29tbW9uRGF0YSB7CitjbGFzcyBDb21tb25EYXRhIDogcHVibGlj
IE1hdGhJQ0hvbGRlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CiBw
dWJsaWM6CiAgICAgQ29tbW9uRGF0YSgpCkBAIC0xMTYsNiArMTE5LDcgQEAgcHVibGljOgogICAg
IEZpeGVkVmVjdG9yPENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludD4gbV93YXRjaHBvaW50
czsKICAgICBGaXhlZFZlY3RvcjxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IG1fYWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50czsKICAgICBGaXhlZFZlY3RvcjxBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+IG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50czsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNU
b0NvZGVPcmlnaW5NYXA7CiAgICAgUmVjb3JkZWRTdGF0dXNlcyByZWNvcmRlZFN0YXR1c2VzOwog
ICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1lbnQ+IG1fanVtcFJlcGxhY2VtZW50czsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKIAorc3RydWN0IFNp
bXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKIG5hbWVzcGFjZSBERkcg
ewogCiBjbGFzcyBKSVRDb21waWxlcjsKQEAgLTEwMSw2ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAg
c3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEMoQ29kZUJsb2NrKiwgdm9pZCogcGMpIGZp
bmFsOwogCiAgICAgdXNpbmcgRGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkc7
CisKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7
IHJldHVybiBjb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQogICAgIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgSklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENvbXBpbGVyIHRv
IGNhbGwgc2V0Q29kZVJlZigpLgpAQCAtMTQwLDYgKzE0NSw4IEBAIHB1YmxpYzoKICAgICBIYXNo
TWFwPEJ5dGVjb2RlSW5kZXgsIFRyaWdnZXJSZWFzb24+IHRpZXJVcEVudHJ5VHJpZ2dlcnM7CiAK
ICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX29zckVudHJ5QmxvY2s7CisgICAgRml4ZWRW
ZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0
b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgdW5zaWdu
ZWQgb3NyRW50cnlSZXRyeTsKICAgICBib29sIGFiYW5kb25PU1JFbnRyeTsKICNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDEzICsxODUsMTIg
QEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIAogICAgIG1f
Z3JhcGgucmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsKIAotICAgIGlmICghbV9ncmFwaC5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpIHx8ICFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxl
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVC
bG9jay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShs
b2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMpOwotICAgICAgICBpZiAoIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFi
bGVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxv
Y2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3dpdGNoSnVtcFRh
Ymxlcyk7Ci0gICAgfQorICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxl
cy5pc0VtcHR5KCkpOworICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMu
aXNFbXB0eSgpKSAKKyAgICAgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMg
PSBXVEZNb3ZlKG1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBpZiAoIW1f
Z3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9qaXRDb2RlLT5t
X3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsK
IAogICAgIGZvciAoQmFnPFN3aXRjaERhdGE+OjppdGVyYXRvciBpdGVyID0gbV9ncmFwaC5tX3N3
aXRjaERhdGEuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKICAgICAgICAgU3dpdGNoRGF0YSYg
ZGF0YSA9ICoqaXRlcjsKQEAgLTE5OSwxMiArMTk4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6Omxp
bmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgY2FzZSBTd2l0Y2hDaGFyOgogICAgICAgICBj
YXNlIFN3aXRjaEltbTogewogICAgICAgICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkg
ewotICAgICAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRh
dGEuc3dpdGNoVGFibGVJbmRleCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
bV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XS5pc0Vt
cHR5KCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
Z3JhcGgudW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAg
ICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXNbZGF0
YS5zd2l0Y2hUYWJsZUluZGV4XTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVs
dCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2Rh
dGEuZmFsbFRocm91Z2guYmxvY2stPmluZGV4XSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuc2l6ZSgpID09IHVubGlua2VkVGFibGUubV9icmFu
Y2hPZmZzZXRzLnNpemUoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsaW5rZWRU
YWJsZS5tX2N0aU9mZnNldHMuc2l6ZSgpOyBqLS07KQpAQCAtMjE5LDEyICsyMTgsMTIgQEAgdm9p
ZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogCiAgICAgICAgIGNhc2UgU3dp
dGNoU3RyaW5nOiB7CiAgICAgICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUo
ZGF0YS5zd2l0Y2hUYWJsZUluZGV4KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VS
VChtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5k
ZXhdLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9ncmFwaC51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRh
YmxlSW5kZXgpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsK
KyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENvZGUtPm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAg
ICAgYXV0byBjdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFn
PihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCkgPT0gdW5s
aW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnNpemUoKSArIDEpOwogICAgICAgICAgICAgZm9yIChh
dXRvJiBlbnRyeSA6IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cykKQEAgLTMzMyw3ICszMzIsNyBA
QCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgfQogCiAgICAg
aWYgKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQotICAgICAg
ICBtX2NvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAobWFrZVVuaXF1ZTxQQ1RvQ29kZU9y
aWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIp
KTsKKyAgICAgICAgbV9qaXRDb2RlLT5jb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VV
bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIpLCBsaW5rQnVmZmVyKTsKIH0KIAogc3RhdGljIHZvaWQgZW1pdFN0YWNrT3ZlcmZsb3dDaGVj
ayhKSVRDb21waWxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHN0YWNrT3ZlcmZs
b3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5
KFZNJiB2bSwgQ2FsbEZyYW1lKgogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
Y29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQpOwotICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFw
KCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3Rp
bGxWYWxpZCk7CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9ERkcoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJKSVQuaCIKQEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhp
dENvdW50cyhWTSYgdm0sIENDYWxsSGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAg
ICBzd2l0Y2ggKGppdC5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBl
OjpERkdKSVQ6Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRl
cjo6Y2xpcHBlZFRocmVzaG9sZChqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJn
ZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRl
cjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSklUVHlwZTo6RlRMSklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVj
dXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2Jq
ZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhl
Y3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC0zMTMsNiArMzE0LDEwIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhl
bHBlcnMKICAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIg
PSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0
LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1l
LCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikp
OwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihi
YXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2Fs
bGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJl
Z2lzdGVyczo6cGJHUFIpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAg
ICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1l
dGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVD
b2RlQmxvY2ssIEpJVDo6c19tZXRhZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+
YmFzZWxpbmVKSVRDb25zdGFudFBvb2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFt
ZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw2ICs0
MDksOSBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0
aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAg
ICAgfSBlbHNlIHsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGNvZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7
CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tG
b3JFeGl0LT5iYXNlbGluZUpJVENvbnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7
CisKICAgICAgICAgY29kZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsK
IAogICAgICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJn
dW1lbnRzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkRGR0RyaXZl
ci5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKQEAgLTI4NjksNyArMjg3MCw3IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25GaW5kU3cKICAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZn
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBBU1NFUlQodmFsdWUuaXNEb3VibGUoKSk7CiAg
ICAgZG91YmxlIGFzRG91YmxlID0gdmFsdWUuYXNEb3VibGUoKTsKQEAgLTI4OTAsNyArMjg5MSw3
IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKIAogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2Nr
LT5kZmdTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgcmV0dXJuIGxpbmtl
ZFRhYmxlLmN0aUZvclZhbHVlKCp1bmxpbmtlZFRhYmxlLCBzdHJJbXBsKS5leGVjdXRhYmxlQWRk
cmVzczxjaGFyKj4oKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MzAsNiArNzMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENh
bGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNv
dmVyeTo6aW5QYWlyKGNhbGxlZVRhZ0dQUiwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAg
IHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAg
c2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0
ZXJzKCk7CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRB
cmdzOyArK2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgp
LnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTg4OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGlu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlk
R1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dD
YXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BS
LCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAg
ICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAg
ICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVG
b3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MzQsNiArODM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQog
ICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2Fs
bGVlR1BSLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNp
emUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRB
cmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRl
cnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7
CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCBpICsgMSk7CkBAIC05ODUsNyArOTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xv
d0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJ
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVn
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZd
IHsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAg
ICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBh
cmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1
LDcgKzM5ODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAg
ICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAog
ICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCks
IEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5
VmFsLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6
REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUs
IHVzZWRSZWdpc3RlcnMsCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZh
bGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNT
eW1ib2wgPSB0cnVlOwogCkBAIC00OTA1LDcgKzQ5MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9
IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50
aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuY29kZUJsb2NrKCkt
PmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQu
aml0Q29kZSgpLT5jb21tb24uYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemU7CiAgICAgYXV0byBu
b25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZDsKICAgICAKQEAgLTQ5ODks
NyArNDk4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVN1YihOb2QKICAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNv
ZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+Ymlu
YXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRT
dWJJQyogc3ViSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxl
KTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRT
dWJJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0
aW9uVmFsdWVTdWJPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9w
ZXJhdGlvblZhbHVlU3ViOwogCkBAIC01NTcxLDcgKzU1NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlVmFsdWVOZWdhdGUoCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2Vt
YW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBiYXNlbGluZUNvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4
KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygp
LT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0
LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byBy
ZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOwogICAgIGF1
dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGU7CiAgICAgY29t
cGlsZU1hdGhJQyhub2RlLCBuZWdJQywgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5n
RnVuY3Rpb24pOwpAQCAtNTgxNSw3ICs1ODE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlTXVsKE5vZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2pp
dC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5
dGVjb2RlSW5kZXgoKTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJh
c2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVj
b2RlSW5kZXgpOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRK
SVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1faml0LmppdENv
ZGUoKS0+Y29tbW9uLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNo
aW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVw
YXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWw7CiAKQEAgLTE0NzczLDcgKzE0Nzcz
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcg
c2NvcGVSZWcgPSBzY29wZS5ncHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxv
Y2soKSwgY2FsbFNpdGVJbmRleCk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNr
ZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVz
dWx0KG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBp
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGls
ZS5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIGNvbXBp
bGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAKICAgICBpZiAodm0uc2hvdWxkQnVpbGRl
clBDVG9Db2RlT3JpZ2luTWFwcGluZygpKSB7CiAgICAgICAgIEIzOjpQQ1RvT3JpZ2luTWFwIG9y
aWdpbk1hcCA9IHN0YXRlLnByb2MtPnJlbGVhc2VQQ1RvT3JpZ2luTWFwKCk7Ci0gICAgICAgIGNv
ZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAobWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1h
cD4oUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtLCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3Rh
dGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyKSk7CisgICAgICAgIHN0YXRlLmppdENvZGUt
PmNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1h
cD4oUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtLCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3Rh
dGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyKTsKICAgICB9CiAKICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0VudHJ5UHRyVGFnPiBsYWJlbCA9IHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlu
a0J1ZmZlci0+bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihzdGF0ZS5wcm9jLT5jb2RlKCkuZW50
cnlwb2ludExhYmVsKDApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
Q29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29k
ZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJ
VENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsOCBAQCBwdWJsaWM6CiAgICAgREZH
OjpDb21tb25EYXRhKiBkZmdDb21tb24oKSBvdmVycmlkZTsKICAgICBzdGF0aWMgcHRyZGlmZl90
IGNvbW1vbkRhdGFPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklUQ29kZSwgY29t
bW9uKTsgfQogICAgIHZvaWQgc2hyaW5rVG9GaXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikg
b3ZlcnJpZGU7CisKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBv
dmVycmlkZSB7IHJldHVybiBjb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQogICAg
IAogICAgIERGRzo6Q29tbW9uRGF0YSBjb21tb247CiAgICAgVmVjdG9yPE9TUkV4aXQ+IG1fb3Ny
RXhpdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNiArODksNyBAQAogI2luY2x1
ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiUHJvYmVDb250ZXh0LmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNs
dWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Iu
aCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgpAQCAtMjMyMCw2ICsyMzIxLDE4IEBA
IHByaXZhdGU6CiAgICAgICAgIGNvbXBpbGVCaW5hcnlNYXRoSUM8SklUU3ViR2VuZXJhdG9yPihh
cml0aFByb2ZpbGUsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsK
ICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVEFkZEdlbmVy
YXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUQWRkSUMqIGFkZE1hdGhJQyhERkc6
OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVy
biBjb21tb24uYWRkSklUQWRkSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
YW1lPEdlbmVyYXRvciwgSklUTXVsR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRp
YyBKSVRNdWxJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0
aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRNdWxJQyhwcm9maWxlKTsg
fQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVROZWdHZW5lcmF0b3I+
Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVE5lZ0lDKiBhZGRNYXRoSUMoREZHOjpDb21t
b25EYXRhJiBjb21tb24sIFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21t
b24uYWRkSklUTmVnSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdl
bmVyYXRvciwgSklUU3ViR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRT
dWJJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2Zp
bGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRTdWJJQyhwcm9maWxlKTsgfQorCiAg
ICAgdm9pZCBjb21waWxlVmFsdWVNdWwoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGlj
KTsKQEAgLTIzOTEsNyArMjQwNCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgICAgICAgICAg
ICAgIEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IEJv
eDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBKSVRV
bmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJ
QzxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICAgICAgSklUVW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiogbWF0aElDID0gYWRkTWF0aElDPEdlbmVyYXRvcj4oc3RhdGUtPmppdENv
ZGUtPmNvbW1vbiwgYXJpdGhQcm9maWxlKTsKICAgICAgICAgICAgICAgICBtYXRoSUMtPm1fZ2Vu
ZXJhdG9yID0gR2VuZXJhdG9yKEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSksIEpTVmFsdWVS
ZWdzKHBhcmFtc1sxXS5ncHIoKSksIHBhcmFtcy5ncFNjcmF0Y2goMCkpOwogCiAgICAgICAgICAg
ICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CkBAIC0yNTAwLDcgKzI1MTMs
NyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAgICAgICAgICAgICBCb3g8TWF0aElDR2VuZXJh
dGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBCb3g8TWF0aElDR2VuZXJhdGlvblN0
YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRv
cj4qIG1hdGhJQyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQ
cm9maWxlKTsKKyAgICAgICAgICAgICAgICBKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0
aElDID0gYWRkTWF0aElDPEdlbmVyYXRvcj4oc3RhdGUtPmppdENvZGUtPmNvbW1vbiwgYXJpdGhQ
cm9maWxlKTsKICAgICAgICAgICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9y
KGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSks
CiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIEpTVmFs
dWVSZWdzKHBhcmFtc1syXS5ncHIoKSksIHBhcmFtcy5mcFNjcmF0Y2goMCksCiAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtcy5mcFNjcmF0Y2goMSksIHBhcmFtcy5ncFNjcmF0Y2goMCkpOwpAQCAt
NDMxNyw3ICs0MzMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpID8gcGFyYW1zLmdwU2NyYXRj
aCgwKSA6IEludmFsaWRHUFJSZWc7CiAKICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94
PEpJVFB1dEJ5VmFsR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgIGppdC5jb2Rl
QmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRlSW5k
ZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLAorICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2so
KSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFj
Y2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLAogICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2YWls
YWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BS
KTsKIAogICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9s
ID0gdHJ1ZTsKQEAgLTEwMjg1LDYgKzEwMjk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtUGFzc2VkQXJnczsgaSA8IG51bUFsbG9jYXRlZEFy
Z3M7ICsraSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MuYXBwZW5k
KFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAg
ICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCkt
Pm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBD
YWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5j
b2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKHNlbWFudGljTm9kZU9yaWdpbik7CkBAIC0xMDQ0
MywxMyArMTA0NTcsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURh
dGEuYXJncy5hcHBlbmQocGFyYW1zWzEgKyBpXS5yZWNvdmVyeUZvckpTVmFsdWUoKSk7CiAKICAg
ICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtQXJnczsKKyAgICAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc2h1ZmZs
ZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAKICAgICAg
ICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+
YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAot
ICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBb
Jl0gewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURh
dGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihq
aXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgICAgICB9
KTsKQEAgLTEwNzkyLDcgKzEwODA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0
aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJ
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAg
ICAgICAgICAgICAgIH0pOwpAQCAtMTEwNzMsNyArMTEwODgsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENh
bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVn
VDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNs
b3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDE3ICs0MiwyOCBAQCBjbGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAg
IHJldHVybiBpZiBlbXB0eT8KIAotICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZp
ZWxkcykKKyAgICAgICAgZGVmIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVs
ZE5hbWVzKQorICAgICAgICAgICAgZmllbGROYW1lcy5tYXAgZG8gfGZpZWxkTmFtZXwKKyAgICAg
ICAgICAgICAgICAiI3twcmVmaXh9c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGROYW1l
WzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsxLi5dfSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikK
KyAgICAgICAgZW5kCisKKyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMs
IGZpZWxkTmFtZXMpCiAgICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAg
ICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAg
IiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUp
fVxuI3twcmVmaXh9fTsiCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4j
e2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlLCBmaWVsZE5hbWVzKX1cbiN7cHJl
Zml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJl
Zml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307IgorICAgICAgICAgICAgICAgICAgICBm
aWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVz
aChmaWVsZE5hbWUpCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30g
bV8je2ZpZWxkTmFtZX07IgogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpv
aW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygi
ICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVsZE5hbWVzID0gW10KKyAgICAgICAgcHJl
Zml4ID0gIiAgICAgICAgIgorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKHByZWZpeCwg
QGZpZWxkcywgZmllbGROYW1lcykKKyAgICAgICAgZmllbGRzID0gZmllbGRzICsgIlxuIiArIGdl
bmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQogCiAgICAgICAgIGlu
aXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJz
LmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDYgKzM2NywyOCBAQCB2
b2lkIEFzc2VtYmx5SGVscGVyczo6bG9hZFByb3BlcnR5KEdQUlJlCiAgICAgICAgIHJlc3VsdCk7
CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZh
bHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAg
ICBKdW1wIGlzSW5saW5lID0gYnJhbmNoMzIoTGVzc1RoYW4sIG9mZnNldCwgVHJ1c3RlZEltbTMy
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKG9iamVj
dCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgbmVnMzIob2Zm
c2V0KTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7CisgICAgSnVtcCBy
ZWFkeSA9IGp1bXAoKTsKKyAgICAKKyAgICBpc0lubGluZS5saW5rKHRoaXMpOworICAgIGFkZFB0
cigKKyAgICAgICAgVHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJf
dD4oc2l6ZW9mKEpTT2JqZWN0KSkgLQorICAgICAgICAgICAgKHN0YXRpY19jYXN0PGludDMyX3Q+
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDIpICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSkpLAorICAgICAgICBvYmplY3QsIHNjcmF0Y2gpOworICAgIAorICAg
IHJlYWR5LmxpbmsodGhpcyk7CisgICAgCisgICAgc3RvcmVWYWx1ZSh2YWx1ZSwKKyAgICAgICAg
QmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Cit9CisKIHZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVyZShWTSYgdm0sIFJlZ2lzdGVySUQgc291cmNlLCBSZWdp
c3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpA
QCAtNjk4LDggKzcyMCwxMyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNh
dmVzCiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENh
bGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBpbmZvKTsKK30KKwordm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZt
LCBDYWxsTGlua0luZm8qIGluZm8pCit7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBH
UFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5r
VGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNh
bGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9u
UHRyVGFnPihjYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDggKzIzNCw5IEBAIHB1
YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBjbG9iYmVy
cyBvZmZzZXQuCisgICAgLy8gTm90ZSB0aGF0IHRoZXNlIGNsb2JiZXIgb2Zmc2V0LgogICAgIHZv
aWQgbG9hZFByb3BlcnR5KEdQUlJlZyBvYmplY3QsIEdQUlJlZyBvZmZzZXQsIEpTVmFsdWVSZWdz
IHJlc3VsdCk7CisgICAgdm9pZCBzdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJS
ZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBHUFJSZWcgc2NyYXRjaCk7CiAKICAgICB2b2lkIG1v
dmVWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3Mgc3JjUmVncywgSlNWYWx1ZVJlZ3MgZGVzdFJlZ3MpCiAg
ICAgewpAQCAtMTcyMCw2ICsxNzIxLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lk
IGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7Cisg
ICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgQ2Fs
bExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsK
ICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRD
b2RlLmgiCisKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIK
KyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSklU
QWRkSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRNdWxJ
QyogTWF0aElDSG9sZGVyOjphZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSkgeyByZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVFN1YklDKiBN
YXRoSUNIb2xkZXI6OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
KSB7IHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUTmVnSUMqIE1hdGhJ
Q0hvbGRlcjo6YWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyBy
ZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKwordm9pZCBNYXRoSUNIb2xkZXI6
OmFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKQoreworICAgIG1fYWRkSUNzID0gV1RG
TW92ZShvdGhlci5tX2FkZElDcyk7CisgICAgbV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVs
SUNzKTsKKyAgICBtX25lZ0lDcyA9IFdURk1vdmUob3RoZXIubV9uZWdJQ3MpOworICAgIG1fc3Vi
SUNzID0gV1RGTW92ZShvdGhlci5tX3N1YklDcyk7Cit9CisKK0Jhc2VsaW5lSklUQ29kZTo6QmFz
ZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKKyAgICA6IERpcmVjdEpJVENvZGUoV1RGTW92ZShjb2Rl
KSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICwgTWF0aElDSG9s
ZGVyKCkKK3sgfQorCitCYXNlbGluZUpJVENvZGU6On5CYXNlbGluZUpJVENvZGUoKQoreworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFz
ZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9C
YXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2lu
Y2x1ZGUgIkpJVENvZGVNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJpbmFyeUFy
aXRoUHJvZmlsZTsKK2NsYXNzIFVuYXJ5QXJpdGhQcm9maWxlOworc3RydWN0IFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1
bXBUYWJsZTsKKworY2xhc3MgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0
TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKTsKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMo
QmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFy
aXRoUHJvZmlsZSopOworICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2Zp
bGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKwor
cHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4g
bV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+
IG1fc3ViSUNzOworfTsKKworY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKK3B1YmxpYzoKKyAgICB1
c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhf
dCB7CisgICAgICAgIEdsb2JhbE9iamVjdCwKKyAgICAgICAgQ2FsbExpbmtJbmZvLAorICAgICAg
ICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAgRnVuY3Rpb25EZWNsLAorICAgICAgICBGdW5j
dGlvbkV4cHIsCisgICAgfTsKKworICAgIHN0cnVjdCBWYWx1ZSB7CisgICAgICAgIFR5cGUgdHlw
ZTsKKyAgICAgICAgUGFja2VkUHRyPHZvaWQ+IHBheWxvYWQ7CisgICAgfTsKKworICAgIEpJVENv
bnN0YW50UG9vbCgpID0gZGVmYXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQ
b29sJiYpID0gZGVmYXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25z
dGFudFBvb2wmJikgPSBkZWZhdWx0OworCisgICAgQ29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9p
ZCogcGF5bG9hZCA9IG51bGxwdHIpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBt
X2NvbnN0YW50cy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5
cGUsIHBheWxvYWQgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1
ZSBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0
ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fY29uc3RhbnRzOworfTsKKworCitjbGFzcyBCYXNlbGlu
ZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7Citw
dWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwg
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayk7CisgICAgfkJhc2VsaW5lSklU
Q29kZSgpIG92ZXJyaWRlOworICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1h
cCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KKworICAg
IEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgIEJhZzxDYWxs
TGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7IC8vIE9PUFM6IG1ha2Ugc3VyZSB3ZSB2aXNp
dCB0aGVzZSBzb21laG93LiBPciBhc3NlcnQgd2UgZG9uJ3QgaGF2ZSB0bywgc2luY2UgdGhleSdy
ZSB2aXJ0dWFsIGNhbGxzLgorICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3Vu
bGlua2VkU3R1YkluZm9zOworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0
Y2hKdW1wVGFibGVzOworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzOworICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworICAgIEpJVENv
bnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVP
cmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVK
SVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxp
bmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5l
SklUUGxhbjo6ZmluYWxpemUoKQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1f
aml0LmZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0
ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAo
cmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NL
X0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24g
ZmFpbGVkIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2Fs
bEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxs
SGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBz
Y29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2Nv
cGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17
Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93
UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsK
LSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1h
cmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhp
c1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNU
X09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgp
KSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZN
JiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJS
ZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNo
YWRvd0NoaWNrZW4oKTsKQEAgLTcyLDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1
cmVTaGFkb3dDaGlja2VuUGEKICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNo
MU5vbkFyZ0dQUikpOwogfQogCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgor
dm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcg
c2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxv
Y2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0
b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwg
T0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3Rv
cmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSks
IEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFj
a2V0LCBjYWxsZWUpKSk7CisgICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkp
KTsKKyAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVC
bG9jaywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0
ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVs
cGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ss
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFp
bFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2Fs
bFNpdGVJbmRleCk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFp
bFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVn
IHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7
CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1Jl
Z3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVs
cGVyczo6ZW1pdEpJVENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRy
VGFnPiB3aGVyZSwgU2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBj
b25zdCBjaGFyKiBkZXNjcmlwdGlvbikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODI2NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC04NDAsNyArODQwLDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25z
IGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBp
cyByb29tIG9uIHRoZSB0b3Agb2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3Vt
ZW50cy4KICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hh
ZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dT
aGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0
aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJp
dmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVl
UmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdz
LCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlSW5kZXgpOworICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVn
IHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVn
IGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZl
cyBiZWhpbmQgYSBwb2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNo
YWRvd1BhY2tldC4KICAgICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJS
ZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNo
Mik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZURhdGEuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCAr
MzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1
cENhbGxlZVNhdmVSZWdpc3RlcnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwor
fQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMo
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAg
ICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpIH07Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lz
dGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsg
KytpKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2Nh
dGlvbnMtPmF0KGkpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlRGF0YS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDExICs0MywxMyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAg
ICAgdW5zaWduZWQgbnVtTG9jYWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNz
ZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9N
QVggfTsgLy8gT24gb3VyIG1hY2hpbmUgZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBS
ZWdpc3Rlck1hcDxWYWx1ZVJlY292ZXJ5PiByZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRh
Z1JlZ2lzdGVyIHsgSW52YWxpZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVS
ZWdpc3RlcnMoQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMo
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3Zlcnkg
Y2FsbGVlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZy
YW1lU2h1ZmZsZXIuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4
LDEzIEBAIENhbGxGcmFtZVNodWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1f
aml0KGppdCkKICAgICAsIG1fb2xkRnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFu
ZFBDOjpzaXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJn
cy5zaXplKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAg
ICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVy
cwotICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKSkpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZy
YW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJh
bWUoZGF0YS5udW1QYXJhbWV0ZXJzKSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxs
RnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3Vu
dFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Muc2l6ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2Fs
aWduZWROZXdGcmFtZVNpemUgLSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tl
ZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3Nl
ZEFyZ3MoZGF0YS5udW1QYXNzZWRBcmdzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVt
UGFyYW1ldGVycykKIHsKICAgICAvLyBXZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lz
dGVycy4uLgogICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
OyBpLS07ICkKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVw
YXJlRm9yVGFpbENhCiAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2Fk
T2Zmc2V0KSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3Vt
ZW50Q291bnRPSyA9CiAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxv
d09yRXF1YWwsIG1fbmV3RnJhbWVCYXNlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAg
IG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRS
ZWdpc3RlcnMoKSAtIDEgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3
RnJhbWVCYXNlKTsKICAgICBtX2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KC1zdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0
Lm11bDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1f
bmV3RnJhbWVCYXNlLCBtX25ld0ZyYW1lQmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNCw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRh
IGRhdGE7CiAgICAgICAgIGRhdGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRh
dGEubnVtUGFzc2VkQXJncyA9IG1fbnVtUGFzc2VkQXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJh
bWV0ZXJzID0gbV9udW1QYXJhbWV0ZXJzOwogICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhW
aXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAg
ICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytpKQpAQCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBwZXJmb3JtU2FmZVdyaXRlcygpOwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVt
UGFzc2VkQXJncyB7IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsg
VUlOVF9NQVggfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KQotICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFj
ZUpJVCgmdm0sIG51bGxwdHIpCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQog
ICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXpl
KCkgOiAwKQogICAgICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3
Nyw5IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1f
c2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJ
bmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29u
c3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxP
YmplY3QpOworICAgIG1fcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxp
bmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklU
Ojp+SklUKCkKQEAgLTkwLDggKzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlv
bkNoZWNrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwot
ICAgIAotICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVk
SW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNv
bHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7
CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qw
KTsKKyAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZElt
bTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVz
cyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAg
QVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxp
bmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMjAgQEAgdm9pZCBKSVQ6
OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgo
Tm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShH
UFJSZWcgcG9pbnRlclRvU2V0KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQo
R1BSUmVnIHBvaW50ZXJUb1NldCkKIHsKKyAgICBhdXRvIG9rID0gYnJhbmNoVGVzdFB0cihaZXJv
LCBwb2ludGVyVG9TZXQpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJl
c3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBvay5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCit2b2lkIEpJ
VDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIEdQUlJlZyBz
Y3JhdGNoR1BSKQogewotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+dmFyUmVhZE9ubHlXYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFs
VmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJS
ZWFkT25seVdhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfQogfQogCiB2b2lk
IEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKQEAgLTEyOSw3ICsxMzcsNyBAQCB2b2lk
IEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICAgICBpZiAoIUFTU0VSVF9FTkFCTEVE
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBKdW1wIG9rID0gYnJhbmNoUHRyKEVxdWFsLCByZWdU
MCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGJyZWFrcG9pbnQoKTsKICAgICBvay5saW5r
KHRoaXMpOwpAQCAtMTgxLDIxICsxODksNDEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwo
Y29uc3QgSW5zdHJ1YwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3ZvaWQgSklUOjpl
bWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9u
Q29kZSk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEpTRnVuY3Rpb246
Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJlc3VsdCk7CisgICAgYXV0byBoYXNF
eGVjdXRhYmxlID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHQsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0
aW9uOjpyYXJlRGF0YVRhZyksIHJlc3VsdCk7CisgICAgaGFzRXhlY3V0YWJsZS5saW5rKHRoaXMp
OworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkpCisgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QoKSksIHJlc3VsdCk7CisgICAgZWxzZQorICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9y
Q2FsbCgpKSwgcmVzdWx0KTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2U6Om9mZnNldE9mQ29kZUJsb2NrKCkpLCByZXN1bHQpOworICAgIGVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZXN1bHQsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7
Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKICAgICBpZiAoSklU
SW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2Rl
QmxvY2ssICJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fcHJvZmlsZWRD
b2RlQmxvY2ssICJcbiIpOwogICAgIAogICAgIGppdEFzc2VydFRhZ3NJblBsYWNlKCk7CiAgICAg
aml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsKICAgICAKLSAgICBhdXRvJiBpbnN0cnVjdGlv
bnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rp
b25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgYXV0byYg
aW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7CisgICAg
dW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwogCi0gICAgVk0m
IHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgQnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2Rl
SW5kZXgoMCk7CisKKyAgICAvLyBPT1BTOiBNYXliZSBvbmx5IGRvIHRoaXMgaWYgd2UgZGlzYWJs
ZSBzaGFyaW5nIHNvbWVob3c/CisgICAgLyoKKyAgICBWTSYgdm0gPSBtX3VubGlua2VkQ29kZUJs
b2NrLT52bSgpOwogICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1fY29k
ZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJsb2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmlu
aGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtKSkpIHsKICAgICAgICAgLy8gV2UgY2Fu
IG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2Rl
QmxvY2sncyBleGFjdGx5IG9uY2UuCiAgICAgICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxk
IGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRoZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRz
IHRvCkBAIC0yMzYsNiArMjY0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAgICovCiAKICAgICBtX2J5dGVj
b2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CiAgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNv
dW50OyApIHsKQEAgLTI3OCw4ICszMDcsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpCiAKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5l
SklURXhlY3V0aW9uKCkpKSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
Y29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBj
dHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxs
RnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBb
IiwgYnl0ZWNvZGVPZmZzZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwg
UmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0KQEAgLTUyNyw3ICs1NTYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJ
bmRleDsKIAotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7Cisg
ICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAg
ICAgICAKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0
YUxvZ0xuKCJCYXNlbGluZSBKSVQgZW1pdHRpbmcgc2xvdyBjb2RlIGZvciAiLCBtX2J5dGVjb2Rl
SW5kZXgsICIgYXQgb2Zmc2V0ICIsIChsb25nKWRlYnVnT2Zmc2V0KCkpOwpAQCAtNTQ1LDggKzU3
NCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKICAgICAg
ICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAg
ICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJs
b2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0
LCAiXSBTTE9XICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihj
dHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0K
QEAgLTY3NCw1NSArNzAzLDU1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAjZW5kaWYKIH0KIAordm9pZCBKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3Rh
bnRQb29sUmVnaXN0ZXJzKCkKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHNfbWV0YWRhdGFHUFIpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJlZ1QwKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZK
SVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKK30KKwordm9pZCBKSVQ6OmVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKQoreworICAgIEJhc2U6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNG
b3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklU
Q29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxl
dmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOworICAgIERGRzo6Q2FwYWJpbGl0
eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAg
ICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAg
ICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklu
bGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpD
YW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAg
ICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxk
RW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7Ci0gICAgY2FzZSBH
bG9iYWxDb2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToKLSAgICBjYXNlIEV2YWxDb2RlOgotICAg
ICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAgIC8vIFdlIGNvdWxkIGhh
dmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGlu
ZWFibGUgY2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4K
LSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGlu
ZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29kZUJsb2NrKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZV
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1
cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxl
SnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMo
KSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxv
Y2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRh
YmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMo
KSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hK
dW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+
bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3dpdGNo
SnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV91bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgICAgIGlmICht
X3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
cygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8
U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9u
czo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBP
cHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKQotICAgICAgICBtX2Rp
c2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX2NvZGVCbG9jayk7Cisg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2Zp
bGVyKCkpKSkgeworICAgICAgICAvLyBGSVhNRTogYnVpbGQgYSBkaXNhc3NlbWJsZXIgb2ZmIG9m
IFVubGlua2VkQ29kZUJsb2NrLgorICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8
SklURGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICB9CiAgICAgaWYgKFVO
TElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpIHsKKyAgICAgICAgLy8gRklYTUU6
IGJ1aWxkIHByb2ZpbGVyIGRpc2Fzc2VtYmxlciBvZmYgVW5saW5rZWRDb2RlQmxvY2suCiAgICAg
ICAgIG1fY29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAgICAgICAgIG5ldyBQcm9maWxlcjo6
Q29tcGlsYXRpb24oCi0gICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
LT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAorICAgICAgICAgICAgICAgIG1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fcHJvZmlsZWRDb2Rl
QmxvY2spLAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpCYXNlbGluZSkpOwotICAgICAgICBt
X2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVk
Qnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fcHJvZmlsZWRDb2RlQmxv
Y2spOwogICAgIH0KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJ
dGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwpAQCAtNzQyLDExICs3
NzEsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAg
ICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAg
IGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAg
ICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKCk7CiAKICAgICBMYWJlbCBi
ZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAgaW50IGZyYW1l
VG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUgPSAtZnJhbWVUb3BP
ZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9mZnNldCksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxvdzsKQEAgLTc1Nywx
NiArNzg3LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAg
ICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0U2F2
ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMo
KTsKKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygp
OwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewor
ICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkg
ewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChzaG91bGRF
bWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAw
OyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsK
KyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAmJiAoIW1fdW5saW5rZWRDb2RlQmxv
Y2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCkgPiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIEZp
eGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIpOworCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX3VubGlu
a2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4g
YSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5n
cyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1
bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3Rv
cigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9j
ay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRP
ZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArODExLDEyIEBAIHZvaWQg
SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogICAg
ICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BS
KCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2Nv
ZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsK
KyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFy
Z3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmly
c3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgpKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmlsZWRDb2RlQmxvY2st
PmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQogICAgICAgICBt
X3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgKnRo
aXMpOwpAQCAtNzk5LDI0ICs4MzMsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAg
aWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBt
X2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVS
b2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCByZWdU
MCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2UgbmV2ZXIg
cmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fY29k
ZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgeworICAgIGJvb2wg
cmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
ICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hlY2sgPSBs
YWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxvY2stPm1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgp
OwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9s
b2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVn
VDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkpOwogCiAgICAg
ICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBU
cnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhiZWdpbkxh
YmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3Rl
ZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtUbyhiZWdp
bkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAg
ICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29kZUJsb2Nr
LT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0
aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xs
YmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9w
ZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgYXJn
dW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQog
ICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFplcm8s
IHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04MzksNyArODc2
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBt
X2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
OjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVl
X3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtC
dWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBtX2xpbmtCdWZmZXIg
PSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fdW5s
aW5rZWRDb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQp
KTsKICAgICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4OTUsOCBAQCB2b2lkIEpJVDo6bGluaygp
CiAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNv
cmQ6OkltbWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rlcjogewot
ICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAg
ICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxl
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAg
ICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3
aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNl
dF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2VkVGFibGUu
bV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQg
b2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEsOCArOTA4
LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTd2l0Y2hS
ZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlEZWZh
dWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0
ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yIChh
dXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMoKSkgewog
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNoT2Zmc2V0
OwpAQCAtOTA2LDMyICs5NDMsMzUgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7CiAgICAgfQogCi0gICAg
ZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVD
YWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVz
KG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9p
bkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5VmFs
cywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMs
IHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFj
Y2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYg
Z2VuZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAg
ICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAgICAg
ICB9CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFsaXpl
SUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMpOwor
ICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlWYWxz
KTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5
VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2lu
QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25J
bmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAgICAgIENhbGxMaW5rSW5mbyYgaW5m
byA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAgICBpbmZvLnNldENvZGVM
b2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKLSAgICAgICAgICAgIHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVM
b2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxh
dGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGluZm8uZG9uZUxvY2F0aW9u
ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbklu
Zm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIEpJVENvZGVNYXBCdWls
ZGVyIGppdENvZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZz
ZXQpIHsKLSAgICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkK
LSAgICAgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChi
eXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9s
YWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxvY2st
PnNldEpJVENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKSk7CisgICAgSklUQ29k
ZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2Rl
T2Zmc2V0KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkK
KyAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVj
b2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVs
c1tieXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk4MCwzNyBAQCB2b2lkIEpJVDo6bGlu
aygpCiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7CisgICAgICAg
IC8vIEZJWE1FOiBzaG91bGQgd2UgbWFrZSB0aGUgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91
dCBVbmxpbmtlZENvZGVCbG9jaz8KICAgICAgICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFz
ZWxpbmVGb3JQcm9maWxlcigpKQogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRv
UHJvZmlsZXIobV9jb21waWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3Zt
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9j
b21waWxhdGlvbik7CisgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29t
cGlsYXRpb24obV9wcm9maWxlZENvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAog
ICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAg
ICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+
KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAg
CisgICAgLy8gRklYTUU6IE1ha2UgYSB2ZXJzaW9uIG9mIENvZGVCbG9ja1dpdGhKSVRUeXBlIHRo
YXQga25vd3MgYWJvdXQgVW5saW5rZWRDb2RlQmxvY2suCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRy
VGFnPiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRy
eVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhD
b2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5k
YXRhKCkpOworICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENv
ZGVCbG9ja1dpdGhKSVRUeXBlKG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkuZGF0YSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJU
YWc+KG1fYXJpdHlDaGVjayk7Ci0gICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBEaXJlY3RK
SVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSk7Cisg
ICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRo
QXJpdHlDaGVjaykpOworCisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBXVEZNb3Zl
KG1fdW5saW5rZWRDYWxscyk7CisgICAgbV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9zID0g
V1RGTW92ZShtX2V2YWxDYWxsTGlua0luZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRT
dHViSW5mb3MgPSBXVEZNb3ZlKG1fdW5saW5rZWRTdHViSW5mb3MpOworICAgIG1faml0Q29kZS0+
bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1f
aml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMpOworICAgIG1faml0Q29kZS0+bV9qaXRDb2RlTWFwID0gaml0Q29kZU1hcEJ1
aWxkZXIuZmluYWxpemUoKTsKKyAgICBtX2ppdENvZGUtPmFkb3B0TWF0aElDcyhtX21hdGhJQ3Mp
OworICAgIG1faml0Q29kZS0+bV9jb25zdGFudFBvb2wgPSBXVEZNb3ZlKG1fY29uc3RhbnRQb29s
KTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJ
VCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVz
dWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhl
Y3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKKyAgICAgICAgZGF0YUxvZ0Yo
IkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2VkQ29k
ZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCks
IHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQogCi1D
b21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKCkKK0NvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTk2OCwy
NSArMTAxOSwxNCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyCiAK
ICAgICBtX2xpbmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCi0g
ICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xv
Y2spOwotICAgICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6
OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7Ci0g
ICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRs
ZXIoaSk7Ci0gICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgotICAg
ICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQo
Qnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+KCk7Ci0gICAgfQotCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApCi0gICAgICAg
IG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmln
aW5NYXApKTsKKyAgICAgICAgbV9qaXRDb2RlLT5tX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92
ZShtX3BjVG9Db2RlT3JpZ2luTWFwKTsKIAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJC
eXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1faml0Q29kZS0+c2l6ZSgpKSAvCi0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9j
b2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9j
b2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNv
ZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VO
b25OdWxsKCkpOwogCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5
OCwxMSArMTAzOCwxMSBAQCBzaXplX3QgSklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fbGlua0J1ZmZlci0+c2l6ZSgpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZh
dGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0
IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9u
RWZmb3J0IGVmZm9ydCkKIHsKICAgICBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBp
bGUoKTsKICAgICBjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAg
cmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWlu
VGhyZWFkKGNvZGVCbG9jayk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlv
bkhhbmRsZXJzKCkKQEAgLTEwNDIsMTggKzEwODIsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVh
ZFByZXBhcmF0aW9uQmVmb3JlQwogICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJv
Y2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQcmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3Mp
OwogfQogCi11bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
b2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9j
ay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVy
Q291bnRGb3JGcmFtZVBvaW50ZXJPZmZzZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSAr
IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklU
OjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBK
SVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBy
ZXR1cm4gZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2so
KSk7Cit9CisKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9j
ayogY29kZUJsb2NrKQogewogICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFt
ZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklU
OjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0
dXJuIHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkp
OworfQorCiBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygp
CiB7CiAgICAgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBB
U1NFUlRfSklUX09GRlNFVChhY3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFj
dHVhbCA9PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVk
LlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8
aW50PihhY3R1YWwpKTsKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJ
VERpc2Fzc2VtYmxlci5oIgpAQCAtNDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5o
IgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVy
ZmFjZUpJVC5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3Jp
Z2luTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVSZWYuaD4KQEAgLTE0OSwxNCArMTUxLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAK
ICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9u
ZUxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAg
VW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OwogICAgIH07CiAKICAg
ICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNz
IEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAg
Y2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewog
ICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xh
c3MgSklUU3R1YkNhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEs
NiArMTczLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhl
IGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9m
ZnNldC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9m
ZnNldCA9IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAg
ICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29k
ZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAg
ICAgICAgIH5KSVQoKTsKQEAgLTE3OCwyOCArMTgyLDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAg
ICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZv
cnQpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOwor
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sq
KTsKICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01h
aW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0
YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9m
ZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBK
SVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7
CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5w
cml2YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAorICAgICAgICBz
dGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7
CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2Nr
Kik7CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29k
ZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVC
bG9jayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJp
bmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21waWxlVGltZSgpOwogCisgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0
YVRhYmxlR1BSOworICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX2NvbnN0YW50c0dQ
UiA9IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVM
aW5rUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAg
ICAgIHZvaWQgbGluaygpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGls
ZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZh
dGVDb21waWxlKENvZGVCbG9jayosIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAv
LyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVj
ay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gZnVuY3Rpb24pCkBAIC0yMjMsNiArMjMyLDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
ICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
ICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlw
ZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVn
LCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVi
bGljOgorICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBH
UFJSZWcpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJS
ZWcpOworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIs
IEdQUlJlZyk7CisKKyAgICAgICAgdm9pZCBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9n
dWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1QwKTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNr
KEp1bXAganVtcFRvSGFuZGxlcikKICAgICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25D
aGVja3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpAQCAtMjU4LDE2ICsyOTMsMTYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bj
b2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3Rf
dmFyYXJncwogICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJh
cmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAg
ICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyop
OworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25z
dHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5r
SW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0
IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAg
ICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2
YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4
NywxNCArMzIyLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJh
cnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRl
QmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9p
ZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0
ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0
aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFi
bGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
dm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAg
ICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVn
cyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1
ZVJlZ3MpOworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2Zp
bGUmLCBHUFJSZWcpOworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVj
b2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcp
OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAg
dm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKQEAgLTMwNSw4ICszNDEsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0
eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+
CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVj
b2RlKTsKIAotICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdp
c3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7Ci0g
ICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2Vs
bEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNl
bGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
Y29uc3QgQnl0ZWNvZGUmLCBwdHJkaWZmX3QsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJ
RCBzY3JhdGNoR1BSKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
RUNNQU1vZGUgZWNtYU1vZGUoT3ApOwpAQCAtNTkzLDcgKzYzMSw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
anN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
QEAgLTYyNywxNCArNjY0LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRS
aWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQ
cml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0
SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAg
IHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9u
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAg
ICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKLSAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7Cisg
ICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2
ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1
cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjQ2LDcgKzY4Myw3IEBAIG5h
bWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1p
dE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3Jp
dGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0
Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNW
YWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKTsKQEAgLTY1NSw2ICs2OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2
b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxS
ZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwog
ICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAg
IGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC02OTYsMjYg
KzczNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5
cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCBy
ZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9H
RVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNy
ZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQ
RShERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVu
a0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVu
dCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2
ZWRDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVz
b2x2ZV9zY29wZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVk
Q2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNk
ZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNv
bHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFD
SF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBE
RUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2
ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhW
TSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwor
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5l
cmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNU
cnV0aHlHZW5lcmF0b3IoVk0mKTsKQEAgLTc2MCwxMCArNzgwLDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwot
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRo
UHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4KLSAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGw+CkBAIC04MjEsMjAgKzg0MSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdH
UFIwLCB0YXJnZXQub2Zmc2V0KSk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4K
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5
cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25U
cmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJh
dGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3Mp
CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdz
Li4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlv
blR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwg
cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0
eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+
CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46
Omhhc1Jlc3VsdCwgdm9pZD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFk
YXRhJiBtZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFy
Z3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFy
Z3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRp
cmVjdENhbGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKG1ldGFkYXRhLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQp
LCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAt
OTE5LDI1ICs5MzksMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7
IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2Fu
QmVPcHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5n
KCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29s
IGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9w
dGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMg
dXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYs
CiAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAg
ICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgog
CisgICAgICAgIHZvaWQgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdp
c3RlcnMoKTsKKworICAgICAgICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAg
ICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJv
b2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5l
ZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQg
aXQgdG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cg
cGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZl
IHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAg
ICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBj
b3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2lu
dGVycHJldGVyOwogCkBAIC05NjQsOSArOTc5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRj
aFJlY29yZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25l
ZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5
QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3Qg
bV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0
aENhbGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEw
MDAsMTEgKzEwMTIsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3Qg
SW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVj
dGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGlt
aXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBi
b29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1f
aml0Q29kZTsKKyAgICAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0
ciB9OworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51
bGxwdHIgfTsKKworICAgICAgICBNYXRoSUNIb2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQ
dHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENvZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29s
IG1fY29uc3RhbnRQb29sOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xv
YmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkg
fTsKKyAgICAgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7Cisg
ICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJh
ZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAg
ICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAg
ICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7
CisKKyAgICAgICAgc3RydWN0IE5vdEFDb2RlQmxvY2sgeyB9IG1fY29kZUJsb2NrOwogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjky
LDEwIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikp
IHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1
bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGlu
dmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0zMjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0z
NzIsNyArMzc1LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQog
ICAgIH0KIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTU3Myw3ICs1NzcsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgCiAKICAgICBlbWl0TG9hZChvcDEsIHJl
Z1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjIsOCBAQCB2b2lk
IEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29w
X25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5lZ2F0ZT4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklU
TmVnSUMqIG5lZ2F0ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7
CisgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJs
b2NrLT51bmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigp
Lm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRk
SklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1
cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBi
ZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJh
bmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlD
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJh
dGlvbkFyaXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91
cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29k
ZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmls
ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBK
SVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAg
ICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwog
ICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAg
Kzk1MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAg
Ym9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywg
bWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsK
ICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQ
cm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAg
IGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFBy
b2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmls
ZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwog
ICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUsMTAgKzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRo
SUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXND
b25zdCgpKQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVn
cyk7CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5h
cml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAg
ICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJl
Z3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aEp1bXBzKTsKIApAQCAtMTA1NSwxMyArMTA2MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Ns
b3coSklUVW5hcnlNYXRoSUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7
CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNo
KQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+
KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+
KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRy
dXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7
CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9u
X0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7
CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBh
dGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhF
bmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwxMyArMTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVw
YXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWlj
Pihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZElt
bVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRp
b25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBs
ZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBh
cml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxz
ZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRj
aEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwor
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNs
b3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExNjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAg
ICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9
ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERpdj4oKS5tX3Byb2ZpbGVJbmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBs
ZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0
T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpA
QCAtMTIxMSw4ICsxMjIwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0
aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVs
SUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE11bD4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUTXVsSUMqIG11bElDID0g
bV9tYXRoSUNzLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRv
TWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFz
dDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9z
dWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3Vi
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyog
c3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5h
cnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tX3Byb2ZpbGVJ
bmRleCk7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRo
UHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rp
b24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVD
YWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19j
YXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCByZWdUMSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Mo
cmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUu
dmFsdWUoKSksIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTksNyArMjU5
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAgZW1p
dExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2Fs
bFJlc3VsdChieXRlY29kZSk7CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBs
YWJlbCgpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQx
LDcgKzM0MSw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAg
ICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAg
ICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgog
I2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBA
IC00NCw3ICs0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2
b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdU
MCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUz
LDE4ICs1NCwxOCBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9j
YWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAg
JiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAh
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxl
U2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQp
CiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAt
c3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwg
Y2hlY2twb2ludCkpOwogCisKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hv
dWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldElu
Y2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJv
ZmlsZUZvcihtZXRhZGF0YSwgY2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJ
RCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6
Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9m
ZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1
Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyAr
NzksNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3Zh
cmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6
Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBj
YWxsTGlua0luZm9Db25zdGFudCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0g
Ynl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5
dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25T
aXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJh
dGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihz
aXplT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJl
Z1QwLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRT
ZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1Qx
KTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsg
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVv
Zih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEw
MywxNiBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAg
IHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAg
ICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0Zy
YW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNl
dCwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRp
b24oc2V0dXBPcGVyYXRpb24sIHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0
LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJv
ZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50Pihz
aXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGlu
Zm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAg
ICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBz
dG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJh
bmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhy
ZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkpKTsKICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6
ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEzMSwxNiBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFs
KGNvbnN0IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3Qg
T3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVz
cyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIo
Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxl
ckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
Lm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7Ci0K
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25DYWxsRXZhbCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7Cisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgZW1p
dFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogCkBAIC0xNDgsNyArMTUyLDcgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7
Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1f
ZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAg
aW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJl
Z2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKQEAgLTE1Niw0MyArMTYwLDQ3IEBAIHZv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAK
ICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVy
KSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJl
Z1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAg
ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAg
ZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNp
Z25lZCkKLXsKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENh
bGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KSB7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxs
KGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRh
aWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNh
bGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0Nv
bnN0YW50KQogewotICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHNo
dWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURh
dGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICBz
aHVmZmxlRGF0YS5udW1Mb2NhbHMgPQorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVm
ZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigp
OworICAgIHNodWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAg
IHNodWZmbGVEYXRhLT5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpOworICAgIHNodWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86
Om51bWJlclRhZ1JlZ2lzdGVyOworICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAg
ICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVn
aXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7Cisg
ICAgc2h1ZmZsZURhdGEtPmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZm
bGVEYXRhLmFyZ3NbaV0gPQorICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAg
ICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAgICAg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9h
cmd2LAogICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVE
YXRhLmNhbGxlZSA9Ci0gICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9y
bWF0SlMpOwotICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVC
bG9jayk7Ci0gICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAg
c2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9y
bWF0SlMpOworICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lz
dGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIAot
ICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlz
LCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAg
ICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxD
YWxsKCk7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7Cisg
ICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNG
YXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlcigqdGhpcywgKnNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsK
ICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNocmlua1Rv
Rml0KCk7CisgICAgaW5mby0+ZnJhbWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEp
OworCiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwog
ICAgIApAQCAtMjE4LDE0ICsyMjYsMjUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJs
b2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciBy
ZXR1cm4uCiAgICAgKi8KLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIGlm
IChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGls
ZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlua0luZm8q
IGluZm8gPSBudWxscHRyOworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0
YW50ID0gVUlOVF9NQVg7CisgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAg
ICAgICBpbmZvID0gbV91bmxpbmtlZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxM
aW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywg
aW5mbyk7CisKKyAgICAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0g
Y2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5k
KENhbGxDb21waWxhdGlvbkluZm8oKSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBt
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0
YW50ID0gaW5mb0NvbnN0YW50OworICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29k
ZSwgaW5mb0NvbnN0YW50KTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAg
IGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0
aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2Rl
SW5kZXgpLmJpdHMoKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0
aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KSArIFRhZ09mZnNldCkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJl
Z1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAtMjM0LDE2ICsyNTMsMTIgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2
YWwoYnl0ZWNvZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGls
YXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBD
YWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9j
YWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1f
Y2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5m
bzsKLQotICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5m
b0luZGV4KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlu
a0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENv
bnN0YW50KGluZm9Db25zdGFudCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0
aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0g
eworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3co
cmVnVDIpOwogICAgICAgICB9KTsKQEAgLTI1MywxMyArMjY4LDEzIEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2Fs
bExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAg
YXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7
CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2Nh
dGlvbiA9IGRvbmVMb2NhdGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVj
b2RlKTsKQEAgLTI3MywyMCArMjg4LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCBy
ZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+
ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlD
U2xvd1BhdGgoKm1fdm0sICp0aGlzLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhS
ZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0z
OTUsMTcgKzQxMCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IElu
CiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5l
eHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBm
YXN0Q2FzZS5saW5rKHRoaXMpOwogfQpAQCAtNDE2LDEwICs0NDQsOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
SXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
ICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOwor
ICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
ICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5v
dENlbGwoaXRlcmF0b3JHUFIpKTsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2Jq
ZWN0KGl0ZXJhdG9yR1BSKSk7CkBAIC00MzIsMTkgKzQ1OCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUp
PihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJn
R1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIG1vdmUoaXRlcmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUs
IEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBuZXh0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihp
ZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiAKICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3Qu
bGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1
bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7
CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00NTIsNyArNDc2LDYgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0
b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0
RnVuY3Rpb24gPSAoWyZdICgpIHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgo
KSkgewogICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3Rf
bmFycm93OwpAQCAtNDcwLDUwICs0OTMsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jf
bmV4dChjb25zdCBJbgogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMp
OwotICAgIG9yOChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9k
ZTo6R2VuZXJpYykpLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRh
dGEuc2Vlbk1vZGVzKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0
b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9u
TW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBy
ZWdUMCk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JO
ZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9k
ZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRl
cmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZh
bmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVl
IH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAg
ICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVn
VDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBn
ZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdpc3RlcjsKKyAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRv
bmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOworCisgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgICAgICBSZWdp
c3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHBy
ZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgp
LnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiks
IEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAg
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0o
KS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisg
ICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwog
ICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwog
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7
CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7Ci0g
ICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgICAgICBHUFJSZWcgc2NyYXRjaDIg
PSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVy
Q2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNo
QWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3Jh
dGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRj
aDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJS
ZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAg
ICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxz
ZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCks
IEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgICAg
ICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJl
Z3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxHUFIpOworCisgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYmFzZUdQUik7CiAK
ICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlO
YW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BS
IH0pOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZh
bHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1
ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmso
dGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1NzcsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9y
TmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xv
YmJlclJlZ2lzdGVyOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9
IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsK
IAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RP
YmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1
bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNh
bGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgp
LnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAgICAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVu
ZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5h
cHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAotICAgICAgICBD
YWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4o
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5v
bkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0
ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihk
b25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1l
bnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworCisgICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKworICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQ
Uik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRl
ckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQo
anVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJv
d0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAgfQogCiAgICAg
eyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJS
ZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2
bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVz
dWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsOCArMzIsMTEgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogCisKIG5hbWVzcGFjZSBKU0Mgewog
CitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKKwogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBDb21t
b25EYXRhOwogY2xhc3MgSklUQ29kZTsKQEAgLTE1OSwxMCArMTYyLDEwIEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgewotICAgICAg
ICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURhdGFJQ0lu
T3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApAQCAtMjIzLDYgKzIyNiw4IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgaXNTaGFyZWQoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlQXR0cmlidXRlID09IFNo
YXJlQXR0cmlidXRlOjpTaGFyZWQ7IH0KIAorICAgIHZpcnR1YWwgUENUb0NvZGVPcmlnaW5NYXAq
IHBjVG9Db2RlT3JpZ2luTWFwKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorCiBwcml2YXRlOgogICAg
IEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFNoYXJlQXR0cmlidXRlIG1fc2hhcmVBdHRyaWJ1dGU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUg
IkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHVi
SW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdh
cmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2Nv
ZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0
VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJs
b2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5m
bygpOworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZv
KGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHVi
SW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJl
Z2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5r
QnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJ
bmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAt
NjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAg
ICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25P
ZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYg
aml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIG1fc3Rh
cnQgPSBqaXQubGFiZWwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMo
bV9qaXRUeXBlKSk7CisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIp
OworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwor
ICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlk
R2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBh
Y2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTEw
LDcgKzExOCw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVn
cyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBl
IGFjY2Vzc1R5cGUpCiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwg
Y29kZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZh
bHVlLCBzdHViSW5mb0dQUikKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lLnVp
ZCgpID09IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAg
ICwgbV9pc0xlbmd0aEFjY2Vzcyhjb2RlQmxvY2sgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09IGNv
ZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAgLTEy
MCw2ICsxMjgsMzUgQEAgdm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQog
ICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nl
c3M6OnNpemVGb3JMZW5ndGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5
QWNjZXNzKCkpOwogfQogCitzdGF0aWMgdm9pZCBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3Mo
SklUJiBqaXQsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBzY3JhdGNo
LCBHUFJSZWcgcmVzdWx0KQoreworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKwor
ICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNl
dCgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWRQcm9wZXJ0eShiYXNlLCBzY3JhdGNoLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdCB9KTsKKyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKwor
ICAgIHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQ
dHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7
Cit9CisKK3ZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKwor
ICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1Yklu
Zm8sIHN0dWJJbmZvR1BSKTsKKyAgICBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3Moaml0LCBz
dHViSW5mb0dQUiwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnNjcmF0Y2gsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsK
KworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCisKIEpJVEdldEJ5SWRXaXRoVGhpc0dl
bmVyYXRvcjo6SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpT
VmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0xMzgsNiArMTc1LDE4
IEBAIHZvaWQgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpnZW5lcmEKICAgICBnZW5lcmF0
ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsK
IH0KIAordm9pZCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5m
b0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBl
KSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50
KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNz
KGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNl
LCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRC
eUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwo
KTsKK30KKwogSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcigKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVS
ZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCAKQEAgLTE0OSw2
ICsxOTgsMzQgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcgogICAg
IG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMuY2xlYXIoc2NyYXRjaCk7CiB9CiAKK3ZvaWQgSklU
UHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0
LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBq
aXQubGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BS
KTsKKworICAgIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwor
ICAgIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDI7
CisgICAgR1BSUmVnIHZhbHVlID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKwor
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0
Y2gpOworICAgIGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBl
cnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkp
OworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAg
aml0LnN0b3JlUHJvcGVydHkoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBiYXNlLCBzY3JhdGNoLCBz
Y3JhdGNoMik7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBza2lwSW5s
aW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRT
dHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hlZC5saW5rKCZqaXQpOworICAgIG1fZG9u
ZSA9IGppdC5sYWJlbCgpOworfQorCiB2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRl
RmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKIHsKICAgICBnZW5lcmF0ZUZhc3RDb21tb24o
aml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eVJlcGxhY2UoKSk7CkBAIC0zMDAsNiAr
Mzc3LDMyIEBAIHZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXQKICAgICBn
ZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2Vz
cygpKTsKIH0KIAordm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQ
UikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7
CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0
dWJJbmZvLCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpiYXNlOworICAgIEdQUlJlZyByZXN1bHQgPSBCYXNlbGluZUluQnlJZFJlZ2lz
dGVyczo6cmVzdWx0OworICAgIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3Rl
cnM6OnNjcmF0Y2g7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQuYm94Qm9vbGVhbih0cnVlLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdCB9KTsKKyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJ
bmxpbmVBY2Nlc3MubGluaygmaml0KTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJ
VFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9k
b25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OkpJVEluc3Rh
bmNlT2ZHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlw
ZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsCiAg
ICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyB2YWx1ZSwgR1BSUmVnIHByb3RvdHlwZSwgR1BSUmVnIHN0dWJJbmZvR1BSLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
aAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYg
RU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJKSVRPcGVy
YXRpb25WYWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCkBAIC0zOCwxMSArMzksMTE4IEBA
IG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNsYXNzIENhbGxT
aXRlSW5kZXg7CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBTdHJ1Y3R1cmVT
dHViSW5mbzsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNz
IEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCitz
dHJ1Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeUlkUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVFbnVtZXJhdG9y
R2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQ
UkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5m
bzo6cmVnVDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9j
ayBhbmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KKyAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7
CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJ
bmZvOjphcmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG8gPSBH
UFJJbmZvOjphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVjdCBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUklu
Zm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBkb250Q2xvYmJlclJlZ2lzdGVyID0gR1BSSW5mbzo6
cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnMgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyB0aGlzVmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVj
dCBCYXNlbGluZUluQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6
cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJl
Z1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVn
VDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBwcm9maWxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJyYW5kID0gR1BS
SW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvciB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAg
LTYyLDEyICsxNzAsMTggQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExp
bmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVm
ZmVyLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3Rh
cnQpOwotICAgIAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklU
JiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIg
fTsKKyAgICB1bnNpZ25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBDb2Rl
QmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVy
ZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwogICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIG1fc2xvd1BhdGhDYWxsOwpAQCAtOTgsNyArMjEyLDcgQEAgcHJvdGVjdGVkOgogICAgIEpT
VmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CitwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0xMTEsNiArMjI1LDcgQEAgcHVibGljOgogICAg
ICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZv
R1BSLCBBY2Nlc3NUeXBlKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9B
c3NlbWJsZXImKTsKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQm
LCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiBwcml2
YXRlOgogICAgIGJvb2wgbV9pc0xlbmd0aEFjY2VzczsKQEAgLTEyNCw2ICsyMzksNyBAQCBwdWJs
aWM6CiAgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5k
ZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVy
LAogICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJl
Z3MgdGhpc1JlZ3MsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKKyAgICB2b2lkIGdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJS
ZWcgc3R1YkluZm9HUFIpOwogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxl
ciYpOwogfTsKIApAQCAtMTMyLDEwICsyNDgsMTEgQEAgcHVibGljOgogICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAotICAgICAg
ICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJl
Z3MgYmFzZSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwg
R1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKKyAgICAgICAgQ29kZUJsb2NrKiwg
SklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCisgICAgICAgIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNo
LCBFQ01BTW9kZSwgUHV0S2luZCk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1h
Y3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
SklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAg
ICAKICAgICBWX0pJVE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsKIApAQCAt
MTYzLDExICsyODAsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAg
SlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsK
IApAQCAtMTkxLDggKzMwNiw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0
aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhK
dW1wOwogfTsKIApAQCAtMjE2LDggKzMyOSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJh
dGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1f
c2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjQxLDggKzM1Miw2IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFi
bGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjU1LDYgKzM2NCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHVi
SW5mb0dQUik7CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
KyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBz
dHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogfTsKIAogY2xhc3MgSklUSW5z
dGFuY2VPZkdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7
CkBAIC0yNzcsOCArMzg3LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVm
ZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7
CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMDIs
MTEgKzQxMCw5IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAg
SlNWYWx1ZVJlZ3MgbV9yZXN1bHQ7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFy
dDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07
CiAKQEAgLTMzMCw4ICs0MzYsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZh
c3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93
UGF0aEp1bXA7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMu
aAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwzOCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVh
bFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25z
dGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorewor
ICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihz
cmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0lu
dDMyKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxS
ZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGlt
ZUNvbnN0YW50KSB7CisgICAgICAgIC8vIEFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxs
cy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0
Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5p
c0NvbnN0YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1Rp
bWVDb25zdGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50
KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFt
ZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1Niwz
NiArMTgxLDM2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKICNl
bmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBs
YXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9u
KTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVy
blZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
SlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwg
cmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJl
dHVyblZhbHVlR1BSKTsKICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFk
YXRhLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFs
dWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAg
ICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVn
KQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFp
c0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIw
NSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBp
bmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNv
ZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2lu
dHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1
dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVs
KCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENo
ZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50
KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwg
IlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBn
ZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQo
bV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2lu
dHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9i
eXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5j
aGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5m
aW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwzMyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omlz
T3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBz
cmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYg
YXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAx
OwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9m
aWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQotewotICAgIEFTU0VSVChzaG91
bGRFbWl0UHJvZmlsaW5nKCkpOwotCi0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJh
dGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8v
IHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFs
dWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQotICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3Iq
IGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVl
UHJvZmlsZS5tX2J1Y2tldHMpOwotICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVz
Y3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwotICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZk
ZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgotfQorICAgIGlmICghc3JjLmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30KKworLy9p
bmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1
ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQorLy97CisvLyAgICBBU1NFUlQoc2hvdWxkRW1p
dFByb2ZpbGluZygpKTsKKy8vCisvLyAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0
aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0CisvLyAgICAv
LyBzdG9yZS4KKy8vI2lmIFVTRShKU1ZBTFVFNjQpCisvLyAgICBzdG9yZTY0KHZhbHVlLmdwcigp
LCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vI2Vsc2UKKy8vICAgIEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRv
cio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2Fk
R1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7CisvLyAgICBzdG9yZTMyKHZhbHVl
LnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7CisvLyNlbmRpZgorLy99CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1l
PGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUs
IHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0
ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsNDEgKzM1Miw0MiBAQCBpbmxpbmUgc3RkOjplbmFi
bGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRh
dGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVj
b2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0
UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSks
IHZhbHVlKTsKKworICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5t
ZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVP
ZmZzZXRGb3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpICsgVmFsdWVQ
cm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7CisgICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwg
QWRkcmVzcyhzX21ldGFkYXRhR1BSLCBvZmZzZXQpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQp
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2
YWx1ZVByb2ZpbGUsIEdQUlJlZyByZXN1bHRSZWcpCi17Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwotfQorLy9pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2Zp
bGUsIEdQUlJlZyByZXN1bHRSZWcpCisvL3sKKy8vICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
dmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKy8vfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CiB9
CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgUmVnaXN0
ZXJJRCBzY3JhdGNoR1BSKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZv
aWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5
dGVjb2RlLCBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgY2VsbEdQ
UiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQogewogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5n
KCkpIHsKICAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMy
KHNjcmF0Y2hHUFIsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgp
KTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNl
dE9mQXJyYXlQcm9maWxlKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJh
eVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklE
IHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAg
ICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwg
QWRkcmVzcyhhcnJheVByb2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0
cnVjdHVyZUlEKCkpKTsKLSAgICB9CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBB
cnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3Jh
dGNoR1BSKTsKIH0KIAogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCkBAIC0zODAsNyArNDEwLDcgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9h
ZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBp
bkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3Rl
ZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxv
YWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTI2LDcgQEAgaW5s
aW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAg
IGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25D
ZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTM2LDcgQEAgaW5s
aW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3Rl
cklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7Cisg
ICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgp
KQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0
LDExICs1NDQsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAg
ICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29s
IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU2OSwxNyBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1f
Ynl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJp
bmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBz
ZXQuCiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNO
dW1iZXIoKSkKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2
YWx1ZSkpLCBkc3QpOwotICAgICAgICBlbHNlCisgICAgICAgIHN3aXRjaCAobV91bmxpbmtlZENv
ZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSkgeworICAgICAg
ICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICAgICAgY2FzZSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZTogeworICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAg
ICBtb3ZlKEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvYWRDb2Rl
QmxvY2tDb25zdGFudChzcmMsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01NjYsMTEgKzU5Nyw2IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25z
dGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFu
dCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkp
OwpAQCAtNTk1LDcgKzYyMSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xv
d0Nhc2UKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAoIW1f
Y29kZUJsb2NrLT5pc0tub3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHZSZWcp
KQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAtNjM3
LDMwICs2NjMsNyBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7
CiAgICAgaWYgKHRhcmdldCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4gbV9j
b2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1BTFdBWVNf
SU5MSU5FIEdldFB1dEluZm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSBieXRl
Y29kZSkKLXsKLSAgICB1bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQgKyAxOyAv
LyBIYXNoTWFwIGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRvciA9IG1f
Y29waWVkR2V0UHV0SW5mb3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGll
ZEdldFB1dEluZm9zLmVuZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+
dmFsdWUpOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2dldFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5
LCBnZXRQdXRJbmZvLm9wZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0aFByb2Zp
bGUgSklUOjpjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0gICAgdWlu
dDY0X3Qga2V5ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpICsg
MSkgPDwgMzIgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0YUlEKTsK
LSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5KTsKLSAg
ICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0aFByb2Zp
bGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAg
bV9jb3BpZWRBcml0aFByb2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJu
IGFyaXRoUHJvZmlsZTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZMaW5l
SnVtcE9mZnNldChpbnN0cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAt
NjgxLDYgKzY4NCw2MSBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQ
CiAgICAgcmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRhZGF0YShj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7
CisgICAgbG9hZFB0cihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2st
Pm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNp
emVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3Moc19tZXRh
ZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRh
VGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0YWRhdGEo
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQor
eworICAgIGxvYWQ4KEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+
bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVz
dWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSB2
YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0
b3JlOCh2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5t
ZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
c3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRh
R1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJs
ZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRh
KGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkK
K3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHNfbWV0YWRhdGFH
UFIsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7
CisgICAgbG9hZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KGNvbnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3Rh
bnQobV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwg
R1BSUmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50
KCkpOworICAgIC8vIE9PUFM6IE1heWJlIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudD8KKyAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVj
dG9yQnVmZmVyKCkpLCByZXN1bHQpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlc3VsdCwgY29uc3Rh
bnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2YoSlNWYWx1ZSkpLCByZXN1bHQpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChj
b25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVG
b3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9m
ZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0
Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC05OTcsNyArOTk3LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogCiAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1w
bGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hK
dW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29y
ZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29y
ZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRU
YWJsZSk7CiAKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9j
aGFyKGNvbnN0IEluc3QKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVz
dGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRl
Y29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAg
IGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDQyLDcg
KzEwNDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAKICAg
ICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhp
cyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07
CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNv
ZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5r
ZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw2ICs0Myw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVmly
dHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwog
bmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTQsMTEgKzU2LDIyIEBA
IHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkg
ewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7
Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3JlNjQoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwotICAg
ICAgICBlbHNlCisgICAgICAgIC8vIE9PUFM6IG1vc3QgIk90aGVyIiBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24gY29uc3RhbnRzIGNhbiBqdXN0IGJlIGdyYWJiZWQgZnJvbSB0aGUgVW5saW5rZWRD
b2RlQmxvY2suIEl0J3MganVzdAorICAgICAgICAvLyBhIGNvdXBsZSB0eXBlcyB0aGF0IGNhbid0
LiBDcmVhdGUgYW4gYWJzdHJhY3Rpb24gZm9yIHRoYXQuCisKKyAgICAgICAgc3dpdGNoIChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpKSB7
CisgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgICAg
ICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6RG91YmxlOiB7CisgICAgICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAg
ICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NG
b3IoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDApOworICAgICAg
ICAgICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODcsMzcgKzEwMCwz
NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmpl
Y3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmlu
YWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50
bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2Rl
OjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1Qw
OwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBz
Y3JhdGNoUmVnID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsK
IAotICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAg
IGVsc2UgewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVy
Zmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmpl
Y3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRv
clJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNs
b3dDYXNlcyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcs
IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92
bSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRv
cigpLCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
TmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJl
Zyk7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVz
dGVkSW1tUHRyKG51bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywg
SklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0
dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0
dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsK
KyAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsK
KyAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSBy
ZWdUMzsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
c3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
TmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTEzMSw3ICsxNDIsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKICAgICAvLyBXZSBkb24n
dCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAg
SnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9I
YXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qx
KTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWws
IHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1f
ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24pKSk7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CiAKQEAgLTE1NCwzMCArMTY2LDM4
IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMg
KGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4K
LSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdp
dGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvdG9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCB2YWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9H
UFIpOwogICAgIAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11
c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJv
bC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZh
bHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3Rh
bmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAg
ICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
cmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEs
IC8vIHByb3RvCi0gICAgICAgIHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3Jh
dGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgIHJlc3VsdEdQUiwKKyAgICAgICAgdmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAg
ICAgICBzdHViSW5mb0dQUiwKKyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpz
Y3JhdGNoMSwgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9m
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0g
ICAgCisKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCAr
MjEyLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9w
dGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJ
bmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRp
b25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BS
MCwgcmVnVDIsIHJlZ1QxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVn
VDEpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09
IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdp
c3RlcnM6OnZhbHVlID09IGFyZ3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9u
PGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rp
b24qKQpAQCAtMjQwLDcgKzI1OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRl
ZmluZWQoY28KIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1
YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwogCkBAIC0zNzQsNyArMzkzLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRP
ZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0
RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwogI2Vsc2UKQEAgLTM4Myw5ICs0MDIsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiB9CiAKICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKQog
ewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBqaXQuY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZl
c0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOwpAQCAtNDExLDcgKzQzMCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2
ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQsOSArNDUyLDEw
IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZvaWQgSklUOjpl
bWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
ZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFt
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0ODQsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFs
c2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1Qw
LCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxP
YmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNl
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNGYWxzZXlHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0
MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzUwMSw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9u
cyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAog
ICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyArNTQwLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8vIEZpcnN0LCBo
YW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24g
dGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJy
YW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwog
ICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CiAKQEAg
LTU0Myw3ICs1NjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1
CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Mo
cmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7
CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTU4MiwxNSArNjAzLDEz
IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KIHZvaWQgSklUOjpl
bWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEpTVmFsdWUg
c3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9p
bnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
LSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0
ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICBsb2FkQ29kZUJsb2NrQ29u
c3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAgIENDYWxsSGVscGVy
czo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9y
ZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNvZGUsIE9wSm5lcVB0cjo6TWV0YWRh
dGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwog
ICAgIGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC02MjUsOCArNjQ0LDEwIEBAIHZvaWQgSklUOjpl
bWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBK
U1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsK
KyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTY0MCw3ICs2NjEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNjk1LDcgKzcxNiw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAgICAganVtcFRvRXhj
ZXB0aW9uSGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTcxMSw3ICs3MzMsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfdGhyb3df
aGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBh
cmd1bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB0aHJvd25WYWx1ZUdQUiA9IGFyZ3Vt
ZW50R1BSMTsKQEAgLTcyMCw3ICs3NDIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAK
ICAgICBqaXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgYXJndW1lbnRHUFIwKTsKLSAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKGFyZ3Vt
ZW50R1BSMCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKGFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwpAQCAtOTA4LDcgKzkzMCw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05
MTgsNyArOTQxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVx
PigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsK
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCkBAIC05MzEsNyArOTU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
bnVtYmVyKGNvbnN0IEluc3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk3NSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVn
VDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBp
ZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dFZSZWcpOwogfQpAQCAtOTc4LDcgKzEwMDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmpl
Y3QoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChz
cmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJl
Zyk7CiB9CkBAIC05OTMsNyArMTAxNywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25z
dCBJbnN0cnVjdGlvCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JD
YXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJ
bW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNl
dCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihj
b2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gT09QUzogVGhpcyBp
c24ndCBlbGVnYW50LiBXaHkgYXJlbid0IHRoZXkgaW4gdGhlIGNhbGxlZSBzYXZlIGJ1ZmZlci4g
SSBndWVzcyBiZWNhdXNlIHdlIGNhbiBPU1IgZXhpdCBoZXJlPworICAgIGVtaXRNYXRlcmlhbGl6
ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKICAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRj
aGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzgsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5
cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwot
ICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0o
KSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVl
UHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQ
cm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBP
U1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRp
b25IYW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAo
YnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVh
Y2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdz
KTsKLSAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBA
IC0xMDUzLDggKzEwNjgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IElu
c3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVl
OwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRy
YWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBU
YWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVs
dE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1
cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5NiwxNCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1w
bGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRh
YmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpD
aGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxl
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4
LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBl
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5t
X21pbik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQog
CkBAIC0xMDk5LDIwICsxMTE1LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmco
Y29uc3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1
dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
IGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJ
bmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmlu
ZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQ
dHJUYWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJl
cXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5v
RGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUu
bV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBA
IC0xMTMzLDcgKzExNTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3Ry
dWN0CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsK
QEAgLTExNDgsNyArMTE2Niw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5z
dHJ1Y3QKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTY2
LDcgKzExODMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAK
ICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdU
MCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAg
LTExODgsMTIgKzEyMDUsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1
Y3RpbwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFs
aXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMs
IHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGlt
ZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBtX2NvZGVC
bG9jay0+bnVtVmFycygpOworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2st
Pm51bVZhcnMoKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9yIChzaXpl
X3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJs
b2NrKTsKKyAgICAKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDApOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAgZW1pdEVu
dGVyT3B0aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCkBAIC0xMjEyLDcgKzEyMzEsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3Bf
ZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVn
aXN0ZXJzOjplYnApOwpAQCAtMTMxMCwyMyArMTMyOSwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0
cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVy
ZUlELCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRvVGhpczo6
TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJyaWVyQmFz
ZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAg
ICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFS
ZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAtMTM0Miw3
ICsxMzU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAg
IGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJv
dG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBh
bGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25S
YXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlv
bjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNoZWRGdW5j
dGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wQ3JlYXRlVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkQ2FsbGVlKCksIGNhY2hl
ZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQ
dHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11
bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVx
dWFsLCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxl
Q2FsbGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzg3LDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdz
IHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzk4LDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
cT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVn
VDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJu
VmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwg
cmV0dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDExLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQyMiw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJl
Z1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzNywxMSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25J
bnN0YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
b25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRH
UFIzKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVy
blZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiB9CkBAIC0xNDMwLDcgKzE0NTAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVy
bkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BI
aW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYgKFVOTElL
RUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYg
bV91bmxpbmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlS
ZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhl
Y3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCByZWdUMCk7
CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCByZWdUMCwg
VHJ1c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQo
KSkpOwpAQCAtMTQ0MCw3ICsxNDYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNv
bnN0IEluc3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRpZgotICAg
ICAgICBtb3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRSZWdzKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsxNDczLDkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAgLy8gRW1p
dCB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkp
IHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8s
IFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgp
KSwKLSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklU
RXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENvZGVCbG9j
azo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAtMTUwOSw3
ICsxNTMwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1l
bnRHUFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9
IGFyZ3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTE1MjIsNyArMTU0NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9jaGVja190cmFwcyhjb25zdCAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9jaGVja190cmFwc19oYW5k
bGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVi
cCk7CkBAIC0xNTY0LDM0ICsxNTg2LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAo
Y29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQocmVnZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBhcmd1bWVudEdQUjA7CisgICAg
bG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29kZUJsb2Nr
LT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1
bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBK
dW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3Bl
LCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1
bWVudEdQUjEpOwogI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1f
Y29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1
dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpG
dW5jdGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pihi
eXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFy
Z3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5
bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19h
c3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBk
c3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0x
NjIxLDIzICsxNjQ1LDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3Qg
SW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BS
MSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7
CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAj
ZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+
ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHBy
LCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9m
dW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIp
OwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29k
ZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3Jf
ZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNf
ZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdf
YXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24p
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAK
QEAgLTE2NjQsMjkgKzE2ODksMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVy
YXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2
OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFBy
b2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAot
ICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIyKTsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9z
aXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhTaXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVj
b2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlv
blByb2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1Qw
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywgcmVnVDIs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTQsOCArMTcy
MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CisgICAgLy8gT09QUzogVHVybiBvZmYgc2hhcmluZyB3aGVuIHR5cGUgcHJvZmls
ZXIgaXMgb24uCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
cm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0g
bWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9m
aWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE3NzcsMjAgKzE4
MDQsMjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIHN0
YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAi
d2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwog
ICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFS
ZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIu
Ci0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7
CisgICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlz
IG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAgIEdQUlJlZyBzY3JhdGNo
MlJlZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNo
YWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIp
LCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7Cisg
ICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QxKTsK
KyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVS
ZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkp
OwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJv
ZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKKyAgICAvLyBPT1BTOiBUdXJuIG9mZiBzaGFyaW5nIHdoZW4gY29udHJvbCBmbG93IHByb2Zp
bGVyIGlzIG9uLgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Js
b2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsK
QEAgLTE4NjAsNyArMTg5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25z
dCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxOTE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAj
aW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNv
bW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRl
ICJERkdPU1JFbnRyeS5oIgpAQCAtMjg1NSw3ICsyODU2LDcgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRh
YmxlLm1fY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwogCkBAIC0yODgwLDcgKzI4ODEs
NyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1
ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJh
c2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2st
PnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAg
dm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJbnQzMigpKQpAQCAtMjkwMyw3ICsyOTA0LDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdm9pZCogcmVzdWx0Owot
ICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJ
bXBsKiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZhbHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyAr
MzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRH
UFJSZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3lt
Ym9sID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNp
b24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwxMDIgQEAgbmFtZXNwYWNlIEpTQyB7
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAot
ICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0
QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlv
bnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBu
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAg
ICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNo
R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAot
ICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAg
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJl
c3VsdFJlZ3MsIHJlZ1QyKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKwogICAgICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgICAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7
CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
ICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKwor
ICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1f
Z2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
T3Bjb2RlVHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bj
b2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYgKCFoYXNBbnlTbG93Q2FzZXMo
aXRlcikpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAotICAgICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4Kytd
OworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlW
YWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBtb3ZlKEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgbW92ZShCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQotICAgICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRl
Y29kZUluZGV4KTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gYXJndW1lbnRHUFI0OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gYXJndW1lbnRHUFI0OworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zm
c2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICAgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChwcm9w
ZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwotCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eVZhbE9wdGltaXplKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEg
YWxyZWFkeSB1c2VkLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50
R1BSMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlID09IHJlZ1QwKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5ID09IHJlZ1QxKTsKKworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOworICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJu
VmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ5LDcgKzE1
OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKQEAgLTE2MCw4ICsxNzAsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQ
UjU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2Vy
dChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0xODcsMzQgKzE5Nyw0MCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVy
dHlHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cmVzdWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlW
YWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5k
KGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAg
ICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBA
IC0yMjMsOSArMjM5LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1l
KGMKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFt
ZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1MywyMCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRl
TmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBA
IC0yNjQsNyArMjc2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmpl
Y3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBE
RkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmpl
Y3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
LSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0
dXJuQWRkcmVzcygpOwpAQCAtMzAwLDIxICszMTIsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0
X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1f
YnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgYnJhbmRHUFIg
PSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwotCiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNz
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAg
YWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBX
ZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ug
d3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC0zMjQsMTcgKzM0MywyMiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9i
cmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5z
dHJ1Y3Rpb24pOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVFByaXZh
dGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3By
aXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdU
MTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFu
ZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJh
dGlvbihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
YXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTM0NCwy
NCArMzY4LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFy
ZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdp
c3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAg
fHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVu
dEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1Yklu
Zm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0
aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFy
Z3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFu
ZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
U2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMTkgKzM4OCwyOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUu
bV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6
OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5k
R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklU
UHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFu
ZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVu
ZChnZW4pOwogfQogCkBAIC0zOTQsOSArNDIxLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9j
aGVja19wcml2YXRlX2JyYW4KICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGlt
aXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbihBZGRyZXNzKGFy
Z3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTQwNiwyNCArNDM1LDE4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2Vk
LgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwog
ICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7
CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9H
UFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0
eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywg
RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+
OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsK
LSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJpdmF0
ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNSwzMCArNDU4
LDQyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxl
KSwgcmVnVDMpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdU
MywgcmVnVDQpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHByb2ZpbGVHUFIpOworICAgIG1hdGVyaWFs
aXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkFy
cmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVS
ZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIsIHN0
dWJJbmZvR1BSKTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAg
ICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1Yklu
Zm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRL
aW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2Rl
ID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlW
YWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0
aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MDksMTIg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1v
ZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAg
ICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAg
ICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00
OTgsNyArNTMwLDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkK
IAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1
cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZh
bFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
NCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5
VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1
KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWw6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIGNhbGxPcGVyYXRpb24o
QWRkcmVzcyhhcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMywgYXJndW1lbnRHUFI0LCBhcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtNTEyLDcgKzU1Myw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVn
VDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0
X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICAgICBDYWxsIGNhbGw7CiAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9k
ZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSk7CkBAIC01MjMsNyArNTY0LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQpAQCAtNTMzLDE4ICs1NzQsMjQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSByZWdUNTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxl
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgeworICAgICAgICBSZWdpc3Rl
clNldCB1c2VkKEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5LCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZSwg
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZSk7CisgICAgICAgIEFTU0VSVCghdXNl
ZC5jb250YWlucyhyZWdUNCkpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDUp
KTsKKyAgICB9CisKIAogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQ
Uik7CkBAIC01NzAsMjAgKzYxNywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9u
YW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0
dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhy
ZWdUMiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcs
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmllbGRQ
dXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBz
dHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1f
cHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1
cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTk0LDggKzY1
Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVO
YW1lPigpOwotICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0
S2luZDsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgIEpJVFB1
dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAK
QEAgLTYwMywxMyArNjYwLDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9u
YW1lKGMKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgYXV0byBv
cGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVBy
aXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRp
bWl6ZTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgLy8gVGhleSBhcmUgY29u
ZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7Ci0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBn
ZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKKyAgICBQcml2
YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1l
bnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbihBZGRyZXNzKGFyZ3VtZW50
R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRzR1BSMywgYXJndW1l
bnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTYyMiwxOCArNjgyLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
cmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpA
QCAtNjQzLDE0ICs2OTcsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFn
UmV0dXJuQWRkcmVzcygpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFs
dWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1QzOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIApAQCAtNjgwLDcgKzczNCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0
aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
b3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02ODksNyArNzQ0LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRp
b25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1w
bCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBv
cHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVy
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02OTksNyAr
NzU1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGlu
dDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVy
LCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC03MDksNyArNzY2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0
cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcxOSw3ICs3Nzcs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJf
dCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJC
eVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTcyNywyMyArNzg2LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIg
PSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnNj
cmF0Y2g7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKICAgICBKSVREZWxC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpE
ZWxldGVCeUlEOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJv
b2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBj
YW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlz
IGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9m
IHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNzU5
LDE1ICs4MjgsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52
YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
Y2FsbE9wZXJhdGlvbihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVk
SW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC03ODEsMjQgKzg1MiwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRH
UFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9H
UFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5
SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
bkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTgwOCw3ICs4NzQsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC04NDUsMjIg
KzkxMSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDAp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFz
ZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdU
MSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIs
IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1i
YXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVy
cyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3
cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtODgzLDkgKzk2MCwxMSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uKEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIFRydXN0ZWRJbW0zMihieXRl
Y29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTg5OSwyNCArOTc4LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFs
KGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIz
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfdmFsX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2Fs
bCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVs
ZXRlQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkp
OwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC05MjYsNyArMTAwMCw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAg
LTk2MSwyMiArMTAzNSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0
IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRC
eUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5m
b0dQUiwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTk4NiwxNCArMTA2OSwx
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BS
Mik7CisgICAgY2FsbE9wZXJhdGlvbihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwMDMs
MjYgKzEwODksMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwog
ICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIx
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpLCBkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25UcnlHZXRCeUlkT3B0
aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDMwLDIyICsxMTEwLDMxIEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
LQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0
KTsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBy
ZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NU
eXBlOjpHZXRCeUlkRGlyZWN0KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMDU0LDE2ICsxMTQzLDE4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkRGlyZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJ
ZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xMDczLDgzICsxMTY0LDYxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fz
c2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRp
bWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5
SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVn
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
cmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVz
dWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAg
CiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJh
bmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5t
b2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJh
eUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwg
cmVnVDEpOworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9m
ZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1v
ZGUgPSBicmFuY2gzMihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpv
ZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpv
ZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90
QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNz
VHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVn
ID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5
cGU6OkdldEJ5SWQpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7Ci0KLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5k
KGdlbik7CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2ICsxMjI3LDE4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAg
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSht
ZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3NywyNiArMTI0OCw1
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBh
cmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IGFyZ3VtZW50R1BSMzsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwg
cHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFs
dWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhp
c1ZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQp
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworCisgICAgSklUR2V0QnlJZFdpdGhU
aGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7
CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCkBAIC0xMjA2LDcgKzEzMDgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
CiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMjQxLDE2ICsxMzQzLDE5IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBv
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJl
Z1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTI2MCwyOCArMTM2NSwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IHJlZ1Qx
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlz
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodGhpc0dQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkp
OwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjkxLDcgKzEzOTAsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBA
IC0xMzI5LDIzICsxNDI4LDM3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJ
bnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9v
bCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICAvLyBJbiBvcmRlciB0
byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zm
c2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1
bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5k
IHdlIGdlbmVyYXRlIGNvZGUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNl
dCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aEdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJhc2VWUmVnLCBiYXNlR1BSLCB2YWx1ZVZSZWcsIHZhbHVlR1BSKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDMsIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAg
ICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OlB1dEJ5SWQ7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBkaXJlY3QgPyBQdXRLaW5k
OjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0g
ZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlJZHMu
YXBwZW5kKGdlbik7CiAgICAgCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0
aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMTM1OSwxNCArMTQ3Miwx
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAgICAg
CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRl
eCsrXTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbihBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3NiwyNSArMTQ5MywxOSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0g
YXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVy
dHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4u
c2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
Z2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCkBAIC0xNDA0LDcgKzE1MTUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgog
ICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGds
b2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGpp
dC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQxLDIwICsxNTUyLDMxIEBAIHZvaWQgSklUOjpl
bWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1Qw
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlk
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTg1LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2lu
QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbihBZGRyZXNzKGFyZ3VtZW50
R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0
VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTE0ODAsMjggKzE2MDUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X2lkKGNvbnN0IElucwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFz
ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAg
IHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICAvLyBz
bG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hh
dCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVw
bGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwg
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7
Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxMCwyNSArMTYyOSwzMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUzNywxNSArMTY2NCwxOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNb
bV9pbkJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6
Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24o
QWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
YXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMTU1Niw1OSArMTY4Niw3MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlf
dmFsKGNvbnN0IEluCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1l
bnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3Rh
dGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxp
emVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV92
YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAg
ICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBq
dXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpLCBkZWNsdHlwZShvcGVy
YXRpb25HZXRCeVZhbE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNl
Ci0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5
cGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisKKyAgICBKSVRJbkJ5VmFsR2VuZXJhdG9y
IGdlbigKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IHR5cGU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQo
Z2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSB0eXBl
KQordm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlIHR5
cGUpCiB7Ci0gICAgQVNTRVJUKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwg
dHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIFVOVVNFRF9QQVJBTShi
YXNlKTsKKyAgICBVTlVTRURfUEFSQU0ocHJvcGVydHkpOworICAgIEFTU0VSVF9VTlVTRUQodHlw
ZSwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBt
X2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJh
dGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBh
cmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3Vt
ZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc1OSwyMSBAQCB2b2lkIEpJVDo6ZW1p
dEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVy
dHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6
ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwog
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZh
dGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFz
UHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwot
ICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRp
b25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3
ICsxNzg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xv
dyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRI
YXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5t
X3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNjY2LDE5ICsxODAxLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNf
cHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0g
ICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2
YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNv
ZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICghbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52
YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9i
amVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6
b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0
aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mp
OworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVn
VDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2ODgsNiArMTgy
Niw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3MDEsNyArMTg0
MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAg
IEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJs
b2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDEp
OwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBv
Y2gsIHJlZ1QxKTsKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4NTQsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2Nv
cGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJl
c29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25z
dGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CiAgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTE3OTQsODcgKzE5MzMsMTA1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUo
Y29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJl
c29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNv
bHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBt
X2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdCht
X2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJvZmlsZSBj
ZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdp
bGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5t
X2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50
KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0
ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgICAg
ICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CisKKyAgICAgICAgYXV0byBjbG9z
dXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9w
X3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhciIpOworICAgICAgICB9OwogCi0jZGVmaW5lIFJFU09M
VkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2
ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShSRVNPTFZF
X1NDT1BFX0dFTkVSQVRPUikKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6
OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyIpOwogICAgICAgICB9OwotI3VuZGVmIFJFU09MVkVfU0NPUEVfR0VORVJB
VE9SCisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0gW10gKFZN
JiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmlj
Iik7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9
IHJlZ1Q3OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CisgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlw
ZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xv
c3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICBjb2RlID0g
dm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNS
ZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBj
b25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25h
bDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAg
ICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3
aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3Mg
dGhydSB0byBzbG93IHBhdGguCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIg
PSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVB
U0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAot
ICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0g
ICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRh
YmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Cisg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRh
VGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAK
ICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNr
ID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0
R1BSID0gSW52YWxpZEdQUlJlZykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsm
XSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9
IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZh
bGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAgICAg
ICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxP
YmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNl
dDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAg
fTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAg
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9s
b2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOworICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1Qw
KTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAgICBMYWJl
bCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QxKTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBKdW1w
IGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAgewotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJl
Z1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAg
ICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAg
ICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICAgICAgaml0
Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1p
dENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEyICsyMDM5
LDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVG
b3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAg
ICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
LSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9i
amVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNU
X09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEp
OwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNz
KGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BS
LCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQ
Uik7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
MzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2Jh
bExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xv
YmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7
CisgICAgICAgICAgICBqaXQubW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEgKzIwNTQsMTEgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpj
b25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciou
Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRv
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBy
ZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykK
LSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0Ojpv
ZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkds
b2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsyMDY2LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1p
dFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMjA3Niw0NSBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0g
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlm
IChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0g
Q2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7
Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAg
ICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGlu
ayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0
YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDApOwogCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
LSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBhdXRvIGVtaXRD
YXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAgICAgICAgICAgSnVtcCBu
b3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29s
dmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgbm90Q2FzZS5saW5r
KCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAg
ICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0
eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBlbWl0Q2Fz
ZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsK
ICAgICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRo
dW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29w
X3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2Us
IENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2Fz
ZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2Rl
ZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZlX3Njb3BlXyMj
cmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29u
c3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpIFwKLSAg
ICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAg
cmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNl
bGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFD
SF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERF
RklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkK
IHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkg
d29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRoIGFscmVhZHkg
cHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAtMjA2NSw2ICsy
MTg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3Bl
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTIxNzgsNyAr
MjI5OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTIxODYsOSArMjMwNiw5IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0
RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRG
cm9tU2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiAj
ZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTIxOTYsNDEgKzIzMTYsNTAgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21T
Y29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIFJl
c29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09
IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0
KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91
bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJl
bnRJbnN0cnVjdGlvbik7CisKKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0m
IHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2
bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7
CisgICAgfTsKKworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5l
cmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRG
cm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNl
bGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAgICBhdXRv
IGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJl
dHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAi
QmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCiAgICAgY29u
c3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NvcGVHUFIgPSByZWdUNjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0gICAgICAg
IHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZt
ZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lz
ZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0
YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVj
b2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9w
X2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGlj
IGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9F
QUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAgIH07Ci0j
dW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNl
dCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNl
dCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29k
ZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBj
b2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNlIGlmIChw
cm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQor
ICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1Yihn
ZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKGNv
ZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpn
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0
IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJl
c29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8v
IFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGgg
dGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCkBAIC0yMjM5LDk5ICsyMzY4LDg4IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0
RnJvbVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0g
cmVnVDc7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVB
U0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAot
ICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAgaml0
LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdU
MywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0
cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBh
dXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGlu
dDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAgICAgICAg
bW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVz
dFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0
dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9
IFsmXSAoR1BSUmVnIHNjb3BlR1BSKSB7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSks
IHJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgIGpp
dC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwogICAg
IH07CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAo
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1Qz
KTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9i
YWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNs
b3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0
OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNo
cG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1
YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBlbWl0R2V0
VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAg
ICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAg
IGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KICAgICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFy
ID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7CiAgICAgICAgIHN0
YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBsc2hpZnQ2
NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2NvcGVHUFIs
IG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CisgICAgICAgIGpp
dC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOworICAgICAgICBqaXQuYWRk
UHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhv
cGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJl
Z1QwKTsKICAgICB9OwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8gZW1pdENv
ZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRM
b2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBz
aW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2Jh
bE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9y
IHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hl
Y2soc2NvcGVHUFIpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2lu
Y2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxP
YmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0
aGUgdmFyIGluamVjdGlvbi4KIAogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0g
cmVnVDA7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwogICAg
ICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKICAgICAgICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwogCi0gICAgICAgICAgICBqaXRBc3NlcnQo
c2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwot
ICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQ
dHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQoc2NvcGVk
TGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAg
ICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGppdC5i
cmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgb2Zmc2V0KTsKICAg
ICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNP
dXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZElt
bTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVh
c29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGlu
ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJh
bmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9m
TGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zm
c2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmpp
dCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihv
ZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwot
ICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQs
IChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJl
c3VsdCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgaml0Lm5lZzMyKG9mZnNl
dCk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwor
ICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0Vp
Z2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
LCByZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBH
bG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
ICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAg
ICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFy
RnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCks
IHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJv
bVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Cisg
ICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCByZWdU
Myk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFk
YXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwogICAgICAgICAg
ICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVt
cCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBNb2R1bGVWYXI6CkBAIC0yMzQxLDg2ICsyNDU5LDYzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJl
c29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9F
bmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBp
bnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENv
ZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwotCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1p
dENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQot
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUg
PT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgq
cmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRh
ZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8g
VDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAg
ICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQ
cm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAg
ICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQ
dXRJbmZvKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5v
dEdsb2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsoJmppdCk7
CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0LmJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBKdW1wIGlz
R2xvYmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFBy
b3BlcnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
LSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Ms
IHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAg
bm90R2xvYmFsTGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqdW1wKCkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICB9CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsK
IAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAg
ICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAg
IHN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRh
ZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFk
YXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNl
dE9mRmlyc3RCdWNrZXQoKSkpOwogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENU
SVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZl
ci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtO
YW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29s
dmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3Bf
Z2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsg
XAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJl
c29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0
KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhy
ZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZV8iICNyZXNvbHZlVHlwZSk7
IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dF
TkVSQVRPUikKLSN1bmRlZiBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Nj
b3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRo
aXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBi
ZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2Jh
bE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAg
IC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2Jh
bE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUo
WDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTI0NDksNyArMjU0
NCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBDYWxs
IG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgSnVtcCBleGNlcHRp
b25DaGVjayA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0pOwogCi0gICAg
aml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJl
Z1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBNZXRhZGF0YTo6b2Zmc2V0
T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAg
IGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2XzY0KQpAQCAtMjQ3MSw4NiArMjU2Niw3NiBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFi
bGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0
KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0K
LXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVz
c09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJl
Y3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVt
aXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdU
MSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRD
bG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVn
VDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxl
cygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3Bl
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdl
dFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJf
dCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5t
X29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBlIHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0g
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUg
c3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAgICAg
ICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhl
IHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCByZWdUMSk7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisKICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKIAogICAgICAgICAg
ICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVh
bCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0g
ICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CisgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsK
KyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIo
cmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVn
VDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBz
dG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAg
ICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2Fz
ZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0g
SlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxv
Y2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsK
LSAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0
aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKyAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29s
dmVUeXBlLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisK
KyAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8u
aW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFy
IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBi
ZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBz
dGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQot
ICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVj
dExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUlu
ZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRh
ZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworCisg
ICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1p
dE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFk
ZHJlc3MocmVnVDApKTsKKworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6
CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNs
b3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVn
VDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDApOworICAgICAg
ICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0
ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
cmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJlZ1QwLCByZWdU
MiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkp
KTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoK
QEAgLTI1NjQsNTggKzI2NDksNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNv
bnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
LSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVU
eXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlz
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8g
cHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAg
ICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRo
aXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lw
VG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZh
ci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUg
dGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBw
cm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIs
CisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIKKyAg
ICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBp
cyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAv
LyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsK
KyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikK
KyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9m
aWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAg
ICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZWxz
ZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDAp
OwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVt
aXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7
CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsK
KyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIu
bGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24g
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAg
IG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxp
bmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAg
ICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAg
ICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTggKzI3MDMsMjEgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2Nv
cGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5
dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIp
IHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAg
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElmIGFu
eSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENvZGVC
bG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFyLgog
ICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRl
X2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2UgewogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1bWVu
dEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQp
ID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAg
IEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAgLTI2NTIsNyArMjczNCw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1
c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjcwMSw3ICsyNzgzLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVj
dEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKQEAgLTI3NTksNyArMjg0MSw2IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpAQCAt
Mjc2Nyw3ICsyODQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNv
bgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVy
bmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
Z1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI4MjMsNyAr
MjkwNCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG8KIHZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAg
LTI4MzksMTEgKzI5MTksMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNv
bnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlzIGlzIHRoZSBt
b3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBjYXNlIGl0IGlm
IHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRhZGF0YS5tX2VudW1lcmF0
b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUp
IHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9lbnVt
ZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVN
b2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVu
ZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoKH5KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpICYgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcEVudW1lcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEo
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdG9y
ZThUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JOZXh0OjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CisKICAgICAgICAgbG9hZDMyKEFk
ZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgaW5kZXhHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBl
bmQoYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSkpKTsKIApAQCAtMjg4MSw3OCArMjk2Nyw4NyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0
b3JHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAg
YXV0byByZXN1bHRHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVy
YXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRC
eVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9
IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3Rl
cnM6OnNjcmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwg
c2NyYXRjaDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBwcm9w
ZXJ0eUdQUik7CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9l
bnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BF
bnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgp
LCBzY3JhdGNoMik7CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIpOworICAgIHN0b3JlOFRv
TWV0YWRhdGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRh
dGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJh
c2VHUFIpKTsKICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgot
ICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
Z1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlzTm90
T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzY3JhdGNoMywgVHJ1c3Rl
ZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3RydWN0
dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qz
KTsKLSAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qz
LCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVy
ZUlET2Zmc2V0KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHNj
cmF0Y2gxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5j
aDMyKE5vdEVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21wdXRl
IHRoZSBvZmZzZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDMpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJZiBp
bmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2Us
IHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsK
LSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQorICAgIEp1bXAgb3V0
T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhz
Y3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9m
ZnNldCgpKSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAg
ICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5h
cHBlbmQoanVtcCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAg
b3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSwgcmVnVDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihy
ZWdUMywgcmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gxLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBz
Y3JhdGNoMik7CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNj
cmF0Y2gyLCBzY3JhdGNoMik7CiAgICAgY29uc3RleHByIGludHB0cl90IG9mZnNldE9mRmlyc3RQ
cm9wZXJ0eSA9IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0YXRp
Y19jYXN0PGludHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwg
cmVzdWx0R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1l
c0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNl
cy5hcHBlbmQoanVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7Ci0g
ICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5P
d25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9y
TWV0YWRhdGEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCks
IGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVy
YXRvck1ldGFkYXRhKCkpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7
Ci0gICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0
ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgSnVt
cCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0z
MihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVwbGFj
ZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9wZXJ0
eUdQUik7CiAKICAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAogICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
dHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAogICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTYxLDEwICszMDU2
LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVy
YXRlR2V0QnlWYWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdl
dEJ5VmFsPigpLCBpdGVyKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5
cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9o
YXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNv
bnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2Fz
ZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlv
blR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2Rl
LCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7CkBAIC0yOTczLDcgKzMwNjcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9y
X2hhc19wcm9wZXJ0eUltCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJl
c3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRh
dGEoKSwgcmVnVDEpOworICAgIG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFk
YXRhKHJlZ1QxLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0
b3JNZXRhZGF0YSgpKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1
cmVNb2RlKSkpOwogCkBAIC0zMDYyLDYgKzMxNTgsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lcgogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0
aGlzKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQorewor
ICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwg
b3duZXIsIHNlbGVjdFNjcmF0Y2hHUFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsK
KyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDkgKzIzNiw5IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgIGlm
IChpc0pTQXJyYXkoYmFzZUNlbGwpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNh
Y2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKICAgICAgICAgICAgICAgICAgICAgJiYgc2xv
dC5zbG90QmFzZSgpID09IGJhc2VDZWxsCi0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFj
Y2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihi
YXNlQ2VsbCkpKSB7CisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNo
ZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJh
c2VDZWxsKSkpIHsKIAotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxp
bmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxK
U0FycmF5Kj4oYmFzZUNlbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRD
b2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywg
c3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6
aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5m
by5pbml0QXJyYXlMZW5ndGgobG9ja2VyKTsKQEAgLTI0OSw4ICsyNDksOCBAQCBzdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0
aCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNl
Q2VsbCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2Fj
aGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2Fj
aGVhYmxlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKSkgewotICAgICAgICAgICAgICAgICAgICBib29s
IGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3Ro
KHN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hl
YWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKSkgeworICAgICAgICAgICAgICAg
ICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3Ry
aW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pOwogICAgICAgICAgICAgICAgICAgICBpZiAo
Z2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRC
eUZ1bmN0aW9uKGtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRT
dHJpbmdMZW5ndGgobG9ja2VyKTsKQEAgLTMwNCw3ICszMDQsNyBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hw
b2ludFNldCgpCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpCiAgICAgICAgICAgICAgICAgJiYgIWxvYWRUYXJnZXRGcm9tUHJveHkp
IHsKLSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGlu
ZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoY29kZUJsb2NrLCBz
dHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAg
ICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICBMT0dfSUMo
KElDRXZlbnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0g
YmFzZVZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGlu
Z1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTcz
MSwxMSArNzMxLDExIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5KEoK
ICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVu
dCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAg
ICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFj
ZShzdHViSW5mbywgc2xvdC5jYWNoZWRPZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYg
SW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBz
dHViSW5mbywgc2xvdC5jYWNoZWRPZmZzZXQoKSkKICAgICAgICAgICAgICAgICAgICAgJiYgIW9s
ZFN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAgICAgICAgICAgICAg
ICAgICAgICYmICFpc1Byb3h5KSB7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
U2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9m
ZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0g
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHVi
SW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IExPR19JQygoSUNFdmVudDo6UHV0QnlTZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlh
dGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKQEAg
LTExMzIsNyArMTEzMiw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnko
CiAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2UKICAgICAgICAgICAg
ICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0
dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgICAgICAgICBi
b29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNj
ZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVk
Q29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoY29kZUJsb2Nr
LCBzdHViSW5mbywgc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29k
ZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxm
UGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0g
YmFzZSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9w
ZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBAIC0xNTUyLDcg
KzE1NTIsNyBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAKIHZv
aWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwg
YXQgIiwgY2FsbExpbmtJbmZvLmZhc3RQYXRoU3RhcnQoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQ
b2ludGVyKCZjYWxsTGlua0luZm8pKTsKICAgICAKICAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlu
a0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQu
aCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNp
ZGVTdGF0ZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21t
b25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJv
ckhhbmRsaW5nU2NvcGUuaCIKQEAgLTM3MCw2ICszNzEsMTUgQEAgaW5saW5lIGJvb2wgaml0Q29t
cGlsZUFuZFNldEhldXJpc3RpY3MoVgogICAgIAogICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsVmFs
dWVQcm9maWxlUHJlZGljdGlvbnMoKTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAh
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklU
Q29kZT4gYmFzZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5s
aW5rZWRCYXNlbGluZUNvZGUpIHsKKyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJTaGFyZWQgdmlh
IExMSW50Iik7CisgICAgICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxp
bmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29kZUJs
b2NrLT5qaXROZXh0SW52b2NhdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJl
YWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5
SklUQ29tcGlsZSIsICgidGhyZXNob2xkIG5vdCByZWFjaGVkLCBjb3VudGVyID0gIiwgY29kZUJs
b2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJlIGxpZnRlZC4iKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEs
IE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2Vy
T3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNv
ZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQot
ICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0
eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEs
IHQyKQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRb
Y2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8g
cHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGlu
IHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAg
ICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRh
dGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAgICBk
aXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBs
bGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9m
aWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1l
dGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BO
ZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAg
ICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAg
dXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQz
KQogICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJp
YSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQot
ICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5h
cnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAg
IHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAg
ZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVj
dCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJv
ZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAg
ICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMsIHQy
KQogICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcs
IC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0gICAg
ICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQog
ICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUo
dDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsx
MTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAg
ICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAu
b3AxTm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAg
ICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0
NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFk
eQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0g
ICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVw
ZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51
bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0
MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3Jv
IGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVy
YW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVs
eSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFn
LCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAg
ICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJ
bnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0
MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEsMTMg
QEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSBQQywg
YTEKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBidHB6
IHIwLCAucmVjb3ZlcgotCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisgICAgICAgICAgICAj
IEJhc2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFudCBw
b29sLgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgICAgICAgICBs
b2FkcCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2Rl
QmxvY2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwogICAgICAgICAgICAg
aWYgQVJNNjRFCiAgICAgICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlND
OjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6Omxvb3BPU1JFbnRy
eSkgKiBQdHJTaXplLCBhMgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0RXF1
YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1l
LCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0
eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQK
LQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0s
IHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3MCw3IEBAIG1hY3Jv
IHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJh
dGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3Jl
cSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2Zp
bGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJp
dGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpA
QCAtMTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25l
Z2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0
dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0
eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2Zp
bGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikK
QEAgLTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9w
TmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdp
IHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQ
cm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFBy
b2ZpbGVJbnQsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAg
YnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAw
MDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAg
ICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0
MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE2
MCw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUs
IHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBl
LCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3JocywgdDAp
CiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21T
dG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRl
Z2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmls
ZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBkaXNwYXRj
aCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRh
ZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0
MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVt
YmVyLCB0NSwgdDIpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50
T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVy
SW50LCB0NSwgdDIpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6
CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA0LDkgKzExOTYsOSBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAKICAgICAub3AyTm90SW50OgogICAgICAg
ICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVm
aW5pdGVseSBub3QuCi0gICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51
bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisg
ICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmls
ZUludE51bWJlciwgdDUsIHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBjaTJk
cyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBm
dDEKQEAgLTE1MTgsNyArMTUxMCw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X2lk
X2RpcmVjdCwKIGVuZCkKIAogIyBUaGUgYmFzZSBvYmplY3QgaXMgZXhwZWN0ZWQgaW4gdDMKLW1h
Y3JvIHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwgbW9kZU1ldGFkYXRhTmFtZSwg
dmFsdWVQcm9maWxlTmFtZSwgc2xvd0xhYmVsLCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuKQorbWFj
cm8gcGVyZm9ybUdldEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LCBtb2RlTWV0YWRhdGFOYW1lLCB2
YWx1ZVByb2ZpbGVOYW1lLCBzbG93TGFiZWwsIHNpemUsIG1ldGFkYXRhLCByZXR1cm4sIGRvQXJy
YXlQcm9maWxlKQogICAgIG1ldGFkYXRhKHQyLCB0MSkKICAgICBsb2FkYiAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6OiVtb2RlTWV0YWRhdGFOYW1lJS5tb2RlW3QyXSwgdDEKIApAQCAtMTU0Niw3
ICsxNTM4LDcgQEAgbWFjcm8gcGVyZm9ybUdldEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LAogLm9w
R2V0QnlJZEFycmF5TGVuZ3RoOgogICAgIGJibmVxIHQxLCBjb25zdGV4cHIgR2V0QnlJZE1vZGU6
OkFycmF5TGVuZ3RoLCAub3BHZXRCeUlkVW5zZXQKICAgICBtb3ZlIHQzLCB0MAotICAgIGFycmF5
UHJvZmlsZSglb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6OiVtb2RlTWV0YWRhdGFOYW1lJS5hcnJh
eUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCB0MCwgdDIsIHQ1KQorICAgIGRvQXJyYXlQcm9maWxl
KHQwLCB0MiwgdDUsIHQxKQogICAgIGJ0aXogdDAsIElzQXJyYXksIHNsb3dMYWJlbAogICAgIGJ0
aXogdDAsIEluZGV4aW5nU2hhcGVNYXNrLCBzbG93TGFiZWwKICAgICBsb2FkQ2FnZWRKU1ZhbHVl
KEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQwLCB0MSkKQEAgLTE1NjgsNyArMTU2MCwxMCBA
QCBlbmQKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X2lkLCBPcEdldEJ5SWQsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIGdldChtX2Jhc2Us
IHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxsKHNpemUsIHQwLCB0MywgLm9wR2V0
QnlJZFNsb3cpCi0gICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BHZXRCeUlkLCBtX21vZGVNZXRh
ZGF0YSwgbV9wcm9maWxlLCAub3BHZXRCeUlkU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHJldHVybikK
KyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEdldEJ5SWQsIG1fbW9kZU1ldGFkYXRhLCBtX3By
b2ZpbGUsIC5vcEdldEJ5SWRTbG93LCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuLAorICAgICAgICBt
YWNybyAoY2VsbEFuZEluZGV4aW5nVHlwZSwgbWV0YWRhdGEsIHNjcmF0Y2gxLCBzY3JhdGNoMikK
KyAgICAgICAgICAgIGFycmF5UHJvZmlsZShPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptX2FycmF5UHJv
ZmlsZSwgY2VsbEFuZEluZGV4aW5nVHlwZSwgbWV0YWRhdGEsIHNjcmF0Y2gxKQorICAgICAgICBl
bmQpCiAKIC5vcEdldEJ5SWRTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRo
X2dldF9ieV9pZCkKQEAgLTMwMDIsNyArMjk5Nyw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
aXRlcmF0b3Jfb3BlbiwgT3AKIAogICAgIGxvYWRWYXJpYWJsZShnZXQsIG1faXRlcmF0b3IsIHQz
KQogICAgIGJ0cW56IHQzLCBub3RDZWxsTWFzaywgLml0ZXJhdG9yT3BlbkdlbmVyaWNHZXROZXh0
U2xvdwotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JPcGVuLCBtX21vZGVNZXRh
ZGF0YSwgbV9uZXh0UHJvZmlsZSwgLml0ZXJhdG9yT3BlbkdlbmVyaWNHZXROZXh0U2xvdywgc2l6
ZSwgbWV0YWRhdGEsIHN0b3JlTmV4dEFuZERpc3BhdGNoKQorICAgIHBlcmZvcm1HZXRCeUlESGVs
cGVyKE9wSXRlcmF0b3JPcGVuLCBtX21vZGVNZXRhZGF0YSwgbV9uZXh0UHJvZmlsZSwgLml0ZXJh
dG9yT3BlbkdlbmVyaWNHZXROZXh0U2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlTmV4dEFuZERp
c3BhdGNoLCBtYWNybyhhLCBiLCBjLCBkKSBlbmQpCiAKIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0
TmV4dFNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Bl
bl9nZXRfbmV4dCkKQEAgLTMwNjEsNyArMzA1Niw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
aXRlcmF0b3JfbmV4dCwgT3AKIAogICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fdmFsdWUsIHQzKQog
ICAgIGJ0cW56IHQzLCBub3RDZWxsTWFzaywgLmdldERvbmVTbG93Ci0gICAgcGVyZm9ybUdldEJ5
SURIZWxwZXIoT3BJdGVyYXRvck5leHQsIG1fZG9uZU1vZGVNZXRhZGF0YSwgbV9kb25lUHJvZmls
ZSwgLmdldERvbmVTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1
ZSkKKyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV9kb25lTW9kZU1l
dGFkYXRhLCBtX2RvbmVQcm9maWxlLCAuZ2V0RG9uZVNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9y
ZURvbmVBbmRKbXBUb0dldFZhbHVlLCBtYWNybyhhLCBiLCBjLCBkKSBlbmQpCiAKIC5nZXREb25l
U2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2dl
dF9kb25lKQpAQCAtMzA4Niw3ICszMDgxLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVy
YXRvcl9uZXh0LCBPcAogICAgICMgUmVsb2FkIHRoZSBuZXh0IHJlc3VsdCB0bXAgc2luY2UgdGhl
IGdldF9ieV9pZCBhYm92ZSBtYXkgaGF2ZSBjbG9iYmVyZWQgdDMuCiAgICAgbG9hZFZhcmlhYmxl
KGdldCwgbV92YWx1ZSwgdDMpCiAgICAgIyBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBp
dGVyYXRvciByZXN1bHQgaXMgYSBjZWxsIGhlcmUgc2luY2Ugd2Ugd2lsbCBoYXZlIHRocm93biBh
biBlcnJvciBiZWZvcmUuCi0gICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck5leHQs
IG1fdmFsdWVNb2RlTWV0YWRhdGEsIG1fdmFsdWVQcm9maWxlLCAuZ2V0VmFsdWVTbG93LCBzaXpl
LCBtZXRhZGF0YSwgc3RvcmVWYWx1ZUFuZERpc3BhdGNoKQorICAgIHBlcmZvcm1HZXRCeUlESGVs
cGVyKE9wSXRlcmF0b3JOZXh0LCBtX3ZhbHVlTW9kZU1ldGFkYXRhLCBtX3ZhbHVlUHJvZmlsZSwg
LmdldFZhbHVlU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlVmFsdWVBbmREaXNwYXRjaCwgbWFj
cm8oYSwgYiwgYywgZCkgZW5kKQogCiAuZ2V0VmFsdWVTbG93OgogICAgIGNhbGxTbG93UGF0aChf
bGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfZ2V0X3ZhbHVlKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIwLDcgKzE0MjAsOCBAQCBlbmQKIAog
bWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlvbikKICAgICBsb2FkcCBDb2Rl
QmxvY2tbY2ZyXSwgdDAKLSAgICBiYWRkaXMgaW5jcmVtZW50LCBDb2RlQmxvY2s6Om1fbGxpbnRF
eGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwg
LmNvbnRpbnVlCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDBd
LCB0MAorICAgIGJhZGRpcyBpbmNyZW1lbnQsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9j
b3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgYWN0aW9uKCkKICAgICAuY29udGludWU6CiBlbmQK
QEAgLTE1MDMsNyArMTUwNCw4IEBAIG1hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29k
ZUJsb2MKICAgICBjb2RlQmxvY2tHZXR0ZXIodDEpCiAgICAgY29kZUJsb2NrU2V0dGVyKHQxKQog
ICAgIGlmIG5vdCAoQ19MT09QIG9yIENfTE9PUF9XSU4pCi0gICAgICAgIGJhZGRpcyA1LCBDb2Rl
QmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6
bV9jb3VudGVyW3QxXSwgLmNvbnRpbnVlCisgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGlu
dEV4ZWN1dGVDb3VudGVyW3QxXSwgdDAKKyAgICAgICAgYmFkZGlzIDUsIEJhc2VsaW5lRXhlY3V0
aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgICAgIGlmIEpTVkFMVUU2
NAogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQpAQCAt
MTYxNywxNCArMTYxOSwxNCBAQCBtYWNybyBmdW5jdGlvbkluaXRpYWxpemF0aW9uKHByb2ZpbGVB
cmdTCiAgICAgIyBvcHRpbWFsIHdheSBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgbW9yZSB0
aGFuIGZpdmUgcmVnaXN0ZXJzIGF2YWlsYWJsZQogICAgICMgZm9yIGFyYml0cmFyeSB1c2UgaW4g
dGhlIGludGVycHJldGVyLgogICAgIGxvYWRpIENvZGVCbG9jazo6bV9udW1QYXJhbWV0ZXJzW3Qx
XSwgdDAKLSAgICBhZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAgIyBVc2UgYWRkaSBiZWNhdXNlIHRo
YXQncyB3aGF0IGhhcyB0aGUgcGVlcGhvbGUKKyAgICBhZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAK
ICAgICBhc3NlcnQobWFjcm8gKG9rKSBicGd0ZXEgdDAsIDAsIG9rIGVuZCkKICAgICBidHB6IHQw
LCAuYXJndW1lbnRQcm9maWxlRG9uZQogICAgIGxvYWRwIENvZGVCbG9jazo6bV9hcmd1bWVudFZh
bHVlUHJvZmlsZXMgKyBGaXhlZFZlY3Rvcjo6bV9zdG9yYWdlICsgUmVmQ291bnRlZEFycmF5Ojpt
X2RhdGFbdDFdLCB0MwogICAgIGJ0cHogdDMsIC5hcmd1bWVudFByb2ZpbGVEb25lICMgV2hlbiB3
ZSBjYW4ndCBKSVQsIHdlIGRvbid0IGFsbG9jYXRlIGFueSBhcmd1bWVudCB2YWx1ZSBwcm9maWxl
cy4KICAgICBtdWxwIHNpemVvZiBWYWx1ZVByb2ZpbGUsIHQwLCB0MiAjIEFhYWFhaGhoaCEgTmVl
ZCBzdHJlbmd0aCByZWR1Y3Rpb24hCiAgICAgbHNoaWZ0cCAzLCB0MCAjIG9mZnNldCBvZiBsYXN0
IEpTVmFsdWUgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4KLSAgICBhZGRwIHQyLCB0MyAjIHBvaW50
ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBpbiBDb2RlQmxvY2s6Om1fYXJndW1lbnRW
YWx1ZVByb2ZpbGVzLgorICAgIGFkZHAgdDIsIHQzICMgcG9pbnRlciB0byBlbmQgb2YgVmFsdWVQ
cm9maWxlIGFycmF5IGluIHRoZSB2YWx1ZSBwcm9maWxlIGFycmF5LgogLmFyZ3VtZW50UHJvZmls
ZUxvb3A6CiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIGxvYWRxIFRoaXNBcmd1bWVudE9mZnNl
dCAtIDggKyBwcm9maWxlQXJnU2tpcCAqIDhbY2ZyLCB0MF0sIHQyCkBAIC0yNTYzLDYgKzI1NjUs
MTcgQEAgbWFjcm8gbm90U3VwcG9ydGVkKCkKICAgICBlbmQKIGVuZAogCisKK21hY3JvIHVwZGF0
ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisg
ICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0
YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQor
ZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUs
IG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKwogLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0
aGUgWDg2XzY0X1dJTiBjb25kaXRpb24gaGVyZSwgc2luY2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFs
cmVhZHkgYmUgZmFsc2Ugb24gV2luZG93cwogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMzcxNgogaWYgV0VCQVNTRU1CTFkgYW5kIG5vdCBYODZfNjRfV0lOCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRl
bnRpZmllci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDEw
IEBAIHB1YmxpYzoKICAgICBDYWNoZWFibGVJZGVudGlmaWVyKCkgPSBkZWZhdWx0OwogCiAgICAg
c3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21DZWxsKEpTQ2VsbCog
aWRlbnRpZmllcik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlm
aWVyJik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBVbmlxdWVkU3RyaW5nSW1wbCop
OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2soQ29kZUJsb2NrVHlwZSosIGNvbnN0IElkZW50aWZpZXImKTsKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZp
ZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBV
bmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmll
ciBjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21SYXdCaXRzKHVp
bnRwdHJfdCByYXdCaXRzKSB7IHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHJhd0JpdHMpOyB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50
aWZpZXImIGkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNo
ZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZp
ZXImIGkpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhjb2RlQmxvY2ssIGkuaW1wbCgpKTsKIH0KIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KENvZGVCbG9jayogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQordGVtcGxhdGUg
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29k
ZUJsb2NrVHlwZSogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIEFT
U0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxvY2stPmhhc0lkZW50aWZpZXIodWlkKSk7CiAg
ICAgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIodWlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNh
Y2hlZFR5cGVzLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJC
dWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUNhY2hlRXJyb3IuaCIKICNpbmNsdWRl
ICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQ
cm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFs
dWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHBy
b2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYg
cHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVB
cmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0Jp
Z0ludCgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25F
eGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODksNiArMjg5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zm
c2V0T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFi
bGUsIG1fcmFyZURhdGEpOyB9CiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZB
c1N0cmluZ0luUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1f
YXNTdHJpbmcpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxv
Y2tGb3JDYWxsKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwg
bV9jb2RlQmxvY2tGb3JDYWxsKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNl
dE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0
aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDksNyArMzA5LDYgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2
KEludDMyLCBldmFsVGhyZXNob2xkTXVsdGlwbGllciwgMTAsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYoVW5zaWduZWQsIG1heGltdW1FdmFsQ2FjaGVhYmxlU291cmNlTGVuZ3RoLCAyNTYsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIFwKLSAgICB2KEJvb2wsIHJhbmRvbWl6ZUV4ZWN1dGlvbkNv
dW50c0JldHdlZW5DaGVja3BvaW50cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYo
SW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JCYXNlbGlu
ZSwgMTAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJbnQzMiwgbWF4aW11bUV4ZWN1dGlv
bkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvclVwcGVyVGllcnMsIDUwMDAwLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICBcCkBAIC01MzIsNiArNTMxLDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJs
eUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZURhdGFJQywgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDSW5PcHRpbWl6aW5nSklULCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNTaGFyaW5nLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nLCB0
cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgLyogRmVhdHVyZSBGbGFncyAqL1wK
ICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3Jp
cHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Niw5
ICszOTYsMTEgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aQogICAg
IGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCiAgICAgICAgIGNvZGVCbG9jay0+dmFs
aWRhdGUoKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQorICAgIGlmIChSZWZQdHI8
QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxv
Y2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICBjb2RlQmxvY2stPnNldHVw
V2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOwor
ICAgIH0gZWxzZSBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkgewogICAgICAgICBzZXR1cExMSW50
KGNvZGVCbG9jayk7Ci0gICAgZWxzZQorICAgIH0gZWxzZQogICAgICAgICBzZXR1cEpJVCh2bSwg
Y29kZUJsb2NrKTsKIAogICAgIGluc3RhbGxDb2RlKHZtLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+
Y29kZVR5cGUoKSwgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRUaWVyVXBDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgcHVibGlj
OgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCgpCiAgICAgewogICAgICAgICBpZiAoT3B0
aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hv
bGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRy
KTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFP
cHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXROZXdU
aHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBu
dWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRG
b3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0KIAogICAgIGJvb2wgY2hlY2tJZk9w
dGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtNjUsOSArNjUsOSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBvcHRpbWl6ZVNvb24oKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21M
TEludFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZVNvb24oKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hv
bGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJl
c2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAog
ICAgIHN0cnVjdCBPU1JFbnRyeURhdGEgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRpZXJVcENvdW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIFRpZXJV
cENvdW50OjpUaWVyVXBDb3VudCgpCiB7Ci0gICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRo
cmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7
CiB9CiAKIFRpZXJVcENvdW50Ojp+VGllclVwQ291bnQoKSA9IGRlZmF1bHQ7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVB
ZnRlcldhcm1VcCh1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1p
emluZyBhZnRlciB3YXJtLXVwLiIpOwotICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6
dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAg
c2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJt
VXAoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVh
Y2hlZCgpCkBAIC05MCwxNCArOTAsMTQgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVOZXh0
SW52b2NhdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1p
emluZyBuZXh0IGludm9jYXRpb24uIik7Ci0gICAgICAgIHNldE5ld1RocmVzaG9sZCgwLCBudWxs
cHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKDApOwogICAgIH0KIAogICAgIHZvaWQgb3B0
aW1pemVTb29uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9n
TG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6
aW5nIHNvb24uIik7CiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIGFkanVzdG1lbnQgb25jZSB3ZSBn
ZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3YXNtIGZ1bmN0aW9ucy4KLSAgICAgICAgc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpLCBudWxscHRy
KTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGlt
aXplU29vbigpKTsKICAgICB9CiAKICAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJh
c2VkT25Db21waWxhdGlvblJlc3VsdCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBDb21waWxhdGlv
blJlc3VsdCByZXN1bHQpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL1dURi93
dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDIwIEBAIHB1YmxpYzoKICAgICAg
ICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorICAgIEJhZyYgb3BlcmF0b3I9KEJhZzxULCBVPiYmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgaWYgKHVud3JhcHBlZEhlYWQoKSA9PSBvdGhlci51bndyYXBwZWRIZWFkKCkpCisgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAgQmFnIGRlc3Ryb3k7CisgICAgICAgIGRlc3Ry
b3kubV9oZWFkID0gdW53cmFwcGVkSGVhZCgpOworICAgICAgICBtX2hlYWQgPSBvdGhlci51bndy
YXBwZWRIZWFkKCk7CisgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CisKKyAgICAgICAg
cmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIH5CYWcoKQogICAgIHsKICAgICAgICAgY2xlYXIo
KTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1BhY2tlZC5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvV1RGL3d0Zi9QYWNr
ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4NiwxMCBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9Ci0gICAgVCYgb3Bl
cmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVSA9IFQ+CisgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfdm9pZF92PFU+
LCBVJj46OnR5cGUgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisKICAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFnZXQoKTsgfQogCiAgICAgLy8gVGhpcyBj
b252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0
IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNj
LXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNz
LXRlc3RzCShyZXZpc2lvbiAyODI2NzUpCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNz
LXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC03NzYsMTcgKzc3NiwxOCBAQCBlbmQKIAogIyBGSVhN
RTogbmVlZCB0byBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
ODcwMyB0byBlbmFibGUgdGhpcyBvbiBMaW51eC9NSVBTLgogZGVmIHJ1bkJ5dGVjb2RlQ2FjaGVJ
bXBsKG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucywgKmFkZGl0aW9uYWxFbnYpCi0gICAgaWYg
KCRob3N0T1MgPT0gImRhcndpbiIpCi0gICAgICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1j
YWNoZSIKLSAgICBlbHNpZiAoJGhvc3RPUyA9PSAibGludXgiICYmICRhcmNoaXRlY3R1cmUgIT0g
Im1pcHMiKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhYWFgiCi0g
ICAgZWxzZQotICAgICAgICBza2lwCi0gICAgICAgIHJldHVybgotICAgIGVuZAorICAgICMgT09Q
UworICAgICNpZiAoJGhvc3RPUyA9PSAiZGFyd2luIikKKyAgICAjICAgIGZpbGVUZW1wbGF0ZSA9
ICJieXRlY29kZS1jYWNoZSIKKyAgICAjZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAkYXJj
aGl0ZWN0dXJlICE9ICJtaXBzIikKKyAgICAjICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1j
YWNoZVhYWFhYWCIKKyAgICAjZWxzZQorICAgICMgICAgc2tpcAorICAgICMgICAgcmV0dXJuCisg
ICAgI2VuZAogCi0gICAgb3B0aW9ucyA9IEJBU0VfT1BUSU9OUyArIEZUTF9PUFRJT05TICsgb3B0
aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucwot
ICAgIGFkZFJ1bkNvbW1hbmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxwZXJz
ICsgImJ5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRlLnRv
X3MsICp2bUNvbW1hbmQsICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRI
YW5kbGVyLCBzaW1wbGVFcnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQorICAgICNvcHRpb25z
ID0gQkFTRV9PUFRJT05TICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlv
bnMgKyAkdGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25zCisgICAgI2FkZFJ1bkNvbW1hbmQoImJ5
dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxwZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRl
c3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRlLnRvX3MsICp2bUNvbW1hbmQsICRiZW5j
aG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJvckhh
bmRsZXIsICphZGRpdGlvbmFsRW52KQogZW5kCiAKIGRlZiBydW5CeXRlY29kZUNhY2hlKCpvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438774</attachid>
            <date>2021-09-20 21:31:25 -0700</date>
            <delta_ts>2021-09-20 22:40:23 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>504697</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsMTAg
QEAgb3BfZ3JvdXAgOlByb2ZpbGVkQmluYXJ5T3AsCiAgICAgICAgIGxoczogVmlydHVhbFJlZ2lz
dGVyLAogICAgICAgICByaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZFR5cGVz
OiBPcGVyYW5kVHlwZXMsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxl
CisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
X2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTEsOSArMzUyLDEwIEBAIG9wX2dy
b3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgIF0sCiAgICAgYXJnczogewogICAgICAg
ICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg0LDkgKzM4NiwxMCBAQCBvcCA6bmVnYXRlLAog
ICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZDogVmlydHVhbFJl
Z2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLAorICAgICAgICBwcm9maWxl
SW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQ
cm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFy
aXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApAQCAtNDc4LDYgKzQ4MSw3IEBAIG9wIDpn
ZXRfYnlfaWQsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgbW9kZU1ldGFkYXRhOiBHZXRCeUlk
TW9kZU1ldGFkYXRhLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgIH0KIAogb3AgOmdldF9ieV9pZF93aXRoX3Ro
aXMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVj
a3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBAIFZhbHVlUHJvZmlsZSog
dmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJuICZtZXRhZGF0YS5tX3By
b2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK3VpbnRwdHJfdCB2YWx1
ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4KQoreworICAgIFVOVVNF
RF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9w
Y29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50
SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJu
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRvclByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZOZXh0UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRl
Y29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3JfbmV4dCkgeworICAgICAgICBzd2l0Y2ggKGNo
ZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4
dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZSgp
OworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXREb25lOiByZXR1cm4gQnl0ZWNvZGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkRvbmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck5leHQ6OmdldFZhbHVlOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlZhbHVl
UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfSBlbHNlIAorICAgICAgICByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZlByb2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVN
ZXRhZGF0YT4KIGJvb2wgaGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFk
YXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhW
TSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQot
ewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4o
bV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRN
YXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
dmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5r
SW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSAm
JiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwogdm9pZCBDYWxs
TGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVTcGVjaWZpY0Nh
bGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5OSwxMSBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9mcmFtZVNodWZm
bGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRVc2VzRGF0YUlD
cyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwotICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQ
Uik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BS
OwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9m
YXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZh
c3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJQyA9PSBVc2VE
YXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVn
aXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxM
aW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcgQEAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAgZ29Qb2x5bW9y
cGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVNYXNrKSk7CiAg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
aXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBw
cmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMubGluaygmaml0
KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBwcmVwLgogICAg
ICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQ
Uiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7
CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGNh
bGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
byk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICB1LmNv
ZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMu
bV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMubV9jYWxs
ZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxs
ZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEzICszNDQsMzQgQEAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQykK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIG51
bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBpZiAoaXNEYXRh
SUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVn
OjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRh
SUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0
YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKLSAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAgc2V0VXNlc0Rh
dGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywg
aml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlzVGFpbENhbGwo
KSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4g
ZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CiB9CiAKIHZv
aWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkK
QEAgLTM2OSwxNyArMzgxLDMyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0m
IHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIs
IG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQog
Cit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUoY2FsbExpbmtJ
bmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBK
U0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMo
Vk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgbV9jb2RlT3JpZ2lu
ID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBz
ZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAg
bV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247CisgICAg
aWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpIHsKKyAgICAgICAgLy8g
RklYTUU6IEl0J2QgYmUgbmljZSBpZiB0aGlzIGp1c3Qgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBz
dHJ1Y3R1cmUuCisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZy
YW1lU2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsK
KyAgICB9CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlD
Lm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxh
dGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpO
byk7CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAg
dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBq
aXQubGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0
UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQ
YXRoU3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwg
dGhpcyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1
bnNpZ25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2Vk
Q2FsbExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2Vu
dGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgewor
ICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2Fs
bCwKICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAg
ICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxp
emVEYXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsg
cmV0dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1
aW50OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRl
OgotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
QywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURf
UkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRo
SW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVi
bGljOgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQ
YXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVj
dEZhc3RQYXRoKENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWls
Q2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBz
dGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJv
b2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNl
RGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsy
NDksNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAot
ICAgIEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9z
bG93U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsK
ICAgICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZv
LCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJf
dCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlv
blR5cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9j
YXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxv
Y2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
bV9zbG93UGF0aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5h
bFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAK
QEAgLTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29k
ZU9yaQogICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3Qg
VW5saW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsg
Ly8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxs
eSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxU
eXBlOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlv
bjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZs
ZURhdGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsOCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlk
ZXIoKSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVD
b3VudGVyKCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9
CkBAIC0zMTgsNyArMzIwLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgQwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIAogICAgIG9wdGltaXplQWZ0ZXJX
YXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgaWYgKG90aGVyLm1fcmFyZURh
dGEpIHsKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwpAQCAtMzU5LDcgKzM2
MCw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAgIEFT
U0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2Vk
Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CisKICAgICB2
bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcwLDEwICszNzMsMTMg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2FuJ3Qg
Z2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJvY2Vz
cyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJvZHVj
ZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5lc3Mg
YW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2YgYW4g
VW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhlIGxp
dmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNpZGUg
VW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBiZXR3
ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhlIGJ5
dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5nIGFu
IFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CisgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOyAvLyBXZSBuZWVkIHRvIHNldCB1cCBvdXIgdmFsdWUgcHJvZmlsZSBw
b2ludGVycy4KKwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBmaW5pc2hDcmVh
dGlvbkNvbW1vbih2bSk7CiAKQEAgLTQ3MSw2ICs0NzcsMTkgQEAgYm9vbCBDb2RlQmxvY2s6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBicmVhazsgXAogICAgIH0KIAorI2RlZmlu
ZSBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6
IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRh
dGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShi
eXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVm
aW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3Ap
OiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFk
YXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlLT51bmFyeUFyaXRoUHJvZmlsZShi
eXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisKICAg
ICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25TdHJlYW0gPSBpbnN0cnVjdGlv
bnMoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uIDogaW5zdHJ1Y3Rpb25TdHJl
YW0pIHsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KTsKQEAgLTUzMywxNCArNTUyLDE0IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFMKICAgICAgICAgTElOSyhPcENyZWF0ZVByb21pc2UpCiAgICAgICAgIExJTksoT3BD
cmVhdGVHZW5lcmF0b3IpCiAKLSAgICAgICAgTElOSyhPcEFkZCkKLSAgICAgICAgTElOSyhPcE11
bCkKLSAgICAgICAgTElOSyhPcERpdikKLSAgICAgICAgTElOSyhPcFN1YikKLQotICAgICAgICBM
SU5LKE9wTmVnYXRlKQotICAgICAgICBMSU5LKE9wSW5jKQotICAgICAgICBMSU5LKE9wRGVjKQor
ICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BBZGQpCisgICAgICAgIExJ
TktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcE11bCkKKyAgICAgICAgTElOS19XSVRIX0JJ
TkFSWV9BUklUSF9QUk9GSUxFKE9wRGl2KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRI
X1BST0ZJTEUoT3BTdWIpCisKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUo
T3BOZWdhdGUpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wSW5jKQor
ICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcERlYykKIAogICAgICAgICBM
SU5LKE9wSm5lcVB0cikKIApAQCAtNzY5LDcgKzc4OCw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAvLyByZWx5IG9uIHRoZSBpbnN0cnVjdGlvbiBjb3Vu
dCAoYW5kIGFyZSBpbiB0aGVvcnkgcGVybWl0dGVkIHRvIGFsc28gaW5zcGVjdCB0aGUKICAgICAv
LyBpbnN0cnVjdGlvbiBzdHJlYW0gdG8gbW9yZSBhY2N1cmF0ZSBhc3Nlc3MgdGhlIGNvc3Qgb2Yg
dGllci11cCkuCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGppdEFmdGVyV2FybVVw
KCk7CiAKICAgICAvLyBJZiB0aGUgY29uY3VycmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2Rl
IGJsb2NrJ3MgaGFzaCwgdGhlbiBjb21wdXRlIGl0IGhlcmUKICAgICAvLyBzeW5jaHJvbm91c2x5
LgpAQCAtNzkzLDYgKzgxMSw3NiBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb25Db21t
b24oVk0mCiAgICAgbV9vd25lckVkZ2Uuc2V0KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjpjcmVhdGUodm0sIHRoaXMpKTsKIH0KIAordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0
aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7Cisg
ICAgc2V0SklUQ29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0
IGF1dG8mIGppdENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAg
ICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAg
aGFuZGxlci5uYXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxl
ci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9
CisgICAgfQorCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7CisgICAgICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkp
OworICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+
KGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAg
ICAgIHN3aXRjaCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBv
b2w6OlR5cGU6Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZv
OiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExp
bmtJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9h
ZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBq
aXREYXRhLm1fY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5m
by5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFs
aXplRGF0YUlDKHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BS
SW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xb
aV0gPSBjYWxsTGlua0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm86IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtl
ZFN0dWJJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRy
eS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBqaXREYXRhLm1fc3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5
cGUsIENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAg
ICAgICAgICAgc3R1YkluZm8tPmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byh0aGlzLCB1bmxpbmtlZFN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0
Q29uc3RhbnRQb29sW2ldID0gc3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rp
b25EZWNsOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRh
Lm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpGdW5jdGlvbkV4cHI6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5k
ZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2Fz
ZSBHbG9iYWxDb2RlOgorICAgIGNhc2UgTW9kdWxlQ29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgor
ICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZ1bmN0aW9uQ29kZToKKyAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5
IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxs
LgorICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYm
IERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgaWYgKGppdENvZGUtPm1faXNTaGFyZWFibGUgJiYgIXVubGlua2VkQ29kZUJsb2NrKCkt
Pm1fdW5saW5rZWRCYXNlbGluZUNvZGUgJiYgT3B0aW9uczo6dXNlQmFzZWxpbmVKSVRDb2RlU2hh
cmluZygpKQorICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVD
b2RlID0gV1RGTW92ZShqaXRDb2RlKTsKK30KKwogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsK
ICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTg3Myw2ICs5NjEsMjcgQEAgQ29kZUJsb2NrOjp+Q29k
ZUJsb2NrKCkKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQogCitib29sIENvZGVCbG9jazo6aXND
b25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25z
dAoreworICAgIC8vIFRoaXMgbmVlZHMgdG8gY29ycmVzcG9uZCB0byB3aGF0IHdlIGRvIGluc2lk
ZSBzZXRDb25zdGFudFJlZ2lzdGVycy4KKyAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCkt
PmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHJlZykpIHsKKyAgICBjYXNlIFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjo6RG91YmxlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI6IHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHVubGlu
a2VkQ29kZUJsb2NrKCktPmdldENvbnN0YW50KHJlZyk7CisgICAgICAgIGlmICghdmFsdWUuaXND
ZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0g
dmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlmIChjZWxsLT5pbmhlcml0czxTeW1ib2xUYWJsZT4o
dm0oKSkgfHwgY2VsbC0+aW5oZXJpdHM8SlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KHZtKCkp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJs
b2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8
VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKIHsKICAgICBWTSYg
dm0gPSAqbV92bTsKQEAgLTg5Miw2ICsxMDAxLDcgQEAgVmVjdG9yPHVuc2lnbmVkPiBDb2RlQmxv
Y2s6OnNldENvbnN0YW50UgogICAgICAgICBzd2l0Y2ggKHJlcHJlc2VudGF0aW9uKSB7CiAgICAg
ICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50OgogICAg
ICAgICAgICAgY29uc3RhbnQgPSBnbG9iYWxPYmplY3QtPmxpbmtUaW1lQ29uc3RhbnQoc3RhdGlj
X2Nhc3Q8TGlua1RpbWVDb25zdGFudD4oY29uc3RhbnQuYXNJbnQzMkFzQW55SW50KCkpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChjb25zdGFudC5pc0NlbGwoKSk7IC8vIFVubGlua2VkIEJhc2VsaW5l
IEpJVCByZXF1aXJlcyB0aGlzLgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcjoKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246OkludGVnZXI6CkBAIC0xNTE0LDcgKzE2MjQsNyBAQCBDb2RlQmxvY2s6OkpJ
VERhdGEmIENvZGVCbG9jazo6ZW5zdXJlSklUCiAgICAgcmV0dXJuICptX2ppdERhdGE7CiB9CiAK
LXZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCkKK3ZvaWQg
Q29kZUJsb2NrOjpmaW5hbGl6ZUpJVElubGluZUNhY2hlcygpCiB7CiAgICAgaWYgKGF1dG8qIGpp
dERhdGEgPSBtX2ppdERhdGEuZ2V0KCkpIHsKICAgICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbyA6IGppdERhdGEtPm1fY2FsbExpbmtJbmZvcykKQEAgLTE1MjUsNiArMTYzNSwy
MCBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluCiAgICAgICAgICAg
ICBzdHViSW5mby0+dmlzaXRXZWFrUmVmZXJlbmNlcyhsb2NrZXIsIHRoaXMpOwogICAgICAgICB9
CiAgICAgfQorCisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGlmIChqaXRUeXBlKCkgPT0gSklU
Q29kZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgLy8gVmVyaWZ5IHdlIGRvbid0IG5lZWQgdG8g
ZmluYWxpemUgdGhlc2Ugc2luY2UgdGhleSdyZSB2aXJ0dWFsIGNhbGxzLgorICAgICAgICBmb3Ig
KENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2Rl
Kj4obV9qaXRDb2RlLmdldCgpKS0+bV9ldmFsQ2FsbExpbmtJbmZvcykgeworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKKyAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+Zm9yRWFjaERlcGVuZGVudENlbGwoW10gKEpTQ2VsbCopIHsKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKworICAgIH0KKyNlbmRpZgogfQogI2VuZGlmCiAKQEAgLTE1MzQsNDYgKzE2NTgs
NDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogCiAgICAgdXBk
YXRlQWxsUHJlZGljdGlvbnMoKTsKIAotI2lmIEVOQUJMRShKSVQpCi0gICAgYm9vbCBpc0VsaWdp
YmxlRm9yTExJbnREb3duZ3JhZGUgPSBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZTsKLSAg
ICBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IGZhbHNlOwotICAgIC8vIElmIEJhc2Vs
aW5lSklUIGNvZGUgaXMgbm90IGV4ZWN1dGluZywgYW5kIGFuIG9wdGltaXplZCByZXBsYWNlbWVu
dCBleGlzdHMsIHdlIGF0dGVtcHQKLSAgICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2Rl
IGFuZCByZWluc3RhbGwgTExJbnQgY29kZSB0byBzYXZlIEpJVCBtZW1vcnkuCi0gICAgaWYgKE9w
dGlvbnM6OnVzZUxMSW50KCkgJiYgIW1faGFzTGlua2VkT1NSRXhpdCAmJiBqaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQgJiYgIW1fdm0tPmhlYXAuY29kZUJsb2NrU2V0KCkuaXNDdXJy
ZW50bHlFeGVjdXRpbmcodGhpcykpIHsKLSAgICAgICAgaWYgKENvZGVCbG9jayogb3B0aW1pemVk
Q29kZUJsb2NrID0gb3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKCFv
cHRpbWl6ZWRDb2RlQmxvY2stPm1fb3NyRXhpdENvdW50ZXIpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoaXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1f
aml0Q29kZSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRyeXBv
aW50KHRoaXMpOwotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkg
PT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25IYW5k
bGVycygpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkSGFu
ZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IG1fdW5saW5rZWRDb2RlLT5leGNlcHRpb25IYW5k
bGVyKGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBt
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVy
LnRhcmdldCkucHRyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmluaXRpYWxp
emUodW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPihMTEludDo6aGFuZGxlQ2F0Y2goaW5zdHJ1Y3Rpb24ud2lkdGgoKSkuY29kZSgpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB1bmxpbmtJbmNvbWlu
Z0NhbGxzKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGNsZWFyIHRo
ZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxpemVVbmNvbmRpdGlvbmFsbHkgYWxsIGNvbXBp
bGVyIHRocmVhZHMKLSAgICAgICAgICAgICAgICAgICAgLy8gYXJlIHNhZmVwb2ludGVkLCBtZWFu
aW5nIHRoZXkncmUgcnVubmluZyBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIGJ5dGVjb2RlIHBhcnNl
ciwgYW5kIGJ5dGVjb2RlCi0gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlciBpcyB0aGUgb25s
eSBkYXRhIHN0cnVjdHVyZSBwb2ludGluZyBpbnRvIHRoZSB2YXJpb3VzICppbmZvcy4KLSAgICAg
ICAgICAgICAgICAgICAgcmVzZXRKSVREYXRhKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotI2VuZGlmCisvLyBPT1BTOiByZWNv
bmNpbGUgdGhpcworLy8jaWYgRU5BQkxFKEpJVCkKKy8vICAgIGJvb2wgaXNFbGlnaWJsZUZvckxM
SW50RG93bmdyYWRlID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGU7CisvLyAgICBtX2lz
RWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IGZhbHNlOworLy8gICAgLy8gSWYgQmFzZWxpbmVK
SVQgY29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4
aXN0cywgd2UgYXR0ZW1wdAorLy8gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGluZSBKSVQgY29kZSBh
bmQgcmVpbnN0YWxsIExMSW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5LgorLy8gICAgaWYgKE9w
dGlvbnM6OnVzZUxMSW50KCkgJiYgIW1faGFzTGlua2VkT1NSRXhpdCAmJiBqaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQgJiYgIW1fdm0tPmhlYXAuY29kZUJsb2NrU2V0KCkuaXNDdXJy
ZW50bHlFeGVjdXRpbmcodGhpcykpIHsKKy8vICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6
ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisvLyAgICAgICAgICAgIGlm
ICghb3B0aW1pemVkQ29kZUJsb2NrLT5tX29zckV4aXRDb3VudGVyKSB7CisvLyAgICAgICAgICAg
ICAgICBpZiAoaXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlKSB7CisvLyAgICAgICAgICAgICAg
ICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKKy8vICAgICAgICAgICAgICAgICAgICBMTEludDo6
c2V0RW50cnlwb2ludCh0aGlzKTsKKy8vICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChqaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuayk7CisvLworLy8gICAgICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxpbmtlZENvZGUtPm51bWJl
ck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgaSsrKSB7CisvLyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIHVubGlua2VkSGFuZGxlciA9IG1fdW5saW5rZWRD
b2RlLT5leGNlcHRpb25IYW5kbGVyKGkpOworLy8gICAgICAgICAgICAgICAgICAgICAgICBIYW5k
bGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Cisv
LyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9u
cygpLmF0KHVubGlua2VkSGFuZGxlci50YXJnZXQpLnB0cigpOworLy8gICAgICAgICAgICAgICAg
ICAgICAgICBoYW5kbGVyLmluaXRpYWxpemUodW5saW5rZWRIYW5kbGVyLCBDb2RlTG9jYXRpb25M
YWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPihMTEludDo6aGFuZGxlQ2F0Y2goaW5zdHJ1Y3Rp
b24ud2lkdGgoKSkuY29kZSgpKSk7CisvLyAgICAgICAgICAgICAgICAgICAgfQorLy8KKy8vICAg
ICAgICAgICAgICAgICAgICB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisvLworLy8gICAgICAgICAg
ICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBjbGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGlu
IGZpbmFsaXplVW5jb25kaXRpb25hbGx5IGFsbCBjb21waWxlciB0aHJlYWRzCisvLyAgICAgICAg
ICAgICAgICAgICAgLy8gYXJlIHNhZmVwb2ludGVkLCBtZWFuaW5nIHRoZXkncmUgcnVubmluZyBl
aXRoZXIgYmVmb3JlIG9yIGFmdGVyIGJ5dGVjb2RlIHBhcnNlciwgYW5kIGJ5dGVjb2RlCisvLyAg
ICAgICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBv
aW50aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgorLy8gICAgICAgICAgICAgICAgICAgIHJl
c2V0SklURGF0YSgpOworLy8gICAgICAgICAgICAgICAgfSBlbHNlCisvLyAgICAgICAgICAgICAg
ICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOworLy8gICAgICAgICAg
ICB9CisvLyAgICAgICAgfQorLy8gICAgfQorLy8KKy8vI2VuZGlmCiAgICAgCiAgICAgaWYgKEpJ
VENvZGU6OmNvdWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKQogICAgICAgICBmaW5hbGl6ZUxM
SW50SW5saW5lQ2FjaGVzKCk7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmICghIWppdENvZGUo
KSkKLSAgICAgICAgZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOworICAgICAgICBm
aW5hbGl6ZUpJVElubGluZUNhY2hlcygpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
QEAgLTE1OTQsNyArMTcxOSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgKICAgICAgICAgY2FzZSBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rOgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkludGVycHJldGVyVGh1bms6Ci0gICAgICAg
ICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci5jb3VudCgpOworICAgICAgICAgICAg
Y291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNvdW50KCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKICAgICAgICAgICAgIGNvdW50
ID0gbV9qaXRFeGVjdXRlQ291bnRlci5jb3VudCgpOwpAQCAtMTY3NSwzMCArMTgwMCw2IEBAIFN0
cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmYKICAgICByZXR1cm4gZW5zdXJl
SklURGF0YShsb2NrZXIpLm1fc3R1YkluZm9zLmFkZChhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKTsK
IH0KIAotSklUQWRkSUMqIENvZGVCbG9jazo6YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9hZGRJQ3MuYWRkKGFyaXRoUHJv
ZmlsZSk7Ci19Ci0KLUpJVE11bElDKiBDb2RlQmxvY2s6OmFkZEpJVE11bElDKEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fbXVsSUNzLmFkZChh
cml0aFByb2ZpbGUpOwotfQotCi1KSVRTdWJJQyogQ29kZUJsb2NrOjphZGRKSVRTdWJJQyhCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N1YklD
cy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUTmVnSUMqIENvZGVCbG9jazo6YWRkSklUTmVn
SUMoVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5t
X25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQogU3RydWN0dXJlU3R1YkluZm8qIENvZGVC
bG9jazo6ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CkBAIC0zMTMzLDcgKzMyMzQsNyBAQCB1bnNpZ25l
ZCBDb2RlQmxvY2s6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiAKICNpZiBFTkFCTEUoSklUKQogICAg
IGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6Ci0gICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVn
aXN0ZXJDb3VudEZvcih0aGlzKTsKKyAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNv
dW50Rm9yKHRoaXMtPnVubGlua2VkQ29kZUJsb2NrKCkpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQp
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTMzNDksMTMgKzM0NTAsMTMgQEAgQmluYXJ5QXJp
dGhQcm9maWxlKiBDb2RlQmxvY2s6OmJpbmFyeUFyaQogewogICAgIHN3aXRjaCAocGMtPm9wY29k
ZUlEKCkpIHsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BBZGQ+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8
T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9tdWw6
Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTXVsPigpLm1ldGFkYXRhKHRoaXMpLm1f
YXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICByZXR1cm4gJnBjLT5hczxP
cFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBj
LT5hczxPcFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9w
X2RpdjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhp
cykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpA
QCAtMzM2NywxMSArMzQ2OCwxMSBAQCBVbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjp1bmFy
eUFyaXRoCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfbmVn
YXRlOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5t
X2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2luYzoKLSAgICAgICAgcmV0dXJu
ICZwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BJbmM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9kZWM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGVjPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGVjPigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTM0NzIsMjIgKzM1NzMsMTYgQEAgdm9pZCBDb2RlQmxvY2s6Omluc2VydEJh
c2ljQmxvY2tCb3VuZGFyaQogfQogCiAjaWYgRU5BQkxFKEpJVCkKLXZvaWQgQ29kZUJsb2NrOjpz
ZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+JiYg
bWFwKSAKLXsgCi0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIGVu
c3VyZUpJVERhdGEobG9ja2VyKS5tX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtYXApOwot
fQotCiBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IENvZGVCbG9jazo6ZmluZFBDKHZvaWQqIHBj
KQogeworICAgIGlmIChhdXRvKiBwY1RvQ29kZU9yaWdpbk1hcCA9IG1faml0Q29kZS0+cGNUb0Nv
ZGVPcmlnaW5NYXAoKSkgeworICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBj
b2RlT3JpZ2luID0gcGNUb0NvZGVPcmlnaW5NYXAtPmZpbmRQQyhwYykpCisgICAgICAgICAgICBy
ZXR1cm4gY29kZU9yaWdpbjsKKyAgICB9CisKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBtX2ppdERh
dGEuZ2V0KCkpIHsKLSAgICAgICAgICAgIGlmIChqaXREYXRhLT5tX3BjVG9Db2RlT3JpZ2luTWFw
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9y
aWdpbiA9IGppdERhdGEtPm1fcGNUb0NvZGVPcmlnaW5NYXAtPmZpbmRQQyhwYykpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOwotICAgICAgICAgICAgfQotCiAgICAgICAg
ICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IGppdERhdGEtPm1fc3R1Yklu
Zm9zKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLT5jb250YWluc1BDKHBjKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4oc3R1Yklu
Zm8tPmNvZGVPcmlnaW4pOwpAQCAtMzUyMSwyOCArMzYxNiwxNCBAQCBzdGQ6Om9wdGlvbmFsPEJ5
dGVjb2RlSW5kZXg+IENvZGVCbG9jazo6CiAgICAgcmV0dXJuIGJ5dGVjb2RlSW5kZXg7CiB9CiAK
LWludDMyX3QgQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpCi17
Ci0gICAgc3dpdGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5kaWRPcHRpbWl6ZSgpKSB7Ci0gICAg
Y2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKLSAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsK
LSAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKLSAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7
Ci0gICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKLSAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7
Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB0aHJlc2hvbGQ7
Ci19Ci0KLXZvaWQgQ29kZUJsb2NrOjpqaXRBZnRlcldhcm1VcCgpCit2b2lkIENvZGVCbG9jazo6
aml0U29vbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0
aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSksIHRo
aXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKHVubGlua2Vk
Q29kZUJsb2NrKCktPnRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRTb29u
KCkpLCB0aGlzKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmppdFNvb24oKQordm9pZCBDb2RlQmxv
Y2s6OmppdE5leHRJbnZvY2F0aW9uKCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0
TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRTb29u
KCkpLCB0aGlzKTsKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCgw
LCB0aGlzKTsKIH0KIAogYm9vbCBDb2RlQmxvY2s6Omhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9p
bnRzKCkgY29uc3QKQEAgLTM1ODgsMjggKzM2NjksOCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcE1h
dGhJQ1N0YXRzKCkKICAgICBkb3VibGUgbnVtU3VicyA9IDAuMDsKICAgICBkb3VibGUgdG90YWxT
dWJTaXplID0gMC4wOwogCi0gICAgYXV0byBjb3VudElDcyA9IFsmXSAoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spIHsKLSAgICAgICAgaWYgKGF1dG8qIGppdERhdGEgPSBjb2RlQmxvY2stPm1faml0RGF0
YS5nZXQoKSkgewotICAgICAgICAgICAgZm9yIChKSVRBZGRJQyogYWRkSUMgOiBqaXREYXRhLT5t
X2FkZElDcykgewotICAgICAgICAgICAgICAgIG51bUFkZHMrKzsKLSAgICAgICAgICAgICAgICB0
b3RhbEFkZFNpemUgKz0gYWRkSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGZvciAoSklUTXVsSUMqIG11bElDIDogaml0RGF0YS0+bV9tdWxJQ3MpIHsKLSAgICAg
ICAgICAgICAgICBudW1NdWxzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxNdWxTaXplICs9IG11
bElDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJVE5l
Z0lDKiBuZWdJQyA6IGppdERhdGEtPm1fbmVnSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtTmVn
cysrOwotICAgICAgICAgICAgICAgIHRvdGFsTmVnU2l6ZSArPSBuZWdJQy0+Y29kZVNpemUoKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChKSVRTdWJJQyogc3ViSUMgOiBqaXRE
YXRhLT5tX3N1YklDcykgewotICAgICAgICAgICAgICAgIG51bVN1YnMrKzsKLSAgICAgICAgICAg
ICAgICB0b3RhbFN1YlNpemUgKz0gc3ViSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KKyAgICBhdXRvIGNvdW50SUNzID0gWyZdIChDb2RlQmxvY2sqKSB7CisgICAgICAg
IC8vIEZJWE1FOiBXZSBuZWVkIHRvIHJlLWltcGxlbWVudCB0aGlzIHVzaW5nIEpJVENvZGUuCiAg
ICAgfTsKICAgICBoZWFwKCktPmZvckVhY2hDb2RlQmxvY2soY291bnRJQ3MpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTk0LDkgKzk0LDkgQEAgY2xhc3MgSlNNb2R1bGVFbnZpcm9ubWVudDsKIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIExMSW50UHJvdG90eXBlTG9hZEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludDsKIGNsYXNzIE1ldGFkYXRhVGFibGU7Ci1jbGFzcyBQQ1Rv
Q29kZU9yaWdpbk1hcDsKIGNsYXNzIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OwogY2xhc3MgU3RydWN0
dXJlU3R1YkluZm87CitjbGFzcyBCYXNlbGluZUpJVENvZGU7CiAKIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKENvZGVCbG9ja1JhcmVEYXRhKTsKIApAQCAtMTU4LDcgKzE1
OCw5IEBAIHB1YmxpYzoKICAgICBNZXRhZGF0YVRhYmxlKiBtZXRhZGF0YVRhYmxlKCkgY29uc3Qg
eyByZXR1cm4gbV9tZXRhZGF0YS5nZXQoKTsgfQogCiAgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVy
cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQorcHJpdmF0ZToKICAgICB2b2lk
IHNldE51bVBhcmFtZXRlcnModW5zaWduZWQgbmV3VmFsdWUpOworcHVibGljOgogCiAgICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9m
QXJndW1lbnRzVG9Ta2lwOyB9CiAKQEAgLTE2Nyw3ICsxNjksNiBAQCBwdWJsaWM6CiAgICAgdW5z
aWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQogICAgIHVuc2lnbmVk
IG51bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hlY2twb2ludHMo
KSAqIG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKLSAgICB1bnNpZ25lZCogYWRkcmVzc09mTnVt
UGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KICAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KIAogICAgIENvZGVCbG9jayogYWx0ZXJuYXRp
dmUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihtX2FsdGVybmF0aXZl
LmdldCgpKTsgfQpAQCAtMjMyLDE2ICsyMzMsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0
YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJy
ZWFrcG9pbnRzKCk7CiAKLSAgICBpbmxpbmUgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGFkZGluZyBiYWNrIHRo
ZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgcmV0dXJuIHRydWUgaWYgYHJlZ2AgaXMgYHRoaXNgIGFu
ZCB3ZSdyZSBpbiBzbG9wcHkgbW9kZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMDE0NQotICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkK
LSAgICAgICAgICAgIHJldHVybiBnZXRDb25zdGFudChyZWcpLmlzQ2VsbCgpOwotCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3Jh
cnlSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJl
Zy5vZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fbnVtVmFycyk7CkBAIC0yNjgsMjMgKzI1
OSwyMSBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKEpJVCkKICAgICBzdHJ1Y3QgSklURGF0YSB7CiAg
ICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgZnJpZW5kIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgICAgICBCYWc8U3RydWN0dXJlU3R1Yklu
Zm8+IG1fc3R1YkluZm9zOwotICAgICAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOwotICAgICAg
ICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOwotICAgICAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNz
OwotICAgICAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOwogICAgICAgICBCYWc8Q2FsbExpbmtJ
bmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxDYWxsTGlu
a0luZm8sIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5nQ2Fs
bHM7CiAgICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBQYWNr
ZWRSYXdTZW50aW5lbE5vZGU8UG9seW1vcnBoaWNDYWxsTm9kZT4+IG1faW5jb21pbmdQb2x5bW9y
cGhpY0NhbGxzOwotICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNo
SnVtcFRhYmxlczsKLSAgICAgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdp
bk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKICAgICAgICAgYm9vbCBtX2hhc0NhbGxlZVNhdmVS
ZWdpc3RlcnMgeyBmYWxzZSB9OwogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxl
ZVNhdmVSZWdpc3RlcnM7Ci0gICAgICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworCisgICAg
ICAgIEZpeGVkVmVjdG9yPHZvaWQqPiBtX2ppdENvbnN0YW50UG9vbDsKKyAgICAgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKSVREYXRhLCBtX2ppdENvbnN0YW50UG9vbCk7IH0KICAgICB9OwogCisgICAgdm9pZCBz
ZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPik7CisKICAg
ICBKSVREYXRhJiBlbnN1cmVKSVREYXRhKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
KQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShtX2ppdERhdGEpKQpAQCAtMjkzLDIyICsyODIs
NyBAQCBwdWJsaWM6CiAgICAgfQogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGFTbG93KGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlciYpOwogCi0gICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFy
eUFyaXRoUHJvZmlsZSopOwotICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqKTsKLSAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsK
LSAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0KLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6
dHlwZT4KLSAgICBKSVRBZGRJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmls
ZSkgeyByZXR1cm4gYWRkSklUQWRkSUMocHJvZmlsZSk7IH0KLQotICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPEdlbmVyYXRvciwgSklUTXVsR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJ
VE11bElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBh
ZGRKSVRNdWxJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJh
dG9yLCBKSVROZWdHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUTmVnSUMqIGFkZE1h
dGhJQyhVbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTmVnSUMocHJv
ZmlsZSk7IH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUU3ViR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVFN1YklDKiBhZGRNYXRoSUMoQmluYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRTdWJJQyhwcm9maWxlKTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVREYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9qaXREYXRhKTsgfQogCiAgICAgU3RydWN0dXJlU3R1YkluZm8qIGFk
ZFN0dWJJbmZvKEFjY2Vzc1R5cGUsIENvZGVPcmlnaW4pOwogCkBAIC0zMjIsMTggKzI5Niw4IEBA
IHB1YmxpYzoKICAgICAvLyBsb29raW5nIGZvciBhIENhbGxMaW5rSW5mb01hcCB0byBhbW9ydGl6
ZSB0aGUgY29zdCBvZiBjYWxsaW5nIHRoaXMuCiAgICAgQ2FsbExpbmtJbmZvKiBnZXRDYWxsTGlu
a0luZm9Gb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwogICAgIAotICAgIHZvaWQgc2V0
SklUQ29kZU1hcChKSVRDb2RlTWFwJiYgaml0Q29kZU1hcCkKLSAgICB7Ci0gICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgZW5zdXJlSklURGF0YShsb2Nr
ZXIpLm1faml0Q29kZU1hcCA9IFdURk1vdmUoaml0Q29kZU1hcCk7Ci0gICAgfQotICAgIGNvbnN0
IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIp
Lm1faml0Q29kZU1hcDsKLSAgICB9CisgICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgp
OwogCi0gICAgdm9pZCBzZXRQQ1RvQ29kZU9yaWdpbk1hcChzdGQ6OnVuaXF1ZV9wdHI8UENUb0Nv
ZGVPcmlnaW5NYXA+JiYpOwogICAgIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKHZv
aWQqIHBjKTsKIAogICAgIHZvaWQgc2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhSZWdpc3RlclNldCk7
CkBAIC00NzIsMTAgKzQzNiwxMiBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgbmFtZUZvclJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywg
bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVu
dFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRWYWx1ZVBy
b2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9udW1QYXJhbWV0ZXJzKSB8
fCAhT3B0aW9uczo6dXNlSklUKCkpOwogICAgICAgICByZXR1cm4gbV9hcmd1bWVudFZhbHVlUHJv
ZmlsZXMuc2l6ZSgpOworICAgICAgICAKICAgICB9CiAKICAgICBWYWx1ZVByb2ZpbGUmIHZhbHVl
UHJvZmlsZUZvckFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgpCkBAIC01NjksOCArNTM1
LDEwIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYg
Y29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsg
fQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5k
ZXgoKV0uZ2V0KCk7IH0KKyAgICBib29sIGlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxv
Y2soVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3Q7CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVh
bFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKHJlZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25l
ZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKGluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZD
b25zdGFudHNWZWN0b3JCdWZmZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX2NvbnN0YW50UmVnaXN0ZXJzKSArIGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpk
YXRhTWVtb3J5T2Zmc2V0KCk7IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25E
ZWNsKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQog
ICAgIGludCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMu
c2l6ZSgpOyB9CkBAIC01OTUsMjIgKzU2MywyMiBAQCBwdWJsaWM6CiAgICAgLy8gSnVtcCBUYWJs
ZXMKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFi
bGUoaW50IHRhYmxlSW5kZXgpCisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1
bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0
cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgdm9pZCogYmFzZWxpbmVK
SVRDb25zdGFudFBvb2woKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRh
KTsKLSAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25z
dGFudFBvb2wuZGF0YSgpOwogICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1i
ZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1w
bGVKdW1wVGFibGUmIHVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJl
dHVybiBtX3VubGlua2VkQ29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
IH0KIAotI2lmIEVOQUJMRShKSVQpCi0gICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hK
dW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X2ppdERhdGEpOwotICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07Ci0gICAgfQorI2lmIEVOQUJMRShERkdfSklUKQorICAgIFN0cmlu
Z0p1bXBUYWJsZSYgZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAg
ICBTaW1wbGVKdW1wVGFibGUmIGRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CiAj
ZW5kaWYKKwogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
cygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUm
IHVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBt
X3VubGlua2VkQ29kZS0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
IH0KIApAQCAtNjMyLDIxICs2MDAsMjAgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0lmSklU
VGhyZXNob2xkUmVhY2hlZCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVD
b3VudGVyLmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOworICAgICAgICByZXR1
cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0
aGlzKTsKICAgICB9CiAKICAgICB2b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCiAgICAgewotICAg
ICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICAgICAg
bV9sbGludEV4ZWN1dGVDb3VudGVyLT5kZWZlckluZGVmaW5pdGVseSgpOwogICAgIH0KIAotICAg
IGludDMyX3QgdGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGpp
dEFmdGVyV2FybVVwKCk7CiAgICAgdm9pZCBqaXRTb29uKCk7CisgICAgdm9pZCBqaXROZXh0SW52
b2NhdGlvbigpOwogCiAgICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4
ZWN1dGVDb3VudGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0
ZUNvdW50ZXI7CisgICAgICAgIHJldHVybiAqbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIH0K
IAogICAgIHR5cGVkZWYgSGFzaE1hcDxzdGQ6OnR1cGxlPFN0cnVjdHVyZUlELCB1bnNpZ25lZD4s
IEZpeGVkVmVjdG9yPExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dD4+IFN0cnVjdHVyZVdhdGNocG9pbnRNYXA7CkBAIC03OTcsNiArNzY0LDcgQEAgcHVibGljOgog
CiAgICAgYm9vbCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dl
clJlcXVlc3RzOyB9CiAgICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVy
biAmbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRl
YnVnZ2VyUmVxdWVzdHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2Rl
YnVnZ2VyUmVxdWVzdHMpOyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVt
QnJlYWtwb2ludHMpOwogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVh
a3BvaW50cykKQEAgLTgzOCw2ICs4MDYsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJy
ZW50SlNMb2NrIG1fbG9jazsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8v
IE5vdCBhIGJpdGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9
CiAKICNpZiBFTkFCTEUoSklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUg
OiAyOyAvLyBERkc6OkNhcGFiaWxpdHlMZXZlbApAQCAtOTA3LDE2ICs4NzYsMTIgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7IH0KICAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcik7IH0KIAotICAgIGJv
b2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQotICAgIHsKLSAg
ICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRo
ZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3VubGlua2VkQ29kZS0+aXNCdWls
dGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1
enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5sb29wSGludHNBcmVF
bGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lk
IGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKICNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQg
ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOworICAgIHZvaWQgZmluYWxpemVKSVRJ
bmxpbmVDYWNoZXMoKTsKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAgIHZvaWQgdGFs
bHlGcmVxdWVudEV4aXRTaXRlcygpOwpAQCAtMTAxMCw3ICs5NzUsOSBAQCBwcml2YXRlOgogICAg
IFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwogICAg
IFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7CiAjaWYgRU5BQkxFKEpJVCkKK3B1YmxpYzoKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SklURGF0YT4gbV9qaXREYXRhOworcHJpdmF0ZToKICNlbmRpZgog
I2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBj
b2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRoZSBwcm9maWxlZCBjb2RlIGJsb2NrCkBAIC0xMDI5
LDcgKzk5Niw3IEBAIHByaXZhdGU6CiAKICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2Fs
dGVybmF0aXZlOwogICAgIAotICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXI7CisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyKiBtX2xsaW50RXhlY3V0
ZUNvdW50ZXIgeyBudWxscHRyIH07CiAKICAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9q
aXRFeGVjdXRlQ291bnRlcjsKICAgICB1aW50MzJfdCBtX29zckV4aXRDb3VudGVyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSwxMCBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVj
b2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0pJVENv
ZGUuaCIKICNpbmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxpbmVzLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtNDAsOSArNDIsNyBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVl
UHJvZmlsZShjb25zCiAgICAgaWYgKG1fbWV0YWRhdGEpIHsKICNkZWZpbmUgVklTSVQoX19vcCkg
XAogICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEp
IHsgZnVuYyhtZXRhZGF0YS5tX3Byb2ZpbGUsIGZhbHNlKTsgfSk7Ci0KICAgICAgICAgRk9SX0VB
Q0hfT1BDT0RFX1dJVEhfVkFMVUVfUFJPRklMRShWSVNJVCkKLQogI3VuZGVmIFZJU0lUCiAKICAg
ICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEl0ZXJhdG9yT3Blbj4oWyZdIChhdXRvJiBtZXRh
ZGF0YSkgeyAKQEAgLTU3LDcgKzU3LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVBy
b2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFs
c2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCi0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KQEAgLTk5LDQgKzk4LDM4IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoTExJbnRDYWxs
TGlua0luZm8KICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoSklUKQorQUxXQVlTX0lOTElORSBjb25z
dCBKSVRDb2RlTWFwJiBDb2RlQmxvY2s6OmppdENvZGVNYXAoKQoreworICAgIEFTU0VSVChqaXRU
eXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxC
YXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVNYXA7Cit9CisKK0FM
V0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5lU3dpdGNoSnVt
cFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUq
PihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisK
K0FMV0FZU19JTkxJTkUgU3RyaW5nSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5lU3RyaW5n
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGlu
ZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShERkdfSklUKQorQUxXQVlTX0lOTElO
RSBTaW1wbGVKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3dpdGNoSnVtcFRhYmxlKGludCB0YWJs
ZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9z
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1
bXBUYWJsZSYgQ29kZUJsb2NrOjpkZmdTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5k
ZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxERkc6OkpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRv
Q29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAgcHVibGljOgogICAgIHN0YXRpYyBFeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwKENvZGVCbG9jayogY29kZUJsb2NrKTsKICAgICAK
ICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcEFuZEFjdGl2YXRlKENv
ZGVCbG9jayogY29kZUJsb2NrKTsKKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2Rl
QmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZSwgbV9jb2RlQmxvY2spOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhlY3V0aW9uQ291bnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCBib29sIEV4ZWN1dGlvbkNvdW50ZXI8Y291bnRpbmdW
YXJpYW50Pjo6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHRocmVzaG9sZCA9
IGNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2NrID8gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSA6
IG51bGxwdHIsIHRocmVzaG9sZCk7CisgICAgdGhyZXNob2xkID0gY2xpcHBlZFRocmVzaG9sZCh0
aHJlc2hvbGQpOwogICAgIAogICAgIG1fY291bnRlciA9IHN0YXRpY19jYXN0PGludDMyX3Q+KC10
aHJlc2hvbGQpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JjZVNsb3dQYXRoQ29uY3Vy
cmVudGx5KCk7IC8vIElmIHlvdSB1c2UgdGhpcywgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRT
ZXQoKSBtYXkgc3RpbGwgcmV0dXJuIGZhbHNlLgogICAgIGJvb2wgY2hlY2tJZlRocmVzaG9sZENy
b3NzZWRBbmRTZXQoQ29kZUJsb2NrKik7CiAgICAgYm9vbCBoYXNDcm9zc2VkVGhyZXNob2xkKCkg
Y29uc3QgeyByZXR1cm4gbV9jb3VudGVyID49IDA7IH0KLSAgICB2b2lkIHNldE5ld1RocmVzaG9s
ZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXROZXdUaHJlc2hv
bGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayogPSBudWxscHRyKTsKICAgICB2b2lkIGRl
ZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgZG91YmxlIGNvdW50KCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291bnQpICsgbV9jb3VudGVyOyB9CiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkBAIC04NiwxMyArODYsOSBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIFQgY2xpcHBlZFRo
cmVzaG9sZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUIHRocmVzaG9sZCkKKyAgICBz
dGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKFQgdGhyZXNob2xkKQogICAgIHsKLSAgICAgICAgaW50
MzJfdCBtYXhUaHJlc2hvbGQ7Ci0gICAgICAgIGlmIChPcHRpb25zOjpyYW5kb21pemVFeGVjdXRp
b25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKSAmJiBnbG9iYWxPYmplY3QpCi0gICAgICAgICAg
ICBtYXhUaHJlc2hvbGQgPSBnbG9iYWxPYmplY3QtPndlYWtSYW5kb21JbnRlZ2VyKCkgJSBtYXhp
bXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1heFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hl
Y2twb2ludHMoKTsKKyAgICAgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0
aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CiAgICAgICAgIGlmICh0aHJlc2hvbGQgPiBt
YXhUaHJlc2hvbGQpCiAgICAgICAgICAgICB0aHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7CiAgICAg
ICAgIHJldHVybiB0aHJlc2hvbGQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlJZE1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB7CiBzdGF0
aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQpID09IDEyKTsKIAogc3Ry
dWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCB7CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlk
TW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmlsZSk7IH0KICAgICBBcnJheVByb2Zp
bGUgYXJyYXlQcm9maWxlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0
YWRhdGFBcnJheUxlbmd0aCkgPT0gMTIpOwpAQCAtODgsNiArODksNyBAQCB1bmlvbiBHZXRCeUlk
TW9kZU1ldGFkYXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUgbW9kZTsKICAgICAgICAgdWludDhf
dCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBtdXN0IGJlIHplcm8gd2hlbiB3ZSB1
c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
TW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhLCBtb2Rl
KTsgfQogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0IGRlZmF1bHRNb2RlOwogICAgIEdl
dEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0
YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjEzLDcgKzIxMyw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9y
U3R1YkkKICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAg
ICAKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6IHsKLSAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgp
OworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZtKCkpOwogICAgICAgICBpZiAoc3RydWN0dXJl
LT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0
dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlm
aWVyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0
dXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5CeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBJbkJ5
U3RhdHVzIEluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mCiAgICAgICAgIHJldHVybiBJbkJ5
U3RhdHVzKE5vSW5mb3JtYXRpb24pOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6
IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0
dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKTsKICAgICAgICAgaWYgKHN0cnVj
dHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKICAgICAgICAgICAg
IHJldHVybiBJbkJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTEgKzE3NiwxNiBAQCBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBib29sIGxpbmtDb2RlSW5saW5lCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQor
Ym9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25z
dGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxv
Y2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIFRoZXNlIGR5bmFtaWMgc2xvdHMgZ2V0IGZp
bGxlZCBpbi4gTm90aGluZyBlbHNlIHRvIGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIAogICAgIEdQUlJlZyBiYXNlID0gc3R1Yklu
Zm8uYmFzZUdQUjsKQEAgLTIzMywyMyArMjM4LDMxIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJv
b2wgaGFzRnJlZVJlZ2lzdGUKICAgICByZXR1cm4gZ2V0U2NyYXRjaFJlZ2lzdGVyKHN0dWJJbmZv
KSAhPSBJbnZhbGlkR1BSUmVnOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVT
ZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5
UmVwbGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFu
dElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2st
PnVzZURhdGFJQygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIGlmIChpc0lubGluZU9m
ZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBoYXNGcmVl
UmVnaXN0ZXIoc3R1YkluZm8pOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxm
UHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQVNTRVJUKGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVw
bGFjZShzdHViSW5mbywgb2Zmc2V0KSk7CisgICAgQVNTRVJUKGNhbkdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBvZmZzZXQpKTsKKworICAgIGlmIChjb2Rl
QmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIFRoZXNlIHNsb3RzIGdldCBmaWxsZWQg
aW4uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIApAQCAtMjc5LDIyICsyOTIsMjUgQEAgYm9vbCBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UgogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5l
OwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6
OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgQVNTRVJUKGFycmF5LT5p
bmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFu
dElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2st
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCiAgICAgaWYgKCFoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICByZXR1cm4gIWhhc0FueUFycmF5U3RvcmFnZShhcnJheS0+aW5kZXhpbmdU
eXBlKCkpICYmIGFycmF5LT5pbmRleGluZ1R5cGUoKSAhPSBBcnJheUNsYXNzOwogfQogCi1ib29s
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlM
ZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
SlNBcnJheSogYXJyYXkpCiB7Ci0gICAgQVNTRVJUKGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1
YkluZm8sIGFycmF5KSk7CisgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGlzQ2FjaGVhYmxl
QXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywgYXJyYXkpKTsKIAogICAgIGlmICghc3R1
YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0z
MTksMTcgKzMzNSwyMCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChT
CiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpp
c0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitib29s
IElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhh
c0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNv
ZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0KIAot
Ym9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewotICAgIEFT
U0VSVChpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChzdHViSW5mbykpOworICAgIEFTU0VSVF9VTlVT
RUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZv
KSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzYzLDEzICszODIsMTggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlU3RyaW5nTGVuZ3RoKAogfQogCiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNl
bGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0Nv
bnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVC
bG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gVGhlc2Ugc2xvdHMgZ2V0IGZpbGxlZCBp
bi4gTm90aGluZyBlbHNlIHRvIGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAg
ICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VHUFI7CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUg
PSBzdHViSW5mby52YWx1ZVJlZ3MoKTsKIApAQCAtNDA2LDcgKzQzMCw3IEBAIHZvaWQgSW5saW5l
QWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRh
SUMoKSkgewogICAgICAgICAvLyBJZiBpdCBpcyBub3QgR2V0QnlJZC1saWtlLXRoaW5nLCB3ZSBk
byBub3QgZW1pdCBub3Agc2xlZCAoZS5nLiBHZXRCeVZhbCkuCiAgICAgICAgIC8vIFRoZSBjb2Rl
IGlzIGFscmVhZHkgYW4gaW5kaXJlY3QganVtcCwgYW5kIG9ubHkgdGhpbmcgd2Ugc2hvdWxkIGRv
IGlzIHJlcGxhY2luZyBtX2NvZGVQdHIuCi0gICAgICAgIGlmIChzdHViSW5mby5oYXNDb25zdGFu
dElkZW50aWZpZXIpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5
cGU6OkJhc2VsaW5lSklUICYmIHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikgewogICAg
ICAgICAgICAgLy8gSWYgbV9jb2RlUHRyIGlzIHBvaW50aW5nIHRvIHN0dWJJbmZvLnNsb3dQYXRo
U3RhcnRMb2NhdGlvbiwgdGhpcyBtZWFucyB0aGF0IElubGluZUFjY2VzcyBjb2RlIGlzIG5vdCBh
IHN0dWIgb25lLgogICAgICAgICAgICAgLy8gV2UgcmV3cml0ZSB0aGlzIHdpdGggdGhlIHN0dWIt
YmFzZWQgZGlzcGF0Y2hpbmcgY29kZSBvbmNlLCBhbmQgY29udGludWUgdXNpbmcgaXQgdW50aWwg
d2UgcmVzZXQgdGhlIGNvZGUuCiAgICAgICAgICAgICBpZiAoc3R1YkluZm8ubV9jb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCkgPT0gc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpIHsKQEAgLTQyMSw3ICs0NDUsOSBAQCB2b2lkIElubGluZUFjY2Vzczo6
cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nlc3M6
IGxpbmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAg
ICBzdHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBj
b2RlLgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzQsOCArNDYwLDE0IEBAIHZvaWQg
SW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICB9KSwgIklubGluZUFjY2Vz
czogbGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pCit2b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKKyAgICBpZiAoY29k
ZUJsb2NrLT51c2VEYXRhSUMoKSAmJiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCkgeworICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSBzdHViSW5mby5zbG93
UGF0aFN0YXJ0TG9jYXRpb247CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLgorICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1
YkluZm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZv
aWQoQ0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAvLyBX
ZSBkb24ndCBuZWVkIGEgbm9wIHNsZWQgaGVyZSBiZWNhdXNlIG5vYm9keSBzaG91bGQgYmUganVt
cGluZyBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCiAgICAgICAgIGF1dG8ganVtcCA9IGppdC5q
dW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFj
Y2Vzcy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5saW5lQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDE0ICs5OSwxNCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBzdGQ6Om1heChzaXplLCBzaXplRm9yUHJvcGVydHlBY2Nlc3Mo
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3Mo
U3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3Rh
dGljIGJvb2wgY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZv
JiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5
UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsK
LSAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZv
JiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKFN0
cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChT
dHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNl
bGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBi
b29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGlj
IGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1
YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgY2Fu
R2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZv
JiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5
UmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3Bl
cnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENvZGVC
bG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGlz
Q2FjaGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cisg
ICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJbkFjY2Vz
cyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOworICAgIHN0YXRp
YyBib29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZv
Jik7CiAKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lu
bGluZUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CiAgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1YkFz
SnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2Rl
TWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBPVkVSTE9BRF9CSVRX
SVNFX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJdGVyYXRpb25Nb2RlTWV0YWRh
dGEgewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSXRlcmF0aW9uTW9k
ZU1ldGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0
eXBlKHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRpb25Nb2RlKSk7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8u
aAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xM
SW50Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KExMSW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KIAogcHJpdmF0ZToKICAgICB1
aW50cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgeyB1bmxpbmtlZEJp
dCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0YWRhdGFU
YWJsZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSwxNCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBmdW5jKCptZXRhZGF0YSk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CisgICAgQUxXQVlTX0lOTElORSBzaXplX3QgbnVtRW50cmllcygpCisgICAg
eworICAgICAgICBhdXRvKiBzdGFydCA9IGJpdHdpc2VfY2FzdDx0eXBlbmFtZSBPcDo6TWV0YWRh
dGEqPihnZXQoT3A6Om9wY29kZUlEKSk7CisgICAgICAgIGF1dG8qIGVuZCA9IGJpdHdpc2VfY2Fz
dDx0eXBlbmFtZSBPcDo6TWV0YWRhdGEqPihnZXRJbXBsKE9wOjpvcGNvZGVJRCArIDEpKTsKKyAg
ICAgICAgcmV0dXJuIGVuZCAtIHN0YXJ0OworICAgIH0KKwogICAgIHNpemVfdCBzaXplSW5CeXRl
cygpOwogCiAgICAgdm9pZCByZWYoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODAsMTAgKzE4MCwxMCBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJ
CiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVu
dGlmaWVyKCk7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVp
ZCgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCh1aWQpOwotICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0o
KSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3Vy
cmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAg
ICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0
dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAg
ICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciks
IHN0cnVjdHVyZSwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVu
dGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAj
aW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAg
LTY1LDkgKzY2LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKAog
ICAgIEFTU0VSVChoYXNDb25zdGFudElkZW50aWZpZXIpOwogICAgIHNldENhY2hlVHlwZShsb2Nr
ZXIsIENhY2hlVHlwZTo6R2V0QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZp
ZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2st
PnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNl
dCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6aW5pdEFycmF5TGVuZ3RoKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJh
c2UmIGxvY2tlcikKQEAgLTg3LDkgKzg4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5p
dFB1dEJ5SWRSZXBsYQogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0
KTsKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlKTsK
ICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUp
OworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVC
bG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZz
ZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxm
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFN0cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC05Nyw5ICs5OCw5IEBA
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGMKICAgICBBU1NFUlQobV9j
YWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwg
Q2FjaGVUeXBlOjpJbkJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwot
ICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgp
LmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBv
ZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJl
U3R1YkluZm86OmRlcmVmKCkKQEAgLTIzNiw3ICsyMzcsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVz
dWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgIC8vIHdlJ3JlIGJ1ZmZlcmVkIGlzIGJlY2F1
c2Ugd2UgcmVseSBvbiBpdCB0byByZXNldCBkdXJpbmcgR0MgaWYgbV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlCiAgICAgICAgIC8vIGlzIGNvbGxlY3RlZC4KICAgICAgICAgbV9pZGVudGlmaWVy
ID0gbnVsbHB0cjsKLSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7
CisgICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAgICAgICAgIAogICAg
ICAgICAvLyBJZiB3ZSBnZW5lcmF0ZWQgc29tZSBjb2RlIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBh
dHRlbXB0IHRvIHJlcGF0Y2ggaW4gdGhlIGZ1dHVyZSB1bnRpbCB3ZQogICAgICAgICAvLyBnYXRo
ZXIgZW5vdWdoIGNhc2VzLgpAQCAtMjUxLDcgKzI1Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OnJlc2V0KGNvbnN0IENvbmMKIHsKICAgICBjbGVhckJ1ZmZlcmVkU3RydWN0dXJlcygpOwog
ICAgIG1faWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlLmNsZWFyKCk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKIAogICAg
IGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CkBA
IC0yODUsNiArMjg2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29u
YwogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxv
Y2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpJbkJ5SWQ6CkBAIC0zNjAsOCArMzYyLDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7
Ci0gICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgaXNWYWxpZCAm
PSB2bS5oZWFwLmlzTWFya2VkKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7Cisg
ICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2
bSkpCisgICAgICAgIGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpOwogICAg
IGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIGlzVmFsaWQgJj0g
dS5zdHViLT52aXNpdFdlYWsodm0pOwogCkBAIC0zNzUsOCArMzc3LDggQEAgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4K
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImIHZp
c2l0b3IpCiB7Ci0gICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAg
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBp
ZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZpc2l0
b3Iudm0oKSkpCisgICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAKICAg
ICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICB1LnN0dWItPnBy
b3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwpAQCAtNDMwLDYgKzQzMiwyMDQgQEAgQUxXQVlT
X0lOTElORSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1fY2FjaGVUeXBlID0gbmV3
Q2FjaGVUeXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBlID0gdW5saW5rZWRTdHVi
SW5mby5hY2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHViSW5mby5zdGFydDsKKyAg
ICBkb25lTG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93
UGF0aFN0YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlv
bjsKKyAgICBjYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KHVubGlu
a2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpOworICAgIGNvZGVPcmlnaW4gPSBD
b2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgbV9jb2RlUHRy
ID0gc2xvd1BhdGhTdGFydExvY2F0aW9uOworCisgICAgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICBpZiAoYWNjZXNzVHlwZSA9PSBB
Y2Nlc3NUeXBlOjpHZXRCeUlkICYmIHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkpIHsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9yX25leHQsIHdlIGNhbid0IGNsb2Ji
ZXIgdGhlICJkb250Q2xvYmJlclJlZ2lzdGVyIiByZWdpc3RlciBlaXRoZXIuCisgICAgICAgIHVz
ZWRSZWdpc3RlcnMuYWRkKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdp
c3Rlcik7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
RGVsZXRlQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpEZWxldGVCeUlEOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVC
eUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlW
YWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkluQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgor
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisg
ICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOiAK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAg
ICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtp
bmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2Rl
LmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAg
ICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAg
ICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRl
RmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1
dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5k
KSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVu
bGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9k
ZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZp
bmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVy
YXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNz
VHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNl
OworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6
CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlH
UFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJl
Z2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpHZXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgorICAgICAg
ICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgcHJvdG90eXBlSXNLbm93bk9iamVjdCA9IGZhbHNlOwor
ICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAg
ICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnBy
b3RvOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFs
OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0g
ZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6Cisg
ICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5
SWQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAg
ICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVncy50aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlk
V2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2
YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlw
ZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNl
OworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVl
OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsKQor
ICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9maWxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZh
dGVCcmFuZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAg
ICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBJbnZh
bGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgICAgIHJlZ3MuYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YnJhbmQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogI2lm
IEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5
KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2lu
Y2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlU2V0LmgiCkBAIC01Niw2ICs1Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6
IGludDhfdCB7CiAgICAgR2V0QnlWYWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAg
ICBQdXRQcml2YXRlTmFtZSwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2
YXRlTmFtZSwKQEAgLTc4LDYgKzgwLDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3Qg
ewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05
OCw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRU
b0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFS
RV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayBy
ZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2Vs
ZiwKQEAgLTMyNSwxMyArMzMxLDE5IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW47CisgICAgUHJvcGVydHlPZmZzZXQgYnlJZFNlbGZPZmZzZXQ7CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBieUlkU2VsZk9mZnNldCk7IH0KKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgbV9pbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKTsgfQogICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgfSBieUlkU2VsZjsKICAgICAgICAgUG9seW1v
cnBoaWNBY2Nlc3MqIHN0dWI7CiAgICAgfSB1OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIHZtLmdldFN0cnVjdHVyZShtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIH0K
KyAgICBTdHJ1Y3R1cmVJRCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAwIH07CiBwcml2
YXRlOgogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIC8vIFJlcHJl
c2VudHMgdGhvc2Ugc3RydWN0dXJlcyB0aGF0IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nlc3ND
YXNlcyBpbiB0aGUgUG9seW1vcnBoaWNBY2Nlc3MuCkBAIC00NDcsNiArNDU5LDE3IEBAIGlubGlu
ZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW4KICAgICB9CiB9CiAKK3N0cnVjdCBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7Cisg
ICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxk
UHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSB9OworICAgIEVDTUFNb2RlIGVj
bWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgpIH07CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFy
dDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlk
IGNhY2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW5zdGFuY2Vv
ZicgY2FjaGVzLgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVM
b2NhdGlvbjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xv
d1BhdGhTdGFydExvY2F0aW9uOworfTsKKwogI2Vsc2UKIAogY2xhc3MgU3RydWN0dXJlU3R1Yklu
Zm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1w
bGVyLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N1cGVyU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdm9p
ZCBwcmludFN1cGVyU2FtcGxlclN0YXRlKCkKICAgICBkb3VibGUgcGVyY2VudGFnZSA9IDEwMC4w
ICogaW4gLyAoaW4gKyBvdXQpOwogICAgIGlmIChwZXJjZW50YWdlICE9IHBlcmNlbnRhZ2UpCiAg
ICAgICAgIHBlcmNlbnRhZ2UgPSAwLjA7Ci0gICAgZGF0YUxvZygiUGVyY2VudCB0aW1lIGJlaGlu
ZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNlbnRhZ2UsICJcbiIpOworICAgIGRhdGFMb2co
IlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAi
JVxuIik7CiB9CiAKIHZvaWQgZW5hYmxlU3VwZXJTYW1wbGVyKCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVk
ZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgog
I2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2Rl
U3RydWN0cy5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgpAQCAtNzgsNiArNzksOCBAQCBVbmxp
bmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0mCiAgICAgICAgIGNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkobG9ja2VyKTsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9wcml2YXRlQnJh
bmRSZXF1aXJlbWVudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcml2YXRlQnJhbmRSZXF1aXJl
bWVudDo6TmVlZGVkKTsKICAgICB9CisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3
VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldh
cm1VcCgpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CkBAIC0zMTYsNiArMzE5
LDQ4IEBAIGludCBVbmxpbmtlZENvZGVCbG9jazo6b3V0T2ZMaW5lSnVtcE9mZnMKICAgICByZXR1
cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5nZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQogCisjaWYg
QVNTRVJUX0VOQUJMRUQKK2Jvb2wgVW5saW5rZWRDb2RlQmxvY2s6Omhhc0lkZW50aWZpZXIoVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpID4g
MTAwKSB7CisgICAgICAgIGlmIChudW1iZXJPZklkZW50aWZpZXJzKCkgIT0gbV9jYWNoZWRJZGVu
dGlmaWVyVWlkcy5zaXplKCkpIHsKKyAgICAgICAgICAgIExvY2tlciBsb2NrZXIobV9jYWNoZWRJ
ZGVudGlmaWVyVWlkc0xvY2spOworICAgICAgICAgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1w
bCo+IGNhY2hlZElkZW50aWZpZXJVaWRzOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllciA9IGlkZW50aWZpZXIoaSk7CisgICAgICAgICAgICAg
ICAgY2FjaGVkSWRlbnRpZmllclVpZHMuYWRkKGlkZW50aWZpZXIuaW1wbCgpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAg
IG1fY2FjaGVkSWRlbnRpZmllclVpZHMgPSBXVEZNb3ZlKGNhY2hlZElkZW50aWZpZXJVaWRzKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX2NhY2hlZElkZW50aWZpZXJVaWRzLmNvbnRh
aW5zKHVpZCk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9m
SWRlbnRpZmllcnMoKTsgKytpKSB7CisgICAgICAgIGlmIChpZGVudGlmaWVyKGkpLmltcGwoKSA9
PSB1aWQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorI2VuZGlmCisKK2ludDMyX3QgVW5saW5rZWRDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJ
VChpbnQzMl90IHRocmVzaG9sZCkKK3sKKyAgICBzd2l0Y2ggKGRpZE9wdGltaXplKCkpIHsKKyAg
ICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xk
OworICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkICog
NDsKKyAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8g
MjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRocmVzaG9s
ZDsKK30KKworCiB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVz
KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9tZXRhZGF0YS0+aXNGaW5hbGl6ZWQoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxMiBA
QAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUg
IkFycmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNs
dWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCisjaW5jbHVkZSAi
RXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5nZUluZm8uaCIKICNp
bmNsdWRlICJIYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKQEAgLTY0LDYg
KzY2LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZENvZGVCbG9j
a0dlbmVyYXRvcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIHN0cnVjdCBF
eGVjdXRhYmxlSW5mbzsKIGVudW0gY2xhc3MgTGlua1RpbWVDb25zdGFudCA6IGludDMyX3Q7CiAK
QEAgLTE3NSw2ICsxNzgsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGaXhlZFZlY3RvcjxXcml0
ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3Rh
bnRSZWdpc3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJl
Z2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29u
c3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAg
ICBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjsgfQogCkBAIC0yMDcsNiArMjExLDE1IEBAIHB1YmxpYzoKICAgICBKU1Bh
cnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpT
UGFyc2VyU2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rp
b25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0OworICAgIGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0
aW9ucygpLmF0KGluZGV4KS5wdHIoKTsgfQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8q
IGluc3RydWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgICAg
IGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5z
dHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4p
ICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1
Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNF
bmQpOworICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAg
ICB9CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25zU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGluc3Ry
dWN0aW9ucygpLnNpemUoKTsgfQogCiAgICAgdW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29u
c3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KICAgICB1bnNpZ25lZCBudW1WYXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CkBAIC0zMzQsMTAgKzM0NywyMSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpOwogICAgIH0KIAorICAg
IGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQorICAgIHsK
KyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRl
IHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFpc0J1aWx0aW5GdW5jdGlvbigp
OworICAgIH0KICAgICB2b2lkIGFsbG9jYXRlU2hhcmVkUHJvZmlsZXMoKTsKICAgICBVbmxpbmtl
ZFZhbHVlUHJvZmlsZSYgdW5saW5rZWRWYWx1ZVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0
dXJuIG1fdmFsdWVQcm9maWxlc1tpbmRleF07IH0KICAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSYg
dW5saW5rZWRBcnJheVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fYXJyYXlQcm9m
aWxlc1tpbmRleF07IH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgYm9vbCBoYXNJZGVudGlm
aWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CisjZW5kaWYKKworICAgIGludDMyX3QgdGhyZXNob2xk
Rm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKKwogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29k
ZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwg
T3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwogCkBAIC0zOTcsNiArNDIxLDcgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX2xleGljYWxTY29wZUZlYXR1cmVzIDogNDsKIHB1YmxpYzoK
ICAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKKyAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2Rl
PiBtX3VubGlua2VkQmFzZWxpbmVDb2RlOwogcHJpdmF0ZToKICAgICBDb2RlRmVhdHVyZXMgbV9m
ZWF0dXJlcyB7IDAgfTsKICAgICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC00MTMs
NiArNDM4LDkgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJl
YW0+IG1faW5zdHJ1Y3Rpb25zOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM+IG1fbGl2ZW5lc3M7CiAKKyAgICAvLyBPT1BTOiBmaW5kIGEgYmV0dGVyIHBsYWNl
IHRvIHN0b3JlIHRoaXMgc3R1ZmY/CisgICAgVmVjdG9yPEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9i
aW5hcnlBcml0aFByb2ZpbGVzOworICAgIFZlY3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4gbV91bmFy
eUFyaXRoUHJvZmlsZXM7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9m
aWxlIG1fZXhpdFByb2ZpbGU7CkBAIC00NTgsNiArNDg2LDMwIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uLm9mZnNldCgpKTsK
ICAgICB9CisgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIHBj
KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSB0aGlzLT5ieXRlY29k
ZU9mZnNldChwYyk7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUoKQor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9iaW5hcnlBcml0aFByb2ZpbGVzLnNp
emUoKTsKKyAgICAgICAgbV9iaW5hcnlBcml0aFByb2ZpbGVzLmFwcGVuZChCaW5hcnlBcml0aFBy
b2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdW5zaWduZWQg
YWRkVW5hcnlBcml0aFByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0g
bV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgICAgICBtX3VuYXJ5QXJpdGhQcm9maWxl
cy5hcHBlbmQoVW5hcnlBcml0aFByb2ZpbGUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWdu
ZWQgaSkgeyByZXR1cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0
aFByb2ZpbGUmIHVuYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlB
cml0aFByb2ZpbGVzW2ldOyB9CisKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50
RXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7IH0KIAogcHJp
dmF0ZToKICAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5zdHJ1Y3Rp
b25TdHJlYW06Ok9mZnNldCwgaW50PjsKQEAgLTQ2NSw5ICs1MTcsMTUgQEAgcHJpdmF0ZToKICAg
ICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZlY3RvcjxFeHByZXNz
aW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291
bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRWYWx1
ZVByb2ZpbGU+IG1fdmFsdWVQcm9maWxlczsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZEFycmF5
UHJvZmlsZT4gbV9hcnJheVByb2ZpbGVzOwogCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBMb2Nr
IG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrOworICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0lt
cGwqPiBtX2NhY2hlZElkZW50aWZpZXJVaWRzOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBE
RUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShK
U0NlbGwqLCBWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKICAgICBi
b29sIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX2Nv
ZGVCbG9jay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9CiAgICAgYm9vbCBo
YXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5oYXNDaGVja3BvaW50
cygpOyB9CiAgICAgYm9vbCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay0+aGFzVGFpbENhbGxzKCk7IH0KKyAgICB1bnNpZ25lZCBhZGRCaW5hcnlBcml0aFByb2ZpbGUo
KSB7IHJldHVybiBtX2NvZGVCbG9jay0+YWRkQmluYXJ5QXJpdGhQcm9maWxlKCk7IH0KKyAgICB1
bnNpZ25lZCBhZGRVbmFyeUFyaXRoUHJvZmlsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRV
bmFyeUFyaXRoUHJvZmlsZSgpOyB9CiAKICAgICAvLyBVcGRhdGluZyBVbmxpbmtlZENvZGVCbG9j
ay4KICAgICB2b2lkIHNldEhhc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFzQ2hl
Y2twb2ludHMoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkTWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFVubGlua2VkTWV0YWRhdGFUYWJsZSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIE9wY29kZT4KKyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNv
bnN0IE9wY29kZSYgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQp
OworICAgICAgICB1aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRU
YWJsZTMyKClbT3Bjb2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNv
ZGVJRF07CisgICAgICAgIGJhc2VUeXBlT2Zmc2V0ID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGln
bm9mKHR5cGVuYW1lIE9wY29kZTo6TWV0YWRhdGEpLCBiYXNlVHlwZU9mZnNldCk7CisgICAgICAg
IHJldHVybiBiYXNlVHlwZU9mZnNldCArIHNpemVvZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRh
KSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7CisgICAgfQorCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgogICAgIHVuc2lnbmVkIG51bUVudHJpZXMoKTsKIApAQCAtMTA3LDYgKzExNiw3
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzX29mZnNldDE2VGFibGVTaXplOwogICAgIH0K
IAorCiAgICAgdXNpbmcgT2Zmc2V0MzIgPSB1aW50MzJfdDsKICAgICB1c2luZyBPZmZzZXQxNiA9
IHVpbnQxNl90OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQ
cm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zh
bHVlUHJvZmlsZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEzICs0NSwxMSBA
QCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0c0FyZ3VtZW50OwogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHMgPSAxOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYnVja2V0SW5kZXhNYXNrID0gbnVtYmVyT2ZCdWNrZXRz
IC0gMTsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZCdWNrZXRz
ID0gbnVtYmVyT2ZCdWNrZXRzICsgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHM7CiAgICAgCiAgICAg
VmFsdWVQcm9maWxlQmFzZSgpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkKLSAgICAgICAgICAgIG1fYnVja2V0c1tpXSA9
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgICAgICBjbGVhckJ1Y2tldHMoKTsKICAg
ICB9CiAgICAgCiAgICAgRW5jb2RlZEpTVmFsdWUqIHNwZWNGYWlsQnVja2V0KHVuc2lnbmVkIGkp
CkBAIC01OSw2ICs1NywxMiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIEFT
U0VSVChudW1iZXJPZkJ1Y2tldHMgKyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHMpOwogICAgICAg
ICByZXR1cm4gbV9idWNrZXRzICsgbnVtYmVyT2ZCdWNrZXRzICsgaTsKICAgICB9CisKKyAgICB2
b2lkIGNsZWFyQnVja2V0cygpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkKKyAgICAgICAgICAgIG1fYnVja2V0c1tpXSA9
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIH0KICAgICAKICAgICBjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mbyh1bnNpZ25lZCBidWNrZXQpIGNvbnN0CiAgICAgewpAQCAtMTIzLDgg
KzEyNyw2IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25l
LiBOZXZlciBjYWxsIHRoaXMgZnJvbSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVj
dXRpbmcgdGhlIGNvZGUuCiAgICAgU3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0
aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkgewpAQCAtMTM5LDcgKzE0
MSw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgCiAgICAgICAgIHJldHVy
biBtX3ByZWRpY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNr
ZXRzW3RvdGFsTnVtYmVyT2ZCdWNrZXRzXTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGlj
dGlvbiB7IFNwZWNOb25lIH07CkBAIC0xNjEsNiArMTYzLDcgQEAgc3RydWN0IFZhbHVlUHJvZmls
ZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldAogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZh
bHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgp
IDogVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPigpIHsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0c1swXSk7IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5OCw3
ICsxNTk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRVbmFyeQogICAg
ICAgICBlbWl0VW5hcnlPcDxPcE5vdD4oZHN0LCBzcmMpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5
cGUpOworICAgICAgICBPcE5lZ2F0ZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSwgbV9jb2Rl
QmxvY2stPmFkZFVuYXJ5QXJpdGhQcm9maWxlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IG9wX2JpdG5vdDoKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BCaXRub3Q+KGRzdCwgc3JjKTsKQEAg
LTE2OTYsMTMgKzE2OTYsMTMgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRU
eXBlTwogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluYyhSZWdpc3RlcklE
KiBzcmNEc3QpCiB7Ci0gICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0KTsKKyAgICBPcEluYzo6
ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsK
ICAgICByZXR1cm4gc3JjRHN0OwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdERlYyhSZWdpc3RlcklEKiBzcmNEc3QpCiB7Ci0gICAgT3BEZWM6OmVtaXQodGhpcywgc3Jj
RHN0KTsKKyAgICBPcERlYzo6ZW1pdCh0aGlzLCBzcmNEc3QsIG1fY29kZUJsb2NrLT5hZGRVbmFy
eUFyaXRoUHJvZmlsZSgpKTsKICAgICByZXR1cm4gc3JjRHN0OwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4Miw3ICs2ODIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqPgogICAgICAgICBlbWl0
QmluYXJ5T3AoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZWdpc3RlcklEKiBz
cmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJpbmFyeU9w
OjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMpOworICAgICAgICAgICAgQmluYXJ5
T3A6OmVtaXQodGhpcywgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcywgbV9jb2RlQmxvY2stPmFkZEJp
bmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0pldHRp
c29uaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5oIgpAQCAtMzQsNyArMzUsOSBAQAogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5o
IgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0
LmgiCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSlNDYXN0LmgiCisjaW5jbHVk
ZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgi
CiAjaW5jbHVkZSAiUmVjb3JkZWRTdGF0dXNlcy5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KQEAg
LTcwLDcgKzczLDcgQEAgc3RydWN0IFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uIHsKICAgICBXcml0
ZUJhcnJpZXI8SlNDZWxsPiBtX3RvOwogfTsKICAgICAgICAgCi1jbGFzcyBDb21tb25EYXRhIHsK
K2NsYXNzIENvbW1vbkRhdGEgOiBwdWJsaWMgTWF0aElDSG9sZGVyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDb21tb25EYXRhKTsKIHB1YmxpYzoKICAgICBDb21tb25EYXRhKCkKQEAgLTEx
Niw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8Q29kZUJsb2NrSmV0dGlzb25p
bmdXYXRjaHBvaW50PiBtX3dhdGNocG9pbnRzOwogICAgIEZpeGVkVmVjdG9yPEFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludD4gbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzOwogICAgIEZp
eGVkVmVjdG9yPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gbV9hZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKICAgICBSZWNvcmRlZFN0
YXR1c2VzIHJlY29yZGVkU3RhdHVzZXM7CiAgICAgVmVjdG9yPEp1bXBSZXBsYWNlbWVudD4gbV9q
dW1wUmVwbGFjZW1lbnRzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGUuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIK
KyNpbmNsdWRlICJKdW1wVGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIFRyYWNr
ZWRSZWZlcmVuY2VzOwogCitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1
bXBUYWJsZTsKKwogbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEpJVENvbXBpbGVyOwpAQCAtMTAx
LDYgKzEwNCw4IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQ
QyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgZmluYWw7CiAKICAgICB1c2luZyBEaXJlY3RKSVRDb2Rl
Ojppbml0aWFsaXplQ29kZVJlZkZvckRGRzsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1Rv
Q29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2RlT3JpZ2lu
TWFwLmdldCgpOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRDb21waWxl
cjsgLy8gQWxsb3cgSklUQ29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCkuCkBAIC0xNDAsNiAr
MTQ1LDggQEAgcHVibGljOgogICAgIEhhc2hNYXA8Qnl0ZWNvZGVJbmRleCwgVHJpZ2dlclJlYXNv
bj4gdGllclVwRW50cnlUcmlnZ2VyczsKIAogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1f
b3NyRW50cnlCbG9jazsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNo
SnVtcFRhYmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlczsKICAgICB1bnNpZ25lZCBvc3JFbnRyeVJldHJ5OwogICAgIGJvb2wgYWJh
bmRvbk9TUkVudHJ5OwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODUsMTMgKzE4NSwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtC
dWZmZXImIGxpbmtCCiAgICAgCiAgICAgbV9ncmFwaC5yZWdpc3RlckZyb3plblZhbHVlcygpOwog
Ci0gICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkgfHwg
IW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgewotICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAoIW1f
Z3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
ID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7Ci0gICAgICAgIGlm
ICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZN
b3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKLSAgICB9CisgICAgQVNTRVJUKG1faml0
Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1f
aml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgaWYgKCFtX2dyYXBo
Lm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIAorICAgICAgICBtX2ppdENvZGUt
Pm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMpOworICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0
eSgpKQorICAgICAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9n
cmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwogCiAgICAgZm9yIChCYWc8U3dpdGNoRGF0YT46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fc3dpdGNoRGF0YS5iZWdpbigpOyAhIWl0ZXI7ICsraXRl
cikgewogICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKippdGVyOwpAQCAtMTk5LDEyICsxOTgs
MTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBj
YXNlIFN3aXRjaENoYXI6CiAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CiAgICAgICAgICAgICBp
ZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KS5pc0VtcHR5KCkp
OworICAgICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tk
YXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShk
YXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUlu
ZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENv
ZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAg
ICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dp
dGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXpl
KCkgPT0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpKTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCk7IGotLTsp
CkBAIC0yMTksMTIgKzIxOCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXIm
IGxpbmtCCiAKICAgICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6IHsKICAgICAgICAgICAgIGlmICgh
ZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxv
Y2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHko
KSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJs
ZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dp
dGNoVGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdo
LmJsb2NrLT5pbmRleF0pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua2VkVGFibGUu
bV9jdGlPZmZzZXRzLnNpemUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUuc2l6ZSgp
ICsgMSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbGlua2VkVGFibGUubV9jdGlP
ZmZzZXRzKQpAQCAtMzMzLDcgKzMzMiw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIu
ZGlkQnVpbGRNYXBwaW5nKCkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdp
bk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcikpOworICAgICAgICBtX2ppdENvZGUtPmNvbW1vbi5t
X3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92
ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpOwogfQogCiBzdGF0aWMg
dm9pZCBlbWl0U3RhY2tPdmVyZmxvd0NoZWNrKEpJVENvbXBpbGVyJiBqaXQsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYgc3RhY2tPdmVyZmxvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcs
NiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqCiAgICAgQVNTRVJU
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFT
U0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNT
RVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0
Q29kZSgpLT5kZmdDb21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIAogICAgIGlmICghT3B0aW9uczo6
dXNlT1NSRW50cnlUb0RGRygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IAorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgi
CiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpJVC5oIgpAQCAtMTE5LDEw
ICsxMjAsMTAgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKFZNJiB2bSwgQ0NhbGxIZWxwZQogICAg
IGludDMyX3QgY2xpcHBlZFZhbHVlOwogICAgIHN3aXRjaCAoaml0LmNvZGVCbG9jaygpLT5qaXRU
eXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAgY2xpcHBlZFZhbHVl
ID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxv
Y2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVl
ID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKHRhcmdldFZhbHVl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6Ci0gICAgICAgIGNs
aXBwZWRWYWx1ZSA9IFVwcGVyVGllckV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQo
aml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKSwgdGFyZ2V0VmFsdWUpOworICAgICAgICBj
bGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xk
KHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTMxMyw2ICszMTQsMTAgQEAgdm9pZCByZWlm
eUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICAgICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1
ZUNhbGxlcik7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpLCBjYWxs
ZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVn
aXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSk7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5pbnN0
cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJh
c2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUikpOworICAgICAgICB9IGVs
c2UgaWYgKHRydWVDYWxsZXIpIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwor
ICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3Qo
aW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgSklUOjpzX21ldGFkYXRhR1BSKSk7
CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJh
c2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5iYXNlbGluZUpJVENvbnN0YW50UG9vbCgpKSwgY2Fs
bGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgSklUOjpzX2Nv
bnN0YW50c0dQUikpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKQpAQCAtNDA0LDYgKzQwOSw5IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFy
Z2V0KFZNJiB2bSwgQ0NhbGwKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsK
ICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2UgeworICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJs
ZSgpKSwgSklUOjpzX21ldGFkYXRhR1BSKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPmJhc2VsaW5lSklUQ29uc3RhbnRQb29s
KCkpLCBKSVQ6OnNfY29uc3RhbnRzR1BSKTsKKwogICAgICAgICBjb2RlQmxvY2tGb3JFeGl0LT5t
X2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZXhpdElu
ZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGlu
ZXMuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1Bh
dGhzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgpA
QCAtMjg2OSw3ICsyODcwLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkZp
bmRTdwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
ICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gY29kZUJsb2NrLT5kZmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIEFT
U0VSVCh2YWx1ZS5pc0RvdWJsZSgpKTsKICAgICBkb3VibGUgYXNEb3VibGUgPSB2YWx1ZS5hc0Rv
dWJsZSgpOwpAQCAtMjg5MCw3ICsyODkxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblN3aXRjaAogCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxs
cHRyKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKICAgICByZXR1cm4gbGlua2VkVGFibGUuY3RpRm9yVmFsdWUoKnVubGlua2VkVGFi
bGUsIHN0ckltcGwpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczMCw2ICs3MzAsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlVGFnR1BSLCBjYWxs
ZWVQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFs
bG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51
bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9q
aXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKIAogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAgICAgICAgICAgIEVk
Z2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwpAQCAt
ODg5LDcgKzg5MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUK
IAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwp
IHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQs
IGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+
b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZs
ZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1f
aml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzNCw2ICs4MzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUg
PSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVHUFIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAg
ICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJh
bWV0ZXJzKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2Ug
PSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTk4NSw3ICs5ODYs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAg
ICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0
LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywg
WyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1
ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5ODUsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQdXRQcml2YXRlTmEKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0g
dGhpcy0+dXNlZFJlZ2lzdGVycygpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBj
YWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1f
aml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBB
Y2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1
ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VHUFIpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJv
cGVydHlHUFIpLCB2YWx1ZVJlZ3MsIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBn
ZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAKQEAgLTQ5MDUsNyArNDkw
NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9j
a0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJp
dGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRBZGRJQyog
YWRkSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAg
ICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRBZGRJQyhh
cml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFs
dWVBZGRPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlv
blZhbHVlQWRkOwogICAgIApAQCAtNDk4OSw3ICs0OTg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVZhbHVlU3ViKE5vZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sg
PSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFu
dGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4
KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmNvZGVCbG9jaygp
LT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1faml0
LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byBy
ZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplOwogICAgIGF1dG8g
bm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWI7CiAKQEAgLTU1NzEsNyAr
NTU3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU5lZ2F0ZSgKICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVC
bG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgVW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT51bmFyeUFy
aXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUTmVnSUMq
IG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7Cisg
ICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUTmVnSUMo
YXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFy
aXRoTmVnYXRlT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVy
YXRpb25Bcml0aE5lZ2F0ZTsKICAgICBjb21waWxlTWF0aElDKG5vZGUsIG5lZ0lDLCByZXBhdGNo
aW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CkBAIC01ODE1LDcgKzU4MTUsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVNdWwoTm9kCiAgICAgQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgg
PSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJv
ZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUTXVsSUMqIG11bElD
ID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgSklU
TXVsSUMqIG11bElDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUTXVsSUMoYXJpdGhQ
cm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVs
T3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1
ZU11bDsKIApAQCAtMTQ3NzMsNyArMTQ3NzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTG9nU2hhZG93Q2hpCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9k
ZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBzY29wZVJlZyA9IHNjb3BlLmdwcigpOwogCi0gICAg
bV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVn
cywgc2NvcGVSZWcsIG1faml0LmNvZGVCbG9jaygpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBtX2pp
dC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBz
Y29wZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwg
Y2FsbFNpdGVJbmRleCk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU2LDcgKzE1Niw3IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUK
IAogICAgIGlmICh2bS5zaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpIHsKICAg
ICAgICAgQjM6OlBDVG9PcmlnaW5NYXAgb3JpZ2luTWFwID0gc3RhdGUucHJvYy0+cmVsZWFzZVBD
VG9PcmlnaW5NYXAoKTsKLSAgICAgICAgY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcCht
YWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0s
IFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIp
KTsKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+Y29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBt
YWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0s
IFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIp
OwogICAgIH0KIAogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGxhYmVsID0g
c3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mPEpTRW50cnlQdHJU
YWc+KHN0YXRlLnByb2MtPmNvZGUoKS5lbnRyeXBvaW50TGFiZWwoMCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2
ICs2OCw4IEBAIHB1YmxpYzoKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpIG92ZXJy
aWRlOwogICAgIHN0YXRpYyBwdHJkaWZmX3QgY29tbW9uRGF0YU9mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihKSVRDb2RlLCBjb21tb24pOyB9CiAgICAgdm9pZCBzaHJpbmtUb0ZpdChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImKSBvdmVycmlkZTsKKworICAgIFBDVG9Db2RlT3JpZ2lu
TWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9D
b2RlT3JpZ2luTWFwLmdldCgpOyB9CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhIGNvbW1vbjsK
ICAgICBWZWN0b3I8T1NSRXhpdD4gbV9vc3JFeGl0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04OSw2ICs4OSw3IEBACiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJP
cGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKKyNpbmNsdWRlICJQ
Q1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUg
IlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1l
LmgiCkBAIC0yMzIwLDYgKzIzMjEsMTggQEAgcHJpdmF0ZToKICAgICAgICAgY29tcGlsZUJpbmFy
eU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9u
LCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
YW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRp
YyBKSVRBZGRJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0
aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRBZGRJQyhwcm9maWxlKTsg
fQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+
Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVE11bElDKiBhZGRNYXRoSUMoREZHOjpDb21t
b25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29t
bW9uLmFkZEpJVE11bElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxH
ZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklU
TmVnSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgVW5hcnlBcml0aFByb2Zp
bGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVFN1YklDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRh
JiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFk
ZEpJVFN1YklDKHByb2ZpbGUpOyB9CisKICAgICB2b2lkIGNvbXBpbGVWYWx1ZU11bCgpCiAgICAg
ewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwpAQCAtMjM5MSw3ICsyNDA0LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4g
bWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0
ZSgpOwotICAgICAgICAgICAgICAgIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9
IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAg
ICAgICAgICAgICAgICBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRo
SUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAg
ICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IoSlNWYWx1ZVJlZ3Mo
cGFyYW1zWzBdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgcGFyYW1zLmdw
U2NyYXRjaCgwKSk7CiAKICAgICAgICAgICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcg
PSBmYWxzZTsKQEAgLTI1MDAsNyArMjUxMyw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgICAg
ICAgICAgICAgIEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAg
ICBKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5h
ZGRNYXRoSUM8R2VuZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVEJp
bmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0
ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJ
Qy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNW
YWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MocGFyYW1zWzFdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwgcGFyYW1z
LmZwU2NyYXRjaCgwKSwKICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmZwU2NyYXRjaCgxKSwg
cGFyYW1zLmdwU2NyYXRjaCgwKSk7CkBAIC00MzE3LDcgKzQzMzAsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkZUTEpJVCkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAg
ICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUo
Ci0gICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVT
ZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAg
ICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRp
Y09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAg
ICAgICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
SW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0
dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwpAQCAtMTAyODUsNiArMTAyOTgsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNz
ZWRBcmdzOyBpIDwgbnVtQWxsb2NhdGVkQXJnczsgKytpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQoVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRl
ZmluZWQoKSkpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdz
ID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFy
YW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9j
aygpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2Vt
YW50aWNOb2RlT3JpZ2luKTsKQEAgLTEwNDQzLDEzICsxMDQ1NywxNCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJl
Y292ZXJ5Rm9ySlNWYWx1ZSgpKTsKIAogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBh
c3NlZEFyZ3MgPSBudW1BcmdzOworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFt
ZXRlcnMgPSBqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMo
aml0LmNvZGVCbG9jaygpKTsKIAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWls
Q2FsbCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwg
SW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAg
ICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWls
Q2FsbCgpOwogICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA3OTIsNyArMTA4MDcsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAg
aWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRH
UFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwg
R1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVG
b3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMTA3Myw3ICsx
MTA4OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAg
ICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpy
ZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0gewor
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0
YS5yYgkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAg
ICAgZGVmIHN0cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRl
ZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZz
ZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVz
Lm1hcCBkbyB8ZmllbGROYW1lfAorICAgICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisg
ICAgICAgICAgICBlbmQuam9pbigiXG4iKQorICAgICAgICBlbmQKKworICAgICAgICBkZWYgY29u
dmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcywgZmllbGROYW1lcykKICAgICAgICAgICAgIGZpZWxk
cy5tYXAgZG8gfGZpZWxkLCB0eXBlfAogICAgICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8g
SGFzaAotICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0Rmll
bGRzKHByZWZpeCArICcgICAgJywgdHlwZSl9XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAg
ICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcs
IHR5cGUsIGZpZWxkTmFtZXMpfVxuI3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19z
fTsiCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAg
ICAgICAgICAgICAgZmllbGROYW1lcy5wdXNoKGZpZWxkTmFtZSkKKyAgICAgICAgICAgICAgICAg
ICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGROYW1lfTsiCiAgICAgICAgICAgICAg
ICAgZW5kCiAgICAgICAgICAgICBlbmQuam9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAg
ICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZp
ZWxkTmFtZXMgPSBbXQorICAgICAgICBwcmVmaXggPSAiICAgICAgICAiCisgICAgICAgIGZpZWxk
cyA9IGNvbnZlcnRGaWVsZHMocHJlZml4LCBAZmllbGRzLCBmaWVsZE5hbWVzKQorICAgICAgICBm
aWVsZHMgPSBmaWVsZHMgKyAiXG4iICsgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgs
IGZpZWxkTmFtZXMpCiAKICAgICAgICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxp
emVycyAmJiAobm90IEBpbml0aWFsaXplcnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjcsNiArMzY3LDI4IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpsb2FkUHJvcGVy
dHkoR1BSUmUKICAgICAgICAgcmVzdWx0KTsKIH0KIAordm9pZCBBc3NlbWJseUhlbHBlcnM6OnN0
b3JlUHJvcGVydHkoSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBvYmplY3QsIEdQUlJlZyBvZmZz
ZXQsIEdQUlJlZyBzY3JhdGNoKQoreworICAgIEp1bXAgaXNJbmxpbmUgPSBicmFuY2gzMihMZXNz
VGhhbiwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAK
KyAgICBsb2FkUHRyKEFkZHJlc3Mob2JqZWN0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoKTsKKyAgICBuZWczMihvZmZzZXQpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9m
ZnNldCwgb2Zmc2V0KTsKKyAgICBKdW1wIHJlYWR5ID0ganVtcCgpOworICAgIAorICAgIGlzSW5s
aW5lLmxpbmsodGhpcyk7CisgICAgYWRkUHRyKAorICAgICAgICBUcnVzdGVkSW1tMzIoCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXplb2YoSlNPYmplY3QpKSAtCisgICAgICAg
ICAgICAoc3RhdGljX2Nhc3Q8aW50MzJfdD4oZmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMikgKiBz
dGF0aWNfY2FzdDxpbnQzMl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSksCisgICAgICAgIG9i
amVjdCwgc2NyYXRjaCk7CisgICAgCisgICAgcmVhZHkubGluayh0aGlzKTsKKyAgICAKKyAgICBz
dG9yZVZhbHVlKHZhbHVlLAorICAgICAgICBCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1l
c0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpKTsKK30KKwogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRMb2FkU3RydWN0dXJlKFZNJiB2
bSwgUmVnaXN0ZXJJRCBzb3VyY2UsIFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3JhdGNo
KQogewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02OTgsOCArNzIwLDEzIEBAIHZvaWQgQXNzZW1i
bHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXMKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVt
aXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxM
aW5rSW5mbyogaW5mbykKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86
OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6
cmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0s
IGluZm8pOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91
dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIENhbGxMaW5rSW5mbyogaW5mbykKK3sKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNhbGwg
PSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CiAgICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGw8SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyODI2NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzQsOCArMjM0LDkgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogICAgIAotICAg
IC8vIE5vdGUgdGhhdCB0aGlzIGNsb2JiZXJzIG9mZnNldC4KKyAgICAvLyBOb3RlIHRoYXQgdGhl
c2UgY2xvYmJlciBvZmZzZXQuCiAgICAgdm9pZCBsb2FkUHJvcGVydHkoR1BSUmVnIG9iamVjdCwg
R1BSUmVnIG9mZnNldCwgSlNWYWx1ZVJlZ3MgcmVzdWx0KTsKKyAgICB2b2lkIHN0b3JlUHJvcGVy
dHkoSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBvYmplY3QsIEdQUlJlZyBvZmZzZXQsIEdQUlJl
ZyBzY3JhdGNoKTsKIAogICAgIHZvaWQgbW92ZVZhbHVlUmVncyhKU1ZhbHVlUmVncyBzcmNSZWdz
LCBKU1ZhbHVlUmVncyBkZXN0UmVncykKICAgICB7CkBAIC0xNzIwLDYgKzE3MjEsNyBAQCBwdWJs
aWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBDYWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsKICAgICAKICAgICB2b2lkIG1h
a2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFja0Zv
ckNDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJ
VENvZGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFz
ZWxpbmVKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKKworI2luY2x1ZGUgIkpJVE1hdGhJQy5o
IgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitKSVRBZGRJQyogTWF0aElDSG9sZGVyOjphZGRKSVRBZGRJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRk
KGFyaXRoUHJvZmlsZSk7IH0KK0pJVE11bElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJp
dGhQcm9maWxlKTsgfQorSklUU3ViSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMoQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFBy
b2ZpbGUpOyB9CitKSVROZWdJQyogTWF0aElDSG9sZGVyOjphZGRKSVROZWdJQyhVbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxl
KTsgfQorCit2b2lkIE1hdGhJQ0hvbGRlcjo6YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3Ro
ZXIpCit7CisgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICBtX211
bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAgIG1fbmVnSUNzID0gV1RGTW92ZShv
dGhlci5tX25lZ0lDcyk7CisgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsK
K30KKworQmFzZWxpbmVKSVRDb2RlOjpCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRy
VGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgIDog
RGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQpCisgICAgLCBNYXRoSUNIb2xkZXIoKQoreyB9CisKK0Jhc2VsaW5lSklUQ29kZTo6
fkJhc2VsaW5lSklUQ29kZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIK
KyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQmluYXJ5QXJpdGhQcm9maWxlOworY2xhc3MgVW5hcnlBcml0aFBy
b2ZpbGU7CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBTaW1wbGVK
dW1wVGFibGU7CitzdHJ1Y3QgU3RyaW5nSnVtcFRhYmxlOworCitjbGFzcyBNYXRoSUNIb2xkZXIg
eworcHVibGljOgorICAgIHZvaWQgYWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpOwor
ICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRN
dWxJQyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUU3ViSUMqIGFk
ZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJ
QyhVbmFyeUFyaXRoUHJvZmlsZSopOworCitwcml2YXRlOgorICAgIEJhZzxKSVRBZGRJQz4gbV9h
ZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKKyAgICBCYWc8SklUTmVnSUM+IG1f
bmVnSUNzOworICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Cit9OworCitjbGFzcyBKSVRDb25z
dGFudFBvb2wgeworcHVibGljOgorICAgIHVzaW5nIENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAg
ICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAgR2xvYmFsT2JqZWN0LAorICAg
ICAgICBDYWxsTGlua0luZm8sCisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvLAorICAgICAgICBG
dW5jdGlvbkRlY2wsCisgICAgICAgIEZ1bmN0aW9uRXhwciwKKyAgICB9OworCisgICAgc3RydWN0
IFZhbHVlIHsKKyAgICAgICAgVHlwZSB0eXBlOworICAgICAgICBQYWNrZWRQdHI8dm9pZD4gcGF5
bG9hZDsKKyAgICB9OworCisgICAgSklUQ29uc3RhbnRQb29sKCkgPSBkZWZhdWx0OworICAgIEpJ
VENvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworICAgIEpJVENvbnN0
YW50UG9vbCYgb3BlcmF0b3I9KEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBD
b25zdGFudCBhZGQoVHlwZSB0eXBlLCB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cikKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgbV9j
b25zdGFudHMuYXBwZW5kKFZhbHVlIHsgdHlwZSwgcGF5bG9hZCB9KTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRzLnNpemUoKTsgfQorICAgIFZhbHVlIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50c1tpXTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxWYWx1ZT4gbV9jb25zdGFu
dHM7Cit9OworCisKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2Rl
LCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29k
ZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0
eUNoZWNrKTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisgICAgUENUb0NvZGVP
cmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1RvQ29k
ZU9yaWdpbk1hcC5nZXQoKTsgfQorCisgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3Vu
bGlua2VkQ2FsbHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsK
KyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsK
KyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAg
ICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsK
KyAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25z
dGFudFBvb2w7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9D
b2RlT3JpZ2luTWFwOworICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGlu
ZUpJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFz
ZWxpbmVKSVRQbGFuLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3
IEBAIHNpemVfdCBCYXNlbGluZUpJVFBsYW46OmNvZGVTaXplKCkgY29uc3QKIAogQ29tcGlsYXRp
b25SZXN1bHQgQmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6ZSgpCiB7Ci0gICAgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBDb21waWxh
dGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRocmVhZChtX2NvZGVCbG9j
ayk7CiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgog
ICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxl
IiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0
Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuUHJvbG8KICAgICBzdG9y
ZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12b2lkIENDYWxsSGVscGVyczo6bG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQ
YWNrZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tl
bjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOwotICAgIHN0b3JlVmFsdWUo
dGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29w
ZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxv
Y2spKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgY2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRv
d0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRj
aDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAgICBTaGFkb3dDaGlja2VuKiBzaGFk
b3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpAQCAtNzIsNiArNjIsMjggQEAgdm9pZCBD
Q2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQogICAgIHN0b3JlUHRyKHNjcmF0Y2gy
LCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9CiAKKwordGVtcGxhdGUgPHR5cGVuYW1l
IENvZGVCbG9ja1R5cGU+Cit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJS
ZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXgpCit7CisgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBm
cmFtZSkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tl
dDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihT
aGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKKyAgICBzdG9yZVZhbHVlKHRoaXNSZWdz
LCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgdGhpc1ZhbHVlKSkpOworICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Cisg
ICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOworICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Cit9
CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcg
c2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBUcnVzdGVk
SW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIGxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdzLCBzY29w
ZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwordm9pZCBDQ2FsbEhlbHBlcnM6Omxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdz
IHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hh
ZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9
CisKIHZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBl
cnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQogewogICAgIENDYWxsSGVs
cGVycyBqaXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxw
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4NDAsMTQgQEAgcHVibGljOgogICAgIC8v
IFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9sYXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFz
c3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRvcCBvZgogICAgIC8vIHN0YWNrIHRvIG1h
cnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3Vl
UGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3Bl
KTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNr
ZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayosIENhbGxT
aXRlSW5kZXgpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFk
b3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5
cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworcHVibGljOgorICAg
IHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ss
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BS
UmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgp
OworCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91
bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQ
UiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw4ICszNywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBDYWxsRnJh
bWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayogY29kZUJs
b2NrKQogeworICAgIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb2RlQmxvY2stPmNhbGxlZVNh
dmVSZWdpc3RlcnMoKSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2Fs
bGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZl
TG9jYXRpb25zKQorewogICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMgeyBSZWdp
c3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkgfTsKLSAgICBjb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zID0gY29kZUJsb2NrLT5jYWxsZWVTYXZl
UmVnaXN0ZXJzKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVyU2F2ZUxv
Y2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSB7
IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDEzIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8VmFsdWVS
ZWNvdmVyeT4gYXJnczsKICAgICB1bnNpZ25lZCBudW1Mb2NhbHMgeyBVSU5UX01BWCB9OwogICAg
IHVuc2lnbmVkIG51bVBhc3NlZEFyZ3MgeyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG51bVBh
cmFtZXRlcnMgeyBVSU5UX01BWCB9OyAvLyBPbiBvdXIgbWFjaGluZSBmcmFtZS4KICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIFJlZ2lzdGVyTWFwPFZhbHVlUmVjb3Zlcnk+IHJlZ2lzdGVyczsKICAg
ICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZhbGlkR1BSUmVnIH07CiAKICAgICB2b2lk
IHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldHVwQ2Fs
bGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCopOwogI2VuZGlmCiAg
ICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgQ2FsbEZyYW1lU2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZm
bGVyKENDYQogICAgIDogbV9qaXQoaml0KQogICAgICwgbV9vbGRGcmFtZShkYXRhLm51bUxvY2Fs
cyArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKICAgICAsIG1f
bmV3RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0
ZXJzLCBudWxscHRyKQotICAgICwgbV9hbGlnbmVkT2xkRnJhbWVTaXplKENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzCi0gICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZy
YW1lKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAsIG1fYWxpZ25lZE9s
ZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIHJvdW5kQXJndW1l
bnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLm51bVBhcmFtZXRlcnMpKQogICAgICwgbV9hbGlnbmVk
TmV3RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCiAgICAgICAgICsg
cm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEuYXJncy5zaXplKCkpKQogICAgICwg
bV9mcmFtZURlbHRhKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSAtIG1fYWxpZ25lZE9sZEZyYW1lU2l6
ZSkKICAgICAsIG1fbG9ja2VkUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKSkK
ICAgICAsIG1fbnVtUGFzc2VkQXJncyhkYXRhLm51bVBhc3NlZEFyZ3MpCisgICAgLCBtX251bVBh
cmFtZXRlcnMoZGF0YS5udW1QYXJhbWV0ZXJzKQogewogICAgIC8vIFdlIGFyZSBhbGxvd2VkIGFs
bCB0aGUgdXN1YWwgcmVnaXN0ZXJzLi4uCiAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsgKQpAQCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQgQ2FsbEZy
YW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgYXJndW1lbnRDb3VudE9LID0KICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbV9uZXdGcmFtZUJhc2UsCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0
ZXJzKCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9udW1Q
YXJhbWV0ZXJzKSk7CiAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUlu
UmVnaXN0ZXJzKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0LmFuZDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpLCBtX25ld0ZyYW1l
QmFzZSk7CiAgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXpl
b2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1fbmV3RnJhbWVCYXNlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICAgICAgQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEgZGF0YTsKICAgICAgICAgZGF0YS5udW1Mb2NhbHMgPSBudW1Mb2Nh
bHMoKTsKICAgICAgICAgZGF0YS5udW1QYXNzZWRBcmdzID0gbV9udW1QYXNzZWRBcmdzOworICAg
ICAgICBkYXRhLm51bVBhcmFtZXRlcnMgPSBtX251bVBhcmFtZXRlcnM7CiAgICAgICAgIGRhdGEu
Y2FsbGVlID0gZ2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSB9
KS0+cmVjb3ZlcnkoKTsKICAgICAgICAgZGF0YS5hcmdzLnJlc2l6ZShhcmdDb3VudCgpKTsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudCgpOyArK2kpCkBAIC03OTgsNiAr
Nzk5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBlcmZvcm1TYWZlV3JpdGVzKCk7CiAgICAgCiAg
ICAgdW5zaWduZWQgbV9udW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBt
X251bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5
LDcgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6
OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykK
KyAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgbnVsbHB0cikKICAgICAsIG1faW50ZXJwcmV0ZXIo
dm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLnNpemUoKSA6IDApCiAgICAgLCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cih2bSkKQEAgLTc3LDYgKzc3LDkgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAg
bV9nbG9iYWxPYmplY3RDb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7CisgICAgbV9wcm9maWxlZENvZGVCbG9jayA9IGNvZGVC
bG9jazsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVC
bG9jaygpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtOTAsOCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1p
dEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgICAgICByZXR1cm47CiAKICAgICBKdW1wTGlz
dCBza2lwT3B0aW1pemU7Ci0gICAgCi0gICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQz
MihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50
Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhl
Y3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIo
U2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZv
ckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNv
dW50ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAg
ICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzEx
NiwyMCBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqCiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6
ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlm
eVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KQogeworICAgIGF1dG8gb2sgPSBi
cmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
OChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIG9rLmxpbmsodGhp
cyk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEds
b2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KQotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJSZWFkT25seVdhdGNocG9pbnQoKS0+YWRkcmVz
c09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykgeworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwor
ICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xv
YmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBv
aW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQpAQCAtMTI5
LDcgKzEzNyw3IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgIGlm
ICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBicmFu
Y2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2lu
dCgpOwogICAgIG9rLmxpbmsodGhpcyk7CkBAIC0xODEsNjEgKzE4OSwzNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
IH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcg
cmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
c3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0
KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1
dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgcmVzdWx0KTsKKyAgICBoYXNFeGVj
dXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRh
YmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBlbHNl
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zm
c2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCByZXN1bHQpOworCisgICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSks
IHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKTsKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogewogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29t
cGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIkNvbXBpbGlu
ZyAiLCAqbV9wcm9maWxlZENvZGVCbG9jaywgIlxuIik7CiAgICAgCiAgICAgaml0QXNzZXJ0VGFn
c0luUGxhY2UoKTsKICAgICBqaXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgpOwogICAgIAotICAg
IGF1dG8mIGluc3RydWN0aW9ucyA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKLSAgICB1
bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNp
emUoKTsKKyAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKTsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogCiAgICAgbV9jYWxsTGlua0luZm9JbmRl
eCA9IDA7CiAKLSAgICBWTSYgdm0gPSBtX2NvZGVCbG9jay0+dm0oKTsKICAgICBCeXRlY29kZUlu
ZGV4IHN0YXJ0Qnl0ZWNvZGVJbmRleCgwKTsKLSAgICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4ICYmIChtX2NvZGVCbG9jay0+aW5oZXJpdHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8
IG1fY29kZUJsb2NrLT5pbmhlcml0czxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7Ci0g
ICAgICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgb3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgZXhl
Y3V0ZSBQcm9ncmFtQ29kZUJsb2NrJ3MgZXhhY3RseSBvbmNlLgotICAgICAgICAvLyBUaGlzIG9w
dGltaXphdGlvbiB3b3VsZCBiZSBpbnZhbGlkIG90aGVyd2lzZS4gV2hlbiB0aGUgTExJbnQgZGV0
ZXJtaW5lcyBpdCB3YW50cyB0bwotICAgICAgICAvLyBkbyBPU1IgZW50cnkgaW50byB0aGUgYmFz
ZWxpbmUgSklUIGluIGEgbG9vcCwgaXQgd2lsbCBwYXNzIGluIHRoZSBieXRlY29kZSBvZmZzZXQg
aXQKLSAgICAgICAgLy8gd2FzIGV4ZWN1dGluZyBhdCB3aGVuIGl0IGtpY2tlZCBvZmYgb3VyIGNv
bXBpbGF0aW9uLiBXZSBvbmx5IG5lZWQgdG8gY29tcGlsZSBjb2RlIGZvcgotICAgICAgICAvLyBh
bnl0aGluZyByZWFjaGFibGUgZnJvbSB0aGF0IGJ5dGVjb2RlIG9mZnNldC4KLQotICAgICAgICAv
LyBXZSBvbmx5IGJvdGhlciBidWlsZGluZyB0aGUgYnl0ZWNvZGUgZ3JhcGggaWYgaXQgY291bGQg
c2F2ZSB0aW1lIGFuZCBleGVjdXRhYmxlCi0gICAgICAgIC8vIG1lbW9yeS4gV2UgcGljayBhbiBh
cmJpdHJhcnkgb2Zmc2V0IHdoZXJlIHdlIGRlZW0gdGhpcyBpcyBwcm9maXRhYmxlLgotICAgICAg
ICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4Lm9mZnNldCgpID49IDIwMCkgewotICAg
ICAgICAgICAgLy8gQXMgYSBzaW1wbGlmaWNhdGlvbiwgd2UgZG9uJ3QgZmluZCBhbGwgYnl0ZWNv
ZGUgcmFuZ2VzIHRoYXQgYXJlIHVucmVhY2hhYmxlLgotICAgICAgICAgICAgLy8gSW5zdGVhZCwg
d2UganVzdCBmaW5kIHRoZSBtaW5pbXVtIGJ5dGVjb2RlIG9mZnNldCB0aGF0IGlzIHJlYWNoYWJs
ZSwgYW5kCi0gICAgICAgICAgICAvLyBjb21waWxlIGNvZGUgZnJvbSB0aGF0IGJ5dGVjb2RlIG9m
ZnNldCBvbndhcmRzLgotCi0gICAgICAgICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKG1fY29kZUJs
b2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOwotICAgICAgICAgICAgQnl0ZWNvZGVC
YXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQo
bV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGJsb2NrKTsKLQotICAgICAgICAgICAgR3JhcGhOb2RlV29ya2xpc3Q8Qnl0ZWNv
ZGVCYXNpY0Jsb2NrKj4gd29ya2xpc3Q7Ci0gICAgICAgICAgICBzdGFydEJ5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKTsKLQot
ICAgICAgICAgICAgd2hpbGUgKEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5w
b3AoKSkgewotICAgICAgICAgICAgICAgIHN0YXJ0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoc3RkOjptaW4oc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpLCBibG9jay0+bGVhZGVyT2Zm
c2V0KCkpKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4IDog
YmxvY2stPnN1Y2Nlc3NvcnMoKSkKLSAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaCgm
Z3JhcGhbc3VjY2Vzc29ySW5kZXhdKTsKLQotICAgICAgICAgICAgICAgIC8vIEFsc28gYWRkIGNh
dGNoIGJsb2NrcyBmb3IgYnl0ZWNvZGVzIHRoYXQgdGhyb3cuCi0gICAgICAgICAgICAgICAgaWYg
KG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5sZWFkZXJPZmZz
ZXQoKTsgYnl0ZWNvZGVPZmZzZXQgPCBibG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBibG9jay0+dG90
YWxMZW5ndGgoKTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24g
PSBpbnN0cnVjdGlvbnMuYXQoYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5k
ZXgoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdvcmtsaXN0LnB1c2goZ3JhcGguZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0
KGhhbmRsZXItPnRhcmdldCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZU9m
ZnNldCArPSBpbnN0cnVjdGlvbi0+c2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQogCiAgICAgbV9i
eXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwogICAgIGZvciAobV9ieXRlY29kZUluZGV4
ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rp
b25Db3VudDsgKSB7CkBAIC0yNzgsOCArMjYyLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNl
bGluZUpJVEV4ZWN1dGlvbigpKSkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBtX2NvZGVCbG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4
dCYgY3R4KSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8
Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJK
SVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2Zy
ICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9CkBAIC01MjcsNyArNTExLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVj
b2RlSW5kZXg7CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigp
OworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV91bmxp
bmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAg
IGRhdGFMb2dMbigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgIiwgbV9ieXRl
Y29kZUluZGV4LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgpKTsKQEAgLTU0NSw4
ICs1MjksOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7CiAg
ICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAg
ICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAg
ICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNv
ZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9m
ZnNldCwgIl0gU0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50
ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgICAg
ICB9CkBAIC02NzQsNTUgKzY1OCw1NSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMoKQogI2VuZGlmCiB9CiAKK3ZvaWQgSklUOjplbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENv
bnN0YW50UG9vbFJlZ2lzdGVycygpCit7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21ldGFkYXRhR1BSKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdU
MCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNl
dE9mSklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7Cit9CisKK3ZvaWQgSklUOjpl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCkKK3sKKyAgICBCYXNlOjplbWl0UmVzdG9yZUNhbGxlZVNh
dmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdp
c3RlcnMoKSk7Cit9CisKIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5n
KEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBERkc6OkNhcGFiaWxpdHlMZXZl
bCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICBERkc6OkNhcGFi
aWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgp
OwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIERGRzo6Q2Fubm90Q29tcGlsZToKICAg
ICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVk
T3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNl
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZToKICAgICBjYXNlIERG
Rzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IHRydWU7
Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwogICAgICAgICBtX3No
b3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0Ogog
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgCi0gICAgc3dpdGNoIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewotICAgIGNh
c2UgR2xvYmFsQ29kZToKLSAgICBjYXNlIE1vZHVsZUNvZGU6Ci0gICAgY2FzZSBFdmFsQ29kZToK
LSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAgICAgICAvLyBXZSBjb3Vs
ZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5p
bmxpbmVhYmxlIGNhbGwuCi0gICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRp
b24uCi0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5J
bmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbihtX2NvZGVCbG9jayk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KIAotICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxp
bmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0
cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJl
ck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+
ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNp
bXBsZUp1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGVzKCkpOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0
YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1
bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzKCkpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dp
dGNoSnVtcFRhYmxlcygpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
dHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxv
Y2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N3
aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fdW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpOworICAgICAgICBp
ZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVj
dG9yPFN0cmluZ0p1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIg
JiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpKSkKLSAgICAgICAg
bV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9jb2RlQmxvY2sp
OworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQ
cm9maWxlcigpKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IGJ1aWxkIGEgZGlzYXNzZW1ibGVyIG9m
ZiBvZiBVbmxpbmtlZENvZGVCbG9jay4KKyAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5p
cXVlPEpJVERpc2Fzc2VtYmxlcj4obV9wcm9maWxlZENvZGVCbG9jayk7CisgICAgfQogICAgIGlm
IChVTkxJS0VMWShtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBidWlsZCBwcm9maWxlciBkaXNhc3NlbWJsZXIgb2ZmIFVubGlua2VkQ29kZUJsb2NrLgog
ICAgICAgICBtX2NvbXBpbGF0aW9uID0gYWRvcHRSZWYoCiAgICAgICAgICAgICBuZXcgUHJvZmls
ZXI6OkNvbXBpbGF0aW9uKAotICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fY29kZUJsb2NrKSwKKyAgICAgICAgICAgICAgICBt
X3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX3Byb2ZpbGVk
Q29kZUJsb2NrKSwKICAgICAgICAgICAgICAgICBQcm9maWxlcjo6QmFzZWxpbmUpKTsKLSAgICAg
ICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNv
ZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOworICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9m
aWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX3Byb2ZpbGVkQ29k
ZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpKTsKQEAgLTc0Miwx
MSArNzI2LDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAg
ICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsK
KyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSgpOwogCiAgICAgTGFi
ZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAotICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGludCBm
cmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXplID0gLWZyYW1l
VG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVUb3BPZmZzZXQpLCBjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDEpOwogICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CkBAIC03
NTcsMTYgKzc0MiwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemlu
CiAgICAgbW92ZShyZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzKCk7CisgICAgZW1p
dFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0
ZXJzKCk7CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3Rl
cnMoKTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
IHsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUpIHsKICAgICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hv
dWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50
ID0gMDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50
KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX3VubGlua2VkQ29k
ZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpID4gMSkpIHsKKyAgICAgICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDIpOworICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkg
KyBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+OjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlZ1QyKTsK
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV91
bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CiAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdhbnQgdG8gcHV0
IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCiAgICAgICAgICAgICAgICAgLy8ga2VlcCB0
aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gcmVjb3JkIHRo
ZSBkdW1teSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKSAmJiAhYXJndW1lbnQpCisgICAgICAgICAgICAgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxsRnJhbWU6OmFyZ3Vt
ZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC03NzcsMTIgKzc2NiwxMiBAQCB2
b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgICAgICAgICAg
bG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsK
ICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRh
Z0dQUigpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSwgcmVzdWx0UmVn
cyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdzLCBBZGRyZXNzKHJlZ1Qy
LCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRP
ZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICAK
LSAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2RlQmxvY2stPmppdFR5cGUo
KSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXplTWFya2VyKSkKICAgICAg
ICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92ZSgqc2l6ZU1hcmtlciks
ICp0aGlzKTsKQEAgLTc5OSwyNCArNzg4LDI3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dp
dGhvdXRGaW5hbGl6aW4KICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwog
ICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNhbGxPcGVyYXRpb25XaXRoQ2Fs
bEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJv
ciwgbV9jb2RlQmxvY2spOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZy
YW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwg
cmVnVDApOwogCiAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGlzIDEsIHdlIG5l
dmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCi0gICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBt
X2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5j
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKKyAgICBi
b29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSAhPSAxOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1
bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKICAgICAgICAgbV9hcml0eUNoZWNr
ID0gbGFiZWwoKTsKLSAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgJm1fY29kZUJsb2Nr
LT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7CisKICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUlu
UHJvbG9ndWUocmVnVDApOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkpKTsKIAog
ICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QxKTsKLSAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKS5saW5rVG8oYmVn
aW5MYWJlbCwgdGhpcyk7CisgICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKS5saW5rVG8o
YmVnaW5MYWJlbCwgdGhpcyk7CiAKICAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleCgwKTsKIAogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAg
ICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX2NvZGVC
bG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9w
ZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1l
Um9sbGJhY2tPbkV4Y2VwdGlvbihtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkg
PyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ss
IGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJyYW5jaFRlc3QzMiha
ZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwpAQCAtODM5LDcg
KzgzMSw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAg
ICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKICAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVp
bGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKLSAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVu
aXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CisgICAgbV9saW5rQnVm
ZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBt
X3VubGlua2VkQ29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZm
b3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04NTgsOCArODUwLDggQEAgdm9pZCBKSVQ6Omxp
bmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAgICAgIGNhc2UgU3dpdGNo
UmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXI6
IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5z
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAg
ICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRP
ZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB1bmxpbmtlZFRh
YmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzW2pdOwpAQCAtODcxLDgg
Kzg2Myw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU3dp
dGNoUmVjb3JkOjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8gY3Rp
RGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZv
ciAoYXV0byYgbG9jYXRpb24gOiB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUudmFsdWVzKCkp
IHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsb2NhdGlvbi5tX2JyYW5jaE9m
ZnNldDsKQEAgLTkwNiwzMiArODk4LDM1IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIHJlY29yZC5jYWxsZWUpOwogICAgIH0KIAot
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIpOwotICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVz
KG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5C
eVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNl
T2ZzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wcml2YXRlQnJh
bmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOworICAgIGF1dG8gZmluYWxpemVJQ3MgPSBbJl0gKGF1
dG8mIGdlbmVyYXRvcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5lcmF0b3JzKSB7
CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsKKyAgICAgICAg
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1fZG9uZSk7CisgICAgICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zbG93UGF0aEJlZ2luKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX2dldEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkc1dpdGhUaGlz
KTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5
VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9k
ZWxCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeUlkcyk7CisgICAgZmluYWxpemVJQ3Mo
bV9pbkJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9mcyk7CisgICAgZmluYWxp
emVJQ3MobV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7CiAKICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0
aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewotICAgICAgICBDYWxsTGlua0luZm8m
IGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAgICAgICAgaW5mby5zZXRD
b2RlTG9jYXRpb25zKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCi0gICAgICAgICAgICBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5k
b25lTG9jYXRpb24pKTsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIGluZm8gPSAqY29t
cGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBpbmZvLmRvbmVMb2Nh
dGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRp
b25JbmZvLmRvbmVMb2NhdGlvbik7CiAgICAgfQogCi0gICAgewotICAgICAgICBKSVRDb2RlTWFw
QnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2Rl
T2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0
KCkpCi0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+
KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY29kZUJs
b2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCkpOworICAgIEpJ
VENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOworICAgIGZvciAodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRl
Y29kZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0
KCkpCisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChi
eXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9s
YWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDI2ICs5MzUsMzggQEAgdm9pZCBKSVQ6
OmxpbmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShtX2NvbXBpbGF0aW9uKSkgeworICAg
ICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIG1ha2UgdGhlIGJ5dGVjb2RlIHByb2ZpbGVyIGtub3cg
YWJvdXQgVW5saW5rZWRDb2RlQmxvY2s/CiAgICAgICAgIGlmIChPcHRpb25zOjpkaXNhc3NlbWJs
ZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBv
cnRUb1Byb2ZpbGVyKG1fY29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsKLSAgICAgICAg
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2NvZGVCbG9jaywg
Km1fY29tcGlsYXRpb24pOworICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFk
ZENvbXBpbGF0aW9uKG1fcHJvZmlsZWRDb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKICAgICB9
CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkp
CiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2lu
TWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpOwog
ICAgIAorICAgIC8vIEZJWE1FOiBNYWtlIGEgdmVyc2lvbiBvZiBDb2RlQmxvY2tXaXRoSklUVHlw
ZSB0aGF0IGtub3dzIGFib3V0IFVubGlua2VkQ29kZUJsb2NrLgogICAgIENvZGVSZWY8SlNFbnRy
eVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpT
RW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJp
bmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmlu
ZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5
UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGly
ZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkp
OworICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgQmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwg
d2l0aEFyaXR5Q2hlY2spKTsKKworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gV1RG
TW92ZShtX3VubGlua2VkQ2FsbHMpOworICAgIG1faml0Q29kZS0+bV9ldmFsQ2FsbExpbmtJbmZv
cyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3VubGlu
a2VkU3R1YkluZm9zID0gV1RGTW92ZShtX3VubGlua2VkU3R1YkluZm9zKTsKKyAgICBtX2ppdENv
ZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAg
ICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1faml0Q29kZU1hcCA9IGppdENvZGVN
YXBCdWlsZGVyLmZpbmFsaXplKCk7CisgICAgbV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRo
SUNzKTsKKyAgICBtX2ppdENvZGUtPm1fY29uc3RhbnRQb29sID0gV1RGTW92ZShtX2NvbnN0YW50
UG9vbCk7CisgICAgbV9qaXRDb2RlLT5tX2lzU2hhcmVhYmxlID0gbV9pc1NoYXJlYWJsZTsKIAog
ICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5l
cmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4
ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJs
ZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkpJVCBn
ZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2VkQ29kZUJsb2Nr
LCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3Vs
dC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQogCi1Db21waWxh
dGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKCkKK0NvbXBpbGF0aW9uUmVzdWx0
IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTk2OCwyNSArOTc1
LDE0IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1f
bGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0g
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0g
ICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5r
TW9kZTo6TGF0ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAg
SGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsK
LSAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhh
bmRsZXIubmF0aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29k
ZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4o
KTsKLSAgICB9Ci0KICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkKLSAgICAgICAgbV9jb2Rl
QmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkp
OworICAgICAgICBtX2ppdENvZGUtPm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1fcGNU
b0NvZGVPcmlnaW5NYXApOwogCiAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2Rl
V29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9q
aXRDb2RlLT5zaXplKCkpIC8KLSAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CisgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV91
bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CiAKLSAgICBtX2NvZGVCbG9j
ay0+c2V0SklUQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgY29kZUJsb2Nr
LT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwo
KSk7CiAKICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQpAQCAtOTk4LDExICs5
OTQsMTEgQEAgc2l6ZV90IEpJVDo6Y29kZVNpemUoKSBjb25zdAogICAgIHJldHVybiBtX2xpbmtC
dWZmZXItPnNpemUoKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGls
ZShKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OnBy
aXZhdGVDb21waWxlKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBl
ZmZvcnQpCiB7CiAgICAgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAg
ICAgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhlZmZvcnQpOwotICAgIHJldHVybiBm
aW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZChj
b2RlQmxvY2spOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVy
cygpCkBAIC0xMDQyLDE4ICsxMDM4LDI4IEBAIHZvaWQgSklUOjpkb01haW5UaHJlYWRQcmVwYXJh
dGlvbkJlZm9yZUMKICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dF
bnRyaWVzKCptX3ZtLCAiUHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24uIl9zKTsKIH0KIAot
dW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
Cit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayog
Y29kZUJsb2NrKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2Nr
LT5udW1DYWxsZWVMb2NhbHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxp
Z25tZW50UmVnaXN0ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpKSkpOwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdpc3RlckNvdW50Rm9y
RnJhbWVQb2ludGVyT2Zmc2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBtYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAotaW50IEpJVDo6c3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFt
ZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGZy
YW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQor
CitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3Rl
ckNvdW50Rm9yKGNvZGVCbG9jaykgLSAxKS5vZmZzZXQoKTsKIH0KIAoraW50IEpJVDo6c3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKwog
SGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBKSVQ6OmNvbXBpbGVUaW1lU3RhdHMoKQogewogICAg
IEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAKICNkZWZpbmUgQVNTRVJUX0pJ
VF9PRkZTRVQoYWN0dWFsLCBleHBlY3RlZCkgQVNTRVJUX1dJVEhfTUVTU0FHRShhY3R1YWwgPT0g
ZXhwZWN0ZWQsICJKSVQgT2Zmc2V0IFwiJXNcIiBzaG91bGQgYmUgJWQsIG5vdCAlZC5cbiIsICNl
eHBlY3RlZCwgc3RhdGljX2Nhc3Q8aW50PihleHBlY3RlZCksIHN0YXRpY19jYXN0PGludD4oYWN0
dWFsKSk7CiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJKSVREaXNhc3Nl
bWJsZXIuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNs
dWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQu
aCIKKyNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5o
IgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+
CkBAIC0xNDksMTQgKzE1MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgc3Ry
dWN0IENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
c2xvd1BhdGhTdGFydDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVMb2NhdGlv
bjsKLSAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CisgICAgICAgIFVubGlua2Vk
Q2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKICAgICB9OwogCiAgICAgdm9pZCBj
dGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKLSAgICBjbGFzcyBKSVRfQ0xB
U1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgIGNsYXNzIEpJ
VF9DTEFTU19BTElHTk1FTlQgSklUIDogcHVibGljIEpTSW50ZXJmYWNlSklUIHsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0
dWJDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUVGh1bmtzOwpAQCAtMTcxLDYgKzE3Myw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFj
ZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCiAg
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAy
NTY7CiAKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgcHVibGlj
OgogICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBs
b29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+
SklUKCk7CkBAIC0xNzgsMjggKzE4MiwzMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVk0m
IHZtKCkgeyByZXR1cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CiAKICAgICAgICAgdm9pZCBj
b21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKLSAg
ICAgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICAgICAg
Q29tcGlsYXRpb25SZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKik7CiAgICAg
ICAgIHNpemVfdCBjb2RlU2l6ZSgpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgZG9NYWluVGhyZWFk
UHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgQ29t
cGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBC
eXRlY29kZUluZGV4KDApKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUKHZtLCBj
b2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOworICAgICAg
ICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNv
bXBpbGUoY29kZUJsb2NrLCBlZmZvcnQpOwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIHVu
c2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOworICAg
ICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayop
OwogICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsK
IAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSGFzaE1hcDxDU3RyaW5nLCBTZWNv
bmRzPiBjb21waWxlVGltZVN0YXRzKCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBTZWNvbmRzIHRvdGFsQ29tcGlsZVRpbWUoKTsKIAorICAgICAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzX21ldGFkYXRhR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQ
UjsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19jb25zdGFudHNHUFIgPSBMTElu
dDo6UmVnaXN0ZXJzOjpwYkdQUjsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgcHJpdmF0
ZUNvbXBpbGVNYWluUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3Mo
KTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpOwogICAgICAgICB2b2lk
IGxpbmsoKTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29t
cGlsYXRpb25FZmZvcnQpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGls
ZShDb2RlQmxvY2sqLCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAgICAgLy8gQWRkIGEg
Y2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAg
ICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1
bmN0aW9uKQpAQCAtMjIzLDYgKzIzMiwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
I2VuZGlmCiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2
b2lkIGxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBH
UFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBH
UFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQ
UlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUg
Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUsIGNvbnN0
IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZywgY29uc3Qg
Qnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNv
bnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgIHB1YmxpYzoKKyAg
ICAgICAgdm9pZCBsb2FkQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BSUmVnKTsK
KyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKKyAg
ICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcp
OworCisgICAgICAgIHZvaWQgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJl
ZyByZXN1bHQgPSByZWdUMCk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1
bXBUb0hhbmRsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFw
cGVuZChqdW1wVG9IYW5kbGVyKTsKQEAgLTI1OCwxNiArMjkzLDE2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9
IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MK
ICAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBP
cDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwg
dm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAg
ICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29k
ZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3Zh
cmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJn
cyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAg
ICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsK
KyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENh
bGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBj
b21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0
IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yODcsMTQgKzMy
MiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZp
cnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJN
b2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdy
aXRlQmFycmllcihKU0NlbGwqIG93bmVyKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVy
KEdQUlJlZyBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVl
IHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgog
ICAgICAgICAvLyBzY3JhdGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lk
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRh
dGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsK
KyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BS
UmVnKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxl
JiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9p
ZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
TWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBAIC0zMDUsOCArMzQxLDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6
TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPgogICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSk7CiAK
LSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBBcnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwotICAgICAgICB2
b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJl
Z2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBS
ZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5
dGVjb2RlJiwgcHRyZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRj
aEdQUik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2Rl
IGVjbWFNb2RlKE9wKTsKQEAgLTU5Myw3ICs2MzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
ICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02Mjcs
MTQgKzY2NCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlm
dFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZShW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSk7Ci0gICAgICAgIHZvaWQgZW1pdEhhc1ByaXZh
dGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUpOworICAgICAgICB2b2lkIGVt
aXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlKTsKIAogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9p
ZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9p
ZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0g
ICAgICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUpOworICAgICAgICB2
b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBH
UFJSZWcpOworICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBH
UFJSZWcgc2NyYXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwogICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJl
U2xvdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY0Niw3ICs2ODMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICNlbmRpZgogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlX
cml0ZShXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJl
ZyBwb2ludGVyVG9TZXQpOworICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQo
R1BSUmVnIHBvaW50ZXJUb1NldCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxl
KEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCop
OwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBh
ZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7
CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1
aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7
CkBAIC02NTUsNiArNjkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0
UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIp
OwogCisgICAgICAgIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAg
SlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9v
bCBpc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlz
T3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjk2LDI2ICs3MzQsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IEds
b2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gTW9kdWxlVmFyKTsKICAgICAgICAgfQogCi0jZGVmaW5lIERFQ0xBUkVfR0VUX0ZST01f
U0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5
cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFS
RV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9HRVRfRlJPTV9TQ09Q
RV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciog
dGh1bmtOYW1lKTsKLQotICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1VzZWRG
b3JPcFJlc29sdmVTY29wZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gTW9kdWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gZW1p
dCBpbmxpbmUgdGhhbiB1c2UgYSB0aHVuay4KLSAgICAgICAgICAgIC8vIFJlc29sdmVkQ2xvc3Vy
ZVZhciBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9wX3Jlc29sdmVfc2Nv
cGUuCi0gICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVW
YXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAgICAgfQotCi0jZGVmaW5lIERF
Q0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmVzb2x2ZV9zY29w
ZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xW
RV9UWVBFKERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9S
RVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlLCBj
b25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mLCBzdGQ6
Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJl
c29sdmVTY29wZVRodW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNo
YXIqIHRodW5rTmFtZSk7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2Vu
ZXJhdG9yKFZNJik7CkBAIC03NjAsMTAgKzc4MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09u
RXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0KTsKICAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdChBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
TWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAg
ICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRo
UHJvZmlsZShNZXRhZGF0YSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJv
ZmlsZShjb25zdCBCeXRlY29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4s
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRl
Y29kZT4KKyAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRp
b25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0
aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxs
PgpAQCAtODIxLDIwICs4NDEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFy
Z2V0Lm9mZnNldCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBl
bmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9w
ZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBl
IG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVy
YXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdz
KQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihh
cmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7
CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAg
ICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUg
TWV0YWRhdGEsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
ZXJhdGlvblR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAg
ICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1
bHQsIHZvaWQ+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0
YWRhdGEsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFy
Z3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFy
Z3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxs
PE9wZXJhdGlvblR5cGU+KHRhcmdldCwgYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRh
ZGF0YSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0
KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOSwyNSAr
OTM5LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAg
IGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAg
ICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1p
emVkT3JJbmxpbmVkOyB9CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0
dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9w
dGltaXplZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRP
cklubGluZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2
YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAg
ICAvLyBpbiB3aGljaCBjYXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wg
c2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAg
ICB2b2lkIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7
CisKKyAgICAgICAgdm9pZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICAgICAgc3Rh
dGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1
dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNo
ZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0g
ICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRo
ZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xv
dyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0
UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJp
dGhQcm9maWxlKEJpbmFyeU9wKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRl
cjsKIApAQCAtOTY0LDkgKzk3OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+
IG1fc3dpdGNoZXM7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29w
aWVkR2V0UHV0SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEJpbmFyeUFyaXRoUHJv
ZmlsZT4gbV9jb3BpZWRBcml0aFByb2ZpbGVzOwotCiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0
aW9uQ2hlY2tzOwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJh
bWVSb2xsYmFjazsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMDAwLDExICsx
MDEyLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0
aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01h
dGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0g
ICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3No
b3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlC
eXRlY29kZUluZGV4OwogCi0gICAgICAgIFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7
CisgICAgICAgIENvZGVCbG9jayogbV9wcm9maWxlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKyAg
ICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fdW5saW5rZWRDb2RlQmxvY2sgeyBudWxscHRyIH07
CisKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRyPEJhc2Vs
aW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0
YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVj
dENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAg
ICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgICAgICBC
YWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgICAgICBCYWc8VW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICAgICAgRml4ZWRW
ZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIEZpeGVk
VmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAg
ICAgIHN0cnVjdCBOb3RBQ29kZUJsb2NrIHsgfSBtX2NvZGVCbG9jazsKKworICAgICAgICBib29s
IG1faXNTaGFyZWFibGUgeyB0cnVlIH07CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3Ax
KSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewogICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVu
dEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIx
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMyMCw3
ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAg
ICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwg
cmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8g
WmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KIApAQCAtNTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dyhjb25zdCAKIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9h
ZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3Ao
Y29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVC
bG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJ
VE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwog
ICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJ
Qyk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJh
dGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBl
bWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAtODk5
LDggKzkwNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAog
dm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRo
UHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxp
bmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BBZGQ+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0aElD
cy5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5h
ZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+
KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9w
ZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjplbWl0
TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUg
PSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwog
ICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNo
R1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOworICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNs
b3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAxNSwx
MCArMTAyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAg
ICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNo
R1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nh
c2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEzICsx
MDYyLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNlbmRp
ZgogCiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQ
cm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJv
ZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRl
cnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24p
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRl
cnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24p
LCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJp
dGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiks
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
c3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3Ms
IHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1B
VEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIwLDEz
ICsxMTI4LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICNl
bmRpZgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFy
aXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0
aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJp
dHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
KSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0
ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nh
c3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdU
NCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVO
QUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAt
MTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9u
KgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwogICAg
IGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJp
bmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1fcHJvZmls
ZUluZGV4KTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3Bl
cmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRl
Y29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29w
X211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BN
dWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElD
KiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJp
bmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1fcHJvZmls
ZUluZGV4KTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRkSklUTXVsSUMoYXJp
dGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVj
dGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7
CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0
IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRK
SVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRTdWJJQyogc3Vi
SUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0
aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1
YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
Miw3ICsyMzIsNyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBzdG9y
ZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJG
cmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgcmVnVDEsIHJlZ1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdU
MCk7CiAgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTMy
NCw3ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0
UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5z
bG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2Fz
ZShjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgog
I2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgi
CiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3Vs
dChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0
aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVh
bFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4IEBAIHN0ZDo6ZW5hYmxl
X2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2Rl
SUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZGUsIENhbGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRl
Y29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBjaGVja3Bv
aW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJbmNsdWRp
bmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9p
bnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0YWNrT2Zm
c2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKKwogICAgIGlm
IChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZz
ZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsK
ICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsK
LSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVja3Bv
aW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9N
ZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExp
bmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFy
cmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBkb25l
LmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8
CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0g
b3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENh
bGxMaW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVj
b2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewog
ICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC05
MSw3ICs5Miw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAg
ICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVu
dHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1l
Rm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3Rl
ciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOworICAg
IGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVlUmVn
aXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RG
cmVlUmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0
dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJVDo6Y29tcGlsZVNldHVw
RnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRp
b25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNldHVwT3Bl
cmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJhdGlvbihz
ZXR1cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVnVDMs
IHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4K
ICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9h
ZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5j
aDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFkZHJl
c3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25zdGFudChj
YWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBD
YWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJl
Z1QzKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1Qy
KTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNl
dE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dlc3QubGlu
ayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywxNiArMTMx
LDE2IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxhdGU8Pgog
Ym9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkKIHsK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAgIHN0
b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxl
ckZyYW1lT2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgYXJndW1lbnRHUFIxKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVz
cyhhcmd1bWVudEdQUjEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVn
VDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
RW1wdHkocmVnVDApKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2Rl
LnZhbHVlKCkpLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KHJldHVyblZhbHVlR1BSKSk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7
CiAKQEAgLTE0OCw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
Y29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGluZm8g
PSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQoQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJ
bmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUu
bV9hcmd2OwpAQCAtMTU2LDQzICsxNjAsNDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBz
aXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXRWaXJ0dWFsQ2Fs
bCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92
aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBpbmZvKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29k
ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQoteworYm9vbCBKSVQ6OmNvbXBp
bGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQsIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQpIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBs
YXRlPD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNv
ZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCitib29s
IEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtl
ZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0gICAgQ2FsbEZyYW1l
U2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9
IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9IG1h
a2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZsZURhdGEtPm51bVBh
c3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhcmFtZXRl
cnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CisgICAgc2h1ZmZsZURh
dGEtPm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAg
c2h1ZmZsZURhdGEtPm51bUxvY2FscyA9CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEu
YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNp
emUoYnl0ZWNvZGUubV9hcmdjKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNv
ZGUubV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAg
IHNodWZmbGVEYXRhLT5hcmdzW2ldID0KICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3Bs
YWNlZEluSlNTdGFjaygKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAgRGF0
YUZvcm1hdEpTKTsKICAgICB9Ci0gICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAgVmFs
dWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURhdGEu
c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRGcmFt
ZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFs
dWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAgc2h1ZmZsZURhdGEt
PnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0g
aW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRo
aXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3RhbnQo
Y2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBD
YWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVn
VDIsIFsmXSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURhdGEp
LnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRo
cyk7CisKKyAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFtZVNo
dWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2NhdGlv
biA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0yMTgsMTQgKzIyNiwyNSBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2Fs
bGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJl
c3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLwotICAgIENhbGxM
aW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZh
bCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5m
byk7CisKKyAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBpZiAo
b3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKSB7CisgICAgICAgIGluZm8gPSBtX3VubGlua2VkQ2Fs
bHMuYWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNv
ZGVJRCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZvKTsKKworICAgICAgICBBU1NFUlQo
bV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CisgICAg
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsK
KyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS51bmxpbmtl
ZENhbGxMaW5rSW5mbyA9IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3RhbnQ7CisgICAg
fQorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQpOwogCiAgICAg
Ly8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRo
IEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRlY29kZUluZGV4ID0gbV9j
b2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOworICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7
CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVzcyhjYWxsRnJh
bWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxs
ZWUuCkBAIC0yMzQsMTYgKzI1MywxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJ
bnN0cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxM
aW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlw
ZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5k
KENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAgaWYgKGNvbXBpbGVUYWls
Q2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQorICAgIGlmIChjb21waWxl
VGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3RhbnQp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCByZWdU
Mik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAgICBhdXRvIHNsb3dQ
YXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENh
bGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1BhdGhz
ID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAs
IHJlZ1QyLCBbJl0gewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAg
ICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CiAgICAgICAgIH0pOwpAQCAt
MjUzLDEzICsyNjgsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5l
bWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6
Olllcyk7CisgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0
UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyKTsKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVs
KCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91
bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjczLDIwICsyODgsMjAg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMyk7CisgICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlz
KTsKKyAgICBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgqbV92bSwgKnRoaXMsIHJl
Z1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFp
bENhbGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKQEAgLTM5NSwxNyArNDEwLDMwIEBAIHZvaWQgSklU
OjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KIAogICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKICAgICAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgbW92ZShyZWdUMCwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+
aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNz
VHlwZTo6R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CkBA
IC00MTYsMTAgKzQ0NCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNv
bnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9y
Q2hlY2twb2ludChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0g
ICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsK
ICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyYXRvckdQUikpOwogICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0b3JHUFIpKTsKQEAgLTQz
MiwxOSArNDU4LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMK
ICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBH
UFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyYXRvckdQUiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCku
cmF3Qml0cygpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgbW92ZShpdGVyYXRv
ckdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIAogICAgIGF1dG8g
ZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JS
ZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsK
IH0KQEAgLTQ1Miw3ICs0NzYsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
SXRlcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewogICAg
ICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNhc2UgTmFycm93
OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC00NzAsNTAgKzQ5Myw3
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgSnVtcCBm
YXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykp
KTsKIAogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgb3I4KFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIEFic29sdXRlQWRk
cmVzcygmbWV0YWRhdGEubV9pdGVyYXRpb25NZXRhZGF0YS5zZWVuTW9kZXMpKTsKKyAgICBsb2Fk
OEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRP
Zkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9mU2Vl
bk1vZGVzKCksIHJlZ1QwKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50
OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIHJlZ1QwKTsKKyAgICBzdG9yZThUb01ldGFk
YXRhKHJlZ1QwLCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0
ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9mU2Vlbk1v
ZGVzKCkpOwogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAg
ICAgLy8gY2FsbCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkgaW4gcmVnVDAKIAot
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0g
cmVnVDI7Ci0gICAgR1BSUmVnIGRvbmVHUFIgPSByZWdUMTsKLSAgICAvLyBpdGVyUmVzdWx0R1BS
IHdpbGwgZ2V0IHRyYXNoZWQgYnkgdGhlIGZpcnN0IGdldCBieSBpZCBiZWxvdy4KLSAgICBtb3Zl
KHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250
Q2xvYmJlclJlZ2lzdGVyOworICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIGl0ZXJDYWxsUmVzdWx0
R1BSKTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6cmVzdWx0OwogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGl0ZXJSZXN1bHRHUFIpOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHN0YXRpY19hc3NlcnQocmV0
dXJuVmFsdWVHUFIgPT0gYmFzZUdQUik7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZl
ZFJlZ3MuYWRkKHZhbHVlR1BSKTsKKyAgICAgICAgcHJlc2VydmVkUmVncy5hZGQoaXRlckNhbGxS
ZXN1bHRHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSksIHByZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBs
KCkpLCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHJl
Z1QzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1w
bCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzdHViSW5m
b0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAg
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1
ZVJlZ3MgeyBkb25lR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENo
ZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDI7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdpc3Rl
clNldCB1c2VkUmVnaXN0ZXJzKGRvbmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVy
YXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUg
PSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNj
cmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIGdsb2JhbEdQUik7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtb3Zl
KGl0ZXJDYWxsUmVzdWx0R1BSLCBiYXNlR1BSKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQsIEFjY2Vzc1R5
cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5h
bWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlk
OworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRHUFIp
OwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01MjcsNTkg
KzU3Nyw1NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9p
bnQoanVtcCgpKTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgIHsKICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAgICAg
ICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCiAgICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2JqZWN0
LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RPYmpl
Y3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCiAgICAgICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBs
KCk7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRC
eUlkSW5kZXgrK107CiAgICAgICAgIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJS
ZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChp
dGVyQ2FsbFJlc3VsdEdQUikpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7
Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZv
Ojpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCku
cmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsK
LSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLQot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCByZWdUMSk7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOworICAgICAg
ICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5
dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9u
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBkb25lR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAg
IGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9i
amVjdC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRl
cmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVj
dCwgYXJndW1lbnRHUFIwKTsKICAgICB9CiAKICAgICB7ICAgCiAgICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29k
ZS5tX3ZhbHVlOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCiAgICAg
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUu
aW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21f
Z2V0QnlJZEluZGV4KytdOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
dmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgICAgICBtb3ZlKGl0ZXJD
YWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgdmFsdWVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50
KS5yYXdCaXRzKCkpOworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiwx
MSBAQAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lz
dGVyU2V0LmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFw
OworCiBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIENvbW1vbkRhdGE7CiBjbGFzcyBKSVRDb2RlOwpA
QCAtMTU5LDEwICsxNjIsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlD
KEpJVFR5cGUgaml0VHlwZSkKICAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlD
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jh
c2VsaW5lQ29kZShqaXRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICByZXR1cm4gT3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQog
CkBAIC0yMjMsNiArMjI2LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hhcmVBdHRyaWJ1dGUgPT0gU2hhcmVBdHRyaWJ1dGU6OlNoYXJlZDsgfQog
CisgICAgdmlydHVhbCBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSB7IHJl
dHVybiBudWxscHRyOyB9CisKIHByaXZhdGU6CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAgICAg
U2hhcmVBdHRyaWJ1dGUgbV9zaGFyZUF0dHJpYnV0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNh
Y2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiTGlua0J1
ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKQEAgLTQ2LDEwICs0Nyw5
IEBAIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmYKIEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRl
SW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycykKLSAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAs
IG1faml0VHlwZShqaXRUeXBlKQorICAgIDogbV9qaXRUeXBlKGppdFR5cGUpCiB7Ci0gICAgbV9z
dHViSW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5
cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5mbyA9IGNv
ZGVCbG9jayA/IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikg
OiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2Fs
bFNpdGU7CiAKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyczsK
QEAgLTU5LDcgKzU5LDYgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUo
CiAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoLCBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpCiB7CiAgICAgbV9zdHViSW5m
by0+c3RhcnQgPSBzdGFydDsKLQogICAgIG1fc3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IGZhc3RQ
YXRoLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obV9kb25lKTsKIAogICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCkBAIC02Nyw2ICs2NiwxNSBAQCB2b2lkIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBtX3N0dWJJbmZvLT5zbG93UGF0aFN0
YXJ0TG9jYXRpb24gPSBzbG93UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiht
X3Nsb3dQYXRoQmVnaW4pOwogfQogCit2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpnZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBH
UFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworICAgIFJF
TEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKyAgICBqaXQubG9h
ZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2Rl
UHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7
Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZh
bHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0xMTAsNyArMTE4LDcgQEAgSklUR2V0QnlJZEdl
bmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcgogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBK
SVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVl
LCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKICAgICA6IEpJVEJ5
SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgYWNj
ZXNzVHlwZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQotICAgICwg
bV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJsb2NrLT52bSgpLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCisgICAgLCBtX2lzTGVuZ3RoQWNjZXNzKGNvZGVC
bG9jayAmJiBwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aC5pbXBsKCkpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZS5wYXlsb2FkR1BS
KCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQpAQCAtMTIwLDYgKzEyOCwzNSBAQCB2b2lkIEpJVEdl
dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGpp
dCwgbV9pc0xlbmd0aEFjY2VzcyA/IElubGluZUFjY2Vzczo6c2l6ZUZvckxlbmd0aEFjY2Vzcygp
IDogSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKK3N0YXRpYyB2
b2lkIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhKSVQmIGppdCwgR1BSUmVnIHN0dWJJbmZv
R1BSLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyByZXN1bHQpCit7CisgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7
CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7Cisg
ICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQu
bG9hZFByb3BlcnR5KGJhc2UsIHNjcmF0Y2gsIEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOworICAg
IGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5r
KCZqaXQpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJU
YWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0KTsKK30KKwordm9pZCBKSVRHZXRCeUlkR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVk
IHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklU
Q29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgp
OworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGdl
bmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhqaXQsIHN0dWJJbmZvR1BSLCBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaCwgQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgbV9kb25lID0gaml0LmxhYmVs
KCk7Cit9CisKKwogSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpKSVRHZXRCeUlkV2l0aFRo
aXNHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVl
UmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJl
ZyBzdHViSW5mb0dQUikKQEAgLTEzOCw2ICsxNzUsMTggQEAgdm9pZCBKSVRHZXRCeUlkV2l0aFRo
aXNHZW5lcmF0b3I6OmdlbmVyYQogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFj
Y2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCit2b2lkIEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1
bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQu
bGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsK
KyAgICBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3Moaml0LCBzdHViSW5mb0dQUiwgQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlz
UmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVz
dWx0KTsKKworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRQdXRCeUlkR2VuZXJh
dG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRU
eXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIs
CiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5m
b0dQUiwgR1BSUmVnIHNjcmF0Y2gsIApAQCAtMTQ5LDYgKzE5OCwzNCBAQCBKSVRQdXRCeUlkR2Vu
ZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVy
cy5jbGVhcihzY3JhdGNoKTsKIH0KIAordm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJS
ZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlD
KG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0Lmxv
YWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworCisgICAgR1BSUmVnIGJhc2UgPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgR1BSUmVnIHNjcmF0Y2gyID0gQmFz
ZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBHUFJSZWcgdmFsdWUgPSBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5saW5l
QWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkJ5
SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQuc3RvcmVQcm9wZXJ0eShKU1ZhbHVl
UmVncyB7IHZhbHVlIH0sIGJhc2UsIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKKyAgICBhdXRvIGZpbmlz
aGVkID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsKKyAg
ICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAg
IGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIHZv
aWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYg
aml0KQogewogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZv
clByb3BlcnR5UmVwbGFjZSgpKTsKQEAgLTMwMCw2ICszNzcsMzIgQEAgdm9pZCBKSVRJbkJ5SWRH
ZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdAogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElu
bGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCit2b2lkIEpJVEluQnlJ
ZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNp
Z25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFi
ZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKwor
ICAgIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BS
UmVnIHJlc3VsdCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgR1BSUmVn
IHNjcmF0Y2ggPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAg
IGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGpp
dC5ib3hCb29sZWFuKHRydWUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOworICAgIGF1dG8gZmlu
aXNoZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOwor
ICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisg
ICAgZmluaXNoZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwog
SklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6SklUSW5zdGFuY2VPZkdlbmVyYXRvcigKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgcHJvdG90eXBl
LCBHUFJSZWcgc3R1YkluZm9HUFIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAi
Q29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvblZhbGlkYXRpb24uaCIKICNpbmNs
dWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUg
IlB1dEtpbmQuaCIKQEAgLTM4LDExICszOSwxMTggQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBD
YWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVCbG9j
azsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVu
dW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKK3N0cnVjdCBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVn
VDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307
CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpy
ZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Qy
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsK
K307CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICAvLyBXZSByZWx5
IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0
ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgorICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworICAg
IHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZv
OjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86
OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5mbzo6
cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUkluZm86OmFyZ3VtZW50R1BSMzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OmFyZ3VtZW50R1BS
MTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86Om5vbkFy
Z0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpu
b25BcmdHUFIxOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fz
c2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkp
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOwor
fTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGRvbnRDbG9iYmVyUmVnaXN0ZXIgPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHRoaXNW
YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpz
Y3JhdGNoOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBH
UFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUklu
Zm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGUgPSBHUFJJbmZv
OjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86
OnJlZ1Q0OworfTsKKworc3RydWN0IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmQgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNf
YXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3Rh
dGljX2Fzc2VydChicmFuZCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsK
K307CisKIGNsYXNzIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcigpIHsgfQpAQCAtNjIsMTIgKzE3MCwxOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBmaW5hbGl6ZSgKICAgICAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVm
ZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIsCiAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCk7Ci0gICAgCisKKyAgICB2b2lkIGdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0
YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogbV91bmxpbmtlZFN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkgfTsKKwogcHJvdGVjdGVkOgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAg
SklUVHlwZSBtX2ppdFR5cGU7CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIG1fc3R1YkluZm87CiAK
K3B1YmxpYzoKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgbV9kb25lOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Nsb3dQ
YXRoQmVnaW47CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7CkBAIC05
OCw3ICsyMTIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpT
VmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsK
K3B1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAK
QEAgLTExMSw2ICsyMjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpT
VmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUpOwogICAgIAog
ICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3Rh
bnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzTGVuZ3Ro
QWNjZXNzOwpAQCAtMTI0LDYgKzIzOSw3IEBAIHB1YmxpYzoKICAgICAgICAgQ29kZUJsb2NrKiwg
SklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgICAgIEpTVmFsdWVSZWdzIHZh
bHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJ
bmZvR1BSKTsKIAorICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYs
IHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAgICAgdm9p
ZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiB9OwogCkBAIC0xMzIsMTAgKzI0
OCwxMSBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAog
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLAotICAgICAgICBKU1ZhbHVl
UmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUs
IFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxs
U2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRl
bnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQ
UlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKICAg
ICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lk
IGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0Nv
bnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogICAgIAogICAgIFZfSklUT3BlcmF0aW9uX0dT
c2lKSkMgc2xvd1BhdGhGdW5jdGlvbigpOwogCkBAIC0xNjMsMTEgKzI4MCw5IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRl
OgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBh
dGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0xOTEsOCArMzA2LDYgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXBy
aXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yMTYsOCArMzI5
LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVy
Jik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0y
NDEsOCArMzUyLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3Jv
QXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3Rh
cnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9
OwogCkBAIC0yNTUsNiArMzY0LDcgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVlUmVncyBiYXNl
LCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIAogICAgIHZvaWQgZ2Vu
ZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBz
dHViSW5mb0dQUik7CiB9OwogCiBjbGFzcyBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGZpbmFsIDog
cHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTI3Nyw4ICszODcsNiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwg
TGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVt
cCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSArNDEwLDkgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRl
OgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3Jlc3VsdDsKIAot
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQ
YXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzMwLDggKzQzNiw2IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
IAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklU
Ojppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJl
dHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91Ymxl
KCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
bnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAo
IXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAgICAgICAgLy8g
QWxsIGxpbmsgdGltZSBjb25zdGFudHMgYXJlIGNlbGxzLgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzQ2VsbCgpOwogfQog
CiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyIHNyYykKIHsKICAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7Ci0gICAgcmV0dXJu
IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0g
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKKyAgICByZXR1cm4g
bV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAogQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwg
VmlydHVhbFJlZ2lzdGVyIGVudHJ5KQpAQCAtMTU2LDM2ICsxODEsMzYgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeAogI2VuZGlmCiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0
YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitB
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1
YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQ
UjIsIHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGVt
aXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCiAg
ICAgcmV0dXJuIGNhbGw7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgZnVuY3Rpb24sIFZp
cnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBBZGRyZXNzIGZ1bmN0aW9u
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJu
VmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZh
bHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9j
ay0+aXNLbm93bkNlbGwocmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpCiAgICAgICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjA1LDcgKzIzMCw3IEBAIEFMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcygKIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRv
TmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUlu
ZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBw
YXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFT
U0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVj
a3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byByZXN1bHQgPSBtX2NoZWNrcG9pbnRM
YWJlbHMuYWRkKG1fYnl0ZWNvZGVJbmRleCwgbGFiZWwoKSk7CkBAIC0yMTUsNyArMjQwLDcgQEAg
aW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludAogaW5saW5lIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCBqdW1wKQogewogICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRl
Y29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxp
bmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3Bv
aW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAg
YXV0byBpdGVyID0gbV9jaGVja3BvaW50TGFiZWxzLmZpbmQobV9ieXRlY29kZUluZGV4KTsKQEAg
LTI5MywyOSArMzE4LDMzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRDb3VudChBYnN0
cmEKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1
YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1
ZVJlZ3MgdmFsdWUpCi17Ci0gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7Ci0KLSAg
ICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNv
IHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0Ci0gICAgLy8gc3RvcmUuCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSNl
bHNlCi0gICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJpdHdpc2VfY2Fz
dDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0gICAg
c3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7
Ci0gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOwot
I2VuZGlmCi19CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0
YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXND
ZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworfQorCisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MgdmFs
dWUpCisvL3sKKy8vICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOworLy8KKy8vICAg
IC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28g
d2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKKy8vICAgIC8vIHN0b3JlLgorLy8jaWYgVVNFKEpTVkFM
VUU2NCkKKy8vICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMp
OworLy8jZWxzZQorLy8gICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJp
dHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0
cyk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0
cy5wYXlsb2FkKTsKKy8vICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5h
c0JpdHMudGFnKTsKKy8vI2VuZGlmCisvL30KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBpbmxp
bmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjpt
X3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4gSklUOjplbWl0VmFsdWVQcm9m
aWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSkKIHsKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVn
VDApOwogI2Vsc2UKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKQEAgLTMy
Myw0MSArMzUyLDQyIEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWMK
IAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29k
ZSguLi4pIHsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWVSZWdz
IHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVlUmVn
cyB2YWx1ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRh
LCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOworCisgICAgcHRyZGlmZl90
IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0
YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29kZT4obV9ieXRl
Y29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNr
ZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG9m
ZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3Vs
dFJlZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1
ZVJlZ3MocmVzdWx0UmVnKSk7Ci19CisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKKy8v
eworLy8gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdz
KHJlc3VsdFJlZykpOworLy99CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BS
UmVnIHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQg
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgR1BS
UmVnIHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBK
U1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFy
cmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHB0cmRpZmZfdCBvZmZzZXRP
ZkFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIp
CiB7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBsb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgYXJyYXlQcm9maWxl
LT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9NZXRh
ZGF0YShzY3JhdGNoR1BSLCBieXRlY29kZSwgb2Zmc2V0T2ZBcnJheVByb2ZpbGUpOwogICAgIH0K
IH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVn
aXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBz
Y3JhdGNoR1BSKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklU
OjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2Rl
LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAo
c2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRyZXNzKGFycmF5UHJvZmlsZUdQUiwg
QXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSkpOwotICAgIH0KKyAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0
U2VlblN0cnVjdHVyZUlEKCksIGNlbGxHUFIsIHNjcmF0Y2hHUFIpOwogfQogCiBBTFdBWVNfSU5M
SU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNy
YykKQEAgLTM4MCw3ICs0MTAsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJl
Z2lzdGVyCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciBy
ZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewot
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIo
cmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCks
IHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyks
IHZhbHVlKTsKQEAgLTQ5Niw3ICs1MjYsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShW
aXJ0dWFsUmVnaXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93
bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAo
cmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAg
ICAgIGVsc2UKQEAgLTUwNiw3ICs1MzYsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewotICAgIGlmICghbV9j
b2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykp
IHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MTQsMTEgKzU0NCw2IEBAIGlubGluZSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0g
ICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJ
bnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lz
dGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KG9wMSkpIHsKQEAgLTU0NCwxMSArNTY5LDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBt
ZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRp
b24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGlmIChzcmMuaXNDb25z
dGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7Ci0gICAgICAgIGVs
c2UKKyAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5s
aW5rZWRDb2RlQmxvY2soc3JjKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBtb3ZlKEltbTY0
KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTU2NiwxMSArNTkxLDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdl
dFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0Mik7CiB9CiAK
LUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdp
c3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkK
IHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01OTUsNyArNjE1LDcg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogCiBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcs
IFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25D
ZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY1Nyw3IEBAIEFMV0FZ
U19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBpZiAodGFyZ2V0KQog
ICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3V0T2ZMaW5l
SnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgR2V0UHV0SW5mbyBK
SVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQotewotICAgIHVuc2ln
bmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hNYXAgZG9lc24ndCBs
aWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRHZXRQdXRJbmZvcy5m
aW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0SW5mb3MuZW5kKCkp
Ci0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgR2V0UHV0
SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fZ2V0UHV0
SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1dEluZm8ub3BlcmFu
ZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQmlu
YXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6OmNvcGllZEFyaXRo
UHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBrZXkgPSAoc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAzMiB8IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBt
X2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFs
dWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGllZEFyaXRoUHJvZmls
ZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQcm9maWxlOworICAg
IHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0
aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiArNjc4LDYwIEBAIEFM
V0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICByZXR1cm4gRUNNQU1v
ZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJl
c3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDMyRnJv
bU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVn
IHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBv
ZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDgoQWRkcmVz
cyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldElu
TWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBjb25zdCBCeXRlY29k
ZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZhbHVlLCBBZGRyZXNz
KHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5N
ZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMyVG9NZXRhZGF0YShH
UFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sK
KyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2Rl
QmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNl
dCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5
dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRh
VGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgc19tZXRhZGF0YUdQUiwgcmVzdWx0KTsKK30KKwor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvbnN0YW50KEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgY29uc3RhbnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJl
c3Moc19jb25zdGFudHNHUFIsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oY29uc3RhbnRJbmRleCkg
KiA4KSwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZEdsb2JhbE9i
amVjdChHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRDb25zdGFudChtX2dsb2JhbE9iamVjdENv
bnN0YW50LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29kZUJs
b2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBHUFJSZWcgcmVzdWx0KQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CisgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlc3VsdCk7CisgICAgbG9hZFB0
cihBZGRyZXNzKHJlc3VsdCwgQ29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZl
cigpKSwgcmVzdWx0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29u
c3RhbnRJbmRleCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5z
dHJ1Y3RpbwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hP
ZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkp
OwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJs
b2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwg
JnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZv
ciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAg
Y29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJ
bmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVk
aWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwog
CkBAIC0xMDI0LDcgKzEwMjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25z
dCBJbnN0CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxl
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAg
bV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRl
eCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRU
YWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3ICsxMDQyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8gY3Jl
YXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNo
IHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0
cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1f
c3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgs
IGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUu
ZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMs
OCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdp
c3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFj
ZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTU0LDExICs1NiwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAg
ICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKLSAgICAgICAgZWxz
ZQorICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxp
bmtlZENvZGVCbG9jayhzcmMpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxp
bmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIHN0b3JlNjQoSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7Cisg
ICAgICAgICAgICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICB9CisK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODcsMzcgKzkyLDM1IEBAIHZvaWQgSklUOjpl
bWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0
dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2Nh
dGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxs
b2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0
PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhp
c3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJ
RCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdU
MjsKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFhbGxv
Y2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1t
UHRyKG51bGxwdHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJ
VEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1t
UHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAg
ICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
TmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJl
Zyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFk
YXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBM
aXN0IHNsb3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0
cik7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZh
cmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hS
ZWcsIHNsb3dDYXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVy
ZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFs
aXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5j
ZSgqbV92bSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisK
KyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgp
LCBzdHJ1Y3R1cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3Qs
IHJldHVyblZhbHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzEzNCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhh
c0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25v
dyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0lu
c3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9s
RnVuY3Rpb24oKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3Vz
dG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFz
SW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y29uc3RydWN0b3IsIHJlZ1QwKTsKIApAQCAtMTU0LDMwICsxNTgsMzggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUu
bV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8s
IGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSBy
ZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBh
bmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Rv
LCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm90b0dQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHRHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBwcm90b0dQUik7CiAgICAgCiAgICAg
Ly8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0
aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOwogCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0
Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAg
ICAgcmVnVDUsCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgcmVzdWx0R1BSLAor
ICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgcHJvdG9HUFIsCisgICAgICAgIHN0dWJJbmZvR1BS
LAorICAgICAgICBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxLCBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gyKTsKKworICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7CisgICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKKwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMTkyLDE0ICsyMDQsMTMgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0gICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjAp
OwotICAgICAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRp
bWl6ZSk+KEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCByZWdUMiwgcmVnVDEp
OwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0
YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm8gPT0gYXJndW1lbnRHUFIxKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWUgPT0g
YXJndW1lbnRHUFIyKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6cHJvdG8gPT0gYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0
aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0yNDAsNyAr
MjUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogCiAgICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1Qx
LCByZWdUMCk7CiAKQEAgLTM3NCw3ICszODUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29u
c3QgSW5zdHJ1Y3Rpb24qCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CisgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7CiAgICAgcmV0KCk7CiAjZWxzZQpAQCAtMzgzLDkgKzM5NCw5IEBAIHZvaWQgSklUOjplbWl0
X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9o
YW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7Ci0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0
T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC00MTEs
NyArNDIyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogCiAg
ICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
LQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NDQsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0
aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1Qw
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQUjIpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ3NiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RH
UFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAg
YWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdU
MCksIHRhcmdldCk7CkBAIC00ODAsNyArNDkzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1MzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2Fz
ZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgog
ICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7
CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVy
YWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU1Niw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAgICAvLyBGaXJzdCwg
aGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9u
IHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsK
ICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05v
dEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs1OTUsMTMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9
IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NF
UlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVy
czo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3Bl
Y2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0
YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5t
X3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1
c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNK
dW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0
aGlzKTsKIH0KQEAgLTYyNSw4ICs2MzYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29u
c3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7
CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
dHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVl
KSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJh
bmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xv
YmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0o
KS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQp
OwpAQCAtNjQwLDcgKzY1Myw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gx
ID0gcmVnVDE7CkBAIC02OTUsNyArNzA4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29u
c3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZt
KCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJn
dW1lbnRHUFIyOwpAQCAtNzExLDcgKzcyNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNv
bnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9y
KFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtNzIw
LDcgKzczNCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIAog
I2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIGppdC5sb2FkUHRy
KCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2
ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRHUFIwKTsKKyAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYXJndW1lbnRH
UFIwKTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBh
cmd1bWVudEdQUjA7CkBAIC05MDgsNyArOTIyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pz
dHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1Qy
LCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25a
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5MzMsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAK
QEAgLTkzMSw3ICs5NDcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5z
dHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwog
ICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTY3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
bnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJl
Z1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRz
dFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05
NzgsNyArOTk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydQog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVn
KQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTkzLDcg
KzEwMDksMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAg
IGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNh
bGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBB
ZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIE9PUFM6IFRoaXMgaXNuJ3QgZWxlZ2FudC4gV2h5
IGFyZW4ndCB0aGV5IGluIHRoZSBjYWxsZWUgc2F2ZSBidWZmZXIuIEkgZ3Vlc3MgYmVjYXVzZSB3
ZSBjYW4gT1NSIGV4aXQgaGVyZT8KKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0
YW50UG9vbFJlZ2lzdGVycygpOwogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAg
ICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUik7CkBAIC0xMDExLDIzICsxMDMwLDExIEBAIHZvaWQgSklUOjplbWl0X29wX2Nh
dGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3Rvcmlu
ZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKLSAgICBpZiAoYnVmZmVyIHx8
ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRl
eC5hc0JpdHMoKSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBt
X2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1f
Ynl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBza2lwT1NSRW50cnkgPSBicmFuY2hU
ZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7
CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRF
bWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVn
cyByZWdzKHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmls
ZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShz
dGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSwgcmVncyk7Ci0gICAgICAgIH0pOwot
ICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIApAQCAtMTA1Myw4ICsxMDYwLDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIFZpcnR1YWxS
ZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0
ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBz
dGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0g
ICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJl
Y29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJl
Y29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5r
ZWRUYWJsZSk7CiAKQEAgLTEwODEsMTMgKzEwODgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2NoYXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRl
Y29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2gg
ZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
Y29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1w
bGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVj
b2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAg
bGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5t
X21pbik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BS
MSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOwogICAgIGZhckp1
bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIApAQCAtMTA5OSwyMCArMTEw
NywyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8g
Y3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dp
dGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2st
PnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAg
ICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJ
bmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRU
YWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
d2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dp
dGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgp
OwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVn
PigpOwotICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwg
cmVnVDApOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZE
ZWJ1Z2dlclJlcXVlc3RzKCkpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMg
PSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkp
OwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwpAQCAtMTEzMyw3ICsxMTQzLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qw
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdU
MCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTQ4LDcgKzExNTgs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE2Niw3ICsxMTc1LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVn
VDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7
CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTg4LDEyICsxMTk3LDE0
IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBFdmVu
IHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQK
ICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vz
c2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcg
R0MgcHJlc3N1cmUuCi0gICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsK
KyAgICBzaXplX3QgY291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1WYXJzKCk7CiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNv
dW50OyArK2opCiAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoaikpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CisgICAgCisgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAg
ICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwKTsKIAogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNo
ZWNrKCk7CiAjZWxzZQpAQCAtMTIxMiw3ICsxMjIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50
ZXIoY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5l
cmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAg
LTEzMTAsMjMgKzEzMjEsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IElu
c3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRh
ZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMSk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFs
T2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAg
IGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9
IGJ5dGVjb2RlLm1fY2FsbGVlOwotICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVk
RnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxs
ZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAgICAg
UmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKQEAgLTEzNDIsNyArMTM0OSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZB
bGxvY2F0b3IoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgYWxsb2NhdG9yUmVnKTsKICAg
ICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9m
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFBy
b3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwg
c3RydWN0dXJlUmVnKTsKIAotICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0
aW9uUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcENyZWF0ZVRoaXM6
Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZENhbGxlZSgpLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAg
ICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRG
dW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVj
dHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBj
YWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMubGluayh0aGlz
KTsKQEAgLTEzNzIsNyArMTM3OSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJ
bnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BS
IH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KQEAgLTEzODIsNyArMTM5MCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9u
ZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qy
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCBy
ZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29s
ZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsK
QEAgLTEzOTQsNyArMTQwMyw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5z
dHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVx
PigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogfQogCkBAIC0xNDA0LDcgKzE0MTQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShj
b25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0MjksMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5
dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFs
dWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1
Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1
ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEs
IHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5j
ZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNl
T2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBH
UFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAgICAgYm94Qm9v
bGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTQz
MCw3ICsxNDQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQogewotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0
ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZv
ckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1
cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fdW5saW5rZWRDb2RlQmxv
Y2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAg
ICAgIHVpbnRwdHJfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5z
dHJ1Y3Rpb24pOwogICAgICAgICBsb2FkUHRyKHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNr
aXBFYXJseVJldHVybiA9IGJyYW5jaFB0cihCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW1QdHIoT3B0
aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTE0NDAsNyAr
MTQ1Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICNlbHNl
CiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIy
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKLSAgICAgICAgbW92ZVZhbHVlKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3QocmVzdWx0UmVncy5ncHIoKSk7CiAgICAgICAgIGNoZWNrU3RhY2tQb2ludGVyQWxp
Z25tZW50KCk7CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTE0NTMsOCArMTQ2NSw5IEBAIHZvaWQgSklUOjplbWl0
X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKIAogICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6
YXRpb24gY2hlY2s6IAogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7CisgICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CiAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZlT3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0
aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCi0gICAgICAgICAgICBB
YnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkp
KSk7CisgICAgICAgICAgICBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhl
Y3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9CiB9CiAKQEAgLTE1MDksNyArMTUyMiw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFyZ3VtZW50R1BSMCk7CiAjZWxzZQog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjM7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xNTIyLDcgKzE1MzYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29u
c3QgCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYg
dm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQ
VShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMTU2NCwzNCAr
MTU3OCwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAg
ICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRHUFIwOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
Z2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFs
R1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVn
ZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSnVtcCBsYXp5SnVtcDsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsK
ICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAg
ICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRp
ZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rp
b25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3
aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlv
bkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwogCiAg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09
IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
Mik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2
bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
Mik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVn
VDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxz
ZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1
bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTYyMSwyMyArMTYzNywyNCBA
QCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBl
bWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5
bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCiAKLSAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRl
Y29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwciwgYml0d2lzZV9jYXN0PHZv
aWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOwor
ICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKICAgICBPcGNvZGVJRCBv
cGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwg
JnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAg
ICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgp
LCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dl
bmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7
CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVs
c2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9m
dW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjY0LDI5ICsxNjgx
LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19nZW5lcmF0b3JfZnUKIHZvaWQgSklU
OjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJy
YXk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9
IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRh
Lm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9j
YXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmls
ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBzaXplKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5
dGVjb2RlLm1fbGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSwgcmVnVDApOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29k
ZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Q
cm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXpl
SW5kZXgsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUs
IGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAjZWxzZQor
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdp
dGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIHJlZ1Qy
KTsKICAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApKTsKICNlbmRpZgogfQogCkBAIC0xNjk0LDggKzE3MTIsMTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9m
aWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBt
X2lzU2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRU
eXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApA
QCAtMTc3NywyMCArMTc5NywyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQ
UjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hp
Y2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwotICAgIEdQ
UlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1
bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1
cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcs
IHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFy
Z0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5Q
YWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwor
ICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBy
ZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdU
Myk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1Zh
bHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tl
dFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIG1faXNTaGFyZWFibGUgPSBmYWxzZTsKKwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZUNvbnRyb2xGbG93Pigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0
YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGJhc2ljQmxv
Y2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsKQEAgLTE4NjAsNyArMTg4NSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBtb3ZlVmFsdWUo
anNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJl
Z3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIApA
QCAtMTg4Niw3ICsxOTExLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihj
b25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCks
IHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xv
d0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMu
aCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgpAQCAt
Mjg1NSw3ICsyODU2LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRj
aAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0
IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
Y29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NF
UlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9
PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdC5leGVj
dXRhYmxlQWRkcmVzcygpOwogCkBAIC0yODgwLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlm
IChrZXkuaXNJbnQzMigpKQpAQCAtMjkwMyw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZ0p1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJs
b2NrLT5iYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAogICAgIGlm
IChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5n
KGtleSktPnZhbHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFBy
aXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiks
IEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcp
OwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDkyICs0OSwxMDIgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3Nl
ZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRl
bnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2Zp
bGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1i
ZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0
ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsK
IAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKKyAg
ICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJl
c3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQz
MiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4p
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKICAgICB9Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQgSklU
OjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgaWYgKGhhc0FueVNs
b3dDYXNlcyhpdGVyKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CisgICAgaWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRlcikpCisgICAgICAgIHJldHVy
bjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOworICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAg
SklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsr
XTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmls
ZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJh
c2UsIGFyZ3VtZW50R1BSMyk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRl
Y29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3Vt
ZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVu
dEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQotICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwotICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKLSAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1f
Ynl0ZWNvZGVJbmRleCk7CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0
ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKIAotICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OwotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0
OworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdU
MTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQ
UjEpOwotCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BS
KTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKTsKLSAgICAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgorICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gcmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAh
aXNBUk02NCgpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BS
MSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlID09
IHJlZ1QwKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5ID09IHJlZ1QxKTsKKworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIHByb2ZpbGVHUFIpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ5LDcgKzE1OSw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE2MCw4ICsxNzAsOCBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgY29uc3RleHBy
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjU7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1
bWVudEdQUjEpOwogCkBAIC0xODcsMzQgKzE5Nyw0MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsK
KwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBy
ZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNs
b3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVn
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2
YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBBU1NFUlQoaGFzQW55U2xvd0Nh
c2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yMjMsOSArMjM5LDExIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0yMzUsMjYgKzI1MywyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIy
OyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yNjQsNyArMjc2LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAw
LDIxICszMTIsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJy
YW5kPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFu
ZCwgYnJhbmRHUFIpOwotCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0
UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1Qy
KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2
YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9H
UFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6U2V0UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJy
YW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1i
YXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVy
cyByZWdpc3RlcnMuCkBAIC0zMjQsMTcgKzM0MywyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRf
cHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0
ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogeworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRv
ciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4
KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBicmFuZEdQUik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbihBZGRyZXNzKGFyZ3VtZW50
R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzY4LDE4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAg
c3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwog
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9w
ZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9u
VHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1l
bnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1p
emUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0zNzAsMTkgKzM4OCwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRl
X2JyYW5kKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnJhbmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5k
R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1
YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJh
bmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCkBAIC0zOTQs
OSArNDIxLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFu
ZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50
R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTQwNiwyNCArNDM1LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9j
aGVja19wcml2YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChw
cm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5
cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFs
dWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJp
dmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNSwzMCArNDU4LDQyIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDMpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHZhbHVlR1BSKTsKKworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUs
IGJhc2VHUFIsIHByb2ZpbGVHUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0
YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxl
R1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJl
Z1Q0KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIsIHN0dWJJbmZvR1BSKTsKKwogICAgIGlm
IChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAg
ICBhZGRTbG93Q2FzZSgpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBzdGQ6Omlz
X3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5k
OjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUp
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAg
ICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlm
IGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MDksMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9k
ZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAg
IGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAg
ICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2Rl
Lm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTMwLDE2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGgg
YW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVj
dCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVj
bWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0
KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAgICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0QnlWYWw+KCksIE9wUHV0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBhcmd1bWVudEdQUjUpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQUjQs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0
LCBhcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNTEy
LDcgKzU1Myw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBDYWxsIGNhbGw7CiAgICAg
YXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRC
eVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7
CkBAIC01MjMsNyArNTY0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNTMzLDE4ICs1NzQs
MjQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0
IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZh
aWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBp
bmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBt
YXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNTsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1Qy
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0g
cmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDU7CisgICAgeworICAgICAgICBSZWdpc3RlclNldCB1c2VkKEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
LCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6cHJvZmlsZSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlucyhyZWdUNCkpOwor
ICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDUpKTsKKyAgICB9CisKIAogICAgIGpp
dC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CkBAIC01NzAsMjAgKzYxNywz
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1
ZUdQUik7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIEludmFsaWRHUFJSZWcs
IHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQ
dXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZv
cy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZh
dGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmllbGRQdXRLaW5kID0gYnl0ZWNvZGUubV9w
dXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4p
OwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJy
aWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTk0LDggKzY1Miw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9w
cml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwotICAgIFByaXZhdGVG
aWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBVTlVTRURfUEFS
QU0oY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKQEAgLTYwMywxMyArNjYwLDE2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlz
RGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDog
b3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBw
YXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3Rl
ZEltbVB0cihudWxscHRyKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtp
bmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7
CisgICAgY2FsbE9wZXJhdGlvbihBZGRyZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRzR1BSMywgYXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRy
KG51bGxwdHIpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCAr
NjgyLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBj
b25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRl
X25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb247Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNjQzLDE0ICs2OTcsMTQgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBy
ZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSByZWdUNDsKIApAQCAtNjgwLDcgKzczNCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02ODksNyArNzQ0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRTZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02OTksNyArNzU1LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9nZXR0ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
c2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0
ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmli
dXRlLCByZWdUMSwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBh
dHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0
ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MDks
NyArNzY2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAg
IGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcxOSw3ICs3NzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlW
YWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCBy
ZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyNywyMyArNzg2
LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdU
MywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUik7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFu
KHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVy
ZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hv
dWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRl
LWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNzU5LDE1ICs4MjgsMTcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVs
QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxl
dGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
LCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbihBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21h
TW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC03ODEs
MjQgKzg1MiwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25z
dGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2Vj
bWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNl
Ci0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVy
blZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKQEAgLTgwOCw3ICs4NzQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0
IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVy
IGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAg
IGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC04NDUsMjIgKzkxMSwzMyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURl
bEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5
KTsKKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEJhc2VsaW5lRGVsQnlWYWxSZWdp
c3RlcnM6OnNjcmF0Y2gpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9k
ZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Yg
c2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8g
SUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFz
ZSBpcyBjZWxsLgpAQCAtODgzLDkgKzk2MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X3ZhbChjb25zdCBJCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEp
OwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRp
bWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52
YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxs
T3BlcmF0aW9uKEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBhcmd1bWVudEdQUjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCArOTc4LDE5
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUu
bV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0
aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2Vy
dChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCkBAIC05MjYsNyArMTAwMCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0
aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcg
dG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
ICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTk2MSwyMiArMTAzNSwzMSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQp
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0K
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEs
IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6VHJ5
R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpUcnlHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMu
YXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CiB9CiAKQEAgLTk4NiwxNCArMTA2OSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlv
bihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwMDMsMjYgKzEwODksMjAgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogICAgIG1vdmUoSklUOjpUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShv
cGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xMDMwLDIyICsxMTEwLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0
QnlJZERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dEJ5SWREaXJlY3Q7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcp
OwogfQogCkBAIC0xMDU0LDE2ICsxMTQzLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfZGlyZWN0KGMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBv
cGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTY0LDYxIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBl
KG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0g
ICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0
YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2Fk
OEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2Rl
TWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihOb3RFcXVh
bCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxl
bmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgp
ICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmso
dGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFs
dWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIHRoaXNWUmVnKTsKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0K
LSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1
bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBA
IC0xMTU4LDE2ICsxMjI3LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29u
c3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3NywyNiArMTI0OCw1NyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQ
UiwgdGhpc1ZSZWcpOworCisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhp
c0dQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
KyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0x
MjA2LDcgKzEzMDgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVj
dCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERG
Ry9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVj
dHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1
cm5BZGRyZXNzKCk7CkBAIC0xMjQxLDE2ICsxMzQzLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJ
VEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0
QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRo
aXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBh
cmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlz
VmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTI2MCwyOCAr
MTM2NSwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcx
IGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0
ZXJzOjp0aGlzVmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3Vt
ZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodGhpc0dQUiA9PSBhcmd1bWVudEdQUjEpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwg
cHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBD
YWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25H
ZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRD
YWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVy
blZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVy
blZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCkBAIC0xMjkxLDcgKzEzOTAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
CiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMzI5LDIzICsxNDI4LDM3IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5t
X2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJv
dGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9p
bnRlciwKICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRl
ZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKICAg
ICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBz
YW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJh
c2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6c2NyYXRjaDsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCBi
YXNlR1BSLCB2YWx1ZVZSZWcsIHZhbHVlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
cmVnVDMsIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc3R1YkluZm9HUFIsIHNj
cmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0ID8gUHV0S2luZDo6
RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQo
KTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5SWQ7CisgICAg
c3R1YkluZm8tPnB1dEtpbmQgPSBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpO
b3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOwor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCiAg
ICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlm
IGEgYmFzZSBpcyBjZWxsLgpAQCAtMTM1OSwxNCArMTQ3MiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAgICAgCiAgICAgSklUUHV0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93
UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGFyZ3VtZW50
R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3Vt
ZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMTM3NiwyNSArMTQ5MywxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNv
bnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVH
UFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BS
NDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0
KCkpOwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3Bl
cnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwot
ICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24o
KSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xNDA0LDcgKzE1MTUs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQg
bWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFp
bGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlu
bGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1h
eSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7
CkBAIC0xNDQxLDIwICsxNTUyLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0
IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
OjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAg
ICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlk
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0
ICsxNTg1LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJ
bkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7
CisgICAgY2FsbE9wZXJhdGlvbihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0ODAsMjgg
KzE2MDUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwog
CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNv
LCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8g
Z2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1l
PGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
ZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMTUxMCwyNSArMTYyOSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwo
Y29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdU
Mik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnNjcmF0
Y2gpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlW
YWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpA
QCAtMTUzNywxNSArMTY2NCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNv
bnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEpJ
VEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlW
YWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2lu
dGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFy
cmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVu
dEdQUjQpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTU1Niw1OSArMTY4
Niw3MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBh
cmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJv
ZmlsZUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRh
KGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBw
cm9maWxlR1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0
b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBw
b2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZm
ZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVy
YXRpb25JbkJ5VmFsT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXpl
KT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBl
bmRDYWxsKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRIYXNQcml2
YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eU9yQnJhbmQsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvOwogCi0gICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJh
bmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisKKyAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IHR5cGU7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3co
VmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSB0eXBlKQordm9pZCBKSVQ6OmVtaXRIYXNQ
cml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAgQVNTRVJUKHR5
cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlQnJhbmQpOworICAgIFVOVVNFRF9QQVJBTShiYXNlKTsKKyAgICBVTlVTRURfUEFS
QU0ocHJvcGVydHkpOworICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7
CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbElu
ZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24odHlwZSA9
PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0
aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9w
ZXJhdGlvbihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMTYxOCwyNyArMTc1OSwyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1
YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVj
bHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlv
bkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVj
bHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6
IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJh
dGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxNzg3LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1By
aXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29k
ZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2Jy
YW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDE5ICsx
ODAxLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93
KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRI
YXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5t
X2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJ
VDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQ
UlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAg
ICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50
KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKwor
ICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNj
cmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25X
YXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWws
IEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1
c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNs
b3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZz
ZXRPZk5leHQoKSksIHJlZ1QwKTsKQEAgLTE2ODgsNiArMTgyNiw3IEBAIHZvaWQgSklUOjplbWl0
UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTE3MDEsNyArMTg0MCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDEpOwogICAgICAgICAgICAgbG9hZDMy
KCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2No
KCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2Nv
cGUpLCByZWdUMCk7CkBAIC0xNzE1LDcgKzE4NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBK
U1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9j
ayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3OTQsODcgKzE5MzMsMTA1
IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KIHZvaWQgSklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29s
dmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFk
YXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VS
VChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAg
IEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3Ry
dWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAg
Y29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMs
IHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAg
IC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5n
ZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIp
IAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNl
IHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNl
dEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFP
ZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFU
YWJsZShieXRlY29kZSk7CisKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10g
KFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29w
ZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3Vy
ZVZhciIpOworICAgICAgICB9OwogCi0jZGVmaW5lIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJl
c29sdmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAg
ICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAg
ICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyAg
ICAgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtd
IChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2Nv
cGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTog
b3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyIpOwogICAg
ICAgICB9OwotI3VuZGVmIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SCisKKyAgICAgICAgYXV0byBn
ZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAg
cmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQs
ICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7CisgICAgICAgIH07CisKKyAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OworICAgICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0
YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBjb2RlOworICAgICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQor
ICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7Cisg
ICAgICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3Ip
OworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAgICAgfQogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVT
Y29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUp
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJl
c29sdmVTY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2
ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJh
dGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2Vs
aW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFk
YXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0
YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3Bl
R1BSID0gcmVnVDY7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCiAg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURf
UEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2Vk
Rm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3Mo
KTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAg
YWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAg
ICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykg
eworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKICAg
ICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAg
ICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGds
b2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9i
amVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVj
dEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNo
cG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwg
QWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFs
T2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9u
V2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNo
OChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwg
VHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJl
c29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAg
ICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVn
VDEpOworICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgaml0Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxT
Y29wZURlcHRoKSksIHJlZ1QxKTsKIAotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAg
ICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgTGFi
ZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVz
dDMyKFplcm8sIHJlZ1QxKTsKICAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhs
b29wLCB0aGlzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LnN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwg
JmppdCk7CiAgICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb25l
LmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEyICsyMDM5LDEyIEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAg
ICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFs
T2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNH
bG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEp
KTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBkb1Zh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xv
YmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gp
KSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RF
cXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkds
b2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubW92
ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKQEAgLTE4OTcsMTEgKzIwNTQsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJs
b2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAg
ICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxF
bnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVu
dCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsyMDY2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9k
dWxlVmFyOgpAQCAtMTkxOSw4MyArMjA3Niw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsK
LSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFy
KTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0
Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgaml0
LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlw
ZSgpKSwgcmVnVDApOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOworICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSkgeworICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGpp
dC5qdW1wKCkpOworICAgICAgICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9Owog
Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxW
YXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNl
KEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAK
LSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICByZXQoKTsK
KyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9C
QUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dD
YXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0
b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNs
b3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpU
aHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBK
SVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9T
Q09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRv
cihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRG
b3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07
IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29w
ZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5F
X1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xv
d19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsg
Z2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAv
IEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRk
cmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAtMjA2NSw2ICsyMTg0LDcgQEAgdm9pZCBKSVQ6OmVt
aXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgLy8gT09QUwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKQEAgLTIxNzgsNyArMjI5OCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKQEAgLTIxODYsOSArMjMwNiw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb24KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1l
bnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiAjZWxzZSAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKQEAgLTIxOTYsNDEgKzIzMTYsNTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9mcm9tX3Njb3BlKGNvbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0g
Ynl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRh
Lm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1
dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNT
RVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0g
Y3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAg
ICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVy
biBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2Vs
aW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKKworICAgIGF1dG8g
Y2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7
CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2Nv
cGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVH
ZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9t
X3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAo
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0gICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNs
b3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwot
ICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3Bl
cmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFk
YXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEp
OworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRf
RlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVz
b2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRf
RlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAgIH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVf
R0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQ
Uik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1ty
ZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1Yihj
bG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0
Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAg
ZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2Vu
ZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3Bl
VGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJv
bVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlw
ZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQg
YnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUg
SklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQg
Z2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CkBAIC0yMjM5LDk5ICsyMzY4LDg4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2Vk
Rm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3Mo
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
IAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRh
dGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAg
IGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRh
ZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIp
OwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1
cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0
YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDAp
OwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Cisg
ICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BS
KSB7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgaml0
Lm1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFu
Y2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdU
MSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwogICAgIH07CiAKLSAgICBhdXRvIGVtaXRW
YXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewor
ICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0
aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4
KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJl
Z1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9G
KEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdh
dGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVk
KSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0g
KGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsK
LSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAo
aW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwot
ICAgIH07Ci0KICAgICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVH
UFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09
IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9w
ZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNl
dE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CisgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1t
MzIoMyksIG9wZXJhbmRHUFIpOworICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5k
R1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxF
bnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKICAgICB9OwogCi0gICAg
YXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJl
Y3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0
cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBz
dHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5
LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgor
ICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIpOyAvLyBTdHJ1
Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3Ry
dWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwg
cmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KIAog
ICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7CiAgICAgICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBvZmZzZXQgPSByZWdUMTsKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aCA9IHJlZ1QyOwogCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9p
ZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVn
VDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1Qz
KTsKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsm
XSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIGJhc2Us
IHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZz
ZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRh
dGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgb2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChBU1NFUlRf
RU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihH
cmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0
T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAg
ICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAg
ICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwor
ICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAg
c2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJh
c2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNl
dCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2gpOworICAgICAgICAgICAgaml0Lm5lZzMyKG9mZnNldCk7CisgICAgICAgICAgICBqaXQu
c2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWQ2
NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNh
c2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZP
cGVyYW5kKCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDAp
OwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFRE
WiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShy
ZWdUMCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0
eShyZWdUMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoK
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCByZWdUMyk7CisgICAgICAgICAgICBkb1Zh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9m
ZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwogICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIo
c2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFt
aWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQx
LDg2ICsyNDU5LDYzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5m
bykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVt
cCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNl
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xv
YmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
eworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0g
ZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSks
IHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlz
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7Cisg
ICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4
aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgp
KTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQu
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5s
aW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7Cisg
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwog
Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Cisg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVl
UHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOwor
ICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zm
c2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwog
Ci0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0g
ICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJv
bV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxv
Y2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2Rl
TG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBE
RUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNv
bHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4
cHIgKCF0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAg
ICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1
cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5l
OiBvcF9nZXRfZnJvbV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9S
RVNPTFZFX1RZUEUoREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJ
TkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkK
IHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkg
d29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNo
KFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTI0NDksNyArMjU0NCw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxs
KE9wZXJhdGlvblB0clRhZyk7CiAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGppdC5lbWl0Tm9u
UGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0pOwogCi0gICAgaml0LnN0b3JlNjQocmVnVDAsIEFk
ZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0
YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86
Om51bWJlclRhZ1JlZ2lzdGVyLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVBy
b2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7CiAKICNp
ZiBDUFUoWDg2XzY0KQpAQCAtMjQ3MSw4NiArMjU2Niw3NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQp
OwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xv
YmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGlu
ZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7
Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVn
VDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0
Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1p
dE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpT
TGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVv
ZihSZWdpc3RlcikpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQ
dXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dElu
Zm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRh
dGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0
byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBz
dHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNp
bmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFs
T2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3Ig
dGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJz
IHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhp
bmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJl
c29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAg
ICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExh
bWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAg
ICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9w
ZXJhbmRTbG90LCByZWdUMSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3Bl
cmFuZCgpLCByZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAg
c3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAg
ICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUlu
ZGV4KHJlZ1QzLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgog
ICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29w
ZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAg
IGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgIGlmICghaXNJ
bml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2
ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7CisKKyAg
ICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0
YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJ
bml0aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkp
ICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5
cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAg
ICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVy
YW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5k
U2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5
KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEp
OworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAg
ICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJs
ZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5t
X3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNj
b3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNo
cG9pbnRTZXQoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2lu
dChyZWdUMSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QxKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRD
bG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAg
IGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5t
X3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworCisgICAgICAgICAgICBs
b2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCks
IHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOwor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAg
c3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKwogICAgICAgICAgICAgZW1p
dFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTI1NjQsNTggKzI2NDksNTIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAg
ICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDog
R2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5h
bWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFk
eS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNhbFZh
ci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEds
b2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29k
ZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIC8vIElm
IGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUgdGhpbmdzCisgICAgLy8gdGhhdCB3
YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBpcyB0aGUgdHlw
ZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIsCisgICAgLy8gYWxsIENvZGVCbG9j
a3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIKKyAgICAvLyBpZiB0aGUgdmFyIGluamVj
dGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhlbiB3ZSB0YWtl
IHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hhdCB0eXBlIHdl
IGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJl
VmFyKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxl
ZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoUmVz
b2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1Qw
KTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5
cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5
KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxW
YXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsKKworICAgICAg
ICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsK
IAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBl
bWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKICAgICB9CiB9CiAK
QEAgLTI2MjQsMTggKzI3MDMsMjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29w
ZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgp
OwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNvbHZlVHlwZSBw
cm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5
cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNh
dyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENvZGVCbG9ja3MgYXJlIGd1YXJhbnRlZWQK
KyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFyLgogICAgICAgICBKSVRTbG93UGF0aENh
bGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93
X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2UgewogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7
CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVj
dGlvbik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAg
QVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7
Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIEFTU0VSVChtX3VubGlua2VkQ29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0
aW9uKTsKIAogICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJn
dW1lbnRHUFIyOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKQEAgLTI2NTIsNyArMjczNCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91
dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdp
bmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnAp
OwpAQCAtMjcwMSw3ICsyNzgzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1l
bnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdU
MCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9m
ZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3NTksNyArMjg0MSw2
IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5z
aWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpAQCAtMjc2Nyw3ICsyODQ4LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRl
cm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVn
VDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI4MjMsNyArMjkwNCw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG8KIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0
b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAgLTI4MzksMTEgKzI5MTksMTcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3
ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBjYXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhl
IExMSW50LgotICAgIGlmIChtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJl
ZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDQ7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRv
ckdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVy
bywgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0
cnVjdHVyZU1vZGUpICYgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlvbk1vZGVN
YXNrKSkpOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwor
CisgICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JOZXh0OjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgIG9yMzIoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0
dXJlTW9kZSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0Y2hH
UFIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJh
dG9yTWV0YWRhdGEoKSk7CisKICAgICAgICAgbG9hZDMyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSwgaW5k
ZXhHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWws
IGluZGV4R1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkp
KTsKIApAQCAtMjg4MSw3OCArMjk2Nyw4NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1v
ZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5h
bWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0
b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIgPSByZWdU
MDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdl
dEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVF
bnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRj
aDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRvckdl
dEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gz
ID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihtb2RlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eU5hbWUsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7CiAKLSAgICBvcjgo
cmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsK
KyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1l
dGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoMik7CisgICAgb3Iz
MihzY3JhdGNoMywgc2NyYXRjaDIpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaDIsIGJ5
dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRv
ck1ldGFkYXRhKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKICAgICAvLyBUaGlz
IGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgotICAgIEp1bXAgaXNOb3RPd25TdHJ1
Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJy
YW5jaFRlc3QzMihOb25aZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVy
aWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIHN0cnVjdHVy
ZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsKKyAgICBsb2FkMzIo
QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMik7
CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNo
MiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1
Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQuCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW5kZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhl
IGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUg
YWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0
cihyZWdUMywgcmVnVDMpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1l
c0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQorICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNo
MzIoQWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgc2lnbkV4
dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJh
c2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9y
YWdlKCkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAg
IC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmso
dGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDMpOwotICAgIG5l
ZzMyKHJlZ1QzKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNl
R1BSKTsKKyAgICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgbmVnMzIo
c2NyYXRjaDIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CiAg
ICAgY29uc3RleHByIGludHB0cl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IG9mZnNldEluQnV0
dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludHB0cl90PihzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywg
VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICBsb2Fk
NjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0
UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAog
ICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0z
MihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0
dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgIHN0b3Jl
OFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vl
bk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2RlLCBPcEVudW1lcmF0
b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAg
ICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc05vdEluZGV4
ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFu
Y2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdpdGggdGhl
IGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAgICBpc05vdElu
ZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVn
VDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
Ynl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAg
IGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTYxLDEwICszMDU2LDkgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVyKTsKIH0K
IAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rp
b25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVj
b2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1p
dF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlw
ZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0yOTczLDcg
KzMwNjcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltCiAgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCBy
ZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVy
YXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVjb2Rl
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgcmVnVDEpOworICAgIG9y
MzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1QxLCBieXRlY29kZSwg
Qnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwogCkBAIC0zMDYy
LDYgKzMxNTgsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgog
ICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQoreworICAgIEp1bXAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNlbGVjdFNjcmF0Y2hH
UFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25X
cml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDkgKzIzNiw5IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZUNlbGwp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlw
ZTo6VW5zZXQKICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VD
ZWxsCi0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJh
eUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7CisgICAgICAg
ICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKIAotICAgICAg
ICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKTsK
KyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0Fy
cmF5Kj4oYmFzZUNlbGwpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJ
bmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5k
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0QXJyYXlMZW5ndGgobG9j
a2VyKTsKQEAgLTI0OSw4ICsyNDksOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVHZXRCeShKCiAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2
bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCwgcHJvcGVydHlOYW1lKTsKICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlQ2VsbCkpIHsKICAgICAgICAgICAg
ICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAg
ICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKHN0
dWJJbmZvKSkgewotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUg
PSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKTsKKyAgICAgICAg
ICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2Rl
QmxvY2ssIHN0dWJJbmZvKSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENv
ZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywg
c3R1YkluZm8pOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRTdHJpbmdMZW5ndGgobG9ja2VyKTsK
QEAgLTMwNCw3ICszMDQsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRC
eShKCiAgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCiAgICAgICAgICAg
ICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAgICAg
ICAgICAgICAgICAgJiYgIWxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAgICAgICAgICAgICBi
b29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3Bl
cnR5QWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAg
ICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBz
bG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlu
bGluZSkgewogICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5U2VsZlBh
dGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9w
ZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1l
bnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTczMSwxMSArNzMxLDExIEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5KEoKICAgICAgICAgICAgICAgICBvbGRT
dHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVU
eXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVB
Y2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgc2xvdC5jYWNo
ZWRPZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5HZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgc2xvdC5jYWNoZWRP
ZmZzZXQoKSkKICAgICAgICAgICAgICAgICAgICAgJiYgIW9sZFN0cnVjdHVyZS0+bmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAgICAgICAgICAgICAgICAgICAgICYmICFpc1Byb3h5KSB7
CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRl
ZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShz
dHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2xkU3RydWN0dXJlLCBz
bG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENv
ZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0
QnlTZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2Uo
KSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5j
dGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKQEAgLTExMzIsNyArMTEzMiw3IEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnkoCiAgICAgICAgICAgICAgICAgJiYg
c2xvdC5zbG90QmFzZSgpID09IGJhc2UKICAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBv
aW50U2V0KCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxp
bmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1
cmUpOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJl
KTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAg
ICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwogICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2
bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBAIC0xNTUyLDcgKzE1NTIsNyBAQCBzdGF0aWMgdm9p
ZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAKIHZvaWQgdW5saW5rQ2FsbChWTSYgdm0s
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmZh
c3RQYXRoU3RhcnQoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5
KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlua0luZm8p
KTsKICAgICAKICAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSAiQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaCIKICNpbmNsdWRlICJDYWxsRnJh
bWUuaCIKICNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgorI2luY2x1ZGUg
IkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKQEAg
LTM3MCw2ICszNzEsMTQgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3Mo
VgogICAgIAogICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMo
KTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCkgeworICAgICAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gYmFzZWxpbmVSZWYgPSBj
b2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUpIHsK
KyAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoYmFz
ZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmppdE5l
eHRJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKwogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7
CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxl
IiwgKCJ0aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50
RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEy
LDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgog
CiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24p
CiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1h
Y3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6
bV9iaXRzW3QxXQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0MSwgdDIpCiAgICAg
ICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4
XSwgSW50MzJUYWcsIC5zbG93CkBAIC0xMDIzLDcgKzEwMTksNyBAQCBtYWNybyBwcmVPcChvcGNv
ZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgICMgTWV0YWRhdGEgaW4gdDEsIHNyY0Rz
dCBpbiB0MgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQyLCAuc2xvdykKICAgICAgICAgc3Rv
cmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJv
ZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9w
Y29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkK
IAogICAgIC5zbG93OgpAQCAtMTA4OSwyMiArMTA4NSwxOCBAQCBlbmQpCiAKIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCByZXR1cm4pCiAKLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkK
LSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBV
bmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgIGVuZAotCiAgICAgbWV0YWRhdGEodDUs
IHQwKQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5lcSB0MSwgSW50MzJUYWcsIC5vcE5lZ2F0ZVNyY05v
dEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQy
Ci0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFy
eUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0NSwgdDMpCiAgICAgcmV0
dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdhdGVTcmNOb3RJbnQ6CiAgICAgYmlhIHQxLCBMb3dl
c3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JpIDB4ODAwMDAwMDAsIHQxCi0gICAgdXBkYXRl
QXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJv
ZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0NSwgdDMpCiAgICAgcmV0dXJuKHQx
LCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExMTUsMTAgKzExMDcsNiBAQCBlbmQpCiAKIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2Vy
T3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFk
YXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gYXJpdGhQcm9maWxlKHR5cGUp
Ci0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRo
UHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQog
ICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCiAgICAgICAgIGdldChtX3JocywgdDIpCiAgICAgICAg
IGdldChtX2xocywgdDApCkBAIC0xMTI2LDcgKzExMTQsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3Rv
bVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVn
KHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCBJbnQzMlRhZywgLm9wMU5vdElu
dAogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5vcDJOb3RJbnQKLSAgICAgICAgYXJpdGhQ
cm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9m
aWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGdl
dChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MywgdDEsIHQw
LCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKQEAgLTExMzYsMTIgKzExMjQsMTIgQEAg
bWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBiaWEgdDIs
IExvd2VzdFRhZywgLnNsb3cKICAgICAgICAgYmliIHQzLCBMb3dlc3RUYWcsIC5vcDFOb3RJbnRP
cDJEb3VibGUKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAuc2xvdwotICAgICAgICBhcml0
aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0
aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAg
ICAgICAgY2kyZHMgdDEsIGZ0MQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9w
MU5vdEludE9wMkRvdWJsZToKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKLSAgICAgICAgYXJp
dGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5
QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwg
dDQpCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQxKQogICAgICAg
ICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1Myw3ICsxMTQxLDcgQEAgbWFjcm8gYmluYXJ5T3BD
dXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVm
aW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAg
ICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYmlhIHQzLCBMb3dlc3RUYWcsIC5zbG93Ci0g
ICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwg
dDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQx
CiAgICAgICAgIGRvdWJsZU9wZXJhdGlvbihmdDEsIGZ0MCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNDQxLDggKzQ0MSwxMyBAQCBtYWNybyBj
aGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQogICAgICAg
ICAgICAgY0NhbGwyKF9sbGludF9sb29wX29zcikKICAgICAgICAgICAgIGJ0cHogcjAsIC5yZWNv
dmVyCi0KICAgICAgICAgICAgIG1vdmUgcjEsIHNwCisKKyAgICAgICAgICAgICMgQmFzZWxpbmUg
dXNlcyBMTEludCdzIFBCIHJlZ2lzdGVyIGZvciBpdHMgSklUIGNvbnN0YW50IHBvb2wuCisgICAg
ICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENvZGVC
bG9jazo6bV9qaXREYXRhW1BCXSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6SklU
RGF0YTo6bV9qaXRDb25zdGFudFBvb2xbUEJdLCBQQgorCiAgICAgICAgICAgICBpZiBBUk02NEUK
ICAgICAgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9m
SlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6bG9vcE9TUkVudHJ5KSAqIFB0clNp
emUsIGEyCiAgICAgICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAj
IEpTRW50cnlQdHJUYWcKQEAgLTEwNTYsMTAgKzEwNjEsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBP
cChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0
cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNv
ZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRh
dGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAg
ICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmls
ZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDJdCi0gICAgICAgIGVuZAotCiAgICAgICAg
IGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDEKICAgICAg
ICAgbWV0YWRhdGEodDIsIHQzKQpAQCAtMTA2OSw3ICsxMDcwLDcgQEAgbWFjcm8gcHJlT3Aob3Bj
b2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQxLCAu
c2xvdykKICAgICAgICAgb3JxIG51bWJlclRhZywgdDEKICAgICAgICAgc3RvcmVxIHQxLCBbY2Zy
LCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAg
ICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJ
bnQsIHQyLCB0MykKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMTM0LDEx
ICsxMTM1LDYgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5l
Z2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0KLSAg
ICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVn
YXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRz
W3QxXQotICAgIGVuZAotCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCiAgICAgbWV0YWRhdGEodDEsIHQyKQpAQCAtMTE0Niwx
MiArMTE0MiwxMiBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsCiAg
ICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDMKICAgICBv
cnEgbnVtYmVyVGFnLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQp
CisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwg
dDEsIHQyKQogICAgIHJldHVybih0MykKIC5vcE5lZ2F0ZU5vdEludDoKICAgICBidHF6IHQzLCBu
dW1iZXJUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JxIDB4ODAwMDAwMDAwMDAwMDAwMCwgdDMK
LSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVu
YXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQxLCB0MikKICAg
ICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTY0LDEwICsxMTYwLDYgQEAgbWFj
cm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRp
c3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKLSAg
ICAgICAgbWFjcm8gcHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1f
Yml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fcmhzLCB0MCkKICAgICAgICAg
Z2V0KG1fbGhzLCB0MikKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwg
dDEpCkBAIC0xMTc3LDcgKzExNjksNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29k
ZU5hbWUsIG9wCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRp
b25BbmRTdG9yZSh0MSwgdDAsIC5zbG93LCB0MikKIAotICAgICAgICBwcm9maWxlKEFyaXRoUHJv
ZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVj
dCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAg
IC5vcDFOb3RJbnQ6CkBAIC0xMTg3LDEwICsxMTc5LDEwIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9t
U3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwog
ICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCi0gICAgICAg
IHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlB
cml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0
MikKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJJbnQ6Ci0g
ICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0
MikKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAg
Z2V0KG1fZHN0LCB0MikKQEAgLTEyMDQsOSArMTE5Niw5IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9t
U3RvcmUob3Bjb2RlTmFtZSwgb3AKIAogICAgIC5vcDJOb3RJbnQ6CiAgICAgICAgICMgRmlyc3Qg
b3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5v
dC4KLSAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAu
c2xvdwotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVy
LCB0NSwgdDIpCisgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAK
ICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQpAQCAtMTUx
OCw3ICsxNTEwLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWRfZGlyZWN0LAog
ZW5kKQogCiAjIFRoZSBiYXNlIG9iamVjdCBpcyBleHBlY3RlZCBpbiB0MwotbWFjcm8gcGVyZm9y
bUdldEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LCBtb2RlTWV0YWRhdGFOYW1lLCB2YWx1ZVByb2Zp
bGVOYW1lLCBzbG93TGFiZWwsIHNpemUsIG1ldGFkYXRhLCByZXR1cm4pCittYWNybyBwZXJmb3Jt
R2V0QnlJREhlbHBlcihvcGNvZGVTdHJ1Y3QsIG1vZGVNZXRhZGF0YU5hbWUsIHZhbHVlUHJvZmls
ZU5hbWUsIHNsb3dMYWJlbCwgc2l6ZSwgbWV0YWRhdGEsIHJldHVybiwgZG9BcnJheVByb2ZpbGUp
CiAgICAgbWV0YWRhdGEodDIsIHQxKQogICAgIGxvYWRiICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6JW1vZGVNZXRhZGF0YU5hbWUlLm1vZGVbdDJdLCB0MQogCkBAIC0xNTQ2LDcgKzE1MzgsNyBA
QCBtYWNybyBwZXJmb3JtR2V0QnlJREhlbHBlcihvcGNvZGVTdHJ1Y3QsCiAub3BHZXRCeUlkQXJy
YXlMZW5ndGg6CiAgICAgYmJuZXEgdDEsIGNvbnN0ZXhwciBHZXRCeUlkTW9kZTo6QXJyYXlMZW5n
dGgsIC5vcEdldEJ5SWRVbnNldAogICAgIG1vdmUgdDMsIHQwCi0gICAgYXJyYXlQcm9maWxlKCVv
cGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6JW1vZGVNZXRhZGF0YU5hbWUlLmFycmF5TGVuZ3RoTW9k
ZS5hcnJheVByb2ZpbGUsIHQwLCB0MiwgdDUpCisgICAgZG9BcnJheVByb2ZpbGUodDAsIHQyLCB0
NSwgdDEpCiAgICAgYnRpeiB0MCwgSXNBcnJheSwgc2xvd0xhYmVsCiAgICAgYnRpeiB0MCwgSW5k
ZXhpbmdTaGFwZU1hc2ssIHNsb3dMYWJlbAogICAgIGxvYWRDYWdlZEpTVmFsdWUoSlNPYmplY3Q6
Om1fYnV0dGVyZmx5W3QzXSwgdDAsIHQxKQpAQCAtMTU2OCw3ICsxNTYwLDEwIEBAIGVuZAogbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWQsIE9wR2V0QnlJZCwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgZ2V0KG1fYmFzZSwgdDApCiAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZUNlbGwoc2l6ZSwgdDAsIHQzLCAub3BHZXRCeUlkU2xvdykK
LSAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEdldEJ5SWQsIG1fbW9kZU1ldGFkYXRhLCBtX3By
b2ZpbGUsIC5vcEdldEJ5SWRTbG93LCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuKQorICAgIHBlcmZv
cm1HZXRCeUlESGVscGVyKE9wR2V0QnlJZCwgbV9tb2RlTWV0YWRhdGEsIG1fcHJvZmlsZSwgLm9w
R2V0QnlJZFNsb3csIHNpemUsIG1ldGFkYXRhLCByZXR1cm4sCisgICAgICAgIG1hY3JvIChjZWxs
QW5kSW5kZXhpbmdUeXBlLCBtZXRhZGF0YSwgc2NyYXRjaDEsIHNjcmF0Y2gyKQorICAgICAgICAg
ICAgYXJyYXlQcm9maWxlKE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLCBjZWxs
QW5kSW5kZXhpbmdUeXBlLCBtZXRhZGF0YSwgc2NyYXRjaDEpCisgICAgICAgIGVuZCkKIAogLm9w
R2V0QnlJZFNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfZ2V0X2J5X2lk
KQpAQCAtMzAwMiw3ICsyOTk3LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9v
cGVuLCBPcAogCiAgICAgbG9hZFZhcmlhYmxlKGdldCwgbV9pdGVyYXRvciwgdDMpCiAgICAgYnRx
bnogdDMsIG5vdENlbGxNYXNrLCAuaXRlcmF0b3JPcGVuR2VuZXJpY0dldE5leHRTbG93Ci0gICAg
cGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck9wZW4sIG1fbW9kZU1ldGFkYXRhLCBtX25l
eHRQcm9maWxlLCAuaXRlcmF0b3JPcGVuR2VuZXJpY0dldE5leHRTbG93LCBzaXplLCBtZXRhZGF0
YSwgc3RvcmVOZXh0QW5kRGlzcGF0Y2gpCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVy
YXRvck9wZW4sIG1fbW9kZU1ldGFkYXRhLCBtX25leHRQcm9maWxlLCAuaXRlcmF0b3JPcGVuR2Vu
ZXJpY0dldE5leHRTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVOZXh0QW5kRGlzcGF0Y2gsIG1h
Y3JvKGEsIGIsIGMsIGQpIGVuZCkKIAogLml0ZXJhdG9yT3BlbkdlbmVyaWNHZXROZXh0U2xvdzoK
ICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2dldF9uZXh0
KQpAQCAtMzA2MSw3ICszMDU2LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9u
ZXh0LCBPcAogCiAgICAgbG9hZFZhcmlhYmxlKGdldCwgbV92YWx1ZSwgdDMpCiAgICAgYnRxbnog
dDMsIG5vdENlbGxNYXNrLCAuZ2V0RG9uZVNsb3cKLSAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihP
cEl0ZXJhdG9yTmV4dCwgbV9kb25lTW9kZU1ldGFkYXRhLCBtX2RvbmVQcm9maWxlLCAuZ2V0RG9u
ZVNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZURvbmVBbmRKbXBUb0dldFZhbHVlKQorICAgIHBl
cmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JOZXh0LCBtX2RvbmVNb2RlTWV0YWRhdGEsIG1f
ZG9uZVByb2ZpbGUsIC5nZXREb25lU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlRG9uZUFuZEpt
cFRvR2V0VmFsdWUsIG1hY3JvKGEsIGIsIGMsIGQpIGVuZCkKIAogLmdldERvbmVTbG93OgogICAg
IGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfZ2V0X2RvbmUpCkBA
IC0zMDg2LDcgKzMwODEsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX25leHQs
IE9wCiAgICAgIyBSZWxvYWQgdGhlIG5leHQgcmVzdWx0IHRtcCBzaW5jZSB0aGUgZ2V0X2J5X2lk
IGFib3ZlIG1heSBoYXZlIGNsb2JiZXJlZCB0My4KICAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX3Zh
bHVlLCB0MykKICAgICAjIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgaWYgdGhlIGl0ZXJhdG9yIHJl
c3VsdCBpcyBhIGNlbGwgaGVyZSBzaW5jZSB3ZSB3aWxsIGhhdmUgdGhyb3duIGFuIGVycm9yIGJl
Zm9yZS4KLSAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV92YWx1ZU1v
ZGVNZXRhZGF0YSwgbV92YWx1ZVByb2ZpbGUsIC5nZXRWYWx1ZVNsb3csIHNpemUsIG1ldGFkYXRh
LCBzdG9yZVZhbHVlQW5kRGlzcGF0Y2gpCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVy
YXRvck5leHQsIG1fdmFsdWVNb2RlTWV0YWRhdGEsIG1fdmFsdWVQcm9maWxlLCAuZ2V0VmFsdWVT
bG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVWYWx1ZUFuZERpc3BhdGNoLCBtYWNybyhhLCBiLCBj
LCBkKSBlbmQpCiAKIC5nZXRWYWx1ZVNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93
X3BhdGhfaXRlcmF0b3JfbmV4dF9nZXRfdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20JKHdvcmtpbmcgY29weSkKQEAgLTE0MjAsNyArMTQyMCw4IEBAIGVuZAogCiBtYWNybyBjaGVj
a1N3aXRjaFRvSklUKGluY3JlbWVudCwgYWN0aW9uKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJd
LCB0MAotICAgIGJhZGRpcyBpbmNyZW1lbnQsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3Vu
dGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUK
KyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MF0sIHQwCisgICAg
YmFkZGlzIGluY3JlbWVudCwgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBd
LCAuY29udGludWUKICAgICBhY3Rpb24oKQogICAgIC5jb250aW51ZToKIGVuZApAQCAtMTUwMyw3
ICsxNTA0LDggQEAgbWFjcm8gcHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvYwogICAg
IGNvZGVCbG9ja0dldHRlcih0MSkKICAgICBjb2RlQmxvY2tTZXR0ZXIodDEpCiAgICAgaWYgbm90
IChDX0xPT1Agb3IgQ19MT09QX1dJTikKLSAgICAgICAgYmFkZGlzIDUsIENvZGVCbG9jazo6bV9s
bGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJb
dDFdLCAuY29udGludWUKKyAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNv
dW50ZXJbdDFdLCB0MAorICAgICAgICBiYWRkaXMgNSwgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVy
OjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAg
ICAgICBtb3ZlIGNmciwgYTAKICAgICAgICAgICAgIG1vdmUgUEMsIGExCkBAIC0xNjE3LDE0ICsx
NjE5LDE0IEBAIG1hY3JvIGZ1bmN0aW9uSW5pdGlhbGl6YXRpb24ocHJvZmlsZUFyZ1MKICAgICAj
IG9wdGltYWwgd2F5IGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gZml2ZSBy
ZWdpc3RlcnMgYXZhaWxhYmxlCiAgICAgIyBmb3IgYXJiaXRyYXJ5IHVzZSBpbiB0aGUgaW50ZXJw
cmV0ZXIuCiAgICAgbG9hZGkgQ29kZUJsb2NrOjptX251bVBhcmFtZXRlcnNbdDFdLCB0MAotICAg
IGFkZHAgLXByb2ZpbGVBcmdTa2lwLCB0MCAjIFVzZSBhZGRpIGJlY2F1c2UgdGhhdCdzIHdoYXQg
aGFzIHRoZSBwZWVwaG9sZQorICAgIGFkZHAgLXByb2ZpbGVBcmdTa2lwLCB0MAogICAgIGFzc2Vy
dChtYWNybyAob2spIGJwZ3RlcSB0MCwgMCwgb2sgZW5kKQogICAgIGJ0cHogdDAsIC5hcmd1bWVu
dFByb2ZpbGVEb25lCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2FyZ3VtZW50VmFsdWVQcm9maWxl
cyArIEZpeGVkVmVjdG9yOjptX3N0b3JhZ2UgKyBSZWZDb3VudGVkQXJyYXk6Om1fZGF0YVt0MV0s
IHQzCiAgICAgYnRweiB0MywgLmFyZ3VtZW50UHJvZmlsZURvbmUgIyBXaGVuIHdlIGNhbid0IEpJ
VCwgd2UgZG9uJ3QgYWxsb2NhdGUgYW55IGFyZ3VtZW50IHZhbHVlIHByb2ZpbGVzLgogICAgIG11
bHAgc2l6ZW9mIFZhbHVlUHJvZmlsZSwgdDAsIHQyICMgQWFhYWFoaGhoISBOZWVkIHN0cmVuZ3Ro
IHJlZHVjdGlvbiEKICAgICBsc2hpZnRwIDMsIHQwICMgb2Zmc2V0IG9mIGxhc3QgSlNWYWx1ZSBh
cmd1bWVudHMgb24gdGhlIHN0YWNrLgotICAgIGFkZHAgdDIsIHQzICMgcG9pbnRlciB0byBlbmQg
b2YgVmFsdWVQcm9maWxlIGFycmF5IGluIENvZGVCbG9jazo6bV9hcmd1bWVudFZhbHVlUHJvZmls
ZXMuCisgICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJy
YXkgaW4gdGhlIHZhbHVlIHByb2ZpbGUgYXJyYXkuCiAuYXJndW1lbnRQcm9maWxlTG9vcDoKICAg
ICBpZiBKU1ZBTFVFNjQKICAgICAgICAgbG9hZHEgVGhpc0FyZ3VtZW50T2Zmc2V0IC0gOCArIHBy
b2ZpbGVBcmdTa2lwICogOFtjZnIsIHQwXSwgdDIKQEAgLTI1NjMsNiArMjU2NSwxNyBAQCBtYWNy
byBub3RTdXBwb3J0ZWQoKQogICAgIGVuZAogZW5kCiAKKworbWFjcm8gdXBkYXRlVW5hcnlBcml0
aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAl
b3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAor
ICAgIG9yaCB0eXBlLCBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKworbWFj
cm8gdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEs
IHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmls
ZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgQmluYXJ5QXJpdGhQcm9maWxlOjptX2Jp
dHNbdGVtcF0KK2VuZAorCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRoZSBYODZfNjRf
V0lOIGNvbmRpdGlvbiBoZXJlLCBzaW5jZSBXRUJBU1NFTUJMWSBzaG91bGQgYWxyZWFkeSBiZSBm
YWxzZSBvbiBXaW5kb3dzCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjAzNzE2CiBpZiBXRUJBU1NFTUJMWSBhbmQgbm90IFg4Nl82NF9XSU4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
YWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsMTAgQEAgcHVibGlj
OgogICAgIENhY2hlYWJsZUlkZW50aWZpZXIoKSA9IGRlZmF1bHQ7CiAKICAgICBzdGF0aWMgaW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUNlbGwoSlNDZWxsKiBpZGVudGlmaWVy
KTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayosIGNvbnN0IElkZW50aWZpZXImKTsKLSAg
ICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFi
bGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxv
Y2tUeXBlKiwgY29uc3QgSWRlbnRpZmllciYpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2Rl
QmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIFVuaXF1ZWRTdHJp
bmdJbXBsKik7CiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgY29u
c3RleHByIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbVJhd0JpdHModWludHB0cl90IHJh
d0JpdHMpIHsgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIocmF3Qml0cyk7IH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSwxMiArMzUsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBDYWNoZWFi
bGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaSkK
K3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50
aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaSkKIHsK
ICAgICByZXR1cm4gY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKGNvZGVCbG9j
aywgaS5pbXBsKCkpOwogfQogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBl
KiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgQVNTRVJUX1VOVVNF
RChjb2RlQmxvY2ssIGNvZGVCbG9jay0+aGFzSWRlbnRpZmllcih1aWQpKTsKICAgICByZXR1cm4g
Q2FjaGVhYmxlSWRlbnRpZmllcih1aWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FjaGVkVHlwZXMu
aCIKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ1aWx0aW5OYW1l
cy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ2FjaGVFcnJvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00ODAsNyArNDgwLDcgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0
aF90bwogI2lmIEVOQUJMRShKSVQpCiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFByb2ZpbGVGb3JV
bmFyeUFyaXRoT3AoT3BOZWdhdGU6Ok1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZSByZXN1bHQs
IEpTVmFsdWUgb3BlcmFuZCkKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9IG1l
dGFkYXRhLm1fYXJpdGhQcm9maWxlOworICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0g
Km1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOwogICAgIHByb2ZpbGUub2JzZXJ2ZUFyZyhvcGVyYW5k
KTsKICAgICBBU1NFUlQocmVzdWx0LmlzTnVtYmVyKCkgfHwgcmVzdWx0LmlzQmlnSW50KCkpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4
ZWN1dGFibGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsyODks
OCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZlJhcmVE
YXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9yYXJl
RGF0YSk7IH0KICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFzU3RyaW5nSW5S
YXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihSYXJlRGF0YSwgbV9hc1N0cmluZyk7
IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9j
a0ZvckNhbGwpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRh
YmxlLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgRXhlY3V0YWJsZUJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDks
NiBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoSW50MzIsIGV2
YWxUaHJlc2hvbGRNdWx0aXBsaWVyLCAxMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNp
Z25lZCwgbWF4aW11bUV2YWxDYWNoZWFibGVTb3VyY2VMZW5ndGgsIDI1NiwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgXAotICAgIHYoQm9vbCwgcmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2Vl
bkNoZWNrcG9pbnRzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJbnQzMiwgbWF4
aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvckJhc2VsaW5lLCAxMDAwLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0
d2VlbkNoZWNrcG9pbnRzRm9yVXBwZXJUaWVycywgNTAwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIFwKQEAgLTUzMiw2ICs1MzEsNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9y
eSgpOwogICAgIHYoQm9vbCwgdXNlRGF0YUlDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihCb29sLCB1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ1NoYXJpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKKyAgICB2KEJvb2wsIHVzZUJhc2VsaW5lSklUQ29kZVNoYXJpbmcsIHRydWUsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIFwKICAgICAvKiBGZWF0dXJlIEZsYWdzICovXAogICAgIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFi
bGUuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDcgKzM5Niw5IEBA
IHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGkKICAgICBpZiAoT3B0aW9u
czo6dmFsaWRhdGVCeXRlY29kZSgpKQogICAgICAgICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7CiAK
LSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKKyAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklU
Q29kZT4gYmFzZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5s
aW5rZWRCYXNlbGluZUNvZGUpCisgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRC
YXNlbGluZUNvZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisgICAgZWxzZSBpZiAo
T3B0aW9uczo6dXNlTExJbnQoKSkKICAgICAgICAgc2V0dXBMTEludChjb2RlQmxvY2spOwogICAg
IGVsc2UKICAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVy
VXBDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgcHVibGljOgogICAg
IHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCgpCiAgICAgewogICAgICAgICBpZiAoT3B0aW9uczo6
d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0
aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAg
ICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6
ZUFmdGVyV2FybVVwKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hv
bGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRy
KTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdP
cHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0KIAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXph
dGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtNjUsOSArNjUsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBvcHRpbWl6ZVNvb24oKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRp
ZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvckJCUU9wdGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1Ro
cmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZVNvb24oKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JP
TUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQo
T3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAogICAgIHN0
cnVjdCBPU1JFbnRyeURhdGEgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVRpZXJVcENvdW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGllclVwQ291bnQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIFRpZXJVcENvdW50
OjpUaWVyVXBDb3VudCgpCiB7Ci0gICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9s
ZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgc2V0TmV3VGhyZXNo
b2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiB9CiAK
IFRpZXJVcENvdW50Ojp+VGllclVwQ291bnQoKSA9IGRlZmF1bHQ7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldh
cm1VcCh1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYo
T3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBh
ZnRlciB3YXJtLXVwLiIpOwotICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNo
b2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7
CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgp
CkBAIC05MCwxNCArOTAsMTQgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2Nh
dGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYo
T3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBu
ZXh0IGludm9jYXRpb24uIik7Ci0gICAgICAgIHNldE5ld1RocmVzaG9sZCgwLCBudWxscHRyKTsK
KyAgICAgICAgc2V0TmV3VGhyZXNob2xkKDApOwogICAgIH0KIAogICAgIHZvaWQgb3B0aW1pemVT
b29uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIHNv
b24uIik7CiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIGFkanVzdG1lbnQgb25jZSB3ZSBnZXQgbW9y
ZSBpbmZvcm1hdGlvbiBhYm91dCB3YXNtIGZ1bmN0aW9ucy4KLSAgICAgICAgc2V0TmV3VGhyZXNo
b2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpLCBudWxscHRyKTsKKyAg
ICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29v
bigpKTsKICAgICB9CiAKICAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25D
b21waWxhdGlvblJlc3VsdCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBDb21waWxhdGlvblJlc3Vs
dCByZXN1bHQpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL1dURi93dGYvQmFn
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDIwIEBAIHB1YmxpYzoKICAgICAgICAgb3Ro
ZXIubV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgor
ICAgIEJhZyYgb3BlcmF0b3I9KEJhZzxULCBVPiYmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYg
KHVud3JhcHBlZEhlYWQoKSA9PSBvdGhlci51bndyYXBwZWRIZWFkKCkpCisgICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CisKKyAgICAgICAgQmFnIGRlc3Ryb3k7CisgICAgICAgIGRlc3Ryb3kubV9o
ZWFkID0gdW53cmFwcGVkSGVhZCgpOworICAgICAgICBtX2hlYWQgPSBvdGhlci51bndyYXBwZWRI
ZWFkKCk7CisgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKwogICAgIH5CYWcoKQogICAgIHsKICAgICAgICAgY2xlYXIoKTsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1BhY2tlZC5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4NiwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
VCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9Ci0gICAgVCYgb3BlcmF0b3Iq
KCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSA9
IFQ+CisgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfdm9pZF92PFU+LCBVJj46
OnR5cGUgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisKICAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFnZXQoKTsgfQogCiAgICAgLy8gVGhpcyBjb252ZXJz
aW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0
byBvdGhlciBpbnRlZ2VyIHR5cGVzLgpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVz
cy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3Rz
CShyZXZpc2lvbiAyODI2NzUpCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3Rz
CSh3b3JraW5nIGNvcHkpCkBAIC03NzYsMTcgKzc3NiwxOCBAQCBlbmQKIAogIyBGSVhNRTogbmVl
ZCB0byBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODcwMyB0
byBlbmFibGUgdGhpcyBvbiBMaW51eC9NSVBTLgogZGVmIHJ1bkJ5dGVjb2RlQ2FjaGVJbXBsKG9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucywgKmFkZGl0aW9uYWxFbnYpCi0gICAgaWYgKCRob3N0
T1MgPT0gImRhcndpbiIpCi0gICAgICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1jYWNoZSIK
LSAgICBlbHNpZiAoJGhvc3RPUyA9PSAibGludXgiICYmICRhcmNoaXRlY3R1cmUgIT0gIm1pcHMi
KQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhYWFgiCi0gICAgZWxz
ZQotICAgICAgICBza2lwCi0gICAgICAgIHJldHVybgotICAgIGVuZAorICAgICMgT09QUworICAg
ICNpZiAoJGhvc3RPUyA9PSAiZGFyd2luIikKKyAgICAjICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRl
Y29kZS1jYWNoZSIKKyAgICAjZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAkYXJjaGl0ZWN0
dXJlICE9ICJtaXBzIikKKyAgICAjICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1jYWNoZVhY
WFhYWCIKKyAgICAjZWxzZQorICAgICMgICAgc2tpcAorICAgICMgICAgcmV0dXJuCisgICAgI2Vu
ZAogCi0gICAgb3B0aW9ucyA9IEJBU0VfT1BUSU9OUyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucwotICAgIGFk
ZFJ1bkNvbW1hbmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxwZXJzICsgImJ5
dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRlLnRvX3MsICp2
bUNvbW1hbmQsICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVy
LCBzaW1wbGVFcnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQorICAgICNvcHRpb25zID0gQkFT
RV9PUFRJT05TICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMgKyAk
dGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25zCisgICAgI2FkZFJ1bkNvbW1hbmQoImJ5dGVjb2Rl
LWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxwZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRlc3QtaGVs
cGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRlLnRvX3MsICp2bUNvbW1hbmQsICRiZW5jaG1hcmsu
dG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRsZXIs
ICphZGRpdGlvbmFsRW52KQogZW5kCiAKIGRlZiBydW5CeXRlY29kZUNhY2hlKCpvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438777</attachid>
            <date>2021-09-20 22:40:23 -0700</date>
            <delta_ts>2021-09-21 13:48:59 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>504707</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsMTAg
QEAgb3BfZ3JvdXAgOlByb2ZpbGVkQmluYXJ5T3AsCiAgICAgICAgIGxoczogVmlydHVhbFJlZ2lz
dGVyLAogICAgICAgICByaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZFR5cGVz
OiBPcGVyYW5kVHlwZXMsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxl
CisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
X2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTEsOSArMzUyLDEwIEBAIG9wX2dy
b3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgIF0sCiAgICAgYXJnczogewogICAgICAg
ICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg0LDkgKzM4NiwxMCBAQCBvcCA6bmVnYXRlLAog
ICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZDogVmlydHVhbFJl
Z2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLAorICAgICAgICBwcm9maWxl
SW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQ
cm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFy
aXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApAQCAtNDc4LDYgKzQ4MSw3IEBAIG9wIDpn
ZXRfYnlfaWQsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgbW9kZU1ldGFkYXRhOiBHZXRCeUlk
TW9kZU1ldGFkYXRhLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgIH0KIAogb3AgOmdldF9ieV9pZF93aXRoX3Ro
aXMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVj
a3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBAIFZhbHVlUHJvZmlsZSog
dmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJuICZtZXRhZGF0YS5tX3By
b2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK3VpbnRwdHJfdCB2YWx1
ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4KQoreworICAgIFVOVVNF
RF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9w
Y29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50
SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJu
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRvclByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZOZXh0UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRl
Y29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3JfbmV4dCkgeworICAgICAgICBzd2l0Y2ggKGNo
ZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4
dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZSgp
OworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXREb25lOiByZXR1cm4gQnl0ZWNvZGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkRvbmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck5leHQ6OmdldFZhbHVlOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlZhbHVl
UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfSBlbHNlIAorICAgICAgICByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZlByb2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVN
ZXRhZGF0YT4KIGJvb2wgaGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFk
YXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhW
TSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQot
ewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4o
bV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRN
YXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
dmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5r
SW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSAm
JiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwogdm9pZCBDYWxs
TGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVTcGVjaWZpY0Nh
bGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5OSwxMSBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9mcmFtZVNodWZm
bGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRVc2VzRGF0YUlD
cyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwotICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQ
Uik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BS
OwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9m
YXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZh
c3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJQyA9PSBVc2VE
YXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVn
aXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxM
aW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcgQEAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAgZ29Qb2x5bW9y
cGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVNYXNrKSk7CiAg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
aXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBw
cmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMubGluaygmaml0
KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBwcmVwLgogICAg
ICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQ
Uiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7
CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGNh
bGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
byk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICB1LmNv
ZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMu
bV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMubV9jYWxs
ZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxs
ZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEzICszNDQsMzQgQEAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQykK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIG51
bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBpZiAoaXNEYXRh
SUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVn
OjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRh
SUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0
YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKLSAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAgc2V0VXNlc0Rh
dGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywg
aml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlzVGFpbENhbGwo
KSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4g
ZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CiB9CiAKIHZv
aWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkK
QEAgLTM2OSwxNyArMzgxLDMyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0m
IHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIs
IG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQog
Cit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUoY2FsbExpbmtJ
bmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBK
U0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMo
Vk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgbV9jb2RlT3JpZ2lu
ID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBz
ZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAg
bV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247CisgICAg
aWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpIHsKKyAgICAgICAgLy8g
RklYTUU6IEl0J2QgYmUgbmljZSBpZiB0aGlzIGp1c3Qgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBz
dHJ1Y3R1cmUuCisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZy
YW1lU2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsK
KyAgICB9CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlD
Lm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxh
dGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpO
byk7CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAg
dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBq
aXQubGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0
UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQ
YXRoU3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwg
dGhpcyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1
bnNpZ25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2Vk
Q2FsbExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2Vu
dGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgewor
ICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2Fs
bCwKICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAg
ICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxp
emVEYXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsg
cmV0dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1
aW50OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRl
OgotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
QywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURf
UkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRo
SW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVi
bGljOgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQ
YXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVj
dEZhc3RQYXRoKENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWls
Q2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBz
dGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJv
b2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNl
RGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsy
NDksNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAot
ICAgIEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9z
bG93U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsK
ICAgICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZv
LCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJf
dCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlv
blR5cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9j
YXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxv
Y2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
bV9zbG93UGF0aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5h
bFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAK
QEAgLTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29k
ZU9yaQogICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3Qg
VW5saW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsg
Ly8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxs
eSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxU
eXBlOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlv
bjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZs
ZURhdGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsOCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlk
ZXIoKSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVD
b3VudGVyKCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9
CkBAIC0zMTgsNyArMzIwLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgQwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIAogICAgIG9wdGltaXplQWZ0ZXJX
YXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgaWYgKG90aGVyLm1fcmFyZURh
dGEpIHsKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwpAQCAtMzU5LDcgKzM2
MCw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAgIEFT
U0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2Vk
Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CisKICAgICB2
bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcwLDEwICszNzMsMTMg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2FuJ3Qg
Z2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJvY2Vz
cyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJvZHVj
ZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5lc3Mg
YW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2YgYW4g
VW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhlIGxp
dmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNpZGUg
VW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBiZXR3
ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhlIGJ5
dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5nIGFu
IFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CisgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOyAvLyBXZSBuZWVkIHRvIHNldCB1cCBvdXIgdmFsdWUgcHJvZmlsZSBw
b2ludGVycy4KKwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBmaW5pc2hDcmVh
dGlvbkNvbW1vbih2bSk7CiAKQEAgLTQ3MSw2ICs0NzcsMTkgQEAgYm9vbCBDb2RlQmxvY2s6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBicmVhazsgXAogICAgIH0KIAorI2RlZmlu
ZSBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6
IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRh
dGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShi
eXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVm
aW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3Ap
OiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFk
YXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlLT51bmFyeUFyaXRoUHJvZmlsZShi
eXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisKICAg
ICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25TdHJlYW0gPSBpbnN0cnVjdGlv
bnMoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uIDogaW5zdHJ1Y3Rpb25TdHJl
YW0pIHsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KTsKQEAgLTUzMywxNCArNTUyLDE0IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFMKICAgICAgICAgTElOSyhPcENyZWF0ZVByb21pc2UpCiAgICAgICAgIExJTksoT3BD
cmVhdGVHZW5lcmF0b3IpCiAKLSAgICAgICAgTElOSyhPcEFkZCkKLSAgICAgICAgTElOSyhPcE11
bCkKLSAgICAgICAgTElOSyhPcERpdikKLSAgICAgICAgTElOSyhPcFN1YikKLQotICAgICAgICBM
SU5LKE9wTmVnYXRlKQotICAgICAgICBMSU5LKE9wSW5jKQotICAgICAgICBMSU5LKE9wRGVjKQor
ICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BBZGQpCisgICAgICAgIExJ
TktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcE11bCkKKyAgICAgICAgTElOS19XSVRIX0JJ
TkFSWV9BUklUSF9QUk9GSUxFKE9wRGl2KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRI
X1BST0ZJTEUoT3BTdWIpCisKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUo
T3BOZWdhdGUpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wSW5jKQor
ICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcERlYykKIAogICAgICAgICBM
SU5LKE9wSm5lcVB0cikKIApAQCAtNzY5LDcgKzc4OCw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAvLyByZWx5IG9uIHRoZSBpbnN0cnVjdGlvbiBjb3Vu
dCAoYW5kIGFyZSBpbiB0aGVvcnkgcGVybWl0dGVkIHRvIGFsc28gaW5zcGVjdCB0aGUKICAgICAv
LyBpbnN0cnVjdGlvbiBzdHJlYW0gdG8gbW9yZSBhY2N1cmF0ZSBhc3Nlc3MgdGhlIGNvc3Qgb2Yg
dGllci11cCkuCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGppdEFmdGVyV2FybVVw
KCk7CiAKICAgICAvLyBJZiB0aGUgY29uY3VycmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2Rl
IGJsb2NrJ3MgaGFzaCwgdGhlbiBjb21wdXRlIGl0IGhlcmUKICAgICAvLyBzeW5jaHJvbm91c2x5
LgpAQCAtNzkzLDYgKzgxMSw3NiBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb25Db21t
b24oVk0mCiAgICAgbV9vd25lckVkZ2Uuc2V0KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjpjcmVhdGUodm0sIHRoaXMpKTsKIH0KIAordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0
aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7Cisg
ICAgc2V0SklUQ29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0
IGF1dG8mIGppdENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAg
ICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAg
aGFuZGxlci5uYXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxl
ci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9
CisgICAgfQorCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7CisgICAgICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkp
OworICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+
KGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAg
ICAgIHN3aXRjaCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBv
b2w6OlR5cGU6Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZv
OiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExp
bmtJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9h
ZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBq
aXREYXRhLm1fY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5m
by5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFs
aXplRGF0YUlDKHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BS
SW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xb
aV0gPSBjYWxsTGlua0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm86IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtl
ZFN0dWJJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRy
eS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBqaXREYXRhLm1fc3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5
cGUsIENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAg
ICAgICAgICAgc3R1YkluZm8tPmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byh0aGlzLCB1bmxpbmtlZFN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0
Q29uc3RhbnRQb29sW2ldID0gc3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rp
b25EZWNsOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRh
Lm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpGdW5jdGlvbkV4cHI6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5k
ZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2Fz
ZSBHbG9iYWxDb2RlOgorICAgIGNhc2UgTW9kdWxlQ29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgor
ICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZ1bmN0aW9uQ29kZToKKyAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5
IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxs
LgorICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYm
IERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgaWYgKGppdENvZGUtPm1faXNTaGFyZWFibGUgJiYgIXVubGlua2VkQ29kZUJsb2NrKCkt
Pm1fdW5saW5rZWRCYXNlbGluZUNvZGUgJiYgT3B0aW9uczo6dXNlQmFzZWxpbmVKSVRDb2RlU2hh
cmluZygpKQorICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVD
b2RlID0gV1RGTW92ZShqaXRDb2RlKTsKK30KKwogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsK
ICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTg3Myw2ICs5NjEsMjcgQEAgQ29kZUJsb2NrOjp+Q29k
ZUJsb2NrKCkKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQogCitib29sIENvZGVCbG9jazo6aXND
b25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25z
dAoreworICAgIC8vIFRoaXMgbmVlZHMgdG8gY29ycmVzcG9uZCB0byB3aGF0IHdlIGRvIGluc2lk
ZSBzZXRDb25zdGFudFJlZ2lzdGVycy4KKyAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCkt
PmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHJlZykpIHsKKyAgICBjYXNlIFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjo6RG91YmxlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI6IHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHVubGlu
a2VkQ29kZUJsb2NrKCktPmdldENvbnN0YW50KHJlZyk7CisgICAgICAgIGlmICghdmFsdWUgfHwg
IXZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIEpTQ2Vs
bCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICBpZiAoY2VsbC0+aW5oZXJpdHM8U3lt
Ym9sVGFibGU+KHZtKCkpIHx8IGNlbGwtPmluaGVyaXRzPEpTVGVtcGxhdGVPYmplY3REZXNjcmlw
dG9yPih2bSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNv
bnN0YW50OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiBWZWN0b3I8dW5zaWdu
ZWQ+IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgRml4ZWRWZWN0b3I8V3Jp
dGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pCiB7
CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC04OTIsNiArMTAwMSw3IEBAIFZlY3Rvcjx1bnNpZ25l
ZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFIKICAgICAgICAgc3dpdGNoIChyZXByZXNlbnRhdGlv
bikgewogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25z
dGFudDoKICAgICAgICAgICAgIGNvbnN0YW50ID0gZ2xvYmFsT2JqZWN0LT5saW5rVGltZUNvbnN0
YW50KHN0YXRpY19jYXN0PExpbmtUaW1lQ29uc3RhbnQ+KGNvbnN0YW50LmFzSW50MzJBc0FueUlu
dCgpKSk7CisgICAgICAgICAgICBBU1NFUlQoY29uc3RhbnQuaXNDZWxsKCkpOyAvLyBVbmxpbmtl
ZCBCYXNlbGluZSBKSVQgcmVxdWlyZXMgdGhpcy4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI6CiAgICAgICAgIGNhc2UgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgpAQCAtMTUxNCw3ICsxNjI0LDcgQEAgQ29k
ZUJsb2NrOjpKSVREYXRhJiBDb2RlQmxvY2s6OmVuc3VyZUpJVAogICAgIHJldHVybiAqbV9qaXRE
YXRhOwogfQogCi12b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hl
cygpCit2b2lkIENvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKQogewogICAgIGlm
IChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCkBAIC0xNTI1
LDYgKzE2MzUsMjAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbgog
ICAgICAgICAgICAgc3R1YkluZm8tPnZpc2l0V2Vha1JlZmVyZW5jZXMobG9ja2VyLCB0aGlzKTsK
ICAgICAgICAgfQogICAgIH0KKworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBpZiAoaml0VHlw
ZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIC8vIFZlcmlmeSB3ZSBkb24n
dCBuZWVkIHRvIGZpbmFsaXplIHRoZXNlIHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KKyAg
ICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA6IHN0YXRpY19jYXN0PEJhc2Vs
aW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fZXZhbENhbGxMaW5rSW5mb3MpIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7CisgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtdIChKU0NlbGwqKSB7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisKKyAgICB9CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC0xNTM0
LDQ2ICsxNjU4LDQ3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgK
IAogICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIGJv
b2wgaXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGU7Ci0gICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBmYWxzZTsKLSAgICAv
LyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQg
cmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0Ci0gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGlu
ZSBKSVQgY29kZSBhbmQgcmVpbnN0YWxsIExMSW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5Lgot
ICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpICYmICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1Nl
dCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpKSB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sq
IG9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKLSAgICAgICAg
ICAgIGlmICghb3B0aW1pemVkQ29kZUJsb2NrLT5tX29zckV4aXRDb3VudGVyKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSkgewotICAgICAgICAgICAg
ICAgICAgICBtX2ppdENvZGUgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBMTEludDo6
c2V0RW50cnlwb2ludCh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOwotCi0gICAgICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxpbmtlZENvZGUtPm51bWJlck9mRXhj
ZXB0aW9uSGFuZGxlcnMoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBV
bmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlua2VkQ29kZS0+ZXhj
ZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBo
YW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9ucygpLmF0KHVubGlu
a2VkSGFuZGxlci50YXJnZXQpLnB0cigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxl
ci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZUNhdGNoKGluc3RydWN0aW9uLndpZHRoKCkpLmNv
ZGUoKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdW5s
aW5rSW5jb21pbmdDYWxscygpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0
byBjbGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGluIGZpbmFsaXplVW5jb25kaXRpb25hbGx5
IGFsbCBjb21waWxlciB0aHJlYWRzCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBzYWZlcG9p
bnRlZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5pbmcgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBieXRl
Y29kZSBwYXJzZXIsIGFuZCBieXRlY29kZQotICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXIg
aXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5m
b3MuCi0gICAgICAgICAgICAgICAgICAgIHJlc2V0SklURGF0YSgpOwotICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFk
ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNlbmRpZgorLy8g
T09QUzogcmVjb25jaWxlIHRoaXMKKy8vI2lmIEVOQUJMRShKSVQpCisvLyAgICBib29sIGlzRWxp
Z2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwor
Ly8gICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBmYWxzZTsKKy8vICAgIC8vIElm
IEJhc2VsaW5lSklUIGNvZGUgaXMgbm90IGV4ZWN1dGluZywgYW5kIGFuIG9wdGltaXplZCByZXBs
YWNlbWVudCBleGlzdHMsIHdlIGF0dGVtcHQKKy8vICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUg
SklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KKy8v
ICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpICYmICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1Nl
dCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpKSB7CisvLyAgICAgICAgaWYgKENvZGVCbG9j
ayogb3B0aW1pemVkQ29kZUJsb2NrID0gb3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworLy8gICAg
ICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgeworLy8g
ICAgICAgICAgICAgICAgaWYgKGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSkgeworLy8gICAg
ICAgICAgICAgICAgICAgIG1faml0Q29kZSA9IG51bGxwdHI7CisvLyAgICAgICAgICAgICAgICAg
ICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7CisvLyAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOworLy8K
Ky8vICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRD
b2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgeworLy8gICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBt
X3VubGlua2VkQ29kZS0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKKy8vICAgICAgICAgICAgICAgICAg
ICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRs
ZXJzW2ldOworLy8gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICpp
bnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKKy8vICAgICAg
ICAgICAgICAgICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29k
ZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZUNhdGNo
KGluc3RydWN0aW9uLndpZHRoKCkpLmNvZGUoKSkpOworLy8gICAgICAgICAgICAgICAgICAgIH0K
Ky8vCisvLyAgICAgICAgICAgICAgICAgICAgdW5saW5rSW5jb21pbmdDYWxscygpOworLy8KKy8v
ICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUg
YmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwor
Ly8gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBzYWZlcG9pbnRlZCwgbWVhbmluZyB0aGV5J3Jl
IHJ1bm5pbmcgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBieXRlY29kZSBwYXJzZXIsIGFuZCBieXRl
Y29kZQorLy8gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlciBpcyB0aGUgb25seSBkYXRhIHN0
cnVjdHVyZSBwb2ludGluZyBpbnRvIHRoZSB2YXJpb3VzICppbmZvcy4KKy8vICAgICAgICAgICAg
ICAgICAgICByZXNldEpJVERhdGEoKTsKKy8vICAgICAgICAgICAgICAgIH0gZWxzZQorLy8gICAg
ICAgICAgICAgICAgICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gdHJ1ZTsKKy8v
ICAgICAgICAgICAgfQorLy8gICAgICAgIH0KKy8vICAgIH0KKy8vCisvLyNlbmRpZgogICAgIAog
ICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKICAgICAgICAg
ZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAo
ISFqaXRDb2RlKCkpCi0gICAgICAgIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsK
KyAgICAgICAgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KERGR19KSVQpCkBAIC0xNTk0LDcgKzE3MTksNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoCiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OgotICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKKyAg
ICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jb3VudCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAg
ICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKQEAgLTE2NzUsMzAgKzE4
MDAsNiBAQCBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mCiAgICAgcmV0
dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSwgY29k
ZU9yaWdpbik7CiB9CiAKLUpJVEFkZElDKiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fYWRkSUNzLmFk
ZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVRNdWxJQyogQ29kZUJsb2NrOjphZGRKSVRNdWxJQyhC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX211
bElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUU3ViSUMqIENvZGVCbG9jazo6YWRkSklU
U3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVE5lZ0lDKiBDb2RlQmxvY2s6
OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRh
KGxvY2tlcikubV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KIFN0cnVjdHVyZVN0dWJJ
bmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwpAQCAtMzEzMyw3ICszMjM0LDcg
QEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1l
UmVnaXN0ZXJDb3VudEZvcih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMzQ5LDEzICszNDUwLDEzIEBA
IEJpbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2gg
KHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNh
c2Ugb3BfbXVsOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJu
ICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTMzNjcsMTEgKzM0NjgsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6dW5hcnlBcml0aAogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGNhc2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0zNDcyLDIyICszNTczLDE2IEBAIHZvaWQgQ29kZUJsb2Nr
OjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmkKIH0KIAogI2lmIEVOQUJMRShKSVQpCi12b2lkIENv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3Jp
Z2luTWFwPiYmIG1hcCkgCi17IAotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
KTsKLSAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1v
dmUobWFwKTsKLX0KLQogc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQ
Qyh2b2lkKiBwYykKIHsKKyAgICBpZiAoYXV0byogcGNUb0NvZGVPcmlnaW5NYXAgPSBtX2ppdENv
ZGUtPnBjVG9Db2RlT3JpZ2luTWFwKCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Q29k
ZU9yaWdpbj4gY29kZU9yaWdpbiA9IHBjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQorICAg
ICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CisgICAgfQorCiAgICAgewogICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIGlmIChhdXRvKiBqaXREYXRh
ID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBpZiAoaml0RGF0YS0+bV9wY1RvQ29k
ZU9yaWdpbk1hcCkgewotICAgICAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+IGNvZGVPcmlnaW4gPSBqaXREYXRhLT5tX3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKLSAgICAgICAgICAgIH0K
LQogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRh
LT5tX3N0dWJJbmZvcykgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29udGFpbnNQ
QyhwYykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+KHN0dWJJbmZvLT5jb2RlT3JpZ2luKTsKQEAgLTM1MjEsMjggKzM2MTYsMTQgQEAgc3RkOjpv
cHRpb25hbDxCeXRlY29kZUluZGV4PiBDb2RlQmxvY2s6OgogICAgIHJldHVybiBieXRlY29kZUlu
ZGV4OwogfQogCi1pbnQzMl90IENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhy
ZXNob2xkKQotewotICAgIHN3aXRjaCAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUo
KSkgewotICAgIGNhc2UgVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU6Ci0gICAgICAgIHJldHVybiB0
aHJlc2hvbGQ7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6RmFsc2U6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgKiA0OwotICAgIGNhc2UgVHJpU3RhdGU6OlRydWU6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgLyAyOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
dGhyZXNob2xkOwotfQotCi12b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBD
b2RlQmxvY2s6OmppdFNvb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdU
aHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2Fy
bVVwKCkpLCB0aGlzKTsKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9s
ZCh1bmxpbmtlZENvZGVCbG9jaygpLT50aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3Zv
aWQgQ29kZUJsb2NrOjpqaXROZXh0SW52b2NhdGlvbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdU
aHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAKIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRy
YXBCcmVha3BvaW50cygpIGNvbnN0CkBAIC0zNTg4LDI4ICszNjY5LDggQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBNYXRoSUNTdGF0cygpCiAgICAgZG91YmxlIG51bVN1YnMgPSAwLjA7CiAgICAgZG91
YmxlIHRvdGFsU3ViU2l6ZSA9IDAuMDsKIAotICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVC
bG9jayogY29kZUJsb2NrKSB7Ci0gICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gY29kZUJsb2Nr
LT5tX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgICAgIGZvciAoSklUQWRkSUMqIGFkZElDIDog
aml0RGF0YS0+bV9hZGRJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1BZGRzKys7Ci0gICAgICAg
ICAgICAgICAgdG90YWxBZGRTaXplICs9IGFkZElDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKEpJVE11bElDKiBtdWxJQyA6IGppdERhdGEtPm1fbXVsSUNz
KSB7Ci0gICAgICAgICAgICAgICAgbnVtTXVscysrOwotICAgICAgICAgICAgICAgIHRvdGFsTXVs
U2l6ZSArPSBtdWxJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Zm9yIChKSVROZWdJQyogbmVnSUMgOiBqaXREYXRhLT5tX25lZ0lDcykgewotICAgICAgICAgICAg
ICAgIG51bU5lZ3MrKzsKLSAgICAgICAgICAgICAgICB0b3RhbE5lZ1NpemUgKz0gbmVnSUMtPmNv
ZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUU3ViSUMqIHN1
YklDIDogaml0RGF0YS0+bV9zdWJJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1TdWJzKys7Ci0g
ICAgICAgICAgICAgICAgdG90YWxTdWJTaXplICs9IHN1YklDLT5jb2RlU2l6ZSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgYXV0byBjb3VudElDcyA9IFsmXSAoQ29kZUJsb2NrKikg
eworICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byByZS1pbXBsZW1lbnQgdGhpcyB1c2luZyBK
SVRDb2RlLgogICAgIH07CiAgICAgaGVhcCgpLT5mb3JFYWNoQ29kZUJsb2NrKGNvdW50SUNzKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw5IEBAIGNsYXNzIEpTTW9kdWxlRW52aXJv
bm1lbnQ7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ7CiBjbGFzcyBNZXRhZGF0YVRhYmxlOwot
Y2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKIGNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogCiBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihDb2RlQmxvY2tSYXJlRGF0YSk7CiAKQEAg
LTE1OCw3ICsxNTgsOSBAQCBwdWJsaWM6CiAgICAgTWV0YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIG51
bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6
CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKHVuc2lnbmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoK
IAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkgY29uc3QgeyByZXR1cm4g
bV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgfQogCkBAIC0xNjcsNyArMTY5LDYgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KICAg
ICB1bnNpZ25lZCBudW1UbXBzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0No
ZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50VG1wczsgfQogCi0gICAgdW5zaWduZWQqIGFk
ZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CiAKICAgICBDb2RlQmxvY2sq
IGFsdGVybmF0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9h
bHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAgLTIzMiwxNiArMjMzLDYgQEAgcHVibGljOgogICAgIGJv
b2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3Rh
bGxWTVRyYXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmly
dHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRp
bmcgYmFjayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlz
IGB0aGlzYCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0Nv
bnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsK
LQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29s
IGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAg
IHJldHVybiByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAt
MjY4LDIzICsyNTksMjEgQEAgcHVibGljOgogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RydWN0IEpJ
VERhdGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICAgICAgQmFnPFN0cnVj
dHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAgICAgICAgQmFnPEpJVEFkZElDPiBtX2FkZElD
czsKLSAgICAgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKLSAgICAgICAgQmFnPEpJVE5lZ0lD
PiBtX25lZ0lDczsKLSAgICAgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKICAgICAgICAgQmFn
PENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgICAgICBTZW50aW5lbExpbmtlZExp
c3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9p
bmNvbWluZ0NhbGxzOwogICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBoaWNDYWxs
Tm9kZSwgUGFja2VkUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29t
aW5nUG9seW1vcnBoaWNDYWxsczsKLSAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxl
PiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJs
ZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENU
b0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXND
YWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1h
cDsKKworICAgICAgICBGaXhlZFZlY3Rvcjx2b2lkKj4gbV9qaXRDb25zdGFudFBvb2w7CisgICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwgbV9qaXRDb25zdGFudFBvb2wpOyB9CiAgICAgfTsKIAor
ICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29k
ZT4pOworCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkKQEAgLTI5
MywyMiArMjgyLDcgQEAgcHVibGljOgogICAgIH0KICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRh
U2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAotICAgIEpJVEFkZElDKiBhZGRKSVRB
ZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLSAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQ
cm9maWxlKik7Ci0gICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSop
OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+
Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2Zp
bGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlw
ZT4KLSAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkg
eyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
YW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVE5l
Z0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJ
VE5lZ0lDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3Is
IEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRTdWJJQyogYWRkTWF0aElD
KEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmls
ZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURGF0YSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RGF0YSk7IH0KIAogICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlLCBDb2RlT3JpZ2luKTsKIApAQCAtMzIyLDE4
ICsyOTYsOCBAQCBwdWJsaWM6CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAg
dG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgogICAgIENhbGxMaW5rSW5mbyog
Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICAKLSAg
ICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29kZU1hcCYmIGppdENvZGVNYXApCi0gICAgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOwotICAgIH0K
LSAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCkKLSAgICB7Ci0gICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX2ppdENvZGVNYXA7Ci0gICAgfQorICAgIGNvbnN0IEpJVENvZGVNYXAmIGpp
dENvZGVNYXAoKTsKIAotICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVf
cHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+
IGZpbmRQQyh2b2lkKiBwYyk7CiAKICAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVn
aXN0ZXJTZXQpOwpAQCAtNDcyLDEwICs0MzYsMTIgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5h
bWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFy
YW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICAgICAgcmV0dXJuIG1fYXJndW1l
bnRWYWx1ZVByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgCiAgICAgfQogCiAgICAgVmFsdWVQcm9m
aWxlJiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudEluZGV4KQpAQCAt
NTY5LDggKzUzNSwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
czsgfQogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVh
bFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9D
b25zdGFudEluZGV4KCldLmdldCgpOyB9CisgICAgYm9vbCBpc0NvbnN0YW50T3duZWRCeVVubGlu
a2VkQ29kZUJsb2NrKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0OwogICAgIEFMV0FZU19JTkxJ
TkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5j
b25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihyZWcpOyB9CiAgICAgQUxXQVlTX0lOTElO
RSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFu
dFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihpbmRleCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KENvZGVCbG9jaywgbV9jb25zdGFudFJlZ2lzdGVycykgKyBkZWNsdHlwZShtX2NvbnN0YW50UmVn
aXN0ZXJzKTo6ZGF0YU1lbW9yeU9mZnNldCgpOyB9CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0u
Z2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5j
dGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNTk1LDIyICs1NjMsMjIgQEAgcHVibGljOgogICAgIC8v
IEp1bXAgVGFibGVzCiAKICNpZiBFTkFCTEUoSklUKQotICAgIFNpbXBsZUp1bXBUYWJsZSYgc3dp
dGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorICAgIFNpbXBsZUp1bXBUYWJsZSYgYmFzZWxp
bmVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYg
YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIHZvaWQq
IGJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1faml0RGF0YSk7Ci0gICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhICYmIGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBtX2ppdERhdGEt
Pm1faml0Q29uc3RhbnRQb29sLmRhdGEoKTsKICAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVt
YmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOyB9CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIFN0cmluZ0p1bXBUYWJsZSYgc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQotICAgIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwotICAgIH0KKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBTdHJpbmdKdW1wVGFibGUmIGRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBkZmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxl
SW5kZXgpOwogI2VuZGlmCisKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZVbmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkg
eyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOyB9CiAKQEAgLTYzMiwyMSArNjAwLDIwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxp
bnRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKKyAg
ICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y2hlY2tJZlRocmVzaG9sZENyb3Nz
ZWRBbmRTZXQodGhpcyk7CiAgICAgfQogCiAgICAgdm9pZCBkb250SklUQW55dGltZVNvb24oKQog
ICAgIHsKLSAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7
CisgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+ZGVmZXJJbmRlZmluaXRlbHkoKTsKICAg
ICB9CiAKLSAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7Ci0g
ICAgdm9pZCBqaXRBZnRlcldhcm1VcCgpOwogICAgIHZvaWQgaml0U29vbigpOworICAgIHZvaWQg
aml0TmV4dEludm9jYXRpb24oKTsKIAogICAgIGNvbnN0IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRl
ciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9s
bGludEV4ZWN1dGVDb3VudGVyOworICAgICAgICByZXR1cm4gKm1fbGxpbnRFeGVjdXRlQ291bnRl
cjsKICAgICB9CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8c3RkOjp0dXBsZTxTdHJ1Y3R1cmVJRCwg
dW5zaWduZWQ+LCBGaXhlZFZlY3RvcjxMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQ+PiBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwOwpAQCAtNzk3LDYgKzc2NCw3IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJu
IG1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNz
KCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVC
bG9jaywgbV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVha3BvaW50KHVu
c2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQodW5zaWdu
ZWQgbnVtQnJlYWtwb2ludHMpCkBAIC04MzgsNiArODA2LDcgQEAgcHVibGljOgogICAgIG11dGFi
bGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMgdG8gc3RvcmUg
dG8gaXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5l
ZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2NhcGFiaWxpdHlM
ZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNywxNiArODc2LDEy
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0YWRhdGFUYWJsZSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpOyB9
CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkK
LSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBj
b21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0gICAgICAgIHJldHVybiAhbV91bmxpbmtlZENv
ZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAgfQorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxp
Z2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bG9v
cEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKTsgfQogCiBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CiAjaWYgRU5BQkxFKEpJVCkK
LSAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKKyAgICB2b2lkIGZp
bmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKQEAgLTEwMTAsNyArOTc1LDkgQEAgcHJp
dmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2lu
dE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitw
dWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6
CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRv
IG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9j
awpAQCAtMTAyOSw3ICs5OTYsNyBAQCBwcml2YXRlOgogCiAgICAgV3JpdGVCYXJyaWVyPENvZGVC
bG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIg
bV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciogbV9s
bGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9OwogCiAgICAgQmFzZWxpbmVFeGVjdXRpb25D
b3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAgICAgdWludDMyX3QgbV9vc3JFeGl0Q291bnRl
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
a0lubGluZXMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTAg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNs
dWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRl
ICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkgKzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZv
ckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJ
U0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8m
IG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9wcm9maWxlLCBmYWxzZSk7IH0pOwotCiAgICAg
ICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJTEUoVklTSVQpCi0KICN1bmRlZiBW
SVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck9wZW4+KFsmXSAo
YXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1Nyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JF
YWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVBy
b2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwzOCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFj
aExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZU19J
TkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJsb2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAgICBB
U1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFw
OworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGlu
ZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxp
bmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNl
bGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQo
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK0FM
V0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmRmZ1N3aXRjaEp1bXBUYWJs
ZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkRG
R0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6SklUQ29kZSo+KG1faml0Q29kZS5n
ZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKworQUxXQVlTX0lOTElO
RSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGlu
dCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklU
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgp
KS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9j
ayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRB
Y3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAgYm9vbCBFeGVjdXRpb25Db3VudGVy
PGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB0
aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQpOworICAgIHRocmVzaG9sZCA9IGNsaXBwZWRU
aHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAgICBtX2NvdW50ZXIgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9yY2VTbG93
UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRoaXMsIGNoZWNrSWZUaHJlc2hvbGRD
cm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxzZS4KICAgICBib29sIGNoZWNrSWZU
aHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwogICAgIGJvb2wgaGFzQ3Jvc3NlZFRo
cmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlciA+PSAwOyB9Ci0gICAgdm9pZCBzZXRO
ZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayopOworICAgIHZvaWQgc2V0
TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2RlQmxvY2sqID0gbnVsbHB0cik7CiAg
ICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwogICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENvdW50KSArIG1fY291bnRlcjsgfQog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpAQCAtODYsMTMgKzg2LDkgQEAgcHVi
bGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBU
IGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVCB0aHJlc2hv
bGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChUIHRocmVzaG9sZCkKICAgICB7Ci0g
ICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwotICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9t
aXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCkgJiYgZ2xvYmFsT2JqZWN0KQot
ICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2JqZWN0LT53ZWFrUmFuZG9tSW50ZWdl
cigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRz
QmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkID0gbWF4
aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwogICAgICAgICBpZiAodGhy
ZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAgICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNo
b2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhVW5z
ZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0KSA9PSAx
Mik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggeworICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBhcnJheVByb2ZpbGUpOyB9CiAgICAg
QXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRC
eUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsKQEAgLTg4LDYgKzg5LDcgQEAgdW5p
b24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRNb2RlIG1vZGU7CiAgICAg
ICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7IC8vIFRoaXMgbXVzdCBiZSB6ZXJv
IHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRh
ZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhRGVmYXVsdCBkZWZhdWx0TW9k
ZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5zZXRNb2RlOwogICAgIEdldEJ5SWRN
b2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1vZGU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6
Y29tcHV0ZUZvclN0dWJJCiAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhOb0luZm9ybWF0aW9u
KTsKICAgICAgICAgCiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOiB7Ci0gICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZShwcm9maWxlZEJsb2NrLT52bSgpKTsKICAgICAgICAgaWYg
KHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKICAgICAg
ICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1
YkluZm8pOwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5m
by0+aWRlbnRpZmllcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5
LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgogICAgICAgICBy
ZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJ
bkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPm1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSk7CiAgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAg
ICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3Bw
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5s
aW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsMTYgQEAgQUxXQVlT
X0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1Yklu
Zm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBp
ZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNs
b3RzIGdldCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAKICAgICBHUFJSZWcgYmFz
ZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0yMzMsMjMgKzIzOCwzMSBAQCBBTFdBWVNfSU5MSU5F
IHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3RlCiAgICAgcmV0dXJuIGdldFNjcmF0Y2hSZWdpc3Rl
cihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJlZzsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmNh
bkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1
cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCitib29sIElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZp
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQ
cm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkpOworICAgIEFTU0VSVChjYW5HZW5lcmF0
ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2Zmc2V0KSk7CisKKyAg
ICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBzbG90cyBn
ZXQgZmlsbGVkIGluLiBOb3RoaW5nIGVsc2UgdG8gZG8uCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KIAogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKQEAgLTI3OSwyMiArMjkyLDI1IEBAIGJv
b2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVIKICAgICByZXR1cm4gbGlua2Vk
Q29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5n
dGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKK2Jvb2wgSW5s
aW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQogewogICAgIEFTU0VS
VChhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKIAogICAgIGlmICghc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAo
Y29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKwogICAgIGlmICghaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFoYXNBbnlBcnJheVN0b3JhZ2UoYXJyYXkt
PmluZGV4aW5nVHlwZSgpKSAmJiBhcnJheS0+aW5kZXhpbmdUeXBlKCkgIT0gQXJyYXlDbGFzczsK
IH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQogewotICAgIEFTU0VSVChpc0NhY2hlYWJsZUFycmF5
TGVuZ3RoKHN0dWJJbmZvLCBhcnJheSkpOworICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBp
c0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGFycmF5KSk7CiAKICAg
ICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMzE5LDE3ICszMzUsMjAgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJy
YXlMZW5ndGgoUwogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCi1ib29sIElubGlu
ZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgaWYgKCFz
dHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAor
ICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIGhhc0ZyZWVSZWdpc3RlcihzdHViSW5m
byk7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdM
ZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
IHsKLSAgICBBU1NFUlQoaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pKTsKKyAgICBB
U1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoY29kZUJsb2Nr
LCBzdHViSW5mbykpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM2MywxMyArMzgyLDE4IEBAIGJvb2wgSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aCgKIH0KIAogCi1ib29sIElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
IGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIFRoZXNlIHNsb3RzIGdl
dCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5mby5iYXNlR1BSOwogICAgIEpTVmFsdWVS
ZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAKQEAgLTQwNiw3ICs0MzAsNyBAQCB2
b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgaWYgKGNvZGVCbG9j
ay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgLy8gSWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10
aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQgKGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAv
LyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGlyZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdl
IHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2RlUHRyLgotICAgICAgICBpZiAoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUo
KSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZp
ZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29kZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5m
by5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMgbWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29k
ZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAgICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRo
IHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNvZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5n
IGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1f
Y29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2Nh
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CkBAIC00MjEsNyArNDQ1LDkgQEAgdm9pZCBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgICAgICAgICAgICAgIH0pLCAiSW5s
aW5lQWNjZXNzOiBsaW5raW5nIHN0dWIgY2FsbCIpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CisKICAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gdGFyZ2V0OworICAgICAgICBzdHViSW5m
by5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOyAvLyBDbGVhciBvdXQgdGhlIGlubGlu
ZSBhY2Nlc3MgY29kZS4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDM0LDggKzQ2MCwx
NCBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgfSksICJJ
bmxpbmVBY2Nlc3M6IGxpbmtpbmcgY29uc3RhbnQganVtcCIpOwogfQogCi12b2lkIElubGluZUFj
Y2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQordm9pZCBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNz
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Cisg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkgJiYgY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gc3R1
YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgICAgICBzdHViSW5mby5tX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOyAvLyBDbGVhciBvdXQgdGhlIGlubGluZSBhY2Nlc3MgY29k
ZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIENDYWxsSGVscGVyczo6ZW1pdEpJVENv
ZGVPdmVyKHN0dWJJbmZvLnN0YXJ0LnJldGFnZ2VkPEpTSW50ZXJuYWxQdHJUYWc+KCksIHNjb3Bl
ZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPihbJl0oQ0NhbGxIZWxwZXJzJiBqaXQpIHsKICAg
ICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhIG5vcCBzbGVkIGhlcmUgYmVjYXVzZSBub2JvZHkgc2hv
dWxkIGJlIGp1bXBpbmcgaW50byB0aGUgbWlkZGxlIG9mIGFuIElDLgogICAgICAgICBhdXRvIGp1
bXAgPSBqaXQuanVtcCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
bGluZUFjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxNCArOTks
MTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RkOjptYXgoc2l6ZSwgc2l6ZUZvclByb3Bl
cnR5QWNjZXNzKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3Bl
cnR5QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQp
OwotICAgIHN0YXRpYyBib29sIGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1
cmVTdHViSW5mbyYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0
eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVBcnJheUxlbmd0aChTdHJ1Y3R1
cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZVN0cmlu
Z0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlQXJy
YXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7Ci0gICAgc3RhdGljIGJvb2wg
Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqKTsKLSAg
ICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYpOwor
ICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRp
YyBib29sIGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1
cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVBcnJheUxl
bmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0
aWMgYm9vbCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiwg
U3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVT
ZWxmSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqKTsK
KyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwogCiAgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4pOwogICAgIHN0YXRpYyB2b2lkIHJl
d2lyZVN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRl
cmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgT1ZF
UkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBUwogCiBzdHJ1Y3QgSXRlcmF0aW9u
TW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90IHNlZW5Nb2RlcyB7IDAgfTsKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEl0
ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1vZGVzKTsgfSAKICAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9PSBzaXplb2YoSXRlcmF0aW9uTW9kZSkpOwogfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2Fs
bExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBBcnJheVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9hcnJheVByb2ZpbGUpOyB9CiAKIHByaXZh
dGU6CiAgICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsg
dW5saW5rZWRCaXQgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRh
ZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L01ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUs
MTQgQEAgcHVibGljOgogICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEpOwogICAgIH0KIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAgIEFMV0FZU19JTkxJTkUgc2l6ZV90IG51bUVudHJp
ZXMoKQorICAgIHsKKyAgICAgICAgYXV0byogc3RhcnQgPSBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUg
T3A6Ok1ldGFkYXRhKj4oZ2V0KE9wOjpvcGNvZGVJRCkpOworICAgICAgICBhdXRvKiBlbmQgPSBi
aXR3aXNlX2Nhc3Q8dHlwZW5hbWUgT3A6Ok1ldGFkYXRhKj4oZ2V0SW1wbChPcDo6b3Bjb2RlSUQg
KyAxKSk7CisgICAgICAgIHJldHVybiBlbmQgLSBzdGFydDsKKyAgICB9CisKICAgICBzaXplX3Qg
c2l6ZUluQnl0ZXMoKTsKIAogICAgIHZvaWQgcmVmKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgwLDEwICsxODAsMTAgQEAgUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1
dGVGb3JTdHViSQogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHVi
SW5mby0+aWRlbnRpZmllcigpOwogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRl
bnRpZmllci51aWQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodWlkKTsKLSAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHByb2ZpbGVk
QmxvY2stPnZtKCkpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQp
KQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50
aWZpZXIpLCBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZz
ZXQpOworICAgICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlk
ZW50aWZpZXIpLCBzdHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwogICAgIH0KICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiAjaW5jbHVkZSAiQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVwYXRj
aC5oIgogCkBAIC02NSw5ICs2Niw5IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRC
eUlkU2VsZigKICAgICBBU1NFUlQoaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKICAgICBzZXRDYWNo
ZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIg
PSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAg
Y29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlk
U2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAK
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRBcnJheUxlbmd0aChjb25zdCBDb25jdXJyZW50
SlNMb2NrZXJCYXNlJiBsb2NrZXIpCkBAIC04Nyw5ICs4OCw5IEBAIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OmluaXRQdXRCeUlkUmVwbGEKICAgICBBU1NFUlQobV9jYWNoZVR5cGUgPT0gQ2FjaGVU
eXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpQdXRCeUlk
UmVwbGFjZSk7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndyaXRlQmFy
cmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5
SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0
SW5CeUlkU2VsZihjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKQpAQCAtOTcs
OSArOTgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0SW5CeUlkU2VsZihjCiAgICAg
QVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENhY2hlVHlw
ZShsb2NrZXIsIENhY2hlVHlwZTo6SW5CeUlkU2VsZik7CiAgICAgbV9pZGVudGlmaWVyID0gaWRl
bnRpZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRl
QmFycmllcihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVC
bG9jay0+dm0oKS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYu
b2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCkBAIC0yMzYsNyArMjM3LDcgQEAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbwogICAgICAgICAvLyB3ZSdyZSBidWZmZXJl
ZCBpcyBiZWNhdXNlIHdlIHJlbHkgb24gaXQgdG8gcmVzZXQgZHVyaW5nIEdDIGlmIG1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZQogICAgICAgICAvLyBpcyBjb2xsZWN0ZWQuCiAgICAgICAgIG1f
aWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS5jbGVhcigpOworICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOwogICAg
ICAgICAKICAgICAgICAgLy8gSWYgd2UgZ2VuZXJhdGVkIHNvbWUgY29kZSB0aGVuIHdlIGRvbid0
IHdhbnQgdG8gYXR0ZW1wdCB0byByZXBhdGNoIGluIHRoZSBmdXR1cmUgdW50aWwgd2UKICAgICAg
ICAgLy8gZ2F0aGVyIGVub3VnaCBjYXNlcy4KQEAgLTI1MSw3ICsyNTIsNyBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiB7CiAgICAgY2xlYXJCdWZmZXJlZFN0cnVj
dHVyZXMoKTsKICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwotICAgIG1faW5saW5lQWNjZXNz
QmFzZVN0cnVjdHVyZS5jbGVhcigpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9
IDA7CiAKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCkKICAgICAgICAg
cmV0dXJuOwpAQCAtMjg1LDYgKzI4Niw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0
KGNvbnN0IENvbmMKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtp
bmQ6OkJ5SWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CiAgICAgICAgIHJlc2V0UHV0
QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZhbCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgpAQCAtMzYwLDggKzM2Miw4IEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICB9CiAKICAgICBib29sIGlzVmFs
aWQgPSB0cnVlOwotICAgIGlmIChtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCi0gICAgICAg
IGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUu
Z2V0KCkpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUodm0pKQorICAgICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNNYXJrZWQoc3RydWN0
dXJlKTsKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICBp
c1ZhbGlkICY9IHUuc3R1Yi0+dmlzaXRXZWFrKHZtKTsKIApAQCAtMzc1LDggKzM3Nyw4IEBAIHZv
aWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmIChtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUp
Ci0gICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRv
cik7CisgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSh2aXNpdG9yLnZtKCkpKQorICAgICAgICBzdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0
b3IpOwogCiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikKICAgICAgICAg
dS5zdHViLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKQEAgLTQzMCw2ICs0MzIsMjA0
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6c2UKICAgICBtX2NhY2hl
VHlwZSA9IG5ld0NhY2hlVHlwZTsKIH0KIAordm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlh
bGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8pCit7CisgICAgYWNjZXNzVHlwZSA9IHVu
bGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZTsKKyAgICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8u
c3RhcnQ7CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5kb25lTG9jYXRpb247
CisgICAgc2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5zbG93UGF0aFN0
YXJ0TG9jYXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKTsKKyAgICBjb2Rl
T3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAg
IG1fY29kZVB0ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKworICAgIHVzZWRSZWdpc3RlcnMg
PSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgaWYgKGFjY2Vz
c1R5cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZvciBpdGVyYXRvcl9uZXh0LCB3ZSBj
YW4ndCBjbG9iYmVyIHRoZSAiZG9udENsb2JiZXJSZWdpc3RlciIgcmVnaXN0ZXIgZWl0aGVyLgor
ICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRD
bG9iYmVyUmVnaXN0ZXIpOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAg
IGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNl
T2Y6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5
R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJl
Y3Q6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRo
aXM6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVO
YW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
QnJhbmQ6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJh
bmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2
YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJ
ZDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5m
by5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6
CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQor
ICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRE
ZWZpbmU6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVm
aW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1Yklu
Zm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAg
ICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1Yklu
Zm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gdW5saW5rZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRL
aW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGlt
aXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpE
ZWxldGVCeUlEOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdz
LnByb3BlcnR5R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2Vs
aW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFt
ZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3Bl
cnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZh
bHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3Qg
PSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
dmFsdWU7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgICAgIHJlZ3MucHJvdG90eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjpwcm90bzsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRl
bnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
SW5CeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBy
ZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpUcnlHZXRCeUlkOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJh
c2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9H
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CisgICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBpZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQ
dXRCeVZhbCkKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpTZXRQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFu
ZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVl
R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKICNpZiBBU1NFUlRfRU5BQkxFRAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y2hlY2tD
b25zaXN0ZW5jeSgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlB1dEtp
bmQuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgpAQCAtNTYsNiArNTcsNyBAQCBlbnVtIGNsYXNzIEFj
Y2Vzc1R5cGUgOiBpbnQ4X3QgewogICAgIEdldEJ5VmFsLAogICAgIFB1dEJ5SWQsCiAgICAgUHV0
QnlWYWwsCisgICAgUHV0UHJpdmF0ZU5hbWUsCiAgICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAg
ICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC03OCw2ICs4MCw4IEBAIGVudW0gY2xhc3MgQ2FjaGVUeXBl
IDogaW50OF90IHsKICAgICBTdHJpbmdMZW5ndGgKIH07CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvOworCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1YkluZm8pOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpAQCAtOTgsNiArMTAyLDggQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2
b2lkIGFib3V0VG9EaWUoKTsKIAorICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mKTsKKwog
ICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIg
aGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJl
c2V0cyBpdHNlbGYsCkBAIC0zMjUsMTMgKzMzMSwxOSBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAg
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOworICAgIFByb3BlcnR5T2Zmc2V0IGJ5SWRTZWxmT2Zm
c2V0OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgYnlJZFNlbGZPZmZzZXQpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSk7IH0KICAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgICAgIH0gYnlJZFNlbGY7CiAgICAg
ICAgIFBvbHltb3JwaGljQWNjZXNzKiBzdHViOwogICAgIH0gdTsKLSAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlKiBp
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIGlmICghbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiB2bS5nZXRTdHJ1Y3R1cmUobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
KTsKKyAgICB9CisgICAgU3RydWN0dXJlSUQgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlIHsg
MCB9OwogcHJpdmF0ZToKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAg
ICAvLyBSZXByZXNlbnRzIHRob3NlIHN0cnVjdHVyZXMgdGhhdCBhbHJlYWR5IGhhdmUgYnVmZmVy
ZWQgQWNjZXNzQ2FzZXMgaW4gdGhlIFBvbHltb3JwaGljQWNjZXNzLgpAQCAtNDQ3LDYgKzQ1OSwx
NyBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQog
CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHBy
aXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkgfTsKKyAgICBF
Q01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpzbG9wcHkoKSB9OworICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElD
IGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3Ig
J2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVj
dHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVy
U2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N1cGVyU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4
NCw3IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJTdGF0ZSgpCiAgICAgZG91YmxlIHBlcmNlbnRh
Z2UgPSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsKICAgICBpZiAocGVyY2VudGFnZSAhPSBwZXJj
ZW50YWdlKQogICAgICAgICBwZXJjZW50YWdlID0gMC4wOwotICAgIGRhdGFMb2coIlBlcmNlbnQg
dGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiXG4iKTsKKyAg
ICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVy
Y2VudGFnZSwgIiVcbiIpOwogfQogCiB2b2lkIGVuYWJsZVN1cGVyU2FtcGxlcigpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
IAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJ
VENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKICNpbmNsdWRl
ICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKQEAgLTc4LDYgKzc5
LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgICAgICBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tlcik7CiAgICAgICAgIG1fcmFyZURhdGEtPm1f
cHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJpdmF0ZUJy
YW5kUmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAgfQorCisgICAgbV9sbGludEV4ZWN1dGVDb3Vu
dGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9y
SklUQWZ0ZXJXYXJtVXAoKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpAQCAt
MzE2LDYgKzMxOSw0OCBAQCBpbnQgVW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZz
CiAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsK
IH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECitib29sIFVubGlua2VkQ29kZUJsb2NrOjpoYXNJZGVu
dGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgaWYgKG51bWJlck9mSWRlbnRp
ZmllcnMoKSA+IDEwMCkgeworICAgICAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpICE9IG1f
Y2FjaGVkSWRlbnRpZmllclVpZHMuc2l6ZSgpKSB7CisgICAgICAgICAgICBMb2NrZXIgbG9ja2Vy
KG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrKTsKKyAgICAgICAgICAgIEhhc2hTZXQ8VW5pcXVl
ZFN0cmluZ0ltcGwqPiBjYWNoZWRJZGVudGlmaWVyVWlkczsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyKGkpOworICAg
ICAgICAgICAgICAgIGNhY2hlZElkZW50aWZpZXJVaWRzLmFkZChpZGVudGlmaWVyLmltcGwoKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisg
ICAgICAgICAgICBtX2NhY2hlZElkZW50aWZpZXJVaWRzID0gV1RGTW92ZShjYWNoZWRJZGVudGlm
aWVyVWlkcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9jYWNoZWRJZGVudGlmaWVy
VWlkcy5jb250YWlucyh1aWQpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRpZmllcihp
KS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitpbnQzMl90IFVubGlua2VkQ29kZUJsb2NrOjp0aHJl
c2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRPcHRpbWl6
ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJu
IHRocmVzaG9sZDsKKyAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRo
cmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRo
cmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biB0aHJlc2hvbGQ7Cit9CisKKwogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFy
ZWRQcm9maWxlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWV0YWRhdGEtPmlzRmluYWxp
emVkKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwx
MCArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIK
ICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25z
LmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgor
I2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJ
bmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgi
CkBAIC02NCw2ICs2Niw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwog
Y2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGluZUpJVENvZGU7
CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29uc3RhbnQgOiBp
bnQzMl90OwogCkBAIC0xNzUsNiArMTc4LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4ZWRW
ZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJl
dHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29u
c3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdl
dCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYg
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIxMSwxNSBAQCBwdWJsaWM6
CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVy
biBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBj
b25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigp
OworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0
aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5z
dHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25z
QmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25zdCB7IHJl
dHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51bUNhbGxlZUxv
Y2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5zaWduZWQg
bnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDEwICszNDcsMjEg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tZXRhZGF0YS0+c2l6ZUluQnl0ZXMoKTsKICAg
ICB9CiAKKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJu
KCkKKyAgICB7CisgICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5
cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCisgICAgICAgIHJldHVybiAhaXNCdWlsdGlu
RnVuY3Rpb24oKTsKKyAgICB9CiAgICAgdm9pZCBhbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKCk7CiAg
ICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUmIHVubGlua2VkVmFsdWVQcm9maWxlKHVuc2lnbmVkIGlu
ZGV4KSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9CiAgICAgVW5saW5rZWRBcnJh
eVByb2ZpbGUmIHVubGlua2VkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBt
X2FycmF5UHJvZmlsZXNbaW5kZXhdOyB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGJvb2wg
aGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOworI2VuZGlmCisKKyAgICBpbnQzMl90
IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7CisKIHByb3RlY3RlZDoKICAgICBV
bmxpbmtlZENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRh
YmxlSW5mbyYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+KTsKIApAQCAtMzk3LDYgKzQy
MSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJlcyA6IDQ7
CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRyPEJhc2Vs
aW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAgQ29kZUZl
YXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2Rl
OwpAQCAtNDEzLDYgKzQzOCw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3Ry
dWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogZmluZCBhIGJl
dHRlciBwbGFjZSB0byBzdG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlBcml0aFBy
b2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0aFByb2Zp
bGU+IG1fdW5hcnlBcml0aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZH
OjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtNDU4LDYgKzQ4NiwzMCBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5v
ZmZzZXQoKSk7CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3Ry
dWN0aW9uKiBwYykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhp
cy0+Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNl
dChieXRlY29kZU9mZnNldCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJpdGhQ
cm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5QXJpdGhQ
cm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBlbmQoQmlu
YXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV91bmFyeUFy
aXRoUHJvZmlsZXMuYXBwZW5kKFVuYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9m
aWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAg
IFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVy
biBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3Vu
dGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVy
OyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFw
PEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjUsOSArNTE3LDE1IEBAIHBy
aXZhdGU6CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4ZWRWZWN0
b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNlbGluZUV4
ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIEZpeGVkVmVjdG9yPFVu
bGlua2VkVmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CiAgICAgRml4ZWRWZWN0b3I8VW5s
aW5rZWRBcnJheVByb2ZpbGU+IG1fYXJyYXlQcm9maWxlczsKIAorI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgTG9jayBtX2NhY2hlZElkZW50aWZpZXJVaWRzTG9jazsKKyAgICBIYXNoU2V0PFVuaXF1
ZWRTdHJpbmdJbXBsKj4gbV9jYWNoZWRJZGVudGlmaWVyVWlkczsKKyNlbmRpZgorCiBwcm90ZWN0
ZWQ6CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgc2l6ZV90IGVzdGlt
YXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBAQCBwdWJs
aWM6CiAgICAgYm9vbCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKTsgfQog
ICAgIGJvb2wgaGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aGFz
Q2hlY2twb2ludHMoKTsgfQogICAgIGJvb2wgaGFzVGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlQmxvY2stPmhhc1RhaWxDYWxscygpOyB9CisgICAgdW5zaWduZWQgYWRkQmluYXJ5QXJp
dGhQcm9maWxlKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJvZmlsZSgp
OyB9CisgICAgdW5zaWduZWQgYWRkVW5hcnlBcml0aFByb2ZpbGUoKSB7IHJldHVybiBtX2NvZGVC
bG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKTsgfQogCiAgICAgLy8gVXBkYXRpbmcgVW5saW5r
ZWRDb2RlQmxvY2suCiAgICAgdm9pZCBzZXRIYXNDaGVja3BvaW50cygpIHsgbV9jb2RlQmxvY2st
PnNldEhhc0NoZWNrcG9pbnRzKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTUgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUpOwogICAgIH0KIAorICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNldEluTWV0YWRh
dGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2lz
RmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9pczMyQml0
ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUxNigpW09w
Y29kZTo6b3Bjb2RlSURdOworICAgICAgICBiYXNlVHlwZU9mZnNldCA9IHJvdW5kVXBUb011bHRp
cGxlT2YoYWxpZ25vZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSwgYmFzZVR5cGVPZmZzZXQp
OworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YodHlwZW5hbWUgT3Bjb2Rl
OjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBCeXRlY29kZT4KICAgICB1bnNpZ25lZCBudW1FbnRyaWVzKCk7CiAKQEAgLTEw
Nyw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc19vZmZzZXQxNlRhYmxlU2l6
ZTsKICAgICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAgICAgdXNpbmcg
T2Zmc2V0MTYgPSB1aW50MTZfdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwx
MyArNDUsMTEgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogCiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1bWVudDsK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzID0g
MTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9IG51bWJl
ck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3RhbE51bWJl
ck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzOwog
ICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCi0gICAgICAgICAgICBtX2J1
Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgY2xlYXJCdWNr
ZXRzKCk7CiAgICAgfQogICAgIAogICAgIEVuY29kZWRKU1ZhbHVlKiBzcGVjRmFpbEJ1Y2tldCh1
bnNpZ25lZCBpKQpAQCAtNTksNiArNTcsMTIgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ugewog
ICAgICAgICBBU1NFUlQobnVtYmVyT2ZCdWNrZXRzICsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRz
KTsKICAgICAgICAgcmV0dXJuIG1fYnVja2V0cyArIG51bWJlck9mQnVja2V0cyArIGk7CiAgICAg
fQorCisgICAgdm9pZCBjbGVhckJ1Y2tldHMoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCisgICAgICAgICAgICBtX2J1
Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICB9CiAgICAgCiAgICAg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8odW5zaWduZWQgYnVja2V0KSBjb25zdAogICAgIHsK
QEAgLTEyMyw4ICsxMjcsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJucyB0
aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8vIHRoYXQg
aXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVVcGRh
dGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKQEAg
LTEzOSw3ICsxNDEsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIAogICAg
ICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29kZWRKU1Zh
bHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxhdGVkVHlw
ZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTYxLDYgKzE2Myw3IEBAIHN0cnVjdCBW
YWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJvZmlsZSA6
IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAgICBWYWx1
ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7IH0K
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBzdHJ1Y3Qg
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
VW5hcnkKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRoaXMsIGRz
dCwgc3JjLCB0eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBzcmMsIHR5
cGUsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90Pihkc3Qs
IHNyYyk7CkBAIC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbmMo
UmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0RzdCk7Cisg
ICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFBy
b2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVjOjplbWl0
KHRoaXMsIHNyY0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9j
ay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODIs
NyArNjgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklEKj4KICAg
ICAgICAgZW1pdEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVn
aXN0ZXJJRCogc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAgICAgICAg
ICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1fY29kZUJs
b2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gZHN0Owog
ICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0
YS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuaCIKQEAgLTM0LDcgKzM1LDkgQEAKICNpbmNsdWRlICJERkdKdW1wUmVw
bGFjZW1lbnQuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIklubGluZUNh
bGxGcmFtZVNldC5oIgorI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpTQ2FzdC5o
IgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJDb21w
aWxhdGlvbi5oIgogI2luY2x1ZGUgIlJlY29yZGVkU3RhdHVzZXMuaCIKICNpbmNsdWRlIDx3dGYv
QmFnLmg+CkBAIC03MCw3ICs3Myw3IEBAIHN0cnVjdCBXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiB7
CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV90bzsKIH07CiAgICAgICAgIAotY2xhc3MgQ29t
bW9uRGF0YSB7CitjbGFzcyBDb21tb25EYXRhIDogcHVibGljIE1hdGhJQ0hvbGRlciB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CiBwdWJsaWM6CiAgICAgQ29tbW9uRGF0
YSgpCkBAIC0xMTYsNiArMTE5LDcgQEAgcHVibGljOgogICAgIEZpeGVkVmVjdG9yPENvZGVCbG9j
a0pldHRpc29uaW5nV2F0Y2hwb2ludD4gbV93YXRjaHBvaW50czsKICAgICBGaXhlZFZlY3RvcjxB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
czsKICAgICBGaXhlZFZlY3RvcjxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQ+IG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50czsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAg
UmVjb3JkZWRTdGF0dXNlcyByZWNvcmRlZFN0YXR1c2VzOwogICAgIFZlY3RvcjxKdW1wUmVwbGFj
ZW1lbnQ+IG1fanVtcFJlcGxhY2VtZW50czsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlK
SVRDb2RlLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBj
bGFzcyBUcmFja2VkUmVmZXJlbmNlczsKIAorc3RydWN0IFNpbXBsZUp1bXBUYWJsZTsKK3N0cnVj
dCBTdHJpbmdKdW1wVGFibGU7CisKIG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBKSVRDb21waWxl
cjsKQEAgLTEwMSw2ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxDb2RlT3Jp
Z2luPiBmaW5kUEMoQ29kZUJsb2NrKiwgdm9pZCogcGMpIGZpbmFsOwogCiAgICAgdXNpbmcgRGly
ZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkc7CisKKyAgICBQQ1RvQ29kZU9yaWdp
bk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBjb21tb24ubV9wY1Rv
Q29kZU9yaWdpbk1hcC5nZXQoKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
SklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENvbXBpbGVyIHRvIGNhbGwgc2V0Q29kZVJlZigpLgpA
QCAtMTQwLDYgKzE0NSw4IEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPEJ5dGVjb2RlSW5kZXgsIFRy
aWdnZXJSZWFzb24+IHRpZXJVcEVudHJ5VHJpZ2dlcnM7CiAKICAgICBXcml0ZUJhcnJpZXI8Q29k
ZUJsb2NrPiBtX29zckVudHJ5QmxvY2s7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxl
PiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBt
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgdW5zaWduZWQgb3NyRW50cnlSZXRyeTsKICAg
ICBib29sIGFiYW5kb25PU1JFbnRyeTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDEzICsxODUsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6
bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIAogICAgIG1fZ3JhcGgucmVnaXN0ZXJGcm96ZW5W
YWx1ZXMoKTsKIAotICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNF
bXB0eSgpIHx8ICFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAg
ICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOwot
ICAgICAgICBpZiAoIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFi
bGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7Ci0gICAgfQorICAgIEFT
U0VSVChtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpOworICAg
IEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpOworICAgIGlm
ICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKSAKKyAgICAgICAg
bV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBpZiAoIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFi
bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBX
VEZNb3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKIAogICAgIGZvciAoQmFnPFN3aXRj
aERhdGE+OjppdGVyYXRvciBpdGVyID0gbV9ncmFwaC5tX3N3aXRjaERhdGEuYmVnaW4oKTsgISFp
dGVyOyArK2l0ZXIpIHsKICAgICAgICAgU3dpdGNoRGF0YSYgZGF0YSA9ICoqaXRlcjsKQEAgLTE5
OSwxMiArMTk4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IK
ICAgICAgICAgY2FzZSBTd2l0Y2hDaGFyOgogICAgICAgICBjYXNlIFN3aXRjaEltbTogewogICAg
ICAgICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkgewotICAgICAgICAgICAgICAgIEFT
U0VSVChtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCku
aXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N3aXRjaEp1
bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XS5pc0VtcHR5KCkpOwogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25zdCBVbmxpbmtl
ZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5rZWRTd2l0Y2hK
dW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dp
dGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XTsK
ICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2st
PmluZGV4XSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJsZS5tX2N0aU9m
ZnNldHMuc2l6ZSgpID09IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKSk7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuc2l6
ZSgpOyBqLS07KQpAQCAtMjE5LDEyICsyMTgsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhM
aW5rQnVmZmVyJiBsaW5rQgogCiAgICAgICAgIGNhc2UgU3dpdGNoU3RyaW5nOiB7CiAgICAgICAg
ICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4
KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlzRW1wdHkoKSk7CiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0
IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICAg
ICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0
Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgICAgIFN0cmluZ0p1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
c1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlEZWZhdWx0ID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbZGF0YS5m
YWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxp
bmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCkgPT0gdW5saW5rZWRUYWJsZS5tX29mZnNldFRh
YmxlLnNpemUoKSArIDEpOwogICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGxpbmtlZFRh
YmxlLm1fY3RpT2Zmc2V0cykKQEAgLTMzMyw3ICszMzIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjps
aW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0UENU
b0NvZGVPcmlnaW5NYXAobWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3Bj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpKTsKKyAgICAgICAgbV9qaXRDb2Rl
LT5jb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5N
YXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBsaW5rQnVmZmVyKTsKIH0K
IAogc3RhdGljIHZvaWQgZW1pdFN0YWNrT3ZlcmZsb3dDaGVjayhKSVRDb21waWxlciYgaml0LCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHN0YWNrT3ZlcmZsb3cpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk3LDcgKzk3LDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZyYW1lKgog
ICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkp
KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQp
OwotICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFTU0VSVChjb2Rl
QmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKICAgICBpZiAo
IU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9ERkcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZH
SklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIK
QEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxs
SGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2ggKGppdC5jb2RlQmxv
Y2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAgICAgIGNs
aXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChq
aXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNs
aXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0
YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgot
ICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVk
VGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsK
KyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBl
ZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMTMsNiArMzE0LDEwIEBA
IHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxv
Y2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJs
ZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywg
TExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAgICAgICAgaml0LnN0
b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNh
bGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2Fs
bEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVl
Q2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxl
ZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19tZXRh
ZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVKSVRDb25zdGFudFBv
b2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ss
IEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghaW5saW5l
Q2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw2ICs0MDksOSBAQCB2b2lkIGFkanVzdEFu
ZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJz
OjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JF
eGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPm1l
dGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGluZUpJVENv
bnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CisKICAgICAgICAgY29kZUJsb2Nr
Rm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKIAogICAgICAgICBCeXRlY29kZUlu
ZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50
aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNv
bW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR0pJ
VENvZGUuaCIKQEAgLTI4NjksNyArMjg3MCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25GaW5kU3cKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29k
ZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBBU1NFUlQodmFsdWUuaXNEb3VibGUoKSk7CiAgICAgZG91YmxlIGFzRG91YmxlID0g
dmFsdWUuYXNEb3VibGUoKTsKQEAgLTI4OTAsNyArMjg5MSw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25Td2l0Y2gKIAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgbnVsbHB0cik7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2Rl
QmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTdHJp
bmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5kZmdTdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CiAgICAgcmV0dXJuIGxpbmtlZFRhYmxlLmN0aUZvclZhbHVlKCp1
bmxpbmtlZFRhYmxlLCBzdHJJbXBsKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzAsNiAr
NzMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAg
ICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZVRh
Z0dQUiwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJl
c2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3Nl
ZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1l
dGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkg
KyAxKTsKQEAgLTg4OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlKiBub2RlCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBp
ZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWls
Q2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0gewogICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzQsNiArODM0LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZsZURh
dGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMp
OwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7
CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsK
KyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAgICAgRWRn
ZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CkBAIC05
ODUsNyArOTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQog
ICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1Rh
aWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRh
aWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5z
ZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcgKzM5ODUsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJl
Z2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29k
ZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAor
ICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBj
YWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVzZWRSZWdpc3RlcnMsCiAgICAg
ICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwgSlNWYWx1ZVJlZ3M6OnBheWxv
YWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQ
Uik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogCkBAIC00
OTA1LDcgKzQ5MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9k
CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxp
bmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwog
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2st
PmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAg
SklUQWRkSUMqIGFkZElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVEFkZElDKGFyaXRoUHJv
ZmlsZSk7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRk
SklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9w
ZXJhdGlvblZhbHVlQWRkT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24g
PSBvcGVyYXRpb25WYWx1ZUFkZDsKICAgICAKQEAgLTQ5ODksNyArNDk4OSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVN1YihOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5l
Q29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9y
aWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0
ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2ppdC5j
b2RlQmxvY2soKS0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRTdWJJQyogc3Vi
SUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwog
ICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZTsK
ICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViOwogCkBA
IC01NTcxLDcgKzU1NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVOZWdh
dGUoCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFz
ZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUlu
ZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgp
OwogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9j
ay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAg
IEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJQyhhcml0aFBy
b2ZpbGUpOworICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFk
ZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBv
cGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0
aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGU7CiAgICAgY29tcGlsZU1hdGhJQyhub2RlLCBuZWdJ
QywgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwpAQCAtNTgxNSw3
ICs1ODE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTXVsKE5vZAogICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5h
cnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVE11
bElDKiBtdWxJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUp
OworICAgIEpJVE11bElDKiBtdWxJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVE11
bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRp
b25WYWx1ZU11bE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3Bl
cmF0aW9uVmFsdWVNdWw7CiAKQEAgLTE0NzczLDcgKzE0NzczLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3Bl
KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5ncHIo
KTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJl
ZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJbmRleCk7
CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0
aGlzUmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2Rl
QmxvY2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZl
cG9pbnQ6OlJlCiAKICAgICBpZiAodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGlu
ZygpKSB7CiAgICAgICAgIEIzOjpQQ1RvT3JpZ2luTWFwIG9yaWdpbk1hcCA9IHN0YXRlLnByb2Mt
PnJlbGVhc2VQQ1RvT3JpZ2luTWFwKCk7Ci0gICAgICAgIGNvZGVCbG9jay0+c2V0UENUb0NvZGVP
cmlnaW5NYXAobWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyKHZtLCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5iM0NvZGVM
aW5rQnVmZmVyKSk7CisgICAgICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5tX3BjVG9Db2RlT3Jp
Z2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyKHZtLCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5iM0NvZGVM
aW5rQnVmZmVyKTsKICAgICB9CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFn
PiBsYWJlbCA9IHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZjxK
U0VudHJ5UHRyVGFnPihzdGF0ZS5wcm9jLT5jb2RlKCkuZW50cnlwb2ludExhYmVsKDApKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAyODI2NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNjgsNiArNjgsOCBAQCBwdWJsaWM6CiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21t
b24oKSBvdmVycmlkZTsKICAgICBzdGF0aWMgcHRyZGlmZl90IGNvbW1vbkRhdGFPZmZzZXQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklUQ29kZSwgY29tbW9uKTsgfQogICAgIHZvaWQgc2hy
aW5rVG9GaXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikgb3ZlcnJpZGU7CisKKyAgICBQQ1Rv
Q29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBjb21t
b24ubV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQogICAgIAogICAgIERGRzo6Q29tbW9uRGF0
YSBjb21tb247CiAgICAgVmVjdG9yPE9TUkV4aXQ+IG1fb3NyRXhpdDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODksNiArODksNyBAQAogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAj
aW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCisj
aW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIK
ICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTZXR1cFZh
cmFyZ3NGcmFtZS5oIgpAQCAtMjMyMCw2ICsyMzIxLDE4IEBAIHByaXZhdGU6CiAgICAgICAgIGNv
bXBpbGVCaW5hcnlNYXRoSUM8SklUU3ViR2VuZXJhdG9yPihhcml0aFByb2ZpbGUsIHJlcGF0Y2hp
bmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4K
KyAgICBzdGF0aWMgSklUQWRkSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwg
QmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUQWRkSUMo
cHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
ID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTXVs
R2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRNdWxJQyogYWRkTWF0aElD
KERGRzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsg
cmV0dXJuIGNvbW1vbi5hZGRKSVRNdWxJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6
OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVROZWdHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAg
c3RhdGljIEpJVE5lZ0lDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIFVuYXJ5
QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUTmVnSUMocHJvZmls
ZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUU3ViR2VuZXJh
dG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRTdWJJQyogYWRkTWF0aElDKERGRzo6
Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJu
IGNvbW1vbi5hZGRKSVRTdWJJQyhwcm9maWxlKTsgfQorCiAgICAgdm9pZCBjb21waWxlVmFsdWVN
dWwoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKQEAgLTIzOTEsNyArMjQwNCw3
IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgICAgICAgICAgICAgIEJveDxNYXRoSUNHZW5lcmF0
aW9uU3RhdGU+IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9uU3Rh
dGU+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+
KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgICAgICAgICAgSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElD
ID0gYWRkTWF0aElDPEdlbmVyYXRvcj4oc3RhdGUtPmppdENvZGUtPmNvbW1vbiwgYXJpdGhQcm9m
aWxlKTsKICAgICAgICAgICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKEpT
VmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSks
IHBhcmFtcy5ncFNjcmF0Y2goMCkpOwogCiAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRFbWl0
UHJvZmlsaW5nID0gZmFsc2U7CkBAIC0yNTAwLDcgKzI1MTMsNyBAQCBwcml2YXRlOgogI2VuZGlm
CiAKICAgICAgICAgICAgICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUgPSBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAg
ICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2Rl
QmxvY2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAg
ICAgICBKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gYWRkTWF0aElDPEdlbmVy
YXRvcj4oc3RhdGUtPmppdENvZGUtPmNvbW1vbiwgYXJpdGhQcm9maWxlKTsKICAgICAgICAgICAg
ICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9w
ZXJhbmQsIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSksCiAgICAgICAgICAgICAgICAgICAg
IEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBhcmFtc1syXS5ncHIo
KSksIHBhcmFtcy5mcFNjcmF0Y2goMCksCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mcFNj
cmF0Y2goMSksIHBhcmFtcy5ncFNjcmF0Y2goMCkpOwpAQCAtNDMxNyw3ICs0MzMwLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpGVExKSVQpID8gcGFyYW1zLmdwU2NyYXRjaCgwKSA6IEludmFsaWRHUFJSZWc7
CiAKICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVFB1dEJ5VmFsR2VuZXJhdG9y
Pjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRM
SklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5
VmFsLAorICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBu
b2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVO
YW1lLAogICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKIAogICAgICAgICAgICAgZ2Vu
ZXJhdG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKQEAgLTEwMjg1LDYg
KzEwMjk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtUGFzc2VkQXJnczsgaSA8IG51bUFsbG9jYXRlZEFyZ3M7ICsraSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MuYXBwZW5kKFZhbHVlUmVjb3Zlcnk6OmNvbnN0
YW50KGpzVW5kZWZpbmVkKCkpKTsKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVt
UGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVE
YXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAg
ICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGpp
dC5jb2RlQmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExp
bmtJbmZvKHNlbWFudGljTm9kZU9yaWdpbik7CkBAIC0xMDQ0MywxMyArMTA0NTcsMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQocGFyYW1z
WzEgKyBpXS5yZWNvdmVyeUZvckpTVmFsdWUoKSk7CiAKICAgICAgICAgICAgICAgICBzaHVmZmxl
RGF0YS5udW1QYXNzZWRBcmdzID0gbnVtQXJnczsKKyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0
YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZl
UmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAKICAgICAgICAgICAgICAgICBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVP
cmlnaW4pOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5r
SW5mbzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIGF1dG8g
c2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5m
bzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZd
IHsKKyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAg
ICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVw
YXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwNzkyLDcgKzEwODA3
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNs
b3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAg
ICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1Qw
LCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAg
ICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAg
aml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAt
MTEwNzMsNyArMTEwODgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwg
R1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpO
bywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAg
ICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRh
LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRh
dGEucmIJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0
b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0MiwyOCBAQCBjbGFzcyBN
ZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJldHVybiBpZiBlbXB0eT8KIAot
ICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcykKKyAgICAgICAgZGVmIGdl
bmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQorICAgICAgICAgICAg
ZmllbGROYW1lcy5tYXAgZG8gfGZpZWxkTmFtZXwKKyAgICAgICAgICAgICAgICAiI3twcmVmaXh9
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFt
ZVsxLi5dfSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFt
ZX0pOyB9IgorICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKKyAgICAgICAgZW5kCisKKyAgICAg
ICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGZpZWxkTmFtZXMpCiAgICAgICAg
ICAgICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAgICAgICBpZiB0eXBl
LmtpbmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7
Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCisgICAg
ICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4
ICsgJyAgICAnLCB0eXBlLCBmaWVsZE5hbWVzKX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7
ZmllbGQudG9fc307IgorICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19z
CisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVzaChmaWVsZE5hbWUpCisgICAgICAg
ICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgogICAg
ICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAgICAgZW5k
CiAKLSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzKQor
ICAgICAgICBmaWVsZE5hbWVzID0gW10KKyAgICAgICAgcHJlZml4ID0gIiAgICAgICAgIgorICAg
ICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKHByZWZpeCwgQGZpZWxkcywgZmllbGROYW1lcykK
KyAgICAgICAgZmllbGRzID0gZmllbGRzICsgIlxuIiArIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlv
bnMocHJlZml4LCBmaWVsZE5hbWVzKQogCiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlm
IEBpbml0aWFsaXplcnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzY3LDYgKzM2NywyOCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6
bG9hZFByb3BlcnR5KEdQUlJlCiAgICAgICAgIHJlc3VsdCk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjpzdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBH
UFJSZWcgb2Zmc2V0LCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBKdW1wIGlzSW5saW5lID0gYnJh
bmNoMzIoTGVzc1RoYW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKG9iamVjdCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgbmVnMzIob2Zmc2V0KTsKKyAgICBzaWduRXh0ZW5k
MzJUb1B0cihvZmZzZXQsIG9mZnNldCk7CisgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKKyAgICAK
KyAgICBpc0lubGluZS5saW5rKHRoaXMpOworICAgIGFkZFB0cigKKyAgICAgICAgVHJ1c3RlZElt
bTMyKAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEpTT2JqZWN0KSkg
LQorICAgICAgICAgICAgKHN0YXRpY19jYXN0PGludDMyX3Q+KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSAtIDIpICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpLAor
ICAgICAgICBvYmplY3QsIHNjcmF0Y2gpOworICAgIAorICAgIHJlYWR5LmxpbmsodGhpcyk7Cisg
ICAgCisgICAgc3RvcmVWYWx1ZSh2YWx1ZSwKKyAgICAgICAgQmFzZUluZGV4KHNjcmF0Y2gsIG9m
ZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSk7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9hZFN0cnVj
dHVyZShWTSYgdm0sIFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVy
SUQgc2NyYXRjaCkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjk4LDggKzcyMCwxMyBAQCB2
b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzCiAKIHZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8p
LCBHUFJJbmZvOjpyZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCks
IEdQUkluZm86OnJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFs
T2JqZWN0KHZtLCBpbmZvKTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFs
Q2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8p
Cit7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAg
Q2FsbCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMjM0LDggKzIzNCw5IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0K
ICAgICAKLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBjbG9iYmVycyBvZmZzZXQuCisgICAgLy8gTm90
ZSB0aGF0IHRoZXNlIGNsb2JiZXIgb2Zmc2V0LgogICAgIHZvaWQgbG9hZFByb3BlcnR5KEdQUlJl
ZyBvYmplY3QsIEdQUlJlZyBvZmZzZXQsIEpTVmFsdWVSZWdzIHJlc3VsdCk7CisgICAgdm9pZCBz
dG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zm
c2V0LCBHUFJSZWcgc2NyYXRjaCk7CiAKICAgICB2b2lkIG1vdmVWYWx1ZVJlZ3MoSlNWYWx1ZVJl
Z3Mgc3JjUmVncywgSlNWYWx1ZVJlZ3MgZGVzdFJlZ3MpCiAgICAgewpAQCAtMTcyMCw2ICsxNzIx
LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENh
bGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAg
ICAgdm9pZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFj
ZU9uU3RhY2tGb3JDQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNl
bGluZUpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCisKKyNpbmNsdWRlICJK
SVRNYXRoSUMuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVT
dHViSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSklUQWRkSUMqIE1hdGhJQ0hvbGRlcjo6
YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1f
YWRkSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRNdWxJQyogTWF0aElDSG9sZGVyOjphZGRK
SVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9tdWxJ
Q3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVFN1YklDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVFN1
YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1YklDcy5h
ZGQoYXJpdGhQcm9maWxlKTsgfQorSklUTmVnSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTmVnSUMo
VW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFy
aXRoUHJvZmlsZSk7IH0KKwordm9pZCBNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyhNYXRoSUNI
b2xkZXImIG90aGVyKQoreworICAgIG1fYWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2FkZElDcyk7
CisgICAgbV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAgICBtX25lZ0lDcyA9
IFdURk1vdmUob3RoZXIubV9uZWdJQ3MpOworICAgIG1fc3ViSUNzID0gV1RGTW92ZShvdGhlci5t
X3N1YklDcyk7Cit9CisKK0Jhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8
SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVj
aykKKyAgICA6IERpcmVjdEpJVENvZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklUKQorICAgICwgTWF0aElDSG9sZGVyKCkKK3sgfQorCitCYXNlbGlu
ZUpJVENvZGU6On5CYXNlbGluZUpJVENvZGUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExp
bmtJbmZvLmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVu
YXJ5QXJpdGhQcm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CitzdHJ1
Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3MgTWF0
aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXIm
IG90aGVyKTsKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7
CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJ
VFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyog
YWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworcHJpdmF0ZToKKyAgICBCYWc8SklU
QWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJ
VE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKworY2xh
c3MgSklUQ29uc3RhbnRQb29sIHsKK3B1YmxpYzoKKyAgICB1c2luZyBDb25zdGFudCA9IHVuc2ln
bmVkOworCisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIEdsb2JhbE9i
amVjdCwKKyAgICAgICAgQ2FsbExpbmtJbmZvLAorICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywK
KyAgICAgICAgRnVuY3Rpb25EZWNsLAorICAgICAgICBGdW5jdGlvbkV4cHIsCisgICAgfTsKKwor
ICAgIHN0cnVjdCBWYWx1ZSB7CisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgUGFja2VkUHRy
PHZvaWQ+IHBheWxvYWQ7CisgICAgfTsKKworICAgIEpJVENvbnN0YW50UG9vbCgpID0gZGVmYXVs
dDsKKyAgICBKSVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAg
ICBKSVRDb25zdGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0
OworCisgICAgQ29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIp
CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXplKCk7Cisg
ICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1ZSBhdChzaXplX3QgaSkgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+
IG1fY29uc3RhbnRzOworfTsKKworCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGly
ZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVK
SVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiB3aXRoQXJpdHlDaGVjayk7CisgICAgfkJhc2VsaW5lSklUQ29kZSgpIG92ZXJyaWRlOworICAg
IFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJu
IG1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KKworICAgIEJhZzxVbmxpbmtlZENhbGxMaW5r
SW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxM
aW5rSW5mb3M7CisgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRT
dHViSW5mb3M7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBU
YWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXM7CisgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisgICAgSklUQ29uc3RhbnRQ
b29sIG1fY29uc3RhbnRQb29sOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1h
cD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKKyAgICBib29sIG1faXNTaGFyZWFibGUgeyB0cnVlIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNvbnN0CiAK
IENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUoKQogewotICAgIENv
bXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKCk7Cisg
ICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQo
bV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlv
bkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5
SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblByb2xv
CiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBl
cnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFs
dWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNo
YWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAgICBz
dG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNjb3Bl
LCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2spLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXgu
Yml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjpl
bnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BS
UmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93Q2hp
Y2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAgLTcyLDYgKzYyLDI4
IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEKICAgICBzdG9yZVB0
cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikpOwogfQogCisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlz
UmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgc3RvcmVWYWx1
ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNj
b3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93
UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUlu
ZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNr
ZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29w
ZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkK
K3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlz
UmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKK3ZvaWQgQ0NhbGxI
ZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBK
U1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNr
ZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRl
SW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVkTGFtYmRhPHZvaWQo
Q0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKIHsKICAg
ICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2Fs
bEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxs
SGVscGVycy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDE0IEBAIHB1Ymxp
YzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJlZ2lzdGVy
cy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Agb2YKICAgICAvLyBz
dGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNr
ZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDEsIEdQ
UlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcg
c2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxv
Y2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChH
UFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBD
b2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKK3B1
YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIg
Y29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworICAgIHZvaWQgbG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRoZSBQYWNr
ZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2b2lkIGVuc3VyZVNo
YWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRj
aDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZv
aWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29kZUJsb2Nr
LT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRh
OjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJl
Z2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0
ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07Ci0gICAgY29uc3Qg
UmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVCbG9jay0+
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdp
c3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZz
ZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMyBAQCBwdWJsaWM6CiAgICAgVmVj
dG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWduZWQgbnVtTG9jYWxzIHsgVUlOVF9N
QVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAgICB1bnNp
Z25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8gT24gb3VyIG1hY2hpbmUgZnJhbWUu
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1hcDxWYWx1ZVJlY292ZXJ5PiByZWdp
c3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVyIHsgSW52YWxpZEdQUlJlZyB9Owog
CiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7CisgICAgdm9p
ZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqKTsK
ICNlbmRpZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENhbGxGcmFtZVNodWZmbGVyOjpDYWxs
RnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkKICAgICAsIG1fb2xkRnJhbWUoZGF0
YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsIG51bGxwdHIp
CiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxs
RnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAgICAgICArIHJvdW5kQXJndW1lbnRDb3Vu
dFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpCisgICAgLCBt
X2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBy
b3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5udW1QYXJhbWV0ZXJzKSkKICAgICAs
IG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwog
ICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Muc2l6ZSgp
KSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUgLSBtX2FsaWduZWRP
bGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6YWxsUmVn
aXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNzZWRBcmdzKQorICAg
ICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykKIHsKICAgICAvLyBXZSBhcmUg
YWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAgIGZvciAodW5zaWduZWQgaSA9
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3ICs0MjEsNyBAQCB2
b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhCiAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFtZUJhc2UpOwogICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9CiAgICAgICAgIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fbmV3RnJhbWVCYXNlLAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5hbmQzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSwg
bV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVCYXNlLCBtX25ld0ZyYW1lQmFzZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAgICAgIGRhdGEubnVtTG9jYWxz
ID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2VkQXJncyA9IG1fbnVtUGFzc2Vk
QXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9udW1QYXJhbWV0ZXJzOwogICAg
ICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90
OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJnQ291
bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytpKQpA
QCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwZXJmb3JtU2FmZVdyaXRlcygp
OwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07CisgICAg
dW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEK
IH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRl
eCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBj
b2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51bGxwdHIpCiAgICAgLCBtX2lu
dGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAg
ICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAgIG1fcHJvZmlsZWRDb2RlQmxv
Y2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+dW5s
aW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTkwLDggKzkzLDggQEAgdm9p
ZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQo
YnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRl
ckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJl
c3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJy
YW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJ
bmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJ
VEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0
ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAt
MTEzLDE1ICsxMTYsMjAgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0
KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQt
PmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KQordm9pZCBKSVQ6
OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCkKIHsKKyAgICBh
dXRvIG9rID0gYnJhbmNoVGVzdFB0cihaZXJvLCBwb2ludGVyVG9TZXQpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0
OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBv
ay5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUpCit2b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVB
ZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFyUmVhZE9ubHlXYXRjaHBvaW50
KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3Jh
dGNoR1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZT
RVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJSZWFkT25seVdhdGNocG9pbnQpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQ
UiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0
KCkKQEAgLTEyOSw3ICsxMzcsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0
KCkKICAgICBpZiAoIUFTU0VSVF9FTkFCTEVEKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBKdW1w
IG9rID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAg
IGJyZWFrcG9pbnQoKTsKICAgICBvay5saW5rKHRoaXMpOwpAQCAtMTgxLDYxICsxODksMzcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1YwogICAgIHNsb3dQYXRoQ2Fs
bC5jYWxsKCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9n
dWUoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJs
b2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSk7CisgICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZXN1bHQpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhyZXN1bHQsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEo
KSksIHJlc3VsdCk7CisgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gYnJhbmNoVGVzdFB0cihaZXJv
LCByZXN1bHQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRh
VGFnKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHJlc3VsdCk7Cisg
ICAgaGFzRXhlY3V0YWJsZS5saW5rKHRoaXMpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5pc0NvbnN0cnVjdG9yKCkpCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSksIHJlc3VsdCk7
CisgICAgZWxzZQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1
dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpKSwgcmVzdWx0KTsKKworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZXN1bHQsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6Om9mZnNldE9mQ29k
ZUJsb2NrKCkpLCByZXN1bHQpOworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZXN1bHQs
IENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKIHsKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgICAgICBkYXRhTG9n
KCJDb21waWxpbmcgIiwgKm1fcHJvZmlsZWRDb2RlQmxvY2ssICJcbiIpOwogICAgIAogICAgIGpp
dEFzc2VydFRhZ3NJblBsYWNlKCk7CiAgICAgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsK
ICAgICAKLSAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5zaXplKCk7CisgICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCk7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2FsbExp
bmtJbmZvSW5kZXggPSAwOwogCi0gICAgVk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAg
Qnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7Ci0gICAgaWYgKG1fbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxv
Y2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4o
dm0pKSkgewotICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNh
dXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KLSAgICAgICAg
Ly8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhl
IExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8KLSAgICAgICAgLy8gZG8gT1NSIGVudHJ5IGlu
dG8gdGhlIGJhc2VsaW5lIEpJVCBpbiBhIGxvb3AsIGl0IHdpbGwgcGFzcyBpbiB0aGUgYnl0ZWNv
ZGUgb2Zmc2V0IGl0Ci0gICAgICAgIC8vIHdhcyBleGVjdXRpbmcgYXQgd2hlbiBpdCBraWNrZWQg
b2ZmIG91ciBjb21waWxhdGlvbi4gV2Ugb25seSBuZWVkIHRvIGNvbXBpbGUgY29kZSBmb3IKLSAg
ICAgICAgLy8gYW55dGhpbmcgcmVhY2hhYmxlIGZyb20gdGhhdCBieXRlY29kZSBvZmZzZXQuCi0K
LSAgICAgICAgLy8gV2Ugb25seSBib3RoZXIgYnVpbGRpbmcgdGhlIGJ5dGVjb2RlIGdyYXBoIGlm
IGl0IGNvdWxkIHNhdmUgdGltZSBhbmQgZXhlY3V0YWJsZQotICAgICAgICAvLyBtZW1vcnkuIFdl
IHBpY2sgYW4gYXJiaXRyYXJ5IG9mZnNldCB3aGVyZSB3ZSBkZWVtIHRoaXMgaXMgcHJvZml0YWJs
ZS4KLSAgICAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAy
MDApIHsKLSAgICAgICAgICAgIC8vIEFzIGEgc2ltcGxpZmljYXRpb24sIHdlIGRvbid0IGZpbmQg
YWxsIGJ5dGVjb2RlIHJhbmdlcyB0aGF0IGFyZSB1bnJlYWNoYWJsZS4KLSAgICAgICAgICAgIC8v
IEluc3RlYWQsIHdlIGp1c3QgZmluZCB0aGUgbWluaW11bSBieXRlY29kZSBvZmZzZXQgdGhhdCBp
cyByZWFjaGFibGUsIGFuZAotICAgICAgICAgICAgLy8gY29tcGlsZSBjb2RlIGZyb20gdGhhdCBi
eXRlY29kZSBvZmZzZXQgb253YXJkcy4KLQotICAgICAgICAgICAgQnl0ZWNvZGVHcmFwaCBncmFw
aChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKLSAgICAgICAgICAg
IEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVj
b2RlT2Zmc2V0KG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChibG9jayk7Ci0KLSAgICAgICAgICAgIEdyYXBoTm9kZVdvcmts
aXN0PEJ5dGVjb2RlQmFzaWNCbG9jayo+IHdvcmtsaXN0OwotICAgICAgICAgICAgc3RhcnRCeXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgd29ya2xpc3QucHVzaChi
bG9jayk7Ci0KLSAgICAgICAgICAgIHdoaWxlIChCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0g
d29ya2xpc3QucG9wKCkpIHsKLSAgICAgICAgICAgICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KHN0ZDo6bWluKHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgYmxvY2st
PmxlYWRlck9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNz
b3JJbmRleCA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpCi0gICAgICAgICAgICAgICAgICAgIHdvcmts
aXN0LnB1c2goJmdyYXBoW3N1Y2Nlc3NvckluZGV4XSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBB
bHNvIGFkZCBjYXRjaCBibG9ja3MgZm9yIGJ5dGVjb2RlcyB0aGF0IHRocm93LgotICAgICAgICAg
ICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+
bGVhZGVyT2Zmc2V0KCk7IGJ5dGVjb2RlT2Zmc2V0IDwgYmxvY2stPmxlYWRlck9mZnNldCgpICsg
YmxvY2stPnRvdGFsTGVuZ3RoKCk7KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGlu
c3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChhdXRvKiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmhhbmRsZXJGb3JC
eXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGdyYXBoLmZpbmRCYXNpY0Jsb2NrV2l0aExl
YWRlck9mZnNldChoYW5kbGVyLT50YXJnZXQpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ynl0ZWNvZGVPZmZzZXQgKz0gaW5zdHJ1Y3Rpb24tPnNpemUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
IAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8
IGluc3RydWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4LDggKzI2Miw4IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJv
YmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bjb2Rl
SURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNTI3LDcgKzUxMSw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRv
ID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRl
eCkucHRyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAg
ICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9y
ICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7
CkBAIC01NDUsOCArNTI5LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkK
IAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlv
bigpKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29k
ZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgp
IHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJh
bWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwg
Ynl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAi
LCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgfQpAQCAtNjc0LDU1ICs2NTgsNTUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0
YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQ
Uik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0
YSgpKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVRE
YXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQorCit2
b2lkIEpJVDo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBh
YmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAg
REZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmls
aXR5TGV2ZWwoKTsKICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENv
bXBpbGU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5C
ZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxp
bmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAg
ICAgY2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6
ZWQgPSB0cnVlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAg
ICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQotICAgIAotICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkp
IHsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1bGVDb2RlOgotICAgIGNhc2Ug
RXZhbENvZGU6Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9
IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAgICAgICAg
Ly8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVj
dGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgotICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0
IG9ic2VydmF0aW9uLgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGlu
ZWQgJj0gY2FuSW5saW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9jb2Rl
QmxvY2spOwotICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPm51
bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2RlQmxvY2stPm51bWJlck9m
VW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKG1fY29kZUJs
b2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhl
ZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dp
dGNoSnVtcFRhYmxlcygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVu
c3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3Rv
cjxTdHJpbmdKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlcygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZV
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgIGlmIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAg
ICAgICAgbV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiht
X3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsK
KyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMg
PSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJl
ck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAgIH0KIAotICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29k
ZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkp
Ci0gICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1f
Y29kZUJsb2NrKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkg
fHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJh
c2VsaW5lRm9yUHJvZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBidWlsZCBhIGRpc2Fz
c2VtYmxlciBvZmYgb2YgVW5saW5rZWRDb2RlQmxvY2suCisgICAgICAgIG1fZGlzYXNzZW1ibGVy
ID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAg
IH0KICAgICBpZiAoVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSkgeworICAg
ICAgICAvLyBGSVhNRTogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiBVbmxpbmtlZENv
ZGVCbG9jay4KICAgICAgICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAogICAgICAgICAgICAg
bmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9jayksCisgICAgICAg
ICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3Io
bV9wcm9maWxlZENvZGVCbG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmlsZXI6OkJhc2VsaW5l
KSk7Ci0gICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5t
X3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9jb21waWxhdGlv
bi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9w
cm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7
CkBAIC03NDIsMTEgKzcyNiwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0Rmlu
YWxpemluCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAg
ICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlKQorICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoKTsK
IAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQg
PSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsK
KyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6
ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zm
c2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJm
bG93OwpAQCAtNzU3LDE2ICs3NDIsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbgogICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVDYWxsZWVTYXZlcygp
OworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdD
aGVja1JlZ2lzdGVycygpOworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQ
b29sUmVnaXN0ZXJzKCk7CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlKSB7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0g
RnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAg
ICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsg
Kythcmd1bWVudCkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV91
bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQ
cm9maWxlcygpICsgRml4ZWRWZWN0b3I8VmFsdWVQcm9maWxlPjo6b2Zmc2V0T2ZTdG9yYWdlKCkp
LCByZWdUMik7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1
bWVudCA8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkg
ewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3
YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwogICAgICAgICAgICAgICAg
IC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRv
IHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2Nr
LT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQorICAgICAgICAgICAgICAgIGlmIChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZy
YW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNzc3LDEyICs3
NjYsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAg
ICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxv
YWRHUFIoKSk7CiAgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0
ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVz
dWx0UmVncy50YWdHUFIoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCks
IHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRk
cmVzcyhyZWdUMiwgYXJndW1lbnQgKiBzaXplb2YoVmFsdWVQcm9maWxlKSArIFZhbHVlUHJvZmls
ZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2Nr
LT5qaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9wcm9m
aWxlZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtl
cikpCiAgICAgICAgIG1fdm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNp
emVNYXJrZXIpLCAqdGhpcyk7CkBAIC03OTksMjQgKzc4OCwyNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0
aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092
ZXJmbG93RXJyb3IsIG1fY29kZUJsb2NrKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9u
V2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJm
bG93RXJyb3IsIHJlZ1QwKTsKIAogICAgIC8vIElmIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBp
cyAxLCB3ZSBuZXZlciByZXF1aXJlIGFyaXR5IGZpeHVwLgotICAgIGJvb2wgcmVxdWlyZXNBcml0
eUZpeHVwID0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAhPSAxOwotICAgIGlmIChtX2Nv
ZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVw
KSB7CisgICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCkgIT0gMTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5
cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1f
YXJpdHlDaGVjayA9IGxhYmVsKCk7Ci0gICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZt
X2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQpOworCiAgICAgICAgIGVtaXRGdW5j
dGlvblByb2xvZ3VlKCk7Ci0gICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVC
bG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgZW1pdFB1dENvZGVCbG9j
a1RvRnJhbWVJblByb2xvZ3VlKHJlZ1QwKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigw
KSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5l
ZCgpKSk7CiAKICAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMSk7Ci0gICAgICAgIGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSku
bGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOworICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QxLCBUcnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
KSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwogCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgoMCk7CiAKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50
MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRp
b24obV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5
Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25z
dHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxB
cml0eUNoZWNrLCBhcmd1bWVudEdQUjApOwogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFu
Y2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsK
QEAgLTgzOSw3ICs4MzEsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxp
emluCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAgICAg
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCi0gICAgbV9saW5rQnVmZmVy
ID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX2Nv
ZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOworICAg
IG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZl
cigqdGhpcywgbV91bmxpbmtlZENvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxp
bmVKSVQsIGVmZm9ydCkpOwogICAgIGxpbmsoKTsKIH0KIApAQCAtODU4LDggKzg1MCw4IEBAIHZv
aWQgSklUOjpsaW5rKCkKICAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewogICAgICAgICBj
YXNlIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlOgogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6
Q2hhcmFjdGVyOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKLSAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3Qg
VW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CiAgICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29y
ZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwg
dW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0c1tqXTsK
QEAgLTg3MSw4ICs4NjMsOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIFN3aXRjaFJlY29yZDo6U3RyaW5nOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtl
ZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0
cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAg
ICBhdXRvIGN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFn
PihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAg
ICAgICAgICBmb3IgKGF1dG8mIGxvY2F0aW9uIDogdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxl
LnZhbHVlcygpKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRpb24u
bV9icmFuY2hPZmZzZXQ7CkBAIC05MDYsMzIgKzg5OCwzNSBAQCB2b2lkIEpJVDo6bGluaygpCiAg
ICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCByZWNvcmQuY2FsbGVlKTsK
ICAgICB9CiAKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzLCBwYXRjaEJ1ZmZl
cik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsK
LSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVy
KTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0g
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX2luQnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2luQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9pbnN0YW5jZU9mcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1f
cHJpdmF0ZUJyYW5kQWNjZXNzZXMsIHBhdGNoQnVmZmVyKTsKKyAgICBhdXRvIGZpbmFsaXplSUNz
ID0gWyZdIChhdXRvJiBnZW5lcmF0b3JzKSB7CisgICAgICAgIGZvciAoYXV0byYgZ2VuIDogZ2Vu
ZXJhdG9ycykgeworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+c3RhcnQgPSBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zdGFydCk7
CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGdlbi5tX2RvbmUpOworICAgICAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gcGF0
Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc2xvd1BhdGhC
ZWdpbik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkcyk7
CisgICAgZmluYWxpemVJQ3MobV9nZXRCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJ
ZHNXaXRoVGhpcyk7CisgICAgZmluYWxpemVJQ3MobV9wdXRCeUlkcyk7CisgICAgZmluYWxpemVJ
Q3MobV9wdXRCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlJZHMpOworICAgIGZpbmFs
aXplSUNzKG1fZGVsQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlJZHMpOworICAgIGZp
bmFsaXplSUNzKG1faW5CeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5zdGFuY2VPZnMpOwor
ICAgIGZpbmFsaXplSUNzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMpOwogCiAgICAgZm9yIChhdXRv
JiBjb21waWxhdGlvbkluZm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKLSAgICAgICAgQ2Fs
bExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87Ci0gICAgICAg
IGluZm8uc2V0Q29kZUxvY2F0aW9ucygKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQYXRoU3RhcnQpLAotICAg
ICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxh
dGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiBp
bmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgaW5m
by5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pOwogICAgIH0KIAotICAgIHsKLSAgICAgICAg
SklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsg
KytieXRlY29kZU9mZnNldCkgewotICAgICAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zm
c2V0XS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChC
eXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0Vu
dHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKLSAgICAgICAgfQotICAgICAg
ICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgp
KTsKKyAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKKyAgICBmb3IgKHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXpl
KCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKKyAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zm
c2V0XS5pc1NldCgpKQorICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQ
dHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwogICAgIH0KIAogICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkpIHsKQEAgLTk0MCwyNiArOTM1LDM4IEBA
IHZvaWQgSklUOjpsaW5rKCkKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkobV9jb21waWxhdGlv
bikpIHsKKyAgICAgICAgLy8gRklYTUU6IHNob3VsZCB3ZSBtYWtlIHRoZSBieXRlY29kZSBwcm9m
aWxlciBrbm93IGFib3V0IFVubGlua2VkQ29kZUJsb2NrPwogICAgICAgICBpZiAoT3B0aW9uczo6
ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpCiAgICAgICAgICAgICBtX2Rpc2Fzc2Vt
Ymxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9uLmdldCgpLCBwYXRjaEJ1ZmZlcik7
Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9j
b2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqbV9jb21waWxhdGlv
bik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxk
TWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1Rv
Q29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIHBhdGNo
QnVmZmVyKTsKICAgICAKKyAgICAvLyBGSVhNRTogTWFrZSBhIHZlcnNpb24gb2YgQ29kZUJsb2Nr
V2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBVbmxpbmtlZENvZGVCbG9jay4KICAgICBDb2Rl
UmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNo
QnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVz
IiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMi
LCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wcm9maWxlZENvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJl
ZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29k
ZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRD
YWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENh
bGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOworICAgIG1faml0Q29k
ZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1vdmUobV91bmxpbmtlZFN0dWJJbmZvcyk7Cisg
ICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRh
Ymxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3Zl
KG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAg
PSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOworICAgIG1faml0Q29kZS0+YWRvcHRNYXRo
SUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2RlLT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUo
bV9jb25zdGFudFBvb2wpOworICAgIG1faml0Q29kZS0+bV9pc1NoYXJlYWJsZSA9IG1faXNTaGFy
ZWFibGU7CiAKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dG
KCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ss
IHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0
LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CisgICAgICAgIGRhdGFM
b2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV91bmxpbmtl
ZENvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0
cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKIH0K
IAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZCgpCitDb21waWxh
dGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayogY29kZUJsb2Nr
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogCkBAIC05
NjgsMjUgKzk3NSwxNCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhy
CiAKICAgICBtX2xpbmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwog
Ci0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5t
X2xvY2spOwotICAgICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxv
Y2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7
Ci0gICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhh
bmRsZXIoaSk7Ci0gICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+Lgot
ICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZp
bmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+KCk7Ci0gICAgfQotCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApCi0gICAg
ICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVP
cmlnaW5NYXApKTsKKyAgICAgICAgbV9qaXRDb2RlLT5tX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RG
TW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKTsKIAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQ
ZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxk
b3VibGU+KG1faml0Q29kZS0+c2l6ZSgpKSAvCi0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4o
bV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxk
b3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAg
bV9jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAg
IGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVh
c2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAg
LTk5OCwxMSArOTk0LDExIEBAIHNpemVfdCBKSVQ6OmNvZGVTaXplKCkgY29uc3QKICAgICByZXR1
cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJp
dmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorQ29tcGlsYXRpb25SZXN1
bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQogewogICAgIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29t
cGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoZWZmb3J0KTsKLSAg
ICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICByZXR1cm4gZmluYWxpemVPbk1h
aW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0
aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxOCArMTAzOCwyOCBAQCB2b2lkIEpJVDo6ZG9NYWluVGhy
ZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT5w
cm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0aW9uLiJf
cyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayog
Y29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRD
b2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJs
b2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAogICAgIHJldHVybiByb3VuZExvY2FsUmVnaXN0
ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fscygp
ICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9CiAKLWludCBK
SVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVk
IEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAg
IHJldHVybiBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9j
aygpKTsKK30KKworaW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJs
b2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZy
YW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2spIC0gMSkub2Zmc2V0KCk7CiB9CiAKK2ludCBK
SVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBy
ZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2so
KSk7Cit9CisKIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gSklUOjpjb21waWxlVGltZVN0YXRz
KCkKIHsKICAgICBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IHJlc3VsdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogCiAjZGVmaW5l
IEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwgZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NBR0Uo
YWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9mZnNldCBcIiVzXCIgc2hvdWxkIGJlICVkLCBub3Qg
JWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19jYXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0aWNfY2Fz
dDxpbnQ+KGFjdHVhbCkpOwogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAi
SklURGlzYXNzZW1ibGVyLmgiCkBAIC00NCw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSklUTWF0aElD
LmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50
ZXJmYWNlSklULmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVP
cmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCiAjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsxNTEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsK
IAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25JbmZvIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBk
b25lTG9jYXRpb247Ci0gICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOworICAgICAg
ICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQ7CiAgICAgfTsKIAog
ICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCi0gICAgY2xh
c3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAg
ICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBKSVRTdHViQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFRodW5rczsKQEAgLTE3
MSw2ICsxNzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0
aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQg
b2Zmc2V0LgogICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0
T2Zmc2V0ID0gMjU2OwogCisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwog
ICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVj
b2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsK
ICAgICAgICAgfkpJVCgpOwpAQCAtMTc4LDI4ICsxODIsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6dm0oKTsgfQogCiAgICAg
ICAgIHZvaWQgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVm
Zm9ydCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFkKCk7
CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9j
ayopOwogICAgICAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGRv
TWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgICAgICAKICAgICAgICAg
c3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
T2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0
KTsKKyAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQp
LnByaXZhdGVDb21waWxlKGNvZGVCbG9jaywgZWZmb3J0KTsKICAgICAgICAgfQogCisgICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sq
KTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxv
Y2sqKTsKKyAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRD
b2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29k
ZUJsb2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0
cmluZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBpbGVUaW1lKCk7CiAKKyAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0YUdQUiA9IExMSW50OjpSZWdpc3RlcnM6Om1ldGFk
YXRhVGFibGVHUFI7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfY29uc3RhbnRz
R1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFI7CisKICAgICBwcml2YXRlOgogICAgICAgICB2
b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGls
ZUxpbmtQYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKICAg
ICAgICAgdm9pZCBsaW5rKCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21w
aWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJp
dmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCiAgICAgICAg
IC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNo
ZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2ICsyMzIsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIH0KICNlbmRpZgogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
KyAgICAgICAgdm9pZCBsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90
IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+
CisgICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90
IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+
CisgICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qg
b2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUs
IHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEoVmFsdWVU
eXBlLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJS
ZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICBw
dWJsaWM6CisgICAgICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgs
IEdQUlJlZyk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQ
UlJlZyk7CisgICAgICAgIHZvaWQgbG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3Rl
ciwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9s
b2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOworCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hl
Y2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlv
bkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7CkBAIC0yNTgsMTYgKzI5MywxNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpv
cGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVj
dF92YXJhcmdzCiAgICAgICAgICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwot
ICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZv
Kik7CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKIAogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAg
IE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2Nv
bnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExp
bmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29u
c3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAg
ICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8q
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCk7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxs
RXZhbChjb25zdCBPcCYpOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAt
Mjg3LDE0ICszMjIsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRl
QmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3Jp
dGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2
b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcik7CisgICAgICAgIHZvaWQgZW1pdFdy
aXRlQmFycmllcihHUFJSZWcgb3duZXIpOwogCiAgICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0
IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJlZ1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWls
YWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKLSAg
ICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVS
ZWdzKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJlZyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1Zh
bHVlUmVncyk7CisgICAgICAgIC8vdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJv
ZmlsZSYsIEdQUlJlZyk7CisgICAgICAgIC8vdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0
ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEdQUlJl
Zyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1ZhbHVlUmVncyk7CiAjZWxzZQogICAgICAg
ICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3Mp
OwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOwpAQCAtMzA1LDggKzM0MSwxMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVj
bHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9p
ZD4KICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0
ZWNvZGUpOwogCi0gICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJl
Z2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQg
Y2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3Rl
cklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01OTMsNyArNjMxLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwpAQCAtNjI3LDE0ICs2NjQsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHZvaWQgZW1pdEhh
c1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUpOwotICAgICAgICB2b2lkIGVt
aXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKKyAgICAg
ICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21t
b24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAg
ICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7Ci0g
ICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpOwotICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlKTsK
KyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNv
bHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xv
c3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKICAgICAgICAgdm9pZCBlbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoq
IHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02NDYsNyArNjgzLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBl
bWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXROb3RpZnlX
cml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVX
YXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChK
U1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCopOwpAQCAtNjU1LDYgKzY5Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVh
bFJlZ2lzdGVyKTsKIAorICAgICAgICBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7
CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAg
ICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAg
ICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY5Niwy
NiArNzM0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZl
VHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8
IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJF
X0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8j
I3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VU
X0ZST01fU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNv
bnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRo
dW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIC8vIE1vZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNp
ZW50IHRvIGVtaXQgaW5saW5lIHRoYW4gdXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNv
bHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9y
ZXNvbHZlX3Njb3BlLgotICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2
ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQot
I2RlZmluZSBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0g
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jl
c29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9F
QUNIX1JFU09MVkVfVFlQRShERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVm
IERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNv
bHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5r
KFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7
CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdl
bmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+
LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJ
c1RydXRoeUdlbmVyYXRvcihWTSYpOwpAQCAtNzYwLDEwICs3ODAsMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1l
Um9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHQoQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKE1ldGFkYXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFk
YXRhPgotICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIEFkZHJlc3MsIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVf
aWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbD4KQEAgLTgyMSwyMCArODQxLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhBZGRyZXNzKEdQUkluZm86Om5vbkFy
Z0dQUjAsIHRhcmdldC5vZmZzZXQpKTsKICAgICAgICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdz
PgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgT3BlcmF0aW9u
VHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlv
blRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4K
LSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgT3Bl
cmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJn
cykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFy
Z3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0
aW9uVHlwZT4oYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9u
LCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICAgICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUuLi4gQXJn
cz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBl
Pjo6aGFzUmVzdWx0LCB2b2lkPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0
YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwg
QXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBBZGRyZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwg
QXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50c0Zvcklu
ZGlyZWN0Q2FsbDxPcGVyYXRpb25UeXBlPih0YXJnZXQsIGFyZ3MuLi4pOwotICAgICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUobWV0YWRhdGEsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNl
dCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShieXRlY29kZSwgQWRkcmVzcyhHUFJJbmZv
Ojpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKICAgICAgICAgfQogCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CkBA
IC05MTksMjUgKzkzOSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShERkdfSklU
KQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXpl
ZDsgfQotICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4gbV9j
YW5CZU9wdGltaXplZE9ySW5saW5lZDsgfQogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxp
bmcoKSB7IHJldHVybiBtX3Nob3VsZEVtaXRQcm9maWxpbmc7IH0KICNlbHNlCiAgICAgICAgIGJv
b2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICBib29sIGNhbkJl
T3B0aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgLy8gRW5hYmxl
cyB1c2Ugb2YgdmFsdWUgcHJvZmlsZXIgd2l0aCB0aWVyZWQgY29tcGlsYXRpb24gdHVybmVkIG9m
ZiwKICAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSBhbGwgY29kZSBnZXRzIHByb2ZpbGVkLgogICAg
ICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlm
CiAKKyAgICAgICAgdm9pZCBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJl
Z2lzdGVycygpOworCisgICAgICAgIHZvaWQgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworCiAg
ICAgICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMg
Ym9vbCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB5b3Ug
bmVlZCB0byBjaGVjayBhIHZhbHVlIGZyb20gdGhlIG1ldGFkYXRhIHRhYmxlIGFuZCB5b3UgbmVl
ZCBpdCB0bwotICAgICAgICAvLyBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFzdCBhbmQgc2xv
dyBwYXRoLCB0aGVuIHlvdSB3YW50IHRvIHVzZSB0aGlzLgotICAgICAgICAvLyBJdCB3aWxsIGdp
dmUgdGhlIHNsb3cgcGF0aCB0aGUgc2FtZSB2YWx1ZSByZWFkIGJ5IHRoZSBmYXN0IHBhdGguCi0g
ICAgICAgIEdldFB1dEluZm8gY29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUpOwotICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLSAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxl
IGNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1f
aW50ZXJwcmV0ZXI7CiAKQEAgLTk2NCw5ICs5NzksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dp
dGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCi0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2ln
bmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwotICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBCaW5h
cnlBcml0aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQcm9maWxlczsKLQogICAgICAgICBKdW1wTGlz
dCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3NX
aXRoQ2FsbEZyYW1lUm9sbGJhY2s7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAt
MTAwMCwxMSArMTAxMiwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGFzaE1hcDxjb25z
dCBJbnN0cnVjdGlvbiosIFVuaXF1ZVJlZjxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+PiBtX2luc3Ry
dWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGU7CiAKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0
aW1pemVkOwotICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAg
IGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKIAotICAgICAgICBSZWZQdHI8RGlyZWN0SklUQ29kZT4g
bV9qaXRDb2RlOworICAgICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRDb2RlQmxvY2sgeyBudWxs
cHRyIH07CisgICAgICAgIFVubGlua2VkQ29kZUJsb2NrKiBtX3VubGlua2VkQ29kZUJsb2NrIHsg
bnVsbHB0ciB9OworCisgICAgICAgIE1hdGhJQ0hvbGRlciBtX21hdGhJQ3M7CisgICAgICAgIFJl
ZlB0cjxCYXNlbGluZUpJVENvZGU+IG1faml0Q29kZTsKKworICAgICAgICBKSVRDb25zdGFudFBv
b2wgbV9jb25zdGFudFBvb2w7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9n
bG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSB9OworICAgICAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsK
KyAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAgICAgICAg
QmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAg
ICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAg
ICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
czsKKworICAgICAgICBzdHJ1Y3QgTm90QUNvZGVCbG9jayB7IH0gbV9jb2RlQmxvY2s7CisKKyAg
ICAgICAgYm9vbCBtX2lzU2hhcmVhYmxlIHsgdHJ1ZSB9OwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgYXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFy
Z3VtZW50R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMSk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIpOworICAg
ICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsK
ICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBO
b25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0zMjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJl
Z1QxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdU
MiwgcmVnVDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1Qx
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzc1LDggQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiB9CiAKQEAgLTU3Myw3ICs1NzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3coY29uc3QgCiAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAg
ICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFy
eURvdWJsZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51bmFyeUFyaXRo
UHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJvZmlsZUluZGV4
KTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQ
cm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlv
biwgbmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0
aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmln
SW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRl
KTsKQEAgLTg5OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IElu
c3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRB
ZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gJm1fdW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJQyogYWRkSUMg
PSBtX21hdGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9u
VG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNG
YXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJ
bmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlv
blN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2Zp
bGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNS
ZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAg
ICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAK
QEAgLTEwMTUsMTAgKzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFy
eU1hdGhJQwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRo
UHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRo
UHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0
aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAg
IGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAt
MTA1NSwxMyArMTA2MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRo
SUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRo
SUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlm
IChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmICht
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0
aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNy
Y1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNo
RnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChy
ZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCBy
ZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpA
QCAtMTEyMCwxMyArMTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5
TWF0aElDCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
bWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAg
ICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBp
ZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsK
KyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwor
ICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
Yml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0
d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7
CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFi
ZWwoKTsKQEAgLTExNjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJ
bnN0cnVjdGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVs
bHB0cjsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2Zp
bGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29k
ZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4o
KS5tX3Byb2ZpbGVJbmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRl
Y29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9w
ZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjIw
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAg
ICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxl
KTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29k
ZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4o
KS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJ
VE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9u
VmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X211bChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVC
bG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklU
U3ViSUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAg
bV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAg
ICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBP
cENhbGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7
CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFt
ZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1Qy
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAgZW1pdExvYWQoY2FsbGVlLCBy
ZWdUMSwgcmVnVDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29k
ZSk7CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5z
dHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDcgKzM0MSw2IEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BD
YWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRD
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNsb3dQ
YXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC00NCw3ICs0NSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1
dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDE4ICs1NCwxOCBAQCBz
dGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYg
T3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlE
ICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWdu
ZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0Nv
dW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2Rl
LCBjaGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50
PihzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwog
CisKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJl
Z2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkp
LCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0
YSwgY2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAg
c3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9m
aWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyArNzksNyBAQCBzdGQ6OmVu
YWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9w
Y29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25z
dGFudCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlz
VmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1l
bnRzOwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBi
eXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3
YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlv
blNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCAtZmlyc3RG
cmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCByZWdUMSwgLWZp
cnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUo
KnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSksIHJl
Z1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEwMywxNiBAQCBKSVQ6OmNv
bXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVwT3BlcmF0aW9u
ID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAg
ICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxP
cGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRp
b24sIHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1l
bnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dl
c3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBp
bmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2Fk
Q29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJl
Z1QzLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJ
bmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RC
aWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0x
MjcsMTYgKzEzMSwxNiBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRl
bXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0
ZWNvZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1Qx
KTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZy
YW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0
ZXIsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkp
KTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFs
dWUoKSksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7Ci0KLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUu
bV9lY21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQo
Ynl0ZWNvZGUpOwogCkBAIC0xNDgsNyArMTUyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJ
bmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5m
b3MuYWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxs
KENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0g
LWJ5dGVjb2RlLm1fYXJndjsKQEAgLTE1Niw0MyArMTYwLDQ3IEBAIHZvaWQgSklUOjpjb21waWxl
Q2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVy
T2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0
VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxs
V2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
ICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1
bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21w
aWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKLXsKK2Jvb2wg
SklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVu
c2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KSB7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENh
bGwmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0lu
ZGV4KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29k
ZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewotICAg
IENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVEYXRhLm51bVBh
c3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVn
aXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxlRGF0YS5udW1M
b2NhbHMgPQorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZs
ZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOworICAgIHNodWZmbGVE
YXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAgIHNodWZmbGVEYXRhLT5u
dW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworICAg
IHNodWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lz
dGVyOworICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBieXRlY29kZS5tX2Fy
Z3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNo
dWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1ZmZsZURhdGEt
PmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0g
PQorICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBWYWx1ZVJlY292
ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAg
ICAgICAgIERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9Ci0g
ICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotICAgIHNo
dWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7Ci0gICAgaW5m
by0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZsZURhdGEtPmNh
bGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgIHNo
dWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1bXBMaXN0IHNs
b3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNo
dWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgbG9h
ZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVtcExpc3Qgc2xv
d1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywg
cmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgKnNo
dWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93Q2Fz
ZShzbG93UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CisgICAgaW5m
by0+ZnJhbWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAgICAgYXV0byBk
b25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjE4LDE0
ICsyMjYsMjUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAg
ICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAt
IENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8K
LSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNvZGVJRCAhPSBv
cF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZv
KENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0
ZWNvZGUsIGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRy
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0gVUlOVF9NQVg7
CisgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBpbmZvID0gbV91
bmxpbmtlZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5
cGVGb3Iob3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAg
ICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5k
ZXgpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlv
bkluZm8oKSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0
YW50OworICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50
KTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJ
bmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50
MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsK
KyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJl
c3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkp
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAg
aG9sZHMgY2FsbGVlLgpAQCAtMjM0LDE2ICsyNTMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUo
KSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5m
bzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChj
b21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBp
ZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5m
b0NvbnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25z
dGFudCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8
fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAg
YXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAs
IHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRv
IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAg
ICB9KTsKQEAgLTI1MywxMyArMjY4LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhz
ID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6
VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRp
b24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2Nh
dGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3Mywy
MCArMjg4LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAg
ICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCpt
X3ZtLCAqdGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0s
ICp0aGlzLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0
dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcgKzQxMCwzMCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9H
UFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRo
aXMpOwogfQpAQCAtNDE2LDEwICs0NDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0
b3Jfb3Blbihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihp
bnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVy
YXRvckdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBu
b3RPYmplY3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JH
UFIpKTsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BS
KSk7CkBAIC00MzIsMTkgKzQ1OCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
b3Blbihjb25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRl
cmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1v
dmUoaXRlcmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVj
bHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1l
bnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0
VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygp
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAK
ICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJv
d0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxp
bmsodGhpcyk7CiB9CkBAIC00NTIsNyArNDc2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZd
ICgpIHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBj
YXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcw
LDUwICs0OTMsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgog
ICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6
OkdlbmVyaWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBB
YnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7
CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0
YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpv
ZmZzZXRPZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3Rv
cmU4VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6
b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZz
ZXRPZlNlZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0
cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2tw
b2ludCgpOwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGlu
IHJlZ1QwCiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJl
c3VsdEdQUiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRl
clJlc3VsdEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cu
Ci0gICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
Y29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6ZG9udENsb2JiZXJSZWdpc3RlcjsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVy
Q2FsbFJlc3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2
ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAg
ICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRk
KGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMt
PmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRv
bmVHUFIpLCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVz
LT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BS
KSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAg
ICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5
SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFu
Y2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBz
Y3JhdGNoMSA9IHJlZ1QyOwotICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAg
ICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7
CisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRS
ZWdpc3RlcnMpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFs
bG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0g
c2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVt
cExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRv
bmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVy
YXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBnbG9iYWxHUFIpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHBy
IEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1w
bCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCku
cHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKwor
ICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
cmVzdWx0R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpA
QCAtNTI3LDU5ICs1NzcsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQo
Y29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVz
dWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyOwor
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsK
ICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9u
ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAg
ICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsK
IAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMt
PmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9i
amVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZO
b3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAg
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJS
ZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJh
d0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEp
OwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1Qw
KTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIp
OwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAg
ICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0
SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVn
ID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdU
MDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFt
ZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBB
ZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAg
bW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRl
Y29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODI2NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsOCArMzIsMTEgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNs
dWRlICJSZWdpc3RlclNldC5oIgogCisKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBQQ1RvQ29k
ZU9yaWdpbk1hcDsKKwogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBDb21tb25EYXRhOwogY2xhc3Mg
SklUQ29kZTsKQEAgLTE1OSwxMCArMTYyLDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29s
IHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgewotICAgICAgICBpZiAoIU9wdGlvbnM6
OnVzZURhdGFJQygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoSklU
Q29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgp
OwogICAgIH0KIApAQCAtMjIzLDYgKzIyNiw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTaGFy
ZWQoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlQXR0cmlidXRlID09IFNoYXJlQXR0cmlidXRlOjpT
aGFyZWQ7IH0KIAorICAgIHZpcnR1YWwgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2lu
TWFwKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorCiBwcml2YXRlOgogICAgIEpJVFR5cGUgbV9qaXRU
eXBlOwogICAgIFNoYXJlQXR0cmlidXRlIG1fc2hhcmVBdHRyaWJ1dGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00
NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQog
ewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5m
byhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1
YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNv
ZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJ
bmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRS
ZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6
OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0
aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAg
IG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRp
b24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAg
dm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+
c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBz
dHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwo
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7Cisg
ICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGppdC5jYWxs
KENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIG1fZG9uZSA9IGpp
dC5sYWJlbCgpOworfQorCiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKAogICAg
IENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAg
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTEwLDcgKzExOCw3IEBAIEpJ
VEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRl
SW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVl
UmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiAg
ICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2Fs
bFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQ
UikKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9j
ay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAgICwgbV9pc0xlbmd0aEFj
Y2Vzcyhjb2RlQmxvY2sgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9jay0+dm0oKS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2Uu
cGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAgLTEyMCw2ICsxMjgsMzUgQEAg
dm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIGdlbmVyYXRlRmFz
dENvbW1vbihqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNpemVGb3JMZW5n
dGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQog
CitzdGF0aWMgdm9pZCBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3MoSklUJiBqaXQsIEdQUlJl
ZyBzdHViSW5mb0dQUiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBzY3JhdGNoLCBHUFJSZWcgcmVzdWx0
KQoreworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2gpOworICAgIGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmUoKSkpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BS
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7
CisgICAgaml0LmxvYWRQcm9wZXJ0eShiYXNlLCBzY3JhdGNoLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dCB9KTsKKyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJbmxpbmVB
Y2Nlc3MubGluaygmaml0KTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7Cit9CisKK3ZvaWQgSklU
R2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0
LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBq
aXQubGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BS
KTsKKyAgICBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3Moaml0LCBzdHViSW5mb0dQUiwgQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNj
cmF0Y2gsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIG1fZG9uZSA9
IGppdC5sYWJlbCgpOworfQorCisKIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6SklUR2V0
QnlJZFdpdGhUaGlzR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBl
IGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHRoaXNS
ZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0xMzgsNiArMTc1LDE4IEBAIHZvaWQgSklUR2V0
QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpnZW5lcmEKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0
LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAordm9pZCBKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChK
SVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0
YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHVi
SW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9H
UFIsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUUHV0
QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJ
ZGVudGlmaWVyLAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJS
ZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCAKQEAgLTE0OSw2ICsxOTgsMzQgQEAgSklU
UHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcgogICAgIG1fc3R1YkluZm8tPnVz
ZWRSZWdpc3RlcnMuY2xlYXIoc2NyYXRjaCk7CiB9CiAKK3ZvaWQgSklUUHV0QnlJZEdlbmVyYXRv
cjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHVi
SW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6
OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKwor
ICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKworICAgIEdQUlJl
ZyBiYXNlID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIEdQUlJlZyBzY3Jh
dGNoID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEdQUlJlZyBzY3Jh
dGNoMiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAgR1BSUmVnIHZh
bHVlID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKworICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGF1dG8g
c2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBz
Y3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5sb2Fk
MzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0LnN0b3JlUHJvcGVy
dHkoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBiYXNlLCBzY3JhdGNoLCBzY3JhdGNoMik7CisgICAg
YXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmso
JmppdCk7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7CisKKyAgICBmaW5pc2hlZC5saW5rKCZqaXQpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgp
OworfQorCiB2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9B
c3NlbWJsZXImIGppdCkKIHsKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nl
c3M6OnNpemVGb3JQcm9wZXJ0eVJlcGxhY2UoKSk7CkBAIC0zMDAsNiArMzc3LDMyIEBAIHZvaWQg
SklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXQKICAgICBnZW5lcmF0ZUZhc3RDb21t
b24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAordm9p
ZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQm
IGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0
ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5m
b0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNl
OworICAgIEdQUlJlZyByZXN1bHQgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisK
KyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3Jh
dGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxw
ZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BS
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkp
KTsKKyAgICBqaXQuYm94Qm9vbGVhbih0cnVlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdCB9KTsKKyAg
ICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJbmxpbmVBY2Nlc3MubGlu
aygmaml0KTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRy
VGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25lID0gaml0LmxhYmVs
KCk7Cit9CisKIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OkpJVEluc3RhbmNlT2ZHZW5lcmF0b3Io
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsCiAgICAgY29uc3QgUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEdQUlJlZyByZXN1bHQsIEdQUlJlZyB2YWx1ZSwgR1BSUmVn
IHByb3RvdHlwZSwgR1BSUmVnIHN0dWJJbmZvR1BSLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAog
I2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25WYWxpZGF0aW9u
LmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIK
ICNpbmNsdWRlICJQdXRLaW5kLmgiCkBAIC0zOCwxMSArMzksMTE4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNsYXNzIENhbGxTaXRlSW5kZXg7CiBjbGFz
cyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVj
dCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBp
bnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCitzdHJ1Y3QgQmFzZWxpbmVE
ZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQ
UkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZv
OjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6
cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5m
bzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3Rl
cnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAg
Ly8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9jayBhbmQgaW5pdGlhbGl6
aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KKyAgICBzdGF0aWNfYXNzZXJ0
KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fz
c2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7Cisg
ICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gx
ID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIg
PSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9
IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjphcmd1bWVudEdQ
UjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG8gPSBHUFJJbmZvOjphcmd1bWVu
dEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjph
cmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJ
bmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0g
R1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAg
IHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUklu
Zm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZv
OjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnMgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBkb250Q2xvYmJlclJlZ2lzdGVyID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitz
dHJ1Y3QgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyB0aGlzVmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mbyA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6c2NyYXRjaDsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1
Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9maWxl
ID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJyYW5kID0gR1BSSW5mbzo6cmVnVDE7Cisg
ICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2Up
OworICAgIHN0YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5m
bzo6cmVnVDI7Cit9OworCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90ZWN0
ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDEyICsxNzAsMTgg
QEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZmZXImIGZhc3RQ
YXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAogICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwotICAgIAorCisg
ICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1
YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25l
ZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJs
b2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0
dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zbG93UGF0aEJlZ2luOwogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhD
YWxsOwpAQCAtOTgsNyArMjEyLDcgQEAgcHJvdGVjdGVkOgogICAgIEpTVmFsdWVSZWdzIG1fYmFz
ZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fc3RhcnQ7CitwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0aEp1
bXA7CiB9OwogCkBAIC0xMTEsNiArMjI1LDcgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVlUmVn
cyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBl
KTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAg
ICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHVi
SW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiBwcml2YXRlOgogICAgIGJvb2wg
bV9pc0xlbmd0aEFjY2VzczsKQEAgLTEyNCw2ICsyMzksNyBAQCBwdWJsaWM6CiAgICAgICAgIENv
ZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgICAgICBKU1Zh
bHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQ
UlJlZyBzdHViSW5mb0dQUik7CiAKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIp
OwogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogfTsKIApAQCAt
MTMyLDEwICsyNDgsMTEgQEAgcHVibGljOgogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSA9IGRl
ZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAotICAgICAgICBDb2RlQmxvY2sqLCBK
SVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFzZSwKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gs
IEVDTUFNb2RlLCBQdXRLaW5kKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9y
aWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENh
Y2hlYWJsZUlkZW50aWZpZXIsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdz
IHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0
S2luZCk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7
CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQg
c3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICAKICAgICBWX0pJVE9w
ZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsKIApAQCAtMTYzLDExICsyODAsOSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
IAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92
YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTkxLDggKzMw
Niw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxl
ciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAg
IE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAt
MjE2LDggKzMyOSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNy
b0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0
YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwog
fTsKIApAQCAtMjQxLDggKzM1Miw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0
UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1Bh
dGhKdW1wOwogfTsKIApAQCAtMjU1LDYgKzM2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNWYWx1
ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKICAg
ICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50
LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogfTsKIAogY2xhc3MgSklUSW5zdGFuY2VPZkdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CkBAIC0yNzcsOCArMzg3
LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExp
bmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CiAKLXByaXZhdGU6Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBh
dGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMDIsMTEgKzQxMCw5IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
IAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV9y
ZXN1bHQ7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMzMCw4ICs0
MzYsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDEzICszNSwzOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykK
IHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVD
b25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09w
ZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Cit9CisKK0FM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciBzcmMpCit7
CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KSB7Cisg
ICAgICAgIC8vIEFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0Nl
bGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwot
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7Cisg
ICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiArMTgxLDM2IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRpZgogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNl
bHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0
dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIp
KTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNzIGZ1
bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVz
cyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5W
YWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVS
ZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0
LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogfQogCiBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcp
KQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6
OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1f
Ynl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQi
KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4
KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmlu
c3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9i
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9j
aGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcg
KzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsK
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0
aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlu
c3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNT
RVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+
aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAx
KTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJ
bmRleCk7CkBAIC0yOTMsMjkgKzMxOCwzMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwotfQotCi1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2Zp
bGUsIEpTVmFsdWVSZWdzIHZhbHVlKQotewotICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5n
KCkpOwotCi0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUg
YnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVj
a2V0cyk7Ci0jZWxzZQotICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBi
aXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tl
dHMpOwotICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRz
LnBheWxvYWQpOwotICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0Jp
dHMudGFnKTsKLSNlbmRpZgotfQorICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlu
a1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30KKworLy9pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFs
dWVSZWdzIHZhbHVlKQorLy97CisvLyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsK
Ky8vCisvLyAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBi
dWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lm
IFVTRShKU1ZBTFVFNjQpCisvLyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUu
bV9idWNrZXRzKTsKKy8vI2Vsc2UKKy8vICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmls
ZS5tX2J1Y2tldHMpOworLy8gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlw
dG9yLT5hc0JpdHMucGF5bG9hZCk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVz
Y3JpcHRvci0+YXNCaXRzLnRhZyk7CisvLyNlbmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpN
ZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2Vu
ZGlmCkBAIC0zMjMsNDEgKzM1Miw0MiBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJv
ZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBK
U1ZhbHVlUmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZv
cihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKworICAg
IHB0cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNl
dEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVPZmZzZXRGb3I8Qnl0ZWNv
ZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRP
ZkZpcnN0QnVja2V0KCk7CisgICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgQWRkcmVzcyhzX21ldGFk
YXRhR1BSLCBvZmZzZXQpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQ
UlJlZyByZXN1bHRSZWcpCi17Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2Zp
bGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwotfQorLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyByZXN1
bHRSZWcpCisvL3sKKy8vICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBK
U1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKy8vfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0
YWRhdGEsIEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CiB9CiAjZW5kaWYKIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BS
KQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZm
X3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBz
Y3JhdGNoR1BSKQogewogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIGFy
cmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3Rv
cmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxl
KTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJl
Z2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCiB7
Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBsb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhcnJheVBy
b2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpKTsK
LSAgICB9CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRl
Y29kZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9m
ZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3JhdGNoR1BSKTsKIH0KIAog
QUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxS
ZWdpc3RlciBzcmMpCkBAIC0zODAsNyArNDEwLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9
IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25z
dGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVz
c0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTI2LDcgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAg
ICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTM2LDcgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3du
Q2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0LDExICs1NDQsNiBAQCBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAgICAgfQogfQogCi1BTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZp
cnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU2OSwxMSBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7
IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKICAgICBpZiAo
c3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwot
ICAgICAgICBlbHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50
T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAg
bW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3QpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC01NjYsMTEgKzU5MSw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRz
dDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3Rl
cklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNTk1
LDcgKzYxNSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKIAog
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lz
dGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2Nr
LT5pc0tub3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHZSZWcpKQogICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAtNjM3LDMwICs2NTcs
NyBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7CiAgICAgaWYg
KHRhcmdldCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2st
Pm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1BTFdBWVNfSU5MSU5FIEdl
dFB1dEluZm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSBieXRlY29kZSkKLXsK
LSAgICB1bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQgKyAxOyAvLyBIYXNoTWFw
IGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkR2V0
UHV0SW5mb3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdldFB1dElu
Zm9zLmVuZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFsdWUpOwot
ICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2dldFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBnZXRQdXRJ
bmZvLm9wZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0aFByb2ZpbGUgSklUOjpj
b3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0gICAgdWludDY0X3Qga2V5
ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpICsgMSkgPDwgMzIg
fCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0YUlEKTsKLSAgICBhdXRv
IGl0ZXJhdG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRl
cmF0b3IgIT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRl
cmF0b3ItPnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0aFByb2ZpbGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgbV9jb3BpZWRB
cml0aFByb2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJuIGFyaXRoUHJv
ZmlsZTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNl
dChpbnN0cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjgxLDYgKzY3
OCw2MCBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0
dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZz
ZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwg
bV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0
ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxv
YWQ4KEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSB2YWx1ZSwgY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlOCh2YWx1
ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgp
Lm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmUzMlRv
TWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBv
ZmZzZXQpCit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29k
ZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHNfbWV0YWRhdGFHUFIsIHJlc3Vs
dCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvbnN0
YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxv
YWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9nbG9i
YWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BSUmVnIHJl
c3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOworICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFudHNW
ZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7CisgICAgbG9hZDY0KEFkZHJlc3MocmVzdWx0LCBjb25z
dGFudC50b0NvbnN0YW50SW5kZXgoKSAqIHNpemVvZihKU1ZhbHVlKSksIHJlc3VsdCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNo
KGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFt
ZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNo
T2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZD
YXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTk5Nyw3ICs5OTcsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAKICAgICAvLyBjcmVhdGUganVt
cCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVt
ZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRj
aEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVj
b3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVj
b3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtl
ZFRhYmxlKTsKIApAQCAtMTAyNCw3ICsxMDI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2NoYXIoY29uc3QgSW5zdAogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBk
ZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtl
ZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBT
aW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5
dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAg
ICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwNDIs
NyArMTA0Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KIAog
ICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0
aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRl
Y29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAgIGxp
bmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDYgKzQzLDggQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJW
aXJ0dWFsUmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgor
CiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC01NCwxMSArNTYsMTQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgp
KSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgc3RvcmU2NChU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7Ci0g
ICAgICAgIGVsc2UKKyAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRP
d25lZEJ5VW5saW5rZWRDb2RlQmxvY2soc3JjKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBz
dG9yZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywg
cmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICs5MiwzNSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9m
aWxlLnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmpl
Y3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxs
b2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNG
aW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAg
IFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNo
UmVnID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKIAotICAg
IGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVsc2Ug
ewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0g
VHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVz
dWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywg
VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNl
cyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpLCBh
bGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2Jq
ZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJlZyk7CisK
KyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1t
UHRyKG51bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxs
b2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5
LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVn
LCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBl
bWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKKyAgICBt
dXRhdG9yRmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsK
KwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0
dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2Jq
ZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVtaXRTdG9y
ZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTEzMSw3ICsxMzQsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKICAgICAvLyBXZSBkb24ndCBqdW1w
IGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBj
dXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0
YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAg
ICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1Qw
LCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fZnVuY3Rp
b25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24pKSk7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CiAKQEAgLTE1NCwzMCArMTU4LDM4IEBAIHZv
aWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9
IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VW
YWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAv
LyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhp
cyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm90bywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
dG9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2
YWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9HUFIpOwog
ICAgIAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUg
YSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJ
bnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAg
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAs
IC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHBy
b3RvCi0gICAgICAgIHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHJl
c3VsdEdQUiwKKyAgICAgICAgdmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAgICAgICBz
dHViSW5mb0dQUiwKKyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNo
MSwgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCisK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCArMjA0LDEz
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXpl
OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpu
b25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0
YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgcmVn
VDIsIHJlZ1QxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOwot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgc3Rh
dGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09IGFyZ3Vt
ZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6
OnZhbHVlID09IGFyZ3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0
eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpA
QCAtMjQwLDcgKzI1MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQo
Y28KIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRM
b2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJl
Z1QwLCByZWdUMSwgcmVnVDApOwogCkBAIC0zNzQsNyArMzg1LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOworICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoJlJlZ2lzdGVyQXRPZmZzZXRM
aXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0RnVuY3Rp
b25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwogI2Vsc2UKQEAgLTM4Myw5ICszOTQsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiB9CiAKICNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKQogewotICAg
IEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBqaXQuY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0Zvcigm
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
OwpAQCAtNDExLDcgKzQyMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25z
dCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQsOSArNDQ0LDEwIEBAIHZv
aWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZvaWQgSklUOjplbWl0X29w
X3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5j
dGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0
aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUs
IHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0NzYsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RH
UFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUp
LCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNGYWxzZXlHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzQ5Myw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyArNTMyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8vIEZpcnN0LCBoYW5kbGUg
SlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0
cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1
bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CiAKQEAgLTU0Myw3
ICs1NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1CiAgICAg
Ly8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAg
SnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTU4MiwxNSArNTk1LDEzIEBAIHZv
aWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KIHZvaWQgSklUOjplbWl0X29w
X2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEpTVmFsdWUgc3BlY2lh
bFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7
Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0z
MigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQo
Ynl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAgIENDYWxsSGVscGVyczo6SnVt
cCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01l
dGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNvZGUsIE9wSm5lcVB0cjo6TWV0YWRhdGE6Om9m
ZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwogICAgIGVx
dWFsLmxpbmsodGhpcyk7CiB9CkBAIC02MjUsOCArNjM2LDEwIEBAIHZvaWQgSklUOjplbWl0X29w
X2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQ
UiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVl
UmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBh
ZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1Qw
KSwgdGFyZ2V0KTsKQEAgLTY0MCw3ICs2NTMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNjk1LDcgKzcwOCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAg
ICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BF
bnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJv
dywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9u
SGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTcxMSw3ICs3MjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfdGhyb3dfaGFuZGxl
ckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVu
dEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB0aHJvd25WYWx1ZUdQUiA9IGFyZ3VtZW50R1BS
MTsKQEAgLTcyMCw3ICs3MzQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICBq
aXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgYXJndW1lbnRHUFIwKTsKLSAgICBqaXQuY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKGFyZ3VtZW50R1BS
MCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KGFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gYXJndW1lbnRHUFIwOwpAQCAtOTA4LDcgKzkyMiw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MTgsNyAr
OTMzLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVT
dHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogfQogCkBAIC05MzEsNyArOTQ3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVy
KGNvbnN0IEluc3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJl
Z1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk2Nyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3Jj
VlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcp
OwogfQpAQCAtOTc4LDcgKzk5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25z
dCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcg
IT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0K
QEAgLTk5Myw3ICsxMDA5LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3Ry
dWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zm
c2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihu
dWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsK
IAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9j
aygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBPT1BTOiBUaGlzIGlzbid0IGVs
ZWdhbnQuIFdoeSBhcmVuJ3QgdGhleSBpbiB0aGUgY2FsbGVlIHNhdmUgYnVmZmVyLiBJIGd1ZXNz
IGJlY2F1c2Ugd2UgY2FuIE9TUiBleGl0IGhlcmU/CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRh
dGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwg
JnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyArMTAzMCwxMSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9v
ZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZFZp
cnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7Ci0gICAgaWYg
KGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5
dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxl
LCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUs
ICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5
ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwotICAgIGlmIChidWZmZXIg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewotICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSksIHJlZ3MpOwotICAg
ICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKQEAgLTEwNTMs
OCArMTA2MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAg
ICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhp
cyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVu
ZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0
LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRh
YmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsxMDg4LDE0IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRp
bmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBm
b3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRl
eCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rl
cikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgsIHVubGlu
a2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBh
cmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsK
ICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEw
OTksMjAgKzExMDcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJ
bgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsK
IAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFj
ayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJp
bmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBt
X2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAg
ICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0
YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNB
ZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dl
clJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVn
SG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTExMzMs
NyArMTE0Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAog
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE0
OCw3ICsxMTU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAog
CiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjYsNyArMTE3
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdU
MiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE4OCwx
MiArMTE5NywxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAg
ICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3Vy
IGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZv
aWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBp
bmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5u
dW1WYXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFy
cygpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBmb3IgKHNpemVfdCBqID0g
Q29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOwor
ICAgIAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7CiAKICAgICBlbWl0RW50ZXJPcHRp
bWl6YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEyMTIsNyArMTIyMyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9o
YW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6
OmVicCk7CkBAIC0xMzEwLDIzICsxMzIxLDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29w
ZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJl
SUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJl
Z1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJl
Z1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2Vs
bD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lz
dGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJl
Z1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcgKzEzNDks
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZFB0
cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFs
bG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6
Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9jYXRv
clJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRh
OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJl
RGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBj
YWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BD
cmVhdGVUaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRDYWxsZWUoKSwgY2FjaGVkRnVuY3Rp
b25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVh
bCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVD
YWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIGNh
bGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVz
LmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzNzksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qy
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCBy
ZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1
cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEzOTAsOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Qy
LCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CiAg
ICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQ
UiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5W
YWx1ZUdQUik7CkBAIC0xMzk0LDcgKzE0MDMsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVx
KGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxNDE0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsxNDI5LDExIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3Ry
dWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJ
bnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0lu
c3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNl
T2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVj
dG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwog
ICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVH
UFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
IH0KQEAgLTE0MzAsNyArMTQ0Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKIHsKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlG
cm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJl
RWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX3VubGlu
a2VkQ29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigp
KSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25D
b3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZFB0cihwdHIsIHJlZ1QwKTsKICAgICAg
ICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2hQdHIoQmVsb3csIHJlZ1QwLCBUcnVzdGVk
SW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBA
IC0xNDQwLDcgKzE0NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1CiAjZWxzZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJldHVy
blZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCi0gICAgICAgIG1v
dmVWYWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlc3VsdFJlZ3MpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkpOwogICAgICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAg
ICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0xNDUzLDggKzE0NjUsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBFbWl0IHRoZSBK
SVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgeworICAg
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDAp
OwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1c3Rl
ZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAotICAg
ICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRl
Q291bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQogfQogCkBAIC0xNTA5LDcgKzE1MjIs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1bWVudEdQUjAp
OwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1l
bnRHUFIzOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTUyMiw3ICsxNTM2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKGNvbnN0IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5l
cmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAg
LTE1NjQsMzQgKzE1NzgsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJ
bnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVn
ZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdl
eHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdl
eHAsIGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENv
bnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1v
bihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEp1bXAgbGF6
eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3Vt
ZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBy
ZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BS
MSk7CiAjZW5kaWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxv
Y2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25z
dGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9u
RGVjbCwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2Rl
Lm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRH
UFIyKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3Jf
ZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5j
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwg
JnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dl
bmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZt
KCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2MjEsMjMg
KzE2MzcsMjQgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNl
bHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBl
bWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgog
Ci0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlv
bkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdp
c2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAgICAg
T3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0
aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4
cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4
cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
KTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19n
ZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fz
eW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTY2
NCwyOSArMTY4MSwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1
CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAg
aW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1
ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
cmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAg
ICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQUjIpOworICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
Miwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXpl
SW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxs
b2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2l6ZUluZGV4LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVB
bmRQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OwogI2Vsc2UKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
TmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSgpLCByZWdUMik7CiAgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0
YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNzEyLDEwIEBA
IHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CisgICAgbV9pc1NoYXJlYWJsZSA9IGZhbHNlOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlv
biogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVn
aXN0ZXI7CiAKQEAgLTE3NzcsMjAgKzE3OTcsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3No
YWRvd19jaGlja2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAm
JiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMg
dHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExv
Z1NoYWRvd0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdU
MDsKLSAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUg
YSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7
Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNj
cmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFS
ZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIu
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFk
b3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0
Y2gyUmVnKTsKKyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Ro
aXNWYWx1ZSwgcmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tl
dFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChz
aGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkK
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBtX2lzU2hhcmVhYmxlID0gZmFsc2U7CisK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVDb250
cm9sRmxvdz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9u
ID0gbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7CkBAIC0xODYwLDcg
KzE4ODUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAg
bW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwogCiAgICAgZG9uZS5saW5rKHRo
aXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVn
cyk7CiB9CiAKQEAgLTE4ODYsNyArMTkxMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90
b3R5cGVfb2YoY29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwogICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFy
cmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5o
IgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0
aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50
cnkuaCIKQEAgLTI4NTUsNyArMjg1Niw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5
KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAK
LSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQgPSBsaW5rZWRUYWJsZS5tX2N0aURl
ZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIApAQCAtMjg4MCw3ICsyODgxLDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25z
dCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3Vs
dDsKICAgICBpZiAoa2V5LmlzSW50MzIoKSkKQEAgLTI5MDMsNyArMjkwNCw3IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHZvaWQqIHJlc3VsdDsKLSAgICBjb25zdCBT
dHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CiAKICAgICBpZiAoa2V5LmlzU3RyaW5nKCkpIHsKICAgICAgICAgU3RyaW5nSW1wbCogdmFsdWUg
PSBhc1N0cmluZyhrZXkpLT52YWx1ZShnbG9iYWxPYmplY3QpLmltcGwoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDcgKzM0OCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlkR1BSUmVnLCBJbnZh
bGlkR1BSUmVnKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7
CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw5MiArNDksMTAyIEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlW
YWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVn
VDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBpZiAobWV0
YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhO
dW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZh
bElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90Q2VsbC5s
aW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFzZUdQ
UiwgcHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnJlc3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0
QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzLCBy
ZWdUMik7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKICAgICAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgICAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+
CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5
dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGlm
IChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKLSAgICAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5
VmFsSW5kZXgrK107CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zm
c2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAg
QVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7
CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50
R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFy
Z3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0g
YXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwg
cHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNl
ZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBh
cmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVH
UFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsxNTksNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNjAs
OCArMTcwLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdU
MTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0g
YXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlH
UFIgPT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMTg3LDM0ICsxOTcsNDAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owot
ICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnJlc3VsdCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQo
KTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1l
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhh
c0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzIz
OSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMjM1LDI2ICsyNTMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9w
cml2YXRlX25hbWUoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBh
cmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldFByaXZh
dGVOYW1lT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMjY0LDcgKzI3
Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKQEAgLTMwMCwyMSArMzEyLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2Jy
YW5kKGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNl
dFByaXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwotICAg
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7CisK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRH
UFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiks
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVt
aXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJp
ZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI0LDE3ICszNDMsMjIgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwg
U2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0
ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsK
KwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nl
c3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRB
Y2Nlc3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVz
cyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BS
Myk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0zNDQsMjQgKzM2OCwxOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkg
dXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFu
ZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0
KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxk
ZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVz
LCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXpl
KT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsK
LSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblNldFByaXZhdGVC
cmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmCiAK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMzcwLDE5ICszODgsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hl
Y2tfcHJpdmF0ZV9icmFuZChjbwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJyYW5kLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdp
c3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7CiAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFu
ZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIH0K
IApAQCAtMzk0LDkgKzQyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0
ZV9icmFuCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFz
ZUdQUiwgYnJhbmRHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFy
Z3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5k
LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC00MDYsMjQgKzQzNSwxOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJh
aXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRU
eXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGlt
aXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzUsMzAgKzQ1OCw0MiBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0g
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHJlZ1QzKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwot
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJlZ1Q0KTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9maWxlR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgcHJvZmlsZUdQUik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiks
IHJlZ1QzLCByZWdUNCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBwcm9maWxlR1BSLCBzdHViSW5mb0dQUik7
CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICBnZW4u
c3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOworICAgIHN0dWJJbmZvLT5wdXRLaW5k
ID0gc3RkOjppc19zYW1lX3Y8T3AsIE9wUHV0QnlWYWxEaXJlY3Q+ID8gUHV0S2luZDo6RGlyZWN0
IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2Rl
KGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQo
Z2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUt
YmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTQ3NCwxNSArNTA5LDEyIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2Rl
ID0gRUNNQU1vZGU6OnN0cmljdCgpOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxw
dHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUg
PSBieXRlY29kZS5tX2VjbWFNb2RlOwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNDk4LDcgKzUzMCwx
NiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUg
ZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGdlbi5z
dHViSW5mbygpLCByZWdUMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQpOworICAgIGlm
IChpc0RpcmVjdCkKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSwgT3BQdXRCeVZhbERpcmVjdDo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAgZWxz
ZQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEJ5VmFsPigpLCBPcFB1dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBjYWxsT3BlcmF0aW9uKEFkZHJlc3MoYXJn
dW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFy
Z3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTUxMiw3ICs1NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBj
YWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU2NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUz
MywxOCArNTc0LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0
IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZH
L0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0
cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0g
ICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVy
bkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVn
VDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVH
UFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
ZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZChC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMo
cmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAgfQor
CiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpAQCAtNTcw
LDIwICs2MTcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAog
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
Mik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgdmFsdWVHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJbnZh
bGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNs
b3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQ
Uik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9IGJ5
dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQg
d3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2NTIsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKLSAg
ICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAg
VU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02MDMsMTMg
KzY2MCwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0aW9uID0g
cHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4g
dGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZv
KCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisgICAgUHJpdmF0ZUZpZWxkUHV0
S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworCisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQ
UjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQUjQsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50c0dQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1
c3RlZEltbVB0cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC02MjIsMTggKzY4MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZShjCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9w
dXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0MywxNCAr
Njk3LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3MzQsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlv
bnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzc0NCw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVn
VDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc1NSw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJp
YnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJl
Z1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNzA5LDcgKzc2Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFs
KGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJl
Z1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCBy
ZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzc3LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRl
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1Qz
LCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03
MjcsMjMgKzc4NiwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwg
YmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVE
ZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAg
IC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBz
aW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODI4LDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxC
eUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRp
b24oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwpAQCAtNzgxLDI0ICs4NTIsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChj
b25zdCBJbgogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7
CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNDsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVy
dHlHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemU7
Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeUlk
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fz
c2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC04MDgsNyArODc0LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtODQ1LDIyICs5MTEsMzMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2Up
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BS
LCBwcm9wZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBCYXNlbGluZURl
bEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0
aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJz
LgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmll
ciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5NjAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0
ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVu
dEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgY2FsbE9wZXJhdGlvbihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21h
TW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTks
MjQgKzk3OCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25z
dGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxl
dGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0
YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lm
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMDAsNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlv
bnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMg
YmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAg
ICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxs
SGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIgKzEw
MzUsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6cmVzdWx0KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJl
Z3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vz
c1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNjksMTcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNh
bGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDAzLDI2ICsxMDg5LDIw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKICAgICBtb3ZlKEpJ
VDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8
ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAzMCwyMiArMTExMCwzMSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
VlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vz
c1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiArMTE0MywxOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVj
dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSht
ZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTA3Myw4MyAr
MTE2NCw2MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2Ft
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpLCBkZWNsdHlwZShvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAg
ZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0
aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAg
ICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogICAgIAogICAgIGlmICgq
aWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkgewotICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1
YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7
Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgJm1ldGFkYXRh
Lm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUsIHJlZ1QxKTsKKyAg
ICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9m
ZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhOjpvZmZzZXRPZk1vZGUo
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNo
MzIoTm90RXF1YWwsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9k
ZTo6QXJyYXlMZW5ndGgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2Rl
TWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3Ro
TW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5
SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOwotCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJl
c3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVn
KTsKIH0KIApAQCAtMTE1OCwxNiArMTIyNywxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
LCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNDgsNTcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1l
bnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1
bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lk
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAg
Q2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0
aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRv
ciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNs
b3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQpAQCAtMTIwNiw3ICsxMzA4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0MSwxNiArMTM0MywxOSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRo
VGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0
QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTEyNjAsMjggKzEzNjUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdUMTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1l
bnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lm
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI5MSw3ICsxMzkwLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTMyOSwyMyAr
MTQyOCwzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0g
Ynl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0
byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3Rv
cmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUg
YmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0
ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5
cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhi
YXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisg
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHN0dWJJ
bmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/
IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisK
KyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRC
eUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDog
UHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5
dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4p
OwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUt
YmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0NzIsMTggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVl
LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQ
UjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTEzNzYsMjUgKzE0OTMsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lz
dGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRC
eUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBh
cmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8
fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlR1BSID09IGFyZ3VtZW50R1BS
MSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gZ2VuLnNsb3dQYXRoRnVu
Y3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKGdlbi5zbG93UGF0
aEZ1bmN0aW9uKCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTQw
NCw3ICsxNTE1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3Qg
YmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcv
RlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3Rz
LCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAg
ICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJu
QWRkcmVzcygpOwpAQCAtMTQ0MSwyMCArMTU1MiwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9i
eV9pZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBi
YXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZS
ZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZv
R1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkluQnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpA
QCAtMTQ2MywxNCArMTU4NSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29u
c3QgSW5zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsr
XTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xNDgwLDI4ICsxNjA1LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25z
dCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNz
ZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
c3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4K
ICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVu
ayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2MjksMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJv
ZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NjQsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbElu
ZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0aW9uKEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBk
c3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BS
MywgYXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1
NTYsNTkgKzE2ODYsNzAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJ
bgogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJh
c2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJv
ZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVBy
b2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVD
YWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRo
ZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZl
IGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVj
bHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0eXBlKQogewotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKIAotICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHVi
SW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBl
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1By
aXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklU
OjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewotICAg
IEFTU0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAg
VU5VU0VEX1BBUkFNKHByb3BlcnR5KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0g
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2
YXRlQnJhbmQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1tt
X2luQnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2
YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOwor
ICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTE2MTgsMjcgKzE3NTksMjEgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRl
U2xvdyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IHJlZ1QxOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5T3JCcmFuZEdQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpLCBkZWNsdHlw
ZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gdHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX25hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NTIsNyArMTc4Nyw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKGMKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUu
bV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNs
b3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
cHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTY2NiwxOSArMTgwMSwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVfYnJh
bmQoCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZUJyYW5kPigpOwotICAgIGVtaXRIYXNQ
cml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsK
KyAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwg
Ynl0ZWNvZGUubV9icmFuZCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KQordm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwg
QWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9u
V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFy
SW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2g4KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7Ci0gICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHJlZ1QwKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRlcHRoOyArK2kpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CkBAIC0xNjg4LDYgKzE4MjYsNyBAQCB2b2lk
IEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNzAxLDcgKzE4NDAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRT
Y29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QxKTsKICAgICAgICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7
CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRy
ZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihj
b25zdGFudFNjb3BlKSwgcmVnVDApOwpAQCAtMTcxNSw3ICsxODU0LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFu
dFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwg
bV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwogICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzk0LDg3
ICsxOTMzLDEwNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fcmVzb2x2ZVR5cGU7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
ICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUlu
ZGV4KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUlu
ZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9u
KTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIC8vIElmIHdlIHByb2ZpbGUgY2VydGFpbiByZXNv
bHZlIHR5cGVzLCB3ZSdyZSBnYXVyYW50ZWVkIGFsbCBsaW5rZWQgY29kZSB3aWxsIGhhdmUgdGhl
IHNhbWUKKyAgICAvLyByZXNvbHZlIHR5cGUuCiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9k
dWxlVmFyKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52
aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0g
TW9kdWxlVmFyKSAKKyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNv
bHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVudCgpLCByZWdUMCk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJs
b2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICAgICAgcHRyZGlmZl90
IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOworCisgICAgICAgIGF1dG8gY2xvc3VyZVZhckdlbmVy
YXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BS
ZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Nj
b3BlIENsb3N1cmVWYXIiKTsKKyAgICAgICAgfTsKIAotI2RlZmluZSBSRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5l
cmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10g
PSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVTT0xWRV9TQ09QRV9HRU5F
UkFUT1IpCisgICAgICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5l
cmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAi
QmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MiKTsKICAgICAgICAgfTsKLSN1bmRlZiBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgorCisgICAg
ICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAg
ICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgc3Rk
OjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgZ2VuZXJpYyIpOworICAgICAg
ICB9OworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gY29kZTsKKyAgICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xv
c3VyZVZhcikKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5l
cmF0b3IpOworICAgICAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0
dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljUmVzb2x2ZVNjb3Bl
R2VuZXJhdG9yKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogICAgIH0KIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciog
dGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Omdl
bmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5
cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRo
dW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJ
bnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKworICAgIENDYWxsSGVscGVycyBqaXQ7CisKICAgICB1
c2luZyBNZXRhZGF0YSA9IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzY29wZUdQUiA9IHJlZ1Q2OyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xv
dyBwYXRoLgogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CiAg
ICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0
aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1
cm5BZGRyZXNzKCk7CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVn
VDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBy
ZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExp
c3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFs
aWRHUFJSZWcpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BS
UmVnKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykg
ewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhn
bG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmpl
Y3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zh
ckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBh
dXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykgewotICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURl
cHRoKSksIHJlZ1QxKTsKKyAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAg
IGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7CiAKLSAgICAgICAgTGFiZWwgbG9vcCA9IGxh
YmVsKCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7Cisg
ICAgICAgIExhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgSnVtcCBkb25lID0gaml0
LmJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAg
ICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICAgICAgICAgIGp1bXAo
KS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5z
dWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5qdW1wKCkubGlu
a1RvKGxvb3AsICZqaXQpOwogICAgICAgICB9Ci0gICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZd
IChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewpAQCAtMTg4MiwxMiArMjAzOSwxMiBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2Nr
KCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAgICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3Qo
KSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIpOwot
ICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKLSAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmpl
Y3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2go
KSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAg
ICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6
b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAg
ICAgaml0Lm1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCkBAIC0xODk3LDExICsyMDU0LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29w
ZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2Jh
bFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAg
ICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
LSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAg
ICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTE5MDksNyArMjA2Niw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xv
c3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAg
ICBjYXNlIE1vZHVsZVZhcjoKQEAgLTE5MTksODMgKzIwNzYsNDUgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5Lmxp
bmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFs
TGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5
cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIg
fHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAg
ICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1w
TGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0
eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Cisg
ICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9m
UmVzb2x2ZVR5cGUoKSksIHJlZ1QwKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgYXV0byBlbWl0Q2FzZSA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGpp
dC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwor
ICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOworICAgICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgIG5vdENhc2UubGluaygmaml0KTsKKyAg
ICAgICAgfTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgZW1pdENh
c2UoR2xvYmFsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHkpOworICAgICAg
ICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5q
dW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwot
ICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCi0g
ICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
dGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAg
YXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Nj
b3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRp
b25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2Nh
dGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5F
X1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBl
IyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRo
dW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICBy
ZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQu
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX3Jl
c29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfUkVTT0xW
RV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8g
VGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0
aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUg
cmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwNjUsNiArMjE4NCw3IEBAIHZv
aWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0yMTc4LDcgKzIyOTgsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yMTg2LDkgKzIzMDYsOSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEZyb21TY29wZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBk
c3QsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogI2Vsc2UgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yMTk2LDQxICsyMzE2LDUwIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUg
PSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBSZXNvbHZlVHlwZSBw
cm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2Rl
SW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2Rl
SW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rp
b24pOworCisgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAg
ICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVW
YXIsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisK
KyAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10g
KFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1
bmsodm0sIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX2dl
dF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0byBnZW5lcmljR2V0
RnJvbVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpn
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBv
cF9nZXRfZnJvbV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0g
cmVnVDY7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1Owog
Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRyX3Qq
IG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9v
cGVyYW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRp
ZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Jm1ldGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNk
ZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9z
Y29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZF
X1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNj
b3BlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0
YUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVH
UFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0
YUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdl
bmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0K
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYg
KHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdl
dENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgY29k
ZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0
b3IpOworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZy
b21TY29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdl
dEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVu
a05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJh
dGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4g
cmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsg
Z2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAv
IEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgpAQCAtMjIzOSw5OSArMjM2OCw4OCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6
TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBSRUxFQVNFX0FTU0VSVCh0
aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1
cm5BZGRyZXNzKCk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIGppdC50YWdSZXR1cm5B
ZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRh
R1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1l
dGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFk
YXRhU3RydWN0dXJlT2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVH
UFIsIHJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywg
cmVnVDEpKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSkpOworICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJl
ZyBzY29wZUdQUikgeworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBP
cEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCkpLCByZWdUMSk7Cisg
ICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICBqaXQubG9hZDMyKEFk
ZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKICAgICB9OwogCi0gICAg
YXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBt
X3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVD
VF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJl
Z1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNz
KHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJ
bnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Qb2lu
dGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihy
ZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJl
ZywgcmVnKTsKLSAgICB9OwotCiAgICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAoR1BS
UmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgewogICAgICAgICBzdGF0aWNfYXNzZXJ0
KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BS
KTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworICAgICAgICBqaXQubHNoaWZ0NjQo
VHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0LmFkZFB0cihzY29wZUdQ
Uiwgb3BlcmFuZEdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CiAgICAg
fTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBi
b29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVy
ZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BS
KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0
IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRp
dGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmpl
Y3Rpb24uCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwogICAg
ICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKICAgICAgICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7CiAgICAgICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2ggPSByZWdUMjsKIAotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJk
YTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBi
YXNlLCByZWdUMyk7CisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1w
KHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVx
dWFsLCBiYXNlLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJh
bmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIG9mZnNldCk7CiAgICAgICAgICAgICBp
ZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0g
YnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91
dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZz
ZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlz
KTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
KTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0
T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAg
ICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAg
IGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5uZWczMihvZmZzZXQpOworICAgICAg
ICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IGppdC5sb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgog
ICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGly
ZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAg
ZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6
Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIocmVn
VDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJy
YW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENs
b3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOworICAgICAg
ICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1l
dGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsKICAgICAgICAgICAgIGVtaXRHZXRD
bG9zdXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFy
OgpAQCAtMjM0MSw4NiArMjQ1OSw2MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0g
ICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAg
ICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBl
KTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0
UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAg
ICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZh
bHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGppdC5sb2Fk
MzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwg
cmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIg
PSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
aml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAg
IEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3Bl
cnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9
IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5r
KCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Cisg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXIubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQu
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5q
dW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGlu
aygmaml0KTsKIAotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQorICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZh
dWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVh
azsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fz
c2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJl
Z1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJv
ZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0
YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVj
a2V0KCkpKTsKIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nh
c2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93
Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Nj
b3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAK
LSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Nj
b3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAg
aWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkp
IFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAg
ICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUs
ICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQot
Rk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0j
dW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRv
cihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9u
IGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAg
ICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNDQ5LDcgKzI1NDQsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgQ2FsbCBvcGVyYXRpb24g
PSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBq
aXQuZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKIAotICAgIGppdC5zdG9yZTY0
KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVz
cyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgp
ICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICBqaXQubW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0
ZXIpOwogCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTI0NzEsODYgKzI1NjYsNzYgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUq
IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5
V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2lu
dFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3Jp
dGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0
b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDAp
OwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNz
KHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJh
bmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0g
Y29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUg
PSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xv
dCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRT
bG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsK
IAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29s
IGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29s
dmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJ
bmZvLnJlc29sdmVUeXBlKCk7CisKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGlu
amVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQg
dGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hl
Y2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNo
ZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMg
Zm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LgorICAgICAgICAgICAgLy8gQWRkaXRp
b25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0
aW9uLgorICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOworICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICAgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworCiAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAKICAgICAgICAgICAgIGppdEFzc2Vy
dChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAg
bG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgICAgICAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwogICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAg
ICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0Vp
Z2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgc3RvcmVQdHIocmVn
VDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9m
ZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNl
IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNv
bnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0g
ICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0gICAgICAgICAg
ICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkg
JiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisgICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBy
ZWdUMCk7CisgICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSwgcmVn
VDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDApOworCisgICAgICAgICAg
ICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLmluaXRpYWxpemF0
aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKICAgICAg
ICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBj
YW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4K
LSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAg
ICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFs
dWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUq
Pigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCksIHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QxKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3
aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRj
aHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xv
YmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwg
bWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
Y29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKworICAgICAgICAgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0
ZVdhdGNocG9pbnQocmVnVDEpOworCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1Qw
KSk7CisKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBj
YXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwg
bWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKworICAg
ICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
T3BlcmFuZCgpLCByZWdUMik7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50
KHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qx
KTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAg
ICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWln
aHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSk7CisKICAgICAg
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yNTY0LDU4
ICsyNjQ5LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAg
ICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
Ci0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGlj
YWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVl
IHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAgICAgICBpc0dsb2Jh
bExleGljYWxWYXIubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotCi0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAg
ICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmso
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
KyAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1cmVWYXIvIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21waWxlIHRoaW5ncworICAg
IC8vIHRoYXQgd2F5IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2UndmUgcHJvdmVuIHRoYXQg
aXMgdGhlIHR5cGUgd2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJlVmFyLAorICAgIC8vIGFs
bCBDb2RlQmxvY2tzIHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFyCisgICAgLy8gaWYgdGhl
IHZhciBpbmplY3Rpb24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYgaXQgaXMgZmlyZWQsIHRo
ZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0CisgICAgLy8gbWF0dGVyIHdo
YXQgdHlwZSB3ZSBhcmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PT0gQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcik7CisgICAgZWxzZSBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIpCisgICAgICAgIGVt
aXRDb2RlKFJlc29sdmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgZW1pdENv
ZGUoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVsc2UgewogICAgICAg
ICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJ
bmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1QwKTsKICAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCisgICAgICAg
IEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsodGhpcyk7
CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwog
CiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CiAKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAogICAgICAgICBza2lw
VG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CiAg
ICAgfQogfQogCkBAIC0yNjI0LDE4ICsyNzAzLDIxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfdG9fc2NvcGUoY29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVz
b2x2ZVR5cGUoKTsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgUmVz
b2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGlmIChwcm9maWxl
ZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJZiBhbnkgbGlua2VkIENv
ZGVCbG9jayBzYXcgYSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBDb2RlQmxvY2tzIGFyZSBn
dWFyYW50ZWVkCisgICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZhci4KICAgICAgICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAg
ICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29w
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5z
dHJ1Y3Rpb24pOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJndW1lbnRHUFIwLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
CiAgICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVj
b2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9i
eXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBBU1NFUlQobV91
bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJl
bnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CkBAIC0yNjUyLDcgKzI3MzQsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lz
dGVyczo6ZWJwKTsKQEAgLTI3MDEsNyArMjc4Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9m
cm9tX2FyZ3VtZW50cyhjb24KICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3Vt
ZW50cywgcmVnVDApOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6
OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
LCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNzU5
LDcgKzI4NDEsNiBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKQEAgLTI3NjcsNyArMjg0
OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb24KICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGlu
ZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
Z1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yODIzLDcgKzI5MDQsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvCiB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0
b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CkBAIC0yODM5LDExICsy
OTE5LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKICAgICBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24g
bW9kZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBwcm9maWxl
IGl0IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEg
PT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CisgICAgaWYg
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVyYXRvck1ldGFk
YXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgewogICAg
ICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlZ1Q0OwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoVGVz
dDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKCh+SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSAmIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW51bWVy
YXRpb25Nb2RlTWFzaykpKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BFbnVtZXJh
dG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHNjcmF0Y2hH
UFIpOworICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok93blN0cnVjdHVyZU1vZGUpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmU4VG9NZXRhZGF0
YShzY3JhdGNoR1BSLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNl
dE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOworCiAgICAgICAgIGxvYWQzMihBZGRyZXNzKGVudW1l
cmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSksIGluZGV4R1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpKSk7CiAKQEAgLTI4ODEsNzggKzI5NjcsODcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHlOYW1lOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKIAotICAgIGF1dG8gcmVzdWx0
R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUVu
dW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3Rl
cnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZUVu
dW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNo
MzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHNjcmF0Y2gzKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcHJvcGVydHlHUFIpOwog
Ci0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1l
dGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdl
dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaDIp
OworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHNj
cmF0Y2gyLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CiAg
ICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KLSAgICBKdW1wIGlz
Tm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3Rl
ZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBpc05vdE93blN0cnVjdHVy
ZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVt
cCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7Cisg
ICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVh
bCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0
LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8gSWYgaW5kZXggaXMgbGVz
cyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3Mg
YW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1wIG91dE9mTGluZUFjY2Vz
cyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwor
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CisgICAgbG9hZDY0KEJh
c2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAo
KSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91dE9mTGluZUFj
Y2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1Qz
KTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1Qz
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDIpOwor
ICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2Ny
YXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBv
ZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnRw
dHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdU
MCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7
CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgb2Zm
c2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1
bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOwotICAgIHN0b3JlOChU
cnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJl
TW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsK
KyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCBieXRlY29kZSwg
T3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0
YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRoaXMpOwotICAgIEp1bXAg
aXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIEp1bXAgaXNOb3RJbmRl
eGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJlcGxhY2UgdGhlIHN0cmlu
ZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdU
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAg
ICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAKICAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIp
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdl
bik7CiAKICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjk2MSwxMCArMzA1Niw5IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFs
U2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwg
aXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93
UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5
SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVU
eXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9p
ZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhG
dW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpA
QCAtMjk3Myw3ICszMDY3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0
YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1Qx
KTsKKyAgICBvcjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwg
Ynl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEo
KSk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsK
IApAQCAtMzA2Miw2ICszMTU4LDEzIEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAK
K3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxl
Y3RTY3JhdGNoR1BSKG93bmVyKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw5ICsyMzYsOSBAQCBzdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICBpZiAoaXNKU0FycmF5
KGJhc2VDZWxsKSkgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9
PSBDYWNoZVR5cGU6OlVuc2V0CiAgICAgICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2Uo
KSA9PSBiYXNlQ2VsbAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2Fj
aGVhYmxlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkg
eworICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlM
ZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7
CiAKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJh
c2VDZWxsKSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBq
c0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5l
cmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVu
Y3Rpb24oa2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5
TGVuZ3RoKGxvY2tlcik7CkBAIC0yNDksOCArMjQ5LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNl
OjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgsIHByb3BlcnR5
TmFtZSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSlNTdHJpbmcoYmFzZUNlbGwpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5z
ZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmlu
Z0xlbmd0aChzdHViSW5mbykpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRD
b2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChzdHViSW5mbyk7
CisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdM
ZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbykpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBn
ZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChj
b2RlQmxvY2ssIHN0dWJJbmZvKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENv
ZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihr
aW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0U3RyaW5nTGVuZ3Ro
KGxvY2tlcik7CkBAIC0zMDQsNyArMzA0LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQog
ICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoKQogICAgICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJvbVByb3h5KSB7Ci0gICAgICAg
ICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVNlbGZQcm9wZXJ0eUFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKKyAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVy
YXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpH
ZXRCeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkp
OwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZv
clJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBAIC03MzEsMTEgKzczMSwx
MSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShKCiAgICAgICAgICAg
ICAgICAgb2xkU3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJ
bmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAg
JiYgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8s
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vz
czo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIHNs
b3QuY2FjaGVkT2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgICAgICYmICFvbGRTdHJ1Y3R1cmUt
Pm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAgICAgICAgICAmJiAh
aXNQcm94eSkgewogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgYm9v
bCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0
eVJlcGxhY2Uoc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIG9sZFN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChn
ZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElD
RXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwg
c2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBh
dGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemlu
Z1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7CkBAIC0xMTMyLDcgKzEx
MzIsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAogICAgICAgICAg
ICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlCiAgICAgICAgICAgICAgICAgJiYgIXNs
b3Qud2F0Y2hwb2ludFNldCgpCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0
ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhzdHViSW5m
bywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUg
PSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8s
IHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsK
ICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5U2VsZlBhdGNoLCBzdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBs
YWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpAQCAtMTU1Miw3ICsxNTUyLDcgQEAg
c3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogCiB2b2lkIHVubGlua0Nh
bGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5J
ZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxM
aW5rSW5mby5mYXN0UGF0aFN0YXJ0KCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBE
aXNhc3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2Fs
bExpbmtJbmZvKSk7CiAgICAgCiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5n
ZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPigpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVk
ZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIK
KyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhz
SW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Nj
b3BlLmgiCkBAIC0zNzAsNiArMzcxLDE0IEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRI
ZXVyaXN0aWNzKFYKICAgICAKICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVBy
ZWRpY3Rpb25zKCk7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6
QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2Vs
aW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxp
bmVDb2RlKSB7CisgICAgICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxp
bmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29kZUJs
b2NrLT5qaXROZXh0SW52b2NhdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJl
YWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5
SklUQ29tcGlsZSIsICgidGhyZXNob2xkIG5vdCByZWFjaGVkLCBjb3VudGVyID0gIiwgY29kZUJs
b2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJlIGxpZnRlZC4iKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEs
IE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2Vy
T3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNv
ZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQot
ICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0
eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEs
IHQyKQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRb
Y2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8g
cHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGlu
IHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAg
ICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRh
dGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAgICBk
aXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBs
bGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9m
aWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1l
dGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BO
ZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAg
ICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAg
dXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQz
KQogICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJp
YSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQot
ICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5h
cnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAg
IHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAg
ZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVj
dCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJv
ZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAg
ICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMsIHQy
KQogICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcs
IC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0gICAg
ICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQog
ICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUo
dDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsx
MTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAg
ICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAu
b3AxTm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAg
ICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0
NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFk
eQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0g
ICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVw
ZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51
bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0
MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3Jv
IGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVy
YW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVs
eSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFn
LCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAg
ICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJ
bnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0
MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEsMTMg
QEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSBQQywg
YTEKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBidHB6
IHIwLCAucmVjb3ZlcgotCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisgICAgICAgICAgICAj
IEJhc2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFudCBw
b29sLgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgICAgICAgICBs
b2FkcCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2Rl
QmxvY2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwogICAgICAgICAgICAg
aWYgQVJNNjRFCiAgICAgICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlND
OjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6Omxvb3BPU1JFbnRy
eSkgKiBQdHJTaXplLCBhMgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdh
dGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0RXF1
YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1l
LCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0
eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQK
LQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0s
IHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3MCw3IEBAIG1hY3Jv
IHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJh
dGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3Jl
cSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2Zp
bGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJp
dGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpA
QCAtMTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25l
Z2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0
dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0
eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2Zp
bGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikK
QEAgLTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9w
TmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdp
IHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQ
cm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFBy
b2ZpbGVJbnQsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAg
YnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAw
MDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAg
ICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0
MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE2
MCw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUs
IHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBl
LCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3JocywgdDAp
CiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21T
dG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRl
Z2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmls
ZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBkaXNwYXRj
aCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRh
ZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0
MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVt
YmVyLCB0NSwgdDIpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50
T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVy
SW50LCB0NSwgdDIpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6
CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA0LDkgKzExOTYsOSBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAKICAgICAub3AyTm90SW50OgogICAgICAg
ICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVm
aW5pdGVseSBub3QuCi0gICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51
bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisg
ICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmls
ZUludE51bWJlciwgdDUsIHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBjaTJk
cyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBm
dDEKQEAgLTE1MTgsNyArMTUxMCw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X2lk
X2RpcmVjdCwKIGVuZCkKIAogIyBUaGUgYmFzZSBvYmplY3QgaXMgZXhwZWN0ZWQgaW4gdDMKLW1h
Y3JvIHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwgbW9kZU1ldGFkYXRhTmFtZSwg
dmFsdWVQcm9maWxlTmFtZSwgc2xvd0xhYmVsLCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuKQorbWFj
cm8gcGVyZm9ybUdldEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LCBtb2RlTWV0YWRhdGFOYW1lLCB2
YWx1ZVByb2ZpbGVOYW1lLCBzbG93TGFiZWwsIHNpemUsIG1ldGFkYXRhLCByZXR1cm4sIGRvQXJy
YXlQcm9maWxlKQogICAgIG1ldGFkYXRhKHQyLCB0MSkKICAgICBsb2FkYiAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6OiVtb2RlTWV0YWRhdGFOYW1lJS5tb2RlW3QyXSwgdDEKIApAQCAtMTU0Niw3
ICsxNTM4LDcgQEAgbWFjcm8gcGVyZm9ybUdldEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LAogLm9w
R2V0QnlJZEFycmF5TGVuZ3RoOgogICAgIGJibmVxIHQxLCBjb25zdGV4cHIgR2V0QnlJZE1vZGU6
OkFycmF5TGVuZ3RoLCAub3BHZXRCeUlkVW5zZXQKICAgICBtb3ZlIHQzLCB0MAotICAgIGFycmF5
UHJvZmlsZSglb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6OiVtb2RlTWV0YWRhdGFOYW1lJS5hcnJh
eUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCB0MCwgdDIsIHQ1KQorICAgIGRvQXJyYXlQcm9maWxl
KHQwLCB0MiwgdDUsIHQxKQogICAgIGJ0aXogdDAsIElzQXJyYXksIHNsb3dMYWJlbAogICAgIGJ0
aXogdDAsIEluZGV4aW5nU2hhcGVNYXNrLCBzbG93TGFiZWwKICAgICBsb2FkQ2FnZWRKU1ZhbHVl
KEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQwLCB0MSkKQEAgLTE1NjgsNyArMTU2MCwxMCBA
QCBlbmQKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X2lkLCBPcEdldEJ5SWQsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIGdldChtX2Jhc2Us
IHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxsKHNpemUsIHQwLCB0MywgLm9wR2V0
QnlJZFNsb3cpCi0gICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BHZXRCeUlkLCBtX21vZGVNZXRh
ZGF0YSwgbV9wcm9maWxlLCAub3BHZXRCeUlkU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHJldHVybikK
KyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEdldEJ5SWQsIG1fbW9kZU1ldGFkYXRhLCBtX3By
b2ZpbGUsIC5vcEdldEJ5SWRTbG93LCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuLAorICAgICAgICBt
YWNybyAoY2VsbEFuZEluZGV4aW5nVHlwZSwgbWV0YWRhdGEsIHNjcmF0Y2gxLCBzY3JhdGNoMikK
KyAgICAgICAgICAgIGFycmF5UHJvZmlsZShPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptX2FycmF5UHJv
ZmlsZSwgY2VsbEFuZEluZGV4aW5nVHlwZSwgbWV0YWRhdGEsIHNjcmF0Y2gxKQorICAgICAgICBl
bmQpCiAKIC5vcEdldEJ5SWRTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRo
X2dldF9ieV9pZCkKQEAgLTMwMDIsNyArMjk5Nyw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
aXRlcmF0b3Jfb3BlbiwgT3AKIAogICAgIGxvYWRWYXJpYWJsZShnZXQsIG1faXRlcmF0b3IsIHQz
KQogICAgIGJ0cW56IHQzLCBub3RDZWxsTWFzaywgLml0ZXJhdG9yT3BlbkdlbmVyaWNHZXROZXh0
U2xvdwotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JPcGVuLCBtX21vZGVNZXRh
ZGF0YSwgbV9uZXh0UHJvZmlsZSwgLml0ZXJhdG9yT3BlbkdlbmVyaWNHZXROZXh0U2xvdywgc2l6
ZSwgbWV0YWRhdGEsIHN0b3JlTmV4dEFuZERpc3BhdGNoKQorICAgIHBlcmZvcm1HZXRCeUlESGVs
cGVyKE9wSXRlcmF0b3JPcGVuLCBtX21vZGVNZXRhZGF0YSwgbV9uZXh0UHJvZmlsZSwgLml0ZXJh
dG9yT3BlbkdlbmVyaWNHZXROZXh0U2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlTmV4dEFuZERp
c3BhdGNoLCBtYWNybyhhLCBiLCBjLCBkKSBlbmQpCiAKIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0
TmV4dFNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Bl
bl9nZXRfbmV4dCkKQEAgLTMwNjEsNyArMzA1Niw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
aXRlcmF0b3JfbmV4dCwgT3AKIAogICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fdmFsdWUsIHQzKQog
ICAgIGJ0cW56IHQzLCBub3RDZWxsTWFzaywgLmdldERvbmVTbG93Ci0gICAgcGVyZm9ybUdldEJ5
SURIZWxwZXIoT3BJdGVyYXRvck5leHQsIG1fZG9uZU1vZGVNZXRhZGF0YSwgbV9kb25lUHJvZmls
ZSwgLmdldERvbmVTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1
ZSkKKyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV9kb25lTW9kZU1l
dGFkYXRhLCBtX2RvbmVQcm9maWxlLCAuZ2V0RG9uZVNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9y
ZURvbmVBbmRKbXBUb0dldFZhbHVlLCBtYWNybyhhLCBiLCBjLCBkKSBlbmQpCiAKIC5nZXREb25l
U2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2dl
dF9kb25lKQpAQCAtMzA4Niw3ICszMDgxLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVy
YXRvcl9uZXh0LCBPcAogICAgICMgUmVsb2FkIHRoZSBuZXh0IHJlc3VsdCB0bXAgc2luY2UgdGhl
IGdldF9ieV9pZCBhYm92ZSBtYXkgaGF2ZSBjbG9iYmVyZWQgdDMuCiAgICAgbG9hZFZhcmlhYmxl
KGdldCwgbV92YWx1ZSwgdDMpCiAgICAgIyBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBp
dGVyYXRvciByZXN1bHQgaXMgYSBjZWxsIGhlcmUgc2luY2Ugd2Ugd2lsbCBoYXZlIHRocm93biBh
biBlcnJvciBiZWZvcmUuCi0gICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck5leHQs
IG1fdmFsdWVNb2RlTWV0YWRhdGEsIG1fdmFsdWVQcm9maWxlLCAuZ2V0VmFsdWVTbG93LCBzaXpl
LCBtZXRhZGF0YSwgc3RvcmVWYWx1ZUFuZERpc3BhdGNoKQorICAgIHBlcmZvcm1HZXRCeUlESGVs
cGVyKE9wSXRlcmF0b3JOZXh0LCBtX3ZhbHVlTW9kZU1ldGFkYXRhLCBtX3ZhbHVlUHJvZmlsZSwg
LmdldFZhbHVlU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlVmFsdWVBbmREaXNwYXRjaCwgbWFj
cm8oYSwgYiwgYywgZCkgZW5kKQogCiAuZ2V0VmFsdWVTbG93OgogICAgIGNhbGxTbG93UGF0aChf
bGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfZ2V0X3ZhbHVlKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIwLDcgKzE0MjAsOCBAQCBlbmQKIAog
bWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlvbikKICAgICBsb2FkcCBDb2Rl
QmxvY2tbY2ZyXSwgdDAKLSAgICBiYWRkaXMgaW5jcmVtZW50LCBDb2RlQmxvY2s6Om1fbGxpbnRF
eGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwg
LmNvbnRpbnVlCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDBd
LCB0MAorICAgIGJhZGRpcyBpbmNyZW1lbnQsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9j
b3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgYWN0aW9uKCkKICAgICAuY29udGludWU6CiBlbmQK
QEAgLTE1MDMsNyArMTUwNCw4IEBAIG1hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29k
ZUJsb2MKICAgICBjb2RlQmxvY2tHZXR0ZXIodDEpCiAgICAgY29kZUJsb2NrU2V0dGVyKHQxKQog
ICAgIGlmIG5vdCAoQ19MT09QIG9yIENfTE9PUF9XSU4pCi0gICAgICAgIGJhZGRpcyA1LCBDb2Rl
QmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6
bV9jb3VudGVyW3QxXSwgLmNvbnRpbnVlCisgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGlu
dEV4ZWN1dGVDb3VudGVyW3QxXSwgdDAKKyAgICAgICAgYmFkZGlzIDUsIEJhc2VsaW5lRXhlY3V0
aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgICAgIGlmIEpTVkFMVUU2
NAogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQpAQCAt
MTYxNywxNCArMTYxOSwxNCBAQCBtYWNybyBmdW5jdGlvbkluaXRpYWxpemF0aW9uKHByb2ZpbGVB
cmdTCiAgICAgIyBvcHRpbWFsIHdheSBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgbW9yZSB0
aGFuIGZpdmUgcmVnaXN0ZXJzIGF2YWlsYWJsZQogICAgICMgZm9yIGFyYml0cmFyeSB1c2UgaW4g
dGhlIGludGVycHJldGVyLgogICAgIGxvYWRpIENvZGVCbG9jazo6bV9udW1QYXJhbWV0ZXJzW3Qx
XSwgdDAKLSAgICBhZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAgIyBVc2UgYWRkaSBiZWNhdXNlIHRo
YXQncyB3aGF0IGhhcyB0aGUgcGVlcGhvbGUKKyAgICBhZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAK
ICAgICBhc3NlcnQobWFjcm8gKG9rKSBicGd0ZXEgdDAsIDAsIG9rIGVuZCkKICAgICBidHB6IHQw
LCAuYXJndW1lbnRQcm9maWxlRG9uZQogICAgIGxvYWRwIENvZGVCbG9jazo6bV9hcmd1bWVudFZh
bHVlUHJvZmlsZXMgKyBGaXhlZFZlY3Rvcjo6bV9zdG9yYWdlICsgUmVmQ291bnRlZEFycmF5Ojpt
X2RhdGFbdDFdLCB0MwogICAgIGJ0cHogdDMsIC5hcmd1bWVudFByb2ZpbGVEb25lICMgV2hlbiB3
ZSBjYW4ndCBKSVQsIHdlIGRvbid0IGFsbG9jYXRlIGFueSBhcmd1bWVudCB2YWx1ZSBwcm9maWxl
cy4KICAgICBtdWxwIHNpemVvZiBWYWx1ZVByb2ZpbGUsIHQwLCB0MiAjIEFhYWFhaGhoaCEgTmVl
ZCBzdHJlbmd0aCByZWR1Y3Rpb24hCiAgICAgbHNoaWZ0cCAzLCB0MCAjIG9mZnNldCBvZiBsYXN0
IEpTVmFsdWUgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4KLSAgICBhZGRwIHQyLCB0MyAjIHBvaW50
ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBpbiBDb2RlQmxvY2s6Om1fYXJndW1lbnRW
YWx1ZVByb2ZpbGVzLgorICAgIGFkZHAgdDIsIHQzICMgcG9pbnRlciB0byBlbmQgb2YgVmFsdWVQ
cm9maWxlIGFycmF5IGluIHRoZSB2YWx1ZSBwcm9maWxlIGFycmF5LgogLmFyZ3VtZW50UHJvZmls
ZUxvb3A6CiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIGxvYWRxIFRoaXNBcmd1bWVudE9mZnNl
dCAtIDggKyBwcm9maWxlQXJnU2tpcCAqIDhbY2ZyLCB0MF0sIHQyCkBAIC0yNTYzLDYgKzI1NjUs
MTcgQEAgbWFjcm8gbm90U3VwcG9ydGVkKCkKICAgICBlbmQKIGVuZAogCisKK21hY3JvIHVwZGF0
ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisg
ICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0
YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQor
ZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUs
IG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKwogLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0
aGUgWDg2XzY0X1dJTiBjb25kaXRpb24gaGVyZSwgc2luY2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFs
cmVhZHkgYmUgZmFsc2Ugb24gV2luZG93cwogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMzcxNgogaWYgV0VCQVNTRU1CTFkgYW5kIG5vdCBYODZfNjRfV0lOCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRl
bnRpZmllci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDEw
IEBAIHB1YmxpYzoKICAgICBDYWNoZWFibGVJZGVudGlmaWVyKCkgPSBkZWZhdWx0OwogCiAgICAg
c3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21DZWxsKEpTQ2VsbCog
aWRlbnRpZmllcik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlm
aWVyJik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBVbmlxdWVkU3RyaW5nSW1wbCop
OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2soQ29kZUJsb2NrVHlwZSosIGNvbnN0IElkZW50aWZpZXImKTsKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZp
ZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBV
bmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmll
ciBjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21SYXdCaXRzKHVp
bnRwdHJfdCByYXdCaXRzKSB7IHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHJhd0JpdHMpOyB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50
aWZpZXImIGkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNo
ZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZp
ZXImIGkpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhjb2RlQmxvY2ssIGkuaW1wbCgpKTsKIH0KIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KENvZGVCbG9jayogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQordGVtcGxhdGUg
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29k
ZUJsb2NrVHlwZSogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIEFT
U0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxvY2stPmhhc0lkZW50aWZpZXIodWlkKSk7CiAg
ICAgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIodWlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNh
Y2hlZFR5cGVzLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJC
dWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUNhY2hlRXJyb3IuaCIKICNpbmNsdWRl
ICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQ
cm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFs
dWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHBy
b2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYg
cHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVB
cmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0Jp
Z0ludCgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25F
eGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODksNiArMjg5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zm
c2V0T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFi
bGUsIG1fcmFyZURhdGEpOyB9CiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZB
c1N0cmluZ0luUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1f
YXNTdHJpbmcpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxv
Y2tGb3JDYWxsKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwg
bV9jb2RlQmxvY2tGb3JDYWxsKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNl
dE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0
aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDksNyArMzA5LDYgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2
KEludDMyLCBldmFsVGhyZXNob2xkTXVsdGlwbGllciwgMTAsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYoVW5zaWduZWQsIG1heGltdW1FdmFsQ2FjaGVhYmxlU291cmNlTGVuZ3RoLCAyNTYsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIFwKLSAgICB2KEJvb2wsIHJhbmRvbWl6ZUV4ZWN1dGlvbkNv
dW50c0JldHdlZW5DaGVja3BvaW50cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYo
SW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JCYXNlbGlu
ZSwgMTAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJbnQzMiwgbWF4aW11bUV4ZWN1dGlv
bkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvclVwcGVyVGllcnMsIDUwMDAwLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICBcCkBAIC01MzIsNiArNTMxLDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJs
eUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZURhdGFJQywgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDSW5PcHRpbWl6aW5nSklULCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNTaGFyaW5nLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nLCB0
cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgLyogRmVhdHVyZSBGbGFncyAqL1wK
ICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3Jp
cHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Niw3
ICszOTYsOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpCiAgICAg
aWYgKE9wdGlvbnM6OnZhbGlkYXRlQnl0ZWNvZGUoKSkKICAgICAgICAgY29kZUJsb2NrLT52YWxp
ZGF0ZSgpOwogCi0gICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpCisgICAgaWYgKFJlZlB0cjxC
YXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9j
aygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlKQorICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0
aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAg
IGVsc2UgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpCiAgICAgICAgIHNldHVwTExJbnQoY29kZUJs
b2NrKTsKICAgICBlbHNlCiAgICAgICAgIHNldHVwSklUKHZtLCBjb2RlQmxvY2spOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50
ZXIuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUxMSW50VGllclVwQ291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgIHsKICAgICAgICAgaWYg
KE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3VGhy
ZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVs
bHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9y
QkJRT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0
TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAo
KSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNo
b2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNoZWNr
SWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKQEAgLTY1LDkgKzY1LDkgQEAgcHVibGlj
OgogICAgIHZvaWQgb3B0aW1pemVTb29uKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3
YXNtTExJbnRUaWVyc1VwVG9CQlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRp
b25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgICAg
ICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29uKCkp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhy
ZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9
CiAKICAgICBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBU
aWVyVXBDb3VudDo6VGllclVwQ291bnQoKQogewotICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25z
Ojp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVw
KCkpOwogfQogCiBUaWVyVXBDb3VudDo6flRpZXJVcENvdW50KCkgPSBkZWZhdWx0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGlt
aXplQWZ0ZXJXYXJtVXAodWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRh
dGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9w
dGltaXppbmcgYWZ0ZXIgd2FybS11cC4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlv
bnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAg
ICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVy
V2FybVVwKCkpOwogICAgIH0KIAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9s
ZFJlYWNoZWQoKQpAQCAtOTAsMTQgKzkwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXpl
TmV4dEludm9jYXRpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRh
dGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9w
dGltaXppbmcgbmV4dCBpbnZvY2F0aW9uLiIpOwotICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCwg
bnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9sZCgwKTsKICAgICB9CiAKICAgICB2b2lk
IG9wdGltaXplU29vbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0
YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0
aW1pemluZyBzb29uLiIpOwogICAgICAgICAvLyBGSVhNRTogTmVlZCBhZGp1c3RtZW50IG9uY2Ug
d2UgZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2FzbSBmdW5jdGlvbnMuCi0gICAgICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVs
bHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdP
cHRpbWl6ZVNvb24oKSk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hv
bGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQodWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGls
YXRpb25SZXN1bHQgcmVzdWx0KQpJbmRleDogU291cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9X
VEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwyMCBAQCBwdWJsaWM6CiAg
ICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KKyAgICBCYWcmIG9wZXJhdG9yPShCYWc8VCwgVT4mJiBvdGhlcikKKyAgICB7Cisg
ICAgICAgIGlmICh1bndyYXBwZWRIZWFkKCkgPT0gb3RoZXIudW53cmFwcGVkSGVhZCgpKQorICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgICAgIEJhZyBkZXN0cm95OworICAgICAgICBk
ZXN0cm95Lm1faGVhZCA9IHVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgbV9oZWFkID0gb3RoZXIu
dW53cmFwcGVkSGVhZCgpOworICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOworCisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICB+QmFnKCkKICAgICB7CiAgICAgICAgIGNs
ZWFyKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9QYWNrZWQuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL1dURi93dGYv
UGFja2VkLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYsMTAgQEAgcHVibGljOgogICAg
IH0KIAogICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQotICAgIFQm
IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQorCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFUgPSBUPgorICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3ZvaWRf
djxVPiwgVSY+Ojp0eXBlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQorCiAg
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhZ2V0KCk7IH0KIAogICAgIC8vIFRo
aXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29s
IGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVu
LWpzYy1zdHJlc3MtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cwkocmV2aXNpb24gMjgyNjc1KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtNzc2LDE3ICs3NzYsMTggQEAgZW5kCiAKICMg
RklYTUU6IG5lZWQgdG8gZml4IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTg3MDMgdG8gZW5hYmxlIHRoaXMgb24gTGludXgvTUlQUy4KIGRlZiBydW5CeXRlY29kZUNh
Y2hlSW1wbChvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMsICphZGRpdGlvbmFsRW52KQotICAg
IGlmICgkaG9zdE9TID09ICJkYXJ3aW4iKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNv
ZGUtY2FjaGUiCi0gICAgZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAkYXJjaGl0ZWN0dXJl
ICE9ICJtaXBzIikKLSAgICAgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlWFhYWFhY
IgotICAgIGVsc2UKLSAgICAgICAgc2tpcAotICAgICAgICByZXR1cm4KLSAgICBlbmQKKyAgICAj
IE9PUFMKKyAgICAjaWYgKCRob3N0T1MgPT0gImRhcndpbiIpCisgICAgIyAgICBmaWxlVGVtcGxh
dGUgPSAiYnl0ZWNvZGUtY2FjaGUiCisgICAgI2Vsc2lmICgkaG9zdE9TID09ICJsaW51eCIgJiYg
JGFyY2hpdGVjdHVyZSAhPSAibWlwcyIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNv
ZGUtY2FjaGVYWFhYWFgiCisgICAgI2Vsc2UKKyAgICAjICAgIHNraXAKKyAgICAjICAgIHJldHVy
bgorICAgICNlbmQKIAotICAgIG9wdGlvbnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9OUyAr
IG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlv
bnMKLSAgICBhZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVs
cGVycyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0
ZS50b19zLCAqdm1Db21tYW5kLCAkYmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0
cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyLCAqYWRkaXRpb25hbEVudikKKyAgICAjb3B0
aW9ucyA9IEJBU0VfT1BUSU9OUyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpb25zICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucworICAgICNhZGRSdW5Db21tYW5k
KCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1jYWNo
ZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5kLCAk
YmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJy
b3JIYW5kbGVyLCAqYWRkaXRpb25hbEVudikKIGVuZAogCiBkZWYgcnVuQnl0ZWNvZGVDYWNoZSgq
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438851</attachid>
            <date>2021-09-21 13:48:59 -0700</date>
            <delta_ts>2021-09-21 15:44:53 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>510660</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsMTAg
QEAgb3BfZ3JvdXAgOlByb2ZpbGVkQmluYXJ5T3AsCiAgICAgICAgIGxoczogVmlydHVhbFJlZ2lz
dGVyLAogICAgICAgICByaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZFR5cGVz
OiBPcGVyYW5kVHlwZXMsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxl
CisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
X2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTEsOSArMzUyLDEwIEBAIG9wX2dy
b3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgIF0sCiAgICAgYXJnczogewogICAgICAg
ICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg0LDkgKzM4NiwxMCBAQCBvcCA6bmVnYXRlLAog
ICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZDogVmlydHVhbFJl
Z2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLAorICAgICAgICBwcm9maWxl
SW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQ
cm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFy
aXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApAQCAtNDc4LDYgKzQ4MSw3IEBAIG9wIDpn
ZXRfYnlfaWQsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgbW9kZU1ldGFkYXRhOiBHZXRCeUlk
TW9kZU1ldGFkYXRhLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgIH0KIAogb3AgOmdldF9ieV9pZF93aXRoX3Ro
aXMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVj
a3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBAIFZhbHVlUHJvZmlsZSog
dmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJuICZtZXRhZGF0YS5tX3By
b2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK3VpbnRwdHJfdCB2YWx1
ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4KQoreworICAgIFVOVVNF
RF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9w
Y29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50
SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJu
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRvclByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZOZXh0UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRl
Y29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3JfbmV4dCkgeworICAgICAgICBzd2l0Y2ggKGNo
ZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4
dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZSgp
OworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXREb25lOiByZXR1cm4gQnl0ZWNvZGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkRvbmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck5leHQ6OmdldFZhbHVlOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlZhbHVl
UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfSBlbHNlIAorICAgICAgICByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZlByb2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVN
ZXRhZGF0YT4KIGJvb2wgaGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFk
YXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhW
TSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQot
ewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4o
bV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRN
YXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
dmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5r
SW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSAm
JiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwogdm9pZCBDYWxs
TGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVTcGVjaWZpY0Nh
bGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5OSwxMSBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9mcmFtZVNodWZm
bGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRVc2VzRGF0YUlD
cyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwotICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQ
Uik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BS
OwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9m
YXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZh
c3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJQyA9PSBVc2VE
YXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVn
aXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxM
aW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcgQEAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAgZ29Qb2x5bW9y
cGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVNYXNrKSk7CiAg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
aXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBw
cmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMubGluaygmaml0
KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBwcmVwLgogICAg
ICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQ
Uiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7
CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGNh
bGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
byk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICB1LmNv
ZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMu
bV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMubV9jYWxs
ZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxs
ZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEzICszNDQsMzQgQEAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQykK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIG51
bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBpZiAoaXNEYXRh
SUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVn
OjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRh
SUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0
YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKLSAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAgc2V0VXNlc0Rh
dGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywg
aml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlzVGFpbENhbGwo
KSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4g
ZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CiB9CiAKIHZv
aWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkK
QEAgLTM2OSwxNyArMzgxLDMyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0m
IHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIs
IG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQog
Cit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUoY2FsbExpbmtJ
bmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBK
U0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMo
Vk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgbV9jb2RlT3JpZ2lu
ID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBz
ZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAg
bV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247CisgICAg
aWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpIHsKKyAgICAgICAgLy8g
RklYTUU6IEl0J2QgYmUgbmljZSBpZiB0aGlzIGp1c3Qgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBz
dHJ1Y3R1cmUuCisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZy
YW1lU2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsK
KyAgICB9CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlD
Lm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxh
dGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpO
byk7CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAg
dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBq
aXQubGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0
UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQ
YXRoU3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwg
dGhpcyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1
bnNpZ25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2Vk
Q2FsbExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2Vu
dGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgewor
ICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2Fs
bCwKICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAg
ICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxp
emVEYXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsg
cmV0dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1
aW50OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRl
OgotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
QywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURf
UkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRo
SW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVi
bGljOgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQ
YXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVj
dEZhc3RQYXRoKENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWls
Q2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBz
dGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJv
b2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNl
RGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsy
NDksNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAot
ICAgIEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9z
bG93U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsK
ICAgICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZv
LCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJf
dCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlv
blR5cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9j
YXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxv
Y2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
bV9zbG93UGF0aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5h
bFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAK
QEAgLTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29k
ZU9yaQogICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3Qg
VW5saW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsg
Ly8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxs
eSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxU
eXBlOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlv
bjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZs
ZURhdGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsOCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlk
ZXIoKSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVD
b3VudGVyKCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9
CkBAIC0zMTgsNyArMzIwLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgQwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIAogICAgIG9wdGltaXplQWZ0ZXJX
YXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgaWYgKG90aGVyLm1fcmFyZURh
dGEpIHsKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwpAQCAtMzU5LDcgKzM2
MCw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAgIEFT
U0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2Vk
Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CisKICAgICB2
bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcwLDEwICszNzMsMTMg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2FuJ3Qg
Z2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJvY2Vz
cyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJvZHVj
ZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5lc3Mg
YW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2YgYW4g
VW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhlIGxp
dmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNpZGUg
VW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBiZXR3
ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhlIGJ5
dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5nIGFu
IFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CisgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOyAvLyBXZSBuZWVkIHRvIHNldCB1cCBvdXIgdmFsdWUgcHJvZmlsZSBw
b2ludGVycy4KKwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBmaW5pc2hDcmVh
dGlvbkNvbW1vbih2bSk7CiAKQEAgLTQ3MSw2ICs0NzcsMTkgQEAgYm9vbCBDb2RlQmxvY2s6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBicmVhazsgXAogICAgIH0KIAorI2RlZmlu
ZSBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6
IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRh
dGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShi
eXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVm
aW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3Ap
OiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFk
YXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlLT51bmFyeUFyaXRoUHJvZmlsZShi
eXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisKICAg
ICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25TdHJlYW0gPSBpbnN0cnVjdGlv
bnMoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uIDogaW5zdHJ1Y3Rpb25TdHJl
YW0pIHsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KTsKQEAgLTUzMywxNCArNTUyLDE0IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFMKICAgICAgICAgTElOSyhPcENyZWF0ZVByb21pc2UpCiAgICAgICAgIExJTksoT3BD
cmVhdGVHZW5lcmF0b3IpCiAKLSAgICAgICAgTElOSyhPcEFkZCkKLSAgICAgICAgTElOSyhPcE11
bCkKLSAgICAgICAgTElOSyhPcERpdikKLSAgICAgICAgTElOSyhPcFN1YikKLQotICAgICAgICBM
SU5LKE9wTmVnYXRlKQotICAgICAgICBMSU5LKE9wSW5jKQotICAgICAgICBMSU5LKE9wRGVjKQor
ICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BBZGQpCisgICAgICAgIExJ
TktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcE11bCkKKyAgICAgICAgTElOS19XSVRIX0JJ
TkFSWV9BUklUSF9QUk9GSUxFKE9wRGl2KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRI
X1BST0ZJTEUoT3BTdWIpCisKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUo
T3BOZWdhdGUpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wSW5jKQor
ICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcERlYykKIAogICAgICAgICBM
SU5LKE9wSm5lcVB0cikKIApAQCAtNzY5LDcgKzc4OCw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAvLyByZWx5IG9uIHRoZSBpbnN0cnVjdGlvbiBjb3Vu
dCAoYW5kIGFyZSBpbiB0aGVvcnkgcGVybWl0dGVkIHRvIGFsc28gaW5zcGVjdCB0aGUKICAgICAv
LyBpbnN0cnVjdGlvbiBzdHJlYW0gdG8gbW9yZSBhY2N1cmF0ZSBhc3Nlc3MgdGhlIGNvc3Qgb2Yg
dGllci11cCkuCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGppdEFmdGVyV2FybVVw
KCk7CiAKICAgICAvLyBJZiB0aGUgY29uY3VycmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2Rl
IGJsb2NrJ3MgaGFzaCwgdGhlbiBjb21wdXRlIGl0IGhlcmUKICAgICAvLyBzeW5jaHJvbm91c2x5
LgpAQCAtNzkzLDYgKzgxMSw3NiBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb25Db21t
b24oVk0mCiAgICAgbV9vd25lckVkZ2Uuc2V0KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjpjcmVhdGUodm0sIHRoaXMpKTsKIH0KIAordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0
aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7Cisg
ICAgc2V0SklUQ29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0
IGF1dG8mIGppdENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAg
ICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAg
aGFuZGxlci5uYXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxl
ci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9
CisgICAgfQorCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7CisgICAgICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkp
OworICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+
KGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAg
ICAgIHN3aXRjaCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBv
b2w6OlR5cGU6Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZv
OiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExp
bmtJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9h
ZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBq
aXREYXRhLm1fY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5m
by5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFs
aXplRGF0YUlDKHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BS
SW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xb
aV0gPSBjYWxsTGlua0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm86IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtl
ZFN0dWJJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRy
eS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBqaXREYXRhLm1fc3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5
cGUsIENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAg
ICAgICAgICAgc3R1YkluZm8tPmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byh0aGlzLCB1bmxpbmtlZFN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0
Q29uc3RhbnRQb29sW2ldID0gc3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rp
b25EZWNsOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRh
Lm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpGdW5jdGlvbkV4cHI6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5k
ZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2Fz
ZSBHbG9iYWxDb2RlOgorICAgIGNhc2UgTW9kdWxlQ29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgor
ICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZ1bmN0aW9uQ29kZToKKyAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5
IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxs
LgorICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYm
IERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgaWYgKGppdENvZGUtPm1faXNTaGFyZWFibGUgJiYgIXVubGlua2VkQ29kZUJsb2NrKCkt
Pm1fdW5saW5rZWRCYXNlbGluZUNvZGUgJiYgT3B0aW9uczo6dXNlQmFzZWxpbmVKSVRDb2RlU2hh
cmluZygpKQorICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVD
b2RlID0gV1RGTW92ZShqaXRDb2RlKTsKK30KKwogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsK
ICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTg3Myw2ICs5NjEsMjcgQEAgQ29kZUJsb2NrOjp+Q29k
ZUJsb2NrKCkKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQogCitib29sIENvZGVCbG9jazo6aXND
b25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25z
dAoreworICAgIC8vIFRoaXMgbmVlZHMgdG8gY29ycmVzcG9uZCB0byB3aGF0IHdlIGRvIGluc2lk
ZSBzZXRDb25zdGFudFJlZ2lzdGVycy4KKyAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCkt
PmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHJlZykpIHsKKyAgICBjYXNlIFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjo6RG91YmxlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI6IHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHVubGlu
a2VkQ29kZUJsb2NrKCktPmdldENvbnN0YW50KHJlZyk7CisgICAgICAgIGlmICghdmFsdWUgfHwg
IXZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIEpTQ2Vs
bCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICBpZiAoY2VsbC0+aW5oZXJpdHM8U3lt
Ym9sVGFibGU+KHZtKCkpIHx8IGNlbGwtPmluaGVyaXRzPEpTVGVtcGxhdGVPYmplY3REZXNjcmlw
dG9yPih2bSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNv
bnN0YW50OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiBWZWN0b3I8dW5zaWdu
ZWQ+IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgRml4ZWRWZWN0b3I8V3Jp
dGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pCiB7
CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC04OTIsNiArMTAwMSw3IEBAIFZlY3Rvcjx1bnNpZ25l
ZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFIKICAgICAgICAgc3dpdGNoIChyZXByZXNlbnRhdGlv
bikgewogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25z
dGFudDoKICAgICAgICAgICAgIGNvbnN0YW50ID0gZ2xvYmFsT2JqZWN0LT5saW5rVGltZUNvbnN0
YW50KHN0YXRpY19jYXN0PExpbmtUaW1lQ29uc3RhbnQ+KGNvbnN0YW50LmFzSW50MzJBc0FueUlu
dCgpKSk7CisgICAgICAgICAgICBBU1NFUlQoY29uc3RhbnQuaXNDZWxsKCkpOyAvLyBVbmxpbmtl
ZCBCYXNlbGluZSBKSVQgcmVxdWlyZXMgdGhpcy4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI6CiAgICAgICAgIGNhc2UgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgpAQCAtMTUxNCw3ICsxNjI0LDcgQEAgQ29k
ZUJsb2NrOjpKSVREYXRhJiBDb2RlQmxvY2s6OmVuc3VyZUpJVAogICAgIHJldHVybiAqbV9qaXRE
YXRhOwogfQogCi12b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hl
cygpCit2b2lkIENvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKQogewogICAgIGlm
IChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCkBAIC0xNTI1
LDYgKzE2MzUsMjAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbgog
ICAgICAgICAgICAgc3R1YkluZm8tPnZpc2l0V2Vha1JlZmVyZW5jZXMobG9ja2VyLCB0aGlzKTsK
ICAgICAgICAgfQogICAgIH0KKworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBpZiAoaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIC8vIFZlcmlmeSB3ZSBkb24n
dCBuZWVkIHRvIGZpbmFsaXplIHRoZXNlIHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KKyAg
ICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA6IHN0YXRpY19jYXN0PEJhc2Vs
aW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fZXZhbENhbGxMaW5rSW5mb3MpIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7CisgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtdIChKU0NlbGwqKSB7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisKKyAgICB9CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC0xNTM0
LDQ2ICsxNjU4LDQ3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgK
IAogICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIGJv
b2wgaXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGU7Ci0gICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBmYWxzZTsKLSAgICAv
LyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQg
cmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0Ci0gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGlu
ZSBKSVQgY29kZSBhbmQgcmVpbnN0YWxsIExMSW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5Lgot
ICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpICYmICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1Nl
dCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpKSB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sq
IG9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKLSAgICAgICAg
ICAgIGlmICghb3B0aW1pemVkQ29kZUJsb2NrLT5tX29zckV4aXRDb3VudGVyKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSkgewotICAgICAgICAgICAg
ICAgICAgICBtX2ppdENvZGUgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBMTEludDo6
c2V0RW50cnlwb2ludCh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOwotCi0gICAgICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxpbmtlZENvZGUtPm51bWJlck9mRXhj
ZXB0aW9uSGFuZGxlcnMoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBV
bmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlua2VkQ29kZS0+ZXhj
ZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBo
YW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9ucygpLmF0KHVubGlu
a2VkSGFuZGxlci50YXJnZXQpLnB0cigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxl
ci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZUNhdGNoKGluc3RydWN0aW9uLndpZHRoKCkpLmNv
ZGUoKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdW5s
aW5rSW5jb21pbmdDYWxscygpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0
byBjbGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGluIGZpbmFsaXplVW5jb25kaXRpb25hbGx5
IGFsbCBjb21waWxlciB0aHJlYWRzCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBzYWZlcG9p
bnRlZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5pbmcgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBieXRl
Y29kZSBwYXJzZXIsIGFuZCBieXRlY29kZQotICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXIg
aXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5m
b3MuCi0gICAgICAgICAgICAgICAgICAgIHJlc2V0SklURGF0YSgpOwotICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFk
ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNlbmRpZgorLy8g
T09QUzogcmVjb25jaWxlIHRoaXMKKy8vI2lmIEVOQUJMRShKSVQpCisvLyAgICBib29sIGlzRWxp
Z2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwor
Ly8gICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBmYWxzZTsKKy8vICAgIC8vIElm
IEJhc2VsaW5lSklUIGNvZGUgaXMgbm90IGV4ZWN1dGluZywgYW5kIGFuIG9wdGltaXplZCByZXBs
YWNlbWVudCBleGlzdHMsIHdlIGF0dGVtcHQKKy8vICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUg
SklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KKy8v
ICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpICYmICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1Nl
dCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpKSB7CisvLyAgICAgICAgaWYgKENvZGVCbG9j
ayogb3B0aW1pemVkQ29kZUJsb2NrID0gb3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworLy8gICAg
ICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgeworLy8g
ICAgICAgICAgICAgICAgaWYgKGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSkgeworLy8gICAg
ICAgICAgICAgICAgICAgIG1faml0Q29kZSA9IG51bGxwdHI7CisvLyAgICAgICAgICAgICAgICAg
ICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7CisvLyAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOworLy8K
Ky8vICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRD
b2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgeworLy8gICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBt
X3VubGlua2VkQ29kZS0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKKy8vICAgICAgICAgICAgICAgICAg
ICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRs
ZXJzW2ldOworLy8gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICpp
bnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKKy8vICAgICAg
ICAgICAgICAgICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29k
ZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZUNhdGNo
KGluc3RydWN0aW9uLndpZHRoKCkpLmNvZGUoKSkpOworLy8gICAgICAgICAgICAgICAgICAgIH0K
Ky8vCisvLyAgICAgICAgICAgICAgICAgICAgdW5saW5rSW5jb21pbmdDYWxscygpOworLy8KKy8v
ICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUg
YmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwor
Ly8gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBzYWZlcG9pbnRlZCwgbWVhbmluZyB0aGV5J3Jl
IHJ1bm5pbmcgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBieXRlY29kZSBwYXJzZXIsIGFuZCBieXRl
Y29kZQorLy8gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlciBpcyB0aGUgb25seSBkYXRhIHN0
cnVjdHVyZSBwb2ludGluZyBpbnRvIHRoZSB2YXJpb3VzICppbmZvcy4KKy8vICAgICAgICAgICAg
ICAgICAgICByZXNldEpJVERhdGEoKTsKKy8vICAgICAgICAgICAgICAgIH0gZWxzZQorLy8gICAg
ICAgICAgICAgICAgICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gdHJ1ZTsKKy8v
ICAgICAgICAgICAgfQorLy8gICAgICAgIH0KKy8vICAgIH0KKy8vCisvLyNlbmRpZgogICAgIAog
ICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKICAgICAgICAg
ZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAo
ISFqaXRDb2RlKCkpCi0gICAgICAgIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsK
KyAgICAgICAgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KERGR19KSVQpCkBAIC0xNTk0LDcgKzE3MTksNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoCiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OgotICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKKyAg
ICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jb3VudCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAg
ICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKQEAgLTE2NzUsMzAgKzE4
MDAsNiBAQCBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mCiAgICAgcmV0
dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSwgY29k
ZU9yaWdpbik7CiB9CiAKLUpJVEFkZElDKiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fYWRkSUNzLmFk
ZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVRNdWxJQyogQ29kZUJsb2NrOjphZGRKSVRNdWxJQyhC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX211
bElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUU3ViSUMqIENvZGVCbG9jazo6YWRkSklU
U3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVE5lZ0lDKiBDb2RlQmxvY2s6
OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRh
KGxvY2tlcikubV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KIFN0cnVjdHVyZVN0dWJJ
bmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwpAQCAtMzEzMyw3ICszMjM0LDcg
QEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1l
UmVnaXN0ZXJDb3VudEZvcih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMzQ5LDEzICszNDUwLDEzIEBA
IEJpbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2gg
KHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNh
c2Ugb3BfbXVsOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJu
ICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTMzNjcsMTEgKzM0NjgsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6dW5hcnlBcml0aAogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGNhc2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0zNDcyLDIyICszNTczLDE2IEBAIHZvaWQgQ29kZUJsb2Nr
OjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmkKIH0KIAogI2lmIEVOQUJMRShKSVQpCi12b2lkIENv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3Jp
Z2luTWFwPiYmIG1hcCkgCi17IAotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
KTsKLSAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1v
dmUobWFwKTsKLX0KLQogc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQ
Qyh2b2lkKiBwYykKIHsKKyAgICBpZiAoYXV0byogcGNUb0NvZGVPcmlnaW5NYXAgPSBtX2ppdENv
ZGUtPnBjVG9Db2RlT3JpZ2luTWFwKCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Q29k
ZU9yaWdpbj4gY29kZU9yaWdpbiA9IHBjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQorICAg
ICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CisgICAgfQorCiAgICAgewogICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIGlmIChhdXRvKiBqaXREYXRh
ID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBpZiAoaml0RGF0YS0+bV9wY1RvQ29k
ZU9yaWdpbk1hcCkgewotICAgICAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+IGNvZGVPcmlnaW4gPSBqaXREYXRhLT5tX3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKLSAgICAgICAgICAgIH0K
LQogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRh
LT5tX3N0dWJJbmZvcykgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29udGFpbnNQ
QyhwYykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+KHN0dWJJbmZvLT5jb2RlT3JpZ2luKTsKQEAgLTM1MjEsMjggKzM2MTYsMTQgQEAgc3RkOjpv
cHRpb25hbDxCeXRlY29kZUluZGV4PiBDb2RlQmxvY2s6OgogICAgIHJldHVybiBieXRlY29kZUlu
ZGV4OwogfQogCi1pbnQzMl90IENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhy
ZXNob2xkKQotewotICAgIHN3aXRjaCAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUo
KSkgewotICAgIGNhc2UgVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU6Ci0gICAgICAgIHJldHVybiB0
aHJlc2hvbGQ7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6RmFsc2U6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgKiA0OwotICAgIGNhc2UgVHJpU3RhdGU6OlRydWU6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgLyAyOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
dGhyZXNob2xkOwotfQotCi12b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBD
b2RlQmxvY2s6OmppdFNvb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdU
aHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2Fy
bVVwKCkpLCB0aGlzKTsKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9s
ZCh1bmxpbmtlZENvZGVCbG9jaygpLT50aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3Zv
aWQgQ29kZUJsb2NrOjpqaXROZXh0SW52b2NhdGlvbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdU
aHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAKIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRy
YXBCcmVha3BvaW50cygpIGNvbnN0CkBAIC0zNTg4LDI4ICszNjY5LDggQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBNYXRoSUNTdGF0cygpCiAgICAgZG91YmxlIG51bVN1YnMgPSAwLjA7CiAgICAgZG91
YmxlIHRvdGFsU3ViU2l6ZSA9IDAuMDsKIAotICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVC
bG9jayogY29kZUJsb2NrKSB7Ci0gICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gY29kZUJsb2Nr
LT5tX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgICAgIGZvciAoSklUQWRkSUMqIGFkZElDIDog
aml0RGF0YS0+bV9hZGRJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1BZGRzKys7Ci0gICAgICAg
ICAgICAgICAgdG90YWxBZGRTaXplICs9IGFkZElDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKEpJVE11bElDKiBtdWxJQyA6IGppdERhdGEtPm1fbXVsSUNz
KSB7Ci0gICAgICAgICAgICAgICAgbnVtTXVscysrOwotICAgICAgICAgICAgICAgIHRvdGFsTXVs
U2l6ZSArPSBtdWxJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Zm9yIChKSVROZWdJQyogbmVnSUMgOiBqaXREYXRhLT5tX25lZ0lDcykgewotICAgICAgICAgICAg
ICAgIG51bU5lZ3MrKzsKLSAgICAgICAgICAgICAgICB0b3RhbE5lZ1NpemUgKz0gbmVnSUMtPmNv
ZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUU3ViSUMqIHN1
YklDIDogaml0RGF0YS0+bV9zdWJJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1TdWJzKys7Ci0g
ICAgICAgICAgICAgICAgdG90YWxTdWJTaXplICs9IHN1YklDLT5jb2RlU2l6ZSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgYXV0byBjb3VudElDcyA9IFsmXSAoQ29kZUJsb2NrKikg
eworICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byByZS1pbXBsZW1lbnQgdGhpcyB1c2luZyBK
SVRDb2RlLgogICAgIH07CiAgICAgaGVhcCgpLT5mb3JFYWNoQ29kZUJsb2NrKGNvdW50SUNzKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw5IEBAIGNsYXNzIEpTTW9kdWxlRW52aXJv
bm1lbnQ7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ7CiBjbGFzcyBNZXRhZGF0YVRhYmxlOwot
Y2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKIGNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogCiBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihDb2RlQmxvY2tSYXJlRGF0YSk7CiAKQEAg
LTE1OCw3ICsxNTgsOSBAQCBwdWJsaWM6CiAgICAgTWV0YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIG51
bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6
CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKHVuc2lnbmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoK
IAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkgY29uc3QgeyByZXR1cm4g
bV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgfQogCkBAIC0xNjcsNyArMTY5LDYgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KICAg
ICB1bnNpZ25lZCBudW1UbXBzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0No
ZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50VG1wczsgfQogCi0gICAgdW5zaWduZWQqIGFk
ZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CiAKICAgICBDb2RlQmxvY2sq
IGFsdGVybmF0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9h
bHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAgLTIzMiwxNiArMjMzLDYgQEAgcHVibGljOgogICAgIGJv
b2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3Rh
bGxWTVRyYXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmly
dHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRp
bmcgYmFjayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlz
IGB0aGlzYCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0Nv
bnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsK
LQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29s
IGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAg
IHJldHVybiByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAt
MjY4LDIzICsyNTksMjEgQEAgcHVibGljOgogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RydWN0IEpJ
VERhdGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICAgICAgQmFnPFN0cnVj
dHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAgICAgICAgQmFnPEpJVEFkZElDPiBtX2FkZElD
czsKLSAgICAgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKLSAgICAgICAgQmFnPEpJVE5lZ0lD
PiBtX25lZ0lDczsKLSAgICAgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKICAgICAgICAgQmFn
PENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgICAgICBTZW50aW5lbExpbmtlZExp
c3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9p
bmNvbWluZ0NhbGxzOwogICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBoaWNDYWxs
Tm9kZSwgUGFja2VkUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29t
aW5nUG9seW1vcnBoaWNDYWxsczsKLSAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxl
PiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJs
ZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENU
b0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXND
YWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1h
cDsKKworICAgICAgICBGaXhlZFZlY3Rvcjx2b2lkKj4gbV9qaXRDb25zdGFudFBvb2w7CisgICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwgbV9qaXRDb25zdGFudFBvb2wpOyB9CiAgICAgfTsKIAor
ICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29k
ZT4pOworCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkKQEAgLTI5
MywyMiArMjgyLDcgQEAgcHVibGljOgogICAgIH0KICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRh
U2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAotICAgIEpJVEFkZElDKiBhZGRKSVRB
ZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLSAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQ
cm9maWxlKik7Ci0gICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSop
OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+
Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2Zp
bGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlw
ZT4KLSAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkg
eyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
YW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVE5l
Z0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJ
VE5lZ0lDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3Is
IEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRTdWJJQyogYWRkTWF0aElD
KEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmls
ZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURGF0YSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RGF0YSk7IH0KIAogICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlLCBDb2RlT3JpZ2luKTsKIApAQCAtMzIyLDE4
ICsyOTYsOCBAQCBwdWJsaWM6CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAg
dG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgogICAgIENhbGxMaW5rSW5mbyog
Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICAKLSAg
ICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29kZU1hcCYmIGppdENvZGVNYXApCi0gICAgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOwotICAgIH0K
LSAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCkKLSAgICB7Ci0gICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX2ppdENvZGVNYXA7Ci0gICAgfQorICAgIGNvbnN0IEpJVENvZGVNYXAmIGpp
dENvZGVNYXAoKTsKIAotICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVf
cHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+
IGZpbmRQQyh2b2lkKiBwYyk7CiAKICAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVn
aXN0ZXJTZXQpOwpAQCAtNDcyLDEwICs0MzYsMTIgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5h
bWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFy
YW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICAgICAgcmV0dXJuIG1fYXJndW1l
bnRWYWx1ZVByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgCiAgICAgfQogCiAgICAgVmFsdWVQcm9m
aWxlJiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudEluZGV4KQpAQCAt
NTY5LDggKzUzNSwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
czsgfQogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVh
bFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9D
b25zdGFudEluZGV4KCldLmdldCgpOyB9CisgICAgYm9vbCBpc0NvbnN0YW50T3duZWRCeVVubGlu
a2VkQ29kZUJsb2NrKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0OwogICAgIEFMV0FZU19JTkxJ
TkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5j
b25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihyZWcpOyB9CiAgICAgQUxXQVlTX0lOTElO
RSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFu
dFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihpbmRleCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KENvZGVCbG9jaywgbV9jb25zdGFudFJlZ2lzdGVycykgKyBkZWNsdHlwZShtX2NvbnN0YW50UmVn
aXN0ZXJzKTo6ZGF0YU1lbW9yeU9mZnNldCgpOyB9CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0u
Z2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5j
dGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNTk1LDIyICs1NjMsMjIgQEAgcHVibGljOgogICAgIC8v
IEp1bXAgVGFibGVzCiAKICNpZiBFTkFCTEUoSklUKQotICAgIFNpbXBsZUp1bXBUYWJsZSYgc3dp
dGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorICAgIFNpbXBsZUp1bXBUYWJsZSYgYmFzZWxp
bmVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYg
YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIHZvaWQq
IGJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1faml0RGF0YSk7Ci0gICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhICYmIGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBtX2ppdERhdGEt
Pm1faml0Q29uc3RhbnRQb29sLmRhdGEoKTsKICAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVt
YmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOyB9CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIFN0cmluZ0p1bXBUYWJsZSYgc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQotICAgIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwotICAgIH0KKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBTdHJpbmdKdW1wVGFibGUmIGRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBkZmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxl
SW5kZXgpOwogI2VuZGlmCisKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZVbmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkg
eyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOyB9CiAKQEAgLTYzMiwyMSArNjAwLDIwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxp
bnRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKKyAg
ICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y2hlY2tJZlRocmVzaG9sZENyb3Nz
ZWRBbmRTZXQodGhpcyk7CiAgICAgfQogCiAgICAgdm9pZCBkb250SklUQW55dGltZVNvb24oKQog
ICAgIHsKLSAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7
CisgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+ZGVmZXJJbmRlZmluaXRlbHkoKTsKICAg
ICB9CiAKLSAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7Ci0g
ICAgdm9pZCBqaXRBZnRlcldhcm1VcCgpOwogICAgIHZvaWQgaml0U29vbigpOworICAgIHZvaWQg
aml0TmV4dEludm9jYXRpb24oKTsKIAogICAgIGNvbnN0IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRl
ciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9s
bGludEV4ZWN1dGVDb3VudGVyOworICAgICAgICByZXR1cm4gKm1fbGxpbnRFeGVjdXRlQ291bnRl
cjsKICAgICB9CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8c3RkOjp0dXBsZTxTdHJ1Y3R1cmVJRCwg
dW5zaWduZWQ+LCBGaXhlZFZlY3RvcjxMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQ+PiBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwOwpAQCAtNzk3LDYgKzc2NCw3IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJu
IG1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNz
KCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVC
bG9jaywgbV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVha3BvaW50KHVu
c2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQodW5zaWdu
ZWQgbnVtQnJlYWtwb2ludHMpCkBAIC04MzgsNiArODA2LDcgQEAgcHVibGljOgogICAgIG11dGFi
bGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMgdG8gc3RvcmUg
dG8gaXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5l
ZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2NhcGFiaWxpdHlM
ZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNywxNiArODc2LDEy
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0YWRhdGFUYWJsZSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpOyB9
CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkK
LSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBj
b21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0gICAgICAgIHJldHVybiAhbV91bmxpbmtlZENv
ZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAgfQorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxp
Z2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bG9v
cEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKTsgfQogCiBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CiAjaWYgRU5BQkxFKEpJVCkK
LSAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKKyAgICB2b2lkIGZp
bmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKQEAgLTEwMTAsNyArOTc1LDkgQEAgcHJp
dmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2lu
dE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitw
dWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6
CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRv
IG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9j
awpAQCAtMTAyOSw3ICs5OTYsNyBAQCBwcml2YXRlOgogCiAgICAgV3JpdGVCYXJyaWVyPENvZGVC
bG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIg
bV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciogbV9s
bGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9OwogCiAgICAgQmFzZWxpbmVFeGVjdXRpb25D
b3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAgICAgdWludDMyX3QgbV9vc3JFeGl0Q291bnRl
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
a0lubGluZXMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTAg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNs
dWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRl
ICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkgKzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZv
ckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJ
U0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8m
IG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9wcm9maWxlLCBmYWxzZSk7IH0pOwotCiAgICAg
ICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJTEUoVklTSVQpCi0KICN1bmRlZiBW
SVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck9wZW4+KFsmXSAo
YXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1Nyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JF
YWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVBy
b2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwzOCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFj
aExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZU19J
TkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJsb2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAgICBB
U1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFw
OworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGlu
ZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxp
bmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNl
bGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQo
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK0FM
V0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmRmZ1N3aXRjaEp1bXBUYWJs
ZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkRG
R0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6SklUQ29kZSo+KG1faml0Q29kZS5n
ZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKworQUxXQVlTX0lOTElO
RSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGlu
dCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklU
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgp
KS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9j
ayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRB
Y3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAgYm9vbCBFeGVjdXRpb25Db3VudGVy
PGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB0
aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQpOworICAgIHRocmVzaG9sZCA9IGNsaXBwZWRU
aHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAgICBtX2NvdW50ZXIgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9yY2VTbG93
UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRoaXMsIGNoZWNrSWZUaHJlc2hvbGRD
cm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxzZS4KICAgICBib29sIGNoZWNrSWZU
aHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwogICAgIGJvb2wgaGFzQ3Jvc3NlZFRo
cmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlciA+PSAwOyB9Ci0gICAgdm9pZCBzZXRO
ZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayopOworICAgIHZvaWQgc2V0
TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2RlQmxvY2sqID0gbnVsbHB0cik7CiAg
ICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwogICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENvdW50KSArIG1fY291bnRlcjsgfQog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpAQCAtODYsMTMgKzg2LDkgQEAgcHVi
bGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBU
IGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVCB0aHJlc2hv
bGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChUIHRocmVzaG9sZCkKICAgICB7Ci0g
ICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwotICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9t
aXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCkgJiYgZ2xvYmFsT2JqZWN0KQot
ICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2JqZWN0LT53ZWFrUmFuZG9tSW50ZWdl
cigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRz
QmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkID0gbWF4
aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwogICAgICAgICBpZiAodGhy
ZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAgICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNo
b2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhVW5z
ZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0KSA9PSAx
Mik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggeworICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBhcnJheVByb2ZpbGUpOyB9CiAgICAg
QXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRC
eUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsKQEAgLTg4LDYgKzg5LDcgQEAgdW5p
b24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRNb2RlIG1vZGU7CiAgICAg
ICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7IC8vIFRoaXMgbXVzdCBiZSB6ZXJv
IHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRh
ZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhRGVmYXVsdCBkZWZhdWx0TW9k
ZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5zZXRNb2RlOwogICAgIEdldEJ5SWRN
b2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1vZGU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6
Y29tcHV0ZUZvclN0dWJJCiAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhOb0luZm9ybWF0aW9u
KTsKICAgICAgICAgCiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOiB7Ci0gICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZShwcm9maWxlZEJsb2NrLT52bSgpKTsKICAgICAgICAgaWYg
KHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKICAgICAg
ICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1
YkluZm8pOwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5m
by0+aWRlbnRpZmllcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5
LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgogICAgICAgICBy
ZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJ
bkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPm1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSk7CiAgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAg
ICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3Bw
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5s
aW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsMTYgQEAgQUxXQVlT
X0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1Yklu
Zm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBp
ZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNs
b3RzIGdldCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAKICAgICBHUFJSZWcgYmFz
ZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0yMzMsMjMgKzIzOCwzMSBAQCBBTFdBWVNfSU5MSU5F
IHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3RlCiAgICAgcmV0dXJuIGdldFNjcmF0Y2hSZWdpc3Rl
cihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJlZzsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmNh
bkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1
cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCitib29sIElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZp
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQ
cm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkpOworICAgIEFTU0VSVChjYW5HZW5lcmF0
ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2Zmc2V0KSk7CisKKyAg
ICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBzbG90cyBn
ZXQgZmlsbGVkIGluLiBOb3RoaW5nIGVsc2UgdG8gZG8uCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KIAogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKQEAgLTI3OSwyMiArMjkyLDI1IEBAIGJv
b2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVIKICAgICByZXR1cm4gbGlua2Vk
Q29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5n
dGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKK2Jvb2wgSW5s
aW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQogewogICAgIEFTU0VS
VChhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKIAogICAgIGlmICghc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAo
Y29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKwogICAgIGlmICghaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFoYXNBbnlBcnJheVN0b3JhZ2UoYXJyYXkt
PmluZGV4aW5nVHlwZSgpKSAmJiBhcnJheS0+aW5kZXhpbmdUeXBlKCkgIT0gQXJyYXlDbGFzczsK
IH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQogewotICAgIEFTU0VSVChpc0NhY2hlYWJsZUFycmF5
TGVuZ3RoKHN0dWJJbmZvLCBhcnJheSkpOworICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBp
c0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGFycmF5KSk7CiAKICAg
ICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMzE5LDE3ICszMzUsMjAgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJy
YXlMZW5ndGgoUwogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCi1ib29sIElubGlu
ZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgaWYgKCFz
dHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAor
ICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIGhhc0ZyZWVSZWdpc3RlcihzdHViSW5m
byk7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdM
ZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
IHsKLSAgICBBU1NFUlQoaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pKTsKKyAgICBB
U1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoY29kZUJsb2Nr
LCBzdHViSW5mbykpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM2MywxMyArMzgyLDE4IEBAIGJvb2wgSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aCgKIH0KIAogCi1ib29sIElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
IGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIFRoZXNlIHNsb3RzIGdl
dCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5mby5iYXNlR1BSOwogICAgIEpTVmFsdWVS
ZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAKQEAgLTQwNiw3ICs0MzAsNyBAQCB2
b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgaWYgKGNvZGVCbG9j
ay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgLy8gSWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10
aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQgKGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAv
LyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGlyZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdl
IHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2RlUHRyLgotICAgICAgICBpZiAoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUo
KSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZp
ZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29kZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5m
by5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMgbWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29k
ZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAgICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRo
IHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNvZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5n
IGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1f
Y29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2Nh
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CkBAIC00MjEsNyArNDQ1LDkgQEAgdm9pZCBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgICAgICAgICAgICAgIH0pLCAiSW5s
aW5lQWNjZXNzOiBsaW5raW5nIHN0dWIgY2FsbCIpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CisKICAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gdGFyZ2V0OworICAgICAgICBzdHViSW5m
by5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOyAvLyBDbGVhciBvdXQgdGhlIGlubGlu
ZSBhY2Nlc3MgY29kZS4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDM0LDggKzQ2MCwx
NCBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgfSksICJJ
bmxpbmVBY2Nlc3M6IGxpbmtpbmcgY29uc3RhbnQganVtcCIpOwogfQogCi12b2lkIElubGluZUFj
Y2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQordm9pZCBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNz
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Cisg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkgJiYgY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gc3R1
YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgICAgICBzdHViSW5mby5tX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOyAvLyBDbGVhciBvdXQgdGhlIGlubGluZSBhY2Nlc3MgY29k
ZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIENDYWxsSGVscGVyczo6ZW1pdEpJVENv
ZGVPdmVyKHN0dWJJbmZvLnN0YXJ0LnJldGFnZ2VkPEpTSW50ZXJuYWxQdHJUYWc+KCksIHNjb3Bl
ZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPihbJl0oQ0NhbGxIZWxwZXJzJiBqaXQpIHsKICAg
ICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhIG5vcCBzbGVkIGhlcmUgYmVjYXVzZSBub2JvZHkgc2hv
dWxkIGJlIGp1bXBpbmcgaW50byB0aGUgbWlkZGxlIG9mIGFuIElDLgogICAgICAgICBhdXRvIGp1
bXAgPSBqaXQuanVtcCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
bGluZUFjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxNCArOTks
MTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RkOjptYXgoc2l6ZSwgc2l6ZUZvclByb3Bl
cnR5QWNjZXNzKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3Bl
cnR5QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQp
OwotICAgIHN0YXRpYyBib29sIGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1
cmVTdHViSW5mbyYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0
eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVBcnJheUxlbmd0aChTdHJ1Y3R1
cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZVN0cmlu
Z0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlQXJy
YXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7Ci0gICAgc3RhdGljIGJvb2wg
Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqKTsKLSAg
ICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYpOwor
ICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRp
YyBib29sIGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1
cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVBcnJheUxl
bmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0
aWMgYm9vbCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiwg
U3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVT
ZWxmSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqKTsK
KyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwogCiAgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4pOwogICAgIHN0YXRpYyB2b2lkIHJl
d2lyZVN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRl
cmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgT1ZF
UkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBUwogCiBzdHJ1Y3QgSXRlcmF0aW9u
TW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90IHNlZW5Nb2RlcyB7IDAgfTsKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEl0
ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1vZGVzKTsgfSAKICAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9PSBzaXplb2YoSXRlcmF0aW9uTW9kZSkpOwogfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2Fs
bExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBBcnJheVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9hcnJheVByb2ZpbGUpOyB9CiAKIHByaXZh
dGU6CiAgICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsg
dW5saW5rZWRCaXQgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRh
ZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L01ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUs
MTQgQEAgcHVibGljOgogICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEpOwogICAgIH0KIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAgIEFMV0FZU19JTkxJTkUgc2l6ZV90IG51bUVudHJp
ZXMoKQorICAgIHsKKyAgICAgICAgYXV0byogc3RhcnQgPSBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUg
T3A6Ok1ldGFkYXRhKj4oZ2V0KE9wOjpvcGNvZGVJRCkpOworICAgICAgICBhdXRvKiBlbmQgPSBi
aXR3aXNlX2Nhc3Q8dHlwZW5hbWUgT3A6Ok1ldGFkYXRhKj4oZ2V0SW1wbChPcDo6b3Bjb2RlSUQg
KyAxKSk7CisgICAgICAgIHJldHVybiBlbmQgLSBzdGFydDsKKyAgICB9CisKICAgICBzaXplX3Qg
c2l6ZUluQnl0ZXMoKTsKIAogICAgIHZvaWQgcmVmKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgwLDEwICsxODAsMTAgQEAgUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1
dGVGb3JTdHViSQogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHVi
SW5mby0+aWRlbnRpZmllcigpOwogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRl
bnRpZmllci51aWQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodWlkKTsKLSAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHByb2ZpbGVk
QmxvY2stPnZtKCkpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQp
KQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50
aWZpZXIpLCBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZz
ZXQpOworICAgICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlk
ZW50aWZpZXIpLCBzdHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwogICAgIH0KICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiAjaW5jbHVkZSAiQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVwYXRj
aC5oIgogCkBAIC02NSw5ICs2Niw5IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRC
eUlkU2VsZigKICAgICBBU1NFUlQoaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKICAgICBzZXRDYWNo
ZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIg
PSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAg
Y29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlk
U2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAK
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRBcnJheUxlbmd0aChjb25zdCBDb25jdXJyZW50
SlNMb2NrZXJCYXNlJiBsb2NrZXIpCkBAIC04Nyw5ICs4OCw5IEBAIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OmluaXRQdXRCeUlkUmVwbGEKICAgICBBU1NFUlQobV9jYWNoZVR5cGUgPT0gQ2FjaGVU
eXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpQdXRCeUlk
UmVwbGFjZSk7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndyaXRlQmFy
cmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5
SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0
SW5CeUlkU2VsZihjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKQpAQCAtOTcs
OSArOTgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0SW5CeUlkU2VsZihjCiAgICAg
QVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENhY2hlVHlw
ZShsb2NrZXIsIENhY2hlVHlwZTo6SW5CeUlkU2VsZik7CiAgICAgbV9pZGVudGlmaWVyID0gaWRl
bnRpZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRl
QmFycmllcihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVC
bG9jay0+dm0oKS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYu
b2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCkBAIC0yMzYsNyArMjM3LDcgQEAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbwogICAgICAgICAvLyB3ZSdyZSBidWZmZXJl
ZCBpcyBiZWNhdXNlIHdlIHJlbHkgb24gaXQgdG8gcmVzZXQgZHVyaW5nIEdDIGlmIG1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZQogICAgICAgICAvLyBpcyBjb2xsZWN0ZWQuCiAgICAgICAgIG1f
aWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS5jbGVhcigpOworICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOwogICAg
ICAgICAKICAgICAgICAgLy8gSWYgd2UgZ2VuZXJhdGVkIHNvbWUgY29kZSB0aGVuIHdlIGRvbid0
IHdhbnQgdG8gYXR0ZW1wdCB0byByZXBhdGNoIGluIHRoZSBmdXR1cmUgdW50aWwgd2UKICAgICAg
ICAgLy8gZ2F0aGVyIGVub3VnaCBjYXNlcy4KQEAgLTI1MSw3ICsyNTIsNyBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiB7CiAgICAgY2xlYXJCdWZmZXJlZFN0cnVj
dHVyZXMoKTsKICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwotICAgIG1faW5saW5lQWNjZXNz
QmFzZVN0cnVjdHVyZS5jbGVhcigpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9
IDA7CiAKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCkKICAgICAgICAg
cmV0dXJuOwpAQCAtMjg1LDYgKzI4Niw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0
KGNvbnN0IENvbmMKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtp
bmQ6OkJ5SWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CiAgICAgICAgIHJlc2V0UHV0
QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZhbCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgpAQCAtMzYwLDggKzM2Miw4IEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICB9CiAKICAgICBib29sIGlzVmFs
aWQgPSB0cnVlOwotICAgIGlmIChtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCi0gICAgICAg
IGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUu
Z2V0KCkpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUodm0pKQorICAgICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNNYXJrZWQoc3RydWN0
dXJlKTsKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICBp
c1ZhbGlkICY9IHUuc3R1Yi0+dmlzaXRXZWFrKHZtKTsKIApAQCAtMzc1LDggKzM3Nyw4IEBAIHZv
aWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmIChtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUp
Ci0gICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRv
cik7CisgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSh2aXNpdG9yLnZtKCkpKQorICAgICAgICBzdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0
b3IpOwogCiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikKICAgICAgICAg
dS5zdHViLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKQEAgLTQzMCw2ICs0MzIsMjA0
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6c2UKICAgICBtX2NhY2hl
VHlwZSA9IG5ld0NhY2hlVHlwZTsKIH0KIAordm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlh
bGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8pCit7CisgICAgYWNjZXNzVHlwZSA9IHVu
bGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZTsKKyAgICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8u
c3RhcnQ7CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5kb25lTG9jYXRpb247
CisgICAgc2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5zbG93UGF0aFN0
YXJ0TG9jYXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKTsKKyAgICBjb2Rl
T3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAg
IG1fY29kZVB0ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKworICAgIHVzZWRSZWdpc3RlcnMg
PSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgaWYgKGFjY2Vz
c1R5cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZvciBpdGVyYXRvcl9uZXh0LCB3ZSBj
YW4ndCBjbG9iYmVyIHRoZSAiZG9udENsb2JiZXJSZWdpc3RlciIgcmVnaXN0ZXIgZWl0aGVyLgor
ICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRD
bG9iYmVyUmVnaXN0ZXIpOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAg
IGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNl
T2Y6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5
R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJl
Y3Q6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRo
aXM6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVO
YW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
QnJhbmQ6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJh
bmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2
YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJ
ZDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5m
by5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6
CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQor
ICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRE
ZWZpbmU6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVm
aW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1Yklu
Zm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAg
ICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1Yklu
Zm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gdW5saW5rZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRL
aW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGlt
aXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpE
ZWxldGVCeUlEOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdz
LnByb3BlcnR5R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2Vs
aW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFt
ZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3Bl
cnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZh
bHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3Qg
PSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
dmFsdWU7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgICAgIHJlZ3MucHJvdG90eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjpwcm90bzsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRl
bnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
SW5CeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBy
ZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpUcnlHZXRCeUlkOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJh
c2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9H
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CisgICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBpZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQ
dXRCeVZhbCkKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpTZXRQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFu
ZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVl
R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKICNpZiBBU1NFUlRfRU5BQkxFRAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y2hlY2tD
b25zaXN0ZW5jeSgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlB1dEtp
bmQuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgpAQCAtNTYsNiArNTcsNyBAQCBlbnVtIGNsYXNzIEFj
Y2Vzc1R5cGUgOiBpbnQ4X3QgewogICAgIEdldEJ5VmFsLAogICAgIFB1dEJ5SWQsCiAgICAgUHV0
QnlWYWwsCisgICAgUHV0UHJpdmF0ZU5hbWUsCiAgICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAg
ICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC03OCw2ICs4MCw4IEBAIGVudW0gY2xhc3MgQ2FjaGVUeXBl
IDogaW50OF90IHsKICAgICBTdHJpbmdMZW5ndGgKIH07CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvOworCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1YkluZm8pOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpAQCAtOTgsNiArMTAyLDggQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2
b2lkIGFib3V0VG9EaWUoKTsKIAorICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mKTsKKwog
ICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIg
aGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJl
c2V0cyBpdHNlbGYsCkBAIC0zMjUsMTMgKzMzMSwxOSBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAg
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOworICAgIFByb3BlcnR5T2Zmc2V0IGJ5SWRTZWxmT2Zm
c2V0OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgYnlJZFNlbGZPZmZzZXQpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSk7IH0KICAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgICAgIH0gYnlJZFNlbGY7CiAgICAg
ICAgIFBvbHltb3JwaGljQWNjZXNzKiBzdHViOwogICAgIH0gdTsKLSAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlKiBp
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIGlmICghbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiB2bS5nZXRTdHJ1Y3R1cmUobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
KTsKKyAgICB9CisgICAgU3RydWN0dXJlSUQgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlIHsg
MCB9OwogcHJpdmF0ZToKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAg
ICAvLyBSZXByZXNlbnRzIHRob3NlIHN0cnVjdHVyZXMgdGhhdCBhbHJlYWR5IGhhdmUgYnVmZmVy
ZWQgQWNjZXNzQ2FzZXMgaW4gdGhlIFBvbHltb3JwaGljQWNjZXNzLgpAQCAtNDQ3LDYgKzQ1OSwx
NyBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQog
CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHBy
aXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkgfTsKKyAgICBF
Q01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpzbG9wcHkoKSB9OworICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElD
IGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3Ig
J2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVj
dHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVy
U2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N1cGVyU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4
NCw3IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJTdGF0ZSgpCiAgICAgZG91YmxlIHBlcmNlbnRh
Z2UgPSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsKICAgICBpZiAocGVyY2VudGFnZSAhPSBwZXJj
ZW50YWdlKQogICAgICAgICBwZXJjZW50YWdlID0gMC4wOwotICAgIGRhdGFMb2coIlBlcmNlbnQg
dGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiXG4iKTsKKyAg
ICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVy
Y2VudGFnZSwgIiVcbiIpOwogfQogCiB2b2lkIGVuYWJsZVN1cGVyU2FtcGxlcigpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
IAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJ
VENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKICNpbmNsdWRl
ICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKQEAgLTc4LDYgKzc5
LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgICAgICBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tlcik7CiAgICAgICAgIG1fcmFyZURhdGEtPm1f
cHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJpdmF0ZUJy
YW5kUmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAgfQorCisgICAgbV9sbGludEV4ZWN1dGVDb3Vu
dGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9y
SklUQWZ0ZXJXYXJtVXAoKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpAQCAt
MzE2LDYgKzMxOSw0OCBAQCBpbnQgVW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZz
CiAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsK
IH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECitib29sIFVubGlua2VkQ29kZUJsb2NrOjpoYXNJZGVu
dGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgaWYgKG51bWJlck9mSWRlbnRp
ZmllcnMoKSA+IDEwMCkgeworICAgICAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpICE9IG1f
Y2FjaGVkSWRlbnRpZmllclVpZHMuc2l6ZSgpKSB7CisgICAgICAgICAgICBMb2NrZXIgbG9ja2Vy
KG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrKTsKKyAgICAgICAgICAgIEhhc2hTZXQ8VW5pcXVl
ZFN0cmluZ0ltcGwqPiBjYWNoZWRJZGVudGlmaWVyVWlkczsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSB0aGlzLT5pZGVudGlmaWVyKGkp
OworICAgICAgICAgICAgICAgIGNhY2hlZElkZW50aWZpZXJVaWRzLmFkZChpZGVudGlmaWVyLmlt
cGwoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgICAgICAgICBtX2NhY2hlZElkZW50aWZpZXJVaWRzID0gV1RGTW92ZShjYWNoZWRJ
ZGVudGlmaWVyVWlkcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9jYWNoZWRJZGVu
dGlmaWVyVWlkcy5jb250YWlucyh1aWQpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRp
ZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitpbnQzMl90IFVubGlua2VkQ29kZUJsb2Nr
Ojp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRP
cHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAg
cmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0
dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0
dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2Nh
dGVTaGFyZWRQcm9maWxlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWV0YWRhdGEtPmlz
RmluYWxpemVkKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSwxMCArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBcml0aFByb2Zp
bGUuaCIKICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZl
bnRpb25zLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmls
ZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9u
UmFuZ2VJbmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJJZGVudGlm
aWVyLmgiCkBAIC02NCw2ICs2Niw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3Mg
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGluZUpJ
VENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29uc3Rh
bnQgOiBpbnQzMl90OwogCkBAIC0xNzUsNiArMTc4LDcgQEAgcHVibGljOgogCiAgICAgY29uc3Qg
Rml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0K
ICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJl
ZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4
KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIxMSwxNSBAQCBw
dWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAg
IGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7
IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAg
ICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDAp
LnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGlu
c3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9u
IDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1
Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25z
dCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51bUNh
bGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5z
aWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDEwICsz
NDcsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tZXRhZGF0YS0+c2l6ZUluQnl0ZXMo
KTsKICAgICB9CiAKKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCkKKyAgICB7CisgICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRv
IGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCisgICAgICAgIHJldHVybiAhaXNC
dWlsdGluRnVuY3Rpb24oKTsKKyAgICB9CiAgICAgdm9pZCBhbGxvY2F0ZVNoYXJlZFByb2ZpbGVz
KCk7CiAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUmIHVubGlua2VkVmFsdWVQcm9maWxlKHVuc2ln
bmVkIGluZGV4KSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9CiAgICAgVW5saW5r
ZWRBcnJheVByb2ZpbGUmIHVubGlua2VkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJl
dHVybiBtX2FycmF5UHJvZmlsZXNbaW5kZXhdOyB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAg
IGJvb2wgaGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOworI2VuZGlmCisKKyAgICBp
bnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7CisKIHByb3RlY3RlZDoK
ICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBF
eGVjdXRhYmxlSW5mbyYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+KTsKIApAQCAtMzk3
LDYgKzQyMSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJl
cyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRy
PEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAg
Q29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFy
c2VNb2RlOwpAQCAtNDEzLDYgKzQzOCw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogZmlu
ZCBhIGJldHRlciBwbGFjZSB0byBzdG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlB
cml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0
aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtNDU4LDYgKzQ4NiwzMCBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVj
dGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0
IEluc3RydWN0aW9uKiBwYykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVt
cE9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5
QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5
QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBl
bmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV91
bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKFVuYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJp
dGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsg
fQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7
IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRp
b25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVD
b3VudGVyOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBI
YXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjUsOSArNTE3LDE1
IEBAIHByaXZhdGU6CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFy
Z2V0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4
ZWRWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIEZpeGVkVmVj
dG9yPFVubGlua2VkVmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CiAgICAgRml4ZWRWZWN0
b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+IG1fYXJyYXlQcm9maWxlczsKIAorI2lmIEFTU0VSVF9F
TkFCTEVECisgICAgTG9jayBtX2NhY2hlZElkZW50aWZpZXJVaWRzTG9jazsKKyAgICBIYXNoU2V0
PFVuaXF1ZWRTdHJpbmdJbXBsKj4gbV9jYWNoZWRJZGVudGlmaWVyVWlkczsKKyNlbmRpZgorCiBw
cm90ZWN0ZWQ6CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgc2l6ZV90
IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBA
QCBwdWJsaWM6CiAgICAgYm9vbCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMo
KTsgfQogICAgIGJvb2wgaGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay0+aGFzQ2hlY2twb2ludHMoKTsgfQogICAgIGJvb2wgaGFzVGFpbENhbGxzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2RlQmxvY2stPmhhc1RhaWxDYWxscygpOyB9CisgICAgdW5zaWduZWQgYWRkQmlu
YXJ5QXJpdGhQcm9maWxlKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJv
ZmlsZSgpOyB9CisgICAgdW5zaWduZWQgYWRkVW5hcnlBcml0aFByb2ZpbGUoKSB7IHJldHVybiBt
X2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKTsgfQogCiAgICAgLy8gVXBkYXRpbmcg
VW5saW5rZWRDb2RlQmxvY2suCiAgICAgdm9pZCBzZXRIYXNDaGVja3BvaW50cygpIHsgbV9jb2Rl
QmxvY2stPnNldEhhc0NoZWNrcG9pbnRzKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFk
YXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTUgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUpOwogICAgIH0K
IAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNldElu
TWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9p
czMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUx
NigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAgICBiYXNlVHlwZU9mZnNldCA9IHJvdW5kVXBU
b011bHRpcGxlT2YoYWxpZ25vZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSwgYmFzZVR5cGVP
ZmZzZXQpOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YodHlwZW5hbWUg
T3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KICAgICB1bnNpZ25lZCBudW1FbnRyaWVzKCk7CiAK
QEAgLTEwNyw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc19vZmZzZXQxNlRh
YmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAgICAg
dXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSwxMyArNDUsMTEgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogCiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1
bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNr
ZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9
IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3Rh
bE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNr
ZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQogICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCi0gICAgICAgICAg
ICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgY2xl
YXJCdWNrZXRzKCk7CiAgICAgfQogICAgIAogICAgIEVuY29kZWRKU1ZhbHVlKiBzcGVjRmFpbEJ1
Y2tldCh1bnNpZ25lZCBpKQpAQCAtNTksNiArNTcsMTIgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJh
c2UgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZCdWNrZXRzICsgaSA8IHRvdGFsTnVtYmVyT2ZC
dWNrZXRzKTsKICAgICAgICAgcmV0dXJuIG1fYnVja2V0cyArIG51bWJlck9mQnVja2V0cyArIGk7
CiAgICAgfQorCisgICAgdm9pZCBjbGVhckJ1Y2tldHMoKQorICAgIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCisgICAgICAgICAg
ICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICB9CiAgICAg
CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8odW5zaWduZWQgYnVja2V0KSBjb25zdAog
ICAgIHsKQEAgLTEyMyw4ICsxMjcsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0
dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8v
IHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kp
IHsKQEAgLTEzOSw3ICsxNDEsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29k
ZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxh
dGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTYxLDYgKzE2Myw3IEBAIHN0
cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJv
ZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAg
ICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4o
KSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBz
dHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmls
ZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0VW5hcnkKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRo
aXMsIGRzdCwgc3JjLCB0eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBz
cmMsIHR5cGUsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90
Pihkc3QsIHNyYyk7CkBAIC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRJbmMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0Rz
dCk7CisgICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlB
cml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVj
OjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2Nv
ZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02ODIsNyArNjgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklE
Kj4KICAgICAgICAgZW1pdEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3Jj
MSwgUmVnaXN0ZXJJRCogc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAg
ICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1f
Y29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4g
ZHN0OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRl
ICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKQEAgLTM0LDcgKzM1LDkgQEAKICNpbmNsdWRlICJERkdK
dW1wUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIklu
bGluZUNhbGxGcmFtZVNldC5oIgorI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpT
Q2FzdC5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiUHJvZmls
ZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIlJlY29yZGVkU3RhdHVzZXMuaCIKICNpbmNsdWRl
IDx3dGYvQmFnLmg+CkBAIC03MCw3ICs3Myw3IEBAIHN0cnVjdCBXZWFrUmVmZXJlbmNlVHJhbnNp
dGlvbiB7CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV90bzsKIH07CiAgICAgICAgIAotY2xh
c3MgQ29tbW9uRGF0YSB7CitjbGFzcyBDb21tb25EYXRhIDogcHVibGljIE1hdGhJQ0hvbGRlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CiBwdWJsaWM6CiAgICAgQ29t
bW9uRGF0YSgpCkBAIC0xMTYsNiArMTE5LDcgQEAgcHVibGljOgogICAgIEZpeGVkVmVjdG9yPENv
ZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludD4gbV93YXRjaHBvaW50czsKICAgICBGaXhlZFZl
Y3RvcjxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50czsKICAgICBGaXhlZFZlY3RvcjxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQ+IG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50czsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7
CiAgICAgUmVjb3JkZWRTdGF0dXNlcyByZWNvcmRlZFN0YXR1c2VzOwogICAgIFZlY3RvcjxKdW1w
UmVwbGFjZW1lbnQ+IG1fanVtcFJlcGxhY2VtZW50czsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKIAorc3RydWN0IFNpbXBsZUp1bXBUYWJsZTsK
K3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKIG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBKSVRD
b21waWxlcjsKQEAgLTEwMSw2ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxD
b2RlT3JpZ2luPiBmaW5kUEMoQ29kZUJsb2NrKiwgdm9pZCogcGMpIGZpbmFsOwogCiAgICAgdXNp
bmcgRGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkc7CisKKyAgICBQQ1RvQ29k
ZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBjb21tb24u
bV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgSklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENvbXBpbGVyIHRvIGNhbGwgc2V0Q29kZVJl
ZigpLgpAQCAtMTQwLDYgKzE0NSw4IEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPEJ5dGVjb2RlSW5k
ZXgsIFRyaWdnZXJSZWFzb24+IHRpZXJVcEVudHJ5VHJpZ2dlcnM7CiAKICAgICBXcml0ZUJhcnJp
ZXI8Q29kZUJsb2NrPiBtX29zckVudHJ5QmxvY2s7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVt
cFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRh
YmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgdW5zaWduZWQgb3NyRW50cnlSZXRy
eTsKICAgICBib29sIGFiYW5kb25PU1JFbnRyeTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDEzICsxODUsMTIgQEAgdm9pZCBKSVRDb21w
aWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIAogICAgIG1fZ3JhcGgucmVnaXN0ZXJG
cm96ZW5WYWx1ZXMoKTsKIAotICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMuaXNFbXB0eSgpIHx8ICFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsK
LSAgICAgICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMpOwotICAgICAgICBpZiAoIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hK
dW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7Ci0gICAgfQor
ICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkp
OworICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpOwor
ICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKSAKKyAg
ICAgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fZ3Jh
cGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBpZiAoIW1fZ3JhcGgubV9zd2l0Y2hK
dW1wVGFibGVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJs
ZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKIAogICAgIGZvciAoQmFn
PFN3aXRjaERhdGE+OjppdGVyYXRvciBpdGVyID0gbV9ncmFwaC5tX3N3aXRjaERhdGEuYmVnaW4o
KTsgISFpdGVyOyArK2l0ZXIpIHsKICAgICAgICAgU3dpdGNoRGF0YSYgZGF0YSA9ICoqaXRlcjsK
QEAgLTE5OSwxMiArMTk4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYg
bGlua0IKICAgICAgICAgY2FzZSBTd2l0Y2hDaGFyOgogICAgICAgICBjYXNlIFN3aXRjaEltbTog
ewogICAgICAgICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkgewotICAgICAgICAgICAg
ICAgIEFTU0VSVChtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJ
bmRleCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N3
aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XS5pc0VtcHR5KCkpOwogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25zdCBV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgICAgIFNpbXBs
ZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRh
dGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUlu
ZGV4XTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2gu
YmxvY2stPmluZGV4XSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJsZS5t
X2N0aU9mZnNldHMuc2l6ZSgpID09IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUo
KSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsaW5rZWRUYWJsZS5tX2N0aU9mZnNl
dHMuc2l6ZSgpOyBqLS07KQpAQCAtMjE5LDEyICsyMTgsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6
bGluayhMaW5rQnVmZmVyJiBsaW5rQgogCiAgICAgICAgIGNhc2UgU3dpdGNoU3RyaW5nOiB7CiAg
ICAgICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJs
ZUluZGV4KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGUtPm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlzRW1wdHkoKSk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAg
ICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJp
bmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgICAgIFN0
cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlEZWZh
dWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNb
ZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCkgPT0gdW5saW5rZWRUYWJsZS5tX29m
ZnNldFRhYmxlLnNpemUoKSArIDEpOwogICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGxp
bmtlZFRhYmxlLm1fY3RpT2Zmc2V0cykKQEAgLTMzMyw3ICszMzIsNyBAQCB2b2lkIEpJVENvbXBp
bGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQotICAgICAgICBtX2NvZGVCbG9jay0+
c2V0UENUb0NvZGVPcmlnaW5NYXAobWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92
ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpKTsKKyAgICAgICAgbV9q
aXRDb2RlLT5jb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVP
cmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBsaW5rQnVmZmVy
KTsKIH0KIAogc3RhdGljIHZvaWQgZW1pdFN0YWNrT3ZlcmZsb3dDaGVjayhKSVRDb21waWxlciYg
aml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHN0YWNrT3ZlcmZsb3cpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk3LDcgKzk3LDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZy
YW1lKgogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRU
eXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NF
UlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxp
bmVKSVQpOwotICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFTU0VS
VChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKICAg
ICBpZiAoIU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9ERkcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJK
SVQuaCIKQEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0s
IENDYWxsSGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2ggKGppdC5j
b2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAg
ICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVz
aG9sZChqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAg
ICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVz
aG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlwZTo6RlRM
SklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpj
bGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZh
bHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6
Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMTMsNiArMzE0
LDEwIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAg
ICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVD
b2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRh
dGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVC
bG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAgICAgICAg
aml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNsb3QoaW5s
aW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIp
KTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9y
KCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSks
IGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6
c19tZXRhZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVKSVRDb25z
dGFudFBvb2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2Rl
QmxvY2ssIEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgh
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw2ICs0MDksOSBAQCB2b2lkIGFk
anVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVn
aXN0ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dl
ZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKKyAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4
aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGlu
ZUpJVENvbnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CisKICAgICAgICAgY29k
ZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKIAogICAgICAgICBCeXRl
Y29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNhY2hlYWJs
ZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1
ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUg
IkRGR0pJVENvZGUuaCIKQEAgLTI4NjksNyArMjg3MCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25GaW5kU3cKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBBU1NFUlQodmFsdWUuaXNEb3VibGUoKSk7CiAgICAgZG91YmxlIGFzRG91
YmxlID0gdmFsdWUuYXNEb3VibGUoKTsKQEAgLTI4OTAsNyArMjg5MSw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKIAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25z
dCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5kZmdTdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgcmV0dXJuIGxpbmtlZFRhYmxlLmN0aUZvclZh
bHVlKCp1bmxpbmtlZFRhYmxlLCBzdHJJbXBsKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MzAsNiArNzMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQog
ICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNh
bGxlZVRhZ0dQUiwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5h
cmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51
bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVt
UGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAg
ICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5v
ZGUsIGkgKyAxKTsKQEAgLTg4OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlKiBub2RlCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsK
ICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0gewogICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZv
LT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxs
RnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzQsNiArODM0LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1
ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9y
bWF0SlMpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVk
QXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2Vk
QXJnczsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7
CkBAIC05ODUsNyArOTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSog
bm9kZQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlm
IChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKICAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBD
YWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcgKzM5ODUsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAgUmVnaXN0ZXJTZXQg
dXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAgIEpJVFB1dEJ5VmFs
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJ
VCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1c2VkUmVnaXN0
ZXJzLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3Jp
Z2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVzZWRSZWdpc3RlcnMs
CiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwgSlNWYWx1ZVJlZ3M6
OnBheWxvYWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlkR1BSUmVnLCBzdHVi
SW5mb0dQUik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwog
CkBAIC00OTA1LDcgKzQ5MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVB
ZGQoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCku
YmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRl
eCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2Rl
QmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7
Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVEFkZElDKGFy
aXRoUHJvZmlsZSk7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuaml0Q29kZSgpLT5jb21t
b24uYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlv
biA9IG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVu
Y3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZDsKICAgICAKQEAgLTQ5ODksNyArNDk4OSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVN1YihOb2QKICAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxl
Rm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBt
X2ppdC5jb2RlQmxvY2soKS0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRTdWJJQyhhcml0aFByb2Zp
bGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJPcHRp
bWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3Vi
OwogCkBAIC01NTcxLDcgKzU1NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFs
dWVOZWdhdGUoCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBo
KCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpOwogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNv
ZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
OwotICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJQyhh
cml0aFByb2ZpbGUpOworICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmppdENvZGUoKS0+Y29t
bW9uLmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rp
b24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGlu
Z0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGU7CiAgICAgY29tcGlsZU1hdGhJQyhub2Rl
LCBuZWdJQywgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwpAQCAt
NTgxNSw3ICs1ODE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTXVsKE5v
ZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsK
ICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2Nr
LT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAg
IEpJVE11bElDKiBtdWxJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRNdWxJQyhhcml0aFBy
b2ZpbGUpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFk
ZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBv
cGVyYXRpb25WYWx1ZU11bE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
ID0gb3BlcmF0aW9uVmFsdWVNdWw7CiAKQEAgLTE0NzczLDcgKzE0NzczLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29w
ZS5ncHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1Bh
Y2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJ
bmRleCk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0
UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2pp
dC5jb2RlQmxvY2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRl
LCBTYWZlcG9pbnQ6OlJlCiAKICAgICBpZiAodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2lu
TWFwcGluZygpKSB7CiAgICAgICAgIEIzOjpQQ1RvT3JpZ2luTWFwIG9yaWdpbk1hcCA9IHN0YXRl
LnByb2MtPnJlbGVhc2VQQ1RvT3JpZ2luTWFwKCk7Ci0gICAgICAgIGNvZGVCbG9jay0+c2V0UENU
b0NvZGVPcmlnaW5NYXAobWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyKHZtLCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5i
M0NvZGVMaW5rQnVmZmVyKSk7CisgICAgICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5tX3BjVG9D
b2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyKHZtLCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5i
M0NvZGVMaW5rQnVmZmVyKTsKICAgICB9CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5
UHRyVGFnPiBsYWJlbCA9IHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRp
b25PZjxKU0VudHJ5UHRyVGFnPihzdGF0ZS5wcm9jLT5jb2RlKCkuZW50cnlwb2ludExhYmVsKDAp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgsNiArNjgsOCBAQCBwdWJsaWM6CiAgICAgREZHOjpDb21tb25EYXRhKiBk
ZmdDb21tb24oKSBvdmVycmlkZTsKICAgICBzdGF0aWMgcHRyZGlmZl90IGNvbW1vbkRhdGFPZmZz
ZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklUQ29kZSwgY29tbW9uKTsgfQogICAgIHZv
aWQgc2hyaW5rVG9GaXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikgb3ZlcnJpZGU7CisKKyAg
ICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVy
biBjb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQogICAgIAogICAgIERGRzo6Q29t
bW9uRGF0YSBjb21tb247CiAgICAgVmVjdG9yPE9TUkV4aXQ+IG1fb3NyRXhpdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIs
MTQgKzUyLDYgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKIAogICAgIGdyYXBoLnJlZ2lzdGVy
RnJvemVuVmFsdWVzKCk7CiAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHsKLSAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIEFTU0VS
VChjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMuaXNFbXB0eSgpKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShs
b2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpOwotICAgIH0KLSNlbmRpZgotCiAg
ICAgLy8gQ3JlYXRlIHRoZSBlbnRyeXBvaW50LiBOb3RlIHRoYXQgd2UgdXNlIHRoaXMgZW50cnlw
b2ludCB0b3RhbGx5IGRpZmZlcmVudGx5CiAgICAgLy8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Un
cmUgZG9pbmcgT1NSIGVudHJ5IG9yIG5vdC4KICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9j
ayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDcgQEAKICNpbmNsdWRl
ICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUg
IlByb2JlQ29udGV4dC5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVk
ZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgi
CiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKQEAgLTIzMjAsNiArMjMyMSwxOCBAQCBw
cml2YXRlOgogICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVFN1YkdlbmVyYXRvcj4oYXJp
dGhQcm9maWxlLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CiAg
ICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0
b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVEFkZElDKiBhZGRNYXRoSUMoREZHOjpD
b21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4g
Y29tbW9uLmFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2Ft
ZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMg
SklUTXVsSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQ
cm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUTXVsSUMocHJvZmlsZSk7IH0K
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6
dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVROZWdJQyogYWRkTWF0aElDKERGRzo6Q29tbW9u
RGF0YSYgY29tbW9uLCBVbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9u
LmFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJh
dG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5l
cmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUU3Vi
SUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9maWxl
KiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKwogICAg
IHZvaWQgY29tcGlsZVZhbHVlTXVsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7
CkBAIC0yMzkxLDcgKzI0MDQsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAgICAgICAgICAg
ICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBCb3g8
TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRoSUM8
R2VuZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVFVuYXJ5TWF0aElD
PEdlbmVyYXRvcj4qIG1hdGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRDb2Rl
LT5jb21tb24sIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVy
YXRvciA9IEdlbmVyYXRvcihKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLCBKU1ZhbHVlUmVn
cyhwYXJhbXNbMV0uZ3ByKCkpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKIAogICAgICAgICAgICAg
ICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwpAQCAtMjUwMCw3ICsyNTEzLDcg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0
ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+
KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJ
QyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRDb2RlLT5jb21tb24sIGFyaXRoUHJv
ZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihs
ZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLAog
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBKU1ZhbHVl
UmVncyhwYXJhbXNbMl0uZ3ByKCkpLCBwYXJhbXMuZnBTY3JhdGNoKDApLAogICAgICAgICAgICAg
ICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKQEAgLTQz
MTcsNyArNDMzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIg
PSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0Y2go
MCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxK
SVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29kZUJs
b2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4
LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCks
IEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5
R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7
CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9
IHRydWU7CkBAIC0xMDI4NSw2ICsxMDI5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1BbGxvY2F0ZWRBcmdz
OyArK2kpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChW
YWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2Fs
bGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29k
ZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhzZW1hbnRpY05vZGVPcmlnaW4pOwpAQCAtMTA0NDMs
MTMgKzEwNDU3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
LmFyZ3MuYXBwZW5kKHBhcmFtc1sxICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOwogCiAgICAg
ICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bUFyZ3M7CisgICAgICAg
ICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNodWZmbGVE
YXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogCiAgICAgICAg
ICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFk
ZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAg
ICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxG
YXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZd
IHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRh
KHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0
LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICAgICAgfSk7
CkBAIC0xMDc5Miw3ICsxMDgwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
aml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAg
ICAgICAgICAgICB9KTsKQEAgLTExMDczLDcgKzExMDg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxs
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1Qw
LCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3b3JraW5nIGNvcHkpCkBAIC00Miwx
NyArNDIsMjggQEAgY2xhc3MgTWV0YWRhdGEKICAgICBkZWYgc3RydWN0KG9wKQogICAgICAgICBy
ZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVs
ZHMpCisgICAgICAgIGRlZiBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGRO
YW1lcykKKyAgICAgICAgICAgIGZpZWxkTmFtZXMubWFwIGRvIHxmaWVsZE5hbWV8CisgICAgICAg
ICAgICAgICAgIiN7cHJlZml4fXN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVsw
XS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisg
ICAgICAgIGVuZAorCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBm
aWVsZE5hbWVzKQogICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAg
ICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAgICAgICAgICAgICAgICAgICIj
e3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1c
biN7cHJlZml4fX07IgorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tj
b252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZp
eH19OyIKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZp
eH0je3R5cGUudG9fc30gbV8je2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmll
bGROYW1lID0gZmllbGQudG9fcworICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2go
ZmllbGROYW1lKQorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1f
I3tmaWVsZE5hbWV9OyIKICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2lu
KCJcbiIpCiAgICAgICAgIGVuZAogCi0gICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAg
ICAgICAgIiwgQGZpZWxkcykKKyAgICAgICAgZmllbGROYW1lcyA9IFtdCisgICAgICAgIHByZWZp
eCA9ICIgICAgICAgICIKKyAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBm
aWVsZHMsIGZpZWxkTmFtZXMpCisgICAgICAgIGZpZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5l
cmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKIAogICAgICAgICBpbml0
cyA9IG5pbAogICAgICAgICBpZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5l
bXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Nyw2ICszNjcsMjggQEAgdm9p
ZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRQcm9wZXJ0eShHUFJSZQogICAgICAgICByZXN1bHQpOwog
fQogCit2b2lkIEFzc2VtYmx5SGVscGVyczo6c3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1
ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNldCwgR1BSUmVnIHNjcmF0Y2gpCit7CisgICAg
SnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihm
aXJzdE91dE9mTGluZU9mZnNldCkpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhvYmplY3Qs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIG5lZzMyKG9mZnNl
dCk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgIEp1bXAgcmVh
ZHkgPSBqdW1wKCk7CisgICAgCisgICAgaXNJbmxpbmUubGluayh0aGlzKTsKKyAgICBhZGRQdHIo
CisgICAgICAgIFRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+
KHNpemVvZihKU09iamVjdCkpIC0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDxpbnQzMl90Pihm
aXJzdE91dE9mTGluZU9mZnNldCkgLSAyKSAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpKSwKKyAgICAgICAgb2JqZWN0LCBzY3JhdGNoKTsKKyAgICAKKyAgICBy
ZWFkeS5saW5rKHRoaXMpOworICAgIAorICAgIHN0b3JlVmFsdWUodmFsdWUsCisgICAgICAgIEJh
c2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNl
dCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworfQorCiB2b2lkIEFzc2VtYmx5SGVs
cGVyczo6ZW1pdExvYWRTdHJ1Y3R1cmUoVk0mIHZtLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0
ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAg
LTY5OCw4ICs3MjAsMTMgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZl
cwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxs
V2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgaW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwg
Q2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BS
SW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rh
c2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxs
TG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0
clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw4ICsyMzQsOSBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgY2xvYmJlcnMg
b2Zmc2V0LgorICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBjbG9iYmVyIG9mZnNldC4KICAgICB2b2lk
IGxvYWRQcm9wZXJ0eShHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyBy
ZXN1bHQpOworICAgIHZvaWQgc3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVn
IG9iamVjdCwgR1BSUmVnIG9mZnNldCwgR1BSUmVnIHNjcmF0Y2gpOwogCiAgICAgdm9pZCBtb3Zl
VmFsdWVSZWdzKEpTVmFsdWVSZWdzIHNyY1JlZ3MsIEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAg
IHsKQEAgLTE3MjAsNiArMTcyMSw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBl
bWl0VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAg
IHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxM
aW5rSW5mbyopOwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAg
ICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29k
ZS5oIgorCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCisj
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVEFk
ZElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlKSB7IHJldHVybiBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUTXVsSUMq
IE1hdGhJQ0hvbGRlcjo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUpIHsgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRTdWJJQyogTWF0
aElDSG9sZGVyOjphZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkg
eyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE5lZ0lDKiBNYXRoSUNI
b2xkZXI6OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0
dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisKK3ZvaWQgTWF0aElDSG9sZGVyOjph
ZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcikKK3sKKyAgICBtX2FkZElDcyA9IFdURk1v
dmUob3RoZXIubV9hZGRJQ3MpOworICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhlci5tX211bElD
cyk7CisgICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICBtX3N1YklD
cyA9IFdURk1vdmUob3RoZXIubV9zdWJJQ3MpOworfQorCitCYXNlbGluZUpJVENvZGU6OkJhc2Vs
aW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0
clRhZz4gd2l0aEFyaXR5Q2hlY2spCisgICAgOiBEaXJlY3RKSVRDb2RlKFdURk1vdmUoY29kZSks
IHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAsIE1hdGhJQ0hvbGRl
cigpCit7IH0KKworQmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKCkKK3sKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2Vs
aW5lSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFz
ZWxpbmVKSVRDb2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9CYXNlbGluZUpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgorI2luY2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNs
dWRlICJKSVRDb2RlTWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCaW5hcnlBcml0
aFByb2ZpbGU7CitjbGFzcyBVbmFyeUFyaXRoUHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvOworc3RydWN0IFNpbXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1w
VGFibGU7CisKK2NsYXNzIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1h
dGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcik7CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJp
bmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0
aFByb2ZpbGUqKTsKKyAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxl
Kik7CisgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CisKK3By
aXZhdGU6CisgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1f
bXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBt
X3N1YklDczsKK307CisKK2NsYXNzIEpJVENvbnN0YW50UG9vbCB7CitwdWJsaWM6CisgICAgdXNp
bmcgQ29uc3RhbnQgPSB1bnNpZ25lZDsKKworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qg
eworICAgICAgICBHbG9iYWxPYmplY3QsCisgICAgICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAg
U3RydWN0dXJlU3R1YkluZm8sCisgICAgICAgIEZ1bmN0aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rp
b25FeHByLAorICAgIH07CisKKyAgICBzdHJ1Y3QgVmFsdWUgeworICAgICAgICBUeXBlIHR5cGU7
CisgICAgICAgIFBhY2tlZFB0cjx2b2lkPiBwYXlsb2FkOworICAgIH07CisKKyAgICBKSVRDb25z
dGFudFBvb2woKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9v
bCYmKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQb29sJiBvcGVyYXRvcj0oSklUQ29uc3Rh
bnRQb29sJiYpID0gZGVmYXVsdDsKKworICAgIENvbnN0YW50IGFkZChUeXBlIHR5cGUsIHZvaWQq
IHBheWxvYWQgPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9j
b25zdGFudHMuc2l6ZSgpOworICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBl
LCBwYXlsb2FkIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHMuc2l6ZSgpOyB9CisgICAgVmFsdWUg
YXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW2ldOyB9CisKK3ByaXZhdGU6
CisgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50czsKK307CisKKworY2xhc3MgQmFzZWxpbmVK
SVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgeworcHVi
bGljOgorICAgIEJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spOworICAgIH5CYXNlbGluZUpJVENv
ZGUoKSBvdmVycmlkZTsKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAo
KSBvdmVycmlkZSB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CisKKyAgICBC
YWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBU
YWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJs
ZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFw
OworICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CisgICAgYm9vbCBtX2lz
U2hhcmVhYmxlIHsgdHJ1ZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgc2l6ZV90IEJhc2VsaW5lSklUUGxhbjo6
Y29kZVNpemUoKSBjb25zdAogCiBDb21waWxhdGlvblJlc3VsdCBCYXNlbGluZUpJVFBsYW46OmZp
bmFsaXplKCkKIHsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6
ZU9uTWFpblRocmVhZCgpOworICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZp
bmFsaXplT25NYWluVGhyZWFkKG1fY29kZUJsb2NrKTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewog
ICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQo
bV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6Omxv
Z1NoYWRvd0NoaWNrZW5Qcm9sbwogICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CiB9
CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcg
c2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQotewotICAgIHN0b3Jl
UHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7Ci0gICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBjYWxsZWUpKSk7Ci0gICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsK
LSAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRP
RihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJ
bW1QdHIoY29kZUJsb2NrKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihT
aGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOwotfQotCiB2
b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQUlJl
ZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gy
KQogewogICAgIFNoYWRvd0NoaWNrZW4qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2Vu
KCk7CkBAIC03Miw2ICs2MiwyOCBAQCB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hp
Y2tlblBhCiAgICAgc3RvcmVQdHIoc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDFOb25BcmdHUFIp
KTsKIH0KIAorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK3ZvaWQgQ0NhbGxI
ZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tl
dCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBzdG9yZVB0cihHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOworICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVl
KSkpOworICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7CisgICAgc3Rv
cmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKKyAgICBzdG9yZVB0cihjb2RlQmxvY2ssIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBj
b2RlQmxvY2spKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRz
KCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKK30KKwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRo
aXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBs
KHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgp
OworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BS
UmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BS
UmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwg
Y29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwogdm9pZCBDQ2FsbEhlbHBlcnM6OmVtaXRK
SVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gd2hlcmUs
IFNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPiBlbWl0Q29kZSwgY29uc3QgY2hhciog
ZGVzY3JpcHRpb24pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODQw
LDcgKzg0MCwxNCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2Ugb3BlcmF0aW9ucyBjbG9iYmVyIGFs
bCB2b2xhdGlsZSByZWdpc3RlcnMuIFRoZXkgYXNzdW1lIHRoYXQgdGhlcmUgaXMgcm9vbSBvbiB0
aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sgdG8gbWFyc2hhbGwgY2FsbCBhcmd1bWVudHMuCiAgICAg
dm9pZCBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwg
R1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NvcGUpOwotICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQ
UlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CisKK3ByaXZhdGU6CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgdm9pZCBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1Jl
Z3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCk7CitwdWJsaWM6CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
KTsKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNr
ZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxvY2ss
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEg
cG9pbnRlciB0byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQu
CiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDEyIEBAIG5h
bWVzcGFjZSBKU0MgewogCiB2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNh
dmVSZWdpc3RlcnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CisgICAgc2V0dXBDYWxsZWVTYXZl
UmVnaXN0ZXJzKGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwordm9pZCBD
YWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lz
dGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMpCit7CiAgICAgUmVnaXN0ZXJT
ZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycyB7IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSB9OwotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2Nh
dGlvbnMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5zaXplKCk7ICsraSkgewogICAg
ICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5IHsgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChp
KSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZURhdGEuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMSArNDMsMTMg
QEAgcHVibGljOgogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOwogICAgIHVuc2lnbmVk
IG51bUxvY2FscyB7IFVJTlRfTUFYIH07CiAgICAgdW5zaWduZWQgbnVtUGFzc2VkQXJncyB7IFVJ
TlRfTUFYIH07CisgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycyB7IFVJTlRfTUFYIH07IC8vIE9u
IG91ciBtYWNoaW5lIGZyYW1lLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJNYXA8
VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOwogICAgIEdQUlJlZyBudW1iZXJUYWdSZWdpc3RlciB7
IEludmFsaWRHUFJSZWcgfTsKIAogICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENv
ZGVCbG9jayopOworICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lz
dGVyQXRPZmZzZXRMaXN0Kik7CiAjZW5kaWYKICAgICBWYWx1ZVJlY292ZXJ5IGNhbGxlZTsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVy
LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEzICszOCwxMyBAQCBDYWxs
RnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhCiAgICAgOiBtX2ppdChqaXQpCiAg
ICAgLCBtX29sZEZyYW1lKGRhdGEubnVtTG9jYWxzICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUlu
UmVnaXN0ZXJzLCBudWxscHRyKQogICAgICwgbV9uZXdGcmFtZShkYXRhLmFyZ3Muc2l6ZSgpICsg
Q2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCi0gICAgLCBtX2FsaWdu
ZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMKLSAgICAgICAg
KyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoaml0LmNvZGVCbG9jaygpLT5udW1QYXJh
bWV0ZXJzKCkpKQorICAgICwgbV9hbGlnbmVkT2xkRnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEubnVt
UGFyYW1ldGVycykpCiAgICAgLCBtX2FsaWduZWROZXdGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnMKICAgICAgICAgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJh
bWUoZGF0YS5hcmdzLnNpemUoKSkpCiAgICAgLCBtX2ZyYW1lRGVsdGEobV9hbGlnbmVkTmV3RnJh
bWVTaXplIC0gbV9hbGlnbmVkT2xkRnJhbWVTaXplKQogICAgICwgbV9sb2NrZWRSZWdpc3RlcnMo
UmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpKQogICAgICwgbV9udW1QYXNzZWRBcmdzKGRhdGEu
bnVtUGFzc2VkQXJncykKKyAgICAsIG1fbnVtUGFyYW1ldGVycyhkYXRhLm51bVBhcmFtZXRlcnMp
CiB7CiAgICAgLy8gV2UgYXJlIGFsbG93ZWQgYWxsIHRoZSB1c3VhbCByZWdpc3RlcnMuLi4KICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOyApCkBA
IC00MjEsNyArNDIxLDcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclRhaWxD
YQogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIG1f
bmV3RnJhbWVCYXNlKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhcmd1bWVudENvdW50T0sg
PQogICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBt
X25ld0ZyYW1lQmFzZSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
bV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX251bVBhcmFtZXRlcnMpKTsKICAgICBtX2ppdC5hZGQz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkg
LSAxICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpLCBtX25ld0ZyYW1lQmFzZSk7
CiAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtc3RhY2tBbGln
bm1lbnRSZWdpc3RlcnMoKSksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5tdWwzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBtX25ld0ZyYW1lQmFz
ZSwgbV9uZXdGcmFtZUJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiAr
MTA0LDcgQEAgcHVibGljOgogICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBkYXRhOwogICAg
ICAgICBkYXRhLm51bUxvY2FscyA9IG51bUxvY2FscygpOwogICAgICAgICBkYXRhLm51bVBhc3Nl
ZEFyZ3MgPSBtX251bVBhc3NlZEFyZ3M7CisgICAgICAgIGRhdGEubnVtUGFyYW1ldGVycyA9IG1f
bnVtUGFyYW1ldGVyczsKICAgICAgICAgZGF0YS5jYWxsZWUgPSBnZXROZXcoVmlydHVhbFJlZ2lz
dGVyIHsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIH0pLT5yZWNvdmVyeSgpOwogICAgICAgICBkYXRh
LmFyZ3MucmVzaXplKGFyZ0NvdW50KCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFyZ0NvdW50KCk7ICsraSkKQEAgLTc5OCw2ICs3OTksNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
cGVyZm9ybVNhZmVXcml0ZXMoKTsKICAgICAKICAgICB1bnNpZ25lZCBtX251bVBhc3NlZEFyZ3Mg
eyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG1fbnVtUGFyYW1ldGVycyB7IFVJTlRfTUFYIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BCiB9CiAKIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICA6IEpT
SW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQorICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBu
dWxscHRyKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKICAgICAsIG1fbGFi
ZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKICAg
ICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtKQpAQCAtNzcsNiArNzcsOSBAQCBKSVQ6
OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQ
cm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKKyAgICBtX2dsb2JhbE9iamVjdENvbnN0YW50ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0KTsKKyAg
ICBtX3Byb2ZpbGVkQ29kZUJsb2NrID0gY29kZUJsb2NrOworICAgIG1fdW5saW5rZWRDb2RlQmxv
Y2sgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiB9CiAKIEpJVDo6fkpJVCgpCkBA
IC05MCw4ICs5Myw4IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEp1bXBMaXN0IHNraXBPcHRpbWl6ZTsKLSAgICAKLSAgICBz
a2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlv
bnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWJzb2x1dGVBZGRyZXNz
KG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgc2tp
cE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25z
OjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIEFTU0VSVCghbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpKTsKIAogICAgIGNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2
ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50
b3BFbnRyeUZyYW1lKTsKQEAgLTExMywxNSArMTE2LDIwIEBAIHZvaWQgSklUOjplbWl0Tm90aWZ5
V3JpdGUoV2F0Y2hwb2ludFNldCoKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50
ZXJUb1NldCkKK3ZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2lu
dGVyVG9TZXQpCiB7CisgICAgYXV0byBvayA9IGJyYW5jaFRlc3RQdHIoWmVybywgcG9pbnRlclRv
U2V0KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHBvaW50ZXJU
b1NldCwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CisgICAgb2subGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJS
ZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQordm9pZCBKSVQ6OmVtaXRWYXJS
ZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUikK
IHsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZh
clJlYWRPbmx5V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElz
SW52YWxpZGF0ZWQpKSk7CisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNv
bHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3Jh
dGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFyUmVhZE9ubHlXYXRj
aHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRy
dXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmFzc2Vy
dFN0YWNrUG9pbnRlck9mZnNldCgpCkBAIC0xMjksNyArMTM3LDcgQEAgdm9pZCBKSVQ6OmFzc2Vy
dFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
cmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCByZWdUMCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsKQEAg
LTE4MSw2MSArMTg5LDQzIEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3Ry
dWMKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1dENvZGVC
bG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOworICAg
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVz
dWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4
ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9
IGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1
bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURh
dGFUYWcpLCByZXN1bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAgICBpZiAo
bV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ29u
c3RydWN0KCkpLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
c3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSksIHJl
c3VsdCk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjpvZmZzZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIocmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworCisgICAgLy8g
T09QUworICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCk7CisgICAgfSk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKIHsKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFM
b2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgICAgICBkYXRhTG9nKCJD
b21waWxpbmcgIiwgKm1fcHJvZmlsZWRDb2RlQmxvY2ssICJcbiIpOwogICAgIAogICAgIGppdEFz
c2VydFRhZ3NJblBsYWNlKCk7CiAgICAgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsKICAg
ICAKLSAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7
Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5zaXplKCk7CisgICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCk7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2FsbExpbmtJ
bmZvSW5kZXggPSAwOwogCi0gICAgVk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgQnl0
ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7Ci0gICAgaWYgKG1fbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxvY2s+
KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0p
KSkgewotICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNhdXNl
IHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KLSAgICAgICAgLy8g
VGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhlIExM
SW50IGRldGVybWluZXMgaXQgd2FudHMgdG8KLSAgICAgICAgLy8gZG8gT1NSIGVudHJ5IGludG8g
dGhlIGJhc2VsaW5lIEpJVCBpbiBhIGxvb3AsIGl0IHdpbGwgcGFzcyBpbiB0aGUgYnl0ZWNvZGUg
b2Zmc2V0IGl0Ci0gICAgICAgIC8vIHdhcyBleGVjdXRpbmcgYXQgd2hlbiBpdCBraWNrZWQgb2Zm
IG91ciBjb21waWxhdGlvbi4gV2Ugb25seSBuZWVkIHRvIGNvbXBpbGUgY29kZSBmb3IKLSAgICAg
ICAgLy8gYW55dGhpbmcgcmVhY2hhYmxlIGZyb20gdGhhdCBieXRlY29kZSBvZmZzZXQuCi0KLSAg
ICAgICAgLy8gV2Ugb25seSBib3RoZXIgYnVpbGRpbmcgdGhlIGJ5dGVjb2RlIGdyYXBoIGlmIGl0
IGNvdWxkIHNhdmUgdGltZSBhbmQgZXhlY3V0YWJsZQotICAgICAgICAvLyBtZW1vcnkuIFdlIHBp
Y2sgYW4gYXJiaXRyYXJ5IG9mZnNldCB3aGVyZSB3ZSBkZWVtIHRoaXMgaXMgcHJvZml0YWJsZS4K
LSAgICAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAyMDAp
IHsKLSAgICAgICAgICAgIC8vIEFzIGEgc2ltcGxpZmljYXRpb24sIHdlIGRvbid0IGZpbmQgYWxs
IGJ5dGVjb2RlIHJhbmdlcyB0aGF0IGFyZSB1bnJlYWNoYWJsZS4KLSAgICAgICAgICAgIC8vIElu
c3RlYWQsIHdlIGp1c3QgZmluZCB0aGUgbWluaW11bSBieXRlY29kZSBvZmZzZXQgdGhhdCBpcyBy
ZWFjaGFibGUsIGFuZAotICAgICAgICAgICAgLy8gY29tcGlsZSBjb2RlIGZyb20gdGhhdCBieXRl
Y29kZSBvZmZzZXQgb253YXJkcy4KLQotICAgICAgICAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaCht
X2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKLSAgICAgICAgICAgIEJ5
dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2Rl
T2Zmc2V0KG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChibG9jayk7Ci0KLSAgICAgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0
PEJ5dGVjb2RlQmFzaWNCbG9jayo+IHdvcmtsaXN0OwotICAgICAgICAgICAgc3RhcnRCeXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgd29ya2xpc3QucHVzaChibG9j
ayk7Ci0KLSAgICAgICAgICAgIHdoaWxlIChCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gd29y
a2xpc3QucG9wKCkpIHsKLSAgICAgICAgICAgICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KHN0ZDo6bWluKHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgYmxvY2stPmxl
YWRlck9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJ
bmRleCA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpCi0gICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0
LnB1c2goJmdyYXBoW3N1Y2Nlc3NvckluZGV4XSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBBbHNv
IGFkZCBjYXRjaCBibG9ja3MgZm9yIGJ5dGVjb2RlcyB0aGF0IHRocm93LgotICAgICAgICAgICAg
ICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+bGVh
ZGVyT2Zmc2V0KCk7IGJ5dGVjb2RlT2Zmc2V0IDwgYmxvY2stPmxlYWRlck9mZnNldCgpICsgYmxv
Y2stPnRvdGFsTGVuZ3RoKCk7KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGluc3Ry
dWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChhdXRvKiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRl
Y29kZUluZGV4KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGdyYXBoLmZpbmRCYXNpY0Jsb2NrV2l0aExlYWRl
ck9mZnNldChoYW5kbGVyLT50YXJnZXQpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgYnl0
ZWNvZGVPZmZzZXQgKz0gaW5zdHJ1Y3Rpb24tPnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KIAog
ICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0ZWNv
ZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGlu
c3RydWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4LDggKzI2OCw4IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRy
YWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6
OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
Y3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURd
LCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAg
ICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNTI3LDcgKzUxNyw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0g
bV9ieXRlY29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4
KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCku
cHRyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAg
ICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9yICIs
IG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CkBA
IC01NDUsOCArNTM1LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAog
ICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigp
KSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJs
b2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsK
KyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUq
PigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0
ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBS
YXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgfQpAQCAtNjc0LDU1ICs2NjQsNTUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
U2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRh
dGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgp
KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRh
OjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQorCit2b2lk
IEpJVDo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVD
YWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpOworfQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0Rmlu
YWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmls
aXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgREZH
OjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5
TGV2ZWwoKTsKICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBp
bGU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9w
dGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcg
PSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAg
Y2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQg
PSB0cnVlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAg
ICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIAotICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsK
LSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1bGVDb2RlOgotICAgIGNhc2UgRXZh
bENvZGU6Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZh
bHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAgICAgICAgLy8g
V2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVk
IGFuIHVuaW5saW5lYWJsZSBjYWxsLgotICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9i
c2VydmF0aW9uLgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQg
Jj0gY2FuSW5saW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9jb2RlQmxv
Y2spOwotICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJl
ck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2Nr
LT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2Rl
QmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZl
Y3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3Vy
ZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxT
dHJpbmdKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlcygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxp
bmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgIGlmIChtX3VubGlua2Vk
Q29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAg
ICAgbV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAg
ICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBG
aXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9m
VW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpCi0g
ICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29k
ZUJsb2NrKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwg
KG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2Vs
aW5lRm9yUHJvZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBidWlsZCBhIGRpc2Fzc2Vt
YmxlciBvZmYgb2YgVW5saW5rZWRDb2RlQmxvY2suCisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0g
bWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0K
ICAgICBpZiAoVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSkgeworICAgICAg
ICAvLyBGSVhNRTogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiBVbmxpbmtlZENvZGVC
bG9jay4KICAgICAgICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3
IFByb2ZpbGVyOjpDb21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9jayksCisgICAgICAgICAg
ICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9w
cm9maWxlZENvZGVCbG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmlsZXI6OkJhc2VsaW5lKSk7
Ci0gICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+
YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9wcm9m
aWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CkBA
IC03NDIsMTEgKzczMiwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxp
emluCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlKQorICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKIAog
ICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAg
ICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9
IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93
OwpAQCAtNzU3LDE2ICs3NDgsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZp
bmFsaXppbgogICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOwor
ICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVj
a1JlZ2lzdGVycygpOworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29s
UmVnaXN0ZXJzKCk7CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlKSB7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKyth
cmd1bWVudCkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV91bmxp
bmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9m
aWxlcygpICsgRml4ZWRWZWN0b3I8VmFsdWVQcm9maWxlPjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCBy
ZWdUMik7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVu
dCA8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewog
ICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50
IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwogICAgICAgICAgICAgICAgIC8v
IGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJl
Y29yZCB0aGUgZHVtbXkgdmFsdWUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5p
c0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQorICAgICAgICAgICAgICAgIGlmIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1l
Ojphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNzc3LDEyICs3NzIs
MTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSk7CiAgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIs
IG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0
UmVncy50YWdHUFIoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJl
c3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVz
cyhyZWdUMiwgYXJndW1lbnQgKiBzaXplb2YoVmFsdWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6
b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5q
aXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9wcm9maWxl
ZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikp
CiAgICAgICAgIG1fdm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVN
YXJrZXIpLCAqdGhpcyk7CkBAIC03OTksMjQgKzc5NCwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFu
ZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9u
V2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJm
bG93RXJyb3IsIG1fY29kZUJsb2NrKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0
aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93
RXJyb3IsIHJlZ1QwKTsKIAogICAgIC8vIElmIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAx
LCB3ZSBuZXZlciByZXF1aXJlIGFyaXR5IGZpeHVwLgotICAgIGJvb2wgcmVxdWlyZXNBcml0eUZp
eHVwID0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAhPSAxOwotICAgIGlmIChtX2NvZGVC
bG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7
CisgICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCkgIT0gMTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUo
KSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJp
dHlDaGVjayA9IGxhYmVsKCk7Ci0gICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2Nv
ZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQpOworCiAgICAgICAgIGVtaXRGdW5jdGlv
blByb2xvZ3VlKCk7Ci0gICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9j
aywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1Rv
RnJhbWVJblByb2xvZ3VlKHJlZ1QwKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwg
QWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgp
KSk7CiAKICAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMSk7Ci0gICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlu
a1RvKGJlZ2luTGFiZWwsIHRoaXMpOworICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJl
Z1QxLCBUcnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSku
bGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwogCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgoMCk7CiAKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJf
dD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24o
bV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hl
Y2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1
Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0
eUNoZWNrLCBhcmd1bWVudEdQUjApOwogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hU
ZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKQEAg
LTgzOSw3ICs4MzcsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemlu
CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0g
c3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVC
bG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOworICAgIG1f
bGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigq
dGhpcywgbV91bmxpbmtlZENvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVK
SVQsIGVmZm9ydCkpOwogICAgIGxpbmsoKTsKIH0KIApAQCAtODU4LDggKzg1Niw4IEBAIHZvaWQg
SklUOjpsaW5rKCkKICAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewogICAgICAgICBjYXNl
IFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlOgogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hh
cmFjdGVyOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKLSAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBs
ZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07
CiAgICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5k
ZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdW5s
aW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBvZmZzZXQgPSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0c1tqXTsKQEAg
LTg3MSw4ICs4NjksOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIFN3aXRjaFJlY29yZDo6U3RyaW5nOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBh
dXRvIGN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPiht
X2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAg
ICAgICBmb3IgKGF1dG8mIGxvY2F0aW9uIDogdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnZh
bHVlcygpKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9i
cmFuY2hPZmZzZXQ7CkBAIC05MDYsMzIgKzkwNCwzNSBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAg
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCByZWNvcmQuY2FsbGVlKTsKICAg
ICB9CiAKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzLCBwYXRjaEJ1ZmZlcik7
Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAg
ICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsK
LSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAg
ZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5h
bGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX2luQnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX2luQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9p
bnN0YW5jZU9mcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHJp
dmF0ZUJyYW5kQWNjZXNzZXMsIHBhdGNoQnVmZmVyKTsKKyAgICBhdXRvIGZpbmFsaXplSUNzID0g
WyZdIChhdXRvJiBnZW5lcmF0b3JzKSB7CisgICAgICAgIGZvciAoYXV0byYgZ2VuIDogZ2VuZXJh
dG9ycykgeworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+c3RhcnQgPSBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zdGFydCk7Cisg
ICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGdlbi5tX2RvbmUpOworICAgICAgICAg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc2xvd1BhdGhCZWdp
bik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkcyk7Cisg
ICAgZmluYWxpemVJQ3MobV9nZXRCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHNX
aXRoVGhpcyk7CisgICAgZmluYWxpemVJQ3MobV9wdXRCeUlkcyk7CisgICAgZmluYWxpemVJQ3Mo
bV9wdXRCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlJZHMpOworICAgIGZpbmFsaXpl
SUNzKG1fZGVsQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlJZHMpOworICAgIGZpbmFs
aXplSUNzKG1faW5CeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5zdGFuY2VPZnMpOworICAg
IGZpbmFsaXplSUNzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMpOwogCiAgICAgZm9yIChhdXRvJiBj
b21waWxhdGlvbkluZm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKLSAgICAgICAgQ2FsbExp
bmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87Ci0gICAgICAgIGlu
Zm8uc2V0Q29kZUxvY2F0aW9ucygKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQYXRoU3RhcnQpLAotICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlv
bkluZm8uZG9uZUxvY2F0aW9uKSk7CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiBpbmZv
ID0gKmNvbXBpbGF0aW9uSW5mby51bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgaW5mby5k
b25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNv
bXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pOwogICAgIH0KIAotICAgIHsKLSAgICAgICAgSklU
Q29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKyti
eXRlY29kZU9mZnNldCkgewotICAgICAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0
XS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRl
Y29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5
UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKLSAgICAgICAgfQotICAgICAgICBt
X2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpKTsK
KyAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKKyAgICBmb3IgKHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7
ICsrYnl0ZWNvZGVPZmZzZXQpIHsKKyAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0
XS5pc1NldCgpKQorICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJU
YWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwogICAgIH0KIAogICAgIGlmIChVTkxJS0VM
WShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkpIHsKQEAgLTk0MCwyNiArOTQxLDM4IEBAIHZv
aWQgSklUOjpsaW5rKCkKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkobV9jb21waWxhdGlvbikp
IHsKKyAgICAgICAgLy8gRklYTUU6IHNob3VsZCB3ZSBtYWtlIHRoZSBieXRlY29kZSBwcm9maWxl
ciBrbm93IGFib3V0IFVubGlua2VkQ29kZUJsb2NrPwogICAgICAgICBpZiAoT3B0aW9uczo6ZGlz
YXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpCiAgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxl
ci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9uLmdldCgpLCBwYXRjaEJ1ZmZlcik7Ci0g
ICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9jb2Rl
QmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7
CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFw
cGluZygpKQogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29k
ZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIHBhdGNoQnVm
ZmVyKTsKICAgICAKKyAgICAvLyBGSVhNRTogTWFrZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0
aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBVbmxpbmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVm
ZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwg
dG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0
b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigq
bmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShy
ZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxs
cyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxM
aW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+
bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1vdmUobV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAg
bV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxl
cyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBq
aXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOworICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNz
KG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2RlLT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9j
b25zdGFudFBvb2wpOworICAgIG1faml0Q29kZS0+bV9pc1NoYXJlYWJsZSA9IG1faXNTaGFyZWFi
bGU7CiAKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dGKCJK
SVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJl
c3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4
ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CisgICAgICAgIGRhdGFMb2dG
KCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV91bmxpbmtlZENv
ZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigp
LCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKIH0KIAot
Q29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZCgpCitDb21waWxhdGlv
blJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayogY29kZUJsb2NrKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogCkBAIC05Njgs
MjUgKzk4MSwxNCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyCiAK
ICAgICBtX2xpbmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCi0g
ICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xv
Y2spOwotICAgICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6
OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7Ci0g
ICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRs
ZXIoaSk7Ci0gICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgotICAg
ICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQo
Qnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+KCk7Ci0gICAgfQotCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApCi0gICAgICAg
IG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmln
aW5NYXApKTsKKyAgICAgICAgbV9qaXRDb2RlLT5tX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92
ZShtX3BjVG9Db2RlT3JpZ2luTWFwKTsKIAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJC
eXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1faml0Q29kZS0+c2l6ZSgpKSAvCi0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9j
b2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9j
b2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNv
ZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VO
b25OdWxsKCkpOwogCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5
OCwxMSArMTAwMCwxMSBAQCBzaXplX3QgSklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fbGlua0J1ZmZlci0+c2l6ZSgpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZh
dGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0
IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9u
RWZmb3J0IGVmZm9ydCkKIHsKICAgICBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBp
bGUoKTsKICAgICBjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAg
cmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWlu
VGhyZWFkKGNvZGVCbG9jayk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlv
bkhhbmRsZXJzKCkKQEAgLTEwNDIsMTggKzEwNDQsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVh
ZFByZXBhcmF0aW9uQmVmb3JlQwogICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJv
Y2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQcmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3Mp
OwogfQogCi11bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
b2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9j
ay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVy
Q291bnRGb3JGcmFtZVBvaW50ZXJPZmZzZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSAr
IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklU
OjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBK
SVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBy
ZXR1cm4gZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2so
KSk7Cit9CisKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9j
ayogY29kZUJsb2NrKQogewogICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFt
ZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklU
OjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0
dXJuIHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkp
OworfQorCiBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygp
CiB7CiAgICAgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBB
U1NFUlRfSklUX09GRlNFVChhY3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFj
dHVhbCA9PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVk
LlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8
aW50PihhY3R1YWwpKTsKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJ
VERpc2Fzc2VtYmxlci5oIgpAQCAtNDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5o
IgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVy
ZmFjZUpJVC5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3Jp
Z2luTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVSZWYuaD4KQEAgLTE0OSwxNCArMTUxLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAK
ICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9u
ZUxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAg
VW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OwogICAgIH07CiAKICAg
ICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNz
IEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAg
Y2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewog
ICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xh
c3MgSklUU3R1YkNhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEs
NiArMTczLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhl
IGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9m
ZnNldC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9m
ZnNldCA9IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAg
ICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29k
ZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAg
ICAgICAgIH5KSVQoKTsKQEAgLTE3OCwyOCArMTgyLDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAg
ICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZv
cnQpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOwor
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sq
KTsKICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01h
aW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0
YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9m
ZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBK
SVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7
CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5w
cml2YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAorICAgICAgICBz
dGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7
CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2Nr
Kik7CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29k
ZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVC
bG9jayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJp
bmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21waWxlVGltZSgpOwogCisgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0
YVRhYmxlR1BSOworICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX2NvbnN0YW50c0dQ
UiA9IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVM
aW5rUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAg
ICAgIHZvaWQgbGluaygpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGls
ZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZh
dGVDb21waWxlKENvZGVCbG9jayosIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAv
LyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVj
ay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gZnVuY3Rpb24pCkBAIC0yMjMsNiArMjMyLDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
ICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
ICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlw
ZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVn
LCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVi
bGljOgorICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBH
UFJSZWcpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJS
ZWcpOworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIs
IEdQUlJlZyk7CisKKyAgICAgICAgdm9pZCBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9n
dWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1QwKTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNr
KEp1bXAganVtcFRvSGFuZGxlcikKICAgICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25D
aGVja3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpAQCAtMjU4LDE2ICsyOTMsMTYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bj
b2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3Rf
dmFyYXJncwogICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJh
cmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAg
ICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyop
OworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25z
dHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5r
SW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0
IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAg
ICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2
YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4
NywxNCArMzIyLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJh
cnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRl
QmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9p
ZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0
ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0
aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFi
bGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
dm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAg
ICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVn
cyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1
ZVJlZ3MpOworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2Zp
bGUmLCBHUFJSZWcpOworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVj
b2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcp
OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAg
dm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKQEAgLTMwNSw4ICszNDEsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0
eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+
CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVj
b2RlKTsKIAotICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdp
c3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7Ci0g
ICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2Vs
bEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNl
bGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
Y29uc3QgQnl0ZWNvZGUmLCBwdHJkaWZmX3QsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJ
RCBzY3JhdGNoR1BSKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
RUNNQU1vZGUgZWNtYU1vZGUoT3ApOwpAQCAtNTkzLDcgKzYzMSw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
anN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21v
ZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
QEAgLTYyNywxNCArNjY0LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRS
aWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQ
cml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0
SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAg
IHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9u
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAg
ICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKLSAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7Cisg
ICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2
ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1
cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjQ2LDcgKzY4Myw3IEBAIG5h
bWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1p
dE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3Jp
dGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0
Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNW
YWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKTsKQEAgLTY1NSw2ICs2OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2
b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxS
ZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwog
ICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAg
IGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC02OTYsMjYg
KzczNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5
cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCBy
ZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9H
RVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNy
ZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQ
RShERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVu
a0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVu
dCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2
ZWRDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVz
b2x2ZV9zY29wZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVk
Q2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNk
ZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNv
bHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFD
SF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBE
RUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2
ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhW
TSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwor
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5l
cmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNU
cnV0aHlHZW5lcmF0b3IoVk0mKTsKQEAgLTc2MCwxMCArNzgwLDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwot
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRo
UHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4KLSAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGw+CkBAIC04MjEsMjAgKzg0MSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdH
UFIwLCB0YXJnZXQub2Zmc2V0KSk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4K
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5
cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25U
cmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJh
dGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3Mp
CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdz
Li4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlv
blR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwg
cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0
eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+
CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46
Omhhc1Jlc3VsdCwgdm9pZD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFk
YXRhJiBtZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFy
Z3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFy
Z3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRp
cmVjdENhbGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKG1ldGFkYXRhLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQp
LCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAt
OTE5LDI1ICs5MzksMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7
IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2Fu
QmVPcHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5n
KCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29s
IGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9w
dGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMg
dXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYs
CiAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAg
ICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgog
CisgICAgICAgIHZvaWQgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdp
c3RlcnMoKTsKKworICAgICAgICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAg
ICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJv
b2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5l
ZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQg
aXQgdG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cg
cGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZl
IHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAg
ICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBj
b3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2lu
dGVycHJldGVyOwogCkBAIC05NjQsOSArOTc5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRj
aFJlY29yZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25l
ZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5
QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3Qg
bV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0
aENhbGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEw
MDAsMTEgKzEwMTIsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3Qg
SW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVj
dGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGlt
aXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBi
b29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1f
aml0Q29kZTsKKyAgICAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0
ciB9OworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51
bGxwdHIgfTsKKworICAgICAgICBNYXRoSUNIb2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQ
dHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENvZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29s
IG1fY29uc3RhbnRQb29sOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xv
YmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkg
fTsKKyAgICAgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7Cisg
ICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJh
ZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAg
ICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAg
ICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7
CisKKyAgICAgICAgc3RydWN0IE5vdEFDb2RlQmxvY2sgeyB9IG1fY29kZUJsb2NrOworCisgICAg
ICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1
bWVudEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMzIwLDcgKzMyMSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdU
MSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIs
IHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihp
bnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7
CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCkBAIC01NzMsNyArNTc3LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KGNvbnN0IAogCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAg
IGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIyLDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlE
b3VibGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+dW5hcnlBcml0aFBy
b2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tX3Byb2ZpbGVJbmRleCk7
CisgICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9tYXRoSUNzLmFkZEpJVE5lZ0lDKGFyaXRoUHJv
ZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24s
IG5lZ2F0ZUlDKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhv
c2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0lu
dAogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7
CkBAIC04OTksOCArOTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0
cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRk
SUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEFkZD4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUQWRkSUMqIGFkZElDID0g
bV9tYXRoSUNzLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRv
TWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFz
dDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQpAQCAtOTQ1LDEwICs5NTAsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIGJvb2wgZ2VuZXJhdGVkSW5s
aW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CiAgICAgICAgIFVuYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxl
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVn
cyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAg
ICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBA
IC0xMDE1LDEwICsxMDIxLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlN
YXRoSUMKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAgICAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFBy
b2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFBy
b2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQ
cm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBh
ZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEw
NTUsMTMgKzEwNjIsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElD
PAogI2VuZGlmCiAKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0
aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJ
QykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNS
ZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVp
bnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBF
TkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAg
LTExMjAsMTMgKzExMjgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1h
dGhJQwogI2VuZGlmCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1h
dGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAg
aWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYg
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7Cisg
ICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAg
ICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJp
dHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdp
c2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwog
CiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVs
KCk7CkBAIC0xMTY2LDcgKzExNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxw
dHI7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOworICAgICAgICBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVC
bG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCku
bV9wcm9maWxlSW5kZXgpOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNv
ZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVy
YW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKQEAgLTEyMTEsOCArMTIyMCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAg
SklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7
CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVC
bG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCku
bV9wcm9maWxlSW5kZXgpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fbWF0aElDcy5hZGRKSVRN
dWxJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVu
dEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZh
bHVlTXVsKTsKIH0KQEAgLTEyMjcsOCArMTIzNiw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9t
dWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVFN1
YklDKiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwogICAgIG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAg
ZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
blZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BD
YWxsRXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwog
ICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6
OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwpAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQgSklUOjpj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKIAogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVn
VDEsIHJlZ1QwKTsKICAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUp
OwpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3Ry
dWN0aW8KICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKIAotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5r
ZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAog
ICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM0MSw3ICszNDEsNiBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgfQogCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKQEAgLTM1NCw3ICszNTMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKGNvbnN0IEluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBA
CiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIK
ICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmgiCiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRlICJTbG93UGF0
aENhbGwuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgpAQCAtNDQsNyArNDUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
KS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOwogfQogCkBAIC01MywxOCArNTQsMTggQEAgc3Rk
OjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9w
OjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9wOjpvcGNvZGVJRCAh
PSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHVuc2lnbmVk
IGNoZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGludCBhcmdDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwg
Y2hlY2twb2ludCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4o
c3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpKTsKIAor
CiAgICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihyZWdp
c3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApKSwg
cmVnVDApOwogICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwogICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDApOwotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBhcnJheVByb2ZpbGVGb3IobWV0YWRhdGEs
IGNoZWNrcG9pbnQpLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0
b3JlMzJUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CiAgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTc4LDcgKzc5LDcgQEAgc3RkOjplbmFi
bGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNv
ZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRl
Y29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3Rh
bnQpCiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50
czsKQEAgLTkxLDcgKzkyLDggQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0
ZWNvZAogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2Fy
ZEFyZ3VtZW50czsKICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25T
aXplRnJhbWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgLWZpcnN0RnJl
ZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
MCk7CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCByZWdUMCwgcmVnVDEsIC1maXJz
dEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0
aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCByZWdU
MSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTAxLDE0ICsxMDMsMTYgQEAgSklUOjpjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9
IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UKICAgICAgICAg
c2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3Bl
cmF0aW9uKHNldHVwT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9u
LCByZWdUMywgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgIG1v
dmUocmV0dXJuVmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50
IGNvdW50LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
KyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7Ci0gICAgSnVtcCBub3RCaWdnZXN0
ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMiwgaW5m
by0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7CisgICAgbG9hZENv
bnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpKSwgcmVnVDMpOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdU
MywgcmVnVDIpOworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5m
bzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CiAgICAgbm90Qmln
Z2VzdC5saW5rKHRoaXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgpAQCAtMTI3
LDE2ICsxMzEsMTYgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpCiB0ZW1w
bGF0ZTw+CiBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVj
b2RlKQogewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7
Ci0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFt
ZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVy
LCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7
CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25t
ZW50KCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwotCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5
dGVjb2RlKTsKIApAQCAtMTQ4LDcgKzE1Miw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5m
byogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9z
LmFkZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChD
YWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1i
eXRlY29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE2MCw0NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9m
ZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90
OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZp
cnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0
KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGls
ZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCi17Citib29sIEpJ
VDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNp
Z25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkgewogICAgIHJldHVybiBmYWxzZTsKIH0K
IAogdGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxs
JiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUs
IFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBD
YWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNz
ZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lz
dGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9j
YWxzID0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0
YS0+bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVt
UGFyYW1ldGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICBz
aHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rl
cjsKKyAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2
IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVm
ZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5h
cmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBieXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0K
KyAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVy
eTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAg
ICAgICBEYXRhRm9ybWF0SlMpOwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAg
ICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVm
ZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8t
PnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxs
ZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVm
ZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1wTGlzdCBzbG93
UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBD
YWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRD
b25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQ
YXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJl
Z1QwLCByZWdUMiwgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVm
ZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uo
c2xvd1BhdGhzKTsKKworICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8t
PmZyYW1lU2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9u
ZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIxOCwxNCAr
MjI2LDI1IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAg
ICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBD
YWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0g
ICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3Bf
Y2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVj
b2RlLCBpbmZvKTsKKworICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOwor
ICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgaW5mbyA9IG1fdW5s
aW5rZWRDYWxscy5hZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBl
Rm9yKG9wY29kZUlEKTsKKworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOworCisgICAgICAg
IEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4
KTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25J
bmZvKCkpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhd
LnVubGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFu
dDsKKyAgICB9CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7
CiAKICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICBhdXRvIGJ5dGVjb2RlSW5k
ZXggPSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7Ci0gICAgdWludDMy
X3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7Cisg
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQpKTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhv
bGRzIGNhbGxlZS4KQEAgLTIzNCwxNiArMjUzLDEyIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
KGNvbnN0IEluc3RydWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkg
PT0gY2FsbExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86
OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
by5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAgICBpZiAoY29t
cGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCisgICAgaWYg
KGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgsIGluZm9D
b25zdGFudCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGxvYWRDb25zdGFudChpbmZvQ29uc3Rh
bnQsIHJlZ1QyKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGF1
dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCBy
ZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAgICAgYXV0byBz
bG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCByZWdUMCwgcmVnVDIsIFsmXSB7CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKICAgICAgICAg
fSk7CkBAIC0yNTMsMTMgKzI2OCwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJ
bnN0cnVjdGlvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9
IGluZm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6WWVzKTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdERh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9uZUxvY2F0aW9u
ID0gbGFiZWwoKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRp
b247CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxp
Z25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0yNzMsMjAg
KzI4OCwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOwogCiAgICAgaWYg
KG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFy
YXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAg
ICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92
bSwgKnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKCptX3ZtLCAq
dGhpcywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVy
bkZyb21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpAQCAtMzk1LDE3ICs0MTAsMzAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogCiAgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwogICAgIAotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
c3R1YkluZm87CisKKyAgICBtb3ZlKHJlZ1QwLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
cmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BS
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlc3VsdEdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25leHQsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlz
KTsKIH0KQEAgLTQxNiwxMCArNDQ0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgaXRlcmF0
b3JHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgSnVtcExpc3Qgbm90
T2JqZWN0OwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9yR1BS
KSk7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckdQUikp
OwpAQCAtNDMyLDE5ICs0NTgsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29ucwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAg
Q2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJh
dG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBtb3Zl
KGl0ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0
eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50
R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZS
ZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogCiAg
ICAgYXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJ
dGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogCiAgICAgZG9uZS5saW5r
KHRoaXMpOwogfQpAQCAtNDUyLDcgKzQ3Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9uID0gKFsmXSAo
KSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKICAgICAgICAgY2Fz
ZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25hcnJvdzsKQEAgLTQ3MCw1
MCArNDkzLDc3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAg
ICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRpb25Nb2RlOjpH
ZW5lcmljKSkpOwogCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBvcjgoVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgQWJz
b2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2l0ZXJhdGlvbk1ldGFkYXRhLnNlZW5Nb2RlcykpOwor
ICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6
Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zm
c2V0T2ZTZWVuTW9kZXMoKSwgcmVnVDApOworICAgIG9yMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgcmVnVDApOworICAgIHN0b3Jl
OFRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9m
ZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0
T2ZTZWVuTW9kZXMoKSk7CiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1
Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9p
bnQoKTsKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2JqZWN0KSBpbiBy
ZWdUMAogCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGl0ZXJSZXN1
bHRHUFIgPSByZWdUMjsKLSAgICBHUFJSZWcgZG9uZUdQUiA9IHJlZ1QxOwotICAgIC8vIGl0ZXJS
ZXN1bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0IGJ5IGlkIGJlbG93Lgot
ICAgIG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgaXRlckNh
bGxSZXN1bHRHUFIpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoaXRlclJlc3VsdEdQUik7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChyZXR1cm5WYWx1ZUdQUiA9PSBiYXNlR1BSKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVk
UmVncyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAg
cHJlc2VydmVkUmVncy5hZGQodmFsdWVHUFIpOworICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZChp
dGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5k
b25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25l
R1BSKSwgcmVnVDMsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCisgICAgICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+
ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiks
IHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNl
VG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAgICAgewotICAgICAgICBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMjsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CisgICAgICAg
IFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9uZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOwor
ICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRjaEFsbG9jYXRvcih1c2VkUmVn
aXN0ZXJzKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRjaEFsbG9jYXRvci5hbGxv
Y2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaEFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIGdsb2JhbEdQUiA9IHNj
cmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgICAgIGNvbnN0IGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgIEp1bXBM
aXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25l
R1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0
aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3Jh
dGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAg
ICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGJhc2VHUFIpOwogCiAgICAgICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwo
KSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCByZWdUNCwg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnBy
b3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAg
ICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6
OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKLSAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BS
IH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJl
c3VsdEdQUik7CiAKICAgICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwogICAgIH0KQEAg
LTUyNyw1OSArNTc3LDU1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNv
bnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9y
Q2hlY2twb2ludChqdW1wKCkpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3Vs
dEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdpc3RlcjsKKwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CiAg
ICAgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7
Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKICAgICAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwotICAgICAgICBu
b3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJDYWxsUmVzdWx0R1BSKSk7CiAK
ICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5k
b25lLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlk
c1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAgICAgCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCi0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmpl
Y3QoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90
T2JqZWN0KGl0ZXJDYWxsUmVzdWx0R1BSKSk7CiAKLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVz
dWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdC
aXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwotCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIHJlZ1QxKTsK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7
CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkb25lVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKworICAgICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CisKKyAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIGRvbmVHUFIpOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGl0ZXJDYWxsUmVzdWx0R1BSKTsK
ICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAg
ICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
VGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElz
Tm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogICAgIH0KIAogICAgIHsgICAKICAgICAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9
IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7
CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVz
LT52YWx1ZS5pbXBsKCk7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRk
cmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygp
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplLCB2YWx1ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgICAgIG1v
dmUoaXRlckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNv
ZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKICAgICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDggKzMyLDExIEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVk
ZSAiUmVnaXN0ZXJTZXQuaCIKIAorCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgUENUb0NvZGVP
cmlnaW5NYXA7CisKIG5hbWVzcGFjZSBERkcgewogY2xhc3MgQ29tbW9uRGF0YTsKIGNsYXNzIEpJ
VENvZGU7CkBAIC0xNTksMTAgKzE2MiwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCB1
c2VEYXRhSUMoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKLSAgICAgICAgaWYgKCFPcHRpb25zOjp1
c2VEYXRhSUMoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKEpJVENv
ZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIHJldHVybiBPcHRpb25zOjp1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQoKTsK
ICAgICB9CiAKQEAgLTIyMyw2ICsyMjYsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzU2hhcmVk
KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZUF0dHJpYnV0ZSA9PSBTaGFyZUF0dHJpYnV0ZTo6U2hh
cmVkOyB9CiAKKyAgICB2aXJ0dWFsIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1h
cCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKwogcHJpdmF0ZToKICAgICBKSVRUeXBlIG1faml0VHlw
ZTsKICAgICBTaGFyZUF0dHJpYnV0ZSBtX3NoYXJlQXR0cmlidXRlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5jcHAJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHZvaWQgSklUQ29tcGlsYXRpb25LZXk6
OmR1bXAoUHJpbnRTdHJlYW0KICAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgb3V0LnByaW50KCIoQ29tcGlsZSBvZiAiLCAqbV9wcm9maWxl
ZEJsb2NrLCAiIHdpdGggIiwgbV9tb2RlLCAiKSIpOworICAgIG91dC5wcmludCgiKENvbXBpbGUg
b2YgIiwgUmF3UG9pbnRlcihtX2NvZGVCbG9jayksICIgd2l0aCAiLCBtX21vZGUsICIpIik7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb21waWxhdGlvbktleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29tcGlsYXRpb25LZXkuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw1
NyArMzAsNTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIENvZGVCbG9jazsKLWNsYXNz
IENvZGVCbG9ja1NldDsKK2NsYXNzIEpTQ2VsbDsKIAogY2xhc3MgSklUQ29tcGlsYXRpb25LZXkg
ewogcHVibGljOgogICAgIEpJVENvbXBpbGF0aW9uS2V5KCkKLSAgICAgICAgOiBtX3Byb2ZpbGVk
QmxvY2sobnVsbHB0cikKKyAgICAgICAgOiBtX2NvZGVCbG9jayhudWxscHRyKQogICAgICAgICAs
IG1fbW9kZShKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbikKICAgICB7CiAg
ICAgfQogICAgIAogICAgIEpJVENvbXBpbGF0aW9uS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlVHlwZSkKLSAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2sobnVsbHB0cikKKyAgICAgICAgOiBt
X2NvZGVCbG9jayhudWxscHRyKQogICAgICAgICAsIG1fbW9kZShKSVRDb21waWxhdGlvbk1vZGU6
OkRGRykKICAgICB7CiAgICAgfQogICAgIAotICAgIEpJVENvbXBpbGF0aW9uS2V5KENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUpCi0gICAgICAgIDogbV9w
cm9maWxlZEJsb2NrKHByb2ZpbGVkQmxvY2spCisgICAgSklUQ29tcGlsYXRpb25LZXkoSlNDZWxs
KiBwcm9maWxlZEJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSkKKyAgICAgICAgOiBtX2Nv
ZGVCbG9jayhwcm9maWxlZEJsb2NrKQogICAgICAgICAsIG1fbW9kZShtb2RlKQogICAgIHsKICAg
ICB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuICFtX3Byb2ZpbGVkQmxvY2sgJiYgbV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52
YWxpZENvbXBpbGF0aW9uOworICAgICAgICByZXR1cm4gIW1fY29kZUJsb2NrICYmIG1fbW9kZSA9
PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKICAgICB9CiAgICAgCiAg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgIT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJ
bnZhbGlkQ29tcGlsYXRpb247CisgICAgICAgIHJldHVybiAhbV9jb2RlQmxvY2sgJiYgbV9tb2Rl
ICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOwogICAgIH0KICAgICAK
LSAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2soKSBjb25zdCB7IHJldHVybiBtX3Byb2ZpbGVk
QmxvY2s7IH0KICAgICBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bW9kZTsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBKSVRDb21waWxhdGlvbktl
eSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJsb2NrID09
IG90aGVyLm1fcHJvZmlsZWRCbG9jaworICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2sgPT0gb3Ro
ZXIubV9jb2RlQmxvY2sKICAgICAgICAgICAgICYmIG1fbW9kZSA9PSBvdGhlci5tX21vZGU7CiAg
ICAgfQogICAgIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIFdURjo6cGFpckludEhhc2goV1RGOjpQdHJIYXNoPENvZGVCbG9jayo+OjpoYXNoKG1fcHJv
ZmlsZWRCbG9jayksIHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPEpJVENvbXBpbGF0
aW9uTW9kZT46OnR5cGU+KG1fbW9kZSkpOworICAgICAgICByZXR1cm4gV1RGOjpwYWlySW50SGFz
aChXVEY6OlB0ckhhc2g8SlNDZWxsKj46Omhhc2gobV9jb2RlQmxvY2spLCBzdGF0aWNfY2FzdDxz
dGQ6OnVuZGVybHlpbmdfdHlwZTxKSVRDb21waWxhdGlvbk1vZGU+Ojp0eXBlPihtX21vZGUpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZh
dGU6Ci0gICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CisgICAgLy8gRWl0aGVyIENvZGVC
bG9jayogb3IgVW5saW5rZWRDb2RlQmxvY2sqIGZvciBiYXNsZWxpbmUgSklULgorICAgIEpTQ2Vs
bCogbV9jb2RlQmxvY2s7CiAgICAgSklUQ29tcGlsYXRpb25Nb2RlIG1fbW9kZTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSklU
LmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZv
LmgiCiAKQEAgLTQ2LDEwICs0Nyw5IEBAIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFn
ZVN0dWJJbmYKIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
cigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKLSAgICA6IG1fY29kZUJs
b2NrKGNvZGVCbG9jaykKLSAgICAsIG1faml0VHlwZShqaXRUeXBlKQorICAgIDogbV9qaXRUeXBl
KGppdFR5cGUpCiB7Ci0gICAgbV9zdHViSW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2st
PmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7
CisgICAgbV9zdHViSW5mbyA9IGNvZGVCbG9jayA/IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNj
ZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZv
LT5jYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGU7CiAKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0
ZXJzID0gdXNlZFJlZ2lzdGVyczsKQEAgLTU5LDcgKzU5LDYgQEAgdm9pZCBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZm
ZXImIHNsb3dQYXRoLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3Rh
cnQpCiB7CiAgICAgbV9zdHViSW5mby0+c3RhcnQgPSBzdGFydDsKLQogICAgIG1fc3R1YkluZm8t
PmRvbmVMb2NhdGlvbiA9IGZhc3RQYXRoLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obV9k
b25lKTsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCkBAIC02Nyw2
ICs2NiwxNSBAQCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBt
X3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBzbG93UGF0aC5sb2NhdGlvbk9mPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihtX3Nsb3dQYXRoQmVnaW4pOwogfQogCit2b2lkIEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQs
IHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9
IGppdC5sYWJlbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2pp
dFR5cGUpKTsKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7Cisg
ICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAg
bV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5l
cmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdz
IGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0xMTAsNyAr
MTE4LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcgogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMsCiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZSkKICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2Rl
T3JpZ2luLCBjYWxsU2l0ZSwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUs
IHN0dWJJbmZvR1BSKQotICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5hbWUudWlkKCkg
PT0gY29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCisgICAgLCBt
X2lzTGVuZ3RoQWNjZXNzKGNvZGVCbG9jayAmJiBwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJs
b2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoYmFzZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQpAQCAtMTIwLDYg
KzEyOCwzNSBAQCB2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhCiAgICAg
Z2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgbV9pc0xlbmd0aEFjY2VzcyA/IElubGluZUFjY2Vzczo6
c2l6ZUZvckxlbmd0aEFjY2VzcygpIDogSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nl
c3MoKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhKSVQm
IGppdCwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHNjcmF0Y2gsIEdQ
UlJlZyByZXN1bHQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAg
aml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJy
YW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNz
QmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkp
LCBzY3JhdGNoKTsKKyAgICBqaXQubG9hZFByb3BlcnR5KGJhc2UsIHNjcmF0Y2gsIEpTVmFsdWVS
ZWdzIHsgcmVzdWx0IH0pOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisgICAg
c2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigp
KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0KTsKK30K
Kwordm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAg
bV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywg
c3R1YkluZm9HUFIpOworICAgIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhqaXQsIHN0dWJJ
bmZvR1BSLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisg
ICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKKwogSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJh
dG9yOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1
ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTEzOCw2ICsxNzUsMTggQEAg
dm9pZCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYQogICAgIGdlbmVyYXRlRmFz
dENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQog
Cit2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BS
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsK
KworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1
YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3Moaml0
LCBzdHViSW5mb0dQUiwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2UsIEJh
c2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwor
fQorCiBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVC
bG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIApAQCAtMTQ5LDYgKzE5
OCwzNCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yCiAgICAgbV9z
dHViSW5mby0+dXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNoKTsKIH0KIAordm9pZCBKSVRQdXRC
eUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVu
c2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5s
YWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOwor
CisgICAgR1BSUmVnIGJhc2UgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
R1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAg
R1BSUmVnIHNjcmF0Y2gyID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAg
ICBHUFJSZWcgdmFsdWUgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworCisgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7
CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7Cisg
ICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQu
c3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIGJhc2UsIHNjcmF0Y2gsIHNjcmF0
Y2gyKTsKKyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJbmxpbmVB
Y2Nlc3MubGluaygmaml0KTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25lID0g
aml0LmxhYmVsKCk7Cit9CisKIHZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0
UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQogewogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQs
IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5UmVwbGFjZSgpKTsKQEAgLTMwMCw2ICszNzcs
MzIgQEAgdm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdAogICAgIGdlbmVy
YXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkp
OwogfQogCit2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKwor
ICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1Yklu
Zm8sIHN0dWJJbmZvR1BSKTsKKworICAgIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVJbkJ5SWRSZWdp
c3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
c2NyYXRjaDsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5s
b2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHNjcmF0Y2gpOworICAgIGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gz
MihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUoKSkpOworICAgIGppdC5ib3hCb29sZWFuKHRydWUsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0IH0pOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGlu
ZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhz
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1
YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUg
PSBqaXQubGFiZWwoKTsKK30KKwogSklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6SklUSW5zdGFuY2VP
ZkdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwKICAgICBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHZh
bHVlLCBHUFJSZWcgcHJvdG90eXBlLCBHUFJSZWcgc3R1YkluZm9HUFIsCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFC
TEUoSklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlv
blZhbGlkYXRpb24uaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlND
SlNWYWx1ZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKQEAgLTM4LDExICszOSwxMTggQEAgbmFt
ZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJ
bmRleDsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJ
bmZvOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNj
ZXNzVHlwZSA6IGludDhfdDsKIGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKK3N0cnVj
dCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHkgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1
bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
byA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gg
PSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0
cnVjdCBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRC
eVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpy
ZWdUMjsKKyAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFu
ZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgorICAgIHN0
YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpyZXN1bHQpOworICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gzID0gR1BSSW5mbzo6cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86
OmFyZ3VtZW50R1BSMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUklu
Zm86OmFyZ3VtZW50R1BSMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMSA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86
OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6
cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGRvbnRDbG9iYmVyUmVnaXN0ZXIgPSBHUFJJbmZvOjpyZWdU
MzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1
bHQgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86
OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVn
VDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdU
MzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsK
K307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHByb2ZpbGUgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3RydWN0IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmQgPSBHUFJJbmZv
OjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChicmFuZCA9PSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisKIGNsYXNzIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
IHsKIHByb3RlY3RlZDoKICAgICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigpIHsgfQpAQCAtNjIs
MTIgKzE3MCwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZSgKICAgICAgICAgTGlua0J1
ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIs
CiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCk7
Ci0gICAgCisKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1
bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogbV91bmxpbmtlZFN0dWJJbmZvIHsgbnVsbHB0ciB9Owor
ICAgIHVuc2lnbmVkIG1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggeyBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKwogcHJvdGVjdGVkOgotICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAgICAgU3RydWN0dXJlU3R1
YkluZm8qIG1fc3R1YkluZm87CiAKK3B1YmxpYzoKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
bV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9kb25lOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX3Nsb3dQYXRoQmVnaW47CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
bV9zbG93UGF0aENhbGw7CkBAIC05OCw3ICsyMTIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1
ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zdGFydDsKK3B1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBt
X3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTExMSw2ICsyMjUsNyBAQCBwdWJsaWM6CiAgICAgICAg
IEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIs
IEFjY2Vzc1R5cGUpOwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2Vt
YmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVu
c2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKIHByaXZhdGU6
CiAgICAgYm9vbCBtX2lzTGVuZ3RoQWNjZXNzOwpAQCAtMTI0LDYgKzIzOSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAg
ICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0
aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIAorICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBz
dHViSW5mb0dQUik7CiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7
CiB9OwogCkBAIC0xMzIsMTAgKzI0OCwxMSBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdlbmVy
YXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENv
ZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBi
YXNlLAotICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJS
ZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBKSVRU
eXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVD
TUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9B
c3NlbWJsZXImKTsKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQm
LCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogICAgIAog
ICAgIFZfSklUT3BlcmF0aW9uX0dTc2lKSkMgc2xvd1BhdGhGdW5jdGlvbigpOwogCkBAIC0xNjMs
MTEgKzI4MCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fz
c2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1Zh
bHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBA
IC0xOTEsOCArMzA2LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1h
Y3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
c3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7
CiB9OwogCkBAIC0yMTYsOCArMzI5LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZh
c3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93
UGF0aEp1bXA7CiB9OwogCkBAIC0yNDEsOCArMzUyLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBn
ZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1
bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yNTUsNiArMzY0LDcgQEAgcHVibGljOgogICAg
ICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZv
R1BSKTsKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAg
IHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJ
bmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiB9OwogCiBjbGFzcyBKSVRJbnN0YW5j
ZU9mR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKQEAg
LTI3Nyw4ICszODcsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXIm
IGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAot
cHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSAr
NDEwLDkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fz
c2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1Zh
bHVlUmVncyBtX3Jlc3VsdDsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0Owog
ICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApA
QCAtMzMwLDggKzQzNiw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAg
aWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
dW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykg
PT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIo
KTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lz
dGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29u
c3RhbnQpIHsKKyAgICAgICAgLy8gQWxsIGxpbmsgdGltZSBjb25zdGFudHMgYXJlIGNlbGxzLgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzQ2VsbCgpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25z
dGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICBBU1NFUlQoc3JjLmlzQ29u
c3RhbnQoKSk7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAg
IFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKHNyYykgIT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNv
bnN0YW50KTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQpAQCAtMTU2LDM2ICsx
ODEsMzYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeAogI2VuZGlm
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8
dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJ
VDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
dHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1Zh
bHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1
cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJu
VmFsdWVHUFIpOwogI2VuZGlmCiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEs
IEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQ
UjIsIHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGVt
aXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCiB9
CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7
Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKKyAgICBpZiAoIWlzS25v
d25DZWxsKHJlZykpCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjA1LDcg
KzIzMCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcygKIGlubGlu
ZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUlu
ZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5
dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygp
KTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byBy
ZXN1bHQgPSBtX2NoZWNrcG9pbnRMYWJlbHMuYWRkKG1fYnl0ZWNvZGVJbmRleCwgbGFiZWwoKSk7
CkBAIC0yMTUsNyArMjQwLDcgQEAgaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2tw
b2ludAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVt
cCBqdW1wKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygp
KTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVj
b2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSArIDEpOwogCiAgICAgYXV0byBpdGVyID0gbV9jaGVja3BvaW50TGFiZWxzLmZpbmQo
bV9ieXRlY29kZUluZGV4KTsKQEAgLTI5MywyOSArMzE4LDMzIEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRDb3VudChBYnN0cmEKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVy
YW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5p
c0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0
cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Ci19
Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUm
IHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCi17Ci0gICAgQVNTRVJUKHNob3VsZEVt
aXRQcm9maWxpbmcoKSk7Ci0KLSAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9u
OiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0Ci0gICAgLy8gc3Rv
cmUuCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVBy
b2ZpbGUubV9idWNrZXRzKTsKLSNlbHNlCi0gICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVz
Y3JpcHRvciA9IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9m
aWxlLm1fYnVja2V0cyk7Ci0gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlw
dG9yLT5hc0JpdHMucGF5bG9hZCk7Ci0gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2Ny
aXB0b3ItPmFzQml0cy50YWcpOwotI2VuZGlmCi19CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
bnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworfQorCisvL2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJv
ZmlsZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCisvL3sKKy8vICAgIEFTU0VSVChzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpOworLy8KKy8vICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246
IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKKy8vICAgIC8vIHN0
b3JlLgorLy8jaWYgVVNFKEpTVkFMVUU2NCkKKy8vICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZh
bHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8jZWxzZQorLy8gICAgRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciogZGVzY3JpcHRvciA9IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4o
dmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIo
KSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKKy8vICAgIHN0b3JlMzIodmFsdWUudGFn
R1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKKy8vI2VuZGlmCisvL30KIAogdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVj
bHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9p
ZD4gSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29k
ZSkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogI2Vsc2UKICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSk7CiAjZW5kaWYKQEAgLTMyMyw0MSArMzUyLDQyIEBAIGlubGluZSBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfc2FtZTxkZWMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxp
bmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pIHsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYg
bWV0YWRhdGEsIEpTVmFsdWVSZWdzIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+
CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9m
aWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFs
dWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFs
dWUpOworCisgICAgcHRyZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFk
YXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNl
dEZvcjxCeXRlY29kZT4obV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2Zp
bGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRy
ZXNzKHNfbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVl
UHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7Ci19CisvL2lubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwg
R1BSUmVnIHJlc3VsdFJlZykKKy8veworLy8gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1
ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworLy99CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1l
dGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgR1BSUmVnIHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNl
bmRpZgogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChS
ZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBSZWdpc3RlcklE
IHNjcmF0Y2hHUFIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBS
ZWdpc3RlcklEIHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
ewogICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2Ny
YXRjaEdQUiwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwor
ICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YShzY3JhdGNoR1BSLCBieXRlY29kZSwgb2Zmc2V0T2ZB
cnJheVByb2ZpbGUpOwogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJv
ZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2Ny
YXRjaEdQUikKIHsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRy
ZXNzKGFycmF5UHJvZmlsZUdQUiwgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0
dXJlSUQoKSkpOwotICAgIH0KKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0
ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5
UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCksIGNlbGxHUFIsIHNjcmF0Y2hH
UFIpOwogfQogCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKQEAgLTM4MCw3ICs0MTAsNyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91
YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAo
cmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29u
c3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1t
UHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZERv
dWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKQEAgLTQ5Niw3ICs1MjYsNyBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYg
KCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwo
cmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUwNiw3ICs1MzYsNyBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQg
dGFnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBp
ZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MTQsMTEg
KzU0NCw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9
CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklU
OjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKQEAgLTU0NCwxMSArNTY5LDExIEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBBU1NFUlQobV9ieXRl
Y29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBo
b3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4K
IAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBt
X2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJl
cigpKQotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KSksIGRzdCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2st
PmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soc3JjKSkgeworICAgICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAg
ICAgICAgICAgICBtb3ZlKEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU2NiwxMSArNTkxLDYgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENv
bnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0
YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0
KSk7CkBAIC01OTUsNyArNjE1LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93Q2FzZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJl
ZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02
MzcsMzAgKzY1Nyw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAK
IHsKICAgICBpZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBt
X2NvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5
dGVjb2RlKQotewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7
IC8vIEhhc2hNYXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0g
bV9jb3BpZWRHZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29w
aWVkR2V0UHV0SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9y
LT52YWx1ZSk7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChr
ZXksIGdldFB1dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJv
ZmlsZSBKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1
aW50NjRfdCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkg
KyAxKSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQp
OwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwot
ICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAg
IHJldHVybiBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJv
ZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAg
ICBtX2NvcGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1
cm4gYXJpdGhQcm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxp
bmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBA
IC02ODEsNiArNjc4LDYwIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxP
cFAKICAgICByZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRh
KGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkK
K3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9j
ay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwg
cmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
c2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhzX21l
dGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRh
dGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0
YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQp
Cit7CisgICAgbG9hZDgoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2Nr
LT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBy
ZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRl
Y29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBl
IHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAg
c3RvcmU4KHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2st
Pm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjpzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRh
dGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRh
YmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0
KQoreworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRh
dGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgc19tZXRhZGF0
YUdQUiwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvbnN0YW50
KEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY29uc3RhbnRJbmRleCwgR1BSUmVnIHJlc3VsdCkK
K3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19jb25zdGFudHNHUFIsIHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oY29uc3RhbnRJbmRleCkgKiA4KSwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6bG9hZEdsb2JhbE9iamVjdChHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRDb25z
dGFudChtX2dsb2JhbE9iamVjdENvbnN0YW50LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50
LCBHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3Rh
bnQoKSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVzdWx0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhy
ZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVz
dWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBW
TTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBz
dG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZy
YW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJF
eGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRp
b24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTk3LDcgKzk5
Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKIAogICAgIC8v
IGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3
aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVu
ZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0
LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRh
YmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDI0LDcgKzEwMjQsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBm
b3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxl
SW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFy
YWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsK
IApAQCAtMTA0Miw3ICsxMDQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhj
b25zdCBJbgogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlv
bnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFN0cmlu
Z0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
W3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUlu
ZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5n
KSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgog
I2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQ
cmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTU0
LDExICs1NiwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgaWYgKHNyYy5p
c0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAg
ICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zv
cihkc3QpKTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+
aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKSB7CisgICAgICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAg
ICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NG
b3IoZHN0KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29u
c3RhbnQoc3JjLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9y
KGRzdCkpOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODcsMzcg
KzkyLDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQg
SklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
SlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
KTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1
cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0g
cmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3Rl
cklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJl
Z1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBi
dXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVK
U09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxs
b2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJl
Zywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3Vs
dFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNl
KCptX3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxs
b2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxl
KCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0
dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9
IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVn
LCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhz
dHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hS
ZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hS
ZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJl
ZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAg
ICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzEz
NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdl
IGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4K
LSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Q
cm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RF
cXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVj
dCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKIApAQCAtMTU0LDMwICsx
NTgsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVy
YW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0
ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRv
bmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0
LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm90b0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87Cisg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBw
cm90b0dQUik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VW
YWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3Ig
U3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8p
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOwogCiAgICAgSklU
SW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICBy
ZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDUsCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8v
IHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
KyAgICAgICAgcmVzdWx0R1BSLAorICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgcHJvdG9HUFIs
CisgICAgICAgIHN0dWJJbmZvR1BSLAorICAgICAgICBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnNjcmF0Y2gxLCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gyKTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3Rh
bmNlT2Y7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2Vu
KTsKLSAgICAKKwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMTky
LDE0ICsyMDQsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQog
ICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0g
ICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5j
ZU9mT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9w
ZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25B
cmdHUFIwLCByZWdUMiwgcmVnVDEpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qy
LCByZWdUMSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1Yklu
Zm8gPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6dmFsdWUgPT0gYXJndW1lbnRHUFIyKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG8gPT0gYXJndW1lbnRHUFIzKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVy
YXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0
cnVjdGlvbiopCkBAIC0yNDAsNyArMjUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lz
X3VuZGVmaW5lZChjbwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0
cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM3NCw3ICszODUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygmUmVnaXN0
ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAg
IGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiAjZWxzZQpAQCAtMzgzLDkgKzM5
NCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lm
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihW
TSYpCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGpp
dC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSk7CkBAIC00MTEsNyArNDIyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJp
bWl0aXZlKGNvbnN0IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0
eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0
NDQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBK
SVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rp
b25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9u
LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9u
YW1lLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25v
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ3Niwx
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHBy
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNo
SWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZw
UmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGds
b2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVl
UmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwog
I2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNl
eUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNDkzLDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1Qw
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1MzIs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmly
c3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJp
dCBvbiB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdl
dCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsK
IApAQCAtNTQzLDcgKzU1Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJ
bnN0cnUKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hU
ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFy
Z2V0KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs1
OTUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBK
SVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQ
dHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNW
YWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNp
YWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgo
VHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxv
Y2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAg
IHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdl
dCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2MzYsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RH
UFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUp
LCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY1Myw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzA4LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1w
VG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzcyNSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90
aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0g
YXJndW1lbnRHUFIxOwpAQCAtNzIwLDcgKzczNCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJT
ID4gMAogICAgIGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwot
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwo
YXJndW1lbnRHUFIwKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoYXJndW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyArOTIyLDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAK
QEAgLTkxOCw3ICs5MzMsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25z
dCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3Ry
aWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkzMSw3ICs5NDcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90b19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3ROdW1iZXIocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTY3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwog
ICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0VlJlZyk7CiB9CkBAIC05NzgsNyArOTk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
b2JqZWN0KGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdU
MCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVn
VDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBp
ZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dFZSZWcpOwogfQpAQCAtOTkzLDcgKzEwMDksMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2go
Y29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1l
Rm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hP
ZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIE9PUFM6IFRo
aXMgaXNuJ3QgZWxlZ2FudC4gV2h5IGFyZW4ndCB0aGV5IGluIHRoZSBjYWxsZWUgc2F2ZSBidWZm
ZXIuIEkgZ3Vlc3MgYmVjYXVzZSB3ZSBjYW4gT1NSIGV4aXQgaGVyZT8KKyAgICBlbWl0TWF0ZXJp
YWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOwogCiAgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklm
Q2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMDExLDIzICsxMDMwLDExIEBA
IHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVu
dCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZl
cjsKLSAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwg
JnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRW
YWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZh
bHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBz
a2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhj
ZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAg
aWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5m
b3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSwg
cmVncyk7Ci0gICAgICAgIH0pOwotICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0K
IApAQCAtMTA1Myw4ICsxMDYwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25z
dCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0
aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25z
LCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dp
dGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRl
ZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUu
ZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwODEsMTMgKzEwODgsMTQgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBq
dW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0
ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hK
dW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29y
ZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29y
ZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRU
YWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJ
bmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5
VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFi
bGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsK
IH0KIApAQCAtMTA5OSwyMCArMTEwNywyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3Ry
aW5nKGNvbnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1f
c2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5h
dGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRh
YmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpT
dHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIHRhYmxlSW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dp
dGNoUHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERlYnVnPigpOwotICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdn
ZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAs
IENvZGVCbG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkpLCByZWdUMCk7CiAgICAgSnVt
cCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVj
b2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMp
OwpAQCAtMTEzMyw3ICsxMTQzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJ
bnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihFcXVh
bCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CkBAIC0xMTQ4LDcgKzExNTgsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0
IEluc3RydWN0CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1
YwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CkBAIC0xMTg4LDEyICsxMTk3LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IElu
c3RydWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5p
dGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50
ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlm
ZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgc2l6ZV90IGNvdW50ID0gbV9j
b2RlQmxvY2stPm51bVZhcnMoKTsKKyAgICBzaXplX3QgY291bnQgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5udW1WYXJzKCk7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGZvciAo
c2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCiAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIo
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihtX2Nv
ZGVCbG9jayk7CisgICAgCisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwKTsKIAogICAgIGVt
aXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAjZWxzZQpAQCAtMTIxMiw3ICsxMjIzLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4
NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTEzMTAsMjMgKzEzMjEsMTkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZUlEKiBjYWNo
ZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1
Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BUb1Ro
aXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1QyKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRl
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwotICAgIFdyaXRlQmFycmll
ckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7
CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVE
YXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKQEAgLTEz
NDIsNyArMTM0OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNl
dE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0
aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFn
KSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0
aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVu
Y3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKIAotICAgIGxvYWRQdHIoY2FjaGVk
RnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcENyZWF0ZVRoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZENhbGxlZSgpLCBj
YWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJh
bmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNl
ZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihO
b3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0
aXBsZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM3OSw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdU
MiwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVl
UmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIsNyArMTM5MCw4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSks
IHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJl
dHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyArMTQwMyw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAs
IHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzE0MTQsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Qy
LCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0MjksMTEgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdp
c3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwogfQpAQCAtMTQzMCw3ICsxNDQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpy
ZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5s
b29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygp
ICYmIG1fdW5saW5rZWRDb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vh
cmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0oKS5nZXRMb29wSGlu
dEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkUHRyKHB0ciwgcmVn
VDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaFB0cihCZWxvdywgcmVn
VDAsIFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xp
bWl0KCkpKTsKQEAgLTE0NDAsNyArMTQ1Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGlu
dChjb25zdCBJbnN0cnUKICNlbHNlCiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYK
LSAgICAgICAgbW92ZVZhbHVlKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVzdWx0UmVn
cyk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVzdWx0UmVncy5ncHIoKSk7CiAgICAgICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTE0NTMsOCArMTQ2
NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKIAogICAgIC8v
IEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAogICAgIGlmIChjYW5CZU9wdGltaXpl
ZCgpKSB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZlT3Ja
ZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxv
b3AoKSksCi0gICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NP
ZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAgICAgICBBZGRyZXNzKHJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9CiB9CiAKQEAgLTE1
MDksNyArMTUyMiw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFy
Z3VtZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTIyLDcgKzE1MzYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfY2hlY2tfdHJhcHNf
aGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJz
OjplYnApOwpAQCAtMTU2NCwzNCArMTU3OCwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVn
ZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRHUFIwOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVC
bG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRO
ZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2Rl
Lm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
YXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMg
PSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAg
ICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50
LCBhcmd1bWVudEdQUjIpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7
CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3
X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3
X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApA
QCAtMTYyMSwyMyArMTYzNywyNCBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNv
bnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVu
dEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEp
OwogI2VuZGlmCiAKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxv
Y2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25z
dGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9u
RXhwciwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2Rl
Lm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRH
UFIyKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJh
dG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Fz
eW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3Bf
bmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0
aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQog
fQogCkBAIC0xNjY0LDI5ICsxNjgxLDMwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19n
ZW5lcmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1f
YXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNp
emUpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMik7CisgICAgbWF0
ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0
YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBzaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dp
dGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRh
Lm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMik7CiAjZWxzZQorICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9j
YXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKICAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJv
ZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0g
ICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJl
Z1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQogCkBAIC0xNjk0LDgg
KzE3MTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKKyAgICBtX2lzU2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAg
VHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlv
bjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3Rhcmdl
dFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTc3NywyMCArMTc5NywyNSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIw
ICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMg
aWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tl
dFJlZyA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRo
aXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJS
ZWcgPSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1Bh
Y2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVu
dCByZWdpc3Rlci4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAg
IGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNo
MVJlZywgc2NyYXRjaDJSZWcpOworICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
c2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVn
VDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0Uo
SlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIG1faXNTaGFyZWFibGUg
PSBmYWxzZTsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Js
b2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsK
QEAgLTE4NjAsNyArMTg4NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25z
dCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxOTExLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAj
aW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNv
bW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRl
ICJERkdPU1JFbnRyeS5oIgpAQCAtMjg1NSw3ICsyODU2LDcgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRh
YmxlLm1fY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwogCkBAIC0yODgwLDcgKzI4ODEs
NyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1
ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJh
c2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2st
PnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAg
dm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJbnQzMigpKQpAQCAtMjkwMyw3ICsyOTA0LDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdm9pZCogcmVzdWx0Owot
ICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJ
bXBsKiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZhbHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCShyZXZpc2lvbiAyODI2NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw3ICs4NywxMiBAQCBhdXRvIEpJVFBsYW46OnRpZXIoKSBjb25zdCAtPiBUaWVyCiAK
IEpJVENvbXBpbGF0aW9uS2V5IEpJVFBsYW46OmtleSgpCiB7Ci0gICAgcmV0dXJuIEpJVENvbXBp
bGF0aW9uS2V5KG1fY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksIG1fbW9kZSk7Cisg
ICAgSlNDZWxsKiBjb2RlQmxvY2s7CisgICAgaWYgKG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1v
ZGU6OkJhc2VsaW5lKQorICAgICAgICBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRD
b2RlQmxvY2soKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLT5i
YXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgcmV0dXJuIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVC
bG9jaywgbV9tb2RlKTsKIH0KIAogYm9vbCBKSVRQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdD
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4
LDcgKzM0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZh
bGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJ
c1N5bWJvbCA9IHRydWU7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5MiArNDksMTAyIEBAIG5hbWVzcGFjZSBK
U0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7
CiAKLSAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6
OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgaWYgKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBP
cHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CisgICAgICAgIGF1
dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAg
ICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2Ny
YXRjaEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7
CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEp
LCByZXN1bHRSZWdzLCByZWdUMik7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKICAgICAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisKKyAgICAgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5
VmFsOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBz
dHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAg
ICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wY29kZVR5cGU+CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0
IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nh
c2VzKGl0ZXIpKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKLSAgICAg
ICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRl
eCsrXTsKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAg
ICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1f
Ynl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgot
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
R2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBh
cmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1
bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChw
cm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgcmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0OSw3
ICsxNTksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRy
ZXNzKCk7CkBAIC0xNjAsOCArMTcwLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1l
bnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7
CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNz
ZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19h
c3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMTg3LDM0ICsxOTcsNDAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3Bl
cnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdl
dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAg
ICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BS
KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtl
ZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6
OkdldFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29k
ZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBz
dHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKwor
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFw
cGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
CiAgICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwpAQCAtMjIzLDkgKzIzOSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0
ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMjM1LDI2ICsyNTMsMjAgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fz
c2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVH
UFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQpAQCAtMjY0LDcgKzI3Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKQEAgLTMwMCwyMSArMzEyLDI4IEBAIHZvaWQgSklUOjplbWl0X29w
X3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29k
ZS5tX2JyYW5kOwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5k
R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFj
Y2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MoYnJhbmRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAg
Ly8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNp
bmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI0LDE3ICszNDMsMjIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRXcml0
ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZh
dGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVu
dEluc3RydWN0aW9uKTsKKwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBKSVRQ
cml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNb
bV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0g
cmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRl
QnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxP
cGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0z
NDQsMjQgKzM2OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQo
CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQ
Uik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAv
LyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJn
dW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0
dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxG
dW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+
OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2
YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRl
QnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogI2VuZGlmCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzcwLDE5ICszODgsMjggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjbwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVj
b2RlLm1fYnJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCByZWdUMSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0
ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBi
cmFuZEdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAg
IEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5k
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRl
QnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5h
cHBlbmQoZ2VuKTsKIH0KIApAQCAtMzk0LDkgKzQyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRP
cHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVz
cyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BS
Myk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC00MDYsMjQgKzQzNSwxOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkg
dXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFu
ZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0
KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxk
ZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlw
ZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1p
emU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxf
ZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzUsMzAg
KzQ1OCw0MiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJv
ZmlsZSksIHJlZ1QzKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJv
ZmlsZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwg
cmVnVDMsIHJlZ1Q0KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9maWxlR1BSKTsKKyAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1Zh
bHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBwcm9maWxlR1BS
LCBzdHViSW5mb0dQUik7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkp
KQogICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOworICAgIHN0
dWJJbmZvLT5wdXRLaW5kID0gc3RkOjppc19zYW1lX3Y8T3AsIE9wUHV0QnlWYWxEaXJlY3Q+ID8g
UHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21h
TW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1
dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJl
IHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTQ3NCwxNSArNTA5
LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVD
TUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwotICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkg
ewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICAgICAgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOwotICAgICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpA
QCAtNDk4LDcgKzUzMCwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25z
dCBJCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgLy8gVGhleSBhcmUgY29u
ZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUp
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSwgcmVnVDIsIGdlbi5zdHViSW5mbygpLCByZWdUMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjQpOworICAgIGlmIChpc0RpcmVjdCkKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSwgT3BQ
dXRCeVZhbERpcmVjdDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50
R1BSNSk7CisgICAgZWxzZQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpLCBPcFB1dEJ5VmFsOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBjYWxsT3BlcmF0
aW9uKEFkZHJlc3MoYXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBh
cmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUxMiw3ICs1NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsK
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAgICAgQ2FsbCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU2NCw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKQEAgLTUzMywxOCArNTc0LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAg
ICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFs
T2JqZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFs
dWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
ZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVn
aXN0ZXJTZXQgdXNlZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFs
dWUsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQo
IXVzZWQuY29udGFpbnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJl
Z1Q1KSk7CisgICAgfQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFn
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmpl
Y3RHUFIpOwpAQCAtNTcwLDIwICs2MTcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZh
dGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
OjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJl
Z3MocmVnVDIpLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BS
UmVnLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZp
ZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3Ry
dWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4
ICs2NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2
YXRlTmFtZT4oKTsKLSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5t
X3B1dEtpbmQ7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBK
SVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4Kytd
OwogCkBAIC02MDMsMTMgKzY2MCwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZShjCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1
dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZp
bmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxk
T3B0aW1pemU7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJl
IGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQ
UiwgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisgICAg
UHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworCisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFy
Z3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1
bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50c0dQUjMsIGFy
Z3VtZW50R1BSNCwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC02MjIsMTggKzY4MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X3ByaXZhdGVfbmFtZShjCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IHJlZ1Q0OwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKQEAgLTY0MywxNCArNjk3LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlm
ICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0
LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBj
b25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3
MzQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90
IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwg
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzc0
NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qg
b3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBt
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwo
KSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3Nl
dHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5
LDcgKzc1NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAg
ICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNl
dHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNzA5LDcgKzc2Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEs
IGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1Qx
LCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyAr
Nzc3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGlu
dDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc4NiwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJz
OjpzY3JhdGNoOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklU
RGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hH
UFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6RGVsZXRlQnlJRDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVu
ZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8g
SUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFz
ZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVu
ZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAg
LTc1OSwxNSArODI4LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3Qg
SW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRH
UFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtNzgxLDI0ICs4NTIsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3Vt
ZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfaWRfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxl
dGVCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25EZWxldGVCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC04MDgsNyArODc0LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtODQ1
LDIyICs5MTEsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZv
R1BSLCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3Jp
dGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xv
YmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5NjAsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbihBZGRyZXNzKGFyZ3VtZW50R1BSMSwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CkBAIC04OTksMjQgKzk3OCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5
X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50
R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0Owog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3Zh
bF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMDAs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQg
bWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFp
bGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlu
bGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1h
eSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7
CkBAIC05NjEsMjIgKzEwMzUsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChj
b25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5
R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBi
YXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZS
ZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1
YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEw
NjksMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRC
eUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVu
dEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0x
MDAzLDI2ICsxMDg5LDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNv
bnMKICAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlH
UFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKSwgZGVj
bHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXpl
OwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uVHJ5R2V0QnlJ
ZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAzMCwyMiArMTExMCwz
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVn
cywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNj
ZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiArMTE0MywxOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dl
dEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCBy
ZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwpAQCAtMTA3Myw4MyArMTE2NCw2MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1l
bnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUp
LCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25H
ZXRCeUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BS
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwog
ICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9
IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRh
dGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6
QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2Zp
bGUsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJ
ZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRh
OjpvZmZzZXRPZk1vZGUoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIEp1bXAgbm90QXJyYXlMZW5n
dGhNb2RlID0gYnJhbmNoMzIoTm90RXF1YWwsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50
OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0
aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAg
IG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlz
VlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFw
cGVuZChnZW4pOworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1f
Z2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTE1OCwxNiArMTIyNywxOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
ICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEy
NDgsNTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVy
blZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVy
blZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVH
ZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVz
dWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRX
aXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRo
aXM7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChn
ZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTIwNiw3ICsxMzA4LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0MSwxNiArMTM0Mywx
OSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0
YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTEyNjAsMjggKzEzNjUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBy
ZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRo
aXNHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI5MSw3ICsxMzkw
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0
IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZh
aWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBp
bmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBt
YXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OwpAQCAtMTMyOSwyMyArMTQyOCwzNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29u
c3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgLy8gSW4gb3Jk
ZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0
IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUg
YXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbics
IGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBv
ZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlk
UmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAg
IEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUp
LAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAg
ICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0
S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9k
ZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5
SWRzLmFwcGVuZChnZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJl
IHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0
NzIsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwog
ICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlk
SW5kZXgrK107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oQWRk
cmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50
R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEzNzYsMjUgKzE0OTMsMTkgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlR1BS
ID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHBy
b3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
cHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
Z2VuLnNsb3dQYXRoRnVuY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRD
YWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQpAQCAtMTQwNCw3ICsxNTE1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdo
dCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhl
ciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAg
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAg
ICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTQ0MSwyMCArMTU1MiwzMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcg
PSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBy
ZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUlu
QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSk7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2lu
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQpAQCAtMTQ2MywxNCArMTU4NSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5fYnlfaWQoY29uc3QgSW5zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNb
bV9pbkJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjA1LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
Ly8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5
IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBh
IGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2MjksMzMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NjQsMTggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlW
YWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5
VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0
aW9uKEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTE1NTYsNTkgKzE2ODYsNzAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQ
UjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRf
YnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQu
CiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1
bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAg
ZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlw
ZSB0eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIEpJVEluQnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBl
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworCisgICAgSklUSW5CeVZhbEdlbmVy
YXRvciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlw
ZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSB0eXBlOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29k
ZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBz
dHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKwor
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lk
IEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUg
dHlwZSkKK3ZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlw
ZSB0eXBlKQogewotICAgIEFTU0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1l
IHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBVTlVTRURfUEFS
QU0oYmFzZSk7CisgICAgVU5VU0VEX1BBUkFNKHByb3BlcnR5KTsKKyAgICBBU1NFUlRfVU5VU0VE
KHR5cGUsIHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBv
cGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5k
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBh
cmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb24oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE2MTgsMjcgKzE3NTksMjEgQEAgdm9pZCBKSVQ6
OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IHJl
Z1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHBy
b3BlcnR5T3JCcmFuZEdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0
aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVl
KTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQ
cml2YXRlQnJhbmRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlv
bkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6
ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNzVHlw
ZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3Bl
cmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIp
OwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19w
cml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2
NTIsNyArMTc4Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKGMK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0
ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAgICBl
bWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNv
ZGUubV9wcm9wZXJ0eSwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTY2NiwxOSArMTgwMSwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aGFzX3ByaXZhdGVfYnJhbmQoCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZUJyYW5kPigp
OwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFz
UHJpdmF0ZUJyYW5kKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5
dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9icmFuZCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJy
YW5kKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoIW5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9i
YWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRT
ZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQg
ZGVwdGgpCiB7Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Ms
IHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCiAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CkBAIC0xNjg4LDYg
KzE4MjYsNyBAQCB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9PUFMK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29w
ZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0xNzAxLDcg
KzE4NDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAg
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAg
ICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNv
ZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJl
Z1QxKTsKICAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGlu
Z0Vwb2NoLCByZWdUMSk7CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09m
R2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKICAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwpAQCAtMTcxNSw3ICsxODU0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNl
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBK
U1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9j
ayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsK
ICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwog
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0xNzk0LDg3ICsxOTMzLDEwNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmls
ZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1f
cmVzb2x2ZVR5cGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogCiAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkg
PT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEFTU0VSVCht
X3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3Vy
cmVudEluc3RydWN0aW9uKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSBy
ZWdUNzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIC8vIElmIHdlIHByb2Zp
bGUgY2VydGFpbiByZXNvbHZlIHR5cGVzLCB3ZSdyZSBnYXVyYW50ZWVkIGFsbCBsaW5rZWQgY29k
ZSB3aWxsIGhhdmUgdGhlIHNhbWUKKyAgICAvLyByZXNvbHZlIHR5cGUuCiAKLSAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gTW9kdWxlVmFyKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRh
dGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgaWYgKHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKKyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShi
eXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZpcm9u
bWVudCgpLCByZWdUMCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9m
ZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAg
ICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0
YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOworCisgICAgICAgIGF1dG8g
Y2xvc3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBK
SVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5l
OiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICAgICAgfTsKIAotI2RlZmluZSBS
RVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jl
c29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVT
T0xWRV9TQ09QRV9HRU5FUkFUT1IpCisgICAgICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4g
SklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MiKTsKICAgICAgICAgfTsKLSN1bmRlZiBSRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUgorCisgICAgICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvciA9IFtd
IChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2Nv
cGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgZ2Vu
ZXJpYyIpOworICAgICAgICB9OworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFH
UFIgPSByZWdUNzsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2Owor
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwogICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CiAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwot
ICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2
ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICAgICAgaWYgKHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHVi
KGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAgICAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgY29k
ZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0
b3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5l
cmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwoY29k
ZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIH0KIAogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0
aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7
CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdv
cmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKworICAgIENDYWxsSGVscGVy
cyBqaXQ7CisKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7IC8vIGluY29taW5nCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OyAvLyBpbmNvbWluZwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcgLSBw
YXNzIHRocnUgdG8gc2xvdyBwYXRoLgogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0
R1BSID0gcmVnVDQ7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBS
RUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSk7
CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
IAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRh
dGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAg
IGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRh
ZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIp
OwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25D
aGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sg
PSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RH
UFIgPSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0g
SW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0g
ICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9i
amVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9m
ZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xv
YmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9p
bnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwog
ICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcykgewotICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAg
ICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKKyAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCBy
ZWdUMCk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09G
RlNFVE9GKE1ldGFkYXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7CiAKLSAgICAgICAg
TGFiZWwgbG9vcCA9IGxhYmVsKCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMiha
ZXJvLCByZWdUMSk7CisgICAgICAgIExhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAgICAg
SnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZWdUMCk7Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAg
ICAgICAgICAgIGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAgICAg
IGppdC5qdW1wKCkubGlua1RvKGxvb3AsICZqaXQpOwogICAgICAgICB9Ci0gICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgIH07CiAKICAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewpAQCAtMTg4MiwxMiAr
MjAzOSwxMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNj
b3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAg
ICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9i
YWxPYmplY3RHUFIpOwotICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJl
Z1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRk
cmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGlj
YWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKGdsb2JhbE9iamVj
dEdQUiwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmpl
Y3RHUFIpOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQu
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9n
bG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNl
LmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBK
U0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdU
MSkpOworICAgICAgICAgICAgaml0Lm1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xODk3LDExICsyMDU0LDExIEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkgZm9yIEdsb2JhbFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxW
YXIqLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVn
VDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAg
ICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpCi0gICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVj
dDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAg
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0
T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTE5MDksNyArMjA2Niw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgICAg
IGVtaXRSZXNvbHZlQ2xvc3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9z
dXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTE5MTksODMgKzIwNzYsNDUgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAg
fTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAg
ICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0K
LSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEds
b2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToK
LSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAg
ICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBl
ID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2Ug
ewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVn
VDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
LmxpbmsodGhpcyk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0
YWRhdGE6Om9mZnNldE9mUmVzb2x2ZVR5cGUoKSksIHJlZ1QwKTsKIAotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgYXV0byBl
bWl0Q2FzZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgICAgIEp1
bXAgbm90Q2FzZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihy
ZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOworICAgICAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgIG5vdENhc2Uu
bGluaygmaml0KTsKKyAgICAgICAgfTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgp
KTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
KyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJv
cGVydHkpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgZW1p
dENhc2UoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNl
KEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNl
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmpp
dCk7CiAgICAgfQogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xv
d19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dD
YXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
d0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Nj
b3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAK
LSNkZWZpbmUgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29w
ZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlm
IGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBc
Ci0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAg
ICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAi
QmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9S
X0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRl
ZiBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYg
dm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBv
bmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0
IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZh
aWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBp
bmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBt
YXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJl
YWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwNjUs
NiArMjE4NCw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIC8vIE9P
UFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21T
Y29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CkBAIC0yMTc4
LDcgKzIyOTgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yMTg2LDkgKzIzMDYs
OSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlv
bkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9u
R2V0RnJvbVNjb3BlLCBkc3QsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKIH0K
IAogI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yMTk2LDQxICsyMzE2LDUw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAg
ICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJU
KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBj
dXJyZW50SW5zdHJ1Y3Rpb24pOworCisgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10g
KFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1
bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZh
ciIpOworICAgIH07CisKKyAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
R2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9w
R2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAi
QmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAg
YXV0byBnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAg
ICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9w
dCwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHNjb3BlR1BSID0gcmVnVDY7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IHJlZ1Q1OwogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAg
ICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Qq
PigmbWV0YWRhdGEubV9vcGVyYW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSk7CiAKLSNkZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBl
KSBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0
YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBG
T1JfRUFDSF9SRVNPTFZFX1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9
OwotI3VuZGVmIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFP
ZmZzZXQpLCBtZXRhZGF0YUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgc2NvcGVHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFP
ZmZzZXQpLCBtZXRhZGF0YUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGNvZGU7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAg
ICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3NHZW5lcmF0b3IpOworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0
dWIoZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2Fs
bChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBj
b25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25h
bDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAg
ICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3
aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgpAQCAtMjIzOSw5OSArMjM2OCw4OCBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBP
cEdldEZyb21TY29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQ
UiA9IHJlZ1Q3OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBS
RUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSk7
CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAg
IGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIo
cmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5h
ZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0g
ICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BS
LCBpbnQzMl90IG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAg
ICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0
cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hl
Y2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUikgeworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJl
KCkpLCByZWdUMSk7CisgICAgICAgIGppdC5tb3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAg
ICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsK
ICAgICB9OwogCi0gICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBb
Jl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpT
R2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2lu
dFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Cisg
ICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25X
YXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4
KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAotICAgIGF1dG8gZW1p
dEdldFZhckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAg
ICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZy
b21JbmRpcmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewot
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAg
ICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCiAgICAgYXV0byBlbWl0R2V0Q2xvc3Vy
ZVZhciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgewogICAgICAg
ICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNo
aWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3Bl
R1BSLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpT
TGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworICAgICAg
ICBqaXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgaml0
LmFkZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkp
LCByZWdUMCk7CiAgICAgfTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVt
aXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2gg
KHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKHNjb3BlR1BSKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9u
IHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xv
YmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBm
b3IgdGhlIHZhciBpbmplY3Rpb24uCiAKICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IHJlZ1QwOwogICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsK
ICAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7CiAgICAgICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKIAotICAgICAgICAgICAgaml0QXNz
ZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAg
ICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJh
bmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNj
b3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBq
aXQuYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIG9mZnNldCk7
CiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1w
IGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0
ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0
aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRP
ZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0
LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJ
VE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5r
KCZqaXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVn
MzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0
KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0Vp
Z2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
LCByZXN1bHQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGppdC5uZWczMihv
ZmZzZXQpOworICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0
KTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSwgcmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAg
ICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJh
bmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDAp
OworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAg
aml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwg
cmVnVDMpOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsKICAgICAg
ICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAg
IGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM0MSw4NiArMjQ1OSw2MyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNo
IChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5
cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVt
aXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKLQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAg
IGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7
Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVU
eXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENv
ZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9F
bmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBp
bnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0g
ICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsUHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Cisg
ICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9m
R2V0UHV0SW5mbygpKSwgcmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdl
dFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAK
IAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZq
aXQpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5i
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAg
ICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVt
cCBpc0dsb2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9i
YWxQcm9wZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7
CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoanVtcCgpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAo
KSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2Up
OwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQog
CiAgICAgc3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsK
LSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyht
ZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpv
ZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hC
dWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRo
dW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihy
ZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAg
ICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29w
ZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklU
IGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1
bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5
cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09Q
RV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJv
bV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBi
eSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBK
SVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYg
Q1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNDQ5LDcg
KzI1NDQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
Q2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIEp1bXAgZXhj
ZXB0aW9uQ2hlY2sgPSBqaXQuZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKIAot
ICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVy
LCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2
NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgTWV0YWRhdGE6Om9m
ZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsK
ICAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6
bnVtYmVyVGFnUmVnaXN0ZXIpOwogCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTI0NzEsODYgKzI1NjYs
NzYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogfQogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZh
cmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
LSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7
Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFk
ZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGlu
ZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAg
ICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwg
cmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRy
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci19Ci0KIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9T
Y29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgR2V0UHV0SW5m
byBnZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7Ci0gICAgUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJl
Kiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50
cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRh
dGEubV9vcGVyYW5kKTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBSZXNvbHZlVHlw
ZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisKKyAgICBhdXRvIGVtaXRDb2RlID0g
WyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVU
eXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVj
ayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZv
ciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Nj
b3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAg
Ly8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNh
Y2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LgorICAgICAg
ICAgICAgLy8gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9y
IHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEp
OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAg
ICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworCiAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAKICAgICAg
ICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIo
RXF1YWwsIHJlZ1QwLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDAp
OwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
Myk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2Nv
cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwogICAgICAgICAgICAgbmVn
UHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAs
IHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAg
ICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWlnaHQsIChm
aXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
OgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAg
IGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29w
ZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29k
ZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlw
ZSk7Ci0gICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFs
aXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7Cisg
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhy
ZXNvbHZlVHlwZSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDAp
OworCisgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNvZGUubV9nZXRQdXRJ
bmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhl
cmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVj
a3Mgc3RhdGljYWxseS4KLSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFu
ZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0
d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lz
ZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCksIHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkVtcHR5KHJlZ1QxKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5k
aXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAm
bWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFu
ZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
KworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3Bl
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsKKyAgICAgICAgICAg
IGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDEpOworCisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QwKSk7CisKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJl
VmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJh
bmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQ
dXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0
YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CisgICAgICAgICAgICBlbWl0Tm90aWZ5
V3JpdGVXYXRjaHBvaW50KHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJbmRleChyZWdUMCwg
cmVnVDIsIFRpbWVzRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxl
cygpKSk7CisKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVW
YXI6CkBAIC0yNTY0LDU4ICsyNjQ5LDUyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnMKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMy
KFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVt
cCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0
IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQot
ICAgICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUo
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGlu
ayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAg
c2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKKyAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1
cmVWYXIvIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21w
aWxlIHRoaW5ncworICAgIC8vIHRoYXQgd2F5IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2Un
dmUgcHJvdmVuIHRoYXQgaXMgdGhlIHR5cGUgd2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJl
VmFyLAorICAgIC8vIGFsbCBDb2RlQmxvY2tzIHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUg
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFy
CisgICAgLy8gaWYgdGhlIHZhciBpbmplY3Rpb24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYg
aXQgaXMgZmlyZWQsIHRoZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0Cisg
ICAgLy8gbWF0dGVyIHdoYXQgdHlwZSB3ZSBhcmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2Zp
bGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZh
cik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVW
YXIpCisgICAgICAgIGVtaXRDb2RlKFJlc29sdmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAo
cHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykK
KyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAg
IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShi
eXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJl
Z1QwKTsKICAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
cmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xv
YmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eSkpOwogICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5r
KHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAg
ICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOwogCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZh
cik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFs
VmFyLmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAg
ICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
ci5saW5rKHRoaXMpOwogCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsK
IAogICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAg
ICAgICAgYnJlYWs7CiAgICAgfQogfQogCkBAIC0yNjI0LDE4ICsyNzAzLDIxIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRU
b1Njb3BlPigpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5m
byhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxl
VmFyKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwor
ICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJ
ZiBhbnkgbGlua2VkIENvZGVCbG9jayBzYXcgYSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBD
b2RlQmxvY2tzIGFyZSBndWFyYW50ZWVkCisgICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZh
ci4KICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93
cml0ZV9lcnJvcik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0VG9TY29wZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJn
dW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CiAgICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zm
c2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlu
c3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAg
ICAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2Rl
SW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CkBAIC0yNjUyLDcgKzI3
MzQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGpp
dC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTI3MDEsNyArMjc4Myw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBE
aXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwogfQogCkBAIC0yNzU5LDcgKzI4NDEsNiBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihK
U0NlbGwqIG93bmVyCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
QEAgLTI3NjcsNyArMjg0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVs
ZChjb24KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJ
bnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yODIz
LDcgKzI5MDQsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvCiB2
b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7
CkBAIC0yODM5LDExICsyOTE5LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4
dChjb25zdCAKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0
aGUgbW9zdCBjb21tb24gbW9kZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBp
dCBpZiB3ZSBwcm9maWxlIGl0IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVt
ZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVN
b2RlKSB7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1f
ZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0
dXJlTW9kZSkgewogICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOworICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5h
cHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKCh+SlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSAmIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BFbnVtZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFk
YXRhKCksIHNjcmF0Y2hHUFIpOworICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
c3RvcmU4VG9NZXRhZGF0YShzY3JhdGNoR1BSLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yTmV4dDo6
TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOworCiAgICAgICAgIGxvYWQz
MihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
U3RydWN0dXJlSURPZmZzZXQoKSksIGluZGV4R1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMu
YXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CiAKQEAgLTI4ODEsNzggKzI5NjcsODcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVt
ZXJhdG9yR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFt
ZSA9IGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKIAot
ICAgIGF1dG8gcmVzdWx0R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRH
UFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVu
dW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxpbmVFbnVtZXJhdG9y
R2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVn
aXN0ZXJzOjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1v
ZGUsIHNjcmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwg
cHJvcGVydHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRh
Lm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRh
dGEoKSwgc2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9y
ZThUb01ldGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1l
dGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChiYXNlR1BSKSk7CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1
ZS4KLSAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBp
c05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRy
dXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0
cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwot
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMyk7Ci0gICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1
Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCBzY3JhdGNoMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBi
cmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29t
cHV0ZSB0aGUgb2Zmc2V0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1Qz
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8g
SWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9y
YWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNz
ID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdU
MCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1w
IG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJl
c3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSkpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7
CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNP
YmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2Fz
ZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQog
ICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJl
c3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9Q
dHIocmVnVDMsIHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNo
MSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSwgc2NyYXRjaDIpOworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0
cihzY3JhdGNoMiwgc2NyYXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkgPSBvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBz
dGF0aWNfY2FzdDxpbnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0
KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0
eSksIHJlc3VsdEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwg
VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25l
Q2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMp
OwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNT
ZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVy
YXRvck1ldGFkYXRhKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0
Y2gpLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVu
dW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRo
aXMpOwotICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBU
cnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAg
IEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVk
SW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJl
cGxhY2UgdGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluZGV4LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJv
cGVydHlHUFIpOwogCiAgICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAK
ICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRC
eVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjk2MSwxMCAr
MzA1Niw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBn
ZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0
b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBl
LCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0
b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJh
bENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVu
Y3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yOwpAQCAtMjk3Myw3ICszMDY3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVy
YXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVB
ZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1l
dGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9N
ZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVt
ZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMiha
ZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3Ry
dWN0dXJlTW9kZSkpKTsKIApAQCAtMzA2Miw2ICszMTU4LDEzIEBAIHZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxp
bmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcikK
K3sKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZt
KCksIG93bmVyLCBzZWxlY3RTY3JhdGNoR1BSKG93bmVyKSk7CisgICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25l
cik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw5ICsyMzYs
OSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAg
ICBpZiAoaXNKU0FycmF5KGJhc2VDZWxsKSkgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5m
by5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CiAgICAgICAgICAgICAgICAgICAgICYm
IHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlQ2VsbAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxp
bmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5
Kj4oYmFzZUNlbGwpKSkgeworICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6Omlz
Q2FjaGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkq
PihiYXNlQ2VsbCkpKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2Rl
SW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nh
c3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJh
dGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0
aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1
YkluZm8uaW5pdEFycmF5TGVuZ3RoKGxvY2tlcik7CkBAIC0yNDksOCArMjQ5LDggQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgICAgIG5ld0Nh
c2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6QXJyYXlM
ZW5ndGgsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSlNTdHJpbmco
YmFzZUNlbGwpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09
IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpp
c0NhY2hlYWJsZVN0cmluZ0xlbmd0aChzdHViSW5mbykpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ym9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xl
bmd0aChzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXND
YWNoZWFibGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0
Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5n
R2V0QnlGdW5jdGlvbihraW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5p
bml0U3RyaW5nTGVuZ3RoKGxvY2tlcik7CkBAIC0zMDQsNyArMzA0LDcgQEAgc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgICAgICYmICFzbG90Lndh
dGNocG9pbnRTZXQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJvbVBy
b3h5KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlLCBz
bG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJ
bmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKGNvZGVCbG9j
aywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAg
ICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpHZXRCeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRl
bnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFzZSgp
ID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0
Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBA
IC03MzEsMTEgKzczMSwxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRC
eShKCiAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFj
ZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAg
ICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJl
cGxhY2Uoc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgICAg
ICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9j
aywgc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgICAgICYm
ICFvbGRTdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAg
ICAgICAgICAgICAmJiAhaXNQcm94eSkgewogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGlu
ZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywg
c3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJv
cHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7
CkBAIC0xMTMyLDcgKzExMzIsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJ
bkJ5KAogICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlCiAgICAgICAg
ICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCiAgICAgICAgICAgICAgICAgJiYgIXN0
cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7Ci0gICAgICAgICAgICAg
ICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJ
bkFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBib29sIGdlbmVy
YXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKGNvZGVC
bG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRl
ZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5
U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgp
ID09IGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5n
UHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpAQCAtMTU1
Miw3ICsxNTUyLDcgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQog
CiB2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsK
LSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBj
YWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0KCkpOworICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwg
UmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7CiAgICAgCiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2Fs
bExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2Vk
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3Bv
aW50LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4
aXRTaWRlU3RhdGUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
Q29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAi
RXJyb3JIYW5kbGluZ1Njb3BlLmgiCkBAIC0zNzAsMTMgKzM3MSwyMiBAQCBpbmxpbmUgYm9vbCBq
aXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAgICAgCiAgICAgY29kZUJsb2NrLT51cGRhdGVB
bGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwogCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlw
ZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIGlmIChSZWZQdHI8QmFzZWxp
bmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+
bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdp
dGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVC
bG9jayk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmppdE5leHRJbnZvY2F0aW9uKCk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghY29kZUJs
b2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19M
T0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJ0aHJlc2hvbGQgbm90IHJl
YWNoZWQsIGNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSkpOwog
ICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIHRocmVz
aG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIAotICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0gSklUV29ya2xpc3Q6
OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0sIEpJ
VENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkp
OworICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0gSklUV29ya2xpc3Q6OmVu
c3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0sIEpJVENv
bXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSwgSklUQ29tcGlsYXRp
b25Nb2RlOjpCYXNlbGluZSkpOwogCiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBpbGVkLiIpOwpAQCAtNDY2LDggKzQ3
NiwxMCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBjb2Rl
QmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAg
ICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0uZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKHBj
KTsKICAgICAgICAgKnB0ciArPSBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKS5tX2Fj
dGl2ZVRocmVzaG9sZDsKLSAgICAgICAgaWYgKCpwdHIgPj0gT3B0aW9uczo6ZWFybHlSZXR1cm5G
cm9tSW5maW5pdGVMb29wc0xpbWl0KCkpCisgICAgICAgIGlmICgqcHRyID49IE9wdGlvbnM6OmVh
cmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSB7CisgICAgICAgICAgICBjb2RlQmxv
Y2stPmVuc3VyZUpJVERhdGEoQ29uY3VycmVudEpTTG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKSk7
IC8vIFdlJ3JlIHJldHVybmluZyB0byB0aGUgT1NSIGVudHJ5IGNvZGUgaGVyZSwgd2hpY2ggZXhw
ZWN0cyB0aGF0IG1faml0RGF0YSBpcyBub3QgbnVsbC4KICAgICAgICAgICAgIExMSU5UX1JFVFVS
Tl9UV08oTExJbnQ6OmZ1enplclJldHVybkVhcmx5RnJvbUxvb3BIaW50RW50cnlwb2ludCgpLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7CisgICAg
ICAgIH0KICAgICB9CiAgICAgCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RF
cXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5h
bWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFk
YXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxl
KHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVu
ZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkK
ICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAg
LTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwg
aW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwgc3JjRHN0IGluIHQyCiAgICAgICAgIGludGVn
ZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAgICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRb
Y2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkK
KyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2Zp
bGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5
LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9w
TmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAot
ICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BO
ZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2Jp
dHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFu
ZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAg
IGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3
ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2Zp
bGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRl
LCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAgICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5v
cE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEsIExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwog
ICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9m
aWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFBy
b2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93
OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkKIAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9y
ZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91
YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBv
cGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQotICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBl
LCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0
MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAgICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTEx
MjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AK
ICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAg
ICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAub3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJ
bnQzMlRhZywgLm9wMk5vdEludAotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50
SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0
aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAg
aW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAg
ZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwxMiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0
b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJpYSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAg
ICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5vdEludE9wMkRvdWJsZQogICAgICAgICBiaW5l
cSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVO
dW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3Qs
IEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAg
ICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AyRG91YmxlOgogICAg
ICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxl
TnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3Ry
dWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVh
ZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAgICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBA
IC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUs
IG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNl
Y29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQog
ICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFy
aXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9w
Y29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRz
IHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0
aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC00NDEsOCArNDQxLDEzIEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29w
KCkKICAgICAgICAgICAgIG1vdmUgUEMsIGExCiAgICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xv
b3Bfb3NyKQogICAgICAgICAgICAgYnRweiByMCwgLnJlY292ZXIKLQogICAgICAgICAgICAgbW92
ZSByMSwgc3AKKworICAgICAgICAgICAgIyBCYXNlbGluZSB1c2VzIExMSW50J3MgUEIgcmVnaXN0
ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQgcG9vbC4KKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9j
a1tjZnJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2ppdERhdGFbUEJdLCBQ
QgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjpKSVREYXRhOjptX2ppdENvbnN0YW50UG9v
bFtQQl0sIFBCCisKICAgICAgICAgICAgIGlmIEFSTTY0RQogICAgICAgICAgICAgICAgIGxlYXAg
SlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNv
bnN0ZXhwciBHYXRlOjpsb29wT1NSRW50cnkpICogUHRyU2l6ZSwgYTIKICAgICAgICAgICAgICAg
ICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgSlNFbnRyeVB0clRhZwpAQCAtMTA1
NiwxMCArMTA2MSw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIK
IAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9u
KQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3Qs
IG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBt
YWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6
Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAg
ICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQogICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBA
IC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3Qs
IGluCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDEsIC5zbG93KQogICAgICAgICBvcnEgbnVt
YmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEgdDEsIFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRh
dGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDIsIHQzKQogICAgICAgICBk
aXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTExMzQsMTEgKzExMzUsNiBAQCBlbmQpCiAKIAog
bGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJv
ZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRo
UHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBn
ZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0
MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0xMTQ2LDEyICsxMTQyLDEyIEBAIGxsaW50T3BX
aXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZm
LCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MwogICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAg
dXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRo
UHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAgcmV0dXJuKHQz
KQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0cXogdDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xv
dwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAwLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmls
ZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdh
dGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEsIHQyKQogICAgIHJldHVybih0MykKIAogLm9wTmVn
YXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNjAsNiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3Jl
KG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUs
IG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1
cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAotICAgICAgICBtYWNybyBwcm9maWxlKHR5
cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Fy
aXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQK
LQogICAgICAgICBnZXQobV9yaHMsIHQwKQogICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkKQEAgLTExNzcsNyArMTE2OSw3
IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0
KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNs
b3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1
cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQs
IHQ1LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLm9wMU5vdEludDoKQEAgLTExODcs
MTAgKzExNzksMTAgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAog
ICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFn
LCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVO
dW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1
Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQyKQogICAgICAgICBqbXAgLm9wMU5v
dEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkludDoKLSAgICAgICAgcHJvZmlsZShBcml0aFBy
b2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVT
dHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQyKQogICAgICAgICBjaTJkcyB0MSwg
ZnQxCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIw
NCw5ICsxMTk2LDkgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAog
CiAgICAgLm9wMk5vdEludDoKICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkg
YW4gaW50LCB0aGUgc2Vjb25kIGlzIGRlZmluaXRlbHkgbm90LgotICAgICAgICBnZXQobV9kc3Qs
IHQyKQogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93Ci0gICAgICAgIHByb2ZpbGUo
QXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0MikKKyAgICAgICAgZ2V0
KG1fZHN0LCB0MikKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBhZGRxIG51bWJlclRh
ZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCkBAIC0xNTE4LDcgKzE1MTAsNyBAQCBsbGludE9w
V2l0aE1ldGFkYXRhKG9wX2dldF9ieV9pZF9kaXJlY3QsCiBlbmQpCiAKICMgVGhlIGJhc2Ugb2Jq
ZWN0IGlzIGV4cGVjdGVkIGluIHQzCi1tYWNybyBwZXJmb3JtR2V0QnlJREhlbHBlcihvcGNvZGVT
dHJ1Y3QsIG1vZGVNZXRhZGF0YU5hbWUsIHZhbHVlUHJvZmlsZU5hbWUsIHNsb3dMYWJlbCwgc2l6
ZSwgbWV0YWRhdGEsIHJldHVybikKK21hY3JvIHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0
cnVjdCwgbW9kZU1ldGFkYXRhTmFtZSwgdmFsdWVQcm9maWxlTmFtZSwgc2xvd0xhYmVsLCBzaXpl
LCBtZXRhZGF0YSwgcmV0dXJuLCBkb0FycmF5UHJvZmlsZSkKICAgICBtZXRhZGF0YSh0MiwgdDEp
CiAgICAgbG9hZGIgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRhTmFtZSUu
bW9kZVt0Ml0sIHQxCiAKQEAgLTE1NDYsNyArMTUzOCw3IEBAIG1hY3JvIHBlcmZvcm1HZXRCeUlE
SGVscGVyKG9wY29kZVN0cnVjdCwKIC5vcEdldEJ5SWRBcnJheUxlbmd0aDoKICAgICBiYm5lcSB0
MSwgY29uc3RleHByIEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCwgLm9wR2V0QnlJZFVuc2V0CiAg
ICAgbW92ZSB0MywgdDAKLSAgICBhcnJheVByb2ZpbGUoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjolbW9kZU1ldGFkYXRhTmFtZSUuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgdDAsIHQy
LCB0NSkKKyAgICBkb0FycmF5UHJvZmlsZSh0MCwgdDIsIHQ1LCB0MSkKICAgICBidGl6IHQwLCBJ
c0FycmF5LCBzbG93TGFiZWwKICAgICBidGl6IHQwLCBJbmRleGluZ1NoYXBlTWFzaywgc2xvd0xh
YmVsCiAgICAgbG9hZENhZ2VkSlNWYWx1ZShKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MCwg
dDEpCkBAIC0xNTY4LDcgKzE1NjAsMTAgQEAgZW5kCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dl
dF9ieV9pZCwgT3BHZXRCeUlkLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEs
IHJldHVybikKICAgICBnZXQobV9iYXNlLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
Q2VsbChzaXplLCB0MCwgdDMsIC5vcEdldEJ5SWRTbG93KQotICAgIHBlcmZvcm1HZXRCeUlESGVs
cGVyKE9wR2V0QnlJZCwgbV9tb2RlTWV0YWRhdGEsIG1fcHJvZmlsZSwgLm9wR2V0QnlJZFNsb3cs
IHNpemUsIG1ldGFkYXRhLCByZXR1cm4pCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BHZXRC
eUlkLCBtX21vZGVNZXRhZGF0YSwgbV9wcm9maWxlLCAub3BHZXRCeUlkU2xvdywgc2l6ZSwgbWV0
YWRhdGEsIHJldHVybiwKKyAgICAgICAgbWFjcm8gKGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFk
YXRhLCBzY3JhdGNoMSwgc2NyYXRjaDIpCisgICAgICAgICAgICBhcnJheVByb2ZpbGUoT3BHZXRC
eUlkOjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUsIGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFk
YXRhLCBzY3JhdGNoMSkKKyAgICAgICAgZW5kKQogCiAub3BHZXRCeUlkU2xvdzoKICAgICBjYWxs
U2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9nZXRfYnlfaWQpCkBAIC0zMDAyLDcgKzI5OTcsNyBA
QCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX29wZW4sIE9wCiAKICAgICBsb2FkVmFy
aWFibGUoZ2V0LCBtX2l0ZXJhdG9yLCB0MykKICAgICBidHFueiB0Mywgbm90Q2VsbE1hc2ssIC5p
dGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3cKLSAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihP
cEl0ZXJhdG9yT3BlbiwgbV9tb2RlTWV0YWRhdGEsIG1fbmV4dFByb2ZpbGUsIC5pdGVyYXRvck9w
ZW5HZW5lcmljR2V0TmV4dFNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZU5leHRBbmREaXNwYXRj
aCkKKyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yT3BlbiwgbV9tb2RlTWV0YWRh
dGEsIG1fbmV4dFByb2ZpbGUsIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3csIHNpemUs
IG1ldGFkYXRhLCBzdG9yZU5leHRBbmREaXNwYXRjaCwgbWFjcm8oYSwgYiwgYywgZCkgZW5kKQog
CiAuaXRlcmF0b3JPcGVuR2VuZXJpY0dldE5leHRTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxp
bnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fZ2V0X25leHQpCkBAIC0zMDYxLDcgKzMwNTYsNyBA
QCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wCiAKICAgICBsb2FkVmFy
aWFibGUoZ2V0LCBtX3ZhbHVlLCB0MykKICAgICBidHFueiB0Mywgbm90Q2VsbE1hc2ssIC5nZXRE
b25lU2xvdwotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JOZXh0LCBtX2RvbmVN
b2RlTWV0YWRhdGEsIG1fZG9uZVByb2ZpbGUsIC5nZXREb25lU2xvdywgc2l6ZSwgbWV0YWRhdGEs
IHN0b3JlRG9uZUFuZEptcFRvR2V0VmFsdWUpCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJ
dGVyYXRvck5leHQsIG1fZG9uZU1vZGVNZXRhZGF0YSwgbV9kb25lUHJvZmlsZSwgLmdldERvbmVT
bG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1ZSwgbWFjcm8oYSwg
YiwgYywgZCkgZW5kKQogCiAuZ2V0RG9uZVNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9z
bG93X3BhdGhfaXRlcmF0b3JfbmV4dF9nZXRfZG9uZSkKQEAgLTMwODYsNyArMzA4MSw3IEBAIGxs
aW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3JfbmV4dCwgT3AKICAgICAjIFJlbG9hZCB0aGUg
bmV4dCByZXN1bHQgdG1wIHNpbmNlIHRoZSBnZXRfYnlfaWQgYWJvdmUgbWF5IGhhdmUgY2xvYmJl
cmVkIHQzLgogICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fdmFsdWUsIHQzKQogICAgICMgV2UgZG9u
J3QgbmVlZCB0byBjaGVjayBpZiB0aGUgaXRlcmF0b3IgcmVzdWx0IGlzIGEgY2VsbCBoZXJlIHNp
bmNlIHdlIHdpbGwgaGF2ZSB0aHJvd24gYW4gZXJyb3IgYmVmb3JlLgotICAgIHBlcmZvcm1HZXRC
eUlESGVscGVyKE9wSXRlcmF0b3JOZXh0LCBtX3ZhbHVlTW9kZU1ldGFkYXRhLCBtX3ZhbHVlUHJv
ZmlsZSwgLmdldFZhbHVlU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlVmFsdWVBbmREaXNwYXRj
aCkKKyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV92YWx1ZU1vZGVN
ZXRhZGF0YSwgbV92YWx1ZVByb2ZpbGUsIC5nZXRWYWx1ZVNsb3csIHNpemUsIG1ldGFkYXRhLCBz
dG9yZVZhbHVlQW5kRGlzcGF0Y2gsIG1hY3JvKGEsIGIsIGMsIGQpIGVuZCkKIAogLmdldFZhbHVl
U2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2dl
dF92YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAt
MTQyMCw3ICsxNDIwLDggQEAgZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5jcmVtZW50
LCBhY3Rpb24pCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgYmFkZGlzIGluY3Jl
bWVudCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlv
bkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQorICAgIGxvYWRwIENvZGVCbG9jazo6
bV9sbGludEV4ZWN1dGVDb3VudGVyW3QwXSwgdDAKKyAgICBiYWRkaXMgaW5jcmVtZW50LCBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgIGFjdGlv
bigpCiAgICAgLmNvbnRpbnVlOgogZW5kCkBAIC0xNTAzLDcgKzE1MDQsOCBAQCBtYWNybyBwcm9s
b2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgY29kZUJsb2NrR2V0dGVyKHQxKQog
ICAgIGNvZGVCbG9ja1NldHRlcih0MSkKICAgICBpZiBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lO
KQotICAgICAgICBiYWRkaXMgNSwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBC
YXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MV0sIC5jb250aW51ZQorICAgICAg
ICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MV0sIHQwCisgICAgICAg
IGJhZGRpcyA1LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250
aW51ZQogICAgICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAg
ICAgICAgICAgbW92ZSBQQywgYTEKQEAgLTE2MTcsMTQgKzE2MTksMTQgQEAgbWFjcm8gZnVuY3Rp
b25Jbml0aWFsaXphdGlvbihwcm9maWxlQXJnUwogICAgICMgb3B0aW1hbCB3YXkgZm9yIGFyY2hp
dGVjdHVyZXMgdGhhdCBoYXZlIG1vcmUgdGhhbiBmaXZlIHJlZ2lzdGVycyBhdmFpbGFibGUKICAg
ICAjIGZvciBhcmJpdHJhcnkgdXNlIGluIHRoZSBpbnRlcnByZXRlci4KICAgICBsb2FkaSBDb2Rl
QmxvY2s6Om1fbnVtUGFyYW1ldGVyc1t0MV0sIHQwCi0gICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAs
IHQwICMgVXNlIGFkZGkgYmVjYXVzZSB0aGF0J3Mgd2hhdCBoYXMgdGhlIHBlZXBob2xlCisgICAg
YWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQwCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnBndGVxIHQw
LCAwLCBvayBlbmQpCiAgICAgYnRweiB0MCwgLmFyZ3VtZW50UHJvZmlsZURvbmUKICAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzICsgRml4ZWRWZWN0b3I6Om1fc3Rv
cmFnZSArIFJlZkNvdW50ZWRBcnJheTo6bV9kYXRhW3QxXSwgdDMKICAgICBidHB6IHQzLCAuYXJn
dW1lbnRQcm9maWxlRG9uZSAjIFdoZW4gd2UgY2FuJ3QgSklULCB3ZSBkb24ndCBhbGxvY2F0ZSBh
bnkgYXJndW1lbnQgdmFsdWUgcHJvZmlsZXMuCiAgICAgbXVscCBzaXplb2YgVmFsdWVQcm9maWxl
LCB0MCwgdDIgIyBBYWFhYWhoaGghIE5lZWQgc3RyZW5ndGggcmVkdWN0aW9uIQogICAgIGxzaGlm
dHAgMywgdDAgIyBvZmZzZXQgb2YgbGFzdCBKU1ZhbHVlIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2su
Ci0gICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkg
aW4gQ29kZUJsb2NrOjptX2FyZ3VtZW50VmFsdWVQcm9maWxlcy4KKyAgICBhZGRwIHQyLCB0MyAj
IHBvaW50ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBpbiB0aGUgdmFsdWUgcHJvZmls
ZSBhcnJheS4KIC5hcmd1bWVudFByb2ZpbGVMb29wOgogICAgIGlmIEpTVkFMVUU2NAogICAgICAg
ICBsb2FkcSBUaGlzQXJndW1lbnRPZmZzZXQgLSA4ICsgcHJvZmlsZUFyZ1NraXAgKiA4W2Nmciwg
dDBdLCB0MgpAQCAtMjU2Myw2ICsyNTY1LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAg
ZW5kCiBlbmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3Qs
IHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJp
dGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFBy
b2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAg
IG9yaCB0eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJ
WE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNp
bmNlIFdFQkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VN
QkxZIGFuZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRp
ZmllcigpID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmll
ciBjcmVhdGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUg
Q2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
Q29kZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVh
YmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJs
b2NrKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJs
b2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlm
aWVyJik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGlj
IGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMg
aW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihV
bmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRp
ZmllciBjcmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVh
YmxlSWRlbnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJs
ZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9j
ayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENv
ZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSog
Y29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlu
bGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2Nr
LT5oYXNJZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVp
ZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMu
Y3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWRUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJDYWNoZWRUeXBlcy5oIgogCisjaW5jbHVkZSAiQmFzZWxp
bmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVDYWNoZUVycm9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBK
U0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkK
IHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6
TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewot
ICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7
CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQu
aXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUg
cHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0
aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw2IEBAIGJvb2wgY2FuVXNlV2ViQXNz
ZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihJbnQzMiwgZXZhbFRocmVzaG9sZE11bHRpcGxpZXIs
IDEwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBtYXhpbXVtRXZhbENhY2hl
YWJsZVNvdXJjZUxlbmd0aCwgMjU2LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCi0gICAgdihC
b29sLCByYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0
d2VlbkNoZWNrcG9pbnRzRm9yQmFzZWxpbmUsIDEwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JVcHBl
clRpZXJzLCA1MDAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXApAQCAtNTMyLDYgKzUzMSw3
IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihCb29sLCB1c2VE
YXRhSUMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ0lu
T3B0aW1pemluZ0pJVCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNl
RGF0YUlDU2hhcmluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgdXNl
QmFzZWxpbmVKSVRDb2RlU2hhcmluZywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAog
ICAgIC8qIEZlYXR1cmUgRmxhZ3MgKi9cCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNyArMzk2LDkgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxl
OjpwcmVwYXJlRm9yRXhlY3V0aQogICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkp
CiAgICAgICAgIGNvZGVCbG9jay0+dmFsaWRhdGUoKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VM
TEludCgpKQorICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNv
ZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkKKyAg
ICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJl
Zi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBlbHNlIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQog
ICAgICAgICBzZXR1cExMSW50KGNvZGVCbG9jayk7CiAgICAgZWxzZQogICAgICAgICBzZXR1cEpJ
VCh2bSwgY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21M
TEludFRpZXJVcENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNTIsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2Fy
bVVwKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9CQlEo
KSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFP
cHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNo
b2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRG
b3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7
CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgp
CkBAIC02NSw5ICs2NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplU29vbigpCiAgICAg
ewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAgICAg
ICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29u
KCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvckJCUU9wdGltaXplU29vbigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0
TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpLCBudWxs
cHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JP
TUdPcHRpbWl6ZVNvb24oKSk7CiAgICAgfQogCiAgICAgc3RydWN0IE9TUkVudHJ5RGF0YSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVy
VXBDb3VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogVGllclVwQ291bnQ6OlRpZXJVcENvdW50KCkKIHsKLSAg
ICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldh
cm1VcCgpLCBudWxscHRyKTsKKyAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xk
Rm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKIH0KIAogVGllclVwQ291bnQ6On5UaWVyVXBD
b3VudCgpID0gZGVmYXVsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
aWVyVXBDb3VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UaWVyVXBDb3VudC5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCks
IGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuIik7Ci0gICAg
ICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVy
V2FybVVwKCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhy
ZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNo
ZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKQEAgLTkwLDE0ICs5MCwxNCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCks
IGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi4iKTsKLSAg
ICAgICAgc2V0TmV3VGhyZXNob2xkKDAsIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hv
bGQoMCk7CiAgICAgfQogCiAgICAgdm9pZCBvcHRpbWl6ZVNvb24odWludDMyX3QgZnVuY3Rpb25J
bmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwg
ZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgc29vbi4iKTsKICAgICAgICAgLy8gRklY
TUU6IE5lZWQgYWRqdXN0bWVudCBvbmNlIHdlIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdh
c20gZnVuY3Rpb25zLgotICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xk
Rm9yT01HT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQo
T3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAogICAgIHZv
aWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgsIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNiArNjYsMjAgQEAgcHVibGljOgogICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOwog
ICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQmFnJiBvcGVyYXRvcj0oQmFn
PFQsIFU+JiYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodW53cmFwcGVkSGVhZCgpID09IG90
aGVyLnVud3JhcHBlZEhlYWQoKSkKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKworICAgICAg
ICBCYWcgZGVzdHJveTsKKyAgICAgICAgZGVzdHJveS5tX2hlYWQgPSB1bndyYXBwZWRIZWFkKCk7
CisgICAgICAgIG1faGVhZCA9IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgb3RoZXIu
bV9oZWFkID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCiAgICAg
fkJhZygpCiAgICAgewogICAgICAgICBjbGVhcigpOwpJbmRleDogU291cmNlL1dURi93dGYvUGFj
a2VkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFja2VkLmgJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYs
NyArMTg2LDEwIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBUKiBvcGVyYXRvci0+KCkgY29uc3Qg
eyByZXR1cm4gZ2V0KCk7IH0KLSAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0
KCk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVID0gVD4KKyAgICB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjwhc3RkOjppc192b2lkX3Y8VT4sIFUmPjo6dHlwZSBvcGVyYXRvciooKSBjb25z
dCB7IHJldHVybiAqZ2V0KCk7IH0KKwogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gIWdldCgpOyB9CiAKICAgICAvLyBUaGlzIGNvbnZlcnNpb24gb3BlcmF0b3IgYWxsb3dzIGlt
cGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90aGVyIGludGVnZXIgdHlwZXMu
CkluZGV4OiBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTc3
NiwxNyArNzc2LDE4IEBAIGVuZAogCiAjIEZJWE1FOiBuZWVkIHRvIGZpeCBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4NzAzIHRvIGVuYWJsZSB0aGlzIG9uIExpbnV4
L01JUFMuCiBkZWYgcnVuQnl0ZWNvZGVDYWNoZUltcGwob3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zLCAqYWRkaXRpb25hbEVudikKLSAgICBpZiAoJGhvc3RPUyA9PSAiZGFyd2luIikKLSAgICAg
ICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlIgotICAgIGVsc2lmICgkaG9zdE9TID09
ICJsaW51eCIgJiYgJGFyY2hpdGVjdHVyZSAhPSAibWlwcyIpCi0gICAgICAgIGZpbGVUZW1wbGF0
ZSA9ICJieXRlY29kZS1jYWNoZVhYWFhYWCIKLSAgICBlbHNlCi0gICAgICAgIHNraXAKLSAgICAg
ICAgcmV0dXJuCi0gICAgZW5kCisgICAgIyBPT1BTCisgICAgI2lmICgkaG9zdE9TID09ICJkYXJ3
aW4iKQorICAgICMgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlIgorICAgICNlbHNp
ZiAoJGhvc3RPUyA9PSAibGludXgiICYmICRhcmNoaXRlY3R1cmUgIT0gIm1pcHMiKQorICAgICMg
ICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlWFhYWFhYIgorICAgICNlbHNlCisgICAg
IyAgICBza2lwCisgICAgIyAgICByZXR1cm4KKyAgICAjZW5kCiAKLSAgICBvcHRpb25zID0gQkFT
RV9PUFRJT05TICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMgKyAk
dGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25zCi0gICAgYWRkUnVuQ29tbWFuZCgiYnl0ZWNvZGUt
Y2FjaGUiLCBbInNoIiwgKHBhdGhUb0hlbHBlcnMgKyAiYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxw
ZXIuc2giKS50b19zLCBmaWxlVGVtcGxhdGUudG9fcywgKnZtQ29tbWFuZCwgJGJlbmNobWFyay50
b19zXSArIG9wdGlvbnMsIHNpbGVudE91dHB1dEhhbmRsZXIsIHNpbXBsZUVycm9ySGFuZGxlciwg
KmFkZGl0aW9uYWxFbnYpCisgICAgI29wdGlvbnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9w
dGlvbnMKKyAgICAjYWRkUnVuQ29tbWFuZCgiYnl0ZWNvZGUtY2FjaGUiLCBbInNoIiwgKHBhdGhU
b0hlbHBlcnMgKyAiYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIuc2giKS50b19zLCBmaWxlVGVt
cGxhdGUudG9fcywgKnZtQ29tbWFuZCwgJGJlbmNobWFyay50b19zXSArIG9wdGlvbnMsIHNpbGVu
dE91dHB1dEhhbmRsZXIsIHNpbXBsZUVycm9ySGFuZGxlciwgKmFkZGl0aW9uYWxFbnYpCiBlbmQK
IAogZGVmIHJ1bkJ5dGVjb2RlQ2FjaGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438872</attachid>
            <date>2021-09-21 15:44:53 -0700</date>
            <delta_ts>2021-09-21 19:02:24 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>528772</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsMTAg
QEAgb3BfZ3JvdXAgOlByb2ZpbGVkQmluYXJ5T3AsCiAgICAgICAgIGxoczogVmlydHVhbFJlZ2lz
dGVyLAogICAgICAgICByaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZFR5cGVz
OiBPcGVyYW5kVHlwZXMsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxl
CisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
X2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTEsOSArMzUyLDEwIEBAIG9wX2dy
b3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgIF0sCiAgICAgYXJnczogewogICAgICAg
ICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg0LDkgKzM4NiwxMCBAQCBvcCA6bmVnYXRlLAog
ICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZDogVmlydHVhbFJl
Z2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLAorICAgICAgICBwcm9maWxl
SW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQ
cm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFy
aXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApAQCAtNDc4LDYgKzQ4MSw3IEBAIG9wIDpn
ZXRfYnlfaWQsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgbW9kZU1ldGFkYXRhOiBHZXRCeUlk
TW9kZU1ldGFkYXRhLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgIH0KIAogb3AgOmdldF9ieV9pZF93aXRoX3Ro
aXMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVj
a3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBAIFZhbHVlUHJvZmlsZSog
dmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJuICZtZXRhZGF0YS5tX3By
b2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK3VpbnRwdHJfdCB2YWx1
ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4KQoreworICAgIFVOVVNF
RF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9w
Y29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50
SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJu
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRvclByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZOZXh0UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRl
Y29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3JfbmV4dCkgeworICAgICAgICBzd2l0Y2ggKGNo
ZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4
dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZSgp
OworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXREb25lOiByZXR1cm4gQnl0ZWNvZGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkRvbmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck5leHQ6OmdldFZhbHVlOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlZhbHVl
UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfSBlbHNlIAorICAgICAgICByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZlByb2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVN
ZXRhZGF0YT4KIGJvb2wgaGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFk
YXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhW
TSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQot
ewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4o
bV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRN
YXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
dmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5r
SW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSAm
JiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwogdm9pZCBDYWxs
TGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVTcGVjaWZpY0Nh
bGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5OSwxMSBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9mcmFtZVNodWZm
bGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRVc2VzRGF0YUlD
cyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwotICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQ
Uik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BS
OwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9m
YXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZh
c3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJQyA9PSBVc2VE
YXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVn
aXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxM
aW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcgQEAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAgZ29Qb2x5bW9y
cGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVNYXNrKSk7CiAg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
aXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBw
cmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMubGluaygmaml0
KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBwcmVwLgogICAg
ICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQ
Uiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7
CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGNh
bGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
byk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICB1LmNv
ZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMu
bV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMubV9jYWxs
ZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxs
ZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEzICszNDQsMzQgQEAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQykK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIG51
bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBpZiAoaXNEYXRh
SUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVn
OjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRh
SUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0
YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKLSAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAgc2V0VXNlc0Rh
dGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywg
aml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlzVGFpbENhbGwo
KSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4g
ZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CiB9CiAKIHZv
aWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkK
QEAgLTM2OSwxNyArMzgxLDMyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0m
IHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIs
IG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQog
Cit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUoY2FsbExpbmtJ
bmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBK
U0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMo
Vk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgbV9jb2RlT3JpZ2lu
ID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBz
ZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAg
bV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247CisgICAg
aWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpIHsKKyAgICAgICAgLy8g
RklYTUU6IEl0J2QgYmUgbmljZSBpZiB0aGlzIGp1c3Qgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBz
dHJ1Y3R1cmUuCisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZy
YW1lU2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsK
KyAgICB9CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlD
Lm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxh
dGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpO
byk7CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAg
dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBq
aXQubGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0
UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQ
YXRoU3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwg
dGhpcyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1
bnNpZ25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2Vk
Q2FsbExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2Vu
dGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgewor
ICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2Fs
bCwKICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAg
ICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxp
emVEYXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsg
cmV0dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1
aW50OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRl
OgotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
QywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURf
UkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRo
SW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVi
bGljOgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQ
YXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVj
dEZhc3RQYXRoKENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWls
Q2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBz
dGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJv
b2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNl
RGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsy
NDksNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAot
ICAgIEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9z
bG93U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsK
ICAgICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZv
LCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJf
dCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlv
blR5cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9j
YXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxv
Y2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
bV9zbG93UGF0aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5h
bFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAK
QEAgLTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29k
ZU9yaQogICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3Qg
VW5saW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsg
Ly8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxs
eSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxU
eXBlOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlv
bjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZs
ZURhdGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsOCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlk
ZXIoKSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVD
b3VudGVyKCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9
CkBAIC0zMTgsNyArMzIwLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgQwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIAogICAgIG9wdGltaXplQWZ0ZXJX
YXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgaWYgKG90aGVyLm1fcmFyZURh
dGEpIHsKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwpAQCAtMzU5LDcgKzM2
MCw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAgIEFT
U0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2Vk
Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CisKICAgICB2
bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcwLDEwICszNzMsMTMg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2FuJ3Qg
Z2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJvY2Vz
cyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJvZHVj
ZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5lc3Mg
YW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2YgYW4g
VW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhlIGxp
dmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNpZGUg
VW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBiZXR3
ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhlIGJ5
dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5nIGFu
IFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CisgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOyAvLyBXZSBuZWVkIHRvIHNldCB1cCBvdXIgdmFsdWUgcHJvZmlsZSBw
b2ludGVycy4KKwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBmaW5pc2hDcmVh
dGlvbkNvbW1vbih2bSk7CiAKQEAgLTQ3MSw2ICs0NzcsMTkgQEAgYm9vbCBDb2RlQmxvY2s6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBicmVhazsgXAogICAgIH0KIAorI2RlZmlu
ZSBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6
IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRh
dGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShi
eXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVm
aW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3Ap
OiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFk
YXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlLT51bmFyeUFyaXRoUHJvZmlsZShi
eXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisKICAg
ICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25TdHJlYW0gPSBpbnN0cnVjdGlv
bnMoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uIDogaW5zdHJ1Y3Rpb25TdHJl
YW0pIHsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KTsKQEAgLTUzMywxNCArNTUyLDE0IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFMKICAgICAgICAgTElOSyhPcENyZWF0ZVByb21pc2UpCiAgICAgICAgIExJTksoT3BD
cmVhdGVHZW5lcmF0b3IpCiAKLSAgICAgICAgTElOSyhPcEFkZCkKLSAgICAgICAgTElOSyhPcE11
bCkKLSAgICAgICAgTElOSyhPcERpdikKLSAgICAgICAgTElOSyhPcFN1YikKLQotICAgICAgICBM
SU5LKE9wTmVnYXRlKQotICAgICAgICBMSU5LKE9wSW5jKQotICAgICAgICBMSU5LKE9wRGVjKQor
ICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BBZGQpCisgICAgICAgIExJ
TktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcE11bCkKKyAgICAgICAgTElOS19XSVRIX0JJ
TkFSWV9BUklUSF9QUk9GSUxFKE9wRGl2KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRI
X1BST0ZJTEUoT3BTdWIpCisKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUo
T3BOZWdhdGUpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wSW5jKQor
ICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcERlYykKIAogICAgICAgICBM
SU5LKE9wSm5lcVB0cikKIApAQCAtNzY5LDcgKzc4OCw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAvLyByZWx5IG9uIHRoZSBpbnN0cnVjdGlvbiBjb3Vu
dCAoYW5kIGFyZSBpbiB0aGVvcnkgcGVybWl0dGVkIHRvIGFsc28gaW5zcGVjdCB0aGUKICAgICAv
LyBpbnN0cnVjdGlvbiBzdHJlYW0gdG8gbW9yZSBhY2N1cmF0ZSBhc3Nlc3MgdGhlIGNvc3Qgb2Yg
dGllci11cCkuCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGppdEFmdGVyV2FybVVw
KCk7CiAKICAgICAvLyBJZiB0aGUgY29uY3VycmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2Rl
IGJsb2NrJ3MgaGFzaCwgdGhlbiBjb21wdXRlIGl0IGhlcmUKICAgICAvLyBzeW5jaHJvbm91c2x5
LgpAQCAtNzkzLDYgKzgxMSw3NiBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb25Db21t
b24oVk0mCiAgICAgbV9vd25lckVkZ2Uuc2V0KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjpjcmVhdGUodm0sIHRoaXMpKTsKIH0KIAordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0
aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7Cisg
ICAgc2V0SklUQ29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0
IGF1dG8mIGppdENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAg
ICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAg
aGFuZGxlci5uYXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxl
ci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9
CisgICAgfQorCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7CisgICAgICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkp
OworICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+
KGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAg
ICAgIHN3aXRjaCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBv
b2w6OlR5cGU6Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZv
OiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExp
bmtJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9h
ZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBq
aXREYXRhLm1fY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5m
by5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFs
aXplRGF0YUlDKHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BS
SW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xb
aV0gPSBjYWxsTGlua0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm86IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtl
ZFN0dWJJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRy
eS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBqaXREYXRhLm1fc3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5
cGUsIENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAg
ICAgICAgICAgc3R1YkluZm8tPmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byh0aGlzLCB1bmxpbmtlZFN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0
Q29uc3RhbnRQb29sW2ldID0gc3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rp
b25EZWNsOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRh
Lm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpGdW5jdGlvbkV4cHI6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5k
ZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2Fz
ZSBHbG9iYWxDb2RlOgorICAgIGNhc2UgTW9kdWxlQ29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgor
ICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZ1bmN0aW9uQ29kZToKKyAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5
IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxs
LgorICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYm
IERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgaWYgKGppdENvZGUtPm1faXNTaGFyZWFibGUgJiYgIXVubGlua2VkQ29kZUJsb2NrKCkt
Pm1fdW5saW5rZWRCYXNlbGluZUNvZGUgJiYgT3B0aW9uczo6dXNlQmFzZWxpbmVKSVRDb2RlU2hh
cmluZygpKQorICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVD
b2RlID0gV1RGTW92ZShqaXRDb2RlKTsKK30KKwogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsK
ICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTg3Myw2ICs5NjEsMjcgQEAgQ29kZUJsb2NrOjp+Q29k
ZUJsb2NrKCkKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQogCitib29sIENvZGVCbG9jazo6aXND
b25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25z
dAoreworICAgIC8vIFRoaXMgbmVlZHMgdG8gY29ycmVzcG9uZCB0byB3aGF0IHdlIGRvIGluc2lk
ZSBzZXRDb25zdGFudFJlZ2lzdGVycy4KKyAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCkt
PmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHJlZykpIHsKKyAgICBjYXNlIFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjo6RG91YmxlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI6IHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHVubGlu
a2VkQ29kZUJsb2NrKCktPmdldENvbnN0YW50KHJlZyk7CisgICAgICAgIGlmICghdmFsdWUgfHwg
IXZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIEpTQ2Vs
bCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICBpZiAoY2VsbC0+aW5oZXJpdHM8U3lt
Ym9sVGFibGU+KHZtKCkpIHx8IGNlbGwtPmluaGVyaXRzPEpTVGVtcGxhdGVPYmplY3REZXNjcmlw
dG9yPih2bSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNv
bnN0YW50OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiBWZWN0b3I8dW5zaWdu
ZWQ+IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgRml4ZWRWZWN0b3I8V3Jp
dGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pCiB7
CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC04OTIsNiArMTAwMSw3IEBAIFZlY3Rvcjx1bnNpZ25l
ZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFIKICAgICAgICAgc3dpdGNoIChyZXByZXNlbnRhdGlv
bikgewogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25z
dGFudDoKICAgICAgICAgICAgIGNvbnN0YW50ID0gZ2xvYmFsT2JqZWN0LT5saW5rVGltZUNvbnN0
YW50KHN0YXRpY19jYXN0PExpbmtUaW1lQ29uc3RhbnQ+KGNvbnN0YW50LmFzSW50MzJBc0FueUlu
dCgpKSk7CisgICAgICAgICAgICBBU1NFUlQoY29uc3RhbnQuaXNDZWxsKCkpOyAvLyBVbmxpbmtl
ZCBCYXNlbGluZSBKSVQgcmVxdWlyZXMgdGhpcy4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI6CiAgICAgICAgIGNhc2UgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgpAQCAtMTUxNCw3ICsxNjI0LDcgQEAgQ29k
ZUJsb2NrOjpKSVREYXRhJiBDb2RlQmxvY2s6OmVuc3VyZUpJVAogICAgIHJldHVybiAqbV9qaXRE
YXRhOwogfQogCi12b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hl
cygpCit2b2lkIENvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKQogewogICAgIGlm
IChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCkBAIC0xNTI1
LDYgKzE2MzUsMjAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbgog
ICAgICAgICAgICAgc3R1YkluZm8tPnZpc2l0V2Vha1JlZmVyZW5jZXMobG9ja2VyLCB0aGlzKTsK
ICAgICAgICAgfQogICAgIH0KKworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBpZiAoaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIC8vIFZlcmlmeSB3ZSBkb24n
dCBuZWVkIHRvIGZpbmFsaXplIHRoZXNlIHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KKyAg
ICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA6IHN0YXRpY19jYXN0PEJhc2Vs
aW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fZXZhbENhbGxMaW5rSW5mb3MpIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7CisgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtdIChKU0NlbGwqKSB7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisKKyAgICB9CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC0xNTM0
LDQ2ICsxNjU4LDQ3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgK
IAogICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIGJv
b2wgaXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGU7Ci0gICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBmYWxzZTsKLSAgICAv
LyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQg
cmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0Ci0gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGlu
ZSBKSVQgY29kZSBhbmQgcmVpbnN0YWxsIExMSW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5Lgot
ICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpICYmICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1Nl
dCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpKSB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sq
IG9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKLSAgICAgICAg
ICAgIGlmICghb3B0aW1pemVkQ29kZUJsb2NrLT5tX29zckV4aXRDb3VudGVyKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSkgewotICAgICAgICAgICAg
ICAgICAgICBtX2ppdENvZGUgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBMTEludDo6
c2V0RW50cnlwb2ludCh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOwotCi0gICAgICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxpbmtlZENvZGUtPm51bWJlck9mRXhj
ZXB0aW9uSGFuZGxlcnMoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBV
bmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlua2VkQ29kZS0+ZXhj
ZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBo
YW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9ucygpLmF0KHVubGlu
a2VkSGFuZGxlci50YXJnZXQpLnB0cigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxl
ci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZUNhdGNoKGluc3RydWN0aW9uLndpZHRoKCkpLmNv
ZGUoKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdW5s
aW5rSW5jb21pbmdDYWxscygpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0
byBjbGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGluIGZpbmFsaXplVW5jb25kaXRpb25hbGx5
IGFsbCBjb21waWxlciB0aHJlYWRzCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBzYWZlcG9p
bnRlZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5pbmcgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBieXRl
Y29kZSBwYXJzZXIsIGFuZCBieXRlY29kZQotICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXIg
aXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5m
b3MuCi0gICAgICAgICAgICAgICAgICAgIHJlc2V0SklURGF0YSgpOwotICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFk
ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNlbmRpZgorLy8g
T09QUzogcmVjb25jaWxlIHRoaXMKKy8vI2lmIEVOQUJMRShKSVQpCisvLyAgICBib29sIGlzRWxp
Z2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwor
Ly8gICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBmYWxzZTsKKy8vICAgIC8vIElm
IEJhc2VsaW5lSklUIGNvZGUgaXMgbm90IGV4ZWN1dGluZywgYW5kIGFuIG9wdGltaXplZCByZXBs
YWNlbWVudCBleGlzdHMsIHdlIGF0dGVtcHQKKy8vICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUg
SklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KKy8v
ICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpICYmICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1Nl
dCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpKSB7CisvLyAgICAgICAgaWYgKENvZGVCbG9j
ayogb3B0aW1pemVkQ29kZUJsb2NrID0gb3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworLy8gICAg
ICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgeworLy8g
ICAgICAgICAgICAgICAgaWYgKGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSkgeworLy8gICAg
ICAgICAgICAgICAgICAgIG1faml0Q29kZSA9IG51bGxwdHI7CisvLyAgICAgICAgICAgICAgICAg
ICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7CisvLyAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOworLy8K
Ky8vICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRD
b2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgeworLy8gICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBt
X3VubGlua2VkQ29kZS0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKKy8vICAgICAgICAgICAgICAgICAg
ICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRs
ZXJzW2ldOworLy8gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICpp
bnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKKy8vICAgICAg
ICAgICAgICAgICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29k
ZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZUNhdGNo
KGluc3RydWN0aW9uLndpZHRoKCkpLmNvZGUoKSkpOworLy8gICAgICAgICAgICAgICAgICAgIH0K
Ky8vCisvLyAgICAgICAgICAgICAgICAgICAgdW5saW5rSW5jb21pbmdDYWxscygpOworLy8KKy8v
ICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUg
YmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwor
Ly8gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBzYWZlcG9pbnRlZCwgbWVhbmluZyB0aGV5J3Jl
IHJ1bm5pbmcgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBieXRlY29kZSBwYXJzZXIsIGFuZCBieXRl
Y29kZQorLy8gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlciBpcyB0aGUgb25seSBkYXRhIHN0
cnVjdHVyZSBwb2ludGluZyBpbnRvIHRoZSB2YXJpb3VzICppbmZvcy4KKy8vICAgICAgICAgICAg
ICAgICAgICByZXNldEpJVERhdGEoKTsKKy8vICAgICAgICAgICAgICAgIH0gZWxzZQorLy8gICAg
ICAgICAgICAgICAgICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gdHJ1ZTsKKy8v
ICAgICAgICAgICAgfQorLy8gICAgICAgIH0KKy8vICAgIH0KKy8vCisvLyNlbmRpZgogICAgIAog
ICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKICAgICAgICAg
ZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAo
ISFqaXRDb2RlKCkpCi0gICAgICAgIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsK
KyAgICAgICAgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KERGR19KSVQpCkBAIC0xNTk0LDcgKzE3MTksNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoCiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OgotICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKKyAg
ICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jb3VudCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAg
ICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKQEAgLTE2NzUsMzAgKzE4
MDAsNiBAQCBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mCiAgICAgcmV0
dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSwgY29k
ZU9yaWdpbik7CiB9CiAKLUpJVEFkZElDKiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fYWRkSUNzLmFk
ZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVRNdWxJQyogQ29kZUJsb2NrOjphZGRKSVRNdWxJQyhC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX211
bElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUU3ViSUMqIENvZGVCbG9jazo6YWRkSklU
U3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVE5lZ0lDKiBDb2RlQmxvY2s6
OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRh
KGxvY2tlcikubV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KIFN0cnVjdHVyZVN0dWJJ
bmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwpAQCAtMzEzMyw3ICszMjM0LDcg
QEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1l
UmVnaXN0ZXJDb3VudEZvcih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMzQ5LDEzICszNDUwLDEzIEBA
IEJpbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2gg
KHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNh
c2Ugb3BfbXVsOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJu
ICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTMzNjcsMTEgKzM0NjgsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6dW5hcnlBcml0aAogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGNhc2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0zNDcyLDIyICszNTczLDE2IEBAIHZvaWQgQ29kZUJsb2Nr
OjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmkKIH0KIAogI2lmIEVOQUJMRShKSVQpCi12b2lkIENv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3Jp
Z2luTWFwPiYmIG1hcCkgCi17IAotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
KTsKLSAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1v
dmUobWFwKTsKLX0KLQogc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQ
Qyh2b2lkKiBwYykKIHsKKyAgICBpZiAoYXV0byogcGNUb0NvZGVPcmlnaW5NYXAgPSBtX2ppdENv
ZGUtPnBjVG9Db2RlT3JpZ2luTWFwKCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Q29k
ZU9yaWdpbj4gY29kZU9yaWdpbiA9IHBjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQorICAg
ICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CisgICAgfQorCiAgICAgewogICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIGlmIChhdXRvKiBqaXREYXRh
ID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBpZiAoaml0RGF0YS0+bV9wY1RvQ29k
ZU9yaWdpbk1hcCkgewotICAgICAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+IGNvZGVPcmlnaW4gPSBqaXREYXRhLT5tX3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKLSAgICAgICAgICAgIH0K
LQogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRh
LT5tX3N0dWJJbmZvcykgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29udGFpbnNQ
QyhwYykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+KHN0dWJJbmZvLT5jb2RlT3JpZ2luKTsKQEAgLTM1MjEsMjggKzM2MTYsMTQgQEAgc3RkOjpv
cHRpb25hbDxCeXRlY29kZUluZGV4PiBDb2RlQmxvY2s6OgogICAgIHJldHVybiBieXRlY29kZUlu
ZGV4OwogfQogCi1pbnQzMl90IENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhy
ZXNob2xkKQotewotICAgIHN3aXRjaCAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUo
KSkgewotICAgIGNhc2UgVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU6Ci0gICAgICAgIHJldHVybiB0
aHJlc2hvbGQ7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6RmFsc2U6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgKiA0OwotICAgIGNhc2UgVHJpU3RhdGU6OlRydWU6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgLyAyOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
dGhyZXNob2xkOwotfQotCi12b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBD
b2RlQmxvY2s6OmppdFNvb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdU
aHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2Fy
bVVwKCkpLCB0aGlzKTsKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9s
ZCh1bmxpbmtlZENvZGVCbG9jaygpLT50aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3Zv
aWQgQ29kZUJsb2NrOjpqaXROZXh0SW52b2NhdGlvbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdU
aHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAKIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRy
YXBCcmVha3BvaW50cygpIGNvbnN0CkBAIC0zNTg4LDI4ICszNjY5LDggQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBNYXRoSUNTdGF0cygpCiAgICAgZG91YmxlIG51bVN1YnMgPSAwLjA7CiAgICAgZG91
YmxlIHRvdGFsU3ViU2l6ZSA9IDAuMDsKIAotICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVC
bG9jayogY29kZUJsb2NrKSB7Ci0gICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gY29kZUJsb2Nr
LT5tX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgICAgIGZvciAoSklUQWRkSUMqIGFkZElDIDog
aml0RGF0YS0+bV9hZGRJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1BZGRzKys7Ci0gICAgICAg
ICAgICAgICAgdG90YWxBZGRTaXplICs9IGFkZElDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKEpJVE11bElDKiBtdWxJQyA6IGppdERhdGEtPm1fbXVsSUNz
KSB7Ci0gICAgICAgICAgICAgICAgbnVtTXVscysrOwotICAgICAgICAgICAgICAgIHRvdGFsTXVs
U2l6ZSArPSBtdWxJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Zm9yIChKSVROZWdJQyogbmVnSUMgOiBqaXREYXRhLT5tX25lZ0lDcykgewotICAgICAgICAgICAg
ICAgIG51bU5lZ3MrKzsKLSAgICAgICAgICAgICAgICB0b3RhbE5lZ1NpemUgKz0gbmVnSUMtPmNv
ZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUU3ViSUMqIHN1
YklDIDogaml0RGF0YS0+bV9zdWJJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1TdWJzKys7Ci0g
ICAgICAgICAgICAgICAgdG90YWxTdWJTaXplICs9IHN1YklDLT5jb2RlU2l6ZSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgYXV0byBjb3VudElDcyA9IFsmXSAoQ29kZUJsb2NrKikg
eworICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byByZS1pbXBsZW1lbnQgdGhpcyB1c2luZyBK
SVRDb2RlLgogICAgIH07CiAgICAgaGVhcCgpLT5mb3JFYWNoQ29kZUJsb2NrKGNvdW50SUNzKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw5IEBAIGNsYXNzIEpTTW9kdWxlRW52aXJv
bm1lbnQ7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ7CiBjbGFzcyBNZXRhZGF0YVRhYmxlOwot
Y2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKIGNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogCiBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihDb2RlQmxvY2tSYXJlRGF0YSk7CiAKQEAg
LTE1OCw3ICsxNTgsOSBAQCBwdWJsaWM6CiAgICAgTWV0YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIG51
bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6
CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKHVuc2lnbmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoK
IAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkgY29uc3QgeyByZXR1cm4g
bV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgfQogCkBAIC0xNjcsNyArMTY5LDYgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KICAg
ICB1bnNpZ25lZCBudW1UbXBzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0No
ZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50VG1wczsgfQogCi0gICAgdW5zaWduZWQqIGFk
ZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CiAKICAgICBDb2RlQmxvY2sq
IGFsdGVybmF0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9h
bHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAgLTIzMiwxNiArMjMzLDYgQEAgcHVibGljOgogICAgIGJv
b2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3Rh
bGxWTVRyYXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmly
dHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRp
bmcgYmFjayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlz
IGB0aGlzYCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0Nv
bnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsK
LQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29s
IGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAg
IHJldHVybiByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAt
MjY4LDIzICsyNTksMjEgQEAgcHVibGljOgogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RydWN0IEpJ
VERhdGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICAgICAgQmFnPFN0cnVj
dHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAgICAgICAgQmFnPEpJVEFkZElDPiBtX2FkZElD
czsKLSAgICAgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKLSAgICAgICAgQmFnPEpJVE5lZ0lD
PiBtX25lZ0lDczsKLSAgICAgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKICAgICAgICAgQmFn
PENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgICAgICBTZW50aW5lbExpbmtlZExp
c3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9p
bmNvbWluZ0NhbGxzOwogICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBoaWNDYWxs
Tm9kZSwgUGFja2VkUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29t
aW5nUG9seW1vcnBoaWNDYWxsczsKLSAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxl
PiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJs
ZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENU
b0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXND
YWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1h
cDsKKworICAgICAgICBGaXhlZFZlY3Rvcjx2b2lkKj4gbV9qaXRDb25zdGFudFBvb2w7CisgICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwgbV9qaXRDb25zdGFudFBvb2wpOyB9CiAgICAgfTsKIAor
ICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29k
ZT4pOworCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkKQEAgLTI5
MywyMiArMjgyLDcgQEAgcHVibGljOgogICAgIH0KICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRh
U2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAotICAgIEpJVEFkZElDKiBhZGRKSVRB
ZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLSAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQ
cm9maWxlKik7Ci0gICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSop
OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+
Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2Zp
bGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlw
ZT4KLSAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkg
eyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
YW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVE5l
Z0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJ
VE5lZ0lDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3Is
IEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRTdWJJQyogYWRkTWF0aElD
KEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmls
ZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURGF0YSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RGF0YSk7IH0KIAogICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlLCBDb2RlT3JpZ2luKTsKIApAQCAtMzIyLDE4
ICsyOTYsOCBAQCBwdWJsaWM6CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAg
dG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgogICAgIENhbGxMaW5rSW5mbyog
Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICAKLSAg
ICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29kZU1hcCYmIGppdENvZGVNYXApCi0gICAgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOwotICAgIH0K
LSAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCkKLSAgICB7Ci0gICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX2ppdENvZGVNYXA7Ci0gICAgfQorICAgIGNvbnN0IEpJVENvZGVNYXAmIGpp
dENvZGVNYXAoKTsKIAotICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVf
cHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+
IGZpbmRQQyh2b2lkKiBwYyk7CiAKICAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVn
aXN0ZXJTZXQpOwpAQCAtNDcyLDEwICs0MzYsMTIgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5h
bWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFy
YW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICAgICAgcmV0dXJuIG1fYXJndW1l
bnRWYWx1ZVByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgCiAgICAgfQogCiAgICAgVmFsdWVQcm9m
aWxlJiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudEluZGV4KQpAQCAt
NTY5LDggKzUzNSwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
czsgfQogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVh
bFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9D
b25zdGFudEluZGV4KCldLmdldCgpOyB9CisgICAgYm9vbCBpc0NvbnN0YW50T3duZWRCeVVubGlu
a2VkQ29kZUJsb2NrKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0OwogICAgIEFMV0FZU19JTkxJ
TkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5j
b25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihyZWcpOyB9CiAgICAgQUxXQVlTX0lOTElO
RSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFu
dFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihpbmRleCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KENvZGVCbG9jaywgbV9jb25zdGFudFJlZ2lzdGVycykgKyBkZWNsdHlwZShtX2NvbnN0YW50UmVn
aXN0ZXJzKTo6ZGF0YU1lbW9yeU9mZnNldCgpOyB9CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0u
Z2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5j
dGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNTk1LDIyICs1NjMsMjIgQEAgcHVibGljOgogICAgIC8v
IEp1bXAgVGFibGVzCiAKICNpZiBFTkFCTEUoSklUKQotICAgIFNpbXBsZUp1bXBUYWJsZSYgc3dp
dGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorICAgIFNpbXBsZUp1bXBUYWJsZSYgYmFzZWxp
bmVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYg
YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIHZvaWQq
IGJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1faml0RGF0YSk7Ci0gICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhICYmIGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBtX2ppdERhdGEt
Pm1faml0Q29uc3RhbnRQb29sLmRhdGEoKTsKICAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVt
YmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOyB9CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIFN0cmluZ0p1bXBUYWJsZSYgc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQotICAgIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwotICAgIH0KKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBTdHJpbmdKdW1wVGFibGUmIGRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBkZmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxl
SW5kZXgpOwogI2VuZGlmCisKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZVbmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkg
eyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOyB9CiAKQEAgLTYzMiwyMSArNjAwLDIwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxp
bnRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKKyAg
ICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y2hlY2tJZlRocmVzaG9sZENyb3Nz
ZWRBbmRTZXQodGhpcyk7CiAgICAgfQogCiAgICAgdm9pZCBkb250SklUQW55dGltZVNvb24oKQog
ICAgIHsKLSAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7
CisgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+ZGVmZXJJbmRlZmluaXRlbHkoKTsKICAg
ICB9CiAKLSAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7Ci0g
ICAgdm9pZCBqaXRBZnRlcldhcm1VcCgpOwogICAgIHZvaWQgaml0U29vbigpOworICAgIHZvaWQg
aml0TmV4dEludm9jYXRpb24oKTsKIAogICAgIGNvbnN0IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRl
ciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9s
bGludEV4ZWN1dGVDb3VudGVyOworICAgICAgICByZXR1cm4gKm1fbGxpbnRFeGVjdXRlQ291bnRl
cjsKICAgICB9CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8c3RkOjp0dXBsZTxTdHJ1Y3R1cmVJRCwg
dW5zaWduZWQ+LCBGaXhlZFZlY3RvcjxMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQ+PiBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwOwpAQCAtNzk3LDYgKzc2NCw3IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJu
IG1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNz
KCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVC
bG9jaywgbV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVha3BvaW50KHVu
c2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQodW5zaWdu
ZWQgbnVtQnJlYWtwb2ludHMpCkBAIC04MzgsNiArODA2LDcgQEAgcHVibGljOgogICAgIG11dGFi
bGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMgdG8gc3RvcmUg
dG8gaXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5l
ZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2NhcGFiaWxpdHlM
ZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNywxNiArODc2LDEy
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0YWRhdGFUYWJsZSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpOyB9
CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkK
LSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBj
b21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0gICAgICAgIHJldHVybiAhbV91bmxpbmtlZENv
ZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAgfQorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxp
Z2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bG9v
cEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKTsgfQogCiBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CiAjaWYgRU5BQkxFKEpJVCkK
LSAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKKyAgICB2b2lkIGZp
bmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKQEAgLTEwMTAsNyArOTc1LDkgQEAgcHJp
dmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2lu
dE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitw
dWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6
CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRv
IG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9j
awpAQCAtMTAyOSw3ICs5OTYsNyBAQCBwcml2YXRlOgogCiAgICAgV3JpdGVCYXJyaWVyPENvZGVC
bG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIg
bV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciogbV9s
bGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9OwogCiAgICAgQmFzZWxpbmVFeGVjdXRpb25D
b3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAgICAgdWludDMyX3QgbV9vc3JFeGl0Q291bnRl
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
a0lubGluZXMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTAg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNs
dWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRl
ICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkgKzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZv
ckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJ
U0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8m
IG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9wcm9maWxlLCBmYWxzZSk7IH0pOwotCiAgICAg
ICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJTEUoVklTSVQpCi0KICN1bmRlZiBW
SVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck9wZW4+KFsmXSAo
YXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1Nyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JF
YWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVBy
b2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwzOCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFj
aExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZU19J
TkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJsb2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAgICBB
U1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFw
OworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGlu
ZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxp
bmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNl
bGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQo
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK0FM
V0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmRmZ1N3aXRjaEp1bXBUYWJs
ZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkRG
R0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6SklUQ29kZSo+KG1faml0Q29kZS5n
ZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKworQUxXQVlTX0lOTElO
RSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGlu
dCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklU
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgp
KS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9j
ayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRB
Y3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAgYm9vbCBFeGVjdXRpb25Db3VudGVy
PGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB0
aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQpOworICAgIHRocmVzaG9sZCA9IGNsaXBwZWRU
aHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAgICBtX2NvdW50ZXIgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9yY2VTbG93
UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRoaXMsIGNoZWNrSWZUaHJlc2hvbGRD
cm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxzZS4KICAgICBib29sIGNoZWNrSWZU
aHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwogICAgIGJvb2wgaGFzQ3Jvc3NlZFRo
cmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlciA+PSAwOyB9Ci0gICAgdm9pZCBzZXRO
ZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayopOworICAgIHZvaWQgc2V0
TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2RlQmxvY2sqID0gbnVsbHB0cik7CiAg
ICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwogICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENvdW50KSArIG1fY291bnRlcjsgfQog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpAQCAtODYsMTMgKzg2LDkgQEAgcHVi
bGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBU
IGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVCB0aHJlc2hv
bGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChUIHRocmVzaG9sZCkKICAgICB7Ci0g
ICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwotICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9t
aXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCkgJiYgZ2xvYmFsT2JqZWN0KQot
ICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2JqZWN0LT53ZWFrUmFuZG9tSW50ZWdl
cigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRz
QmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkID0gbWF4
aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwogICAgICAgICBpZiAodGhy
ZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAgICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNo
b2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhVW5z
ZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0KSA9PSAx
Mik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggeworICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBhcnJheVByb2ZpbGUpOyB9CiAgICAg
QXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRC
eUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsKQEAgLTg4LDYgKzg5LDcgQEAgdW5p
b24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRNb2RlIG1vZGU7CiAgICAg
ICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7IC8vIFRoaXMgbXVzdCBiZSB6ZXJv
IHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRh
ZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhRGVmYXVsdCBkZWZhdWx0TW9k
ZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5zZXRNb2RlOwogICAgIEdldEJ5SWRN
b2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1vZGU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6
Y29tcHV0ZUZvclN0dWJJCiAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhOb0luZm9ybWF0aW9u
KTsKICAgICAgICAgCiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOiB7Ci0gICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZShwcm9maWxlZEJsb2NrLT52bSgpKTsKICAgICAgICAgaWYg
KHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKICAgICAg
ICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1
YkluZm8pOwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5m
by0+aWRlbnRpZmllcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5
LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgogICAgICAgICBy
ZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJ
bkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPm1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSk7CiAgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAg
ICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3Bw
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5s
aW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsMTYgQEAgQUxXQVlT
X0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1Yklu
Zm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBp
ZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNs
b3RzIGdldCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAKICAgICBHUFJSZWcgYmFz
ZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0yMzMsMjMgKzIzOCwzMSBAQCBBTFdBWVNfSU5MSU5F
IHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3RlCiAgICAgcmV0dXJuIGdldFNjcmF0Y2hSZWdpc3Rl
cihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJlZzsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmNh
bkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1
cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCitib29sIElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZp
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQ
cm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkpOworICAgIEFTU0VSVChjYW5HZW5lcmF0
ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2Zmc2V0KSk7CisKKyAg
ICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBzbG90cyBn
ZXQgZmlsbGVkIGluLiBOb3RoaW5nIGVsc2UgdG8gZG8uCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KIAogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKQEAgLTI3OSwyMiArMjkyLDI1IEBAIGJv
b2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVIKICAgICByZXR1cm4gbGlua2Vk
Q29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5n
dGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKK2Jvb2wgSW5s
aW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQogewogICAgIEFTU0VS
VChhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKIAogICAgIGlmICghc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAo
Y29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKwogICAgIGlmICghaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFoYXNBbnlBcnJheVN0b3JhZ2UoYXJyYXkt
PmluZGV4aW5nVHlwZSgpKSAmJiBhcnJheS0+aW5kZXhpbmdUeXBlKCkgIT0gQXJyYXlDbGFzczsK
IH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQogewotICAgIEFTU0VSVChpc0NhY2hlYWJsZUFycmF5
TGVuZ3RoKHN0dWJJbmZvLCBhcnJheSkpOworICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBp
c0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGFycmF5KSk7CiAKICAg
ICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMzE5LDE3ICszMzUsMjAgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJy
YXlMZW5ndGgoUwogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCi1ib29sIElubGlu
ZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgaWYgKCFz
dHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAor
ICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIGhhc0ZyZWVSZWdpc3RlcihzdHViSW5m
byk7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdM
ZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
IHsKLSAgICBBU1NFUlQoaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pKTsKKyAgICBB
U1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoY29kZUJsb2Nr
LCBzdHViSW5mbykpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM2MywxMyArMzgyLDE4IEBAIGJvb2wgSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aCgKIH0KIAogCi1ib29sIElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
IGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIFRoZXNlIHNsb3RzIGdl
dCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5mby5iYXNlR1BSOwogICAgIEpTVmFsdWVS
ZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAKQEAgLTQwNiw3ICs0MzAsNyBAQCB2
b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgaWYgKGNvZGVCbG9j
ay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgLy8gSWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10
aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQgKGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAv
LyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGlyZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdl
IHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2RlUHRyLgotICAgICAgICBpZiAoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUo
KSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZp
ZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29kZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5m
by5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMgbWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29k
ZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAgICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRo
IHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNvZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5n
IGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1f
Y29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2Nh
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CkBAIC00MjEsNyArNDQ1LDkgQEAgdm9pZCBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgICAgICAgICAgICAgIH0pLCAiSW5s
aW5lQWNjZXNzOiBsaW5raW5nIHN0dWIgY2FsbCIpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CisKICAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gdGFyZ2V0OworICAgICAgICBzdHViSW5m
by5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOyAvLyBDbGVhciBvdXQgdGhlIGlubGlu
ZSBhY2Nlc3MgY29kZS4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDM0LDggKzQ2MCwx
NCBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgfSksICJJ
bmxpbmVBY2Nlc3M6IGxpbmtpbmcgY29uc3RhbnQganVtcCIpOwogfQogCi12b2lkIElubGluZUFj
Y2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQordm9pZCBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNz
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Cisg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkgJiYgY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gc3R1
YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgICAgICBzdHViSW5mby5tX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOyAvLyBDbGVhciBvdXQgdGhlIGlubGluZSBhY2Nlc3MgY29k
ZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIENDYWxsSGVscGVyczo6ZW1pdEpJVENv
ZGVPdmVyKHN0dWJJbmZvLnN0YXJ0LnJldGFnZ2VkPEpTSW50ZXJuYWxQdHJUYWc+KCksIHNjb3Bl
ZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPihbJl0oQ0NhbGxIZWxwZXJzJiBqaXQpIHsKICAg
ICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhIG5vcCBzbGVkIGhlcmUgYmVjYXVzZSBub2JvZHkgc2hv
dWxkIGJlIGp1bXBpbmcgaW50byB0aGUgbWlkZGxlIG9mIGFuIElDLgogICAgICAgICBhdXRvIGp1
bXAgPSBqaXQuanVtcCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
bGluZUFjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxNCArOTks
MTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RkOjptYXgoc2l6ZSwgc2l6ZUZvclByb3Bl
cnR5QWNjZXNzKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3Bl
cnR5QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQp
OwotICAgIHN0YXRpYyBib29sIGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1
cmVTdHViSW5mbyYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0
eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVBcnJheUxlbmd0aChTdHJ1Y3R1
cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZVN0cmlu
Z0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlQXJy
YXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7Ci0gICAgc3RhdGljIGJvb2wg
Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqKTsKLSAg
ICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYpOwor
ICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRp
YyBib29sIGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1
cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVBcnJheUxl
bmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0
aWMgYm9vbCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiwg
U3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVT
ZWxmSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqKTsK
KyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwogCiAgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4pOwogICAgIHN0YXRpYyB2b2lkIHJl
d2lyZVN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRl
cmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgT1ZF
UkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBUwogCiBzdHJ1Y3QgSXRlcmF0aW9u
TW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90IHNlZW5Nb2RlcyB7IDAgfTsKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEl0
ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1vZGVzKTsgfSAKICAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9PSBzaXplb2YoSXRlcmF0aW9uTW9kZSkpOwogfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2Fs
bExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBBcnJheVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9hcnJheVByb2ZpbGUpOyB9CiAKIHByaXZh
dGU6CiAgICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsg
dW5saW5rZWRCaXQgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRh
ZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L01ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUs
MTQgQEAgcHVibGljOgogICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEpOwogICAgIH0KIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAgIEFMV0FZU19JTkxJTkUgc2l6ZV90IG51bUVudHJp
ZXMoKQorICAgIHsKKyAgICAgICAgYXV0byogc3RhcnQgPSBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUg
T3A6Ok1ldGFkYXRhKj4oZ2V0KE9wOjpvcGNvZGVJRCkpOworICAgICAgICBhdXRvKiBlbmQgPSBi
aXR3aXNlX2Nhc3Q8dHlwZW5hbWUgT3A6Ok1ldGFkYXRhKj4oZ2V0SW1wbChPcDo6b3Bjb2RlSUQg
KyAxKSk7CisgICAgICAgIHJldHVybiBlbmQgLSBzdGFydDsKKyAgICB9CisKICAgICBzaXplX3Qg
c2l6ZUluQnl0ZXMoKTsKIAogICAgIHZvaWQgcmVmKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgwLDEwICsxODAsMTAgQEAgUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1
dGVGb3JTdHViSQogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHVi
SW5mby0+aWRlbnRpZmllcigpOwogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRl
bnRpZmllci51aWQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodWlkKTsKLSAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHByb2ZpbGVk
QmxvY2stPnZtKCkpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQp
KQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50
aWZpZXIpLCBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZz
ZXQpOworICAgICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlk
ZW50aWZpZXIpLCBzdHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwogICAgIH0KICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiAjaW5jbHVkZSAiQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVwYXRj
aC5oIgogCkBAIC02NSw5ICs2Niw5IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRC
eUlkU2VsZigKICAgICBBU1NFUlQoaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKICAgICBzZXRDYWNo
ZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIg
PSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAg
Y29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlk
U2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAK
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRBcnJheUxlbmd0aChjb25zdCBDb25jdXJyZW50
SlNMb2NrZXJCYXNlJiBsb2NrZXIpCkBAIC04Nyw5ICs4OCw5IEBAIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OmluaXRQdXRCeUlkUmVwbGEKICAgICBBU1NFUlQobV9jYWNoZVR5cGUgPT0gQ2FjaGVU
eXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpQdXRCeUlk
UmVwbGFjZSk7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndyaXRlQmFy
cmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5
SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0
SW5CeUlkU2VsZihjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKQpAQCAtOTcs
OSArOTgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0SW5CeUlkU2VsZihjCiAgICAg
QVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENhY2hlVHlw
ZShsb2NrZXIsIENhY2hlVHlwZTo6SW5CeUlkU2VsZik7CiAgICAgbV9pZGVudGlmaWVyID0gaWRl
bnRpZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRl
QmFycmllcihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVC
bG9jay0+dm0oKS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYu
b2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCkBAIC0yMzYsNyArMjM3LDcgQEAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbwogICAgICAgICAvLyB3ZSdyZSBidWZmZXJl
ZCBpcyBiZWNhdXNlIHdlIHJlbHkgb24gaXQgdG8gcmVzZXQgZHVyaW5nIEdDIGlmIG1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZQogICAgICAgICAvLyBpcyBjb2xsZWN0ZWQuCiAgICAgICAgIG1f
aWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS5jbGVhcigpOworICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOwogICAg
ICAgICAKICAgICAgICAgLy8gSWYgd2UgZ2VuZXJhdGVkIHNvbWUgY29kZSB0aGVuIHdlIGRvbid0
IHdhbnQgdG8gYXR0ZW1wdCB0byByZXBhdGNoIGluIHRoZSBmdXR1cmUgdW50aWwgd2UKICAgICAg
ICAgLy8gZ2F0aGVyIGVub3VnaCBjYXNlcy4KQEAgLTI1MSw3ICsyNTIsNyBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiB7CiAgICAgY2xlYXJCdWZmZXJlZFN0cnVj
dHVyZXMoKTsKICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwotICAgIG1faW5saW5lQWNjZXNz
QmFzZVN0cnVjdHVyZS5jbGVhcigpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9
IDA7CiAKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCkKICAgICAgICAg
cmV0dXJuOwpAQCAtMjg1LDYgKzI4Niw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0
KGNvbnN0IENvbmMKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtp
bmQ6OkJ5SWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CiAgICAgICAgIHJlc2V0UHV0
QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZhbCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgpAQCAtMzYwLDggKzM2Miw4IEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICB9CiAKICAgICBib29sIGlzVmFs
aWQgPSB0cnVlOwotICAgIGlmIChtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCi0gICAgICAg
IGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUu
Z2V0KCkpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUodm0pKQorICAgICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNNYXJrZWQoc3RydWN0
dXJlKTsKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICBp
c1ZhbGlkICY9IHUuc3R1Yi0+dmlzaXRXZWFrKHZtKTsKIApAQCAtMzc1LDggKzM3Nyw4IEBAIHZv
aWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmIChtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUp
Ci0gICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRv
cik7CisgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSh2aXNpdG9yLnZtKCkpKQorICAgICAgICBzdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0
b3IpOwogCiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikKICAgICAgICAg
dS5zdHViLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKQEAgLTQzMCw2ICs0MzIsMjA0
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6c2UKICAgICBtX2NhY2hl
VHlwZSA9IG5ld0NhY2hlVHlwZTsKIH0KIAordm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlh
bGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8pCit7CisgICAgYWNjZXNzVHlwZSA9IHVu
bGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZTsKKyAgICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8u
c3RhcnQ7CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5kb25lTG9jYXRpb247
CisgICAgc2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5zbG93UGF0aFN0
YXJ0TG9jYXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKTsKKyAgICBjb2Rl
T3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAg
IG1fY29kZVB0ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKworICAgIHVzZWRSZWdpc3RlcnMg
PSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgaWYgKGFjY2Vz
c1R5cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZvciBpdGVyYXRvcl9uZXh0LCB3ZSBj
YW4ndCBjbG9iYmVyIHRoZSAiZG9udENsb2JiZXJSZWdpc3RlciIgcmVnaXN0ZXIgZWl0aGVyLgor
ICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRD
bG9iYmVyUmVnaXN0ZXIpOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAg
IGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNl
T2Y6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5
R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJl
Y3Q6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRo
aXM6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVO
YW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
QnJhbmQ6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJh
bmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2
YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJ
ZDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5m
by5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6
CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQor
ICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRE
ZWZpbmU6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVm
aW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1Yklu
Zm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAg
ICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1Yklu
Zm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gdW5saW5rZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRL
aW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGlt
aXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpE
ZWxldGVCeUlEOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdz
LnByb3BlcnR5R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2Vs
aW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFt
ZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3Bl
cnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZh
bHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3Qg
PSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
dmFsdWU7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgICAgIHJlZ3MucHJvdG90eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjpwcm90bzsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRl
bnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
SW5CeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBy
ZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpUcnlHZXRCeUlkOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJh
c2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9H
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CisgICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBpZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQ
dXRCeVZhbCkKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpTZXRQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFu
ZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVl
R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKICNpZiBBU1NFUlRfRU5BQkxFRAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y2hlY2tD
b25zaXN0ZW5jeSgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlB1dEtp
bmQuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgpAQCAtNTYsNiArNTcsNyBAQCBlbnVtIGNsYXNzIEFj
Y2Vzc1R5cGUgOiBpbnQ4X3QgewogICAgIEdldEJ5VmFsLAogICAgIFB1dEJ5SWQsCiAgICAgUHV0
QnlWYWwsCisgICAgUHV0UHJpdmF0ZU5hbWUsCiAgICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAg
ICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC03OCw2ICs4MCw4IEBAIGVudW0gY2xhc3MgQ2FjaGVUeXBl
IDogaW50OF90IHsKICAgICBTdHJpbmdMZW5ndGgKIH07CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvOworCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1YkluZm8pOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpAQCAtOTgsNiArMTAyLDggQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2
b2lkIGFib3V0VG9EaWUoKTsKIAorICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mKTsKKwog
ICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIg
aGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJl
c2V0cyBpdHNlbGYsCkBAIC0zMjUsMTMgKzMzMSwxOSBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAg
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOworICAgIFByb3BlcnR5T2Zmc2V0IGJ5SWRTZWxmT2Zm
c2V0OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgYnlJZFNlbGZPZmZzZXQpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSk7IH0KICAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgICAgIH0gYnlJZFNlbGY7CiAgICAg
ICAgIFBvbHltb3JwaGljQWNjZXNzKiBzdHViOwogICAgIH0gdTsKLSAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlKiBp
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIGlmICghbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiB2bS5nZXRTdHJ1Y3R1cmUobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
KTsKKyAgICB9CisgICAgU3RydWN0dXJlSUQgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlIHsg
MCB9OwogcHJpdmF0ZToKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAg
ICAvLyBSZXByZXNlbnRzIHRob3NlIHN0cnVjdHVyZXMgdGhhdCBhbHJlYWR5IGhhdmUgYnVmZmVy
ZWQgQWNjZXNzQ2FzZXMgaW4gdGhlIFBvbHltb3JwaGljQWNjZXNzLgpAQCAtNDQ3LDYgKzQ1OSwx
NyBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQog
CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHBy
aXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkgfTsKKyAgICBF
Q01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpzbG9wcHkoKSB9OworICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElD
IGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3Ig
J2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVj
dHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVy
U2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N1cGVyU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4
NCw3IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJTdGF0ZSgpCiAgICAgZG91YmxlIHBlcmNlbnRh
Z2UgPSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsKICAgICBpZiAocGVyY2VudGFnZSAhPSBwZXJj
ZW50YWdlKQogICAgICAgICBwZXJjZW50YWdlID0gMC4wOwotICAgIGRhdGFMb2coIlBlcmNlbnQg
dGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiXG4iKTsKKyAg
ICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVy
Y2VudGFnZSwgIiVcbiIpOwogfQogCiB2b2lkIGVuYWJsZVN1cGVyU2FtcGxlcigpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
IAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJ
VENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKICNpbmNsdWRl
ICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKQEAgLTc4LDYgKzc5
LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgICAgICBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tlcik7CiAgICAgICAgIG1fcmFyZURhdGEtPm1f
cHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJpdmF0ZUJy
YW5kUmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAgfQorCisgICAgbV9sbGludEV4ZWN1dGVDb3Vu
dGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9y
SklUQWZ0ZXJXYXJtVXAoKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpAQCAt
MzE2LDYgKzMxOSw0OCBAQCBpbnQgVW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZz
CiAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsK
IH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECitib29sIFVubGlua2VkQ29kZUJsb2NrOjpoYXNJZGVu
dGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgaWYgKG51bWJlck9mSWRlbnRp
ZmllcnMoKSA+IDEwMCkgeworICAgICAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpICE9IG1f
Y2FjaGVkSWRlbnRpZmllclVpZHMuc2l6ZSgpKSB7CisgICAgICAgICAgICBMb2NrZXIgbG9ja2Vy
KG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrKTsKKyAgICAgICAgICAgIEhhc2hTZXQ8VW5pcXVl
ZFN0cmluZ0ltcGwqPiBjYWNoZWRJZGVudGlmaWVyVWlkczsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSB0aGlzLT5pZGVudGlmaWVyKGkp
OworICAgICAgICAgICAgICAgIGNhY2hlZElkZW50aWZpZXJVaWRzLmFkZChpZGVudGlmaWVyLmlt
cGwoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgICAgICAgICBtX2NhY2hlZElkZW50aWZpZXJVaWRzID0gV1RGTW92ZShjYWNoZWRJ
ZGVudGlmaWVyVWlkcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9jYWNoZWRJZGVu
dGlmaWVyVWlkcy5jb250YWlucyh1aWQpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRp
ZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitpbnQzMl90IFVubGlua2VkQ29kZUJsb2Nr
Ojp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRP
cHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAg
cmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0
dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0
dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2Nh
dGVTaGFyZWRQcm9maWxlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWV0YWRhdGEtPmlz
RmluYWxpemVkKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSwxMCArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBcml0aFByb2Zp
bGUuaCIKICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZl
bnRpb25zLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmls
ZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9u
UmFuZ2VJbmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJJZGVudGlm
aWVyLmgiCkBAIC02NCw2ICs2Niw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3Mg
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGluZUpJ
VENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29uc3Rh
bnQgOiBpbnQzMl90OwogCkBAIC0xNzUsNiArMTc4LDcgQEAgcHVibGljOgogCiAgICAgY29uc3Qg
Rml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0K
ICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJl
ZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4
KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIxMSwxNSBAQCBw
dWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAg
IGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7
IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAg
ICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDAp
LnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGlu
c3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9u
IDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1
Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25z
dCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51bUNh
bGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5z
aWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDEwICsz
NDcsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tZXRhZGF0YS0+c2l6ZUluQnl0ZXMo
KTsKICAgICB9CiAKKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCkKKyAgICB7CisgICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRv
IGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCisgICAgICAgIHJldHVybiAhaXNC
dWlsdGluRnVuY3Rpb24oKTsKKyAgICB9CiAgICAgdm9pZCBhbGxvY2F0ZVNoYXJlZFByb2ZpbGVz
KCk7CiAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUmIHVubGlua2VkVmFsdWVQcm9maWxlKHVuc2ln
bmVkIGluZGV4KSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9CiAgICAgVW5saW5r
ZWRBcnJheVByb2ZpbGUmIHVubGlua2VkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJl
dHVybiBtX2FycmF5UHJvZmlsZXNbaW5kZXhdOyB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAg
IGJvb2wgaGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOworI2VuZGlmCisKKyAgICBp
bnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7CisKIHByb3RlY3RlZDoK
ICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBF
eGVjdXRhYmxlSW5mbyYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+KTsKIApAQCAtMzk3
LDYgKzQyMSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJl
cyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRy
PEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAg
Q29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFy
c2VNb2RlOwpAQCAtNDEzLDYgKzQzOCw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogZmlu
ZCBhIGJldHRlciBwbGFjZSB0byBzdG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlB
cml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0
aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtNDU4LDYgKzQ4NiwzMCBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVj
dGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0
IEluc3RydWN0aW9uKiBwYykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVt
cE9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5
QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5
QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBl
bmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV91
bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKFVuYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJp
dGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsg
fQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7
IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRp
b25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVD
b3VudGVyOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBI
YXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjUsOSArNTE3LDE1
IEBAIHByaXZhdGU6CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFy
Z2V0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4
ZWRWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIEZpeGVkVmVj
dG9yPFVubGlua2VkVmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CiAgICAgRml4ZWRWZWN0
b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+IG1fYXJyYXlQcm9maWxlczsKIAorI2lmIEFTU0VSVF9F
TkFCTEVECisgICAgTG9jayBtX2NhY2hlZElkZW50aWZpZXJVaWRzTG9jazsKKyAgICBIYXNoU2V0
PFVuaXF1ZWRTdHJpbmdJbXBsKj4gbV9jYWNoZWRJZGVudGlmaWVyVWlkczsKKyNlbmRpZgorCiBw
cm90ZWN0ZWQ6CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgc2l6ZV90
IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBA
QCBwdWJsaWM6CiAgICAgYm9vbCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMo
KTsgfQogICAgIGJvb2wgaGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay0+aGFzQ2hlY2twb2ludHMoKTsgfQogICAgIGJvb2wgaGFzVGFpbENhbGxzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2RlQmxvY2stPmhhc1RhaWxDYWxscygpOyB9CisgICAgdW5zaWduZWQgYWRkQmlu
YXJ5QXJpdGhQcm9maWxlKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJv
ZmlsZSgpOyB9CisgICAgdW5zaWduZWQgYWRkVW5hcnlBcml0aFByb2ZpbGUoKSB7IHJldHVybiBt
X2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKTsgfQogCiAgICAgLy8gVXBkYXRpbmcg
VW5saW5rZWRDb2RlQmxvY2suCiAgICAgdm9pZCBzZXRIYXNDaGVja3BvaW50cygpIHsgbV9jb2Rl
QmxvY2stPnNldEhhc0NoZWNrcG9pbnRzKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFk
YXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTUgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUpOwogICAgIH0K
IAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNldElu
TWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9p
czMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUx
NigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAgICBiYXNlVHlwZU9mZnNldCA9IHJvdW5kVXBU
b011bHRpcGxlT2YoYWxpZ25vZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSwgYmFzZVR5cGVP
ZmZzZXQpOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YodHlwZW5hbWUg
T3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KICAgICB1bnNpZ25lZCBudW1FbnRyaWVzKCk7CiAK
QEAgLTEwNyw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc19vZmZzZXQxNlRh
YmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAgICAg
dXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSwxMyArNDUsMTEgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogCiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1
bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNr
ZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9
IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3Rh
bE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNr
ZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQogICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCi0gICAgICAgICAg
ICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgY2xl
YXJCdWNrZXRzKCk7CiAgICAgfQogICAgIAogICAgIEVuY29kZWRKU1ZhbHVlKiBzcGVjRmFpbEJ1
Y2tldCh1bnNpZ25lZCBpKQpAQCAtNTksNiArNTcsMTIgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJh
c2UgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZCdWNrZXRzICsgaSA8IHRvdGFsTnVtYmVyT2ZC
dWNrZXRzKTsKICAgICAgICAgcmV0dXJuIG1fYnVja2V0cyArIG51bWJlck9mQnVja2V0cyArIGk7
CiAgICAgfQorCisgICAgdm9pZCBjbGVhckJ1Y2tldHMoKQorICAgIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCisgICAgICAgICAg
ICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICB9CiAgICAg
CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8odW5zaWduZWQgYnVja2V0KSBjb25zdAog
ICAgIHsKQEAgLTEyMyw4ICsxMjcsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0
dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8v
IHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kp
IHsKQEAgLTEzOSw3ICsxNDEsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29k
ZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxh
dGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTYxLDYgKzE2Myw3IEBAIHN0
cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJv
ZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAg
ICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4o
KSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBz
dHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmls
ZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0VW5hcnkKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRo
aXMsIGRzdCwgc3JjLCB0eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBz
cmMsIHR5cGUsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90
Pihkc3QsIHNyYyk7CkBAIC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRJbmMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0Rz
dCk7CisgICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlB
cml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVj
OjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2Nv
ZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02ODIsNyArNjgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklE
Kj4KICAgICAgICAgZW1pdEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3Jj
MSwgUmVnaXN0ZXJJRCogc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAg
ICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1f
Y29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4g
ZHN0OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRl
ICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKQEAgLTM0LDcgKzM1LDkgQEAKICNpbmNsdWRlICJERkdK
dW1wUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIklu
bGluZUNhbGxGcmFtZVNldC5oIgorI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpT
Q2FzdC5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiUHJvZmls
ZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIlJlY29yZGVkU3RhdHVzZXMuaCIKICNpbmNsdWRl
IDx3dGYvQmFnLmg+CkBAIC03MCw3ICs3Myw3IEBAIHN0cnVjdCBXZWFrUmVmZXJlbmNlVHJhbnNp
dGlvbiB7CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV90bzsKIH07CiAgICAgICAgIAotY2xh
c3MgQ29tbW9uRGF0YSB7CitjbGFzcyBDb21tb25EYXRhIDogcHVibGljIE1hdGhJQ0hvbGRlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CiBwdWJsaWM6CiAgICAgQ29t
bW9uRGF0YSgpCkBAIC0xMTYsNiArMTE5LDcgQEAgcHVibGljOgogICAgIEZpeGVkVmVjdG9yPENv
ZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludD4gbV93YXRjaHBvaW50czsKICAgICBGaXhlZFZl
Y3RvcjxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50czsKICAgICBGaXhlZFZlY3RvcjxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQ+IG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50czsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7
CiAgICAgUmVjb3JkZWRTdGF0dXNlcyByZWNvcmRlZFN0YXR1c2VzOwogICAgIFZlY3RvcjxKdW1w
UmVwbGFjZW1lbnQ+IG1fanVtcFJlcGxhY2VtZW50czsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKIAorc3RydWN0IFNpbXBsZUp1bXBUYWJsZTsK
K3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKIG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBKSVRD
b21waWxlcjsKQEAgLTEwMSw2ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxD
b2RlT3JpZ2luPiBmaW5kUEMoQ29kZUJsb2NrKiwgdm9pZCogcGMpIGZpbmFsOwogCiAgICAgdXNp
bmcgRGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkc7CisKKyAgICBQQ1RvQ29k
ZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBjb21tb24u
bV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgSklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENvbXBpbGVyIHRvIGNhbGwgc2V0Q29kZVJl
ZigpLgpAQCAtMTQwLDYgKzE0NSw4IEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPEJ5dGVjb2RlSW5k
ZXgsIFRyaWdnZXJSZWFzb24+IHRpZXJVcEVudHJ5VHJpZ2dlcnM7CiAKICAgICBXcml0ZUJhcnJp
ZXI8Q29kZUJsb2NrPiBtX29zckVudHJ5QmxvY2s7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVt
cFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRh
YmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgdW5zaWduZWQgb3NyRW50cnlSZXRy
eTsKICAgICBib29sIGFiYW5kb25PU1JFbnRyeTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDEzICsxODUsMTIgQEAgdm9pZCBKSVRDb21w
aWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIAogICAgIG1fZ3JhcGgucmVnaXN0ZXJG
cm96ZW5WYWx1ZXMoKTsKIAotICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMuaXNFbXB0eSgpIHx8ICFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsK
LSAgICAgICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMpOwotICAgICAgICBpZiAoIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hK
dW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7Ci0gICAgfQor
ICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkp
OworICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpOwor
ICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKSAKKyAg
ICAgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fZ3Jh
cGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBpZiAoIW1fZ3JhcGgubV9zd2l0Y2hK
dW1wVGFibGVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJs
ZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKIAogICAgIGZvciAoQmFn
PFN3aXRjaERhdGE+OjppdGVyYXRvciBpdGVyID0gbV9ncmFwaC5tX3N3aXRjaERhdGEuYmVnaW4o
KTsgISFpdGVyOyArK2l0ZXIpIHsKICAgICAgICAgU3dpdGNoRGF0YSYgZGF0YSA9ICoqaXRlcjsK
QEAgLTE5OSwxMiArMTk4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYg
bGlua0IKICAgICAgICAgY2FzZSBTd2l0Y2hDaGFyOgogICAgICAgICBjYXNlIFN3aXRjaEltbTog
ewogICAgICAgICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkgewotICAgICAgICAgICAg
ICAgIEFTU0VSVChtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJ
bmRleCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N3
aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XS5pc0VtcHR5KCkpOwogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25zdCBV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgICAgIFNpbXBs
ZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRh
dGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUlu
ZGV4XTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2gu
YmxvY2stPmluZGV4XSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJsZS5t
X2N0aU9mZnNldHMuc2l6ZSgpID09IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUo
KSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsaW5rZWRUYWJsZS5tX2N0aU9mZnNl
dHMuc2l6ZSgpOyBqLS07KQpAQCAtMjE5LDEyICsyMTgsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6
bGluayhMaW5rQnVmZmVyJiBsaW5rQgogCiAgICAgICAgIGNhc2UgU3dpdGNoU3RyaW5nOiB7CiAg
ICAgICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJs
ZUluZGV4KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGUtPm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlzRW1wdHkoKSk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAg
ICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJp
bmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgICAgIFN0
cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlEZWZh
dWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNb
ZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCkgPT0gdW5saW5rZWRUYWJsZS5tX29m
ZnNldFRhYmxlLnNpemUoKSArIDEpOwogICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGxp
bmtlZFRhYmxlLm1fY3RpT2Zmc2V0cykKQEAgLTMzMyw3ICszMzIsNyBAQCB2b2lkIEpJVENvbXBp
bGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQotICAgICAgICBtX2NvZGVCbG9jay0+
c2V0UENUb0NvZGVPcmlnaW5NYXAobWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92
ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpKTsKKyAgICAgICAgbV9q
aXRDb2RlLT5jb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVP
cmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBsaW5rQnVmZmVy
KTsKIH0KIAogc3RhdGljIHZvaWQgZW1pdFN0YWNrT3ZlcmZsb3dDaGVjayhKSVRDb21waWxlciYg
aml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHN0YWNrT3ZlcmZsb3cpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk3LDcgKzk3LDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZy
YW1lKgogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRU
eXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NF
UlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxp
bmVKSVQpOwotICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFTU0VS
VChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKICAg
ICBpZiAoIU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9ERkcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJK
SVQuaCIKQEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0s
IENDYWxsSGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2ggKGppdC5j
b2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAg
ICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVz
aG9sZChqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAg
ICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVz
aG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlwZTo6RlRM
SklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpj
bGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZh
bHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6
Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMTMsNiArMzE0
LDEwIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAg
ICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVD
b2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRh
dGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVC
bG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAgICAgICAg
aml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNsb3QoaW5s
aW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIp
KTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9y
KCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSks
IGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6
c19tZXRhZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVKSVRDb25z
dGFudFBvb2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2Rl
QmxvY2ssIEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgh
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw2ICs0MDksOSBAQCB2b2lkIGFk
anVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVn
aXN0ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dl
ZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKKyAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4
aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGlu
ZUpJVENvbnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CisKICAgICAgICAgY29k
ZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKIAogICAgICAgICBCeXRl
Y29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNhY2hlYWJs
ZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1
ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUg
IkRGR0pJVENvZGUuaCIKQEAgLTI4NjksNyArMjg3MCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25GaW5kU3cKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBBU1NFUlQodmFsdWUuaXNEb3VibGUoKSk7CiAgICAgZG91YmxlIGFzRG91
YmxlID0gdmFsdWUuYXNEb3VibGUoKTsKQEAgLTI4OTAsNyArMjg5MSw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKIAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25z
dCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5kZmdTdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgcmV0dXJuIGxpbmtlZFRhYmxlLmN0aUZvclZh
bHVlKCp1bmxpbmtlZFRhYmxlLCBzdHJJbXBsKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MzAsNiArNzMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQog
ICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNh
bGxlZVRhZ0dQUiwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5h
cmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51
bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVt
UGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAg
ICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5v
ZGUsIGkgKyAxKTsKQEAgLTg4OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlKiBub2RlCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsK
ICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0gewogICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZv
LT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxs
RnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzQsNiArODM0LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1
ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9y
bWF0SlMpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVk
QXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2Vk
QXJnczsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7
CkBAIC05ODUsNyArOTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSog
bm9kZQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlm
IChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKICAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBD
YWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcgKzM5ODUsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAgUmVnaXN0ZXJTZXQg
dXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAgIEpJVFB1dEJ5VmFs
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJ
VCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1c2VkUmVnaXN0
ZXJzLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3Jp
Z2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVzZWRSZWdpc3RlcnMs
CiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwgSlNWYWx1ZVJlZ3M6
OnBheWxvYWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlkR1BSUmVnLCBzdHVi
SW5mb0dQUik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwog
CkBAIC00OTA1LDcgKzQ5MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVB
ZGQoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCku
YmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRl
eCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2Rl
QmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7
Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVEFkZElDKGFy
aXRoUHJvZmlsZSk7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuaml0Q29kZSgpLT5jb21t
b24uYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlv
biA9IG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVu
Y3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZDsKICAgICAKQEAgLTQ5ODksNyArNDk4OSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVN1YihOb2QKICAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxl
Rm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBt
X2ppdC5jb2RlQmxvY2soKS0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRTdWJJQyhhcml0aFByb2Zp
bGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJPcHRp
bWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3Vi
OwogCkBAIC01NTcxLDcgKzU1NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFs
dWVOZWdhdGUoCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBo
KCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpOwogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNv
ZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
OwotICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJQyhh
cml0aFByb2ZpbGUpOworICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmppdENvZGUoKS0+Y29t
bW9uLmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rp
b24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGlu
Z0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGU7CiAgICAgY29tcGlsZU1hdGhJQyhub2Rl
LCBuZWdJQywgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwpAQCAt
NTgxNSw3ICs1ODE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTXVsKE5v
ZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsK
ICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2Nr
LT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAg
IEpJVE11bElDKiBtdWxJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRNdWxJQyhhcml0aFBy
b2ZpbGUpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFk
ZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBv
cGVyYXRpb25WYWx1ZU11bE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
ID0gb3BlcmF0aW9uVmFsdWVNdWw7CiAKQEAgLTE0NzczLDcgKzE0NzczLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29w
ZS5ncHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1Bh
Y2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJ
bmRleCk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0
UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2pp
dC5jb2RlQmxvY2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRl
LCBTYWZlcG9pbnQ6OlJlCiAKICAgICBpZiAodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2lu
TWFwcGluZygpKSB7CiAgICAgICAgIEIzOjpQQ1RvT3JpZ2luTWFwIG9yaWdpbk1hcCA9IHN0YXRl
LnByb2MtPnJlbGVhc2VQQ1RvT3JpZ2luTWFwKCk7Ci0gICAgICAgIGNvZGVCbG9jay0+c2V0UENU
b0NvZGVPcmlnaW5NYXAobWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyKHZtLCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5i
M0NvZGVMaW5rQnVmZmVyKSk7CisgICAgICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5tX3BjVG9D
b2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyKHZtLCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5i
M0NvZGVMaW5rQnVmZmVyKTsKICAgICB9CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5
UHRyVGFnPiBsYWJlbCA9IHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRp
b25PZjxKU0VudHJ5UHRyVGFnPihzdGF0ZS5wcm9jLT5jb2RlKCkuZW50cnlwb2ludExhYmVsKDAp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgsNiArNjgsOCBAQCBwdWJsaWM6CiAgICAgREZHOjpDb21tb25EYXRhKiBk
ZmdDb21tb24oKSBvdmVycmlkZTsKICAgICBzdGF0aWMgcHRyZGlmZl90IGNvbW1vbkRhdGFPZmZz
ZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklUQ29kZSwgY29tbW9uKTsgfQogICAgIHZv
aWQgc2hyaW5rVG9GaXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikgb3ZlcnJpZGU7CisKKyAg
ICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVy
biBjb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQogICAgIAogICAgIERGRzo6Q29t
bW9uRGF0YSBjb21tb247CiAgICAgVmVjdG9yPE9TUkV4aXQ+IG1fb3NyRXhpdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIs
MTQgKzUyLDYgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKIAogICAgIGdyYXBoLnJlZ2lzdGVy
RnJvemVuVmFsdWVzKCk7CiAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHsKLSAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIEFTU0VS
VChjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMuaXNFbXB0eSgpKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShs
b2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpOwotICAgIH0KLSNlbmRpZgotCiAg
ICAgLy8gQ3JlYXRlIHRoZSBlbnRyeXBvaW50LiBOb3RlIHRoYXQgd2UgdXNlIHRoaXMgZW50cnlw
b2ludCB0b3RhbGx5IGRpZmZlcmVudGx5CiAgICAgLy8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Un
cmUgZG9pbmcgT1NSIGVudHJ5IG9yIG5vdC4KICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9j
ayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDcgQEAKICNpbmNsdWRl
ICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUg
IlByb2JlQ29udGV4dC5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVk
ZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgi
CiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKQEAgLTIzMjAsNiArMjMyMSwxOCBAQCBw
cml2YXRlOgogICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVFN1YkdlbmVyYXRvcj4oYXJp
dGhQcm9maWxlLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CiAg
ICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0
b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVEFkZElDKiBhZGRNYXRoSUMoREZHOjpD
b21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4g
Y29tbW9uLmFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2Ft
ZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMg
SklUTXVsSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQ
cm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUTXVsSUMocHJvZmlsZSk7IH0K
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6
dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVROZWdJQyogYWRkTWF0aElDKERGRzo6Q29tbW9u
RGF0YSYgY29tbW9uLCBVbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9u
LmFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJh
dG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5l
cmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUU3Vi
SUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9maWxl
KiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKwogICAg
IHZvaWQgY29tcGlsZVZhbHVlTXVsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7
CkBAIC0yMzkxLDcgKzI0MDQsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAgICAgICAgICAg
ICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBCb3g8
TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRoSUM8
R2VuZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVFVuYXJ5TWF0aElD
PEdlbmVyYXRvcj4qIG1hdGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRDb2Rl
LT5jb21tb24sIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVy
YXRvciA9IEdlbmVyYXRvcihKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLCBKU1ZhbHVlUmVn
cyhwYXJhbXNbMV0uZ3ByKCkpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKIAogICAgICAgICAgICAg
ICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwpAQCAtMjUwMCw3ICsyNTEzLDcg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0
ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+
KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJ
QyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRDb2RlLT5jb21tb24sIGFyaXRoUHJv
ZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihs
ZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLAog
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBKU1ZhbHVl
UmVncyhwYXJhbXNbMl0uZ3ByKCkpLCBwYXJhbXMuZnBTY3JhdGNoKDApLAogICAgICAgICAgICAg
ICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKQEAgLTQz
MTcsNyArNDMzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIg
PSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0Y2go
MCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxK
SVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29kZUJs
b2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4
LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCks
IEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5
R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7
CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9
IHRydWU7CkBAIC0xMDI4NSw2ICsxMDI5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1BbGxvY2F0ZWRBcmdz
OyArK2kpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChW
YWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2Fs
bGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29k
ZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhzZW1hbnRpY05vZGVPcmlnaW4pOwpAQCAtMTA0NDMs
MTMgKzEwNDU3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
LmFyZ3MuYXBwZW5kKHBhcmFtc1sxICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOwogCiAgICAg
ICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bUFyZ3M7CisgICAgICAg
ICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNodWZmbGVE
YXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogCiAgICAgICAg
ICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFk
ZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAg
ICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxG
YXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZd
IHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRh
KHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0
LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICAgICAgfSk7
CkBAIC0xMDc5Miw3ICsxMDgwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
aml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAg
ICAgICAgICAgICB9KTsKQEAgLTExMDczLDcgKzExMDg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxs
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1Qw
LCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3b3JraW5nIGNvcHkpCkBAIC00Miwx
NyArNDIsMjggQEAgY2xhc3MgTWV0YWRhdGEKICAgICBkZWYgc3RydWN0KG9wKQogICAgICAgICBy
ZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVs
ZHMpCisgICAgICAgIGRlZiBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGRO
YW1lcykKKyAgICAgICAgICAgIGZpZWxkTmFtZXMubWFwIGRvIHxmaWVsZE5hbWV8CisgICAgICAg
ICAgICAgICAgIiN7cHJlZml4fXN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVsw
XS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisg
ICAgICAgIGVuZAorCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBm
aWVsZE5hbWVzKQogICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAg
ICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAgICAgICAgICAgICAgICAgICIj
e3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1c
biN7cHJlZml4fX07IgorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tj
b252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZp
eH19OyIKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZp
eH0je3R5cGUudG9fc30gbV8je2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmll
bGROYW1lID0gZmllbGQudG9fcworICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2go
ZmllbGROYW1lKQorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1f
I3tmaWVsZE5hbWV9OyIKICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2lu
KCJcbiIpCiAgICAgICAgIGVuZAogCi0gICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAg
ICAgICAgIiwgQGZpZWxkcykKKyAgICAgICAgZmllbGROYW1lcyA9IFtdCisgICAgICAgIHByZWZp
eCA9ICIgICAgICAgICIKKyAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBm
aWVsZHMsIGZpZWxkTmFtZXMpCisgICAgICAgIGZpZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5l
cmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKIAogICAgICAgICBpbml0
cyA9IG5pbAogICAgICAgICBpZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5l
bXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Nyw2ICszNjcsMjggQEAgdm9p
ZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRQcm9wZXJ0eShHUFJSZQogICAgICAgICByZXN1bHQpOwog
fQogCit2b2lkIEFzc2VtYmx5SGVscGVyczo6c3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1
ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNldCwgR1BSUmVnIHNjcmF0Y2gpCit7CisgICAg
SnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihm
aXJzdE91dE9mTGluZU9mZnNldCkpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhvYmplY3Qs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIG5lZzMyKG9mZnNl
dCk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgIEp1bXAgcmVh
ZHkgPSBqdW1wKCk7CisgICAgCisgICAgaXNJbmxpbmUubGluayh0aGlzKTsKKyAgICBhZGRQdHIo
CisgICAgICAgIFRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+
KHNpemVvZihKU09iamVjdCkpIC0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDxpbnQzMl90Pihm
aXJzdE91dE9mTGluZU9mZnNldCkgLSAyKSAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpKSwKKyAgICAgICAgb2JqZWN0LCBzY3JhdGNoKTsKKyAgICAKKyAgICBy
ZWFkeS5saW5rKHRoaXMpOworICAgIAorICAgIHN0b3JlVmFsdWUodmFsdWUsCisgICAgICAgIEJh
c2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNl
dCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworfQorCiB2b2lkIEFzc2VtYmx5SGVs
cGVyczo6ZW1pdExvYWRTdHJ1Y3R1cmUoVk0mIHZtLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0
ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAg
LTY5OCw4ICs3MjAsMTMgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZl
cwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxs
V2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgaW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwg
Q2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BS
SW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rh
c2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxs
TG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0
clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw4ICsyMzQsOSBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgY2xvYmJlcnMg
b2Zmc2V0LgorICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBjbG9iYmVyIG9mZnNldC4KICAgICB2b2lk
IGxvYWRQcm9wZXJ0eShHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyBy
ZXN1bHQpOworICAgIHZvaWQgc3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVn
IG9iamVjdCwgR1BSUmVnIG9mZnNldCwgR1BSUmVnIHNjcmF0Y2gpOwogCiAgICAgdm9pZCBtb3Zl
VmFsdWVSZWdzKEpTVmFsdWVSZWdzIHNyY1JlZ3MsIEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAg
IHsKQEAgLTE3MjAsNiArMTcyMSw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBl
bWl0VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAg
IHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxM
aW5rSW5mbyopOwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAg
ICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29k
ZS5oIgorCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCisj
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVEFk
ZElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlKSB7IHJldHVybiBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUTXVsSUMq
IE1hdGhJQ0hvbGRlcjo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUpIHsgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRTdWJJQyogTWF0
aElDSG9sZGVyOjphZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkg
eyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE5lZ0lDKiBNYXRoSUNI
b2xkZXI6OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0
dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisKK3ZvaWQgTWF0aElDSG9sZGVyOjph
ZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcikKK3sKKyAgICBtX2FkZElDcyA9IFdURk1v
dmUob3RoZXIubV9hZGRJQ3MpOworICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhlci5tX211bElD
cyk7CisgICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICBtX3N1YklD
cyA9IFdURk1vdmUob3RoZXIubV9zdWJJQ3MpOworfQorCitCYXNlbGluZUpJVENvZGU6OkJhc2Vs
aW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0
clRhZz4gd2l0aEFyaXR5Q2hlY2spCisgICAgOiBEaXJlY3RKSVRDb2RlKFdURk1vdmUoY29kZSks
IHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAsIE1hdGhJQ0hvbGRl
cigpCit7IH0KKworQmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKCkKK3sKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2Vs
aW5lSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFz
ZWxpbmVKSVRDb2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9CYXNlbGluZUpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgorI2luY2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNs
dWRlICJKSVRDb2RlTWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCaW5hcnlBcml0
aFByb2ZpbGU7CitjbGFzcyBVbmFyeUFyaXRoUHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvOworc3RydWN0IFNpbXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1w
VGFibGU7CisKK2NsYXNzIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1h
dGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcik7CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJp
bmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0
aFByb2ZpbGUqKTsKKyAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxl
Kik7CisgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CisKK3By
aXZhdGU6CisgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1f
bXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBt
X3N1YklDczsKK307CisKK2NsYXNzIEpJVENvbnN0YW50UG9vbCB7CitwdWJsaWM6CisgICAgdXNp
bmcgQ29uc3RhbnQgPSB1bnNpZ25lZDsKKworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qg
eworICAgICAgICBHbG9iYWxPYmplY3QsCisgICAgICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAg
U3RydWN0dXJlU3R1YkluZm8sCisgICAgICAgIEZ1bmN0aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rp
b25FeHByLAorICAgIH07CisKKyAgICBzdHJ1Y3QgVmFsdWUgeworICAgICAgICBUeXBlIHR5cGU7
CisgICAgICAgIFBhY2tlZFB0cjx2b2lkPiBwYXlsb2FkOworICAgIH07CisKKyAgICBKSVRDb25z
dGFudFBvb2woKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9v
bCYmKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQb29sJiBvcGVyYXRvcj0oSklUQ29uc3Rh
bnRQb29sJiYpID0gZGVmYXVsdDsKKworICAgIENvbnN0YW50IGFkZChUeXBlIHR5cGUsIHZvaWQq
IHBheWxvYWQgPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9j
b25zdGFudHMuc2l6ZSgpOworICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBl
LCBwYXlsb2FkIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHMuc2l6ZSgpOyB9CisgICAgVmFsdWUg
YXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW2ldOyB9CisKK3ByaXZhdGU6
CisgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50czsKK307CisKKworY2xhc3MgQmFzZWxpbmVK
SVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgeworcHVi
bGljOgorICAgIEJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spOworICAgIH5CYXNlbGluZUpJVENv
ZGUoKSBvdmVycmlkZTsKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAo
KSBvdmVycmlkZSB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CisKKyAgICBC
YWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBU
YWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJs
ZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFw
OworICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CisgICAgYm9vbCBtX2lz
U2hhcmVhYmxlIHsgdHJ1ZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgc2l6ZV90IEJhc2VsaW5lSklUUGxhbjo6
Y29kZVNpemUoKSBjb25zdAogCiBDb21waWxhdGlvblJlc3VsdCBCYXNlbGluZUpJVFBsYW46OmZp
bmFsaXplKCkKIHsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6
ZU9uTWFpblRocmVhZCgpOworICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZp
bmFsaXplT25NYWluVGhyZWFkKG1fY29kZUJsb2NrKTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewog
ICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQo
bV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6Omxv
Z1NoYWRvd0NoaWNrZW5Qcm9sbwogICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CiB9
CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcg
c2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQotewotICAgIHN0b3Jl
UHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7Ci0gICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBjYWxsZWUpKSk7Ci0gICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsK
LSAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRP
RihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJ
bW1QdHIoY29kZUJsb2NrKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihT
aGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOwotfQotCiB2
b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQUlJl
ZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gy
KQogewogICAgIFNoYWRvd0NoaWNrZW4qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2Vu
KCk7CkBAIC03Miw2ICs2MiwyOCBAQCB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hp
Y2tlblBhCiAgICAgc3RvcmVQdHIoc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDFOb25BcmdHUFIp
KTsKIH0KIAorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK3ZvaWQgQ0NhbGxI
ZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tl
dCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBzdG9yZVB0cihHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOworICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVl
KSkpOworICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7CisgICAgc3Rv
cmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKKyAgICBzdG9yZVB0cihjb2RlQmxvY2ssIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBj
b2RlQmxvY2spKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRz
KCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKK30KKwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRo
aXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBs
KHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgp
OworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BS
UmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BS
UmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwg
Y29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwogdm9pZCBDQ2FsbEhlbHBlcnM6OmVtaXRK
SVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gd2hlcmUs
IFNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPiBlbWl0Q29kZSwgY29uc3QgY2hhciog
ZGVzY3JpcHRpb24pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODQw
LDcgKzg0MCwxNCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2Ugb3BlcmF0aW9ucyBjbG9iYmVyIGFs
bCB2b2xhdGlsZSByZWdpc3RlcnMuIFRoZXkgYXNzdW1lIHRoYXQgdGhlcmUgaXMgcm9vbSBvbiB0
aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sgdG8gbWFyc2hhbGwgY2FsbCBhcmd1bWVudHMuCiAgICAg
dm9pZCBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwg
R1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NvcGUpOwotICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQ
UlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CisKK3ByaXZhdGU6CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgdm9pZCBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1Jl
Z3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCk7CitwdWJsaWM6CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
KTsKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNr
ZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxvY2ss
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEg
cG9pbnRlciB0byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQu
CiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDEyIEBAIG5h
bWVzcGFjZSBKU0MgewogCiB2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNh
dmVSZWdpc3RlcnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CisgICAgc2V0dXBDYWxsZWVTYXZl
UmVnaXN0ZXJzKGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwordm9pZCBD
YWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lz
dGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMpCit7CiAgICAgUmVnaXN0ZXJT
ZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycyB7IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSB9OwotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2Nh
dGlvbnMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5zaXplKCk7ICsraSkgewogICAg
ICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5IHsgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChp
KSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZURhdGEuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMSArNDMsMTMg
QEAgcHVibGljOgogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOwogICAgIHVuc2lnbmVk
IG51bUxvY2FscyB7IFVJTlRfTUFYIH07CiAgICAgdW5zaWduZWQgbnVtUGFzc2VkQXJncyB7IFVJ
TlRfTUFYIH07CisgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycyB7IFVJTlRfTUFYIH07IC8vIE9u
IG91ciBtYWNoaW5lIGZyYW1lLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJNYXA8
VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOwogICAgIEdQUlJlZyBudW1iZXJUYWdSZWdpc3RlciB7
IEludmFsaWRHUFJSZWcgfTsKIAogICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENv
ZGVCbG9jayopOworICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lz
dGVyQXRPZmZzZXRMaXN0Kik7CiAjZW5kaWYKICAgICBWYWx1ZVJlY292ZXJ5IGNhbGxlZTsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVy
LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEzICszOCwxMyBAQCBDYWxs
RnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhCiAgICAgOiBtX2ppdChqaXQpCiAg
ICAgLCBtX29sZEZyYW1lKGRhdGEubnVtTG9jYWxzICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUlu
UmVnaXN0ZXJzLCBudWxscHRyKQogICAgICwgbV9uZXdGcmFtZShkYXRhLmFyZ3Muc2l6ZSgpICsg
Q2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCi0gICAgLCBtX2FsaWdu
ZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMKLSAgICAgICAg
KyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoaml0LmNvZGVCbG9jaygpLT5udW1QYXJh
bWV0ZXJzKCkpKQorICAgICwgbV9hbGlnbmVkT2xkRnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEubnVt
UGFyYW1ldGVycykpCiAgICAgLCBtX2FsaWduZWROZXdGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnMKICAgICAgICAgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJh
bWUoZGF0YS5hcmdzLnNpemUoKSkpCiAgICAgLCBtX2ZyYW1lRGVsdGEobV9hbGlnbmVkTmV3RnJh
bWVTaXplIC0gbV9hbGlnbmVkT2xkRnJhbWVTaXplKQogICAgICwgbV9sb2NrZWRSZWdpc3RlcnMo
UmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpKQogICAgICwgbV9udW1QYXNzZWRBcmdzKGRhdGEu
bnVtUGFzc2VkQXJncykKKyAgICAsIG1fbnVtUGFyYW1ldGVycyhkYXRhLm51bVBhcmFtZXRlcnMp
CiB7CiAgICAgLy8gV2UgYXJlIGFsbG93ZWQgYWxsIHRoZSB1c3VhbCByZWdpc3RlcnMuLi4KICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOyApCkBA
IC00MjEsNyArNDIxLDcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclRhaWxD
YQogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIG1f
bmV3RnJhbWVCYXNlKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhcmd1bWVudENvdW50T0sg
PQogICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBt
X25ld0ZyYW1lQmFzZSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
bV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX251bVBhcmFtZXRlcnMpKTsKICAgICBtX2ppdC5hZGQz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkg
LSAxICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpLCBtX25ld0ZyYW1lQmFzZSk7
CiAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtc3RhY2tBbGln
bm1lbnRSZWdpc3RlcnMoKSksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5tdWwzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBtX25ld0ZyYW1lQmFz
ZSwgbV9uZXdGcmFtZUJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiAr
MTA0LDcgQEAgcHVibGljOgogICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBkYXRhOwogICAg
ICAgICBkYXRhLm51bUxvY2FscyA9IG51bUxvY2FscygpOwogICAgICAgICBkYXRhLm51bVBhc3Nl
ZEFyZ3MgPSBtX251bVBhc3NlZEFyZ3M7CisgICAgICAgIGRhdGEubnVtUGFyYW1ldGVycyA9IG1f
bnVtUGFyYW1ldGVyczsKICAgICAgICAgZGF0YS5jYWxsZWUgPSBnZXROZXcoVmlydHVhbFJlZ2lz
dGVyIHsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIH0pLT5yZWNvdmVyeSgpOwogICAgICAgICBkYXRh
LmFyZ3MucmVzaXplKGFyZ0NvdW50KCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFyZ0NvdW50KCk7ICsraSkKQEAgLTc5OCw2ICs3OTksNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
cGVyZm9ybVNhZmVXcml0ZXMoKTsKICAgICAKICAgICB1bnNpZ25lZCBtX251bVBhc3NlZEFyZ3Mg
eyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG1fbnVtUGFyYW1ldGVycyB7IFVJTlRfTUFYIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BCiB9CiAKIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICA6IEpT
SW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQorICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBu
dWxscHRyKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKICAgICAsIG1fbGFi
ZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKICAg
ICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtKQpAQCAtNzcsNiArNzcsOSBAQCBKSVQ6
OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQ
cm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKKyAgICBtX2dsb2JhbE9iamVjdENvbnN0YW50ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0KTsKKyAg
ICBtX3Byb2ZpbGVkQ29kZUJsb2NrID0gY29kZUJsb2NrOworICAgIG1fdW5saW5rZWRDb2RlQmxv
Y2sgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiB9CiAKIEpJVDo6fkpJVCgpCkBA
IC05MCw4ICs5Myw4IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEp1bXBMaXN0IHNraXBPcHRpbWl6ZTsKLSAgICAKLSAgICBz
a2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlv
bnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWJzb2x1dGVBZGRyZXNz
KG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgc2tp
cE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25z
OjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIEFTU0VSVCghbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpKTsKIAogICAgIGNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2
ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50
b3BFbnRyeUZyYW1lKTsKQEAgLTExMywxNSArMTE2LDIwIEBAIHZvaWQgSklUOjplbWl0Tm90aWZ5
V3JpdGUoV2F0Y2hwb2ludFNldCoKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50
ZXJUb1NldCkKK3ZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2lu
dGVyVG9TZXQpCiB7CisgICAgYXV0byBvayA9IGJyYW5jaFRlc3RQdHIoWmVybywgcG9pbnRlclRv
U2V0KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHBvaW50ZXJU
b1NldCwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CisgICAgb2subGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJS
ZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQordm9pZCBKSVQ6OmVtaXRWYXJS
ZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUikK
IHsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZh
clJlYWRPbmx5V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElz
SW52YWxpZGF0ZWQpKSk7CisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNv
bHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3Jh
dGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFyUmVhZE9ubHlXYXRj
aHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRy
dXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmFzc2Vy
dFN0YWNrUG9pbnRlck9mZnNldCgpCkBAIC0xMjksNyArMTM3LDcgQEAgdm9pZCBKSVQ6OmFzc2Vy
dFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
cmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCByZWdUMCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsKQEAg
LTE4MSw2MSArMTg5LDQ0IEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3Ry
dWMKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1dENvZGVC
bG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOworICAg
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVz
dWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4
ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9
IGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1
bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURh
dGFUYWcpLCByZXN1bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAgICBpZiAo
bV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ29u
c3RydWN0KCkpLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
c3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSksIHJl
c3VsdCk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjpvZmZzZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIocmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworCisjaWYgQVNT
RVJUX0VOQUJMRUQKKyAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgewor
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2Rl
QmxvY2soKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIH0pOworI2VuZGlmCit9CisKIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2Up
Ci0gICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAg
ICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fcHJvZmlsZWRDb2RlQmxvY2ssICJcbiIpOwog
ICAgIAogICAgIGppdEFzc2VydFRhZ3NJblBsYWNlKCk7CiAgICAgaml0QXNzZXJ0QXJndW1lbnRD
b3VudFNhbmUoKTsKICAgICAKLSAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV91
bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rp
b25Db3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKIAog
ICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwogCi0gICAgVk0mIHZtID0gbV9jb2RlQmxvY2st
PnZtKCk7CiAgICAgQnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7Ci0gICAgaWYg
KG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRzPFBy
b2dyYW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jaz4odm0pKSkgewotICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9wdGlt
aXphdGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0bHkgb25j
ZS4KLSAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBvdGhlcndp
c2UuIFdoZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8KLSAgICAgICAgLy8gZG8g
T1NSIGVudHJ5IGludG8gdGhlIGJhc2VsaW5lIEpJVCBpbiBhIGxvb3AsIGl0IHdpbGwgcGFzcyBp
biB0aGUgYnl0ZWNvZGUgb2Zmc2V0IGl0Ci0gICAgICAgIC8vIHdhcyBleGVjdXRpbmcgYXQgd2hl
biBpdCBraWNrZWQgb2ZmIG91ciBjb21waWxhdGlvbi4gV2Ugb25seSBuZWVkIHRvIGNvbXBpbGUg
Y29kZSBmb3IKLSAgICAgICAgLy8gYW55dGhpbmcgcmVhY2hhYmxlIGZyb20gdGhhdCBieXRlY29k
ZSBvZmZzZXQuCi0KLSAgICAgICAgLy8gV2Ugb25seSBib3RoZXIgYnVpbGRpbmcgdGhlIGJ5dGVj
b2RlIGdyYXBoIGlmIGl0IGNvdWxkIHNhdmUgdGltZSBhbmQgZXhlY3V0YWJsZQotICAgICAgICAv
LyBtZW1vcnkuIFdlIHBpY2sgYW4gYXJiaXRyYXJ5IG9mZnNldCB3aGVyZSB3ZSBkZWVtIHRoaXMg
aXMgcHJvZml0YWJsZS4KLSAgICAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSA+PSAyMDApIHsKLSAgICAgICAgICAgIC8vIEFzIGEgc2ltcGxpZmljYXRpb24sIHdl
IGRvbid0IGZpbmQgYWxsIGJ5dGVjb2RlIHJhbmdlcyB0aGF0IGFyZSB1bnJlYWNoYWJsZS4KLSAg
ICAgICAgICAgIC8vIEluc3RlYWQsIHdlIGp1c3QgZmluZCB0aGUgbWluaW11bSBieXRlY29kZSBv
ZmZzZXQgdGhhdCBpcyByZWFjaGFibGUsIGFuZAotICAgICAgICAgICAgLy8gY29tcGlsZSBjb2Rl
IGZyb20gdGhhdCBieXRlY29kZSBvZmZzZXQgb253YXJkcy4KLQotICAgICAgICAgICAgQnl0ZWNv
ZGVHcmFwaCBncmFwaChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsK
LSAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFzaWNC
bG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jayk7Ci0KLSAgICAgICAgICAgIEdy
YXBoTm9kZVdvcmtsaXN0PEJ5dGVjb2RlQmFzaWNCbG9jayo+IHdvcmtsaXN0OwotICAgICAgICAg
ICAgc3RhcnRCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgd29y
a2xpc3QucHVzaChibG9jayk7Ci0KLSAgICAgICAgICAgIHdoaWxlIChCeXRlY29kZUJhc2ljQmxv
Y2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKLSAgICAgICAgICAgICAgICBzdGFydEJ5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KHN0ZDo6bWluKHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSwgYmxvY2stPmxlYWRlck9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBzdWNjZXNzb3JJbmRleCA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHdvcmtsaXN0LnB1c2goJmdyYXBoW3N1Y2Nlc3NvckluZGV4XSk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBBbHNvIGFkZCBjYXRjaCBibG9ja3MgZm9yIGJ5dGVjb2RlcyB0aGF0IHRocm93
LgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5k
bGVycygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQgPSBibG9jay0+bGVhZGVyT2Zmc2V0KCk7IGJ5dGVjb2RlT2Zmc2V0IDwgYmxvY2stPmxlYWRl
ck9mZnNldCgpICsgYmxvY2stPnRvdGFsTGVuZ3RoKCk7KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zmc2V0KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBoYW5kbGVyID0gbV9jb2RlQmxvY2st
PmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGdyYXBoLmZpbmRCYXNp
Y0Jsb2NrV2l0aExlYWRlck9mZnNldChoYW5kbGVyLT50YXJnZXQpKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gaW5zdHJ1Y3Rpb24tPnNpemUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKICAg
ICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4LDggKzI2OSw4IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElL
RUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURl
YnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2Rl
TmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNv
ZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNTI3LDcgKzUxOCw3IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJ
bmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQo
bV9ieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1f
Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6
OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBz
bG93IGNvZGUgZm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVi
dWdPZmZzZXQoKSk7CkBAIC01NDUsOCArNTM2LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
U2xvd0Nhc2VzKCkKIAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGlu
ZUpJVEV4ZWN1dGlvbigpKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpD
b250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0
eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9n
TG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2Rl
SURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNjAzLDcgKzU5NCw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9k
ZWxfYnlfdmFsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X2lkKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfc3ViKQotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfZ2V0X2Zyb21fc2NvcGUpCiAjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X3B1dF90b19zY29wZSkKQEAgLTY3NCw1NSArNjY1LDU1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAjZW5kaWYKIH0KIAordm9pZCBKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1l
dGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCkKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHNfbWV0YWRhdGFH
UFIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERh
dGEoKSksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklU
RGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKK30KKwor
dm9pZCBKSVQ6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKQoreworICAgIEJhc2U6OmVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6Q2Fw
YWJpbGl0eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOworICAg
IERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJp
bGl0eUxldmVsKCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RD
b21waWxlOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2Fu
QmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmls
aW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgog
ICAgIGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1p
emVkID0gdHJ1ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAg
ICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgp
KSB7Ci0gICAgY2FzZSBHbG9iYWxDb2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToKLSAgICBjYXNl
IEV2YWxDb2RlOgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQg
PSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAg
IC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRl
Y3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhh
dCBvYnNlcnZhdGlvbi4KLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxp
bmVkICY9IGNhbklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29k
ZUJsb2NrKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5u
dW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmIChtX2NvZGVC
bG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gRml4
ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3
aXRjaEp1bXBUYWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5l
bnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0
b3I8U3RyaW5nSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3
aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9m
VW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVy
T2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAg
ICAgICAgIG1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4o
bV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7
CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
ID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAKLSAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNv
ZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkp
KQotICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPiht
X2NvZGVCbG9jayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgp
IHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVC
YXNlbGluZUZvclByb2ZpbGVyKCkpKSkgeworICAgICAgICAvLyBGSVhNRTogYnVpbGQgYSBkaXNh
c3NlbWJsZXIgb2ZmIG9mIFVubGlua2VkQ29kZUJsb2NrLgorICAgICAgICBtX2Rpc2Fzc2VtYmxl
ciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAg
ICB9CiAgICAgaWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpIHsKKyAg
ICAgICAgLy8gRklYTUU6IGJ1aWxkIHByb2ZpbGVyIGRpc2Fzc2VtYmxlciBvZmYgVW5saW5rZWRD
b2RlQmxvY2suCiAgICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAgICAgICAg
IG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAgICAgICAgbV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAorICAgICAg
ICAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9y
KG1fcHJvZmlsZWRDb2RlQmxvY2spLAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpCYXNlbGlu
ZSkpOwotICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1fY29tcGlsYXRp
b24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1f
cHJvZmlsZWRDb2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFw
QnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkp
OwpAQCAtNzQyLDExICs3MzMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZp
bmFsaXppbgogICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0g
ICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1
bmN0aW9uQ29kZSkKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKCk7
CiAKICAgICBMYWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0
ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7
CisgICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5r
ZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNp
emUgPSAtZnJhbWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9m
ZnNldCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVy
ZmxvdzsKQEAgLTc1NywxNiArNzQ5LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhv
dXRGaW5hbGl6aW4KICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMo
KTsKKyAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFsaXplVGFn
Q2hlY2tSZWdpc3RlcnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50
UG9vbFJlZ2lzdGVycygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1
bmN0aW9uQ29kZSkgeworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAg
ICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7
ICsrYXJndW1lbnQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAmJiAoIW1f
dW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVl
UHJvZmlsZXMoKSArIEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3RvcmFnZSgp
KSwgcmVnVDIpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJn
dW1lbnQgPCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQp
IHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ug
d2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAg
ICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0
byByZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9j
ay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxG
cmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiAr
NzczLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAg
ICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXls
b2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lz
dGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJl
c3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQp
LCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFk
ZHJlc3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2Zp
bGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9j
ay0+aml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJr
ZXIpKQogICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpz
aXplTWFya2VyKSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs3OTUsMjcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJh
dGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tP
dmVyZmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yLCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMg
aXMgMSwgd2UgbmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJp
dHlGaXh1cCA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9j
b2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1
cCkgeworICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBt
X2FyaXR5Q2hlY2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAm
bV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVu
Y3Rpb25Qcm9sb2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2Rl
QmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxv
Y2tUb0ZyYW1lSW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIo
MCksIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGlu
ZWQoKSkpOwogCiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykp
LmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSkpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGlu
dDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0
aW9uKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0
eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29u
c3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxs
QXJpdHlDaGVjaywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJh
bmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7
CkBAIC04MzksNyArODM4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAg
IG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZl
ciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9j
b2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAg
ICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZm
ZXIoKnRoaXMsIG1fdW5saW5rZWRDb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2Vs
aW5lSklULCBlZmZvcnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4NTcsOCBAQCB2
b2lkIEpJVDo6bGluaygpCiAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAgICAgICAg
Y2FzZSBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6
OkNoYXJhY3RlcjogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9j
b2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0
IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVC
bG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBT
aW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNv
cmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07
CkBAIC04NzEsOCArODcwLDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5r
ZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRT
dHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAg
ICAgYXV0byBjdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRh
Zz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAg
ICAgICAgICAgZm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJs
ZS52YWx1ZXMoKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9u
Lm1fYnJhbmNoT2Zmc2V0OwpAQCAtOTA2LDMyICs5MDUsMzUgQEAgdm9pZCBKSVQ6OmxpbmsoKQog
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7
CiAgICAgfQogCi0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZm
ZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7
Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZl
cik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlkcywgcGF0Y2hCdWZmZXIpOwot
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAg
ZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVD
YWNoZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVz
KG1faW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyht
X3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisgICAgYXV0byBmaW5hbGl6ZUlD
cyA9IFsmXSAoYXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdl
bmVyYXRvcnMpIHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQp
OworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0
Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAg
ICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRo
QmVnaW4pOworICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMp
OworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5
SWRzV2l0aFRoaXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXpl
SUNzKG1fcHV0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBm
aW5hbGl6ZUlDcyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsK
KyAgICBmaW5hbGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKIAogICAgIGZvciAoYXV0
byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7Ci0gICAgICAgIENh
bGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwotICAgICAg
ICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKLSAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGls
YXRpb25JbmZvLmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYg
aW5mbyA9ICpjb21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGlu
Zm8uZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
Pihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAg
IEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7
ICsrYnl0ZWNvZGVPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9m
ZnNldF0uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQo
Qnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNF
bnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUo
KSk7CisgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAgZm9yICh1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6
ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9m
ZnNldF0uaXNTZXQoKSkKKyAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRl
Y29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5
UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBpZiAoVU5M
SUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk0MiwzOCBA
QCB2b2lkIEpJVDo6bGluaygpCiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRp
b24pKSB7CisgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgd2UgbWFrZSB0aGUgYnl0ZWNvZGUgcHJv
ZmlsZXIga25vdyBhYm91dCBVbmxpbmtlZENvZGVCbG9jaz8KICAgICAgICAgaWYgKE9wdGlvbnM6
OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKQogICAgICAgICAgICAgbV9kaXNhc3Nl
bWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21waWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIp
OwotICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1f
Y29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CisgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9maWxlZENvZGVCbG9jaywgKm1fY29tcGlsYXRp
b24pOwogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWls
ZE1hcHBpbmcoKSkKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENU
b0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRj
aEJ1ZmZlcik7CiAgICAgCisgICAgLy8gRklYTUU6IE1ha2UgYSB2ZXJzaW9uIG9mIENvZGVCbG9j
a1dpdGhKSVRUeXBlIHRoYXQga25vd3MgYWJvdXQgVW5saW5rZWRDb2RlQmxvY2suCiAgICAgQ29k
ZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRj
aEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAl
cyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVz
IiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTRW50cnlQdHJUYWc+KG1fYXJpdHlDaGVjayk7Ci0gICAgbV9qaXRDb2RlID0gYWRvcHRS
ZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklUKSk7CisgICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVENv
ZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaykpOworCisgICAgbV9qaXRDb2RlLT5tX3VubGlua2Vk
Q2FsbHMgPSBXVEZNb3ZlKG1fdW5saW5rZWRDYWxscyk7CisgICAgbV9qaXRDb2RlLT5tX2V2YWxD
YWxsTGlua0luZm9zID0gV1RGTW92ZShtX2V2YWxDYWxsTGlua0luZm9zKTsKKyAgICBtX2ppdENv
ZGUtPm1fdW5saW5rZWRTdHViSW5mb3MgPSBXVEZNb3ZlKG1fdW5saW5rZWRTdHViSW5mb3MpOwor
ICAgIG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N3aXRjaEp1bXBU
YWJsZXMpOworICAgIG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92
ZShtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0Q29kZS0+bV9qaXRDb2RlTWFw
ID0gaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKTsKKyAgICBtX2ppdENvZGUtPmFkb3B0TWF0
aElDcyhtX21hdGhJQ3MpOworICAgIG1faml0Q29kZS0+bV9jb25zdGFudFBvb2wgPSBXVEZNb3Zl
KG1fY29uc3RhbnRQb29sKTsKKyAgICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBtX2lzU2hh
cmVhYmxlOwogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9n
RigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2Nr
LCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3Vs
dC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRh
TG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5r
ZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQ
dHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9
CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGls
YXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9j
aykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApAQCAt
OTY4LDI1ICs5ODIsMTQgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRo
cgogCiAgICAgbV9saW5rQnVmZmVyLT5ydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MoKTsK
IAotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAgICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KGxvY2tlciwgQ29kZUJs
b2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5rKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkg
ewotICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fY29kZUJsb2NrLT5leGNlcHRpb25I
YW5kbGVyKGkpOwotICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4K
LSAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gbV9jb2RlQmxvY2stPmppdENvZGVNYXAoKS5m
aW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5k
bGVyUHRyVGFnPigpOwotICAgIH0KLQogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwKQotICAg
ICAgICBtX2NvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoV1RGTW92ZShtX3BjVG9Db2Rl
T3JpZ2luTWFwKSk7CisgICAgICAgIG1faml0Q29kZS0+bV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdU
Rk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCk7CiAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVz
UGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8
ZG91YmxlPihtX2ppdENvZGUtPnNpemUoKSkgLwotICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
ZG91YmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKIAotICAg
IG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKG1faml0Q29kZS5yZWxl
YXNlTm9uTnVsbCgpKTsKIAogICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CkBA
IC05OTgsMTEgKzEwMDEsMTEgQEAgc2l6ZV90IEpJVDo6Y29kZVNpemUoKSBjb25zdAogICAgIHJl
dHVybiBtX2xpbmtCdWZmZXItPnNpemUoKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpw
cml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitDb21waWxhdGlvblJl
c3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVD
b21waWxlKCk7CiAgICAgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhlZmZvcnQpOwot
ICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgIHJldHVybiBmaW5hbGl6ZU9u
TWFpblRocmVhZChjb2RlQmxvY2spOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNl
cHRpb25IYW5kbGVycygpCkBAIC0xMDQyLDE4ICsxMDQ1LDI4IEBAIHZvaWQgSklUOjpkb01haW5U
aHJlYWRQcmVwYXJhdGlvbkJlZm9yZUMKICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCkt
PnByb2Nlc3NMb2dFbnRyaWVzKCptX3ZtLCAiUHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24u
Il9zKTsKIH0KIAotdW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtl
ZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2Rl
QmxvY2stPm51bUNhbGxlZUxvY2FscygpKSkpOwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdp
c3RlckNvdW50Rm9yRnJhbWVQb2ludGVyT2Zmc2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxz
KCkgKyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAotaW50
IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWdu
ZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7Cisg
ICAgcmV0dXJuIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJs
b2NrKCkpOworfQorCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jaykgLSAxKS5vZmZzZXQoKTsKIH0KIAoraW50
IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAg
IHJldHVybiBzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9j
aygpKTsKK30KKwogSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBKSVQ6OmNvbXBpbGVUaW1lU3Rh
dHMoKQogewogICAgIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gcmVzdWx0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAKICNkZWZp
bmUgQVNTRVJUX0pJVF9PRkZTRVQoYWN0dWFsLCBleHBlY3RlZCkgQVNTRVJUX1dJVEhfTUVTU0FH
RShhY3R1YWwgPT0gZXhwZWN0ZWQsICJKSVQgT2Zmc2V0IFwiJXNcIiBzaG91bGQgYmUgJWQsIG5v
dCAlZC5cbiIsICNleHBlY3RlZCwgc3RhdGljX2Nhc3Q8aW50PihleHBlY3RlZCksIHN0YXRpY19j
YXN0PGludD4oYWN0dWFsKSk7CiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRl
ICJKSVREaXNhc3NlbWJsZXIuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJKSVRNYXRo
SUMuaCIKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJ
bnRlcmZhY2VKSVQuaCIKKyNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJQQ1RvQ29k
ZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKICNpbmNsdWRlIDx3dGYv
VW5pcXVlUmVmLmg+CkBAIC0xNDksMTQgKzE1MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9
OwogCiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgc2xvd1BhdGhTdGFydDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IGRvbmVMb2NhdGlvbjsKLSAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CisgICAg
ICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKICAgICB9Owog
CiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAKLSAgICBj
bGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VKSVQgewor
ICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHVibGljIEpTSW50ZXJmYWNlSklU
IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEpJVFN0dWJDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUVGh1bmtzOwpAQCAt
MTcxLDYgKzE3Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyB3aWxsIGNvbXByZXNz
IHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hl
ZCBvZmZzZXQuCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1
bHRPZmZzZXQgPSAyNTY7CiAKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNlSklUOwor
CiAgICAgcHVibGljOgogICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0
ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkp
OwogICAgICAgICB+SklUKCk7CkBAIC0xNzgsMjggKzE4MiwzMyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgVk0mIHZtKCkgeyByZXR1cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9CiAKICAg
ICAgICAgdm9pZCBjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9u
RWZmb3J0KTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQo
KTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJs
b2NrKik7CiAgICAgICAgIHNpemVfdCBjb2RlU2l6ZSgpIGNvbnN0OwogCiAgICAgICAgIHZvaWQg
ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgICAgIAogICAgICAg
ICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShlZmZv
cnQpOworICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNl
dCkucHJpdmF0ZUNvbXBpbGUoY29kZUJsb2NrLCBlZmZvcnQpOwogICAgICAgICB9CiAKKyAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9j
ayopOwogICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVC
bG9jayopOworICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtl
ZENvZGVCbG9jayopOwogICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihD
b2RlQmxvY2sqKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSGFzaE1hcDxD
U3RyaW5nLCBTZWNvbmRzPiBjb21waWxlVGltZVN0YXRzKCk7CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBTZWNvbmRzIHRvdGFsQ29tcGlsZVRpbWUoKTsKIAorICAgICAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzX21ldGFkYXRhR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6bWV0
YWRhdGFUYWJsZUdQUjsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19jb25zdGFu
dHNHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUjsKKwogICAgIHByaXZhdGU6CiAgICAgICAg
IHZvaWQgcHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21w
aWxlTGlua1Bhc3MoKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpOwog
ICAgICAgICB2b2lkIGxpbmsoKTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNv
bXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBw
cml2YXRlQ29tcGlsZShDb2RlQmxvY2sqLCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICAg
ICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24g
Y2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+IGZ1bmN0aW9uKQpAQCAtMjIzLDYgKzIzMiwzMiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgorICAgICAgICB2b2lkIGxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXpl
X3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KKyAgICAgICAgdm9pZCBsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXpl
X3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KKyAgICAgICAgdm9pZCBsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0YShWYWx1
ZVR5cGUsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQ
UlJlZywgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAg
IHB1YmxpYzoKKyAgICAgICAgdm9pZCBsb2FkQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnRJbmRl
eCwgR1BSUmVnKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3Qo
R1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lz
dGVyLCBHUFJSZWcpOworCisgICAgICAgIHZvaWQgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblBy
b2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdUMCk7CisKICAgICAgICAgdm9pZCBleGNlcHRpb25D
aGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5kbGVyKTsKQEAgLTI1OCwxNiArMjkzLDE2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6
Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MKICAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxf
dmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
Ci0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0lu
Zm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAg
ICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxs
TGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYs
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwogCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChj
b25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAg
ICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5m
byosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNh
bGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBA
IC0yODcsMTQgKzMyMiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0V3Jp
dGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
cml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCog
b3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAg
IHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKTsKKyAgICAgICAgdm9pZCBlbWl0
V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRo
YXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZh
aWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwot
ICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1
ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpT
VmFsdWVSZWdzKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQ
cm9maWxlJiwgR1BSUmVnKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
VmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBC
eXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BS
UmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAg
ICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVn
cyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBAIC0zMDUsOCArMzQxLDEwIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxk
ZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2
b2lkPgogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBi
eXRlY29kZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
UmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIp
OwotICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklE
IGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hH
UFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVnaXN0ZXJJ
RCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKGNvbnN0IEJ5dGVjb2RlJiwgcHRyZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lz
dGVySUQgc2NyYXRjaEdQUik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAgLTU5Myw3ICs2MzEsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CkBAIC02MTEsNyArNjQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwpAQCAtNjI3LDE0ICs2NjQsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAg
IHZvaWQgZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUpOwotICAg
ICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NU
eXBlKTsKKyAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNz
VHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1p
dE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3Ry
dWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJl
c29sdmVUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9u
bHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVt
aXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKICAgICAg
ICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02NDYs
NyArNjgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0R2V0
Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAg
ICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lk
IGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9pZCBlbWl0
Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAgICB2b2lk
IGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZp
cnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpAQCAtNjU1LDYgKzY5Miw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQg
ZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgICAgICBib29sIGlzS25vd25DZWxsKFZpcnR1
YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxS
ZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lz
dGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVy
KTsKQEAgLTY3NiwxMyArNzE0LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KFZNJik7Ci0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihW
TSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19v
cF9wdXRfdG9fc2NvcGVHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9y
KFZNJik7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9oYW5kbGVy
R2VuZXJhdG9yKFZNJik7CkBAIC02OTYsMzIgKzczMiwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlw
ZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKICAg
ICAgICAgfQogCi0jZGVmaW5lIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29s
dmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwot
ICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5F
UkFUT1IpCi0jdW5kZWYgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9t
U2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKLQotICAgICAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gTW9kdWxlVmFy
IGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gZW1pdCBpbmxpbmUgdGhhbiB1c2UgYSB0
aHVuay4KLSAgICAgICAgICAgIC8vIFJlc29sdmVkQ2xvc3VyZVZhciBiZWNhdXNlIHdlIGRvbid0
IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9wX3Jlc29sdmVfc2NvcGUuCi0gICAgICAgICAgICByZXR1
cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
TW9kdWxlVmFyKTsKLSAgICAgICAgfQotCi0jZGVmaW5lIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9H
RU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5l
cmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfUkVTT0xW
RV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRP
UgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJh
dGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUp
OwotCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1RydXRoeUdlbmVyYXRvcihWTSYpOwog
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKKyAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJvbV9zY29w
ZUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKKyAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0
IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0
aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworCiAgICAgICAgIEp1
bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKQEAgLTc2MCwxMCArNzgw
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBl
bmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2b2lkIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4K
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgQWRkcmVzcywg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVj
b2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7Cisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0
ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAg
ICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhh
c1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjEsMjAgKzg0MSwyMCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRk
cmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7CiAgICAgICAgIH0KIAot
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlw
ZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGUs
IHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6
ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFj
cm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRh
ZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNl
dHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
bWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2Rl
LCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4gQXJncz4K
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgQnl0ZWNv
ZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25U
cmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAg
c2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0LCBhcmdz
Li4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRyZXNzKEdQUkluZm86Om5vbkFy
Z0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNv
ZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7
CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0
eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE5LDI1ICs5MzksMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0
dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5s
aW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAgICAgYm9v
bCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9
CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGllcmVkIGNv
bXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxsIGNvZGUg
Z2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1
cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgZW1pdE1hdGVyaWFsaXplTWV0YWRh
dGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAgICAgICB2b2lkIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMo
KTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAgICAgICAK
LSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRhZGF0
YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jv
c3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KLSAg
ICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBi
eSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQ
dXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwogCiAgICAg
ICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjQsOSArOTc5LDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsK
ICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNo
TWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFz
aE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7
Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0
IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKQEAgLTEwMDAsMTEgKzEwMTIsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJh
dGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAg
ICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVk
T3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAg
Qnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVm
UHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAgICAgICAgQ29kZUJsb2NrKiBtX3Byb2Zp
bGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogbV91
bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKworICAgICAgICBNYXRoSUNIb2xkZXIgbV9t
YXRoSUNzOworICAgICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENvZGU7CisKKyAg
ICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAgICAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZv
PiBtX3VubGlua2VkQ2FsbHM7CisgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxM
aW5rSW5mb3M7CisgICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlu
a2VkU3R1YkluZm9zOworICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dp
dGNoSnVtcFRhYmxlczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAgc3RydWN0IE5vdEFDb2RlQmxvY2sgeyB9
IG1fY29kZUJsb2NrOworCisgICAgICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkg
KzI5MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihv
cDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
YXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMzIwLDcgKzMyMSw4IEBAIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVH
UFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0OCw4IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdUMSk7CiAg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMzcyLDcgKzM3NSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmkKICAgICB9CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50Lgot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Mik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwog
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC01NzMsNyArNTc3LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IAogCiAgICAgZW1pdExvYWQob3Ax
LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVn
VDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIyLDggQEAg
dm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAg
IEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2Zp
bGUpOworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENv
ZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0
ZT4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9tYXRoSUNz
LmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFk
ZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG5lZ2F0ZUlDKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQg
YmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBv
cGVyYW5kIGNhbiBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdh
dGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBv
cGVyYXRpb25Bcml0aE5lZ2F0ZSk7CkBAIC04OTksOCArOTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFBy
b2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tX3Byb2ZpbGVJbmRleCk7Cisg
ICAgSklUQWRkSUMqIGFkZElDID0gbV9tYXRoSUNzLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7
CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElD
KTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQpAQCAtOTQ1
LDEwICs5NTAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAog
ICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRo
aXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2Rl
KSB7CiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFy
aXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJp
dGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgc3JjUmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdz
KTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDE1LDEwICsxMDIxLDExIEBAIHZvaWQgSklUOjplbWl0
TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5k
LmlzQ29uc3QoKSkKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdo
dFJlZ3MpOwogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJ
Qy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7
CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmln
aHRSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwog
ICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhKdW1wcyk7CiAKQEAgLTEwNTUsMTMgKzEwNjIsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRo
SUNTbG93KEpJVFVuYXJ5TWF0aElDPAogI2VuZGlmCiAKICAgICBVbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVw
YXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dK
TWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRo
SUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dK
TWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdz
LCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBhcml0aFByb2Zp
bGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJh
dGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJ
QykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4o
cmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1Q
dHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQ
YXRoRW5kID0gbGFiZWwoKTsKQEAgLTExMjAsMTMgKzExMjgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRN
YXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogI2VuZGlmCiAKICAgICBCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0
aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dK
Sk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0
ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3Bl
cmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdU
NCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9
IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJl
cGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMp
KTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0
Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0
byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTY2LDcgKzExNzUsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkK
LSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCku
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBhcml0aFByb2Zp
bGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEaXY+KCkubV9wcm9maWxlSW5kZXgpOwogCiAgICAgU25pcHBldE9wZXJh
bmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25p
cHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgp
KTsKQEAgLTEyMTEsOCArMTIyMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0
cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJ
VE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BNdWw+KCkubV9wcm9maWxlSW5kZXgpOworICAgIEpJVE11bElDKiBtdWxJ
QyA9IG1fbWF0aElDcy5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJ
Q0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVs
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KQEAgLTEyMjcsOCArMTIzNiw4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRf
b3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3Vi
SUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+
YmluYXJ5QXJpdGhQcm9maWxlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubV9wcm9m
aWxlSW5kZXgpOworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhh
cml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3Ry
dWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3Vi
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgSklUOjpjb21w
aWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50
ZXJSZWdpc3RlciwgcmVnVDEpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRy
ZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRD
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpLCByZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZh
bCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwpAQCAtMjU5LDcg
KzI1OSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKIAogICAg
IGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0VmlydHVhbENhbGwoKm1f
dm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1
dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwog
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9u
ID0gbGFiZWwoKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAg
LTM0MSw3ICszNDEsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IElu
CiAgICAgfQogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM1NCw3ICszNTMsNyBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCisjaW5jbHVkZSAi
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUu
aCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5o
IgpAQCAtNDQsNyArNDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVj
b2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOwogfQogCkBA
IC01MywxOCArNTQsMTggQEAgc3RkOjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgIT0g
b3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwog
ICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2Rl
SUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKK0pJVDo6Y29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50KQogewogICAgIHVuc2lnbmVkIGNoZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIGludCBhcmdDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2ludCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0
ID0gLXN0YXRpY19jYXN0PGludD4oc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNv
ZGUsIGNoZWNrcG9pbnQpKTsKIAorCiAgICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZz
ZXRJbmNsdWRpbmdUaGlzKDApKSwgcmVnVDApOwogICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBhcnJh
eVByb2ZpbGVGb3IobWV0YWRhdGEsIGNoZWNrcG9pbnQpLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0
dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BD
YWxsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJbmZv
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVu
U3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTc4
LDcgKzc5LDcgQEAgc3RkOjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2Fs
bF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgIHx8
IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQorSklUOjpjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1
ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMg
PSBieXRlY29kZS5tX2FyZ3VtZW50czsKQEAgLTkxLDcgKzkyLDggQEAgSklUOjpjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0
aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50czsKICAgICBlbHNlCiAgICAgICAgIHNpemVP
cGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRp
b24oc2l6ZU9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9u
LCByZWdUMCwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBl
bWl0U2V0VmFyYXJnc0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCBy
ZWdUMSk7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBz
aXplb2Yodm9pZCopKSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTAxLDE0
ICsxMDMsMTYgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAg
ICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1l
OwogICAgIGVsc2UKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFy
Z3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdP
ZmZzZXQsIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKHNldHVwT3BlcmF0aW9uLCByZWdUMywgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09m
ZnNldCwgcmVnVDApOwogICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8v
IFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWQz
MihpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7
Ci0gICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7Ci0g
ICAgc3RvcmUzMihyZWdUMiwgaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKSk7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7
CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwgcmVnVDMpOworICAgIEp1bXAgbm90QmlnZ2VzdCA9
IGJyYW5jaDMyKEFib3ZlLCByZWdUMywgcmVnVDIpOworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJl
c3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpKSk7CiAgICAgbm90QmlnZ2VzdC5saW5rKHRoaXMpOwogICAgIAogICAgIC8vIEluaXRp
YWxpemUgJ3RoaXMnLgpAQCAtMTI3LDE2ICsxMzEsMTYgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxs
RXZhbChjb25zdCBPcCYpCiB0ZW1wbGF0ZTw+CiBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNv
bnN0IE9wQ2FsbEV2YWwmIGJ5dGVjb2RlKQogewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFk
ZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3Jl
UHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpj
YWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIp
OwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAg
IGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIApAQCAtMTQ4LDcgKzE1Miw3IEBAIHZvaWQg
SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFs
PigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0lu
Zm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8g
PSBtX2V2YWxDYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwog
ICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGlu
dCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE2MCw0NyBA
QCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogCiAgICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdp
c3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykp
LCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwor
ICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8p
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5r
ZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAog
ICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
T3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwg
dW5zaWduZWQpCi17Citib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5r
ZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkgewog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWls
Q2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNp
Z25lZCBjYWxsTGlua0luZm9JbmRleCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3Qg
T3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0lu
Zm9Db25zdGFudCkKIHsKLSAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAg
ICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZm
bGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0g
ICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1l
U2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0
YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsK
KyAgICBzaHVmZmxlRGF0YS0+bnVtUGFyYW1ldGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJ
bmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KICAg
ICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9m
KFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2Mp
OworICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBz
aHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAg
ICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAogICAgICAgICAgICAg
ICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2Rl
Lm1fYXJndiwKICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwogICAgIH0KLSAgICBzaHVm
ZmxlRGF0YS5jYWxsZWUgPQotICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0
YUZvcm1hdEpTKTsKLSAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9j
b2RlQmxvY2spOwotICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwor
ICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0
YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZS
ZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
CiAKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgq
dGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0gewot
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JU
YWlsQ2FsbCgpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIp
OworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1l
U2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAg
fSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKworICAgIHNodWZmbGVEYXRhLT5zaHJp
bmtUb0ZpdCgpOworICAgIGluZm8tPmZyYW1lU2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVE
YXRhKTsKKwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlv
bjsKICAgICAKQEAgLTIxOCwxNCArMjI2LDI1IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNv
bnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENv
ZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0
ZXIgcmV0dXJuLgogICAgICovCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAg
ICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxv
Y2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGNv
bXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKKworICAgIFVubGlua2VkQ2FsbExpbmtJ
bmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9D
b25zdGFudCA9IFVJTlRfTUFYOworICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsK
KyAgICAgICAgaW5mbyA9IG1fdW5saW5rZWRDYWxscy5hZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBD
YWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsKKworICAgICAgICBpbmZvQ29uc3Rh
bnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0lu
Zm8sIGluZm8pOworCisgICAgICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgp
ID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFw
cGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLnVubGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKKyAgICAg
ICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9D
b25zdGFudCA9IGluZm9Db25zdGFudDsKKyAgICB9CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0
ZWNvZGUsIGluZm9Db25zdGFudCk7CiAKICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4K
LSAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0
cnVjdGlvbik7Ci0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRl
Y29kZUluZGV4KS5iaXRzKCk7CisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihs
b2NhdGlvbkJpdHMpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkgKyBUYWdPZmZzZXQpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVl
LCByZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNhbGxlZS4KQEAgLTIzNCwxNiArMjUzLDEyIEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBpZiAoY29tcGlsZUNh
bGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fY2FsbENv
bXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNl
dFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOwotICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9
IGluZm87Ci0KLSAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlu
a0luZm9JbmRleCkpCisgICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2Fs
bExpbmtJbmZvSW5kZXgsIGluZm9Db25zdGFudCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGxv
YWRDb25zdGFudChpbmZvQ29uc3RhbnQsIHJlZ1QyKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKSB7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olllcywg
WyZdIHsKKyAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2Fs
bERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CiAgICAgICAgICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxT
bG93KHJlZ1QyKTsKICAgICAgICAgfSk7CkBAIC0yNTMsMTMgKzI2OCwxMyBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJl
Z1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICBhdXRvIHNsb3dQYXRocyA9
IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIpOwog
ICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0
aHMpOwogCiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25l
TG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChi
eXRlY29kZSk7CkBAIC0yNzMsMjAgKzI4OCwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNs
b3dDYXNlKGNvbnN0IEluCiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgbV9j
YWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFi
ZWwoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29uc3RhbnQobV9j
YWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFu
dCwgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7
Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0lu
Zm8tPmVtaXRTbG93UGF0aCgqbV92bSwgKnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdERh
dGFJQ1Nsb3dQYXRoKCptX3ZtLCAqdGhpcywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRX
aXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxp
Z25tZW50KCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpA
QCAtMzk1LDE3ICs0MTAsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25z
dCBJbgogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVz
LT5uZXh0OwogICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBtb3ZlKHJlZ1QwLCBiYXNlR1BS
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQo
KTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEdQUik7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAg
ICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KQEAgLTQxNiwxMCArNDQ0LDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdU
MDsKKyAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKGl0ZXJhdG9yR1BSKSk7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5v
dE9iamVjdChpdGVyYXRvckdQUikpOwpAQCAtNDMyLDE5ICs0NTgsMTcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5v
bkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5l
eHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjAsIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIH0gZWxzZQotICAg
ICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0
b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
aWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBtb3ZlKGl0ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVj
b2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogCiAgICAgYXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2Jq
ZWN0LmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9y
UmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQ
UjApOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwogfQpAQCAtNDUyLDcgKzQ3Niw2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0
ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgYXV0byogdHJ5
RmFzdEZ1bmN0aW9uID0gKFsmXSAoKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndp
ZHRoKCkpIHsKICAgICAgICAgY2FzZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9m
YXN0X25hcnJvdzsKQEAgLTQ3MCw1MCArNDkzLDc3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJh
dG9yX25leHQoY29uc3QgSW4KICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWws
IEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQz
Ml90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwogCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0
aGlzKTsKLSAgICBvcjgoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlv
bk1vZGU6OkdlbmVyaWMpKSwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2l0ZXJhdGlvbk1l
dGFkYXRhLnNlZW5Nb2RlcykpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEl0
ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJh
dGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSwgcmVnVDApOworICAgIG9yMzIo
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMp
KSwgcmVnVDApOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJh
dG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlv
bk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSk7CiAgICAgY29tcGlsZU9wQ2FsbDxP
cEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAg
YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2
YWx1ZSB9IEpTT2JqZWN0KSBpbiByZWdUMAogCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDA7
Ci0gICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKLSAgICBHUFJSZWcgZG9uZUdQUiA9
IHJlZ1QxOwotICAgIC8vIGl0ZXJSZXN1bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmly
c3QgZ2V0IGJ5IGlkIGJlbG93LgotICAgIG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOwogCisgICAgY29uc3RleHByIEdQUlJl
ZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CiAgICAgewotICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaXRlclJlc3VsdEdQUik7CisgICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSBiYXNlR1BSKTsKKwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICAgICAg
UmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVncyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKTsKLSAgICAgICAgcHJlc2VydmVkUmVncy5hZGQodmFsdWVHUFIpOworICAgICAg
ICBwcmVzZXJ2ZWRSZWdzLmFkZChpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKLSAgICAg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
dm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRH
UFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgcmVnVDMsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwot
ICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCisgICAg
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsK
KworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9
KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVH
UFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAgICAg
ewotICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKLSAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyID0gcmVnVDM7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9uZUdQUiwg
aXRlckNhbGxSZXN1bHRHUFIpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2Ny
YXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
c2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAg
R1BSUmVnIGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
ZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAg
ICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFs
dWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsKKworICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7
CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGJhc2VHUFIp
OwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3Bl
cnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCByZWdUNCwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNz
VHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
ICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1
ZUdQUiB9KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVl
LCB2YWx1ZUdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpT
VmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHJlc3VsdEdQUik7CiAKICAgICAgICAgaXRlcmF0aW9uRG9uZS5s
aW5rKHRoaXMpOwogICAgIH0KQEAgLTUyNyw1OSArNTc3LDU1IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVy
YXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCisgICAgY29uc3RleHBy
IEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9u
dENsb2JiZXJSZWdpc3RlcjsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZS
ZWcgPSBieXRlY29kZS5tX2RvbmU7Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVn
VDI7CiAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAgICAgSnVtcExpc3Qg
bm90T2JqZWN0OwotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVy
UmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0
ZXJDYWxsUmVzdWx0R1BSKSk7CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50ID0g
dm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAgICAgCiAgICAg
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAgIG5vdE9iamVjdC5h
cHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RPYmpl
Y3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJDYWxsUmVzdWx0R1BSKSk7CiAKLSAgICAg
ICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25B
cmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkb25l
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZv
Ojpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRvbmVWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoZG9uZVZSZWcsIHJlZ1QxKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3ZhbHVlLCByZWdUMCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFy
Z3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkb25lVlJlZywg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKwor
ICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CisK
KyAgICAgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIGRv
bmVHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3Bv
aW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
VGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogICAgIH0KIAog
ICAgIHsgICAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgICAgIEdQUlJlZyBp
dGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50
ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCk7CiAgICAgICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgQ2FsbCBjYWxsOwotICAg
ICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRl
clJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCB2YWx1ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQp
LnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7
CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEp
OworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKICAgICB9Ci0KIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENv
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDExIEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKIAorCiBuYW1lc3BhY2UgSlND
IHsKIAorY2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CisKIG5hbWVzcGFjZSBERkcgewogY2xhc3Mg
Q29tbW9uRGF0YTsKIGNsYXNzIEpJVENvZGU7CkBAIC0xNTksMTAgKzE2MiwxMCBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgYm9vbCB1c2VEYXRhSUMoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKLSAg
ICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBPcHRpb25zOjp1c2VEYXRh
SUNJbk9wdGltaXppbmdKSVQoKTsKICAgICB9CiAKQEAgLTIyMyw2ICsyMjYsOCBAQCBwdWJsaWM6
CiAKICAgICBib29sIGlzU2hhcmVkKCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZUF0dHJpYnV0ZSA9
PSBTaGFyZUF0dHJpYnV0ZTo6U2hhcmVkOyB9CiAKKyAgICB2aXJ0dWFsIFBDVG9Db2RlT3JpZ2lu
TWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKwogcHJpdmF0ZToK
ICAgICBKSVRUeXBlIG1faml0VHlwZTsKICAgICBTaGFyZUF0dHJpYnV0ZSBtX3NoYXJlQXR0cmli
dXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlv
bktleS5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29tcGlsYXRpb25LZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHZv
aWQgSklUQ29tcGlsYXRpb25LZXk6OmR1bXAoUHJpbnRTdHJlYW0KICAgICAgICAgb3V0LnByaW50
KCI8ZW1wdHk+Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgb3V0LnByaW50KCIoQ29t
cGlsZSBvZiAiLCAqbV9wcm9maWxlZEJsb2NrLCAiIHdpdGggIiwgbV9tb2RlLCAiKSIpOworICAg
IG91dC5wcmludCgiKENvbXBpbGUgb2YgIiwgUmF3UG9pbnRlcihtX2NvZGVCbG9jayksICIgd2l0
aCAiLCBtX21vZGUsICIpIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuaAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw1NyArMzAsNTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNs
YXNzIENvZGVCbG9jazsKLWNsYXNzIENvZGVCbG9ja1NldDsKK2NsYXNzIEpTQ2VsbDsKIAogY2xh
c3MgSklUQ29tcGlsYXRpb25LZXkgewogcHVibGljOgogICAgIEpJVENvbXBpbGF0aW9uS2V5KCkK
LSAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2sobnVsbHB0cikKKyAgICAgICAgOiBtX2NvZGVCbG9j
ayhudWxscHRyKQogICAgICAgICAsIG1fbW9kZShKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRD
b21waWxhdGlvbikKICAgICB7CiAgICAgfQogICAgIAogICAgIEpJVENvbXBpbGF0aW9uS2V5KFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2so
bnVsbHB0cikKKyAgICAgICAgOiBtX2NvZGVCbG9jayhudWxscHRyKQogICAgICAgICAsIG1fbW9k
ZShKSVRDb21waWxhdGlvbk1vZGU6OkRGRykKICAgICB7CiAgICAgfQogICAgIAotICAgIEpJVENv
bXBpbGF0aW9uS2V5KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSklUQ29tcGlsYXRpb25Nb2Rl
IG1vZGUpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVkQmxvY2spCisgICAgSklU
Q29tcGlsYXRpb25LZXkoSlNDZWxsKiBwcm9maWxlZEJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGUg
bW9kZSkKKyAgICAgICAgOiBtX2NvZGVCbG9jayhwcm9maWxlZEJsb2NrKQogICAgICAgICAsIG1f
bW9kZShtb2RlKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3Byb2ZpbGVkQmxvY2sgJiYgbV9tb2RlID09IEpJ
VENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOworICAgICAgICByZXR1cm4gIW1f
Y29kZUJsb2NrICYmIG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxh
dGlvbjsKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgIT0g
SklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CisgICAgICAgIHJldHVybiAh
bV9jb2RlQmxvY2sgJiYgbV9tb2RlICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBp
bGF0aW9uOwogICAgIH0KICAgICAKLSAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2soKSBjb25z
dCB7IHJldHVybiBtX3Byb2ZpbGVkQmxvY2s7IH0KICAgICBKSVRDb21waWxhdGlvbk1vZGUgbW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBKSVRDb21waWxhdGlvbktleSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gbV9wcm9maWxlZEJsb2NrID09IG90aGVyLm1fcHJvZmlsZWRCbG9jaworICAgICAgICByZXR1
cm4gbV9jb2RlQmxvY2sgPT0gb3RoZXIubV9jb2RlQmxvY2sKICAgICAgICAgICAgICYmIG1fbW9k
ZSA9PSBvdGhlci5tX21vZGU7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goV1RGOjpQdHJIYXNoPENv
ZGVCbG9jayo+OjpoYXNoKG1fcHJvZmlsZWRCbG9jayksIHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJs
eWluZ190eXBlPEpJVENvbXBpbGF0aW9uTW9kZT46OnR5cGU+KG1fbW9kZSkpOworICAgICAgICBy
ZXR1cm4gV1RGOjpwYWlySW50SGFzaChXVEY6OlB0ckhhc2g8SlNDZWxsKj46Omhhc2gobV9jb2Rl
QmxvY2spLCBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxKSVRDb21waWxhdGlvbk1v
ZGU+Ojp0eXBlPihtX21vZGUpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7
CisgICAgLy8gRWl0aGVyIENvZGVCbG9jayogb3IgVW5saW5rZWRDb2RlQmxvY2sqIGZvciBiYXNs
ZWxpbmUgSklULgorICAgIEpTQ2VsbCogbV9jb2RlQmxvY2s7CiAgICAgSklUQ29tcGlsYXRpb25N
b2RlIG1fbW9kZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSW5saW5lQWNj
ZXNzLmgiCisjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKQEAgLTQ2LDEwICs0Nyw5IEBAIHN0YXRpYyBTdHJ1
Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmYKIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlw
ZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUs
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycykKLSAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAsIG1faml0VHlwZShqaXRU
eXBlKQorICAgIDogbV9qaXRUeXBlKGppdFR5cGUpCiB7Ci0gICAgbV9zdHViSW5mbyA9IG1fY29k
ZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4p
IDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5mbyA9IGNvZGVCbG9jayA/IGNvZGVC
bG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1Yklu
Zm8oKTsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGU7CiAKICAgICBt
X3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyczsKQEAgLTU5LDcgKzU5LDYg
QEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgTGlua0J1ZmZl
ciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRT
dHViUm91dGluZVB0clRhZz4gc3RhcnQpCiB7CiAgICAgbV9zdHViSW5mby0+c3RhcnQgPSBzdGFy
dDsKLQogICAgIG1fc3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IGZhc3RQYXRoLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4obV9kb25lKTsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KG1faml0VHlwZSkpCkBAIC02Nyw2ICs2NiwxNSBAQCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yOjpmaW5hbGl6ZSgKICAgICBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBz
bG93UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3Nsb3dQYXRoQmVnaW4p
OwogfQogCit2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9H
UFIpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJ
VENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJ
bmZvLCBzdHViSW5mb0dQUik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHVi
Um91dGluZVB0clRhZyk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRH
ZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJ
VFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1
YkluZm9HUFIpCkBAIC0xMTAsNyArMTE4LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0
QnlJZEdlbmVyYXRvcgogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUs
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1Yklu
Zm9HUFIsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29k
ZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgYWNjZXNzVHlwZSwgdXNlZFJl
Z2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQotICAgICwgbV9pc0xlbmd0aEFjY2Vz
cyhwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxl
bmd0aC5pbXBsKCkpCisgICAgLCBtX2lzTGVuZ3RoQWNjZXNzKGNvZGVCbG9jayAmJiBwcm9wZXJ0
eU5hbWUudWlkKCkgPT0gY29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBs
KCkpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUudGFn
R1BSKCkpOwogfQpAQCAtMTIwLDYgKzEyOCwzNSBAQCB2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6
OmdlbmVyYXRlRmFzdFBhCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgbV9pc0xlbmd0aEFj
Y2VzcyA/IElubGluZUFjY2Vzczo6c2l6ZUZvckxlbmd0aEFjY2VzcygpIDogSW5saW5lQWNjZXNz
OjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGdlbmVyYXRlR2V0
QnlJZElubGluZUFjY2VzcyhKSVQmIGppdCwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgYmFz
ZSwgR1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyByZXN1bHQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lw
SW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0
Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmxvYWQzMihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQubG9hZFByb3BlcnR5KGJh
c2UsIHNjcmF0Y2gsIEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOworICAgIGF1dG8gZmluaXNoZWQg
PSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGpp
dC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmlu
aXNoZWQubGluaygmaml0KTsKK30KKwordm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJS
ZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlD
KG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0Lmxv
YWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGdlbmVyYXRlR2V0QnlJZElu
bGluZUFjY2VzcyhqaXQsIHN0dWJJbmZvR1BSLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2UsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpyZXN1bHQpOworCisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKKwogSklU
R2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IoCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycywKICAgICBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyB2YWx1ZSwgSlNW
YWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzdHViSW5mb0dQUikK
QEAgLTEzOCw2ICsxNzUsMTggQEAgdm9pZCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6Omdl
bmVyYQogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclBy
b3BlcnR5QWNjZXNzKCkpOwogfQogCit2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5m
bywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVz
ZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAg
IGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBnZW5lcmF0ZUdl
dEJ5SWRJbmxpbmVBY2Nlc3Moaml0LCBzdHViSW5mb0dQUiwgQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzY3Jh
dGNoLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIG1f
ZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlk
R2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJl
Z3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNj
cmF0Y2gsIApAQCAtMTQ5LDYgKzE5OCwzNCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRC
eUlkR2VuZXJhdG9yCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNo
KTsKIH0KIAordm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOwor
CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHVi
SW5mbywgc3R1YkluZm9HUFIpOworCisgICAgR1BSUmVnIGJhc2UgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnNjcmF0Y2g7CisgICAgR1BSUmVnIHNjcmF0Y2gyID0gQmFzZWxpbmVQdXRCeUlkUmVn
aXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBHUFJSZWcgdmFsdWUgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnZhbHVlOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAg
aml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJy
YW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNz
QmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkp
LCBzY3JhdGNoKTsKKyAgICBqaXQuc3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB7IHZhbHVlIH0s
IGJhc2UsIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKKyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAo
KTsKKworICAgIHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsKKyAgICBqaXQuY2FsbChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmso
JmppdCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIHZvaWQgSklUUHV0QnlJZEdl
bmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQogewogICAgIGdl
bmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5UmVwbGFj
ZSgpKTsKQEAgLTMwMCw2ICszNzcsMzIgQEAgdm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVy
YXRlRmFzdFBhdAogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6
ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCit2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywg
R1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURh
dGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAgIGpp
dC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKworICAgIEdQUlJlZyBiYXNl
ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHJlc3VsdCA9IEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSBCYXNl
bGluZUluQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGF1dG8gc2tpcElubGlu
ZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5ib3hCb29sZWFuKHRy
dWUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVt
cCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5jYWxsKEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGlu
aygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUSW5zdGFuY2VPZkdl
bmVyYXRvcjo6SklUSW5zdGFuY2VPZkdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgcHJvdG90eXBlLCBHUFJSZWcgc3R1Yklu
Zm9HUFIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgor
I2luY2x1ZGUgIkpJVE9wZXJhdGlvblZhbGlkYXRpb24uaCIKICNpbmNsdWRlICJKSVRPcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKQEAg
LTM4LDExICszOSwxMTggQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlm
aWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsK
IGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVudW0gY2xhc3MgSklUVHlw
ZSA6IHVpbnQ4X3Q7CiAKK3N0cnVjdCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNl
bGluZURlbEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2Ug
PSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQ
UkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJ
bmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBC
YXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBs
aW5raW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5
VmFsIFN0dWJJbmZvLgorICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHN0YXRpY19hc3NlcnQo
c3R1YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm8pOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5mbzo6cmVnVDU7Cit9OworCitz
dHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBwcm90byA9IEdQUkluZm86OmFyZ3VtZW50R1BSMzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOworfTsK
Kworc3RydWN0IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVy
dHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQ
UkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGRvbnRDbG9iYmVyUmVn
aXN0ZXIgPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86
OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6
cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJl
Z1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworfTsKKwor
c3RydWN0IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDIgPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QyOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGUgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Q0OworfTsKKwor
c3RydWN0IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYnJhbmQgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChicmFu
ZCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisKIGNsYXNzIEpJ
VElubGluZUNhY2hlR2VuZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICBKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcigpIHsgfQpAQCAtNjIsMTIgKzE3MCwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaW5h
bGl6ZSgKICAgICAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVy
JiBzbG93UGF0aExpbmtCdWZmZXIsCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPiBzdGFydCk7Ci0gICAgCisKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1
YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogbV91bmxpbmtlZFN0
dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKwogcHJv
dGVjdGVkOgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgSklUVHlwZSBtX2ppdFR5
cGU7CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIG1fc3R1YkluZm87CiAKK3B1YmxpYzoKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
bV9kb25lOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Nsb3dQYXRoQmVnaW47CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7CkBAIC05OCw3ICsyMTIsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFs
dWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKK3B1YmxpYzoKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTExMSw2ICsyMjUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVl
LCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUpOwogICAgIAogICAgIHZvaWQgZ2VuZXJh
dGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHVi
SW5mb0dQUik7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzTGVuZ3RoQWNjZXNzOwpAQCAtMTI0
LDYgKzIzOSw3IEBAIHB1YmxpYzoKICAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9y
aWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENh
Y2hlYWJsZUlkZW50aWZpZXIsCiAgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBKU1ZhbHVlUmVn
cyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIAorICAg
IHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJ
bmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQ
YXRoKE1hY3JvQXNzZW1ibGVyJik7CiB9OwogCkBAIC0xMzIsMTAgKzI0OCwxMSBAQCBwdWJsaWM6
CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxT
aXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVu
dGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLAotICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BS
UmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAg
ICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25z
dCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQ
UiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdl
bmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcg
c3R1YkluZm9HUFIpOwogICAgIAogICAgIFZfSklUT3BlcmF0aW9uX0dTc2lKSkMgc2xvd1BhdGhG
dW5jdGlvbigpOwogCkBAIC0xNjMsMTEgKzI4MCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2Vu
ZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpTVmFsdWVS
ZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9z
bG93UGF0aEp1bXA7CiB9OwogCkBAIC0xOTEsOCArMzA2LDYgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJs
ZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yMTYsOCArMzI5LDYgQEAgcHVibGljOgog
CiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yNDEsOCArMzUyLDYgQEAg
cHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAK
LXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9B
c3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yNTUsNiAr
MzY0LDcgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2
YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChN
YWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiB9
OwogCiBjbGFzcyBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTI3Nyw4ICszODcsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xv
d1BhdGhMaW5rQnVmZmVyKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
bV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVt
cDsKIH07CiAKQEAgLTMwMiwxMSArNDEwLDkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2Vu
ZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpTVmFsdWVS
ZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3Jlc3VsdDsKIAotICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1f
c2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzMwLDggKzQzNiw2IEBAIHB1YmxpYzoKICAgICAKICAg
ICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0
Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25z
dGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25z
dGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFz
cmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9
CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxS
ZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGlt
ZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNL
bm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+
Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAgICAgICAgLy8gQWxsIGxpbmsgdGltZSBj
b25zdGFudHMgYXJlIGNlbGxzLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzQ2VsbCgpOwogfQogCiBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
ICAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChzcmMpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0gU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVy
IGVudHJ5KQpAQCAtMTU2LDM2ICsxODEsMzYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeAogI2VuZGlmCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgot
QUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRh
LCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3Qp
CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVl
R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3Mo
cmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9yZShkc3QsIHJl
dHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCiAgICAgcmV0dXJuIGNhbGw7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBk
c3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0
ZXIgZHN0KQogewogICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
dHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1Zh
bHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1
cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJu
VmFsdWVHUFIpOwogI2VuZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93
Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZp
cnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwo
cmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpCiAgICAgICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKIH0KIApAQCAtMjA1LDcgKzIzMCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhh
c0FueVNsb3dDYXNlcygKIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQo
KQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAg
ICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQo
KSArIDEpOwogCiAgICAgYXV0byByZXN1bHQgPSBtX2NoZWNrcG9pbnRMYWJlbHMuYWRkKG1fYnl0
ZWNvZGVJbmRleCwgbGFiZWwoKSk7CkBAIC0yMTUsNyArMjQwLDcgQEAgaW5saW5lIHZvaWQgSklU
OjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dU
b0hvdEZvckNoZWNrcG9pbnQoSnVtcCBqdW1wKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
bV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmlu
ZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNl
dCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBt
X2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwg
bV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byBpdGVyID0gbV9j
aGVja3BvaW50TGFiZWxzLmZpbmQobV9ieXRlY29kZUluZGV4KTsKQEAgLTI5MywyOSArMzE4LDMz
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRDb3VudChBYnN0cmEKIAogQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMp
CiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwo
KSktPmxlbmd0aCgpID09IDE7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCi17
Ci0gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7Ci0KLSAgICAvLyBXZSdyZSBpbiBh
IHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRv
IGEgZGlyZWN0Ci0gICAgLy8gc3RvcmUuCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdG9yZTY0
KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSNlbHNlCi0gICAgRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0gICAgc3RvcmUzMih2YWx1ZS5w
YXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7Ci0gICAgc3RvcmUzMih2
YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOwotI2VuZGlmCi19CisgICAg
aWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
dW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykg
PT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5n
KCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgo
KSA9PSAxOworfQorCisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShW
YWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCisvL3sKKy8vICAg
IEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOworLy8KKy8vICAgIC8vIFdlJ3JlIGluIGEg
c2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8g
YSBkaXJlY3QKKy8vICAgIC8vIHN0b3JlLgorLy8jaWYgVVNFKEpTVkFMVUU2NCkKKy8vICAgIHN0
b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOworLy8jZWxzZQorLy8g
ICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJpdHdpc2VfY2FzdDxFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyAgICBzdG9y
ZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKKy8v
ICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKKy8v
I2VuZGlmCisvL30KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBpbmxpbmUgc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1
ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4gSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9m
aWxlZE9wY29kZShPcCBieXRlY29kZSkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogI2Vsc2UKICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKQEAgLTMyMyw0MSArMzUyLDQyIEBA
IGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWMKIAogaW5saW5lIHZvaWQg
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pIHsgfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWVSZWdzIHZhbHVlKQordGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKIHsKICAg
ICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOworCisgICAgcHRyZGlmZl90IG9mZnNldCA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2Rl
KSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29kZT4obV9ieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKTsKKyAgICBzdG9y
ZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVn
KSk7Ci19CisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKKy8veworLy8gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwor
Ly99CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlc3VsdFJlZykK
K3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgR1BSUmVnIHJlc3VsdFJlZykK
IHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1
bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVn
cyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZSogYXJy
YXlQcm9maWxlLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSwg
UmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYgKHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7
Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0
U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YShzY3JhdGNoR1BS
LCBieXRlY29kZSwgb2Zmc2V0T2ZBcnJheVByb2ZpbGUpOwogICAgIH0KIH0KIAotaW5saW5lIHZv
aWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BS
LCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQordGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBSZWdpc3RlcklEIGNl
bGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2Zp
bGluZygpKSB7Ci0gICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3Rv
cmUzMihzY3JhdGNoR1BSLCBBZGRyZXNzKGFycmF5UHJvZmlsZUdQUiwgQXJyYXlQcm9maWxlOjpv
ZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSkpOwotICAgIH0KKyAgICBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZB
cnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlE
KCksIGNlbGxHUFIsIHNjcmF0Y2hHUFIpOwogfQogCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklU
OjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKQEAgLTM4MCw3ICs0
MTAsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJ
RCB2YWx1ZSkKIHsKICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXIocmVnKTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9v
bCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAg
bG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9
IGVsc2UKICAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKQEAgLTQ5
Niw3ICs1MjYsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0CiAK
IGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdp
c3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgewor
ICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQo
KSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUw
Niw3ICs1MzYsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAK
IGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdp
c3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25v
d25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYg
KHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAg
ICAgICBlbHNlCkBAIC01MTQsMTEgKzU0NCw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3Bl
cmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5p
c0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJf
dCYgY29uc3RhbnQpCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKQEAg
LTU0NCwxMSArNTY5LDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFs
UmUKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAg
ICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgaWYg
KG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2so
c3JjKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBtb3ZlKEltbTY0KEpTVmFsdWU6OmVuY29k
ZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGxvYWRDb2RlQmxv
Y2tDb25zdGFudChzcmMsIGRzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU2Niwx
MSArNTkxLDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0g
ICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJ
bnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0
KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01OTUsNyArNjE1LDcgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3Rl
ciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQorICAg
IGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY1Nyw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJ
VDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBpZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4g
dGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0
cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1
dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQotewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVj
b2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hNYXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkK
LSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRHZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAg
aWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVy
biBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZv
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2Nv
cGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1
cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNf
SU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlP
cCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihi
eXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRo
UHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJv
ZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5
QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJp
dGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQcm9maWxlOworICAgIHJldHVybiBtX3VubGlu
a2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiArNjc4LDYwIEBAIEFMV0FZU19JTkxJTkUgRUNN
QU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICByZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwog
fQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
Ojpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQ
UiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Ynl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5
dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0
IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAg
ICBsb2FkMzIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRh
ZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDgoQWRkcmVzcyhzX21ldGFkYXRhR1BS
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFs
dWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3Jl
OFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNp
emVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIs
IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5
dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTMyKHZh
bHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qg
b2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV91bmxp
bmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUp
ICsgb2Zmc2V0KSwgc19tZXRhZGF0YUdQUiwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6bG9hZENvbnN0YW50KEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY29uc3RhbnRJ
bmRleCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19jb25zdGFudHNH
UFIsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oY29uc3RhbnRJbmRleCkgKiA4KSwgcmVzdWx0KTsK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZEdsb2JhbE9iamVjdChHUFJSZWcgcmVz
dWx0KQoreworICAgIGxvYWRDb25zdGFudChtX2dsb2JhbE9iamVjdENvbnN0YW50LCByZXN1bHQp
OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmly
dHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNT
RVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3Vs
dCwgQ29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVzdWx0KTsK
KyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICog
c2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzEsNyAr
OTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxG
cmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRy
ZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1
bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpOwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0o
Y29uc3QgSW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGlu
YXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRT
aW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxl
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
ICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29k
ZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxp
bmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDI0LDcgKzEw
MjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBl
bmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNl
dCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElU
YWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3ICsxMDQyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUg
Zm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAg
ICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJs
b2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJp
bmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5k
KFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQs
IFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUo
dW5saW5rZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQAogI2luY2x1ZGUg
IlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCisjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKQEAgLTU0LDExICs1NiwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
c3JjOwogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlz
TnVtYmVyKCkpCi0gICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAo
bV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhz
cmMpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7CisgICAgICAgICAgICBzdG9y
ZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtODcsMzcgKzkyLDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25z
dCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6
ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0
dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2Nh
dG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2Nh
dGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJl
Z2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcg
PSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBSZWdpc3Rl
cklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwot
ICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29u
c3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxp
emVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
LSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Ci0g
ICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0
ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9i
amVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0
T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
KyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgZW1pdEFs
bG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9j
YXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7
CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFn
ZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRTbG93Q2Fz
ZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBS
ZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEu
bV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOwor
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZt
KCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BS
KTsKIH0KIApAQCAtMTMxLDcgKzEzNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19o
YXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUs
IHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5o
YXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBi
cmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VW
YWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xG
dW5jdGlvbikpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJl
Z1QwKTsKIApAQCAtMTU0LDMwICsxNTgsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAK
LSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNw
ZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZh
bCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4g
dXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm90b0dQUiA9IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6cHJvdG87CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3RvLCBwcm90b0dQUik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdGhhdCBw
cm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQg
YnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSwgcHJvdG8pOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2
YWx1ZUdQUiwgdmFsdWUpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQ
UiwgcHJvdG8pOwogCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1Qy
LCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDUsCi0gICAg
ICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgcmVzdWx0R1BSLAorICAgICAgICB2YWx1ZUdQ
UiwKKyAgICAgICAgcHJvdG9HUFIsCisgICAgICAgIHN0dWJJbmZvR1BSLAorICAgICAgICBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxLCBCYXNlbGluZUluc3RhbmNlb2ZSZWdp
c3RlcnM6OnNjcmF0Y2gyKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9p
bnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKKwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIApAQCAtMTkyLDE0ICsyMDQsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2YoY29uc3QgSQogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxs
T3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3Mo
R1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCByZWdUMiwgcmVnVDEpOwotICAgIH0gZWxzZQot
ICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVyczo6c3R1YkluZm8gPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWUgPT0gYXJndW1lbnRHUFIyKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG8gPT0g
YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9w
dGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0yNDAsNyArMjUxLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogCiAgICAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAs
IHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAg
LTM4Myw5ICszOTQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24q
CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJH
ZW5lcmF0b3IoVk0mKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJl
c3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQyMiw2IEBAIHZvaWQgSklUOjplbWl0
X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC00MzQsOSArNDQ0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25z
dCAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9mdW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2
NSw4ICs0NzYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHBy
IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRK
dW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNj
cmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwg
dGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZh
bHVlSXNGYWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRk
SnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzQ5
Myw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01
MTksNyArNTMyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Ywog
ICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVx
dWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24g
PSBqdW1wKCk7CiAKQEAgLTU0Myw3ICs1NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251
bGwoY29uc3QgSW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVj
ayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1
bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQp
OwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAg
LTU4MiwxNSArNTk1LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwo
Y28KIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKbmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVl
OwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNv
ZGUubV9zcGVjaWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgp
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0g
ICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICBs
b2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOwor
ICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNvZGUsIE9w
Sm5lcVB0cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOwogICAgIGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC02MjUsOCArNjM2LDEw
IEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qx
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJ
ZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xv
YmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVS
ZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAj
ZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTY0MCw3ICs2NTMsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7
CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNjk1LDcgKzcwOCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7
CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTcxMSw3ICs3MjUs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJVDo6b3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB0aHJvd25W
YWx1ZUdQUiA9IGFyZ3VtZW50R1BSMTsKQEAgLTcyMCw3ICs3MzQsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVT
X1JFR0lTVEVSUyA+IDAKICAgICBqaXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgYXJndW1l
bnRHUFIwKTsKLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXJJbXBsKGFyZ3VtZW50R1BSMCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKGFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwpAQCAtOTA4LDcgKzky
Miw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogfQogCkBAIC05MTgsNyArOTMzLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3Ry
aWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwg
cmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MzEsNyArOTQ3LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydQogICAgIAogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVn
KQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcg
Kzk2Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50Lmxpbmso
dGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTc4LDcgKzk5NCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkp
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdU
MCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk5Myw3ICsxMDA5LDEwIEBAIHZvaWQgSklUOjplbWl0
X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06
OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3Rv
cmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFt
ZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAv
LyBPT1BTOiBUaGlzIGlzbid0IGVsZWdhbnQuIFdoeSBhcmVuJ3QgdGhleSBpbiB0aGUgY2FsbGVl
IHNhdmUgYnVmZmVyLiBJIGd1ZXNzIGJlY2F1c2Ugd2UgY2FuIE9TUiBleGl0IGhlcmU/CisgICAg
ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKIAogICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJF
eGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRp
b24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyAr
MTAzMCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAg
Ly8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0
YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgK
IAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRh
dGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRl
ckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJB
dENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsK
KyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0
Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwog
ICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRo
aXMpOwotICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAg
IGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJv
ZmlsZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4o
cHJvZmlsZSksIHJlZ3MpOwotICAgICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCiB9CiAKQEAgLTEwNTMsOCArMTA2MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNv
ZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRl
c3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNv
bnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxl
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
ICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29k
ZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxp
bmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsx
MDg4LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChT
d2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBT
d2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxl
KHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUs
IHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93
bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRo
VW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1
bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CiB9CiAKQEAgLTEwOTksMjAgKzExMDcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBi
eXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0
Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFi
bGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRj
aFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRj
aFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5r
ZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlU
eXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0
YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1l
bnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2Nr
KCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDAp
OwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1Qw
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8
aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMu
bGluayh0aGlzKTsKQEAgLTExMzMsNyArMTE0Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251
bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBh
cmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRp
YXRlID0ganVtcCgpOwpAQCAtMTE0OCw3ICsxMTU4LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFf
bnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTExNjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNv
bnN0IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwog
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIo
Tm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRl
ID0ganVtcCgpOwpAQCAtMTE4OCwxMiArMTE5NywxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRl
cihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRo
ZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBz
dGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8g
b2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBj
b3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxp
bmtlZENvZGVCbG9jay0+bnVtVmFycygpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
ICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNw
YWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5p
dFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJh
cnJpZXIobV9jb2RlQmxvY2spOworICAgIAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7
CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEyMTIsNyAr
MTIyMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBq
aXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0xMzEwLDIzICsxMzIxLDE5IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1
cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIo
Y2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdU
Mik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlz
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBX
cml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2Fj
aGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0
ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVn
VDA7CkBAIC0xMzQyLDcgKzEzNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpy
YXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRh
UmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkg
KyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJl
KCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2Fk
UHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRD
YWxsZWUoKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2Fs
bGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIo
SlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBo
YXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzNzksOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEz
OTAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJ
bW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcgKzE0MDMsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVn
VDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxNDE0LDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsx
NDI5LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAg
IFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5j
ZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFs
dWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE0MzAsNyArMTQ0Miw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9o
aW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2Nv
ZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsK
KyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0Zv
ckZ1enppbmcoKSAmJiBtX3VubGlua2VkQ29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZv
ckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZtKCku
Z2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZFB0
cihwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2hQdHIo
QmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmlu
aXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xNDQwLDcgKzE0NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAjZWxzZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OwogI2VuZGlmCi0gICAgICAgIG1vdmVWYWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkp
OwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0x
NDUzLDggKzE0NjUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
CiAKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2Fu
QmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQ
b3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNy
ZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2Nr
LT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVzcyhy
ZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQog
fQogCkBAIC0xNTA5LDcgKzE1MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRs
ZVRyYXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTUyMiw3ICsxNTM2LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2No
ZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4
NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTE1NjQsMzQgKzE1NzgsMzYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9y
ZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IGFyZ3Vt
ZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1fdW5s
aW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxs
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQg
SklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9h
ZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2Rl
Lm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbCwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFu
dChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6
Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNF
eGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2Rl
SUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAg
ICB9CiB9CiAKQEAgLTE2MjEsMjMgKzE2MzcsMjQgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhw
ckNvbW1vbihjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1f
c2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJn
dW1lbnRHUFIxKTsKICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9
IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAg
IGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpGdW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90
PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQs
IGFyZ3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAK
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3Bf
bmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09
IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29k
ZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNH
ZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OwogICAgIH0KIH0KIApAQCAtMTY2NCwyOSArMTY4MSwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBi
eXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUs
IHJlZ1QwLCBzaXplKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQUjIp
OworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJh
eTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQ
UjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5
V2l0aFNpemU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAg
ICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmd1bWVudEdQUjIpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogI2Vsc2UKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMik7CiAgICAgZW1pdExvYWQoc2l6ZUluZGV4
LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3Qs
IHJlZ1QzLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApA
QCAtMTY5NCw4ICsxNzEyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3Np
emUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgbV9pc1NoYXJlYWJsZSA9IGZhbHNlOworCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90
eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNv
ZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE3NzcsMjAgKzE3OTcsMjUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQo
bm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZl
IHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBz
aGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdH
UFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVn
IHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgp
LCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgeworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBu
b24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1Qy
OworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJl
Zywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9j
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFk
b3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwg
cmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5k
aWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9s
X2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBtX2lz
U2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlv
biogYmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29k
ZSgqdGhpcyk7CkBAIC0xODYwLDcgKzE4ODUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJn
dW1lbnQoY29uc3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3Mp
OwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE4ODYsNyArMTkxMSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlw
ZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBz
bG93Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFyaXRoUHJv
ZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJDYWNoZWFi
bGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNp
bmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgi
CiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKQEAgLTI4NTUsNyArMjg1Niw3IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3Qg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQg
PSBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIApAQCAtMjg4
MCw3ICsyODgxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAog
ICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29k
ZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBt
aW4pOwogICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoa2V5LmlzSW50MzIoKSkKQEAgLTI5MDMs
NyArMjkwNCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHZvaWQq
IHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJs
b2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5n
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CiAKICAgICBpZiAoa2V5LmlzU3RyaW5nKCkpIHsKICAgICAg
ICAgU3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmluZyhrZXkpLT52YWx1ZShnbG9iYWxPYmplY3Qp
LmltcGwoKTsKQEAgLTI5MTksNyArMjkyMCw2IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25Td2l0Y2gKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0
KTsKIH0KIAotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1ZSwg
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RydWN0aW9uKiBwYykpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMjk3MSw3ICsyOTcxLDYgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdgogCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXNvbHZlZFNjb3BlKTsKIH0KLSNlbmRpZgogCiBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RydWN0aW9uKiBwYykpCiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5MCw5ICsyOTAsNyBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkdldFByCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaENo
YXJXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIGNoYXIq
LCAoVk0qLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1p
bikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRo
VW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBr
ZXksIHNpemVfdCB0YWJsZUluZGV4KSk7Ci0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5l
LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5
dGVjb2RlUEMpKTsKLSNlbmRpZgogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25H
ZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0
cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25QdXRUb1Njb3BlLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiog
Ynl0ZWNvZGVQQykpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDEyIEBAIGF1dG8gSklUUGxhbjo6dGllcigp
IGNvbnN0IC0+IFRpZXIKIAogSklUQ29tcGlsYXRpb25LZXkgSklUUGxhbjo6a2V5KCkKIHsKLSAg
ICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkobV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRp
dmUoKSwgbV9tb2RlKTsKKyAgICBKU0NlbGwqIGNvZGVCbG9jazsKKyAgICBpZiAobV9tb2RlID09
IEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpCisgICAgICAgIGNvZGVCbG9jayA9IG1fY29k
ZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgIGVsc2UKKyAgICAgICAgY29kZUJsb2Nr
ID0gbV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICByZXR1cm4gSklUQ29t
cGlsYXRpb25LZXkoY29kZUJsb2NrLCBtX21vZGUpOwogfQogCiBib29sIEpJVFBsYW46OmlzS25v
d25Ub0JlTGl2ZUFmdGVyR0MoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZh
dGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJl
Z1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5zdHVi
SW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwx
MDIgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5j
b3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewot
ICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAg
ICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRp
ZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJz
KCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOwor
ICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIs
IHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BS
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25H
ZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCBy
ZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNl
R1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKKyAgICAgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJ
bmZvR1BSKTsKKwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQog
ICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAg
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0
UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5
VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkg
ewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAg
aWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRlcikpCisgICAgICAgIHJldHVybjsKKworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0
QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4
KytdOwogCi0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEs
IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BS
Myk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1l
bnRHUFI0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEp
OworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlw
ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1p
emUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4
KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0
ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9
PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJv
cGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcx
IGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVu
dEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9w
ZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsx
NTksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNz
KCk7CkBAIC0xNjAsOCArMTcwLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRH
UFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3Nl
cnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMTg3LDM0ICsxOTcsNDAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0K
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAg
ICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpA
QCAtMjIzLDkgKzIzOSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTIzNSwyNiArMjUzLDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJp
dmF0ZV9uYW1lKGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIg
PT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7
Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRl
TmFtZU9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTI2NCw3ICsyNzYs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQg
bWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFp
bGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlu
bGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1h
eSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7
CkBAIC0zMDAsMjEgKzMxMiwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFu
ZChjb25zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQ
cml2YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKLSAgICBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOworCisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJyYW5kLCBicmFuZEdQUik7Ci0KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BS
KSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBz
dHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9w
cml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0
IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVy
IGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTMyNCwxNyArMzQzLDIyIEBAIHZvaWQgSklUOjplbWl0
X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNo
b3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVf
YnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CisK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNz
R2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNj
ZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBl
KG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0zNDQsMjQgKzM2OCwxOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRp
b25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0
czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlw
ZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hl
Y2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMzcwLDMzICszODgsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFu
ZChjbwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJy
YW5kLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BS
KSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2No
ZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDaGVja1ByaXZhdGVCcmFuZD4oKTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGUpOwor
CiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
cmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIGNh
bGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+
KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0
MzgsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBh
bHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAh
aXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BS
MSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25U
cmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1
bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFt
ZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFu
ZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDM1LDMwICs0NjEsNDIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7Cisg
ICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6
Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJv
ZmlsZUdQUiwgc3R1YkluZm9HUFIpOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHBy
b3BlcnR5KSkKICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDsK
KyAgICBzdHViSW5mby0+cHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsRGly
ZWN0PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5m
by0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00NzQs
MTUgKzUxMiwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsK
ICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKLSAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0
ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgICAgIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKLSAgICAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0Rp
cmVjdCkKQEAgLTQ5OCw3ICs1MzMsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSQogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkg
YXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkg
PyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEsIHJlZ1QyLCBnZW4uc3R1YkluZm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1l
bnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFI0KTsKKyAgICBpZiAoaXNEaXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+
KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBh
cmd1bWVudEdQUjUpOworICAgIGVsc2UKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbDo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAgY2Fs
bE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKT4oQWRk
cmVzcyhhcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50
R1BSMywgYXJndW1lbnRHUFI0LCBhcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtNTEyLDcgKzU1Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7
CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5
X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAg
ICBDYWxsIGNhbGw7CiAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0
KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZSk7CkBAIC01MjMsNyArNTY3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQpAQCAtNTMzLDE4ICs1NzcsMjQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQu
dGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RH
UFIgPSByZWdUNTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgeworICAgICAgICBSZWdpc3RlclNl
dCB1c2VkKEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5LCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZSwgQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5j
b250YWlucyhyZWdUNCkpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDUpKTsK
KyAgICB9CisKIAogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBqaXQubG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7
CkBAIC01NzAsMjAgKzYyMCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1l
KGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0
dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmllbGRQdXRL
aW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0
QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTk0LDggKzY1NSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1l
PigpOwotICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2lu
ZDsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgIEpJVFB1dEJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKQEAg
LTYwMywxMyArNjYzLDE1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1l
KGMKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgYXV0byBvcGVy
YXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZh
dGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6
ZTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgLy8gVGhleSBhcmUgY29uZmln
dXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7Ci0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBnZW4u
c3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKKworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFI0KTsKKyAg
ICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZp
ZWxkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0
cikpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNjIyLDE4ICs2ODQsMTIg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIAogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENh
bGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsK
LSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC02NDMsMTQgKzY5OSwxNCBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IHJlZ1Q0OwogCkBAIC02ODAsNyArNzM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRH
ZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTY4OSw3ICs3NDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0
dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNl
dHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3NTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRl
ciwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIs
IHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJl
Z1QxLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0
ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3Njgs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJf
dCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNzE5LDcgKzc3OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
cHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBh
dHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3LDIzICs3ODgsMzMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5
SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9
IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdU
Mik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1p
dCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmll
ciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC03NTksMTUgKzgzMCwxNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5k
ZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRP
cHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJh
dGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODU0LDE5IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIg
PSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2Rl
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5
X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODA4LDcgKzg3Niw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
QEAgLTg0NSwyMiArOTEzLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9w
ZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1
bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
Z1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
dHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZh
bDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBl
bWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJy
aWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVy
ZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTYy
LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0
aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5t
X2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTg5OSwyNCArOTgwLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0
IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlW
YWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
bkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAg
ICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC05MjYsNyArMTAwMiw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTk2MSwy
MiArMTAzNywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVz
dWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwg
QWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTk4NiwxNCArMTA3MSwxNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Cisg
ICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpPihB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwMDMsMjYgKzEwOTEsMjAgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHBy
b3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcs
IHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xMDMwLDIyICsxMTEyLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZF9kaXJlY3QoY29uc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3Q7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwog
fQogCkBAIC0xMDU0LDE2ICsxMTQ1LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfZGlyZWN0KGMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVy
YXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTY2LDYxIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQ
UjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02
NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwog
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRE
aXJlY3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9p
ZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRD
YWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5W
YWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5W
YWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0
Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEp1bXAgbm90QXJy
YXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0
YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhN
b2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5
SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSnVt
cCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdl
dEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRh
ZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRS
ZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsK
IAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CiAKLSAgICBKSVRHZXRCeUlkV2l0
aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5
SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dD
YXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2ICsxMjI5LDE4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4o
Ynl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3NywyNiArMTI1MCw1NyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMzsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJv
cGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5k
Q2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVH
UFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVH
UFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRX
aXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1Zh
bHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworCisgICAgSklUR2V0QnlJZFdpdGhUaGlz
R2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCkBAIC0xMjA2LDcgKzEzMTAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAg
ICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMjQxLDE2ICsxMzQ1LDE5IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVy
YXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1Qx
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKT4o
Ynl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYw
LDI4ICsxMzY3LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkK
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8v
IGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnRoaXNWYWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAg
fHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BS
MSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywg
cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyOTEsNyArMTM5Miw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTEzMjksMjMgKzE0MzAs
MzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVj
b2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0
Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9u
ZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4g
bG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29k
ZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQg
dGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZS
ZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzdHViSW5mb0dQ
Uiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRL
aW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlJZDsK
KyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtp
bmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29k
ZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAg
ICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJp
ZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsxNDc0LDE4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlk
PigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAgICAKICAgICBKSVRQdXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2Vu
LnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMzc2LDI1
ICsxNDk1LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFy
ZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1Qx
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAg
c3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IGdlbi5zbG93UGF0aEZ1bmN0aW9uKCk7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChnZW4uc2xvd1BhdGhGdW5jdGlvbigpKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTE0MDQsNyArMTUxNyw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE0NDEs
MjAgKzE1NTQsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Ywog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0NjMsMTQgKzE1ODcsMTcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxs
T3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjA3LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
Ly8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5
IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBh
IGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2MzEsMzMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NjYsMTggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlW
YWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5
VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50
R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1p
emUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC0xNTU2LDU5ICsxNjg4LDcwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBh
cmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRH
UFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAg
c3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6
Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0
X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVk
LgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRo
dW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSksIGRlY2x0eXBl
KG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeVZhbE9wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVh
bFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5
cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlP
ckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlwZTsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJVDo6ZW1pdEhhc1ByaXZh
dGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBBU1NFUlQodHlwZSA9
PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVCcmFuZCk7CisgICAgVU5VU0VEX1BBUkFNKGJhc2UpOworICAgIFVOVVNFRF9QQVJBTShw
cm9wZXJ0eSk7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIAog
ICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgr
K107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6
ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdU
MSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0
aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpPihBZGRyZXNzKGFy
Z3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
ZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2MSwy
MSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlP
ckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlP
ckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFz
UHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBl
KG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0
UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVO
YW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZh
dGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTY1Miw3ICsxNzg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19w
cml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAg
IGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUu
bV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDIxNSArMTgwMywxMjcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhh
c1ByaXZhdGVCcmFuZD4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3Qs
IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5
dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hl
Y2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0
aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIHNjcmF0Y2hHUFIp
CiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworCisgICAgbG9hZEdsb2JhbE9i
amVjdChzY3JhdGNoR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNU
X09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgc2Ny
YXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNo
R1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgcmVnVDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQogICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVn
VDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBw
cm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7Ci0gICAgdW5z
aWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKLQotICAgIGF1dG8gZW1p
dENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpT
U2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2Nr
KHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChj
b25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCBy
ZWdUMSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCBy
ZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAg
ICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2Nv
cGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNv
bHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIGRlcHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoK
LSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9u
bWVudC5nZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToK
LSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNv
bHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0
Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAg
IHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVz
b2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0jZWxzZSAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9y
ZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4
cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29w
ZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUg
Z2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVz
b2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwg
cmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAg
ICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVsc2UgewotICAg
ICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5
dGVjb2RlKTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZt
KSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmso
dm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7
CisgICAgICAgIH07CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5
cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBz
dGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAg
Rk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAgICBh
dXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2
bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5r
KHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNv
bHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7CiAgICAgICAgIH07
Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBhdXRvIGdlbmVyaWNS
ZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4g
SklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2Vs
aW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMiKTsKKyAgICAgICAgfTsKKworICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDI7CisgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0
KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7
CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAg
ICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAg
ZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7CisgICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAg
ICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNj
b3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkg
dGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklU
IGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBP
cFJlc29sdmVTY29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQ
UiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSBy
ZWdUNjsgLy8gaW5jb21pbmcKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVn
VDI7IC8vIGluY29taW5nCisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOyAv
LyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdU
NTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgotICAgIGNvbnN0ZXhwciBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNj
b3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxv
Y2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywg
bWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihy
ZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRv
IGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKKyAgICBhdXRvIGRv
VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQ
UlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgIGlmICghbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChn
bG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2Jq
ZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBD
b2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAg
ICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1Qz
KTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMs
IFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JK
RUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwg
cmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJl
c3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9
IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNjb3Bl
R1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKLQotICAgICAg
ICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QxKTsKLSAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29w
LCB0aGlzKTsKLSAgICAgICAgfQotICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRv
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHNjb3BlR1BSID09IHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZMb2NhbFNjb3BlRGVwdGgoKSksIHJlZ1Qx
KTsKKworICAgICAgICBMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOworICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAg
aml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICBqaXQuanVtcCgpLmxp
bmtUbyhsb29wLCAmaml0KTsKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgIH07CiAKICAg
ICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewpAQCAtMTg4
MiwxMiArMTkzMSwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25z
dGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4K
LSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2No
KSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2Jh
bExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKGdsb2Jh
bE9iamVjdEdQUiwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2No
KCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIApAQCAtMTg5NywxMSArMTk0NSwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2Rl
QmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAog
ICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGlj
YWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAg
IGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25t
ZW50KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENsb3N1cmVWYXI6CkBAIC0xOTA5LDcgKzE5NTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgp
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBN
b2R1bGVWYXI6CkBAIC0xOTE5LDgzICsxOTY3LDQ1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29s
dmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7
Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZl
VHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkg
PyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxW
YXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVt
aXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRh
OjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdUMSk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
aml0Lmp1bXAoKSk7CisgICAgICAgICAgICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07
CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5s
aW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIGVtaXRDYXNlKEdsb2Jh
bFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENh
c2UoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsK
IAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAg
YnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAotICAgIHJldCgp
OworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xv
d0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVy
YXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwo
c2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6
OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJl
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9SRVNPTFZF
X1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJh
dG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNl
ZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsg
fTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Nj
b3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJ
TkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpz
bG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVu
ayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50
IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91
dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdp
bmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIAogICAgIC8vIFRoZSBmYXN0IHBhdGggYWxyZWFkeSBwdXNoZWQgdGhlIHJldHVybiBh
ZGRyZXNzLgogI2lmIENQVShYODZfNjQpCkBAIC0yMDM0LDcgKzIwNDQsNiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgcGF0Y2hCdWZmZXIubGluayhleGNl
cHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQ
dHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNvbHZlX3Njb3BlIik7CiB9Ci0jZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3Qp
CiB7CkBAIC0yMDYyLDI3NiArMjA3MSwxMzMgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFy
KFZpcnR1YWxSZWdpcwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSks
IHJlZ1QwKTsKIH0KIAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAg
ICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgp
OwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dElu
Zm8ucmVzb2x2ZVR5cGUoKTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKLSAgICAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAg
ICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUg
c3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxs
eSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4K
LSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVz
dWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2Nv
cGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSkpOwotICAgICAgICAgICAgfSkpOworICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNv
ZGVJbmRleCk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgICAgICAgICBs
b2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJM
RUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRl
clRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkp
OwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGlu
ZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAg
ICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2Fk
NjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBj
YXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZv
ck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgaWYgKHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xv
c3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBj
YXNlIE1vZHVsZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KKyAgICBhdXRvIGNs
b3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6Omdl
bmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9n
ZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2
ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwot
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkg
PyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxW
YXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsK
LSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDAp
OyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGlu
ayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotCi0gICAg
ICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBk
ZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlv
bkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLSNlbHNlIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29k
ZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2Vu
ZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsK
IAotICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7Cisg
ICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpu
dWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9Owog
Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAotICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsKLSAgICAgICAgdWludHB0cl90KiBvcGVyYW5kU2xv
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0g
ICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVy
YW5kU2xvdCksIHJlZ1QwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRh
dGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7
CisgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0
YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0jZGVmaW5lIEdFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNv
bHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3Ig
Z2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKEdFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUikKLSAgICAgICAgfTsKLSN1bmRlZiBHRVRfRlJPTV9TQ09QRV9H
RU5FUkFUT1IKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwog
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLSAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jl
c29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICB9CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgIGlmIChwcm9maWxlZFJl
c29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNs
b3N1cmVWYXJHZW5lcmF0b3IpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0g
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGNvZGUgPSB2bS5nZXRD
VElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICBl
bHNlCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5l
cmF0b3IpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9t
U2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBl
LCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBi
eSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBK
SVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2Vk
Rm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKLQotICAgIHRhZ1JldHVybkFkZHJlc3Mo
KTsKLQotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0
YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCi0gICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9
IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSB7
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgbWV0YWRhdGFTdHJ1Y3R1cmVP
ZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwotICAgIH07CisgICAg
aml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAg
aml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2U7
CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxP
YmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0Ojpv
ZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdU
MywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9p
bnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWws
IEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFy
RnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBs
b2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxv
YWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0g
WyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBsc2hpZnQ2NChU
cnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9w
ZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7Ci0gICAgfTsKLQotICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGly
ZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUg
c3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxs
eSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4K
LQotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAo
dm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwg
cmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJl
Z1QzKTsKKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlv
biBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEds
b2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcg
Zm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgp
KSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRy
KFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0
cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisKKyAgICAgICAgICAgIGppdC5qaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAg
ICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAg
ICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNU
X09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQo
KSksIHJlZ1QxKTsKKwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAg
ICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwg
b2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAg
ICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAg
ICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091
dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRX
aXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091
dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAg
ICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9m
ZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zm
c2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworCisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAg
ICAgICBqaXQubmVnMzIocmVnVDEpOworICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QxLCByZWdUMSk7CisgICAgICAgICAgICBqaXQubG9hZDY0KEJhc2VJbmRleChyZWdUMCwg
cmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2Fz
ZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5k
KSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29w
ZXJhbmQpKSwgcmVnVDMpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIs
IHJlZ1QzKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMyk7CisgICAg
ICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAg
ICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5hZGRQdHIoc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwg
cmVnVDApOworCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAg
ICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNv
bHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM0MSw4NiArMjIw
Nyw2MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAg
IH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVn
VDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJl
c29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEdsb2JhbFByb3Bl
cnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDog
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBp
ZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09
IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2Ugewog
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7
Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1Qw
KTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwgcmVnVDApOwor
ICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVn
VDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRo
aXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIu
bGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAg
ICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxp
bmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1
bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluaygm
aml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluaygmaml0
KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAg
ICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0
Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRv
RW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6
Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQu
c3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJv
ZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKIAotICAgIHJl
dCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8g
c2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVH
ZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxh
YmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9u
TGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dF
VF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUj
I0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1
bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJl
dHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5n
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0
X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAg
Ly8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0
aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdp
c3RlcnM6OmVicCk7CkBAIC0yNDI5LDcgKzIyNzIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAjZW5kaWYKIAogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRG
cm9tU2NvcGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSBy
ZWdUNzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CiAgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIGppdC5zdG9yZTMy
KGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpKTsKIApAQCAtMjQ0OSw3ICsyMjkyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIENhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3Bl
cmF0aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0LmVtaXROb25QYXRj
aGFibGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVz
cyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVt
YmVyVGFnUmVnaXN0ZXIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmls
ZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKIAogI2lmIENQ
VShYODZfNjQpCkBAIC0yNDY5LDg4ICsyMzEyLDc3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1ZmZlci5saW5rKGp1bXBUb0hhbmRsZXIsIENv
ZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxp
bmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBv
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdy
aXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVt
aXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRT
ZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxv
YWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRl
KHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9y
ZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsK
LSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhy
ZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5k
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNv
cGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0g
Z2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3Qg
PSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xv
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAK
LSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBp
bmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZl
VHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
c2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNr
aW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVj
ayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZv
ciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9u
YWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlv
bi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQo
c2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVn
VDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxv
YWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAg
ICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdo
dCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7
Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1Qy
LCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25z
dGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAg
aWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYm
IChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVn
VDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1Qw
KTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKKworICAgICAgICAgICAg
aWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2Fu
J3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0g
ICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAg
ICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
Km9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAp
LCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdU
MSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJh
bmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lz
ZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hw
b2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNv
bnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxv
YWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNl
dE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVX
YXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkp
OworCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBS
ZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisKKyAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9w
ZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChy
ZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAg
ICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOworCiAgICAgICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjU2NCw1OCAr
MjM5Niw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAg
ICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0
UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAot
Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2Fs
VmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0
byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAgICAgICAgaXNHbG9iYWxM
ZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6
Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Cisg
ICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJlVmFyLyBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGlsZSB0aGluZ3MKKyAgICAv
LyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3ZlIHByb3ZlbiB0aGF0IGlz
IHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZhciwKKyAgICAvLyBhbGwg
Q29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgorICAgIC8vIGlmIHRoZSB2
YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0IGlzIGZpcmVkLCB0aGVu
IHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAgIC8vIG1hdHRlciB3aGF0
IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYg
KHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyKQorICAgICAgICBlbWl0
Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5
cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGVtaXRDb2Rl
KENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbHNlIHsKICAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9T
Y29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7CiAgICAgICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBS
ZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
UHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAorICAgICAgICBK
dW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKHRoaXMpOwor
CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7
CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAog
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAKICAgICAgICAgc2tpcFRv
RW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwogICAg
IH0KIH0KIApAQCAtMjYyNCwxOCArMjQ1MCwyMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29s
dmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgIFJlc29s
dmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYgYW55IGxpbmtlZCBDb2Rl
QmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29kZUJsb2NrcyBhcmUgZ3Vh
cmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIuCiAgICAgICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3Bh
dGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAg
ICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3VtZW50R1BSMCwgY3VycmVu
dEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwog
ICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29k
ZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0
ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zm
c2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3ICsyNDgxLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3Rl
cnM6OmVicCk7CkBAIC0yNzAxLDcgKzI1MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVu
dHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpz
dG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwg
cmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3
ICsyNTg4LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkBAIC0yNzY3LDcgKzI1OTUs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRl
eCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdU
MCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjgyMyw3ICsyNjUxLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0bwogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
TmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwpAQCAtMjgzOSwxMSArMjY2
NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiAgICAgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIG1v
ZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2UgaXQgaWYgd2UgcHJvZmlsZSBp
dCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhID09
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgeworICAgIGlmIChi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2VudW1lcmF0b3JNZXRhZGF0
YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKICAgICAg
ICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSByZWdUNDsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBl
bnVtZXJhdG9yR1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3Qz
MihOb25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigofkpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6T3duU3RydWN0dXJlTW9kZSkgJiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0
aW9uTW9kZU1hc2spKSk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRv
ck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpP
d25TdHJ1Y3R1cmVNb2RlKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlOFRvTWV0YWRhdGEo
c2NyYXRjaEdQUiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKKwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBpbmRleEdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2gzMihO
b3RFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSkpOwogCkBAIC0yODgxLDc4ICsyNzE0LDg3IEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3By
b3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1f
ZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CiAKLSAgICBhdXRvIHJlc3VsdEdQ
UiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVFbnVt
ZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJz
OjpzY3JhdGNoMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gQmFzZWxpbmVFbnVt
ZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDM7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5TmFtZSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCBzY3JhdGNoMyk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHByb3BlcnR5R1BSKTsKIAot
ICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRh
ZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRC
eVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHNjcmF0Y2gyKTsK
KyAgICBvcjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7CisgICAgc3RvcmU4VG9NZXRhZGF0YShzY3Jh
dGNoMiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZF
bnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUikpOwogICAg
IC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQgdmFsdWUuCi0gICAgSnVtcCBpc05v
dE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDIsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVN
b2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6R2VuZXJpY01vZGUpKTsKIAogICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDMpOwotICAgIEp1bXAg
c3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVn
VDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgc2NyYXRjaDEpOworICAg
IGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2gyKTsKKyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWws
IHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMyk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgc2NyYXRjaDIpOwogICAgIC8vIElmIGluZGV4IGlzIGxlc3Mg
dGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFu
IGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRl
bmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVn
VDMsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwotCisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3Mg
PSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAg
ICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOworICAgIGxvYWQ2NChCYXNl
SW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkp
OwogCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKICAgICBvdXRPZkxpbmVBY2Nl
c3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMyk7
Ci0gICAgbmVnMzIocmVnVDMpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7
CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIGJhc2VHUFIpOworICAgIHN1YjMyKEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAg
ICBuZWczMihzY3JhdGNoMik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0
Y2gyKTsKICAgICBjb25zdGV4cHIgaW50cHRyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gb2Zm
c2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpICogc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAs
IHJlZ1QzLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwor
ICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1w
KCkpOwogCiAgICAgc3RydWN0dXJlTWlzbWF0Y2gubGluayh0aGlzKTsKLSAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1v
ZGVTdHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSk7Cisg
ICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgYnl0ZWNvZGUsIE9w
RW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEo
KSk7CiAKICAgICBpc05vdE93blN0cnVjdHVyZU1vZGUubGluayh0aGlzKTsKLSAgICBKdW1wIGlz
Tm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKKyAgICBKdW1wIGlzTm90SW5kZXhl
ZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKICAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcg
d2l0aCB0aGUgaW5kZXguCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHByb3BlcnR5R1BSKTsKIAogICAg
IGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaDEpOwogCiAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dEJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4p
OwogCiAgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5NjEsMTAgKzI4MDMsOSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfCiAgICAgZ2VuZXJhdGVHZXRCeVZhbFNs
b3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0
ZXIpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1Bh
dGhGdW5jdGlvblR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUlt
cGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlw
ZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQordGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQg
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVu
Y3Rpb25UeXBlIGdlbmVyYWxDYXNlKQogewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKQEAg
LTI5NzMsNyArMjgxNCw5IEBAIHZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5
SW0KICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG1vZGUsIHJlZ1QwKTsKLSAgICBvcjgocmVnVDAsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEu
bV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwg
Qnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCByZWdUMSk7
CisgICAgb3IzMihyZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDEsIGJ5
dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkp
OwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAK
QEAgLTMwNjIsNiArMjkwNSwxMyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCit2
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpCit7CisgICAgSnVtcCBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2VsZWN0
U2NyYXRjaEdQUihvd25lcikpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsOSArMjM2LDkgQEAgc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgaWYgKGlzSlNBcnJheShi
YXNlQ2VsbCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0g
Q2FjaGVUeXBlOjpVbnNldAogICAgICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkg
PT0gYmFzZUNlbGwKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hl
YWJsZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVu
Z3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgewog
Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNl
Q2VsbCkpOworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganND
YXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJh
dGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0
aW9uKGtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxl
bmd0aChsb2NrZXIpOwpAQCAtMjQ5LDggKzI0OSw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6
Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoLCBwcm9wZXJ0eU5h
bWUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VDZWxsKSkgewogICAg
ICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0
Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdM
ZW5ndGgoc3R1YkluZm8pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29k
ZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pOwor
ICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVu
Z3RoKGNvZGVCbG9jaywgc3R1YkluZm8pKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2Vu
ZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29k
ZUJsb2NrLCBzdHViSW5mbyk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2Rl
SW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2lu
ZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFN0cmluZ0xlbmd0aChs
b2NrZXIpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZUdldEJ5KEoKICAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKICAg
ICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkKICAgICAgICAgICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94eSkgewotICAgICAgICAg
ICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVT
ZWxmUHJvcGVydHlBY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSk7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1
Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0
QnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsK
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JS
ZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpAQCAtNzMxLDExICs3MzEsMTEg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnkoSgogICAgICAgICAgICAg
ICAgIG9sZFN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNh
Y2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdHViSW5m
by5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYm
IElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBz
bG90LmNhY2hlZE9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6
OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90
LmNhY2hlZE9mZnNldCgpKQogICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5u
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICAgICAgICAgJiYgIWlz
UHJveHkpIHsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wg
Z2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAg
ICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBvbGRTdHJ1
Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2Vu
ZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2
ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNs
b3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQ
dXRCeUZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOwpAQCAtMTEzMiw3ICsxMTMy
LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAg
ICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZQogICAgICAgICAgICAgICAgICYmICFzbG90
LndhdGNocG9pbnRTZXQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVk
Q29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3Moc3R1YkluZm8s
IHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0g
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBz
dHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAg
ICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFj
ZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0
YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxs
KFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYo
T3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlu
a0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlz
YXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxM
aW5rSW5mbykpOwogICAgIAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0
clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDI0ICs0Myw2IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9y
KFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0gICAgaml0LmNvcHlDYWxsZWVT
YXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwotCi0g
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7Ci0gICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLQotICAgIEND
YWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwot
Ci0gICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwotCi0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0
cmFDVElUaHVuayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOwotICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRs
ZUV4Y2VwdGlvbiIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcihWTSYgdm0pCiB7
CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKQEAgLTc3LDI0ICs1OSw2IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGEKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9s
bGJhY2siKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BU
aHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsK
LSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQuYWRkUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2
UmVnaXN0ZXJzOjplc3ApOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC5wb3BQYWlyKENDYWxs
SGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVy
KTsKLSNlbmRpZgotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5q
dW1wKCk7Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBhdXRvIGhhbmRsZXIg
PSB2bS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZm
ZXIubGluayhjb250aW51YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCAicG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlv
biIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpAQCAtMTM3
LDYgKzEwMSw0MiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoCiAK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQorewor
ICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisKKyAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworCisgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisKKyAgICBqaXQuanVt
cFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7CisgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uIik7
Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFj
a1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKKworI2lmIENQVShYODZfNjQpCisgICAgaml0LmFkZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVy
czo6ZXNwKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6
OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZW5k
aWYKKworICAgIENDYWxsSGVscGVyczo6SnVtcCBjb250aW51YXRpb24gPSBqaXQuanVtcCgpOwor
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0
Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOworICAgIHBhdGNoQnVmZmVyLmxpbmso
Y29udGludWF0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVu
a1B0clRhZywgInBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsKK30K
KwogdGVtcGxhdGU8dHlwZW5hbWUgVGFnVHlwZT4KIGlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFs
aWRhdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIsIFRhZ1R5cGUgdGFn
KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsMTIgQEAgY2xhc3MgVk07CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJv
bGxiYWNrR2VuZXJhdG9yKFZNJik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0m
KTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2Vy
dmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAi
Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKKyNp
bmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3Bl
LmgiCkBAIC0zNzAsMTMgKzM3MSwyMiBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1
cmlzdGljcyhWCiAgICAgCiAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVk
aWN0aW9ucygpOwogCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJh
c2VsaW5lSklUKSB7CisgICAgICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGlu
ZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5l
Q29kZSkgeworICAgICAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5l
Q29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CisgICAgICAgICAg
ICBjb2RlQmxvY2stPmppdE5leHRJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhy
ZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2Nr
LCAiZGVsYXlKSVRDb21waWxlIiwgKCJ0aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAi
LCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5J
ZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlm
dGVkLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEpJVFdvcmts
aXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmts
aXN0KCkuY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNv
ZGVCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkpOworICAgIEpJVFdvcmtsaXN0
OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0
KCkuY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVC
bG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkp
OwogCiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
KSB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2Rl
IHdhcyBhbHJlYWR5IGNvbXBpbGVkLiIpOwpAQCAtNDY2LDggKzQ3NiwxMCBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChsb29wX29zcikKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFy
bHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBjb2RlQmxvY2stPmxvb3BIaW50c0Fy
ZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCog
cHRyID0gdm0uZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKHBjKTsKICAgICAgICAgKnB0ciAr
PSBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKS5tX2FjdGl2ZVRocmVzaG9sZDsKLSAg
ICAgICAgaWYgKCpwdHIgPj0gT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xp
bWl0KCkpCisgICAgICAgIGlmICgqcHRyID49IE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmlu
aXRlTG9vcHNMaW1pdCgpKSB7CisgICAgICAgICAgICBjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEo
Q29uY3VycmVudEpTTG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKSk7IC8vIFdlJ3JlIHJldHVybmlu
ZyB0byB0aGUgT1NSIGVudHJ5IGNvZGUgaGVyZSwgd2hpY2ggZXhwZWN0cyB0aGF0IG1faml0RGF0
YSBpcyBub3QgbnVsbC4KICAgICAgICAgICAgIExMSU5UX1JFVFVSTl9UV08oTExJbnQ6OmZ1enpl
clJldHVybkVhcmx5RnJvbUxvb3BIaW50RW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpLCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7CisgICAgICAgIH0KICAgICB9CiAgICAg
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0
cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwg
aW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1l
JSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJl
dHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAg
ICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVu
YXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFk
YXRhKHQxLCB0MikKICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFn
T2Zmc2V0W2NmciwgdDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBA
IG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRh
ZGF0YSBpbiB0MSwgc3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5z
bG93KQogICAgICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAg
ICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAg
ICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVu
ZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFy
aXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjpt
X2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0K
ICAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRh
ZywgLm9wTmVnYXRlU3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRl
U2xvdwogICAgIG5lZ2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50
KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQs
IHQ1LCB0MykKICAgICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoK
ICAgICBiaWEgdDEsIExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAw
MCwgdDEKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVw
ZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0
MykKICAgICByZXR1cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEw
Nyw2IEBAIGVuZCkKIAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNv
ZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAg
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBh
cml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6
TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVd
Ci0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1f
cmhzLCB0MikKICAgICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIElu
dDMyVGFnLCAub3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdElu
dAotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRh
dGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1
LCB0MikKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFu
ZFN0b3JlKHQzLCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEz
NiwxMiArMTEyNCwxMiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9w
CiAgICAgICAgIGJpYSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2Vz
dFRhZywgLm9wMU5vdEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5z
bG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJl
ckludCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90
SW50UmVhZHkKICAgICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMs
IGZ0MQotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAg
ICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVO
dW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldCht
X2RzdCwgdDEpCiAgICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBA
QCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmly
c3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRl
ZmluaXRlbHkgbm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExv
d2VzdFRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJl
cikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQ
cm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAg
ZmlpMmQgdDEsIHQzLCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20JKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCAr
NDQxLDEzIEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1v
dmUgUEMsIGExCiAgICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAg
ICAgYnRweiByMCwgLnJlY292ZXIKLQogICAgICAgICAgICAgbW92ZSByMSwgc3AKKworICAgICAg
ICAgICAgIyBCYXNlbGluZSB1c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29u
c3RhbnQgcG9vbC4KKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAg
ICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2ppdERhdGFbUEJdLCBQQgorICAgICAgICAgICAgbG9h
ZHAgQ29kZUJsb2NrOjpKSVREYXRhOjptX2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAg
ICAgICAgIGlmIEFSTTY0RQogICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3Rl
eHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29w
T1NSRW50cnkpICogUHRyU2l6ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZl
VG9KSVRHYXRlUHRyVGFnICMgSlNFbnRyeVB0clRhZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0
cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bj
b2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFBy
b2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAg
ICAgZW5kCi0KICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2Nmciwg
dDAsIDhdLCB0MQogICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBA
QCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVn
ZXJPcGVyYXRpb24odDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAg
ICBzdG9yZXEgdDEsIFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJp
dGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1
Y3QsIEFyaXRoUHJvZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAu
c2xvdzoKQEAgLTExMzQsMTEgKzExMzUsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRh
dGEsIHJldHVybikKLQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAg
ICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJp
dGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkK
ICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0
MSwgdDIpCkBAIC0xMTQ2LDEyICsxMTQyLDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVn
YXRlLCBPcE5lZ2F0ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAg
ICAgbmVnaSB0MwogICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxl
KEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwg
QXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50
OgogICAgIGJ0cXogdDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAw
MDAwMDAwMDAwMDAwLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1i
ZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51
bWJlciwgdDEsIHQyKQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQs
MTAgKzExNjAsNiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAg
ICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFk
YXRhKHQ1LCB0MCkKIAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBv
cmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFy
eUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9y
aHMsIHQwKQogICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHNpemUsIHQwLCB0MSkKQEAgLTExNzcsNyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9w
Q3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAg
ICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAg
IHByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFBy
b2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAg
ZGlzcGF0Y2goKQogCiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFj
cm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBu
dW1iZXJUYWcsIC5zbG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJk
IHQxLCBmdDEKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAg
ICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51
bWJlck51bWJlciwgdDUsIHQyKQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9w
MU5vdEludE9wMkludDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisg
ICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmls
ZU51bWJlckludCwgdDUsIHQyKQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdElu
dFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNCw5ICsxMTk2LDkgQEAgbWFj
cm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogCiAgICAgLm9wMk5vdEludDoK
ICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25k
IGlzIGRlZmluaXRlbHkgbm90LgotICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6
IHQxLCBudW1iZXJUYWcsIC5zbG93Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVt
YmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0
aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAg
ICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEy
ZCB0MSwgZnQxCkBAIC0xNTE4LDcgKzE1MTAsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dl
dF9ieV9pZF9kaXJlY3QsCiBlbmQpCiAKICMgVGhlIGJhc2Ugb2JqZWN0IGlzIGV4cGVjdGVkIGlu
IHQzCi1tYWNybyBwZXJmb3JtR2V0QnlJREhlbHBlcihvcGNvZGVTdHJ1Y3QsIG1vZGVNZXRhZGF0
YU5hbWUsIHZhbHVlUHJvZmlsZU5hbWUsIHNsb3dMYWJlbCwgc2l6ZSwgbWV0YWRhdGEsIHJldHVy
bikKK21hY3JvIHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwgbW9kZU1ldGFkYXRh
TmFtZSwgdmFsdWVQcm9maWxlTmFtZSwgc2xvd0xhYmVsLCBzaXplLCBtZXRhZGF0YSwgcmV0dXJu
LCBkb0FycmF5UHJvZmlsZSkKICAgICBtZXRhZGF0YSh0MiwgdDEpCiAgICAgbG9hZGIgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRhTmFtZSUubW9kZVt0Ml0sIHQxCiAKQEAg
LTE1NDYsNyArMTUzOCw3IEBAIG1hY3JvIHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVj
dCwKIC5vcEdldEJ5SWRBcnJheUxlbmd0aDoKICAgICBiYm5lcSB0MSwgY29uc3RleHByIEdldEJ5
SWRNb2RlOjpBcnJheUxlbmd0aCwgLm9wR2V0QnlJZFVuc2V0CiAgICAgbW92ZSB0MywgdDAKLSAg
ICBhcnJheVByb2ZpbGUoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRhTmFt
ZSUuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgdDAsIHQyLCB0NSkKKyAgICBkb0FycmF5
UHJvZmlsZSh0MCwgdDIsIHQ1LCB0MSkKICAgICBidGl6IHQwLCBJc0FycmF5LCBzbG93TGFiZWwK
ICAgICBidGl6IHQwLCBJbmRleGluZ1NoYXBlTWFzaywgc2xvd0xhYmVsCiAgICAgbG9hZENhZ2Vk
SlNWYWx1ZShKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MCwgdDEpCkBAIC0xNTY4LDcgKzE1
NjAsMTAgQEAgZW5kCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV9pZCwgT3BHZXRCeUlk
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBnZXQo
bV9iYXNlLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlQ2VsbChzaXplLCB0MCwgdDMs
IC5vcEdldEJ5SWRTbG93KQotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wR2V0QnlJZCwgbV9t
b2RlTWV0YWRhdGEsIG1fcHJvZmlsZSwgLm9wR2V0QnlJZFNsb3csIHNpemUsIG1ldGFkYXRhLCBy
ZXR1cm4pCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BHZXRCeUlkLCBtX21vZGVNZXRhZGF0
YSwgbV9wcm9maWxlLCAub3BHZXRCeUlkU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHJldHVybiwKKyAg
ICAgICAgbWFjcm8gKGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFkYXRhLCBzY3JhdGNoMSwgc2Ny
YXRjaDIpCisgICAgICAgICAgICBhcnJheVByb2ZpbGUoT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9h
cnJheVByb2ZpbGUsIGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFkYXRhLCBzY3JhdGNoMSkKKyAg
ICAgICAgZW5kKQogCiAub3BHZXRCeUlkU2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Ns
b3dfcGF0aF9nZXRfYnlfaWQpCkBAIC0zMDAyLDcgKzI5OTcsNyBAQCBsbGludE9wV2l0aE1ldGFk
YXRhKG9wX2l0ZXJhdG9yX29wZW4sIE9wCiAKICAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX2l0ZXJh
dG9yLCB0MykKICAgICBidHFueiB0Mywgbm90Q2VsbE1hc2ssIC5pdGVyYXRvck9wZW5HZW5lcmlj
R2V0TmV4dFNsb3cKLSAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yT3BlbiwgbV9t
b2RlTWV0YWRhdGEsIG1fbmV4dFByb2ZpbGUsIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNs
b3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZU5leHRBbmREaXNwYXRjaCkKKyAgICBwZXJmb3JtR2V0
QnlJREhlbHBlcihPcEl0ZXJhdG9yT3BlbiwgbV9tb2RlTWV0YWRhdGEsIG1fbmV4dFByb2ZpbGUs
IC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZU5l
eHRBbmREaXNwYXRjaCwgbWFjcm8oYSwgYiwgYywgZCkgZW5kKQogCiAuaXRlcmF0b3JPcGVuR2Vu
ZXJpY0dldE5leHRTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2l0ZXJh
dG9yX29wZW5fZ2V0X25leHQpCkBAIC0zMDYxLDcgKzMwNTYsNyBAQCBsbGludE9wV2l0aE1ldGFk
YXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wCiAKICAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX3ZhbHVl
LCB0MykKICAgICBidHFueiB0Mywgbm90Q2VsbE1hc2ssIC5nZXREb25lU2xvdwotICAgIHBlcmZv
cm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JOZXh0LCBtX2RvbmVNb2RlTWV0YWRhdGEsIG1fZG9u
ZVByb2ZpbGUsIC5nZXREb25lU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlRG9uZUFuZEptcFRv
R2V0VmFsdWUpCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck5leHQsIG1fZG9u
ZU1vZGVNZXRhZGF0YSwgbV9kb25lUHJvZmlsZSwgLmdldERvbmVTbG93LCBzaXplLCBtZXRhZGF0
YSwgc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1ZSwgbWFjcm8oYSwgYiwgYywgZCkgZW5kKQogCiAu
Z2V0RG9uZVNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jf
bmV4dF9nZXRfZG9uZSkKQEAgLTMwODYsNyArMzA4MSw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfaXRlcmF0b3JfbmV4dCwgT3AKICAgICAjIFJlbG9hZCB0aGUgbmV4dCByZXN1bHQgdG1wIHNp
bmNlIHRoZSBnZXRfYnlfaWQgYWJvdmUgbWF5IGhhdmUgY2xvYmJlcmVkIHQzLgogICAgIGxvYWRW
YXJpYWJsZShnZXQsIG1fdmFsdWUsIHQzKQogICAgICMgV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBp
ZiB0aGUgaXRlcmF0b3IgcmVzdWx0IGlzIGEgY2VsbCBoZXJlIHNpbmNlIHdlIHdpbGwgaGF2ZSB0
aHJvd24gYW4gZXJyb3IgYmVmb3JlLgotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0
b3JOZXh0LCBtX3ZhbHVlTW9kZU1ldGFkYXRhLCBtX3ZhbHVlUHJvZmlsZSwgLmdldFZhbHVlU2xv
dywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlVmFsdWVBbmREaXNwYXRjaCkKKyAgICBwZXJmb3JtR2V0
QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV92YWx1ZU1vZGVNZXRhZGF0YSwgbV92YWx1ZVBy
b2ZpbGUsIC5nZXRWYWx1ZVNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZVZhbHVlQW5kRGlzcGF0
Y2gsIG1hY3JvKGEsIGIsIGMsIGQpIGVuZCkKIAogLmdldFZhbHVlU2xvdzoKICAgICBjYWxsU2xv
d1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2dldF92YWx1ZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20JKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTQyMCw3ICsxNDIwLDggQEAg
ZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5jcmVtZW50LCBhY3Rpb24pCiAgICAgbG9h
ZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgYmFkZGlzIGluY3JlbWVudCwgQ29kZUJsb2NrOjpt
X2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRl
clt0MF0sIC5jb250aW51ZQorICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3Vu
dGVyW3QwXSwgdDAKKyAgICBiYWRkaXMgaW5jcmVtZW50LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50
ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgIGFjdGlvbigpCiAgICAgLmNvbnRpbnVl
OgogZW5kCkBAIC0xNTAzLDcgKzE1MDQsOCBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0
ZXIsIGNvZGVCbG9jCiAgICAgY29kZUJsb2NrR2V0dGVyKHQxKQogICAgIGNvZGVCbG9ja1NldHRl
cih0MSkKICAgICBpZiBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQotICAgICAgICBiYWRkaXMg
NSwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNv
dW50ZXI6Om1fY291bnRlclt0MV0sIC5jb250aW51ZQorICAgICAgICBsb2FkcCBDb2RlQmxvY2s6
Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MV0sIHQwCisgICAgICAgIGJhZGRpcyA1LCBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgICAgICBpZiBK
U1ZBTFVFNjQKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAgICAgICAgbW92ZSBQQywg
YTEKQEAgLTE2MTcsMTQgKzE2MTksMTQgQEAgbWFjcm8gZnVuY3Rpb25Jbml0aWFsaXphdGlvbihw
cm9maWxlQXJnUwogICAgICMgb3B0aW1hbCB3YXkgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZl
IG1vcmUgdGhhbiBmaXZlIHJlZ2lzdGVycyBhdmFpbGFibGUKICAgICAjIGZvciBhcmJpdHJhcnkg
dXNlIGluIHRoZSBpbnRlcnByZXRlci4KICAgICBsb2FkaSBDb2RlQmxvY2s6Om1fbnVtUGFyYW1l
dGVyc1t0MV0sIHQwCi0gICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQwICMgVXNlIGFkZGkgYmVj
YXVzZSB0aGF0J3Mgd2hhdCBoYXMgdGhlIHBlZXBob2xlCisgICAgYWRkcCAtcHJvZmlsZUFyZ1Nr
aXAsIHQwCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnBndGVxIHQwLCAwLCBvayBlbmQpCiAgICAg
YnRweiB0MCwgLmFyZ3VtZW50UHJvZmlsZURvbmUKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fYXJn
dW1lbnRWYWx1ZVByb2ZpbGVzICsgRml4ZWRWZWN0b3I6Om1fc3RvcmFnZSArIFJlZkNvdW50ZWRB
cnJheTo6bV9kYXRhW3QxXSwgdDMKICAgICBidHB6IHQzLCAuYXJndW1lbnRQcm9maWxlRG9uZSAj
IFdoZW4gd2UgY2FuJ3QgSklULCB3ZSBkb24ndCBhbGxvY2F0ZSBhbnkgYXJndW1lbnQgdmFsdWUg
cHJvZmlsZXMuCiAgICAgbXVscCBzaXplb2YgVmFsdWVQcm9maWxlLCB0MCwgdDIgIyBBYWFhYWho
aGghIE5lZWQgc3RyZW5ndGggcmVkdWN0aW9uIQogICAgIGxzaGlmdHAgMywgdDAgIyBvZmZzZXQg
b2YgbGFzdCBKU1ZhbHVlIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCi0gICAgYWRkcCB0MiwgdDMg
IyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gQ29kZUJsb2NrOjptX2Fy
Z3VtZW50VmFsdWVQcm9maWxlcy4KKyAgICBhZGRwIHQyLCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9m
IFZhbHVlUHJvZmlsZSBhcnJheSBpbiB0aGUgdmFsdWUgcHJvZmlsZSBhcnJheS4KIC5hcmd1bWVu
dFByb2ZpbGVMb29wOgogICAgIGlmIEpTVkFMVUU2NAogICAgICAgICBsb2FkcSBUaGlzQXJndW1l
bnRPZmZzZXQgLSA4ICsgcHJvZmlsZUFyZ1NraXAgKiA4W2NmciwgdDBdLCB0MgpAQCAtMjU2Myw2
ICsyNTY1LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNy
byB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0
ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVb
bWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNb
dGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90
IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNo
b3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0
X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRp
Zmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
YWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4
ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsK
IAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChK
U0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmll
ciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3Qg
SWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmlu
Z0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0
aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJ
ZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tU
eXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlk
ZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCop
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3
Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdC
aXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25z
dCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Citpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJ
ZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVu
dGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZp
ZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsK
ICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVp
ZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJDYWNoZWRUeXBlcy5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5j
bHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDYWNoZUVycm9yLmgiCiAj
aW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9T
TE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVwZGF0
ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRh
LCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5QXJpdGhQcm9m
aWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5hcnlBcml0aFBy
b2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5v
YnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1
bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlm
Zl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25F
eGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9m
ZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFJhcmVE
YXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9m
Q29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1
dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZf
dCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsgfQogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzA5LDcgKzMwOSw2IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7
CiAgICAgdihJbnQzMiwgZXZhbFRocmVzaG9sZE11bHRpcGxpZXIsIDEwLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KFVuc2lnbmVkLCBtYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0aCwg
MjU2LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCi0gICAgdihCb29sLCByYW5kb21pemVFeGVj
dXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9y
QmFzZWxpbmUsIDEwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1F
eGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JVcHBlclRpZXJzLCA1MDAwMCwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgXApAQCAtNTMyLDYgKzUzMSw3IEBAIGJvb2wgY2FuVXNlV2Vi
QXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihCb29sLCB1c2VEYXRhSUMsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCwgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDU2hhcmluZywgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgdXNlQmFzZWxpbmVKSVRDb2RlU2hh
cmluZywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIC8qIEZlYXR1cmUgRmxh
Z3MgKi9cCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0
RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTYsNyArMzk2LDkgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0
aQogICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCiAgICAgICAgIGNvZGVCbG9j
ay0+dmFsaWRhdGUoKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQorICAgIGlmIChS
ZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRD
b2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkKKyAgICAgICAgY29kZUJsb2NrLT5z
ZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICBlbHNlIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQogICAgICAgICBzZXR1cExMSW50
KGNvZGVCbG9jayk7CiAgICAgZWxzZQogICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVy
VXBDb3VudGVyLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKCkKICAgICB7CiAgICAg
ICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9CQlEoKSkKLSAgICAgICAgICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVw
KCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVy
V2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9v
bCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCkBAIC02NSw5ICs2NSw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplU29vbigpCiAgICAgewogICAgICAgICBpZiAoT3B0
aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hv
bGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAg
ICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXpl
U29vbigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlv
bnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgICAg
IHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7
CiAgICAgfQogCiAgICAgc3RydWN0IE9TUkVudHJ5RGF0YSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKIAogVGllclVwQ291bnQ6OlRpZXJVcENvdW50KCkKIHsKLSAgICBzZXROZXdUaHJlc2hvbGQo
T3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsK
KyAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRl
cldhcm1VcCgpKTsKIH0KIAogVGllclVwQ291bnQ6On5UaWVyVXBDb3VudCgpID0gZGVmYXVsdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVw
Q291bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBvcHRpbWl6ZUFmdGVyV2FybVVwKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAg
ICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6
IE9NRy1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuIik7Ci0gICAgICAgIHNldE5ld1RocmVzaG9s
ZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIp
OworICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1p
emVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25U
aHJlc2hvbGRSZWFjaGVkKCkKQEAgLTkwLDE0ICs5MCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBv
cHRpbWl6ZU5leHRJbnZvY2F0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAg
ICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6
IE9NRy1vcHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNo
b2xkKDAsIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCk7CiAgICAgfQogCiAg
ICAgdm9pZCBvcHRpbWl6ZVNvb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAg
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjog
T01HLW9wdGltaXppbmcgc29vbi4iKTsKICAgICAgICAgLy8gRklYTUU6IE5lZWQgYWRqdXN0bWVu
dCBvbmNlIHdlIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdhc20gZnVuY3Rpb25zLgotICAg
ICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29u
KCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xk
Rm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAogICAgIHZvaWQgc2V0T3B0aW1pemF0aW9u
VGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMjAgQEAgcHVi
bGljOgogICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOwogICAgIH0KIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+CisgICAgQmFnJiBvcGVyYXRvcj0oQmFnPFQsIFU+JiYgb3RoZXIpCisg
ICAgeworICAgICAgICBpZiAodW53cmFwcGVkSGVhZCgpID09IG90aGVyLnVud3JhcHBlZEhlYWQo
KSkKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKworICAgICAgICBCYWcgZGVzdHJveTsKKyAg
ICAgICAgZGVzdHJveS5tX2hlYWQgPSB1bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG1faGVhZCA9
IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsK
KworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCiAgICAgfkJhZygpCiAgICAgewogICAg
ICAgICBjbGVhcigpOwpJbmRleDogU291cmNlL1dURi93dGYvUGFja2VkLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvUGFja2VkLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9X
VEYvd3RmL1BhY2tlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDEwIEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0K
LSAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVID0gVD4KKyAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjpp
c192b2lkX3Y8VT4sIFUmPjo6dHlwZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7
IH0KKwogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWdldCgpOyB9CiAKICAg
ICAvLyBUaGlzIGNvbnZlcnNpb24gb3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24g
dG8gYm9vbCBidXQgbm90IHRvIG90aGVyIGludGVnZXIgdHlwZXMuCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtRW5hYmxlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
RW5hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4NDAsOSBAQAogICAgbWFrZSB1c2Ug
b2YgQVJNNjQgbGlrZSBmZWF0dXJlcy4gRm9yIG5vdywgd2UnbGwgb25seSBzdXBwb3J0IHRoZW0g
b24gcGxhdGZvcm1zCiAgICB0aGF0IGhhdmUgNiBvciBtb3JlIGFyZ3VtZW50IHJlZ2lzdGVycyB0
byB1c2UuCiAqLwotI2RlZmluZSBFTkFCTEVfRVhUUkFfQ1RJX1RIVU5LUyAxCisKKy8vIE9PUFMK
KyNkZWZpbmUgRU5BQkxFX0VYVFJBX0NUSV9USFVOS1MgMAogI2VuZGlmCiAKICNpZiAhZGVmaW5l
ZChFTkFCTEVfQklORElOR19JTlRFR1JJVFkpICYmICFPUyhXSU5ET1dTKQpJbmRleDogVG9vbHMv
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3J1bi1qc2Mtc3RyZXNzLXRlc3RzCShyZXZpc2lvbiAyODI2NzUpCisrKyBUb29scy9TY3JpcHRz
L3J1bi1qc2Mtc3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC03NzYsMTcgKzc3NiwxOCBA
QCBlbmQKIAogIyBGSVhNRTogbmVlZCB0byBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxODcwMyB0byBlbmFibGUgdGhpcyBvbiBMaW51eC9NSVBTLgogZGVmIHJ1
bkJ5dGVjb2RlQ2FjaGVJbXBsKG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucywgKmFkZGl0aW9u
YWxFbnYpCi0gICAgaWYgKCRob3N0T1MgPT0gImRhcndpbiIpCi0gICAgICAgIGZpbGVUZW1wbGF0
ZSA9ICJieXRlY29kZS1jYWNoZSIKLSAgICBlbHNpZiAoJGhvc3RPUyA9PSAibGludXgiICYmICRh
cmNoaXRlY3R1cmUgIT0gIm1pcHMiKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUt
Y2FjaGVYWFhYWFgiCi0gICAgZWxzZQotICAgICAgICBza2lwCi0gICAgICAgIHJldHVybgotICAg
IGVuZAorICAgICMgT09QUworICAgICNpZiAoJGhvc3RPUyA9PSAiZGFyd2luIikKKyAgICAjICAg
IGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1jYWNoZSIKKyAgICAjZWxzaWYgKCRob3N0T1MgPT0g
ImxpbnV4IiAmJiAkYXJjaGl0ZWN0dXJlICE9ICJtaXBzIikKKyAgICAjICAgIGZpbGVUZW1wbGF0
ZSA9ICJieXRlY29kZS1jYWNoZVhYWFhYWCIKKyAgICAjZWxzZQorICAgICMgICAgc2tpcAorICAg
ICMgICAgcmV0dXJuCisgICAgI2VuZAogCi0gICAgb3B0aW9ucyA9IEJBU0VfT1BUSU9OUyArIEZU
TF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RTcGVjaWZpY1Jl
cXVpcmVkT3B0aW9ucwotICAgIGFkZFJ1bkNvbW1hbmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIs
IChwYXRoVG9IZWxwZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywg
ZmlsZVRlbXBsYXRlLnRvX3MsICp2bUNvbW1hbmQsICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25z
LCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52
KQorICAgICNvcHRpb25zID0gQkFTRV9PUFRJT05TICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMgKyAkdGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25zCisgICAgI2Fk
ZFJ1bkNvbW1hbmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxwZXJzICsgImJ5
dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRlLnRvX3MsICp2
bUNvbW1hbmQsICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVy
LCBzaW1wbGVFcnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQogZW5kCiAKIGRlZiBydW5CeXRl
Y29kZUNhY2hlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438901</attachid>
            <date>2021-09-21 19:02:24 -0700</date>
            <delta_ts>2021-09-21 19:39:36 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>534867</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsMTAg
QEAgb3BfZ3JvdXAgOlByb2ZpbGVkQmluYXJ5T3AsCiAgICAgICAgIGxoczogVmlydHVhbFJlZ2lz
dGVyLAogICAgICAgICByaHM6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZFR5cGVz
OiBPcGVyYW5kVHlwZXMsCisgICAgICAgIHByb2ZpbGVJbmRleDogdW5zaWduZWQKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxl
CisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
X2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTEsOSArMzUyLDEwIEBAIG9wX2dy
b3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgIF0sCiAgICAgYXJnczogewogICAgICAg
ICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvZmlsZUluZGV4OiB1bnNpZ25l
ZCwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg0LDkgKzM4NiwxMCBAQCBvcCA6bmVnYXRlLAog
ICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgb3BlcmFuZDogVmlydHVhbFJl
Z2lzdGVyLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLAorICAgICAgICBwcm9maWxl
SW5kZXg6IHVuc2lnbmVkLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQ
cm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFy
aXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApAQCAtNDc4LDYgKzQ4MSw3IEBAIG9wIDpn
ZXRfYnlfaWQsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgbW9kZU1ldGFkYXRhOiBHZXRCeUlk
TW9kZU1ldGFkYXRhLAogICAgICAgICBwcm9maWxlOiBWYWx1ZVByb2ZpbGUsCisgICAgICAgIGFy
cmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgIH0KIAogb3AgOmdldF9ieV9pZF93aXRoX3Ro
aXMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5k
c0ZvckNoZWNrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVj
a3BvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBAIFZhbHVlUHJvZmlsZSog
dmFsdWVQcm9maWxlRm9ySW1wbChCeXRlY28KICAgICAgICAgcmV0dXJuICZtZXRhZGF0YS5tX3By
b2ZpbGU7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK3VpbnRwdHJfdCB2YWx1
ZVByb2ZpbGVPZmZzZXRGb3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4KQoreworICAgIFVOVVNF
RF9QQVJBTShjaGVja3BvaW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9w
Y29kZUlEID09IG9wX2l0ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50
SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJu
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRvclByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yT3Blbjo6Z2V0TmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZOZXh0UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRl
Y29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3JfbmV4dCkgeworICAgICAgICBzd2l0Y2ggKGNo
ZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4
dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZSgp
OworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXREb25lOiByZXR1cm4gQnl0ZWNvZGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkRvbmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck5leHQ6OmdldFZhbHVlOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlZhbHVl
UHJvZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfSBlbHNlIAorICAgICAgICByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZlByb2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVN
ZXRhZGF0YT4KIGJvb2wgaGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFk
YXRhLCB1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhW
TSYgdm0pCiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQot
ewotICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4o
bV9mYXN0UGF0aFN0YXJ0KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gQ2FsbExpbmtJbmZvOjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNEYXRhSUMoKSk7CkBAIC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRN
YXhBcmd1bWVudENvdW50SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
dmFsdWU7CiB9CiAKK0NvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5r
SW5mbzo6ZmFzdFBhdGhTdGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSAm
JiBpc1RhaWxDYWxsKCkpOworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJ
bnRlcm5hbFB0clRhZz4odS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwogdm9pZCBDYWxs
TGlua0luZm86OnZpc2l0V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVTcGVjaWZpY0Nh
bGxlZSA9IFsmXSAoSlNGdW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5OSwxMSBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9mcmFtZVNodWZm
bGVEYXRhLT5zaHJpbmtUb0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRVc2VzRGF0YUlD
cyh1c2VEYXRhSUMpOwotICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwotICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQ
Uik7Ci0gICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BS
OwotICAgIH0KLQotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9m
YXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZh
c3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKIAotICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJQyA9PSBVc2VE
YXRhSUM6OlllcykgewogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVn
aXN0ZXIoKTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxM
aW5rSW5mb0dQUiwgb2Zmc2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcgQEAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAgZ29Qb2x5bW9y
cGhpYyA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVNYXNrKSk7CiAg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
aXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBw
cmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMubGluaygmaml0
KTsgLy8gUG9seW1vcnBoaWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBwcmVwLgogICAg
ICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQ
Uiwgb2Zmc2V0T2ZNb25vbW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7
CkBAIC0zMzYsMTQgKzMyNSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihudWxscHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsOwotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGNh
bGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
byk7CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICB1LmNv
ZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGNhbGxlZUNoZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMu
bV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihjYWxsKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMubV9jYWxs
ZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxs
ZWVDaGVjayk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEzICszNDQsMzQgQEAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQykK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIG51
bGxwdHIpOworICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBpZiAoaXNEYXRh
SUMoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVn
OjpJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRh
SUMsIGlzVGFpbENhbGwoKSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0
YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKLSAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCB1c2VEYXRhSUMsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAgc2V0VXNlc0Rh
dGFJQ3MoVXNlRGF0YUlDOjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywg
aml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlzVGFpbENhbGwo
KSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4g
ZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUM6OlllcywgZmFsc2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhl
bHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIHRydWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CiB9CiAKIHZv
aWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkK
QEAgLTM2OSwxNyArMzgxLDMyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0m
IHZtLCAKICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIs
IG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQog
Cit2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUoY2FsbExpbmtJ
bmZvR1BSLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBK
U0VudHJ5UHRyVGFnKTsKK30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMo
Vk0mIHZtLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgbV9jb2RlT3JpZ2lu
ID0gQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBz
ZXRVcENhbGwodW5saW5rZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAg
bV9kb25lTG9jYXRpb24gPSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247CisgICAg
aWYgKHVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpIHsKKyAgICAgICAgLy8g
RklYTUU6IEl0J2QgYmUgbmljZSBpZiB0aGlzIGp1c3Qgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBz
dHJ1Y3R1cmUuCisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZy
YW1lU2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsK
KyAgICB9CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlD
Lm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2Fs
bERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxh
dGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpO
byk7CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAg
IGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAg
dS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxK
U0ludGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBq
aXQubGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0
UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQ
YXRoU3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwg
dGhpcyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1
bnNpZ25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2Vk
Q2FsbExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2Vu
dGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgewor
ICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2Fs
bCwKICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAg
ICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxp
emVEYXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsg
cmV0dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1
aW50OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRl
OgotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
QywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURf
UkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRo
SW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJS
ZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVi
bGljOgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQ
YXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVj
dEZhc3RQYXRoKENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFz
dFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWls
Q2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBz
dGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJv
b2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNl
RGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsy
NDksNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAot
ICAgIEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9z
bG93U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsK
ICAgICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZv
LCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJf
dCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlv
blR5cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9j
YXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxv
Y2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
bV9zbG93UGF0aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5h
bFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAK
QEAgLTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29k
ZU9yaQogICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3Qg
VW5saW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsg
Ly8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxs
eSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxU
eXBlOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlv
bjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZs
ZURhdGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw2ICszMDgsOCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlk
ZXIoKSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVD
b3VudGVyKCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9
CkBAIC0zMTgsNyArMzIwLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgQwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIAogICAgIG9wdGltaXplQWZ0ZXJX
YXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgaWYgKG90aGVyLm1fcmFyZURh
dGEpIHsKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwpAQCAtMzU5LDcgKzM2
MCw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAgIEFT
U0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2Vk
Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CisKICAgICB2
bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcwLDEwICszNzMsMTMg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2FuJ3Qg
Z2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJvY2Vz
cyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJvZHVj
ZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5lc3Mg
YW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2YgYW4g
VW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhlIGxp
dmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNpZGUg
VW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBiZXR3
ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhlIGJ5
dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5nIGFu
IFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayog
dW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CisgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOyAvLyBXZSBuZWVkIHRvIHNldCB1cCBvdXIgdmFsdWUgcHJvZmlsZSBw
b2ludGVycy4KKwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBmaW5pc2hDcmVh
dGlvbkNvbW1vbih2bSk7CiAKQEAgLTQ3MSw2ICs0NzcsMTkgQEAgYm9vbCBDb2RlQmxvY2s6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBicmVhazsgXAogICAgIH0KIAorI2RlZmlu
ZSBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6
IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRh
dGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShi
eXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisjZGVm
aW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3Ap
OiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFk
YXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlLT51bmFyeUFyaXRoUHJvZmlsZShi
eXRlY29kZS5tX3Byb2ZpbGVJbmRleCk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisKICAg
ICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25TdHJlYW0gPSBpbnN0cnVjdGlv
bnMoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uIDogaW5zdHJ1Y3Rpb25TdHJl
YW0pIHsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KTsKQEAgLTUzMywxNCArNTUyLDE0IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFMKICAgICAgICAgTElOSyhPcENyZWF0ZVByb21pc2UpCiAgICAgICAgIExJTksoT3BD
cmVhdGVHZW5lcmF0b3IpCiAKLSAgICAgICAgTElOSyhPcEFkZCkKLSAgICAgICAgTElOSyhPcE11
bCkKLSAgICAgICAgTElOSyhPcERpdikKLSAgICAgICAgTElOSyhPcFN1YikKLQotICAgICAgICBM
SU5LKE9wTmVnYXRlKQotICAgICAgICBMSU5LKE9wSW5jKQotICAgICAgICBMSU5LKE9wRGVjKQor
ICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BBZGQpCisgICAgICAgIExJ
TktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcE11bCkKKyAgICAgICAgTElOS19XSVRIX0JJ
TkFSWV9BUklUSF9QUk9GSUxFKE9wRGl2KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRI
X1BST0ZJTEUoT3BTdWIpCisKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUo
T3BOZWdhdGUpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wSW5jKQor
ICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcERlYykKIAogICAgICAgICBM
SU5LKE9wSm5lcVB0cikKIApAQCAtNzY5LDcgKzc4OCw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAvLyByZWx5IG9uIHRoZSBpbnN0cnVjdGlvbiBjb3Vu
dCAoYW5kIGFyZSBpbiB0aGVvcnkgcGVybWl0dGVkIHRvIGFsc28gaW5zcGVjdCB0aGUKICAgICAv
LyBpbnN0cnVjdGlvbiBzdHJlYW0gdG8gbW9yZSBhY2N1cmF0ZSBhc3Nlc3MgdGhlIGNvc3Qgb2Yg
dGllci11cCkuCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGppdEFmdGVyV2FybVVw
KCk7CiAKICAgICAvLyBJZiB0aGUgY29uY3VycmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2Rl
IGJsb2NrJ3MgaGFzaCwgdGhlbiBjb21wdXRlIGl0IGhlcmUKICAgICAvLyBzeW5jaHJvbm91c2x5
LgpAQCAtNzkzLDYgKzgxMSw3NiBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb25Db21t
b24oVk0mCiAgICAgbV9vd25lckVkZ2Uuc2V0KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9Db2RlQmxv
Y2tFZGdlOjpjcmVhdGUodm0sIHRoaXMpKTsKIH0KIAordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0
aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7Cisg
ICAgc2V0SklUQ29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0
IGF1dG8mIGppdENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAg
ICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAg
aGFuZGxlci5uYXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxl
ci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9
CisgICAgfQorCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7CisgICAgICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkp
OworICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+
KGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAg
ICAgIHN3aXRjaCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBv
b2w6OlR5cGU6Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZv
OiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExp
bmtJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9h
ZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBq
aXREYXRhLm1fY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5m
by5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFs
aXplRGF0YUlDKHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BS
SW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xb
aV0gPSBjYWxsTGlua0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm86IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtl
ZFN0dWJJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRy
eS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBqaXREYXRhLm1fc3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5
cGUsIENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAg
ICAgICAgICAgc3R1YkluZm8tPmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byh0aGlzLCB1bmxpbmtlZFN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0
Q29uc3RhbnRQb29sW2ldID0gc3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rp
b25EZWNsOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRh
Lm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpGdW5jdGlvbkV4cHI6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5k
ZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2Fz
ZSBHbG9iYWxDb2RlOgorICAgIGNhc2UgTW9kdWxlQ29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgor
ICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZ1bmN0aW9uQ29kZToKKyAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5
IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxs
LgorICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYm
IERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgaWYgKGppdENvZGUtPm1faXNTaGFyZWFibGUgJiYgIXVubGlua2VkQ29kZUJsb2NrKCkt
Pm1fdW5saW5rZWRCYXNlbGluZUNvZGUgJiYgT3B0aW9uczo6dXNlQmFzZWxpbmVKSVRDb2RlU2hh
cmluZygpKQorICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVD
b2RlID0gV1RGTW92ZShqaXRDb2RlKTsKK30KKwogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsK
ICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTg3Myw2ICs5NjEsMjcgQEAgQ29kZUJsb2NrOjp+Q29k
ZUJsb2NrKCkKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQogCitib29sIENvZGVCbG9jazo6aXND
b25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25z
dAoreworICAgIC8vIFRoaXMgbmVlZHMgdG8gY29ycmVzcG9uZCB0byB3aGF0IHdlIGRvIGluc2lk
ZSBzZXRDb25zdGFudFJlZ2lzdGVycy4KKyAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCkt
PmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHJlZykpIHsKKyAgICBjYXNlIFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKKyAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjo6RG91YmxlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI6IHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHVubGlu
a2VkQ29kZUJsb2NrKCktPmdldENvbnN0YW50KHJlZyk7CisgICAgICAgIGlmICghdmFsdWUgfHwg
IXZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIEpTQ2Vs
bCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICBpZiAoY2VsbC0+aW5oZXJpdHM8U3lt
Ym9sVGFibGU+KHZtKCkpIHx8IGNlbGwtPmluaGVyaXRzPEpTVGVtcGxhdGVPYmplY3REZXNjcmlw
dG9yPih2bSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNv
bnN0YW50OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiBWZWN0b3I8dW5zaWdu
ZWQ+IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgRml4ZWRWZWN0b3I8V3Jp
dGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pCiB7
CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC04OTIsNiArMTAwMSw3IEBAIFZlY3Rvcjx1bnNpZ25l
ZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFIKICAgICAgICAgc3dpdGNoIChyZXByZXNlbnRhdGlv
bikgewogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25z
dGFudDoKICAgICAgICAgICAgIGNvbnN0YW50ID0gZ2xvYmFsT2JqZWN0LT5saW5rVGltZUNvbnN0
YW50KHN0YXRpY19jYXN0PExpbmtUaW1lQ29uc3RhbnQ+KGNvbnN0YW50LmFzSW50MzJBc0FueUlu
dCgpKSk7CisgICAgICAgICAgICBBU1NFUlQoY29uc3RhbnQuaXNDZWxsKCkpOyAvLyBVbmxpbmtl
ZCBCYXNlbGluZSBKSVQgcmVxdWlyZXMgdGhpcy4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI6CiAgICAgICAgIGNhc2UgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgpAQCAtMTUxNCw3ICsxNjI0LDcgQEAgQ29k
ZUJsb2NrOjpKSVREYXRhJiBDb2RlQmxvY2s6OmVuc3VyZUpJVAogICAgIHJldHVybiAqbV9qaXRE
YXRhOwogfQogCi12b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hl
cygpCit2b2lkIENvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKQogewogICAgIGlm
IChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCkBAIC0xNTI1
LDYgKzE2MzUsMjAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbgog
ICAgICAgICAgICAgc3R1YkluZm8tPnZpc2l0V2Vha1JlZmVyZW5jZXMobG9ja2VyLCB0aGlzKTsK
ICAgICAgICAgfQogICAgIH0KKworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBpZiAoaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIC8vIFZlcmlmeSB3ZSBkb24n
dCBuZWVkIHRvIGZpbmFsaXplIHRoZXNlIHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KKyAg
ICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA6IHN0YXRpY19jYXN0PEJhc2Vs
aW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fZXZhbENhbGxMaW5rSW5mb3MpIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7CisgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtdIChKU0NlbGwqKSB7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisKKyAgICB9CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC0xNTM0
LDQ2ICsxNjU4LDQ3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgK
IAogICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIGJv
b2wgaXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGU7Ci0gICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBmYWxzZTsKLSAgICAv
LyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQg
cmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0Ci0gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGlu
ZSBKSVQgY29kZSBhbmQgcmVpbnN0YWxsIExMSW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5Lgot
ICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpICYmICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1Nl
dCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpKSB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sq
IG9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKLSAgICAgICAg
ICAgIGlmICghb3B0aW1pemVkQ29kZUJsb2NrLT5tX29zckV4aXRDb3VudGVyKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSkgewotICAgICAgICAgICAg
ICAgICAgICBtX2ppdENvZGUgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBMTEludDo6
c2V0RW50cnlwb2ludCh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOwotCi0gICAgICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxpbmtlZENvZGUtPm51bWJlck9mRXhj
ZXB0aW9uSGFuZGxlcnMoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBV
bmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlua2VkQ29kZS0+ZXhj
ZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBo
YW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9ucygpLmF0KHVubGlu
a2VkSGFuZGxlci50YXJnZXQpLnB0cigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxl
ci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZUNhdGNoKGluc3RydWN0aW9uLndpZHRoKCkpLmNv
ZGUoKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdW5s
aW5rSW5jb21pbmdDYWxscygpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0
byBjbGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGluIGZpbmFsaXplVW5jb25kaXRpb25hbGx5
IGFsbCBjb21waWxlciB0aHJlYWRzCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBzYWZlcG9p
bnRlZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5pbmcgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBieXRl
Y29kZSBwYXJzZXIsIGFuZCBieXRlY29kZQotICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXIg
aXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5m
b3MuCi0gICAgICAgICAgICAgICAgICAgIHJlc2V0SklURGF0YSgpOwotICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFk
ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNlbmRpZgorLy8g
T09QUzogcmVjb25jaWxlIHRoaXMKKy8vI2lmIEVOQUJMRShKSVQpCisvLyAgICBib29sIGlzRWxp
Z2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwor
Ly8gICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBmYWxzZTsKKy8vICAgIC8vIElm
IEJhc2VsaW5lSklUIGNvZGUgaXMgbm90IGV4ZWN1dGluZywgYW5kIGFuIG9wdGltaXplZCByZXBs
YWNlbWVudCBleGlzdHMsIHdlIGF0dGVtcHQKKy8vICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUg
SklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KKy8v
ICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpICYmICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1Nl
dCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpKSB7CisvLyAgICAgICAgaWYgKENvZGVCbG9j
ayogb3B0aW1pemVkQ29kZUJsb2NrID0gb3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworLy8gICAg
ICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgeworLy8g
ICAgICAgICAgICAgICAgaWYgKGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSkgeworLy8gICAg
ICAgICAgICAgICAgICAgIG1faml0Q29kZSA9IG51bGxwdHI7CisvLyAgICAgICAgICAgICAgICAg
ICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7CisvLyAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOworLy8K
Ky8vICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRD
b2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgeworLy8gICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBt
X3VubGlua2VkQ29kZS0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKKy8vICAgICAgICAgICAgICAgICAg
ICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRs
ZXJzW2ldOworLy8gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICpp
bnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKKy8vICAgICAg
ICAgICAgICAgICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29k
ZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZUNhdGNo
KGluc3RydWN0aW9uLndpZHRoKCkpLmNvZGUoKSkpOworLy8gICAgICAgICAgICAgICAgICAgIH0K
Ky8vCisvLyAgICAgICAgICAgICAgICAgICAgdW5saW5rSW5jb21pbmdDYWxscygpOworLy8KKy8v
ICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUg
YmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwor
Ly8gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBzYWZlcG9pbnRlZCwgbWVhbmluZyB0aGV5J3Jl
IHJ1bm5pbmcgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBieXRlY29kZSBwYXJzZXIsIGFuZCBieXRl
Y29kZQorLy8gICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlciBpcyB0aGUgb25seSBkYXRhIHN0
cnVjdHVyZSBwb2ludGluZyBpbnRvIHRoZSB2YXJpb3VzICppbmZvcy4KKy8vICAgICAgICAgICAg
ICAgICAgICByZXNldEpJVERhdGEoKTsKKy8vICAgICAgICAgICAgICAgIH0gZWxzZQorLy8gICAg
ICAgICAgICAgICAgICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gdHJ1ZTsKKy8v
ICAgICAgICAgICAgfQorLy8gICAgICAgIH0KKy8vICAgIH0KKy8vCisvLyNlbmRpZgogICAgIAog
ICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKICAgICAgICAg
ZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAo
ISFqaXRDb2RlKCkpCi0gICAgICAgIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsK
KyAgICAgICAgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KERGR19KSVQpCkBAIC0xNTk0LDcgKzE3MTksNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoCiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OgotICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKKyAg
ICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jb3VudCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAg
ICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKQEAgLTE2NzUsMzAgKzE4
MDAsNiBAQCBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mCiAgICAgcmV0
dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSwgY29k
ZU9yaWdpbik7CiB9CiAKLUpJVEFkZElDKiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fYWRkSUNzLmFk
ZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVRNdWxJQyogQ29kZUJsb2NrOjphZGRKSVRNdWxJQyhC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX211
bElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUU3ViSUMqIENvZGVCbG9jazo6YWRkSklU
U3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVE5lZ0lDKiBDb2RlQmxvY2s6
OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRh
KGxvY2tlcikubV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KIFN0cnVjdHVyZVN0dWJJ
bmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwpAQCAtMzEzMyw3ICszMjM0LDcg
QEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1l
UmVnaXN0ZXJDb3VudEZvcih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMzQ5LDEzICszNDUwLDEzIEBA
IEJpbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2gg
KHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNh
c2Ugb3BfbXVsOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJu
ICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTMzNjcsMTEgKzM0NjgsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6dW5hcnlBcml0aAogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGNhc2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0zNDcyLDIyICszNTczLDE2IEBAIHZvaWQgQ29kZUJsb2Nr
OjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmkKIH0KIAogI2lmIEVOQUJMRShKSVQpCi12b2lkIENv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3Jp
Z2luTWFwPiYmIG1hcCkgCi17IAotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
KTsKLSAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1v
dmUobWFwKTsKLX0KLQogc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQ
Qyh2b2lkKiBwYykKIHsKKyAgICBpZiAoYXV0byogcGNUb0NvZGVPcmlnaW5NYXAgPSBtX2ppdENv
ZGUtPnBjVG9Db2RlT3JpZ2luTWFwKCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Q29k
ZU9yaWdpbj4gY29kZU9yaWdpbiA9IHBjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQorICAg
ICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CisgICAgfQorCiAgICAgewogICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIGlmIChhdXRvKiBqaXREYXRh
ID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBpZiAoaml0RGF0YS0+bV9wY1RvQ29k
ZU9yaWdpbk1hcCkgewotICAgICAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+IGNvZGVPcmlnaW4gPSBqaXREYXRhLT5tX3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKLSAgICAgICAgICAgIH0K
LQogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRh
LT5tX3N0dWJJbmZvcykgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29udGFpbnNQ
QyhwYykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+KHN0dWJJbmZvLT5jb2RlT3JpZ2luKTsKQEAgLTM1MjEsMjggKzM2MTYsMTQgQEAgc3RkOjpv
cHRpb25hbDxCeXRlY29kZUluZGV4PiBDb2RlQmxvY2s6OgogICAgIHJldHVybiBieXRlY29kZUlu
ZGV4OwogfQogCi1pbnQzMl90IENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhy
ZXNob2xkKQotewotICAgIHN3aXRjaCAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUo
KSkgewotICAgIGNhc2UgVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU6Ci0gICAgICAgIHJldHVybiB0
aHJlc2hvbGQ7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6RmFsc2U6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgKiA0OwotICAgIGNhc2UgVHJpU3RhdGU6OlRydWU6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgLyAyOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
dGhyZXNob2xkOwotfQotCi12b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBD
b2RlQmxvY2s6OmppdFNvb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdU
aHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2Fy
bVVwKCkpLCB0aGlzKTsKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9s
ZCh1bmxpbmtlZENvZGVCbG9jaygpLT50aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3Zv
aWQgQ29kZUJsb2NrOjpqaXROZXh0SW52b2NhdGlvbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdU
aHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAKIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRy
YXBCcmVha3BvaW50cygpIGNvbnN0CkBAIC0zNTg4LDI4ICszNjY5LDggQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBNYXRoSUNTdGF0cygpCiAgICAgZG91YmxlIG51bVN1YnMgPSAwLjA7CiAgICAgZG91
YmxlIHRvdGFsU3ViU2l6ZSA9IDAuMDsKIAotICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVC
bG9jayogY29kZUJsb2NrKSB7Ci0gICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gY29kZUJsb2Nr
LT5tX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgICAgIGZvciAoSklUQWRkSUMqIGFkZElDIDog
aml0RGF0YS0+bV9hZGRJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1BZGRzKys7Ci0gICAgICAg
ICAgICAgICAgdG90YWxBZGRTaXplICs9IGFkZElDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKEpJVE11bElDKiBtdWxJQyA6IGppdERhdGEtPm1fbXVsSUNz
KSB7Ci0gICAgICAgICAgICAgICAgbnVtTXVscysrOwotICAgICAgICAgICAgICAgIHRvdGFsTXVs
U2l6ZSArPSBtdWxJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Zm9yIChKSVROZWdJQyogbmVnSUMgOiBqaXREYXRhLT5tX25lZ0lDcykgewotICAgICAgICAgICAg
ICAgIG51bU5lZ3MrKzsKLSAgICAgICAgICAgICAgICB0b3RhbE5lZ1NpemUgKz0gbmVnSUMtPmNv
ZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUU3ViSUMqIHN1
YklDIDogaml0RGF0YS0+bV9zdWJJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1TdWJzKys7Ci0g
ICAgICAgICAgICAgICAgdG90YWxTdWJTaXplICs9IHN1YklDLT5jb2RlU2l6ZSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgYXV0byBjb3VudElDcyA9IFsmXSAoQ29kZUJsb2NrKikg
eworICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byByZS1pbXBsZW1lbnQgdGhpcyB1c2luZyBK
SVRDb2RlLgogICAgIH07CiAgICAgaGVhcCgpLT5mb3JFYWNoQ29kZUJsb2NrKGNvdW50SUNzKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw5IEBAIGNsYXNzIEpTTW9kdWxlRW52aXJv
bm1lbnQ7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ7CiBjbGFzcyBNZXRhZGF0YVRhYmxlOwot
Y2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKIGNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogCiBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihDb2RlQmxvY2tSYXJlRGF0YSk7CiAKQEAg
LTE1OCw3ICsxNTgsOSBAQCBwdWJsaWM6CiAgICAgTWV0YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIG51
bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6
CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKHVuc2lnbmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoK
IAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkgY29uc3QgeyByZXR1cm4g
bV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgfQogCkBAIC0xNjcsNyArMTY5LDYgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KICAg
ICB1bnNpZ25lZCBudW1UbXBzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0No
ZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50VG1wczsgfQogCi0gICAgdW5zaWduZWQqIGFk
ZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CiAKICAgICBDb2RlQmxvY2sq
IGFsdGVybmF0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9h
bHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAgLTIzMiwxNiArMjMzLDYgQEAgcHVibGljOgogICAgIGJv
b2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3Rh
bGxWTVRyYXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmly
dHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRp
bmcgYmFjayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlz
IGB0aGlzYCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0Nv
bnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsK
LQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29s
IGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAg
IHJldHVybiByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAt
MjY4LDIzICsyNTksMjEgQEAgcHVibGljOgogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RydWN0IEpJ
VERhdGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICAgICAgQmFnPFN0cnVj
dHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAgICAgICAgQmFnPEpJVEFkZElDPiBtX2FkZElD
czsKLSAgICAgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKLSAgICAgICAgQmFnPEpJVE5lZ0lD
PiBtX25lZ0lDczsKLSAgICAgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKICAgICAgICAgQmFn
PENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgICAgICBTZW50aW5lbExpbmtlZExp
c3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9p
bmNvbWluZ0NhbGxzOwogICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBoaWNDYWxs
Tm9kZSwgUGFja2VkUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29t
aW5nUG9seW1vcnBoaWNDYWxsczsKLSAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxl
PiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJs
ZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENU
b0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXND
YWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1h
cDsKKworICAgICAgICBGaXhlZFZlY3Rvcjx2b2lkKj4gbV9qaXRDb25zdGFudFBvb2w7CisgICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwgbV9qaXRDb25zdGFudFBvb2wpOyB9CiAgICAgfTsKIAor
ICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29k
ZT4pOworCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkKQEAgLTI5
MywyMiArMjgyLDcgQEAgcHVibGljOgogICAgIH0KICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRh
U2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAotICAgIEpJVEFkZElDKiBhZGRKSVRB
ZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLSAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQ
cm9maWxlKik7Ci0gICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSop
OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+
Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2Zp
bGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlw
ZT4KLSAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkg
eyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
YW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVE5l
Z0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJ
VE5lZ0lDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3Is
IEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRTdWJJQyogYWRkTWF0aElD
KEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmls
ZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURGF0YSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RGF0YSk7IH0KIAogICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlLCBDb2RlT3JpZ2luKTsKIApAQCAtMzIyLDE4
ICsyOTYsOCBAQCBwdWJsaWM6CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAg
dG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgogICAgIENhbGxMaW5rSW5mbyog
Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICAKLSAg
ICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29kZU1hcCYmIGppdENvZGVNYXApCi0gICAgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOwotICAgIH0K
LSAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCkKLSAgICB7Ci0gICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX2ppdENvZGVNYXA7Ci0gICAgfQorICAgIGNvbnN0IEpJVENvZGVNYXAmIGpp
dENvZGVNYXAoKTsKIAotICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVf
cHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+
IGZpbmRQQyh2b2lkKiBwYyk7CiAKICAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVn
aXN0ZXJTZXQpOwpAQCAtNDcyLDEwICs0MzYsMTIgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIG5h
bWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQogICAgIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFy
YW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICAgICAgcmV0dXJuIG1fYXJndW1l
bnRWYWx1ZVByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgCiAgICAgfQogCiAgICAgVmFsdWVQcm9m
aWxlJiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudEluZGV4KQpAQCAt
NTY5LDggKzUzNSwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
czsgfQogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVh
bFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9D
b25zdGFudEluZGV4KCldLmdldCgpOyB9CisgICAgYm9vbCBpc0NvbnN0YW50T3duZWRCeVVubGlu
a2VkQ29kZUJsb2NrKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0OwogICAgIEFMV0FZU19JTkxJ
TkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5j
b25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihyZWcpOyB9CiAgICAgQUxXQVlTX0lOTElO
RSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5jb25zdGFu
dFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihpbmRleCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KENvZGVCbG9jaywgbV9jb25zdGFudFJlZ2lzdGVycykgKyBkZWNsdHlwZShtX2NvbnN0YW50UmVn
aXN0ZXJzKTo6ZGF0YU1lbW9yeU9mZnNldCgpOyB9CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0u
Z2V0KCk7IH0KICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5j
dGlvbkRlY2xzLnNpemUoKTsgfQpAQCAtNTk1LDIyICs1NjMsMjIgQEAgcHVibGljOgogICAgIC8v
IEp1bXAgVGFibGVzCiAKICNpZiBFTkFCTEUoSklUKQotICAgIFNpbXBsZUp1bXBUYWJsZSYgc3dp
dGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorICAgIFNpbXBsZUp1bXBUYWJsZSYgYmFzZWxp
bmVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYg
YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIHZvaWQq
IGJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1faml0RGF0YSk7Ci0gICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhICYmIGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIHJldHVybiBtX2ppdERhdGEt
Pm1faml0Q29uc3RhbnRQb29sLmRhdGEoKTsKICAgICB9CiAjZW5kaWYKICAgICBzaXplX3QgbnVt
YmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOyB9CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIFN0cmluZ0p1bXBUYWJsZSYgc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQotICAgIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwotICAgIH0KKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBTdHJpbmdKdW1wVGFibGUmIGRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBkZmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxl
SW5kZXgpOwogI2VuZGlmCisKICAgICBzaXplX3QgbnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZVbmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgfQogICAgIGNvbnN0IFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlJiB1bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkg
eyByZXR1cm4gbV91bmxpbmtlZENvZGUtPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOyB9CiAKQEAgLTYzMiwyMSArNjAwLDIwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxp
bnRFeGVjdXRlQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKKyAg
ICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y2hlY2tJZlRocmVzaG9sZENyb3Nz
ZWRBbmRTZXQodGhpcyk7CiAgICAgfQogCiAgICAgdm9pZCBkb250SklUQW55dGltZVNvb24oKQog
ICAgIHsKLSAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7
CisgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+ZGVmZXJJbmRlZmluaXRlbHkoKTsKICAg
ICB9CiAKLSAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7Ci0g
ICAgdm9pZCBqaXRBZnRlcldhcm1VcCgpOwogICAgIHZvaWQgaml0U29vbigpOworICAgIHZvaWQg
aml0TmV4dEludm9jYXRpb24oKTsKIAogICAgIGNvbnN0IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRl
ciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9s
bGludEV4ZWN1dGVDb3VudGVyOworICAgICAgICByZXR1cm4gKm1fbGxpbnRFeGVjdXRlQ291bnRl
cjsKICAgICB9CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8c3RkOjp0dXBsZTxTdHJ1Y3R1cmVJRCwg
dW5zaWduZWQ+LCBGaXhlZFZlY3RvcjxMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQ+PiBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwOwpAQCAtNzk3LDYgKzc2NCw3IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGVidWdnZXJSZXF1ZXN0cygpIGNvbnN0IHsgcmV0dXJu
IG1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNz
KCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVC
bG9jaywgbV9kZWJ1Z2dlclJlcXVlc3RzKTsgfQogCiAgICAgdm9pZCBhZGRCcmVha3BvaW50KHVu
c2lnbmVkIG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQodW5zaWdu
ZWQgbnVtQnJlYWtwb2ludHMpCkBAIC04MzgsNiArODA2LDcgQEAgcHVibGljOgogICAgIG11dGFi
bGUgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiAKICAgICBib29sIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkOyAvLyBOb3QgYSBiaXRmaWVsZCBiZWNhdXNlIHRoZSBKSVQgd2FudHMgdG8gc3RvcmUg
dG8gaXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5l
ZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkKTsgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICB1bnNpZ25lZCBtX2NhcGFiaWxpdHlM
ZXZlbFN0YXRlIDogMjsgLy8gREZHOjpDYXBhYmlsaXR5TGV2ZWwKQEAgLTkwNywxNiArODc2LDEy
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0YWRhdGFUYWJsZSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpOyB9
CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkK
LSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBj
b21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0gICAgICAgIHJldHVybiAhbV91bmxpbmtlZENv
ZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAgfQorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxp
Z2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bG9v
cEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKTsgfQogCiBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CiAjaWYgRU5BQkxFKEpJVCkK
LSAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKKyAgICB2b2lkIGZp
bmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKQEAgLTEwMTAsNyArOTc1LDkgQEAgcHJp
dmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2lu
dE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitw
dWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6
CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRv
IG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9j
awpAQCAtMTAyOSw3ICs5OTYsNyBAQCBwcml2YXRlOgogCiAgICAgV3JpdGVCYXJyaWVyPENvZGVC
bG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIg
bV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciogbV9s
bGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9OwogCiAgICAgQmFzZWxpbmVFeGVjdXRpb25D
b3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAgICAgdWludDMyX3QgbV9vc3JFeGl0Q291bnRl
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
a0lubGluZXMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTAg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNs
dWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRl
ICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkgKzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZv
ckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJ
U0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8m
IG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9wcm9maWxlLCBmYWxzZSk7IH0pOwotCiAgICAg
ICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJTEUoVklTSVQpCi0KICN1bmRlZiBW
SVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck9wZW4+KFsmXSAo
YXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1Nyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JF
YWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVBy
b2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwzOCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFj
aExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZU19J
TkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJsb2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAgICBB
U1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFw
OworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGlu
ZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxp
bmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNl
bGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQo
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK0FM
V0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmRmZ1N3aXRjaEp1bXBUYWJs
ZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkRG
R0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6SklUQ29kZSo+KG1faml0Q29kZS5n
ZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKworQUxXQVlTX0lOTElO
RSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGlu
dCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklU
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgp
KS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9j
ayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRB
Y3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAgYm9vbCBFeGVjdXRpb25Db3VudGVy
PGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB0
aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQpOworICAgIHRocmVzaG9sZCA9IGNsaXBwZWRU
aHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAgICBtX2NvdW50ZXIgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9yY2VTbG93
UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRoaXMsIGNoZWNrSWZUaHJlc2hvbGRD
cm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxzZS4KICAgICBib29sIGNoZWNrSWZU
aHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwogICAgIGJvb2wgaGFzQ3Jvc3NlZFRo
cmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlciA+PSAwOyB9Ci0gICAgdm9pZCBzZXRO
ZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayopOworICAgIHZvaWQgc2V0
TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2RlQmxvY2sqID0gbnVsbHB0cik7CiAg
ICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwogICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENvdW50KSArIG1fY291bnRlcjsgfQog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpAQCAtODYsMTMgKzg2LDkgQEAgcHVi
bGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBU
IGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVCB0aHJlc2hv
bGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChUIHRocmVzaG9sZCkKICAgICB7Ci0g
ICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwotICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9t
aXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCkgJiYgZ2xvYmFsT2JqZWN0KQot
ICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2JqZWN0LT53ZWFrUmFuZG9tSW50ZWdl
cigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRz
QmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkID0gbWF4
aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwogICAgICAgICBpZiAodGhy
ZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAgICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNo
b2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhVW5z
ZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0KSA9PSAx
Mik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggeworICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBhcnJheVByb2ZpbGUpOyB9CiAgICAg
QXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRC
eUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsKQEAgLTg4LDYgKzg5LDcgQEAgdW5p
b24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRNb2RlIG1vZGU7CiAgICAg
ICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7IC8vIFRoaXMgbXVzdCBiZSB6ZXJv
IHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRh
ZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhRGVmYXVsdCBkZWZhdWx0TW9k
ZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5zZXRNb2RlOwogICAgIEdldEJ5SWRN
b2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1vZGU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6
Y29tcHV0ZUZvclN0dWJJCiAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhOb0luZm9ybWF0aW9u
KTsKICAgICAgICAgCiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOiB7Ci0gICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZShwcm9maWxlZEJsb2NrLT52bSgpKTsKICAgICAgICAgaWYg
KHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKICAgICAg
ICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1
YkluZm8pOwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5m
by0+aWRlbnRpZmllcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5
LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgogICAgICAgICBy
ZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJ
bkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPm1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSk7CiAgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAg
ICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3Bw
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5s
aW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsMTYgQEAgQUxXQVlT
X0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1Yklu
Zm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBp
ZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNs
b3RzIGdldCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAKICAgICBHUFJSZWcgYmFz
ZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0yMzMsMjMgKzIzOCwzMSBAQCBBTFdBWVNfSU5MSU5F
IHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3RlCiAgICAgcmV0dXJuIGdldFNjcmF0Y2hSZWdpc3Rl
cihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJlZzsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmNh
bkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1
cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCitib29sIElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZp
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQ
cm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkpOworICAgIEFTU0VSVChjYW5HZW5lcmF0
ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2Zmc2V0KSk7CisKKyAg
ICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBzbG90cyBn
ZXQgZmlsbGVkIGluLiBOb3RoaW5nIGVsc2UgdG8gZG8uCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KIAogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKQEAgLTI3OSwyMiArMjkyLDI1IEBAIGJv
b2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVIKICAgICByZXR1cm4gbGlua2Vk
Q29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5n
dGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKK2Jvb2wgSW5s
aW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQogewogICAgIEFTU0VS
VChhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKIAogICAgIGlmICghc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAo
Y29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKwogICAgIGlmICghaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFoYXNBbnlBcnJheVN0b3JhZ2UoYXJyYXkt
PmluZGV4aW5nVHlwZSgpKSAmJiBhcnJheS0+aW5kZXhpbmdUeXBlKCkgIT0gQXJyYXlDbGFzczsK
IH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQogewotICAgIEFTU0VSVChpc0NhY2hlYWJsZUFycmF5
TGVuZ3RoKHN0dWJJbmZvLCBhcnJheSkpOworICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBp
c0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGFycmF5KSk7CiAKICAg
ICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMzE5LDE3ICszMzUsMjAgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJy
YXlMZW5ndGgoUwogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCi1ib29sIElubGlu
ZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgaWYgKCFz
dHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAor
ICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIGhhc0ZyZWVSZWdpc3RlcihzdHViSW5m
byk7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdM
ZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
IHsKLSAgICBBU1NFUlQoaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pKTsKKyAgICBB
U1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoY29kZUJsb2Nr
LCBzdHViSW5mbykpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM2MywxMyArMzgyLDE4IEBAIGJvb2wgSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aCgKIH0KIAogCi1ib29sIElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
IGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIFRoZXNlIHNsb3RzIGdl
dCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5mby5iYXNlR1BSOwogICAgIEpTVmFsdWVS
ZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAKQEAgLTQwNiw3ICs0MzAsNyBAQCB2
b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgaWYgKGNvZGVCbG9j
ay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgLy8gSWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10
aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQgKGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAv
LyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGlyZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdl
IHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2RlUHRyLgotICAgICAgICBpZiAoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUo
KSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZp
ZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29kZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5m
by5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMgbWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29k
ZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAgICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRo
IHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNvZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5n
IGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1f
Y29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2Nh
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CkBAIC00MjEsNyArNDQ1LDkgQEAgdm9pZCBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgICAgICAgICAgICAgIH0pLCAiSW5s
aW5lQWNjZXNzOiBsaW5raW5nIHN0dWIgY2FsbCIpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CisKICAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gdGFyZ2V0OworICAgICAgICBzdHViSW5m
by5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOyAvLyBDbGVhciBvdXQgdGhlIGlubGlu
ZSBhY2Nlc3MgY29kZS4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDM0LDggKzQ2MCwx
NCBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgfSksICJJ
bmxpbmVBY2Nlc3M6IGxpbmtpbmcgY29uc3RhbnQganVtcCIpOwogfQogCi12b2lkIElubGluZUFj
Y2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQordm9pZCBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNz
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Cisg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkgJiYgY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gc3R1
YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgICAgICBzdHViSW5mby5tX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOyAvLyBDbGVhciBvdXQgdGhlIGlubGluZSBhY2Nlc3MgY29k
ZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIENDYWxsSGVscGVyczo6ZW1pdEpJVENv
ZGVPdmVyKHN0dWJJbmZvLnN0YXJ0LnJldGFnZ2VkPEpTSW50ZXJuYWxQdHJUYWc+KCksIHNjb3Bl
ZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPihbJl0oQ0NhbGxIZWxwZXJzJiBqaXQpIHsKICAg
ICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhIG5vcCBzbGVkIGhlcmUgYmVjYXVzZSBub2JvZHkgc2hv
dWxkIGJlIGp1bXBpbmcgaW50byB0aGUgbWlkZGxlIG9mIGFuIElDLgogICAgICAgICBhdXRvIGp1
bXAgPSBqaXQuanVtcCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
bGluZUFjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxNCArOTks
MTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RkOjptYXgoc2l6ZSwgc2l6ZUZvclByb3Bl
cnR5QWNjZXNzKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3Bl
cnR5QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQp
OwotICAgIHN0YXRpYyBib29sIGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1
cmVTdHViSW5mbyYsIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0
eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVBcnJheUxlbmd0aChTdHJ1Y3R1
cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZVN0cmlu
Z0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlQXJy
YXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7Ci0gICAgc3RhdGljIGJvb2wg
Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqKTsKLSAg
ICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYpOwor
ICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRp
YyBib29sIGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1
cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVBcnJheUxl
bmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0
aWMgYm9vbCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiwg
U3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVT
ZWxmSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqKTsK
KyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwogCiAgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4pOwogICAgIHN0YXRpYyB2b2lkIHJl
d2lyZVN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRl
cmF0aW9uTW9kZU1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgT1ZF
UkxPQURfQklUV0lTRV9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBUwogCiBzdHJ1Y3QgSXRlcmF0aW9u
TW9kZU1ldGFkYXRhIHsKICAgICB1aW50OF90IHNlZW5Nb2RlcyB7IDAgfTsKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2Vlbk1vZGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEl0
ZXJhdGlvbk1vZGVNZXRhZGF0YSwgc2Vlbk1vZGVzKTsgfSAKICAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihkZWNsdHlwZShzZWVuTW9kZXMpKSA9PSBzaXplb2YoSXRlcmF0aW9uTW9kZSkpOwogfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2Fs
bExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBBcnJheVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihMTEludENhbGxMaW5rSW5mbywgbV9hcnJheVByb2ZpbGUpOyB9CiAKIHByaXZh
dGU6CiAgICAgdWludHB0cl90IG1fY2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsg
dW5saW5rZWRCaXQgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRh
ZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L01ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUs
MTQgQEAgcHVibGljOgogICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEpOwogICAgIH0KIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAgIEFMV0FZU19JTkxJTkUgc2l6ZV90IG51bUVudHJp
ZXMoKQorICAgIHsKKyAgICAgICAgYXV0byogc3RhcnQgPSBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUg
T3A6Ok1ldGFkYXRhKj4oZ2V0KE9wOjpvcGNvZGVJRCkpOworICAgICAgICBhdXRvKiBlbmQgPSBi
aXR3aXNlX2Nhc3Q8dHlwZW5hbWUgT3A6Ok1ldGFkYXRhKj4oZ2V0SW1wbChPcDo6b3Bjb2RlSUQg
KyAxKSk7CisgICAgICAgIHJldHVybiBlbmQgLSBzdGFydDsKKyAgICB9CisKICAgICBzaXplX3Qg
c2l6ZUluQnl0ZXMoKTsKIAogICAgIHZvaWQgcmVmKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgwLDEwICsxODAsMTAgQEAgUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1
dGVGb3JTdHViSQogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHVi
SW5mby0+aWRlbnRpZmllcigpOwogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRl
bnRpZmllci51aWQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodWlkKTsKLSAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHByb2ZpbGVk
QmxvY2stPnZtKCkpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQp
KQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50
aWZpZXIpLCBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZz
ZXQpOworICAgICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlk
ZW50aWZpZXIpLCBzdHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwogICAgIH0KICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiAjaW5jbHVkZSAiQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oIgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVwYXRj
aC5oIgogCkBAIC02NSw5ICs2Niw5IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRC
eUlkU2VsZigKICAgICBBU1NFUlQoaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKICAgICBzZXRDYWNo
ZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIg
PSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAg
Y29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlk
U2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAK
IHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRBcnJheUxlbmd0aChjb25zdCBDb25jdXJyZW50
SlNMb2NrZXJCYXNlJiBsb2NrZXIpCkBAIC04Nyw5ICs4OCw5IEBAIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OmluaXRQdXRCeUlkUmVwbGEKICAgICBBU1NFUlQobV9jYWNoZVR5cGUgPT0gQ2FjaGVU
eXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpQdXRCeUlk
UmVwbGFjZSk7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndyaXRlQmFy
cmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5
SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0
SW5CeUlkU2VsZihjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKQpAQCAtOTcs
OSArOTgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0SW5CeUlkU2VsZihjCiAgICAg
QVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENhY2hlVHlw
ZShsb2NrZXIsIENhY2hlVHlwZTo6SW5CeUlkU2VsZik7CiAgICAgbV9pZGVudGlmaWVyID0gaWRl
bnRpZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRl
QmFycmllcihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVC
bG9jay0+dm0oKS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYu
b2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCkBAIC0yMzYsNyArMjM3LDcgQEAgQWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbwogICAgICAgICAvLyB3ZSdyZSBidWZmZXJl
ZCBpcyBiZWNhdXNlIHdlIHJlbHkgb24gaXQgdG8gcmVzZXQgZHVyaW5nIEdDIGlmIG1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZQogICAgICAgICAvLyBpcyBjb2xsZWN0ZWQuCiAgICAgICAgIG1f
aWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS5jbGVhcigpOworICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOwogICAg
ICAgICAKICAgICAgICAgLy8gSWYgd2UgZ2VuZXJhdGVkIHNvbWUgY29kZSB0aGVuIHdlIGRvbid0
IHdhbnQgdG8gYXR0ZW1wdCB0byByZXBhdGNoIGluIHRoZSBmdXR1cmUgdW50aWwgd2UKICAgICAg
ICAgLy8gZ2F0aGVyIGVub3VnaCBjYXNlcy4KQEAgLTI1MSw3ICsyNTIsNyBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiB7CiAgICAgY2xlYXJCdWZmZXJlZFN0cnVj
dHVyZXMoKTsKICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwotICAgIG1faW5saW5lQWNjZXNz
QmFzZVN0cnVjdHVyZS5jbGVhcigpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9
IDA7CiAKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCkKICAgICAgICAg
cmV0dXJuOwpAQCAtMjg1LDYgKzI4Niw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0
KGNvbnN0IENvbmMKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtp
bmQ6OkJ5SWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CiAgICAgICAgIHJlc2V0UHV0
QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZhbCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgpAQCAtMzYwLDggKzM2Miw4IEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICB9CiAKICAgICBib29sIGlzVmFs
aWQgPSB0cnVlOwotICAgIGlmIChtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCi0gICAgICAg
IGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUu
Z2V0KCkpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUodm0pKQorICAgICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNNYXJrZWQoc3RydWN0
dXJlKTsKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICBp
c1ZhbGlkICY9IHUuc3R1Yi0+dmlzaXRXZWFrKHZtKTsKIApAQCAtMzc1LDggKzM3Nyw4IEBAIHZv
aWQgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmIChtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUp
Ci0gICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRv
cik7CisgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSh2aXNpdG9yLnZtKCkpKQorICAgICAgICBzdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0
b3IpOwogCiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikKICAgICAgICAg
dS5zdHViLT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKQEAgLTQzMCw2ICs0MzIsMjA0
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6c2UKICAgICBtX2NhY2hl
VHlwZSA9IG5ld0NhY2hlVHlwZTsKIH0KIAordm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlh
bGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8pCit7CisgICAgYWNjZXNzVHlwZSA9IHVu
bGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZTsKKyAgICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8u
c3RhcnQ7CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5kb25lTG9jYXRpb247
CisgICAgc2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5zbG93UGF0aFN0
YXJ0TG9jYXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKTsKKyAgICBjb2Rl
T3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAg
IG1fY29kZVB0ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKworICAgIHVzZWRSZWdpc3RlcnMg
PSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgaWYgKGFjY2Vz
c1R5cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2Rl
SW5kZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZvciBpdGVyYXRvcl9uZXh0LCB3ZSBj
YW4ndCBjbG9iYmVyIHRoZSAiZG9udENsb2JiZXJSZWdpc3RlciIgcmVnaXN0ZXIgZWl0aGVyLgor
ICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRD
bG9iYmVyUmVnaXN0ZXIpOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAg
IGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNl
T2Y6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5
R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJl
Y3Q6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRo
aXM6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVO
YW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
QnJhbmQ6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJh
bmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2
YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJ
ZDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5m
by5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0
aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6
CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQor
ICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRE
ZWZpbmU6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVm
aW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1Yklu
Zm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAg
ICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1Yklu
Zm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gdW5saW5rZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRL
aW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGlt
aXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpE
ZWxldGVCeUlEOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdz
LnByb3BlcnR5R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2Vs
aW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFt
ZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3Bl
cnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZh
bHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3Qg
PSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
dmFsdWU7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgICAgIHJlZ3MucHJvdG90eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjpwcm90bzsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRl
bnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
SW5CeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBy
ZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpUcnlHZXRCeUlkOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9
IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJh
c2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9H
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CisgICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBpZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQ
dXRCeVZhbCkKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpTZXRQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFu
ZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVl
R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKICNpZiBBU1NFUlRfRU5BQkxFRAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y2hlY2tD
b25zaXN0ZW5jeSgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlB1dEtp
bmQuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgpAQCAtNTYsNiArNTcsNyBAQCBlbnVtIGNsYXNzIEFj
Y2Vzc1R5cGUgOiBpbnQ4X3QgewogICAgIEdldEJ5VmFsLAogICAgIFB1dEJ5SWQsCiAgICAgUHV0
QnlWYWwsCisgICAgUHV0UHJpdmF0ZU5hbWUsCiAgICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAg
ICAgSGFzUHJpdmF0ZU5hbWUsCkBAIC03OCw2ICs4MCw4IEBAIGVudW0gY2xhc3MgQ2FjaGVUeXBl
IDogaW50OF90IHsKICAgICBTdHJpbmdMZW5ndGgKIH07CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvOworCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1YkluZm8pOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpAQCAtOTgsNiArMTAyLDggQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2
b2lkIGFib3V0VG9EaWUoKTsKIAorICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mKTsKKwog
ICAgIERFQ0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIg
aGFzIHdlYWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJl
c2V0cyBpdHNlbGYsCkBAIC0zMjUsMTMgKzMzMSwxOSBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAg
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOworICAgIFByb3BlcnR5T2Zmc2V0IGJ5SWRTZWxmT2Zm
c2V0OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgYnlJZFNlbGZPZmZzZXQpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSk7IH0KICAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgICAgIH0gYnlJZFNlbGY7CiAgICAg
ICAgIFBvbHltb3JwaGljQWNjZXNzKiBzdHViOwogICAgIH0gdTsKLSAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlKiBp
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIGlmICghbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiB2bS5nZXRTdHJ1Y3R1cmUobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
KTsKKyAgICB9CisgICAgU3RydWN0dXJlSUQgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlIHsg
MCB9OwogcHJpdmF0ZToKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAg
ICAvLyBSZXByZXNlbnRzIHRob3NlIHN0cnVjdHVyZXMgdGhhdCBhbHJlYWR5IGhhdmUgYnVmZmVy
ZWQgQWNjZXNzQ2FzZXMgaW4gdGhlIFBvbHltb3JwaGljQWNjZXNzLgpAQCAtNDQ3LDYgKzQ1OSwx
NyBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQog
CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHBy
aXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkgfTsKKyAgICBF
Q01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpzbG9wcHkoKSB9OworICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElD
IGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3Ig
J2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVj
dHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVy
U2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N1cGVyU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4
NCw3IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJTdGF0ZSgpCiAgICAgZG91YmxlIHBlcmNlbnRh
Z2UgPSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsKICAgICBpZiAocGVyY2VudGFnZSAhPSBwZXJj
ZW50YWdlKQogICAgICAgICBwZXJjZW50YWdlID0gMC4wOwotICAgIGRhdGFMb2coIlBlcmNlbnQg
dGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiXG4iKTsKKyAg
ICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVy
Y2VudGFnZSwgIiVcbiIpOwogfQogCiB2b2lkIGVuYWJsZVN1cGVyU2FtcGxlcigpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
IAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJ
VENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKICNpbmNsdWRl
ICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKQEAgLTc4LDYgKzc5
LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgICAgICBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tlcik7CiAgICAgICAgIG1fcmFyZURhdGEtPm1f
cHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJpdmF0ZUJy
YW5kUmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAgfQorCisgICAgbV9sbGludEV4ZWN1dGVDb3Vu
dGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9y
SklUQWZ0ZXJXYXJtVXAoKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpAQCAt
MzE2LDYgKzMxOSw0OCBAQCBpbnQgVW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZz
CiAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsK
IH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECitib29sIFVubGlua2VkQ29kZUJsb2NrOjpoYXNJZGVu
dGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgaWYgKG51bWJlck9mSWRlbnRp
ZmllcnMoKSA+IDEwMCkgeworICAgICAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpICE9IG1f
Y2FjaGVkSWRlbnRpZmllclVpZHMuc2l6ZSgpKSB7CisgICAgICAgICAgICBMb2NrZXIgbG9ja2Vy
KG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrKTsKKyAgICAgICAgICAgIEhhc2hTZXQ8VW5pcXVl
ZFN0cmluZ0ltcGwqPiBjYWNoZWRJZGVudGlmaWVyVWlkczsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSB0aGlzLT5pZGVudGlmaWVyKGkp
OworICAgICAgICAgICAgICAgIGNhY2hlZElkZW50aWZpZXJVaWRzLmFkZChpZGVudGlmaWVyLmlt
cGwoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgICAgICAgICBtX2NhY2hlZElkZW50aWZpZXJVaWRzID0gV1RGTW92ZShjYWNoZWRJ
ZGVudGlmaWVyVWlkcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9jYWNoZWRJZGVu
dGlmaWVyVWlkcy5jb250YWlucyh1aWQpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRp
ZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitpbnQzMl90IFVubGlua2VkQ29kZUJsb2Nr
Ojp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRP
cHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAg
cmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0
dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0
dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2Nh
dGVTaGFyZWRQcm9maWxlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWV0YWRhdGEtPmlz
RmluYWxpemVkKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSwxMCArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBcml0aFByb2Zp
bGUuaCIKICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZl
bnRpb25zLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmls
ZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9u
UmFuZ2VJbmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJJZGVudGlm
aWVyLmgiCkBAIC02NCw2ICs2Niw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3Mg
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGluZUpJ
VENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29uc3Rh
bnQgOiBpbnQzMl90OwogCkBAIC0xNzUsNiArMTc4LDcgQEAgcHVibGljOgogCiAgICAgY29uc3Qg
Rml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0K
ICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJl
ZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4
KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIxMSwxNSBAQCBw
dWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAg
IGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7
IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgeworICAg
ICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDAp
LnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGlu
c3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9u
IDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1
Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25z
dCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51bUNh
bGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5z
aWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDEwICsz
NDcsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tZXRhZGF0YS0+c2l6ZUluQnl0ZXMo
KTsKICAgICB9CiAKKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCkKKyAgICB7CisgICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRv
IGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCisgICAgICAgIHJldHVybiAhaXNC
dWlsdGluRnVuY3Rpb24oKTsKKyAgICB9CiAgICAgdm9pZCBhbGxvY2F0ZVNoYXJlZFByb2ZpbGVz
KCk7CiAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUmIHVubGlua2VkVmFsdWVQcm9maWxlKHVuc2ln
bmVkIGluZGV4KSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9CiAgICAgVW5saW5r
ZWRBcnJheVByb2ZpbGUmIHVubGlua2VkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJl
dHVybiBtX2FycmF5UHJvZmlsZXNbaW5kZXhdOyB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAg
IGJvb2wgaGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOworI2VuZGlmCisKKyAgICBp
bnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7CisKIHByb3RlY3RlZDoK
ICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBF
eGVjdXRhYmxlSW5mbyYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+KTsKIApAQCAtMzk3
LDYgKzQyMSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJl
cyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRy
PEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAg
Q29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFy
c2VNb2RlOwpAQCAtNDEzLDYgKzQzOCw5IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCisgICAgLy8gT09QUzogZmlu
ZCBhIGJldHRlciBwbGFjZSB0byBzdG9yZSB0aGlzIHN0dWZmPworICAgIFZlY3RvcjxCaW5hcnlB
cml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBWZWN0b3I8VW5hcnlBcml0
aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2ZpbGVzOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtNDU4LDYgKzQ4NiwzMCBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVj
dGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0
IEluc3RydWN0aW9uKiBwYykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVt
cE9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkQmluYXJ5
QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fYmluYXJ5
QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcy5hcHBl
bmQoQmluYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIHVuc2lnbmVkIGFkZFVuYXJ5QXJpdGhQcm9maWxlKCkKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9IG1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgbV91
bmFyeUFyaXRoUHJvZmlsZXMuYXBwZW5kKFVuYXJ5QXJpdGhQcm9maWxlKCkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJp
dGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsg
fQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7
IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRp
b25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVD
b3VudGVyOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBI
YXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjUsOSArNTE3LDE1
IEBAIHByaXZhdGU6CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFy
Z2V0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4
ZWRWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIEZpeGVkVmVj
dG9yPFVubGlua2VkVmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CiAgICAgRml4ZWRWZWN0
b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+IG1fYXJyYXlQcm9maWxlczsKIAorI2lmIEFTU0VSVF9F
TkFCTEVECisgICAgTG9jayBtX2NhY2hlZElkZW50aWZpZXJVaWRzTG9jazsKKyAgICBIYXNoU2V0
PFVuaXF1ZWRTdHJpbmdJbXBsKj4gbV9jYWNoZWRJZGVudGlmaWVyVWlkczsKKyNlbmRpZgorCiBw
cm90ZWN0ZWQ6CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKICAgICBzdGF0aWMgc2l6ZV90
IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBA
QCBwdWJsaWM6CiAgICAgYm9vbCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMo
KTsgfQogICAgIGJvb2wgaGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay0+aGFzQ2hlY2twb2ludHMoKTsgfQogICAgIGJvb2wgaGFzVGFpbENhbGxzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2RlQmxvY2stPmhhc1RhaWxDYWxscygpOyB9CisgICAgdW5zaWduZWQgYWRkQmlu
YXJ5QXJpdGhQcm9maWxlKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmFkZEJpbmFyeUFyaXRoUHJv
ZmlsZSgpOyB9CisgICAgdW5zaWduZWQgYWRkVW5hcnlBcml0aFByb2ZpbGUoKSB7IHJldHVybiBt
X2NvZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKTsgfQogCiAgICAgLy8gVXBkYXRpbmcg
VW5saW5rZWRDb2RlQmxvY2suCiAgICAgdm9pZCBzZXRIYXNDaGVja3BvaW50cygpIHsgbV9jb2Rl
QmxvY2stPnNldEhhc0NoZWNrcG9pbnRzKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFk
YXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTUgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUpOwogICAgIH0K
IAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNldElu
TWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9p
czMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUx
NigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAgICBiYXNlVHlwZU9mZnNldCA9IHJvdW5kVXBU
b011bHRpcGxlT2YoYWxpZ25vZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSwgYmFzZVR5cGVP
ZmZzZXQpOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YodHlwZW5hbWUg
T3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KICAgICB1bnNpZ25lZCBudW1FbnRyaWVzKCk7CiAK
QEAgLTEwNyw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc19vZmZzZXQxNlRh
YmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAgICAg
dXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSwxMyArNDUsMTEgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogCiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1
bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNr
ZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9
IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3Rh
bE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNr
ZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQogICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCi0gICAgICAgICAg
ICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgY2xl
YXJCdWNrZXRzKCk7CiAgICAgfQogICAgIAogICAgIEVuY29kZWRKU1ZhbHVlKiBzcGVjRmFpbEJ1
Y2tldCh1bnNpZ25lZCBpKQpAQCAtNTksNiArNTcsMTIgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJh
c2UgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZCdWNrZXRzICsgaSA8IHRvdGFsTnVtYmVyT2ZC
dWNrZXRzKTsKICAgICAgICAgcmV0dXJuIG1fYnVja2V0cyArIG51bWJlck9mQnVja2V0cyArIGk7
CiAgICAgfQorCisgICAgdm9pZCBjbGVhckJ1Y2tldHMoKQorICAgIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCisgICAgICAgICAg
ICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICB9CiAgICAg
CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8odW5zaWduZWQgYnVja2V0KSBjb25zdAog
ICAgIHsKQEAgLTEyMyw4ICsxMjcsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0
dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8v
IHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kp
IHsKQEAgLTEzOSw3ICsxNDEsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29k
ZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxh
dGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTYxLDYgKzE2Myw3IEBAIHN0
cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJv
ZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAg
ICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4o
KSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBz
dHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmls
ZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OTgsNyArMTU5OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0VW5hcnkKICAgICAgICAgZW1pdFVuYXJ5T3A8T3BOb3Q+KGRzdCwgc3JjKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIE9wTmVnYXRlOjplbWl0KHRo
aXMsIGRzdCwgc3JjLCB0eXBlKTsKKyAgICAgICAgT3BOZWdhdGU6OmVtaXQodGhpcywgZHN0LCBz
cmMsIHR5cGUsIG1fY29kZUJsb2NrLT5hZGRVbmFyeUFyaXRoUHJvZmlsZSgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBvcF9iaXRub3Q6CiAgICAgICAgIGVtaXRVbmFyeU9wPE9wQml0bm90
Pihkc3QsIHNyYyk7CkBAIC0xNjk2LDEzICsxNjk2LDEzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0VHlwZU8KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRJbmMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wSW5jOjplbWl0KHRoaXMsIHNyY0Rz
dCk7CisgICAgT3BJbmM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2NvZGVCbG9jay0+YWRkVW5hcnlB
cml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWMoUmVnaXN0ZXJJRCogc3JjRHN0KQogewotICAgIE9wRGVj
OjplbWl0KHRoaXMsIHNyY0RzdCk7CisgICAgT3BEZWM6OmVtaXQodGhpcywgc3JjRHN0LCBtX2Nv
ZGVCbG9jay0+YWRkVW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgcmV0dXJuIHNyY0RzdDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02ODIsNyArNjgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBSZWdpc3RlcklE
Kj4KICAgICAgICAgZW1pdEJpbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3Jj
MSwgUmVnaXN0ZXJJRCogc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBCaW5hcnlPcDo6ZW1pdCh0aGlzLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzKTsKKyAg
ICAgICAgICAgIEJpbmFyeU9wOjplbWl0KHRoaXMsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIG1f
Y29kZUJsb2NrLT5hZGRCaW5hcnlBcml0aFByb2ZpbGUoKSk7CiAgICAgICAgICAgICByZXR1cm4g
ZHN0OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRl
ICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKQEAgLTM0LDcgKzM1LDkgQEAKICNpbmNsdWRlICJERkdK
dW1wUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIklu
bGluZUNhbGxGcmFtZVNldC5oIgorI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpT
Q2FzdC5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiUHJvZmls
ZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIlJlY29yZGVkU3RhdHVzZXMuaCIKICNpbmNsdWRl
IDx3dGYvQmFnLmg+CkBAIC03MCw3ICs3Myw3IEBAIHN0cnVjdCBXZWFrUmVmZXJlbmNlVHJhbnNp
dGlvbiB7CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV90bzsKIH07CiAgICAgICAgIAotY2xh
c3MgQ29tbW9uRGF0YSB7CitjbGFzcyBDb21tb25EYXRhIDogcHVibGljIE1hdGhJQ0hvbGRlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CiBwdWJsaWM6CiAgICAgQ29t
bW9uRGF0YSgpCkBAIC0xMTYsNiArMTE5LDcgQEAgcHVibGljOgogICAgIEZpeGVkVmVjdG9yPENv
ZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludD4gbV93YXRjaHBvaW50czsKICAgICBGaXhlZFZl
Y3RvcjxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50czsKICAgICBGaXhlZFZlY3RvcjxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQ+IG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50czsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7
CiAgICAgUmVjb3JkZWRTdGF0dXNlcyByZWNvcmRlZFN0YXR1c2VzOwogICAgIFZlY3RvcjxKdW1w
UmVwbGFjZW1lbnQ+IG1fanVtcFJlcGxhY2VtZW50czsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKIAorc3RydWN0IFNpbXBsZUp1bXBUYWJsZTsK
K3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKIG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBKSVRD
b21waWxlcjsKQEAgLTEwMSw2ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxD
b2RlT3JpZ2luPiBmaW5kUEMoQ29kZUJsb2NrKiwgdm9pZCogcGMpIGZpbmFsOwogCiAgICAgdXNp
bmcgRGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkc7CisKKyAgICBQQ1RvQ29k
ZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBjb21tb24u
bV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgSklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENvbXBpbGVyIHRvIGNhbGwgc2V0Q29kZVJl
ZigpLgpAQCAtMTQwLDYgKzE0NSw4IEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPEJ5dGVjb2RlSW5k
ZXgsIFRyaWdnZXJSZWFzb24+IHRpZXJVcEVudHJ5VHJpZ2dlcnM7CiAKICAgICBXcml0ZUJhcnJp
ZXI8Q29kZUJsb2NrPiBtX29zckVudHJ5QmxvY2s7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVt
cFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRh
YmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgdW5zaWduZWQgb3NyRW50cnlSZXRy
eTsKICAgICBib29sIGFiYW5kb25PU1JFbnRyeTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDEzICsxODUsMTIgQEAgdm9pZCBKSVRDb21w
aWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIAogICAgIG1fZ3JhcGgucmVnaXN0ZXJG
cm96ZW5WYWx1ZXMoKTsKIAotICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMuaXNFbXB0eSgpIHx8ICFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsK
LSAgICAgICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMpOwotICAgICAgICBpZiAoIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hK
dW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7Ci0gICAgfQor
ICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkp
OworICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpOwor
ICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKSAKKyAg
ICAgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fZ3Jh
cGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBpZiAoIW1fZ3JhcGgubV9zd2l0Y2hK
dW1wVGFibGVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJs
ZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKIAogICAgIGZvciAoQmFn
PFN3aXRjaERhdGE+OjppdGVyYXRvciBpdGVyID0gbV9ncmFwaC5tX3N3aXRjaERhdGEuYmVnaW4o
KTsgISFpdGVyOyArK2l0ZXIpIHsKICAgICAgICAgU3dpdGNoRGF0YSYgZGF0YSA9ICoqaXRlcjsK
QEAgLTE5OSwxMiArMTk4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYg
bGlua0IKICAgICAgICAgY2FzZSBTd2l0Y2hDaGFyOgogICAgICAgICBjYXNlIFN3aXRjaEltbTog
ewogICAgICAgICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkgewotICAgICAgICAgICAg
ICAgIEFTU0VSVChtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJ
bmRleCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N3
aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XS5pc0VtcHR5KCkpOwogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25zdCBV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgICAgIFNpbXBs
ZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRh
dGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUlu
ZGV4XTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2gu
YmxvY2stPmluZGV4XSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJsZS5t
X2N0aU9mZnNldHMuc2l6ZSgpID09IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUo
KSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsaW5rZWRUYWJsZS5tX2N0aU9mZnNl
dHMuc2l6ZSgpOyBqLS07KQpAQCAtMjE5LDEyICsyMTgsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6
bGluayhMaW5rQnVmZmVyJiBsaW5rQgogCiAgICAgICAgIGNhc2UgU3dpdGNoU3RyaW5nOiB7CiAg
ICAgICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJs
ZUluZGV4KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGUtPm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlzRW1wdHkoKSk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAg
ICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJp
bmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgICAgIFN0
cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlEZWZh
dWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNb
ZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCkgPT0gdW5saW5rZWRUYWJsZS5tX29m
ZnNldFRhYmxlLnNpemUoKSArIDEpOwogICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGxp
bmtlZFRhYmxlLm1fY3RpT2Zmc2V0cykKQEAgLTMzMyw3ICszMzIsNyBAQCB2b2lkIEpJVENvbXBp
bGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQotICAgICAgICBtX2NvZGVCbG9jay0+
c2V0UENUb0NvZGVPcmlnaW5NYXAobWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92
ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpKTsKKyAgICAgICAgbV9q
aXRDb2RlLT5jb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVP
cmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBsaW5rQnVmZmVy
KTsKIH0KIAogc3RhdGljIHZvaWQgZW1pdFN0YWNrT3ZlcmZsb3dDaGVjayhKSVRDb21waWxlciYg
aml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHN0YWNrT3ZlcmZsb3cpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk3LDcgKzk3LDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2FsbEZy
YW1lKgogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRU
eXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NF
UlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxp
bmVKSVQpOwotICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFTU0VS
VChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAKICAg
ICBpZiAoIU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9ERkcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcyLDkg
Kzc3Miw2IEBAIHZvaWQgT1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiAKICAgICAv
LyBUaGUgdGFnIHJlZ2lzdGVycyBhcmUgbmVlZGVkIHRvIG1hdGVyaWFsaXplIHJlY292ZXJpZXMg
YmVsb3cuCiAgICAgaml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CiAKLSAg
ICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgaml0LmNvcHlDYWxsZWVT
YXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwotCiAg
ICAgaWYgKGlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KSB7CiAgICAgICAgIEVu
Y29kZWRKU1ZhbHVlKiB0bXBTY3JhdGNoID0gc2NyYXRjaCArIG9wZXJhbmRzLnRtcEluZGV4KDAp
OwogICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uTWF0ZXJpYWxp
emVPU1JFeGl0U2lkZVN0YXRlKT4oJnZtLCAmZXhpdCwgdG1wU2NyYXRjaCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5o
IgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAj
aW5jbHVkZSAiSklULmgiCkBAIC0xMTksMTAgKzEyMCwxMCBAQCB2b2lkIGhhbmRsZUV4aXRDb3Vu
dHMoVk0mIHZtLCBDQ2FsbEhlbHBlCiAgICAgaW50MzJfdCBjbGlwcGVkVmFsdWU7CiAgICAgc3dp
dGNoIChqaXQuY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6REZH
SklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6OmNs
aXBwZWRUaHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKSwgdGFyZ2V0VmFs
dWUpOworICAgICAgICBjbGlwcGVkVmFsdWUgPSBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6OmNs
aXBwZWRUaHJlc2hvbGQodGFyZ2V0VmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJ
VFR5cGU6OkZUTEpJVDoKLSAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9u
Q291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgp
LCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9IFVwcGVyVGllckV4ZWN1dGlv
bkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQodGFyZ2V0VmFsdWUpOwogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
MzEzLDYgKzMxNCwxMCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJz
CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKICAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxs
ZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFz
ZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpKTsKICAg
ICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGNhbGxlZVNh
dmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3Rl
cnM6OnBiR1BSKSk7CisgICAgICAgIH0gZWxzZSBpZiAodHJ1ZUNhbGxlcikgeworICAgICAgICAg
ICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNv
ZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0
YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJs
b2NrLCBKSVQ6OnNfbWV0YWRhdGFHUFIpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmJhc2Vs
aW5lSklUQ29uc3RhbnRQb29sKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJh
c2VsaW5lQ29kZUJsb2NrLCBKSVQ6OnNfY29uc3RhbnRzR1BSKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCkBAIC00MDQsNiArNDA5LDkg
QEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwg
TExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOwogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRp
b24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0g
ZWxzZSB7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2Rl
QmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRhdGFHUFIpOworICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhp
dC0+YmFzZWxpbmVKSVRDb25zdGFudFBvb2woKSksIEpJVDo6c19jb25zdGFudHNHUFIpOworCiAg
ICAgICAgIGNvZGVCbG9ja0ZvckV4aXQtPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CiAKICAg
ICAgICAgQnl0ZWNvZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCk7CkBAIC00MjAsMTIgKzQyOCwxNiBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1Rhcmdl
dChWTSYgdm0sIENDYWxsCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dl
ZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCi0gICAgaml0
LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9m
ZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKKyAgICAgICAgQVNTRVJUKCFS
ZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29udGFpbnMoTExJbnQ6OlJlZ2lz
dGVyczo6cGNHUFIpKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUsIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0
U2NyYXRjaEdQUihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikpOworCiAgICAgICAgIC8vIFNpbmNl
IHdlJ3JlIGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNh
dGNoLgogICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZt
LmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOwogICAgIH0KLSAgICAKKworICAgIGppdC5h
ZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFja1BvaW50ZXJPZmZz
ZXRGb3IoY29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
CiAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQp
LCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4
aXRQdHJUYWcpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1
bWVudHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVy
LmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgpAQCAtMjg2OSw3ICsyODcwLDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkZpbmRTdwogICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5kZmdT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5pc0RvdWJsZSgpKTsKICAg
ICBkb3VibGUgYXNEb3VibGUgPSB2YWx1ZS5hc0RvdWJsZSgpOwpAQCAtMjg5MCw3ICsyODkxLDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogCiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2st
PmRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICByZXR1cm4gbGlua2Vk
VGFibGUuY3RpRm9yVmFsdWUoKnVubGlua2VkVGFibGUsIHN0ckltcGwpLmV4ZWN1dGFibGVBZGRy
ZXNzPGNoYXIqPigpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTczMCw2ICs3MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292
ZXJ5OjppblBhaXIoY2FsbGVlVGFnR1BSLCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICAgICAgICAg
IHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAg
c2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBz
aHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFy
Z3M7ICsraSkgewogICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCku
dmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwpAQCAtODg5LDcgKzg5MCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRH
UFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nh
c2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIs
IFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAg
ICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAg
ICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZv
clRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgz
NCw2ICs4MzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxs
ZWVHUFIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6
ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFy
Z3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVy
cyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsK
ICAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxk
KG5vZGUsIGkgKyAxKTsKQEAgLTk4NSw3ICs5ODYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0lu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0g
ewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAg
ICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFy
ZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5ODUs
NyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmEKICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwogCiAg
ICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwg
SklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpE
RkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwg
dXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VHUFIp
LCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIEludmFs
aWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CiAKQEAgLTQ5MDUsNyArNDkwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0g
bV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChi
eXRlY29kZUluZGV4KTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+
YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5q
aXRDb2RlKCktPmNvbW1vbi5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVw
YXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICBhdXRvIG5v
blJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkOwogICAgIApAQCAtNDk4OSw3
ICs0OTg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5vZAogICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5h
cnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVFN1
YklDKiBzdWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUp
OworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVFN1
YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRp
b25WYWx1ZVN1Yk9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3Bl
cmF0aW9uVmFsdWVTdWI7CiAKQEAgLTU1NzEsNyArNTU3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZU5lZ2F0ZSgKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
ID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCkt
PmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQu
aml0Q29kZSgpLT5jb21tb24uYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemU7CiAgICAgYXV0
byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZTsKICAgICBjb21w
aWxlTWF0aElDKG5vZGUsIG5lZ0lDLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdG
dW5jdGlvbik7CkBAIC01ODE1LDcgKzU4MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlVmFsdWVNdWwoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0
LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0
ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFz
ZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJ
VE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuaml0Q29k
ZSgpLT5jb21tb24uYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hp
bmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBh
dGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bDsKIApAQCAtMTQ3NzMsNyArMTQ3NzMs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBz
Y29wZVJlZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIG1faml0LmNvZGVCbG9j
aygpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CiAgICAgbm9SZXN1
bHQobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxl
LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgY29tcGls
ZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKIAogICAgIGlmICh2bS5zaG91bGRCdWlsZGVy
UENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpIHsKICAgICAgICAgQjM6OlBDVG9PcmlnaW5NYXAgb3Jp
Z2luTWFwID0gc3RhdGUucHJvYy0+cmVsZWFzZVBDVG9PcmlnaW5NYXAoKTsKLSAgICAgICAgY29k
ZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFw
PihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0
ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpKTsKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+
Y29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFw
PihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0
ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpOwogICAgIH0KIAogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTRW50cnlQdHJUYWc+IGxhYmVsID0gc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5r
QnVmZmVyLT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHN0YXRlLnByb2MtPmNvZGUoKS5lbnRy
eXBvaW50TGFiZWwoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRD
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2Rl
LmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHB1YmxpYzoKICAgICBERkc6
OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpIG92ZXJyaWRlOwogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
Y29tbW9uRGF0YU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKSVRDb2RlLCBjb21t
b24pOyB9CiAgICAgdm9pZCBzaHJpbmtUb0ZpdChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKSBv
dmVycmlkZTsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92
ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CiAgICAg
CiAgICAgREZHOjpDb21tb25EYXRhIGNvbW1vbjsKICAgICBWZWN0b3I8T1NSRXhpdD4gbV9vc3JF
eGl0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MiwxNCArNTIsNiBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogCiAgICAg
Z3JhcGgucmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsKIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAg
ewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsK
LSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5l
bnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7Ci0gICAg
fQotI2VuZGlmCi0KICAgICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuIE5vdGUgdGhhdCB3ZSB1
c2UgdGhpcyBlbnRyeXBvaW50IHRvdGFsbHkgZGlmZmVyZW50bHkKICAgICAvLyBkZXBlbmRpbmcg
b24gd2hldGhlciB3ZSdyZSBkb2luZyBPU1IgZW50cnkgb3Igbm90LgogICAgIENDYWxsSGVscGVy
cyBqaXQoY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNiArODks
NyBAQAogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5N
YXAuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgpAQCAtMjMyMCw2
ICsyMzIxLDE4IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbXBpbGVCaW5hcnlNYXRoSUM8SklUU3Vi
R2VuZXJhdG9yPihhcml0aFByb2ZpbGUsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGlu
Z0Z1bmN0aW9uKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3Is
IEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUQWRkSUMqIGFk
ZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9m
aWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUQWRkSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTXVsR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBl
PgorICAgIHN0YXRpYyBKSVRNdWxJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29tbW9u
LCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRNdWxJ
Qyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRO
ZWdHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVE5lZ0lDKiBhZGRNYXRo
SUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7
IHJldHVybiBjb21tb24uYWRkSklUTmVnSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3Rk
Ojppc19zYW1lPEdlbmVyYXRvciwgSklUU3ViR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAg
IHN0YXRpYyBKSVRTdWJJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5h
cnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRTdWJJQyhwcm9m
aWxlKTsgfQorCiAgICAgdm9pZCBjb21waWxlVmFsdWVNdWwoKQogICAgIHsKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3Jp
Z2luLnNlbWFudGljKTsKQEAgLTIzOTEsNyArMjQwNCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAog
ICAgICAgICAgICAgICAgIEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+OjpjcmVhdGUoKTsKLSAgICAgICAg
ICAgICAgICBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBqaXQuY29kZUJsb2Nr
KCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICAgICAg
SklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gYWRkTWF0aElDPEdlbmVyYXRvcj4o
c3RhdGUtPmppdENvZGUtPmNvbW1vbiwgYXJpdGhQcm9maWxlKTsKICAgICAgICAgICAgICAgICBt
YXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIo
KSksIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIHBhcmFtcy5ncFNjcmF0Y2goMCkpOwog
CiAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CkBAIC0y
NTAwLDcgKzI1MTMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAgICAgICAgICAgICBCb3g8
TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBCb3g8TWF0aElD
R2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0
aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0aElDPEdlbmVy
YXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgICAgICBKSVRCaW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiogbWF0aElDID0gYWRkTWF0aElDPEdlbmVyYXRvcj4oc3RhdGUtPmppdENvZGUtPmNv
bW1vbiwgYXJpdGhQcm9maWxlKTsKICAgICAgICAgICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9y
ID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIEpTVmFsdWVSZWdzKHBhcmFt
c1swXS5ncHIoKSksCiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5n
cHIoKSksIEpTVmFsdWVSZWdzKHBhcmFtc1syXS5ncHIoKSksIHBhcmFtcy5mcFNjcmF0Y2goMCks
CiAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mcFNjcmF0Y2goMSksIHBhcmFtcy5ncFNjcmF0
Y2goMCkpOwpAQCAtNDMxNyw3ICs0MzMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExKSVQpID8gcGFy
YW1zLmdwU2NyYXRjaCgwKSA6IEludmFsaWRHUFJSZWc7CiAKICAgICAgICAgICAgIGF1dG8gZ2Vu
ZXJhdG9yID0gQm94PEpJVFB1dEJ5VmFsR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAgICAgICAgICAg
ICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4s
IGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLAorICAgICAgICAgICAgICAgIGpp
dC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxT
aXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLAogICAgICAgICAgICAgICAgIHBh
cmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcs
IHN0dWJJbmZvR1BSKTsKIAogICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKQEAgLTEwMjg1LDYgKzEwMjk4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtUGFzc2VkQXJnczsgaSA8IG51
bUFsbG9jYXRlZEFyZ3M7ICsraSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
LmFyZ3MuYXBwZW5kKFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpKTsKICAg
ICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFy
Z3M7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQu
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZs
ZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKHNlbWFudGljTm9kZU9yaWdp
bik7CkBAIC0xMDQ0MywxMyArMTA0NTcsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQocGFyYW1zWzEgKyBpXS5yZWNvdmVyeUZvckpTVmFs
dWUoKSk7CiAKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVt
QXJnczsKKyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2so
KSk7CiAKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5j
b2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIEdQUkluZm86
OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8t
PmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICBhdXRv
IHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUklu
Zm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZy
YW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAg
ICAgICAgICAgICB9KTsKQEAgLTEwNzkyLDcgKzEwODA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxs
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
ID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1Qw
LCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtMTEwNzMsNyArMTEwODgsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAg
aWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRH
UFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwg
R1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVG
b3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMywyOCArNDEzLDE2IEBAIHN0YXRpYyB2b2lkIGNv
bXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAogICAgIFJlZ2lzdGVyU2V0IGFsbEZUTENhbGxl
ZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmZ0bENhbGxlZVNhdmVSZWdpc3RlcnMoKTsKICAgICBjb25z
dCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYmFzZWxpbmVDYWxsZWVTYXZlcyA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IHZtQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRz
KCk7Ci0gICAgUmVnaXN0ZXJTZXQgdm1DYWxsZWVTYXZlc1RvU2tpcCA9IFJlZ2lzdGVyU2V0Ojpz
dGFja1JlZ2lzdGVycygpOwotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7Ci0g
ICAgICAgIGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBHUFJJbmZvOjpyZWdUMSk7Ci0g
ICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoRW50cnlGcmFtZTo6
Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDEpOwotICAg
IH0KIAogICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgp
OyByZWcgPSByZWcubmV4dCgpKSB7CiAgICAgICAgIGlmICghYWxsRlRMQ2FsbGVlU2F2ZXMuZ2V0
KHJlZykpIHsKLSAgICAgICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2bUNhbGxlZVNhdmVzLT5maW5kKHJlZykpOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgdW5zaWduZWQgdW53aW5k
SW5kZXggPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKS0+aW5kZXhPZihyZWcpOwog
ICAgICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0KiBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID0g
YmFzZWxpbmVDYWxsZWVTYXZlcy0+ZmluZChyZWcpOwotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0
KiB2bUNhbGxlZVNhdmUgPSBudWxscHRyOyAKLSAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25I
YW5kbGVyKCkpCi0gICAgICAgICAgICB2bUNhbGxlZVNhdmUgPSB2bUNhbGxlZVNhdmVzLT5maW5k
KHJlZyk7CiAKICAgICAgICAgaWYgKHJlZy5pc0dQUigpKSB7CiAgICAgICAgICAgICBHUFJSZWcg
cmVnVG9Mb2FkID0gYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA/IEdQUkluZm86OnJlZ1QwIDogcmVn
LmdwcigpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVnVG9Mb2FkICE9IEdQUkluZm86
OnJlZ1QxKTsKIAogICAgICAgICAgICAgaWYgKHVud2luZEluZGV4ID09IFVJTlRfTUFYKSB7CiAg
ICAgICAgICAgICAgICAgLy8gVGhlIEZUTCBjb21waWxhdGlvbiBkaWRuJ3QgcHJlc2VydmUgdGhp
cyByZWdpc3Rlci4gVGhpcyBtZWFucyB0aGF0IGl0IGFsc28KQEAgLTQ1Miw4ICs0NDAsNiBAQCBz
dGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkCiAKICAgICAgICAgICAgIGlm
IChiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQogICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHJl
Z1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9p
bnRlclJlZ2lzdGVyLCBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0LT5vZmZzZXQoKSkpOwotICAgICAg
ICAgICAgaWYgKHZtQ2FsbGVlU2F2ZSAmJiAhdm1DYWxsZWVTYXZlc1RvU2tpcC5nZXQodm1DYWxs
ZWVTYXZlLT5yZWcoKSkpCi0gICAgICAgICAgICAgICAgaml0LnN0b3JlNjQocmVnVG9Mb2FkLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZz
ZXQoKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgRlBSUmVnIGZwUmVnVG9Mb2Fk
ID0gYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA/IEZQUkluZm86OmZwUmVnVDAgOiByZWcuZnByKCk7
CiAKQEAgLTQ2NCwxOSArNDUwLDkgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1
bnNpZ25lZAogCiAgICAgICAgICAgICBpZiAoYmFzZWxpbmVSZWdpc3Rlck9mZnNldCkKICAgICAg
ICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoZnBSZWdUb0xvYWQsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgYmFzZWxpbmVSZWdp
c3Rlck9mZnNldC0+b2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmICh2bUNhbGxlZVNhdmUgJiYg
IXZtQ2FsbGVlU2F2ZXNUb1NraXAuZ2V0KHZtQ2FsbGVlU2F2ZS0+cmVnKCkpKQotICAgICAgICAg
ICAgICAgIGppdC5zdG9yZURvdWJsZShmcFJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoR1BSSW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7Ci0gICAgICAgIFJl
Z2lzdGVyQXRPZmZzZXQqIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZpbmQoR1BSSW5m
bzo6bnVtYmVyVGFnUmVnaXN0ZXIpOwotICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIHZt
Q2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKLQotICAgICAgICB2bUNhbGxlZVNhdmUgPSB2bUNhbGxl
ZVNhdmVzLT5maW5kKEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIpOwotICAgICAgICBqaXQu
c3RvcmU2NChHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwotICAgIH0KLQog
ICAgIHNpemVfdCBiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlcyA9IGJhc2Vs
aW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKIAogICAg
IGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2lu
dCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJi
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEu
cmIJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
TWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0MiwyOCBAQCBjbGFzcyBNZXRh
ZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJldHVybiBpZiBlbXB0eT8KIAotICAg
ICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcykKKyAgICAgICAgZGVmIGdlbmVy
YXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQorICAgICAgICAgICAgZmll
bGROYW1lcy5tYXAgZG8gfGZpZWxkTmFtZXwKKyAgICAgICAgICAgICAgICAiI3twcmVmaXh9c3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2ZpZWxkTmFtZVsx
Li5dfSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0p
OyB9IgorICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKKyAgICAgICAgZW5kCisKKyAgICAgICAg
ZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGZpZWxkTmFtZXMpCiAgICAgICAgICAg
ICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAgICAgICBpZiB0eXBlLmtp
bmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29u
dmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCisgICAgICAg
ICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsg
JyAgICAnLCB0eXBlLCBmaWVsZE5hbWVzKX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7Zmll
bGQudG9fc307IgorICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisg
ICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVzaChmaWVsZE5hbWUpCisgICAgICAgICAg
ICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgogICAgICAg
ICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAK
LSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzKQorICAg
ICAgICBmaWVsZE5hbWVzID0gW10KKyAgICAgICAgcHJlZml4ID0gIiAgICAgICAgIgorICAgICAg
ICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKHByZWZpeCwgQGZpZWxkcywgZmllbGROYW1lcykKKyAg
ICAgICAgZmllbGRzID0gZmllbGRzICsgIlxuIiArIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMo
cHJlZml4LCBmaWVsZE5hbWVzKQogCiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBp
bml0aWFsaXplcnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzY3LDYgKzM2NywyOCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6bG9h
ZFByb3BlcnR5KEdQUlJlCiAgICAgICAgIHJlc3VsdCk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjpzdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJS
ZWcgb2Zmc2V0LCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBKdW1wIGlzSW5saW5lID0gYnJhbmNo
MzIoTGVzc1RoYW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7
CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKG9iamVjdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaCk7CisgICAgbmVnMzIob2Zmc2V0KTsKKyAgICBzaWduRXh0ZW5kMzJU
b1B0cihvZmZzZXQsIG9mZnNldCk7CisgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKKyAgICAKKyAg
ICBpc0lubGluZS5saW5rKHRoaXMpOworICAgIGFkZFB0cigKKyAgICAgICAgVHJ1c3RlZEltbTMy
KAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEpTT2JqZWN0KSkgLQor
ICAgICAgICAgICAgKHN0YXRpY19jYXN0PGludDMyX3Q+KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAt
IDIpICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpLAorICAg
ICAgICBvYmplY3QsIHNjcmF0Y2gpOworICAgIAorICAgIHJlYWR5LmxpbmsodGhpcyk7CisgICAg
CisgICAgc3RvcmVWYWx1ZSh2YWx1ZSwKKyAgICAgICAgQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNl
dCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVy
ZShWTSYgdm0sIFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQg
c2NyYXRjaCkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjk4LDggKzcyMCwxMyBAQCB2b2lk
IEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzCiAKIHZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBH
UFJJbmZvOjpyZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQ
UkluZm86OnJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2Jq
ZWN0KHZtLCBpbmZvKTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2Fs
bFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCit7
CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgQ2Fs
bCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjM0LDggKzIzNCw5IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAg
ICAKLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBjbG9iYmVycyBvZmZzZXQuCisgICAgLy8gTm90ZSB0
aGF0IHRoZXNlIGNsb2JiZXIgb2Zmc2V0LgogICAgIHZvaWQgbG9hZFByb3BlcnR5KEdQUlJlZyBv
YmplY3QsIEdQUlJlZyBvZmZzZXQsIEpTVmFsdWVSZWdzIHJlc3VsdCk7CisgICAgdm9pZCBzdG9y
ZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0
LCBHUFJSZWcgc2NyYXRjaCk7CiAKICAgICB2b2lkIG1vdmVWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3Mg
c3JjUmVncywgSlNWYWx1ZVJlZ3MgZGVzdFJlZ3MpCiAgICAgewpAQCAtMzc5LDE1ICszODAsMjYg
QEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlGcmFtZSwgR1BS
UmVnIHNjcmF0Y2gpCisgICAgeworI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJT
ID4gMAorICAgICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCBzY3JhdGNoKTsKKyAgICAgICAg
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHNjcmF0Y2gp
OworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOworICAgICAgICBV
TlVTRURfUEFSQU0oc2NyYXRjaCk7CisjZW5kaWYKKyAgICB9CisKICAgICB2b2lkIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRy
eUZyYW1lKQogICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAK
ICAgICAgICAgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfTsKICAgICAgICAgR1BSUmVnIHRlbXAx
ID0gdXNlZFJlZ2lzdGVycy5nZXRGcmVlR1BSKDApOwotICAgICAgICBsb2FkUHRyKCZ0b3BFbnRy
eUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVySW1wbCh0ZW1wMSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKICNlbHNlCiAgICAg
ICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRv
cEVudHJ5RnJhbWUpOwogI2VuZGlmCiAgICAgfQogICAgIApAQCAtMTcyMCw2ICsxNzMyLDcgQEAg
cHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRo
b3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9p
ZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3Rh
Y2tGb3JDQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJ
VENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxp
bmVKSVRDb2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Jhc2VsaW5lSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCisKKyNpbmNsdWRlICJKSVRNYXRo
SUMuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5m
by5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSklUQWRkSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklU
QWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRkSUNz
LmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRNdWxJQyogTWF0aElDSG9sZGVyOjphZGRKSVRNdWxJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9tdWxJQ3MuYWRk
KGFyaXRoUHJvZmlsZSk7IH0KK0pJVFN1YklDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVFN1YklDKEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1YklDcy5hZGQoYXJp
dGhQcm9maWxlKTsgfQorSklUTmVnSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTmVnSUMoVW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJv
ZmlsZSk7IH0KKwordm9pZCBNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXIm
IG90aGVyKQoreworICAgIG1fYWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2FkZElDcyk7CisgICAg
bV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAgICBtX25lZ0lDcyA9IFdURk1v
dmUob3RoZXIubV9uZWdJQ3MpOworICAgIG1fc3ViSUNzID0gV1RGTW92ZShvdGhlci5tX3N1YklD
cyk7Cit9CisKK0Jhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRy
eVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKKyAg
ICA6IERpcmVjdEpJVENvZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklUKQorICAgICwgTWF0aElDSG9sZGVyKCkKK3sgfQorCitCYXNlbGluZUpJVENv
ZGU6On5CYXNlbGluZUpJVENvZGUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZv
LmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVuYXJ5QXJp
dGhQcm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgU2lt
cGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3MgTWF0aElDSG9s
ZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVy
KTsKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAg
SklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1YklD
KiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklU
TmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+
IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lD
PiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKworY2xhc3MgSklU
Q29uc3RhbnRQb29sIHsKK3B1YmxpYzoKKyAgICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOwor
CisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIEdsb2JhbE9iamVjdCwK
KyAgICAgICAgQ2FsbExpbmtJbmZvLAorICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAg
ICAgRnVuY3Rpb25EZWNsLAorICAgICAgICBGdW5jdGlvbkV4cHIsCisgICAgfTsKKworICAgIHN0
cnVjdCBWYWx1ZSB7CisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgUGFja2VkUHRyPHZvaWQ+
IHBheWxvYWQ7CisgICAgfTsKKworICAgIEpJVENvbnN0YW50UG9vbCgpID0gZGVmYXVsdDsKKyAg
ICBKSVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAgICBKSVRD
b25zdGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworCisg
ICAgQ29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIpCisgICAg
eworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXplKCk7CisgICAgICAg
IG1fY29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1ZSBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1
cm4gbV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fY29u
c3RhbnRzOworfTsKKworCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklU
Q29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2Rl
KENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRo
QXJpdHlDaGVjayk7CisgICAgfkJhc2VsaW5lSklUQ29kZSgpIG92ZXJyaWRlOworICAgIFBDVG9D
b2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcGNU
b0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KKworICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4g
bV91bmxpbmtlZENhbGxzOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5m
b3M7CisgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5m
b3M7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7
CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXM7CisgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisgICAgSklUQ29uc3RhbnRQb29sIG1f
Y29uc3RhbnRQb29sOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9w
Y1RvQ29kZU9yaWdpbk1hcDsKKyAgICBib29sIG1faXNTaGFyZWFibGUgeyB0cnVlIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFz
ZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyAr
NTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNvbnN0CiAKIENvbXBp
bGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUoKQogewotICAgIENvbXBpbGF0
aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgQ29t
cGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQobV9jb2Rl
QmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxl
ZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklUQ29t
cGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Mywx
NiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblByb2xvCiAgICAg
c3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBlcnM6Omxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdz
IHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0No
aWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVD
VF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9yZVZh
bHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRy
ZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwg
c2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2spLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29k
ZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygp
KSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQ
YWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVT
aGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNj
cmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93Q2hpY2tlbiog
c2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAgLTcyLDYgKzYyLDI4IEBAIHZv
aWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEKICAgICBzdG9yZVB0cihzY3Jh
dGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikpOwogfQogCisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywg
R1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQ
YWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgc3RvcmVWYWx1ZSh0aGlz
UmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkp
OworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAgICBzdG9yZTMy
KFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0
LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkp
OworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BS
UmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1
c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAg
ICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywg
c2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJz
Ojpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVl
UmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBs
KHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgp
OworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxI
ZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKIHsKICAgICBDQ2Fs
bEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVy
cy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxs
SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDE0IEBAIHB1YmxpYzoKICAg
ICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJlZ2lzdGVycy4gVGhl
eSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Agb2YKICAgICAvLyBzdGFjayB0
byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5Qcm9s
b2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBz
Y29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93
UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBD
YWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJs
b2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcg
c2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxv
Y2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKK3B1YmxpYzoK
KyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQs
IEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJs
b2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworICAgIHZvaWQgbG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3Ms
IEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ug
c2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2b2lkIGVuc3VyZVNoYWRvd0No
aWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25B
cmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCShyZXZpc2lvbiAyODI2NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgQ2Fs
bEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29kZUJsb2NrLT5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1
cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVy
U2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzIHsg
UmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07Ci0gICAgY29uc3QgUmVnaXN0
ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVCbG9jay0+Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlclNh
dmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50
cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFZh
bHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWduZWQgbnVtTG9jYWxzIHsgVUlOVF9NQVggfTsK
ICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBu
dW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8gT24gb3VyIG1hY2hpbmUgZnJhbWUuCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1hcDxWYWx1ZVJlY292ZXJ5PiByZWdpc3RlcnM7
CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVyIHsgSW52YWxpZEdQUlJlZyB9OwogCiAgICAg
dm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXR1
cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqKTsKICNlbmRp
ZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShyZXZpc2lvbiAyODI2NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENhbGxGcmFtZVNodWZmbGVyOjpDYWxsRnJhbWVT
aHVmZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkKICAgICAsIG1fb2xkRnJhbWUoZGF0YS5udW1M
b2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCiAgICAg
LCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6
OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxp
Z25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpCisgICAgLCBtX2FsaWdu
ZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyByb3VuZEFy
Z3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5udW1QYXJhbWV0ZXJzKSkKICAgICAsIG1fYWxp
Z25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwogICAgICAg
ICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Muc2l6ZSgpKSkKICAg
ICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUgLSBtX2FsaWduZWRPbGRGcmFt
ZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJz
KCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNzZWRBcmdzKQorICAgICwgbV9u
dW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykKIHsKICAgICAvLyBXZSBhcmUgYWxsb3dl
ZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAgIGZvciAodW5zaWduZWQgaSA9IEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIENh
bGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhCiAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9CiAgICAgICAgIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fbmV3RnJhbWVCYXNlLAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFy
YW1ldGVycygpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1f
bnVtUGFyYW1ldGVycykpOwogICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5hbmQzMihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSwgbV9uZXdG
cmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
c2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVCYXNlLCBtX25ld0ZyYW1lQmFzZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAg
IENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAgICAgIGRhdGEubnVtTG9jYWxzID0gbnVt
TG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2VkQXJncyA9IG1fbnVtUGFzc2VkQXJnczsK
KyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9udW1QYXJhbWV0ZXJzOwogICAgICAgICBk
YXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJnQ291bnQoKSk7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytpKQpAQCAtNzk4
LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwZXJmb3JtU2FmZVdyaXRlcygpOwogICAg
IAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07CisgICAgdW5zaWdu
ZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3
ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKIH0KIAog
SklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxv
Y2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51bGxwdHIpCiAgICAgLCBtX2ludGVycHJl
dGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1f
bG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogewor
ICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAgIG1fcHJvZmlsZWRDb2RlQmxvY2sgPSBj
b2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+dW5saW5rZWRD
b2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTkwLDggKzkzLDggQEAgdm9pZCBKSVQ6
OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSnVt
cExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNo
QWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3Jl
bWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJ
VEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFk
ZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1l
bnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1
dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwog
CiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtMTEzLDE1
ICsxMTYsMjAgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0KgogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJl
c3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KQordm9pZCBKSVQ6OmVtaXRO
b3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCkKIHsKKyAgICBhdXRvIG9r
ID0gYnJhbmNoVGVzdFB0cihaZXJvLCBwb2ludGVyVG9TZXQpOwogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZz
ZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBvay5saW5r
KHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUpCit2b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNz
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFyUmVhZE9ubHlXYXRjaHBvaW50KCktPmFk
ZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBpZiAo
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BS
KTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbE9iamVjdCwgbV92YXJSZWFkT25seVdhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0
Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQp
KSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKQEAg
LTEyOSw3ICsxMzcsNyBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICAg
ICBpZiAoIUFTU0VSVF9FTkFCTEVEKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBKdW1wIG9rID0g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGJyZWFr
cG9pbnQoKTsKICAgICBvay5saW5rKHRoaXMpOwpAQCAtMTgxLDYxICsxODksNDQgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1YwogICAgIHNsb3dQYXRoQ2FsbC5jYWxs
KCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BS
UmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5j
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFk
ZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVz
cyhyZXN1bHQsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJl
c3VsdCk7CisgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1
bHQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZF
eGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHJlc3VsdCk7CisgICAgaGFz
RXhlY3V0YWJsZS5saW5rKHRoaXMpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0Nv
bnN0cnVjdG9yKCkpCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSksIHJlc3VsdCk7CisgICAg
ZWxzZQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6
Om9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpKSwgcmVzdWx0KTsKKworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZXN1bHQsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6Om9mZnNldE9mQ29kZUJsb2Nr
KCkpLCByZXN1bHQpOworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZXN1bHQsIENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayk7CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHByb2JlRGVi
dWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7Cisg
ICAgfSk7CisjZW5kaWYKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQog
ewogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29tcGls
aW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAi
LCAqbV9wcm9maWxlZENvZGVCbG9jaywgIlxuIik7CiAgICAgCiAgICAgaml0QXNzZXJ0VGFnc0lu
UGxhY2UoKTsKICAgICBqaXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgpOwogICAgIAotICAgIGF1
dG8mIGluc3RydWN0aW9ucyA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKLSAgICB1bnNp
Z25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUo
KTsKKyAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKTsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV91bmxpbmtlZENvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogCiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9
IDA7CiAKLSAgICBWTSYgdm0gPSBtX2NvZGVCbG9jay0+dm0oKTsKICAgICBCeXRlY29kZUluZGV4
IHN0YXJ0Qnl0ZWNvZGVJbmRleCgwKTsKLSAgICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4ICYmIChtX2NvZGVCbG9jay0+aW5oZXJpdHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8IG1f
Y29kZUJsb2NrLT5pbmhlcml0czxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7Ci0gICAg
ICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgb3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0
ZSBQcm9ncmFtQ29kZUJsb2NrJ3MgZXhhY3RseSBvbmNlLgotICAgICAgICAvLyBUaGlzIG9wdGlt
aXphdGlvbiB3b3VsZCBiZSBpbnZhbGlkIG90aGVyd2lzZS4gV2hlbiB0aGUgTExJbnQgZGV0ZXJt
aW5lcyBpdCB3YW50cyB0bwotICAgICAgICAvLyBkbyBPU1IgZW50cnkgaW50byB0aGUgYmFzZWxp
bmUgSklUIGluIGEgbG9vcCwgaXQgd2lsbCBwYXNzIGluIHRoZSBieXRlY29kZSBvZmZzZXQgaXQK
LSAgICAgICAgLy8gd2FzIGV4ZWN1dGluZyBhdCB3aGVuIGl0IGtpY2tlZCBvZmYgb3VyIGNvbXBp
bGF0aW9uLiBXZSBvbmx5IG5lZWQgdG8gY29tcGlsZSBjb2RlIGZvcgotICAgICAgICAvLyBhbnl0
aGluZyByZWFjaGFibGUgZnJvbSB0aGF0IGJ5dGVjb2RlIG9mZnNldC4KLQotICAgICAgICAvLyBX
ZSBvbmx5IGJvdGhlciBidWlsZGluZyB0aGUgYnl0ZWNvZGUgZ3JhcGggaWYgaXQgY291bGQgc2F2
ZSB0aW1lIGFuZCBleGVjdXRhYmxlCi0gICAgICAgIC8vIG1lbW9yeS4gV2UgcGljayBhbiBhcmJp
dHJhcnkgb2Zmc2V0IHdoZXJlIHdlIGRlZW0gdGhpcyBpcyBwcm9maXRhYmxlLgotICAgICAgICBp
ZiAobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4Lm9mZnNldCgpID49IDIwMCkgewotICAgICAg
ICAgICAgLy8gQXMgYSBzaW1wbGlmaWNhdGlvbiwgd2UgZG9uJ3QgZmluZCBhbGwgYnl0ZWNvZGUg
cmFuZ2VzIHRoYXQgYXJlIHVucmVhY2hhYmxlLgotICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2Ug
anVzdCBmaW5kIHRoZSBtaW5pbXVtIGJ5dGVjb2RlIG9mZnNldCB0aGF0IGlzIHJlYWNoYWJsZSwg
YW5kCi0gICAgICAgICAgICAvLyBjb21waWxlIGNvZGUgZnJvbSB0aGF0IGJ5dGVjb2RlIG9mZnNl
dCBvbndhcmRzLgotCi0gICAgICAgICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKG1fY29kZUJsb2Nr
LCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOwotICAgICAgICAgICAgQnl0ZWNvZGVCYXNp
Y0Jsb2NrKiBibG9jayA9IGdyYXBoLmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9s
b29wT1NSRW50cnlCeXRlY29kZUluZGV4Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGJsb2NrKTsKLQotICAgICAgICAgICAgR3JhcGhOb2RlV29ya2xpc3Q8Qnl0ZWNvZGVC
YXNpY0Jsb2NrKj4gd29ya2xpc3Q7Ci0gICAgICAgICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKTsKLQotICAg
ICAgICAgICAgd2hpbGUgKEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3Ao
KSkgewotICAgICAgICAgICAgICAgIHN0YXJ0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
c3RkOjptaW4oc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpLCBibG9jay0+bGVhZGVyT2Zmc2V0
KCkpKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4IDogYmxv
Y2stPnN1Y2Nlc3NvcnMoKSkKLSAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaCgmZ3Jh
cGhbc3VjY2Vzc29ySW5kZXhdKTsKLQotICAgICAgICAgICAgICAgIC8vIEFsc28gYWRkIGNhdGNo
IGJsb2NrcyBmb3IgYnl0ZWNvZGVzIHRoYXQgdGhyb3cuCi0gICAgICAgICAgICAgICAgaWYgKG1f
Y29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5sZWFkZXJPZmZzZXQo
KTsgYnl0ZWNvZGVPZmZzZXQgPCBibG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBibG9jay0+dG90YWxM
ZW5ndGgoKTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBp
bnN0cnVjdGlvbnMuYXQoYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGF1dG8qIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgo
Qnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdvcmtsaXN0LnB1c2goZ3JhcGguZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGhh
bmRsZXItPnRhcmdldCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZU9mZnNl
dCArPSBpbnN0cnVjdGlvbi0+c2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQogCiAgICAgbV9ieXRl
Y29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25D
b3VudDsgKSB7CkBAIC0yNzgsOCArMjY5LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFp
blBhc3MoKQogCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGlu
ZUpJVEV4ZWN1dGlvbigpKSkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBt
X2NvZGVCbG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYg
Y3R4KSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2Fs
bEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQg
WyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIs
IFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0p
OwogICAgICAgICB9CkBAIC01MjcsNyArNTE4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
U2xvd0Nhc2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2Rl
SW5kZXg7CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9
IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwor
ICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRh
dGFMb2dMbigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgIiwgbV9ieXRlY29k
ZUluZGV4LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgpKTsKQEAgLTU0NSw4ICs1
MzYsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIGlm
IChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7CiAgICAg
ICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAg
ICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVC
bG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNl
dCwgIl0gU0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIo
Y3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9
CkBAIC02MDMsNyArNTk0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV92YWwpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfaWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9zdWIpCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZnJvbV9zY29wZSkKICNlbmRp
ZgogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcHV0X3RvX3Njb3BlKQpAQCAtNjc0LDU1
ICs2NjUsNTUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgog
fQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdp
c3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNl
dE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50
UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0
ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQor
CiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2Nv
ZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2
ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBzd2l0Y2gg
KGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAgICAgIG1fY2FuQmVP
cHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZh
bHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVB
bmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwotICAgICAgICBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmls
aW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAg
IHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNlIEdsb2JhbENvZGU6
Ci0gICAgY2FzZSBNb2R1bGVDb2RlOgotICAgIGNhc2UgRXZhbENvZGU6Ci0gICAgICAgIG1fY29k
ZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5
IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxs
LgotICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgotICAgICAgICBt
X2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGxldmVsKSAm
JiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwotICAgICAgICBicmVhazsK
LSAgICB9CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1w
VGFibGVzKCkgfHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGVzKCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9j
ay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dp
dGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEo
bG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+
KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKLSAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
cygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fY29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICBp
ZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMo
KSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpKSB7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVz
ID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAg
ICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1w
VGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGVzKCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlz
YXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRp
c2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1fZGlzYXNzZW1ibGVy
ID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsKKyAgICBpZiAoVU5M
SUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKSB7
CisgICAgICAgIC8vIEZJWE1FOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBvZmYgb2YgVW5saW5rZWRD
b2RlQmxvY2suCisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3Nl
bWJsZXI+KG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KICAgICBpZiAoVU5MSUtFTFkobV92
bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBGSVhNRTogYnVpbGQgcHJv
ZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiBVbmxpbmtlZENvZGVCbG9jay4KICAgICAgICAgbV9jb21w
aWxhdGlvbiA9IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpDb21waWxhdGlv
bigKLSAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5
dGVjb2Rlc0ZvcihtX2NvZGVCbG9jayksCisgICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVCbG9jayksCiAg
ICAgICAgICAgICAgICAgUHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1fY29tcGlsYXRp
b24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1f
Y29kZUJsb2NrKTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMo
Km1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAg
fQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwo
KSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CkBAIC03NDIsMTEgKzczMywxMiBAQCB2
b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG5vcCgpOwog
CiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgaWYgKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAgICAgICBlbWl0
UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwo
dGhpcyk7CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQg
PSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpOwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHJlZ1QxKTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzU3LDE2ICs3NDksMjAg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1vdmUocmVn
VDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCgpOwogCi0gICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZlQ2FsbGVlU2F2
ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOworICAgIGVt
aXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKLSAgICBp
ZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAgaWYgKG1f
dW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAg
IEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxp
bmcoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50
IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgeworICAgICAgICBp
ZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25z
dHJ1Y3RvcigpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA+IDEpKSB7
CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwg
Q29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4ZWRWZWN0b3I8
VmFsdWVQcm9maWxlPjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fdW5saW5rZWRDb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElm
IHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHBy
b2ZpbGluZyBzaXRlICh0bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3Rl
bnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUu
Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFy
Z3VtZW50KQorICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0
cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1
ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNzc3LDEyICs3NzMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgICAgICAgICAg
ICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CiAjZW5k
aWYKLSAgICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fY29kZUJsb2NrLT52
YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3MpOworICAgICAgICAg
ICAgICAgIHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwgYXJndW1lbnQgKiBz
aXplb2YoVmFsdWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgp
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUkVMRUFTRV9B
U1NFUlQoIUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVCbG9jay0+aml0VHlwZSgp
KSk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAgICAgIG1fdm0tPmppdFNp
emVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhpcyk7CkBAIC03
OTksMjQgKzc5NSwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemlu
CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0
YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNr
T25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2Nr
KTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2ssIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25F
eGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIHJlZ1QwKTsKIAogICAg
IC8vIElmIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciByZXF1aXJlIGFy
aXR5IGZpeHVwLgotICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2RlQmxvY2stPm1f
bnVtUGFyYW1ldGVycyAhPSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBG
dW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAgYm9vbCByZXF1aXJlc0Fy
aXR5Rml4dXAgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgIT0gMTsKKyAg
ICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYg
cmVxdWlyZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxhYmVsKCk7Ci0g
ICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdh
eXNCZUlubGluZWQpOworCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgICAg
IGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKTsKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKHJlZ1Qw
KTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAKICAgICAgICAgbG9hZDMy
KHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBy
ZWdUMSk7Ci0gICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0z
MihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMp
OworICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV91
bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGJlZ2luTGFiZWwsIHRo
aXMpOwogCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAKICAg
ICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJp
dHlDaGVjaywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVu
dEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNl
cHRpb24obV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29u
c3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBhcmd1bWVudEdQUjAp
OwogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFs
dWVHUFIpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTgzOSw3ICs4MzgsNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1fZGlzYXNzZW1i
bGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRD
b2RlT3JpZ2luKCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtC
dWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5p
cXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV91bmxpbmtlZENvZGVC
bG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOwogICAgIGxp
bmsoKTsKIH0KIApAQCAtODU4LDggKzg1Nyw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAg
c3dpdGNoIChyZWNvcmQudHlwZSkgewogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6SW1tZWRp
YXRlOgogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyOiB7Ci0gICAgICAgICAg
ICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJs
b2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBsaW5rZWRU
YWJsZS5tX2N0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFn
PihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9m
ZnNldHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB1
bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3MSw4ICs4NzAsOCBAQCB2b2lk
IEpJVDo6bGluaygpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6U3Ry
aW5nOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAg
Y29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNl
dCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGxvY2F0
aW9uIDogdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hPZmZzZXQ7CkBAIC05MDYs
MzIgKzkwNSwzNSBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKHJlY29yZC5mcm9tLCByZWNvcmQuY2FsbGVlKTsKICAgICB9CiAKLSAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX2dldEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVD
YWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX3B1dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9wdXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2Rl
bEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZh
bHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIHBh
dGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlWYWxzLCBwYXRjaEJ1
ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbnN0YW5jZU9mcywgcGF0Y2hCdWZm
ZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMsIHBh
dGNoQnVmZmVyKTsKKyAgICBhdXRvIGZpbmFsaXplSUNzID0gWyZdIChhdXRvJiBnZW5lcmF0b3Jz
KSB7CisgICAgICAgIGZvciAoYXV0byYgZ2VuIDogZ2VuZXJhdG9ycykgeworICAgICAgICAgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mby0+c3RhcnQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zdGFydCk7CisgICAgICAgICAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50
ZXJuYWxQdHJUYWc+KGdlbi5tX2RvbmUpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRT
dHViUm91dGluZVB0clRhZz4oZ2VuLm1fc2xvd1BhdGhCZWdpbik7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRC
eVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHNXaXRoVGhpcyk7CisgICAgZmluYWxp
emVJQ3MobV9wdXRCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9wdXRCeVZhbHMpOworICAgIGZp
bmFsaXplSUNzKG1fZGVsQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlWYWxzKTsKKyAg
ICBmaW5hbGl6ZUlDcyhtX2luQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeVZhbHMpOwor
ICAgIGZpbmFsaXplSUNzKG1faW5zdGFuY2VPZnMpOworICAgIGZpbmFsaXplSUNzKG1fcHJpdmF0
ZUJyYW5kQWNjZXNzZXMpOwogCiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlvbkluZm8gOiBtX2Nh
bGxDb21waWxhdGlvbkluZm8pIHsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBp
bGF0aW9uSW5mby5jYWxsTGlua0luZm87Ci0gICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygK
LSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29t
cGlsYXRpb25JbmZvLnNsb3dQYXRoU3RhcnQpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7
CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51
bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9j
YXRpb24pOwogICAgIH0KIAotICAgIHsKLSAgICAgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29k
ZU1hcEJ1aWxkZXI7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBi
eXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgewotICAg
ICAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQotICAgICAgICAg
ICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zm
c2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRl
Y29kZU9mZnNldF0pKTsKLSAgICAgICAgfQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29k
ZU1hcChqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpKTsKKyAgICBKSVRDb2RlTWFwQnVpbGRl
ciBqaXRDb2RlTWFwQnVpbGRlcjsKKyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0g
MDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsK
KyAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQorICAgICAgICAg
ICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQp
LCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2Rl
T2Zmc2V0XSkpOwogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNz
ZW1ibHkoKSkpIHsKQEAgLTk0MCwyNiArOTQyLDM4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICB9
CiAKICAgICBpZiAoVU5MSUtFTFkobV9jb21waWxhdGlvbikpIHsKKyAgICAgICAgLy8gRklYTUU6
IHNob3VsZCB3ZSBtYWtlIHRoZSBieXRlY29kZSBwcm9maWxlciBrbm93IGFib3V0IFVubGlua2Vk
Q29kZUJsb2NrPwogICAgICAgICBpZiAoT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclBy
b2ZpbGVyKCkpCiAgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlciht
X2NvbXBpbGF0aW9uLmdldCgpLCBwYXRjaEJ1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0
ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9jb2RlQmxvY2ssICptX2NvbXBpbGF0aW9u
KTsKKyAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbiht
X3Byb2ZpbGVkQ29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX3Bj
VG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZSht
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIHBhdGNoQnVmZmVyKTsKICAgICAKKyAgICAvLyBG
SVhNRTogTWFrZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBh
Ym91dCBVbmxpbmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3Vs
dCA9IEZJTkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAot
ICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dp
dGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7Cisg
ICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0
aEpJVFR5cGUobV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRh
KCkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRo
QXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0
eUNoZWNrKTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVz
dWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENv
ZGUgPSBhZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNr
KSk7CisKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtl
ZENhbGxzKTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1f
ZXZhbENhbGxMaW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9
IFdURk1vdmUobV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1
bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
cyk7CisgICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5h
bGl6ZSgpOworICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9q
aXRDb2RlLT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOworICAgIG1f
aml0Q29kZS0+bV9pc1NoYXJlYWJsZSA9IG1faXNTaGFyZWFibGU7CiAKICAgICBpZiAoSklUSW50
ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9y
ICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5
KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5k
KCkudW50YWdnZWRQdHIoKSk7CisgICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUg
Zm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV91bmxpbmtlZENvZGVCbG9jaywgcmVzdWx0LmV4ZWN1
dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1l
bW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklU
OjpmaW5hbGl6ZU9uTWFpblRocmVhZCgpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXpl
T25NYWluVGhyZWFkKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogCkBAIC05NjgsMjUgKzk4MiwxNCBAQCBDb21waWxh
dGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyCiAKICAgICBtX2xpbmtCdWZmZXItPnJ1
bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCi0gICAgewotICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBtX2NvZGVC
bG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJp
bmspOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51
bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7Ci0gICAgICAgIEhhbmRsZXJJbmZvJiBo
YW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgIC8vIEZJ
WE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgotICAgICAgICBoYW5kbGVyLm5hdGl2ZUNv
ZGUgPSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVy
LnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7Ci0gICAgfQotCiAg
ICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1Rv
Q29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKKyAgICAgICAgbV9q
aXRDb2RlLT5tX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFw
KTsKIAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGlu
ZUpJVC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgp
KSAvCi0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9u
c1NpemUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxv
Y2stPmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUo
bV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5s
aW5rZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0
dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTAwMSwxMSBAQCBzaXpl
X3QgSklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZlci0+c2l6ZSgp
OwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAg
ICBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBjb21waWxlQW5k
TGlua1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFsaXplT25NYWlu
VGhyZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVCbG9jayk7CiB9
CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKQEAgLTEwNDIs
MTggKzEwNDUsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwog
ICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0s
ICJQcmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6
OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJ
VDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7
CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxv
Y2FscygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3Rl
cnMoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkp
KSk7CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJP
ZmZzZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRG
b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3Vu
dEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVSZWdpc3RlckNv
dW50Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2ludCBKSVQ6OnN0
YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAg
IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29k
ZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRG
b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9pbnRlck9mZnNl
dEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNoTWFwPENTdHJp
bmcsIFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3Ry
aW5nLCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1
YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJ
VCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0
aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAorI2lu
Y2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgpAQCAt
NDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0
U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgorI2luY2x1ZGUg
IkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAi
VW51c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTE0OSwxNCAr
MTUxLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBp
bGF0aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0
OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8q
IHVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IGNhbGxMaW5rSW5mb0NvbnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQg
SklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdO
TUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3Mg
SklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEsNiArMTczLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdl
IG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KICAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAorICAgICAg
ICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBwdWJsaWM6CiAgICAgICAgIEpJ
VChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5
dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTE3
OCwyOCArMTgyLDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWTSYgdm0oKSB7IHJldHVy
biAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lkIGNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwotICAgICAgICBDb21waWxh
dGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBDb21waWxhdGlvblJl
c3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAgICAgICAgc2l6ZV90IGNv
ZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJl
Zm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3Vs
dCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgo
MCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0
ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4g
SklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShjb2RlQmxv
Y2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyBp
bnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0
YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOwogCiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVU
aW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90
YWxDb21waWxlVGltZSgpOwogCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfbWV0
YWRhdGFHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSOworICAgICAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzX2NvbnN0YW50c0dQUiA9IExMSW50OjpSZWdpc3RlcnM6
OnBiR1BSOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgICAgICB2
b2lkIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAgICAgIHZvaWQgbGluaygpOwotICAg
ICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9y
dCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKENvZGVCbG9jayos
IEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9t
IEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBl
bmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCkBAIC0y
MjMsNiArMjMyLDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAorICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZy
b21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQzMkZy
b21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQ4RnJv
bU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KKyAg
ICAgICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSwgY29uc3QgQnl0ZWNvZGUmLCBz
aXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYsIHNp
emVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAg
ICAgICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUm
LCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVibGljOgorICAgICAgICB2b2lkIGxv
YWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgIHByaXZhdGU6
CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcpOworICAgICAgICB2b2lkIGxv
YWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisKKyAgICAgICAg
dm9pZCBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCA9IHJl
Z1QwKTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRvSGFuZGxlcikK
ICAgICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGp1bXBUb0hh
bmRsZXIpOwpAQCAtMjU4LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0
ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJh
cmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAg
JiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAh
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxl
U2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNv
bXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxs
TGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2Fs
bF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAg
ICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZv
aWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBjYWxsTGlua0luZm9Db25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAgICAg
ICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4NywxNCArMzIyLDE1IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVy
IG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAg
ICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpT
Q2VsbCogb3duZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVy
KTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBp
cyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNj
cmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEm
LCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICAvL3Zv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOworICAgICAg
ICAvL3ZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVn
cyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVj
b2RlJiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpT
VmFsdWVSZWdzKTsKQEAgLTMwNSw4ICszNDEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9w
cm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CiAgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsKIAotICAgICAgICB2b2lk
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5
UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7Ci0gICAgICAgIHZvaWQgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJh
eVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2Ny
YXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBwdHJk
aWZmX3QsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3Ap
OwpAQCAtNTkzLDcgKzYzMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYxMSw3ICs2NDgsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKik7Ci0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02MjcsMTQg
KzY2NCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZShWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSk7Ci0gICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVT
bG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUpOworICAgICAgICB2b2lkIGVtaXRI
YXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlKTsKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBl
bWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBl
bWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAg
ICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUpOworICAgICAgICB2b2lk
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJS
ZWcpOworICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBHUFJS
ZWcgc2NyYXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwogICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xv
dCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY0Niw3ICs2ODMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICNlbmRpZgogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0
ZShXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBw
b2ludGVyVG9TZXQpOworICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BS
UmVnIHBvaW50ZXJUb1NldCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpT
VmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwog
ICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRy
ZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAg
ICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50
cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CkBA
IC02NTUsNiArNjkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0UHV0
SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwog
CisgICAgICAgIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSlNW
YWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBp
c09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3Bl
cmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjc2LDEzICs3MTQsMTEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNs
b3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29w
X2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJvbV9zY29w
ZUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0
b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9w
dXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcihW
TSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKIAogICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFwc19oYW5k
bGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKQEAgLTY5Niwz
MiArNzMyLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2
ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8
fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFS
RV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVf
IyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVf
VFlQRShERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dF
VF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBj
b25zdCBjaGFyKiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0
aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmlj
aWVudCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVz
b2x2ZWRDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3Bf
cmVzb2x2ZV9zY29wZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29s
dmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0K
LSNkZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAot
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9y
ZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1Jf
RUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRl
ZiBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVz
b2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihW
TSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CiAKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAorICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJik7CisgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcmVz
b2x2ZV9zY29wZUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mLCBz
dGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0
IGNoYXIqIHRodW5rTmFtZSk7CisKICAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gaXRlcisrLT5mcm9tOwpAQCAtNzYwLDEwICs3ODAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJh
Y2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHQoQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7Ci0gICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKE1ldGFkYXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgot
ICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIEFkZHJlc3MsIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQpOwogICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bl
cmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxG
dW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbD4KQEAgLTgyMSwyMCArODQxLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAs
IHRhcmdldC5vZmZzZXQpKTsKICAgICAgICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwg
dHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0
czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgT3BlcmF0aW9u
VHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
T3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4g
YXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlw
ZT4oYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uLCByZXN1
bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICAgICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVu
YW1lIE1ldGFkYXRhLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUuLi4gQXJncz4KICAg
ICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFz
UmVzdWx0LCB2b2lkPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBBZGRyZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4u
LiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBBZGRyZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4u
LiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50c0ZvckluZGlyZWN0
Q2FsbDxPcGVyYXRpb25UeXBlPih0YXJnZXQsIGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
bWV0YWRhdGEsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJl
c3VsdCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShieXRlY29kZSwgQWRkcmVzcyhHUFJJbmZvOjpub25B
cmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CkBAIC05MTks
MjUgKzkzOSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAg
ICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZDsgfQot
ICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4gbV9jYW5CZU9w
dGltaXplZE9ySW5saW5lZDsgfQogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7
IHJldHVybiBtX3Nob3VsZEVtaXRQcm9maWxpbmc7IH0KICNlbHNlCiAgICAgICAgIGJvb2wgY2Fu
QmVPcHRpbWl6ZWQoKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICBib29sIGNhbkJlT3B0aW1p
emVkT3JJbmxpbmVkKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgLy8gRW5hYmxlcyB1c2Ug
b2YgdmFsdWUgcHJvZmlsZXIgd2l0aCB0aWVyZWQgY29tcGlsYXRpb24gdHVybmVkIG9mZiwKICAg
ICAgICAgLy8gaW4gd2hpY2ggY2FzZSBhbGwgY29kZSBnZXRzIHByb2ZpbGVkLgogICAgICAgICBi
b29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAg
ICAgICAgdm9pZCBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVy
cygpOworCisgICAgICAgIHZvaWQgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworCiAgICAgICAg
IHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBj
b21wdXRlQ29tcGlsZVRpbWVzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB5b3UgbmVlZCB0
byBjaGVjayBhIHZhbHVlIGZyb20gdGhlIG1ldGFkYXRhIHRhYmxlIGFuZCB5b3UgbmVlZCBpdCB0
bwotICAgICAgICAvLyBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFzdCBhbmQgc2xvdyBwYXRo
LCB0aGVuIHlvdSB3YW50IHRvIHVzZSB0aGlzLgotICAgICAgICAvLyBJdCB3aWxsIGdpdmUgdGhl
IHNsb3cgcGF0aCB0aGUgc2FtZSB2YWx1ZSByZWFkIGJ5IHRoZSBmYXN0IHBhdGguCi0gICAgICAg
IEdldFB1dEluZm8gY29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUpOwotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLSAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGll
ZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CiAKICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJw
cmV0ZXI7CiAKQEAgLTk2NCw5ICs5NzksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVj
dG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVj
b3JkPiBtX3N3aXRjaGVzOwogCi0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBt
X2NvcGllZEdldFB1dEluZm9zOwotICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0
aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQcm9maWxlczsKLQogICAgICAgICBKdW1wTGlzdCBtX2V4
Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3NXaXRoQ2Fs
bEZyYW1lUm9sbGJhY2s7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTAwMCwx
MSArMTAxMiwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBJbnN0
cnVjdGlvbiosIFVuaXF1ZVJlZjxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+PiBtX2luc3RydWN0aW9u
VG9NYXRoSUNHZW5lcmF0aW9uU3RhdGU7CiAKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVk
OwotICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wg
bV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleDsKIAotICAgICAgICBSZWZQdHI8RGlyZWN0SklUQ29kZT4gbV9qaXRD
b2RlOworICAgICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRDb2RlQmxvY2sgeyBudWxscHRyIH07
CisgICAgICAgIFVubGlua2VkQ29kZUJsb2NrKiBtX3VubGlua2VkQ29kZUJsb2NrIHsgbnVsbHB0
ciB9OworCisgICAgICAgIE1hdGhJQ0hvbGRlciBtX21hdGhJQ3M7CisgICAgICAgIFJlZlB0cjxC
YXNlbGluZUpJVENvZGU+IG1faml0Q29kZTsKKworICAgICAgICBKSVRDb25zdGFudFBvb2wgbV9j
b25zdGFudFBvb2w7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxP
YmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9Owor
ICAgICAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICAg
ICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAgICAgICAgQmFnPFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgICAgIEZp
eGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBG
aXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKwor
ICAgICAgICBzdHJ1Y3QgTm90QUNvZGVCbG9jayB7IH0gbV9jb2RlQmxvY2s7CisKKyAgICAgICAg
Ym9vbCBtX2lzU2hhcmVhYmxlIHsgdHJ1ZSB9OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0
aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBAIHZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFy
KG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJn
dW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50
R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMSk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIpOworICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0z
MjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQog
ICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVn
VDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVy
dCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QxKTsKKyAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzc1LDggQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAogICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiB9CiAKQEAgLTU3Myw3ICs1NzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3coY29uc3QgCiAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1p
dExvYWQob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJs
ZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSht
X2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9j
b2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmls
ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1fcHJvZmlsZUluZGV4KTsKKyAg
ICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9maWxl
KTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVn
YXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBv
cGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAg
ICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAg
LTg5OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0
CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhh
cml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJm1f
dW5saW5rZWRDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZShjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wQWRkPigpLm1fcHJvZmlsZUluZGV4KTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21h
dGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRo
SUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9w
QWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVD
b2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRl
KTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYg
c2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2Ny
YXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBh
ZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEw
MTUsMTAgKzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJ
QwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmls
ZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmls
ZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2Zp
bGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChu
b25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2Ny
YXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNs
b3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwx
MyArMTA2MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAj
ZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFy
aXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0
aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJl
aW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJl
aW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3Ms
IGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVy
cHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRS
ZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJM
RShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEy
MCwxMyArMTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElD
CiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0
aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lz
ZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywg
cmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNp
ZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsK
QEAgLTExNjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVj
dGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsK
ICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAm
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2Nr
LT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tX3By
b2ZpbGVJbmRleCk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5t
X29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQo
Ynl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjIwLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRN
dWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2Nr
LT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tX3By
b2ZpbGVJbmRleCk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElD
KGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVN
dWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChj
b25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGUoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tX3Byb2ZpbGVJbmRleCk7CisgICAgSklUU3ViSUMq
IHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0
cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0
TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxF
dgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAgICAg
c3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2Fs
bGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTksNyArMjU5LDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwg
cmVnVDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBA
IC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAg
ZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDcgKzM0MSw2IEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Iu
aCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2Fs
bC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC00NCw3ICs0NSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxS
ZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZp
cnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDE4ICs1NCwxOCBAQCBzdGQ6OmVu
YWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9w
Y29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9w
X3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hl
Y2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50SW5j
bHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVj
a3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFj
a09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCisKICAg
ICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVy
T2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdU
MCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0YSwgY2hl
Y2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUz
MlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNh
bGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKCkg
KyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyArNzksNyBAQCBzdGQ6OmVuYWJsZV9p
Zl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlE
ID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2Rl
LCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBi
eXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkK
IHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpA
QCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29k
CiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJn
dW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVG
cmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVlUmVn
aXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsK
KyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0RnJl
ZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZp
cnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMs
IHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEwMywxNiBAQCBKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3Bl
cmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1
cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVyYXRp
b24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJl
Z1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291
bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBh
eWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBi
cmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5h
ZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2FkQ29uc3Rh
bnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkp
LCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCBy
ZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpv
ZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RCaWdnZXN0
LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0xMjcsMTYg
KzEzMSwxNiBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRlbXBsYXRl
PD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUp
CiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAg
ICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpj
YWxsZXJGcmFtZU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIGFyZ3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFk
ZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSks
IHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21h
TW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNv
ZGUpOwogCkBAIC0xNDgsNyArMTUyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBp
bmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRk
KENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxM
aW5rSW5mbzo6Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVj
b2RlLm1fYXJndjsKQEAgLTE1Niw0MyArMTYwLDQ3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2
YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0VmlydHVh
bENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91
dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0
ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFp
bENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKLXsKK2Jvb2wgSklUOjpj
b21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVk
LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KSB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0
ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5
dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQor
Ym9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5s
aW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewotICAgIENhbGxG
cmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFy
Z3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIg
PSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMg
PQorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEg
PSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOworICAgIHNodWZmbGVEYXRhLT5u
dW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAgIHNodWZmbGVEYXRhLT5udW1QYXJh
bWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworICAgIHNodWZm
bGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwor
ICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVE
YXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1ZmZsZURhdGEtPmFyZ3Mu
cmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5
dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAg
ICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5Ojpk
aXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAgICAgICAg
IERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAgICAg
IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotICAgIHNodWZmbGVE
YXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7Ci0gICAgaW5mby0+c2V0
RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9
IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgIHNodWZmbGVE
YXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1bXBMaXN0IHNsb3dQYXRo
cyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgbG9hZENvbnN0
YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhz
ID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAs
IHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgKnNodWZmbGVE
YXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93
UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CisgICAgaW5mby0+ZnJh
bWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAgICAgYXV0byBkb25lTG9j
YXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjE4LDE0ICsyMjYs
MjUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAt
IENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENhbGxl
ciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KLSAgICBD
YWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxs
X2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUs
IGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0gVUlOVF9NQVg7CisgICAg
aWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBpbmZvID0gbV91bmxpbmtl
ZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Io
b3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAgICAgQVNT
RVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwor
ICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8o
KSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5s
aW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50Owor
ICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAog
ICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwg
d2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9
IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1
aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0
cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMg
Y2FsbGVlLgpAQCAtMjM0LDE2ICsyNTMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29u
c3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBj
YWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2Fs
bFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFw
cGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChjb21waWxl
VGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBpZiAoY29t
cGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0
YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFudCwg
cmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBz
bG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1Qy
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQ
YXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJl
Z1QwLCByZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
ICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9KTsK
QEAgLTI1MywxMyArMjY4LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3Ry
dWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5m
by0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0
YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBs
YWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsK
IAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCArMjg4
LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdz
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAq
dGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlz
LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJv
bVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsMTcgKzQxMCwzMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdU
MSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4
dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwog
fQpAQCAtNDE2LDEwICs0NDQsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmpl
Y3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsK
ICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBA
IC00MzIsMTkgKzQ1OCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
IHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JH
UFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRl
cmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBh
dXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJh
dG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhp
cyk7CiB9CkBAIC00NTIsNyArNDc2LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsK
ICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5h
cnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0
OTMsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1
bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIy
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVy
aWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0
ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAg
bG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRP
ZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9N
ZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0
T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNl
ZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlv
biwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgp
OwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1Qw
CiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQ
UiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3Vs
dEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAg
bW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3Rl
eHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
ZG9udENsb2JiZXJSZWdpc3RlcjsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJl
c3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdz
ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVz
ZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJD
YWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUu
aW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIp
LCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25l
LmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1
YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFw
cGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpT
VmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05l
eHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNo
MSA9IHJlZ1QyOwotICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAg
ICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3Rl
cnMpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRl
U2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9y
LmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRj
aEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3Qg
aXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIp
LCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25E
b25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBnbG9iYWxHUFIpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQUlJl
ZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAg
bW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nl
c3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVy
dHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0
R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3
LDU5ICs1NzcsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwog
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVj
a3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyOworCiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7
CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAg
ICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90
T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUu
aW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21f
Z2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChp
dGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmpl
Y3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRH
UFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAg
ICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUp
PihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBu
b3RPYmplY3QubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJv
d0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RP
YmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0
ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAog
ICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZh
bHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlk
c1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNz
KEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShp
dGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwg
QWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihp
ZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCAr
MzIsMTEgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJS
ZWdpc3RlclNldC5oIgogCisKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBQQ1RvQ29kZU9yaWdp
bk1hcDsKKwogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBDb21tb25EYXRhOwogY2xhc3MgSklUQ29k
ZTsKQEAgLTE1OSwxMCArMTYyLDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIHVzZURh
dGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgewotICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURh
dGFJQygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAg
IH0KIApAQCAtMjIzLDYgKzIyNiw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTaGFyZWQoKSBj
b25zdCB7IHJldHVybiBtX3NoYXJlQXR0cmlidXRlID09IFNoYXJlQXR0cmlidXRlOjpTaGFyZWQ7
IH0KIAorICAgIHZpcnR1YWwgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkg
eyByZXR1cm4gbnVsbHB0cjsgfQorCiBwcml2YXRlOgogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwog
ICAgIFNoYXJlQXR0cmlidXRlIG1fc2hhcmVBdHRyaWJ1dGU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgdm9pZCBKSVRDb21waWxhdGlvbktleTo6ZHVt
cChQcmludFN0cmVhbQogICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBvdXQucHJpbnQoIihDb21waWxlIG9mICIsICptX3Byb2ZpbGVkQmxv
Y2ssICIgd2l0aCAiLCBtX21vZGUsICIpIik7CisgICAgb3V0LnByaW50KCIoQ29tcGlsZSBvZiAi
LCBSYXdQb2ludGVyKG1fY29kZUJsb2NrKSwgIiB3aXRoICIsIG1fbW9kZSwgIikiKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENv
bXBpbGF0aW9uS2V5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb21waWxhdGlvbktleS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDU3ICsz
MCw1NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgQ29k
ZUJsb2NrU2V0OworY2xhc3MgSlNDZWxsOwogCiBjbGFzcyBKSVRDb21waWxhdGlvbktleSB7CiBw
dWJsaWM6CiAgICAgSklUQ29tcGlsYXRpb25LZXkoKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9j
ayhudWxscHRyKQorICAgICAgICA6IG1fY29kZUJsb2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9t
b2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uKQogICAgIHsKICAgICB9
CiAgICAgCiAgICAgSklUQ29tcGlsYXRpb25LZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVU
eXBlKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhudWxscHRyKQorICAgICAgICA6IG1fY29k
ZUJsb2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9tb2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6REZH
KQogICAgIHsKICAgICB9CiAgICAgCi0gICAgSklUQ29tcGlsYXRpb25LZXkoQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSkKLSAgICAgICAgOiBtX3Byb2Zp
bGVkQmxvY2socHJvZmlsZWRCbG9jaykKKyAgICBKSVRDb21waWxhdGlvbktleShKU0NlbGwqIHBy
b2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQorICAgICAgICA6IG1fY29kZUJs
b2NrKHByb2ZpbGVkQmxvY2spCiAgICAgICAgICwgbV9tb2RlKG1vZGUpCiAgICAgewogICAgIH0K
ICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
IW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgPT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlk
Q29tcGlsYXRpb247CisgICAgICAgIHJldHVybiAhbV9jb2RlQmxvY2sgJiYgbV9tb2RlID09IEpJ
VENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOwogICAgIH0KICAgICAKICAgICBi
b29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSAhPSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFs
aWRDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuICFtX2NvZGVCbG9jayAmJiBtX21vZGUgIT0g
SklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CiAgICAgfQogICAgIAotICAg
IENvZGVCbG9jayogcHJvZmlsZWRCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZmlsZWRCbG9j
azsgfQogICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
OyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEpJVENvbXBpbGF0aW9uS2V5JiBv
dGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3Byb2ZpbGVkQmxvY2sgPT0gb3Ro
ZXIubV9wcm9maWxlZEJsb2NrCisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jayA9PSBvdGhlci5t
X2NvZGVCbG9jawogICAgICAgICAgICAgJiYgbV9tb2RlID09IG90aGVyLm1fbW9kZTsKICAgICB9
CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
V1RGOjpwYWlySW50SGFzaChXVEY6OlB0ckhhc2g8Q29kZUJsb2NrKj46Omhhc2gobV9wcm9maWxl
ZEJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8SklUQ29tcGlsYXRpb25N
b2RlPjo6dHlwZT4obV9tb2RlKSk7CisgICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKFdU
Rjo6UHRySGFzaDxKU0NlbGwqPjo6aGFzaChtX2NvZGVCbG9jayksIHN0YXRpY19jYXN0PHN0ZDo6
dW5kZXJseWluZ190eXBlPEpJVENvbXBpbGF0aW9uTW9kZT46OnR5cGU+KG1fbW9kZSkpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToK
LSAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKKyAgICAvLyBFaXRoZXIgQ29kZUJsb2Nr
KiBvciBVbmxpbmtlZENvZGVCbG9jayogZm9yIGJhc2xlbGluZSBKSVQuCisgICAgSlNDZWxsKiBt
X2NvZGVCbG9jazsKICAgICBKSVRDb21waWxhdGlvbk1vZGUgbV9tb2RlOwogfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKICNpbmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKKyNpbmNsdWRlICJKSVQuaCIK
ICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIK
IApAQCAtNDYsMTAgKzQ3LDkgQEAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBnYXJiYWdlU3R1
YkluZgogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKAog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAog
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQotICAgIDogbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQotICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCisgICAgOiBtX2ppdFR5cGUoaml0
VHlwZSkKIHsKLSAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRk
U3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKKyAg
ICBtX3N0dWJJbmZvID0gY29kZUJsb2NrID8gY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NU
eXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNh
bGxTaXRlSW5kZXggPSBjYWxsU2l0ZTsKIAogICAgIG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMg
PSB1c2VkUmVnaXN0ZXJzOwpAQCAtNTksNyArNTksNiBAQCB2b2lkIEpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYg
c2xvd1BhdGgsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCkK
IHsKICAgICBtX3N0dWJJbmZvLT5zdGFydCA9IHN0YXJ0OwotCiAgICAgbV9zdHViSW5mby0+ZG9u
ZUxvY2F0aW9uID0gZmFzdFBhdGgubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihtX2RvbmUp
OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkKQEAgLTY3LDYgKzY2
LDE1IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIG1fc3R1
YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9uT2Y8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KG1fc2xvd1BhdGhCZWdpbik7CiB9CiAKK3ZvaWQgSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5z
aWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBtX3N0YXJ0ID0gaml0
LmxhYmVsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlw
ZSkpOworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBq
aXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICBtX2Rv
bmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRv
cigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTExMCw3ICsxMTgs
NyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywK
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFzZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlKQogICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmln
aW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1
YkluZm9HUFIpCi0gICAgLCBtX2lzTGVuZ3RoQWNjZXNzKHByb3BlcnR5TmFtZS51aWQoKSA9PSBj
b2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAgICAsIG1faXNM
ZW5ndGhBY2Nlc3MoY29kZUJsb2NrICYmIHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2st
PnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VChiYXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9CkBAIC0xMjAsNiArMTI4
LDM1IEBAIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGEKICAgICBnZW5l
cmF0ZUZhc3RDb21tb24oaml0LCBtX2lzTGVuZ3RoQWNjZXNzID8gSW5saW5lQWNjZXNzOjpzaXpl
Rm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2Vzcygp
KTsKIH0KIAorc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKEpJVCYgaml0
LCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBiYXNlLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVn
IHJlc3VsdCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQu
bG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNj
cmF0Y2gpOworICAgIGppdC5sb2FkUHJvcGVydHkoYmFzZSwgc2NyYXRjaCwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBza2lw
SW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBK
SVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hlZC5saW5rKCZqaXQpOworfQorCit2
b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChK
SVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0
YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHVi
SW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9H
UFIsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBt
X2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKworCiBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6
OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlk
ZW50aWZpZXIsIEpTVmFsdWVSZWdzIHZhbHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVn
cyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTM4LDYgKzE3NSwxOCBAQCB2b2lk
IEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2VuZXJhCiAgICAgZ2VuZXJhdGVGYXN0Q29t
bW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKK3Zv
aWQgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisg
ICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5m
bywgc3R1YkluZm9HUFIpOworICAgIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhqaXQsIHN0
dWJJbmZvR1BSLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZSwgQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnNjcmF0Y2gsIEJhc2VsaW5lR2V0QnlJZFdpdGhU
aGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisK
IEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2Fj
aGVhYmxlSWRlbnRpZmllciwKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1
ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgCkBAIC0xNDksNiArMTk4LDM0
IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IKICAgICBtX3N0dWJJ
bmZvLT51c2VkUmVnaXN0ZXJzLmNsZWFyKHNjcmF0Y2gpOwogfQogCit2b2lkIEpJVFB1dEJ5SWRH
ZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWdu
ZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChK
SVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVs
KCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisKKyAg
ICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJS
ZWcgc2NyYXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBHUFJS
ZWcgc2NyYXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIEdQ
UlJlZyB2YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAg
ICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5zdG9y
ZVByb3BlcnR5KEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgYmFzZSwgc2NyYXRjaCwgc2NyYXRjaDIp
OworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vz
cy5saW5rKCZqaXQpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRp
bmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQu
bGFiZWwoKTsKK30KKwogdm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRo
KE1hY3JvQXNzZW1ibGVyJiBqaXQpCiB7CiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5s
aW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlSZXBsYWNlKCkpOwpAQCAtMzAwLDYgKzM3NywzMiBA
QCB2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0CiAgICAgZ2VuZXJhdGVG
YXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9
CiAKK3ZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAg
bV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywg
c3R1YkluZm9HUFIpOworCisgICAgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzY3Jh
dGNoOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSgpKSk7CisgICAgaml0LmJveEJvb2xlYW4odHJ1ZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQg
fSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNj
ZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJ
bmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91
dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hlZC5saW5rKCZqaXQpOworICAgIG1fZG9uZSA9IGpp
dC5sYWJlbCgpOworfQorCiBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpKSVRJbnN0YW5jZU9mR2Vu
ZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LAogICAgIGNvbnN0
IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUs
IEdQUlJlZyBwcm90b3R5cGUsIEdQUlJlZyBzdHViSW5mb0dQUiwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShK
SVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9uVmFs
aWRhdGlvbi5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NKU1Zh
bHVlLmgiCiAjaW5jbHVkZSAiUHV0S2luZC5oIgpAQCAtMzgsMTEgKzM5LDExOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXI7CiBjbGFzcyBDYWxsU2l0ZUluZGV4
OwogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklUOwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87
CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKIAogZW51bSBjbGFzcyBBY2Nlc3NU
eXBlIDogaW50OF90OwogZW51bSBjbGFzcyBKSVRUeXBlIDogdWludDhfdDsKIAorc3RydWN0IEJh
c2VsaW5lRGVsQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0g
R1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQ
UkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9
IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFs
UmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpy
ZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Qy
OworICAgIC8vIFdlIHJlbHkgb24gdGhpcyB3aGVuIGxpbmtpbmcgYSBDb2RlQmxvY2sgYW5kIGlu
aXRpYWxpemluZyByZWdpc3RlcnMgZm9yIGEgR2V0QnlWYWwgU3R1YkluZm8uCisgICAgc3RhdGlj
X2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHkpOworICAgIHN0YXRpY19hc3NlcnQocmVzdWx0ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnJlc3VsdCk7CisgICAgc3RhdGljX2Fzc2VydChzdHViSW5mbyA9PSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mbyk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86
OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6YXJn
dW1lbnRHUFIyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3RvID0gR1BSSW5mbzo6
YXJndW1lbnRHUFIzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BS
SW5mbzo6YXJndW1lbnRHUFIxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gx
ID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMiA9IEdQUkluZm86Om5vbkFyZ0dQUjE7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdU
MTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
R1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgZG9udENsb2JiZXJSZWdpc3RlciA9IEdQUkluZm86OnJlZ1QzOwor
fTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgdGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeUlkUmVn
aXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworfTsK
Kworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJh
bmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJl
Z1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Igewog
cHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9CkBAIC02MiwxMiAr
MTcwLDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKAogICAgICAgICBMaW5rQnVmZmVy
JiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlciwKICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsKLSAg
ICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2ln
bmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2VkU3R1YkluZm8geyBudWxscHRyIH07CisgICAg
dW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBwcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0VHlwZTsKICAgICBTdHJ1Y3R1cmVTdHViSW5m
byogbV9zdHViSW5mbzsKIAorcHVibGljOgorICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0
YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Ns
b3dQYXRoQ2FsbDsKQEAgLTk4LDcgKzIxMiw3IEBAIHByb3RlY3RlZDoKICAgICBKU1ZhbHVlUmVn
cyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBtX3N0YXJ0OworcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xv
d1BhdGhKdW1wOwogfTsKIApAQCAtMTExLDYgKzIyNSw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNW
YWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNj
ZXNzVHlwZSk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVy
Jik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWdu
ZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIAogcHJpdmF0ZToKICAg
ICBib29sIG1faXNMZW5ndGhBY2Nlc3M7CkBAIC0xMjQsNiArMjM5LDcgQEAgcHVibGljOgogICAg
ICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25z
dCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICAg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHRoaXNS
ZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJ
bmZvR1BSKTsKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIH07
CiAKQEAgLTEzMiwxMCArMjQ4LDExIEBAIHB1YmxpYzoKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
KCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJs
b2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2Us
Ci0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBz
Y3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CisgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUs
IENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1v
ZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2Vt
YmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVu
c2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAgICAgCiAgICAg
Vl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0aW9uKCk7CiAKQEAgLTE2MywxMSAr
MjgwLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1i
bGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVS
ZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTE5
MSw4ICszMDYsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9B
c3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFy
dDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07
CiAKQEAgLTIxNiw4ICszMjksNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNTIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVy
YXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBt
X3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI1NSw2ICszNjQsNyBAQCBwdWJsaWM6CiAgICAgICAg
IEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIp
OwogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9p
ZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9D
b25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIH07CiAKIGNsYXNzIEpJVEluc3RhbmNlT2ZH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewpAQCAtMjc3
LDggKzM4Nyw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFz
dFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOwogCi1wcml2
YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzAyLDExICs0MTAs
OSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1i
bGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVS
ZWdzIG1fcmVzdWx0OwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0z
MzAsOCArNDM2LDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChN
YWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1w
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Okxp
bmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAo
IXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwor
fQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFu
dCkgeworICAgICAgICAvLyBBbGwgbGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFu
dCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgUkVM
RUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3Rh
bnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwog
fQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIo
UmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xNTYsMzYgKzE4MSwz
NiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4CiAjZW5kaWYKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJu
VmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZh
bHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2FsbDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRk
cmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwg
cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBK
U1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0
b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKIH0KIAog
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93bkNl
bGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMDUsNyArMjMw
LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZv
aWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNv
ZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwog
ICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3Vs
dCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAg
LTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50
CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1
bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1l
dGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlv
biwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwor
ICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5
dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgsMzMgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRD
b25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29u
c3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5n
KGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQot
aW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFs
dWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKTsKLQotICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9u
bHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4K
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmls
ZS5tX2J1Y2tldHMpOwotI2Vsc2UKLSAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlw
dG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUu
bV9idWNrZXRzKTsKLSAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3It
PmFzQml0cy5wYXlsb2FkKTsKLSAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRv
ci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKLX0KKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Cit9CisKKy8vaW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxl
LCBKU1ZhbHVlUmVncyB2YWx1ZSkKKy8veworLy8gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxp
bmcoKSk7CisvLworLy8gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25s
eSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAorLy8gICAgLy8gc3RvcmUu
CisvLyNpZiBVU0UoSlNWQUxVRTY0KQorLy8gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQ
cm9maWxlLm1fYnVja2V0cyk7CisvLyNlbHNlCisvLyAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
KiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1
ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAm
ZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOworLy8gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIo
KSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOworLy8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlw
ZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQog
ewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKICNlbmRpZgpAQCAtMzIzLDQxICszNTIsNDIgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8
c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVBy
b2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7
CisKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9y
PEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6
b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3Mo
c19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9m
aWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFs
dWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJS
ZWcgcmVzdWx0UmVnKQorLy97CisvLyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJv
ZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisvL30KIAotdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRh
dGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlm
CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lz
dGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgc2Ny
YXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
cHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lz
dGVySUQgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAg
ICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNo
R1BSLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAg
ICAgIHN0b3JlMzJUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5
UHJvZmlsZSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxl
R1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+
CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBC
eXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNo
R1BSKQogewotICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgbG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3Mo
YXJyYXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJ
RCgpKSk7Ci0gICAgfQorICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29k
ZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9m
aWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2VsbEdQUiwgc2NyYXRjaEdQUik7
CiB9CiAKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQpAQCAtMzgwLDcgKzQxMCw3IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUo
VmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlmIChyZWcu
aXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFu
dFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOworICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+
Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIo
JmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAgICBsb2FkRG91Ymxl
KGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcgKzUyNiw3IEBAIGlubGluZSB2b2lk
IEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1f
Y29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcp
KSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcgKzUzNiw3IEBAIGlubGluZSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcp
CiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICgh
aXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNCwxMSArNTQ0
LDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogICAgIH0KIH0K
IAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJl
Z2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omdl
dE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0LDExICs1NjksMTEgQEAgQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5dGVjb2Rl
SW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAg
ICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkp
Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwg
ZHN0KTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXND
b25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKSB7CisgICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAg
ICAgICAgIG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgZHN0KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTY2LDExICs1OTEsNiBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQo
KSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
UmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsK
QEAgLTU5NSw3ICs2MTUsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2Nv
ZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkK
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTYzNywz
MCArNjU3LDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewog
ICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29k
ZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKLX0KLQotQUxXQVlTX0lO
TElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNv
ZGUpCi17Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsgLy8g
SGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Nv
cGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRH
ZXRQdXRJbmZvcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZh
bHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwg
Z2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJbmZvOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxl
IEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2
NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEp
IDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0g
ICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAg
aWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxl
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1f
Y29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBh
cml0aFByb2ZpbGU7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPm91dE9mTGluZUp1
bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY4
MSw2ICs2NzgsNjAgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAog
ICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQorewor
ICAgIGxvYWRQdHIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5t
ZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1
bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXpl
X3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQzMihBZGRyZXNzKHNfbWV0YWRh
dGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRh
YmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sK
KyAgICBsb2FkOChBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2Rl
PgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUgdmFs
dWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9y
ZTgodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0
YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0
b3JlMzJUb01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBz
aXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlMzIodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQ
UiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Ynl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgp
Lm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBzX21ldGFkYXRhR1BS
LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29uc3RhbnQoSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBHUFJSZWcgcmVzdWx0KQorewor
ICAgIGxvYWRQdHIoQWRkcmVzcyhzX2NvbnN0YW50c0dQUiwgc3RhdGljX2Nhc3Q8dWludHB0cl90
Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZENvbnN0YW50
KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIEdQ
UlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgp
KTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVz
dWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29u
c3RhbnRzVmVjdG9yQnVmZmVyKCkpLCByZXN1bHQpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlc3Vs
dCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2YoSlNWYWx1ZSkpLCByZXN1bHQp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpj
YWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVG
b3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2Vw
dGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9
IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC05OTcsNyArOTk3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogCiAgICAgLy8gY3Jl
YXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNo
IHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
LSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3
aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3
aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUo
dW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBz
d2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29u
c3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRl
eCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rl
cikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBA
IC0xMDQyLDcgKzEwNDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0
IEluCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0
cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgs
IG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsK
ICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODI2NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw2ICs0Myw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5j
bHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50
ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTQsMTEg
KzU2LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29u
c3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0
b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRz
dCkpOwotICAgICAgICBlbHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0Nv
bnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAg
ICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihk
c3QpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFu
dChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0
KSk7CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NywzNyArOTIs
MzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2Jq
ZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0Zp
bmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwot
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVu
dGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdU
MDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQg
c2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7
CiAKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRl
cmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0
b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBz
bG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVn
LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1f
dm0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0
b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSAr
IE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVS
ZWcpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1
c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcs
IEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1
dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVj
dHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7
CisgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7
CisgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0g
cmVnVDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
LnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBl
bWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0xMzEsNyArMTM0LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCiAgICAgLy8gV2UgZG9u
J3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAg
IEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3Rv
SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
MSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFs
LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBt
X2Z1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKSkpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOwogCkBAIC0xNTQsMzAgKzE1OCwz
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRz
IChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMu
Ci0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3
aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3RvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgdmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3Rv
R1BSKTsKICAgICAKICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBt
dXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1i
b2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2
YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0
YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAog
ICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1Qx
LCAvLyBwcm90bwotICAgICAgICByZWdUNSwKLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2Ny
YXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICByZXN1bHRHUFIsCisgICAgICAgIHZhbHVlR1BSLAorICAgICAgICBwcm90b0dQUiwKKyAg
ICAgICAgc3R1YkluZm9HUFIsCisgICAgICAgIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
c2NyYXRjaDEsIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VP
ZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwot
ICAgIAorCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQg
KzIwNCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAg
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZP
cHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0
aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJl
Z1QxKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9
PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxp
bmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlv
bjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50
R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0
VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRH
UFIzKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0
aW9uKikKQEAgLTI0MCw3ICsyNTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5k
ZWZpbmVkKGNvCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzgzLDkgKzM5NCw5IEBAIHZvaWQgSklU
OjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9w
X3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7Ci0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0YWNrUG9p
bnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdp
c3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBA
IC00MTEsNyArNDIyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElu
cwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NDQsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0
X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9u
TmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24s
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVn
VDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQ
UjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ3NiwxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxP
YmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwg
SlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7
CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNDkzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1MzIsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0Nl
bGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0
dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBt
YXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU1
Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAgICAvLyBG
aXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
Yml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs1OTUsMTMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5l
cV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9p
bnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAg
ICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
ICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxs
SGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1Q
dHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEp
LCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRl
Y29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVx
dWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRh
dGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwu
bGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2MzYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
cmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRh
cmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1
bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2Ny
YXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0
YXJnZXQpOwpAQCAtNjQwLDcgKzY1Myw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQg
Z2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIg
Z2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzA4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhy
b3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBj
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5
RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVn
VDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5k
bGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzcyNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Ro
cm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2Vu
ZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BS
MjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpA
QCAtNzIwLDcgKzczNCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIGppdC5s
b2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5jb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRHUFIwKTsK
KyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYXJn
dW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RH
UFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyArOTIyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEs
IHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5MzMs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CiAKQEAgLTkzMSw3ICs5NDcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29u
c3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDAp
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVn
VDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTY3LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVn
ICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9
CkBAIC05NzgsNyArOTk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IElu
c3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBk
c3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAt
OTkzLDcgKzEwMDksMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQo
KSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxw
dHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91
bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFdoZW4gdGhlIExMSW50IHRocm93cyBh
biBleGNlcHRpb24sIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFkeSB0aWVyZWQg
dXAKKyAgICAvLyB0byBiYXNlbGluZSwgYW5kIHdlJ2xsIGNhdGNoIHRoYXQgZXhjZXB0aW9uIGlu
IHRoZSBiYXNlbGluZSBKSVQuIEJlY2F1c2UgdGhlIExMSW50IHVzZXMKKyAgICAvLyB0aGUgYSBk
aWZmZXJlbnQgdmFsdWUgaW5zaWRlIHNfY29uc3RhbnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdl
IHJlc3RvcmUgYWJvdmUgbWF5IG5vdAorICAgIC8vIGNvbnRhaW4gdGhlIGNvcnJlY3QgdGhhdCBy
ZWdpc3Rlci4gU28gd2UgcmVwbGVuaXNoIGl0IGhlcmUuCisgICAgeworICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdU
MCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpv
ZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworICAgIH0KIAogICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJF
eGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRp
b24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyAr
MTAzNywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAg
Ly8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0
YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgK
IAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRh
dGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRl
ckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJB
dENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsK
KyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0
Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwog
ICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRo
aXMpOwotICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAg
IGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJv
ZmlsZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4o
cHJvZmlsZSksIHJlZ3MpOwotICAgICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCiB9CiAKQEAgLTEwNTMsOCArMTA2Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNv
ZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRl
c3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNv
bnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxl
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
ICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29k
ZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxp
bmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsx
MDk1LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChT
d2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBT
d2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxl
KHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUs
IHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93
bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRo
VW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1
bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CiB9CiAKQEAgLTEwOTksMjAgKzExMTQsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBi
eXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0
Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFi
bGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRj
aFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRj
aFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5r
ZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlU
eXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0
YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1l
bnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2Nr
KCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDAp
OwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1Qw
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8
aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMu
bGluayh0aGlzKTsKQEAgLTExMzMsNyArMTE1MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251
bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBh
cmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRp
YXRlID0ganVtcCgpOwpAQCAtMTE0OCw3ICsxMTY1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFf
bnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTExNjYsNyArMTE4Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNv
bnN0IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwog
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIo
Tm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRl
ID0ganVtcCgpOwpAQCAtMTE4OCwxMiArMTIwNCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRl
cihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRo
ZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBz
dGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8g
b2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBj
b3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxp
bmtlZENvZGVCbG9jay0+bnVtVmFycygpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
ICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNw
YWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5p
dFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJh
cnJpZXIobV9jb2RlQmxvY2spOworICAgIAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7
CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEyMTIsNyAr
MTIzMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBq
aXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0xMzEwLDIzICsxMzI4LDE5IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1
cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIo
Y2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdU
Mik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlz
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBX
cml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2Fj
aGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0
ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVn
VDA7CkBAIC0xMzQyLDcgKzEzNTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpy
YXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRh
UmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkg
KyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJl
KCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2Fk
UHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRD
YWxsZWUoKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2Fs
bGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIo
SlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBo
YXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzODYsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEz
OTcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJ
bW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcgKzE0MTAsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVn
VDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxNDIxLDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsx
NDM2LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAg
IFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5j
ZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFs
dWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE0MzAsNyArMTQ0OSw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9o
aW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2Nv
ZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsK
KyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0Zv
ckZ1enppbmcoKSAmJiBtX3VubGlua2VkQ29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZv
ckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZtKCku
Z2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZFB0
cihwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2hQdHIo
QmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmlu
aXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xNDQwLDcgKzE0NTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAjZWxzZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OwogI2VuZGlmCi0gICAgICAgIG1vdmVWYWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkp
OwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0x
NDUzLDggKzE0NzIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
CiAKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2Fu
QmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQ
b3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNy
ZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2Nr
LT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVzcyhy
ZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQog
fQogCkBAIC0xNTA5LDcgKzE1MjksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRs
ZVRyYXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTUyMiw3ICsxNTQzLDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2No
ZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4
NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTE1NjQsMzQgKzE1ODUsMzYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9y
ZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IGFyZ3Vt
ZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1fdW5s
aW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxs
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQg
SklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9h
ZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2Rl
Lm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbCwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFu
dChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6
Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNF
eGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2Rl
SUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAg
ICB9CiB9CiAKQEAgLTE2MjEsMjMgKzE2NDQsMjQgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhw
ckNvbW1vbihjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1f
c2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJn
dW1lbnRHUFIxKTsKICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9
IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAg
IGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpGdW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90
PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQs
IGFyZ3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAK
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3Bf
bmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09
IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29k
ZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNH
ZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OwogICAgIH0KIH0KIApAQCAtMTY2NCwyOSArMTY4OCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBi
eXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUs
IHJlZ1QwLCBzaXplKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQUjIp
OworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJh
eTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQ
UjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5
V2l0aFNpemU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAg
ICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmd1bWVudEdQUjIpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogI2Vsc2UKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMik7CiAgICAgZW1pdExvYWQoc2l6ZUluZGV4
LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3Qs
IHJlZ1QzLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApA
QCAtMTY5NCw4ICsxNzE5LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3Np
emUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgbV9pc1NoYXJlYWJsZSA9IGZhbHNlOworCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90
eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNv
ZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE3NzcsMjAgKzE4MDQsMjUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQo
bm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZl
IHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBz
aGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdH
UFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVn
IHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgp
LCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgeworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBu
b24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1Qy
OworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJl
Zywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9j
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFk
b3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwg
cmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5k
aWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9s
X2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBtX2lz
U2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlv
biogYmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29k
ZSgqdGhpcyk7CkBAIC0xODYwLDcgKzE4OTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJn
dW1lbnQoY29uc3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3Mp
OwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE4ODYsNyArMTkxOCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlw
ZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBz
bG93Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFyaXRoUHJv
ZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJDYWNoZWFi
bGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNp
bmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgi
CiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKQEAgLTI4NTUsNyArMjg1Niw3IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3Qg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQg
PSBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIApAQCAtMjg4
MCw3ICsyODgxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAog
ICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29k
ZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBt
aW4pOwogICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoa2V5LmlzSW50MzIoKSkKQEAgLTI5MDMs
NyArMjkwNCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHZvaWQq
IHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJs
b2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5n
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CiAKICAgICBpZiAoa2V5LmlzU3RyaW5nKCkpIHsKICAgICAg
ICAgU3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmluZyhrZXkpLT52YWx1ZShnbG9iYWxPYmplY3Qp
LmltcGwoKTsKQEAgLTI5MTksNyArMjkyMCw2IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25Td2l0Y2gKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0
KTsKIH0KIAotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1ZSwg
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RydWN0aW9uKiBwYykpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMjk3MSw3ICsyOTcxLDYgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdgogCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXNvbHZlZFNjb3BlKTsKIH0KLSNlbmRpZgogCiBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RydWN0aW9uKiBwYykpCiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5MCw5ICsyOTAsNyBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkdldFByCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaENo
YXJXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIGNoYXIq
LCAoVk0qLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1p
bikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRo
VW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBr
ZXksIHNpemVfdCB0YWJsZUluZGV4KSk7Ci0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5l
LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5
dGVjb2RlUEMpKTsKLSNlbmRpZgogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25H
ZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0
cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25QdXRUb1Njb3BlLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiog
Ynl0ZWNvZGVQQykpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDEyIEBAIGF1dG8gSklUUGxhbjo6dGllcigp
IGNvbnN0IC0+IFRpZXIKIAogSklUQ29tcGlsYXRpb25LZXkgSklUUGxhbjo6a2V5KCkKIHsKLSAg
ICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkobV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRp
dmUoKSwgbV9tb2RlKTsKKyAgICBKU0NlbGwqIGNvZGVCbG9jazsKKyAgICBpZiAobV9tb2RlID09
IEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpCisgICAgICAgIGNvZGVCbG9jayA9IG1fY29k
ZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgIGVsc2UKKyAgICAgICAgY29kZUJsb2Nr
ID0gbV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICByZXR1cm4gSklUQ29t
cGlsYXRpb25LZXkoY29kZUJsb2NrLCBtX21vZGUpOwogfQogCiBib29sIEpJVFBsYW46OmlzS25v
d25Ub0JlTGl2ZUFmdGVyR0MoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZh
dGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJl
Z1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5zdHVi
SW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwx
MDIgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5j
b3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewot
ICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAg
ICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRp
ZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJz
KCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOwor
ICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIs
IHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BS
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25H
ZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCBy
ZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNl
R1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKKyAgICAgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJ
bmZvR1BSKTsKKwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQog
ICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAg
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0
UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5
VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkg
ewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAg
aWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRlcikpCisgICAgICAgIHJldHVybjsKKworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0
QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4
KytdOwogCi0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEs
IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BS
Myk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1l
bnRHUFI0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEp
OworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlw
ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1p
emUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4
KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0
ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9
PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJv
cGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcx
IGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVu
dEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9w
ZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsx
NTksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNz
KCk7CkBAIC0xNjAsOCArMTcwLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRH
UFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3Nl
cnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMTg3LDM0ICsxOTcsNDAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0K
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAg
ICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpA
QCAtMjIzLDkgKzIzOSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTIzNSwyNiArMjUzLDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJp
dmF0ZV9uYW1lKGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIg
PT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7
Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRl
TmFtZU9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTI2NCw3ICsyNzYs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQg
bWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFp
bGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlu
bGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1h
eSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7
CkBAIC0zMDAsMjEgKzMxMiwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFu
ZChjb25zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQ
cml2YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKLSAgICBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOworCisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJyYW5kLCBicmFuZEdQUik7Ci0KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BS
KSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBz
dHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9w
cml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0
IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVy
IGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTMyNCwxNyArMzQzLDIyIEBAIHZvaWQgSklUOjplbWl0
X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNo
b3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVf
YnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CisK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNz
R2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNj
ZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBl
KG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0zNDQsMjQgKzM2OCwxOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRp
b25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0
czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlw
ZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hl
Y2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMzcwLDMzICszODgsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFu
ZChjbwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJy
YW5kLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BS
KSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2No
ZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDaGVja1ByaXZhdGVCcmFuZD4oKTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGUpOwor
CiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
cmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIGNh
bGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+
KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0
MzgsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBh
bHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAh
aXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BS
MSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25U
cmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1
bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFt
ZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFu
ZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDM1LDMwICs0NjEsNDIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7Cisg
ICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6
Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJv
ZmlsZUdQUiwgc3R1YkluZm9HUFIpOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHBy
b3BlcnR5KSkKICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDsK
KyAgICBzdHViSW5mby0+cHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsRGly
ZWN0PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5m
by0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00NzQs
MTUgKzUxMiwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsK
ICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKLSAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0
ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAgICAgICAgIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKLSAgICAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0Rp
cmVjdCkKQEAgLTQ5OCw3ICs1MzMsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSQogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkg
YXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkg
PyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEsIHJlZ1QyLCBnZW4uc3R1YkluZm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1l
bnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFI0KTsKKyAgICBpZiAoaXNEaXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+
KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBh
cmd1bWVudEdQUjUpOworICAgIGVsc2UKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbDo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAgY2Fs
bE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKT4oQWRk
cmVzcyhhcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50
R1BSMywgYXJndW1lbnRHUFI0LCBhcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtNTEyLDcgKzU1Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7
CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5
X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAg
ICBDYWxsIGNhbGw7CiAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0
KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZSk7CkBAIC01MjMsNyArNTY3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQpAQCAtNTMzLDE4ICs1NzcsMjQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQu
dGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RH
UFIgPSByZWdUNTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgeworICAgICAgICBSZWdpc3RlclNl
dCB1c2VkKEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5LCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZSwgQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5j
b250YWlucyhyZWdUNCkpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDUpKTsK
KyAgICB9CisKIAogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBqaXQubG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7
CkBAIC01NzAsMjAgKzYyMCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1l
KGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0
dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmllbGRQdXRL
aW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0
QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTk0LDggKzY1NSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1l
PigpOwotICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2lu
ZDsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgIEpJVFB1dEJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKQEAg
LTYwMywxMyArNjYzLDE1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1l
KGMKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgYXV0byBvcGVy
YXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZh
dGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6
ZTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgLy8gVGhleSBhcmUgY29uZmln
dXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7Ci0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBnZW4u
c3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKKworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFI0KTsKKyAg
ICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZp
ZWxkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0
cikpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNjIyLDE4ICs2ODQsMTIg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIAogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENh
bGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsK
LSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC02NDMsMTQgKzY5OSwxNCBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IHJlZ1Q0OwogCkBAIC02ODAsNyArNzM2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRH
ZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTY4OSw3ICs3NDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0
dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNl
dHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3NTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRl
ciwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIs
IHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJl
Z1QxLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0
ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3Njgs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJf
dCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtNzE5LDcgKzc3OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
cHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29y
LCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBh
dHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3LDIzICs3ODgsMzMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5
SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9
IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdU
Mik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1p
dCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmll
ciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC03NTksMTUgKzgzMCwxNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5k
ZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRP
cHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJh
dGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODU0LDE5IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIg
PSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2Rl
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5
X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODA4LDcgKzg3Niw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
QEAgLTg0NSwyMiArOTEzLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3Qg
SW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9w
ZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1
bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJl
Z1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
dHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZh
bDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihy
ZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBl
bWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJy
aWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVy
ZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTYy
LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0
aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5t
X2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTg5OSwyNCArOTgwLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0
IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlW
YWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
bkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAg
ICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC05MjYsNyArMTAwMiw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTk2MSwy
MiArMTAzNywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVz
dWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwg
QWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTk4NiwxNCArMTA3MSwxNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Cisg
ICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpPihB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwMDMsMjYgKzEwOTEsMjAgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHBy
b3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcs
IHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xMDMwLDIyICsxMTEyLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZF9kaXJlY3QoY29uc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3Q7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwog
fQogCkBAIC0xMDU0LDE2ICsxMTQ1LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfZGlyZWN0KGMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVy
YXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTY2LDYxIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQ
UjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02
NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwog
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRE
aXJlY3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9p
ZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRD
YWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5W
YWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5W
YWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0
Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEp1bXAgbm90QXJy
YXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0
YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhN
b2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5
SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSnVt
cCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdl
dEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRh
ZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRS
ZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsK
IAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CiAKLSAgICBKSVRHZXRCeUlkV2l0
aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5
SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dD
YXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2ICsxMjI5LDE4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4o
Ynl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3NywyNiArMTI1MCw1NyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMzsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJv
cGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5k
Q2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVH
UFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVH
UFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRX
aXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1Zh
bHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworCisgICAgSklUR2V0QnlJZFdpdGhUaGlz
R2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCkBAIC0xMjA2LDcgKzEzMTAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAg
ICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMjQxLDE2ICsxMzQ1LDE5IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVy
YXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1Qx
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKT4o
Ynl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYw
LDI4ICsxMzY3LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkK
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8v
IGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnRoaXNWYWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAg
fHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BS
MSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywg
cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyOTEsNyArMTM5Miw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTEzMjksMjMgKzE0MzAs
MzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVj
b2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0
Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9u
ZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4g
bG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29k
ZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQg
dGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZS
ZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzdHViSW5mb0dQ
Uiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRL
aW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlJZDsK
KyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtp
bmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29k
ZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAg
ICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJp
ZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsxNDc0LDE4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlk
PigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAgICAKICAgICBKSVRQdXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2Vu
LnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMzc2LDI1
ICsxNDk1LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFy
ZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1Qx
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAg
c3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IGdlbi5zbG93UGF0aEZ1bmN0aW9uKCk7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChnZW4uc2xvd1BhdGhGdW5jdGlvbigpKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTE0MDQsNyArMTUxNyw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE0NDEs
MjAgKzE1NTQsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Ywog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0NjMsMTQgKzE1ODcsMTcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxs
T3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjA3LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
Ly8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5
IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBh
IGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2MzEsMzMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NjYsMTggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlW
YWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5
VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50
R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1p
emUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC0xNTU2LDU5ICsxNjg4LDcwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBh
cmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRH
UFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAg
c3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6
Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0
X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVk
LgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRo
dW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSksIGRlY2x0eXBl
KG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeVZhbE9wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVh
bFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5
cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlP
ckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlwZTsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJVDo6ZW1pdEhhc1ByaXZh
dGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBBU1NFUlQodHlwZSA9
PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVCcmFuZCk7CisgICAgVU5VU0VEX1BBUkFNKGJhc2UpOworICAgIFVOVVNFRF9QQVJBTShw
cm9wZXJ0eSk7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIAog
ICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgr
K107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6
ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdU
MSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0
aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpPihBZGRyZXNzKGFy
Z3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
ZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2MSwy
MSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlP
ckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlP
ckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFz
UHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBl
KG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0
UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVO
YW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZh
dGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTY1Miw3ICsxNzg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19w
cml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAg
IGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUu
bV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDIxNSArMTgwMywxMjcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhh
c1ByaXZhdGVCcmFuZD4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3Qs
IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5
dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hl
Y2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0
aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIHNjcmF0Y2hHUFIp
CiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworCisgICAgbG9hZEdsb2JhbE9i
amVjdChzY3JhdGNoR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNU
X09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgc2Ny
YXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNo
R1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgcmVnVDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQogICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVn
VDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBw
cm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7Ci0gICAgdW5z
aWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKLQotICAgIGF1dG8gZW1p
dENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpT
U2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2Nr
KHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChj
b25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCBy
ZWdUMSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCBy
ZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAg
ICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2Nv
cGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNv
bHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIGRlcHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoK
LSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9u
bWVudC5nZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToK
LSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNv
bHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0
Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAg
IHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVz
b2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0jZWxzZSAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9y
ZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4
cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29w
ZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUg
Z2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVz
b2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwg
cmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAg
ICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVsc2UgewotICAg
ICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5
dGVjb2RlKTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZt
KSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmso
dm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7
CisgICAgICAgIH07CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5
cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBz
dGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAg
Rk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAgICBh
dXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2
bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5r
KHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNv
bHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7CiAgICAgICAgIH07
Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBhdXRvIGdlbmVyaWNS
ZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4g
SklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2Vs
aW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMiKTsKKyAgICAgICAgfTsKKworICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDI7CisgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0
KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7
CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAg
ICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAg
ZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7CisgICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAg
ICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNj
b3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkg
dGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklU
IGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBP
cFJlc29sdmVTY29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQ
UiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSBy
ZWdUNjsgLy8gaW5jb21pbmcKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVn
VDI7IC8vIGluY29taW5nCisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOyAv
LyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdU
NTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgotICAgIGNvbnN0ZXhwciBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNj
b3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxv
Y2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywg
bWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihy
ZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRv
IGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKKyAgICBhdXRvIGRv
VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQ
UlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgIGlmICghbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChn
bG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2Jq
ZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBD
b2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAg
ICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1Qz
KTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMs
IFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JK
RUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwg
cmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJl
c3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9
IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNjb3Bl
R1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKLQotICAgICAg
ICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QxKTsKLSAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29w
LCB0aGlzKTsKLSAgICAgICAgfQotICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRv
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHNjb3BlR1BSID09IHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZMb2NhbFNjb3BlRGVwdGgoKSksIHJlZ1Qx
KTsKKworICAgICAgICBMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOworICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAg
aml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICBqaXQuanVtcCgpLmxp
bmtUbyhsb29wLCAmaml0KTsKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgIH07CiAKICAg
ICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewpAQCAtMTg4
MiwxMiArMTkzMSwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25z
dGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4K
LSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2No
KSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2Jh
bExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKGdsb2Jh
bE9iamVjdEdQUiwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2No
KCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIApAQCAtMTg5NywxMSArMTk0NSwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2Rl
QmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAog
ICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGlj
YWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAg
IGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25t
ZW50KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENsb3N1cmVWYXI6CkBAIC0xOTA5LDcgKzE5NTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgp
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBN
b2R1bGVWYXI6CkBAIC0xOTE5LDgzICsxOTY3LDQ1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29s
dmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7
Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZl
VHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkg
PyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxW
YXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVt
aXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRh
OjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdUMSk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
aml0Lmp1bXAoKSk7CisgICAgICAgICAgICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07
CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5s
aW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIGVtaXRDYXNlKEdsb2Jh
bFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENh
c2UoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsK
IAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAg
YnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAotICAgIHJldCgp
OworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xv
d0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVy
YXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwo
c2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6
OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJl
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9SRVNPTFZF
X1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJh
dG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNl
ZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsg
fTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Nj
b3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJ
TkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpz
bG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVu
ayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50
IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91
dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdp
bmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIAogICAgIC8vIFRoZSBmYXN0IHBhdGggYWxyZWFkeSBwdXNoZWQgdGhlIHJldHVybiBh
ZGRyZXNzLgogI2lmIENQVShYODZfNjQpCkBAIC0yMDM0LDcgKzIwNDQsNiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgcGF0Y2hCdWZmZXIubGluayhleGNl
cHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQ
dHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNvbHZlX3Njb3BlIik7CiB9Ci0jZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3Qp
CiB7CkBAIC0yMDYyLDI3NiArMjA3MSwxMzMgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFy
KFZpcnR1YWxSZWdpcwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSks
IHJlZ1QwKTsKIH0KIAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAg
ICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgp
OwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dElu
Zm8ucmVzb2x2ZVR5cGUoKTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKLSAgICAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAg
ICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUg
c3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxs
eSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4K
LSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVz
dWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2Nv
cGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSkpOwotICAgICAgICAgICAgfSkpOworICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNv
ZGVJbmRleCk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgICAgICAgICBs
b2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJM
RUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRl
clRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkp
OwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGlu
ZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAg
ICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2Fk
NjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBj
YXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZv
ck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgaWYgKHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xv
c3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBj
YXNlIE1vZHVsZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KKyAgICBhdXRvIGNs
b3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6Omdl
bmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9n
ZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2
ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwot
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkg
PyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxW
YXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsK
LSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDAp
OyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGlu
ayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotCi0gICAg
ICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBk
ZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlv
bkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLSNlbHNlIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29k
ZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2Vu
ZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsK
IAotICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7Cisg
ICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpu
dWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9Owog
Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAotICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsKLSAgICAgICAgdWludHB0cl90KiBvcGVyYW5kU2xv
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0g
ICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVy
YW5kU2xvdCksIHJlZ1QwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRh
dGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7
CisgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0
YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0jZGVmaW5lIEdFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNv
bHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3Ig
Z2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKEdFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUikKLSAgICAgICAgfTsKLSN1bmRlZiBHRVRfRlJPTV9TQ09QRV9H
RU5FUkFUT1IKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwog
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLSAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jl
c29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICB9CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgIGlmIChwcm9maWxlZFJl
c29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNs
b3N1cmVWYXJHZW5lcmF0b3IpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0g
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGNvZGUgPSB2bS5nZXRD
VElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICBl
bHNlCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5l
cmF0b3IpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9t
U2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBl
LCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBi
eSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBK
SVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2Vk
Rm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKLQotICAgIHRhZ1JldHVybkFkZHJlc3Mo
KTsKLQotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0
YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCi0gICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9
IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSB7
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgbWV0YWRhdGFTdHJ1Y3R1cmVP
ZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwotICAgIH07CisgICAg
aml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAg
aml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2U7
CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxP
YmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0Ojpv
ZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdU
MywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9p
bnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWws
IEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFy
RnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBs
b2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxv
YWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0g
WyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBsc2hpZnQ2NChU
cnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9w
ZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7Ci0gICAgfTsKLQotICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGly
ZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUg
c3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxs
eSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4K
LQotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAo
dm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwg
cmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJl
Z1QzKTsKKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlv
biBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEds
b2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcg
Zm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgp
KSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRy
KFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0
cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisKKyAgICAgICAgICAgIGppdC5qaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAg
ICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAg
ICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNU
X09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQo
KSksIHJlZ1QxKTsKKwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAg
ICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwg
b2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAg
ICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAg
ICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091
dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRX
aXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091
dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAg
ICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9m
ZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zm
c2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworCisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAg
ICAgICBqaXQubmVnMzIocmVnVDEpOworICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QxLCByZWdUMSk7CisgICAgICAgICAgICBqaXQubG9hZDY0KEJhc2VJbmRleChyZWdUMCwg
cmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2Fz
ZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5k
KSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29w
ZXJhbmQpKSwgcmVnVDMpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIs
IHJlZ1QzKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMyk7CisgICAg
ICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAg
ICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5hZGRQdHIoc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwg
cmVnVDApOworCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAg
ICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNv
bHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM0MSw4NiArMjIw
Nyw2MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAg
IH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVn
VDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJl
c29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEdsb2JhbFByb3Bl
cnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDog
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBp
ZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09
IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2Ugewog
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7
Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1Qw
KTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwgcmVnVDApOwor
ICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVn
VDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRo
aXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIu
bGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAg
ICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxp
bmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1
bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluaygm
aml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluaygmaml0
KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAg
ICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0
Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRv
RW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6
Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQu
c3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJv
ZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKIAotICAgIHJl
dCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8g
c2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVH
ZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxh
YmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9u
TGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dF
VF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUj
I0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1
bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJl
dHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5n
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0
X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAg
Ly8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0
aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdp
c3RlcnM6OmVicCk7CkBAIC0yNDI5LDcgKzIyNzIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAjZW5kaWYKIAogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRG
cm9tU2NvcGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSBy
ZWdUNzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CiAgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIGppdC5zdG9yZTMy
KGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpKTsKIApAQCAtMjQ0OSw3ICsyMjkyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIENhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3Bl
cmF0aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0LmVtaXROb25QYXRj
aGFibGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVz
cyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVt
YmVyVGFnUmVnaXN0ZXIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmls
ZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKIAogI2lmIENQ
VShYODZfNjQpCkBAIC0yNDY5LDg4ICsyMzEyLDc3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1ZmZlci5saW5rKGp1bXBUb0hhbmRsZXIsIENv
ZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxp
bmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBv
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdy
aXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVt
aXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRT
ZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxv
YWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRl
KHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9y
ZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsK
LSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhy
ZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5k
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNv
cGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0g
Z2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3Qg
PSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xv
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAK
LSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBp
bmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZl
VHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
c2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNr
aW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVj
ayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZv
ciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9u
YWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlv
bi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQo
c2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVn
VDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxv
YWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAg
ICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdo
dCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7
Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1Qy
LCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25z
dGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAg
aWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYm
IChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVn
VDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1Qw
KTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKKworICAgICAgICAgICAg
aWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2Fu
J3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0g
ICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAg
ICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
Km9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAp
LCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdU
MSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJh
bmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lz
ZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hw
b2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNv
bnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxv
YWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNl
dE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVX
YXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkp
OworCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBS
ZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisKKyAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9w
ZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChy
ZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAg
ICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOworCiAgICAgICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjU2NCw1OCAr
MjM5Niw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAg
ICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0
UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAot
Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2Fs
VmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0
byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAgICAgICAgaXNHbG9iYWxM
ZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6
Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Cisg
ICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJlVmFyLyBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGlsZSB0aGluZ3MKKyAgICAv
LyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3ZlIHByb3ZlbiB0aGF0IGlz
IHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZhciwKKyAgICAvLyBhbGwg
Q29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgorICAgIC8vIGlmIHRoZSB2
YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0IGlzIGZpcmVkLCB0aGVu
IHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAgIC8vIG1hdHRlciB3aGF0
IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYg
KHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyKQorICAgICAgICBlbWl0
Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5
cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGVtaXRDb2Rl
KENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbHNlIHsKICAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9T
Y29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7CiAgICAgICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBS
ZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
UHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAorICAgICAgICBK
dW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKHRoaXMpOwor
CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7
CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAog
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAKICAgICAgICAgc2tpcFRv
RW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwogICAg
IH0KIH0KIApAQCAtMjYyNCwxOCArMjQ1MCwyMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29s
dmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgIFJlc29s
dmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYgYW55IGxpbmtlZCBDb2Rl
QmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29kZUJsb2NrcyBhcmUgZ3Vh
cmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIuCiAgICAgICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3Bh
dGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAg
ICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3VtZW50R1BSMCwgY3VycmVu
dEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwog
ICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29k
ZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0
ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zm
c2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3ICsyNDgxLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3Rl
cnM6OmVicCk7CkBAIC0yNzAxLDcgKzI1MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVu
dHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpz
dG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwg
cmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3
ICsyNTg4LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkBAIC0yNzY3LDcgKzI1OTUs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRl
eCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdU
MCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjgyMyw3ICsyNjUxLDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0bwogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
TmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwpAQCAtMjgzOSwxMSArMjY2
NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiAgICAgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIG1v
ZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2UgaXQgaWYgd2UgcHJvZmlsZSBp
dCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhID09
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgeworICAgIGlmIChi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2VudW1lcmF0b3JNZXRhZGF0
YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKICAgICAg
ICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSByZWdUNDsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBl
bnVtZXJhdG9yR1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3Qz
MihOb25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigofkpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6T3duU3RydWN0dXJlTW9kZSkgJiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0
aW9uTW9kZU1hc2spKSk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRv
ck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpP
d25TdHJ1Y3R1cmVNb2RlKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlOFRvTWV0YWRhdGEo
c2NyYXRjaEdQUiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKKwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBpbmRleEdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2gzMihO
b3RFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSkpOwogCkBAIC0yODgxLDc4ICsyNzE0LDg3IEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3By
b3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1f
ZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CiAKLSAgICBhdXRvIHJlc3VsdEdQ
UiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVFbnVt
ZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJz
OjpzY3JhdGNoMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gQmFzZWxpbmVFbnVt
ZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDM7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5TmFtZSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCBzY3JhdGNoMyk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHByb3BlcnR5R1BSKTsKIAot
ICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRh
ZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRC
eVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHNjcmF0Y2gyKTsK
KyAgICBvcjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7CisgICAgc3RvcmU4VG9NZXRhZGF0YShzY3Jh
dGNoMiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZF
bnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUikpOwogICAg
IC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQgdmFsdWUuCi0gICAgSnVtcCBpc05v
dE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDIsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVN
b2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6R2VuZXJpY01vZGUpKTsKIAogICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDMpOwotICAgIEp1bXAg
c3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVn
VDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgc2NyYXRjaDEpOworICAg
IGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2gyKTsKKyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWws
IHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMyk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgc2NyYXRjaDIpOwogICAgIC8vIElmIGluZGV4IGlzIGxlc3Mg
dGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFu
IGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRl
bmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVn
VDMsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwotCisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3Mg
PSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAg
ICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOworICAgIGxvYWQ2NChCYXNl
SW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkp
OwogCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKICAgICBvdXRPZkxpbmVBY2Nl
c3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMyk7
Ci0gICAgbmVnMzIocmVnVDMpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7
CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIGJhc2VHUFIpOworICAgIHN1YjMyKEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAg
ICBuZWczMihzY3JhdGNoMik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0
Y2gyKTsKICAgICBjb25zdGV4cHIgaW50cHRyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gb2Zm
c2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpICogc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAs
IHJlZ1QzLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwor
ICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1w
KCkpOwogCiAgICAgc3RydWN0dXJlTWlzbWF0Y2gubGluayh0aGlzKTsKLSAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1v
ZGVTdHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSk7Cisg
ICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgYnl0ZWNvZGUsIE9w
RW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEo
KSk7CiAKICAgICBpc05vdE93blN0cnVjdHVyZU1vZGUubGluayh0aGlzKTsKLSAgICBKdW1wIGlz
Tm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKKyAgICBKdW1wIGlzTm90SW5kZXhl
ZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKICAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcg
d2l0aCB0aGUgaW5kZXguCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHByb3BlcnR5R1BSKTsKIAogICAg
IGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaDEpOwogCiAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dEJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4p
OwogCiAgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5NjEsMTAgKzI4MDMsOSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfCiAgICAgZ2VuZXJhdGVHZXRCeVZhbFNs
b3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0
ZXIpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1Bh
dGhGdW5jdGlvblR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUlt
cGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlw
ZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQordGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQg
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVu
Y3Rpb25UeXBlIGdlbmVyYWxDYXNlKQogewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKQEAg
LTI5NzMsNyArMjgxNCw5IEBAIHZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5
SW0KICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG1vZGUsIHJlZ1QwKTsKLSAgICBvcjgocmVnVDAsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEu
bV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwg
Qnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCByZWdUMSk7
CisgICAgb3IzMihyZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDEsIGJ5
dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkp
OwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAK
QEAgLTMwNjIsNiArMjkwNSwxMyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCit2
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpCit7CisgICAgSnVtcCBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2VsZWN0
U2NyYXRjaEdQUihvd25lcikpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsOSArMjM2LDkgQEAgc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgaWYgKGlzSlNBcnJheShi
YXNlQ2VsbCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0g
Q2FjaGVUeXBlOjpVbnNldAogICAgICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkg
PT0gYmFzZUNlbGwKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hl
YWJsZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVu
Z3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgewog
Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNl
Q2VsbCkpOworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganND
YXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJh
dGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0
aW9uKGtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxl
bmd0aChsb2NrZXIpOwpAQCAtMjQ5LDggKzI0OSw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6
Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoLCBwcm9wZXJ0eU5h
bWUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VDZWxsKSkgewogICAg
ICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0
Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdM
ZW5ndGgoc3R1YkluZm8pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29k
ZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pOwor
ICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVu
Z3RoKGNvZGVCbG9jaywgc3R1YkluZm8pKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2Vu
ZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29k
ZUJsb2NrLCBzdHViSW5mbyk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2Rl
SW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2lu
ZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFN0cmluZ0xlbmd0aChs
b2NrZXIpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZUdldEJ5KEoKICAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKICAg
ICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkKICAgICAgICAgICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94eSkgewotICAgICAgICAg
ICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVT
ZWxmUHJvcGVydHlBY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSk7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1
Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0
QnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsK
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JS
ZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpAQCAtNzMxLDExICs3MzEsMTEg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnkoSgogICAgICAgICAgICAg
ICAgIG9sZFN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNh
Y2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdHViSW5m
by5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYm
IElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBz
bG90LmNhY2hlZE9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6
OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90
LmNhY2hlZE9mZnNldCgpKQogICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5u
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICAgICAgICAgJiYgIWlz
UHJveHkpIHsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wg
Z2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAg
ICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBvbGRTdHJ1
Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2Vu
ZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2
ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNs
b3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQ
dXRCeUZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOwpAQCAtMTEzMiw3ICsxMTMy
LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAg
ICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZQogICAgICAgICAgICAgICAgICYmICFzbG90
LndhdGNocG9pbnRTZXQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVk
Q29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3Moc3R1YkluZm8s
IHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0g
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBz
dHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAg
ICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFj
ZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0
YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxs
KFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYo
T3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlu
a0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlz
YXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxM
aW5rSW5mbykpOwogICAgIAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0
Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0
clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDI0ICs0Myw2IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9y
KFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0gICAgaml0LmNvcHlDYWxsZWVT
YXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwotCi0g
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7Ci0gICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLQotICAgIEND
YWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwot
Ci0gICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwotCi0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0
cmFDVElUaHVuayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOwotICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRs
ZUV4Y2VwdGlvbiIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcihWTSYgdm0pCiB7
CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKQEAgLTc3LDI0ICs1OSw2IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGEKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9s
bGJhY2siKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BU
aHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsK
LSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQuYWRkUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2
UmVnaXN0ZXJzOjplc3ApOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC5wb3BQYWlyKENDYWxs
SGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVy
KTsKLSNlbmRpZgotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5q
dW1wKCk7Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBhdXRvIGhhbmRsZXIg
PSB2bS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZm
ZXIubGluayhjb250aW51YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCAicG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlv
biIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpAQCAtMTM3
LDYgKzEwMSw0MiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoCiAK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQorewor
ICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisKKyAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworCisgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisKKyAgICBqaXQuanVt
cFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7CisgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uIik7
Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFj
a1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKKworI2lmIENQVShYODZfNjQpCisgICAgaml0LmFkZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVy
czo6ZXNwKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6
OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZW5k
aWYKKworICAgIENDYWxsSGVscGVyczo6SnVtcCBjb250aW51YXRpb24gPSBqaXQuanVtcCgpOwor
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0
Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOworICAgIHBhdGNoQnVmZmVyLmxpbmso
Y29udGludWF0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVu
a1B0clRhZywgInBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsKK30K
KwogdGVtcGxhdGU8dHlwZW5hbWUgVGFnVHlwZT4KIGlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFs
aWRhdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIsIFRhZ1R5cGUgdGFn
KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsMTIgQEAgY2xhc3MgVk07CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJv
bGxiYWNrR2VuZXJhdG9yKFZNJik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0m
KTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2Vy
dmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAi
Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKKyNp
bmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3Bl
LmgiCkBAIC0zNzAsMTMgKzM3MSwyMiBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1
cmlzdGljcyhWCiAgICAgCiAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVk
aWN0aW9ucygpOwogCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJh
c2VsaW5lSklUKSB7CisgICAgICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGlu
ZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5l
Q29kZSkgeworICAgICAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5l
Q29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CisgICAgICAgICAg
ICBjb2RlQmxvY2stPmppdE5leHRJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhy
ZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2Nr
LCAiZGVsYXlKSVRDb21waWxlIiwgKCJ0aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAi
LCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5J
ZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlm
dGVkLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEpJVFdvcmts
aXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmts
aXN0KCkuY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNv
ZGVCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkpOworICAgIEpJVFdvcmtsaXN0
OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0
KCkuY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVC
bG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkp
OwogCiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
KSB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2Rl
IHdhcyBhbHJlYWR5IGNvbXBpbGVkLiIpOwpAQCAtNDY2LDggKzQ3NiwxMCBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChsb29wX29zcikKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFy
bHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBjb2RlQmxvY2stPmxvb3BIaW50c0Fy
ZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCog
cHRyID0gdm0uZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKHBjKTsKICAgICAgICAgKnB0ciAr
PSBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKS5tX2FjdGl2ZVRocmVzaG9sZDsKLSAg
ICAgICAgaWYgKCpwdHIgPj0gT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xp
bWl0KCkpCisgICAgICAgIGlmICgqcHRyID49IE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmlu
aXRlTG9vcHNMaW1pdCgpKSB7CisgICAgICAgICAgICBjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEo
Q29uY3VycmVudEpTTG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKSk7IC8vIFdlJ3JlIHJldHVybmlu
ZyB0byB0aGUgT1NSIGVudHJ5IGNvZGUgaGVyZSwgd2hpY2ggZXhwZWN0cyB0aGF0IG1faml0RGF0
YSBpcyBub3QgbnVsbC4KICAgICAgICAgICAgIExMSU5UX1JFVFVSTl9UV08oTExJbnQ6OmZ1enpl
clJldHVybkVhcmx5RnJvbUxvb3BIaW50RW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpLCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7CisgICAgICAgIH0KICAgICB9CiAgICAg
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0
cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwg
aW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1l
JSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJl
dHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAg
ICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVu
YXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFk
YXRhKHQxLCB0MikKICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFn
T2Zmc2V0W2NmciwgdDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBA
IG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRh
ZGF0YSBpbiB0MSwgc3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5z
bG93KQogICAgICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAg
ICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAg
ICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVu
ZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFy
aXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjpt
X2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0K
ICAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRh
ZywgLm9wTmVnYXRlU3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRl
U2xvdwogICAgIG5lZ2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50
KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQs
IHQ1LCB0MykKICAgICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoK
ICAgICBiaWEgdDEsIExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAw
MCwgdDEKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVw
ZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0
MykKICAgICByZXR1cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEw
Nyw2IEBAIGVuZCkKIAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNv
ZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAg
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBh
cml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6
TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVd
Ci0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1f
cmhzLCB0MikKICAgICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIElu
dDMyVGFnLCAub3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdElu
dAotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRh
dGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1
LCB0MikKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFu
ZFN0b3JlKHQzLCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEz
NiwxMiArMTEyNCwxMiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9w
CiAgICAgICAgIGJpYSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2Vz
dFRhZywgLm9wMU5vdEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5z
bG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJl
ckludCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90
SW50UmVhZHkKICAgICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMs
IGZ0MQotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAg
ICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVO
dW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldCht
X2RzdCwgdDEpCiAgICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBA
QCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmly
c3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRl
ZmluaXRlbHkgbm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExv
d2VzdFRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJl
cikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQ
cm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAg
ZmlpMmQgdDEsIHQzLCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20JKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCAr
NDQxLDEzIEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1v
dmUgUEMsIGExCiAgICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAg
ICAgYnRweiByMCwgLnJlY292ZXIKLQogICAgICAgICAgICAgbW92ZSByMSwgc3AKKworICAgICAg
ICAgICAgIyBCYXNlbGluZSB1c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29u
c3RhbnQgcG9vbC4KKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAg
ICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2ppdERhdGFbUEJdLCBQQgorICAgICAgICAgICAgbG9h
ZHAgQ29kZUJsb2NrOjpKSVREYXRhOjptX2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAg
ICAgICAgIGlmIEFSTTY0RQogICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3Rl
eHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29w
T1NSRW50cnkpICogUHRyU2l6ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZl
VG9KSVRHYXRlUHRyVGFnICMgSlNFbnRyeVB0clRhZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0
cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bj
b2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFBy
b2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAg
ICAgZW5kCi0KICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2Nmciwg
dDAsIDhdLCB0MQogICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBA
QCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVn
ZXJPcGVyYXRpb24odDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAg
ICBzdG9yZXEgdDEsIFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJp
dGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1
Y3QsIEFyaXRoUHJvZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAu
c2xvdzoKQEAgLTExMzQsMTEgKzExMzUsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRh
dGEsIHJldHVybikKLQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAg
ICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJp
dGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkK
ICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0
MSwgdDIpCkBAIC0xMTQ2LDEyICsxMTQyLDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVn
YXRlLCBPcE5lZ2F0ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAg
ICAgbmVnaSB0MwogICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxl
KEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwg
QXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50
OgogICAgIGJ0cXogdDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAw
MDAwMDAwMDAwMDAwLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1i
ZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51
bWJlciwgdDEsIHQyKQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQs
MTAgKzExNjAsNiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAg
ICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFk
YXRhKHQ1LCB0MCkKIAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBv
cmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFy
eUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9y
aHMsIHQwKQogICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHNpemUsIHQwLCB0MSkKQEAgLTExNzcsNyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9w
Q3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAg
ICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAg
IHByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFBy
b2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAg
ZGlzcGF0Y2goKQogCiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFj
cm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBu
dW1iZXJUYWcsIC5zbG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJk
IHQxLCBmdDEKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAg
ICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51
bWJlck51bWJlciwgdDUsIHQyKQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9w
MU5vdEludE9wMkludDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisg
ICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmls
ZU51bWJlckludCwgdDUsIHQyKQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdElu
dFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNCw5ICsxMTk2LDkgQEAgbWFj
cm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogCiAgICAgLm9wMk5vdEludDoK
ICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25k
IGlzIGRlZmluaXRlbHkgbm90LgotICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6
IHQxLCBudW1iZXJUYWcsIC5zbG93Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVt
YmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0
aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAg
ICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEy
ZCB0MSwgZnQxCkBAIC0xNTE4LDcgKzE1MTAsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dl
dF9ieV9pZF9kaXJlY3QsCiBlbmQpCiAKICMgVGhlIGJhc2Ugb2JqZWN0IGlzIGV4cGVjdGVkIGlu
IHQzCi1tYWNybyBwZXJmb3JtR2V0QnlJREhlbHBlcihvcGNvZGVTdHJ1Y3QsIG1vZGVNZXRhZGF0
YU5hbWUsIHZhbHVlUHJvZmlsZU5hbWUsIHNsb3dMYWJlbCwgc2l6ZSwgbWV0YWRhdGEsIHJldHVy
bikKK21hY3JvIHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwgbW9kZU1ldGFkYXRh
TmFtZSwgdmFsdWVQcm9maWxlTmFtZSwgc2xvd0xhYmVsLCBzaXplLCBtZXRhZGF0YSwgcmV0dXJu
LCBkb0FycmF5UHJvZmlsZSkKICAgICBtZXRhZGF0YSh0MiwgdDEpCiAgICAgbG9hZGIgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRhTmFtZSUubW9kZVt0Ml0sIHQxCiAKQEAg
LTE1NDYsNyArMTUzOCw3IEBAIG1hY3JvIHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVj
dCwKIC5vcEdldEJ5SWRBcnJheUxlbmd0aDoKICAgICBiYm5lcSB0MSwgY29uc3RleHByIEdldEJ5
SWRNb2RlOjpBcnJheUxlbmd0aCwgLm9wR2V0QnlJZFVuc2V0CiAgICAgbW92ZSB0MywgdDAKLSAg
ICBhcnJheVByb2ZpbGUoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRhTmFt
ZSUuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgdDAsIHQyLCB0NSkKKyAgICBkb0FycmF5
UHJvZmlsZSh0MCwgdDIsIHQ1LCB0MSkKICAgICBidGl6IHQwLCBJc0FycmF5LCBzbG93TGFiZWwK
ICAgICBidGl6IHQwLCBJbmRleGluZ1NoYXBlTWFzaywgc2xvd0xhYmVsCiAgICAgbG9hZENhZ2Vk
SlNWYWx1ZShKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MCwgdDEpCkBAIC0xNTY4LDcgKzE1
NjAsMTAgQEAgZW5kCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV9pZCwgT3BHZXRCeUlk
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBnZXQo
bV9iYXNlLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlQ2VsbChzaXplLCB0MCwgdDMs
IC5vcEdldEJ5SWRTbG93KQotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wR2V0QnlJZCwgbV9t
b2RlTWV0YWRhdGEsIG1fcHJvZmlsZSwgLm9wR2V0QnlJZFNsb3csIHNpemUsIG1ldGFkYXRhLCBy
ZXR1cm4pCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BHZXRCeUlkLCBtX21vZGVNZXRhZGF0
YSwgbV9wcm9maWxlLCAub3BHZXRCeUlkU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHJldHVybiwKKyAg
ICAgICAgbWFjcm8gKGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFkYXRhLCBzY3JhdGNoMSwgc2Ny
YXRjaDIpCisgICAgICAgICAgICBhcnJheVByb2ZpbGUoT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9h
cnJheVByb2ZpbGUsIGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFkYXRhLCBzY3JhdGNoMSkKKyAg
ICAgICAgZW5kKQogCiAub3BHZXRCeUlkU2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Ns
b3dfcGF0aF9nZXRfYnlfaWQpCkBAIC0zMDAyLDcgKzI5OTcsNyBAQCBsbGludE9wV2l0aE1ldGFk
YXRhKG9wX2l0ZXJhdG9yX29wZW4sIE9wCiAKICAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX2l0ZXJh
dG9yLCB0MykKICAgICBidHFueiB0Mywgbm90Q2VsbE1hc2ssIC5pdGVyYXRvck9wZW5HZW5lcmlj
R2V0TmV4dFNsb3cKLSAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yT3BlbiwgbV9t
b2RlTWV0YWRhdGEsIG1fbmV4dFByb2ZpbGUsIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNs
b3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZU5leHRBbmREaXNwYXRjaCkKKyAgICBwZXJmb3JtR2V0
QnlJREhlbHBlcihPcEl0ZXJhdG9yT3BlbiwgbV9tb2RlTWV0YWRhdGEsIG1fbmV4dFByb2ZpbGUs
IC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZU5l
eHRBbmREaXNwYXRjaCwgbWFjcm8oYSwgYiwgYywgZCkgZW5kKQogCiAuaXRlcmF0b3JPcGVuR2Vu
ZXJpY0dldE5leHRTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2l0ZXJh
dG9yX29wZW5fZ2V0X25leHQpCkBAIC0zMDYxLDcgKzMwNTYsNyBAQCBsbGludE9wV2l0aE1ldGFk
YXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wCiAKICAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX3ZhbHVl
LCB0MykKICAgICBidHFueiB0Mywgbm90Q2VsbE1hc2ssIC5nZXREb25lU2xvdwotICAgIHBlcmZv
cm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JOZXh0LCBtX2RvbmVNb2RlTWV0YWRhdGEsIG1fZG9u
ZVByb2ZpbGUsIC5nZXREb25lU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlRG9uZUFuZEptcFRv
R2V0VmFsdWUpCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck5leHQsIG1fZG9u
ZU1vZGVNZXRhZGF0YSwgbV9kb25lUHJvZmlsZSwgLmdldERvbmVTbG93LCBzaXplLCBtZXRhZGF0
YSwgc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1ZSwgbWFjcm8oYSwgYiwgYywgZCkgZW5kKQogCiAu
Z2V0RG9uZVNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jf
bmV4dF9nZXRfZG9uZSkKQEAgLTMwODYsNyArMzA4MSw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfaXRlcmF0b3JfbmV4dCwgT3AKICAgICAjIFJlbG9hZCB0aGUgbmV4dCByZXN1bHQgdG1wIHNp
bmNlIHRoZSBnZXRfYnlfaWQgYWJvdmUgbWF5IGhhdmUgY2xvYmJlcmVkIHQzLgogICAgIGxvYWRW
YXJpYWJsZShnZXQsIG1fdmFsdWUsIHQzKQogICAgICMgV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBp
ZiB0aGUgaXRlcmF0b3IgcmVzdWx0IGlzIGEgY2VsbCBoZXJlIHNpbmNlIHdlIHdpbGwgaGF2ZSB0
aHJvd24gYW4gZXJyb3IgYmVmb3JlLgotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0
b3JOZXh0LCBtX3ZhbHVlTW9kZU1ldGFkYXRhLCBtX3ZhbHVlUHJvZmlsZSwgLmdldFZhbHVlU2xv
dywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlVmFsdWVBbmREaXNwYXRjaCkKKyAgICBwZXJmb3JtR2V0
QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV92YWx1ZU1vZGVNZXRhZGF0YSwgbV92YWx1ZVBy
b2ZpbGUsIC5nZXRWYWx1ZVNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZVZhbHVlQW5kRGlzcGF0
Y2gsIG1hY3JvKGEsIGIsIGMsIGQpIGVuZCkKIAogLmdldFZhbHVlU2xvdzoKICAgICBjYWxsU2xv
d1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2dldF92YWx1ZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20JKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTQyMCw3ICsxNDIwLDggQEAg
ZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5jcmVtZW50LCBhY3Rpb24pCiAgICAgbG9h
ZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgYmFkZGlzIGluY3JlbWVudCwgQ29kZUJsb2NrOjpt
X2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRl
clt0MF0sIC5jb250aW51ZQorICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3Vu
dGVyW3QwXSwgdDAKKyAgICBiYWRkaXMgaW5jcmVtZW50LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50
ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgIGFjdGlvbigpCiAgICAgLmNvbnRpbnVl
OgogZW5kCkBAIC0xNTAzLDcgKzE1MDQsOCBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0
ZXIsIGNvZGVCbG9jCiAgICAgY29kZUJsb2NrR2V0dGVyKHQxKQogICAgIGNvZGVCbG9ja1NldHRl
cih0MSkKICAgICBpZiBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQotICAgICAgICBiYWRkaXMg
NSwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNv
dW50ZXI6Om1fY291bnRlclt0MV0sIC5jb250aW51ZQorICAgICAgICBsb2FkcCBDb2RlQmxvY2s6
Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MV0sIHQwCisgICAgICAgIGJhZGRpcyA1LCBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgICAgICBpZiBK
U1ZBTFVFNjQKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAgICAgICAgbW92ZSBQQywg
YTEKQEAgLTE2MTcsMTQgKzE2MTksMTQgQEAgbWFjcm8gZnVuY3Rpb25Jbml0aWFsaXphdGlvbihw
cm9maWxlQXJnUwogICAgICMgb3B0aW1hbCB3YXkgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZl
IG1vcmUgdGhhbiBmaXZlIHJlZ2lzdGVycyBhdmFpbGFibGUKICAgICAjIGZvciBhcmJpdHJhcnkg
dXNlIGluIHRoZSBpbnRlcnByZXRlci4KICAgICBsb2FkaSBDb2RlQmxvY2s6Om1fbnVtUGFyYW1l
dGVyc1t0MV0sIHQwCi0gICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQwICMgVXNlIGFkZGkgYmVj
YXVzZSB0aGF0J3Mgd2hhdCBoYXMgdGhlIHBlZXBob2xlCisgICAgYWRkcCAtcHJvZmlsZUFyZ1Nr
aXAsIHQwCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnBndGVxIHQwLCAwLCBvayBlbmQpCiAgICAg
YnRweiB0MCwgLmFyZ3VtZW50UHJvZmlsZURvbmUKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fYXJn
dW1lbnRWYWx1ZVByb2ZpbGVzICsgRml4ZWRWZWN0b3I6Om1fc3RvcmFnZSArIFJlZkNvdW50ZWRB
cnJheTo6bV9kYXRhW3QxXSwgdDMKICAgICBidHB6IHQzLCAuYXJndW1lbnRQcm9maWxlRG9uZSAj
IFdoZW4gd2UgY2FuJ3QgSklULCB3ZSBkb24ndCBhbGxvY2F0ZSBhbnkgYXJndW1lbnQgdmFsdWUg
cHJvZmlsZXMuCiAgICAgbXVscCBzaXplb2YgVmFsdWVQcm9maWxlLCB0MCwgdDIgIyBBYWFhYWho
aGghIE5lZWQgc3RyZW5ndGggcmVkdWN0aW9uIQogICAgIGxzaGlmdHAgMywgdDAgIyBvZmZzZXQg
b2YgbGFzdCBKU1ZhbHVlIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCi0gICAgYWRkcCB0MiwgdDMg
IyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gQ29kZUJsb2NrOjptX2Fy
Z3VtZW50VmFsdWVQcm9maWxlcy4KKyAgICBhZGRwIHQyLCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9m
IFZhbHVlUHJvZmlsZSBhcnJheSBpbiB0aGUgdmFsdWUgcHJvZmlsZSBhcnJheS4KIC5hcmd1bWVu
dFByb2ZpbGVMb29wOgogICAgIGlmIEpTVkFMVUU2NAogICAgICAgICBsb2FkcSBUaGlzQXJndW1l
bnRPZmZzZXQgLSA4ICsgcHJvZmlsZUFyZ1NraXAgKiA4W2NmciwgdDBdLCB0MgpAQCAtMjU2Myw2
ICsyNTY1LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNy
byB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0
ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVb
bWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNb
dGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90
IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNo
b3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0
X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRp
Zmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
YWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4
ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsK
IAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChK
U0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmll
ciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3Qg
SWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmlu
Z0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0
aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJ
ZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tU
eXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlk
ZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCop
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3
Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdC
aXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25z
dCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Citpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJ
ZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVu
dGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZp
ZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsK
ICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVp
ZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJDYWNoZWRUeXBlcy5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5j
bHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDYWNoZUVycm9yLmgiCiAj
aW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9T
TE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVwZGF0
ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRh
LCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5QXJpdGhQcm9m
aWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5hcnlBcml0aFBy
b2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5v
YnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1
bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlm
Zl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25F
eGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9m
ZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFJhcmVE
YXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9m
Q29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1
dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZf
dCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsgfQogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzA5LDcgKzMwOSw2IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7
CiAgICAgdihJbnQzMiwgZXZhbFRocmVzaG9sZE11bHRpcGxpZXIsIDEwLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KFVuc2lnbmVkLCBtYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0aCwg
MjU2LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCi0gICAgdihCb29sLCByYW5kb21pemVFeGVj
dXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9y
QmFzZWxpbmUsIDEwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1F
eGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JVcHBlclRpZXJzLCA1MDAwMCwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgXApAQCAtNTMyLDYgKzUzMSw3IEBAIGJvb2wgY2FuVXNlV2Vi
QXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihCb29sLCB1c2VEYXRhSUMsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCwgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDU2hhcmluZywgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgdXNlQmFzZWxpbmVKSVRDb2RlU2hh
cmluZywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIC8qIEZlYXR1cmUgRmxh
Z3MgKi9cCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0
RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTYsNyArMzk2LDkgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0
aQogICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCiAgICAgICAgIGNvZGVCbG9j
ay0+dmFsaWRhdGUoKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQorICAgIGlmIChS
ZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRD
b2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkKKyAgICAgICAgY29kZUJsb2NrLT5z
ZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICBlbHNlIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQogICAgICAgICBzZXR1cExMSW50
KGNvZGVCbG9jayk7CiAgICAgZWxzZQogICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVy
VXBDb3VudGVyLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKCkKICAgICB7CiAgICAg
ICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9CQlEoKSkKLSAgICAgICAgICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVw
KCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVy
V2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9v
bCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCkBAIC02NSw5ICs2NSw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplU29vbigpCiAgICAgewogICAgICAgICBpZiAoT3B0
aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hv
bGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAg
ICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXpl
U29vbigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlv
bnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgICAg
IHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7
CiAgICAgfQogCiAgICAgc3RydWN0IE9TUkVudHJ5RGF0YSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKIAogVGllclVwQ291bnQ6OlRpZXJVcENvdW50KCkKIHsKLSAgICBzZXROZXdUaHJlc2hvbGQo
T3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsK
KyAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRl
cldhcm1VcCgpKTsKIH0KIAogVGllclVwQ291bnQ6On5UaWVyVXBDb3VudCgpID0gZGVmYXVsdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVw
Q291bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBvcHRpbWl6ZUFmdGVyV2FybVVwKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAg
ICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6
IE9NRy1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuIik7Ci0gICAgICAgIHNldE5ld1RocmVzaG9s
ZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIp
OworICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1p
emVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25U
aHJlc2hvbGRSZWFjaGVkKCkKQEAgLTkwLDE0ICs5MCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBv
cHRpbWl6ZU5leHRJbnZvY2F0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAg
ICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6
IE9NRy1vcHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNo
b2xkKDAsIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCk7CiAgICAgfQogCiAg
ICAgdm9pZCBvcHRpbWl6ZVNvb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAg
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjog
T01HLW9wdGltaXppbmcgc29vbi4iKTsKICAgICAgICAgLy8gRklYTUU6IE5lZWQgYWRqdXN0bWVu
dCBvbmNlIHdlIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdhc20gZnVuY3Rpb25zLgotICAg
ICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29u
KCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xk
Rm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAogICAgIHZvaWQgc2V0T3B0aW1pemF0aW9u
VGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMjAgQEAgcHVi
bGljOgogICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOwogICAgIH0KIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+CisgICAgQmFnJiBvcGVyYXRvcj0oQmFnPFQsIFU+JiYgb3RoZXIpCisg
ICAgeworICAgICAgICBpZiAodW53cmFwcGVkSGVhZCgpID09IG90aGVyLnVud3JhcHBlZEhlYWQo
KSkKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKworICAgICAgICBCYWcgZGVzdHJveTsKKyAg
ICAgICAgZGVzdHJveS5tX2hlYWQgPSB1bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG1faGVhZCA9
IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsK
KworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCiAgICAgfkJhZygpCiAgICAgewogICAg
ICAgICBjbGVhcigpOwpJbmRleDogU291cmNlL1dURi93dGYvUGFja2VkLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvUGFja2VkLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9X
VEYvd3RmL1BhY2tlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDEwIEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0K
LSAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVID0gVD4KKyAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjpp
c192b2lkX3Y8VT4sIFUmPjo6dHlwZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7
IH0KKwogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWdldCgpOyB9CiAKICAg
ICAvLyBUaGlzIGNvbnZlcnNpb24gb3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24g
dG8gYm9vbCBidXQgbm90IHRvIG90aGVyIGludGVnZXIgdHlwZXMuCkluZGV4OiBUb29scy9TY3Jp
cHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVu
LWpzYy1zdHJlc3MtdGVzdHMJKHJldmlzaW9uIDI4MjY3NSkKKysrIFRvb2xzL1NjcmlwdHMvcnVu
LWpzYy1zdHJlc3MtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTc3NiwxNyArNzc2LDE4IEBAIGVu
ZAogCiAjIEZJWE1FOiBuZWVkIHRvIGZpeCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE4NzAzIHRvIGVuYWJsZSB0aGlzIG9uIExpbnV4L01JUFMuCiBkZWYgcnVuQnl0
ZWNvZGVDYWNoZUltcGwob3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zLCAqYWRkaXRpb25hbEVu
dikKLSAgICBpZiAoJGhvc3RPUyA9PSAiZGFyd2luIikKLSAgICAgICAgZmlsZVRlbXBsYXRlID0g
ImJ5dGVjb2RlLWNhY2hlIgotICAgIGVsc2lmICgkaG9zdE9TID09ICJsaW51eCIgJiYgJGFyY2hp
dGVjdHVyZSAhPSAibWlwcyIpCi0gICAgICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1jYWNo
ZVhYWFhYWCIKLSAgICBlbHNlCi0gICAgICAgIHNraXAKLSAgICAgICAgcmV0dXJuCi0gICAgZW5k
CisgICAgIyBPT1BTCisgICAgI2lmICgkaG9zdE9TID09ICJkYXJ3aW4iKQorICAgICMgICAgZmls
ZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlIgorICAgICNlbHNpZiAoJGhvc3RPUyA9PSAibGlu
dXgiICYmICRhcmNoaXRlY3R1cmUgIT0gIm1pcHMiKQorICAgICMgICAgZmlsZVRlbXBsYXRlID0g
ImJ5dGVjb2RlLWNhY2hlWFhYWFhYIgorICAgICNlbHNlCisgICAgIyAgICBza2lwCisgICAgIyAg
ICByZXR1cm4KKyAgICAjZW5kCiAKLSAgICBvcHRpb25zID0gQkFTRV9PUFRJT05TICsgRlRMX09Q
VElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMgKyAkdGVzdFNwZWNpZmljUmVxdWly
ZWRPcHRpb25zCi0gICAgYWRkUnVuQ29tbWFuZCgiYnl0ZWNvZGUtY2FjaGUiLCBbInNoIiwgKHBh
dGhUb0hlbHBlcnMgKyAiYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIuc2giKS50b19zLCBmaWxl
VGVtcGxhdGUudG9fcywgKnZtQ29tbWFuZCwgJGJlbmNobWFyay50b19zXSArIG9wdGlvbnMsIHNp
bGVudE91dHB1dEhhbmRsZXIsIHNpbXBsZUVycm9ySGFuZGxlciwgKmFkZGl0aW9uYWxFbnYpCisg
ICAgI29wdGlvbnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMKKyAgICAjYWRkUnVu
Q29tbWFuZCgiYnl0ZWNvZGUtY2FjaGUiLCBbInNoIiwgKHBhdGhUb0hlbHBlcnMgKyAiYnl0ZWNv
ZGUtY2FjaGUtdGVzdC1oZWxwZXIuc2giKS50b19zLCBmaWxlVGVtcGxhdGUudG9fcywgKnZtQ29t
bWFuZCwgJGJlbmNobWFyay50b19zXSArIG9wdGlvbnMsIHNpbGVudE91dHB1dEhhbmRsZXIsIHNp
bXBsZUVycm9ySGFuZGxlciwgKmFkZGl0aW9uYWxFbnYpCiBlbmQKIAogZGVmIHJ1bkJ5dGVjb2Rl
Q2FjaGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438907</attachid>
            <date>2021-09-21 19:39:36 -0700</date>
            <delta_ts>2021-09-23 10:12:57 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>535013</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBA
QCBvcF9ncm91cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgb3BlcmFuZFR5cGVzOiBPcGVy
YW5kVHlwZXMsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6
IEJpbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJv
ZmlsZS4qCiAgICAgfQogCiBvcF9ncm91cCA6VmFsdWVQcm9maWxlZEJpbmFyeU9wLApAQCAtMzUz
LDcgKzM1Myw3IEBAIG9wX2dyb3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgICAgICBz
cmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAg
IGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBV
bmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg2LDcgKzM4
Niw3IEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCiAgICAg
fSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9m
aWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAK
IG9wIDpub3QsCkBAIC00NzgsNiArNDc4LDcgQEAgb3AgOmdldF9ieV9pZCwKICAgICBtZXRhZGF0
YTogewogICAgICAgICBtb2RlTWV0YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCiAgICAgICAg
IHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2Zp
bGUsCiAgICAgfQogCiBvcCA6Z2V0X2J5X2lkX3dpdGhfdGhpcywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRz
Rm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNzMsNiArNzMsMjggQEAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JJbXBsKEJ5
dGVjbwogICAgICAgICByZXR1cm4gJm1ldGFkYXRhLm1fcHJvZmlsZTsKIH0KIAordGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgordWludHB0cl90IHZhbHVlUHJvZmlsZU9mZnNldEZvcih1bnNp
Z25lZCBjaGVja3BvaW50SW5kZXgpCit7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRl
eCk7CisgICAgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3Jf
b3BlbikgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNl
IE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpn
ZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRQcm9maWxlKCk7
CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKworICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9p
dGVyYXRvcl9uZXh0KSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAg
ICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZk5leHRSZXN1bHRQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVy
YXRvck5leHQ6OmdldERvbmU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRG9u
ZVByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVy
biBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRl
ZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgCisgICAgICAgIHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgp
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZU1ldGFkYXRhPgogYm9vbCBoYXNWYWx1
ZVByb2ZpbGVGb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9p
bnRJbmRleCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDExICsx
MTQsNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICBSRUxFQVNFX0FT
U0VSVCghaXNPbkxpc3QoKSk7CiB9CiAKLUNvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCi17Ci0gICAgcmV0dXJuIENvZGVMb2Nh
dGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwotfQot
CiBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQ
YXRoU3RhcnQoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RhdGFJQygpKTsKQEAgLTIyNSw2
ICsyMjAsMTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldE1heEFyZ3VtZW50Q291bnRJbgogICAg
IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSB2YWx1ZTsKIH0KIAorQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVjdCgpICYmIGlzVGFpbENhbGwoKSk7CisgICAg
cmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPih1LmNvZGVJ
Qy5tX2Zhc3RQYXRoU3RhcnQpOworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZN
JiB2bSkKIHsKICAgICBhdXRvIGhhbmRsZVNwZWNpZmljQ2FsbGVlID0gWyZdIChKU0Z1bmN0aW9u
KiBjYWxsZWUpIHsKQEAgLTI5OCwyMyArMjk5LDExIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRG
cmFtZVNodWZmbGVEYXRhKGMKICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7
CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0
aEltcGwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjpl
bWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMm
IGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlD
IHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFy
ZUZvclRhaWxDYWxsKQogewotICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7Ci0gICAgaWYg
KGlzRGF0YUlDKCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9
IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKLSAgICAgICAgdS5kYXRhSUMu
bV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7Ci0gICAgfQotCi0gICAgYXV0byBm
YXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7
Ci0KICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogCi0gICAgaWYgKGlzRGF0
YUlDKCkpIHsKKyAgICBpZiAodXNlRGF0YUlDID09IFVzZURhdGFJQzo6WWVzKSB7CiAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hSZWdpc3RlcigpOwogICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZkNh
bGxlZSgpKSwgc2NyYXRjaEdQUik7IAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5
bW9ycGhpYzsKQEAgLTMyMyw3ICszMTIsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplCiAgICAgICAgICAgICBnb1BvbHltb3JwaGljID0gaml0LmJyYW5jaFRlc3RQ
dHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihwb2x5bW9ycGhpY0NhbGxlZU1hc2spKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNh
bGxlZUdQUikpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAg
ICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwog
ICAgICAgICAgICAgZ29Qb2x5bW9ycGhpYy5saW5rKCZqaXQpOyAvLyBQb2x5bW9ycGhpYyBzdHVi
IGhhbmRsZXMgdGFpbCBjYWxsIHN0YWNrIHByZXAuCiAgICAgICAgICAgICBqaXQuZmFySnVtcChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1vbm9tb3JwaGlj
Q2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKQEAgLTMzNiwxNCArMzI1LDE2IEBA
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwg
Y2FsbGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxw
dHIpKSk7CiAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChp
c1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHBy
ZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyVGFpbENhbGwo
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgdS5jb2Rl
SUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPihjYWxsKTsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOwor
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKICAgICAgICAgfSk7
CiAgICAgfQogCkBAIC0zNTMsMTMgKzM0NCwzNCBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplCiBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1p
dEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KCFpc1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVl
R1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgbnVsbHB0cik7CisgICAgc2V0VXNlc0Rh
dGFJQ3ModXNlRGF0YUlDKTsKKworICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOworICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5r
SW5mb0dQUik7CisgICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJ
bmZvR1BSOworICAgIH0KKworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxs
cHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExp
bmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNh
bGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJ
bXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgV1RGTW92ZShw
cmVwYXJlRm9yVGFpbENhbGwpKTsKKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsK
KyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgSW52YWxp
ZEdQUlJlZywgVXNlRGF0YUlDOjpObywgaXNUYWlsQ2FsbCgpLCBXVEZNb3ZlKHByZXBhcmVGb3JU
YWlsQ2FsbCkpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjpl
bWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZv
R1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxw
dHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxz
ZSwgbnVsbHB0cik7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJl
cGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAh
PSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBq
aXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RG
TW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKIH0KIAogdm9pZCBDYWxsTGlua0luZm86OmVtaXRT
bG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0KQpAQCAtMzY5LDE3ICszODEsMzIgQEAg
dm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIAogICAgIGppdC5jYWxsKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxE
ZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKK3ZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUikKK3sKKyAgICBqaXQubW92ZShjYWxsTGlua0luZm9HUFIsIEdQUkluZm86OnJlZ1Qy
KTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9m
ZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworfQorCit2
b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExp
bmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUikKK3sKKyAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2Vk
Q2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIHNldFVwQ2FsbCh1bmxpbmtlZENhbGxM
aW5rSW5mby5jYWxsVHlwZSwgY2FsbGVlR1BSKTsKKyAgICBtX2RvbmVMb2NhdGlvbiA9IHVubGlu
a2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBpZiAodW5saW5rZWRDYWxsTGlua0lu
Zm8uZnJhbWVTaHVmZmxlRGF0YSkgeworICAgICAgICAvLyBGSVhNRTogSXQnZCBiZSBuaWNlIGlm
IHRoaXMganVzdCB3ZXJlIGEgcmVmY291bnRlZCBkYXRhIHN0cnVjdHVyZS4KKyAgICAgICAgbV9m
cmFtZVNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlu
a2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpOworICAgIH0KKyAgICBzZXRVc2VzRGF0
YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBj
YWxsTGlua0luZm9HUFI7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRy
eVB0clRhZz4oKSk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiBqaXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7
CiAKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKIAotICAgIGF1dG8gZmFzdFBh
dGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAg
ICAgYXV0byBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlv
biA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwp
OwpAQCAtMzk3LDcgKzQyNCw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENh
bGxGYXMKIAogICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGppdC5h
ZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0
UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQ
YXRoU3RhcnQpOworICAgICAgICB1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CiAgICAgfSk7CiAK
ICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEganVtcCB0byB0aGUg
c2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0MywxMSBAQCBj
bGFzcyBKU0Z1bmN0aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogc3RydWN0IENhbGxG
cmFtZVNodWZmbGVEYXRhOwogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87CisKIGNsYXNz
IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZv
PiB7CiBwdWJsaWM6Ci0gICAgZW51bSBDYWxsVHlwZSB7CisgICAgZW51bSBDYWxsVHlwZSA6IHVp
bnQ4X3QgewogICAgICAgICBOb25lLAogICAgICAgICBDYWxsLAogICAgICAgICBDYWxsVmFyYXJn
cywKQEAgLTE2NSw2ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGVlR1BSID0gY2Fs
bGVlR1BSOwogICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIFVubGlua2Vk
Q2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7
CisKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVHUFI7IH0K
ICAgICAKICAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgewpAQCAtMTczLDEzICsx
NzcsMTYgQEAgcHVibGljOgogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIEND
YWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CisgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVTRURfUkVUVVJO
OworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlD
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9V
TlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwg
VXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIs
IEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
Y2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJz
Jik7CiAgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2b2lkIGVtaXRT
bG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOworICAgIHN0YXRpYyB2b2lkIGVtaXREYXRhSUNT
bG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwogICAg
IHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURhdGFJQzo6
WWVzOyB9CkBAIC0yMDMsNyArMjEwLDYgQEAgcHVibGljOgogICAgICAgICBtX2FsbG93U3R1YnMg
PSBmYWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PiBmYXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gc2xvd1BhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IGRvbmVMb2NhdGlvbigpOwogCkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9zbG93U3R1YiA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgSklUU3R1YlJvdXRpbmUqIHNs
b3dTdHViKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Nsb3dTdHViLmdldCgpOwotICAgIH0K
LQogICAgIGJvb2wgc2Vlbk9uY2UoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faGFzU2VlblNo
b3VsZFJlcGF0Y2g7CkBAIC0zMDgsOSArMzA5LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUpOwogICAgIH0KIAotICAgIHVpbnQzMl90
KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOwogICAgIH0KIAogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKCkKQEAgLTM4MSw3ICszODIsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRl
OgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFy
dDsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3Rh
cnQoKTsKKwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxv
Y2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQ
YXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC0zOTcsNiArNDAw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJu
YWxQdHJUYWc+IG1fY2FsbExvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247CiAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoU3RhcnQ7CisgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRoU3Rh
cnQ7CiAgICAgICAgIH0gY29kZUlDOwogICAgIH0gdTsKIApAQCAtNDI0LDYgKzQyOCwxMyBAQCBp
bmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpCiAgICAgcmV0dXJuIGNhbGxM
aW5rSW5mby5jb2RlT3JpZ2luKCk7CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbyB7
CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHksIG9ubHkgdXNl
ZCBieSBiYXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBDb2RlT3JpZ2lu
LgorICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307CisKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzA4LDYgKzMwOCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0
dXJlKiAKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJh
bWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7CisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50
ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKICAgICAKICAgICB2
bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KQEAgLTMxOCw3ICszMjAsNiBAQCB2
b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDCiAgICAgZmluaXNoQ3JlYXRp
b25Db21tb24odm0pOwogCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGppdEFmdGVy
V2FybVVwKCk7CiAKICAgICBpZiAob3RoZXIubV9yYXJlRGF0YSkgewogICAgICAgICBjcmVhdGVS
YXJlRGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC0zNTksNyArMzYwLDkgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVy
KCkpOwogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSk7Ci0gICAgCisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENv
ZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKKwogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCku
YWRkKHRoaXMpOwogfQogCkBAIC0zNzAsMTAgKzM3MywxMyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhWTSYgdm0sIFN0cnVjdHVyZSogCiAvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5r
ZWQgYnl0ZWNvZGUgZ2VuZXJhdGlvbi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdl
bmVyYXRlIGNvbnRyb2wKIC8vIGZsb3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFz
b24gZm9yIHRoaXMgaXMgd2UgcmVseSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2Ft
ZSBmb3IKIC8vIGFsbCB0aGUgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2Ug
cmVseSBvbiB0aGlzIGZhY3QgYnkgY2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKLS8vIGlu
c2lkZSBVbmxpbmtlZENvZGVCbG9jay4KKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4gQWxz
bywgQmFzZWxpbmUgSklUIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3Mgb2Yg
YW4gVW5saW5rZWRDb2RlQmxvY2ssCisvLyBzbyB0aGUgYnl0ZWNvZGUgbXVzdCByZW1haW4gdGhl
IHNhbWUgYmV0d2VlbiBDb2RlQmxvY2tzIHNoYXJpbmcgYW4gVW5saW5rZWRDb2RlQmxvY2suCiBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKICAg
ICBKU1Njb3BlKiBzY29wZSkKIHsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7IC8vIFdl
IG5lZWQgdG8gc2V0IHVwIG91ciB2YWx1ZSBwcm9maWxlIHBvaW50ZXJzLgorCiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIApAQCAt
NDcxLDYgKzQ3NywyMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBT
CiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCisgICAgdW5zaWduZWQgYmluYXJ5UHJvZmlsZUlu
ZGV4ID0gMDsKKyAgICB1bnNpZ25lZCB1bmFyeVByb2ZpbGVJbmRleCA9IDA7CisjZGVmaW5lIExJ
TktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBc
CisgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5t
X2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJpbmFy
eVByb2ZpbGVJbmRleCsrKTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElO
S19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAor
ICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9h
cml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKHVuYXJ5UHJv
ZmlsZUluZGV4KyspOyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAg
Zm9yIChjb25zdCBhdXRvJiBpbnN0cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAg
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMs
MTQgKzU1NCwxNCBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAg
ICAgICAgIExJTksoT3BDcmVhdGVQcm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJh
dG9yKQogCi0gICAgICAgIExJTksoT3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAg
IExJTksoT3BEaXYpCi0gICAgICAgIExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0
ZSkKLSAgICAgICAgTElOSyhPcEluYykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElO
S19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklO
QVJZX0FSSVRIX1BST0ZJTEUoT3BNdWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShPcERpdikKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9w
U3ViKQorCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQor
ICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElO
S19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQ
dHIpCiAKQEAgLTc2OSw3ICs3OTAsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBTCiAgICAgLy8gcmVseSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUg
aW4gdGhlb3J5IHBlcm1pdHRlZCB0byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rp
b24gc3RyZWFtIHRvIG1vcmUgYWNjdXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgog
ICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAg
Ly8gSWYgdGhlIGNvbmN1cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhh
c2gsIHRoZW4gY29tcHV0ZSBpdCBoZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAgLTc5Myw2
ICs4MTMsNzYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAg
IG1fb3duZXJFZGdlLnNldCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3Jl
YXRlKHZtLCB0aGlzKSk7CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJh
c2VsaW5lQ29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPiBqaXRDb2RlKQoreworICAgIHNldEpJVENv
ZGUoaml0Q29kZS5jb3B5UmVmKCkpOworCisgICAgeworICAgICAgICBjb25zdCBhdXRvJiBqaXRD
b2RlTWFwID0gdGhpcy0+aml0Q29kZU1hcCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7CisgICAgICAgICAgICBIYW5k
bGVySW5mbyYgaGFuZGxlciA9IGV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAvLyBG
SVhNRTogPHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KKyAgICAgICAgICAgIGhhbmRsZXIubmF0
aXZlQ29kZSA9IGppdENvZGVNYXAuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSku
cmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAg
ICBhdXRvJiBqaXREYXRhID0gZW5zdXJlSklURGF0YShsb2NrZXIpOworCisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGppdERhdGEubV9qaXRDb25zdGFudFBvb2wuaXNFbXB0eSgpKTsKKyAgICAgICAg
aml0RGF0YS5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5t
X2NvbnN0YW50UG9vbC5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpp
dENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvIGVu
dHJ5ID0gaml0Q29kZS0+bV9jb25zdGFudFBvb2wuYXQoaSk7CisgICAgICAgICAgICBzd2l0Y2gg
KGVudHJ5LnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpH
bG9iYWxPYmplY3Q6CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtp
XSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbzogeworICAgICAg
ICAgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9ICpz
dGF0aWNfY2FzdDxVbmxpbmtlZENhbGxMaW5rSW5mbyo+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0RGF0YS5tX2Nh
bGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJ
bmRleCkpOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+aW5pdGlhbGl6ZURhdGFJQyh2
bSgpLCB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1Qy
KTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gY2FsbExp
bmtJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7CisgICAg
ICAgICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbyA9
ICpzdGF0aWNfY2FzdDxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKj4oZW50cnkucGF5bG9hZC5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gaml0
RGF0YS5tX3N0dWJJbmZvcy5hZGQodW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlLCBDb2RlT3Jp
Z2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT5pbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8odGhpcywgdW5s
aW5rZWRTdHViSW5mbyk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9v
bFtpXSA9IHN0dWJJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbDogewor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
ZW50cnkucGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0
YW50UG9vbFtpXSA9IGZ1bmN0aW9uRGVjbChpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
RnVuY3Rpb25FeHByOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBq
aXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25FeHByKGluZGV4KTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29k
ZToKKyAgICBjYXNlIE1vZHVsZUNvZGU6CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgbV9z
aG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
dW5jdGlvbkNvZGU6CisgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8g
ZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAgICAg
Ly8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KKyAgICAgICAgbV9zaG91bGRBbHdh
eXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCgpKSAmJiBERkc6Om1pZ2h0
SW5saW5lRnVuY3Rpb24odGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChq
aXRDb2RlLT5tX2lzU2hhcmVhYmxlICYmICF1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2Vk
QmFzZWxpbmVDb2RlICYmIE9wdGlvbnM6OnVzZUJhc2VsaW5lSklUQ29kZVNoYXJpbmcoKSkKKyAg
ICAgICAgdW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSA9IFdURk1v
dmUoaml0Q29kZSk7Cit9CisKIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7CiAgICAgVk0mIHZt
ID0gKm1fdm07CkBAIC04NzMsNiArOTYzLDI3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAorYm9vbCBDb2RlQmxvY2s6OmlzQ29uc3RhbnRPd25l
ZEJ5VW5saW5rZWRDb2RlQmxvY2soVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKK3sKKyAgICAv
LyBUaGlzIG5lZWRzIHRvIGNvcnJlc3BvbmQgdG8gd2hhdCB3ZSBkbyBpbnNpZGUgc2V0Q29uc3Rh
bnRSZWdpc3RlcnMuCisgICAgc3dpdGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihyZWcpKSB7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkludGVnZXI6CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRv
dWJsZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246Ok90aGVyOiB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB1bmxpbmtlZENvZGVCbG9j
aygpLT5nZXRDb25zdGFudChyZWcpOworICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0Nl
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2
YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKGNlbGwtPmluaGVyaXRzPFN5bWJvbFRhYmxlPih2
bSgpKSB8fCBjZWxsLT5pbmhlcml0czxKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4odm0oKSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogVmVjdG9yPHVuc2lnbmVkPiBDb2RlQmxv
Y2s6OnNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogewogICAgIFZNJiB2
bSA9ICptX3ZtOwpAQCAtODkyLDYgKzEwMDMsNyBAQCBWZWN0b3I8dW5zaWduZWQ+IENvZGVCbG9j
azo6c2V0Q29uc3RhbnRSCiAgICAgICAgIHN3aXRjaCAocmVwcmVzZW50YXRpb24pIHsKICAgICAg
ICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CiAgICAg
ICAgICAgICBjb25zdGFudCA9IGdsb2JhbE9iamVjdC0+bGlua1RpbWVDb25zdGFudChzdGF0aWNf
Y2FzdDxMaW5rVGltZUNvbnN0YW50Pihjb25zdGFudC5hc0ludDMyQXNBbnlJbnQoKSkpOworICAg
ICAgICAgICAgQVNTRVJUKGNvbnN0YW50LmlzQ2VsbCgpKTsgLy8gVW5saW5rZWQgQmFzZWxpbmUg
SklUIHJlcXVpcmVzIHRoaXMuCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOgogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjo6SW50ZWdlcjoKQEAgLTE1MTQsNyArMTYyNiw3IEBAIENvZGVCbG9jazo6SklU
RGF0YSYgQ29kZUJsb2NrOjplbnN1cmVKSVQKICAgICByZXR1cm4gKm1faml0RGF0YTsKIH0KIAot
dm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQordm9pZCBD
b2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCkKIHsKICAgICBpZiAoYXV0byogaml0
RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewogICAgICAgICBmb3IgKENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKQpAQCAtMTUyNSw2ICsxNjM3LDIw
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW4KICAgICAgICAgICAg
IHN0dWJJbmZvLT52aXNpdFdlYWtSZWZlcmVuY2VzKGxvY2tlciwgdGhpcyk7CiAgICAgICAgIH0K
ICAgICB9CisKKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICAvLyBWZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBm
aW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3JlIHZpcnR1YWwgY2FsbHMuCisgICAgICAgIGZvciAo
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUq
PihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxDYWxsTGlua0luZm9zKSB7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8tPmlzTGlua2VkKCkpOworICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5mb3JFYWNoRGVwZW5kZW50Q2VsbChbXSAoSlNDZWxsKikgeworICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorCisgICAgfQorI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTUzNCw0NiArMTY2MCw0
NyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAKICAgICB1cGRh
dGVBbGxQcmVkaWN0aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29sIGlzRWxpZ2li
bGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwotICAg
IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8gSWYgQmFzZWxp
bmVKSVQgY29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50
IGV4aXN0cywgd2UgYXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUg
YW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAgICBpZiAoT3B0
aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJl
bnRseUV4ZWN1dGluZyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRD
b2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9w
dGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAgICAgICAgICAgICAgIGlm
IChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9q
aXRDb2RlID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9p
bnQodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRs
ZXJzKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5k
bGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRs
ZXIoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1f
cmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIu
dGFyZ2V0KS5wdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6
ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHVubGlua0luY29taW5n
Q2FsbHMoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhl
c2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGls
ZXIgdGhyZWFkcwotICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5p
bmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2Vy
LCBhbmQgYnl0ZWNvZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5
IGRhdGEgc3RydWN0dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgotICAgICAg
ICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYKKy8vIE9PUFM6IHJlY29u
Y2lsZSB0aGlzCisvLyNpZiBFTkFCTEUoSklUKQorLy8gICAgYm9vbCBpc0VsaWdpYmxlRm9yTExJ
bnREb3duZ3JhZGUgPSBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZTsKKy8vICAgIG1faXNF
bGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7CisvLyAgICAvLyBJZiBCYXNlbGluZUpJ
VCBjb2RlIGlzIG5vdCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhp
c3RzLCB3ZSBhdHRlbXB0CisvLyAgICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFu
ZCByZWluc3RhbGwgTExJbnQgY29kZSB0byBzYXZlIEpJVCBtZW1vcnkuCisvLyAgICBpZiAoT3B0
aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJl
bnRseUV4ZWN1dGluZyh0aGlzKSkgeworLy8gICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXpl
ZENvZGVCbG9jayA9IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKy8vICAgICAgICAgICAgaWYg
KCFvcHRpbWl6ZWRDb2RlQmxvY2stPm1fb3NyRXhpdENvdW50ZXIpIHsKKy8vICAgICAgICAgICAg
ICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKKy8vICAgICAgICAgICAgICAg
ICAgICBtX2ppdENvZGUgPSBudWxscHRyOworLy8gICAgICAgICAgICAgICAgICAgIExMSW50Ojpz
ZXRFbnRyeXBvaW50KHRoaXMpOworLy8gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKKy8vCisvLyAgICAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVy
T2ZFeGNlcHRpb25IYW5kbGVycygpOyBpKyspIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENv
ZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRs
ZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKKy8v
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25z
KCkuYXQodW5saW5rZWRIYW5kbGVyLnRhcmdldCkucHRyKCk7CisvLyAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxh
YmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlv
bi53aWR0aCgpKS5jb2RlKCkpKTsKKy8vICAgICAgICAgICAgICAgICAgICB9CisvLworLy8gICAg
ICAgICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKKy8vCisvLyAgICAgICAgICAg
ICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGNsZWFyIHRoZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4g
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkgYWxsIGNvbXBpbGVyIHRocmVhZHMKKy8vICAgICAgICAg
ICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVp
dGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKKy8vICAg
ICAgICAgICAgICAgICAgICAvLyBwYXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9p
bnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5mb3MuCisvLyAgICAgICAgICAgICAgICAgICAgcmVz
ZXRKSVREYXRhKCk7CisvLyAgICAgICAgICAgICAgICB9IGVsc2UKKy8vICAgICAgICAgICAgICAg
ICAgICBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IHRydWU7CisvLyAgICAgICAgICAg
IH0KKy8vICAgICAgICB9CisvLyAgICB9CisvLworLy8jZW5kaWYKICAgICAKICAgICBpZiAoSklU
Q29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJ
bnRJbmxpbmVDYWNoZXMoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCEhaml0Q29kZSgp
KQotICAgICAgICBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7CisgICAgICAgIGZp
bmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShERkdfSklUKQpA
QCAtMTU5NCw3ICsxNzIxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KAogICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAgICAgICAg
ICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CisgICAgICAgICAgICBj
b3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y291bnQoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgY291bnQg
PSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CkBAIC0xNjc1LDMwICsxODAyLDYgQEAgU3Ry
dWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgogICAgIHJldHVybiBlbnN1cmVK
SVREYXRhKGxvY2tlcikubV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pOwog
fQogCi1KSVRBZGRJQyogQ29kZUJsb2NrOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7
Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2FkZElDcy5hZGQoYXJpdGhQcm9m
aWxlKTsKLX0KLQotSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9tdWxJQ3MuYWRkKGFy
aXRoUHJvZmlsZSk7Ci19Ci0KLUpJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklDKEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3ViSUNz
LmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVROZWdJQyogQ29kZUJsb2NrOjphZGRKSVROZWdJ
QyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1f
bmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJs
b2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKQEAgLTMxMzMsNyArMzIzNiw3IEBAIHVuc2lnbmVk
IENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAg
Y2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdp
c3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291
bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzM0OSwxMyArMzQ1MiwxMyBAQCBCaW5hcnlBcml0
aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2Rl
SUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEFkZD4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX211bDoK
LSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9w
U3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMt
PmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bf
ZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0zMzY3LDExICszNDcwLDExIEBAIFVuYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OnVuYXJ5
QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9uZWdh
dGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1f
YXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5jOgotICAgICAgICByZXR1cm4g
JnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAg
cmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAg
ICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEo
dGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEZWM+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMzQ3MiwyMiArMzU3NSwxNiBAQCB2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFz
aWNCbG9ja0JvdW5kYXJpCiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6OnNl
dFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJiBt
YXApIAoteyAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgZW5z
dXJlSklURGF0YShsb2NrZXIpLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1hcCk7Ci19
Ci0KIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW5kUEModm9pZCogcGMp
CiB7CisgICAgaWYgKGF1dG8qIHBjVG9Db2RlT3JpZ2luTWFwID0gbV9qaXRDb2RlLT5wY1RvQ29k
ZU9yaWdpbk1hcCgpKSB7CisgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGNv
ZGVPcmlnaW4gPSBwY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBjKSkKKyAgICAgICAgICAgIHJl
dHVybiBjb2RlT3JpZ2luOworICAgIH0KKwogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0
YS5nZXQoKSkgewotICAgICAgICAgICAgaWYgKGppdERhdGEtPm1fcGNUb0NvZGVPcmlnaW5NYXAp
IHsKLSAgICAgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3Jp
Z2luID0gaml0RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBjKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAg
ICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5m
b3MpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnRhaW5zUEMocGMpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPihzdHViSW5m
by0+Y29kZU9yaWdpbik7CkBAIC0zNTIxLDI4ICszNjE4LDE0IEBAIHN0ZDo6b3B0aW9uYWw8Qnl0
ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKIH0KIAot
aW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKLXsK
LSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXplKCkpIHsKLSAgICBj
YXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkOwot
ICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkICogNDsK
LSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8gMjsK
LSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRocmVzaG9sZDsK
LX0KLQotdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkKK3ZvaWQgQ29kZUJsb2NrOjpq
aXRTb29uKCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRo
cmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSwgdGhp
cyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQodW5saW5rZWRD
b2RlQmxvY2soKS0+dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24o
KSksIHRoaXMpOwogfQogCi12b2lkIENvZGVCbG9jazo6aml0U29vbigpCit2b2lkIENvZGVCbG9j
azo6aml0TmV4dEludm9jYXRpb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXRO
ZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24o
KSksIHRoaXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKDAs
IHRoaXMpOwogfQogCiBib29sIENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2lu
dHMoKSBjb25zdApAQCAtMzU4OCwyOCArMzY3MSw4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wTWF0
aElDU3RhdHMoKQogICAgIGRvdWJsZSBudW1TdWJzID0gMC4wOwogICAgIGRvdWJsZSB0b3RhbFN1
YlNpemUgPSAwLjA7CiAKLSAgICBhdXRvIGNvdW50SUNzID0gWyZdIChDb2RlQmxvY2sqIGNvZGVC
bG9jaykgewotICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IGNvZGVCbG9jay0+bV9qaXREYXRh
LmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKEpJVEFkZElDKiBhZGRJQyA6IGppdERhdGEtPm1f
YWRkSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtQWRkcysrOwotICAgICAgICAgICAgICAgIHRv
dGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMgOiBqaXREYXRhLT5tX211bElDcykgewotICAgICAg
ICAgICAgICAgIG51bU11bHMrKzsKLSAgICAgICAgICAgICAgICB0b3RhbE11bFNpemUgKz0gbXVs
SUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUTmVn
SUMqIG5lZ0lDIDogaml0RGF0YS0+bV9uZWdJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1OZWdz
Kys7Ci0gICAgICAgICAgICAgICAgdG90YWxOZWdTaXplICs9IG5lZ0lDLT5jb2RlU2l6ZSgpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJVFN1YklDKiBzdWJJQyA6IGppdERh
dGEtPm1fc3ViSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtU3VicysrOwotICAgICAgICAgICAg
ICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQorICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVCbG9jayopIHsKKyAgICAgICAg
Ly8gRklYTUU6IFdlIG5lZWQgdG8gcmUtaW1wbGVtZW50IHRoaXMgdXNpbmcgSklUQ29kZS4KICAg
ICB9OwogICAgIGhlYXAoKS0+Zm9yRWFjaENvZGVCbG9jayhjb3VudElDcyk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCBjbGFzcyBKU01vZHVsZUVudmlyb25tZW50OwogY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTExJbnRQcm90b3R5cGVMb2FkQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50OwogY2xhc3MgTWV0YWRhdGFUYWJsZTsKLWNsYXNzIFBDVG9D
b2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBjbGFzcyBTdHJ1Y3R1
cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAogREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEpOwogCkBAIC0xNTgsNyArMTU4
LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUoKSBjb25zdCB7
IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgogICAgIHZvaWQg
c2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAKICAgICB1bnNp
Z25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBAIHB1YmxpYzoKICAgICB1bnNp
Z25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAgdW5zaWduZWQg
bnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVja3BvaW50cygp
ICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRyZXNzT2ZOdW1Q
YXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUu
Z2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3Rh
bGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJl
YWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rl
ciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5nIGJhY2sgdGhl
IG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBgdGhpc2AgYW5k
IHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0KLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFy
eVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gcmVn
Lm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2OCwyMyArMjU5
LDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUKQogICAgIHN0cnVjdCBKSVREYXRhIHsKICAg
ICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5m
bz4gbV9zdHViSW5mb3M7Ci0gICAgICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7Ci0gICAgICAg
IEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Ci0gICAgICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7
Ci0gICAgICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7CiAgICAgICAgIEJhZzxDYWxsTGlua0lu
Zm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5r
SW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxs
czsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIFBhY2tl
ZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3Jw
aGljQ2FsbHM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hK
dW1wVGFibGVzOwotICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2lu
TWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJl
Z2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVl
U2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAg
ICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNl
dHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAg
IEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIp
CiAgICAgewogICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkpCkBAIC0yOTMsMjIgKzI4Miw3
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJik7CiAKLSAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5
QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJv
ZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwot
ICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLQotICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0
eXBlPgotICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxl
KSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklU
TXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFk
ZEpJVE11bElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0
b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVROZWdJQyogYWRkTWF0
aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9m
aWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5l
cmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0
aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX2ppdERhdGEpOyB9CiAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRk
U3R1YkluZm8oQWNjZXNzVHlwZSwgQ29kZU9yaWdpbik7CiAKQEAgLTMyMiwxOCArMjk2LDggQEAg
cHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXpl
IHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5r
SW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRK
SVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3Qg
SklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlciku
bV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7
CiAKLSAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29k
ZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9p
ZCogcGMpOwogCiAgICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0KTsK
QEAgLTQ3MiwxMCArNDM2LDEyIEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1
bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBt
X2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJv
ZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8
ICFPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50VmFsdWVQcm9m
aWxlcy5zaXplKCk7CisgICAgICAgIAogICAgIH0KIAogICAgIFZhbHVlUHJvZmlsZSYgdmFsdWVQ
cm9maWxlRm9yQXJndW1lbnQodW5zaWduZWQgYXJndW1lbnRJbmRleCkKQEAgLTU2OSw4ICs1MzUs
MTAgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBj
b25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJl
ZykgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9
CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBy
ZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXS5nZXQoKTsgfQorICAgIGJvb2wgaXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9j
ayhWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdDsKICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oaW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNv
bnN0YW50c1ZlY3RvckJ1ZmZlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fY29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRh
dGFNZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRl
Y2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAg
ICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5z
aXplKCk7IH0KQEAgLTU5NSwyMiArNTYzLDIyIEBAIHB1YmxpYzoKICAgICAvLyBKdW1wIFRhYmxl
cwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBTaW1wbGVKdW1wVGFibGUmIHN3aXRjaEp1bXBUYWJs
ZShpbnQgdGFibGVJbmRleCkKKyAgICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5lU3dpdGNoSnVt
cFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICB2b2lkKiBiYXNlbGluZUpJ
VENvbnN0YW50UG9vbCgpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEp
OwotICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSAmJiBqaXRUeXBlKCkgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX2ppdENvbnN0
YW50UG9vbC5kYXRhKCk7CiAgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJl
ck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0
dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsg
fQogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBTdHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1
bXBUYWJsZShpbnQgdGFibGVJbmRleCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
aml0RGF0YSk7Ci0gICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlc1t0YWJsZUluZGV4XTsKLSAgICB9CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgU3RyaW5n
SnVtcFRhYmxlJiBkZmdTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAg
IFNpbXBsZUp1bXBUYWJsZSYgZGZnU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKICNl
bmRpZgorCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVz
KCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYg
dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1f
dW5saW5rZWRDb2RlLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsg
fQogCkBAIC02MzIsMjEgKzYwMCwyMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrSWZKSVRU
aHJlc2hvbGRSZWFjaGVkKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNv
dW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgICAgIHJldHVy
biBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRo
aXMpOwogICAgIH0KIAogICAgIHZvaWQgZG9udEpJVEFueXRpbWVTb29uKCkKICAgICB7Ci0gICAg
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgpOworICAgICAgICBt
X2xsaW50RXhlY3V0ZUNvdW50ZXItPmRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgfQogCi0gICAg
aW50MzJfdCB0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOwotICAgIHZvaWQgaml0
QWZ0ZXJXYXJtVXAoKTsKICAgICB2b2lkIGppdFNvb24oKTsKKyAgICB2b2lkIGppdE5leHRJbnZv
Y2F0aW9uKCk7CiAKICAgICBjb25zdCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhl
Y3V0ZUNvdW50ZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRl
Q291bnRlcjsKKyAgICAgICAgcmV0dXJuICptX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgfQog
CiAgICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6dHVwbGU8U3RydWN0dXJlSUQsIHVuc2lnbmVkPiwg
Rml4ZWRWZWN0b3I8TExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
Pj4gU3RydWN0dXJlV2F0Y2hwb2ludE1hcDsKQEAgLTc5Nyw2ICs3NjQsNyBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2Vy
UmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJu
ICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRGVi
dWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fZGVi
dWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1C
cmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFr
cG9pbnRzKQpAQCAtODM4LDYgKzgwNiw3IEBAIHB1YmxpYzoKICAgICBtdXRhYmxlIENvbmN1cnJl
bnRKU0xvY2sgbV9sb2NrOwogCiAgICAgYm9vbCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZDsgLy8g
Tm90IGEgYml0ZmllbGQgYmVjYXVzZSB0aGUgSklUIHdhbnRzIHRvIHN0b3JlIHRvIGl0LgorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7IH0K
IAogI2lmIEVOQUJMRShKSVQpCiAgICAgdW5zaWduZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6
IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCkBAIC05MDcsMTYgKzg3NiwxMiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX21ldGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKTsgfQogCi0gICAgYm9v
bCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCi0gICAgewotICAg
ICAgICAvLyBTb21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhl
IGxvb3BzIHRoZXkgcnVuLgotICAgICAgICByZXR1cm4gIW1fdW5saW5rZWRDb2RlLT5pc0J1aWx0
aW5GdW5jdGlvbigpOwotICAgIH0KKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6
emluZ0Vhcmx5UmV0dXJuKCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmxvb3BIaW50c0FyZUVs
aWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQg
ZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBm
aW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7CisgICAgdm9pZCBmaW5hbGl6ZUpJVElu
bGluZUNhY2hlcygpOwogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgdm9pZCB0YWxs
eUZyZXF1ZW50RXhpdFNpdGVzKCk7CkBAIC0xMDEwLDcgKzk3NSw5IEBAIHByaXZhdGU6CiAgICAg
U3RydWN0dXJlV2F0Y2hwb2ludE1hcCBtX2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXA7CiAgICAg
UmVmUHRyPEpJVENvZGU+IG1faml0Q29kZTsKICNpZiBFTkFCTEUoSklUKQorcHVibGljOgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxKSVREYXRhPiBtX2ppdERhdGE7Citwcml2YXRlOgogI2VuZGlmCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gVGhpcyBpcyByZWxldmFudCB0byBub24tREZHIGNv
ZGUgYmxvY2tzIHRoYXQgc2VydmUgYXMgdGhlIHByb2ZpbGVkIGNvZGUgYmxvY2sKQEAgLTEwMjks
NyArOTk2LDcgQEAgcHJpdmF0ZToKIAogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1fYWx0
ZXJuYXRpdmU7CiAgICAgCi0gICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVj
dXRlQ291bnRlcjsKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIqIG1fbGxpbnRFeGVjdXRl
Q291bnRlciB7IG51bGxwdHIgfTsKIAogICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2pp
dEV4ZWN1dGVDb3VudGVyOwogICAgIHVpbnQzMl90IG1fb3NyRXhpdENvdW50ZXI7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDEwIEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHSklUQ29k
ZS5oIgogI2luY2x1ZGUgIlVubGlua2VkTWV0YWRhdGFUYWJsZUlubGluZXMuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC00MCw5ICs0Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQ
cm9maWxlKGNvbnMKICAgICBpZiAobV9tZXRhZGF0YSkgewogI2RlZmluZSBWSVNJVChfX29wKSBc
CiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkg
eyBmdW5jKG1ldGFkYXRhLm1fcHJvZmlsZSwgZmFsc2UpOyB9KTsKLQogICAgICAgICBGT1JfRUFD
SF9PUENPREVfV0lUSF9WQUxVRV9QUk9GSUxFKFZJU0lUKQotCiAjdW5kZWYgVklTSVQKIAogICAg
ICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wSXRlcmF0b3JPcGVuPihbJl0gKGF1dG8mIG1ldGFk
YXRhKSB7IApAQCAtNTcsNyArNTcsNiBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJv
ZmlsZShjb25zCiAgICAgICAgICAgICBmdW5jKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLCBmYWxz
ZSk7CiAgICAgICAgIH0pOwogICAgIH0gICAKLQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgpAQCAtOTksNCArOTgsMzggQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxM
aW5rSW5mbwogICAgIH0KIH0KIAorI2lmIEVOQUJMRShKSVQpCitBTFdBWVNfSU5MSU5FIGNvbnN0
IEpJVENvZGVNYXAmIENvZGVCbG9jazo6aml0Q29kZU1hcCgpCit7CisgICAgQVNTRVJUKGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJh
c2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1faml0Q29kZU1hcDsKK30KKworQUxX
QVlTX0lOTElORSBTaW1wbGVKdW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTd2l0Y2hKdW1w
VGFibGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+
KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKwor
QUxXQVlTX0lOTElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTdHJpbmdT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5l
SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKERGR19KSVQpCitBTFdBWVNfSU5MSU5F
IFNpbXBsZUp1bXBUYWJsZSYgQ29kZUJsb2NrOjpkZmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxl
SW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxERkc6OkpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3
aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisKK0FMV0FZU19JTkxJTkUgU3RyaW5nSnVt
cFRhYmxlJiBDb2RlQmxvY2s6OmRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PERGRzo6SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwogICAgIAog
ICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwQW5kQWN0aXZhdGUoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spOworCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVC
bG9jaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
LCBtX2NvZGVCbG9jayk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRpb25Db3VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIGJvb2wgRXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1Zh
cmlhbnQ+OjoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdGhyZXNob2xkID0g
Y2xpcHBlZFRocmVzaG9sZChjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIDog
bnVsbHB0ciwgdGhyZXNob2xkKTsKKyAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKHRo
cmVzaG9sZCk7CiAgICAgCiAgICAgbV9jb3VudGVyID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXRo
cmVzaG9sZCk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGlvbkNvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZvcmNlU2xvd1BhdGhDb25jdXJy
ZW50bHkoKTsgLy8gSWYgeW91IHVzZSB0aGlzLCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNl
dCgpIG1heSBzdGlsbCByZXR1cm4gZmFsc2UuCiAgICAgYm9vbCBjaGVja0lmVGhyZXNob2xkQ3Jv
c3NlZEFuZFNldChDb2RlQmxvY2sqKTsKICAgICBib29sIGhhc0Nyb3NzZWRUaHJlc2hvbGQoKSBj
b25zdCB7IHJldHVybiBtX2NvdW50ZXIgPj0gMDsgfQotICAgIHZvaWQgc2V0TmV3VGhyZXNob2xk
KGludDMyX3QgdGhyZXNob2xkLCBDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldE5ld1RocmVzaG9s
ZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJsb2NrKiA9IG51bGxwdHIpOwogICAgIHZvaWQgZGVm
ZXJJbmRlZmluaXRlbHkoKTsKICAgICBkb3VibGUgY291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxkb3VibGU+KG1fdG90YWxDb3VudCkgKyBtX2NvdW50ZXI7IH0KICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKQEAgLTg2LDEzICs4Niw5IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgVCBjbGlwcGVkVGhy
ZXNob2xkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFQgdGhyZXNob2xkKQorICAgIHN0
YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoVCB0aHJlc2hvbGQpCiAgICAgewotICAgICAgICBpbnQz
Ml90IG1heFRocmVzaG9sZDsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnJhbmRvbWl6ZUV4ZWN1dGlv
bkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpICYmIGdsb2JhbE9iamVjdCkKLSAgICAgICAgICAg
IG1heFRocmVzaG9sZCA9IGdsb2JhbE9iamVjdC0+d2Vha1JhbmRvbUludGVnZXIoKSAlIG1heGlt
dW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbWF4VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVj
a3BvaW50cygpOworICAgICAgICBpbnQzMl90IG1heFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRp
b25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKTsKICAgICAgICAgaWYgKHRocmVzaG9sZCA+IG1h
eFRocmVzaG9sZCkKICAgICAgICAgICAgIHRocmVzaG9sZCA9IG1heFRocmVzaG9sZDsKICAgICAg
ICAgcmV0dXJuIHRocmVzaG9sZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksNyBAQCBzdHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0IHsKIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCkgPT0gMTIpOwogCiBzdHJ1
Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIHsKKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRN
b2RlTWV0YWRhdGFBcnJheUxlbmd0aCwgYXJyYXlQcm9maWxlKTsgfQogICAgIEFycmF5UHJvZmls
ZSBhcnJheVByb2ZpbGU7CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRh
ZGF0YUFycmF5TGVuZ3RoKSA9PSAxMik7CkBAIC04OCw2ICs4OSw3IEBAIHVuaW9uIEdldEJ5SWRN
b2RlTWV0YWRhdGEgewogICAgICAgICBHZXRCeUlkTW9kZSBtb2RlOwogICAgICAgICB1aW50OF90
IGhpdENvdW50Rm9yTExJbnRDYWNoaW5nOyAvLyBUaGlzIG11c3QgYmUgemVybyB3aGVuIHdlIHVz
ZSBQcm90b0xvYWQgbW9kZS4KICAgICB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZN
b2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUp
OyB9CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YURlZmF1bHQgZGVmYXVsdE1vZGU7CiAgICAgR2V0
QnlJZE1vZGVNZXRhZGF0YVVuc2V0IHVuc2V0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRh
QXJyYXlMZW5ndGggYXJyYXlMZW5ndGhNb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTMsNyArMjEzLDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JT
dHViSQogICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAg
IAogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjogewotICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7
CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1
cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZp
ZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1
cy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbkJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw3IEBAIEluQnlT
dGF0dXMgSW5CeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmYKICAgICAgICAgcmV0dXJuIEluQnlT
dGF0dXMoTm9JbmZvcm1hdGlvbik7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjog
ewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1
YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pOwogICAgICAgICBpZiAoc3RydWN0
dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICAgICAg
cmV0dXJuIEluQnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxMSArMTc2LDE2IEBAIEFMV0FZU19JTkxJTkUgc3Rh
dGljIGJvb2wgbGlua0NvZGVJbmxpbmUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW5s
aW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiti
b29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0
YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9j
ay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gVGhlc2UgZHluYW1pYyBzbG90cyBnZXQgZmls
bGVkIGluLiBOb3RoaW5nIGVsc2UgdG8gZG8uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KwogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5m
by5iYXNlR1BSOwpAQCAtMjMzLDIzICsyMzgsMzEgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9v
bCBoYXNGcmVlUmVnaXN0ZQogICAgIHJldHVybiBnZXRTY3JhdGNoUmVnaXN0ZXIoc3R1YkluZm8p
ICE9IEludmFsaWRHUFJSZWc7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50
SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+
dXNlRGF0YUlDKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgaWYgKGlzSW5saW5lT2Zm
c2V0KG9mZnNldCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGhhc0ZyZWVS
ZWdpc3RlcihzdHViSW5mbyk7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQ
cm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBBU1NFUlQoY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKHN0dWJJbmZvLCBvZmZzZXQpKTsKKyAgICBBU1NFUlQoY2FuR2VuZXJhdGVTZWxmUHJvcGVy
dHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIG9mZnNldCkpOworCisgICAgaWYgKGNvZGVC
bG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gVGhlc2Ugc2xvdHMgZ2V0IGZpbGxlZCBp
bi4gTm90aGluZyBlbHNlIHRvIGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCkBAIC0yNzksMjIgKzI5MiwyNSBAQCBib29sIElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7
CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFjY2Vzczo6
aXNDYWNoZWFibGVBcnJheUxlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKIHsKICAgICBBU1NFUlQoYXJyYXktPmlu
ZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50
SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICBpZiAoIWhhc0ZyZWVSZWdpc3RlcihzdHViSW5mbykpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJldHVybiAhaGFzQW55QXJyYXlTdG9yYWdlKGFycmF5LT5pbmRleGluZ1R5
cGUoKSkgJiYgYXJyYXktPmluZGV4aW5nVHlwZSgpICE9IEFycmF5Q2xhc3M7CiB9CiAKLWJvb2wg
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxl
bmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBK
U0FycmF5KiBhcnJheSkKIHsKLSAgICBBU1NFUlQoaXNDYWNoZWFibGVBcnJheUxlbmd0aChzdHVi
SW5mbywgYXJyYXkpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNoZWFibGVB
cnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcnJheSkpOwogCiAgICAgaWYgKCFzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMx
OSwxNyArMzM1LDIwIEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKFMK
ICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6Omlz
Q2FjaGVhYmxlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wg
SW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAgIGlmICghc3R1YkluZm8uaGFz
Q29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKwogICAgIHJldHVybiBoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwogfQogCi1i
b29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgQVNT
RVJUKGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKSk7CisgICAgQVNTRVJUX1VOVVNF
RChjb2RlQmxvY2ssIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8p
KTsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0zNjMsMTMgKzM4MiwxOCBAQCBib29sIElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTdHJpbmdMZW5ndGgoCiB9CiAKIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZkluQWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29u
c3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJs
b2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBzbG90cyBnZXQgZmlsbGVkIGlu
LiBOb3RoaW5nIGVsc2UgdG8gZG8uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAg
IEdQUlJlZyBiYXNlID0gc3R1YkluZm8uYmFzZUdQUjsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9
IHN0dWJJbmZvLnZhbHVlUmVncygpOwogCkBAIC00MDYsNyArNDMwLDcgQEAgdm9pZCBJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJ
QygpKSB7CiAgICAgICAgIC8vIElmIGl0IGlzIG5vdCBHZXRCeUlkLWxpa2UtdGhpbmcsIHdlIGRv
IG5vdCBlbWl0IG5vcCBzbGVkIChlLmcuIEdldEJ5VmFsKS4KICAgICAgICAgLy8gVGhlIGNvZGUg
aXMgYWxyZWFkeSBhbiBpbmRpcmVjdCBqdW1wLCBhbmQgb25seSB0aGluZyB3ZSBzaG91bGQgZG8g
aXMgcmVwbGFjaW5nIG1fY29kZVB0ci4KLSAgICAgICAgaWYgKHN0dWJJbmZvLmhhc0NvbnN0YW50
SWRlbnRpZmllcikgeworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQgJiYgc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CiAgICAg
ICAgICAgICAvLyBJZiBtX2NvZGVQdHIgaXMgcG9pbnRpbmcgdG8gc3R1YkluZm8uc2xvd1BhdGhT
dGFydExvY2F0aW9uLCB0aGlzIG1lYW5zIHRoYXQgSW5saW5lQWNjZXNzIGNvZGUgaXMgbm90IGEg
c3R1YiBvbmUuCiAgICAgICAgICAgICAvLyBXZSByZXdyaXRlIHRoaXMgd2l0aCB0aGUgc3R1Yi1i
YXNlZCBkaXNwYXRjaGluZyBjb2RlIG9uY2UsIGFuZCBjb250aW51ZSB1c2luZyBpdCB1bnRpbCB3
ZSByZXNldCB0aGUgY29kZS4KICAgICAgICAgICAgIGlmIChzdHViSW5mby5tX2NvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSA9PSBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24uZXhlY3V0
YWJsZUFkZHJlc3MoKSkgewpAQCAtNDIxLDcgKzQ0NSw5IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpy
ZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICAgICAgICAgICAgICB9KSwgIklubGluZUFjY2Vzczog
bGlua2luZyBzdHViIGNhbGwiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAg
IHN0dWJJbmZvLm1fY29kZVB0ciA9IHRhcmdldDsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNv
ZGUuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCw4ICs0NjAsMTQgQEAgdm9pZCBJ
bmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgIH0pLCAiSW5saW5lQWNjZXNz
OiBsaW5raW5nIGNvbnN0YW50IGp1bXAiKTsKIH0KIAotdm9pZCBJbmxpbmVBY2Nlc3M6OnJlc2V0
U3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKK3ZvaWQgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogeworICAgIGlmIChjb2Rl
QmxvY2stPnVzZURhdGFJQygpICYmIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKSB7CisgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHN0dWJJbmZvLnNsb3dQ
YXRoU3RhcnRMb2NhdGlvbjsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHVi
SW5mby5zdGFydC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9p
ZChDQ2FsbEhlbHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgIC8vIFdl
IGRvbid0IG5lZWQgYSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1w
aW5nIGludG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4KICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1
bXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTksMTQgKzk5LDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KHNpemUsIHNpemVGb3JQcm9wZXJ0eUFjY2Vzcygp
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhT
dHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0
aWMgYm9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8m
LCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwot
ICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8m
LCBKU0FycmF5Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3Ry
dWN0dXJlU3R1YkluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0
cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2Vs
ZkluQWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIGJv
b2wgZ2VuZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMg
Ym9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBjYW5H
ZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8m
LCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVy
dHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgaXND
YWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAg
ICBzdGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNjZXNz
KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGlj
IGJvb2wgZ2VuZXJhdGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8m
KTsKIAogICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5s
aW5lQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNK
dW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVN
ZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJ
U0VfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0
YSB7CiAgICAgdWludDhfdCBzZWVuTW9kZXMgeyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlNlZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2Rl
TWV0YWRhdGEsIHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5
cGUoc2Vlbk1vZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJ
bnRDYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
TExJbnRDYWxsTGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQogCiBwcml2YXRlOgogICAgIHVp
bnRwdHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0YWRhdGFUYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRh
YmxlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9NZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGZ1bmMoKm1ldGFkYXRhKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBudW1FbnRyaWVzKCkKKyAgICB7
CisgICAgICAgIGF1dG8qIHN0YXJ0ID0gYml0d2lzZV9jYXN0PHR5cGVuYW1lIE9wOjpNZXRhZGF0
YSo+KGdldChPcDo6b3Bjb2RlSUQpKTsKKyAgICAgICAgYXV0byogZW5kID0gYml0d2lzZV9jYXN0
PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdldEltcGwoT3A6Om9wY29kZUlEICsgMSkpOworICAg
ICAgICByZXR1cm4gZW5kIC0gc3RhcnQ7CisgICAgfQorCiAgICAgc2l6ZV90IHNpemVJbkJ5dGVz
KCk7CiAKICAgICB2b2lkIHJlZigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wY29kZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMTcgQEAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heAogICAgIG1hY3JvKE9wSXRlcmF0b3JP
cGVuKSBcCiAgICAgbWFjcm8oT3BJdGVyYXRvck5leHQpIFwKIAorI2RlZmluZSBGT1JfRUFDSF9P
UENPREVfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAorICAgIG1hY3JvKE9wQWRk
KSBcCisgICAgbWFjcm8oT3BNdWwpIFwKKyAgICBtYWNybyhPcERpdikgXAorICAgIG1hY3JvKE9w
U3ViKSBcCisKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJPRklM
RShtYWNybykgXAorICAgIG1hY3JvKE9wSW5jKSBcCisgICAgbWFjcm8oT3BEZWMpIFwKKyAgICBt
YWNybyhPcE5lZ2F0ZSkgXAorCiAKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidHlwZS1saW1pdHMi
KQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1
cy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCwxMCArMTgwLDEwIEBAIFB1
dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKICAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHVpZCk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAg
ICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50
bHkodWlkKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZShwcm9maWxlZEJsb2NrLT52bSgpKTsKKyAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAg
ICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeVZh
cmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3R1YkluZm8tPm1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBQdXRC
eVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3RydWN0dXJlLCBvZmZzZXQp
OwogICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwg
KnN0dWJJbmZvKTsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJl
U3R1YkluZm8uaCIKIAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhp
Y0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKIApAQCAtNjUsOSArNjYsOSBAQCB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYoCiAgICAgQVNTRVJUKGhhc0NvbnN0
YW50SWRlbnRpZmllcik7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpHZXRC
eUlkU2VsZik7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndyaXRlQmFy
cmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5
SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0
QXJyYXlMZW5ndGgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyKQpAQCAtODcs
OSArODgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJlcGxhCiAgICAg
QVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENhY2hlVHlw
ZShsb2NrZXIsIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2UpOwogICAgIG1faWRlbnRpZmllciA9
IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBj
b2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRT
ZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAog
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEluQnlJZFNlbGYoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyQmFzZSYgbG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBpbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIENhY2hlYWJsZUlk
ZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTk3LDkgKzk4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6aW5pdEluQnlJZFNlbGYoYwogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5
cGU6OlVuc2V0KTsKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OkluQnlJZFNl
bGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIo
Y29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2Vs
Zk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQpA
QCAtMjM2LDcgKzIzNyw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJlU3R1Yklu
Zm8KICAgICAgICAgLy8gd2UncmUgYnVmZmVyZWQgaXMgYmVjYXVzZSB3ZSByZWx5IG9uIGl0IHRv
IHJlc2V0IGR1cmluZyBHQyBpZiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUKICAgICAgICAg
Ly8gaXMgY29sbGVjdGVkLgogICAgICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwotICAgICAg
ICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGdlbmVy
YXRlZCBzb21lIGNvZGUgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGF0dGVtcHQgdG8gcmVwYXRjaCBp
biB0aGUgZnV0dXJlIHVudGlsIHdlCiAgICAgICAgIC8vIGdhdGhlciBlbm91Z2ggY2FzZXMuCkBA
IC0yNTEsNyArMjUyLDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29u
YwogewogICAgIGNsZWFyQnVmZmVyZWRTdHJ1Y3R1cmVzKCk7CiAgICAgbV9pZGVudGlmaWVyID0g
bnVsbHB0cjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICBt
X2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOwogCiAgICAgaWYgKG1fY2FjaGVUeXBlID09
IENhY2hlVHlwZTo6VW5zZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTI4NSw2ICsyODYsNyBAQCB2
b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgICAgIHJlc2V0UHV0
QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFBy
aXZhdGVOYW1lOgogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2lu
ZDo6QnlWYWwpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoK
QEAgLTM2MCw4ICszNjIsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZl
cmVuCiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKLSAgICBpZiAobV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlKQotICAgICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNNYXJrZWQo
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICBpZiAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSkKKyAgICAgICAgaXNWYWxp
ZCAmPSB2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZSk7CiAgICAgaWYgKG1fY2FjaGVUeXBlID09
IENhY2hlVHlwZTo6U3R1YikKICAgICAgICAgaXNWYWxpZCAmPSB1LnN0dWItPnZpc2l0V2Vhayh2
bSk7CiAKQEAgLTM3NSw4ICszNzcsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdl
YWtSZWZlcmVuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAo
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQotICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodmlzaXRvci52bSgpKSkKKyAgICAgICAg
c3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIAogICAgIGlmIChtX2NhY2hlVHlwZSA9
PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnMo
dmlzaXRvcik7CkBAIC00MzAsNiArNDMyLDIwNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3Zv
aWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJ
bmZvKQoreworICAgIGFjY2Vzc1R5cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7Cisg
ICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0YXJ0OworICAgIGRvbmVMb2NhdGlvbiA9IHVu
bGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9
IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5k
ZXggPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSk7CisgICAgY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRT
dHViSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBtX2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9j
YXRpb247CisKKyAgICB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpOworICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQg
JiYgdW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAg
ICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVy
UmVnaXN0ZXIiIHJlZ2lzdGVyIGVpdGhlci4KKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyKTsKKyAgICB9CisKKyAg
ICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFs
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
SW5CeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Oklu
QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRT
dHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAg
ICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAg
ICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1
YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0
ZUZpZWxkU2V0OgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAg
ICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21h
TW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAg
ICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAg
ICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlu
a2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0
QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJp
dmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
U2V0UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQ
cml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
c3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5
R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJ
bmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7
CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRp
ZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
Okluc3RhbmNlT2Y6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAg
ICAgICBwcm90b3R5cGVJc0tub3duT2JqZWN0ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBC
YXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnByb3RvdHlw
ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJh
bmQ6IAorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFz
ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZh
bHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsK
KyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1f
c3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAg
ICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIg
PSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlk
V2l0aFRoaXM6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAg
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAg
ICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0Owor
ICAgICAgICByZWdzLnRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAg
ICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYg
KGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5
UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2Ug
QWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRp
ZmllciA9IGZhbHNlOworICAgICAgICB2YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAg
IGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAg
cmVncy5icmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZv
aWQgU3RydWN0dXJlU3R1YkluZm86OmNoZWNrQ29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
SklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUg
Ik9wdGlvbnMuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKQEAg
LTU2LDYgKzU3LDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRC
eVZhbCwKICAgICBQdXRCeUlkLAogICAgIFB1dEJ5VmFsLAorICAgIFB1dFByaXZhdGVOYW1lLAog
ICAgIEluQnlJZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtNzgsNiAr
ODAsOCBAQCBlbnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CiAgICAgU3RyaW5nTGVuZ3Ro
CiB9OwogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKKwogY2xhc3MgU3RydWN0
dXJlU3R1YkluZm8gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZv
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTk4LDYgKzEwMiw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKKyAgICB2b2lk
IGluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvJik7CisKICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsK
IAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUg
ZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLApAQCAtMzI1LDEzICszMzEs
MTkgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKKyAg
ICBQcm9wZXJ0eU9mZnNldCBieUlkU2VsZk9mZnNldDsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQnlJZFNlbGZPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJl
U3R1YkluZm8sIGJ5SWRTZWxmT2Zmc2V0KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
cnVjdHVyZVN0dWJJbmZvLCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOyB9CiAgICAgdW5p
b24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
OwotICAgICAgICB9IGJ5SWRTZWxmOwogICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsK
ICAgICB9IHU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlOworICAgIFN0cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShWTSYg
dm0pCisgICAgeworICAgICAgICBpZiAoIW1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gdm0uZ2V0U3RydWN0dXJl
KG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgfQorICAgIFN0cnVjdHVyZUlEIG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSB7IDAgfTsKIHByaXZhdGU6CiAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgLy8gUmVwcmVzZW50cyB0aG9zZSBzdHJ1Y3R1
cmVzIHRoYXQgYWxyZWFkeSBoYXZlIGJ1ZmZlcmVkIEFjY2Vzc0Nhc2VzIGluIHRoZSBQb2x5bW9y
cGhpY0FjY2Vzcy4KQEAgLTQ0Nyw2ICs0NTksMTcgQEAgaW5saW5lIGF1dG8gYXBwcm9wcmlhdGVH
ZW5lcmljR2V0QnlJZEZ1bgogICAgIH0KIH0KIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8geworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQ7
CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kIHsgUHJpdmF0ZUZp
ZWxkUHV0S2luZDo6bm9uZSgpIH07CisgICAgRUNNQU1vZGUgZWNtYU1vZGUgeyBFQ01BTW9kZTo6
c2xvcHB5KCkgfTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0OyAvLyBUaGlzIGlzIGVpdGhl
ciB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJQyBmb3IgKmJ5SWQgY2FjaGVzLiBvciB0aGUgbG9j
YXRpb24gb2YgcGF0Y2hhYmxlIGp1bXAgZm9yICdpbnN0YW5jZW9mJyBjYWNoZXMuCisgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzbG93UGF0aFN0YXJ0TG9jYXRpb247
Cit9OworCiAjZWxzZQogCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB2b2lkIHByaW50U3VwZXJTYW1wbGVy
U3RhdGUoKQogICAgIGRvdWJsZSBwZXJjZW50YWdlID0gMTAwLjAgKiBpbiAvIChpbiArIG91dCk7
CiAgICAgaWYgKHBlcmNlbnRhZ2UgIT0gcGVyY2VudGFnZSkKICAgICAgICAgcGVyY2VudGFnZSA9
IDAuMDsKLSAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxh
ZzogIiwgcGVyY2VudGFnZSwgIlxuIik7CisgICAgZGF0YUxvZygiUGVyY2VudCB0aW1lIGJlaGlu
ZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNlbnRhZ2UsICIlXG4iKTsKIH0KIAogdm9pZCBl
bmFibGVTdXBlclNhbXBsZXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9j
ay5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVk
ZSAiQ2xhc3NJbmZvLmgiCkBAIC03OCw2ICs3OSw4IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxp
bmtlZENvZGVCbG9jayhWTSYKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeShsb2Nr
ZXIpOwogICAgICAgICBtX3JhcmVEYXRhLT5tX3ByaXZhdGVCcmFuZFJlcXVpcmVtZW50ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByaXZhdGVCcmFuZFJlcXVpcmVtZW50OjpOZWVkZWQpOwogICAg
IH0KKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xk
Rm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KQEAgLTMxNiw2ICszMTksNDggQEAgaW50IFVubGlua2Vk
Q29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2ZmcwogICAgIHJldHVybiBtX291dE9mTGluZUp1bXBU
YXJnZXRzLmdldChieXRlY29kZU9mZnNldCk7CiB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorYm9v
bCBVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQoreworICAgIGlmIChudW1iZXJPZklkZW50aWZpZXJzKCkgPiAxMDApIHsKKyAgICAgICAgaWYg
KG51bWJlck9mSWRlbnRpZmllcnMoKSAhPSBtX2NhY2hlZElkZW50aWZpZXJVaWRzLnNpemUoKSkg
eworICAgICAgICAgICAgTG9ja2VyIGxvY2tlcihtX2NhY2hlZElkZW50aWZpZXJVaWRzTG9jayk7
CisgICAgICAgICAgICBIYXNoU2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gY2FjaGVkSWRlbnRpZmll
clVpZHM7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZJZGVu
dGlmaWVycygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dGlmaWVyID0gdGhpcy0+aWRlbnRpZmllcihpKTsKKyAgICAgICAgICAgICAgICBjYWNoZWRJZGVu
dGlmaWVyVWlkcy5hZGQoaWRlbnRpZmllci5pbXBsKCkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAgICAgbV9jYWNoZWRJZGVu
dGlmaWVyVWlkcyA9IFdURk1vdmUoY2FjaGVkSWRlbnRpZmllclVpZHMpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIG1fY2FjaGVkSWRlbnRpZmllclVpZHMuY29udGFpbnModWlkKTsKKyAg
ICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZJZGVudGlmaWVycygp
OyArK2kpIHsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIoaSkuaW1wbCgpID09IHVpZCkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYK
KworaW50MzJfdCBVbmxpbmtlZENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhy
ZXNob2xkKQoreworICAgIHN3aXRjaCAoZGlkT3B0aW1pemUoKSkgeworICAgIGNhc2UgVHJpU3Rh
dGU6OkluZGV0ZXJtaW5hdGU6CisgICAgICAgIHJldHVybiB0aHJlc2hvbGQ7CisgICAgY2FzZSBU
cmlTdGF0ZTo6RmFsc2U6CisgICAgICAgIHJldHVybiB0aHJlc2hvbGQgKiA0OworICAgIGNhc2Ug
VHJpU3RhdGU6OlRydWU6CisgICAgICAgIHJldHVybiB0aHJlc2hvbGQgLyAyOworICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gdGhyZXNob2xkOworfQorCisKIHZv
aWQgVW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJvZmlsZXMoKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKCFtX21ldGFkYXRhLT5pc0ZpbmFsaXplZCgpKTsKQEAgLTMzNywxNSArMzgy
LDI1IEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHIKICAgICBpZiAo
bV9tZXRhZGF0YS0+aGFzTWV0YWRhdGEoKSkgewogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFy
cmF5UHJvZmlsZXMgPSAwOwogCi0jZGVmaW5lIENPVU5UKF9fb3ApIFwKLSAgICAgICAgbnVtYmVy
T2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKKyNkZWZp
bmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVu
dHJpZXM8X19vcD4oKTsKICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklM
RShDT1VOVCkKICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lO
Rk8oQ09VTlQpCiAjdW5kZWYgQ09VTlQKICAgICAgICAgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9
IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgICAgIG51bWJl
ck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9wR2V0QnlJZD4oKTsK
LQogICAgICAgICBtX2FycmF5UHJvZmlsZXMgPSBGaXhlZFZlY3RvcjxVbmxpbmtlZEFycmF5UHJv
ZmlsZT4obnVtYmVyT2ZBcnJheVByb2ZpbGVzKTsKKworICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZkJpbmFyeUFyaXRoUHJvZmlsZXMgPSAwOworI2RlZmluZSBDT1VOVChfX29wKSBudW1iZXJPZkJp
bmFyeUFyaXRoUHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOworICAg
ICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShDT1VOVCkKKyN1
bmRlZiBDT1VOVAorICAgICAgICBtX2JpbmFyeUFyaXRoUHJvZmlsZXMgPSBGaXhlZFZlY3RvcjxC
aW5hcnlBcml0aFByb2ZpbGU+KG51bWJlck9mQmluYXJ5QXJpdGhQcm9maWxlcyk7CisKKyAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZVbmFyeUFyaXRoUHJvZmlsZXMgPSAwOworI2RlZmluZSBDT1VO
VChfX29wKSBudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRy
aWVzPF9fb3A+KCk7CisgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoQ09VTlQpCisjdW5kZWYgQ09VTlQKKyAgICAgICAgbV91bmFyeUFyaXRoUHJvZmlsZXMg
PSBGaXhlZFZlY3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4obnVtYmVyT2ZVbmFyeUFyaXRoUHJvZmls
ZXMpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSwxMCArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBcml0aFBy
b2ZpbGUuaCIKICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUNv
bnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNpbmNsdWRlICJERkdFeGl0UHJv
ZmlsZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNz
aW9uUmFuZ2VJbmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJJZGVu
dGlmaWVyLmgiCkBAIC02NCw2ICs2Niw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xh
c3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGlu
ZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29u
c3RhbnQgOiBpbnQzMl90OwogCkBAIC0xNzUsNiArMTc4LDcgQEAgcHVibGljOgogCiAgICAgY29u
c3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMo
KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07
IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudElu
ZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9j
b25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIxMSwxNSBA
QCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAog
ICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25z
dCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgewor
ICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0
KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0
aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5z
dHJ1Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBj
b25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51
bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAg
dW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDEw
ICszNDcsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tZXRhZGF0YS0+c2l6ZUluQnl0
ZXMoKTsKICAgICB9CiAKKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vh
cmx5UmV0dXJuKCkKKyAgICB7CisgICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVk
IHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCisgICAgICAgIHJldHVybiAh
aXNCdWlsdGluRnVuY3Rpb24oKTsKKyAgICB9CiAgICAgdm9pZCBhbGxvY2F0ZVNoYXJlZFByb2Zp
bGVzKCk7CiAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUmIHVubGlua2VkVmFsdWVQcm9maWxlKHVu
c2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9CiAgICAgVW5s
aW5rZWRBcnJheVByb2ZpbGUmIHVubGlua2VkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7
IHJldHVybiBtX2FycmF5UHJvZmlsZXNbaW5kZXhdOyB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAor
ICAgIGJvb2wgaGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOworI2VuZGlmCisKKyAg
ICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7CisKIHByb3RlY3Rl
ZDoKICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25z
dCBFeGVjdXRhYmxlSW5mbyYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+KTsKIApAQCAt
Mzk3LDYgKzQyMSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0
dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CisgICAgUmVm
UHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6CiAg
ICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1f
cGFyc2VNb2RlOwpAQCAtNDEzLDcgKzQzOCw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCi0KICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CiAjZW5kaWYKQEAg
LTQ1OCw2ICs0ODIsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGlu
ZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZM
aW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCisgICAgeworICAgICAgICB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAg
cmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIH0KKworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0
dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1
bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxl
c1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3Vu
dGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOyB9CiAKIHByaXZhdGU6CiAgICAg
dXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpP
ZmZzZXQsIGludD47CkBAIC00NjUsOCArNDk5LDE2IEBAIHByaXZhdGU6CiAgICAgT3V0T2ZMaW5l
SnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4ZWRWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5m
bz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGlu
dEV4ZWN1dGVDb3VudGVyOwogICAgIEZpeGVkVmVjdG9yPFVubGlua2VkVmFsdWVQcm9maWxlPiBt
X3ZhbHVlUHJvZmlsZXM7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+IG1f
YXJyYXlQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmlu
YXJ5QXJpdGhQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4gbV91
bmFyeUFyaXRoUHJvZmlsZXM7CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIExvY2sgbV9jYWNo
ZWRJZGVudGlmaWVyVWlkc0xvY2s7CisgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IG1f
Y2FjaGVkSWRlbnRpZmllclVpZHM7CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxlKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZzZXRJbk1ldGFkYXRhVGFibGUo
Y29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9pc0ZpbmFsaXpl
ZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9IG1faXMzMkJpdCA/IG9mZnNl
dFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9w
Y29kZUlEXTsKKyAgICAgICAgYmFzZVR5cGVPZmZzZXQgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFs
aWdub2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSksIGJhc2VUeXBlT2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKHR5cGVuYW1lIE9wY29kZTo6TWV0YWRh
dGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CiAgICAgdW5zaWduZWQgbnVtRW50cmllcygpOwogCkBAIC0xMDcsNiArMTE2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAg
fQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2
ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTMgKzQ1LDEx
IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tl
dHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tl
dHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAg
ICBWYWx1ZVByb2ZpbGVCYXNlKCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQotICAgICAgICAgICAgbV9idWNrZXRzW2ld
ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgIGNsZWFyQnVja2V0cygpOwog
ICAgIH0KICAgICAKICAgICBFbmNvZGVkSlNWYWx1ZSogc3BlY0ZhaWxCdWNrZXQodW5zaWduZWQg
aSkKQEAgLTU5LDYgKzU3LDEyIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAg
QVNTRVJUKG51bWJlck9mQnVja2V0cyArIGkgPCB0b3RhbE51bWJlck9mQnVja2V0cyk7CiAgICAg
ICAgIHJldHVybiBtX2J1Y2tldHMgKyBudW1iZXJPZkJ1Y2tldHMgKyBpOwogICAgIH0KKworICAg
IHZvaWQgY2xlYXJCdWNrZXRzKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQorICAgICAgICAgICAgbV9idWNrZXRzW2ld
ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgfQogICAgIAogICAgIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tldCkgY29uc3QKICAgICB7CkBAIC0xMjMs
OCArMTI3LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBv
bmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4
ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkBAIC0xMzksNyAr
MTQxLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICAKICAgICAgICAgcmV0
dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAgICBFbmNvZGVkSlNWYWx1ZSBtX2J1
Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVk
aWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE2MSw2ICsxNjMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9m
aWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGUgOiBwdWJsaWMg
VmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPiB7CiAgICAgVmFsdWVQcm9maWxl
KCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+KCkgeyB9CisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQogfTsKIAogc3RydWN0IFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUg
IkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgpAQCAt
MzQsNyArMzUsOSBAQAogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgogI2luY2x1ZGUg
IkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCisjaW5jbHVk
ZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSlNDYXN0LmgiCisjaW5jbHVkZSAiUENUb0NvZGVP
cmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAi
UmVjb3JkZWRTdGF0dXNlcy5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KQEAgLTcwLDcgKzczLDcg
QEAgc3RydWN0IFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uIHsKICAgICBXcml0ZUJhcnJpZXI8SlND
ZWxsPiBtX3RvOwogfTsKICAgICAgICAgCi1jbGFzcyBDb21tb25EYXRhIHsKK2NsYXNzIENvbW1v
bkRhdGEgOiBwdWJsaWMgTWF0aElDSG9sZGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
b21tb25EYXRhKTsKIHB1YmxpYzoKICAgICBDb21tb25EYXRhKCkKQEAgLTExNiw2ICsxMTksNyBA
QCBwdWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50
PiBtX3dhdGNocG9pbnRzOwogICAgIEZpeGVkVmVjdG9yPEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludD4gbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzOwogICAgIEZpeGVkVmVjdG9yPEFk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gbV9hZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9y
aWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKICAgICBSZWNvcmRlZFN0YXR1c2VzIHJlY29y
ZGVkU3RhdHVzZXM7CiAgICAgVmVjdG9yPEp1bXBSZXBsYWNlbWVudD4gbV9qdW1wUmVwbGFjZW1l
bnRzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3Bw
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKKyNpbmNsdWRlICJK
dW1wVGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDYgKzQyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIFRyYWNrZWRSZWZlcmVuY2Vz
OwogCitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKwog
bmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEpJVENvbXBpbGVyOwpAQCAtMTAxLDYgKzEwNCw4IEBA
IHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sq
LCB2b2lkKiBwYykgZmluYWw7CiAKICAgICB1c2luZyBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXpl
Q29kZVJlZkZvckRGRzsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1h
cCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9
CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxsb3cg
SklUQ29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCkuCkBAIC0xNDAsNiArMTQ1LDggQEAgcHVi
bGljOgogICAgIEhhc2hNYXA8Qnl0ZWNvZGVJbmRleCwgVHJpZ2dlclJlYXNvbj4gdGllclVwRW50
cnlUcmlnZ2VyczsKIAogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1fb3NyRW50cnlCbG9j
azsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsK
KyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
czsKICAgICB1bnNpZ25lZCBvc3JFbnRyeVJldHJ5OwogICAgIGJvb2wgYWJhbmRvbk9TUkVudHJ5
OwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODUsMTMgKzE4NSwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtC
CiAgICAgCiAgICAgbV9ncmFwaC5yZWdpc3RlckZyb3plblZhbHVlcygpOwogCi0gICAgaWYgKCFt
X2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkgfHwgIW1fZ3JhcGgubV9z
d2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAoIW1fZ3JhcGgubV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5l
bnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZSht
X2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7Ci0gICAgICAgIGlmICghbV9ncmFwaC5t
X3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVu
c3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgu
bV9zd2l0Y2hKdW1wVGFibGVzKTsKLSAgICB9CisgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1faml0Q29kZS0+bV9z
d2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIAorICAgICAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMp
OworICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQorICAgICAg
ICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N3aXRj
aEp1bXBUYWJsZXMpOwogCiAgICAgZm9yIChCYWc8U3dpdGNoRGF0YT46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2dyYXBoLm1fc3dpdGNoRGF0YS5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewogICAgICAg
ICBTd2l0Y2hEYXRhJiBkYXRhID0gKippdGVyOwpAQCAtMTk5LDEyICsxOTgsMTIgQEAgdm9pZCBK
SVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBjYXNlIFN3aXRjaENo
YXI6CiAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CiAgICAgICAgICAgICBpZiAoIWRhdGEuZGlk
VXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KS5pc0VtcHR5KCkpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRh
YmxlSW5kZXhdLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRh
YmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAg
ICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENvZGUtPm1fc3dpdGNo
SnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAgICAgbGlua2VkVGFi
bGUubV9jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPiht
X2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCkgPT0gdW5saW5r
ZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCk7IGotLTspCkBAIC0yMTksMTIg
KzIxOCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAKICAg
ICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6IHsKICAgICAgICAgICAgIGlmICghZGF0YS5kaWRVc2VK
dW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnN0cmluZ1N3
aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHkoKSk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2RhdGEu
c3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRj
aFRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRl
eF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRl
eF0pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua2VkVGFibGUubV9jdGlPZmZzZXRz
LnNpemUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUuc2l6ZSgpICsgMSk7CiAgICAg
ICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbGlua2VkVGFibGUubV9jdGlPZmZzZXRzKQpAQCAt
MzMzLDcgKzMzMiw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IK
ICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBw
aW5nKCkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChtYWtlVW5p
cXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
KSwgbGlua0J1ZmZlcikpOworICAgICAgICBtX2ppdENvZGUtPmNvbW1vbi5tX3BjVG9Db2RlT3Jp
Z2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpOwogfQogCiBzdGF0aWMgdm9pZCBlbWl0U3Rh
Y2tPdmVyZmxvd0NoZWNrKEpJVENvbXBpbGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCYgc3RhY2tPdmVyZmxvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNiBAQCB2b2lkKiBw
cmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqCiAgICAgQVNTRVJUKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFTU0VSVChjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNTRVJUKCFjb2RlQmxv
Y2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdD
b21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIAogICAgIGlmICghT3B0aW9uczo6dXNlT1NSRW50cnlU
b0RGRygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzIsOSArNzcyLDYgQEAgdm9pZCBPU1JFeGl0Ojpjb21w
aWxlRXhpdChDQ2FsbEhlbHBlcnMmIAogICAgIC8vIFRoZSB0YWcgcmVnaXN0ZXJzIGFyZSBuZWVk
ZWQgdG8gbWF0ZXJpYWxpemUgcmVjb3ZlcmllcyBiZWxvdy4KICAgICBqaXQuZW1pdE1hdGVyaWFs
aXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKIAotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxl
cigpKQotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0udG9wRW50cnlGcmFtZSk7Ci0KICAgICBpZiAoaW5saW5lU3RhY2tDb250YWluc0Fj
dGl2ZUNoZWNrcG9pbnQpIHsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIHRtcFNjcmF0Y2ggPSBz
Y3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25NYXRlcmlhbGl6ZU9TUkV4aXRTaWRlU3RhdGUpPigmdm0sICZl
eGl0LCB0bXBTY3JhdGNoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAK
KyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgog
I2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIKQEAgLTExOSwxMCAr
MTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxsSGVscGUKICAgICBp
bnQzMl90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2ggKGppdC5jb2RlQmxvY2soKS0+aml0VHlw
ZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9
IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChqaXQuY29kZUJsb2Nr
KCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9
IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgotICAgICAgICBjbGlw
cGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGpp
dC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xp
cHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0
YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMTMsNiArMzE0LDEwIEBAIHZvaWQgcmVpZnlJ
bmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVD
YWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVl
U2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lz
dGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNl
bGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpKTsKKyAgICAgICAgfSBlbHNl
IGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKKyAg
ICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlu
bGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19tZXRhZGF0YUdQUikpOwor
ICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVKSVRDb25zdGFudFBvb2woKSksIGNhbGxl
ZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19jb25z
dGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKSkKQEAgLTQwNCw2ICs0MDksOSBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1Rhcmdl
dChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CiAg
ICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUo
KSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGluZUpJVENvbnN0YW50UG9vbCgp
KSwgSklUOjpzX2NvbnN0YW50c0dQUik7CisKICAgICAgICAgY29kZUJsb2NrRm9yRXhpdC0+bV9o
YXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRl
eCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKQEAgLTQyMCwxMiArNDI4LDE2
IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICAgICAganVt
cFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKICAgICB9CiAKLSAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9ja0ZvckV4aXQpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBc3NlbWJseUhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhh
bmRsZXIoKSkgeworICAgICAgICBBU1NFUlQoIVJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdp
c3RlcnMoKS5jb250YWlucyhMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikpOworICAgICAgICBqaXQu
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlG
cmFtZSwgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKExMSW50OjpSZWdpc3RlcnM6
OnBjR1BSKSk7CisKICAgICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9jYXRjaCwg
d2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCiAgICAgICAgIGppdC5zdG9yZVB0cihH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgdm0uYWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2go
KSk7CiAgICAgfQotICAgIAorCisgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNp
emVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxw
ZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQu
ZmFySnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0clRhZyk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93
UGF0aHMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgi
CkBAIC0yODY5LDcgKzI4NzAsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RmluZFN3CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7Ci0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
ICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
QVNTRVJUKHZhbHVlLmlzRG91YmxlKCkpOwogICAgIGRvdWJsZSBhc0RvdWJsZSA9IHZhbHVlLmFz
RG91YmxlKCk7CkBAIC0yODkwLDcgKzI4OTEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uU3dpdGNoCiAKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51
bGxwdHIpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5z
dHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwogICAgIHJldHVybiBsaW5rZWRUYWJsZS5jdGlGb3JWYWx1ZSgqdW5saW5rZWRU
YWJsZSwgc3RySW1wbCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMwLDYgKzczMCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihjYWxsZWVUYWdHUFIsIGNh
bGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVt
QWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0g
bnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBt
X2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogCiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAgICAg
RWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CkBA
IC04ODksNyArODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFp
bCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2pp
dCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVm
ZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
bV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODM0LDYgKzgzNCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxl
ZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdEpTKTsKICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAg
ICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBh
cmFtZXRlcnMoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRn
ZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwpAQCAtOTg1LDcgKzk4
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAKICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0g
ICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5v
LCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVT
aHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZs
ZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICszOTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMg
PSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4s
IGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAg
bV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUs
IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2VkUmVnaXN0ZXJzLAogICAgICAgICBKU1Zh
bHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShw
cm9wZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwogICAg
IGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKIApAQCAtNDkwNSw3ICs0
OTA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlB
cml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVEFkZElD
KiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwor
ICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVEFkZElD
KGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25W
YWx1ZUFkZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0
aW9uVmFsdWVBZGQ7CiAgICAgCkBAIC00OTg5LDcgKzQ5ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlVmFsdWVTdWIoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2Vt
YW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9qaXQuY29kZUJsb2Nr
KCktPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9q
aXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRv
IHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemU7CiAgICAgYXV0
byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1YjsKIApAQCAtNTU3MSw3
ICs1NTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTmVnYXRlKAogICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBV
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPnVuYXJ5
QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVROZWdJ
QyogbmVnSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsK
KyAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVROZWdJ
Qyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
QXJpdGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9w
ZXJhdGlvbkFyaXRoTmVnYXRlOwogICAgIGNvbXBpbGVNYXRoSUMobm9kZSwgbmVnSUMsIHJlcGF0
Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKQEAgLTU4MTUsNyArNTgxNSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU11bChOb2QKICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQ
cm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRNdWxJQyogbXVs
SUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBK
SVRNdWxJQyogbXVsSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRNdWxJQyhhcml0
aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVN
dWxPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZh
bHVlTXVsOwogCkBAIC0xNDc3Myw3ICsxNDc3Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBu
b2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAg
ICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNS
ZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCksIGNhbGxTaXRlSW5kZXgpOworICAgIG1f
aml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3Ms
IHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkp
LCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTYsNyArMTU2LDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpS
ZQogCiAgICAgaWYgKHZtLnNob3VsZEJ1aWxkZXJQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKSkgewog
ICAgICAgICBCMzo6UENUb09yaWdpbk1hcCBvcmlnaW5NYXAgPSBzdGF0ZS5wcm9jLT5yZWxlYXNl
UENUb09yaWdpbk1hcCgpOwotICAgICAgICBjb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFw
KG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2
bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZl
cikpOworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9
IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2
bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZl
cik7CiAgICAgfQogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gbGFiZWwg
PSBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Y8SlNFbnRyeVB0
clRhZz4oc3RhdGUucHJvYy0+Y29kZSgpLmVudHJ5cG9pbnRMYWJlbCgwKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4
LDYgKzY4LDggQEAgcHVibGljOgogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uKCkgb3Zl
cnJpZGU7CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjb21tb25EYXRhT2Zmc2V0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpJVENvZGUsIGNvbW1vbik7IH0KICAgICB2b2lkIHNocmlua1RvRml0
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIG92ZXJyaWRlOworCisgICAgUENUb0NvZGVPcmln
aW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gY29tbW9uLm1fcGNU
b0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKICAgICBERkc6OkNvbW1vbkRhdGEgY29tbW9u
OwogICAgIFZlY3RvcjxPU1JFeGl0PiBtX29zckV4aXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDE0ICs1Miw2IEBAIHZv
aWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICBncmFwaC5yZWdpc3RlckZyb3plblZhbHVlcygp
OwogCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5l
bnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7
Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRj
aEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIC8vIENyZWF0ZSB0
aGUgZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlzIGVudHJ5cG9pbnQgdG90YWxseSBk
aWZmZXJlbnRseQogICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3JlIGRvaW5nIE9TUiBl
bnRyeSBvciBub3QuCiAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw3IEBACiAjaW5jbHVkZSAiTExJbnRUaHVua3Mu
aCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJQcm9iZUNvbnRleHQu
aCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVj
dC5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlNl
dHVwVmFyYXJnc0ZyYW1lLmgiCkBAIC0yMzIwLDYgKzIzMjEsMTggQEAgcHJpdmF0ZToKICAgICAg
ICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVw
YXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwogICAgIH0KIAorICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0
eXBlPgorICAgIHN0YXRpYyBKSVRBZGRJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29t
bW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRB
ZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlw
ZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBK
SVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVE11bElDKiBhZGRN
YXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmls
ZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVE11bElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4K
KyAgICBzdGF0aWMgSklUTmVnSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwg
VW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVROZWdJQyhw
cm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUg
PSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJH
ZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVFN1YklDKiBhZGRNYXRoSUMo
REZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyBy
ZXR1cm4gY29tbW9uLmFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisKICAgICB2b2lkIGNvbXBpbGVW
YWx1ZU11bCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwpAQCAtMjM5MSw3ICsy
NDA0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dl
bmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJVFVuYXJ5TWF0aElDPEdlbmVy
YXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJp
dGhQcm9maWxlKTsKKyAgICAgICAgICAgICAgICBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBt
YXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0
aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0
b3IoSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdw
cigpKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CiAKICAgICAgICAgICAgICAgICBib29sIHNob3Vs
ZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKQEAgLTI1MDAsNyArMjUxMyw3IEBAIHByaXZhdGU6CiAj
ZW5kaWYKIAogICAgICAgICAgICAgICAgIEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+OjpjcmVhdGUoKTsK
LSAgICAgICAgICAgICAgICBKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0
LmNvZGVCbG9jaygpLT5hZGRNYXRoSUM8R2VuZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAg
ICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8
R2VuZXJhdG9yPihzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAgICAg
ICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJp
Z2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwKICAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJd
LmdwcigpKSwgcGFyYW1zLmZwU2NyYXRjaCgwKSwKICAgICAgICAgICAgICAgICAgICAgcGFyYW1z
LmZwU2NyYXRjaCgxKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CkBAIC00MzE3LDcgKzQzMzAsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogSW52YWxpZEdQ
UlJlZzsKIAogICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5l
cmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBl
OjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6
UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExK
SVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0UHJp
dmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwogCiAgICAgICAgICAg
ICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwpAQCAtMTAy
ODUsNiArMTAyOTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxsb2NhdGVkQXJnczsgKytpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQoVmFsdWVSZWNvdmVyeTo6
Y29uc3RhbnQoanNVbmRlZmluZWQoKSkpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0
YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgICAgICAgICAgc2h1
ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
OwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRD
YWxsTGlua0luZm8oc2VtYW50aWNOb2RlT3JpZ2luKTsKQEAgLTEwNDQzLDEzICsxMDQ1NywxNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChw
YXJhbXNbMSArIGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgpKTsKIAogICAgICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1BcmdzOworICAgICAgICAgICAgICAgIHNodWZm
bGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxl
ZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKIAogICAgICAgICAgICAgICAgIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8o
Y29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2Fs
bExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAg
YXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBH
UFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5v
LCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7
CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEp
LnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA3OTIsNyAr
MTA4MDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAg
ICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xv
d1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6
cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsK
KyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7
CkBAIC0xMTA3Myw3ICsxMTA4OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
aml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAg
ICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEz
LDI4ICs0MTMsMTYgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAog
CiAgICAgUmVnaXN0ZXJTZXQgYWxsRlRMQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6ZnRsQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBiYXNl
bGluZUNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMo
KTsKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogdm1DYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0
Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKLSAgICBSZWdpc3RlclNldCB2bUNhbGxl
ZVNhdmVzVG9Ta2lwID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgaWYgKGV4
aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgaml0LmxvYWRQdHIoJnZtLnRvcEVu
dHJ5RnJhbWUsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zm
c2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgfQogCiAgICAgZm9yIChSZWcgcmVnID0gUmVn
OjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKICAgICAg
ICAgaWYgKCFhbGxGVExDYWxsZWVTYXZlcy5nZXQocmVnKSkgewotICAgICAgICAgICAgaWYgKGV4
aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IXZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogICAgICAgICB1bnNpZ25lZCB1bndpbmRJbmRleCA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpLT5pbmRleE9mKHJlZyk7CiAgICAgICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZz
ZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPSBiYXNlbGluZUNhbGxlZVNhdmVzLT5maW5kKHJl
Zyk7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIHZtQ2FsbGVlU2F2ZSA9IG51bGxwdHI7IAot
ICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgICAgIHZtQ2Fs
bGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKTsKIAogICAgICAgICBpZiAocmVnLmlz
R1BSKCkpIHsKICAgICAgICAgICAgIEdQUlJlZyByZWdUb0xvYWQgPSBiYXNlbGluZVJlZ2lzdGVy
T2Zmc2V0ID8gR1BSSW5mbzo6cmVnVDAgOiByZWcuZ3ByKCk7Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZWdUb0xvYWQgIT0gR1BSSW5mbzo6cmVnVDEpOwogCiAgICAgICAgICAgICBpZiAo
dW53aW5kSW5kZXggPT0gVUlOVF9NQVgpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgRlRMIGNv
bXBpbGF0aW9uIGRpZG4ndCBwcmVzZXJ2ZSB0aGlzIHJlZ2lzdGVyLiBUaGlzIG1lYW5zIHRoYXQg
aXQgYWxzbwpAQCAtNDUyLDggKzQ0MCw2IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2
bSwgdW5zaWduZWQKIAogICAgICAgICAgICAgaWYgKGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpCiAg
ICAgICAgICAgICAgICAgaml0LnN0b3JlNjQocmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0
ZXJPZmZzZXQtPm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAodm1DYWxsZWVTYXZlICYmICF2
bUNhbGxlZVNhdmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNhdmUtPnJlZygpKSkKLSAgICAgICAgICAg
ICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBGUFJSZWcgZnBSZWdUb0xvYWQgPSBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8g
RlBSSW5mbzo6ZnBSZWdUMCA6IHJlZy5mcHIoKTsKIApAQCAtNDY0LDE5ICs0NTAsOSBAQCBzdGF0
aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkCiAKICAgICAgICAgICAgIGlmIChi
YXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQogICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShm
cFJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1l
UG9pbnRlclJlZ2lzdGVyLCBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0LT5vZmZzZXQoKSkpOwotICAg
ICAgICAgICAgaWYgKHZtQ2FsbGVlU2F2ZSAmJiAhdm1DYWxsZWVTYXZlc1RvU2tpcC5nZXQodm1D
YWxsZWVTYXZlLT5yZWcoKSkpCi0gICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKGZwUmVn
VG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVT
YXZlLT5vZmZzZXQoKSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGV4aXQuaXNFeGNl
cHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCogdm1DYWxsZWVTYXZl
ID0gdm1DYWxsZWVTYXZlcy0+ZmluZChHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7Ci0gICAg
ICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwotCi0g
ICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZpbmQoR1BSSW5mbzo6bm90Q2Vs
bE1hc2tSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om5vdENlbGxNYXNr
UmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxl
ZVNhdmUtPm9mZnNldCgpKSk7Ci0gICAgfQotCiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJl
Z2lzdGVyc0ZvckNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycygpOwogCiAgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGlu
ZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpA
QCAtNDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkKICAg
ICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZp
eCwgZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgs
IGZpZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVzLm1hcCBkbyB8ZmllbGROYW1lfAor
ICAgICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVs
ZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisgICAgICAgICAgICBlbmQuam9pbigi
XG4iKQorICAgICAgICBlbmQKKworICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZp
ZWxkcywgZmllbGROYW1lcykKICAgICAgICAgICAgIGZpZWxkcy5tYXAgZG8gfGZpZWxkLCB0eXBl
fAogICAgICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAotICAgICAgICAgICAgICAg
ICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywg
dHlwZSl9XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9u
IHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUsIGZpZWxkTmFtZXMpfVxu
I3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAi
I3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAgICAgICAg
ICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1l
cy5wdXNoKGZpZWxkTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50
b19zfSBtXyN7ZmllbGROYW1lfTsiCiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBl
bmQuam9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0Rmll
bGRzKCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkTmFtZXMgPSBbXQorICAgICAg
ICBwcmVmaXggPSAiICAgICAgICAiCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMocHJl
Zml4LCBAZmllbGRzLCBmaWVsZE5hbWVzKQorICAgICAgICBmaWVsZHMgPSBmaWVsZHMgKyAiXG4i
ICsgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCiAKICAgICAg
ICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAmJiAobm90IEBpbml0aWFs
aXplcnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsNiArMzY3LDI4
IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpsb2FkUHJvcGVydHkoR1BSUmUKICAgICAgICAgcmVz
dWx0KTsKIH0KIAordm9pZCBBc3NlbWJseUhlbHBlcnM6OnN0b3JlUHJvcGVydHkoSlNWYWx1ZVJl
Z3MgdmFsdWUsIEdQUlJlZyBvYmplY3QsIEdQUlJlZyBvZmZzZXQsIEdQUlJlZyBzY3JhdGNoKQor
eworICAgIEp1bXAgaXNJbmxpbmUgPSBicmFuY2gzMihMZXNzVGhhbiwgb2Zmc2V0LCBUcnVzdGVk
SW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
b2JqZWN0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBuZWcz
MihvZmZzZXQpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICBK
dW1wIHJlYWR5ID0ganVtcCgpOworICAgIAorICAgIGlzSW5saW5lLmxpbmsodGhpcyk7CisgICAg
YWRkUHRyKAorICAgICAgICBUcnVzdGVkSW1tMzIoCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQzMl90PihzaXplb2YoSlNPYmplY3QpKSAtCisgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oZmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMikgKiBzdGF0aWNfY2FzdDxpbnQzMl90Pihz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSksCisgICAgICAgIG9iamVjdCwgc2NyYXRjaCk7CisgICAg
CisgICAgcmVhZHkubGluayh0aGlzKTsKKyAgICAKKyAgICBzdG9yZVZhbHVlKHZhbHVlLAorICAg
ICAgICBCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKK30KKwogdm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRMb2FkU3RydWN0dXJlKFZNJiB2bSwgUmVnaXN0ZXJJRCBzb3VyY2Us
IFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogewogI2lmIFVTRShKU1ZBTFVF
NjQpCkBAIC02OTgsOCArNzIwLDEzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2Fs
bGVlU2F2ZXMKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGVtaXRWaXJ0
dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworfQorCit2b2lkIEFz
c2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChW
TSYgdm0sIENhbGxMaW5rSW5mbyogaW5mbykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5m
byksIEdQUkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFk
ZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1
dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGls
YXRpb25QdHJUYWc+KGNhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsOCArMjM0LDkg
QEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogICAgIAotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNs
b2JiZXJzIG9mZnNldC4KKyAgICAvLyBOb3RlIHRoYXQgdGhlc2UgY2xvYmJlciBvZmZzZXQuCiAg
ICAgdm9pZCBsb2FkUHJvcGVydHkoR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNldCwgSlNWYWx1
ZVJlZ3MgcmVzdWx0KTsKKyAgICB2b2lkIHN0b3JlUHJvcGVydHkoSlNWYWx1ZVJlZ3MgdmFsdWUs
IEdQUlJlZyBvYmplY3QsIEdQUlJlZyBvZmZzZXQsIEdQUlJlZyBzY3JhdGNoKTsKIAogICAgIHZv
aWQgbW92ZVZhbHVlUmVncyhKU1ZhbHVlUmVncyBzcmNSZWdzLCBKU1ZhbHVlUmVncyBkZXN0UmVn
cykKICAgICB7CkBAIC0zNzksMTUgKzM4MCwyNiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAK
KyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVu
dHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lLCBHUFJSZWcgc2NyYXRjaCkKKyAgICB7CisjaWYgTlVN
QkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCisgICAgICAgIGxvYWRQdHIoJnRvcEVu
dHJ5RnJhbWUsIHNjcmF0Y2gpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlckltcGwoc2NyYXRjaCk7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFS
QU0odG9wRW50cnlGcmFtZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKKyNlbmRp
ZgorICAgIH0KKwogICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUpCiAgICAgewogI2lmIE5VTUJFUl9P
Rl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBjb25zdCBUZW1wUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSB9OwogICAgICAgICBHUFJSZWcgdGVtcDEgPSB1c2VkUmVnaXN0ZXJzLmdldEZyZWVHUFIo
MCk7Ci0gICAgICAgIGxvYWRQdHIoJnRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKLSAgICAgICAgY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHRlbXAxKTsKKyAg
ICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodG9wRW50
cnlGcmFtZSwgdGVtcDEpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJh
bWUpOworICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7CiAjZW5kaWYKICAgICB9
CiAgICAgCkBAIC0xNzIwLDYgKzE3MzIsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHZv
aWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsK
KyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBD
YWxsTGlua0luZm8qKTsKICAgICAKICAgICB2b2lkIG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgp
OwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCYXNlbGluZUpJ
VENvZGUuaCIKKworI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5o
IgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitK
SVRBZGRJQyogTWF0aElDSG9sZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE11
bElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUU3ViSUMq
IE1hdGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVROZWdJQyogTWF0
aElDSG9sZGVyOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7
IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorCit2b2lkIE1hdGhJQ0hvbGRl
cjo6YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCit7CisgICAgbV9hZGRJQ3MgPSBX
VEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICBtX211bElDcyA9IFdURk1vdmUob3RoZXIubV9t
dWxJQ3MpOworICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAgbV9z
dWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKK30KKworQmFzZWxpbmVKSVRDb2RlOjpC
YXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNv
ZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgLCBNYXRoSUNI
b2xkZXIoKQoreyB9CisKK0Jhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSgpCit7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9C
YXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisj
aW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQmluYXJ5
QXJpdGhQcm9maWxlOworY2xhc3MgVW5hcnlBcml0aFByb2ZpbGU7CitzdHJ1Y3QgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBTaW1wbGVKdW1wVGFibGU7CitzdHJ1Y3QgU3RyaW5n
SnVtcFRhYmxlOworCitjbGFzcyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIHZvaWQgYWRv
cHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpOworICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmluYXJ5
QXJpdGhQcm9maWxlKik7CisgICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJv
ZmlsZSopOworICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwor
Citwcml2YXRlOgorICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFnPEpJVE11bElD
PiBtX211bElDczsKKyAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJhZzxKSVRTdWJJ
Qz4gbV9zdWJJQ3M7Cit9OworCitjbGFzcyBKSVRDb25zdGFudFBvb2wgeworcHVibGljOgorICAg
IHVzaW5nIENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50
OF90IHsKKyAgICAgICAgR2xvYmFsT2JqZWN0LAorICAgICAgICBDYWxsTGlua0luZm8sCisgICAg
ICAgIFN0cnVjdHVyZVN0dWJJbmZvLAorICAgICAgICBGdW5jdGlvbkRlY2wsCisgICAgICAgIEZ1
bmN0aW9uRXhwciwKKyAgICB9OworCisgICAgc3RydWN0IFZhbHVlIHsKKyAgICAgICAgVHlwZSB0
eXBlOworICAgICAgICBQYWNrZWRQdHI8dm9pZD4gcGF5bG9hZDsKKyAgICB9OworCisgICAgSklU
Q29uc3RhbnRQb29sKCkgPSBkZWZhdWx0OworICAgIEpJVENvbnN0YW50UG9vbChKSVRDb25zdGFu
dFBvb2wmJikgPSBkZWZhdWx0OworICAgIEpJVENvbnN0YW50UG9vbCYgb3BlcmF0b3I9KEpJVENv
bnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBDb25zdGFudCBhZGQoVHlwZSB0eXBlLCB2
b2lkKiBwYXlsb2FkID0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9
IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFudHMuYXBwZW5kKFZhbHVlIHsg
dHlwZSwgcGF5bG9hZCB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzLnNpemUoKTsgfQorICAgIFZh
bHVlIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpXTsgfQorCitwcml2
YXRlOgorICAgIFZlY3RvcjxWYWx1ZT4gbV9jb25zdGFudHM7Cit9OworCisKK2NsYXNzIEJhc2Vs
aW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsK
K3B1YmxpYzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2Rl
LCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKTsKKyAgICB+QmFzZWxpbmVK
SVRDb2RlKCkgb3ZlcnJpZGU7CisgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2lu
TWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQorCisg
ICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgQmFnPENh
bGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVK
dW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1w
VGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAgICBKSVRDb2RlTWFwIG1faml0Q29k
ZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOworICAgIGJvb2wg
bV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkocmV2aXNp
b24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHNpemVfdCBCYXNlbGluZUpJVFBs
YW46OmNvZGVTaXplKCkgY29uc3QKIAogQ29tcGlsYXRpb25SZXN1bHQgQmFzZWxpbmVKSVRQbGFu
OjpmaW5hbGl6ZSgpCiB7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmlu
YWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2pp
dC5maW5hbGl6ZU9uTWFpblRocmVhZChtX2NvZGVCbG9jayk7CiAgICAgc3dpdGNoIChyZXN1bHQp
IHsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VW
RU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQi
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVy
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJz
Ojpsb2dTaGFkb3dDaGlja2VuUHJvbG8KICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkp
OwogfQogCi12b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BS
UmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBz
dG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwotICAgIHN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkp
LCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgY2FsbGVlKSkpOwotICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93
UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUp
KSk7Ci0gICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKLSAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKGNvZGVCbG9jayksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7Ci0gICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKLX0K
LQogdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBH
UFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3Jh
dGNoMikKIHsKICAgICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hp
Y2tlbigpOwpAQCAtNzIsNiArNjIsMjggQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRv
d0NoaWNrZW5QYQogICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJn
R1BSKSk7CiB9CiAKKwordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cit2b2lkIEND
YWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUg
Y29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgc3RvcmVQdHIo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKKyAgICBzdG9yZVB0cihU
cnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNh
bGxlZSkpKTsKKyAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwg
T0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOworICAg
IHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CisgICAgc3RvcmVQdHIoY29kZUJsb2NrLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgY29kZUJsb2NrKSkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXgu
Yml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjps
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVn
cyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0
SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUlu
ZGV4KTsKK30KKwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0
KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUs
IEdQUlJlZyBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBs
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2Nv
cGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKIHZvaWQgQ0NhbGxIZWxwZXJzOjpl
bWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdo
ZXJlLCBTY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNo
YXIqIGRlc2NyaXB0aW9uKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg0MCw3ICs4NDAsMTQgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJl
ciBhbGwgdm9sYXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20g
b24gdGhlIHRvcCBvZgogICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgog
ICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNr
ZXQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdz
LCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworCitwcml2YXRlOgor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHZvaWQgbG9nU2hhZG93
Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRo
aXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgpOworcHVibGljOgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJl
ZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleCk7CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93
UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJs
b2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworCiAgICAgLy8gTGVhdmVzIGJlaGlu
ZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFj
a2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFk
b3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
RGF0YS5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxs
ZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayogY29kZUJsb2NrKQogeworICAgIHNldHVwQ2FsbGVl
U2F2ZVJlZ2lzdGVycyhjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK3Zv
aWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zKQorewogICAgIFJlZ2lz
dGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMgeyBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVn
aXN0ZXJzKCkgfTsKLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZl
TG9jYXRpb25zID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSB7IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+
YXQoaSkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVEYXRhLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQz
LDEzIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJnczsKICAgICB1bnNp
Z25lZCBudW1Mb2NhbHMgeyBVSU5UX01BWCB9OwogICAgIHVuc2lnbmVkIG51bVBhc3NlZEFyZ3Mg
eyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OyAv
LyBPbiBvdXIgbWFjaGluZSBmcmFtZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVy
TWFwPFZhbHVlUmVjb3Zlcnk+IHJlZ2lzdGVyczsKICAgICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0
ZXIgeyBJbnZhbGlkR1BSUmVnIH07CiAKICAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVy
cyhDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCopOwogI2VuZGlmCiAgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7
CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
Zmxlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAg
Q2FsbEZyYW1lU2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYQogICAgIDogbV9qaXQoaml0
KQogICAgICwgbV9vbGRGcmFtZShkYXRhLm51bUxvY2FscyArIENhbGxlckZyYW1lQW5kUEM6OnNp
emVJblJlZ2lzdGVycywgbnVsbHB0cikKICAgICAsIG1fbmV3RnJhbWUoZGF0YS5hcmdzLnNpemUo
KSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQotICAgICwgbV9h
bGlnbmVkT2xkRnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCi0gICAg
ICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGppdC5jb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpKSkKKyAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVycyArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRh
Lm51bVBhcmFtZXRlcnMpKQogICAgICwgbV9hbGlnbmVkTmV3RnJhbWVTaXplKENhbGxGcmFtZTo6
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCiAgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGln
bkZyYW1lKGRhdGEuYXJncy5zaXplKCkpKQogICAgICwgbV9mcmFtZURlbHRhKG1fYWxpZ25lZE5l
d0ZyYW1lU2l6ZSAtIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSkKICAgICAsIG1fbG9ja2VkUmVnaXN0
ZXJzKFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKSkKICAgICAsIG1fbnVtUGFzc2VkQXJncyhk
YXRhLm51bVBhc3NlZEFyZ3MpCisgICAgLCBtX251bVBhcmFtZXRlcnMoZGF0YS5udW1QYXJhbWV0
ZXJzKQogewogICAgIC8vIFdlIGFyZSBhbGxvd2VkIGFsbCB0aGUgdXN1YWwgcmVnaXN0ZXJzLi4u
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsg
KQpAQCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JU
YWlsQ2EKICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQp
LCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYXJndW1lbnRDb3Vu
dE9LID0KICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVh
bCwgbV9uZXdGcmFtZUJhc2UsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpKTsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9udW1QYXJhbWV0ZXJzKSk7CiAgICAgbV9qaXQu
YWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudFJlZ2lzdGVy
cygpIC0gMSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwgbV9uZXdGcmFtZUJh
c2UpOwogICAgIG1faml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNr
QWxpZ25tZW50UmVnaXN0ZXJzKCkpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9qaXQubXVsMzIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFt
ZUJhc2UsIG1fbmV3RnJhbWVCYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0
LDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgZGF0YTsK
ICAgICAgICAgZGF0YS5udW1Mb2NhbHMgPSBudW1Mb2NhbHMoKTsKICAgICAgICAgZGF0YS5udW1Q
YXNzZWRBcmdzID0gbV9udW1QYXNzZWRBcmdzOworICAgICAgICBkYXRhLm51bVBhcmFtZXRlcnMg
PSBtX251bVBhcmFtZXRlcnM7CiAgICAgICAgIGRhdGEuY2FsbGVlID0gZ2V0TmV3KFZpcnR1YWxS
ZWdpc3RlciB7IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSB9KS0+cmVjb3ZlcnkoKTsKICAgICAgICAg
ZGF0YS5hcmdzLnJlc2l6ZShhcmdDb3VudCgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhcmdDb3VudCgpOyArK2kpCkBAIC03OTgsNiArNzk5LDcgQEAgcHJpdmF0ZToKICAgICBi
b29sIHBlcmZvcm1TYWZlV3JpdGVzKCk7CiAgICAgCiAgICAgdW5zaWduZWQgbV9udW1QYXNzZWRB
cmdzIHsgVUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBtX251bVBhcmFtZXRlcnMgeyBVSU5UX01B
WCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQYXRjaENhbGxC
eVJldHVybkFkZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAg
OiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpTSW50ZXJmYWNlSklUKCZ2
bSwgbnVsbHB0cikKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBt
X2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDAp
CiAgICAgLCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAgLTc3LDYgKzc3LDkgQEAg
SklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRF
bWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25zdGFudCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7
CisgICAgbV9wcm9maWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICBtX3VubGlua2VkQ29k
ZUJsb2NrID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogfQogCiBKSVQ6On5KSVQo
KQpAQCAtOTAsOCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2so
KQogICAgICAgICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0gICAgCi0g
ICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihP
cHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRk
cmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
IHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0
aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1Qw
LCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBBU1NFUlQo
IW1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxl
ZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCkudG9wRW50cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNiwyMCBAQCB2b2lkIEpJVDo6ZW1pdE5v
dGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBw
b2ludGVyVG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcg
cG9pbnRlclRvU2V0KQogeworICAgIGF1dG8gb2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBvaW50
ZXJUb1NldCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2lu
dGVyVG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOworICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0
VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hH
UFIpCiB7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT52YXJSZWFkT25seVdhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0z
MihJc0ludmFsaWRhdGVkKSkpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwg
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
c2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5
V2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChF
cXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjph
c3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQpAQCAtMTI5LDcgKzEzNyw3IEBAIHZvaWQgSklUOjph
c3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3RlciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7
CkBAIC0xODEsNjEgKzE4OSw0NCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJ
bnN0cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRD
b2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsK
KyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUs
IHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0
T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFi
bGUgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJh
cmVEYXRhVGFnKSwgcmVzdWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0Zv
ckNvbnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkp
LCByZXN1bHQpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRv
Q2FsbEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworI2lm
IEFTU0VSVF9FTkFCTEVECisgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgp
IHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+
Y29kZUJsb2NrKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICB9KTsKKyNlbmRpZgorfQorCiB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQotICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsK
KyAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4i
KTsKICAgICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3Vt
ZW50Q291bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3Ry
dWN0aW9uQ291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7
CiAKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJs
b2NrLT52bSgpOwogICAgIEJ5dGVjb2RlSW5kZXggc3RhcnRCeXRlY29kZUluZGV4KDApOwotICAg
IGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1fY29kZUJsb2NrLT5pbmhlcml0
czxQcm9ncmFtQ29kZUJsb2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmluaGVyaXRzPE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2s+KHZtKSkpIHsKLSAgICAgICAgLy8gV2UgY2FuIG9ubHkgZG8gdGhpcyBv
cHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2RlQmxvY2sncyBleGFjdGx5
IG9uY2UuCi0gICAgICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxkIGJlIGludmFsaWQgb3Ro
ZXJ3aXNlLiBXaGVuIHRoZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRzIHRvCi0gICAgICAgIC8v
IGRvIE9TUiBlbnRyeSBpbnRvIHRoZSBiYXNlbGluZSBKSVQgaW4gYSBsb29wLCBpdCB3aWxsIHBh
c3MgaW4gdGhlIGJ5dGVjb2RlIG9mZnNldCBpdAotICAgICAgICAvLyB3YXMgZXhlY3V0aW5nIGF0
IHdoZW4gaXQga2lja2VkIG9mZiBvdXIgY29tcGlsYXRpb24uIFdlIG9ubHkgbmVlZCB0byBjb21w
aWxlIGNvZGUgZm9yCi0gICAgICAgIC8vIGFueXRoaW5nIHJlYWNoYWJsZSBmcm9tIHRoYXQgYnl0
ZWNvZGUgb2Zmc2V0LgotCi0gICAgICAgIC8vIFdlIG9ubHkgYm90aGVyIGJ1aWxkaW5nIHRoZSBi
eXRlY29kZSBncmFwaCBpZiBpdCBjb3VsZCBzYXZlIHRpbWUgYW5kIGV4ZWN1dGFibGUKLSAgICAg
ICAgLy8gbWVtb3J5LiBXZSBwaWNrIGFuIGFyYml0cmFyeSBvZmZzZXQgd2hlcmUgd2UgZGVlbSB0
aGlzIGlzIHByb2ZpdGFibGUuCi0gICAgICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkgPj0gMjAwKSB7Ci0gICAgICAgICAgICAvLyBBcyBhIHNpbXBsaWZpY2F0aW9u
LCB3ZSBkb24ndCBmaW5kIGFsbCBieXRlY29kZSByYW5nZXMgdGhhdCBhcmUgdW5yZWFjaGFibGUu
Ci0gICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGZpbmQgdGhlIG1pbmltdW0gYnl0ZWNv
ZGUgb2Zmc2V0IHRoYXQgaXMgcmVhY2hhYmxlLCBhbmQKLSAgICAgICAgICAgIC8vIGNvbXBpbGUg
Y29kZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0IG9ud2FyZHMuCi0KLSAgICAgICAgICAgIEJ5
dGVjb2RlR3JhcGggZ3JhcGgobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KSk7Ci0gICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmluZEJh
c2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2spOwotCi0gICAgICAgICAg
ICBHcmFwaE5vZGVXb3JrbGlzdDxCeXRlY29kZUJhc2ljQmxvY2sqPiB3b3JrbGlzdDsKLSAgICAg
ICAgICAgIHN0YXJ0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAg
IHdvcmtsaXN0LnB1c2goYmxvY2spOwotCi0gICAgICAgICAgICB3aGlsZSAoQnl0ZWNvZGVCYXNp
Y0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRC
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChzdGQ6Om1pbihzdGFydEJ5dGVjb2RlSW5kZXgu
b2Zmc2V0KCksIGJsb2NrLT5sZWFkZXJPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgc3VjY2Vzc29ySW5kZXggOiBibG9jay0+c3VjY2Vzc29ycygpKQotICAgICAgICAg
ICAgICAgICAgICB3b3JrbGlzdC5wdXNoKCZncmFwaFtzdWNjZXNzb3JJbmRleF0pOwotCi0gICAg
ICAgICAgICAgICAgLy8gQWxzbyBhZGQgY2F0Y2ggYmxvY2tzIGZvciBieXRlY29kZXMgdGhhdCB0
aHJvdy4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9u
SGFuZGxlcnMoKSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gYmxvY2stPmxlYWRlck9mZnNldCgpOyBieXRlY29kZU9mZnNldCA8IGJsb2NrLT5s
ZWFkZXJPZmZzZXQoKSArIGJsb2NrLT50b3RhbExlbmd0aCgpOykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZU9mZnNl
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogaGFuZGxlciA9IG1fY29kZUJs
b2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChncmFwaC5maW5k
QmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoaGFuZGxlci0+dGFyZ2V0KSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7
CiAgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKQEAgLTI3OCw4ICsyNjksOCBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7Ci0gICAgICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJv
YmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdICIsIG9w
Y29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAi
LCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTUyNyw3ICs1MTgs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIEJ5dGVj
b2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAotICAgICAgICBjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5h
dChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICAKICAgICAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJCYXNlbGluZSBKSVQgZW1pdHRp
bmcgc2xvdyBjb2RlIGZvciAiLCBtX2J5dGVjb2RlSW5kZXgsICIgYXQgb2Zmc2V0ICIsIChsb25n
KWRlYnVnT2Zmc2V0KCkpOwpAQCAtNTQ1LDggKzUzNiw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFz
ZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9i
ZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSBTTE9XICIsIG9wY29kZU5hbWVzW29w
Y29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2sp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTYwMyw3ICs1OTQsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV9pZCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikKLSNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX2dldF9mcm9tX3Njb3BlKQogI2VuZGlmCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9wdXRfdG9fc2NvcGUpCkBAIC02NzQsNTUgKzY2NSw1NSBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKK3ZvaWQgSklUOjplbWl0TWF0ZXJpYWxp
emVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpCit7CisgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21ldGFk
YXRhR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZK
SVREYXRhKCkpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
OkpJVERhdGE6Om9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7Cit9
CisKK3ZvaWQgSklUOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCkKK3sKKyAgICBCYXNlOjplbWl0
UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dp
dGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBERkc6
OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsK
KyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmNh
cGFiaWxpdHlMZXZlbCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIERGRzo6Q2Fu
bm90Q29tcGlsZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBt
X2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFBy
b2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGls
ZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5CZU9w
dGltaXplZCA9IHRydWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVl
OwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChtX2NvZGVCbG9jay0+Y29kZVR5
cGUoKSkgewotICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICBjYXNlIE1vZHVsZUNvZGU6Ci0gICAg
Y2FzZSBFdmFsQ29kZToKLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxp
bmVkID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAg
ICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2Ug
ZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCi0gICAgICAgIC8vIERvbid0IG92ZXJyaWRl
IHRoYXQgb2JzZXJ2YXRpb24uCi0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0Jl
SW5saW5lZCAmPSBjYW5JbmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbiht
X2NvZGVCbG9jayk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICAgIGlmIChtX2NvZGVCbG9j
ay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX2NvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgewotICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAobV9j
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAg
ICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9
IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGVzKCkpOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9m
VW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9j
ay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVk
VmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51
bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAgICAgaWYgKG1f
dW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCisg
ICAgICAgICAgICBtX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFi
bGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVz
KCkpOworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0
cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRh
YmxlcyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+
bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CiAgICAgfQogCi0gICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVy
KCkpKSkKLSAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxl
cj4obV9jb2RlQmxvY2spOworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1i
bHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2Vt
YmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IGJ1aWxkIGEg
ZGlzYXNzZW1ibGVyIG9mZiBvZiBVbmxpbmtlZENvZGVCbG9jay4KKyAgICAgICAgbV9kaXNhc3Nl
bWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9wcm9maWxlZENvZGVCbG9jayk7
CisgICAgfQogICAgIGlmIChVTkxJS0VMWShtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpKSB7
CisgICAgICAgIC8vIEZJWE1FOiBidWlsZCBwcm9maWxlciBkaXNhc3NlbWJsZXIgb2ZmIFVubGlu
a2VkQ29kZUJsb2NrLgogICAgICAgICBtX2NvbXBpbGF0aW9uID0gYWRvcHRSZWYoCiAgICAgICAg
ICAgICBuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKAotICAgICAgICAgICAgICAgIG1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fY29kZUJsb2NrKSwKKyAg
ICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rl
c0ZvcihtX3Byb2ZpbGVkQ29kZUJsb2NrKSwKICAgICAgICAgICAgICAgICBQcm9maWxlcjo6QmFz
ZWxpbmUpKTsKLSAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1f
dm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOworICAgICAgICBtX2NvbXBp
bGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgo
MCkpKTsKQEAgLTc0MiwxMSArNzMzLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhv
dXRGaW5hbGl6aW4KICAgICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgp
OwotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9
PSBGdW5jdGlvbkNvZGUpCisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1
ZSgpOwogCiAgICAgTGFiZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAotICAgIGludCBmcmFtZVRvcE9m
ZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpOworICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3Vu
bGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJh
bWVTaXplID0gLWZyYW1lVG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVU
b3BPZmZzZXQpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwogICAgIEp1bXBMaXN0IHN0YWNr
T3ZlcmZsb3c7CkBAIC03NTcsMTYgKzc0OSwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtX
aXRob3V0RmluYWxpemluCiAgICAgbW92ZShyZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBlbWl0U2F2ZUNhbGxlZVNh
dmVzKCk7CisgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRNYXRlcmlhbGl6
ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25z
dGFudFBvb2xSZWdpc3RlcnMoKTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9
PSBGdW5jdGlvbkNvZGUpIHsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUo
KSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwot
ICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYg
KCFtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwgbV91bmxpbmtlZENvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpID4gMSkpIHsKKyAgICAgICAgICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDIpOworICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRW
YWx1ZVByb2ZpbGVzKCkgKyBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+OjpvZmZzZXRPZlN0b3Jh
Z2UoKSksIHJlZ1QyKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3Vt
ZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVu
IHdlIHdhbnQgdG8gcHV0IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCiAgICAgICAgICAg
ICAgICAgLy8ga2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHdh
bnQgdG8gcmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2Rl
QmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCisgICAgICAgICAgICAgICAgaWYg
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBD
YWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC03Nzcs
MTIgKzc3MywxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAg
ICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVS
ZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykp
LCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3Vt
ZW50KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdz
LCBBZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpICsgVmFsdWVQ
cm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KICAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2Rl
QmxvY2stPmppdFR5cGUoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVCht
X3Byb2ZpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXpl
TWFya2VyKSkKICAgICAgICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92
ZSgqc2l6ZU1hcmtlciksICp0aGlzKTsKQEAgLTc5OSwyNCArNzk1LDI3IEBAIHZvaWQgSklUOjpj
b21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNhbGxP
cGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0
YWNrT3ZlcmZsb3dFcnJvciwgbV9jb2RlQmxvY2spOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDApOworICAgIGNhbGxPcGVy
YXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNr
T3ZlcmZsb3dFcnJvciwgcmVnVDApOwogCiAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBwYXJhbWV0
ZXJzIGlzIDEsIHdlIG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCi0gICAgYm9vbCByZXF1aXJl
c0FyaXR5Rml4dXAgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7Ci0gICAgaWYg
KG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5
Rml4dXApIHsKKyAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSAhPSAxOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5j
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKICAgICAg
ICAgbV9hcml0eUNoZWNrID0gbGFiZWwoKTsKLSAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigw
KSwgJm1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7CisKICAgICAgICAgZW1p
dEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1f
Y29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICBlbWl0UHV0Q29k
ZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUocmVnVDApOworICAgICAgICBzdG9yZTgoVHJ1c3RlZElt
bTMyKDApLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxkQWx3YXlzQmVJ
bmxpbmVkKCkpKTsKIAogICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QxKTsKLSAgICAgICAgYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRl
cnMpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CisgICAgICAgIGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAKICAgICAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKIAogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2Fz
dDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4
Y2VwdGlvbihtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0
QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX3VubGlua2VkQ29kZUJsb2NrLT5p
c0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9u
Q2FsbEFyaXR5Q2hlY2ssIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAg
IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRo
aXMpOwpAQCAtODM5LDcgKzgzOCw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRG
aW5hbGl6aW4KICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsK
ICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKLSAgICBtX2xpbmtC
dWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMs
IG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7
CisgICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5r
QnVmZmVyKCp0aGlzLCBtX3VubGlua2VkQ29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpC
YXNlbGluZUpJVCwgZWZmb3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04NTgsOCArODU3LDgg
QEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAg
ICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVj
b3JkOjpDaGFyYWN0ZXI6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBj
b25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRD
b2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAg
ICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsg
cmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7
IGogPCB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewogICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRz
W2pdOwpAQCAtODcxLDggKzg3MCw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbnN0IFVu
bGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU3RyaW5n
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAg
ICAgICAgIGF1dG8gY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQ
dHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsK
ICAgICAgICAgICAgIGZvciAoYXV0byYgbG9jYXRpb24gOiB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0
VGFibGUudmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsb2Nh
dGlvbi5tX2JyYW5jaE9mZnNldDsKQEAgLTkwNiwzMiArOTA1LDM1IEBAIHZvaWQgSklUOjpsaW5r
KCkKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIHJlY29yZC5jYWxs
ZWUpOwogICAgIH0KIAotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHMsIHBhdGNo
QnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZm
ZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hC
dWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIHBhdGNoQnVmZmVy
KTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwot
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1faW5CeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2luc3RhbmNlT2ZzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNo
ZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOworICAgIGF1dG8gZmluYWxp
emVJQ3MgPSBbJl0gKGF1dG8mIGdlbmVyYXRvcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBnZW4g
OiBnZW5lcmF0b3JzKSB7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFy
dCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0
YXJ0KTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1fZG9uZSk7Cisg
ICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24g
PSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zbG93
UGF0aEJlZ2luKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5
SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9n
ZXRCeUlkc1dpdGhUaGlzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX3B1dEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeUlkcyk7CisgICAg
ZmluYWxpemVJQ3MobV9kZWxCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeUlkcyk7Cisg
ICAgZmluYWxpemVJQ3MobV9pbkJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9m
cyk7CisgICAgZmluYWxpemVJQ3MobV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7CiAKICAgICBmb3Ig
KGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewotICAgICAg
ICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAg
ICAgICAgaW5mby5zZXRDb2RlTG9jYXRpb25zKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCks
Ci0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNv
bXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pKTsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0lu
Zm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAg
ICBpbmZvLmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0
clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbik7CiAgICAgfQogCi0gICAgewotICAg
ICAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6
ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNv
ZGVPZmZzZXRdLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBw
ZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
PEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAgICB9Ci0g
ICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVyLmZpbmFs
aXplKCkpOworICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOworICAgIGZv
ciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxz
LnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNv
ZGVPZmZzZXRdLmlzU2V0KCkpCisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQo
Qnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNF
bnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDI2ICs5NDIs
MzggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShtX2NvbXBp
bGF0aW9uKSkgeworICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIG1ha2UgdGhlIGJ5dGVjb2Rl
IHByb2ZpbGVyIGtub3cgYWJvdXQgVW5saW5rZWRDb2RlQmxvY2s/CiAgICAgICAgIGlmIChPcHRp
b25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkKICAgICAgICAgICAgIG1fZGlz
YXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fY29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVm
ZmVyKTsKLSAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlv
bihtX2NvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOworICAgICAgICBtX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcHJvZmlsZWRDb2RlQmxvY2ssICptX2NvbXBp
bGF0aW9uKTsKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlk
QnVpbGRNYXBwaW5nKCkpCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVl
PFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwg
cGF0Y2hCdWZmZXIpOwogICAgIAorICAgIC8vIEZJWE1FOiBNYWtlIGEgdmVyc2lvbiBvZiBDb2Rl
QmxvY2tXaXRoSklUVHlwZSB0aGF0IGtub3dzIGFib3V0IFVubGlua2VkQ29kZUJsb2NrLgogICAg
IENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAg
cGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBm
b3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZv
ciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3Byb2ZpbGVkQ29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29kZSA9IGFk
b3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgQmFzZWxpbmVK
SVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2spKTsKKworICAgIG1faml0Q29kZS0+bV91bmxp
bmtlZENhbGxzID0gV1RGTW92ZShtX3VubGlua2VkQ2FsbHMpOworICAgIG1faml0Q29kZS0+bV9l
dmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7CisgICAgbV9q
aXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0gV1RGTW92ZShtX3VubGlua2VkU3R1YkluZm9z
KTsKKyAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zd2l0Y2hK
dW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdU
Rk1vdmUobV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1faml0Q29k
ZU1hcCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCk7CisgICAgbV9qaXRDb2RlLT5hZG9w
dE1hdGhJQ3MobV9tYXRoSUNzKTsKKyAgICBtX2ppdENvZGUtPm1fY29uc3RhbnRQb29sID0gV1RG
TW92ZShtX2NvbnN0YW50UG9vbCk7CisgICAgbV9qaXRDb2RlLT5tX2lzU2hhcmVhYmxlID0gbV9p
c1NoYXJlYWJsZTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0
YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVC
bG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCBy
ZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKKyAgICAgICAg
ZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX3Vu
bGlua2VkQ29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFn
Z2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkp
OwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKCkKK0Nv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAK
QEAgLTk2OCwyNSArOTgyLDE0IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1h
aW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tz
KCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENv
ZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyAr
K2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0
aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMx
OD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFw
KCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4oKTsKLSAgICB9Ci0KICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkK
LSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1Rv
Q29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX2ppdENvZGUtPm1fcGNUb0NvZGVPcmlnaW5NYXAg
PSBXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApOwogCiAgICAgbV92bS0+bWFjaGluZUNvZGVC
eXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0YXRpY19j
YXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAgICAgICAgc3RhdGljX2Nhc3Q8ZG91
YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CisgICAgICAgIHN0YXRpY19j
YXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CiAK
LSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShtX2ppdENvZGUu
cmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwog
fQpAQCAtOTk4LDExICsxMDAxLDExIEBAIHNpemVfdCBKSVQ6OmNvZGVTaXplKCkgY29uc3QKICAg
ICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJ
VDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVm
b3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoZWZmb3J0
KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICByZXR1cm4gZmluYWxp
emVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
RXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxOCArMTA0NSwyOCBAQCB2b2lkIEpJVDo6ZG9N
YWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxv
ZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0
aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVC
bG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5s
aW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpID09IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Y29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAogICAgIHJldHVybiByb3VuZExvY2Fs
UmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChjb2RlQmxvY2stPm51bUNhbGxlZUxv
Y2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9CiAK
LWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vu
c2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQor
eworICAgIHJldHVybiBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENv
ZGVCbG9jaygpKTsKK30KKworaW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2Vk
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2spIC0gMSkub2Zmc2V0KCk7CiB9CiAK
K2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sK
KyAgICByZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2Rl
QmxvY2soKSk7Cit9CisKIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gSklUOjpjb21waWxlVGlt
ZVN0YXRzKCkKIHsKICAgICBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IHJlc3VsdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogCiAj
ZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwgZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01F
U1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9mZnNldCBcIiVzXCIgc2hvdWxkIGJlICVk
LCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19jYXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0
aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5j
bHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCkBAIC00NCw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSklU
TWF0aElDLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUg
IkpTSW50ZXJmYWNlSklULmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiUENU
b0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCiAjaW5jbHVkZSA8
d3RmL1VuaXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsxNTEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25JbmZvIHsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBkb25lTG9jYXRpb247Ci0gICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwor
ICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRDYWxsTGlua0luZm87CisgICAg
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQ7CiAgICAg
fTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQ
dHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCi0g
ICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklU
IHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHB1YmxpYyBKU0ludGVyZmFj
ZUpJVCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFRodW5rczsK
QEAgLTE3MSw2ICsxNzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gd2lsbCBjb21w
cmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBh
dGNoZWQgb2Zmc2V0LgogICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWRE
ZWZhdWx0T2Zmc2V0ID0gMjU2OwogCisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJ
VDsKKwogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIs
IEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4
KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMTc4LDI4ICsxODIsMzMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6dm0oKTsgfQog
CiAgICAgICAgIHZvaWQgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxh
dGlvbkVmZm9ydCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWluVGhy
ZWFkKCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFkKENv
ZGVCbG9jayopOwogICAgICAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdDsKIAogICAgICAgICB2
b2lkIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgICAgICAKICAg
ICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUo
ZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVP
ZmZzZXQpLnByaXZhdGVDb21waWxlKGNvZGVCbG9jaywgZWZmb3J0KTsKICAgICAgICAgfQogCisg
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2Rl
QmxvY2sqKTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihD
b2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5s
aW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRG
b3IoQ29kZUJsb2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEhhc2hN
YXA8Q1N0cmluZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0cygpOwogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBpbGVUaW1lKCk7CiAKKyAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0YUdQUiA9IExMSW50OjpSZWdpc3RlcnM6
Om1ldGFkYXRhVGFibGVHUFI7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfY29u
c3RhbnRzR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFI7CisKICAgICBwcml2YXRlOgogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKICAgICAgICAgdm9pZCBwcml2YXRl
Q29tcGlsZUxpbmtQYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KTsKICAgICAgICAgdm9pZCBsaW5rKCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZh
dGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1
bHQgcHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCiAg
ICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0
aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2ICsyMzIsMzIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZT4KKyAgICAgICAgdm9pZCBsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwg
c2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwg
c2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBz
aXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1
ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEo
VmFsdWVUeXBlLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZTMyVG9NZXRhZGF0
YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisK
KyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50
SW5kZXgsIEdQUlJlZyk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBsb2FkR2xvYmFsT2Jq
ZWN0KEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxS
ZWdpc3RlciwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1l
SW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOworCiAgICAgICAgIHZvaWQgZXhjZXB0
aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2V4
Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7CkBAIC0yNTgsMTYgKzI5MywxNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAg
IE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2Nv
bnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExp
bmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAg
ICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09
IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwg
Q2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKIAog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgYm9vbCBjb21waWxlVGFpbENh
bGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7
CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlu
a0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBp
bGVDYWxsRXZhbChjb25zdCBPcCYpOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwpAQCAtMjg3LDE0ICszMjIsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAg
ICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcik7CisgICAgICAgIHZvaWQg
ZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpOwogCiAgICAgICAgIC8vIFRoaXMgYXNzdW1l
cyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJlZ1QwIGFuZCB0aGF0IHJlZ1QzIGlz
IGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4KICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVn
KTsKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpT
VmFsdWVSZWdzKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJlZyk7Ci0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEm
LCBKU1ZhbHVlUmVncyk7CisgICAgICAgIC8vdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYsIEdQUlJlZyk7CisgICAgICAgIC8vdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYs
IEdQUlJlZyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1ZhbHVlUmVncyk7CiAjZWxzZQog
ICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1
ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOwpAQCAtMzA1LDggKzM0MSwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Nh
bWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1
ZSwgdm9pZD4KICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUo
T3AgYnl0ZWNvZGUpOwogCi0gICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3JhdGNo
R1BSKTsKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0
ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2
b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lz
dGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBS
ZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01OTMsNyArNjMxLDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hp
bnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwpAQCAtNjExLDcgKzY0OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICNlbmRpZgogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNywxNCArNjY0LDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAg
ICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlKTsK
LSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNj
ZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFj
Y2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lk
IGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJ
bnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVj
ayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgZW1pdFZhclJl
YWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9p
ZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7CiAg
ICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAt
NjQ2LDcgKzY4Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1p
dEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7
CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAg
dm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZvaWQg
ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAgICAg
dm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZh
cmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZh
cihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NSw2ICs2OTIsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChW
aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxS
ZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdp
c3Rlcik7CkBAIC02NzYsMTMgKzcxNCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlf
aWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcihWTSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X3By
aXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0
b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNs
b3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVy
YXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfaGFu
ZGxlckdlbmVyYXRvcihWTSYpOwpAQCAtNjk2LDMyICs3MzIsMTYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7
CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihy
ZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0m
KTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZST01fU0NPUEVf
R0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0
RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1vZHVs
ZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4gdXNl
IGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3ZSBk
b24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAgICAgICAgICAg
cmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JFU09MVkVfU0NP
UEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMj
R2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX1JF
U09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5F
UkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdl
bmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtO
YW1lKTsKLQogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0m
KTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCisgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGVHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJik7Cisg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVy
YXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBj
b25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mLCBzdGQ6
Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKwogICAgICAg
ICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207CkBAIC03NjAsMTAg
Kzc4MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdm9p
ZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChBZGRyZXNzLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRh
dGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIEFkZHJl
c3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBC
eXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQp
OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0
IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdz
PgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+
OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIxLDIwICs4NDEsMjAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkpOwogICAgICAgICB9
CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlv
blR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVj
b2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBz
dGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQs
IE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
TWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAg
ICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShieXRl
Y29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lIEJ5
dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0
aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0gICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgdGFyZ2V0LCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgdGFyZ2V0LCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5cGU+KHRhcmdldCwg
YXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRkcmVzcyhHUFJJbmZvOjpu
b25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5
dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1
bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlw
ZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOSwyNSArOTM5LDIwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7
IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRP
cklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAgICAg
IGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGlu
ZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBmYWxz
ZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJl
ZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFsbCBj
b2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsg
cmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGVtaXRNYXRlcmlhbGl6ZU1l
dGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgdm9pZCBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRp
bWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0
YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNpc3RlbnQg
YWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMu
Ci0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJl
YWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZv
KE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotICAg
ICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAog
ICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtOTY0LDkgKzk3OSw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2Fz
ZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKLSAgICAgICAg
SGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7Ci0gICAgICAg
IEhhc2hNYXA8dWludDY0X3QsIEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9jb3BpZWRBcml0aFByb2Zp
bGVzOwotCiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwogICAgICAgICBKdW1w
TGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjazsKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMDAwLDExICsxMDEyLDI2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dl
bmVyYXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAog
ICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJvb2wgbV9jYW5CZU9wdGlt
aXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAg
ICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgICAg
IFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgICAgIENvZGVCbG9jayogbV9w
cm9maWxlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVW5saW5rZWRDb2RlQmxvY2sq
IG1fdW5saW5rZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisKKyAgICAgICAgTWF0aElDSG9sZGVy
IG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV9qaXRDb2RlOwor
CisgICAgICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICAgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVjdENvbnN0YW50IHsgc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAgICAgIEJhZzxVbmxpbmtlZENhbGxMaW5r
SW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxD
YWxsTGlua0luZm9zOworICAgICAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91
bmxpbmtlZFN0dWJJbmZvczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBt
X3N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4g
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAgICAgIHN0cnVjdCBOb3RBQ29kZUJsb2Nr
IHsgfSBtX2NvZGVCbG9jazsKKworICAgICAgICBib29sIG1faXNTaGFyZWFibGUgeyB0cnVlIH07
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENo
YXIob3AyKSkgewogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0K
IAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEp
OwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IElu
dC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1Qx
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2Fk
KG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4
IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
LSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklU
TmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJl
bnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0
ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQg
Y2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlv
bkFyaXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNo
aWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRBZGRJQyogYWRkSUMg
PSBtX21hdGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9u
VG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNG
YXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJ
bmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlv
blN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2Zp
bGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNS
ZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAg
ICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAK
QEAgLTEwMTUsMTAgKzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFy
eU1hdGhJQwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRo
UHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRo
UHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0
aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAg
IGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAt
MTA1NSwxMyArMTA2MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRo
SUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRo
SUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlm
IChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmICht
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0
aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNy
Y1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNo
RnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChy
ZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCBy
ZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpA
QCAtMTEyMCwxMyArMTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5
TWF0aElDCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
bWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAg
ICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBp
ZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsK
KyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwor
ICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
Yml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0
d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7
CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFi
ZWwoKTsKQEAgLTExNjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJ
bnN0cnVjdGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVs
bHB0cjsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2Zp
bGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJh
bmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNv
ZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjIwLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9t
dWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVs
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyog
bXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BN
dWw+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAg
SklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAg
ICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsK
ICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4
ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklD
KGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVT
dWIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNw
cAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNv
bXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCByZWdUMSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFk
ZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxF
dmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTks
NyArMjU5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAg
ICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgq
bV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0
UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7
CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRp
b24gPSBsYWJlbCgpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpA
QCAtMzQxLDcgKzM0MSw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3Qg
SW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAK
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzU0LDcgKzM1Myw3IEBA
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRl
ICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFt
ZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50
LmgiCkBAIC00NCw3ICs0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAK
QEAgLTUzLDE4ICs1NCwxOCBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAh
PSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdz
CiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNv
ZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZz
ZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRl
Y29kZSwgY2hlY2twb2ludCkpOwogCisKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFy
cmF5UHJvZmlsZUZvcihtZXRhZGF0YSwgY2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1
Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBP
cENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0lu
Zm86Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNl
ZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAt
NzgsNyArNzksNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9j
YWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAg
fHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNv
bXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1Zh
bHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50
cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVy
YXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6
ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJh
dGlvbihzaXplT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRp
b24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7
CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAg
IGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEs
IHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAq
IHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEs
MTQgKzEwMywxNiBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAg
ICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJh
bWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFy
YXJnc0ZyYW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFy
Z09mZnNldCwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxP
cGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJn
T2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAg
Ly8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEs
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9h
ZDMyKGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1Qw
KTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsK
LSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1Qw
KTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0
ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRk
cmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKCkpKTsKICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5p
dGlhbGl6ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEzMSwxNiBAQCBib29sIEpJVDo6Y29tcGlsZUNh
bGxFdmFsKGNvbnN0IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwo
Y29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigt
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3Rlciwg
QWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMSk7CisgICAgc3Rv
cmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6
OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdU
Mik7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25DYWxsRXZhbCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
Mik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOwogCiAg
ICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogCkBAIC0xNDgsNyArMTUyLDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2
YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5r
SW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5m
byA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7
CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwogCiAgICAg
aW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKQEAgLTE1Niw0MyArMTYwLDQ3
IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJl
Z2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSksIHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7
CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5m
byk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8q
LCB1bnNpZ25lZCkKLXsKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxp
bmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KSB7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRh
aWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8sIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25z
dCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5r
SW5mb0NvbnN0YW50KQogewotICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwot
ICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1
ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsK
LSAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJh
bWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVE
YXRhPigpOworICAgIHNodWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdj
OworICAgIHNodWZmbGVEYXRhLT5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpOworICAgIHNodWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQog
ICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXpl
b2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJn
Yyk7CisgICAgc2h1ZmZsZURhdGEtPmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAg
IHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAg
ICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAg
ICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNv
ZGUubV9hcmd2LAogICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNo
dWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBE
YXRhRm9ybWF0SlMpOwotICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyht
X2NvZGVCbG9jayk7Ci0gICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7
CisgICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBE
YXRhRm9ybWF0SlMpOworICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMo
JlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKIAotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7
Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZv
clRhaWxDYWxsKCk7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdU
Mik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxE
YXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcigqdGhpcywgKnNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAg
ICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNo
cmlua1RvRml0KCk7CisgICAgaW5mby0+ZnJhbWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZs
ZURhdGEpOworCiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0
aW9uOwogICAgIApAQCAtMjE4LDE0ICsyMjYsMjUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
Y29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsg
Q29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBh
ZnRlciByZXR1cm4uCiAgICAgKi8KLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwot
ICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVC
bG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAg
Y29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlu
a0luZm8qIGluZm8gPSBudWxscHRyOworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5m
b0NvbnN0YW50ID0gVUlOVF9NQVg7CisgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkg
eworICAgICAgICBpbmZvID0gbV91bmxpbmtlZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9
IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25z
dGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5r
SW5mbywgaW5mbyk7CisKKyAgICAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXpl
KCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8u
YXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAg
ICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5m
b0NvbnN0YW50ID0gaW5mb0NvbnN0YW50OworICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShi
eXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSAr
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVk
LgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGlu
c3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5
dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxs
ZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAtMjM0LDE2ICsyNTMsMTIgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxl
Q2FsbEV2YWwoYnl0ZWNvZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxs
Q29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+
c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0g
ICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwot
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZv
ID0gaW5mbzsKLQotICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxM
aW5rSW5mb0luZGV4KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBj
YWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAg
bG9hZENvbnN0YW50KGluZm9Db25zdGFudCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxG
YXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVz
LCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxD
YWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKICAgICAgICAgICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2Fs
bFNsb3cocmVnVDIpOwogICAgICAgICB9KTsKQEAgLTI1MywxMyArMjY4LDEzIEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwg
cmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhz
ID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7
CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQ
YXRocyk7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRv
bmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0
KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCArMjg4LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBt
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBs
YWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudCht
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0
YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qz
KTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5r
SW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0
RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlzLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9y
dFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CkBAIC0zOTUsMTcgKzQxMCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNv
bnN0IEluCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFt
ZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1Qw
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAK
ICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQpAQCAtNDE2LDEwICs0NDQsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJl
Z1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFu
Y2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElm
Tm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBAIC00MzIsMTkgKzQ1OCwxNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
bmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVy
YXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudCkucmF3Qml0cygpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRlcmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0
ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RP
YmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0
b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50
R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00NTIsNyArNDc2LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0
cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+
d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5
X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0OTMsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVh
bCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5r
KHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0
aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9u
TWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
SXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRl
cmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3Iz
MihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJp
YykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRl
cmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0
aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxs
PE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAg
ICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUs
IHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdU
MDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BS
ID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBm
aXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdpc3RlcjsKKyAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0g
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOwor
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgICAg
ICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAg
ICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAg
ICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3Vs
dEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAg
ICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BS
IH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9u
ZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAg
ICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgICAgICBHUFJSZWcgc2Ny
YXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BS
LCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBz
Y3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEg
PSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAg
ICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIo
KTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5
KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOwor
ICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNW
YWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxHUFIpOworCisgICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYmFzZUdQ
Uik7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJv
cGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVl
UmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZh
bHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25l
LmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1NzcsNTUgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0
ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpk
b250Q2xvYmJlclJlZ2lzdGVyOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25l
VlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSBy
ZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlz
dCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0
ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQg
PSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAg
ICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0
LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAotICAg
ICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5v
bkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRv
bmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwg
YXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQ
UjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVn
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwor
CisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
KworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywg
ZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNr
cG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAgfQog
CiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BSUmVn
IGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRl
bnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0g
ICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0g
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBp
dGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIy
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsMTEgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogCisKIG5hbWVzcGFjZSBK
U0MgewogCitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKKwogbmFtZXNwYWNlIERGRyB7CiBjbGFz
cyBDb21tb25EYXRhOwogY2xhc3MgSklUQ29kZTsKQEAgLTE1OSwxMCArMTYyLDEwIEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgewot
ICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURh
dGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApAQCAtMjIzLDYgKzIyNiw4IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlQXR0cmlidXRl
ID09IFNoYXJlQXR0cmlidXRlOjpTaGFyZWQ7IH0KIAorICAgIHZpcnR1YWwgUENUb0NvZGVPcmln
aW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorCiBwcml2YXRl
OgogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFNoYXJlQXR0cmlidXRlIG1fc2hhcmVBdHRy
aWJ1dGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0
aW9uS2V5LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb21waWxhdGlvbktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAg
dm9pZCBKSVRDb21waWxhdGlvbktleTo6ZHVtcChQcmludFN0cmVhbQogICAgICAgICBvdXQucHJp
bnQoIjxlbXB0eT4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBvdXQucHJpbnQoIihD
b21waWxlIG9mICIsICptX3Byb2ZpbGVkQmxvY2ssICIgd2l0aCAiLCBtX21vZGUsICIpIik7Cisg
ICAgb3V0LnByaW50KCIoQ29tcGlsZSBvZiAiLCBSYXdQb2ludGVyKG1fY29kZUJsb2NrKSwgIiB3
aXRoICIsIG1fbW9kZSwgIikiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5oCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDU3ICszMCw1NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
Y2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgSlNDZWxsOwogCiBj
bGFzcyBKSVRDb21waWxhdGlvbktleSB7CiBwdWJsaWM6CiAgICAgSklUQ29tcGlsYXRpb25LZXko
KQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhudWxscHRyKQorICAgICAgICA6IG1fY29kZUJs
b2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9tb2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxp
ZENvbXBpbGF0aW9uKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgSklUQ29tcGlsYXRpb25LZXko
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9j
ayhudWxscHRyKQorICAgICAgICA6IG1fY29kZUJsb2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9t
b2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6REZHKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgSklU
Q29tcGlsYXRpb25LZXkoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBKSVRDb21waWxhdGlvbk1v
ZGUgbW9kZSkKLSAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKKyAgICBK
SVRDb21waWxhdGlvbktleShKU0NlbGwqIHByb2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9k
ZSBtb2RlKQorICAgICAgICA6IG1fY29kZUJsb2NrKHByb2ZpbGVkQmxvY2spCiAgICAgICAgICwg
bV9tb2RlKG1vZGUpCiAgICAgewogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgPT0g
SklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CisgICAgICAgIHJldHVybiAh
bV9jb2RlQmxvY2sgJiYgbV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBp
bGF0aW9uOwogICAgIH0KICAgICAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSAh
PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJu
ICFtX2NvZGVCbG9jayAmJiBtX21vZGUgIT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29t
cGlsYXRpb247CiAgICAgfQogICAgIAotICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvZmlsZWRCbG9jazsgfQogICAgIEpJVENvbXBpbGF0aW9uTW9kZSBt
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEpJVENvbXBpbGF0aW9uS2V5JiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3Byb2ZpbGVkQmxvY2sgPT0gb3RoZXIubV9wcm9maWxlZEJsb2NrCisgICAgICAgIHJl
dHVybiBtX2NvZGVCbG9jayA9PSBvdGhlci5tX2NvZGVCbG9jawogICAgICAgICAgICAgJiYgbV9t
b2RlID09IG90aGVyLm1fbW9kZTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjpwYWlySW50SGFzaChXVEY6OlB0ckhhc2g8
Q29kZUJsb2NrKj46Omhhc2gobV9wcm9maWxlZEJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1bmRl
cmx5aW5nX3R5cGU8SklUQ29tcGlsYXRpb25Nb2RlPjo6dHlwZT4obV9tb2RlKSk7CisgICAgICAg
IHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKFdURjo6UHRySGFzaDxKU0NlbGwqPjo6aGFzaChtX2Nv
ZGVCbG9jayksIHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPEpJVENvbXBpbGF0aW9u
TW9kZT46OnR5cGU+KG1fbW9kZSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9j
azsKKyAgICAvLyBFaXRoZXIgQ29kZUJsb2NrKiBvciBVbmxpbmtlZENvZGVCbG9jayogZm9yIGJh
c2xlbGluZSBKSVQuCisgICAgSlNDZWxsKiBtX2NvZGVCbG9jazsKICAgICBKSVRDb21waWxhdGlv
bk1vZGUgbV9tb2RlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRp
ZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJbmxpbmVB
Y2Nlc3MuaCIKKyNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIApAQCAtNDYsMTAgKzQ3LDkgQEAgc3RhdGljIFN0
cnVjdHVyZVN0dWJJbmZvKiBnYXJiYWdlU3R1YkluZgogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6
OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRU
eXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzKQotICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICwgbV9qaXRUeXBlKGpp
dFR5cGUpCisgICAgOiBtX2ppdFR5cGUoaml0VHlwZSkKIHsKLSAgICBtX3N0dWJJbmZvID0gbV9j
b2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdp
bikgOiBnYXJiYWdlU3R1YkluZm8oKTsKKyAgICBtX3N0dWJJbmZvID0gY29kZUJsb2NrID8gY29k
ZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHVi
SW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNhbGxTaXRlSW5kZXggPSBjYWxsU2l0ZTsKIAogICAg
IG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzOwpAQCAtNTksNyArNTks
NiBAQCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBMaW5rQnVm
ZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgsIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCkKIHsKICAgICBtX3N0dWJJbmZvLT5zdGFydCA9IHN0
YXJ0OwotCiAgICAgbV9zdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gZmFzdFBhdGgubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihtX2RvbmUpOwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSkKQEAgLTY3LDYgKzY2LDE1IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3I6OmZpbmFsaXplKAogICAgIG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9
IHNsb3dQYXRoLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc2xvd1BhdGhCZWdp
bik7CiB9CiAKK3ZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5m
b0dQUikKK3sKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
SklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1
YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJ
ZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBz
dHViSW5mb0dQUikKQEAgLTExMCw3ICsxMTgsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRH
ZXRCeUlkR2VuZXJhdG9yCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlw
ZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHVi
SW5mb0dQUiwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAgIDogSklUQnlJZEdlbmVyYXRvcihj
b2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBlLCB1c2Vk
UmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCi0gICAgLCBtX2lzTGVuZ3RoQWNj
ZXNzKHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLmltcGwoKSkKKyAgICAsIG1faXNMZW5ndGhBY2Nlc3MoY29kZUJsb2NrICYmIHByb3Bl
cnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmlt
cGwoKSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50
YWdHUFIoKSk7CiB9CkBAIC0xMjAsNiArMTI4LDM1IEBAIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRv
cjo6Z2VuZXJhdGVGYXN0UGEKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBtX2lzTGVuZ3Ro
QWNjZXNzID8gSW5saW5lQWNjZXNzOjpzaXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVBY2Nl
c3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAorc3RhdGljIHZvaWQgZ2VuZXJhdGVH
ZXRCeUlkSW5saW5lQWNjZXNzKEpJVCYgaml0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBi
YXNlLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNr
aXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2Ny
YXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHJvcGVydHko
YmFzZSwgc2NyYXRjaCwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hl
ZCA9IGppdC5qdW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAg
aml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBm
aW5pc2hlZC5saW5rKCZqaXQpOworfQorCit2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQ
UlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQu
bG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlk
SW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
YmFzZSwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKworCiBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcigK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIHZhbHVlLCBK
U1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BS
KQpAQCAtMTM4LDYgKzE3NSwxOCBAQCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6
Z2VuZXJhCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9y
UHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKK3ZvaWQgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9y
OjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJ
bmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6
dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisg
ICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGdlbmVyYXRl
R2V0QnlJZElubGluZUFjY2VzcyhqaXQsIHN0dWJJbmZvR1BSLCBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnNj
cmF0Y2gsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAg
bV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5
SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcg
c2NyYXRjaCwgCkBAIC0xNDksNiArMTk4LDM0IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1
dEJ5SWRHZW5lcmF0b3IKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzLmNsZWFyKHNjcmF0
Y2gpOwogfQogCit2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQ
UikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7
CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0
dWJJbmZvLCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6c2NyYXRjaDsKKyAgICBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIEdQUlJlZyB2YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6dmFsdWU7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAg
ICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQu
YnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQo
KSksIHNjcmF0Y2gpOworICAgIGppdC5zdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHsgdmFsdWUg
fSwgYmFzZSwgc2NyYXRjaCwgc2NyYXRjaDIpOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVt
cCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5jYWxsKEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGlu
aygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogdm9pZCBKSVRQdXRCeUlk
R2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCiB7CiAgICAg
Z2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlSZXBs
YWNlKCkpOwpAQCAtMzAwLDYgKzM3NywzMiBAQCB2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVGYXN0UGF0CiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpz
aXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKK3ZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpn
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZv
LCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNl
RGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAg
aml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworCisgICAgR1BSUmVnIGJh
c2UgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgcmVzdWx0ID0g
QmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5s
aW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmJveEJvb2xlYW4o
dHJ1ZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5q
dW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmNhbGwo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hlZC5s
aW5rKCZqaXQpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRJbnN0YW5jZU9m
R2VuZXJhdG9yOjpKSVRJbnN0YW5jZU9mR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJs
b2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4LAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBwcm90b3R5cGUsIEdQUlJlZyBzdHVi
SW5mb0dQUiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgi
CisjaW5jbHVkZSAiSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIkpJVE9wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHV0S2luZC5oIgpA
QCAtMzgsMTEgKzM5LDExOCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhY2hlYWJsZUlkZW50
aWZpZXI7CiBjbGFzcyBDYWxsU2l0ZUluZGV4OwogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklU
OwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbzsKIAogZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90OwogZW51bSBjbGFzcyBKSVRU
eXBlIDogdWludDhfdDsKIAorc3RydWN0IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnMgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJh
c2VsaW5lRGVsQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0g
R1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQ
UkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnMgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0
IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIC8vIFdlIHJlbHkgb24gdGhpcyB3aGVu
IGxpbmtpbmcgYSBDb2RlQmxvY2sgYW5kIGluaXRpYWxpemluZyByZWdpc3RlcnMgZm9yIGEgR2V0
QnlWYWwgU3R1YkluZm8uCisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpY19hc3NlcnQocmVzdWx0
ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgc3RhdGljX2Fzc2Vy
dChzdHViSW5mbyA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbyk7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86OnJlZ1QzOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKK307CisK
K3N0cnVjdCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6YXJndW1lbnRHUFIyOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHByb3RvID0gR1BSSW5mbzo6YXJndW1lbnRHUFIzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86Om5vbkFyZ0dQUjE7Cit9
OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9w
ZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3Qg
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
R1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgZG9udENsb2JiZXJS
ZWdpc3RlciA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdGhpc1ZhbHVlID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZv
OjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6
cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMiA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1Qx
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJy
YW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xhc3Mg
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hl
R2VuZXJhdG9yKCkgeyB9CkBAIC02MiwxMiArMTcwLDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZp
bmFsaXplKAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZm
ZXImIHNsb3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBz
dHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2Vk
U3R1YkluZm8geyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBw
cm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0
VHlwZTsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgorICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX2RvbmU7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKQEAgLTk4LDcgKzIxMiw3IEBA
IHByb3RlY3RlZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92
YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworcHVibGljOgogICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTExLDYgKzIy
NSw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSk7CiAgICAgCiAgICAgdm9pZCBnZW5l
cmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0
dWJJbmZvR1BSKTsKIAogcHJpdmF0ZToKICAgICBib29sIG1faXNMZW5ndGhBY2Nlc3M7CkBAIC0x
MjQsNiArMjM5LDcgQEAgcHVibGljOgogICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywg
Q2FjaGVhYmxlSWRlbnRpZmllciwKICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVS
ZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCisg
ICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1
YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICB2b2lkIGdlbmVyYXRlRmFz
dFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIH07CiAKQEAgLTEzMiwxMCArMjQ4LDExIEBAIHB1Ymxp
YzoKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJ
ZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2Fs
bFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlk
ZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBH
UFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7Cisg
ICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAg
ICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZv
R1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQg
Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJl
ZyBzdHViSW5mb0dQUik7CiAgICAgCiAgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0
aEZ1bmN0aW9uKCk7CiAKQEAgLTE2MywxMSArMjgwLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBn
ZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1
ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBt
X3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTE5MSw4ICszMDYsNiBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hh
YmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjksNiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0
ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNTIsNiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
IAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI1NSw2
ICszNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdz
IHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRo
KE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsK
IH07CiAKIGNsYXNzIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IgewpAQCAtMjc3LDggKzM4Nyw2IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBz
bG93UGF0aExpbmtCdWZmZXIpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhK
dW1wOwogfTsKIApAQCAtMzAyLDExICs0MTAsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBn
ZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1
ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0OwogCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAg
bV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMzAsOCArNDM2LDYgQEAgcHVibGljOgogICAgIAog
ICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgot
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQ
YXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENv
bnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0Nv
bnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAo
IXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsK
K30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtU
aW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpp
c0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBBbGwgbGluayB0aW1l
IGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQog
ewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9j
ay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0
ZXIgZW50cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
cHBlbmRDYWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+
Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRh
dGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxS
ZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRz
dCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFs
dWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVn
cyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwg
cmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2Fs
bDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVy
IGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdp
c3RlciBkc3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpT
VmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJl
dHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1
cm5WYWx1ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Ns
b3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
VmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2Vs
bChyZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2lu
dCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1l
dGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlv
biwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwor
ICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9i
eXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBK
SVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xv
d1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVy
aW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMg
c2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAg
IG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
LCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBt
X2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgs
MzMgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNf
SU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNy
YykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2Vs
bCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkK
LXsKLSAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKLQotICAgIC8vIFdlJ3JlIGlu
IGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3Qg
ZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3Jl
NjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UKLSAgICBFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSAgICBzdG9yZTMyKHZhbHVl
LnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAgICBzdG9yZTMy
KHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKLX0KKyAg
ICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3Jj
KSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJp
bmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0
aCgpID09IDE7Cit9CisKKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRl
KFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKy8veworLy8g
ICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CisvLworLy8gICAgLy8gV2UncmUgaW4g
YSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBk
byBhIGRpcmVjdAorLy8gICAgLy8gc3RvcmUuCisvLyNpZiBVU0UoSlNWQUxVRTY0KQorLy8gICAg
c3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyNlbHNlCisv
LyAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vICAgIHN0
b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwor
Ly8gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOwor
Ly8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZh
bHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlBy
b2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1Qw
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQog
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzIzLDQxICszNTIsNDIg
QEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewog
ICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7CisKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91
bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNv
ZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0
b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRS
ZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVl
UHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97CisvLyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7
CisvL30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVn
KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVn
KQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJl
c3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVS
ZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiBh
cnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxl
LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsKICAgICBpZiAo
c2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxh
c3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHNjcmF0Y2hH
UFIsIGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmlsZSk7CiAgICAgfQogfQogCi1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxH
UFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQg
Y2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQogewotICAgIGlmIChzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpIHsKLSAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBz
dG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYXJyYXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6
Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKSk7Ci0gICAgfQorICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJl
SUQoKSwgY2VsbEdQUiwgc2NyYXRjaEdQUik7CiB9CiAKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQpAQCAtMzgwLDcg
KzQxMCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3Rl
cklEIHZhbHVlKQogewogICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRS
ZWdpc3RlcihyZWcpOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQ
b29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAg
ICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAg
IH0gZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAt
NDk2LDcgKzUyNiw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QK
IAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJl
Z2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7
CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFu
dCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAt
NTA2LDcgKzUzNiw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMK
IAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJl
Z2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNL
bm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBp
ZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAg
ICAgICAgIGVsc2UKQEAgLTUxNCwxMSArNTQ0LDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVt
cFNsb3dDYXNlSWZOb3RKUwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNP
cGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3Jj
LmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0K
IEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQz
Ml90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpA
QCAtNTQ0LDExICs1NjksMTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1
YWxSZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAg
ICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQorICAgICAgICBp
ZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9j
ayhzcmMpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKHZhbHVlKSksIGRzdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbG9hZENvZGVC
bG9ja0NvbnN0YW50KHNyYywgZHN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTY2
LDExICs1OTEsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsK
LSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3Jl
NjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTU5NSw3ICs2MTUsNyBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lz
dGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykpCisg
ICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTYzNywzMCArNjU3LDcgQEAgQUxXQVlTX0lOTElORSBpbnQg
SklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewogICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVy
biB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGlu
c3RydWN0aW9uKTsKLX0KLQotQUxXQVlTX0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0
UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNvZGUpCi17Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0
ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsgLy8gSGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtl
eQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsKLSAg
ICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dElu
Zm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAgIG1f
Y29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAgIHJl
dHVybiBnZXRQdXRJbmZvOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZ
U19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJpbmFy
eU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50NjRf
dD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkQXJp
dGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQ
cm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5h
cnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1fY29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5LCBh
cml0aFByb2ZpbGUpOwotICAgIHJldHVybiBhcml0aFByb2ZpbGU7CisgICAgcmV0dXJuIG1fdW5s
aW5rZWRDb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY4MSw2ICs2NzgsNjAgQEAgQUxXQVlTX0lOTElORSBF
Q01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7
CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qg
b2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX21ldGFkYXRh
R1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJs
ZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQorewor
ICAgIGxvYWQzMihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90
IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKHNfbWV0YWRhdGFH
UFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBW
YWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3Rv
cmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
c2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTgodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQ
UiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Ynl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwg
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlMzIo
dmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRh
dGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29k
ZSkgKyBvZmZzZXQpLCBzX21ldGFkYXRhR1BSLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsb2FkQ29uc3RhbnQoSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFu
dEluZGV4LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX2NvbnN0YW50
c0dQUiwgc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQp
OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyBy
ZXN1bHQpCit7CisgICAgbG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3Vs
dCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChW
aXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVz
dWx0LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkpLCByZXN1bHQp
OworICAgIGxvYWQ2NChBZGRyZXNzKHJlc3VsdCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkg
KiBzaXplb2YoSlNWYWx1ZSkpLCByZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzMSw3
ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFk
ZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2Vk
Q29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAg
SnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUik7CkBAIC05OTcsNyArOTk3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2lt
bShjb25zdCBJbnN0cgogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0
aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtl
ZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1w
bGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVj
b2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAg
bGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwMjQsNyAr
MTAyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKIAogICAg
IC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlz
IHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5z
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFw
cGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zm
c2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNU
SVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDQyLDcgKzEwNDIsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJs
ZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50Lgog
ICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0
cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBl
bmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNl
dCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJs
ZSh1bmxpbmtlZFRhYmxlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBACiAjaW5jbHVk
ZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTQsMTEgKzU2LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX21v
dihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUu
aXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwotICAgICAgICBlbHNlCisgICAgICAgIGlm
IChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2Nr
KHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjpl
bmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0
b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgIH0KKwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC04NywzNyArOTIsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNv
bnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxv
Y2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxv
Y2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAg
UmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJl
ZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lz
dGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CiAKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7
Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpj
b25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlh
bGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsK
LSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1l
dGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2Fk
UHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9m
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZz
ZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVSZWcpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0
QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxs
b2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2Vz
KTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CisgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAg
IFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0
YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7
CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAm
dm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogfQogCkBAIC0xMzEsNyArMTM0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVz
X2hhc19pbnN0YW5jZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1
ZSwgcmVnVDApOwogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9s
Lmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9
IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5j
ZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNU
X09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2Z1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJv
bEZ1bmN0aW9uKSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rvciwg
cmVnVDApOwogCkBAIC0xNTQsMzAgKzE1OCwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsK
IAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJl
c3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNl
VmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhl
biB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
Ojp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3RvR1BSID0gQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BSKTsKICAgICAKICAgICAvLyBDaGVjayB0aGF0
IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tl
ZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Rv
R1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVn
VDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUNSwKLSAg
ICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICByZXN1bHRHUFIsCisgICAgICAgIHZhbHVl
R1BSLAorICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgc3R1YkluZm9HUFIsCisgICAgICAgIEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDEsIEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6c2NyYXRjaDIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAorCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQgKzIwNCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVz
cyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19h
c3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIp
OworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9
PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9m
T3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTI0MCw3ICsyNTEsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAKICAgICBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApA
QCAtMzgzLDkgKzM5NCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlv
bioKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxl
ckdlbmVyYXRvcihWTSYpCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKIAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0
UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC00MTEsNyArNDIyLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTQzNCw5ICs0NDQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNv
bnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDY1LDggKzQ3NiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rp
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4
cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIp
LCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIo
dmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBh
ZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyAr
NDkzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8v
IGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcg
YXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1h
eSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGlj
aCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAg
LTUxOSw3ICs1MzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVj
CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIo
RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWln
biA9IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU1Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFf
bnVsbChjb25zdCBJbnN0cnUKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRk
SnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdl
dCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApA
QCAtNTgyLDE1ICs1OTUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVs
bChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFs
dWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRl
Y29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxs
KCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0
cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsK
LSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAg
IGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwg
cmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwg
T3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2MzYs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5j
aElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsK
ICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0
aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY1Myw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzA4
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBj
YWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1Qw
KTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzcy
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93
blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtNzIwLDcgKzczNCw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FW
RVNfUkVHSVNURVJTID4gMAogICAgIGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1
bWVudEdQUjApOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlckltcGwoYXJndW1lbnRHUFIwKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYXJndW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29u
c3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyAr
OTIyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5MzMsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5z
dHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1Qy
LCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkzMSw3ICs5NDcsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZS
ZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEs
NyArOTY3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGlu
ayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NzgsNyArOTk0LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1Qw
KSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
Z1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTkzLDcgKzEwMDksMTcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBW
TTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBz
dG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZy
YW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAg
IC8vIFdoZW4gdGhlIExMSW50IHRocm93cyBhbiBleGNlcHRpb24sIHRoZXJlIGlzIGEgY2hhbmNl
IHRoYXQgd2UndmUgYWxyZWFkeSB0aWVyZWQgdXAKKyAgICAvLyB0byBiYXNlbGluZSwgYW5kIHdl
J2xsIGNhdGNoIHRoYXQgZXhjZXB0aW9uIGluIHRoZSBiYXNlbGluZSBKSVQuIEJlY2F1c2UgdGhl
IExMSW50IHVzZXMKKyAgICAvLyB0aGUgYSBkaWZmZXJlbnQgdmFsdWUgaW5zaWRlIHNfY29uc3Rh
bnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdlIHJlc3RvcmUgYWJvdmUgbWF5IG5vdAorICAgIC8v
IGNvbnRhaW4gdGhlIGNvcnJlY3QgdGhhdCByZWdpc3Rlci4gU28gd2UgcmVwbGVuaXNoIGl0IGhl
cmUuCisgICAgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9j
azo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19j
b25zdGFudHNHUFIpOworICAgIH0KIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwog
ICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyArMTAzNywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
YXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3Jp
bmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdp
c3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1ZmZlciB8
fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5k
ZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBt
X2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNo
VGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcp
OwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwotICAgIGlmIChidWZmZXIgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2Zp
bGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
c3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSksIHJlZ3MpOwotICAgICAgICB9KTsK
LSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKQEAgLTEwNTMsOCArMTA2Nyw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVh
dGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2gg
c3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hS
ZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hS
ZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlu
a2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsxMDk1LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0
ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNo
IGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRl
Y29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAg
IGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUu
bV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQ
UjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEwOTksMjAgKzEx
MTQsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZp
cnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8v
IGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3
aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwog
ICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2Rl
SW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2Vk
VGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdX
aXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4
KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1
Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCks
IHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
RGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3Rz
ID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUp
KTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTExMzMsNyArMTE1MCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
MCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVn
VDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE0OCw3ICsxMTY1
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjYsNyArMTE4Miw3IEBAIHZv
aWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDAp
OwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE4OCwxMiArMTIwNCwx
NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZl
biB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50
CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNl
c3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5n
IEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7
CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpOwogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2Nr
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBj
b3VudDsgKytqKQogICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOworICAgIAorICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25D
aGVjaygpOwogI2Vsc2UKQEAgLTEyMTIsNyArMTIzMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dGVyKGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2Vu
ZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBA
IC0xMzEwLDIzICsxMzI4LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJ
bnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0
YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5h
bE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAg
ICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUg
PSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hl
ZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2Fs
bGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAg
IFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcgKzEzNTYsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNz
KHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Q
cm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9m
QWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRP
Zk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQ
cm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyks
IHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5j
dGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlz
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRDYWxsZWUoKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwog
ICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVk
RnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmpl
Y3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywg
Y2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhp
cyk7CkBAIC0xMzcyLDcgKzEzODYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3Qg
SW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAg
ICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQ
UiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEzOTcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Mik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwg
cmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9v
bGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7
CkBAIC0xMzk0LDcgKzE0MTAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IElu
c3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIApAQCAtMTQwNCw3ICsxNDIxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEo
Y29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsxNDM2LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBi
eXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZh
bHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3Ry
dWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFs
dWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
LCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFu
Y2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5j
ZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwogICAgIGJveEJv
b2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE0
MzAsNyArMTQ0OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgK
IAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbikKIHsKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5p
dGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVG
b3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0
dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX3VubGlua2VkQ29kZUJs
b2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAg
ICAgICB1aW50cHRyX3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGlu
c3RydWN0aW9uKTsKICAgICAgICAgbG9hZFB0cihwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBz
a2lwRWFybHlSZXR1cm4gPSBicmFuY2hQdHIoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKE9w
dGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xNDQwLDcg
KzE0NTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAjZWxz
ZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BS
MiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCi0gICAgICAgIG1vdmVWYWx1ZSht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkpOwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0xNDUzLDggKzE0NzIsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1p
emF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9w
dGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAg
QWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigp
KSkpOworICAgICAgICAgICAgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4
ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQogfQogCkBAIC0xNTA5LDcgKzE1MjksOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMTUyMiw3ICsxNTQzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNv
bnN0IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0m
IHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBD
UFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTE1NjQsMzQg
KzE1ODUsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Cisg
ICAgR1BSUmVnIGdsb2JhbEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGdsb2JhbEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2Jh
bEdQUiwganNDYXN0PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJl
Z2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEp1bXAgbGF6eUp1bXA7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7
CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7Cisg
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5k
aWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0
aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbCwgYml0
d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rp
b25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKIAog
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVs
c2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9m
dW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2MjEsMjMgKzE2NDQsMjQg
QEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAg
ZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgogCi0gICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0
ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2
b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsK
KyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1
bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAg
ICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdH
ZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBl
bHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3Jf
ZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTY2NCwyOSArMTY4
OCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0Fy
cmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUg
PSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0
YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQUjIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2Zp
bGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgc2l6ZSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBi
eXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6
ZUluZGV4LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
LCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogI2Vsc2UK
KyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlX
aXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdU
Mik7CiAgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fy
cmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNzE5LDEwIEBAIHZvaWQgSklU
OjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJv
ZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAg
bV9pc1NoYXJlYWJsZSA9IGZhbHNlOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVk
VHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAK
QEAgLTE3NzcsMjAgKzE4MDQsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdH
UFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0No
aWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBH
UFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJn
dW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5z
dXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVn
LCBzY3JhdGNoMlJlZyk7CisgICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25B
cmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2Vu
UGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsK
KyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwg
cmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNW
YWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNr
ZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKKyAgICBtX2lzU2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRh
dGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBiYXNpY0Js
b2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7CkBAIC0xODYwLDcgKzE4OTIsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgbW92ZVZhbHVl
KGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRS
ZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAK
QEAgLTE4ODYsNyArMTkxOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2Yo
Y29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
LCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1
ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKQEAg
LTI4NTUsNyArMjg1Niw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0
Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25z
dCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNT
RVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4g
PT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQgPSBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKIApAQCAtMjg4MCw3ICsyODgxLDcgQEAgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBj
b2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdDsKICAgICBp
ZiAoa2V5LmlzSW50MzIoKSkKQEAgLTI5MDMsNyArMjkwNCw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIHZvaWQqIHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmdKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVC
bG9jay0+YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAKICAgICBp
ZiAoa2V5LmlzU3RyaW5nKCkpIHsKICAgICAgICAgU3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmlu
ZyhrZXkpLT52YWx1ZShnbG9iYWxPYmplY3QpLmltcGwoKTsKQEAgLTI5MTksNyArMjkyMCw2IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAotI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZv
ckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IEluc3RydWN0aW9uKiBwYykpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwpAQCAtMjk3MSw3ICsyOTcxLDYgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblJlc29sdgogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXNvbHZlZFNjb3BlKTsK
IH0KLSNlbmRpZgogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNj
b3BlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IEluc3RydWN0aW9uKiBwYykpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsNyBAQCBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByCiBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAo
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBp
bnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hJ
bW1XaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoVk0qLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNp
emVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4KSk7Ci0jaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpKTsKLSNlbmRpZgogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAo
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRUb1Njb3BlLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3
LDEyIEBAIGF1dG8gSklUUGxhbjo6dGllcigpIGNvbnN0IC0+IFRpZXIKIAogSklUQ29tcGlsYXRp
b25LZXkgSklUUGxhbjo6a2V5KCkKIHsKLSAgICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkobV9j
b2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKKyAgICBKU0NlbGwqIGNv
ZGVCbG9jazsKKyAgICBpZiAobV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUp
CisgICAgICAgIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwor
ICAgIGVsc2UKKyAgICAgICAgY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJu
YXRpdmUoKTsKKyAgICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBtX21vZGUp
OwogfQogCiBib29sIEpJVFBsYW46OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIElu
dmFsaWRHUFJSZWcpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1
ZTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwxMDIgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmICht
ZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01h
eE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5
VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxs
LmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cmVzdWx0KTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3Ms
IHJlZ1QyKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKwogICAgICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
ICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxz
LmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlw
ZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYg
Ynl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
aWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRlcikpCisg
ICAgICAgIHJldHVybjsKKworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlW
YWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOwogCi0gICAgICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9m
aWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0
eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBh
cmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0g
ICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2Rl
SW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAot
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBh
cmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVH
UFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAg
IENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAg
IHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7
CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9
PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsxNTksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAg
ICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNjAsOCArMTcwLDggQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BS
ID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIApAQCAtMTg3LDM0ICsxOTcsNDAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0
ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVn
cywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkdldFByaXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVy
KSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2
YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzIzOSwxMSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRh
ZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHks
IGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTIzNSwyNiArMjUzLDIwIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2Vk
LgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVf
bmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
dHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKQEAgLTI2NCw3ICsyNzYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
ICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAg
ICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0zMDAsMjEgKzMxMiwyOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5k
ID0gYnl0ZWNvZGUubV9icmFuZDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQ
UlJlZyBicmFuZEdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7Ci0KICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2
YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7Cisg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2Vu
KTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBz
ZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTMyNCwx
NyArMzQzLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CisgICAgVU5VU0VEX1BB
UkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
cmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsK
KyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGlt
aXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0zNDQs
MjQgKzM2OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBh
cmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1l
bnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5j
dGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpB
cmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRl
TmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJh
bmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
blNldFByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogI2VuZGlmCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzcwLDMzICszODgsNDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjbwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2Rl
Lm1fYnJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFu
ZEdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJ
VFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJh
bmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBl
bmQoZ2VuKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1ByaXZhdGVCcmFuZD4oKTsKKyAg
ICBVTlVTRURfUEFSQU0oYnl0ZWNvZGUpOworCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2Vu
ZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNz
SW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
YmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jy
YW5kLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0MzgsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQ
cml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNs
dHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2
YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9w
cml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NjEsNDIgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29k
ZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2Zp
bGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywg
cmVnVDQpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworCiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IHN0ZDo6
aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsRGlyZWN0PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtp
bmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29k
ZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAK
ICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIg
aWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00NzQsMTUgKzUxMiwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFN
b2RlOjpzdHJpY3QoKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwogCiAg
ICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAg
ICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gYnl0ZWNv
ZGUubV9lY21hTW9kZTsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTQ5OCw3ICs1MzMsMTYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0
aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGly
ZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAo
ZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFI0KTsKKyAgICBpZiAoaXNEaXJl
Y3QpCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIGVsc2UKKyAgICAg
ICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxl
KCksIGFyZ3VtZW50R1BSNSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0LCBhcmd1bWVudEdQ
UjUpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNTEyLDcgKzU1Niw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBDYWxsIGNhbGw7CiAgICAgYXV0byBvcGVyYXRp
b24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9w
dGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CkBAIC01MjMsNyAr
NTY3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNTMzLDE4ICs1NzcsMjQgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAgY29u
c3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gcmVnVDQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7
CisgICAgeworICAgICAgICBSZWdpc3RlclNldCB1c2VkKEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OmJhc2UsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmls
ZSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlucyhyZWdUNCkpOworICAgICAgICBBU1NF
UlQoIXVzZWQuY29udGFpbnMocmVnVDUpKTsKKyAgICB9CisKIAogICAgIGppdC5zdG9yZTMyKGJ5
dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpKTsKICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CkBAIC01NzAsMjAgKzYyMCwzMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVH
UFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQ
dXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFt
ZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAg
IHN0dWJJbmZvLT5wcml2YXRlRmllbGRQdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8g
SUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFz
ZSBpcyBjZWxsLgpAQCAtNTk0LDggKzY1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2
YXRlX25hbWUoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwotICAgIFByaXZhdGVGaWVsZFB1dEtpbmQg
cHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudElu
c3RydWN0aW9uKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFs
c1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKQEAgLTYwMywxMyArNjYzLDE1IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCi0gICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBv
cGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0
QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3Qg
Y2xvYmJlcmVkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gcmVnVDI7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwg
cHJvcGVydHlHUFIsIHZhbHVlR1BSLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxs
cHRyKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQ
cml2YXRlTmFtZT4oKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50
R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1
bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJh
dGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50
R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVu
dEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtNjIyLDE4ICs2ODQsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9w
cml2YXRlX25hbWUoYwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUNDsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBl
bmRDYWxsKG9wZXJhdGlvbik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBA
IC02NDMsMTQgKzY5OSwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdS
ZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1
ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDM7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCkBAIC02ODAsNyArNzM2LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRp
b25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1w
bCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBv
cHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY4OSw3ICs3NDYsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlv
bnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9w
dGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3
NTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAgaW50
MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIs
IHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3NjgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRy
aWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0
cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzE5LDcgKzc3OSw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90
IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNzI3LDIzICs3ODgsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNv
bnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
RGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c2Ny
YXRjaDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogICAgIEpJVERlbEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRl
bGV0ZUJ5SUQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNh
biB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMg
Y2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Yg
c2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC03NTks
MTUgKzgzMCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdl
biA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZh
bHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBj
YWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk+KEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2Vj
bWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4
MSwyNCArODU0LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4K
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0
dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtODA4LDcgKzg3Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAg
ICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTg0NSwyMiArOTEzLDMzIEBAIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
RGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVy
dHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIp
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBv
ZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAv
LyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBi
YXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTYyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdU
MSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9w
dGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2Rl
LnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BS
Mik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNh
bGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk+KEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCArOTgwLDE5IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIg
PSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1
ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQ
UiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CkBAIC05MjYsNyArMTAwMiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKQEAgLTk2MSwyMiArMTAzNywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OlRy
eUdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpUcnlHZXRC
eUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAg
ICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9
CiAKQEAgLTk4NiwxNCArMTA3MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRC
eUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEw
MDMsMjYgKzEwOTEsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29u
cwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpLCBkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7
Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25UcnlHZXRCeUlk
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDMwLDIyICsxMTEyLDMx
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVz
dWx0KTsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdz
LCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMDU0LDE2ICsxMTQ1LDE4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJl
c3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0
aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsx
MTY2LDYxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1l
PGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBl
bHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAg
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCpp
ZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKSB7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEu
bV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAg
ICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gz
MihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2Rl
OjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVN
ZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhN
b2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUu
bV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRo
aXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJl
Zyk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZv
R1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVz
dWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcp
OwogfQogCkBAIC0xMTU4LDE2ICsxMjI5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVn
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMTE3NywyNiArMTI1MCw1NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJn
dW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAg
ZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBi
eXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91
bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywg
dGhpc0dQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VW
UmVnKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcp
OworCisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1
bHRSZWdzLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiksIHN0dWJJ
bmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5
SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjA2LDcgKzEzMTAs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQg
bWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFp
bGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlu
bGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1h
eSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7
CkBAIC0xMjQxLDE2ICsxMzQ1LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlz
SW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIGFyZ3Vt
ZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlv
bkdldEJ5SWRXaXRoVGhpc09wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVn
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI4ICsxMzY3LDIyIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyB0aGlz
R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRC
eUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BS
ID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fz
c2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwot
ICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhU
aGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyOTEs
NyArMTM5Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZU
TCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywg
d2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKQEAgLTEzMjksMjMgKzE0MzAsMzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8v
IEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhl
IG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0
ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRo
QmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0
dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcs
IHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7
CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5
dGVjb2RlKSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNv
ZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJl
Y3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6UHV0QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVj
dCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+
ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5
LDE0ICsxNDc0LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4K
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0
aGlzKTsKICAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21f
cHV0QnlJZEluZGV4KytdOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEs
IHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0
aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC0xMzc2LDI1ICsxNDk1LDE5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5
SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBhcmd1
bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9p
ZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IGdlbi5zbG93
UGF0aEZ1bmN0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChnZW4u
c2xvd1BhdGhGdW5jdGlvbigpKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
QEAgLTE0MDQsNyArMTUxNyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKQEAgLTE0NDEsMjAgKzE1NTQsMzEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
dHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRzLmFw
cGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKQEAgLTE0NjMsMTQgKzE1ODcsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5
X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlk
SW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbklu
QnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjA3
LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0g
YXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhl
cmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUg
aXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNs
dHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJl
dHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTE1MTAsMjUgKzE2MzEsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0
IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsK
IAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0
dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1
MzcsMTUgKzE2NjYsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJ
bgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFs
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVBy
b2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNs
dHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BS
NCk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTU2LDU5ICsxNjg4LDcw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09
IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxl
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2Zp
bGVHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3
aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50
IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVu
dCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlv
bkluQnlWYWxPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6
dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
YnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5T3JCcmFuZCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUs
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gdHlwZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5
cGUpCit2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZp
cnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUg
dHlwZSkKIHsKLSAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8
fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgVU5VU0VEX1BBUkFN
KGJhc2UpOworICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7CisgICAgQVNTRVJUX1VOVVNFRCh0
eXBlLCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9
IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3Bl
cmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJn
dW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZh
dGVOYW1lT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2MSwyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVT
bG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BS
ID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBl
KG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGlt
aXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRl
X25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBl
ID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRl
QnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxNzg5LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5t
X2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xv
dyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19w
cml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NjY2LDIxNSArMTgwMywxMjcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX2Jy
YW5kKAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVCcmFuZD4oKTsKLSAgICBlbWl0SGFz
UHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7
CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlv
bldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zh
ckluamVjdGlvbldhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0
YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewotICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBkZXB0aDsgKytpKQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
U2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29s
dmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFk
YXRhLm1fcmVzb2x2ZVR5cGU7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2Fs
U2NvcGVEZXB0aDsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3Bl
Ojpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBv
Y2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNT
Y29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2so
cmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNv
bnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKLSAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0
eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEds
b2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCBy
ZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAg
ICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci19Ci0jZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVt
aXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2
ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1f
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxp
bmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJ
bnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNl
cnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2ls
bCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVU
eXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1f
bGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29s
dmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQo
KSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQg
PSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAg
IHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKKworICAgICAgICBhdXRvIGNsb3N1
cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpn
ZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3Bf
cmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgICAgIH07CiAKLSNkZWZpbmUgUkVTT0xW
RV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZl
VHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2Vu
ZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVf
U0NPUEVfR0VORVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFU
T1IKKworICAgICAgICBhdXRvIGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0m
IHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMi
KTsKKyAgICAgICAgfTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0g
cmVnVDI7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBl
XSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9z
dXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2
bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jl
c29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNv
bnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFs
PFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAg
IC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdp
dGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OworCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsgLy8gaW5jb21pbmcKKyAgICBjb25zdGV4
cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDI7IC8vIGluY29taW5nCisgICAgY29uc3RleHBy
IEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8g
c2xvdyBwYXRoLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7
CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VS
VCh0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdS
ZXR1cm5BZGRyZXNzKCk7CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwg
cmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkp
LCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVt
cExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAo
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IElu
dmFsaWRHUFJSZWcpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlk
R1BSUmVnKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJl
ZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJ
bmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBt
X3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNl
dE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAg
ICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcykgewotICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29w
ZURlcHRoKSksIHJlZ1QxKTsKLQotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAg
ICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKLSAgICAgICAgewotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSks
IHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAg
ICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKLSAgICAgICAgfQotICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNjb3BlR1BSID09IHJlZ1QwKTsK
KyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0
T2ZMb2NhbFNjb3BlRGVwdGgoKSksIHJlZ1QxKTsKKworICAgICAgICBMYWJlbCBsb29wID0gaml0
LmxhYmVsKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVn
VDEpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRP
Zk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDEpOworICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsKKyAgICAgICAgZG9u
ZS5saW5rKCZqaXQpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSkgewpAQCAtMTg4MiwxMiArMTkzMSwxMSBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAg
ICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMg
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2Jh
bE9iamVjdEdQUik7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAg
ICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwg
bV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpT
R2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1Qx
KSk7Ci0gICAgICAgICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAg
ICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0
T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0dsb2Jh
bE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTg5NywxMSArMTk0NSwxMSBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAogICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhp
Y2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAg
ICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKQotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxP
YmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAg
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9m
ZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0xOTA5LDcgKzE5
NTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAg
ICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVk
Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0xOTE5LDgzICsxOTY3LDQ1
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDAp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBl
bHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSks
IHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdU
MSk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGF1
dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAgICAg
ICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKKyAg
ICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICBub3RD
YXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICB9CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2Jh
bFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAg
IGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0
Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0
Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5r
KCZqaXQpOwogICAgIH0KIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHVi
KHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2
ZV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwog
fQogCi0jZGVmaW5lIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkg
XAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jlc29sdmVf
c2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAg
ICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBl
KSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAot
ICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhyZXNvbHZlVHlw
ZSwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0K
LUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0j
dW5kZWYgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3Io
Vk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBj
YW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIC8vIFRoZSBmYXN0IHBhdGgg
YWxyZWFkeSBwdXNoZWQgdGhlIHJldHVybiBhZGRyZXNzLgogI2lmIENQVShYODZfNjQpCkBAIC0y
MDM0LDcgKzIwNDQsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwo
aGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNv
bHZlX3Njb3BlIik7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZv
aWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCiB7CkBAIC0yMDYyLDI3NiArMjA3MSwxMzMgQEAg
dm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBv
cGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKIH0KIAotI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVj
b2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dl
dFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0g
bWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3Qg
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOworICAg
IFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAotICAgIGF1dG8g
ZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
c2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNr
aW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVn
VDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJS
ZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwot
Ci0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAt
PiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwotICAgICAgICAgICAg
fSkpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5z
dHJ1Y3Rpb24pOwogCi0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7Ci0g
ICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlz
T3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJ
bW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJl
YXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxp
bmUubGluayh0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAg
ICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQs
IG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwg
VGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSwgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1p
dEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFu
ZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVn
VDApOwotICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwg
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8v
IFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVz
b2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIH0KKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZt
KSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwg
Q2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CiAg
ICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAg
ICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwg
ZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNO
b3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0Vu
ZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdl
dFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAK
LQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAg
aXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
LCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
Z1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19
Ci0KLSNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCi12b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQot
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNj
b3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgYXV0
byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0p
IHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9z
Y29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKIAotICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0g
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0g
ICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVH
ZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9t
X3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY29wZUdQUiA9IHJlZ1QyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZz
ZXRHUFIgPSByZWdUNTsKIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsKLSAg
ICAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0gICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Ynl0ZWNvZGUpOwogCi0jZGVmaW5lIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlw
ZSkgb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBz
dGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAg
Rk9SX0VBQ0hfUkVTT0xWRV9UWVBFKEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSAgICAgICAg
fTsKLSN1bmRlZiBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRh
T2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zm
c2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRh
T2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKLSAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBjb2RlOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAg
ICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAgIGVsc2Ug
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElT
dHViKGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IpOworCisgICAgZW1pdE5ha2VkTmVhckNh
bGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9u
YWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAg
ICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsg
d2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICB1c2luZyBNZXRhZGF0YSA9
IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAg
IFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUp
KTsKLQotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKLQotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFk
ZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFH
UFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7CiAKLSAg
ICBKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0gICAgYXV0byBl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90
IG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUo
c2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIo
WmVybywgcmVnVDEpKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSkpOwotICAgIH07CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAg
IGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRh
ZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIp
OworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25D
aGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9W
YXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewog
ICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2lu
dCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2Jq
ZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6
Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07
CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3Bl
cmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0g
ICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVy
YW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
b3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAg
ICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBv
cGVyYW5kR1BSKSB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdp
c3RlcikpOwotICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwot
ICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVz
KCkpLCByZWdUMCk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAg
ICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNr
aW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLQotICAgICAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJl
Z1QwOwotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAg
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAgICBq
aXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAg
ICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVy
biBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIC8vIFN0cnVjdHVy
ZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1
cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNv
bHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBq
aXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KSk7CisKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+
KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIHNj
b3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQp
KSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QxKTsKKwogICAgICAgICAgICAgaWYg
KEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJy
YW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0
SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7
CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVy
VGhhbk9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsK
KyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZM
aW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAg
ICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxv
YWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworCisgICAg
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubmVnMzIocmVnVDEpOworICAgICAg
ICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgICAgICBq
aXQubG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9m
TGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlZ1QwKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAg
ICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJl
Z1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8
IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAv
LyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1w
dHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElm
RW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JK
RUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOwotICAgICAgICAgICAg
ZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAgIGRvVmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0
T2ZPcGVyYW5kKCkpLCByZWdUMyk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9
PSBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1t
MzIoMyksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5hZGRQdHIoc2NvcGVHUFIsIHJlZ1QzKTsK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAo
KSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2Ug
TW9kdWxlVmFyOgpAQCAtMjM0MSw4NiArMjIwNyw2MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNv
bHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5k
OwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAg
ICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJl
c29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0g
ICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mR2V0UHV0SW5mbygpKSwgcmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8g
VDAKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAg
ICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQ
cm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOwor
CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0ds
b2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9w
ZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0
cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
anVtcCgpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAK
LSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAg
ICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAg
c3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBz
dG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0
YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRP
ZkZpcnN0QnVja2V0KCkpKTsKIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dl
dF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFt
ZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZl
VHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dl
dF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwK
LSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNv
bHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2
bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVz
b2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBc
Ci0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5F
UkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29w
ZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlz
IGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVj
YXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4
Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNDI5LDcgKzIyNzIs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAjZW5kaWYKIAog
ICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1l
dGFkYXRhR1BSID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IHJlZ1Q1OwogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIApAQCAtMjQ0OSw3ICsy
MjkyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIENh
bGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2Vw
dGlvbkNoZWNrID0gaml0LmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAg
ICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlciwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQo
cmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE1ldGFkYXRhOjpvZmZz
ZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAg
ICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51
bWJlclRhZ1JlZ2lzdGVyKTsKIAogI2lmIENQVShYODZfNjQpCkBAIC0yNDY5LDg4ICsyMzEyLDc3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1
ZmZlci5saW5rKGp1bXBUb0hhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsK
IH0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAs
IG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpT
VmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCBy
ZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NP
Zk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lk
IEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qg
b3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAg
ICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAg
IEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAg
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7
Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAg
UmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBl
bWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNo
IChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1
Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3Ry
dWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwg
cmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAg
ICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3
ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVj
dC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNo
ZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJl
KCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJl
Z1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEp
KTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIp
OwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAo
KSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAg
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAg
ICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
KyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1l
c0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpKTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNv
bnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVU
eXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNj
b3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2so
cmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dElu
Zm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSkgeworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRP
bmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5k
KCksIHJlZ1QwKTsKKworICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2Rl
Lm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFRE
WiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1p
dCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQ
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2lu
dGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7Cisg
ICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3Rv
cmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2Nv
cGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCBy
ZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAg
ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSkpOworCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgTW9kdWxlVmFyOgpAQCAtMjU2NCw1OCArMjM5Niw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChy
ZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRv
RW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAg
ICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8v
IExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0g
ICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYg
d2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJp
bmRpbmcuCi0KLSAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAg
IGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFBy
b3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sg
c2VlcyBDbG9zdXJlVmFyLyBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3
ZSBjYW4gY29tcGlsZSB0aGluZ3MKKyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3Ms
IHNpbmNlIHdlJ3ZlIHByb3ZlbiB0aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3Jl
IGEgQ2xvc3VyZVZhciwKKyAgICAvLyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIu
IElmIHdlJ3JlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMg
Q2xvc3VyZVZhcgorICAgIC8vIGlmIHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3Qg
ZmlyZWQuIElmIGl0IGlzIGZpcmVkLCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQg
ZG9lc24ndAorICAgIC8vIG1hdHRlciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAg
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2Rl
KENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2
ZWRDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAg
IGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0
SW5mbygpLCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAg
SnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJv
cGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNl
KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKIAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAg
IG5vdEdsb2JhbFZhci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOwor
CiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2Jh
bExleGljYWxWYXIubGluayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBm
YWxzZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjYyNCwxOCArMjQ1MCwyMSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGll
ZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcikgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAg
ICAgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFs
bCBsaW5rZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNl
ZSBNb2R1bGVWYXIuCiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlf
cHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAg
IH0gZWxzZSB7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRv
U2NvcGUsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChi
eXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAt
MjY1Miw3ICsyNDgxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmpl
Y3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBE
RkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmpl
Y3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
LSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82
NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNzAxLDcgKzI1MzAsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVz
cyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyNTg4LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0
ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2Zp
ZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7CkBAIC0yNzY3LDcgKzI1OTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50
ZXJuYWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46
Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IApAQCAtMjgyMyw3ICsyNjUxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2Vu
dW1lcmF0bwogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNv
ZGUubV9tb2RlOwpAQCAtMjgzOSwxMSArMjY2NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX25leHQoY29uc3QgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8v
IFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVj
aWFsIGNhc2UgaXQgaWYgd2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFk
YXRhLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3du
U3RydWN0dXJlTW9kZSkgeworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok93blN0cnVjdHVyZU1vZGUpIHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdU
MzsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAgICAgICAgb3BlcmF0
aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JH
UFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MigofkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgJiBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spKSk7CiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgbG9hZDhGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1l
cmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSwgc2NyYXRjaEdQUik7
CisgICAgICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIE9wRW51bWVy
YXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKKwogICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpLCBpbmRleEdQUik7CiAgICAgICAgIG9wZXJh
dGlvbkNhc2VzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwogCkBAIC0yODgxLDc4ICsyNzE0
LDg3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25l
Q2FzZXM7CiAKLSAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5l
RW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gyID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0
Y2gyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JH
ZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihtb2RlLCBzY3JhdGNoMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eU5hbWUsIHByb3BlcnR5R1BSKTsKIAotICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNz
KCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVy
YXRvck1ldGFkYXRhKCksIHNjcmF0Y2gyKTsKKyAgICBvcjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7
CisgICAgc3RvcmU4VG9NZXRhZGF0YShzY3JhdGNoMiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdl
dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwoYmFzZUdQUikpOwogICAgIC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVu
Y29kZWQgdmFsdWUuCi0gICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0
MzIoTm9uWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwor
ICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHNj
cmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKIAogICAgIC8vIENo
ZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDMpOwotICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgc2NyYXRjaDEpOworICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBKdW1wIHN0cnVjdHVyZU1p
c21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKIAog
ICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
ZGV4LCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgc2NyYXRjaDIp
OwogICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBp
bmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9m
TGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkp
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFn
ZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7Ci0gICAg
bG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwot
CisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHNjcmF0
Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwg
c2NyYXRjaDIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVz
RWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAg
ICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0
IG9mIGxpbmUKICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBz
dWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbmVnMzIocmVnVDMpOwotICAgIHNpZ25F
eHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2VHUFIpOworICAgIHN1YjMyKEFkZHJl
c3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBuZWczMihzY3JhdGNoMik7CisgICAgc2lnbkV4
dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKICAgICBjb25zdGV4cHIgaW50cHRyX3Qg
b2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gb2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQpICogc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwot
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwg
c2NyYXRjaDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7
CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgc3RydWN0dXJlTWlzbWF0Y2gu
bGluayh0aGlzKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0
YS5tX2VudW1lcmF0b3JNZXRhZGF0YSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVj
dHVyZU1pc21hdGNoKSwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBpc05vdE93blN0cnVjdHVyZU1v
ZGUubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUpKTsKKyAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBzY3JhdGNo
MywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsK
ICAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHByb3BlcnR5R1BSKTsKIAogICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOwotICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOwor
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2Ny
YXRjaDEpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAg
LTI5NjEsMTAgKzI4MDMsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRf
YnlfCiAgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0ZXIpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
T3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Ci12b2lkIEpJVDo6ZW1p
dF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25U
eXBlIGdlbmVyYWxDYXNlKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBT
bG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3Bl
cnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQogewotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9
IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKQEAgLTI5NzMsNyArMjgxNCw5IEBAIHZvaWQgSklUOjpl
bWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW0KICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QwKTsKLSAgICBvcjgocmVnVDAs
IEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBs
b2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVu
dW1lcmF0b3JNZXRhZGF0YSgpLCByZWdUMSk7CisgICAgb3IzMihyZWdUMCwgcmVnVDEpOworICAg
IHN0b3JlOFRvTWV0YWRhdGEocmVnVDEsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9m
ZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAKQEAgLTMwNjIsNiArMjkwNSwxMyBAQCB2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiAgICAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbi5saW5rKHRoaXMpOwogfQogCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihHUFJS
ZWcgb3duZXIpCit7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmll
ckJyYW5jaCh2bSgpLCBvd25lciwgc2VsZWN0U2NyYXRjaEdQUihvd25lcikpOworICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAm
dm0oKSwgb3duZXIpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzYsOSArMjM2LDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgog
ICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlQ2VsbCkpIHsKICAgICAgICAgICAgICAgICBp
ZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAogICAgICAgICAgICAg
ICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwKLSAgICAgICAgICAgICAgICAg
ICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nh
c3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5l
QWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2Fz
dDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgewogCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2Vu
ZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChzdHVi
SW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOworICAgICAgICAgICAgICAgICAgICBi
b29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5n
dGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHBy
b3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aChsb2NrZXIpOwpAQCAtMjQ5LDggKzI0OSw4
IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nh
c2U6OkFycmF5TGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChp
c0pTU3RyaW5nKGJhc2VDZWxsKSkgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNo
ZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGlu
ZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pOworICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVB
Y2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbyk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRl
T3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
c3R1YkluZm8uaW5pdFN0cmluZ0xlbmd0aChsb2NrZXIpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgICAgICAm
JiAhc2xvdC53YXRjaHBvaW50U2V0KCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5u
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICAgICAmJiAhbG9hZFRh
cmdldEZyb21Qcm94eSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGlu
ZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3Moc3R1YkluZm8sIHN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5l
cmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwog
ICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Qu
c2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
LT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zm
c2V0KCkpOwpAQCAtNzMxLDExICs3MzEsMTEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlUHV0QnkoSgogICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9w
ZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVu
c2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxm
UHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQorICAgICAgICAg
ICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFj
ZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQogICAgICAgICAgICAg
ICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkK
ICAgICAgICAgICAgICAgICAgICAgJiYgIWlzUHJveHkpIHsKICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUs
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRl
ZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShj
b2RlQmxvY2ssIHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwg
cHV0S2luZCkpOwpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFz
ZQogICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQogICAgICAgICAgICAg
ICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewotICAg
ICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTZWxmSW5BY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAg
Ym9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFj
Y2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlm
IChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNF
dmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Qu
c2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3Rh
cnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKQEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBD
YWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJV
bmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBk
YXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlu
a0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAgIHJldmVydENh
bGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyODI2NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDI0ICs0Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMg
aml0OwotCi0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwotCi0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LnByZXBhcmVD
YWxsT3BlcmF0aW9uKHZtKTsKLQotICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb24gPSBq
aXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwotCi0gICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIodm0pOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgcGF0Y2hCdWZmZXIu
bGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9v
a3VwRXhjZXB0aW9uSGFuZGxlcikpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbiIpOwotfQotCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVS
b2xsYmFja0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKQEAgLTc3
LDI0ICs1OSw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGEKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5k
bGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2siKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhj
ZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0jaWYg
Q1BVKFg4Nl82NCkKLSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIg
KiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjplc3ApOwotI2VsaWYgQ1BVKEFS
TTY0KQotICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIs
IENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKLSNlbmRpZgotCi0gICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNU
SVRodW5rKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlv
bkdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjb250aW51YXRpb24sIENvZGVMb2Nh
dGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7Ci0gICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAicG9wVGh1bmtTdGFj
a1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAg
ICBDQ2FsbEhlbHBlcnMgaml0OwpAQCAtMTM3LDYgKzEwMSw0MiBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoCiAKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNl
cHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50
cnlGcmFtZSk7CisKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZt
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24o
dm0pOworCisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJh
dGlvblB0clRhZyk7CisKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CisKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlv
biwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25I
YW5kbGVyKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uIik7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdl
bmVyYXRvcihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworI2lmIENQVShYODZf
NjQpCisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9m
KENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKKyNlbGlmIENQVShBUk02NCkKKyAg
ICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhl
bHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIENDYWxsSGVscGVyczo6SnVtcCBj
b250aW51YXRpb24gPSBqaXQuanVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7
CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0
b3IpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY29udGludWF0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInBvcFRodW5rU3RhY2tQcmVzZXJ2
ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVGFnVHlwZT4K
IGlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIHBvaW50ZXJHUFIsIFRhZ1R5cGUgdGFnKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NywxMiArMzcsMTIgQEAgY2xhc3MgVk07CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFu
ZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKFZNJik7Ci1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRI
YW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRs
ZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9y
KFZNJik7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNG
b3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAj
aW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCkBAIC0zNzAsMTMgKzM3MSwyMiBAQCBpbmxp
bmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAgICAgCiAgICAgY29kZUJsb2Nr
LT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwogCisgICAgaWYgKGNvZGVCbG9j
ay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIGlmIChSZWZQ
dHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2Rl
QmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICAgICAgY29kZUJsb2Nr
LT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxD
b2RlKGNvZGVCbG9jayk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmppdE5leHRJbnZvY2F0aW9u
KCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlm
ICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIENP
REVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJ0aHJlc2hv
bGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50
ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAg
SklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIAotICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0gSklU
V29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFkeVBsYW5zRm9y
Vk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlOjpC
YXNlbGluZSkpOworICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0gSklUV29y
a2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0o
dm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSwgSklU
Q29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkpOwogCiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBpbGVkLiIpOwpAQCAt
NDY2LDggKzQ3NiwxMCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmco
KSAmJiBjb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJu
KCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0uZ2V0TG9vcEhpbnRFeGVjdXRpb25D
b3VudGVyKHBjKTsKICAgICAgICAgKnB0ciArPSBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50
ZXIoKS5tX2FjdGl2ZVRocmVzaG9sZDsKLSAgICAgICAgaWYgKCpwdHIgPj0gT3B0aW9uczo6ZWFy
bHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpCisgICAgICAgIGlmICgqcHRyID49IE9w
dGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSB7CisgICAgICAgICAg
ICBjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEoQ29uY3VycmVudEpTTG9ja2VyKGNvZGVCbG9jay0+
bV9sb2NrKSk7IC8vIFdlJ3JlIHJldHVybmluZyB0byB0aGUgT1NSIGVudHJ5IGNvZGUgaGVyZSwg
d2hpY2ggZXhwZWN0cyB0aGF0IG1faml0RGF0YSBpcyBub3QgbnVsbC4KICAgICAgICAgICAgIExM
SU5UX1JFVFVSTl9UV08oTExJbnQ6OmZ1enplclJldHVybkVhcmx5RnJvbUxvb3BIaW50RW50cnlw
b2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUo
KSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTIsMTAgKzEwMTIsNiBA
QCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9w
KG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9w
V2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJp
dGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1l
dGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0g
ICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAgICAgZ2V0KG1fc3Jj
RHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBJbnQzMlRhZywg
LnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29k
ZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwgc3JjRHN0IGluIHQyCiAgICAg
ICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAgICAgICBzdG9yZWkgdDIsIFBheWxv
YWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJv
ZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBB
cml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6
CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9u
ZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJl
dHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmgg
dHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgZ2V0
KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEs
IHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90SW50CiAgICAgYnRp
eiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDIKLSAgICB1cGRhdGVB
cml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxl
KE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAgICByZXR1cm4gKEludDMyVGFn
LCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEsIExvd2VzdFRhZywgLm9wTmVn
YXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUo
QXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRl
LCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1cm4odDEsIHQyKQogCiAub3BO
ZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkKIAogbWFjcm8gYmluYXJ5T3BD
dXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb25BbmRT
dG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29k
ZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0
YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAg
IG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmlu
YXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFk
YXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAgICAgICAgZ2V0KG1fbGhzLCB0
MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2Rl
TmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQy
LCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAub3AxTm90SW50CiAgICAgICAgIGJp
bmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQ
cm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3Ry
dWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZ2V0KG1fZHN0LCB0MikK
ICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0MSwgdDAsIC5zbG93LCB0MikK
ICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwxMiBAQCBtYWNybyBiaW5hcnlP
cEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJpYSB0MiwgTG93ZXN0VGFnLCAu
c2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5vdEludE9wMkRvdWJsZQogICAg
ICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0
aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0
MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AyRG91
YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAgICBhcml0aFByb2ZpbGUoQXJp
dGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAub3Ax
Tm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAgICAgICAgIGZpaTJkIHQwLCB0
MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9w
Y29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGlu
dCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90LgogICAgICAgICBnZXQobV9k
c3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQ
cm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQ
cm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAgICAg
ICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKICAgICAgICAgZG91
YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEzIEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9K
SVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMsIGExCiAgICAgICAgICAgICBjQ2FsbDIo
X2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRweiByMCwgLnJlY292ZXIKLQogICAgICAg
ICAgICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAgIyBCYXNlbGluZSB1c2VzIExMSW50J3Mg
UEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQgcG9vbC4KKyAgICAgICAgICAgIGxvYWRw
IENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2ppdERh
dGFbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjpKSVREYXRhOjptX2ppdENv
bnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAgIGlmIEFSTTY0RQogICAgICAgICAgICAg
ICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRl
TWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50cnkpICogUHRyU2l6ZSwgYTIKICAgICAg
ICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgSlNFbnRyeVB0clRh
ZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEs
IE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2Vy
T3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNv
ZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQot
ICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0
eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fc3JjRHN0
LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQogICAgICAgICBtZXRhZGF0YSh0
MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNv
ZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDEsIC5zbG93KQogICAgICAg
ICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEgdDEsIFtjZnIsIHQwLCA4XQotICAg
ICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVV
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDIsIHQzKQog
ICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTExMzQsMTEgKzExMzUsNiBAQCBl
bmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLQotICAgIG1hY3JvIHVwZGF0
ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRh
OjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgZW5k
Ci0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNp
emUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0xMTQ2LDEyICsxMTQyLDEyIEBA
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwKICAgICBidGl6IHQzLCAw
eDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MwogICAgIG9ycSBudW1iZXJUYWcs
IHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVV
bmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAg
cmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0cXogdDMsIG51bWJlclRhZywgLm9w
TmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAwLCB0MwotICAgIHVwZGF0ZUFy
aXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2Zp
bGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEsIHQyKQogICAgIHJldHVybih0MykK
IAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNjAsNiBAQCBtYWNybyBiaW5hcnlPcEN1
c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bj
b2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFk
YXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAotICAgICAgICBtYWNybyBw
cm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAg
ICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQogICAgICAgICBnZXQobV9saHMsIHQy
KQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkKQEAgLTExNzcs
NyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAg
ICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQx
LCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQor
ICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2Zp
bGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLm9wMU5vdEludDoK
QEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVO
YW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93CiAgICAgICAgIGFkZHEg
bnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKLSAgICAgICAgcHJvZmlsZShBcml0
aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQyKQogICAgICAgICBq
bXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkludDoKLSAgICAgICAgcHJvZmls
ZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQyKQogICAgICAgICBj
aTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQy
KQpAQCAtMTIwNCw5ICsxMTk2LDkgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVO
YW1lLCBvcAogCiAgICAgLm9wMk5vdEludDoKICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRl
ZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIGlzIGRlZmluaXRlbHkgbm90LgotICAgICAgICBn
ZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93Ci0gICAgICAg
IHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0
aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0MikKKyAg
ICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBhZGRx
IG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCkBAIC0xNTE4LDcgKzE1MTAsNyBA
QCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV9pZF9kaXJlY3QsCiBlbmQpCiAKICMgVGhl
IGJhc2Ugb2JqZWN0IGlzIGV4cGVjdGVkIGluIHQzCi1tYWNybyBwZXJmb3JtR2V0QnlJREhlbHBl
cihvcGNvZGVTdHJ1Y3QsIG1vZGVNZXRhZGF0YU5hbWUsIHZhbHVlUHJvZmlsZU5hbWUsIHNsb3dM
YWJlbCwgc2l6ZSwgbWV0YWRhdGEsIHJldHVybikKK21hY3JvIHBlcmZvcm1HZXRCeUlESGVscGVy
KG9wY29kZVN0cnVjdCwgbW9kZU1ldGFkYXRhTmFtZSwgdmFsdWVQcm9maWxlTmFtZSwgc2xvd0xh
YmVsLCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuLCBkb0FycmF5UHJvZmlsZSkKICAgICBtZXRhZGF0
YSh0MiwgdDEpCiAgICAgbG9hZGIgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFk
YXRhTmFtZSUubW9kZVt0Ml0sIHQxCiAKQEAgLTE1NDYsNyArMTUzOCw3IEBAIG1hY3JvIHBlcmZv
cm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwKIC5vcEdldEJ5SWRBcnJheUxlbmd0aDoKICAg
ICBiYm5lcSB0MSwgY29uc3RleHByIEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCwgLm9wR2V0QnlJ
ZFVuc2V0CiAgICAgbW92ZSB0MywgdDAKLSAgICBhcnJheVByb2ZpbGUoJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRhTmFtZSUuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmls
ZSwgdDAsIHQyLCB0NSkKKyAgICBkb0FycmF5UHJvZmlsZSh0MCwgdDIsIHQ1LCB0MSkKICAgICBi
dGl6IHQwLCBJc0FycmF5LCBzbG93TGFiZWwKICAgICBidGl6IHQwLCBJbmRleGluZ1NoYXBlTWFz
aywgc2xvd0xhYmVsCiAgICAgbG9hZENhZ2VkSlNWYWx1ZShKU09iamVjdDo6bV9idXR0ZXJmbHlb
dDNdLCB0MCwgdDEpCkBAIC0xNTY4LDcgKzE1NjAsMTAgQEAgZW5kCiBsbGludE9wV2l0aE1ldGFk
YXRhKG9wX2dldF9ieV9pZCwgT3BHZXRCeUlkLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwg
bWV0YWRhdGEsIHJldHVybikKICAgICBnZXQobV9iYXNlLCB0MCkKICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlQ2VsbChzaXplLCB0MCwgdDMsIC5vcEdldEJ5SWRTbG93KQotICAgIHBlcmZvcm1H
ZXRCeUlESGVscGVyKE9wR2V0QnlJZCwgbV9tb2RlTWV0YWRhdGEsIG1fcHJvZmlsZSwgLm9wR2V0
QnlJZFNsb3csIHNpemUsIG1ldGFkYXRhLCByZXR1cm4pCisgICAgcGVyZm9ybUdldEJ5SURIZWxw
ZXIoT3BHZXRCeUlkLCBtX21vZGVNZXRhZGF0YSwgbV9wcm9maWxlLCAub3BHZXRCeUlkU2xvdywg
c2l6ZSwgbWV0YWRhdGEsIHJldHVybiwKKyAgICAgICAgbWFjcm8gKGNlbGxBbmRJbmRleGluZ1R5
cGUsIG1ldGFkYXRhLCBzY3JhdGNoMSwgc2NyYXRjaDIpCisgICAgICAgICAgICBhcnJheVByb2Zp
bGUoT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUsIGNlbGxBbmRJbmRleGluZ1R5
cGUsIG1ldGFkYXRhLCBzY3JhdGNoMSkKKyAgICAgICAgZW5kKQogCiAub3BHZXRCeUlkU2xvdzoK
ICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9nZXRfYnlfaWQpCkBAIC0zMDAyLDcg
KzI5OTcsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX29wZW4sIE9wCiAKICAg
ICBsb2FkVmFyaWFibGUoZ2V0LCBtX2l0ZXJhdG9yLCB0MykKICAgICBidHFueiB0Mywgbm90Q2Vs
bE1hc2ssIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3cKLSAgICBwZXJmb3JtR2V0QnlJ
REhlbHBlcihPcEl0ZXJhdG9yT3BlbiwgbV9tb2RlTWV0YWRhdGEsIG1fbmV4dFByb2ZpbGUsIC5p
dGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZU5leHRB
bmREaXNwYXRjaCkKKyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yT3BlbiwgbV9t
b2RlTWV0YWRhdGEsIG1fbmV4dFByb2ZpbGUsIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNs
b3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZU5leHRBbmREaXNwYXRjaCwgbWFjcm8oYSwgYiwgYywg
ZCkgZW5kKQogCiAuaXRlcmF0b3JPcGVuR2VuZXJpY0dldE5leHRTbG93OgogICAgIGNhbGxTbG93
UGF0aChfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fZ2V0X25leHQpCkBAIC0zMDYxLDcg
KzMwNTYsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wCiAKICAg
ICBsb2FkVmFyaWFibGUoZ2V0LCBtX3ZhbHVlLCB0MykKICAgICBidHFueiB0Mywgbm90Q2VsbE1h
c2ssIC5nZXREb25lU2xvdwotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JOZXh0
LCBtX2RvbmVNb2RlTWV0YWRhdGEsIG1fZG9uZVByb2ZpbGUsIC5nZXREb25lU2xvdywgc2l6ZSwg
bWV0YWRhdGEsIHN0b3JlRG9uZUFuZEptcFRvR2V0VmFsdWUpCisgICAgcGVyZm9ybUdldEJ5SURI
ZWxwZXIoT3BJdGVyYXRvck5leHQsIG1fZG9uZU1vZGVNZXRhZGF0YSwgbV9kb25lUHJvZmlsZSwg
LmdldERvbmVTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1ZSwg
bWFjcm8oYSwgYiwgYywgZCkgZW5kKQogCiAuZ2V0RG9uZVNsb3c6CiAgICAgY2FsbFNsb3dQYXRo
KF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9nZXRfZG9uZSkKQEAgLTMwODYsNyArMzA4
MSw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3JfbmV4dCwgT3AKICAgICAjIFJl
bG9hZCB0aGUgbmV4dCByZXN1bHQgdG1wIHNpbmNlIHRoZSBnZXRfYnlfaWQgYWJvdmUgbWF5IGhh
dmUgY2xvYmJlcmVkIHQzLgogICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fdmFsdWUsIHQzKQogICAg
ICMgV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0aGUgaXRlcmF0b3IgcmVzdWx0IGlzIGEgY2Vs
bCBoZXJlIHNpbmNlIHdlIHdpbGwgaGF2ZSB0aHJvd24gYW4gZXJyb3IgYmVmb3JlLgotICAgIHBl
cmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JOZXh0LCBtX3ZhbHVlTW9kZU1ldGFkYXRhLCBt
X3ZhbHVlUHJvZmlsZSwgLmdldFZhbHVlU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlVmFsdWVB
bmREaXNwYXRjaCkKKyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV92
YWx1ZU1vZGVNZXRhZGF0YSwgbV92YWx1ZVByb2ZpbGUsIC5nZXRWYWx1ZVNsb3csIHNpemUsIG1l
dGFkYXRhLCBzdG9yZVZhbHVlQW5kRGlzcGF0Y2gsIG1hY3JvKGEsIGIsIGMsIGQpIGVuZCkKIAog
LmdldFZhbHVlU2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRv
cl9uZXh0X2dldF92YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBj
b3B5KQpAQCAtMTQyMCw3ICsxNDIwLDggQEAgZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQo
aW5jcmVtZW50LCBhY3Rpb24pCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgYmFk
ZGlzIGluY3JlbWVudCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQorICAgIGxvYWRwIENv
ZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyW3QwXSwgdDAKKyAgICBiYWRkaXMgaW5jcmVt
ZW50LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQog
ICAgIGFjdGlvbigpCiAgICAgLmNvbnRpbnVlOgogZW5kCkBAIC0xNTAzLDcgKzE1MDQsOCBAQCBt
YWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgY29kZUJsb2NrR2V0
dGVyKHQxKQogICAgIGNvZGVCbG9ja1NldHRlcih0MSkKICAgICBpZiBub3QgKENfTE9PUCBvciBD
X0xPT1BfV0lOKQotICAgICAgICBiYWRkaXMgNSwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNv
dW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MV0sIC5jb250aW51
ZQorICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MV0sIHQw
CisgICAgICAgIGJhZGRpcyA1LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0
MF0sIC5jb250aW51ZQogICAgICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgICAgIG1vdmUgY2Zy
LCBhMAogICAgICAgICAgICAgbW92ZSBQQywgYTEKQEAgLTE2MTcsMTQgKzE2MTksMTQgQEAgbWFj
cm8gZnVuY3Rpb25Jbml0aWFsaXphdGlvbihwcm9maWxlQXJnUwogICAgICMgb3B0aW1hbCB3YXkg
Zm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIG1vcmUgdGhhbiBmaXZlIHJlZ2lzdGVycyBhdmFp
bGFibGUKICAgICAjIGZvciBhcmJpdHJhcnkgdXNlIGluIHRoZSBpbnRlcnByZXRlci4KICAgICBs
b2FkaSBDb2RlQmxvY2s6Om1fbnVtUGFyYW1ldGVyc1t0MV0sIHQwCi0gICAgYWRkcCAtcHJvZmls
ZUFyZ1NraXAsIHQwICMgVXNlIGFkZGkgYmVjYXVzZSB0aGF0J3Mgd2hhdCBoYXMgdGhlIHBlZXBo
b2xlCisgICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQwCiAgICAgYXNzZXJ0KG1hY3JvIChvaykg
YnBndGVxIHQwLCAwLCBvayBlbmQpCiAgICAgYnRweiB0MCwgLmFyZ3VtZW50UHJvZmlsZURvbmUK
ICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzICsgRml4ZWRWZWN0
b3I6Om1fc3RvcmFnZSArIFJlZkNvdW50ZWRBcnJheTo6bV9kYXRhW3QxXSwgdDMKICAgICBidHB6
IHQzLCAuYXJndW1lbnRQcm9maWxlRG9uZSAjIFdoZW4gd2UgY2FuJ3QgSklULCB3ZSBkb24ndCBh
bGxvY2F0ZSBhbnkgYXJndW1lbnQgdmFsdWUgcHJvZmlsZXMuCiAgICAgbXVscCBzaXplb2YgVmFs
dWVQcm9maWxlLCB0MCwgdDIgIyBBYWFhYWhoaGghIE5lZWQgc3RyZW5ndGggcmVkdWN0aW9uIQog
ICAgIGxzaGlmdHAgMywgdDAgIyBvZmZzZXQgb2YgbGFzdCBKU1ZhbHVlIGFyZ3VtZW50cyBvbiB0
aGUgc3RhY2suCi0gICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2Zp
bGUgYXJyYXkgaW4gQ29kZUJsb2NrOjptX2FyZ3VtZW50VmFsdWVQcm9maWxlcy4KKyAgICBhZGRw
IHQyLCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBpbiB0aGUgdmFs
dWUgcHJvZmlsZSBhcnJheS4KIC5hcmd1bWVudFByb2ZpbGVMb29wOgogICAgIGlmIEpTVkFMVUU2
NAogICAgICAgICBsb2FkcSBUaGlzQXJndW1lbnRPZmZzZXQgLSA4ICsgcHJvZmlsZUFyZ1NraXAg
KiA4W2NmciwgdDBdLCB0MgpAQCAtMjU2Myw2ICsyNTY1LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRl
ZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUs
IFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBs
b2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwg
dGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5k
CisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9u
IGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRv
d3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlm
IFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmll
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRp
YyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25z
dCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cisg
ICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAg
ICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVh
YmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1
cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICsz
NSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5
cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJs
b2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7
CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
PgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywg
Y29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVu
dGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRU
eXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYWNoZWRUeXBlcy5oIgogCisjaW5jbHVk
ZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVDYWNoZUVycm9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgiCkBAIC0xOTE4LDYgKzE5MTksOCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1W
YWx1ZVByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYWx1ZVByb2ZpbGVzOyB9CiAgICAg
dW5zaWduZWQgbnVtQXJyYXlQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJyYXlQcm9m
aWxlczsgfQorICAgIHVuc2lnbmVkIG51bUJpbmFyeUFyaXRoUHJvZmlsZXMoKSBjb25zdCB7IHJl
dHVybiBtX251bUJpbmFyeUFyaXRoUHJvZmlsZXM7IH0KKyAgICB1bnNpZ25lZCBudW1VbmFyeUFy
aXRoUHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsgfQog
CiBwcml2YXRlOgogICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKQEAgLTE5NTIs
NiArMTk1NSw4IEBAIHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX251bVZhbHVlUHJvZmlsZXM7
CiAgICAgdW5zaWduZWQgbV9udW1BcnJheVByb2ZpbGVzOworICAgIHVuc2lnbmVkIG1fbnVtQmlu
YXJ5QXJpdGhQcm9maWxlczsKKyAgICB1bnNpZ25lZCBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsK
IAogICAgIENhY2hlZE1ldGFkYXRhVGFibGUgbV9tZXRhZGF0YTsKIApAQCAtMjE2MCw2ICsyMTY1
LDggQEAgQUxXQVlTX0lOTElORSBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZQogICAgICwgbV9y
YXJlRGF0YShjYWNoZWRDb2RlQmxvY2sucmFyZURhdGEoZGVjb2RlcikpCiAgICAgLCBtX3ZhbHVl
UHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bVZhbHVlUHJvZmlsZXMoKSkKICAgICAsIG1fYXJy
YXlQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVtQXJyYXlQcm9maWxlcygpKQorICAgICwgbV9i
aW5hcnlBcml0aFByb2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1CaW5hcnlBcml0aFByb2ZpbGVz
KCkpCisgICAgLCBtX3VuYXJ5QXJpdGhQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVtVW5hcnlB
cml0aFByb2ZpbGVzKCkpCiB7CiB9CiAKQEAgLTIzMzcsNiArMjM0NCw4IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29kZUIKICAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29k
ZUJsb2NrLm1faGFzQ2hlY2twb2ludHM7CiAgICAgbV9udW1WYWx1ZVByb2ZpbGVzID0gY29kZUJs
b2NrLm1fdmFsdWVQcm9maWxlcy5zaXplKCk7CiAgICAgbV9udW1BcnJheVByb2ZpbGVzID0gY29k
ZUJsb2NrLm1fYXJyYXlQcm9maWxlcy5zaXplKCk7CisgICAgbV9udW1CaW5hcnlBcml0aFByb2Zp
bGVzID0gY29kZUJsb2NrLm1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgbV9udW1V
bmFyeUFyaXRoUHJvZmlsZXMgPSBjb2RlQmxvY2subV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgp
OwogCiAgICAgbV9tZXRhZGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEu
Z2V0KCkpOwogICAgIG1fcmFyZURhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVE
YXRhLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgw
LDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNp
ZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0
aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVl
IG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5t
X2FyaXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0
YS5tX2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAg
QVNTRVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9
CiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAg
c3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxs
KTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29u
c3RydWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4
ZWN1dGFibGVCYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDYgQEAgYm9v
bCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEludDMyLCBldmFsVGhyZXNo
b2xkTXVsdGlwbGllciwgMTAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1h
eGltdW1FdmFsQ2FjaGVhYmxlU291cmNlTGVuZ3RoLCAyNTYsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIFwKLSAgICB2KEJvb2wsIHJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3Bv
aW50cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVj
dXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JCYXNlbGluZSwgMTAwMCwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihJbnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVj
a3BvaW50c0ZvclVwcGVyVGllcnMsIDUwMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkBA
IC01MzIsNiArNTMxLDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAg
ICB2KEJvb2wsIHVzZURhdGFJQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9v
bCwgdXNlRGF0YUlDSW5PcHRpbWl6aW5nSklULCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihCb29sLCB1c2VEYXRhSUNTaGFyaW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisg
ICAgdihCb29sLCB1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICBcCiAgICAgLyogRmVhdHVyZSBGbGFncyAqL1wKICAgICBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0
RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Niw3ICszOTYsOSBAQCB2b2lkIFNj
cmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpCiAgICAgaWYgKE9wdGlvbnM6OnZhbGlk
YXRlQnl0ZWNvZGUoKSkKICAgICAgICAgY29kZUJsb2NrLT52YWxpZGF0ZSgpOwogCi0gICAgaWYg
KE9wdGlvbnM6OnVzZUxMSW50KCkpCisgICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJh
c2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFz
ZWxpbmVDb2RlKQorICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVD
b2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGVsc2UgaWYgKE9wdGlvbnM6
OnVzZUxMSW50KCkpCiAgICAgICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKICAgICBlbHNlCiAg
ICAgICAgIHNldHVwSklUKHZtLCBjb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9w
dGltaXplQWZ0ZXJXYXJtVXAoKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTElu
dFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgICAg
ICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldh
cm1VcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlv
bnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVB
ZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJl
c2hvbGRSZWFjaGVkKCkKQEAgLTY1LDkgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1p
emVTb29uKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9C
QlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JC
QlFPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQo
T3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29uKCkpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1p
emVTb29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICBzdHJ1Y3QgT1NS
RW50cnlEYXRhIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBD
b3VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRp
ZXJVcENvdW50LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBUaWVyVXBDb3VudDo6VGllclVw
Q291bnQoKQogewotICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdP
cHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgIHNldE5ld1RocmVzaG9sZChPcHRp
b25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogfQogCiBUaWVyVXBD
b3VudDo6flRpZXJVcENvdW50KCkgPSBkZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAodWlu
dDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgYWZ0ZXIgd2Fy
bS11cC4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9N
R09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9s
ZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0K
IAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtOTAs
MTQgKzkwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24odWlu
dDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgbmV4dCBpbnZv
Y2F0aW9uLiIpOwotICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCwgbnVsbHB0cik7CisgICAgICAg
IHNldE5ld1RocmVzaG9sZCgwKTsKICAgICB9CiAKICAgICB2b2lkIG9wdGltaXplU29vbih1aW50
MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6
dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBzb29uLiIpOwog
ICAgICAgICAvLyBGSVhNRTogTmVlZCBhZGp1c3RtZW50IG9uY2Ugd2UgZ2V0IG1vcmUgaW5mb3Jt
YXRpb24gYWJvdXQgd2FzbSBmdW5jdGlvbnMuCi0gICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRp
b25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAg
ICAgfQogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRp
b25SZXN1bHQodWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0
KQpJbmRleDogU291cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvQmFnLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw2ICs2NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG90aGVyLm1faGVh
ZCA9IG51bGxwdHI7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBCYWcm
IG9wZXJhdG9yPShCYWc8VCwgVT4mJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh1bndyYXBw
ZWRIZWFkKCkgPT0gb3RoZXIudW53cmFwcGVkSGVhZCgpKQorICAgICAgICAgICAgcmV0dXJuICp0
aGlzOworCisgICAgICAgIEJhZyBkZXN0cm95OworICAgICAgICBkZXN0cm95Lm1faGVhZCA9IHVu
d3JhcHBlZEhlYWQoKTsKKyAgICAgICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgpOwor
ICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOworCisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisKICAgICB+QmFnKCkKICAgICB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9QYWNrZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQu
aAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL1dURi93dGYvUGFja2VkLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Niw3ICsxODYsMTAgQEAgcHVibGljOgogICAgIH0KIAogICAgIFQqIG9wZXJh
dG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQotICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuICpnZXQoKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUgPSBUPgorICAg
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3ZvaWRfdjxVPiwgVSY+Ojp0eXBlIG9w
ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQorCiAgICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhZ2V0KCk7IH0KIAogICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVy
YXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIg
aW50ZWdlciB0eXBlcy4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkocmV2aXNp
b24gMjgyNjc1KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkod29ya2lu
ZyBjb3B5KQpAQCAtNzc2LDE3ICs3NzYsMTggQEAgZW5kCiAKICMgRklYTUU6IG5lZWQgdG8gZml4
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg3MDMgdG8gZW5hYmxl
IHRoaXMgb24gTGludXgvTUlQUy4KIGRlZiBydW5CeXRlY29kZUNhY2hlSW1wbChvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMsICphZGRpdGlvbmFsRW52KQotICAgIGlmICgkaG9zdE9TID09ICJk
YXJ3aW4iKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGUiCi0gICAgZWxz
aWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAkYXJjaGl0ZWN0dXJlICE9ICJtaXBzIikKLSAgICAg
ICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlWFhYWFhYIgotICAgIGVsc2UKLSAgICAg
ICAgc2tpcAotICAgICAgICByZXR1cm4KLSAgICBlbmQKKyAgICAjIE9PUFMKKyAgICAjaWYgKCRo
b3N0T1MgPT0gImRhcndpbiIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2Fj
aGUiCisgICAgI2Vsc2lmICgkaG9zdE9TID09ICJsaW51eCIgJiYgJGFyY2hpdGVjdHVyZSAhPSAi
bWlwcyIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhYWFgiCisg
ICAgI2Vsc2UKKyAgICAjICAgIHNraXAKKyAgICAjICAgIHJldHVybgorICAgICNlbmQKIAotICAg
IG9wdGlvbnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMKLSAgICBhZGRSdW5Db21t
YW5kKCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1j
YWNoZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5k
LCAkYmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxl
RXJyb3JIYW5kbGVyLCAqYWRkaXRpb25hbEVudikKKyAgICAjb3B0aW9ucyA9IEJBU0VfT1BUSU9O
UyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RTcGVj
aWZpY1JlcXVpcmVkT3B0aW9ucworICAgICNhZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIs
IFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIp
LnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5kLCAkYmVuY2htYXJrLnRvX3NdICsg
b3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyLCAqYWRkaXRp
b25hbEVudikKIGVuZAogCiBkZWYgcnVuQnl0ZWNvZGVDYWNoZSgqb3B0aW9uYWxUZXN0U3BlY2lm
aWNPcHRpb25zKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439056</attachid>
            <date>2021-09-23 10:12:57 -0700</date>
            <delta_ts>2021-09-23 17:44:06 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>535013</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QucmIJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBA
QCBvcF9ncm91cCA6UHJvZmlsZWRCaW5hcnlPcCwKICAgICAgICAgb3BlcmFuZFR5cGVzOiBPcGVy
YW5kVHlwZXMsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6
IEJpbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJv
ZmlsZS4qCiAgICAgfQogCiBvcF9ncm91cCA6VmFsdWVQcm9maWxlZEJpbmFyeU9wLApAQCAtMzUz
LDcgKzM1Myw3IEBAIG9wX2dyb3VwIDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgICAgICBz
cmNEc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAg
IGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBV
bmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg2LDcgKzM4
Niw3IEBAIG9wIDpuZWdhdGUsCiAgICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCiAgICAg
fSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9m
aWxlLAorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAK
IG9wIDpub3QsCkBAIC00NzgsNiArNDc4LDcgQEAgb3AgOmdldF9ieV9pZCwKICAgICBtZXRhZGF0
YTogewogICAgICAgICBtb2RlTWV0YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCiAgICAgICAg
IHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2Zp
bGUsCiAgICAgfQogCiBvcCA6Z2V0X2J5X2lkX3dpdGhfdGhpcywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRz
Rm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNzMsNiArNzMsMjggQEAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JJbXBsKEJ5
dGVjbwogICAgICAgICByZXR1cm4gJm1ldGFkYXRhLm1fcHJvZmlsZTsKIH0KIAordGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgordWludHB0cl90IHZhbHVlUHJvZmlsZU9mZnNldEZvcih1bnNp
Z25lZCBjaGVja3BvaW50SW5kZXgpCit7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRl
eCk7CisgICAgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3Jf
b3BlbikgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNl
IE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpn
ZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRQcm9maWxlKCk7
CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKworICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9p
dGVyYXRvcl9uZXh0KSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAg
ICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZk5leHRSZXN1bHRQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVy
YXRvck5leHQ6OmdldERvbmU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRG9u
ZVByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVy
biBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRl
ZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgCisgICAgICAgIHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgp
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZU1ldGFkYXRhPgogYm9vbCBoYXNWYWx1
ZVByb2ZpbGVGb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9p
bnRJbmRleCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDExICsx
MTQsNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICBSRUxFQVNFX0FT
U0VSVCghaXNPbkxpc3QoKSk7CiB9CiAKLUNvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCi17Ci0gICAgcmV0dXJuIENvZGVMb2Nh
dGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwotfQot
CiBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQ
YXRoU3RhcnQoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RhdGFJQygpKTsKQEAgLTIyNSw2
ICsyMjAsMTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldE1heEFyZ3VtZW50Q291bnRJbgogICAg
IG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSB2YWx1ZTsKIH0KIAorQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVjdCgpICYmIGlzVGFpbENhbGwoKSk7CisgICAg
cmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPih1LmNvZGVJ
Qy5tX2Zhc3RQYXRoU3RhcnQpOworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZN
JiB2bSkKIHsKICAgICBhdXRvIGhhbmRsZVNwZWNpZmljQ2FsbGVlID0gWyZdIChKU0Z1bmN0aW9u
KiBjYWxsZWUpIHsKQEAgLTI5OCwyMyArMjk5LDExIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRG
cmFtZVNodWZmbGVEYXRhKGMKICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7
CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0
aEltcGwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVw
YXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjpl
bWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMm
IGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlD
IHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFy
ZUZvclRhaWxDYWxsKQogewotICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7Ci0gICAgaWYg
KGlzRGF0YUlDKCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9
IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKLSAgICAgICAgdS5kYXRhSUMu
bV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7Ci0gICAgfQotCi0gICAgYXV0byBm
YXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7
Ci0KICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogCi0gICAgaWYgKGlzRGF0
YUlDKCkpIHsKKyAgICBpZiAodXNlRGF0YUlDID09IFVzZURhdGFJQzo6WWVzKSB7CiAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hSZWdpc3RlcigpOwogICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZkNh
bGxlZSgpKSwgc2NyYXRjaEdQUik7IAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5
bW9ycGhpYzsKQEAgLTMyMyw3ICszMTIsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplCiAgICAgICAgICAgICBnb1BvbHltb3JwaGljID0gaml0LmJyYW5jaFRlc3RQ
dHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihwb2x5bW9ycGhpY0NhbGxlZU1hc2spKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNh
bGxlZUdQUikpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAg
ICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwog
ICAgICAgICAgICAgZ29Qb2x5bW9ycGhpYy5saW5rKCZqaXQpOyAvLyBQb2x5bW9ycGhpYyBzdHVi
IGhhbmRsZXMgdGFpbCBjYWxsIHN0YWNrIHByZXAuCiAgICAgICAgICAgICBqaXQuZmFySnVtcChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1vbm9tb3JwaGlj
Q2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKQEAgLTMzNiwxNCArMzI1LDE2IEBA
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwg
Y2FsbGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxw
dHIpKSk7CiAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChp
c1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHBy
ZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyVGFpbENhbGwo
KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgdS5jb2Rl
SUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVy
bmFsUHRyVGFnPihjYWxsKTsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOwor
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKICAgICAgICAgfSk7
CiAgICAgfQogCkBAIC0zNTMsMTMgKzM0NCwzNCBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplCiBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1p
dEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KCFpc1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVl
R1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgbnVsbHB0cik7CisgICAgc2V0VXNlc0Rh
dGFJQ3ModXNlRGF0YUlDKTsKKworICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOworICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5r
SW5mb0dQUik7CisgICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJ
bmZvR1BSOworICAgIH0KKworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxs
cHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRh
aWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExp
bmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNh
bGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJ
bXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgV1RGTW92ZShw
cmVwYXJlRm9yVGFpbENhbGwpKTsKKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsK
KyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgSW52YWxp
ZEdQUlJlZywgVXNlRGF0YUlDOjpObywgaXNUYWlsQ2FsbCgpLCBXVEZNb3ZlKHByZXBhcmVGb3JU
YWlsQ2FsbCkpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjpl
bWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZv
R1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxw
dHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxz
ZSwgbnVsbHB0cik7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJl
cGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAh
PSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBq
aXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RG
TW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKIH0KIAogdm9pZCBDYWxsTGlua0luZm86OmVtaXRT
bG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0KQpAQCAtMzY5LDE3ICszODEsMzIgQEAg
dm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIAogICAgIGppdC5jYWxsKEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxE
ZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKK3ZvaWQgQ2FsbExpbmtJbmZvOjpl
bWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUikKK3sKKyAgICBqaXQubW92ZShjYWxsTGlua0luZm9HUFIsIEdQUkluZm86OnJlZ1Qy
KTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9m
ZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworfQorCit2
b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExp
bmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUikKK3sKKyAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2Vk
Q2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIHNldFVwQ2FsbCh1bmxpbmtlZENhbGxM
aW5rSW5mby5jYWxsVHlwZSwgY2FsbGVlR1BSKTsKKyAgICBtX2RvbmVMb2NhdGlvbiA9IHVubGlu
a2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBpZiAodW5saW5rZWRDYWxsTGlua0lu
Zm8uZnJhbWVTaHVmZmxlRGF0YSkgeworICAgICAgICAvLyBGSVhNRTogSXQnZCBiZSBuaWNlIGlm
IHRoaXMganVzdCB3ZXJlIGEgcmVmY291bnRlZCBkYXRhIHN0cnVjdHVyZS4KKyAgICAgICAgbV9m
cmFtZVNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlu
a2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpOworICAgIH0KKyAgICBzZXRVc2VzRGF0
YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBj
YWxsTGlua0luZm9HUFI7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRy
eVB0clRhZz4oKSk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiBqaXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7
CiAKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKIAotICAgIGF1dG8gZmFzdFBh
dGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAg
ICAgYXV0byBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlv
biA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwp
OwpAQCAtMzk3LDcgKzQyNCw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENh
bGxGYXMKIAogICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGppdC5h
ZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0
UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQ
YXRoU3RhcnQpOworICAgICAgICB1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CiAgICAgfSk7CiAK
ICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEganVtcCB0byB0aGUg
c2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0MywxMSBAQCBj
bGFzcyBKU0Z1bmN0aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogc3RydWN0IENhbGxG
cmFtZVNodWZmbGVEYXRhOwogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87CisKIGNsYXNz
IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZv
PiB7CiBwdWJsaWM6Ci0gICAgZW51bSBDYWxsVHlwZSB7CisgICAgZW51bSBDYWxsVHlwZSA6IHVp
bnQ4X3QgewogICAgICAgICBOb25lLAogICAgICAgICBDYWxsLAogICAgICAgICBDYWxsVmFyYXJn
cywKQEAgLTE2NSw2ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGVlR1BSID0gY2Fs
bGVlR1BSOwogICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIFVubGlua2Vk
Q2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7
CisKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVHUFI7IH0K
ICAgICAKICAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgewpAQCAtMTczLDEzICsx
NzcsMTYgQEAgcHVibGljOgogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIEND
YWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CisgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVTRURfUkVUVVJO
OworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlD
RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9V
TlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwg
VXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIs
IEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcg
Y2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJz
Jik7CiAgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2b2lkIGVtaXRT
bG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOworICAgIHN0YXRpYyB2b2lkIGVtaXREYXRhSUNT
bG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwogICAg
IHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURhdGFJQzo6
WWVzOyB9CkBAIC0yMDMsNyArMjEwLDYgQEAgcHVibGljOgogICAgICAgICBtX2FsbG93U3R1YnMg
PSBmYWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PiBmYXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gc2xvd1BhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IGRvbmVMb2NhdGlvbigpOwogCkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9zbG93U3R1YiA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgSklUU3R1YlJvdXRpbmUqIHNs
b3dTdHViKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Nsb3dTdHViLmdldCgpOwotICAgIH0K
LQogICAgIGJvb2wgc2Vlbk9uY2UoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faGFzU2VlblNo
b3VsZFJlcGF0Y2g7CkBAIC0zMDgsOSArMzA5LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUpOwogICAgIH0KIAotICAgIHVpbnQzMl90
KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpOwogICAgIH0KIAogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKCkKQEAgLTM4MSw3ICszODIsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRl
OgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFy
dDsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3Rh
cnQoKTsKKwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxv
Y2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQ
YXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC0zOTcsNiArNDAw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJu
YWxQdHJUYWc+IG1fY2FsbExvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247CiAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoU3RhcnQ7CisgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRoU3Rh
cnQ7CiAgICAgICAgIH0gY29kZUlDOwogICAgIH0gdTsKIApAQCAtNDI0LDYgKzQyOCwxMyBAQCBp
bmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpCiAgICAgcmV0dXJuIGNhbGxM
aW5rSW5mby5jb2RlT3JpZ2luKCk7CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbyB7
CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHksIG9ubHkgdXNl
ZCBieSBiYXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBDb2RlT3JpZ2lu
LgorICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307CisKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzA4LDYgKzMwOCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0
dXJlKiAKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJh
bWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7CisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50
ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKICAgICAKICAgICB2
bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KQEAgLTMxOCw3ICszMjAsNiBAQCB2
b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDCiAgICAgZmluaXNoQ3JlYXRp
b25Db21tb24odm0pOwogCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGppdEFmdGVy
V2FybVVwKCk7CiAKICAgICBpZiAob3RoZXIubV9yYXJlRGF0YSkgewogICAgICAgICBjcmVhdGVS
YXJlRGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC0zNTksNyArMzYwLDkgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVy
KCkpOwogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSk7Ci0gICAgCisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENv
ZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKKwogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCku
YWRkKHRoaXMpOwogfQogCkBAIC0zNzAsMTAgKzM3MywxMyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhWTSYgdm0sIFN0cnVjdHVyZSogCiAvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5r
ZWQgYnl0ZWNvZGUgZ2VuZXJhdGlvbi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdl
bmVyYXRlIGNvbnRyb2wKIC8vIGZsb3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFz
b24gZm9yIHRoaXMgaXMgd2UgcmVseSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2Ft
ZSBmb3IKIC8vIGFsbCB0aGUgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2Ug
cmVseSBvbiB0aGlzIGZhY3QgYnkgY2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKLS8vIGlu
c2lkZSBVbmxpbmtlZENvZGVCbG9jay4KKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4gQWxz
bywgQmFzZWxpbmUgSklUIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3Mgb2Yg
YW4gVW5saW5rZWRDb2RlQmxvY2ssCisvLyBzbyB0aGUgYnl0ZWNvZGUgbXVzdCByZW1haW4gdGhl
IHNhbWUgYmV0d2VlbiBDb2RlQmxvY2tzIHNoYXJpbmcgYW4gVW5saW5rZWRDb2RlQmxvY2suCiBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKICAg
ICBKU1Njb3BlKiBzY29wZSkKIHsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7IC8vIFdl
IG5lZWQgdG8gc2V0IHVwIG91ciB2YWx1ZSBwcm9maWxlIHBvaW50ZXJzLgorCiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIApAQCAt
NDcxLDYgKzQ3NywyMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBT
CiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCisgICAgdW5zaWduZWQgYmluYXJ5UHJvZmlsZUlu
ZGV4ID0gMDsKKyAgICB1bnNpZ25lZCB1bmFyeVByb2ZpbGVJbmRleCA9IDA7CisjZGVmaW5lIExJ
TktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBc
CisgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5t
X2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJpbmFy
eVByb2ZpbGVJbmRleCsrKTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElO
S19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAor
ICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9h
cml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKHVuYXJ5UHJv
ZmlsZUluZGV4KyspOyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAg
Zm9yIChjb25zdCBhdXRvJiBpbnN0cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAg
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMs
MTQgKzU1NCwxNCBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAg
ICAgICAgIExJTksoT3BDcmVhdGVQcm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJh
dG9yKQogCi0gICAgICAgIExJTksoT3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAg
IExJTksoT3BEaXYpCi0gICAgICAgIExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0
ZSkKLSAgICAgICAgTElOSyhPcEluYykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElO
S19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklO
QVJZX0FSSVRIX1BST0ZJTEUoT3BNdWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShPcERpdikKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9w
U3ViKQorCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQor
ICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElO
S19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQ
dHIpCiAKQEAgLTc2OSw3ICs3OTAsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBTCiAgICAgLy8gcmVseSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUg
aW4gdGhlb3J5IHBlcm1pdHRlZCB0byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rp
b24gc3RyZWFtIHRvIG1vcmUgYWNjdXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgog
ICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAg
Ly8gSWYgdGhlIGNvbmN1cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhh
c2gsIHRoZW4gY29tcHV0ZSBpdCBoZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAgLTc5Myw2
ICs4MTMsNzYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAg
IG1fb3duZXJFZGdlLnNldCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3Jl
YXRlKHZtLCB0aGlzKSk7CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJh
c2VsaW5lQ29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPiBqaXRDb2RlKQoreworICAgIHNldEpJVENv
ZGUoaml0Q29kZS5jb3B5UmVmKCkpOworCisgICAgeworICAgICAgICBjb25zdCBhdXRvJiBqaXRD
b2RlTWFwID0gdGhpcy0+aml0Q29kZU1hcCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7CisgICAgICAgICAgICBIYW5k
bGVySW5mbyYgaGFuZGxlciA9IGV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAvLyBG
SVhNRTogPHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KKyAgICAgICAgICAgIGhhbmRsZXIubmF0
aXZlQ29kZSA9IGppdENvZGVNYXAuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSku
cmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAg
ICBhdXRvJiBqaXREYXRhID0gZW5zdXJlSklURGF0YShsb2NrZXIpOworCisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGppdERhdGEubV9qaXRDb25zdGFudFBvb2wuaXNFbXB0eSgpKTsKKyAgICAgICAg
aml0RGF0YS5tX2ppdENvbnN0YW50UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5t
X2NvbnN0YW50UG9vbC5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpp
dENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvIGVu
dHJ5ID0gaml0Q29kZS0+bV9jb25zdGFudFBvb2wuYXQoaSk7CisgICAgICAgICAgICBzd2l0Y2gg
KGVudHJ5LnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpH
bG9iYWxPYmplY3Q6CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtp
XSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbzogeworICAgICAg
ICAgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9ICpz
dGF0aWNfY2FzdDxVbmxpbmtlZENhbGxMaW5rSW5mbyo+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0RGF0YS5tX2Nh
bGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJ
bmRleCkpOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+aW5pdGlhbGl6ZURhdGFJQyh2
bSgpLCB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1Qy
KTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gY2FsbExp
bmtJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7CisgICAg
ICAgICAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbyA9
ICpzdGF0aWNfY2FzdDxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKj4oZW50cnkucGF5bG9hZC5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gaml0
RGF0YS5tX3N0dWJJbmZvcy5hZGQodW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlLCBDb2RlT3Jp
Z2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT5pbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8odGhpcywgdW5s
aW5rZWRTdHViSW5mbyk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9v
bFtpXSA9IHN0dWJJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbDogewor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
ZW50cnkucGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0
YW50UG9vbFtpXSA9IGZ1bmN0aW9uRGVjbChpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
RnVuY3Rpb25FeHByOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBq
aXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25FeHByKGluZGV4KTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29k
ZToKKyAgICBjYXNlIE1vZHVsZUNvZGU6CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgbV9z
aG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
dW5jdGlvbkNvZGU6CisgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8g
ZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAgICAg
Ly8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KKyAgICAgICAgbV9zaG91bGRBbHdh
eXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCgpKSAmJiBERkc6Om1pZ2h0
SW5saW5lRnVuY3Rpb24odGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChq
aXRDb2RlLT5tX2lzU2hhcmVhYmxlICYmICF1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2Vk
QmFzZWxpbmVDb2RlICYmIE9wdGlvbnM6OnVzZUJhc2VsaW5lSklUQ29kZVNoYXJpbmcoKSkKKyAg
ICAgICAgdW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSA9IFdURk1v
dmUoaml0Q29kZSk7Cit9CisKIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7CiAgICAgVk0mIHZt
ID0gKm1fdm07CkBAIC04NzMsNiArOTYzLDI3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAorYm9vbCBDb2RlQmxvY2s6OmlzQ29uc3RhbnRPd25l
ZEJ5VW5saW5rZWRDb2RlQmxvY2soVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKK3sKKyAgICAv
LyBUaGlzIG5lZWRzIHRvIGNvcnJlc3BvbmQgdG8gd2hhdCB3ZSBkbyBpbnNpZGUgc2V0Q29uc3Rh
bnRSZWdpc3RlcnMuCisgICAgc3dpdGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihyZWcpKSB7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkludGVnZXI6CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRv
dWJsZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246Ok90aGVyOiB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB1bmxpbmtlZENvZGVCbG9j
aygpLT5nZXRDb25zdGFudChyZWcpOworICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0Nl
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2
YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKGNlbGwtPmluaGVyaXRzPFN5bWJvbFRhYmxlPih2
bSgpKSB8fCBjZWxsLT5pbmhlcml0czxKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4odm0oKSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogVmVjdG9yPHVuc2lnbmVkPiBDb2RlQmxv
Y2s6OnNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogewogICAgIFZNJiB2
bSA9ICptX3ZtOwpAQCAtODkyLDYgKzEwMDMsNyBAQCBWZWN0b3I8dW5zaWduZWQ+IENvZGVCbG9j
azo6c2V0Q29uc3RhbnRSCiAgICAgICAgIHN3aXRjaCAocmVwcmVzZW50YXRpb24pIHsKICAgICAg
ICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CiAgICAg
ICAgICAgICBjb25zdGFudCA9IGdsb2JhbE9iamVjdC0+bGlua1RpbWVDb25zdGFudChzdGF0aWNf
Y2FzdDxMaW5rVGltZUNvbnN0YW50Pihjb25zdGFudC5hc0ludDMyQXNBbnlJbnQoKSkpOworICAg
ICAgICAgICAgQVNTRVJUKGNvbnN0YW50LmlzQ2VsbCgpKTsgLy8gVW5saW5rZWQgQmFzZWxpbmUg
SklUIHJlcXVpcmVzIHRoaXMuCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOgogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjo6SW50ZWdlcjoKQEAgLTE1MTQsNyArMTYyNiw3IEBAIENvZGVCbG9jazo6SklU
RGF0YSYgQ29kZUJsb2NrOjplbnN1cmVKSVQKICAgICByZXR1cm4gKm1faml0RGF0YTsKIH0KIAot
dm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQordm9pZCBD
b2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCkKIHsKICAgICBpZiAoYXV0byogaml0
RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewogICAgICAgICBmb3IgKENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKQpAQCAtMTUyNSw2ICsxNjM3LDIw
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW4KICAgICAgICAgICAg
IHN0dWJJbmZvLT52aXNpdFdlYWtSZWZlcmVuY2VzKGxvY2tlciwgdGhpcyk7CiAgICAgICAgIH0K
ICAgICB9CisKKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRU
eXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICAvLyBWZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBm
aW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3JlIHZpcnR1YWwgY2FsbHMuCisgICAgICAgIGZvciAo
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUq
PihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxDYWxsTGlua0luZm9zKSB7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8tPmlzTGlua2VkKCkpOworICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5mb3JFYWNoRGVwZW5kZW50Q2VsbChbXSAoSlNDZWxsKikgeworICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorCisgICAgfQorI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTUzNCw0NiArMTY2MCw0
NyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAKICAgICB1cGRh
dGVBbGxQcmVkaWN0aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29sIGlzRWxpZ2li
bGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwotICAg
IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8gSWYgQmFzZWxp
bmVKSVQgY29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50
IGV4aXN0cywgd2UgYXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUg
YW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAgICBpZiAoT3B0
aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJl
bnRseUV4ZWN1dGluZyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRD
b2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9w
dGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAgICAgICAgICAgICAgIGlm
IChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9q
aXRDb2RlID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9p
bnQodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRs
ZXJzKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5k
bGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRs
ZXIoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1f
cmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIu
dGFyZ2V0KS5wdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6
ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHVubGlua0luY29taW5n
Q2FsbHMoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhl
c2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGls
ZXIgdGhyZWFkcwotICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5p
bmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2Vy
LCBhbmQgYnl0ZWNvZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5
IGRhdGEgc3RydWN0dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgotICAgICAg
ICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYKKy8vIE9PUFM6IHJlY29u
Y2lsZSB0aGlzCisvLyNpZiBFTkFCTEUoSklUKQorLy8gICAgYm9vbCBpc0VsaWdpYmxlRm9yTExJ
bnREb3duZ3JhZGUgPSBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZTsKKy8vICAgIG1faXNF
bGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7CisvLyAgICAvLyBJZiBCYXNlbGluZUpJ
VCBjb2RlIGlzIG5vdCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhp
c3RzLCB3ZSBhdHRlbXB0CisvLyAgICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFu
ZCByZWluc3RhbGwgTExJbnQgY29kZSB0byBzYXZlIEpJVCBtZW1vcnkuCisvLyAgICBpZiAoT3B0
aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJl
bnRseUV4ZWN1dGluZyh0aGlzKSkgeworLy8gICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXpl
ZENvZGVCbG9jayA9IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKy8vICAgICAgICAgICAgaWYg
KCFvcHRpbWl6ZWRDb2RlQmxvY2stPm1fb3NyRXhpdENvdW50ZXIpIHsKKy8vICAgICAgICAgICAg
ICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKKy8vICAgICAgICAgICAgICAg
ICAgICBtX2ppdENvZGUgPSBudWxscHRyOworLy8gICAgICAgICAgICAgICAgICAgIExMSW50Ojpz
ZXRFbnRyeXBvaW50KHRoaXMpOworLy8gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKKy8vCisvLyAgICAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVy
T2ZFeGNlcHRpb25IYW5kbGVycygpOyBpKyspIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENv
ZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRs
ZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKKy8v
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25z
KCkuYXQodW5saW5rZWRIYW5kbGVyLnRhcmdldCkucHRyKCk7CisvLyAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxh
YmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlv
bi53aWR0aCgpKS5jb2RlKCkpKTsKKy8vICAgICAgICAgICAgICAgICAgICB9CisvLworLy8gICAg
ICAgICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKKy8vCisvLyAgICAgICAgICAg
ICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGNsZWFyIHRoZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4g
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkgYWxsIGNvbXBpbGVyIHRocmVhZHMKKy8vICAgICAgICAg
ICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVp
dGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKKy8vICAg
ICAgICAgICAgICAgICAgICAvLyBwYXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9p
bnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5mb3MuCisvLyAgICAgICAgICAgICAgICAgICAgcmVz
ZXRKSVREYXRhKCk7CisvLyAgICAgICAgICAgICAgICB9IGVsc2UKKy8vICAgICAgICAgICAgICAg
ICAgICBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IHRydWU7CisvLyAgICAgICAgICAg
IH0KKy8vICAgICAgICB9CisvLyAgICB9CisvLworLy8jZW5kaWYKICAgICAKICAgICBpZiAoSklU
Q29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJ
bnRJbmxpbmVDYWNoZXMoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCEhaml0Q29kZSgp
KQotICAgICAgICBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7CisgICAgICAgIGZp
bmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShERkdfSklUKQpA
QCAtMTU5NCw3ICsxNzIxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KAogICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAgICAgICAg
ICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CisgICAgICAgICAgICBj
b3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y291bnQoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgY291bnQg
PSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CkBAIC0xNjc1LDMwICsxODAyLDYgQEAgU3Ry
dWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgogICAgIHJldHVybiBlbnN1cmVK
SVREYXRhKGxvY2tlcikubV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pOwog
fQogCi1KSVRBZGRJQyogQ29kZUJsb2NrOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7
Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2FkZElDcy5hZGQoYXJpdGhQcm9m
aWxlKTsKLX0KLQotSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9tdWxJQ3MuYWRkKGFy
aXRoUHJvZmlsZSk7Ci19Ci0KLUpJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklDKEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3ViSUNz
LmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVROZWdJQyogQ29kZUJsb2NrOjphZGRKSVROZWdJ
QyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1f
bmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJs
b2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKQEAgLTMxMzMsNyArMzIzNiw3IEBAIHVuc2lnbmVk
IENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAg
Y2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdp
c3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291
bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzM0OSwxMyArMzQ1MiwxMyBAQCBCaW5hcnlBcml0
aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2Rl
SUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEFkZD4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX211bDoK
LSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9w
U3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMt
PmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3Bf
ZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0zMzY3LDExICszNDcwLDExIEBAIFVuYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OnVuYXJ5
QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9uZWdh
dGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1f
YXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5jOgotICAgICAgICByZXR1cm4g
JnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAg
cmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAg
ICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEo
dGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEZWM+KCkubWV0
YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMzQ3MiwyMiArMzU3NSwxNiBAQCB2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFz
aWNCbG9ja0JvdW5kYXJpCiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6OnNl
dFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJiBt
YXApIAoteyAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgZW5z
dXJlSklURGF0YShsb2NrZXIpLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1hcCk7Ci19
Ci0KIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW5kUEModm9pZCogcGMp
CiB7CisgICAgaWYgKGF1dG8qIHBjVG9Db2RlT3JpZ2luTWFwID0gbV9qaXRDb2RlLT5wY1RvQ29k
ZU9yaWdpbk1hcCgpKSB7CisgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGNv
ZGVPcmlnaW4gPSBwY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBjKSkKKyAgICAgICAgICAgIHJl
dHVybiBjb2RlT3JpZ2luOworICAgIH0KKwogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0
YS5nZXQoKSkgewotICAgICAgICAgICAgaWYgKGppdERhdGEtPm1fcGNUb0NvZGVPcmlnaW5NYXAp
IHsKLSAgICAgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3Jp
Z2luID0gaml0RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBjKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAg
ICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5m
b3MpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnRhaW5zUEMocGMpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPihzdHViSW5m
by0+Y29kZU9yaWdpbik7CkBAIC0zNTIxLDI4ICszNjE4LDE0IEBAIHN0ZDo6b3B0aW9uYWw8Qnl0
ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKIH0KIAot
aW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKLXsK
LSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXplKCkpIHsKLSAgICBj
YXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkOwot
ICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkICogNDsK
LSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8gMjsK
LSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRocmVzaG9sZDsK
LX0KLQotdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkKK3ZvaWQgQ29kZUJsb2NrOjpq
aXRTb29uKCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRo
cmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSwgdGhp
cyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQodW5saW5rZWRD
b2RlQmxvY2soKS0+dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24o
KSksIHRoaXMpOwogfQogCi12b2lkIENvZGVCbG9jazo6aml0U29vbigpCit2b2lkIENvZGVCbG9j
azo6aml0TmV4dEludm9jYXRpb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXRO
ZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24o
KSksIHRoaXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKDAs
IHRoaXMpOwogfQogCiBib29sIENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2lu
dHMoKSBjb25zdApAQCAtMzU4OCwyOCArMzY3MSw4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wTWF0
aElDU3RhdHMoKQogICAgIGRvdWJsZSBudW1TdWJzID0gMC4wOwogICAgIGRvdWJsZSB0b3RhbFN1
YlNpemUgPSAwLjA7CiAKLSAgICBhdXRvIGNvdW50SUNzID0gWyZdIChDb2RlQmxvY2sqIGNvZGVC
bG9jaykgewotICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IGNvZGVCbG9jay0+bV9qaXREYXRh
LmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKEpJVEFkZElDKiBhZGRJQyA6IGppdERhdGEtPm1f
YWRkSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtQWRkcysrOwotICAgICAgICAgICAgICAgIHRv
dGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMgOiBqaXREYXRhLT5tX211bElDcykgewotICAgICAg
ICAgICAgICAgIG51bU11bHMrKzsKLSAgICAgICAgICAgICAgICB0b3RhbE11bFNpemUgKz0gbXVs
SUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUTmVn
SUMqIG5lZ0lDIDogaml0RGF0YS0+bV9uZWdJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1OZWdz
Kys7Ci0gICAgICAgICAgICAgICAgdG90YWxOZWdTaXplICs9IG5lZ0lDLT5jb2RlU2l6ZSgpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJVFN1YklDKiBzdWJJQyA6IGppdERh
dGEtPm1fc3ViSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtU3VicysrOwotICAgICAgICAgICAg
ICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQorICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVCbG9jayopIHsKKyAgICAgICAg
Ly8gRklYTUU6IFdlIG5lZWQgdG8gcmUtaW1wbGVtZW50IHRoaXMgdXNpbmcgSklUQ29kZS4KICAg
ICB9OwogICAgIGhlYXAoKS0+Zm9yRWFjaENvZGVCbG9jayhjb3VudElDcyk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCBjbGFzcyBKU01vZHVsZUVudmlyb25tZW50OwogY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTExJbnRQcm90b3R5cGVMb2FkQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50OwogY2xhc3MgTWV0YWRhdGFUYWJsZTsKLWNsYXNzIFBDVG9D
b2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBjbGFzcyBTdHJ1Y3R1
cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAogREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEpOwogCkBAIC0xNTgsNyArMTU4
LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUoKSBjb25zdCB7
IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgogICAgIHZvaWQg
c2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAKICAgICB1bnNp
Z25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBAIHB1YmxpYzoKICAgICB1bnNp
Z25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAgdW5zaWduZWQg
bnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVja3BvaW50cygp
ICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRyZXNzT2ZOdW1Q
YXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUu
Z2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3Rh
bGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJl
YWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rl
ciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5nIGJhY2sgdGhl
IG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBgdGhpc2AgYW5k
IHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0KLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFy
eVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gcmVn
Lm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2OCwyMyArMjU5
LDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUKQogICAgIHN0cnVjdCBKSVREYXRhIHsKICAg
ICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5m
bz4gbV9zdHViSW5mb3M7Ci0gICAgICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7Ci0gICAgICAg
IEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Ci0gICAgICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7
Ci0gICAgICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7CiAgICAgICAgIEJhZzxDYWxsTGlua0lu
Zm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5r
SW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxs
czsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIFBhY2tl
ZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3Jw
aGljQ2FsbHM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hK
dW1wVGFibGVzOwotICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2lu
TWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJl
Z2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVl
U2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAg
ICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNl
dHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAg
IEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIp
CiAgICAgewogICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkpCkBAIC0yOTMsMjIgKzI4Miw3
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyJik7CiAKLSAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5
QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJv
ZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwot
ICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLQotICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0
eXBlPgotICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxl
KSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklU
TXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFk
ZEpJVE11bElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0
b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVROZWdJQyogYWRkTWF0
aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9m
aWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5l
cmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0
aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX2ppdERhdGEpOyB9CiAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRk
U3R1YkluZm8oQWNjZXNzVHlwZSwgQ29kZU9yaWdpbik7CiAKQEAgLTMyMiwxOCArMjk2LDggQEAg
cHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXpl
IHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5r
SW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRK
SVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3Qg
SklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlciku
bV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7
CiAKLSAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29k
ZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9p
ZCogcGMpOwogCiAgICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0KTsK
QEAgLTQ3MiwxMCArNDM2LDEyIEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1
bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBt
X2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJv
ZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8
ICFPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50VmFsdWVQcm9m
aWxlcy5zaXplKCk7CisgICAgICAgIAogICAgIH0KIAogICAgIFZhbHVlUHJvZmlsZSYgdmFsdWVQ
cm9maWxlRm9yQXJndW1lbnQodW5zaWduZWQgYXJndW1lbnRJbmRleCkKQEAgLTU2OSw4ICs1MzUs
MTAgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBj
b25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJl
ZykgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9
CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBy
ZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXS5nZXQoKTsgfQorICAgIGJvb2wgaXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9j
ayhWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdDsKICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oaW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNv
bnN0YW50c1ZlY3RvckJ1ZmZlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fY29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRh
dGFNZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRl
Y2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAg
ICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5z
aXplKCk7IH0KQEAgLTU5NSwyMiArNTYzLDIyIEBAIHB1YmxpYzoKICAgICAvLyBKdW1wIFRhYmxl
cwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBTaW1wbGVKdW1wVGFibGUmIHN3aXRjaEp1bXBUYWJs
ZShpbnQgdGFibGVJbmRleCkKKyAgICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5lU3dpdGNoSnVt
cFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICB2b2lkKiBiYXNlbGluZUpJ
VENvbnN0YW50UG9vbCgpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEp
OwotICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSAmJiBqaXRUeXBlKCkgPT0gSklU
VHlwZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX2ppdENvbnN0
YW50UG9vbC5kYXRhKCk7CiAgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJl
ck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0
dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsg
fQogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBTdHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1
bXBUYWJsZShpbnQgdGFibGVJbmRleCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
aml0RGF0YSk7Ci0gICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlc1t0YWJsZUluZGV4XTsKLSAgICB9CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgU3RyaW5n
SnVtcFRhYmxlJiBkZmdTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAg
IFNpbXBsZUp1bXBUYWJsZSYgZGZnU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKICNl
bmRpZgorCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVz
KCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYg
dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1f
dW5saW5rZWRDb2RlLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsg
fQogCkBAIC02MzIsMjEgKzYwMCwyMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrSWZKSVRU
aHJlc2hvbGRSZWFjaGVkKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNv
dW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgICAgIHJldHVy
biBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRo
aXMpOwogICAgIH0KIAogICAgIHZvaWQgZG9udEpJVEFueXRpbWVTb29uKCkKICAgICB7Ci0gICAg
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgpOworICAgICAgICBt
X2xsaW50RXhlY3V0ZUNvdW50ZXItPmRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgfQogCi0gICAg
aW50MzJfdCB0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOwotICAgIHZvaWQgaml0
QWZ0ZXJXYXJtVXAoKTsKICAgICB2b2lkIGppdFNvb24oKTsKKyAgICB2b2lkIGppdE5leHRJbnZv
Y2F0aW9uKCk7CiAKICAgICBjb25zdCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhl
Y3V0ZUNvdW50ZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRl
Q291bnRlcjsKKyAgICAgICAgcmV0dXJuICptX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgfQog
CiAgICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6dHVwbGU8U3RydWN0dXJlSUQsIHVuc2lnbmVkPiwg
Rml4ZWRWZWN0b3I8TExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
Pj4gU3RydWN0dXJlV2F0Y2hwb2ludE1hcDsKQEAgLTc5Nyw2ICs3NjQsNyBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2Vy
UmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJu
ICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRGVi
dWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fZGVi
dWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1C
cmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFr
cG9pbnRzKQpAQCAtODM4LDYgKzgwNiw3IEBAIHB1YmxpYzoKICAgICBtdXRhYmxlIENvbmN1cnJl
bnRKU0xvY2sgbV9sb2NrOwogCiAgICAgYm9vbCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZDsgLy8g
Tm90IGEgYml0ZmllbGQgYmVjYXVzZSB0aGUgSklUIHdhbnRzIHRvIHN0b3JlIHRvIGl0LgorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7IH0K
IAogI2lmIEVOQUJMRShKSVQpCiAgICAgdW5zaWduZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6
IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCkBAIC05MDcsMTYgKzg3NiwxMiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX21ldGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKTsgfQogCi0gICAgYm9v
bCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCi0gICAgewotICAg
ICAgICAvLyBTb21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhl
IGxvb3BzIHRoZXkgcnVuLgotICAgICAgICByZXR1cm4gIW1fdW5saW5rZWRDb2RlLT5pc0J1aWx0
aW5GdW5jdGlvbigpOwotICAgIH0KKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6
emluZ0Vhcmx5UmV0dXJuKCkgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmxvb3BIaW50c0FyZUVs
aWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQg
ZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBm
aW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7CisgICAgdm9pZCBmaW5hbGl6ZUpJVElu
bGluZUNhY2hlcygpOwogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgdm9pZCB0YWxs
eUZyZXF1ZW50RXhpdFNpdGVzKCk7CkBAIC0xMDEwLDcgKzk3NSw5IEBAIHByaXZhdGU6CiAgICAg
U3RydWN0dXJlV2F0Y2hwb2ludE1hcCBtX2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXA7CiAgICAg
UmVmUHRyPEpJVENvZGU+IG1faml0Q29kZTsKICNpZiBFTkFCTEUoSklUKQorcHVibGljOgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxKSVREYXRhPiBtX2ppdERhdGE7Citwcml2YXRlOgogI2VuZGlmCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gVGhpcyBpcyByZWxldmFudCB0byBub24tREZHIGNv
ZGUgYmxvY2tzIHRoYXQgc2VydmUgYXMgdGhlIHByb2ZpbGVkIGNvZGUgYmxvY2sKQEAgLTEwMjks
NyArOTk2LDcgQEAgcHJpdmF0ZToKIAogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1fYWx0
ZXJuYXRpdmU7CiAgICAgCi0gICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVj
dXRlQ291bnRlcjsKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIqIG1fbGxpbnRFeGVjdXRl
Q291bnRlciB7IG51bGxwdHIgfTsKIAogICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2pp
dEV4ZWN1dGVDb3VudGVyOwogICAgIHVpbnQzMl90IG1fb3NyRXhpdENvdW50ZXI7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDEwIEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHSklUQ29k
ZS5oIgogI2luY2x1ZGUgIlVubGlua2VkTWV0YWRhdGFUYWJsZUlubGluZXMuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC00MCw5ICs0Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQ
cm9maWxlKGNvbnMKICAgICBpZiAobV9tZXRhZGF0YSkgewogI2RlZmluZSBWSVNJVChfX29wKSBc
CiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkg
eyBmdW5jKG1ldGFkYXRhLm1fcHJvZmlsZSwgZmFsc2UpOyB9KTsKLQogICAgICAgICBGT1JfRUFD
SF9PUENPREVfV0lUSF9WQUxVRV9QUk9GSUxFKFZJU0lUKQotCiAjdW5kZWYgVklTSVQKIAogICAg
ICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPE9wSXRlcmF0b3JPcGVuPihbJl0gKGF1dG8mIG1ldGFk
YXRhKSB7IApAQCAtNTcsNyArNTcsNiBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJv
ZmlsZShjb25zCiAgICAgICAgICAgICBmdW5jKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLCBmYWxz
ZSk7CiAgICAgICAgIH0pOwogICAgIH0gICAKLQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgpAQCAtOTksNCArOTgsMzggQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxM
aW5rSW5mbwogICAgIH0KIH0KIAorI2lmIEVOQUJMRShKSVQpCitBTFdBWVNfSU5MSU5FIGNvbnN0
IEpJVENvZGVNYXAmIENvZGVCbG9jazo6aml0Q29kZU1hcCgpCit7CisgICAgQVNTRVJUKGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJh
c2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1faml0Q29kZU1hcDsKK30KKworQUxX
QVlTX0lOTElORSBTaW1wbGVKdW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTd2l0Y2hKdW1w
VGFibGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+
KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKwor
QUxXQVlTX0lOTElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTdHJpbmdT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5l
SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKERGR19KSVQpCitBTFdBWVNfSU5MSU5F
IFNpbXBsZUp1bXBUYWJsZSYgQ29kZUJsb2NrOjpkZmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxl
SW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxERkc6OkpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3
aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisKK0FMV0FZU19JTkxJTkUgU3RyaW5nSnVt
cFRhYmxlJiBDb2RlQmxvY2s6OmRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PERGRzo6SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwogICAgIAog
ICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwQW5kQWN0aXZhdGUoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spOworCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVC
bG9jaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdl
LCBtX2NvZGVCbG9jayk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRpb25Db3VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIGJvb2wgRXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1Zh
cmlhbnQ+OjoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdGhyZXNob2xkID0g
Y2xpcHBlZFRocmVzaG9sZChjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIDog
bnVsbHB0ciwgdGhyZXNob2xkKTsKKyAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKHRo
cmVzaG9sZCk7CiAgICAgCiAgICAgbV9jb3VudGVyID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXRo
cmVzaG9sZCk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGlvbkNvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZvcmNlU2xvd1BhdGhDb25jdXJy
ZW50bHkoKTsgLy8gSWYgeW91IHVzZSB0aGlzLCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNl
dCgpIG1heSBzdGlsbCByZXR1cm4gZmFsc2UuCiAgICAgYm9vbCBjaGVja0lmVGhyZXNob2xkQ3Jv
c3NlZEFuZFNldChDb2RlQmxvY2sqKTsKICAgICBib29sIGhhc0Nyb3NzZWRUaHJlc2hvbGQoKSBj
b25zdCB7IHJldHVybiBtX2NvdW50ZXIgPj0gMDsgfQotICAgIHZvaWQgc2V0TmV3VGhyZXNob2xk
KGludDMyX3QgdGhyZXNob2xkLCBDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldE5ld1RocmVzaG9s
ZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJsb2NrKiA9IG51bGxwdHIpOwogICAgIHZvaWQgZGVm
ZXJJbmRlZmluaXRlbHkoKTsKICAgICBkb3VibGUgY291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxkb3VibGU+KG1fdG90YWxDb3VudCkgKyBtX2NvdW50ZXI7IH0KICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKQEAgLTg2LDEzICs4Niw5IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgVCBjbGlwcGVkVGhy
ZXNob2xkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFQgdGhyZXNob2xkKQorICAgIHN0
YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoVCB0aHJlc2hvbGQpCiAgICAgewotICAgICAgICBpbnQz
Ml90IG1heFRocmVzaG9sZDsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnJhbmRvbWl6ZUV4ZWN1dGlv
bkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpICYmIGdsb2JhbE9iamVjdCkKLSAgICAgICAgICAg
IG1heFRocmVzaG9sZCA9IGdsb2JhbE9iamVjdC0+d2Vha1JhbmRvbUludGVnZXIoKSAlIG1heGlt
dW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbWF4VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVj
a3BvaW50cygpOworICAgICAgICBpbnQzMl90IG1heFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRp
b25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKTsKICAgICAgICAgaWYgKHRocmVzaG9sZCA+IG1h
eFRocmVzaG9sZCkKICAgICAgICAgICAgIHRocmVzaG9sZCA9IG1heFRocmVzaG9sZDsKICAgICAg
ICAgcmV0dXJuIHRocmVzaG9sZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksNyBAQCBzdHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0IHsKIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCkgPT0gMTIpOwogCiBzdHJ1
Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIHsKKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRN
b2RlTWV0YWRhdGFBcnJheUxlbmd0aCwgYXJyYXlQcm9maWxlKTsgfQogICAgIEFycmF5UHJvZmls
ZSBhcnJheVByb2ZpbGU7CiB9Owogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRh
ZGF0YUFycmF5TGVuZ3RoKSA9PSAxMik7CkBAIC04OCw2ICs4OSw3IEBAIHVuaW9uIEdldEJ5SWRN
b2RlTWV0YWRhdGEgewogICAgICAgICBHZXRCeUlkTW9kZSBtb2RlOwogICAgICAgICB1aW50OF90
IGhpdENvdW50Rm9yTExJbnRDYWNoaW5nOyAvLyBUaGlzIG11c3QgYmUgemVybyB3aGVuIHdlIHVz
ZSBQcm90b0xvYWQgbW9kZS4KICAgICB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZN
b2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUp
OyB9CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YURlZmF1bHQgZGVmYXVsdE1vZGU7CiAgICAgR2V0
QnlJZE1vZGVNZXRhZGF0YVVuc2V0IHVuc2V0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRh
QXJyYXlMZW5ndGggYXJyYXlMZW5ndGhNb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTMsNyArMjEzLDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JT
dHViSQogICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAg
IAogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjogewotICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7
CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1
cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZp
ZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1
cy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbkJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw3IEBAIEluQnlT
dGF0dXMgSW5CeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmYKICAgICAgICAgcmV0dXJuIEluQnlT
dGF0dXMoTm9JbmZvcm1hdGlvbik7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjog
ewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1
YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pOwogICAgICAgICBpZiAoc3RydWN0
dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICAgICAg
cmV0dXJuIEluQnlTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxMSArMTc2LDE2IEBAIEFMV0FZU19JTkxJTkUgc3Rh
dGljIGJvb2wgbGlua0NvZGVJbmxpbmUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW5s
aW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiti
b29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0
YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9j
ay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gVGhlc2UgZHluYW1pYyBzbG90cyBnZXQgZmls
bGVkIGluLiBOb3RoaW5nIGVsc2UgdG8gZG8uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KwogICAgIENDYWxsSGVscGVycyBqaXQ7CiAgICAgCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5m
by5iYXNlR1BSOwpAQCAtMjMzLDIzICsyMzgsMzEgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9v
bCBoYXNGcmVlUmVnaXN0ZQogICAgIHJldHVybiBnZXRTY3JhdGNoUmVnaXN0ZXIoc3R1YkluZm8p
ICE9IEludmFsaWRHUFJSZWc7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50
SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+
dXNlRGF0YUlDKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgaWYgKGlzSW5saW5lT2Zm
c2V0KG9mZnNldCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGhhc0ZyZWVS
ZWdpc3RlcihzdHViSW5mbyk7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQ
cm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBBU1NFUlQoY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKHN0dWJJbmZvLCBvZmZzZXQpKTsKKyAgICBBU1NFUlQoY2FuR2VuZXJhdGVTZWxmUHJvcGVy
dHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIG9mZnNldCkpOworCisgICAgaWYgKGNvZGVC
bG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gVGhlc2Ugc2xvdHMgZ2V0IGZpbGxlZCBp
bi4gTm90aGluZyBlbHNlIHRvIGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCkBAIC0yNzksMjIgKzI5MiwyNSBAQCBib29sIElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7
CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFjY2Vzczo6
aXNDYWNoZWFibGVBcnJheUxlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKIHsKICAgICBBU1NFUlQoYXJyYXktPmlu
ZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50
SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICBpZiAoIWhhc0ZyZWVSZWdpc3RlcihzdHViSW5mbykpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJldHVybiAhaGFzQW55QXJyYXlTdG9yYWdlKGFycmF5LT5pbmRleGluZ1R5
cGUoKSkgJiYgYXJyYXktPmluZGV4aW5nVHlwZSgpICE9IEFycmF5Q2xhc3M7CiB9CiAKLWJvb2wg
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxl
bmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBK
U0FycmF5KiBhcnJheSkKIHsKLSAgICBBU1NFUlQoaXNDYWNoZWFibGVBcnJheUxlbmd0aChzdHVi
SW5mbywgYXJyYXkpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNoZWFibGVB
cnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcnJheSkpOwogCiAgICAgaWYgKCFzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMx
OSwxNyArMzM1LDIwIEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKFMK
ICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6Omlz
Q2FjaGVhYmxlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wg
SW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAgIGlmICghc3R1YkluZm8uaGFz
Q29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKwogICAgIHJldHVybiBoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwogfQogCi1i
b29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgQVNT
RVJUKGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKSk7CisgICAgQVNTRVJUX1VOVVNF
RChjb2RlQmxvY2ssIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8p
KTsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0zNjMsMTMgKzM4MiwxOCBAQCBib29sIElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTdHJpbmdMZW5ndGgoCiB9CiAKIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZkluQWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29u
c3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJs
b2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBzbG90cyBnZXQgZmlsbGVkIGlu
LiBOb3RoaW5nIGVsc2UgdG8gZG8uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAg
IEdQUlJlZyBiYXNlID0gc3R1YkluZm8uYmFzZUdQUjsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9
IHN0dWJJbmZvLnZhbHVlUmVncygpOwogCkBAIC00MDYsNyArNDMwLDcgQEAgdm9pZCBJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJ
QygpKSB7CiAgICAgICAgIC8vIElmIGl0IGlzIG5vdCBHZXRCeUlkLWxpa2UtdGhpbmcsIHdlIGRv
IG5vdCBlbWl0IG5vcCBzbGVkIChlLmcuIEdldEJ5VmFsKS4KICAgICAgICAgLy8gVGhlIGNvZGUg
aXMgYWxyZWFkeSBhbiBpbmRpcmVjdCBqdW1wLCBhbmQgb25seSB0aGluZyB3ZSBzaG91bGQgZG8g
aXMgcmVwbGFjaW5nIG1fY29kZVB0ci4KLSAgICAgICAgaWYgKHN0dWJJbmZvLmhhc0NvbnN0YW50
SWRlbnRpZmllcikgeworICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQgJiYgc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CiAgICAg
ICAgICAgICAvLyBJZiBtX2NvZGVQdHIgaXMgcG9pbnRpbmcgdG8gc3R1YkluZm8uc2xvd1BhdGhT
dGFydExvY2F0aW9uLCB0aGlzIG1lYW5zIHRoYXQgSW5saW5lQWNjZXNzIGNvZGUgaXMgbm90IGEg
c3R1YiBvbmUuCiAgICAgICAgICAgICAvLyBXZSByZXdyaXRlIHRoaXMgd2l0aCB0aGUgc3R1Yi1i
YXNlZCBkaXNwYXRjaGluZyBjb2RlIG9uY2UsIGFuZCBjb250aW51ZSB1c2luZyBpdCB1bnRpbCB3
ZSByZXNldCB0aGUgY29kZS4KICAgICAgICAgICAgIGlmIChzdHViSW5mby5tX2NvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSA9PSBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24uZXhlY3V0
YWJsZUFkZHJlc3MoKSkgewpAQCAtNDIxLDcgKzQ0NSw5IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpy
ZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICAgICAgICAgICAgICB9KSwgIklubGluZUFjY2Vzczog
bGlua2luZyBzdHViIGNhbGwiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAg
IHN0dWJJbmZvLm1fY29kZVB0ciA9IHRhcmdldDsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNv
ZGUuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCw4ICs0NjAsMTQgQEAgdm9pZCBJ
bmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgIH0pLCAiSW5saW5lQWNjZXNz
OiBsaW5raW5nIGNvbnN0YW50IGp1bXAiKTsKIH0KIAotdm9pZCBJbmxpbmVBY2Nlc3M6OnJlc2V0
U3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKK3ZvaWQgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogeworICAgIGlmIChjb2Rl
QmxvY2stPnVzZURhdGFJQygpICYmIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKSB7CisgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHN0dWJJbmZvLnNsb3dQ
YXRoU3RhcnRMb2NhdGlvbjsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHVi
SW5mby5zdGFydC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9p
ZChDQ2FsbEhlbHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgIC8vIFdl
IGRvbid0IG5lZWQgYSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1w
aW5nIGludG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4KICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1
bXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTksMTQgKzk5LDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KHNpemUsIHNpemVGb3JQcm9wZXJ0eUFjY2Vzcygp
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhT
dHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0
aWMgYm9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8m
LCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwot
ICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8m
LCBKU0FycmF5Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3Ry
dWN0dXJlU3R1YkluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0
cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2Vs
ZkluQWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIGJv
b2wgZ2VuZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMg
Ym9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBjYW5H
ZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8m
LCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVy
dHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgaXND
YWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAg
ICBzdGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNjZXNz
KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGlj
IGJvb2wgZ2VuZXJhdGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8m
KTsKIAogICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5s
aW5lQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNK
dW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVN
ZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJ
U0VfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0
YSB7CiAgICAgdWludDhfdCBzZWVuTW9kZXMgeyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlNlZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2Rl
TWV0YWRhdGEsIHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5
cGUoc2Vlbk1vZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJ
bnRDYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
TExJbnRDYWxsTGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQogCiBwcml2YXRlOgogICAgIHVp
bnRwdHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0YWRhdGFUYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRh
YmxlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9NZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGZ1bmMoKm1ldGFkYXRhKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBudW1FbnRyaWVzKCkKKyAgICB7
CisgICAgICAgIGF1dG8qIHN0YXJ0ID0gYml0d2lzZV9jYXN0PHR5cGVuYW1lIE9wOjpNZXRhZGF0
YSo+KGdldChPcDo6b3Bjb2RlSUQpKTsKKyAgICAgICAgYXV0byogZW5kID0gYml0d2lzZV9jYXN0
PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdldEltcGwoT3A6Om9wY29kZUlEICsgMSkpOworICAg
ICAgICByZXR1cm4gZW5kIC0gc3RhcnQ7CisgICAgfQorCiAgICAgc2l6ZV90IHNpemVJbkJ5dGVz
KCk7CiAKICAgICB2b2lkIHJlZigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wY29kZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMTcgQEAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heAogICAgIG1hY3JvKE9wSXRlcmF0b3JP
cGVuKSBcCiAgICAgbWFjcm8oT3BJdGVyYXRvck5leHQpIFwKIAorI2RlZmluZSBGT1JfRUFDSF9P
UENPREVfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAorICAgIG1hY3JvKE9wQWRk
KSBcCisgICAgbWFjcm8oT3BNdWwpIFwKKyAgICBtYWNybyhPcERpdikgXAorICAgIG1hY3JvKE9w
U3ViKSBcCisKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJPRklM
RShtYWNybykgXAorICAgIG1hY3JvKE9wSW5jKSBcCisgICAgbWFjcm8oT3BEZWMpIFwKKyAgICBt
YWNybyhPcE5lZ2F0ZSkgXAorCiAKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidHlwZS1saW1pdHMi
KQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1
cy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCwxMCArMTgwLDEwIEBAIFB1
dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKICAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHVpZCk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAg
ICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50
bHkodWlkKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZShwcm9maWxlZEJsb2NrLT52bSgpKTsKKyAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAg
ICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeVZh
cmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3R1YkluZm8tPm1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBQdXRC
eVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3RydWN0dXJlLCBvZmZzZXQp
OwogICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwg
KnN0dWJJbmZvKTsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJl
U3R1YkluZm8uaCIKIAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhp
Y0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKIApAQCAtNjUsOSArNjYsOSBAQCB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYoCiAgICAgQVNTRVJUKGhhc0NvbnN0
YW50SWRlbnRpZmllcik7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpHZXRC
eUlkU2VsZik7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndyaXRlQmFy
cmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5
SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0
QXJyYXlMZW5ndGgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyKQpAQCAtODcs
OSArODgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJlcGxhCiAgICAg
QVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENhY2hlVHlw
ZShsb2NrZXIsIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2UpOwogICAgIG1faWRlbnRpZmllciA9
IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBj
b2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRT
ZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAog
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEluQnlJZFNlbGYoY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyQmFzZSYgbG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBpbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIENhY2hlYWJsZUlk
ZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTk3LDkgKzk4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6aW5pdEluQnlJZFNlbGYoYwogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5
cGU6OlVuc2V0KTsKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OkluQnlJZFNl
bGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIo
Y29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2Vs
Zk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQpA
QCAtMjM2LDcgKzIzNyw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJlU3R1Yklu
Zm8KICAgICAgICAgLy8gd2UncmUgYnVmZmVyZWQgaXMgYmVjYXVzZSB3ZSByZWx5IG9uIGl0IHRv
IHJlc2V0IGR1cmluZyBHQyBpZiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUKICAgICAgICAg
Ly8gaXMgY29sbGVjdGVkLgogICAgICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwotICAgICAg
ICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGdlbmVy
YXRlZCBzb21lIGNvZGUgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGF0dGVtcHQgdG8gcmVwYXRjaCBp
biB0aGUgZnV0dXJlIHVudGlsIHdlCiAgICAgICAgIC8vIGdhdGhlciBlbm91Z2ggY2FzZXMuCkBA
IC0yNTEsNyArMjUyLDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29u
YwogewogICAgIGNsZWFyQnVmZmVyZWRTdHJ1Y3R1cmVzKCk7CiAgICAgbV9pZGVudGlmaWVyID0g
bnVsbHB0cjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICBt
X2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOwogCiAgICAgaWYgKG1fY2FjaGVUeXBlID09
IENhY2hlVHlwZTo6VW5zZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTI4NSw2ICsyODYsNyBAQCB2
b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgICAgIHJlc2V0UHV0
QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFBy
aXZhdGVOYW1lOgogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2lu
ZDo6QnlWYWwpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoK
QEAgLTM2MCw4ICszNjIsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZl
cmVuCiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKLSAgICBpZiAobV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlKQotICAgICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNNYXJrZWQo
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICBpZiAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSkKKyAgICAgICAgaXNWYWxp
ZCAmPSB2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZSk7CiAgICAgaWYgKG1fY2FjaGVUeXBlID09
IENhY2hlVHlwZTo6U3R1YikKICAgICAgICAgaXNWYWxpZCAmPSB1LnN0dWItPnZpc2l0V2Vhayh2
bSk7CiAKQEAgLTM3NSw4ICszNzcsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdl
YWtSZWZlcmVuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAo
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQotICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodmlzaXRvci52bSgpKSkKKyAgICAgICAg
c3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIAogICAgIGlmIChtX2NhY2hlVHlwZSA9
PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnMo
dmlzaXRvcik7CkBAIC00MzAsNiArNDMyLDIwNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3Zv
aWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJ
bmZvKQoreworICAgIGFjY2Vzc1R5cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7Cisg
ICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0YXJ0OworICAgIGRvbmVMb2NhdGlvbiA9IHVu
bGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9
IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5k
ZXggPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSk7CisgICAgY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRT
dHViSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBtX2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9j
YXRpb247CisKKyAgICB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpOworICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQg
JiYgdW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAg
ICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVy
UmVnaXN0ZXIiIHJlZ2lzdGVyIGVpdGhlci4KKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyKTsKKyAgICB9CisKKyAg
ICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFs
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
SW5CeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Oklu
QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRT
dHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAg
ICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAg
ICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1
YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERp
cmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0
ZUZpZWxkU2V0OgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAg
ICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21h
TW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAg
ICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAg
ICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlu
a2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0
QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJp
dmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
U2V0UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQ
cml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
c3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5
R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJ
bmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7
CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRp
ZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
Okluc3RhbmNlT2Y6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAg
ICAgICBwcm90b3R5cGVJc0tub3duT2JqZWN0ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBC
YXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnByb3RvdHlw
ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJh
bmQ6IAorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFz
ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZh
bHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsK
KyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1f
c3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAg
ICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIg
PSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlk
V2l0aFRoaXM6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAg
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAg
ICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0Owor
ICAgICAgICByZWdzLnRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAg
ICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYg
KGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5
UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2Ug
QWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRp
ZmllciA9IGZhbHNlOworICAgICAgICB2YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAg
IGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAg
cmVncy5icmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZv
aWQgU3RydWN0dXJlU3R1YkluZm86OmNoZWNrQ29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
SklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUg
Ik9wdGlvbnMuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKQEAg
LTU2LDYgKzU3LDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRC
eVZhbCwKICAgICBQdXRCeUlkLAogICAgIFB1dEJ5VmFsLAorICAgIFB1dFByaXZhdGVOYW1lLAog
ICAgIEluQnlJZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtNzgsNiAr
ODAsOCBAQCBlbnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CiAgICAgU3RyaW5nTGVuZ3Ro
CiB9OwogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKKwogY2xhc3MgU3RydWN0
dXJlU3R1YkluZm8gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZv
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTk4LDYgKzEwMiw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKKyAgICB2b2lk
IGluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvJik7CisKICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsK
IAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUg
ZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLApAQCAtMzI1LDEzICszMzEs
MTkgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKKyAg
ICBQcm9wZXJ0eU9mZnNldCBieUlkU2VsZk9mZnNldDsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQnlJZFNlbGZPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJl
U3R1YkluZm8sIGJ5SWRTZWxmT2Zmc2V0KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
cnVjdHVyZVN0dWJJbmZvLCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOyB9CiAgICAgdW5p
b24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
OwotICAgICAgICB9IGJ5SWRTZWxmOwogICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsK
ICAgICB9IHU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlOworICAgIFN0cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShWTSYg
dm0pCisgICAgeworICAgICAgICBpZiAoIW1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gdm0uZ2V0U3RydWN0dXJl
KG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgfQorICAgIFN0cnVjdHVyZUlEIG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSB7IDAgfTsKIHByaXZhdGU6CiAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgLy8gUmVwcmVzZW50cyB0aG9zZSBzdHJ1Y3R1
cmVzIHRoYXQgYWxyZWFkeSBoYXZlIGJ1ZmZlcmVkIEFjY2Vzc0Nhc2VzIGluIHRoZSBQb2x5bW9y
cGhpY0FjY2Vzcy4KQEAgLTQ0Nyw2ICs0NTksMTcgQEAgaW5saW5lIGF1dG8gYXBwcm9wcmlhdGVH
ZW5lcmljR2V0QnlJZEZ1bgogICAgIH0KIH0KIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8geworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQ7
CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRlRmllbGRQdXRLaW5kIHsgUHJpdmF0ZUZp
ZWxkUHV0S2luZDo6bm9uZSgpIH07CisgICAgRUNNQU1vZGUgZWNtYU1vZGUgeyBFQ01BTW9kZTo6
c2xvcHB5KCkgfTsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0OyAvLyBUaGlzIGlzIGVpdGhl
ciB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJQyBmb3IgKmJ5SWQgY2FjaGVzLiBvciB0aGUgbG9j
YXRpb24gb2YgcGF0Y2hhYmxlIGp1bXAgZm9yICdpbnN0YW5jZW9mJyBjYWNoZXMuCisgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzbG93UGF0aFN0YXJ0TG9jYXRpb247
Cit9OworCiAjZWxzZQogCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB2b2lkIHByaW50U3VwZXJTYW1wbGVy
U3RhdGUoKQogICAgIGRvdWJsZSBwZXJjZW50YWdlID0gMTAwLjAgKiBpbiAvIChpbiArIG91dCk7
CiAgICAgaWYgKHBlcmNlbnRhZ2UgIT0gcGVyY2VudGFnZSkKICAgICAgICAgcGVyY2VudGFnZSA9
IDAuMDsKLSAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxh
ZzogIiwgcGVyY2VudGFnZSwgIlxuIik7CisgICAgZGF0YUxvZygiUGVyY2VudCB0aW1lIGJlaGlu
ZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNlbnRhZ2UsICIlXG4iKTsKIH0KIAogdm9pZCBl
bmFibGVTdXBlclNhbXBsZXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9j
ay5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVk
ZSAiQ2xhc3NJbmZvLmgiCkBAIC03OCw2ICs3OSw4IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxp
bmtlZENvZGVCbG9jayhWTSYKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeShsb2Nr
ZXIpOwogICAgICAgICBtX3JhcmVEYXRhLT5tX3ByaXZhdGVCcmFuZFJlcXVpcmVtZW50ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFByaXZhdGVCcmFuZFJlcXVpcmVtZW50OjpOZWVkZWQpOwogICAg
IH0KKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xk
Rm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KQEAgLTMxNiw2ICszMTksNDggQEAgaW50IFVubGlua2Vk
Q29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2ZmcwogICAgIHJldHVybiBtX291dE9mTGluZUp1bXBU
YXJnZXRzLmdldChieXRlY29kZU9mZnNldCk7CiB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorYm9v
bCBVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQoreworICAgIGlmIChudW1iZXJPZklkZW50aWZpZXJzKCkgPiAxMDApIHsKKyAgICAgICAgaWYg
KG51bWJlck9mSWRlbnRpZmllcnMoKSAhPSBtX2NhY2hlZElkZW50aWZpZXJVaWRzLnNpemUoKSkg
eworICAgICAgICAgICAgTG9ja2VyIGxvY2tlcihtX2NhY2hlZElkZW50aWZpZXJVaWRzTG9jayk7
CisgICAgICAgICAgICBIYXNoU2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gY2FjaGVkSWRlbnRpZmll
clVpZHM7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZJZGVu
dGlmaWVycygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dGlmaWVyID0gdGhpcy0+aWRlbnRpZmllcihpKTsKKyAgICAgICAgICAgICAgICBjYWNoZWRJZGVu
dGlmaWVyVWlkcy5hZGQoaWRlbnRpZmllci5pbXBsKCkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAgICAgbV9jYWNoZWRJZGVu
dGlmaWVyVWlkcyA9IFdURk1vdmUoY2FjaGVkSWRlbnRpZmllclVpZHMpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIG1fY2FjaGVkSWRlbnRpZmllclVpZHMuY29udGFpbnModWlkKTsKKyAg
ICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZJZGVudGlmaWVycygp
OyArK2kpIHsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIoaSkuaW1wbCgpID09IHVpZCkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYK
KworaW50MzJfdCBVbmxpbmtlZENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhy
ZXNob2xkKQoreworICAgIHN3aXRjaCAoZGlkT3B0aW1pemUoKSkgeworICAgIGNhc2UgVHJpU3Rh
dGU6OkluZGV0ZXJtaW5hdGU6CisgICAgICAgIHJldHVybiB0aHJlc2hvbGQ7CisgICAgY2FzZSBU
cmlTdGF0ZTo6RmFsc2U6CisgICAgICAgIHJldHVybiB0aHJlc2hvbGQgKiA0OworICAgIGNhc2Ug
VHJpU3RhdGU6OlRydWU6CisgICAgICAgIHJldHVybiB0aHJlc2hvbGQgLyAyOworICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gdGhyZXNob2xkOworfQorCisKIHZv
aWQgVW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJvZmlsZXMoKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKCFtX21ldGFkYXRhLT5pc0ZpbmFsaXplZCgpKTsKQEAgLTMzNywxNSArMzgy
LDI1IEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHIKICAgICBpZiAo
bV9tZXRhZGF0YS0+aGFzTWV0YWRhdGEoKSkgewogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFy
cmF5UHJvZmlsZXMgPSAwOwogCi0jZGVmaW5lIENPVU5UKF9fb3ApIFwKLSAgICAgICAgbnVtYmVy
T2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKKyNkZWZp
bmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVu
dHJpZXM8X19vcD4oKTsKICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklM
RShDT1VOVCkKICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lO
Rk8oQ09VTlQpCiAjdW5kZWYgQ09VTlQKICAgICAgICAgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9
IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgICAgIG51bWJl
ck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9wR2V0QnlJZD4oKTsK
LQogICAgICAgICBtX2FycmF5UHJvZmlsZXMgPSBGaXhlZFZlY3RvcjxVbmxpbmtlZEFycmF5UHJv
ZmlsZT4obnVtYmVyT2ZBcnJheVByb2ZpbGVzKTsKKworICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZkJpbmFyeUFyaXRoUHJvZmlsZXMgPSAwOworI2RlZmluZSBDT1VOVChfX29wKSBudW1iZXJPZkJp
bmFyeUFyaXRoUHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOworICAg
ICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShDT1VOVCkKKyN1
bmRlZiBDT1VOVAorICAgICAgICBtX2JpbmFyeUFyaXRoUHJvZmlsZXMgPSBGaXhlZFZlY3RvcjxC
aW5hcnlBcml0aFByb2ZpbGU+KG51bWJlck9mQmluYXJ5QXJpdGhQcm9maWxlcyk7CisKKyAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZVbmFyeUFyaXRoUHJvZmlsZXMgPSAwOworI2RlZmluZSBDT1VO
VChfX29wKSBudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRy
aWVzPF9fb3A+KCk7CisgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoQ09VTlQpCisjdW5kZWYgQ09VTlQKKyAgICAgICAgbV91bmFyeUFyaXRoUHJvZmlsZXMg
PSBGaXhlZFZlY3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4obnVtYmVyT2ZVbmFyeUFyaXRoUHJvZmls
ZXMpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSwxMCArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBcml0aFBy
b2ZpbGUuaCIKICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUNv
bnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNpbmNsdWRlICJERkdFeGl0UHJv
ZmlsZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNz
aW9uUmFuZ2VJbmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJJZGVu
dGlmaWVyLmgiCkBAIC02NCw2ICs2Niw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xh
c3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CitjbGFzcyBCYXNlbGlu
ZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29u
c3RhbnQgOiBpbnQzMl90OwogCkBAIC0xNzUsNiArMTc4LDcgQEAgcHVibGljOgogCiAgICAgY29u
c3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMo
KSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07
IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudElu
ZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9j
b25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIApAQCAtMjA3LDYgKzIxMSwxNSBA
QCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAog
ICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKKyAgICBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChCeXRlY29kZUluZGV4IGluZGV4KSBjb25z
dCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRleCkucHRyKCk7IH0KKyAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCisgICAgewor
ICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGluc3RydWN0aW9ucygpLmF0
KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNFbmQgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3RydWN0aW9uc0JlZ2luICYmIGluc3RydWN0
aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAgcmV0dXJuIGluc3RydWN0aW9uIC0gaW5z
dHJ1Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uc1NpemUoKSBj
b25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXplKCk7IH0KIAogICAgIHVuc2lnbmVkIG51
bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAg
dW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyczsgfQpAQCAtMzM0LDEw
ICszNDcsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9tZXRhZGF0YS0+c2l6ZUluQnl0
ZXMoKTsKICAgICB9CiAKKyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vh
cmx5UmV0dXJuKCkKKyAgICB7CisgICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVk
IHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCisgICAgICAgIHJldHVybiAh
aXNCdWlsdGluRnVuY3Rpb24oKTsKKyAgICB9CiAgICAgdm9pZCBhbGxvY2F0ZVNoYXJlZFByb2Zp
bGVzKCk7CiAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUmIHVubGlua2VkVmFsdWVQcm9maWxlKHVu
c2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9CiAgICAgVW5s
aW5rZWRBcnJheVByb2ZpbGUmIHVubGlua2VkQXJyYXlQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7
IHJldHVybiBtX2FycmF5UHJvZmlsZXNbaW5kZXhdOyB9CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAor
ICAgIGJvb2wgaGFzSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOworI2VuZGlmCisKKyAg
ICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCk7CisKIHByb3RlY3Rl
ZDoKICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSYsIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25z
dCBFeGVjdXRhYmxlSW5mbyYsIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+KTsKIApAQCAt
Mzk3LDYgKzQyMSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0
dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CisgICAgUmVm
UHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKIHByaXZhdGU6CiAg
ICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1f
cGFyc2VNb2RlOwpAQCAtNDEzLDcgKzQzOCw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCi0KICNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CiAjZW5kaWYKQEAg
LTQ1OCw2ICs0ODIsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGlu
ZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZM
aW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCisgICAgeworICAgICAgICB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAg
cmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIH0KKworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0
dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1
bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxl
c1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3Vu
dGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOyB9CiAKIHByaXZhdGU6CiAgICAg
dXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpP
ZmZzZXQsIGludD47CkBAIC00NjUsOCArNDk5LDE2IEBAIHByaXZhdGU6CiAgICAgT3V0T2ZMaW5l
SnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4ZWRWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5m
bz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGlu
dEV4ZWN1dGVDb3VudGVyOwogICAgIEZpeGVkVmVjdG9yPFVubGlua2VkVmFsdWVQcm9maWxlPiBt
X3ZhbHVlUHJvZmlsZXM7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+IG1f
YXJyYXlQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmlu
YXJ5QXJpdGhQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4gbV91
bmFyeUFyaXRoUHJvZmlsZXM7CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIExvY2sgbV9jYWNo
ZWRJZGVudGlmaWVyVWlkc0xvY2s7CisgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IG1f
Y2FjaGVkSWRlbnRpZmllclVpZHM7CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIERFQ0xBUkVf
VklTSVRfQ0hJTERSRU47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxlKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZzZXRJbk1ldGFkYXRhVGFibGUo
Y29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9pc0ZpbmFsaXpl
ZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9IG1faXMzMkJpdCA/IG9mZnNl
dFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9w
Y29kZUlEXTsKKyAgICAgICAgYmFzZVR5cGVPZmZzZXQgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFs
aWdub2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSksIGJhc2VUeXBlT2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKHR5cGVuYW1lIE9wY29kZTo6TWV0YWRh
dGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CiAgICAgdW5zaWduZWQgbnVtRW50cmllcygpOwogCkBAIC0xMDcsNiArMTE2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAg
fQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2
ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTMgKzQ1LDEx
IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tl
dHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tl
dHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAg
ICBWYWx1ZVByb2ZpbGVCYXNlKCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQotICAgICAgICAgICAgbV9idWNrZXRzW2ld
ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgIGNsZWFyQnVja2V0cygpOwog
ICAgIH0KICAgICAKICAgICBFbmNvZGVkSlNWYWx1ZSogc3BlY0ZhaWxCdWNrZXQodW5zaWduZWQg
aSkKQEAgLTU5LDYgKzU3LDEyIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAg
QVNTRVJUKG51bWJlck9mQnVja2V0cyArIGkgPCB0b3RhbE51bWJlck9mQnVja2V0cyk7CiAgICAg
ICAgIHJldHVybiBtX2J1Y2tldHMgKyBudW1iZXJPZkJ1Y2tldHMgKyBpOwogICAgIH0KKworICAg
IHZvaWQgY2xlYXJCdWNrZXRzKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQorICAgICAgICAgICAgbV9idWNrZXRzW2ld
ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgfQogICAgIAogICAgIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tldCkgY29uc3QKICAgICB7CkBAIC0xMjMs
OCArMTI3LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBv
bmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4
ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkBAIC0xMzksNyAr
MTQxLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICAKICAgICAgICAgcmV0
dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAgICBFbmNvZGVkSlNWYWx1ZSBtX2J1
Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVk
aWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE2MSw2ICsxNjMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9m
aWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGUgOiBwdWJsaWMg
VmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPiB7CiAgICAgVmFsdWVQcm9maWxl
KCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+KCkgeyB9CisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQogfTsKIAogc3RydWN0IFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUg
IkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgpAQCAt
MzQsNyArMzUsOSBAQAogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgogI2luY2x1ZGUg
IkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCisjaW5jbHVk
ZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSlNDYXN0LmgiCisjaW5jbHVkZSAiUENUb0NvZGVP
cmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAi
UmVjb3JkZWRTdGF0dXNlcy5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KQEAgLTcwLDcgKzczLDcg
QEAgc3RydWN0IFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uIHsKICAgICBXcml0ZUJhcnJpZXI8SlND
ZWxsPiBtX3RvOwogfTsKICAgICAgICAgCi1jbGFzcyBDb21tb25EYXRhIHsKK2NsYXNzIENvbW1v
bkRhdGEgOiBwdWJsaWMgTWF0aElDSG9sZGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
b21tb25EYXRhKTsKIHB1YmxpYzoKICAgICBDb21tb25EYXRhKCkKQEAgLTExNiw2ICsxMTksNyBA
QCBwdWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50
PiBtX3dhdGNocG9pbnRzOwogICAgIEZpeGVkVmVjdG9yPEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludD4gbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzOwogICAgIEZpeGVkVmVjdG9yPEFk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gbV9hZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9y
aWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKICAgICBSZWNvcmRlZFN0YXR1c2VzIHJlY29y
ZGVkU3RhdHVzZXM7CiAgICAgVmVjdG9yPEp1bXBSZXBsYWNlbWVudD4gbV9qdW1wUmVwbGFjZW1l
bnRzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3Bw
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKKyNpbmNsdWRlICJK
dW1wVGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDYgKzQyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIFRyYWNrZWRSZWZlcmVuY2Vz
OwogCitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKwog
bmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEpJVENvbXBpbGVyOwpAQCAtMTAxLDYgKzEwNCw4IEBA
IHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sq
LCB2b2lkKiBwYykgZmluYWw7CiAKICAgICB1c2luZyBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXpl
Q29kZVJlZkZvckRGRzsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1h
cCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9
CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxsb3cg
SklUQ29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCkuCkBAIC0xNDAsNiArMTQ1LDggQEAgcHVi
bGljOgogICAgIEhhc2hNYXA8Qnl0ZWNvZGVJbmRleCwgVHJpZ2dlclJlYXNvbj4gdGllclVwRW50
cnlUcmlnZ2VyczsKIAogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1fb3NyRW50cnlCbG9j
azsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsK
KyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
czsKICAgICB1bnNpZ25lZCBvc3JFbnRyeVJldHJ5OwogICAgIGJvb2wgYWJhbmRvbk9TUkVudHJ5
OwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODUsMTMgKzE4NSwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtC
CiAgICAgCiAgICAgbV9ncmFwaC5yZWdpc3RlckZyb3plblZhbHVlcygpOwogCi0gICAgaWYgKCFt
X2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkgfHwgIW1fZ3JhcGgubV9z
d2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAoIW1fZ3JhcGgubV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5l
bnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZSht
X2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7Ci0gICAgICAgIGlmICghbV9ncmFwaC5t
X3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVu
c3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgu
bV9zd2l0Y2hKdW1wVGFibGVzKTsKLSAgICB9CisgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1faml0Q29kZS0+bV9z
d2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIAorICAgICAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMp
OworICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQorICAgICAg
ICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N3aXRj
aEp1bXBUYWJsZXMpOwogCiAgICAgZm9yIChCYWc8U3dpdGNoRGF0YT46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2dyYXBoLm1fc3dpdGNoRGF0YS5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewogICAgICAg
ICBTd2l0Y2hEYXRhJiBkYXRhID0gKippdGVyOwpAQCAtMTk5LDEyICsxOTgsMTIgQEAgdm9pZCBK
SVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBjYXNlIFN3aXRjaENo
YXI6CiAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CiAgICAgICAgICAgICBpZiAoIWRhdGEuZGlk
VXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KS5pc0VtcHR5KCkpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRh
YmxlSW5kZXhdLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRh
YmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAg
ICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENvZGUtPm1fc3dpdGNo
SnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAgICAgbGlua2VkVGFi
bGUubV9jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPiht
X2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCkgPT0gdW5saW5r
ZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCk7IGotLTspCkBAIC0yMTksMTIg
KzIxOCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAKICAg
ICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6IHsKICAgICAgICAgICAgIGlmICghZGF0YS5kaWRVc2VK
dW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnN0cmluZ1N3
aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHkoKSk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2RhdGEu
c3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRj
aFRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRl
eF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRl
eF0pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua2VkVGFibGUubV9jdGlPZmZzZXRz
LnNpemUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUuc2l6ZSgpICsgMSk7CiAgICAg
ICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbGlua2VkVGFibGUubV9jdGlPZmZzZXRzKQpAQCAt
MzMzLDcgKzMzMiw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IK
ICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBw
aW5nKCkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChtYWtlVW5p
cXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
KSwgbGlua0J1ZmZlcikpOworICAgICAgICBtX2ppdENvZGUtPmNvbW1vbi5tX3BjVG9Db2RlT3Jp
Z2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpOwogfQogCiBzdGF0aWMgdm9pZCBlbWl0U3Rh
Y2tPdmVyZmxvd0NoZWNrKEpJVENvbXBpbGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCYgc3RhY2tPdmVyZmxvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNiBAQCB2b2lkKiBw
cmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqCiAgICAgQVNTRVJUKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFTU0VSVChjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNTRVJUKCFjb2RlQmxv
Y2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdD
b21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIAogICAgIGlmICghT3B0aW9uczo6dXNlT1NSRW50cnlU
b0RGRygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzIsOSArNzcyLDYgQEAgdm9pZCBPU1JFeGl0Ojpjb21w
aWxlRXhpdChDQ2FsbEhlbHBlcnMmIAogICAgIC8vIFRoZSB0YWcgcmVnaXN0ZXJzIGFyZSBuZWVk
ZWQgdG8gbWF0ZXJpYWxpemUgcmVjb3ZlcmllcyBiZWxvdy4KICAgICBqaXQuZW1pdE1hdGVyaWFs
aXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKIAotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxl
cigpKQotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0udG9wRW50cnlGcmFtZSk7Ci0KICAgICBpZiAoaW5saW5lU3RhY2tDb250YWluc0Fj
dGl2ZUNoZWNrcG9pbnQpIHsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIHRtcFNjcmF0Y2ggPSBz
Y3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25NYXRlcmlhbGl6ZU9TUkV4aXRTaWRlU3RhdGUpPigmdm0sICZl
eGl0LCB0bXBTY3JhdGNoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAK
KyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgog
I2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIKQEAgLTExOSwxMCAr
MTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxsSGVscGUKICAgICBp
bnQzMl90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2ggKGppdC5jb2RlQmxvY2soKS0+aml0VHlw
ZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9
IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChqaXQuY29kZUJsb2Nr
KCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9
IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgotICAgICAgICBjbGlw
cGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGpp
dC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xp
cHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0
YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMTMsNiArMzE0LDEwIEBAIHZvaWQgcmVpZnlJ
bmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVD
YWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVl
U2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lz
dGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNl
bGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpKTsKKyAgICAgICAgfSBlbHNl
IGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKKyAg
ICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlu
bGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19tZXRhZGF0YUdQUikpOwor
ICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVKSVRDb25zdGFudFBvb2woKSksIGNhbGxl
ZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19jb25z
dGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKSkKQEAgLTQwNCw2ICs0MDksOSBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1Rhcmdl
dChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CiAg
ICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUo
KSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGluZUpJVENvbnN0YW50UG9vbCgp
KSwgSklUOjpzX2NvbnN0YW50c0dQUik7CisKICAgICAgICAgY29kZUJsb2NrRm9yRXhpdC0+bV9o
YXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRl
eCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKQEAgLTQyMCwxMiArNDI4LDE2
IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICAgICAganVt
cFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKICAgICB9CiAKLSAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9ja0ZvckV4aXQpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBc3NlbWJseUhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhh
bmRsZXIoKSkgeworICAgICAgICBBU1NFUlQoIVJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdp
c3RlcnMoKS5jb250YWlucyhMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikpOworICAgICAgICBqaXQu
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlG
cmFtZSwgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKExMSW50OjpSZWdpc3RlcnM6
OnBjR1BSKSk7CisKICAgICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9jYXRjaCwg
d2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCiAgICAgICAgIGppdC5zdG9yZVB0cihH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgdm0uYWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2go
KSk7CiAgICAgfQotICAgIAorCisgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNp
emVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxw
ZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQu
ZmFySnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0clRhZyk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5s
aW5lcy5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93
UGF0aHMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgi
CkBAIC0yODY5LDcgKzI4NzAsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RmluZFN3CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7Ci0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
ICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
QVNTRVJUKHZhbHVlLmlzRG91YmxlKCkpOwogICAgIGRvdWJsZSBhc0RvdWJsZSA9IHZhbHVlLmFz
RG91YmxlKCk7CkBAIC0yODkwLDcgKzI4OTEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uU3dpdGNoCiAKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51
bGxwdHIpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5z
dHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwogICAgIHJldHVybiBsaW5rZWRUYWJsZS5jdGlGb3JWYWx1ZSgqdW5saW5rZWRU
YWJsZSwgc3RySW1wbCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMwLDYgKzczMCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihjYWxsZWVUYWdHUFIsIGNh
bGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVt
QWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0g
bnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBt
X2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogCiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAgICAg
RWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CkBA
IC04ODksNyArODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFp
bCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2pp
dCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVm
ZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
bV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODM0LDYgKzgzNCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxl
ZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdEpTKTsKICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAg
ICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBh
cmFtZXRlcnMoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRn
ZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwpAQCAtOTg1LDcgKzk4
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAKICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0g
ICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5v
LCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVT
aHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZs
ZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICszOTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMg
PSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4s
IGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAg
bV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUs
IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2VkUmVnaXN0ZXJzLAogICAgICAgICBKU1Zh
bHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShw
cm9wZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwogICAg
IGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKIApAQCAtNDkwNSw3ICs0
OTA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlB
cml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVEFkZElD
KiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwor
ICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVEFkZElD
KGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25W
YWx1ZUFkZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0
aW9uVmFsdWVBZGQ7CiAgICAgCkBAIC00OTg5LDcgKzQ5ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlVmFsdWVTdWIoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2Vt
YW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9qaXQuY29kZUJsb2Nr
KCktPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9q
aXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRv
IHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemU7CiAgICAgYXV0
byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1YjsKIApAQCAtNTU3MSw3
ICs1NTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTmVnYXRlKAogICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBV
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPnVuYXJ5
QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVROZWdJ
QyogbmVnSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsK
KyAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVROZWdJ
Qyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
QXJpdGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9w
ZXJhdGlvbkFyaXRoTmVnYXRlOwogICAgIGNvbXBpbGVNYXRoSUMobm9kZSwgbmVnSUMsIHJlcGF0
Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKQEAgLTU4MTUsNyArNTgxNSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU11bChOb2QKICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQ
cm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRNdWxJQyogbXVs
SUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBK
SVRNdWxJQyogbXVsSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRNdWxJQyhhcml0
aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVN
dWxPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZh
bHVlTXVsOwogCkBAIC0xNDc3Myw3ICsxNDc3Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBu
b2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAg
ICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNS
ZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCksIGNhbGxTaXRlSW5kZXgpOworICAgIG1f
aml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3Ms
IHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkp
LCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTYsNyArMTU2LDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpS
ZQogCiAgICAgaWYgKHZtLnNob3VsZEJ1aWxkZXJQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKSkgewog
ICAgICAgICBCMzo6UENUb09yaWdpbk1hcCBvcmlnaW5NYXAgPSBzdGF0ZS5wcm9jLT5yZWxlYXNl
UENUb09yaWdpbk1hcCgpOwotICAgICAgICBjb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFw
KG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2
bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZl
cikpOworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9
IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2
bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZl
cik7CiAgICAgfQogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gbGFiZWwg
PSBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Y8SlNFbnRyeVB0
clRhZz4oc3RhdGUucHJvYy0+Y29kZSgpLmVudHJ5cG9pbnRMYWJlbCgwKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4
LDYgKzY4LDggQEAgcHVibGljOgogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uKCkgb3Zl
cnJpZGU7CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjb21tb25EYXRhT2Zmc2V0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpJVENvZGUsIGNvbW1vbik7IH0KICAgICB2b2lkIHNocmlua1RvRml0
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIG92ZXJyaWRlOworCisgICAgUENUb0NvZGVPcmln
aW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gY29tbW9uLm1fcGNU
b0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKICAgICBERkc6OkNvbW1vbkRhdGEgY29tbW9u
OwogICAgIFZlY3RvcjxPU1JFeGl0PiBtX29zckV4aXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDE0ICs1Miw2IEBAIHZv
aWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICBncmFwaC5yZWdpc3RlckZyb3plblZhbHVlcygp
OwogCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5l
bnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7
Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRj
aEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIC8vIENyZWF0ZSB0
aGUgZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlzIGVudHJ5cG9pbnQgdG90YWxseSBk
aWZmZXJlbnRseQogICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3JlIGRvaW5nIE9TUiBl
bnRyeSBvciBub3QuCiAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw3IEBACiAjaW5jbHVkZSAiTExJbnRUaHVua3Mu
aCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJQcm9iZUNvbnRleHQu
aCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVj
dC5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlNl
dHVwVmFyYXJnc0ZyYW1lLmgiCkBAIC0yMzIwLDYgKzIzMjEsMTggQEAgcHJpdmF0ZToKICAgICAg
ICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVw
YXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwogICAgIH0KIAorICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0
eXBlPgorICAgIHN0YXRpYyBKSVRBZGRJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29t
bW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRB
ZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlw
ZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBK
SVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVE11bElDKiBhZGRN
YXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmls
ZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVE11bElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4K
KyAgICBzdGF0aWMgSklUTmVnSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwg
VW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVROZWdJQyhw
cm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUg
PSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJH
ZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVFN1YklDKiBhZGRNYXRoSUMo
REZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyBy
ZXR1cm4gY29tbW9uLmFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisKICAgICB2b2lkIGNvbXBpbGVW
YWx1ZU11bCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwpAQCAtMjM5MSw3ICsy
NDA0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dl
bmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJVFVuYXJ5TWF0aElDPEdlbmVy
YXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJp
dGhQcm9maWxlKTsKKyAgICAgICAgICAgICAgICBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBt
YXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0
aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0
b3IoSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdw
cigpKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CiAKICAgICAgICAgICAgICAgICBib29sIHNob3Vs
ZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKQEAgLTI1MDAsNyArMjUxMyw3IEBAIHByaXZhdGU6CiAj
ZW5kaWYKIAogICAgICAgICAgICAgICAgIEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+OjpjcmVhdGUoKTsK
LSAgICAgICAgICAgICAgICBKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0
LmNvZGVCbG9jaygpLT5hZGRNYXRoSUM8R2VuZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAg
ICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8
R2VuZXJhdG9yPihzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAgICAg
ICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJp
Z2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwKICAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJd
LmdwcigpKSwgcGFyYW1zLmZwU2NyYXRjaCgwKSwKICAgICAgICAgICAgICAgICAgICAgcGFyYW1z
LmZwU2NyYXRjaCgxKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CkBAIC00MzE3LDcgKzQzMzAsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogSW52YWxpZEdQ
UlJlZzsKIAogICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5l
cmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBl
OjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6
UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExK
SVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0UHJp
dmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwogCiAgICAgICAgICAg
ICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwpAQCAtMTAy
ODUsNiArMTAyOTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxsb2NhdGVkQXJnczsgKytpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQoVmFsdWVSZWNvdmVyeTo6
Y29uc3RhbnQoanNVbmRlZmluZWQoKSkpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0
YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgICAgICAgICAgc2h1
ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
OwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRD
YWxsTGlua0luZm8oc2VtYW50aWNOb2RlT3JpZ2luKTsKQEAgLTEwNDQzLDEzICsxMDQ1NywxNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChw
YXJhbXNbMSArIGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgpKTsKIAogICAgICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1BcmdzOworICAgICAgICAgICAgICAgIHNodWZm
bGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxl
ZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKIAogICAgICAgICAgICAgICAgIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8o
Y29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2Fs
bExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAg
YXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBH
UFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5v
LCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7
CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEp
LnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA3OTIsNyAr
MTA4MDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAg
ICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xv
d1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6
cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsK
KyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7
CkBAIC0xMTA3Myw3ICsxMTA4OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgo
aml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAg
ICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEz
LDI4ICs0MTMsMTYgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAog
CiAgICAgUmVnaXN0ZXJTZXQgYWxsRlRMQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6ZnRsQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBiYXNl
bGluZUNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMo
KTsKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogdm1DYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0
Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKLSAgICBSZWdpc3RlclNldCB2bUNhbGxl
ZVNhdmVzVG9Ta2lwID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgaWYgKGV4
aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgaml0LmxvYWRQdHIoJnZtLnRvcEVu
dHJ5RnJhbWUsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zm
c2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgfQogCiAgICAgZm9yIChSZWcgcmVnID0gUmVn
OjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKICAgICAg
ICAgaWYgKCFhbGxGVExDYWxsZWVTYXZlcy5nZXQocmVnKSkgewotICAgICAgICAgICAgaWYgKGV4
aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IXZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogICAgICAgICB1bnNpZ25lZCB1bndpbmRJbmRleCA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpLT5pbmRleE9mKHJlZyk7CiAgICAgICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZz
ZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPSBiYXNlbGluZUNhbGxlZVNhdmVzLT5maW5kKHJl
Zyk7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIHZtQ2FsbGVlU2F2ZSA9IG51bGxwdHI7IAot
ICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgICAgIHZtQ2Fs
bGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKTsKIAogICAgICAgICBpZiAocmVnLmlz
R1BSKCkpIHsKICAgICAgICAgICAgIEdQUlJlZyByZWdUb0xvYWQgPSBiYXNlbGluZVJlZ2lzdGVy
T2Zmc2V0ID8gR1BSSW5mbzo6cmVnVDAgOiByZWcuZ3ByKCk7Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZWdUb0xvYWQgIT0gR1BSSW5mbzo6cmVnVDEpOwogCiAgICAgICAgICAgICBpZiAo
dW53aW5kSW5kZXggPT0gVUlOVF9NQVgpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgRlRMIGNv
bXBpbGF0aW9uIGRpZG4ndCBwcmVzZXJ2ZSB0aGlzIHJlZ2lzdGVyLiBUaGlzIG1lYW5zIHRoYXQg
aXQgYWxzbwpAQCAtNDUyLDggKzQ0MCw2IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2
bSwgdW5zaWduZWQKIAogICAgICAgICAgICAgaWYgKGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpCiAg
ICAgICAgICAgICAgICAgaml0LnN0b3JlNjQocmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0
ZXJPZmZzZXQtPm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAodm1DYWxsZWVTYXZlICYmICF2
bUNhbGxlZVNhdmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNhdmUtPnJlZygpKSkKLSAgICAgICAgICAg
ICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBGUFJSZWcgZnBSZWdUb0xvYWQgPSBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8g
RlBSSW5mbzo6ZnBSZWdUMCA6IHJlZy5mcHIoKTsKIApAQCAtNDY0LDE5ICs0NTAsOSBAQCBzdGF0
aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkCiAKICAgICAgICAgICAgIGlmIChi
YXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQogICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShm
cFJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1l
UG9pbnRlclJlZ2lzdGVyLCBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0LT5vZmZzZXQoKSkpOwotICAg
ICAgICAgICAgaWYgKHZtQ2FsbGVlU2F2ZSAmJiAhdm1DYWxsZWVTYXZlc1RvU2tpcC5nZXQodm1D
YWxsZWVTYXZlLT5yZWcoKSkpCi0gICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKGZwUmVn
VG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVT
YXZlLT5vZmZzZXQoKSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGV4aXQuaXNFeGNl
cHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCogdm1DYWxsZWVTYXZl
ID0gdm1DYWxsZWVTYXZlcy0+ZmluZChHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7Ci0gICAg
ICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwotCi0g
ICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZpbmQoR1BSSW5mbzo6bm90Q2Vs
bE1hc2tSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om5vdENlbGxNYXNr
UmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxl
ZVNhdmUtPm9mZnNldCgpKSk7Ci0gICAgfQotCiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJl
Z2lzdGVyc0ZvckNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycygpOwogCiAgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGlu
ZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpA
QCAtNDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkKICAg
ICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZp
eCwgZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgs
IGZpZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVzLm1hcCBkbyB8ZmllbGROYW1lfAor
ICAgICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVs
ZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0iCisgICAgICAgICAgICBlbmQuam9pbigi
XG4iKQorICAgICAgICBlbmQKKworICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZp
ZWxkcywgZmllbGROYW1lcykKICAgICAgICAgICAgIGZpZWxkcy5tYXAgZG8gfGZpZWxkLCB0eXBl
fAogICAgICAgICAgICAgICAgIGlmIHR5cGUua2luZF9vZj8gSGFzaAotICAgICAgICAgICAgICAg
ICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywg
dHlwZSl9XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9u
IHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUsIGZpZWxkTmFtZXMpfVxu
I3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAi
I3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAgICAgICAg
ICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1l
cy5wdXNoKGZpZWxkTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50
b19zfSBtXyN7ZmllbGROYW1lfTsiCiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBl
bmQuam9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0Rmll
bGRzKCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAgIGZpZWxkTmFtZXMgPSBbXQorICAgICAg
ICBwcmVmaXggPSAiICAgICAgICAiCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMocHJl
Zml4LCBAZmllbGRzLCBmaWVsZE5hbWVzKQorICAgICAgICBmaWVsZHMgPSBmaWVsZHMgKyAiXG4i
ICsgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCiAKICAgICAg
ICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAmJiAobm90IEBpbml0aWFs
aXplcnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsNiArMzY3LDI4
IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpsb2FkUHJvcGVydHkoR1BSUmUKICAgICAgICAgcmVz
dWx0KTsKIH0KIAordm9pZCBBc3NlbWJseUhlbHBlcnM6OnN0b3JlUHJvcGVydHkoSlNWYWx1ZVJl
Z3MgdmFsdWUsIEdQUlJlZyBvYmplY3QsIEdQUlJlZyBvZmZzZXQsIEdQUlJlZyBzY3JhdGNoKQor
eworICAgIEp1bXAgaXNJbmxpbmUgPSBicmFuY2gzMihMZXNzVGhhbiwgb2Zmc2V0LCBUcnVzdGVk
SW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
b2JqZWN0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBuZWcz
MihvZmZzZXQpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICBK
dW1wIHJlYWR5ID0ganVtcCgpOworICAgIAorICAgIGlzSW5saW5lLmxpbmsodGhpcyk7CisgICAg
YWRkUHRyKAorICAgICAgICBUcnVzdGVkSW1tMzIoCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQzMl90PihzaXplb2YoSlNPYmplY3QpKSAtCisgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oZmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMikgKiBzdGF0aWNfY2FzdDxpbnQzMl90Pihz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSksCisgICAgICAgIG9iamVjdCwgc2NyYXRjaCk7CisgICAg
CisgICAgcmVhZHkubGluayh0aGlzKTsKKyAgICAKKyAgICBzdG9yZVZhbHVlKHZhbHVlLAorICAg
ICAgICBCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKK30KKwogdm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRMb2FkU3RydWN0dXJlKFZNJiB2bSwgUmVnaXN0ZXJJRCBzb3VyY2Us
IFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogewogI2lmIFVTRShKU1ZBTFVF
NjQpCkBAIC02OTgsOCArNzIwLDEzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2Fs
bGVlU2F2ZXMKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGVtaXRWaXJ0
dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworfQorCit2b2lkIEFz
c2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChW
TSYgdm0sIENhbGxMaW5rSW5mbyogaW5mbykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5m
byksIEdQUkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFk
ZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1
dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGls
YXRpb25QdHJUYWc+KGNhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsOCArMjM0LDkg
QEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogICAgIAotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNs
b2JiZXJzIG9mZnNldC4KKyAgICAvLyBOb3RlIHRoYXQgdGhlc2UgY2xvYmJlciBvZmZzZXQuCiAg
ICAgdm9pZCBsb2FkUHJvcGVydHkoR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNldCwgSlNWYWx1
ZVJlZ3MgcmVzdWx0KTsKKyAgICB2b2lkIHN0b3JlUHJvcGVydHkoSlNWYWx1ZVJlZ3MgdmFsdWUs
IEdQUlJlZyBvYmplY3QsIEdQUlJlZyBvZmZzZXQsIEdQUlJlZyBzY3JhdGNoKTsKIAogICAgIHZv
aWQgbW92ZVZhbHVlUmVncyhKU1ZhbHVlUmVncyBzcmNSZWdzLCBKU1ZhbHVlUmVncyBkZXN0UmVn
cykKICAgICB7CkBAIC0zNzksMTUgKzM4MCwyNiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAK
KyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVu
dHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lLCBHUFJSZWcgc2NyYXRjaCkKKyAgICB7CisjaWYgTlVN
QkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCisgICAgICAgIGxvYWRQdHIoJnRvcEVu
dHJ5RnJhbWUsIHNjcmF0Y2gpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlckltcGwoc2NyYXRjaCk7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFS
QU0odG9wRW50cnlGcmFtZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKKyNlbmRp
ZgorICAgIH0KKwogICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUpCiAgICAgewogI2lmIE5VTUJFUl9P
Rl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBjb25zdCBUZW1wUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSB9OwogICAgICAgICBHUFJSZWcgdGVtcDEgPSB1c2VkUmVnaXN0ZXJzLmdldEZyZWVHUFIo
MCk7Ci0gICAgICAgIGxvYWRQdHIoJnRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKLSAgICAgICAgY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHRlbXAxKTsKKyAg
ICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodG9wRW50
cnlGcmFtZSwgdGVtcDEpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJh
bWUpOworICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7CiAjZW5kaWYKICAgICB9
CiAgICAgCkBAIC0xNzIwLDYgKzE3MzIsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHZv
aWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsK
KyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBD
YWxsTGlua0luZm8qKTsKICAgICAKICAgICB2b2lkIG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgp
OwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCYXNlbGluZUpJ
VENvZGUuaCIKKworI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5o
IgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitK
SVRBZGRJQyogTWF0aElDSG9sZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE11
bElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUU3ViSUMq
IE1hdGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVROZWdJQyogTWF0
aElDSG9sZGVyOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7
IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorCit2b2lkIE1hdGhJQ0hvbGRl
cjo6YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCit7CisgICAgbV9hZGRJQ3MgPSBX
VEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICBtX211bElDcyA9IFdURk1vdmUob3RoZXIubV9t
dWxJQ3MpOworICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAgbV9z
dWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKK30KKworQmFzZWxpbmVKSVRDb2RlOjpC
YXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNv
ZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgLCBNYXRoSUNI
b2xkZXIoKQoreyB9CisKK0Jhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSgpCit7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9C
YXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisj
aW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQmluYXJ5
QXJpdGhQcm9maWxlOworY2xhc3MgVW5hcnlBcml0aFByb2ZpbGU7CitzdHJ1Y3QgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBTaW1wbGVKdW1wVGFibGU7CitzdHJ1Y3QgU3RyaW5n
SnVtcFRhYmxlOworCitjbGFzcyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIHZvaWQgYWRv
cHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpOworICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmluYXJ5
QXJpdGhQcm9maWxlKik7CisgICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJv
ZmlsZSopOworICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwor
Citwcml2YXRlOgorICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFnPEpJVE11bElD
PiBtX211bElDczsKKyAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJhZzxKSVRTdWJJ
Qz4gbV9zdWJJQ3M7Cit9OworCitjbGFzcyBKSVRDb25zdGFudFBvb2wgeworcHVibGljOgorICAg
IHVzaW5nIENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50
OF90IHsKKyAgICAgICAgR2xvYmFsT2JqZWN0LAorICAgICAgICBDYWxsTGlua0luZm8sCisgICAg
ICAgIFN0cnVjdHVyZVN0dWJJbmZvLAorICAgICAgICBGdW5jdGlvbkRlY2wsCisgICAgICAgIEZ1
bmN0aW9uRXhwciwKKyAgICB9OworCisgICAgc3RydWN0IFZhbHVlIHsKKyAgICAgICAgVHlwZSB0
eXBlOworICAgICAgICBQYWNrZWRQdHI8dm9pZD4gcGF5bG9hZDsKKyAgICB9OworCisgICAgSklU
Q29uc3RhbnRQb29sKCkgPSBkZWZhdWx0OworICAgIEpJVENvbnN0YW50UG9vbChKSVRDb25zdGFu
dFBvb2wmJikgPSBkZWZhdWx0OworICAgIEpJVENvbnN0YW50UG9vbCYgb3BlcmF0b3I9KEpJVENv
bnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBDb25zdGFudCBhZGQoVHlwZSB0eXBlLCB2
b2lkKiBwYXlsb2FkID0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9
IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFudHMuYXBwZW5kKFZhbHVlIHsg
dHlwZSwgcGF5bG9hZCB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzLnNpemUoKTsgfQorICAgIFZh
bHVlIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpXTsgfQorCitwcml2
YXRlOgorICAgIFZlY3RvcjxWYWx1ZT4gbV9jb25zdGFudHM7Cit9OworCisKK2NsYXNzIEJhc2Vs
aW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsK
K3B1YmxpYzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2Rl
LCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKTsKKyAgICB+QmFzZWxpbmVK
SVRDb2RlKCkgb3ZlcnJpZGU7CisgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2lu
TWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQorCisg
ICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgQmFnPENh
bGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVK
dW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1w
VGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAgICBKSVRDb2RlTWFwIG1faml0Q29k
ZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOworICAgIGJvb2wg
bV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkocmV2aXNp
b24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHNpemVfdCBCYXNlbGluZUpJVFBs
YW46OmNvZGVTaXplKCkgY29uc3QKIAogQ29tcGlsYXRpb25SZXN1bHQgQmFzZWxpbmVKSVRQbGFu
OjpmaW5hbGl6ZSgpCiB7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmlu
YWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2pp
dC5maW5hbGl6ZU9uTWFpblRocmVhZChtX2NvZGVCbG9jayk7CiAgICAgc3dpdGNoIChyZXN1bHQp
IHsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VW
RU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQi
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVy
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJz
Ojpsb2dTaGFkb3dDaGlja2VuUHJvbG8KICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkp
OwogfQogCi12b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BS
UmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBz
dG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwotICAgIHN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkp
LCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgY2FsbGVlKSkpOwotICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93
UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUp
KSk7Ci0gICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKLSAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKGNvZGVCbG9jayksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7Ci0gICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKLX0K
LQogdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBH
UFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3Jh
dGNoMikKIHsKICAgICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hp
Y2tlbigpOwpAQCAtNzIsNiArNjIsMjggQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRv
d0NoaWNrZW5QYQogICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJn
R1BSKSk7CiB9CiAKKwordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cit2b2lkIEND
YWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUg
Y29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgc3RvcmVQdHIo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKKyAgICBzdG9yZVB0cihU
cnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNh
bGxlZSkpKTsKKyAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwg
T0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOworICAg
IHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CisgICAgc3RvcmVQdHIoY29kZUJsb2NrLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgY29kZUJsb2NrKSkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXgu
Yml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjps
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVn
cyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0
SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUlu
ZGV4KTsKK30KKwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0
KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUs
IEdQUlJlZyBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBs
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2Nv
cGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKIHZvaWQgQ0NhbGxIZWxwZXJzOjpl
bWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdo
ZXJlLCBTY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNo
YXIqIGRlc2NyaXB0aW9uKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg0MCw3ICs4NDAsMTQgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJl
ciBhbGwgdm9sYXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20g
b24gdGhlIHRvcCBvZgogICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgog
ICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNr
ZXQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdz
LCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworCitwcml2YXRlOgor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHZvaWQgbG9nU2hhZG93
Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRo
aXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgpOworcHVibGljOgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJl
ZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleCk7CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93
UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJs
b2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworCiAgICAgLy8gTGVhdmVzIGJlaGlu
ZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFj
a2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFk
b3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
RGF0YS5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxs
ZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayogY29kZUJsb2NrKQogeworICAgIHNldHVwQ2FsbGVl
U2F2ZVJlZ2lzdGVycyhjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK3Zv
aWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zKQorewogICAgIFJlZ2lz
dGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMgeyBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVn
aXN0ZXJzKCkgfTsKLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZl
TG9jYXRpb25zID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSB7IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+
YXQoaSkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVEYXRhLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQz
LDEzIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJnczsKICAgICB1bnNp
Z25lZCBudW1Mb2NhbHMgeyBVSU5UX01BWCB9OwogICAgIHVuc2lnbmVkIG51bVBhc3NlZEFyZ3Mg
eyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OyAv
LyBPbiBvdXIgbWFjaGluZSBmcmFtZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVy
TWFwPFZhbHVlUmVjb3Zlcnk+IHJlZ2lzdGVyczsKICAgICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0
ZXIgeyBJbnZhbGlkR1BSUmVnIH07CiAKICAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVy
cyhDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCopOwogI2VuZGlmCiAgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7
CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
Zmxlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAg
Q2FsbEZyYW1lU2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYQogICAgIDogbV9qaXQoaml0
KQogICAgICwgbV9vbGRGcmFtZShkYXRhLm51bUxvY2FscyArIENhbGxlckZyYW1lQW5kUEM6OnNp
emVJblJlZ2lzdGVycywgbnVsbHB0cikKICAgICAsIG1fbmV3RnJhbWUoZGF0YS5hcmdzLnNpemUo
KSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQotICAgICwgbV9h
bGlnbmVkT2xkRnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCi0gICAg
ICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGppdC5jb2RlQmxvY2soKS0+bnVt
UGFyYW1ldGVycygpKSkKKyAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVycyArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRh
Lm51bVBhcmFtZXRlcnMpKQogICAgICwgbV9hbGlnbmVkTmV3RnJhbWVTaXplKENhbGxGcmFtZTo6
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCiAgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGln
bkZyYW1lKGRhdGEuYXJncy5zaXplKCkpKQogICAgICwgbV9mcmFtZURlbHRhKG1fYWxpZ25lZE5l
d0ZyYW1lU2l6ZSAtIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSkKICAgICAsIG1fbG9ja2VkUmVnaXN0
ZXJzKFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKSkKICAgICAsIG1fbnVtUGFzc2VkQXJncyhk
YXRhLm51bVBhc3NlZEFyZ3MpCisgICAgLCBtX251bVBhcmFtZXRlcnMoZGF0YS5udW1QYXJhbWV0
ZXJzKQogewogICAgIC8vIFdlIGFyZSBhbGxvd2VkIGFsbCB0aGUgdXN1YWwgcmVnaXN0ZXJzLi4u
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsg
KQpAQCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JU
YWlsQ2EKICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQp
LCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYXJndW1lbnRDb3Vu
dE9LID0KICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVh
bCwgbV9uZXdGcmFtZUJhc2UsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpKTsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9udW1QYXJhbWV0ZXJzKSk7CiAgICAgbV9qaXQu
YWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudFJlZ2lzdGVy
cygpIC0gMSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwgbV9uZXdGcmFtZUJh
c2UpOwogICAgIG1faml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNr
QWxpZ25tZW50UmVnaXN0ZXJzKCkpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9qaXQubXVsMzIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFt
ZUJhc2UsIG1fbmV3RnJhbWVCYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0
LDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgZGF0YTsK
ICAgICAgICAgZGF0YS5udW1Mb2NhbHMgPSBudW1Mb2NhbHMoKTsKICAgICAgICAgZGF0YS5udW1Q
YXNzZWRBcmdzID0gbV9udW1QYXNzZWRBcmdzOworICAgICAgICBkYXRhLm51bVBhcmFtZXRlcnMg
PSBtX251bVBhcmFtZXRlcnM7CiAgICAgICAgIGRhdGEuY2FsbGVlID0gZ2V0TmV3KFZpcnR1YWxS
ZWdpc3RlciB7IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSB9KS0+cmVjb3ZlcnkoKTsKICAgICAgICAg
ZGF0YS5hcmdzLnJlc2l6ZShhcmdDb3VudCgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhcmdDb3VudCgpOyArK2kpCkBAIC03OTgsNiArNzk5LDcgQEAgcHJpdmF0ZToKICAgICBi
b29sIHBlcmZvcm1TYWZlV3JpdGVzKCk7CiAgICAgCiAgICAgdW5zaWduZWQgbV9udW1QYXNzZWRB
cmdzIHsgVUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBtX251bVBhcmFtZXRlcnMgeyBVSU5UX01B
WCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQYXRjaENhbGxC
eVJldHVybkFkZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAg
OiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpTSW50ZXJmYWNlSklUKCZ2
bSwgbnVsbHB0cikKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBt
X2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDAp
CiAgICAgLCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAgLTc3LDYgKzc3LDkgQEAg
SklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRF
bWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25zdGFudCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7
CisgICAgbV9wcm9maWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICBtX3VubGlua2VkQ29k
ZUJsb2NrID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogfQogCiBKSVQ6On5KSVQo
KQpAQCAtOTAsOCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2so
KQogICAgICAgICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0gICAgCi0g
ICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihP
cHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRk
cmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
IHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0
aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1Qw
LCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBBU1NFUlQo
IW1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxl
ZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCkudG9wRW50cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNiwyMCBAQCB2b2lkIEpJVDo6ZW1pdE5v
dGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBw
b2ludGVyVG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcg
cG9pbnRlclRvU2V0KQogeworICAgIGF1dG8gb2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBvaW50
ZXJUb1NldCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2lu
dGVyVG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOworICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0
VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hH
UFIpCiB7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT52YXJSZWFkT25seVdhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0z
MihJc0ludmFsaWRhdGVkKSkpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwg
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
c2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5
V2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChF
cXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjph
c3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQpAQCAtMTI5LDcgKzEzNyw3IEBAIHZvaWQgSklUOjph
c3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3RlciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7
CkBAIC0xODEsNjEgKzE4OSw0NCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJ
bnN0cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRD
b2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsK
KyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUs
IHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0
T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFi
bGUgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJh
cmVEYXRhVGFnKSwgcmVzdWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0Zv
ckNvbnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkp
LCByZXN1bHQpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRv
Q2FsbEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworI2lm
IEFTU0VSVF9FTkFCTEVECisgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgp
IHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+
Y29kZUJsb2NrKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICB9KTsKKyNlbmRpZgorfQorCiB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQotICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsK
KyAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4i
KTsKICAgICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3Vt
ZW50Q291bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3Ry
dWN0aW9uQ291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7
CiAKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJs
b2NrLT52bSgpOwogICAgIEJ5dGVjb2RlSW5kZXggc3RhcnRCeXRlY29kZUluZGV4KDApOwotICAg
IGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1fY29kZUJsb2NrLT5pbmhlcml0
czxQcm9ncmFtQ29kZUJsb2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmluaGVyaXRzPE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2s+KHZtKSkpIHsKLSAgICAgICAgLy8gV2UgY2FuIG9ubHkgZG8gdGhpcyBv
cHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2RlQmxvY2sncyBleGFjdGx5
IG9uY2UuCi0gICAgICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxkIGJlIGludmFsaWQgb3Ro
ZXJ3aXNlLiBXaGVuIHRoZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRzIHRvCi0gICAgICAgIC8v
IGRvIE9TUiBlbnRyeSBpbnRvIHRoZSBiYXNlbGluZSBKSVQgaW4gYSBsb29wLCBpdCB3aWxsIHBh
c3MgaW4gdGhlIGJ5dGVjb2RlIG9mZnNldCBpdAotICAgICAgICAvLyB3YXMgZXhlY3V0aW5nIGF0
IHdoZW4gaXQga2lja2VkIG9mZiBvdXIgY29tcGlsYXRpb24uIFdlIG9ubHkgbmVlZCB0byBjb21w
aWxlIGNvZGUgZm9yCi0gICAgICAgIC8vIGFueXRoaW5nIHJlYWNoYWJsZSBmcm9tIHRoYXQgYnl0
ZWNvZGUgb2Zmc2V0LgotCi0gICAgICAgIC8vIFdlIG9ubHkgYm90aGVyIGJ1aWxkaW5nIHRoZSBi
eXRlY29kZSBncmFwaCBpZiBpdCBjb3VsZCBzYXZlIHRpbWUgYW5kIGV4ZWN1dGFibGUKLSAgICAg
ICAgLy8gbWVtb3J5LiBXZSBwaWNrIGFuIGFyYml0cmFyeSBvZmZzZXQgd2hlcmUgd2UgZGVlbSB0
aGlzIGlzIHByb2ZpdGFibGUuCi0gICAgICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkgPj0gMjAwKSB7Ci0gICAgICAgICAgICAvLyBBcyBhIHNpbXBsaWZpY2F0aW9u
LCB3ZSBkb24ndCBmaW5kIGFsbCBieXRlY29kZSByYW5nZXMgdGhhdCBhcmUgdW5yZWFjaGFibGUu
Ci0gICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGZpbmQgdGhlIG1pbmltdW0gYnl0ZWNv
ZGUgb2Zmc2V0IHRoYXQgaXMgcmVhY2hhYmxlLCBhbmQKLSAgICAgICAgICAgIC8vIGNvbXBpbGUg
Y29kZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0IG9ud2FyZHMuCi0KLSAgICAgICAgICAgIEJ5
dGVjb2RlR3JhcGggZ3JhcGgobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KSk7Ci0gICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmluZEJh
c2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2spOwotCi0gICAgICAgICAg
ICBHcmFwaE5vZGVXb3JrbGlzdDxCeXRlY29kZUJhc2ljQmxvY2sqPiB3b3JrbGlzdDsKLSAgICAg
ICAgICAgIHN0YXJ0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAg
IHdvcmtsaXN0LnB1c2goYmxvY2spOwotCi0gICAgICAgICAgICB3aGlsZSAoQnl0ZWNvZGVCYXNp
Y0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRC
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChzdGQ6Om1pbihzdGFydEJ5dGVjb2RlSW5kZXgu
b2Zmc2V0KCksIGJsb2NrLT5sZWFkZXJPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgc3VjY2Vzc29ySW5kZXggOiBibG9jay0+c3VjY2Vzc29ycygpKQotICAgICAgICAg
ICAgICAgICAgICB3b3JrbGlzdC5wdXNoKCZncmFwaFtzdWNjZXNzb3JJbmRleF0pOwotCi0gICAg
ICAgICAgICAgICAgLy8gQWxzbyBhZGQgY2F0Y2ggYmxvY2tzIGZvciBieXRlY29kZXMgdGhhdCB0
aHJvdy4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9u
SGFuZGxlcnMoKSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gYmxvY2stPmxlYWRlck9mZnNldCgpOyBieXRlY29kZU9mZnNldCA8IGJsb2NrLT5s
ZWFkZXJPZmZzZXQoKSArIGJsb2NrLT50b3RhbExlbmd0aCgpOykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZU9mZnNl
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogaGFuZGxlciA9IG1fY29kZUJs
b2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChncmFwaC5maW5k
QmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoaGFuZGxlci0+dGFyZ2V0KSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7
CiAgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKQEAgLTI3OCw4ICsyNjksOCBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7Ci0gICAgICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJv
YmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdICIsIG9w
Y29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAi
LCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTUyNyw3ICs1MTgs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIEJ5dGVj
b2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAotICAgICAgICBjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5h
dChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICAKICAgICAgICAgaWYgKEpJVEludGVy
bmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJCYXNlbGluZSBKSVQgZW1pdHRp
bmcgc2xvdyBjb2RlIGZvciAiLCBtX2J5dGVjb2RlSW5kZXgsICIgYXQgb2Zmc2V0ICIsIChsb25n
KWRlYnVnT2Zmc2V0KCkpOwpAQCAtNTQ1LDggKzUzNiw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFz
ZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9i
ZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSBTTE9XICIsIG9wY29kZU5hbWVzW29w
Y29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2sp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTYwMyw3ICs1OTQsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV9pZCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikKLSNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX2dldF9mcm9tX3Njb3BlKQogI2VuZGlmCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9wdXRfdG9fc2NvcGUpCkBAIC02NzQsNTUgKzY2NSw1NSBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKK3ZvaWQgSklUOjplbWl0TWF0ZXJpYWxp
emVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpCit7CisgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21ldGFk
YXRhR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZK
SVREYXRhKCkpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
OkpJVERhdGE6Om9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7Cit9
CisKK3ZvaWQgSklUOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCkKK3sKKyAgICBCYXNlOjplbWl0
UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dp
dGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBERkc6
OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsK
KyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmNh
cGFiaWxpdHlMZXZlbCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIERGRzo6Q2Fu
bm90Q29tcGlsZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBt
X2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFBy
b2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGls
ZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5CZU9w
dGltaXplZCA9IHRydWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVl
OwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChtX2NvZGVCbG9jay0+Y29kZVR5
cGUoKSkgewotICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICBjYXNlIE1vZHVsZUNvZGU6Ci0gICAg
Y2FzZSBFdmFsQ29kZToKLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxp
bmVkID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAg
ICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2Ug
ZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCi0gICAgICAgIC8vIERvbid0IG92ZXJyaWRl
IHRoYXQgb2JzZXJ2YXRpb24uCi0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0Jl
SW5saW5lZCAmPSBjYW5JbmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbiht
X2NvZGVCbG9jayk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICAgIGlmIChtX2NvZGVCbG9j
ay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX2NvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgewotICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAobV9j
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAg
ICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9
IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGVzKCkpOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9m
VW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9j
ay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVk
VmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51
bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAgICAgaWYgKG1f
dW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCisg
ICAgICAgICAgICBtX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFi
bGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVz
KCkpOworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0
cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRh
YmxlcyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+
bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CiAgICAgfQogCi0gICAg
aWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVy
KCkpKSkKLSAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxl
cj4obV9jb2RlQmxvY2spOworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1i
bHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2Vt
YmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IGJ1aWxkIGEg
ZGlzYXNzZW1ibGVyIG9mZiBvZiBVbmxpbmtlZENvZGVCbG9jay4KKyAgICAgICAgbV9kaXNhc3Nl
bWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9wcm9maWxlZENvZGVCbG9jayk7
CisgICAgfQogICAgIGlmIChVTkxJS0VMWShtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpKSB7
CisgICAgICAgIC8vIEZJWE1FOiBidWlsZCBwcm9maWxlciBkaXNhc3NlbWJsZXIgb2ZmIFVubGlu
a2VkQ29kZUJsb2NrLgogICAgICAgICBtX2NvbXBpbGF0aW9uID0gYWRvcHRSZWYoCiAgICAgICAg
ICAgICBuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKAotICAgICAgICAgICAgICAgIG1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fY29kZUJsb2NrKSwKKyAg
ICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rl
c0ZvcihtX3Byb2ZpbGVkQ29kZUJsb2NrKSwKICAgICAgICAgICAgICAgICBQcm9maWxlcjo6QmFz
ZWxpbmUpKTsKLSAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1f
dm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOworICAgICAgICBtX2NvbXBp
bGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgo
MCkpKTsKQEAgLTc0MiwxMSArNzMzLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhv
dXRGaW5hbGl6aW4KICAgICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgp
OwotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9
PSBGdW5jdGlvbkNvZGUpCisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1
ZSgpOwogCiAgICAgTGFiZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAotICAgIGludCBmcmFtZVRvcE9m
ZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpOworICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3Vu
bGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJh
bWVTaXplID0gLWZyYW1lVG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVU
b3BPZmZzZXQpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwogICAgIEp1bXBMaXN0IHN0YWNr
T3ZlcmZsb3c7CkBAIC03NTcsMTYgKzc0OSwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtX
aXRob3V0RmluYWxpemluCiAgICAgbW92ZShyZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBlbWl0U2F2ZUNhbGxlZVNh
dmVzKCk7CisgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRNYXRlcmlhbGl6
ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25z
dGFudFBvb2xSZWdpc3RlcnMoKTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9
PSBGdW5jdGlvbkNvZGUpIHsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUo
KSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwot
ICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYg
KCFtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwgbV91bmxpbmtlZENvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpID4gMSkpIHsKKyAgICAgICAgICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDIpOworICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRW
YWx1ZVByb2ZpbGVzKCkgKyBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+OjpvZmZzZXRPZlN0b3Jh
Z2UoKSksIHJlZ1QyKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3Vt
ZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVu
IHdlIHdhbnQgdG8gcHV0IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCiAgICAgICAgICAg
ICAgICAgLy8ga2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHdh
bnQgdG8gcmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2Rl
QmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCisgICAgICAgICAgICAgICAgaWYg
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBD
YWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC03Nzcs
MTIgKzc3MywxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAg
ICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVS
ZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykp
LCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3Vt
ZW50KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdz
LCBBZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpICsgVmFsdWVQ
cm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KICAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2Rl
QmxvY2stPmppdFR5cGUoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVCht
X3Byb2ZpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXpl
TWFya2VyKSkKICAgICAgICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92
ZSgqc2l6ZU1hcmtlciksICp0aGlzKTsKQEAgLTc5OSwyNCArNzk1LDI3IEBAIHZvaWQgSklUOjpj
b21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNhbGxP
cGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0
YWNrT3ZlcmZsb3dFcnJvciwgbV9jb2RlQmxvY2spOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDApOworICAgIGNhbGxPcGVy
YXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNr
T3ZlcmZsb3dFcnJvciwgcmVnVDApOwogCiAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBwYXJhbWV0
ZXJzIGlzIDEsIHdlIG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCi0gICAgYm9vbCByZXF1aXJl
c0FyaXR5Rml4dXAgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7Ci0gICAgaWYg
KG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5
Rml4dXApIHsKKyAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSAhPSAxOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5j
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKICAgICAg
ICAgbV9hcml0eUNoZWNrID0gbGFiZWwoKTsKLSAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigw
KSwgJm1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7CisKICAgICAgICAgZW1p
dEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1f
Y29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICBlbWl0UHV0Q29k
ZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUocmVnVDApOworICAgICAgICBzdG9yZTgoVHJ1c3RlZElt
bTMyKDApLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxkQWx3YXlzQmVJ
bmxpbmVkKCkpKTsKIAogICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QxKTsKLSAgICAgICAgYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRl
cnMpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CisgICAgICAgIGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAKICAgICAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKIAogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2Fz
dDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4
Y2VwdGlvbihtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0
QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX3VubGlua2VkQ29kZUJsb2NrLT5p
c0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9u
Q2FsbEFyaXR5Q2hlY2ssIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAg
IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRo
aXMpOwpAQCAtODM5LDcgKzgzOCw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRG
aW5hbGl6aW4KICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsK
ICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKLSAgICBtX2xpbmtC
dWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMs
IG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7
CisgICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5r
QnVmZmVyKCp0aGlzLCBtX3VubGlua2VkQ29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpC
YXNlbGluZUpJVCwgZWZmb3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04NTgsOCArODU3LDgg
QEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAg
ICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVj
b3JkOjpDaGFyYWN0ZXI6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBj
b25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRD
b2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAg
ICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsg
cmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7
IGogPCB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewogICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRz
W2pdOwpAQCAtODcxLDggKzg3MCw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbnN0IFVu
bGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU3RyaW5n
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAg
ICAgICAgIGF1dG8gY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQ
dHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsK
ICAgICAgICAgICAgIGZvciAoYXV0byYgbG9jYXRpb24gOiB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0
VGFibGUudmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsb2Nh
dGlvbi5tX2JyYW5jaE9mZnNldDsKQEAgLTkwNiwzMiArOTA1LDM1IEBAIHZvaWQgSklUOjpsaW5r
KCkKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIHJlY29yZC5jYWxs
ZWUpOwogICAgIH0KIAotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHMsIHBhdGNo
QnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZm
ZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hC
dWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIHBhdGNoQnVmZmVy
KTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwot
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1faW5CeVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2luc3RhbmNlT2ZzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNo
ZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOworICAgIGF1dG8gZmluYWxp
emVJQ3MgPSBbJl0gKGF1dG8mIGdlbmVyYXRvcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBnZW4g
OiBnZW5lcmF0b3JzKSB7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFy
dCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0
YXJ0KTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1fZG9uZSk7Cisg
ICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24g
PSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zbG93
UGF0aEJlZ2luKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5
SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9n
ZXRCeUlkc1dpdGhUaGlzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX3B1dEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeUlkcyk7CisgICAg
ZmluYWxpemVJQ3MobV9kZWxCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeUlkcyk7Cisg
ICAgZmluYWxpemVJQ3MobV9pbkJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9m
cyk7CisgICAgZmluYWxpemVJQ3MobV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7CiAKICAgICBmb3Ig
KGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgewotICAgICAg
ICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAg
ICAgICAgaW5mby5zZXRDb2RlTG9jYXRpb25zKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCks
Ci0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNv
bXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pKTsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0lu
Zm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAg
ICBpbmZvLmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0
clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbik7CiAgICAgfQogCi0gICAgewotICAg
ICAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6
ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNv
ZGVPZmZzZXRdLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBw
ZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
PEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAgICB9Ci0g
ICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVyLmZpbmFs
aXplKCkpOworICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOworICAgIGZv
ciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxz
LnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNv
ZGVPZmZzZXRdLmlzU2V0KCkpCisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQo
Qnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNF
bnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDI2ICs5NDIs
MzggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShtX2NvbXBp
bGF0aW9uKSkgeworICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIG1ha2UgdGhlIGJ5dGVjb2Rl
IHByb2ZpbGVyIGtub3cgYWJvdXQgVW5saW5rZWRDb2RlQmxvY2s/CiAgICAgICAgIGlmIChPcHRp
b25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkKICAgICAgICAgICAgIG1fZGlz
YXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fY29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVm
ZmVyKTsKLSAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlv
bihtX2NvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOworICAgICAgICBtX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcHJvZmlsZWRDb2RlQmxvY2ssICptX2NvbXBp
bGF0aW9uKTsKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlk
QnVpbGRNYXBwaW5nKCkpCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVl
PFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwg
cGF0Y2hCdWZmZXIpOwogICAgIAorICAgIC8vIEZJWE1FOiBNYWtlIGEgdmVyc2lvbiBvZiBDb2Rl
QmxvY2tXaXRoSklUVHlwZSB0aGF0IGtub3dzIGFib3V0IFVubGlua2VkQ29kZUJsb2NrLgogICAg
IENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAg
cGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBm
b3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZv
ciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3Byb2ZpbGVkQ29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29kZSA9IGFk
b3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgQmFzZWxpbmVK
SVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2spKTsKKworICAgIG1faml0Q29kZS0+bV91bmxp
bmtlZENhbGxzID0gV1RGTW92ZShtX3VubGlua2VkQ2FsbHMpOworICAgIG1faml0Q29kZS0+bV9l
dmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7CisgICAgbV9q
aXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0gV1RGTW92ZShtX3VubGlua2VkU3R1YkluZm9z
KTsKKyAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zd2l0Y2hK
dW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdU
Rk1vdmUobV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1faml0Q29k
ZU1hcCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCk7CisgICAgbV9qaXRDb2RlLT5hZG9w
dE1hdGhJQ3MobV9tYXRoSUNzKTsKKyAgICBtX2ppdENvZGUtPm1fY29uc3RhbnRQb29sID0gV1RG
TW92ZShtX2NvbnN0YW50UG9vbCk7CisgICAgbV9qaXRDb2RlLT5tX2lzU2hhcmVhYmxlID0gbV9p
c1NoYXJlYWJsZTsKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0
YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVC
bG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCBy
ZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKKyAgICAgICAg
ZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX3Vu
bGlua2VkQ29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFn
Z2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkp
OwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKCkKK0Nv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAK
QEAgLTk2OCwyNSArOTgyLDE0IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1h
aW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tz
KCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENv
ZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyAr
K2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0
aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMx
OD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFw
KCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4oKTsKLSAgICB9Ci0KICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkK
LSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1Rv
Q29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX2ppdENvZGUtPm1fcGNUb0NvZGVPcmlnaW5NYXAg
PSBXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApOwogCiAgICAgbV92bS0+bWFjaGluZUNvZGVC
eXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0YXRpY19j
YXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAgICAgICAgc3RhdGljX2Nhc3Q8ZG91
YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CisgICAgICAgIHN0YXRpY19j
YXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CiAK
LSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShtX2ppdENvZGUu
cmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwog
fQpAQCAtOTk4LDExICsxMDAxLDExIEBAIHNpemVfdCBKSVQ6OmNvZGVTaXplKCkgY29uc3QKICAg
ICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJ
VDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVm
b3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoZWZmb3J0
KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICByZXR1cm4gZmluYWxp
emVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
RXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxOCArMTA0NSwyOCBAQCB2b2lkIEpJVDo6ZG9N
YWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxv
ZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0
aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVC
bG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5s
aW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpID09IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Y29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAogICAgIHJldHVybiByb3VuZExvY2Fs
UmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChjb2RlQmxvY2stPm51bUNhbGxlZUxv
Y2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9CiAK
LWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vu
c2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQor
eworICAgIHJldHVybiBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENv
ZGVCbG9jaygpKTsKK30KKworaW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2Vk
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2spIC0gMSkub2Zmc2V0KCk7CiB9CiAK
K2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sK
KyAgICByZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2Rl
QmxvY2soKSk7Cit9CisKIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gSklUOjpjb21waWxlVGlt
ZVN0YXRzKCkKIHsKICAgICBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IHJlc3VsdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogCiAj
ZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwgZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01F
U1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9mZnNldCBcIiVzXCIgc2hvdWxkIGJlICVk
LCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19jYXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0
aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5j
bHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCkBAIC00NCw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSklU
TWF0aElDLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUg
IkpTSW50ZXJmYWNlSklULmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiUENU
b0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCiAjaW5jbHVkZSA8
d3RmL1VuaXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsxNTEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25JbmZvIHsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBkb25lTG9jYXRpb247Ci0gICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwor
ICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRDYWxsTGlua0luZm87CisgICAg
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQ7CiAgICAg
fTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQ
dHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCi0g
ICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklU
IHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHB1YmxpYyBKU0ludGVyZmFj
ZUpJVCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFRodW5rczsK
QEAgLTE3MSw2ICsxNzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gd2lsbCBjb21w
cmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBh
dGNoZWQgb2Zmc2V0LgogICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWRE
ZWZhdWx0T2Zmc2V0ID0gMjU2OwogCisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJ
VDsKKwogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIs
IEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4
KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMTc4LDI4ICsxODIsMzMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6dm0oKTsgfQog
CiAgICAgICAgIHZvaWQgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxh
dGlvbkVmZm9ydCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWluVGhy
ZWFkKCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFkKENv
ZGVCbG9jayopOwogICAgICAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdDsKIAogICAgICAgICB2
b2lkIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgICAgICAKICAg
ICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUo
ZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVP
ZmZzZXQpLnByaXZhdGVDb21waWxlKGNvZGVCbG9jaywgZWZmb3J0KTsKICAgICAgICAgfQogCisg
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2Rl
QmxvY2sqKTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihD
b2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5s
aW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRG
b3IoQ29kZUJsb2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEhhc2hN
YXA8Q1N0cmluZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0cygpOwogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBpbGVUaW1lKCk7CiAKKyAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0YUdQUiA9IExMSW50OjpSZWdpc3RlcnM6
Om1ldGFkYXRhVGFibGVHUFI7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfY29u
c3RhbnRzR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFI7CisKICAgICBwcml2YXRlOgogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKICAgICAgICAgdm9pZCBwcml2YXRl
Q29tcGlsZUxpbmtQYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KTsKICAgICAgICAgdm9pZCBsaW5rKCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZh
dGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1
bHQgcHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCiAg
ICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0
aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2ICsyMzIsMzIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZT4KKyAgICAgICAgdm9pZCBsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwg
c2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwg
c2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBz
aXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1
ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEo
VmFsdWVUeXBlLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZTMyVG9NZXRhZGF0
YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisK
KyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50
SW5kZXgsIEdQUlJlZyk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBsb2FkR2xvYmFsT2Jq
ZWN0KEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxS
ZWdpc3RlciwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1l
SW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOworCiAgICAgICAgIHZvaWQgZXhjZXB0
aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2V4
Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7CkBAIC0yNTgsMTYgKzI5MywxNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAg
IE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2Nv
bnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExp
bmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAg
ICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09
IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwg
Q2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKIAog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgYm9vbCBjb21waWxlVGFpbENh
bGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7
CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlu
a0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBp
bGVDYWxsRXZhbChjb25zdCBPcCYpOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwpAQCAtMjg3LDE0ICszMjIsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAg
ICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcik7CisgICAgICAgIHZvaWQg
ZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpOwogCiAgICAgICAgIC8vIFRoaXMgYXNzdW1l
cyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJlZ1QwIGFuZCB0aGF0IHJlZ1QzIGlz
IGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4KICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVn
KTsKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpT
VmFsdWVSZWdzKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJlZyk7Ci0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEm
LCBKU1ZhbHVlUmVncyk7CisgICAgICAgIC8vdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYsIEdQUlJlZyk7CisgICAgICAgIC8vdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYs
IEdQUlJlZyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1ZhbHVlUmVncyk7CiAjZWxzZQog
ICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1
ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOwpAQCAtMzA1LDggKzM0MSwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Nh
bWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1
ZSwgdm9pZD4KICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUo
T3AgYnl0ZWNvZGUpOwogCi0gICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3JhdGNo
R1BSKTsKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0
ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2
b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lz
dGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBS
ZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01OTMsNyArNjMxLDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hp
bnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwpAQCAtNjExLDcgKzY0OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICNlbmRpZgogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNywxNCArNjY0LDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAg
ICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlKTsK
LSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNj
ZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFj
Y2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lk
IGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJ
bnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVj
ayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgZW1pdFZhclJl
YWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9p
ZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7CiAg
ICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAt
NjQ2LDcgKzY4Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1p
dEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7
CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAg
dm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZvaWQg
ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAgICAg
dm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZh
cmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZh
cihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NSw2ICs2OTIsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChW
aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxS
ZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdp
c3Rlcik7CkBAIC02NzYsMTMgKzcxNCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlf
aWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcihWTSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X3By
aXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0
b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNs
b3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVy
YXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfaGFu
ZGxlckdlbmVyYXRvcihWTSYpOwpAQCAtNjk2LDMyICs3MzIsMTYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7
CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihy
ZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0m
KTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZST01fU0NPUEVf
R0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0
RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KLSAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1vZHVs
ZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4gdXNl
IGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3ZSBk
b24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAgICAgICAgICAg
cmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JFU09MVkVfU0NP
UEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMj
R2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX1JF
U09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5F
UkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdl
bmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtO
YW1lKTsKLQogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0m
KTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCisgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGVHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJik7Cisg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVy
YXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBj
b25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mLCBzdGQ6
Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKwogICAgICAg
ICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207CkBAIC03NjAsMTAg
Kzc4MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdm9p
ZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChBZGRyZXNzLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRh
dGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIEFkZHJl
c3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBC
eXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQp
OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0
IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdz
PgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+
OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIxLDIwICs4NDEsMjAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkpOwogICAgICAgICB9
CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlv
blR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVj
b2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBz
dGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQs
IE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
TWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAg
ICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShieXRl
Y29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lIEJ5
dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0
aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0gICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgdGFyZ2V0LCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgdGFyZ2V0LCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5cGU+KHRhcmdldCwg
YXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRkcmVzcyhHUFJJbmZvOjpu
b25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5
dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1
bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlw
ZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOSwyNSArOTM5LDIwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7
IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRP
cklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAgICAg
IGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGlu
ZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBmYWxz
ZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJl
ZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFsbCBj
b2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsg
cmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGVtaXRNYXRlcmlhbGl6ZU1l
dGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgdm9pZCBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRp
bWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0
YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNpc3RlbnQg
YWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMu
Ci0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJl
YWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZv
KE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotICAg
ICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIAog
ICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtOTY0LDkgKzk3OSw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2Fz
ZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKLSAgICAgICAg
SGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7Ci0gICAgICAg
IEhhc2hNYXA8dWludDY0X3QsIEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9jb3BpZWRBcml0aFByb2Zp
bGVzOwotCiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwogICAgICAgICBKdW1w
TGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjazsKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMDAwLDExICsxMDEyLDI2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dl
bmVyYXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAog
ICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJvb2wgbV9jYW5CZU9wdGlt
aXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAg
ICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgICAg
IFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgICAgIENvZGVCbG9jayogbV9w
cm9maWxlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVW5saW5rZWRDb2RlQmxvY2sq
IG1fdW5saW5rZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisKKyAgICAgICAgTWF0aElDSG9sZGVy
IG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV9qaXRDb2RlOwor
CisgICAgICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICAgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVjdENvbnN0YW50IHsgc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAgICAgIEJhZzxVbmxpbmtlZENhbGxMaW5r
SW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxD
YWxsTGlua0luZm9zOworICAgICAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91
bmxpbmtlZFN0dWJJbmZvczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBt
X3N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4g
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAgICAgIHN0cnVjdCBOb3RBQ29kZUJsb2Nr
IHsgfSBtX2NvZGVCbG9jazsKKworICAgICAgICBib29sIG1faXNTaGFyZWFibGUgeyB0cnVlIH07
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENo
YXIob3AyKSkgewogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0K
IAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEp
OwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IElu
dC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1Qx
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2Fk
KG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4
IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
LSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklU
TmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJl
bnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0
ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQg
Y2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlv
bkFyaXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNo
aWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRBZGRJQyogYWRkSUMg
PSBtX21hdGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9u
VG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNG
YXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJ
bmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlv
blN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2Zp
bGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNS
ZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAg
ICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAK
QEAgLTEwMTUsMTAgKzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFy
eU1hdGhJQwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRo
UHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRo
UHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0
aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAg
IGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAt
MTA1NSwxMyArMTA2MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRo
SUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRo
SUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlm
IChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmICht
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0
aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNy
Y1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNo
RnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChy
ZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCBy
ZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpA
QCAtMTEyMCwxMyArMTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5
TWF0aElDCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
bWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAg
ICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBp
ZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsK
KyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwor
ICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
Yml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0
d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7
CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFi
ZWwoKTsKQEAgLTExNjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJ
bnN0cnVjdGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVs
bHB0cjsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2Zp
bGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJh
bmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNv
ZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjIwLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9t
dWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVs
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyog
bXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BN
dWw+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAg
SklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAg
ICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsK
ICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4
ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklD
KGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVT
dWIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNw
cAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNv
bXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCByZWdUMSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFk
ZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxF
dmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTks
NyArMjU5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAg
ICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgq
bV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0
UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7
CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRp
b24gPSBsYWJlbCgpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpA
QCAtMzQxLDcgKzM0MSw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3Qg
SW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAK
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzU0LDcgKzM1Myw3IEBA
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRl
ICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFt
ZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50
LmgiCkBAIC00NCw3ICs0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAK
QEAgLTUzLDE4ICs1NCwxOCBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAh
PSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdz
CiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNv
ZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZz
ZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRl
Y29kZSwgY2hlY2twb2ludCkpOwogCisKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFy
cmF5UHJvZmlsZUZvcihtZXRhZGF0YSwgY2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1
Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBP
cENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0lu
Zm86Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNl
ZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAt
NzgsNyArNzksNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9j
YWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAg
fHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNv
bXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1Zh
bHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50
cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVy
YXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6
ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJh
dGlvbihzaXplT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRp
b24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7
CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAg
IGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEs
IHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAq
IHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEs
MTQgKzEwMywxNiBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAg
ICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJh
bWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFy
YXJnc0ZyYW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFy
Z09mZnNldCwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxP
cGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJn
T2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAg
Ly8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEs
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9h
ZDMyKGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1Qw
KTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsK
LSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1Qw
KTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0
ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRk
cmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKCkpKTsKICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5p
dGlhbGl6ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEzMSwxNiBAQCBib29sIEpJVDo6Y29tcGlsZUNh
bGxFdmFsKGNvbnN0IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwo
Y29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigt
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3Rlciwg
QWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMSk7CisgICAgc3Rv
cmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6
OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdU
Mik7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25DYWxsRXZhbCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
Mik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOwogCiAg
ICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogCkBAIC0xNDgsNyArMTUyLDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2
YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5r
SW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5m
byA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7
CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwogCiAgICAg
aW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKQEAgLTE1Niw0MyArMTYwLDQ3
IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJl
Z2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSksIHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7
CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5m
byk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8q
LCB1bnNpZ25lZCkKLXsKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxp
bmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KSB7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRh
aWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8sIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25z
dCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5r
SW5mb0NvbnN0YW50KQogewotICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwot
ICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1
ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsK
LSAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJh
bWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVE
YXRhPigpOworICAgIHNodWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdj
OworICAgIHNodWZmbGVEYXRhLT5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpOworICAgIHNodWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQog
ICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXpl
b2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJn
Yyk7CisgICAgc2h1ZmZsZURhdGEtPmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAg
IHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAg
ICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAg
ICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNv
ZGUubV9hcmd2LAogICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNo
dWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBE
YXRhRm9ybWF0SlMpOwotICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyht
X2NvZGVCbG9jayk7Ci0gICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7
CisgICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBE
YXRhRm9ybWF0SlMpOworICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMo
JlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKIAotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7
Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZv
clRhaWxDYWxsKCk7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdU
Mik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxE
YXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcigqdGhpcywgKnNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAg
ICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNo
cmlua1RvRml0KCk7CisgICAgaW5mby0+ZnJhbWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZs
ZURhdGEpOworCiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0
aW9uOwogICAgIApAQCAtMjE4LDE0ICsyMjYsMjUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
Y29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsg
Q29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBh
ZnRlciByZXR1cm4uCiAgICAgKi8KLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwot
ICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVC
bG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAg
Y29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlu
a0luZm8qIGluZm8gPSBudWxscHRyOworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5m
b0NvbnN0YW50ID0gVUlOVF9NQVg7CisgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkg
eworICAgICAgICBpbmZvID0gbV91bmxpbmtlZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9
IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25z
dGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5r
SW5mbywgaW5mbyk7CisKKyAgICAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXpl
KCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8u
YXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAg
ICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5m
b0NvbnN0YW50ID0gaW5mb0NvbnN0YW50OworICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShi
eXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSAr
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVk
LgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGlu
c3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5
dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxs
ZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAtMjM0LDE2ICsyNTMsMTIgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxl
Q2FsbEV2YWwoYnl0ZWNvZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxs
Q29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+
c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0g
ICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwot
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZv
ID0gaW5mbzsKLQotICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxM
aW5rSW5mb0luZGV4KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBj
YWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAg
bG9hZENvbnN0YW50KGluZm9Db25zdGFudCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxG
YXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVz
LCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxD
YWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKICAgICAgICAgICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2Fs
bFNsb3cocmVnVDIpOwogICAgICAgICB9KTsKQEAgLTI1MywxMyArMjY4LDEzIEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwg
cmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhz
ID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7
CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQ
YXRocyk7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRv
bmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0
KGJ5dGVjb2RlKTsKQEAgLTI3MywyMCArMjg4LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBt
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBs
YWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudCht
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0
YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qz
KTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5r
SW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0
RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlzLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9y
dFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CkBAIC0zOTUsMTcgKzQxMCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNv
bnN0IEluCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFt
ZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1Qw
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAK
ICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQpAQCAtNDE2LDEwICs0NDQsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJl
Z1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFu
Y2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElm
Tm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBAIC00MzIsMTkgKzQ1OCwxNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
bmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVy
YXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudCkucmF3Qml0cygpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRlcmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0
ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RP
YmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0
b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50
R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00NTIsNyArNDc2LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0
cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+
d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5
X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0OTMsNzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVh
bCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5r
KHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0
aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9u
TWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
SXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRl
cmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3Iz
MihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJp
YykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRl
cmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0
aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxs
PE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAg
ICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUs
IHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdU
MDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BS
ID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBm
aXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdpc3RlcjsKKyAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0g
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOwor
CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgICAg
ICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAg
ICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAg
ICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3Vs
dEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAg
ICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BS
IH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9u
ZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAg
ICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgICAgICBHUFJSZWcgc2Ny
YXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BS
LCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBz
Y3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEg
PSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAg
ICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIo
KTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5
KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOwor
ICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNW
YWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxHUFIpOworCisgICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYmFzZUdQ
Uik7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJv
cGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVl
UmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZh
bHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25l
LmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1NzcsNTUgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0
ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpk
b250Q2xvYmJlclJlZ2lzdGVyOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25l
VlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSBy
ZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlz
dCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0
ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwo
aXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQg
PSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAg
ICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0
LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAotICAg
ICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5v
bkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRv
bmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwg
YXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQ
UjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVn
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwor
CisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
KworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywg
ZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNr
cG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAgfQog
CiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BSUmVn
IGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRl
bnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0g
ICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0g
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBp
dGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIy
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsMTEgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogCisKIG5hbWVzcGFjZSBK
U0MgewogCitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKKwogbmFtZXNwYWNlIERGRyB7CiBjbGFz
cyBDb21tb25EYXRhOwogY2xhc3MgSklUQ29kZTsKQEAgLTE1OSwxMCArMTYyLDEwIEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgewot
ICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURh
dGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApAQCAtMjIzLDYgKzIyNiw4IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlQXR0cmlidXRl
ID09IFNoYXJlQXR0cmlidXRlOjpTaGFyZWQ7IH0KIAorICAgIHZpcnR1YWwgUENUb0NvZGVPcmln
aW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorCiBwcml2YXRl
OgogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFNoYXJlQXR0cmlidXRlIG1fc2hhcmVBdHRy
aWJ1dGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0
aW9uS2V5LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb21waWxhdGlvbktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAg
dm9pZCBKSVRDb21waWxhdGlvbktleTo6ZHVtcChQcmludFN0cmVhbQogICAgICAgICBvdXQucHJp
bnQoIjxlbXB0eT4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBvdXQucHJpbnQoIihD
b21waWxlIG9mICIsICptX3Byb2ZpbGVkQmxvY2ssICIgd2l0aCAiLCBtX21vZGUsICIpIik7Cisg
ICAgb3V0LnByaW50KCIoQ29tcGlsZSBvZiAiLCBSYXdQb2ludGVyKG1fY29kZUJsb2NrKSwgIiB3
aXRoICIsIG1fbW9kZSwgIikiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5oCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDU3ICszMCw1NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
Y2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgSlNDZWxsOwogCiBj
bGFzcyBKSVRDb21waWxhdGlvbktleSB7CiBwdWJsaWM6CiAgICAgSklUQ29tcGlsYXRpb25LZXko
KQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhudWxscHRyKQorICAgICAgICA6IG1fY29kZUJs
b2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9tb2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxp
ZENvbXBpbGF0aW9uKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgSklUQ29tcGlsYXRpb25LZXko
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9j
ayhudWxscHRyKQorICAgICAgICA6IG1fY29kZUJsb2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9t
b2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6REZHKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgSklU
Q29tcGlsYXRpb25LZXkoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBKSVRDb21waWxhdGlvbk1v
ZGUgbW9kZSkKLSAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKKyAgICBK
SVRDb21waWxhdGlvbktleShKU0NlbGwqIHByb2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9k
ZSBtb2RlKQorICAgICAgICA6IG1fY29kZUJsb2NrKHByb2ZpbGVkQmxvY2spCiAgICAgICAgICwg
bV9tb2RlKG1vZGUpCiAgICAgewogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgPT0g
SklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CisgICAgICAgIHJldHVybiAh
bV9jb2RlQmxvY2sgJiYgbV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBp
bGF0aW9uOwogICAgIH0KICAgICAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSAh
PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJu
ICFtX2NvZGVCbG9jayAmJiBtX21vZGUgIT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29t
cGlsYXRpb247CiAgICAgfQogICAgIAotICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvZmlsZWRCbG9jazsgfQogICAgIEpJVENvbXBpbGF0aW9uTW9kZSBt
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEpJVENvbXBpbGF0aW9uS2V5JiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3Byb2ZpbGVkQmxvY2sgPT0gb3RoZXIubV9wcm9maWxlZEJsb2NrCisgICAgICAgIHJl
dHVybiBtX2NvZGVCbG9jayA9PSBvdGhlci5tX2NvZGVCbG9jawogICAgICAgICAgICAgJiYgbV9t
b2RlID09IG90aGVyLm1fbW9kZTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjpwYWlySW50SGFzaChXVEY6OlB0ckhhc2g8
Q29kZUJsb2NrKj46Omhhc2gobV9wcm9maWxlZEJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1bmRl
cmx5aW5nX3R5cGU8SklUQ29tcGlsYXRpb25Nb2RlPjo6dHlwZT4obV9tb2RlKSk7CisgICAgICAg
IHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKFdURjo6UHRySGFzaDxKU0NlbGwqPjo6aGFzaChtX2Nv
ZGVCbG9jayksIHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPEpJVENvbXBpbGF0aW9u
TW9kZT46OnR5cGU+KG1fbW9kZSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9j
azsKKyAgICAvLyBFaXRoZXIgQ29kZUJsb2NrKiBvciBVbmxpbmtlZENvZGVCbG9jayogZm9yIGJh
c2xlbGluZSBKSVQuCisgICAgSlNDZWxsKiBtX2NvZGVCbG9jazsKICAgICBKSVRDb21waWxhdGlv
bk1vZGUgbV9tb2RlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRp
ZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJbmxpbmVB
Y2Nlc3MuaCIKKyNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIApAQCAtNDYsMTAgKzQ3LDkgQEAgc3RhdGljIFN0
cnVjdHVyZVN0dWJJbmZvKiBnYXJiYWdlU3R1YkluZgogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6
OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRU
eXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzKQotICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICwgbV9qaXRUeXBlKGpp
dFR5cGUpCisgICAgOiBtX2ppdFR5cGUoaml0VHlwZSkKIHsKLSAgICBtX3N0dWJJbmZvID0gbV9j
b2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdp
bikgOiBnYXJiYWdlU3R1YkluZm8oKTsKKyAgICBtX3N0dWJJbmZvID0gY29kZUJsb2NrID8gY29k
ZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHVi
SW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNhbGxTaXRlSW5kZXggPSBjYWxsU2l0ZTsKIAogICAg
IG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzOwpAQCAtNTksNyArNTks
NiBAQCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBMaW5rQnVm
ZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgsIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCkKIHsKICAgICBtX3N0dWJJbmZvLT5zdGFydCA9IHN0
YXJ0OwotCiAgICAgbV9zdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gZmFzdFBhdGgubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihtX2RvbmUpOwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSkKQEAgLTY3LDYgKzY2LDE1IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3I6OmZpbmFsaXplKAogICAgIG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9
IHNsb3dQYXRoLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc2xvd1BhdGhCZWdp
bik7CiB9CiAKK3ZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5m
b0dQUikKK3sKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
SklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1
YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJ
ZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBz
dHViSW5mb0dQUikKQEAgLTExMCw3ICsxMTgsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRH
ZXRCeUlkR2VuZXJhdG9yCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlw
ZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHVi
SW5mb0dQUiwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAgIDogSklUQnlJZEdlbmVyYXRvcihj
b2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBlLCB1c2Vk
UmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCi0gICAgLCBtX2lzTGVuZ3RoQWNj
ZXNzKHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLmltcGwoKSkKKyAgICAsIG1faXNMZW5ndGhBY2Nlc3MoY29kZUJsb2NrICYmIHByb3Bl
cnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmlt
cGwoKSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50
YWdHUFIoKSk7CiB9CkBAIC0xMjAsNiArMTI4LDM1IEBAIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRv
cjo6Z2VuZXJhdGVGYXN0UGEKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBtX2lzTGVuZ3Ro
QWNjZXNzID8gSW5saW5lQWNjZXNzOjpzaXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVBY2Nl
c3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAorc3RhdGljIHZvaWQgZ2VuZXJhdGVH
ZXRCeUlkSW5saW5lQWNjZXNzKEpJVCYgaml0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBi
YXNlLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNr
aXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2Ny
YXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHJvcGVydHko
YmFzZSwgc2NyYXRjaCwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hl
ZCA9IGppdC5qdW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAg
aml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBm
aW5pc2hlZC5saW5rKCZqaXQpOworfQorCit2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQ
UlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQu
bG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlk
SW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
YmFzZSwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKworCiBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcigK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIHZhbHVlLCBK
U1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BS
KQpAQCAtMTM4LDYgKzE3NSwxOCBAQCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6
Z2VuZXJhCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9y
UHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKK3ZvaWQgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9y
OjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJ
bmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6
dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisg
ICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGdlbmVyYXRl
R2V0QnlJZElubGluZUFjY2VzcyhqaXQsIHN0dWJJbmZvR1BSLCBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnNj
cmF0Y2gsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAg
bV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5
SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcg
c2NyYXRjaCwgCkBAIC0xNDksNiArMTk4LDM0IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1
dEJ5SWRHZW5lcmF0b3IKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzLmNsZWFyKHNjcmF0
Y2gpOwogfQogCit2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQ
UikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7
CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0
dWJJbmZvLCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6c2NyYXRjaDsKKyAgICBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIEdQUlJlZyB2YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6dmFsdWU7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAg
ICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQu
YnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQo
KSksIHNjcmF0Y2gpOworICAgIGppdC5zdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHsgdmFsdWUg
fSwgYmFzZSwgc2NyYXRjaCwgc2NyYXRjaDIpOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVt
cCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5jYWxsKEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGlu
aygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogdm9pZCBKSVRQdXRCeUlk
R2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCiB7CiAgICAg
Z2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlSZXBs
YWNlKCkpOwpAQCAtMzAwLDYgKzM3NywzMiBAQCB2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVGYXN0UGF0CiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpz
aXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKK3ZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpn
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZv
LCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNl
RGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAg
aml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworCisgICAgR1BSUmVnIGJh
c2UgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgcmVzdWx0ID0g
QmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5s
aW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmJveEJvb2xlYW4o
dHJ1ZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5q
dW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmNhbGwo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hlZC5s
aW5rKCZqaXQpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRJbnN0YW5jZU9m
R2VuZXJhdG9yOjpKSVRJbnN0YW5jZU9mR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJs
b2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4LAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBwcm90b3R5cGUsIEdQUlJlZyBzdHVi
SW5mb0dQUiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgi
CisjaW5jbHVkZSAiSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIkpJVE9wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHV0S2luZC5oIgpA
QCAtMzgsMTEgKzM5LDExOCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhY2hlYWJsZUlkZW50
aWZpZXI7CiBjbGFzcyBDYWxsU2l0ZUluZGV4OwogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklU
OwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbzsKIAogZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90OwogZW51bSBjbGFzcyBKSVRU
eXBlIDogdWludDhfdDsKIAorc3RydWN0IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnMgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJh
c2VsaW5lRGVsQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0g
R1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQ
UkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnMgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0
IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIC8vIFdlIHJlbHkgb24gdGhpcyB3aGVu
IGxpbmtpbmcgYSBDb2RlQmxvY2sgYW5kIGluaXRpYWxpemluZyByZWdpc3RlcnMgZm9yIGEgR2V0
QnlWYWwgU3R1YkluZm8uCisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpY19hc3NlcnQocmVzdWx0
ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgc3RhdGljX2Fzc2Vy
dChzdHViSW5mbyA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbyk7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86OnJlZ1QzOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKK307CisK
K3N0cnVjdCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6YXJndW1lbnRHUFIyOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHByb3RvID0gR1BSSW5mbzo6YXJndW1lbnRHUFIzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86Om5vbkFyZ0dQUjE7Cit9
OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9w
ZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3Qg
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
R1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgZG9udENsb2JiZXJS
ZWdpc3RlciA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdGhpc1ZhbHVlID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZv
OjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6
cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMiA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1Qx
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJy
YW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xhc3Mg
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hl
R2VuZXJhdG9yKCkgeyB9CkBAIC02MiwxMiArMTcwLDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZp
bmFsaXplKAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZm
ZXImIHNsb3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBz
dHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2Vk
U3R1YkluZm8geyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBw
cm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0
VHlwZTsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgorICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX2RvbmU7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKQEAgLTk4LDcgKzIxMiw3IEBA
IHByb3RlY3RlZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92
YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworcHVibGljOgogICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTExLDYgKzIy
NSw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSk7CiAgICAgCiAgICAgdm9pZCBnZW5l
cmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0
dWJJbmZvR1BSKTsKIAogcHJpdmF0ZToKICAgICBib29sIG1faXNMZW5ndGhBY2Nlc3M7CkBAIC0x
MjQsNiArMjM5LDcgQEAgcHVibGljOgogICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywg
Q2FjaGVhYmxlSWRlbnRpZmllciwKICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVS
ZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCisg
ICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1
YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICB2b2lkIGdlbmVyYXRlRmFz
dFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIH07CiAKQEAgLTEzMiwxMCArMjQ4LDExIEBAIHB1Ymxp
YzoKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJ
ZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2Fs
bFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlk
ZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBH
UFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7Cisg
ICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAg
ICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZv
R1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQg
Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJl
ZyBzdHViSW5mb0dQUik7CiAgICAgCiAgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0
aEZ1bmN0aW9uKCk7CiAKQEAgLTE2MywxMSArMjgwLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBn
ZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1
ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBt
X3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTE5MSw4ICszMDYsNiBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hh
YmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjksNiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0
ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNTIsNiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
IAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI1NSw2
ICszNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdz
IHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRo
KE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsK
IH07CiAKIGNsYXNzIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IgewpAQCAtMjc3LDggKzM4Nyw2IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBz
bG93UGF0aExpbmtCdWZmZXIpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhK
dW1wOwogfTsKIApAQCAtMzAyLDExICs0MTAsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBn
ZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1
ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0OwogCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAg
bV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMzAsOCArNDM2LDYgQEAgcHVibGljOgogICAgIAog
ICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgot
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQ
YXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENv
bnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0Nv
bnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAo
IXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsK
K30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtU
aW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpp
c0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBBbGwgbGluayB0aW1l
IGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQog
ewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9j
ay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0
ZXIgZW50cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
cHBlbmRDYWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+
Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRh
dGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxS
ZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRz
dCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFs
dWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVn
cyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwg
cmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2Fs
bDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVy
IGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdp
c3RlciBkc3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpT
VmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJl
dHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1
cm5WYWx1ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Ns
b3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
VmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2Vs
bChyZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2lu
dCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1l
dGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlv
biwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwor
ICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9i
eXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBK
SVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xv
d1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVy
aW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMg
c2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAg
IG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
LCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBt
X2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgs
MzMgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNf
SU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNy
YykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2Vs
bCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkK
LXsKLSAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKLQotICAgIC8vIFdlJ3JlIGlu
IGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3Qg
ZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3Jl
NjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UKLSAgICBFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSAgICBzdG9yZTMyKHZhbHVl
LnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKLSAgICBzdG9yZTMy
KHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKLX0KKyAg
ICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3Jj
KSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJp
bmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0
aCgpID09IDE7Cit9CisKKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRl
KFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKy8veworLy8g
ICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CisvLworLy8gICAgLy8gV2UncmUgaW4g
YSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBk
byBhIGRpcmVjdAorLy8gICAgLy8gc3RvcmUuCisvLyNpZiBVU0UoSlNWQUxVRTY0KQorLy8gICAg
c3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CisvLyNlbHNlCisv
LyAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vICAgIHN0
b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwor
Ly8gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOwor
Ly8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZh
bHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlBy
b2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1Qw
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQog
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzIzLDQxICszNTIsNDIg
QEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewog
ICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7CisKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91
bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNv
ZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0
b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRS
ZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVl
UHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQorLy97CisvLyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7
CisvL30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVn
KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVn
KQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJl
c3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVS
ZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiBh
cnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxl
LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsKICAgICBpZiAo
c2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxh
c3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHNjcmF0Y2hH
UFIsIGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmlsZSk7CiAgICAgfQogfQogCi1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxH
UFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQg
Y2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQogewotICAgIGlmIChzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpIHsKLSAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBz
dG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYXJyYXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6
Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKSk7Ci0gICAgfQorICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJl
SUQoKSwgY2VsbEdQUiwgc2NyYXRjaEdQUik7CiB9CiAKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBK
SVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQpAQCAtMzgwLDcg
KzQxMCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3Rl
cklEIHZhbHVlKQogewogICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRS
ZWdpc3RlcihyZWcpOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQ
b29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAg
ICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAg
IH0gZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAt
NDk2LDcgKzUyNiw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QK
IAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJl
Z2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7
CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFu
dCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAt
NTA2LDcgKzUzNiw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMK
IAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJl
Z2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNL
bm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBp
ZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAg
ICAgICAgIGVsc2UKQEAgLTUxNCwxMSArNTQ0LDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVt
cFNsb3dDYXNlSWZOb3RKUwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNP
cGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3Jj
LmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0K
IEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQz
Ml90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpA
QCAtNTQ0LDExICs1NjksMTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1
YWxSZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAg
ICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQorICAgICAgICBp
ZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9j
ayhzcmMpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKHZhbHVlKSksIGRzdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbG9hZENvZGVC
bG9ja0NvbnN0YW50KHNyYywgZHN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTY2
LDExICs1OTEsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsK
LSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3Jl
NjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTU5NSw3ICs2MTUsNyBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lz
dGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykpCisg
ICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTYzNywzMCArNjU3LDcgQEAgQUxXQVlTX0lOTElORSBpbnQg
SklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewogICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVy
biB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGlu
c3RydWN0aW9uKTsKLX0KLQotQUxXQVlTX0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0
UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNvZGUpCi17Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0
ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsgLy8gSGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtl
eQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsKLSAg
ICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dElu
Zm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAgIG1f
Y29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAgIHJl
dHVybiBnZXRQdXRJbmZvOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZ
U19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJpbmFy
eU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50NjRf
dD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkQXJp
dGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQ
cm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5h
cnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1fY29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5LCBh
cml0aFByb2ZpbGUpOwotICAgIHJldHVybiBhcml0aFByb2ZpbGU7CisgICAgcmV0dXJuIG1fdW5s
aW5rZWRDb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY4MSw2ICs2NzgsNjAgQEAgQUxXQVlTX0lOTElORSBF
Q01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7
CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qg
b2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX21ldGFkYXRh
R1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJs
ZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQorewor
ICAgIGxvYWQzMihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90
IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKHNfbWV0YWRhdGFH
UFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBW
YWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3Rv
cmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
c2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTgodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQ
UiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Ynl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwg
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlMzIo
dmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRh
dGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVf
dCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29k
ZSkgKyBvZmZzZXQpLCBzX21ldGFkYXRhR1BSLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsb2FkQ29uc3RhbnQoSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFu
dEluZGV4LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX2NvbnN0YW50
c0dQUiwgc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQp
OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyBy
ZXN1bHQpCit7CisgICAgbG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3Vs
dCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChW
aXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVz
dWx0LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkpLCByZXN1bHQp
OworICAgIGxvYWQ2NChBZGRyZXNzKHJlc3VsdCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkg
KiBzaXplb2YoSlNWYWx1ZSkpLCByZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzMSw3
ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFk
ZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2Vk
Q29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAg
SnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUik7CkBAIC05OTcsNyArOTk3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2lt
bShjb25zdCBJbnN0cgogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0
aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtl
ZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1w
bGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVj
b2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAg
bGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwMjQsNyAr
MTAyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKIAogICAg
IC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlz
IHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5z
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFw
cGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zm
c2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNU
SVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDQyLDcgKzEwNDIsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJs
ZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50Lgog
ICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0
cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBl
bmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNl
dCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJs
ZSh1bmxpbmtlZFRhYmxlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBACiAjaW5jbHVk
ZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTQsMTEgKzU2LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX21v
dihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUu
aXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwotICAgICAgICBlbHNlCisgICAgICAgIGlm
IChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2Nr
KHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjpl
bmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0
b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgIH0KKwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC04NywzNyArOTIsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNv
bnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxv
Y2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxv
Y2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAg
UmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJl
ZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lz
dGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CiAKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7
Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpj
b25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlh
bGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsK
LSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1l
dGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2Fk
UHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9m
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZz
ZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVSZWcpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0
QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxs
b2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2Vz
KTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CisgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAg
IFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0
YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7
CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAm
dm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogfQogCkBAIC0xMzEsNyArMTM0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVz
X2hhc19pbnN0YW5jZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1
ZSwgcmVnVDApOwogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9s
Lmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9
IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5j
ZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNU
X09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2Z1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJv
bEZ1bmN0aW9uKSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rvciwg
cmVnVDApOwogCkBAIC0xNTQsMzAgKzE1OCwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsK
IAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJl
c3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNl
VmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhl
biB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
Ojp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3RvR1BSID0gQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BSKTsKICAgICAKICAgICAvLyBDaGVjayB0aGF0
IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tl
ZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Rv
R1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVn
VDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUNSwKLSAg
ICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICByZXN1bHRHUFIsCisgICAgICAgIHZhbHVl
R1BSLAorICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgc3R1YkluZm9HUFIsCisgICAgICAgIEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDEsIEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6c2NyYXRjaDIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAorCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQgKzIwNCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVz
cyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19h
c3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIp
OworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9
PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9m
T3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTI0MCw3ICsyNTEsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAKICAgICBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApA
QCAtMzgzLDkgKzM5NCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlv
bioKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxl
ckdlbmVyYXRvcihWTSYpCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKIAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0
UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC00MTEsNyArNDIyLDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTQzNCw5ICs0NDQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNv
bnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDY1LDggKzQ3NiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rp
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4
cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIp
LCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIo
dmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBh
ZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyAr
NDkzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8v
IGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcg
YXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1h
eSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGlj
aCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAg
LTUxOSw3ICs1MzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVj
CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIo
RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWln
biA9IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU1Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFf
bnVsbChjb25zdCBJbnN0cnUKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRk
SnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdl
dCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApA
QCAtNTgyLDE1ICs1OTUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVs
bChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFs
dWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRl
Y29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxs
KCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0
cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsK
LSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAg
IGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwg
cmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwg
T3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChq
dW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2MzYs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5j
aElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsK
ICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0
aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY1Myw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzA4
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBj
YWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1Qw
KTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzcy
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93
blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtNzIwLDcgKzczNCw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FW
RVNfUkVHSVNURVJTID4gMAogICAgIGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1
bWVudEdQUjApOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlckltcGwoYXJndW1lbnRHUFIwKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYXJndW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29u
c3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyAr
OTIyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5MzMsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5z
dHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1Qy
LCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkzMSw3ICs5NDcsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZS
ZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEs
NyArOTY3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGlu
ayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NzgsNyArOTk0LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1Qw
KSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
Z1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTkzLDcgKzEwMDksMTcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBW
TTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBz
dG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZy
YW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAg
IC8vIFdoZW4gdGhlIExMSW50IHRocm93cyBhbiBleGNlcHRpb24sIHRoZXJlIGlzIGEgY2hhbmNl
IHRoYXQgd2UndmUgYWxyZWFkeSB0aWVyZWQgdXAKKyAgICAvLyB0byBiYXNlbGluZSwgYW5kIHdl
J2xsIGNhdGNoIHRoYXQgZXhjZXB0aW9uIGluIHRoZSBiYXNlbGluZSBKSVQuIEJlY2F1c2UgdGhl
IExMSW50IHVzZXMKKyAgICAvLyB0aGUgYSBkaWZmZXJlbnQgdmFsdWUgaW5zaWRlIHNfY29uc3Rh
bnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdlIHJlc3RvcmUgYWJvdmUgbWF5IG5vdAorICAgIC8v
IGNvbnRhaW4gdGhlIGNvcnJlY3QgdGhhdCByZWdpc3Rlci4gU28gd2UgcmVwbGVuaXNoIGl0IGhl
cmUuCisgICAgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9j
azo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19j
b25zdGFudHNHUFIpOworICAgIH0KIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwog
ICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyArMTAzNywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
YXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3Jp
bmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdp
c3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1ZmZlciB8
fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5k
ZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBt
X2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNo
VGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcp
OwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwotICAgIGlmIChidWZmZXIgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2Zp
bGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
c3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSksIHJlZ3MpOwotICAgICAgICB9KTsK
LSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKQEAgLTEwNTMsOCArMTA2Nyw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVh
dGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2gg
c3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hS
ZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hS
ZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlu
a2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsxMDk1LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0
ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNo
IGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRl
Y29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAg
IGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUu
bV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQ
UjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEwOTksMjAgKzEx
MTQsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZp
cnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8v
IGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3
aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwog
ICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2Rl
SW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2Vk
VGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdX
aXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4
KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1
Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCks
IHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
RGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3Rz
ID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUp
KTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTExMzMsNyArMTE1MCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
MCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVn
VDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE0OCw3ICsxMTY1
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjYsNyArMTE4Miw3IEBAIHZv
aWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDAp
OwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE4OCwxMiArMTIwNCwx
NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZl
biB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50
CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNl
c3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5n
IEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7
CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpOwogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2Nr
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBj
b3VudDsgKytqKQogICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOworICAgIAorICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25D
aGVjaygpOwogI2Vsc2UKQEAgLTEyMTIsNyArMTIzMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dGVyKGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2Vu
ZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBA
IC0xMzEwLDIzICsxMzI4LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJ
bnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0
YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5h
bE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAg
ICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUg
PSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hl
ZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2Fs
bGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAg
IFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcgKzEzNTYsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNz
KHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Q
cm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9m
QWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRP
Zk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQ
cm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyks
IHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5j
dGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlz
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRDYWxsZWUoKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwog
ICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVk
RnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmpl
Y3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywg
Y2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhp
cyk7CkBAIC0xMzcyLDcgKzEzODYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3Qg
SW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAg
ICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQ
UiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEzOTcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Mik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwg
cmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9v
bGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7
CkBAIC0xMzk0LDcgKzE0MTAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IElu
c3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIApAQCAtMTQwNCw3ICsxNDIxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEo
Y29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsxNDM2LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBi
eXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZh
bHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3Ry
dWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFs
dWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
LCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFu
Y2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5j
ZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwogICAgIGJveEJv
b2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE0
MzAsNyArMTQ0OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgK
IAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbikKIHsKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5p
dGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVG
b3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0
dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX3VubGlua2VkQ29kZUJs
b2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAg
ICAgICB1aW50cHRyX3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGlu
c3RydWN0aW9uKTsKICAgICAgICAgbG9hZFB0cihwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBz
a2lwRWFybHlSZXR1cm4gPSBicmFuY2hQdHIoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKE9w
dGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xNDQwLDcg
KzE0NTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAjZWxz
ZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BS
MiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCi0gICAgICAgIG1vdmVWYWx1ZSht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkpOwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0xNDUzLDggKzE0NzIsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1p
emF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9w
dGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAg
QWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigp
KSkpOworICAgICAgICAgICAgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4
ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQogfQogCkBAIC0xNTA5LDcgKzE1MjksOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMTUyMiw3ICsxNTQzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNv
bnN0IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0m
IHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBD
UFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTE1NjQsMzQg
KzE1ODUsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Cisg
ICAgR1BSUmVnIGdsb2JhbEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGdsb2JhbEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2Jh
bEdQUiwganNDYXN0PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJl
Z2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEp1bXAgbGF6eUp1bXA7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7
CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7Cisg
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5k
aWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0
aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbCwgYml0
d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rp
b25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKIAog
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVs
c2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9m
dW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2MjEsMjMgKzE2NDQsMjQg
QEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAg
ZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgogCi0gICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0
ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2
b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsK
KyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1
bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAg
ICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdH
ZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBl
bHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3Jf
ZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTY2NCwyOSArMTY4
OCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0Fy
cmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUg
PSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0
YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQUjIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2Zp
bGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgc2l6ZSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBi
eXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6
ZUluZGV4LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
LCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogI2Vsc2UK
KyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlX
aXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdU
Mik7CiAgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fy
cmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNzE5LDEwIEBAIHZvaWQgSklU
OjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJv
ZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAg
bV9pc1NoYXJlYWJsZSA9IGZhbHNlOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVk
VHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAK
QEAgLTE3NzcsMjAgKzE4MDQsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdH
UFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0No
aWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBH
UFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJn
dW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5z
dXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVn
LCBzY3JhdGNoMlJlZyk7CisgICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25B
cmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2Vu
UGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsK
KyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwg
cmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNW
YWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNr
ZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKKyAgICBtX2lzU2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRh
dGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBiYXNpY0Js
b2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7CkBAIC0xODYwLDcgKzE4OTIsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgbW92ZVZhbHVl
KGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRS
ZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAK
QEAgLTE4ODYsNyArMTkxOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2Yo
Y29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
LCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1
ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKQEAg
LTI4NTUsNyArMjg1Niw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0
Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25z
dCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNT
RVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4g
PT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQgPSBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKIApAQCAtMjg4MCw3ICsyODgxLDcgQEAgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBj
b2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdDsKICAgICBp
ZiAoa2V5LmlzSW50MzIoKSkKQEAgLTI5MDMsNyArMjkwNCw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIHZvaWQqIHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmdKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVC
bG9jay0+YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAKICAgICBp
ZiAoa2V5LmlzU3RyaW5nKCkpIHsKICAgICAgICAgU3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmlu
ZyhrZXkpLT52YWx1ZShnbG9iYWxPYmplY3QpLmltcGwoKTsKQEAgLTI5MTksNyArMjkyMCw2IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAotI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZv
ckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IEluc3RydWN0aW9uKiBwYykpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwpAQCAtMjk3MSw3ICsyOTcxLDYgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblJlc29sdgogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXNvbHZlZFNjb3BlKTsK
IH0KLSNlbmRpZgogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNj
b3BlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IEluc3RydWN0aW9uKiBwYykpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsNyBAQCBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByCiBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAo
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBp
bnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hJ
bW1XaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoVk0qLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNp
emVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4KSk7Ci0jaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpKTsKLSNlbmRpZgogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAo
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRUb1Njb3BlLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3
LDEyIEBAIGF1dG8gSklUUGxhbjo6dGllcigpIGNvbnN0IC0+IFRpZXIKIAogSklUQ29tcGlsYXRp
b25LZXkgSklUUGxhbjo6a2V5KCkKIHsKLSAgICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkobV9j
b2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKKyAgICBKU0NlbGwqIGNv
ZGVCbG9jazsKKyAgICBpZiAobV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUp
CisgICAgICAgIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwor
ICAgIGVsc2UKKyAgICAgICAgY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJu
YXRpdmUoKTsKKyAgICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBtX21vZGUp
OwogfQogCiBib29sIEpJVFBsYW46OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIElu
dmFsaWRHUFJSZWcpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1
ZTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwxMDIgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmICht
ZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01h
eE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5
VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxs
LmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cmVzdWx0KTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3Ms
IHJlZ1QyKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKwogICAgICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
ICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxz
LmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlw
ZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYg
Ynl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
aWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRlcikpCisg
ICAgICAgIHJldHVybjsKKworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlW
YWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOwogCi0gICAgICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9m
aWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0
eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBh
cmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0g
ICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2Rl
SW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAot
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBh
cmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVH
UFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAg
IENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAg
IHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7
CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9
PSByZWdUMSk7CisKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsxNTksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAg
ICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNjAsOCArMTcwLDggQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BS
ID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIApAQCAtMTg3LDM0ICsxOTcsNDAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0
ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVn
cywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkdldFByaXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVy
KSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2
YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzIzOSwxMSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRh
ZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHks
IGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTIzNSwyNiArMjUzLDIwIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2Vk
LgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVf
bmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
dHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKQEAgLTI2NCw3ICsyNzYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
ICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAg
ICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0zMDAsMjEgKzMxMiwyOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5k
ID0gYnl0ZWNvZGUubV9icmFuZDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQ
UlJlZyBicmFuZEdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7Ci0KICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2
YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7Cisg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2Vu
KTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBz
ZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTMyNCwx
NyArMzQzLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CisgICAgVU5VU0VEX1BB
UkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
cmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsK
KyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGlt
aXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0zNDQs
MjQgKzM2OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBh
cmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1l
bnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5j
dGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpB
cmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRl
TmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJh
bmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
blNldFByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogI2VuZGlmCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzcwLDMzICszODgsNDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjbwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2Rl
Lm1fYnJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFu
ZEdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJ
VFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJh
bmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBl
bmQoZ2VuKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1ByaXZhdGVCcmFuZD4oKTsKKyAg
ICBVTlVTRURfUEFSQU0oYnl0ZWNvZGUpOworCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2Vu
ZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNz
SW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
YmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jy
YW5kLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0MzgsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQ
cml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNs
dHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2
YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9w
cml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NjEsNDIgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29k
ZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2Zp
bGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywg
cmVnVDQpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworCiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IHN0ZDo6
aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsRGlyZWN0PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtp
bmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29k
ZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAK
ICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIg
aWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00NzQsMTUgKzUxMiwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFN
b2RlOjpzdHJpY3QoKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwogCiAg
ICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAg
ICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gYnl0ZWNv
ZGUubV9lY21hTW9kZTsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTQ5OCw3ICs1MzMsMTYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0
aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGly
ZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAo
ZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFI0KTsKKyAgICBpZiAoaXNEaXJl
Y3QpCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIGVsc2UKKyAgICAg
ICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxl
KCksIGFyZ3VtZW50R1BSNSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25Q
dXRCeVZhbFN0cmljdE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0LCBhcmd1bWVudEdQ
UjUpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNTEyLDcgKzU1Niw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBDYWxsIGNhbGw7CiAgICAgYXV0byBvcGVyYXRp
b24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9w
dGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CkBAIC01MjMsNyAr
NTY3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNTMzLDE4ICs1NzcsMjQgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAgY29u
c3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gcmVnVDQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7
CisgICAgeworICAgICAgICBSZWdpc3RlclNldCB1c2VkKEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OmJhc2UsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmls
ZSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlucyhyZWdUNCkpOworICAgICAgICBBU1NF
UlQoIXVzZWQuY29udGFpbnMocmVnVDUpKTsKKyAgICB9CisKIAogICAgIGppdC5zdG9yZTMyKGJ5
dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpKTsKICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CkBAIC01NzAsMjAgKzYyMCwzMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVH
UFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQ
dXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFt
ZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAg
IHN0dWJJbmZvLT5wcml2YXRlRmllbGRQdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8g
SUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFz
ZSBpcyBjZWxsLgpAQCAtNTk0LDggKzY1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2
YXRlX25hbWUoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwotICAgIFByaXZhdGVGaWVsZFB1dEtpbmQg
cHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudElu
c3RydWN0aW9uKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFs
c1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKQEAgLTYwMywxMyArNjYzLDE1IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCi0gICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBv
cGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0
QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3Qg
Y2xvYmJlcmVkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gcmVnVDI7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwg
cHJvcGVydHlHUFIsIHZhbHVlR1BSLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxs
cHRyKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQ
cml2YXRlTmFtZT4oKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50
R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1
bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJh
dGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50
R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVu
dEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtNjIyLDE4ICs2ODQsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9w
cml2YXRlX25hbWUoYwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUNDsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBl
bmRDYWxsKG9wZXJhdGlvbik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBA
IC02NDMsMTQgKzY5OSwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdS
ZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1
ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDM7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCkBAIC02ODAsNyArNzM2LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRp
b25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1w
bCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBv
cHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY4OSw3ICs3NDYsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlv
bnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9w
dGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3
NTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAgaW50
MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIs
IHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3NjgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRy
aWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0
cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzE5LDcgKzc3OSw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90
IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNzI3LDIzICs3ODgsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNv
bnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
RGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c2Ny
YXRjaDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogICAgIEpJVERlbEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRl
bGV0ZUJ5SUQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNh
biB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMg
Y2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Yg
c2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC03NTks
MTUgKzgzMCwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdl
biA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZh
bHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBj
YWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk+KEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2Vj
bWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4
MSwyNCArODU0LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4K
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0
dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtODA4LDcgKzg3Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAg
ICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTg0NSwyMiArOTEzLDMzIEBAIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
RGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVy
dHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIp
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBv
ZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAv
LyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBi
YXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTYyLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdU
MSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9w
dGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2Rl
LnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BS
Mik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNh
bGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk+KEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCArOTgwLDE5IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIg
PSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1
ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQ
UiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CkBAIC05MjYsNyArMTAwMiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKQEAgLTk2MSwyMiArMTAzNywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OlRy
eUdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpUcnlHZXRC
eUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAg
ICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9
CiAKQEAgLTk4NiwxNCArMTA3MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRC
eUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEw
MDMsMjYgKzEwOTEsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29u
cwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpLCBkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7
Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25UcnlHZXRCeUlk
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDMwLDIyICsxMTEyLDMx
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVz
dWx0KTsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdz
LCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMDU0LDE2ICsxMTQ1LDE4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJl
c3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0
aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsx
MTY2LDYxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1l
PGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBl
bHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAg
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCpp
ZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKSB7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEu
bV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAg
ICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gz
MihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2Rl
OjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVN
ZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhN
b2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUu
bV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRo
aXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJl
Zyk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZv
R1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVz
dWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcp
OwogfQogCkBAIC0xMTU4LDE2ICsxMjI5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVn
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMTE3NywyNiArMTI1MCw1NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJn
dW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAg
ZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBi
eXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91
bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywg
dGhpc0dQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VW
UmVnKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcp
OworCisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1
bHRSZWdzLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiksIHN0dWJJ
bmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5
SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjA2LDcgKzEzMTAs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQg
bWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFp
bGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlu
bGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1h
eSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7
CkBAIC0xMjQxLDE2ICsxMzQ1LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
d2l0aF90aGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlz
SW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIGFyZ3Vt
ZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlv
bkdldEJ5SWRXaXRoVGhpc09wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVn
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI4ICsxMzY3LDIyIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyB0aGlz
R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRC
eUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BS
ID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fz
c2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwot
ICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhU
aGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyOTEs
NyArMTM5Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZU
TCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywg
d2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKQEAgLTEzMjksMjMgKzE0MzAsMzcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8v
IEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhl
IG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0
ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRo
QmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0
dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcs
IHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7
CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5
dGVjb2RlKSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNv
ZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJl
Y3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6UHV0QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVj
dCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+
ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5
LDE0ICsxNDc0LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4K
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0
aGlzKTsKICAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21f
cHV0QnlJZEluZGV4KytdOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEs
IHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0
aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC0xMzc2LDI1ICsxNDk1LDE5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5
SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBhcmd1
bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9p
ZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IGdlbi5zbG93
UGF0aEZ1bmN0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChnZW4u
c2xvd1BhdGhGdW5jdGlvbigpKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
QEAgLTE0MDQsNyArMTUxNyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKQEAgLTE0NDEsMjAgKzE1NTQsMzEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
dHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRzLmFw
cGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKQEAgLTE0NjMsMTQgKzE1ODcsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5
X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlk
SW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbklu
QnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjA3
LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0g
YXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhl
cmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUg
aXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNs
dHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJl
dHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTE1MTAsMjUgKzE2MzEsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0
IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsK
IAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0
dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1
MzcsMTUgKzE2NjYsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJ
bgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFs
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVBy
b2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNs
dHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BS
NCk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTU2LDU5ICsxNjg4LDcw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09
IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxl
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2Zp
bGVHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3
aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50
IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVu
dCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlv
bkluQnlWYWxPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6
dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
YnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5T3JCcmFuZCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUs
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gdHlwZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5
cGUpCit2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZp
cnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUg
dHlwZSkKIHsKLSAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8
fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgVU5VU0VEX1BBUkFN
KGJhc2UpOworICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7CisgICAgQVNTRVJUX1VOVVNFRCh0
eXBlLCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9
IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3Bl
cmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJn
dW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZh
dGVOYW1lT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2MSwyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVT
bG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BS
ID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBl
KG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGlt
aXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRl
X25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBl
ID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRl
QnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxNzg5LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5t
X2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xv
dyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19w
cml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NjY2LDIxNSArMTgwMywxMjcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX2Jy
YW5kKAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVCcmFuZD4oKTsKLSAgICBlbWl0SGFz
UHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7
CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlv
bldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zh
ckluamVjdGlvbldhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0
YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewotICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBkZXB0aDsgKytpKQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
U2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29s
dmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFk
YXRhLm1fcmVzb2x2ZVR5cGU7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2Fs
U2NvcGVEZXB0aDsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3Bl
Ojpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBv
Y2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNT
Y29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2so
cmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNv
bnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKLSAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0
eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEds
b2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCBy
ZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAg
ICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci19Ci0jZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVt
aXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2
ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1f
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxp
bmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJ
bnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNl
cnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2ls
bCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVU
eXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1f
bGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29s
dmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQo
KSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQg
PSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAg
IHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKKworICAgICAgICBhdXRvIGNsb3N1
cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpn
ZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3Bf
cmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgICAgIH07CiAKLSNkZWZpbmUgUkVTT0xW
RV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZl
VHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2Vu
ZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVf
U0NPUEVfR0VORVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFU
T1IKKworICAgICAgICBhdXRvIGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0m
IHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMi
KTsKKyAgICAgICAgfTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0g
cmVnVDI7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBl
XSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9z
dXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2
bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jl
c29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNv
bnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFs
PFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAg
IC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdp
dGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OworCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsgLy8gaW5jb21pbmcKKyAgICBjb25zdGV4
cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDI7IC8vIGluY29taW5nCisgICAgY29uc3RleHBy
IEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8g
c2xvdyBwYXRoLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7
CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VS
VCh0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdS
ZXR1cm5BZGRyZXNzKCk7CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwg
cmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkp
LCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVt
cExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAo
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IElu
dmFsaWRHUFJSZWcpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlk
R1BSUmVnKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJl
ZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJ
bmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBt
X3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNl
dE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAg
ICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcykgewotICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29w
ZURlcHRoKSksIHJlZ1QxKTsKLQotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAg
ICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKLSAgICAgICAgewotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSks
IHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAg
ICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKLSAgICAgICAgfQotICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNjb3BlR1BSID09IHJlZ1QwKTsK
KyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0
T2ZMb2NhbFNjb3BlRGVwdGgoKSksIHJlZ1QxKTsKKworICAgICAgICBMYWJlbCBsb29wID0gaml0
LmxhYmVsKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVn
VDEpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRP
Zk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDEpOworICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsKKyAgICAgICAgZG9u
ZS5saW5rKCZqaXQpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSkgewpAQCAtMTg4MiwxMiArMTkzMSwxMSBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAg
ICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMg
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2Jh
bE9iamVjdEdQUik7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAg
ICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwg
bV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpT
R2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1Qx
KSk7Ci0gICAgICAgICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAg
ICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0
T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0dsb2Jh
bE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTg5NywxMSArMTk0NSwxMSBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAogICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhp
Y2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAg
ICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKQotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxP
YmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAg
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9m
ZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0xOTA5LDcgKzE5
NTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAg
ICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVk
Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0xOTE5LDgzICsxOTY3LDQ1
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDAp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBl
bHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSks
IHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdU
MSk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGF1
dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAgICAg
ICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKKyAg
ICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICBub3RD
YXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICB9CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2Jh
bFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAg
IGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0
Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0
Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5r
KCZqaXQpOwogICAgIH0KIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHVi
KHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2
ZV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwog
fQogCi0jZGVmaW5lIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkg
XAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jlc29sdmVf
c2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAg
ICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBl
KSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAot
ICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhyZXNvbHZlVHlw
ZSwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0K
LUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0j
dW5kZWYgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3Io
Vk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBj
YW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIC8vIFRoZSBmYXN0IHBhdGgg
YWxyZWFkeSBwdXNoZWQgdGhlIHJldHVybiBhZGRyZXNzLgogI2lmIENQVShYODZfNjQpCkBAIC0y
MDM0LDcgKzIwNDQsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwo
aGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNv
bHZlX3Njb3BlIik7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZv
aWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCiB7CkBAIC0yMDYyLDI3NiArMjA3MSwxMzMgQEAg
dm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBv
cGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKIH0KIAotI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVj
b2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dl
dFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0g
bWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3Qg
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOworICAg
IFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAotICAgIGF1dG8g
ZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
c2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNr
aW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVn
VDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJS
ZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwot
Ci0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAt
PiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwotICAgICAgICAgICAg
fSkpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5z
dHJ1Y3Rpb24pOwogCi0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7Ci0g
ICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlz
T3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJ
bW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJl
YXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxp
bmUubGluayh0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAg
ICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQs
IG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwg
VGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSwgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1p
dEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFu
ZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVn
VDApOwotICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwg
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8v
IFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVz
b2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIH0KKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZt
KSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwg
Q2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CiAg
ICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAg
ICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwg
ZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNO
b3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0Vu
ZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdl
dFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAK
LQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAg
aXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
LCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
Z1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19
Ci0KLSNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCi12b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQot
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNj
b3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgYXV0
byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0p
IHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9z
Y29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKIAotICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0g
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0g
ICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVH
ZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9t
X3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY29wZUdQUiA9IHJlZ1QyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZz
ZXRHUFIgPSByZWdUNTsKIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsKLSAg
ICAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0gICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Ynl0ZWNvZGUpOwogCi0jZGVmaW5lIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlw
ZSkgb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBz
dGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAg
Rk9SX0VBQ0hfUkVTT0xWRV9UWVBFKEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSAgICAgICAg
fTsKLSN1bmRlZiBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRh
T2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zm
c2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRh
T2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKLSAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBjb2RlOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAg
ICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAgIGVsc2Ug
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElT
dHViKGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IpOworCisgICAgZW1pdE5ha2VkTmVhckNh
bGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9u
YWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAg
ICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsg
d2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICB1c2luZyBNZXRhZGF0YSA9
IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAg
IFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUp
KTsKLQotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKLQotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFk
ZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFH
UFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7CiAKLSAg
ICBKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0gICAgYXV0byBl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90
IG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUo
c2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIo
WmVybywgcmVnVDEpKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSkpOwotICAgIH07CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAg
IGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRh
ZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIp
OworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25D
aGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9W
YXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewog
ICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2lu
dCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2Jq
ZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6
Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07
CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3Bl
cmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0g
ICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVy
YW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
b3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAg
ICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBv
cGVyYW5kR1BSKSB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdp
c3RlcikpOwotICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwot
ICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVz
KCkpLCByZWdUMCk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAg
ICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNr
aW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLQotICAgICAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJl
Z1QwOwotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAg
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAgICBq
aXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAg
ICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVy
biBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIC8vIFN0cnVjdHVy
ZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1
cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNv
bHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBq
aXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KSk7CisKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+
KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIHNj
b3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQp
KSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QxKTsKKwogICAgICAgICAgICAgaWYg
KEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJy
YW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0
SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7
CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVy
VGhhbk9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsK
KyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZM
aW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAg
ICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxv
YWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworCisgICAg
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubmVnMzIocmVnVDEpOworICAgICAg
ICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgICAgICBq
aXQubG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9m
TGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlZ1QwKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAg
ICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJl
Z1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8
IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAv
LyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1w
dHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElm
RW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JK
RUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOwotICAgICAgICAgICAg
ZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAgIGRvVmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0
T2ZPcGVyYW5kKCkpLCByZWdUMyk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9
PSBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1t
MzIoMyksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5hZGRQdHIoc2NvcGVHUFIsIHJlZ1QzKTsK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAo
KSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2Ug
TW9kdWxlVmFyOgpAQCAtMjM0MSw4NiArMjIwNyw2MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNv
bHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5k
OwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAg
ICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJl
c29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0g
ICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mR2V0UHV0SW5mbygpKSwgcmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8g
VDAKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAg
ICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQ
cm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOwor
CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0ds
b2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9w
ZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0
cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
anVtcCgpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAK
LSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAg
ICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAg
c3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBz
dG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0
YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRP
ZkZpcnN0QnVja2V0KCkpKTsKIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dl
dF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFt
ZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZl
VHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dl
dF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwK
LSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNv
bHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2
bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVz
b2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBc
Ci0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5F
UkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29w
ZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlz
IGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVj
YXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4
Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNDI5LDcgKzIyNzIs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAjZW5kaWYKIAog
ICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1l
dGFkYXRhR1BSID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IHJlZ1Q1OwogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIApAQCAtMjQ0OSw3ICsy
MjkyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIENh
bGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2Vw
dGlvbkNoZWNrID0gaml0LmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAg
ICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlciwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQo
cmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE1ldGFkYXRhOjpvZmZz
ZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAg
ICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51
bWJlclRhZ1JlZ2lzdGVyKTsKIAogI2lmIENQVShYODZfNjQpCkBAIC0yNDY5LDg4ICsyMzEyLDc3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1
ZmZlci5saW5rKGp1bXBUb0hhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsK
IH0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAs
IG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpT
VmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCBy
ZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NP
Zk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lk
IEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qg
b3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAg
ICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAg
IEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAg
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7
Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAg
UmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBl
bWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNo
IChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1
Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3Ry
dWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwg
cmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAg
ICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3
ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVj
dC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNo
ZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJl
KCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJl
Z1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEp
KTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIp
OwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAo
KSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAg
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAg
ICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
KyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1l
c0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpKTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNv
bnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVU
eXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNj
b3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2so
cmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dElu
Zm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSkgeworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRP
bmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5k
KCksIHJlZ1QwKTsKKworICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2Rl
Lm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFRE
WiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1p
dCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQ
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2lu
dGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7Cisg
ICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3Rv
cmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2Nv
cGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCBy
ZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAg
ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSkpOworCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgTW9kdWxlVmFyOgpAQCAtMjU2NCw1OCArMjM5Niw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChy
ZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRv
RW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAg
ICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8v
IExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0g
ICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYg
d2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJp
bmRpbmcuCi0KLSAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAg
IGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFBy
b3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sg
c2VlcyBDbG9zdXJlVmFyLyBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3
ZSBjYW4gY29tcGlsZSB0aGluZ3MKKyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3Ms
IHNpbmNlIHdlJ3ZlIHByb3ZlbiB0aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3Jl
IGEgQ2xvc3VyZVZhciwKKyAgICAvLyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIu
IElmIHdlJ3JlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMg
Q2xvc3VyZVZhcgorICAgIC8vIGlmIHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3Qg
ZmlyZWQuIElmIGl0IGlzIGZpcmVkLCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQg
ZG9lc24ndAorICAgIC8vIG1hdHRlciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAg
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2Rl
KENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2
ZWRDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAg
IGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0
SW5mbygpLCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAg
SnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJv
cGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNl
KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKIAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAg
IG5vdEdsb2JhbFZhci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOwor
CiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2Jh
bExleGljYWxWYXIubGluayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBm
YWxzZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjYyNCwxOCArMjQ1MCwyMSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGll
ZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcikgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAg
ICAgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFs
bCBsaW5rZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNl
ZSBNb2R1bGVWYXIuCiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlf
cHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAg
IH0gZWxzZSB7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRv
U2NvcGUsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChi
eXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAt
MjY1Miw3ICsyNDgxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmpl
Y3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBE
RkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmpl
Y3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
LSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82
NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNzAxLDcgKzI1MzAsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVz
cyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyNTg4LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0
ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2Zp
ZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7CkBAIC0yNzY3LDcgKzI1OTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50
ZXJuYWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46
Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IApAQCAtMjgyMyw3ICsyNjUxLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2Vu
dW1lcmF0bwogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNv
ZGUubV9tb2RlOwpAQCAtMjgzOSwxMSArMjY2NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX25leHQoY29uc3QgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8v
IFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVj
aWFsIGNhc2UgaXQgaWYgd2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFk
YXRhLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3du
U3RydWN0dXJlTW9kZSkgeworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok93blN0cnVjdHVyZU1vZGUpIHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdU
MzsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAgICAgICAgb3BlcmF0
aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JH
UFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MigofkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgJiBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spKSk7CiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgbG9hZDhGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1l
cmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSwgc2NyYXRjaEdQUik7
CisgICAgICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIE9wRW51bWVy
YXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKKwogICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpLCBpbmRleEdQUik7CiAgICAgICAgIG9wZXJh
dGlvbkNhc2VzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwogCkBAIC0yODgxLDc4ICsyNzE0
LDg3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25l
Q2FzZXM7CiAKLSAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5l
RW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gyID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0
Y2gyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JH
ZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihtb2RlLCBzY3JhdGNoMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eU5hbWUsIHByb3BlcnR5R1BSKTsKIAotICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNz
KCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVy
YXRvck1ldGFkYXRhKCksIHNjcmF0Y2gyKTsKKyAgICBvcjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7
CisgICAgc3RvcmU4VG9NZXRhZGF0YShzY3JhdGNoMiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdl
dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwoYmFzZUdQUikpOwogICAgIC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVu
Y29kZWQgdmFsdWUuCi0gICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0
MzIoTm9uWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwor
ICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHNj
cmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKIAogICAgIC8vIENo
ZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDMpOwotICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgc2NyYXRjaDEpOworICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBKdW1wIHN0cnVjdHVyZU1p
c21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKIAog
ICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
ZGV4LCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgc2NyYXRjaDIp
OwogICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBp
bmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9m
TGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkp
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFn
ZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7Ci0gICAg
bG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwot
CisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHNjcmF0
Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwg
c2NyYXRjaDIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVz
RWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAg
ICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0
IG9mIGxpbmUKICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBz
dWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbmVnMzIocmVnVDMpOwotICAgIHNpZ25F
eHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2VHUFIpOworICAgIHN1YjMyKEFkZHJl
c3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBuZWczMihzY3JhdGNoMik7CisgICAgc2lnbkV4
dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKICAgICBjb25zdGV4cHIgaW50cHRyX3Qg
b2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gb2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQpICogc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwot
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwg
c2NyYXRjaDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7
CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgc3RydWN0dXJlTWlzbWF0Y2gu
bGluayh0aGlzKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0
YS5tX2VudW1lcmF0b3JNZXRhZGF0YSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVj
dHVyZU1pc21hdGNoKSwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBpc05vdE93blN0cnVjdHVyZU1v
ZGUubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUpKTsKKyAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBzY3JhdGNo
MywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsK
ICAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHByb3BlcnR5R1BSKTsKIAogICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOwotICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOwor
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2Ny
YXRjaDEpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAg
LTI5NjEsMTAgKzI4MDMsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRf
YnlfCiAgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0ZXIpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
T3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Ci12b2lkIEpJVDo6ZW1p
dF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25U
eXBlIGdlbmVyYWxDYXNlKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBT
bG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3Bl
cnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQogewotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9
IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKQEAgLTI5NzMsNyArMjgxNCw5IEBAIHZvaWQgSklUOjpl
bWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW0KICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QwKTsKLSAgICBvcjgocmVnVDAs
IEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBs
b2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVu
dW1lcmF0b3JNZXRhZGF0YSgpLCByZWdUMSk7CisgICAgb3IzMihyZWdUMCwgcmVnVDEpOworICAg
IHN0b3JlOFRvTWV0YWRhdGEocmVnVDEsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9m
ZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAKQEAgLTMwNjIsNiArMjkwNSwxMyBAQCB2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiAgICAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbi5saW5rKHRoaXMpOwogfQogCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihHUFJS
ZWcgb3duZXIpCit7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmll
ckJyYW5jaCh2bSgpLCBvd25lciwgc2VsZWN0U2NyYXRjaEdQUihvd25lcikpOworICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAm
dm0oKSwgb3duZXIpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzYsOSArMjM2LDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgog
ICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlQ2VsbCkpIHsKICAgICAgICAgICAgICAgICBp
ZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAogICAgICAgICAgICAg
ICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwKLSAgICAgICAgICAgICAgICAg
ICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nh
c3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5l
QWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2Fz
dDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgewogCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2Vu
ZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChzdHVi
SW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOworICAgICAgICAgICAgICAgICAgICBi
b29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5n
dGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHBy
b3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aChsb2NrZXIpOwpAQCAtMjQ5LDggKzI0OSw4
IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nh
c2U6OkFycmF5TGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChp
c0pTU3RyaW5nKGJhc2VDZWxsKSkgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNo
ZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGlu
ZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pOworICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVB
Y2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbyk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRl
T3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
c3R1YkluZm8uaW5pdFN0cmluZ0xlbmd0aChsb2NrZXIpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgICAgICAm
JiAhc2xvdC53YXRjaHBvaW50U2V0KCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5u
ZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICAgICAmJiAhbG9hZFRh
cmdldEZyb21Qcm94eSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGlu
ZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3Moc3R1YkluZm8sIHN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5l
cmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwog
ICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Qu
c2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
LT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zm
c2V0KCkpOwpAQCAtNzMxLDExICs3MzEsMTEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlUHV0QnkoSgogICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9w
ZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVu
c2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxm
UHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQorICAgICAgICAg
ICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFj
ZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQogICAgICAgICAgICAg
ICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkK
ICAgICAgICAgICAgICAgICAgICAgJiYgIWlzUHJveHkpIHsKICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUs
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRl
ZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShj
b2RlQmxvY2ssIHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwg
cHV0S2luZCkpOwpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFz
ZQogICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQogICAgICAgICAgICAg
ICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewotICAg
ICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTZWxmSW5BY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAg
Ym9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFj
Y2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlm
IChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNF
dmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Qu
c2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3Rh
cnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKQEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBD
YWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJV
bmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBk
YXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlu
a0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAgIHJldmVydENh
bGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyODI2NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDI0ICs0Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMg
aml0OwotCi0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwotCi0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LnByZXBhcmVD
YWxsT3BlcmF0aW9uKHZtKTsKLQotICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb24gPSBq
aXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwotCi0gICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIodm0pOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgcGF0Y2hCdWZmZXIu
bGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9v
a3VwRXhjZXB0aW9uSGFuZGxlcikpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbiIpOwotfQotCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVS
b2xsYmFja0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKQEAgLTc3
LDI0ICs1OSw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGEKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5k
bGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2siKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhj
ZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0jaWYg
Q1BVKFg4Nl82NCkKLSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIg
KiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjplc3ApOwotI2VsaWYgQ1BVKEFS
TTY0KQotICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIs
IENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKLSNlbmRpZgotCi0gICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNU
SVRodW5rKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlv
bkdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjb250aW51YXRpb24sIENvZGVMb2Nh
dGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7Ci0gICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAicG9wVGh1bmtTdGFj
a1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAg
ICBDQ2FsbEhlbHBlcnMgaml0OwpAQCAtMTM3LDYgKzEwMSw0MiBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoCiAKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNl
cHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50
cnlGcmFtZSk7CisKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZt
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24o
dm0pOworCisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJh
dGlvblB0clRhZyk7CisKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CisKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlv
biwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25I
YW5kbGVyKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uIik7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdl
bmVyYXRvcihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworI2lmIENQVShYODZf
NjQpCisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9m
KENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKKyNlbGlmIENQVShBUk02NCkKKyAg
ICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhl
bHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIENDYWxsSGVscGVyczo6SnVtcCBj
b250aW51YXRpb24gPSBqaXQuanVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7
CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0
b3IpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY29udGludWF0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInBvcFRodW5rU3RhY2tQcmVzZXJ2
ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVGFnVHlwZT4K
IGlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIHBvaW50ZXJHUFIsIFRhZ1R5cGUgdGFnKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NywxMiArMzcsMTIgQEAgY2xhc3MgVk07CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFu
ZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKFZNJik7Ci1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRI
YW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRs
ZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9y
KFZNJik7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNG
b3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAj
aW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCkBAIC0zNzAsMTMgKzM3MSwyMiBAQCBpbmxp
bmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAgICAgCiAgICAgY29kZUJsb2Nr
LT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwogCisgICAgaWYgKGNvZGVCbG9j
ay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIGlmIChSZWZQ
dHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2Rl
QmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICAgICAgY29kZUJsb2Nr
LT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxD
b2RlKGNvZGVCbG9jayk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmppdE5leHRJbnZvY2F0aW9u
KCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlm
ICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIENP
REVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJ0aHJlc2hv
bGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50
ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAg
SklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIAotICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0gSklU
V29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFkeVBsYW5zRm9y
Vk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlOjpC
YXNlbGluZSkpOworICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0gSklUV29y
a2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0o
dm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSwgSklU
Q29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkpOwogCiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBpbGVkLiIpOwpAQCAt
NDY2LDggKzQ3NiwxMCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmco
KSAmJiBjb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJu
KCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0uZ2V0TG9vcEhpbnRFeGVjdXRpb25D
b3VudGVyKHBjKTsKICAgICAgICAgKnB0ciArPSBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50
ZXIoKS5tX2FjdGl2ZVRocmVzaG9sZDsKLSAgICAgICAgaWYgKCpwdHIgPj0gT3B0aW9uczo6ZWFy
bHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpCisgICAgICAgIGlmICgqcHRyID49IE9w
dGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSB7CisgICAgICAgICAg
ICBjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEoQ29uY3VycmVudEpTTG9ja2VyKGNvZGVCbG9jay0+
bV9sb2NrKSk7IC8vIFdlJ3JlIHJldHVybmluZyB0byB0aGUgT1NSIGVudHJ5IGNvZGUgaGVyZSwg
d2hpY2ggZXhwZWN0cyB0aGF0IG1faml0RGF0YSBpcyBub3QgbnVsbC4KICAgICAgICAgICAgIExM
SU5UX1JFVFVSTl9UV08oTExJbnQ6OmZ1enplclJldHVybkVhcmx5RnJvbUxvb3BIaW50RW50cnlw
b2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUo
KSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTIsMTAgKzEwMTIsNiBA
QCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9w
KG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9w
V2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJp
dGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1l
dGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0g
ICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAgICAgZ2V0KG1fc3Jj
RHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBJbnQzMlRhZywg
LnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29k
ZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwgc3JjRHN0IGluIHQyCiAgICAg
ICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAgICAgICBzdG9yZWkgdDIsIFBheWxv
YWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJv
ZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBB
cml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6
CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9u
ZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJl
dHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmgg
dHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgZ2V0
KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEs
IHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90SW50CiAgICAgYnRp
eiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDIKLSAgICB1cGRhdGVB
cml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxl
KE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAgICByZXR1cm4gKEludDMyVGFn
LCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEsIExvd2VzdFRhZywgLm9wTmVn
YXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUo
QXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRl
LCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1cm4odDEsIHQyKQogCiAub3BO
ZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkKIAogbWFjcm8gYmluYXJ5T3BD
dXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb25BbmRT
dG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29k
ZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0
YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAg
IG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmlu
YXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFk
YXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAgICAgICAgZ2V0KG1fbGhzLCB0
MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2Rl
TmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQy
LCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAub3AxTm90SW50CiAgICAgICAgIGJp
bmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQ
cm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3Ry
dWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZ2V0KG1fZHN0LCB0MikK
ICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0MSwgdDAsIC5zbG93LCB0MikK
ICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwxMiBAQCBtYWNybyBiaW5hcnlP
cEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJpYSB0MiwgTG93ZXN0VGFnLCAu
c2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5vdEludE9wMkRvdWJsZQogICAg
ICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0
aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0
MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AyRG91
YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAgICBhcml0aFByb2ZpbGUoQXJp
dGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAub3Ax
Tm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAgICAgICAgIGZpaTJkIHQwLCB0
MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9w
Y29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGlu
dCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90LgogICAgICAgICBnZXQobV9k
c3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQ
cm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQ
cm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAgICAg
ICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKICAgICAgICAgZG91
YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEzIEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9K
SVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMsIGExCiAgICAgICAgICAgICBjQ2FsbDIo
X2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRweiByMCwgLnJlY292ZXIKLQogICAgICAg
ICAgICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAgIyBCYXNlbGluZSB1c2VzIExMSW50J3Mg
UEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQgcG9vbC4KKyAgICAgICAgICAgIGxvYWRw
IENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2ppdERh
dGFbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjpKSVREYXRhOjptX2ppdENv
bnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAgIGlmIEFSTTY0RQogICAgICAgICAgICAg
ICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRl
TWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50cnkpICogUHRyU2l6ZSwgYTIKICAgICAg
ICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgSlNFbnRyeVB0clRh
ZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEs
IE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2Vy
T3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNv
ZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQot
ICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0
eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fc3JjRHN0
LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQogICAgICAgICBtZXRhZGF0YSh0
MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNv
ZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDEsIC5zbG93KQogICAgICAg
ICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEgdDEsIFtjZnIsIHQwLCA4XQotICAg
ICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVV
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDIsIHQzKQog
ICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTExMzQsMTEgKzExMzUsNiBAQCBl
bmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLQotICAgIG1hY3JvIHVwZGF0
ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRh
OjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgZW5k
Ci0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNp
emUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0xMTQ2LDEyICsxMTQyLDEyIEBA
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwKICAgICBidGl6IHQzLCAw
eDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MwogICAgIG9ycSBudW1iZXJUYWcs
IHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVV
bmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAg
cmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0cXogdDMsIG51bWJlclRhZywgLm9w
TmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAwLCB0MwotICAgIHVwZGF0ZUFy
aXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2Zp
bGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEsIHQyKQogICAgIHJldHVybih0MykK
IAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNjAsNiBAQCBtYWNybyBiaW5hcnlPcEN1
c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bj
b2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFk
YXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAotICAgICAgICBtYWNybyBw
cm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAg
ICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQogICAgICAgICBnZXQobV9saHMsIHQy
KQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkKQEAgLTExNzcs
NyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAg
ICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQx
LCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQor
ICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2Zp
bGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLm9wMU5vdEludDoK
QEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVO
YW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93CiAgICAgICAgIGFkZHEg
bnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKLSAgICAgICAgcHJvZmlsZShBcml0
aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQyKQogICAgICAgICBq
bXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkludDoKLSAgICAgICAgcHJvZmls
ZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQyKQogICAgICAgICBj
aTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQy
KQpAQCAtMTIwNCw5ICsxMTk2LDkgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVO
YW1lLCBvcAogCiAgICAgLm9wMk5vdEludDoKICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRl
ZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIGlzIGRlZmluaXRlbHkgbm90LgotICAgICAgICBn
ZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93Ci0gICAgICAg
IHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0
aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0MikKKyAg
ICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBhZGRx
IG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCkBAIC0xNTE4LDcgKzE1MTAsNyBA
QCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV9pZF9kaXJlY3QsCiBlbmQpCiAKICMgVGhl
IGJhc2Ugb2JqZWN0IGlzIGV4cGVjdGVkIGluIHQzCi1tYWNybyBwZXJmb3JtR2V0QnlJREhlbHBl
cihvcGNvZGVTdHJ1Y3QsIG1vZGVNZXRhZGF0YU5hbWUsIHZhbHVlUHJvZmlsZU5hbWUsIHNsb3dM
YWJlbCwgc2l6ZSwgbWV0YWRhdGEsIHJldHVybikKK21hY3JvIHBlcmZvcm1HZXRCeUlESGVscGVy
KG9wY29kZVN0cnVjdCwgbW9kZU1ldGFkYXRhTmFtZSwgdmFsdWVQcm9maWxlTmFtZSwgc2xvd0xh
YmVsLCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuLCBkb0FycmF5UHJvZmlsZSkKICAgICBtZXRhZGF0
YSh0MiwgdDEpCiAgICAgbG9hZGIgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFk
YXRhTmFtZSUubW9kZVt0Ml0sIHQxCiAKQEAgLTE1NDYsNyArMTUzOCw3IEBAIG1hY3JvIHBlcmZv
cm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwKIC5vcEdldEJ5SWRBcnJheUxlbmd0aDoKICAg
ICBiYm5lcSB0MSwgY29uc3RleHByIEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCwgLm9wR2V0QnlJ
ZFVuc2V0CiAgICAgbW92ZSB0MywgdDAKLSAgICBhcnJheVByb2ZpbGUoJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRhTmFtZSUuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmls
ZSwgdDAsIHQyLCB0NSkKKyAgICBkb0FycmF5UHJvZmlsZSh0MCwgdDIsIHQ1LCB0MSkKICAgICBi
dGl6IHQwLCBJc0FycmF5LCBzbG93TGFiZWwKICAgICBidGl6IHQwLCBJbmRleGluZ1NoYXBlTWFz
aywgc2xvd0xhYmVsCiAgICAgbG9hZENhZ2VkSlNWYWx1ZShKU09iamVjdDo6bV9idXR0ZXJmbHlb
dDNdLCB0MCwgdDEpCkBAIC0xNTY4LDcgKzE1NjAsMTAgQEAgZW5kCiBsbGludE9wV2l0aE1ldGFk
YXRhKG9wX2dldF9ieV9pZCwgT3BHZXRCeUlkLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwg
bWV0YWRhdGEsIHJldHVybikKICAgICBnZXQobV9iYXNlLCB0MCkKICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlQ2VsbChzaXplLCB0MCwgdDMsIC5vcEdldEJ5SWRTbG93KQotICAgIHBlcmZvcm1H
ZXRCeUlESGVscGVyKE9wR2V0QnlJZCwgbV9tb2RlTWV0YWRhdGEsIG1fcHJvZmlsZSwgLm9wR2V0
QnlJZFNsb3csIHNpemUsIG1ldGFkYXRhLCByZXR1cm4pCisgICAgcGVyZm9ybUdldEJ5SURIZWxw
ZXIoT3BHZXRCeUlkLCBtX21vZGVNZXRhZGF0YSwgbV9wcm9maWxlLCAub3BHZXRCeUlkU2xvdywg
c2l6ZSwgbWV0YWRhdGEsIHJldHVybiwKKyAgICAgICAgbWFjcm8gKGNlbGxBbmRJbmRleGluZ1R5
cGUsIG1ldGFkYXRhLCBzY3JhdGNoMSwgc2NyYXRjaDIpCisgICAgICAgICAgICBhcnJheVByb2Zp
bGUoT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUsIGNlbGxBbmRJbmRleGluZ1R5
cGUsIG1ldGFkYXRhLCBzY3JhdGNoMSkKKyAgICAgICAgZW5kKQogCiAub3BHZXRCeUlkU2xvdzoK
ICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9nZXRfYnlfaWQpCkBAIC0zMDAyLDcg
KzI5OTcsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX29wZW4sIE9wCiAKICAg
ICBsb2FkVmFyaWFibGUoZ2V0LCBtX2l0ZXJhdG9yLCB0MykKICAgICBidHFueiB0Mywgbm90Q2Vs
bE1hc2ssIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3cKLSAgICBwZXJmb3JtR2V0QnlJ
REhlbHBlcihPcEl0ZXJhdG9yT3BlbiwgbV9tb2RlTWV0YWRhdGEsIG1fbmV4dFByb2ZpbGUsIC5p
dGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZU5leHRB
bmREaXNwYXRjaCkKKyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yT3BlbiwgbV9t
b2RlTWV0YWRhdGEsIG1fbmV4dFByb2ZpbGUsIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNs
b3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZU5leHRBbmREaXNwYXRjaCwgbWFjcm8oYSwgYiwgYywg
ZCkgZW5kKQogCiAuaXRlcmF0b3JPcGVuR2VuZXJpY0dldE5leHRTbG93OgogICAgIGNhbGxTbG93
UGF0aChfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fZ2V0X25leHQpCkBAIC0zMDYxLDcg
KzMwNTYsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wCiAKICAg
ICBsb2FkVmFyaWFibGUoZ2V0LCBtX3ZhbHVlLCB0MykKICAgICBidHFueiB0Mywgbm90Q2VsbE1h
c2ssIC5nZXREb25lU2xvdwotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JOZXh0
LCBtX2RvbmVNb2RlTWV0YWRhdGEsIG1fZG9uZVByb2ZpbGUsIC5nZXREb25lU2xvdywgc2l6ZSwg
bWV0YWRhdGEsIHN0b3JlRG9uZUFuZEptcFRvR2V0VmFsdWUpCisgICAgcGVyZm9ybUdldEJ5SURI
ZWxwZXIoT3BJdGVyYXRvck5leHQsIG1fZG9uZU1vZGVNZXRhZGF0YSwgbV9kb25lUHJvZmlsZSwg
LmdldERvbmVTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1ZSwg
bWFjcm8oYSwgYiwgYywgZCkgZW5kKQogCiAuZ2V0RG9uZVNsb3c6CiAgICAgY2FsbFNsb3dQYXRo
KF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9nZXRfZG9uZSkKQEAgLTMwODYsNyArMzA4
MSw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3JfbmV4dCwgT3AKICAgICAjIFJl
bG9hZCB0aGUgbmV4dCByZXN1bHQgdG1wIHNpbmNlIHRoZSBnZXRfYnlfaWQgYWJvdmUgbWF5IGhh
dmUgY2xvYmJlcmVkIHQzLgogICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fdmFsdWUsIHQzKQogICAg
ICMgV2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0aGUgaXRlcmF0b3IgcmVzdWx0IGlzIGEgY2Vs
bCBoZXJlIHNpbmNlIHdlIHdpbGwgaGF2ZSB0aHJvd24gYW4gZXJyb3IgYmVmb3JlLgotICAgIHBl
cmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JOZXh0LCBtX3ZhbHVlTW9kZU1ldGFkYXRhLCBt
X3ZhbHVlUHJvZmlsZSwgLmdldFZhbHVlU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlVmFsdWVB
bmREaXNwYXRjaCkKKyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV92
YWx1ZU1vZGVNZXRhZGF0YSwgbV92YWx1ZVByb2ZpbGUsIC5nZXRWYWx1ZVNsb3csIHNpemUsIG1l
dGFkYXRhLCBzdG9yZVZhbHVlQW5kRGlzcGF0Y2gsIG1hY3JvKGEsIGIsIGMsIGQpIGVuZCkKIAog
LmdldFZhbHVlU2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRv
cl9uZXh0X2dldF92YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBj
b3B5KQpAQCAtMTQyMCw3ICsxNDIwLDggQEAgZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQo
aW5jcmVtZW50LCBhY3Rpb24pCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgYmFk
ZGlzIGluY3JlbWVudCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQorICAgIGxvYWRwIENv
ZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyW3QwXSwgdDAKKyAgICBiYWRkaXMgaW5jcmVt
ZW50LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQog
ICAgIGFjdGlvbigpCiAgICAgLmNvbnRpbnVlOgogZW5kCkBAIC0xNTAzLDcgKzE1MDQsOCBAQCBt
YWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgY29kZUJsb2NrR2V0
dGVyKHQxKQogICAgIGNvZGVCbG9ja1NldHRlcih0MSkKICAgICBpZiBub3QgKENfTE9PUCBvciBD
X0xPT1BfV0lOKQotICAgICAgICBiYWRkaXMgNSwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNv
dW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MV0sIC5jb250aW51
ZQorICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MV0sIHQw
CisgICAgICAgIGJhZGRpcyA1LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0
MF0sIC5jb250aW51ZQogICAgICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgICAgIG1vdmUgY2Zy
LCBhMAogICAgICAgICAgICAgbW92ZSBQQywgYTEKQEAgLTE2MTcsMTQgKzE2MTksMTQgQEAgbWFj
cm8gZnVuY3Rpb25Jbml0aWFsaXphdGlvbihwcm9maWxlQXJnUwogICAgICMgb3B0aW1hbCB3YXkg
Zm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIG1vcmUgdGhhbiBmaXZlIHJlZ2lzdGVycyBhdmFp
bGFibGUKICAgICAjIGZvciBhcmJpdHJhcnkgdXNlIGluIHRoZSBpbnRlcnByZXRlci4KICAgICBs
b2FkaSBDb2RlQmxvY2s6Om1fbnVtUGFyYW1ldGVyc1t0MV0sIHQwCi0gICAgYWRkcCAtcHJvZmls
ZUFyZ1NraXAsIHQwICMgVXNlIGFkZGkgYmVjYXVzZSB0aGF0J3Mgd2hhdCBoYXMgdGhlIHBlZXBo
b2xlCisgICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQwCiAgICAgYXNzZXJ0KG1hY3JvIChvaykg
YnBndGVxIHQwLCAwLCBvayBlbmQpCiAgICAgYnRweiB0MCwgLmFyZ3VtZW50UHJvZmlsZURvbmUK
ICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzICsgRml4ZWRWZWN0
b3I6Om1fc3RvcmFnZSArIFJlZkNvdW50ZWRBcnJheTo6bV9kYXRhW3QxXSwgdDMKICAgICBidHB6
IHQzLCAuYXJndW1lbnRQcm9maWxlRG9uZSAjIFdoZW4gd2UgY2FuJ3QgSklULCB3ZSBkb24ndCBh
bGxvY2F0ZSBhbnkgYXJndW1lbnQgdmFsdWUgcHJvZmlsZXMuCiAgICAgbXVscCBzaXplb2YgVmFs
dWVQcm9maWxlLCB0MCwgdDIgIyBBYWFhYWhoaGghIE5lZWQgc3RyZW5ndGggcmVkdWN0aW9uIQog
ICAgIGxzaGlmdHAgMywgdDAgIyBvZmZzZXQgb2YgbGFzdCBKU1ZhbHVlIGFyZ3VtZW50cyBvbiB0
aGUgc3RhY2suCi0gICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2Zp
bGUgYXJyYXkgaW4gQ29kZUJsb2NrOjptX2FyZ3VtZW50VmFsdWVQcm9maWxlcy4KKyAgICBhZGRw
IHQyLCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBpbiB0aGUgdmFs
dWUgcHJvZmlsZSBhcnJheS4KIC5hcmd1bWVudFByb2ZpbGVMb29wOgogICAgIGlmIEpTVkFMVUU2
NAogICAgICAgICBsb2FkcSBUaGlzQXJndW1lbnRPZmZzZXQgLSA4ICsgcHJvZmlsZUFyZ1NraXAg
KiA4W2NmciwgdDBdLCB0MgpAQCAtMjU2Myw2ICsyNTY1LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRl
ZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3Ql
OjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUs
IFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBs
b2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwg
dGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5k
CisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9u
IGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRv
d3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlm
IFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmll
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRp
YyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25z
dCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cisg
ICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAg
ICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVh
YmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1
cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICsz
NSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5
cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJs
b2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7
CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
PgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywg
Y29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVu
dGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRU
eXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYWNoZWRUeXBlcy5oIgogCisjaW5jbHVk
ZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVk
ZSAiQnl0ZWNvZGVDYWNoZUVycm9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgiCkBAIC0xOTE4LDYgKzE5MTksOCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1W
YWx1ZVByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYWx1ZVByb2ZpbGVzOyB9CiAgICAg
dW5zaWduZWQgbnVtQXJyYXlQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJyYXlQcm9m
aWxlczsgfQorICAgIHVuc2lnbmVkIG51bUJpbmFyeUFyaXRoUHJvZmlsZXMoKSBjb25zdCB7IHJl
dHVybiBtX251bUJpbmFyeUFyaXRoUHJvZmlsZXM7IH0KKyAgICB1bnNpZ25lZCBudW1VbmFyeUFy
aXRoUHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsgfQog
CiBwcml2YXRlOgogICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKQEAgLTE5NTIs
NiArMTk1NSw4IEBAIHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX251bVZhbHVlUHJvZmlsZXM7
CiAgICAgdW5zaWduZWQgbV9udW1BcnJheVByb2ZpbGVzOworICAgIHVuc2lnbmVkIG1fbnVtQmlu
YXJ5QXJpdGhQcm9maWxlczsKKyAgICB1bnNpZ25lZCBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsK
IAogICAgIENhY2hlZE1ldGFkYXRhVGFibGUgbV9tZXRhZGF0YTsKIApAQCAtMjE2MCw2ICsyMTY1
LDggQEAgQUxXQVlTX0lOTElORSBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZQogICAgICwgbV9y
YXJlRGF0YShjYWNoZWRDb2RlQmxvY2sucmFyZURhdGEoZGVjb2RlcikpCiAgICAgLCBtX3ZhbHVl
UHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bVZhbHVlUHJvZmlsZXMoKSkKICAgICAsIG1fYXJy
YXlQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVtQXJyYXlQcm9maWxlcygpKQorICAgICwgbV9i
aW5hcnlBcml0aFByb2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1CaW5hcnlBcml0aFByb2ZpbGVz
KCkpCisgICAgLCBtX3VuYXJ5QXJpdGhQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVtVW5hcnlB
cml0aFByb2ZpbGVzKCkpCiB7CiB9CiAKQEAgLTIzMzcsNiArMjM0NCw4IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29kZUIKICAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29k
ZUJsb2NrLm1faGFzQ2hlY2twb2ludHM7CiAgICAgbV9udW1WYWx1ZVByb2ZpbGVzID0gY29kZUJs
b2NrLm1fdmFsdWVQcm9maWxlcy5zaXplKCk7CiAgICAgbV9udW1BcnJheVByb2ZpbGVzID0gY29k
ZUJsb2NrLm1fYXJyYXlQcm9maWxlcy5zaXplKCk7CisgICAgbV9udW1CaW5hcnlBcml0aFByb2Zp
bGVzID0gY29kZUJsb2NrLm1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgbV9udW1V
bmFyeUFyaXRoUHJvZmlsZXMgPSBjb2RlQmxvY2subV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgp
OwogCiAgICAgbV9tZXRhZGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEu
Z2V0KCkpOwogICAgIG1fcmFyZURhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVE
YXRhLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgw
LDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNp
ZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0
aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVl
IG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5t
X2FyaXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0
YS5tX2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAg
QVNTRVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9
CiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAg
c3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxs
KTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29u
c3RydWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4
ZWN1dGFibGVCYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDYgQEAgYm9v
bCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEludDMyLCBldmFsVGhyZXNo
b2xkTXVsdGlwbGllciwgMTAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1h
eGltdW1FdmFsQ2FjaGVhYmxlU291cmNlTGVuZ3RoLCAyNTYsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIFwKLSAgICB2KEJvb2wsIHJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3Bv
aW50cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVj
dXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JCYXNlbGluZSwgMTAwMCwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihJbnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVj
a3BvaW50c0ZvclVwcGVyVGllcnMsIDUwMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkBA
IC01MzIsNiArNTMxLDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAg
ICB2KEJvb2wsIHVzZURhdGFJQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9v
bCwgdXNlRGF0YUlDSW5PcHRpbWl6aW5nSklULCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihCb29sLCB1c2VEYXRhSUNTaGFyaW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisg
ICAgdihCb29sLCB1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICBcCiAgICAgLyogRmVhdHVyZSBGbGFncyAqL1wKICAgICBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0
RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Niw3ICszOTYsOSBAQCB2b2lkIFNj
cmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpCiAgICAgaWYgKE9wdGlvbnM6OnZhbGlk
YXRlQnl0ZWNvZGUoKSkKICAgICAgICAgY29kZUJsb2NrLT52YWxpZGF0ZSgpOwogCi0gICAgaWYg
KE9wdGlvbnM6OnVzZUxMSW50KCkpCisgICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJh
c2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFz
ZWxpbmVDb2RlKQorICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVD
b2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGVsc2UgaWYgKE9wdGlvbnM6
OnVzZUxMSW50KCkpCiAgICAgICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKICAgICBlbHNlCiAg
ICAgICAgIHNldHVwSklUKHZtLCBjb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9w
dGltaXplQWZ0ZXJXYXJtVXAoKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTElu
dFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgICAg
ICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldh
cm1VcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlv
bnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVB
ZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJl
c2hvbGRSZWFjaGVkKCkKQEAgLTY1LDkgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1p
emVTb29uKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9C
QlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JC
QlFPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQo
T3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29uKCkpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1p
emVTb29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICBzdHJ1Y3QgT1NS
RW50cnlEYXRhIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBD
b3VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRp
ZXJVcENvdW50LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBUaWVyVXBDb3VudDo6VGllclVw
Q291bnQoKQogewotICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdP
cHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgIHNldE5ld1RocmVzaG9sZChPcHRp
b25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogfQogCiBUaWVyVXBD
b3VudDo6flRpZXJVcENvdW50KCkgPSBkZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAodWlu
dDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgYWZ0ZXIgd2Fy
bS11cC4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9N
R09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9s
ZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0K
IAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtOTAs
MTQgKzkwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24odWlu
dDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgbmV4dCBpbnZv
Y2F0aW9uLiIpOwotICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCwgbnVsbHB0cik7CisgICAgICAg
IHNldE5ld1RocmVzaG9sZCgwKTsKICAgICB9CiAKICAgICB2b2lkIG9wdGltaXplU29vbih1aW50
MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6
dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBzb29uLiIpOwog
ICAgICAgICAvLyBGSVhNRTogTmVlZCBhZGp1c3RtZW50IG9uY2Ugd2UgZ2V0IG1vcmUgaW5mb3Jt
YXRpb24gYWJvdXQgd2FzbSBmdW5jdGlvbnMuCi0gICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRp
b25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAg
ICAgfQogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRp
b25SZXN1bHQodWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0
KQpJbmRleDogU291cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvQmFnLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw2ICs2NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG90aGVyLm1faGVh
ZCA9IG51bGxwdHI7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBCYWcm
IG9wZXJhdG9yPShCYWc8VCwgVT4mJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh1bndyYXBw
ZWRIZWFkKCkgPT0gb3RoZXIudW53cmFwcGVkSGVhZCgpKQorICAgICAgICAgICAgcmV0dXJuICp0
aGlzOworCisgICAgICAgIEJhZyBkZXN0cm95OworICAgICAgICBkZXN0cm95Lm1faGVhZCA9IHVu
d3JhcHBlZEhlYWQoKTsKKyAgICAgICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgpOwor
ICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOworCisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisKICAgICB+QmFnKCkKICAgICB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9QYWNrZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQu
aAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL1dURi93dGYvUGFja2VkLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Niw3ICsxODYsMTAgQEAgcHVibGljOgogICAgIH0KIAogICAgIFQqIG9wZXJh
dG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQotICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuICpnZXQoKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUgPSBUPgorICAg
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3ZvaWRfdjxVPiwgVSY+Ojp0eXBlIG9w
ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQorCiAgICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhZ2V0KCk7IH0KIAogICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVy
YXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIg
aW50ZWdlciB0eXBlcy4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkocmV2aXNp
b24gMjgyNjc1KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkod29ya2lu
ZyBjb3B5KQpAQCAtNzc2LDE3ICs3NzYsMTggQEAgZW5kCiAKICMgRklYTUU6IG5lZWQgdG8gZml4
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg3MDMgdG8gZW5hYmxl
IHRoaXMgb24gTGludXgvTUlQUy4KIGRlZiBydW5CeXRlY29kZUNhY2hlSW1wbChvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMsICphZGRpdGlvbmFsRW52KQotICAgIGlmICgkaG9zdE9TID09ICJk
YXJ3aW4iKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGUiCi0gICAgZWxz
aWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAkYXJjaGl0ZWN0dXJlICE9ICJtaXBzIikKLSAgICAg
ICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlWFhYWFhYIgotICAgIGVsc2UKLSAgICAg
ICAgc2tpcAotICAgICAgICByZXR1cm4KLSAgICBlbmQKKyAgICAjIE9PUFMKKyAgICAjaWYgKCRo
b3N0T1MgPT0gImRhcndpbiIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2Fj
aGUiCisgICAgI2Vsc2lmICgkaG9zdE9TID09ICJsaW51eCIgJiYgJGFyY2hpdGVjdHVyZSAhPSAi
bWlwcyIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhYWFgiCisg
ICAgI2Vsc2UKKyAgICAjICAgIHNraXAKKyAgICAjICAgIHJldHVybgorICAgICNlbmQKIAotICAg
IG9wdGlvbnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMKLSAgICBhZGRSdW5Db21t
YW5kKCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1j
YWNoZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5k
LCAkYmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxl
RXJyb3JIYW5kbGVyLCAqYWRkaXRpb25hbEVudikKKyAgICAjb3B0aW9ucyA9IEJBU0VfT1BUSU9O
UyArIEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RTcGVj
aWZpY1JlcXVpcmVkT3B0aW9ucworICAgICNhZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIs
IFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIp
LnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5kLCAkYmVuY2htYXJrLnRvX3NdICsg
b3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyLCAqYWRkaXRp
b25hbEVudikKIGVuZAogCiBkZWYgcnVuQnl0ZWNvZGVDYWNoZSgqb3B0aW9uYWxUZXN0U3BlY2lm
aWNPcHRpb25zKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439110</attachid>
            <date>2021-09-23 17:44:06 -0700</date>
            <delta_ts>2021-09-23 17:56:15 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>550186</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkBAIC0xOTg1LDE0ICsxOTg1LDEwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzL3Nl
dHRlcnMuCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsOwogCisKICAg
ICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxjdWxhdGlvbnMgb2Ygd2hl
dGhlciBvciBub3Qgd2UncmUgYW4KICAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRsaW5nIGNhbGwg
c2l0ZS4KLSAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlOwotI2lm
IENQVShBUk02NCkKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAg
ICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0j
ZW5kaWYKLSAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3Rh
dGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChleHRyYVJlZ2lz
dGVyc1RvUHJlc2VydmUpOworICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3Rh
dGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
KCk7CiAKICAgICAgICAgYXV0byByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwg
PSBbJl0oQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlJiBzcGlsbFN0YXRlLCBib29s
IGNhbGxIYXNSZXR1cm5WYWx1ZSkgewogICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZG9udFJlc3Rv
cmU7CkBAIC0yMDc5LDggKzIwNzUsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChB
Y2Nlc3NHZW5lCiAgICAgICAgICAgICBBU1NFUlQoIShudW1iZXJPZlJlZ3NGb3JDYWxsICUgc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkpOwogICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZC
eXRlc0ZvckNhbGwgPSBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKTsKIAotICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51
bWJlck9mQnl0ZXNGb3JDYWxsID0KLSAgICAgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsK
IAogICAgICAgICAgICAgaml0LnN1YlB0cigKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLApAQCAtMjEzOCw2ICsy
MTMzLDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogCiAgICAg
ICAgICAgICBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0ID0gKGNvZGVCbG9jay0+c3RhY2tQb2ludGVy
T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSAtIHN0YXRlLnByZXNlcnZlZFJldXNlZFJlZ2lz
dGVyU3RhdGUubnVtYmVyT2ZCeXRlc1ByZXNlcnZlZCAtIHNwaWxsU3RhdGUubnVtYmVyT2ZTdGFj
a0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uOwogICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXQpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKICAgICAgICAgICAgIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlID0gaXNHZXR0ZXIoKTsKICAg
ICAgICAgICAgIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRl
LCBjYWxsSGFzUmV0dXJuVmFsdWUpOwogCkBAIC0yMjY0LDEyICsyMjYwLDcgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogCiAgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKIAotICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNU
b1ByZXNlcnZlOwotI2lmIENQVShBUk02NCkKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPnVz
ZURhdGFJQygpKQotICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQo
QVJNNjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgotICAgICAgICAgICAgYXV0byBzcGlsbFN0YXRl
ID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0
aW9ucyhleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUpOworICAgICAgICAgICAgYXV0byBzcGlsbFN0
YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhj
ZXB0aW9ucygpOwogCiAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
JnZtKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24o
dm0pOwpAQCAtMjM2NCwxMCArMjM1NSw2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBs
KEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1Rv
UHJlc2VydmU7CiAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChi
YXNlR1BSKTsKICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KHZh
bHVlUmVncyk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAgICAgIGlmIChjb2RlQmxvY2st
PnVzZURhdGFJQygpKQotICAgICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2Vy
dmUuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZl
TGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3Qu
cmIJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCBvcF9ncm91cCA6UHJvZmlsZWRC
aW5hcnlPcCwKICAgICAgICAgb3BlcmFuZFR5cGVzOiBPcGVyYW5kVHlwZXMsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQor
ICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9n
cm91cCA6VmFsdWVQcm9maWxlZEJpbmFyeU9wLApAQCAtMzUzLDcgKzM1Myw3IEBAIG9wX2dyb3Vw
IDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgICAgICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3Rl
ciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg2LDcgKzM4Niw3IEBAIG9wIDpuZWdhdGUsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewot
ICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFBy
b2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDpub3QsCkBAIC00NzgsNiAr
NDc4LDcgQEAgb3AgOmdldF9ieV9pZCwKICAgICBtZXRhZGF0YTogewogICAgICAgICBtb2RlTWV0
YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmls
ZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgfQogCiBvcCA6Z2V0
X2J5X2lkX3dpdGhfdGhpcywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVP
cGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjggQEAg
VmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JJbXBsKEJ5dGVjbwogICAgICAgICByZXR1cm4g
Jm1ldGFkYXRhLm1fcHJvZmlsZTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
dWludHB0cl90IHZhbHVlUHJvZmlsZU9mZnNldEZvcih1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRleCk7CisgICAgaWYgY29uc3RleHBy
IChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3Jfb3BlbikgeworICAgICAgICBzd2l0
Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpzeW1i
b2xDYWxsOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmls
ZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNv
ZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiBj
b25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CisgICAg
ICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5l
eHQ6OmNvbXB1dGVOZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRS
ZXN1bHRQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJl
dHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRG9uZVByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIHJldHVybiBC
eXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpOworfQorCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZU1ldGFkYXRhPgogYm9vbCBoYXNWYWx1ZVByb2ZpbGVGb3IoQnl0ZWNvZGVN
ZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJ
bmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDExICsxMTQsNiBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7CiB9
CiAKLUNvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFz
dFBhdGhTdGFydCgpCi17Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0lu
dGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwotfQotCiBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKCFpc0RhdGFJQygpKTsKQEAgLTIyNSw2ICsyMjAsMTIgQEAgdm9pZCBDYWxs
TGlua0luZm86OnNldE1heEFyZ3VtZW50Q291bnRJbgogICAgIG1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSB2YWx1ZTsKIH0KIAorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChpc0RpcmVjdCgpICYmIGlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQpOwor
fQorCiB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRvIGhh
bmRsZVNwZWNpZmljQ2FsbGVlID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKQEAgLTI5OCwy
MyArMjk5LDExIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGMKICAg
ICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1
c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1Rh
aWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewotICAg
IHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7Ci0gICAgaWYgKGlzRGF0YUlDKCkpIHsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJl
Zyk7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwg
Y2FsbExpbmtJbmZvR1BSKTsKLSAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBj
YWxsTGlua0luZm9HUFI7Ci0gICAgfQotCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0Lmxh
YmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHNsb3dQYXRoOwogCi0gICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICBpZiAodXNl
RGF0YUlDID09IFVzZURhdGFJQzo6WWVzKSB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
aml0LnNjcmF0Y2hSZWdpc3RlcigpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7
IAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKQEAgLTMyMyw3ICsz
MTIsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAg
ICAgICBnb1BvbHltb3JwaGljID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25a
ZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5bW9ycGhpY0Nh
bGxlZU1hc2spKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsK
ICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgZ29Qb2x5bW9y
cGhpYy5saW5rKCZqaXQpOyAvLyBQb2x5bW9ycGhpYyBzdHViIGhhbmRsZXMgdGFpbCBjYWxsIHN0
YWNrIHByZXAuCiAgICAgICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Y2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkpLCBK
U0VudHJ5UHRyVGFnKTsKQEAgLTMzNiwxNCArMzI1LDE2IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQ
dHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVj
aywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKSk7CiAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAg
ICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwog
ICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAg
ICAgICAgICAgIHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT51LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51
LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNTMsMTMg
KzM0NCwzNCBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUMgdXNlRGF0YUlDKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwotICAg
IHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIs
IHVzZURhdGFJQywgbnVsbHB0cik7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKwor
ICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
b0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHUu
ZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKworICAg
IHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0lu
Zm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxG
YXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1Rh
aWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBj
YWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsK
KyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQ
YXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgVXNlRGF0YUlDOjpO
bywgaXNUYWlsQ2FsbCgpLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworfQorCitNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcp
OworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBj
YWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK01h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENh
bGwpKTsKIH0KIAogdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxs
SGVscGVycyYgaml0KQpAQCAtMzY5LDE3ICszODEsMzIgQEAgdm9pZCBDYWxsTGlua0luZm86OmVt
aXRTbG93UGF0aChWTSYgdm0sIAogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRy
eVB0clRhZyk7CiB9CiAKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0m
LCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBqaXQu
bW92ZShjYWxsTGlua0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVz
dGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5p
dGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxM
aW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAg
ICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2Rl
SW5kZXgpOworICAgIHNldFVwQ2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2Fs
bGVlR1BSKTsKKyAgICBtX2RvbmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVM
b2NhdGlvbjsKKyAgICBpZiAodW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkg
eworICAgICAgICAvLyBGSVhNRTogSXQnZCBiZSBuaWNlIGlmIHRoaXMganVzdCB3ZXJlIGEgcmVm
Y291bnRlZCBkYXRhIHN0cnVjdHVyZS4KKyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFr
ZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1l
U2h1ZmZsZURhdGEpOworICAgIH0KKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7
CisgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAg
c2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKIHZv
aWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7CiAKICAgICBzZXRVc2VzRGF0YUlD
cyhVc2VEYXRhSUM6Ok5vKTsKIAotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgp
OwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgYXV0byBjYWxsID0gaml0Lm5l
YXJDYWxsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewogICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwpAQCAtMzk3LDcgKzQyNCw3IEBA
IHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIGF1dG8gZmFz
dFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOworICAgICAgICB1
LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CiAgICAgfSk7CiAKICAgICAvLyAtIElmIHdlJ3JlIG5v
dCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0MywxMSBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogZW51
bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogc3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogCitz
dHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87CisKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1Ymxp
YyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiBwdWJsaWM6Ci0gICAgZW51
bSBDYWxsVHlwZSB7CisgICAgZW51bSBDYWxsVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25l
LAogICAgICAgICBDYWxsLAogICAgICAgICBDYWxsVmFyYXJncywKQEAgLTE2NSw2ICsxNjcsOCBA
QCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAorICAg
IHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CisKICAgICBHUFJSZWcgY2FsbGVl
R1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVHUFI7IH0KICAgICAKICAgICBlbnVtIGNsYXNz
IFVzZURhdGFJQyA6IHVpbnQ4X3QgewpAQCAtMTczLDEzICsxNzcsMTYgQEAgcHVibGljOgogICAg
IH07CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0
aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxs
KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxD
YWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNF
RF9SRVRVUk47CiBwdWJsaWM6CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBl
bWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNF
RF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkg
V0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFp
bENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAg
dm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7CiAgICAgdm9pZCBlbWl0RGly
ZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4g
cHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVs
cGVycyYpOworICAgIHN0YXRpYyB2b2lkIGVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwogICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1
YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVz
ZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURhdGFJQzo6WWVzOyB9CkBAIC0yMDMsNyArMjEw
LDYgQEAgcHVibGljOgogICAgICAgICBtX2FsbG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOwog
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwog
CkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9zbG93U3R1YiA9IG51bGxw
dHI7CiAgICAgfQogCi0gICAgSklUU3R1YlJvdXRpbmUqIHNsb3dTdHViKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3Nsb3dTdHViLmdldCgpOwotICAgIH0KLQogICAgIGJvb2wgc2Vlbk9uY2Uo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faGFzU2VlblNob3VsZFJlcGF0Y2g7CkBAIC0zMDgs
OSArMzA5LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+
KG1fY2FsbFR5cGUpOwogICAgIH0KIAotICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAmbV9tYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIH0K
IAogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTM4MSw3
ICszODIsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKKworICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKKwogICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwog
ICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC0zOTcsNiArNDAwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0
aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJU
YWc+IG1fY2FsbGVlTG9jYXRpb247CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoU3RhcnQ7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CiAgICAgICAgIH0gY29kZUlD
OwogICAgIH0gdTsKIApAQCAtNDI0LDYgKzQyOCwxMyBAQCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRD
YWxsTGlua0luZm9Db2RlT3JpCiAgICAgcmV0dXJuIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCk7
CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbyB7CisgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHksIG9ubHkgdXNlZCBieSBiYXNlbGluZSwgc28gdGhp
cyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBDb2RlT3JpZ2luLgorICAgIENhbGxMaW5rSW5mbzo6
Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gZG9uZUxvY2F0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0
YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307CisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw4IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAgIEFTU0VSVChz
b3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFt
ZXRlcnMoKSk7CisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUt
PmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKICAgICAKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgp
LmFkZCh0aGlzKTsKIH0KQEAgLTMxOCw3ICszMjAsNiBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBDCiAgICAgZmluaXNoQ3JlYXRpb25Db21tb24odm0pOwogCiAgICAg
b3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGppdEFmdGVyV2FybVVwKCk7CiAKICAgICBpZiAo
b3RoZXIubV9yYXJlRGF0YSkgewogICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7
CkBAIC0zNTksNyArMzYwLDkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1
cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFt
ZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7Ci0gICAgCisKKyAgICBt
X2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNvdW50
ZXIoKTsKKwogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQogCkBAIC0z
NzAsMTAgKzM3MywxMyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSog
CiAvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5rZWQgYnl0ZWNvZGUgZ2VuZXJhdGlv
bi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdlbmVyYXRlIGNvbnRyb2wKIC8vIGZs
b3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgd2UgcmVs
eSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2FtZSBmb3IKIC8vIGFsbCB0aGUgQ29k
ZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2UgcmVseSBvbiB0aGlzIGZhY3QgYnkg
Y2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKLS8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9j
ay4KKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4gQWxzbywgQmFzZWxpbmUgSklUIGNvZGUg
aXMgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5rZWRDb2RlQmxvY2ss
CisvLyBzbyB0aGUgYnl0ZWNvZGUgbXVzdCByZW1haW4gdGhlIHNhbWUgYmV0d2VlbiBDb2RlQmxv
Y2tzIHNoYXJpbmcgYW4gVW5saW5rZWRDb2RlQmxvY2suCiBib29sIENvZGVCbG9jazo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlu
a2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKICAgICBKU1Njb3BlKiBzY29wZSkKIHsK
KyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7IC8vIFdlIG5lZWQgdG8gc2V0IHVwIG91ciB2
YWx1ZSBwcm9maWxlIHBvaW50ZXJzLgorCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIApAQCAtNDcxLDYgKzQ3NywyMSBAQCBib29s
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFrOyBcCiAg
ICAgfQogCisgICAgdW5zaWduZWQgYmluYXJ5UHJvZmlsZUluZGV4ID0gMDsKKyAgICB1bnNpZ25l
ZCB1bmFyeVByb2ZpbGVJbmRleCA9IDA7CisjZGVmaW5lIExJTktfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJWkVf
TUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3Vu
bGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJpbmFyeVByb2ZpbGVJbmRleCsrKTsgXAor
ICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFMSVpFX01F
VEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxp
bmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKHVuYXJ5UHJvZmlsZUluZGV4KyspOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0
cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMsMTQgKzU1NCwxNCBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQ
cm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTkso
T3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAg
IExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcElu
YykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BN
dWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAg
ICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktf
V0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5B
UllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2OSw3ICs3OTAs
NiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgLy8gcmVs
eSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRlZCB0
byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUgYWNj
dXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0ZXJXYXJt
VXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgLy8gSWYgdGhlIGNvbmN1cnJlbnQg
dGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4gY29tcHV0ZSBpdCBo
ZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAgLTc5Myw2ICs4MTMsNzYgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3duZXJFZGdlLnNldCh2bSwg
dGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZtLCB0aGlzKSk7CiB9CiAK
K3ZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShSZWY8QmFzZWxp
bmVKSVRDb2RlPiBqaXRDb2RlKQoreworICAgIHNldEpJVENvZGUoaml0Q29kZS5jb3B5UmVmKCkp
OworCisgICAgeworICAgICAgICBjb25zdCBhdXRvJiBqaXRDb2RlTWFwID0gdGhpcy0+aml0Q29k
ZU1hcCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mRXhjZXB0aW9u
SGFuZGxlcnMoKTsgKytpKSB7CisgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IGV4
Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVt
LzM5NDMzMzE4Pi4KKyAgICAgICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IGppdENvZGVNYXAu
ZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBhdXRvJiBqaXREYXRhID0gZW5z
dXJlSklURGF0YShsb2NrZXIpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdERhdGEubV9q
aXRDb25zdGFudFBvb2wuaXNFbXB0eSgpKTsKKyAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50
UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCkp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGppdENvZGUtPm1fY29uc3RhbnRQb29s
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvIGVudHJ5ID0gaml0Q29kZS0+bV9jb25z
dGFudFBvb2wuYXQoaSk7CisgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5LnR5cGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3Q6CisgICAgICAg
ICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IG1fZ2xvYmFsT2JqZWN0Lmdl
dCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbzogeworICAgICAgICAgICAgICAgIFVubGlua2VkQ2Fs
bExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9ICpzdGF0aWNfY2FzdDxVbmxpbmtlZENh
bGxMaW5rSW5mbyo+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAgIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0RGF0YS5tX2NhbGxMaW5rSW5mb3MuYWRkKENvZGVP
cmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+aW5pdGlhbGl6ZURhdGFJQyh2bSgpLCB1bmxpbmtlZENhbGxMaW5r
SW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBq
aXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gY2FsbExpbmtJbmZvOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbyA9ICpzdGF0aWNfY2FzdDxVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKj4oZW50cnkucGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gaml0RGF0YS5tX3N0dWJJbmZvcy5hZGQo
dW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlLCBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8u
Ynl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0aWFsaXplRnJv
bVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8odGhpcywgdW5saW5rZWRTdHViSW5mbyk7CisgICAg
ICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IHN0dWJJbmZvOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRD
b25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbDogeworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZC5nZXQoKSk7
CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9u
RGVjbChpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByOiB7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRy
eS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQ
b29sW2ldID0gZnVuY3Rpb25FeHByKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRj
aCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICBjYXNlIE1vZHVsZUNv
ZGU6CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQg
PSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAgICAg
IC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRl
Y3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhh
dCBvYnNlcnZhdGlvbi4KKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5s
aW5lKGNhcGFiaWxpdHlMZXZlbCgpKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24odGhpcyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChqaXRDb2RlLT5tX2lzU2hhcmVhYmxl
ICYmICF1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlICYmIE9wdGlv
bnM6OnVzZUJhc2VsaW5lSklUQ29kZVNoYXJpbmcoKSkKKyAgICAgICAgdW5saW5rZWRDb2RlQmxv
Y2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSA9IFdURk1vdmUoaml0Q29kZSk7Cit9CisKIENv
ZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC04NzMsNiAr
OTYzLDI3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IH0KIAorYm9vbCBDb2RlQmxvY2s6OmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2so
VmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKK3sKKyAgICAvLyBUaGlzIG5lZWRzIHRvIGNvcnJl
c3BvbmQgdG8gd2hhdCB3ZSBkbyBpbnNpZGUgc2V0Q29uc3RhbnRSZWdpc3RlcnMuCisgICAgc3dp
dGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bihyZWcpKSB7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6Cisg
ICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZToKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOiB7CisgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSB1bmxpbmtlZENvZGVCbG9jaygpLT5nZXRDb25zdGFudChyZWcp
OworICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAg
ICAgaWYgKGNlbGwtPmluaGVyaXRzPFN5bWJvbFRhYmxlPih2bSgpKSB8fCBjZWxsLT5pbmhlcml0
czxKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4odm0oKSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKwogVmVjdG9yPHVuc2lnbmVkPiBDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0
ZXJzKGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywg
Y29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtODkyLDYg
KzEwMDMsNyBAQCBWZWN0b3I8dW5zaWduZWQ+IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSCiAgICAg
ICAgIHN3aXRjaCAocmVwcmVzZW50YXRpb24pIHsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb25zdGFudCA9IGds
b2JhbE9iamVjdC0+bGlua1RpbWVDb25zdGFudChzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50
Pihjb25zdGFudC5hc0ludDMyQXNBbnlJbnQoKSkpOworICAgICAgICAgICAgQVNTRVJUKGNvbnN0
YW50LmlzQ2VsbCgpKTsgLy8gVW5saW5rZWQgQmFzZWxpbmUgSklUIHJlcXVpcmVzIHRoaXMuCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
Ok90aGVyOgogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoK
QEAgLTE1MTQsNyArMTYyNiw3IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJsb2NrOjplbnN1
cmVKSVQKICAgICByZXR1cm4gKm1faml0RGF0YTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmZpbmFs
aXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklU
SW5saW5lQ2FjaGVzKCkKIHsKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQo
KSkgewogICAgICAgICBmb3IgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+
bV9jYWxsTGlua0luZm9zKQpAQCAtMTUyNSw2ICsxNjM3LDIwIEBAIHZvaWQgQ29kZUJsb2NrOjpm
aW5hbGl6ZUJhc2VsaW5lSklUSW5saW4KICAgICAgICAgICAgIHN0dWJJbmZvLT52aXNpdFdlYWtS
ZWZlcmVuY2VzKGxvY2tlciwgdGhpcyk7CiAgICAgICAgIH0KICAgICB9CisKKworI2lmIEFTU0VS
VF9FTkFCTEVECisgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewor
ICAgICAgICAvLyBWZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0
aGV5J3JlIHZpcnR1YWwgY2FsbHMuCisgICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8gOiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5t
X2V2YWxDYWxsTGlua0luZm9zKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlu
a0luZm8tPmlzTGlua2VkKCkpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5mb3JFYWNoRGVw
ZW5kZW50Q2VsbChbXSAoSlNDZWxsKikgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgfQorI2Vu
ZGlmCiB9CiAjZW5kaWYKIApAQCAtMTUzNCw0NiArMTY2MCw0NyBAQCB2b2lkIENvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwog
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29sIGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9
IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwotICAgIG1faXNFbGlnaWJsZUZvckxMSW50
RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhl
Y3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAot
ICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBj
b2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAh
bV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAm
JiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkg
ewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9v
c3JFeGl0Q291bnRlcikgewotICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnRE
b3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKLSAg
ICAgICAgICAgICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7Ci0gICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
dW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5k
bGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9u
SGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9
ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENv
ZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRj
aChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKLQotICAgICAgICAg
ICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBp
biBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwotICAgICAgICAg
ICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVp
dGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKLSAgICAg
ICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50
aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgotICAgICAgICAgICAgICAgICAgICByZXNldEpJ
VERhdGEoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9p
c0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0jZW5kaWYKKy8vIE9PUFM6IHJlY29uY2lsZSB0aGlzCisvLyNpZiBFTkFC
TEUoSklUKQorLy8gICAgYm9vbCBpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBtX2lzRWxp
Z2libGVGb3JMTEludERvd25ncmFkZTsKKy8vICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdy
YWRlID0gZmFsc2U7CisvLyAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBleGVjdXRp
bmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0CisvLyAg
ICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFuZCByZWluc3RhbGwgTExJbnQgY29k
ZSB0byBzYXZlIEpJVCBtZW1vcnkuCisvLyAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAh
bV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAm
JiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkg
eworLy8gICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXpl
ZFJlcGxhY2VtZW50KCkpIHsKKy8vICAgICAgICAgICAgaWYgKCFvcHRpbWl6ZWRDb2RlQmxvY2st
Pm1fb3NyRXhpdENvdW50ZXIpIHsKKy8vICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9y
TExJbnREb3duZ3JhZGUpIHsKKy8vICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGUgPSBudWxs
cHRyOworLy8gICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRyeXBvaW50KHRoaXMpOwor
Ly8gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBl
OjpJbnRlcnByZXRlclRodW5rKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygp
OyBpKyspIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVy
SW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIo
aSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9y
YXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKKy8vICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVy
LnRhcmdldCkucHRyKCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlh
bGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsK
Ky8vICAgICAgICAgICAgICAgICAgICB9CisvLworLy8gICAgICAgICAgICAgICAgICAgIHVubGlu
a0luY29taW5nQ2FsbHMoKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBzYWZl
IHRvIGNsZWFyIHRoZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkgYWxsIGNvbXBpbGVyIHRocmVhZHMKKy8vICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2Fm
ZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIg
Ynl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKKy8vICAgICAgICAgICAgICAgICAgICAvLyBw
YXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0aGUgdmFyaW91
cyAqaW5mb3MuCisvLyAgICAgICAgICAgICAgICAgICAgcmVzZXRKSVREYXRhKCk7CisvLyAgICAg
ICAgICAgICAgICB9IGVsc2UKKy8vICAgICAgICAgICAgICAgICAgICBtX2lzRWxpZ2libGVGb3JM
TEludERvd25ncmFkZSA9IHRydWU7CisvLyAgICAgICAgICAgIH0KKy8vICAgICAgICB9CisvLyAg
ICB9CisvLworLy8jZW5kaWYKICAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJl
dGVkKGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAog
I2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQotICAgICAgICBmaW5hbGl6ZUJh
c2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7CisgICAgICAgIGZpbmFsaXplSklUSW5saW5lQ2FjaGVz
KCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTU5NCw3ICsxNzIxLDcgQEAg
dm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICBjYXNlIEpJ
VFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2Ug
SklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4
ZWN1dGVDb3VudGVyLmNvdW50KCk7CisgICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRl
Q291bnRlci0+Y291bnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5
cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVy
LmNvdW50KCk7CkBAIC0xNjc1LDMwICsxODAyLDYgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVC
bG9jazo6YWRkU3R1YkluZgogICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHVi
SW5mb3MuYWRkKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pOwogfQogCi1KSVRBZGRJQyogQ29kZUJs
b2NrOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUTXVsSUMq
IENvZGVCbG9jazo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUp
Ci17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBl
bnN1cmVKSVREYXRhKGxvY2tlcikubV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJ
VFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBy
ZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOwot
fQotCi1KSVROZWdJQyogQ29kZUJsb2NrOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsK
LSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fbmVnSUNzLmFkZChhcml0aFByb2Zp
bGUpOwotfQotCiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9s
b2NrKTsKQEAgLTMxMzMsNyArMzIzNiw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdp
c3RlckNvdW50KCkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVDoKLSAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOwor
ICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRD
b2RlQmxvY2soKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklU
KQpAQCAtMzM0OSwxMyArMzQ1MiwxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6
YmluYXJ5QXJpCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3Bf
YWRkOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+
YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVy
biBwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2Fz
ZSBvcF9zdWI6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMp
Lm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4g
JnBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAg
cmV0dXJuIHBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAg
ICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMzY3LDExICszNDcwLDExIEBA
IFVuYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2gg
KHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAm
cGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAg
ICByZXR1cm4gcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OwogICAgIGNhc2Ugb3BfaW5jOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAg
ICAgcmV0dXJuICZwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzQ3MiwyMiAr
MzU3NSwxNiBAQCB2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiB9CiAK
ICNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0
ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJiBtYXApIAoteyAKLSAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1f
cGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1hcCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8Q29k
ZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW5kUEModm9pZCogcGMpCiB7CisgICAgaWYgKGF1dG8qIHBj
VG9Db2RlT3JpZ2luTWFwID0gbV9qaXRDb2RlLT5wY1RvQ29kZU9yaWdpbk1hcCgpKSB7CisgICAg
ICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBwY1RvQ29kZU9y
aWdpbk1hcC0+ZmluZFBDKHBjKSkKKyAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAg
IH0KKwogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwog
ICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICAg
ICAgaWYgKGppdERhdGEtPm1fcGNUb0NvZGVPcmlnaW5NYXApIHsKLSAgICAgICAgICAgICAgICBp
ZiAoc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gaml0RGF0YS0+bV9wY1Rv
Q29kZU9yaWdpbk1hcC0+ZmluZFBDKHBjKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
ZGVPcmlnaW47Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgICAg
ICBpZiAoc3R1YkluZm8tPmNvbnRhaW5zUEMocGMpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPihzdHViSW5mby0+Y29kZU9yaWdpbik7CkBAIC0z
NTIxLDI4ICszNjE4LDE0IEBAIHN0ZDo6b3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2Nr
OjoKICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKIH0KIAotaW50MzJfdCBDb2RlQmxvY2s6OnRo
cmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKLXsKLSAgICBzd2l0Y2ggKHVubGlua2Vk
Q29kZUJsb2NrKCktPmRpZE9wdGltaXplKCkpIHsKLSAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVy
bWluYXRlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkOwotICAgIGNhc2UgVHJpU3RhdGU6OkZh
bHNlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkICogNDsKLSAgICBjYXNlIFRyaVN0YXRlOjpU
cnVlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8gMjsKLSAgICB9Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRocmVzaG9sZDsKLX0KLQotdm9pZCBDb2RlQmxvY2s6
OmppdEFmdGVyV2FybVVwKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKIHsKLSAgICBtX2xs
aW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25z
Ojp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1
dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQodW5saW5rZWRDb2RlQmxvY2soKS0+dGhyZXNob2xk
Rm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOwogfQogCi12b2lk
IENvZGVCbG9jazo6aml0U29vbigpCit2b2lkIENvZGVCbG9jazo6aml0TmV4dEludm9jYXRpb24o
KQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xk
Rm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOworICAgIG1fbGxp
bnRFeGVjdXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwogfQogCiBib29sIENv
ZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdApAQCAtMzU4OCwy
OCArMzY3MSw4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRvdWJs
ZSBudW1TdWJzID0gMC4wOwogICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKLSAgICBh
dXRvIGNvdW50SUNzID0gWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICBpZiAo
YXV0byogaml0RGF0YSA9IGNvZGVCbG9jay0+bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAg
ICBmb3IgKEpJVEFkZElDKiBhZGRJQyA6IGppdERhdGEtPm1fYWRkSUNzKSB7Ci0gICAgICAgICAg
ICAgICAgbnVtQWRkcysrOwotICAgICAgICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+
Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChKSVRNdWxJQyog
bXVsSUMgOiBqaXREYXRhLT5tX211bElDcykgewotICAgICAgICAgICAgICAgIG51bU11bHMrKzsK
LSAgICAgICAgICAgICAgICB0b3RhbE11bFNpemUgKz0gbXVsSUMtPmNvZGVTaXplKCk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lDIDogaml0RGF0YS0+
bV9uZWdJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1OZWdzKys7Ci0gICAgICAgICAgICAgICAg
dG90YWxOZWdTaXplICs9IG5lZ0lDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBmb3IgKEpJVFN1YklDKiBzdWJJQyA6IGppdERhdGEtPm1fc3ViSUNzKSB7Ci0gICAg
ICAgICAgICAgICAgbnVtU3VicysrOwotICAgICAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBz
dWJJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8gY291
bnRJQ3MgPSBbJl0gKENvZGVCbG9jayopIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8g
cmUtaW1wbGVtZW50IHRoaXMgdXNpbmcgSklUQ29kZS4KICAgICB9OwogICAgIGhlYXAoKS0+Zm9y
RWFjaENvZGVCbG9jayhjb3VudElDcyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQs
OSBAQCBjbGFzcyBKU01vZHVsZUVudmlyb25tZW50OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogY2xhc3MgTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
OwogY2xhc3MgTWV0YWRhdGFUYWJsZTsKLWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3Mg
UmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJh
c2VsaW5lSklUQ29kZTsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
Q29kZUJsb2NrUmFyZURhdGEpOwogCkBAIC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1l
dGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdl
dCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNp
Z25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApA
QCAtMTY3LDcgKzE2OSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0
dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRt
cHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4g
Jm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJh
bWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0
ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYg
KzIzMyw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRz
KCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlu
bGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3
ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2Rl
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEw
MTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdl
dENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19j
YXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2OCwyMyArMjU5LDIxIEBAIHB1YmxpYzoKICNpZiBF
TkFCTEUoSklUKQogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNU
X0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogCiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAg
ICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7Ci0gICAgICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJ
Q3M7Ci0gICAgICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7Ci0gICAgICAgIEJhZzxKSVRTdWJJ
Qz4gbV9zdWJJQ3M7CiAgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsK
ICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGlu
ZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxM
aW5rZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5
bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAgICAgIEZp
eGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBG
aXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2lu
TWFwOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAg
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAg
ICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+
IG1faml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklU
Q29uc3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29u
c3RhbnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxp
bmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERh
dGEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAo
TElLRUxZKG1faml0RGF0YSkpCkBAIC0yOTMsMjIgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAg
ICAgSklURGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7
CiAKLSAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAg
SklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lD
KiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRT
dWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdl
bmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVEFkZElDKiBh
ZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJ
Qyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRN
dWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5h
cnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9
Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46
OnZhbHVlPjo6dHlwZT4KLSAgICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxl
KiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+
Ci0gICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsg
cmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkpJVERhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdERh
dGEpOyB9CiAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSwg
Q29kZU9yaWdpbik7CiAKQEAgLTMyMiwxOCArMjk2LDggQEAgcHVibGljOgogICAgIC8vIGxvb2tp
bmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcg
dGhpcy4KICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgo
Qnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAm
JiBqaXRDb2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RG
TW92ZShqaXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1h
cCgpCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0g
ICAgICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0K
KyAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKLSAgICB2b2lkIHNldFBDVG9D
b2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAg
c3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwogCiAgICAgdm9pZCBz
ZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0KTsKQEAgLTQ3MiwxMCArNDM2LDEyIEBA
IHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsK
IAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxl
cyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAg
ewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7
CiAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCk7CisgICAgICAg
IAogICAgIH0KIAogICAgIFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlRm9yQXJndW1lbnQodW5z
aWduZWQgYXJndW1lbnRJbmRleCkKQEAgLTU2OSw4ICs1MzUsMTAgQEAgcHVibGljOgogICAgIGNv
bnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25zdGFu
dFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQorICAgIGJv
b2wgaXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSBjb25zdDsKICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25z
dGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
cmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0
YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW5kZXgp
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdpc3RlcnMp
ICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQoKTsgfQog
CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVy
biBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rp
b25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTU5NSwyMiAr
NTYzLDIyIEBAIHB1YmxpYzoKICAgICAvLyBKdW1wIFRhYmxlcwogCiAjaWYgRU5BQkxFKEpJVCkK
LSAgICBTaW1wbGVKdW1wVGFibGUmIHN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKKyAg
ICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4
KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGlu
dCB0YWJsZUluZGV4KTsKKyAgICB2b2lkKiBiYXNlbGluZUpJVENvbnN0YW50UG9vbCgpCiAgICAg
ewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwotICAgICAgICByZXR1cm4gbV9q
aXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG1faml0RGF0YSAmJiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwor
ICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbC5kYXRhKCk7CiAgICAg
fQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1w
VGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQogCi0jaWYgRU5BQkxFKEpJVCkK
LSAgICBTdHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7Ci0gICAgICAgIHJl
dHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAg
ICB9CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgU3RyaW5nSnVtcFRhYmxlJiBkZmdTdHJpbmdT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgZGZn
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKICNlbmRpZgorCiAgICAgc2l6ZV90IG51
bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7IH0K
ICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQogCkBAIC02MzIsMjEgKzYwMCwy
MCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9s
ZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50
ZXItPmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOwogICAgIH0KIAogICAgIHZv
aWQgZG9udEpJVEFueXRpbWVTb29uKCkKICAgICB7Ci0gICAgICAgIG1fbGxpbnRFeGVjdXRlQ291
bnRlci5kZWZlckluZGVmaW5pdGVseSgpOworICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIt
PmRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgfQogCi0gICAgaW50MzJfdCB0aHJlc2hvbGRGb3JK
SVQoaW50MzJfdCB0aHJlc2hvbGQpOwotICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKTsKICAgICB2
b2lkIGppdFNvb24oKTsKKyAgICB2b2lkIGppdE5leHRJbnZvY2F0aW9uKCk7CiAKICAgICBjb25z
dCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICAgICAgcmV0
dXJuICptX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgfQogCiAgICAgdHlwZWRlZiBIYXNoTWFw
PHN0ZDo6dHVwbGU8U3RydWN0dXJlSUQsIHVuc2lnbmVkPiwgRml4ZWRWZWN0b3I8TExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0Y2hwb2lu
dE1hcDsKQEAgLTc5Nyw2ICs3NjQsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2Vy
UmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lk
KiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAog
ICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9p
ZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQpAQCAtODM4LDYgKzgw
Niw3IEBAIHB1YmxpYzoKICAgICBtdXRhYmxlIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwogCiAg
ICAgYm9vbCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQgYmVjYXVz
ZSB0aGUgSklUIHdhbnRzIHRvIHN0b3JlIHRvIGl0LgorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29k
ZUJsb2NrLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7IH0KIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgdW5zaWduZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0
eUxldmVsCkBAIC05MDcsMTYgKzg3NiwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX21ldGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0cnVj
dGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9p
bnN0cnVjdGlvbnNSYXdQb2ludGVyKTsgfQogCi0gICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJs
ZUZvckZ1enppbmdFYXJseVJldHVybigpCi0gICAgewotICAgICAgICAvLyBTb21lIGJ1aWx0aW5z
IGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRoZXkgcnVuLgotICAg
ICAgICByZXR1cm4gIW1fdW5saW5rZWRDb2RlLT5pc0J1aWx0aW5GdW5jdGlvbigpOwotICAgIH0K
KyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluYWxpemVMTEludElubGluZUNh
Y2hlcygpOwogI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBmaW5hbGl6ZUJhc2VsaW5lSklUSW5s
aW5lQ2FjaGVzKCk7CisgICAgdm9pZCBmaW5hbGl6ZUpJVElubGluZUNhY2hlcygpOwogI2VuZGlm
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgdm9pZCB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7
CkBAIC0xMDEwLDcgKzk3NSw5IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlV2F0Y2hwb2ludE1h
cCBtX2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXA7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0
Q29kZTsKICNpZiBFTkFCTEUoSklUKQorcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVRE
YXRhPiBtX2ppdERhdGE7Citwcml2YXRlOgogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgLy8gVGhpcyBpcyByZWxldmFudCB0byBub24tREZHIGNvZGUgYmxvY2tzIHRoYXQgc2VydmUg
YXMgdGhlIHByb2ZpbGVkIGNvZGUgYmxvY2sKQEAgLTEwMjksNyArOTk2LDcgQEAgcHJpdmF0ZToK
IAogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAgICAgCi0gICAg
QmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXIqIG1fbGxpbnRFeGVjdXRlQ291bnRlciB7IG51bGxwdHIgfTsK
IAogICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2ppdEV4ZWN1dGVDb3VudGVyOwogICAg
IHVpbnQzMl90IG1fb3NyRXhpdENvdW50ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDggKzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAi
QmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIlVubGlu
a2VkTWV0YWRhdGFUYWJsZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00MCw5ICs0
Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICBpZiAo
bV9tZXRhZGF0YSkgewogI2RlZmluZSBWSVNJVChfX29wKSBcCiAgICAgICAgIG1fbWV0YWRhdGEt
PmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBmdW5jKG1ldGFkYXRhLm1fcHJv
ZmlsZSwgZmFsc2UpOyB9KTsKLQogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9WQUxVRV9Q
Uk9GSUxFKFZJU0lUKQotCiAjdW5kZWYgVklTSVQKIAogICAgICAgICBtX21ldGFkYXRhLT5mb3JF
YWNoPE9wSXRlcmF0b3JPcGVuPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IApAQCAtNTcsNyArNTcs
NiBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgICAgICAg
ICBmdW5jKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLCBmYWxzZSk7CiAgICAgICAgIH0pOwogICAg
IH0gICAKLQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgpAQCAtOTksNCArOTgsMzgg
QEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5rSW5mbwogICAgIH0KIH0KIAor
I2lmIEVOQUJMRShKSVQpCitBTFdBWVNfSU5MSU5FIGNvbnN0IEpJVENvZGVNYXAmIENvZGVCbG9j
azo6aml0Q29kZU1hcCgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0
Q29kZS5nZXQoKSktPm1faml0Q29kZU1hcDsKK30KKworQUxXQVlTX0lOTElORSBTaW1wbGVKdW1w
VGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgp
Cit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1f
c3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmdK
dW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5n
ZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKyNlbmRpZgor
CisjaWYgRU5BQkxFKERGR19KSVQpCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJsZSYgQ29k
ZUJsb2NrOjpkZmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJU
KGppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxE
Rkc6OkpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJ
bmRleF07Cit9CisKK0FMV0FZU19JTkxJTkUgU3RyaW5nSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmRm
Z1N0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0
VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6
SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzAs
NiArNzAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uq
IHdyYXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwogICAgIAogICAgIHN0YXRpYyBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlKiB3cmFwQW5kQWN0aXZhdGUoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwor
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLCBtX2NvZGVCbG9jayk7IH0KICAg
ICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291
bnRlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3
IEBAIGJvb2wgRXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjoKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgdGhyZXNob2xkID0gY2xpcHBlZFRocmVzaG9sZChjb2Rl
QmxvY2sgPyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIDogbnVsbHB0ciwgdGhyZXNob2xkKTsK
KyAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKHRocmVzaG9sZCk7CiAgICAgCiAgICAg
bV9jb3VudGVyID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXRocmVzaG9sZCk7CiAgICAgICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291
bnRlci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0aW9uQ291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsgLy8gSWYgeW91IHVz
ZSB0aGlzLCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCgpIG1heSBzdGlsbCByZXR1cm4g
ZmFsc2UuCiAgICAgYm9vbCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sq
KTsKICAgICBib29sIGhhc0Nyb3NzZWRUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVybiBtX2NvdW50
ZXIgPj0gMDsgfQotICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBD
b2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwg
Q29kZUJsb2NrKiA9IG51bGxwdHIpOwogICAgIHZvaWQgZGVmZXJJbmRlZmluaXRlbHkoKTsKICAg
ICBkb3VibGUgY291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdG90
YWxDb3VudCkgKyBtX2NvdW50ZXI7IH0KICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKQEAgLTg2LDEzICs4Niw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFQgdGhyZXNob2xkKQorICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hv
bGQoVCB0aHJlc2hvbGQpCiAgICAgewotICAgICAgICBpbnQzMl90IG1heFRocmVzaG9sZDsKLSAg
ICAgICAgaWYgKE9wdGlvbnM6OnJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3Bv
aW50cygpICYmIGdsb2JhbE9iamVjdCkKLSAgICAgICAgICAgIG1heFRocmVzaG9sZCA9IGdsb2Jh
bE9iamVjdC0+d2Vha1JhbmRvbUludGVnZXIoKSAlIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3
ZWVuQ2hlY2twb2ludHMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF4VGhyZXNob2xk
ID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOworICAgICAgICBp
bnQzMl90IG1heFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2tw
b2ludHMoKTsKICAgICAgICAgaWYgKHRocmVzaG9sZCA+IG1heFRocmVzaG9sZCkKICAgICAgICAg
ICAgIHRocmVzaG9sZCA9IG1heFRocmVzaG9sZDsKICAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFk
YXRhLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBzdHJ1
Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0IHsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5
SWRNb2RlTWV0YWRhdGFVbnNldCkgPT0gMTIpOwogCiBzdHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0
YUFycmF5TGVuZ3RoIHsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0
aCwgYXJyYXlQcm9maWxlKTsgfQogICAgIEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGU7CiB9Owog
c3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoKSA9PSAx
Mik7CkBAIC04OCw2ICs4OSw3IEBAIHVuaW9uIEdldEJ5SWRNb2RlTWV0YWRhdGEgewogICAgICAg
ICBHZXRCeUlkTW9kZSBtb2RlOwogICAgICAgICB1aW50OF90IGhpdENvdW50Rm9yTExJbnRDYWNo
aW5nOyAvLyBUaGlzIG11c3QgYmUgemVybyB3aGVuIHdlIHVzZSBQcm90b0xvYWQgbW9kZS4KICAg
ICB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9CiAgICAgR2V0QnlJZE1vZGVN
ZXRhZGF0YURlZmF1bHQgZGVmYXVsdE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0
IHVuc2V0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggYXJyYXlMZW5n
dGhNb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlT
dGF0dXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEzLDcgQEAg
R2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICByZXR1cm4g
R2V0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAogICAgIGNhc2UgQ2FjaGVUeXBl
OjpHZXRCeUlkU2VsZjogewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZv
LT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRC
bG9jay0+dm0oKSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
ZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZS5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcg
KzE5MCw3IEBAIHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEcKIAogICAg
IC8vIExldCdzIHN0b3JlIHRoZSByZXVzZWQgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4gQWZ0ZXIg
dGhhdCwgd2UgY2FuIHVzZSBhbGxvY2F0ZWQgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAgU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAg
YWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOworICAgICAg
ICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CiAKICAg
ICBpZiAoR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAg
IGRhdGFMb2coImJhc2VHUFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsKQEAgLTIyNSwxMiArMjI1LDkg
QEAgdm9pZCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogICAgICAgICByZWdp
c3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CiAgICAgZm9yIChGUFJSZWcgcmVnIDogZnBT
Y3JhdGNoKQogICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CisgICAg
aWYgKGppdC5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJlZ2lzdGVyc1RvU3Bp
bGxGb3JDQ2FsbC5zZXQoc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CiAgICAgcmVnaXN0ZXJzVG9T
cGlsbEZvckNDYWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckND
YWxsKCkpOwotI2lmIENQVShBUk02NCkKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5j
b2RlQmxvY2soKTsKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgcmVn
aXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCiAK
ICAgICBBY2Nlc3NDYXNlU25pcHBldFBhcmFtcyBwYXJhbXMoc3RhdGUubV92bSwgV1RGTW92ZShy
ZWdzKSwgV1RGTW92ZShncFNjcmF0Y2gpLCBXVEZNb3ZlKGZwU2NyYXRjaCkpOwogICAgIHNuaXBw
ZXQtPmdlbmVyYXRvcigpLT5ydW4oaml0LCBwYXJhbXMpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzksNyArMTM5LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9y
U3R1YkluZgogICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAogICAg
IGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSh2bSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zvcklt
cHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8t
PmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Jbmxp
bmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDEx
ICsxNzYsMTYgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3Bl
cnR5QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNl
bGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQog
ewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAv
LyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBkby4K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAg
ICAKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0yMzMsMjMgKzIzOCwz
MSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3RlCiAgICAgcmV0dXJu
IGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJlZzsKIH0KIAotYm9v
bCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNj
ZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewog
ICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0KIAotYm9v
bCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5o
YXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VS
VChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkpOworICAg
IEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5m
bywgb2Zmc2V0KSk7CisKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAg
ICAvLyBUaGVzZSBzbG90cyBnZXQgZmlsbGVkIGluLiBOb3RoaW5nIGVsc2UgdG8gZG8uCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKQEAgLTI3
OSwyMiArMjkyLDI1IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVIK
ICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6Omlz
Q2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5
KiBhcnJheSkKK2Jvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFy
cmF5KQogewogICAgIEFTU0VSVChhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKIAog
ICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxp
bmVKSVQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghaGFzRnJlZVJlZ2lzdGVy
KHN0dWJJbmZvKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFoYXNBbnlB
cnJheVN0b3JhZ2UoYXJyYXktPmluZGV4aW5nVHlwZSgpKSAmJiBhcnJheS0+aW5kZXhpbmdUeXBl
KCkgIT0gQXJyYXlDbGFzczsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlM
ZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKK2Jvb2wg
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQogewotICAgIEFTU0VS
VChpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBhcnJheSkpOworICAgIEFTU0VSVF9V
TlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIGFycmF5KSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE5LDE3ICszMzUsMjAgQEAgYm9vbCBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoUwogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5l
OwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3Ry
aW5nTGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIGhhc0Zy
ZWVSZWdpc3RlcihzdHViSW5mbyk7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0
cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitib29sIElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKIHsKLSAgICBBU1NFUlQoaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgo
c3R1YkluZm8pKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNoZWFibGVTdHJp
bmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbykpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXND
b25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM2MywxMyArMzgy
LDE4IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aCgKIH0KIAogCi1i
b29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAg
IC8vIFRoZXNlIHNsb3RzIGdldCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5mby5iYXNl
R1BSOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAKQEAg
LTQwNiwxMyArNDMwLDEzIEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5B
Y2MKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewogICAgICAgICAvLyBJZiBpdCBp
cyBub3QgR2V0QnlJZC1saWtlLXRoaW5nLCB3ZSBkbyBub3QgZW1pdCBub3Agc2xlZCAoZS5nLiBH
ZXRCeVZhbCkuCiAgICAgICAgIC8vIFRoZSBjb2RlIGlzIGFscmVhZHkgYW4gaW5kaXJlY3QganVt
cCwgYW5kIG9ubHkgdGhpbmcgd2Ugc2hvdWxkIGRvIGlzIHJlcGxhY2luZyBtX2NvZGVQdHIuCi0g
ICAgICAgIGlmIChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKKyAgICAgICAgaWYg
KGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHN0dWJJbmZv
Lmhhc0NvbnN0YW50SWRlbnRpZmllcikgewogICAgICAgICAgICAgLy8gSWYgbV9jb2RlUHRyIGlz
IHBvaW50aW5nIHRvIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbiwgdGhpcyBtZWFucyB0
aGF0IElubGluZUFjY2VzcyBjb2RlIGlzIG5vdCBhIHN0dWIgb25lLgogICAgICAgICAgICAgLy8g
V2UgcmV3cml0ZSB0aGlzIHdpdGggdGhlIHN0dWItYmFzZWQgZGlzcGF0Y2hpbmcgY29kZSBvbmNl
LCBhbmQgY29udGludWUgdXNpbmcgaXQgdW50aWwgd2UgcmVzZXQgdGhlIGNvZGUuCiAgICAgICAg
ICAgICBpZiAoc3R1YkluZm8ubV9jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0gc3R1Yklu
Zm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpIHsKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5mby5zdGFydC5yZXRh
Z2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMm
KT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmc3R1YkluZm8pLCBzdHViSW5mby5tX3N0dWJJ
bmZvR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNv
ZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgaml0
LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFn
KTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKICAgICAgICAg
ICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBzdHViSW5mby5kb25lTG9jYXRpb247CiAg
ICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0oTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewpAQCAtNDIxLDcgKzQ0NSw5IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHVi
QXNKdW1wSW5BY2MKICAgICAgICAgICAgICAgICB9KSwgIklubGluZUFjY2VzczogbGlua2luZyBz
dHViIGNhbGwiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHN0dWJJbmZv
Lm1fY29kZVB0ciA9IHRhcmdldDsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCw4ICs0NjAsMTQgQEAgdm9pZCBJbmxpbmVBY2Nl
c3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5raW5n
IGNvbnN0YW50IGp1bXAiKTsKIH0KIAotdm9pZCBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVt
cEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQg
SW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogeworICAgIGlmIChjb2RlQmxvY2stPnVz
ZURhdGFJQygpICYmIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
KSB7CisgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRM
b2NhdGlvbjsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0g
MDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5mby5zdGFy
dC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhl
bHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgIC8vIFdlIGRvbid0IG5l
ZWQgYSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1waW5nIGludG8g
dGhlIG1pZGRsZSBvZiBhbiBJQy4KICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTksMTQgKzk5LDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWF4KHNpemUsIHNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhTdHJ1Y3R1cmVT
dHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMgYm9vbCBj
YW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBQcm9wZXJ0
eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0
cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRp
YyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5
Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1
YkluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0
dWJJbmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNjZXNz
KFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJh
dGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5l
cmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0
cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBjYW5HZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBQcm9wZXJ0
eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQp
OworICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVT
dHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMg
Ym9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwg
SlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNjZXNzKENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIGJvb2wgZ2Vu
ZXJhdGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIAogICAg
IHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNz
KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KTsKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nl
c3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRT
dHViUm91dGluZVB0clRhZz4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0VfT1BFUkFU
T1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7CiAgICAg
dWludDhfdCBzZWVuTW9kZXMgeyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNl
ZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0YWRhdGEs
IHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc2Vlbk1v
ZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlu
a0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJbnRDYWxs
TGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQogCiBwcml2YXRlOgogICAgIHVpbnRwdHJfdCBt
X2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0IH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0YWRhdGFUYWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0
YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGZ1bmMoKm1ldGFkYXRhKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBudW1FbnRyaWVzKCkKKyAgICB7CisgICAgICAg
IGF1dG8qIHN0YXJ0ID0gYml0d2lzZV9jYXN0PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdldChP
cDo6b3Bjb2RlSUQpKTsKKyAgICAgICAgYXV0byogZW5kID0gYml0d2lzZV9jYXN0PHR5cGVuYW1l
IE9wOjpNZXRhZGF0YSo+KGdldEltcGwoT3A6Om9wY29kZUlEICsgMSkpOworICAgICAgICByZXR1
cm4gZW5kIC0gc3RhcnQ7CisgICAgfQorCiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCk7CiAKICAg
ICB2b2lkIHJlZigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bj
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMTcgQEAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heAogICAgIG1hY3JvKE9wSXRlcmF0b3JPcGVuKSBcCiAg
ICAgbWFjcm8oT3BJdGVyYXRvck5leHQpIFwKIAorI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lU
SF9CSU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAorICAgIG1hY3JvKE9wQWRkKSBcCisgICAg
bWFjcm8oT3BNdWwpIFwKKyAgICBtYWNybyhPcERpdikgXAorICAgIG1hY3JvKE9wU3ViKSBcCisK
KyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShtYWNybykg
XAorICAgIG1hY3JvKE9wSW5jKSBcCisgICAgbWFjcm8oT3BEZWMpIFwKKyAgICBtYWNybyhPcE5l
Z2F0ZSkgXAorCiAKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidHlwZS1saW1pdHMiKQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcg
QEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQoKQogewogICAgIHJlc3RvcmVT
Y3JhdGNoKCk7CiAgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQotICAgICAg
ICBqaXQtPnJldCgpOworICAgICAgICBqaXQtPmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHN0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZEb25l
TG9jYXRpb24oKSksIEpTSW50ZXJuYWxQdHJUYWcpOwogICAgIGVsc2UKICAgICAgICAgc3VjY2Vz
cy5hcHBlbmQoaml0LT5qdW1wKCkpOwogfQpAQCAtMTEwLDYgKzExMCw4IEBAIGNvbnN0IFJlZ2lz
dGVyU2V0JiBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsK
IAogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsID0gUmVnaXN0ZXJTZXQobV9saXZlUmVn
aXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSwgYWxsb2NhdG9yLT51
c2VkUmVnaXN0ZXJzKCkpOworICAgICAgICBpZiAoaml0LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlD
KCkpCisgICAgICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmFkZChzdHViSW5mby0+bV9z
dHViSW5mb0dQUik7CiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhjbHVkZShjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIH0KICAgICByZXR1cm4gbV9saXZlUmVnaXN0ZXJzRm9y
Q2FsbDsKQEAgLTEyOCwxMSArMTMwLDEyIEBAIGF1dG8gQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpw
cmVzZXJ2ZUxpdmUKICAgICB9OwogfQogCi1hdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJl
c2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucyhjb25zdCBS
ZWdpc3RlclNldCYgZXh0cmEpIC0+IFNwaWxsU3RhdGUKK2F1dG8gQWNjZXNzR2VuZXJhdGlvblN0
YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25z
KCkgLT4gU3BpbGxTdGF0ZQogewogICAgIFJlZ2lzdGVyU2V0IGxpdmVSZWdpc3RlcnMgPSBhbGxv
Y2F0b3ItPnVzZWRSZWdpc3RlcnMoKTsKKyAgICBpZiAoaml0LT5jb2RlQmxvY2soKS0+dXNlRGF0
YUlDKCkpCisgICAgICAgIGxpdmVSZWdpc3RlcnMuYWRkKHN0dWJJbmZvLT5tX3N0dWJJbmZvR1BS
KTsKICAgICBsaXZlUmVnaXN0ZXJzLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAg
ICBsaXZlUmVnaXN0ZXJzLm1lcmdlKGV4dHJhKTsKIAogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBl
eHRyYVN0YWNrUGFkZGluZyA9IDA7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFja0J5dGVzVXNl
ZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVz
ZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCpqaXQsIGxpdmVSZWdpc3RlcnMsIGV4dHJhU3Rh
Y2tQYWRkaW5nKTsKQEAgLTU5NiwxNiArNTk5LDE0IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQg
UG9seW1vcnBoaWNBY2Nlc3MKICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CiAgICAg
c3RhdGUuaml0ID0gJmppdDsKIAotICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7Ci0g
ICAgICAgIGlmIChzdGF0ZS5tX2RvZXNKU0dldHRlclNldHRlckNhbGxzKSB7Ci0gICAgICAgICAg
ICAvLyBXZSBoYXZlIG5vIGd1YXJhbnRlZSB0aGF0IHN0YWNrLXBvaW50ZXIgaXMgdGhlIGV4cGVj
dGVkIG9uZS4gVGhpcyBpcyBub3QgYSBwcm9ibGVtIGlmIHdlIGRvIG5vdCBoYXZlIEpTIGdldHRl
ciAvIHNldHRlciBjYWxscyBzaW5jZSBzdGFjay1wb2ludGVyIGlzCi0gICAgICAgICAgICAvLyBh
IGNhbGxlZS1zYXZlIHJlZ2lzdGVyIGluIHRoZSBDIGNhbGxpbmcgY29udmVuc2lvbi4gSG93ZXZl
ciwgb3VyIEpTIGV4ZWN1dGFibGUgY2FsbCBkb2VzIG5vdCBzYXZlIHN0YWNrLXBvaW50ZXIuIFNv
IHdlIGFyZSBhZGp1c3Rpbmcgc3RhY2stcG9pbnRlciBhZnRlcgotICAgICAgICAgICAgLy8gSlMg
Z2V0dGVyIC8gc2V0dGVyIGNhbGxzLiBCdXQgdGhpcyBjb3VsZCBiZSBkaWZmZXJlbnQgZnJvbSB0
aGUgaW5pdGlhbCBzdGFjay1wb2ludGVyLCBhbmQgbWFrZXMgUEFDIHRhZ2dpbmcgYnJva2VuLgot
ICAgICAgICAgICAgLy8gVG8gZW5zdXJlIFBBQy10YWdnaW5nIHdvcmssIHdlIGZpcnN0IGFkanVz
dCBzdGFjay1wb2ludGVyIHRvIHRoZSBhcHByb3ByaWF0ZSBvbmUuCi0gICAgICAgICAgICBqaXQu
YWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVy
T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBqaXQudGFnUmV0
dXJuQWRkcmVzcygpOworICAgIC8vIE9PUFMKKyAgICBpZiAoQVNTRVJUX0VOQUJMRUQgfHwgdHJ1
ZSkgeworICAgICAgICBqaXQucHVzaFRvU2F2ZShHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGpp
dC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1BvaW50
ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBhdXRvIG9rID0gaml0LmJyYW5jaFB0cihDQ2Fs
bEhlbHBlcnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgICAgIG9rLmxpbmso
JmppdCk7CisgICAgICAgIGppdC5wb3BUb1Jlc3RvcmUoR1BSSW5mbzo6cmVnVDApOwogICAgIH0K
IAogICAgIHN0YXRlLnByZXNlcnZlZFJldXNlZFJlZ2lzdGVyU3RhdGUgPQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNyArMjUxLDcgQEAgc3RydWN0IEFj
Y2Vzc0dlbmVyYXRpb25TdGF0ZSB7CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGNhbGN1bGF0ZUxp
dmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcoKTsKIAogICAgIFNwaWxsU3Rh
dGUgcHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoY29uc3QgUmVnaXN0ZXJTZXQm
IGV4dHJhID0geyB9KTsKLSAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3Rh
Y2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhID0geyB9
KTsKKyAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0
aG91dEV4Y2VwdGlvbnMoKTsKIAogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3Rh
Y2tGb3JDYWxsV2l0aFRocm93bkV4Y2VwdGlvbihjb25zdCBTcGlsbFN0YXRlJik7CiAgICAgdm9p
ZCByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoY29uc3QgU3BpbGxTdGF0ZSYs
IGNvbnN0IFJlZ2lzdGVyU2V0JiBkb250UmVzdG9yZSA9IHsgfSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4MCwxMCArMTgwLDEwIEBAIFB1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVz
Ojpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
ID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCA9IGlkZW50aWZpZXIudWlkKCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHVpZCk7Ci0gICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+bV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShw
cm9maWxlZEJsb2NrLT52bSgpKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92
ZShpZGVudGlmaWVyKSwgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQo
KSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RG
TW92ZShpZGVudGlmaWVyKSwgc3RydWN0dXJlLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gUHV0
QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAgICB9CiAg
ICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAogI2luY2x1
ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUg
IlJlcGF0Y2guaCIKIApAQCAtNjUsOSArNjYsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0R2V0QnlJZFNlbGYoCiAgICAgQVNTRVJUKGhhc0NvbnN0YW50SWRlbnRpZmllcik7CiAgICAg
c2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZik7CiAgICAgbV9pZGVu
dGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0
V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgp
OwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwotICAg
IHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0
OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0QXJyYXlMZW5ndGgoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyKQpAQCAtODcsOSArODgsOSBAQCB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJlcGxhCiAgICAgQVNTRVJUKG1fY2FjaGVUeXBlID09
IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6
UHV0QnlJZFJlcGxhY2UpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53
cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsK
KyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5m
bzo6aW5pdEluQnlJZFNlbGYoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcikK
QEAgLTk3LDkgKzk4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEluQnlJZFNlbGYo
YwogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KTsKICAgICBzZXRD
YWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OkluQnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmll
ciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAg
ICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5
SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0K
IAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQpAQCAtMjM2LDcgKzIzNyw3IEBAIEFj
Y2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJlU3R1YkluZm8KICAgICAgICAgLy8gd2UncmUg
YnVmZmVyZWQgaXMgYmVjYXVzZSB3ZSByZWx5IG9uIGl0IHRvIHJlc2V0IGR1cmluZyBHQyBpZiBt
X2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUKICAgICAgICAgLy8gaXMgY29sbGVjdGVkLgogICAg
ICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwotICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0g
MDsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGdlbmVyYXRlZCBzb21lIGNvZGUgdGhlbiB3
ZSBkb24ndCB3YW50IHRvIGF0dGVtcHQgdG8gcmVwYXRjaCBpbiB0aGUgZnV0dXJlIHVudGlsIHdl
CiAgICAgICAgIC8vIGdhdGhlciBlbm91Z2ggY2FzZXMuCkBAIC0yNTEsNyArMjUyLDcgQEAgdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogewogICAgIGNsZWFyQnVmZmVy
ZWRTdHJ1Y3R1cmVzKCk7CiAgICAgbV9pZGVudGlmaWVyID0gbnVsbHB0cjsKLSAgICBtX2lubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUgPSAwOwogCiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI4NSw2ICsyODYsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZv
OjpyZXNldChjb25zdCBDb25jCiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywg
UHV0QnlLaW5kOjpCeUlkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpQ
dXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgogICAgICAgICBy
ZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKQEAgLTM2MCw4ICszNjIsOCBAQCB2
b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgfQogCiAgICAgYm9v
bCBpc1ZhbGlkID0gdHJ1ZTsKLSAgICBpZiAobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQot
ICAgICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNNYXJrZWQobV9pbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlLmdldCgpKTsKKyAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlKHZtKSkKKyAgICAgICAgaXNWYWxpZCAmPSB2bS5oZWFwLmlzTWFya2Vk
KHN0cnVjdHVyZSk7CiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikKICAg
ICAgICAgaXNWYWxpZCAmPSB1LnN0dWItPnZpc2l0V2Vhayh2bSk7CiAKQEAgLTM3NSw4ICszNzcs
OCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNp
dGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAobV9pbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKQotICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFw
KHZpc2l0b3IpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUodmlzaXRvci52bSgpKSkKKyAgICAgICAgc3RydWN0dXJlLT5tYXJrSWZDaGVh
cCh2aXNpdG9yKTsKIAogICAgIGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAg
ICAgICAgIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CkBAIC00MzAsNiAr
NDMyLDIwNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAg
bV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86
OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvKQoreworICAgIGFjY2Vzc1R5
cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0
dWJJbmZvLnN0YXJ0OworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxv
Y2F0aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xv
d1BhdGhTdGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KEJ5
dGVjb2RlSW5kZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNldCgpKSk7Cisg
ICAgY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4
KTsKKyAgICBtX2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICB1c2VkUmVn
aXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIGlm
IChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4
dCwgd2UgY2FuJ3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVyUmVnaXN0ZXIiIHJlZ2lzdGVyIGVp
dGhlci4KKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
Ojpkb250Q2xvYmJlclJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUp
IHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJ
bnN0YW5jZU9mOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9m
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OlRyeUdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdl
dEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRC
eUlkRGlyZWN0OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGly
ZWN0T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJ
ZFdpdGhUaGlzOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0
aFRoaXNPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQ
cml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZh
dGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFz
UHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJp
dmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
R2V0UHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQ
cml2YXRlTmFtZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OlB1dEJ5SWQ6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2Vk
U3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0
cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJp
Y3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0
ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmlj
dE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtl
ZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Cisg
ICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAg
ICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0
aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtl
ZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5h
bWU6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJpdmF0ZUZp
ZWxkUHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmll
bGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZh
bFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxC
eVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsK
KyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAg
ICAgcmVncy5wcm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVlR1BSID0g
QmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJp
dmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVn
cy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAg
ICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAg
ICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBwcm90b3R5cGVJc0tub3du
T2JqZWN0ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdp
c3RlcnM6OnZhbHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTog
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBoYXNDb25z
dGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OkluQnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAg
ICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5l
SW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2
YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnRoaXNHUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBt
X3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IElu
dmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1
ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNz
VHlwZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2
YXRlQnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAg
ICB2YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86
OmNoZWNrQ29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKICNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRl
ICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1
cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKQEAgLTU2LDYgKzU3LDcgQEAgZW51bSBj
bGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRCeVZhbCwKICAgICBQdXRCeUlkLAog
ICAgIFB1dEJ5VmFsLAorICAgIFB1dFByaXZhdGVOYW1lLAogICAgIEluQnlJZCwKICAgICBJbkJ5
VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtNzgsNiArODAsOCBAQCBlbnVtIGNsYXNzIENh
Y2hlVHlwZSA6IGludDhfdCB7CiAgICAgU3RyaW5nTGVuZ3RoCiB9OwogCitzdHJ1Y3QgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbzsKKwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZvKTsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKQEAgLTk4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlcmVmKCk7
CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKKyAgICB2b2lkIGluaXRpYWxpemVGcm9tVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
Jik7CisKICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIENoZWNrIGlmIHRo
ZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9lcywgdGhl
biBpdCByZXNldHMgaXRzZWxmLApAQCAtMzI1LDEzICszMzEsMTkgQEAgcHJpdmF0ZToKIAogcHVi
bGljOgogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKKyAgICBQcm9wZXJ0eU9mZnNldCBieUlk
U2VsZk9mZnNldDsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQnlJZFNlbGZPZmZzZXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIGJ5SWRTZWxmT2Zm
c2V0KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBtX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOyB9CiAgICAgdW5pb24gewotICAgICAgICBzdHJ1Y3Qg
ewotICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgICAgICB9IGJ5SWRTZWxm
OwogICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsKICAgICB9IHU7Ci0gICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlOworICAgIFN0cnVj
dHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShWTSYgdm0pCisgICAgeworICAgICAgICBp
ZiAoIW1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4gdm0uZ2V0U3RydWN0dXJlKG1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZSk7CisgICAgfQorICAgIFN0cnVjdHVyZUlEIG1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSB7IDAgfTsKIHByaXZhdGU6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2lkZW50aWZp
ZXI7CiAgICAgLy8gUmVwcmVzZW50cyB0aG9zZSBzdHJ1Y3R1cmVzIHRoYXQgYWxyZWFkeSBoYXZl
IGJ1ZmZlcmVkIEFjY2Vzc0Nhc2VzIGluIHRoZSBQb2x5bW9ycGhpY0FjY2Vzcy4KQEAgLTM1Miw2
ICszNjQsNyBAQCBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPiBtX2NvZGVQdHI7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29k
ZVB0cigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgbV9jb2Rl
UHRyKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEb25lTG9jYXRpb24oKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIGRvbmVMb2NhdGlvbik7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2xvd1BhdGhTdGFydExvY2F0aW9uKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBzbG93UGF0aFN0YXJ0TG9j
YXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1fc2xvd09wZXJhdGlv
bik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ291bnRkb3duKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBjb3VudGRvd24pOyB9CkBAIC00NDcs
NiArNDYwLDE3IEBAIGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW4KICAg
ICB9CiB9CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVGaWVsZFB1
dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSB9
OworICAgIEVDTUFNb2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgpIH07CisgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPiBzdGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBp
bmxpbmUgSUMgZm9yICpieUlkIGNhY2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBq
dW1wIGZvciAnaW5zdGFuY2VvZicgY2FjaGVzLgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50
ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHVi
Um91dGluZVB0clRhZz4gc2xvd1BhdGhTdGFydExvY2F0aW9uOworfTsKKwogI2Vsc2UKIAogY2xh
c3MgU3RydWN0dXJlU3R1YkluZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3VwZXJTYW1wbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg0LDcgKzg0LDcgQEAgdm9pZCBwcmludFN1cGVyU2FtcGxlclN0YXRlKCkKICAgICBkb3VibGUg
cGVyY2VudGFnZSA9IDEwMC4wICogaW4gLyAoaW4gKyBvdXQpOwogICAgIGlmIChwZXJjZW50YWdl
ICE9IHBlcmNlbnRhZ2UpCiAgICAgICAgIHBlcmNlbnRhZ2UgPSAwLjA7Ci0gICAgZGF0YUxvZygi
UGVyY2VudCB0aW1lIGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNlbnRhZ2UsICJc
biIpOworICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFn
OiAiLCBwZXJjZW50YWdlLCAiJVxuIik7CiB9CiAKIHZvaWQgZW5hYmxlU3VwZXJTYW1wbGVyKCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKIAorI2luY2x1ZGUgIkJh
c2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgog
I2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgpAQCAt
NzgsNiArNzksOCBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0mCiAg
ICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkobG9ja2VyKTsKICAgICAgICAgbV9yYXJl
RGF0YS0+bV9wcml2YXRlQnJhbmRSZXF1aXJlbWVudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cml2YXRlQnJhbmRSZXF1aXJlbWVudDo6TmVlZGVkKTsKICAgICB9CisKKyAgICBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJl
c2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+CkBAIC0zMTYsNiArMzE5LDQ4IEBAIGludCBVbmxpbmtlZENvZGVCbG9jazo6b3V0T2ZMaW5l
SnVtcE9mZnMKICAgICByZXR1cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5nZXQoYnl0ZWNvZGVP
ZmZzZXQpOwogfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKK2Jvb2wgVW5saW5rZWRDb2RlQmxvY2s6
Omhhc0lkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBpZiAobnVtYmVy
T2ZJZGVudGlmaWVycygpID4gMTAwKSB7CisgICAgICAgIGlmIChudW1iZXJPZklkZW50aWZpZXJz
KCkgIT0gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5zaXplKCkpIHsKKyAgICAgICAgICAgIExvY2tl
ciBsb2NrZXIobV9jYWNoZWRJZGVudGlmaWVyVWlkc0xvY2spOworICAgICAgICAgICAgSGFzaFNl
dDxVbmlxdWVkU3RyaW5nSW1wbCo+IGNhY2hlZElkZW50aWZpZXJVaWRzOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciA9IHRoaXMtPmlkZW50
aWZpZXIoaSk7CisgICAgICAgICAgICAgICAgY2FjaGVkSWRlbnRpZmllclVpZHMuYWRkKGlkZW50
aWZpZXIuaW1wbCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICAgICAgICAgIG1fY2FjaGVkSWRlbnRpZmllclVpZHMgPSBXVEZNb3Zl
KGNhY2hlZElkZW50aWZpZXJVaWRzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX2Nh
Y2hlZElkZW50aWZpZXJVaWRzLmNvbnRhaW5zKHVpZCk7CisgICAgfQorCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7CisgICAgICAgIGlm
IChpZGVudGlmaWVyKGkpLmltcGwoKSA9PSB1aWQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK2ludDMyX3QgVW5saW5rZWRD
b2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKK3sKKyAgICBzd2l0
Y2ggKGRpZE9wdGltaXplKCkpIHsKKyAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgor
ICAgICAgICByZXR1cm4gdGhyZXNob2xkOworICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgorICAg
ICAgICByZXR1cm4gdGhyZXNob2xkICogNDsKKyAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgorICAg
ICAgICByZXR1cm4gdGhyZXNob2xkIC8gMjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIHRocmVzaG9sZDsKK30KKworCiB2b2lkIFVubGlua2VkQ29kZUJsb2Nr
OjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9tZXRh
ZGF0YS0+aXNGaW5hbGl6ZWQoKSk7CkBAIC0zMzcsMTUgKzM4MiwyNSBAQCB2b2lkIFVubGlua2Vk
Q29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByCiAgICAgaWYgKG1fbWV0YWRhdGEtPmhhc01ldGFk
YXRhKCkpIHsKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheVByb2ZpbGVzID0gMDsKIAot
I2RlZmluZSBDT1VOVChfX29wKSBcCi0gICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBt
X21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CisjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJl
ck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CiAgICAg
ICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ09VTlQpCiAgICAgICAgIEZP
Ul9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENPVU5UKQogI3VuZGVmIENP
VU5UCiAgICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRy
aWVzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0g
bV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEdldEJ5SWQ+KCk7Ci0KICAgICAgICAgbV9hcnJheVBy
b2ZpbGVzID0gRml4ZWRWZWN0b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+KG51bWJlck9mQXJyYXlQ
cm9maWxlcyk7CisKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCaW5hcnlBcml0aFByb2ZpbGVz
ID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZCaW5hcnlBcml0aFByb2ZpbGVzICs9
IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RF
X1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoQ09VTlQpCisjdW5kZWYgQ09VTlQKKyAgICAgICAg
bV9iaW5hcnlBcml0aFByb2ZpbGVzID0gRml4ZWRWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPihu
dW1iZXJPZkJpbmFyeUFyaXRoUHJvZmlsZXMpOworCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9m
VW5hcnlBcml0aFByb2ZpbGVzID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZVbmFy
eUFyaXRoUHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOworICAgICAg
ICBGT1JfRUFDSF9PUENPREVfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKENPVU5UKQorI3VuZGVm
IENPVU5UCisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzID0gRml4ZWRWZWN0b3I8VW5hcnlB
cml0aFByb2ZpbGU+KG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzKTsKICAgICB9CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDEyIEBA
CiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAi
QXJyYXlQcm9maWxlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgogI2luY2x1
ZGUgIkNvZGVUeXBlLmgiCiAjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKKyNpbmNsdWRlICJF
eGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgogI2lu
Y2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgpAQCAtNjQsNiAr
NjYsNyBAQCBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogc3RydWN0IEV4
ZWN1dGFibGVJbmZvOwogZW51bSBjbGFzcyBMaW5rVGltZUNvbnN0YW50IDogaW50MzJfdDsKIApA
QCAtMTc1LDYgKzE3OCw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRl
QmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFu
dFJlZ2lzdGVyczsgfQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVn
aXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25z
dGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQogICAg
IGNvbnN0IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1Nv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOyB9CiAKQEAgLTIwNyw2ICsyMTEsMTUgQEAgcHVibGljOgogICAgIEpTUGFy
c2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQ
YXJzZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1vZGUpOyB9CiAKICAgICBjb25zdCBJbnN0cnVjdGlv
blN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3Q7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uQXQoQnl0ZWNvZGVJbmRleCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rp
b25zKCkuYXQoaW5kZXgpLnB0cigpOyB9CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byog
aW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5hdCgwKS5wdHIoKTsKKyAgICAgICAg
Y29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zRW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0
cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbnN0cnVjdGlvbnNCZWdpbikg
KyBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0cnVj
dGlvbiA+PSBpbnN0cnVjdGlvbnNCZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGluc3RydWN0aW9uc0Vu
ZCk7CisgICAgICAgIHJldHVybiBpbnN0cnVjdGlvbiAtIGluc3RydWN0aW9uc0JlZ2luOworICAg
IH0KKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbnNTaXplKCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMoKSBjb25z
dCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBj
b25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KQEAgLTMzNCwxMCArMzQ3LDIxIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fbWV0YWRhdGEtPnNpemVJbkJ5dGVzKCk7CiAgICAgfQogCisgICAg
Ym9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCisgICAgewor
ICAgICAgICAvLyBTb21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUg
dGhlIGxvb3BzIHRoZXkgcnVuLgorICAgICAgICByZXR1cm4gIWlzQnVpbHRpbkZ1bmN0aW9uKCk7
CisgICAgfQogICAgIHZvaWQgYWxsb2NhdGVTaGFyZWRQcm9maWxlcygpOwogICAgIFVubGlua2Vk
VmFsdWVQcm9maWxlJiB1bmxpbmtlZFZhbHVlUHJvZmlsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1
cm4gbV92YWx1ZVByb2ZpbGVzW2luZGV4XTsgfQogICAgIFVubGlua2VkQXJyYXlQcm9maWxlJiB1
bmxpbmtlZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9hcnJheVByb2Zp
bGVzW2luZGV4XTsgfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29sIGhhc0lkZW50aWZp
ZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyNlbmRpZgorCisgICAgaW50MzJfdCB0aHJlc2hvbGRG
b3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOworCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2Rl
QmxvY2soVk0mLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mLCBP
cHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPik7CiAKQEAgLTM5Nyw2ICs0MjEsNyBAQCBwcml2
YXRlOgogICAgIHVuc2lnbmVkIG1fbGV4aWNhbFNjb3BlRmVhdHVyZXMgOiA0OwogcHVibGljOgog
ICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOworICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+
IG1fdW5saW5rZWRCYXNlbGluZUNvZGU7CiBwcml2YXRlOgogICAgIENvZGVGZWF0dXJlcyBtX2Zl
YXR1cmVzIHsgMCB9OwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKQEAgLTQxMyw3
ICs0MzgsNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVh
bT4gbV9pbnN0cnVjdGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcz4gbV9saXZlbmVzczsKIAotCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpF
eGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwogI2VuZGlmCkBAIC00NTgsNiArNDgyLDE2IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0
aW9uLm9mZnNldCgpKTsKICAgICB9CisgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIHBjKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQg
PSB0aGlzLT5ieXRlY29kZU9mZnNldChwYyk7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1w
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB9CisKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUm
IGJpbmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX2JpbmFyeUFyaXRoUHJv
ZmlsZXNbaV07IH0KKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgdW5hcnlBcml0aFByb2ZpbGUodW5z
aWduZWQgaSkgeyByZXR1cm4gbV91bmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KKworICAgIEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIHsgcmV0dXJuIG1fbGxp
bnRFeGVjdXRlQ291bnRlcjsgfQogCiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGluZUp1bXBU
YXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwpAQCAtNDY1
LDggKzQ5OSwxNiBAQCBwcml2YXRlOgogICAgIE91dE9mTGluZUp1bXBUYXJnZXRzIG1fb3V0T2ZM
aW5lSnVtcFRhcmdldHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRh
OwogICAgIEZpeGVkVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVzc2lvbkluZm87
CisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKICAg
ICBGaXhlZFZlY3RvcjxVbmxpbmtlZFZhbHVlUHJvZmlsZT4gbV92YWx1ZVByb2ZpbGVzOwogICAg
IEZpeGVkVmVjdG9yPFVubGlua2VkQXJyYXlQcm9maWxlPiBtX2FycmF5UHJvZmlsZXM7CisgICAg
Rml4ZWRWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPiBtX2JpbmFyeUFyaXRoUHJvZmlsZXM7Cisg
ICAgRml4ZWRWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2ZpbGVzOwor
CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBMb2NrIG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2Nr
OworICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBtX2NhY2hlZElkZW50aWZpZXJVaWRz
OworI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1l
dGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2
ICs2NCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVubGlua2Vk
TWV0YWRhdGFUYWJsZSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZT4K
KyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYgb3Bjb2Rl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQpOworICAgICAgICB1aW50cHRy
X3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bjb2RlOjpv
cGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07CisgICAgICAgIGJh
c2VUeXBlT2Zmc2V0ID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm9mKHR5cGVuYW1lIE9wY29k
ZTo6TWV0YWRhdGEpLCBiYXNlVHlwZU9mZnNldCk7CisgICAgICAgIHJldHVybiBiYXNlVHlwZU9m
ZnNldCArIHNpemVvZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFk
YXRhSUQ7CisgICAgfQorCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgogICAgIHVu
c2lnbmVkIG51bUVudHJpZXMoKTsKIApAQCAtMTA3LDYgKzExNiw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHJldHVybiBzX29mZnNldDE2VGFibGVTaXplOwogICAgIH0KIAorCiAgICAgdXNpbmcgT2Zm
c2V0MzIgPSB1aW50MzJfdDsKICAgICB1c2luZyBPZmZzZXQxNiA9IHVpbnQxNl90OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEzICs0NSwxMSBAQCBzdHJ1Y3QgVmFsdWVQcm9m
aWxlQmFzZSB7CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mQnVja2V0
cyA9IG51bWJlck9mQnVja2V0c0FyZ3VtZW50OwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHMgPSAxOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgYnVja2V0SW5kZXhNYXNrID0gbnVtYmVyT2ZCdWNrZXRzIC0gMTsKICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRz
ICsgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHM7CiAgICAgCiAgICAgVmFsdWVQcm9maWxlQmFzZSgp
CiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1
Y2tldHM7ICsraSkKLSAgICAgICAgICAgIG1fYnVja2V0c1tpXSA9IEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOworICAgICAgICBjbGVhckJ1Y2tldHMoKTsKICAgICB9CiAgICAgCiAgICAgRW5j
b2RlZEpTVmFsdWUqIHNwZWNGYWlsQnVja2V0KHVuc2lnbmVkIGkpCkBAIC01OSw2ICs1NywxMiBA
QCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIEFTU0VSVChudW1iZXJPZkJ1Y2tl
dHMgKyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHMpOwogICAgICAgICByZXR1cm4gbV9idWNrZXRz
ICsgbnVtYmVyT2ZCdWNrZXRzICsgaTsKICAgICB9CisKKyAgICB2b2lkIGNsZWFyQnVja2V0cygp
CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1
Y2tldHM7ICsraSkKKyAgICAgICAgICAgIG1fYnVja2V0c1tpXSA9IEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOworICAgIH0KICAgICAKICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyh1
bnNpZ25lZCBidWNrZXQpIGNvbnN0CiAgICAgewpAQCAtMTIzLDggKzEyNyw2IEBAIHN0cnVjdCBW
YWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVz
IHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMg
ZnJvbSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAg
ICAgU3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90
YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkgewpAQCAtMTM5LDcgKzE0MSw3IEBAIHN0cnVjdCBWYWx1
ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247CiAg
ICAgfQotICAgIAorCiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNrZXRzW3RvdGFsTnVtYmVyT2ZC
dWNrZXRzXTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbiB7IFNwZWNOb25lIH07
CkBAIC0xNjEsNiArMTYzLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1
Y2tldAogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZhbHVlUHJvZmlsZVdpdGhMb2dO
dW1iZXJPZkJ1Y2tldHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgpIDogVmFsdWVQcm9maWxlV2l0
aExvZ051bWJlck9mQnVja2V0czwwPigpIHsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1f
YnVja2V0c1swXSk7IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIK
ICNpbmNsdWRlICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKICNpbmNsdWRlICJE
RkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKICNpbmNsdWRlICJE
RkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKQEAgLTM0LDcgKzM1LDkgQEAKICNpbmNs
dWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2lu
Y2x1ZGUgIklubGluZUNhbGxGcmFtZVNldC5oIgorI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2lu
Y2x1ZGUgIkpTQ2FzdC5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVk
ZSAiUHJvZmlsZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIlJlY29yZGVkU3RhdHVzZXMuaCIK
ICNpbmNsdWRlIDx3dGYvQmFnLmg+CkBAIC03MCw3ICs3Myw3IEBAIHN0cnVjdCBXZWFrUmVmZXJl
bmNlVHJhbnNpdGlvbiB7CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV90bzsKIH07CiAgICAg
ICAgIAotY2xhc3MgQ29tbW9uRGF0YSB7CitjbGFzcyBDb21tb25EYXRhIDogcHVibGljIE1hdGhJ
Q0hvbGRlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CiBwdWJsaWM6
CiAgICAgQ29tbW9uRGF0YSgpCkBAIC0xMTYsNiArMTE5LDcgQEAgcHVibGljOgogICAgIEZpeGVk
VmVjdG9yPENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludD4gbV93YXRjaHBvaW50czsKICAg
ICBGaXhlZFZlY3RvcjxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IG1fYWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50czsKICAgICBGaXhlZFZlY3RvcjxBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQ+IG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50czsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVP
cmlnaW5NYXA7CiAgICAgUmVjb3JkZWRTdGF0dXNlcyByZWNvcmRlZFN0YXR1c2VzOwogICAgIFZl
Y3RvcjxKdW1wUmVwbGFjZW1lbnQ+IG1fanVtcFJlcGxhY2VtZW50czsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
RlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKIAorc3RydWN0IFNpbXBsZUp1
bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKIG5hbWVzcGFjZSBERkcgewogCiBj
bGFzcyBKSVRDb21waWxlcjsKQEAgLTEwMSw2ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAgc3RkOjpv
cHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEMoQ29kZUJsb2NrKiwgdm9pZCogcGMpIGZpbmFsOwog
CiAgICAgdXNpbmcgRGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkc7CisKKyAg
ICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVy
biBjb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQogICAgIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgSklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENvbXBpbGVyIHRvIGNhbGwg
c2V0Q29kZVJlZigpLgpAQCAtMTQwLDYgKzE0NSw4IEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPEJ5
dGVjb2RlSW5kZXgsIFRyaWdnZXJSZWFzb24+IHRpZXJVcEVudHJ5VHJpZ2dlcnM7CiAKICAgICBX
cml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX29zckVudHJ5QmxvY2s7CisgICAgRml4ZWRWZWN0b3I8
U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3Ry
aW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgdW5zaWduZWQgb3Ny
RW50cnlSZXRyeTsKICAgICBib29sIGFiYW5kb25PU1JFbnRyeTsKICNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDEzICsxODUsMTIgQEAgdm9p
ZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIAogICAgIG1fZ3JhcGgu
cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsKIAotICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMuaXNFbXB0eSgpIHx8ICFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIp
Lm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMpOwotICAgICAgICBpZiAoIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlciku
bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7
Ci0gICAgfQorICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5p
c0VtcHR5KCkpOworICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcy5pc0Vt
cHR5KCkpOworICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0
eSgpKSAKKyAgICAgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZN
b3ZlKG1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBpZiAoIW1fZ3JhcGgu
bV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9qaXRDb2RlLT5tX3N3aXRj
aEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKIAogICAg
IGZvciAoQmFnPFN3aXRjaERhdGE+OjppdGVyYXRvciBpdGVyID0gbV9ncmFwaC5tX3N3aXRjaERh
dGEuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKICAgICAgICAgU3dpdGNoRGF0YSYgZGF0YSA9
ICoqaXRlcjsKQEAgLTE5OSwxMiArMTk4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlu
a0J1ZmZlciYgbGlua0IKICAgICAgICAgY2FzZSBTd2l0Y2hDaGFyOgogICAgICAgICBjYXNlIFN3
aXRjaEltbTogewogICAgICAgICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkgewotICAg
ICAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dp
dGNoVGFibGVJbmRleCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9qaXRD
b2RlLT5tX3N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XS5pc0VtcHR5KCkp
OwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgu
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAg
ICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0
Y2hUYWJsZUluZGV4XTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFs
bFRocm91Z2guYmxvY2stPmluZGV4XSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5r
ZWRUYWJsZS5tX2N0aU9mZnNldHMuc2l6ZSgpID09IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZz
ZXRzLnNpemUoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsaW5rZWRUYWJsZS5t
X2N0aU9mZnNldHMuc2l6ZSgpOyBqLS07KQpAQCAtMjE5LDEyICsyMTgsMTIgQEAgdm9pZCBKSVRD
b21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogCiAgICAgICAgIGNhc2UgU3dpdGNoU3Ry
aW5nOiB7CiAgICAgICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5z
d2l0Y2hUYWJsZUluZGV4KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2pp
dENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlz
RW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV9ncmFwaC51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5k
ZXgpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJs
b2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAg
ICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENvZGUtPm1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0
byBjdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Js
b2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCkgPT0gdW5saW5rZWRU
YWJsZS5tX29mZnNldFRhYmxlLnNpemUoKSArIDEpOwogICAgICAgICAgICAgZm9yIChhdXRvJiBl
bnRyeSA6IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cykKQEAgLTMzMyw3ICszMzIsNyBAQCB2b2lk
IEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgfQogCiAgICAgaWYgKG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQotICAgICAgICBtX2Nv
ZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAobWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1h
cD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpKTsKKyAg
ICAgICAgbV9qaXRDb2RlLT5jb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8
UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBs
aW5rQnVmZmVyKTsKIH0KIAogc3RhdGljIHZvaWQgZW1pdFN0YWNrT3ZlcmZsb3dDaGVjayhKSVRD
b21waWxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHN0YWNrT3ZlcmZsb3cpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2
bSwgQ2FsbEZyYW1lKgogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJs
b2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsK
ICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQpOwotICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwog
ICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxp
ZCk7CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9ERkcoKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzcyLDkgKzc3Miw2IEBAIHZvaWQgT1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJz
JiAKICAgICAvLyBUaGUgdGFnIHJlZ2lzdGVycyBhcmUgbmVlZGVkIHRvIG1hdGVyaWFsaXplIHJl
Y292ZXJpZXMgYmVsb3cuCiAgICAgaml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJz
KCk7CiAKLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgaml0LmNv
cHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJh
bWUpOwotCiAgICAgaWYgKGlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KSB7CiAg
ICAgICAgIEVuY29kZWRKU1ZhbHVlKiB0bXBTY3JhdGNoID0gc2NyYXRjaCArIG9wZXJhbmRzLnRt
cEluZGV4KDApOwogICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9u
TWF0ZXJpYWxpemVPU1JFeGl0U2lkZVN0YXRlKT4oJnZtLCAmZXhpdCwgdG1wU2NyYXRjaCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJsb2Nr
SW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdPcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSAiSklULmgiCkBAIC0xMTksMTAgKzEyMCwxMCBAQCB2b2lkIGhhbmRs
ZUV4aXRDb3VudHMoVk0mIHZtLCBDQ2FsbEhlbHBlCiAgICAgaW50MzJfdCBjbGlwcGVkVmFsdWU7
CiAgICAgc3dpdGNoIChqaXQuY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklU
VHlwZTo6REZHSklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBCYXNlbGluZUV4ZWN1dGlvbkNv
dW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKSwg
dGFyZ2V0VmFsdWUpOworICAgICAgICBjbGlwcGVkVmFsdWUgPSBCYXNlbGluZUV4ZWN1dGlvbkNv
dW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQodGFyZ2V0VmFsdWUpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKLSAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVy
RXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChqaXQuY29kZUJsb2NrKCktPmdsb2Jh
bE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9IFVwcGVyVGll
ckV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQodGFyZ2V0VmFsdWUpOwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMzEzLDYgKzMxNCwxMCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0Nh
bGxIZWxwZXJzCiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKICAgICAgICAgICAg
IGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxG
cmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVH
UFIpKTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSks
IGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50
OjpSZWdpc3RlcnM6OnBiR1BSKSk7CisgICAgICAgIH0gZWxzZSBpZiAodHJ1ZUNhbGxlcikgewor
ICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5i
YXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CisgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVy
LT5tZXRhZGF0YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2Vs
aW5lQ29kZUJsb2NrLCBKSVQ6OnNfbWV0YWRhdGFHUFIpKTsKKyAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxs
ZXItPmJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxs
RnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBKSVQ6OnNfY29uc3RhbnRzR1BSKSk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCkBAIC00MDQs
NiArNDA5LDkgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9m
ZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOwogICAgICAgICBqdW1wVGFyZ2V0ID0g
ZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygp
OwogICAgIH0gZWxzZSB7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihjb2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRhdGFH
UFIpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJs
b2NrRm9yRXhpdC0+YmFzZWxpbmVKSVRDb25zdGFudFBvb2woKSksIEpJVDo6c19jb25zdGFudHNH
UFIpOworCiAgICAgICAgIGNvZGVCbG9ja0ZvckV4aXQtPm1faGFzTGlua2VkT1NSRXhpdCA9IHRy
dWU7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KCk7CkBAIC00MjAsMTIgKzQyOCwxNiBAQCB2b2lkIGFkanVzdEFuZEp1
bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlv
bi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQog
Ci0gICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNr
UG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKKyAgICAgICAg
QVNTRVJUKCFSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29udGFpbnMoTExJ
bnQ6OlJlZ2lzdGVyczo6cGNHUFIpKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUsIEFzc2VtYmx5SGVscGVy
czo6c2VsZWN0U2NyYXRjaEdQUihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikpOworCiAgICAgICAg
IC8vIFNpbmNlIHdlJ3JlIGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxG
cmFtZUZvckNhdGNoLgogICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIHZtLmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOwogICAgIH0KLSAgICAKKwor
ICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFja1Bv
aW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworCiAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1
bXBUYXJnZXQpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVn
VDIsIE9TUkV4aXRQdHJUYWcpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJD
bG9uZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2Rl
QmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAi
REZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgpAQCAtMjg2OSw3ICsyODcwLDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkZpbmRTdwogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Q
cm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFNpbXBs
ZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJs
b2NrLT5kZmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5pc0RvdWJs
ZSgpKTsKICAgICBkb3VibGUgYXNEb3VibGUgPSB2YWx1ZS5hc0RvdWJsZSgpOwpAQCAtMjg5MCw3
ICsyODkxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogCiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgU3RyaW5n
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBj
b2RlQmxvY2stPmRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICByZXR1
cm4gbGlua2VkVGFibGUuY3RpRm9yVmFsdWUoKnVubGlua2VkVGFibGUsIHN0ckltcGwpLmV4ZWN1
dGFibGVBZGRyZXNzPGNoYXIqPigpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTczMCw2ICs3MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBW
YWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlVGFnR1BSLCBjYWxsZWVQYXlsb2FkR1BSKTsKICAg
ICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAg
ICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0
LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwpAQCAtODg5LDcgKzg5MCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIAogICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nh
c2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIs
IEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAg
ICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBh
eWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEp
OwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgzNCw2ICs4MzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2Rl
KiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5Ojpp
bkdQUihjYWxsZWVHUFIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5h
cmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51
bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVt
UGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdz
OyArK2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZh
ckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTk4NSw3ICs5ODYsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBj
YWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFs
aWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xv
d0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVl
R1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURh
dGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0
YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5ODUsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2
YXRlTmEKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVy
cygpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2Rl
QmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlw
ZTo6UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBK
SVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2
YXRlTmFtZSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5
KGJhc2VHUFIpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1ZVJl
Z3MsIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJv
cGVydHlJc1N5bWJvbCA9IHRydWU7CiAKQEAgLTQ5MDUsNyArNDkwNSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNv
ZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2Rl
QmxvY2soKS0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRBZGRJQyogYWRkSUMg
PSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAg
IGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAg
ICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkOwogICAgIApA
QCAtNDk4OSw3ICs0OTg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3Vi
KE5vZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgo
KTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJs
b2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwot
ICAgIEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0
aFByb2ZpbGUpOworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9u
LmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24g
PSBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0
aW9uID0gb3BlcmF0aW9uVmFsdWVTdWI7CiAKQEAgLTU1NzEsNyArNTU3MSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU5lZ2F0ZSgKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5l
Q29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9y
aWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuY29k
ZUJsb2NrKCktPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTmVnSUMqIG5lZ0lD
ID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAg
ICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemU7
CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZTsK
ICAgICBjb21waWxlTWF0aElDKG5vZGUsIG5lZ0lDLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJl
cGF0Y2hpbmdGdW5jdGlvbik7CkBAIC01ODE1LDcgKzU4MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlVmFsdWVNdWwoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2Vt
YW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuY29kZUJsb2Nr
KCktPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9q
aXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRv
IHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7CiAgICAgYXV0
byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bDsKIApAQCAtMTQ3NzMs
NyArMTQ3NzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAg
IEdQUlJlZyBzY29wZVJlZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIG1faml0
LmNvZGVCbG9jaygpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CiAg
ICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDb21waWxlLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZv
aWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKIAogICAgIGlmICh2bS5zaG91
bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpIHsKICAgICAgICAgQjM6OlBDVG9Pcmln
aW5NYXAgb3JpZ2luTWFwID0gc3RhdGUucHJvYy0+cmVsZWFzZVBDVG9PcmlnaW5NYXAoKTsKLSAg
ICAgICAgY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBDVG9Db2Rl
T3JpZ2luTWFwPihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFw
KSksICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpKTsKKyAgICAgICAgc3RhdGUu
aml0Q29kZS0+Y29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2Rl
T3JpZ2luTWFwPihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFw
KSksICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpOwogICAgIH0KIAogICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGxhYmVsID0gc3RhdGUuZmluYWxpemVyLT5i
M0NvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHN0YXRlLnByb2MtPmNv
ZGUoKS5lbnRyeXBvaW50TGFiZWwoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKSVRDb2RlLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHB1YmxpYzoK
ICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpIG92ZXJyaWRlOwogICAgIHN0YXRpYyBw
dHJkaWZmX3QgY29tbW9uRGF0YU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKSVRD
b2RlLCBjb21tb24pOyB9CiAgICAgdm9pZCBzaHJpbmtUb0ZpdChjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImKSBvdmVycmlkZTsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdp
bk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgp
OyB9CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhIGNvbW1vbjsKICAgICBWZWN0b3I8T1NSRXhp
dD4gbV9vc3JFeGl0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MiwxNCArNTIsNiBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRl
KQogCiAgICAgZ3JhcGgucmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsKIAotI2lmIEFTU0VSVF9FTkFC
TEVECi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIp
Lm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpOwotICAgICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHko
KSk7Ci0gICAgfQotI2VuZGlmCi0KICAgICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuIE5vdGUg
dGhhdCB3ZSB1c2UgdGhpcyBlbnRyeXBvaW50IHRvdGFsbHkgZGlmZmVyZW50bHkKICAgICAvLyBk
ZXBlbmRpbmcgb24gd2hldGhlciB3ZSdyZSBkb2luZyBPU1IgZW50cnkgb3Igbm90LgogICAgIEND
YWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODksNiArODksNyBAQAogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiT3BlcmFu
ZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCisjaW5jbHVkZSAiUENUb0Nv
ZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgpA
QCAtMjMyMCw2ICsyMzIxLDE4IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbXBpbGVCaW5hcnlNYXRo
SUM8SklUU3ViR2VuZXJhdG9yPihhcml0aFByb2ZpbGUsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9u
UmVwYXRjaGluZ0Z1bmN0aW9uKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxH
ZW5lcmF0b3IsIEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklU
QWRkSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9m
aWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUQWRkSUMocHJvZmlsZSk7IH0KKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTXVsR2VuZXJhdG9yPjo6dmFs
dWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRNdWxJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0
YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5h
ZGRKSVRNdWxJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJh
dG9yLCBKSVROZWdHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVE5lZ0lD
KiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIFVuYXJ5QXJpdGhQcm9maWxlKiBw
cm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUTmVnSUMocHJvZmlsZSk7IH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUU3ViR2VuZXJhdG9yPjo6dmFsdWU+Ojp0
eXBlPgorICAgIHN0YXRpYyBKSVRTdWJJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29t
bW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRT
dWJJQyhwcm9maWxlKTsgfQorCiAgICAgdm9pZCBjb21waWxlVmFsdWVNdWwoKQogICAgIHsKICAg
ICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKQEAgLTIzOTEsNyArMjQwNCw3IEBAIHByaXZhdGU6CiAj
ZW5kaWYKIAogICAgICAgICAgICAgICAgIEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+OjpjcmVhdGUoKTsK
LSAgICAgICAgICAgICAgICBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBqaXQu
Y29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSk7CisgICAgICAg
ICAgICAgICAgSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gYWRkTWF0aElDPEdl
bmVyYXRvcj4oc3RhdGUtPmppdENvZGUtPmNvbW1vbiwgYXJpdGhQcm9maWxlKTsKICAgICAgICAg
ICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKEpTVmFsdWVSZWdzKHBhcmFt
c1swXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIHBhcmFtcy5ncFNjcmF0
Y2goMCkpOwogCiAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gZmFs
c2U7CkBAIC0yNTAwLDcgKzI1MTMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAgICAgICAg
ICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBC
b3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgSklU
QmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0
aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgICAgICBKSVRCaW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gYWRkTWF0aElDPEdlbmVyYXRvcj4oc3RhdGUtPmpp
dENvZGUtPmNvbW1vbiwgYXJpdGhQcm9maWxlKTsKICAgICAgICAgICAgICAgICBtYXRoSUMtPm1f
Z2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIEpTVmFsdWVS
ZWdzKHBhcmFtc1swXS5ncHIoKSksCiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHBh
cmFtc1sxXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBhcmFtc1syXS5ncHIoKSksIHBhcmFtcy5mcFNj
cmF0Y2goMCksCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mcFNjcmF0Y2goMSksIHBhcmFt
cy5ncFNjcmF0Y2goMCkpOwpAQCAtNDMxNyw3ICs0MzMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExK
SVQpID8gcGFyYW1zLmdwU2NyYXRjaCgwKSA6IEludmFsaWRHUFJSZWc7CiAKICAgICAgICAgICAg
IGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVFB1dEJ5VmFsR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAg
ICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50
aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLAorICAgICAgICAg
ICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmln
aW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLAogICAgICAgICAg
ICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFs
aWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKIAogICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5m
bygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKQEAgLTEwMjg1LDYgKzEwMjk4LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtUGFzc2VkQXJn
czsgaSA8IG51bUFsbG9jYXRlZEFyZ3M7ICsraSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLmFyZ3MuYXBwZW5kKFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVk
KCkpKTsKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51
bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRl
cnMgPSBqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAg
ICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKHNlbWFudGlj
Tm9kZU9yaWdpbik7CkBAIC0xMDQ0MywxMyArMTA0NTcsMTQgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQocGFyYW1zWzEgKyBpXS5yZWNvdmVy
eUZvckpTVmFsdWUoKSk7CiAKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRB
cmdzID0gbnVtQXJnczsKKyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJz
ID0gaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5j
b2RlQmxvY2soKSk7CiAKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
byA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4pOwogICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGws
IEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFs
aWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChq
aXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAg
ICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwo
KTsKICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwNzkyLDcgKzEwODA3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChp
c1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVn
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUklu
Zm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFp
bENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtMTEwNzMsNyArMTEwODgs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xv
d1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAg
ICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgg
PSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAs
IEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBq
aXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0
LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3Bw
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMywyOCArNDEzLDE2IEBAIHN0YXRp
YyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAogICAgIFJlZ2lzdGVyU2V0IGFs
bEZUTENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmZ0bENhbGxlZVNhdmVSZWdpc3RlcnMoKTsK
ICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYmFzZWxpbmVDYWxsZWVTYXZlcyA9IGJh
c2VsaW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqIHZtQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0
ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgdm1DYWxsZWVTYXZlc1RvU2tpcCA9IFJlZ2lz
dGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxl
cigpKSB7Ci0gICAgICAgIGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBHUFJJbmZvOjpy
ZWdUMSk7Ci0gICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoRW50
cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgR1BSSW5mbzo6cmVn
VDEpOwotICAgIH0KIAogICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJl
Zzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CiAgICAgICAgIGlmICghYWxsRlRMQ2FsbGVl
U2F2ZXMuZ2V0KHJlZykpIHsKLSAgICAgICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxl
cigpKQotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2bUNhbGxlZVNhdmVzLT5maW5k
KHJlZykpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgdW5zaWdu
ZWQgdW53aW5kSW5kZXggPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKS0+aW5kZXhP
ZihyZWcpOwogICAgICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0KiBiYXNlbGluZVJlZ2lzdGVy
T2Zmc2V0ID0gYmFzZWxpbmVDYWxsZWVTYXZlcy0+ZmluZChyZWcpOwotICAgICAgICBSZWdpc3Rl
ckF0T2Zmc2V0KiB2bUNhbGxlZVNhdmUgPSBudWxscHRyOyAKLSAgICAgICAgaWYgKGV4aXQuaXNF
eGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgICAgICB2bUNhbGxlZVNhdmUgPSB2bUNhbGxlZVNh
dmVzLT5maW5kKHJlZyk7CiAKICAgICAgICAgaWYgKHJlZy5pc0dQUigpKSB7CiAgICAgICAgICAg
ICBHUFJSZWcgcmVnVG9Mb2FkID0gYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA/IEdQUkluZm86OnJl
Z1QwIDogcmVnLmdwcigpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVnVG9Mb2FkICE9
IEdQUkluZm86OnJlZ1QxKTsKIAogICAgICAgICAgICAgaWYgKHVud2luZEluZGV4ID09IFVJTlRf
TUFYKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIEZUTCBjb21waWxhdGlvbiBkaWRuJ3QgcHJl
c2VydmUgdGhpcyByZWdpc3Rlci4gVGhpcyBtZWFucyB0aGF0IGl0IGFsc28KQEAgLTQ1Miw4ICs0
NDAsNiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkCiAKICAgICAg
ICAgICAgIGlmIChiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQogICAgICAgICAgICAgICAgIGppdC5z
dG9yZTY0KHJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6
OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0LT5vZmZzZXQoKSkp
OwotICAgICAgICAgICAgaWYgKHZtQ2FsbGVlU2F2ZSAmJiAhdm1DYWxsZWVTYXZlc1RvU2tpcC5n
ZXQodm1DYWxsZWVTYXZlLT5yZWcoKSkpCi0gICAgICAgICAgICAgICAgaml0LnN0b3JlNjQocmVn
VG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVT
YXZlLT5vZmZzZXQoKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgRlBSUmVnIGZw
UmVnVG9Mb2FkID0gYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA/IEZQUkluZm86OmZwUmVnVDAgOiBy
ZWcuZnByKCk7CiAKQEAgLTQ2NCwxOSArNDUwLDkgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIo
Vk0mIHZtLCB1bnNpZ25lZAogCiAgICAgICAgICAgICBpZiAoYmFzZWxpbmVSZWdpc3Rlck9mZnNl
dCkKICAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoZnBSZWdUb0xvYWQsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgYmFz
ZWxpbmVSZWdpc3Rlck9mZnNldC0+b2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmICh2bUNhbGxl
ZVNhdmUgJiYgIXZtQ2FsbGVlU2F2ZXNUb1NraXAuZ2V0KHZtQ2FsbGVlU2F2ZS0+cmVnKCkpKQot
ICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShmcFJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7Ci0g
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZp
bmQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOwotICAgICAgICBqaXQuc3RvcmU2NChHUFJJ
bmZvOjpudW1iZXJUYWdSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKLQotICAgICAgICB2bUNhbGxlZVNhdmUg
PSB2bUNhbGxlZVNhdmVzLT5maW5kKEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIpOwotICAg
ICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwot
ICAgIH0KLQogICAgIHNpemVfdCBiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZl
cyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMo
KTsKIAogICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZl
Q2hlY2twb2ludCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01l
dGFkYXRhLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
TWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0MiwyOCBAQCBj
bGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJldHVybiBpZiBlbXB0
eT8KIAotICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcykKKyAgICAgICAg
ZGVmIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQorICAgICAg
ICAgICAgZmllbGROYW1lcy5tYXAgZG8gfGZpZWxkTmFtZXwKKyAgICAgICAgICAgICAgICAiI3tw
cmVmaXh9c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2Zp
ZWxkTmFtZVsxLi5dfSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV8je2Zp
ZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKKyAgICAgICAgZW5kCisK
KyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGZpZWxkTmFtZXMpCiAg
ICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAgICAgICBp
ZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9u
IHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsi
CisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMo
cHJlZml4ICsgJyAgICAnLCB0eXBlLCBmaWVsZE5hbWVzKX1cbiN7cHJlZml4fX07IgogICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19z
fSBtXyN7ZmllbGQudG9fc307IgorICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVs
ZC50b19zCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVzaChmaWVsZE5hbWUpCisg
ICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07
IgogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAg
ICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmll
bGRzKQorICAgICAgICBmaWVsZE5hbWVzID0gW10KKyAgICAgICAgcHJlZml4ID0gIiAgICAgICAg
IgorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKHByZWZpeCwgQGZpZWxkcywgZmllbGRO
YW1lcykKKyAgICAgICAgZmllbGRzID0gZmllbGRzICsgIlxuIiArIGdlbmVyYXRlT2Zmc2V0T2ZG
dW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQogCiAgICAgICAgIGluaXRzID0gbmlsCiAgICAg
ICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDYgKzM2NywyOCBAQCB2b2lkIEFzc2VtYmx5SGVs
cGVyczo6bG9hZFByb3BlcnR5KEdQUlJlCiAgICAgICAgIHJlc3VsdCk7CiB9CiAKK3ZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjpzdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2Jq
ZWN0LCBHUFJSZWcgb2Zmc2V0LCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBKdW1wIGlzSW5saW5l
ID0gYnJhbmNoMzIoTGVzc1RoYW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKG9iamVjdCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgbmVnMzIob2Zmc2V0KTsKKyAgICBzaWdu
RXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7CisgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsK
KyAgICAKKyAgICBpc0lubGluZS5saW5rKHRoaXMpOworICAgIGFkZFB0cigKKyAgICAgICAgVHJ1
c3RlZEltbTMyKAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEpTT2Jq
ZWN0KSkgLQorICAgICAgICAgICAgKHN0YXRpY19jYXN0PGludDMyX3Q+KGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSAtIDIpICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkpLAorICAgICAgICBvYmplY3QsIHNjcmF0Y2gpOworICAgIAorICAgIHJlYWR5LmxpbmsodGhp
cyk7CisgICAgCisgICAgc3RvcmVWYWx1ZSh2YWx1ZSwKKyAgICAgICAgQmFzZUluZGV4KHNjcmF0
Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSk7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9h
ZFN0cnVjdHVyZShWTSYgdm0sIFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJl
Z2lzdGVySUQgc2NyYXRjaCkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjk4LDggKzcyMCwx
MyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzCiAKIHZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9i
amVjdCksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5n
R2xvYmFsT2JqZWN0KHZtLCBpbmZvKTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRW
aXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8q
IGluZm8pCit7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7
CiAgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDggKzIzNCw5IEBAIHB1YmxpYzoKICNlbmRpZgog
ICAgIH0KICAgICAKLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBjbG9iYmVycyBvZmZzZXQuCisgICAg
Ly8gTm90ZSB0aGF0IHRoZXNlIGNsb2JiZXIgb2Zmc2V0LgogICAgIHZvaWQgbG9hZFByb3BlcnR5
KEdQUlJlZyBvYmplY3QsIEdQUlJlZyBvZmZzZXQsIEpTVmFsdWVSZWdzIHJlc3VsdCk7CisgICAg
dm9pZCBzdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJS
ZWcgb2Zmc2V0LCBHUFJSZWcgc2NyYXRjaCk7CiAKICAgICB2b2lkIG1vdmVWYWx1ZVJlZ3MoSlNW
YWx1ZVJlZ3Mgc3JjUmVncywgSlNWYWx1ZVJlZ3MgZGVzdFJlZ3MpCiAgICAgewpAQCAtMzc5LDE1
ICszODAsMjYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgdm9pZCBjb3B5Q2FsbGVl
U2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlG
cmFtZSwgR1BSUmVnIHNjcmF0Y2gpCisgICAgeworI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNf
UkVHSVNURVJTID4gMAorICAgICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCBzY3JhdGNoKTsK
KyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBs
KHNjcmF0Y2gpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOwor
ICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CisjZW5kaWYKKyAgICB9CisKICAgICB2b2lk
IGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUq
JiB0b3BFbnRyeUZyYW1lKQogICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lT
VEVSUyA+IDAKICAgICAgICAgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0g
eyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfTsKICAgICAgICAgR1BS
UmVnIHRlbXAxID0gdXNlZFJlZ2lzdGVycy5nZXRGcmVlR1BSKDApOwotICAgICAgICBsb2FkUHRy
KCZ0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh0ZW1wMSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZl
c1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKICNl
bHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKHRvcEVudHJ5RnJhbWUpOwogI2VuZGlmCiAgICAgfQogICAgIApAQCAtMTcyMCw2ICsx
NzMyLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVh
bENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAg
CiAgICAgdm9pZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1T
cGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9C
YXNlbGluZUpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQmFzZWxpbmVKSVRDb2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCisKKyNpbmNsdWRl
ICJKSVRNYXRoSUMuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1
cmVTdHViSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSklUQWRkSUMqIE1hdGhJQ0hvbGRl
cjo6YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJu
IG1fYWRkSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRNdWxJQyogTWF0aElDSG9sZGVyOjph
ZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9t
dWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVFN1YklDKiBNYXRoSUNIb2xkZXI6OmFkZEpJ
VFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1YklD
cy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUTmVnSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTmVn
SUMoVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJQ3MuYWRk
KGFyaXRoUHJvZmlsZSk7IH0KKwordm9pZCBNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyhNYXRo
SUNIb2xkZXImIG90aGVyKQoreworICAgIG1fYWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2FkZElD
cyk7CisgICAgbV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAgICBtX25lZ0lD
cyA9IFdURk1vdmUob3RoZXIubV9uZWdJQ3MpOworICAgIG1fc3ViSUNzID0gV1RGTW92ZShvdGhl
ci5tX3N1YklDcyk7Cit9CisKK0Jhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKENvZGVS
ZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlD
aGVjaykKKyAgICA6IERpcmVjdEpJVENvZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICwgTWF0aElDSG9sZGVyKCkKK3sgfQorCitCYXNl
bGluZUpJVENvZGU6On5CYXNlbGluZUpJVENvZGUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2Fs
bExpbmtJbmZvLmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNz
IFVuYXJ5QXJpdGhQcm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87Citz
dHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3Mg
TWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xk
ZXImIG90aGVyKTsKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxl
Kik7CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAg
IEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJ
QyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworcHJpdmF0ZToKKyAgICBCYWc8
SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFn
PEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKwor
Y2xhc3MgSklUQ29uc3RhbnRQb29sIHsKK3B1YmxpYzoKKyAgICB1c2luZyBDb25zdGFudCA9IHVu
c2lnbmVkOworCisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIEdsb2Jh
bE9iamVjdCwKKyAgICAgICAgQ2FsbExpbmtJbmZvLAorICAgICAgICBTdHJ1Y3R1cmVTdHViSW5m
bywKKyAgICAgICAgRnVuY3Rpb25EZWNsLAorICAgICAgICBGdW5jdGlvbkV4cHIsCisgICAgfTsK
KworICAgIHN0cnVjdCBWYWx1ZSB7CisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgUGFja2Vk
UHRyPHZvaWQ+IHBheWxvYWQ7CisgICAgfTsKKworICAgIEpJVENvbnN0YW50UG9vbCgpID0gZGVm
YXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsK
KyAgICBKSVRDb25zdGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZh
dWx0OworCisgICAgQ29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxw
dHIpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXplKCk7
CisgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX2NvbnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1ZSBhdChzaXplX3QgaSkgY29u
c3QgeyByZXR1cm4gbV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFs
dWU+IG1fY29uc3RhbnRzOworfTsKKworCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMg
RGlyZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxp
bmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiB3aXRoQXJpdHlDaGVjayk7CisgICAgfkJhc2VsaW5lSklUQ29kZSgpIG92ZXJyaWRlOwor
ICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0
dXJuIG1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KKworICAgIEJhZzxVbmxpbmtlZENhbGxM
aW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENh
bGxMaW5rSW5mb3M7CisgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5r
ZWRTdHViSW5mb3M7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1
bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXM7CisgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisgICAgSklUQ29uc3Rh
bnRQb29sIG1fY29uc3RhbnRQb29sOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdp
bk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKKyAgICBib29sIG1faXNTaGFyZWFibGUgeyB0cnVl
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNvbnN0
CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUoKQogewotICAg
IENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKCk7
CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJl
YWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxh
dGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRl
bGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblBy
b2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhl
bHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpT
VmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAg
ICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNj
b3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2sp
LCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5k
ZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJz
OjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwg
R1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93
Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAgLTcyLDYgKzYy
LDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEKICAgICBzdG9y
ZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikpOwogfQogCisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRv
d0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0
aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNr
ZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dD
aGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgc3RvcmVW
YWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFk
b3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9yZVB0cihzY29wZSwgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0
ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBz
Y29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0
aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKK3ZvaWQgQ0Nh
bGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0
LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxT
aXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVkTGFtYmRhPHZv
aWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKIHsK
ICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
Q2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ND
YWxsSGVscGVycy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDE0IEBAIHB1
YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJlZ2lz
dGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Agb2YKICAgICAv
LyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxvZ1NoYWRvd0No
aWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDEs
IEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJS
ZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2Rl
QmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1w
bChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3Bl
LCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsK
K3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFk
b3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1Q
dHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworICAgIHZvaWQgbG9n
U2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3Mg
dGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRoZSBQ
YWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2b2lkIGVuc3Vy
ZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2Ny
YXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29kZUJs
b2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVE
YXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVn
aXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07Ci0gICAgY29u
c3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVCbG9j
ay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBy
ZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMyBAQCBwdWJsaWM6CiAgICAg
VmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWduZWQgbnVtTG9jYWxzIHsgVUlO
VF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAgICB1
bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8gT24gb3VyIG1hY2hpbmUgZnJh
bWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1hcDxWYWx1ZVJlY292ZXJ5PiBy
ZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVyIHsgSW52YWxpZEdQUlJlZyB9
OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7CisgICAg
dm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
KTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShyZXZpc2lvbiAy
ODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENhbGxGcmFtZVNodWZmbGVyOjpD
YWxsRnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkKICAgICAsIG1fb2xkRnJhbWUo
ZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsIG51bGxw
dHIpCiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBDYWxsRnJhbWU6OmhlYWRl
clNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAgICAgICArIHJvdW5kQXJndW1lbnRD
b3VudFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpCisgICAg
LCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMg
KyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5udW1QYXJhbWV0ZXJzKSkKICAg
ICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVy
cwogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Muc2l6
ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUgLSBtX2FsaWdu
ZWRPbGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6YWxs
UmVnaXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNzZWRBcmdzKQor
ICAgICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykKIHsKICAgICAvLyBXZSBh
cmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAgIGZvciAodW5zaWduZWQg
aSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3ICs0MjEsNyBA
QCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhCiAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFtZUJhc2UpOwog
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9CiAgICAgICAgIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fbmV3RnJhbWVCYXNlLAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBDYWxsRnJhbWU6
OmhlYWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5hbmQz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudFJlZ2lzdGVycygp
KSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVCYXNlLCBtX25ld0ZyYW1lQmFz
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
ci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBAQCBwdWJsaWM6
CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAgICAgIGRhdGEubnVtTG9j
YWxzID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2VkQXJncyA9IG1fbnVtUGFz
c2VkQXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9udW1QYXJhbWV0ZXJzOwog
ICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVT
bG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJn
Q291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytp
KQpAQCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwZXJmb3JtU2FmZVdyaXRl
cygpOwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07Cisg
ICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVy
bkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJ
bmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJbnRlcmZhY2VKSVQoJnZt
LCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51bGxwdHIpCiAgICAgLCBt
X2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8g
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwgbV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkK
ICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAgIG1fcHJvZmlsZWRDb2Rl
QmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+
dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTkwLDggKzkzLDggQEAg
dm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNraXBPcHRpbWl6ZS5hcHBl
bmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291
bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFk
ZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lwT3B0aW1pemUuYXBwZW5k
KGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50
ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVn
aXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpA
QCAtMTEzLDI4ICsxMTYsNDAgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50
U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhz
ZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KQordm9pZCBK
SVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCkKIHsKKyAg
ICBhdXRvIG9rID0gYnJhbmNoVGVzdFB0cihaZXJvLCBwb2ludGVyVG9TZXQpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50
U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAg
ICBvay5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCit2b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFyUmVhZE9ubHlXYXRjaHBv
aW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
KyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChz
Y3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJSZWFkT25seVdhdGNocG9pbnQpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRj
aEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zm
c2V0KCkKIHsKLSAgICBpZiAoIUFTU0VSVF9FTkFCTEVEKQorICAgIC8vIE9PUFMKKyAgICBpZiAo
IUFTU0VSVF9FTkFCTEVEICYmIGZhbHNlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBKdW1wIG9r
ID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGJy
ZWFrcG9pbnQoKTsKICAgICBvay5saW5rKHRoaXMpOwogfQogCit2b2lkIEpJVDo6cmVzZXRTUCgp
Cit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwor
fQorCiAjZGVmaW5lIE5FWFRfT1BDT0RFKG5hbWUpIFwKICAgICBtX2J5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlv
bi0+c2l6ZSgpKTsgXAogICAgIGJyZWFrOwpAQCAtMTgxLDYxICsxOTYsNDQgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1YwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
CiB9CiAKK3ZvaWQgSklUOjplbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVn
IHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2Rl
VHlwZSgpID09IEZ1bmN0aW9uQ29kZSk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZXN1bHQsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJlc3Vs
dCk7CisgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHQs
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVj
dXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHJlc3VsdCk7CisgICAgaGFzRXhl
Y3V0YWJsZS5saW5rKHRoaXMpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0
cnVjdG9yKCkpCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSksIHJlc3VsdCk7CisgICAgZWxz
ZQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9m
ZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpKSwgcmVzdWx0KTsKKworICAgIGxvYWRQdHIoQWRkcmVz
cyhyZXN1bHQsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6Om9mZnNldE9mQ29kZUJsb2NrKCkp
LCByZXN1bHQpOworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZXN1bHQsIENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayk7CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHByb2JlRGVidWco
Wz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAg
fSk7CisjZW5kaWYKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogewog
ICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5n
ICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAq
bV9wcm9maWxlZENvZGVCbG9jaywgIlxuIik7CiAgICAgCiAgICAgaml0QXNzZXJ0VGFnc0luUGxh
Y2UoKTsKICAgICBqaXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgpOwogICAgIAotICAgIGF1dG8m
IGluc3RydWN0aW9ucyA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKLSAgICB1bnNpZ25l
ZCBpbnN0cnVjdGlvbkNvdW50ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsK
KyAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKTsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogCiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7
CiAKLSAgICBWTSYgdm0gPSBtX2NvZGVCbG9jay0+dm0oKTsKICAgICBCeXRlY29kZUluZGV4IHN0
YXJ0Qnl0ZWNvZGVJbmRleCgwKTsKLSAgICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4
ICYmIChtX2NvZGVCbG9jay0+aW5oZXJpdHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29k
ZUJsb2NrLT5pbmhlcml0czxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7Ci0gICAgICAg
IC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgb3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0ZSBQ
cm9ncmFtQ29kZUJsb2NrJ3MgZXhhY3RseSBvbmNlLgotICAgICAgICAvLyBUaGlzIG9wdGltaXph
dGlvbiB3b3VsZCBiZSBpbnZhbGlkIG90aGVyd2lzZS4gV2hlbiB0aGUgTExJbnQgZGV0ZXJtaW5l
cyBpdCB3YW50cyB0bwotICAgICAgICAvLyBkbyBPU1IgZW50cnkgaW50byB0aGUgYmFzZWxpbmUg
SklUIGluIGEgbG9vcCwgaXQgd2lsbCBwYXNzIGluIHRoZSBieXRlY29kZSBvZmZzZXQgaXQKLSAg
ICAgICAgLy8gd2FzIGV4ZWN1dGluZyBhdCB3aGVuIGl0IGtpY2tlZCBvZmYgb3VyIGNvbXBpbGF0
aW9uLiBXZSBvbmx5IG5lZWQgdG8gY29tcGlsZSBjb2RlIGZvcgotICAgICAgICAvLyBhbnl0aGlu
ZyByZWFjaGFibGUgZnJvbSB0aGF0IGJ5dGVjb2RlIG9mZnNldC4KLQotICAgICAgICAvLyBXZSBv
bmx5IGJvdGhlciBidWlsZGluZyB0aGUgYnl0ZWNvZGUgZ3JhcGggaWYgaXQgY291bGQgc2F2ZSB0
aW1lIGFuZCBleGVjdXRhYmxlCi0gICAgICAgIC8vIG1lbW9yeS4gV2UgcGljayBhbiBhcmJpdHJh
cnkgb2Zmc2V0IHdoZXJlIHdlIGRlZW0gdGhpcyBpcyBwcm9maXRhYmxlLgotICAgICAgICBpZiAo
bV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4Lm9mZnNldCgpID49IDIwMCkgewotICAgICAgICAg
ICAgLy8gQXMgYSBzaW1wbGlmaWNhdGlvbiwgd2UgZG9uJ3QgZmluZCBhbGwgYnl0ZWNvZGUgcmFu
Z2VzIHRoYXQgYXJlIHVucmVhY2hhYmxlLgotICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2UganVz
dCBmaW5kIHRoZSBtaW5pbXVtIGJ5dGVjb2RlIG9mZnNldCB0aGF0IGlzIHJlYWNoYWJsZSwgYW5k
Ci0gICAgICAgICAgICAvLyBjb21waWxlIGNvZGUgZnJvbSB0aGF0IGJ5dGVjb2RlIG9mZnNldCBv
bndhcmRzLgotCi0gICAgICAgICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKG1fY29kZUJsb2NrLCBt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOwotICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Js
b2NrKiBibG9jayA9IGdyYXBoLmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9sb29w
T1NSRW50cnlCeXRlY29kZUluZGV4Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGJsb2NrKTsKLQotICAgICAgICAgICAgR3JhcGhOb2RlV29ya2xpc3Q8Qnl0ZWNvZGVCYXNp
Y0Jsb2NrKj4gd29ya2xpc3Q7Ci0gICAgICAgICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBCeXRl
Y29kZUluZGV4KCk7Ci0gICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKTsKLQotICAgICAg
ICAgICAgd2hpbGUgKEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkg
ewotICAgICAgICAgICAgICAgIHN0YXJ0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoc3Rk
OjptaW4oc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpLCBibG9jay0+bGVhZGVyT2Zmc2V0KCkp
KTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4IDogYmxvY2st
PnN1Y2Nlc3NvcnMoKSkKLSAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaCgmZ3JhcGhb
c3VjY2Vzc29ySW5kZXhdKTsKLQotICAgICAgICAgICAgICAgIC8vIEFsc28gYWRkIGNhdGNoIGJs
b2NrcyBmb3IgYnl0ZWNvZGVzIHRoYXQgdGhyb3cuCi0gICAgICAgICAgICAgICAgaWYgKG1fY29k
ZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5sZWFkZXJPZmZzZXQoKTsg
Ynl0ZWNvZGVPZmZzZXQgPCBibG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBibG9jay0+dG90YWxMZW5n
dGgoKTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0
cnVjdGlvbnMuYXQoYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGF1dG8qIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoQnl0
ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdvcmtsaXN0LnB1c2goZ3JhcGguZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGhhbmRs
ZXItPnRhcmdldCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZU9mZnNldCAr
PSBpbnN0cnVjdGlvbi0+c2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQogCiAgICAgbV9ieXRlY29k
ZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0
ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3Vu
dDsgKSB7CkBAIC0yNzgsMTIgKzI3NiwxNSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpCiAKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5l
SklURXhlY3V0aW9uKCkpKSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
Y29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBj
dHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxs
RnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBb
IiwgYnl0ZWNvZGVPZmZzZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwg
UmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0KIAorICAgICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2F0Y2gpCisgICAgICAg
ICAgICBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKKwogICAgICAgICBzd2l0Y2ggKG9wY29k
ZUlEKSB7CiAgICAgICAgIERFRklORV9TTE9XX09QKGxlc3MpCiAgICAgICAgIERFRklORV9TTE9X
X09QKGxlc3NlcSkKQEAgLTUyNyw3ICs1MjgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJ
bmRleDsKIAotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7Cisg
ICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAg
ICAgICAKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0
YUxvZ0xuKCJCYXNlbGluZSBKSVQgZW1pdHRpbmcgc2xvdyBjb2RlIGZvciAiLCBtX2J5dGVjb2Rl
SW5kZXgsICIgYXQgb2Zmc2V0ICIsIChsb25nKWRlYnVnT2Zmc2V0KCkpOwpAQCAtNTQ1LDggKzU0
Niw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKICAgICAg
ICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAg
ICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJs
b2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0
LCAiXSBTTE9XICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihj
dHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0K
QEAgLTYwMyw3ICs2MDQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX2RlbF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X3N1YikKLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisjaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9mcm9tX3Njb3BlKQogI2VuZGlm
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9wdXRfdG9fc2NvcGUpCkBAIC02NzQsNTUg
KzY3NSw1NSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9
CiAKK3ZvaWQgSklUOjplbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lz
dGVycygpCit7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0
T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21ldGFkYXRhR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29uc3RhbnRQ
b29sKCkpLCBzX2NvbnN0YW50c0dQUik7Cit9CisKK3ZvaWQgSklUOjplbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCkKK3sKKyAgICBCYXNlOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3Rl
ckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisK
IHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9u
RWZmb3J0IGVmZm9ydCkKIHsKLSAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fY29k
ZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZl
bCA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOwogICAgIHN3aXRjaCAo
bGV2ZWwpIHsKICAgICBjYXNlIERGRzo6Q2Fubm90Q29tcGlsZToKICAgICAgICAgbV9jYW5CZU9w
dGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFs
c2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFu
ZElubGluZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IHRydWU7Ci0gICAgICAgIG1fY2Fu
QmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxp
bmcgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgCi0gICAg
c3dpdGNoIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewotICAgIGNhc2UgR2xvYmFsQ29kZToK
LSAgICBjYXNlIE1vZHVsZUNvZGU6Ci0gICAgY2FzZSBFdmFsQ29kZToKLSAgICAgICAgbV9jb2Rl
QmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkg
c2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwu
Ci0gICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRpb24uCi0gICAgICAgIG1f
Y29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUobGV2ZWwpICYm
IERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbihtX2NvZGVCbG9jayk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KIAotICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBU
YWJsZXMoKSB8fCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZXMoKSkgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2Nr
LT5tX2xvY2spOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0
Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShs
b2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4o
bV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpOwotICAgICAg
ICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVz
KCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV9jb2Rl
QmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOworICAgIGlm
IChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygp
IHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGVzKCkpIHsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N3aXRjaEp1bXBUYWJsZXMg
PSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJl
ck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpOworICAgICAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAg
ICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBU
YWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1
bXBUYWJsZXMoKSk7CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNh
c3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlz
YXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpKSkKLSAgICAgICAgbV9kaXNhc3NlbWJsZXIg
PSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9jb2RlQmxvY2spOworICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpIHsK
KyAgICAgICAgLy8gRklYTUU6IGJ1aWxkIGEgZGlzYXNzZW1ibGVyIG9mZiBvZiBVbmxpbmtlZENv
ZGVCbG9jay4KKyAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2Vt
Ymxlcj4obV9wcm9maWxlZENvZGVCbG9jayk7CisgICAgfQogICAgIGlmIChVTkxJS0VMWShtX3Zt
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpKSB7CisgICAgICAgIC8vIEZJWE1FOiBidWlsZCBwcm9m
aWxlciBkaXNhc3NlbWJsZXIgb2ZmIFVubGlua2VkQ29kZUJsb2NrLgogICAgICAgICBtX2NvbXBp
bGF0aW9uID0gYWRvcHRSZWYoCiAgICAgICAgICAgICBuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9u
KAotICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0
ZWNvZGVzRm9yKG1fY29kZUJsb2NrKSwKKyAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX3Byb2ZpbGVkQ29kZUJsb2NrKSwKICAg
ICAgICAgICAgICAgICBQcm9maWxlcjo6QmFzZWxpbmUpKTsKLSAgICAgICAgbV9jb21waWxhdGlv
bi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9j
b2RlQmxvY2spOworICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2Rlcygq
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICB9
CiAgICAgCiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgp
LCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpKTsKQEAgLTc0MiwxMSArNzQzLDEyIEBAIHZv
aWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgbm9wKCk7CiAK
ICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRl
cihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpCisgICAgICAgIGVtaXRQ
dXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSgpOwogCiAgICAgTGFiZWwgYmVnaW5MYWJlbCh0
aGlzKTsKIAotICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGludCBmcmFtZVRvcE9mZnNldCA9
IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXplID0gLWZyYW1lVG9wT2Zmc2V0OwogICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVUb3BPZmZzZXQpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
cmVnVDEpOwogICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CkBAIC03NTcsMTYgKzc1OSwyMCBA
QCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgbW92ZShyZWdU
MSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7CiAKLSAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdFNhdmVDYWxsZWVTYXZl
c0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOwogICAgIGVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CisgICAgZW1p
dE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKIAotICAgIGlm
IChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKKyAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAg
QVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQg
PCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgIGlm
IChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0
cnVjdG9yKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID4gMSkpIHsK
KyAgICAgICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jaywgcmVnVDIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBD
b2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBGaXhlZFZlY3RvcjxW
YWx1ZVByb2ZpbGU+OjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlZ1QyKTsKKworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV91bmxpbmtlZENvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYg
dGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdhbnQgdG8gcHV0IGluIGEgZHVtbXkgcHJv
ZmlsaW5nIHNpdGUgKHRvCiAgICAgICAgICAgICAgICAgLy8ga2VlcCB0aGluZ3MgY29uc2lzdGVu
dCkgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gcmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4K
LSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJn
dW1lbnQpCisgICAgICAgICAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKSAmJiAhYXJndW1lbnQpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVk
aW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwog
I2lmIFVTRShKU1ZBTFVFNjQpCkBAIC03NzcsMTIgKzc4MywxMiBAQCB2b2lkIEpJVDo6Y29tcGls
ZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRp
ZgotICAgICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobV9jb2RlQmxvY2stPnZh
bHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAg
ICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdzLCBBZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNp
emVvZihWYWx1ZVByb2ZpbGUpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBSRUxFQVNFX0FT
U0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIFJFTEVB
U0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkp
KTsKIAogICAgIGlmIChVTkxJS0VMWShzaXplTWFya2VyKSkKICAgICAgICAgbV92bS0+aml0U2l6
ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92ZSgqc2l6ZU1hcmtlciksICp0aGlzKTsKQEAgLTc5
OSwyNCArODA1LDI3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4K
ICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3Rh
dGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwotICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tP
bkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgbV9jb2RlQmxvY2sp
OworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jaywgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4
Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgcmVnVDApOwogCiAgICAg
Ly8gSWYgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGlzIDEsIHdlIG5ldmVyIHJlcXVpcmUgYXJp
dHkgZml4dXAuCi0gICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBtX2NvZGVCbG9jay0+bV9u
dW1QYXJhbWV0ZXJzICE9IDE7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1
bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKKyAgICBib29sIHJlcXVpcmVzQXJp
dHlGaXh1cCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAhPSAxOworICAg
IGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBy
ZXF1aXJlc0FyaXR5Rml4dXApIHsKICAgICAgICAgbV9hcml0eUNoZWNrID0gbGFiZWwoKTsKLSAg
ICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgJm1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5
c0JlSW5saW5lZCk7CisKICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAg
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spOworICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUocmVnVDAp
OworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkpKTsKIAogICAgICAgICBsb2FkMzIo
cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJl
Z1QxKTsKLSAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMy
KG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7
CisgICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhp
cyk7CiAKICAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKIAogICAg
ICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX2NvZGVCbG9jay0+aXNDb25zdHJ1
Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0
eUNoZWNrLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50
R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2Vw
dGlvbihtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25z
dHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIGFyZ3VtZW50R1BSMCk7
CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwpAQCAtODM5LDcgKzg0OCw3IEBAIHZvaWQg
SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgbV9kaXNhc3NlbWJs
ZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRl
ci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENv
ZGVPcmlnaW4oKSk7CiAKLSAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1
ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CisgICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlx
dWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX3VubGlua2VkQ29kZUJs
b2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CiAgICAgbGlu
aygpOwogfQogCkBAIC04NTgsOCArODY3LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICBz
d2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpJbW1lZGlh
dGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXI6IHsKLSAgICAgICAgICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAgICAgICAgIGxpbmtlZFRh
YmxlLm1fY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+
KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zm
c2V0cy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHVu
bGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzW2pdOwpAQCAtODcxLDggKzg4MCw4IEBAIHZvaWQg
SklUOjpsaW5rKCkKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpTdHJp
bmc6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBj
b25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRD
b2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
ICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8gY3RpRGVmYXVsdCA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0
ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgbG9jYXRp
b24gOiB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUudmFsdWVzKCkpIHsKICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsb2NhdGlvbi5tX2JyYW5jaE9mZnNldDsKQEAgLTkwNiwz
MiArOTE1LDM1IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsocmVjb3JkLmZyb20sIHJlY29yZC5jYWxsZWUpOwogICAgIH0KIAotICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1fZ2V0QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVz
KG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1fcHV0QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyht
X3B1dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVs
QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5VmFs
cywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeUlkcywgcGF0
Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeVZhbHMsIHBhdGNoQnVm
ZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNlT2ZzLCBwYXRjaEJ1ZmZl
cik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgcGF0
Y2hCdWZmZXIpOworICAgIGF1dG8gZmluYWxpemVJQ3MgPSBbJl0gKGF1dG8mIGdlbmVyYXRvcnMp
IHsKKyAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5lcmF0b3JzKSB7CisgICAgICAgICAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklU
U3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oZ2VuLm1fZG9uZSk7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zbG93UGF0aEJlZ2luKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5
VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkc1dpdGhUaGlzKTsKKyAgICBmaW5hbGl6
ZUlDcyhtX3B1dEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5VmFscyk7CisgICAgZmlu
YWxpemVJQ3MobV9kZWxCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeVZhbHMpOworICAg
IGZpbmFsaXplSUNzKG1faW5CeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5VmFscyk7Cisg
ICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9mcyk7CisgICAgZmluYWxpemVJQ3MobV9wcml2YXRl
QnJhbmRBY2Nlc3Nlcyk7CiAKICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2Fs
bENvbXBpbGF0aW9uSW5mbykgewotICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGls
YXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAgICAgICAgaW5mby5zZXRDb2RlTG9jYXRpb25zKAot
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21w
aWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pKTsK
KyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLnVu
bGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBpbmZvLmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2Nh
dGlvbik7CiAgICAgfQogCi0gICAgewotICAgICAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2Rl
TWFwQnVpbGRlcjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5
dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7Ci0gICAg
ICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCi0gICAgICAgICAg
ICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVj
b2RlT2Zmc2V0XSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2Rl
TWFwKGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCkpOworICAgIEpJVENvZGVNYXBCdWlsZGVy
IGppdENvZGVNYXBCdWlsZGVyOworICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAw
OyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgewor
ICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCisgICAgICAgICAg
ICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCks
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVP
ZmZzZXRdKSk7CiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3Nl
bWJseSgpKSkgewpAQCAtOTQwLDI2ICs5NTIsMzggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIH0K
IAogICAgIGlmIChVTkxJS0VMWShtX2NvbXBpbGF0aW9uKSkgeworICAgICAgICAvLyBGSVhNRTog
c2hvdWxkIHdlIG1ha2UgdGhlIGJ5dGVjb2RlIHByb2ZpbGVyIGtub3cgYWJvdXQgVW5saW5rZWRD
b2RlQmxvY2s/CiAgICAgICAgIGlmIChPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJv
ZmlsZXIoKSkKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1f
Y29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsKLSAgICAgICAgbV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2NvZGVCbG9jaywgKm1fY29tcGlsYXRpb24p
OworICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1f
cHJvZmlsZWRDb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKICAgICB9CiAKICAgICBpZiAobV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCiAgICAgICAgIG1fcGNU
b0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpOwogICAgIAorICAgIC8vIEZJ
WE1FOiBNYWtlIGEgdmVyc2lvbiBvZiBDb2RlQmxvY2tXaXRoSklUVHlwZSB0aGF0IGtub3dzIGFi
b3V0IFVubGlua2VkQ29kZUJsb2NrLgogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0
ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0g
ICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0
aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAg
ICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRo
SklUVHlwZShtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEo
KSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhB
cml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5
Q2hlY2spOwotICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1
bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29k
ZSA9IGFkb3B0UmVmKCpuZXcgQmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2sp
KTsKKworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gV1RGTW92ZShtX3VubGlua2Vk
Q2FsbHMpOworICAgIG1faml0Q29kZS0+bV9ldmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9l
dmFsQ2FsbExpbmtJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0g
V1RGTW92ZShtX3VubGlua2VkU3R1YkluZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVt
cFRhYmxlcyA9IFdURk1vdmUobV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
KTsKKyAgICBtX2ppdENvZGUtPm1faml0Q29kZU1hcCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFs
aXplKCk7CisgICAgbV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNzKTsKKyAgICBtX2pp
dENvZGUtPm1fY29uc3RhbnRQb29sID0gV1RGTW92ZShtX2NvbnN0YW50UG9vbCk7CisgICAgbV9q
aXRDb2RlLT5tX2lzU2hhcmVhYmxlID0gbV9pc1NoYXJlYWJsZTsKIAogICAgIGlmIChKSVRJbnRl
cm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3Ig
JXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnko
KS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQo
KS51bnRhZ2dlZFB0cigpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBm
b3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2VkQ29kZUJsb2NrLCByZXN1bHQuZXhlY3V0
YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVt
b3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6
OmZpbmFsaXplT25NYWluVGhyZWFkKCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVP
bk1haW5UaHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
IWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTk2OCwyNSArOTkyLDE0IEBAIENvbXBpbGF0
aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVu
TWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJs
b2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmlu
ayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVt
YmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8mIGhh
bmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZlQ29k
ZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIu
dGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9Ci0KICAg
ICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9D
b2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX2pp
dENvZGUtPm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXAp
OwogCiAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5l
SklULT5hZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkp
IC8KLSAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
U2l6ZSgpKSk7CisgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CiAKLSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZSht
X2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxp
bmtlZEJhc2VsaW5lQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1
cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQpAQCAtOTk4LDExICsxMDExLDExIEBAIHNpemVf
dCBKSVQ6OmNvZGVTaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7
CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAg
IGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRM
aW5rV2l0aG91dEZpbmFsaXppbmcoZWZmb3J0KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5U
aHJlYWQoKTsKKyAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0K
IAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0Miwx
OCArMTA1NSwyOCBAQCB2b2lkIEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAg
ICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwg
IlByZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsK
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9j
YWxzKCkpID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVy
cygpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkp
KTsKIAogICAgIHJldHVybiByb3VuZExvY2FsUmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9m
ZnNldChjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9CiAKLWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZv
cihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50
Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBmcmFtZVJlZ2lzdGVyQ291
bnRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKworaW50IEpJVDo6c3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAg
cmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2Rl
QmxvY2spIC0gMSkub2Zmc2V0KCk7CiB9CiAKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZv
cihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKIEhhc2hNYXA8Q1N0cmlu
ZywgU2Vjb25kcz4gSklUOjpjb21waWxlVGltZVN0YXRzKCkKIHsKICAgICBIYXNoTWFwPENTdHJp
bmcsIFNlY29uZHM+IHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNp
b24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNiArMzcsNyBAQAogCiAjZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVh
bCwgZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklU
IE9mZnNldCBcIiVzXCIgc2hvdWxkIGJlICVkLCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRp
Y19jYXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCisjaW5j
bHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCkBAIC00
NCw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRT
aGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCisjaW5jbHVkZSAi
TExJbnREYXRhLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJV
bnVzZWRQb2ludGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsx
NTEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGls
YXRpb25JbmZvIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247Ci0gICAgICAgIENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOworICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyog
dW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
Y2FsbExpbmtJbmZvQ29uc3RhbnQ7CiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlS
ZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBK
SVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05N
RU5UIEpJVCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBK
SVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKICAgICAg
ICAgZnJpZW5kIGNsYXNzIEpJVFRodW5rczsKQEAgLTE3MSw2ICsxNzMsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2Ug
bWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgogICAgICAgICBzdGF0aWMg
Y29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCisgICAgICAg
IHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgIHB1YmxpYzoKICAgICAgICAgSklU
KFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMTc4
LDI4ICsxODIsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJu
ICpKU0ludGVyZmFjZUpJVDo6dm0oKTsgfQogCiAgICAgICAgIHZvaWQgY29tcGlsZUFuZExpbmtX
aXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCk7Ci0gICAgICAgIENvbXBpbGF0
aW9uUmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVz
dWx0IGZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayopOwogICAgICAgICBzaXplX3QgY29k
ZVNpemUoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVm
b3JlQ29tcGlsZSgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0
IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgw
KSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRl
Y29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBK
SVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGNvZGVCbG9j
aywgZWZmb3J0KTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJl
Z2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIGlu
dCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3Rh
dGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKik7CiAKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gY29tcGlsZVRp
bWVTdGF0cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU2Vjb25kcyB0b3Rh
bENvbXBpbGVUaW1lKCk7CiAKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19tZXRh
ZGF0YUdQUiA9IExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFI7CisgICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfY29uc3RhbnRzR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6
cGJHUFI7CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBh
c3MoKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7CiAgICAgICAgIHZv
aWQgcHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKICAgICAgICAgdm9pZCBsaW5rKCk7Ci0gICAg
ICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0
KTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiwg
SklUQ29tcGlsYXRpb25FZmZvcnQpOwogCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20g
SklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVu
ZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKQEAgLTIy
Myw2ICsyMzIsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogCisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkUHRyRnJv
bU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDMyRnJv
bU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDhGcm9t
TWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorICAg
ICAgICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlLCBjb25zdCBCeXRlY29kZSYsIHNp
emVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAg
ICAgICAgdm9pZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6
ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAg
ICAgICB2b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYs
IHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgbG9h
ZENvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CisgICAgcHJpdmF0ZToK
KyAgICAgICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9h
ZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKworICAgICAgICB2
b2lkIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVn
VDApOworCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQog
ICAgICAgICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFu
ZGxlcik7CkBAIC0yNTgsMTYgKzI5MywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rk
OjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFy
Z3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICAm
JiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9pZD4gY29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxM
aW5rSW5mb0NvbnN0YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAg
ICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxs
X3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAg
ICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwotICAgICAgICAsIHZvaWQ+IGNv
bXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisgICAgICAgICwgdm9p
ZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
LSAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxs
KGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9J
bmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwogICAgICAg
ICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtMjg3LDE0ICszMjIsMTUgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIg
b3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAg
IHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlND
ZWxsKiBvd25lcik7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIp
OwogCiAgICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxlIGlz
IGluIHJlZ1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8gc2Ny
YXRjaC4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKLSAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYs
IEdQUlJlZyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIC8vdm9p
ZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7CisgICAgICAg
IC8vdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdz
KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEdQUlJlZyk7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNv
ZGUmLCBKU1ZhbHVlUmVncyk7CiAjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNW
YWx1ZVJlZ3MpOwpAQCAtMzA1LDggKzM0MSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3By
b2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4KICAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpOwogCi0gICAgICAgIHZvaWQg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQ
cm9maWxlKiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5
UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2
b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRp
ZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7
CkBAIC01OTMsNyArNjMxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hl
Y2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjExLDcgKzY0OCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
ICNlbmRpZgogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNywxNCAr
NjY0LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNs
b3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhh
c1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVt
aXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAg
ICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQg
ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJl
Zyk7CisgICAgICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJl
ZyBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90
KTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjQ2LDcgKzY4Myw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRl
KFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBv
aW50ZXJUb1NldCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJS
ZWcgcG9pbnRlclRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNW
YWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAg
ICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJl
c3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAg
ICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRw
dHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAg
LTY1NSw2ICs2OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJ
bnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAK
KyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1Zh
bHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlz
T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC02NzYsMTMgKzcxNCwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsK
ICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3Bf
Z2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwotICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3Bl
R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1
dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1l
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKFZN
Jik7Ci0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBzX2hhbmRs
ZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYpOwpAQCAtNjk2LDMy
ICs3MzIsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZl
VHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8
IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJF
X0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8j
I3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VU
X0ZST01fU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNv
bnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRo
dW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIC8vIE1vZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNp
ZW50IHRvIGVtaXQgaW5saW5lIHRoYW4gdXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNv
bHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9y
ZXNvbHZlX3Njb3BlLgotICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2
ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQot
I2RlZmluZSBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0g
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jl
c29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9F
QUNIX1JFU09MVkVfVFlQRShERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVm
IERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNv
bHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKLQogICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZN
Jik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mKTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNv
bHZlX3Njb3BlR2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0
ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3Qg
Y2hhciogdGh1bmtOYW1lKTsKKwogICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBpdGVyKystPmZyb207CkBAIC03NjAsMTAgKzc4MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFj
a09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdChBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2Zp
bGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0g
ICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShNZXRhZGF0YSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRo
UHJvZmlsZShjb25zdCBCeXRlY29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBC
eXRlY29kZT4KKyAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVy
YXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1
bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpD
YWxsPgpAQCAtODIxLDIwICs4NDEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwg
dGFyZ2V0Lm9mZnNldCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0
eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRz
PE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25U
eXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBP
cGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBh
cmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBl
PihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3Vs
dCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAg
ICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5h
bWUgTWV0YWRhdGEsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAg
ICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNS
ZXN1bHQsIHZvaWQ+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYg
bWV0YWRhdGEsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4u
IGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYg
Ynl0ZWNvZGUsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4u
IGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RD
YWxsPE9wZXJhdGlvblR5cGU+KHRhcmdldCwgYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZSht
ZXRhZGF0YSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVz
dWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFy
Z0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOSwy
NSArOTM5LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAg
ICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0g
ICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0
aW1pemVkT3JJbmxpbmVkOyB9CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsg
cmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5C
ZU9wdGltaXplZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBv
ZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAg
ICAgICAvLyBpbiB3aGljaCBjYXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJv
b2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAg
ICAgICB2b2lkIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJz
KCk7CisKKyAgICAgICAgdm9pZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICAgICAg
c3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNv
bXB1dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRv
IGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRv
Ci0gICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgs
IHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUg
c2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAg
R2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVk
QXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKKworICAgICAgICB2b2lkIHJlc2V0U1AoKTsKIAogICAg
ICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtOTY0LDkgKzk4MSw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7
CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKLSAgICAgICAgSGFz
aE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7Ci0gICAgICAgIEhh
c2hNYXA8dWludDY0X3QsIEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9jb3BpZWRBcml0aFByb2ZpbGVz
OwotCiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwogICAgICAgICBKdW1wTGlz
dCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjazsKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCkBAIC0xMDAwLDExICsxMDE0LDI2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dlbmVy
YXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAogICAg
ICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXpl
ZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAg
IEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgICAgIFJl
ZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgICAgIENvZGVCbG9jayogbV9wcm9m
aWxlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1f
dW5saW5rZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisKKyAgICAgICAgTWF0aElDSG9sZGVyIG1f
bWF0aElDczsKKyAgICAgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisg
ICAgICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVjdENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAgICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5m
bz4gbV91bmxpbmtlZENhbGxzOworICAgICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxs
TGlua0luZm9zOworICAgICAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxp
bmtlZFN0dWJJbmZvczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3
aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAgICAgIHN0cnVjdCBOb3RBQ29kZUJsb2NrIHsg
fSBtX2NvZGVCbG9jazsKKworICAgICAgICBib29sIG1faXNTaGFyZWFibGUgeyB0cnVlIH07CiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5
ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAg
IGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIo
b3AyKSkgewogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMiwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwog
ICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTM3Miw3ICszNzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4K
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsK
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2FkKG9w
MSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJl
Z1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4IEBA
IHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVt
aXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAg
ICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9m
aWxlKTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVn
SUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIg
dG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2Fu
IGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFy
aXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0
KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBt
X21hdGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9N
YXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0
PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxp
bmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0
YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
c2NyYXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdz
KTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAg
ICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAg
LTEwMTUsMTAgKzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1h
dGhJQwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJv
ZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFBy
b2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
c2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFk
ZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1
NSwxMyArMTA2MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8
CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMt
PmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChh
cml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElD
KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1Jl
Z3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVu
Y3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWlu
dGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVO
QUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAt
MTEyMCwxMyArMTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0
aElDCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0
aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBp
ZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAo
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAg
ICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxl
ZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0
d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lz
ZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVn
cywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAK
ICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwo
KTsKQEAgLTExNjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0
cnVjdGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0
cjsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUg
PSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRU
eXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUu
bV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjIwLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigp
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVs
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+
KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgSklU
TXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAg
bV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAg
ICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4ICsx
MjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
LSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9m
aWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFy
aXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1
Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbChjb25zdCBPcENhbGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRl
clJlZ2lzdGVyLCByZWdUMSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJl
c3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSksIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFs
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CkBAIC0yNTksNyAr
MjU5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogCiAgICAg
ZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92
bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0
Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAg
ICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24g
PSBsYWJlbCgpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9p
bnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAt
MzQxLDcgKzM0MSw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4K
ICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykK
ICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzU0LDcgKzM1Myw3IEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5o
IgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50Lmgi
CkBAIC00NCw3ICs0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAg
LTUzLDE4ICs1NCwxOCBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBv
cF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAg
ICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJ
RCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGls
ZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3Bv
aW50KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSAtc3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29k
ZSwgY2hlY2twb2ludCkpOwogCisKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYg
c2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNl
dEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5
UHJvZmlsZUZvcihtZXRhZGF0YSwgY2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1
cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENh
bGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86
Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5T
dHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgs
NyArNzksNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxs
X3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwg
T3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVw
RnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVl
ID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9
IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRp
b25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9w
ZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlv
bihzaXplT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24s
IHJlZ1QwLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVt
aXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJl
Z1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
ICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNp
emVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQg
KzEwMywxNiBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAg
ICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7
CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJn
c0ZyYW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09m
ZnNldCwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVy
YXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zm
c2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8g
UHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMy
KGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsK
LSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAg
ICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsK
KyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0g
YnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVz
cyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkpKTsKICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlh
bGl6ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEzMSwxNSBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxF
dmFsKGNvbnN0IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29u
c3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRk
cmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0KLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
LSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9m
ZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZh
bHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOworICAgIHJlc2V0U1AoKTsK
IAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjIpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNhbGxFdmFsLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsK
KyAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJldHVyblZhbHVlR1BSKSk7CiAKICAgICBl
bWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiAKQEAgLTE0OCw3ICsxNTEsNyBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4o
KTsKLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZv
KENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0g
bV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAg
ICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAtMTU2LDQzICsxNTksNDYgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
IAogICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0
ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwg
cmVnVDApOwotICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhv
dXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAgIHJlc2V0U1AoKTsKIAogICAg
IGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5z
aWduZWQpCi17Citib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRD
YWxsTGlua0luZm8qLCB1bnNpZ25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkgewogICAg
IHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmRleCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BU
YWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9D
b25zdGFudCkKIHsKLSAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBz
aHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVE
YXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAg
c2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1
ZmZsZURhdGE+IHNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4o
KTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAg
ICBzaHVmZmxlRGF0YS0+bnVtUGFyYW1ldGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZv
OjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAg
ICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJl
Z2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwor
ICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVm
ZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAgICAg
ICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAogICAgICAgICAgICAgICAg
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1f
YXJndiwKICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwogICAgIH0KLSAgICBzaHVmZmxl
RGF0YS5jYWxsZWUgPQotICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZv
cm1hdEpTKTsKLSAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2Rl
QmxvY2spOwotICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAg
IHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZv
cm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdp
c3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAK
LSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhp
cywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0gewotICAg
ICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWls
Q2FsbCgpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOwor
ICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1
ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgfSk7
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKworICAgIHNodWZmbGVEYXRhLT5zaHJpbmtU
b0ZpdCgpOworICAgIGluZm8tPmZyYW1lU2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRh
KTsKKwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsK
ICAgICAKQEAgLTIxOCwxNCArMjI0LDI1IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVC
bG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIg
cmV0dXJuLgogICAgICovCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBp
ZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2st
PmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGNvbXBp
bGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKKworICAgIFVubGlua2VkQ2FsbExpbmtJbmZv
KiBpbmZvID0gbnVsbHB0cjsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25z
dGFudCA9IFVJTlRfTUFYOworICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKKyAg
ICAgICAgaW5mbyA9IG1fdW5saW5rZWRDYWxscy5hZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxs
TGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsKKworICAgICAgICBpbmZvQ29uc3RhbnQg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8s
IGluZm8pOworCisgICAgICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09
IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVu
ZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLnVubGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25z
dGFudCA9IGluZm9Db25zdGFudDsKKyAgICB9CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNv
ZGUsIGluZm9Db25zdGFudCk7CiAKICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAg
ICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVj
dGlvbik7Ci0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29k
ZUluZGV4KS5iaXRzKCk7CisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2Nh
dGlvbkJpdHMpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkgKyBUYWdPZmZzZXQpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBy
ZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNhbGxlZS4KQEAgLTIzNCwxNiArMjUxLDEyIEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxF
dmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fY2FsbENvbXBp
bGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVw
Q2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOwotICAgIG1f
Y2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBt
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGlu
Zm87Ci0KLSAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0lu
Zm9JbmRleCkpCisgICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExp
bmtJbmZvSW5kZXgsIGluZm9Db25zdGFudCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGxvYWRD
b25zdGFudChpbmZvQ29uc3RhbnQsIHJlZ1QyKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKSB7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZd
IHsKKyAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CiAgICAgICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93
KHJlZ1QyKTsKICAgICAgICAgfSk7CkBAIC0yNTMsMTQgKzI2NiwxMyBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1Qy
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IENh
bGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIpOwogICAg
IGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMp
OwogCiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9j
YXRpb24gPSBkb25lTG9jYXRpb247CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOworICAgIHJlc2V0U1AoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVj
b2RlKTsKIH0KQEAgLTI3MywyMSArMjg1LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJl
bCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50
LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsK
LSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5m
by0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0
YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlzLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdp
dGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgcmVz
ZXRTUCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zOTUsMTcgKzQwNiwzMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdU
MSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBP
U1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAg
ICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQpAQCAtNDE2LDEwICs0NDEsOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1Qw
OworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJ
Zk5vdENlbGwoaXRlcmF0b3JHUFIpKTsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90
T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBAIC00MzIsMTkgKzQ1NSwxNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRv
ckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihp
ZGVudCkucmF3Qml0cygpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIG1vdmUoaXRlcmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNv
ZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiAKICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmpl
Y3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JS
ZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BS
MCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00NTIsNyArNDczLDYgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlG
YXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lk
dGgoKSkgewogICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zh
c3RfbmFycm93OwpAQCAtNDcwLDUwICs0OTAsNzkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0
b3JfbmV4dChjb25zdCBJbgogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRo
aXMpOwotICAgIG9yOChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9u
TW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0
YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRl
cmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0
aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykp
LCByZWdUMCk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0
b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9u
TW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9w
SXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBh
ZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZh
bHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsK
LSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0g
cmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJz
dCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdpc3RlcjsKKyAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNl
OworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOworCisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgICAgICBS
ZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAg
IHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2
bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQ
UiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0g
ICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
dm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwor
CisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtl
ZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICByZXNldFNQKCk7IC8v
IFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVz
ZXQgU1AKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVl
UmVncyB7IGRvbmVHUFIgfSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hl
Y2twb2ludCgpOwogICAgIH0KIAotCiAgICAgewotICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBy
ZWdUMjsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CisgICAgICAgIFJlZ2lzdGVy
U2V0IHVzZWRSZWdpc3RlcnMoZG9uZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAgICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0
Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxv
Y2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxv
Y2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJh
dGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9
IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2Ny
YXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgZ2xvYmFsR1BSKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1vdmUo
aXRlckNhbGxSZXN1bHRHUFIsIGJhc2VHUFIpOwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFs
dWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCByZWdUNCwgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFt
ZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7
CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
ICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKwor
ICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NS
IGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgICAg
ICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgdmFsdWVH
UFIgfSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
dmFsdWVHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3ZhbHVlLCByZXN1bHRHUFIpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGlu
ayh0aGlzKTsKICAgICB9CkBAIC01MjcsNTkgKzU3Niw1NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0
b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAorICAgIGNvbnN0ZXhwciBH
UFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRD
bG9iYmVyUmVnaXN0ZXI7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
SXRlcmF0b3JOZXh0PigpOwogICAgIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVn
ID0gYnl0ZWNvZGUubV9kb25lOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1Qy
OwogCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAgIEp1bXBMaXN0IG5v
dE9iamVjdDsKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJl
c3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVy
Q2FsbFJlc3VsdEdQUikpOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZt
KCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCk7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgICAgIAogICAgICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBub3RPYmplY3QuYXBw
ZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0
LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCi0gICAgICAg
IENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUp
PihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJn
R1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkb25lVlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
aXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGRvbmVWUmVnLCByZWdUMSk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgcmVnVDApOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1
bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisKKyAg
ICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworCisg
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6cmVzdWx0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBkb25l
R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBp
dGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2lu
dChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRo
cm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKICAgICB9CiAKICAg
ICB7ICAgCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgICAgICBHUFJSZWcgaXRl
clJlc3VsdEdQUiA9IHJlZ1QwOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9
IHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAg
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAg
ICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJS
ZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5y
YXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOwor
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAgICAgfQotCiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiwxMSBAQAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOworCiBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIENv
bW1vbkRhdGE7CiBjbGFzcyBKSVRDb2RlOwpAQCAtMTU5LDEwICsxNjIsMTAgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAgICB7Ci0gICAg
ICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNlRGF0YUlD
SW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkBAIC0yMjMsNiArMjI2LDggQEAgcHVibGljOgog
CiAgICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVBdHRyaWJ1dGUgPT0g
U2hhcmVBdHRyaWJ1dGU6OlNoYXJlZDsgfQogCisgICAgdmlydHVhbCBQQ1RvQ29kZU9yaWdpbk1h
cCogcGNUb0NvZGVPcmlnaW5NYXAoKSB7IHJldHVybiBudWxscHRyOyB9CisKIHByaXZhdGU6CiAg
ICAgSklUVHlwZSBtX2ppdFR5cGU7CiAgICAgU2hhcmVBdHRyaWJ1dGUgbV9zaGFyZUF0dHJpYnV0
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25L
ZXkuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvbXBpbGF0aW9uS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCB2b2lk
IEpJVENvbXBpbGF0aW9uS2V5OjpkdW1wKFByaW50U3RyZWFtCiAgICAgICAgIG91dC5wcmludCgi
PGVtcHR5PiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG91dC5wcmludCgiKENvbXBp
bGUgb2YgIiwgKm1fcHJvZmlsZWRCbG9jaywgIiB3aXRoICIsIG1fbW9kZSwgIikiKTsKKyAgICBv
dXQucHJpbnQoIihDb21waWxlIG9mICIsIFJhd1BvaW50ZXIobV9jb2RlQmxvY2spLCAiIHdpdGgg
IiwgbV9tb2RlLCAiKSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNTcgKzMwLDU2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFz
cyBDb2RlQmxvY2s7Ci1jbGFzcyBDb2RlQmxvY2tTZXQ7CitjbGFzcyBKU0NlbGw7CiAKIGNsYXNz
IEpJVENvbXBpbGF0aW9uS2V5IHsKIHB1YmxpYzoKICAgICBKSVRDb21waWxhdGlvbktleSgpCi0g
ICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIpCisgICAgICAgIDogbV9jb2RlQmxvY2so
bnVsbHB0cikKICAgICAgICAgLCBtX21vZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29t
cGlsYXRpb24pCiAgICAgewogICAgIH0KICAgICAKICAgICBKSVRDb21waWxhdGlvbktleShXVEY6
Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51
bGxwdHIpCisgICAgICAgIDogbV9jb2RlQmxvY2sobnVsbHB0cikKICAgICAgICAgLCBtX21vZGUo
SklUQ29tcGlsYXRpb25Nb2RlOjpERkcpCiAgICAgewogICAgIH0KICAgICAKLSAgICBKSVRDb21w
aWxhdGlvbktleShDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBt
b2RlKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhwcm9maWxlZEJsb2NrKQorICAgIEpJVENv
bXBpbGF0aW9uS2V5KEpTQ2VsbCogcHJvZmlsZWRCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlIG1v
ZGUpCisgICAgICAgIDogbV9jb2RlQmxvY2socHJvZmlsZWRCbG9jaykKICAgICAgICAgLCBtX21v
ZGUobW9kZSkKICAgICB7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSA9PSBKSVRD
b21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuICFtX2Nv
ZGVCbG9jayAmJiBtX21vZGUgPT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRp
b247CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3Byb2ZpbGVkQmxvY2sgJiYgbV9tb2RlICE9IEpJ
VENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOworICAgICAgICByZXR1cm4gIW1f
Y29kZUJsb2NrICYmIG1fbW9kZSAhPSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxh
dGlvbjsKICAgICB9CiAgICAgCi0gICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9maWxlZEJsb2NrOyB9CiAgICAgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUo
KSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgSklUQ29tcGlsYXRpb25LZXkmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fcHJvZmlsZWRCbG9jayA9PSBvdGhlci5tX3Byb2ZpbGVkQmxvY2sKKyAgICAgICAgcmV0dXJu
IG1fY29kZUJsb2NrID09IG90aGVyLm1fY29kZUJsb2NrCiAgICAgICAgICAgICAmJiBtX21vZGUg
PT0gb3RoZXIubV9tb2RlOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKFdURjo6UHRySGFzaDxDb2Rl
QmxvY2sqPjo6aGFzaChtX3Byb2ZpbGVkQmxvY2spLCBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlp
bmdfdHlwZTxKSVRDb21waWxhdGlvbk1vZGU+Ojp0eXBlPihtX21vZGUpKTsKKyAgICAgICAgcmV0
dXJuIFdURjo6cGFpckludEhhc2goV1RGOjpQdHJIYXNoPEpTQ2VsbCo+OjpoYXNoKG1fY29kZUJs
b2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8SklUQ29tcGlsYXRpb25Nb2Rl
Pjo6dHlwZT4obV9tb2RlKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOwor
ICAgIC8vIEVpdGhlciBDb2RlQmxvY2sqIG9yIFVubGlua2VkQ29kZUJsb2NrKiBmb3IgYmFzbGVs
aW5lIEpJVC4KKyAgICBKU0NlbGwqIG1fY29kZUJsb2NrOwogICAgIEpJVENvbXBpbGF0aW9uTW9k
ZSBtX21vZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vz
cy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0
dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUg
aml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlw
ZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVC
bG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6
IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxv
Y2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZv
KCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9z
dHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBA
IHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXIm
IGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7
Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyht
X2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
cjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xv
d1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsK
IH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BS
KQoreworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRD
b2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5m
bywgc3R1YkluZm9HUFIpOworICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhz
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1
YlJvdXRpbmVQdHJUYWcpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRCeUlk
R2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBK
SVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0
dWJJbmZvR1BSKQpAQCAtMTEwLDcgKzExOCw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdl
dEJ5SWRHZW5lcmF0b3IKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBl
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJ
bmZvR1BSLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNv
ZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRS
ZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKLSAgICAsIG1faXNMZW5ndGhBY2Nl
c3MocHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGguaW1wbCgpKQorICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhjb2RlQmxvY2sgJiYgcHJvcGVy
dHlOYW1lLnVpZCgpID09IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1w
bCgpKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRh
Z0dQUigpKTsKIH0KQEAgLTEyMCw2ICsxMjgsMzUgQEAgdm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9y
OjpnZW5lcmF0ZUZhc3RQYQogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIG1faXNMZW5ndGhB
Y2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNpemVGb3JMZW5ndGhBY2Nlc3MoKSA6IElubGluZUFjY2Vz
czo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCitzdGF0aWMgdm9pZCBnZW5lcmF0ZUdl
dEJ5SWRJbmxpbmVBY2Nlc3MoSklUJiBqaXQsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIGJh
c2UsIEdQUlJlZyBzY3JhdGNoLCBHUFJSZWcgcmVzdWx0KQoreworICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJh
c2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGF1dG8gc2tp
cElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3Jh
dGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5sb2FkMzIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWRQcm9wZXJ0eShi
YXNlLCBzY3JhdGNoLCBKU1ZhbHVlUmVncyB7IHJlc3VsdCB9KTsKKyAgICBhdXRvIGZpbmlzaGVk
ID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsKKyAgICBq
aXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAg
IGZpbmlzaGVkLmxpbmsoJmppdCk7Cit9CisKK3ZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywg
R1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURh
dGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAgIGpp
dC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBnZW5lcmF0ZUdldEJ5
SWRJbmxpbmVBY2Nlc3Moaml0LCBzdHViSW5mb0dQUiwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpiYXNlLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gsIEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCisK
IEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9y
KAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsCiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgdmFsdWUs
IEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc3R1YkluZm9H
UFIpCkBAIC0xMzgsNiArMTc1LDE4IEBAIHZvaWQgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9y
OjpnZW5lcmEKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVG
b3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAordm9pZCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0
b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1
YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2Rl
Ojp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisK
KyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgZ2VuZXJh
dGVHZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAg
ICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0
QnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBl
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgIEpTVmFs
dWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJl
ZyBzY3JhdGNoLCAKQEAgLTE0OSw2ICsxOTgsMzQgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklU
UHV0QnlJZEdlbmVyYXRvcgogICAgIG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMuY2xlYXIoc2Ny
YXRjaCk7CiB9CiAKK3ZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZv
R1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUp
KTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQo
c3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKworICAgIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVQdXRC
eUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVQdXRCeUlk
UmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lUHV0QnlJ
ZFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAgR1BSUmVnIHZhbHVlID0gQmFzZWxpbmVQdXRCeUlk
UmVnaXN0ZXJzOjp2YWx1ZTsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKwor
ICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNl
dCgpKSwgc2NyYXRjaCk7CisgICAgaml0LnN0b3JlUHJvcGVydHkoSlNWYWx1ZVJlZ3MgeyB2YWx1
ZSB9LCBiYXNlLCBzY3JhdGNoLCBzY3JhdGNoMik7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5q
dW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmZhckp1
bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hl
ZC5saW5rKCZqaXQpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiB2b2lkIEpJVFB1
dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKIHsK
ICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0
eVJlcGxhY2UoKSk7CkBAIC0yMDAsNyArMjc3LDcgQEAgdm9pZCBKSVREZWxCeVZhbEdlbmVyYXRv
cjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BS
KTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1f
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAg
bV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5s
YWJlbCgpOwpAQCAtMjM2LDcgKzMxMyw3IEBAIHZvaWQgSklURGVsQnlJZEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVGYXN0UGEKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0g
ICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJ
bmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91
dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyht
X3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2Rl
UHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xv
d1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwo
KTsKQEAgLTI3MCw3ICszNDcsNyBAQCB2b2lkIEpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRl
RmFzdFBhCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAg
ICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQ
UiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQ
dHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHVi
SW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigp
KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRo
SnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBA
IC0zMDAsNiArMzc3LDMyIEBAIHZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQ
YXQKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9w
ZXJ0eUFjY2VzcygpKTsKIH0KIAordm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBz
dHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9q
aXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENv
bnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2Vs
aW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIEdQUlJlZyByZXN1bHQgPSBCYXNlbGluZUlu
QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVJbkJ5
SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7
CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3Mg
PSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQuYm94Qm9vbGVhbih0cnVlLCBKU1Zh
bHVlUmVncyB7IHJlc3VsdCB9KTsKKyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKwor
ICAgIHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsKKyAgICBqaXQuZmFySnVtcChDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNv
ZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmpp
dCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEluc3RhbmNlT2ZHZW5lcmF0
b3I6OkpJVEluc3RhbmNlT2ZHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJ
VFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlSW5kZXgsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHByb3RvdHlwZSwgR1BSUmVnIHN0dWJJbmZvR1BS
LApAQCAtMzMyLDcgKzQzNSw3IEBAIHZvaWQgSklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6Z2VuZXJh
dGVGYXMKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAg
IGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BS
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0
clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJ
bmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkp
LCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhK
dW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAg
LTM2OCw3ICs0NzEsNyBAQCB2b2lkIEpJVEdldEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQ
CiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
bV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQu
Y2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+
bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklU
U3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9
IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC00MDUs
NyArNTA4LDcgQEAgdm9pZCBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UAogICAg
IG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0
VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1f
c3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAg
ICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQu
cGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtNDQwLDcgKzU0
Myw3IEBAIHZvaWQgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpnZW4KICAgICBtX3N0
YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUp
KSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJ
bmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxs
SGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAg
IGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGlu
ZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNo
YWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShK
SVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9uVmFs
aWRhdGlvbi5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NKU1Zh
bHVlLmgiCiAjaW5jbHVkZSAiUHV0S2luZC5oIgpAQCAtMzgsMTEgKzM5LDExOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXI7CiBjbGFzcyBDYWxsU2l0ZUluZGV4
OwogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklUOwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87
CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKIAogZW51bSBjbGFzcyBBY2Nlc3NU
eXBlIDogaW50OF90OwogZW51bSBjbGFzcyBKSVRUeXBlIDogdWludDhfdDsKIAorc3RydWN0IEJh
c2VsaW5lRGVsQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0g
R1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQ
UkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9
IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFs
UmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpy
ZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Qy
OworICAgIC8vIFdlIHJlbHkgb24gdGhpcyB3aGVuIGxpbmtpbmcgYSBDb2RlQmxvY2sgYW5kIGlu
aXRpYWxpemluZyByZWdpc3RlcnMgZm9yIGEgR2V0QnlWYWwgU3R1YkluZm8uCisgICAgc3RhdGlj
X2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHkpOworICAgIHN0YXRpY19hc3NlcnQocmVzdWx0ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnJlc3VsdCk7CisgICAgc3RhdGljX2Fzc2VydChzdHViSW5mbyA9PSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpzdHViSW5mbyk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86
OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6YXJn
dW1lbnRHUFIyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3RvID0gR1BSSW5mbzo6
YXJndW1lbnRHUFIzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BS
SW5mbzo6YXJndW1lbnRHUFIxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gx
ID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMiA9IEdQUkluZm86Om5vbkFyZ0dQUjE7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdU
MTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
R1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgZG9udENsb2JiZXJSZWdpc3RlciA9IEdQUkluZm86OnJlZ1QzOwor
fTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgdGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeUlkUmVn
aXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworfTsK
Kworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJh
bmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJl
Z1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9
IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Igewog
cHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9CkBAIC02MiwxMiAr
MTcwLDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKAogICAgICAgICBMaW5rQnVmZmVy
JiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlciwKICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsKLSAg
ICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2ln
bmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2VkU3R1YkluZm8geyBudWxscHRyIH07CisgICAg
dW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBwcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0VHlwZTsKICAgICBTdHJ1Y3R1cmVTdHViSW5m
byogbV9zdHViSW5mbzsKIAorcHVibGljOgorICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0
YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Ns
b3dQYXRoQ2FsbDsKQEAgLTk4LDcgKzIxMiw3IEBAIHByb3RlY3RlZDoKICAgICBKU1ZhbHVlUmVn
cyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBtX3N0YXJ0OworcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xv
d1BhdGhKdW1wOwogfTsKIApAQCAtMTExLDYgKzIyNSw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNW
YWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNj
ZXNzVHlwZSk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVy
Jik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWdu
ZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIAogcHJpdmF0ZToKICAg
ICBib29sIG1faXNMZW5ndGhBY2Nlc3M7CkBAIC0xMjQsNiArMjM5LDcgQEAgcHVibGljOgogICAg
ICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25z
dCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICAg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHRoaXNS
ZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJ
bmZvR1BSKTsKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIH07
CiAKQEAgLTEzMiwxMCArMjQ4LDExIEBAIHB1YmxpYzoKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
KCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJs
b2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2Us
Ci0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBz
Y3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CisgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUs
IENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1v
ZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2Vt
YmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVu
c2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAgICAgCiAgICAg
Vl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0aW9uKCk7CiAKQEAgLTE2MywxMSAr
MjgwLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1i
bGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVS
ZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTE5
MSw4ICszMDYsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9B
c3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFy
dDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07
CiAKQEAgLTIxNiw4ICszMjksNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRo
SnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNTIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVy
YXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBt
X3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI1NSw2ICszNjQsNyBAQCBwdWJsaWM6CiAgICAgICAg
IEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIp
OwogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9p
ZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9D
b25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIH07CiAKIGNsYXNzIEpJVEluc3RhbmNlT2ZH
ZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewpAQCAtMjc3
LDggKzM4Nyw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFz
dFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOwogCi1wcml2
YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzAyLDExICs0MTAs
OSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1i
bGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVS
ZWdzIG1fcmVzdWx0OwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0z
MzAsOCArNDM2LDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChN
YWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1w
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Okxp
bmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAo
IXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwor
fQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFu
dCkgeworICAgICAgICAvLyBBbGwgbGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFu
dCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgUkVM
RUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3Rh
bnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwog
fQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIo
UmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xNTYsMzYgKzE4MSwz
NiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4CiAjZW5kaWYKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJu
VmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZh
bHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2FsbDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRk
cmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwg
cmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBK
U1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0
b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKIH0KIAog
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93bkNl
bGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMDUsNyArMjMw
LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZv
aWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNv
ZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwog
ICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3Vs
dCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAg
LTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50
CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1
bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1l
dGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlv
biwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwor
ICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5
dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgsMzMgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRD
b25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29u
c3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5n
KGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKLX0KLQot
aW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFs
dWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKTsKLQotICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9u
bHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4K
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmls
ZS5tX2J1Y2tldHMpOwotI2Vsc2UKLSAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlw
dG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUu
bV9idWNrZXRzKTsKLSAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3It
PmFzQml0cy5wYXlsb2FkKTsKLSAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRv
ci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKLX0KKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Cit9CisKKy8vaW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxl
LCBKU1ZhbHVlUmVncyB2YWx1ZSkKKy8veworLy8gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxp
bmcoKSk7CisvLworLy8gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25s
eSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAorLy8gICAgLy8gc3RvcmUu
CisvLyNpZiBVU0UoSlNWQUxVRTY0KQorLy8gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQ
cm9maWxlLm1fYnVja2V0cyk7CisvLyNlbHNlCisvLyAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
KiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1
ZVByb2ZpbGUubV9idWNrZXRzKTsKKy8vICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAm
ZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOworLy8gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIo
KSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOworLy8jZW5kaWYKKy8vfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlw
ZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQog
ewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKICNlbmRpZgpAQCAtMzIzLDQxICszNTIsNDIgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8
c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVBy
b2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7
CisKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9y
PEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6
b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3Mo
c19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9m
aWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFs
dWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKLX0KKy8vaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJS
ZWcgcmVzdWx0UmVnKQorLy97CisvLyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJv
ZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisvL30KIAotdGVtcGxhdGU8dHlwZW5hbWUg
TWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRh
dGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlm
CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lz
dGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgc2Ny
YXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
cHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lz
dGVySUQgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAg
ICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNo
R1BSLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAg
ICAgIHN0b3JlMzJUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5
UHJvZmlsZSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxl
R1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+
CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBC
eXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNo
R1BSKQogewotICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgbG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3Mo
YXJyYXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJ
RCgpKSk7Ci0gICAgfQorICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29k
ZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9m
aWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2VsbEdQUiwgc2NyYXRjaEdQUik7
CiB9CiAKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQpAQCAtMzgwLDcgKzQxMCw3IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUo
VmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlmIChyZWcu
aXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFu
dFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOworICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+
Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIo
JmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAgICBsb2FkRG91Ymxl
KGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcgKzUyNiw3IEBAIGlubGluZSB2b2lk
IEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1f
Y29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcp
KSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcgKzUzNiw3IEBAIGlubGluZSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcp
CiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICgh
aXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNCwxMSArNTQ0
LDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogICAgIH0KIH0K
IAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJl
Z2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omdl
dE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIg
b3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0LDExICs1NjksMTEgQEAgQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5dGVjb2Rl
SW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAg
ICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkp
Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwg
ZHN0KTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXND
b25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKSB7CisgICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAg
ICAgICAgIG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgZHN0KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTY2LDExICs1OTEsNiBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQo
KSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
UmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsK
QEAgLTU5NSw3ICs2MTUsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2Nv
ZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkK
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTYzNywz
MCArNjU3LDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewog
ICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29k
ZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKLX0KLQotQUxXQVlTX0lO
TElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNv
ZGUpCi17Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsgLy8g
SGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Nv
cGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRH
ZXRQdXRJbmZvcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZh
bHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwg
Z2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJbmZvOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxl
IEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2
NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEp
IDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0g
ICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAg
aWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxl
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1f
Y29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBh
cml0aFByb2ZpbGU7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPm91dE9mTGluZUp1
bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY4
MSw2ICs2NzgsNjAgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAog
ICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQorewor
ICAgIGxvYWRQdHIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5t
ZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1
bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXpl
X3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQzMihBZGRyZXNzKHNfbWV0YWRh
dGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRh
YmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sK
KyAgICBsb2FkOChBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3Vs
dCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2Rl
PgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUgdmFs
dWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9y
ZTgodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0
YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0
b3JlMzJUb01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBz
aXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlMzIodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQ
UiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Ynl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgp
Lm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBzX21ldGFkYXRhR1BS
LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29uc3RhbnQoSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBHUFJSZWcgcmVzdWx0KQorewor
ICAgIGxvYWRQdHIoQWRkcmVzcyhzX2NvbnN0YW50c0dQUiwgc3RhdGljX2Nhc3Q8dWludHB0cl90
Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZENvbnN0YW50
KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIEdQ
UlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgp
KTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVz
dWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29u
c3RhbnRzVmVjdG9yQnVmZmVyKCkpLCByZXN1bHQpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlc3Vs
dCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2YoSlNWYWx1ZSkpLCByZXN1bHQp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpj
YWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVG
b3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2Vw
dGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9
IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC05OTcsNyArOTk3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogCiAgICAgLy8gY3Jl
YXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNo
IHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
LSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3
aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3
aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUo
dW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBz
d2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29u
c3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRl
eCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rl
cikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBA
IC0xMDQyLDcgKzEwNDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0
IEluCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0
cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgs
IG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsK
ICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODI2NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw2ICs0Myw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5j
bHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50
ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNTQsMTEg
KzU2LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29u
c3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0
b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRz
dCkpOwotICAgICAgICBlbHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0Nv
bnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAg
ICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihk
c3QpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFu
dChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0
KSk7CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NywzNyArOTIs
MzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2Jq
ZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0Zp
bmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwot
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVu
dGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdU
MDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQg
c2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7
CiAKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRl
cmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0
b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBz
bG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVn
LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1f
dm0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0
b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSAr
IE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVS
ZWcpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1
c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcs
IEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1
dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVj
dHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7
CisgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7
CisgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0g
cmVnVDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
LnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBl
bWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0xMzEsNyArMTM0LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCiAgICAgLy8gV2UgZG9u
J3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAg
IEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3Rv
SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
MSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFs
LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBt
X2Z1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKSkpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOwogCkBAIC0xNTQsMzAgKzE1OCwz
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRz
IChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMu
Ci0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3
aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3RvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgdmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3Rv
R1BSKTsKICAgICAKICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBt
dXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1i
b2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2
YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0
YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAog
ICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1Qx
LCAvLyBwcm90bwotICAgICAgICByZWdUNSwKLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2Ny
YXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICByZXN1bHRHUFIsCisgICAgICAgIHZhbHVlR1BSLAorICAgICAgICBwcm90b0dQUiwKKyAg
ICAgICAgc3R1YkluZm9HUFIsCisgICAgICAgIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
c2NyYXRjaDEsIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VP
ZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwot
ICAgIAorCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQg
KzIwNCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAg
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZP
cHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0
aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJl
Z1QxKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9
PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxp
bmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlv
bjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50
R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0
VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRH
UFIzKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0
aW9uKikKQEAgLTI0MCw3ICsyNTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5k
ZWZpbmVkKGNvCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzgzLDkgKzM5NCw5IEBAIHZvaWQgSklU
OjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9w
X3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7Ci0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0YWNrUG9p
bnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdp
c3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBA
IC00MTEsNyArNDIyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElu
cwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NDQsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0
X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9u
TmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24s
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVn
VDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQ
UjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ3NiwxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxP
YmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwg
SlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7
CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNDkzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1MzIsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0Nl
bGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0
dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBt
YXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU1
Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAgICAvLyBG
aXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
Yml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs1OTUsMTMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5l
cV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9p
bnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAg
ICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
ICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxs
SGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1Q
dHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEp
LCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRl
Y29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVx
dWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRh
dGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwu
bGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2MzYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
cmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRh
cmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1
bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2Ny
YXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0
YXJnZXQpOwpAQCAtNjQwLDcgKzY1Myw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQg
Z2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIg
Z2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzA4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhy
b3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBj
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5
RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVn
VDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5k
bGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzcyNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Ro
cm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2Vu
ZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BS
MjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpA
QCAtNzIwLDcgKzczNCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIGppdC5s
b2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5jb3B5Q2Fs
bGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRHUFIwKTsK
KyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYXJn
dW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RH
UFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyArOTIyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEs
IHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5MzMs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CiAKQEAgLTkzMSw3ICs5NDcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29u
c3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDAp
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVn
VDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTY3LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVn
ICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9
CkBAIC05NzgsNyArOTk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IElu
c3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBk
c3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAt
OTkzLDcgKzEwMDksMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQo
KSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxw
dHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91
bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFdoZW4gdGhlIExMSW50IHRocm93cyBh
biBleGNlcHRpb24sIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFkeSB0aWVyZWQg
dXAKKyAgICAvLyB0byBiYXNlbGluZSwgYW5kIHdlJ2xsIGNhdGNoIHRoYXQgZXhjZXB0aW9uIGlu
IHRoZSBiYXNlbGluZSBKSVQuIEJlY2F1c2UgdGhlIExMSW50IHVzZXMKKyAgICAvLyB0aGUgYSBk
aWZmZXJlbnQgdmFsdWUgaW5zaWRlIHNfY29uc3RhbnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdl
IHJlc3RvcmUgYWJvdmUgbWF5IG5vdAorICAgIC8vIGNvbnRhaW4gdGhlIGNvcnJlY3QgdGhhdCBy
ZWdpc3Rlci4gU28gd2UgcmVwbGVuaXNoIGl0IGhlcmUuCisgICAgeworICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdU
MCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpv
ZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworICAgIH0KIAogICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJF
eGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRp
b24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyAr
MTAzNywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAg
Ly8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0
YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgK
IAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRh
dGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQot
ICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRl
ckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJB
dENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsK
KyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0
Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwog
ICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRo
aXMpOwotICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAg
IGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJv
ZmlsZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4o
cHJvZmlsZSksIHJlZ3MpOwotICAgICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCiB9CiAKQEAgLTEwNTMsOCArMTA2Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRj
aF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNv
ZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRl
c3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNv
bnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxl
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
ICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29k
ZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxp
bmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsx
MDk1LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChT
d2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBT
d2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxl
KHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUs
IHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93
bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRo
VW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1
bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRj
aFB0clRhZyk7CiB9CiAKQEAgLTEwOTksMjAgKzExMTQsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBi
eXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0
Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFi
bGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRj
aFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRj
aFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5r
ZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlU
eXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0
YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1l
bnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2Nr
KCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDAp
OwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1Qw
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8
aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMu
bGluayh0aGlzKTsKQEAgLTExMzMsNyArMTE1MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251
bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBh
cmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRp
YXRlID0ganVtcCgpOwpAQCAtMTE0OCw3ICsxMTY1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFf
bnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mg
eyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTExNjYsNyArMTE4Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNv
bnN0IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwog
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIo
Tm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRl
ID0ganVtcCgpOwpAQCAtMTE4OCwxMiArMTIwNCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRl
cihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRo
ZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBz
dGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8g
b2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBj
b3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxp
bmtlZENvZGVCbG9jay0+bnVtVmFycygpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
ICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNw
YWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5p
dFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJh
cnJpZXIobV9jb2RlQmxvY2spOworICAgIAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7
CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEyMTIsNyAr
MTIzMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBq
aXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0xMzEwLDIzICsxMzI4LDE5IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3Rv
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1
cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIo
Y2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdU
Mik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlz
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBX
cml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2Fj
aGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0
ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVn
VDA7CkBAIC0xMzQyLDcgKzEzNTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpy
YXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRh
UmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkg
KyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJl
KCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2Fk
UHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRD
YWxsZWUoKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2Fs
bGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIo
SlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBo
YXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzODYsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEz
OTcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJ
bW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1
ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcgKzE0MTAsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVn
VDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxNDIxLDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsx
NDM2LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAg
IFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5j
ZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFs
dWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE0MzAsNyArMTQ0OSw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9o
aW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2Nv
ZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsK
KyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0Zv
ckZ1enppbmcoKSAmJiBtX3VubGlua2VkQ29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZv
ckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZtKCku
Z2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZFB0
cihwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2hQdHIo
QmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmlu
aXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xNDQwLDcgKzE0NTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAjZWxzZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OwogI2VuZGlmCi0gICAgICAgIG1vdmVWYWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkp
OwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0x
NDUzLDggKzE0NzIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
CiAKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2Fu
QmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQ
b3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNy
ZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2Nr
LT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVzcyhy
ZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQog
fQogCkBAIC0xNTA5LDcgKzE1MjksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJh
cHMoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRs
ZVRyYXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTUyMiw3ICsxNTQzLDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2No
ZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4
NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTE1NjQsMzQgKzE1ODUsMzYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9y
ZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IGFyZ3Vt
ZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1fdW5s
aW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxs
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQg
SklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9h
ZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2Rl
Lm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9u
RGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbCwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFu
dChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6
Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNF
eGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2Rl
SUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAg
ICB9CiB9CiAKQEAgLTE2MjEsMjMgKzE2NDQsMjQgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhw
ckNvbW1vbihjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1f
c2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJn
dW1lbnRHUFIxKTsKICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9
IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAg
IGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpGdW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90
PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQs
IGFyZ3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAK
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3Bf
bmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09
IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29k
ZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNH
ZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OwogICAgIH0KIH0KIApAQCAtMTY2NCwyOSArMTY4OCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBi
eXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUs
IHJlZ1QwLCBzaXplKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQUjIp
OworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJh
eTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQ
UjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5
V2l0aFNpemU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAg
ICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmd1bWVudEdQUjIpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogI2Vsc2UKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMik7CiAgICAgZW1pdExvYWQoc2l6ZUluZGV4
LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3Qs
IHJlZ1QzLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApA
QCAtMTY5NCw4ICsxNzE5LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3Np
emUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgbV9pc1NoYXJlYWJsZSA9IGZhbHNlOworCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90
eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNv
ZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE3NzcsMjAgKzE4MDQsMjUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQo
bm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZl
IHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBz
aGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdH
UFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVn
IHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgp
LCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgeworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBu
b24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1Qy
OworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJl
Zywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9j
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFk
b3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwg
cmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5k
aWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9s
X2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBtX2lz
U2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlv
biogYmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29k
ZSgqdGhpcyk7CkBAIC0xODYwLDcgKzE4OTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJn
dW1lbnQoY29uc3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3Mp
OwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE4ODYsNyArMTkxOCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlw
ZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBz
bG93Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFyaXRoUHJv
ZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJDYWNoZWFi
bGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNp
bmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgi
CiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKQEAgLTI4NTUsNyArMjg1Niw3IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3Qg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQg
PSBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIApAQCAtMjg4
MCw3ICsyODgxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAog
ICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29k
ZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBt
aW4pOwogICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoa2V5LmlzSW50MzIoKSkKQEAgLTI5MDMs
NyArMjkwNCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHZvaWQq
IHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJs
b2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5n
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CiAKICAgICBpZiAoa2V5LmlzU3RyaW5nKCkpIHsKICAgICAg
ICAgU3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmluZyhrZXkpLT52YWx1ZShnbG9iYWxPYmplY3Qp
LmltcGwoKTsKQEAgLTI5MTksNyArMjkyMCw2IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25Td2l0Y2gKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0
KTsKIH0KIAotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1ZSwg
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RydWN0aW9uKiBwYykpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMjk3MSw3ICsyOTcxLDYgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdgogCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXNvbHZlZFNjb3BlKTsKIH0KLSNlbmRpZgogCiBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RydWN0aW9uKiBwYykpCiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5MCw5ICsyOTAsNyBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkdldFByCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaENo
YXJXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIGNoYXIq
LCAoVk0qLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1p
bikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRo
VW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBr
ZXksIHNpemVfdCB0YWJsZUluZGV4KSk7Ci0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5l
LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5
dGVjb2RlUEMpKTsKLSNlbmRpZgogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25H
ZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0
cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25QdXRUb1Njb3BlLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiog
Ynl0ZWNvZGVQQykpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDEyIEBAIGF1dG8gSklUUGxhbjo6dGllcigp
IGNvbnN0IC0+IFRpZXIKIAogSklUQ29tcGlsYXRpb25LZXkgSklUUGxhbjo6a2V5KCkKIHsKLSAg
ICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkobV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRp
dmUoKSwgbV9tb2RlKTsKKyAgICBKU0NlbGwqIGNvZGVCbG9jazsKKyAgICBpZiAobV9tb2RlID09
IEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpCisgICAgICAgIGNvZGVCbG9jayA9IG1fY29k
ZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgIGVsc2UKKyAgICAgICAgY29kZUJsb2Nr
ID0gbV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICByZXR1cm4gSklUQ29t
cGlsYXRpb25LZXkoY29kZUJsb2NrLCBtX21vZGUpOwogfQogCiBib29sIEpJVFBsYW46OmlzS25v
d25Ub0JlTGl2ZUFmdGVyR0MoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZh
dGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJl
Z1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5zdHVi
SW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwx
MDQgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5j
b3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewot
ICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAg
ICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRp
ZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJz
KCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOwor
ICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIs
IHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BS
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25H
ZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCBy
ZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNl
R1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKKyAgICAgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJ
bmZvR1BSKTsKKwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQog
ICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAg
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIHJlc2V0
U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRp
dmVseSByZXNldCBTUAorCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlW
YWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2Rl
VHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlw
ZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRlcikp
CisgICAgICAgIHJldHVybjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOwogCi0gICAgICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRz
dCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
LCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAg
ICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVj
b2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAv
LyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2Zp
bGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsK
LQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0g
ICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFs
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAg
ICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJl
Z1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwor
ICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdU
MCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eSA9PSByZWdUMSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxl
KCksIHByb2ZpbGVHUFIpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsxNjEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
CiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNjAsOCArMTcyLDggQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxl
R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRH
UFIxKTsKIApAQCAtMTg3LDM0ICsxOTksNDAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJp
dmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0
UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2Fz
ZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9u
YW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
cml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzI0MSwxMSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSht
ZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHksIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBl
KG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRz
dCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTIzNSwyNiArMjU1LDIwIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1
c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwog
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZh
dGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
LQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKQEAgLTI2NCw3ICsyNzgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAg
ICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0zMDAsMjEgKzMxNCwyOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJy
YW5kID0gYnl0ZWNvZGUubV9icmFuZDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdp
c3RlcnM6OnN0dWJJbmZvOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7Ci0KICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQ
cml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQo
Z2VuKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBv
ZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTMy
NCwxNyArMzQ1LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMK
ICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CisgICAgVU5VU0VE
X1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVC
cmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4o
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIz
KTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9w
dGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0z
NDQsMjQgKzM3MCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQo
CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQ
Uik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAv
LyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJn
dW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0
dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxG
dW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+
OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2
YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRl
QnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogI2VuZGlmCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzcwLDMzICszOTAsNDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjbwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVj
b2RlLm1fYnJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCByZWdUMSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0
ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsK
KworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAg
IEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5k
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRl
QnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5h
cHBlbmQoZ2VuKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJh
bmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1ByaXZhdGVCcmFuZD4oKTsK
KyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGUpOworCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNz
R2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNj
ZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0
aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0NDAsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zm
c2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2Vy
dChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hl
Y2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxk
ZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+
Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dl
dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NjMsNDMgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmls
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRl
Y29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHBy
b2ZpbGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdU
MywgcmVnVDQpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIGFkZFNsb3dDYXNlKCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IHN0
ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsRGlyZWN0PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1
dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRl
Y29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2Ug
bmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVj
dHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00NzQsMTUg
KzUxNSwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAg
ICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKLSAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNv
ZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgICAgIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKLSAgICAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVj
dCkKQEAgLTQ5OCw3ICs1MzYsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSQogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkgYXJl
IGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlv
blB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEsIHJlZ1QyLCBnZW4uc3R1YkluZm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRH
UFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFI0KTsKKyAgICBpZiAoaXNEaXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCks
IE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1
bWVudEdQUjUpOworICAgIGVsc2UKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbDo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAgY2FsbE9w
ZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKT4oQWRkcmVz
cyhhcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BS
MywgYXJndW1lbnRHUFI0LCBhcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtNTEyLDcgKzU1OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3Zh
bF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBD
YWxsIGNhbGw7CiAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0
cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkg
PyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZSk7CkBAIC01MjMsNyArNTcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpA
QCAtNTMzLDE4ICs1ODAsMjQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFn
UmV0dXJuQWRkcmVzcygpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIg
PSByZWdUNTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgeworICAgICAgICBSZWdpc3RlclNldCB1
c2VkKEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5LCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZSwgQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250
YWlucyhyZWdUNCkpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDUpKTsKKyAg
ICB9CisKIAogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CkBA
IC01NzAsMjAgKzYyMywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNv
bnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiks
IEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAg
YWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJ
bmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmllbGRQdXRLaW5k
ID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlW
YWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0
aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTk0LDggKzY1OCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKIAogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigp
OwotICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsK
KyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgIEpJVFB1dEJ5VmFs
R2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKQEAgLTYw
MywxMyArNjY2LDE1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgYXV0byBvcGVyYXRp
b24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVG
aWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgLy8gVGhleSBhcmUgY29uZmlndXJl
ZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7Ci0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBnZW4uc3R1
YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKKworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFI0KTsKKyAgICBj
YWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxk
T3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0cikp
OwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNjIyLDE4ICs2ODcsMTIgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC02NDMsMTQgKzcwMiwxNCBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlv
bnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMg
YmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAg
ICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxs
SGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9
IHJlZ1Q0OwogCkBAIC02ODAsNyArNzM5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRl
cl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTY4OSw3ICs3NDksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRl
ckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3NjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX3NldHRlcl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwg
cmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1Qx
LCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwg
cmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3NzEsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZh
bCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNzE5LDcgKzc4Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJv
cGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCBy
ZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJp
YnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRy
aWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3LDIzICs3OTEsMzMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJh
c2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQg
d3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3
cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBj
bG9iYmVycyByZWdpc3RlcnMuCkBAIC03NTksMTUgKzgzMywxNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRp
bWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlv
bkRlbGV0ZUJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCks
IFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODU3LDE5IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBh
cmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lk
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAg
Q2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODA4LDcgKzg3OSw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAg
LTg0NSwyMiArOTE2LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5z
dHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0
eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVE
ZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRH
UFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1Qz
LCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHVi
SW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1
bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0
IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVy
IGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3
aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTY1LDEx
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9u
RGVsZXRlQnlWYWxPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2Vj
bWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5
OSwyNCArOTgzLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwot
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxP
cHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRl
bGV0ZUJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAg
c3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdU
MCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC05MjYsNyArMTAwNSw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9u
cyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAog
ICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTk2MSwyMiAr
MTA0MCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnJlc3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0
UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNj
ZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTk4NiwxNCArMTA3NCwxNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAg
Y2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpPihBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwMDMsMjYgKzEwOTQsMjAgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAg
fHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3Bl
cnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRp
b25UcnlHZXRCeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUp
Pjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJl
dHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xMDMwLDIyICsxMTE1LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91
bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZERp
cmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJl
c3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKworICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZv
cy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWRE
aXJlY3Q7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQog
CkBAIC0xMDU0LDE2ICsxMTQ4LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
ZGlyZWN0KGMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRp
b25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTY5LDYyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7
CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJl
Y3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENh
bGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdl
dEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlM
ZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5t
X21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdl
dEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2Rl
LmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRN
b2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSnVtcCBu
b3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5
SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0
YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdz
LCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0
aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KLSAgICBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgp
OyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5
IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4p
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9
CiAKQEAgLTExNTgsMTYgKzEyMzMsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBh
cmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
CkBAIC0xMTc3LDI2ICsxMjU0LDU4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQo
Y29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVu
dEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgc3RhdGlj
X2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNl
Ci0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVn
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VW
UmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlz
R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisK
KyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJl
Z3MsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSwgc3R1YkluZm9H
UFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6R2V0QnlJZFdpdGhUaGlzOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0
IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93
Q2FzZSgpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKQEAgLTEyMDYsNyArMTMxNSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlm
ICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0
LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTEyNDEsMTYgKzEzNTAsMTkgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRX
aXRoVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRo
aXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5
SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3RoaXNWYWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpPihieXRlY29kZSwg
QWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEyNjAsMjggKzEzNzIs
MjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJl
YWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
dGhpc1ZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQ
UjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02
NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3Bl
cnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChv
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtMTI5MSw3ICsxMzk3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAg
ICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTMyOSwyMyArMTQzNSwzOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZS
ZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFn
cy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRo
ZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIs
CiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50
byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8g
c3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBk
aXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJl
ZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQ
UiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1Qz
LCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNo
R1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVj
dCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeUlkOworICAgIHN0dWJJ
bmZvLT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGly
ZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
cmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNl
cnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFw
cGVuZChnZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0ODAsMTgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAog
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgr
K107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUo
b3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTEzNzYsMjUgKzE1MDEsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9p
ZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3Vt
ZW50R1BSMzsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlR1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Cisg
ICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6
dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVn
aXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVu
dEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlR1BSID09IGFyZ3VtZW50R1BSMSk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwot
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gZ2VuLnNsb3dQYXRoRnVuY3Rpb24o
KTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKGdlbi5zbG93UGF0aEZ1bmN0
aW9uKCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTQwNCw3ICsx
NTIzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8v
IGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcg
YXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1h
eSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGlj
aCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVz
cygpOwpAQCAtMTQ0MSwyMCArMTU2MCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChj
b25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91
bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lz
dGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BS
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwog
CiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Oklu
QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ2
MywxNCArMTU5MywxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQ
UjIpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUp
PihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0ODAsMjggKzE2MTMsMjIgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUlu
QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAg
fHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3Bl
cnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3
aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50
IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVu
dCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlv
bkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZh
bHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5
X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChv
cGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
IAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIp
OwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxMCwyNSAr
MTYzNywzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBi
YXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwogCiAgICAgSklUSW5C
eVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5C
eVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUzNywxNSArMTY3Miwx
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3Im
IGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5
dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1
bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBh
cmd1bWVudEdQUjMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlv
bkluQnlWYWxPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NTYsNTkgKzE2OTQsNzAgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVH
UFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9H
UFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5
VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAg
Ly8gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3Rs
eSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcg
YSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGlt
aXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNh
bGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25J
bkJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JC
cmFuZCwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdU
Mik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHVi
SW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBl
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1By
aXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklU
OjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewotICAg
IEFTU0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAg
VU5VU0VEX1BBUkFNKHByb3BlcnR5KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0g
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2
YXRlQnJhbmQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1tt
X2luQnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2
YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOwor
ICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6
ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0x
NjE4LDI3ICsxNzY3LDIxIEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJl
Z2kKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eU9yQnJhbmRHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eU9yQnJhbmRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eU9yQnJhbmRHUFIgPT0gYXJndW1lbnRH
UFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlw
ZShvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0
UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpLCBkZWNsdHlw
ZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IHR5cGUgPT0gQWNjZXNzVHlw
ZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3Bl
cmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9u
SGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjUyLDcgKzE3OTUsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaGFzX3ByaXZhdGVfbmFtZShjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0
ZU5hbWU+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZSk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1f
ZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fcHJvcGVydHksIEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVOYW1lKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfYnJhbmQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NjYsMjE1ICsxODA5
LDEyNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVfYnJhbmQoCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZUJyYW5kPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhi
eXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBlbWl0SGFz
UHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9i
cmFuZCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRW
YXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6
OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJS
ZWcgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAg
ICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRy
ZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgp
LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY3Jh
dGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0
Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBB
ZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9z
dXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7Ci0gICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRl
cHRoOyArK2kpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0
T2ZOZXh0KCkpLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
Ci0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
ID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKLSAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRh
Lm1fbG9jYWxTY29wZURlcHRoOwotCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9
IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJs
b2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCwgcmVnVDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90
RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJl
c3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0KLSAgICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgotICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAg
ICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNv
ZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwgc2NvcGUs
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwot
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6
Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7Ci0KLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2Jh
bFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzIDogR2xvYmFsTGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2
ZVR5cGUsIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAg
ICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0KLSAgICAgICAg
SnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
cik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLSNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCiB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fcmVzb2x2ZVR5cGU7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUg
PSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAg
ICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4
KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4
KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsK
IAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIC8vIElmIHdlIHByb2ZpbGUgY2VydGFpbiByZXNvbHZl
IHR5cGVzLCB3ZSdyZSBnYXVyYW50ZWVkIGFsbCBsaW5rZWQgY29kZSB3aWxsIGhhdmUgdGhlIHNh
bWUKKyAgICAvLyByZXNvbHZlIHR5cGUuCiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxl
VmFyKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJv
bm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9k
dWxlVmFyKSAKKyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZl
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVudCgpLCByZWdUMCk7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2Nr
LT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICAgICAgcHRyZGlmZl90IG1l
dGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1l
dGFkYXRhVGFibGUoYnl0ZWNvZGUpOworCisgICAgICAgIGF1dG8gY2xvc3VyZVZhckdlbmVyYXRv
ciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3Bl
IENsb3N1cmVWYXIiKTsKKyAgICAgICAgfTsKIAotI2RlZmluZSBSRVNPTFZFX1NDT1BFX0dFTkVS
QVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0
b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7
Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVTT0xWRV9TQ09QRV9HRU5FUkFU
T1IpCisgICAgICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0
b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFz
ZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mi
KTsKICAgICAgICAgfTsKLSN1bmRlZiBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgorCisgICAgICAg
IGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAg
ICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgc3RkOjpu
dWxsb3B0LCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgZ2VuZXJpYyIpOworICAgICAgICB9
OworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUMjsKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gY29kZTsKKyAgICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhcikKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0
b3IpOworICAgICAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIo
Y2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljUmVzb2x2ZVNjb3BlR2Vu
ZXJhdG9yKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogICAgIH0KIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BS
ZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVy
YXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+
IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5r
IGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQg
LyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KKworICAgIENDYWxsSGVscGVycyBqaXQ7CisKICAgICB1c2lu
ZyBNZXRhZGF0YSA9IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7IC8vIGluY29taW5nCi0gICAgY29uc3RleHByIEdQUlJl
ZyBzY29wZUdQUiA9IHJlZ1Q2OyAvLyBpbmNvbWluZworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0
YWRhdGFHUFIgPSByZWdUMjsgLy8gaW5jb21pbmcKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3Bl
R1BSID0gcmVnVDA7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCi0g
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURf
UEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2Vk
Rm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3Mo
KTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAg
YWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAg
ICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykg
eworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKICAg
ICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAg
ICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGds
b2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9i
amVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVj
dEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNo
cG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwg
QWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFs
T2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9u
V2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNo
OChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwg
VHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJl
c29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAg
ICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVn
VDEpOwotCi0gICAgICAgIExhYmVsIGxvb3AgPSBsYWJlbCgpOwotICAgICAgICBKdW1wIGRvbmUg
PSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOwotICAgICAgICB7Ci0gICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAg
ICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgICAgICAgICBqdW1w
KCkubGlua1RvKGxvb3AsIHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2NvcGVHUFIgPT0gcmVnVDApOworICAgICAgICBqaXQu
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkxvY2FsU2NvcGVE
ZXB0aCgpKSwgcmVnVDEpOworCisgICAgICAgIExhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAg
ICAgICAgSnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CisgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVn
VDApOworICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAgICAg
IGppdC5qdW1wKCkubGlua1RvKGxvb3AsICZqaXQpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7
CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlKSB7CkBAIC0xODgyLDEyICsxOTM3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8v
IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGlj
YWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6
Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAg
ICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQu
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdsb2JhbExleGlj
YWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZz
ZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCkBAIC0xODk3LDExICsxOTUxLDExIEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9y
IEdsb2JhbFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAg
ICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1Zhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDAp
OwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAg
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0
T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTE5MDksNyArMTk2Myw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgICAgIGVtaXRSZXNv
bHZlQ2xvc3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNl
LmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgog
ICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTE5MTksODMgKzE5NzMsNDUgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAg
IHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAg
SnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDog
R2xvYmFsTGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNl
IFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVz
b2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1
cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAg
ICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQ
cm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90
R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUmVzb2x2ZVR5cGUoKSksIHJlZ1QxKTsKIAotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgYXV0byBlbWl0Q2FzZSA9
IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgICAgIEp1bXAgbm90Q2Fz
ZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOworICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOworICAgICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgIG5vdENhc2UubGluaygmaml0
KTsKKyAgICAgICAgfTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAg
ZW1pdENhc2UoR2xvYmFsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHkpOwor
ICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5
cGUpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAg
fQogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7
Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNv
bHZlX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2Rl
TG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENv
ZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUg
REVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29s
dmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhw
ciAoIXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAg
ICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVy
biBqaXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6
IG9wX3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVT
T0xWRV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVf
UkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAg
ICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsg
d2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hl
ZCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwMzQsNyArMjA1MCw2
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1
ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX3Jlc29sdmVfc2NvcGUiKTsK
IH0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogdm9pZCBKSVQ6OmVtaXRM
b2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiog
c3RydWN0dXJlU2xvdCkKIHsKQEAgLTIwNjIsMjc2ICsyMDc3LDEzMyBAQCB2b2lkIEpJVDo6ZW1p
dEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgcmVnVDApOwogfQogCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
LSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0
cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CisgICAgUmVzb2x2ZVR5cGUg
cHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkg
ewotICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0
dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3
ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVj
dC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2
YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZzZXQgPSBy
ZWdUMTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7Ci0KLSAgICAgICAgICAg
IGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7Ci0gICAgICAgICAgICB9KSk7CisgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNl
dCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAK
LSAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlm
IChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBi
cmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNl
dElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zm
c2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAg
ICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1
bHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHbG9iYWxW
YXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAo
aW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50
ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgot
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVW
YXI6Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
fQorICAgIGF1dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAg
cmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAi
QmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKICAgICB9OwogCi0gICAg
c3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVn
VDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJl
c29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEdsb2JhbFByb3Bl
cnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDog
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0
SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1
bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3Bl
cnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1
ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxz
ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOwotfQotCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRh
ZGF0YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotI2Vsc2UgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0KLXZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBz
Y29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBt
ZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBhdXRvIGNsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICBy
ZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVW
YXIiKTsKKyAgICB9OwogCi0gICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICBBU1NFUlQoQnl0
ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NF
UlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50
SW5zdHJ1Y3Rpb24pOworICAgIGF1dG8gZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvciA9IFtd
IChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRo
dW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgZ2VuZXJp
YyIpOworICAgIH07CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BS
ID0gcmVnVDI7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1
OwogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRy
X3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEu
bV9vcGVyYW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0
cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoJm1ldGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAK
LSNkZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJv
bV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBU
aHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNP
TFZFX1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdF
VF9GUk9NX1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHNjb3BlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRh
ZGF0YUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2Nv
cGVHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRh
ZGF0YUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAg
IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAg
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZt
LmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAg
Y29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5l
cmF0b3IpOworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dl
dEZyb21TY29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0
aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2Vu
ZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlw
ZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1
bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTElu
dCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJv
dXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25n
aW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2Nv
cGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NF
UlQodGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwotCi0gICAgdGFn
UmV0dXJuQWRkcmVzcygpOwotCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBt
ZXRhZGF0YUdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKIAotICAgIEp1bXBMaXN0IHNs
b3dDYXNlOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1
Y3R1cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRh
ZGF0YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVn
VDApOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkp
OwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7
Ci0gICAgfTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSks
IHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgYXV0byBkb1ZhckluamVjdGlvbkNo
ZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGlmICgh
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZT
RVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsK
LSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdh
dGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVk
KSkpOworICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5q
ZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
YnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0
ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKICAgICAKLSAgICBh
dXRvIGVtaXRHZXRWYXJGcm9tUG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcg
cmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJl
Zyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyBy
ZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVn
KTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdl
dENsb3N1cmVWYXIgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIG9wZXJhbmRHUFIpIHsK
LSAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAg
ICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGFkZFB0
cihzY29wZUdQUiwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhvcGVyYW5k
R1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsK
LSAgICB9OwotCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8gZW1pdENvZGUgPSBb
Jl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5
cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3Ry
dWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3
ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVj
dC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2
YXIgaW5qZWN0aW9uLgotCi0gICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSByZWdU
MDsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7Ci0KLSAgICAgICAgICAgIGppdEFzc2VydChzY29w
ZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAg
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihF
cXVhbCwgYmFzZSwgcmVnVDMpOworICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVy
cyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRo
aW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFu
ZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNl
dE9mU3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0
LmJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRk
cmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhz
Y29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKworICAgICAg
ICAgICAgaml0LmppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1
bXAgeworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaml0LmJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIHJlZ1Qz
KTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9m
ZnNldE9mT3BlcmFuZCgpKSwgcmVnVDEpOworCiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJM
RUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRl
clRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkp
OwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGlu
ZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAgICAg
ICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwg
cmVnVDEsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAg
ICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAg
ICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4
dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRl
eChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGppdC5uZWczMihyZWdUMSk7CisgICAgICAgICAgICBqaXQuc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
OgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgot
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkK
LSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkp
LCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAg
ICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUg
PT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4K
LSAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwor
ICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fb3BlcmFuZCkpLCByZWdUMyk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3Vy
ZVZhcihzY29wZUdQUiwgcmVnVDMpOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSks
IHJlZ1QzKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdp
c3RlcikpOworICAgICAgICAgICAgaml0LmxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgcmVnVDMp
OworICAgICAgICAgICAgaml0LmFkZFB0cihzY29wZUdQUiwgcmVnVDMpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkpLCByZWdUMCk7CisKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBA
IC0yMzQxLDg2ICsyMjEzLDYzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0g
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0
UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAg
ICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUs
IGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlz
Tm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgq
cmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOwor
ICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJ
bmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgaml0
LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZv
KCkpLCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6
dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAg
IEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFBy
b3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxz
ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwg
dHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGpp
dC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQu
anVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkg
PSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkp
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0
LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmpp
dCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhci5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZq
aXQpOwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICB9CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwor
ICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0
KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAs
IEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxl
KSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0
YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQo
KSkpOwogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVu
ayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfZnJvbV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwg
Q29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNl
LCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2Rl
ZmluZSBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVf
IyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBj
b25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAot
ICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAg
ICByZXR1cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJh
c2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1Jf
RUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRl
ZiBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZN
JiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2Fu
IG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGpp
dC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTI0MjksNyArMjI3OCw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICNlbmRpZgogCiAgICAgdXNpbmcgTWV0
YWRhdGEgPSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBt
ZXRhZGF0YUdQUiA9IHJlZ1Q3OworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSBy
ZWdUNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAg
ICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogCkBAIC0yNDQ5LDcgKzIyOTgsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgQ2FsbCBvcGVyYXRpb24g
PSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBq
aXQuZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKIAotICAgIGppdC5zdG9yZTY0
KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVz
cyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgp
ICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICBqaXQubW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0
ZXIpOwogCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTI0NjksODggKzIzMTgsNzcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIHBhdGNoQnVmZmVyLmxpbmsoanVt
cFRvSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQ
dHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9nZXRfZnJvbV9zY29wZSIpOwogfQotI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlh
YmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19
Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJl
c3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGly
ZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBl
bWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVn
VDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0
Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJl
Z1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJs
ZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci19CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29w
ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgR2V0UHV0SW5mbyBn
ZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7Ci0gICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiog
c3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRy
X3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEu
bV9vcGVyYW5kKTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBSZXNvbHZlVHlwZSBw
cm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZd
IChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBj
b3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBh
bnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3Bl
IGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgLy8g
U3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hl
IHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LgorICAgICAgICAg
ICAgLy8gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRo
ZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOwor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICAg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworCiAgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAKICAgICAgICAg
ICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1
YWwsIHJlZ1QwLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwot
ICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOworICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7
CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwogICAgICAgICAgICAgbmVnUHRy
KHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJl
Z1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAg
c3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAg
ICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgog
ICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9
IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJs
b2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7
Ci0gICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXph
dGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNv
bHZlVHlwZSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDApOwor
CisgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNvZGUubV9nZXRQdXRJbmZv
LmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZh
ciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUg
YmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mg
c3RhdGljYWxseS4KLSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkK
LSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lz
ZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9j
YXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCksIHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KHJlZ1QxKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJl
Y3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJ
bmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0
YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNs
b3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKwor
ICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVt
aXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDEpOworCisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QwKSk7CisKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFy
OgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRT
bG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJl
Z1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3Jp
dGVXYXRjaHBvaW50KHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJbmRleChyZWdUMCwgcmVn
VDIsIFRpbWVzRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
KSk7CisKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6
CkBAIC0yNTY0LDU4ICsyNDAyLDUyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShj
b25zdCBJbnMKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBp
c0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRv
IHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAg
ICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0
aGlzKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKKyAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1cmVW
YXIvIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21waWxl
IHRoaW5ncworICAgIC8vIHRoYXQgd2F5IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2UndmUg
cHJvdmVuIHRoYXQgaXMgdGhlIHR5cGUgd2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJlVmFy
LAorICAgIC8vIGFsbCBDb2RlQmxvY2tzIHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUgQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFyCisg
ICAgLy8gaWYgdGhlIHZhciBpbmplY3Rpb24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYgaXQg
aXMgZmlyZWQsIHRoZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0CisgICAg
Ly8gbWF0dGVyIHdoYXQgdHlwZSB3ZSBhcmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcik7
CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIp
CisgICAgICAgIGVtaXRDb2RlKFJlc29sdmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJv
ZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAg
ICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVs
c2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRh
dGEubV9nZXRQdXRJbmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1Qw
KTsKICAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVn
VDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOwogICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRo
aXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OwogCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7
CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFy
LmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAg
ICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5s
aW5rKHRoaXMpOwogCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zLmxpbmsodGhpcyk7CiAKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAog
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAg
ICAgYnJlYWs7CiAgICAgfQogfQogCkBAIC0yNjI0LDE4ICsyNDU2LDIxIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Nj
b3BlPigpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhi
eXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFy
KSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAg
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJZiBh
bnkgbGlua2VkIENvZGVCbG9jayBzYXcgYSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBDb2Rl
QmxvY2tzIGFyZSBndWFyYW50ZWVkCisgICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZhci4K
ICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0
ZV9lcnJvcik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0VG9TY29wZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJndW1l
bnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CiAgICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAg
ICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CkBAIC0yNjUyLDcgKzI0ODcs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQg
bWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFp
bGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlu
bGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1h
eSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5w
dXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTI3MDEsNyArMjUzNiw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCkBAIC0yNzU5LDcgKzI1OTQsNiBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKQEAg
LTI3NjcsNyArMjYwMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChj
b24KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRl
cm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yODIzLDcg
KzI2NTcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CkBA
IC0yODM5LDExICsyNjcyLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChj
b25zdCAKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUg
bW9zdCBjb21tb24gbW9kZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBp
ZiB3ZSBwcm9maWxlIGl0IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJh
dG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2Rl
KSB7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51
bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJl
TW9kZSkgewogICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOworICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBl
bmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKCh+SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSAmIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BFbnVtZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRh
KCksIHNjcmF0Y2hHUFIpOworICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3Rv
cmU4VG9NZXRhZGF0YShzY3JhdGNoR1BSLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yTmV4dDo6TWV0
YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOworCiAgICAgICAgIGxvYWQzMihB
ZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3Ry
dWN0dXJlSURPZmZzZXQoKSksIGluZGV4R1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBw
ZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CiAKQEAgLTI4ODEsNzggKzI3MjAsODggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9y
ID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKIAotICAg
IGF1dG8gcmVzdWx0R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIg
PSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVudW1l
cmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0
QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIg
PSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0
ZXJzOjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUs
IHNjcmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcHJv
cGVydHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1f
ZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
RW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEo
KSwgc2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZThU
b01ldGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFk
YXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChi
YXNlR1BSKSk7CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4K
LSAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUg
fCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBpc05v
dE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRydXN0
ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVj
dHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
Myk7Ci0gICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1
cmVJRE9mZnNldCgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBz
Y3JhdGNoMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFu
Y2gzMihOb3RFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8gSWYg
aW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdl
LCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0g
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7
Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1wIG91
dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Mo
c2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSkpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7Cisg
ICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMu
YXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAg
IG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3Mo
cmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHJlZ1QzKTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIo
cmVnVDMsIHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwg
c2NyYXRjaDIpOworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihz
Y3JhdGNoMiwgc2NyYXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0
UHJvcGVydHkgPSBvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBzdGF0
aWNfY2FzdDxpbnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJh
c2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSks
IHJlc3VsdEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGlt
ZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2Fz
ZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOwot
ICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVu
T3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRv
ck1ldGFkYXRhKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gp
LCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1l
cmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRoaXMp
OwotICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVz
dGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIEp1
bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJlcGxh
Y2UgdGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJvcGVy
dHlHUFIpOwogCiAgICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAKICAg
ICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4
aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBkb25lQ2FzZXMu
bGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKIH0KIApAQCAtMjk2MSwxMCArMjgxMCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVt
ZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRl
IDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZv
aWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1Bh
dGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUs
IHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRv
cl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENh
c2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjk3Myw3ICsyODIxLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAg
IG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0
YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCBy
ZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAtMzA2Miw2ICsyOTEyLDEz
IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKICAgICBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjplbWl0V3JpdGVC
YXJyaWVyKEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVk
ZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNoR1BSKG93bmVyKSk7
CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVy
U2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5s
aW5rKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzNiw5ICsyMzYsOSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVHZXRCeShKCiAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KGJhc2VDZWxsKSkgewogICAgICAg
ICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CiAg
ICAgICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlQ2VsbAotICAgICAg
ICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1
YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgeworICAgICAgICAgICAgICAgICAg
ICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHVi
SW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7CiAKLSAgICAgICAgICAgICAgICAg
ICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5
TGVuZ3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CisgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJh
dGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VD
ZWxsKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3RoKGxvY2tlcik7CkBAIC0y
NDksOCArMjQ5LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgog
ICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9j
aywgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICB9
IGVsc2UgaWYgKGlzSlNTdHJpbmcoYmFzZUNlbGwpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0
dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAg
ICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChzdHViSW5mbykpIHsK
LSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgICAg
ICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHVi
SW5mbykpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0g
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywg
YXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHViSW5mby5pbml0U3RyaW5nTGVuZ3RoKGxvY2tlcik7CkBAIC0zMDQsNyAr
MzA0LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAg
ICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQogICAgICAgICAgICAgICAgICYmICFz
dHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAgICAg
ICYmICFsb2FkVGFyZ2V0RnJvbVByb3h5KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0
ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vzcyhz
dHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAg
ICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlBy
b3BlcnR5QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAg
ICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVNlbGZQYXRjaCwgc3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVp
ZCgpKSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSk7CkBAIC03MzEsMTEgKzczMSwxMSBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShKCiAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLT5k
aWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENh
Y2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5H
ZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkp
CisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJv
cGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCiAg
ICAgICAgICAgICAgICAgICAgICYmICFvbGRTdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKQogICAgICAgICAgICAgICAgICAgICAmJiAhaXNQcm94eSkgewogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5l
ID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9s
ZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJv
b2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVy
dHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNo
LCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZh
bHVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oc2xvdCwg
cHV0QnlLaW5kLCBwdXRLaW5kKSk7CkBAIC0xMTMyLDcgKzExMzIsNyBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAogICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJh
c2UoKSA9PSBiYXNlCiAgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCiAg
ICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlKTsKKyAgICAg
ICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU2VsZkluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpJbkJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBp
ZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOwpAQCAtMTU1Miw3ICsxNTUyLDcgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2Fs
bChWTSYgdm0sIENhbGxMaW5rSQogCiB2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNz
ZW1ibHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0
KCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5r
aW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7CiAgICAgCiAg
ICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMjQgKzQzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQotewotICAgIEND
YWxsSGVscGVycyBqaXQ7Ci0KLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7Ci0KLSAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBq
aXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwotCi0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9w
ZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7Ci0KLSAgICBqaXQuanVtcFRvRXhj
ZXB0aW9uSGFuZGxlcih2bSk7Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBw
YXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uIik7Ci19Ci0K
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uV2l0
aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMg
aml0OwpAQCAtNzcsMjQgKzU5LDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBoYQogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgImhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFjayIpOwogfQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNB
bmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQotewotICAgIENDYWxsSGVscGVycyBq
aXQ7Ci0KLSNpZiBDUFUoWDg2XzY0KQotICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVzcCk7Ci0j
ZWxpZiBDUFUoQVJNNjQpCi0gICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50
ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIpOwotI2VuZGlmCi0KLSAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgY29udGludWF0aW9uID0gaml0Lmp1bXAoKTsKLQotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2Zp
bGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIGF1dG8gaGFuZGxlciA9IHZtLmdldENUSVN0dWIoaGFu
ZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNvbnRpbnVhdGlv
biwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsK
LSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJw
b3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uIik7Ci19Ci0KIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IoVk0m
IHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkBAIC0xMzcsNiArMTAxLDQyIEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2gKIAogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKKworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bS50b3BFbnRyeUZyYW1lKTsKKworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cigmdm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGppdC5wcmVwYXJlQ2Fs
bE9wZXJhdGlvbih2bSk7CisKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uID0gaml0
LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKworICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVy
KHZtKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxp
bmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXIpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRpb24iKTsKK30KKworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxl
RXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisj
aWYgQ1BVKFg4Nl82NCkKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjplc3ApOworI2VsaWYgQ1BV
KEFSTTY0KQorICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0
ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRy
YUNUSVRodW5rKTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKGhhbmRsZUV4Y2Vw
dGlvbkdlbmVyYXRvcik7CisgICAgcGF0Y2hCdWZmZXIubGluayhjb250aW51YXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAicG9wVGh1bmtT
dGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUYWdUeXBlPgogaW5saW5lIHZvaWQgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgcG9pbnRlckdQUiwgVGFnVHlwZSB0YWcpCiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDEyICszNywxMiBAQCBjbGFzcyBWTTsKIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRs
ZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tHZW5lcmF0b3IoVk0m
KTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1By
ZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogCiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRp
b25HZW5lcmF0b3IoVk0mKTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0mKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQnl0ZWNv
ZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNs
dWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lu
bGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
RXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKQEAgLTM3MCwxMyArMzcx
LDIyIEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYKICAgICAKICAg
ICBjb2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAKKyAgICBp
ZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAg
ICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51
bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlKSB7CisgICAgICAgICAg
ICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJl
bGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KS0+aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+aml0TmV4
dEludm9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsK
ICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUi
LCAoInRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRF
eGVjdXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgSklUV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0
U3RhdGUgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbFJl
YWR5UGxhbnNGb3JWTSh2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbk1vZGU6OkJhc2VsaW5lKSk7CisgICAgSklUV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3Rh
dGUgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbFJlYWR5
UGxhbnNGb3JWTSh2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT51bmxpbmtlZENvZGVC
bG9jaygpLCBKSVRDb21waWxhdGlvbk1vZGU6OkJhc2VsaW5lKSk7CiAKICAgICBpZiAoY29kZUJs
b2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKICAgICAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIENvZGUgd2FzIGFscmVhZHkgY29tcGls
ZWQuIik7CkBAIC00NjYsOCArNDc2LDEwIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3Ny
KQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3Bz
Rm9yRnV6emluZygpICYmIGNvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5n
RWFybHlSZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bS5nZXRMb29wSGlu
dEV4ZWN1dGlvbkNvdW50ZXIocGMpOwogICAgICAgICAqcHRyICs9IGNvZGVCbG9jay0+bGxpbnRF
eGVjdXRlQ291bnRlcigpLm1fYWN0aXZlVGhyZXNob2xkOwotICAgICAgICBpZiAoKnB0ciA+PSBP
cHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkKKyAgICAgICAgaWYg
KCpwdHIgPj0gT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpIHsK
KyAgICAgICAgICAgIGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShDb25jdXJyZW50SlNMb2NrZXIo
Y29kZUJsb2NrLT5tX2xvY2spKTsgLy8gV2UncmUgcmV0dXJuaW5nIHRvIHRoZSBPU1IgZW50cnkg
Y29kZSBoZXJlLCB3aGljaCBleHBlY3RzIHRoYXQgbV9qaXREYXRhIGlzIG5vdCBudWxsLgogICAg
ICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhMTEludDo6ZnV6emVyUmV0dXJuRWFybHlGcm9tTG9v
cEhpbnRFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIGNhbGxGcmFtZS0+
dG9wT2ZGcmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTAxMiwx
MCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAog
bWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQog
ICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1h
Y3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNy
byB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1f
Yml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEsIHQyKQogICAgICAg
ICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0s
IEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2Rl
TmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGluIHQxLCBzcmNEc3Qg
aW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAgICAgICAgIHN0b3Jl
aSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2Zp
bGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAgICBkaXNwYXRjaCgpCiAK
ICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBsbGludE9wV2l0aE1l
dGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBt
ZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0g
ICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5h
cnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1ldGFkYXRhKHQ1LCB0
MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNp
emUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BOZWdhdGVTcmNOb3RJ
bnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0Mgot
ICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlB
cml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQzKQogICAgIHJldHVy
biAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJpYSB0MSwgTG93ZXN0
VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQotICAgIHVwZGF0ZUFy
aXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2Zp
bGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAgIHJldHVybih0MSwg
dDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAgZW5kKQogCiBtYWNy
byBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9w
ZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJvZmlsZSh0eXBlKQot
ICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFBy
b2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAg
ICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMsIHQyKQogICAgICAgICBn
ZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21T
dG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyhz
aXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcsIC5vcDFOb3RJbnQK
ICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0gICAgICAgIGFyaXRoUHJv
ZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBnZXQo
bV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDMsIHQxLCB0MCwg
LnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsxMTI0LDEyIEBAIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYmlhIHQyLCBM
b3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAub3AxTm90SW50T3Ay
RG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQ
cm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQ
cm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDQpCiAgICAg
ICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFO
b3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0gICAgICAgIGFyaXRo
UHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQ0
KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAgICAg
ZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3Vz
dG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmlu
aXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAg
ICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFnLCAuc2xvdwotICAg
ICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVC
aW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1
LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQog
ICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNp
b24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEsMTMgQEAgbWFjcm8gY2hl
Y2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSBQQywgYTEKICAgICAgICAg
ICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBidHB6IHIwLCAucmVjb3Zl
cgotCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisgICAgICAgICAgICAjIEJhc2VsaW5lIHVz
ZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFudCBwb29sLgorICAgICAg
ICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxv
Y2s6Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6OkpJVERh
dGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwogICAgICAgICAgICAgaWYgQVJNNjRFCiAg
ICAgICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpT
Q0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6Omxvb3BPU1JFbnRyeSkgKiBQdHJTaXpl
LCBhMgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBK
U0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Ao
am5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1
Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2Rl
TmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRh
LCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAg
ICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUg
KyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQKLQogICAgICAgICBn
ZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQxCiAgICAgICAg
IG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3MCw3IEBAIG1hY3JvIHByZU9wKG9wY29k
ZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MSwgLnNs
b3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3JlcSB0MSwgW2Nmciwg
dDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAg
ICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50
LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTEzNCwxMSAr
MTEzNSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdh
dGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotCi0gICAg
bWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0
ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0
MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikKQEAgLTExNDYsMTIg
KzExNDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLAogICAg
IGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQzCiAgICAgb3Jx
IG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQor
ICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQx
LCB0MikKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAgYnRxeiB0MywgbnVt
YmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAwMDAwMDAsIHQzCi0g
ICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFy
eUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0MSwgdDIpCiAgICAg
cmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE2MCw2IEBAIG1hY3Jv
IGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGludE9wV2l0aE1ldGFk
YXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQogCi0gICAg
ICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2Jp
dHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3JocywgdDApCiAgICAgICAgIGdl
dChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQx
KQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVO
YW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9u
QW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2Zp
bGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3Qs
IEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAu
b3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0
b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKICAg
ICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQotICAgICAgICBw
cm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDIp
CiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AySW50OgotICAg
ICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5
QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDIp
CiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdl
dChtX2RzdCwgdDIpCkBAIC0xMjA0LDkgKzExOTYsOSBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0
b3JlKG9wY29kZU5hbWUsIG9wCiAKICAgICAub3AyTm90SW50OgogICAgICAgICAjIEZpcnN0IG9w
ZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3Qu
Ci0gICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNs
b3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwg
dDUsIHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAg
ICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKQEAgLTE1MTgs
NyArMTUxMCw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X2lkX2RpcmVjdCwKIGVu
ZCkKIAogIyBUaGUgYmFzZSBvYmplY3QgaXMgZXhwZWN0ZWQgaW4gdDMKLW1hY3JvIHBlcmZvcm1H
ZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwgbW9kZU1ldGFkYXRhTmFtZSwgdmFsdWVQcm9maWxl
TmFtZSwgc2xvd0xhYmVsLCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuKQorbWFjcm8gcGVyZm9ybUdl
dEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LCBtb2RlTWV0YWRhdGFOYW1lLCB2YWx1ZVByb2ZpbGVO
YW1lLCBzbG93TGFiZWwsIHNpemUsIG1ldGFkYXRhLCByZXR1cm4sIGRvQXJyYXlQcm9maWxlKQog
ICAgIG1ldGFkYXRhKHQyLCB0MSkKICAgICBsb2FkYiAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
OiVtb2RlTWV0YWRhdGFOYW1lJS5tb2RlW3QyXSwgdDEKIApAQCAtMTU0Niw3ICsxNTM4LDcgQEAg
bWFjcm8gcGVyZm9ybUdldEJ5SURIZWxwZXIob3Bjb2RlU3RydWN0LAogLm9wR2V0QnlJZEFycmF5
TGVuZ3RoOgogICAgIGJibmVxIHQxLCBjb25zdGV4cHIgR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3Ro
LCAub3BHZXRCeUlkVW5zZXQKICAgICBtb3ZlIHQzLCB0MAotICAgIGFycmF5UHJvZmlsZSglb3Bj
b2RlU3RydWN0JTo6TWV0YWRhdGE6OiVtb2RlTWV0YWRhdGFOYW1lJS5hcnJheUxlbmd0aE1vZGUu
YXJyYXlQcm9maWxlLCB0MCwgdDIsIHQ1KQorICAgIGRvQXJyYXlQcm9maWxlKHQwLCB0MiwgdDUs
IHQxKQogICAgIGJ0aXogdDAsIElzQXJyYXksIHNsb3dMYWJlbAogICAgIGJ0aXogdDAsIEluZGV4
aW5nU2hhcGVNYXNrLCBzbG93TGFiZWwKICAgICBsb2FkQ2FnZWRKU1ZhbHVlKEpTT2JqZWN0Ojpt
X2J1dHRlcmZseVt0M10sIHQwLCB0MSkKQEAgLTE1NjgsNyArMTU2MCwxMCBAQCBlbmQKIGxsaW50
T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X2lkLCBPcEdldEJ5SWQsIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIGdldChtX2Jhc2UsIHQwKQogICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGVDZWxsKHNpemUsIHQwLCB0MywgLm9wR2V0QnlJZFNsb3cpCi0g
ICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BHZXRCeUlkLCBtX21vZGVNZXRhZGF0YSwgbV9wcm9m
aWxlLCAub3BHZXRCeUlkU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHJldHVybikKKyAgICBwZXJmb3Jt
R2V0QnlJREhlbHBlcihPcEdldEJ5SWQsIG1fbW9kZU1ldGFkYXRhLCBtX3Byb2ZpbGUsIC5vcEdl
dEJ5SWRTbG93LCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuLAorICAgICAgICBtYWNybyAoY2VsbEFu
ZEluZGV4aW5nVHlwZSwgbWV0YWRhdGEsIHNjcmF0Y2gxLCBzY3JhdGNoMikKKyAgICAgICAgICAg
IGFycmF5UHJvZmlsZShPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptX2FycmF5UHJvZmlsZSwgY2VsbEFu
ZEluZGV4aW5nVHlwZSwgbWV0YWRhdGEsIHNjcmF0Y2gxKQorICAgICAgICBlbmQpCiAKIC5vcEdl
dEJ5SWRTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2dldF9ieV9pZCkK
QEAgLTMwMDIsNyArMjk5Nyw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3Jfb3Bl
biwgT3AKIAogICAgIGxvYWRWYXJpYWJsZShnZXQsIG1faXRlcmF0b3IsIHQzKQogICAgIGJ0cW56
IHQzLCBub3RDZWxsTWFzaywgLml0ZXJhdG9yT3BlbkdlbmVyaWNHZXROZXh0U2xvdwotICAgIHBl
cmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JPcGVuLCBtX21vZGVNZXRhZGF0YSwgbV9uZXh0
UHJvZmlsZSwgLml0ZXJhdG9yT3BlbkdlbmVyaWNHZXROZXh0U2xvdywgc2l6ZSwgbWV0YWRhdGEs
IHN0b3JlTmV4dEFuZERpc3BhdGNoKQorICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0
b3JPcGVuLCBtX21vZGVNZXRhZGF0YSwgbV9uZXh0UHJvZmlsZSwgLml0ZXJhdG9yT3BlbkdlbmVy
aWNHZXROZXh0U2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlTmV4dEFuZERpc3BhdGNoLCBtYWNy
byhhLCBiLCBjLCBkKSBlbmQpCiAKIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3c6CiAg
ICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9nZXRfbmV4dCkK
QEAgLTMwNjEsNyArMzA1Niw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3JfbmV4
dCwgT3AKIAogICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fdmFsdWUsIHQzKQogICAgIGJ0cW56IHQz
LCBub3RDZWxsTWFzaywgLmdldERvbmVTbG93Ci0gICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJ
dGVyYXRvck5leHQsIG1fZG9uZU1vZGVNZXRhZGF0YSwgbV9kb25lUHJvZmlsZSwgLmdldERvbmVT
bG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1ZSkKKyAgICBwZXJm
b3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV9kb25lTW9kZU1ldGFkYXRhLCBtX2Rv
bmVQcm9maWxlLCAuZ2V0RG9uZVNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZURvbmVBbmRKbXBU
b0dldFZhbHVlLCBtYWNybyhhLCBiLCBjLCBkKSBlbmQpCiAKIC5nZXREb25lU2xvdzoKICAgICBj
YWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2dldF9kb25lKQpAQCAt
MzA4Niw3ICszMDgxLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0LCBP
cAogICAgICMgUmVsb2FkIHRoZSBuZXh0IHJlc3VsdCB0bXAgc2luY2UgdGhlIGdldF9ieV9pZCBh
Ym92ZSBtYXkgaGF2ZSBjbG9iYmVyZWQgdDMuCiAgICAgbG9hZFZhcmlhYmxlKGdldCwgbV92YWx1
ZSwgdDMpCiAgICAgIyBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBpdGVyYXRvciByZXN1
bHQgaXMgYSBjZWxsIGhlcmUgc2luY2Ugd2Ugd2lsbCBoYXZlIHRocm93biBhbiBlcnJvciBiZWZv
cmUuCi0gICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck5leHQsIG1fdmFsdWVNb2Rl
TWV0YWRhdGEsIG1fdmFsdWVQcm9maWxlLCAuZ2V0VmFsdWVTbG93LCBzaXplLCBtZXRhZGF0YSwg
c3RvcmVWYWx1ZUFuZERpc3BhdGNoKQorICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0
b3JOZXh0LCBtX3ZhbHVlTW9kZU1ldGFkYXRhLCBtX3ZhbHVlUHJvZmlsZSwgLmdldFZhbHVlU2xv
dywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlVmFsdWVBbmREaXNwYXRjaCwgbWFjcm8oYSwgYiwgYywg
ZCkgZW5kKQogCiAuZ2V0VmFsdWVTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19w
YXRoX2l0ZXJhdG9yX25leHRfZ2V0X3ZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDIwLDcgKzE0MjAsOCBAQCBlbmQKIAogbWFjcm8gY2hlY2tT
d2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlvbikKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
dDAKLSAgICBiYWRkaXMgaW5jcmVtZW50LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRl
ciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCisg
ICAgbG9hZHAgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDBdLCB0MAorICAgIGJh
ZGRpcyBpbmNyZW1lbnQsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwg
LmNvbnRpbnVlCiAgICAgYWN0aW9uKCkKICAgICAuY29udGludWU6CiBlbmQKQEAgLTE1MDMsNyAr
MTUwNCw4IEBAIG1hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2MKICAgICBj
b2RlQmxvY2tHZXR0ZXIodDEpCiAgICAgY29kZUJsb2NrU2V0dGVyKHQxKQogICAgIGlmIG5vdCAo
Q19MT09QIG9yIENfTE9PUF9XSU4pCi0gICAgICAgIGJhZGRpcyA1LCBDb2RlQmxvY2s6Om1fbGxp
bnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3Qx
XSwgLmNvbnRpbnVlCisgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3Vu
dGVyW3QxXSwgdDAKKyAgICAgICAgYmFkZGlzIDUsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6
bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgICAgIGlmIEpTVkFMVUU2NAogICAgICAgICAg
ICAgbW92ZSBjZnIsIGEwCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQpAQCAtMTYxNywxNCArMTYx
OSwxNCBAQCBtYWNybyBmdW5jdGlvbkluaXRpYWxpemF0aW9uKHByb2ZpbGVBcmdTCiAgICAgIyBv
cHRpbWFsIHdheSBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgbW9yZSB0aGFuIGZpdmUgcmVn
aXN0ZXJzIGF2YWlsYWJsZQogICAgICMgZm9yIGFyYml0cmFyeSB1c2UgaW4gdGhlIGludGVycHJl
dGVyLgogICAgIGxvYWRpIENvZGVCbG9jazo6bV9udW1QYXJhbWV0ZXJzW3QxXSwgdDAKLSAgICBh
ZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAgIyBVc2UgYWRkaSBiZWNhdXNlIHRoYXQncyB3aGF0IGhh
cyB0aGUgcGVlcGhvbGUKKyAgICBhZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAKICAgICBhc3NlcnQo
bWFjcm8gKG9rKSBicGd0ZXEgdDAsIDAsIG9rIGVuZCkKICAgICBidHB6IHQwLCAuYXJndW1lbnRQ
cm9maWxlRG9uZQogICAgIGxvYWRwIENvZGVCbG9jazo6bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMg
KyBGaXhlZFZlY3Rvcjo6bV9zdG9yYWdlICsgUmVmQ291bnRlZEFycmF5OjptX2RhdGFbdDFdLCB0
MwogICAgIGJ0cHogdDMsIC5hcmd1bWVudFByb2ZpbGVEb25lICMgV2hlbiB3ZSBjYW4ndCBKSVQs
IHdlIGRvbid0IGFsbG9jYXRlIGFueSBhcmd1bWVudCB2YWx1ZSBwcm9maWxlcy4KICAgICBtdWxw
IHNpemVvZiBWYWx1ZVByb2ZpbGUsIHQwLCB0MiAjIEFhYWFhaGhoaCEgTmVlZCBzdHJlbmd0aCBy
ZWR1Y3Rpb24hCiAgICAgbHNoaWZ0cCAzLCB0MCAjIG9mZnNldCBvZiBsYXN0IEpTVmFsdWUgYXJn
dW1lbnRzIG9uIHRoZSBzdGFjay4KLSAgICBhZGRwIHQyLCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9m
IFZhbHVlUHJvZmlsZSBhcnJheSBpbiBDb2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVz
LgorICAgIGFkZHAgdDIsIHQzICMgcG9pbnRlciB0byBlbmQgb2YgVmFsdWVQcm9maWxlIGFycmF5
IGluIHRoZSB2YWx1ZSBwcm9maWxlIGFycmF5LgogLmFyZ3VtZW50UHJvZmlsZUxvb3A6CiAgICAg
aWYgSlNWQUxVRTY0CiAgICAgICAgIGxvYWRxIFRoaXNBcmd1bWVudE9mZnNldCAtIDggKyBwcm9m
aWxlQXJnU2tpcCAqIDhbY2ZyLCB0MF0sIHQyCkBAIC0yNTYzLDYgKzI1NjUsMTcgQEAgbWFjcm8g
bm90U3VwcG9ydGVkKCkKICAgICBlbmQKIGVuZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJpdGhQ
cm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAg
ICBvcmggdHlwZSwgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKK21hY3Jv
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0
ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVb
bWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRz
W3RlbXBdCitlbmQKKwogLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0X1dJ
TiBjb25kaXRpb24gaGVyZSwgc2luY2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUgZmFs
c2Ugb24gV2luZG93cwogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwMzcxNgogaWYgV0VCQVNTRU1CTFkgYW5kIG5vdCBYODZfNjRfV0lOCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFi
bGVJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDEwIEBAIHB1YmxpYzoK
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyKCkgPSBkZWZhdWx0OwogCiAgICAgc3RhdGljIGlubGlu
ZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21DZWxsKEpTQ2VsbCogaWRlbnRpZmllcik7
Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAg
c3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2Nr
VHlwZSosIGNvbnN0IElkZW50aWZpZXImKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJs
b2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBVbmlxdWVkU3RyaW5n
SW1wbCopOwogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21SYXdCaXRzKHVpbnRwdHJfdCByYXdC
aXRzKSB7IHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHJhd0JpdHMpOyB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRl
bnRpZmllcklubGluZXMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsMTIgKzM1LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlm
aWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCiB7CiAg
ICAgcmV0dXJuIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhjb2RlQmxvY2ss
IGkuaW1wbCgpKTsKIH0KIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayog
Y29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQordGVtcGxhdGUgPHR5cGVuYW1lIENv
ZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSog
Y29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIEFTU0VSVF9VTlVTRUQo
Y29kZUJsb2NrLCBjb2RlQmxvY2stPmhhc0lkZW50aWZpZXIodWlkKSk7CiAgICAgcmV0dXJuIENh
Y2hlYWJsZUlkZW50aWZpZXIodWlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlZFR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgi
CiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCdWlsdGluTmFtZXMu
aCIKICNpbmNsdWRlICJCeXRlY29kZUNhY2hlRXJyb3IuaCIKICNpbmNsdWRlICJCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaCIKQEAgLTE5MTgsNiArMTkxOSw4IEBAIHB1YmxpYzoKIAogICAgIHVu
c2lnbmVkIG51bVZhbHVlUHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bVZhbHVlUHJvZmls
ZXM7IH0KICAgICB1bnNpZ25lZCBudW1BcnJheVByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1BcnJheVByb2ZpbGVzOyB9CisgICAgdW5zaWduZWQgbnVtQmluYXJ5QXJpdGhQcm9maWxlcygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtQmluYXJ5QXJpdGhQcm9maWxlczsgfQorICAgIHVuc2lnbmVk
IG51bVVuYXJ5QXJpdGhQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVW5hcnlBcml0aFBy
b2ZpbGVzOyB9CiAKIHByaXZhdGU6CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1fdGhpc1JlZ2lzdGVy
OwpAQCAtMTk1Miw2ICsxOTU1LDggQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fbnVtVmFs
dWVQcm9maWxlczsKICAgICB1bnNpZ25lZCBtX251bUFycmF5UHJvZmlsZXM7CisgICAgdW5zaWdu
ZWQgbV9udW1CaW5hcnlBcml0aFByb2ZpbGVzOworICAgIHVuc2lnbmVkIG1fbnVtVW5hcnlBcml0
aFByb2ZpbGVzOwogCiAgICAgQ2FjaGVkTWV0YWRhdGFUYWJsZSBtX21ldGFkYXRhOwogCkBAIC0y
MTYwLDYgKzIxNjUsOCBAQCBBTFdBWVNfSU5MSU5FIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtl
CiAgICAgLCBtX3JhcmVEYXRhKGNhY2hlZENvZGVCbG9jay5yYXJlRGF0YShkZWNvZGVyKSkKICAg
ICAsIG1fdmFsdWVQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVtVmFsdWVQcm9maWxlcygpKQog
ICAgICwgbV9hcnJheVByb2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1BcnJheVByb2ZpbGVzKCkp
CisgICAgLCBtX2JpbmFyeUFyaXRoUHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bUJpbmFyeUFy
aXRoUHJvZmlsZXMoKSkKKyAgICAsIG1fdW5hcnlBcml0aFByb2ZpbGVzKGNhY2hlZENvZGVCbG9j
ay5udW1VbmFyeUFyaXRoUHJvZmlsZXMoKSkKIHsKIH0KIApAQCAtMjMzNyw2ICsyMzQ0LDggQEAg
QUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVCbG9jazxDb2RlQgogICAgIG1faGFzQ2hlY2tw
b2ludHMgPSBjb2RlQmxvY2subV9oYXNDaGVja3BvaW50czsKICAgICBtX251bVZhbHVlUHJvZmls
ZXMgPSBjb2RlQmxvY2subV92YWx1ZVByb2ZpbGVzLnNpemUoKTsKICAgICBtX251bUFycmF5UHJv
ZmlsZXMgPSBjb2RlQmxvY2subV9hcnJheVByb2ZpbGVzLnNpemUoKTsKKyAgICBtX251bUJpbmFy
eUFyaXRoUHJvZmlsZXMgPSBjb2RlQmxvY2subV9iaW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsK
KyAgICBtX251bVVuYXJ5QXJpdGhQcm9maWxlcyA9IGNvZGVCbG9jay5tX3VuYXJ5QXJpdGhQcm9m
aWxlcy5zaXplKCk7CiAKICAgICBtX21ldGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2su
bV9tZXRhZGF0YS5nZXQoKSk7CiAgICAgbV9yYXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJs
b2NrLm1fcmFyZURhdGEuZ2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00ODAsNyArNDgwLDcgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3df
cGF0aF90bwogI2lmIEVOQUJMRShKSVQpCiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFByb2ZpbGVG
b3JVbmFyeUFyaXRoT3AoT3BOZWdhdGU6Ok1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZSByZXN1
bHQsIEpTVmFsdWUgb3BlcmFuZCkKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9
IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxl
ID0gKm1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOwogICAgIHByb2ZpbGUub2JzZXJ2ZUFyZyhvcGVy
YW5kKTsKICAgICBBU1NFUlQocmVzdWx0LmlzTnVtYmVyKCkgfHwgcmVzdWx0LmlzQmlnSW50KCkp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
bkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsy
ODksOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZlJh
cmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9y
YXJlRGF0YSk7IH0KICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFzU3RyaW5n
SW5SYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihSYXJlRGF0YSwgbV9hc1N0cmlu
Zyk7IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNh
bGwoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVC
bG9ja0ZvckNhbGwpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVj
dXRhYmxlLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7IH0KIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICsz
MDksNiBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoSW50MzIs
IGV2YWxUaHJlc2hvbGRNdWx0aXBsaWVyLCAxMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihV
bnNpZ25lZCwgbWF4aW11bUV2YWxDYWNoZWFibGVTb3VyY2VMZW5ndGgsIDI1NiwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgXAotICAgIHYoQm9vbCwgcmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0
d2VlbkNoZWNrcG9pbnRzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJbnQzMiwg
bWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvckJhc2VsaW5lLCAxMDAw
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRz
QmV0d2VlbkNoZWNrcG9pbnRzRm9yVXBwZXJUaWVycywgNTAwMDAsIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIFwKQEAgLTUzMiw2ICs1MzEsNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1l
bW9yeSgpOwogICAgIHYoQm9vbCwgdXNlRGF0YUlDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihCb29sLCB1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQsIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ1NoYXJpbmcsIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKKyAgICB2KEJvb2wsIHVzZUJhc2VsaW5lSklUQ29kZVNoYXJpbmcsIHRydWUsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICAvKiBGZWF0dXJlIEZsYWdzICovXAogICAgIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1
dGFibGUuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDcgKzM5Niw5
IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGkKICAgICBpZiAoT3B0
aW9uczo6dmFsaWRhdGVCeXRlY29kZSgpKQogICAgICAgICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7
CiAKLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKKyAgICBpZiAoUmVmUHRyPEJhc2VsaW5l
SklUQ29kZT4gYmFzZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1f
dW5saW5rZWRCYXNlbGluZUNvZGUpCisgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5r
ZWRCYXNlbGluZUNvZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisgICAgZWxzZSBp
ZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKICAgICAgICAgc2V0dXBMTEludChjb2RlQmxvY2spOwog
ICAgIGVsc2UKICAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCShy
ZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRU
aWVyVXBDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgcHVibGljOgog
ICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCgpCiAgICAgewogICAgICAgICBpZiAoT3B0aW9u
czo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQo
T3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRp
bWl6ZUFmdGVyV2FybVVwKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXROZXdUaHJl
c2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxs
cHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JP
TUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0KIAogICAgIGJvb2wgY2hlY2tJZk9wdGlt
aXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtNjUsOSArNjUsOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBvcHRpbWl6ZVNvb24oKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTElu
dFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5l
d1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZVNvb24oKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRG
b3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hv
bGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAogICAg
IHN0cnVjdCBPU1JFbnRyeURhdGEgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVRpZXJVcENvdW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtVGllclVwQ291bnQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIFRpZXJVcENv
dW50OjpUaWVyVXBDb3VudCgpCiB7Ci0gICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgc2V0TmV3VGhy
ZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiB9
CiAKIFRpZXJVcENvdW50Ojp+VGllclVwQ291bnQoKSA9IGRlZmF1bHQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRl
cldhcm1VcCh1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xu
SWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemlu
ZyBhZnRlciB3YXJtLXVwLiIpOwotICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhy
ZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgc2V0
TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAo
KSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hl
ZCgpCkBAIC05MCwxNCArOTAsMTQgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVOZXh0SW52
b2NhdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xu
SWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemlu
ZyBuZXh0IGludm9jYXRpb24uIik7Ci0gICAgICAgIHNldE5ld1RocmVzaG9sZCgwLCBudWxscHRy
KTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKDApOwogICAgIH0KIAogICAgIHZvaWQgb3B0aW1p
emVTb29uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5J
ZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5n
IHNvb24uIik7CiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIGFkanVzdG1lbnQgb25jZSB3ZSBnZXQg
bW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3YXNtIGZ1bmN0aW9ucy4KLSAgICAgICAgc2V0TmV3VGhy
ZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpLCBudWxscHRyKTsK
KyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXpl
U29vbigpKTsKICAgICB9CiAKICAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2Vk
T25Db21waWxhdGlvblJlc3VsdCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBDb21waWxhdGlvblJl
c3VsdCByZXN1bHQpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL1dURi93dGYv
QmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDIwIEBAIHB1YmxpYzoKICAgICAgICAg
b3RoZXIubV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgorICAgIEJhZyYgb3BlcmF0b3I9KEJhZzxULCBVPiYmIG90aGVyKQorICAgIHsKKyAgICAgICAg
aWYgKHVud3JhcHBlZEhlYWQoKSA9PSBvdGhlci51bndyYXBwZWRIZWFkKCkpCisgICAgICAgICAg
ICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAgQmFnIGRlc3Ryb3k7CisgICAgICAgIGRlc3Ryb3ku
bV9oZWFkID0gdW53cmFwcGVkSGVhZCgpOworICAgICAgICBtX2hlYWQgPSBvdGhlci51bndyYXBw
ZWRIZWFkKCk7CisgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKwogICAgIH5CYWcoKQogICAgIHsKICAgICAgICAgY2xlYXIoKTsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL1BhY2tlZC5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4NiwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9Ci0gICAgVCYgb3BlcmF0
b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VSA9IFQ+CisgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfdm9pZF92PFU+LCBV
Jj46OnR5cGUgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisKICAgICBib29s
IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFnZXQoKTsgfQogCiAgICAgLy8gVGhpcyBjb252
ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0IG5v
dCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRl
c3RzCShyZXZpc2lvbiAyODI2NzUpCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRl
c3RzCSh3b3JraW5nIGNvcHkpCkBAIC03NzYsMTcgKzc3NiwxOCBAQCBlbmQKIAogIyBGSVhNRTog
bmVlZCB0byBmaXggaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODcw
MyB0byBlbmFibGUgdGhpcyBvbiBMaW51eC9NSVBTLgogZGVmIHJ1bkJ5dGVjb2RlQ2FjaGVJbXBs
KG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucywgKmFkZGl0aW9uYWxFbnYpCi0gICAgaWYgKCRo
b3N0T1MgPT0gImRhcndpbiIpCi0gICAgICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1jYWNo
ZSIKLSAgICBlbHNpZiAoJGhvc3RPUyA9PSAibGludXgiICYmICRhcmNoaXRlY3R1cmUgIT0gIm1p
cHMiKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhYWFgiCi0gICAg
ZWxzZQotICAgICAgICBza2lwCi0gICAgICAgIHJldHVybgotICAgIGVuZAorICAgICMgT09QUwor
ICAgICNpZiAoJGhvc3RPUyA9PSAiZGFyd2luIikKKyAgICAjICAgIGZpbGVUZW1wbGF0ZSA9ICJi
eXRlY29kZS1jYWNoZSIKKyAgICAjZWxzaWYgKCRob3N0T1MgPT0gImxpbnV4IiAmJiAkYXJjaGl0
ZWN0dXJlICE9ICJtaXBzIikKKyAgICAjICAgIGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1jYWNo
ZVhYWFhYWCIKKyAgICAjZWxzZQorICAgICMgICAgc2tpcAorICAgICMgICAgcmV0dXJuCisgICAg
I2VuZAogCi0gICAgb3B0aW9ucyA9IEJBU0VfT1BUSU9OUyArIEZUTF9PUFRJT05TICsgb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVkT3B0aW9ucwotICAg
IGFkZFJ1bkNvbW1hbmQoImJ5dGVjb2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxwZXJzICsg
ImJ5dGVjb2RlLWNhY2hlLXRlc3QtaGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRlLnRvX3Ms
ICp2bUNvbW1hbmQsICRiZW5jaG1hcmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5k
bGVyLCBzaW1wbGVFcnJvckhhbmRsZXIsICphZGRpdGlvbmFsRW52KQorICAgICNvcHRpb25zID0g
QkFTRV9PUFRJT05TICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMg
KyAkdGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25zCisgICAgI2FkZFJ1bkNvbW1hbmQoImJ5dGVj
b2RlLWNhY2hlIiwgWyJzaCIsIChwYXRoVG9IZWxwZXJzICsgImJ5dGVjb2RlLWNhY2hlLXRlc3Qt
aGVscGVyLnNoIikudG9fcywgZmlsZVRlbXBsYXRlLnRvX3MsICp2bUNvbW1hbmQsICRiZW5jaG1h
cmsudG9fc10gKyBvcHRpb25zLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRs
ZXIsICphZGRpdGlvbmFsRW52KQogZW5kCiAKIGRlZiBydW5CeXRlY29kZUNhY2hlKCpvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439111</attachid>
            <date>2021-09-23 17:56:15 -0700</date>
            <delta_ts>2021-09-23 18:09:42 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>550116</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkBAIC0xOTg1LDE0ICsxOTg1LDEwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzL3Nl
dHRlcnMuCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsOwogCisKICAg
ICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxjdWxhdGlvbnMgb2Ygd2hl
dGhlciBvciBub3Qgd2UncmUgYW4KICAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRsaW5nIGNhbGwg
c2l0ZS4KLSAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlOwotI2lm
IENQVShBUk02NCkKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAg
ICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0j
ZW5kaWYKLSAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3Rh
dGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChleHRyYVJlZ2lz
dGVyc1RvUHJlc2VydmUpOworICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3Rh
dGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
KCk7CiAKICAgICAgICAgYXV0byByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwg
PSBbJl0oQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlJiBzcGlsbFN0YXRlLCBib29s
IGNhbGxIYXNSZXR1cm5WYWx1ZSkgewogICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZG9udFJlc3Rv
cmU7CkBAIC0yMDc5LDggKzIwNzUsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChB
Y2Nlc3NHZW5lCiAgICAgICAgICAgICBBU1NFUlQoIShudW1iZXJPZlJlZ3NGb3JDYWxsICUgc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkpOwogICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZC
eXRlc0ZvckNhbGwgPSBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKTsKIAotICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51
bWJlck9mQnl0ZXNGb3JDYWxsID0KLSAgICAgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsK
IAogICAgICAgICAgICAgaml0LnN1YlB0cigKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLApAQCAtMjEzOCw2ICsy
MTMzLDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogCiAgICAg
ICAgICAgICBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0ID0gKGNvZGVCbG9jay0+c3RhY2tQb2ludGVy
T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSAtIHN0YXRlLnByZXNlcnZlZFJldXNlZFJlZ2lz
dGVyU3RhdGUubnVtYmVyT2ZCeXRlc1ByZXNlcnZlZCAtIHNwaWxsU3RhdGUubnVtYmVyT2ZTdGFj
a0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uOwogICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXQpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKICAgICAgICAgICAgIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlID0gaXNHZXR0ZXIoKTsKICAg
ICAgICAgICAgIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRl
LCBjYWxsSGFzUmV0dXJuVmFsdWUpOwogCkBAIC0yMjY0LDEyICsyMjYwLDcgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogCiAgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKIAotICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNU
b1ByZXNlcnZlOwotI2lmIENQVShBUk02NCkKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPnVz
ZURhdGFJQygpKQotICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQo
QVJNNjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgotICAgICAgICAgICAgYXV0byBzcGlsbFN0YXRl
ID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0
aW9ucyhleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUpOworICAgICAgICAgICAgYXV0byBzcGlsbFN0
YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhj
ZXB0aW9ucygpOwogCiAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
JnZtKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24o
dm0pOwpAQCAtMjM2NCwxMCArMjM1NSw2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBs
KEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1Rv
UHJlc2VydmU7CiAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChi
YXNlR1BSKTsKICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KHZh
bHVlUmVncyk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAgICAgIGlmIChjb2RlQmxvY2st
PnVzZURhdGFJQygpKQotICAgICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2Vy
dmUuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZl
TGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3Qu
cmIJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCBvcF9ncm91cCA6UHJvZmlsZWRC
aW5hcnlPcCwKICAgICAgICAgb3BlcmFuZFR5cGVzOiBPcGVyYW5kVHlwZXMsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQor
ICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9n
cm91cCA6VmFsdWVQcm9maWxlZEJpbmFyeU9wLApAQCAtMzUzLDcgKzM1Myw3IEBAIG9wX2dyb3Vw
IDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgICAgICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3Rl
ciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg2LDcgKzM4Niw3IEBAIG9wIDpuZWdhdGUsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewot
ICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFBy
b2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDpub3QsCkBAIC00NzgsNiAr
NDc4LDcgQEAgb3AgOmdldF9ieV9pZCwKICAgICBtZXRhZGF0YTogewogICAgICAgICBtb2RlTWV0
YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmls
ZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgfQogCiBvcCA6Z2V0
X2J5X2lkX3dpdGhfdGhpcywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVP
cGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjggQEAg
VmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JJbXBsKEJ5dGVjbwogICAgICAgICByZXR1cm4g
Jm1ldGFkYXRhLm1fcHJvZmlsZTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
dWludHB0cl90IHZhbHVlUHJvZmlsZU9mZnNldEZvcih1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRleCk7CisgICAgaWYgY29uc3RleHBy
IChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3Jfb3BlbikgeworICAgICAgICBzd2l0
Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpzeW1i
b2xDYWxsOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmls
ZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNv
ZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiBj
b25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CisgICAg
ICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5l
eHQ6OmNvbXB1dGVOZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRS
ZXN1bHRQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJl
dHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRG9uZVByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIHJldHVybiBC
eXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpOworfQorCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZU1ldGFkYXRhPgogYm9vbCBoYXNWYWx1ZVByb2ZpbGVGb3IoQnl0ZWNvZGVN
ZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZp
c2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJ
bmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDExICsxMTQsNiBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7CiB9
CiAKLUNvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFz
dFBhdGhTdGFydCgpCi17Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0lu
dGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwotfQotCiBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKCFpc0RhdGFJQygpKTsKQEAgLTIyNSw2ICsyMjAsMTIgQEAgdm9pZCBDYWxs
TGlua0luZm86OnNldE1heEFyZ3VtZW50Q291bnRJbgogICAgIG1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSB2YWx1ZTsKIH0KIAorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChpc0RpcmVjdCgpICYmIGlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQpOwor
fQorCiB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRvIGhh
bmRsZVNwZWNpZmljQ2FsbGVlID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKQEAgLTI5OCwy
MyArMjk5LDExIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGMKICAg
ICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1
c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1Rh
aWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewotICAg
IHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7Ci0gICAgaWYgKGlzRGF0YUlDKCkpIHsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJl
Zyk7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwg
Y2FsbExpbmtJbmZvR1BSKTsKLSAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBj
YWxsTGlua0luZm9HUFI7Ci0gICAgfQotCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0Lmxh
YmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHNsb3dQYXRoOwogCi0gICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICBpZiAodXNl
RGF0YUlDID09IFVzZURhdGFJQzo6WWVzKSB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
aml0LnNjcmF0Y2hSZWdpc3RlcigpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7
IAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKQEAgLTMyMyw3ICsz
MTIsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAg
ICAgICBnb1BvbHltb3JwaGljID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25a
ZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5bW9ycGhpY0Nh
bGxlZU1hc2spKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsK
ICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgZ29Qb2x5bW9y
cGhpYy5saW5rKCZqaXQpOyAvLyBQb2x5bW9ycGhpYyBzdHViIGhhbmRsZXMgdGFpbCBjYWxsIHN0
YWNrIHByZXAuCiAgICAgICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Y2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkpLCBK
U0VudHJ5UHRyVGFnKTsKQEAgLTMzNiwxNCArMzI1LDE2IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQ
dHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVj
aywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKSk7CiAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAg
ICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwog
ICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAg
ICAgICAgICAgIHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT51LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51
LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNTMsMTMg
KzM0NCwzNCBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUMgdXNlRGF0YUlDKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwotICAg
IHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIs
IHVzZURhdGFJQywgbnVsbHB0cik7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKwor
ICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
b0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHUu
ZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKworICAg
IHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0lu
Zm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxG
YXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1Rh
aWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBj
YWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsK
KyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQ
YXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgVXNlRGF0YUlDOjpO
bywgaXNUYWlsQ2FsbCgpLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworfQorCitNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcp
OworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBj
YWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK01h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENh
bGwpKTsKIH0KIAogdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxs
SGVscGVycyYgaml0KQpAQCAtMzY5LDE3ICszODEsMzIgQEAgdm9pZCBDYWxsTGlua0luZm86OmVt
aXRTbG93UGF0aChWTSYgdm0sIAogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRy
eVB0clRhZyk7CiB9CiAKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0m
LCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBqaXQu
bW92ZShjYWxsTGlua0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVz
dGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5p
dGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxM
aW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAg
ICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2Rl
SW5kZXgpOworICAgIHNldFVwQ2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2Fs
bGVlR1BSKTsKKyAgICBtX2RvbmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVM
b2NhdGlvbjsKKyAgICBpZiAodW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkg
eworICAgICAgICAvLyBGSVhNRTogSXQnZCBiZSBuaWNlIGlmIHRoaXMganVzdCB3ZXJlIGEgcmVm
Y291bnRlZCBkYXRhIHN0cnVjdHVyZS4KKyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFr
ZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1l
U2h1ZmZsZURhdGEpOworICAgIH0KKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7
CisgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAg
c2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKIHZv
aWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7CiAKICAgICBzZXRVc2VzRGF0YUlD
cyhVc2VEYXRhSUM6Ok5vKTsKIAotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgp
OwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgYXV0byBjYWxsID0gaml0Lm5l
YXJDYWxsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewogICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwpAQCAtMzk3LDcgKzQyNCw3IEBA
IHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIGF1dG8gZmFz
dFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOworICAgICAgICB1
LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CiAgICAgfSk7CiAKICAgICAvLyAtIElmIHdlJ3JlIG5v
dCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24g
MjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0MywxMSBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogZW51
bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogc3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogCitz
dHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87CisKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1Ymxp
YyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiBwdWJsaWM6Ci0gICAgZW51
bSBDYWxsVHlwZSB7CisgICAgZW51bSBDYWxsVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25l
LAogICAgICAgICBDYWxsLAogICAgICAgICBDYWxsVmFyYXJncywKQEAgLTE2NSw2ICsxNjcsOCBA
QCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAorICAg
IHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CisKICAgICBHUFJSZWcgY2FsbGVl
R1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVHUFI7IH0KICAgICAKICAgICBlbnVtIGNsYXNz
IFVzZURhdGFJQyA6IHVpbnQ4X3QgewpAQCAtMTczLDEzICsxNzcsMTYgQEAgcHVibGljOgogICAg
IH07CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0
aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxs
KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxD
YWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNF
RF9SRVRVUk47CiBwdWJsaWM6CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBl
bWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNF
RF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkg
V0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFp
bENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAg
dm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7CiAgICAgdm9pZCBlbWl0RGly
ZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4g
cHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVs
cGVycyYpOworICAgIHN0YXRpYyB2b2lkIGVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwogICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1
YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVz
ZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURhdGFJQzo6WWVzOyB9CkBAIC0yMDMsNyArMjEw
LDYgQEAgcHVibGljOgogICAgICAgICBtX2FsbG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOwog
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwog
CkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9zbG93U3R1YiA9IG51bGxw
dHI7CiAgICAgfQogCi0gICAgSklUU3R1YlJvdXRpbmUqIHNsb3dTdHViKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3Nsb3dTdHViLmdldCgpOwotICAgIH0KLQogICAgIGJvb2wgc2Vlbk9uY2Uo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faGFzU2VlblNob3VsZFJlcGF0Y2g7CkBAIC0zMDgs
OSArMzA5LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+
KG1fY2FsbFR5cGUpOwogICAgIH0KIAotICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAmbV9tYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIH0K
IAogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTM4MSw3
ICszODIsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKKworICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKKwogICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwog
ICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC0zOTcsNiArNDAwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0
aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJU
YWc+IG1fY2FsbGVlTG9jYXRpb247CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoU3RhcnQ7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CiAgICAgICAgIH0gY29kZUlD
OwogICAgIH0gdTsKIApAQCAtNDI0LDYgKzQyOCwxMyBAQCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRD
YWxsTGlua0luZm9Db2RlT3JpCiAgICAgcmV0dXJuIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCk7
CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbyB7CisgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHksIG9ubHkgdXNlZCBieSBiYXNlbGluZSwgc28gdGhp
cyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBDb2RlT3JpZ2luLgorICAgIENhbGxMaW5rSW5mbzo6
Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gZG9uZUxvY2F0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0
YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307CisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw4IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAgIEFTU0VSVChz
b3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFt
ZXRlcnMoKSk7CisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUt
PmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKICAgICAKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgp
LmFkZCh0aGlzKTsKIH0KQEAgLTMxOCw3ICszMjAsNiBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBDCiAgICAgZmluaXNoQ3JlYXRpb25Db21tb24odm0pOwogCiAgICAg
b3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGppdEFmdGVyV2FybVVwKCk7CiAKICAgICBpZiAo
b3RoZXIubV9yYXJlRGF0YSkgewogICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7
CkBAIC0zNTksNyArMzYwLDkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1
cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFt
ZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7Ci0gICAgCisKKyAgICBt
X2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNvdW50
ZXIoKTsKKwogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQogCkBAIC0z
NzAsMTAgKzM3MywxMyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSog
CiAvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5rZWQgYnl0ZWNvZGUgZ2VuZXJhdGlv
bi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdlbmVyYXRlIGNvbnRyb2wKIC8vIGZs
b3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgd2UgcmVs
eSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2FtZSBmb3IKIC8vIGFsbCB0aGUgQ29k
ZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2UgcmVseSBvbiB0aGlzIGZhY3QgYnkg
Y2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKLS8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9j
ay4KKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4gQWxzbywgQmFzZWxpbmUgSklUIGNvZGUg
aXMgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5rZWRDb2RlQmxvY2ss
CisvLyBzbyB0aGUgYnl0ZWNvZGUgbXVzdCByZW1haW4gdGhlIHNhbWUgYmV0d2VlbiBDb2RlQmxv
Y2tzIHNoYXJpbmcgYW4gVW5saW5rZWRDb2RlQmxvY2suCiBib29sIENvZGVCbG9jazo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlu
a2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKICAgICBKU1Njb3BlKiBzY29wZSkKIHsK
KyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7IC8vIFdlIG5lZWQgdG8gc2V0IHVwIG91ciB2
YWx1ZSBwcm9maWxlIHBvaW50ZXJzLgorCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIApAQCAtNDcxLDYgKzQ3NywyMSBAQCBib29s
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFrOyBcCiAg
ICAgfQogCisgICAgdW5zaWduZWQgYmluYXJ5UHJvZmlsZUluZGV4ID0gMDsKKyAgICB1bnNpZ25l
ZCB1bmFyeVByb2ZpbGVJbmRleCA9IDA7CisjZGVmaW5lIExJTktfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJWkVf
TUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3Vu
bGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJpbmFyeVByb2ZpbGVJbmRleCsrKTsgXAor
ICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFMSVpFX01F
VEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxp
bmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKHVuYXJ5UHJvZmlsZUluZGV4KyspOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0
cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMsMTQgKzU1NCwxNCBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQ
cm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTkso
T3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAg
IExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcElu
YykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BN
dWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAg
ICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktf
V0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5B
UllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2OSw3ICs3OTAs
NiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgLy8gcmVs
eSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRlZCB0
byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUgYWNj
dXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0ZXJXYXJt
VXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgLy8gSWYgdGhlIGNvbmN1cnJlbnQg
dGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4gY29tcHV0ZSBpdCBo
ZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAgLTc5Myw2ICs4MTMsNzYgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3duZXJFZGdlLnNldCh2bSwg
dGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZtLCB0aGlzKSk7CiB9CiAK
K3ZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShSZWY8QmFzZWxp
bmVKSVRDb2RlPiBqaXRDb2RlKQoreworICAgIHNldEpJVENvZGUoaml0Q29kZS5jb3B5UmVmKCkp
OworCisgICAgeworICAgICAgICBjb25zdCBhdXRvJiBqaXRDb2RlTWFwID0gdGhpcy0+aml0Q29k
ZU1hcCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mRXhjZXB0aW9u
SGFuZGxlcnMoKTsgKytpKSB7CisgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IGV4
Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVt
LzM5NDMzMzE4Pi4KKyAgICAgICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IGppdENvZGVNYXAu
ZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBhdXRvJiBqaXREYXRhID0gZW5z
dXJlSklURGF0YShsb2NrZXIpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdERhdGEubV9q
aXRDb25zdGFudFBvb2wuaXNFbXB0eSgpKTsKKyAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50
UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCkp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGppdENvZGUtPm1fY29uc3RhbnRQb29s
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvIGVudHJ5ID0gaml0Q29kZS0+bV9jb25z
dGFudFBvb2wuYXQoaSk7CisgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5LnR5cGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3Q6CisgICAgICAg
ICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IG1fZ2xvYmFsT2JqZWN0Lmdl
dCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbzogeworICAgICAgICAgICAgICAgIFVubGlua2VkQ2Fs
bExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9ICpzdGF0aWNfY2FzdDxVbmxpbmtlZENh
bGxMaW5rSW5mbyo+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAgIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0RGF0YS5tX2NhbGxMaW5rSW5mb3MuYWRkKENvZGVP
cmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+aW5pdGlhbGl6ZURhdGFJQyh2bSgpLCB1bmxpbmtlZENhbGxMaW5r
SW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBq
aXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gY2FsbExpbmtJbmZvOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbyA9ICpzdGF0aWNfY2FzdDxVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKj4oZW50cnkucGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gaml0RGF0YS5tX3N0dWJJbmZvcy5hZGQo
dW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlLCBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8u
Ynl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0aWFsaXplRnJv
bVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8odGhpcywgdW5saW5rZWRTdHViSW5mbyk7CisgICAg
ICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IHN0dWJJbmZvOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRD
b25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbDogeworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZC5nZXQoKSk7
CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9u
RGVjbChpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByOiB7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRy
eS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQ
b29sW2ldID0gZnVuY3Rpb25FeHByKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRj
aCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICBjYXNlIE1vZHVsZUNv
ZGU6CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQg
PSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAgICAg
IC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRl
Y3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhh
dCBvYnNlcnZhdGlvbi4KKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5s
aW5lKGNhcGFiaWxpdHlMZXZlbCgpKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24odGhpcyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChqaXRDb2RlLT5tX2lzU2hhcmVhYmxl
ICYmICF1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlICYmIE9wdGlv
bnM6OnVzZUJhc2VsaW5lSklUQ29kZVNoYXJpbmcoKSkKKyAgICAgICAgdW5saW5rZWRDb2RlQmxv
Y2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSA9IFdURk1vdmUoaml0Q29kZSk7Cit9CisKIENv
ZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC04NzMsNiAr
OTYzLDI3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IH0KIAorYm9vbCBDb2RlQmxvY2s6OmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2so
VmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKK3sKKyAgICAvLyBUaGlzIG5lZWRzIHRvIGNvcnJl
c3BvbmQgdG8gd2hhdCB3ZSBkbyBpbnNpZGUgc2V0Q29uc3RhbnRSZWdpc3RlcnMuCisgICAgc3dp
dGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bihyZWcpKSB7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6Cisg
ICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZToKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOiB7CisgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSB1bmxpbmtlZENvZGVCbG9jaygpLT5nZXRDb25zdGFudChyZWcp
OworICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAg
ICAgaWYgKGNlbGwtPmluaGVyaXRzPFN5bWJvbFRhYmxlPih2bSgpKSB8fCBjZWxsLT5pbmhlcml0
czxKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4odm0oKSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKwogVmVjdG9yPHVuc2lnbmVkPiBDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0
ZXJzKGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywg
Y29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtODkyLDYg
KzEwMDMsNyBAQCBWZWN0b3I8dW5zaWduZWQ+IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSCiAgICAg
ICAgIHN3aXRjaCAocmVwcmVzZW50YXRpb24pIHsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb25zdGFudCA9IGds
b2JhbE9iamVjdC0+bGlua1RpbWVDb25zdGFudChzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50
Pihjb25zdGFudC5hc0ludDMyQXNBbnlJbnQoKSkpOworICAgICAgICAgICAgQVNTRVJUKGNvbnN0
YW50LmlzQ2VsbCgpKTsgLy8gVW5saW5rZWQgQmFzZWxpbmUgSklUIHJlcXVpcmVzIHRoaXMuCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
Ok90aGVyOgogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoK
QEAgLTE1MTQsNyArMTYyNiw3IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJsb2NrOjplbnN1
cmVKSVQKICAgICByZXR1cm4gKm1faml0RGF0YTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmZpbmFs
aXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklU
SW5saW5lQ2FjaGVzKCkKIHsKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQo
KSkgewogICAgICAgICBmb3IgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+
bV9jYWxsTGlua0luZm9zKQpAQCAtMTUyNSw2ICsxNjM3LDIwIEBAIHZvaWQgQ29kZUJsb2NrOjpm
aW5hbGl6ZUJhc2VsaW5lSklUSW5saW4KICAgICAgICAgICAgIHN0dWJJbmZvLT52aXNpdFdlYWtS
ZWZlcmVuY2VzKGxvY2tlciwgdGhpcyk7CiAgICAgICAgIH0KICAgICB9CisKKworI2lmIEFTU0VS
VF9FTkFCTEVECisgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewor
ICAgICAgICAvLyBWZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0
aGV5J3JlIHZpcnR1YWwgY2FsbHMuCisgICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8gOiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5t
X2V2YWxDYWxsTGlua0luZm9zKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlu
a0luZm8tPmlzTGlua2VkKCkpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5mb3JFYWNoRGVw
ZW5kZW50Q2VsbChbXSAoSlNDZWxsKikgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgfQorI2Vu
ZGlmCiB9CiAjZW5kaWYKIApAQCAtMTUzNCw0NiArMTY2MCw0NyBAQCB2b2lkIENvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwog
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29sIGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9
IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwotICAgIG1faXNFbGlnaWJsZUZvckxMSW50
RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhl
Y3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAot
ICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBj
b2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAh
bV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAm
JiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkg
ewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9v
c3JFeGl0Q291bnRlcikgewotICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnRE
b3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKLSAg
ICAgICAgICAgICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7Ci0gICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
dW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5k
bGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9u
SGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9
ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENv
ZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRj
aChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKLQotICAgICAgICAg
ICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBp
biBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwotICAgICAgICAg
ICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVp
dGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKLSAgICAg
ICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50
aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgotICAgICAgICAgICAgICAgICAgICByZXNldEpJ
VERhdGEoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9p
c0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0jZW5kaWYKKy8vIE9PUFM6IHJlY29uY2lsZSB0aGlzCisvLyNpZiBFTkFC
TEUoSklUKQorLy8gICAgYm9vbCBpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBtX2lzRWxp
Z2libGVGb3JMTEludERvd25ncmFkZTsKKy8vICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdy
YWRlID0gZmFsc2U7CisvLyAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBleGVjdXRp
bmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0CisvLyAg
ICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFuZCByZWluc3RhbGwgTExJbnQgY29k
ZSB0byBzYXZlIEpJVCBtZW1vcnkuCisvLyAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAh
bV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAm
JiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkg
eworLy8gICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXpl
ZFJlcGxhY2VtZW50KCkpIHsKKy8vICAgICAgICAgICAgaWYgKCFvcHRpbWl6ZWRDb2RlQmxvY2st
Pm1fb3NyRXhpdENvdW50ZXIpIHsKKy8vICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9y
TExJbnREb3duZ3JhZGUpIHsKKy8vICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGUgPSBudWxs
cHRyOworLy8gICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRyeXBvaW50KHRoaXMpOwor
Ly8gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBl
OjpJbnRlcnByZXRlclRodW5rKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygp
OyBpKyspIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVy
SW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIo
aSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9y
YXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKKy8vICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVy
LnRhcmdldCkucHRyKCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlh
bGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsK
Ky8vICAgICAgICAgICAgICAgICAgICB9CisvLworLy8gICAgICAgICAgICAgICAgICAgIHVubGlu
a0luY29taW5nQ2FsbHMoKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBzYWZl
IHRvIGNsZWFyIHRoZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkgYWxsIGNvbXBpbGVyIHRocmVhZHMKKy8vICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2Fm
ZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIg
Ynl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKKy8vICAgICAgICAgICAgICAgICAgICAvLyBw
YXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0aGUgdmFyaW91
cyAqaW5mb3MuCisvLyAgICAgICAgICAgICAgICAgICAgcmVzZXRKSVREYXRhKCk7CisvLyAgICAg
ICAgICAgICAgICB9IGVsc2UKKy8vICAgICAgICAgICAgICAgICAgICBtX2lzRWxpZ2libGVGb3JM
TEludERvd25ncmFkZSA9IHRydWU7CisvLyAgICAgICAgICAgIH0KKy8vICAgICAgICB9CisvLyAg
ICB9CisvLworLy8jZW5kaWYKICAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJl
dGVkKGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAog
I2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQotICAgICAgICBmaW5hbGl6ZUJh
c2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7CisgICAgICAgIGZpbmFsaXplSklUSW5saW5lQ2FjaGVz
KCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTU5NCw3ICsxNzIxLDcgQEAg
dm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICBjYXNlIEpJ
VFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2Ug
SklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4
ZWN1dGVDb3VudGVyLmNvdW50KCk7CisgICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRl
Q291bnRlci0+Y291bnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5
cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVy
LmNvdW50KCk7CkBAIC0xNjc1LDMwICsxODAyLDYgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVC
bG9jazo6YWRkU3R1YkluZgogICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHVi
SW5mb3MuYWRkKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pOwogfQogCi1KSVRBZGRJQyogQ29kZUJs
b2NrOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUTXVsSUMq
IENvZGVCbG9jazo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUp
Ci17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBl
bnN1cmVKSVREYXRhKGxvY2tlcikubV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJ
VFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBy
ZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOwot
fQotCi1KSVROZWdJQyogQ29kZUJsb2NrOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsK
LSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fbmVnSUNzLmFkZChhcml0aFByb2Zp
bGUpOwotfQotCiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9s
b2NrKTsKQEAgLTMxMzMsNyArMzIzNiw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdp
c3RlckNvdW50KCkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVDoKLSAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOwor
ICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRD
b2RlQmxvY2soKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklU
KQpAQCAtMzM0OSwxMyArMzQ1MiwxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6
YmluYXJ5QXJpCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3Bf
YWRkOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+
YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVy
biBwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2Fz
ZSBvcF9zdWI6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMp
Lm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4g
JnBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAg
cmV0dXJuIHBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAg
ICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMzY3LDExICszNDcwLDExIEBA
IFVuYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2gg
KHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAm
cGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAg
ICByZXR1cm4gcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OwogICAgIGNhc2Ugb3BfaW5jOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAg
ICAgcmV0dXJuICZwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzQ3MiwyMiAr
MzU3NSwxNiBAQCB2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiB9CiAK
ICNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0
ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJiBtYXApIAoteyAKLSAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1f
cGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1hcCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8Q29k
ZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW5kUEModm9pZCogcGMpCiB7CisgICAgaWYgKGF1dG8qIHBj
VG9Db2RlT3JpZ2luTWFwID0gbV9qaXRDb2RlLT5wY1RvQ29kZU9yaWdpbk1hcCgpKSB7CisgICAg
ICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBwY1RvQ29kZU9y
aWdpbk1hcC0+ZmluZFBDKHBjKSkKKyAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAg
IH0KKwogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwog
ICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICAg
ICAgaWYgKGppdERhdGEtPm1fcGNUb0NvZGVPcmlnaW5NYXApIHsKLSAgICAgICAgICAgICAgICBp
ZiAoc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gaml0RGF0YS0+bV9wY1Rv
Q29kZU9yaWdpbk1hcC0+ZmluZFBDKHBjKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
ZGVPcmlnaW47Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgICAg
ICBpZiAoc3R1YkluZm8tPmNvbnRhaW5zUEMocGMpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPihzdHViSW5mby0+Y29kZU9yaWdpbik7CkBAIC0z
NTIxLDI4ICszNjE4LDE0IEBAIHN0ZDo6b3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2Nr
OjoKICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKIH0KIAotaW50MzJfdCBDb2RlQmxvY2s6OnRo
cmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKLXsKLSAgICBzd2l0Y2ggKHVubGlua2Vk
Q29kZUJsb2NrKCktPmRpZE9wdGltaXplKCkpIHsKLSAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVy
bWluYXRlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkOwotICAgIGNhc2UgVHJpU3RhdGU6OkZh
bHNlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkICogNDsKLSAgICBjYXNlIFRyaVN0YXRlOjpU
cnVlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8gMjsKLSAgICB9Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRocmVzaG9sZDsKLX0KLQotdm9pZCBDb2RlQmxvY2s6
OmppdEFmdGVyV2FybVVwKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKIHsKLSAgICBtX2xs
aW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25z
Ojp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1
dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQodW5saW5rZWRDb2RlQmxvY2soKS0+dGhyZXNob2xk
Rm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOwogfQogCi12b2lk
IENvZGVCbG9jazo6aml0U29vbigpCit2b2lkIENvZGVCbG9jazo6aml0TmV4dEludm9jYXRpb24o
KQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xk
Rm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOworICAgIG1fbGxp
bnRFeGVjdXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwogfQogCiBib29sIENv
ZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdApAQCAtMzU4OCwy
OCArMzY3MSw4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRvdWJs
ZSBudW1TdWJzID0gMC4wOwogICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKLSAgICBh
dXRvIGNvdW50SUNzID0gWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICBpZiAo
YXV0byogaml0RGF0YSA9IGNvZGVCbG9jay0+bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAg
ICBmb3IgKEpJVEFkZElDKiBhZGRJQyA6IGppdERhdGEtPm1fYWRkSUNzKSB7Ci0gICAgICAgICAg
ICAgICAgbnVtQWRkcysrOwotICAgICAgICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+
Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChKSVRNdWxJQyog
bXVsSUMgOiBqaXREYXRhLT5tX211bElDcykgewotICAgICAgICAgICAgICAgIG51bU11bHMrKzsK
LSAgICAgICAgICAgICAgICB0b3RhbE11bFNpemUgKz0gbXVsSUMtPmNvZGVTaXplKCk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lDIDogaml0RGF0YS0+
bV9uZWdJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1OZWdzKys7Ci0gICAgICAgICAgICAgICAg
dG90YWxOZWdTaXplICs9IG5lZ0lDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBmb3IgKEpJVFN1YklDKiBzdWJJQyA6IGppdERhdGEtPm1fc3ViSUNzKSB7Ci0gICAg
ICAgICAgICAgICAgbnVtU3VicysrOwotICAgICAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBz
dWJJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8gY291
bnRJQ3MgPSBbJl0gKENvZGVCbG9jayopIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8g
cmUtaW1wbGVtZW50IHRoaXMgdXNpbmcgSklUQ29kZS4KICAgICB9OwogICAgIGhlYXAoKS0+Zm9y
RWFjaENvZGVCbG9jayhjb3VudElDcyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQs
OSBAQCBjbGFzcyBKU01vZHVsZUVudmlyb25tZW50OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogY2xhc3MgTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
OwogY2xhc3MgTWV0YWRhdGFUYWJsZTsKLWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3Mg
UmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJh
c2VsaW5lSklUQ29kZTsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
Q29kZUJsb2NrUmFyZURhdGEpOwogCkBAIC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1l
dGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdl
dCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNp
Z25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApA
QCAtMTY3LDcgKzE2OSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0
dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRt
cHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4g
Jm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJh
bWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0
ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYg
KzIzMyw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRz
KCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlu
bGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3
ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2Rl
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEw
MTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdl
dENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19j
YXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2OCwyMyArMjU5LDIxIEBAIHB1YmxpYzoKICNpZiBF
TkFCTEUoSklUKQogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNU
X0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogCiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAg
ICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7Ci0gICAgICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJ
Q3M7Ci0gICAgICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7Ci0gICAgICAgIEJhZzxKSVRTdWJJ
Qz4gbV9zdWJJQ3M7CiAgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsK
ICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGlu
ZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxM
aW5rZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5
bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAgICAgIEZp
eGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBG
aXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2lu
TWFwOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAg
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAg
ICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+
IG1faml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklU
Q29uc3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29u
c3RhbnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxp
bmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERh
dGEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAo
TElLRUxZKG1faml0RGF0YSkpCkBAIC0yOTMsMjIgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAg
ICAgSklURGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7
CiAKLSAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAg
SklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lD
KiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRT
dWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdl
bmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVEFkZElDKiBh
ZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJ
Qyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRN
dWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5h
cnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9
Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46
OnZhbHVlPjo6dHlwZT4KLSAgICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxl
KiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+
Ci0gICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsg
cmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkpJVERhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdERh
dGEpOyB9CiAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSwg
Q29kZU9yaWdpbik7CiAKQEAgLTMyMiwxOCArMjk2LDggQEAgcHVibGljOgogICAgIC8vIGxvb2tp
bmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcg
dGhpcy4KICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgo
Qnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAm
JiBqaXRDb2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RG
TW92ZShqaXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1h
cCgpCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0g
ICAgICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0K
KyAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKLSAgICB2b2lkIHNldFBDVG9D
b2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAg
c3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwogCiAgICAgdm9pZCBz
ZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0KTsKQEAgLTQ3MiwxMCArNDM2LDEyIEBA
IHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsK
IAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxl
cyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAg
ewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7
CiAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCk7CisgICAgICAg
IAogICAgIH0KIAogICAgIFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlRm9yQXJndW1lbnQodW5z
aWduZWQgYXJndW1lbnRJbmRleCkKQEAgLTU2OSw4ICs1MzUsMTAgQEAgcHVibGljOgogICAgIGNv
bnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25zdGFu
dFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQorICAgIGJv
b2wgaXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSBjb25zdDsKICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25z
dGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
cmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0
YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW5kZXgp
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdpc3RlcnMp
ICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQoKTsgfQog
CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVy
biBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rp
b25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTU5NSwyMiAr
NTYzLDIyIEBAIHB1YmxpYzoKICAgICAvLyBKdW1wIFRhYmxlcwogCiAjaWYgRU5BQkxFKEpJVCkK
LSAgICBTaW1wbGVKdW1wVGFibGUmIHN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKKyAg
ICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4
KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGlu
dCB0YWJsZUluZGV4KTsKKyAgICB2b2lkKiBiYXNlbGluZUpJVENvbnN0YW50UG9vbCgpCiAgICAg
ewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwotICAgICAgICByZXR1cm4gbV9q
aXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG1faml0RGF0YSAmJiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwor
ICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbC5kYXRhKCk7CiAgICAg
fQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1w
VGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQogCi0jaWYgRU5BQkxFKEpJVCkK
LSAgICBTdHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7Ci0gICAgICAgIHJl
dHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAg
ICB9CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgU3RyaW5nSnVtcFRhYmxlJiBkZmdTdHJpbmdT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgZGZn
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKICNlbmRpZgorCiAgICAgc2l6ZV90IG51
bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7IH0K
ICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQogCkBAIC02MzIsMjEgKzYwMCwy
MCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9s
ZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50
ZXItPmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOwogICAgIH0KIAogICAgIHZv
aWQgZG9udEpJVEFueXRpbWVTb29uKCkKICAgICB7Ci0gICAgICAgIG1fbGxpbnRFeGVjdXRlQ291
bnRlci5kZWZlckluZGVmaW5pdGVseSgpOworICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIt
PmRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgfQogCi0gICAgaW50MzJfdCB0aHJlc2hvbGRGb3JK
SVQoaW50MzJfdCB0aHJlc2hvbGQpOwotICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKTsKICAgICB2
b2lkIGppdFNvb24oKTsKKyAgICB2b2lkIGppdE5leHRJbnZvY2F0aW9uKCk7CiAKICAgICBjb25z
dCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICAgICAgcmV0
dXJuICptX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgfQogCiAgICAgdHlwZWRlZiBIYXNoTWFw
PHN0ZDo6dHVwbGU8U3RydWN0dXJlSUQsIHVuc2lnbmVkPiwgRml4ZWRWZWN0b3I8TExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0Y2hwb2lu
dE1hcDsKQEAgLTc5Nyw2ICs3NjQsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2Vy
UmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lk
KiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAog
ICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9p
ZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQpAQCAtODM4LDYgKzgw
Niw3IEBAIHB1YmxpYzoKICAgICBtdXRhYmxlIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwogCiAg
ICAgYm9vbCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQgYmVjYXVz
ZSB0aGUgSklUIHdhbnRzIHRvIHN0b3JlIHRvIGl0LgorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29k
ZUJsb2NrLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7IH0KIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgdW5zaWduZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0
eUxldmVsCkBAIC05MDcsMTYgKzg3NiwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX21ldGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0cnVj
dGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9p
bnN0cnVjdGlvbnNSYXdQb2ludGVyKTsgfQogCi0gICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJs
ZUZvckZ1enppbmdFYXJseVJldHVybigpCi0gICAgewotICAgICAgICAvLyBTb21lIGJ1aWx0aW5z
IGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRoZXkgcnVuLgotICAg
ICAgICByZXR1cm4gIW1fdW5saW5rZWRDb2RlLT5pc0J1aWx0aW5GdW5jdGlvbigpOwotICAgIH0K
KyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluYWxpemVMTEludElubGluZUNh
Y2hlcygpOwogI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBmaW5hbGl6ZUJhc2VsaW5lSklUSW5s
aW5lQ2FjaGVzKCk7CisgICAgdm9pZCBmaW5hbGl6ZUpJVElubGluZUNhY2hlcygpOwogI2VuZGlm
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgdm9pZCB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7
CkBAIC0xMDEwLDcgKzk3NSw5IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlV2F0Y2hwb2ludE1h
cCBtX2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXA7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0
Q29kZTsKICNpZiBFTkFCTEUoSklUKQorcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVRE
YXRhPiBtX2ppdERhdGE7Citwcml2YXRlOgogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgLy8gVGhpcyBpcyByZWxldmFudCB0byBub24tREZHIGNvZGUgYmxvY2tzIHRoYXQgc2VydmUg
YXMgdGhlIHByb2ZpbGVkIGNvZGUgYmxvY2sKQEAgLTEwMjksNyArOTk2LDcgQEAgcHJpdmF0ZToK
IAogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAgICAgCi0gICAg
QmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXIqIG1fbGxpbnRFeGVjdXRlQ291bnRlciB7IG51bGxwdHIgfTsK
IAogICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2ppdEV4ZWN1dGVDb3VudGVyOwogICAg
IHVpbnQzMl90IG1fb3NyRXhpdENvdW50ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI4MjY3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDggKzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAi
QmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIlVubGlu
a2VkTWV0YWRhdGFUYWJsZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00MCw5ICs0
Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICBpZiAo
bV9tZXRhZGF0YSkgewogI2RlZmluZSBWSVNJVChfX29wKSBcCiAgICAgICAgIG1fbWV0YWRhdGEt
PmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBmdW5jKG1ldGFkYXRhLm1fcHJv
ZmlsZSwgZmFsc2UpOyB9KTsKLQogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9WQUxVRV9Q
Uk9GSUxFKFZJU0lUKQotCiAjdW5kZWYgVklTSVQKIAogICAgICAgICBtX21ldGFkYXRhLT5mb3JF
YWNoPE9wSXRlcmF0b3JPcGVuPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IApAQCAtNTcsNyArNTcs
NiBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgICAgICAg
ICBmdW5jKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLCBmYWxzZSk7CiAgICAgICAgIH0pOwogICAg
IH0gICAKLQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgpAQCAtOTksNCArOTgsMzgg
QEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5rSW5mbwogICAgIH0KIH0KIAor
I2lmIEVOQUJMRShKSVQpCitBTFdBWVNfSU5MSU5FIGNvbnN0IEpJVENvZGVNYXAmIENvZGVCbG9j
azo6aml0Q29kZU1hcCgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0
Q29kZS5nZXQoKSktPm1faml0Q29kZU1hcDsKK30KKworQUxXQVlTX0lOTElORSBTaW1wbGVKdW1w
VGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgp
Cit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1f
c3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmdK
dW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5n
ZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKyNlbmRpZgor
CisjaWYgRU5BQkxFKERGR19KSVQpCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJsZSYgQ29k
ZUJsb2NrOjpkZmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJU
KGppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxE
Rkc6OkpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJ
bmRleF07Cit9CisKK0FMV0FZU19JTkxJTkUgU3RyaW5nSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmRm
Z1N0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0
VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6
SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzAs
NiArNzAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uq
IHdyYXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwogICAgIAogICAgIHN0YXRpYyBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlKiB3cmFwQW5kQWN0aXZhdGUoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwor
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLCBtX2NvZGVCbG9jayk7IH0KICAg
ICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291
bnRlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3
IEBAIGJvb2wgRXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjoKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgdGhyZXNob2xkID0gY2xpcHBlZFRocmVzaG9sZChjb2Rl
QmxvY2sgPyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIDogbnVsbHB0ciwgdGhyZXNob2xkKTsK
KyAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKHRocmVzaG9sZCk7CiAgICAgCiAgICAg
bV9jb3VudGVyID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXRocmVzaG9sZCk7CiAgICAgICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291
bnRlci5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0aW9uQ291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsgLy8gSWYgeW91IHVz
ZSB0aGlzLCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCgpIG1heSBzdGlsbCByZXR1cm4g
ZmFsc2UuCiAgICAgYm9vbCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sq
KTsKICAgICBib29sIGhhc0Nyb3NzZWRUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVybiBtX2NvdW50
ZXIgPj0gMDsgfQotICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBD
b2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwg
Q29kZUJsb2NrKiA9IG51bGxwdHIpOwogICAgIHZvaWQgZGVmZXJJbmRlZmluaXRlbHkoKTsKICAg
ICBkb3VibGUgY291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdG90
YWxDb3VudCkgKyBtX2NvdW50ZXI7IH0KICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKQEAgLTg2LDEzICs4Niw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFQgdGhyZXNob2xkKQorICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hv
bGQoVCB0aHJlc2hvbGQpCiAgICAgewotICAgICAgICBpbnQzMl90IG1heFRocmVzaG9sZDsKLSAg
ICAgICAgaWYgKE9wdGlvbnM6OnJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3Bv
aW50cygpICYmIGdsb2JhbE9iamVjdCkKLSAgICAgICAgICAgIG1heFRocmVzaG9sZCA9IGdsb2Jh
bE9iamVjdC0+d2Vha1JhbmRvbUludGVnZXIoKSAlIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3
ZWVuQ2hlY2twb2ludHMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF4VGhyZXNob2xk
ID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOworICAgICAgICBp
bnQzMl90IG1heFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2tw
b2ludHMoKTsKICAgICAgICAgaWYgKHRocmVzaG9sZCA+IG1heFRocmVzaG9sZCkKICAgICAgICAg
ICAgIHRocmVzaG9sZCA9IG1heFRocmVzaG9sZDsKICAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFk
YXRhLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBzdHJ1
Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0IHsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5
SWRNb2RlTWV0YWRhdGFVbnNldCkgPT0gMTIpOwogCiBzdHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0
YUFycmF5TGVuZ3RoIHsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0
aCwgYXJyYXlQcm9maWxlKTsgfQogICAgIEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGU7CiB9Owog
c3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoKSA9PSAx
Mik7CkBAIC04OCw2ICs4OSw3IEBAIHVuaW9uIEdldEJ5SWRNb2RlTWV0YWRhdGEgewogICAgICAg
ICBHZXRCeUlkTW9kZSBtb2RlOwogICAgICAgICB1aW50OF90IGhpdENvdW50Rm9yTExJbnRDYWNo
aW5nOyAvLyBUaGlzIG11c3QgYmUgemVybyB3aGVuIHdlIHVzZSBQcm90b0xvYWQgbW9kZS4KICAg
ICB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9CiAgICAgR2V0QnlJZE1vZGVN
ZXRhZGF0YURlZmF1bHQgZGVmYXVsdE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0
IHVuc2V0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggYXJyYXlMZW5n
dGhNb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlT
dGF0dXMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEzLDcgQEAg
R2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICByZXR1cm4g
R2V0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAogICAgIGNhc2UgQ2FjaGVUeXBl
OjpHZXRCeUlkU2VsZjogewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZv
LT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRC
bG9jay0+dm0oKSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
ZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZS5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcg
KzE5MCw3IEBAIHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEcKIAogICAg
IC8vIExldCdzIHN0b3JlIHRoZSByZXVzZWQgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4gQWZ0ZXIg
dGhhdCwgd2UgY2FuIHVzZSBhbGxvY2F0ZWQgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAgU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAg
YWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOworICAgICAg
ICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CiAKICAg
ICBpZiAoR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAg
IGRhdGFMb2coImJhc2VHUFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsKQEAgLTIyNSwxMiArMjI1LDkg
QEAgdm9pZCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogICAgICAgICByZWdp
c3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CiAgICAgZm9yIChGUFJSZWcgcmVnIDogZnBT
Y3JhdGNoKQogICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CisgICAg
aWYgKGppdC5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJlZ2lzdGVyc1RvU3Bp
bGxGb3JDQ2FsbC5zZXQoc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CiAgICAgcmVnaXN0ZXJzVG9T
cGlsbEZvckNDYWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckND
YWxsKCkpOwotI2lmIENQVShBUk02NCkKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5j
b2RlQmxvY2soKTsKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgcmVn
aXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCiAK
ICAgICBBY2Nlc3NDYXNlU25pcHBldFBhcmFtcyBwYXJhbXMoc3RhdGUubV92bSwgV1RGTW92ZShy
ZWdzKSwgV1RGTW92ZShncFNjcmF0Y2gpLCBXVEZNb3ZlKGZwU2NyYXRjaCkpOwogICAgIHNuaXBw
ZXQtPmdlbmVyYXRvcigpLT5ydW4oaml0LCBwYXJhbXMpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzksNyArMTM5LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9y
U3R1YkluZgogICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAogICAg
IGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSh2bSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zvcklt
cHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8t
PmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Jbmxp
bmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDEx
ICsxNzYsMTYgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3Bl
cnR5QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNl
bGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQog
ewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAv
LyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBkby4K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAg
ICAKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0yMzMsMjMgKzIzOCwz
MSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3RlCiAgICAgcmV0dXJu
IGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJlZzsKIH0KIAotYm9v
bCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNj
ZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewog
ICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0KIAotYm9v
bCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5o
YXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VS
VChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkpOworICAg
IEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5m
bywgb2Zmc2V0KSk7CisKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAg
ICAvLyBUaGVzZSBzbG90cyBnZXQgZmlsbGVkIGluLiBOb3RoaW5nIGVsc2UgdG8gZG8uCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKQEAgLTI3
OSwyMiArMjkyLDI1IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVIK
ICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6Omlz
Q2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5
KiBhcnJheSkKK2Jvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFy
cmF5KQogewogICAgIEFTU0VSVChhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKIAog
ICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxp
bmVKSVQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghaGFzRnJlZVJlZ2lzdGVy
KHN0dWJJbmZvKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFoYXNBbnlB
cnJheVN0b3JhZ2UoYXJyYXktPmluZGV4aW5nVHlwZSgpKSAmJiBhcnJheS0+aW5kZXhpbmdUeXBl
KCkgIT0gQXJyYXlDbGFzczsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlM
ZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKK2Jvb2wg
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQogewotICAgIEFTU0VS
VChpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBhcnJheSkpOworICAgIEFTU0VSVF9V
TlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIGFycmF5KSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE5LDE3ICszMzUsMjAgQEAgYm9vbCBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoUwogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5l
OwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3Ry
aW5nTGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8pCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIGhhc0Zy
ZWVSZWdpc3RlcihzdHViSW5mbyk7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0
cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitib29sIElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKIHsKLSAgICBBU1NFUlQoaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgo
c3R1YkluZm8pKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNoZWFibGVTdHJp
bmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbykpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXND
b25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM2MywxMyArMzgy
LDE4IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aCgKIH0KIAogCi1i
b29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAg
IC8vIFRoZXNlIHNsb3RzIGdldCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5mby5iYXNl
R1BSOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAKQEAg
LTQwNiwxMyArNDMwLDEzIEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5B
Y2MKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewogICAgICAgICAvLyBJZiBpdCBp
cyBub3QgR2V0QnlJZC1saWtlLXRoaW5nLCB3ZSBkbyBub3QgZW1pdCBub3Agc2xlZCAoZS5nLiBH
ZXRCeVZhbCkuCiAgICAgICAgIC8vIFRoZSBjb2RlIGlzIGFscmVhZHkgYW4gaW5kaXJlY3QganVt
cCwgYW5kIG9ubHkgdGhpbmcgd2Ugc2hvdWxkIGRvIGlzIHJlcGxhY2luZyBtX2NvZGVQdHIuCi0g
ICAgICAgIGlmIChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKKyAgICAgICAgaWYg
KGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHN0dWJJbmZv
Lmhhc0NvbnN0YW50SWRlbnRpZmllcikgewogICAgICAgICAgICAgLy8gSWYgbV9jb2RlUHRyIGlz
IHBvaW50aW5nIHRvIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbiwgdGhpcyBtZWFucyB0
aGF0IElubGluZUFjY2VzcyBjb2RlIGlzIG5vdCBhIHN0dWIgb25lLgogICAgICAgICAgICAgLy8g
V2UgcmV3cml0ZSB0aGlzIHdpdGggdGhlIHN0dWItYmFzZWQgZGlzcGF0Y2hpbmcgY29kZSBvbmNl
LCBhbmQgY29udGludWUgdXNpbmcgaXQgdW50aWwgd2UgcmVzZXQgdGhlIGNvZGUuCiAgICAgICAg
ICAgICBpZiAoc3R1YkluZm8ubV9jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0gc3R1Yklu
Zm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpIHsKICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5mby5zdGFydC5yZXRh
Z2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMm
KT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmc3R1YkluZm8pLCBzdHViSW5mby5tX3N0dWJJ
bmZvR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNv
ZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgaml0
LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFn
KTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKICAgICAgICAg
ICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBzdHViSW5mby5kb25lTG9jYXRpb247CiAg
ICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0oTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewpAQCAtNDIxLDcgKzQ0NSw5IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHVi
QXNKdW1wSW5BY2MKICAgICAgICAgICAgICAgICB9KSwgIklubGluZUFjY2VzczogbGlua2luZyBz
dHViIGNhbGwiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHN0dWJJbmZv
Lm1fY29kZVB0ciA9IHRhcmdldDsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCw4ICs0NjAsMTQgQEAgdm9pZCBJbmxpbmVBY2Nl
c3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5raW5n
IGNvbnN0YW50IGp1bXAiKTsKIH0KIAotdm9pZCBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVt
cEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQg
SW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogeworICAgIGlmIChjb2RlQmxvY2stPnVz
ZURhdGFJQygpICYmIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
KSB7CisgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRM
b2NhdGlvbjsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0g
MDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5mby5zdGFy
dC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhl
bHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgIC8vIFdlIGRvbid0IG5l
ZWQgYSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1waW5nIGludG8g
dGhlIG1pZGRsZSBvZiBhbiBJQy4KICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTksMTQgKzk5LDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWF4KHNpemUsIHNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhTdHJ1Y3R1cmVT
dHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMgYm9vbCBj
YW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBQcm9wZXJ0
eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0
cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRp
YyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5
Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1
YkluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0
dWJJbmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNjZXNz
KFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJh
dGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5l
cmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0
cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBjYW5HZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBQcm9wZXJ0
eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQp
OworICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVT
dHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMg
Ym9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwg
SlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNjZXNzKENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIGJvb2wgZ2Vu
ZXJhdGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIAogICAg
IHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNz
KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KTsKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nl
c3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRT
dHViUm91dGluZVB0clRhZz4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0VfT1BFUkFU
T1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7CiAgICAg
dWludDhfdCBzZWVuTW9kZXMgeyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNl
ZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0YWRhdGEs
IHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc2Vlbk1v
ZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCShyZXZpc2lv
biAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlu
a0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJbnRDYWxs
TGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQogCiBwcml2YXRlOgogICAgIHVpbnRwdHJfdCBt
X2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0IH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0YWRhdGFUYWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0
YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGZ1bmMoKm1ldGFkYXRhKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBudW1FbnRyaWVzKCkKKyAgICB7CisgICAgICAg
IGF1dG8qIHN0YXJ0ID0gYml0d2lzZV9jYXN0PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdldChP
cDo6b3Bjb2RlSUQpKTsKKyAgICAgICAgYXV0byogZW5kID0gYml0d2lzZV9jYXN0PHR5cGVuYW1l
IE9wOjpNZXRhZGF0YSo+KGdldEltcGwoT3A6Om9wY29kZUlEICsgMSkpOworICAgICAgICByZXR1
cm4gZW5kIC0gc3RhcnQ7CisgICAgfQorCiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCk7CiAKICAg
ICB2b2lkIHJlZigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bj
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMTcgQEAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heAogICAgIG1hY3JvKE9wSXRlcmF0b3JPcGVuKSBcCiAg
ICAgbWFjcm8oT3BJdGVyYXRvck5leHQpIFwKIAorI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lU
SF9CSU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAorICAgIG1hY3JvKE9wQWRkKSBcCisgICAg
bWFjcm8oT3BNdWwpIFwKKyAgICBtYWNybyhPcERpdikgXAorICAgIG1hY3JvKE9wU3ViKSBcCisK
KyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShtYWNybykg
XAorICAgIG1hY3JvKE9wSW5jKSBcCisgICAgbWFjcm8oT3BEZWMpIFwKKyAgICBtYWNybyhPcE5l
Z2F0ZSkgXAorCiAKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidHlwZS1saW1pdHMiKQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcg
QEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQoKQogewogICAgIHJlc3RvcmVT
Y3JhdGNoKCk7CiAgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQotICAgICAg
ICBqaXQtPnJldCgpOworICAgICAgICBqaXQtPmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHN0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZEb25l
TG9jYXRpb24oKSksIEpTSW50ZXJuYWxQdHJUYWcpOwogICAgIGVsc2UKICAgICAgICAgc3VjY2Vz
cy5hcHBlbmQoaml0LT5qdW1wKCkpOwogfQpAQCAtMTEwLDYgKzExMCw4IEBAIGNvbnN0IFJlZ2lz
dGVyU2V0JiBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsK
IAogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsID0gUmVnaXN0ZXJTZXQobV9saXZlUmVn
aXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSwgYWxsb2NhdG9yLT51
c2VkUmVnaXN0ZXJzKCkpOworICAgICAgICBpZiAoaml0LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlD
KCkpCisgICAgICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmFkZChzdHViSW5mby0+bV9z
dHViSW5mb0dQUik7CiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhjbHVkZShjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIH0KICAgICByZXR1cm4gbV9saXZlUmVnaXN0ZXJzRm9y
Q2FsbDsKQEAgLTEyOCwxMSArMTMwLDEyIEBAIGF1dG8gQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpw
cmVzZXJ2ZUxpdmUKICAgICB9OwogfQogCi1hdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJl
c2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucyhjb25zdCBS
ZWdpc3RlclNldCYgZXh0cmEpIC0+IFNwaWxsU3RhdGUKK2F1dG8gQWNjZXNzR2VuZXJhdGlvblN0
YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25z
KCkgLT4gU3BpbGxTdGF0ZQogewogICAgIFJlZ2lzdGVyU2V0IGxpdmVSZWdpc3RlcnMgPSBhbGxv
Y2F0b3ItPnVzZWRSZWdpc3RlcnMoKTsKKyAgICBpZiAoaml0LT5jb2RlQmxvY2soKS0+dXNlRGF0
YUlDKCkpCisgICAgICAgIGxpdmVSZWdpc3RlcnMuYWRkKHN0dWJJbmZvLT5tX3N0dWJJbmZvR1BS
KTsKICAgICBsaXZlUmVnaXN0ZXJzLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAg
ICBsaXZlUmVnaXN0ZXJzLm1lcmdlKGV4dHJhKTsKIAogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBl
eHRyYVN0YWNrUGFkZGluZyA9IDA7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFja0J5dGVzVXNl
ZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVz
ZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCpqaXQsIGxpdmVSZWdpc3RlcnMsIGV4dHJhU3Rh
Y2tQYWRkaW5nKTsKQEAgLTU5NiwxNiArNTk5LDEyIEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQg
UG9seW1vcnBoaWNBY2Nlc3MKICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CiAgICAg
c3RhdGUuaml0ID0gJmppdDsKIAotICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7Ci0g
ICAgICAgIGlmIChzdGF0ZS5tX2RvZXNKU0dldHRlclNldHRlckNhbGxzKSB7Ci0gICAgICAgICAg
ICAvLyBXZSBoYXZlIG5vIGd1YXJhbnRlZSB0aGF0IHN0YWNrLXBvaW50ZXIgaXMgdGhlIGV4cGVj
dGVkIG9uZS4gVGhpcyBpcyBub3QgYSBwcm9ibGVtIGlmIHdlIGRvIG5vdCBoYXZlIEpTIGdldHRl
ciAvIHNldHRlciBjYWxscyBzaW5jZSBzdGFjay1wb2ludGVyIGlzCi0gICAgICAgICAgICAvLyBh
IGNhbGxlZS1zYXZlIHJlZ2lzdGVyIGluIHRoZSBDIGNhbGxpbmcgY29udmVuc2lvbi4gSG93ZXZl
ciwgb3VyIEpTIGV4ZWN1dGFibGUgY2FsbCBkb2VzIG5vdCBzYXZlIHN0YWNrLXBvaW50ZXIuIFNv
IHdlIGFyZSBhZGp1c3Rpbmcgc3RhY2stcG9pbnRlciBhZnRlcgotICAgICAgICAgICAgLy8gSlMg
Z2V0dGVyIC8gc2V0dGVyIGNhbGxzLiBCdXQgdGhpcyBjb3VsZCBiZSBkaWZmZXJlbnQgZnJvbSB0
aGUgaW5pdGlhbCBzdGFjay1wb2ludGVyLCBhbmQgbWFrZXMgUEFDIHRhZ2dpbmcgYnJva2VuLgot
ICAgICAgICAgICAgLy8gVG8gZW5zdXJlIFBBQy10YWdnaW5nIHdvcmssIHdlIGZpcnN0IGFkanVz
dCBzdGFjay1wb2ludGVyIHRvIHRoZSBhcHByb3ByaWF0ZSBvbmUuCi0gICAgICAgICAgICBqaXQu
YWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVy
T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBqaXQudGFnUmV0
dXJuQWRkcmVzcygpOworICAgIC8vIE9PUFMKKyAgICBpZiAoQVNTRVJUX0VOQUJMRUQgfHwgdHJ1
ZSkgeworICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVC
bG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIGppdC5zY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgIGF1dG8g
b2sgPSBqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6RXF1YWwsIENDYWxsSGVscGVyczo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIGppdC5zY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgIGppdC5i
cmVha3BvaW50KCk7CisgICAgICAgIG9rLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGUu
cHJlc2VydmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZSA9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1MSw3ICsyNTEsNyBAQCBzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlv
blN0YXRlIHsKICAgICBjb25zdCBSZWdpc3RlclNldCYgY2FsY3VsYXRlTGl2ZVJlZ2lzdGVyc0Zv
ckNhbGxBbmRFeGNlcHRpb25IYW5kbGluZygpOwogCiAgICAgU3BpbGxTdGF0ZSBwcmVzZXJ2ZUxp
dmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChjb25zdCBSZWdpc3RlclNldCYgZXh0cmEgPSB7IH0p
OwotICAgIFNwaWxsU3RhdGUgcHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRo
b3V0RXhjZXB0aW9ucyhjb25zdCBSZWdpc3RlclNldCYgZXh0cmEgPSB7IH0pOworICAgIFNwaWxs
U3RhdGUgcHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9u
cygpOwogCiAgICAgdm9pZCByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGxXaXRo
VGhyb3duRXhjZXB0aW9uKGNvbnN0IFNwaWxsU3RhdGUmKTsKICAgICB2b2lkIHJlc3RvcmVMaXZl
UmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChjb25zdCBTcGlsbFN0YXRlJiwgY29uc3QgUmVnaXN0
ZXJTZXQmIGRvbnRSZXN0b3JlID0geyB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTgwLDEwICsxODAsMTAgQEAgUHV0QnlTdGF0dXMgUHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JT
dHViSQogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+
aWRlbnRpZmllcigpOwogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmll
ci51aWQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodWlkKTsKLSAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0KLSAgICAgICAgICAgIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2st
PnZtKCkpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZpZXIp
LCBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOwor
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5VmFyaWFudDo6cmVwbGFjZShXVEZNb3ZlKGlkZW50aWZp
ZXIpLCBzdHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiBQdXRCeVN0YXR1cyhKU0M6
OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOwogICAgIH0KICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCiAjaW5jbHVkZSAiQ2FjaGVhYmxl
SWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5o
IgogI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgog
CkBAIC02NSw5ICs2Niw5IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkU2Vs
ZigKICAgICBBU1NFUlQoaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKICAgICBzZXRDYWNoZVR5cGUo
bG9ja2VyLCBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVu
dGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJs
b2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OmluaXRBcnJheUxlbmd0aChjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXJCYXNlJiBsb2NrZXIpCkBAIC04Nyw5ICs4OCw5IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86
OmluaXRQdXRCeUlkUmVwbGEKICAgICBBU1NFUlQobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpV
bnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpQdXRCeUlkUmVwbGFj
ZSk7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndyaXRlQmFycmllcihj
b2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxm
T2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0SW5CeUlk
U2VsZihjb25zdCBDb25jdXJyZW50SlNMb2NrZXJCYXNlJiBsb2NrZXIsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKQpAQCAtOTcsOSArOTgs
OSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0SW5CeUlkU2VsZihjCiAgICAgQVNTRVJU
KG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENhY2hlVHlwZShsb2Nr
ZXIsIENhY2hlVHlwZTo6SW5CeUlkU2VsZik7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmll
cjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmll
cihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVCbG9jay0+
dm0oKS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYub2Zmc2V0
ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjpkZXJlZigpCkBAIC0yMzYsNyArMjM3LDcgQEAgQWNjZXNzR2VuZXJhdGlv
blJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbwogICAgICAgICAvLyB3ZSdyZSBidWZmZXJlZCBpcyBi
ZWNhdXNlIHdlIHJlbHkgb24gaXQgdG8gcmVzZXQgZHVyaW5nIEdDIGlmIG1faW5saW5lQWNjZXNz
QmFzZVN0cnVjdHVyZQogICAgICAgICAvLyBpcyBjb2xsZWN0ZWQuCiAgICAgICAgIG1faWRlbnRp
ZmllciA9IG51bGxwdHI7Ci0gICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5jbGVh
cigpOworICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOwogICAgICAgICAK
ICAgICAgICAgLy8gSWYgd2UgZ2VuZXJhdGVkIHNvbWUgY29kZSB0aGVuIHdlIGRvbid0IHdhbnQg
dG8gYXR0ZW1wdCB0byByZXBhdGNoIGluIHRoZSBmdXR1cmUgdW50aWwgd2UKICAgICAgICAgLy8g
Z2F0aGVyIGVub3VnaCBjYXNlcy4KQEAgLTI1MSw3ICsyNTIsNyBAQCB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiB7CiAgICAgY2xlYXJCdWZmZXJlZFN0cnVjdHVyZXMo
KTsKICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZS5jbGVhcigpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAK
ICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjg1LDYgKzI4Niw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0
IENvbmMKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5
SWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAg
IGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CiAgICAgICAgIHJlc2V0UHV0QnkoY29k
ZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeVZhbCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQWNjZXNzVHlwZTo6SW5CeUlkOgpAQCAtMzYwLDggKzM2Miw4IEBAIHZvaWQgU3RydWN0dXJl
U3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICB9CiAKICAgICBib29sIGlzVmFsaWQgPSB0
cnVlOwotICAgIGlmIChtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCi0gICAgICAgIGlzVmFs
aWQgJj0gdm0uaGVhcC5pc01hcmtlZChtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkp
OworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmUodm0pKQorICAgICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNNYXJrZWQoc3RydWN0dXJlKTsK
ICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICBpc1ZhbGlk
ICY9IHUuc3R1Yi0+dmlzaXRXZWFrKHZtKTsKIApAQCAtMzc1LDggKzM3Nyw4IEBAIHZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0
b3I+CiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhWaXNpdG9y
JiB2aXNpdG9yKQogewotICAgIGlmIChtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCi0gICAg
ICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7Cisg
ICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2
aXNpdG9yLnZtKCkpKQorICAgICAgICBzdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOwog
CiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikKICAgICAgICAgdS5zdHVi
LT5wcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKQEAgLTQzMCw2ICs0MzIsMjA0IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6c2UKICAgICBtX2NhY2hlVHlwZSA9
IG5ld0NhY2hlVHlwZTsKIH0KIAordm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZy
b21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8pCit7CisgICAgYWNjZXNzVHlwZSA9IHVubGlua2Vk
U3R1YkluZm8uYWNjZXNzVHlwZTsKKyAgICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8uc3RhcnQ7
CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5kb25lTG9jYXRpb247CisgICAg
c2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5zbG93UGF0aFN0YXJ0TG9j
YXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1
bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKTsKKyAgICBjb2RlT3JpZ2lu
ID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIG1fY29k
ZVB0ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKworICAgIHVzZWRSZWdpc3RlcnMgPSBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgaWYgKGFjY2Vzc1R5cGUg
PT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZvciBpdGVyYXRvcl9uZXh0LCB3ZSBjYW4ndCBj
bG9iYmVyIHRoZSAiZG9udENsb2JiZXJSZWdpc3RlciIgcmVnaXN0ZXIgZWl0aGVyLgorICAgICAg
ICB1c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVy
UmVnaXN0ZXIpOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVs
ZXRlQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okdl
dEJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGlt
aXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6Cisg
ICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpHZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJ
ZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6Cisg
ICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6Cisg
ICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAK
KyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6
IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFt
ZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAg
ICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21h
TW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAg
ICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAg
ICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6
CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJp
dmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0
S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlm
ICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25Q
dXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNt
YU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gdW5saW5rZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRLaW5kLmlz
RGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDog
b3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBm
YWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVC
eUlEOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBiYXNl
R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3Bl
cnR5R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVs
QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKKyAg
ICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBmYWxz
ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7
CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgICAgIHJlZ3MucHJvdG90eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
Ojpwcm90bzsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5C
eVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmll
ciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlk
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRo
aXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlH
ZXRCeUlkOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7
CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVu
dGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlz
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhU
aGlzUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2VsaW5lR2V0
QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsK
KyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAg
ICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICBt
X3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBm
YWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2
YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgICAgICBpZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQdXRCeVZh
bCkKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6cHJvZmlsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQ
cml2YXRlQnJhbmQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAg
ICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVlR1BSID0g
SW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJh
bmRSZWdpc3RlcnM6OmJyYW5kOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
ICNpZiBBU1NFUlRfRU5BQkxFRAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6Y2hlY2tDb25zaXN0
ZW5jeSgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIK
ICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZVNldC5oIgpAQCAtNTYsNiArNTcsNyBAQCBlbnVtIGNsYXNzIEFjY2Vzc1R5
cGUgOiBpbnQ4X3QgewogICAgIEdldEJ5VmFsLAogICAgIFB1dEJ5SWQsCiAgICAgUHV0QnlWYWws
CisgICAgUHV0UHJpdmF0ZU5hbWUsCiAgICAgSW5CeUlkLAogICAgIEluQnlWYWwsCiAgICAgSGFz
UHJpdmF0ZU5hbWUsCkBAIC03OCw2ICs4MCw4IEBAIGVudW0gY2xhc3MgQ2FjaGVUeXBlIDogaW50
OF90IHsKICAgICBTdHJpbmdMZW5ndGgKIH07CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvOworCiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU3RydWN0dXJlU3R1YkluZm8pOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpA
QCAtOTgsNiArMTAyLDggQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWYoKTsKICAgICB2b2lkIGFi
b3V0VG9EaWUoKTsKIAorICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKENvZGVCbG9jayosIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mKTsKKwogICAgIERF
Q0xBUkVfVklTSVRfQUdHUkVHQVRFOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0dWIgaGFzIHdl
YWsgcmVmZXJlbmNlcyB0aGF0IGFyZSBkZWFkLiBJZiBpdCBkb2VzLCB0aGVuIGl0IHJlc2V0cyBp
dHNlbGYsCkBAIC0zMjUsMTMgKzMzMSwxOSBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAgICAgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luOworICAgIFByb3BlcnR5T2Zmc2V0IGJ5SWRTZWxmT2Zmc2V0Owor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgYnlJZFNlbGZPZmZzZXQpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSk7IH0KICAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgICAgIH0gYnlJZFNlbGY7CiAgICAgICAgIFBv
bHltb3JwaGljQWNjZXNzKiBzdHViOwogICAgIH0gdTsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlKiBpbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIGlmICghbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiB2bS5nZXRTdHJ1Y3R1cmUobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAg
ICB9CisgICAgU3RydWN0dXJlSUQgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlIHsgMCB9Owog
cHJpdmF0ZToKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAgICAvLyBS
ZXByZXNlbnRzIHRob3NlIHN0cnVjdHVyZXMgdGhhdCBhbHJlYWR5IGhhdmUgYnVmZmVyZWQgQWNj
ZXNzQ2FzZXMgaW4gdGhlIFBvbHltb3JwaGljQWNjZXNzLgpAQCAtMzUyLDYgKzM2NCw3IEBAIHB1
YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUU3R1YlJvdXRpbmVQdHJUYWc+IG1f
Y29kZVB0cjsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlUHRyKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBtX2NvZGVQdHIpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRvbmVMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgZG9uZUxvY2F0aW9uKTsgfQogICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZTbG93UGF0aFN0YXJ0TG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIHNsb3dQYXRoU3RhcnRMb2NhdGlvbik7IH0KICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2xvd09wZXJhdGlvbigpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgbV9zbG93T3BlcmF0aW9uKTsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb3VudGRvd24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoU3RydWN0dXJlU3R1YkluZm8sIGNvdW50ZG93bik7IH0KQEAgLTQ0Nyw2ICs0NjAsMTcgQEAg
aW5saW5lIGF1dG8gYXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bgogICAgIH0KIH0KIAorc3Ry
dWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8geworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZTsKKyAgICBQdXRLaW5kIHB1dEtpbmQ7CisgICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwcml2YXRl
RmllbGRQdXRLaW5kIHsgUHJpdmF0ZUZpZWxkUHV0S2luZDo6bm9uZSgpIH07CisgICAgRUNNQU1v
ZGUgZWNtYU1vZGUgeyBFQ01BTW9kZTo6c2xvcHB5KCkgfTsKKyAgICBCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXg7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
IHN0YXJ0OyAvLyBUaGlzIGlzIGVpdGhlciB0aGUgc3RhcnQgb2YgdGhlIGlubGluZSBJQyBmb3Ig
KmJ5SWQgY2FjaGVzLiBvciB0aGUgbG9jYXRpb24gb2YgcGF0Y2hhYmxlIGp1bXAgZm9yICdpbnN0
YW5jZW9mJyBjYWNoZXMuCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
ZG9uZUxvY2F0aW9uOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PiBzbG93UGF0aFN0YXJ0TG9jYXRpb247Cit9OworCiAjZWxzZQogCiBjbGFzcyBTdHJ1Y3R1cmVT
dHViSW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBl
clNhbXBsZXIuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBA
QCB2b2lkIHByaW50U3VwZXJTYW1wbGVyU3RhdGUoKQogICAgIGRvdWJsZSBwZXJjZW50YWdlID0g
MTAwLjAgKiBpbiAvIChpbiArIG91dCk7CiAgICAgaWYgKHBlcmNlbnRhZ2UgIT0gcGVyY2VudGFn
ZSkKICAgICAgICAgcGVyY2VudGFnZSA9IDAuMDsKLSAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUg
YmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIlxuIik7CisgICAgZGF0
YUxvZygiUGVyY2VudCB0aW1lIGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNlbnRh
Z2UsICIlXG4iKTsKIH0KIAogdm9pZCBlbmFibGVTdXBlclNhbXBsZXIoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNp
bmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2Rl
LmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiQnl0
ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCkBAIC03OCw2ICs3OSw4IEBA
IFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSYKICAgICAgICAgY3JlYXRl
UmFyZURhdGFJZk5lY2Vzc2FyeShsb2NrZXIpOwogICAgICAgICBtX3JhcmVEYXRhLT5tX3ByaXZh
dGVCcmFuZFJlcXVpcmVtZW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByaXZhdGVCcmFuZFJl
cXVpcmVtZW50OjpOZWVkZWQpOwogICAgIH0KKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5z
ZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFm
dGVyV2FybVVwKCkpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KQEAgLTMxNiw2
ICszMTksNDggQEAgaW50IFVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2ZmcwogICAg
IHJldHVybiBtX291dE9mTGluZUp1bXBUYXJnZXRzLmdldChieXRlY29kZU9mZnNldCk7CiB9CiAK
KyNpZiBBU1NFUlRfRU5BQkxFRAorYm9vbCBVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRlbnRpZmll
cihVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIGlmIChudW1iZXJPZklkZW50aWZpZXJz
KCkgPiAxMDApIHsKKyAgICAgICAgaWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSAhPSBtX2NhY2hl
ZElkZW50aWZpZXJVaWRzLnNpemUoKSkgeworICAgICAgICAgICAgTG9ja2VyIGxvY2tlcihtX2Nh
Y2hlZElkZW50aWZpZXJVaWRzTG9jayk7CisgICAgICAgICAgICBIYXNoU2V0PFVuaXF1ZWRTdHJp
bmdJbXBsKj4gY2FjaGVkSWRlbnRpZmllclVpZHM7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtYmVyT2ZJZGVudGlmaWVycygpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyID0gdGhpcy0+aWRlbnRpZmllcihpKTsKKyAg
ICAgICAgICAgICAgICBjYWNoZWRJZGVudGlmaWVyVWlkcy5hZGQoaWRlbnRpZmllci5pbXBsKCkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwor
ICAgICAgICAgICAgbV9jYWNoZWRJZGVudGlmaWVyVWlkcyA9IFdURk1vdmUoY2FjaGVkSWRlbnRp
ZmllclVpZHMpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVkSWRlbnRpZmll
clVpZHMuY29udGFpbnModWlkKTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtYmVyT2ZJZGVudGlmaWVycygpOyArK2kpIHsKKyAgICAgICAgaWYgKGlkZW50aWZpZXIo
aSkuaW1wbCgpID09IHVpZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworaW50MzJfdCBVbmxpbmtlZENvZGVCbG9jazo6dGhy
ZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKQoreworICAgIHN3aXRjaCAoZGlkT3B0aW1p
emUoKSkgeworICAgIGNhc2UgVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU6CisgICAgICAgIHJldHVy
biB0aHJlc2hvbGQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6RmFsc2U6CisgICAgICAgIHJldHVybiB0
aHJlc2hvbGQgKiA0OworICAgIGNhc2UgVHJpU3RhdGU6OlRydWU6CisgICAgICAgIHJldHVybiB0
aHJlc2hvbGQgLyAyOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gdGhyZXNob2xkOworfQorCisKIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hh
cmVkUHJvZmlsZXMoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX21ldGFkYXRhLT5pc0ZpbmFs
aXplZCgpKTsKQEAgLTMzNywxNSArMzgyLDI1IEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmFs
bG9jYXRlU2hhcmVkUHIKICAgICBpZiAobV9tZXRhZGF0YS0+aGFzTWV0YWRhdGEoKSkgewogICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZkFycmF5UHJvZmlsZXMgPSAwOwogCi0jZGVmaW5lIENPVU5U
KF9fb3ApIFwKLSAgICAgICAgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51
bUVudHJpZXM8X19vcD4oKTsKKyNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZBcnJheVByb2Zp
bGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKICAgICAgICAgRk9SX0VBQ0hf
T1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShDT1VOVCkKICAgICAgICAgRk9SX0VBQ0hfT1BDT0RF
X1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8oQ09VTlQpCiAjdW5kZWYgQ09VTlQKICAgICAgICAg
bnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BJdGVyYXRv
ck5leHQ+KCk7CiAgICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5u
dW1FbnRyaWVzPE9wR2V0QnlJZD4oKTsKLQogICAgICAgICBtX2FycmF5UHJvZmlsZXMgPSBGaXhl
ZFZlY3RvcjxVbmxpbmtlZEFycmF5UHJvZmlsZT4obnVtYmVyT2ZBcnJheVByb2ZpbGVzKTsKKwor
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkJpbmFyeUFyaXRoUHJvZmlsZXMgPSAwOworI2RlZmlu
ZSBDT1VOVChfX29wKSBudW1iZXJPZkJpbmFyeUFyaXRoUHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+
bnVtRW50cmllczxfX29wPigpOworICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllf
QVJJVEhfUFJPRklMRShDT1VOVCkKKyN1bmRlZiBDT1VOVAorICAgICAgICBtX2JpbmFyeUFyaXRo
UHJvZmlsZXMgPSBGaXhlZFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+KG51bWJlck9mQmluYXJ5
QXJpdGhQcm9maWxlcyk7CisKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZVbmFyeUFyaXRoUHJv
ZmlsZXMgPSAwOworI2RlZmluZSBDT1VOVChfX29wKSBudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxl
cyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CisgICAgICAgIEZPUl9FQUNIX09Q
Q09ERV9XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoQ09VTlQpCisjdW5kZWYgQ09VTlQKKyAgICAg
ICAgbV91bmFyeUFyaXRoUHJvZmlsZXMgPSBGaXhlZFZlY3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4o
bnVtYmVyT2ZVbmFyeUFyaXRoUHJvZmlsZXMpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTIgQEAKIAogI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJBcnJheVByb2ZpbGUu
aCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUu
aCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50
ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxl
ckluZm8uaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCkBAIC02NCw2ICs2Niw3IEBAIGNsYXNz
IFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBj
bGFzcyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU7CitjbGFzcyBCYXNlbGluZUpJVENvZGU7CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm87
CiBlbnVtIGNsYXNzIExpbmtUaW1lQ29uc3RhbnQgOiBpbnQzMl90OwogCkBAIC0xNzUsNiArMTc4
LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25v
d24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9
CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRv
Q29uc3RhbnRJbmRleCgpXTsgfQorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJz
W3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0
Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJl
Z2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CiAgICAgY29uc3QgRml4ZWRW
ZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247
IH0KIApAQCAtMjA3LDYgKzIxMSwxNSBAQCBwdWJsaWM6CiAgICAgSlNQYXJzZXJTY3JpcHRNb2Rl
IHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1v
ZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0
cnVjdGlvbnMoKSBjb25zdDsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25BdChC
eXRlY29kZUluZGV4IGluZGV4KSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5hdChpbmRl
eCkucHRyKCk7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICBjb25zdCBhdXRvKiBpbnN0cnVjdGlvbnNC
ZWdpbiA9IGluc3RydWN0aW9ucygpLmF0KDApLnB0cigpOworICAgICAgICBjb25zdCBhdXRvKiBp
bnN0cnVjdGlvbnNFbmQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluc3RydWN0aW9uc0JlZ2luKSArIGluc3RydWN0aW9u
cygpLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9uID49IGluc3Ry
dWN0aW9uc0JlZ2luICYmIGluc3RydWN0aW9uIDwgaW5zdHJ1Y3Rpb25zRW5kKTsKKyAgICAgICAg
cmV0dXJuIGluc3RydWN0aW9uIC0gaW5zdHJ1Y3Rpb25zQmVnaW47CisgICAgfQorICAgIHVuc2ln
bmVkIGluc3RydWN0aW9uc1NpemUoKSBjb25zdCB7IHJldHVybiBpbnN0cnVjdGlvbnMoKS5zaXpl
KCk7IH0KIAogICAgIHVuc2lnbmVkIG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1f
bnVtQ2FsbGVlTG9jYWxzOyB9CiAgICAgdW5zaWduZWQgbnVtVmFycygpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtVmFyczsgfQpAQCAtMzM0LDEwICszNDcsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbV9tZXRhZGF0YS0+c2l6ZUluQnl0ZXMoKTsKICAgICB9CiAKKyAgICBib29sIGxvb3BIaW50
c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKKyAgICB7CisgICAgICAgIC8vIFNv
bWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhl
eSBydW4uCisgICAgICAgIHJldHVybiAhaXNCdWlsdGluRnVuY3Rpb24oKTsKKyAgICB9CiAgICAg
dm9pZCBhbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKCk7CiAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUm
IHVubGlua2VkVmFsdWVQcm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ZhbHVlUHJv
ZmlsZXNbaW5kZXhdOyB9CiAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUmIHVubGlua2VkQXJyYXlQ
cm9maWxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2FycmF5UHJvZmlsZXNbaW5kZXhdOyB9
CiAKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGJvb2wgaGFzSWRlbnRpZmllcihVbmlxdWVkU3Ry
aW5nSW1wbCopOworI2VuZGlmCisKKyAgICBpbnQzMl90IHRocmVzaG9sZEZvckpJVChpbnQzMl90
IHRocmVzaG9sZCk7CisKIHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSYsIFN0
cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYsIE9wdGlvblNldDxDb2Rl
R2VuZXJhdGlvbk1vZGU+KTsKIApAQCAtMzk3LDYgKzQyMSw3IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9sZXhpY2FsU2NvcGVGZWF0dXJlcyA6IDQ7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVu
dEpTTG9jayBtX2xvY2s7CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJh
c2VsaW5lQ29kZTsKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07
CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEzLDcgKzQzOCw2IEBAIHBy
aXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0
aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xp
dmVuZXNzOwogCi0KICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9maWxlIG1f
ZXhpdFByb2ZpbGU7CiAjZW5kaWYKQEAgLTQ1OCw2ICs0ODIsMTYgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkp
OwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiog
cGMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVj
b2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQpOworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQ
cm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQor
ICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJl
dHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25D
b3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3Vu
dGVyOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNo
TWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjUsOCArNDk5LDE2IEBA
IHByaXZhdGU6CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0
czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4ZWRW
ZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIEZpeGVkVmVjdG9y
PFVubGlua2VkVmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CiAgICAgRml4ZWRWZWN0b3I8
VW5saW5rZWRBcnJheVByb2ZpbGU+IG1fYXJyYXlQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxC
aW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBGaXhlZFZlY3Rv
cjxVbmFyeUFyaXRoUHJvZmlsZT4gbV91bmFyeUFyaXRoUHJvZmlsZXM7CisKKyNpZiBBU1NFUlRf
RU5BQkxFRAorICAgIExvY2sgbV9jYWNoZWRJZGVudGlmaWVyVWlkc0xvY2s7CisgICAgSGFzaFNl
dDxVbmlxdWVkU3RyaW5nSW1wbCo+IG1fY2FjaGVkSWRlbnRpZmllclVpZHM7CisjZW5kaWYKIAog
cHJvdGVjdGVkOgogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDE1IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxl
KTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJf
dCBvZmZzZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9m
ZnNldCA9IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9m
ZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgYmFzZVR5cGVPZmZzZXQg
PSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdub2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSks
IGJhc2VUeXBlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9m
KHR5cGVuYW1lIE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9
CisKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAgdW5zaWduZWQgbnVtRW50
cmllcygpOwogCkBAIC0xMDcsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNf
b2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQz
Ml90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsMTMgKzQ1LDExIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKIAog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZC
dWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNw
ZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJ
bmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNw
ZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKICAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQot
ICAgICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Cisg
ICAgICAgIGNsZWFyQnVja2V0cygpOwogICAgIH0KICAgICAKICAgICBFbmNvZGVkSlNWYWx1ZSog
c3BlY0ZhaWxCdWNrZXQodW5zaWduZWQgaSkKQEAgLTU5LDYgKzU3LDEyIEBAIHN0cnVjdCBWYWx1
ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgQVNTRVJUKG51bWJlck9mQnVja2V0cyArIGkgPCB0b3Rh
bE51bWJlck9mQnVja2V0cyk7CiAgICAgICAgIHJldHVybiBtX2J1Y2tldHMgKyBudW1iZXJPZkJ1
Y2tldHMgKyBpOwogICAgIH0KKworICAgIHZvaWQgY2xlYXJCdWNrZXRzKCkKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQor
ICAgICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Cisg
ICAgfQogICAgIAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tl
dCkgY29uc3QKICAgICB7CkBAIC0xMjMsOCArMTI3LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJh
c2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rp
b24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJl
YWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVk
VHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVj
a2V0czsgKytpKSB7CkBAIC0xMzksNyArMTQxLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ug
ewogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisK
ICAgICBFbmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAg
ICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE2MSw2ICsx
NjMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVj
dCBWYWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0
czwwPiB7CiAgICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZC
dWNrZXRzPDA+KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsg
fQogfTsKIAogc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBW
YWx1ZVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oIgpAQCAtMzQsNyArMzUsOSBAQAogI2luY2x1ZGUgIkRGR0p1bXBS
ZXBsYWNlbWVudC5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5l
Q2FsbEZyYW1lU2V0LmgiCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSlNDYXN0
LmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckNv
bXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiUmVjb3JkZWRTdGF0dXNlcy5oIgogI2luY2x1ZGUgPHd0
Zi9CYWcuaD4KQEAgLTcwLDcgKzczLDcgQEAgc3RydWN0IFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9u
IHsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX3RvOwogfTsKICAgICAgICAgCi1jbGFzcyBD
b21tb25EYXRhIHsKK2NsYXNzIENvbW1vbkRhdGEgOiBwdWJsaWMgTWF0aElDSG9sZGVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21tb25EYXRhKTsKIHB1YmxpYzoKICAgICBDb21tb25E
YXRhKCkKQEAgLTExNiw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8Q29kZUJs
b2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PiBtX3dhdGNocG9pbnRzOwogICAgIEZpeGVkVmVjdG9y
PEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRzOwogICAgIEZpeGVkVmVjdG9yPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludD4gbV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKICAg
ICBSZWNvcmRlZFN0YXR1c2VzIHJlY29yZGVkU3RhdHVzZXM7CiAgICAgVmVjdG9yPEp1bXBSZXBs
YWNlbWVudD4gbV9qdW1wUmVwbGFjZW1lbnRzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRy
eUpJVENvZGUuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUu
aAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOwogCitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3Ry
dWN0IFN0cmluZ0p1bXBUYWJsZTsKKwogbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEpJVENvbXBp
bGVyOwpAQCAtMTAxLDYgKzEwNCw4IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVP
cmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgZmluYWw7CiAKICAgICB1c2luZyBE
aXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZkZvckRGRzsKKworICAgIFBDVG9Db2RlT3Jp
Z2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3Bj
VG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBKSVRDb21waWxlcjsgLy8gQWxsb3cgSklUQ29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCku
CkBAIC0xNDAsNiArMTQ1LDggQEAgcHVibGljOgogICAgIEhhc2hNYXA8Qnl0ZWNvZGVJbmRleCwg
VHJpZ2dlclJlYXNvbj4gdGllclVwRW50cnlUcmlnZ2VyczsKIAogICAgIFdyaXRlQmFycmllcjxD
b2RlQmxvY2s+IG1fb3NyRW50cnlCbG9jazsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFi
bGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+
IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKICAgICB1bnNpZ25lZCBvc3JFbnRyeVJldHJ5Owog
ICAgIGJvb2wgYWJhbmRvbk9TUkVudHJ5OwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsMTMgKzE4NSwxMiBAQCB2b2lkIEpJVENvbXBpbGVy
OjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgCiAgICAgbV9ncmFwaC5yZWdpc3RlckZyb3pl
blZhbHVlcygpOwogCi0gICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5p
c0VtcHR5KCkgfHwgIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAg
ICAgICBpZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7
Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBU
YWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKLSAgICB9CisgICAg
QVNTRVJUKG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAg
aWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIAorICAgICAg
ICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1bXBU
YWJsZXMuaXNFbXB0eSgpKQorICAgICAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9
IFdURk1vdmUobV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwogCiAgICAgZm9yIChCYWc8U3dp
dGNoRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fc3dpdGNoRGF0YS5iZWdpbigpOyAh
IWl0ZXI7ICsraXRlcikgewogICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKippdGVyOwpAQCAt
MTk5LDEyICsxOTgsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5r
QgogICAgICAgICBjYXNlIFN3aXRjaENoYXI6CiAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CiAg
ICAgICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4
KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNo
SnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlzRW1wdHkoKSk7CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN3aXRj
aEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5z
d2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhd
OwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9j
ay0+aW5kZXhdKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtlZFRhYmxlLm1fY3Rp
T2Zmc2V0cy5zaXplKCkgPT0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpKTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5z
aXplKCk7IGotLTspCkBAIC0yMTksMTIgKzIxOCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5r
KExpbmtCdWZmZXImIGxpbmtCCiAKICAgICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6IHsKICAgICAg
ICAgICAgIGlmICghZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQobV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5k
ZXgpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29u
c3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAg
ICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3
aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5n
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRh
LmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0
VGFibGUuc2l6ZSgpICsgMSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbGlua2Vk
VGFibGUubV9jdGlPZmZzZXRzKQpAQCAtMzMzLDcgKzMzMiw3IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQ
Q1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcikpOworICAgICAgICBtX2ppdENv
ZGUtPmNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdp
bk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpOwog
fQogCiBzdGF0aWMgdm9pZCBlbWl0U3RhY2tPdmVyZmxvd0NoZWNrKEpJVENvbXBpbGVyJiBqaXQs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc3RhY2tPdmVyZmxvdykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTcsNyArOTcsNiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUq
CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUo
KSkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCk7Ci0gICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNv
ZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIAogICAgIGlm
ICghT3B0aW9uczo6dXNlT1NSRW50cnlUb0RGRygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzIsOSArNzcy
LDYgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIAogICAgIC8vIFRo
ZSB0YWcgcmVnaXN0ZXJzIGFyZSBuZWVkZWQgdG8gbWF0ZXJpYWxpemUgcmVjb3ZlcmllcyBiZWxv
dy4KICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKIAotICAgIGlm
IChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVz
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7Ci0KICAgICBp
ZiAoaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQpIHsKICAgICAgICAgRW5jb2Rl
ZEpTVmFsdWUqIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CiAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25NYXRlcmlhbGl6ZU9T
UkV4aXRTaWRlU3RhdGUpPigmdm0sICZleGl0LCB0bXBTY3JhdGNoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJKSVQuaCIKQEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhW
TSYgdm0sIENDYWxsSGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2gg
KGppdC5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6
Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBl
ZFRocmVzaG9sZChqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7
CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBl
ZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlw
ZTo6RlRMSklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3Vu
dGVyOjpjbGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRh
cmdldFZhbHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291
bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMTMs
NiArMzE0LDEwIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAg
ICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFz
ZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+
bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGlu
ZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAg
ICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNs
b3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6
cGJHUFIpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJs
b2NrRm9yKCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFi
bGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ss
IEpJVDo6c19tZXRhZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVK
SVRDb25zdGFudFBvb2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxp
bmVDb2RlQmxvY2ssIEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw2ICs0MDksOSBAQCB2
b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTElu
dDo6UmVnaXN0ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5y
ZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNl
IHsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9j
a0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5i
YXNlbGluZUpJVENvbnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CisKICAgICAg
ICAgY29kZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKIAogICAgICAg
ICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKTsKQEAgLTQyMCwxMiArNDI4LDE2IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZN
JiB2bSwgQ0NhbGwKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9T
UkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKLSAgICBqaXQuYWRk
UHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKGNvZGVCbG9ja0ZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgeworICAgICAgICBBU1NFUlQoIVJlZ2lz
dGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhMTEludDo6UmVnaXN0ZXJz
OjpwY0dQUikpOworICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSwgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3Jh
dGNoR1BSKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSk7CisKICAgICAgICAgLy8gU2luY2Ugd2Un
cmUganVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2gu
CiAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgdm0uYWRk
cmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSk7CiAgICAgfQotICAgIAorCisgICAgaml0LmFkZFB0
cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZv
cihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKICAg
ICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQ
UkluZm86OnJlZ1QyKTsKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0
clRhZyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50
cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMu
aCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIK
ICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCkBAIC0yODY5LDcgKzI4NzAsNyBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRmluZFN3CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
IGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzRG91YmxlKCkpOwogICAgIGRv
dWJsZSBhc0RvdWJsZSA9IHZhbHVlLmFzRG91YmxlKCk7CkBAIC0yODkwLDcgKzI4OTEsNyBAQCBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZn
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIHJldHVybiBsaW5rZWRUYWJs
ZS5jdGlGb3JWYWx1ZSgqdW5saW5rZWRUYWJsZSwgc3RySW1wbCkuZXhlY3V0YWJsZUFkZHJlc3M8
Y2hhcio+KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzMwLDYgKzczMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6
OmluUGFpcihjYWxsZWVUYWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1
ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZm
bGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
OwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsg
KytpKSB7CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJB
cmdDaGlsZChub2RlLCBpICsgMSk7CkBAIC04ODksNyArODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBz
bG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJl
ZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMg
PSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZd
IHsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAg
ICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODM0LDYg
KzgzNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQ
UiwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51
bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9
IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0g
bV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAg
ICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgaSArIDEpOwpAQCAtOTg1LDcgKzk4Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKE5vZGUqIG5vZGUKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNl
czsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAg
ICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9y
VGFpbENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICsz
OTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBK
SVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRU
eXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwg
dXNlZFJlZ2lzdGVycywKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJ
VCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2Vk
UmVnaXN0ZXJzLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpT
VmFsdWVSZWdzOjpwYXlsb2FkT25seShwcm9wZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQ
UlJlZywgc3R1YkluZm9HUFIpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9s
ID0gdHJ1ZTsKIApAQCAtNDkwNSw3ICs0OTA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlQWRkKE5vZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2pp
dC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5
dGVjb2RlSW5kZXgoKTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJh
c2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVj
b2RlSW5kZXgpOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRK
SVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmppdENv
ZGUoKS0+Y29tbW9uLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNo
aW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVw
YXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGQ7CiAgICAgCkBAIC00OTg5LDcgKzQ5
ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVTdWIoTm9kCiAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFy
aXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUU3ViSUMq
IHN1YklDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7Cisg
ICAgSklUU3ViSUMqIHN1YklDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUU3ViSUMo
YXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZh
bHVlU3ViT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRp
b25WYWx1ZVN1YjsKIApAQCAtNTU3MSw3ICs1NTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlTmVnYXRlKAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBt
X2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmJ5dGVjb2RlSW5kZXgoKTsKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
YmFzZWxpbmVDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRl
Y29kZUluZGV4KTsKLSAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRk
SklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5qaXRD
b2RlKCktPmNvbW1vbi5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRj
aGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5v
blJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlOwogICAgIGNvbXBpbGVN
YXRoSUMobm9kZSwgbmVnSUMsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0
aW9uKTsKQEAgLTU4MTUsNyArNTgxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVW
YWx1ZU11bChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3Jh
cGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29k
ZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUlu
ZGV4KTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTXVs
SUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5qaXRDb2RlKCkt
PmNvbW1vbi5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1
bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hp
bmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwogCkBAIC0xNDc3Myw3ICsxNDc3Myw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3Bl
UmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCks
IGNhbGxTaXRlSW5kZXgpOworICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNo
YWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChu
b2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3Bw
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBp
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBjb21waWxlKFN0
YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogCiAgICAgaWYgKHZtLnNob3VsZEJ1aWxkZXJQQ1Rv
Q29kZU9yaWdpbk1hcHBpbmcoKSkgewogICAgICAgICBCMzo6UENUb09yaWdpbk1hcCBvcmlnaW5N
YXAgPSBzdGF0ZS5wcm9jLT5yZWxlYXNlUENUb09yaWdpbk1hcCgpOwotICAgICAgICBjb2RlQmxv
Y2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBD
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZp
bmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcikpOworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21t
b24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBD
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZp
bmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcik7CiAgICAgfQogCiAgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNFbnRyeVB0clRhZz4gbGFiZWwgPSBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZm
ZXItPmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oc3RhdGUucHJvYy0+Y29kZSgpLmVudHJ5cG9p
bnRMYWJlbCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDggQEAgcHVibGljOgogICAgIERGRzo6Q29t
bW9uRGF0YSogZGZnQ29tbW9uKCkgb3ZlcnJpZGU7CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjb21t
b25EYXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVENvZGUsIGNvbW1vbik7
IH0KICAgICB2b2lkIHNocmlua1RvRml0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIG92ZXJy
aWRlOworCisgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gY29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKICAg
ICBERkc6OkNvbW1vbkRhdGEgY29tbW9uOwogICAgIFZlY3RvcjxPU1JFeGl0PiBtX29zckV4aXQ7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDE0ICs1Miw2IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICBncmFw
aC5yZWdpc3RlckZyb3plblZhbHVlcygpOwogCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB7Ci0g
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAg
ICAgICBBU1NFUlQoY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmVuc3Vy
ZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKLSAgICB9Ci0j
ZW5kaWYKLQogICAgIC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0
aGlzIGVudHJ5cG9pbnQgdG90YWxseSBkaWZmZXJlbnRseQogICAgIC8vIGRlcGVuZGluZyBvbiB3
aGV0aGVyIHdlJ3JlIGRvaW5nIE9TUiBlbnRyeSBvciBub3QuCiAgICAgQ0NhbGxIZWxwZXJzIGpp
dChjb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw3IEBA
CiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIK
ICNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5o
IgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIgogI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCkBAIC0yMzIwLDYgKzIz
MjEsMTggQEAgcHJpdmF0ZToKICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5l
cmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVu
Y3Rpb24pOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVu
YW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklU
QWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRBZGRJQyogYWRkTWF0
aElDKERGRzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUp
IHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Cisg
ICAgc3RhdGljIEpJVE11bElDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJp
bmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVE11bElDKHBy
b2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dl
bmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUTmVnSUMqIGFkZE1hdGhJQyhE
Rkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0
dXJuIGNvbW1vbi5hZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3Rh
dGljIEpJVFN1YklDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFy
aXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVFN1YklDKHByb2ZpbGUp
OyB9CisKICAgICB2b2lkIGNvbXBpbGVWYWx1ZU11bCgpCiAgICAgewogICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4u
c2VtYW50aWMpOwpAQCAtMjM5MSw3ICsyNDA0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAg
ICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0
YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAg
ICAgIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxvY2soKS0+
YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgICAgICBKSVRV
bmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0
ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJ
Qy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IoSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwg
SlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CiAKICAg
ICAgICAgICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKQEAgLTI1MDAs
NyArMjUxMyw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgICAgICAgICAgICAgIEJveDxNYXRo
SUNHZW5lcmF0aW9uU3RhdGU+IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5l
cmF0aW9uU3RhdGU+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBKSVRCaW5hcnlNYXRoSUM8
R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRoSUM8R2VuZXJhdG9y
Pihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0Q29kZS0+Y29tbW9u
LCBhcml0aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBH
ZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBd
LmdwcigpKSwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigp
KSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwgcGFyYW1zLmZwU2NyYXRjaCgwKSwKICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zLmZwU2NyYXRjaCgxKSwgcGFyYW1zLmdwU2NyYXRjaCgw
KSk7CkBAIC00MzE3LDcgKzQzMzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgR1BSUmVnIHN0
dWJJbmZvR1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBwYXJhbXMu
Z3BTY3JhdGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAgYXV0byBnZW5lcmF0
b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAg
aml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2Fs
bFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgaml0LmNv
ZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJ
bmRleCwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgcGFyYW1z
LnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1
YkluZm9HUFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5
SXNTeW1ib2wgPSB0cnVlOwpAQCAtMTAyODUsNiArMTAyOTgsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxs
b2NhdGVkQXJnczsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJn
cy5hcHBlbmQoVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSkpOwogICAgICAg
ICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsK
KyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0
YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZv
ID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50aWNOb2RlT3JpZ2luKTsK
QEAgLTEwNDQzLDEzICsxMDQ1NywxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBz
aHVmZmxlRGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgp
KTsKIAogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1Bcmdz
OworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJs
b2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsK
IAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVC
bG9jaygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVn
VDApOwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xv
d1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6
cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVT
aHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNo
dWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAg
ICAgICAgIH0pOwpAQCAtMTA3OTIsNyArMTA4MDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsK
LSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBj
YWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsm
XSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsK
ICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMTA3Myw3ICsxMTA4OCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAo
aXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJl
ZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJ
bmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRh
aWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4
MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEzLDI4ICs0MTMsMTYgQEAgc3RhdGljIHZvaWQgY29tcGls
ZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAogCiAgICAgUmVnaXN0ZXJTZXQgYWxsRlRMQ2FsbGVlU2F2
ZXMgPSBSZWdpc3RlclNldDo6ZnRsQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIGNvbnN0IFJl
Z2lzdGVyQXRPZmZzZXRMaXN0KiBiYXNlbGluZUNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxv
Y2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogdm1D
YWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsK
LSAgICBSZWdpc3RlclNldCB2bUNhbGxlZVNhdmVzVG9Ta2lwID0gUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCk7Ci0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAg
ICAgaml0LmxvYWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAg
ICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgfQog
CiAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJl
ZyA9IHJlZy5uZXh0KCkpIHsKICAgICAgICAgaWYgKCFhbGxGVExDYWxsZWVTYXZlcy5nZXQocmVn
KSkgewotICAgICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKSk7CiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCB1bndpbmRJbmRl
eCA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5pbmRleE9mKHJlZyk7CiAgICAg
ICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPSBiYXNl
bGluZUNhbGxlZVNhdmVzLT5maW5kKHJlZyk7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIHZt
Q2FsbGVlU2F2ZSA9IG51bGxwdHI7IAotICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRs
ZXIoKSkKLSAgICAgICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVn
KTsKIAogICAgICAgICBpZiAocmVnLmlzR1BSKCkpIHsKICAgICAgICAgICAgIEdQUlJlZyByZWdU
b0xvYWQgPSBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8gR1BSSW5mbzo6cmVnVDAgOiByZWcuZ3By
KCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWdUb0xvYWQgIT0gR1BSSW5mbzo6cmVn
VDEpOwogCiAgICAgICAgICAgICBpZiAodW53aW5kSW5kZXggPT0gVUlOVF9NQVgpIHsKICAgICAg
ICAgICAgICAgICAvLyBUaGUgRlRMIGNvbXBpbGF0aW9uIGRpZG4ndCBwcmVzZXJ2ZSB0aGlzIHJl
Z2lzdGVyLiBUaGlzIG1lYW5zIHRoYXQgaXQgYWxzbwpAQCAtNDUyLDggKzQ0MCw2IEBAIHN0YXRp
YyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAogICAgICAgICAgICAgaWYgKGJh
c2VsaW5lUmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQocmVnVG9M
b2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVy
UmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQtPm9mZnNldCgpKSk7Ci0gICAgICAgICAg
ICBpZiAodm1DYWxsZWVTYXZlICYmICF2bUNhbGxlZVNhdmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNh
dmUtPnJlZygpKSkKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgp
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBGUFJSZWcgZnBSZWdUb0xvYWQgPSBi
YXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8gRlBSSW5mbzo6ZnBSZWdUMCA6IHJlZy5mcHIoKTsKIApA
QCAtNDY0LDE5ICs0NTAsOSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2ln
bmVkCiAKICAgICAgICAgICAgIGlmIChiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQogICAgICAgICAg
ICAgICAgIGppdC5zdG9yZURvdWJsZShmcFJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBiYXNlbGluZVJlZ2lzdGVy
T2Zmc2V0LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKHZtQ2FsbGVlU2F2ZSAmJiAhdm1D
YWxsZWVTYXZlc1RvU2tpcC5nZXQodm1DYWxsZWVTYXZlLT5yZWcoKSkpCi0gICAgICAgICAgICAg
ICAgaml0LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwogICAgICAgICB9CiAgICAg
fQogCi0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgUmVnaXN0
ZXJBdE9mZnNldCogdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChHUFJJbmZvOjpu
dW1iZXJUYWdSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxs
ZWVTYXZlLT5vZmZzZXQoKSkpOwotCi0gICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2
ZXMtPmZpbmQoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9y
ZTY0KEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7Ci0gICAgfQotCiAgICAg
c2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0gYmFzZWxpbmVD
b2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogCiAgICAgaWYg
KGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkp
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgko
cmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRh
ZGF0YS5yYgkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRh
CiAgICAgZGVmIHN0cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAg
IGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVP
ZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5h
bWVzLm1hcCBkbyB8ZmllbGROYW1lfAorICAgICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLl19
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtXyN7ZmllbGROYW1lfSk7IH0i
CisgICAgICAgICAgICBlbmQuam9pbigiXG4iKQorICAgICAgICBlbmQKKworICAgICAgICBkZWYg
Y29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcywgZmllbGROYW1lcykKICAgICAgICAgICAgIGZp
ZWxkcy5tYXAgZG8gfGZpZWxkLCB0eXBlfAogICAgICAgICAgICAgICAgIGlmIHR5cGUua2luZF9v
Zj8gSGFzaAotICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0
RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSl9XG4je3ByZWZpeH19OyIKKyAgICAgICAgICAg
ICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAg
ICcsIHR5cGUsIGZpZWxkTmFtZXMpfVxuI3twcmVmaXh9fTsiCiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZC50
b19zfTsiCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLnRvX3MKKyAgICAg
ICAgICAgICAgICAgICAgZmllbGROYW1lcy5wdXNoKGZpZWxkTmFtZSkKKyAgICAgICAgICAgICAg
ICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGROYW1lfTsiCiAgICAgICAgICAg
ICAgICAgZW5kCiAgICAgICAgICAgICBlbmQuam9pbigiXG4iKQogICAgICAgICBlbmQKIAotICAg
ICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAgICAgICIsIEBmaWVsZHMpCisgICAgICAg
IGZpZWxkTmFtZXMgPSBbXQorICAgICAgICBwcmVmaXggPSAiICAgICAgICAiCisgICAgICAgIGZp
ZWxkcyA9IGNvbnZlcnRGaWVsZHMocHJlZml4LCBAZmllbGRzLCBmaWVsZE5hbWVzKQorICAgICAg
ICBmaWVsZHMgPSBmaWVsZHMgKyAiXG4iICsgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVm
aXgsIGZpZWxkTmFtZXMpCiAKICAgICAgICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRp
YWxpemVycyAmJiAobm90IEBpbml0aWFsaXplcnMuZW1wdHk/KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjcsNiArMzY3LDI4IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpsb2FkUHJv
cGVydHkoR1BSUmUKICAgICAgICAgcmVzdWx0KTsKIH0KIAordm9pZCBBc3NlbWJseUhlbHBlcnM6
OnN0b3JlUHJvcGVydHkoSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBvYmplY3QsIEdQUlJlZyBv
ZmZzZXQsIEdQUlJlZyBzY3JhdGNoKQoreworICAgIEp1bXAgaXNJbmxpbmUgPSBicmFuY2gzMihM
ZXNzVGhhbiwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAg
ICAKKyAgICBsb2FkUHRyKEFkZHJlc3Mob2JqZWN0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoKTsKKyAgICBuZWczMihvZmZzZXQpOworICAgIHNpZ25FeHRlbmQzMlRvUHRy
KG9mZnNldCwgb2Zmc2V0KTsKKyAgICBKdW1wIHJlYWR5ID0ganVtcCgpOworICAgIAorICAgIGlz
SW5saW5lLmxpbmsodGhpcyk7CisgICAgYWRkUHRyKAorICAgICAgICBUcnVzdGVkSW1tMzIoCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXplb2YoSlNPYmplY3QpKSAtCisgICAg
ICAgICAgICAoc3RhdGljX2Nhc3Q8aW50MzJfdD4oZmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMikg
KiBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSksCisgICAgICAg
IG9iamVjdCwgc2NyYXRjaCk7CisgICAgCisgICAgcmVhZHkubGluayh0aGlzKTsKKyAgICAKKyAg
ICBzdG9yZVZhbHVlKHZhbHVlLAorICAgICAgICBCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBU
aW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpKTsKK30KKwogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRMb2FkU3RydWN0dXJlKFZN
JiB2bSwgUmVnaXN0ZXJJRCBzb3VyY2UsIFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3Jh
dGNoKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02OTgsOCArNzIwLDEzIEBAIHZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXMKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUklu
Zm86OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgR1BSSW5m
bzo6cmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qo
dm0sIGluZm8pOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0
aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIENhbGxMaW5rSW5mbyogaW5mbykKK3sKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBDYWxsIGNh
bGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtUYXNrKFs9LCAmdm1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyODI2NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzQsOCArMjM0LDkgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogICAgIAot
ICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNsb2JiZXJzIG9mZnNldC4KKyAgICAvLyBOb3RlIHRoYXQg
dGhlc2UgY2xvYmJlciBvZmZzZXQuCiAgICAgdm9pZCBsb2FkUHJvcGVydHkoR1BSUmVnIG9iamVj
dCwgR1BSUmVnIG9mZnNldCwgSlNWYWx1ZVJlZ3MgcmVzdWx0KTsKKyAgICB2b2lkIHN0b3JlUHJv
cGVydHkoSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBvYmplY3QsIEdQUlJlZyBvZmZzZXQsIEdQ
UlJlZyBzY3JhdGNoKTsKIAogICAgIHZvaWQgbW92ZVZhbHVlUmVncyhKU1ZhbHVlUmVncyBzcmNS
ZWdzLCBKU1ZhbHVlUmVncyBkZXN0UmVncykKICAgICB7CkBAIC0zNzksMTUgKzM4MCwyNiBAQCBw
dWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lLCBHUFJSZWcg
c2NyYXRjaCkKKyAgICB7CisjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAw
CisgICAgICAgIGxvYWRQdHIoJnRvcEVudHJ5RnJhbWUsIHNjcmF0Y2gpOworICAgICAgICBjb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoc2NyYXRjaCk7Cisj
ZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7CisgICAgICAgIFVOVVNF
RF9QQVJBTShzY3JhdGNoKTsKKyNlbmRpZgorICAgIH0KKwogICAgIHZvaWQgY29weUNhbGxlZVNh
dmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJh
bWUpCiAgICAgewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAg
ICAgICBjb25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMgPSB7IFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9OwogICAgICAgICBHUFJSZWcgdGVtcDEgPSB1
c2VkUmVnaXN0ZXJzLmdldEZyZWVHUFIoMCk7Ci0gICAgICAgIGxvYWRQdHIoJnRvcEVudHJ5RnJh
bWUsIHRlbXAxKTsKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXJJbXBsKHRlbXAxKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodG9wRW50cnlGcmFtZSwgdGVtcDEpOwogI2Vsc2UKICAgICAgICAg
VU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOworICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50
cnlGcmFtZSk7CiAjZW5kaWYKICAgICB9CiAgICAgCkBAIC0xNzIwLDYgKzE3MzIsNyBAQCBwdWJs
aWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBDYWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsKICAgICAKICAgICB2b2lkIG1h
a2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAgIHZvaWQgcmVjbGFpbVNwYWNlT25TdGFja0Zv
ckNDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJ
VENvZGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFz
ZWxpbmVKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKKworI2luY2x1ZGUgIkpJVE1hdGhJQy5o
IgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitKSVRBZGRJQyogTWF0aElDSG9sZGVyOjphZGRKSVRBZGRJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRk
KGFyaXRoUHJvZmlsZSk7IH0KK0pJVE11bElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJp
dGhQcm9maWxlKTsgfQorSklUU3ViSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMoQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFBy
b2ZpbGUpOyB9CitKSVROZWdJQyogTWF0aElDSG9sZGVyOjphZGRKSVROZWdJQyhVbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxl
KTsgfQorCit2b2lkIE1hdGhJQ0hvbGRlcjo6YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3Ro
ZXIpCit7CisgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICBtX211
bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAgIG1fbmVnSUNzID0gV1RGTW92ZShv
dGhlci5tX25lZ0lDcyk7CisgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsK
K30KKworQmFzZWxpbmVKSVRDb2RlOjpCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRy
VGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgIDog
RGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQpCisgICAgLCBNYXRoSUNIb2xkZXIoKQoreyB9CisKK0Jhc2VsaW5lSklUQ29kZTo6
fkJhc2VsaW5lSklUQ29kZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIK
KyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQmluYXJ5QXJpdGhQcm9maWxlOworY2xhc3MgVW5hcnlBcml0aFBy
b2ZpbGU7CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBTaW1wbGVK
dW1wVGFibGU7CitzdHJ1Y3QgU3RyaW5nSnVtcFRhYmxlOworCitjbGFzcyBNYXRoSUNIb2xkZXIg
eworcHVibGljOgorICAgIHZvaWQgYWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpOwor
ICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRN
dWxJQyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUU3ViSUMqIGFk
ZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJ
QyhVbmFyeUFyaXRoUHJvZmlsZSopOworCitwcml2YXRlOgorICAgIEJhZzxKSVRBZGRJQz4gbV9h
ZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKKyAgICBCYWc8SklUTmVnSUM+IG1f
bmVnSUNzOworICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Cit9OworCitjbGFzcyBKSVRDb25z
dGFudFBvb2wgeworcHVibGljOgorICAgIHVzaW5nIENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAg
ICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAgR2xvYmFsT2JqZWN0LAorICAg
ICAgICBDYWxsTGlua0luZm8sCisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvLAorICAgICAgICBG
dW5jdGlvbkRlY2wsCisgICAgICAgIEZ1bmN0aW9uRXhwciwKKyAgICB9OworCisgICAgc3RydWN0
IFZhbHVlIHsKKyAgICAgICAgVHlwZSB0eXBlOworICAgICAgICBQYWNrZWRQdHI8dm9pZD4gcGF5
bG9hZDsKKyAgICB9OworCisgICAgSklUQ29uc3RhbnRQb29sKCkgPSBkZWZhdWx0OworICAgIEpJ
VENvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworICAgIEpJVENvbnN0
YW50UG9vbCYgb3BlcmF0b3I9KEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBD
b25zdGFudCBhZGQoVHlwZSB0eXBlLCB2b2lkKiBwYXlsb2FkID0gbnVsbHB0cikKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUoKTsKKyAgICAgICAgbV9j
b25zdGFudHMuYXBwZW5kKFZhbHVlIHsgdHlwZSwgcGF5bG9hZCB9KTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRzLnNpemUoKTsgfQorICAgIFZhbHVlIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50c1tpXTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxWYWx1ZT4gbV9jb25zdGFu
dHM7Cit9OworCisKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2Rl
LCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29k
ZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0
eUNoZWNrKTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisgICAgUENUb0NvZGVP
cmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1RvQ29k
ZU9yaWdpbk1hcC5nZXQoKTsgfQorCisgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3Vu
bGlua2VkQ2FsbHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsK
KyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsK
KyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAg
ICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsK
KyAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25z
dGFudFBvb2w7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9D
b2RlT3JpZ2luTWFwOworICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGlu
ZUpJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFz
ZWxpbmVKSVRQbGFuLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3
IEBAIHNpemVfdCBCYXNlbGluZUpJVFBsYW46OmNvZGVTaXplKCkgY29uc3QKIAogQ29tcGlsYXRp
b25SZXN1bHQgQmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6ZSgpCiB7Ci0gICAgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBDb21waWxh
dGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRocmVhZChtX2NvZGVCbG9j
ayk7CiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgog
ICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxl
IiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0
Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuUHJvbG8KICAgICBzdG9y
ZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12b2lkIENDYWxsSGVscGVyczo6bG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQ
YWNrZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tl
bjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOwotICAgIHN0b3JlVmFsdWUo
dGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29w
ZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxv
Y2spKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgY2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRv
d0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRj
aDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAgICBTaGFkb3dDaGlja2VuKiBzaGFk
b3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpAQCAtNzIsNiArNjIsMjggQEAgdm9pZCBD
Q2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQogICAgIHN0b3JlUHRyKHNjcmF0Y2gy
LCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9CiAKKwordGVtcGxhdGUgPHR5cGVuYW1l
IENvZGVCbG9ja1R5cGU+Cit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJS
ZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXgpCit7CisgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBm
cmFtZSkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tl
dDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihT
aGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKKyAgICBzdG9yZVZhbHVlKHRoaXNSZWdz
LCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgdGhpc1ZhbHVlKSkpOworICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1Bh
Y2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Cisg
ICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOworICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Cit9
CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcg
c2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBUcnVzdGVk
SW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIGxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdzLCBzY29w
ZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwordm9pZCBDQ2FsbEhlbHBlcnM6Omxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdz
IHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hh
ZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9
CisKIHZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBl
cnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQogewogICAgIENDYWxsSGVs
cGVycyBqaXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxw
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4NDAsMTQgQEAgcHVibGljOgogICAgIC8v
IFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9sYXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFz
c3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRvcCBvZgogICAgIC8vIHN0YWNrIHRvIG1h
cnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3Vl
UGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3Bl
KTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNr
ZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayosIENhbGxT
aXRlSW5kZXgpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFk
b3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5
cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworcHVibGljOgorICAg
IHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ss
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BS
UmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgp
OworCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91
bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQ
UiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw4ICszNywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBDYWxsRnJh
bWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayogY29kZUJs
b2NrKQogeworICAgIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb2RlQmxvY2stPmNhbGxlZVNh
dmVSZWdpc3RlcnMoKSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2Fs
bGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZl
TG9jYXRpb25zKQorewogICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMgeyBSZWdp
c3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkgfTsKLSAgICBjb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zID0gY29kZUJsb2NrLT5jYWxsZWVTYXZl
UmVnaXN0ZXJzKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVyU2F2ZUxv
Y2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSB7
IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDEzIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8VmFsdWVS
ZWNvdmVyeT4gYXJnczsKICAgICB1bnNpZ25lZCBudW1Mb2NhbHMgeyBVSU5UX01BWCB9OwogICAg
IHVuc2lnbmVkIG51bVBhc3NlZEFyZ3MgeyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG51bVBh
cmFtZXRlcnMgeyBVSU5UX01BWCB9OyAvLyBPbiBvdXIgbWFjaGluZSBmcmFtZS4KICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIFJlZ2lzdGVyTWFwPFZhbHVlUmVjb3Zlcnk+IHJlZ2lzdGVyczsKICAg
ICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZhbGlkR1BSUmVnIH07CiAKICAgICB2b2lk
IHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldHVwQ2Fs
bGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCopOwogI2VuZGlmCiAg
ICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgQ2FsbEZyYW1lU2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZm
bGVyKENDYQogICAgIDogbV9qaXQoaml0KQogICAgICwgbV9vbGRGcmFtZShkYXRhLm51bUxvY2Fs
cyArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKICAgICAsIG1f
bmV3RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0
ZXJzLCBudWxscHRyKQotICAgICwgbV9hbGlnbmVkT2xkRnJhbWVTaXplKENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzCi0gICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZy
YW1lKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAsIG1fYWxpZ25lZE9s
ZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIHJvdW5kQXJndW1l
bnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLm51bVBhcmFtZXRlcnMpKQogICAgICwgbV9hbGlnbmVk
TmV3RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCiAgICAgICAgICsg
cm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEuYXJncy5zaXplKCkpKQogICAgICwg
bV9mcmFtZURlbHRhKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSAtIG1fYWxpZ25lZE9sZEZyYW1lU2l6
ZSkKICAgICAsIG1fbG9ja2VkUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKSkK
ICAgICAsIG1fbnVtUGFzc2VkQXJncyhkYXRhLm51bVBhc3NlZEFyZ3MpCisgICAgLCBtX251bVBh
cmFtZXRlcnMoZGF0YS5udW1QYXJhbWV0ZXJzKQogewogICAgIC8vIFdlIGFyZSBhbGxvd2VkIGFs
bCB0aGUgdXN1YWwgcmVnaXN0ZXJzLi4uCiAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsgKQpAQCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQgQ2FsbEZy
YW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgYXJndW1lbnRDb3VudE9LID0KICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbV9uZXdGcmFtZUJhc2UsCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0
ZXJzKCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9udW1Q
YXJhbWV0ZXJzKSk7CiAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUlu
UmVnaXN0ZXJzKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0LmFuZDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpLCBtX25ld0ZyYW1l
QmFzZSk7CiAgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXpl
b2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1fbmV3RnJhbWVCYXNlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICAgICAgQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEgZGF0YTsKICAgICAgICAgZGF0YS5udW1Mb2NhbHMgPSBudW1Mb2Nh
bHMoKTsKICAgICAgICAgZGF0YS5udW1QYXNzZWRBcmdzID0gbV9udW1QYXNzZWRBcmdzOworICAg
ICAgICBkYXRhLm51bVBhcmFtZXRlcnMgPSBtX251bVBhcmFtZXRlcnM7CiAgICAgICAgIGRhdGEu
Y2FsbGVlID0gZ2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSB9
KS0+cmVjb3ZlcnkoKTsKICAgICAgICAgZGF0YS5hcmdzLnJlc2l6ZShhcmdDb3VudCgpKTsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudCgpOyArK2kpCkBAIC03OTgsNiAr
Nzk5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBlcmZvcm1TYWZlV3JpdGVzKCk7CiAgICAgCiAg
ICAgdW5zaWduZWQgbV9udW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBt
X251bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5
LDcgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6
OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykK
KyAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgbnVsbHB0cikKICAgICAsIG1faW50ZXJwcmV0ZXIo
dm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLnNpemUoKSA6IDApCiAgICAgLCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cih2bSkKQEAgLTc3LDYgKzc3LDkgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29w
T1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAg
bV9nbG9iYWxPYmplY3RDb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7CisgICAgbV9wcm9maWxlZENvZGVCbG9jayA9IGNvZGVC
bG9jazsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVC
bG9jaygpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtOTAsOCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1p
dEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgICAgICByZXR1cm47CiAKICAgICBKdW1wTGlz
dCBza2lwT3B0aW1pemU7Ci0gICAgCi0gICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQz
MihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50
Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhl
Y3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIo
U2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZv
ckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNv
dW50ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAg
ICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC0xMTMsMjggKzEx
Niw0MCBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqCiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6
ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlm
eVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KQogeworICAgIGF1dG8gb2sgPSBi
cmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
OChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIG9rLmxpbmsodGhp
cyk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEds
b2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KQotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJSZWFkT25seVdhdGNocG9pbnQoKS0+YWRkcmVz
c09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykgeworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwor
ICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xv
YmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBv
aW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
KyAgICB9CiB9CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogewotICAg
IGlmICghQVNTRVJUX0VOQUJMRUQpCisgICAgLy8gT09QUworICAgIGlmICghQVNTRVJUX0VOQUJM
RUQgJiYgZmFsc2UpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIo
RXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwog
ICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjpyZXNldFNQKCkKK3sKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Cit9CisKICNkZWZpbmUg
TkVYVF9PUENPREUobmFtZSkgXAogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyBc
CiAgICAgYnJlYWs7CkBAIC0xODEsNjEgKzE5Niw0NCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNl
Q2FsbChjb25zdCBJbnN0cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBK
SVQ6OmVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVT
bG90OjpjYWxsZWUsIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5j
dGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRv
IGhhc0V4ZWN1dGFibGUgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MocmVzdWx0LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpT
RnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgcmVzdWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmso
dGhpcyk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRP
ZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxv
Y2tGb3JDYWxsKCkpLCByZXN1bHQpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhl
Y3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7Cisg
ICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKTsKKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpD
b250ZXh0JiBjdHgpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2Fs
bEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICB9KTsKKyNlbmRpZgor
fQorCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVElu
dGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJs
b2NrLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29k
ZUJsb2NrLCAiXG4iKTsKICAgICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGpp
dEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25z
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9u
Q291bnQgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGlu
c3RydWN0aW9ucyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVu
c2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5zaXplKCk7CiAKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2
bSA9IG1fY29kZUJsb2NrLT52bSgpOwogICAgIEJ5dGVjb2RlSW5kZXggc3RhcnRCeXRlY29kZUlu
ZGV4KDApOwotICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1fY29kZUJs
b2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJsb2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmluaGVy
aXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtKSkpIHsKLSAgICAgICAgLy8gV2UgY2FuIG9u
bHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2RlQmxv
Y2sncyBleGFjdGx5IG9uY2UuCi0gICAgICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxkIGJl
IGludmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRoZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRzIHRv
Ci0gICAgICAgIC8vIGRvIE9TUiBlbnRyeSBpbnRvIHRoZSBiYXNlbGluZSBKSVQgaW4gYSBsb29w
LCBpdCB3aWxsIHBhc3MgaW4gdGhlIGJ5dGVjb2RlIG9mZnNldCBpdAotICAgICAgICAvLyB3YXMg
ZXhlY3V0aW5nIGF0IHdoZW4gaXQga2lja2VkIG9mZiBvdXIgY29tcGlsYXRpb24uIFdlIG9ubHkg
bmVlZCB0byBjb21waWxlIGNvZGUgZm9yCi0gICAgICAgIC8vIGFueXRoaW5nIHJlYWNoYWJsZSBm
cm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0LgotCi0gICAgICAgIC8vIFdlIG9ubHkgYm90aGVyIGJ1
aWxkaW5nIHRoZSBieXRlY29kZSBncmFwaCBpZiBpdCBjb3VsZCBzYXZlIHRpbWUgYW5kIGV4ZWN1
dGFibGUKLSAgICAgICAgLy8gbWVtb3J5LiBXZSBwaWNrIGFuIGFyYml0cmFyeSBvZmZzZXQgd2hl
cmUgd2UgZGVlbSB0aGlzIGlzIHByb2ZpdGFibGUuCi0gICAgICAgIGlmIChtX2xvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gMjAwKSB7Ci0gICAgICAgICAgICAvLyBBcyBhIHNp
bXBsaWZpY2F0aW9uLCB3ZSBkb24ndCBmaW5kIGFsbCBieXRlY29kZSByYW5nZXMgdGhhdCBhcmUg
dW5yZWFjaGFibGUuCi0gICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGZpbmQgdGhlIG1p
bmltdW0gYnl0ZWNvZGUgb2Zmc2V0IHRoYXQgaXMgcmVhY2hhYmxlLCBhbmQKLSAgICAgICAgICAg
IC8vIGNvbXBpbGUgY29kZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0IG9ud2FyZHMuCi0KLSAg
ICAgICAgICAgIEJ5dGVjb2RlR3JhcGggZ3JhcGgobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKSk7Ci0gICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0g
Z3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChtX2xvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2spOwot
Ci0gICAgICAgICAgICBHcmFwaE5vZGVXb3JrbGlzdDxCeXRlY29kZUJhc2ljQmxvY2sqPiB3b3Jr
bGlzdDsKLSAgICAgICAgICAgIHN0YXJ0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsK
LSAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goYmxvY2spOwotCi0gICAgICAgICAgICB3aGlsZSAo
Qnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7Ci0gICAgICAgICAg
ICAgICAgc3RhcnRCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChzdGQ6Om1pbihzdGFydEJ5
dGVjb2RlSW5kZXgub2Zmc2V0KCksIGJsb2NrLT5sZWFkZXJPZmZzZXQoKSkpOwotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggOiBibG9jay0+c3VjY2Vzc29ycygp
KQotICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKCZncmFwaFtzdWNjZXNzb3JJbmRl
eF0pOwotCi0gICAgICAgICAgICAgICAgLy8gQWxzbyBhZGQgY2F0Y2ggYmxvY2tzIGZvciBieXRl
Y29kZXMgdGhhdCB0aHJvdy4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJl
ck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmxlYWRlck9mZnNldCgpOyBieXRlY29kZU9mZnNl
dCA8IGJsb2NrLT5sZWFkZXJPZmZzZXQoKSArIGJsb2NrLT50b3RhbExlbmd0aCgpOykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChi
eXRlY29kZU9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogaGFuZGxl
ciA9IG1fY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KGJ5
dGVjb2RlT2Zmc2V0KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVz
aChncmFwaC5maW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoaGFuZGxlci0+dGFyZ2V0KSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IGluc3RydWN0aW9u
LT5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdT
bG93Q2FzZSA9IDA7CiAgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDAp
OyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKQEAgLTI3
OCwxMiArMjc2LDE1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAg
ICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
ICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24o
KSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAg
ICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAg
ICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNv
ZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9m
ZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0
eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQog
CisgICAgICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYXRjaCkKKyAgICAgICAgICAgIGFzc2VydFN0
YWNrUG9pbnRlck9mZnNldCgpOworCiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICAg
ICAgREVGSU5FX1NMT1dfT1AobGVzcykKICAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQpA
QCAtNTI3LDcgKzUyOCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAK
ICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2Vs
aW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBv
ZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CkBAIC01NDUsOCArNTQ2LDggQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewogICAgICAgICAgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVE
ZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwg
b3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBA
ICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNjAzLDcgKzYw
NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfdmFsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfZGVsX2J5X2lkKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfc3ViKQotI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2Zyb21fc2NvcGUpCiAjZW5kaWYKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX3B1dF90b19zY29wZSkKQEAgLTY3NCw1NSArNjc1LDU1IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAjZW5kaWYKIH0KIAordm9pZCBKSVQ6
OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCkKK3sKKyAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFi
bGUoKSksIHNfbWV0YWRhdGFHUFIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNfY29u
c3RhbnRzR1BSKTsKK30KKwordm9pZCBKSVQ6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKQorewor
ICAgIEJhc2U6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwogdm9pZCBKSVQ6OmNv
bXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
KQogewotICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFi
aWxpdHlMZXZlbCgpOworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxl
ZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAg
IGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFs
c2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAg
bV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
REZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAg
ICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9y
SW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAg
ICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKG1fY29k
ZUJsb2NrLT5jb2RlVHlwZSgpKSB7Ci0gICAgY2FzZSBHbG9iYWxDb2RlOgotICAgIGNhc2UgTW9k
dWxlQ29kZToKLSAgICBjYXNlIEV2YWxDb2RlOgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91
bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5j
dGlvbkNvZGU6Ci0gICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFs
c2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KLSAgICAgICAgLy8g
RG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KLSAgICAgICAgbV9jb2RlQmxvY2stPm1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElu
bGluZUZ1bmN0aW9uKG1fY29kZUJsb2NrKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAg
aWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1f
Y29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0g
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0g
ICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMo
KSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0
Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+
bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVC
bG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAg
ICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVy
T2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtl
ZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgewor
ICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1
bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9y
PFNpbXBsZUp1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3
aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlu
a2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsK
ICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwg
KG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2Vs
aW5lRm9yUHJvZmlsZXIoKSkpKQotICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8
SklURGlzYXNzZW1ibGVyPihtX2NvZGVCbG9jayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0
aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpKSkgeworICAgICAgICAvLyBG
SVhNRTogYnVpbGQgYSBkaXNhc3NlbWJsZXIgb2ZmIG9mIFVubGlua2VkQ29kZUJsb2NrLgorICAg
ICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2Zp
bGVkQ29kZUJsb2NrKTsKKyAgICB9CiAgICAgaWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNv
ZGVQcm9maWxlcikpIHsKKyAgICAgICAgLy8gRklYTUU6IGJ1aWxkIHByb2ZpbGVyIGRpc2Fzc2Vt
YmxlciBvZmYgVW5saW5rZWRDb2RlQmxvY2suCiAgICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9w
dFJlZigKICAgICAgICAgICAgIG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAg
ICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9j
b2RlQmxvY2spLAorICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+
ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fcHJvZmlsZWRDb2RlQmxvY2spLAogICAgICAgICAgICAgICAg
IFByb2ZpbGVyOjpCYXNlbGluZSkpOwotICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxl
ZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7Cisg
ICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXIsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBt
X3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4o
Qnl0ZWNvZGVJbmRleCgwKSkpOwpAQCAtNzQyLDExICs3NDMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5j
dGlvblByb2xvZ3VlKCk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2Nr
LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1Rv
RnJhbWVJblByb2xvZ3VlKCk7CiAKICAgICBMYWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAg
aW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3Rlcik7CisgICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1
bnNpZ25lZCBtYXhGcmFtZVNpemUgPSAtZnJhbWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihmcmFtZVRvcE9mZnNldCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAg
SnVtcExpc3Qgc3RhY2tPdmVyZmxvdzsKQEAgLTc1NywxNiArNzU5LDIwIEBAIHZvaWQgSklUOjpj
b21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVt
aXRTYXZlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3Rl
ckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAg
ZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVN
ZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOwogCi0gICAgaWYgKG1fY29kZUJsb2Nr
LT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgeworICAgIGlmIChtX3VubGlua2VkQ29kZUJs
b2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0
ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQ
cm9maWxpbmcoKSAmJiAoIW1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBt
X3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBy
ZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zm
c2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46
Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29u
c3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAo
dG8KICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9u
J3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAg
ICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAg
ICAgICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFh
cmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
aW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3Vt
ZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKQEAgLTc3NywxMiArNzgzLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhv
dXRGaW5hbGl6aW4KICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdp
c3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRy
ZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9y
QXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZh
bHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJv
ZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2Rl
Ojppc0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJ
VENvZGU6OmlzSklUKG1fcHJvZmlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYg
KFVOTElLRUxZKHNpemVNYXJrZXIpKQogICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+
bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MDUsMjcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNv
ZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQz
Ml90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9w
ZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7
CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJh
dGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVt
YmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2UgbmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAg
ICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMg
IT0gMTsKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYm
IHJlcXVpcmVzQXJpdHlGaXh1cCkgeworICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91
bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlG
aXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hlY2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgo
VHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsK
KwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAg
ICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0
b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZT
aG91bGRBbHdheXNCZUlubGluZWQoKSkpOwogCiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAg
ICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2st
Pm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAg
ICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSks
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVy
YXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hl
Y2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYg
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8o
YmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04MzksNyArODQ4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZD
b2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0o
bGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsK
IAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlu
a0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5l
SklULCBlZmZvcnQpKTsKKyAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1
ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fdW5saW5rZWRDb2RlQmxvY2ssIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAg
LTg1OCw4ICs4NjcsOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIHN3aXRjaCAocmVjb3Jk
LnR5cGUpIHsKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAg
Y2FzZSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcjogewotICAgICAgICAgICAgY29uc3QgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hK
dW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZh
dWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0
ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsg
KytqKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5t
X2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEsOCArODgwLDggQEAgdm9pZCBKSVQ6OmxpbmsoKQog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAg
ICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAg
ICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJp
bmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVm
YXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2Vk
VGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMoKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNoT2Zmc2V0OwpAQCAtOTA2LDMyICs5MTUsMzUgQEAg
dm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJv
bSwgcmVjb3JkLmNhbGxlZSk7CiAgICAgfQogCi0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9n
ZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlW
YWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dp
dGhUaGlzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeUlk
cywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlWYWxzLCBw
YXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeUlkcywgcGF0Y2hC
dWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZGVsQnlWYWxzLCBwYXRjaEJ1ZmZl
cik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0g
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5h
bGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7Cisg
ICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBm
b3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0
clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+
ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihn
ZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRo
U3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJU
YWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFs
aXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBm
aW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJ
ZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2Rl
bEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3Mo
bV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2Vz
KTsKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25J
bmZvKSB7Ci0gICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2Fs
bExpbmtJbmZvOwotICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCi0gICAgICAgICAgICBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5z
bG93UGF0aFN0YXJ0KSwKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbikpOworICAgICAgICBVbmxp
bmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8udW5saW5rZWRDYWxsTGlu
a0luZm87CisgICAgICAgIGluZm8uZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKTsKICAgICB9
CiAKLSAgICB7Ci0gICAgICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQg
PCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmICht
X2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBqaXRDb2Rl
TWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAoaml0Q29kZU1h
cEJ1aWxkZXIuZmluYWxpemUoKSk7CisgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1
aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zm
c2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgIGlmICht
X2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKKyAgICAgICAgICAgIGppdENvZGVNYXBC
dWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKICAg
ICB9CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpKSB7CkBA
IC05NDAsMjYgKzk1MiwzOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgfQogCiAgICAgaWYgKFVO
TElLRUxZKG1fY29tcGlsYXRpb24pKSB7CisgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgd2UgbWFr
ZSB0aGUgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91dCBVbmxpbmtlZENvZGVCbG9jaz8KICAg
ICAgICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKQogICAg
ICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21waWxhdGlvbi5n
ZXQoKSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PmFkZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CisgICAgICAgIG1f
dm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9maWxlZENvZGVC
bG9jaywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1h
cCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAgCisgICAgLy8gRklYTUU6IE1ha2UgYSB2
ZXJzaW9uIG9mIENvZGVCbG9ja1dpdGhKSVRUeXBlIHRoYXQga25vd3MgYWJvdXQgVW5saW5rZWRD
b2RlQmxvY2suCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBGSU5BTElaRV9D
T0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAgICAgICAgIkJhc2Vs
aW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAgICAgICAiQmFzZWxp
bmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcHJv
ZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAKICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sgPSBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fYXJpdHlDaGVjayk7Ci0gICAg
bV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5
Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSk7CisgICAgbV9qaXRDb2RlID0gYWRvcHRSZWYo
Km5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaykpOworCisgICAgbV9q
aXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBXVEZNb3ZlKG1fdW5saW5rZWRDYWxscyk7CisgICAg
bV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9zID0gV1RGTW92ZShtX2V2YWxDYWxsTGlua0lu
Zm9zKTsKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3MgPSBXVEZNb3ZlKG1fdW5s
aW5rZWRTdHViSW5mb3MpOworICAgIG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RG
TW92ZShtX3N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzID0gV1RGTW92ZShtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0
Q29kZS0+bV9qaXRDb2RlTWFwID0gaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKTsKKyAgICBt
X2ppdENvZGUtPmFkb3B0TWF0aElDcyhtX21hdGhJQ3MpOworICAgIG1faml0Q29kZS0+bV9jb25z
dGFudFBvb2wgPSBXVEZNb3ZlKG1fY29uc3RhbnRQb29sKTsKKyAgICBtX2ppdENvZGUtPm1faXNT
aGFyZWFibGUgPSBtX2lzU2hhcmVhYmxlOwogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3Nl
KQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVw
KS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVu
dGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRy
KCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAs
ICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCkt
PnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCku
dW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1h
aW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZChD
b2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNDb21waWxhdGlv
blRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICs5OTIsMTQgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklU
OjpmaW5hbGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5rQnVmZmVyLT5ydW5NYWluVGhyZWFkRmlu
YWxpemF0aW9uVGFza3MoKTsKIAotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgbV9jb2RlQmxvY2stPnNocmlua1Rv
Rml0KGxvY2tlciwgQ29kZUJsb2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5rKTsKLSAgICB9Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlv
bkhhbmRsZXJzKCk7ICsraSkgewotICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fY29k
ZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOwotICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9w
cm9ibGVtLzM5NDMzMzE4Pi4KLSAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gbV9jb2RlQmxv
Y2stPmppdENvZGVNYXAoKS5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQpKS5yZXRh
Z2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOwotICAgIH0KLQogICAgIGlmIChtX3BjVG9D
b2RlT3JpZ2luTWFwKQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAo
V1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKSk7CisgICAgICAgIG1faml0Q29kZS0+bV9wY1Rv
Q29kZU9yaWdpbk1hcCA9IFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCk7CiAKICAgICBtX3Zt
LT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAg
ICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2ppdENvZGUtPnNpemUoKSkgLwotICAgICAgICBz
dGF0aWNfY2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlv
bnNTaXplKCkpKTsKIAotICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZS5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVD
b2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIHJldHVybiBDb21waWxhdGlv
blN1Y2Nlc3NmdWw7CiB9CkBAIC05OTgsMTEgKzEwMTEsMTEgQEAgc2l6ZV90IEpJVDo6Y29kZVNp
emUoKSBjb25zdAogICAgIHJldHVybiBtX2xpbmtCdWZmZXItPnNpemUoKTsKIH0KIAotQ29tcGls
YXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgZG9NYWluVGhyZWFk
UHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgY29tcGlsZUFuZExpbmtXaXRob3V0Rmlu
YWxpemluZyhlZmZvcnQpOwotICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAg
IHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZChjb2RlQmxvY2spOwogfQogCiB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCkBAIC0xMDQyLDE4ICsxMDU1LDI4IEBA
IHZvaWQgSklUOjpkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUMKICAgICAgICAgbV92bS0+
dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKCptX3ZtLCAiUHJlcGFyaW5nIGZv
ciBKSVQgY29tcGlsYXRpb24uIl9zKTsKIH0KIAotdW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVy
Q291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0
ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEFTU0VSVChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkgPT0gV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSkpOwogCiAgICAgcmV0
dXJuIHJvdW5kTG9jYWxSZWdpc3RlckNvdW50Rm9yRnJhbWVQb2ludGVyT2Zmc2V0KGNvZGVCbG9j
ay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVn
aXN0ZXJzKTsKIH0KIAotaW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayog
Y29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxv
Y2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZz
ZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICByZXR1cm4gdmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jaykgLSAxKS5v
ZmZzZXQoKTsKIH0KIAoraW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayog
Y29kZUJsb2NrKQoreworICAgIHJldHVybiBzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2Nr
LT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKwogSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBK
SVQ6OmNvbXBpbGVUaW1lU3RhdHMoKQogewogICAgIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4g
cmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyODI2NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNyw3IEBACiAKICNkZWZpbmUgQVNTRVJUX0pJVF9PRkZTRVQoYWN0dWFsLCBleHBlY3RlZCkg
QVNTRVJUX1dJVEhfTUVTU0FHRShhY3R1YWwgPT0gZXhwZWN0ZWQsICJKSVQgT2Zmc2V0IFwiJXNc
IiBzaG91bGQgYmUgJWQsIG5vdCAlZC5cbiIsICNleHBlY3RlZCwgc3RhdGljX2Nhc3Q8aW50Pihl
eHBlY3RlZCksIHN0YXRpY19jYXN0PGludD4oYWN0dWFsKSk7CiAKKyNpbmNsdWRlICJCYXNlbGlu
ZUpJVENvZGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21tb25TbG93
UGF0aHMuaCIKICNpbmNsdWRlICJKSVREaXNhc3NlbWJsZXIuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAK
ICNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKKyNpbmNsdWRlICJMTEludERhdGEuaCIK
ICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIu
aCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CkBAIC0xNDksMTQgKzE1MSwxNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1BhdGhTdGFydDsKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVMb2NhdGlvbjsKLSAgICAgICAgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm87CisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxM
aW5rSW5mbzsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9D
b25zdGFudDsKICAgICB9OwogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
UmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVG
dW5jdGlvbik7CiAKLSAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUg
SlNJbnRlcmZhY2VKSVQgeworICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHVi
bGljIEpTSW50ZXJmYWNlSklUIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2Fs
bDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogICAgICAgICBmcmllbmQgY2xh
c3MgSklUVGh1bmtzOwpAQCAtMTcxLDYgKzE3Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFi
bGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50
IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7CiAKKyAgICAgICAgdXNpbmcgQmFzZSA9
IEpTSW50ZXJmYWNlSklUOworCiAgICAgcHVibGljOgogICAgICAgICBKSVQoVk0mLCBDb2RlQmxv
Y2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9
IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0xNzgsMjggKzE4MiwzMyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVk0mIHZtKCkgeyByZXR1cm4gKkpTSW50ZXJmYWNl
SklUOjp2bSgpOyB9CiAKICAgICAgICAgdm9pZCBjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6
aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgZmlu
YWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemVP
bk1haW5UaHJlYWQoQ29kZUJsb2NrKik7CiAgICAgICAgIHNpemVfdCBjb2RlU2l6ZSgpIGNvbnN0
OwogCiAgICAgICAgIHZvaWQgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7
CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5w
cml2YXRlQ29tcGlsZShlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJs
b2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoY29kZUJsb2NrLCBlZmZvcnQpOwog
ICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZv
cihVbmxpbmtlZENvZGVCbG9jayopOwogICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdp
c3RlckNvdW50Rm9yKENvZGVCbG9jayopOworICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRl
ck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogICAgICAgICBzdGF0aWMgaW50IHN0YWNr
UG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBjb21waWxlVGltZVN0YXRzKCk7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTZWNvbmRzIHRvdGFsQ29tcGlsZVRpbWUo
KTsKIAorICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX21ldGFkYXRhR1BSID0gTExJ
bnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUjsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc19jb25zdGFudHNHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUjsKKwogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpOwogICAgICAg
ICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpOwogICAgICAgICB2b2lkIGxpbmsoKTsKLSAgICAgICAgQ29tcGlsYXRp
b25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQpOworICAgICAgICBD
b21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqLCBKSVRDb21waWxhdGlv
bkVmZm9ydCk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0
aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQpAQCAtMjIzLDYgKzIzMiwzMiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWRQdHJGcm9tTWV0YWRhdGEoY29u
c3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkMzJGcm9tTWV0YWRhdGEoY29u
c3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkOEZyb21NZXRhZGF0YShjb25z
dCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3Rv
cmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7
CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0
b3JlMzJUb01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsK
KworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbWF0
ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNl
dCwgR1BSUmVnKTsKKworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBsb2FkQ29uc3RhbnQodW5z
aWduZWQgY29uc3RhbnRJbmRleCwgR1BSUmVnKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lk
IGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29u
c3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworCisgICAgICAgIHZvaWQgZW1pdFB1dENv
ZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdUMCk7CisKICAgICAg
ICAgdm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5kbGVyKTsKQEAgLTI1
OCwxNiArMjkzLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90
PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bj
b2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJ
RCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3Rh
bnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJs
ZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBP
cDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCi0gICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZv
Q29uc3RhbnQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBib29s
IGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBV
bmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGls
ZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CkBAIC0yODcsMTQgKzMyMiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJy
aWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKTsK
KyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcik7CiAKICAgICAgICAg
Ly8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5k
IHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgLy92b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKKyAgICAgICAgLy92b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNv
bnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVS
ZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBA
IC0zMDUsOCArMzQxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVl
UHJvZmlsZT46OnZhbHVlLCB2b2lkPgogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQ
cm9maWxlZE9wY29kZShPcCBieXRlY29kZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqLCBSZWdp
c3RlcklEIHNjcmF0Y2hHUFIpOwotICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBS
ZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5
dGVjb2RlJiwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgcHRyZGlmZl90LCBSZWdpc3Rl
cklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAgLTU5Myw3ICs2
MzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02MTEsNyArNjQ4LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVj
dGlvbiopOwotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogI2VuZGlmCiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjI3LDE0ICs2NjQsMTQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5z
aWduZWQpOwogCiAgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQs
IEFjY2Vzc1R5cGUpOwotICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3co
VmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHBy
Q29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlv
bkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2b2lkIGVtaXRW
YXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0
aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsKKyAgICAgICAg
dm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIp
OwogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2ln
bmVkIGRlcHRoKTsKICAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShK
U1ZBTFVFNjQpCkBAIC02NDYsNyArNjgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAg
ICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRw
dHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNl
dCopOwotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsK
KyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9T
ZXQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBl
bWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVt
aXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpAQCAtNjU1LDYgKzY5Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1l
SGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgICAgICBib29s
IGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3Rh
bnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3Rh
bnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENo
YXIoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY3NiwxMyArNzE0LDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBz
bG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV9p
ZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfdmFsX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0m
KTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
c2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3Bf
cHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gc2xvd19vcF9wdXRfdG9fc2NvcGVHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNv
bHZlX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihW
TSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJik7CkBAIC02OTYsMzIgKzczMiwxNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IEdsb2Jh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUg
PT0gTW9kdWxlVmFyKTsKICAgICAgICAgfQogCi0jZGVmaW5lIERFQ0xBUkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUj
I0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9H
RVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9H
RU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKTsKLQotICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1VzZWRGb3JP
cFJlc29sdmVTY29wZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gTW9kdWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gZW1pdCBp
bmxpbmUgdGhhbiB1c2UgYSB0aHVuay4KLSAgICAgICAgICAgIC8vIFJlc29sdmVkQ2xvc3VyZVZh
ciBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9wX3Jlc29sdmVfc2NvcGUu
Ci0gICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIg
fHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAgICAgfQotCi0jZGVmaW5lIERFQ0xB
UkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmVzb2x2ZV9zY29wZV8j
I3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9SRVNP
TFZFX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpOwotCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1RydXRo
eUdlbmVyYXRvcihWTSYpOwogCiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
KyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xv
d19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5l
cmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiwgc3RkOjpvcHRpb25hbDxS
ZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVU
aHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05h
bWUpOworCiAgICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJv
bTsKQEAgLTc2MCwxMCArNzgwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24o
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQp
OwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYs
IGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1l
dGFkYXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0
IEJ5dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAg
ICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8
T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjEs
MjAgKzg0MSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0
KSk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlw
ZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlw
ZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9u
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUg
b3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwot
ICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwg
dHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlw
ZSwgdHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5h
YmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4K
LSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRk
cmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRk
cmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAg
ICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9u
VHlwZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRy
ZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0
Lm9mZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE5LDI1ICs5MzksMjIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5C
ZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBj
YW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGlu
ZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91
bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgp
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2Zp
bGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdo
aWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0
UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgZW1p
dE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAgICAg
ICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCBy
ZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVU
aW1lcygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1
ZSBmcm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8g
YmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2Fu
dCB0byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhl
IHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNv
cGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
QmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUo
QmluYXJ5T3ApOworCisgICAgICAgIHZvaWQgcmVzZXRTUCgpOwogCiAgICAgICAgIEludGVycHJl
dGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjQsOSArOTgxLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVj
dG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVk
LCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRf
dCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAg
SnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9u
Q2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKQEAgLTEwMDAsMTEgKzEwMTQsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hN
YXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4g
bV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9j
YW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwog
ICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRl
eCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJ
VENvZGU+IG1faml0Q29kZTsKKyAgICAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQ29kZUJsb2Nr
IHsgbnVsbHB0ciB9OworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogbV91bmxpbmtlZENvZGVC
bG9jayB7IG51bGxwdHIgfTsKKworICAgICAgICBNYXRoSUNIb2xkZXIgbV9tYXRoSUNzOworICAg
ICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENvZGU7CisKKyAgICAgICAgSklUQ29u
c3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkgfTsKKyAgICAgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2Vk
Q2FsbHM7CisgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7Cisg
ICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9z
OworICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxl
czsKKyAgICAgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXM7CisKKyAgICAgICAgc3RydWN0IE5vdEFDb2RlQmxvY2sgeyB9IG1fY29kZUJsb2Nr
OworCisgICAgICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKICAgICB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCBhcmd1bWVudEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVu
dEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIy
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMzIwLDcgKzMyMSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByZWdUMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qy
LCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3
NSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAK
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC01NzMsNyArNTc3LDggQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IAogCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVn
VDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDQsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIyLDggQEAgdm9pZCBKSVQ6OmVt
aXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBVbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+
KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE5lZ0lDKiBu
ZWdhdGVJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIFVu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmVnYXRlPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwor
ICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2Zp
bGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBu
ZWdhdGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3Nl
IG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQK
ICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpA
QCAtODk5LDggKzkwNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1
Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElD
KGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0aElDcy5hZGRK
SVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3Vy
cmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElD
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlv
blZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElD
RmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRo
SUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlm
ICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0
UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBz
cmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOworICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNl
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAxNSwxMCArMTAy
MSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgICAg
IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBs
ZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEzICsxMDYyLDE0
IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNlbmRpZgogCiAg
ICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxl
KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAm
JiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRf
Y2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1Jl
Z3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRf
Y2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9m
aWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdU
NCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50
ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0
LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNf
U1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIwLDEzICsxMTI4
LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICNlbmRpZgog
CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJv
ZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2Zp
bGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2Vf
Y2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9K
SVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTE2Niw3
ICsxMTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiAg
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwogICAgIGlmIChz
aG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4o
KS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAgIFNu
aXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkp
OwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBl
cy5zZWNvbmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRNdWxJQyogbXVsSUMg
PSBtX21hdGhJQ3MuYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9u
VG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNG
YXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29w
X3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
dWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklD
KiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFN1Yj4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICBKSVRTdWJJQyogc3ViSUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsK
ICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMp
OwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODI2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzMiw3ICsyMzIsNyBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNv
bnN0IE9wQ2FsbEV2CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJl
Z1QxKTsKICAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2Fs
bEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwg
cmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAKICAgICBlbWl0TG9hZChjYWxs
ZWUsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5
dGVjb2RlKTsKQEAgLTMyNCw3ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25z
dCBJbnN0cnVjdGlvCiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zNDEsNyArMzQxLDYg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiAr
MzQsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAi
U2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpl
bWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4
IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJn
cyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bj
b2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1
bnNpZ25lZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQg
YXJnQ291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0
ZWNvZGUsIGNoZWNrcG9pbnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2Fz
dDxpbnQ+KHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50
KSk7CiAKKwogICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhp
cygwKSksIHJlZ1QwKTsKICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1l
dGFkYXRhLCBjaGVja3BvaW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAg
ICAgICBzdG9yZTMyVG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6
Om9mZnNldE9mQ2FsbExpbmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkp
OwogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0
ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBP
cDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5m
b0NvbnN0YW50KQogewogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5t
X3RoaXNWYWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9h
cmd1bWVudHM7CkBAIC05MSw3ICs5Miw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmIGJ5dGVjb2QKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZv
ckZvcndhcmRBcmd1bWVudHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3Bl
cmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRp
b24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1m
aXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDApOworICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1Qx
LCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NG
cmFtZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkp
KSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJ
VDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVy
YXRpb24gPSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAg
ICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAg
Y2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9w
ZXJhdGlvbiwgcmVnVDMsIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsK
ICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBh
cmd1bWVudCBjb3VudC4KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVz
c09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90
QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVn
VDIsIGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAg
IGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSksIHJlZ1QzKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92
ZSwgcmVnVDMsIHJlZ1QyKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxs
TGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAg
IG5vdEJpZ2dlc3QubGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4K
QEAgLTEyNywxNiArMTMxLDE1IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3Am
KQogdGVtcGxhdGU8PgogYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFs
JiBieXRlY29kZSkKIHsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlciwg
cmVnVDEpOwotICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBD
YWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3Rh
Y2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIGFyZ3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFk
ZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1Qy
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CisgICAgcmVzZXRTUCgpOwogCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWws
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVz
dWx0KGJ5dGVjb2RlKTsKIApAQCAtMTQ4LDcgKzE1MSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxM
aW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlu
a0luZm9zLmFkZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVw
Q2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNl
dCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE1OSw0NiBAQCB2b2lkIEpJVDo6Y29t
cGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdp
c3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0
KEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJh
bWVTbG90OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAg
ZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8p
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2Jh
bE9iamVjdCgqbV92bSwgaW5mbyk7CisgICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1dENhbGxS
ZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpj
b21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKLXsKK2Jv
b2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyos
IHVuc2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KSB7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFp
bENhbGwmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRl
Y29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0lu
ZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewot
ICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVEYXRhLm51
bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVtYmVyVGFn
UmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxlRGF0YS5u
dW1Mb2NhbHMgPQorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1
ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOworICAgIHNodWZm
bGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAgIHNodWZmbGVEYXRh
LT5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOwor
ICAgIHNodWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyOworICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBieXRlY29kZS5t
X2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAg
IHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1ZmZsZURh
dGEtPmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3Nb
aV0gPQorICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBWYWx1ZVJl
Y292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAg
ICAgICAgICAgIERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9
Ci0gICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotICAg
IHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7Ci0gICAg
aW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZsZURhdGEt
PmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAg
IHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRM
aXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1bXBMaXN0
IHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVn
VDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFt
ZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAg
bG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVtcExpc3Qg
c2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhp
cywgcmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywg
KnNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93
Q2FzZShzbG93UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CisgICAg
aW5mby0+ZnJhbWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAgICAgYXV0
byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjE4
LDE0ICsyMjQsMjUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAg
ICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAg
Ki8KLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNvZGVJRCAh
PSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJ
bmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUo
Ynl0ZWNvZGUsIGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBudWxs
cHRyOworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0gVUlOVF9N
QVg7CisgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBpbmZvID0g
bV91bmxpbmtlZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2Fs
bFR5cGVGb3Iob3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAg
ICAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZv
SW5kZXgpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxh
dGlvbkluZm8oKSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0Nv
bnN0YW50OworICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0
YW50KTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNv
ZGVJbmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1
aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMo
KTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFk
ZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNl
dCkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVn
VDAgaG9sZHMgY2FsbGVlLgpAQCAtMjM0LDE2ICsyNTEsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNp
emUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5r
SW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlm
IChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAg
ICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwg
aW5mb0NvbnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9D
b25zdGFudCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJn
cyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAg
ICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVn
VDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBh
dXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAg
ICAgICB9KTsKQEAgLTI1MywxNCArMjY2LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNv
bnN0IEluc3RydWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1Bh
dGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjpl
bWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9j
YXRpb24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVM
b2NhdGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Cisg
ICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQpAQCAt
MjczLDIxICsyODUsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bgogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKIAog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1Bh
dGgoKm1fdm0sICp0aGlzKTsKKyAgICBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgq
bV92bSwgKnRoaXMsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRE
aWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICByZXNldFNQKCk7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGVtaXRQdXRDYWxs
UmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM5NSwxNyArNDA2LDMxIEBAIHZvaWQgSklUOjplbWl0X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKICAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAg
bW92ZShyZWdUMCwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxLCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0
QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUs
IHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9uZXh0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxp
bmsodGhpcyk7CiB9CkBAIC00MTYsMTAgKzQ0MSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9vcGVuKGNvbnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9w
ZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVn
IGl0ZXJhdG9yR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBM
aXN0IG5vdE9iamVjdDsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVy
YXRvckdQUikpOwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0
b3JHUFIpKTsKQEAgLTQzMiwxOSArNDU1LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9vcGVuKGNvbnMKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIw
LCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgbW92ZShpdGVyYXRvckdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IG5leHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdC
aXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIAogICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2Jq
ZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRv
bmUubGluayh0aGlzKTsKIH0KQEAgLTQ1Miw3ICs0NzMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3Jfb3Blbihjb25zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9
IChbJl0gKCkgewogICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAg
ICAgIGNhc2UgTmFycm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBA
IC00NzAsNTAgKzQ5MCw3OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0
IEluCiAgICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9u
TW9kZTo6R2VuZXJpYykpKTsKIAogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgb3I4
KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmlj
KSksIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9pdGVyYXRpb25NZXRhZGF0YS5zZWVuTW9k
ZXMpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1l
dGFkYXRhOjpvZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRh
dGE6Om9mZnNldE9mU2Vlbk1vZGVzKCksIHJlZ1QwKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIHJlZ1QwKTsKKyAg
ICBzdG9yZThUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFk
YXRhOjpvZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6
Om9mZnNldE9mU2Vlbk1vZGVzKCkpOwogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+
KGluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRD
aGVja3BvaW50KCk7CiAgICAgLy8gY2FsbCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVj
dCkgaW4gcmVnVDAKIAotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBp
dGVyUmVzdWx0R1BSID0gcmVnVDI7Ci0gICAgR1BSUmVnIGRvbmVHUFIgPSByZWdUMTsKLSAgICAv
LyBpdGVyUmVzdWx0R1BSIHdpbGwgZ2V0IHRyYXNoZWQgYnkgdGhlIGZpcnN0IGdldCBieSBpZCBi
ZWxvdy4KLSAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyOworICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IGl0ZXJDYWxsUmVzdWx0R1BSKTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OwogICAgIHsKLSAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1bHRHUFIpOworICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHN0
YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gYmFzZUdQUik7CisKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgICAgIFJlZ2lzdGVyU2V0IHBy
ZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0g
ICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHZhbHVlR1BSKTsKKyAgICAgICAgcHJlc2VydmVkUmVn
cy5hZGQoaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlO
YW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJl
Z3MoZG9uZUdQUiksIHJlZ1QzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5
TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGRv
bmVHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7
CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
ICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKwor
ICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NS
IGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgICAg
ICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQ
UiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJl
Z3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAg
ICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgICAg
ICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lz
dGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJy
YW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxHUFIp
OworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3Vs
dEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsK
LSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1w
bCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJ
bmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICAgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBz
byB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKLSAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7Cisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHJlc3VsdEdQUik7CiAKICAgICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwogICAg
IH0KQEAgLTUyNyw1OSArNTc2LDU1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9u
ZXh0KGNvbnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2Fs
bFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdpc3Rl
cjsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+
KCk7CiAgICAgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5t
X2RvbmU7Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKICAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwotICAg
ICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7Cisg
ICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJDYWxsUmVzdWx0R1BS
KSk7CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5h
bWVzLT5kb25lLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAgICAgCiAgICAgICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZO
b3RPYmplY3QoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5j
aElmTm90T2JqZWN0KGl0ZXJDYWxsUmVzdWx0R1BSKSk7CiAKLSAgICAgICAgQ2FsbCBjYWxsOwot
ICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewot
ICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkb25lVlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBp
dGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BS
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50
KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwotCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIHJl
Z1QxKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBy
ZWdUMCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkb25lVlJlZywgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKworICAgICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CisKKyAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIGRvbmVHUFIpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGl0ZXJDYWxsUmVzdWx0
R1BSKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAK
ICAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJl
c3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogICAgIH0KIAogICAgIHsgICAKICAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
VlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0g
cmVnVDA7CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0
eU5hbWVzLT52YWx1ZS5pbXBsKCk7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5v
bkFyZ0dQUjApOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBl
KG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCB2YWx1ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0g
ICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
ICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4o
Ynl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKICAgICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMjgyNjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDggKzMyLDExIEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAj
aW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKIAorCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgUENU
b0NvZGVPcmlnaW5NYXA7CisKIG5hbWVzcGFjZSBERkcgewogY2xhc3MgQ29tbW9uRGF0YTsKIGNs
YXNzIEpJVENvZGU7CkBAIC0xNTksMTAgKzE2MiwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
Ym9vbCB1c2VEYXRhSUMoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKLSAgICAgICAgaWYgKCFPcHRp
b25zOjp1c2VEYXRhSUMoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYg
KEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBPcHRpb25zOjp1c2VEYXRhSUNJbk9wdGltaXppbmdK
SVQoKTsKICAgICB9CiAKQEAgLTIyMyw2ICsyMjYsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
U2hhcmVkKCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZUF0dHJpYnV0ZSA9PSBTaGFyZUF0dHJpYnV0
ZTo6U2hhcmVkOyB9CiAKKyAgICB2aXJ0dWFsIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9y
aWdpbk1hcCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKwogcHJpdmF0ZToKICAgICBKSVRUeXBlIG1f
aml0VHlwZTsKICAgICBTaGFyZUF0dHJpYnV0ZSBtX3NoYXJlQXR0cmlidXRlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5jcHAJKHJldmlz
aW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25L
ZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHZvaWQgSklUQ29tcGlsYXRp
b25LZXk6OmR1bXAoUHJpbnRTdHJlYW0KICAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgb3V0LnByaW50KCIoQ29tcGlsZSBvZiAiLCAqbV9w
cm9maWxlZEJsb2NrLCAiIHdpdGggIiwgbV9tb2RlLCAiKSIpOworICAgIG91dC5wcmludCgiKENv
bXBpbGUgb2YgIiwgUmF3UG9pbnRlcihtX2NvZGVCbG9jayksICIgd2l0aCAiLCBtX21vZGUsICIp
Iik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb21waWxhdGlvbktleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw1NyArMzAsNTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIENvZGVCbG9jazsK
LWNsYXNzIENvZGVCbG9ja1NldDsKK2NsYXNzIEpTQ2VsbDsKIAogY2xhc3MgSklUQ29tcGlsYXRp
b25LZXkgewogcHVibGljOgogICAgIEpJVENvbXBpbGF0aW9uS2V5KCkKLSAgICAgICAgOiBtX3By
b2ZpbGVkQmxvY2sobnVsbHB0cikKKyAgICAgICAgOiBtX2NvZGVCbG9jayhudWxscHRyKQogICAg
ICAgICAsIG1fbW9kZShKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbikKICAg
ICB7CiAgICAgfQogICAgIAogICAgIEpJVENvbXBpbGF0aW9uS2V5KFdURjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2sobnVsbHB0cikKKyAgICAg
ICAgOiBtX2NvZGVCbG9jayhudWxscHRyKQogICAgICAgICAsIG1fbW9kZShKSVRDb21waWxhdGlv
bk1vZGU6OkRGRykKICAgICB7CiAgICAgfQogICAgIAotICAgIEpJVENvbXBpbGF0aW9uS2V5KENv
ZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUpCi0gICAgICAg
IDogbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVkQmxvY2spCisgICAgSklUQ29tcGlsYXRpb25LZXko
SlNDZWxsKiBwcm9maWxlZEJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSkKKyAgICAgICAg
OiBtX2NvZGVCbG9jayhwcm9maWxlZEJsb2NrKQogICAgICAgICAsIG1fbW9kZShtb2RlKQogICAg
IHsKICAgICB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuICFtX3Byb2ZpbGVkQmxvY2sgJiYgbV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9k
ZTo6SW52YWxpZENvbXBpbGF0aW9uOworICAgICAgICByZXR1cm4gIW1fY29kZUJsb2NrICYmIG1f
bW9kZSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKICAgICB9CiAg
ICAgCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgIT0gSklUQ29tcGlsYXRpb25N
b2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CisgICAgICAgIHJldHVybiAhbV9jb2RlQmxvY2sgJiYg
bV9tb2RlICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOwogICAgIH0K
ICAgICAKLSAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2soKSBjb25zdCB7IHJldHVybiBtX3By
b2ZpbGVkQmxvY2s7IH0KICAgICBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kZTsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBKSVRDb21waWxh
dGlvbktleSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJs
b2NrID09IG90aGVyLm1fcHJvZmlsZWRCbG9jaworICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2sg
PT0gb3RoZXIubV9jb2RlQmxvY2sKICAgICAgICAgICAgICYmIG1fbW9kZSA9PSBvdGhlci5tX21v
ZGU7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goV1RGOjpQdHJIYXNoPENvZGVCbG9jayo+OjpoYXNo
KG1fcHJvZmlsZWRCbG9jayksIHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPEpJVENv
bXBpbGF0aW9uTW9kZT46OnR5cGU+KG1fbW9kZSkpOworICAgICAgICByZXR1cm4gV1RGOjpwYWly
SW50SGFzaChXVEY6OlB0ckhhc2g8SlNDZWxsKj46Omhhc2gobV9jb2RlQmxvY2spLCBzdGF0aWNf
Y2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxKSVRDb21waWxhdGlvbk1vZGU+Ojp0eXBlPihtX21v
ZGUpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAK
IHByaXZhdGU6Ci0gICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CisgICAgLy8gRWl0aGVy
IENvZGVCbG9jayogb3IgVW5saW5rZWRDb2RlQmxvY2sqIGZvciBiYXNsZWxpbmUgSklULgorICAg
IEpTQ2VsbCogbV9jb2RlQmxvY2s7CiAgICAgSklUQ29tcGlsYXRpb25Nb2RlIG1fbW9kZTsKIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVk
ZSAiSklULmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJJbmZvLmgiCiAKQEAgLTQ2LDEwICs0Nyw5IEBAIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyog
Z2FyYmFnZVN0dWJJbmYKIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKLSAgICA6IG1f
Y29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAsIG1faml0VHlwZShqaXRUeXBlKQorICAgIDogbV9q
aXRUeXBlKGppdFR5cGUpCiB7Ci0gICAgbV9zdHViSW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2Rl
QmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJ
bmZvKCk7CisgICAgbV9zdHViSW5mbyA9IGNvZGVCbG9jayA/IGNvZGVCbG9jay0+YWRkU3R1Yklu
Zm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0
dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGU7CiAKICAgICBtX3N0dWJJbmZvLT51c2Vk
UmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyczsKQEAgLTU5LDcgKzU5LDYgQEAgdm9pZCBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGgsIExp
bmtCdWZmZXImIHNsb3dQYXRoLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4gc3RhcnQpCiB7CiAgICAgbV9zdHViSW5mby0+c3RhcnQgPSBzdGFydDsKLQogICAgIG1fc3R1
YkluZm8tPmRvbmVMb2NhdGlvbiA9IGZhc3RQYXRoLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4obV9kb25lKTsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCkBA
IC02Nyw2ICs2NiwxNSBAQCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgK
ICAgICBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBzbG93UGF0aC5sb2NhdGlv
bk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3Nsb3dQYXRoQmVnaW4pOwogfQogCit2b2lkIEpJ
VElubGluZUNhY2hlR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklU
JiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9z
dGFydCA9IGppdC5sYWJlbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJ
QyhtX2ppdFR5cGUpKTsKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQ
Uik7CisgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJ
VEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlw
ZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpT
VmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBA
IC0xMTAsNyArMTE4LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRv
cgogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsCiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSkKICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRU
eXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycywgYmFz
ZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQotICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5h
bWUudWlkKCkgPT0gY29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkp
CisgICAgLCBtX2lzTGVuZ3RoQWNjZXNzKGNvZGVCbG9jayAmJiBwcm9wZXJ0eU5hbWUudWlkKCkg
PT0gY29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoYmFzZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQpA
QCAtMTIwLDYgKzEyOCwzNSBAQCB2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgbV9pc0xlbmd0aEFjY2VzcyA/IElubGlu
ZUFjY2Vzczo6c2l6ZUZvckxlbmd0aEFjY2VzcygpIDogSW5saW5lQWNjZXNzOjpzaXplRm9yUHJv
cGVydHlBY2Nlc3MoKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGdlbmVyYXRlR2V0QnlJZElubGluZUFj
Y2VzcyhKSVQmIGppdCwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHNj
cmF0Y2gsIEdQUlJlZyByZXN1bHQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25l
OworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNz
ID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkJ5SWRTZWxm
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQubG9hZFByb3BlcnR5KGJhc2UsIHNjcmF0Y2gs
IEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgp
OworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGlu
aygmaml0KTsKK30KKwordm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1Yklu
Zm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlw
ZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFu
dChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2Vz
cyhqaXQsIHN0dWJJbmZvR1BSLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2UsIEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHQpOworCisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKKwogSklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IoCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywK
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3Mg
YmFzZSwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTEzOCw2
ICsxNzUsMTggQEAgdm9pZCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYQogICAg
IGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNj
ZXNzKCkpOwogfQogCit2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVn
IHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyht
X2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAgIGppdC5sb2Fk
Q29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBnZW5lcmF0ZUdldEJ5SWRJbmxp
bmVBY2Nlc3Moaml0LCBzdHViSW5mb0dQUiwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OmJhc2UsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIG1fZG9uZSA9IGpp
dC5sYWJlbCgpOworfQorCiBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9y
KAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIApA
QCAtMTQ5LDYgKzE5OCwzNCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJh
dG9yCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNoKTsKIH0KIAor
dm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
SklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9z
dGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1
YkluZm9HUFIpOworCisgICAgR1BSUmVnIGJhc2UgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNj
cmF0Y2g7CisgICAgR1BSUmVnIHNjcmF0Y2gyID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpz
Y3JhdGNoMjsKKyAgICBHUFJSZWcgdmFsdWUgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZh
bHVlOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSgpKSk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNo
KTsKKyAgICBqaXQuc3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIGJhc2UsIHNj
cmF0Y2gsIHNjcmF0Y2gyKTsKKyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAg
IHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsKKyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQ
dHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7
CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIHZvaWQgSklUUHV0QnlJZEdlbmVyYXRv
cjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQogewogICAgIGdlbmVyYXRl
RmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5UmVwbGFjZSgpKTsK
QEAgLTIwMCw3ICsyNzcsNyBAQCB2b2lkIEpJVERlbEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBq
aXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJU
YWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwg
SklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVt
cCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0y
MzYsNyArMzEzLDcgQEAgdm9pZCBKSVREZWxCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQog
ICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1f
aml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNh
bGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsK
KyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1f
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBq
aXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtMjcwLDcg
KzM0Nyw3IEBAIHZvaWQgSklUSW5CeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGEKICAgICBt
X3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5
cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0
dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKEND
YWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJ
bmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91
dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBh
dGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTMwMCw2ICszNzcs
MzIgQEAgdm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdAogICAgIGdlbmVy
YXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkp
OwogfQogCit2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKwor
ICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1Yklu
Zm8sIHN0dWJJbmZvR1BSKTsKKworICAgIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVJbkJ5SWRSZWdp
c3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
c2NyYXRjaDsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5s
b2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHNjcmF0Y2gpOworICAgIGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gz
MihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUoKSkpOworICAgIGppdC5ib3hCb29sZWFuKHRydWUsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0IH0pOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGlu
ZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVz
cyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklU
U3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0KTsKKyAgICBtX2Rv
bmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6SklUSW5zdGFu
Y2VPZkdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBl
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwKICAg
ICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IHZhbHVlLCBHUFJSZWcgcHJvdG90eXBlLCBHUFJSZWcgc3R1YkluZm9HUFIsCkBAIC0zMzIsNyAr
NDM1LDcgQEAgdm9pZCBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpnZW5lcmF0ZUZhcwogICAgIG1f
c3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlw
ZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1
YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAg
ICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0
aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0
Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtMzY4LDcgKzQ3MSw3
IEBAIHZvaWQgSklUR2V0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0
ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7
CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZv
KSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGpp
dC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BS
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0
clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJs
ZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTQwNSw3ICs1MDgsNyBAQCB2
b2lkIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQCiAgICAgbV9zdGFydCA9IGpp
dC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1f
c3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFy
SnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1w
KCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC00NDAsNyArNTQzLDcgQEAgdm9pZCBK
SVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I6OmdlbgogICAgIG1fc3RhcnQgPSBqaXQubGFi
ZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJ
bmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAg
ICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwog
ICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1
ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgiCiAj
aW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNs
dWRlICJQdXRLaW5kLmgiCkBAIC0zOCwxMSArMzksMTE4IEBAIG5hbWVzcGFjZSBKU0MgewogY2xh
c3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNsYXNzIENhbGxTaXRlSW5kZXg7CiBjbGFzcyBDb2Rl
QmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7
CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeVZh
bFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdU
MzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7
Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpy
ZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVn
VDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnMgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgLy8gV2Ug
cmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9jayBhbmQgaW5pdGlhbGl6aW5nIHJl
Z2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2Ug
PT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChw
cm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3Rh
dGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsK
KyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BS
SW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJ
bmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEdQUklu
Zm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjM7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjphcmd1bWVu
dEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpu
b25BcmdHUFIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5m
bzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnMgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRp
Y19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJl
Z1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdU
MzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBkb250Q2xvYmJlclJlZ2lzdGVyID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3Qg
QmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB0
aGlzVmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlJZFJlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mbyA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6c2NyYXRjaDsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBH
UFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9maWxlID0gR1BS
SW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVycyB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJyYW5kID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3Rh
dGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAg
IHN0YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDI7Cit9OworCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90ZWN0ZWQ6CiAg
ICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDEyICsxNzAsMTggQEAgcHVi
bGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZmZXImIGZhc3RQYXRoTGlu
a0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAogICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwotICAgIAorCisgICAgdm9p
ZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9D
b25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwog
ICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZv
OwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9z
bG93UGF0aEJlZ2luOwogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOwpA
QCAtOTgsNyArMjEyLDcgQEAgcHJvdGVjdGVkOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAg
ICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3Rh
cnQ7CitwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0aEp1bXA7CiB9
OwogCkBAIC0xMTEsNiArMjI1LDcgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVlUmVncyBiYXNl
LCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlKTsKICAg
ICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lk
IGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0Nv
bnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiBwcml2YXRlOgogICAgIGJvb2wgbV9pc0xl
bmd0aEFjY2VzczsKQEAgLTEyNCw2ICsyMzksNyBAQCBwdWJsaWM6CiAgICAgICAgIENvZGVCbG9j
ayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgICAgICBKU1ZhbHVlUmVn
cyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBz
dHViSW5mb0dQUik7CiAKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChK
SVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogICAg
IHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogfTsKIApAQCAtMTMyLDEw
ICsyNDgsMTEgQEAgcHVibGljOgogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7
CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAotICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBl
LCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFzZSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFN
b2RlLCBQdXRLaW5kKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwg
Q2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJs
ZUlkZW50aWZpZXIsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVl
LCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7
CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAg
dm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1Yklu
Zm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICAKICAgICBWX0pJVE9wZXJhdGlv
bl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsKIApAQCAtMTYzLDExICsyODAsOSBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJp
dmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsK
IAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVy
OjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTkxLDggKzMwNiw2IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwog
Ci1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjE2LDgg
KzMyOSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2Vt
YmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0Owog
ICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApA
QCAtMjQxLDggKzM1Miw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChN
YWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1w
OwogfTsKIApAQCAtMjU1LDYgKzM2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNWYWx1ZVJlZ3Mg
YmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKICAgICB2b2lk
IGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJS
ZWcgc3R1YkluZm9HUFIpOwogfTsKIAogY2xhc3MgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBmaW5h
bCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CkBAIC0yNzcsOCArMzg3LDYgQEAg
cHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZm
ZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CiAKLXByaXZhdGU6Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJs
ZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMDIsMTEgKzQxMCw5IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJp
dmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV9yZXN1bHQ7
CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMzMCw4ICs0MzYsNiBA
QCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVy
Jik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDEzICszNSwzOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQUxXQVlTX0lOTElORSBib29s
IEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAg
ICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0Rv
dWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Cit9CisKK0FMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAg
aWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
dW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykg
PT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KSB7CisgICAgICAg
IC8vIEFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0NlbGwoKTsK
IH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwotICAgIHJl
dHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNFX0FTU0VSVCht
X3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMp
ICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7CisgICAgcmV0
dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZy
b20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiArMTgxLDM2IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklU
OjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxl
KE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBm
dW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2Rl
PgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFs
dWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAg
ICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNzIGZ1bmN0aW9u
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyBmdW5j
dGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQ
UikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJl
dHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1
cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2Rl
QmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAg
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNf
SU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFu
Y2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNv
ZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2Nv
bGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAg
ICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFz
Q2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3Bv
aW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3
IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsKICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1f
Ynl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hl
Y2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAog
ICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7
CkBAIC0yOTMsMjkgKzMxOCwzMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQo
QWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwotfQotCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpT
VmFsdWVSZWdzIHZhbHVlKQotewotICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwot
Ci0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0
LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7
Ci0jZWxzZQotICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNl
X2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwot
ICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxv
YWQpOwotICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFn
KTsKLSNlbmRpZgotfQorICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVD
b25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKK30KKworLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdz
IHZhbHVlKQorLy97CisvLyAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKKy8vCisv
LyAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQs
IHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0CisvLyAgICAvLyBzdG9yZS4KKy8vI2lmIFVTRShK
U1ZBTFVFNjQpCisvLyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNr
ZXRzKTsKKy8vI2Vsc2UKKy8vICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3Ig
PSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1
Y2tldHMpOworLy8gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5h
c0JpdHMucGF5bG9hZCk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRv
ci0+YXNCaXRzLnRhZyk7CisvLyNlbmRpZgorLy99CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
aW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0
YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBA
IC0zMjMsNDEgKzM1Miw0MiBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8
ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRP
cGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVl
UmVncyB2YWx1ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1
ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRh
ZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKKworICAgIHB0cmRp
ZmZfdCBvZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0
YWRhdGFUYWJsZShieXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVPZmZzZXRGb3I8Qnl0ZWNvZGU+KG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0
QnVja2V0KCk7CisgICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgQWRkcmVzcyhzX21ldGFkYXRhR1BS
LCBvZmZzZXQpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyBy
ZXN1bHRSZWcpCi17Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpT
VmFsdWVSZWdzKHJlc3VsdFJlZykpOwotfQorLy9pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyByZXN1bHRSZWcp
CisvL3sKKy8vICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVl
UmVncyhyZXN1bHRSZWcpKTsKKy8vfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEs
IEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CiB9CiAjZW5kaWYKIAotaW5saW5lIHZv
aWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BS
LCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQordGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZmX3Qgb2Zm
c2V0T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNo
R1BSKQogewogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgbG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIGFycmF5UHJv
ZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRv
TWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKICAg
ICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVy
SUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lk
IEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCiB7Ci0gICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhcnJheVByb2ZpbGVH
UFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpKTsKLSAgICB9
CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRlY29kZTo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9m
TGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3JhdGNoR1BSKTsKIH0KIAogQUxXQVlT
X0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCkBAIC0zODAsNyArNDEwLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdElu
aXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkp
IHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBv
b2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcihy
ZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTI2LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3Rv
cmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlz
S25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwog
ICAgICAgICBlbHNlCkBAIC01MDYsNyArNTM2LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVt
cFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAo
IW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChy
ZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0LDExICs1NDQsNiBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAgICAgfQogfQogCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQot
ewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxS
ZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU2OSwxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRo
aXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5l
cmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKICAgICBpZiAoc3JjLmlz
Q29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwotICAgICAg
ICBlbHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50T3duZWRC
eVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAgbW92ZShJ
bW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3QpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC01NjYsMTEgKzU5MSw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwog
fQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFs
UmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZy
b20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNTk1LDcgKzYx
NSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKIAogQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQg
cmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tu
b3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHZSZWcpKQogICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAtNjM3LDMwICs2NTcsNyBAQCBB
TFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7CiAgICAgaWYgKHRhcmdl
dCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPm91dE9m
TGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1BTFdBWVNfSU5MSU5FIEdldFB1dElu
Zm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSBieXRlY29kZSkKLXsKLSAgICB1
bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQgKyAxOyAvLyBIYXNoTWFwIGRvZXNu
J3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkR2V0UHV0SW5m
b3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdldFB1dEluZm9zLmVu
ZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFsdWUpOwotICAgIEdl
dFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2dl
dFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBnZXRQdXRJbmZvLm9w
ZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0aFByb2ZpbGUgSklUOjpjb3BpZWRB
cml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0gICAgdWludDY0X3Qga2V5ID0gKHN0
YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpICsgMSkgPDwgMzIgfCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0YUlEKTsKLSAgICBhdXRvIGl0ZXJh
dG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3Ig
IT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlcmF0b3It
PnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgbV9jb3BpZWRBcml0aFBy
b2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJuIGFyaXRoUHJvZmlsZTsK
KyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0
cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjgxLDYgKzY3OCw2MCBA
QCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0dXJuIEVD
TUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYg
Ynl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQz
MkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQ
UlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxp
bmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUp
ICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQ4KEFk
ZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZz
ZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSB2YWx1ZSwgY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlOCh2YWx1ZSwgQWRk
cmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNl
dEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmUzMlRvTWV0YWRh
dGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQp
Cit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBv
ZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHNfbWV0YWRhdGFHUFIsIHJlc3VsdCk7Cit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvbnN0YW50SW5k
ZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRHbG9i
YWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9nbG9iYWxPYmpl
Y3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENv
ZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BSUmVnIHJlc3VsdCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOworICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JC
dWZmZXIoKSksIHJlc3VsdCk7CisgICAgbG9hZDY0KEFkZHJlc3MocmVzdWx0LCBjb25zdGFudC50
b0NvbnN0YW50SW5kZXgoKSAqIHNpemVvZihKU1ZhbHVlKSksIHJlc3VsdCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0
IEluc3RydWN0aW8KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNh
dGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0
KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNv
ZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFi
bGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTk5Nyw3ICs5OTcsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJs
ZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50Lgog
ICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRh
YmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJ
bW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxl
KTsKIApAQCAtMTAyNCw3ICsxMDI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIo
Y29uc3QgSW5zdAogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5h
dGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwog
ICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2Rl
SW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlu
a2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwNDIsNyArMTA0
Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KIAogICAgIC8v
IGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3
aXRjaCBzdGF0ZW1lbnQuCiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAg
ICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUlu
ZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAgIGxpbmtlZFRh
YmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDggQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWaXJ0dWFs
UmVnaXN0ZXIuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1l
c3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC01NCwxMSArNTYsMTQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0g
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAg
ICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7Ci0gICAgICAg
IGVsc2UKKyAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5
VW5saW5rZWRDb2RlQmxvY2soc3JjKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBzdG9yZTY0
KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDAp
OworICAgICAgICAgICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAg
fQorCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICs5MiwzNSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0
cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFs
bG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxsb2NhdG9y
IGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9i
amVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lz
dGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0g
cmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKIAotICAgIGlmICgh
YWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVsc2UgewotICAg
ICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3Rl
ZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVn
LCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0g
ICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUo
KSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpLCBhbGxvY2F0
b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJlZyk7CisKKyAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51
bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9y
Ojp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBzY3Jh
dGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1
Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBlbWl0SW5p
dGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKKyAgICBtdXRhdG9y
RmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
OworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKKwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7
Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAm
dm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTEzMSw3ICsxMzQsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdl
IGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21o
YXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5
bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBKdW1w
IGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRy
ZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fZnVuY3Rpb25Qcm90
b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24pKSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CiAKQEAgLTE1NCwzMCArMTU4LDM4IEBAIHZvaWQgSklU
OjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVj
b2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHBy
b3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1
c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJz
dCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm90bywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9HUFIg
PSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVy
czo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQ
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9HUFIpOwogICAgIAog
ICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxs
IC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5j
ZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJl
c3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0g
ICAgICAgIHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHJlc3VsdEdQ
UiwKKyAgICAgICAgdmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAgICAgICBzdHViSW5m
b0dQUiwKKyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMSwgQmFz
ZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCisKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCArMjA0LDEzIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOwotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9m
T3B0aW1pemUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgcmVnVDIsIHJl
Z1QxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOwotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgc3RhdGljX2Fz
c2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09IGFyZ3VtZW50R1BS
MSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVl
ID09IGFyZ3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9w
ZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMjQw
LDcgKzI1MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KIAog
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMSwgcmVnVDApOwogCkBAIC0zODMsOSArMzk0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0
KGNvbnN0IEluc3RydWN0aW9uKgogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJH
ZW5lcmF0b3IoVk0mIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJikKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7CiAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRM
aXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAgLTQxMSw3ICs0MjIs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAKICAgICBpZiAo
ZHN0ICE9IHNyYykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNDM0LDkgKzQ0NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
b19wcm9wZXJ0eV9rZXkoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIGFyZ3VtZW50R1BSMik7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0RnVuY3Rpb25OYW1lLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC00NjUsOCArNDc2LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxz
ZShjb25zdCBJbnN0cnVjdGkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJl
Z1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1w
KGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFy
Z2V0KTsKQEAgLTQ4MCw3ICs0OTMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgog
ICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGds
b2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMSA9IHJlZ1QxOwpAQCAtNTE5LDcgKzUzMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9u
dWxsKGNvbnN0IEluc3RydWMKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVt
cCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAs
IHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBh
ZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xv
YmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwogCkBAIC01NDMsNyArNTU2LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydQogICAgIC8vIEZpcnN0LCBoYW5kbGUg
SlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0
cnVjdHVyZS4KICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKSwgdGFyZ2V0KTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwg
cmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFk
ZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRp
YXRlID0ganVtcCgpOwogCkBAIC01ODIsMTUgKzU5NSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
bnVuZGVmaW5lZF9vcl9udWxsKGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29u
c3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVj
aWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9p
bnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5t
X2hhc0p1bXBlZCk7CisgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lh
bFBvaW50ZXIsIHJlZ1QxKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQ
dHIoRXF1YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1t
MzIoMSksIGJ5dGVjb2RlLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgp
KTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwog
fQpAQCAtNjI1LDggKzYzNiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0
cnVjdGlvCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBj
b25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwot
ICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3Jh
dGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRy
dXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmpl
Y3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENU
SVN0dWIodmFsdWVJc1RydXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02
NDAsNyArNjUzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3Qg
YmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcv
RlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3Rz
LCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAg
ICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MTsKQEAgLTY5NSw3ICs3MDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0
cnVjdGlvCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZl
c1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDEpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRo
cm93LCByZWdUMSwgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAj
ZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQ
UjI7CkBAIC03MTEsNyArNzI1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5z
dHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZt
KQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgdGhyb3duVmFsdWVHUFIgPSBhcmd1bWVudEdQUjE7CkBAIC03MjAsNyArNzM0
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogCiAjaWYgTlVN
QkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgaml0LmxvYWRQdHIoJnZtLnRv
cEVudHJ5RnJhbWUsIGFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChhcmd1bWVudEdQUjApOworICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihhcmd1bWVudEdQUjApOwog
I2VuZGlmCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50
R1BSMDsKQEAgLTkwOCw3ICs5MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVx
KGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1Qw
LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTE4LDcgKzkzMyw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTMx
LDcgKzk0Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKICAg
ICAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1Qw
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYg
KHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RW
UmVnKTsKIH0KQEAgLTk1MSw3ICs5NjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmlj
KGNvbnN0IEluc3RyCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsK
ICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykK
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk3OCw3ICs5
OTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05OTMsNyArMTAwOSwx
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDY0
KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3Mo
cmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworCisgICAgLy8gV2hlbiB0aGUgTExJbnQgdGhyb3dzIGFuIGV4Y2VwdGlvbiwg
dGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSd2ZSBhbHJlYWR5IHRpZXJlZCB1cAorICAgIC8vIHRv
IGJhc2VsaW5lLCBhbmQgd2UnbGwgY2F0Y2ggdGhhdCBleGNlcHRpb24gaW4gdGhlIGJhc2VsaW5l
IEpJVC4gQmVjYXVzZSB0aGUgTExJbnQgdXNlcworICAgIC8vIHRoZSBhIGRpZmZlcmVudCB2YWx1
ZSBpbnNpZGUgc19jb25zdGFudHNHUFIsIHRoZSBjYWxsZWUgc2F2ZXMgd2UgcmVzdG9yZSBhYm92
ZSBtYXkgbm90CisgICAgLy8gY29udGFpbiB0aGUgY29ycmVjdCB0aGF0IHJlZ2lzdGVyLiBTbyB3
ZSByZXBsZW5pc2ggaXQgaGVyZS4KKyAgICB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJlZ1QwKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29u
c3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7CisgICAgfQogCiAgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0
Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMDExLDIzICsxMDM3LDExIEBAIHZv
aWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0
eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsK
LSAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZt
KCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1
ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVl
UHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBza2lw
T1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0
aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYg
KGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0gICAg
ICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSwgcmVn
cyk7Ci0gICAgICAgIH0pOwotICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIApA
QCAtMTA1Myw4ICsxMDY3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJ
bnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5l
ZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0
cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRT
aW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNo
ZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1
bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5z
dXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwODEsMTMgKzEwOTUsMTQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1w
IHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1l
bnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0
YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6
Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJs
ZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRl
eCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1
dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlw
ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUu
bV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0K
IApAQCAtMTA5OSwyMCArMTExNCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5n
KGNvbnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2Ny
dXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlv
bnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmlu
Z0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxl
SW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJp
bmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIHRhYmxlSW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNo
UHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlYnVnPigpOwotICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJS
ZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkpLCByZWdUMCk7CiAgICAgSnVtcCBu
b0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2Rl
Lm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwpA
QCAtMTEzMyw3ICsxMTUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0
cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CkBAIC0xMTQ4LDcgKzExNjUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IElu
c3RydWN0CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE2
Niw3ICsxMTgyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Ywog
CiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVn
VDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBA
IC0xMTg4LDEyICsxMjA0LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3Ry
dWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlh
bGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJz
LCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRp
bWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgc2l6ZV90IGNvdW50ID0gbV9jb2Rl
QmxvY2stPm51bVZhcnMoKTsKKyAgICBzaXplX3QgY291bnQgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT5udW1WYXJzKCk7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGZvciAoc2l6
ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxS
ZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCiAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVC
bG9jayk7CisgICAgCisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QwKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwKTsKIAogICAgIGVtaXRF
bnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAjZWxzZQpAQCAtMTIxMiw3ICsxMjMwLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9w
X2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJl
Z2lzdGVyczo6ZWJwKTsKQEAgLTEzMTAsMjMgKzEzMjgsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRT
dHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1
cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BUb1RoaXM6
Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1QyKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwotICAgIFdyaXRlQmFycmllckJh
c2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAg
ICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRh
UmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKQEAgLTEzNDIs
NyArMTM1Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAg
ICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9m
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFBy
b3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwg
YWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9u
UmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rp
b246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKIAotICAgIGxvYWRQdHIoY2FjaGVkRnVu
Y3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcENyZWF0ZVRoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZENhbGxlZSgpLCBjYWNo
ZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNo
UHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5N
dWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RF
cXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0aXBs
ZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM4Niw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwg
cmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVn
cyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIsNyArMTM5Nyw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJl
Z1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVy
blZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qs
IHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyArMTQxMCw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzE0MjEsOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0MzYsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1
cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogfQpAQCAtMTQzMCw3ICsxNDQ5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1
cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29w
SGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYm
IG1fdW5saW5rZWRDb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4
ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkUHRyKHB0ciwgcmVnVDAp
OwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaFB0cihCZWxvdywgcmVnVDAs
IFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0
KCkpKTsKQEAgLTE0NDAsNyArMTQ1OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChj
b25zdCBJbnN0cnUKICNlbHNlCiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKLSAg
ICAgICAgbW92ZVZhbHVlKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVzdWx0UmVncyk7
CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVzdWx0UmVncy5ncHIoKSk7CiAgICAgICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTE0NTMsOCArMTQ3Miw5
IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKIAogICAgIC8vIEVt
aXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAogICAgIGlmIChjYW5CZU9wdGltaXplZCgp
KSB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZlT3JaZXJv
LCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3Ao
KSksCi0gICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJ
VEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAgICAgICBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9CiB9CiAKQEAgLTE1MDks
NyArMTUyOSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFyZ3Vt
ZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC0xNTIyLDcgKzE1NDMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2hlY2tfdHJhcHMoY29uc3QgCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfY2hlY2tfdHJhcHNfaGFu
ZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjpl
YnApOwpAQCAtMTU2NCwzNCArMTU4NSwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhw
KGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRHUFIwOworICAg
IGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXROZXdG
dW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
SnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1f
c2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJn
dW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBt
X2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBh
dXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
Ynl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBh
cmd1bWVudEdQUjIpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dl
bmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Fz
eW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdf
YXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAt
MTYyMSwyMyArMTY0NCwyNCBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0
IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQ
UjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwog
I2VuZGlmCiAKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2st
PmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFu
dCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhw
ciwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1f
ZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIy
KTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9y
X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5j
X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3
X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9u
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0
aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQog
CkBAIC0xNjY0LDI5ICsxNjg4LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19nZW5l
cmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJn
djsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQ
cm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwK
LSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMik7CisgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBzaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CiAjZWxzZQorICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRl
Y29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRp
b25Qcm9maWxlKCksIHJlZ1QyKTsKICAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdU
MCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmls
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAg
ICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJlZ1Qy
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQogCkBAIC0xNjk0LDggKzE3
MTksMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKKyAgICBtX2lzU2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlw
ZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZp
cnR1YWxSZWdpc3RlcjsKIApAQCAtMTc3NywyMCArMTgwNCwyNSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9
IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYg
dGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJl
ZyA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMg
bXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcg
PSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tl
dFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCBy
ZWdpc3Rlci4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVu
c3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJl
Zywgc2NyYXRjaDJSZWcpOworICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hh
ZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEs
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNW
QUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIG1faXNTaGFyZWFibGUgPSBm
YWxzZTsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJv
ZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2Nr
TG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsKQEAg
LTE4NjAsNyArMTg5Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJ
bnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxOTE4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVl
UmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CiAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODI2NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5j
bHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1v
blNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJE
RkdPU1JFbnRyeS5oIgpAQCAtMjg1NSw3ICsyODU2LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxv
Y2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRhYmxl
Lm1fY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwogCkBAIC0yODgwLDcgKzI4ODEsNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBr
ZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2Vs
aW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9p
ZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJbnQzMigpKQpAQCAtMjkwMyw3ICsyOTA0LDcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdm9pZCogcmVzdWx0OwotICAg
IGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJbXBs
KiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZhbHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpAQCAt
MjkxOSw3ICsyOTIwLDYgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRj
aAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCi0jaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0yOTcxLDcgKzI5NzEsNiBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc29sdmVkU2NvcGUpOwogfQotI2VuZGlmCiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjkwLDkgKzI5MCw3IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHIK
IEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3du
S2V5VHlwZSwgY2hhciosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6
ZV90IHRhYmxlSW5kZXgsIGludDMyX3QgbWluKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgY2hhciosIChWTSosIEVuY29k
ZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgsIGludDMyX3QgbWluKSk7CiBKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlw
ZSwgY2hhciosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRh
YmxlSW5kZXgpKTsKLSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIEpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUsIEVuY29kZWRKU1Zh
bHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwot
I2VuZGlmCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldEZyb21TY29wZSwg
RW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRl
Y29kZVBDKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFRvU2NvcGUs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBDKSk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAkocmV2aXNpb24gMjgy
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODcsNyArODcsMTIgQEAgYXV0byBKSVRQbGFuOjp0aWVyKCkgY29uc3QgLT4gVGll
cgogCiBKSVRDb21waWxhdGlvbktleSBKSVRQbGFuOjprZXkoKQogewotICAgIHJldHVybiBKSVRD
b21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLCBtX21vZGUp
OworICAgIEpTQ2VsbCogY29kZUJsb2NrOworICAgIGlmIChtX21vZGUgPT0gSklUQ29tcGlsYXRp
b25Nb2RlOjpCYXNlbGluZSkKKyAgICAgICAgY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPnVubGlu
a2VkQ29kZUJsb2NrKCk7CisgICAgZWxzZQorICAgICAgICBjb2RlQmxvY2sgPSBtX2NvZGVCbG9j
ay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIHJldHVybiBKSVRDb21waWxhdGlvbktleShj
b2RlQmxvY2ssIG1fbW9kZSk7CiB9CiAKIGJvb2wgSklUUGxhbjo6aXNLbm93blRvQmVMaXZlQWZ0
ZXJHQygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0OCw3ICszNDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJ
VFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwg
SW52YWxpZEdQUlJlZywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNTeW1ib2wgPSB0cnVlOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOTIgKzQ5LDEwNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3Jh
dGNoOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOwogCi0gICAgaWYgKG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRp
b25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8g
bm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGlmIChieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgp
ID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgeworICAgICAg
ICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7
CiAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWws
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3Qs
IHNjcmF0Y2hHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hH
UFIpOwogCi0gICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QxKSwgcmVzdWx0UmVncywgcmVnVDIpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCiAg
ICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRTbG93Q2FzZSgpOworCisgICAg
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgcmVzZXRTUCgpOyAvLyBXZSBt
aWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQ
CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdl
bik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwogICAgIH0KLQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgogdm9pZCBK
SVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBpZiAoaGFzQW55
U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKKyAgICBpZiAoIWhhc0FueVNsb3dDYXNlcyhpdGVyKSkKKyAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRC
eVZhbEluZGV4KytdOworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXgrK107CiAKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9m
aWxlLCByZWdUMCwgcmVnVDEpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5
dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BS
NCk7CiAjZWxzZQotICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgQVNT
RVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Cisg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29k
ZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OwotICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OworICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBh
bHJlYWR5IHVzZWQuCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3Vt
ZW50R1BSMjsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKLSAgICAgICAg
c3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwotCi0gICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKLSAgICAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICAgICAgQ2FsbCBjYWxs
OwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25H
ZXRCeVZhbE9wdGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsID0gYXBwZW5k
Q2FsbChvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
ZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fz
c2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlID09IHJlZ1QwKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5ID09IHJlZ1QxKTsK
IAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQ
Uik7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2Rl
LCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQ
Uik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92
YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
LSAgICB9CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQpAQCAtMTQ5LDcgKzE2MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlm
ICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0
LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE2MCw4ICsxNzIsOCBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSBhcmd1bWVudEdQUjU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVu
dEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5Owog
ICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7
CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0x
ODcsMzQgKzE5OSw0MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAg
ICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0
ZU5hbWUsCisgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVn
cywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdz
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKICAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CkBAIC0yMjMsOSArMjQxLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVy
YXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BS
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRH
UFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0
UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMjM1LDI2ICsyNTUsMjAgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fz
c2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVH
UFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQpAQCAtMjY0LDcgKzI3OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKQEAgLTMwMCwyMSArMzE0LDI4IEBAIHZvaWQgSklUOjplbWl0X29w
X3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29k
ZS5tX2JyYW5kOwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5k
R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFj
Y2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MoYnJhbmRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAg
Ly8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNp
bmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI0LDE3ICszNDUsMjIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRXcml0
ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZh
dGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVu
dEluc3RydWN0aW9uKTsKKwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBKSVRQ
cml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNb
bV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0g
cmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRl
QnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxP
cGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPihBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRH
UFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzcwLDE4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFk
eSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJy
YW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRz
PGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlw
ZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXpl
OwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYK
IAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMzMgKzM5MCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
aGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOworCisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJy
YW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrUHJpdmF0ZUJyYW5kPigpOworICAgIFVOVVNFRF9Q
QVJBTShieXRlY29kZSk7CisKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdl
biA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleCsrXTsK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBi
cmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRH
UFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3Vt
ZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZh
dGVCcmFuZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CkBAIC00MDYsMjQgKzQ0MCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJp
dmF0ZV9icmFuCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1l
bnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJp
dmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0g
YXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlH
UFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFu
ZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC00MzUsMzAgKzQ2Myw0MyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHJlZ1QzKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVn
VDMsIHJlZ1Q0KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BS
LCBwcm9maWxlR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAK
ICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCk7Cisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0
QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBwcm9maWxlR1BSLCBzdHViSW5mb0dQUik7CisKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVy
dHlJc0ludDMyID0gdHJ1ZTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OlB1dEJ5VmFsOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gc3RkOjppc19zYW1lX3Y8
T3AsIE9wUHV0QnlWYWxEaXJlY3Q+ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGly
ZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
cmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNl
cnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQg
d3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTQ3NCwxNSArNTE1LDEyIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVj
bWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAg
ICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNt
YU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNDk4LDcg
KzUzNiwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBp
biB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIs
IGdlbi5zdHViSW5mbygpLCByZWdUMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQpOwor
ICAgIGlmIChpc0RpcmVjdCkKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRh
KGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSwgT3BQdXRCeVZhbERp
cmVjdDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7Cisg
ICAgZWxzZQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpLCBPcFB1dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0
eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BS
NCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQ
UjQsIGFyZ3VtZW50R1BSNSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC01
MTIsNyArNTU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIENhbGwgY2FsbDsKICAg
ICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
KTsKQEAgLTUyMyw3ICs1NzAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC01MzMsMTggKzU4
MCwyNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNz
KCk7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q1OwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVn
VDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIg
PSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpwcm9maWxlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZz
ZXRHUFIgPSByZWdUNTsKKyAgICB7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWQoQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHksIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlLCBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpwcm9maWxlKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q0KSk7
CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlucyhyZWdUNSkpOworICAgIH0KKwogCiAgICAg
aml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKQEAgLTU3MCwyMCArNjIz
LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwgSW52YWxpZEdQUlJl
ZywgcmVnVDQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0UHJp
dmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPnByaXZhdGVGaWVsZFB1dEtpbmQgPSBieXRlY29kZS5t
X3B1dEtpbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdl
bik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJh
cnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC01OTQsOCArNjU4LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgUHJpdmF0
ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIFVOVVNFRF9Q
QVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdl
biA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJbmRleCsrXTsKIApAQCAtNjAzLDEzICs2NjYsMTUg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQu
aXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUg
OiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0
IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGdlbi5zdHViSW5mbygpLCBUcnVz
dGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBh
cmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb248
ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSk+KEFk
ZHJlc3MoYXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0
aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVu
dEdQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02MjIsMTggKzY4NywxMiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIGVsc2UKLSAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKQEAgLTY0MywxNCArNzAyLDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAg
ICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdU
MzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAg
LTY4MCw3ICs3MzksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAg
ICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1Qy
LCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
Njg5LDcgKzc0OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAg
IGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIs
IHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNjk5LDcgKzc2MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVy
X2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzA5LDcgKzc3MSw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVn
VDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC03MTksNyArNzgyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29u
cwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEp
OwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1Qy
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc5MSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlk
UmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIs
IHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5
SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwog
CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVy
IGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIg
YXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lz
dGVycy4KQEAgLTc1OSwxNSArODMzLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlf
aWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
Lm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlJZE9w
dGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtNzgxLDI0ICs4NTcsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV9pZChjb25zdCBJbgogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVu
dEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNDsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwg
cHJvcGVydHlHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxl
dGVCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3Rh
dGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdU
MCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkp
OwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC04MDgsNyArODc5LDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25z
IGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJl
bG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAg
Ly8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtODQ1LDIyICs5MTYs
MzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEs
IGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5l
RGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Bl
cnR5R1BSLCBwcm9wZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBCYXNl
bGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmll
ciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVn
aXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUt
YmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5NjUsMTEgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBh
cmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25EZWxldGVCeVZhbE9w
dGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50R1BSMywgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtODk5LDI0ICs5ODMsMTkg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5t
X2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKQEAgLTkyNiw3ICsxMDA1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRo
ZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0
byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQog
ICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtOTYxLDIyICsxMDQwLDMxIEBAIHZv
aWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwg
QWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpUcnlH
ZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OlRyeUdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2LDE0ICsxMDc0LDE3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9u
PGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTAwMywyNiArMTA5NCwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5
X2dldF9ieV9pZChjb25zCiAgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7
CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRP
cHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdl
dEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
IAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIp
OwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEw
MzAsMjIgKzExMTUsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25z
dAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERp
cmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
cmVnVDApOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNl
R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcp
OwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1
YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYg
KzExNDgsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJl
Y3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50
R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdl
dEJ5SWREaXJlY3RPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
QEAgLTEwNzMsODMgKzExNjksNjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9k
aXJlY3QoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlH
UFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKSwg
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9w
dGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0
QnlJZERpcmVjdE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZS
ZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVn
LCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKICAg
ICAKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBi
cmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRh
Lm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFy
cmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVn
VDAsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxl
LCByZWdUMSk7CisgICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6
Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6
b2Zmc2V0T2ZNb2RlKCksIHNjcmF0Y2hHUFIpOworICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3Ro
TW9kZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhf
dD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6
Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGg6
Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBu
b3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZS
ZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIHRoaXNWUmVnKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0
UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogCi0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQotICAgIEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJ
ZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBz
dHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0
IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAg
ICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTE1OCwx
NiArMTIzMywxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7
CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYg
KzEyNTQsNTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwog
CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VH
UFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
dHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJl
dHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFs
dWU7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5
SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0
aFRoaXM7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2Ug
bmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
bV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTIwNiw3
ICsxMzE1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRk
cmVzcygpOwpAQCAtMTI0MSwxNiArMTM1MCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRC
eUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRX
aXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3Vt
ZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVz
dWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTI2MCwyOCArMTM3MiwyMiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdGhpc0dQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
dGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0
YXRpY19hc3NlcnQodGhpc0dQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5
SWRXaXRoVGhpc09wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBA
IC0xMjkxLDcgKzEzOTcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdS
ZXR1cm5BZGRyZXNzKCk7CkBAIC0xMzI5LDIzICsxNDM1LDM4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwg
YW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBq
dXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAn
aG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKICAgICAvLyBzdWNoIHRoYXQgdGhl
IFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20g
dGhpcy4KIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFs
dWVWUmVnLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRj
aDsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCBiYXNlR1BSLCB2YWx1ZVZSZWcs
IHZhbHVlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZVZSZWcpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDMsIHJlZ1QyLCBlY21h
TW9kZShieXRlY29kZSksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIsIGVjbWFNb2Rl
KGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6
Tm90RGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5SWQ7CisgICAgc3R1YkluZm8tPnB1dEtpbmQg
PSBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1
YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8v
IFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVz
ZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiAg
ICAgCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJy
aWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMTM1OSwxNCArMTQ4MCwxOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJ
ZD4oKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAgICAgCiAgICAgSklUUHV0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdl
bi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGFy
Z3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3Niwy
NSArMTUwMSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBh
cmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdU
MTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7
CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAg
IHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xNDA0LDcgKzE1MjMsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQx
LDIwICsxNTYwLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTkzLDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2Fs
bE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBy
ZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtMTQ4MCwyOCArMTYxMywyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5fYnlfaWQoY29uc3QgSW5zCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
OjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7
CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IC8vIHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3Rs
eSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcg
YSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1p
emUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRp
bWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlJ
ZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEwLDI1ICsxNjM3LDMzIEBAIHZv
aWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAg
Y29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIEJhc2Vs
aW5lSW5CeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFk
ZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNTM3LDE1ICsxNjcyLDE4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5
VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJl
Z1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5C
eVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMyk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVu
dEdQUjQpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGlt
aXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtMTU1Niw1OSArMTY5NCw3MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50
R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAg
IHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAg
ICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0
ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKICAgICAvLyBzbG93X29wX2dl
dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVl
ZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0
aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpLCBkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1
YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NU
eXBlIHR5cGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
T3JCcmFuZCwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IHR5cGU7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmly
dHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSB0eXBlKQordm9pZCBKSVQ6OmVtaXRIYXNQcml2
YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAgQVNTRVJUKHR5cGUg
PT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQ
cml2YXRlQnJhbmQpOworICAgIFVOVVNFRF9QQVJBTShiYXNlKTsKKyAgICBVTlVTRURfUEFSQU0o
cHJvcGVydHkpOworICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiAK
ICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4
KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24odHlwZSA9PSBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1p
emUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJh
dGlvbjxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplKT4oQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRH
UFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE2MTgsMjcgKzE3Njcs
MjEgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaQogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
T3JCcmFuZEdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
T3JCcmFuZEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHByb3BlcnR5T3JCcmFuZEdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9H
UFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhh
c1ByaXZhdGVOYW1lT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9w
dGltaXplKT46OnZhbHVlKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlw
ZShvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdl
dFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
TmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2
YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5
cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFt
ZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2hhc19wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTE2NTIsNyArMTc5NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNf
cHJpdmF0ZV9uYW1lKGMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAg
ICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZh
dGVOYW1lKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2Rl
Lm1fYmFzZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY2NiwyMTUgKzE4MDksMTI3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0
LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhi
eXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNo
ZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVj
dGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BS
KQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0
YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxP
YmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVD
VF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNj
cmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRj
aEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJl
Z1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLSNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi12b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5
dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5t
X3Jlc29sdmVUeXBlOwotICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3Bl
RGVwdGg7Ci0KLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSkgewotICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29u
c3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCBy
ZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4
aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBj
YXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENs
b3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0
YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewot
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
cmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGlu
ayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxM
ZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDAp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAg
ICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAg
ICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxp
bmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0KIHZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29w
ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0
ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1f
cmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRl
Y29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VS
VChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Nv
cGVHUFIgPSByZWdUNjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
cmVnVDU7CisgICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3Jl
IGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJl
c29sdmUgdHlwZS4KIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSks
IHJlZ1QwKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAg
ICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAg
ICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0
YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSk7CisKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2
bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5r
KHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhciIp
OworICAgICAgICB9OwogCi0jZGVmaW5lIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVU
eXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAg
c3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAg
IEZPUl9FQUNIX1JFU09MVkVfVFlQRShSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyAgICAgICAg
YXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYg
dm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVu
ayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfcmVz
b2x2ZV9zY29wZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyIpOwogICAgICAgICB9
OwotI3VuZGVmIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SCisKKyAgICAgICAgYXV0byBnZW5lcmlj
UmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJu
IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNl
bGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7CisgICAgICAgIH07CisKKyAgICAgICAg
Y29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1QyOworICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCBzY29wZUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNl
dCksIG1ldGFkYXRhR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2Rl
OworICAgICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAg
ICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAg
IGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAg
ICAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAg
ICAgfQogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVT
Y29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUs
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5
IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJ
VCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgog
ICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGds
b2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0g
T3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFH
UFIgPSByZWdUNzsgLy8gaW5jb21pbmcKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0g
cmVnVDY7IC8vIGluY29taW5nCisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJl
Z1QyOyAvLyBpbmNvbWluZworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsg
Ly8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVn
VDU7IC8vIGluY29taW5nIC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4KLSAgICBjb25zdGV4cHIg
R1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwogICAgIFVOVVNFRF9QQVJBTShieXRlY29k
ZU9mZnNldEdQUik7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcFJlc29sdmVT
Y29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIGppdC50
YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMs
IG1ldGFkYXRhR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIo
cmVnVDMsIG1ldGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0
byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgYXV0byBk
b1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgewogICAgICAgICBpZiAoIW5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAo
Z2xvYmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgICAgIGdsb2JhbE9i
amVjdEdQUiA9IHJlZ1Q0OwotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAg
ICAgICAgfQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdU
Myk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1Qz
LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9C
SkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSks
IHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0UmVzb2x2ZUNsb3N1cmUg
PSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgbW92ZShzY29w
ZUdQUiwgcmVnVDApOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNU
X09GRlNFVE9GKE1ldGFkYXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7Ci0KLSAgICAg
ICAgTGFiZWwgbG9vcCA9IGxhYmVsKCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3Qz
MihaZXJvLCByZWdUMSk7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBzdWIz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICAgICAgICAgIGp1bXAoKS5saW5rVG8obG9v
cCwgdGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBk
b1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc3Rh
dGljX2Fzc2VydChzY29wZUdQUiA9PSByZWdUMCk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mTG9jYWxTY29wZURlcHRoKCkpLCByZWdU
MSk7CisKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRv
bmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAg
IGppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lmp1bXAoKS5s
aW5rVG8obG9vcCwgJmppdCk7CisgICAgICAgIGRvbmUubGluaygmaml0KTsKICAgICB9OwogCiAg
ICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKQEAgLTE4
ODIsMTIgKzE5MzcsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29u
c3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCku
Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShnbG9i
YWxPYmplY3RHUFIsIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCgpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4
aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKQEAgLTE4OTcsMTEgKzE5NTEsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29k
ZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwK
ICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGlj
YWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9u
bWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsxOTYzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAo
KSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2Ug
TW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMTk3Myw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNv
bHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5k
OwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2
ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
ID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2Fs
VmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBl
bWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0
eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0
YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDEpOwogCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSkgeworICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAg
ICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGppdC5qdW1wKCkpOworICAgICAgICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9
OwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQu
bGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9i
YWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRD
YXNlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7
CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAg
IGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICByZXQo
KTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBH
TE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNs
b3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5l
cmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVs
KHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFi
ZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xW
RV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVy
YXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1Vz
ZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7
IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0
ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9z
Y29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVG
SU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BF
X0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1
bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTElu
dCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJv
dXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25n
aW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4g
YWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAtMjAzNCw3ICsyMDUwLDYgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhj
ZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfcmVzb2x2ZV9zY29wZSIpOwogfQotI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiB2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90
KQogewpAQCAtMjA2MiwyNzYgKzIwNzcsMTMzIEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZh
cihWaXJ0dWFsUmVnaXMKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmly
b25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3Rlcikp
LCByZWdUMCk7CiB9CiAKLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0g
ICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3Qo
KTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29s
dmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJ
bmZvLnJlc29sdmVUeXBlKCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7Ci0gICAgICAgIHN3
aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
ICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8g
U3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hl
IHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFs
bHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24u
Ci0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIHJl
c3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKLQotICAgICAgICAgICAgaml0QXNzZXJ0KHNj
b3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpKTsKLSAgICAgICAgICAgIH0pKTsKKyAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOworICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVj
b2RlSW5kZXgpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0
KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAotICAgICAgICAgICAg
bG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFC
TEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
KTsKLSAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxp
bmUpOwotICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAg
ICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9h
ZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGlu
ZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAg
Y2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdEdldENs
b3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAg
Y2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9CisgICAgYXV0byBj
bG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpn
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3Bf
Z2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOwogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29s
dmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7
Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsK
LSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
ID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2Fs
VmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7
Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1Qw
KTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxp
bmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLQotICAg
ICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
ZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRp
b25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi0jZWxzZSAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNv
ZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6Omdl
bmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07
CiAKLSAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5
dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7
CisgICAgYXV0byBnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgewor
ICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIHN0ZDo6
bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBnZW5lcmljIik7CisgICAgfTsK
IAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAo
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0gICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNs
b3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwot
ICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3Bl
cmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFk
YXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEp
OworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRf
RlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVz
b2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRf
RlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAgIH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVf
R0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQ
Uik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1ty
ZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1Yihj
bG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0
Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAg
ZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2Vu
ZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3Bl
VGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJv
bVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlw
ZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQg
YnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUg
SklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQg
Z2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIg
Z2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNl
ZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSk7Ci0KLSAgICB0YWdSZXR1cm5BZGRyZXNz
KCk7Ci0KLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1l
dGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2U7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAotICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sg
PSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJfdCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCkg
ewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0dXJl
T2Zmc2V0KSwgcmVnVDEpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAg
IHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MSk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKLSAgICB9OworICAg
IGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAg
IGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNl
OwogCi0gICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVj
dGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFs
T2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6
b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAg
IGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBv
aW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFs
LCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZh
ckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAg
bG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRp
cmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBs
b2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9
IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgewotICAgICAgICBzdGF0
aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQo
VHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBv
cGVyYW5kR1BSKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNh
bEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOwotICAgIH07Ci0KLSAg
ICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hl
Y2soc2NvcGVHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9zdHJ1Y3R1cmUpKTsgLy8g
U3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hl
IHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFs
bHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24u
Ci0KLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2ggPSByZWdUMjsKLQotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1w
KHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSks
IHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBy
ZWdUMyk7CisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUo
KSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0
cihaZXJvLCByZWdUMSkpOworICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKHJlZ1QxLCBT
dHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworCisgICAgICAgICAgICBqaXQuaml0
QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAg
ICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMyk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29k
ZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAg
IHJldHVybiBqaXQuYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgcmVnVDMpOwogICAgICAgICAg
ICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIG9mZnNldCk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5k
KCkpLCByZWdUMSk7CisKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAg
ICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAg
ICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAg
ICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNP
dXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMSwgVHJ1c3Rl
ZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgaml0LmFib3J0
V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CisgICAgICAgICAgICAgICAgaXNP
dXRPZkxpbmUubGluaygmaml0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAg
ICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihv
ZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9m
ZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAg
ICAgICAgaml0Lm5lZzMyKHJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0
cihyZWdUMSwgcmVnVDEpOworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgocmVnVDAs
IHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0
YSwgbV9vcGVyYW5kKSwgcmVnVDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFu
ZCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKHJlZ1QwLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9v
cGVyYW5kKSksIHJlZ1QzKTsKLSAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlR1BS
LCByZWdUMyk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOworICAg
ICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAg
ICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCByZWdUMyk7CisgICAgICAgICAg
ICBqaXQuYWRkUHRyKHNjb3BlR1BSLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSks
IHJlZ1QwKTsKKwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAg
ICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVz
b2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTIzNDEsODYgKzIy
MTMsNjMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAg
ICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJl
Z1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
cmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihy
ZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6
IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0g
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAg
aWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsK
ICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDAp
OwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBqaXQubG9hZDMyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSksIHJlZ1QwKTsK
KyAgICAgICAgaml0LmFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJl
Z1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc0dsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0
aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
LmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gaml0LmJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAg
ICAgICBub3RHbG9iYWxWYXIubGluaygmaml0KTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb24gPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5s
aW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGppdC5icmFuY2gz
MihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CisgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluaygmaml0KTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5q
dW1wKCkpOworICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmso
JmppdCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGppdC5i
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsoJmpp
dCk7CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBU
b0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAogICAgIHN0YXRpY19hc3NlcnQoVmFsdWVQcm9maWxl
OjpudW1iZXJPZkJ1Y2tldHMgPT0gMSk7Ci0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0
LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlBy
b2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAKLSAgICBy
ZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlz
LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRv
IHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3Bl
R2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25M
YWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlv
bkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9H
RVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBl
IyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRo
dW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICBy
ZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQu
Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dl
dF9mcm9tX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVf
VFlQRShERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9HRVRf
RlJPTV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAg
IC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdp
dGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVn
aXN0ZXJzOjplYnApOwpAQCAtMjQyOSw3ICsyMjc4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogI2VuZGlmCiAKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0
RnJvbVNjb3BlOjpNZXRhZGF0YTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0g
cmVnVDc7CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBqaXQuc3RvcmUz
MihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSk7CiAKQEAgLTI0NDksNyArMjI5OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9w
ZXJhdGlvblB0clRhZyk7CiAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGppdC5lbWl0Tm9uUGF0
Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0pOwogCi0gICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJl
c3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwg
bV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51
bWJlclRhZ1JlZ2lzdGVyLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2Zp
bGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7CiAKICNpZiBD
UFUoWDg2XzY0KQpAQCAtMjQ2OSw4OCArMjMxOCw3NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgcGF0Y2hCdWZmZXIubGluayhqdW1wVG9IYW5kbGVyLCBD
b2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2Vs
aW5lOiBzbG93X29wX2dldF9mcm9tX3Njb3BlIik7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSog
b3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlX
cml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjpl
bWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50
U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBs
b2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0
ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3Rv
cmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZp
cnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7
Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3Mo
cmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFu
ZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBj
b3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9
IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90
ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNs
b3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwog
Ci0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wg
aW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dElu
Zm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5q
ZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0
aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVj
a2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hl
Y2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBm
b3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlv
bmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rp
b24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2Nv
cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCByZWdUMSk7CisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisKICAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0
KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJl
Z1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBs
b2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAg
IGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9m
ZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAg
ICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWln
aHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkp
OwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBzdG9yZVB0cihyZWdU
MiwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2Ug
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29u
c3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAg
IGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAm
JiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKyAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdU
MCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9T
Y29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAg
IGlmICghaXNJbml0aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRp
b25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNh
bid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5Lgot
ICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+
KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
KSwgcmVnVDEpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVn
VDEpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVy
YW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNo
cG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBt
ZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihj
b25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBs
b2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRl
V2F0Y2hwb2ludChyZWdUMSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAp
KTsKKworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
UmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBt
ZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworCisgICAg
ICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0
ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZP
cGVyYW5kKCksIHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQo
cmVnVDApOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEp
OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAg
ICAgICAgICAgc3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdo
dCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKwogICAgICAg
ICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTI1NjQsNTgg
KzI0MDIsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdl
dFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAK
LQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNh
bFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUg
dG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQubGluayh0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewor
ICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUgdGhpbmdzCisgICAg
Ly8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBp
cyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIsCisgICAgLy8gYWxs
IENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIKKyAgICAvLyBpZiB0aGUg
dmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhl
biB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hh
dCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlm
IChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikKKyAgICAgICAgZW1p
dENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBlbWl0Q29k
ZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZWxzZSB7CiAgICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dElu
Zm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOwogICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsK
KworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwor
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAK
ICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAgICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0Ogot
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKICAg
ICB9CiB9CiAKQEAgLTI2MjQsMTggKzI0NTYsMjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNv
bHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNv
bHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgaWYgKHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElmIGFueSBsaW5rZWQgQ29k
ZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENvZGVCbG9ja3MgYXJlIGd1
YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFyLgogICAgICAgICBKSVRT
bG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19w
YXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAg
ICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2UgewogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3Bl
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0
cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1bWVudEdQUjAsIGN1cnJl
bnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
ICAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5
dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIEFTU0VSVChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVu
dEluc3RydWN0aW9uKTsKIAogICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAgLTI2NTIsNyArMjQ4Nyw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9u
cyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAog
ICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0
ZXJzOjplYnApOwpAQCAtMjcwMSw3ICsyNTM2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1l
bnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6
c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSks
IHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3NTks
NyArMjU5NCw2IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIHZv
aWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpAQCAtMjc2Nyw3ICsyNjAx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5k
ZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVn
VDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI4MjMsNyArMjY1Nyw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG8KIHZvaWQgSklUOjplbWl0X29w
X2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRv
ck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAgLTI4MzksMTEgKzI2
NzIsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogICAgIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBt
b2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBjYXNlIGl0IGlmIHdlIHByb2ZpbGUg
aXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9
PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKKyAgICBpZiAo
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9lbnVtZXJhdG9yTWV0YWRh
dGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CiAgICAg
ICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDQ7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwg
ZW51bWVyYXRvckdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0
MzIoTm9uWmVybywgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Ok93blN0cnVjdHVyZU1vZGUpICYgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJh
dGlvbk1vZGVNYXNrKSkpOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworCisgICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEVudW1lcmF0
b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
T3duU3RydWN0dXJlTW9kZSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdG9yZThUb01ldGFkYXRh
KHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0
T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CisKICAgICAgICAgbG9hZDMyKEFkZHJlc3MoZW51bWVy
YXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgaW5kZXhHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoMzIo
Tm90RXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSkpKTsKIApAQCAtMjg4MSw3OCArMjcyMCw4OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUu
bV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5t
X2VudW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRH
UFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51
bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVy
czo6c2NyYXRjaDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51
bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gz
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7CiAK
LSAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0
YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0
QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoMik7
CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoc2Ny
YXRjaDIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9m
RW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKICAg
ICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgotICAgIEp1bXAgaXNO
b3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVk
SW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlzTm90T3duU3RydWN0dXJl
TW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1w
IHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJl
Z1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsKKyAg
ICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFs
LCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQu
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDMpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJZiBpbmRleCBpcyBsZXNz
IHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBh
biBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0
ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJl
Z1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQorICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNz
ID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Cisg
ICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQoQmFz
ZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgp
KTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNj
ZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDMp
OwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7Cisg
ICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3Jh
dGNoMik7CiAgICAgY29uc3RleHByIGludHB0cl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IG9m
ZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludHB0
cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsK
KyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBvZmZz
ZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVt
cCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4KFRy
dXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVN
b2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOwor
ICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2RlLCBP
cEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRh
KCkpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBp
c05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4
ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5n
IHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1Qx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAg
ICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFs
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3
ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0y
OTYxLDEwICsyODEwLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5
XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVyKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9w
Y29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRf
ZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlw
ZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xv
d1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0
eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBi
eXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0yOTczLDcgKzI4MjEsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBB
YnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9h
ZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVt
ZXJhdG9yTWV0YWRhdGEoKSwgcmVnVDEpOworICAgIG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBz
dG9yZThUb01ldGFkYXRhKHJlZ1QxLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
VGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwogCkBAIC0zMDYyLDYgKzI5MTIsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW4ubGluayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVn
IG93bmVyKQoreworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJC
cmFuY2godm0oKSwgb3duZXIsIHNlbGVjdFNjcmF0Y2hHUFIob3duZXIpKTsKKyAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZt
KCksIG93bmVyKTsKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2
LDkgKzIzNiw5IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAg
ICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZUNlbGwpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKICAgICAgICAgICAgICAg
ICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VDZWxsCi0gICAgICAgICAgICAgICAgICAg
ICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChzdHViSW5mbywganNDYXN0
PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7CisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFj
Y2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8
SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKIAotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVy
YXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoc3R1Yklu
Zm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgYm9v
bCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3Ro
KGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9w
cmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby5pbml0QXJyYXlMZW5ndGgobG9ja2VyKTsKQEAgLTI0OSw4ICsyNDksOCBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICAg
ICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNl
OjpBcnJheUxlbmd0aCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNK
U1N0cmluZyhiYXNlQ2VsbCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVU
eXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVB
Y2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKSkgewotICAgICAgICAgICAg
ICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
U3RyaW5nTGVuZ3RoKHN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNj
ZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKSkgeworICAg
ICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9w
dGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0
dWJJbmZvLmluaXRTdHJpbmdMZW5ndGgobG9ja2VyKTsKQEAgLTMwNCw3ICszMDQsNyBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICAgICAgJiYg
IXNsb3Qud2F0Y2hwb2ludFNldCgpCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVl
ZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAgICAgICAgICAgICAgICAgJiYgIWxvYWRUYXJn
ZXRGcm9tUHJveHkpIHsKLSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUg
PSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKHN0dWJJbmZvLCBzdHJ1
Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJh
dGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3Mo
Y29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAg
ICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNs
b3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+
c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKQEAgLTczMSwxMSArNzMxLDExIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZVB1dEJ5KEoKICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVy
dHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNl
dAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlBy
b3BlcnR5UmVwbGFjZShzdHViSW5mbywgc2xvdC5jYWNoZWRPZmZzZXQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uo
Y29kZUJsb2NrLCBzdHViSW5mbywgc2xvdC5jYWNoZWRPZmZzZXQoKSkKICAgICAgICAgICAgICAg
ICAgICAgJiYgIW9sZFN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAg
ICAgICAgICAgICAgICAgICAgICYmICFpc1Byb3h5KSB7CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xkU3RydWN0dXJlLCBz
bG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRD
b2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29k
ZUJsb2NrLCBzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlTZWxmUGF0Y2gsIG9sZFN0cnVjdHVy
ZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5m
bywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1
dEtpbmQpKTsKQEAgLTExMzIsNyArMTEzMiw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZUluQnkoCiAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2UK
ICAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKICAgICAgICAgICAgICAg
ICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAg
ICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU2VsZkluQWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGJv
b2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nl
c3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBpZiAo
Z2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNs
b3RCYXNlKCkgPT0gYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0
V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7
CkBAIC0xNTUyLDcgKzE1NTIsNyBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2Fs
bExpbmtJCiAKIHZvaWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvKQogewotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5s
aW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmZhc3RQYXRoU3RhcnQoKSk7CisgICAgZGF0
YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJ
bmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlua0luZm8pKTsKICAgICAKICAgICByZXZlcnRDYWxs
KHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvciku
cmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjgyNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MywyNCArNDMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGpp
dDsKLQotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bS50b3BFbnRyeUZyYW1lKTsKLQotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cigmdm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIGppdC5wcmVwYXJlQ2Fs
bE9wZXJhdGlvbih2bSk7Ci0KLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uID0gaml0
LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKLQotICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVy
KHZtKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXIpKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRpb24iKTsKLX0KLQogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9s
bGJhY2tHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkBAIC03Nywy
NCArNTksNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhCiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxl
RXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2Vw
dGlvbkdlbmVyYXRvcihWTSYgdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdDsKLQotI2lmIENQ
VShYODZfNjQpCi0gICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICog
c2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKLSNlbGlmIENQVShBUk02
NCkKLSAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBD
Q2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7Ci0jZW5kaWYKLQotICAgIENDYWxsSGVscGVyczo6
SnVtcCBjb250aW51YXRpb24gPSBqaXQuanVtcCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElU
aHVuayk7Ci0gICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY29udGludWF0aW9uLCBDb2RlTG9jYXRp
b25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwotICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInBvcFRodW5rU3RhY2tQ
cmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsKLX0KLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAg
Q0NhbGxIZWxwZXJzIGppdDsKQEAgLTEzNyw2ICsxMDEsNDIgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBjaAogCiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0
aW9uR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5
RnJhbWUpOworCisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZt
KTsKKworICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRp
b25QdHJUYWcpOworCisgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOworCisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24s
IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFu
ZGxlcikpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgImhhbmRsZUV4Y2VwdGlvbiIpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5l
cmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyNpZiBDUFUoWDg2XzY0
KQorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMiAqIHNpemVvZihD
UFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVzcCk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAg
aml0LnBvcFBhaXIoQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxw
ZXJzOjpsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29u
dGludWF0aW9uID0gaml0Lmp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwor
ICAgIGF1dG8gaGFuZGxlciA9IHZtLmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9y
KTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNvbnRpbnVhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwo
aGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJwb3BUaHVua1N0YWNrUHJlc2VydmVz
QW5kSGFuZGxlRXhjZXB0aW9uIik7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFRhZ1R5cGU+CiBp
bmxpbmUgdm9pZCBlbWl0UG9pbnRlclZhbGlkYXRpb24oQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJl
ZyBwb2ludGVyR1BSLCBUYWdUeXBlIHRhZykKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
MTIgKzM3LDEyIEBAIGNsYXNzIFZNOwogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2Vu
ZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRs
ZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcihWTSYpOwotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFu
ZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVF
eGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihW
TSYpOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MjY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9y
Q2hlY2twb2ludC5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNoZWNrcG9p
bnRPU1JFeGl0U2lkZVN0YXRlLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2lu
Y2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgpAQCAtMzcwLDEzICszNzEsMjIgQEAgaW5saW5l
IGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVgogICAgIAogICAgIGNvZGVCbG9jay0+
dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoKTsKIAorICAgIGlmIChjb2RlQmxvY2st
PmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICBpZiAoUmVmUHRy
PEJhc2VsaW5lSklUQ29kZT4gYmFzZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJs
b2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUpIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+
c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwo
KSk7CisgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29k
ZShjb2RlQmxvY2spOworICAgICAgICAgICAgY29kZUJsb2NrLT5qaXROZXh0SW52b2NhdGlvbigp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAo
IWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkgewogICAgICAgICBDT0RF
QkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgidGhyZXNob2xk
IG5vdCByZWFjaGVkLCBjb3VudGVyID0gIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVy
KCkpKTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJ
VCB0aHJlc2hvbGQgc2hvdWxkIGJlIGxpZnRlZC4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KICAgICAKLSAgICBKSVRXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdv
cmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZN
KHZtLCBKSVRDb21waWxhdGlvbktleShjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZTo6QmFz
ZWxpbmUpKTsKKyAgICBKSVRXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdvcmts
aXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZt
LCBKSVRDb21waWxhdGlvbktleShjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCksIEpJVENv
bXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpKTsKIAogICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUo
KSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25z
Ojp2ZXJib3NlT1NSKCksICIgICAgQ29kZSB3YXMgYWxyZWFkeSBjb21waWxlZC4iKTsKQEAgLTQ2
Niw4ICs0NzYsMTAgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkg
JiYgY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigp
KSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZtLmdldExvb3BIaW50RXhlY3V0aW9uQ291
bnRlcihwYyk7CiAgICAgICAgICpwdHIgKz0gY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVy
KCkubV9hY3RpdmVUaHJlc2hvbGQ7Ci0gICAgICAgIGlmICgqcHRyID49IE9wdGlvbnM6OmVhcmx5
UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKQorICAgICAgICBpZiAoKnB0ciA+PSBPcHRp
b25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkgeworICAgICAgICAgICAg
Y29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKENvbmN1cnJlbnRKU0xvY2tlcihjb2RlQmxvY2stPm1f
bG9jaykpOyAvLyBXZSdyZSByZXR1cm5pbmcgdG8gdGhlIE9TUiBlbnRyeSBjb2RlIGhlcmUsIHdo
aWNoIGV4cGVjdHMgdGhhdCBtX2ppdERhdGEgaXMgbm90IG51bGwuCiAgICAgICAgICAgICBMTElO
VF9SRVRVUk5fVFdPKExMSW50OjpmdXp6ZXJSZXR1cm5FYXJseUZyb21Mb29wSGludEVudHJ5cG9p
bnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgY2FsbEZyYW1lLT50b3BPZkZyYW1lKCkp
OworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAg
c3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChv
cGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRo
UHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRh
ZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAg
ICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0Rz
dCwgdDApCiAgICAgICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5z
bG93CkBAIC0xMDIzLDcgKzEwMTksNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVT
dHJ1Y3QsIGluCiAgICAgICAgICMgTWV0YWRhdGEgaW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAg
ICBpbnRlZ2VyT3BlcmF0aW9uKHQyLCAuc2xvdykKICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2Fk
T2Zmc2V0W2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2Zp
bGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJp
dGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpA
QCAtMTA4OSwyMiArMTA4NSwxOCBAQCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVn
YXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1
cm4pCiAKLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5
cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmls
ZTo6bV9iaXRzW3Q1XQotICAgIGVuZAotCiAgICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGdldCht
X29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0
MikKICAgICBiaW5lcSB0MSwgSW50MzJUYWcsIC5vcE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXog
dDIsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJp
dGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShP
cE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0NSwgdDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywg
dDIpCiAub3BOZWdhdGVTcmNOb3RJbnQ6CiAgICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0
ZVNsb3cKICAgICB4b3JpIDB4ODAwMDAwMDAsIHQxCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFy
aXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwg
QXJpdGhQcm9maWxlTnVtYmVyLCB0NSwgdDMpCiAgICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVn
YXRlU2xvdzoKQEAgLTExMTUsMTAgKzExMDcsNiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3Vz
dG9tU3RvcmUob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3Rv
cmUsIGRvdWJsZU9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVO
YW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEs
IHJldHVybikKLSAgICAgICAgbWFjcm8gYXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBv
cmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFy
eUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0
YSh0NSwgdDIpCiAgICAgICAgIGdldChtX3JocywgdDIpCiAgICAgICAgIGdldChtX2xocywgdDAp
CkBAIC0xMTI2LDcgKzExMTQsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5h
bWUsIG9wCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0Miwg
dDApCiAgICAgICAgIGJpbmVxIHQyLCBJbnQzMlRhZywgLm9wMU5vdEludAogICAgICAgICBiaW5l
cSB0MywgSW50MzJUYWcsIC5vcDJOb3RJbnQKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJv
ZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVj
dCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAg
ICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAg
ICAgICAgIGRpc3BhdGNoKCkKQEAgLTExMzYsMTIgKzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BD
dXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNs
b3cKICAgICAgICAgYmliIHQzLCBMb3dlc3RUYWcsIC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAg
ICAgYmluZXEgdDMsIEludDMyVGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQ
cm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEs
IGZ0MQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJs
ZToKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRo
UHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9w
Y29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5v
dEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIs
IGZ0MApAQCAtMTE1Myw3ICsxMTQxLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNv
ZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQs
IHRoZSBzZWNvbmQgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0
LCB0MikKICAgICAgICAgYmlhIHQzLCBMb3dlc3RUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJv
ZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAg
ICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJs
ZU9wZXJhdGlvbihmdDEsIGZ0MCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyODI2NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQko
d29ya2luZyBjb3B5KQpAQCAtNDQxLDggKzQ0MSwxMyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklU
Rm9yTG9vcCgpCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQogICAgICAgICAgICAgY0NhbGwyKF9s
bGludF9sb29wX29zcikKICAgICAgICAgICAgIGJ0cHogcjAsIC5yZWNvdmVyCi0KICAgICAgICAg
ICAgIG1vdmUgcjEsIHNwCisKKyAgICAgICAgICAgICMgQmFzZWxpbmUgdXNlcyBMTEludCdzIFBC
IHJlZ2lzdGVyIGZvciBpdHMgSklUIGNvbnN0YW50IHBvb2wuCisgICAgICAgICAgICBsb2FkcCBD
b2RlQmxvY2tbY2ZyXSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9qaXREYXRh
W1BCXSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6SklURGF0YTo6bV9qaXRDb25z
dGFudFBvb2xbUEJdLCBQQgorCiAgICAgICAgICAgICBpZiBBUk02NEUKICAgICAgICAgICAgICAg
ICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1h
cCArIChjb25zdGV4cHIgR2F0ZTo6bG9vcE9TUkVudHJ5KSAqIFB0clNpemUsIGEyCiAgICAgICAg
ICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcK
QEAgLTEwNTYsMTAgKzEwNjEsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBP
cEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9w
ZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2Rl
U3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAg
ICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlw
ZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdDJdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwg
dDApCiAgICAgICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIs
IHQzKQpAQCAtMTA2OSw3ICsxMDcwLDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2Rl
U3RydWN0LCBpbgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAg
b3JxIG51bWJlclRhZywgdDEKICAgICAgICAgc3RvcmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAg
ICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAg
ICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMTM0LDExICsxMTM1LDYgQEAgZW5k
KQogCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVB
cml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAot
CiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXpl
LCB0MCwgdDMpCiAgICAgbWV0YWRhdGEodDEsIHQyKQpAQCAtMTE0NiwxMiArMTE0MiwxMiBAQCBs
bGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3
ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0
MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5h
cnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgIHJl
dHVybih0MykKIC5vcE5lZ2F0ZU5vdEludDoKICAgICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5l
Z2F0ZVNsb3cKICAgICB4b3JxIDB4ODAwMDAwMDAwMDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0
aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxl
KE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAK
IC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTY0LDEwICsxMTYwLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0
b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29k
ZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0
YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJv
ZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0
YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAg
ICAgZW5kCi0KICAgICAgICAgZ2V0KG1fcmhzLCB0MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikK
ICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCkBAIC0xMTc3LDcg
KzExNjksNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAg
ICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwg
dDAsIC5zbG93LCB0MikKIAotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAg
ICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxl
SW50SW50LCB0NSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBA
IC0xMTg3LDEwICsxMTc5LDEwIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFt
ZSwgb3AKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51
bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQ
cm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bj
b2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0MikKICAgICAgICAgam1w
IC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUo
QXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0MikKICAgICAgICAgY2ky
ZHMgdDEsIGZ0MQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikK
QEAgLTEyMDQsOSArMTE5Niw5IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFt
ZSwgb3AKIAogICAgIC5vcDJOb3RJbnQ6CiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZp
bml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KLSAgICAgICAgZ2V0
KG1fZHN0LCB0MikKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBw
cm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQ
cm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDIpCisgICAg
ICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBu
dW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQpAQCAtMTUxOCw3ICsxNTEwLDcgQEAg
bGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWRfZGlyZWN0LAogZW5kKQogCiAjIFRoZSBi
YXNlIG9iamVjdCBpcyBleHBlY3RlZCBpbiB0MwotbWFjcm8gcGVyZm9ybUdldEJ5SURIZWxwZXIo
b3Bjb2RlU3RydWN0LCBtb2RlTWV0YWRhdGFOYW1lLCB2YWx1ZVByb2ZpbGVOYW1lLCBzbG93TGFi
ZWwsIHNpemUsIG1ldGFkYXRhLCByZXR1cm4pCittYWNybyBwZXJmb3JtR2V0QnlJREhlbHBlcihv
cGNvZGVTdHJ1Y3QsIG1vZGVNZXRhZGF0YU5hbWUsIHZhbHVlUHJvZmlsZU5hbWUsIHNsb3dMYWJl
bCwgc2l6ZSwgbWV0YWRhdGEsIHJldHVybiwgZG9BcnJheVByb2ZpbGUpCiAgICAgbWV0YWRhdGEo
dDIsIHQxKQogICAgIGxvYWRiICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6JW1vZGVNZXRhZGF0
YU5hbWUlLm1vZGVbdDJdLCB0MQogCkBAIC0xNTQ2LDcgKzE1MzgsNyBAQCBtYWNybyBwZXJmb3Jt
R2V0QnlJREhlbHBlcihvcGNvZGVTdHJ1Y3QsCiAub3BHZXRCeUlkQXJyYXlMZW5ndGg6CiAgICAg
YmJuZXEgdDEsIGNvbnN0ZXhwciBHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgsIC5vcEdldEJ5SWRV
bnNldAogICAgIG1vdmUgdDMsIHQwCi0gICAgYXJyYXlQcm9maWxlKCVvcGNvZGVTdHJ1Y3QlOjpN
ZXRhZGF0YTo6JW1vZGVNZXRhZGF0YU5hbWUlLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUs
IHQwLCB0MiwgdDUpCisgICAgZG9BcnJheVByb2ZpbGUodDAsIHQyLCB0NSwgdDEpCiAgICAgYnRp
eiB0MCwgSXNBcnJheSwgc2xvd0xhYmVsCiAgICAgYnRpeiB0MCwgSW5kZXhpbmdTaGFwZU1hc2ss
IHNsb3dMYWJlbAogICAgIGxvYWRDYWdlZEpTVmFsdWUoSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3Qz
XSwgdDAsIHQxKQpAQCAtMTU2OCw3ICsxNTYwLDEwIEBAIGVuZAogbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF9nZXRfYnlfaWQsIE9wR2V0QnlJZCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1l
dGFkYXRhLCByZXR1cm4pCiAgICAgZ2V0KG1fYmFzZSwgdDApCiAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZUNlbGwoc2l6ZSwgdDAsIHQzLCAub3BHZXRCeUlkU2xvdykKLSAgICBwZXJmb3JtR2V0
QnlJREhlbHBlcihPcEdldEJ5SWQsIG1fbW9kZU1ldGFkYXRhLCBtX3Byb2ZpbGUsIC5vcEdldEJ5
SWRTbG93LCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuKQorICAgIHBlcmZvcm1HZXRCeUlESGVscGVy
KE9wR2V0QnlJZCwgbV9tb2RlTWV0YWRhdGEsIG1fcHJvZmlsZSwgLm9wR2V0QnlJZFNsb3csIHNp
emUsIG1ldGFkYXRhLCByZXR1cm4sCisgICAgICAgIG1hY3JvIChjZWxsQW5kSW5kZXhpbmdUeXBl
LCBtZXRhZGF0YSwgc2NyYXRjaDEsIHNjcmF0Y2gyKQorICAgICAgICAgICAgYXJyYXlQcm9maWxl
KE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLCBjZWxsQW5kSW5kZXhpbmdUeXBl
LCBtZXRhZGF0YSwgc2NyYXRjaDEpCisgICAgICAgIGVuZCkKIAogLm9wR2V0QnlJZFNsb3c6CiAg
ICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfZ2V0X2J5X2lkKQpAQCAtMzAwMiw3ICsy
OTk3LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9vcGVuLCBPcAogCiAgICAg
bG9hZFZhcmlhYmxlKGdldCwgbV9pdGVyYXRvciwgdDMpCiAgICAgYnRxbnogdDMsIG5vdENlbGxN
YXNrLCAuaXRlcmF0b3JPcGVuR2VuZXJpY0dldE5leHRTbG93Ci0gICAgcGVyZm9ybUdldEJ5SURI
ZWxwZXIoT3BJdGVyYXRvck9wZW4sIG1fbW9kZU1ldGFkYXRhLCBtX25leHRQcm9maWxlLCAuaXRl
cmF0b3JPcGVuR2VuZXJpY0dldE5leHRTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVOZXh0QW5k
RGlzcGF0Y2gpCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck9wZW4sIG1fbW9k
ZU1ldGFkYXRhLCBtX25leHRQcm9maWxlLCAuaXRlcmF0b3JPcGVuR2VuZXJpY0dldE5leHRTbG93
LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVOZXh0QW5kRGlzcGF0Y2gsIG1hY3JvKGEsIGIsIGMsIGQp
IGVuZCkKIAogLml0ZXJhdG9yT3BlbkdlbmVyaWNHZXROZXh0U2xvdzoKICAgICBjYWxsU2xvd1Bh
dGgoX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9vcGVuX2dldF9uZXh0KQpAQCAtMzA2MSw3ICsz
MDU2LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9pdGVyYXRvcl9uZXh0LCBPcAogCiAgICAg
bG9hZFZhcmlhYmxlKGdldCwgbV92YWx1ZSwgdDMpCiAgICAgYnRxbnogdDMsIG5vdENlbGxNYXNr
LCAuZ2V0RG9uZVNsb3cKLSAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwg
bV9kb25lTW9kZU1ldGFkYXRhLCBtX2RvbmVQcm9maWxlLCAuZ2V0RG9uZVNsb3csIHNpemUsIG1l
dGFkYXRhLCBzdG9yZURvbmVBbmRKbXBUb0dldFZhbHVlKQorICAgIHBlcmZvcm1HZXRCeUlESGVs
cGVyKE9wSXRlcmF0b3JOZXh0LCBtX2RvbmVNb2RlTWV0YWRhdGEsIG1fZG9uZVByb2ZpbGUsIC5n
ZXREb25lU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlRG9uZUFuZEptcFRvR2V0VmFsdWUsIG1h
Y3JvKGEsIGIsIGMsIGQpIGVuZCkKIAogLmdldERvbmVTbG93OgogICAgIGNhbGxTbG93UGF0aChf
bGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX25leHRfZ2V0X2RvbmUpCkBAIC0zMDg2LDcgKzMwODEs
NyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wCiAgICAgIyBSZWxv
YWQgdGhlIG5leHQgcmVzdWx0IHRtcCBzaW5jZSB0aGUgZ2V0X2J5X2lkIGFib3ZlIG1heSBoYXZl
IGNsb2JiZXJlZCB0My4KICAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX3ZhbHVlLCB0MykKICAgICAj
IFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgaWYgdGhlIGl0ZXJhdG9yIHJlc3VsdCBpcyBhIGNlbGwg
aGVyZSBzaW5jZSB3ZSB3aWxsIGhhdmUgdGhyb3duIGFuIGVycm9yIGJlZm9yZS4KLSAgICBwZXJm
b3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV92YWx1ZU1vZGVNZXRhZGF0YSwgbV92
YWx1ZVByb2ZpbGUsIC5nZXRWYWx1ZVNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZVZhbHVlQW5k
RGlzcGF0Y2gpCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVyYXRvck5leHQsIG1fdmFs
dWVNb2RlTWV0YWRhdGEsIG1fdmFsdWVQcm9maWxlLCAuZ2V0VmFsdWVTbG93LCBzaXplLCBtZXRh
ZGF0YSwgc3RvcmVWYWx1ZUFuZERpc3BhdGNoLCBtYWNybyhhLCBiLCBjLCBkKSBlbmQpCiAKIC5n
ZXRWYWx1ZVNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfaXRlcmF0b3Jf
bmV4dF9nZXRfdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTE0MjAsNyArMTQyMCw4IEBAIGVuZAogCiBtYWNybyBjaGVja1N3aXRjaFRvSklUKGlu
Y3JlbWVudCwgYWN0aW9uKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGJhZGRp
cyBpbmNyZW1lbnQsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVF
eGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKKyAgICBsb2FkcCBDb2Rl
QmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MF0sIHQwCisgICAgYmFkZGlzIGluY3JlbWVu
dCwgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAg
ICBhY3Rpb24oKQogICAgIC5jb250aW51ZToKIGVuZApAQCAtMTUwMyw3ICsxNTA0LDggQEAgbWFj
cm8gcHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvYwogICAgIGNvZGVCbG9ja0dldHRl
cih0MSkKICAgICBjb2RlQmxvY2tTZXR0ZXIodDEpCiAgICAgaWYgbm90IChDX0xPT1Agb3IgQ19M
T09QX1dJTikKLSAgICAgICAgYmFkZGlzIDUsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3Vu
dGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDFdLCAuY29udGludWUK
KyAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDFdLCB0MAor
ICAgICAgICBiYWRkaXMgNSwgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBd
LCAuY29udGludWUKICAgICAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgICAgICBtb3ZlIGNmciwg
YTAKICAgICAgICAgICAgIG1vdmUgUEMsIGExCkBAIC0xNjE3LDE0ICsxNjE5LDE0IEBAIG1hY3Jv
IGZ1bmN0aW9uSW5pdGlhbGl6YXRpb24ocHJvZmlsZUFyZ1MKICAgICAjIG9wdGltYWwgd2F5IGZv
ciBhcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gZml2ZSByZWdpc3RlcnMgYXZhaWxh
YmxlCiAgICAgIyBmb3IgYXJiaXRyYXJ5IHVzZSBpbiB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgbG9h
ZGkgQ29kZUJsb2NrOjptX251bVBhcmFtZXRlcnNbdDFdLCB0MAotICAgIGFkZHAgLXByb2ZpbGVB
cmdTa2lwLCB0MCAjIFVzZSBhZGRpIGJlY2F1c2UgdGhhdCdzIHdoYXQgaGFzIHRoZSBwZWVwaG9s
ZQorICAgIGFkZHAgLXByb2ZpbGVBcmdTa2lwLCB0MAogICAgIGFzc2VydChtYWNybyAob2spIGJw
Z3RlcSB0MCwgMCwgb2sgZW5kKQogICAgIGJ0cHogdDAsIC5hcmd1bWVudFByb2ZpbGVEb25lCiAg
ICAgbG9hZHAgQ29kZUJsb2NrOjptX2FyZ3VtZW50VmFsdWVQcm9maWxlcyArIEZpeGVkVmVjdG9y
OjptX3N0b3JhZ2UgKyBSZWZDb3VudGVkQXJyYXk6Om1fZGF0YVt0MV0sIHQzCiAgICAgYnRweiB0
MywgLmFyZ3VtZW50UHJvZmlsZURvbmUgIyBXaGVuIHdlIGNhbid0IEpJVCwgd2UgZG9uJ3QgYWxs
b2NhdGUgYW55IGFyZ3VtZW50IHZhbHVlIHByb2ZpbGVzLgogICAgIG11bHAgc2l6ZW9mIFZhbHVl
UHJvZmlsZSwgdDAsIHQyICMgQWFhYWFoaGhoISBOZWVkIHN0cmVuZ3RoIHJlZHVjdGlvbiEKICAg
ICBsc2hpZnRwIDMsIHQwICMgb2Zmc2V0IG9mIGxhc3QgSlNWYWx1ZSBhcmd1bWVudHMgb24gdGhl
IHN0YWNrLgotICAgIGFkZHAgdDIsIHQzICMgcG9pbnRlciB0byBlbmQgb2YgVmFsdWVQcm9maWxl
IGFycmF5IGluIENvZGVCbG9jazo6bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuCisgICAgYWRkcCB0
MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gdGhlIHZhbHVl
IHByb2ZpbGUgYXJyYXkuCiAuYXJndW1lbnRQcm9maWxlTG9vcDoKICAgICBpZiBKU1ZBTFVFNjQK
ICAgICAgICAgbG9hZHEgVGhpc0FyZ3VtZW50T2Zmc2V0IC0gOCArIHByb2ZpbGVBcmdTa2lwICog
OFtjZnIsIHQwXSwgdDIKQEAgLTI1NjMsNiArMjU2NSwxNyBAQCBtYWNybyBub3RTdXBwb3J0ZWQo
KQogICAgIGVuZAogZW5kCiAKKworbWFjcm8gdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6
TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBV
bmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKworbWFjcm8gdXBkYXRlQmluYXJ5
QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9h
ZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRl
bXAKKyAgICBvcmggdHlwZSwgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAor
CiAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRoZSBYODZfNjRfV0lOIGNvbmRpdGlvbiBo
ZXJlLCBzaW5jZSBXRUJBU1NFTUJMWSBzaG91bGQgYWxyZWFkeSBiZSBmYWxzZSBvbiBXaW5kb3dz
CiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNzE2CiBpZiBX
RUJBU1NFTUJMWSBhbmQgbm90IFg4Nl82NF9XSU4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsMTAgQEAgcHVibGljOgogICAgIENhY2hlYWJs
ZUlkZW50aWZpZXIoKSA9IGRlZmF1bHQ7CiAKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlk
ZW50aWZpZXIgY3JlYXRlRnJvbUNlbGwoSlNDZWxsKiBpZGVudGlmaWVyKTsKLSAgICBzdGF0aWMg
aW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKENvZGVCbG9jayosIGNvbnN0IElkZW50aWZpZXImKTsKLSAgICBzdGF0aWMgaW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KENvZGVCbG9jayosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgY29uc3Qg
SWRlbnRpZmllciYpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAg
IHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAg
c3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgY29uc3RleHByIENhY2hlYWJs
ZUlkZW50aWZpZXIgY3JlYXRlRnJvbVJhd0JpdHModWludHB0cl90IHJhd0JpdHMpIHsgcmV0dXJu
IENhY2hlYWJsZUlkZW50aWZpZXIocmF3Qml0cyk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5l
cy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUs
MTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhD
b2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaSkKK3RlbXBsYXRlIDx0eXBl
bmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9j
a1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaSkKIHsKICAgICByZXR1cm4gY3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKGNvZGVCbG9jaywgaS5pbXBsKCkpOwog
fQogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4K
K2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGNv
ZGVCbG9jay0+aGFzSWRlbnRpZmllcih1aWQpKTsKICAgICByZXR1cm4gQ2FjaGVhYmxlSWRlbnRp
Zmllcih1aWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlw
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
ZFR5cGVzLmNwcAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FjaGVkVHlwZXMuaCIKIAorI2luY2x1ZGUg
IkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlQ2FjaGVFcnJvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5oIgpAQCAtMTkxOCw2ICsxOTE5LDggQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgbnVtVmFs
dWVQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFsdWVQcm9maWxlczsgfQogICAgIHVu
c2lnbmVkIG51bUFycmF5UHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bUFycmF5UHJvZmls
ZXM7IH0KKyAgICB1bnNpZ25lZCBudW1CaW5hcnlBcml0aFByb2ZpbGVzKCkgY29uc3QgeyByZXR1
cm4gbV9udW1CaW5hcnlBcml0aFByb2ZpbGVzOyB9CisgICAgdW5zaWduZWQgbnVtVW5hcnlBcml0
aFByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1VbmFyeUFyaXRoUHJvZmlsZXM7IH0KIAog
cHJpdmF0ZToKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7CkBAIC0xOTUyLDYg
KzE5NTUsOCBAQCBwcml2YXRlOgogCiAgICAgdW5zaWduZWQgbV9udW1WYWx1ZVByb2ZpbGVzOwog
ICAgIHVuc2lnbmVkIG1fbnVtQXJyYXlQcm9maWxlczsKKyAgICB1bnNpZ25lZCBtX251bUJpbmFy
eUFyaXRoUHJvZmlsZXM7CisgICAgdW5zaWduZWQgbV9udW1VbmFyeUFyaXRoUHJvZmlsZXM7CiAK
ICAgICBDYWNoZWRNZXRhZGF0YVRhYmxlIG1fbWV0YWRhdGE7CiAKQEAgLTIxNjAsNiArMjE2NSw4
IEBAIEFMV0FZU19JTkxJTkUgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2UKICAgICAsIG1fcmFy
ZURhdGEoY2FjaGVkQ29kZUJsb2NrLnJhcmVEYXRhKGRlY29kZXIpKQogICAgICwgbV92YWx1ZVBy
b2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1WYWx1ZVByb2ZpbGVzKCkpCiAgICAgLCBtX2FycmF5
UHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bUFycmF5UHJvZmlsZXMoKSkKKyAgICAsIG1fYmlu
YXJ5QXJpdGhQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVtQmluYXJ5QXJpdGhQcm9maWxlcygp
KQorICAgICwgbV91bmFyeUFyaXRoUHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bVVuYXJ5QXJp
dGhQcm9maWxlcygpKQogewogfQogCkBAIC0yMzM3LDYgKzIzNDQsOCBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgQ2FjaGVkQ29kZUJsb2NrPENvZGVCCiAgICAgbV9oYXNDaGVja3BvaW50cyA9IGNvZGVC
bG9jay5tX2hhc0NoZWNrcG9pbnRzOwogICAgIG1fbnVtVmFsdWVQcm9maWxlcyA9IGNvZGVCbG9j
ay5tX3ZhbHVlUHJvZmlsZXMuc2l6ZSgpOwogICAgIG1fbnVtQXJyYXlQcm9maWxlcyA9IGNvZGVC
bG9jay5tX2FycmF5UHJvZmlsZXMuc2l6ZSgpOworICAgIG1fbnVtQmluYXJ5QXJpdGhQcm9maWxl
cyA9IGNvZGVCbG9jay5tX2JpbmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgIG1fbnVtVW5h
cnlBcml0aFByb2ZpbGVzID0gY29kZUJsb2NrLm1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsK
IAogICAgIG1fbWV0YWRhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX21ldGFkYXRhLmdl
dCgpKTsKICAgICBtX3JhcmVEYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9yYXJlRGF0
YS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3
ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYg
RU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhP
cChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBv
cGVyYW5kKQogewotICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9h
cml0aFByb2ZpbGU7CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEu
bV9hcml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFT
U0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5o
CShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQog
ICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0
YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7
IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0
cnVjdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVj
dXRhYmxlQmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaAkocmV2aXNpb24gMjgyNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw2IEBAIGJvb2wg
Y2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihJbnQzMiwgZXZhbFRocmVzaG9s
ZE11bHRpcGxpZXIsIDEwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBtYXhp
bXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0aCwgMjU2LCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICBcCi0gICAgdihCb29sLCByYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2lu
dHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0
aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yQmFzZWxpbmUsIDEwMDAsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2tw
b2ludHNGb3JVcHBlclRpZXJzLCA1MDAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXApAQCAt
NTMyLDYgKzUzMSw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAg
dihCb29sLCB1c2VEYXRhSUMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2ws
IHVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYoQm9vbCwgdXNlRGF0YUlDU2hhcmluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAg
IHYoQm9vbCwgdXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZywgdHJ1ZSwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgXAogICAgIC8qIEZlYXR1cmUgRmxhZ3MgKi9cCiAgICAgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJl
dmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4
ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNyArMzk2LDkgQEAgdm9pZCBTY3Jp
cHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aQogICAgIGlmIChPcHRpb25zOjp2YWxpZGF0
ZUJ5dGVjb2RlKCkpCiAgICAgICAgIGNvZGVCbG9jay0+dmFsaWRhdGUoKTsKIAotICAgIGlmIChP
cHRpb25zOjp1c2VMTEludCgpKQorICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNl
bGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2Vs
aW5lQ29kZSkKKyAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29k
ZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBlbHNlIGlmIChPcHRpb25zOjp1
c2VMTEludCgpKQogICAgICAgICBzZXR1cExMSW50KGNvZGVCbG9jayk7CiAgICAgZWxzZQogICAg
ICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHJldmlzaW9uIDI4MjY3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRp
bWl6ZUFmdGVyV2FybVVwKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRU
aWVyc1VwVG9CQlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJl
c2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAg
c2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJt
VXAoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25z
Ojp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAg
ICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0
ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNo
b2xkUmVhY2hlZCgpCkBAIC02NSw5ICs2NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXpl
U29vbigpCiAgICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJR
KCkpCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJR
T3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9w
dGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXpl
U29vbigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0
aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAgICAgfQogCiAgICAgc3RydWN0IE9TUkVu
dHJ5RGF0YSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVy
VXBDb3VudC5jcHAJKHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21UaWVyVXBDb3VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogVGllclVwQ291bnQ6OlRpZXJVcENv
dW50KCkKIHsKLSAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0
aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9u
czo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKIH0KIAogVGllclVwQ291
bnQ6On5UaWVyVXBDb3VudCgpID0gZGVmYXVsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIGFmdGVyIHdhcm0t
dXAuIik7Ci0gICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdP
cHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQo
T3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAK
ICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKQEAgLTkwLDE0
ICs5MCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIG5leHQgaW52b2Nh
dGlvbi4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKDAsIG51bGxwdHIpOworICAgICAgICBz
ZXROZXdUaHJlc2hvbGQoMCk7CiAgICAgfQogCiAgICAgdm9pZCBvcHRpbWl6ZVNvb24odWludDMy
X3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgc29vbi4iKTsKICAg
ICAgICAgLy8gRklYTUU6IE5lZWQgYWRqdXN0bWVudCBvbmNlIHdlIGdldCBtb3JlIGluZm9ybWF0
aW9uIGFib3V0IHdhc20gZnVuY3Rpb25zLgotICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9u
czo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICBzZXRO
ZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkpOwogICAg
IH0KIAogICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9u
UmVzdWx0KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0JhZy5oCShyZXZpc2lvbiAyODI2NzUpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsNiArNjYsMjAgQEAgcHVibGljOgogICAgICAgICBvdGhlci5tX2hlYWQg
PSBudWxscHRyOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQmFnJiBv
cGVyYXRvcj0oQmFnPFQsIFU+JiYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodW53cmFwcGVk
SGVhZCgpID09IG90aGVyLnVud3JhcHBlZEhlYWQoKSkKKyAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKworICAgICAgICBCYWcgZGVzdHJveTsKKyAgICAgICAgZGVzdHJveS5tX2hlYWQgPSB1bndy
YXBwZWRIZWFkKCk7CisgICAgICAgIG1faGVhZCA9IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKKyAg
ICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgfQorCiAgICAgfkJhZygpCiAgICAgewogICAgICAgICBjbGVhcigpOwpJbmRleDogU291cmNl
L1dURi93dGYvUGFja2VkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFja2VkLmgJ
KHJldmlzaW9uIDI4MjY3NSkKKysrIFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xODYsNyArMTg2LDEwIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBUKiBvcGVyYXRv
ci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KLSAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7
IHJldHVybiAqZ2V0KCk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVID0gVD4KKyAgICB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc192b2lkX3Y8VT4sIFUmPjo6dHlwZSBvcGVy
YXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KKwogICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gIWdldCgpOyB9CiAKICAgICAvLyBUaGlzIGNvbnZlcnNpb24gb3BlcmF0
b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90aGVyIGlu
dGVnZXIgdHlwZXMuCkluZGV4OiBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHJldmlzaW9u
IDI4MjY3NSkKKysrIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMJKHdvcmtpbmcg
Y29weSkKQEAgLTc3NiwxNyArNzc2LDE4IEBAIGVuZAogCiAjIEZJWE1FOiBuZWVkIHRvIGZpeCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4NzAzIHRvIGVuYWJsZSB0
aGlzIG9uIExpbnV4L01JUFMuCiBkZWYgcnVuQnl0ZWNvZGVDYWNoZUltcGwob3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zLCAqYWRkaXRpb25hbEVudikKLSAgICBpZiAoJGhvc3RPUyA9PSAiZGFy
d2luIikKLSAgICAgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlIgotICAgIGVsc2lm
ICgkaG9zdE9TID09ICJsaW51eCIgJiYgJGFyY2hpdGVjdHVyZSAhPSAibWlwcyIpCi0gICAgICAg
IGZpbGVUZW1wbGF0ZSA9ICJieXRlY29kZS1jYWNoZVhYWFhYWCIKLSAgICBlbHNlCi0gICAgICAg
IHNraXAKLSAgICAgICAgcmV0dXJuCi0gICAgZW5kCisgICAgIyBPT1BTCisgICAgI2lmICgkaG9z
dE9TID09ICJkYXJ3aW4iKQorICAgICMgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hl
IgorICAgICNlbHNpZiAoJGhvc3RPUyA9PSAibGludXgiICYmICRhcmNoaXRlY3R1cmUgIT0gIm1p
cHMiKQorICAgICMgICAgZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlWFhYWFhYIgorICAg
ICNlbHNlCisgICAgIyAgICBza2lwCisgICAgIyAgICByZXR1cm4KKyAgICAjZW5kCiAKLSAgICBv
cHRpb25zID0gQkFTRV9PUFRJT05TICsgRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMgKyAkdGVzdFNwZWNpZmljUmVxdWlyZWRPcHRpb25zCi0gICAgYWRkUnVuQ29tbWFu
ZCgiYnl0ZWNvZGUtY2FjaGUiLCBbInNoIiwgKHBhdGhUb0hlbHBlcnMgKyAiYnl0ZWNvZGUtY2Fj
aGUtdGVzdC1oZWxwZXIuc2giKS50b19zLCBmaWxlVGVtcGxhdGUudG9fcywgKnZtQ29tbWFuZCwg
JGJlbmNobWFyay50b19zXSArIG9wdGlvbnMsIHNpbGVudE91dHB1dEhhbmRsZXIsIHNpbXBsZUVy
cm9ySGFuZGxlciwgKmFkZGl0aW9uYWxFbnYpCisgICAgI29wdGlvbnMgPSBCQVNFX09QVElPTlMg
KyBGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucyArICR0ZXN0U3BlY2lm
aWNSZXF1aXJlZE9wdGlvbnMKKyAgICAjYWRkUnVuQ29tbWFuZCgiYnl0ZWNvZGUtY2FjaGUiLCBb
InNoIiwgKHBhdGhUb0hlbHBlcnMgKyAiYnl0ZWNvZGUtY2FjaGUtdGVzdC1oZWxwZXIuc2giKS50
b19zLCBmaWxlVGVtcGxhdGUudG9fcywgKnZtQ29tbWFuZCwgJGJlbmNobWFyay50b19zXSArIG9w
dGlvbnMsIHNpbGVudE91dHB1dEhhbmRsZXIsIHNpbXBsZUVycm9ySGFuZGxlciwgKmFkZGl0aW9u
YWxFbnYpCiBlbmQKIAogZGVmIHJ1bkJ5dGVjb2RlQ2FjaGUoKm9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439113</attachid>
            <date>2021-09-23 18:09:42 -0700</date>
            <delta_ts>2021-09-24 10:16:19 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>550115</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MzAxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkBAIC0xOTg1LDE0ICsxOTg1LDEwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzL3Nl
dHRlcnMuCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsOwogCisKICAg
ICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxjdWxhdGlvbnMgb2Ygd2hl
dGhlciBvciBub3Qgd2UncmUgYW4KICAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRsaW5nIGNhbGwg
c2l0ZS4KLSAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlOwotI2lm
IENQVShBUk02NCkKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAg
ICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0j
ZW5kaWYKLSAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3Rh
dGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChleHRyYVJlZ2lz
dGVyc1RvUHJlc2VydmUpOworICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3Rh
dGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
KCk7CiAKICAgICAgICAgYXV0byByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwg
PSBbJl0oQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlJiBzcGlsbFN0YXRlLCBib29s
IGNhbGxIYXNSZXR1cm5WYWx1ZSkgewogICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZG9udFJlc3Rv
cmU7CkBAIC0yMDc5LDggKzIwNzUsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChB
Y2Nlc3NHZW5lCiAgICAgICAgICAgICBBU1NFUlQoIShudW1iZXJPZlJlZ3NGb3JDYWxsICUgc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkpOwogICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZC
eXRlc0ZvckNhbGwgPSBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKTsKIAotICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51
bWJlck9mQnl0ZXNGb3JDYWxsID0KLSAgICAgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsK
IAogICAgICAgICAgICAgaml0LnN1YlB0cigKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLApAQCAtMjEzOCw2ICsy
MTMzLDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogCiAgICAg
ICAgICAgICBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0ID0gKGNvZGVCbG9jay0+c3RhY2tQb2ludGVy
T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSAtIHN0YXRlLnByZXNlcnZlZFJldXNlZFJlZ2lz
dGVyU3RhdGUubnVtYmVyT2ZCeXRlc1ByZXNlcnZlZCAtIHNwaWxsU3RhdGUubnVtYmVyT2ZTdGFj
a0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uOwogICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXQpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKICAgICAgICAgICAgIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlID0gaXNHZXR0ZXIoKTsKICAg
ICAgICAgICAgIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRl
LCBjYWxsSGFzUmV0dXJuVmFsdWUpOwogCkBAIC0yMjY0LDEyICsyMjYwLDcgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogCiAgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKIAotICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNU
b1ByZXNlcnZlOwotI2lmIENQVShBUk02NCkKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPnVz
ZURhdGFJQygpKQotICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQo
QVJNNjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgotICAgICAgICAgICAgYXV0byBzcGlsbFN0YXRl
ID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0
aW9ucyhleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUpOworICAgICAgICAgICAgYXV0byBzcGlsbFN0
YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhj
ZXB0aW9ucygpOwogCiAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
JnZtKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24o
dm0pOwpAQCAtMjM2NCwxMCArMjM1NSw2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBs
KEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1Rv
UHJlc2VydmU7CiAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChi
YXNlR1BSKTsKICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KHZh
bHVlUmVncyk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAgICAgIGlmIChjb2RlQmxvY2st
PnVzZURhdGFJQygpKQotICAgICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2Vy
dmUuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZl
TGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHJldmlzaW9u
IDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3Qu
cmIJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCBvcF9ncm91cCA6UHJvZmlsZWRC
aW5hcnlPcCwKICAgICAgICAgb3BlcmFuZFR5cGVzOiBPcGVyYW5kVHlwZXMsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQor
ICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9n
cm91cCA6VmFsdWVQcm9maWxlZEJpbmFyeU9wLApAQCAtMzUzLDcgKzM1Myw3IEBAIG9wX2dyb3Vw
IDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgICAgICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3Rl
ciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg2LDcgKzM4Niw3IEBAIG9wIDpuZWdhdGUsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewot
ICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFBy
b2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDpub3QsCkBAIC00NzgsNiAr
NDc4LDcgQEAgb3AgOmdldF9ieV9pZCwKICAgICBtZXRhZGF0YTogewogICAgICAgICBtb2RlTWV0
YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmls
ZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgfQogCiBvcCA6Z2V0
X2J5X2lkX3dpdGhfdGhpcywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZp
c2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVP
cGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjggQEAg
VmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JJbXBsKEJ5dGVjbwogICAgICAgICByZXR1cm4g
Jm1ldGFkYXRhLm1fcHJvZmlsZTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
dWludHB0cl90IHZhbHVlUHJvZmlsZU9mZnNldEZvcih1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRleCk7CisgICAgaWYgY29uc3RleHBy
IChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3Jfb3BlbikgeworICAgICAgICBzd2l0
Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpzeW1i
b2xDYWxsOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmls
ZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNv
ZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiBj
b25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CisgICAg
ICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5l
eHQ6OmNvbXB1dGVOZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRS
ZXN1bHRQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJl
dHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRG9uZVByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIHJldHVybiBC
eXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpOworfQorCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZU1ldGFkYXRhPgogYm9vbCBoYXNWYWx1ZVByb2ZpbGVGb3IoQnl0ZWNvZGVN
ZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZp
c2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJ
bmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDExICsxMTQsNiBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7CiB9
CiAKLUNvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFz
dFBhdGhTdGFydCgpCi17Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0lu
dGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwotfQotCiBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKCFpc0RhdGFJQygpKTsKQEAgLTIyNSw2ICsyMjAsMTIgQEAgdm9pZCBDYWxs
TGlua0luZm86OnNldE1heEFyZ3VtZW50Q291bnRJbgogICAgIG1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSB2YWx1ZTsKIH0KIAorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChpc0RpcmVjdCgpICYmIGlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQpOwor
fQorCiB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRvIGhh
bmRsZVNwZWNpZmljQ2FsbGVlID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKQEAgLTI5OCwy
MyArMjk5LDExIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGMKICAg
ICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1
c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1Rh
aWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewotICAg
IHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7Ci0gICAgaWYgKGlzRGF0YUlDKCkpIHsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJl
Zyk7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwg
Y2FsbExpbmtJbmZvR1BSKTsKLSAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBj
YWxsTGlua0luZm9HUFI7Ci0gICAgfQotCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0Lmxh
YmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHNsb3dQYXRoOwogCi0gICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICBpZiAodXNl
RGF0YUlDID09IFVzZURhdGFJQzo6WWVzKSB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
aml0LnNjcmF0Y2hSZWdpc3RlcigpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7
IAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKQEAgLTMyMyw3ICsz
MTIsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAg
ICAgICBnb1BvbHltb3JwaGljID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25a
ZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5bW9ycGhpY0Nh
bGxlZU1hc2spKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsK
ICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgZ29Qb2x5bW9y
cGhpYy5saW5rKCZqaXQpOyAvLyBQb2x5bW9ycGhpYyBzdHViIGhhbmRsZXMgdGFpbCBjYWxsIHN0
YWNrIHByZXAuCiAgICAgICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Y2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkpLCBK
U0VudHJ5UHRyVGFnKTsKQEAgLTMzNiwxNCArMzI1LDE2IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQ
dHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVj
aywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKSk7CiAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAg
ICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwog
ICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAg
ICAgICAgICAgIHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT51LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51
LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNTMsMTMg
KzM0NCwzNCBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUMgdXNlRGF0YUlDKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwotICAg
IHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIs
IHVzZURhdGFJQywgbnVsbHB0cik7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKwor
ICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
b0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHUu
ZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKworICAg
IHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0lu
Zm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxG
YXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1Rh
aWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBj
YWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsK
KyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQ
YXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgVXNlRGF0YUlDOjpO
bywgaXNUYWlsQ2FsbCgpLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworfQorCitNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcp
OworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBj
YWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK01h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENh
bGwpKTsKIH0KIAogdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxs
SGVscGVycyYgaml0KQpAQCAtMzY5LDE3ICszODEsMzIgQEAgdm9pZCBDYWxsTGlua0luZm86OmVt
aXRTbG93UGF0aChWTSYgdm0sIAogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRy
eVB0clRhZyk7CiB9CiAKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0m
LCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBqaXQu
bW92ZShjYWxsTGlua0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVz
dGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5p
dGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxM
aW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAg
ICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2Rl
SW5kZXgpOworICAgIHNldFVwQ2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2Fs
bGVlR1BSKTsKKyAgICBtX2RvbmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVM
b2NhdGlvbjsKKyAgICBpZiAodW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkg
eworICAgICAgICAvLyBGSVhNRTogSXQnZCBiZSBuaWNlIGlmIHRoaXMganVzdCB3ZXJlIGEgcmVm
Y291bnRlZCBkYXRhIHN0cnVjdHVyZS4KKyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFr
ZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1l
U2h1ZmZsZURhdGEpOworICAgIH0KKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7
CisgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAg
c2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKIHZv
aWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7CiAKICAgICBzZXRVc2VzRGF0YUlD
cyhVc2VEYXRhSUM6Ok5vKTsKIAotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgp
OwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgYXV0byBjYWxsID0gaml0Lm5l
YXJDYWxsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewogICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwpAQCAtMzk3LDcgKzQyNCw3IEBA
IHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIGF1dG8gZmFz
dFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOworICAgICAgICB1
LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CiAgICAgfSk7CiAKICAgICAvLyAtIElmIHdlJ3JlIG5v
dCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24g
MjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0MywxMSBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogZW51
bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogc3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogCitz
dHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87CisKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1Ymxp
YyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiBwdWJsaWM6Ci0gICAgZW51
bSBDYWxsVHlwZSB7CisgICAgZW51bSBDYWxsVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25l
LAogICAgICAgICBDYWxsLAogICAgICAgICBDYWxsVmFyYXJncywKQEAgLTE2NSw2ICsxNjcsOCBA
QCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAorICAg
IHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CisKICAgICBHUFJSZWcgY2FsbGVl
R1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVHUFI7IH0KICAgICAKICAgICBlbnVtIGNsYXNz
IFVzZURhdGFJQyA6IHVpbnQ4X3QgewpAQCAtMTczLDEzICsxNzcsMTYgQEAgcHVibGljOgogICAg
IH07CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0
aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxs
KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxD
YWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNF
RF9SRVRVUk47CiBwdWJsaWM6CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBl
bWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNF
RF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkg
V0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFp
bENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAg
dm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7CiAgICAgdm9pZCBlbWl0RGly
ZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4g
cHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVs
cGVycyYpOworICAgIHN0YXRpYyB2b2lkIGVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwogICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1
YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVz
ZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURhdGFJQzo6WWVzOyB9CkBAIC0yMDMsNyArMjEw
LDYgQEAgcHVibGljOgogICAgICAgICBtX2FsbG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOwog
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwog
CkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9zbG93U3R1YiA9IG51bGxw
dHI7CiAgICAgfQogCi0gICAgSklUU3R1YlJvdXRpbmUqIHNsb3dTdHViKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3Nsb3dTdHViLmdldCgpOwotICAgIH0KLQogICAgIGJvb2wgc2Vlbk9uY2Uo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faGFzU2VlblNob3VsZFJlcGF0Y2g7CkBAIC0zMDgs
OSArMzA5LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+
KG1fY2FsbFR5cGUpOwogICAgIH0KIAotICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAmbV9tYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIH0K
IAogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTM4MSw3
ICszODIsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKKworICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKKwogICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwog
ICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC0zOTcsNiArNDAwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0
aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJU
YWc+IG1fY2FsbGVlTG9jYXRpb247CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoU3RhcnQ7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CiAgICAgICAgIH0gY29kZUlD
OwogICAgIH0gdTsKIApAQCAtNDI0LDYgKzQyOCwxMyBAQCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRD
YWxsTGlua0luZm9Db2RlT3JpCiAgICAgcmV0dXJuIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCk7
CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbyB7CisgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHksIG9ubHkgdXNlZCBieSBiYXNlbGluZSwgc28gdGhp
cyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBDb2RlT3JpZ2luLgorICAgIENhbGxMaW5rSW5mbzo6
Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gZG9uZUxvY2F0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0
YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307CisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw4IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAgIEFTU0VSVChz
b3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFt
ZXRlcnMoKSk7CisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUt
PmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKICAgICAKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgp
LmFkZCh0aGlzKTsKIH0KQEAgLTMxOCw3ICszMjAsNiBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBDCiAgICAgZmluaXNoQ3JlYXRpb25Db21tb24odm0pOwogCiAgICAg
b3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGppdEFmdGVyV2FybVVwKCk7CiAKICAgICBpZiAo
b3RoZXIubV9yYXJlRGF0YSkgewogICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7
CkBAIC0zNTksNyArMzYwLDkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1
cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFt
ZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7Ci0gICAgCisKKyAgICBt
X2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNvdW50
ZXIoKTsKKwogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQogCkBAIC0z
NzAsMTAgKzM3MywxMyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSog
CiAvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5rZWQgYnl0ZWNvZGUgZ2VuZXJhdGlv
bi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdlbmVyYXRlIGNvbnRyb2wKIC8vIGZs
b3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgd2UgcmVs
eSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2FtZSBmb3IKIC8vIGFsbCB0aGUgQ29k
ZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2UgcmVseSBvbiB0aGlzIGZhY3QgYnkg
Y2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKLS8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9j
ay4KKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4gQWxzbywgQmFzZWxpbmUgSklUIGNvZGUg
aXMgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5rZWRDb2RlQmxvY2ss
CisvLyBzbyB0aGUgYnl0ZWNvZGUgbXVzdCByZW1haW4gdGhlIHNhbWUgYmV0d2VlbiBDb2RlQmxv
Y2tzIHNoYXJpbmcgYW4gVW5saW5rZWRDb2RlQmxvY2suCiBib29sIENvZGVCbG9jazo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlu
a2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKICAgICBKU1Njb3BlKiBzY29wZSkKIHsK
KyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7IC8vIFdlIG5lZWQgdG8gc2V0IHVwIG91ciB2
YWx1ZSBwcm9maWxlIHBvaW50ZXJzLgorCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIApAQCAtNDcxLDYgKzQ3NywyMSBAQCBib29s
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFrOyBcCiAg
ICAgfQogCisgICAgdW5zaWduZWQgYmluYXJ5UHJvZmlsZUluZGV4ID0gMDsKKyAgICB1bnNpZ25l
ZCB1bmFyeVByb2ZpbGVJbmRleCA9IDA7CisjZGVmaW5lIExJTktfV0lUSF9CSU5BUllfQVJJVEhf
UFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJWkVf
TUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3Vu
bGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJpbmFyeVByb2ZpbGVJbmRleCsrKTsgXAor
ICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFMSVpFX01F
VEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxp
bmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKHVuYXJ5UHJvZmlsZUluZGV4KyspOyBcCisgICAg
ICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0
cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMsMTQgKzU1NCwxNCBAQCBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQ
cm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTkso
T3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAg
IExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcElu
YykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9Q
Uk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BN
dWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAg
ICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktf
V0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5B
UllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2OSw3ICs3OTAs
NiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgLy8gcmVs
eSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRlZCB0
byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUgYWNj
dXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0ZXJXYXJt
VXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgLy8gSWYgdGhlIGNvbmN1cnJlbnQg
dGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4gY29tcHV0ZSBpdCBo
ZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAgLTc5Myw2ICs4MTMsNzYgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3duZXJFZGdlLnNldCh2bSwg
dGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZtLCB0aGlzKSk7CiB9CiAK
K3ZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShSZWY8QmFzZWxp
bmVKSVRDb2RlPiBqaXRDb2RlKQoreworICAgIHNldEpJVENvZGUoaml0Q29kZS5jb3B5UmVmKCkp
OworCisgICAgeworICAgICAgICBjb25zdCBhdXRvJiBqaXRDb2RlTWFwID0gdGhpcy0+aml0Q29k
ZU1hcCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mRXhjZXB0aW9u
SGFuZGxlcnMoKTsgKytpKSB7CisgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IGV4
Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVt
LzM5NDMzMzE4Pi4KKyAgICAgICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IGppdENvZGVNYXAu
ZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBhdXRvJiBqaXREYXRhID0gZW5z
dXJlSklURGF0YShsb2NrZXIpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdERhdGEubV9q
aXRDb25zdGFudFBvb2wuaXNFbXB0eSgpKTsKKyAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50
UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCkp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGppdENvZGUtPm1fY29uc3RhbnRQb29s
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvIGVudHJ5ID0gaml0Q29kZS0+bV9jb25z
dGFudFBvb2wuYXQoaSk7CisgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5LnR5cGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3Q6CisgICAgICAg
ICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IG1fZ2xvYmFsT2JqZWN0Lmdl
dCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbzogeworICAgICAgICAgICAgICAgIFVubGlua2VkQ2Fs
bExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9ICpzdGF0aWNfY2FzdDxVbmxpbmtlZENh
bGxMaW5rSW5mbyo+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAgIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0RGF0YS5tX2NhbGxMaW5rSW5mb3MuYWRkKENvZGVP
cmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+aW5pdGlhbGl6ZURhdGFJQyh2bSgpLCB1bmxpbmtlZENhbGxMaW5r
SW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBq
aXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gY2FsbExpbmtJbmZvOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbyA9ICpzdGF0aWNfY2FzdDxVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKj4oZW50cnkucGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gaml0RGF0YS5tX3N0dWJJbmZvcy5hZGQo
dW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlLCBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8u
Ynl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0aWFsaXplRnJv
bVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8odGhpcywgdW5saW5rZWRTdHViSW5mbyk7CisgICAg
ICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IHN0dWJJbmZvOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRD
b25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbDogeworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZC5nZXQoKSk7
CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9u
RGVjbChpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByOiB7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRy
eS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQ
b29sW2ldID0gZnVuY3Rpb25FeHByKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRj
aCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICBjYXNlIE1vZHVsZUNv
ZGU6CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQg
PSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAgICAg
IC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRl
Y3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhh
dCBvYnNlcnZhdGlvbi4KKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5s
aW5lKGNhcGFiaWxpdHlMZXZlbCgpKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24odGhpcyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChqaXRDb2RlLT5tX2lzU2hhcmVhYmxl
ICYmICF1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlICYmIE9wdGlv
bnM6OnVzZUJhc2VsaW5lSklUQ29kZVNoYXJpbmcoKSkKKyAgICAgICAgdW5saW5rZWRDb2RlQmxv
Y2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSA9IFdURk1vdmUoaml0Q29kZSk7Cit9CisKIENv
ZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC04NzMsNiAr
OTYzLDI3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IH0KIAorYm9vbCBDb2RlQmxvY2s6OmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2so
VmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKK3sKKyAgICAvLyBUaGlzIG5lZWRzIHRvIGNvcnJl
c3BvbmQgdG8gd2hhdCB3ZSBkbyBpbnNpZGUgc2V0Q29uc3RhbnRSZWdpc3RlcnMuCisgICAgc3dp
dGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bihyZWcpKSB7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6Cisg
ICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZToKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOiB7CisgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSB1bmxpbmtlZENvZGVCbG9jaygpLT5nZXRDb25zdGFudChyZWcp
OworICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAg
ICAgaWYgKGNlbGwtPmluaGVyaXRzPFN5bWJvbFRhYmxlPih2bSgpKSB8fCBjZWxsLT5pbmhlcml0
czxKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4odm0oKSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKwogVmVjdG9yPHVuc2lnbmVkPiBDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0
ZXJzKGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywg
Y29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtODkyLDYg
KzEwMDMsNyBAQCBWZWN0b3I8dW5zaWduZWQ+IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSCiAgICAg
ICAgIHN3aXRjaCAocmVwcmVzZW50YXRpb24pIHsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb25zdGFudCA9IGds
b2JhbE9iamVjdC0+bGlua1RpbWVDb25zdGFudChzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50
Pihjb25zdGFudC5hc0ludDMyQXNBbnlJbnQoKSkpOworICAgICAgICAgICAgQVNTRVJUKGNvbnN0
YW50LmlzQ2VsbCgpKTsgLy8gVW5saW5rZWQgQmFzZWxpbmUgSklUIHJlcXVpcmVzIHRoaXMuCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
Ok90aGVyOgogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoK
QEAgLTE1MTQsNyArMTYyNiw3IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJsb2NrOjplbnN1
cmVKSVQKICAgICByZXR1cm4gKm1faml0RGF0YTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmZpbmFs
aXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklU
SW5saW5lQ2FjaGVzKCkKIHsKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQo
KSkgewogICAgICAgICBmb3IgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+
bV9jYWxsTGlua0luZm9zKQpAQCAtMTUyNSw2ICsxNjM3LDIwIEBAIHZvaWQgQ29kZUJsb2NrOjpm
aW5hbGl6ZUJhc2VsaW5lSklUSW5saW4KICAgICAgICAgICAgIHN0dWJJbmZvLT52aXNpdFdlYWtS
ZWZlcmVuY2VzKGxvY2tlciwgdGhpcyk7CiAgICAgICAgIH0KICAgICB9CisKKworI2lmIEFTU0VS
VF9FTkFCTEVECisgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewor
ICAgICAgICAvLyBWZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0
aGV5J3JlIHZpcnR1YWwgY2FsbHMuCisgICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8gOiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5t
X2V2YWxDYWxsTGlua0luZm9zKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlu
a0luZm8tPmlzTGlua2VkKCkpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5mb3JFYWNoRGVw
ZW5kZW50Q2VsbChbXSAoSlNDZWxsKikgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgfQorI2Vu
ZGlmCiB9CiAjZW5kaWYKIApAQCAtMTUzNCw0NiArMTY2MCw0NyBAQCB2b2lkIENvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwog
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29sIGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9
IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwotICAgIG1faXNFbGlnaWJsZUZvckxMSW50
RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhl
Y3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAot
ICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBj
b2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAh
bV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAm
JiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkg
ewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9v
c3JFeGl0Q291bnRlcikgewotICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnRE
b3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKLSAg
ICAgICAgICAgICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7Ci0gICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRl
clRodW5rKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
dW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5k
bGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9u
SGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9
ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENv
ZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRj
aChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKLQotICAgICAgICAg
ICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBp
biBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwotICAgICAgICAg
ICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVp
dGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKLSAgICAg
ICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50
aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgotICAgICAgICAgICAgICAgICAgICByZXNldEpJ
VERhdGEoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9p
c0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0jZW5kaWYKKy8vIE9PUFM6IHJlY29uY2lsZSB0aGlzCisvLyNpZiBFTkFC
TEUoSklUKQorLy8gICAgYm9vbCBpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBtX2lzRWxp
Z2libGVGb3JMTEludERvd25ncmFkZTsKKy8vICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdy
YWRlID0gZmFsc2U7CisvLyAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBleGVjdXRp
bmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0CisvLyAg
ICAvLyB0byBkaXNjYXJkIGJhc2VsaW5lIEpJVCBjb2RlIGFuZCByZWluc3RhbGwgTExJbnQgY29k
ZSB0byBzYXZlIEpJVCBtZW1vcnkuCisvLyAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAh
bV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAm
JiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkg
eworLy8gICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXpl
ZFJlcGxhY2VtZW50KCkpIHsKKy8vICAgICAgICAgICAgaWYgKCFvcHRpbWl6ZWRDb2RlQmxvY2st
Pm1fb3NyRXhpdENvdW50ZXIpIHsKKy8vICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9y
TExJbnREb3duZ3JhZGUpIHsKKy8vICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGUgPSBudWxs
cHRyOworLy8gICAgICAgICAgICAgICAgICAgIExMSW50OjpzZXRFbnRyeXBvaW50KHRoaXMpOwor
Ly8gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBl
OjpJbnRlcnByZXRlclRodW5rKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3VubGlua2VkQ29kZS0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygp
OyBpKyspIHsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVy
SW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIo
aSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9y
YXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKKy8vICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byYgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25zKCkuYXQodW5saW5rZWRIYW5kbGVy
LnRhcmdldCkucHRyKCk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlh
bGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsK
Ky8vICAgICAgICAgICAgICAgICAgICB9CisvLworLy8gICAgICAgICAgICAgICAgICAgIHVubGlu
a0luY29taW5nQ2FsbHMoKTsKKy8vCisvLyAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBzYWZl
IHRvIGNsZWFyIHRoZXNlIG91dCBoZXJlIGJlY2F1c2UgaW4gZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkgYWxsIGNvbXBpbGVyIHRocmVhZHMKKy8vICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2Fm
ZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIg
Ynl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKKy8vICAgICAgICAgICAgICAgICAgICAvLyBw
YXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0aGUgdmFyaW91
cyAqaW5mb3MuCisvLyAgICAgICAgICAgICAgICAgICAgcmVzZXRKSVREYXRhKCk7CisvLyAgICAg
ICAgICAgICAgICB9IGVsc2UKKy8vICAgICAgICAgICAgICAgICAgICBtX2lzRWxpZ2libGVGb3JM
TEludERvd25ncmFkZSA9IHRydWU7CisvLyAgICAgICAgICAgIH0KKy8vICAgICAgICB9CisvLyAg
ICB9CisvLworLy8jZW5kaWYKICAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJl
dGVkKGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAog
I2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQotICAgICAgICBmaW5hbGl6ZUJh
c2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7CisgICAgICAgIGZpbmFsaXplSklUSW5saW5lQ2FjaGVz
KCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTU5NCw3ICsxNzIxLDcgQEAg
dm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICBjYXNlIEpJ
VFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2Ug
SklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4
ZWN1dGVDb3VudGVyLmNvdW50KCk7CisgICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRl
Q291bnRlci0+Y291bnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5
cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVy
LmNvdW50KCk7CkBAIC0xNjc1LDMwICsxODAyLDYgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVC
bG9jazo6YWRkU3R1YkluZgogICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHVi
SW5mb3MuYWRkKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pOwogfQogCi1KSVRBZGRJQyogQ29kZUJs
b2NrOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUTXVsSUMq
IENvZGVCbG9jazo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUp
Ci17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBl
bnN1cmVKSVREYXRhKGxvY2tlcikubV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJ
VFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBy
ZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOwot
fQotCi1KSVROZWdJQyogQ29kZUJsb2NrOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsK
LSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fbmVnSUNzLmFkZChhcml0aFByb2Zp
bGUpOwotfQotCiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9s
b2NrKTsKQEAgLTMxMzMsNyArMzIzNiw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdp
c3RlckNvdW50KCkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVDoKLSAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOwor
ICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRD
b2RlQmxvY2soKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklU
KQpAQCAtMzM0OSwxMyArMzQ1MiwxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6
YmluYXJ5QXJpCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3Bf
YWRkOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+
YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVy
biBwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2Fz
ZSBvcF9zdWI6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMp
Lm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4g
JnBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAg
cmV0dXJuIHBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAg
ICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMzY3LDExICszNDcwLDExIEBA
IFVuYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2gg
KHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAm
cGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAg
ICByZXR1cm4gcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OwogICAgIGNhc2Ugb3BfaW5jOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRh
ZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAg
ICAgcmV0dXJuICZwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFBy
b2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzQ3MiwyMiAr
MzU3NSwxNiBAQCB2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiB9CiAK
ICNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0
ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJiBtYXApIAoteyAKLSAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1f
cGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1hcCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8Q29k
ZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW5kUEModm9pZCogcGMpCiB7CisgICAgaWYgKGF1dG8qIHBj
VG9Db2RlT3JpZ2luTWFwID0gbV9qaXRDb2RlLT5wY1RvQ29kZU9yaWdpbk1hcCgpKSB7CisgICAg
ICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBwY1RvQ29kZU9y
aWdpbk1hcC0+ZmluZFBDKHBjKSkKKyAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAg
IH0KKwogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwog
ICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICAg
ICAgaWYgKGppdERhdGEtPm1fcGNUb0NvZGVPcmlnaW5NYXApIHsKLSAgICAgICAgICAgICAgICBp
ZiAoc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gaml0RGF0YS0+bV9wY1Rv
Q29kZU9yaWdpbk1hcC0+ZmluZFBDKHBjKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
ZGVPcmlnaW47Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgICAg
ICBpZiAoc3R1YkluZm8tPmNvbnRhaW5zUEMocGMpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPihzdHViSW5mby0+Y29kZU9yaWdpbik7CkBAIC0z
NTIxLDI4ICszNjE4LDE0IEBAIHN0ZDo6b3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2Nr
OjoKICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKIH0KIAotaW50MzJfdCBDb2RlQmxvY2s6OnRo
cmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKLXsKLSAgICBzd2l0Y2ggKHVubGlua2Vk
Q29kZUJsb2NrKCktPmRpZE9wdGltaXplKCkpIHsKLSAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVy
bWluYXRlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkOwotICAgIGNhc2UgVHJpU3RhdGU6OkZh
bHNlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkICogNDsKLSAgICBjYXNlIFRyaVN0YXRlOjpU
cnVlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8gMjsKLSAgICB9Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRocmVzaG9sZDsKLX0KLQotdm9pZCBDb2RlQmxvY2s6
OmppdEFmdGVyV2FybVVwKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKIHsKLSAgICBtX2xs
aW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25z
Ojp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1
dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQodW5saW5rZWRDb2RlQmxvY2soKS0+dGhyZXNob2xk
Rm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOwogfQogCi12b2lk
IENvZGVCbG9jazo6aml0U29vbigpCit2b2lkIENvZGVCbG9jazo6aml0TmV4dEludm9jYXRpb24o
KQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xk
Rm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOworICAgIG1fbGxp
bnRFeGVjdXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwogfQogCiBib29sIENv
ZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdApAQCAtMzU4OCwy
OCArMzY3MSw4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRvdWJs
ZSBudW1TdWJzID0gMC4wOwogICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKLSAgICBh
dXRvIGNvdW50SUNzID0gWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICBpZiAo
YXV0byogaml0RGF0YSA9IGNvZGVCbG9jay0+bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAg
ICBmb3IgKEpJVEFkZElDKiBhZGRJQyA6IGppdERhdGEtPm1fYWRkSUNzKSB7Ci0gICAgICAgICAg
ICAgICAgbnVtQWRkcysrOwotICAgICAgICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+
Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChKSVRNdWxJQyog
bXVsSUMgOiBqaXREYXRhLT5tX211bElDcykgewotICAgICAgICAgICAgICAgIG51bU11bHMrKzsK
LSAgICAgICAgICAgICAgICB0b3RhbE11bFNpemUgKz0gbXVsSUMtPmNvZGVTaXplKCk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lDIDogaml0RGF0YS0+
bV9uZWdJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1OZWdzKys7Ci0gICAgICAgICAgICAgICAg
dG90YWxOZWdTaXplICs9IG5lZ0lDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBmb3IgKEpJVFN1YklDKiBzdWJJQyA6IGppdERhdGEtPm1fc3ViSUNzKSB7Ci0gICAg
ICAgICAgICAgICAgbnVtU3VicysrOwotICAgICAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBz
dWJJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8gY291
bnRJQ3MgPSBbJl0gKENvZGVCbG9jayopIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8g
cmUtaW1wbGVtZW50IHRoaXMgdXNpbmcgSklUQ29kZS4KICAgICB9OwogICAgIGhlYXAoKS0+Zm9y
RWFjaENvZGVCbG9jayhjb3VudElDcyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQs
OSBAQCBjbGFzcyBKU01vZHVsZUVudmlyb25tZW50OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogY2xhc3MgTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
OwogY2xhc3MgTWV0YWRhdGFUYWJsZTsKLWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3Mg
UmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJh
c2VsaW5lSklUQ29kZTsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIo
Q29kZUJsb2NrUmFyZURhdGEpOwogCkBAIC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1l
dGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdl
dCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNp
Z25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApA
QCAtMTY3LDcgKzE2OSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0
dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRt
cHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4g
Jm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJh
bWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0
ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYg
KzIzMyw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRz
KCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlu
bGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3
ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2Rl
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEw
MTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdl
dENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19j
YXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2OCwyMyArMjU5LDIxIEBAIHB1YmxpYzoKICNpZiBF
TkFCTEUoSklUKQogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNU
X0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogCiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAg
ICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7Ci0gICAgICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJ
Q3M7Ci0gICAgICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7Ci0gICAgICAgIEJhZzxKSVRTdWJJ
Qz4gbV9zdWJJQ3M7CiAgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsK
ICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGlu
ZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxM
aW5rZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5
bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAgICAgIEZp
eGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBG
aXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2lu
TWFwOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAg
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAg
ICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+
IG1faml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklU
Q29uc3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29u
c3RhbnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxp
bmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERh
dGEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAo
TElLRUxZKG1faml0RGF0YSkpCkBAIC0yOTMsMjIgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAg
ICAgSklURGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7
CiAKLSAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAg
SklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lD
KiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRT
dWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdl
bmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVEFkZElDKiBh
ZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJ
Qyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRN
dWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5h
cnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9
Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46
OnZhbHVlPjo6dHlwZT4KLSAgICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxl
KiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+
Ci0gICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsg
cmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkpJVERhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdERh
dGEpOyB9CiAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSwg
Q29kZU9yaWdpbik7CiAKQEAgLTMyMiwxOCArMjk2LDggQEAgcHVibGljOgogICAgIC8vIGxvb2tp
bmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcg
dGhpcy4KICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgo
Qnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAm
JiBqaXRDb2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RG
TW92ZShqaXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1h
cCgpCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0g
ICAgICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0K
KyAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKLSAgICB2b2lkIHNldFBDVG9D
b2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAg
c3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwogCiAgICAgdm9pZCBz
ZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0KTsKQEAgLTQ3MiwxMCArNDM2LDEyIEBA
IHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsK
IAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxl
cyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAg
ewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7
CiAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCk7CisgICAgICAg
IAogICAgIH0KIAogICAgIFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlRm9yQXJndW1lbnQodW5z
aWduZWQgYXJndW1lbnRJbmRleCkKQEAgLTU2OSw4ICs1MzUsMTAgQEAgcHVibGljOgogICAgIGNv
bnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25zdGFu
dFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQorICAgIGJv
b2wgaXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhWaXJ0dWFsUmVnaXN0ZXIgcmVn
KSBjb25zdDsKICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25z
dGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
cmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0
YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW5kZXgp
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdpc3RlcnMp
ICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQoKTsgfQog
CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVy
biBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rp
b25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTU5NSwyMiAr
NTYzLDIyIEBAIHB1YmxpYzoKICAgICAvLyBKdW1wIFRhYmxlcwogCiAjaWYgRU5BQkxFKEpJVCkK
LSAgICBTaW1wbGVKdW1wVGFibGUmIHN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKKyAg
ICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4
KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGlu
dCB0YWJsZUluZGV4KTsKKyAgICB2b2lkKiBiYXNlbGluZUpJVENvbnN0YW50UG9vbCgpCiAgICAg
ewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwotICAgICAgICByZXR1cm4gbV9q
aXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG1faml0RGF0YSAmJiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwor
ICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbC5kYXRhKCk7CiAgICAg
fQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1w
VGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQogCi0jaWYgRU5BQkxFKEpJVCkK
LSAgICBTdHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7Ci0gICAgICAgIHJl
dHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAg
ICB9CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgU3RyaW5nSnVtcFRhYmxlJiBkZmdTdHJpbmdT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgZGZn
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKICNlbmRpZgorCiAgICAgc2l6ZV90IG51
bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7IH0K
ICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQogCkBAIC02MzIsMjEgKzYwMCwy
MCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9s
ZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50
ZXItPmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOwogICAgIH0KIAogICAgIHZv
aWQgZG9udEpJVEFueXRpbWVTb29uKCkKICAgICB7Ci0gICAgICAgIG1fbGxpbnRFeGVjdXRlQ291
bnRlci5kZWZlckluZGVmaW5pdGVseSgpOworICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIt
PmRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgfQogCi0gICAgaW50MzJfdCB0aHJlc2hvbGRGb3JK
SVQoaW50MzJfdCB0aHJlc2hvbGQpOwotICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKTsKICAgICB2
b2lkIGppdFNvb24oKTsKKyAgICB2b2lkIGppdE5leHRJbnZvY2F0aW9uKCk7CiAKICAgICBjb25z
dCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICAgICAgcmV0
dXJuICptX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgfQogCiAgICAgdHlwZWRlZiBIYXNoTWFw
PHN0ZDo6dHVwbGU8U3RydWN0dXJlSUQsIHVuc2lnbmVkPiwgRml4ZWRWZWN0b3I8TExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0Y2hwb2lu
dE1hcDsKQEAgLTc5Nyw2ICs3NjQsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2Vy
UmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lk
KiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAog
ICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9p
ZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQpAQCAtODM4LDYgKzgw
Niw3IEBAIHB1YmxpYzoKICAgICBtdXRhYmxlIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwogCiAg
ICAgYm9vbCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQgYmVjYXVz
ZSB0aGUgSklUIHdhbnRzIHRvIHN0b3JlIHRvIGl0LgorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29k
ZUJsb2NrLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7IH0KIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgdW5zaWduZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0
eUxldmVsCkBAIC05MDcsMTYgKzg3NiwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX21ldGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0cnVj
dGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9p
bnN0cnVjdGlvbnNSYXdQb2ludGVyKTsgfQogCi0gICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJs
ZUZvckZ1enppbmdFYXJseVJldHVybigpCi0gICAgewotICAgICAgICAvLyBTb21lIGJ1aWx0aW5z
IGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRoZXkgcnVuLgotICAg
ICAgICByZXR1cm4gIW1fdW5saW5rZWRDb2RlLT5pc0J1aWx0aW5GdW5jdGlvbigpOwotICAgIH0K
KyAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkgeyBy
ZXR1cm4gbV91bmxpbmtlZENvZGUtPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluYWxpemVMTEludElubGluZUNh
Y2hlcygpOwogI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBmaW5hbGl6ZUJhc2VsaW5lSklUSW5s
aW5lQ2FjaGVzKCk7CisgICAgdm9pZCBmaW5hbGl6ZUpJVElubGluZUNhY2hlcygpOwogI2VuZGlm
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgdm9pZCB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7
CkBAIC0xMDEwLDcgKzk3NSw5IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlV2F0Y2hwb2ludE1h
cCBtX2xsaW50R2V0QnlJZFdhdGNocG9pbnRNYXA7CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0
Q29kZTsKICNpZiBFTkFCTEUoSklUKQorcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVRE
YXRhPiBtX2ppdERhdGE7Citwcml2YXRlOgogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgLy8gVGhpcyBpcyByZWxldmFudCB0byBub24tREZHIGNvZGUgYmxvY2tzIHRoYXQgc2VydmUg
YXMgdGhlIHByb2ZpbGVkIGNvZGUgYmxvY2sKQEAgLTEwMjksNyArOTk2LDcgQEAgcHJpdmF0ZToK
IAogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAgICAgCi0gICAg
QmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXIqIG1fbGxpbnRFeGVjdXRlQ291bnRlciB7IG51bGxwdHIgfTsK
IAogICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2ppdEV4ZWN1dGVDb3VudGVyOwogICAg
IHVpbnQzMl90IG1fb3NyRXhpdENvdW50ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDI4MzAxOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDggKzI1LDEwIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAi
QmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIlVubGlu
a2VkTWV0YWRhdGFUYWJsZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00MCw5ICs0
Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICBpZiAo
bV9tZXRhZGF0YSkgewogI2RlZmluZSBWSVNJVChfX29wKSBcCiAgICAgICAgIG1fbWV0YWRhdGEt
PmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBmdW5jKG1ldGFkYXRhLm1fcHJv
ZmlsZSwgZmFsc2UpOyB9KTsKLQogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9WQUxVRV9Q
Uk9GSUxFKFZJU0lUKQotCiAjdW5kZWYgVklTSVQKIAogICAgICAgICBtX21ldGFkYXRhLT5mb3JF
YWNoPE9wSXRlcmF0b3JPcGVuPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IApAQCAtNTcsNyArNTcs
NiBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgICAgICAg
ICBmdW5jKG1ldGFkYXRhLm1fdmFsdWVQcm9maWxlLCBmYWxzZSk7CiAgICAgICAgIH0pOwogICAg
IH0gICAKLQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgpAQCAtOTksNCArOTgsMzgg
QEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hMTEludENhbGxMaW5rSW5mbwogICAgIH0KIH0KIAor
I2lmIEVOQUJMRShKSVQpCitBTFdBWVNfSU5MSU5FIGNvbnN0IEpJVENvZGVNYXAmIENvZGVCbG9j
azo6aml0Q29kZU1hcCgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0
Q29kZS5nZXQoKSktPm1faml0Q29kZU1hcDsKK30KKworQUxXQVlTX0lOTElORSBTaW1wbGVKdW1w
VGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgp
Cit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1f
c3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmdK
dW1wVGFibGUmIENvZGVCbG9jazo6YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5n
ZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKyNlbmRpZgor
CisjaWYgRU5BQkxFKERGR19KSVQpCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJsZSYgQ29k
ZUJsb2NrOjpkZmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJU
KGppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxE
Rkc6OkpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJ
bmRleF07Cit9CisKK0FMV0FZU19JTkxJTkUgU3RyaW5nSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmRm
Z1N0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0
VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6
SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzAs
NiArNzAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uq
IHdyYXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwogICAgIAogICAgIHN0YXRpYyBFeGVjdXRhYmxl
VG9Db2RlQmxvY2tFZGdlKiB3cmFwQW5kQWN0aXZhdGUoQ29kZUJsb2NrKiBjb2RlQmxvY2spOwor
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9jaygpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLCBtX2NvZGVCbG9jayk7IH0KICAg
ICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291
bnRlci5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3
IEBAIGJvb2wgRXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjoKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgdGhyZXNob2xkID0gY2xpcHBlZFRocmVzaG9sZChjb2Rl
QmxvY2sgPyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIDogbnVsbHB0ciwgdGhyZXNob2xkKTsK
KyAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKHRocmVzaG9sZCk7CiAgICAgCiAgICAg
bV9jb3VudGVyID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXRocmVzaG9sZCk7CiAgICAgICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291
bnRlci5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0aW9uQ291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsgLy8gSWYgeW91IHVz
ZSB0aGlzLCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCgpIG1heSBzdGlsbCByZXR1cm4g
ZmFsc2UuCiAgICAgYm9vbCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sq
KTsKICAgICBib29sIGhhc0Nyb3NzZWRUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVybiBtX2NvdW50
ZXIgPj0gMDsgfQotICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBD
b2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwg
Q29kZUJsb2NrKiA9IG51bGxwdHIpOwogICAgIHZvaWQgZGVmZXJJbmRlZmluaXRlbHkoKTsKICAg
ICBkb3VibGUgY291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdG90
YWxDb3VudCkgKyBtX2NvdW50ZXI7IH0KICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKQEAgLTg2LDEzICs4Niw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFQgdGhyZXNob2xkKQorICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hv
bGQoVCB0aHJlc2hvbGQpCiAgICAgewotICAgICAgICBpbnQzMl90IG1heFRocmVzaG9sZDsKLSAg
ICAgICAgaWYgKE9wdGlvbnM6OnJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3Bv
aW50cygpICYmIGdsb2JhbE9iamVjdCkKLSAgICAgICAgICAgIG1heFRocmVzaG9sZCA9IGdsb2Jh
bE9iamVjdC0+d2Vha1JhbmRvbUludGVnZXIoKSAlIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3
ZWVuQ2hlY2twb2ludHMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF4VGhyZXNob2xk
ID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOworICAgICAgICBp
bnQzMl90IG1heFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2tw
b2ludHMoKTsKICAgICAgICAgaWYgKHRocmVzaG9sZCA+IG1heFRocmVzaG9sZCkKICAgICAgICAg
ICAgIHRocmVzaG9sZCA9IG1heFRocmVzaG9sZDsKICAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFk
YXRhLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBzdHJ1
Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0IHsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5
SWRNb2RlTWV0YWRhdGFVbnNldCkgPT0gMTIpOwogCiBzdHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0
YUFycmF5TGVuZ3RoIHsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0
aCwgYXJyYXlQcm9maWxlKTsgfQogICAgIEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGU7CiB9Owog
c3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoKSA9PSAx
Mik7CkBAIC04OCw2ICs4OSw3IEBAIHVuaW9uIEdldEJ5SWRNb2RlTWV0YWRhdGEgewogICAgICAg
ICBHZXRCeUlkTW9kZSBtb2RlOwogICAgICAgICB1aW50OF90IGhpdENvdW50Rm9yTExJbnRDYWNo
aW5nOyAvLyBUaGlzIG11c3QgYmUgemVybyB3aGVuIHdlIHVzZSBQcm90b0xvYWQgbW9kZS4KICAg
ICB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9CiAgICAgR2V0QnlJZE1vZGVN
ZXRhZGF0YURlZmF1bHQgZGVmYXVsdE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0
IHVuc2V0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggYXJyYXlMZW5n
dGhNb2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlT
dGF0dXMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAg
R2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICByZXR1cm4g
R2V0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAogICAgIGNhc2UgQ2FjaGVUeXBl
OjpHZXRCeUlkU2VsZjogewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZv
LT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRC
bG9jay0+dm0oKSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSwgc3R1YkluZm8pOwogICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3ND
YXNlLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyAr
MTkwLDcgQEAgdm9pZCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogCiAgICAg
Ly8gTGV0J3Mgc3RvcmUgdGhlIHJldXNlZCByZWdpc3RlcnMgdG8gdGhlIHN0YWNrLiBBZnRlciB0
aGF0LCB3ZSBjYW4gdXNlIGFsbG9jYXRlZCBzY3JhdGNoIHJlZ2lzdGVycy4KICAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KLSAgICBh
bGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CisgICAgICAg
IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKIAogICAg
IGlmIChHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKICAgICAgICAg
ZGF0YUxvZygiYmFzZUdQUiA9ICIsIGJhc2VHUFIsICJcbiIpOwpAQCAtMjI1LDEyICsyMjUsOSBA
QCB2b2lkIEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmVtaXRET01KSVRHCiAgICAgICAgIHJlZ2lz
dGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnKTsKICAgICBmb3IgKEZQUlJlZyByZWcgOiBmcFNj
cmF0Y2gpCiAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnKTsKKyAgICBp
ZiAoaml0LmNvZGVCbG9jaygpLT51c2VEYXRhSUMoKSkKKyAgICAgICAgcmVnaXN0ZXJzVG9TcGls
bEZvckNDYWxsLnNldChzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKICAgICByZWdpc3RlcnNUb1Nw
aWxsRm9yQ0NhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6cmVnaXN0ZXJzVG9Ob3RTYXZlRm9yQ0Nh
bGwoKSk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gaml0LmNv
ZGVCbG9jaygpOwotICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICByZWdp
c3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0jZW5kaWYKIAog
ICAgIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zIHBhcmFtcyhzdGF0ZS5tX3ZtLCBXVEZNb3ZlKHJl
Z3MpLCBXVEZNb3ZlKGdwU2NyYXRjaCksIFdURk1vdmUoZnBTY3JhdGNoKSk7CiAgICAgc25pcHBl
dC0+Z2VuZXJhdG9yKCktPnJ1bihqaXQsIHBhcmFtcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzOSw3ICsxMzksNyBAQCBJbkJ5U3RhdHVzIEluQnlTdGF0dXM6OmNvbXB1dGVGb3JT
dHViSW5mCiAgICAgICAgIHJldHVybiBJbkJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwogCiAgICAg
Y2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlKHZtKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1w
dXJlUHJvcGVydHkoKSkKICAgICAgICAgICAgIHJldHVybiBJbkJ5U3RhdHVzKFRha2VzU2xvd1Bh
dGgpOwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+
aWRlbnRpZmllcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTEg
KzE3NiwxNiBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGxpbmtDb2RlSW5saW5lCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVy
dHlBY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZlByb3BlcnR5QWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7
CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8v
IFRoZXNlIGR5bmFtaWMgc2xvdHMgZ2V0IGZpbGxlZCBpbi4gTm90aGluZyBlbHNlIHRvIGRvLgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAg
IAogICAgIEdQUlJlZyBiYXNlID0gc3R1YkluZm8uYmFzZUdQUjsKQEAgLTIzMywyMyArMjM4LDMx
IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaGFzRnJlZVJlZ2lzdGUKICAgICByZXR1cm4g
Z2V0U2NyYXRjaFJlZ2lzdGVyKHN0dWJJbmZvKSAhPSBJbnZhbGlkR1BSUmVnOwogfQogCi1ib29s
IElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nl
c3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAg
ICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIHJldHVybiBoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwogfQogCi1ib29s
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhh
c0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQVNTRVJU
KGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2Zmc2V0KSk7CisgICAg
QVNTRVJUKGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZv
LCBvZmZzZXQpKTsKKworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAg
IC8vIFRoZXNlIHNsb3RzIGdldCBmaWxsZWQgaW4uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIApAQCAtMjc5
LDIyICsyOTIsMjUgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5Ugog
ICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXND
YWNoZWFibGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkq
IGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJy
YXkpCiB7CiAgICAgQVNTRVJUKGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogCiAg
ICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFoYXNGcmVlUmVnaXN0ZXIo
c3R1YkluZm8pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWhhc0FueUFy
cmF5U3RvcmFnZShhcnJheS0+aW5kZXhpbmdUeXBlKCkpICYmIGFycmF5LT5pbmRleGluZ1R5cGUo
KSAhPSBBcnJheUNsYXNzOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxl
bmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgQVNTRVJU
KGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGFycmF5KSk7CisgICAgQVNTRVJUX1VO
VVNFRChjb2RlQmxvY2ssIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5m
bywgYXJyYXkpKTsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTksMTcgKzMzNSwyMCBAQCBib29sIElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7
CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCitib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJp
bmdMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gaGFzRnJl
ZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3Ry
aW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQogewotICAgIEFTU0VSVChpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChz
dHViSW5mbykpOworICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZVN0cmlu
Z0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0Nv
bnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzYzLDEzICszODIs
MTggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKAogfQogCiAKLWJv
b2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU2VsZkluQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAg
Ly8gVGhlc2Ugc2xvdHMgZ2V0IGZpbGxlZCBpbi4gTm90aGluZyBlbHNlIHRvIGRvLgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VH
UFI7CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUgPSBzdHViSW5mby52YWx1ZVJlZ3MoKTsKIApAQCAt
NDA2LDEzICs0MzAsMTMgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFj
YwogICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CiAgICAgICAgIC8vIElmIGl0IGlz
IG5vdCBHZXRCeUlkLWxpa2UtdGhpbmcsIHdlIGRvIG5vdCBlbWl0IG5vcCBzbGVkIChlLmcuIEdl
dEJ5VmFsKS4KICAgICAgICAgLy8gVGhlIGNvZGUgaXMgYWxyZWFkeSBhbiBpbmRpcmVjdCBqdW1w
LCBhbmQgb25seSB0aGluZyB3ZSBzaG91bGQgZG8gaXMgcmVwbGFjaW5nIG1fY29kZVB0ci4KLSAg
ICAgICAgaWYgKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikgeworICAgICAgICBpZiAo
Y29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQgJiYgc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CiAgICAgICAgICAgICAvLyBJZiBtX2NvZGVQdHIgaXMg
cG9pbnRpbmcgdG8gc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLCB0aGlzIG1lYW5zIHRo
YXQgSW5saW5lQWNjZXNzIGNvZGUgaXMgbm90IGEgc3R1YiBvbmUuCiAgICAgICAgICAgICAvLyBX
ZSByZXdyaXRlIHRoaXMgd2l0aCB0aGUgc3R1Yi1iYXNlZCBkaXNwYXRjaGluZyBjb2RlIG9uY2Us
IGFuZCBjb250aW51ZSB1c2luZyBpdCB1bnRpbCB3ZSByZXNldCB0aGUgY29kZS4KICAgICAgICAg
ICAgIGlmIChzdHViSW5mby5tX2NvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSA9PSBzdHViSW5m
by5zbG93UGF0aFN0YXJ0TG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkgewogICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKHN0dWJJbmZvLnN0YXJ0LnJldGFn
Z2VkPEpTSW50ZXJuYWxQdHJUYWc+KCksIHNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYp
PihbJl0oQ0NhbGxIZWxwZXJzJiBqaXQpIHsKICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZzdHViSW5mbyksIHN0dWJJbmZvLm1fc3R1Yklu
Zm9HUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc3R1YkluZm8ubV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29k
ZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICAgICAgICAgICAgICBqaXQu
ZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm8ubV9zdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OwogICAgICAgICAgICAgICAgICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOwogICAgICAgICAg
ICAgICAgICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IHN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKICAg
ICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XShMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CkBAIC00MjEsNyArNDQ1LDkgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJB
c0p1bXBJbkFjYwogICAgICAgICAgICAgICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5raW5nIHN0
dWIgY2FsbCIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgc3R1YkluZm8u
bV9jb2RlUHRyID0gdGFyZ2V0OworICAgICAgICBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUgPSAwOyAvLyBDbGVhciBvdXQgdGhlIGlubGluZSBhY2Nlc3MgY29kZS4KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDM0LDggKzQ2MCwxNCBAQCB2b2lkIElubGluZUFjY2Vz
czo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgfSksICJJbmxpbmVBY2Nlc3M6IGxpbmtpbmcg
Y29uc3RhbnQganVtcCIpOwogfQogCi12b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1w
SW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQordm9pZCBJ
bmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CisgICAgaWYgKGNvZGVCbG9jay0+dXNl
RGF0YUlDKCkgJiYgY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQp
IHsKKyAgICAgICAgc3R1YkluZm8ubV9jb2RlUHRyID0gc3R1YkluZm8uc2xvd1BhdGhTdGFydExv
Y2F0aW9uOworICAgICAgICBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAw
OyAvLyBDbGVhciBvdXQgdGhlIGlubGluZSBhY2Nlc3MgY29kZS4KKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKHN0dWJJbmZvLnN0YXJ0
LnJldGFnZ2VkPEpTSW50ZXJuYWxQdHJUYWc+KCksIHNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVs
cGVycyYpPihbJl0oQ0NhbGxIZWxwZXJzJiBqaXQpIHsKICAgICAgICAgLy8gV2UgZG9uJ3QgbmVl
ZCBhIG5vcCBzbGVkIGhlcmUgYmVjYXVzZSBub2JvZHkgc2hvdWxkIGJlIGp1bXBpbmcgaW50byB0
aGUgbWlkZGxlIG9mIGFuIElDLgogICAgICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFj
Y2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxNCArOTksMTQgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gc3RkOjptYXgoc2l6ZSwgc2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogICAgIH0K
IAotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKFN0cnVjdHVyZVN0
dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGNh
bkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFByb3BlcnR5
T2Zmc2V0KTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3Ry
dWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGlj
IGJvb2wgaXNDYWNoZWFibGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkq
KTsKLSAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1
YkluZm8mLCBKU0FycmF5Kik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmSW5BY2Nlc3Mo
U3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0
ZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHN0YXRpYyBib29sIGdlbmVy
YXRlU2VsZlByb3BlcnR5QWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3Ry
dWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGNhbkdlbmVyYXRlU2Vs
ZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFByb3BlcnR5
T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29k
ZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7
CisgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVBcnJheUxlbmd0aChDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZVN0
cmluZ0xlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHN0YXRpYyBi
b29sIGdlbmVyYXRlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBK
U0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmSW5BY2Nlc3MoQ29kZUJsb2Nr
KiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5l
cmF0ZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogCiAgICAg
c3RhdGljIHZvaWQgcmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3Mo
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHVi
Um91dGluZVB0clRhZz4pOwogICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXBJbkFjY2Vz
cyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCShyZXZpc2lvbiAyODMwMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgT1ZFUkxPQURfQklUV0lTRV9PUEVSQVRP
UlNfRk9SX0VOVU1fQ0xBUwogCiBzdHJ1Y3QgSXRlcmF0aW9uTW9kZU1ldGFkYXRhIHsKICAgICB1
aW50OF90IHNlZW5Nb2RlcyB7IDAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2Vl
bk1vZGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSwg
c2Vlbk1vZGVzKTsgfSAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzZWVuTW9k
ZXMpKSA9PSBzaXplb2YoSXRlcmF0aW9uTW9kZSkpOwogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHJldmlzaW9u
IDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5r
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICBBcnJheVByb2ZpbGUgbV9hcnJheVByb2ZpbGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihMTEludENhbGxM
aW5rSW5mbywgbV9hcnJheVByb2ZpbGUpOyB9CiAKIHByaXZhdGU6CiAgICAgdWludHB0cl90IG1f
Y2FsbGVlT3JMYXN0U2VlbkNhbGxlZVdpdGhMaW5rQml0IHsgdW5saW5rZWRCaXQgfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUuaAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGFkYXRh
VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsMTQgQEAgcHVibGljOgogICAgICAg
ICAgICAgZnVuYygqbWV0YWRhdGEpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgorICAgIEFMV0FZU19JTkxJTkUgc2l6ZV90IG51bUVudHJpZXMoKQorICAgIHsKKyAgICAgICAg
YXV0byogc3RhcnQgPSBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUgT3A6Ok1ldGFkYXRhKj4oZ2V0KE9w
OjpvcGNvZGVJRCkpOworICAgICAgICBhdXRvKiBlbmQgPSBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUg
T3A6Ok1ldGFkYXRhKj4oZ2V0SW1wbChPcDo6b3Bjb2RlSUQgKyAxKSk7CisgICAgICAgIHJldHVy
biBlbmQgLSBzdGFydDsKKyAgICB9CisKICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKTsKIAogICAg
IHZvaWQgcmVmKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJ
KHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDYgKzE1NiwxNyBAQCBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4CiAgICAgbWFjcm8oT3BJdGVyYXRvck9wZW4pIFwKICAg
ICBtYWNybyhPcEl0ZXJhdG9yTmV4dCkgXAogCisjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRI
X0JJTkFSWV9BUklUSF9QUk9GSUxFKG1hY3JvKSBcCisgICAgbWFjcm8oT3BBZGQpIFwKKyAgICBt
YWNybyhPcE11bCkgXAorICAgIG1hY3JvKE9wRGl2KSBcCisgICAgbWFjcm8oT3BTdWIpIFwKKwor
I2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKG1hY3JvKSBc
CisgICAgbWFjcm8oT3BJbmMpIFwKKyAgICBtYWNybyhPcERlYykgXAorICAgIG1hY3JvKE9wTmVn
YXRlKSBcCisKIAogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0eXBlLWxpbWl0cyIpCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBA
QCB2b2lkIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6c3VjY2VlZCgpCiB7CiAgICAgcmVzdG9yZVNj
cmF0Y2goKTsKICAgICBpZiAoaml0LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCi0gICAgICAg
IGppdC0+cmV0KCk7CisgICAgICAgIGppdC0+ZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkRvbmVM
b2NhdGlvbigpKSwgSlNJbnRlcm5hbFB0clRhZyk7CiAgICAgZWxzZQogICAgICAgICBzdWNjZXNz
LmFwcGVuZChqaXQtPmp1bXAoKSk7CiB9CkBAIC0xMTAsNiArMTEwLDggQEAgY29uc3QgUmVnaXN0
ZXJTZXQmIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdC0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpOwog
CiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwgPSBSZWdpc3RlclNldChtX2xpdmVSZWdp
c3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLCBhbGxvY2F0b3ItPnVz
ZWRSZWdpc3RlcnMoKSk7CisgICAgICAgIGlmIChqaXQtPmNvZGVCbG9jaygpLT51c2VEYXRhSUMo
KSkKKyAgICAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuYWRkKHN0dWJJbmZvLT5tX3N0
dWJJbmZvR1BSKTsKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5leGNsdWRlKGNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgfQogICAgIHJldHVybiBtX2xpdmVSZWdpc3RlcnNGb3JD
YWxsOwpAQCAtMTI4LDExICsxMzAsMTIgQEAgYXV0byBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnBy
ZXNlcnZlTGl2ZQogICAgIH07CiB9CiAKLWF1dG8gQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVz
ZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKGNvbnN0IFJl
Z2lzdGVyU2V0JiBleHRyYSkgLT4gU3BpbGxTdGF0ZQorYXV0byBBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMo
KSAtPiBTcGlsbFN0YXRlCiB7CiAgICAgUmVnaXN0ZXJTZXQgbGl2ZVJlZ2lzdGVycyA9IGFsbG9j
YXRvci0+dXNlZFJlZ2lzdGVycygpOworICAgIGlmIChqaXQtPmNvZGVCbG9jaygpLT51c2VEYXRh
SUMoKSkKKyAgICAgICAgbGl2ZVJlZ2lzdGVycy5hZGQoc3R1YkluZm8tPm1fc3R1YkluZm9HUFIp
OwogICAgIGxpdmVSZWdpc3RlcnMuZXhjbHVkZShjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAg
IGxpdmVSZWdpc3RlcnMubWVyZ2UoZXh0cmEpOwogCiAgICAgY29uc3RleHByIHVuc2lnbmVkIGV4
dHJhU3RhY2tQYWRkaW5nID0gMDsKICAgICB1bnNpZ25lZCBudW1iZXJPZlN0YWNrQnl0ZXNVc2Vk
Rm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb24gPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNl
cnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKmppdCwgbGl2ZVJlZ2lzdGVycywgZXh0cmFTdGFj
a1BhZGRpbmcpOwpAQCAtNTk2LDE2ICs1OTksMTIgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQ
b2x5bW9ycGhpY0FjY2VzcwogICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsKICAgICBz
dGF0ZS5qaXQgPSAmaml0OwogCi0gICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKLSAg
ICAgICAgaWYgKHN0YXRlLm1fZG9lc0pTR2V0dGVyU2V0dGVyQ2FsbHMpIHsKLSAgICAgICAgICAg
IC8vIFdlIGhhdmUgbm8gZ3VhcmFudGVlIHRoYXQgc3RhY2stcG9pbnRlciBpcyB0aGUgZXhwZWN0
ZWQgb25lLiBUaGlzIGlzIG5vdCBhIHByb2JsZW0gaWYgd2UgZG8gbm90IGhhdmUgSlMgZ2V0dGVy
IC8gc2V0dGVyIGNhbGxzIHNpbmNlIHN0YWNrLXBvaW50ZXIgaXMKLSAgICAgICAgICAgIC8vIGEg
Y2FsbGVlLXNhdmUgcmVnaXN0ZXIgaW4gdGhlIEMgY2FsbGluZyBjb252ZW5zaW9uLiBIb3dldmVy
LCBvdXIgSlMgZXhlY3V0YWJsZSBjYWxsIGRvZXMgbm90IHNhdmUgc3RhY2stcG9pbnRlci4gU28g
d2UgYXJlIGFkanVzdGluZyBzdGFjay1wb2ludGVyIGFmdGVyCi0gICAgICAgICAgICAvLyBKUyBn
ZXR0ZXIgLyBzZXR0ZXIgY2FsbHMuIEJ1dCB0aGlzIGNvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHRo
ZSBpbml0aWFsIHN0YWNrLXBvaW50ZXIsIGFuZCBtYWtlcyBQQUMgdGFnZ2luZyBicm9rZW4uCi0g
ICAgICAgICAgICAvLyBUbyBlbnN1cmUgUEFDLXRhZ2dpbmcgd29yaywgd2UgZmlyc3QgYWRqdXN0
IHN0YWNrLXBvaW50ZXIgdG8gdGhlIGFwcHJvcHJpYXRlIG9uZS4KLSAgICAgICAgICAgIGppdC5h
ZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJP
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICBqaXQudGFn
UmV0dXJuQWRkcmVzcygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGppdC50YWdSZXR1
cm5BZGRyZXNzKCk7CisgICAgLy8gT09QUworICAgIGlmIChBU1NFUlRfRU5BQkxFRCB8fCB0cnVl
KSB7CisgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJs
b2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgYXV0byBv
ayA9IGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgaml0LmJy
ZWFrcG9pbnQoKTsKKyAgICAgICAgb2subGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0ZS5w
cmVzZXJ2ZWRSZXVzZWRSZWdpc3RlclN0YXRlID0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyODMwMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAko
d29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9u
U3RhdGUgewogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjYWxjdWxhdGVMaXZlUmVnaXN0ZXJzRm9y
Q2FsbEFuZEV4Y2VwdGlvbkhhbmRsaW5nKCk7CiAKICAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2
ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7
Ci0gICAgU3BpbGxTdGF0ZSBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhv
dXRFeGNlcHRpb25zKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7CisgICAgU3BpbGxT
dGF0ZSBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25z
KCk7CiAKICAgICB2b2lkIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhU
aHJvd25FeGNlcHRpb24oY29uc3QgU3BpbGxTdGF0ZSYpOwogICAgIHZvaWQgcmVzdG9yZUxpdmVS
ZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKGNvbnN0IFNwaWxsU3RhdGUmLCBjb25zdCBSZWdpc3Rl
clNldCYgZG9udFJlc3RvcmUgPSB7IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODAsMTAgKzE4MCwxMCBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0
dWJJCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5p
ZGVudGlmaWVyKCk7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVy
LnVpZCgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCh1aWQpOwotICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+
dm0oKSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAg
ICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciks
IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7Cisg
ICAgICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmll
ciksIHN0cnVjdHVyZSwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6
c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAgICAgfQogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgi
CiAjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAK
QEAgLTY1LDkgKzY2LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxm
KAogICAgIEFTU0VSVChoYXNDb25zdGFudElkZW50aWZpZXIpOwogICAgIHNldENhY2hlVHlwZShs
b2NrZXIsIENhY2hlVHlwZTo6R2V0QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50
aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxv
Y2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9m
ZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBT
dHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEFycmF5TGVuZ3RoKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ckJhc2UmIGxvY2tlcikKQEAgLTg3LDkgKzg4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
aW5pdFB1dEJ5SWRSZXBsYQogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVu
c2V0KTsKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNl
KTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNv
ZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZP
ZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRT
ZWxmKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC05Nyw5ICs5OCw5
IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGMKICAgICBBU1NFUlQo
bV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tl
ciwgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVy
OwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52
bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQg
PSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OmRlcmVmKCkKQEAgLTIzNiw3ICsyMzcsNyBAQCBBY2Nlc3NHZW5lcmF0aW9u
UmVzdWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgIC8vIHdlJ3JlIGJ1ZmZlcmVkIGlzIGJl
Y2F1c2Ugd2UgcmVseSBvbiBpdCB0byByZXNldCBkdXJpbmcgR0MgaWYgbV9pbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlCiAgICAgICAgIC8vIGlzIGNvbGxlY3RlZC4KICAgICAgICAgbV9pZGVudGlm
aWVyID0gbnVsbHB0cjsKLSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFy
KCk7CisgICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAgICAgICAgIAog
ICAgICAgICAvLyBJZiB3ZSBnZW5lcmF0ZWQgc29tZSBjb2RlIHRoZW4gd2UgZG9uJ3Qgd2FudCB0
byBhdHRlbXB0IHRvIHJlcGF0Y2ggaW4gdGhlIGZ1dHVyZSB1bnRpbCB3ZQogICAgICAgICAvLyBn
YXRoZXIgZW5vdWdoIGNhc2VzLgpAQCAtMjUxLDcgKzI1Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OnJlc2V0KGNvbnN0IENvbmMKIHsKICAgICBjbGVhckJ1ZmZlcmVkU3RydWN0dXJlcygp
OwogICAgIG1faWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlLmNsZWFyKCk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKIAog
ICAgIGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47
CkBAIC0yODUsNiArMjg2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3Qg
Q29uYwogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJ
ZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2Rl
QmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CkBAIC0zNjAsOCArMzYyLDggQEAgdm9pZCBTdHJ1Y3R1cmVT
dHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZCA9IHRy
dWU7Ci0gICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgaXNWYWxp
ZCAmPSB2bS5oZWFwLmlzTWFya2VkKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7
CisgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZSh2bSkpCisgICAgICAgIGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpOwog
ICAgIGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIGlzVmFsaWQg
Jj0gdS5zdHViLT52aXNpdFdlYWsodm0pOwogCkBAIC0zNzUsOCArMzc3LDggQEAgdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRv
cj4KIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3Im
IHZpc2l0b3IpCiB7Ci0gICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAg
ICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAg
ICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZp
c2l0b3Iudm0oKSkpCisgICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAK
ICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICB1LnN0dWIt
PnByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwpAQCAtNDMwLDYgKzQzMiwyMDQgQEAgQUxX
QVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1fY2FjaGVUeXBlID0g
bmV3Q2FjaGVUeXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJv
bVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBlID0gdW5saW5rZWRT
dHViSW5mby5hY2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHViSW5mby5zdGFydDsK
KyAgICBkb25lTG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBz
bG93UGF0aFN0YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2Nh
dGlvbjsKKyAgICBjYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KHVu
bGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpOworICAgIGNvZGVPcmlnaW4g
PSBDb2RlT3JpZ2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgbV9jb2Rl
UHRyID0gc2xvd1BhdGhTdGFydExvY2F0aW9uOworCisgICAgdXNlZFJlZ2lzdGVycyA9IFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICBpZiAoYWNjZXNzVHlwZSA9
PSBBY2Nlc3NUeXBlOjpHZXRCeUlkICYmIHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5j
aGVja3BvaW50KCkpIHsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9yX25leHQsIHdlIGNhbid0IGNs
b2JiZXIgdGhlICJkb250Q2xvYmJlclJlZ2lzdGVyIiByZWdpc3RlciBlaXRoZXIuCisgICAgICAg
IHVzZWRSZWdpc3RlcnMuYWRkKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJS
ZWdpc3Rlcik7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpEZWxldGVCeUlEOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxl
dGVCeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0
QnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1p
emU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkluQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlk
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAor
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDog
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGlt
aXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1l
OiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAg
ICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1
dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFN
b2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAg
ICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAg
ICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9w
dGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToK
KyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2
YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRL
aW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYg
KHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21h
TW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnByaXZhdGVGaWVsZFB1dEtpbmQuaXNE
ZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBv
cGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZh
bHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5
SUQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VH
UFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVy
dHlHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxC
eUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpHZXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgorICAg
ICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9H
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBoYXNDb25zdGFudElk
ZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgcHJvdG90eXBlSXNLbm93bk9iamVjdCA9IGZhbHNl
OworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsK
KyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsK
KyAgICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6
OnByb3RvOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5
VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgIGNhc2UgQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVy
ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6
CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhp
c0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVy
czo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdl
dEJ5SWQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgIGNhc2UgQWNj
ZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsK
KyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgcmVncy50aGlzR1BSID0gQmFzZWxpbmVHZXRC
eUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9
IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElk
ZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOwor
ICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1f
c3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNz
VHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZh
bHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZh
bHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
KQorICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpwcm9maWxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFBy
aXZhdGVCcmFuZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAg
ICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBJ
bnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdp
c3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MuYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwog
I2lmIEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3Rl
bmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgog
I2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlU2V0LmgiCkBAIC01Niw2ICs1Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlw
ZSA6IGludDhfdCB7CiAgICAgR2V0QnlWYWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwK
KyAgICBQdXRQcml2YXRlTmFtZSwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQ
cml2YXRlTmFtZSwKQEAgLTc4LDYgKzgwLDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4
X3QgewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBA
IC05OCw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJv
dXRUb0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVD
TEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2Vh
ayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0
c2VsZiwKQEAgLTMyNSwxMyArMzMxLDE5IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW47CisgICAgUHJvcGVydHlPZmZzZXQgYnlJZFNlbGZPZmZzZXQ7Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBieUlkU2VsZk9mZnNldCk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgbV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlKTsgfQogICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgfSBieUlkU2VsZjsKICAgICAgICAgUG9s
eW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAgICAgfSB1OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIGlubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAg
IH0KKyAgICBTdHJ1Y3R1cmVJRCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAwIH07CiBw
cml2YXRlOgogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIC8vIFJl
cHJlc2VudHMgdGhvc2Ugc3RydWN0dXJlcyB0aGF0IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nl
c3NDYXNlcyBpbiB0aGUgUG9seW1vcnBoaWNBY2Nlc3MuCkBAIC0zNTIsNiArMzY0LDcgQEAgcHVi
bGljOgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9j
b2RlUHRyOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVQdHIoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1fY29kZVB0cik7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRG9uZUxvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBkb25lTG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRoU3RhcnRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgc2xvd1BhdGhTdGFydExvY2F0aW9uKTsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBtX3Nsb3dPcGVyYXRpb24pOyB9CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvdW50ZG93bigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihTdHJ1Y3R1cmVTdHViSW5mbywgY291bnRkb3duKTsgfQpAQCAtNDQ3LDYgKzQ2MCwxNyBAQCBp
bmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1
Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
OworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVG
aWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkgfTsKKyAgICBFQ01BTW9k
ZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpzbG9wcHkoKSB9OworICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4g
c3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAq
YnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3Rh
bmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBk
b25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0
dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVy
U2FtcGxlci5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBA
IHZvaWQgcHJpbnRTdXBlclNhbXBsZXJTdGF0ZSgpCiAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAx
MDAuMCAqIGluIC8gKGluICsgb3V0KTsKICAgICBpZiAocGVyY2VudGFnZSAhPSBwZXJjZW50YWdl
KQogICAgICAgICBwZXJjZW50YWdlID0gMC4wOwotICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBi
ZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiXG4iKTsKKyAgICBkYXRh
TG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFn
ZSwgIiVcbiIpOwogfQogCiB2b2lkIGVuYWJsZVN1cGVyU2FtcGxlcigpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lu
Y2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUu
aCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKICNpbmNsdWRlICJCeXRl
Y29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKQEAgLTc4LDYgKzc5LDggQEAg
VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgICAgICBjcmVhdGVS
YXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tlcik7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fcHJpdmF0
ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJpdmF0ZUJyYW5kUmVx
dWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAgfQorCisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNl
dE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0
ZXJXYXJtVXAoKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpAQCAtMzE2LDYg
KzMxOSw0OCBAQCBpbnQgVW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzCiAgICAg
cmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAor
I2lmIEFTU0VSVF9FTkFCTEVECitib29sIFVubGlua2VkQ29kZUJsb2NrOjpoYXNJZGVudGlmaWVy
KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgaWYgKG51bWJlck9mSWRlbnRpZmllcnMo
KSA+IDEwMCkgeworICAgICAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpICE9IG1fY2FjaGVk
SWRlbnRpZmllclVpZHMuc2l6ZSgpKSB7CisgICAgICAgICAgICBMb2NrZXIgbG9ja2VyKG1fY2Fj
aGVkSWRlbnRpZmllclVpZHNMb2NrKTsKKyAgICAgICAgICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmlu
Z0ltcGwqPiBjYWNoZWRJZGVudGlmaWVyVWlkczsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICAgICAgICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSB0aGlzLT5pZGVudGlmaWVyKGkpOworICAg
ICAgICAgICAgICAgIGNhY2hlZElkZW50aWZpZXJVaWRzLmFkZChpZGVudGlmaWVyLmltcGwoKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisg
ICAgICAgICAgICBtX2NhY2hlZElkZW50aWZpZXJVaWRzID0gV1RGTW92ZShjYWNoZWRJZGVudGlm
aWVyVWlkcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9jYWNoZWRJZGVudGlmaWVy
VWlkcy5jb250YWlucyh1aWQpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRpZmllcihp
KS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitpbnQzMl90IFVubGlua2VkQ29kZUJsb2NrOjp0aHJl
c2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRPcHRpbWl6
ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJu
IHRocmVzaG9sZDsKKyAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRo
cmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRo
cmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biB0aHJlc2hvbGQ7Cit9CisKKwogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFy
ZWRQcm9maWxlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWV0YWRhdGEtPmlzRmluYWxp
emVkKCkpOwpAQCAtMzM3LDE1ICszODIsMjUgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxs
b2NhdGVTaGFyZWRQcgogICAgIGlmIChtX21ldGFkYXRhLT5oYXNNZXRhZGF0YSgpKSB7CiAgICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mQXJyYXlQcm9maWxlcyA9IDA7CiAKLSNkZWZpbmUgQ09VTlQo
X19vcCkgXAotICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVt
RW50cmllczxfX29wPigpOworI2RlZmluZSBDT1VOVChfX29wKSBudW1iZXJPZkFycmF5UHJvZmls
ZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOwogICAgICAgICBGT1JfRUFDSF9P
UENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENPVU5UKQogICAgICAgICBGT1JfRUFDSF9PUENPREVf
V0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhDT1VOVCkKICN1bmRlZiBDT1VOVAogICAgICAgICBu
dW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9y
TmV4dD4oKTsKICAgICAgICAgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51
bUVudHJpZXM8T3BHZXRCeUlkPigpOwotCiAgICAgICAgIG1fYXJyYXlQcm9maWxlcyA9IEZpeGVk
VmVjdG9yPFVubGlua2VkQXJyYXlQcm9maWxlPihudW1iZXJPZkFycmF5UHJvZmlsZXMpOworCisg
ICAgICAgIHVuc2lnbmVkIG51bWJlck9mQmluYXJ5QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5l
IENPVU5UKF9fb3ApIG51bWJlck9mQmluYXJ5QXJpdGhQcm9maWxlcyArPSBtX21ldGFkYXRhLT5u
dW1FbnRyaWVzPF9fb3A+KCk7CisgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0JJTkFSWV9B
UklUSF9QUk9GSUxFKENPVU5UKQorI3VuZGVmIENPVU5UCisgICAgICAgIG1fYmluYXJ5QXJpdGhQ
cm9maWxlcyA9IEZpeGVkVmVjdG9yPEJpbmFyeUFyaXRoUHJvZmlsZT4obnVtYmVyT2ZCaW5hcnlB
cml0aFByb2ZpbGVzKTsKKworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlVuYXJ5QXJpdGhQcm9m
aWxlcyA9IDA7CisjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVz
ICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BD
T0RFX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShDT1VOVCkKKyN1bmRlZiBDT1VOVAorICAgICAg
ICBtX3VuYXJ5QXJpdGhQcm9maWxlcyA9IEZpeGVkVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPihu
dW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNp
b24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxMiBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5o
IgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5o
IgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRl
ci5oIgogI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5nZUluZm8uaCIKICNpbmNsdWRlICJIYW5kbGVy
SW5mby5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKQEAgLTY0LDYgKzY2LDcgQEAgY2xhc3Mg
VW5saW5rZWRDb2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNs
YXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsK
IGVudW0gY2xhc3MgTGlua1RpbWVDb25zdGFudCA6IGludDMyX3Q7CiAKQEAgLTE3NSw2ICsxNzgs
NyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93
bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0K
ICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9D
b25zdGFudEluZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNb
cmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRD
b25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVn
aXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZl
Y3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsg
fQogCkBAIC0yMDcsNiArMjExLDE1IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUg
c2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9k
ZT4obV9zY3JpcHRNb2RlKTsgfQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3Ry
dWN0aW9ucygpIGNvbnN0OworICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5
dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4
KS5wdHIoKTsgfQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0Jl
Z2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGlu
c3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1
Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNFbmQpOworICAgICAgICBy
ZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CisgICAgdW5zaWdu
ZWQgaW5zdHJ1Y3Rpb25zU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLnNpemUo
KTsgfQogCiAgICAgdW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1DYWxsZWVMb2NhbHM7IH0KICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4g
bV9udW1WYXJzOyB9CkBAIC0zMzQsMTAgKzM0NywyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRz
QXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29t
ZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5
IHJ1bi4KKyAgICAgICAgcmV0dXJuICFpc0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KICAgICB2
b2lkIGFsbG9jYXRlU2hhcmVkUHJvZmlsZXMoKTsKICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSYg
dW5saW5rZWRWYWx1ZVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVQcm9m
aWxlc1tpbmRleF07IH0KICAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSYgdW5saW5rZWRBcnJheVBy
b2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlc1tpbmRleF07IH0K
IAorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgYm9vbCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJp
bmdJbXBsKik7CisjZW5kaWYKKworICAgIGludDMyX3QgdGhyZXNob2xkRm9ySklUKGludDMyX3Qg
dGhyZXNob2xkKTsKKwogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3Ry
dWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVH
ZW5lcmF0aW9uTW9kZT4pOwogCkBAIC0zOTcsNiArNDIxLDcgQEAgcHJpdmF0ZToKICAgICB1bnNp
Z25lZCBtX2xleGljYWxTY29wZUZlYXR1cmVzIDogNDsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50
SlNMb2NrIG1fbG9jazsKKyAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX3VubGlua2VkQmFz
ZWxpbmVDb2RlOwogcHJpdmF0ZToKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlcyB7IDAgfTsK
ICAgICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC00MTMsNyArNDM4LDYgQEAgcHJp
dmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rp
b25zOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2
ZW5lc3M7CiAKLQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIERGRzo6RXhpdFByb2ZpbGUgbV9l
eGl0UHJvZmlsZTsKICNlbmRpZgpAQCAtNDU4LDYgKzQ4MiwxNiBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7
CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBw
YykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNv
ZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29k
ZU9mZnNldCk7CisgICAgfQorCisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFBy
b2ZpbGUodW5zaWduZWQgaSkgeyByZXR1cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9Cisg
ICAgVW5hcnlBcml0aFByb2ZpbGUmIHVuYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0
dXJuIG1fdW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNv
dW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50
ZXI7IH0KIAogcHJpdmF0ZToKICAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hN
YXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PjsKQEAgLTQ2NSw4ICs0OTksMTYgQEAg
cHJpdmF0ZToKICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRz
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZl
Y3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgRml4ZWRWZWN0b3I8
VW5saW5rZWRWYWx1ZVByb2ZpbGU+IG1fdmFsdWVQcm9maWxlczsKICAgICBGaXhlZFZlY3RvcjxV
bmxpbmtlZEFycmF5UHJvZmlsZT4gbV9hcnJheVByb2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPEJp
bmFyeUFyaXRoUHJvZmlsZT4gbV9iaW5hcnlBcml0aFByb2ZpbGVzOworICAgIEZpeGVkVmVjdG9y
PFVuYXJ5QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKKworI2lmIEFTU0VSVF9F
TkFCTEVECisgICAgTG9jayBtX2NhY2hlZElkZW50aWZpZXJVaWRzTG9jazsKKyAgICBIYXNoU2V0
PFVuaXF1ZWRTdHJpbmdJbXBsKj4gbV9jYWNoZWRJZGVudGlmaWVyVWlkczsKKyNlbmRpZgogCiBw
cm90ZWN0ZWQ6CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJ
KHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZE1ldGFkYXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTUgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUp
OwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90
IG9mZnNldEluTWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zm
c2V0ID0gbV9pczMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zm
c2V0VGFibGUxNigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAgICBiYXNlVHlwZU9mZnNldCA9
IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25vZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSwg
YmFzZVR5cGVPZmZzZXQpOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2Yo
dHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0K
KwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KICAgICB1bnNpZ25lZCBudW1FbnRy
aWVzKCk7CiAKQEAgLTEwNyw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc19v
ZmZzZXQxNlRhYmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMy
X3Q7CiAgICAgdXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgzMDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NSwxMyArNDUsMTEgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1
Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3Bl
Y0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldElu
ZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3Bl
Y0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQogICAgIHsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCi0g
ICAgICAgICAgICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAg
ICAgICAgY2xlYXJCdWNrZXRzKCk7CiAgICAgfQogICAgIAogICAgIEVuY29kZWRKU1ZhbHVlKiBz
cGVjRmFpbEJ1Y2tldCh1bnNpZ25lZCBpKQpAQCAtNTksNiArNTcsMTIgQEAgc3RydWN0IFZhbHVl
UHJvZmlsZUJhc2UgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZCdWNrZXRzICsgaSA8IHRvdGFs
TnVtYmVyT2ZCdWNrZXRzKTsKICAgICAgICAgcmV0dXJuIG1fYnVja2V0cyArIG51bWJlck9mQnVj
a2V0cyArIGk7CiAgICAgfQorCisgICAgdm9pZCBjbGVhckJ1Y2tldHMoKQorICAgIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCisg
ICAgICAgICAgICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAg
ICB9CiAgICAgCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8odW5zaWduZWQgYnVja2V0
KSBjb25zdAogICAgIHsKQEAgLTEyMyw4ICsxMjcsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFz
ZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlv
biBhbmQgcmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVh
ZAotICAgIC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRU
eXBlIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQog
ICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNr
ZXRzOyArK2kpIHsKQEAgLTEzOSw3ICsxNDEsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7
CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwog
ICAgIEVuY29kZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAg
ICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTYxLDYgKzE2
Myw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0
IFZhbHVlUHJvZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRz
PDA+IHsKICAgICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1
Y2tldHM8MD4oKSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9
CiB9OwogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZh
bHVlUHJvZmlsZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRh
dGEuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJM
RShERkdfSklUKQogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50LmgiCkBAIC0zNCw3ICszNSw5IEBACiAjaW5jbHVkZSAiREZHSnVtcFJl
cGxhY2VtZW50LmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJJbmxpbmVD
YWxsRnJhbWVTZXQuaCIKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJKU0Nhc3Qu
aCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29t
cGlsYXRpb24uaCIKICNpbmNsdWRlICJSZWNvcmRlZFN0YXR1c2VzLmgiCiAjaW5jbHVkZSA8d3Rm
L0JhZy5oPgpAQCAtNzAsNyArNzMsNyBAQCBzdHJ1Y3QgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24g
ewogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fdG87CiB9OwogICAgICAgICAKLWNsYXNzIENv
bW1vbkRhdGEgeworY2xhc3MgQ29tbW9uRGF0YSA6IHB1YmxpYyBNYXRoSUNIb2xkZXIgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENvbW1vbkRhdGEpOwogcHVibGljOgogICAgIENvbW1vbkRh
dGEoKQpAQCAtMTE2LDYgKzExOSw3IEBAIHB1YmxpYzoKICAgICBGaXhlZFZlY3RvcjxDb2RlQmxv
Y2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ+IG1fd2F0Y2hwb2ludHM7CiAgICAgRml4ZWRWZWN0b3I8
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dHM7CiAgICAgRml4ZWRWZWN0b3I8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50PiBtX2FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAg
IFJlY29yZGVkU3RhdHVzZXMgcmVjb3JkZWRTdGF0dXNlczsKICAgICBWZWN0b3I8SnVtcFJlcGxh
Y2VtZW50PiBtX2p1bXBSZXBsYWNlbWVudHM7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5
SklUQ29kZS5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5o
CShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7CiAKK3N0cnVjdCBTaW1wbGVKdW1wVGFibGU7CitzdHJ1
Y3QgU3RyaW5nSnVtcFRhYmxlOworCiBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSklUQ29tcGls
ZXI7CkBAIC0xMDEsNiArMTA0LDggQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8Q29kZU9y
aWdpbj4gZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSBmaW5hbDsKIAogICAgIHVzaW5nIERp
cmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmRm9yREZHOworCisgICAgUENUb0NvZGVPcmln
aW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gY29tbW9uLm1fcGNU
b0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IEpJVENvbXBpbGVyOyAvLyBBbGxvdyBKSVRDb21waWxlciB0byBjYWxsIHNldENvZGVSZWYoKS4K
QEAgLTE0MCw2ICsxNDUsOCBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxCeXRlY29kZUluZGV4LCBU
cmlnZ2VyUmVhc29uPiB0aWVyVXBFbnRyeVRyaWdnZXJzOwogCiAgICAgV3JpdGVCYXJyaWVyPENv
ZGVCbG9jaz4gbV9vc3JFbnRyeUJsb2NrOworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJs
ZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4g
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwogICAgIHVuc2lnbmVkIG9zckVudHJ5UmV0cnk7CiAg
ICAgYm9vbCBhYmFuZG9uT1NSRW50cnk7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNp
b24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSwxMyArMTg1LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAKICAgICBtX2dyYXBoLnJlZ2lzdGVyRnJvemVu
VmFsdWVzKCk7CiAKLSAgICBpZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlz
RW1wdHkoKSB8fCAhbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAg
ICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsK
LSAgICAgICAgaWYgKCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRh
YmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwotICAgIH0KKyAgICBB
U1NFUlQobV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKKyAg
ICBBU1NFUlQobV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKKyAgICBp
ZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgCisgICAgICAg
IG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgaWYgKCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRh
Ymxlcy5pc0VtcHR5KCkpCisgICAgICAgIG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzID0g
V1RGTW92ZShtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7CiAKICAgICBmb3IgKEJhZzxTd2l0
Y2hEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmJlZ2luKCk7ICEh
aXRlcjsgKytpdGVyKSB7CiAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqKml0ZXI7CkBAIC0x
OTksMTIgKzE5OCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtC
CiAgICAgICAgIGNhc2UgU3dpdGNoQ2hhcjoKICAgICAgICAgY2FzZSBTd2l0Y2hJbW06IHsKICAg
ICAgICAgICAgIGlmICghZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBB
U1NFUlQobV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgp
LmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zd2l0Y2hK
dW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2VkU3dpdGNo
SnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3
aXRjaFRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF07
CiAgICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoLmJsb2Nr
LT5pbmRleF0pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua2VkVGFibGUubV9jdGlP
ZmZzZXRzLnNpemUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCkpOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNp
emUoKTsgai0tOykKQEAgLTIxOSwxMiArMjE4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6Omxpbmso
TGlua0J1ZmZlciYgbGlua0IKIAogICAgICAgICBjYXNlIFN3aXRjaFN0cmluZzogewogICAgICAg
ICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VChtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRl
eCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XS5pc0VtcHR5KCkpOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25z
dCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5r
ZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAg
ICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dp
dGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8gY3RpRGVmYXVsdCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEu
ZmFsbFRocm91Z2guYmxvY2stPmluZGV4XSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChs
aW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuc2l6ZSgpID09IHVubGlua2VkVGFibGUubV9vZmZzZXRU
YWJsZS5zaXplKCkgKyAxKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBsaW5rZWRU
YWJsZS5tX2N0aU9mZnNldHMpCkBAIC0zMzMsNyArMzMyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6
bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBD
VG9Db2RlT3JpZ2luTWFwKG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBsaW5rQnVmZmVyKSk7CisgICAgICAgIG1faml0Q29k
ZS0+Y29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2lu
TWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcik7CiB9
CiAKIHN0YXRpYyB2b2lkIGVtaXRTdGFja092ZXJmbG93Q2hlY2soSklUQ29tcGlsZXImIGppdCwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzdGFja092ZXJmbG93KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Nyw3ICs5Nyw2IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSoK
ICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgp
KSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
KTsKLSAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCiAgICAgaWYg
KCFPcHRpb25zOjp1c2VPU1JFbnRyeVRvREZHKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3Miw5ICs3NzIs
NiBAQCB2b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgCiAgICAgLy8gVGhl
IHRhZyByZWdpc3RlcnMgYXJlIG5lZWRlZCB0byBtYXRlcmlhbGl6ZSByZWNvdmVyaWVzIGJlbG93
LgogICAgIGppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCi0gICAgaWYg
KGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKLQogICAgIGlm
IChpbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCkgewogICAgICAgICBFbmNvZGVk
SlNWYWx1ZSogdG1wU2NyYXRjaCA9IHNjcmF0Y2ggKyBvcGVyYW5kcy50bXBJbmRleCgwKTsKICAg
ICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbk1hdGVyaWFsaXplT1NS
RXhpdFNpZGVTdGF0ZSk+KCZ2bSwgJmV4aXQsIHRtcFNjcmF0Y2gpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNw
cAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNp
bmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1
ZGUgIkpJVC5oIgpAQCAtMTE5LDEwICsxMjAsMTAgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKFZN
JiB2bSwgQ0NhbGxIZWxwZQogICAgIGludDMyX3QgY2xpcHBlZFZhbHVlOwogICAgIHN3aXRjaCAo
aml0LmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoK
LSAgICAgICAgY2xpcHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVk
VGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsK
KyAgICAgICAgY2xpcHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVk
VGhyZXNob2xkKHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRUeXBl
OjpGVExKSVQ6Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IFVwcGVyVGllckV4ZWN1dGlvbkNvdW50
ZXI6OmNsaXBwZWRUaHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKSwgdGFy
Z2V0VmFsdWUpOworICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3Vu
dGVyOjpjbGlwcGVkVGhyZXNob2xkKHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTMxMyw2
ICszMTQsMTAgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAg
ICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNl
bGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5t
ZXRhZGF0YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5l
Q29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSKSk7CiAgICAgICAg
ICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29k
ZUJsb2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBjYWxsZWVTYXZlU2xv
dChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjpw
YkdQUikpOworICAgICAgICB9IGVsc2UgaWYgKHRydWVDYWxsZXIpIHsKKyAgICAgICAgICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxv
Y2tGb3IoKnRydWVDYWxsZXIpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJs
ZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywg
SklUOjpzX21ldGFkYXRhR1BSKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5iYXNlbGluZUpJ
VENvbnN0YW50UG9vbCgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGlu
ZUNvZGVCbG9jaywgSklUOjpzX2NvbnN0YW50c0dQUikpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQpAQCAtNDA0LDYgKzQwOSw5IEBAIHZv
aWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSksIExMSW50
OjpSZWdpc3RlcnM6OnBjR1BSKTsKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJl
dGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2Ug
eworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2Nr
Rm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKSwgSklUOjpzX21ldGFkYXRhR1BSKTsKKyAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPmJh
c2VsaW5lSklUQ29uc3RhbnRQb29sKCkpLCBKSVQ6OnNfY29uc3RhbnRzR1BSKTsKKwogICAgICAg
ICBjb2RlQmxvY2tGb3JFeGl0LT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwogCiAgICAgICAg
IEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCgpOwpAQCAtNDIwLDEyICs0MjgsMTYgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0m
IHZtLCBDQ2FsbAogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NS
RXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIAotICAgIGppdC5hZGRQ
dHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFja1BvaW50ZXJPZmZzZXRG
b3IoY29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAg
IGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7CisgICAgICAgIEFTU0VSVCghUmVnaXN0
ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpLmNvbnRhaW5zKExMSW50OjpSZWdpc3RlcnM6
OnBjR1BSKSk7CisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lLCBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0
Y2hHUFIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpKTsKKwogICAgICAgICAvLyBTaW5jZSB3ZSdy
ZSBqdW1waW5nIHRvIG9wX2NhdGNoLCB3ZSBuZWVkIHRvIHNldCBjYWxsRnJhbWVGb3JDYXRjaC4K
ICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2bS5hZGRy
ZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgpKTsKICAgICB9Ci0gICAgCisKKyAgICBqaXQuYWRkUHRy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KGNvZGVCbG9ja0ZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKwogICAg
IGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgR1BS
SW5mbzo6cmVnVDIpOwogICAgIGppdC5mYXJKdW1wKEdQUkluZm86OnJlZ1QyLCBPU1JFeGl0UHRy
VGFnKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg
IkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5o
IgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgog
I2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKQEAgLTI4NjksNyArMjg3MCw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25GaW5kU3cKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
Y29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBBU1NFUlQodmFsdWUuaXNEb3VibGUoKSk7CiAgICAgZG91
YmxlIGFzRG91YmxlID0gdmFsdWUuYXNEb3VibGUoKTsKQEAgLTI4OTAsNyArMjg5MSw3IEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKIAogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5kZmdT
dHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgcmV0dXJuIGxpbmtlZFRhYmxl
LmN0aUZvclZhbHVlKCp1bmxpbmtlZFRhYmxlLCBzdHJJbXBsKS5leGVjdXRhYmxlQWRkcmVzczxj
aGFyKj4oKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MzAsNiArNzMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9k
ZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6
aW5QYWlyKGNhbGxlZVRhZ0dQUiwgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZm
bGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZs
ZURhdGEubnVtUGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7
CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyAr
K2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTg4OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNs
b3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVn
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9
IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0g
ewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAg
ICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAg
ICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWls
Q2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjgsNiAr
ODI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAg
ICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BS
LCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVt
QWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0g
bnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBt
X2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCBpICsgMSk7CkBAIC05NzksNyArOTgwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENh
bGwoTm9kZSogbm9kZQogICAgIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2Vz
OwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxM
aW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKICAg
ICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAg
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JU
YWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcgKzM5
ODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAgIEpJ
VFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5
cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1
c2VkUmVnaXN0ZXJzLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklU
LCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVzZWRS
ZWdpc3RlcnMsCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHByb3BlcnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlkR1BS
UmVnLCBzdHViSW5mb0dQUik7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wg
PSB0cnVlOwogCkBAIC00OTA1LDcgKzQ5MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlVmFsdWVBZGQoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0
LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0
ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFz
ZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJ
VEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuaml0Q29k
ZSgpLT5jb21tb24uYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hp
bmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBh
dGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZDsKICAgICAKQEAgLTQ5ODksNyArNDk4
OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVN1YihOb2QKICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9j
a0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJ
bmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJp
dGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRTdWJJQyog
c3ViSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAg
ICBKSVRTdWJJQyogc3ViSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRTdWJJQyhh
cml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFs
dWVTdWJPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlv
blZhbHVlU3ViOwogCkBAIC01NTcxLDcgKzU1NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlVmFsdWVOZWdhdGUoCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1f
aml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
ICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMu
Ynl0ZWNvZGVJbmRleCgpOwogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBi
YXNlbGluZUNvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVj
b2RlSW5kZXgpOwotICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRK
SVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmppdENv
ZGUoKS0+Y29tbW9uLmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNo
aW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOwogICAgIGF1dG8gbm9u
UmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGU7CiAgICAgY29tcGlsZU1h
dGhJQyhub2RlLCBuZWdJQywgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rp
b24pOwpAQCAtNTgxNSw3ICs1ODE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZh
bHVlTXVsKE5vZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFw
aCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2Rl
SW5kZXgoKTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5l
Q29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5k
ZXgpOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRNdWxJ
Qyhhcml0aFByb2ZpbGUpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1faml0LmppdENvZGUoKS0+
Y29tbW9uLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVu
Y3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGlu
Z0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWw7CiAKQEAgLTE0NzcwLDcgKzE0NzcwLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVS
ZWcgPSBzY29wZS5ncHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0
KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwg
Y2FsbFNpdGVJbmRleCk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hh
ZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihtX2ppdC5jb2RlQmxvY2soKSksIGNhbGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5v
ZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJ
KHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGls
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIGNvbXBpbGUoU3Rh
dGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAKICAgICBpZiAodm0uc2hvdWxkQnVpbGRlclBDVG9D
b2RlT3JpZ2luTWFwcGluZygpKSB7CiAgICAgICAgIEIzOjpQQ1RvT3JpZ2luTWFwIG9yaWdpbk1h
cCA9IHN0YXRlLnByb2MtPnJlbGVhc2VQQ1RvT3JpZ2luTWFwKCk7Ci0gICAgICAgIGNvZGVCbG9j
ay0+c2V0UENUb0NvZGVPcmlnaW5NYXAobWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtLCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmlu
YWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyKSk7CisgICAgICAgIHN0YXRlLmppdENvZGUtPmNvbW1v
bi5tX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtLCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmlu
YWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyKTsKICAgICB9CiAKICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0VudHJ5UHRyVGFnPiBsYWJlbCA9IHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZl
ci0+bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihzdGF0ZS5wcm9jLT5jb2RlKCkuZW50cnlwb2lu
dExhYmVsKDApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShy
ZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsOCBAQCBwdWJsaWM6CiAgICAgREZHOjpDb21t
b25EYXRhKiBkZmdDb21tb24oKSBvdmVycmlkZTsKICAgICBzdGF0aWMgcHRyZGlmZl90IGNvbW1v
bkRhdGFPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklUQ29kZSwgY29tbW9uKTsg
fQogICAgIHZvaWQgc2hyaW5rVG9GaXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikgb3ZlcnJp
ZGU7CisKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlk
ZSB7IHJldHVybiBjb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQogICAgIAogICAg
IERGRzo6Q29tbW9uRGF0YSBjb21tb247CiAgICAgVmVjdG9yPE9TUkV4aXQ+IG1fb3NyRXhpdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMjgzMDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIsMTQgKzUyLDYgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKIAogICAgIGdyYXBo
LnJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7CiAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHsKLSAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAg
ICAgIEFTU0VSVChjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+ZW5zdXJl
SklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpOwotICAgIH0KLSNl
bmRpZgotCiAgICAgLy8gQ3JlYXRlIHRoZSBlbnRyeXBvaW50LiBOb3RlIHRoYXQgd2UgdXNlIHRo
aXMgZW50cnlwb2ludCB0b3RhbGx5IGRpZmZlcmVudGx5CiAgICAgLy8gZGVwZW5kaW5nIG9uIHdo
ZXRoZXIgd2UncmUgZG9pbmcgT1NSIGVudHJ5IG9yIG5vdC4KICAgICBDQ2FsbEhlbHBlcnMgaml0
KGNvZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDcgQEAK
ICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgog
I2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgi
CiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmgiCiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKQEAgLTIzMjAsNiArMjMy
MSwxOCBAQCBwcml2YXRlOgogICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVFN1YkdlbmVy
YXRvcj4oYXJpdGhQcm9maWxlLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5j
dGlvbik7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRB
ZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVEFkZElDKiBhZGRNYXRo
SUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkg
eyByZXR1cm4gY29tbW9uLmFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAg
ICBzdGF0aWMgSklUTXVsSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmlu
YXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUTXVsSUMocHJv
ZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVROZWdJQyogYWRkTWF0aElDKERG
Rzo6Q29tbW9uRGF0YSYgY29tbW9uLCBVbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1
cm4gY29tbW9uLmFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNf
c2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0
aWMgSklUU3ViSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUU3ViSUMocHJvZmlsZSk7
IH0KKwogICAgIHZvaWQgY29tcGlsZVZhbHVlTXVsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5z
ZW1hbnRpYyk7CkBAIC0yMzkxLDcgKzI0MDQsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAg
ICAgICAgICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUgPSBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAg
ICAgSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5h
ZGRNYXRoSUM8R2VuZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVFVu
YXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRl
LT5qaXRDb2RlLT5jb21tb24sIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElD
LT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLCBK
U1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKIAogICAg
ICAgICAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwpAQCAtMjUwMCw3
ICsyNTEzLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVy
YXRpb25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxH
ZW5lcmF0b3I+KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+
KGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRv
cj4qIG1hdGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRDb2RlLT5jb21tb24s
IGFyaXRoUHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdl
bmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0u
Z3ByKCkpLAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkp
LCBKU1ZhbHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkpLCBwYXJhbXMuZnBTY3JhdGNoKDApLAogICAg
ICAgICAgICAgICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDAp
KTsKQEAgLTQzMTcsNyArNDMzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1
YkluZm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5n
cFNjcmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRv
ciA9IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBq
aXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxs
U2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAgICAgICAgICAgICBqaXQuY29k
ZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUlu
ZGV4LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAgICAgICAgICAgICAgICBwYXJhbXMu
dW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHVi
SW5mb0dQUik7CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJ
c1N5bWJvbCA9IHRydWU7CkBAIC0xMDI4NSw2ICsxMDI5OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1BbGxv
Y2F0ZWRBcmdzOyArK2kpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdz
LmFwcGVuZChWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOwor
ICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVC
bG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
LnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
PSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhzZW1hbnRpY05vZGVPcmlnaW4pOwpA
QCAtMTA0NDMsMTMgKzEwNDU3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLmFyZ3MuYXBwZW5kKHBhcmFtc1sxICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkp
OwogCiAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bUFyZ3M7
CisgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwog
CiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJs
b2NrKCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdU
MCk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93
UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpy
ZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNo
dWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1
ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAg
ICAgICAgfSk7CkBAIC0xMDc5Miw3ICsxMDgwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewot
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxs
RmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZd
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTExMDczLDcgKzExMDg4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChp
c1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVn
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUklu
Zm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFp
bENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgz
MDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MTMsMjggKzQxMywxNiBAQCBzdGF0aWMgdm9pZCBjb21waWxl
U3R1YihWTSYgdm0sIHVuc2lnbmVkCiAKICAgICBSZWdpc3RlclNldCBhbGxGVExDYWxsZWVTYXZl
cyA9IFJlZ2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAgICAgY29uc3QgUmVn
aXN0ZXJBdE9mZnNldExpc3QqIGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9j
ay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiB2bUNh
bGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwot
ICAgIFJlZ2lzdGVyU2V0IHZtQ2FsbGVlU2F2ZXNUb1NraXAgPSBSZWdpc3RlclNldDo6c3RhY2tS
ZWdpc3RlcnMoKTsKLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAg
ICBqaXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAg
ICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxl
ZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICB9CiAK
ICAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVn
ID0gcmVnLm5leHQoKSkgewogICAgICAgICBpZiAoIWFsbEZUTENhbGxlZVNhdmVzLmdldChyZWcp
KSB7Ci0gICAgICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghdm1DYWxsZWVTYXZlcy0+ZmluZChyZWcpKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVkIHVud2luZEluZGV4
ID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCktPmluZGV4T2YocmVnKTsKICAgICAg
ICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldCogYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA9IGJhc2Vs
aW5lQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKTsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCogdm1D
YWxsZWVTYXZlID0gbnVsbHB0cjsgCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxl
cigpKQotICAgICAgICAgICAgdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChyZWcp
OwogCiAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkgewogICAgICAgICAgICAgR1BSUmVnIHJlZ1Rv
TG9hZCA9IGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPyBHUFJJbmZvOjpyZWdUMCA6IHJlZy5ncHIo
KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1RvTG9hZCAhPSBHUFJJbmZvOjpyZWdU
MSk7CiAKICAgICAgICAgICAgIGlmICh1bndpbmRJbmRleCA9PSBVSU5UX01BWCkgewogICAgICAg
ICAgICAgICAgIC8vIFRoZSBGVEwgY29tcGlsYXRpb24gZGlkbid0IHByZXNlcnZlIHRoaXMgcmVn
aXN0ZXIuIFRoaXMgbWVhbnMgdGhhdCBpdCBhbHNvCkBAIC00NTIsOCArNDQwLDYgQEAgc3RhdGlj
IHZvaWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAogCiAgICAgICAgICAgICBpZiAoYmFz
ZWxpbmVSZWdpc3Rlck9mZnNldCkKICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xv
YWQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJS
ZWdpc3RlciwgYmFzZWxpbmVSZWdpc3Rlck9mZnNldC0+b2Zmc2V0KCkpKTsKLSAgICAgICAgICAg
IGlmICh2bUNhbGxlZVNhdmUgJiYgIXZtQ2FsbGVlU2F2ZXNUb1NraXAuZ2V0KHZtQ2FsbGVlU2F2
ZS0+cmVnKCkpKQotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHJlZ1RvTG9hZCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkp
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEZQUlJlZyBmcFJlZ1RvTG9hZCA9IGJh
c2VsaW5lUmVnaXN0ZXJPZmZzZXQgPyBGUFJJbmZvOjpmcFJlZ1QwIDogcmVnLmZwcigpOwogCkBA
IC00NjQsMTkgKzQ1MCw5IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWdu
ZWQKIAogICAgICAgICAgICAgaWYgKGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAg
ICAgICAgaml0LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0ZXJP
ZmZzZXQtPm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAodm1DYWxsZWVTYXZlICYmICF2bUNh
bGxlZVNhdmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNhdmUtPnJlZygpKSkKLSAgICAgICAgICAgICAg
ICBqaXQuc3RvcmVEb3VibGUoZnBSZWdUb0xvYWQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQ
UkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICBSZWdpc3Rl
ckF0T2Zmc2V0KiB2bUNhbGxlZVNhdmUgPSB2bUNhbGxlZVNhdmVzLT5maW5kKEdQUkluZm86Om51
bWJlclRhZ1JlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6bnVtYmVyVGFn
UmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxl
ZVNhdmUtPm9mZnNldCgpKSk7Ci0KLSAgICAgICAgdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZl
cy0+ZmluZChHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3Jl
NjQoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKLSAgICB9Ci0KICAgICBz
aXplX3QgYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNv
ZGVCbG9jay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAKICAgICBpZiAo
ZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShy
ZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFk
YXRhLnJiCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjggQEAgY2xhc3MgTWV0YWRhdGEK
ICAgICBkZWYgc3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAg
ZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBnZW5lcmF0ZU9m
ZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKKyAgICAgICAgICAgIGZpZWxkTmFt
ZXMubWFwIGRvIHxmaWVsZE5hbWV8CisgICAgICAgICAgICAgICAgIiN7cHJlZml4fXN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0o
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fI3tmaWVsZE5hbWV9KTsgfSIK
KyAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisgICAgICAgIGVuZAorCisgICAgICAgIGRlZiBj
b252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBmaWVsZE5hbWVzKQogICAgICAgICAgICAgZmll
bGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29m
PyBIYXNoCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRG
aWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAg
ICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAg
JywgdHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZpeH19OyIKICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkLnRv
X3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmllbGQudG9fcworICAgICAg
ICAgICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2goZmllbGROYW1lKQorICAgICAgICAgICAgICAg
ICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZE5hbWV9OyIKICAgICAgICAgICAg
ICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVuZAogCi0gICAg
ICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcykKKyAgICAgICAg
ZmllbGROYW1lcyA9IFtdCisgICAgICAgIHByZWZpeCA9ICIgICAgICAgICIKKyAgICAgICAgZmll
bGRzID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBmaWVsZHMsIGZpZWxkTmFtZXMpCisgICAgICAg
IGZpZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZp
eCwgZmllbGROYW1lcykKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBpZiBAaW5pdGlh
bGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2Nyw2ICszNjcsMjggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRQcm9w
ZXJ0eShHUFJSZQogICAgICAgICByZXN1bHQpOwogfQogCit2b2lkIEFzc2VtYmx5SGVscGVyczo6
c3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9m
ZnNldCwgR1BSUmVnIHNjcmF0Y2gpCit7CisgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExl
c3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAg
IAorICAgIGxvYWRQdHIoQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2gpOworICAgIG5lZzMyKG9mZnNldCk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIo
b2Zmc2V0LCBvZmZzZXQpOworICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CisgICAgCisgICAgaXNJ
bmxpbmUubGluayh0aGlzKTsKKyAgICBhZGRQdHIoCisgICAgICAgIFRydXN0ZWRJbW0zMigKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihKU09iamVjdCkpIC0KKyAgICAg
ICAgICAgIChzdGF0aWNfY2FzdDxpbnQzMl90PihmaXJzdE91dE9mTGluZU9mZnNldCkgLSAyKSAq
IHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSwKKyAgICAgICAg
b2JqZWN0LCBzY3JhdGNoKTsKKyAgICAKKyAgICByZWFkeS5saW5rKHRoaXMpOworICAgIAorICAg
IHN0b3JlVmFsdWUodmFsdWUsCisgICAgICAgIEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdExvYWRTdHJ1Y3R1cmUoVk0m
IHZtLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0
Y2gpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY5OCw4ICs3MjAsMTMgQEAgdm9pZCBBc3Nl
bWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6
ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bExpbmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5m
bzo6cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZv
OjpyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2
bSwgaW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRo
b3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2Fs
bCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MzAxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzNCw4ICsyMzQsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAgCi0g
ICAgLy8gTm90ZSB0aGF0IHRoaXMgY2xvYmJlcnMgb2Zmc2V0LgorICAgIC8vIE5vdGUgdGhhdCB0
aGVzZSBjbG9iYmVyIG9mZnNldC4KICAgICB2b2lkIGxvYWRQcm9wZXJ0eShHUFJSZWcgb2JqZWN0
LCBHUFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpOworICAgIHZvaWQgc3RvcmVQcm9w
ZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNldCwgR1BS
UmVnIHNjcmF0Y2gpOwogCiAgICAgdm9pZCBtb3ZlVmFsdWVSZWdzKEpTVmFsdWVSZWdzIHNyY1Jl
Z3MsIEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAgIHsKQEAgLTM3OSwxNSArMzgwLDI2IEBAIHB1
YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUsIEdQUlJlZyBz
Y3JhdGNoKQorICAgIHsKKyNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAK
KyAgICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwgc2NyYXRjaCk7CisgICAgICAgIGNvcHlD
YWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChzY3JhdGNoKTsKKyNl
bHNlCisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKHNjcmF0Y2gpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2
ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlGcmFt
ZSkKICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAg
ICAgIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH07CiAgICAgICAgIEdQUlJlZyB0ZW1wMSA9IHVz
ZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFt
ZSwgdGVtcDEpOwotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlckltcGwodGVtcDEpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CiAjZWxzZQogICAgICAgICBV
TlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRy
eUZyYW1lKTsKICNlbmRpZgogICAgIH0KICAgICAKQEAgLTE3MjAsNiArMTczMiw3IEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9i
amVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1v
dmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOwogICAgIAogICAgIHZvaWQgbWFr
ZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9y
Q0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklU
Q29kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNl
bGluZUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgorCisjaW5jbHVkZSAiSklUTWF0aElDLmgi
CisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK0pJVEFkZElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElD
KEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX2FkZElDcy5hZGQo
YXJpdGhQcm9maWxlKTsgfQorSklUTXVsSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTXVsSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0
aFByb2ZpbGUpOyB9CitKSVRTdWJJQyogTWF0aElDSG9sZGVyOjphZGRKSVRTdWJJQyhCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJv
ZmlsZSk7IH0KK0pJVE5lZ0lDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUp
OyB9CisKK3ZvaWQgTWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhl
cikKK3sKKyAgICBtX2FkZElDcyA9IFdURk1vdmUob3RoZXIubV9hZGRJQ3MpOworICAgIG1fbXVs
SUNzID0gV1RGTW92ZShvdGhlci5tX211bElDcyk7CisgICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90
aGVyLm1fbmVnSUNzKTsKKyAgICBtX3N1YklDcyA9IFdURk1vdmUob3RoZXIubV9zdWJJQ3MpOwor
fQorCitCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJU
YWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spCisgICAgOiBE
aXJlY3RKSVRDb2RlKFdURk1vdmUoY29kZSksIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCkKKyAgICAsIE1hdGhJQ0hvbGRlcigpCit7IH0KKworQmFzZWxpbmVKSVRDb2RlOjp+
QmFzZWxpbmVKSVRDb2RlKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgor
I2luY2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRlICJKSVRDb2RlTWFwLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBCaW5hcnlBcml0aFByb2ZpbGU7CitjbGFzcyBVbmFyeUFyaXRoUHJv
ZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFNpbXBsZUp1
bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKK2NsYXNzIE1hdGhJQ0hvbGRlciB7
CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcik7Cisg
ICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVE11
bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRTdWJJQyogYWRk
SklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lD
KFVuYXJ5QXJpdGhQcm9maWxlKik7CisKK3ByaXZhdGU6CisgICAgQmFnPEpJVEFkZElDPiBtX2Fk
ZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4gbV9u
ZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKK307CisKK2NsYXNzIEpJVENvbnN0
YW50UG9vbCB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29uc3RhbnQgPSB1bnNpZ25lZDsKKworICAg
IGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBHbG9iYWxPYmplY3QsCisgICAg
ICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8sCisgICAgICAgIEZ1
bmN0aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rpb25FeHByLAorICAgIH07CisKKyAgICBzdHJ1Y3Qg
VmFsdWUgeworICAgICAgICBUeXBlIHR5cGU7CisgICAgICAgIFBhY2tlZFB0cjx2b2lkPiBwYXls
b2FkOworICAgIH07CisKKyAgICBKSVRDb25zdGFudFBvb2woKSA9IGRlZmF1bHQ7CisgICAgSklU
Q29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3Rh
bnRQb29sJiBvcGVyYXRvcj0oSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKworICAgIENv
bnN0YW50IGFkZChUeXBlIHR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxscHRyKQorICAgIHsKKyAg
ICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudHMuc2l6ZSgpOworICAgICAgICBtX2Nv
bnN0YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBlLCBwYXlsb2FkIH0pOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb25z
dGFudHMuc2l6ZSgpOyB9CisgICAgVmFsdWUgYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRzW2ldOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50
czsKK307CisKKworY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUs
IHB1YmxpYyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIEJhc2VsaW5lSklUQ29kZShDb2Rl
UmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5
Q2hlY2spOworICAgIH5CYXNlbGluZUpJVENvZGUoKSBvdmVycmlkZTsKKyAgICBQQ1RvQ29kZU9y
aWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBtX3BjVG9Db2Rl
T3JpZ2luTWFwLmdldCgpOyB9CisKKyAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5s
aW5rZWRDYWxsczsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOwor
ICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOwor
ICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAg
IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwor
ICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0
YW50UG9vbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0Nv
ZGVPcmlnaW5NYXA7CisgICAgYm9vbCBtX2lzU2hhcmVhYmxlIHsgdHJ1ZSB9OworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5l
SklUUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNl
bGluZUpJVFBsYW4uY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcg
QEAgc2l6ZV90IEJhc2VsaW5lSklUUGxhbjo6Y29kZVNpemUoKSBjb25zdAogCiBDb21waWxhdGlv
blJlc3VsdCBCYXNlbGluZUpJVFBsYW46OmZpbmFsaXplKCkKIHsKLSAgICBDb21waWxhdGlvblJl
c3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgIENvbXBpbGF0
aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKG1fY29kZUJsb2Nr
KTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CiAg
ICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUi
LCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQz
LDYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sbwogICAgIHN0b3Jl
UHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0No
aWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CiB9CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFk
b3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlz
UmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4KQotewotICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgZnJhbWUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Ci0gICAgc3RvcmVWYWx1ZSh0
aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKLSAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3Bl
KSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9j
aykpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBjYWxsU2l0ZUluZGV4KSkpOwotfQotCiB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93
Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNo
MU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAgIFNoYWRvd0NoaWNrZW4qIHNoYWRv
d0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCk7CkBAIC03Miw2ICs2MiwyOCBAQCB2b2lkIEND
YWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhCiAgICAgc3RvcmVQdHIoc2NyYXRjaDIs
IEFkZHJlc3Moc2NyYXRjaDFOb25BcmdHUFIpKTsKIH0KIAorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q29kZUJsb2NrVHlwZT4KK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJl
ZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleCkKK3sKKyAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZy
YW1lKSkpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0
Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOworICAgIHN0b3JlVmFsdWUodGhpc1JlZ3Ms
IEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFj
a2V0LCB0aGlzVmFsdWUpKSk7CisgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFj
a2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKKyAg
ICBzdG9yZVB0cihjb2RlQmxvY2ssIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7CisgICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKK30K
Kwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJ
bW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9n
U2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3Bl
LCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9n
U2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3Mg
dGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFk
b3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30K
Kwogdm9pZCBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNJbnRlcm5hbFB0clRhZz4gd2hlcmUsIFNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVy
cyYpPiBlbWl0Q29kZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pCiB7CiAgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAko
cmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtODQwLDcgKzg0MCwxNCBAQCBwdWJsaWM6CiAgICAgLy8g
VGhlc2Ugb3BlcmF0aW9ucyBjbG9iYmVyIGFsbCB2b2xhdGlsZSByZWdpc3RlcnMuIFRoZXkgYXNz
dW1lIHRoYXQgdGhlcmUgaXMgcm9vbSBvbiB0aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sgdG8gbWFy
c2hhbGwgY2FsbCBhcmd1bWVudHMuCiAgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQ
YWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NvcGUp
OwotICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tl
dCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNp
dGVJbmRleCk7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5
cGU+CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRv
d1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlw
ZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CitwdWJsaWM6CisgICAg
dm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1Zh
bHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJS
ZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7
CisKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEgcG9pbnRlciB0byB0aGUgUGFja2V0IHdlIHNob3Vs
ZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQuCiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlja2Vu
UGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BS
LCBHUFJSZWcgc2NyYXRjaDIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDggKzM3LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIENhbGxGcmFt
ZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCiB7CisgICAgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvZGVCbG9jay0+Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxs
ZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVM
b2NhdGlvbnMpCit7CiAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycyB7IFJlZ2lz
dGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB9OwotICAgIGNvbnN0IFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJTYXZlTG9j
YXRpb25zLT5zaXplKCk7ICsraSkgewogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5IHsg
cmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChpKSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkocmV2aXNpb24gMjgzMDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywxMSArNDMsMTMgQEAgcHVibGljOgogICAgIFZlY3RvcjxWYWx1ZVJl
Y292ZXJ5PiBhcmdzOwogICAgIHVuc2lnbmVkIG51bUxvY2FscyB7IFVJTlRfTUFYIH07CiAgICAg
dW5zaWduZWQgbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbnVtUGFy
YW1ldGVycyB7IFVJTlRfTUFYIH07IC8vIE9uIG91ciBtYWNoaW5lIGZyYW1lLgogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJNYXA8VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOwogICAg
IEdQUlJlZyBudW1iZXJUYWdSZWdpc3RlciB7IEludmFsaWRHUFJSZWcgfTsKIAogICAgIHZvaWQg
c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayopOworICAgIHZvaWQgc2V0dXBDYWxs
ZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0Kik7CiAjZW5kaWYKICAg
ICBWYWx1ZVJlY292ZXJ5IGNhbGxlZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDEzICszOCwxMyBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZs
ZXIoQ0NhCiAgICAgOiBtX2ppdChqaXQpCiAgICAgLCBtX29sZEZyYW1lKGRhdGEubnVtTG9jYWxz
ICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQogICAgICwgbV9u
ZXdGcmFtZShkYXRhLmFyZ3Muc2l6ZSgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3Rl
cnMsIG51bGxwdHIpCi0gICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnMKLSAgICAgICAgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJh
bWUoaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpKQorICAgICwgbV9hbGlnbmVkT2xk
RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgcm91bmRBcmd1bWVu
dENvdW50VG9BbGlnbkZyYW1lKGRhdGEubnVtUGFyYW1ldGVycykpCiAgICAgLCBtX2FsaWduZWRO
ZXdGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMKICAgICAgICAgKyBy
b3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5hcmdzLnNpemUoKSkpCiAgICAgLCBt
X2ZyYW1lRGVsdGEobV9hbGlnbmVkTmV3RnJhbWVTaXplIC0gbV9hbGlnbmVkT2xkRnJhbWVTaXpl
KQogICAgICwgbV9sb2NrZWRSZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpKQog
ICAgICwgbV9udW1QYXNzZWRBcmdzKGRhdGEubnVtUGFzc2VkQXJncykKKyAgICAsIG1fbnVtUGFy
YW1ldGVycyhkYXRhLm51bVBhcmFtZXRlcnMpCiB7CiAgICAgLy8gV2UgYXJlIGFsbG93ZWQgYWxs
IHRoZSB1c3VhbCByZWdpc3RlcnMuLi4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVyczsgaS0tOyApCkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBDYWxsRnJh
bWVTaHVmZmxlcjo6cHJlcGFyZUZvclRhaWxDYQogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpICsgUGF5bG9hZE9mZnNldCksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBhcmd1bWVudENvdW50T0sgPQogICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBtX25ld0ZyYW1lQmFzZSwKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX251bVBh
cmFtZXRlcnMpKTsKICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkgLSAxICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnMpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigtc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSksIG1fbmV3RnJhbWVC
YXNlKTsKICAgICBtX2ppdC5tdWwzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVv
ZihSZWdpc3RlcikpLCBtX25ld0ZyYW1lQmFzZSwgbV9uZXdGcmFtZUJhc2UpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkocmV2aXNpb24g
MjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDcgQEAgcHVibGljOgogICAgICAgICBDYWxs
RnJhbWVTaHVmZmxlRGF0YSBkYXRhOwogICAgICAgICBkYXRhLm51bUxvY2FscyA9IG51bUxvY2Fs
cygpOwogICAgICAgICBkYXRhLm51bVBhc3NlZEFyZ3MgPSBtX251bVBhc3NlZEFyZ3M7CisgICAg
ICAgIGRhdGEubnVtUGFyYW1ldGVycyA9IG1fbnVtUGFyYW1ldGVyczsKICAgICAgICAgZGF0YS5j
YWxsZWUgPSBnZXROZXcoVmlydHVhbFJlZ2lzdGVyIHsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIH0p
LT5yZWNvdmVyeSgpOwogICAgICAgICBkYXRhLmFyZ3MucmVzaXplKGFyZ0NvdW50KCkpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50KCk7ICsraSkKQEAgLTc5OCw2ICs3
OTksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcGVyZm9ybVNhZmVXcml0ZXMoKTsKICAgICAKICAg
ICB1bnNpZ25lZCBtX251bVBhc3NlZEFyZ3MgeyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG1f
bnVtUGFyYW1ldGVycyB7IFVJTlRfTUFYIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjks
NyBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BCiB9CiAKIEpJVDo6
SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQor
ICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBudWxscHRyKQogICAgICwgbV9pbnRlcnByZXRlcih2
bS5pbnRlcnByZXRlcikKICAgICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKICAgICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
KHZtKQpAQCAtNzcsNiArNzcsOSBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX2xvb3BP
U1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKKyAgICBt
X2dsb2JhbE9iamVjdENvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6R2xvYmFsT2JqZWN0KTsKKyAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrID0gY29kZUJs
b2NrOworICAgIG1fdW5saW5rZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJs
b2NrKCk7CiB9CiAKIEpJVDo6fkpJVCgpCkBAIC05MCw4ICs5Myw4IEBAIHZvaWQgSklUOjplbWl0
RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAgICAgICAgIHJldHVybjsKIAogICAgIEp1bXBMaXN0
IHNraXBPcHRpbWl6ZTsKLSAgICAKLSAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMy
KFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRG
b3JFbnRyeSgpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVj
dXRlQ291bnRlcigpKSkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMCk7CisgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihT
aWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9y
RW50cnkoKSksIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291
bnRlcigpKSkpOwogICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKIAogICAg
IGNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTExMywyOCArMTE2
LDQwIEBAIHZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCoKICAgICBhZGRT
bG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCkKK3ZvaWQgSklUOjplbWl0Tm90aWZ5
V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpCiB7CisgICAgYXV0byBvayA9IGJy
YW5jaFRlc3RQdHIoWmVybywgcG9pbnRlclRvU2V0KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2g4
KE5vdEVxdWFsLCBBZGRyZXNzKHBvaW50ZXJUb1NldCwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgb2subGluayh0aGlz
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKQordm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xv
YmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhclJlYWRPbmx5V2F0Y2hwb2ludCgpLT5hZGRyZXNz
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgaWYgKHJlc29s
dmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9i
YWxPYmplY3QsIG1fdmFyUmVhZE9ubHlXYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9p
bnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwor
ICAgIH0KIH0KIAogdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiB7Ci0gICAg
aWYgKCFBU1NFUlRfRU5BQkxFRCkKKyAgICAvLyBPT1BTCisgICAgaWYgKCFBU1NFUlRfRU5BQkxF
RCAmJiBmYWxzZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihF
cXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAg
ICAgb2subGluayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6OnJlc2V0U1AoKQoreworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKK30KKwogI2RlZmluZSBO
RVhUX09QQ09ERShuYW1lKSBcCiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IFwK
ICAgICBicmVhazsKQEAgLTE4MSw2MSArMTk2LDQ0IEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VD
YWxsKGNvbnN0IEluc3RydWMKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJ
VDo6ZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5j
dGlvbkNvZGUpOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8g
aGFzRXhlY3V0YWJsZSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZXN1bHQsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpLCByZXN1bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0
aGlzKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9m
Q29kZUJsb2NrRm9yQ29uc3RydWN0KCkpLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9j
a0ZvckNhbGwoKSksIHJlc3VsdCk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpvZmZzZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAg
ICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spOworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNv
bnRleHQmIGN0eCkgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxs
RnJhbWUqPigpLT5jb2RlQmxvY2soKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIH0pOworI2VuZGlmCit9
CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKICAgICBpZiAoSklUSW50
ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxv
Y2ssICJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fcHJvZmlsZWRDb2Rl
QmxvY2ssICJcbiIpOwogICAgIAogICAgIGppdEFzc2VydFRhZ3NJblBsYWNlKCk7CiAgICAgaml0
QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsKICAgICAKLSAgICBhdXRvJiBpbnN0cnVjdGlvbnMg
PSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25D
b3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgYXV0byYgaW5z
dHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7CisgICAgdW5z
aWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLnNpemUoKTsKIAogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwogCi0gICAgVk0mIHZt
ID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgQnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5k
ZXgoMCk7Ci0gICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxv
Y2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJp
dHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0pKSkgewotICAgICAgICAvLyBXZSBjYW4gb25s
eSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9j
aydzIGV4YWN0bHkgb25jZS4KLSAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUg
aW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8K
LSAgICAgICAgLy8gZG8gT1NSIGVudHJ5IGludG8gdGhlIGJhc2VsaW5lIEpJVCBpbiBhIGxvb3As
IGl0IHdpbGwgcGFzcyBpbiB0aGUgYnl0ZWNvZGUgb2Zmc2V0IGl0Ci0gICAgICAgIC8vIHdhcyBl
eGVjdXRpbmcgYXQgd2hlbiBpdCBraWNrZWQgb2ZmIG91ciBjb21waWxhdGlvbi4gV2Ugb25seSBu
ZWVkIHRvIGNvbXBpbGUgY29kZSBmb3IKLSAgICAgICAgLy8gYW55dGhpbmcgcmVhY2hhYmxlIGZy
b20gdGhhdCBieXRlY29kZSBvZmZzZXQuCi0KLSAgICAgICAgLy8gV2Ugb25seSBib3RoZXIgYnVp
bGRpbmcgdGhlIGJ5dGVjb2RlIGdyYXBoIGlmIGl0IGNvdWxkIHNhdmUgdGltZSBhbmQgZXhlY3V0
YWJsZQotICAgICAgICAvLyBtZW1vcnkuIFdlIHBpY2sgYW4gYXJiaXRyYXJ5IG9mZnNldCB3aGVy
ZSB3ZSBkZWVtIHRoaXMgaXMgcHJvZml0YWJsZS4KLSAgICAgICAgaWYgKG1fbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAyMDApIHsKLSAgICAgICAgICAgIC8vIEFzIGEgc2lt
cGxpZmljYXRpb24sIHdlIGRvbid0IGZpbmQgYWxsIGJ5dGVjb2RlIHJhbmdlcyB0aGF0IGFyZSB1
bnJlYWNoYWJsZS4KLSAgICAgICAgICAgIC8vIEluc3RlYWQsIHdlIGp1c3QgZmluZCB0aGUgbWlu
aW11bSBieXRlY29kZSBvZmZzZXQgdGhhdCBpcyByZWFjaGFibGUsIGFuZAotICAgICAgICAgICAg
Ly8gY29tcGlsZSBjb2RlIGZyb20gdGhhdCBieXRlY29kZSBvZmZzZXQgb253YXJkcy4KLQotICAg
ICAgICAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBn
cmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jayk7Ci0K
LSAgICAgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PEJ5dGVjb2RlQmFzaWNCbG9jayo+IHdvcmts
aXN0OwotICAgICAgICAgICAgc3RhcnRCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOwot
ICAgICAgICAgICAgd29ya2xpc3QucHVzaChibG9jayk7Ci0KLSAgICAgICAgICAgIHdoaWxlIChC
eXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKLSAgICAgICAgICAg
ICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KHN0ZDo6bWluKHN0YXJ0Qnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSwgYmxvY2stPmxlYWRlck9mZnNldCgpKSk7Ci0gICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA6IGJsb2NrLT5zdWNjZXNzb3JzKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goJmdyYXBoW3N1Y2Nlc3NvckluZGV4
XSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBBbHNvIGFkZCBjYXRjaCBibG9ja3MgZm9yIGJ5dGVj
b2RlcyB0aGF0IHRocm93LgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVy
T2ZFeGNlcHRpb25IYW5kbGVycygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+bGVhZGVyT2Zmc2V0KCk7IGJ5dGVjb2RlT2Zmc2V0
IDwgYmxvY2stPmxlYWRlck9mZnNldCgpICsgYmxvY2stPnRvdGFsTGVuZ3RoKCk7KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5
dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBoYW5kbGVy
ID0gbV9jb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVPZmZzZXQpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNo
KGdyYXBoLmZpbmRCYXNpY0Jsb2NrV2l0aExlYWRlck9mZnNldChoYW5kbGVyLT50YXJnZXQpKTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gaW5zdHJ1Y3Rpb24t
PnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Ns
b3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4
LDEyICsyNzYsMTUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwog
ICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigp
KSkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAg
ICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAg
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29k
ZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zm
c2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4
LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAK
KyAgICAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhdGNoKQorICAgICAgICAgICAgYXNzZXJ0U3Rh
Y2tQb2ludGVyT2Zmc2V0KCk7CisKICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgICAg
ICBERUZJTkVfU0xPV19PUChsZXNzKQogICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzZXEpCkBA
IC01MjcsNyArNTI4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAog
ICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKLSAgICAg
ICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dMbigiQmFzZWxp
bmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgIiwgbV9ieXRlY29kZUluZGV4LCAiIGF0IG9m
ZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgpKTsKQEAgLTU0NSw4ICs1NDYsOCBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURl
YnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gU0xPVyAiLCBv
cGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAg
IiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC02MDMsNyArNjA0
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX2RlbF9ieV92YWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9kZWxfYnlfaWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9zdWIpCi0jaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZnJvbV9zY29wZSkKICNlbmRpZgogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfcHV0X3RvX3Njb3BlKQpAQCAtNjc0LDU1ICs2NzUsNTUgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCit2b2lkIEpJVDo6
ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKQoreworICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJs
ZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25z
dGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpCit7Cisg
ICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCiB2b2lkIEpJVDo6Y29t
cGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJp
bGl0eUxldmVsKCk7CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAg
Y2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxz
ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBt
X3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBE
Rkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAg
ICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJ
bmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAgIHN3aXRjaCAobV9jb2Rl
QmxvY2stPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1
bGVDb2RlOgotICAgIGNhc2UgRXZhbENvZGU6Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3Vs
ZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0
aW9uQ29kZToKLSAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxz
ZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgotICAgICAgICAvLyBE
b24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgotICAgICAgICBtX2NvZGVCbG9jay0+bV9z
aG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5s
aW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwotICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICBp
ZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9j
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAg
ICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygp
KQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRj
aEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5u
dW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJs
b2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAg
ICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Cisg
ICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVt
cFRhYmxlcygpKQorICAgICAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8
U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dp
dGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJl
ck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwog
ICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAo
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxp
bmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxK
SVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRp
b25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBvZmYgb2YgVW5saW5rZWRDb2RlQmxvY2suCisgICAg
ICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fcHJvZmls
ZWRDb2RlQmxvY2spOworICAgIH0KICAgICBpZiAoVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29k
ZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBGSVhNRTogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1i
bGVyIG9mZiBVbmxpbmtlZENvZGVCbG9jay4KICAgICAgICAgbV9jb21waWxhdGlvbiA9IGFkb3B0
UmVmKAogICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbigKLSAgICAgICAgICAg
ICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2Nv
ZGVCbG9jayksCisgICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5l
bnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVCbG9jayksCiAgICAgICAgICAgICAgICAg
UHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVk
Qnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAg
ICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0
ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAogICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihC
eXRlY29kZUluZGV4KDApKSk7CkBAIC03NDIsMTEgKzc0MywxMiBAQCB2b2lkIEpJVDo6Y29tcGls
ZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ss
IENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9G
cmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAKLSAgICBp
bnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVu
c2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBK
dW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzU3LDE2ICs3NTksMjAgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgZW1p
dFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVy
QXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBl
bWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOworICAgIGVtaXRNYXRlcmlhbGl6ZU1l
dGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKLSAgICBpZiAobV9jb2RlQmxvY2st
PmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRl
Y29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpICYmICghbV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1f
dW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA+IDEpKSB7CisgICAgICAgICAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJl
Z1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4ZWRWZWN0b3I8VmFsdWVQcm9maWxlPjo6
b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
YXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25z
dHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0
bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24n
dCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCi0gICAgICAgICAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQorICAgICAg
ICAgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFy
Z3VtZW50KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBp
bnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoYXJndW1l
bnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxV
RTY0KQpAQCAtNzc3LDEyICs3ODMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lz
dGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJl
c3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CiAjZW5kaWYKLSAgICAgICAgICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JB
cmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIHN0b3JlVmFs
dWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwgYXJndW1lbnQgKiBzaXplb2YoVmFsdWVQcm9m
aWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6
OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghSklU
Q29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAKICAgICBpZiAo
VU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAgICAgIG1fdm0tPmppdFNpemVTdGF0aXN0aWNzLT5t
YXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhpcyk7CkBAIC03OTksMjQgKzgwNSwyNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgbV9ieXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMy
X3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3Bl
cmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2NrKTsKKyAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QwKTsK
KyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0
aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIHJlZ1QwKTsKIAogICAgIC8vIElmIHRoZSBudW1i
ZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciByZXF1aXJlIGFyaXR5IGZpeHVwLgotICAg
IGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAh
PSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYg
cmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgIT0gMTsKKyAgICBpZiAobV91bmxpbmtl
ZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZp
eHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxhYmVsKCk7Ci0gICAgICAgIHN0b3JlOChU
cnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQpOwor
CiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgICAgIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAg
ICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKHJlZ1QwKTsKKyAgICAgICAgc3Rv
cmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNo
b3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAKICAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMSk7Ci0gICAgICAg
IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+
bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOworICAgICAgICBicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwogCiAgICAgICAg
IG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAKICAgICAgICAgaWYgKG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0z
Migtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJh
dGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBD
b2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjApOworICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV91bmxpbmtl
ZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVj
ayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBhcmd1bWVudEdQUjApOwogICAgICAgICBpZiAo
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhi
ZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTgzOSw3ICs4NDgsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFu
ZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNv
ZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwog
Ci0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5r
QnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVK
SVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVm
ZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV91bmxpbmtlZENvZGVCbG9jaywgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOwogICAgIGxpbmsoKTsKIH0KIApAQCAt
ODU4LDggKzg2Nyw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgc3dpdGNoIChyZWNvcmQu
dHlwZSkgewogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlOgogICAgICAgICBj
YXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtl
ZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1
bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1
bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRl
Y29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpOyAr
K2opIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB1bmxpbmtlZFRhYmxlLm1f
YnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3MSw4ICs4ODAsOCBAQCB2b2lkIEpJVDo6bGluaygpCiAg
ICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6U3RyaW5nOiB7Ci0gICAgICAg
ICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAg
ICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5n
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFN0cmlu
Z0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJ
bmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZh
dWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGxvY2F0aW9uIDogdW5saW5rZWRU
YWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQg
b2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hPZmZzZXQ7CkBAIC05MDYsMzIgKzkxNSwzNSBAQCB2
b2lkIEpJVDo6bGluaygpCiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHJlY29yZC5mcm9t
LCByZWNvcmQuY2FsbGVlKTsKICAgICB9CiAKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dl
dEJ5SWRzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZh
bHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0
aFRoaXMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3B1dEJ5SWRz
LCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wdXRCeVZhbHMsIHBh
dGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2RlbEJ5SWRzLCBwYXRjaEJ1
ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9kZWxCeVZhbHMsIHBhdGNoQnVmZmVy
KTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAg
ICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlWYWxzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9pbnN0YW5jZU9mcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMsIHBhdGNoQnVmZmVyKTsKKyAg
ICBhdXRvIGZpbmFsaXplSUNzID0gWyZdIChhdXRvJiBnZW5lcmF0b3JzKSB7CisgICAgICAgIGZv
ciAoYXV0byYgZ2VuIDogZ2VuZXJhdG9ycykgeworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mby0+c3RhcnQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPihnZW4ubV9zdGFydCk7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5k
b25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGdl
bi5tX2RvbmUpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+c2xvd1BhdGhT
dGFydExvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRh
Zz4oZ2VuLm1fc2xvd1BhdGhCZWdpbik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZmluYWxp
emVJQ3MobV9nZXRCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeVZhbHMpOworICAgIGZp
bmFsaXplSUNzKG1fZ2V0QnlJZHNXaXRoVGhpcyk7CisgICAgZmluYWxpemVJQ3MobV9wdXRCeUlk
cyk7CisgICAgZmluYWxpemVJQ3MobV9wdXRCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1fZGVs
QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X2luQnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeVZhbHMpOworICAgIGZpbmFsaXplSUNz
KG1faW5zdGFuY2VPZnMpOworICAgIGZpbmFsaXplSUNzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMp
OwogCiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlvbkluZm8gOiBtX2NhbGxDb21waWxhdGlvbklu
Zm8pIHsKLSAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxs
TGlua0luZm87Ci0gICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKLSAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLnNs
b3dQYXRoU3RhcnQpLAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CisgICAgICAgIFVubGlu
a2VkQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxpbmtlZENhbGxMaW5r
SW5mbzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
PEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pOwogICAgIH0K
IAotICAgIHsKLSAgICAgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8
IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgewotICAgICAgICAgICAgaWYgKG1f
bGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGppdENvZGVN
YXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsK
LSAgICAgICAgfQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChqaXRDb2RlTWFw
QnVpbGRlci5maW5hbGl6ZSgpKTsKKyAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVp
bGRlcjsKKyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZz
ZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKKyAgICAgICAgaWYgKG1f
bGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQorICAgICAgICAgICAgaml0Q29kZU1hcEJ1
aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwogICAg
IH0KIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkpIHsKQEAg
LTk0MCwyNiArOTUyLDM4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICB9CiAKICAgICBpZiAoVU5M
SUtFTFkobV9jb21waWxhdGlvbikpIHsKKyAgICAgICAgLy8gRklYTUU6IHNob3VsZCB3ZSBtYWtl
IHRoZSBieXRlY29kZSBwcm9maWxlciBrbm93IGFib3V0IFVubGlua2VkQ29kZUJsb2NrPwogICAg
ICAgICBpZiAoT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpCiAgICAg
ICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9uLmdl
dCgpLCBwYXRjaEJ1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+
YWRkQ29tcGlsYXRpb24obV9jb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAgICAgICAgbV92
bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2ZpbGVkQ29kZUJs
b2NrLCAqbV9jb21waWxhdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFw
ID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlciksIHBhdGNoQnVmZmVyKTsKICAgICAKKyAgICAvLyBGSVhNRTogTWFrZSBhIHZl
cnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBVbmxpbmtlZENv
ZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NP
REUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAiQmFzZWxp
bmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJCYXNlbGlu
ZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wcm9m
aWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBt
X2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlD
aGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigq
bmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2pp
dENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBt
X2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5m
b3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1vdmUobV91bmxp
bmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZN
b3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRD
b2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOworICAgIG1f
aml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2RlLT5tX2NvbnN0
YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOworICAgIG1faml0Q29kZS0+bV9pc1No
YXJlYWJsZSA9IG1faXNTaGFyZWFibGU7CiAKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2Up
Ci0gICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXAp
LlxuIiwgbV9jb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50
YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIo
KSk7CisgICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwg
JXApLlxuIiwgbV91bmxpbmtlZENvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+
c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51
bnRhZ2dlZFB0cigpKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFp
blRocmVhZCgpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKENv
ZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0NvbXBpbGF0aW9u
VGhyZWFkKCkpOwogCkBAIC05NjgsMjUgKzk5MiwxNCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6
OmZpbmFsaXplT25NYWluVGhyCiAKICAgICBtX2xpbmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5h
bGl6YXRpb25UYXNrcygpOwogCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9G
aXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwotICAgIH0KLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9u
SGFuZGxlcnMoKTsgKytpKSB7Ci0gICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9jb2Rl
QmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3By
b2JsZW0vMzk0MzMzMTg+LgotICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBtX2NvZGVCbG9j
ay0+aml0Q29kZU1hcCgpLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFn
Z2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7Ci0gICAgfQotCiAgICAgaWYgKG1fcGNUb0Nv
ZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChX
VEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKKyAgICAgICAgbV9qaXRDb2RlLT5tX3BjVG9D
b2RlT3JpZ2luTWFwID0gV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKTsKIAogICAgIG1fdm0t
Pm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+YWRkKAogICAg
ICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgpKSAvCi0gICAgICAgIHN0
YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOworICAg
ICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9u
c1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLnJlbGVh
c2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNv
ZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIENvbXBpbGF0aW9u
U3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTAxMSwxMSBAQCBzaXplX3QgSklUOjpjb2RlU2l6
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZlci0+c2l6ZSgpOwogfQogCi1Db21waWxh
dGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9y
dCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBkb01haW5UaHJlYWRQ
cmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAg
cmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVCbG9jayk7CiB9CiAKIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKQEAgLTEwNDIsMTggKzEwNTUsMjggQEAg
dm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwogICAgICAgICBtX3ZtLT50
eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQcmVwYXJpbmcgZm9y
IEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJD
b3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3Rl
ckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgQVNTRVJUKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSA9PSBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7CiAKICAgICByZXR1
cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJPZmZzZXQoY29kZUJsb2Nr
LT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdp
c3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sq
IGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9j
ay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNl
dEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJldHVybiB2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9m
ZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2st
PnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IEpJ
VDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBy
ZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MzAxOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYg
KzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWwsIGV4cGVjdGVkKSBB
U1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wi
IHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4
cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAorI2luY2x1ZGUgIkJhc2VsaW5l
SklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQ
YXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgpAQCAtNDQsNiArNDUsNyBAQAog
I2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3Iu
aCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgog
I2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5o
IgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTE0OSwxNCArMTUxLDE0IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwotICAgICAgICBDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbzsKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExp
bmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0Nv
bnN0YW50OwogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhS
ZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1
bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBK
U0ludGVyZmFjZUpJVCB7CisgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJs
aWMgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxs
OwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBKSVRUaHVua3M7CkBAIC0xNzEsNiArMTczLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJs
ZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
cGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0g
SlNJbnRlcmZhY2VKSVQ7CisKICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9j
ayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0g
Qnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTE3OCwyOCArMTgyLDMzIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VK
SVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5h
bGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9u
TWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7
CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsK
ICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0
ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnBy
aXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxv
Y2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAg
ICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9y
KFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lz
dGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21waWxlVGltZSgp
OwogCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIgPSBMTElu
dDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSOworICAgICAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzX2NvbnN0YW50c0dQUiA9IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSOworCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAgICAgICAg
IHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCk7CiAgICAgICAgIHZvaWQgbGluaygpOwotICAgICAgICBDb21waWxhdGlv
blJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgICAgIENv
bXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKENvZGVCbG9jayosIEpJVENvbXBpbGF0aW9u
RWZmb3J0KTsKIAogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRo
b3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1
bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCkBAIC0yMjMsNiArMjMyLDMyIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25z
dCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25z
dCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0
IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9y
ZThUb01ldGFkYXRhKFZhbHVlVHlwZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsK
KworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3Rv
cmUzMlRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOwor
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0
LCBHUFJSZWcpOworCisgICAgcHVibGljOgorICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNp
Z25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQg
bG9hZEdsb2JhbE9iamVjdChHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25z
dGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisKKyAgICAgICAgdm9pZCBlbWl0UHV0Q29k
ZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1QwKTsKKwogICAgICAg
ICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRvSGFuZGxlcikKICAgICAgICAgewogICAg
ICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpAQCAtMjU4
LDE2ICsyOTMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8
CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNv
ZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlE
ICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFu
dCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9w
OjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKLSAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9D
b25zdGFudCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wg
Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVu
bGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAg
ICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21waWxl
Q2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKQEAgLTI4NywxNCArMzIyLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0
ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJp
ZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOwor
ICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAogICAgICAgICAv
LyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQg
dGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJv
ZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFk
YXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcpOwotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICAvL3ZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOworICAgICAgICAvL3ZvaWQgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29u
c3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29k
ZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgSlNWYWx1ZVJl
Z3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJv
ZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+
IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKQEAg
LTMwNSw4ICszNDEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQ
cm9maWxlPjo6dmFsdWUsIHZvaWQ+CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlBy
b2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsKIAotICAgICAgICB2b2lkIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZSosIFJlZ2lz
dGVySUQgc2NyYXRjaEdQUik7Ci0gICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJl
Z2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0
ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBwdHJkaWZmX3QsIFJlZ2lzdGVy
SUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3ApOwpAQCAtNTkzLDcgKzYz
MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYxMSw3ICs2NDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKik7Ci0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAjZW5kaWYKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02MjcsMTQgKzY2NCwxNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNp
Z25lZCk7CiAKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwg
QWNjZXNzVHlwZSk7Ci0gICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdp
c3RlciBkc3QsIEFjY2Vzc1R5cGUpOworICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5LCBBY2Nlc3NUeXBlKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJD
b21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9u
Q2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFZh
clJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUpOworICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcpOworICAgICAgICB2
b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUik7
CiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZp
cnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWdu
ZWQgZGVwdGgpOwogICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKQEAgLTY0Niw3ICs2ODMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAg
ICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0
cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0
Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpOwor
ICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1Nl
dCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogICAgICAgICB2b2lkIGVt
aXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1p
dFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CkBAIC02NTUsNiArNjkyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVI
ZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgICAgIGJvb2wg
aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFu
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFu
dEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50Q2hh
cihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjc2LDEzICs3MTQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNs
b3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV92YWxfcHJl
cGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYp
OwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBz
bG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9w
dXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdl
bmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcihWTSYpOwotICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3Jlc29s
dmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJhdG9yKFZN
Jik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKQEAgLTY5NiwzMiArNzMyLDE2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gR2xvYmFs
VmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9HRVRfRlJPTV9TQ09Q
RV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMj
R2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX0dF
VF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dF
TkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVu
a05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9w
UmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlu
bGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2ZWRDbG9zdXJlVmFy
IGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29wZS4K
LSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8
fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNkZWZpbmUgREVDTEFS
RV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Njb3BlXyMj
cmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZ
UEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX1JFU09M
VkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0
IGNoYXIqIHRodW5rTmFtZSk7Ci0KICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5
R2VuZXJhdG9yKFZNJik7CiAKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAor
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93
X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVy
YXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJl
c29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFt
ZSk7CisKICAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gaXRlcisrLT5mcm9t
OwpAQCAtNzYwLDEwICs3ODAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7
CiAgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHQoQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7Ci0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwg
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICB2b2lkIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0
YWRhdGEmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3Qg
Qnl0ZWNvZGUmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAg
ICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRo
UHJvZmlsZShjb25zdCBCeXRlY29kZSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQp
OwogICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlw
ZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxP
cGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KQEAgLTgyMSwy
MCArODQxLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQp
KTsKICAgICAgICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBl
bmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJn
cz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBl
Pjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24s
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgT3BlcmF0aW9uVHlwZSBv
cGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAg
ewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0g
ICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICAgICAgfQogCi0gICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lIE1ldGFkYXRhLCB0
eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBl
LCB0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFi
bGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCB2b2lkPgot
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRy
ZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBBZGRy
ZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAg
ICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50c0ZvckluZGlyZWN0Q2FsbDxPcGVyYXRpb25U
eXBlPih0YXJnZXQsIGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIEFkZHJl
c3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CisgICAgICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShieXRlY29kZSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQu
b2Zmc2V0KSwgcmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CkBAIC05MTksMjUgKzkzOSwyMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBib29sIGNhbkJl
T3B0aW1pemVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZDsgfQotICAgICAgICBib29sIGNh
bkJlT3B0aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZE9ySW5saW5l
ZDsgfQogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBtX3Nob3Vs
ZEVtaXRQcm9maWxpbmc7IH0KICNlbHNlCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7
IHJldHVybiBmYWxzZTsgfQotICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkg
eyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgLy8gRW5hYmxlcyB1c2Ugb2YgdmFsdWUgcHJvZmls
ZXIgd2l0aCB0aWVyZWQgY29tcGlsYXRpb24gdHVybmVkIG9mZiwKICAgICAgICAgLy8gaW4gd2hp
Y2ggY2FzZSBhbGwgY29kZSBnZXRzIHByb2ZpbGVkLgogICAgICAgICBib29sIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBlbWl0
TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOworCisgICAgICAg
IHZvaWQgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworCiAgICAgICAgIHN0YXRpYyBib29sIHJl
cG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRp
bWVzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB5b3UgbmVlZCB0byBjaGVjayBhIHZhbHVl
IGZyb20gdGhlIG1ldGFkYXRhIHRhYmxlIGFuZCB5b3UgbmVlZCBpdCB0bwotICAgICAgICAvLyBi
ZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFzdCBhbmQgc2xvdyBwYXRoLCB0aGVuIHlvdSB3YW50
IHRvIHVzZSB0aGlzLgotICAgICAgICAvLyBJdCB3aWxsIGdpdmUgdGhlIHNsb3cgcGF0aCB0aGUg
c2FtZSB2YWx1ZSByZWFkIGJ5IHRoZSBmYXN0IHBhdGguCi0gICAgICAgIEdldFB1dEluZm8gY29w
aWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBC
aW5hcnlPcD4KLSAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShC
aW5hcnlPcCk7CisKKyAgICAgICAgdm9pZCByZXNldFNQKCk7CiAKICAgICAgICAgSW50ZXJwcmV0
ZXIqIG1faW50ZXJwcmV0ZXI7CiAKQEAgLTk2NCw5ICs5ODEsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0
b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCi0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQs
IHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwotICAgICAgICBIYXNoTWFwPHVpbnQ2NF90
LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQcm9maWxlczsKLQogICAgICAgICBK
dW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25D
aGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQpAQCAtMTAwMCwxMSArMTAxNCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGFzaE1h
cDxjb25zdCBJbnN0cnVjdGlvbiosIFVuaXF1ZVJlZjxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+PiBt
X2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGU7CiAKICAgICAgICAgYm9vbCBtX2Nh
bkJlT3B0aW1pemVkOwotICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAg
ICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4
IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKIAotICAgICAgICBSZWZQdHI8RGlyZWN0SklU
Q29kZT4gbV9qaXRDb2RlOworICAgICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRDb2RlQmxvY2sg
eyBudWxscHRyIH07CisgICAgICAgIFVubGlua2VkQ29kZUJsb2NrKiBtX3VubGlua2VkQ29kZUJs
b2NrIHsgbnVsbHB0ciB9OworCisgICAgICAgIE1hdGhJQ0hvbGRlciBtX21hdGhJQ3M7CisgICAg
ICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1faml0Q29kZTsKKworICAgICAgICBKSVRDb25z
dGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRD
YWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAg
ICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7
CisgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVz
OworICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlczsKKworICAgICAgICBzdHJ1Y3QgTm90QUNvZGVCbG9jayB7IH0gbV9jb2RlQmxvY2s7
CisKKyAgICAgICAgYm9vbCBtX2lzU2hhcmVhYmxlIHsgdHJ1ZSB9OwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50
R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIp
OworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFpl
cm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0zMjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJlZ1QxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIs
IHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzc1
LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAog
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTU3Myw3ICs1NzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3coY29uc3QgCiAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdU
MCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6ZW1p
dEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4o
KS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5l
Z2F0ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZWdhdGU+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Cisg
ICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9tYXRoSUNzLmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmls
ZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG5l
Z2F0ZUlDKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ug
b3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAog
ICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CkBA
IC04OTksOCArOTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVj
dAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRo
UHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMo
YXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9tYXRoSUNzLmFkZEpJ
VEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9u
VmFsdWVBZGQpOwogfQpAQCAtOTQ1LDEwICs5NTAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNG
YXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJ
Qy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYg
KCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNy
Y1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7CisgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCBzY3JhdGNoR1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2Uo
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDE1LDEwICsxMDIx
LDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICAgICAg
ZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxl
ZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwNTUsMTMgKzEwNjIsMTQg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogI2VuZGlmCiAKICAg
ICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUo
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0
YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2Zp
bGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0
LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRl
cnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdz
LCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxK
X0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQs
IHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExMjAsMTMgKzExMjgs
MTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogI2VuZGlmCiAK
ICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9m
aWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmls
ZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRS
ZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
Yml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
YXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJ
VE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1B
VEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTY2LDcg
KzExNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgaWYgKHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OworICAgICAgICBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2Pigp
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwogCiAgICAgU25p
cHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7
CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVz
LnNlY29uZCgpKTsKQEAgLTEyMTEsOCArMTIyMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihj
b25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJVE11bElDKiBtdWxJQyA9
IG1fbWF0aElDcy5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25U
b01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zh
c3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KQEAgLTEyMjcsOCArMTIzNiw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
c3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1
Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMq
IHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U3ViPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAg
IEpJVFN1YklDKiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwog
ICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7
CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDI4MzAx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29u
c3QgT3BDYWxsRXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVn
VDEpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxs
RnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBy
ZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwpAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQg
SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKIAogICAgIGVtaXRMb2FkKGNhbGxl
ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0
ZWNvZGUpOwpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKIAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM0MSw3ICszNDEsNiBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgfQogCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgaWYgKG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTM1NCw3ICszNTMsNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRlICJT
bG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgpAQCAtNDQsNyArNDUs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVt
aXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOwogfQogCkBAIC01MywxOCArNTQsMTgg
QEAgc3RkOjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdz
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9wOjpvcGNv
ZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNv
bnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHVu
c2lnbmVkIGNoZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGludCBh
cmdDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRl
Y29kZSwgY2hlY2twb2ludCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0
PGludD4oc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQp
KTsKIAorCiAgICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
cihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlz
KDApKSwgcmVnVDApOwogICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDApOwotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBhcnJheVByb2ZpbGVGb3IobWV0
YWRhdGEsIGNoZWNrcG9pbnQpLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAg
ICAgIHN0b3JlMzJUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJbmZvOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7
CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTc4LDcgKzc5LDcgQEAgc3Rk
OjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9w
OjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZv
Q29uc3RhbnQpCiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1f
dGhpc1ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2Fy
Z3VtZW50czsKQEAgLTkxLDcgKzkyLDggQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZAogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9y
Rm9yd2FyZEFyZ3VtZW50czsKICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVy
YXRpb25TaXplRnJhbWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlv
biwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgLWZp
cnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCByZWdUMCwgcmVnVDEs
IC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJnc0Zy
YW1lKCp0aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkp
LCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTAxLDE0ICsxMDMsMTYgQEAgSklU
Ojpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9wZXJh
dGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UKICAg
ICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBj
YWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3Bl
cmF0aW9uLCByZWdUMywgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwog
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFy
Z3VtZW50IGNvdW50LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRyZXNz
T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7Ci0gICAgSnVtcCBub3RC
aWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdU
MiwgaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7CisgICAg
bG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpKSwgcmVnVDMpOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3Zl
LCByZWdUMywgcmVnVDIpOworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxM
aW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CiAgICAg
bm90QmlnZ2VzdC5saW5rKHRoaXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgpA
QCAtMTI3LDE2ICsxMzEsMTUgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYp
CiB0ZW1wbGF0ZTw+CiBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwm
IGJ5dGVjb2RlKQogewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBy
ZWdUMSk7Ci0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENh
bGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwotCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdp
c3RlciwgYXJndW1lbnRHUFIxKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRk
cmVzcyhhcmd1bWVudEdQUjEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKKyAgICByZXNldFNQKCk7CiAKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1
bHQoYnl0ZWNvZGUpOwogCkBAIC0xNDgsNyArMTUxLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExp
bmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5r
SW5mb3MuYWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBD
YWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0
ID0gLWJ5dGVjb2RlLm1fYXJndjsKQEAgLTE1Niw0MyArMTU5LDQ2IEBAIHZvaWQgSklUOjpjb21w
aWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lz
dGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQo
QWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBl
bWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFs
T2JqZWN0KCptX3ZtLCBpbmZvKTsKKyAgICByZXNldFNQKCk7CiAKICAgICBlbWl0UHV0Q2FsbFJl
c3VsdChieXRlY29kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6OmNv
bXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQoteworYm9v
bCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwg
dW5zaWduZWQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpIHsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWls
Q2FsbCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVj
b2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0g
ICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEubnVt
UGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdS
ZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRhLm51
bUxvY2FscyA9CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVm
ZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZs
ZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEt
Pm51bVBhcmFtZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7Cisg
ICAgc2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXI7CisgICAgc2h1ZmZsZURhdGEtPm51bUxvY2FscyA9CiAgICAgICAgIGJ5dGVjb2RlLm1f
YXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAg
c2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICBzaHVmZmxlRGF0
YS0+YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tp
XSA9CisgICAgICAgIHNodWZmbGVEYXRhLT5hcmdzW2ldID0KICAgICAgICAgICAgIFZhbHVlUmVj
b3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAg
ICAgICAgICAgRGF0YUZvcm1hdEpTKTsKICAgICB9Ci0gICAgc2h1ZmZsZURhdGEuY2FsbGVlID0K
LSAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0gICAg
c2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAgICBp
bmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICBzaHVmZmxlRGF0YS0+
Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAg
c2h1ZmZsZURhdGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExp
c3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogCi0gICAgSnVtcExpc3Qg
c2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdU
MiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKLSAgICAgICAgQ2FsbEZyYW1l
U2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBs
b2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKKyAgICBKdW1wTGlzdCBz
bG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCByZWdUMCwgcmVnVDIsIFsmXSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCAq
c2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgIH0pOwogICAgIGFkZFNsb3dD
YXNlKHNsb3dQYXRocyk7CisKKyAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICBp
bmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7CisKICAgICBhdXRv
IGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0yMTgs
MTQgKzIyNCwyNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAg
ICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAg
IC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAq
LwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlEICE9
IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0lu
Zm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBjb21waWxlU2V0dXBGcmFtZShi
eXRlY29kZSwgaW5mbyk7CisKKyAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxw
dHI7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01B
WDsKKyAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKSB7CisgICAgICAgIGluZm8gPSBt
X3VubGlua2VkQ2FsbHMuYWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxs
VHlwZUZvcihvcGNvZGVJRCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZvKTsKKworICAg
ICAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9J
bmRleCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0
aW9uSW5mbygpKTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS51bmxpbmtlZENhbGxMaW5rSW5mbyA9IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29u
c3RhbnQ7CisgICAgfQorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3Rh
bnQpOwogCiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRlY29k
ZUluZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVp
bnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygp
OworICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0
KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdU
MCBob2xkcyBjYWxsZWUuCkBAIC0yMzQsMTYgKzI1MSwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6
ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJ
bmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxhdGlv
bkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAgaWYg
KGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQorICAg
IGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBp
bmZvQ29uc3RhbnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3RhbnQoaW5mb0Nv
bnN0YW50LCByZWdUMik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdz
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAg
ICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdU
MCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7CisgICAgICAgIGF1
dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgq
dGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0gewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CiAgICAg
ICAgIH0pOwpAQCAtMjUzLDE0ICsyNjYsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29u
c3QgSW5zdHJ1Y3RpbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBzbG93UGF0
aHMgPSBpbmZvLT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6Olllcyk7CisgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVt
aXREYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyKTsKICAgICBhdXRvIGRvbmVMb2Nh
dGlvbiA9IGxhYmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIG1fY2Fs
bENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxv
Y2F0aW9uOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAg
ICByZXNldFNQKCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CkBAIC0y
NzMsMjEgKzI4NSwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IElu
CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOwogCiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0
aCgqbV92bSwgKnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKCpt
X3ZtLCAqdGhpcywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8
fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERp
ZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
LSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIHJlc2V0U1AoKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgZW1pdFB1dENhbGxS
ZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzk1LDE3ICs0MDYsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbgogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
dm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwogICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBt
b3ZlKHJlZ1QwLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEsIEFjY2Vzc1R5cGU6
OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwg
c28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlc3VsdEdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25leHQsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgZmFzdENhc2UubGlu
ayh0aGlzKTsKIH0KQEAgLTQxNiwxMCArNDQxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX29wZW4oY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Bl
bj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7Ci0KLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcg
aXRlcmF0b3JHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgSnVtcExp
c3Qgbm90T2JqZWN0OwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJh
dG9yR1BSKSk7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRv
ckdQUikpOwpAQCAtNDMyLDE5ICs0NTUsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJh
dG9yX29wZW4oY29ucwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAs
IGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0b3JHUFIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBtb3ZlKGl0ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
PGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFy
Z3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
bmV4dFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkp
OwogCiAgICAgYXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmpl
Y3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
VGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogCiAgICAgZG9u
ZS5saW5rKHRoaXMpOwogfQpAQCAtNDUyLDcgKzQ3Myw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9uID0g
KFsmXSAoKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKICAgICAg
ICAgY2FzZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25hcnJvdzsKQEAg
LTQ3MCw1MCArNDkwLDc5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3Qg
SW4KICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRpb25N
b2RlOjpHZW5lcmljKSkpOwogCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBvcjgo
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMp
KSwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2l0ZXJhdGlvbk1ldGFkYXRhLnNlZW5Nb2Rl
cykpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0
YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0
YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSwgcmVnVDApOworICAgIG9yMzIoVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgcmVnVDApOworICAg
IHN0b3JlOFRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRh
dGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6
b2Zmc2V0T2ZTZWVuTW9kZXMoKSk7CiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yTmV4dD4o
aW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgYWR2YW5jZVRvTmV4dENo
ZWNrcG9pbnQoKTsKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2JqZWN0
KSBpbiByZWdUMAogCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGl0
ZXJSZXN1bHRHUFIgPSByZWdUMjsKLSAgICBHUFJSZWcgZG9uZUdQUiA9IHJlZ1QxOwotICAgIC8v
IGl0ZXJSZXN1bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0IGJ5IGlkIGJl
bG93LgotICAgIG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
aXRlckNhbGxSZXN1bHRHUFIpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CiAgICAgewotICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoaXRlclJlc3VsdEdQUik7CisgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgc3Rh
dGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSBiYXNlR1BSKTsKKworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICAgICAgUmVnaXN0ZXJTZXQgcHJl
c2VydmVkUmVncyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAg
ICAgICAgcHJlc2VydmVkUmVncy5hZGQodmFsdWVHUFIpOworICAgICAgICBwcmVzZXJ2ZWRSZWdz
LmFkZChpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKLSAgICAgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5h
bWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVn
cyhkb25lR1BSKSwgcmVnVDMsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCisgICAgICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlO
YW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoZG9u
ZUdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsK
KyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1Ig
ZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BS
IH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVn
cyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAg
ICB9CiAKLQogICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7Ci0gICAgICAg
IEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0
ZXJzKGRvbmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7CisgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRl
U2NyYXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJh
bmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGds
b2JhbEdQUik7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRo
eSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1Qw
LCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbEdQUik7
CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0
R1BSLCBiYXNlR1BSKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwot
ICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBs
KCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1Yklu
Zm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
ICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNv
IHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAg
ICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHRHUFIgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZSwgcmVzdWx0R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAg
fQpAQCAtNTI3LDU5ICs1NzYsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25l
eHQoY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1
Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9I
b3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxs
UmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVy
OworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4o
KTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1f
ZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAg
ICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAg
ICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIp
KTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFt
ZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5v
dE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0g
ICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0g
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0
ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQp
LnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVn
VDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJl
Z1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRH
UFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAog
ICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVz
dWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVW
UmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSBy
ZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5
TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdC
aXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAg
ICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAg
ICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihi
eXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODMwMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsOCArMzIsMTEgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNp
bmNsdWRlICJSZWdpc3RlclNldC5oIgogCisKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBQQ1Rv
Q29kZU9yaWdpbk1hcDsKKwogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBDb21tb25EYXRhOwogY2xh
c3MgSklUQ29kZTsKQEAgLTE1OSwxMCArMTYyLDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBi
b29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgewotICAgICAgICBpZiAoIU9wdGlv
bnM6OnVzZURhdGFJQygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAo
SklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJ
VCgpOwogICAgIH0KIApAQCAtMjIzLDYgKzIyNiw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNT
aGFyZWQoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlQXR0cmlidXRlID09IFNoYXJlQXR0cmlidXRl
OjpTaGFyZWQ7IH0KIAorICAgIHZpcnR1YWwgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3Jp
Z2luTWFwKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorCiBwcml2YXRlOgogICAgIEpJVFR5cGUgbV9q
aXRUeXBlOwogICAgIFNoYXJlQXR0cmlidXRlIG1fc2hhcmVBdHRyaWJ1dGU7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAkocmV2aXNp
b24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktl
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgdm9pZCBKSVRDb21waWxhdGlv
bktleTo6ZHVtcChQcmludFN0cmVhbQogICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBvdXQucHJpbnQoIihDb21waWxlIG9mICIsICptX3By
b2ZpbGVkQmxvY2ssICIgd2l0aCAiLCBtX21vZGUsICIpIik7CisgICAgb3V0LnByaW50KCIoQ29t
cGlsZSBvZiAiLCBSYXdQb2ludGVyKG1fY29kZUJsb2NrKSwgIiB3aXRoICIsIG1fbW9kZSwgIiki
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvbXBpbGF0aW9uS2V5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDU3ICszMCw1NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgQ29kZUJsb2NrOwot
Y2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgSlNDZWxsOwogCiBjbGFzcyBKSVRDb21waWxhdGlv
bktleSB7CiBwdWJsaWM6CiAgICAgSklUQ29tcGlsYXRpb25LZXkoKQotICAgICAgICA6IG1fcHJv
ZmlsZWRCbG9jayhudWxscHRyKQorICAgICAgICA6IG1fY29kZUJsb2NrKG51bGxwdHIpCiAgICAg
ICAgICwgbV9tb2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uKQogICAg
IHsKICAgICB9CiAgICAgCiAgICAgSklUQ29tcGlsYXRpb25LZXkoV1RGOjpIYXNoVGFibGVEZWxl
dGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhudWxscHRyKQorICAgICAg
ICA6IG1fY29kZUJsb2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9tb2RlKEpJVENvbXBpbGF0aW9u
TW9kZTo6REZHKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgSklUQ29tcGlsYXRpb25LZXkoQ29k
ZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSkKLSAgICAgICAg
OiBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKKyAgICBKSVRDb21waWxhdGlvbktleShK
U0NlbGwqIHByb2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQorICAgICAgICA6
IG1fY29kZUJsb2NrKHByb2ZpbGVkQmxvY2spCiAgICAgICAgICwgbV9tb2RlKG1vZGUpCiAgICAg
ewogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgPT0gSklUQ29tcGlsYXRpb25Nb2Rl
OjpJbnZhbGlkQ29tcGlsYXRpb247CisgICAgICAgIHJldHVybiAhbV9jb2RlQmxvY2sgJiYgbV9t
b2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOwogICAgIH0KICAg
ICAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSAhPSBKSVRDb21waWxhdGlvbk1v
ZGU6OkludmFsaWRDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuICFtX2NvZGVCbG9jayAmJiBt
X21vZGUgIT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CiAgICAgfQog
ICAgIAotICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
ZmlsZWRCbG9jazsgfQogICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9tb2RlOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEpJVENvbXBpbGF0
aW9uS2V5JiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3Byb2ZpbGVkQmxv
Y2sgPT0gb3RoZXIubV9wcm9maWxlZEJsb2NrCisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jayA9
PSBvdGhlci5tX2NvZGVCbG9jawogICAgICAgICAgICAgJiYgbV9tb2RlID09IG90aGVyLm1fbW9k
ZTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gV1RGOjpwYWlySW50SGFzaChXVEY6OlB0ckhhc2g8Q29kZUJsb2NrKj46Omhhc2go
bV9wcm9maWxlZEJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8SklUQ29t
cGlsYXRpb25Nb2RlPjo6dHlwZT4obV9tb2RlKSk7CisgICAgICAgIHJldHVybiBXVEY6OnBhaXJJ
bnRIYXNoKFdURjo6UHRySGFzaDxKU0NlbGwqPjo6aGFzaChtX2NvZGVCbG9jayksIHN0YXRpY19j
YXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPEpJVENvbXBpbGF0aW9uTW9kZT46OnR5cGU+KG1fbW9k
ZSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAog
cHJpdmF0ZToKLSAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKKyAgICAvLyBFaXRoZXIg
Q29kZUJsb2NrKiBvciBVbmxpbmtlZENvZGVCbG9jayogZm9yIGJhc2xlbGluZSBKSVQuCisgICAg
SlNDZWxsKiBtX2NvZGVCbG9jazsKICAgICBKSVRDb21waWxhdGlvbk1vZGUgbV9tb2RlOwogfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKKyNpbmNsdWRl
ICJKSVQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1
YkluZm8uaCIKIApAQCAtNDYsMTAgKzQ3LDkgQEAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBn
YXJiYWdlU3R1YkluZgogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQotICAgIDogbV9j
b2RlQmxvY2soY29kZUJsb2NrKQotICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCisgICAgOiBtX2pp
dFR5cGUoaml0VHlwZSkKIHsKLSAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVC
bG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1Yklu
Zm8oKTsKKyAgICBtX3N0dWJJbmZvID0gY29kZUJsb2NrID8gY29kZUJsb2NrLT5hZGRTdHViSW5m
byhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1
YkluZm8tPmNhbGxTaXRlSW5kZXggPSBjYWxsU2l0ZTsKIAogICAgIG1fc3R1YkluZm8tPnVzZWRS
ZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzOwpAQCAtNTksNyArNTksNiBAQCB2b2lkIEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlu
a0J1ZmZlciYgc2xvd1BhdGgsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PiBzdGFydCkKIHsKICAgICBtX3N0dWJJbmZvLT5zdGFydCA9IHN0YXJ0OwotCiAgICAgbV9zdHVi
SW5mby0+ZG9uZUxvY2F0aW9uID0gZmFzdFBhdGgubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihtX2RvbmUpOwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkKQEAg
LTY3LDYgKzY2LDE1IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAog
ICAgIG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9u
T2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc2xvd1BhdGhCZWdpbik7CiB9CiAKK3ZvaWQgSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQm
IGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBtX3N0
YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlD
KG1faml0VHlwZSkpOworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BS
KTsKKyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFn
KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJZEdlbmVyYXRvcjo6SklU
QnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBl
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5
cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNW
YWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAg
LTExMCw3ICsxMTgsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9y
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNz
VHlwZSBhY2Nlc3NUeXBlKQogICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5
cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzLCBiYXNl
LCB2YWx1ZSwgc3R1YkluZm9HUFIpCi0gICAgLCBtX2lzTGVuZ3RoQWNjZXNzKHByb3BlcnR5TmFt
ZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkK
KyAgICAsIG1faXNMZW5ndGhBY2Nlc3MoY29kZUJsb2NrICYmIHByb3BlcnR5TmFtZS51aWQoKSA9
PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKIHsKICAgICBS
RUxFQVNFX0FTU0VSVChiYXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9CkBA
IC0xMjAsNiArMTI4LDM1IEBAIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0
UGEKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBtX2lzTGVuZ3RoQWNjZXNzID8gSW5saW5l
QWNjZXNzOjpzaXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9w
ZXJ0eUFjY2VzcygpKTsKIH0KIAorc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNj
ZXNzKEpJVCYgaml0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBiYXNlLCBHUFJSZWcgc2Ny
YXRjaCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7
CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3Mg
PSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZP
ZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHJvcGVydHkoYmFzZSwgc2NyYXRjaCwg
SlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7
CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmZhckp1bXAoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hlZC5saW5r
KCZqaXQpOworfQorCit2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5m
b0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBl
KSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50
KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNz
KGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKworCiBKSVRHZXRCeUlkV2l0
aFRoaXNHZW5lcmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcigKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENh
bGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAog
ICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIHZhbHVlLCBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTM4LDYg
KzE3NSwxOCBAQCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2VuZXJhCiAgICAg
Z2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nl
c3MoKSk7CiB9CiAKK3ZvaWQgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpnZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcg
c3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1f
aml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRD
b25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGdlbmVyYXRlR2V0QnlJZElubGlu
ZUFjY2VzcyhqaXQsIHN0dWJJbmZvR1BSLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVy
czo6YmFzZSwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnNjcmF0Y2gsIEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgbV9kb25lID0gaml0
LmxhYmVsKCk7Cit9CisKIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3Io
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBK
U1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgCkBA
IC0xNDksNiArMTk4LDM0IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0
b3IKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzLmNsZWFyKHNjcmF0Y2gpOwogfQogCit2
b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChK
SVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0
YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHVi
SW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2Ny
YXRjaDsKKyAgICBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNj
cmF0Y2gyOworICAgIEdQUlJlZyB2YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFs
dWU7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJ
bmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQ
UiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gp
OworICAgIGppdC5zdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgYmFzZSwgc2Ny
YXRjaCwgc2NyYXRjaDIpOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisgICAg
c2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0
cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0KTsK
KyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogdm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9y
OjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCiB7CiAgICAgZ2VuZXJhdGVG
YXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlSZXBsYWNlKCkpOwpA
QCAtMjAwLDcgKzI3Nyw3IEBAIHZvaWQgSklURGVsQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGpp
dC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZv
LT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBK
SVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1w
ID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTIz
Niw3ICszMTMsNyBAQCB2b2lkIEpJVERlbEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhCiAg
ICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9q
aXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
bV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2Fs
bChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwor
ICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9z
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1
YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGpp
dC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0yNzAsNyAr
MzQ3LDcgQEAgdm9pZCBKSVRJbkJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIG1f
c3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlw
ZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1
YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAg
ICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0
aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0
Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtMzAwLDYgKzM3Nywz
MiBAQCB2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0CiAgICAgZ2VuZXJh
dGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7
CiB9CiAKK3ZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisg
ICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5m
bywgc3R1YkluZm9HUFIpOworCisgICAgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUluQnlJZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OnJlc3VsdDsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpz
Y3JhdGNoOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgaml0Lmxv
YWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZSgpKSk7CisgICAgaml0LmJveEJvb2xlYW4odHJ1ZSwgSlNWYWx1ZVJlZ3MgeyByZXN1
bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBza2lwSW5saW5l
QWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRT
dHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hlZC5saW5rKCZqaXQpOworICAgIG1fZG9u
ZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpKSVRJbnN0YW5j
ZU9mR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUs
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LAogICAg
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
dmFsdWUsIEdQUlJlZyBwcm90b3R5cGUsIEdQUlJlZyBzdHViSW5mb0dQUiwKQEAgLTMzMiw3ICs0
MzUsNyBAQCB2b2lkIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzCiAgICAgbV9z
dGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBl
KSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHVi
SW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAg
ICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRp
bmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRj
aGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0zNjgsNyArNDcxLDcg
QEAgdm9pZCBKSVRHZXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQg
PSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsK
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8p
LCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0
LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRy
VGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxl
SnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtNDA1LDcgKzUwOCw3IEBAIHZv
aWQgSklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0ID0gaml0
LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9z
dHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6
QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJK
dW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7
CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAo
KTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTQ0MCw3ICs1NDMsNyBAQCB2b2lkIEpJ
VFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcjo6Z2VuCiAgICAgbV9zdGFydCA9IGppdC5sYWJl
bCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1Yklu
Zm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
Q29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAg
IH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAg
ICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODMwMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVk
ZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvblZhbGlkYXRpb24uaCIKICNp
bmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1
ZGUgIlB1dEtpbmQuaCIKQEAgLTM4LDExICszOSwxMTggQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFz
cyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVC
bG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsK
IGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKK3N0cnVjdCBCYXNlbGluZURlbEJ5VmFs
UmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6
cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Qz
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsK
K307CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZv
OjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJl
Z1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdU
MzsKK307CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICAvLyBXZSBy
ZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVn
aXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgorICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHBy
b3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0
aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOwor
ICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJ
bmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUklu
Zm86OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5m
bzo6cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUkluZm86OmFyZ3VtZW50R1BSMzsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OmFyZ3VtZW50
R1BSMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86Om5v
bkFyZ0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZv
Ojpub25BcmdHUFIxOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVycyB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
X2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1Qz
OworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGRvbnRDbG9iYmVyUmVnaXN0ZXIgPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHRo
aXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeUlkUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpzY3JhdGNoOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkg
PSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQ
UkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGUgPSBHUFJJ
bmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUklu
Zm86OnJlZ1Q0OworfTsKKworc3RydWN0IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmQgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0
aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAg
c3RhdGljX2Fzc2VydChicmFuZCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdU
MjsKK307CisKIGNsYXNzIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKIHByb3RlY3RlZDoKICAg
ICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigpIHsgfQpAQCAtNjIsMTIgKzE3MCwxOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBmaW5hbGl6ZSgKICAgICAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5r
QnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIsCiAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCk7Ci0gICAgCisKKyAgICB2b2lk
IGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0Nv
bnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogbV91bmxpbmtlZFN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkgfTsKKwogcHJvdGVjdGVkOgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAg
ICAgSklUVHlwZSBtX2ppdFR5cGU7CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIG1fc3R1YkluZm87
CiAKK3B1YmxpYzoKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9kb25lOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Ns
b3dQYXRoQmVnaW47CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7CkBA
IC05OCw3ICsyMTIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAg
IEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFy
dDsKK3B1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07
CiAKQEAgLTExMSw2ICsyMjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2Us
IEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUpOwogICAg
IAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQg
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29u
c3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzTGVu
Z3RoQWNjZXNzOwpAQCAtMTI0LDYgKzIzOSw3IEBAIHB1YmxpYzoKICAgICAgICAgQ29kZUJsb2Nr
KiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgICAgIEpTVmFsdWVSZWdz
IHZhbHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0
dWJJbmZvR1BSKTsKIAorICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJ
VCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAgICAg
dm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiB9OwogCkBAIC0xMzIsMTAg
KzI0OCwxMSBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0gZGVmYXVsdDsK
IAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUs
IENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLAotICAgICAgICBKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1v
ZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBD
YWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxl
SWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUs
IEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsK
ICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2
b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5m
b0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogICAgIAogICAgIFZfSklUT3BlcmF0aW9u
X0dTc2lKSkMgc2xvd1BhdGhGdW5jdGlvbigpOwogCkBAIC0xNjMsMTEgKzI4MCw5IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2
YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwog
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0xOTEsOCArMzA2LDYgQEAg
cHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAK
LXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9B
c3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yMTYsOCAr
MzI5LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1i
bGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBA
IC0yNDEsOCArMzUyLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1h
Y3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
c3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7
CiB9OwogCkBAIC0yNTUsNiArMzY0LDcgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIAogICAgIHZvaWQg
Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJl
ZyBzdHViSW5mb0dQUik7CiB9OwogCiBjbGFzcyBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGZpbmFs
IDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTI3Nyw4ICszODcsNiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZl
ciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAotcHJpdmF0ZToKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxl
SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSArNDEwLDkgQEAgcHVibGljOgog
ICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2
YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3Jlc3VsdDsK
IAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVy
OjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzMwLDggKzQzNiw2IEBA
IHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXIm
KTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODMwMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAg
IHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91
YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENv
bnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFu
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBp
ZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9
PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAgICAgICAg
Ly8gQWxsIGxpbmsgdGltZSBjb25zdGFudHMgYXJlIGNlbGxzLgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzQ2VsbCgpOwog
fQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoVmlydHVh
bFJlZ2lzdGVyIHNyYykKIHsKICAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7Ci0gICAgcmV0
dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
dW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykg
IT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKKyAgICByZXR1
cm4gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAogQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJv
bSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQpAQCAtMTU2LDM2ICsxODEsMzYgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeAogI2VuZGlmCiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6
OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
TWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1
bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYg
Ynl0ZWNvZGUsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZp
cnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1
ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwogICAg
IGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgZnVuY3Rpb24s
IFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBBZGRyZXNzIGZ1bmN0
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BS
KSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0
dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9yZShkc3QsIHJldHVy
blZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVC
bG9jay0+aXNLbm93bkNlbGwocmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpCiAgICAg
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjA1LDcgKzIzMCw3IEBAIEFMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcygKIGlubGluZSB2b2lkIEpJVDo6YWR2YW5j
ZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29k
ZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29s
ZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwotICAg
IEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXND
aGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29k
ZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byByZXN1bHQgPSBtX2NoZWNrcG9p
bnRMYWJlbHMuYWRkKG1fYnl0ZWNvZGVJbmRleCwgbGFiZWwoKSk7CkBAIC0yMTUsNyArMjQwLDcg
QEAgaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludAogaW5saW5lIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCBqdW1wKQogewogICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91
bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVj
a3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAg
ICAgYXV0byBpdGVyID0gbV9jaGVja3BvaW50TGFiZWxzLmZpbmQobV9ieXRlY29kZUluZGV4KTsK
QEAgLTI5MywyOSArMzE4LDMzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRDb3VudChB
YnN0cmEKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZp
cnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7Ci19Ci0KLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNW
YWx1ZVJlZ3MgdmFsdWUpCi17Ci0gICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7Ci0K
LSAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQs
IHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0Ci0gICAgLy8gc3RvcmUuCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsK
LSNlbHNlCi0gICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJpdHdpc2Vf
Y2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0g
ICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9h
ZCk7Ci0gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcp
OwotI2VuZGlmCi19CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNv
bnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworfQorCisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUpCisvL3sKKy8vICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOworLy8KKy8v
ICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwg
c28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKKy8vICAgIC8vIHN0b3JlLgorLy8jaWYgVVNFKEpT
VkFMVUU2NCkKKy8vICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tl
dHMpOworLy8jZWxzZQorLy8gICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9
IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVj
a2V0cyk7CisvLyAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFz
Qml0cy5wYXlsb2FkKTsKKy8vICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9y
LT5hc0JpdHMudGFnKTsKKy8vI2VuZGlmCisvL30KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBp
bmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRh
OjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4gSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSkKIHsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogI2Vsc2UKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKQEAg
LTMyMyw0MSArMzUyLDQyIEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxk
ZWMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9w
Y29kZSguLi4pIHsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWVS
ZWdzIHZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVl
UmVncyB2YWx1ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFk
YXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOworCisgICAgcHRyZGlm
Zl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29kZT4obV9i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RC
dWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIs
IG9mZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJl
c3VsdFJlZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVzdWx0UmVnKSk7Ci19CisvL2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykK
Ky8veworLy8gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVS
ZWdzKHJlc3VsdFJlZykpOworLy99CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwg
R1BSUmVnIHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
R1BSUmVnIHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIs
IEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHB0cmRpZmZfdCBvZmZz
ZXRPZkFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hH
UFIpCiB7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBsb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgYXJyYXlQcm9m
aWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9N
ZXRhZGF0YShzY3JhdGNoR1BSLCBieXRlY29kZSwgb2Zmc2V0T2ZBcnJheVByb2ZpbGUpOwogICAg
IH0KIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
UmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJ
RCBzY3JhdGNoR1BSKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQg
SklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsKLSAgICBp
ZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRyZXNzKGFycmF5UHJvZmlsZUdQ
UiwgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSkpOwotICAgIH0K
KyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZM
YXN0U2VlblN0cnVjdHVyZUlEKCksIGNlbGxHUFIsIHNjcmF0Y2hHUFIpOwogfQogCiBBTFdBWVNf
SU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVy
IHNyYykKQEAgLTM4MCw3ICs0MTAsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5p
dFJlZ2lzdGVyCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3Rl
ciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkg
ewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9v
bCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJl
ZyksIHZhbHVlKTsKQEAgLTQ5Niw3ICs1MjYsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9y
ZShWaXJ0dWFsUmVnaXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNL
bm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBp
ZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAg
ICAgICAgIGVsc2UKQEAgLTUwNiw3ICs1MzYsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewotICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJl
ZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MTQsMTEgKzU0NCw2IEBAIGlubGluZSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17
Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
aXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3Rh
bnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJl
Z2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMSkpIHsKQEAgLTU0NCwxMSArNTY5LDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhp
cyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVy
YXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGlmIChzcmMuaXND
b25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7Ci0gICAgICAg
IGVsc2UKKyAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5
VW5saW5rZWRDb2RlQmxvY2soc3JjKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBtb3ZlKElt
bTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTU2NiwxMSArNTkxLDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0Mik7CiB9
CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxS
ZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJv
bSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01OTUsNyArNjE1
LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogCiBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCBy
ZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25v
d25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY1Nyw3IEBAIEFM
V0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBpZiAodGFyZ2V0
KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3V0T2ZM
aW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgR2V0UHV0SW5m
byBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQotewotICAgIHVu
c2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hNYXAgZG9lc24n
dCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRHZXRQdXRJbmZv
cy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0SW5mb3MuZW5k
KCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgR2V0
UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fZ2V0
UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1dEluZm8ub3Bl
cmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
QmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6OmNvcGllZEFy
aXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBrZXkgPSAoc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAzMiB8IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1dG8gaXRlcmF0
b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAh
PSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyYXRvci0+
dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGllZEFyaXRoUHJv
ZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQcm9maWxlOwor
ICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3Ry
dWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiArNjc4LDYwIEBA
IEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICByZXR1cm4gRUNN
QU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFk
ZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZz
ZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDMy
RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BS
UmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlu
a2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkg
KyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYg
Ynl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDgoQWRk
cmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNl
dEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZhbHVlLCBBZGRy
ZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMyVG9NZXRhZGF0
YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkK
K3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRD
b2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9m
ZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFk
YXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgc19tZXRhZGF0YUdQUiwgcmVzdWx0KTsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvbnN0YW50KEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgY29uc3RhbnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFk
ZHJlc3Moc19jb25zdGFudHNHUFIsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oY29uc3RhbnRJbmRl
eCkgKiA4KSwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZEdsb2Jh
bE9iamVjdChHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRDb25zdGFudChtX2dsb2JhbE9iamVj
dENvbnN0YW50LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29k
ZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBHUFJSZWcgcmVzdWx0KQor
eworICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CisgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlc3VsdCk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHJlc3VsdCwgQ29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1
ZmZlcigpKSwgcmVzdWx0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRv
Q29uc3RhbnRJbmRleCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0KTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3Qg
SW5zdHJ1Y3RpbwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0
Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1t
UHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQo
KSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29k
ZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJs
ZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTk3LDcgKzk5Nyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxl
IGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAg
ICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRh
Ymxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFi
bGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6Oklt
bWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUp
OwogCkBAIC0xMDI0LDcgKzEwMjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihj
b25zdCBJbnN0CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0
aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIGNvbnN0IFVubGlua2VkU2lt
cGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAg
ICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJ
bmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5r
ZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA0Miw3ICsxMDQy
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogCiAgICAgLy8g
Y3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dp
dGNoIHN0YXRlbWVudC4KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2st
PnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAg
IG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5k
ZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFi
bGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiAr
NDMsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZpcnR1YWxS
ZWdpc3Rlci5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVz
cGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTU0LDExICs1NiwxNCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAg
ICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKLSAgICAgICAg
ZWxzZQorICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlV
bmxpbmtlZENvZGVCbG9jayhzcmMpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91
bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIHN0b3JlNjQo
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7
CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICB9
CisKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODcsMzcgKzkyLDM1IEBAIHZvaWQgSklU
OjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19v
YmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3Ry
dWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxs
b2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3Ig
YWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2Jq
ZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklm
RXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0
ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSBy
ZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFh
bGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVk
SW1tUHRyKG51bGxwdHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcs
IEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAg
ICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgp
ICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRv
clJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1l
dGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVs
bHB0cik7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6
OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0
Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVj
dHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0
aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JG
ZW5jZSgqbV92bSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CisKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKKyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsK
LSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2
bSgpLCBzdHJ1Y3R1cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChk
c3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzEzNCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Ug
a25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhh
c0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3lt
Ym9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAg
Y3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJl
c3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3Rv
SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKIApAQCAtMTU0LDMwICsxNTgsMzggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNv
ZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJv
dG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVz
ZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0
LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3RvLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm90b0dQUiA9
IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgY29uc3RleHByIEdQUlJl
ZyByZXN1bHRHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBwcm90b0dQUik7CiAgICAgCiAg
ICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwg
LSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNl
LgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8pOwogCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVz
dWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAg
ICAgICAgcmVnVDUsCi0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgcmVzdWx0R1BS
LAorICAgICAgICB2YWx1ZUdQUiwKKyAgICAgICAgcHJvdG9HUFIsCisgICAgICAgIHN0dWJJbmZv
R1BSLAorICAgICAgICBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxLCBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gyKTsKKworICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKKwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMTkyLDE0ICsyMDQsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZP
cHRpbWl6ZSk+KEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCByZWdUMiwgcmVn
VDEpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25J
bnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm8gPT0gYXJndW1lbnRHUFIx
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWUg
PT0gYXJndW1lbnRHUFIyKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6cHJvdG8gPT0gYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3Bl
cmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0yNDAs
NyArMjUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogCiAg
ICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJl
Z1QxLCByZWdUMCk7CiAKQEAgLTM4Myw5ICszOTQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdl
bmVyYXRvcihWTSYgdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKQogewotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExp
c3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQyMiw2
IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChk
c3QgIT0gc3JjKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQsOSArNDQ0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X3Byb3BlcnR5X2tleShjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
ZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0NzYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNl
KGNvbnN0IEluc3RydWN0aQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVn
VDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZh
bHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAo
YnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
Z2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0oKS5nZXRDVElTdHViKHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJn
ZXQpOwpAQCAtNDgwLDcgKzQ5Myw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gxID0gcmVnVDE7CkBAIC01MTksNyArNTMyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251
bGwoY29uc3QgSW5zdHJ1YwogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hl
Y2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1w
IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwg
cmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFk
ZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9i
YWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CiAKQEAgLTU0Myw3ICs1NTYsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBK
U0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3Ry
dWN0dXJlLgogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCBy
ZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRk
SnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7CiAKQEAgLTU4MiwxNSArNTk1LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pu
dW5kZWZpbmVkX29yX251bGwoY28KIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25z
dGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNp
YWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
ZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2lu
dGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1f
aGFzSnVtcGVkKTsKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFs
UG9pbnRlciwgcmVnVDEpOworICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0
cihFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0z
MigxKSwgYnl0ZWNvZGUsIE9wSm5lcVB0cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkp
OwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwogICAgIGVxdWFsLmxpbmsodGhpcyk7CiB9
CkBAIC02MjUsOCArNjM2LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3Ry
dWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdU
MjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNv
bnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0g
ICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1
dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1Qw
LCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVj
dEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJ
U3R1Yih2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
ICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTY0
MCw3ICs2NTMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAg
ICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBi
ZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9G
VEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMs
IHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAg
IEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qx
OwpAQCAtNjk1LDcgKzcwOCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3Ry
dWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29weUNhbGxlZVNhdmVz
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKLSAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhy
b3csIHJlZ1QxLCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICNl
bHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BS
MjsKQEAgLTcxMSw3ICs3MjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0
cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0p
CiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyB0aHJvd25WYWx1ZUdQUiA9IGFyZ3VtZW50R1BSMTsKQEAgLTcyMCw3ICs3MzQs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAKICNpZiBOVU1C
RVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICBqaXQubG9hZFB0cigmdm0udG9w
RW50cnlGcmFtZSwgYXJndW1lbnRHUFIwKTsKLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKGFyZ3VtZW50R1BSMCk7CisgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGFyZ3VtZW50R1BSMCk7CiAj
ZW5kaWYKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRH
UFIwOwpAQCAtOTA4LDcgKzkyMiw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEo
Y29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAs
IHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MTgsNyArOTMzLDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MzEs
NyArOTQ3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydQogICAg
IAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDAp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAo
c3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZS
ZWcpOwogfQpAQCAtOTUxLDcgKzk2Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMo
Y29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwog
ICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQog
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTc4LDcgKzk5
NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk5Myw3ICsxMDA5LDE3
IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkNjQo
QWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVS
ZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhy
ZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisKKyAgICAvLyBXaGVuIHRoZSBMTEludCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0
aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlJ3ZlIGFscmVhZHkgdGllcmVkIHVwCisgICAgLy8gdG8g
YmFzZWxpbmUsIGFuZCB3ZSdsbCBjYXRjaCB0aGF0IGV4Y2VwdGlvbiBpbiB0aGUgYmFzZWxpbmUg
SklULiBCZWNhdXNlIHRoZSBMTEludCB1c2VzCisgICAgLy8gdGhlIGEgZGlmZmVyZW50IHZhbHVl
IGluc2lkZSBzX2NvbnN0YW50c0dQUiwgdGhlIGNhbGxlZSBzYXZlcyB3ZSByZXN0b3JlIGFib3Zl
IG1heSBub3QKKyAgICAvLyBjb250YWluIHRoZSBjb3JyZWN0IHRoYXQgcmVnaXN0ZXIuIFNvIHdl
IHJlcGxlbmlzaCBpdCBoZXJlLgorICAgIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25z
dGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKKyAgICB9CiAKICAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRj
aGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzcsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5
cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2Zp
bGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwot
ICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0o
KSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVl
UHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQ
cm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBP
U1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRp
b25IYW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAo
YnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVh
Y2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdz
KTsKLSAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBA
IC0xMDUzLDggKzEwNjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IElu
c3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVl
OwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRy
YWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBU
YWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVs
dE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1
cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5NSwxNCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1w
bGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRh
YmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpD
aGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxl
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4
LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBl
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5t
X21pbik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQog
CkBAIC0xMDk5LDIwICsxMTE0LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmco
Y29uc3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1
dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
IGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJ
bmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmlu
ZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQ
dHJUYWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJl
cXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5v
RGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUu
bV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBA
IC0xMTMzLDcgKzExNTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3Ry
dWN0CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsK
QEAgLTExNDgsNyArMTE2NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5z
dHJ1Y3QKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTY2
LDcgKzExODIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAK
ICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdU
MCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAg
LTExODgsMTIgKzEyMDQsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1
Y3RpbwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFs
aXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMs
IHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGlt
ZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBtX2NvZGVC
bG9jay0+bnVtVmFycygpOworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2st
Pm51bVZhcnMoKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9yIChzaXpl
X3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJs
b2NrKTsKKyAgICAKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDApOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAgZW1pdEVu
dGVyT3B0aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCkBAIC0xMjEyLDcgKzEyMzAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3Bf
ZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVn
aXN0ZXJzOjplYnApOwpAQCAtMTMxMCwyMyArMTMyOCwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0
cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVy
ZUlELCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRvVGhpczo6
TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJyaWVyQmFz
ZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAg
ICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFS
ZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAtMTM0Miw3
ICsxMzU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAg
IGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJv
dG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBh
bGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25S
YXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlv
bjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNoZWRGdW5j
dGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wQ3JlYXRlVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkQ2FsbGVlKCksIGNhY2hl
ZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQ
dHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11
bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVx
dWFsLCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxl
Q2FsbGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzg2LDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdz
IHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzk3LDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
cT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVn
VDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJu
VmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwg
cmV0dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDEwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQyMSw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJl
Z1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzNiwxMSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25J
bnN0YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
b25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRH
UFIzKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVy
blZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiB9CkBAIC0xNDMwLDcgKzE0NDksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVy
bkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BI
aW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYgKFVOTElL
RUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYg
bV91bmxpbmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlS
ZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhl
Y3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCByZWdUMCk7
CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCByZWdUMCwg
VHJ1c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQo
KSkpOwpAQCAtMTQ0MCw3ICsxNDU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNv
bnN0IEluc3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRpZgotICAg
ICAgICBtb3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRSZWdzKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsxNDcyLDkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAgLy8gRW1p
dCB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkp
IHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8s
IFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgp
KSwKLSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklU
RXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENvZGVCbG9j
azo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAtMTUwOSw3
ICsxNTI5LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1l
bnRHUFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9
IGFyZ3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTE1MjIsNyArMTU0Myw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9jaGVja190cmFwcyhjb25zdCAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9jaGVja190cmFwc19oYW5k
bGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVi
cCk7CkBAIC0xNTY0LDM0ICsxNTg1LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAo
Y29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQocmVnZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBhcmd1bWVudEdQUjA7CisgICAg
bG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29kZUJsb2Nr
LT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1
bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBK
dW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3Bl
LCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1
bWVudEdQUjEpOwogI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1f
Y29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1
dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpG
dW5jdGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pihi
eXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFy
Z3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5
bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19h
c3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBk
c3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0x
NjIxLDIzICsxNjQ0LDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3Qg
SW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BS
MSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7
CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAj
ZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+
ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHBy
LCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9m
dW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIp
OwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29k
ZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3Jf
ZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNf
ZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdf
YXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24p
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAK
QEAgLTE2NjQsMjkgKzE2ODgsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVy
YXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2
OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFBy
b2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAot
ICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIyKTsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9z
aXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhTaXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVj
b2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlv
blByb2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1Qw
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAg
ICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywgcmVnVDIs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTQsOCArMTcx
OSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAKIHZvaWQg
SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogeworICAgIG1faXNTaGFyZWFibGUgPSBmYWxzZTsKKwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBUeXBl
TG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0Vmly
dHVhbFJlZ2lzdGVyOwogCkBAIC0xNzc3LDIwICsxODA0LDI1IEBAIHZvaWQgSklUOjplbWl0X29w
X2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0g
cmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0
aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVn
ID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBt
dXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9
IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0
UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJl
Z2lzdGVyLgorICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAgICAgZW5z
dXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVn
LCBzY3JhdGNoMlJlZyk7CisgICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFk
b3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUMSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZB
TFVFNjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgbV9pc1NoYXJlYWJsZSA9IGZh
bHNlOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9m
aWxlQ29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tM
b2NhdGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMpOwpAQCAt
MTg2MCw3ICsxODkyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElu
cwogICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAogICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
c3VsdFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE5MTgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfcHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKICAg
ICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4MzAxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNs
dWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklu
bGluZXMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9u
U2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRG
R09TUkVudHJ5LmgiCkBAIC0yODU1LDcgKzI4NTYsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9j
ay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0ID0gbGlua2VkVGFibGUu
bV9jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKQEAgLTI4ODAsNyArMjg4MSw3IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtl
eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxp
bmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lk
KiByZXN1bHQ7CiAgICAgaWYgKGtleS5pc0ludDMyKCkpCkBAIC0yOTAzLDcgKzI5MDQsNyBAQCBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7Ci0gICAg
Y29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwogCiAgICAgaWYgKGtleS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmluZ0ltcGwq
IHZhbHVlID0gYXNTdHJpbmcoa2V5KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7CkBAIC0y
OTE5LDcgKzI5MjAsNiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNo
CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKLSNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25SZXNvbHZlU2NvcGVGb3JCYXNlbGluZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0cnVjdGlvbiogcGMpKQogewogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTI5NzEsNyArMjk3MSw2IEBAIEpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25SZXNvbHYKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzb2x2ZWRTY29wZSk7CiB9Ci0jZW5kaWYKIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkdldEZyb21TY29wZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBJbnN0cnVjdGlvbiogcGMpKQogewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OTAsOSArMjkwLDcgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRQcgog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25L
ZXlUeXBlLCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUga2V5LCBzaXpl
X3QgdGFibGVJbmRleCwgaW50MzJfdCBtaW4pKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKFZNKiwgRW5jb2Rl
ZEpTVmFsdWUga2V5LCBzaXplX3QgdGFibGVJbmRleCwgaW50MzJfdCBtaW4pKTsKIEpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBl
LCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUga2V5LCBzaXplX3QgdGFi
bGVJbmRleCkpOwotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25SZXNvbHZlU2NvcGVGb3JCYXNlbGluZSwgRW5jb2RlZEpTVmFs
dWUsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBDKSk7Ci0j
ZW5kaWYKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBF
bmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVj
b2RlUEMpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0VG9TY29wZSwg
dm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCShyZXZpc2lvbiAyODMw
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Nyw3ICs4NywxMiBAQCBhdXRvIEpJVFBsYW46OnRpZXIoKSBjb25zdCAtPiBUaWVy
CiAKIEpJVENvbXBpbGF0aW9uS2V5IEpJVFBsYW46OmtleSgpCiB7Ci0gICAgcmV0dXJuIEpJVENv
bXBpbGF0aW9uS2V5KG1fY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksIG1fbW9kZSk7
CisgICAgSlNDZWxsKiBjb2RlQmxvY2s7CisgICAgaWYgKG1fbW9kZSA9PSBKSVRDb21waWxhdGlv
bk1vZGU6OkJhc2VsaW5lKQorICAgICAgICBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+dW5saW5r
ZWRDb2RlQmxvY2soKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGVCbG9jayA9IG1fY29kZUJsb2Nr
LT5iYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgcmV0dXJuIEpJVENvbXBpbGF0aW9uS2V5KGNv
ZGVCbG9jaywgbV9tb2RlKTsKIH0KIAogYm9vbCBKSVRQbGFuOjppc0tub3duVG9CZUxpdmVBZnRl
ckdDKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQ4LDcgKzM0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklU
UHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJ
bnZhbGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVy
dHlJc1N5bWJvbCA9IHRydWU7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5MiArNDksMTA0IEBAIG5hbWVzcGFj
ZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0
Y2g7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CiAKLSAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlv
bnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBu
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgaWYgKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkg
PiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CisgICAgICAg
IGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwg
c2NyYXRjaEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQ
Uik7CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCByZXN1bHRSZWdzLCByZWdUMik7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKICAg
ICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisKKyAgICAg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dEJ5VmFsOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1p
Z2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AK
KworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2Vu
KTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+CiB2b2lkIEpJ
VDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGlmIChoYXNBbnlT
bG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
Ci0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5
VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxz
W21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1
bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRp
b25HZXRCeVZhbE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0
KTsKICNlbHNlCi0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICBBU1NF
UlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
T2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFs
cmVhZHkgdXNlZC4KLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1l
bnRHUFIyOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwotICAgICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgICAgICBDYWxsIGNhbGw7
Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBhcHBlbmRD
YWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCisgICAgY29uc3RleHByIEdQUlJlZyBwcm9m
aWxlR1BSID0gYXJndW1lbnRHUFIyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UgPT0gcmVnVDApOworICAgIHN0YXRp
Y19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkgPT0gcmVnVDEpOwog
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BS
KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BS
KTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3Zh
bF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwot
ICAgIH0KKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCkBAIC0xNDksNyArMTYxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQu
dGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTYwLDggKzE3Miw4IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVj
dEdQUiA9IGFyZ3VtZW50R1BSNTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50
R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKQEAgLTE4
NywzNCArMTk5LDQwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAg
ICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZSwKKyAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdz
LCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3Mp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewogICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKQEAgLTIyMyw5ICsyNDEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9wcml2YXRlX25hbWUoYwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQ
UjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRQ
cml2YXRlTmFtZU9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1NSwyMCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2Vy
dChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNh
bGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2
YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CkBAIC0yNjQsNyArMjc4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFn
UmV0dXJuQWRkcmVzcygpOwpAQCAtMzAwLDIxICszMTQsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2Rl
Lm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgYnJhbmRH
UFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJp
dmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIg
PSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwotCiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNj
ZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAKICAgICAv
LyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2lu
Y2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC0zMjQsMTcgKzM0NSwyMiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1pdFdyaXRl
QmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0
ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50
SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVFBy
aXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1tt
X3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBy
ZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVC
cmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9w
ZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+KEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMzQ0LDI0ICszNzAsMTgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5
IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJh
bmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02
NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8
ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBl
cywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7
Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25TZXRQcml2YXRl
QnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZgog
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTM3MCwzMyArMzkwLDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2No
ZWNrX3ByaXZhdGVfYnJhbmQoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihicmFuZCwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7CisKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJh
bmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiB9
CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tQcml2YXRlQnJhbmQ+KCk7CisgICAgVU5VU0VEX1BB
UkFNKGJ5dGVjb2RlKTsKKwogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2Vu
ID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJy
YW5kR1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQ
UjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1l
bnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0
ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTQwNiwyNCArNDQwLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2
YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVu
dEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBh
cmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5k
T3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0
aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1l
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAg
Q2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBl
bmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTQzNSwzMCArNDYzLDQzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDMpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdU
MywgcmVnVDQpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIs
IHByb2ZpbGVHUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29k
ZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKIAog
ICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0KTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIsIHN0dWJJbmZvR1BSKTsKKwogICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0
eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxP
cCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJl
Y3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBy
ZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2Vy
dmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFw
cGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3
cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MTUsMTIgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNt
YU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
bnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAg
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21h
TW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyAr
NTM2LDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGlu
IHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmlj
dE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7Cisg
ICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGly
ZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAg
ICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5
cGUob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFI0
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BS
NCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUx
Miw3ICs1NTksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAg
IGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUp
OwpAQCAtNTIzLDcgKzU3MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUzMywxOCArNTgw
LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdU
MjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9
IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZChCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDQpKTsK
KyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAgfQorCiAKICAgICBq
aXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpAQCAtNTcwLDIwICs2MjMs
MzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVn
LCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2
YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1f
cHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2Vu
KTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2NTgsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKLSAgICBQcml2YXRl
RmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgVU5VU0VEX1BB
UkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02MDMsMTMgKzY2NiwxNSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5p
c0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6
IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3Qg
cGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIFRydXN0
ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3Bl
cnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV92YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbjxk
ZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplKT4oQWRk
cmVzcyhhcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50
R1BSMywgYXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjg3LDEyIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgZWxzZQotICAgICAg
ICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtNjQzLDE0ICs3MDIsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAg
ICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Qz
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIApAQCAt
NjgwLDcgKzczOSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAg
IGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDIs
IHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
c2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02
ODksNyArNzQ5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAg
aW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMiwg
cmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
ZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC02OTksNyArNzYwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJf
YnlfaQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MDksNyArNzcxLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
ckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdU
MCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTcxOSw3ICs3ODIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25z
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7
CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyNywyMyArNzkxLDMzIEBAIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZURlbEJ5SWRS
ZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
ICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwg
c2NyYXRjaEdQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpEZWxldGVCeUlEOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdU
MCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkp
OworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAK
ICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIg
aWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBh
dCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0
ZXJzLgpAQCAtNzU5LDE1ICs4MzMsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9p
ZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVREZWxCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwogCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUu
bV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBh
cmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CkBAIC03ODEsMjQgKzg1NywxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5
X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50
R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0Owog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRp
bWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0
ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0
aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTgwOCw3ICs4NzksNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC04NDUsMjIgKzkxNiwz
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwg
YmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVE
ZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVy
dHlHUFIsIHByb3BlcnR5KTsKKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw7CisgICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVy
IGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdp
c3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1i
YXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtODgzLDkgKzk2NSwxMSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFy
Z3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0
aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgp
KSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQgKzk4MywxOSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAg
ZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGlt
aXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQo
cmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMDUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAg
ICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIgKzEwNDAsMzEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBB
Y2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdl
dEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFw
cGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNzQsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb248
ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQ
UjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZS
ZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CkBAIC0xMDAzLDI2ICsxMDk0LDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlf
Z2V0X2J5X2lkKGNvbnMKICAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9w
dGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0
QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAz
MCwyMiArMTExNSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGly
ZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBy
ZWdUMCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHVi
SW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVn
cyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiAr
MTE0OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVj
dE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRH
UFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0
QnlJZERpcmVjdE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMTA3Myw4MyArMTE2OSw2MiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpLCBk
ZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogICAg
IAogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJy
YW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEu
bW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJy
YXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdU
MCwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUs
IHJlZ1QxKTsKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6
TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhOjpv
ZmZzZXRPZk1vZGUoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhN
b2RlID0gYnJhbmNoMzIoTm90RXF1YWwsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90
PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5v
dEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vz
c1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdl
bik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJl
ZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSwgdGhpc1ZSZWcpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRS
ZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCi0gICAgSklUR2V0QnlJZFdpdGhU
aGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlk
c1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQg
T1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2
ICsxMjMzLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsK
KyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3NywyNiAr
MTI1NCw1OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1
ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVy
czo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpy
ZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworCisgICAgSklUR2V0QnlJ
ZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRo
VGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBu
ZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBt
X2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjA2LDcg
KzEzMTUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRy
ZXNzKCk7CkBAIC0xMjQxLDE2ICsxMzUwLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5
SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdp
dGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUs
IGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9w
ZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1l
bnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1
bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVu
dEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI4ICsxMzcyLDIyIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0
aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3Rh
dGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAg
LTEyOTEsNyArMTM5Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKQEAgLTEzMjksMjMgKzE0MzUsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBh
bmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1
c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdo
b3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUg
U3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0
aGlzLgogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1
ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNo
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywg
dmFsdWVHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
VlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFN
b2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUo
Ynl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpO
b3REaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9
IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHVi
SW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8g
V2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNl
dCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAg
ICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJp
ZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsxNDgwLDE4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlk
PigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAgICAKICAgICBKSVRQdXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2Vu
LnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMzc2LDI1
ICsxNTAxLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFy
ZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1Qx
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAg
c3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IGdlbi5zbG93UGF0aEZ1bmN0aW9uKCk7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChnZW4uc2xvd1BhdGhGdW5jdGlvbigpKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTE0MDQsNyArMTUyMyw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE0NDEs
MjAgKzE1NjAsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Ywog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0NjMsMTQgKzE1OTMsMTcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxs
T3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjEzLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
Ly8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5
IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBh
IGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2MzcsMzMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NzIsMTggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlW
YWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5
VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50
R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1p
emUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC0xNTU2LDU5ICsxNjk0LDcwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBh
cmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRH
UFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAg
c3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6
Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0
X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVk
LgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRo
dW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSksIGRlY2x0eXBl
KG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeVZhbE9wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVh
bFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5
cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlP
ckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlwZTsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJVDo6ZW1pdEhhc1ByaXZh
dGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBBU1NFUlQodHlwZSA9
PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVCcmFuZCk7CisgICAgVU5VU0VEX1BBUkFNKGJhc2UpOworICAgIFVOVVNFRF9QQVJBTShw
cm9wZXJ0eSk7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIAog
ICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgr
K107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6
ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdU
MSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0
aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpPihBZGRyZXNzKGFy
Z3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
ZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2Nywy
MSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlP
ckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlP
ckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFz
UHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBl
KG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0
UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVO
YW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZh
dGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTY1Miw3ICsxNzk1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19w
cml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAg
IGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUu
bV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDIxNSArMTgwOSwxMjcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhh
c1ByaXZhdGVCcmFuZD4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3Qs
IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5
dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hl
Y2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0
aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIHNjcmF0Y2hHUFIp
CiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworCisgICAgbG9hZEdsb2JhbE9i
amVjdChzY3JhdGNoR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNU
X09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgc2Ny
YXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNo
R1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgcmVnVDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQogICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVn
VDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLXZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0
ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1f
cmVzb2x2ZVR5cGU7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVE
ZXB0aDsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
KSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25z
dGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJl
Z1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNh
c2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSog
Y29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2
ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50
U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Y29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ2xv
c3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
LSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRh
ZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNl
IFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0g
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihy
ZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5r
KHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExl
eGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7
Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAg
ICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGlu
ayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICBza2lw
VG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci0jZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQogdm9pZCBKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3Bl
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9y
ZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4
cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29w
ZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUg
Z2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVz
b2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwg
cmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAg
ICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVsc2UgewotICAg
ICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5
dGVjb2RlKTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZt
KSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmso
dm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7
CisgICAgICAgIH07CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5
cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBz
dGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAg
Rk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAgICBh
dXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2
bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5r
KHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNv
bHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7CiAgICAgICAgIH07
Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBhdXRvIGdlbmVyaWNS
ZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4g
SklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2Vs
aW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMiKTsKKyAgICAgICAgfTsKKworICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDI7CisgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0
KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7
CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAg
ICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAg
ZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7CisgICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAg
ICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNj
b3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkg
dGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklU
IGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBP
cFJlc29sdmVTY29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQ
UiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSBy
ZWdUNjsgLy8gaW5jb21pbmcKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVn
VDI7IC8vIGluY29taW5nCisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOyAv
LyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdU
NTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgotICAgIGNvbnN0ZXhwciBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNj
b3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxv
Y2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywg
bWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihy
ZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRv
IGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKKyAgICBhdXRvIGRv
VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQ
UlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgIGlmICghbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChn
bG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2Jq
ZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBD
b2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAg
ICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1Qz
KTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMs
IFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JK
RUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwg
cmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJl
c3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9
IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNjb3Bl
R1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKLQotICAgICAg
ICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QxKTsKLSAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29w
LCB0aGlzKTsKLSAgICAgICAgfQotICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRv
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHNjb3BlR1BSID09IHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZMb2NhbFNjb3BlRGVwdGgoKSksIHJlZ1Qx
KTsKKworICAgICAgICBMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7CisgICAgICAgIEp1bXAgZG9u
ZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOworICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAg
aml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICBqaXQuanVtcCgpLmxp
bmtUbyhsb29wLCAmaml0KTsKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgIH07CiAKICAg
ICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewpAQCAtMTg4
MiwxMiArMTkzNywxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25z
dGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4K
LSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2No
KSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2Jh
bExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKGdsb2Jh
bE9iamVjdEdQUiwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2No
KCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIApAQCAtMTg5NywxMSArMTk1MSwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2Rl
QmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAog
ICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGlj
YWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAg
IGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25t
ZW50KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENsb3N1cmVWYXI6CkBAIC0xOTA5LDcgKzE5NjMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgp
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBN
b2R1bGVWYXI6CkBAIC0xOTE5LDgzICsxOTczLDQ1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29s
dmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7
Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZl
VHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkg
PyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxW
YXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVt
aXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRh
OjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdUMSk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
aml0Lmp1bXAoKSk7CisgICAgICAgICAgICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07
CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5s
aW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIGVtaXRDYXNlKEdsb2Jh
bFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENh
c2UoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsK
IAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAg
YnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAotICAgIHJldCgp
OworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xv
d0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVy
YXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwo
c2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6
OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJl
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9SRVNPTFZF
X1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJh
dG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNl
ZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsg
fTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Nj
b3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJ
TkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpz
bG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVu
ayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50
IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91
dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdp
bmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIAogICAgIC8vIFRoZSBmYXN0IHBhdGggYWxyZWFkeSBwdXNoZWQgdGhlIHJldHVybiBh
ZGRyZXNzLgogI2lmIENQVShYODZfNjQpCkBAIC0yMDM0LDcgKzIwNTAsNiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgcGF0Y2hCdWZmZXIubGluayhleGNl
cHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQ
dHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNvbHZlX3Njb3BlIik7CiB9Ci0jZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3Qp
CiB7CkBAIC0yMDYyLDI3NiArMjA3NywxMzMgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFy
KFZpcnR1YWxSZWdpcwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSks
IHJlZ1QwKTsKIH0KIAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAg
ICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgp
OwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dElu
Zm8ucmVzb2x2ZVR5cGUoKTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKLSAgICAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAg
ICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUg
c3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxs
eSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4K
LSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVz
dWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2Nv
cGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSkpOwotICAgICAgICAgICAgfSkpOworICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNv
ZGVJbmRleCk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgICAgICAgICBs
b2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJM
RUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRl
clRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkp
OwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGlu
ZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAg
ICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2Fk
NjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBj
YXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZv
ck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgaWYgKHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xv
c3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBj
YXNlIE1vZHVsZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KKyAgICBhdXRvIGNs
b3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6Omdl
bmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9n
ZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2
ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwot
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkg
PyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxW
YXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsK
LSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDAp
OyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGlu
ayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotCi0gICAg
ICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBk
ZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlv
bkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLSNlbHNlIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29k
ZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2Vu
ZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsK
IAotICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7Cisg
ICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpu
dWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9Owog
Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAotICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsKLSAgICAgICAgdWludHB0cl90KiBvcGVyYW5kU2xv
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0g
ICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVy
YW5kU2xvdCksIHJlZ1QwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRh
dGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7
CisgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0
YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0jZGVmaW5lIEdFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNv
bHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3Ig
Z2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKEdFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUikKLSAgICAgICAgfTsKLSN1bmRlZiBHRVRfRlJPTV9TQ09QRV9H
RU5FUkFUT1IKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwog
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLSAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jl
c29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICB9CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgIGlmIChwcm9maWxlZFJl
c29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNs
b3N1cmVWYXJHZW5lcmF0b3IpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0g
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGNvZGUgPSB2bS5nZXRD
VElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICBl
bHNlCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5l
cmF0b3IpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9t
U2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBl
LCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBi
eSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBK
SVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2Vk
Rm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKLQotICAgIHRhZ1JldHVybkFkZHJlc3Mo
KTsKLQotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0
YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCi0gICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9
IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSB7
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgbWV0YWRhdGFTdHJ1Y3R1cmVP
ZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwotICAgIH07CisgICAg
aml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAg
aml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2U7
CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxP
YmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0Ojpv
ZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdU
MywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9p
bnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWws
IEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFy
RnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBs
b2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxv
YWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0g
WyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBsc2hpZnQ2NChU
cnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9w
ZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7Ci0gICAgfTsKLQotICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGly
ZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUg
c3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxs
eSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4K
LQotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAo
dm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwg
cmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJl
Z1QzKTsKKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlv
biBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEds
b2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcg
Zm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgp
KSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRy
KFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0
cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisKKyAgICAgICAgICAgIGppdC5qaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAg
ICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAg
ICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNU
X09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQo
KSksIHJlZ1QxKTsKKwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAg
ICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwg
b2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAg
ICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAg
ICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091
dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRX
aXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091
dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAg
ICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9m
ZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zm
c2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworCisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAg
ICAgICBqaXQubmVnMzIocmVnVDEpOworICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QxLCByZWdUMSk7CisgICAgICAgICAgICBqaXQubG9hZDY0KEJhc2VJbmRleChyZWdUMCwg
cmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2Fz
ZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5k
KSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29w
ZXJhbmQpKSwgcmVnVDMpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIs
IHJlZ1QzKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMyk7CisgICAg
ICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAg
ICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5hZGRQdHIoc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwg
cmVnVDApOworCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAg
ICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNv
bHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM0MSw4NiArMjIx
Myw2MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAg
IH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVn
VDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJl
c29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEdsb2JhbFByb3Bl
cnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDog
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBp
ZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09
IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2Ugewog
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7
Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1Qw
KTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwgcmVnVDApOwor
ICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVn
VDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRo
aXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIu
bGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAg
ICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxp
bmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1
bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluaygm
aml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluaygmaml0
KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAg
ICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0
Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRv
RW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6
Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQu
c3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJv
ZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKIAotICAgIHJl
dCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8g
c2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVH
ZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxh
YmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9u
TGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dF
VF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUj
I0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1
bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJl
dHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5n
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0
X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAg
Ly8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0
aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdp
c3RlcnM6OmVicCk7CkBAIC0yNDI5LDcgKzIyNzgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAjZW5kaWYKIAogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRG
cm9tU2NvcGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSBy
ZWdUNzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CiAgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIGppdC5zdG9yZTMy
KGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpKTsKIApAQCAtMjQ0OSw3ICsyMjk4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIENhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3Bl
cmF0aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0LmVtaXROb25QYXRj
aGFibGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVz
cyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVt
YmVyVGFnUmVnaXN0ZXIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmls
ZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKIAogI2lmIENQ
VShYODZfNjQpCkBAIC0yNDY5LDg4ICsyMzE4LDc3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1ZmZlci5saW5rKGp1bXBUb0hhbmRsZXIsIENv
ZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxp
bmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBv
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdy
aXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVt
aXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRT
ZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxv
YWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRl
KHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9y
ZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsK
LSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhy
ZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5k
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNv
cGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0g
Z2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3Qg
PSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xv
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAK
LSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBp
bmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZl
VHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
c2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNr
aW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVj
ayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZv
ciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9u
YWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlv
bi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQo
c2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVn
VDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxv
YWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAg
ICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdo
dCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7
Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1Qy
LCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25z
dGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAg
aWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYm
IChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVn
VDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1Qw
KTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKKworICAgICAgICAgICAg
aWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2Fu
J3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0g
ICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAg
ICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
Km9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAp
LCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdU
MSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJh
bmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lz
ZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hw
b2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNv
bnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxv
YWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNl
dE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVX
YXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkp
OworCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBS
ZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisKKyAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9w
ZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChy
ZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAg
ICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOworCiAgICAgICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjU2NCw1OCAr
MjQwMiw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAg
ICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0
UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAot
Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2Fs
VmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0
byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAgICAgICAgaXNHbG9iYWxM
ZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6
Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Cisg
ICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJlVmFyLyBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGlsZSB0aGluZ3MKKyAgICAv
LyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3ZlIHByb3ZlbiB0aGF0IGlz
IHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZhciwKKyAgICAvLyBhbGwg
Q29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgorICAgIC8vIGlmIHRoZSB2
YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0IGlzIGZpcmVkLCB0aGVu
IHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAgIC8vIG1hdHRlciB3aGF0
IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYg
KHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyKQorICAgICAgICBlbWl0
Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5
cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGVtaXRDb2Rl
KENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbHNlIHsKICAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9T
Y29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7CiAgICAgICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBS
ZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
UHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAorICAgICAgICBK
dW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKHRoaXMpOwor
CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7
CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAog
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAKICAgICAgICAgc2tpcFRv
RW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwogICAg
IH0KIH0KIApAQCAtMjYyNCwxOCArMjQ1NiwyMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29s
dmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgIFJlc29s
dmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYgYW55IGxpbmtlZCBDb2Rl
QmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29kZUJsb2NrcyBhcmUgZ3Vh
cmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIuCiAgICAgICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3Bh
dGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAg
ICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3VtZW50R1BSMCwgY3VycmVu
dEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwog
ICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29k
ZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0
ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zm
c2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3ICsyNDg3LDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3Rl
cnM6OmVicCk7CkBAIC0yNzAxLDcgKzI1MzYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVu
dHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpz
dG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwg
cmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3
ICsyNTk0LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkBAIC0yNzY3LDcgKzI2MDEs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRl
eCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdU
MCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjgyMyw3ICsyNjU3LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0bwogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
TmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwpAQCAtMjgzOSwxMSArMjY3
MiwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiAgICAgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIG1v
ZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2UgaXQgaWYgd2UgcHJvZmlsZSBp
dCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhID09
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgeworICAgIGlmIChi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2VudW1lcmF0b3JNZXRhZGF0
YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKICAgICAg
ICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSByZWdUNDsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBl
bnVtZXJhdG9yR1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3Qz
MihOb25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigofkpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6T3duU3RydWN0dXJlTW9kZSkgJiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0
aW9uTW9kZU1hc2spKSk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CisKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRv
ck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpP
d25TdHJ1Y3R1cmVNb2RlKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlOFRvTWV0YWRhdGEo
c2NyYXRjaEdQUiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKKwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBpbmRleEdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2gzMihO
b3RFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSkpOwogCkBAIC0yODgxLDc4ICsyNzIwLDg4IEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3By
b3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1f
ZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CiAKLSAgICBhdXRvIHJlc3VsdEdQ
UiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVFbnVt
ZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJz
OjpzY3JhdGNoMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gQmFzZWxpbmVFbnVt
ZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDM7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5TmFtZSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCBzY3JhdGNoMyk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHByb3BlcnR5R1BSKTsKIAot
ICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRh
ZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRC
eVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHNjcmF0Y2gyKTsK
KyAgICBvcjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7CisgICAgc3RvcmU4VG9NZXRhZGF0YShzY3Jh
dGNoMiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZF
bnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUikpOwogICAg
IC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQgdmFsdWUuCi0gICAgSnVtcCBpc05v
dE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDIsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVN
b2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6R2VuZXJpY01vZGUpKTsKIAogICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDMpOwotICAgIEp1bXAg
c3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVn
VDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgc2NyYXRjaDEpOworICAg
IGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2gyKTsKKyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWws
IHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMyk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgc2NyYXRjaDIpOwogICAgIC8vIElmIGluZGV4IGlzIGxlc3Mg
dGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFu
IGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRl
bmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVn
VDMsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwotCisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3Mg
PSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAg
ICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOworICAgIGxvYWQ2NChCYXNl
SW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkp
OwogCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKICAgICBvdXRPZkxpbmVBY2Nl
c3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMyk7
Ci0gICAgbmVnMzIocmVnVDMpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7
CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIGJhc2VHUFIpOworICAgIHN1YjMyKEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAg
ICBuZWczMihzY3JhdGNoMik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0
Y2gyKTsKICAgICBjb25zdGV4cHIgaW50cHRyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gb2Zm
c2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpICogc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAs
IHJlZ1QzLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwor
ICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1w
KCkpOwogCiAgICAgc3RydWN0dXJlTWlzbWF0Y2gubGluayh0aGlzKTsKLSAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1v
ZGVTdHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSk7Cisg
ICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgYnl0ZWNvZGUsIE9w
RW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEo
KSk7CiAKICAgICBpc05vdE93blN0cnVjdHVyZU1vZGUubGluayh0aGlzKTsKLSAgICBKdW1wIGlz
Tm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKKyAgICBKdW1wIGlzTm90SW5kZXhl
ZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKICAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcg
d2l0aCB0aGUgaW5kZXguCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHByb3BlcnR5R1BSKTsKIAogICAg
IGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaDEpOwogCiAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dEJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdl
IG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5
NjEsMTAgKzI4MTAsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlf
CiAgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
bnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0ZXIpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bj
b2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9l
bnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBl
IGdlbmVyYWxDYXNlKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBTbG93
UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5
SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBCeXRlY29k
ZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQogewotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvcjsKQEAgLTI5NzMsNyArMjgyMSw5IEBAIHZvaWQgSklUOjplbWl0
X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW0KICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QwKTsKLSAgICBvcjgocmVnVDAsIEFi
c29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2Fk
OEZyb21NZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1l
cmF0b3JNZXRhZGF0YSgpLCByZWdUMSk7CisgICAgb3IzMihyZWdUMCwgcmVnVDEpOworICAgIHN0
b3JlOFRvTWV0YWRhdGEocmVnVDEsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNl
dE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hU
ZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAKQEAgLTMwNjIsNiArMjkxMiwxMyBAQCB2b2lkIEpJVDo6
ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbi5saW5rKHRoaXMpOwogfQogCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihHUFJSZWcg
b3duZXIpCit7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJy
YW5jaCh2bSgpLCBvd25lciwgc2VsZWN0U2NyYXRjaEdQUihvd25lcikpOworICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0o
KSwgb3duZXIpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYs
OSArMjM2LDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAg
ICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlQ2VsbCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
c3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAogICAgICAgICAgICAgICAg
ICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwKLSAgICAgICAgICAgICAgICAgICAg
JiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nhc3Q8
SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNj
ZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxK
U0FycmF5Kj4oYmFzZUNlbGwpKSkgewogCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJh
dGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChzdHViSW5m
bywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOworICAgICAgICAgICAgICAgICAgICBib29s
IGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgo
Y29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3By
aWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aChsb2NrZXIpOwpAQCAtMjQ5LDggKzI0OSw4IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgICAg
ICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6
OkFycmF5TGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpc0pT
U3RyaW5nKGJhc2VDZWxsKSkgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5
cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFj
Y2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVT
dHJpbmdMZW5ndGgoc3R1YkluZm8pOworICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nl
c3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pKSB7CisgICAg
ICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbyk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0
aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1
YkluZm8uaW5pdFN0cmluZ0xlbmd0aChsb2NrZXIpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgICAgICAmJiAh
c2xvdC53YXRjaHBvaW50U2V0KCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVk
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICAgICAmJiAhbG9hZFRhcmdl
dEZyb21Qcm94eSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3Moc3R1YkluZm8sIHN0cnVj
dHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0
ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vzcyhj
b2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAg
ICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAg
ICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xv
dEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5z
dGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOwpAQCAtNzMxLDExICs3MzEsMTEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlUHV0QnkoSgogICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0
eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0
Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJv
cGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQorICAgICAgICAgICAg
ICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShj
b2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQogICAgICAgICAgICAgICAg
ICAgICAmJiAhb2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAg
ICAgICAgICAgICAgICAgICAgJiYgIWlzUHJveHkpIHsKICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNs
b3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENv
ZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJl
LT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwgcHV0
S2luZCkpOwpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZQog
ICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQogICAgICAgICAgICAgICAg
ICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewotICAgICAg
ICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTZWxmSW5BY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgYm9v
bCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlmIChn
ZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVu
dDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xv
dEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRX
YXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsK
QEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxs
TGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxp
bmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0lu
Zm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAgIHJldmVydENhbGwo
dm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5y
ZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDI0ICs0Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
aGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0
OwotCi0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHZtLnRvcEVudHJ5RnJhbWUpOwotCi0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LnByZXBhcmVDYWxs
T3BlcmF0aW9uKHZtKTsKLQotICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb24gPSBqaXQu
Y2FsbChPcGVyYXRpb25QdHJUYWcpOwotCi0gICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIo
dm0pOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgcGF0Y2hCdWZmZXIubGlu
ayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3Vw
RXhjZXB0aW9uSGFuZGxlcikpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbiIpOwotfQotCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xs
YmFja0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKQEAgLTc3LDI0
ICs1OSw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGEKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVF
eGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2siKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0
aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0jaWYgQ1BV
KFg4Nl82NCkKLSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIgKiBz
aXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjplc3ApOwotI2VsaWYgQ1BVKEFSTTY0
KQotICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIEND
YWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKLSNlbmRpZgotCi0gICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRo
dW5rKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlvbkdl
bmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjb250aW51YXRpb24sIENvZGVMb2NhdGlv
bkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7Ci0gICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAicG9wVGh1bmtTdGFja1By
ZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBD
Q2FsbEhlbHBlcnMgaml0OwpAQCAtMTM3LDYgKzEwMSw0MiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGNoCiAKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRp
b25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQu
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlG
cmFtZSk7CisKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0p
OworCisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlv
blB0clRhZyk7CisKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CisKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQ
cm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwg
RnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5k
bGVyKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRy
VGFnLCAiaGFuZGxlRXhjZXB0aW9uIik7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVy
YXRvcihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworI2lmIENQVShYODZfNjQp
CisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQ
VVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBq
aXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBl
cnM6OmxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIENDYWxsSGVscGVyczo6SnVtcCBjb250
aW51YXRpb24gPSBqaXQuanVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Cisg
ICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3Ip
OworICAgIHBhdGNoQnVmZmVyLmxpbmsoY29udGludWF0aW9uLCBDb2RlTG9jYXRpb25MYWJlbCho
YW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNB
bmRIYW5kbGVFeGNlcHRpb24iKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVGFnVHlwZT4KIGlu
bGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IHBvaW50ZXJHUFIsIFRhZ1R5cGUgdGFnKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywx
MiArMzcsMTIgQEAgY2xhc3MgVk07CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5l
cmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxl
RXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKFZNJik7Ci1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5k
bGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4
Y2VwdGlvbkdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZN
Jik7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRp
b25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgzMDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JD
aGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2hlY2twb2lu
dE9TUkV4aXRTaWRlU3RhdGUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5j
bHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCkBAIC0zNzAsMTMgKzM3MSwyMiBAQCBpbmxpbmUg
Ym9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAgICAgCiAgICAgY29kZUJsb2NrLT51
cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwogCisgICAgaWYgKGNvZGVCbG9jay0+
aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIGlmIChSZWZQdHI8
QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxv
Y2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICAgICAgY29kZUJsb2NrLT5z
ZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2Rl
KGNvZGVCbG9jayk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmppdE5leHRJbnZvY2F0aW9uKCk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICgh
Y29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIENPREVC
TE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJ0aHJlc2hvbGQg
bm90IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIo
KSkpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklU
IHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIAotICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0gSklUV29y
a2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0o
dm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNl
bGluZSkpOworICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0gSklUV29ya2xp
c3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0s
IEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSwgSklUQ29t
cGlsYXRpb25Nb2RlOjpCYXNlbGluZSkpOwogCiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBpbGVkLiIpOwpAQCAtNDY2
LDggKzQ3NiwxMCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICBpZiAoVU5M
SUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAm
JiBjb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkp
KSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0uZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3Vu
dGVyKHBjKTsKICAgICAgICAgKnB0ciArPSBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIo
KS5tX2FjdGl2ZVRocmVzaG9sZDsKLSAgICAgICAgaWYgKCpwdHIgPj0gT3B0aW9uczo6ZWFybHlS
ZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpCisgICAgICAgIGlmICgqcHRyID49IE9wdGlv
bnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSB7CisgICAgICAgICAgICBj
b2RlQmxvY2stPmVuc3VyZUpJVERhdGEoQ29uY3VycmVudEpTTG9ja2VyKGNvZGVCbG9jay0+bV9s
b2NrKSk7IC8vIFdlJ3JlIHJldHVybmluZyB0byB0aGUgT1NSIGVudHJ5IGNvZGUgaGVyZSwgd2hp
Y2ggZXhwZWN0cyB0aGF0IG1faml0RGF0YSBpcyBub3QgbnVsbC4KICAgICAgICAgICAgIExMSU5U
X1JFVFVSTl9UV08oTExJbnQ6OmZ1enplclJldHVybkVhcmx5RnJvbUxvb3BIaW50RW50cnlwb2lu
dCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7
CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTIsMTAgKzEwMTIsNiBAQCBz
dHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9w
Y29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0
aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQ
cm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAg
ICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAgICAgZ2V0KG1fc3JjRHN0
LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBJbnQzMlRhZywgLnNs
b3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0
cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwgc3JjRHN0IGluIHQyCiAgICAgICAg
IGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAgICAgICBzdG9yZWkgdDIsIFBheWxvYWRP
ZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmls
ZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0
aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBA
IC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdh
dGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVy
bikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlw
ZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxl
OjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgZ2V0KG1f
b3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEsIHQy
KQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90SW50CiAgICAgYnRpeiB0
MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDIKLSAgICB1cGRhdGVBcml0
aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9w
TmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAgICByZXR1cm4gKEludDMyVGFnLCB0
MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEsIExvd2VzdFRhZywgLm9wTmVnYXRl
U2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJp
dGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBB
cml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1cm4odDEsIHQyKQogCiAub3BOZWdh
dGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkKIAogbWFjcm8gYmluYXJ5T3BDdXN0
b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb25BbmRTdG9y
ZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5h
bWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
cmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9y
aCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5
QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRh
KHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAgICAgICAgZ2V0KG1fbGhzLCB0MCkK
QEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFt
ZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0
MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAub3AxTm90SW50CiAgICAgICAgIGJpbmVx
IHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9m
aWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAg
ICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0MSwgdDAsIC5zbG93LCB0MikKICAg
ICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwxMiBAQCBtYWNybyBiaW5hcnlPcEN1
c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJpYSB0MiwgTG93ZXN0VGFnLCAuc2xv
dwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5vdEludE9wMkRvdWJsZQogICAgICAg
ICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFBy
b2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVT
dHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwg
ZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AyRG91Ymxl
OgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQ
cm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bj
b2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAub3AxTm90
SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAgICAgICAgIGZpaTJkIHQwLCB0Miwg
ZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29k
ZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwg
dGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90LgogICAgICAgICBnZXQobV9kc3Qs
IHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9m
aWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9m
aWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAgICAgICAg
IGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKICAgICAgICAgZG91Ymxl
T3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDI4MzAxOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3
b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEzIEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRG
b3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMsIGExCiAgICAgICAgICAgICBjQ2FsbDIoX2xs
aW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRweiByMCwgLnJlY292ZXIKLQogICAgICAgICAg
ICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAgIyBCYXNlbGluZSB1c2VzIExMSW50J3MgUEIg
cmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQgcG9vbC4KKyAgICAgICAgICAgIGxvYWRwIENv
ZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2ppdERhdGFb
UEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjpKSVREYXRhOjptX2ppdENvbnN0
YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAgIGlmIEFSTTY0RQogICAgICAgICAgICAgICAg
IGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFw
ICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50cnkpICogUHRyU2l6ZSwgYTIKICAgICAgICAg
ICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgSlNFbnRyeVB0clRhZwpA
QCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9w
Sm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3Bl
cmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVT
dHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAg
ICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBl
LCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0
MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQogICAgICAgICBtZXRhZGF0YSh0Miwg
dDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVT
dHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDEsIC5zbG93KQogICAgICAgICBv
cnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEgdDEsIFtjZnIsIHQwLCA4XQotICAgICAg
ICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDIsIHQzKQogICAg
ICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTExMzQsMTEgKzExMzUsNiBAQCBlbmQp
CiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLQotICAgIG1hY3JvIHVwZGF0ZUFy
aXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjpt
X2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgZW5kCi0K
ICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUs
IHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0xMTQ2LDEyICsxMTQyLDEyIEBAIGxs
aW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwKICAgICBidGl6IHQzLCAweDdm
ZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MwogICAgIG9ycSBudW1iZXJUYWcsIHQz
Ci0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFy
eUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAgcmV0
dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0cXogdDMsIG51bWJlclRhZywgLm9wTmVn
YXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAwLCB0MwotICAgIHVwZGF0ZUFyaXRo
UHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUo
T3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEsIHQyKQogICAgIHJldHVybih0MykKIAog
Lm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNjAsNiBAQCBtYWNybyBiaW5hcnlPcEN1c3Rv
bVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2Rl
TmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRh
LCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAotICAgICAgICBtYWNybyBwcm9m
aWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAg
ICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQogICAgICAgICBnZXQobV9saHMsIHQyKQog
ICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkKQEAgLTExNzcsNyAr
MTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAg
ICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0
MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAg
ICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJ
bnRJbnQsIHQ1LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLm9wMU5vdEludDoKQEAg
LTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1l
LCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93CiAgICAgICAgIGFkZHEgbnVt
YmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKLSAgICAgICAgcHJvZmlsZShBcml0aFBy
b2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQyKQogICAgICAgICBqbXAg
Lm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkludDoKLSAgICAgICAgcHJvZmlsZShB
cml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQyKQogICAgICAgICBjaTJk
cyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQyKQpA
QCAtMTIwNCw5ICsxMTk2LDkgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1l
LCBvcAogCiAgICAgLm9wMk5vdEludDoKICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmlu
aXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIGlzIGRlZmluaXRlbHkgbm90LgotICAgICAgICBnZXQo
bV9kc3QsIHQyKQogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93Ci0gICAgICAgIHBy
b2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFBy
b2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0MikKKyAgICAg
ICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBhZGRxIG51
bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCkBAIC0xNTE4LDcgKzE1MTAsNyBAQCBs
bGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV9pZF9kaXJlY3QsCiBlbmQpCiAKICMgVGhlIGJh
c2Ugb2JqZWN0IGlzIGV4cGVjdGVkIGluIHQzCi1tYWNybyBwZXJmb3JtR2V0QnlJREhlbHBlcihv
cGNvZGVTdHJ1Y3QsIG1vZGVNZXRhZGF0YU5hbWUsIHZhbHVlUHJvZmlsZU5hbWUsIHNsb3dMYWJl
bCwgc2l6ZSwgbWV0YWRhdGEsIHJldHVybikKK21hY3JvIHBlcmZvcm1HZXRCeUlESGVscGVyKG9w
Y29kZVN0cnVjdCwgbW9kZU1ldGFkYXRhTmFtZSwgdmFsdWVQcm9maWxlTmFtZSwgc2xvd0xhYmVs
LCBzaXplLCBtZXRhZGF0YSwgcmV0dXJuLCBkb0FycmF5UHJvZmlsZSkKICAgICBtZXRhZGF0YSh0
MiwgdDEpCiAgICAgbG9hZGIgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRh
TmFtZSUubW9kZVt0Ml0sIHQxCiAKQEAgLTE1NDYsNyArMTUzOCw3IEBAIG1hY3JvIHBlcmZvcm1H
ZXRCeUlESGVscGVyKG9wY29kZVN0cnVjdCwKIC5vcEdldEJ5SWRBcnJheUxlbmd0aDoKICAgICBi
Ym5lcSB0MSwgY29uc3RleHByIEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCwgLm9wR2V0QnlJZFVu
c2V0CiAgICAgbW92ZSB0MywgdDAKLSAgICBhcnJheVByb2ZpbGUoJW9wY29kZVN0cnVjdCU6Ok1l
dGFkYXRhOjolbW9kZU1ldGFkYXRhTmFtZSUuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwg
dDAsIHQyLCB0NSkKKyAgICBkb0FycmF5UHJvZmlsZSh0MCwgdDIsIHQ1LCB0MSkKICAgICBidGl6
IHQwLCBJc0FycmF5LCBzbG93TGFiZWwKICAgICBidGl6IHQwLCBJbmRleGluZ1NoYXBlTWFzaywg
c2xvd0xhYmVsCiAgICAgbG9hZENhZ2VkSlNWYWx1ZShKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNd
LCB0MCwgdDEpCkBAIC0xNTY4LDcgKzE1NjAsMTAgQEAgZW5kCiBsbGludE9wV2l0aE1ldGFkYXRh
KG9wX2dldF9ieV9pZCwgT3BHZXRCeUlkLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0
YWRhdGEsIHJldHVybikKICAgICBnZXQobV9iYXNlLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlQ2VsbChzaXplLCB0MCwgdDMsIC5vcEdldEJ5SWRTbG93KQotICAgIHBlcmZvcm1HZXRC
eUlESGVscGVyKE9wR2V0QnlJZCwgbV9tb2RlTWV0YWRhdGEsIG1fcHJvZmlsZSwgLm9wR2V0QnlJ
ZFNsb3csIHNpemUsIG1ldGFkYXRhLCByZXR1cm4pCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIo
T3BHZXRCeUlkLCBtX21vZGVNZXRhZGF0YSwgbV9wcm9maWxlLCAub3BHZXRCeUlkU2xvdywgc2l6
ZSwgbWV0YWRhdGEsIHJldHVybiwKKyAgICAgICAgbWFjcm8gKGNlbGxBbmRJbmRleGluZ1R5cGUs
IG1ldGFkYXRhLCBzY3JhdGNoMSwgc2NyYXRjaDIpCisgICAgICAgICAgICBhcnJheVByb2ZpbGUo
T3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUsIGNlbGxBbmRJbmRleGluZ1R5cGUs
IG1ldGFkYXRhLCBzY3JhdGNoMSkKKyAgICAgICAgZW5kKQogCiAub3BHZXRCeUlkU2xvdzoKICAg
ICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9nZXRfYnlfaWQpCkBAIC0zMDAyLDcgKzI5
OTcsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX29wZW4sIE9wCiAKICAgICBs
b2FkVmFyaWFibGUoZ2V0LCBtX2l0ZXJhdG9yLCB0MykKICAgICBidHFueiB0Mywgbm90Q2VsbE1h
c2ssIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3cKLSAgICBwZXJmb3JtR2V0QnlJREhl
bHBlcihPcEl0ZXJhdG9yT3BlbiwgbV9tb2RlTWV0YWRhdGEsIG1fbmV4dFByb2ZpbGUsIC5pdGVy
YXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZU5leHRBbmRE
aXNwYXRjaCkKKyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yT3BlbiwgbV9tb2Rl
TWV0YWRhdGEsIG1fbmV4dFByb2ZpbGUsIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3cs
IHNpemUsIG1ldGFkYXRhLCBzdG9yZU5leHRBbmREaXNwYXRjaCwgbWFjcm8oYSwgYiwgYywgZCkg
ZW5kKQogCiAuaXRlcmF0b3JPcGVuR2VuZXJpY0dldE5leHRTbG93OgogICAgIGNhbGxTbG93UGF0
aChfbGxpbnRfc2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fZ2V0X25leHQpCkBAIC0zMDYxLDcgKzMw
NTYsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wCiAKICAgICBs
b2FkVmFyaWFibGUoZ2V0LCBtX3ZhbHVlLCB0MykKICAgICBidHFueiB0Mywgbm90Q2VsbE1hc2ss
IC5nZXREb25lU2xvdwotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JOZXh0LCBt
X2RvbmVNb2RlTWV0YWRhdGEsIG1fZG9uZVByb2ZpbGUsIC5nZXREb25lU2xvdywgc2l6ZSwgbWV0
YWRhdGEsIHN0b3JlRG9uZUFuZEptcFRvR2V0VmFsdWUpCisgICAgcGVyZm9ybUdldEJ5SURIZWxw
ZXIoT3BJdGVyYXRvck5leHQsIG1fZG9uZU1vZGVNZXRhZGF0YSwgbV9kb25lUHJvZmlsZSwgLmdl
dERvbmVTbG93LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1ZSwgbWFj
cm8oYSwgYiwgYywgZCkgZW5kKQogCiAuZ2V0RG9uZVNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9s
bGludF9zbG93X3BhdGhfaXRlcmF0b3JfbmV4dF9nZXRfZG9uZSkKQEAgLTMwODYsNyArMzA4MSw3
IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3JfbmV4dCwgT3AKICAgICAjIFJlbG9h
ZCB0aGUgbmV4dCByZXN1bHQgdG1wIHNpbmNlIHRoZSBnZXRfYnlfaWQgYWJvdmUgbWF5IGhhdmUg
Y2xvYmJlcmVkIHQzLgogICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fdmFsdWUsIHQzKQogICAgICMg
V2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0aGUgaXRlcmF0b3IgcmVzdWx0IGlzIGEgY2VsbCBo
ZXJlIHNpbmNlIHdlIHdpbGwgaGF2ZSB0aHJvd24gYW4gZXJyb3IgYmVmb3JlLgotICAgIHBlcmZv
cm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JOZXh0LCBtX3ZhbHVlTW9kZU1ldGFkYXRhLCBtX3Zh
bHVlUHJvZmlsZSwgLmdldFZhbHVlU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlVmFsdWVBbmRE
aXNwYXRjaCkKKyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV92YWx1
ZU1vZGVNZXRhZGF0YSwgbV92YWx1ZVByb2ZpbGUsIC5nZXRWYWx1ZVNsb3csIHNpemUsIG1ldGFk
YXRhLCBzdG9yZVZhbHVlQW5kRGlzcGF0Y2gsIG1hY3JvKGEsIGIsIGMsIGQpIGVuZCkKIAogLmdl
dFZhbHVlU2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9u
ZXh0X2dldF92YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMTQyMCw3ICsxNDIwLDggQEAgZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5j
cmVtZW50LCBhY3Rpb24pCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgYmFkZGlz
IGluY3JlbWVudCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4
ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQorICAgIGxvYWRwIENvZGVC
bG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyW3QwXSwgdDAKKyAgICBiYWRkaXMgaW5jcmVtZW50
LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAg
IGFjdGlvbigpCiAgICAgLmNvbnRpbnVlOgogZW5kCkBAIC0xNTAzLDcgKzE1MDQsOCBAQCBtYWNy
byBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgY29kZUJsb2NrR2V0dGVy
KHQxKQogICAgIGNvZGVCbG9ja1NldHRlcih0MSkKICAgICBpZiBub3QgKENfTE9PUCBvciBDX0xP
T1BfV0lOKQotICAgICAgICBiYWRkaXMgNSwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50
ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MV0sIC5jb250aW51ZQor
ICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MV0sIHQwCisg
ICAgICAgIGJhZGRpcyA1LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0s
IC5jb250aW51ZQogICAgICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgICAgIG1vdmUgY2ZyLCBh
MAogICAgICAgICAgICAgbW92ZSBQQywgYTEKQEAgLTE2MTcsMTQgKzE2MTksMTQgQEAgbWFjcm8g
ZnVuY3Rpb25Jbml0aWFsaXphdGlvbihwcm9maWxlQXJnUwogICAgICMgb3B0aW1hbCB3YXkgZm9y
IGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIG1vcmUgdGhhbiBmaXZlIHJlZ2lzdGVycyBhdmFpbGFi
bGUKICAgICAjIGZvciBhcmJpdHJhcnkgdXNlIGluIHRoZSBpbnRlcnByZXRlci4KICAgICBsb2Fk
aSBDb2RlQmxvY2s6Om1fbnVtUGFyYW1ldGVyc1t0MV0sIHQwCi0gICAgYWRkcCAtcHJvZmlsZUFy
Z1NraXAsIHQwICMgVXNlIGFkZGkgYmVjYXVzZSB0aGF0J3Mgd2hhdCBoYXMgdGhlIHBlZXBob2xl
CisgICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQwCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnBn
dGVxIHQwLCAwLCBvayBlbmQpCiAgICAgYnRweiB0MCwgLmFyZ3VtZW50UHJvZmlsZURvbmUKICAg
ICBsb2FkcCBDb2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzICsgRml4ZWRWZWN0b3I6
Om1fc3RvcmFnZSArIFJlZkNvdW50ZWRBcnJheTo6bV9kYXRhW3QxXSwgdDMKICAgICBidHB6IHQz
LCAuYXJndW1lbnRQcm9maWxlRG9uZSAjIFdoZW4gd2UgY2FuJ3QgSklULCB3ZSBkb24ndCBhbGxv
Y2F0ZSBhbnkgYXJndW1lbnQgdmFsdWUgcHJvZmlsZXMuCiAgICAgbXVscCBzaXplb2YgVmFsdWVQ
cm9maWxlLCB0MCwgdDIgIyBBYWFhYWhoaGghIE5lZWQgc3RyZW5ndGggcmVkdWN0aW9uIQogICAg
IGxzaGlmdHAgMywgdDAgIyBvZmZzZXQgb2YgbGFzdCBKU1ZhbHVlIGFyZ3VtZW50cyBvbiB0aGUg
c3RhY2suCi0gICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUg
YXJyYXkgaW4gQ29kZUJsb2NrOjptX2FyZ3VtZW50VmFsdWVQcm9maWxlcy4KKyAgICBhZGRwIHQy
LCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBpbiB0aGUgdmFsdWUg
cHJvZmlsZSBhcnJheS4KIC5hcmd1bWVudFByb2ZpbGVMb29wOgogICAgIGlmIEpTVkFMVUU2NAog
ICAgICAgICBsb2FkcSBUaGlzQXJndW1lbnRPZmZzZXQgLSA4ICsgcHJvZmlsZUFyZ1NraXAgKiA4
W2NmciwgdDBdLCB0MgpAQCAtMjU2Myw2ICsyNTY1LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgp
CiAgICAgZW5kCiBlbmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVT
dHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpN
ZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVu
YXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlB
cml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2Fk
cCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVt
cAorICAgIG9yaCB0eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisK
IC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhl
cmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MK
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdF
QkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgzMDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcigpID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRl
bnRpZmllciBjcmVhdGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBp
bmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2soQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUg
Q2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
Q29kZUJsb2NrKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJ
ZGVudGlmaWVyJik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAg
c3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBz
dGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxl
SWRlbnRpZmllciBjcmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4g
Q2FjaGVhYmxlSWRlbnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVz
LmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwx
NCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENv
ZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVu
YW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2Nr
VHlwZSogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9
CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgor
aW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29k
ZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlm
aWVyKHVpZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVk
VHlwZXMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWRUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYWNoZWRUeXBlcy5oIgogCisjaW5jbHVkZSAi
QmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAi
Qnl0ZWNvZGVDYWNoZUVycm9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmgiCkBAIC0xOTE4LDYgKzE5MTksOCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1WYWx1
ZVByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5z
aWduZWQgbnVtQXJyYXlQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJyYXlQcm9maWxl
czsgfQorICAgIHVuc2lnbmVkIG51bUJpbmFyeUFyaXRoUHJvZmlsZXMoKSBjb25zdCB7IHJldHVy
biBtX251bUJpbmFyeUFyaXRoUHJvZmlsZXM7IH0KKyAgICB1bnNpZ25lZCBudW1VbmFyeUFyaXRo
UHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsgfQogCiBw
cml2YXRlOgogICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKQEAgLTE5NTIsNiAr
MTk1NSw4IEBAIHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX251bVZhbHVlUHJvZmlsZXM7CiAg
ICAgdW5zaWduZWQgbV9udW1BcnJheVByb2ZpbGVzOworICAgIHVuc2lnbmVkIG1fbnVtQmluYXJ5
QXJpdGhQcm9maWxlczsKKyAgICB1bnNpZ25lZCBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsKIAog
ICAgIENhY2hlZE1ldGFkYXRhVGFibGUgbV9tZXRhZGF0YTsKIApAQCAtMjE2MCw2ICsyMTY1LDgg
QEAgQUxXQVlTX0lOTElORSBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZQogICAgICwgbV9yYXJl
RGF0YShjYWNoZWRDb2RlQmxvY2sucmFyZURhdGEoZGVjb2RlcikpCiAgICAgLCBtX3ZhbHVlUHJv
ZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bVZhbHVlUHJvZmlsZXMoKSkKICAgICAsIG1fYXJyYXlQ
cm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVtQXJyYXlQcm9maWxlcygpKQorICAgICwgbV9iaW5h
cnlBcml0aFByb2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1CaW5hcnlBcml0aFByb2ZpbGVzKCkp
CisgICAgLCBtX3VuYXJ5QXJpdGhQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVtVW5hcnlBcml0
aFByb2ZpbGVzKCkpCiB7CiB9CiAKQEAgLTIzMzcsNiArMjM0NCw4IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29kZUIKICAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29kZUJs
b2NrLm1faGFzQ2hlY2twb2ludHM7CiAgICAgbV9udW1WYWx1ZVByb2ZpbGVzID0gY29kZUJsb2Nr
Lm1fdmFsdWVQcm9maWxlcy5zaXplKCk7CiAgICAgbV9udW1BcnJheVByb2ZpbGVzID0gY29kZUJs
b2NrLm1fYXJyYXlQcm9maWxlcy5zaXplKCk7CisgICAgbV9udW1CaW5hcnlBcml0aFByb2ZpbGVz
ID0gY29kZUJsb2NrLm1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgbV9udW1VbmFy
eUFyaXRoUHJvZmlsZXMgPSBjb2RlQmxvY2subV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOwog
CiAgICAgbV9tZXRhZGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEuZ2V0
KCkpOwogICAgIG1fcmFyZURhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVEYXRh
LmdldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDcg
KzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNpZiBF
TkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9w
KE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9w
ZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0YS5t
X2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAgQVNT
RVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJ
KHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9CiAg
ICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAgc3Rh
dGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsg
fQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3Ry
dWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1
dGFibGVCYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDYgQEAgYm9vbCBj
YW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEludDMyLCBldmFsVGhyZXNob2xk
TXVsdGlwbGllciwgMTAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1heGlt
dW1FdmFsQ2FjaGVhYmxlU291cmNlTGVuZ3RoLCAyNTYsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IFwKLSAgICB2KEJvb2wsIHJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50
cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRp
b25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JCYXNlbGluZSwgMTAwMCwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihJbnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3Bv
aW50c0ZvclVwcGVyVGllcnMsIDUwMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkBAIC01
MzIsNiArNTMxLDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2
KEJvb2wsIHVzZURhdGFJQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwg
dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklULCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dihCb29sLCB1c2VEYXRhSUNTaGFyaW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAg
dihCb29sLCB1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICBcCiAgICAgLyogRmVhdHVyZSBGbGFncyAqL1wKICAgICBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhl
Y3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Niw3ICszOTYsOSBAQCB2b2lkIFNjcmlw
dEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpCiAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRl
Qnl0ZWNvZGUoKSkKICAgICAgICAgY29kZUJsb2NrLT52YWxpZGF0ZSgpOwogCi0gICAgaWYgKE9w
dGlvbnM6OnVzZUxMSW50KCkpCisgICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2Vs
aW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxp
bmVDb2RlKQorICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2Rl
KGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGVsc2UgaWYgKE9wdGlvbnM6OnVz
ZUxMSW50KCkpCiAgICAgICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKICAgICBlbHNlCiAgICAg
ICAgIHNldHVwSklUKHZtLCBjb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkocmV2aXNpb24gMjgzMDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGlt
aXplQWZ0ZXJXYXJtVXAoKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRp
ZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBz
ZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldhcm1V
cCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAg
ICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRl
cldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hv
bGRSZWFjaGVkKCkKQEAgLTY1LDkgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVT
b29uKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9CQlEo
KSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFP
cHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0
aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29uKCkpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVT
b29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRo
cmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICBzdHJ1Y3QgT1NSRW50
cnlEYXRhIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3Vu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJV
cENvdW50LmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRpZXJVcENvdW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBUaWVyVXBDb3VudDo6VGllclVwQ291
bnQoKQogewotICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRp
bWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25z
Ojp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogfQogCiBUaWVyVXBDb3Vu
dDo6flRpZXJVcENvdW50KCkgPSBkZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVRpZXJVcENvdW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAodWludDMy
X3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgYWZ0ZXIgd2FybS11
cC4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09w
dGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9sZChP
cHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0KIAog
ICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtOTAsMTQg
KzkwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24odWludDMy
X3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgbmV4dCBpbnZvY2F0
aW9uLiIpOwotICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCwgbnVsbHB0cik7CisgICAgICAgIHNl
dE5ld1RocmVzaG9sZCgwKTsKICAgICB9CiAKICAgICB2b2lkIG9wdGltaXplU29vbih1aW50MzJf
dCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVy
Ym9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBzb29uLiIpOwogICAg
ICAgICAvLyBGSVhNRTogTmVlZCBhZGp1c3RtZW50IG9uY2Ugd2UgZ2V0IG1vcmUgaW5mb3JtYXRp
b24gYWJvdXQgd2FzbSBmdW5jdGlvbnMuCi0gICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25z
Ojp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5l
d1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAgICAg
fQogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25S
ZXN1bHQodWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQpJ
bmRleDogU291cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
QmFnLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Niw2ICs2NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG90aGVyLm1faGVhZCA9
IG51bGxwdHI7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBCYWcmIG9w
ZXJhdG9yPShCYWc8VCwgVT4mJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh1bndyYXBwZWRI
ZWFkKCkgPT0gb3RoZXIudW53cmFwcGVkSGVhZCgpKQorICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworCisgICAgICAgIEJhZyBkZXN0cm95OworICAgICAgICBkZXN0cm95Lm1faGVhZCA9IHVud3Jh
cHBlZEhlYWQoKTsKKyAgICAgICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgpOworICAg
ICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOworCisgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICB9CisKICAgICB+QmFnKCkKICAgICB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9QYWNrZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAko
cmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL1dURi93dGYvUGFja2VkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE4Niw3ICsxODYsMTAgQEAgcHVibGljOgogICAgIH0KIAogICAgIFQqIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQotICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsg
cmV0dXJuICpnZXQoKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUgPSBUPgorICAgIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3ZvaWRfdjxVPiwgVSY+Ojp0eXBlIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQorCiAgICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiAhZ2V0KCk7IH0KIAogICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRv
ciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50
ZWdlciB0eXBlcy4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkocmV2aXNpb24g
MjgzMDE5KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkod29ya2luZyBj
b3B5KQpAQCAtNzc2LDE3ICs3NzYsMTggQEAgZW5kCiAKICMgRklYTUU6IG5lZWQgdG8gZml4IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg3MDMgdG8gZW5hYmxlIHRo
aXMgb24gTGludXgvTUlQUy4KIGRlZiBydW5CeXRlY29kZUNhY2hlSW1wbChvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMsICphZGRpdGlvbmFsRW52KQotICAgIGlmICgkaG9zdE9TID09ICJkYXJ3
aW4iKQotICAgICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGUiCi0gICAgZWxzaWYg
KCRob3N0T1MgPT0gImxpbnV4IiAmJiAkYXJjaGl0ZWN0dXJlICE9ICJtaXBzIikKLSAgICAgICAg
ZmlsZVRlbXBsYXRlID0gImJ5dGVjb2RlLWNhY2hlWFhYWFhYIgotICAgIGVsc2UKLSAgICAgICAg
c2tpcAotICAgICAgICByZXR1cm4KLSAgICBlbmQKKyAgICAjIE9PUFMKKyAgICAjaWYgKCRob3N0
T1MgPT0gImRhcndpbiIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGUi
CisgICAgI2Vsc2lmICgkaG9zdE9TID09ICJsaW51eCIgJiYgJGFyY2hpdGVjdHVyZSAhPSAibWlw
cyIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhYWFgiCisgICAg
I2Vsc2UKKyAgICAjICAgIHNraXAKKyAgICAjICAgIHJldHVybgorICAgICNlbmQKIAotICAgIG9w
dGlvbnMgPSBCQVNFX09QVElPTlMgKyBGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucyArICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMKLSAgICBhZGRSdW5Db21tYW5k
KCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1jYWNo
ZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5kLCAk
YmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJy
b3JIYW5kbGVyLCAqYWRkaXRpb25hbEVudikKKyAgICAjb3B0aW9ucyA9IEJBU0VfT1BUSU9OUyAr
IEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RTcGVjaWZp
Y1JlcXVpcmVkT3B0aW9ucworICAgICNhZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsi
c2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIpLnRv
X3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5kLCAkYmVuY2htYXJrLnRvX3NdICsgb3B0
aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyLCAqYWRkaXRpb25h
bEVudikKIGVuZAogCiBkZWYgcnVuQnl0ZWNvZGVDYWNoZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpb25zKQo=
</data>
<flag name="commit-queue"
          id="462685"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439158</attachid>
            <date>2021-09-24 10:16:19 -0700</date>
            <delta_ts>2021-09-24 11:18:38 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>618905</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MzAxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkBAIC0xOTg1LDE0ICsxOTg1LDEwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzL3Nl
dHRlcnMuCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsOwogCisKICAg
ICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxjdWxhdGlvbnMgb2Ygd2hl
dGhlciBvciBub3Qgd2UncmUgYW4KICAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRsaW5nIGNhbGwg
c2l0ZS4KLSAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlOwotI2lm
IENQVShBUk02NCkKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAg
ICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0j
ZW5kaWYKLSAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3Rh
dGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChleHRyYVJlZ2lz
dGVyc1RvUHJlc2VydmUpOworICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3Rh
dGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
KCk7CiAKICAgICAgICAgYXV0byByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwg
PSBbJl0oQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlJiBzcGlsbFN0YXRlLCBib29s
IGNhbGxIYXNSZXR1cm5WYWx1ZSkgewogICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZG9udFJlc3Rv
cmU7CkBAIC0yMDc5LDggKzIwNzUsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChB
Y2Nlc3NHZW5lCiAgICAgICAgICAgICBBU1NFUlQoIShudW1iZXJPZlJlZ3NGb3JDYWxsICUgc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkpOwogICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZC
eXRlc0ZvckNhbGwgPSBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKTsKIAotICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51
bWJlck9mQnl0ZXNGb3JDYWxsID0KLSAgICAgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsK
IAogICAgICAgICAgICAgaml0LnN1YlB0cigKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLApAQCAtMjEzOCw2ICsy
MTMzLDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogCiAgICAg
ICAgICAgICBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0ID0gKGNvZGVCbG9jay0+c3RhY2tQb2ludGVy
T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSAtIHN0YXRlLnByZXNlcnZlZFJldXNlZFJlZ2lz
dGVyU3RhdGUubnVtYmVyT2ZCeXRlc1ByZXNlcnZlZCAtIHNwaWxsU3RhdGUubnVtYmVyT2ZTdGFj
a0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uOwogICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXQpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKICAgICAgICAgICAgIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlID0gaXNHZXR0ZXIoKTsKICAg
ICAgICAgICAgIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRl
LCBjYWxsSGFzUmV0dXJuVmFsdWUpOwogCkBAIC0yMjY0LDEyICsyMjYwLDcgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogCiAgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKIAotICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNU
b1ByZXNlcnZlOwotI2lmIENQVShBUk02NCkKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPnVz
ZURhdGFJQygpKQotICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQo
QVJNNjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgotICAgICAgICAgICAgYXV0byBzcGlsbFN0YXRl
ID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0
aW9ucyhleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUpOworICAgICAgICAgICAgYXV0byBzcGlsbFN0
YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhj
ZXB0aW9ucygpOwogCiAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
JnZtKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24o
dm0pOwpAQCAtMjM2NCwxMCArMjM1NSw2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBs
KEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1Rv
UHJlc2VydmU7CiAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChi
YXNlR1BSKTsKICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KHZh
bHVlUmVncyk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAgICAgIGlmIChjb2RlQmxvY2st
PnVzZURhdGFJQygpKQotICAgICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2Vy
dmUuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZl
TGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHJldmlzaW9u
IDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3Qu
cmIJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCBvcF9ncm91cCA6UHJvZmlsZWRC
aW5hcnlPcCwKICAgICAgICAgb3BlcmFuZFR5cGVzOiBPcGVyYW5kVHlwZXMsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQor
ICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9n
cm91cCA6VmFsdWVQcm9maWxlZEJpbmFyeU9wLApAQCAtMzUzLDcgKzM1Myw3IEBAIG9wX2dyb3Vw
IDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgICAgICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3Rl
ciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg2LDcgKzM4Niw3IEBAIG9wIDpuZWdhdGUsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewot
ICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFBy
b2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDpub3QsCkBAIC00NzgsNiAr
NDc4LDcgQEAgb3AgOmdldF9ieV9pZCwKICAgICBtZXRhZGF0YTogewogICAgICAgICBtb2RlTWV0
YWRhdGE6IEdldEJ5SWRNb2RlTWV0YWRhdGEsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmls
ZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCiAgICAgfQogCiBvcCA6Z2V0
X2J5X2lkX3dpdGhfdGhpcywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZp
c2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVP
cGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjggQEAg
VmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JJbXBsKEJ5dGVjbwogICAgICAgICByZXR1cm4g
Jm1ldGFkYXRhLm1fcHJvZmlsZTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
dWludHB0cl90IHZhbHVlUHJvZmlsZU9mZnNldEZvcih1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRleCk7CisgICAgaWYgY29uc3RleHBy
IChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3Jfb3BlbikgeworICAgICAgICBzd2l0
Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpzeW1i
b2xDYWxsOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmls
ZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNv
ZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiBj
b25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CisgICAg
ICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5l
eHQ6OmNvbXB1dGVOZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRS
ZXN1bHRQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJl
dHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRG9uZVByb2ZpbGUoKTsKKyAgICAgICAg
Y2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIHJldHVybiBC
eXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpOworfQorCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZU1ldGFkYXRhPgogYm9vbCBoYXNWYWx1ZVByb2ZpbGVGb3IoQnl0ZWNvZGVN
ZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZp
c2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJ
bmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDExICsxMTQsNiBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7CiB9
CiAKLUNvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFz
dFBhdGhTdGFydCgpCi17Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0lu
dGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwotfQotCiBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKCFpc0RhdGFJQygpKTsKQEAgLTIyNSw2ICsyMjAsMTIgQEAgdm9pZCBDYWxs
TGlua0luZm86OnNldE1heEFyZ3VtZW50Q291bnRJbgogICAgIG1fbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgPSB2YWx1ZTsKIH0KIAorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChpc0RpcmVjdCgpICYmIGlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRh
dGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQpOwor
fQorCiB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRvIGhh
bmRsZVNwZWNpZmljQ2FsbGVlID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKQEAgLTI5OCwy
MyArMjk5LDExIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGMKICAg
ICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1
c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1Rh
aWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewotICAg
IHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7Ci0gICAgaWYgKGlzRGF0YUlDKCkpIHsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJl
Zyk7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwg
Y2FsbExpbmtJbmZvR1BSKTsKLSAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBj
YWxsTGlua0luZm9HUFI7Ci0gICAgfQotCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0Lmxh
YmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
ewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHNsb3dQYXRoOwogCi0gICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICBpZiAodXNl
RGF0YUlDID09IFVzZURhdGFJQzo6WWVzKSB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
aml0LnNjcmF0Y2hSZWdpc3RlcigpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7
IAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKQEAgLTMyMyw3ICsz
MTIsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAg
ICAgICBnb1BvbHltb3JwaGljID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25a
ZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5bW9ycGhpY0Nh
bGxlZU1hc2spKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsK
ICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgZ29Qb2x5bW9y
cGhpYy5saW5rKCZqaXQpOyAvLyBQb2x5bW9ycGhpYyBzdHViIGhhbmRsZXMgdGFpbCBjYWxsIHN0
YWNrIHByZXAuCiAgICAgICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Y2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkpLCBK
U0VudHJ5UHRyVGFnKTsKQEAgLTMzNiwxNCArMzI1LDE2IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQ
dHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVj
aywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKSk7CiAKICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAg
ICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwog
ICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAg
ICAgICAgICAgIHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT51LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51
LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNTMsMTMg
KzM0NCwzNCBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUMgdXNlRGF0YUlDKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwotICAg
IHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIs
IHVzZURhdGFJQywgbnVsbHB0cik7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKwor
ICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
b0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHUu
ZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKworICAg
IHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0lu
Zm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENh
bGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxG
YXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1Rh
aWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBj
YWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsK
KyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQ
YXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgVXNlRGF0YUlDOjpO
bywgaXNUYWlsQ2FsbCgpLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworfQorCitNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcp
OworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBj
YWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK01h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENh
bGwpKTsKIH0KIAogdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxs
SGVscGVycyYgaml0KQpAQCAtMzY5LDE3ICszODEsMzIgQEAgdm9pZCBDYWxsTGlua0luZm86OmVt
aXRTbG93UGF0aChWTSYgdm0sIAogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRy
eVB0clRhZyk7CiB9CiAKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0m
LCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBqaXQu
bW92ZShjYWxsTGlua0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVz
dGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5p
dGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxM
aW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAg
ICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2Rl
SW5kZXgpOworICAgIHNldFVwQ2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2Fs
bGVlR1BSKTsKKyAgICBtX2RvbmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVM
b2NhdGlvbjsKKyAgICBpZiAodW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkg
eworICAgICAgICAvLyBGSVhNRTogSXQnZCBiZSBuaWNlIGlmIHRoaXMganVzdCB3ZXJlIGEgcmVm
Y291bnRlZCBkYXRhIHN0cnVjdHVyZS4KKyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFr
ZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1l
U2h1ZmZsZURhdGEpOworICAgIH0KKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7
CisgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAg
c2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKIHZv
aWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7CiAKICAgICBzZXRVc2VzRGF0YUlD
cyhVc2VEYXRhSUM6Ok5vKTsKIAotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgp
OwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgYXV0byBjYWxsID0gaml0Lm5l
YXJDYWxsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewogICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwpAQCAtMzk3LDcgKzQyNCw3IEBA
IHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIGF1dG8gZmFz
dFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOworICAgICAgICB1
LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CiAgICAgfSk7CiAKICAgICAvLyAtIElmIHdlJ3JlIG5v
dCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24g
MjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0MywxMSBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogZW51
bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogc3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogCitz
dHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87CisKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1Ymxp
YyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiBwdWJsaWM6Ci0gICAgZW51
bSBDYWxsVHlwZSB7CisgICAgZW51bSBDYWxsVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25l
LAogICAgICAgICBDYWxsLAogICAgICAgICBDYWxsVmFyYXJncywKQEAgLTE2NSw2ICsxNjcsOCBA
QCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAorICAg
IHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CisKICAgICBHUFJSZWcgY2FsbGVl
R1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVHUFI7IH0KICAgICAKICAgICBlbnVtIGNsYXNz
IFVzZURhdGFJQyA6IHVpbnQ4X3QgewpAQCAtMTczLDEzICsxNzcsMTYgQEAgcHVibGljOgogICAg
IH07CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0
aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxs
KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxD
YWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNF
RF9SRVRVUk47CiBwdWJsaWM6CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBl
bWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVn
IGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNF
RF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkg
V0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFp
bENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAg
dm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7CiAgICAgdm9pZCBlbWl0RGly
ZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4g
cHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVs
cGVycyYpOworICAgIHN0YXRpYyB2b2lkIGVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwogICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1
YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVz
ZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURhdGFJQzo6WWVzOyB9CkBAIC0yMDMsNyArMjEw
LDYgQEAgcHVibGljOgogICAgICAgICBtX2FsbG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOwog
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwog
CkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9zbG93U3R1YiA9IG51bGxw
dHI7CiAgICAgfQogCi0gICAgSklUU3R1YlJvdXRpbmUqIHNsb3dTdHViKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3Nsb3dTdHViLmdldCgpOwotICAgIH0KLQogICAgIGJvb2wgc2Vlbk9uY2Uo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faGFzU2VlblNob3VsZFJlcGF0Y2g7CkBAIC0zMDgs
OSArMzA5LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+
KG1fY2FsbFR5cGUpOwogICAgIH0KIAotICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAmbV9tYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIH0K
IAogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTM4MSw3
ICszODIsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKKworICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKKwogICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwog
ICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC0zOTcsNiArNDAwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0
aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJU
YWc+IG1fY2FsbGVlTG9jYXRpb247CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoU3RhcnQ7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CiAgICAgICAgIH0gY29kZUlD
OwogICAgIH0gdTsKIApAQCAtNDI0LDYgKzQyOCwxMyBAQCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRD
YWxsTGlua0luZm9Db2RlT3JpCiAgICAgcmV0dXJuIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCk7
CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbyB7CisgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHksIG9ubHkgdXNlZCBieSBiYXNlbGluZSwgc28gdGhp
cyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBDb2RlT3JpZ2luLgorICAgIENhbGxMaW5rSW5mbzo6
Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRh
Zz4gZG9uZUxvY2F0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0
YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307CisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDggKzI3OSw2IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fZGlkRmFp
bEpJVENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFs
c2UpCiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCi0gICAgLCBtX2hhc0xp
bmtlZE9TUkV4aXQoZmFsc2UpCi0gICAgLCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZShm
YWxzZSkKICAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKG90aGVyLm1fbnVtQ2FsbGVlTG9jYWxzKQog
ICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVtVmFycykKICAgICAsIG1fbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAob3RoZXIubV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKQEAgLTMwOCw2ICszMDYs
OCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NF
UlQoc291cmNlKCkucHJvdmlkZXIoKSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1Q
YXJhbWV0ZXJzKCkpOworCisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRD
b2RlLT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tT
ZXQoKS5hZGQodGhpcyk7CiB9CkBAIC0zMTgsNyArMzE4LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgQwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIAog
ICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAg
aWYgKG90aGVyLm1fcmFyZURhdGEpIHsKICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2Fy
eSgpOwpAQCAtMzM2LDggKzMzNSw2IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3Ry
dWN0dXJlKiAKICAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9k
aWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhG
VEwoZmFsc2UpCi0gICAgLCBtX2hhc0xpbmtlZE9TUkV4aXQoZmFsc2UpCi0gICAgLCBtX2lzRWxp
Z2libGVGb3JMTEludERvd25ncmFkZShmYWxzZSkgCiAgICAgLCBtX251bUNhbGxlZUxvY2Fscyh1
bmxpbmtlZENvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpCiAgICAgLCBtX251bVZhcnModW5s
aW5rZWRDb2RlQmxvY2stPm51bVZhcnMoKSkKICAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQo
ZmFsc2UpCkBAIC0zNTksNyArMzU2LDkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBT
dHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51
bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7Ci0gICAgCisK
KyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0
ZUNvdW50ZXIoKTsKKwogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQog
CkBAIC0zNzAsMTAgKzM2OSwxMyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVj
dHVyZSogCiAvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5rZWQgYnl0ZWNvZGUgZ2Vu
ZXJhdGlvbi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdlbmVyYXRlIGNvbnRyb2wK
IC8vIGZsb3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMg
d2UgcmVseSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2FtZSBmb3IKIC8vIGFsbCB0
aGUgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2UgcmVseSBvbiB0aGlzIGZh
Y3QgYnkgY2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKLS8vIGluc2lkZSBVbmxpbmtlZENv
ZGVCbG9jay4KKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4gQWxzbywgQmFzZWxpbmUgSklU
IGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5rZWRDb2Rl
QmxvY2ssCisvLyBzbyB0aGUgYnl0ZWNvZGUgbXVzdCByZW1haW4gdGhlIHNhbWUgYmV0d2VlbiBD
b2RlQmxvY2tzIHNoYXJpbmcgYW4gVW5saW5rZWRDb2RlQmxvY2suCiBib29sIENvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKICAgICBKU1Njb3BlKiBzY29w
ZSkKIHsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7IC8vIFdlIG5lZWQgdG8gc2V0IHVw
IG91ciB2YWx1ZSBwcm9maWxlIHBvaW50ZXJzLgorCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIApAQCAtNDcxLDYgKzQ3MywyMSBA
QCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFr
OyBcCiAgICAgfQogCisgICAgdW5zaWduZWQgYmluYXJ5UHJvZmlsZUluZGV4ID0gMDsKKyAgICB1
bnNpZ25lZCB1bmFyeVByb2ZpbGVJbmRleCA9IDA7CisjZGVmaW5lIExJTktfV0lUSF9CSU5BUllf
QVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJ
QUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9
ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJpbmFyeVByb2ZpbGVJbmRleCsr
KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19XSVRIX1VOQVJZX0FS
SVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFM
SVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAm
bV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKHVuYXJ5UHJvZmlsZUluZGV4KyspOyBc
CisgICAgICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
IGluc3RydWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRv
JiBpbnN0cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9w
Y29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMsMTQgKzU1MCwxNCBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BD
cmVhdGVQcm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAg
IExJTksoT3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0g
ICAgICAgIExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElO
SyhPcEluYykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9B
UklUSF9QUk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJ
TEUoT3BNdWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikK
KyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAg
IExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJ
VEhfVU5BUllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FS
SVRIX1BST0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2OSw3
ICs3ODYsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAg
Ly8gcmVseSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1p
dHRlZCB0byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1v
cmUgYWNjdXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0
ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgLy8gSWYgdGhlIGNvbmN1
cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4gY29tcHV0
ZSBpdCBoZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAgLTc5Myw2ICs4MDksNzYgQEAgdm9p
ZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3duZXJFZGdlLnNl
dCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZtLCB0aGlzKSk7
CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShSZWY8
QmFzZWxpbmVKSVRDb2RlPiBqaXRDb2RlKQoreworICAgIHNldEpJVENvZGUoaml0Q29kZS5jb3B5
UmVmKCkpOworCisgICAgeworICAgICAgICBjb25zdCBhdXRvJiBqaXRDb2RlTWFwID0gdGhpcy0+
aml0Q29kZU1hcCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mRXhj
ZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7CisgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxl
ciA9IGV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9w
cm9ibGVtLzM5NDMzMzE4Pi4KKyAgICAgICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IGppdENv
ZGVNYXAuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBhdXRvJiBqaXREYXRh
ID0gZW5zdXJlSklURGF0YShsb2NrZXIpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdERh
dGEubV9qaXRDb25zdGFudFBvb2wuaXNFbXB0eSgpKTsKKyAgICAgICAgaml0RGF0YS5tX2ppdENv
bnN0YW50UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5z
aXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGppdENvZGUtPm1fY29uc3Rh
bnRQb29sLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvIGVudHJ5ID0gaml0Q29kZS0+
bV9jb25zdGFudFBvb2wuYXQoaSk7CisgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5LnR5cGUpIHsK
KyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3Q6Cisg
ICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IG1fZ2xvYmFsT2Jq
ZWN0LmdldCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKSVRD
b25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbzogeworICAgICAgICAgICAgICAgIFVubGlu
a2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9ICpzdGF0aWNfY2FzdDxVbmxp
bmtlZENhbGxMaW5rSW5mbyo+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAg
IENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0RGF0YS5tX2NhbGxMaW5rSW5mb3MuYWRk
KENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+aW5pdGlhbGl6ZURhdGFJQyh2bSgpLCB1bmxpbmtlZENh
bGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAg
ICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gY2FsbExpbmtJbmZvOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7CisgICAgICAgICAgICAgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbyA9ICpzdGF0aWNfY2FzdDxV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKj4oZW50cnkucGF5bG9hZC5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gaml0RGF0YS5tX3N0dWJJbmZv
cy5hZGQodW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlLCBDb2RlT3JpZ2luKHVubGlua2VkU3R1
YkluZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0aWFs
aXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8odGhpcywgdW5saW5rZWRTdHViSW5mbyk7
CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IHN0dWJJbmZv
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbDogeworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZC5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1
bmN0aW9uRGVjbChpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByOiB7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gZnVuY3Rpb25FeHByKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICBjYXNlIE1v
ZHVsZUNvZGU6CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlu
bGluZWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6Cisg
ICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3
ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJp
ZGUgdGhhdCBvYnNlcnZhdGlvbi4KKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0g
Y2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCgpKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24o
dGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChqaXRDb2RlLT5tX2lzU2hh
cmVhYmxlICYmICF1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlICYm
IE9wdGlvbnM6OnVzZUJhc2VsaW5lSklUQ29kZVNoYXJpbmcoKSkKKyAgICAgICAgdW5saW5rZWRD
b2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSA9IFdURk1vdmUoaml0Q29kZSk7Cit9
CisKIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC04
NzMsNiArOTU5LDI3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKIH0KIAorYm9vbCBDb2RlQmxvY2s6OmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2Rl
QmxvY2soVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKK3sKKyAgICAvLyBUaGlzIG5lZWRzIHRv
IGNvcnJlc3BvbmQgdG8gd2hhdCB3ZSBkbyBpbnNpZGUgc2V0Q29uc3RhbnRSZWdpc3RlcnMuCisg
ICAgc3dpdGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbihyZWcpKSB7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVn
ZXI6CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZToKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOiB7
CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB1bmxpbmtlZENvZGVCbG9jaygpLT5nZXRDb25zdGFu
dChyZWcpOworICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsK
KyAgICAgICAgaWYgKGNlbGwtPmluaGVyaXRzPFN5bWJvbFRhYmxlPih2bSgpKSB8fCBjZWxsLT5p
bmhlcml0czxKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4odm0oKSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKwogVmVjdG9yPHVuc2lnbmVkPiBDb2RlQmxvY2s6OnNldENvbnN0YW50
UmVnaXN0ZXJzKGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0
YW50cywgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAt
ODkyLDYgKzk5OSw3IEBAIFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFIK
ICAgICAgICAgc3dpdGNoIChyZXByZXNlbnRhdGlvbikgewogICAgICAgICBjYXNlIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKICAgICAgICAgICAgIGNvbnN0YW50
ID0gZ2xvYmFsT2JqZWN0LT5saW5rVGltZUNvbnN0YW50KHN0YXRpY19jYXN0PExpbmtUaW1lQ29u
c3RhbnQ+KGNvbnN0YW50LmFzSW50MzJBc0FueUludCgpKSk7CisgICAgICAgICAgICBBU1NFUlQo
Y29uc3RhbnQuaXNDZWxsKCkpOyAvLyBVbmxpbmtlZCBCYXNlbGluZSBKSVQgcmVxdWlyZXMgdGhp
cy4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbjo6T3RoZXI6CiAgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRl
Z2VyOgpAQCAtMTUxNCw3ICsxNjIyLDcgQEAgQ29kZUJsb2NrOjpKSVREYXRhJiBDb2RlQmxvY2s6
OmVuc3VyZUpJVAogICAgIHJldHVybiAqbV9qaXREYXRhOwogfQogCi12b2lkIENvZGVCbG9jazo6
ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpCit2b2lkIENvZGVCbG9jazo6ZmluYWxp
emVKSVRJbmxpbmVDYWNoZXMoKQogewogICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRh
LmdldCgpKSB7CiAgICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBqaXRE
YXRhLT5tX2NhbGxMaW5rSW5mb3MpCkBAIC0xNTI1LDYgKzE2MzMsMjAgQEAgdm9pZCBDb2RlQmxv
Y2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbgogICAgICAgICAgICAgc3R1YkluZm8tPnZpc2l0
V2Vha1JlZmVyZW5jZXMobG9ja2VyLCB0aGlzKTsKICAgICAgICAgfQogICAgIH0KKworCisjaWYg
QVNTRVJUX0VOQUJMRUQKKyAgICBpZiAoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklU
KSB7CisgICAgICAgIC8vIFZlcmlmeSB3ZSBkb24ndCBuZWVkIHRvIGZpbmFsaXplIHRoZXNlIHNp
bmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KKyAgICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbyA6IHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQo
KSktPm1fZXZhbENhbGxMaW5rSW5mb3MpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJ
bmZvLT5pc0xpbmtlZCgpKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+Zm9yRWFjaERlcGVu
ZGVudENlbGwoW10gKEpTQ2VsbCopIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICB9CisjZW5kaWYKIH0KICNl
bmRpZgogCkBAIC0xNTM0LDQ2ICsxNjU2LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgKIAogICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAKLSNpZiBFTkFC
TEUoSklUKQotICAgIGJvb2wgaXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gbV9pc0VsaWdp
YmxlRm9yTExJbnREb3duZ3JhZGU7Ci0gICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUg
PSBmYWxzZTsKLSAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBleGVjdXRpbmcsIGFu
ZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0Ci0gICAgLy8gdG8g
ZGlzY2FyZCBiYXNlbGluZSBKSVQgY29kZSBhbmQgcmVpbnN0YWxsIExMSW50IGNvZGUgdG8gc2F2
ZSBKSVQgbWVtb3J5LgotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpICYmICFtX2hhc0xpbmtl
ZE9TUkV4aXQgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmICFtX3ZtLT5o
ZWFwLmNvZGVCbG9ja1NldCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpKSB7Ci0gICAgICAg
IGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXplZFJlcGxhY2VtZW50
KCkpIHsKLSAgICAgICAgICAgIGlmICghb3B0aW1pemVkQ29kZUJsb2NrLT5tX29zckV4aXRDb3Vu
dGVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSkg
ewotICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGUgPSBudWxscHRyOwotICAgICAgICAgICAg
ICAgICAgICBMTEludDo6c2V0RW50cnlwb2ludCh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOwot
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxpbmtlZENv
ZGUtPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3Vu
bGlua2VkQ29kZS0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tp
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmluc3RydWN0
aW9ucygpLmF0KHVubGlua2VkSGFuZGxlci50YXJnZXQpLnB0cigpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9u
TGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZUNhdGNoKGluc3RydWN0
aW9uLndpZHRoKCkpLmNvZGUoKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgdW5saW5rSW5jb21pbmdDYWxscygpOwotCi0gICAgICAgICAgICAgICAgICAg
IC8vIEl0J3Mgc2FmZSB0byBjbGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGluIGZpbmFsaXpl
VW5jb25kaXRpb25hbGx5IGFsbCBjb21waWxlciB0aHJlYWRzCi0gICAgICAgICAgICAgICAgICAg
IC8vIGFyZSBzYWZlcG9pbnRlZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5pbmcgZWl0aGVyIGJlZm9y
ZSBvciBhZnRlciBieXRlY29kZSBwYXJzZXIsIGFuZCBieXRlY29kZQotICAgICAgICAgICAgICAg
ICAgICAvLyBwYXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0
aGUgdmFyaW91cyAqaW5mb3MuCi0gICAgICAgICAgICAgICAgICAgIHJlc2V0SklURGF0YSgpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2lzRWxpZ2libGVG
b3JMTEludERvd25ncmFkZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSNlbmRpZgotICAgIAogICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0
VHlwZSgpKSkKICAgICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogCiAjaWYgRU5B
QkxFKEpJVCkKICAgICBpZiAoISFqaXRDb2RlKCkpCi0gICAgICAgIGZpbmFsaXplQmFzZWxpbmVK
SVRJbmxpbmVDYWNoZXMoKTsKKyAgICAgICAgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKTsKICNl
bmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0xNTk0LDcgKzE2ODIsNyBAQCB2b2lkIENv
ZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgIGNhc2UgSklUVHlwZTo6
SG9zdENhbGxUaHVuazoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBKSVRUeXBl
OjpJbnRlcnByZXRlclRodW5rOgotICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNv
dW50ZXIuY291bnQoKTsKKyAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVy
LT5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFz
ZWxpbmVKSVQ6CiAgICAgICAgICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291bnQo
KTsKQEAgLTE2NzUsMzAgKzE3NjMsNiBAQCBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjph
ZGRTdHViSW5mCiAgICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0dWJJbmZvcy5h
ZGQoYWNjZXNzVHlwZSwgY29kZU9yaWdpbik7CiB9CiAKLUpJVEFkZElDKiBDb2RlQmxvY2s6OmFk
ZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShs
b2NrZXIpLm1fYWRkSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVRNdWxJQyogQ29kZUJs
b2NrOjphZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUU3ViSUMq
IENvZGVCbG9jazo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUp
Ci17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBl
bnN1cmVKSVREYXRhKGxvY2tlcikubV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJ
VE5lZ0lDKiBDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJl
dHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19
Ci0KIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4pCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwpA
QCAtMzEzMyw3ICszMTk3LDcgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291
bnQoKQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgot
ICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CisgICAgICAg
IHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzLT51bmxpbmtlZENvZGVCbG9j
aygpKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0z
MzQ5LDEzICszNDEzLDEzIEBAIEJpbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlB
cmkKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0g
ICAgICAgIHJldHVybiAmcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9m
aWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJp
dGhQcm9maWxlOwogICAgIGNhc2Ugb3BfbXVsOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11
bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5h
czxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX3N1
YjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0
aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcyku
bV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFz
PE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4g
cGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzNjcsMTEgKzM0MzEsMTEgQEAgVW5hcnlB
cml0aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0aAogewogICAgIHN3aXRjaCAocGMtPm9w
Y29kZUlEKCkpIHsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8
T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVy
biBwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAg
Y2FzZSBvcF9pbmM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRo
aXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfZGVjOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zNDcyLDIyICszNTM2LDE2
IEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmkKIH0KIAogI2lmIEVO
QUJMRShKSVQpCi12b2lkIENvZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlx
dWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmIG1hcCkgCi17IAotICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9wY1RvQ29k
ZU9yaWdpbk1hcCA9IFdURk1vdmUobWFwKTsKLX0KLQogc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2lu
PiBDb2RlQmxvY2s6OmZpbmRQQyh2b2lkKiBwYykKIHsKKyAgICBpZiAoYXV0byogcGNUb0NvZGVP
cmlnaW5NYXAgPSBtX2ppdENvZGUtPnBjVG9Db2RlT3JpZ2luTWFwKCkpIHsKKyAgICAgICAgaWYg
KHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IHBjVG9Db2RlT3JpZ2luTWFw
LT5maW5kUEMocGMpKQorICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CisgICAgfQorCiAg
ICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAg
IGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBpZiAo
aml0RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcCkgewotICAgICAgICAgICAgICAgIGlmIChzdGQ6
Om9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBqaXREYXRhLT5tX3BjVG9Db2RlT3Jp
Z2luTWFwLT5maW5kUEMocGMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZU9yaWdp
bjsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykgewogICAgICAgICAgICAgICAgIGlmIChz
dHViSW5mby0+Y29udGFpbnNQQyhwYykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om9wdGlvbmFsPENvZGVPcmlnaW4+KHN0dWJJbmZvLT5jb2RlT3JpZ2luKTsKQEAgLTM1MjEsMjgg
KzM1NzksMTQgQEAgc3RkOjpvcHRpb25hbDxCeXRlY29kZUluZGV4PiBDb2RlQmxvY2s6OgogICAg
IHJldHVybiBieXRlY29kZUluZGV4OwogfQogCi1pbnQzMl90IENvZGVCbG9jazo6dGhyZXNob2xk
Rm9ySklUKGludDMyX3QgdGhyZXNob2xkKQotewotICAgIHN3aXRjaCAodW5saW5rZWRDb2RlQmxv
Y2soKS0+ZGlkT3B0aW1pemUoKSkgewotICAgIGNhc2UgVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU6
Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQ7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6RmFsc2U6Ci0g
ICAgICAgIHJldHVybiB0aHJlc2hvbGQgKiA0OwotICAgIGNhc2UgVHJpU3RhdGU6OlRydWU6Ci0g
ICAgICAgIHJldHVybiB0aHJlc2hvbGQgLyAyOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gdGhyZXNob2xkOwotfQotCi12b2lkIENvZGVCbG9jazo6aml0QWZ0
ZXJXYXJtVXAoKQordm9pZCBDb2RlQmxvY2s6OmppdFNvb24oKQogewotICAgIG1fbGxpbnRFeGVj
dXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVz
aG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50
ZXItPnNldE5ld1RocmVzaG9sZCh1bmxpbmtlZENvZGVCbG9jaygpLT50aHJlc2hvbGRGb3JKSVQo
T3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7CiB9CiAKLXZvaWQgQ29kZUJs
b2NrOjpqaXRTb29uKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXROZXh0SW52b2NhdGlvbigpCiB7Ci0g
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQo
T3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1
dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAKIGJvb2wgQ29kZUJsb2Nr
OjpoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0CkBAIC0zNTg4LDI4ICszNjMy
LDggQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBNYXRoSUNTdGF0cygpCiAgICAgZG91YmxlIG51bVN1
YnMgPSAwLjA7CiAgICAgZG91YmxlIHRvdGFsU3ViU2l6ZSA9IDAuMDsKIAotICAgIGF1dG8gY291
bnRJQ3MgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7Ci0gICAgICAgIGlmIChhdXRvKiBq
aXREYXRhID0gY29kZUJsb2NrLT5tX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgICAgIGZvciAo
SklUQWRkSUMqIGFkZElDIDogaml0RGF0YS0+bV9hZGRJQ3MpIHsKLSAgICAgICAgICAgICAgICBu
dW1BZGRzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxBZGRTaXplICs9IGFkZElDLT5jb2RlU2l6
ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJVE11bElDKiBtdWxJQyA6
IGppdERhdGEtPm1fbXVsSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtTXVscysrOwotICAgICAg
ICAgICAgICAgIHRvdGFsTXVsU2l6ZSArPSBtdWxJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZm9yIChKSVROZWdJQyogbmVnSUMgOiBqaXREYXRhLT5tX25lZ0lD
cykgewotICAgICAgICAgICAgICAgIG51bU5lZ3MrKzsKLSAgICAgICAgICAgICAgICB0b3RhbE5l
Z1NpemUgKz0gbmVnSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZvciAoSklUU3ViSUMqIHN1YklDIDogaml0RGF0YS0+bV9zdWJJQ3MpIHsKLSAgICAgICAgICAg
ICAgICBudW1TdWJzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxTdWJTaXplICs9IHN1YklDLT5j
b2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgYXV0byBjb3VudElDcyA9
IFsmXSAoQ29kZUJsb2NrKikgeworICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byByZS1pbXBs
ZW1lbnQgdGhpcyB1c2luZyBKSVRDb2RlLgogICAgIH07CiAgICAgaGVhcCgpLT5mb3JFYWNoQ29k
ZUJsb2NrKGNvdW50SUNzKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw5IEBAIGNs
YXNzIEpTTW9kdWxlRW52aXJvbm1lbnQ7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBj
bGFzcyBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ7CiBjbGFz
cyBNZXRhZGF0YVRhYmxlOwotY2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CiBjbGFzcyBSZWdpc3Rl
ckF0T2Zmc2V0TGlzdDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworY2xhc3MgQmFzZWxpbmVK
SVRDb2RlOwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihDb2RlQmxv
Y2tSYXJlRGF0YSk7CiAKQEAgLTE1OCw3ICsxNTgsOSBAQCBwdWJsaWM6CiAgICAgTWV0YWRhdGFU
YWJsZSogbWV0YWRhdGFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuZ2V0KCk7IH0K
IAogICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFt
ZXRlcnM7IH0KK3ByaXZhdGU6CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKHVuc2lnbmVkIG5l
d1ZhbHVlKTsKK3B1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgfQogCkBAIC0xNjcs
NyArMTY5LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVy
biBtX251bVZhcnM7IH0KICAgICB1bnNpZ25lZCBudW1UbXBzKCkgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50VG1wczsgfQog
Ci0gICAgdW5zaWduZWQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1Q
YXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9
CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAgLTIzMiwxNiArMjMzLDYg
QEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25z
dDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJv
b2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBDb25zaWRlciBhZGRpbmcgYmFjayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVy
biB0cnVlIGlmIGByZWdgIGlzIGB0aGlzYCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCi0gICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKLSAg
ICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3Rh
bnQocmVnKS5pc0NlbGwoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAg
QUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJl
ZykKICAgICB7CiAgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50
PihtX251bVZhcnMpOwpAQCAtMjY4LDIzICsyNTksMjEgQEAgcHVibGljOgogI2lmIEVOQUJMRShK
SVQpCiAgICAgc3RydWN0IEpJVERhdGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9B
TExPQ0FURUQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAK
ICAgICAgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAgICAgICAgQmFn
PEpJVEFkZElDPiBtX2FkZElDczsKLSAgICAgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKLSAg
ICAgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKLSAgICAgICAgQmFnPEpJVFN1YklDPiBtX3N1
YklDczsKICAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgICAg
ICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8
Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwogICAgICAgICBTZW50aW5lbExpbmtlZExp
c3Q8UG9seW1vcnBoaWNDYWxsTm9kZSwgUGFja2VkUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGlj
Q2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxsczsKLSAgICAgICAgRml4ZWRWZWN0
b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIEZpeGVkVmVj
dG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAg
ICAgICAgIGJvb2wgbV9oYXNDYWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAg
UmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgICAgICBKSVRD
b2RlTWFwIG1faml0Q29kZU1hcDsKKworICAgICAgICBGaXhlZFZlY3Rvcjx2b2lkKj4gbV9qaXRD
b25zdGFudFBvb2w7CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb25zdGFu
dFBvb2woKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwgbV9qaXRDb25zdGFudFBv
b2wpOyB9CiAgICAgfTsKIAorICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUo
UmVmPEJhc2VsaW5lSklUQ29kZT4pOworCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFko
bV9qaXREYXRhKSkKQEAgLTI5MywyMiArMjgyLDcgQEAgcHVibGljOgogICAgIH0KICAgICBKSVRE
YXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAotICAg
IEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLSAgICBKSVRNdWxJ
QyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTmVnSUMqIGFkZEpJ
VE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJp
bmFyeUFyaXRoUHJvZmlsZSopOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9y
LCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUQWRkSUMqIGFkZE1hdGhJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHByb2Zp
bGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVy
YXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRo
UHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KLQotICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+
Ojp0eXBlPgotICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHByb2Zp
bGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6
aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBK
SVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4g
YWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklU
RGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RGF0YSk7IH0K
IAogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlLCBDb2RlT3Jp
Z2luKTsKIApAQCAtMzIyLDE4ICsyOTYsOCBAQCBwdWJsaWM6CiAgICAgLy8gbG9va2luZyBmb3Ig
YSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgog
ICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29k
ZUluZGV4KTsKICAgICAKLSAgICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29kZU1hcCYmIGppdENv
ZGVNYXApCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7
Ci0gICAgICAgIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGpp
dENvZGVNYXApOwotICAgIH0KLSAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCkKLSAg
ICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAg
cmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXA7Ci0gICAgfQorICAgIGNv
bnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKTsKIAotICAgIHZvaWQgc2V0UENUb0NvZGVPcmln
aW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKICAgICBzdGQ6Om9w
dGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyh2b2lkKiBwYyk7CiAKICAgICB2b2lkIHNldENhbGxl
ZVNhdmVSZWdpc3RlcnMoUmVnaXN0ZXJTZXQpOwpAQCAtNDcyLDEwICs0MzYsMTIgQEAgcHVibGlj
OgogCiAgICAgU3RyaW5nIG5hbWVGb3JSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQog
ICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICAg
ICAgcmV0dXJuIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKTsKKyAgICAgICAgCiAgICAg
fQogCiAgICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudCh1bnNpZ25lZCBh
cmd1bWVudEluZGV4KQpAQCAtNTY5LDggKzUzNSwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVj
dG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4g
bV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3Rh
bnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0
ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
Z2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFu
dFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CisgICAgYm9vbCBpc0Nv
bnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZpcnR1YWxSZWdpc3RlcikgY29uc3Q7CiAg
ICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHJlZyk7IH0KICAg
ICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtl
ZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKGluZGV4KTsgfQorICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0YW50UmVnaXN0ZXJzKSArIGRlY2x0eXBl
KG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5T2Zmc2V0KCk7IH0KIAogICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlv
bkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7
IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC01OTUsMjIgKzU2MywyMiBAQCBw
dWJsaWM6CiAgICAgLy8gSnVtcCBUYWJsZXMKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgU2ltcGxl
SnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCisgICAgU2ltcGxlSnVt
cFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgU3Ry
aW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCk7CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFudFBvb2woKQogICAgIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9z
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2pp
dERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0
dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wuZGF0YSgpOwogICAgIH0KICNlbmRpZgog
ICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0
dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpOyB9
CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIAotI2lmIEVOQUJMRShKSVQpCi0gICAgU3RyaW5n
SnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCi0gICAgewot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwotICAgICAgICByZXR1cm4gbV9qaXRE
YXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Ci0gICAgfQorI2lmIEVO
QUJMRShERkdfSklUKQorICAgIFN0cmluZ0p1bXBUYWJsZSYgZGZnU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGRmZ1N3aXRjaEp1bXBU
YWJsZShpbnQgdGFibGVJbmRleCk7CiAjZW5kaWYKKwogICAgIHNpemVfdCBudW1iZXJPZlVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3Qg
VW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGlu
dCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIApAQCAtNjMyLDIxICs2MDAsMjAgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpCiAgICAgewotICAgICAg
ICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5k
U2V0KHRoaXMpOworICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jaGVja0lm
VGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKICAgICB9CiAKICAgICB2b2lkIGRvbnRKSVRB
bnl0aW1lU29vbigpCiAgICAgewotICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuZGVmZXJJ
bmRlZmluaXRlbHkoKTsKKyAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5kZWZlckluZGVm
aW5pdGVseSgpOwogICAgIH0KIAotICAgIGludDMyX3QgdGhyZXNob2xkRm9ySklUKGludDMyX3Qg
dGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2FybVVwKCk7CiAgICAgdm9pZCBqaXRTb29u
KCk7CisgICAgdm9pZCBqaXROZXh0SW52b2NhdGlvbigpOwogCiAgICAgY29uc3QgQmFzZWxpbmVF
eGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAgICAgIHJldHVybiAqbV9sbGlu
dEV4ZWN1dGVDb3VudGVyOwogICAgIH0KIAogICAgIHR5cGVkZWYgSGFzaE1hcDxzdGQ6OnR1cGxl
PFN0cnVjdHVyZUlELCB1bnNpZ25lZD4sIEZpeGVkVmVjdG9yPExMSW50UHJvdG90eXBlTG9hZEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVjdHVyZVdhdGNocG9pbnRNYXA7CkBAIC03
OTcsNiArNzY0LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CiAgICAgdm9pZCogZGVidWdnZXJS
ZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVxdWVzdHMpOyB9CiAKICAgICB2b2lkIGFk
ZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpOwogICAgIHZvaWQgcmVtb3ZlQnJl
YWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykKQEAgLTgzOCw2ICs4MDYsNyBAQCBwdWJs
aWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKIAogICAgIGJvb2wgbV9z
aG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJpdGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3
YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2hvdWxk
QWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9z
aG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBFTkFCTEUoSklUKQogICAgIHVuc2lnbmVk
IG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBERkc6OkNhcGFiaWxpdHlMZXZlbApAQCAt
ODQ3LDggKzgxNiw2IEBAIHB1YmxpYzoKICAgICBib29sIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9u
IDogMTsKICAgICBib29sIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA6IDE7CiAKLSAgICBib29s
IG1faGFzTGlua2VkT1NSRXhpdCA6IDE7Ci0gICAgYm9vbCBtX2lzRWxpZ2libGVGb3JMTEludERv
d25ncmFkZSA6IDE7CiAgICAgYm9vbCBtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2Ug
eyBmYWxzZSB9OwogCiAgICAgLy8gSW50ZXJuYWwgbWV0aG9kcyBmb3IgdXNlIGJ5IHZhbGlkYXRp
b24gY29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBpdCB3YXNuJ3QKQEAgLTkwNywxNiArODc0
LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0YWRhdGFUYWJs
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIp
OyB9CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJu
KCkKLSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5
cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0gICAgICAgIHJldHVybiAhbV91bmxpbmtl
ZENvZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAgfQorICAgIGJvb2wgbG9vcEhpbnRzQXJl
RWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKTsgfQogCiBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CiAjaWYgRU5BQkxFKEpJ
VCkKLSAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKKyAgICB2b2lk
IGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKQEAgLTEwMTAsNyArOTczLDkgQEAg
cHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hw
b2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQp
CitwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+IG1faml0RGF0YTsKK3ByaXZh
dGU6CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBUaGlzIGlzIHJlbGV2YW50
IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBi
bG9jawpAQCAtMTAyOSw3ICs5OTQsNyBAQCBwcml2YXRlOgogCiAgICAgV3JpdGVCYXJyaWVyPENv
ZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50
ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciog
bV9sbGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9OwogCiAgICAgQmFzZWxpbmVFeGVjdXRp
b25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAgICAgdWludDMyX3QgbV9vc3JFeGl0Q291
bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUs
MTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNp
bmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNs
dWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5l
cy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkgKzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6
OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5l
IFZJU0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1
dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9wcm9maWxlLCBmYWxzZSk7IH0pOwotCiAg
ICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJTEUoVklTSVQpCi0KICN1bmRl
ZiBWSVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck9wZW4+KFsm
XSAoYXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1Nyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpm
b3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1
ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAgIAotCiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwzOCBAQCB2b2lkIENvZGVCbG9jazo6Zm9y
RWFjaExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZ
U19JTkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJsb2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAg
ICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9qaXRDb2Rl
TWFwOworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNl
bGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFz
ZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpi
YXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NF
UlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
K0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmRmZ1N3aXRjaEp1bXBU
YWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6
OkRGR0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6SklUQ29kZSo+KG1faml0Q29k
ZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKworQUxXQVlTX0lO
TElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6REZH
SklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRDb2RlKj4obV9qaXRDb2RlLmdl
dCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAy
ODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcChDb2RlQmxvY2sqIGNvZGVC
bG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBB
bmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisKKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVU
b0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMjgz
MDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAgYm9vbCBFeGVjdXRpb25Db3Vu
dGVyPGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQpOworICAgIHRocmVzaG9sZCA9IGNsaXBw
ZWRUaHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAgICBtX2NvdW50ZXIgPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHJldmlzaW9uIDI4MzAx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9yY2VT
bG93UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRoaXMsIGNoZWNrSWZUaHJlc2hv
bGRDcm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxzZS4KICAgICBib29sIGNoZWNr
SWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwogICAgIGJvb2wgaGFzQ3Jvc3Nl
ZFRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlciA+PSAwOyB9Ci0gICAgdm9pZCBz
ZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayopOworICAgIHZvaWQg
c2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2RlQmxvY2sqID0gbnVsbHB0cik7
CiAgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwogICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENvdW50KSArIG1fY291bnRlcjsg
fQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpAQCAtODYsMTMgKzg2LDkgQEAg
cHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRp
YyBUIGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVCB0aHJl
c2hvbGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChUIHRocmVzaG9sZCkKICAgICB7
Ci0gICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwotICAgICAgICBpZiAoT3B0aW9uczo6cmFu
ZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCkgJiYgZ2xvYmFsT2JqZWN0
KQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2JqZWN0LT53ZWFrUmFuZG9tSW50
ZWdlcigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291
bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkID0g
bWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwogICAgICAgICBpZiAo
dGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAgICAgICAgdGhyZXNob2xkID0gbWF4VGhy
ZXNob2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xkOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkocmV2aXNpb24gMjgzMDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRh
VW5zZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0KSA9
PSAxMik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggeworICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBhcnJheVByb2ZpbGUpOyB9CiAg
ICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihH
ZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsKQEAgLTg4LDYgKzg5LDcgQEAg
dW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRNb2RlIG1vZGU7CiAg
ICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7IC8vIFRoaXMgbXVzdCBiZSB6
ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07CisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVN
ZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhRGVmYXVsdCBkZWZhdWx0
TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5zZXRNb2RlOwogICAgIEdldEJ5
SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1vZGU7CkBAIC0xMTcsNiArMTE5
LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGEgewogICAgICAgICBHZXRCeUlkTW9kZU1l
dGFkYXRhUHJvdG9Mb2FkIHByb3RvTG9hZE1vZGU7CiAgICAgfTsKICAgICBHZXRCeUlkTW9kZSBt
b2RlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9CiAgICAgdWludDhfdCBoaXRD
b3VudEZvckxMSW50Q2FjaGluZzsKIH07CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRl
Rm9yU3R1YkkKICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAg
ICAgICAKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6IHsKLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdl
dCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZtKCkpOwogICAgICAgICBpZiAoc3RydWN0
dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICAgICAg
cmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksIHN0dWJJbmZvKTsK
ICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50
aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZTo6ZW1pdERPTUpJVEcKIAogICAgIC8vIExldCdzIHN0b3JlIHRoZSByZXVzZWQgcmVnaXN0
ZXJzIHRvIHRoZSBzdGFjay4gQWZ0ZXIgdGhhdCwgd2UgY2FuIHVzZSBhbGxvY2F0ZWQgc2NyYXRj
aCByZWdpc3RlcnMuCiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0
ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJz
QnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6
OlNwYWNlRm9yQ0NhbGwpOworICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3Rl
cnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFj
ZTo6U3BhY2VGb3JDQ2FsbCk7CiAKICAgICBpZiAoR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZUludGVy
bmFsOjp2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coImJhc2VHUFIgPSAiLCBiYXNlR1BSLCAi
XG4iKTsKQEAgLTIyNSwxMiArMjI1LDkgQEAgdm9pZCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpl
bWl0RE9NSklURwogICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CiAg
ICAgZm9yIChGUFJSZWcgcmVnIDogZnBTY3JhdGNoKQogICAgICAgICByZWdpc3RlcnNUb1NwaWxs
Rm9yQ0NhbGwuc2V0KHJlZyk7CisgICAgaWYgKGppdC5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkp
CisgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQoc3R1YkluZm8ubV9zdHViSW5m
b0dQUik7CiAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6
OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckNDYWxsKCkpOwotI2lmIENQVShBUk02NCkKLSAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKLSAgICBpZiAoY29kZUJsb2NrLT51
c2VEYXRhSUMoKSkKLSAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChBUk02NFJl
Z2lzdGVyczo6bHIpOwotI2VuZGlmCiAKICAgICBBY2Nlc3NDYXNlU25pcHBldFBhcmFtcyBwYXJh
bXMoc3RhdGUubV92bSwgV1RGTW92ZShyZWdzKSwgV1RGTW92ZShncFNjcmF0Y2gpLCBXVEZNb3Zl
KGZwU2NyYXRjaCkpOwogICAgIHNuaXBwZXQtPmdlbmVyYXRvcigpLT5ydW4oaml0LCBwYXJhbXMp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNw
cAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAgSW5CeVN0YXR1
cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgogICAgICAgICByZXR1cm4gSW5CeVN0YXR1
cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOiB7Ci0g
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5m
by0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1
cm4gSW5CeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
ciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODMw
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsMTYgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMg
Ym9vbCBsaW5rQ29kZUlubGluZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wg
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51
c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQg
aW4uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJh
c2VHUFI7CkBAIC0yMzMsMjMgKzIzOCwzMSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGhh
c0ZyZWVSZWdpc3RlCiAgICAgcmV0dXJuIGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0g
SW52YWxpZEdQUlJlZzsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlBy
b3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxh
Y2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVu
dGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VE
YXRhSUMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
b2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lz
dGVyKHN0dWJJbmZvKTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVT
ZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uo
c3R1YkluZm8sIG9mZnNldCkpOworICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJl
cGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2Zmc2V0KSk7CisKKyAgICBpZiAoY29kZUJsb2Nr
LT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBzbG90cyBnZXQgZmlsbGVkIGluLiBO
b3RoaW5nIGVsc2UgdG8gZG8uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKQEAgLTI3OSwyMiArMjkyLDI1IEBAIGJvb2wgSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVIKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0K
IAotYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKK2Jvb2wgSW5saW5lQWNjZXNzOjppc0Nh
Y2hlYWJsZUFycmF5TGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQogewogICAgIEFTU0VSVChhcnJheS0+aW5kZXhp
bmdUeXBlKCkgJiBJc0FycmF5KTsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVu
dGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIGlmICghaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgcmV0dXJuICFoYXNBbnlBcnJheVN0b3JhZ2UoYXJyYXktPmluZGV4aW5nVHlwZSgp
KSAmJiBhcnJheS0+aW5kZXhpbmdUeXBlKCkgIT0gQXJyYXlDbGFzczsKIH0KIAotYm9vbCBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBKU0FycmF5KiBhcnJheSkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3Ro
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJy
YXkqIGFycmF5KQogewotICAgIEFTU0VSVChpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0dWJJbmZv
LCBhcnJheSkpOworICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZUFycmF5
TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGFycmF5KSk7CiAKICAgICBpZiAoIXN0dWJJbmZv
Lmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE5LDE3
ICszMzUsMjAgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoUwogICAg
IHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXNDYWNo
ZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorYm9vbCBJbmxp
bmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25z
dGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCiAgICAgcmV0dXJuIGhhc0ZyZWVSZWdpc3RlcihzdHViSW5mbyk7CiB9CiAKLWJvb2wg
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKLSAgICBBU1NFUlQo
aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNv
ZGVCbG9jaywgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbykpOwog
CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTM2MywxMyArMzgyLDE4IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVN0cmluZ0xlbmd0aCgKIH0KIAogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5B
Y2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
K2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
IHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFu
dElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2st
PnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIFRoZXNlIHNsb3RzIGdldCBmaWxsZWQgaW4uIE5v
dGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgR1BS
UmVnIGJhc2UgPSBzdHViSW5mby5iYXNlR1BSOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1
YkluZm8udmFsdWVSZWdzKCk7CiAKQEAgLTQwNiwxMyArNDMwLDEzIEBAIHZvaWQgSW5saW5lQWNj
ZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkgewogICAgICAgICAvLyBJZiBpdCBpcyBub3QgR2V0QnlJZC1saWtlLXRoaW5nLCB3ZSBkbyBu
b3QgZW1pdCBub3Agc2xlZCAoZS5nLiBHZXRCeVZhbCkuCiAgICAgICAgIC8vIFRoZSBjb2RlIGlz
IGFscmVhZHkgYW4gaW5kaXJlY3QganVtcCwgYW5kIG9ubHkgdGhpbmcgd2Ugc2hvdWxkIGRvIGlz
IHJlcGxhY2luZyBtX2NvZGVQdHIuCi0gICAgICAgIGlmIChzdHViSW5mby5oYXNDb25zdGFudElk
ZW50aWZpZXIpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6
OkJhc2VsaW5lSklUICYmIHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikgewogICAgICAg
ICAgICAgLy8gSWYgbV9jb2RlUHRyIGlzIHBvaW50aW5nIHRvIHN0dWJJbmZvLnNsb3dQYXRoU3Rh
cnRMb2NhdGlvbiwgdGhpcyBtZWFucyB0aGF0IElubGluZUFjY2VzcyBjb2RlIGlzIG5vdCBhIHN0
dWIgb25lLgogICAgICAgICAgICAgLy8gV2UgcmV3cml0ZSB0aGlzIHdpdGggdGhlIHN0dWItYmFz
ZWQgZGlzcGF0Y2hpbmcgY29kZSBvbmNlLCBhbmQgY29udGludWUgdXNpbmcgaXQgdW50aWwgd2Ug
cmVzZXQgdGhlIGNvZGUuCiAgICAgICAgICAgICBpZiAoc3R1YkluZm8ubV9jb2RlUHRyLmV4ZWN1
dGFibGVBZGRyZXNzKCkgPT0gc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpIHsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2Rl
T3ZlcihzdHViSW5mby5zdGFydC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRM
YW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAg
ICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmc3R1
YkluZm8pLCBzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0
LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0
dWJJbmZvLm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIo
KSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBqdW1w
ID0gaml0Lmp1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBz
dHViSW5mby5kb25lTG9jYXRpb247CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFz
ayhbPV0oTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewpAQCAtNDIxLDcgKzQ0NSw5IEBAIHZvaWQg
SW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICAgICAgICAgICAgICB9KSwg
IklubGluZUFjY2VzczogbGlua2luZyBzdHViIGNhbGwiKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQorCiAgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHRhcmdldDsKKyAgICAgICAgc3R1
YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBp
bmxpbmUgYWNjZXNzIGNvZGUuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCw4ICs0
NjAsMTQgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgIH0p
LCAiSW5saW5lQWNjZXNzOiBsaW5raW5nIGNvbnN0YW50IGp1bXAiKTsKIH0KIAotdm9pZCBJbmxp
bmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFj
Y2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQog
eworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpICYmIGNvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9
IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNz
IGNvZGUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRK
SVRDb2RlT3ZlcihzdHViSW5mby5zdGFydC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBz
Y29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7
CiAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5
IHNob3VsZCBiZSBqdW1waW5nIGludG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4KICAgICAgICAgYXV0
byBqdW1wID0gaml0Lmp1bXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTksMTQg
Kzk5LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KHNpemUsIHNpemVGb3JQ
cm9wZXJ0eUFjY2VzcygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQ
cm9wZXJ0eUFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zm
c2V0KTsKLSAgICBzdGF0aWMgYm9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3Ry
dWN0dXJlU3R1YkluZm8mLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJh
dGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJv
cGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3Ry
dWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVT
dHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0
ZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBi
b29sIGdlbmVyYXRlU2VsZkluQWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7
Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8m
KTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sq
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBz
dGF0aWMgYm9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJh
dGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3Ry
dWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJy
YXlMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAg
c3RhdGljIGJvb2wgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGdlbmVy
YXRlU2VsZkluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJl
Kik7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKIAogICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXBJbkFj
Y2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKICAgICBzdGF0aWMgdm9p
ZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8m
LCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4pOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRh
dGEuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBA
IE9WRVJMT0FEX0JJVFdJU0VfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0IEl0ZXJh
dGlvbk1vZGVNZXRhZGF0YSB7CiAgICAgdWludDhfdCBzZWVuTW9kZXMgeyAwIH07CisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZlNlZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihJdGVyYXRpb25Nb2RlTWV0YWRhdGEsIHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoZGVjbHR5cGUoc2Vlbk1vZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1vZGUpKTsK
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5r
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTElu
dENhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiAr
ODcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxl
OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoTExJbnRDYWxsTGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQogCiBw
cml2YXRlOgogICAgIHVpbnRwdHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0Jp
dCB7IHVubGlua2VkQml0IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
TWV0YWRhdGFUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9NZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYg
KzY1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZ1bmMoKm1ldGFkYXRhKTsKICAgICB9CiAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBudW1F
bnRyaWVzKCkKKyAgICB7CisgICAgICAgIGF1dG8qIHN0YXJ0ID0gYml0d2lzZV9jYXN0PHR5cGVu
YW1lIE9wOjpNZXRhZGF0YSo+KGdldChPcDo6b3Bjb2RlSUQpKTsKKyAgICAgICAgYXV0byogZW5k
ID0gYml0d2lzZV9jYXN0PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdldEltcGwoT3A6Om9wY29k
ZUlEICsgMSkpOworICAgICAgICByZXR1cm4gZW5kIC0gc3RhcnQ7CisgICAgfQorCiAgICAgc2l6
ZV90IHNpemVJbkJ5dGVzKCk7CiAKICAgICB2b2lkIHJlZigpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsx
NTYsMTcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heAogICAgIG1h
Y3JvKE9wSXRlcmF0b3JPcGVuKSBcCiAgICAgbWFjcm8oT3BJdGVyYXRvck5leHQpIFwKIAorI2Rl
ZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAor
ICAgIG1hY3JvKE9wQWRkKSBcCisgICAgbWFjcm8oT3BNdWwpIFwKKyAgICBtYWNybyhPcERpdikg
XAorICAgIG1hY3JvKE9wU3ViKSBcCisKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVU5B
UllfQVJJVEhfUFJPRklMRShtYWNybykgXAorICAgIG1hY3JvKE9wSW5jKSBcCisgICAgbWFjcm8o
T3BEZWMpIFwKKyAgICBtYWNybyhPcE5lZ2F0ZSkgXAorCiAKIElHTk9SRV9XQVJOSU5HU19CRUdJ
TigidHlwZS1saW1pdHMiKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1
Y2NlZWQoKQogewogICAgIHJlc3RvcmVTY3JhdGNoKCk7CiAgICAgaWYgKGppdC0+Y29kZUJsb2Nr
KCktPnVzZURhdGFJQygpKQotICAgICAgICBqaXQtPnJldCgpOworICAgICAgICBqaXQtPmZhckp1
bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZEb25lTG9jYXRpb24oKSksIEpTSW50ZXJuYWxQdHJUYWcpOwog
ICAgIGVsc2UKICAgICAgICAgc3VjY2Vzcy5hcHBlbmQoaml0LT5qdW1wKCkpOwogfQpAQCAtMTEw
LDYgKzExMCw4IEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXQtPmNv
ZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKIAogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxs
ID0gUmVnaXN0ZXJTZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxp
bmdDYWxsU2l0ZSwgYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJzKCkpOworICAgICAgICBpZiAoaml0
LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgICAgICBtX2xpdmVSZWdpc3RlcnNG
b3JDYWxsLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7CiAgICAgICAgIG1fbGl2ZVJlZ2lz
dGVyc0ZvckNhbGwuZXhjbHVkZShjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIH0KICAgICBy
ZXR1cm4gbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbDsKQEAgLTEyOCwxMSArMTMwLDEyIEBAIGF1dG8g
QWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmUKICAgICB9OwogfQogCi1hdXRvIEFj
Y2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxX
aXRob3V0RXhjZXB0aW9ucyhjb25zdCBSZWdpc3RlclNldCYgZXh0cmEpIC0+IFNwaWxsU3RhdGUK
K2F1dG8gQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNr
Rm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCkgLT4gU3BpbGxTdGF0ZQogewogICAgIFJlZ2lzdGVy
U2V0IGxpdmVSZWdpc3RlcnMgPSBhbGxvY2F0b3ItPnVzZWRSZWdpc3RlcnMoKTsKKyAgICBpZiAo
aml0LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgIGxpdmVSZWdpc3RlcnMuYWRk
KHN0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKICAgICBsaXZlUmVnaXN0ZXJzLmV4Y2x1ZGUoY2Fs
bGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICBsaXZlUmVnaXN0ZXJzLm1lcmdlKGV4dHJhKTsKIAog
ICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBleHRyYVN0YWNrUGFkZGluZyA9IDA7CiAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCpqaXQs
IGxpdmVSZWdpc3RlcnMsIGV4dHJhU3RhY2tQYWRkaW5nKTsKQEAgLTU5NiwxNiArNTk5LDExIEBA
IEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICBDQ2FsbEhlbHBl
cnMgaml0KGNvZGVCbG9jayk7CiAgICAgc3RhdGUuaml0ID0gJmppdDsKIAotICAgIGlmIChjb2Rl
QmxvY2stPnVzZURhdGFJQygpKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5tX2RvZXNKU0dldHRlclNl
dHRlckNhbGxzKSB7Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIG5vIGd1YXJhbnRlZSB0aGF0IHN0
YWNrLXBvaW50ZXIgaXMgdGhlIGV4cGVjdGVkIG9uZS4gVGhpcyBpcyBub3QgYSBwcm9ibGVtIGlm
IHdlIGRvIG5vdCBoYXZlIEpTIGdldHRlciAvIHNldHRlciBjYWxscyBzaW5jZSBzdGFjay1wb2lu
dGVyIGlzCi0gICAgICAgICAgICAvLyBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyIGluIHRoZSBDIGNh
bGxpbmcgY29udmVuc2lvbi4gSG93ZXZlciwgb3VyIEpTIGV4ZWN1dGFibGUgY2FsbCBkb2VzIG5v
dCBzYXZlIHN0YWNrLXBvaW50ZXIuIFNvIHdlIGFyZSBhZGp1c3Rpbmcgc3RhY2stcG9pbnRlciBh
ZnRlcgotICAgICAgICAgICAgLy8gSlMgZ2V0dGVyIC8gc2V0dGVyIGNhbGxzLiBCdXQgdGhpcyBj
b3VsZCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5pdGlhbCBzdGFjay1wb2ludGVyLCBhbmQgbWFr
ZXMgUEFDIHRhZ2dpbmcgYnJva2VuLgotICAgICAgICAgICAgLy8gVG8gZW5zdXJlIFBBQy10YWdn
aW5nIHdvcmssIHdlIGZpcnN0IGFkanVzdCBzdGFjay1wb2ludGVyIHRvIHRoZSBhcHByb3ByaWF0
ZSBvbmUuCi0gICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworICAgIGlmICghY2FuQmVTaGFy
ZWQgJiYgQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJl
Z2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCkpOworICAgICAgICBhdXRvIG9rID0gaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFs
LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCkpOworICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICBvay5saW5rKCZqaXQpOwog
ICAgIH0KIAogICAgIHN0YXRlLnByZXNlcnZlZFJldXNlZFJlZ2lzdGVyU3RhdGUgPQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNyArMjUxLDcgQEAgc3Ry
dWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGNhbGN1
bGF0ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcoKTsKIAogICAgIFNw
aWxsU3RhdGUgcHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoY29uc3QgUmVnaXN0
ZXJTZXQmIGV4dHJhID0geyB9KTsKLSAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJh
ID0geyB9KTsKKyAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JD
YWxsV2l0aG91dEV4Y2VwdGlvbnMoKTsKIAogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNG
cm9tU3RhY2tGb3JDYWxsV2l0aFRocm93bkV4Y2VwdGlvbihjb25zdCBTcGlsbFN0YXRlJik7CiAg
ICAgdm9pZCByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoY29uc3QgU3BpbGxT
dGF0ZSYsIGNvbnN0IFJlZ2lzdGVyU2V0JiBkb250UmVzdG9yZSA9IHsgfSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAJKHJldmlzaW9u
IDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCwxMCArMTgwLDEwIEBAIFB1dEJ5U3RhdHVzIFB1dEJ5
U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKICAgICAgICAgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHVpZCk7
Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZShwcm9maWxlZEJsb2NrLT52bSgpKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2Uo
V1RGTW92ZShpZGVudGlmaWVyKSwgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxh
Y2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3RydWN0dXJlLCBvZmZzZXQpOwogICAgICAgICByZXR1
cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAg
ICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAog
I2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2lu
Y2x1ZGUgIlJlcGF0Y2guaCIKIApAQCAtNjUsOSArNjYsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjppbml0R2V0QnlJZFNlbGYoCiAgICAgQVNTRVJUKGhhc0NvbnN0YW50SWRlbnRpZmllcik7
CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZik7CiAgICAg
bV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAg
ICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
LT5pZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2sp
OwotICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxmT2Zmc2V0ID0g
b2Zmc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0QXJyYXlMZW5ndGgoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyKQpAQCAtODcsOSArODgsOSBAQCB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJlcGxhCiAgICAgQVNTRVJUKG1fY2FjaGVU
eXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hl
VHlwZTo6UHV0QnlJZFJlcGxhY2UpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0g
ICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
ID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCku
aGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9m
ZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVT
dHViSW5mbzo6aW5pdEluQnlJZFNlbGYoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9j
a2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBpbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRp
ZmllcikKQEAgLTk3LDkgKzk4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEluQnlJ
ZFNlbGYoYwogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KTsKICAg
ICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OkluQnlJZFNlbGYpOwogICAgIG1faWRl
bnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQo
KTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAg
ICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNl
dDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQpAQCAtMjM2LDcgKzIzNyw3
IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJlU3R1YkluZm8KICAgICAgICAgLy8g
d2UncmUgYnVmZmVyZWQgaXMgYmVjYXVzZSB3ZSByZWx5IG9uIGl0IHRvIHJlc2V0IGR1cmluZyBH
QyBpZiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUKICAgICAgICAgLy8gaXMgY29sbGVjdGVk
LgogICAgICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwotICAgICAgICBtX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlID0gMDsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGdlbmVyYXRlZCBzb21lIGNvZGUg
dGhlbiB3ZSBkb24ndCB3YW50IHRvIGF0dGVtcHQgdG8gcmVwYXRjaCBpbiB0aGUgZnV0dXJlIHVu
dGlsIHdlCiAgICAgICAgIC8vIGdhdGhlciBlbm91Z2ggY2FzZXMuCkBAIC0yNTEsNyArMjUyLDcg
QEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogewogICAgIGNsZWFy
QnVmZmVyZWRTdHJ1Y3R1cmVzKCk7CiAgICAgbV9pZGVudGlmaWVyID0gbnVsbHB0cjsKLSAgICBt
X2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUgPSAwOwogCiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5z
ZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTI4NSw2ICsyODYsNyBAQCB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAq
dGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NU
eXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgogICAg
ICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlWYWwpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKQEAgLTM2MCw4ICszNjIs
OCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgfQogCiAg
ICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKLSAgICBpZiAobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlKQotICAgICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNNYXJrZWQobV9pbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSkKKyAgICAgICAgaXNWYWxpZCAmPSB2bS5oZWFwLmlz
TWFya2VkKHN0cnVjdHVyZSk7CiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1
YikKICAgICAgICAgaXNWYWxpZCAmPSB1LnN0dWItPnZpc2l0V2Vhayh2bSk7CiAKQEAgLTM3NSw4
ICszNzcsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRl
VHJhbnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAobV9pbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlKQotICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPm1hcmtJ
ZkNoZWFwKHZpc2l0b3IpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGlubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUodmlzaXRvci52bSgpKSkKKyAgICAgICAgc3RydWN0dXJlLT5tYXJr
SWZDaGVhcCh2aXNpdG9yKTsKIAogICAgIGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0
dWIpCiAgICAgICAgIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CkBAIC00
MzAsNiArNDMyLDIwNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNl
CiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1
YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sq
LCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvKQoreworICAgIGFj
Y2Vzc1R5cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxp
bmtlZFN0dWJJbmZvLnN0YXJ0OworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8u
ZG9uZUxvY2F0aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1Yklu
Zm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSk7CisgICAgY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29k
ZUluZGV4KTsKKyAgICBtX2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICB1
c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwor
ICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHVi
SW5mby5ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0
b3JfbmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVyUmVnaXN0ZXIiIHJlZ2lz
dGVyIGVpdGhlci4KKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vz
c1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0
YW5jZU9mT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5C
eVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXpl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
blRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpHZXRCeUlkRGlyZWN0OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRC
eUlkRGlyZWN0T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRC
eUlkV2l0aFRoaXNPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhh
c1ByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
SGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0UHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25HZXRQcml2YXRlTmFtZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5k
KSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVu
bGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0
S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUu
aXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9w
dGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0
UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAg
ICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVs
ZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1
bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJl
Y3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgp
KQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3Ry
aWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1
bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJp
dmF0ZU5hbWU6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJp
dmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2
YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1p
emU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5k
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVC
cmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJh
bmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NU
eXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVE
ZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVE
ZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxp
bmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0g
dHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6
R2V0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOwor
ICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAg
ICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsK
KyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6Cisg
ICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBwcm90b3R5cGVJ
c0tub3duT2JqZWN0ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5l
SW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
TmFtZTogCisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBo
YXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5l
SW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1
ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBC
YXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRE
aXJlY3Q6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBoYXNDb25zdGFu
dElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVn
OworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAg
ICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAg
ICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAg
ICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnRo
aXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6Cisg
ICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJz
Ojp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlW
YWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0g
QWNjZXNzVHlwZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hl
Y2tQcml2YXRlQnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOwor
ICAgICAgICB2YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNl
bGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5m
b0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1
YkluZm86OmNoZWNrQ29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4MzAxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUu
aCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNp
bmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJT
dHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKQEAgLTU2LDYgKzU3LDcgQEAg
ZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRCeVZhbCwKICAgICBQdXRC
eUlkLAogICAgIFB1dEJ5VmFsLAorICAgIFB1dFByaXZhdGVOYW1lLAogICAgIEluQnlJZCwKICAg
ICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtNzgsNiArODAsOCBAQCBlbnVtIGNs
YXNzIENhY2hlVHlwZSA6IGludDhfdCB7CiAgICAgU3RyaW5nTGVuZ3RoCiB9OwogCitzdHJ1Y3Qg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKKwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZvKTsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKQEAgLTk4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRl
cmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKKyAgICB2b2lkIGluaXRpYWxpemVGcm9t
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvJik7CisKICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIENoZWNr
IGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9l
cywgdGhlbiBpdCByZXNldHMgaXRzZWxmLApAQCAtMzI1LDEzICszMzEsMTkgQEAgcHJpdmF0ZToK
IAogcHVibGljOgogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKKyAgICBQcm9wZXJ0eU9mZnNl
dCBieUlkU2VsZk9mZnNldDsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQnlJZFNlbGZP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIGJ5SWRT
ZWxmT2Zmc2V0KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZv
LCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOyB9CiAgICAgdW5pb24gewotICAgICAgICBz
dHJ1Y3QgewotICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgICAgICB9IGJ5
SWRTZWxmOwogICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsKICAgICB9IHU7Ci0gICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlOworICAg
IFN0cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShWTSYgdm0pCisgICAgeworICAg
ICAgICBpZiAoIW1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gdm0uZ2V0U3RydWN0dXJlKG1faW5saW5lQWNjZXNz
QmFzZVN0cnVjdHVyZSk7CisgICAgfQorICAgIFN0cnVjdHVyZUlEIG1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSB7IDAgfTsKIHByaXZhdGU6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2lk
ZW50aWZpZXI7CiAgICAgLy8gUmVwcmVzZW50cyB0aG9zZSBzdHJ1Y3R1cmVzIHRoYXQgYWxyZWFk
eSBoYXZlIGJ1ZmZlcmVkIEFjY2Vzc0Nhc2VzIGluIHRoZSBQb2x5bW9ycGhpY0FjY2Vzcy4KQEAg
LTM1Miw2ICszNjQsNyBAQCBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiBtX2NvZGVQdHI7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mQ29kZVB0cigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywg
bV9jb2RlUHRyKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEb25lTG9jYXRpb24o
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIGRvbmVMb2NhdGlv
bik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2xvd1BhdGhTdGFydExvY2F0aW9u
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBzbG93UGF0aFN0
YXJ0TG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1fc2xvd09w
ZXJhdGlvbik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ291bnRkb3duKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBjb3VudGRvd24pOyB9CkBA
IC00NDcsNiArNDYwLDE3IEBAIGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRG
dW4KICAgICB9CiB9CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVG
aWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5v
bmUoKSB9OworICAgIEVDTUFNb2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgpIH07Cisg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9m
IHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNhY2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNo
YWJsZSBqdW1wIGZvciAnaW5zdGFuY2VvZicgY2FjaGVzLgorICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxK
SVRTdHViUm91dGluZVB0clRhZz4gc2xvd1BhdGhTdGFydExvY2F0aW9uOworfTsKKwogI2Vsc2UK
IAogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBwcmludFN1cGVyU2FtcGxlclN0YXRlKCkKICAgICBk
b3VibGUgcGVyY2VudGFnZSA9IDEwMC4wICogaW4gLyAoaW4gKyBvdXQpOwogICAgIGlmIChwZXJj
ZW50YWdlICE9IHBlcmNlbnRhZ2UpCiAgICAgICAgIHBlcmNlbnRhZ2UgPSAwLjA7Ci0gICAgZGF0
YUxvZygiUGVyY2VudCB0aW1lIGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNlbnRh
Z2UsICJcbiIpOworICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxl
ciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiJVxuIik7CiB9CiAKIHZvaWQgZW5hYmxlU3VwZXJTYW1w
bGVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKIAorI2luY2x1
ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5o
IgpAQCAtNzgsNiArNzksOCBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2so
Vk0mCiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkobG9ja2VyKTsKICAgICAgICAg
bV9yYXJlRGF0YS0+bV9wcml2YXRlQnJhbmRSZXF1aXJlbWVudCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcml2YXRlQnJhbmRSZXF1aXJlbWVudDo6TmVlZGVkKTsKICAgICB9CisKKyAgICBtX2xs
aW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25z
Ojp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFZpc2l0b3I+CkBAIC0zMTYsNiArMzE5LDQ4IEBAIGludCBVbmxpbmtlZENvZGVCbG9jazo6b3V0
T2ZMaW5lSnVtcE9mZnMKICAgICByZXR1cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5nZXQoYnl0
ZWNvZGVPZmZzZXQpOwogfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKK2Jvb2wgVW5saW5rZWRDb2Rl
QmxvY2s6Omhhc0lkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBpZiAo
bnVtYmVyT2ZJZGVudGlmaWVycygpID4gMTAwKSB7CisgICAgICAgIGlmIChudW1iZXJPZklkZW50
aWZpZXJzKCkgIT0gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5zaXplKCkpIHsKKyAgICAgICAgICAg
IExvY2tlciBsb2NrZXIobV9jYWNoZWRJZGVudGlmaWVyVWlkc0xvY2spOworICAgICAgICAgICAg
SGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IGNhY2hlZElkZW50aWZpZXJVaWRzOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciA9IHRoaXMt
PmlkZW50aWZpZXIoaSk7CisgICAgICAgICAgICAgICAgY2FjaGVkSWRlbnRpZmllclVpZHMuYWRk
KGlkZW50aWZpZXIuaW1wbCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgV1RGOjpz
dG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgIG1fY2FjaGVkSWRlbnRpZmllclVpZHMgPSBX
VEZNb3ZlKGNhY2hlZElkZW50aWZpZXJVaWRzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBtX2NhY2hlZElkZW50aWZpZXJVaWRzLmNvbnRhaW5zKHVpZCk7CisgICAgfQorCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7CisgICAg
ICAgIGlmIChpZGVudGlmaWVyKGkpLmltcGwoKSA9PSB1aWQpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK2ludDMyX3QgVW5s
aW5rZWRDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKK3sKKyAg
ICBzd2l0Y2ggKGRpZE9wdGltaXplKCkpIHsKKyAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWlu
YXRlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkOworICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNl
OgorICAgICAgICByZXR1cm4gdGhyZXNob2xkICogNDsKKyAgICBjYXNlIFRyaVN0YXRlOjpUcnVl
OgorICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8gMjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIHRocmVzaG9sZDsKK30KKworCiB2b2lkIFVubGlua2VkQ29k
ZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
bV9tZXRhZGF0YS0+aXNGaW5hbGl6ZWQoKSk7CkBAIC0zMzcsMTUgKzM4MiwyNSBAQCB2b2lkIFVu
bGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByCiAgICAgaWYgKG1fbWV0YWRhdGEtPmhh
c01ldGFkYXRhKCkpIHsKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheVByb2ZpbGVzID0g
MDsKIAotI2RlZmluZSBDT1VOVChfX29wKSBcCi0gICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxl
cyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CisjZGVmaW5lIENPVU5UKF9fb3Ap
IG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7
CiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ09VTlQpCiAgICAg
ICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENPVU5UKQogI3Vu
ZGVmIENPVU5UCiAgICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5u
dW1FbnRyaWVzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmls
ZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEdldEJ5SWQ+KCk7Ci0KICAgICAgICAgbV9h
cnJheVByb2ZpbGVzID0gRml4ZWRWZWN0b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+KG51bWJlck9m
QXJyYXlQcm9maWxlcyk7CisKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCaW5hcnlBcml0aFBy
b2ZpbGVzID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZCaW5hcnlBcml0aFByb2Zp
bGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgRk9SX0VBQ0hf
T1BDT0RFX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoQ09VTlQpCisjdW5kZWYgQ09VTlQKKyAg
ICAgICAgbV9iaW5hcnlBcml0aFByb2ZpbGVzID0gRml4ZWRWZWN0b3I8QmluYXJ5QXJpdGhQcm9m
aWxlPihudW1iZXJPZkJpbmFyeUFyaXRoUHJvZmlsZXMpOworCisgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVy
T2ZVbmFyeUFyaXRoUHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOwor
ICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKENPVU5UKQor
I3VuZGVmIENPVU5UCisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzID0gRml4ZWRWZWN0b3I8
VW5hcnlBcml0aFByb2ZpbGU+KG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzKTsKICAgICB9CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1
LDEyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5j
bHVkZSAiQXJyYXlQcm9maWxlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgog
I2luY2x1ZGUgIkNvZGVUeXBlLmgiCiAjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKKyNpbmNs
dWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5o
IgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgpAQCAt
NjQsNiArNjYsNyBAQCBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNz
IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogc3Ry
dWN0IEV4ZWN1dGFibGVJbmZvOwogZW51bSBjbGFzcyBMaW5rVGltZUNvbnN0YW50IDogaW50MzJf
dDsKIApAQCAtMTc1LDYgKzE3OCw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZpeGVkVmVjdG9y
PFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9j
b25zdGFudFJlZ2lzdGVyczsgfQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29u
c3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0
YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4g
bV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsg
fQogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uOyB9CiAKQEAgLTIwNyw2ICsyMTEsMTUgQEAgcHVibGljOgogICAg
IEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1vZGUpOyB9CiAKICAgICBjb25zdCBJbnN0
cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3Q7CisgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uQXQoQnl0ZWNvZGVJbmRleCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5z
dHJ1Y3Rpb25zKCkuYXQoaW5kZXgpLnB0cigpOyB9CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgY29uc3Qg
YXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5hdCgwKS5wdHIoKTsKKyAg
ICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zRW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbnN0cnVjdGlvbnNC
ZWdpbikgKyBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChp
bnN0cnVjdGlvbiA+PSBpbnN0cnVjdGlvbnNCZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGluc3RydWN0
aW9uc0VuZCk7CisgICAgICAgIHJldHVybiBpbnN0cnVjdGlvbiAtIGluc3RydWN0aW9uc0JlZ2lu
OworICAgIH0KKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbnNTaXplKCkgY29uc3QgeyByZXR1cm4g
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMo
KSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogICAgIHVuc2lnbmVkIG51bVZh
cnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KQEAgLTMzNCwxMCArMzQ3LDIxIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWV0YWRhdGEtPnNpemVJbkJ5dGVzKCk7CiAgICAgfQog
CisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCisg
ICAgeworICAgICAgICAvLyBTb21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29t
cGxldGUgdGhlIGxvb3BzIHRoZXkgcnVuLgorICAgICAgICByZXR1cm4gIWlzQnVpbHRpbkZ1bmN0
aW9uKCk7CisgICAgfQogICAgIHZvaWQgYWxsb2NhdGVTaGFyZWRQcm9maWxlcygpOwogICAgIFVu
bGlua2VkVmFsdWVQcm9maWxlJiB1bmxpbmtlZFZhbHVlUHJvZmlsZSh1bnNpZ25lZCBpbmRleCkg
eyByZXR1cm4gbV92YWx1ZVByb2ZpbGVzW2luZGV4XTsgfQogICAgIFVubGlua2VkQXJyYXlQcm9m
aWxlJiB1bmxpbmtlZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9hcnJh
eVByb2ZpbGVzW2luZGV4XTsgfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29sIGhhc0lk
ZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyNlbmRpZgorCisgICAgaW50MzJfdCB0aHJl
c2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOworCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5r
ZWRDb2RlQmxvY2soVk0mLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUlu
Zm8mLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPik7CiAKQEAgLTM5Nyw2ICs0MjEsNyBA
QCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGV4aWNhbFNjb3BlRmVhdHVyZXMgOiA0OwogcHVi
bGljOgogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOworICAgIFJlZlB0cjxCYXNlbGluZUpJ
VENvZGU+IG1fdW5saW5rZWRCYXNlbGluZUNvZGU7CiBwcml2YXRlOgogICAgIENvZGVGZWF0dXJl
cyBtX2ZlYXR1cmVzIHsgMCB9OwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKQEAg
LTQxMyw3ICs0MzgsNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlv
blN0cmVhbT4gbV9pbnN0cnVjdGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzczsKIAotCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAg
REZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwogI2VuZGlmCkBAIC00NTgsNiArNDgyLDE2
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGlu
c3RydWN0aW9uLm9mZnNldCgpKTsKICAgICB9CisgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIHBjKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQgPSB0aGlzLT5ieXRlY29kZU9mZnNldChwYyk7CisgICAgICAgIHJldHVybiBvdXRPZkxp
bmVKdW1wT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB9CisKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUmIGJpbmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX2JpbmFyeUFy
aXRoUHJvZmlsZXNbaV07IH0KKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgdW5hcnlBcml0aFByb2Zp
bGUodW5zaWduZWQgaSkgeyByZXR1cm4gbV91bmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KKworICAg
IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIHsgcmV0dXJu
IG1fbGxpbnRFeGVjdXRlQ291bnRlcjsgfQogCiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGlu
ZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwpA
QCAtNDY1LDggKzQ5OSwxNiBAQCBwcml2YXRlOgogICAgIE91dE9mTGluZUp1bXBUYXJnZXRzIG1f
b3V0T2ZMaW5lSnVtcFRhcmdldHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBtX3Jh
cmVEYXRhOwogICAgIEZpeGVkVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVzc2lv
bkluZm87CisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRl
cjsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZFZhbHVlUHJvZmlsZT4gbV92YWx1ZVByb2ZpbGVz
OwogICAgIEZpeGVkVmVjdG9yPFVubGlua2VkQXJyYXlQcm9maWxlPiBtX2FycmF5UHJvZmlsZXM7
CisgICAgRml4ZWRWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPiBtX2JpbmFyeUFyaXRoUHJvZmls
ZXM7CisgICAgRml4ZWRWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2Zp
bGVzOworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBMb2NrIG1fY2FjaGVkSWRlbnRpZmllclVp
ZHNMb2NrOworICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBtX2NhY2hlZElkZW50aWZp
ZXJVaWRzOworI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVO
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFU
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZE1ldGFkYXRhVGFibGUuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw2ICs2NCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVu
bGlua2VkTWV0YWRhdGFUYWJsZSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9w
Y29kZT4KKyAgICB1aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYg
b3Bjb2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQpOworICAgICAgICB1
aW50cHRyX3QgYmFzZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bj
b2RlOjpvcGNvZGVJRF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07CisgICAg
ICAgIGJhc2VUeXBlT2Zmc2V0ID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm9mKHR5cGVuYW1l
IE9wY29kZTo6TWV0YWRhdGEpLCBiYXNlVHlwZU9mZnNldCk7CisgICAgICAgIHJldHVybiBiYXNl
VHlwZU9mZnNldCArIHNpemVvZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5t
X21ldGFkYXRhSUQ7CisgICAgfQorCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgog
ICAgIHVuc2lnbmVkIG51bUVudHJpZXMoKTsKIApAQCAtMTA3LDYgKzExNiw3IEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiBzX29mZnNldDE2VGFibGVTaXplOwogICAgIH0KIAorCiAgICAgdXNp
bmcgT2Zmc2V0MzIgPSB1aW50MzJfdDsKICAgICB1c2luZyBPZmZzZXQxNiA9IHVpbnQxNl90Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5o
CShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEzICs0NSwxMSBAQCBzdHJ1Y3QgVmFs
dWVQcm9maWxlQmFzZSB7CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9m
QnVja2V0cyA9IG51bWJlck9mQnVja2V0c0FyZ3VtZW50OwogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHMgPSAxOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgYnVja2V0SW5kZXhNYXNrID0gbnVtYmVyT2ZCdWNrZXRzIC0gMTsKICAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZC
dWNrZXRzICsgbnVtYmVyT2ZTcGVjRmFpbEJ1Y2tldHM7CiAgICAgCiAgICAgVmFsdWVQcm9maWxl
QmFzZSgpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1i
ZXJPZkJ1Y2tldHM7ICsraSkKLSAgICAgICAgICAgIG1fYnVja2V0c1tpXSA9IEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOworICAgICAgICBjbGVhckJ1Y2tldHMoKTsKICAgICB9CiAgICAgCiAg
ICAgRW5jb2RlZEpTVmFsdWUqIHNwZWNGYWlsQnVja2V0KHVuc2lnbmVkIGkpCkBAIC01OSw2ICs1
NywxMiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIEFTU0VSVChudW1iZXJP
ZkJ1Y2tldHMgKyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHMpOwogICAgICAgICByZXR1cm4gbV9i
dWNrZXRzICsgbnVtYmVyT2ZCdWNrZXRzICsgaTsKICAgICB9CisKKyAgICB2b2lkIGNsZWFyQnVj
a2V0cygpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1i
ZXJPZkJ1Y2tldHM7ICsraSkKKyAgICAgICAgICAgIG1fYnVja2V0c1tpXSA9IEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOworICAgIH0KICAgICAKICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbyh1bnNpZ25lZCBidWNrZXQpIGNvbnN0CiAgICAgewpAQCAtMTIzLDggKzEyNyw2IEBAIHN0
cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBV
cGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxs
IHRoaXMgZnJvbSBhbnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNv
ZGUuCiAgICAgU3BlY3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENv
bmN1cnJlbnRKU0xvY2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7ICsraSkgewpAQCAtMTM5LDcgKzE0MSw3IEBAIHN0cnVj
dCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rp
b247CiAgICAgfQotICAgIAorCiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNrZXRzW3RvdGFsTnVt
YmVyT2ZCdWNrZXRzXTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbiB7IFNwZWNO
b25lIH07CkBAIC0xNjEsNiArMTYzLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1i
ZXJPZkJ1Y2tldAogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZhbHVlUHJvZmlsZVdp
dGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgpIDogVmFsdWVQcm9m
aWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPigpIHsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWYWx1ZVByb2Zp
bGUsIG1fYnVja2V0c1swXSk7IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFs
UmVnaXN0ZXIgOiBwdWJsaWMgVmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENv
ZGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKICNpbmNs
dWRlICJERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKICNpbmNs
dWRlICJERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKQEAgLTM0LDcgKzM1LDkgQEAK
ICNpbmNsdWRlICJERkdKdW1wUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5o
IgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZVNldC5oIgorI2luY2x1ZGUgIkpJVE1hdGhJQy5o
IgogI2luY2x1ZGUgIkpTQ2FzdC5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAj
aW5jbHVkZSAiUHJvZmlsZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIlJlY29yZGVkU3RhdHVz
ZXMuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CkBAIC03MCw3ICs3Myw3IEBAIHN0cnVjdCBXZWFr
UmVmZXJlbmNlVHJhbnNpdGlvbiB7CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV90bzsKIH07
CiAgICAgICAgIAotY2xhc3MgQ29tbW9uRGF0YSB7CitjbGFzcyBDb21tb25EYXRhIDogcHVibGlj
IE1hdGhJQ0hvbGRlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CiBw
dWJsaWM6CiAgICAgQ29tbW9uRGF0YSgpCkBAIC0xMTYsNiArMTE5LDcgQEAgcHVibGljOgogICAg
IEZpeGVkVmVjdG9yPENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludD4gbV93YXRjaHBvaW50
czsKICAgICBGaXhlZFZlY3RvcjxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IG1fYWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50czsKICAgICBGaXhlZFZlY3RvcjxBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+IG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50czsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNU
b0NvZGVPcmlnaW5NYXA7CiAgICAgUmVjb3JkZWRTdGF0dXNlcyByZWNvcmRlZFN0YXR1c2VzOwog
ICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1lbnQ+IG1fanVtcFJlcGxhY2VtZW50czsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMjgz
MDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKIAorc3RydWN0IFNp
bXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKIG5hbWVzcGFjZSBERkcg
ewogCiBjbGFzcyBKSVRDb21waWxlcjsKQEAgLTEwMSw2ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAg
c3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEMoQ29kZUJsb2NrKiwgdm9pZCogcGMpIGZp
bmFsOwogCiAgICAgdXNpbmcgRGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkc7
CisKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7
IHJldHVybiBjb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQogICAgIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgSklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENvbXBpbGVyIHRv
IGNhbGwgc2V0Q29kZVJlZigpLgpAQCAtMTQwLDYgKzE0NSw4IEBAIHB1YmxpYzoKICAgICBIYXNo
TWFwPEJ5dGVjb2RlSW5kZXgsIFRyaWdnZXJSZWFzb24+IHRpZXJVcEVudHJ5VHJpZ2dlcnM7CiAK
ICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX29zckVudHJ5QmxvY2s7CisgICAgRml4ZWRW
ZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0
b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgdW5zaWdu
ZWQgb3NyRW50cnlSZXRyeTsKICAgICBib29sIGFiYW5kb25PU1JFbnRyeTsKICNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDEzICsxODUsMTIg
QEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIAogICAgIG1f
Z3JhcGgucmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsKIAotICAgIGlmICghbV9ncmFwaC5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpIHx8ICFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxl
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVC
bG9jay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShs
b2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMpOwotICAgICAgICBpZiAoIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFi
bGVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxv
Y2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3dpdGNoSnVtcFRh
Ymxlcyk7Ci0gICAgfQorICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxl
cy5pc0VtcHR5KCkpOworICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMu
aXNFbXB0eSgpKSAKKyAgICAgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMg
PSBXVEZNb3ZlKG1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBpZiAoIW1f
Z3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9qaXRDb2RlLT5t
X3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsK
IAogICAgIGZvciAoQmFnPFN3aXRjaERhdGE+OjppdGVyYXRvciBpdGVyID0gbV9ncmFwaC5tX3N3
aXRjaERhdGEuYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKICAgICAgICAgU3dpdGNoRGF0YSYg
ZGF0YSA9ICoqaXRlcjsKQEAgLTE5OSwxMiArMTk4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6Omxp
bmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgY2FzZSBTd2l0Y2hDaGFyOgogICAgICAgICBj
YXNlIFN3aXRjaEltbTogewogICAgICAgICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkg
ewotICAgICAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRh
dGEuc3dpdGNoVGFibGVJbmRleCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
bV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XS5pc0Vt
cHR5KCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
Z3JhcGgudW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAg
ICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXNbZGF0
YS5zd2l0Y2hUYWJsZUluZGV4XTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVs
dCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2Rh
dGEuZmFsbFRocm91Z2guYmxvY2stPmluZGV4XSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuc2l6ZSgpID09IHVubGlua2VkVGFibGUubV9icmFu
Y2hPZmZzZXRzLnNpemUoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsaW5rZWRU
YWJsZS5tX2N0aU9mZnNldHMuc2l6ZSgpOyBqLS07KQpAQCAtMjE5LDEyICsyMTgsMTIgQEAgdm9p
ZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogCiAgICAgICAgIGNhc2UgU3dp
dGNoU3RyaW5nOiB7CiAgICAgICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUo
ZGF0YS5zd2l0Y2hUYWJsZUluZGV4KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VS
VChtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5k
ZXhdLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9ncmFwaC51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRh
YmxlSW5kZXgpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsK
KyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENvZGUtPm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAg
ICAgYXV0byBjdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFn
PihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCkgPT0gdW5s
aW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnNpemUoKSArIDEpOwogICAgICAgICAgICAgZm9yIChh
dXRvJiBlbnRyeSA6IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cykKQEAgLTMzMyw3ICszMzIsNyBA
QCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgfQogCiAgICAg
aWYgKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQotICAgICAg
ICBtX2NvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAobWFrZVVuaXF1ZTxQQ1RvQ29kZU9y
aWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIp
KTsKKyAgICAgICAgbV9qaXRDb2RlLT5jb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VV
bmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIpLCBsaW5rQnVmZmVyKTsKIH0KIAogc3RhdGljIHZvaWQgZW1pdFN0YWNrT3ZlcmZsb3dDaGVj
ayhKSVRDb21waWxlciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHN0YWNrT3ZlcmZs
b3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5
KFZNJiB2bSwgQ2FsbEZyYW1lKgogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
Y29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQpOwotICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFw
KCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3Rp
bGxWYWxpZCk7CiAKICAgICBpZiAoIU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9ERkcoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMjgzMDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzcyLDkgKzc3Miw2IEBAIHZvaWQgT1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxI
ZWxwZXJzJiAKICAgICAvLyBUaGUgdGFnIHJlZ2lzdGVycyBhcmUgbmVlZGVkIHRvIG1hdGVyaWFs
aXplIHJlY292ZXJpZXMgYmVsb3cuCiAgICAgaml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVn
aXN0ZXJzKCk7CiAKLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAg
aml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVu
dHJ5RnJhbWUpOwotCiAgICAgaWYgKGlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50
KSB7CiAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiB0bXBTY3JhdGNoID0gc2NyYXRjaCArIG9wZXJh
bmRzLnRtcEluZGV4KDApOwogICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uTWF0ZXJpYWxpemVPU1JFeGl0U2lkZVN0YXRlKT4oJnZtLCAmZXhpdCwgdG1wU2NyYXRj
aCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQ29k
ZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSklULmgiCkBAIC0xMTksMTAgKzEyMCwxMCBAQCB2b2lk
IGhhbmRsZUV4aXRDb3VudHMoVk0mIHZtLCBDQ2FsbEhlbHBlCiAgICAgaW50MzJfdCBjbGlwcGVk
VmFsdWU7CiAgICAgc3dpdGNoIChqaXQuY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewogICAgIGNh
c2UgSklUVHlwZTo6REZHSklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBCYXNlbGluZUV4ZWN1
dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmpl
Y3QoKSwgdGFyZ2V0VmFsdWUpOworICAgICAgICBjbGlwcGVkVmFsdWUgPSBCYXNlbGluZUV4ZWN1
dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQodGFyZ2V0VmFsdWUpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEpJVFR5cGU6OkZUTEpJVDoKLSAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBw
ZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChqaXQuY29kZUJsb2NrKCkt
Pmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9IFVw
cGVyVGllckV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQodGFyZ2V0VmFsdWUpOwog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtMTQyLDExICsxNDMsOCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUCiB7CiAgICAgY2FsbGVySXNMTEludCA9IE9wdGlvbnM6OmZvcmNlT1NS
RXhpdFRvTExJbnQoKSB8fCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aml0VHlwZSgpID09
IEpJVFR5cGU6OkludGVycHJldGVyVGh1bms7CiAKLSAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpKSB7Ci0gICAgICAgIGlmICghY2FsbGVySXNMTEludCkKLSAgICAgICAgICAg
IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwor
ICAgIGlmIChjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCiAgICAgICAgIHJldHVybiBM
TEludDo6Y2hlY2twb2ludE9TUkV4aXRGcm9tSW5saW5lZENhbGxUcmFtcG9saW5lVGh1bmsoKS5j
b2RlKCk7Ci0gICAgfQogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGp1bXBUYXJnZXQ7CiAKQEAgLTE5OCw4ICsxOTYsNiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUCiAjdW5kZWYgTExJTlRfUkVUVVJOX0xPQ0FUSU9OCiAKICAgICB9
IGVsc2UgewotICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bV9oYXNMaW5rZWRP
U1JFeGl0ID0gdHJ1ZTsKLQogICAgICAgICBzd2l0Y2ggKHRydWVDYWxsZXJDYWxsS2luZCkgewog
ICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbDoKICAgICAgICAgY2FzZSBJbmxpbmVD
YWxsRnJhbWU6OkNvbnN0cnVjdDoKQEAgLTMxMyw2ICszMDksMTAgQEAgdm9pZCByZWlmeUlubGlu
ZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNhbGxl
cik7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpLCBjYWxsZWVTYXZl
U2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJz
OjptZXRhZGF0YVRhYmxlR1BSKSk7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlv
bnNSYXdQb2ludGVyKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5l
Q29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUikpOworICAgICAgICB9IGVsc2UgaWYg
KHRydWVDYWxsZXIpIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOworICAgICAg
ICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5l
Q2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgSklUOjpzX21ldGFkYXRhR1BSKSk7CisgICAg
ICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5l
Q29kZUJsb2NrRm9yQ2FsbGVyLT5iYXNlbGluZUpJVENvbnN0YW50UG9vbCgpKSwgY2FsbGVlU2F2
ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgSklUOjpzX2NvbnN0YW50
c0dQUikpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFy
YXJncygpKQpAQCAtNDA0LDcgKzQwNCw4IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZN
JiB2bSwgQ0NhbGwKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKICAgICAg
ICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb2RlQmxvY2tGb3JFeGl0
LT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKSwgSklU
OjpzX21ldGFkYXRhR1BSKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPmJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkpLCBKSVQ6
OnNfY29uc3RhbnRzR1BSKTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9IGV4
aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uOwpAQCAtNDIwLDEyICs0MjEsMTYgQEAg
dm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgICAgICBqdW1wVGFy
Z2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRk
cmVzcygpOwogICAgIH0KIAotICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrRm9yRXhpdCkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxl
cigpKSB7CisgICAgICAgIEFTU0VSVCghUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVy
cygpLmNvbnRhaW5zKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSk7CisgICAgICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1l
LCBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoTExJbnQ6OlJlZ2lzdGVyczo6cGNH
UFIpKTsKKwogICAgICAgICAvLyBTaW5jZSB3ZSdyZSBqdW1waW5nIHRvIG9wX2NhdGNoLCB3ZSBu
ZWVkIHRvIHNldCBjYWxsRnJhbWVGb3JDYXRjaC4KICAgICAgICAgaml0LnN0b3JlUHRyKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2bS5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgpKTsK
ICAgICB9Ci0gICAgCisKKyAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9ja0ZvckV4aXQpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKwogICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIGppdC5mYXJK
dW1wKEdQUkluZm86OnJlZ1QyLCBPU1JFeGl0UHRyVGFnKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRo
cy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKQEAg
LTI4NjksNyArMjg3MCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25GaW5k
U3cKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAg
ICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
LSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBBU1NF
UlQodmFsdWUuaXNEb3VibGUoKSk7CiAgICAgZG91YmxlIGFzRG91YmxlID0gdmFsdWUuYXNEb3Vi
bGUoKTsKQEAgLTI4OTAsNyArMjg5MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25Td2l0Y2gKIAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0
cik7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwot
ICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5kZmdTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CiAgICAgcmV0dXJuIGxpbmtlZFRhYmxlLmN0aUZvclZhbHVlKCp1bmxpbmtlZFRhYmxl
LCBzdHJJbXBsKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzAsNiArNzMwLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZs
ZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZVRhZ0dQUiwgY2FsbGVl
UGF5bG9hZEdQUik7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1BbGxv
Y2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1Q
YXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1faml0
LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAgICAgICAgICBFZGdl
IGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTg4
OSw3ICs4OTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAK
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBj
YWxsZWVQYXlsb2FkR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6
Tm8sIFsmXSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KG1faml0LCBjYWxsZWVQYXlsb2FkR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVE
YXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2pp
dCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAy
ODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjgsNiArODI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0g
VmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAg
ICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAg
IHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1l
dGVycygpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0g
bV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CkBAIC05NzksNyArOTgwLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAg
ICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsm
XSB7CisgICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgobV9qaXQsIGNhbGxlZUdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09
IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZm
bGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciht
X2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI4
MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOTg1LDcgKzM5ODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHV0UHJpdmF0ZU5hCiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRo
aXMtPnVzZWRSZWdpc3RlcnMoKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2Fs
bFNpdGUsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBtX2pp
dC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNj
ZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIHVzZWRSZWdpc3RlcnMsCiAgICAgICAgIEpTVmFsdWVS
ZWdzOjpwYXlsb2FkT25seShiYXNlR1BSKSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHByb3Bl
cnR5R1BSKSwgdmFsdWVSZWdzLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAgICAgZ2Vu
LnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogCkBAIC00OTA1LDcgKzQ5MDUs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRo
UHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUQWRkSUMqIGFk
ZElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAg
SklUQWRkSUMqIGFkZElDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUQWRkSUMoYXJp
dGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVl
QWRkT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25W
YWx1ZUFkZDsKICAgICAKQEAgLTQ5ODksNyArNDk4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZVN1YihOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0g
bV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChi
eXRlY29kZUluZGV4KTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+
YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2ppdC5q
aXRDb2RlKCktPmNvbW1vbi5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVw
YXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZTsKICAgICBhdXRvIG5v
blJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViOwogCkBAIC01NTcxLDcgKzU1
NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVOZWdhdGUoCiAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIFVuYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+dW5hcnlBcml0
aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVE5lZ0lDKiBu
ZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAg
IEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVE5lZ0lDKGFy
aXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0
aE5lZ2F0ZU9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0
aW9uQXJpdGhOZWdhdGU7CiAgICAgY29tcGlsZU1hdGhJQyhub2RlLCBuZWdJQywgcmVwYXRjaGlu
Z0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwpAQCAtNTgxNSw3ICs1ODE1LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTXVsKE5vZAogICAgIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0g
bm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2Zp
bGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVE11bElDKiBtdWxJQyA9
IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVE11
bElDKiBtdWxJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVE11bElDKGFyaXRoUHJv
ZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bE9w
dGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVN
dWw7CiAKQEAgLTE0NzcwLDcgKzE0NzcwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUxvZ1NoYWRvd0NoaQogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5ncHIoKTsKIAotICAgIG1f
aml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3Ms
IHNjb3BlUmVnLCBtX2ppdC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJbmRleCk7CisgICAgbV9qaXQu
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2Nv
cGVSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKSksIGNh
bGxTaXRlSW5kZXgpOwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
Niw3ICsxNTYsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAK
ICAgICBpZiAodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygpKSB7CiAgICAg
ICAgIEIzOjpQQ1RvT3JpZ2luTWFwIG9yaWdpbk1hcCA9IHN0YXRlLnByb2MtPnJlbGVhc2VQQ1Rv
T3JpZ2luTWFwKCk7Ci0gICAgICAgIGNvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAobWFr
ZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtLCBX
VEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyKSk7
CisgICAgICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFr
ZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtLCBX
VEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyKTsK
ICAgICB9CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBsYWJlbCA9IHN0
YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFn
PihzdGF0ZS5wcm9jLT5jb2RlKCkuZW50cnlwb2ludExhYmVsKDApKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiAr
NjgsOCBAQCBwdWJsaWM6CiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24oKSBvdmVycmlk
ZTsKICAgICBzdGF0aWMgcHRyZGlmZl90IGNvbW1vbkRhdGFPZmZzZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSklUQ29kZSwgY29tbW9uKTsgfQogICAgIHZvaWQgc2hyaW5rVG9GaXQoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJikgb3ZlcnJpZGU7CisKKyAgICBQQ1RvQ29kZU9yaWdpbk1h
cCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBjb21tb24ubV9wY1RvQ29k
ZU9yaWdpbk1hcC5nZXQoKTsgfQogICAgIAogICAgIERGRzo6Q29tbW9uRGF0YSBjb21tb247CiAg
ICAgVmVjdG9yPE9TUkV4aXQ+IG1fb3NyRXhpdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTQgKzUyLDYgQEAgdm9pZCBs
aW5rKFN0YXRlJiBzdGF0ZSkKIAogICAgIGdyYXBoLnJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7CiAK
LSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmVuc3Vy
ZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKLSAg
ICAgICAgQVNTRVJUKGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVt
cFRhYmxlcy5pc0VtcHR5KCkpOwotICAgIH0KLSNlbmRpZgotCiAgICAgLy8gQ3JlYXRlIHRoZSBl
bnRyeXBvaW50LiBOb3RlIHRoYXQgd2UgdXNlIHRoaXMgZW50cnlwb2ludCB0b3RhbGx5IGRpZmZl
cmVudGx5CiAgICAgLy8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UncmUgZG9pbmcgT1NSIGVudHJ5
IG9yIG5vdC4KICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyODMw
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDcgQEAKICNpbmNsdWRlICJKU1NldEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIK
KyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlByb2JlQ29udGV4dC5o
IgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIgpAQCAtMjMyMCw2ICsyMzIxLDE4IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbXBp
bGVCaW5hcnlNYXRoSUM8SklUU3ViR2VuZXJhdG9yPihhcml0aFByb2ZpbGUsIHJlcGF0Y2hpbmdG
dW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAg
ICBzdGF0aWMgSklUQWRkSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmlu
YXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUQWRkSUMocHJv
ZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTXVsR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRNdWxJQyogYWRkTWF0aElDKERG
Rzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0
dXJuIGNvbW1vbi5hZGRKSVRNdWxJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8R2VuZXJhdG9yLCBKSVROZWdHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3Rh
dGljIEpJVE5lZ0lDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIFVuYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUTmVnSUMocHJvZmlsZSk7
IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUU3ViR2VuZXJhdG9y
Pjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRTdWJJQyogYWRkTWF0aElDKERGRzo6Q29t
bW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNv
bW1vbi5hZGRKSVRTdWJJQyhwcm9maWxlKTsgfQorCiAgICAgdm9pZCBjb21waWxlVmFsdWVNdWwo
KQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKQEAgLTIzOTEsNyArMjQwNCw3IEBA
IHByaXZhdGU6CiAjZW5kaWYKIAogICAgICAgICAgICAgICAgIEJveDxNYXRoSUNHZW5lcmF0aW9u
U3RhdGU+IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+
OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBt
YXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRoUHJvZmls
ZSk7CisgICAgICAgICAgICAgICAgSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0g
YWRkTWF0aElDPEdlbmVyYXRvcj4oc3RhdGUtPmppdENvZGUtPmNvbW1vbiwgYXJpdGhQcm9maWxl
KTsKICAgICAgICAgICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKEpTVmFs
dWVSZWdzKHBhcmFtc1swXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIHBh
cmFtcy5ncFNjcmF0Y2goMCkpOwogCiAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJv
ZmlsaW5nID0gZmFsc2U7CkBAIC0yNTAwLDcgKzI1MTMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAK
ICAgICAgICAgICAgICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUgPSBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAg
ICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxv
Y2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgICAg
ICBKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gYWRkTWF0aElDPEdlbmVyYXRv
cj4oc3RhdGUtPmppdENvZGUtPmNvbW1vbiwgYXJpdGhQcm9maWxlKTsKICAgICAgICAgICAgICAg
ICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJh
bmQsIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSksCiAgICAgICAgICAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBhcmFtc1syXS5ncHIoKSks
IHBhcmFtcy5mcFNjcmF0Y2goMCksCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mcFNjcmF0
Y2goMSksIHBhcmFtcy5ncFNjcmF0Y2goMCkpOwpAQCAtNDMxNyw3ICs0MzMwLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpGVExKSVQpID8gcGFyYW1zLmdwU2NyYXRjaCgwKSA6IEludmFsaWRHUFJSZWc7CiAK
ICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVFB1dEJ5VmFsR2VuZXJhdG9yPjo6
Y3JlYXRlKAotICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklU
LCBub2RlU2VtYW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
LAorICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2Rl
U2VtYW50aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1l
LAogICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKIAogICAgICAgICAgICAgZ2VuZXJh
dG9yLT5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKQEAgLTEwMjg1LDYgKzEw
Mjk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bnVtUGFzc2VkQXJnczsgaSA8IG51bUFsbG9jYXRlZEFyZ3M7ICsraSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MuYXBwZW5kKFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50
KGpzVW5kZWZpbmVkKCkpKTsKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFz
c2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
Lm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5j
b2RlQmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJ
bmZvKHNlbWFudGljTm9kZU9yaWdpbik7CkBAIC0xMDQ0MywxMyArMTA0NTcsMTQgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQocGFyYW1zWzEg
KyBpXS5yZWNvdmVyeUZvckpTVmFsdWUoKSk7CiAKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0
YS5udW1QYXNzZWRBcmdzID0gbnVtQXJnczsKKyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5u
dW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVn
aXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CiAKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmln
aW4pOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5m
bzo6VGFpbENhbGwsIEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIGF1dG8gc2xv
d1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6
cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsK
KyAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAg
ICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwNzkyLDcgKzEwODA3LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQ
YXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAg
ICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJ
bnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0
aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0
LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5w
cmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtMTEw
NzMsNyArMTEwODgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRv
bmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAg
ICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BS
SW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywg
WyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAg
ICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMywyOCArNDEz
LDE2IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAogICAgIFJl
Z2lzdGVyU2V0IGFsbEZUTENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmZ0bENhbGxlZVNhdmVS
ZWdpc3RlcnMoKTsKICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYmFzZWxpbmVDYWxs
ZWVTYXZlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAg
UmVnaXN0ZXJBdE9mZnNldExpc3QqIHZtQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxs
ZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgdm1DYWxsZWVTYXZlc1Rv
U2tpcCA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwotICAgIGlmIChleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKSB7Ci0gICAgICAgIGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1l
LCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwg
R1BSSW5mbzo6cmVnVDEpOwotICAgIH0KIAogICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3Qo
KTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CiAgICAgICAgIGlmICgh
YWxsRlRMQ2FsbGVlU2F2ZXMuZ2V0KHJlZykpIHsKLSAgICAgICAgICAgIGlmIChleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKQotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2bUNhbGxl
ZVNhdmVzLT5maW5kKHJlZykpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgdW5zaWduZWQgdW53aW5kSW5kZXggPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKS0+aW5kZXhPZihyZWcpOwogICAgICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0KiBiYXNl
bGluZVJlZ2lzdGVyT2Zmc2V0ID0gYmFzZWxpbmVDYWxsZWVTYXZlcy0+ZmluZChyZWcpOwotICAg
ICAgICBSZWdpc3RlckF0T2Zmc2V0KiB2bUNhbGxlZVNhdmUgPSBudWxscHRyOyAKLSAgICAgICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgICAgICB2bUNhbGxlZVNhdmUg
PSB2bUNhbGxlZVNhdmVzLT5maW5kKHJlZyk7CiAKICAgICAgICAgaWYgKHJlZy5pc0dQUigpKSB7
CiAgICAgICAgICAgICBHUFJSZWcgcmVnVG9Mb2FkID0gYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA/
IEdQUkluZm86OnJlZ1QwIDogcmVnLmdwcigpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cmVnVG9Mb2FkICE9IEdQUkluZm86OnJlZ1QxKTsKIAogICAgICAgICAgICAgaWYgKHVud2luZElu
ZGV4ID09IFVJTlRfTUFYKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIEZUTCBjb21waWxhdGlv
biBkaWRuJ3QgcHJlc2VydmUgdGhpcyByZWdpc3Rlci4gVGhpcyBtZWFucyB0aGF0IGl0IGFsc28K
QEAgLTQ1Miw4ICs0NDAsNiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2ln
bmVkCiAKICAgICAgICAgICAgIGlmIChiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQogICAgICAgICAg
ICAgICAgIGppdC5zdG9yZTY0KHJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFj
cm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0
LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKHZtQ2FsbGVlU2F2ZSAmJiAhdm1DYWxsZWVT
YXZlc1RvU2tpcC5nZXQodm1DYWxsZWVTYXZlLT5yZWcoKSkpCi0gICAgICAgICAgICAgICAgaml0
LnN0b3JlNjQocmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
MSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgRlBSUmVnIGZwUmVnVG9Mb2FkID0gYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA/IEZQUkluZm86
OmZwUmVnVDAgOiByZWcuZnByKCk7CiAKQEAgLTQ2NCwxOSArNDUwLDkgQEAgc3RhdGljIHZvaWQg
Y29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAogCiAgICAgICAgICAgICBpZiAoYmFzZWxpbmVS
ZWdpc3Rlck9mZnNldCkKICAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoZnBSZWdUb0xv
YWQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJS
ZWdpc3RlciwgYmFzZWxpbmVSZWdpc3Rlck9mZnNldC0+b2Zmc2V0KCkpKTsKLSAgICAgICAgICAg
IGlmICh2bUNhbGxlZVNhdmUgJiYgIXZtQ2FsbGVlU2F2ZXNUb1NraXAuZ2V0KHZtQ2FsbGVlU2F2
ZS0+cmVnKCkpKQotICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShmcFJlZ1RvTG9hZCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zm
c2V0KCkpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFu
ZGxlcigpKSB7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIHZtQ2FsbGVlU2F2ZSA9IHZtQ2Fs
bGVlU2F2ZXMtPmZpbmQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOwotICAgICAgICBqaXQu
c3RvcmU2NChHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoR1BSSW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKLQotICAgICAgICB2
bUNhbGxlZVNhdmUgPSB2bUNhbGxlZVNhdmVzLT5maW5kKEdQUkluZm86Om5vdENlbGxNYXNrUmVn
aXN0ZXIpOwotICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVy
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5v
ZmZzZXQoKSkpOwotICAgIH0KLQogICAgIHNpemVfdCBiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNG
b3JDYWxsZWVTYXZlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMoKTsKIAogICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0Nv
bnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Z2VuZXJhdG9yL01ldGFkYXRhLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3
ICs0MiwyOCBAQCBjbGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJl
dHVybiBpZiBlbXB0eT8KIAotICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxk
cykKKyAgICAgICAgZGVmIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5h
bWVzKQorICAgICAgICAgICAgZmllbGROYW1lcy5tYXAgZG8gfGZpZWxkTmFtZXwKKyAgICAgICAg
ICAgICAgICAiI3twcmVmaXh9c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGROYW1lWzBd
LnVwY2FzZX0je2ZpZWxkTmFtZVsxLi5dfSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZXRh
ZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKKyAg
ICAgICAgZW5kCisKKyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGZp
ZWxkTmFtZXMpCiAgICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAg
ICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7
cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxu
I3twcmVmaXh9fTsiCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2Nv
bnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlLCBmaWVsZE5hbWVzKX1cbiN7cHJlZml4
fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4
fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307IgorICAgICAgICAgICAgICAgICAgICBmaWVs
ZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVzaChm
aWVsZE5hbWUpCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8j
e2ZpZWxkTmFtZX07IgogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpvaW4o
IlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAg
ICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVsZE5hbWVzID0gW10KKyAgICAgICAgcHJlZml4
ID0gIiAgICAgICAgIgorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKHByZWZpeCwgQGZp
ZWxkcywgZmllbGROYW1lcykKKyAgICAgICAgZmllbGRzID0gZmllbGRzICsgIlxuIiArIGdlbmVy
YXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQogCiAgICAgICAgIGluaXRz
ID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJzLmVt
cHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDYgKzM2NywyOCBAQCB2b2lk
IEFzc2VtYmx5SGVscGVyczo6bG9hZFByb3BlcnR5KEdQUlJlCiAgICAgICAgIHJlc3VsdCk7CiB9
CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVl
LCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBK
dW1wIGlzSW5saW5lID0gYnJhbmNoMzIoTGVzc1RoYW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKG9iamVjdCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgbmVnMzIob2Zmc2V0
KTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7CisgICAgSnVtcCByZWFk
eSA9IGp1bXAoKTsKKyAgICAKKyAgICBpc0lubGluZS5saW5rKHRoaXMpOworICAgIGFkZFB0cigK
KyAgICAgICAgVHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4o
c2l6ZW9mKEpTT2JqZWN0KSkgLQorICAgICAgICAgICAgKHN0YXRpY19jYXN0PGludDMyX3Q+KGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDIpICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSkpLAorICAgICAgICBvYmplY3QsIHNjcmF0Y2gpOworICAgIAorICAgIHJl
YWR5LmxpbmsodGhpcyk7CisgICAgCisgICAgc3RvcmVWYWx1ZSh2YWx1ZSwKKyAgICAgICAgQmFz
ZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjplbWl0TG9hZFN0cnVjdHVyZShWTSYgdm0sIFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3Rl
cklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAt
Njk4LDggKzcyMCwxMyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVz
CiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxX
aXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBpbmZvKTsKK30KKwordm9pZCBBc3NlbWJseUhl
bHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBD
YWxsTGlua0luZm8qIGluZm8pCit7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJ
bmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFz
ayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxM
b2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRy
VGFnPihjYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDggKzIzNCw5IEBAIHB1Ymxp
YzoKICNlbmRpZgogICAgIH0KICAgICAKLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBjbG9iYmVycyBv
ZmZzZXQuCisgICAgLy8gTm90ZSB0aGF0IHRoZXNlIGNsb2JiZXIgb2Zmc2V0LgogICAgIHZvaWQg
bG9hZFByb3BlcnR5KEdQUlJlZyBvYmplY3QsIEdQUlJlZyBvZmZzZXQsIEpTVmFsdWVSZWdzIHJl
c3VsdCk7CisgICAgdm9pZCBzdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcg
b2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBHUFJSZWcgc2NyYXRjaCk7CiAKICAgICB2b2lkIG1vdmVW
YWx1ZVJlZ3MoSlNWYWx1ZVJlZ3Mgc3JjUmVncywgSlNWYWx1ZVJlZ3MgZGVzdFJlZ3MpCiAgICAg
ewpAQCAtMzc5LDE1ICszODAsMjYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgdm9p
ZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1l
KiYgdG9wRW50cnlGcmFtZSwgR1BSUmVnIHNjcmF0Y2gpCisgICAgeworI2lmIE5VTUJFUl9PRl9D
QUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorICAgICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1l
LCBzY3JhdGNoKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXJJbXBsKHNjcmF0Y2gpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVu
dHJ5RnJhbWUpOworICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CisjZW5kaWYKKyAgICB9
CisKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lKQogICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVF
X1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICAgICAgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfTsK
ICAgICAgICAgR1BSUmVnIHRlbXAxID0gdXNlZFJlZ2lzdGVycy5nZXRGcmVlR1BSKDApOwotICAg
ICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxsZWVT
YXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh0ZW1wMSk7CisgICAgICAgIGNv
cHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHRvcEVudHJ5RnJhbWUs
IHRlbXAxKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOwogI2VuZGlmCiAgICAgfQogICAgIApA
QCAtMTcyMCw2ICsxNzMyLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRW
aXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9p
ZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJ
bmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2
b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgi
CisKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKKyNpbmNs
dWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSklUQWRkSUMq
IE1hdGhJQ0hvbGRlcjo6YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUpIHsgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRNdWxJQyogTWF0
aElDSG9sZGVyOjphZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkg
eyByZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVFN1YklDKiBNYXRoSUNI
b2xkZXI6OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJl
dHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUTmVnSUMqIE1hdGhJQ0hvbGRl
cjo6YWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4g
bV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KKwordm9pZCBNYXRoSUNIb2xkZXI6OmFkb3B0
TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKQoreworICAgIG1fYWRkSUNzID0gV1RGTW92ZShv
dGhlci5tX2FkZElDcyk7CisgICAgbV9tdWxJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsK
KyAgICBtX25lZ0lDcyA9IFdURk1vdmUob3RoZXIubV9uZWdJQ3MpOworICAgIG1fc3ViSUNzID0g
V1RGTW92ZShvdGhlci5tX3N1YklDcyk7Cit9CisKK0Jhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVK
SVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiB3aXRoQXJpdHlDaGVjaykKKyAgICA6IERpcmVjdEpJVENvZGUoV1RGTW92ZShjb2RlKSwgd2l0
aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICwgTWF0aElDSG9sZGVyKCkK
K3sgfQorCitCYXNlbGluZUpJVENvZGU6On5CYXNlbGluZUpJVENvZGUoKQoreworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVK
SVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGlu
ZUpJVENvZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jh
c2VsaW5lSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUg
IkpJVENvZGVNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJpbmFyeUFyaXRoUHJv
ZmlsZTsKK2NsYXNzIFVuYXJ5QXJpdGhQcm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm87CitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJs
ZTsKKworY2xhc3MgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElD
cyhNYXRoSUNIb2xkZXImIG90aGVyKTsKKyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5
QXJpdGhQcm9maWxlKik7CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJv
ZmlsZSopOworICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsK
KyAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworcHJpdmF0
ZToKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJ
Q3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3Vi
SUNzOworfTsKKworY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKK3B1YmxpYzoKKyAgICB1c2luZyBD
b25zdGFudCA9IHVuc2lnbmVkOworCisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7Cisg
ICAgICAgIEdsb2JhbE9iamVjdCwKKyAgICAgICAgQ2FsbExpbmtJbmZvLAorICAgICAgICBTdHJ1
Y3R1cmVTdHViSW5mbywKKyAgICAgICAgRnVuY3Rpb25EZWNsLAorICAgICAgICBGdW5jdGlvbkV4
cHIsCisgICAgfTsKKworICAgIHN0cnVjdCBWYWx1ZSB7CisgICAgICAgIFR5cGUgdHlwZTsKKyAg
ICAgICAgUGFja2VkUHRyPHZvaWQ+IHBheWxvYWQ7CisgICAgfTsKKworICAgIEpJVENvbnN0YW50
UG9vbCgpID0gZGVmYXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sJiYp
ID0gZGVmYXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBv
b2wmJikgPSBkZWZhdWx0OworCisgICAgQ29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9pZCogcGF5
bG9hZCA9IG51bGxwdHIpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0
YW50cy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBh
eWxvYWQgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1ZSBhdChz
aXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0ZToKKyAg
ICBWZWN0b3I8VmFsdWU+IG1fY29uc3RhbnRzOworfTsKKworCitjbGFzcyBCYXNlbGluZUpJVENv
ZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6
CisgICAgQmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4sIENvZGVQdHI8SlNF
bnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spOworICAgIH5CYXNlbGluZUpJVENvZGUoKSBvdmVy
cmlkZTsKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlk
ZSB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CisKKyAgICBCYWc8VW5saW5r
ZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBt
X2V2YWxDYWxsTGlua0luZm9zOworICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBt
X3VubGlua2VkU3R1YkluZm9zOworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9z
d2l0Y2hKdW1wVGFibGVzOworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzOworICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworICAgIEpJ
VENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0Nv
ZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CisgICAgYm9vbCBtX2lzU2hhcmVhYmxl
IHsgdHJ1ZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCShyZXZpc2lvbiAyODMwMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDcgKzUwLDcgQEAgc2l6ZV90IEJhc2VsaW5lSklUUGxhbjo6Y29kZVNpemUo
KSBjb25zdAogCiBDb21waWxhdGlvblJlc3VsdCBCYXNlbGluZUpJVFBsYW46OmZpbmFsaXplKCkK
IHsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRo
cmVhZCgpOworICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25N
YWluVGhyZWFkKG1fY29kZUJsb2NrKTsKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2Ug
Q29tcGlsYXRpb25GYWlsZWQ6CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxv
Y2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBpbGF0aW9uIGZhaWxlZCIpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDI4MzAx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDYgQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0No
aWNrZW5Qcm9sbwogICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CiB9CiAKLXZvaWQg
Q0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFj
a2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQotewotICAgIHN0b3JlUHRyKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUp
KSk7Ci0gICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVD
VF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKLSAgICBzdG9y
ZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29k
ZUJsb2NrKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxs
U2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOwotfQotCiB2b2lkIENDYWxs
SGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYgdm0sIEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAg
IFNoYWRvd0NoaWNrZW4qIHNoYWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCk7CkBAIC03
Miw2ICs2MiwyOCBAQCB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhCiAg
ICAgc3RvcmVQdHIoc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDFOb25BcmdHUFIpKTsKIH0KIAor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK3ZvaWQgQ0NhbGxIZWxwZXJzOjps
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1
ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENh
bGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFk
b3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIo
U2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tl
dCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOworICAg
IHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7CisgICAgc3RvcmVQdHIoc2Nv
cGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6
UGFja2V0LCBzY29wZSkpKTsKKyAgICBzdG9yZVB0cihjb2RlQmxvY2ssIEFkZHJlc3Moc2hhZG93
UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2sp
KSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRy
ZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwg
Y2FsbFNpdGVJbmRleCkpKTsKK30KKwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNr
ZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBH
UFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1Bh
Y2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOworfQorCit2
b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRv
d1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVC
bG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNr
ZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2Nr
LCBjYWxsU2l0ZUluZGV4KTsKK30KKwogdm9pZCBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3Zl
cihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRlcm5hbFB0clRhZz4gd2hlcmUsIFNjb3BlZExh
bWJkYTx2b2lkKENDYWxsSGVscGVycyYpPiBlbWl0Q29kZSwgY29uc3QgY2hhciogZGVzY3JpcHRp
b24pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtODQwLDcgKzg0MCwx
NCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2Ugb3BlcmF0aW9ucyBjbG9iYmVyIGFsbCB2b2xhdGls
ZSByZWdpc3RlcnMuIFRoZXkgYXNzdW1lIHRoYXQgdGhlcmUgaXMgcm9vbSBvbiB0aGUgdG9wIG9m
CiAgICAgLy8gc3RhY2sgdG8gbWFyc2hhbGwgY2FsbCBhcmd1bWVudHMuCiAgICAgdm9pZCBsb2dT
aGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNj
cmF0Y2gxLCBHUFJSZWcgc2NvcGUpOwotICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNr
ZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29w
ZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJl
ZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleCk7CitwdWJsaWM6CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJS
ZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBUcnVz
dGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKyAgICB2
b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFs
dWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxvY2ssIENhbGxTaXRl
SW5kZXggY2FsbFNpdGVJbmRleCk7CisKICAgICAvLyBMZWF2ZXMgYmVoaW5kIGEgcG9pbnRlciB0
byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0byBpbiBzaGFkb3dQYWNrZXQuCiAgICAgdm9p
ZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BS
UmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
ZmxlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogCiB2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CisgICAgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJz
KGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwordm9pZCBDYWxsRnJhbWVT
aHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMpCit7CiAgICAgUmVnaXN0ZXJTZXQgY2FsbGVl
U2F2ZVJlZ2lzdGVycyB7IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB9Owot
ICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMgPSBj
b2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5zaXplKCk7ICsraSkgewogICAgICAgICBSZWdp
c3RlckF0T2Zmc2V0IGVudHJ5IHsgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChpKSB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEu
aAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMSArNDMsMTMgQEAgcHVibGlj
OgogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOwogICAgIHVuc2lnbmVkIG51bUxvY2Fs
cyB7IFVJTlRfTUFYIH07CiAgICAgdW5zaWduZWQgbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07
CisgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycyB7IFVJTlRfTUFYIH07IC8vIE9uIG91ciBtYWNo
aW5lIGZyYW1lLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJNYXA8VmFsdWVSZWNv
dmVyeT4gcmVnaXN0ZXJzOwogICAgIEdQUlJlZyBudW1iZXJUYWdSZWdpc3RlciB7IEludmFsaWRH
UFJSZWcgfTsKIAogICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayop
OworICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0Kik7CiAjZW5kaWYKICAgICBWYWx1ZVJlY292ZXJ5IGNhbGxlZTsKIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
Zmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEzICszOCwxMyBAQCBDYWxsRnJhbWVTaHVm
Zmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhCiAgICAgOiBtX2ppdChqaXQpCiAgICAgLCBtX29s
ZEZyYW1lKGRhdGEubnVtTG9jYWxzICsgQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJz
LCBudWxscHRyKQogICAgICwgbV9uZXdGcmFtZShkYXRhLmFyZ3Muc2l6ZSgpICsgQ2FsbEZyYW1l
OjpoZWFkZXJTaXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCi0gICAgLCBtX2FsaWduZWRPbGRGcmFt
ZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMKLSAgICAgICAgKyByb3VuZEFy
Z3VtZW50Q291bnRUb0FsaWduRnJhbWUoaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkp
KQorICAgICwgbV9hbGlnbmVkT2xkRnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVn
aXN0ZXJzICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEubnVtUGFyYW1ldGVy
cykpCiAgICAgLCBtX2FsaWduZWROZXdGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnMKICAgICAgICAgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5h
cmdzLnNpemUoKSkpCiAgICAgLCBtX2ZyYW1lRGVsdGEobV9hbGlnbmVkTmV3RnJhbWVTaXplIC0g
bV9hbGlnbmVkT2xkRnJhbWVTaXplKQogICAgICwgbV9sb2NrZWRSZWdpc3RlcnMoUmVnaXN0ZXJT
ZXQ6OmFsbFJlZ2lzdGVycygpKQogICAgICwgbV9udW1QYXNzZWRBcmdzKGRhdGEubnVtUGFzc2Vk
QXJncykKKyAgICAsIG1fbnVtUGFyYW1ldGVycyhkYXRhLm51bVBhcmFtZXRlcnMpCiB7CiAgICAg
Ly8gV2UgYXJlIGFsbG93ZWQgYWxsIHRoZSB1c3VhbCByZWdpc3RlcnMuLi4KICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOyApCkBAIC00MjEsNyAr
NDIxLDcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclRhaWxDYQogICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIG1fbmV3RnJhbWVC
YXNlKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhcmd1bWVudENvdW50T0sgPQogICAgICAg
ICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBtX25ld0ZyYW1l
QmFzZSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9qaXQuY29k
ZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihtX251bVBhcmFtZXRlcnMpKTsKICAgICBtX2ppdC5hZGQzMihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkgLSAxICsgQ2Fs
bEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9q
aXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigtc3RhY2tBbGlnbm1lbnRSZWdp
c3RlcnMoKSksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5tdWwzMihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBtX25ld0ZyYW1lQmFzZSwgbV9uZXdG
cmFtZUJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
Zmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDcgQEAg
cHVibGljOgogICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBkYXRhOwogICAgICAgICBkYXRh
Lm51bUxvY2FscyA9IG51bUxvY2FscygpOwogICAgICAgICBkYXRhLm51bVBhc3NlZEFyZ3MgPSBt
X251bVBhc3NlZEFyZ3M7CisgICAgICAgIGRhdGEubnVtUGFyYW1ldGVycyA9IG1fbnVtUGFyYW1l
dGVyczsKICAgICAgICAgZGF0YS5jYWxsZWUgPSBnZXROZXcoVmlydHVhbFJlZ2lzdGVyIHsgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlIH0pLT5yZWNvdmVyeSgpOwogICAgICAgICBkYXRhLmFyZ3MucmVz
aXplKGFyZ0NvdW50KCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50
KCk7ICsraSkKQEAgLTc5OCw2ICs3OTksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcGVyZm9ybVNh
ZmVXcml0ZXMoKTsKICAgICAKICAgICB1bnNpZ25lZCBtX251bVBhc3NlZEFyZ3MgeyBVSU5UX01B
WCB9OworICAgIHVuc2lnbmVkIG1fbnVtUGFyYW1ldGVycyB7IFVJTlRfTUFYIH07CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlz
aW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhSZXR1cm5BCiB9CiAKIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5
dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICA6IEpTSW50ZXJmYWNl
SklUKCZ2bSwgY29kZUJsb2NrKQorICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBudWxscHRyKQog
ICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnByZXRlcikKICAgICAsIG1fbGFiZWxzKGNvZGVC
bG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIDogMCkKICAgICAsIG1fcGNU
b0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtKQpAQCAtNzcsNiArNzcsOSBAQCBKSVQ6OkpJVChWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmco
ZmFsc2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCkKIHsKKyAgICBtX2dsb2JhbE9iamVjdENvbnN0YW50ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0KTsKKyAgICBtX3Byb2Zp
bGVkQ29kZUJsb2NrID0gY29kZUJsb2NrOworICAgIG1fdW5saW5rZWRDb2RlQmxvY2sgPSBjb2Rl
QmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiB9CiAKIEpJVDo6fkpJVCgpCkBAIC05MCw4ICs5
Myw4IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEp1bXBMaXN0IHNraXBPcHRpbWl6ZTsKLSAgICAKLSAgICBza2lwT3B0aW1p
emUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1
dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJs
b2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgc2tpcE9wdGltaXpl
LmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRp
b25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIEFTU0VSVCghbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKTsKIAogICAgIGNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJh
bWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZy
YW1lKTsKQEAgLTExMywxNSArMTE2LDIwIEBAIHZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0
Y2hwb2ludFNldCoKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQp
KSk7CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCkK
K3ZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQp
CiB7CisgICAgYXV0byBvayA9IGJyYW5jaFRlc3RQdHIoWmVybywgcG9pbnRlclRvU2V0KTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHBvaW50ZXJUb1NldCwgV2F0
Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQp
KSk7CisgICAgb2subGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25seUNo
ZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQordm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25seUNo
ZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhclJlYWRPbmx5
V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFyUmVhZE9ubHlXYXRjaHBvaW50KSks
IHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBZGRyZXNz
KHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0z
MihJc0ludmFsaWRhdGVkKSkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9p
bnRlck9mZnNldCgpCkBAIC0xMjksMTIgKzEzNywxOCBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQ
b2ludGVyT2Zmc2V0KCkKICAgICBpZiAoIUFTU0VSVF9FTkFCTEVEKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Qw
KTsKICAgICBKdW1wIG9rID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwogICAgIGJyZWFrcG9pbnQoKTsKICAgICBvay5saW5rKHRoaXMpOwogfQogCit2b2lk
IEpJVDo6cmVzZXRTUCgpCit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOworfQorCiAjZGVmaW5lIE5FWFRfT1BDT0RFKG5hbWUpIFwKICAgICBtX2J5
dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSArIGN1
cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsgXAogICAgIGJyZWFrOwpAQCAtMTgxLDYxICsxOTUs
NDQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1YwogICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUlu
UHJvbG9ndWUoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2Vk
Q29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSk7CisgICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZXN1bHQpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZXN1bHQsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFy
ZURhdGEoKSksIHJlc3VsdCk7CisgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gYnJhbmNoVGVzdFB0
cihaZXJvLCByZXN1bHQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJh
cmVEYXRhVGFnKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25SYXJlRGF0
YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHJlc3Vs
dCk7CisgICAgaGFzRXhlY3V0YWJsZS5saW5rKHRoaXMpOworICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkpCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQs
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSksIHJl
c3VsdCk7CisgICAgZWxzZQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlv
bkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpKSwgcmVzdWx0KTsKKworICAg
IGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6Om9mZnNl
dE9mQ29kZUJsb2NrKCkpLCByZXN1bHQpOworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihy
ZXN1bHQsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisKKyNpZiBBU1NFUlRfRU5BQkxFRAor
ICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCk7CisgICAgfSk7CisjZW5kaWYKK30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogewogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0
YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9jaywgIlxuIik7CisgICAgICAgIGRhdGFMb2co
IkNvbXBpbGluZyAiLCAqbV9wcm9maWxlZENvZGVCbG9jaywgIlxuIik7CiAgICAgCiAgICAgaml0
QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICBqaXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgpOwog
ICAgIAotICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KTsKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV9jb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLnNpemUoKTsKKyAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKTsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV91
bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogCiAgICAgbV9jYWxsTGlu
a0luZm9JbmRleCA9IDA7CiAKLSAgICBWTSYgdm0gPSBtX2NvZGVCbG9jay0+dm0oKTsKICAgICBC
eXRlY29kZUluZGV4IHN0YXJ0Qnl0ZWNvZGVJbmRleCgwKTsKLSAgICBpZiAobV9sb29wT1NSRW50
cnlCeXRlY29kZUluZGV4ICYmIChtX2NvZGVCbG9jay0+aW5oZXJpdHM8UHJvZ3JhbUNvZGVCbG9j
az4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0czxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2
bSkpKSB7Ci0gICAgICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgb3B0aW1pemF0aW9uIGJlY2F1
c2Ugd2UgZXhlY3V0ZSBQcm9ncmFtQ29kZUJsb2NrJ3MgZXhhY3RseSBvbmNlLgotICAgICAgICAv
LyBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBiZSBpbnZhbGlkIG90aGVyd2lzZS4gV2hlbiB0aGUg
TExJbnQgZGV0ZXJtaW5lcyBpdCB3YW50cyB0bwotICAgICAgICAvLyBkbyBPU1IgZW50cnkgaW50
byB0aGUgYmFzZWxpbmUgSklUIGluIGEgbG9vcCwgaXQgd2lsbCBwYXNzIGluIHRoZSBieXRlY29k
ZSBvZmZzZXQgaXQKLSAgICAgICAgLy8gd2FzIGV4ZWN1dGluZyBhdCB3aGVuIGl0IGtpY2tlZCBv
ZmYgb3VyIGNvbXBpbGF0aW9uLiBXZSBvbmx5IG5lZWQgdG8gY29tcGlsZSBjb2RlIGZvcgotICAg
ICAgICAvLyBhbnl0aGluZyByZWFjaGFibGUgZnJvbSB0aGF0IGJ5dGVjb2RlIG9mZnNldC4KLQot
ICAgICAgICAvLyBXZSBvbmx5IGJvdGhlciBidWlsZGluZyB0aGUgYnl0ZWNvZGUgZ3JhcGggaWYg
aXQgY291bGQgc2F2ZSB0aW1lIGFuZCBleGVjdXRhYmxlCi0gICAgICAgIC8vIG1lbW9yeS4gV2Ug
cGljayBhbiBhcmJpdHJhcnkgb2Zmc2V0IHdoZXJlIHdlIGRlZW0gdGhpcyBpcyBwcm9maXRhYmxl
LgotICAgICAgICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4Lm9mZnNldCgpID49IDIw
MCkgewotICAgICAgICAgICAgLy8gQXMgYSBzaW1wbGlmaWNhdGlvbiwgd2UgZG9uJ3QgZmluZCBh
bGwgYnl0ZWNvZGUgcmFuZ2VzIHRoYXQgYXJlIHVucmVhY2hhYmxlLgotICAgICAgICAgICAgLy8g
SW5zdGVhZCwgd2UganVzdCBmaW5kIHRoZSBtaW5pbXVtIGJ5dGVjb2RlIG9mZnNldCB0aGF0IGlz
IHJlYWNoYWJsZSwgYW5kCi0gICAgICAgICAgICAvLyBjb21waWxlIGNvZGUgZnJvbSB0aGF0IGJ5
dGVjb2RlIG9mZnNldCBvbndhcmRzLgotCi0gICAgICAgICAgICBCeXRlY29kZUdyYXBoIGdyYXBo
KG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkpOwotICAgICAgICAgICAg
Qnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNv
ZGVPZmZzZXQobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4Lm9mZnNldCgpKTsKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGJsb2NrKTsKLQotICAgICAgICAgICAgR3JhcGhOb2RlV29ya2xp
c3Q8Qnl0ZWNvZGVCYXNpY0Jsb2NrKj4gd29ya2xpc3Q7Ci0gICAgICAgICAgICBzdGFydEJ5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGJs
b2NrKTsKLQotICAgICAgICAgICAgd2hpbGUgKEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSB3
b3JrbGlzdC5wb3AoKSkgewotICAgICAgICAgICAgICAgIHN0YXJ0Qnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgoc3RkOjptaW4oc3RhcnRCeXRlY29kZUluZGV4Lm9mZnNldCgpLCBibG9jay0+
bGVhZGVyT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3Nv
ckluZGV4IDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkKLSAgICAgICAgICAgICAgICAgICAgd29ya2xp
c3QucHVzaCgmZ3JhcGhbc3VjY2Vzc29ySW5kZXhdKTsKLQotICAgICAgICAgICAgICAgIC8vIEFs
c28gYWRkIGNhdGNoIGJsb2NrcyBmb3IgYnl0ZWNvZGVzIHRoYXQgdGhyb3cuCi0gICAgICAgICAg
ICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5s
ZWFkZXJPZmZzZXQoKTsgYnl0ZWNvZGVPZmZzZXQgPCBibG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBi
bG9jay0+dG90YWxMZW5ndGgoKTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5z
dHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGF1dG8qIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+aGFuZGxlckZvckJ5
dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goZ3JhcGguZmluZEJhc2ljQmxvY2tXaXRoTGVh
ZGVyT2Zmc2V0KGhhbmRsZXItPnRhcmdldCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBi
eXRlY29kZU9mZnNldCArPSBpbnN0cnVjdGlvbi0+c2l6ZSgpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQog
CiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UgPSAwOwogICAgIGZvciAobV9ieXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwg
aW5zdHJ1Y3Rpb25Db3VudDsgKSB7CkBAIC0yNzgsMTIgKzI3NSwxNSBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25z
Ojp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFBy
b2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBk
YXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29k
ZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAob3Bjb2RlSUQgIT0gb3Bf
Y2F0Y2gpCisgICAgICAgICAgICBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKKwogICAgICAg
ICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgICAgIERFRklORV9TTE9XX09QKGxlc3MpCiAgICAg
ICAgIERFRklORV9TTE9XX09QKGxlc3NlcSkKQEAgLTUyNyw3ICs1MjcsNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RU
byA9IG1fYnl0ZWNvZGVJbmRleDsKIAotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJ
bmRleCkucHRyKCk7CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24gPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5k
ZXgpLnB0cigpOwogICAgICAgICAKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQog
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJCYXNlbGluZSBKSVQgZW1pdHRpbmcgc2xvdyBjb2RlIGZv
ciAiLCBtX2J5dGVjb2RlSW5kZXgsICIgYXQgb2Zmc2V0ICIsIChsb25nKWRlYnVnT2Zmc2V0KCkp
OwpAQCAtNTQ1LDggKzU0NSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRp
b24oKSkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2Nv
ZGVCbG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4
KSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZy
YW1lKj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIs
IGJ5dGVjb2RlT2Zmc2V0LCAiXSBTTE9XICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIg
IiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0KQEAgLTYwMyw3ICs2MDMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X3ZhbCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV9pZCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX3N1YikKLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9mcm9t
X3Njb3BlKQogI2VuZGlmCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9wdXRfdG9fc2Nv
cGUpCkBAIC02NzQsNTUgKzY3NCw1NSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMoKQogI2VuZGlmCiB9CiAKK3ZvaWQgSklUOjplbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENv
bnN0YW50UG9vbFJlZ2lzdGVycygpCit7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21ldGFkYXRhR1BSKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdU
MCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNl
dE9mSklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7Cit9CisKK3ZvaWQgSklUOjpl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCkKK3sKKyAgICBCYXNlOjplbWl0UmVzdG9yZUNhbGxlZVNh
dmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdp
c3RlcnMoKSk7Cit9CisKIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5n
KEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBERkc6OkNhcGFiaWxpdHlMZXZl
bCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKKyAgICBERkc6OkNhcGFi
aWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgp
OwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIERGRzo6Q2Fubm90Q29tcGlsZToKICAg
ICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVk
T3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNl
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZToKICAgICBjYXNlIERG
Rzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IHRydWU7
Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwogICAgICAgICBtX3No
b3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0Ogog
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgCi0gICAgc3dpdGNoIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewotICAgIGNh
c2UgR2xvYmFsQ29kZToKLSAgICBjYXNlIE1vZHVsZUNvZGU6Ci0gICAgY2FzZSBFdmFsQ29kZToK
LSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAgICAgICAvLyBXZSBjb3Vs
ZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5p
bmxpbmVhYmxlIGNhbGwuCi0gICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRp
b24uCi0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5J
bmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbihtX2NvZGVCbG9jayk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KIAotICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxp
bmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0
cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJl
ck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+
ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNp
bXBsZUp1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGVzKCkpOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0
YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1
bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzKCkpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dp
dGNoSnVtcFRhYmxlcygpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
dHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxv
Y2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N3
aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fdW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpOworICAgICAgICBp
ZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVj
dG9yPFN0cmluZ0p1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIg
JiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpKSkKLSAgICAgICAg
bV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9jb2RlQmxvY2sp
OworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQ
cm9maWxlcigpKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IGJ1aWxkIGEgZGlzYXNzZW1ibGVyIG9m
ZiBvZiBVbmxpbmtlZENvZGVCbG9jay4KKyAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5p
cXVlPEpJVERpc2Fzc2VtYmxlcj4obV9wcm9maWxlZENvZGVCbG9jayk7CisgICAgfQogICAgIGlm
IChVTkxJS0VMWShtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBidWlsZCBwcm9maWxlciBkaXNhc3NlbWJsZXIgb2ZmIFVubGlua2VkQ29kZUJsb2NrLgog
ICAgICAgICBtX2NvbXBpbGF0aW9uID0gYWRvcHRSZWYoCiAgICAgICAgICAgICBuZXcgUHJvZmls
ZXI6OkNvbXBpbGF0aW9uKAotICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fY29kZUJsb2NrKSwKKyAgICAgICAgICAgICAgICBt
X3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX3Byb2ZpbGVk
Q29kZUJsb2NrKSwKICAgICAgICAgICAgICAgICBQcm9maWxlcjo6QmFzZWxpbmUpKTsKLSAgICAg
ICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNv
ZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOworICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9m
aWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX3Byb2ZpbGVkQ29k
ZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkpKTsKQEAgLTc0Miwx
MSArNzQyLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAg
ICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsK
KyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSgpOwogCiAgICAgTGFi
ZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAotICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGludCBm
cmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXplID0gLWZyYW1l
VG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVUb3BPZmZzZXQpLCBjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDEpOwogICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CkBAIC03
NTcsMTYgKzc1OCwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemlu
CiAgICAgbW92ZShyZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzKCk7CisgICAgZW1p
dFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0
ZXJzKCk7CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3Rl
cnMoKTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
IHsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUpIHsKICAgICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hv
dWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50
ID0gMDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50
KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFtX3VubGlua2VkQ29k
ZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpID4gMSkpIHsKKyAgICAgICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDIpOworICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkg
KyBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+OjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlZ1QyKTsK
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV91
bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CiAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdhbnQgdG8gcHV0
IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCiAgICAgICAgICAgICAgICAgLy8ga2VlcCB0
aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gcmVjb3JkIHRo
ZSBkdW1teSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKSAmJiAhYXJndW1lbnQpCisgICAgICAgICAgICAgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxsRnJhbWU6OmFyZ3Vt
ZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC03NzcsMTIgKzc4MiwxMiBAQCB2
b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgICAgICAgICAg
bG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsK
ICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRh
Z0dQUigpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50KSwgcmVzdWx0UmVn
cyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdzLCBBZGRyZXNzKHJlZ1Qy
LCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRP
ZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICAK
LSAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2RlQmxvY2stPmppdFR5cGUo
KSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXplTWFya2VyKSkKICAgICAg
ICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92ZSgqc2l6ZU1hcmtlciks
ICp0aGlzKTsKQEAgLTc5OSwyNCArODA0LDI3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dp
dGhvdXRGaW5hbGl6aW4KICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwog
ICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNhbGxPcGVyYXRpb25XaXRoQ2Fs
bEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJv
ciwgbV9jb2RlQmxvY2spOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZy
YW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwg
cmVnVDApOwogCiAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGlzIDEsIHdlIG5l
dmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCi0gICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBt
X2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5j
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKKyAgICBi
b29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSAhPSAxOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1
bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKICAgICAgICAgbV9hcml0eUNoZWNr
ID0gbGFiZWwoKTsKLSAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgJm1fY29kZUJsb2Nr
LT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7CisKICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUlu
UHJvbG9ndWUocmVnVDApOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkpKTsKIAog
ICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyksIHJlZ1QxKTsKLSAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKS5saW5rVG8oYmVn
aW5MYWJlbCwgdGhpcyk7CisgICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKS5saW5rVG8o
YmVnaW5MYWJlbCwgdGhpcyk7CiAKICAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleCgwKTsKIAogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAg
ICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX2NvZGVC
bG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9w
ZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1l
Um9sbGJhY2tPbkV4Y2VwdGlvbihtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkg
PyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ss
IGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJyYW5jaFRlc3QzMiha
ZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwpAQCAtODM5LDcg
Kzg0Nyw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAg
ICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKICAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVp
bGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKLSAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVu
aXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CisgICAgbV9saW5rQnVm
ZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBt
X3VubGlua2VkQ29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZm
b3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04NTgsOCArODY2LDggQEAgdm9pZCBKSVQ6Omxp
bmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAgICAgIGNhc2UgU3dpdGNo
UmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXI6
IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5z
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAg
ICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRP
ZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB1bmxpbmtlZFRh
YmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzW2pdOwpAQCAtODcxLDgg
Kzg3OSw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU3dp
dGNoUmVjb3JkOjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8gY3Rp
RGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZv
ciAoYXV0byYgbG9jYXRpb24gOiB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUudmFsdWVzKCkp
IHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsb2NhdGlvbi5tX2JyYW5jaE9m
ZnNldDsKQEAgLTkwNiwzMiArOTE0LDQzIEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIHJlY29yZC5jYWxsZWUpOwogICAgIH0KIAot
ICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFs
aXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIpOwotICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1fcHV0QnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6
ZUlubGluZUNhY2hlcyhtX3B1dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5s
aW5lQ2FjaGVzKG1fZGVsQnlJZHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2RlbEJ5VmFscywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVz
KG1faW5CeUlkcywgcGF0Y2hCdWZmZXIpOwotICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5C
eVZhbHMsIHBhdGNoQnVmZmVyKTsKLSAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNl
T2ZzLCBwYXRjaEJ1ZmZlcik7Ci0gICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wcml2YXRlQnJh
bmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOworICAgIGF1dG8gZmluYWxpemVJQ3MgPSBbJl0gKGF1
dG8mIGdlbmVyYXRvcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5lcmF0b3JzKSB7
CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsKKyAgICAgICAg
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1fZG9uZSk7CisgICAgICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zbG93UGF0aEJlZ2luKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX2dldEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkc1dpdGhUaGlz
KTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5
VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9k
ZWxCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeUlkcyk7CisgICAgZmluYWxpemVJQ3Mo
bV9pbkJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9mcyk7CisgICAgZmluYWxp
emVJQ3MobV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7CiAKICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0
aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgeworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxp
bmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRp
b24pOworI2Vsc2UKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5m
by5jYWxsTGlua0luZm87CiAgICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKICAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25J
bmZvLnNsb3dQYXRoU3RhcnQpLAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CisjZW5kaWYK
KwogICAgIH0KIAotICAgIHsKLSAgICAgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1
aWxkZXI7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29k
ZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgewotICAgICAgICAg
ICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQotICAgICAgICAgICAgICAg
IGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwg
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9m
ZnNldF0pKTsKLSAgICAgICAgfQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChq
aXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpKTsKKyAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRD
b2RlTWFwQnVpbGRlcjsKKyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0
ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKKyAgICAg
ICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQorICAgICAgICAgICAgaml0
Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0
XSkpOwogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHko
KSkpIHsKQEAgLTk0MCwyNiArOTU5LDQyIEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICB9CiAKICAg
ICBpZiAoVU5MSUtFTFkobV9jb21waWxhdGlvbikpIHsKKyAgICAgICAgLy8gRklYTUU6IHNob3Vs
ZCB3ZSBtYWtlIHRoZSBieXRlY29kZSBwcm9maWxlciBrbm93IGFib3V0IFVubGlua2VkQ29kZUJs
b2NrPwogICAgICAgICBpZiAoT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVy
KCkpCiAgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBp
bGF0aW9uLmdldCgpLCBwYXRjaEJ1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9jb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAg
ICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2Zp
bGVkQ29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2Rl
T3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9D
b2RlT3JpZ2luTWFwQnVpbGRlciksIHBhdGNoQnVmZmVyKTsKICAgICAKKyAgICAvLyBGSVhNRTog
TWFrZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBV
bmxpbmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJ
TkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAg
ICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRU
eXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAg
ICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5
cGUobV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwog
ICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlD
aGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNr
KTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3
aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBh
ZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisK
KyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxz
KTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENh
bGxMaW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1v
dmUobV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJs
ZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7Cisg
ICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgp
OworICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2Rl
LT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgbV9qaXRDb2RlLT5tX2lzU2hhcmVhYmxlID0gbV9pc1NoYXJlYWJsZTsKKyNl
bHNlCisgICAgbV9qaXRDb2RlLT5tX2lzU2hhcmVhYmxlID0gZmFsc2U7CisjZW5kaWYKIAogICAg
IGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0
ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1
dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1l
bW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5l
cmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2VkQ29kZUJsb2NrLCBy
ZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5l
eGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQogCi1Db21waWxhdGlv
blJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJ
VDo6ZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTk2OCwyNSArMTAwMywx
NCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyCiAKICAgICBtX2xp
bmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCi0gICAgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAg
ICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01v
ZGU6OkxhdGVTaHJpbmspOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9j
b2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7Ci0gICAgICAgIEhh
bmRsZXJJbmZvJiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0g
ICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgotICAgICAgICBoYW5k
bGVyLm5hdGl2ZUNvZGUgPSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQoQnl0ZWNvZGVJ
bmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7
Ci0gICAgfQotCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJs
b2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsK
KyAgICAgICAgbV9qaXRDb2RlLT5tX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtX3BjVG9D
b2RlT3JpZ2luTWFwKTsKIAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdv
cmRGb3JCYXNlbGluZUpJVC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0
Q29kZS0+c2l6ZSgpKSAvCi0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2st
Pmluc3RydWN0aW9uc1NpemUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2st
PnNldEpJVENvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+
c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkp
OwogCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTAy
MiwxMSBAQCBzaXplX3QgSklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1
ZmZlci0+c2l6ZSgpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxl
KEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJp
dmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVm
Zm9ydCkKIHsKICAgICBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAg
ICBjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZp
bmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNv
ZGVCbG9jayk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJz
KCkKQEAgLTEwNDIsMTggKzEwNjYsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0
aW9uQmVmb3JlQwogICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0Vu
dHJpZXMoKm1fdm0sICJQcmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11
bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykK
K3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBj
b2RlQmxvY2spCiB7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2st
Pm51bUNhbGxlZUxvY2FscygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGln
bm1lbnRSZWdpc3RlcnMoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2Fs
bGVlTG9jYWxzKCkpKSk7CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JG
cmFtZVBvaW50ZXJPZmZzZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1Bv
aW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1l
UmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJh
bWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisK
K2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJs
b2NrKQogewogICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVy
Q291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1Bv
aW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNr
UG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBI
YXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAg
SGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklU
X09GRlNFVChhY3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBl
eHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4
cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1
YWwpKTsKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2Vt
Ymxlci5oIgpAQCAtNDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1
ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5o
IgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgi
CiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4K
QEAgLTE0OSwxNCArMTUxLDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1
Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBz
bG93UGF0aFN0YXJ0OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9u
OworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxp
bmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxs
TGlua0luZm9Db25zdGFudDsKKyNlbHNlCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBz
bG93UGF0aFN0YXJ0OwogICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyNlbmRp
ZgogICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5B
ZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9u
KTsKIAotICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVy
ZmFjZUpJVCB7CisgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJ
bnRlcmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAg
ICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRU
aHVua3M7CkBAIC0xNzEsNiArMTc4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdp
bGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBm
aXQgYSBwYXRjaGVkIG9mZnNldC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQ
dXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRl
cmZhY2VKSVQ7CisKICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBu
dWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNv
ZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTE3OCwyOCArMTg3LDMzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZt
KCk7IH0KIAogICAgICAgICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklU
Q29tcGlsYXRpb25FZmZvcnQpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9u
TWFpblRocmVhZCgpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRo
cmVhZChDb2RlQmxvY2sqKTsKICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAg
ICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAg
ICAgCiAgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVD
b21waWxlKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5
dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAg
IH0KIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlu
a2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291
bnRGb3IoQ29kZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKENvZGVCbG9jayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21waWxlVGltZSgpOwogCisg
ICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIgPSBMTEludDo6UmVn
aXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSOworICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzX2NvbnN0YW50c0dQUiA9IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSOworCiAgICAgcHJpdmF0
ZToKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKCk7CiAgICAgICAgIHZvaWQgbGluaygpOwotICAgICAgICBDb21waWxhdGlvblJlc3Vs
dCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgICAgIENvbXBpbGF0
aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKENvZGVCbG9jayosIEpJVENvbXBpbGF0aW9uRWZmb3J0
KTsKIAogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFu
IGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCkBAIC0yMjMsNiArMjM3LDMyIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRl
Y29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRl
Y29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVj
b2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZThUb01l
dGFkYXRhKFZhbHVlVHlwZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmUzMlRv
TWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJS
ZWcpOworCisgICAgcHVibGljOgorICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25lZCBj
b25zdGFudEluZGV4LCBHUFJSZWcpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgbG9hZEds
b2JhbE9iamVjdChHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudChW
aXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisKKyAgICAgICAgdm9pZCBlbWl0UHV0Q29kZUJsb2Nr
VG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1QwKTsKKwogICAgICAgICB2b2lk
IGV4Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRvSGFuZGxlcikKICAgICAgICAgewogICAgICAgICAg
ICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpAQCAtMjU0LDYgKzI5
NCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXgpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgorICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAorICAgICAgICAgICAg
T3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29u
c3RydWN0X3ZhcmFyZ3MKKyAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2Nh
bGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzCisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKKworICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KKyAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKKyAgICAgICAgICAg
IE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2Nv
bnN0cnVjdF92YXJhcmdzCisgICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CisjZWxzZQogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAg
ICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9
IG9wX2NvbnN0cnVjdF92YXJhcmdzCkBAIC0yNjUsOSArMzE4LDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bj
b2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzCiAgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyNlbmRpZgogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgotICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5r
SW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxl
VGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7
CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yODcsMTQgKzM0MSwxMyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxS
ZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsK
ICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEdQUlJl
ZyBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHBy
b2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAg
ICAvLyBzY3JhdGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1l
dGFkYXRhJiwgR1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZv
aWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShjb25zdCBCeXRlY29kZSYsIEdQUlJlZyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1Zh
bHVlUmVncyk7CiAjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3Mp
OwpAQCAtMzA1LDggKzM1OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFi
bGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBW
YWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4KICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpOwogCi0gICAgICAgIHZvaWQgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiwg
UmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQ
UiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5
dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25z
dCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgUmVn
aXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01OTMs
NyArNjQ4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5l
cShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
ICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjExLDcgKzY2NSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisjaWYgVVNFKEpTVkFM
VUUzMl82NCkKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICNlbmRpZgog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNywxNCArNjgxLDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBp
c1Vuc2lnbmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJy
YW5kLCBBY2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVh
bFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVT
bG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5j
RXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBl
bWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhcklu
amVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAg
ICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNo
R1BSKTsKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1
bnNpZ25lZCBkZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBV
U0UoSlNWQUxVRTY0KQpAQCAtNjQ2LDcgKzcwMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlm
CiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1
aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9p
bnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1Nl
dCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRl
clRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZv
aWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9p
ZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NSw2ICs3
MDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAg
Ym9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENv
bnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENv
bnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3Rh
bnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC02NzYsMTMgKzczMSwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X3Zh
bF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9y
KFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwog
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93
X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV92YWxf
cHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKFZNJik7Ci0gICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3Bf
cmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0
b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYpOwpAQCAtNjk2LDMyICs3NDksMTYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBH
bG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVU
eXBlID09IE1vZHVsZVZhcik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9N
X1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVU
eXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xB
UkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIq
IHRodW5rTmFtZSk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2Vk
Rm9yT3BSZXNvbHZlU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIE1vZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVt
aXQgaW5saW5lIHRoYW4gdXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1
cmVWYXIgYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Nj
b3BlLgotICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJl
VmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBE
RUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2Nv
cGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09M
VkVfVFlQRShERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVf
UkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKTsKLQogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNU
cnV0aHlHZW5lcmF0b3IoVk0mKTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9u
YWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNj
b3BlVGh1bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1
bmtOYW1lKTsKKwogICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBpdGVyKyst
PmZyb207CkBAIC03NjAsMTAgKzc5NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0
aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0KTsKICAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdChBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRh
dGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZv
aWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShNZXRhZGF0YSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShj
b25zdCBCeXRlY29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4K
KyAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBl
LCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJh
aXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAt
ODIxLDIwICs4NTgsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9m
ZnNldCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEs
IHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4u
LiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlv
blR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJh
dGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25U
eXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAg
ICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4u
KTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAg
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHRXaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAK
LSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRh
dGEsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlv
blR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6
OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZv
aWQ+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEs
IEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJh
dGlvblR5cGU+KHRhcmdldCwgYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwg
QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAg
ICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRh
cmdldC5vZmZzZXQpLCByZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOSwyNSArOTU2LDIy
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wg
Y2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJv
b2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJ
bmxpbmVkOyB9CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1f
c2hvdWxkRW1pdFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXpl
ZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGlu
ZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBw
cm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBp
biB3aGljaCBjYXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxk
RW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lk
IGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAg
ICAgICAgdm9pZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJv
b2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21w
aWxlVGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEg
dmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAg
IC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91
IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRo
IHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5m
byBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9m
aWxlKEJpbmFyeU9wKTsKKworICAgICAgICB2b2lkIHJlc2V0U1AoKTsKIAogICAgICAgICBJbnRl
cnByZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtOTY0LDkgKzk5OCw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAg
IFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNp
Z25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWlu
dDY0X3QsIEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9jb3BpZWRBcml0aFByb2ZpbGVzOwotCiAgICAg
ICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2Vw
dGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjazsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCkBAIC0xMDAwLDExICsxMDMxLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBI
YXNoTWFwPGNvbnN0IEluc3RydWN0aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0
ZT4+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAogICAgICAgICBib29s
IG1fY2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5l
ZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2Rl
SW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgICAgIFJlZlB0cjxEaXJl
Y3RKSVRDb2RlPiBtX2ppdENvZGU7CisgICAgICAgIENvZGVCbG9jayogbV9wcm9maWxlZENvZGVC
bG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fdW5saW5rZWRD
b2RlQmxvY2sgeyBudWxscHRyIH07CisKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsK
KyAgICAgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJ
VENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBtX2dsb2JhbE9iamVjdENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpIH07CisgICAgICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxp
bmtlZENhbGxzOworICAgICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9z
OworICAgICAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJ
bmZvczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBU
YWJsZXM7CisgICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzOworCisgICAgICAgIHN0cnVjdCBOb3RBQ29kZUJsb2NrIHsgfSBtX2NvZGVC
bG9jazsKKworICAgICAgICBib29sIG1faXNTaGFyZWFibGUgeyB0cnVlIH07CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewog
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50
R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0
ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmVnVDEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
ICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMiwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3
ICszNzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAg
fQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEs
IHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklU
OjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVn
YXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVn
YXRlPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJ
QyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAg
ICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQ
cm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlv
biwgbmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0
aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmln
SW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRl
KTsKQEAgLTg5OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IElu
c3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRB
ZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3Mu
YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRk
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihh
ZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0g
bWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAg
ICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQ
Uiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93
Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUsMTAg
KzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAg
ICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9h
ZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQ
UiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNl
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwxMyArMTA2
MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAjZW5kaWYK
IAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJv
ZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2Zp
bGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBz
cmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRo
UHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
cmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChy
ZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNy
Y1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBy
ZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRI
X0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwxMyAr
MTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAjZW5k
aWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0
aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQ
cm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3
aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiks
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
bGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0
PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpf
SklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQs
IGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFC
TEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTEx
NjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioK
IAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAgICBp
ZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
aXY+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAg
ICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJz
dCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5k
VHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjIwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRh
KG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2Nv
ZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgSklUTXVsSUMqIG11
bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVj
dGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0
aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVN
dWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRT
dWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BTdWI+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmls
ZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1
YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24g
MjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVj
b2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOwogICAgIGVtaXRTdG9yZShkZXN0aW5hdGlvbkZvcihieXRlY29kZSwg
bV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QxLCBy
ZWdUMCk7CiB9CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogSklUOjpj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiB7CiAg
ICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAg
IGludCBhcmdDb3VudCA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBj
aGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50Pihz
dGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCkBA
IC0xOTIsNyArMTkyLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZAogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFy
Z3VtZW50czsKICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXpl
RnJhbWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCAtZmlyc3RG
cmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVP
cGVyYXRpb24sIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0
U2V0VmFyYXJnc0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdU
MSk7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAr
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDYgKiBzaXpl
b2Yodm9pZCopKSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMjAyLDcgKzIw
Miw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAg
c2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAg
ICBlbHNlCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJh
bWU7Ci0gICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0KSwgZmlyc3RWYXJBcmdP
ZmZzZXQsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0
KSwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KQEAgLTIzMiwxMCAr
MjMyLDEwIEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwogICAgIHN0b3JlUHRy
KGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1l
T2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBy
ZWdUMSwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fcHJv
ZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CiAKICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CiAKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4o
KTsKLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZv
KENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0g
bV9wcm9maWxlZEJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CiAK
ICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAtMjU4LDggKzI1
OCw4IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdFZp
cnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjg2LDEx
ICsyODYsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAg
ICovCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKICAgICBpZiAob3Bjb2RlSUQg
IT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5r
SW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgICAgICBpbmZvID0gbV9wcm9m
aWxlZEJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsK
ICAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CiAgICAgLy8gU1AgaG9sZHMg
bmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291
bnQgaW5pdGlhbGl6ZWQuCiAgICAgCi0gICAgYXV0byBieXRlY29kZUluZGV4ID0gbV9jb2RlQmxv
Y2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOworICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9
IG1fcHJvZmlsZWRCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7CiAgICAgdWludDMy
X3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7CiAg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgdGFnRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgZW1pdExvYWQoY2FsbGVlLCBy
ZWdUMSwgcmVnVDApOyAvLyByZWdUMSwgcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAtMzI0LDcgKzMy
NCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBhZGRT
bG93Q2FzZShzbG93UGF0aHMpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxs
UmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM0MSwxMiArMzQxLDExIEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1Bh
dGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QzKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CiAKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewpA
QCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3Qg
SW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsNyArMzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIEpTVmFsdWVSZWdzIG5leHRSZWdzID0gSlNW
YWx1ZVJlZ3ModGFnTmV4dEdQUiwgcGF5bG9hZE5leHRHUFIpOwogCiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLAorICAgICAgICBtX3Byb2ZpbGVkQmxv
Y2ssCiAgICAgICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAogICAgICAgICBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksCiAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwKQEAgLTQxMCw3ICs0MDksNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG5leHRSZWdzKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9j
ayksIG5leHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4
dCwgbmV4dFJlZ3MpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKQEAgLTQ0MCwxMCArNDM5
LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZSgKLSAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAv
LyBtZXRhZGF0YQorICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCAv
LyBtZXRhZGF0YQogICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlv
bgogICAgICAgICBuZXh0VlJlZywgLy8gcmVzdWx0Ci0gICAgICAgIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICBUcnVzdGVkSW1tUHRy
KG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCiAgICAgICAgIGdlbi5z
dHViSW5mbygpLCAvLyBhcmcyCiAgICAgICAgIEpTVmFsdWVSZWdzKHRhZ0l0ZXJhdG9yR1BSLCBw
YXlsb2FkSXRlcmF0b3JHUFIpLCAvLyBhcmczCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQK
QEAgLTQ1Miw3ICs0NTEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zCiAgICAgYXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmpl
Y3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0
ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogCiAgICAgZG9uZS5s
aW5rKHRoaXMpOwogfQpAQCAtNDYwLDcgKzQ1OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChb
Jl0gKCkgewogICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAg
IGNhc2UgTmFycm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC01
MDYsNyArNTA1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgog
ICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh0YWdWYWx1ZUdQUik7CiAgICAgICAgIHByZXNlcnZl
ZFJlZ3MuYWRkKHBheWxvYWRWYWx1ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssCisgICAgICAgICAgICBtX3Byb2ZpbGVkQmxv
Y2ssCiAgICAgICAgICAgICBKSVRUeXBlOjpCYXNlbGluZUpJVCwKICAgICAgICAgICAgIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwKQEAgLTUzMywxMCArNTMyLDEwIEBA
IHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDY7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Q3OwogICAg
ICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNl
OwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwg
SlNWYWx1ZVJlZ3ModGFnRG9uZUdQUiwgcGF5bG9hZERvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9u
RG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHRhZ0RvbmVHUFIsIHBheWxv
YWREb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpOwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssCisgICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICBKSVRU
eXBlOjpCYXNlbGluZUpJVCwKICAgICAgICAgICAgIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwKICAgICAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwKQEAgLTU4OCwxMCArNTg3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAg
ICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAg
ICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgLy8gbWV0YWRhdGEK
ICAgICAgICAgICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgLy8gb3BlcmF0aW9uCiAgICAg
ICAgICAgICBkb25lVlJlZywgLy8gcmVzdWx0Ci0gICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKKyAgICAgICAgICAgIFRydXN0ZWRJ
bW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKICAgICAgICAg
ICAgIGdlbi5zdHViSW5mbygpLCAvLyBhcmcyCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdJ
dGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFyZzMKICAgICAgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQp
LnJhd0JpdHMoKSk7IC8vIGFyZzQKQEAgLTYwMiw3ICs2MDEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hl
Y2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0
ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgIH0KIAogICAg
IHsgICAKQEAgLTYxOCwxMCArNjE3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9uZXh0KGNvbnMKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICAg
ICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICAgICAg
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAgICAgICAgICAg
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgLy8gbWV0YWRhdGEKICAgICAgICAg
ICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgLy8gb3BlcmF0aW9uCiAgICAgICAgICAgICB2
YWx1ZVZSZWcsIC8vIHJlc3VsdAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCisgICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1f
cHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCiAgICAgICAgICAgICBnZW4u
c3R1YkluZm8oKSwgLy8gYXJnMgogICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnSXRlclJlc3Vs
dEdQUiwgcGF5bG9hZEl0ZXJSZXN1bHRHUFIpLCAvLyBhcmczCiAgICAgICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOyAvLyBhcmc0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJl
dmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVm
Zmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIK
KyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTZXR1cFZh
cmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0YWNr
QWxpZ25tZW50LmgiCkBAIC00NCw3ICs0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVj
b2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNv
ZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdU
MCk7CiB9CiAKQEAgLTUzLDE4ICs1NCwxOCBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpv
cGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVj
dF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYm
IE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4K
LUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8q
KQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKICAgICBpbnQgcmVn
aXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNldEluUmVnaXN0ZXJzRm9y
Q2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCisKICAgICBpZiAoT3A6Om9wY29kZUlEID09
IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjph
cmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIo
cmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0YSwgY2hlY2twb2ludCkuYWRkcmVzc09mTGFz
dFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5
dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRD
YWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNl
dE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAg
IH0KIApAQCAtNzgsNyArNzksNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJ
RCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJh
cmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6
Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8p
CitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6
OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRp
b24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAg
ICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAg
Y2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zm
c2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNp
emVPcGVyYXRpb24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFy
Z09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVn
VDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxz
ZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0
ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CkBAIC0xMDEsMTQgKzEwMywxNiBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBi
eXRlY29kCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJn
dW1lbnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlv
blNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBm
aXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwor
ICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZp
cnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEp
OwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7
Ci0gICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAs
IHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3Rh
bnQsIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZz
ZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CisgICAgSnVtcCBu
b3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CisgICAgc3RvcmUzMihy
ZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAg
ICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEzMSwxNSBAQCBib29sIEpJVDo6
Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxl
Q2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykp
KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVS
ZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7
Ci0KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3Jl
UHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpj
YWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5t
X2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
YWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOworICAg
IHJlc2V0U1AoKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBhcmd1bWVu
dEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJldHVyblZhbHVlR1BS
KSk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiAKQEAgLTE0OCw3ICsxNTEs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRk
Q2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CisgICAgQ2FsbExpbmtJ
bmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7
CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAtMTU2LDQz
ICsxNTksNDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsg
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBz
aXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0
dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAgIHJlc2V0
U1AoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExp
bmtJbmZvKiwgdW5zaWduZWQpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwg
VW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21w
aWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5m
bywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxs
KGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbywg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2Fs
bExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0gICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURh
dGE7Ci0gICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAg
ICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lz
dGVyOwotICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9CisgICAgc3RkOjp1bmlxdWVfcHRyPENh
bGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1
ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5t
X2FyZ2M7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhcmFtZXRlcnMgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCk7CisgICAgc2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVy
ID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAgc2h1ZmZsZURhdGEtPm51bUxvY2Fs
cyA9CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAv
IHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNvZGUu
bV9hcmdjKTsKKyAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAg
ICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgIHNodWZmbGVEYXRhLT5hcmdzW2ld
ID0KICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKICAgICAg
ICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBi
eXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKICAgICB9Ci0g
ICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVn
VDAsIERhdGFGb3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0
ZXJzKG1fY29kZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVE
YXRhKTsKKyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVn
VDAsIERhdGFGb3JtYXRKUyk7CisgICAgc2h1ZmZsZURhdGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olllcywg
WyZdIHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVw
YXJlRm9yVGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQs
IHJlZ1QyKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWls
Q2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CisgICAgICAgIENh
bGxGcmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OwogICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CisKKyAgICBzaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShz
aHVmZmxlRGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9j
YWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25l
TG9jYXRpb247CiAgICAgCkBAIC0yMTgsMTQgKzIyNSwyNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVy
blBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lz
dGVyIGFmdGVyIHJldHVybi4KICAgICAqLwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxw
dHI7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1f
Y29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsK
LSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CisKKyAgICBVbmxpbmtlZENh
bGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9l
dmFsKSB7CisgICAgICAgIGluZm8gPSBtX3VubGlua2VkQ2FsbHMuYWRkKCk7CisgICAgICAgIGlu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIGluZm8tPmNhbGxU
eXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCk7CisKKyAgICAgICAgaW5m
b0NvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2Fs
bExpbmtJbmZvLCBpbmZvKTsKKworICAgICAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZv
LnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKKyAgICAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS51bmxpbmtlZENhbGxMaW5rSW5mbyA9IGluZm87
CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExp
bmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3RhbnQ7CisgICAgfQorICAgIGNvbXBpbGVTZXR1cEZy
YW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQpOwogCiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZy
YW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlh
bGl6ZWQuCi0gICAgYXV0byBieXRlY29kZUluZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5k
ZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5k
ZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOworICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxsZWUuCkBAIC0yMzQsMTYgKzI1Miwx
MiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgaWYgKGNv
bXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVCht
X2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBp
bmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1Qw
KTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8o
KSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlu
a0luZm8gPSBpbmZvOwotCi0gICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywg
Y2FsbExpbmtJbmZvSW5kZXgpKQorICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGlu
Zm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3RhbnQpKQogICAgICAgICByZXR1cm47CiAK
KyAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCByZWdUMik7CiAgICAgaWYgKG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cykgewotICAgICAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWls
Q2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlD
OjpZZXMsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0
VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0gewogICAgICAg
ICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRh
aWxDYWxsU2xvdyhyZWdUMik7CiAgICAgICAgIH0pOwpAQCAtMjUzLDE0ICsyNjcsMTMgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJl
Z1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olllcyk7CisgICAgYXV0byBzbG93
UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJl
Z1QyKTsKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uo
c2xvd1BhdGhzKTsKIAogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICByZXNldFNQKCk7CiAKICAgICBlbWl0UHV0Q2FsbFJl
c3VsdChieXRlY29kZSk7CiB9CkBAIC0yNzMsMjEgKzI4NiwyMCBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0
YXJ0ID0gbGFiZWwoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29u
c3RhbnQobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0lu
Zm9Db25zdGFudCwgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8
fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMyk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5j
YWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92bSwgKnRoaXMpOworICAgIENhbGxMaW5rSW5m
bzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKCptX3ZtLCAqdGhpcywgcmVnVDIpOwogCiAgICAgaWYgKG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJn
cyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKICAgICAg
ICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OworICAgIHJlc2V0U1AoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzk1LDE3ICs0MDcs
MzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogCiAgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwogICAgIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6c3R1YkluZm87CisKKyAgICBtb3ZlKHJlZ1QwLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1w
bCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJ
bmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8g
V2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNl
dCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEdQUik7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KQEAgLTQxNiwxMCArNDQyLDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7
CiAKLQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBHUFJSZWcgaXRlcmF0b3JH
UFIgPSByZWdUMDsKKyAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgIG5vdE9iamVjdC5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9yR1BSKSk7CiAgICAgbm90T2JqZWN0LmFwcGVuZChi
cmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckdQUikpOwpAQCAtNDMyLDE5ICs0NTYsMTcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjAp
OwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIH0g
ZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBuZXh0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBtb3ZlKGl0ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogCiAgICAgYXV0byBkb25lID0ganVtcCgpOwogCiAg
ICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJv
d0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBh
cmd1bWVudEdQUjApOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwogfQpAQCAtNDUyLDcgKzQ3NCw2
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKIHZvaWQgSklUOjpl
bWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
YXV0byogdHJ5RmFzdEZ1bmN0aW9uID0gKFsmXSAoKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1
Y3Rpb24tPndpZHRoKCkpIHsKICAgICAgICAgY2FzZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9u
ZXh0X3RyeV9mYXN0X25hcnJvdzsKQEAgLTQ3MCw1MCArNDkxLDc5IEBAIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIo
Tm90RXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PHVpbnQzMl90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwogCiAgICAgZ2VuZXJpY0Nh
c2UubGluayh0aGlzKTsKLSAgICBvcjgoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2l0
ZXJhdGlvbk1ldGFkYXRhLnNlZW5Nb2RlcykpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEo
KSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSwgcmVnVDApOwor
ICAgIG9yMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6
OkdlbmVyaWMpKSwgcmVnVDApOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2Rl
LCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSAr
IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSk7CiAgICAgY29tcGls
ZU9wQ2FsbDxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAvLyBjYWxsIHJlc3VsdCAo
eyBkb25lLCB2YWx1ZSB9IEpTT2JqZWN0KSBpbiByZWdUMAogCi0gICAgR1BSUmVnIHZhbHVlR1BS
ID0gcmVnVDA7Ci0gICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKLSAgICBHUFJSZWcg
ZG9uZUdQUiA9IHJlZ1QxOwotICAgIC8vIGl0ZXJSZXN1bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBi
eSB0aGUgZmlyc3QgZ2V0IGJ5IGlkIGJlbG93LgotICAgIG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1
bHRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1
bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7Cisg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOwogCisgICAgY29uc3Rl
eHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CiAg
ICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaXRlclJlc3VsdEdQUik7
CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSBiYXNl
R1BSKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAK
ICAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVncyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJlc2VydmVkUmVncy5hZGQodmFsdWVHUFIp
OworICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZChpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVn
cywKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0
ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgcmVnVDMsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJl
Z3MsCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgcmVz
ZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZh
dGl2ZWx5IHJlc2V0IFNQCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5j
ZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKLSAgICAgICAgR1BSUmVnIHNj
cmF0Y2gxID0gcmVnVDI7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzKGRvbmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsK
KyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJl
Z2lzdGVycyk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxv
Y2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBz
Y3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29s
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1w
TGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9u
ZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAg
ICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJh
dGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIGdsb2JhbEdQUik7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAg
ICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBiYXNlR1BSKTsKIAogICAgICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBs
KCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQs
IEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5w
cm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisg
ICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdl
IG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQg
U1AKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVn
cyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAogICAgICAgICBpdGVyYXRp
b25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1NzcsNTUgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRH
UFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBK
dW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RD
ZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5v
dENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCog
aWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAg
ICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90
T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsK
IAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUklu
Zm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9u
ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3Vs
dEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxk
ZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRv
bmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25l
VlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZv
ckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmpl
Y3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAg
ICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAg
R1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1w
bCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAog
ICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNh
bGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdH
UFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJl
c3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1l
bnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0K
LQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsMTEgQEAKICNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogCisKIG5hbWVz
cGFjZSBKU0MgewogCitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKKwogbmFtZXNwYWNlIERGRyB7
CiBjbGFzcyBDb21tb25EYXRhOwogY2xhc3MgSklUQ29kZTsKQEAgLTE1OSwxMCArMTYyLDEwIEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAg
ICAgewotICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRh
SUMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6
OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApAQCAtMjIzLDYgKzIyNiw4IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlQXR0
cmlidXRlID09IFNoYXJlQXR0cmlidXRlOjpTaGFyZWQ7IH0KIAorICAgIHZpcnR1YWwgUENUb0Nv
ZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorCiBw
cml2YXRlOgogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFNoYXJlQXR0cmlidXRlIG1fc2hh
cmVBdHRyaWJ1dGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0
aW9uS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENv
bXBpbGF0aW9uS2V5LmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4
LDcgQEAgdm9pZCBKSVRDb21waWxhdGlvbktleTo6ZHVtcChQcmludFN0cmVhbQogICAgICAgICBv
dXQucHJpbnQoIjxlbXB0eT4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBvdXQucHJp
bnQoIihDb21waWxlIG9mICIsICptX3Byb2ZpbGVkQmxvY2ssICIgd2l0aCAiLCBtX21vZGUsICIp
Iik7CisgICAgb3V0LnByaW50KCIoQ29tcGlsZSBvZiAiLCBSYXdQb2ludGVyKG1fY29kZUJsb2Nr
KSwgIiB3aXRoICIsIG1fbW9kZSwgIikiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5oCShyZXZp
c2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9u
S2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDU3ICszMCw1NiBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgSlNDZWxs
OwogCiBjbGFzcyBKSVRDb21waWxhdGlvbktleSB7CiBwdWJsaWM6CiAgICAgSklUQ29tcGlsYXRp
b25LZXkoKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhudWxscHRyKQorICAgICAgICA6IG1f
Y29kZUJsb2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9tb2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6
SW52YWxpZENvbXBpbGF0aW9uKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgSklUQ29tcGlsYXRp
b25LZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fcHJvZmls
ZWRCbG9jayhudWxscHRyKQorICAgICAgICA6IG1fY29kZUJsb2NrKG51bGxwdHIpCiAgICAgICAg
ICwgbV9tb2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6REZHKQogICAgIHsKICAgICB9CiAgICAgCi0g
ICAgSklUQ29tcGlsYXRpb25LZXkoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBKSVRDb21waWxh
dGlvbk1vZGUgbW9kZSkKLSAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykK
KyAgICBKSVRDb21waWxhdGlvbktleShKU0NlbGwqIHByb2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0
aW9uTW9kZSBtb2RlKQorICAgICAgICA6IG1fY29kZUJsb2NrKHByb2ZpbGVkQmxvY2spCiAgICAg
ICAgICwgbV9tb2RlKG1vZGUpCiAgICAgewogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21v
ZGUgPT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CisgICAgICAgIHJl
dHVybiAhbV9jb2RlQmxvY2sgJiYgbV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxp
ZENvbXBpbGF0aW9uOwogICAgIH0KICAgICAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9wcm9maWxlZEJsb2NrICYmIG1f
bW9kZSAhPSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKKyAgICAgICAg
cmV0dXJuICFtX2NvZGVCbG9jayAmJiBtX21vZGUgIT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZh
bGlkQ29tcGlsYXRpb247CiAgICAgfQogICAgIAotICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZmlsZWRCbG9jazsgfQogICAgIEpJVENvbXBpbGF0aW9u
TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgCiAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEpJVENvbXBpbGF0aW9uS2V5JiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3Byb2ZpbGVkQmxvY2sgPT0gb3RoZXIubV9wcm9maWxlZEJsb2NrCisgICAg
ICAgIHJldHVybiBtX2NvZGVCbG9jayA9PSBvdGhlci5tX2NvZGVCbG9jawogICAgICAgICAgICAg
JiYgbV9tb2RlID09IG90aGVyLm1fbW9kZTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjpwYWlySW50SGFzaChXVEY6OlB0
ckhhc2g8Q29kZUJsb2NrKj46Omhhc2gobV9wcm9maWxlZEJsb2NrKSwgc3RhdGljX2Nhc3Q8c3Rk
Ojp1bmRlcmx5aW5nX3R5cGU8SklUQ29tcGlsYXRpb25Nb2RlPjo6dHlwZT4obV9tb2RlKSk7Cisg
ICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKFdURjo6UHRySGFzaDxKU0NlbGwqPjo6aGFz
aChtX2NvZGVCbG9jayksIHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPEpJVENvbXBp
bGF0aW9uTW9kZT46OnR5cGU+KG1fbW9kZSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBDb2RlQmxvY2sqIG1fcHJvZmls
ZWRCbG9jazsKKyAgICAvLyBFaXRoZXIgQ29kZUJsb2NrKiBvciBVbmxpbmtlZENvZGVCbG9jayog
Zm9yIGJhc2xlbGluZSBKSVQuCisgICAgSlNDZWxsKiBtX2NvZGVCbG9jazsKICAgICBKSVRDb21w
aWxhdGlvbk1vZGUgbV9tb2RlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MzAx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ2FjaGVhYmxl
SWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJ
bmxpbmVBY2Nlc3MuaCIKKyNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIApAQCAtNDYsMTAgKzQ3LDkgQEAgc3Rh
dGljIFN0cnVjdHVyZVN0dWJJbmZvKiBnYXJiYWdlU3R1YkluZgogSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
LCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzKQotICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICwgbV9qaXRU
eXBlKGppdFR5cGUpCisgICAgOiBtX2ppdFR5cGUoaml0VHlwZSkKIHsKLSAgICBtX3N0dWJJbmZv
ID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29k
ZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKKyAgICBtX3N0dWJJbmZvID0gY29kZUJsb2Nr
ID8gY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJh
Z2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNhbGxTaXRlSW5kZXggPSBjYWxsU2l0ZTsK
IAogICAgIG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzOwpAQCAtNTks
NyArNTksNiBAQCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBM
aW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgsIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCkKIHsKICAgICBtX3N0dWJJbmZvLT5zdGFy
dCA9IHN0YXJ0OwotCiAgICAgbV9zdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gZmFzdFBhdGgubG9j
YXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihtX2RvbmUpOwogCiAgICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMobV9qaXRUeXBlKSkKQEAgLTY3LDYgKzY2LDE1IEBAIHZvaWQgSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2Nh
dGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc2xvd1Bh
dGhCZWdpbik7CiB9CiAKK3ZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBz
dHViSW5mb0dQUikKK3sKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgUkVMRUFTRV9B
U1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworICAgIGppdC5sb2FkQ29uc3Rh
bnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIo
KSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30K
KwogSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRl
SW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUs
IEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTExMCw3ICsxMTgsNyBAQCBKSVRHZXRCeUlkR2VuZXJh
dG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5
cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNoZWFibGVJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQ
UlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAgIDogSklUQnlJZEdl
bmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NU
eXBlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCi0gICAgLCBtX2lz
TGVuZ3RoQWNjZXNzKHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAgICAsIG1faXNMZW5ndGhBY2Nlc3MoY29kZUJsb2Nr
ICYmIHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLmltcGwoKSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlLnBheWxvYWRHUFIoKSAh
PSB2YWx1ZS50YWdHUFIoKSk7CiB9CkBAIC0xMjAsNiArMTI4LDM1IEBAIHZvaWQgSklUR2V0QnlJ
ZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGEKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBt
X2lzTGVuZ3RoQWNjZXNzID8gSW5saW5lQWNjZXNzOjpzaXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJ
bmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAorc3RhdGljIHZvaWQg
Z2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKEpJVCYgaml0LCBHUFJSZWcgc3R1YkluZm9HUFIs
IEdQUlJlZyBiYXNlLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAg
ICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2Fk
UHJvcGVydHkoYmFzZSwgc2NyYXRjaCwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0
byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmpp
dCk7CisgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7CisKKyAgICBmaW5pc2hlZC5saW5rKCZqaXQpOworfQorCit2b2lkIEpJVEdldEJ5SWRHZW5l
cmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQg
c3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRD
b2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7
CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgZ2Vu
ZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwo
KTsKK30KKworCiBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhp
c0dlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVS
ZWdzIHZhbHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVn
IHN0dWJJbmZvR1BSKQpAQCAtMTM4LDYgKzE3NSwxOCBAQCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhp
c0dlbmVyYXRvcjo6Z2VuZXJhCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNj
ZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKK3ZvaWQgSklUR2V0QnlJZFdpdGhU
aGlzR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVu
c2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5s
YWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOwor
ICAgIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhqaXQsIHN0dWJJbmZvR1BSLCBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnNjcmF0Y2gsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1
bHQpOworCisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVFB1dEJ5SWRHZW5lcmF0
b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5
cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwK
ICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZv
R1BSLCBHUFJSZWcgc2NyYXRjaCwgCkBAIC0xNDksNiArMTk4LDM0IEBAIEpJVFB1dEJ5SWRHZW5l
cmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJz
LmNsZWFyKHNjcmF0Y2gpOwogfQogCit2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJl
ZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMo
bV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9h
ZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBHUFJSZWcgc2NyYXRjaDIgPSBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIEdQUlJlZyB2YWx1ZSA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVB
Y2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJ
ZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5zdG9yZVByb3BlcnR5KEpTVmFsdWVS
ZWdzIHsgdmFsdWUgfSwgYmFzZSwgc2NyYXRjaCwgc2NyYXRjaDIpOworICAgIGF1dG8gZmluaXNo
ZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAg
IGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisg
ICAgZmluaXNoZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwog
dm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVy
JiBqaXQpCiB7CiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXpl
Rm9yUHJvcGVydHlSZXBsYWNlKCkpOwpAQCAtMjAwLDcgKzI3Nyw3IEBAIHZvaWQgSklURGVsQnlW
YWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAg
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9z
dHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRy
KCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNl
CiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2Rv
bmUgPSBqaXQubGFiZWwoKTsKQEAgLTIzNiw3ICszMTMsNyBAQCB2b2lkIEpJVERlbEJ5SWRHZW5l
cmF0b3I6OmdlbmVyYXRlRmFzdFBhCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwg
SklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0g
aml0LmxhYmVsKCk7CkBAIC0yNzAsNyArMzQ3LDcgQEAgdm9pZCBKSVRJbkJ5VmFsR2VuZXJhdG9y
OjpnZW5lcmF0ZUZhc3RQYQogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BS
KTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1f
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAg
bV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5s
YWJlbCgpOwpAQCAtMzAwLDYgKzM3NywzMiBAQCB2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVGYXN0UGF0CiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpz
aXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKK3ZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpn
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZv
LCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNl
RGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAg
aml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworCisgICAgR1BSUmVnIGJh
c2UgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgcmVzdWx0ID0g
QmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5s
aW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmJveEJvb2xlYW4o
dHJ1ZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5q
dW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmZhckp1
bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hl
ZC5saW5rKCZqaXQpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRJbnN0YW5j
ZU9mR2VuZXJhdG9yOjpKSVRJbnN0YW5jZU9mR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4LAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBwcm90b3R5cGUsIEdQUlJlZyBz
dHViSW5mb0dQUiwKQEAgLTMzMiw3ICs0MzUsNyBAQCB2b2lkIEpJVEluc3RhbmNlT2ZHZW5lcmF0
b3I6OmdlbmVyYXRlRmFzCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIp
OwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9z
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1
YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
Q29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBt
X3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0Lmxh
YmVsKCk7CkBAIC0zNjgsNyArNDcxLDcgQEAgdm9pZCBKSVRHZXRCeVZhbEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAg
ICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0
aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1f
c3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQ
dHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93
UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgp
OwpAQCAtNDA1LDcgKzUwOCw3IEBAIHZvaWQgSklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRl
RmFzdFAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAg
IGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BS
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0
clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJ
bmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkp
LCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhK
dW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAg
LTQ0MCw3ICs1NDMsNyBAQCB2b2lkIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcjo6Z2Vu
CiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
bV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQu
Y2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+
bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklU
U3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9
IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNp
ZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkpJVE9w
ZXJhdGlvblZhbGlkYXRpb24uaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKQEAgLTM4LDExICszOSwxMTgg
QEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2Fs
bFNpdGVJbmRleDsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVy
ZVN0dWJJbmZvOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xh
c3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAK
K3N0cnVjdCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdU
MTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307
CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0
b3JHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMjsKKyAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJs
b2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgor
ICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5mbzo6cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQg
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQ
UkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9
IEdQUkluZm86OmFyZ3VtZW50R1BSMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mbyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMSA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOworfTsKKworc3RydWN0IEJhc2Vs
aW5lSW5CeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BS
SW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGRvbnRDbG9iYmVyUmVnaXN0ZXIgPSBHUFJJbmZv
OjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3Ry
dWN0IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyByZXN1bHQgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworfTsKKworc3RydWN0IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZv
OjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6
cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpy
ZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHByb2ZpbGUgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3RydWN0IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmQgPSBH
UFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChicmFuZCA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisKIGNsYXNzIEpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigpIHsgfQpA
QCAtNjIsMTIgKzE3MCwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZSgKICAgICAgICAg
TGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtC
dWZmZXIsCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBz
dGFydCk7Ci0gICAgCisKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChK
SVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogbV91bmxpbmtlZFN0dWJJbmZvIHsgbnVsbHB0
ciB9OworICAgIHVuc2lnbmVkIG1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggeyBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKwogcHJvdGVjdGVkOgotICAgIENv
ZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAgICAgU3RydWN0
dXJlU3R1YkluZm8qIG1fc3R1YkluZm87CiAKK3B1YmxpYzoKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9kb25lOwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Nsb3dQYXRoQmVnaW47CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgbV9zbG93UGF0aENhbGw7CkBAIC05OCw3ICsyMTIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
SlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKK3B1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTExMSw2ICsyMjUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1Yklu
Zm9HUFIsIEFjY2Vzc1R5cGUpOwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNy
b0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJ
VCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKIHBy
aXZhdGU6CiAgICAgYm9vbCBtX2lzTGVuZ3RoQWNjZXNzOwpAQCAtMTI0LDYgKzIzOSw3IEBAIHB1
YmxpYzoKICAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZp
ZXIsCiAgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVl
UmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIAorICAgIHZvaWQgZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQ
UlJlZyBzdHViSW5mb0dQUik7CiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1i
bGVyJik7CiB9OwogCkBAIC0xMzIsMTAgKzI0OCwxMSBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJ
ZEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAg
ICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0
IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVl
UmVncyBiYXNlLAotICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BS
LCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sq
LCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYg
dXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
YmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0
Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgo
TWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwog
ICAgIAogICAgIFZfSklUT3BlcmF0aW9uX0dTc2lKSkMgc2xvd1BhdGhGdW5jdGlvbigpOwogCkBA
IC0xNjMsMTEgKzI4MCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChN
YWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAg
ICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3Rh
cnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9
OwogCkBAIC0xOTEsOCArMzA2LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQ
YXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0
aEp1bXA7CiB9OwogCkBAIC0yMTYsOCArMzI5LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5l
cmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAg
bV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yNDEsOCArMzUyLDYgQEAgcHVibGljOgogCiAgICAg
dm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNo
YWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yNTUsNiArMzY0LDcgQEAgcHVibGlj
OgogICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0
dWJJbmZvR1BSKTsKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYp
OworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVk
IHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiB9OwogCiBjbGFzcyBKSVRJ
bnN0YW5jZU9mR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
IHsKQEAgLTI3Nyw4ICszODcsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtC
dWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVy
KTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMw
MiwxMSArNDEwLDkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChN
YWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAg
ICBKU1ZhbHVlUmVncyBtX3Jlc3VsdDsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0
YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwog
fTsKIApAQCAtMzMwLDggKzQzNiw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRl
RmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Ns
b3dQYXRoSnVtcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
cy5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0
dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
bnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7
CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
SW50MzIoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVh
bFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtU
aW1lQ29uc3RhbnQpIHsKKyAgICAgICAgLy8gQWxsIGxpbmsgdGltZSBjb25zdGFudHMgYXJlIGNl
bGxzLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzQ2VsbCgpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpn
ZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICBBU1NFUlQoc3Jj
LmlzQ29uc3RhbnQoKSk7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMp
OworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5r
VGltZUNvbnN0YW50KTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoc3JjKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQpAQCAtMTU2
LDM2ICsxODEsMzYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeAog
I2VuZGlmCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVt
cGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRo
UHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rp
b24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIy
LCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwg
cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0
YWRhdGEsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAg
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5W
YWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwog
ICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwogI2Vu
ZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxs
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciBy
ZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKKyAgICBpZiAo
IWlzS25vd25DZWxsKHJlZykpCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAt
MjA1LDcgKzIzMCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcygK
IGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRl
Y29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxp
bmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3Bv
aW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAg
YXV0byByZXN1bHQgPSBtX2NoZWNrcG9pbnRMYWJlbHMuYWRkKG1fYnl0ZWNvZGVJbmRleCwgbGFi
ZWwoKSk7CkBAIC0yMTUsNyArMjQwLDcgQEAgaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0
Q2hlY2twb2ludAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9p
bnQoSnVtcCBqdW1wKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4
LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VS
VChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3Bv
aW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdCht
X2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byBpdGVyID0gbV9jaGVja3BvaW50TGFiZWxz
LmZpbmQobV9ieXRlY29kZUluZGV4KTsKQEAgLTI5MywyOSArMzE4LDI5IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRDb3VudChBYnN0cmEKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJu
IHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAm
JiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09
IDE7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkp
LT5sZW5ndGgoKSA9PSAxOwogfQogCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKIGlubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7
CiAKLSAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNr
ZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0Ci0gICAgLy8gc3RvcmUuCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRz
KTsKLSNlbHNlCiAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJpdHdp
c2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0cyk7
CiAgICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5
bG9hZCk7CiAgICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50
YWcpOwotI2VuZGlmCiB9CisjZW5kaWYKIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBpbmxpbmUg
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3By
b2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4gSklUOjplbWl0VmFsdWVQcm9maWxp
bmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSkKIHsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDAp
OwogI2Vsc2UKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKQEAgLTMyMyw0
MSArMzQ4LDM3IEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWMKIAog
aW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSgu
Li4pIHsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWVSZWdzIHZh
bHVlKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2
YWx1ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBt
X2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOwotfQogCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2Zp
bGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgcHRy
ZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5N
ZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29kZT4o
bV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmly
c3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRhdGFH
UFIsIG9mZnNldCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEdQUlJl
ZyByZXN1bHRSZWcpCisjaWYgVVNFKEpTVkFMVUU2NCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVj
b2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgR1BSUmVnIHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRp
ZgogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdp
c3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIHNj
cmF0Y2hHUFIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdp
c3RlcklEIHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewog
ICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRj
aEdQUiwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAg
ICAgICBzdG9yZTMyVG9NZXRhZGF0YShzY3JhdGNoR1BSLCBieXRlY29kZSwgb2Zmc2V0T2ZBcnJh
eVByb2ZpbGUpOwogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmls
ZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3Qg
Qnl0ZWNvZGUmIGJ5dGVjb2RlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRj
aEdQUikKIHsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRyZXNz
KGFycmF5UHJvZmlsZUdQUiwgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJl
SUQoKSkpOwotICAgIH0KKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNv
ZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJv
ZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCksIGNlbGxHUFIsIHNjcmF0Y2hHUFIp
OwogfQogCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
VmlydHVhbFJlZ2lzdGVyIHNyYykKQEAgLTM4MCw3ICs0MDEsNyBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91Ymxl
KFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAocmVn
LmlzQ29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3Rh
bnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRy
KCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZERvdWJs
ZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKQEAgLTQ5Niw3ICs1MTcsNyBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFt
X2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVn
KSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUwNiw3ICs1MjcsNyBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFn
KQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAo
IWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MTQsMTEgKzUz
NSw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9CiB9
CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxS
ZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVy
IG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKQEAgLTU0NCwxMSArNTYwLDExIEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBBU1NFUlQobV9ieXRlY29k
ZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAog
ICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigp
KQotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSks
IGRzdCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlz
Q29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soc3JjKSkgeworICAgICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAg
ICAgICAgICBtb3ZlKEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU2NiwxMSArNTgyLDYgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50
KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7
CkBAIC01OTUsNyArNjA2LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93
Q2FzZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9j
b2RlQmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykp
CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02Mzcs
MzAgKzY0OCw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsK
ICAgICBpZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2Nv
ZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVj
b2RlKQotewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8v
IEhhc2hNYXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9j
b3BpZWRHZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVk
R2V0UHV0SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52
YWx1ZSk7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXks
IGdldFB1dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmls
ZSBKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50
NjRfdCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAx
KSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwot
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAg
IGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmls
ZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBt
X2NvcGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4g
YXJpdGhQcm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVK
dW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02
ODEsNiArNjY5LDYwIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAK
ICAgICByZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sK
KyAgICBsb2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+
bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVz
dWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6
ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhzX21ldGFk
YXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFU
YWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7
CisgICAgbG9hZDgoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5t
ZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1
bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29k
ZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZh
bHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3Rv
cmU4KHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpz
dG9yZTMyVG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
c2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFH
UFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQor
eworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgc19tZXRhZGF0YUdQ
UiwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvbnN0YW50KEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY29uc3RhbnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKK3sK
KyAgICBsb2FkUHRyKEFkZHJlc3Moc19jb25zdGFudHNHUFIsIHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oY29uc3RhbnRJbmRleCkgKiA4KSwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6bG9hZEdsb2JhbE9iamVjdChHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRDb25zdGFu
dChtX2dsb2JhbE9iamVjdENvbnN0YW50LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBH
UFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQo
KSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
c3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgQ29kZUJsb2NrOjpvZmZzZXRPZkNv
bnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVzdWx0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1
bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKEpTVmFsdWUpKSwgcmVzdWx0
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgp
OwogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25T
aXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRv
ciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1f
dm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29u
c3QgSQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRh
dGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUp
OwpAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UKICAgICBlbWl0TG9hZFBheWxvYWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogICAg
IC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3Vs
ZCBkby4KICAgICBKdW1wIGhhc0luc3RhbmNlVmFsdWVOb3RDZWxsID0gZW1pdEp1bXBJZk5vdEpT
Q2VsbChoYXNJbnN0YW5jZVZhbHVlKTsKLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUg
PSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkp
OworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVu
Y3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCiAgICAgLy8gV2Uga25v
dyB0aGF0IGNvbnN0cnVjdG9yIGlzIGFuIG9iamVjdCBmcm9tIHRoZSB3YXkgYnl0ZWNvZGUgaXMg
ZW1pdHRlZCBmb3IgaW5zdGFuY2VvZiBleHByZXNzaW9ucy4KICAgICBlbWl0TG9hZFBheWxvYWQo
Y29uc3RydWN0b3IsIHJlZ1QwKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHByb3RvKTsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbV9wcm9maWxl
ZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAogICAg
ICAgICByZWdUMiwgLy8gdmFsdWUKQEAgLTE5Niw3ICsxOTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAgICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKICAgICBlbWl0TG9hZFRhZyhwcm90
bywgcmVnVDMpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFu
Y2VPZk9wdGltaXplLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJ
bmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QwLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MSkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9w
dGltaXplLCBkc3QsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5m
bygpLCBKU1ZhbHVlUmVncyhyZWdUMCwgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDEp
KTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQog
CkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3Vz
dG9tKAogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5
bG9hZChjb25zdHJ1Y3RvciwgcmVnVDIpOwogICAgIGVtaXRMb2FkKGhhc0luc3RhbmNlVmFsdWUs
IHJlZ1Q0LCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3Vz
dG9tLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUNCwg
cmVnVDMpKTsKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogICAg
IApAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmlu
ZWQoY28KICAgICAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJl
Z1QwLCByZWdUMSwgcmVnVDApOwogCkBAIC0zNzgsNyArMzc4LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lID0gYnl0
ZWNvZGUubV9uYW1lOwogICAgIGVtaXRMb2FkUGF5bG9hZChmdW5jLCByZWdUMSk7CiAgICAgZW1p
dExvYWQobmFtZSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNl
dEZ1bmN0aW9uTmFtZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5j
dGlvbk5hbWUsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MDgsNyArNDA4LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogICAgIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QyOwogICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgIGJvb2wgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFs
c2V5KHZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIHZhbHVlLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC00MjIsNyArNDIyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUo
Y29uc3QgSW5zdHJ1Y3RpbwogICAgIEpTVmFsdWVSZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7CiAg
ICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7
Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgYWRkSnVtcChicmFu
Y2hJZlRydXRoeSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM3LDcgKzQzNyw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIEp1bXAg
aXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRkSnVtcChi
cmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNDYzLDcgKzQ2Myw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKIAogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVy
bywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVt
cCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
X3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgSlNWYWx1ZSBzcGVjaWFsUG9p
bnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKICAg
ICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwpAQCAtNTUyLDEzICs1NTIsMTMgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGdlbmVyaWNDYXNl
LmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2Uu
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVn
VDAsIHJlZ1QyKTsKICAgICBzdG9yZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdl
bmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAv
LyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSk7CiAKICAgICBzdG9yZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIGVtaXRTdG9yZUJvb2woZHN0
LCByZXR1cm5WYWx1ZUdQUik7CkBAIC01OTEsMTQgKzU5MSwxNCBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElm
Tm90U3RyaW5nKHJlZ1QyKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCByZWdUMCwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlu
Z0VxLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBpbGVPcEVxVHlwZTo6
RXEgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFyZ2V0KTsKICAgICBk
b25lLmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWND
YXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2Fz
ZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVybyA6IFpl
cm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdldCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7
CkBAIC02NDMsMTMgKzY0MywxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IElu
c3RydWN0CiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QyKSk7
CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVkQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwogICAgIHN0b3JlUmVzdWx0LmFwcGVu
ZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNlLmFwcGVu
ZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5saW5rKHRo
aXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX3By
b2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIHN0b3JlUmVzdWx0LmxpbmsodGhpcyk7
CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJldHVyblZhbHVlR1BSKTsKQEAgLTc2Miw3
ICs3NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwog
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7CiB9CiAKQEAgLTc3Miw3ICs3NzIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX3By
b2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03OTEsNyArNzkx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMik7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
ICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTgyMyw3ICs4MjMsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAgICBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJl
Z1QyKTsKICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwogICAg
IEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtODQ2LDcgKzg0Niw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICAgICBBU1NFUlQocmVnVDAgPT0g
cmV0dXJuVmFsdWVHUFIpOwogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdExvYWQoYnl0ZWNvZGUubV92
YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25UaHJvdywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25UaHJvdywgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKIH0KIApAQCAt
ODYyLDcgKzg2Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUK
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwogICAgIGlzSW50MzIubGluayh0aGlzKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCkpOwogICAgIGlmIChzcmMgIT0gZHN0KQogICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwg
cmVnVDApOwogfQpAQCAtODg0LDcgKzg4NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVy
aWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihhcmd1bWVu
dFZhbHVlUmVncywgcmVnVDIpKTsKICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CiAgICAgaWYgKHNyYyAhPSBkc3QpCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdU
MCk7CiB9CkBAIC05MTUsNyArOTE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNv
bnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBp
ZiAoc3JjICE9IGRzdCkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0K
QEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVj
dGlvCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNl
dCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVs
bHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2so
KSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0o
KSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUik7CkBAIC05NTQsNyArOTU0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9y
aW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJl
Z2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVmZmVy
IHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJ
bmRleC5hc0JpdHMoKSk7CkBAIC05OTYsOCArOTk2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2ltbShjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRl
Y29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2gg
ZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
Y29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2ZpbGVk
QmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAg
ICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJ
bmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5r
ZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTAyMywxMyArMTAy
MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8g
Y3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dp
dGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hS
ZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hS
ZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlu
a2VkVGFibGUpOwogCiAgICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJs
ZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgsIHVubGlua2VkVGFi
bGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIApA
QCAtMTA0MSwxMyArMTA0MSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNv
bnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRp
bmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMs
IHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBj
b25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRC
bG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3Ry
aW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwg
bV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwog
ICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCiAgICAgZW1p
dExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJs
ZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKQEAg
LTEwNjgsNyArMTA2OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0
aW8KICAgICAvLyBFdmVuIHRob3VnaCBKSVQgY29kZSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0
aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRl
cnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZl
dGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBmb3IgKGludCBpID0gQ29kZUJs
b2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkg
PCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCisgICAgZm9yIChpbnQgaSA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBpIDwg
bV9wcm9maWxlZEJsb2NrLT5udW1WYXJzKCk7ICsraSkKICAgICAgICAgZW1pdFN0b3JlKHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGkpLCBqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW50
ZXIpOwpAQCAtMTA4Nyw3ICsxMDg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNv
bnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUg
PSBieXRlY29kZS5tX2NhbGxlZTsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hl
ZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2Fs
bGVlUmVnID0gcmVnVDA7CkBAIC0xMTIyLDcgKzExMjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
cmVhdGVfdGhpcyhjb25zdCBJbnN0CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRT
dHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzUmVnaXN0ZXIgPSBieXRlY29kZS5tX3NyY0RzdDsKIApAQCAtMTE0NSw3ICsx
MTQ1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydQogdm9pZCBK
SVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
cm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRh
ZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUg
PSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTIzOSw3ICsxMjM5LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIGVtaXRMb2Fk
VGFnKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMSk7CiAgICAgSlNWYWx1ZVJlZ3MgdGhpc1Jl
Z3MocmVnVDEsIHJlZ1QyKTsKICAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
cmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
dGhpc1JlZ3MsIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRo
aXNSZWdzLCByZWdUMywgbV9wcm9maWxlZEJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0
LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3Rh
bnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50
KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3Jl
NjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkp
OwotICAgICAgICBlbHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0
YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAg
ICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3Qp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChz
cmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7
CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NywzNyArOTAsMzUg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9u
UHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFs
T2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAg
IEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5
PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsK
ICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2Ny
YXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CiAK
LSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRlcmZs
eSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JS
ZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93
Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0p
OwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3Io
KSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5l
d09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVSZWcp
OworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3Rl
ZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJ
VEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRl
cmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVy
ZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7Cisg
ICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7Cisg
ICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVn
VDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09i
amVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0
cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5l
d09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0xMzEsNyArMTMyLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCiAgICAgLy8gV2UgZG9uJ3Qg
anVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1
bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFz
SW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7
CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBy
ZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2Z1
bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKSkpOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOwogCkBAIC0xNTQsMzAgKzE1NiwzOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
dG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChi
YXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0g
ICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRo
IHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3RvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgdmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BS
KTsKICAgICAKICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0
IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wu
aGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1
ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5j
ZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAg
ICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJl
Z1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAv
LyBwcm90bwotICAgICAgICByZWdUNSwKLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRj
aAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAg
ICByZXN1bHRHUFIsCisgICAgICAgIHZhbHVlR1BSLAorICAgICAgICBwcm90b0dQUiwKKyAgICAg
ICAgc3R1YkluZm9HUFIsCisgICAgICAgIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2Ny
YXRjaDEsIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAg
IAorCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQgKzIw
MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRp
bWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAs
IHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1Qx
KTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBh
cmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxk
ZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJl
ZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9u
KikKQEAgLTI0MCw3ICsyNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZp
bmVkKGNvCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzgzLDkgKzM5Miw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jl
dF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7Ci0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3Rl
ckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC00
MTEsNyArNDIwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwog
CiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NDIsMTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1
bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFt
ZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQUjIp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ3NCwxMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7Cisg
ICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNDkxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRo
ZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0
byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1MzAsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwg
Y2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJl
LgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVy
bywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
MCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNx
dWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU1NCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAgICAvLyBGaXJz
dCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0
IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qw
KTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdh
c05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs1OTMsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9w
dHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRl
ciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBB
U1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAg
ICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVs
cGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIo
c3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAm
bWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29k
ZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFs
ID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEo
VHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZI
YXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGlu
ayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2MzQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUo
Y29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVn
VDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZh
bHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAo
YnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
Z2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJn
ZXQpOwpAQCAtNjQwLDcgKzY1MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3co
Y29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJh
bWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVy
KHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
YXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzcyMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93
KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJh
dG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAt
NzIwLDcgKzczMiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
IAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIGppdC5sb2Fk
UHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRHUFIwKTsKKyAg
ICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYXJndW1l
bnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIg
PSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyArOTIwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJl
Z1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5MzEsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKQEAgLTkzMSw3ICs5NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3Qg
SW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDAp
OwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVy
KHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9
IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBA
IC05NzgsNyArOTkyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3Ry
dQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RW
UmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTkz
LDcgKzEwMDcsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSks
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIp
LCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFdoZW4gdGhlIExMSW50IHRocm93cyBhbiBl
eGNlcHRpb24sIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFkeSB0aWVyZWQgdXAK
KyAgICAvLyB0byBiYXNlbGluZSwgYW5kIHdlJ2xsIGNhdGNoIHRoYXQgZXhjZXB0aW9uIGluIHRo
ZSBiYXNlbGluZSBKSVQuIEJlY2F1c2UgdGhlIExMSW50IHVzZXMKKyAgICAvLyB0aGUgYSBkaWZm
ZXJlbnQgdmFsdWUgaW5zaWRlIHNfY29uc3RhbnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdlIHJl
c3RvcmUgYWJvdmUgbWF5IG5vdAorICAgIC8vIGNvbnRhaW4gdGhlIGNvcnJlY3QgdGhhdCByZWdp
c3Rlci4gU28gd2UgcmVwbGVuaXNoIGl0IGhlcmUuCisgICAgeworICAgICAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZz
ZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworICAgIH0KIAogICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNl
cHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24g
PSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyArMTAz
NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8g
YXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0Ywog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEu
bV9idWZmZXI7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAg
ICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0
Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENh
dGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0
Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAg
IGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVH
UFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMp
OwotICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1
ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmls
ZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJv
ZmlsZSksIHJlZ3MpOwotICAgICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCiB9CiAKQEAgLTEwNTMsOCArMTA2NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9p
bW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUu
bV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3Rp
bmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0
IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVC
bG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAg
ICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUlu
ZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtl
ZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsxMDkz
LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBj
cmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0
Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxl
JiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
c3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0
Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0
Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVu
bGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJl
Z1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktl
eVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5r
bm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1bmxp
bmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0
clRhZyk7CiB9CiAKQEAgLTEwOTksMjAgKzExMTIsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRl
Y29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2gg
ZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5r
ZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJl
Y29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJl
Y29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRU
YWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBl
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJs
ZUluZGV4KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRH
UFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BS
LCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2NrKCkt
PmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDApOwog
ICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50
PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGlu
ayh0aGlzKTsKQEAgLTExMzMsNyArMTE0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwo
Y29uc3QgSW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQ
dHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRl
ID0ganVtcCgpOwpAQCAtMTE0OCw3ICsxMTYzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVs
bChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTExNjYsNyArMTE4MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0
IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90
RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0g
anVtcCgpOwpAQCAtMTE4OCwxMiArMTIwMiwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihj
b25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0s
IHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFs
ZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2Jq
ZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBjb3Vu
dCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+bnVtVmFycygpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAg
ICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNl
QXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5pdFJl
Z2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJhcnJp
ZXIobV9jb2RlQmxvY2spOworICAgIAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7CiAK
ICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEyMTIsNyArMTIy
OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQu
cHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0xMzEwLDIzICsxMzI2LDE5IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJ
RCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2Fj
aGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0
ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVk
Q2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJ
RCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7
CkBAIC0xMzQyLDcgKzEzNTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25z
dCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRh
OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJl
RGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVn
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkg
LSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRy
KGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRDYWxs
ZWUoKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVl
cyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlND
ZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBoYXNT
ZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzODQsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwg
SlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEzOTUs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0z
MigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJl
Z3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcgKzE0MDgsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIs
IHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxNDE5LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsxNDM0
LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZp
cnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZh
bHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIz
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVS
ZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE0MzAsNyArMTQ0Nyw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVC
bG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1
enppbmcoKSAmJiBtX3VubGlua2VkQ29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1
enppbmdFYXJseVJldHVybigpKSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZtKCkuZ2V0
TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9hZFB0cihw
dHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2hQdHIoQmVs
b3csIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRl
TG9vcHNMaW1pdCgpKSk7CkBAIC0xNDQwLDcgKzE0NTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9s
b29wX2hpbnQoY29uc3QgSW5zdHJ1CiAjZWxzZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwog
I2VuZGlmCi0gICAgICAgIG1vdmVWYWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJl
c3VsdFJlZ3MpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkpOwog
ICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgICAgICBlbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0xNDUz
LDggKzE0NzAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAK
ICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2FuQmVP
cHRpbWl6ZWQoKSkgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3Np
dGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1l
bnRGb3JMb29wKCkpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5h
ZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQogfQog
CkBAIC0xNTA5LDcgKzE1MjcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMo
Y29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRy
YXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTUyMiw3ICsxNTQxLDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2NoZWNr
X3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJl
Z2lzdGVyczo6ZWJwKTsKQEAgLTE1NjQsMzQgKzE1ODMsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdl
eHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IGFyZ3VtZW50
R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1fdW5saW5r
ZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRz
dCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklU
OjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChi
eXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1f
c2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1
bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVj
bCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OkZ1bmN0aW9uRGVjbCwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChj
b25zdGFudCwgYXJndW1lbnRHUFIyKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9w
Y29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVj
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09
IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09
IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fz
eW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQg
PT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9
CiB9CiAKQEAgLTE2MjEsMjMgKzE2NDIsMjQgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNv
bW1vbihjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwg
YXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2Nv
cGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1l
bnRHUFIxKTsKICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1f
Y29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1
dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpG
dW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pihi
eXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFy
Z3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3
X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdH
ZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9w
X25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
c3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1Qw
LCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwog
ICAgIH0KIH0KIApAQCAtMTY2NCwyOSArMTY4NiwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRl
Y29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJl
Z1QwLCBzaXplKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQUjIpOwor
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheTo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMiwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19h
cnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0
aFNpemU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZt
ZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRh
dGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmd1bWVudEdQUjIpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIpOwogI2Vsc2UKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMik7CiAgICAgZW1pdExvYWQoc2l6ZUluZGV4LCBy
ZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIHJl
Z1QzLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApAQCAt
MTY5NCw4ICsxNzE3LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUo
Y28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgbV9pc1NoYXJlYWJsZSA9IGZhbHNlOworCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2sp
OwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBl
TG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUu
bV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE3NzcsMjAgKzE4MDIsMjUgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQobm9u
QXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHBy
b2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBzaGFk
b3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIw
OyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNj
cmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBz
aGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgeworICAgICAg
ICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24t
YXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwor
ICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywg
c2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVn
VDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5kaWYg
Ly8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zs
b3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBtX2lzU2hh
cmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlvbiog
YmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgq
dGhpcyk7CkBAIC0xODYwLDcgKzE4OTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1l
bnQoY29uc3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwog
CiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE4ODYsNyArMTkxNiw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlwZSh2
bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93
Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFyaXRoUHJvZmls
ZS5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJDYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNs
dWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAj
aW5jbHVkZSAiREZHT1NSRW50cnkuaCIKQEAgLTI4NTUsNyArMjg1Niw3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQgPSBs
aW5rZWRUYWJsZS5tX2N0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIApAQCAtMjg4MCw3
ICsyODgxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAg
IEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBs
ZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJs
b2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29k
ZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4p
OwogICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoa2V5LmlzSW50MzIoKSkKQEAgLTI5MDMsNyAr
MjkwNCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHZvaWQqIHJl
c3VsdDsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2Nr
LT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5nSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CiAKICAgICBpZiAoa2V5LmlzU3RyaW5nKCkpIHsKICAgICAgICAg
U3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmluZyhrZXkpLT52YWx1ZShnbG9iYWxPYmplY3QpLmlt
cGwoKTsKQEAgLTI5MTksNyArMjkyMCw2IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25Td2l0Y2gKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsK
IH0KIAotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1ZSwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RydWN0aW9uKiBwYykpCiB7CiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMjk3MSw3ICsyOTcxLDYgQEAgSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdgogCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXNvbHZlZFNjb3BlKTsKIH0KLSNlbmRpZgogCiBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RydWN0aW9uKiBwYykpCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjgzMDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI5MCw5ICsyOTAsNyBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkdldFByCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaENoYXJX
aXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAo
Vk0qLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1pbikp
OwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5r
bm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXks
IHNpemVfdCB0YWJsZUluZGV4KSk7Ci0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBKU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lLCBF
bmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVj
b2RlUEMpKTsKLSNlbmRpZgogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRG
cm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVj
dGlvbiogYnl0ZWNvZGVQQykpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Q
dXRUb1Njb3BlLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0
ZWNvZGVQQykpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAJKHJl
dmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDEyIEBAIGF1dG8gSklUUGxhbjo6dGllcigpIGNv
bnN0IC0+IFRpZXIKIAogSklUQ29tcGlsYXRpb25LZXkgSklUUGxhbjo6a2V5KCkKIHsKLSAgICBy
ZXR1cm4gSklUQ29tcGlsYXRpb25LZXkobV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUo
KSwgbV9tb2RlKTsKKyAgICBKU0NlbGwqIGNvZGVCbG9jazsKKyAgICBpZiAobV9tb2RlID09IEpJ
VENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpCisgICAgICAgIGNvZGVCbG9jayA9IG1fY29kZUJs
b2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgIGVsc2UKKyAgICAgICAgY29kZUJsb2NrID0g
bV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICByZXR1cm4gSklUQ29tcGls
YXRpb25LZXkoY29kZUJsb2NrLCBtX21vZGUpOwogfQogCiBib29sIEpJVFBsYW46OmlzS25vd25U
b0JlTGl2ZUFmdGVyR0MoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
aWQoY29uc3QKIAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExv
YWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlJZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgbV9wcm9maWxlZEJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSku
aW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyLDcg
KzcyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdAogCiAgICAg
ZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVy
LCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihw
cm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeUlkLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdU
MSwgbV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMs
IHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg3LDcgKzg3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGVtaXRMb2FkUGF5
bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwog
ICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1Q0KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlclNldHRlciwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdU
MSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlcywg
cmVnVDMsIHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRl
ciwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmlsZWRCbG9j
ay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGVzLCByZWdUMywgcmVnVDQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwg
cmVnVDIpOwogICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRM
b2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dEdldHRlckJ5VmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJl
Z1QyKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9h
ZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRT
ZXR0ZXJCeVZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmls
ZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKU1ZhbHVl
UmVncyBiYXNlUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CkBAIC0xMzEsOCArMTMx
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRM
b2FkKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkpOwogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSk7CiAg
ICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBtX3Byb2ZpbGVkQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLAogICAgICAg
ICBiYXNlUmVncywgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgcmVnVDQpOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29u
c3QgSW5zdHIKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHksIHByb3Bl
cnR5UmVncy50YWdHUFIoKSk7CiAKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKICAgICAgICAgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgcmVzdWx0UmVncywgSW52YWxp
ZEdQUlJlZywgcmVnVDQpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAt
MjAyLDcgKzIwMiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkK
IAogICAgIGVtaXRMb2FkMihiYXNlLCBiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9h
ZEdQUigpLCBwcm9wZXJ0eSwgcHJvcGVydHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5
bG9hZEdQUigpKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVs
ZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VS
ZWdzLnBheWxvYWRHUFIoKSksIEpTVmFsdWVSZWdzKHByb3BlcnR5UmVncy50YWdHUFIoKSwgcHJv
cGVydHlSZWdzLnBheWxvYWRHUFIoKSksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2Rl
LnZhbHVlKCkpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0
ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhiYXNlUmVncy50YWdHUFIoKSwgYmFz
ZVJlZ3MucGF5bG9hZEdQUigpKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlSZWdzLnRhZ0dQUigpLCBw
cm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCByZXN1bHRSZWdzKTsKQEAgLTIxNiw3ICsy
MTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9kZWxfYnlfaWQoY29uc3QgSW4KIAogICAgIGVtaXRMb2FkKGJhc2UsIGJhc2VSZWdzLnRhZ0dQ
UigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52
YWx1ZSgpKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVC
eUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCiAgICAgYm94
Qm9vbGVhbihyZWdUMCwgcmVzdWx0UmVncyk7CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwpAQCAtMjQ5LDcgKzI0OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHIKICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QxKTsKICAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCBwcm9maWxlLCByZWdUNCk7CiAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAgICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDQpOwpAQCAtMjU3
LDcgKzI1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAg
ICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIG1fcHJv
ZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICAgICAg
SlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJ
c0ludDMyID0gdHJ1ZTsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfdmFsKGNvbnN0IEluc3RyCiAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEs
IHJlZ1QwKTsKICAgICB9CiB9CkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsK
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZh
bD4oKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAg
ICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2sp
OwogICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21f
Z2V0QnlWYWxJbmRleF07CkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgICAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZEJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmls
ZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAg
ICAgfQogfQpAQCAtMzA1LDEzICszMDUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdAogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2
YXRlTmFtZSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCByZXN1bHRSZWdz
LCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQo
Z2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9y
ZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0K
IApAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9u
YW1lKGMKIAogICAgIGF1dG8gYmFzZUdQUiA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAg
ICAgYXV0byBwcm9wZXJ0eUdQUiA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBwcm9wZXJ0eUdQUik7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC0zNDgsNyAr
MzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZh
bGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJ
c1N5bWJvbCA9IHRydWU7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtMzc3
LDcgKzM3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAg
ICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KTsKIAogICAgIGF1dG8gb3BlcmF0
aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRl
RmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgdmFs
dWVSZWdzLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9wcm9maWxl
ZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHZhbHVlUmVn
cywgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwogCiAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTM5NSw3ICszOTUs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpKTsKIAogICAgIEpJ
VFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3Byb2ZpbGVk
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJy
YW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIGJh
c2VSZWdzLCBicmFuZFJlZ3MsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNDE4
LDcgKzQxOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAg
ICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNj
ZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleF07CiAgICAgKyttX3ByaXZhdGVCcmFuZEFj
Y2Vzc0luZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGJhc2VSZWdzLCBicmFuZFJlZ3MpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgYnJhbmRSZWdz
KTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQog
CkBAIC00MzUsNyArNDM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFu
ZChjbwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNlUmVncy50YWdH
UFIoKSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVj
a1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKICAgICAgICAgYmFzZVJlZ3MsIGJyYW5kUmVncywgSW52YWxpZEdQUlJlZyk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CkBAIC00NTIsNyArNDUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2No
ZWNrX3ByaXZhdGVfYnJhbgogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2Vu
ID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4XTsKICAg
ICArK21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgYnJhbmRSZWdzKTsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRy
dXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBiYXNlUmVncywgYnJhbmRSZWdzKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC00NjUsNyArNDY1LDcgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTQ3OCw3
ICs0NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUNiwgcmVnVDcpOwogCiAg
ICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0
KSwgcmVnVDYsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNTA0LDcgKzUwNCw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gSklUOjplY21hTW9kZShieXRlY29kZSk7Ci0gICAg
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAg
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7
CiAgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIApA
QCAtNTI0LDcgKzUyNCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEkKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDIsIHJlZ1QxLCBwcm9wZXJ0eSwgcmVnVDMsIHJl
Z1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsKIAotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUp
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdz
KHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1Q1LCByZWdUNCksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlKTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25T
dHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1
c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUpOwogCiAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTUzNCw3ICs1MzQsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNTQyLDEzICs1NDIsMTMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDAp
LCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAg
ICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywg
SW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBy
ZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTU1OCwxMyArNTU4LDEzIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRy
eUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgCiAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTU3NSw3ICs1NzUsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNTgzLDEzICs1
ODMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHko
cmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGly
ZWN0KTsKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJv
ZmlsZWRCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVz
dWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRC
bG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BS
KCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtNTk5LDEzICs1OTksMTMgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2Zp
bGVkQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC02MTQsMTAgKzYxNCwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTYzMCwxMyAr
NjMwLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5
KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
CisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVk
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJl
Z3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwog
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCByZXN1
bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTY0NiwxMyArNjQ2LDEzIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8o
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwogfQpAQCAtNjYzLDcgKzY2Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKICAgICAKICAgICBlbWl0TG9hZChi
YXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKHRoaXNWUmVnLCByZWdUNCwgcmVnVDMp
OwpAQCAtNjczLDEzICs2NzMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyhjbwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJl
c3VsdFJlZ3MsIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1Q0LCByZWdUMyksIEludmFsaWRHUFJSZWcpOworICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBK
U1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMp
LCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzV2l0aFRoaXMu
YXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBl
bWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIo
KSk7CiB9CiAKQEAgLTY4OSwxMyArNjg5LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZv
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyks
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzEwLDE1ICs3MTAs
MTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2Zs
YWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKICAgICAKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCB2YWx1ZSwg
cmVnVDMsIHJlZ1QyKTsKICAgICAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAg
ICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAq
aWRlbnQpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpLCBJbnZhbGlkR1BSUmVnLAogICAgICAgICByZWdUMSwgYnl0ZWNv
ZGUubV9mbGFncy5lY21hTW9kZSgpLCBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5k
OjpOb3REaXJlY3QpOwogICAgIApAQCAtNzM4LDcgKzczOCw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfaWQoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKIApAQCAtNzQ4LDcgKzc0
OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBKSVRQ
dXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwogICAg
IAogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCi0gICAgICAgIGdlbi5zbG93UGF0aEZ1
bmN0aW9uKCksIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlv
bigpLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJv
ZmlsZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03NTgsMTQgKzc1OCwxNCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CisgICAgICAgIG1fcHJvZmlsZWRCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFs
aWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKQEAg
LTc3OSwxMyArNzc5LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJ
bnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9w
cm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJ
VEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmls
ZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAKICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzk2LDcg
Kzc5Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnUKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRCbG9jayk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwogCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJv
cGVydHksIHJlZ1QzLCByZWdUMik7CkBAIC04MDQsNyArODA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
ICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CkBAIC04MTksMTQgKzgxOSwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJs
b2NrKTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZh
bEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtODM3LDcgKzgzNyw3IEBAIHZvaWQgSklUOjpl
bWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC04NTMsNyArODUzLDcgQEAgdm9pZCBK
SVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaQogICAgIEpJVEluQnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUg
PT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9w
dGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1l
ID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVC
cmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC04OTAsNyArODkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRW
YXJJbmplY3Rpb25DaGVjayhib29sIG5lZQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25X
YXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9w
cm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5h
ZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0
aCkKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1
YWxSZWdpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Nj
b3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZTsKQEAgLTkxNiwxMSArOTE2LDExIEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUo
Y29uc3QgSW4KICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6
OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKKyAg
ICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2ZpbGVkQmxvY2spOwogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7
Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRy
ZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKICAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7CiAgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKICAgICAg
ICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CkBAIC05MzEsNyArOTMxLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IAogICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25z
dGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CisgICAgICAg
ICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNv
ZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZEJsb2NrKTsKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwpAQCAtMTAzOSw3ICsx
MDM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKQEAgLTExNDYsNyArMTE0Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7
CiB9CiAKQEAgLTExNTYsNyArMTE1Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJv
bV9zY29wZShjb24KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBvcGVyYXRpb25HZXRGcm9t
U2NvcGUsIGRzdCwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBv
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKQEAgLTEx
OTAsNyArMTE5MCw3IEBAIHZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMK
IHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUu
bV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwog
ICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwpA
QCAtMTIwMiw3ICsxMjAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IElucwogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3Bl
LCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9u
LgogICAgICAgICAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7CiAgICAgICAgICAg
ICAKQEAgLTEyMTcsNyArMTIxNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShj
b25zdCBJbnMKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgog
ICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNT
Y29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZEJs
b2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAg
ICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CkBAIC0xMzE4LDcgKzEzMTgsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBz
bG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3Ry
aWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0
aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFRvU2NvcGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTEzMzMsNyArMTMzMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBlbWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdU
MCk7CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9m
ZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNl
dCksIHJlc3V0bFJlZ3MudGFnR1BSKCkpOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgKyBQYXlsb2FkT2Zmc2V0KSwgcmVzdXRsUmVncy5wYXlsb2FkR1BSKCkpOwot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1dGxSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3V0bFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJl
c3V0bFJlZ3MudGFnR1BSKCksIHJlc3V0bFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtMTM1
NSw3ICsxMzU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdAog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9u
IDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5MiArNDksMTA0IEBAIG5hbWVzcGFjZSBKU0Mgewog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAg
ICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5
VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25z
OjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CisgICAgICAgIGF1dG8gbm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
bm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQ
UiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnJlc3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1
bHRSZWdzLCByZWdUMik7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKICAgICAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5m
bygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisKKyAgICAgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOwor
ICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBl
eGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKworICAgICAg
ICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAg
fQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+CiB2b2lkIEpJVDo6Z2VuZXJh
dGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMo
aXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgr
K107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlW
YWxJbmRleCsrXTsKIAotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1l
dGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1Qw
LCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBhcmd1
bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHks
IGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
Y29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIp
OworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNl
Ci0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICBBU1NFUlQoQnl0ZWNv
ZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9
PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNl
ZC4KLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwot
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGJh
c2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFy
ZzEgYXJnMSBhbHJlYWR5IHVzZWQuCisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0g
YXJndW1lbnRHUFIyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIHN0YXRpY19hc3Nl
cnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UgPT0gcmVnVDApOworICAgIHN0YXRpY19hc3NlcnQo
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkgPT0gcmVnVDEpOwogCi0gICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKLSAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5
cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVy
blZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0x
NDksNyArMTYxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3Qg
YmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcv
RlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3Rz
LCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAg
ICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJu
QWRkcmVzcygpOwpAQCAtMTYwLDggKzE3Miw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFy
Z3VtZW50R1BSNTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGlj
X2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0
aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKQEAgLTE4NywzNCArMTk5
LDQwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAg
ICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5m
b0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpHZXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewogICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKQEAgLTIyMyw5ICsyNDEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2
YXRlX25hbWUoYwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldFBy
aXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFt
ZU9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1NSwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9w
dGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0
UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yNjQs
NyArMjc4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRk
cmVzcygpOwpAQCAtMzAwLDIxICszMTQsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZh
dGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7
Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgYnJhbmRHUFIgPSByZWdU
MTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwotCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhi
cmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5k
R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBXZSBzaG91
bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUt
YmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC0zMjQsMTcgKzM0NSwyMiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1pdFdyaXRlQmFycmllcihi
YXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9w
cml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rp
b24pOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVFByaXZhdGVCcmFu
ZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVC
cmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGlt
aXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxk
ZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1l
bnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMzQ0LDI0ICszNzAsMTggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAg
c3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUo
b3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rp
b25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1
bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZgogCi0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTM3MCwzMyArMzkwLDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZh
dGVfYnJhbmQoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihicmFuZCwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJh
bmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpz
dHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRT
bG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhi
cmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQ2hlY2tQcml2YXRlQnJhbmQ+KCk7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVj
b2RlKTsKKwogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2
YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsK
KyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0
aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTQw
NiwyNCArNDQwLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4K
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8v
IGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRS
ZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1
bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1
bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUp
Pjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2
YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTQzNSwzMCArNDYzLDQzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDMpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2
YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpwcm9maWxlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHByb2ZpbGVH
UFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1l
dGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKIAogICAgIEpJVFB1
dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0KTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIHByb2ZpbGVHUFIsIHN0dWJJbmZvR1BSKTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChwcm9wZXJ0eSkpCiAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIg
PSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0
QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRC
eVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAg
c3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7
IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkg
cmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4p
OwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJy
aWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MTUsMTIgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBF
Q01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsK
IAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5
dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTM2LDE2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0
IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihp
c0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUp
IDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXpl
IDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlz
RGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisg
ICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJv
ZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0
aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFI0LCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgYXJndW1l
bnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUxMiw3ICs1NTks
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAgIGF1dG8gb3Bl
cmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwpAQCAtNTIz
LDcgKzU3MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUzMywxOCArNTgwLDI0IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJl
Z1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZChCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnBy
b2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDQpKTsKKyAgICAgICAg
QVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAgfQorCiAKICAgICBqaXQuc3RvcmUz
MihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpAQCAtNTcwLDIwICs2MjMsMzEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAg
SklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0
ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZTsK
KyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAg
IC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBh
IGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2NTgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
cHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9u
YW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKLSAgICBQcml2YXRlRmllbGRQdXRL
aW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJl
bnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRC
eVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02MDMsMTMgKzY2NiwxNSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlv
blB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQg
bm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VH
UFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIo
bnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0UHJpdmF0ZU5hbWU+KCk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BS
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1
bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShv
cGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1
bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJn
dW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjg3LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0g
YXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQpAQCAtNjQzLDE0ICs3MDIsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQu
dGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1QzOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIApAQCAtNjgwLDcgKzcz
OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qg
b3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBt
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwo
KSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02ODksNyArNzQ5
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBv
cHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
aW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgp
LCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0
dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02OTks
NyArNzYwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAg
IGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0
dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC03MDksNyArNzcxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwg
YXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEs
IGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcxOSw3ICs3
ODIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50
MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0
ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTcyNywyMyArNzkxLDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRD
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRH
UFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6
OnNjcmF0Y2g7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKICAgICBKSVRE
ZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQ
Uik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpEZWxldGVCeUlEOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJv
eEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJ
QyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNl
IGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5k
IG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAt
NzU5LDE1ICs4MzMsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJ
bgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9k
ZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQ
UjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpPihB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUu
bV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC03ODEsMjQgKzg1NywxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0
IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKQEAgLTgwOCw3ICs4NzksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAg
ICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC04NDUsMjIgKzkxNiwzMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3Bl
cnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHBy
b3BlcnR5KTsKKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnM6OnNjcmF0Y2gpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVl
UmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBl
bmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAg
ICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlm
IGEgYmFzZSBpcyBjZWxsLgpAQCAtODgzLDkgKzk2NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlW
YWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21h
TW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BS
Myk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAg
ICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpPihB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQgKzk4MywxOSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2Rl
R1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUu
dmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFs
dWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAg
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQpAQCAtOTI2LDcgKzEwMDUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgog
ICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGds
b2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGpp
dC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIgKzEwNDAsMzEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBl
OjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5
R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4p
OwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcp
OwogfQogCkBAIC05ODYsMTQgKzEwNzQsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21f
Z2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUo
b3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xMDAzLDI2ICsxMDk0LDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lk
KGNvbnMKICAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3Vt
ZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVy
dHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKSwg
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uVHJ5R2V0
QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAzMCwyMiArMTEx
NSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnJlc3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0
UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwg
QWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiArMTE0OCwxOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1tt
X2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVj
dE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTA3Myw4
MyArMTE2OSw2MiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
c2FtZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpLCBkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsK
LSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogICAgIAogICAgIGlm
ICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkgewotICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90
RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgp
KSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgJm1ldGFk
YXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUsIHJlZ1QxKTsK
KyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6
Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhOjpvZmZzZXRPZk1v
ZGUoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJh
bmNoMzIoTm90RXF1YWwsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlk
TW9kZTo6QXJyYXlMZW5ndGgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZN
b2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZB
cnJheVByb2ZpbGUoKSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVu
Z3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVn
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhp
c1ZSZWcpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHVi
SW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlz
LmFwcGVuZChnZW4pOworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQg
aGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dD
YXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2ICsxMjMzLDE4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4o
Ynl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3NywyNiArMTI1NCw1OCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMzsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJv
cGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5k
Q2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVH
UFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVH
UFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRX
aXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1Zh
bHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworCisgICAgSklUR2V0QnlJZFdpdGhUaGlz
R2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNv
bnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRz
V2l0aFRoaXMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcp
OwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjA2LDcgKzEzMTUsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBA
IC0xMjQxLDE2ICsxMzUwLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhp
c0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5k
ZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIGFyZ3VtZW50
R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdl
dEJ5SWRXaXRoVGhpc09wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI4ICsxMzcyLDIyIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BS
ID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlk
V2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0g
QmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2Vy
dCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlz
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyOTEsNyAr
MTM5Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKQEAgLTEzMjksMjMgKzE0MzUsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8vIElu
IG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9i
amVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIg
dGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVn
aW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJl
ICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJl
Z1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0
QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVHUFIp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAK
ICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVj
b2RlKSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUp
LAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Qp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6UHV0QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVjdCA/
IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNt
YU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQg
T1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKICAgICAv
LyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBi
YXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsxNDgwLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRo
RnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRH
UFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RP
cHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMzc2LDI1ICsxNTAxLDE5
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYWxyZWFk
eSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fz
c2VydCh2YWx1ZUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IGdlbi5zbG93UGF0aEZ1bmN0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChnZW4uc2xvd1BhdGhGdW5jdGlvbigpKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTE0MDQsNyArMTUyMyw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE0NDEsMjAgKzE1NjAs
MzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BS
ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDEpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5f
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0NjMsMTQgKzE1OTMsMTcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9u
PGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CkBAIC0xNDgwLDI4ICsxNjEzLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9p
ZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVy
dHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgLy8gc2xvd19v
cF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2Ug
bmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0
ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0
eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2MzcsMzMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdU
MCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJ
bkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NzIsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5C
eVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSNCk7Cisg
ICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpPihBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
CkBAIC0xNTU2LDU5ICsxNjk0LDcwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwo
Y29uc3QgSW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fz
c2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBv
aW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8v
IFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3Qg
dG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlv
bkdldEJ5VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkK
IHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBw
cm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlwZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZp
cnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFu
ZCk7CisgICAgVU5VU0VEX1BBUkFNKGJhc2UpOworICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7
CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVO
YW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIAogICAgIEpJVElu
QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6
Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJh
dGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0
eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc2NywyMSBAQCB2b2lk
IEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BS
ID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0
KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3Nl
cnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5h
bWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6
dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlv
bkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3Bl
cmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9w
dGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUg
OiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTY1Miw3ICsxNzk1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25h
bWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQ
cml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOwor
ICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBi
eXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDIxNSArMTgwOSwxMjcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVC
cmFuZD4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1f
ZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVCcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2so
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7CiAgICAg
aWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRy
dXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChzY3Jh
dGNoR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9G
KEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRj
aHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVu
c2lnbmVkIGRlcHRoKQogewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDAp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQogICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLXZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5
cGU7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKLQot
ICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0gICAg
ICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
LSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGlu
Z0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0
YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR2xvYmFs
VmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAg
ICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRT
Y29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1f
Y29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwot
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRT
Y29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoK
LSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xl
eGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFt
aWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwot
ICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIp
OwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7Ci0KLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3Bl
cnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsK
LQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlz
KTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAg
ZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0jZWxzZSAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFJl
c29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBlOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Nj
b3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVj
b2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJl
Z1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAg
ICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVl
ZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBl
LgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwor
ICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJk
aWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsK
KworICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAg
ICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1
cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgICAg
IH07CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jl
c29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29u
c3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hf
UkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAg
ICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3Bl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7CiAgICAgICAgIH07Ci0jdW5kZWYg
UkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBhdXRvIGdlbmVyaWNSZXNvbHZlU2Nv
cGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5l
cmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9y
ZXNvbHZlX3Njb3BlIGdlbmVyaWMiKTsKKyAgICAgICAgfTsKKworICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDI7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Nv
cGVHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3Bl
R1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRh
dGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihn
ZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgICAg
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAgICBjb2Rl
ID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZSBpZiAo
cHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykK
KyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IHZt
LmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAgIGVtaXRO
YWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmso
Vk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hh
ciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5j
dGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UK
ICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0
IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZH
L0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0
cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcFJlc29sdmVT
Y29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3
OyAvLyBpbmNvbWluZwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsgLy8g
aW5jb21pbmcKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDI7IC8vIGlu
Y29taW5nCisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOyAvLyBpbmNvbWlu
ZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5j
b21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gcmVnVDQ7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29s
dmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFH
UFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zm
c2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0
YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVn
IGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0
aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9i
YWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmpl
Y3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0g
cmVnVDQ7Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0g
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9p
bnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwor
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNF
VE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwor
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMs
IFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdU
MCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKLQotICAgICAgICBMYWJlbCBs
b29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QxKTsKLSAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Nj
b3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsK
LSAgICAgICAgfQotICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvVmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHNjb3BlR1BSID09IHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZMb2NhbFNjb3BlRGVwdGgoKSksIHJlZ1QxKTsKKworICAg
ICAgICBMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGppdC5i
cmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LnN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhsb29w
LCAmaml0KTsKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgIH07CiAKICAgICBhdXRvIGVt
aXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewpAQCAtMTg4MiwxMiArMTkz
NywxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAg
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxP
YmplY3RHUFIpOwotICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1Qx
KTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxC
aW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQ
UiwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
ICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdU
MSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGlu
Z0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAt
MTg5NywxMSArMTk1MSwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBs
b2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAogICAgICAgICAg
ICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZpcm9u
bWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25t
ZW50KCkpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCBy
ZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1
cmVWYXI6CkBAIC0xOTA5LDcgKzE5NjMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6
CkBAIC0xOTE5LDgzICsxOTczLDQ1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
cmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwot
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0g
ICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpy
ZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwor
ICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRP
ZlJlc29sdmVUeXBlKCkpLCByZWdUMSk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmso
dGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CisgICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKSB7CisgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlKTsKKyAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgICAgICBub3RDYXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7Cisg
ICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFs
TGV4aWNhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAotICAgIHJldCgpOworICAgIGpp
dC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVO
S19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5k
bGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0g
ICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VI
YW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9SRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6Om9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2
bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wUmVz
b2x2ZVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAg
ICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BSZXNvbHZl
U2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlXyIgI3Jl
c29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfUkVTT0xW
RV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9S
Ci0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3Jl
c29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0
ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxp
bmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
ICAgIC8vIFRoZSBmYXN0IHBhdGggYWxyZWFkeSBwdXNoZWQgdGhlIHJldHVybiBhZGRyZXNzLgog
I2lmIENQVShYODZfNjQpCkBAIC0yMDM0LDcgKzIwNTAsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVj
aywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJC
YXNlbGluZTogc2xvd19vcF9yZXNvbHZlX3Njb3BlIik7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCiB7CkBAIC0y
MDYyLDI3NiArMjA3NywxMzMgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxS
ZWdpcwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsK
IH0KIAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1
cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVp
bnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRh
ZGF0YS5tX29wZXJhbmQpOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKLSAgICAgICAgc3dpdGNoIChyZXNv
bHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUg
Y2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJl
cyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2
ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAg
ICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVn
VDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRh
PEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJh
bmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSkpOwotICAgICAgICAgICAgfSkpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAg
QVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7
CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29k
ZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgICAgICAgICBsb2FkMzIob3Bl
cmFuZFNsb3QsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAg
ICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAg
ICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAg
ICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWdu
RXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUlu
ZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQp
Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9j
YXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihz
Y29wZSwgKm9wZXJhbmRTbG90KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5
bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIE1vZHVs
ZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KKyAgICBhdXRvIGNsb3N1cmVWYXJH
ZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9z
Y29wZSBDbG9zdXJlVmFyIik7CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
LSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVU
eXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBl
bWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUp
OwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsK
LQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotCi0gICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0Ogot
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEZyb21T
Y29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1
cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLSNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3Bl
OwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJl
c29sdmVUeXBlKCk7CisgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dl
bmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdl
dEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJh
c2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKIAotICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBhdXRv
IGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJl
dHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAi
QmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCi0gICAgY29u
c3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NvcGVHUFIgPSByZWdUNjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVn
VDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAotICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBHbG9iYWxWYXIpIHsKLSAgICAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0gICAgICAgIGVt
aXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCks
IHJlZ1QwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQg
PSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgcHRy
ZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5v
ZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0jZGVmaW5lIEdFVF9GUk9NX1NDT1BF
X0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMj
R2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9y
c1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKEdFVF9GUk9NX1NDT1BF
X0dFTkVSQVRPUikKLSAgICAgICAgfTsKLSN1bmRlZiBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLSAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwotICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBl
XSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBl
ID09IENsb3N1cmVWYXIpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJH
ZW5lcmF0b3IpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICBlbHNlCisgICAg
ICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IpOwor
CisgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVu
ayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBj
aGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1
bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVz
ZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmpl
Y3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBE
RkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmpl
Y3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBz
Y29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRG
cm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKLQotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKLQotICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJs
ZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNj
b3BlR1BSID0gcmVnVDI7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCi0gICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BS
UmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSB7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCBy
ZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICAgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwotICAgIH07CisgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKKworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0
cihyZWdUMywgbWV0YWRhdGFHUFIpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBh
dXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1f
dmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0
YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNU
X09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVn
VDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3Mo
cmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0lu
dmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50
ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJl
ZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRl
ciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVn
LCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJS
ZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
MSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1t
MzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIp
OwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1p
dENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZv
ck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUg
Y2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJl
cyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2
ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLQotICAgICAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBv
ZmZzZXQgPSByZWdUMTsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJl
Z1QyOwotCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsm
XSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAg
ICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3
ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVj
dC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2
YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgcmVnVDEp
OworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJl
Z1QxKSk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQoc2Nv
cGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
KyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpp
dC5icmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAK
LSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1Qx
KTsKKwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAg
SnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBU
cnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBhYm9y
dFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAgICAgICAgIGlz
T3V0T2ZMaW5lLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9
IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoZmly
c3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29u
KEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5s
aW5rKCZqaXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJh
c2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAg
bmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zm
c2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1l
c0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpLCByZXN1bHQpOworCisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjb3BlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQu
bmVnMzIocmVnVDEpOworICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCBy
ZWdUMSk7CisgICAgICAgICAgICBqaXQubG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAg
ICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJh
bmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDAp
OworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAg
aml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwg
cmVnVDMpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsK
KyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFH
UFIsICBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMyk7CisgICAgICAgICAgICBz
dGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIGpp
dC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5hZGRQ
dHIoc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDMsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOwor
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0
Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1
cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM0MSw4NiArMjIxMyw2MyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9
OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6
Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAg
ICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8v
IExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5Lmxpbmso
dGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4
aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2
ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVW
YXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9h
ZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwgcmVnVDApOworICAgICAgICBq
aXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwot
ICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAg
ICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlz
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZh
cik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEds
b2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5q
dW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7
CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
KyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBlbWl0Q29kZShH
bG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7Cisg
ICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0
Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluaygmaml0KTsKIAotICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmso
JmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9m
QnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChy
ZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsg
VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKIAotICAgIHJldCgpOworICAg
IGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VI
YW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3Ip
OwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dD
YXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVu
ayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRv
cihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRG
b3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07
IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9w
R2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2Nv
cGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklO
RV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BF
X0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRo
dW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJ
bnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVi
cCk7CkBAIC0yNDI5LDcgKzIyNzgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAjZW5kaWYKIAogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6
Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2Rl
T2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKIApAQCAtMjQ0OSw3ICsyMjk4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIENhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9uUHRy
VGFnKTsKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0LmVtaXROb25QYXRjaGFibGVFeGNl
cHRpb25DaGVjayh2bSk7CiAKLSAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZv
OjpudW1iZXJUYWdSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUp
KSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0
T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51
bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKIAogI2lmIENQVShYODZfNjQp
CkBAIC0yNDY5LDg4ICsyMzE4LDc3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICBwYXRjaEJ1ZmZlci5saW5rKGp1bXBUb0hhbmRsZXIsIENvZGVMb2NhdGlv
bkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3df
b3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7
Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9i
YWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5k
aXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsK
LSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdU
MCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0
Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9m
KFJlZ2lzdGVyKSkpOwotfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1
dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0
YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZl
VHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0
cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2lu
Y2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxP
YmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0
aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMg
dmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGlu
ZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVz
b2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qx
LCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFt
YmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAg
ICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3Bl
cmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVy
YW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBz
dG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5k
ZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
c2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAg
ICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAg
ZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAgaWYgKCFpc0lu
aXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAg
ICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKworICAg
ICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKKworICAgICAgICAgICAgaWYgKCFpc0lu
aXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkg
JiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlz
IHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAg
ICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJh
bmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRT
bG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHko
cmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7
CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAg
ICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpT
VmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxl
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1f
d2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2Nv
cGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hw
b2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50
KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENs
b3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAg
ZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1f
d2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxv
YWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNl
dE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwg
cmVnVDIpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBz
dG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOworCiAgICAgICAgICAgICBlbWl0
V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjU2NCw1OCArMjQwMiw1MiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0
UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6
dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAg
IEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJh
bmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBH
bG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFt
aWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5
LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFy
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xv
YmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgLy8gSWYg
YW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJlVmFyLyBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGlsZSB0aGluZ3MKKyAgICAvLyB0aGF0IHdh
eSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3ZlIHByb3ZlbiB0aGF0IGlzIHRoZSB0eXBl
IHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZhciwKKyAgICAvLyBhbGwgQ29kZUJsb2Nr
cyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgorICAgIC8vIGlmIHRoZSB2YXIgaW5qZWN0
aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0IGlzIGZpcmVkLCB0aGVuIHdlIHRha2Ug
dGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAgIC8vIG1hdHRlciB3aGF0IHR5cGUgd2Ug
YXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVW
YXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShSZXNv
bHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qg
c2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDAp
OworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0
YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlw
ZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgSnVtcCBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkp
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAorICAgICAgICBKdW1wIG5vdEds
b2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZh
cikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKHRoaXMpOworCisgICAgICAg
IEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIp
KTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAogICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAg
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwog
CiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmso
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVt
aXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApA
QCAtMjYyNCwxOCArMjQ1NiwyMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3Bl
KGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7
Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgIFJlc29sdmVUeXBlIHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlw
ZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2F3
IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFudGVlZAor
ICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIuCiAgICAgICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3df
c3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0
aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBB
U1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsK
LSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rp
b24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1
bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3ICsyNDg3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7
CkBAIC0yNzAxLDcgKzI1MzYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVu
dHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1Qw
KTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zm
c2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyNTk0LDYg
QEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNp
Z25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkBAIC0yNzY3LDcgKzI2MDEsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVy
bmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdU
MCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjgyMyw3ICsyNjU3LDYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0bwogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwpAQCAtMjgzOSwxMSArMjY3MiwxNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiAgICAgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIG1vZGUgc2V0IHdl
IHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2UgaXQgaWYgd2UgcHJvZmlsZSBpdCBpbiB0aGUg
TExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgeworICAgIGlmIChieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKICAgICAgICAgR1BSUmVn
IGVudW1lcmF0b3JHUFIgPSByZWdUMzsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdU
NDsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9y
R1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJv
LCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMigofkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3Ry
dWN0dXJlTW9kZSkgJiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1h
c2spKSk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisK
KyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1l
dGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgb3IzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1
cmVNb2RlKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaEdQ
UiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0
b3JNZXRhZGF0YSgpKTsKKwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpLCBpbmRl
eEdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwg
aW5kZXhHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSkp
OwogCkBAIC0yODgxLDc4ICsyNzIwLDg4IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jf
bmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9k
ZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFt
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRv
cjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CiAKLSAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1Qw
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUVu
dW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMSA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNo
MTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0
QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMg
PSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDM7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG1vZGUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
TmFtZSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCBzY3JhdGNoMyk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHByb3BlcnR5R1BSKTsKIAotICAgIG9yOChy
ZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOwor
ICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0
YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHNjcmF0Y2gyKTsKKyAgICBvcjMy
KHNjcmF0Y2gzLCBzY3JhdGNoMik7CisgICAgc3RvcmU4VG9NZXRhZGF0YShzY3JhdGNoMiwgYnl0
ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9y
TWV0YWRhdGEoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsK
KyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUikpOwogICAgIC8vIFRoaXMg
aXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQgdmFsdWUuCi0gICAgSnVtcCBpc05vdE93blN0cnVj
dHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpHZW5lcmljTW9kZSkpOworICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJh
bmNoVGVzdDMyKE5vblplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJp
Y01vZGUpKTsKIAogICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDMpOwotICAgIEp1bXAgc3RydWN0dXJl
TWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgc2NyYXRjaDEpOworICAgIGxvYWQzMihB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gyKTsK
KyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gy
LCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbmRleCwgc2NyYXRjaDIpOwogICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUg
ZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBh
Y2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QzLCByZWdUMyk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVz
RWlnaHQpLCByZXN1bHRHUFIpOwotCisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gz
MihBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBzaWduRXh0
ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFz
ZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAg
Ly8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0
aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbmVn
MzIocmVnVDMpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2VH
UFIpOworICAgIHN1YjMyKEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBuZWczMihz
Y3JhdGNoMik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKICAg
ICBjb25zdGV4cHIgaW50cHRyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gb2Zmc2V0SW5CdXR0
ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpICogc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBU
aW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgIGxvYWQ2
NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQ
cm9wZXJ0eSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAg
ICAgc3RydWN0dXJlTWlzbWF0Y2gubGluayh0aGlzKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1
cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSk7CisgICAgc3RvcmU4
VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVu
T3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgYnl0ZWNvZGUsIE9wRW51bWVyYXRv
ckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAg
ICBpc05vdE93blN0cnVjdHVyZU1vZGUubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTm90SW5kZXhl
ZCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKKyAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5j
aFRlc3QzMihaZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5kZXhlZE1vZGUpKTsKICAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUg
aW5kZXguCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHByb3BlcnR5R1BSKTsKIAogICAgIGlzTm90SW5k
ZXhlZC5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdU
MCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChi
eXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaDEpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAg
ICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOwor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8g
Y29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlW
YWxzLmFwcGVuZChnZW4pOwogCiAgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5NjEsMTAgKzI4
MTAsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfCiAgICAgZ2Vu
ZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
R2V0QnlWYWw+KCksIGl0ZXIpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlwZSwg
dHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9y
X2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
Y29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxD
YXNlKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0
aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQogewotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1f
ZW51bWVyYXRvcjsKQEAgLTI5NzMsNyArMjgyMSw5IEBAIHZvaWQgSklUOjplbWl0X2VudW1lcmF0
b3JfaGFzX3Byb3BlcnR5SW0KICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QwKTsKLSAgICBvcjgocmVnVDAsIEFic29sdXRlQWRk
cmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRh
ZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRh
ZGF0YSgpLCByZWdUMSk7CisgICAgb3IzMihyZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0
YWRhdGEocmVnVDEsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVy
YXRvck1ldGFkYXRhKCkpOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVy
bywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVj
dHVyZU1vZGUpKSk7CiAKQEAgLTMwNjIsNiArMjkxMiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRl
QmFycmllcihKU0NlbGwqIG93bmVyCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5r
KHRoaXMpOwogfQogCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpCit7
CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgp
LCBvd25lciwgc2VsZWN0U2NyYXRjaEdQUihvd25lcikpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIp
OworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsOSArMjM2LDkg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAg
aWYgKGlzSlNBcnJheShiYXNlQ2VsbCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8u
Y2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAogICAgICAgICAgICAgICAgICAgICAmJiBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5l
QWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+
KGJhc2VDZWxsKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0Nh
Y2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4o
YmFzZUNlbGwpKSkgewogCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlu
bGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChzdHViSW5mbywganNDYXN0
PEpTQXJyYXkqPihiYXNlQ2VsbCkpOworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRl
ZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2Nr
LCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGlt
aXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLmluaXRBcnJheUxlbmd0aChsb2NrZXIpOwpAQCAtMjQ5LDggKzI0OSw4IEBAIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgICAgICBuZXdDYXNl
ID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5TGVu
Z3RoLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpc0pTU3RyaW5nKGJh
c2VDZWxsKSkgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBD
YWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXND
YWNoZWFibGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJv
b2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5n
dGgoc3R1YkluZm8pOworICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2Fj
aGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pKSB7CisgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVT
dHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbyk7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNo
U2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dl
dEJ5RnVuY3Rpb24oa2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5p
dFN0cmluZ0xlbmd0aChsb2NrZXIpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRj
aHBvaW50U2V0KCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94
eSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5s
aW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAg
ICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIExPR19J
QygoSUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50
aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9
PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNo
aW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpAQCAt
NzMxLDExICs3MzEsMTEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0Qnko
SgogICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2Vt
ZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAg
ICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAm
JiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ss
IHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQogICAgICAgICAgICAgICAgICAgICAmJiAh
b2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAg
ICAgICAgICAgJiYgIWlzUHJveHkpIHsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUg
PSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0
dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3By
aWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOwpA
QCAtMTEzMiw3ICsxMTMyLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5C
eSgKICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZQogICAgICAgICAg
ICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1
Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewotICAgICAgICAgICAgICAg
IGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5B
Y2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0
ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyhjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRD
b2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNl
bGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9
PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1By
b3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTE1NTIs
NyArMTU1Miw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAog
dm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0g
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2Fs
bCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihP
cHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJh
d1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAgIHJldmVydENhbGwodm0sIGNhbGxM
aW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxK
SVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDI0ICs0Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhj
ZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0gICAg
aml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVu
dHJ5RnJhbWUpOwotCi0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2
bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9u
KHZtKTsKLQotICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVy
YXRpb25QdHJUYWcpOwotCi0gICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwotCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRp
b24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9u
SGFuZGxlcikpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVu
a1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbiIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVy
YXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKQEAgLTc3LDI0ICs1OSw2IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGEKICAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRpb25X
aXRoQ2FsbEZyYW1lUm9sbGJhY2siKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJh
dG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0jaWYgQ1BVKFg4Nl82NCkK
LSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BV
UmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjplc3ApOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgIGpp
dC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVy
czo6bGlua1JlZ2lzdGVyKTsKLSNlbmRpZgotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNvbnRp
bnVhdGlvbiA9IGppdC5qdW1wKCk7Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAg
ICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjb250aW51YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGhh
bmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAicG9wVGh1bmtTdGFja1ByZXNlcnZlc0Fu
ZEhhbmRsZUV4Y2VwdGlvbiIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBl
cnMgaml0OwpAQCAtMTM3LDYgKzEwMSw0MiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGNoCiAKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0
b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQuY29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisK
KyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworCisgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7
CisKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CisKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpF
eHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25Q
dHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7Cisg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFu
ZGxlRXhjZXB0aW9uIik7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYg
dm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworI2lmIENQVShYODZfNjQpCisgICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVy
KSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQucG9wUGFp
cihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtS
ZWdpc3Rlcik7CisjZW5kaWYKKworICAgIENDYWxsSGVscGVyczo6SnVtcCBjb250aW51YXRpb24g
PSBqaXQuanVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgYXV0byBo
YW5kbGVyID0gdm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOworICAgIHBh
dGNoQnVmZmVyLmxpbmsoY29udGludWF0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCBKSVRUaHVua1B0clRhZywgInBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVF
eGNlcHRpb24iKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVGFnVHlwZT4KIGlubGluZSB2b2lk
IGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJH
UFIsIFRhZ1R5cGUgdGFnKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsMTIg
QEAgY2xhc3MgVk07CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0m
KTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9u
V2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKFZNJik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRp
b25HZW5lcmF0b3IoVk0mKTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdl
bmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BU
aHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50
LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRT
aWRlU3RhdGUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29t
bW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXJy
b3JIYW5kbGluZ1Njb3BlLmgiCkBAIC0zNzAsMTMgKzM3MSwyMiBAQCBpbmxpbmUgYm9vbCBqaXRD
b21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAgICAgCiAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxW
YWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwogCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgp
ICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIGlmIChSZWZQdHI8QmFzZWxpbmVK
SVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91
bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhV
bmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAg
ICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9j
ayk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmppdE5leHRJbnZvY2F0aW9uKCk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghY29kZUJsb2Nr
LT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0df
RVZFTlQoY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJ0aHJlc2hvbGQgbm90IHJlYWNo
ZWQsIGNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAg
ICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIHRocmVzaG9s
ZCBzaG91bGQgYmUgbGlmdGVkLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IAotICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0gSklUV29ya2xpc3Q6OmVu
c3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0sIEpJVENv
bXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkpOwor
ICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0gSklUV29ya2xpc3Q6OmVuc3Vy
ZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0sIEpJVENvbXBp
bGF0aW9uS2V5KGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25N
b2RlOjpCYXNlbGluZSkpOwogCiAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUKSB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBpbGVkLiIpOwpAQCAtNDY2LDggKzQ3Niwx
MCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBjb2RlQmxv
Y2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAg
ICAgIHVpbnRwdHJfdCogcHRyID0gdm0uZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKHBjKTsK
ICAgICAgICAgKnB0ciArPSBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKS5tX2FjdGl2
ZVRocmVzaG9sZDsKLSAgICAgICAgaWYgKCpwdHIgPj0gT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9t
SW5maW5pdGVMb29wc0xpbWl0KCkpCisgICAgICAgIGlmICgqcHRyID49IE9wdGlvbnM6OmVhcmx5
UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSB7CisgICAgICAgICAgICBjb2RlQmxvY2st
PmVuc3VyZUpJVERhdGEoQ29uY3VycmVudEpTTG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKSk7IC8v
IFdlJ3JlIHJldHVybmluZyB0byB0aGUgT1NSIGVudHJ5IGNvZGUgaGVyZSwgd2hpY2ggZXhwZWN0
cyB0aGF0IG1faml0RGF0YSBpcyBub3QgbnVsbC4KICAgICAgICAgICAgIExMSU5UX1JFVFVSTl9U
V08oTExJbnQ6OmZ1enplclJldHVybkVhcmx5RnJvbUxvb3BIaW50RW50cnlwb2ludCgpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpLCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7CisgICAgICAg
IH0KICAgICB9CiAgICAgCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgz
MDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVh
bGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUs
IG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRh
KG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRj
aCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5
cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2Fy
aXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAot
CiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAg
ICAgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEw
MjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4K
ICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwgc3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJP
cGVyYXRpb24odDIsIC5zbG93KQogICAgICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2Zy
LCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAg
ICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJ
bnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIy
ICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVn
YXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAg
IG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdh
dGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNb
dDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwg
dDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJp
bmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZm
ZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUo
QXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBB
cml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAgICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5l
Z2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEsIExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAg
IHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxl
TnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2Zp
bGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpA
QCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkKIAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShv
cGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91Ymxl
T3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNv
ZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQot
ICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAl
b3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikK
ICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAgICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYs
NyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAg
ICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAg
ICAgYmluZXEgdDIsIEludDMyVGFnLCAub3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQz
MlRhZywgLm9wMk5vdEludAotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50
KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFBy
b2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50
ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlz
cGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwxMiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3Jl
KG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJpYSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAg
ICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5vdEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0
MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1i
ZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFy
aXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAg
ICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAg
ICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVt
YmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6
CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAgICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0x
MTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9w
CiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29u
ZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAg
ICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRo
UHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29k
ZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQw
LCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9u
KGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNv
cHkpCkBAIC00NDEsOCArNDQxLDEzIEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkK
ICAgICAgICAgICAgIG1vdmUgUEMsIGExCiAgICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bf
b3NyKQogICAgICAgICAgICAgYnRweiByMCwgLnJlY292ZXIKLQogICAgICAgICAgICAgbW92ZSBy
MSwgc3AKKworICAgICAgICAgICAgIyBCYXNlbGluZSB1c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIg
Zm9yIGl0cyBKSVQgY29uc3RhbnQgcG9vbC4KKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tj
ZnJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2ppdERhdGFbUEJdLCBQQgor
ICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjpKSVREYXRhOjptX2ppdENvbnN0YW50UG9vbFtQ
Ql0sIFBCCisKICAgICAgICAgICAgIGlmIEFSTTY0RQogICAgICAgICAgICAgICAgIGxlYXAgSlND
Q29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0
ZXhwciBHYXRlOjpsb29wT1NSRW50cnkpICogUHRyU2l6ZSwgYTIKICAgICAgICAgICAgICAgICBq
bXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgSlNFbnRyeVB0clRhZwpAQCAtMTA1Niwx
MCArMTA2MSw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAog
bWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQog
ICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1h
Y3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNy
byB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1f
Yml0c1t0Ml0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAg
ICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQogICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0x
MDY5LDcgKzEwNzAsNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGlu
CiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVy
VGFnLCB0MQogICAgICAgICBzdG9yZXEgdDEsIFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVB
cml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNw
YXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTExMzQsMTEgKzExMzUsNiBAQCBlbmQpCiAKIAogbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJv
ZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQo
bV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykK
ICAgICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0xMTQ2LDEyICsxMTQyLDEyIEBAIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAu
b3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MwogICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBk
YXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJv
ZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQog
Lm9wTmVnYXRlTm90SW50OgogICAgIGJ0cXogdDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwog
ICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAwLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShB
cml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUs
IEFyaXRoUHJvZmlsZU51bWJlciwgdDEsIHQyKQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRl
U2xvdzoKQEAgLTExNjQsMTAgKzExNjAsNiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9w
Y29kZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9w
Y29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4p
CiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUp
Ci0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRo
UHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQog
ICAgICAgICBnZXQobV9yaHMsIHQwKQogICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkKQEAgLTExNzcsNyArMTE2OSw3IEBA
IG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1f
ZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3cs
IHQyKQogCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRh
dGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1
LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAg
KzExNzksMTAgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAg
ICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0
MQogICAgICAgICBmcTJkIHQxLCBmdDEKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1i
ZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3Qs
IEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQyKQogICAgICAgICBqbXAgLm9wMU5vdElu
dFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkludDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2Zp
bGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1
Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQyKQogICAgICAgICBjaTJkcyB0MSwgZnQx
CiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNCw5
ICsxMTk2LDkgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogCiAg
ICAgLm9wMk5vdEludDoKICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4g
aW50LCB0aGUgc2Vjb25kIGlzIGRlZmluaXRlbHkgbm90LgotICAgICAgICBnZXQobV9kc3QsIHQy
KQogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93Ci0gICAgICAgIHByb2ZpbGUoQXJp
dGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bj
b2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0MikKKyAgICAgICAgZ2V0KG1f
ZHN0LCB0MikKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBhZGRxIG51bWJlclRhZywg
dDEKICAgICAgICAgZnEyZCB0MSwgZnQxCkBAIC0xNTE4LDcgKzE1MTAsNyBAQCBsbGludE9wV2l0
aE1ldGFkYXRhKG9wX2dldF9ieV9pZF9kaXJlY3QsCiBlbmQpCiAKICMgVGhlIGJhc2Ugb2JqZWN0
IGlzIGV4cGVjdGVkIGluIHQzCi1tYWNybyBwZXJmb3JtR2V0QnlJREhlbHBlcihvcGNvZGVTdHJ1
Y3QsIG1vZGVNZXRhZGF0YU5hbWUsIHZhbHVlUHJvZmlsZU5hbWUsIHNsb3dMYWJlbCwgc2l6ZSwg
bWV0YWRhdGEsIHJldHVybikKK21hY3JvIHBlcmZvcm1HZXRCeUlESGVscGVyKG9wY29kZVN0cnVj
dCwgbW9kZU1ldGFkYXRhTmFtZSwgdmFsdWVQcm9maWxlTmFtZSwgc2xvd0xhYmVsLCBzaXplLCBt
ZXRhZGF0YSwgcmV0dXJuLCBkb0FycmF5UHJvZmlsZSkKICAgICBtZXRhZGF0YSh0MiwgdDEpCiAg
ICAgbG9hZGIgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjolbW9kZU1ldGFkYXRhTmFtZSUubW9k
ZVt0Ml0sIHQxCiAKQEAgLTE1NDYsNyArMTUzOCw3IEBAIG1hY3JvIHBlcmZvcm1HZXRCeUlESGVs
cGVyKG9wY29kZVN0cnVjdCwKIC5vcEdldEJ5SWRBcnJheUxlbmd0aDoKICAgICBiYm5lcSB0MSwg
Y29uc3RleHByIEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCwgLm9wR2V0QnlJZFVuc2V0CiAgICAg
bW92ZSB0MywgdDAKLSAgICBhcnJheVByb2ZpbGUoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjol
bW9kZU1ldGFkYXRhTmFtZSUuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgdDAsIHQyLCB0
NSkKKyAgICBkb0FycmF5UHJvZmlsZSh0MCwgdDIsIHQ1LCB0MSkKICAgICBidGl6IHQwLCBJc0Fy
cmF5LCBzbG93TGFiZWwKICAgICBidGl6IHQwLCBJbmRleGluZ1NoYXBlTWFzaywgc2xvd0xhYmVs
CiAgICAgbG9hZENhZ2VkSlNWYWx1ZShKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MCwgdDEp
CkBAIC0xNTY4LDcgKzE1NjAsMTAgQEAgZW5kCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9i
eV9pZCwgT3BHZXRCeUlkLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJl
dHVybikKICAgICBnZXQobV9iYXNlLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlQ2Vs
bChzaXplLCB0MCwgdDMsIC5vcEdldEJ5SWRTbG93KQotICAgIHBlcmZvcm1HZXRCeUlESGVscGVy
KE9wR2V0QnlJZCwgbV9tb2RlTWV0YWRhdGEsIG1fcHJvZmlsZSwgLm9wR2V0QnlJZFNsb3csIHNp
emUsIG1ldGFkYXRhLCByZXR1cm4pCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BHZXRCeUlk
LCBtX21vZGVNZXRhZGF0YSwgbV9wcm9maWxlLCAub3BHZXRCeUlkU2xvdywgc2l6ZSwgbWV0YWRh
dGEsIHJldHVybiwKKyAgICAgICAgbWFjcm8gKGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFkYXRh
LCBzY3JhdGNoMSwgc2NyYXRjaDIpCisgICAgICAgICAgICBhcnJheVByb2ZpbGUoT3BHZXRCeUlk
OjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUsIGNlbGxBbmRJbmRleGluZ1R5cGUsIG1ldGFkYXRh
LCBzY3JhdGNoMSkKKyAgICAgICAgZW5kKQogCiAub3BHZXRCeUlkU2xvdzoKICAgICBjYWxsU2xv
d1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9nZXRfYnlfaWQpCkBAIC0zMDAyLDcgKzI5OTcsNyBAQCBs
bGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX29wZW4sIE9wCiAKICAgICBsb2FkVmFyaWFi
bGUoZ2V0LCBtX2l0ZXJhdG9yLCB0MykKICAgICBidHFueiB0Mywgbm90Q2VsbE1hc2ssIC5pdGVy
YXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3cKLSAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0
ZXJhdG9yT3BlbiwgbV9tb2RlTWV0YWRhdGEsIG1fbmV4dFByb2ZpbGUsIC5pdGVyYXRvck9wZW5H
ZW5lcmljR2V0TmV4dFNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9yZU5leHRBbmREaXNwYXRjaCkK
KyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yT3BlbiwgbV9tb2RlTWV0YWRhdGEs
IG1fbmV4dFByb2ZpbGUsIC5pdGVyYXRvck9wZW5HZW5lcmljR2V0TmV4dFNsb3csIHNpemUsIG1l
dGFkYXRhLCBzdG9yZU5leHRBbmREaXNwYXRjaCwgbWFjcm8oYSwgYiwgYywgZCkgZW5kKQogCiAu
aXRlcmF0b3JPcGVuR2VuZXJpY0dldE5leHRTbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRf
c2xvd19wYXRoX2l0ZXJhdG9yX29wZW5fZ2V0X25leHQpCkBAIC0zMDYxLDcgKzMwNTYsNyBAQCBs
bGludE9wV2l0aE1ldGFkYXRhKG9wX2l0ZXJhdG9yX25leHQsIE9wCiAKICAgICBsb2FkVmFyaWFi
bGUoZ2V0LCBtX3ZhbHVlLCB0MykKICAgICBidHFueiB0Mywgbm90Q2VsbE1hc2ssIC5nZXREb25l
U2xvdwotICAgIHBlcmZvcm1HZXRCeUlESGVscGVyKE9wSXRlcmF0b3JOZXh0LCBtX2RvbmVNb2Rl
TWV0YWRhdGEsIG1fZG9uZVByb2ZpbGUsIC5nZXREb25lU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0
b3JlRG9uZUFuZEptcFRvR2V0VmFsdWUpCisgICAgcGVyZm9ybUdldEJ5SURIZWxwZXIoT3BJdGVy
YXRvck5leHQsIG1fZG9uZU1vZGVNZXRhZGF0YSwgbV9kb25lUHJvZmlsZSwgLmdldERvbmVTbG93
LCBzaXplLCBtZXRhZGF0YSwgc3RvcmVEb25lQW5kSm1wVG9HZXRWYWx1ZSwgbWFjcm8oYSwgYiwg
YywgZCkgZW5kKQogCiAuZ2V0RG9uZVNsb3c6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93
X3BhdGhfaXRlcmF0b3JfbmV4dF9nZXRfZG9uZSkKQEAgLTMwODYsNyArMzA4MSw3IEBAIGxsaW50
T3BXaXRoTWV0YWRhdGEob3BfaXRlcmF0b3JfbmV4dCwgT3AKICAgICAjIFJlbG9hZCB0aGUgbmV4
dCByZXN1bHQgdG1wIHNpbmNlIHRoZSBnZXRfYnlfaWQgYWJvdmUgbWF5IGhhdmUgY2xvYmJlcmVk
IHQzLgogICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fdmFsdWUsIHQzKQogICAgICMgV2UgZG9uJ3Qg
bmVlZCB0byBjaGVjayBpZiB0aGUgaXRlcmF0b3IgcmVzdWx0IGlzIGEgY2VsbCBoZXJlIHNpbmNl
IHdlIHdpbGwgaGF2ZSB0aHJvd24gYW4gZXJyb3IgYmVmb3JlLgotICAgIHBlcmZvcm1HZXRCeUlE
SGVscGVyKE9wSXRlcmF0b3JOZXh0LCBtX3ZhbHVlTW9kZU1ldGFkYXRhLCBtX3ZhbHVlUHJvZmls
ZSwgLmdldFZhbHVlU2xvdywgc2l6ZSwgbWV0YWRhdGEsIHN0b3JlVmFsdWVBbmREaXNwYXRjaCkK
KyAgICBwZXJmb3JtR2V0QnlJREhlbHBlcihPcEl0ZXJhdG9yTmV4dCwgbV92YWx1ZU1vZGVNZXRh
ZGF0YSwgbV92YWx1ZVByb2ZpbGUsIC5nZXRWYWx1ZVNsb3csIHNpemUsIG1ldGFkYXRhLCBzdG9y
ZVZhbHVlQW5kRGlzcGF0Y2gsIG1hY3JvKGEsIGIsIGMsIGQpIGVuZCkKIAogLmdldFZhbHVlU2xv
dzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9pdGVyYXRvcl9uZXh0X2dldF92
YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTQy
MCw3ICsxNDIwLDggQEAgZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5jcmVtZW50LCBh
Y3Rpb24pCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgYmFkZGlzIGluY3JlbWVu
dCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNv
dW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQorICAgIGxvYWRwIENvZGVCbG9jazo6bV9s
bGludEV4ZWN1dGVDb3VudGVyW3QwXSwgdDAKKyAgICBiYWRkaXMgaW5jcmVtZW50LCBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgIGFjdGlvbigp
CiAgICAgLmNvbnRpbnVlOgogZW5kCkBAIC0xNTAzLDcgKzE1MDQsOCBAQCBtYWNybyBwcm9sb2d1
ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgY29kZUJsb2NrR2V0dGVyKHQxKQogICAg
IGNvZGVCbG9ja1NldHRlcih0MSkKICAgICBpZiBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQot
ICAgICAgICBiYWRkaXMgNSwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MV0sIC5jb250aW51ZQorICAgICAgICBs
b2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MV0sIHQwCisgICAgICAgIGJh
ZGRpcyA1LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51
ZQogICAgICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAg
ICAgICAgbW92ZSBQQywgYTEKQEAgLTE2MTcsMTQgKzE2MTksMTQgQEAgbWFjcm8gZnVuY3Rpb25J
bml0aWFsaXphdGlvbihwcm9maWxlQXJnUwogICAgICMgb3B0aW1hbCB3YXkgZm9yIGFyY2hpdGVj
dHVyZXMgdGhhdCBoYXZlIG1vcmUgdGhhbiBmaXZlIHJlZ2lzdGVycyBhdmFpbGFibGUKICAgICAj
IGZvciBhcmJpdHJhcnkgdXNlIGluIHRoZSBpbnRlcnByZXRlci4KICAgICBsb2FkaSBDb2RlQmxv
Y2s6Om1fbnVtUGFyYW1ldGVyc1t0MV0sIHQwCi0gICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQw
ICMgVXNlIGFkZGkgYmVjYXVzZSB0aGF0J3Mgd2hhdCBoYXMgdGhlIHBlZXBob2xlCisgICAgYWRk
cCAtcHJvZmlsZUFyZ1NraXAsIHQwCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnBndGVxIHQwLCAw
LCBvayBlbmQpCiAgICAgYnRweiB0MCwgLmFyZ3VtZW50UHJvZmlsZURvbmUKICAgICBsb2FkcCBD
b2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzICsgRml4ZWRWZWN0b3I6Om1fc3RvcmFn
ZSArIFJlZkNvdW50ZWRBcnJheTo6bV9kYXRhW3QxXSwgdDMKICAgICBidHB6IHQzLCAuYXJndW1l
bnRQcm9maWxlRG9uZSAjIFdoZW4gd2UgY2FuJ3QgSklULCB3ZSBkb24ndCBhbGxvY2F0ZSBhbnkg
YXJndW1lbnQgdmFsdWUgcHJvZmlsZXMuCiAgICAgbXVscCBzaXplb2YgVmFsdWVQcm9maWxlLCB0
MCwgdDIgIyBBYWFhYWhoaGghIE5lZWQgc3RyZW5ndGggcmVkdWN0aW9uIQogICAgIGxzaGlmdHAg
MywgdDAgIyBvZmZzZXQgb2YgbGFzdCBKU1ZhbHVlIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCi0g
ICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4g
Q29kZUJsb2NrOjptX2FyZ3VtZW50VmFsdWVQcm9maWxlcy4KKyAgICBhZGRwIHQyLCB0MyAjIHBv
aW50ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBpbiB0aGUgdmFsdWUgcHJvZmlsZSBh
cnJheS4KIC5hcmd1bWVudFByb2ZpbGVMb29wOgogICAgIGlmIEpTVkFMVUU2NAogICAgICAgICBs
b2FkcSBUaGlzQXJndW1lbnRPZmZzZXQgLSA4ICsgcHJvZmlsZUFyZ1NraXAgKiA4W2NmciwgdDBd
LCB0MgpAQCAtMjU2Myw2ICsyNTY1LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5k
CiBlbmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5
cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9y
aCB0eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1F
OiBXZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNl
IFdFQkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZ
IGFuZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cigpID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBj
cmVhdGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29k
ZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2Nr
KiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVy
Jik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlu
bGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlx
dWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmll
ciBjcmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxl
SWRlbnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlz
aW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlk
ZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayog
Y29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29k
ZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGlu
ZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENh
Y2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5o
YXNJZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3Bw
CShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJDYWNoZWRUeXBlcy5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVD
YWNoZUVycm9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCkBAIC0x
OTE4LDYgKzE5MTksOCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1WYWx1ZVByb2ZpbGVz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1WYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5zaWduZWQgbnVt
QXJyYXlQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJyYXlQcm9maWxlczsgfQorICAg
IHVuc2lnbmVkIG51bUJpbmFyeUFyaXRoUHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bUJp
bmFyeUFyaXRoUHJvZmlsZXM7IH0KKyAgICB1bnNpZ25lZCBudW1VbmFyeUFyaXRoUHJvZmlsZXMo
KSBjb25zdCB7IHJldHVybiBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsgfQogCiBwcml2YXRlOgog
ICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKQEAgLTE5NTIsNiArMTk1NSw4IEBA
IHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX251bVZhbHVlUHJvZmlsZXM7CiAgICAgdW5zaWdu
ZWQgbV9udW1BcnJheVByb2ZpbGVzOworICAgIHVuc2lnbmVkIG1fbnVtQmluYXJ5QXJpdGhQcm9m
aWxlczsKKyAgICB1bnNpZ25lZCBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsKIAogICAgIENhY2hl
ZE1ldGFkYXRhVGFibGUgbV9tZXRhZGF0YTsKIApAQCAtMjE2MCw2ICsyMTY1LDggQEAgQUxXQVlT
X0lOTElORSBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZQogICAgICwgbV9yYXJlRGF0YShjYWNo
ZWRDb2RlQmxvY2sucmFyZURhdGEoZGVjb2RlcikpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZXMoY2Fj
aGVkQ29kZUJsb2NrLm51bVZhbHVlUHJvZmlsZXMoKSkKICAgICAsIG1fYXJyYXlQcm9maWxlcyhj
YWNoZWRDb2RlQmxvY2subnVtQXJyYXlQcm9maWxlcygpKQorICAgICwgbV9iaW5hcnlBcml0aFBy
b2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1CaW5hcnlBcml0aFByb2ZpbGVzKCkpCisgICAgLCBt
X3VuYXJ5QXJpdGhQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVtVW5hcnlBcml0aFByb2ZpbGVz
KCkpCiB7CiB9CiAKQEAgLTIzMzcsNiArMjM0NCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDYWNo
ZWRDb2RlQmxvY2s8Q29kZUIKICAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29kZUJsb2NrLm1faGFz
Q2hlY2twb2ludHM7CiAgICAgbV9udW1WYWx1ZVByb2ZpbGVzID0gY29kZUJsb2NrLm1fdmFsdWVQ
cm9maWxlcy5zaXplKCk7CiAgICAgbV9udW1BcnJheVByb2ZpbGVzID0gY29kZUJsb2NrLm1fYXJy
YXlQcm9maWxlcy5zaXplKCk7CisgICAgbV9udW1CaW5hcnlBcml0aFByb2ZpbGVzID0gY29kZUJs
b2NrLm1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgbV9udW1VbmFyeUFyaXRoUHJv
ZmlsZXMgPSBjb2RlQmxvY2subV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOwogCiAgICAgbV9t
ZXRhZGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEuZ2V0KCkpOwogICAg
IG1fcmFyZURhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVEYXRhLmdldCgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBA
IEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklU
KQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRl
OjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7
Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmls
ZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJv
ZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3Vs
dC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9u
IDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVibGljOgogCiAgICAg
c3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9CiAgICAgc3RhdGlj
IGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAgc3RhdGljIGlubGlu
ZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsgfQorICAgIHN0
YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShy
ZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDYgQEAgYm9vbCBjYW5Vc2VXZWJB
c3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEludDMyLCBldmFsVGhyZXNob2xkTXVsdGlwbGll
ciwgMTAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1heGltdW1FdmFsQ2Fj
aGVhYmxlU291cmNlTGVuZ3RoLCAyNTYsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKLSAgICB2
KEJvb2wsIHJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNC
ZXR3ZWVuQ2hlY2twb2ludHNGb3JCYXNlbGluZSwgMTAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihJbnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvclVw
cGVyVGllcnMsIDUwMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkBAIC01MzIsNiArNTMx
LDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVz
ZURhdGFJQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlD
SW5PcHRpbWl6aW5nSklULCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1
c2VEYXRhSUNTaGFyaW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB1
c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBc
CiAgICAgLyogRmVhdHVyZSBGbGFncyAqL1wKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjgz
MDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Niw3ICszOTYsOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFi
bGU6OnByZXBhcmVGb3JFeGVjdXRpCiAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlQnl0ZWNvZGUo
KSkKICAgICAgICAgY29kZUJsb2NrLT52YWxpZGF0ZSgpOwogCi0gICAgaWYgKE9wdGlvbnM6OnVz
ZUxMSW50KCkpCisgICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVmID0g
Y29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlKQor
ICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2VsaW5l
UmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGVsc2UgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkp
CiAgICAgICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKICAgICBlbHNlCiAgICAgICAgIHNldHVw
SklUKHZtLCBjb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUxMSW50VGllclVwQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJX
YXJtVXAoKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JC
USgpKQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJC
UU9wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJl
c2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9s
ZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXRO
ZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgp
KTsKICAgICB9CiAKICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVk
KCkKQEAgLTY1LDkgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVTb29uKCkKICAg
ICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9CQlEoKSkKLSAgICAg
ICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZVNv
b24oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhy
ZXNob2xkRm9yQkJRT3B0aW1pemVTb29uKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
ZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCksIG51
bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZv
ck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNw
cAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRp
ZXJVcENvdW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBUaWVyVXBDb3VudDo6VGllclVwQ291bnQoKQogewot
ICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVy
V2FybVVwKCksIG51bGxwdHIpOworICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hv
bGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogfQogCiBUaWVyVXBDb3VudDo6flRpZXJV
cENvdW50KCkgPSBkZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVRpZXJVcENvdW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVRpZXJVcENvdW50LmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAodWludDMyX3QgZnVuY3Rp
b25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgYWZ0ZXIgd2FybS11cC4iKTsKLSAg
ICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0
ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0
aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0KIAogICAgIGJvb2wg
Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtOTAsMTQgKzkwLDE0IEBA
IHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24odWludDMyX3QgZnVuY3Rp
b25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgbmV4dCBpbnZvY2F0aW9uLiIpOwot
ICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVz
aG9sZCgwKTsKICAgICB9CiAKICAgICB2b2lkIG9wdGltaXplU29vbih1aW50MzJfdCBmdW5jdGlv
bkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigp
LCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBzb29uLiIpOwogICAgICAgICAvLyBG
SVhNRTogTmVlZCBhZGp1c3RtZW50IG9uY2Ugd2UgZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQg
d2FzbSBmdW5jdGlvbnMuCi0gICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hv
bGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9s
ZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAgICAgfQogCiAgICAg
dm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQodWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQpJbmRleDogU291
cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJKHJl
dmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw2ICs2NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7
CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBCYWcmIG9wZXJhdG9yPShC
YWc8VCwgVT4mJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh1bndyYXBwZWRIZWFkKCkgPT0g
b3RoZXIudW53cmFwcGVkSGVhZCgpKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAg
ICAgIEJhZyBkZXN0cm95OworICAgICAgICBkZXN0cm95Lm1faGVhZCA9IHVud3JhcHBlZEhlYWQo
KTsKKyAgICAgICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgpOworICAgICAgICBvdGhl
ci5tX2hlYWQgPSBudWxscHRyOworCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAg
ICB+QmFnKCkKICAgICB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Q
YWNrZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAkocmV2aXNpb24g
MjgzMDE5KQorKysgU291cmNlL1dURi93dGYvUGFja2VkLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4
Niw3ICsxODYsMTAgQEAgcHVibGljOgogICAgIH0KIAogICAgIFQqIG9wZXJhdG9yLT4oKSBjb25z
dCB7IHJldHVybiBnZXQoKTsgfQotICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpn
ZXQoKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUgPSBUPgorICAgIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3ZvaWRfdjxVPiwgVSY+Ojp0eXBlIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuICpnZXQoKTsgfQorCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhZ2V0KCk7IH0KIAogICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3Mg
aW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBl
cy4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkocmV2aXNpb24gMjgzMDE5KQor
KysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAt
Nzc2LDE3ICs3NzYsMTggQEAgZW5kCiAKICMgRklYTUU6IG5lZWQgdG8gZml4IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg3MDMgdG8gZW5hYmxlIHRoaXMgb24gTGlu
dXgvTUlQUy4KIGRlZiBydW5CeXRlY29kZUNhY2hlSW1wbChvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMsICphZGRpdGlvbmFsRW52KQotICAgIGlmICgkaG9zdE9TID09ICJkYXJ3aW4iKQotICAg
ICAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGUiCi0gICAgZWxzaWYgKCRob3N0T1Mg
PT0gImxpbnV4IiAmJiAkYXJjaGl0ZWN0dXJlICE9ICJtaXBzIikKLSAgICAgICAgZmlsZVRlbXBs
YXRlID0gImJ5dGVjb2RlLWNhY2hlWFhYWFhYIgotICAgIGVsc2UKLSAgICAgICAgc2tpcAotICAg
ICAgICByZXR1cm4KLSAgICBlbmQKKyAgICAjIE9PUFMKKyAgICAjaWYgKCRob3N0T1MgPT0gImRh
cndpbiIpCisgICAgIyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGUiCisgICAgI2Vs
c2lmICgkaG9zdE9TID09ICJsaW51eCIgJiYgJGFyY2hpdGVjdHVyZSAhPSAibWlwcyIpCisgICAg
IyAgICBmaWxlVGVtcGxhdGUgPSAiYnl0ZWNvZGUtY2FjaGVYWFhYWFgiCisgICAgI2Vsc2UKKyAg
ICAjICAgIHNraXAKKyAgICAjICAgIHJldHVybgorICAgICNlbmQKIAotICAgIG9wdGlvbnMgPSBC
QVNFX09QVElPTlMgKyBGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucyAr
ICR0ZXN0U3BlY2lmaWNSZXF1aXJlZE9wdGlvbnMKLSAgICBhZGRSdW5Db21tYW5kKCJieXRlY29k
ZS1jYWNoZSIsIFsic2giLCAocGF0aFRvSGVscGVycyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhl
bHBlci5zaCIpLnRvX3MsIGZpbGVUZW1wbGF0ZS50b19zLCAqdm1Db21tYW5kLCAkYmVuY2htYXJr
LnRvX3NdICsgb3B0aW9ucywgc2lsZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVy
LCAqYWRkaXRpb25hbEVudikKKyAgICAjb3B0aW9ucyA9IEJBU0VfT1BUSU9OUyArIEZUTF9PUFRJ
T05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zICsgJHRlc3RTcGVjaWZpY1JlcXVpcmVk
T3B0aW9ucworICAgICNhZGRSdW5Db21tYW5kKCJieXRlY29kZS1jYWNoZSIsIFsic2giLCAocGF0
aFRvSGVscGVycyArICJieXRlY29kZS1jYWNoZS10ZXN0LWhlbHBlci5zaCIpLnRvX3MsIGZpbGVU
ZW1wbGF0ZS50b19zLCAqdm1Db21tYW5kLCAkYmVuY2htYXJrLnRvX3NdICsgb3B0aW9ucywgc2ls
ZW50T3V0cHV0SGFuZGxlciwgc2ltcGxlRXJyb3JIYW5kbGVyLCAqYWRkaXRpb25hbEVudikKIGVu
ZAogCiBkZWYgcnVuQnl0ZWNvZGVDYWNoZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQo=
</data>
<flag name="commit-queue"
          id="462757"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439173</attachid>
            <date>2021-09-24 11:18:38 -0700</date>
            <delta_ts>2021-09-24 12:16:27 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>614033</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MzAxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkBAIC0xOTg1LDE0ICsxOTg1LDEwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzL3Nl
dHRlcnMuCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsOwogCisKICAg
ICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxjdWxhdGlvbnMgb2Ygd2hl
dGhlciBvciBub3Qgd2UncmUgYW4KICAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRsaW5nIGNhbGwg
c2l0ZS4KLSAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlOwotI2lm
IENQVShBUk02NCkKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAg
ICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0j
ZW5kaWYKLSAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3Rh
dGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChleHRyYVJlZ2lz
dGVyc1RvUHJlc2VydmUpOworICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3Rh
dGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
KCk7CiAKICAgICAgICAgYXV0byByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwg
PSBbJl0oQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlJiBzcGlsbFN0YXRlLCBib29s
IGNhbGxIYXNSZXR1cm5WYWx1ZSkgewogICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZG9udFJlc3Rv
cmU7CkBAIC0yMDc5LDggKzIwNzUsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChB
Y2Nlc3NHZW5lCiAgICAgICAgICAgICBBU1NFUlQoIShudW1iZXJPZlJlZ3NGb3JDYWxsICUgc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkpOwogICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZC
eXRlc0ZvckNhbGwgPSBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKTsKIAotICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51
bWJlck9mQnl0ZXNGb3JDYWxsID0KLSAgICAgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsK
IAogICAgICAgICAgICAgaml0LnN1YlB0cigKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLApAQCAtMjEzOCw2ICsy
MTMzLDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogCiAgICAg
ICAgICAgICBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0ID0gKGNvZGVCbG9jay0+c3RhY2tQb2ludGVy
T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSAtIHN0YXRlLnByZXNlcnZlZFJldXNlZFJlZ2lz
dGVyU3RhdGUubnVtYmVyT2ZCeXRlc1ByZXNlcnZlZCAtIHNwaWxsU3RhdGUubnVtYmVyT2ZTdGFj
a0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uOwogICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXQpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKICAgICAgICAgICAgIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlID0gaXNHZXR0ZXIoKTsKICAg
ICAgICAgICAgIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRl
LCBjYWxsSGFzUmV0dXJuVmFsdWUpOwogCkBAIC0yMjY0LDEyICsyMjYwLDcgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogCiAgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKIAotICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNU
b1ByZXNlcnZlOwotI2lmIENQVShBUk02NCkKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPnVz
ZURhdGFJQygpKQotICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQo
QVJNNjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgotICAgICAgICAgICAgYXV0byBzcGlsbFN0YXRl
ID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0
aW9ucyhleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUpOworICAgICAgICAgICAgYXV0byBzcGlsbFN0
YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhj
ZXB0aW9ucygpOwogCiAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
JnZtKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24o
dm0pOwpAQCAtMjM2NCwxMCArMjM1NSw2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBs
KEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1Rv
UHJlc2VydmU7CiAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChi
YXNlR1BSKTsKICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KHZh
bHVlUmVncyk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAgICAgIGlmIChjb2RlQmxvY2st
PnVzZURhdGFJQygpKQotICAgICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2Vy
dmUuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZl
TGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHJldmlzaW9u
IDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3Qu
cmIJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCBvcF9ncm91cCA6UHJvZmlsZWRC
aW5hcnlPcCwKICAgICAgICAgb3BlcmFuZFR5cGVzOiBPcGVyYW5kVHlwZXMsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQor
ICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9n
cm91cCA6VmFsdWVQcm9maWxlZEJpbmFyeU9wLApAQCAtMzUzLDcgKzM1Myw3IEBAIG9wX2dyb3Vw
IDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgICAgICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3Rl
ciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg2LDcgKzM4Niw3IEBAIG9wIDpuZWdhdGUsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewot
ICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFBy
b2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVP
cGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9y
SW1wbChCeXRlY28KICAgICAgICAgcmV0dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRG
b3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3Bv
aW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0
ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAg
ICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZJdGVyYXRvclByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9y
T3Blbjo6Z2V0TmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UHJv
ZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2RlSUQg
PT0gb3BfaXRlcmF0b3JfbmV4dCkgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkg
eworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4dDogcmV0dXJuIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZSgpOworICAgICAgICBjYXNl
IE9wSXRlcmF0b3JOZXh0OjpnZXREb25lOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkRvbmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVl
OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlZhbHVlUHJvZmlsZSgpOworICAg
ICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIAorICAgICAgICByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlBy
b2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVNZXRhZGF0YT4KIGJvb2wg
aGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFkYXRhLCB1bnNpZ25lZCBj
aGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
NCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhWTSYgdm0pCiAgICAgUkVM
RUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQotewotICAgIHJldHVybiBD
b2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4obV9mYXN0UGF0aFN0YXJ0
KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZv
OjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNEYXRhSUMoKSk7CkBA
IC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRNYXhBcmd1bWVudENvdW50
SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gdmFsdWU7CiB9CiAKK0Nv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhT
dGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSAmJiBpc1RhaWxDYWxsKCkp
OworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4o
dS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OnZpc2l0
V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVTcGVjaWZpY0NhbGxlZSA9IFsmXSAoSlNG
dW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5OSwxMSBAQCB2b2lkIENhbGxMaW5rSW5m
bzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9mcmFtZVNodWZmbGVEYXRhLT5zaHJpbmtU
b0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0
RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOwot
ICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
b0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwotICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgICAgIHUu
ZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOwotICAgIH0KLQotICAg
IGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwot
ICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKIAotICAgIGlm
IChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJQyA9PSBVc2VEYXRhSUM6Olllcykgewog
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zm
c2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAgZ29Qb2x5bW9ycGhpYyA9IGppdC5icmFu
Y2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVNYXNrKSk7CiAgICAgICAgICAgICBzbG93
UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNo
R1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAgfQotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7
CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENh
bGwoKTsKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMubGluaygmaml0KTsgLy8gUG9seW1vcnBo
aWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBwcmVwLgogICAgICAgICAgICAgaml0LmZh
ckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZNb25v
bW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CkBAIC0zMzYsMTQgKzMy
NSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihudWxscHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOwotICAgICAg
ICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAg
ICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhclRh
aWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyQ2Fs
bCgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7CiAgICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
IHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxlZUxv
Y2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNo
ZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMubV9jYWxsTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsK
KyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxsZWVDaGVjayk7CiAgICAg
ICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEzICszNDQsMzQgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBDYWxsTGlua0lu
Zm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQykKIHsKICAgICBSRUxFQVNF
X0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQs
IGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIG51bGxwdHIpOworICAgIHNl
dFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVn
KTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBj
YWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNh
bGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlz
LCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIGlzVGFpbENhbGwo
KSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BS
LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlD
OjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIs
IEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlzVGFpbENhbGwoKSwgV1RGTW92ZShwcmVw
YXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVl
R1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxM
aW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1w
bChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6Olll
cywgZmFsc2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExp
bmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0lu
Zm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVs
bHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIHRy
dWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZv
OjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkKQEAgLTM2OSwxNyArMzgx
LDMyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCAKICAgICBqaXQu
Y2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1Bh
dGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQogCit2b2lkIENhbGxMaW5r
SW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBj
YWxsTGlua0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUoY2FsbExpbmtJbmZvR1BSLCBHUFJJbmZv
OjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsK
K30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMoVk0mIHZtLCBVbmxpbmtl
ZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1
bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBzZXRVcENhbGwodW5saW5r
ZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRpb24g
PSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247CisgICAgaWYgKHVubGlua2VkQ2Fs
bExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpIHsKKyAgICAgICAgLy8gRklYTUU6IEl0J2QgYmUg
bmljZSBpZiB0aGlzIHdlcmUgYSByZWZjb3VudGVkIGRhdGEgc3RydWN0dXJlLgorICAgICAgICBt
X2ZyYW1lU2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigqdW5s
aW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSk7CisgICAgfQorICAgIHNldFVzZXNE
YXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9
IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRD
VElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0Vu
dHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0
aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgp
KTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0gICAgYXV0byBmYXN0
UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0K
ICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0
aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2Fs
bCk7CkBAIC0zOTcsNyArNDI0LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWls
Q2FsbEZhcwogCiAgICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaml0
LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zh
c3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFz
dFBhdGhTdGFydCk7CisgICAgICAgIHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKICAgICB9KTsK
IAogICAgIC8vIC0gSWYgd2UncmUgbm90IHlldCBsaW5rZWQsIHRoaXMgaXMgYSBqdW1wIHRvIHRo
ZSBzbG93IHBhdGguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDExIEBA
IGNsYXNzIEpTRnVuY3Rpb247CiBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiBzdHJ1Y3QgQ2Fs
bEZyYW1lU2h1ZmZsZURhdGE7CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbzsKKwogY2xh
c3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0lu
Zm8+IHsKIHB1YmxpYzoKLSAgICBlbnVtIENhbGxUeXBlIHsKKyAgICBlbnVtIENhbGxUeXBlIDog
dWludDhfdCB7CiAgICAgICAgIE5vbmUsCiAgICAgICAgIENhbGwsCiAgICAgICAgIENhbGxWYXJh
cmdzLApAQCAtMTY1LDYgKzE2Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxsZWVHUFIgPSBj
YWxsZWVHUFI7CiAgICAgfQogCisgICAgdm9pZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgVW5saW5r
ZWRDYWxsTGlua0luZm8mLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
KTsKKwogICAgIEdQUlJlZyBjYWxsZWVHUFIoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsg
fQogICAgIAogICAgIGVudW0gY2xhc3MgVXNlRGF0YUlDIDogdWludDhfdCB7CkBAIC0xNzMsMTMg
KzE3NywxNiBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVl
R1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwg
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwg
VXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJl
Rm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIHB1YmxpYzoKKyAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRh
SUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0
aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKICAgICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmKTsKICAgICB2b2lkIGVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1p
dFNsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJ
Q1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAg
ICAgdm9pZCByZXZlcnRDYWxsVG9TdHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlD
OjpZZXM7IH0KQEAgLTIwMyw3ICsyMTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVi
cyA9IGZhbHNlOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IGZhc3RQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBzbG93UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gZG9uZUxvY2F0aW9uKCk7CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAg
ICAgICBtX3Nsb3dTdHViID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSog
c2xvd1N0dWIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAg
fQotCiAgICAgYm9vbCBzZWVuT25jZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVu
U2hvdWxkUmVwYXRjaDsKQEAgLTMwOCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDYWxsVHlwZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMy
X3QqIGFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuICZtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyk7CiAgICAgfQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKQpAQCAtMzgxLDcgKzM4Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZh
dGU6Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0
YXJ0OworCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhT
dGFydCgpOworCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25l
TG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xv
d1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAgdW5pb24gVW5pb25UeXBlIHsKQEAgLTM5Nyw2ICs0
MDAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRl
cm5hbFB0clRhZz4gbV9jYWxsTG9jYXRpb247CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25EYXRh
TGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsZWVMb2NhdGlvbjsKICAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fc2xvd1BhdGhTdGFydDsKKyAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhT
dGFydDsKICAgICAgICAgfSBjb2RlSUM7CiAgICAgfSB1OwogCkBAIC00MjQsNiArNDI4LDEzIEBA
IGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2Fs
bExpbmtJbmZvLmNvZGVPcmlnaW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZv
IHsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1
c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmln
aW4uCisgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzksOCArMjc5LDYgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1
Y3R1cmUqIAogICAgICwgbV9kaWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2Rp
ZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZU
TChmYWxzZSkKLSAgICAsIG1faGFzTGlua2VkT1NSRXhpdChmYWxzZSkKLSAgICAsIG1faXNFbGln
aWJsZUZvckxMSW50RG93bmdyYWRlKGZhbHNlKQogICAgICwgbV9udW1DYWxsZWVMb2NhbHMob3Ro
ZXIubV9udW1DYWxsZWVMb2NhbHMpCiAgICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQog
ICAgICwgbV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcChvdGhlci5tX251bWJlck9mQXJndW1lbnRz
VG9Ta2lwKQpAQCAtMzA4LDYgKzMwNiw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwg
U3RydWN0dXJlKiAKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXRO
dW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7CisKKyAgICBtX2xsaW50RXhlY3V0
ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKICAgICAK
ICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KQEAgLTMxOCw3ICszMTgs
NiBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDCiAgICAgZmluaXNo
Q3JlYXRpb25Db21tb24odm0pOwogCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGpp
dEFmdGVyV2FybVVwKCk7CiAKICAgICBpZiAob3RoZXIubV9yYXJlRGF0YSkgewogICAgICAgICBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC0zMzYsOCArMzM1LDYgQEAgQ29kZUJsb2Nr
OjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9kaWRGYWlsSklUQ29tcGls
YXRpb24oZmFsc2UpCiAgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKICAgICAs
IG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKLSAgICAsIG1faGFzTGlua2VkT1NSRXhp
dChmYWxzZSkKLSAgICAsIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlKGZhbHNlKSAKICAg
ICAsIG1fbnVtQ2FsbGVlTG9jYWxzKHVubGlua2VkQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMo
KSkKICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpKQogICAgICwg
bV9oYXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKQEAgLTM1OSw3ICszNTYsOSBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCku
cHJvdmlkZXIoKSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpKTsKLSAgICAKKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3Vu
bGlua2VkQ29kZS0+bGxpbnRFeGVjdXRlQ291bnRlcigpOworCiAgICAgdm0uaGVhcC5jb2RlQmxv
Y2tTZXQoKS5hZGQodGhpcyk7CiB9CiAKQEAgLTM3MCw3ICszNjksOCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcg
dW5saW5rZWQgYnl0ZWNvZGUgZ2VuZXJhdGlvbi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2Vk
IHRvIGdlbmVyYXRlIGNvbnRyb2wKIC8vIGZsb3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRo
ZSByZWFzb24gZm9yIHRoaXMgaXMgd2UgcmVseSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0
aGUgc2FtZSBmb3IKIC8vIGFsbCB0aGUgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9j
ay4gV2UgcmVseSBvbiB0aGlzIGZhY3QgYnkgY2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMK
LS8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4KKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9j
ay4gQWxzbywgQmFzZWxpbmUgSklUIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9j
a3Mgb2YgYW4gVW5saW5rZWRDb2RlQmxvY2ssCisvLyBzbyB0aGUgYnl0ZWNvZGUgbXVzdCByZW1h
aW4gdGhlIHNhbWUgYmV0d2VlbiBDb2RlQmxvY2tzIHNoYXJpbmcgYW4gVW5saW5rZWRDb2RlQmxv
Y2suCiBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9j
aywKICAgICBKU1Njb3BlKiBzY29wZSkKIHsKQEAgLTQ3MSw2ICs0NzEsMjEgQEAgYm9vbCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBicmVhazsgXAogICAgIH0K
IAorICAgIHVuc2lnbmVkIGJpbmFyeVByb2ZpbGVJbmRleCA9IDA7CisgICAgdW5zaWduZWQgdW5h
cnlQcm9maWxlSW5kZXggPSAwOworI2RlZmluZSBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJ
TEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFE
QVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtl
ZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShiaW5hcnlQcm9maWxlSW5kZXgrKyk7IFwKKyAgICAg
ICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRD
b2RlLT51bmFyeUFyaXRoUHJvZmlsZSh1bmFyeVByb2ZpbGVJbmRleCsrKTsgXAorICAgICAgICBi
cmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlv
blN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rp
b24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGlu
c3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTMzLDE0ICs1NDgsMTQgQEAgYm9vbCBDb2RlQmxv
Y2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJvbWlz
ZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9wQWRk
KQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBMSU5L
KE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMpCi0g
ICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklM
RShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVsKQor
ICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAgIExJ
TktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJVEhf
VU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FS
SVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxF
KE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC03NjksNyArNzg0LDYgQEAg
Ym9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgIC8vIHJlbHkgb24g
dGhlIGluc3RydWN0aW9uIGNvdW50IChhbmQgYXJlIGluIHRoZW9yeSBwZXJtaXR0ZWQgdG8gYWxz
byBpbnNwZWN0IHRoZQogICAgIC8vIGluc3RydWN0aW9uIHN0cmVhbSB0byBtb3JlIGFjY3VyYXRl
IGFzc2VzcyB0aGUgY29zdCBvZiB0aWVyLXVwKS4KICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7
Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKIAogICAgIC8vIElmIHRoZSBjb25jdXJyZW50IHRocmVh
ZCB3aWxsIHdhbnQgdGhlIGNvZGUgYmxvY2sncyBoYXNoLCB0aGVuIGNvbXB1dGUgaXQgaGVyZQog
ICAgIC8vIHN5bmNocm9ub3VzbHkuCkBAIC03OTMsNiArODA3LDc2IEBAIHZvaWQgQ29kZUJsb2Nr
OjpmaW5pc2hDcmVhdGlvbkNvbW1vbihWTSYKICAgICBtX293bmVyRWRnZS5zZXQodm0sIHRoaXMs
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmNyZWF0ZSh2bSwgdGhpcykpOwogfQogCit2b2lk
IENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklU
Q29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRDb2RlKGppdENvZGUuY29weVJlZigpKTsKKwor
ICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0Q29kZU1hcCA9IHRoaXMtPmppdENvZGVNYXAo
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRs
ZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRp
b25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQz
MzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQo
Qnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgYXV0byYgaml0RGF0YSA9IGVuc3VyZUpJ
VERhdGEobG9ja2VyKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sLmlzRW1wdHkoKSk7CisgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2wg
PSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBlbnRyeSA9IGppdENvZGUtPm1fY29uc3RhbnRQ
b29sLmF0KGkpOworICAgICAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKSB7CisgICAgICAgICAg
ICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0OgorICAgICAgICAgICAg
ICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZENhbGxMaW5r
SW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRDYWxsTGlu
a0luZm8qPihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2lu
KHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPmluaXRpYWxpemVEYXRhSUModm0oKSwgdW5saW5rZWRDYWxsTGlua0luZm8s
IEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgaml0RGF0
YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGNhbGxMaW5rSW5mbzsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbzogeworICAgICAgICAgICAgICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyo+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAgIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGppdERhdGEubV9zdHViSW5mb3MuYWRkKHVubGlu
a2VkU3R1YkluZm8uYWNjZXNzVHlwZSwgQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVj
b2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+aW5pdGlhbGl6ZUZyb21Vbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKHRoaXMsIHVubGlua2VkU3R1YkluZm8pOworICAgICAgICAg
ICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBzdHViSW5mbzsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAg
ICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkRlY2wo
aW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwcjogeworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucGF5
bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtp
XSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKGNv
ZGVUeXBlKCkpIHsKKyAgICBjYXNlIEdsb2JhbENvZGU6CisgICAgY2FzZSBNb2R1bGVDb2RlOgor
ICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFs
c2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRnVuY3Rpb25Db2RlOgorICAgICAgICAvLyBX
ZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQg
YW4gdW5pbmxpbmVhYmxlIGNhbGwuCisgICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2Jz
ZXJ2YXRpb24uCisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShj
YXBhYmlsaXR5TGV2ZWwoKSkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKHRoaXMpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaml0Q29kZS0+bV9pc1NoYXJlYWJsZSAmJiAh
dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSAmJiBPcHRpb25zOjp1
c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nKCkpCisgICAgICAgIHVubGlua2VkQ29kZUJsb2NrKCkt
Pm1fdW5saW5rZWRCYXNlbGluZUNvZGUgPSBXVEZNb3ZlKGppdENvZGUpOworfQorCiBDb2RlQmxv
Y2s6On5Db2RlQmxvY2soKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtODczLDYgKzk1Nywy
NyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAK
K2Jvb2wgQ29kZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBuZWVkcyB0byBjb3JyZXNwb25k
IHRvIHdoYXQgd2UgZG8gaW5zaWRlIHNldENvbnN0YW50UmVnaXN0ZXJzLgorICAgIHN3aXRjaCAo
dW5saW5rZWRDb2RlQmxvY2soKS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVn
KSkgeworICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgIGNh
c2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcjogeworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gdW5saW5rZWRDb2RlQmxvY2soKS0+Z2V0Q29uc3RhbnQocmVnKTsKKyAg
ICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlm
IChjZWxsLT5pbmhlcml0czxTeW1ib2xUYWJsZT4odm0oKSkgfHwgY2VsbC0+aW5oZXJpdHM8SlNU
ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KHZtKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKIFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhj
b25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0
IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbikKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTg5Miw2ICs5OTcs
NyBAQCBWZWN0b3I8dW5zaWduZWQ+IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSCiAgICAgICAgIHN3
aXRjaCAocmVwcmVzZW50YXRpb24pIHsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb25zdGFudCA9IGdsb2JhbE9i
amVjdC0+bGlua1RpbWVDb25zdGFudChzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50Pihjb25z
dGFudC5hc0ludDMyQXNBbnlJbnQoKSkpOworICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50Lmlz
Q2VsbCgpKTsgLy8gVW5saW5rZWQgQmFzZWxpbmUgSklUIHJlcXVpcmVzIHRoaXMuCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVy
OgogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKQEAgLTE1
MTQsNyArMTYyMCw3IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJsb2NrOjplbnN1cmVKSVQK
ICAgICByZXR1cm4gKm1faml0RGF0YTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFz
ZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5l
Q2FjaGVzKCkKIHsKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewog
ICAgICAgICBmb3IgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxs
TGlua0luZm9zKQpAQCAtMTUyNSw2ICsxNjMxLDIwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZUJhc2VsaW5lSklUSW5saW4KICAgICAgICAgICAgIHN0dWJJbmZvLT52aXNpdFdlYWtSZWZlcmVu
Y2VzKGxvY2tlciwgdGhpcyk7CiAgICAgICAgIH0KICAgICB9CisKKworI2lmIEFTU0VSVF9FTkFC
TEVECisgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAg
ICAvLyBWZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3Jl
IHZpcnR1YWwgY2FsbHMuCisgICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
OiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxD
YWxsTGlua0luZm9zKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5r
ZWQoKSk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtd
IChKU0NlbGwqKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgfQorI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAt
MTUzNCw0NiArMTY1NCwxMiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAg
ICBib29sIGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50
RG93bmdyYWRlOwotICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0g
ICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1p
emVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFz
ZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9y
eS4KLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYm
IGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxv
Y2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJs
b2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAg
ICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJ
bnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJP
ZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUt
PmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5m
byYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1
bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgp
KS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IHVubGlua0luY29taW5nQ2FsbHMoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNh
ZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwotICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2Fm
ZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIg
Ynl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFy
c2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMg
KmluZm9zLgotICAgICAgICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYK
LSAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAg
ICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgaWYgKCEhaml0Q29kZSgpKQotICAgICAgICBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKCk7CisgICAgICAgIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShERkdfSklUKQpAQCAtMTU5NCw3ICsxNjgwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1
bms6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuazoKLSAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50
KCk7CisgICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y291bnQoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgog
ICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CkBAIC0xNjc1
LDMwICsxNzYxLDYgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgog
ICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5
cGUsIGNvZGVPcmlnaW4pOwogfQogCi1KSVRBZGRJQyogQ29kZUJsb2NrOjphZGRKSVRBZGRJQyhC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2Fk
ZElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklU
TXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVFN1YklDKiBDb2RlQmxvY2s6
OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0
YShsb2NrZXIpLm1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVROZWdJQyogQ29k
ZUJsb2NrOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewot
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJl
SklURGF0YShsb2NrZXIpLm1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCiBTdHJ1Y3R1
cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKQEAgLTMxMzMsNyAr
MzE5NSw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lm
IEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0
dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzM0OSwxMyArMzQx
MSwxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAg
c3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAg
IHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwor
ICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9m
aWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERp
dj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC0zMzY3LDExICszNDI5LDExIEBAIFVuYXJ5QXJpdGhQcm9maWxl
KiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7
CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigp
Lm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9w
TmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5j
OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5t
X2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8
T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBw
Yy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzQ3MiwyMiArMzUzNCwxNiBAQCB2b2lkIENv
ZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiB9CiAKICNpZiBFTkFCTEUoSklUKQot
dm9pZCBDb2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1Rv
Q29kZU9yaWdpbk1hcD4mJiBtYXApIAoteyAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7Ci0gICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1fcGNUb0NvZGVPcmlnaW5NYXAg
PSBXVEZNb3ZlKG1hcCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2Nr
OjpmaW5kUEModm9pZCogcGMpCiB7CisgICAgaWYgKGF1dG8qIHBjVG9Db2RlT3JpZ2luTWFwID0g
bV9qaXRDb2RlLT5wY1RvQ29kZU9yaWdpbk1hcCgpKSB7CisgICAgICAgIGlmIChzdGQ6Om9wdGlv
bmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBwY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBj
KSkKKyAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAgIH0KKwogICAgIHsKICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBpZiAoYXV0byog
aml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICAgICAgaWYgKGppdERhdGEtPm1f
cGNUb0NvZGVPcmlnaW5NYXApIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxD
b2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gaml0RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcC0+Zmlu
ZFBDKHBjKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47Ci0gICAgICAg
ICAgICB9Ci0KICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDog
aml0RGF0YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNv
bnRhaW5zUEMocGMpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxD
b2RlT3JpZ2luPihzdHViSW5mby0+Y29kZU9yaWdpbik7CkBAIC0zNTIxLDI4ICszNTc3LDE0IEBA
IHN0ZDo6b3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0
ZWNvZGVJbmRleDsKIH0KIAotaW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQz
Ml90IHRocmVzaG9sZCkKLXsKLSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9w
dGltaXplKCkpIHsKLSAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICBy
ZXR1cm4gdGhyZXNob2xkOwotICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1
cm4gdGhyZXNob2xkICogNDsKLSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1
cm4gdGhyZXNob2xkIC8gMjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIHRocmVzaG9sZDsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkK
K3ZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIu
c2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRB
ZnRlcldhcm1VcCgpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdU
aHJlc2hvbGQodW5saW5rZWRDb2RlQmxvY2soKS0+dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOwogfQogCi12b2lkIENvZGVCbG9jazo6aml0U29v
bigpCit2b2lkIENvZGVCbG9jazo6aml0TmV4dEludm9jYXRpb24oKQogewotICAgIG1fbGxpbnRF
eGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+
c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwogfQogCiBib29sIENvZGVCbG9jazo6aGFzSW5zdGFs
bGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdApAQCAtMzU4OCwyOCArMzYzMCw4IEBAIHZvaWQg
Q29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRvdWJsZSBudW1TdWJzID0gMC4wOwog
ICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKLSAgICBhdXRvIGNvdW50SUNzID0gWyZd
IChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IGNv
ZGVCbG9jay0+bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKEpJVEFkZElDKiBh
ZGRJQyA6IGppdERhdGEtPm1fYWRkSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtQWRkcysrOwot
ICAgICAgICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29kZVNpemUoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMgOiBqaXREYXRhLT5t
X211bElDcykgewotICAgICAgICAgICAgICAgIG51bU11bHMrKzsKLSAgICAgICAgICAgICAgICB0
b3RhbE11bFNpemUgKz0gbXVsSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lDIDogaml0RGF0YS0+bV9uZWdJQ3MpIHsKLSAgICAg
ICAgICAgICAgICBudW1OZWdzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxOZWdTaXplICs9IG5l
Z0lDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJVFN1
YklDKiBzdWJJQyA6IGppdERhdGEtPm1fc3ViSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtU3Vi
cysrOwotICAgICAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJQy0+Y29kZVNpemUoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVC
bG9jayopIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmUtaW1wbGVtZW50IHRoaXMg
dXNpbmcgSklUQ29kZS4KICAgICB9OwogICAgIGhlYXAoKS0+Zm9yRWFjaENvZGVCbG9jayhjb3Vu
dElDcyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCBjbGFzcyBKU01vZHVs
ZUVudmlyb25tZW50OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTExJbnRQ
cm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OwogY2xhc3MgTWV0YWRhdGFU
YWJsZTsKLWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExp
c3Q7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAog
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEp
OwogCkBAIC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFk
YXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNp
Z25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citw
cml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7Citw
dWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBA
IHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJz
OyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2ln
bmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29k
ZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9j
ayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoK
ICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9v
bCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25D
ZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBg
cmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChy
ZWcuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXND
ZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewog
ICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJz
KTsKQEAgLTI2OCwyMyArMjU5LDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUKQogICAgIHN0
cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwor
ICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJh
ZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAgICAgIEJhZzxKSVRBZGRJQz4g
bV9hZGRJQ3M7Ci0gICAgICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Ci0gICAgICAgIEJhZzxK
SVROZWdJQz4gbV9uZWdJQ3M7Ci0gICAgICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7CiAgICAg
ICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxM
aW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5m
bz4+IG1faW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3Jw
aGljQ2FsbE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4g
bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1
bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdK
dW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29s
IG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2pp
dENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29s
OworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAg
IH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGlu
ZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkp
CkBAIC0yOTMsMjIgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgSklURGF0YSYgZW5zdXJl
SklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAKLSAgICBKSVRBZGRJQyog
YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11
bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFy
eUFyaXRoUHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQotCi0g
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+Ci0gICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAg
ICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVy
biBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2Vu
ZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUU3ViSUMqIGFk
ZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklD
KHByb2ZpbGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdERhdGEpOyB9CiAKICAgICBTdHJ1
Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSwgQ29kZU9yaWdpbik7CiAKQEAg
LTMyMiwxOCArMjk2LDggQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJ
bmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlu
a0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAg
ICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAg
IHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBl
bnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsK
LSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0gICAgewotICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1
cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBjb25zdCBKSVRDb2Rl
TWFwJiBqaXRDb2RlTWFwKCk7CiAKLSAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6
dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpvcHRpb25hbDxDb2Rl
T3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwogCiAgICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0
ZXJzKFJlZ2lzdGVyU2V0KTsKQEAgLTQ3Miw2ICs0MzYsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJp
bmcgbmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9CiAgICAgdW5zaWduZWQg
bnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
YXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9u
dW1QYXJhbWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNlSklUKCkpOwpAQCAtNTY5LDggKzUzNCwxMCBA
QCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0
YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAg
ICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCld
LmdldCgpOyB9CisgICAgYm9vbCBpc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZp
cnR1YWxSZWdpc3RlcikgY29uc3Q7CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKHJlZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKGluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNW
ZWN0b3JCdWZmZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0
YW50UmVnaXN0ZXJzKSArIGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5
T2Zmc2V0KCk7IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBp
bmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBu
dW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9
CkBAIC01OTUsMjIgKzU2MiwyMiBAQCBwdWJsaWM6CiAgICAgLy8gSnVtcCBUYWJsZXMKIAogI2lm
IEVOQUJMRShKSVQpCi0gICAgU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpCisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShp
bnQgdGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRj
aEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFu
dFBvb2woKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAg
ICAgcmV0dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wu
ZGF0YSgpOwogICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIHVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIAotI2lm
IEVOQUJMRShKSVQpCi0gICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUo
aW50IHRhYmxlSW5kZXgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEp
OwotICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07Ci0gICAgfQorI2lmIEVOQUJMRShERkdfSklUKQorICAgIFN0cmluZ0p1bXBUYWJs
ZSYgZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVK
dW1wVGFibGUmIGRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CiAjZW5kaWYKKwog
ICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIApAQCAt
NjMyLDIxICs1OTksMjAgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xk
UmVhY2hlZCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNo
ZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOworICAgICAgICByZXR1cm4gbV9sbGlu
dEV4ZWN1dGVDb3VudGVyLT5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKICAg
ICB9CiAKICAgICB2b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCiAgICAgewotICAgICAgICBtX2xs
aW50RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICAgICAgbV9sbGludEV4
ZWN1dGVDb3VudGVyLT5kZWZlckluZGVmaW5pdGVseSgpOwogICAgIH0KIAotICAgIGludDMyX3Qg
dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2Fy
bVVwKCk7CiAgICAgdm9pZCBqaXRTb29uKCk7CisgICAgdm9pZCBqaXROZXh0SW52b2NhdGlvbigp
OwogCiAgICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3Vu
dGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7
CisgICAgICAgIHJldHVybiAqbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIH0KIAogICAgIHR5
cGVkZWYgSGFzaE1hcDxzdGQ6OnR1cGxlPFN0cnVjdHVyZUlELCB1bnNpZ25lZD4sIEZpeGVkVmVj
dG9yPExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVj
dHVyZVdhdGNocG9pbnRNYXA7CkBAIC03OTcsNiArNzYzLDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3Rz
OyB9CiAgICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1
Z2dlclJlcXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVx
dWVzdHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVx
dWVzdHMpOyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2lu
dHMpOwogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykK
QEAgLTgzOCw2ICs4MDUsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2Nr
IG1fbG9jazsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJp
dGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBF
TkFCTEUoSklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBE
Rkc6OkNhcGFiaWxpdHlMZXZlbApAQCAtODQ3LDggKzgxNSw2IEBAIHB1YmxpYzoKICAgICBib29s
IG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1faGFzQmVlbkNvbXBpbGVk
V2l0aEZUTCA6IDE7CiAKLSAgICBib29sIG1faGFzTGlua2VkT1NSRXhpdCA6IDE7Ci0gICAgYm9v
bCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA6IDE7CiAgICAgYm9vbCBtX3Zpc2l0Q2hp
bGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAgLy8gSW50ZXJuYWwgbWV0
aG9kcyBmb3IgdXNlIGJ5IHZhbGlkYXRpb24gY29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBp
dCB3YXNuJ3QKQEAgLTkwNywxNiArODczLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3Ry
dWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBt
X2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpOyB9CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdp
YmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKLSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRp
bnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0g
ICAgICAgIHJldHVybiAhbV91bmxpbmtlZENvZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAg
fQorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5l
Q2FjaGVzKCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJ
bmxpbmVDYWNoZXMoKTsKKyAgICB2b2lkIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5k
aWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMo
KTsKQEAgLTEwMTAsNyArOTcyLDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50
TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9q
aXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJ
VERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2
ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jawpAQCAtMTAyOSw3ICs5OTMsNyBAQCBwcml2YXRl
OgogCiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAg
ICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJh
c2VsaW5lRXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9
OwogCiAgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAg
ICAgdWludDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgzMDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRl
ICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5s
aW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkg
KzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlm
IChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0
YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9w
cm9maWxlLCBmYWxzZSk7IH0pOwotCiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVF
X1BST0ZJTEUoVklTSVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZv
ckVhY2g8T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1
Nyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAg
ICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAg
ICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwz
OCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQog
CisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZU19JTkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJs
b2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9q
aXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFwOworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1
bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+
bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmlu
Z0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQg
dGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2Rl
LmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlm
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBD
b2RlQmxvY2s6OmRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NF
UlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PERGRzo6SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6
ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChq
aXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZH
OjpKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7
CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQog
ICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25D
b3VudGVyLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5
LDcgQEAgYm9vbCBFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNv
ZGVCbG9jayA/IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQp
OworICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAg
ICBtX2NvdW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25D
b3VudGVyLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAg
cHVibGljOgogICAgIHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3Ug
dXNlIHRoaXMsIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVy
biBmYWxzZS4KICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9j
ayopOwogICAgIGJvb2wgaGFzQ3Jvc3NlZFRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291
bnRlciA+PSAwOyB9Ci0gICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQs
IENvZGVCbG9jayopOworICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xk
LCBDb2RlQmxvY2sqID0gbnVsbHB0cik7CiAgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwog
ICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90
b3RhbENvdW50KSArIG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwpAQCAtODYsMTMgKzg2LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVCB0aHJlc2hvbGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVz
aG9sZChUIHRocmVzaG9sZCkKICAgICB7Ci0gICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwot
ICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNr
cG9pbnRzKCkgJiYgZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xv
YmFsT2JqZWN0LT53ZWFrUmFuZG9tSW50ZWdlcigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0Jl
dHdlZW5DaGVja3BvaW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hv
bGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAg
IGludDMyX3QgbWF4VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVj
a3BvaW50cygpOwogICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAg
ICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xk
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0
YWRhdGEuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0
cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0
QnlJZE1vZGVNZXRhZGF0YVVuc2V0KSA9PSAxMik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFk
YXRhQXJyYXlMZW5ndGggeworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2Zp
bGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVu
Z3RoLCBhcnJheVByb2ZpbGUpOyB9CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07
CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09
IDEyKTsKQEAgLTg4LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAg
ICAgIEdldEJ5SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENh
Y2hpbmc7IC8vIFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgog
ICAgIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9k
ZU1ldGFkYXRhRGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5z
ZXQgdW5zZXRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxl
bmd0aE1vZGU7CkBAIC0xMTcsNiArMTE5LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGEg
ewogICAgICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhUHJvdG9Mb2FkIHByb3RvTG9hZE1vZGU7CiAg
ICAgfTsKICAgICBHZXRCeUlkTW9kZSBtb2RlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1v
ZGUpOyB9CiAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsKIH07CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNw
cAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIEdldEJ5U3Rh
dHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgcmV0dXJuIEdldEJ5U3Rh
dHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAgICAKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJ
ZFNlbGY6IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZt
KCkpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQ
cm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJ
KHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBA
IHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEcKIAogICAgIC8vIExldCdz
IHN0b3JlIHRoZSByZXVzZWQgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4gQWZ0ZXIgdGhhdCwgd2Ug
Y2FuIHVzZSBhbGxvY2F0ZWQgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgYWxsb2NhdG9y
LnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOworICAgICAgICBhbGxvY2F0
b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CiAKICAgICBpZiAoR2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2co
ImJhc2VHUFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsKQEAgLTIyNSwxMiArMjI1LDkgQEAgdm9pZCBH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogICAgICAgICByZWdpc3RlcnNUb1Nw
aWxsRm9yQ0NhbGwuc2V0KHJlZyk7CiAgICAgZm9yIChGUFJSZWcgcmVnIDogZnBTY3JhdGNoKQog
ICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CisgICAgaWYgKGppdC5j
b2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2Fs
bC5zZXQoc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CiAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckND
YWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckNDYWxsKCkpOwot
I2lmIENQVShBUk02NCkKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2so
KTsKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgcmVnaXN0ZXJzVG9T
cGlsbEZvckNDYWxsLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCiAKICAgICBBY2Nl
c3NDYXNlU25pcHBldFBhcmFtcyBwYXJhbXMoc3RhdGUubV92bSwgV1RGTW92ZShyZWdzKSwgV1RG
TW92ZShncFNjcmF0Y2gpLCBXVEZNb3ZlKGZwU2NyYXRjaCkpOwogICAgIHNuaXBwZXQtPmdlbmVy
YXRvcigpLT5ydW4oaml0LCBwYXJhbXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzksNyArMTM5LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgog
ICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpJbkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1
YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSk7
CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3Bl
cnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZp
ZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsMTYg
QEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNz
KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0
eUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlm
ICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBk
eW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcg
ZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKICAgICAKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0y
MzMsMjMgKzIzOCwzMSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3Rl
CiAgICAgcmV0dXJuIGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJl
ZzsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFj
ZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jv
b2wgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZv
KTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYg
KCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9m
ZnNldCkpOworICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJs
b2NrLCBzdHViSW5mbywgb2Zmc2V0KSk7CisKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3Ry
dWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQogCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIApAQCAtMjc5LDIyICsyOTIsMjUgQEAg
Ym9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UgogICAgIHJldHVybiBsaW5r
ZWRDb2RlSW5saW5lOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxl
bmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJ
bmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgQVNT
RVJUKGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogCiAgICAgaWYgKCFzdHViSW5m
by5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlm
IChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWhhc0FueUFycmF5U3RvcmFnZShhcnJh
eS0+aW5kZXhpbmdUeXBlKCkpICYmIGFycmF5LT5pbmRleGluZ1R5cGUoKSAhPSBBcnJheUNsYXNz
OwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgQVNTRVJUKGlzQ2FjaGVhYmxlQXJy
YXlMZW5ndGgoc3R1YkluZm8sIGFycmF5KSk7CisgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ss
IGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywgYXJyYXkpKTsKIAog
ICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0zMTksMTcgKzMzNSwyMCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVB
cnJheUxlbmd0aChTCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLWJvb2wgSW5s
aW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCitib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICBpZiAo
IXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJ
bmZvKTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmlu
Z0xlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQogewotICAgIEFTU0VSVChpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChzdHViSW5mbykpOworICAg
IEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxv
Y2ssIHN0dWJJbmZvKSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmll
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzYzLDEzICszODIsMTggQEAgYm9vbCBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKAogfQogCiAKLWJvb2wgSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNz
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIXN0
dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gVGhlc2UgZHluYW1p
YyBzbG90cyBnZXQgZmlsbGVkIGluIGJ5IFN0cnVjdHVyZVN0dWJJbmZvLiBOb3RoaW5nIGVsc2Ug
dG8gZG8uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIEdQUlJlZyBiYXNlID0g
c3R1YkluZm8uYmFzZUdQUjsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVl
UmVncygpOwogCkBAIC00MDYsMTMgKzQzMCwxMyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjCiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAg
ICAgLy8gSWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9w
IHNsZWQgKGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFu
IGluZGlyZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcg
bV9jb2RlUHRyLgotICAgICAgICBpZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7
CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCAmJiBzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElm
IG1fY29kZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24s
IHRoaXMgbWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAg
ICAgICAgICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNo
aW5nIGNvZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBj
b2RlLgogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVz
cygpID09IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygp
KSB7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1Yklu
Zm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQo
Q0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnN0dWJJbmZvKSwgc3R1
YkluZm8ubV9zdHViSW5mb0dQUik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKENDYWxs
SGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHVi
Um91dGluZVB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1w
KCk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gc3R1YkluZm8uZG9u
ZUxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKQEAgLTQyMSw3ICs0NDUsOSBAQCB2b2lkIElubGluZUFjY2Vz
czo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nl
c3M6IGxpbmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAg
ICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CisgICAgICAgIHN0dWJJbmZvLm1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2Vz
cyBjb2RlLgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzQsOCArNDYwLDE0IEBAIHZv
aWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICB9KSwgIklubGluZUFj
Y2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpy
ZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCit2b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKKyAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSAmJiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCkgeworICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSBzdHViSW5mby5z
bG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLgorICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIo
c3R1YkluZm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRh
PHZvaWQoQ0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIGEgbm9wIHNsZWQgaGVyZSBiZWNhdXNlIG5vYm9keSBzaG91bGQgYmUg
anVtcGluZyBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCiAgICAgICAgIGF1dG8ganVtcCA9IGpp
dC5qdW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUFjY2Vzcy5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDE0ICs5OSwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBzdGQ6Om1heChzaXplLCBzaXplRm9yUHJvcGVydHlBY2Nl
c3MoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nl
c3MoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAg
c3RhdGljIGJvb2wgY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJ
bmZvJiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0
KTsKLSAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJ
bmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3Ro
KFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0
aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0
ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRp
YyBib29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3Rh
dGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wg
Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFBy
b3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29s
IGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7
CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJbkFj
Y2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOworICAgIHN0
YXRpYyBib29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJik7CiAKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2lu
Z0lubGluZUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CiAgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1
YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHJldmlz
aW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25N
b2RlTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBPVkVSTE9BRF9C
SVRXSVNFX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJdGVyYXRpb25Nb2RlTWV0
YWRhdGEgewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSXRlcmF0aW9u
TW9kZU1ldGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRl
Y2x0eXBlKHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRpb25Nb2RlKSk7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0lu
Zm8uaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0xMSW50Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKExMSW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KIAogcHJpdmF0ZToKICAg
ICB1aW50cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgeyB1bmxpbmtl
ZEJpdCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDE3IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgYml0V2lkdGhGb3JNYXgKICAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAogICAgIG1h
Y3JvKE9wSXRlcmF0b3JOZXh0KSBcCiAKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQklO
QVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKKyAgICBtYWNybyhPcEFkZCkgXAorICAgIG1hY3Jv
KE9wTXVsKSBcCisgICAgbWFjcm8oT3BEaXYpIFwKKyAgICBtYWNybyhPcFN1YikgXAorCisjZGVm
aW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKKyAg
ICBtYWNybyhPcEluYykgXAorICAgIG1hY3JvKE9wRGVjKSBcCisgICAgbWFjcm8oT3BOZWdhdGUp
IFwKKwogCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInR5cGUtbGltaXRzIikKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZv
aWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpzdWNjZWVkKCkKIHsKICAgICByZXN0b3JlU2NyYXRj
aCgpOwogICAgIGlmIChqaXQtPmNvZGVCbG9jaygpLT51c2VEYXRhSUMoKSkKLSAgICAgICAgaml0
LT5yZXQoKTsKKyAgICAgICAgaml0LT5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mRG9uZUxvY2F0
aW9uKCkpLCBKU0ludGVybmFsUHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIHN1Y2Nlc3MuYXBw
ZW5kKGppdC0+anVtcCgpKTsKIH0KQEAgLTExMCw2ICsxMTAsOCBAQCBjb25zdCBSZWdpc3RlclNl
dCYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7CiAKICAg
ICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1fbGl2ZVJlZ2lzdGVy
c1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9jYXRvci0+dXNlZFJl
Z2lzdGVycygpKTsKKyAgICAgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQor
ICAgICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5hZGQoc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIpOwogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGw7
CkBAIC0xMjgsMTEgKzEzMCwxMiBAQCBhdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2Vy
dmVMaXZlCiAgICAgfTsKIH0KIAotYXV0byBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZl
TGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29uc3QgUmVnaXN0
ZXJTZXQmIGV4dHJhKSAtPiBTcGlsbFN0YXRlCithdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6
cHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucygpIC0+
IFNwaWxsU3RhdGUKIHsKICAgICBSZWdpc3RlclNldCBsaXZlUmVnaXN0ZXJzID0gYWxsb2NhdG9y
LT51c2VkUmVnaXN0ZXJzKCk7CisgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygp
KQorICAgICAgICBsaXZlUmVnaXN0ZXJzLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7CiAg
ICAgbGl2ZVJlZ2lzdGVycy5leGNsdWRlKGNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgbGl2
ZVJlZ2lzdGVycy5tZXJnZShleHRyYSk7CiAKICAgICBjb25zdGV4cHIgdW5zaWduZWQgZXh0cmFT
dGFja1BhZGRpbmcgPSAwOwogICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JS
ZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVS
ZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqaml0LCBsaXZlUmVnaXN0ZXJzLCBleHRyYVN0YWNrUGFk
ZGluZyk7CkBAIC01OTYsMTYgKzU5OSwxMSBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHlt
b3JwaGljQWNjZXNzCiAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAgIHN0YXRl
LmppdCA9ICZqaXQ7CiAKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewotICAgICAg
ICBpZiAoc3RhdGUubV9kb2VzSlNHZXR0ZXJTZXR0ZXJDYWxscykgewotICAgICAgICAgICAgLy8g
V2UgaGF2ZSBubyBndWFyYW50ZWUgdGhhdCBzdGFjay1wb2ludGVyIGlzIHRoZSBleHBlY3RlZCBv
bmUuIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBpZiB3ZSBkbyBub3QgaGF2ZSBKUyBnZXR0ZXIgLyBz
ZXR0ZXIgY2FsbHMgc2luY2Ugc3RhY2stcG9pbnRlciBpcwotICAgICAgICAgICAgLy8gYSBjYWxs
ZWUtc2F2ZSByZWdpc3RlciBpbiB0aGUgQyBjYWxsaW5nIGNvbnZlbnNpb24uIEhvd2V2ZXIsIG91
ciBKUyBleGVjdXRhYmxlIGNhbGwgZG9lcyBub3Qgc2F2ZSBzdGFjay1wb2ludGVyLiBTbyB3ZSBh
cmUgYWRqdXN0aW5nIHN0YWNrLXBvaW50ZXIgYWZ0ZXIKLSAgICAgICAgICAgIC8vIEpTIGdldHRl
ciAvIHNldHRlciBjYWxscy4gQnV0IHRoaXMgY291bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlIGlu
aXRpYWwgc3RhY2stcG9pbnRlciwgYW5kIG1ha2VzIFBBQyB0YWdnaW5nIGJyb2tlbi4KLSAgICAg
ICAgICAgIC8vIFRvIGVuc3VyZSBQQUMtdGFnZ2luZyB3b3JrLCB3ZSBmaXJzdCBhZGp1c3Qgc3Rh
Y2stcG9pbnRlciB0byB0aGUgYXBwcm9wcmlhdGUgb25lLgotICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGppdC50YWdSZXR1
cm5BZGRyZXNzKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKKyAgICBpZiAoIWNhbkJlU2hhcmVkICYmIEFTU0VSVF9FTkFCTEVEKSB7CisgICAg
ICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFj
a1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgYXV0byBvayA9IGppdC5i
cmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgaml0LmJyZWFrcG9pbnQo
KTsKKyAgICAgICAgb2subGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0ZS5wcmVzZXJ2ZWRS
ZXVzZWRSZWdpc3RlclN0YXRlID0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewog
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjYWxjdWxhdGVMaXZlUmVnaXN0ZXJzRm9yQ2FsbEFuZEV4
Y2VwdGlvbkhhbmRsaW5nKCk7CiAKICAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7Ci0gICAgU3Bp
bGxTdGF0ZSBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRp
b25zKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7CisgICAgU3BpbGxTdGF0ZSBwcmVz
ZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAg
ICB2b2lkIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNl
cHRpb24oY29uc3QgU3BpbGxTdGF0ZSYpOwogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNG
cm9tU3RhY2tGb3JDYWxsKGNvbnN0IFNwaWxsU3RhdGUmLCBjb25zdCBSZWdpc3RlclNldCYgZG9u
dFJlc3RvcmUgPSB7IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTAg
KzE4MCwxMCBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVy
KCk7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh1aWQpOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1
YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7Cisg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICBy
ZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0dWJJbmZv
LT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAg
ICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0cnVj
dHVyZSwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAko
cmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTY1LDkg
KzY2LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKAogICAgIEFT
U0VSVChoYXNDb25zdGFudElkZW50aWZpZXIpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENh
Y2hlVHlwZTo6R2V0QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0g
ICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
ID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCku
aGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9m
ZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVT
dHViSW5mbzo6aW5pdEFycmF5TGVuZ3RoKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxv
Y2tlcikKQEAgLTg3LDkgKzg4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5
SWRSZXBsYQogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KTsKICAg
ICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlKTsKICAgICBt
X2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAg
IG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUt
PmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7
Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBv
ZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC05Nyw5ICs5OCw5IEBAIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGMKICAgICBBU1NFUlQobV9jYWNoZVR5
cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVU
eXBlOjpJbkJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAu
d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7
CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OmRlcmVmKCkKQEAgLTIzNiw3ICsyMzcsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0
cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgIC8vIHdlJ3JlIGJ1ZmZlcmVkIGlzIGJlY2F1c2Ugd2Ug
cmVseSBvbiBpdCB0byByZXNldCBkdXJpbmcgR0MgaWYgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlCiAgICAgICAgIC8vIGlzIGNvbGxlY3RlZC4KICAgICAgICAgbV9pZGVudGlmaWVyID0gbnVs
bHB0cjsKLSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7CisgICAg
ICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAgICAgICAgIAogICAgICAgICAv
LyBJZiB3ZSBnZW5lcmF0ZWQgc29tZSBjb2RlIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBhdHRlbXB0
IHRvIHJlcGF0Y2ggaW4gdGhlIGZ1dHVyZSB1bnRpbCB3ZQogICAgICAgICAvLyBnYXRoZXIgZW5v
dWdoIGNhc2VzLgpAQCAtMjUxLDcgKzI1Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJl
c2V0KGNvbnN0IENvbmMKIHsKICAgICBjbGVhckJ1ZmZlcmVkU3RydWN0dXJlcygpOwogICAgIG1f
aWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNs
ZWFyKCk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKIAogICAgIGlmICht
X2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CkBAIC0yODUs
NiArMjg2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAg
ICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0
aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NU
eXBlOjpJbkJ5SWQ6CkBAIC0zNjAsOCArMzYyLDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRXZWFrUmVmZXJlbgogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0gICAg
aWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgaXNWYWxpZCAmPSB2bS5o
ZWFwLmlzTWFya2VkKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgaWYg
KFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpCisg
ICAgICAgIGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpOwogICAgIGlmICht
X2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIGlzVmFsaWQgJj0gdS5zdHVi
LT52aXNpdFdlYWsodm0pOwogCkBAIC0zNzUsOCArMzc3LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7Ci0gICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgbV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZpc2l0b3Iudm0o
KSkpCisgICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAKICAgICBpZiAo
bV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICB1LnN0dWItPnByb3BhZ2F0
ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwpAQCAtNDMwLDYgKzQzMiwyMDQgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVU
eXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYg
dW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBlID0gdW5saW5rZWRTdHViSW5mby5h
Y2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHViSW5mby5zdGFydDsKKyAgICBkb25l
TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93UGF0aFN0
YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKyAg
ICBjYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KHVubGlua2VkU3R1
YkluZm8uYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpOworICAgIGNvZGVPcmlnaW4gPSBDb2RlT3Jp
Z2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgbV9jb2RlUHRyID0gc2xv
d1BhdGhTdGFydExvY2F0aW9uOworCisgICAgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICBpZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NU
eXBlOjpHZXRCeUlkICYmIHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpIHsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9yX25leHQsIHdlIGNhbid0IGNsb2JiZXIgdGhl
ICJkb250Q2xvYmJlclJlZ2lzdGVyIiByZWdpc3RlciBlaXRoZXIuCisgICAgICAgIHVzZWRSZWdp
c3RlcnMuYWRkKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdpc3Rlcik7
CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpEZWxldGVCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRl
QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxl
dGVCeUlEOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6Cisg
ICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbklu
QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5
SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOiAKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBzd2l0
Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5v
dERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3Ry
aWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlm
ICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRT
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6
OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
UHV0QnlWYWw6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2Vk
U3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0
cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSA/
IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25Q
dXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6
RGVsZXRlQnlWYWw6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAg
ICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAg
cmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5Owor
ICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAg
ICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNl
bGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBJ
bnZhbGlkR1BSUmVnOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVy
czo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRC
eVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgorICAgICAgICBoYXND
b25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSBmYWxzZTsKKyAgICAgICAgcHJvdG90eXBlSXNLbm93bk9iamVjdCA9IGZhbHNlOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAg
dmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAg
cmVncy5wcm90b3R5cGVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOwor
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAg
IGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7
CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
ICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IElu
dmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0
OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6
R2V0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAg
cmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0
cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICAgICAgcmVncy50aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBi
YXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9H
UFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0
UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAg
ICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAg
cmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5Owor
ICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsKQorICAgICAg
ICAgICAgbV9hcnJheVByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9m
aWxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFu
ZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBoYXND
b25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MuYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6YnJhbmQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogI2lmIEFTU0VS
VF9FTkFCTEVECiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIu
aCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUg
IlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0
dXJlU2V0LmgiCkBAIC01Niw2ICs1Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhf
dCB7CiAgICAgR2V0QnlWYWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQ
cml2YXRlTmFtZSwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFt
ZSwKQEAgLTc4LDYgKzgwLDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAg
IFN0cmluZ0xlbmd0aAogfTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisK
IGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1
Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsx
MDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgp
OwogCisgICAgdm9pZCBpbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29k
ZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJ
VF9BR0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVu
Y2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAg
LTMyNSwxMyArMzMxLDE5IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW47CisgICAgUHJvcGVydHlPZmZzZXQgYnlJZFNlbGZPZmZzZXQ7CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBieUlkU2VsZk9mZnNldCk7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
KTsgfQogICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgfSBieUlkU2VsZjsKICAgICAgICAgUG9seW1vcnBoaWNB
Y2Nlc3MqIHN0dWI7CiAgICAgfSB1OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHZt
LmdldFN0cnVjdHVyZShtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIH0KKyAgICBT
dHJ1Y3R1cmVJRCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAwIH07CiBwcml2YXRlOgog
ICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIC8vIFJlcHJlc2VudHMg
dGhvc2Ugc3RydWN0dXJlcyB0aGF0IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nlc3NDYXNlcyBp
biB0aGUgUG9seW1vcnBoaWNBY2Nlc3MuCkBAIC0zNTIsNiArMzY0LDcgQEAgcHVibGljOgogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2RlUHRyOwog
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVQdHIoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1fY29kZVB0cik7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mRG9uZUxvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
cnVjdHVyZVN0dWJJbmZvLCBkb25lTG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlNsb3dQYXRoU3RhcnRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihT
dHJ1Y3R1cmVTdHViSW5mbywgc2xvd1BhdGhTdGFydExvY2F0aW9uKTsgfQogICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFN0cnVjdHVyZVN0dWJJbmZvLCBtX3Nsb3dPcGVyYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkNvdW50ZG93bigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1
cmVTdHViSW5mbywgY291bnRkb3duKTsgfQpAQCAtNDQ3LDYgKzQ2MCwxNyBAQCBpbmxpbmUgYXV0
byBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1
dEtpbmQgcHV0S2luZDsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtp
bmQgeyBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9k
ZSB7IEVDTUFNb2RlOjpzbG9wcHkoKSB9OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8v
IFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNo
ZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNh
Y2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRp
b247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRo
U3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5j
cHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dXBlclNhbXBsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgcHJp
bnRTdXBlclNhbXBsZXJTdGF0ZSgpCiAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAxMDAuMCAqIGlu
IC8gKGluICsgb3V0KTsKICAgICBpZiAocGVyY2VudGFnZSAhPSBwZXJjZW50YWdlKQogICAgICAg
ICBwZXJjZW50YWdlID0gMC4wOwotICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3Vw
ZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJQZXJj
ZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIiVcbiIp
OwogfQogCiB2b2lkIGVuYWJsZVN1cGVyU2FtcGxlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlVu
bGlua2VkQ29kZUJsb2NrLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNs
dWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVj
dHMuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKQEAgLTc4LDYgKzc5LDggQEAgVW5saW5rZWRD
b2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgICAgICBjcmVhdGVSYXJlRGF0YUlm
TmVjZXNzYXJ5KGxvY2tlcik7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fcHJpdmF0ZUJyYW5kUmVx
dWlyZW1lbnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQ6
Ok5lZWRlZCk7CiAgICAgfQorCisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVz
aG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAo
KSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpAQCAtMzE2LDYgKzMxOSw0OCBA
QCBpbnQgVW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzCiAgICAgcmV0dXJuIG1f
b3V0T2ZMaW5lSnVtcFRhcmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAorI2lmIEFTU0VS
VF9FTkFCTEVECitib29sIFVubGlua2VkQ29kZUJsb2NrOjpoYXNJZGVudGlmaWVyKFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpCit7CisgICAgaWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSA+IDEwMCkg
eworICAgICAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpICE9IG1fY2FjaGVkSWRlbnRpZmll
clVpZHMuc2l6ZSgpKSB7CisgICAgICAgICAgICBMb2NrZXIgbG9ja2VyKG1fY2FjaGVkSWRlbnRp
ZmllclVpZHNMb2NrKTsKKyAgICAgICAgICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBj
YWNoZWRJZGVudGlmaWVyVWlkczsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50aWZpZXIgPSB0aGlzLT5pZGVudGlmaWVyKGkpOworICAgICAgICAgICAg
ICAgIGNhY2hlZElkZW50aWZpZXJVaWRzLmFkZChpZGVudGlmaWVyLmltcGwoKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAg
ICBtX2NhY2hlZElkZW50aWZpZXJVaWRzID0gV1RGTW92ZShjYWNoZWRJZGVudGlmaWVyVWlkcyk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5jb250
YWlucyh1aWQpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJP
ZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkg
PT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKyNlbmRpZgorCitpbnQzMl90IFVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JK
SVQoaW50MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRPcHRpbWl6ZSgpKSB7Cisg
ICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9s
ZDsKKyAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAq
IDQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAv
IDI7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0aHJlc2hv
bGQ7Cit9CisKKwogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxl
cygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWV0YWRhdGEtPmlzRmluYWxpemVkKCkpOwpA
QCAtMzM3LDE1ICszODIsMjUgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFy
ZWRQcgogICAgIGlmIChtX21ldGFkYXRhLT5oYXNNZXRhZGF0YSgpKSB7CiAgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mQXJyYXlQcm9maWxlcyA9IDA7CiAKLSNkZWZpbmUgQ09VTlQoX19vcCkgXAot
ICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxf
X29wPigpOworI2RlZmluZSBDT1VOVChfX29wKSBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9t
ZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOwogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lU
SF9BUlJBWV9QUk9GSUxFKENPVU5UKQogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElO
VF9DQUxMX0xJTktfSU5GTyhDT1VOVCkKICN1bmRlZiBDT1VOVAogICAgICAgICBudW1iZXJPZkFy
cmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9yTmV4dD4oKTsK
ICAgICAgICAgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8
T3BHZXRCeUlkPigpOwotCiAgICAgICAgIG1fYXJyYXlQcm9maWxlcyA9IEZpeGVkVmVjdG9yPFVu
bGlua2VkQXJyYXlQcm9maWxlPihudW1iZXJPZkFycmF5UHJvZmlsZXMpOworCisgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mQmluYXJ5QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5UKF9f
b3ApIG51bWJlck9mQmluYXJ5QXJpdGhQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVz
PF9fb3A+KCk7CisgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0JJTkFSWV9BUklUSF9QUk9G
SUxFKENPVU5UKQorI3VuZGVmIENPVU5UCisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcyA9
IEZpeGVkVmVjdG9yPEJpbmFyeUFyaXRoUHJvZmlsZT4obnVtYmVyT2ZCaW5hcnlBcml0aFByb2Zp
bGVzKTsKKworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyA9IDA7
CisjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzICs9IG1fbWV0
YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhf
VU5BUllfQVJJVEhfUFJPRklMRShDT1VOVCkKKyN1bmRlZiBDT1VOVAorICAgICAgICBtX3VuYXJ5
QXJpdGhQcm9maWxlcyA9IEZpeGVkVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPihudW1iZXJPZlVu
YXJ5QXJpdGhQcm9maWxlcyk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgzMDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1
ZGUgIkRGR0V4aXRQcm9maWxlLmgiCisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2lu
Y2x1ZGUgIkV4cHJlc3Npb25SYW5nZUluZm8uaCIKICNpbmNsdWRlICJIYW5kbGVySW5mby5oIgog
I2luY2x1ZGUgIklkZW50aWZpZXIuaCIKQEAgLTY0LDYgKzY2LDcgQEAgY2xhc3MgVW5saW5rZWRD
b2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNsYXNzIFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsK
K2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKIGVudW0gY2xh
c3MgTGlua1RpbWVDb25zdGFudCA6IGludDMyX3Q7CiAKQEAgLTE3NSw2ICsxNzgsNyBAQCBwdWJs
aWM6CiAKICAgICBjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25z
dGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBjb25z
dCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudElu
ZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29u
c3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3Jl
Zy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
KSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBAIC0y
MDcsNiArMjExLDE1IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3Jp
cHRNb2RlKTsgfQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygp
IGNvbnN0OworICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5k
ZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIoKTsg
fQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbikKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gaW5z
dHJ1Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9u
c0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVn
aW4gJiYgaW5zdHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4gaW5z
dHJ1Y3Rpb24gLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CisgICAgdW5zaWduZWQgaW5zdHJ1
Y3Rpb25zU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLnNpemUoKTsgfQogCiAg
ICAgdW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVM
b2NhbHM7IH0KICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJz
OyB9CkBAIC0zMzQsMTAgKzM0NywyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFk
YXRhLT5zaXplSW5CeXRlcygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2li
bGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlu
cyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAg
ICAgICAgcmV0dXJuICFpc0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KICAgICB2b2lkIGFsbG9j
YXRlU2hhcmVkUHJvZmlsZXMoKTsKICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSYgdW5saW5rZWRW
YWx1ZVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlc1tpbmRl
eF07IH0KICAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSYgdW5saW5rZWRBcnJheVByb2ZpbGUodW5z
aWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlc1tpbmRleF07IH0KIAorI2lmIEFT
U0VSVF9FTkFCTEVECisgICAgYm9vbCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7
CisjZW5kaWYKKworICAgIGludDMyX3QgdGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xk
KTsKKwogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwg
Q29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9u
TW9kZT4pOwogCkBAIC0zOTcsNiArNDIxLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xl
eGljYWxTY29wZUZlYXR1cmVzIDogNDsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2NrIG1f
bG9jazsKKyAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX3VubGlua2VkQmFzZWxpbmVDb2Rl
OwogcHJpdmF0ZToKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlcyB7IDAgfTsKICAgICBTb3Vy
Y2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC00MTMsNyArNDM4LDYgQEAgcHJpdmF0ZToKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3M7CiAK
LQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJvZmls
ZTsKICNlbmRpZgpAQCAtNDU4LDYgKzQ4MiwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBy
ZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAgfQor
ICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQo
cGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNldCk7
CisgICAgfQorCisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5z
aWduZWQgaSkgeyByZXR1cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlB
cml0aFByb2ZpbGUmIHVuYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5h
cnlBcml0aFByb2ZpbGVzW2ldOyB9CisKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxs
aW50RXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7IH0KIAog
cHJpdmF0ZToKICAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5zdHJ1
Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PjsKQEAgLTQ2NSw4ICs0OTksMTYgQEAgcHJpdmF0ZToK
ICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZlY3RvcjxFeHBy
ZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5lRXhlY3V0aW9u
Q291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRW
YWx1ZVByb2ZpbGU+IG1fdmFsdWVQcm9maWxlczsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZEFy
cmF5UHJvZmlsZT4gbV9hcnJheVByb2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPEJpbmFyeUFyaXRo
UHJvZmlsZT4gbV9iaW5hcnlBcml0aFByb2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPFVuYXJ5QXJp
dGhQcm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKKworI2lmIEFTU0VSVF9FTkFCTEVECisg
ICAgTG9jayBtX2NhY2hlZElkZW50aWZpZXJVaWRzTG9jazsKKyAgICBIYXNoU2V0PFVuaXF1ZWRT
dHJpbmdJbXBsKj4gbV9jYWNoZWRJZGVudGlmaWVyVWlkczsKKyNlbmRpZgogCiBwcm90ZWN0ZWQ6
CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9u
IDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFk
YXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTUgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUpOwogICAgIH0K
IAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNldElu
TWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9p
czMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUx
NigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAgICBiYXNlVHlwZU9mZnNldCA9IHJvdW5kVXBU
b011bHRpcGxlT2YoYWxpZ25vZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSwgYmFzZVR5cGVP
ZmZzZXQpOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YodHlwZW5hbWUg
T3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KICAgICB1bnNpZ25lZCBudW1FbnRyaWVzKCk7CiAK
QEAgLTEwNyw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc19vZmZzZXQxNlRh
YmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAgICAg
dXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSwxMyArNDUsMTEgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogCiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1
bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNr
ZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9
IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3Rh
bE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNr
ZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQogICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCi0gICAgICAgICAg
ICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgY2xl
YXJCdWNrZXRzKCk7CiAgICAgfQogICAgIAogICAgIEVuY29kZWRKU1ZhbHVlKiBzcGVjRmFpbEJ1
Y2tldCh1bnNpZ25lZCBpKQpAQCAtNTksNiArNTcsMTIgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJh
c2UgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZCdWNrZXRzICsgaSA8IHRvdGFsTnVtYmVyT2ZC
dWNrZXRzKTsKICAgICAgICAgcmV0dXJuIG1fYnVja2V0cyArIG51bWJlck9mQnVja2V0cyArIGk7
CiAgICAgfQorCisgICAgdm9pZCBjbGVhckJ1Y2tldHMoKQorICAgIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCisgICAgICAgICAg
ICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICB9CiAgICAg
CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8odW5zaWduZWQgYnVja2V0KSBjb25zdAog
ICAgIHsKQEAgLTEyMyw4ICsxMjcsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0
dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8v
IHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kp
IHsKQEAgLTEzOSw3ICsxNDEsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29k
ZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxh
dGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTYxLDYgKzE2Myw3IEBAIHN0
cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJv
ZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAg
ICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4o
KSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBz
dHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmls
ZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklU
KQogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmgiCkBAIC0zNCw3ICszNSw5IEBACiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2VtZW50
LmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWVT
ZXQuaCIKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJKU0Nhc3QuaCIKKyNpbmNs
dWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGlsYXRpb24u
aCIKICNpbmNsdWRlICJSZWNvcmRlZFN0YXR1c2VzLmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgpA
QCAtNzAsNyArNzMsNyBAQCBzdHJ1Y3QgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24gewogICAgIFdy
aXRlQmFycmllcjxKU0NlbGw+IG1fdG87CiB9OwogICAgICAgICAKLWNsYXNzIENvbW1vbkRhdGEg
eworY2xhc3MgQ29tbW9uRGF0YSA6IHB1YmxpYyBNYXRoSUNIb2xkZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENvbW1vbkRhdGEpOwogcHVibGljOgogICAgIENvbW1vbkRhdGEoKQpAQCAt
MTE2LDYgKzExOSw3IEBAIHB1YmxpYzoKICAgICBGaXhlZFZlY3RvcjxDb2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQ+IG1fd2F0Y2hwb2ludHM7CiAgICAgRml4ZWRWZWN0b3I8QWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50PiBtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CiAgICAg
Rml4ZWRWZWN0b3I8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBtX2Fk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgIFJlY29yZGVk
U3RhdHVzZXMgcmVjb3JkZWRTdGF0dXNlczsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBt
X2p1bXBSZXBsYWNlbWVudHM7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZS5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5o
IgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZpc2lv
biAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgVHJh
Y2tlZFJlZmVyZW5jZXM7CiAKK3N0cnVjdCBTaW1wbGVKdW1wVGFibGU7CitzdHJ1Y3QgU3RyaW5n
SnVtcFRhYmxlOworCiBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSklUQ29tcGlsZXI7CkBAIC0x
MDEsNiArMTA0LDggQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gZmlu
ZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSBmaW5hbDsKIAogICAgIHVzaW5nIERpcmVjdEpJVENv
ZGU6OmluaXRpYWxpemVDb2RlUmVmRm9yREZHOworCisgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBj
VG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gY29tbW9uLm1fcGNUb0NvZGVPcmln
aW5NYXAuZ2V0KCk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENvbXBp
bGVyOyAvLyBBbGxvdyBKSVRDb21waWxlciB0byBjYWxsIHNldENvZGVSZWYoKS4KQEAgLTE0MCw2
ICsxNDUsOCBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxCeXRlY29kZUluZGV4LCBUcmlnZ2VyUmVh
c29uPiB0aWVyVXBFbnRyeVRyaWdnZXJzOwogCiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4g
bV9vc3JFbnRyeUJsb2NrOworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0
Y2hKdW1wVGFibGVzOworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzOwogICAgIHVuc2lnbmVkIG9zckVudHJ5UmV0cnk7CiAgICAgYm9vbCBh
YmFuZG9uT1NSRW50cnk7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgzMDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4NSwxMyArMTg1LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlu
a0J1ZmZlciYgbGlua0IKICAgICAKICAgICBtX2dyYXBoLnJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7
CiAKLSAgICBpZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSB8
fCAhbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmICgh
bV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAg
bV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKLSAgICAgICAg
aWYgKCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBt
X2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdU
Rk1vdmUobV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwotICAgIH0KKyAgICBBU1NFUlQobV9q
aXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQo
bV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKKyAgICBpZiAoIW1fZ3Jh
cGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgCisgICAgICAgIG1faml0Q29k
ZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlcyk7CisgICAgaWYgKCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0Vt
cHR5KCkpCisgICAgICAgIG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZSht
X2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7CiAKICAgICBmb3IgKEJhZzxTd2l0Y2hEYXRhPjo6
aXRlcmF0b3IgaXRlciA9IG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmJlZ2luKCk7ICEhaXRlcjsgKytp
dGVyKSB7CiAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqKml0ZXI7CkBAIC0xOTksMTIgKzE5
OCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAg
IGNhc2UgU3dpdGNoQ2hhcjoKICAgICAgICAgY2FzZSBTd2l0Y2hJbW06IHsKICAgICAgICAgICAg
IGlmICghZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9j
b2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHko
KSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVz
W2RhdGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2VkU3dpdGNoSnVtcFRhYmxl
KGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxl
SW5kZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1faml0
Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF07CiAgICAgICAg
ICAgICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNT
d2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0p
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNp
emUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCkpOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gbGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKTsgai0t
OykKQEAgLTIxOSwxMiArMjE4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZl
ciYgbGlua0IKIAogICAgICAgICBjYXNlIFN3aXRjaFN0cmluZzogewogICAgICAgICAgICAgaWYg
KCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCkuaXNFbXB0
eSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XS5pc0VtcHR5KCkpOwogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25zdCBVbmxpbmtl
ZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmlu
Z0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRh
YmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbZGF0YS5z
d2l0Y2hUYWJsZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8gY3RpRGVmYXVsdCA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91
Z2guYmxvY2stPmluZGV4XSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJs
ZS5tX2N0aU9mZnNldHMuc2l6ZSgpID09IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS5zaXpl
KCkgKyAxKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBsaW5rZWRUYWJsZS5tX2N0
aU9mZnNldHMpCkBAIC0zMzMsNyArMzMyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5r
QnVmZmVyJiBsaW5rQgogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRl
ci5kaWRCdWlsZE1hcHBpbmcoKSkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3Jp
Z2luTWFwKG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIpLCBsaW5rQnVmZmVyKSk7CisgICAgICAgIG1faml0Q29kZS0+Y29tbW9u
Lm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZN
b3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcik7CiB9CiAKIHN0YXRp
YyB2b2lkIGVtaXRTdGFja092ZXJmbG93Q2hlY2soSklUQ29tcGlsZXImIGppdCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0JiBzdGFja092ZXJmbG93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5
Nyw2IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSoKICAgICBBU1NF
UlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBB
U1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5q
aXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCiAgICAgaWYgKCFPcHRpb25z
Ojp1c2VPU1JFbnRyeVRvREZHKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3Miw5ICs3NzIsNiBAQCB2b2lk
IE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgCiAgICAgLy8gVGhlIHRhZyByZWdp
c3RlcnMgYXJlIG5lZWRlZCB0byBtYXRlcmlhbGl6ZSByZWNvdmVyaWVzIGJlbG93LgogICAgIGpp
dC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCi0gICAgaWYgKGV4aXQuaXNF
eGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKLQogICAgIGlmIChpbmxpbmVT
dGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCkgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSog
dG1wU2NyYXRjaCA9IHNjcmF0Y2ggKyBvcGVyYW5kcy50bXBJbmRleCgwKTsKICAgICAgICAgaml0
LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbk1hdGVyaWFsaXplT1NSRXhpdFNpZGVT
dGF0ZSk+KCZ2bSwgJmV4aXQsIHRtcFNjcmF0Y2gpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNp
b24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJE
RkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpJVC5o
IgpAQCAtMTE5LDEwICsxMjAsMTAgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKFZNJiB2bSwgQ0Nh
bGxIZWxwZQogICAgIGludDMyX3QgY2xpcHBlZFZhbHVlOwogICAgIHN3aXRjaCAoaml0LmNvZGVC
bG9jaygpLT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAg
Y2xpcHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xk
KGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAg
Y2xpcHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xk
KHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6
Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IFVwcGVyVGllckV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBw
ZWRUaHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKSwgdGFyZ2V0VmFsdWUp
OworICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlw
cGVkVGhyZXNob2xkKHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE0MiwxMSArMTQzLDgg
QEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVAogewogICAgIGNhbGxl
cklzTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwog
Ci0gICAgaWYgKGNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgewotICAgICAgICBpZiAo
IWNhbGxlcklzTExJbnQpCi0gICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+
bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKKyAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKQogICAgICAgICByZXR1cm4gTExJbnQ6OmNoZWNrcG9pbnRPU1JFeGl0RnJvbUlu
bGluZWRDYWxsVHJhbXBvbGluZVRodW5rKCkuY29kZSgpOwotICAgIH0KIAogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0OwogCkBAIC0xOTgsOCArMTk2
LDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVAogI3VuZGVmIExM
SU5UX1JFVFVSTl9MT0NBVElPTgogCiAgICAgfSBlbHNlIHsKLSAgICAgICAgYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7Ci0KICAgICAgICAgc3dp
dGNoICh0cnVlQ2FsbGVyQ2FsbEtpbmQpIHsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6
OkNhbGw6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CkBAIC0zMTMs
NiArMzA5LDEwIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAg
ICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFz
ZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+
bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGlu
ZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAg
ICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNs
b3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6
cGJHUFIpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJs
b2NrRm9yKCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFi
bGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ss
IEpJVDo6c19tZXRhZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVK
SVRDb25zdGFudFBvb2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxp
bmVDb2RlQmxvY2ssIEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw3ICs0MDQsOCBAQCB2
b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTElu
dDo6UmVnaXN0ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5y
ZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgY29kZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsK
KyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0Zv
ckV4aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNl
bGluZUpJVENvbnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CiAKICAgICAgICAg
Qnl0ZWNvZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
KCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5h
dGlvbjsKQEAgLTQyMCwxMiArNDIxLDE2IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZN
JiB2bSwgQ0NhbGwKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9T
UkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKLSAgICBqaXQuYWRk
UHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKGNvZGVCbG9ja0ZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgeworICAgICAgICBBU1NFUlQoIVJlZ2lz
dGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhMTEludDo6UmVnaXN0ZXJz
OjpwY0dQUikpOworICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSwgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3Jh
dGNoR1BSKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSk7CisKICAgICAgICAgLy8gU2luY2Ugd2Un
cmUganVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2gu
CiAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgdm0uYWRk
cmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSk7CiAgICAgfQotICAgIAorCisgICAgaml0LmFkZFB0
cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZv
cihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKICAg
ICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQ
UkluZm86OnJlZ1QyKTsKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0
clRhZyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50
cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMu
aCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIK
ICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCkBAIC0yODY5LDcgKzI4NzAsNyBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRmluZFN3CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
IGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzRG91YmxlKCkpOwogICAgIGRv
dWJsZSBhc0RvdWJsZSA9IHZhbHVlLmFzRG91YmxlKCk7CkBAIC0yODkwLDcgKzI4OTEsNyBAQCBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZn
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIHJldHVybiBsaW5rZWRUYWJs
ZS5jdGlGb3JWYWx1ZSgqdW5saW5rZWRUYWJsZSwgc3RySW1wbCkuZXhlY3V0YWJsZUFkZHJlc3M8
Y2hhcio+KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzMwLDYgKzczMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6
OmluUGFpcihjYWxsZWVUYWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1
ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZm
bGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
OwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsg
KytpKSB7CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJB
cmdDaGlsZChub2RlLCBpICsgMSk7CkBAIC04ODksNyArODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBz
bG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJl
ZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMg
PSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZd
IHsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAg
ICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI4LDYg
KzgyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQ
UiwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51
bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9
IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0g
bV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAg
ICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgaSArIDEpOwpAQCAtOTc5LDcgKzk4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKE5vZGUqIG5vZGUKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNl
czsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAg
ICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9y
VGFpbENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICsz
OTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBK
SVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRU
eXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwg
dXNlZFJlZ2lzdGVycywKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJ
VCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2Vk
UmVnaXN0ZXJzLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpT
VmFsdWVSZWdzOjpwYXlsb2FkT25seShwcm9wZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQ
UlJlZywgc3R1YkluZm9HUFIpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9s
ID0gdHJ1ZTsKIApAQCAtNDkwNSw3ICs0OTA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlQWRkKE5vZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2pp
dC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5
dGVjb2RlSW5kZXgoKTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJh
c2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVj
b2RlSW5kZXgpOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRK
SVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmppdENv
ZGUoKS0+Y29tbW9uLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNo
aW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVw
YXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGQ7CiAgICAgCkBAIC00OTg5LDcgKzQ5
ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVTdWIoTm9kCiAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFy
aXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUU3ViSUMq
IHN1YklDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7Cisg
ICAgSklUU3ViSUMqIHN1YklDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUU3ViSUMo
YXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZh
bHVlU3ViT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRp
b25WYWx1ZVN1YjsKIApAQCAtNTU3MSw3ICs1NTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlTmVnYXRlKAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBt
X2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmJ5dGVjb2RlSW5kZXgoKTsKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
YmFzZWxpbmVDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRl
Y29kZUluZGV4KTsKLSAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRk
SklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5qaXRD
b2RlKCktPmNvbW1vbi5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRj
aGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5v
blJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlOwogICAgIGNvbXBpbGVN
YXRoSUMobm9kZSwgbmVnSUMsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0
aW9uKTsKQEAgLTU4MTUsNyArNTgxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVW
YWx1ZU11bChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3Jh
cGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29k
ZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUlu
ZGV4KTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTXVs
SUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5qaXRDb2RlKCkt
PmNvbW1vbi5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1
bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hp
bmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwogCkBAIC0xNDc3MCw3ICsxNDc3MCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3Bl
UmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCks
IGNhbGxTaXRlSW5kZXgpOworICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNo
YWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChu
b2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3Bw
CShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBp
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBjb21waWxlKFN0
YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogCiAgICAgaWYgKHZtLnNob3VsZEJ1aWxkZXJQQ1Rv
Q29kZU9yaWdpbk1hcHBpbmcoKSkgewogICAgICAgICBCMzo6UENUb09yaWdpbk1hcCBvcmlnaW5N
YXAgPSBzdGF0ZS5wcm9jLT5yZWxlYXNlUENUb09yaWdpbk1hcCgpOwotICAgICAgICBjb2RlQmxv
Y2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBD
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZp
bmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcikpOworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21t
b24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBD
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZp
bmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcik7CiAgICAgfQogCiAgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNFbnRyeVB0clRhZz4gbGFiZWwgPSBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZm
ZXItPmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oc3RhdGUucHJvYy0+Y29kZSgpLmVudHJ5cG9p
bnRMYWJlbCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAko
cmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDggQEAgcHVibGljOgogICAgIERGRzo6Q29t
bW9uRGF0YSogZGZnQ29tbW9uKCkgb3ZlcnJpZGU7CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjb21t
b25EYXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVENvZGUsIGNvbW1vbik7
IH0KICAgICB2b2lkIHNocmlua1RvRml0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIG92ZXJy
aWRlOworCisgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gY29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKICAg
ICBERkc6OkNvbW1vbkRhdGEgY29tbW9uOwogICAgIFZlY3RvcjxPU1JFeGl0PiBtX29zckV4aXQ7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDI4MzAx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDE0ICs1Miw2IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICBncmFw
aC5yZWdpc3RlckZyb3plblZhbHVlcygpOwogCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB7Ci0g
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAg
ICAgICBBU1NFUlQoY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmVuc3Vy
ZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKLSAgICB9Ci0j
ZW5kaWYKLQogICAgIC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0
aGlzIGVudHJ5cG9pbnQgdG90YWxseSBkaWZmZXJlbnRseQogICAgIC8vIGRlcGVuZGluZyBvbiB3
aGV0aGVyIHdlJ3JlIGRvaW5nIE9TUiBlbnRyeSBvciBub3QuCiAgICAgQ0NhbGxIZWxwZXJzIGpp
dChjb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBA
CiAjaW5jbHVkZSAiSlNTZXRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAj
aW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAu
aCIKICNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIK
ICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKQEAgLTIzMjAsNiArMjMyMSwx
OCBAQCBwcml2YXRlOgogICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVFN1YkdlbmVyYXRv
cj4oYXJpdGhQcm9maWxlLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlv
bik7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUg
PSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRH
ZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVEFkZElDKiBhZGRNYXRoSUMo
REZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyBy
ZXR1cm4gY29tbW9uLmFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6
aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBz
dGF0aWMgSklUTXVsSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5
QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUTXVsSUMocHJvZmls
ZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJh
dG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVROZWdJQyogYWRkTWF0aElDKERGRzo6
Q29tbW9uRGF0YSYgY29tbW9uLCBVbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4g
Y29tbW9uLmFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2Ft
ZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMg
SklUU3ViSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQ
cm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUU3ViSUMocHJvZmlsZSk7IH0K
KwogICAgIHZvaWQgY29tcGlsZVZhbHVlTXVsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1h
bnRpYyk7CkBAIC0yMzkxLDcgKzI0MDQsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAgICAg
ICAgICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUg
PSBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAg
SklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRN
YXRoSUM8R2VuZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVFVuYXJ5
TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5q
aXRDb2RlLT5jb21tb24sIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5t
X2dlbmVyYXRvciA9IEdlbmVyYXRvcihKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLCBKU1Zh
bHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKIAogICAgICAg
ICAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwpAQCAtMjUwMCw3ICsy
NTEzLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dl
bmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5l
cmF0b3I+KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFy
aXRoUHJvZmlsZSk7CisgICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4q
IG1hdGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRDb2RlLT5jb21tb24sIGFy
aXRoUHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVy
YXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3By
KCkpLAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBK
U1ZhbHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkpLCBwYXJhbXMuZnBTY3JhdGNoKDApLAogICAgICAg
ICAgICAgICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsK
QEAgLTQzMTcsNyArNDMzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNj
cmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9
IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQu
Y29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0
ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJs
b2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4
LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5m
b0dQUik7CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CkBAIC0xMDI4NSw2ICsxMDI5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1BbGxvY2F0
ZWRBcmdzOyArK2kpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFw
cGVuZChWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAg
ICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9j
aygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBq
aXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhzZW1hbnRpY05vZGVPcmlnaW4pOwpAQCAt
MTA0NDMsMTMgKzEwNDU3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZm
bGVEYXRhLmFyZ3MuYXBwZW5kKHBhcmFtc1sxICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOwog
CiAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bUFyZ3M7Cisg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogCiAg
ICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2Nr
KCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7
CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0
aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdU
MCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZm
bGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZs
ZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICAg
ICAgfSk7CkBAIC0xMDc5Miw3ICsxMDgwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpV
c2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxM
aW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAg
ICAgICAgICAgICAgICAgICB9KTsKQEAgLTExMDczLDcgKzExMDg4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1Rh
aWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBD
YWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86
OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENh
bGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgzMDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MTMsMjggKzQxMywxNiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1
YihWTSYgdm0sIHVuc2lnbmVkCiAKICAgICBSZWdpc3RlclNldCBhbGxGVExDYWxsZWVTYXZlcyA9
IFJlZ2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAgICAgY29uc3QgUmVnaXN0
ZXJBdE9mZnNldExpc3QqIGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiB2bUNhbGxl
ZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAg
IFJlZ2lzdGVyU2V0IHZtQ2FsbGVlU2F2ZXNUb1NraXAgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdp
c3RlcnMoKTsKLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICBq
aXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNh
dmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICB9CiAKICAg
ICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0g
cmVnLm5leHQoKSkgewogICAgICAgICBpZiAoIWFsbEZUTENhbGxlZVNhdmVzLmdldChyZWcpKSB7
Ci0gICAgICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghdm1DYWxsZWVTYXZlcy0+ZmluZChyZWcpKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVkIHVud2luZEluZGV4ID0g
Y29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCktPmluZGV4T2YocmVnKTsKICAgICAgICAg
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldCogYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA9IGJhc2VsaW5l
Q2FsbGVlU2F2ZXMtPmZpbmQocmVnKTsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCogdm1DYWxs
ZWVTYXZlID0gbnVsbHB0cjsgCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigp
KQotICAgICAgICAgICAgdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChyZWcpOwog
CiAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkgewogICAgICAgICAgICAgR1BSUmVnIHJlZ1RvTG9h
ZCA9IGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPyBHUFJJbmZvOjpyZWdUMCA6IHJlZy5ncHIoKTsK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1RvTG9hZCAhPSBHUFJJbmZvOjpyZWdUMSk7
CiAKICAgICAgICAgICAgIGlmICh1bndpbmRJbmRleCA9PSBVSU5UX01BWCkgewogICAgICAgICAg
ICAgICAgIC8vIFRoZSBGVEwgY29tcGlsYXRpb24gZGlkbid0IHByZXNlcnZlIHRoaXMgcmVnaXN0
ZXIuIFRoaXMgbWVhbnMgdGhhdCBpdCBhbHNvCkBAIC00NTIsOCArNDQwLDYgQEAgc3RhdGljIHZv
aWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAogCiAgICAgICAgICAgICBpZiAoYmFzZWxp
bmVSZWdpc3Rlck9mZnNldCkKICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdp
c3RlciwgYmFzZWxpbmVSZWdpc3Rlck9mZnNldC0+b2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlm
ICh2bUNhbGxlZVNhdmUgJiYgIXZtQ2FsbGVlU2F2ZXNUb1NraXAuZ2V0KHZtQ2FsbGVlU2F2ZS0+
cmVnKCkpKQotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHJlZ1RvTG9hZCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEZQUlJlZyBmcFJlZ1RvTG9hZCA9IGJhc2Vs
aW5lUmVnaXN0ZXJPZmZzZXQgPyBGUFJJbmZvOjpmcFJlZ1QwIDogcmVnLmZwcigpOwogCkBAIC00
NjQsMTkgKzQ1MCw5IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQK
IAogICAgICAgICAgICAgaWYgKGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAg
ICAgaml0LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhN
YWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZz
ZXQtPm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAodm1DYWxsZWVTYXZlICYmICF2bUNhbGxl
ZVNhdmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNhdmUtPnJlZygpKSkKLSAgICAgICAgICAgICAgICBq
aXQuc3RvcmVEb3VibGUoZnBSZWdUb0xvYWQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICBSZWdpc3RlckF0
T2Zmc2V0KiB2bUNhbGxlZVNhdmUgPSB2bUNhbGxlZVNhdmVzLT5maW5kKEdQUkluZm86Om51bWJl
clRhZ1JlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNh
dmUtPm9mZnNldCgpKSk7Ci0KLSAgICAgICAgdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+
ZmluZChHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlNjQo
R1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BS
SW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKLSAgICB9Ci0KICAgICBzaXpl
X3QgYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVC
bG9jay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAKICAgICBpZiAoZXhp
dC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZp
c2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRh
LnJiCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjggQEAgY2xhc3MgTWV0YWRhdGEKICAg
ICBkZWYgc3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVm
IGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBnZW5lcmF0ZU9mZnNl
dE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKKyAgICAgICAgICAgIGZpZWxkTmFtZXMu
bWFwIGRvIHxmaWVsZE5hbWV8CisgICAgICAgICAgICAgICAgIiN7cHJlZml4fXN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uXX0oKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAg
ICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisgICAgICAgIGVuZAorCisgICAgICAgIGRlZiBjb252
ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBmaWVsZE5hbWVzKQogICAgICAgICAgICAgZmllbGRz
Lm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBI
YXNoCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVs
ZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAgICAg
ICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywg
dHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZpeH19OyIKICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkLnRvX3N9
OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmllbGQudG9fcworICAgICAgICAg
ICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2goZmllbGROYW1lKQorICAgICAgICAgICAgICAgICAg
ICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZE5hbWV9OyIKICAgICAgICAgICAgICAg
ICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVuZAogCi0gICAgICAg
IGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcykKKyAgICAgICAgZmll
bGROYW1lcyA9IFtdCisgICAgICAgIHByZWZpeCA9ICIgICAgICAgICIKKyAgICAgICAgZmllbGRz
ID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBmaWVsZHMsIGZpZWxkTmFtZXMpCisgICAgICAgIGZp
ZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwg
ZmllbGROYW1lcykKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBpZiBAaW5pdGlhbGl6
ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2Nyw2ICszNjcsMjggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRQcm9wZXJ0
eShHUFJSZQogICAgICAgICByZXN1bHQpOwogfQogCit2b2lkIEFzc2VtYmx5SGVscGVyczo6c3Rv
cmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNl
dCwgR1BSUmVnIHNjcmF0Y2gpCit7CisgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NU
aGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgIAor
ICAgIGxvYWRQdHIoQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2gpOworICAgIG5lZzMyKG9mZnNldCk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zm
c2V0LCBvZmZzZXQpOworICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CisgICAgCisgICAgaXNJbmxp
bmUubGluayh0aGlzKTsKKyAgICBhZGRQdHIoCisgICAgICAgIFRydXN0ZWRJbW0zMigKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihKU09iamVjdCkpIC0KKyAgICAgICAg
ICAgIChzdGF0aWNfY2FzdDxpbnQzMl90PihmaXJzdE91dE9mTGluZU9mZnNldCkgLSAyKSAqIHN0
YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSwKKyAgICAgICAgb2Jq
ZWN0LCBzY3JhdGNoKTsKKyAgICAKKyAgICByZWFkeS5saW5rKHRoaXMpOworICAgIAorICAgIHN0
b3JlVmFsdWUodmFsdWUsCisgICAgICAgIEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkpOworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdExvYWRTdHJ1Y3R1cmUoVk0mIHZt
LCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gp
CiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY5OCw4ICs3MjAsMTMgQEAgdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExp
bmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6
cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpy
ZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwg
aW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0
TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9
IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MzAxOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNCw4ICsyMzQsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAg
Ly8gTm90ZSB0aGF0IHRoaXMgY2xvYmJlcnMgb2Zmc2V0LgorICAgIC8vIE5vdGUgdGhhdCB0aGVz
ZSBjbG9iYmVyIG9mZnNldC4KICAgICB2b2lkIGxvYWRQcm9wZXJ0eShHUFJSZWcgb2JqZWN0LCBH
UFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpOworICAgIHZvaWQgc3RvcmVQcm9wZXJ0
eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNldCwgR1BSUmVn
IHNjcmF0Y2gpOwogCiAgICAgdm9pZCBtb3ZlVmFsdWVSZWdzKEpTVmFsdWVSZWdzIHNyY1JlZ3Ms
IEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAgIHsKQEAgLTM3OSwxNSArMzgwLDI2IEBAIHB1Ymxp
YzoKICNlbmRpZgogICAgIH0KIAorICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUsIEdQUlJlZyBzY3Jh
dGNoKQorICAgIHsKKyNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKKyAg
ICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwgc2NyYXRjaCk7CisgICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChzY3JhdGNoKTsKKyNlbHNl
CisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKHNjcmF0Y2gpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlGcmFtZSkK
ICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAg
IGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH07CiAgICAgICAgIEdQUlJlZyB0ZW1wMSA9IHVzZWRS
ZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwg
dGVtcDEpOwotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlckltcGwodGVtcDEpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CiAjZWxzZQogICAgICAgICBVTlVT
RURfUEFSQU0odG9wRW50cnlGcmFtZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZy
YW1lKTsKICNlbmRpZgogICAgIH0KICAgICAKQEAgLTE3MjAsNiArMTczMiw3IEBAIHB1YmxpYzoK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVj
dCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmlu
Z0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOwogICAgIAogICAgIHZvaWQgbWFrZVNw
YWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0Nh
bGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29k
ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGlu
ZUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgorCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCisj
aW5jbHVkZSAiSnVtcFRhYmxlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK0pJVEFkZElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX2FkZElDcy5hZGQoYXJp
dGhQcm9maWxlKTsgfQorSklUTXVsSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTXVsSUMoQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0aFBy
b2ZpbGUpOyB9CitKSVRTdWJJQyogTWF0aElDSG9sZGVyOjphZGRKSVRTdWJJQyhCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmls
ZSk7IH0KK0pJVE5lZ0lDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9
CisKK3ZvaWQgTWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcikK
K3sKKyAgICBtX2FkZElDcyA9IFdURk1vdmUob3RoZXIubV9hZGRJQ3MpOworICAgIG1fbXVsSUNz
ID0gV1RGTW92ZShvdGhlci5tX211bElDcyk7CisgICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVy
Lm1fbmVnSUNzKTsKKyAgICBtX3N1YklDcyA9IFdURk1vdmUob3RoZXIubV9zdWJJQ3MpOworfQor
CitCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+
IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spCisgICAgOiBEaXJl
Y3RKSVRDb2RlKFdURk1vdmUoY29kZSksIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkKKyAgICAsIE1hdGhJQ0hvbGRlcigpCit7IH0KKworQmFzZWxpbmVKSVRDb2RlOjp+QmFz
ZWxpbmVKSVRDb2RlKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgorI2lu
Y2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRlICJKSVRDb2RlTWFwLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBCaW5hcnlBcml0aFByb2ZpbGU7CitjbGFzcyBVbmFyeUFyaXRoUHJvZmls
ZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFNpbXBsZUp1bXBU
YWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKK2NsYXNzIE1hdGhJQ0hvbGRlciB7Citw
dWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcik7CisgICAg
SklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVE11bElD
KiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRTdWJJQyogYWRkSklU
U3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVu
YXJ5QXJpdGhQcm9maWxlKik7CisKK3ByaXZhdGU6CisgICAgQmFnPEpJVEFkZElDPiBtX2FkZElD
czsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJ
Q3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKK307CisKK2NsYXNzIEpJVENvbnN0YW50
UG9vbCB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29uc3RhbnQgPSB1bnNpZ25lZDsKKworICAgIGVu
dW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBHbG9iYWxPYmplY3QsCisgICAgICAg
IENhbGxMaW5rSW5mbywKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8sCisgICAgICAgIEZ1bmN0
aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rpb25FeHByLAorICAgIH07CisKKyAgICBzdHJ1Y3QgVmFs
dWUgeworICAgICAgICBUeXBlIHR5cGU7CisgICAgICAgIFBhY2tlZFB0cjx2b2lkPiBwYXlsb2Fk
OworICAgIH07CisKKyAgICBKSVRDb25zdGFudFBvb2woKSA9IGRlZmF1bHQ7CisgICAgSklUQ29u
c3RhbnRQb29sKEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQ
b29sJiBvcGVyYXRvcj0oSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKworICAgIENvbnN0
YW50IGFkZChUeXBlIHR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxscHRyKQorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudHMuc2l6ZSgpOworICAgICAgICBtX2NvbnN0
YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBlLCBwYXlsb2FkIH0pOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFu
dHMuc2l6ZSgpOyB9CisgICAgVmFsdWUgYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRzW2ldOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50czsK
K307CisKKworY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1
YmxpYyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIEJhc2VsaW5lSklUQ29kZShDb2RlUmVm
PEpTRW50cnlQdHJUYWc+LCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKTsK
KyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisgICAgUENUb0NvZGVPcmlnaW5NYXAq
IHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1RvQ29kZU9yaWdpbk1h
cC5nZXQoKTsgfQorCisgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2Fs
bHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAgICBCYWc8
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICBGaXhl
ZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBGaXhlZFZl
Y3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAgICBKSVRD
b2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7
CisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2lu
TWFwOworICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQ
bGFuLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9C
YXNlbGluZUpJVFBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHNpemVf
dCBCYXNlbGluZUpJVFBsYW46OmNvZGVTaXplKCkgY29uc3QKIAogQ29tcGlsYXRpb25SZXN1bHQg
QmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6ZSgpCiB7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVz
dWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBDb21waWxhdGlvblJlc3Vs
dCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRocmVhZChtX2NvZGVCbG9jayk7CiAgICAg
c3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgogICAgICAgICBD
T0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21w
aWxhdGlvbiBmYWlsZWQiKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxs
SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2Fs
bEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIHZv
aWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuUHJvbG8KICAgICBzdG9yZVB0cihzY29w
ZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQ
YWNrZXQsIHNjb3BlKSkpOwogfQogCi12b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQ
UlJlZyBzY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleCkKLXsKLSAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZy
YW1lKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0
Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOwotICAgIHN0b3JlVmFsdWUodGhpc1JlZ3Ms
IEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFj
a2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFj
a2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKLSAg
ICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIEFkZHJlc3Moc2hhZG93UGFja2V0
LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7Ci0g
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNp
dGVJbmRleCkpKTsKLX0KLQogdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5Q
YWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdH
UFIsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAgICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2Vu
ID0gdm0uc2hhZG93Q2hpY2tlbigpOwpAQCAtNzIsNiArNjIsMjggQEAgdm9pZCBDQ2FsbEhlbHBl
cnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQogICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBBZGRyZXNz
KHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9CiAKKwordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9j
a1R5cGU+Cit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBs
KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUs
IENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7
CisgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93
UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsK
KyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1h
cmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKKyAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhp
c1ZhbHVlKSkpOworICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CisgICAgc3RvcmVQ
dHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Cit9CisKK3ZvaWQg
Q0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFj
a2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNv
ZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJs
b2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdz
LCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0
LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKIHZvaWQg
Q0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50
ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1p
dENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9u
IDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTg0MCw3ICs4NDAsMTQgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9w
ZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9sYXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0
IHRoZXJlIGlzIHJvb20gb24gdGhlIHRvcCBvZgogICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNh
bGwgYXJndW1lbnRzLgogICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQ
UlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2
b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFs
dWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgp
OworCitwcml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAg
IHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQs
IEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJs
b2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworcHVibGljOgorICAgIHZvaWQgbG9n
U2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3Mg
dGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRl
SW5kZXggY2FsbFNpdGVJbmRleCk7CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3Bl
LCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworCiAgICAg
Ly8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUg
dG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChW
TSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVn
IHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVT
aHVmZmxlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw4ICszNywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBDYWxsRnJhbWVTaHVmZmxl
RGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayogY29kZUJsb2NrKQogewor
ICAgIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJl
Z2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25z
KQorewogICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMgeyBSZWdpc3RlclNldDo6
dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkgfTsKLSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJz
KCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSB7IHJlZ2lzdGVy
U2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsMTEgKzQzLDEzIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4g
YXJnczsKICAgICB1bnNpZ25lZCBudW1Mb2NhbHMgeyBVSU5UX01BWCB9OwogICAgIHVuc2lnbmVk
IG51bVBhc3NlZEFyZ3MgeyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMg
eyBVSU5UX01BWCB9OyAvLyBPbiBvdXIgbWFjaGluZSBmcmFtZS4KICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgIFJlZ2lzdGVyTWFwPFZhbHVlUmVjb3Zlcnk+IHJlZ2lzdGVyczsKICAgICBHUFJSZWcg
bnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZhbGlkR1BSUmVnIH07CiAKICAgICB2b2lkIHNldHVwQ2Fs
bGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJl
Z2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCopOwogI2VuZGlmCiAgICAgVmFsdWVS
ZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCwxMyArMzgsMTMgQEAgQ2FsbEZyYW1lU2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYQog
ICAgIDogbV9qaXQoaml0KQogICAgICwgbV9vbGRGcmFtZShkYXRhLm51bUxvY2FscyArIENhbGxl
ckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKICAgICAsIG1fbmV3RnJhbWUo
ZGF0YS5hcmdzLnNpemUoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzLCBudWxs
cHRyKQotICAgICwgbV9hbGlnbmVkT2xkRnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUlu
UmVnaXN0ZXJzCi0gICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGppdC5j
b2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6
ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIHJvdW5kQXJndW1lbnRDb3VudFRv
QWxpZ25GcmFtZShkYXRhLm51bVBhcmFtZXRlcnMpKQogICAgICwgbV9hbGlnbmVkTmV3RnJhbWVT
aXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCiAgICAgICAgICsgcm91bmRBcmd1
bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEuYXJncy5zaXplKCkpKQogICAgICwgbV9mcmFtZURl
bHRhKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSAtIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSkKICAgICAs
IG1fbG9ja2VkUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKSkKICAgICAsIG1f
bnVtUGFzc2VkQXJncyhkYXRhLm51bVBhc3NlZEFyZ3MpCisgICAgLCBtX251bVBhcmFtZXRlcnMo
ZGF0YS5udW1QYXJhbWV0ZXJzKQogewogICAgIC8vIFdlIGFyZSBhbGxvd2VkIGFsbCB0aGUgdXN1
YWwgcmVnaXN0ZXJzLi4uCiAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7IGktLTsgKQpAQCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZs
ZXI6OnByZXBhcmVGb3JUYWlsQ2EKICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAr
IFBheWxvYWRPZmZzZXQpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgYXJndW1lbnRDb3VudE9LID0KICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93T3JFcXVhbCwgbV9uZXdGcmFtZUJhc2UsCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpKTsK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9udW1QYXJhbWV0ZXJz
KSk7CiAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja0Fs
aWdubWVudFJlZ2lzdGVycygpIC0gMSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJz
KSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpLCBtX25ld0ZyYW1lQmFzZSk7CiAg
ICAgbV9qaXQubXVsMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0
ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1fbmV3RnJhbWVCYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHJldmlzaW9uIDI4MzAxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICAgICAgQ2FsbEZyYW1lU2h1
ZmZsZURhdGEgZGF0YTsKICAgICAgICAgZGF0YS5udW1Mb2NhbHMgPSBudW1Mb2NhbHMoKTsKICAg
ICAgICAgZGF0YS5udW1QYXNzZWRBcmdzID0gbV9udW1QYXNzZWRBcmdzOworICAgICAgICBkYXRh
Lm51bVBhcmFtZXRlcnMgPSBtX251bVBhcmFtZXRlcnM7CiAgICAgICAgIGRhdGEuY2FsbGVlID0g
Z2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSB9KS0+cmVjb3Zl
cnkoKTsKICAgICAgICAgZGF0YS5hcmdzLnJlc2l6ZShhcmdDb3VudCgpKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudCgpOyArK2kpCkBAIC03OTgsNiArNzk5LDcgQEAg
cHJpdmF0ZToKICAgICBib29sIHBlcmZvcm1TYWZlV3JpdGVzKCk7CiAgICAgCiAgICAgdW5zaWdu
ZWQgbV9udW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBtX251bVBhcmFt
ZXRlcnMgeyBVSU5UX01BWCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9p
ZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgpCi0gICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpT
SW50ZXJmYWNlSklUKCZ2bSwgbnVsbHB0cikKICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJw
cmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLnNpemUoKSA6IDApCiAgICAgLCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAg
LTc3LDYgKzc3LDkgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgog
ICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxP
YmplY3RDb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
Okdsb2JhbE9iamVjdCk7CisgICAgbV9wcm9maWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAg
ICBtX3VubGlua2VkQ29kZUJsb2NrID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwog
fQogCiBKSVQ6On5KSVQoKQpAQCAtOTAsOCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0
aW1pemF0aW9uQ2hlY2soKQogICAgICAgICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0
aW1pemU7Ci0gICAgCi0gICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQs
IFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnko
KSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50
ZXIoKSkpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDApOworICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBU
cnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkp
LCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkp
KTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJ
bnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNiwyMCBAQCB2
b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlm
eVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0
Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KQogeworICAgIGF1dG8gb2sgPSBicmFuY2hUZXN0
UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVh
bCwgQWRkcmVzcyhwb2ludGVyVG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIG9rLmxpbmsodGhpcyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkK
K3ZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwg
R1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT52YXJSZWFkT25seVdhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykgeworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0Ojpv
ZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9
CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQpAQCAtMTI5LDEyICsxMzcs
MTggQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NF
UlRfRU5BQkxFRCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihF
cXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAg
ICAgb2subGluayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6OnJlc2V0U1AoKQoreworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKK30KKwogI2RlZmluZSBO
RVhUX09QQ09ERShuYW1lKSBcCiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IFwK
ICAgICBicmVhazsKQEAgLTE4MSw2MSArMTk1LDQ0IEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VD
YWxsKGNvbnN0IEluc3RydWMKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJ
VDo6ZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5j
dGlvbkNvZGUpOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8g
aGFzRXhlY3V0YWJsZSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZXN1bHQsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpLCByZXN1bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0
aGlzKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9m
Q29kZUJsb2NrRm9yQ29uc3RydWN0KCkpLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9j
a0ZvckNhbGwoKSksIHJlc3VsdCk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVj
dXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpvZmZzZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAg
ICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spOworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNv
bnRleHQmIGN0eCkgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxs
RnJhbWUqPigpLT5jb2RlQmxvY2soKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIH0pOworI2VuZGlmCit9
CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKICAgICBpZiAoSklUSW50
ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxv
Y2ssICJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fcHJvZmlsZWRDb2Rl
QmxvY2ssICJcbiIpOwogICAgIAogICAgIGppdEFzc2VydFRhZ3NJblBsYWNlKCk7CiAgICAgaml0
QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsKICAgICAKLSAgICBhdXRvJiBpbnN0cnVjdGlvbnMg
PSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25D
b3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgYXV0byYgaW5z
dHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7CisgICAgdW5z
aWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLnNpemUoKTsKIAogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwogCi0gICAgVk0mIHZt
ID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgQnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5k
ZXgoMCk7Ci0gICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxv
Y2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJp
dHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0pKSkgewotICAgICAgICAvLyBXZSBjYW4gb25s
eSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9j
aydzIGV4YWN0bHkgb25jZS4KLSAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUg
aW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8K
LSAgICAgICAgLy8gZG8gT1NSIGVudHJ5IGludG8gdGhlIGJhc2VsaW5lIEpJVCBpbiBhIGxvb3As
IGl0IHdpbGwgcGFzcyBpbiB0aGUgYnl0ZWNvZGUgb2Zmc2V0IGl0Ci0gICAgICAgIC8vIHdhcyBl
eGVjdXRpbmcgYXQgd2hlbiBpdCBraWNrZWQgb2ZmIG91ciBjb21waWxhdGlvbi4gV2Ugb25seSBu
ZWVkIHRvIGNvbXBpbGUgY29kZSBmb3IKLSAgICAgICAgLy8gYW55dGhpbmcgcmVhY2hhYmxlIGZy
b20gdGhhdCBieXRlY29kZSBvZmZzZXQuCi0KLSAgICAgICAgLy8gV2Ugb25seSBib3RoZXIgYnVp
bGRpbmcgdGhlIGJ5dGVjb2RlIGdyYXBoIGlmIGl0IGNvdWxkIHNhdmUgdGltZSBhbmQgZXhlY3V0
YWJsZQotICAgICAgICAvLyBtZW1vcnkuIFdlIHBpY2sgYW4gYXJiaXRyYXJ5IG9mZnNldCB3aGVy
ZSB3ZSBkZWVtIHRoaXMgaXMgcHJvZml0YWJsZS4KLSAgICAgICAgaWYgKG1fbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAyMDApIHsKLSAgICAgICAgICAgIC8vIEFzIGEgc2lt
cGxpZmljYXRpb24sIHdlIGRvbid0IGZpbmQgYWxsIGJ5dGVjb2RlIHJhbmdlcyB0aGF0IGFyZSB1
bnJlYWNoYWJsZS4KLSAgICAgICAgICAgIC8vIEluc3RlYWQsIHdlIGp1c3QgZmluZCB0aGUgbWlu
aW11bSBieXRlY29kZSBvZmZzZXQgdGhhdCBpcyByZWFjaGFibGUsIGFuZAotICAgICAgICAgICAg
Ly8gY29tcGlsZSBjb2RlIGZyb20gdGhhdCBieXRlY29kZSBvZmZzZXQgb253YXJkcy4KLQotICAg
ICAgICAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBn
cmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jayk7Ci0K
LSAgICAgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PEJ5dGVjb2RlQmFzaWNCbG9jayo+IHdvcmts
aXN0OwotICAgICAgICAgICAgc3RhcnRCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOwot
ICAgICAgICAgICAgd29ya2xpc3QucHVzaChibG9jayk7Ci0KLSAgICAgICAgICAgIHdoaWxlIChC
eXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKLSAgICAgICAgICAg
ICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KHN0ZDo6bWluKHN0YXJ0Qnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSwgYmxvY2stPmxlYWRlck9mZnNldCgpKSk7Ci0gICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA6IGJsb2NrLT5zdWNjZXNzb3JzKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goJmdyYXBoW3N1Y2Nlc3NvckluZGV4
XSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBBbHNvIGFkZCBjYXRjaCBibG9ja3MgZm9yIGJ5dGVj
b2RlcyB0aGF0IHRocm93LgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVy
T2ZFeGNlcHRpb25IYW5kbGVycygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+bGVhZGVyT2Zmc2V0KCk7IGJ5dGVjb2RlT2Zmc2V0
IDwgYmxvY2stPmxlYWRlck9mZnNldCgpICsgYmxvY2stPnRvdGFsTGVuZ3RoKCk7KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5
dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBoYW5kbGVy
ID0gbV9jb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVPZmZzZXQpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNo
KGdyYXBoLmZpbmRCYXNpY0Jsb2NrV2l0aExlYWRlck9mZnNldChoYW5kbGVyLT50YXJnZXQpKTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gaW5zdHJ1Y3Rpb24t
PnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Ns
b3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4
LDEyICsyNzUsMTUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwog
ICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigp
KSkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAg
ICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAg
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29k
ZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zm
c2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4
LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAK
KyAgICAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhdGNoKQorICAgICAgICAgICAgYXNzZXJ0U3Rh
Y2tQb2ludGVyT2Zmc2V0KCk7CisKICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgICAg
ICBERUZJTkVfU0xPV19PUChsZXNzKQogICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzZXEpCkBA
IC01MjcsNyArNTI3LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAog
ICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKLSAgICAg
ICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dMbigiQmFzZWxp
bmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgIiwgbV9ieXRlY29kZUluZGV4LCAiIGF0IG9m
ZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgpKTsKQEAgLTU0NSw4ICs1NDUsOCBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURl
YnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gU0xPVyAiLCBv
cGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAg
IiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC02MDMsNyArNjAz
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX2RlbF9ieV92YWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9kZWxfYnlfaWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9zdWIpCi0jaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZnJvbV9zY29wZSkKICNlbmRpZgogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfcHV0X3RvX3Njb3BlKQpAQCAtNjc0LDU1ICs2NzQsNTUgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCit2b2lkIEpJVDo6
ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKQoreworICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJs
ZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25z
dGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpCit7Cisg
ICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCiB2b2lkIEpJVDo6Y29t
cGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJp
bGl0eUxldmVsKCk7CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAg
Y2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxz
ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBt
X3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBE
Rkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAg
ICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJ
bmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAgIHN3aXRjaCAobV9jb2Rl
QmxvY2stPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1
bGVDb2RlOgotICAgIGNhc2UgRXZhbENvZGU6Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3Vs
ZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0
aW9uQ29kZToKLSAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxz
ZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgotICAgICAgICAvLyBE
b24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgotICAgICAgICBtX2NvZGVCbG9jay0+bV9z
aG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5s
aW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwotICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICBp
ZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9j
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAg
ICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygp
KQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRj
aEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5u
dW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJs
b2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAg
ICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Cisg
ICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVt
cFRhYmxlcygpKQorICAgICAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8
U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dp
dGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJl
ck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwog
ICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAo
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxp
bmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxK
SVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6
ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRp
b25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBvZmYgb2YgVW5saW5rZWRDb2RlQmxvY2suCisgICAg
ICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fcHJvZmls
ZWRDb2RlQmxvY2spOworICAgIH0KICAgICBpZiAoVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29k
ZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBGSVhNRTogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1i
bGVyIG9mZiBVbmxpbmtlZENvZGVCbG9jay4KICAgICAgICAgbV9jb21waWxhdGlvbiA9IGFkb3B0
UmVmKAogICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbigKLSAgICAgICAgICAg
ICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2Nv
ZGVCbG9jayksCisgICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5l
bnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVCbG9jayksCiAgICAgICAgICAgICAgICAg
UHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVk
Qnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAg
ICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0
ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAogICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihC
eXRlY29kZUluZGV4KDApKSk7CkBAIC03NDIsMTEgKzc0MiwxMiBAQCB2b2lkIEpJVDo6Y29tcGls
ZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ss
IENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9G
cmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAKLSAgICBp
bnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVu
c2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBK
dW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzU3LDE2ICs3NTgsMjAgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgZW1p
dFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVy
QXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBl
bWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOworICAgIGVtaXRNYXRlcmlhbGl6ZU1l
dGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKLSAgICBpZiAobV9jb2RlQmxvY2st
PmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRl
Y29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpICYmICghbV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1f
dW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA+IDEpKSB7CisgICAgICAgICAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJl
Z1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4ZWRWZWN0b3I8VmFsdWVQcm9maWxlPjo6
b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
YXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25z
dHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0
bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24n
dCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCi0gICAgICAgICAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQorICAgICAg
ICAgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFy
Z3VtZW50KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBp
bnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoYXJndW1l
bnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxV
RTY0KQpAQCAtNzc3LDEyICs3ODIsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lz
dGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJl
c3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CiAjZW5kaWYKLSAgICAgICAgICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JB
cmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIHN0b3JlVmFs
dWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwgYXJndW1lbnQgKiBzaXplb2YoVmFsdWVQcm9m
aWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6
OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghSklU
Q29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAKICAgICBpZiAo
VU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAgICAgIG1fdm0tPmppdFNpemVTdGF0aXN0aWNzLT5t
YXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhpcyk7CkBAIC03OTksMjQgKzgwNCwyNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgbV9ieXRlY29k
ZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMy
X3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3Bl
cmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2NrKTsKKyAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QwKTsK
KyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0
aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIHJlZ1QwKTsKIAogICAgIC8vIElmIHRoZSBudW1i
ZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciByZXF1aXJlIGFyaXR5IGZpeHVwLgotICAg
IGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAh
PSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYg
cmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgIT0gMTsKKyAgICBpZiAobV91bmxpbmtl
ZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZp
eHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxhYmVsKCk7Ci0gICAgICAgIHN0b3JlOChU
cnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQpOwor
CiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgICAgIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAg
ICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKHJlZ1QwKTsKKyAgICAgICAgc3Rv
cmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNo
b3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAKICAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMSk7Ci0gICAgICAg
IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+
bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOworICAgICAgICBicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwogCiAgICAgICAg
IG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAKICAgICAgICAgaWYgKG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0z
Migtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJh
dGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBD
b2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjApOworICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV91bmxpbmtl
ZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVj
ayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBhcmd1bWVudEdQUjApOwogICAgICAgICBpZiAo
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhi
ZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTgzOSw3ICs4NDcsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFu
ZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNv
ZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShs
YWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwog
Ci0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5r
QnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVK
SVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVm
ZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV91bmxpbmtlZENvZGVCbG9jaywgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOwogICAgIGxpbmsoKTsKIH0KIApAQCAt
ODU4LDggKzg2Niw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgc3dpdGNoIChyZWNvcmQu
dHlwZSkgewogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlOgogICAgICAgICBj
YXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtl
ZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1
bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1
bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRl
Y29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpOyAr
K2opIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB1bmxpbmtlZFRhYmxlLm1f
YnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3MSw4ICs4NzksOCBAQCB2b2lkIEpJVDo6bGluaygpCiAg
ICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6U3RyaW5nOiB7Ci0gICAgICAg
ICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAg
ICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5n
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFN0cmlu
Z0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJ
bmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZh
dWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGxvY2F0aW9uIDogdW5saW5rZWRU
YWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQg
b2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hPZmZzZXQ7CkBAIC05MDYsNiArOTE0LDI3IEBAIHZv
aWQgSklUOjpsaW5rKCkKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20s
IHJlY29yZC5jYWxsZWUpOwogICAgIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgYXV0byBm
aW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8m
IGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8t
PnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2Vu
Lm1fc3RhcnQpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0
aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25l
KTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2Nh
dGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5t
X3Nsb3dQYXRoQmVnaW4pOworICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1f
Z2V0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX2dldEJ5SWRzV2l0aFRoaXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAg
IGZpbmFsaXplSUNzKG1fcHV0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsK
KyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRz
KTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3Rh
bmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKKyNlbHNl
CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwogICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmlu
YWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7CkBAIC05
MTcsMjEgKzk0NiwyNSBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJbmxpbmVDYWNo
ZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1f
aW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3By
aXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisjZW5kaWYKIAogICAgIGZvciAoYXV0
byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRp
b25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBpbmZvLmRvbmVMb2NhdGlvbiA9
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZv
LmRvbmVMb2NhdGlvbik7CisjZWxzZQogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29t
cGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKICAgICAgICAgaW5mby5zZXRDb2RlTG9jYXRpb25z
KAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihj
b21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24p
KTsKKyNlbmRpZgorCiAgICAgfQogCi0gICAgewotICAgICAgICBKSVRDb2RlTWFwQnVpbGRlciBq
aXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7
Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCi0gICAg
ICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRK
SVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCkpOworICAgIEpJVENvZGVNYXBC
dWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOworICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNl
dCkgeworICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCisgICAg
ICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9m
ZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0
ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBE
aXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDI2ICs5NzMsNDIgQEAgdm9pZCBKSVQ6OmxpbmsoKQog
ICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShtX2NvbXBpbGF0aW9uKSkgeworICAgICAgICAvLyBG
SVhNRTogc2hvdWxkIHdlIG1ha2UgdGhlIGJ5dGVjb2RlIHByb2ZpbGVyIGtub3cgYWJvdXQgVW5s
aW5rZWRDb2RlQmxvY2s/CiAgICAgICAgIGlmIChPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5l
Rm9yUHJvZmlsZXIoKSkKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2Zp
bGVyKG1fY29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsKLSAgICAgICAgbV92bS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2NvZGVCbG9jaywgKm1fY29tcGls
YXRpb24pOworICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0
aW9uKG1fcHJvZmlsZWRDb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKICAgICB9CiAKICAgICBp
ZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCiAgICAgICAg
IG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZN
b3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpOwogICAgIAorICAg
IC8vIEZJWE1FOiBNYWtlIGEgdmVyc2lvbiBvZiBDb2RlQmxvY2tXaXRoSklUVHlwZSB0aGF0IGtu
b3dzIGFib3V0IFVubGlua2VkQ29kZUJsb2NrLgogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4g
cmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJU
YWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJs
b2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgp
KTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxv
Y2tXaXRoSklUVHlwZShtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkp
LmRhdGEoKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPiht
X2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29k
ZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpOworICAgIG1f
aml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgQmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5
Q2hlY2spKTsKKworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gV1RGTW92ZShtX3Vu
bGlua2VkQ2FsbHMpOworICAgIG1faml0Q29kZS0+bV9ldmFsQ2FsbExpbmtJbmZvcyA9IFdURk1v
dmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkU3R1Yklu
Zm9zID0gV1RGTW92ZShtX3VubGlua2VkU3R1YkluZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fc3dp
dGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENv
ZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1faml0Q29kZU1hcCA9IGppdENvZGVNYXBCdWlsZGVy
LmZpbmFsaXplKCk7CisgICAgbV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNzKTsKKyAg
ICBtX2ppdENvZGUtPm1fY29uc3RhbnRQb29sID0gV1RGTW92ZShtX2NvbnN0YW50UG9vbCk7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBtX2lzU2hh
cmVhYmxlOworI2Vsc2UKKyAgICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBmYWxzZTsKKyNl
bmRpZgogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigi
SklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCBy
ZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5l
eGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9n
RigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRD
b2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIo
KSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAK
LUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4
LDI1ICsxMDE3LDE0IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIK
IAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAK
LSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1f
bG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9j
azo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsK
LSAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFu
ZGxlcihpKTsKLSAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0g
ICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmlu
ZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxl
clB0clRhZz4oKTsKLSAgICB9Ci0KICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkKLSAgICAg
ICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9y
aWdpbk1hcCkpOworICAgICAgICBtX2ppdENvZGUtPm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZN
b3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApOwogCiAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1Bl
ckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRv
dWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPiht
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CisgICAgICAgIHN0YXRpY19jYXN0PGRv
dWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CiAKLSAgICBt
X2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAg
Y29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShtX2ppdENvZGUucmVsZWFz
ZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQpAQCAt
OTk4LDExICsxMDM2LDExIEBAIHNpemVfdCBKSVQ6OmNvZGVTaXplKCkgY29uc3QKICAgICByZXR1
cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJp
dmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorQ29tcGlsYXRpb25SZXN1
bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQogewogICAgIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29t
cGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoZWZmb3J0KTsKLSAg
ICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICByZXR1cm4gZmluYWxpemVPbk1h
aW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0
aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxOCArMTA4MCwyOCBAQCB2b2lkIEpJVDo6ZG9NYWluVGhy
ZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT5w
cm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0aW9uLiJf
cyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayog
Y29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRD
b2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJs
b2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAogICAgIHJldHVybiByb3VuZExvY2FsUmVnaXN0
ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fscygp
ICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9CiAKLWludCBK
SVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVk
IEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAg
IHJldHVybiBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9j
aygpKTsKK30KKworaW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJs
b2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZy
YW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2spIC0gMSkub2Zmc2V0KCk7CiB9CiAKK2ludCBK
SVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBy
ZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2so
KSk7Cit9CisKIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gSklUOjpjb21waWxlVGltZVN0YXRz
KCkKIHsKICAgICBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IHJlc3VsdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogCiAjZGVmaW5l
IEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwgZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NBR0Uo
YWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9mZnNldCBcIiVzXCIgc2hvdWxkIGJlICVkLCBub3Qg
JWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19jYXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0aWNfY2Fz
dDxpbnQ+KGFjdHVhbCkpOwogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAi
SklURGlzYXNzZW1ibGVyLmgiCkBAIC00NCw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSklUTWF0aElD
LmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50
ZXJmYWNlSklULmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVP
cmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCiAjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsxNTEsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsK
IAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25JbmZvIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBk
b25lTG9jYXRpb247CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgVW5saW5rZWRDYWxsTGlu
a0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OworI2Vsc2UKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvOworI2VuZGlmCiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2Fs
bGVlRnVuY3Rpb24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2
YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6
IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0
aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEpJVFRodW5rczsKQEAgLTE3MSw2ICsxNzgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBi
ZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgogICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCisgICAgICAgIHVzaW5nIEJh
c2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29k
ZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZz
ZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMTc4LDI4ICsxODcs
MzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0ludGVy
ZmFjZUpJVDo6dm0oKTsgfQogCiAgICAgICAgIHZvaWQgY29tcGlsZUFuZExpbmtXaXRob3V0Rmlu
YWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0
IGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFs
aXplT25NYWluVGhyZWFkKENvZGVCbG9jayopOwogICAgICAgICBzaXplX3QgY29kZVNpemUoKSBj
b25zdDsKIAogICAgICAgICB2b2lkIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGls
ZSgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUo
Vk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNl
dCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNv
ZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGNvZGVCbG9jaywgZWZmb3J0
KTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291
bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1l
UmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIGludCBzdGFja1Bv
aW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIGludCBz
dGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0cygp
OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBpbGVU
aW1lKCk7CiAKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0YUdQUiA9
IExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFI7CisgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNfY29uc3RhbnRzR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFI7CisK
ICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKICAg
ICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0
ZUNvbXBpbGVTbG93Q2FzZXMoKTsKICAgICAgICAgdm9pZCBsaW5rKCk7Ci0gICAgICAgIENvbXBp
bGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICAg
ICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklUQ29tcGls
YXRpb25FZmZvcnQpOwogCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUs
IHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2ICsyMzcs
MzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkUHRyRnJvbU1ldGFkYXRh
KGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFkYXRh
KGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0YWRhdGEo
Y29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lk
IHN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZz
ZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9p
ZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNl
dCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lk
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyk7CisKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgbG9hZENvbnN0YW50
KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CisgICAgcHJpdmF0ZToKKyAgICAgICAg
dm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZENvZGVCbG9j
a0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGVtaXRQ
dXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOworCiAg
ICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAgICAgICB7
CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7CkBA
IC0yNTQsNiArMjk0LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNvbXBpbGVP
cENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8Cisg
ICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJ
RCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncworICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9
IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworCisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAor
ICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKKyAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzCisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKKyNl
bHNlCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTI2NSw5ICszMTgsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdz
IHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwg
T3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworI2VuZGlmCiAKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9w
JiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBi
b29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwo
Y29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4Nywx
NCArMzQxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJp
ZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFy
cmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBl
bWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJh
cnJpZXIoR1BSUmVnIG93bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUg
dmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUg
Zm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9p
ZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAg
IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJl
Z3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRl
Y29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBK
U1ZhbHVlUmVncyk7CkBAIC0zMDUsOCArMzU4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1f
cHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPgogICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSk7CiAKLSAgICAgICAgdm9p
ZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJh
eVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwotICAgICAgICB2b2lkIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJy
YXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNj
cmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAg
IHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgcHRy
ZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9w
KTsKQEAgLTU5Myw3ICs2NDgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
aGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02MTEsNyArNjY1LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50
cyhjb25zdCBJbnN0cnVjdGlvbiopOwotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjI3LDE0
ICs2ODEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRT
bG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUpOwotICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRl
U2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0
SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2Us
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQg
ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQg
ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAg
ICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlKTsKKyAgICAgICAgdm9p
ZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BS
UmVnKTsKKyAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BS
UmVnIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKICAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNs
b3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02NDYsNyArNzAwLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3Jp
dGUoV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcg
cG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQ
UlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShK
U1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsK
ICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRk
cmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwog
ICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpA
QCAtNjU1LDYgKzcwOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1
dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsK
IAorICAgICAgICBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpT
VmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wg
aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09w
ZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY3NiwxMyArNzMxLDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYp
OwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBz
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19v
cF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGVHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3Bf
cHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9wcml2YXRlX25h
bWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfdG9fc2NvcGVHZW5lcmF0b3Io
Vk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAKICAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfY2hlY2tfdHJhcHNfaGFu
ZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJik7CkBAIC02OTYs
MzIgKzc0OSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAhKHJlc29s
dmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIg
fHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKICAgICAgICAgfQogCi0jZGVmaW5lIERFQ0xB
UkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3Bl
XyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZF
X1RZUEUoREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9H
RVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKTsKLQotICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
dGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgLy8gTW9kdWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZp
Y2llbnQgdG8gZW1pdCBpbmxpbmUgdGhhbiB1c2UgYSB0aHVuay4KLSAgICAgICAgICAgIC8vIFJl
c29sdmVkQ2xvc3VyZVZhciBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9w
X3Jlc29sdmVfc2NvcGUuCi0gICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNv
bHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAgICAgfQot
Ci0jZGVmaW5lIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwK
LSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3Bf
cmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9S
X0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5k
ZWYgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJl
c29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwotCiAgICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3Io
Vk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gdmFsdWVJc1RydXRoeUdlbmVyYXRvcihWTSYpOwogCiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYpOworICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3Jl
c29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiwg
c3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25z
dCBjaGFyKiB0aHVua05hbWUpOworCiAgICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIGl0ZXIrKy0+ZnJvbTsKQEAgLTc2MCwxMCArNzk3LDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJv
ZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4K
LSAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
ZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8
RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6
OkNhbGw+CkBAIC04MjEsMjAgKzg1OCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIw
LCB0YXJnZXQub2Zmc2V0KSk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFp
dHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4u
IGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5
cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVz
dWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAg
ICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBl
bmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAg
ICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhh
c1Jlc3VsdCwgdm9pZD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRh
JiBtZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3Mu
Li4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3Mu
Li4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVj
dENhbGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxl
KG1ldGFkYXRhLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCBy
ZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE5
LDI1ICs5NTYsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0K
LSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVP
cHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkg
eyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNh
bkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGlt
aXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNl
IG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAg
ICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAg
Ym9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisg
ICAgICAgIHZvaWQgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3Rl
cnMoKTsKKworICAgICAgICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAg
ICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wg
Y29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQg
dG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQg
dG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0
aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRo
ZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAg
ICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3Bp
ZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOworCisgICAgICAgIHZvaWQgcmVzZXRTUCgpOwogCiAg
ICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjQsOSArOTk4LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNl
czsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBI
YXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAg
SGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmls
ZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBM
aXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEwMDAsMTEgKzEwMzEsMjYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2Vu
ZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAg
ICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1p
emVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAg
ICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAg
UmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAgICAgICAgQ29kZUJsb2NrKiBtX3By
b2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayog
bV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKworICAgICAgICBNYXRoSUNIb2xkZXIg
bV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENvZGU7CisK
KyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAgICAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJ
bmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENh
bGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3Vu
bGlua2VkU3R1YkluZm9zOworICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1f
c3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBt
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAgc3RydWN0IE5vdEFDb2RlQmxvY2sg
eyB9IG1fY29kZUJsb2NrOworCisgICAgICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsK
ICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjky
LDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hh
cihvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzIwLDcgKzMyMSw4IEBAIHZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0OCw4
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQog
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdUMSk7
CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDog
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0lt
cGwoVmkKICAgICB9CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50
LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEp
OwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC01NzMsNyArNTc3LDggQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IAogCiAgICAgZW1pdExvYWQo
b3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
cmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDog
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIyLDgg
QEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwot
ICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFBy
b2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOworICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVRO
ZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVu
dEluc3RydWN0aW9uLCBuZWdhdGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRl
ciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBj
YW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9u
QXJpdGhOZWdhdGUpOwpAQCAtODk5LDggKzkwNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hp
ZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJVEFkZElDKiBhZGRJQyA9
IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25U
b01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zh
c3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUwLDExIEBAIHZvaWQg
SklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdlbmVyYXRlZElu
bGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmls
ZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1Jl
Z3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApA
QCAtMTAxNSwxMCArMTAyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5
TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAgICAgICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwor
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQ
cm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQ
cm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRo
UHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAg
YWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0x
MDU1LDEzICsxMDYyLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJ
QzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJ
Qy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYg
KGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRo
SUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3Jj
UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJl
aW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJl
c3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYg
RU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBA
IC0xMTIwLDEzICsxMTI4LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlN
YXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBt
YXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAg
IGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlm
IChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwor
ICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJl
Z3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7Cisg
ICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRS
ZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChi
aXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRS
ZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3
aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRS
ZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsK
IAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJl
bCgpOwpAQCAtMTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IElu
c3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxs
cHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmls
ZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFu
ZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29k
ZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+
KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBt
dWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11
bD4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBK
SVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAg
ICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwog
ICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CkBAIC0xMjI3LDgg
KzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0CiAKIHZv
aWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFBy
b2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMo
YXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0
cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVu
dEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1
Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3Bw
CShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25z
dCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAgZW1pdFN0b3JlKGRlc3RpbmF0aW9uRm9y
KGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIo
KSwgcmVnVDEsIHJlZ1QwKTsKIH0KIApAQCAtMTU3LDcgKzE1Nyw3IEBAIHN0ZDo6ZW5hYmxlX2lm
X3Q8CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJ
bmZvKikKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRC
bG9jayk7CiAgICAgaW50IGFyZ0NvdW50ID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3Io
Ynl0ZWNvZGUsIGNoZWNrcG9pbnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNf
Y2FzdDxpbnQ+KHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3Bv
aW50KSk7CiAKQEAgLTE5Miw3ICsxOTIsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVG
b3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9w
ZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0
aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGNhbGxPcGVy
YXRpb24oc2l6ZU9wZXJhdGlvbiwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09m
ZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEp
OwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwg
cmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMo
KSwgNiAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBA
IC0yMDIsNyArMjAyLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZAogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50
c0ZyYW1lOwogICAgIGVsc2UKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1
cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDQpLCBm
aXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRp
b24sIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhy
ZWdUMiwgcmVnVDQpLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50LgpA
QCAtMjMyLDEwICsyMzIsMTAgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENh
bGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAg
ICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6
Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxs
RXZhbCwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKIAog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKIApAQCAtMjQ5LDcgKzI0OSw3
IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRD
YWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBDYWxsTGlua0lu
Zm8qIGluZm8gPSBtX3Byb2ZpbGVkQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGws
IHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBA
IC0yNTgsOCArMjU4LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0
IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0
ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsK
LSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
aW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX3Byb2ZpbGVkQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3Rh
Y2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7
CkBAIC0yODYsMTEgKzI4NiwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0
cnVjdGlvCiAgICAgKi8KICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwogICAgIGlm
IChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CisgICAgICAgIGlu
Zm8gPSBtX3Byb2ZpbGVkQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCkpOwogICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKICAgICAv
LyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGgg
QXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KICAgICAKLSAgICBhdXRvIGJ5dGVjb2RlSW5kZXgg
PSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7CisgICAgYXV0byBieXRl
Y29kZUluZGV4ID0gbV9wcm9maWxlZEJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsK
ICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgp
LmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBlbWl0TG9h
ZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7IC8vIHJlZ1QxLCByZWdUMCBob2xkcyBjYWxsZWUuCkBA
IC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAg
ZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDEyICszNDEsMTEgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDMpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlz
KTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzKSB7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93
Q2FzZShjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKQEAgLTM5NSw3ICszOTQsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgSlNWYWx1ZVJlZ3MgbmV4
dFJlZ3MgPSBKU1ZhbHVlUmVncyh0YWdOZXh0R1BSLCBwYXlsb2FkTmV4dEdQUik7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssCisgICAgICAgIG1f
cHJvZmlsZWRCbG9jaywKICAgICAgICAgSklUVHlwZTo6QmFzZWxpbmVKSVQsCiAgICAgICAgIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLApAQCAtNDEwLDcgKzQwOSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgbmV4
dFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZEJsb2NrKSwgbmV4dFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9uZXh0LCBuZXh0UmVncyk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwpAQCAt
NDQwLDEwICs0MzksMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29u
cwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIC8vIG1ldGFkYXRhCisgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRCbG9jayksIC8vIG1ldGFkYXRhCiAgICAgICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
Ly8gb3BlcmF0aW9uCiAgICAgICAgIG5leHRWUmVnLCAvLyByZXN1bHQKLSAgICAgICAgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCisgICAgICAgIFRy
dXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKICAg
ICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnSXRl
cmF0b3JHUFIsIHBheWxvYWRJdGVyYXRvckdQUiksIC8vIGFyZzMKICAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygp
KTsgLy8gYXJnNApAQCAtNDUyLDcgKzQ1MSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9vcGVuKGNvbnMKICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3Qu
bGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1
bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9i
amVjdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAK
ICAgICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00NjAsNyArNDU5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jf
bmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1
bmN0aW9uID0gKFsmXSAoKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkp
IHsKICAgICAgICAgY2FzZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25h
cnJvdzsKQEAgLTUwNiw3ICs1MDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0
KGNvbnN0IEluCiAgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHRhZ1ZhbHVlR1BSKTsKICAgICAg
ICAgcHJlc2VydmVkUmVncy5hZGQocGF5bG9hZFZhbHVlR1BSKTsKICAgICAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywKKyAgICAgICAgICAgIG1f
cHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAogICAgICAg
ICAgICAgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICAgICAgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLApAQCAtNTMzLDEw
ICs1MzIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAg
ICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUNjsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0g
cmVnVDc7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRy
dXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh0YWdEb25lR1BSLCBwYXlsb2FkRG9uZUdQUiksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBKdW1wTGlz
dCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModGFnRG9u
ZUdQUiwgcGF5bG9hZERvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9wcm9maWxlZEJsb2NrLT5n
bG9iYWxPYmplY3QoKSk7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywKKyAgICAgICAgICAgIG1fcHJvZmlsZWRCbG9jaywKICAgICAg
ICAgICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAogICAgICAgICAgICAgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLAogICAgICAgICAgICAgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLApAQCAtNTg4LDEwICs1ODcsMTAgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoCi0gICAgICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIC8vIG1l
dGFkYXRhCisgICAgICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCAv
LyBtZXRhZGF0YQogICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCAvLyBvcGVy
YXRpb24KICAgICAgICAgICAgIGRvbmVWUmVnLCAvLyByZXN1bHQKLSAgICAgICAgICAgIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICAg
ICAgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJn
MQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKICAgICAgICAgICAgIEpTVmFs
dWVSZWdzKHRhZ0l0ZXJSZXN1bHRHUFIsIHBheWxvYWRJdGVyUmVzdWx0R1BSKSwgLy8gYXJnMwog
ICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudCkucmF3Qml0cygpKTsgLy8gYXJnNApAQCAtNjAyLDcgKzYwMSw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0LmxpbmsodGhp
cyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElz
Tm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9i
amVjdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAg
ICAgfQogCiAgICAgeyAgIApAQCAtNjE4LDEwICs2MTcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoCi0g
ICAgICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIC8vIG1ldGFkYXRhCisg
ICAgICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCAvLyBtZXRhZGF0
YQogICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCAvLyBvcGVyYXRpb24KICAg
ICAgICAgICAgIHZhbHVlVlJlZywgLy8gcmVzdWx0Ci0gICAgICAgICAgICBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKKyAgICAgICAgICAgIFRydXN0
ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKICAgICAg
ICAgICAgIGdlbi5zdHViSW5mbygpLCAvLyBhcmcyCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyh0
YWdJdGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFyZzMKICAgICAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNh
bGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSklU
SW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1
ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAjaW5j
bHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25z
dCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlv
bkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lz
dGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8
CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0g
b3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENh
bGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0g
bV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJbmNsdWRpbmdUaGlz
ID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpOwog
ICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0YWNrT2Zmc2V0SW5S
ZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKKwogICAgIGlmIChPcDo6
b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBD
YWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKICAgICAg
ICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAg
ICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVja3BvaW50KS5h
ZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9NZXRhZGF0
YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZv
KCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJv
ZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBkb25lLmxpbmso
dGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAg
T3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29u
c3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFy
Z3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2
b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5r
SW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewogICAgIFZp
cnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC05MSw3ICs5
Miw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAg
c2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7CiAg
ICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFy
YXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3RlciwgZmly
c3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOworICAgIGNhbGxP
cGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIs
IGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVn
aXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJuVmFs
dWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLShz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1
cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNldHVwT3BlcmF0aW9u
ID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJhdGlvbihzZXR1cE9w
ZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVnVDMsIHJlZ1Qx
LCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KICAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNl
dCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFi
b3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFkZHJlc3NPZk1h
eEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlu
a0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDYWxsTGlu
a0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJlZ1QzKTsK
KyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1QyKTsKKyAg
ICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dlc3QubGluayh0aGlz
KTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywxNiArMTMxLDE1IEBA
IGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxhdGU8PgogYm9vbCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkKIHsKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAgIHN0b3JlUHRy
KGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1l
T2Zmc2V0KCkpKTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMSk7
CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBD
YWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBy
ZWdUMik7CisgICAgcmVzZXRTUCgpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShy
ZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmV0
dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIApAQCAt
MTQ4LDcgKzE1MSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKKyAg
ICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNh
bGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7
CkBAIC0xNTYsNDMgKzE1OSw0NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
Y29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihS
ZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUgLSBzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxDYWxsKCptX3Zt
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Cisg
ICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7
CisgICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3Qg
T3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwo
Y29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50KQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8PgotYm9v
bCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgQ2FsbExp
bmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK2Jvb2wgSklUOjpjb21w
aWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJ
bmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxsRnJhbWVTaHVmZmxlRGF0
YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUu
bV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVt
YmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxD
YWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFzc2VkQXJncyA9
IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFyYW1ldGVycyA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtYmVy
VGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICBzaHVmZmxlRGF0
YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6
ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29k
ZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7
ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgc2h1ZmZsZURh
dGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0
YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5n
VGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMp
OwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAgICAgICBWYWx1ZVJlY292ZXJ5
OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxl
ZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURh
dGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5
OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0YS0+c2V0dXBDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURh
dGFJQzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZs
ZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlua0lu
Zm9Db25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5m
bzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsK
KyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0YSkucHJlcGFyZUZv
clRhaWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKworICAg
IHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8tPmZyYW1lU2h1ZmZsZURhdGEg
PSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwo
KTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2Nh
dGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIxOCwxNCArMjI1LDI1IEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlh
bGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2Fs
bEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0gICAgQ2FsbExpbmtJbmZvKiBp
bmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAg
ICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKKworICAg
IFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOworICAgIGlmIChvcGNvZGVJRCAh
PSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgaW5mbyA9IG1fdW5saW5rZWRDYWxscy5hZGQoKTsK
KyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAg
aW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsKKwor
ICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOworCisgICAgICAgIEFTU0VSVChtX2NhbGxDb21w
aWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOworICAgICAgICBt
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnVubGlua2VkQ2FsbExpbmtJ
bmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFudDsKKyAgICB9CisgICAgY29t
cGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7CiAKICAgICAvLyBTUCBob2xk
cyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRD
b3VudCBpbml0aWFsaXplZC4KLSAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBtX2NvZGVCbG9jay0+
Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7Ci0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0g
Q2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7CisgICAgdWludDMyX3QgbG9jYXRp
b25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQpKTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNhbGxlZS4KQEAgLTIz
NCwxNiArMjUyLDEyIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8K
ICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5k
ZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29k
ZUlEKSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBp
bGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVj
b2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCisgICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChi
eXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgsIGluZm9Db25zdGFudCkpCiAgICAgICAg
IHJldHVybjsKIAorICAgIGxvYWRDb25zdGFudChpbmZvQ29uc3RhbnQsIHJlZ1QyKTsKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhzID0gaW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZv
OjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlu
a0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsm
XSB7CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBw
cmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKICAgICAgICAgfSk7CkBAIC0yNTMsMTQgKzI2
NywxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRGYXN0UGF0
aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAg
ICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBh
ZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIHJlc2V0U1AoKTsKIAogICAgIGVt
aXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KQEAgLTI3MywyMSArMjg2LDIwIEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhd
LnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwor
ICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhd
LmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CisgICAg
Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlzLCByZWdUMik7CiAK
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CisgICAgcmVzZXRTUCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0z
OTUsMTcgKzQwNywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IElu
CiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5l
eHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVz
ZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZh
dGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0R1BS
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQpAQCAtNDE2LDEw
ICs0NDIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9p
bnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEdQUlJl
ZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgbm90
T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsKICAgICBub3RPYmpl
Y3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBAIC00MzIsMTkgKzQ1
NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JHUFIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUs
IG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRlcmF0b3JHUFIsIGFy
Z3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBhdXRvIGRvbmUgPSBq
dW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNO
b3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00
NTIsNyArNDc0LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwog
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9y
TmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKICAgICAgICAgc3dp
dGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJu
IGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0OTEsNzkgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1bXAgZmFzdENhc2Ug
PSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAKICAg
ICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0ZUFkZHJlc3MoJm1l
dGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAgbG9hZDhGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRp
b25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rlcygp
LCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRl
cmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdU
MCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25N
ZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpKTsK
ICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIC8vIGNh
bGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAgICBHUFJS
ZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwot
ICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3aWxsIGdl
dCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2YWx1ZUdQ
UiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBp
dGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJS
ZWdpc3RlcjsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVy
UmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVl
R1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFk
ZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BS
KTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBw
cmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNW
YWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwg
cHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQg
dG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAg
ICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAgICAgewotICAgICAg
ICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDM7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9uZUdQUiwgaXRlckNhbGxS
ZXN1bHRHUFIpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRjaEFsbG9j
YXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRjaEFs
bG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0g
c2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIGds
b2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgICAg
IGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7Ci0g
ICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1Zh
bHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICAgICAgSnVt
cExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRv
bmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsKKworICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGJhc2VHUFIpOwogCiAgICAg
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMt
PnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCByZWdUNCwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
Zmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0
QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIHJlc2V0
U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRp
dmVseSByZXNldCBTUAorICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRHUFIpOwogCiAgICAg
ICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01MjcsNTkgKzU3Nyw1NSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgp
KTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgIHsKICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAgICAgICBHUFJSZWcg
aXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChi
cmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5k
KGJyYW5jaElmTm90Q2VsbChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCiAgICAgICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCk7CiAgICAg
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CiAgICAgICAgIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAot
ICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIp
KTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyQ2FsbFJl
c3VsdEdQUikpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFk
ZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygp
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLQotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCByZWdUMSk7Ci0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOworICAgICAgICBtb3ZlKGl0
ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgZG9uZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQpLnJhd0JpdHMoKSk7CisKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGRvbmVWUmVnLCBkb25lR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5r
KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1
bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1l
bnRHUFIwKTsKICAgICB9CiAKICAgICB7ICAgCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVl
OwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCiAgICAgICAgIFVuaXF1
ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpOwog
ICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAg
ICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFs
dWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgdmFsdWVWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0
R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3Vt
ZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFs
dWVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiwxMSBAQAogI2lu
Y2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0Lmgi
CiAKKwogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOworCiBuYW1l
c3BhY2UgREZHIHsKIGNsYXNzIENvbW1vbkRhdGE7CiBjbGFzcyBKSVRDb2RlOwpAQCAtMTU5LDEw
ICsxNjIsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUg
aml0VHlwZSkKICAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29k
ZShqaXRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlv
bnM6OnVzZURhdGFJQygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1
cm4gT3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkBAIC0yMjMs
NiArMjI2LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2hhcmVBdHRyaWJ1dGUgPT0gU2hhcmVBdHRyaWJ1dGU6OlNoYXJlZDsgfQogCisgICAgdmly
dHVhbCBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSB7IHJldHVybiBudWxs
cHRyOyB9CisKIHByaXZhdGU6CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAgICAgU2hhcmVBdHRy
aWJ1dGUgbV9zaGFyZUF0dHJpYnV0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29tcGlsYXRpb25LZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNyArMzgsNyBAQCB2b2lkIEpJVENvbXBpbGF0aW9uS2V5OjpkdW1wKFByaW50U3RyZWFt
CiAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIG91dC5wcmludCgiKENvbXBpbGUgb2YgIiwgKm1fcHJvZmlsZWRCbG9jaywgIiB3aXRoICIs
IG1fbW9kZSwgIikiKTsKKyAgICBvdXQucHJpbnQoIihDb21waWxlIG9mICIsIFJhd1BvaW50ZXIo
bV9jb2RlQmxvY2spLCAiIHdpdGggIiwgbV9tb2RlLCAiKSIpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9u
S2V5LmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29tcGlsYXRpb25LZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNTcgKzMwLDU2IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBDb2RlQmxvY2tTZXQ7Citj
bGFzcyBKU0NlbGw7CiAKIGNsYXNzIEpJVENvbXBpbGF0aW9uS2V5IHsKIHB1YmxpYzoKICAgICBK
SVRDb21waWxhdGlvbktleSgpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIpCisg
ICAgICAgIDogbV9jb2RlQmxvY2sobnVsbHB0cikKICAgICAgICAgLCBtX21vZGUoSklUQ29tcGls
YXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb24pCiAgICAgewogICAgIH0KICAgICAKICAgICBK
SVRDb21waWxhdGlvbktleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAg
IDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIpCisgICAgICAgIDogbV9jb2RlQmxvY2sobnVsbHB0
cikKICAgICAgICAgLCBtX21vZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpERkcpCiAgICAgewogICAg
IH0KICAgICAKLSAgICBKSVRDb21waWxhdGlvbktleShDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ss
IEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhwcm9m
aWxlZEJsb2NrKQorICAgIEpJVENvbXBpbGF0aW9uS2V5KEpTQ2VsbCogcHJvZmlsZWRCbG9jaywg
SklUQ29tcGlsYXRpb25Nb2RlIG1vZGUpCisgICAgICAgIDogbV9jb2RlQmxvY2socHJvZmlsZWRC
bG9jaykKICAgICAgICAgLCBtX21vZGUobW9kZSkKICAgICB7CiAgICAgfQogICAgIAogICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9wcm9maWxlZEJs
b2NrICYmIG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsK
KyAgICAgICAgcmV0dXJuICFtX2NvZGVCbG9jayAmJiBtX21vZGUgPT0gSklUQ29tcGlsYXRpb25N
b2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3Byb2ZpbGVk
QmxvY2sgJiYgbV9tb2RlICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9u
OworICAgICAgICByZXR1cm4gIW1fY29kZUJsb2NrICYmIG1fbW9kZSAhPSBKSVRDb21waWxhdGlv
bk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKICAgICB9CiAgICAgCi0gICAgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9wcm9maWxlZEJsb2NrOyB9CiAgICAgSklU
Q29tcGlsYXRpb25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICAKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgSklUQ29tcGlsYXRpb25LZXkmIG90aGVyKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJvZmlsZWRCbG9jayA9PSBvdGhlci5tX3Byb2ZpbGVk
QmxvY2sKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrID09IG90aGVyLm1fY29kZUJsb2NrCiAg
ICAgICAgICAgICAmJiBtX21vZGUgPT0gb3RoZXIubV9tb2RlOwogICAgIH0KICAgICAKICAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRI
YXNoKFdURjo6UHRySGFzaDxDb2RlQmxvY2sqPjo6aGFzaChtX3Byb2ZpbGVkQmxvY2spLCBzdGF0
aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxKSVRDb21waWxhdGlvbk1vZGU+Ojp0eXBlPiht
X21vZGUpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goV1RGOjpQdHJIYXNoPEpT
Q2VsbCo+OjpoYXNoKG1fY29kZUJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5
cGU8SklUQ29tcGlsYXRpb25Nb2RlPjo6dHlwZT4obV9tb2RlKSk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIENvZGVCbG9j
ayogbV9wcm9maWxlZEJsb2NrOworICAgIC8vIEVpdGhlciBDb2RlQmxvY2sqIG9yIFVubGlua2Vk
Q29kZUJsb2NrKiBmb3IgYmFzbGVsaW5lIEpJVC4KKyAgICBKU0NlbGwqIG1fY29kZUJsb2NrOwog
ICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtX21vZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCAr
NDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0g
ICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAg
IG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nl
c3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8g
PSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmln
aW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9
IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3Rl
cnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFs
aXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1
YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBm
YXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1Bh
dGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRh
Zz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5m
bywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisgICAgaml0
LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGppdC5mYXJKdW1wKEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIG1fZG9uZSA9IGppdC5s
YWJlbCgpOworfQorCiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKAogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVl
UmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTEwLDcgKzExOCw3IEBAIEpJVEdl
dEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIENhY2hl
YWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVn
cyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiAgICAg
OiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNp
dGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikK
LSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9jay0+
dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAgICwgbV9pc0xlbmd0aEFjY2Vz
cyhjb2RlQmxvY2sgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9jay0+dm0oKS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2UucGF5
bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAgLTEyMCw2ICsxMjgsMzUgQEAgdm9p
ZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIGdlbmVyYXRlRmFzdENv
bW1vbihqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNpemVGb3JMZW5ndGhB
Y2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCitz
dGF0aWMgdm9pZCBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3MoSklUJiBqaXQsIEdQUlJlZyBz
dHViSW5mb0dQUiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBzY3JhdGNoLCBHUFJSZWcgcmVzdWx0KQor
eworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2gpOworICAgIGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUo
KSkpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7Cisg
ICAgaml0LmxvYWRQcm9wZXJ0eShiYXNlLCBzY3JhdGNoLCBKU1ZhbHVlUmVncyB7IHJlc3VsdCB9
KTsKKyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJbmxpbmVBY2Nl
c3MubGluaygmaml0KTsKKyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7Cit9CisKK3ZvaWQgSklU
R2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0
LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBq
aXQubGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BS
KTsKKyAgICBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3Moaml0LCBzdHViSW5mb0dQUiwgQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNj
cmF0Y2gsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIG1fZG9uZSA9
IGppdC5sYWJlbCgpOworfQorCisKIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6SklUR2V0
QnlJZFdpdGhUaGlzR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBl
IGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
ciwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHRoaXNS
ZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0xMzgsNiArMTc1LDE4IEBAIHZvaWQgSklUR2V0
QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpnZW5lcmEKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0
LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAordm9pZCBKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChK
SVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0
YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHVi
SW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9H
UFIsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUUHV0
QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJ
ZGVudGlmaWVyLAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJS
ZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCAKQEAgLTE0OSw2ICsxOTgsMzQgQEAgSklU
UHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcgogICAgIG1fc3R1YkluZm8tPnVz
ZWRSZWdpc3RlcnMuY2xlYXIoc2NyYXRjaCk7CiB9CiAKK3ZvaWQgSklUUHV0QnlJZEdlbmVyYXRv
cjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHVi
SW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6
OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKwor
ICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKworICAgIEdQUlJl
ZyBiYXNlID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIEdQUlJlZyBzY3Jh
dGNoID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEdQUlJlZyBzY3Jh
dGNoMiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAgR1BSUmVnIHZh
bHVlID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKworICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGF1dG8g
c2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBz
Y3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5sb2Fk
MzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0LnN0b3JlUHJvcGVy
dHkoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBiYXNlLCBzY3JhdGNoLCBzY3JhdGNoMik7CisgICAg
YXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmso
JmppdCk7CisgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BS
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0
clRhZyk7CisKKyAgICBmaW5pc2hlZC5saW5rKCZqaXQpOworICAgIG1fZG9uZSA9IGppdC5sYWJl
bCgpOworfQorCiB2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImIGppdCkKIHsKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVB
Y2Nlc3M6OnNpemVGb3JQcm9wZXJ0eVJlcGxhY2UoKSk7CkBAIC0yMDAsNyArMjc3LDcgQEAgdm9p
ZCBKSVREZWxCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQu
bGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1
bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsK
ICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgp
OwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtMjM2LDcgKzMxMyw3IEBAIHZvaWQgSklU
RGVsQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGEKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVs
KCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZD
b2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKEND
YWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAg
fSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAg
ICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTI3MCw3ICszNDcsNyBAQCB2b2lkIEpJVEluQnlW
YWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwog
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1f
c3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9z
dHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0
cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxz
ZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9k
b25lID0gaml0LmxhYmVsKCk7CkBAIC0zMDAsNiArMzc3LDMyIEBAIHZvaWQgSklUSW5CeUlkR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXQKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxp
bmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAordm9pZCBKSVRJbkJ5SWRH
ZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWdu
ZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChK
SVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVs
KCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisKKyAg
ICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIEdQUlJl
ZyByZXN1bHQgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIEdQUlJlZyBz
Y3JhdGNoID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBh
dXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQu
Ym94Qm9vbGVhbih0cnVlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdCB9KTsKKyAgICBhdXRvIGZpbmlz
aGVkID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsKKyAg
ICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKwor
ICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisK
IEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OkpJVEluc3RhbmNlT2ZHZW5lcmF0b3IoCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsIEdQUlJlZyByZXN1bHQsIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHByb3RvdHlw
ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLApAQCAtMzMyLDcgKzQzNSw3IEBAIHZvaWQgSklUSW5zdGFu
Y2VPZkdlbmVyYXRvcjo6Z2VuZXJhdGVGYXMKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAg
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9z
dHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRy
KCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNl
CiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2Rv
bmUgPSBqaXQubGFiZWwoKTsKQEAgLTM2OCw3ICs0NzEsNyBAQCB2b2lkIEpJVEdldEJ5VmFsR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUZhc3RQCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwg
SklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0g
aml0LmxhYmVsKCk7CkBAIC00MDUsNyArNTA4LDcgQEAgdm9pZCBKSVRQdXRCeVZhbEdlbmVyYXRv
cjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BS
KTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1f
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAg
bV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5s
YWJlbCgpOwpAQCAtNDQwLDcgKzU0Myw3IEBAIHZvaWQgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2Vu
ZXJhdG9yOjpnZW4KICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0g
ICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJ
bmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91
dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyht
X3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2Rl
UHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xv
d1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5j
bHVkZSAiSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHV0S2luZC5oIgpAQCAtMzgs
MTEgKzM5LDExOCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXI7
CiBjbGFzcyBDYWxsU2l0ZUluZGV4OwogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklUOwogY2xh
c3MgU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsK
IAogZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90OwogZW51bSBjbGFzcyBKSVRUeXBlIDog
dWludDhfdDsKIAorc3RydWN0IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5l
RGVsQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQ
UkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5m
bzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86
OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2Vs
aW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIC8vIFdlIHJlbHkgb24gdGhpcyB3aGVuIGxpbmtp
bmcgYSBDb2RlQmxvY2sgYW5kIGluaXRpYWxpemluZyByZWdpc3RlcnMgZm9yIGEgR2V0QnlWYWwg
U3R1YkluZm8uCisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpY19hc3NlcnQocmVzdWx0ID09IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgc3RhdGljX2Fzc2VydChzdHVi
SW5mbyA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbyk7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKK307CisKK3N0cnVj
dCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlID0gR1BSSW5mbzo6YXJndW1lbnRHUFIyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHByb3RvID0gR1BSSW5mbzo6YXJndW1lbnRHUFIzOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86Om5vbkFyZ0dQUjE7Cit9OworCitz
dHJ1Y3QgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQg
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5m
bzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgZG9udENsb2JiZXJSZWdpc3Rl
ciA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlz
UmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVn
VDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdU
MjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7
Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2ggPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7Cit9OworCitzdHJ1
Y3QgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
byA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gg
PSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9
IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1
Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKwogY2xhc3MgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yKCkgeyB9CkBAIC02MiwxMiArMTcwLDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXpl
KAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNs
b3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5m
b0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2VkU3R1Yklu
Zm8geyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBwcm90ZWN0
ZWQ6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0VHlwZTsK
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgorICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2Rv
bmU7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKQEAgLTk4LDcgKzIxMiw3IEBAIHByb3Rl
Y3RlZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsK
IAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworcHVibGljOgogICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTExLDYgKzIyNSw3IEBA
IHB1YmxpYzoKICAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQ
UlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZh
c3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZv
R1BSKTsKIAogcHJpdmF0ZToKICAgICBib29sIG1faXNMZW5ndGhBY2Nlc3M7CkBAIC0xMjQsNiAr
MjM5LDcgQEAgcHVibGljOgogICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2lu
LCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVh
YmxlSWRlbnRpZmllciwKICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCisgICAgdm9p
ZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9D
b25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgo
TWFjcm9Bc3NlbWJsZXImKTsKIH07CiAKQEAgLTEzMiwxMCArMjQ4LDExIEBAIHB1YmxpYzoKICAg
ICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVy
YXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZp
ZXIsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcg
c3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CisgICAgICAg
IENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAgICAgICBK
U1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBH
UFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQgZ2VuZXJh
dGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHVi
SW5mb0dQUik7CiAgICAgCiAgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0
aW9uKCk7CiAKQEAgLTE2MywxMSArMjgwLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0
ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3Mg
bV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQ
YXRoSnVtcDsKIH07CiAKQEAgLTE5MSw4ICszMDYsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdl
bmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVt
cCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMjksNiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0
Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNTIsNiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJp
dmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI1NSw2ICszNjQs
NyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVl
LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3Jv
QXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklU
JiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIH07CiAK
IGNsYXNzIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IgewpAQCAtMjc3LDggKzM4Nyw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmlu
YWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0
aExpbmtCdWZmZXIpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0
YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwog
fTsKIApAQCAtMzAyLDExICs0MTAsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0
ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3Mg
bV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0OwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93
UGF0aEp1bXA7CiB9OwogCkBAIC0zMzAsOCArNDM2LDYgQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFi
bGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50
KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAoIXNyYy5p
c0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKK30KKwor
QUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lz
dGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29u
c3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3du
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25z
dGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBBbGwgbGluayB0aW1lIGNvbnN0
YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAg
IEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29u
c3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0
SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50
cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRD
YWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3Rl
ciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIp
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1
cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJu
VmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2FsbDsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1l
dGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
K3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBk
c3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJu
VmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZh
bHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVh
bFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcp
KQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55
U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7
CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBz
aG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28g
dGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFT
U0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkt
Pmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsg
MSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRlY29k
ZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFk
dmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90
Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5
dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhv
dC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7
Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkt
Pmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNr
cG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgsMjkgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
LSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+
bGVuZ3RoKCkgPT0gMTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1l
Q29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQog
aW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFs
dWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKTsKIAotICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9u
bHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4K
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmls
ZS5tX2J1Y2tldHMpOwotI2Vsc2UKICAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlw
dG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUu
bV9idWNrZXRzKTsKICAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3It
PmFzQml0cy5wYXlsb2FkKTsKICAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRv
ci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKIH0KKyNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0
YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRp
ZgpAQCAtMzIzLDQxICszNDgsMzcgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19z
YW1lPGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2Zp
bGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNW
YWx1ZVJlZ3MgdmFsdWUpCisjaWYgVVNFKEpTVkFMVUU2NCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRF
bWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQo
KSksIHZhbHVlKTsKLX0KIAotI2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyBy
ZXN1bHRSZWcpCi17Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpT
VmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyB2
YWx1ZVByb2ZpbGVPZmZzZXRGb3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7CisgICAgc3RvcmU2NCh2
YWx1ZS5ncHIoKSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBvZmZzZXQpKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykp
OwogfQogI2VuZGlmCiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIFJl
Z2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNl
bGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoc2hvdWxkRW1pdFByb2Zp
bGluZygpKSB7CiAgICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3Rv
cmUzMihzY3JhdGNoR1BSLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJl
SUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBv
ZmZzZXRPZkFycmF5UHJvZmlsZSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQg
YXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0
ZXJJRCBzY3JhdGNoR1BSKQogewotICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAg
ICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hH
UFIsIEFkZHJlc3MoYXJyYXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNl
ZW5TdHJ1Y3R1cmVJRCgpKSk7Ci0gICAgfQorICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
ICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2VsbEdQUiwg
c2NyYXRjaEdQUik7CiB9CiAKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQpAQCAtMzgwLDcgKzQwMSw3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewog
ICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwor
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRy
dXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAg
ICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcgKzUxNyw3IEBA
IGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsK
LSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tu
b3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcgKzUyNyw3IEBA
IGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVn
aXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkg
eworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3Rh
bnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAg
LTUxNCwxMSArNTM1LDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RK
UwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJ
bnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAm
JiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkK
IHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0LDExICs1NjAs
MTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VS
VChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVl
LmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobV9wcm9maWxlZENv
ZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKSB7CisgICAg
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
c3JjKTsKICAgICAgICAgICAgIG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRz
dCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNy
YywgZHN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTY2LDExICs1ODIsNiBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNP
cGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3Jj
LmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0K
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVz
c0Zvcihkc3QpKTsKQEAgLTU5NSw3ICs2MDYsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dDYXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0g
ICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tub3du
Q2VsbCh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9
CiAKQEAgLTYzNywzMCArNjQ4LDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0
KGNvbnN0IAogewogICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAg
cmV0dXJuIG1fY29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKLX0K
LQotQUxXQVlTX0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRv
U2NvcGUgYnl0ZWNvZGUpCi17Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0
YUlEICsgMTsgLy8gSGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8gaXRl
cmF0b3IgPSBtX2NvcGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3Ig
IT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1dEluZm8o
aXRlcmF0b3ItPnZhbHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0SW5m
b3MuYWRkKGtleSwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJbmZv
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5
QXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQot
ewotICAgIHVpbnQ2NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9w
Y29kZUlEKSArIDEpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0
YWRhdGFJRCk7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5k
KGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUg
YXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOwotICAgIG1fY29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwot
ICAgIHJldHVybiBhcml0aFByb2ZpbGU7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2st
Pm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KQEAgLTY4MSw2ICs2NjksNjAgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVj
bWFNb2RlPE9wUAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRl
IDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9t
TWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcg
cmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBv
ZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5
dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQzMihBZGRy
ZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQ4RnJv
bU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVn
IHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRD
b2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9m
ZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVu
YW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRhZGF0YShW
YWx1ZVR5cGUgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkK
K3sKKyAgICBzdG9yZTgodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENv
ZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zm
c2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OnN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlMzIodmFsdWUsIEFkZHJlc3Mo
c19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1l
dGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJl
ZyByZXN1bHQpCit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2Nr
LT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBz
X21ldGFkYXRhR1BSLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2Fk
Q29uc3RhbnQoSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBHUFJSZWcg
cmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX2NvbnN0YW50c0dQUiwgc3RhdGljX2Nh
c3Q8dWludHB0cl90Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7CisgICAg
bG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIg
Y29uc3RhbnQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnQu
aXNDb25zdGFudCgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBDb2RlQmxvY2s6
Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkpLCByZXN1bHQpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKHZvaWQq
KSksIHJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5z
dHJ1Y3R1cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0Ojph
bGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRv
ciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxP
YmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9y
SWZFeGlzdHMpOwpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdf
b2JqZWN0KGNvbnN0IEkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwg
c3RydWN0dXJlKTsKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlk
ZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdExvYWRQYXlsb2FkKGhhc0luc3RhbmNlVmFsdWUsIHJl
Z1QwKTsKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5z
dGFuY2Ugd291bGQgZG8uCiAgICAgSnVtcCBoYXNJbnN0YW5jZVZhbHVlTm90Q2VsbCA9IGVtaXRK
dW1wSWZOb3RKU0NlbGwoaGFzSW5zdGFuY2VWYWx1ZSk7Ci0gICAgSnVtcCBjdXN0b21oYXNJbnN0
YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1
bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAogICAg
IC8vIFdlIGtub3cgdGhhdCBjb25zdHJ1Y3RvciBpcyBhbiBvYmplY3QgZnJvbSB0aGUgd2F5IGJ5
dGVjb2RlIGlzIGVtaXR0ZWQgZm9yIGluc3RhbmNlb2YgZXhwcmVzc2lvbnMuCiAgICAgZW1pdExv
YWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMCk7CkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChwcm90byk7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAg
IG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIHJlZ1QwLCAvLyBy
ZXN1bHQKICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdExv
YWRUYWcocHJvdG8sIHJlZ1QzKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMCwgcmVnVDIpLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDEpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBn
ZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDAsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QxKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIH0KIApAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mX2N1c3RvbSgKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBl
bWl0TG9hZFBheWxvYWQoY29uc3RydWN0b3IsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChoYXNJbnN0
YW5jZVZhbHVlLCByZWdUNCwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5z
dGFuY2VPZkN1c3RvbSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBtX3Byb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCByZWdUMiwgSlNWYWx1ZVJl
Z3MocmVnVDQsIHJlZ1QzKSk7CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZhbHVlR1BS
KTsKIH0KICAgICAKQEAgLTI0OCw3ICsyNDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2Zf
aXNfdW5kZWZpbmVkKGNvCiAgICAgCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZTMy
KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzc4LDcgKzM3OCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bmFtZSA9IGJ5dGVjb2RlLm1fbmFtZTsKICAgICBlbWl0TG9hZFBheWxvYWQoZnVuYywgcmVnVDEp
OwogICAgIGVtaXRMb2FkKG5hbWUsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVn
VDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU2V0RnVuY3Rpb25OYW1lLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdU
MSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25v
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDA4LDcgKzQwOCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGkKICAgICBHUFJSZWcg
c2NyYXRjaDEgPSByZWdUMjsKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKICAgICBib29s
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChi
cmFuY2hJZkZhbHNleSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgp
LCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDIyLDcgKzQyMiw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICAgICBKU1ZhbHVlUmVncyB2YWx1ZShyZWdUMSwg
cmVnVDApOwogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAgIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QzOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgdmFsdWUsIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGFk
ZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQz
Nyw3ICs0MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAK
ICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8s
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAg
IGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNH
bG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CiAKQEAgLTQ2Myw3ICs0NjMsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1CiAKICAgICBhZGRKdW1wKGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qy
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQp
OwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCkBAIC01MDQsNyArNTA0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVt
aXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEpTVmFsdWUg
c3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9p
bnRlcik7CiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKQEAgLTU1MiwxMyAr
NTUyLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBn
ZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0
cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QwLCByZWdUMik7CiAgICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7CiAK
ICAgICAvLyBHZW5lcmljIGNhc2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNl
KGl0ZXIpKTsgLy8gZG91YmxlcwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fcHJvZmlsZWRCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwogCiAgICAgc3RvcmVSZXN1bHQubGluayh0aGlzKTsKICAgICBlbWl0U3Rv
cmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtNTkxLDE0ICs1OTEsMTQgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsbwogICAgIGdlbmVyaWNDYXNlLmFwcGVu
ZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpbmdFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJl
Z1QyKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxl
T3BFcVR5cGU6OkVxID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdl
dCk7CiAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAg
ICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAg
Z2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpFcSA/IE5v
blplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwogCiAgICAgZG9uZS5s
aW5rKHRoaXMpOwpAQCAtNjQzLDEzICs2NDMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
cShjb25zdCBJbnN0cnVjdAogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmlu
ZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaW5nRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAs
IHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9w
cm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKICAgICBzdG9yZVJl
c3VsdC5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAgICBnZW5lcmlj
Q2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nh
c2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9yZVJlc3VsdC5s
aW5rKHRoaXMpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZXR1cm5WYWx1ZUdQUik7
CkBAIC03NjIsNyArNzYyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3Ry
aWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03NzIsNyArNzcyLDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAt
NzkxLDcgKzc5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QK
IAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1Qy
LCByZWdUMSk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC04MjMsNyAr
ODIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJl
Z1QxKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTg0Niw3ICs4NDYs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAgICAgQVNTRVJU
KHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRMb2FkKGJ5
dGVjb2RlLm1fdmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uVGhyb3csIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7
CiB9CiAKQEAgLTg2Miw3ICs4NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29u
c3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKICAgICBpc0ludDMyLmxpbmsodGhp
cyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkKICAgICAgICAgZW1pdFN0b3JlKGRz
dCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTg4NCw3ICs4ODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90b19udW1lcmljKGNvbnN0IEluc3RyCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1i
ZXIoYXJndW1lbnRWYWx1ZVJlZ3MsIHJlZ1QyKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCkpOwogICAgIGlmIChzcmMgIT0gZHN0KQogICAgICAgICBlbWl0U3RvcmUoZHN0LCBy
ZWdUMSwgcmVnVDApOwogfQpAQCAtOTE1LDcgKzkxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVn
VDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSk7CiAgICAgaWYgKHNyYyAhPSBkc3QpCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCBy
ZWdUMCk7CiB9CkBAIC05MzEsNyArOTMxLDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNv
bnN0IEluc3RydWN0aW8KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZv
ckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zm
c2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBXaGVuIHRoZSBM
TEludCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlJ3ZlIGFs
cmVhZHkgdGllcmVkIHVwCisgICAgLy8gdGhlIHNhbWUgQ29kZUJsb2NrIHRvIGJhc2VsaW5lLCBh
bmQgd2UnbGwgY2F0Y2ggdGhlIGV4Y2VwdGlvbiBpbiB0aGUgYmFzZWxpbmUgSklUIChiZWNhdXNl
CisgICAgLy8gd2UgdXBkYXRlZCB0aGUgZXhjZXB0aW9uIGhhbmRsZXJzIHRvIHBvaW50IGhlcmUp
LiBCZWNhdXNlIHRoZSBMTEludCB1c2VzIGEgZGlmZmVyZW50IHZhbHVlCisgICAgLy8gaW5zaWRl
IHNfY29uc3RhbnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdlIHJlc3RvcmUgYWJvdmUgbWF5IG5v
dCBjb250YWluIHRoZSBjb3JyZWN0IHJlZ2lzdGVyLgorICAgIC8vIFNvIHdlIHJlcGxlbmlzaCBp
dCBoZXJlLgorICAgIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSks
IHNfY29uc3RhbnRzR1BSKTsKKyAgICB9CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgp
KTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJldHVyblZhbHVlR1BSKTsKQEAgLTk1NCw3ICs5NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
YXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3Jp
bmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVn
aXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIg
fHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUlu
ZGV4LmFzQml0cygpKTsKQEAgLTk5Niw4ICsxMDA3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2ltbShjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRl
Y29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2gg
ZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
Y29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2ZpbGVk
QmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAg
ICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJ
bmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5r
ZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTAyMywxMyArMTAz
NCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8g
Y3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dp
dGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hS
ZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hS
ZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlu
a2VkVGFibGUpOwogCiAgICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJs
ZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgsIHVubGlua2VkVGFi
bGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIApA
QCAtMTA0MSwxMyArMTA1MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNv
bnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRp
bmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMs
IHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBj
b25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRC
bG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3Ry
aW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwg
bV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwog
ICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCiAgICAgZW1p
dExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJs
ZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKQEAg
LTEwNjgsNyArMTA3OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0
aW8KICAgICAvLyBFdmVuIHRob3VnaCBKSVQgY29kZSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0
aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRl
cnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZl
dGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBmb3IgKGludCBpID0gQ29kZUJs
b2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkg
PCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCisgICAgZm9yIChpbnQgaSA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBpIDwg
bV9wcm9maWxlZEJsb2NrLT5udW1WYXJzKCk7ICsraSkKICAgICAgICAgZW1pdFN0b3JlKHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGkpLCBqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW50
ZXIpOwpAQCAtMTA4Nyw3ICsxMDk4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNv
bnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUg
PSBieXRlY29kZS5tX2NhbGxlZTsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hl
ZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2Fs
bGVlUmVnID0gcmVnVDA7CkBAIC0xMTIyLDcgKzExMzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
cmVhdGVfdGhpcyhjb25zdCBJbnN0CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRT
dHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzUmVnaXN0ZXIgPSBieXRlY29kZS5tX3NyY0RzdDsKIApAQCAtMTE0NSw3ICsx
MTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydQogdm9pZCBK
SVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
cm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRh
ZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUg
PSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTIzOSw3ICsxMjUwLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIGVtaXRMb2Fk
VGFnKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMSk7CiAgICAgSlNWYWx1ZVJlZ3MgdGhpc1Jl
Z3MocmVnVDEsIHJlZ1QyKTsKICAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
cmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
dGhpc1JlZ3MsIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRo
aXNSZWdzLCByZWdUMywgbV9wcm9maWxlZEJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0
LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3Rh
bnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50
KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3Jl
NjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkp
OwotICAgICAgICBlbHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0
YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAg
ICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3Qp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChz
cmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7
CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NywzNyArOTAsMzUg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9u
UHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFs
T2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAg
IEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5
PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsK
ICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2Ny
YXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CiAK
LSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRlcmZs
eSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JS
ZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93
Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0p
OwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3Io
KSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5l
d09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVSZWcp
OworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3Rl
ZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJ
VEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRl
cmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVy
ZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7Cisg
ICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7Cisg
ICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVn
VDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09i
amVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0
cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5l
d09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0xMzEsNyArMTMyLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCiAgICAgLy8gV2UgZG9uJ3Qg
anVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1
bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFz
SW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7
CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBy
ZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2Z1
bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKSkpOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOwogCkBAIC0xNTQsMzAgKzE1NiwzOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
dG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChi
YXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0g
ICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRo
IHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3RvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgdmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BS
KTsKICAgICAKICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0
IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wu
aGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1
ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5j
ZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAg
ICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJl
Z1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAv
LyBwcm90bwotICAgICAgICByZWdUNSwKLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRj
aAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAg
ICByZXN1bHRHUFIsCisgICAgICAgIHZhbHVlR1BSLAorICAgICAgICBwcm90b0dQUiwKKyAgICAg
ICAgc3R1YkluZm9HUFIsCisgICAgICAgIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2Ny
YXRjaDEsIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAg
IAorCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQgKzIw
MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRp
bWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAs
IHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1Qx
KTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBh
cmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxk
ZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJl
ZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9u
KikKQEAgLTI0MCw3ICsyNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZp
bmVkKGNvCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzgzLDkgKzM5Miw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jl
dF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7Ci0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3Rl
ckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC00
MTEsNyArNDIwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwog
CiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NDIsMTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1
bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFt
ZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQUjIp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ3NCwxMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7Cisg
ICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNDkxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRo
ZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0
byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1MzAsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwg
Y2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJl
LgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVy
bywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
MCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNx
dWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU1NCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAgICAvLyBGaXJz
dCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0
IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qw
KTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdh
c05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs1OTMsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9w
dHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRl
ciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBB
U1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAg
ICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVs
cGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIo
c3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAm
bWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29k
ZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFs
ID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEo
VHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZI
YXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGlu
ayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2MzQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUo
Y29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVn
VDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZh
bHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAo
YnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
Z2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJn
ZXQpOwpAQCAtNjQwLDcgKzY1MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3co
Y29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJh
bWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVy
KHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
YXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzcyMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93
KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJh
dG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAt
NzIwLDcgKzczMiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
IAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIGppdC5sb2Fk
UHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRHUFIwKTsKKyAg
ICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYXJndW1l
bnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIg
PSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyArOTIwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJl
Z1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5MzEsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKQEAgLTkzMSw3ICs5NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3Qg
SW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDAp
OwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVy
KHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9
IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBA
IC05NzgsNyArOTkyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3Ry
dQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RW
UmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTkz
LDcgKzEwMDcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSks
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIp
LCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFdoZW4gdGhlIExMSW50IHRocm93cyBhbiBl
eGNlcHRpb24sIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFkeSB0aWVyZWQgdXAK
KyAgICAvLyB0aGUgc2FtZSBDb2RlQmxvY2sgdG8gYmFzZWxpbmUsIGFuZCB3ZSdsbCBjYXRjaCB0
aGUgZXhjZXB0aW9uIGluIHRoZSBiYXNlbGluZSBKSVQgKGJlY2F1c2UKKyAgICAvLyB3ZSB1cGRh
dGVkIHRoZSBleGNlcHRpb24gaGFuZGxlcnMgdG8gcG9pbnQgaGVyZSkuIEJlY2F1c2UgdGhlIExM
SW50IHVzZXMgYSBkaWZmZXJlbnQgdmFsdWUKKyAgICAvLyBpbnNpZGUgc19jb25zdGFudHNHUFIs
IHRoZSBjYWxsZWUgc2F2ZXMgd2UgcmVzdG9yZSBhYm92ZSBtYXkgbm90IGNvbnRhaW4gdGhlIGNv
cnJlY3QgcmVnaXN0ZXIuCisgICAgLy8gU28gd2UgcmVwbGVuaXNoIGl0IGhlcmUuCisgICAgewor
ICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZK
SVREYXRhKCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJs
b2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIp
OworICAgIH0KIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJl
dHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXND
YXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
OwpAQCAtMTAxMSwyMyArMTAzNiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJ
bnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRv
IHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciog
YnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1p
dFByb2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkp
OwotICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUlu
ZGV4LmFzQml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5k
ZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJv
LCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBP
U1JFbnRyeS5saW5rKHRoaXMpOwotICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlciYgcHJvZmlsZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdU
MCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5k
LCByZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8
VmFsdWVQcm9maWxlJj4ocHJvZmlsZSksIHJlZ3MpOwotICAgICAgICB9KTsKLSAgICB9CiAjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKQEAgLTEwNTMsOCArMTA2Niw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2Ny
dXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJs
ZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50Lgot
ICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJ
bmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVk
aWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwog
CkBAIC0xMDgxLDEzICsxMDk0LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNv
bnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1
dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxl
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3
aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBk
ZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxl
LmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRj
aENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEwOTksMjAgKzExMTMsMjIgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1w
IHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1l
bnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0g
ICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNo
ZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1
bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJl
Q1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
cnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5n
V2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
cnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktl
eVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKICAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBs
b2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwor
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1
ZXN0cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVz
dDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0o
KSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0Rl
YnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTExMzMsNyArMTE0OSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCBy
ZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1
bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE0OCw3ICsxMTY0LDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjYsNyArMTE4MSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwog
ICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAg
d2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE4OCwxMiArMTIwMywxNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJ
IGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVn
aXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9s
b25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJl
LgotICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CisgICAgc2l6ZV90
IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpOwogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQog
ICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKIAot
ICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOworICAgIAorICAgIGxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFdyaXRl
QmFycmllcihyZWdUMCk7CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vs
c2UKQEAgLTEyMTIsNyArMTIyOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IElu
c3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2
bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BV
KFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0xMzEwLDIzICsx
MzI3LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQg
SklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhp
cz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNo
ZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3Jj
RHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwog
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUp
KTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1
Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5t
X2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0g
Jm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVn
VDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQg
cmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcgKzEzNTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVn
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkg
LSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9m
ZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJl
Zyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7Cisg
ICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlzOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZDYWNoZWRDYWxsZWUoKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFz
U2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcs
IFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rp
b25SZWcpKTsKICAgICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcy
LDcgKzEzODUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVh
bihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9
CkBAIC0xMzgyLDcgKzEzOTYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IElu
c3RydWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAg
IHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcg
KzE0MDksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAt
MTQwNCw3ICsxNDIwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1
YwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQog
CkBAIC0xNDE4LDEwICsxNDM1LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbSgKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2Nv
bnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNv
ZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1Qx
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBH
UFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJu
VmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE0MzAsNyArMTQ0OCw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1
enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9t
SW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX3VubGlua2VkQ29kZUJsb2NrLT5sb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAgICAgICB1aW50cHRy
X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsK
ICAgICAgICAgbG9hZFB0cihwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1
cm4gPSBicmFuY2hQdHIoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKE9wdGlvbnM6OmVhcmx5
UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xNDQwLDcgKzE0NTgsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAjZWxzZQogICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCi0gICAgICAgIG1vdmVWYWx1ZShtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
c3VsdFJlZ3MuZ3ByKCkpOwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
ICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7CkBAIC0xNDUzLDggKzE0NzEsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hp
bnQoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNr
OiAKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1
dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRy
ZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAg
ICAgICAgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVy
KCkpKSk7CiAgICAgfQogfQogCkBAIC0xNTA5LDcgKzE1MjgsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UKICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTUyMiw3ICsx
NTQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAg
IEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQog
ICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTE1NjQsMzQgKzE1ODQsMzYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhw
ID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdl
eHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJl
Z0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGds
b2JhbEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0
PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAg
IGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQ
YXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKLSAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRl
Y29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbCwgYml0d2lzZV9jYXN0PHZv
aWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOwor
ICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKIAogICAgIE9wY29kZUlE
IG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVu
YykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVs
c2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAs
IGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVs
c2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAg
ICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2MjEsMjMgKzE2NDMsMjQgQEAgdm9pZCBKSVQ6
OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXls
b2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5j
dGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGlj
X2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29u
c3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBP
cDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9u
LCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2Ug
aWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rp
b24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRz
dCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAg
ICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTY2NCwyOSArMTY4NywzMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5t
X2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxs
b2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZh
bHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBhcmd1bWVudEdQUjIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRl
Y29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgc2l6ZSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xl
bmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6
ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1Qw
KTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJy
YXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBh
cmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmd1
bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogI2Vsc2UKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMik7CiAgICAgZW1p
dExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVB
bmRQcm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CiAjZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNzE4LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgbV9pc1NoYXJlYWJs
ZSA9IGZhbHNlOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9u
ID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Q
cm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE3NzcsMjAg
KzE4MDMsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAg
IHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1Qy
LCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigp
OwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRj
aDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0
ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hp
Y2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJl
Zyk7CisgICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBU
aGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMlJlZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCks
IHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVn
VDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7
CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qx
KTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFs
dWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICBtX2lzU2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEJh
c2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9iYXNpY0Js
b2NrTG9jYXRpb247CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9jYXRpb24t
PmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7CkBAIC0xODYwLDcgKzE4OTEsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVk
KCksIHJlc3VsdFJlZ3MpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE4ODYsNyAr
MTkxNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QKICAgICBl
bWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdz
LCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVz
dWx0UmVncyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkNvZGVCbG9j
a0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKQEAgLTI4NTUsNyArMjg1
Niw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1Zh
bHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9j
ay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAg
ICB2b2lkKiByZXN1bHQgPSBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKIApAQCAtMjg4MCw3ICsyODgxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRL
ZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
IAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoa2V5LmlzSW50
MzIoKSkKQEAgLTI5MDMsNyArMjkwNCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25Td2l0Y2gKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIHZvaWQqIHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxp
bmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAKICAgICBpZiAoa2V5LmlzU3Ry
aW5nKCkpIHsKICAgICAgICAgU3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmluZyhrZXkpLT52YWx1
ZShnbG9iYWxPYmplY3QpLmltcGwoKTsKQEAgLTI5MTksNyArMjkyMCw2IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4ocmVzdWx0KTsKIH0KIAotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lLCBF
bmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3Ry
dWN0aW9uKiBwYykpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMjk3
MSw3ICsyOTcxLDYgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdgog
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXNvbHZlZFNjb3BlKTsKIH0KLSNlbmRpZgog
CiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBFbmNvZGVk
SlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RydWN0aW9u
KiBwYykpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsNyBAQCBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1pbikp
OwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93
bktleVR5cGUsIGNoYXIqLCAoVk0qLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUlu
ZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25T
d2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4KSk7Ci0jaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdmVT
Y29wZUZvckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpKTsKLSNlbmRpZgogSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmpl
Y3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25QdXRUb1Njb3BlLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBjb25z
dCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDEyIEBAIGF1dG8g
SklUUGxhbjo6dGllcigpIGNvbnN0IC0+IFRpZXIKIAogSklUQ29tcGlsYXRpb25LZXkgSklUUGxh
bjo6a2V5KCkKIHsKLSAgICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkobV9jb2RlQmxvY2stPmJh
c2VsaW5lQWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKKyAgICBKU0NlbGwqIGNvZGVCbG9jazsKKyAg
ICBpZiAobV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpCisgICAgICAgIGNv
ZGVCbG9jayA9IG1fY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgIGVsc2UKKyAg
ICAgICAgY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAg
ICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBtX21vZGUpOwogfQogCiBib29s
IEpJVFBsYW46OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lv
biAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKIAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCBy
ZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgbV9w
cm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmlsZWRCbG9jay0+aWRl
bnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9i
eV9pZChjb25zdAogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0
TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeUlkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBtX3Byb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlf
aQogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2Fk
KGdldHRlciwgcmVnVDMpOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1Q0KTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmlt
cGwoKSwgYXR0cmlidXRlcywgcmVnVDMsIHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlclNldHRlciwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVn
VDEsIG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1
dGVzLCByZWdUMywgcmVnVDQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAxLDcgKzEw
MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0
TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMSwg
cmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgbV9wcm9maWxlZEJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0
dHJpYnV0ZXMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNSw3ICsxMTUs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdExv
YWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEsIHJl
Z1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIG1fcHJvZmlsZWRCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRy
aWJ1dGVzLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
Mik7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCk7CkBAIC0xMzEsOCArMTMxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydQogICAgIGVtaXRMb2FkKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5w
YXlsb2FkR1BSKCkpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNl
UmVncy50YWdHUFIoKSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAorICAg
ICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2Nr
LCAqaWRlbnQpLAogICAgICAgICBiYXNlUmVncywgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywg
cmVnVDQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocHJvcGVydHksIHByb3BlcnR5UmVncy50YWdHUFIoKSk7CiAKICAgICBKSVREZWxCeVZhbEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9w
cm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywg
cmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgcmVnVDQpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwpAQCAtMjAyLDcgKzIwMiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfdmFsKGNvbnN0IEkKIAogICAgIGVtaXRMb2FkMihiYXNlLCBiYXNlUmVncy50YWdHUFIo
KSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpLCBwcm9wZXJ0eSwgcHJvcGVydHlSZWdzLnRhZ0dQUigp
LCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFzZVJl
Z3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSksIEpTVmFsdWVSZWdzKHByb3BlcnR5
UmVncy50YWdHUFIoKSwgcHJvcGVydHlSZWdzLnBheWxvYWRHUFIoKSksIFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxl
ZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhiYXNl
UmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKSwgVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCByZXN1bHRS
ZWdzKTsKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lk
KGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
ZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYmFz
ZVJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwpAQCAtMjI3LDcgKzIyNyw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KIAogICAgIGVtaXRMb2FkKGJh
c2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkpOwogCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VSZWdzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0
ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmls
ZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgcmVzdWx0UmVncyk7CkBAIC0yMzcsNyAr
MjM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwpAQCAtMjQ5LDcgKzI0OSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICAgICAgYXV0byBub3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKICAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUNCk7CiAgICAgICAgIG5vdENlbGwubGlu
ayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFs
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7CiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmls
ZSwgcmVnVDQpOwpAQCAtMjU3LDcgKzI1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92
YWwoY29uc3QgSW5zdHIKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAogICAgICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICAgICAgZW1p
dFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKICAgICB9CiB9CkBAIC0yNzUsNyArMjc1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgIGlmIChoYXNBbnlT
bG93Q2FzZXMoaXRlcikpIHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQmxvY2spOwogICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CkBAIC0yODQsNyArMjg0LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwot
ICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHBy
b2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MikpOworICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiAgICAgfQogfQpAQCAtMzA1LDEzICszMDUsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAogICAgICAg
ICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGJhc2VHUFIsIHByb3Bl
cnR5R1BSLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3VsdFJl
Z3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpKTsKIH0KIApAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKIAogICAgIGF1dG8gYmFzZUdQUiA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7CiAgICAgYXV0byBwcm9wZXJ0eUdQUiA9IEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3Bl
cnR5R1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwogfQogCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVf
bmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7
CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhy
ZWdUNSwgcmVnVDQpLCBJbnZhbGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKGMKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KTsK
IAogICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0
QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJp
dmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZVJlZ3Ms
IHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihu
dWxscHRyKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0
ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VSZWdzLCBwcm9w
ZXJ0eVJlZ3MsIHZhbHVlUmVncywgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0
cikpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
IH0KQEAgLTM5NSw3ICszOTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFu
ZChjb25zCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJhc2VSZWdzLnRh
Z0dQUigpKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNl
dFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCiAgICAgICAgIGJhc2VSZWdzLCBicmFuZFJlZ3MsIEludmFsaWRHUFJSZWcpOwogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwpAQCAtNDE4LDcgKzQxOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRf
cHJpdmF0ZV9icmFuZCgKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9
IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleF07CiAgICAg
KyttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJ
bW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBi
YXNlUmVncywgYnJhbmRSZWdzKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogfQogCkBAIC00MzUsNyArNDM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2hlY2tfcHJpdmF0ZV9icmFuZChjbwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlLCBiYXNlUmVncy50YWdHUFIoKSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgYmFzZVJlZ3MsIGJyYW5kUmVncywg
SW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC00NTIsNyArNDUyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIEpJVFByaXZhdGVCcmFuZEFj
Y2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFu
ZEFjY2Vzc0luZGV4XTsKICAgICArK21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXg7CiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgYnJhbmRS
ZWdzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0
ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgYnJhbmRSZWdzKTsKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC00NjUsNyArNDY1
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKQEAgLTQ3OCw3ICs0NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RyCiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBy
ZWdUNiwgcmVnVDcpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3By
b2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1
ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgcmVnVDYsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwpAQCAtNTA0LDcgKzUwNCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gSklUOjplY21hTW9k
ZShieXRlY29kZSk7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRCbG9jayk7CiAgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAgICAgfTsKIApAQCAtNTI0LDcgKzUyNCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDIsIHJlZ1QxLCBw
cm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0
KTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUu
aXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmlj
dCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/
IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0
cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUpOwog
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAg
LTUzNCw3ICs1MzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IElu
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEs
IHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpA
QCAtNTQyLDEzICs1NDIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25z
dCBJbgogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6
cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBl
OjpUcnlHZXRCeUlkKTsKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJl
Z1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7
CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRS
ZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTU1OCwxMyAr
NTU4LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmls
ZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1f
cHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAg
ICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0K
QEAgLTU3NSw3ICs1NzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
RGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwg
cmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVn
VDEpOwpAQCAtNTgzLDEzICs1ODMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdAogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxv
YWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0
QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3Qs
IHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAt
NTk5LDEzICs1OTksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3Qo
YwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
RGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxl
ZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKIAogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC02MTQsMTAg
KzYxNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRMb2FkKGJhc2Us
IHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJl
Z1QxKTsKQEAgLTYzMCwxMyArNjMwLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnUKIAogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApOwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25s
eShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdz
LnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTY0NiwxMyArNjQ2
LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVk
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNjYzLDcgKzY2Myw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFs
dWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKICAg
ICAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKHRoaXNW
UmVnLCByZWdUNCwgcmVnVDMpOwpAQCAtNjczLDEzICs2NzMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIEludmFsaWRHUFJSZWcpOworICAgICAgICBt
X3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRl
bnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUNCwgcmVnVDMpLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBy
ZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTY4OSwxMyArNjg5LDEzIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgr
K107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBvcGVyYXRpb25HZXRCeUlk
V2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1Q0LCByZWdUMyksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
fQpAQCAtNzEwLDE1ICs3MTAsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJl
Y3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKICAgICAKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVn
VDEsIHJlZ1QwLCB2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICAKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBJbnZhbGlkR1BSUmVnLAogICAg
ICAgICByZWdUMSwgYnl0ZWNvZGUubV9mbGFncy5lY21hTW9kZSgpLCBkaXJlY3QgPyBQdXRLaW5k
OjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwogICAgIApAQCAtNzM4LDcgKzczOCw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlz
KTsKIApAQCAtNzQ4LDcgKzc0OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQo
Y29uc3QgSW4KICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0
QnlJZEluZGV4KytdOwogICAgIAogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCi0gICAg
ICAgIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
Z2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgICAgICBn
ZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBn
ZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03
NTgsMTQgKzc1OCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVn
VDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAg
ICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CisgICAg
ICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1faW5CeUlk
cy5hcHBlbmQoZ2VuKTsKQEAgLTc3OSwxMyArNzc5LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5C
eUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQpAQCAtNzk2LDcgKzc5Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChj
b25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgZW1pdExvYWQyKGJhc2Us
IHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CkBAIC04MDQsNyArODA0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDQpOwogCiAgICAgSklU
SW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC04MTksMTQgKzgxOSwxNCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBt
X2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlW
YWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtODM3LDcgKzgz
Nyw3IEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUSW5CeVZhbEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3M6
OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC04NTMs
NyArODUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaQogICAg
IEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRp
b25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9w
ZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9m
aWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC04OTAsNyArODkwLDcg
QEAgdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZQogewogICAgIGlmICgh
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0
aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzLCB1bnNpZ25lZCBkZXB0aCkKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIEpJVDo6ZW1pdFJl
c29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0
YWRhdGEubV9yZXNvbHZlVHlwZTsKQEAgLTkxNiwxMSArOTE2LDExIEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3Rh
bnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUs
IG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2ZpbGVkQmxv
Y2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKICAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVz
c09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9wcm9maWxlZEJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgp
KSwgcmVnVDEpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpLCByZWdUMSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29w
ZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CkBA
IC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IAogICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6
Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZEJsb2NrKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVn
VDEpOwpAQCAtMTAzOSw3ICsxMDM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZp
cnR1YWxSZWdpcwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2Rl
Lm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1
dEluZm8ucmVzb2x2ZVR5cGUoKTsKQEAgLTExNDYsNyArMTE0Niw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUs
IGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGVtaXRTdG9yZShk
c3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKQEAgLTExNTYsNyArMTE1Niw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2sp
LCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqIHNldCkKQEAgLTExOTAsNyArMTE5MCw3IEBAIHZvaWQgSklUOjplbWl0UHV0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXMKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1
dEluZm8oYnl0ZWNvZGUpOwpAQCAtMTIwMiw3ICsxMjAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCBy
ZWdUMik7CiAgICAgICAgICAgICAKQEAgLTEyMTcsNyArMTIxNyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAg
IGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
ICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29k
ZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9wcm9maWxlZEJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0
YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CkBAIC0xMzE4LDcgKzEz
MTgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3Ip
OwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRUb1Njb3BlLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzMzMsNyArMTMzMyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBlbWl0TG9hZFBheWxv
YWQoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIERpcmVjdEFy
Z3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSArIFRhZ09mZnNldCksIHJlc3V0bFJlZ3MudGFnR1BSKCkpOwogICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBQYXlsb2FkT2Zmc2V0KSwgcmVzdXRsUmVn
cy5wYXlsb2FkR1BSKCkpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1dGxSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3V0bFJlZ3MpOwogICAg
IGVtaXRTdG9yZShkc3QsIHJlc3V0bFJlZ3MudGFnR1BSKCksIHJlc3V0bFJlZ3MucGF5bG9hZEdQ
UigpKTsKIH0KIApAQCAtMTM1NSw3ICsxMzU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X2FyZ3VtZW50cyhjb25zdAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5MiArNDksMTA0IEBA
IG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnNjcmF0Y2g7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CiAKLSAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQo
KSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAg
ICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgaWYg
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJz
LmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7
CisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlW
YWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAg
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIp
OworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwg
c2NyYXRjaEdQUik7CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlW
YWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzLCByZWdUMik7CisgICAgICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQ
Uik7CisKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAg
ICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7
CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OkdldEJ5VmFsOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICByZXNldFNQKCk7
IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkg
cmVzZXQgU1AKKworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+
CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5
dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGlm
IChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFs
c1ttX2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJn
dW1lbnRHUFI0KTsKICNlbHNlCi0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAg
ICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUlu
ZGV4KTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRlY29kZUluZGV4
KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJn
MSBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BS
ID0gYXJndW1lbnRHUFIyOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7Ci0KLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwotICAgICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgICAgICBD
YWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpOwotICAgICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBh
cmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UgPT0gcmVnVDApOwor
ICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkgPT0g
cmVnVDEpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVy
blZhbHVlR1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBw
cm9maWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwotICAgIH0KKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCkBAIC0xNDksNyArMTYxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAg
ICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTYwLDggKzE3Miw4IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBjb25zdGV4cHIgR1BSUmVnIGds
b2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSNTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9
IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7
CiAKQEAgLTE4NywzNCArMTk5LDQwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25h
bWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVO
YW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3Ms
IHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRQcml2YXRlTmFtZSwKKyAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBy
ZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
c3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0
ZU5hbWU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKQEAgLTIyMyw5ICsyNDEsMTEgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRh
dGEsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJv
cGVydHlHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50
R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBh
cmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVy
YXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1NSwyMCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4K
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25h
bWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1
cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCkBAIC0yNjQsNyArMjc4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdo
dCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhl
ciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAg
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAg
ICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAwLDIxICszMTQsMjggQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9
IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJS
ZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwotCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0
ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7
CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2Vx
dWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC0zMjQsMTcg
KzM0NSwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAg
ZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9z
ZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIFVOVVNFRF9QQVJB
TShjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRB
Y2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJh
bmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNl
dFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6
ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBh
cmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMzQ0LDI0
ICszNzAsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwog
CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJn
MSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8
fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50
R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rp
b25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJn
dW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5k
T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25T
ZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICNlbmRpZgogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM3MCwzMyArMzkwLDQ3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5t
X2JyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6
YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7CisKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQ
cml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5k
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5k
KGdlbik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tQcml2YXRlQnJhbmQ+KCk7CisgICAg
VU5VU0VEX1BBUkFNKGJ5dGVjb2RlKTsKKwogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVy
YXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0lu
ZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VHUFIsIGJyYW5kR1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBh
cmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFu
ZCwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkNo
ZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTQwNiwyNCArNDQwLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9j
aGVja19wcml2YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChw
cm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5
cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFs
dWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJp
dmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNSwzMCArNDYzLDQzIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDMpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCByZWdUMywgcmVnVDQpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUs
IGJhc2VHUFIsIHByb2ZpbGVHUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0
YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxl
R1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJl
Z1Q0KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIsIHN0dWJJbmZvR1BSKTsKKwogICAgIGlm
IChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAg
ICBhZGRTbG93Q2FzZSgpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBzdGQ6Omlz
X3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5k
OjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUp
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQg
dG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0
QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MTUs
MTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNN
QU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7
CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
ICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBA
IC00OTgsNyArNTM2LDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25m
aWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRC
eVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSks
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
LCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1
dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRH
UFI1KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIGNhbGxPcGVyYXRp
b248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3MoYXJn
dW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFy
Z3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTUxMiw3ICs1NTksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChj
b25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBj
YWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU3MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUz
MywxOCArNTgwLDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0
IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZH
L0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0
cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0g
ICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVy
bkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVn
VDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVH
UFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
ZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZChC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMo
cmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAgfQor
CiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpAQCAtNTcw
LDIwICs2MjMsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAog
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
Mik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJbnZh
bGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNs
b3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQ
Uik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9IGJ5
dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQg
d3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2NTgsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKLSAg
ICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAg
VU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02MDMsMTMg
KzY2NiwxNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0aW9uID0g
cHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4g
dGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZv
KCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9w
ZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGlt
aXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjg3LDEyIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQpAQCAtNjQzLDE0ICs3MDIsMTQgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdU
NDsKIApAQCAtNjgwLDcgKzczOSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
aWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVn
VDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJ
ZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC02ODksNyArNzQ5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9p
ZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlk
LCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC02OTksNyArNzYwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRl
cl9zZXR0ZXJfYnlfaQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1Qx
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVn
VDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1Qx
LCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MDksNyArNzcxLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmli
dXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIHJl
Z1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTcxOSw3ICs3ODIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5
X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5
LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVz
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVz
LCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRl
cywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyNywyMyArNzkxLDMzIEBAIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGlu
ZURlbEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisg
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHVi
SW5mb0dQUiwgc2NyYXRjaEdQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRl
LWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUt
YmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJl
cnMgcmVnaXN0ZXJzLgpAQCAtNzU5LDE1ICs4MzMsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwog
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25EZWxl
dGVCeUlkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVz
dGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC03ODEsMjQgKzg1NywxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1l
bnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1Yklu
Zm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0
ZUJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTgwOCw3ICs4NzksNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC04NDUs
MjIgKzkxNiwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVn
VDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0g
QmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9H
UFIsIEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw7CisgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0
ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9i
YmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91
dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtODgzLDkgKzk2NSwxMSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkRlbGV0
ZUJ5VmFsT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9k
ZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQg
Kzk4MywxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4
cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1p
emU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVC
eVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMDUsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIgKzEwNDAs
MzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1
bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3Ms
IHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5
cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNzQsMTcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxP
cGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKT4oQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC0xMDAzLDI2ICsxMDk0LDIwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKICAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3Vt
ZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uVHJ5
R2V0QnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZh
bHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5
X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uVHJ5R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5W
YWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTAzMCwyMiArMTExNSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGly
ZWN0KGNvbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2VWUmVnLCByZWdUMCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Qp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRS
ZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisKKyAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRk
KCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0
UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAt
MTA1NCwxNiArMTE0OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0
QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTA3Myw4MyArMTE2OSw2MiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAg
IHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0
aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNh
bGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlk
RGlyZWN0T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIp
OwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBi
YXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZS
ZWcpOwogICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3Ro
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3Ro
TW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2Rl
TWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlk
TW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJh
eVByb2ZpbGUsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
R2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1l
dGFkYXRhOjpvZmZzZXRPZk1vZGUoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIEp1bXAgbm90QXJy
YXlMZW5ndGhNb2RlID0gYnJhbmNoMzIoTm90RXF1YWwsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgT3BHZXRCeUlkOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJh
eUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAg
ICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVn
VDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHMu
YXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCi0gICAgSklUR2V0
QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
bV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8g
V2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNl
dCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1
bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBA
IC0xMTU4LDE2ICsxMjMzLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29u
c3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
MTE3NywyNiArMTI1NCw1OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIx
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5t
X3RoaXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVn
aXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
YmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworCisgICAg
SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiksIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dEJ5SWRXaXRoVGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJl
LCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2Uo
KTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBA
IC0xMjA2LDcgKzEzMTUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdS
ZXR1cm5BZGRyZXNzKCk7CkBAIC0xMjQxLDE2ICsxMzUwLDE5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRo
aXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAg
IEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21f
Z2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkV2l0
aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90
aGlzVmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI4ICsxMzcyLDIyIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSBp
biB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNW
YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0Owog
ICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7
CiAgICAgc3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRo
VGhpc09wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIp
OwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKQEAgLTEyOTEsNyArMTM5Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQg
Z2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIg
Z2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAg
aml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTEzMjksMjMgKzE0MzUsMzggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0g
Ynl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNE
aXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3Ry
dWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAg
IC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVn
aXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2gg
dGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFu
Y2UgZnJvbSB0aGlzLgogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJl
Z1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJz
OjpzY3JhdGNoOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
VlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIGJhc2VHUFIsIHZh
bHVlVlJlZywgdmFsdWVHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMywgcmVn
VDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUiwg
ZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQ
dXRLaW5kOjpOb3REaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlJZDsKKyAgICBzdHViSW5mby0+
cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsK
KyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0
U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRp
dmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeUlkcy5hcHBlbmQo
Z2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsxNDgwLDE4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAgICAKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92
YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xMzc2LDI1ICsxNTAxLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29u
c3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjM7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQ
UiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0
OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CiAgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVy
dHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IGdlbi5zbG93UGF0aEZ1bmN0aW9uKCk7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChnZW4uc2xvd1BhdGhGdW5jdGlvbigp
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTE0MDQsNyArMTUyMyw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
QEAgLTE0NDEsMjAgKzE1NjAsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3Qg
SW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5C
eUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
VlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAg
IEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5SWQ7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0NjMsMTQg
KzE1OTMsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVElu
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsK
KyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKT4oQWRk
cmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjEzLDIyIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3Vt
ZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBk
byBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBj
cmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFt
ZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5
SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENh
bGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbklu
QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uSW5CeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2Mzcs
MzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQ
UiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZv
cy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlWYWw7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NzIsMTggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJv
ZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29k
ZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRH
UFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHks
IGFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbkJ5
VmFsT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTU2LDU5ICsxNjk0LDcwIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0g
YXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02
NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAgIC8vIHNs
b3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hh
dCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVw
bGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSks
IGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwot
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeVZh
bE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQs
IEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9H
UFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlwZTsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRl
U2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJVDo6ZW1p
dEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNl
LCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBBU1NF
UlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgVU5VU0VEX1BBUkFNKGJhc2UpOworICAgIFVOVVNF
RF9QQVJBTShwcm9wZXJ0eSk7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJy
YW5kKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5
VmFsSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0
eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5h
bWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBj
YWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpPihB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBh
cmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwy
NyArMTc2NywyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3Bl
cmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZh
dGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1l
PGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3Bl
cmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlv
bkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1By
aXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxNzk1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1l
PigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwg
Ynl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2
YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDIxNSArMTgwOSwxMjcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEhhc1ByaXZhdGVCcmFuZD4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNv
ZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhhc1ByaXZh
dGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQs
IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5q
ZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0
VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIHNj
cmF0Y2hHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAg
cmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRk
cmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworCisgICAgbG9h
ZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQ
UiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9p
bnQpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVz
cyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1t
MzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewotICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgcmVnVDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsg
KytpKQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4
dCgpKSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLXZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNj
b3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1l
dGFkYXRhLm1fcmVzb2x2ZVR5cGU7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xv
Y2FsU2NvcGVEZXB0aDsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5n
RXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZH
bG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2Fz
ZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAg
SlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxv
Y2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAg
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzd2l0Y2ggKHJlc29sdmVU
eXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0g
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6
IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBl
LCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAg
ICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
ZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci19Ci0jZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQogdm9pZCBKSVQ6
OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVz
b2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0
YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNT
RVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0g
Y3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZz
ZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBl
cywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisg
ICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikK
LSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50
LmdldCgpKSwgcmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZh
cikgCisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3Bl
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVs
c2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0
YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0
YVRhYmxlKGJ5dGVjb2RlKTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBb
XSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNj
b3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9z
dXJlVmFyIik7CisgICAgICAgIH07CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1Io
cmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAot
ICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAg
ICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKQor
ICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0g
W10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVT
Y29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5l
OiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7CiAg
ICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBhdXRv
IGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAg
ICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9w
dCwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMiKTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDI7CisgICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFk
YXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGNvZGU7CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIp
CisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsK
KyAgICAgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRv
cik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKICAgICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2
ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFt
ZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNv
bHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5l
cmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFz
ZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0
YWRhdGEgPSBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBt
ZXRhZGF0YUdQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Nv
cGVHUFIgPSByZWdUNjsgLy8gaW5jb21pbmcKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDI7IC8vIGluY29taW5nCisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9
IHJlZ1QwOyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSByZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgotICAgIGNv
bnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CiAgICAgVU5VU0VEX1BBUkFN
KGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9w
UmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7Cisg
ICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0
cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0
LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAK
LSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKKyAg
ICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAg
IGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAg
Z2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxP
YmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RH
UFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIs
IE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50
KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJl
c3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVj
dEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNo
cG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1
YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZl
Q2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBt
b3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsK
LQotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKLSAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAg
ICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxp
bmtUbyhsb29wLCB0aGlzKTsKLSAgICAgICAgfQotICAgICAgICBkb25lLmxpbmsodGhpcyk7Cisg
ICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHNjb3BlR1BSID09IHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZMb2NhbFNjb3BlRGVwdGgo
KSksIHJlZ1QxKTsKKworICAgICAgICBMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7CisgICAgICAg
IEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOworICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
KyAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICBqaXQu
anVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAg
IH07CiAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkg
ewpAQCAtMTg4MiwxMiArMTkzNywxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZz
ZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBt
b3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoKCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZH
bG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIApAQCAtMTg5NywxMSArMTk1MSwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZvciBHbG9i
YWxWYXIqLAogICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbExleGljYWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KLSAgICAgICAg
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKICAg
ICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xv
YmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0xOTA5LDcgKzE5NjMsNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgICAgICBlbWl0UmVzb2x2ZUNs
b3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAg
ICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0xOTE5LDgzICsxOTczLDQ1IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2Jh
bExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVU
eXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFy
IHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVt
cExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JK
RUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAg
ICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVy
dHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2Jh
bFByb3BlcnR5LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdUMSk7CiAKLSAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0g
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBq
aXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsK
KyAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKKyAgICAgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICBub3RDYXNlLmxpbmsoJmppdCk7Cisg
ICAgICAgIH07CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIHNr
aXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIGVtaXRD
YXNlKEdsb2JhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAg
ICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
anVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsK
LSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAot
ICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAg
IGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9z
Y29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0
aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9j
YXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklO
RV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlw
ZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0
aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAg
cmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0
LmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9y
ZXNvbHZlX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVf
VFlQRShERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX1JFU09M
VkVfU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8v
IFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGgg
dGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9u
cyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAog
ICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogICAgIC8vIFRoZSBmYXN0IHBhdGggYWxyZWFkeSBwdXNoZWQgdGhl
IHJldHVybiBhZGRyZXNzLgogI2lmIENQVShYODZfNjQpCkBAIC0yMDM0LDcgKzIwNTAsNiBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgcGF0Y2hCdWZmZXIu
bGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNvbHZlX3Njb3BlIik7CiB9Ci0j
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklUOjplbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QpCiB7CkBAIC0yMDYyLDI3NiArMjA3NywxMzMgQEAgdm9pZCBKSVQ6OmVtaXRHZXRD
bG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJl
Z2lzdGVyKSksIHJlZ1QwKTsKIH0KIAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5
cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1
cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOworICAgIFJlc29sdmVUeXBlIHByb2Zp
bGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5t
X2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKLSAg
ICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNs
b3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBH
UFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7
Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAgICBqaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwotICAgICAgICAgICAgfSkpOworICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09
IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3Ry
dWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAg
ICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoQVNT
RVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNo
MzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGlu
ZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05v
dE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7
Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAg
ICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgot
ICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGly
ZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAg
aWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBl
bWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgot
ICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6
Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KKyAg
ICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVy
biBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2Vs
aW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CiAgICAgfTsKIAotICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsK
LSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDAp
OyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZl
VHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2Jh
bExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8s
IHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlz
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEs
IG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLSNlbHNlIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUg
PSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRh
dGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJu
IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7
CisgICAgfTsKIAotICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgQVNTRVJUKEJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0m
IHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2
bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsK
KyAgICB9OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJl
Z1QyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAot
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsKLSAgICAgICAgdWludHB0cl90KiBv
cGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3Bl
cmFuZCk7Ci0gICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdHJkaWZm
X3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZt
ZXRhZGF0YSk7CisgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVC
bG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0jZGVm
aW5lIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfZ2V0X2Zyb21fc2Nv
cGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSAgICAgICAgfTsKLSN1bmRlZiBHRVRfRlJP
TV9TQ09QRV9HRU5FUkFUT1IKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29w
ZUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFH
UFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BS
KTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFH
UFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5l
cmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICB9Cisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgIGlmIChw
cm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGNvZGUgPSB2bS5nZXRD
VElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGNvZGUg
PSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9y
KTsKKyAgICBlbHNlCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNHZXRGcm9t
U2NvcGVHZW5lcmF0b3IpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRG
cm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtO
YW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRl
T3BHZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJl
c29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdl
bmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBC
YXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRo
ZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0
byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpN
ZXRhZGF0YTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRo
dW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKLQotICAgIHRhZ1JldHVy
bkFkZHJlc3MoKTsKLQotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRh
dGFHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2Fz
ZTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0gICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1
cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFkYXRhU3RydWN0dXJl
T2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgbWV0YWRhdGFT
dHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsK
LSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAg
ICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwotICAg
IH07CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGppdC5sb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdU
Myk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworCisgICAgSnVtcExpc3Qg
c2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9
IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSks
IHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBv
aW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
KyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlv
bldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBl
bWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykg
ewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwot
ICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFy
RnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0g
ICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRHZXRDbG9z
dXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBs
c2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2Nv
cGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7Ci0gICAg
fTsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBi
b29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVy
ZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KLQotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0g
ICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAg
Y29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFt
YmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWws
IGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFy
IGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBi
dXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMg
Y2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0
cnVjdHVyZSgpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFu
Y2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3Mo
cmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisKKyAgICAgICAgICAg
IGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsK
KyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCByZWdUMyk7CiAg
ICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRP
Zk9wZXJhbmQoKSksIHJlZ1QxKTsKKwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7
Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFu
T3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAg
ICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwot
ICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAg
SnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBq
aXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAg
ICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0
Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQz
MlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2Ny
YXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworCisgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7
CisgICAgICAgICAgICBqaXQubmVnMzIocmVnVDEpOworICAgICAgICAgICAgaml0LnNpZ25FeHRl
bmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgICAgICBqaXQubG9hZDY0KEJhc2VJbmRl
eChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAg
ICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAg
ICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwg
bV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVn
VDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAg
IGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAg
ICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAg
ICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIo
c2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdU
Myk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIp
KTsKKyAgICAgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHJlZ1QzKTsKKyAg
ICAgICAgICAgIGppdC5hZGRQdHIoc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDMsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlh
YmxlcygpKSwgcmVnVDApOworCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5h
bWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM0
MSw4NiArMjIxMyw2MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dElu
Zm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1
bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxz
ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEds
b2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxp
bmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29s
dmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9
IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykp
LCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0
cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGppdC5sb2Fk
MzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwg
cmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1w
IGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0
eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBqaXQuYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAg
IGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgbm90
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAg
IGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gaml0
LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Cisg
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKCZqaXQpOwor
ICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
ID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIu
bGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOwor
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsK
IAotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQor
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAg
ICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKKyAgICAg
ICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1
ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsK
KyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9m
ZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsK
IAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwot
ICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVM
b2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsK
KyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29k
ZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUg
REVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVz
b2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3Rl
eHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAg
ICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0
dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGlu
ZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hf
UkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVG
SU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0p
CiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5
IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1h
a2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxh
YmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxp
bmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkg
bm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZt
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVz
aChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNDI5LDcgKzIyNzgsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAjZW5kaWYKIAogICAgIHVzaW5nIE1ldGFkYXRh
ID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRh
dGFHUFIgPSByZWdUNzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7
CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIGpp
dC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIApAQCAtMjQ0OSw3ICsyMjk4LDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIENhbGwgb3BlcmF0aW9uID0gaml0
LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0LmVt
aXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAgICBqaXQuc3RvcmU2NChyZWdU
MCwgQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BS
SW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZh
bHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgaml0Lm1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsK
IAogI2lmIENQVShYODZfNjQpCkBAIC0yNDY5LDg4ICsyMzE4LDc3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1ZmZlci5saW5rKGp1bXBUb0hh
bmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFn
LCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0KLSNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShK
U1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNl
dCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1p
dE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9p
ZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZP
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdh
dGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5v
dGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsK
LSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1
cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwg
QWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkg
KyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0
SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBv
cGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3Bl
cmFuZCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmls
ZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1f
Z2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewog
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJz
IHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhp
bmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5k
bGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVj
dHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1
Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8v
IEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFy
IGluamVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBq
aXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBy
ZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAg
ICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAg
ICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdU
MSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwg
VGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIHN0b3Jl
UHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAg
ICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEds
b2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUpOwotICAg
ICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25N
b2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5
cGUsIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKKworICAg
ICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0
aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwg
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7
CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1
c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRp
Y2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAg
ICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJl
Y3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRh
Lm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1p
dFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwg
dmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisKKyAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0Tm90
aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVz
cyhyZWdUMCkpOworCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwg
dmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7
CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7CisgICAgICAgICAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0
Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdU
MCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBU
aW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOwor
CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAt
MjU2NCw1OCArMjQwMiw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVk
SW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUg
aW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQg
YSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAgICAgICAg
aXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7
Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJlVmFyLyBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGlsZSB0aGlu
Z3MKKyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3ZlIHByb3Zl
biB0aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZhciwKKyAg
ICAvLyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgorICAgIC8v
IGlmIHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0IGlzIGZp
cmVkLCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAgIC8vIG1h
dHRlciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxlZFJlc29s
dmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIpOworICAg
IGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyKQorICAg
ICAgICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAg
IGVtaXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbHNlIHsK
ICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7CiAg
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkp
KTsKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsK
LSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAg
ICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAor
ICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5r
KHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwg
dHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0
aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAKICAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJy
ZWFrOwogICAgIH0KIH0KIApAQCAtMjYyNCwxOCArMjQ1NiwyMSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4o
KTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNv
ZGUpLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewor
ICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBpZiAo
cHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYgYW55IGxp
bmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29kZUJsb2Nr
cyBhcmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIuCiAgICAg
ICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9u
LCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJy
b3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3VtZW50R1BS
MCwgY3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwogICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0g
bV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgQVNT
RVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9
PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3ICsyNDg3LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChY
ODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNzAxLDcgKzI1MzYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJn
dW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApA
QCAtMjc1OSw3ICsyNTk0LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkBAIC0yNzY3
LDcgKzI2MDEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxG
aWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDAp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjgyMyw3ICsyNjU3
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0bwogdm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
bnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwpAQCAtMjgz
OSwxMSArMjY3MiwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3Qg
CiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMgdGhlIG1vc3Qg
Y29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2UgaXQgaWYgd2Ug
cHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51bWVyYXRvck1l
dGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgewor
ICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2VudW1lcmF0
b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUp
IHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSByZWdUNDsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVt
ZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJy
YW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigofkpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgJiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmVudW1lcmF0aW9uTW9kZU1hc2spKSk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
RW51bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlOFRv
TWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1ldGFkYXRh
OjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKKwogICAgICAgICBsb2FkMzIoQWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBpbmRleEdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChi
cmFuY2gzMihOb3RFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSkpOwogCkBAIC0yODgxLDc4ICsyNzIwLDg4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdl
dEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBieXRl
Y29kZS5tX3Byb3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CiAKLSAgICBhdXRv
IHJlc3VsdEdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFz
ZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9y
R2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFs
UmVnaXN0ZXJzOjpzY3JhdGNoMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gQmFz
ZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6
c2NyYXRjaDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCBzY3Jh
dGNoMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHByb3BlcnR5
R1BSKTsKIAotICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1l
cmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEVudW1l
cmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHNj
cmF0Y2gyKTsKKyAgICBvcjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7CisgICAgc3RvcmU4VG9NZXRh
ZGF0YShzY3JhdGNoMiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwocmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQ
UikpOwogICAgIC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQgdmFsdWUuCi0gICAg
SnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDIs
IFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgIEp1bXAgaXNOb3RPd25T
dHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKIAogICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDMpOwot
ICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIEFk
ZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURP
ZmZzZXQoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgc2NyYXRj
aDEpOworICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKIAogICAgIC8vIENvbXB1dGUgdGhl
IG9mZnNldC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMyk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgc2NyYXRjaDIpOwogICAgIC8vIElmIGluZGV4
IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhl
biBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChy
ZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwotCisgICAgSnVtcCBvdXRPZkxp
bmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0
Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0
KCkpKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOworICAgIGxv
YWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVu
ZChqdW1wKCkpOwogCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKICAgICBvdXRP
ZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1Qy
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
LCByZWdUMyk7Ci0gICAgbmVnMzIocmVnVDMpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1Qz
LCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIGJhc2VHUFIpOworICAgIHN1YjMyKEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0
Y2gyKTsKKyAgICBuZWczMihzY3JhdGNoMik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRj
aDIsIHNjcmF0Y2gyKTsKICAgICBjb25zdGV4cHIgaW50cHRyX3Qgb2Zmc2V0T2ZGaXJzdFByb3Bl
cnR5ID0gb2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpICogc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1
bHRHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWln
aHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFw
cGVuZChqdW1wKCkpOwogCiAgICAgc3RydWN0dXJlTWlzbWF0Y2gubGluayh0aGlzKTsKLSAgICBz
dG9yZTgoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0
cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRh
ZGF0YSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgYnl0
ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9y
TWV0YWRhdGEoKSk7CiAKICAgICBpc05vdE93blN0cnVjdHVyZU1vZGUubGluayh0aGlzKTsKLSAg
ICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZElt
bTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKKyAgICBKdW1wIGlz
Tm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKICAgICAvLyBSZXBsYWNlIHRo
ZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHByb3BlcnR5R1BS
KTsKIAogICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaDEpOwogCiAgICAgSklU
R2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJ
bmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OkdldEJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29k
ZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBz
dHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKwor
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhl
cmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgZG9uZUNhc2VzLmxpbmso
dGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKQEAgLTI5NjEsMTAgKzI4MTAsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRv
cl9nZXRfYnlfCiAgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0ZXIpOwogfQogCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Ci12b2lkIEpJ
VDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVu
Y3Rpb25UeXBlIGdlbmVyYWxDYXNlKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBl
bmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFz
X3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQog
ewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKQEAgLTI5NzMsNyArMjgyMSw5IEBAIHZvaWQg
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW0KICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QwKTsKLSAgICBvcjgo
cmVnVDAsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsK
KyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCByZWdUMSk7CisgICAgb3IzMihyZWdUMCwgcmVnVDEp
OworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDEsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRh
dGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAKQEAgLTMwNjIsNiArMjkxMiwxMyBAQCB2
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiAgICAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmll
cihHUFJSZWcgb3duZXIpCit7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0g
YmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2VsZWN0U2NyYXRjaEdQUihvd25lcikpOworICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQ
YXRoLCAmdm0oKSwgb3duZXIpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0
aGlzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyODMwMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzYsOSArMjM2LDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0
QnkoSgogICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlQ2VsbCkpIHsKICAgICAgICAgICAg
ICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAogICAgICAg
ICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwKLSAgICAgICAgICAg
ICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0dWJJbmZv
LCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYg
SW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8s
IGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgewogCi0gICAgICAgICAgICAgICAgICAgIGJv
b2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0
aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOworICAgICAgICAgICAgICAg
ICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJy
YXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZv
LCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aChsb2NrZXIpOwpAQCAtMjQ5LDgg
KzI0OSw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAg
ICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFj
Y2Vzc0Nhc2U6OkFycmF5TGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgfSBlbHNl
IGlmIChpc0pTU3RyaW5nKGJhc2VDZWxsKSkgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5m
by5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYm
IElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pOworICAgICAgICAgICAgICAgICAgICAmJiBJ
bmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8p
KSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbyk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJv
cHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8uaW5pdFN0cmluZ0xlbmd0aChsb2NrZXIpOwpAQCAtMzA0LDcgKzMwNCw3
IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAg
ICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0
dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICAgICAmJiAh
bG9hZFRhcmdldEZyb21Qcm94eSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29k
ZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3Moc3R1Yklu
Zm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYm9v
bCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0
eUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAg
ICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSks
IHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOwpAQCAtNzMxLDExICs3MzEsMTEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlUHV0QnkoSgogICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZS0+ZGlkQ2Fj
aGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5
cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJh
dGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQorICAg
ICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5
UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQogICAgICAg
ICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkKICAgICAgICAgICAgICAgICAgICAgJiYgIWlzUHJveHkpIHsKICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvbGRTdHJ1
Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBib29sIGdl
bmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVw
bGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xk
U3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKHNsb3QsIHB1dEJ5
S2luZCwgcHV0S2luZCkpOwpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkg
PT0gYmFzZQogICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQogICAgICAg
ICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkg
ewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSk7CisgICAgICAgICAg
ICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNl
bGZJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAg
ICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIExPR19J
QygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQs
IHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9m
ZnNldCgpKTsKQEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0m
IHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBj
YWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5
KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsK
KyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBD
YWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAgIHJl
dmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAy
ODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDI0ICs0Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhl
bHBlcnMgaml0OwotCi0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwotCi0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LnBy
ZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLQotICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRp
b24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwotCi0gICAgaml0Lmp1bXBUb0V4Y2VwdGlv
bkhhbmRsZXIodm0pOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgcGF0Y2hC
dWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbiIpOwotfQotCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxs
RnJhbWVSb2xsYmFja0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsK
QEAgLTc3LDI0ICs1OSw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
aGEKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcs
ICJoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2siKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFu
ZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0Owot
Ci0jaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjplc3ApOwotI2VsaWYg
Q1BVKEFSTTY0KQotICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVn
aXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKLSNlbmRpZgotCi0gICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7Ci0KLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpF
eHRyYUNUSVRodW5rKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKGhhbmRsZUV4
Y2VwdGlvbkdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjb250aW51YXRpb24sIENv
ZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7Ci0gICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAicG9wVGh1
bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOwotfQotCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkK
IHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpAQCAtMTM3LDYgKzEwMSw0MiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoCiAKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5k
bGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisK
KyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0u
dG9wRW50cnlGcmFtZSk7CisKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVy
YXRpb24odm0pOworCisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxs
KE9wZXJhdGlvblB0clRhZyk7CisKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7
CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKG9w
ZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNl
cHRpb25IYW5kbGVyKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJ
VFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uIik7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2Vw
dGlvbkdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworI2lmIENQ
VShYODZfNjQpCisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICog
c2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKKyNlbGlmIENQVShBUk02
NCkKKyAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBD
Q2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIENDYWxsSGVscGVyczo6
SnVtcCBjb250aW51YXRpb24gPSBqaXQuanVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElU
aHVuayk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY29udGludWF0aW9uLCBDb2RlTG9jYXRp
b25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInBvcFRodW5rU3RhY2tQ
cmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVGFn
VHlwZT4KIGlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2FsbEhlbHBlcnMmIGpp
dCwgR1BSUmVnIHBvaW50ZXJHUFIsIFRhZ1R5cGUgdGFnKQogewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNywxMiArMzcsMTIgQEAgY2xhc3MgVk07CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNl
cHRpb25HZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKFZNJik7Ci1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2
ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIAogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2Vu
ZXJhdG9yKFZNJik7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhy
b3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNJik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24g
MjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlT3Bl
cmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAi
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkVycm9y
LmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCkBAIC0zNzAsMTMgKzM3MSwyMiBA
QCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAgICAgCiAgICAgY29k
ZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwogCisgICAgaWYgKGNv
ZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIGlm
IChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5r
ZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICAgICAgY29k
ZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmlu
c3RhbGxDb2RlKGNvZGVCbG9jayk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmppdE5leHRJbnZv
Y2F0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAg
ICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJ0
aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0
ZUNvdW50ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCks
ICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIAotICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRl
ID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFkeVBs
YW5zRm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25N
b2RlOjpCYXNlbGluZSkpOworICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlID0g
SklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFkeVBsYW5z
Rm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2so
KSwgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkpOwogCiAgICAgaWYgKGNvZGVCbG9jay0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CiAgICAgICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBpbGVkLiIp
OwpAQCAtNDY2LDggKzQ3NiwxMCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1
enppbmcoKSAmJiBjb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0uZ2V0TG9vcEhpbnRFeGVj
dXRpb25Db3VudGVyKHBjKTsKICAgICAgICAgKnB0ciArPSBjb2RlQmxvY2stPmxsaW50RXhlY3V0
ZUNvdW50ZXIoKS5tX2FjdGl2ZVRocmVzaG9sZDsKLSAgICAgICAgaWYgKCpwdHIgPj0gT3B0aW9u
czo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpCisgICAgICAgIGlmICgqcHRy
ID49IE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSB7CisgICAg
ICAgICAgICBjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEoQ29uY3VycmVudEpTTG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrKSk7IC8vIFdlJ3JlIHJldHVybmluZyB0byB0aGUgT1NSIGVudHJ5IGNvZGUg
aGVyZSwgd2hpY2ggZXhwZWN0cyB0aGF0IG1faml0RGF0YSBpcyBub3QgbnVsbC4KICAgICAgICAg
ICAgIExMSU5UX1JFVFVSTl9UV08oTExJbnQ6OmZ1enplclJldHVybkVhcmx5RnJvbUxvb3BIaW50
RW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBjYWxsRnJhbWUtPnRvcE9m
RnJhbWUoKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0
LmFzbQkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTIsMTAgKzEw
MTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3Jv
IHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBs
bGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBk
YXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVj
dCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNb
dDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAgICAgZ2V0
KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBJbnQz
MlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUs
IG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwgc3JjRHN0IGluIHQy
CiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAgICAgICBzdG9yZWkgdDIs
IFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFy
aXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3Ry
dWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAg
LnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRh
dGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAg
ICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJp
dGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0YSh0NSwgdDApCiAg
ICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0
MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90SW50CiAg
ICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDIKLSAgICB1
cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQ
cm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAgICByZXR1cm4gKElu
dDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEsIExvd2VzdFRhZywg
Lm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1cGRhdGVBcml0aFBy
b2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9w
TmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1cm4odDEsIHQyKQog
CiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkKIAogbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRp
b25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
JW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBt
ZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkKLSAgICAg
ICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxl
ICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAg
IG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAgICAgICAgZ2V0KG1f
bGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUo
b3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwg
dDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAub3AxTm90SW50CiAgICAg
ICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAgICBhcml0aFByb2ZpbGUo
QXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bj
b2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZ2V0KG1fZHN0
LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0MSwgdDAsIC5zbG93
LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwxMiBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJpYSB0MiwgTG93ZXN0
VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5vdEludE9wMkRvdWJs
ZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmls
ZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAgICAgICBj
aTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50
T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAgICBhcml0aFByb2Zp
bGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFBy
b2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0NCkKICAg
ICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAgICAgICAgIGZpaTJk
IHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0
b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5
IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90LgogICAgICAgICBn
ZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cKLSAgICAgICAg
YXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5
QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDQp
CiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKICAgICAg
ICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDI4
MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEzIEBAIG1hY3JvIGNoZWNrU3dp
dGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMsIGExCiAgICAgICAgICAgICBj
Q2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRweiByMCwgLnJlY292ZXIKLQog
ICAgICAgICAgICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAgIyBCYXNlbGluZSB1c2VzIExM
SW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQgcG9vbC4KKyAgICAgICAgICAg
IGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjpt
X2ppdERhdGFbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjpKSVREYXRhOjpt
X2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAgIGlmIEFSTTY0RQogICAgICAg
ICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25m
aWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50cnkpICogUHRyU2l6ZSwgYTIK
ICAgICAgICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgSlNFbnRy
eVB0clRhZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3Ry
aWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBp
bnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUl
LCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0
dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAg
IG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5h
cnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1f
c3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQogICAgICAgICBtZXRh
ZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1l
LCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDEsIC5zbG93KQog
ICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEgdDEsIFtjZnIsIHQwLCA4
XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1
cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDIs
IHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTExMzQsMTEgKzExMzUs
NiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLQotICAgIG1hY3Jv
IHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1l
dGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFdCi0g
ICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0xMTQ2LDEyICsxMTQy
LDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwKICAgICBidGl6
IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MwogICAgIG9ycSBudW1i
ZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1
cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIp
CiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0cXogdDMsIG51bWJlclRh
ZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAwLCB0MwotICAgIHVw
ZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0
aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEsIHQyKQogICAgIHJldHVy
bih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNjAsNiBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAotICAgICAgICBt
YWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1
XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQogICAgICAgICBnZXQobV9s
aHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkKQEAg
LTExNzcsNyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwg
b3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0
b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50
SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0
aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLm9wMU5v
dEludDoKQEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShv
cGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93CiAgICAgICAg
IGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKLSAgICAgICAgcHJvZmls
ZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQyKQogICAg
ICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkludDoKLSAgICAgICAg
cHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQyKQogICAg
ICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9k
c3QsIHQyKQpAQCAtMTIwNCw5ICsxMTk2LDkgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShv
cGNvZGVOYW1lLCBvcAogCiAgICAgLm9wMk5vdEludDoKICAgICAgICAgIyBGaXJzdCBvcGVyYW5k
IGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIGlzIGRlZmluaXRlbHkgbm90LgotICAg
ICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93Ci0g
ICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0
MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAg
ICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShy
ZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE0MjAsNyArMTQyMCw4IEBAIGVuZAog
CiBtYWNybyBjaGVja1N3aXRjaFRvSklUKGluY3JlbWVudCwgYWN0aW9uKQogICAgIGxvYWRwIENv
ZGVCbG9ja1tjZnJdLCB0MAotICAgIGJhZGRpcyBpbmNyZW1lbnQsIENvZGVCbG9jazo6bV9sbGlu
dEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBd
LCAuY29udGludWUKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0
MF0sIHQwCisgICAgYmFkZGlzIGluY3JlbWVudCwgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpt
X2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICBhY3Rpb24oKQogICAgIC5jb250aW51ZToKIGVu
ZApAQCAtMTUwMyw3ICsxNTA0LDggQEAgbWFjcm8gcHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBj
b2RlQmxvYwogICAgIGNvZGVCbG9ja0dldHRlcih0MSkKICAgICBjb2RlQmxvY2tTZXR0ZXIodDEp
CiAgICAgaWYgbm90IChDX0xPT1Agb3IgQ19MT09QX1dJTikKLSAgICAgICAgYmFkZGlzIDUsIENv
ZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVy
OjptX2NvdW50ZXJbdDFdLCAuY29udGludWUKKyAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2xs
aW50RXhlY3V0ZUNvdW50ZXJbdDFdLCB0MAorICAgICAgICBiYWRkaXMgNSwgQmFzZWxpbmVFeGVj
dXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICAgICAgaWYgSlNWQUxV
RTY0CiAgICAgICAgICAgICBtb3ZlIGNmciwgYTAKICAgICAgICAgICAgIG1vdmUgUEMsIGExCkBA
IC0xNjE3LDE0ICsxNjE5LDE0IEBAIG1hY3JvIGZ1bmN0aW9uSW5pdGlhbGl6YXRpb24ocHJvZmls
ZUFyZ1MKICAgICAjIG9wdGltYWwgd2F5IGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBtb3Jl
IHRoYW4gZml2ZSByZWdpc3RlcnMgYXZhaWxhYmxlCiAgICAgIyBmb3IgYXJiaXRyYXJ5IHVzZSBp
biB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgbG9hZGkgQ29kZUJsb2NrOjptX251bVBhcmFtZXRlcnNb
dDFdLCB0MAotICAgIGFkZHAgLXByb2ZpbGVBcmdTa2lwLCB0MCAjIFVzZSBhZGRpIGJlY2F1c2Ug
dGhhdCdzIHdoYXQgaGFzIHRoZSBwZWVwaG9sZQorICAgIGFkZHAgLXByb2ZpbGVBcmdTa2lwLCB0
MAogICAgIGFzc2VydChtYWNybyAob2spIGJwZ3RlcSB0MCwgMCwgb2sgZW5kKQogICAgIGJ0cHog
dDAsIC5hcmd1bWVudFByb2ZpbGVEb25lCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2FyZ3VtZW50
VmFsdWVQcm9maWxlcyArIEZpeGVkVmVjdG9yOjptX3N0b3JhZ2UgKyBSZWZDb3VudGVkQXJyYXk6
Om1fZGF0YVt0MV0sIHQzCiAgICAgYnRweiB0MywgLmFyZ3VtZW50UHJvZmlsZURvbmUgIyBXaGVu
IHdlIGNhbid0IEpJVCwgd2UgZG9uJ3QgYWxsb2NhdGUgYW55IGFyZ3VtZW50IHZhbHVlIHByb2Zp
bGVzLgogICAgIG11bHAgc2l6ZW9mIFZhbHVlUHJvZmlsZSwgdDAsIHQyICMgQWFhYWFoaGhoISBO
ZWVkIHN0cmVuZ3RoIHJlZHVjdGlvbiEKICAgICBsc2hpZnRwIDMsIHQwICMgb2Zmc2V0IG9mIGxh
c3QgSlNWYWx1ZSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLgotICAgIGFkZHAgdDIsIHQzICMgcG9p
bnRlciB0byBlbmQgb2YgVmFsdWVQcm9maWxlIGFycmF5IGluIENvZGVCbG9jazo6bV9hcmd1bWVu
dFZhbHVlUHJvZmlsZXMuCisgICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1
ZVByb2ZpbGUgYXJyYXkgaW4gdGhlIHZhbHVlIHByb2ZpbGUgYXJyYXkuCiAuYXJndW1lbnRQcm9m
aWxlTG9vcDoKICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgbG9hZHEgVGhpc0FyZ3VtZW50T2Zm
c2V0IC0gOCArIHByb2ZpbGVBcmdTa2lwICogOFtjZnIsIHQwXSwgdDIKQEAgLTI1NjMsNiArMjU2
NSwxNyBAQCBtYWNybyBub3RTdXBwb3J0ZWQoKQogICAgIGVuZAogZW5kCiAKKworbWFjcm8gdXBk
YXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkK
KyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFk
YXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBd
CitlbmQKKworbWFjcm8gdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlw
ZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgQmluYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVk
IHRoZSBYODZfNjRfV0lOIGNvbmRpdGlvbiBoZXJlLCBzaW5jZSBXRUJBU1NFTUJMWSBzaG91bGQg
YWxyZWFkeSBiZSBmYWxzZSBvbiBXaW5kb3dzCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjAzNzE2CiBpZiBXRUJBU1NFTUJMWSBhbmQgbm90IFg4Nl82NF9XSU4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJ
ZGVudGlmaWVyLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgs
MTAgQEAgcHVibGljOgogICAgIENhY2hlYWJsZUlkZW50aWZpZXIoKSA9IGRlZmF1bHQ7CiAKICAg
ICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUNlbGwoSlNDZWxs
KiBpZGVudGlmaWVyKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayosIGNvbnN0IElkZW50
aWZpZXImKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayosIFVuaXF1ZWRTdHJpbmdJbXBs
Kik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlu
bGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhDb2RlQmxvY2tUeXBlKiwgY29uc3QgSWRlbnRpZmllciYpOworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRp
ZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSos
IFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlm
aWVyIGNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAg
ICBzdGF0aWMgY29uc3RleHByIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbVJhd0JpdHMo
dWludHB0cl90IHJhd0JpdHMpIHsgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIocmF3Qml0cyk7
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRp
ZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlu
bGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSWRl
bnRpZmllciYgaSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENh
Y2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSWRlbnRp
ZmllciYgaSkKIHsKICAgICByZXR1cm4gY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKGNvZGVCbG9jaywgaS5pbXBsKCkpOwogfQogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmll
ciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhD
b2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAg
QVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGNvZGVCbG9jay0+aGFzSWRlbnRpZmllcih1aWQpKTsK
ICAgICByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcih1aWQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkocmV2aXNpb24gMjgzMDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
Q2FjaGVkVHlwZXMuaCIKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUg
IkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ2FjaGVFcnJvci5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgpAQCAtMTkxOCw2ICsxOTE5LDggQEAgcHVi
bGljOgogCiAgICAgdW5zaWduZWQgbnVtVmFsdWVQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1f
bnVtVmFsdWVQcm9maWxlczsgfQogICAgIHVuc2lnbmVkIG51bUFycmF5UHJvZmlsZXMoKSBjb25z
dCB7IHJldHVybiBtX251bUFycmF5UHJvZmlsZXM7IH0KKyAgICB1bnNpZ25lZCBudW1CaW5hcnlB
cml0aFByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1CaW5hcnlBcml0aFByb2ZpbGVzOyB9
CisgICAgdW5zaWduZWQgbnVtVW5hcnlBcml0aFByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1VbmFyeUFyaXRoUHJvZmlsZXM7IH0KIAogcHJpdmF0ZToKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV90aGlzUmVnaXN0ZXI7CkBAIC0xOTUyLDYgKzE5NTUsOCBAQCBwcml2YXRlOgogCiAgICAgdW5z
aWduZWQgbV9udW1WYWx1ZVByb2ZpbGVzOwogICAgIHVuc2lnbmVkIG1fbnVtQXJyYXlQcm9maWxl
czsKKyAgICB1bnNpZ25lZCBtX251bUJpbmFyeUFyaXRoUHJvZmlsZXM7CisgICAgdW5zaWduZWQg
bV9udW1VbmFyeUFyaXRoUHJvZmlsZXM7CiAKICAgICBDYWNoZWRNZXRhZGF0YVRhYmxlIG1fbWV0
YWRhdGE7CiAKQEAgLTIxNjAsNiArMjE2NSw4IEBAIEFMV0FZU19JTkxJTkUgVW5saW5rZWRDb2Rl
QmxvY2s6OlVubGlua2UKICAgICAsIG1fcmFyZURhdGEoY2FjaGVkQ29kZUJsb2NrLnJhcmVEYXRh
KGRlY29kZXIpKQogICAgICwgbV92YWx1ZVByb2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1WYWx1
ZVByb2ZpbGVzKCkpCiAgICAgLCBtX2FycmF5UHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bUFy
cmF5UHJvZmlsZXMoKSkKKyAgICAsIG1fYmluYXJ5QXJpdGhQcm9maWxlcyhjYWNoZWRDb2RlQmxv
Y2subnVtQmluYXJ5QXJpdGhQcm9maWxlcygpKQorICAgICwgbV91bmFyeUFyaXRoUHJvZmlsZXMo
Y2FjaGVkQ29kZUJsb2NrLm51bVVuYXJ5QXJpdGhQcm9maWxlcygpKQogewogfQogCkBAIC0yMzM3
LDYgKzIzNDQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29kZUJsb2NrPENvZGVCCiAg
ICAgbV9oYXNDaGVja3BvaW50cyA9IGNvZGVCbG9jay5tX2hhc0NoZWNrcG9pbnRzOwogICAgIG1f
bnVtVmFsdWVQcm9maWxlcyA9IGNvZGVCbG9jay5tX3ZhbHVlUHJvZmlsZXMuc2l6ZSgpOwogICAg
IG1fbnVtQXJyYXlQcm9maWxlcyA9IGNvZGVCbG9jay5tX2FycmF5UHJvZmlsZXMuc2l6ZSgpOwor
ICAgIG1fbnVtQmluYXJ5QXJpdGhQcm9maWxlcyA9IGNvZGVCbG9jay5tX2JpbmFyeUFyaXRoUHJv
ZmlsZXMuc2l6ZSgpOworICAgIG1fbnVtVW5hcnlBcml0aFByb2ZpbGVzID0gY29kZUJsb2NrLm1f
dW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKIAogICAgIG1fbWV0YWRhdGEuZW5jb2RlKGVuY29k
ZXIsIGNvZGVCbG9jay5tX21ldGFkYXRhLmdldCgpKTsKICAgICBtX3JhcmVEYXRhLmVuY29kZShl
bmNvZGVyLCBjb2RlQmxvY2subV9yYXJlRGF0YS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4
MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9T
TE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVwZGF0
ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFkYXRh
LCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5QXJpdGhQcm9m
aWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5hcnlBcml0aFBy
b2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5v
YnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1
bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlm
Zl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25F
eGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9m
ZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFJhcmVE
YXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9m
Q29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1
dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZf
dCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsgfQogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDM0LDggKzQzNCw2IEBAIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygK
ICAgICBPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSA9IGZhbHNlOwogI2VuZGlmCiAKLSAgICBp
ZiAoIWlzQVJNNjQoKSkKLSAgICAgICAgT3B0aW9uczo6dXNlRGF0YUlDKCkgPSBmYWxzZTsKICAg
ICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQogICAgICAgICBPcHRpb25zOjp1c2VEYXRhSUNJ
bk9wdGltaXppbmdKSVQoKSA9IGZhbHNlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3
ICszMDksNiBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoSW50
MzIsIGV2YWxUaHJlc2hvbGRNdWx0aXBsaWVyLCAxMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dihVbnNpZ25lZCwgbWF4aW11bUV2YWxDYWNoZWFibGVTb3VyY2VMZW5ndGgsIDI1NiwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgXAotICAgIHYoQm9vbCwgcmFuZG9taXplRXhlY3V0aW9uQ291bnRz
QmV0d2VlbkNoZWNrcG9pbnRzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJbnQz
MiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvckJhc2VsaW5lLCAx
MDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291
bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yVXBwZXJUaWVycywgNTAwMDAsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIFwKQEAgLTUzMiw2ICs1MzEsNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFz
dE1lbW9yeSgpOwogICAgIHYoQm9vbCwgdXNlRGF0YUlDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQsIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ1NoYXJpbmcsIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIHVzZUJhc2VsaW5lSklUQ29kZVNoYXJpbmcsIHRydWUs
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICAvKiBGZWF0dXJlIEZsYWdzICovXAogICAg
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4
ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDcgKzM5
Niw5IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGkKICAgICBpZiAo
T3B0aW9uczo6dmFsaWRhdGVCeXRlY29kZSgpKQogICAgICAgICBjb2RlQmxvY2stPnZhbGlkYXRl
KCk7CiAKLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKKyAgICBpZiAoUmVmUHRyPEJhc2Vs
aW5lSklUQ29kZT4gYmFzZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkt
Pm1fdW5saW5rZWRCYXNlbGluZUNvZGUpCisgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5s
aW5rZWRCYXNlbGluZUNvZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisgICAgZWxz
ZSBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKICAgICAgICAgc2V0dXBMTEludChjb2RlQmxvY2sp
OwogICAgIGVsc2UKICAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5o
CShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRUaWVyVXBDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgcHVibGlj
OgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCgpCiAgICAgewogICAgICAgICBpZiAoT3B0
aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hv
bGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRy
KTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFP
cHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXROZXdU
aHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBu
dWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRG
b3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0KIAogICAgIGJvb2wgY2hlY2tJZk9w
dGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtNjUsOSArNjUsOSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBvcHRpbWl6ZVNvb24oKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21M
TEludFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZVNvb24oKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hv
bGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJl
c2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAog
ICAgIHN0cnVjdCBPU1JFbnRyeURhdGEgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRpZXJVcENvdW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIFRpZXJV
cENvdW50OjpUaWVyVXBDb3VudCgpCiB7Ci0gICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRo
cmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7
CiB9CiAKIFRpZXJVcENvdW50Ojp+VGllclVwQ291bnQoKSA9IGRlZmF1bHQ7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAkocmV2aXNpb24gMjgz
MDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVB
ZnRlcldhcm1VcCh1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1p
emluZyBhZnRlciB3YXJtLXVwLiIpOwotICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6
dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAg
c2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJt
VXAoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVh
Y2hlZCgpCkBAIC05MCwxNCArOTAsMTQgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVOZXh0
SW52b2NhdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxv
Z0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1p
emluZyBuZXh0IGludm9jYXRpb24uIik7Ci0gICAgICAgIHNldE5ld1RocmVzaG9sZCgwLCBudWxs
cHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKDApOwogICAgIH0KIAogICAgIHZvaWQgb3B0
aW1pemVTb29uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9n
TG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6
aW5nIHNvb24uIik7CiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIGFkanVzdG1lbnQgb25jZSB3ZSBn
ZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3YXNtIGZ1bmN0aW9ucy4KLSAgICAgICAgc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpLCBudWxscHRy
KTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGlt
aXplU29vbigpKTsKICAgICB9CiAKICAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJh
c2VkT25Db21waWxhdGlvblJlc3VsdCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBDb21waWxhdGlv
blJlc3VsdCByZXN1bHQpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL1dURi93
dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDIwIEBAIHB1YmxpYzoKICAgICAg
ICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorICAgIEJhZyYgb3BlcmF0b3I9KEJhZzxULCBVPiYmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgaWYgKHVud3JhcHBlZEhlYWQoKSA9PSBvdGhlci51bndyYXBwZWRIZWFkKCkpCisgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAgQmFnIGRlc3Ryb3k7CisgICAgICAgIGRlc3Ry
b3kubV9oZWFkID0gdW53cmFwcGVkSGVhZCgpOworICAgICAgICBtX2hlYWQgPSBvdGhlci51bndy
YXBwZWRIZWFkKCk7CisgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CisKKyAgICAgICAg
cmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIH5CYWcoKQogICAgIHsKICAgICAgICAgY2xlYXIo
KTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1BhY2tlZC5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9QYWNr
ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4NiwxMCBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9Ci0gICAgVCYgb3Bl
cmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVSA9IFQ+CisgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfdm9pZF92PFU+
LCBVJj46OnR5cGUgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisKICAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFnZXQoKTsgfQogCiAgICAgLy8gVGhpcyBj
b252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0
IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgo=
</data>
<flag name="commit-queue"
          id="462770"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439182</attachid>
            <date>2021-09-24 12:16:27 -0700</date>
            <delta_ts>2021-09-24 12:58:00 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>614035</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4MzAxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUEKIAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNT
cG9vbGVycy5oCisgICAgaml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVy
cy5oCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVt
b3J5SGFuZGxlLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI4
MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjE5LDYgKzYxOSw3IEBAIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiBpbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCiAKIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCitqaXQv
QmFzZWxpbmVKSVRDb2RlLmNwcAogaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAKIGppdC9CaW5hcnlT
d2l0Y2guY3BwCiBqaXQvQ0NhbGxIZWxwZXJzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05
MDAsNiArOTAwLDcgQEAKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9
OwogCQk1MkNEMEY1RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVC
RDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
NTJDRDBGNjgyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8q
IHRlc3RkZmcuY3BwICovOyB9OworCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJFRUQ3OTQyNDkyQjg3
MDAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLzsgfTsKIAkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCAqLzsgfTsKIAkJNTMwQTY2QjkxRkEzRTc4QjAwMjZBNTQ1IC8qIFVuaWZp
ZWRTb3VyY2UzLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwQTY2QjExRkEzRTc3QTAwMjZBNTQ1IC8qIFVuaWZpZWRTb3VyY2UzLW1tLm1tICov
OyB9OwpAQCAtMTIyMCw3ICsxMjIxLDcgQEAKIAkJNzk4NzJDNDgyMjFCQkFGMzAwOEM2OTY5IC8q
IEpTQmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTg3MkM0NzIyMUJCQUVEMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNo
TWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzlBMjI4MzYxRDM1RDcxRjAwRDhF
MDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICov
OyB9OworCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQkIxN0UxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlBQkIxN0MxRTVDQ0I1NzAwNDVCOUE2IC8qIEFpckRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUMzMEZGMUY5OTUzNjQw
MDQ4NEZENyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUMzMEZFMUY5OTUzNjMwMDQ4NEZE
NyAvKiBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaCAqLzsgfTsKIAkJNzlBRjBCRTQx
RDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1RkE1
IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zNjc0LDYgKzM2NzUsOCBAQAogCQk1MkNEMEY2NDIyNDJG
NTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJNTJDRDBGNjcyMjQyRjcxQzAwNEExOEE1IC8qIHRlc3RkZmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdGVzdGRmZy5jcHA7IHBhdGggPSBkZmcvdGVzdGRm
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDEzMDhGMjIxQ0UwM0EwMDlD
ODM2QyAvKiBmb28uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBm
b28uanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA2MjZFMDM5QjMwMDU0
RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZWxpbmVKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZWxpbmVKSVRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTIyNDkyQjg2ODAw
OEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0
aW9uQWxsb3dsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFRUQ3OTMy
NDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uQWxsb3dsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRjZDMzVC
MUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc2LDYgKzYyNzksOCBAQAogCQkJCTZCNzY3RTdBMjY3
OTFGMjcwMDE3RjhEMSAvKiBBc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oICovLAogCQkJCTcyMzk5
OEY2MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uY3BwICovLAogCQkJCTcyMzk5
OEY1MjY1REJDREIwMDU3ODY3RiAvKiBCYXNlbGluZUpJVFBsYW4uaCAqLywKKwkJCQk1MkREMDAw
NzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLywKKwkJCQk1MkREMDAw
NjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8sCiAJCQkJMEY2NEIyNkYx
QTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAogCQkJCTY1QjgzOTJEMUJBQ0E5RDMw
MDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi8sCkBAIC05NzMwLDYgKzk3MzUsNyBAQAog
CQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGlu
ZUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAv
KiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzg2RkQ3RTI2
RTg2N0I4MDBFNEMyOEIgLyogVGVtcG9yYWxQbGFpblRpbWUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTUgKzIwMiwxNSBAQCBSZWZQdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjCiAgICAgc3dpdGNoIChzdHViSW5mby5jYWNoZVR5
cGUoKSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJu
IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIs
IHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpQdXRCeUlkUmVwbGFjZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zm
c2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmll
ciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICBy
ZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0
dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0LCBzdHViSW5mby5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgSW5IaXQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6QXJy
YXlMZW5ndGg6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7CkBAIC0xOTg1LDE0ICsxOTg1LDEwIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgLy8gU3R1ZmYgZm9yIGN1c3RvbSBnZXR0ZXJzL3Nl
dHRlcnMuCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsOwogCisKICAg
ICAgICAgLy8gVGhpcyBhbHNvIGRvZXMgdGhlIG5lY2Vzc2FyeSBjYWxjdWxhdGlvbnMgb2Ygd2hl
dGhlciBvciBub3Qgd2UncmUgYW4KICAgICAgICAgLy8gZXhjZXB0aW9uIGhhbmRsaW5nIGNhbGwg
c2l0ZS4KLSAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlOwotI2lm
IENQVShBUk02NCkKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAg
ICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0j
ZW5kaWYKLSAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3Rh
dGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChleHRyYVJlZ2lz
dGVyc1RvUHJlc2VydmUpOworICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3Rh
dGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
KCk7CiAKICAgICAgICAgYXV0byByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwg
PSBbJl0oQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlJiBzcGlsbFN0YXRlLCBib29s
IGNhbGxIYXNSZXR1cm5WYWx1ZSkgewogICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZG9udFJlc3Rv
cmU7CkBAIC0yMDc5LDggKzIwNzUsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChB
Y2Nlc3NHZW5lCiAgICAgICAgICAgICBBU1NFUlQoIShudW1iZXJPZlJlZ3NGb3JDYWxsICUgc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkpOwogICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZC
eXRlc0ZvckNhbGwgPSBudW1iZXJPZlJlZ3NGb3JDYWxsICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKTsKIAotICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51
bWJlck9mQnl0ZXNGb3JDYWxsID0KLSAgICAgICAgICAgIFdURjo6cm91bmRVcFRvTXVsdGlwbGVP
ZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsK
IAogICAgICAgICAgICAgaml0LnN1YlB0cigKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwpLApAQCAtMjEzOCw2ICsy
MTMzLDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogCiAgICAg
ICAgICAgICBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0ID0gKGNvZGVCbG9jay0+c3RhY2tQb2ludGVy
T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSAtIHN0YXRlLnByZXNlcnZlZFJldXNlZFJlZ2lz
dGVyU3RhdGUubnVtYmVyT2ZCeXRlc1ByZXNlcnZlZCAtIHNwaWxsU3RhdGUubnVtYmVyT2ZTdGFj
a0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uOwogICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXQpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKICAgICAgICAgICAgIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlID0gaXNHZXR0ZXIoKTsKICAg
ICAgICAgICAgIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChzcGlsbFN0YXRl
LCBjYWxsSGFzUmV0dXJuVmFsdWUpOwogCkBAIC0yMjY0LDEyICsyMjYwLDcgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogCiAgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNQcm94eTo6dGFyZ2V0T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKIAotICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNU
b1ByZXNlcnZlOwotI2lmIENQVShBUk02NCkKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPnVz
ZURhdGFJQygpKQotICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQo
QVJNNjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgotICAgICAgICAgICAgYXV0byBzcGlsbFN0YXRl
ID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0
aW9ucyhleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUpOworICAgICAgICAgICAgYXV0byBzcGlsbFN0
YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhj
ZXB0aW9ucygpOwogCiAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
JnZtKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24o
dm0pOwpAQCAtMjM2NCwxMCArMjM1NSw2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBs
KEFjY2Vzc0dlbmUKICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1Rv
UHJlc2VydmU7CiAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChi
YXNlR1BSKTsKICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KHZh
bHVlUmVncyk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAgICAgIGlmIChjb2RlQmxvY2st
PnVzZURhdGFJQygpKQotICAgICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2Vy
dmUuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZl
TGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIJKHJldmlzaW9u
IDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3Qu
cmIJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBAQCBvcF9ncm91cCA6UHJvZmlsZWRC
aW5hcnlPcCwKICAgICAgICAgb3BlcmFuZFR5cGVzOiBPcGVyYW5kVHlwZXMsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZQor
ICAgICAgICBhcml0aFByb2ZpbGU6IEJpbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcF9n
cm91cCA6VmFsdWVQcm9maWxlZEJpbmFyeU9wLApAQCAtMzUzLDcgKzM1Myw3IEBAIG9wX2dyb3Vw
IDpVbmFyeUluUGxhY2VQcm9maWxlZE9wLAogICAgICAgICBzcmNEc3Q6IFZpcnR1YWxSZWdpc3Rl
ciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlB
cml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAg
ICAgfQogCiBvcCA6dG9fb2JqZWN0LApAQCAtMzg2LDcgKzM4Niw3IEBAIG9wIDpuZWdhdGUsCiAg
ICAgICAgIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewot
ICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLAorICAgICAgICBhcml0aFBy
b2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDpub3QsCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVP
cGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTczLDYgKzczLDI4IEBAIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9y
SW1wbChCeXRlY28KICAgICAgICAgcmV0dXJuICZtZXRhZGF0YS5tX3Byb2ZpbGU7CiB9CiAKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK3VpbnRwdHJfdCB2YWx1ZVByb2ZpbGVPZmZzZXRG
b3IodW5zaWduZWQgY2hlY2twb2ludEluZGV4KQoreworICAgIFVOVVNFRF9QQVJBTShjaGVja3Bv
aW50SW5kZXgpOworICAgIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0
ZXJhdG9yX29wZW4pIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAg
ICAgY2FzZSBPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZJdGVyYXRvclByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9y
T3Blbjo6Z2V0TmV4dDogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UHJv
ZmlsZSgpOworICAgICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2RlSUQg
PT0gb3BfaXRlcmF0b3JfbmV4dCkgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkg
eworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0Ojpjb21wdXRlTmV4dDogcmV0dXJuIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZOZXh0UmVzdWx0UHJvZmlsZSgpOworICAgICAgICBjYXNl
IE9wSXRlcmF0b3JOZXh0OjpnZXREb25lOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkRvbmVQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVl
OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlZhbHVlUHJvZmlsZSgpOworICAg
ICAgICBkZWZhdWx0OiBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIAorICAgICAgICByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlBy
b2ZpbGUoKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGVNZXRhZGF0YT4KIGJvb2wg
aGFzVmFsdWVQcm9maWxlRm9yKEJ5dGVjb2RlTWV0YWRhdGEmIG1ldGFkYXRhLCB1bnNpZ25lZCBj
aGVja3BvaW50SW5kZXgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
NCwxMSArMTE0LDYgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhWTSYgdm0pCiAgICAgUkVM
RUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOwogfQogCi1Db2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQotewotICAgIHJldHVybiBD
b2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4obV9mYXN0UGF0aFN0YXJ0
KTsKLX0KLQogQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZv
OjpzbG93UGF0aFN0YXJ0KCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNEYXRhSUMoKSk7CkBA
IC0yMjUsNiArMjIwLDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRNYXhBcmd1bWVudENvdW50
SW4KICAgICBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gdmFsdWU7CiB9CiAKK0Nv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhT
dGFydCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNEaXJlY3QoKSAmJiBpc1RhaWxDYWxsKCkp
OworICAgIHJldHVybiBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4o
dS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0KTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OnZpc2l0
V2VhayhWTSYgdm0pCiB7CiAgICAgYXV0byBoYW5kbGVTcGVjaWZpY0NhbGxlZSA9IFsmXSAoSlNG
dW5jdGlvbiogY2FsbGVlKSB7CkBAIC0yOTgsMjMgKzI5OSwxMSBAQCB2b2lkIENhbGxMaW5rSW5m
bzo6c2V0RnJhbWVTaHVmZmxlRGF0YShjCiAgICAgbV9mcmFtZVNodWZmbGVEYXRhLT5zaHJpbmtU
b0ZpdCgpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0
RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQyB1c2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+
IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKLSAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOwot
ICAgIGlmIChpc0RhdGFJQygpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5m
b0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOwotICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7Ci0gICAgICAgIHUu
ZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOwotICAgIH0KLQotICAg
IGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwot
ICAgIH0pOwotCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKIAotICAgIGlm
IChpc0RhdGFJQygpKSB7CisgICAgaWYgKHVzZURhdGFJQyA9PSBVc2VEYXRhSUM6Olllcykgewog
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGppdC5zY3JhdGNoUmVnaXN0ZXIoKTsKICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zm
c2V0T2ZDYWxsZWUoKSksIHNjcmF0Y2hHUFIpOyAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGdvUG9seW1vcnBoaWM7CkBAIC0zMjMsNyArMzEyLDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICAgICAgZ29Qb2x5bW9ycGhpYyA9IGppdC5icmFu
Y2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIocG9seW1vcnBoaWNDYWxsZWVNYXNrKSk7CiAgICAgICAgICAgICBzbG93
UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNo
R1BSLCBjYWxsZWVHUFIpKTsKICAgICAgICAgfQotICAgICAgICBpZiAoaXNUYWlsQ2FsbCgpKSB7
CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENh
bGwoKTsKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMubGluaygmaml0KTsgLy8gUG9seW1vcnBo
aWMgc3R1YiBoYW5kbGVzIHRhaWwgY2FsbCBzdGFjayBwcmVwLgogICAgICAgICAgICAgaml0LmZh
ckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxMaW5rSW5mb0dQUiwgb2Zmc2V0T2ZNb25v
bW9ycGhpY0NhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CkBAIC0zMzYsMTQgKzMy
NSwxNiBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIGNhbGxlZUdQUiwgY2FsbGVlQ2hlY2ssIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihudWxscHRyKSkpOwogCiAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOwotICAgICAg
ICBpZiAoaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAg
ICAgICBwcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhclRh
aWxDYWxsKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyQ2Fs
bCgpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7CiAgICAgICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
IHUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8
SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7Ci0gICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxlZUxv
Y2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNo
ZWNrKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMubV9jYWxsTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsK
KyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+dS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxsZWVDaGVjayk7CiAgICAg
ICAgIH0pOwogICAgIH0KIApAQCAtMzUzLDEzICszNDQsMzQgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBDYWxsTGlua0lu
Zm86OmVtaXRGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQykKIHsKICAgICBSRUxFQVNF
X0FTU0VSVCghaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChqaXQs
IGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIG51bGxwdHIpOworICAgIHNl
dFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7CisKKyAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVn
KTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBj
YWxsTGlua0luZm9HUFIpOworICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNh
bGxMaW5rSW5mb0dQUjsKKyAgICB9CisKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlz
LCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIGlzVGFpbENhbGwo
KSwgbnVsbHB0cik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BS
LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQorTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNUYWlsQ2FsbCgpKTsKLSAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbChqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCB1c2VEYXRhSUMsIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlD
OjpObyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIs
IEludmFsaWRHUFJSZWcsIFVzZURhdGFJQzo6Tm8sIGlzVGFpbENhbGwoKSwgV1RGTW92ZShwcmVw
YXJlRm9yVGFpbENhbGwpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVl
R1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxM
aW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1w
bChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6Olll
cywgZmFsc2UsIG51bGxwdHIpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExp
bmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0lu
Zm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVs
bHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIHRy
dWUsIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7CiB9CiAKIHZvaWQgQ2FsbExpbmtJbmZv
OjplbWl0U2xvd1BhdGgoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCkKQEAgLTM2OSwxNyArMzgx
LDMyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0U2xvd1BhdGgoVk0mIHZtLCAKICAgICBqaXQu
Y2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1Bh
dGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwogfQogCit2b2lkIENhbGxMaW5r
SW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBj
YWxsTGlua0luZm9HUFIpCit7CisgICAgaml0Lm1vdmUoY2FsbExpbmtJbmZvR1BSLCBHUFJJbmZv
OjpyZWdUMik7CisgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsK
K30KKwordm9pZCBDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMoVk0mIHZtLCBVbmxpbmtl
ZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1
bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBzZXRVcENhbGwodW5saW5r
ZWRDYWxsTGlua0luZm8uY2FsbFR5cGUsIGNhbGxlZUdQUik7CisgICAgbV9kb25lTG9jYXRpb24g
PSB1bmxpbmtlZENhbGxMaW5rSW5mby5kb25lTG9jYXRpb247CisgICAgaWYgKHVubGlua2VkQ2Fs
bExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpIHsKKyAgICAgICAgLy8gRklYTUU6IEl0J2QgYmUg
bmljZSBpZiB0aGlzIHdlcmUgYSByZWZjb3VudGVkIGRhdGEgc3RydWN0dXJlLgorICAgICAgICBt
X2ZyYW1lU2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigqdW5s
aW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSk7CisgICAgfQorICAgIHNldFVzZXNE
YXRhSUNzKFVzZURhdGFJQzo6WWVzKTsKKyAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9
IGNhbGxMaW5rSW5mb0dQUjsKKyAgICBzZXRTbG93UGF0aENhbGxEZXN0aW5hdGlvbih2bS5nZXRD
VElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnRlbXBsYXRlIHJldGFnZ2VkQ29kZTxKU0Vu
dHJ5UHRyVGFnPigpKTsKK30KKwogdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0
aChDQ2FsbEhlbHBlcnMmIGppdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNUYWlsQ2FsbCgp
KTsKIAogICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOwogCi0gICAgYXV0byBmYXN0
UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0K
ICAgICBhdXRvIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIHUuY29kZUlDLm1fY2FsbExvY2F0
aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2Fs
bCk7CkBAIC0zOTcsNyArNDI0LDcgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXREaXJlY3RUYWls
Q2FsbEZhcwogCiAgICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaml0
LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zh
c3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFz
dFBhdGhTdGFydCk7CisgICAgICAgIHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKICAgICB9KTsK
IAogICAgIC8vIC0gSWYgd2UncmUgbm90IHlldCBsaW5rZWQsIHRoaXMgaXMgYSBqdW1wIHRvIHRo
ZSBzbG93IHBhdGguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDExIEBA
IGNsYXNzIEpTRnVuY3Rpb247CiBlbnVtIE9wY29kZUlEIDogdW5zaWduZWQ7CiBzdHJ1Y3QgQ2Fs
bEZyYW1lU2h1ZmZsZURhdGE7CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbzsKKwogY2xh
c3MgQ2FsbExpbmtJbmZvIDogcHVibGljIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0lu
Zm8+IHsKIHB1YmxpYzoKLSAgICBlbnVtIENhbGxUeXBlIHsKKyAgICBlbnVtIENhbGxUeXBlIDog
dWludDhfdCB7CiAgICAgICAgIE5vbmUsCiAgICAgICAgIENhbGwsCiAgICAgICAgIENhbGxWYXJh
cmdzLApAQCAtMTY1LDYgKzE2Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxsZWVHUFIgPSBj
YWxsZWVHUFI7CiAgICAgfQogCisgICAgdm9pZCBpbml0aWFsaXplRGF0YUlDKFZNJiwgVW5saW5r
ZWRDYWxsTGlua0luZm8mLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
KTsKKwogICAgIEdQUlJlZyBjYWxsZWVHUFIoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZUdQUjsg
fQogICAgIAogICAgIGVudW0gY2xhc3MgVXNlRGF0YUlDIDogdWludDhfdCB7CkBAIC0xNzMsMTMg
KzE3NywxNiBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVl
R1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiwg
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwg
VXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJl
Rm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIHB1YmxpYzoKKyAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxEYXRh
SUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJO
X1VOVVNFRF9SRVRVUk47CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0
aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKICAgICB2b2lkIGVtaXREaXJlY3RGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmKTsKICAgICB2b2lkIGVtaXREaXJlY3RUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpOwogICAgIHZvaWQgZW1p
dFNsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJik7CisgICAgc3RhdGljIHZvaWQgZW1pdERhdGFJ
Q1Nsb3dQYXRoKFZNJiwgQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CiAg
ICAgdm9pZCByZXZlcnRDYWxsVG9TdHViKCk7CiAKICAgICBib29sIGlzRGF0YUlDKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8VXNlRGF0YUlDPihtX3VzZURhdGFJQykgPT0gVXNlRGF0YUlD
OjpZZXM7IH0KQEAgLTIwMyw3ICsyMTAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWxsb3dTdHVi
cyA9IGZhbHNlOwogICAgIH0KIAotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IGZhc3RQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBzbG93UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gZG9uZUxvY2F0aW9uKCk7CiAKQEAgLTI0MywxMSArMjQ5LDYgQEAgcHVibGljOgogICAg
ICAgICBtX3Nsb3dTdHViID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBKSVRTdHViUm91dGluZSog
c2xvd1N0dWIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc2xvd1N0dWIuZ2V0KCk7Ci0gICAg
fQotCiAgICAgYm9vbCBzZWVuT25jZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9oYXNTZWVu
U2hvdWxkUmVwYXRjaDsKQEAgLTMwOCw5ICszMDksOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDYWxsVHlwZT4obV9jYWxsVHlwZSk7CiAgICAgfQogCi0gICAgdWludDMy
X3QqIGFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuICZtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOworICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxMaW5rSW5mbywgbV9tYXhBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyk7CiAgICAgfQogCiAgICAgdWludDMyX3QgbWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKQpAQCAtMzgxLDcgKzM4Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZh
dGU6Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0
YXJ0OworCisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhT
dGFydCgpOworCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9kb25l
TG9jYXRpb247CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IG1fc2xv
d1BhdGhDYWxsRGVzdGluYXRpb247CiAgICAgdW5pb24gVW5pb25UeXBlIHsKQEAgLTM5Nyw2ICs0
MDAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGw8SlNJbnRl
cm5hbFB0clRhZz4gbV9jYWxsTG9jYXRpb247CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25EYXRh
TGFiZWxQdHI8SlNJbnRlcm5hbFB0clRhZz4gbV9jYWxsZWVMb2NhdGlvbjsKICAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fc2xvd1BhdGhTdGFydDsKKyAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhT
dGFydDsKICAgICAgICAgfSBjb2RlSUM7CiAgICAgfSB1OwogCkBAIC00MjQsNiArNDI4LDEzIEBA
IGlubGluZSBDb2RlT3JpZ2luIGdldENhbGxMaW5rSW5mb0NvZGVPcmkKICAgICByZXR1cm4gY2Fs
bExpbmtJbmZvLmNvZGVPcmlnaW4oKTsKIH0KIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZv
IHsKKyAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXg7IC8vIEN1cnJlbnRseSwgb25seSB1
c2VkIGJ5IGJhc2VsaW5lLCBzbyB0aGlzIGNhbiB0cml2aWFsbHkgcHJvZHVjZSBhIENvZGVPcmln
aW4uCisgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBmcmFtZVNodWZmbGVEYXRhOworfTsKKwogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzksOCArMjc5LDYgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1
Y3R1cmUqIAogICAgICwgbV9kaWRGYWlsSklUQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2Rp
ZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZU
TChmYWxzZSkKLSAgICAsIG1faGFzTGlua2VkT1NSRXhpdChmYWxzZSkKLSAgICAsIG1faXNFbGln
aWJsZUZvckxMSW50RG93bmdyYWRlKGZhbHNlKQogICAgICwgbV9udW1DYWxsZWVMb2NhbHMob3Ro
ZXIubV9udW1DYWxsZWVMb2NhbHMpCiAgICAgLCBtX251bVZhcnMob3RoZXIubV9udW1WYXJzKQog
ICAgICwgbV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcChvdGhlci5tX251bWJlck9mQXJndW1lbnRz
VG9Ta2lwKQpAQCAtMzA4LDYgKzMwNiw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwg
U3RydWN0dXJlKiAKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXRO
dW1QYXJhbWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7CisKKyAgICBtX2xsaW50RXhlY3V0
ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKICAgICAK
ICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KQEAgLTMxOCw3ICszMTgs
NiBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDCiAgICAgZmluaXNo
Q3JlYXRpb25Db21tb24odm0pOwogCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGpp
dEFmdGVyV2FybVVwKCk7CiAKICAgICBpZiAob3RoZXIubV9yYXJlRGF0YSkgewogICAgICAgICBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC0zMzYsOCArMzM1LDYgQEAgQ29kZUJsb2Nr
OjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogICAgICwgbV9kaWRGYWlsSklUQ29tcGls
YXRpb24oZmFsc2UpCiAgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKICAgICAs
IG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKLSAgICAsIG1faGFzTGlua2VkT1NSRXhp
dChmYWxzZSkKLSAgICAsIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlKGZhbHNlKSAKICAg
ICAsIG1fbnVtQ2FsbGVlTG9jYWxzKHVubGlua2VkQ29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMo
KSkKICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpKQogICAgICwg
bV9oYXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKQEAgLTM1OSw3ICszNTYsOSBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCku
cHJvdmlkZXIoKSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpKTsKLSAgICAKKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3Vu
bGlua2VkQ29kZS0+bGxpbnRFeGVjdXRlQ291bnRlcigpOworCiAgICAgdm0uaGVhcC5jb2RlQmxv
Y2tTZXQoKS5hZGQodGhpcyk7CiB9CiAKQEAgLTM3MCw3ICszNjksOCBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcg
dW5saW5rZWQgYnl0ZWNvZGUgZ2VuZXJhdGlvbi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2Vk
IHRvIGdlbmVyYXRlIGNvbnRyb2wKIC8vIGZsb3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRo
ZSByZWFzb24gZm9yIHRoaXMgaXMgd2UgcmVseSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0
aGUgc2FtZSBmb3IKIC8vIGFsbCB0aGUgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9j
ay4gV2UgcmVseSBvbiB0aGlzIGZhY3QgYnkgY2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMK
LS8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4KKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9j
ay4gQWxzbywgQmFzZWxpbmUgSklUIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9j
a3Mgb2YgYW4gVW5saW5rZWRDb2RlQmxvY2ssCisvLyBzbyB0aGUgYnl0ZWNvZGUgbXVzdCByZW1h
aW4gdGhlIHNhbWUgYmV0d2VlbiBDb2RlQmxvY2tzIHNoYXJpbmcgYW4gVW5saW5rZWRDb2RlQmxv
Y2suCiBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9j
aywKICAgICBKU1Njb3BlKiBzY29wZSkKIHsKQEAgLTQ3MSw2ICs0NzEsMjEgQEAgYm9vbCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBicmVhazsgXAogICAgIH0K
IAorICAgIHVuc2lnbmVkIGJpbmFyeVByb2ZpbGVJbmRleCA9IDA7CisgICAgdW5zaWduZWQgdW5h
cnlQcm9maWxlSW5kZXggPSAwOworI2RlZmluZSBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJ
TEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFE
QVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtl
ZENvZGUtPmJpbmFyeUFyaXRoUHJvZmlsZShiaW5hcnlQcm9maWxlSW5kZXgrKyk7IFwKKyAgICAg
ICAgYnJlYWs7IFwKKyAgICB9CisjZGVmaW5lIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxF
KF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFU
QShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRD
b2RlLT51bmFyeUFyaXRoUHJvZmlsZSh1bmFyeVByb2ZpbGVJbmRleCsrKTsgXAorICAgICAgICBi
cmVhazsgXAorICAgIH0KKwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlv
blN0cmVhbSA9IGluc3RydWN0aW9ucygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1Y3Rp
b24gOiBpbnN0cnVjdGlvblN0cmVhbSkgewogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGlu
c3RydWN0aW9uLT5vcGNvZGVJRCgpOwpAQCAtNTMzLDE0ICs1NDgsMTQgQEAgYm9vbCBDb2RlQmxv
Y2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICBMSU5LKE9wQ3JlYXRlUHJvbWlz
ZSkKICAgICAgICAgTElOSyhPcENyZWF0ZUdlbmVyYXRvcikKIAotICAgICAgICBMSU5LKE9wQWRk
KQotICAgICAgICBMSU5LKE9wTXVsKQotICAgICAgICBMSU5LKE9wRGl2KQotICAgICAgICBMSU5L
KE9wU3ViKQotCi0gICAgICAgIExJTksoT3BOZWdhdGUpCi0gICAgICAgIExJTksoT3BJbmMpCi0g
ICAgICAgIExJTksoT3BEZWMpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklM
RShPcEFkZCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wTXVsKQor
ICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BEaXYpCisgICAgICAgIExJ
TktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcFN1YikKKworICAgICAgICBMSU5LX1dJVEhf
VU5BUllfQVJJVEhfUFJPRklMRShPcE5lZ2F0ZSkKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FS
SVRIX1BST0ZJTEUoT3BJbmMpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxF
KE9wRGVjKQogCiAgICAgICAgIExJTksoT3BKbmVxUHRyKQogCkBAIC03NjksNyArNzg0LDYgQEAg
Ym9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgIC8vIHJlbHkgb24g
dGhlIGluc3RydWN0aW9uIGNvdW50IChhbmQgYXJlIGluIHRoZW9yeSBwZXJtaXR0ZWQgdG8gYWxz
byBpbnNwZWN0IHRoZQogICAgIC8vIGluc3RydWN0aW9uIHN0cmVhbSB0byBtb3JlIGFjY3VyYXRl
IGFzc2VzcyB0aGUgY29zdCBvZiB0aWVyLXVwKS4KICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7
Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKIAogICAgIC8vIElmIHRoZSBjb25jdXJyZW50IHRocmVh
ZCB3aWxsIHdhbnQgdGhlIGNvZGUgYmxvY2sncyBoYXNoLCB0aGVuIGNvbXB1dGUgaXQgaGVyZQog
ICAgIC8vIHN5bmNocm9ub3VzbHkuCkBAIC03OTMsNiArODA3LDc2IEBAIHZvaWQgQ29kZUJsb2Nr
OjpmaW5pc2hDcmVhdGlvbkNvbW1vbihWTSYKICAgICBtX293bmVyRWRnZS5zZXQodm0sIHRoaXMs
IEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmNyZWF0ZSh2bSwgdGhpcykpOwogfQogCit2b2lk
IENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklU
Q29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRDb2RlKGppdENvZGUuY29weVJlZigpKTsKKwor
ICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0Q29kZU1hcCA9IHRoaXMtPmppdENvZGVNYXAo
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRs
ZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRp
b25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQz
MzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQo
Qnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQ
dHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgYXV0byYgaml0RGF0YSA9IGVuc3VyZUpJ
VERhdGEobG9ja2VyKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sLmlzRW1wdHkoKSk7CisgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2wg
PSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBlbnRyeSA9IGppdENvZGUtPm1fY29uc3RhbnRQ
b29sLmF0KGkpOworICAgICAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKSB7CisgICAgICAgICAg
ICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0OgorICAgICAgICAgICAg
ICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZENhbGxMaW5r
SW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRDYWxsTGlu
a0luZm8qPihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2lu
KHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPmluaXRpYWxpemVEYXRhSUModm0oKSwgdW5saW5rZWRDYWxsTGlua0luZm8s
IEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgaml0RGF0
YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGNhbGxMaW5rSW5mbzsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbzogeworICAgICAgICAgICAgICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyo+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAgIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGppdERhdGEubV9zdHViSW5mb3MuYWRkKHVubGlu
a2VkU3R1YkluZm8uYWNjZXNzVHlwZSwgQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVj
b2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+aW5pdGlhbGl6ZUZyb21Vbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKHRoaXMsIHVubGlua2VkU3R1YkluZm8pOworICAgICAgICAg
ICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBzdHViSW5mbzsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAg
ICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkRlY2wo
aW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwcjogeworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucGF5
bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtp
XSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKGNv
ZGVUeXBlKCkpIHsKKyAgICBjYXNlIEdsb2JhbENvZGU6CisgICAgY2FzZSBNb2R1bGVDb2RlOgor
ICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFs
c2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRnVuY3Rpb25Db2RlOgorICAgICAgICAvLyBX
ZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQg
YW4gdW5pbmxpbmVhYmxlIGNhbGwuCisgICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2Jz
ZXJ2YXRpb24uCisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShj
YXBhYmlsaXR5TGV2ZWwoKSkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKHRoaXMpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaml0Q29kZS0+bV9pc1NoYXJlYWJsZSAmJiAh
dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSAmJiBPcHRpb25zOjp1
c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nKCkpCisgICAgICAgIHVubGlua2VkQ29kZUJsb2NrKCkt
Pm1fdW5saW5rZWRCYXNlbGluZUNvZGUgPSBXVEZNb3ZlKGppdENvZGUpOworfQorCiBDb2RlQmxv
Y2s6On5Db2RlQmxvY2soKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtODczLDYgKzk1Nywy
NyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAK
K2Jvb2wgQ29kZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBuZWVkcyB0byBjb3JyZXNwb25k
IHRvIHdoYXQgd2UgZG8gaW5zaWRlIHNldENvbnN0YW50UmVnaXN0ZXJzLgorICAgIHN3aXRjaCAo
dW5saW5rZWRDb2RlQmxvY2soKS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVn
KSkgeworICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgIGNh
c2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcjogeworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gdW5saW5rZWRDb2RlQmxvY2soKS0+Z2V0Q29uc3RhbnQocmVnKTsKKyAg
ICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlm
IChjZWxsLT5pbmhlcml0czxTeW1ib2xUYWJsZT4odm0oKSkgfHwgY2VsbC0+aW5oZXJpdHM8SlNU
ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KHZtKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKIFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhj
b25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0
IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbikKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTg5Miw2ICs5OTcs
NyBAQCBWZWN0b3I8dW5zaWduZWQ+IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSCiAgICAgICAgIHN3
aXRjaCAocmVwcmVzZW50YXRpb24pIHsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb25zdGFudCA9IGdsb2JhbE9i
amVjdC0+bGlua1RpbWVDb25zdGFudChzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50Pihjb25z
dGFudC5hc0ludDMyQXNBbnlJbnQoKSkpOworICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50Lmlz
Q2VsbCgpKTsgLy8gVW5saW5rZWQgQmFzZWxpbmUgSklUIHJlcXVpcmVzIHRoaXMuCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVy
OgogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKQEAgLTE1
MTQsNyArMTYyMCw3IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJsb2NrOjplbnN1cmVKSVQK
ICAgICByZXR1cm4gKm1faml0RGF0YTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFz
ZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5l
Q2FjaGVzKCkKIHsKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewog
ICAgICAgICBmb3IgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxs
TGlua0luZm9zKQpAQCAtMTUyNSw2ICsxNjMxLDIwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZUJhc2VsaW5lSklUSW5saW4KICAgICAgICAgICAgIHN0dWJJbmZvLT52aXNpdFdlYWtSZWZlcmVu
Y2VzKGxvY2tlciwgdGhpcyk7CiAgICAgICAgIH0KICAgICB9CisKKworI2lmIEFTU0VSVF9FTkFC
TEVECisgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAg
ICAvLyBWZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3Jl
IHZpcnR1YWwgY2FsbHMuCisgICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
OiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxD
YWxsTGlua0luZm9zKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5r
ZWQoKSk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtd
IChKU0NlbGwqKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgfQorI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAt
MTUzNCw0NiArMTY1NCwxMiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAg
ICBib29sIGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50
RG93bmdyYWRlOwotICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0g
ICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1p
emVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFz
ZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9y
eS4KLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYm
IGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxv
Y2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJs
b2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAg
ICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJ
bnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJP
ZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUt
PmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5m
byYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1
bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgp
KS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IHVubGlua0luY29taW5nQ2FsbHMoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNh
ZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwotICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2Fm
ZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIg
Ynl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFy
c2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMg
KmluZm9zLgotICAgICAgICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYK
LSAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAg
ICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgaWYgKCEhaml0Q29kZSgpKQotICAgICAgICBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKCk7CisgICAgICAgIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShERkdfSklUKQpAQCAtMTU5NCw3ICsxNjgwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1
bms6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuazoKLSAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50
KCk7CisgICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y291bnQoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgog
ICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CkBAIC0xNjc1
LDMwICsxNzYxLDYgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgog
ICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5
cGUsIGNvZGVPcmlnaW4pOwogfQogCi1KSVRBZGRJQyogQ29kZUJsb2NrOjphZGRKSVRBZGRJQyhC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2Fk
ZElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklU
TXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVFN1YklDKiBDb2RlQmxvY2s6
OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0
YShsb2NrZXIpLm1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVROZWdJQyogQ29k
ZUJsb2NrOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewot
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJl
SklURGF0YShsb2NrZXIpLm1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCiBTdHJ1Y3R1
cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKQEAgLTMxMzMsNyAr
MzE5NSw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lm
IEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0
dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzM0OSwxMyArMzQx
MSwxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAg
c3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAg
IHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwor
ICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9m
aWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERp
dj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC0zMzY3LDExICszNDI5LDExIEBAIFVuYXJ5QXJpdGhQcm9maWxl
KiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7
CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigp
Lm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9w
TmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5j
OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5t
X2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8
T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBw
Yy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzQ3MiwyMiArMzUzNCwxNiBAQCB2b2lkIENv
ZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiB9CiAKICNpZiBFTkFCTEUoSklUKQot
dm9pZCBDb2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1Rv
Q29kZU9yaWdpbk1hcD4mJiBtYXApIAoteyAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7Ci0gICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1fcGNUb0NvZGVPcmlnaW5NYXAg
PSBXVEZNb3ZlKG1hcCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2Nr
OjpmaW5kUEModm9pZCogcGMpCiB7CisgICAgaWYgKGF1dG8qIHBjVG9Db2RlT3JpZ2luTWFwID0g
bV9qaXRDb2RlLT5wY1RvQ29kZU9yaWdpbk1hcCgpKSB7CisgICAgICAgIGlmIChzdGQ6Om9wdGlv
bmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBwY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBj
KSkKKyAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAgIH0KKwogICAgIHsKICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBpZiAoYXV0byog
aml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICAgICAgaWYgKGppdERhdGEtPm1f
cGNUb0NvZGVPcmlnaW5NYXApIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxD
b2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gaml0RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcC0+Zmlu
ZFBDKHBjKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47Ci0gICAgICAg
ICAgICB9Ci0KICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDog
aml0RGF0YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNv
bnRhaW5zUEMocGMpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxD
b2RlT3JpZ2luPihzdHViSW5mby0+Y29kZU9yaWdpbik7CkBAIC0zNTIxLDI4ICszNTc3LDE0IEBA
IHN0ZDo6b3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0
ZWNvZGVJbmRleDsKIH0KIAotaW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQz
Ml90IHRocmVzaG9sZCkKLXsKLSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9w
dGltaXplKCkpIHsKLSAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICBy
ZXR1cm4gdGhyZXNob2xkOwotICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1
cm4gdGhyZXNob2xkICogNDsKLSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1
cm4gdGhyZXNob2xkIC8gMjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIHRocmVzaG9sZDsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkK
K3ZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIu
c2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRB
ZnRlcldhcm1VcCgpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdU
aHJlc2hvbGQodW5saW5rZWRDb2RlQmxvY2soKS0+dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOwogfQogCi12b2lkIENvZGVCbG9jazo6aml0U29v
bigpCit2b2lkIENvZGVCbG9jazo6aml0TmV4dEludm9jYXRpb24oKQogewotICAgIG1fbGxpbnRF
eGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+
c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwogfQogCiBib29sIENvZGVCbG9jazo6aGFzSW5zdGFs
bGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdApAQCAtMzU4OCwyOCArMzYzMCw4IEBAIHZvaWQg
Q29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRvdWJsZSBudW1TdWJzID0gMC4wOwog
ICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKLSAgICBhdXRvIGNvdW50SUNzID0gWyZd
IChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IGNv
ZGVCbG9jay0+bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKEpJVEFkZElDKiBh
ZGRJQyA6IGppdERhdGEtPm1fYWRkSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtQWRkcysrOwot
ICAgICAgICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29kZVNpemUoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMgOiBqaXREYXRhLT5t
X211bElDcykgewotICAgICAgICAgICAgICAgIG51bU11bHMrKzsKLSAgICAgICAgICAgICAgICB0
b3RhbE11bFNpemUgKz0gbXVsSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lDIDogaml0RGF0YS0+bV9uZWdJQ3MpIHsKLSAgICAg
ICAgICAgICAgICBudW1OZWdzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxOZWdTaXplICs9IG5l
Z0lDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJVFN1
YklDKiBzdWJJQyA6IGppdERhdGEtPm1fc3ViSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtU3Vi
cysrOwotICAgICAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJQy0+Y29kZVNpemUoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVC
bG9jayopIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmUtaW1wbGVtZW50IHRoaXMg
dXNpbmcgSklUQ29kZS4KICAgICB9OwogICAgIGhlYXAoKS0+Zm9yRWFjaENvZGVCbG9jayhjb3Vu
dElDcyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCBjbGFzcyBKU01vZHVs
ZUVudmlyb25tZW50OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTExJbnRQ
cm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OwogY2xhc3MgTWV0YWRhdGFU
YWJsZTsKLWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExp
c3Q7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAog
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEp
OwogCkBAIC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFk
YXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNp
Z25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citw
cml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7Citw
dWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBA
IHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJz
OyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2ln
bmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29k
ZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9j
ayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoK
ICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9v
bCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25D
ZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBg
cmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChy
ZWcuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXND
ZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewog
ICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJz
KTsKQEAgLTI2OCwyMyArMjU5LDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUKQogICAgIHN0
cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwor
ICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJh
ZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAgICAgIEJhZzxKSVRBZGRJQz4g
bV9hZGRJQ3M7Ci0gICAgICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Ci0gICAgICAgIEJhZzxK
SVROZWdJQz4gbV9uZWdJQ3M7Ci0gICAgICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7CiAgICAg
ICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxM
aW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5m
bz4+IG1faW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3Jw
aGljQ2FsbE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4g
bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1
bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdK
dW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29s
IG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2pp
dENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29s
OworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAg
IH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGlu
ZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkp
CkBAIC0yOTMsMjIgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgSklURGF0YSYgZW5zdXJl
SklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAKLSAgICBKSVRBZGRJQyog
YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11
bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFy
eUFyaXRoUHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQotCi0g
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+Ci0gICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAg
ICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVy
biBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2Vu
ZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUU3ViSUMqIGFk
ZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklD
KHByb2ZpbGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdERhdGEpOyB9CiAKICAgICBTdHJ1
Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSwgQ29kZU9yaWdpbik7CiAKQEAg
LTMyMiwxOCArMjk2LDggQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJ
bmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlu
a0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAg
ICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAg
IHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBl
bnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsK
LSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0gICAgewotICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1
cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBjb25zdCBKSVRDb2Rl
TWFwJiBqaXRDb2RlTWFwKCk7CiAKLSAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6
dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpvcHRpb25hbDxDb2Rl
T3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwogCiAgICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0
ZXJzKFJlZ2lzdGVyU2V0KTsKQEAgLTQ3Miw2ICs0MzYsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJp
bmcgbmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9CiAgICAgdW5zaWduZWQg
bnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
YXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9u
dW1QYXJhbWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNlSklUKCkpOwpAQCAtNTY5LDggKzUzNCwxMCBA
QCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0
YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAg
ICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCld
LmdldCgpOyB9CisgICAgYm9vbCBpc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZp
cnR1YWxSZWdpc3RlcikgY29uc3Q7CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKHJlZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKGluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNW
ZWN0b3JCdWZmZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0
YW50UmVnaXN0ZXJzKSArIGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5
T2Zmc2V0KCk7IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBp
bmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBu
dW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9
CkBAIC01OTUsMjIgKzU2MiwyMiBAQCBwdWJsaWM6CiAgICAgLy8gSnVtcCBUYWJsZXMKIAogI2lm
IEVOQUJMRShKSVQpCi0gICAgU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpCisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShp
bnQgdGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRj
aEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFu
dFBvb2woKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAg
ICAgcmV0dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wu
ZGF0YSgpOwogICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIHVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIAotI2lm
IEVOQUJMRShKSVQpCi0gICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUo
aW50IHRhYmxlSW5kZXgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEp
OwotICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07Ci0gICAgfQorI2lmIEVOQUJMRShERkdfSklUKQorICAgIFN0cmluZ0p1bXBUYWJs
ZSYgZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVK
dW1wVGFibGUmIGRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CiAjZW5kaWYKKwog
ICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIApAQCAt
NjMyLDIxICs1OTksMjAgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xk
UmVhY2hlZCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNo
ZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOworICAgICAgICByZXR1cm4gbV9sbGlu
dEV4ZWN1dGVDb3VudGVyLT5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKICAg
ICB9CiAKICAgICB2b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCiAgICAgewotICAgICAgICBtX2xs
aW50RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICAgICAgbV9sbGludEV4
ZWN1dGVDb3VudGVyLT5kZWZlckluZGVmaW5pdGVseSgpOwogICAgIH0KIAotICAgIGludDMyX3Qg
dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2Fy
bVVwKCk7CiAgICAgdm9pZCBqaXRTb29uKCk7CisgICAgdm9pZCBqaXROZXh0SW52b2NhdGlvbigp
OwogCiAgICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3Vu
dGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7
CisgICAgICAgIHJldHVybiAqbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIH0KIAogICAgIHR5
cGVkZWYgSGFzaE1hcDxzdGQ6OnR1cGxlPFN0cnVjdHVyZUlELCB1bnNpZ25lZD4sIEZpeGVkVmVj
dG9yPExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVj
dHVyZVdhdGNocG9pbnRNYXA7CkBAIC03OTcsNiArNzYzLDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3Rz
OyB9CiAgICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1
Z2dlclJlcXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVx
dWVzdHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVx
dWVzdHMpOyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2lu
dHMpOwogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykK
QEAgLTgzOCw2ICs4MDUsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2Nr
IG1fbG9jazsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJp
dGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBF
TkFCTEUoSklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBE
Rkc6OkNhcGFiaWxpdHlMZXZlbApAQCAtODQ3LDggKzgxNSw2IEBAIHB1YmxpYzoKICAgICBib29s
IG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1faGFzQmVlbkNvbXBpbGVk
V2l0aEZUTCA6IDE7CiAKLSAgICBib29sIG1faGFzTGlua2VkT1NSRXhpdCA6IDE7Ci0gICAgYm9v
bCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA6IDE7CiAgICAgYm9vbCBtX3Zpc2l0Q2hp
bGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAgLy8gSW50ZXJuYWwgbWV0
aG9kcyBmb3IgdXNlIGJ5IHZhbGlkYXRpb24gY29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBp
dCB3YXNuJ3QKQEAgLTkwNywxNiArODczLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3Ry
dWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBt
X2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpOyB9CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdp
YmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKLSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRp
bnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0g
ICAgICAgIHJldHVybiAhbV91bmxpbmtlZENvZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAg
fQorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5l
Q2FjaGVzKCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJ
bmxpbmVDYWNoZXMoKTsKKyAgICB2b2lkIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5k
aWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMo
KTsKQEAgLTEwMTAsNyArOTcyLDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50
TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9q
aXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJ
VERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2
ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jawpAQCAtMTAyOSw3ICs5OTMsNyBAQCBwcml2YXRl
OgogCiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAg
ICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJh
c2VsaW5lRXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9
OwogCiAgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAg
ICAgdWludDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgzMDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRl
ICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5s
aW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkg
KzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlm
IChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0
YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9w
cm9maWxlLCBmYWxzZSk7IH0pOwotCiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVF
X1BST0ZJTEUoVklTSVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZv
ckVhY2g8T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1
Nyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAg
ICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAg
ICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwz
OCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQog
CisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZU19JTkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJs
b2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9q
aXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFwOworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1
bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+
bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmlu
Z0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQg
dGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2Rl
LmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlm
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBD
b2RlQmxvY2s6OmRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NF
UlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PERGRzo6SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6
ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChq
aXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZH
OjpKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7
CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQog
ICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25D
b3VudGVyLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5
LDcgQEAgYm9vbCBFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNv
ZGVCbG9jayA/IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQp
OworICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAg
ICBtX2NvdW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25D
b3VudGVyLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAg
cHVibGljOgogICAgIHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3Ug
dXNlIHRoaXMsIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVy
biBmYWxzZS4KICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9j
ayopOwogICAgIGJvb2wgaGFzQ3Jvc3NlZFRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291
bnRlciA+PSAwOyB9Ci0gICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQs
IENvZGVCbG9jayopOworICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xk
LCBDb2RlQmxvY2sqID0gbnVsbHB0cik7CiAgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwog
ICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90
b3RhbENvdW50KSArIG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwpAQCAtODYsMTMgKzg2LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVCB0aHJlc2hvbGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVz
aG9sZChUIHRocmVzaG9sZCkKICAgICB7Ci0gICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwot
ICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNr
cG9pbnRzKCkgJiYgZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xv
YmFsT2JqZWN0LT53ZWFrUmFuZG9tSW50ZWdlcigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0Jl
dHdlZW5DaGVja3BvaW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hv
bGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAg
IGludDMyX3QgbWF4VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVj
a3BvaW50cygpOwogICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAg
ICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xk
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0
YWRhdGEuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0
cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0
QnlJZE1vZGVNZXRhZGF0YVVuc2V0KSA9PSAxMik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFk
YXRhQXJyYXlMZW5ndGggeworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2Zp
bGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVu
Z3RoLCBhcnJheVByb2ZpbGUpOyB9CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07
CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09
IDEyKTsKQEAgLTg4LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAg
ICAgIEdldEJ5SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENh
Y2hpbmc7IC8vIFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgog
ICAgIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9k
ZU1ldGFkYXRhRGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5z
ZXQgdW5zZXRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxl
bmd0aE1vZGU7CkBAIC0xMTcsNiArMTE5LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGEg
ewogICAgICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhUHJvdG9Mb2FkIHByb3RvTG9hZE1vZGU7CiAg
ICAgfTsKICAgICBHZXRCeUlkTW9kZSBtb2RlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1v
ZGUpOyB9CiAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsKIH07CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNw
cAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIEdldEJ5U3Rh
dHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgcmV0dXJuIEdldEJ5U3Rh
dHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAgICAKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJ
ZFNlbGY6IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZt
KCkpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQ
cm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJ
KHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBA
IHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEcKIAogICAgIC8vIExldCdz
IHN0b3JlIHRoZSByZXVzZWQgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4gQWZ0ZXIgdGhhdCwgd2Ug
Y2FuIHVzZSBhbGxvY2F0ZWQgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgYWxsb2NhdG9y
LnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOworICAgICAgICBhbGxvY2F0
b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CiAKICAgICBpZiAoR2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2co
ImJhc2VHUFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsKQEAgLTIyNSwxMiArMjI1LDkgQEAgdm9pZCBH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogICAgICAgICByZWdpc3RlcnNUb1Nw
aWxsRm9yQ0NhbGwuc2V0KHJlZyk7CiAgICAgZm9yIChGUFJSZWcgcmVnIDogZnBTY3JhdGNoKQog
ICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CisgICAgaWYgKGppdC5j
b2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2Fs
bC5zZXQoc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CiAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckND
YWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckNDYWxsKCkpOwot
I2lmIENQVShBUk02NCkKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2so
KTsKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgcmVnaXN0ZXJzVG9T
cGlsbEZvckNDYWxsLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCiAKICAgICBBY2Nl
c3NDYXNlU25pcHBldFBhcmFtcyBwYXJhbXMoc3RhdGUubV92bSwgV1RGTW92ZShyZWdzKSwgV1RG
TW92ZShncFNjcmF0Y2gpLCBXVEZNb3ZlKGZwU2NyYXRjaCkpOwogICAgIHNuaXBwZXQtPmdlbmVy
YXRvcigpLT5ydW4oaml0LCBwYXJhbXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzksNyArMTM5LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgog
ICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpJbkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1
YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSk7
CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3Bl
cnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZp
ZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsMTYg
QEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNz
KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0
eUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlm
ICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBk
eW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcg
ZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKICAgICAKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0y
MzMsMjMgKzIzOCwzMSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3Rl
CiAgICAgcmV0dXJuIGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJl
ZzsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFj
ZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jv
b2wgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZv
KTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYg
KCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9m
ZnNldCkpOworICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJs
b2NrLCBzdHViSW5mbywgb2Zmc2V0KSk7CisKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3Ry
dWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQogCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIApAQCAtMjc5LDIyICsyOTIsMjUgQEAg
Ym9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UgogICAgIHJldHVybiBsaW5r
ZWRDb2RlSW5saW5lOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxl
bmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJ
bmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgQVNT
RVJUKGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogCiAgICAgaWYgKCFzdHViSW5m
by5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlm
IChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWhhc0FueUFycmF5U3RvcmFnZShhcnJh
eS0+aW5kZXhpbmdUeXBlKCkpICYmIGFycmF5LT5pbmRleGluZ1R5cGUoKSAhPSBBcnJheUNsYXNz
OwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgQVNTRVJUKGlzQ2FjaGVhYmxlQXJy
YXlMZW5ndGgoc3R1YkluZm8sIGFycmF5KSk7CisgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ss
IGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywgYXJyYXkpKTsKIAog
ICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0zMTksMTcgKzMzNSwyMCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVB
cnJheUxlbmd0aChTCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLWJvb2wgSW5s
aW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCitib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICBpZiAo
IXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJ
bmZvKTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmlu
Z0xlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQogewotICAgIEFTU0VSVChpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChzdHViSW5mbykpOworICAg
IEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxv
Y2ssIHN0dWJJbmZvKSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmll
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzYzLDEzICszODIsMTggQEAgYm9vbCBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKAogfQogCiAKLWJvb2wgSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNz
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIXN0
dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gVGhlc2UgZHluYW1p
YyBzbG90cyBnZXQgZmlsbGVkIGluIGJ5IFN0cnVjdHVyZVN0dWJJbmZvLiBOb3RoaW5nIGVsc2Ug
dG8gZG8uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIEdQUlJlZyBiYXNlID0g
c3R1YkluZm8uYmFzZUdQUjsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVl
UmVncygpOwogCkBAIC00MDYsMTMgKzQzMCwxMyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjCiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAg
ICAgLy8gSWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9w
IHNsZWQgKGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFu
IGluZGlyZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcg
bV9jb2RlUHRyLgotICAgICAgICBpZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7
CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCAmJiBzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElm
IG1fY29kZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24s
IHRoaXMgbWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAg
ICAgICAgICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNo
aW5nIGNvZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBj
b2RlLgogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVz
cygpID09IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygp
KSB7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1Yklu
Zm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQo
Q0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnN0dWJJbmZvKSwgc3R1
YkluZm8ubV9zdHViSW5mb0dQUik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKENDYWxs
SGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHVi
Um91dGluZVB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1w
KCk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gc3R1YkluZm8uZG9u
ZUxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKQEAgLTQyMSw3ICs0NDUsOSBAQCB2b2lkIElubGluZUFjY2Vz
czo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nl
c3M6IGxpbmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAg
ICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CisgICAgICAgIHN0dWJJbmZvLm1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2Vz
cyBjb2RlLgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzQsOCArNDYwLDE0IEBAIHZv
aWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICB9KSwgIklubGluZUFj
Y2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpy
ZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCit2b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKKyAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSAmJiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCkgeworICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSBzdHViSW5mby5z
bG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLgorICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIo
c3R1YkluZm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRh
PHZvaWQoQ0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIGEgbm9wIHNsZWQgaGVyZSBiZWNhdXNlIG5vYm9keSBzaG91bGQgYmUg
anVtcGluZyBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCiAgICAgICAgIGF1dG8ganVtcCA9IGpp
dC5qdW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUFjY2Vzcy5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDE0ICs5OSwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBzdGQ6Om1heChzaXplLCBzaXplRm9yUHJvcGVydHlBY2Nl
c3MoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nl
c3MoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAg
c3RhdGljIGJvb2wgY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJ
bmZvJiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0
KTsKLSAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJ
bmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3Ro
KFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0
aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0
ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRp
YyBib29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3Rh
dGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wg
Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFBy
b3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29s
IGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7
CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJbkFj
Y2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOworICAgIHN0
YXRpYyBib29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJik7CiAKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2lu
Z0lubGluZUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CiAgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1
YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHJldmlz
aW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25N
b2RlTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBPVkVSTE9BRF9C
SVRXSVNFX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJdGVyYXRpb25Nb2RlTWV0
YWRhdGEgewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSXRlcmF0aW9u
TW9kZU1ldGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRl
Y2x0eXBlKHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRpb25Nb2RlKSk7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0lu
Zm8uaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0xMSW50Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKExMSW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KIAogcHJpdmF0ZToKICAg
ICB1aW50cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgeyB1bmxpbmtl
ZEJpdCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDE3IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgYml0V2lkdGhGb3JNYXgKICAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAogICAgIG1h
Y3JvKE9wSXRlcmF0b3JOZXh0KSBcCiAKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQklO
QVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKKyAgICBtYWNybyhPcEFkZCkgXAorICAgIG1hY3Jv
KE9wTXVsKSBcCisgICAgbWFjcm8oT3BEaXYpIFwKKyAgICBtYWNybyhPcFN1YikgXAorCisjZGVm
aW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKKyAg
ICBtYWNybyhPcEluYykgXAorICAgIG1hY3JvKE9wRGVjKSBcCisgICAgbWFjcm8oT3BOZWdhdGUp
IFwKKwogCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInR5cGUtbGltaXRzIikKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZv
aWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpzdWNjZWVkKCkKIHsKICAgICByZXN0b3JlU2NyYXRj
aCgpOwogICAgIGlmIChqaXQtPmNvZGVCbG9jaygpLT51c2VEYXRhSUMoKSkKLSAgICAgICAgaml0
LT5yZXQoKTsKKyAgICAgICAgaml0LT5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mRG9uZUxvY2F0
aW9uKCkpLCBKU0ludGVybmFsUHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIHN1Y2Nlc3MuYXBw
ZW5kKGppdC0+anVtcCgpKTsKIH0KQEAgLTExMCw2ICsxMTAsOCBAQCBjb25zdCBSZWdpc3RlclNl
dCYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7CiAKICAg
ICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1fbGl2ZVJlZ2lzdGVy
c1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9jYXRvci0+dXNlZFJl
Z2lzdGVycygpKTsKKyAgICAgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQor
ICAgICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5hZGQoc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIpOwogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGw7
CkBAIC0xMjgsMTEgKzEzMCwxMiBAQCBhdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2Vy
dmVMaXZlCiAgICAgfTsKIH0KIAotYXV0byBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZl
TGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29uc3QgUmVnaXN0
ZXJTZXQmIGV4dHJhKSAtPiBTcGlsbFN0YXRlCithdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6
cHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucygpIC0+
IFNwaWxsU3RhdGUKIHsKICAgICBSZWdpc3RlclNldCBsaXZlUmVnaXN0ZXJzID0gYWxsb2NhdG9y
LT51c2VkUmVnaXN0ZXJzKCk7CisgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygp
KQorICAgICAgICBsaXZlUmVnaXN0ZXJzLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7CiAg
ICAgbGl2ZVJlZ2lzdGVycy5leGNsdWRlKGNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgbGl2
ZVJlZ2lzdGVycy5tZXJnZShleHRyYSk7CiAKICAgICBjb25zdGV4cHIgdW5zaWduZWQgZXh0cmFT
dGFja1BhZGRpbmcgPSAwOwogICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JS
ZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVS
ZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqaml0LCBsaXZlUmVnaXN0ZXJzLCBleHRyYVN0YWNrUGFk
ZGluZyk7CkBAIC01OTYsMTYgKzU5OSwxMSBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHlt
b3JwaGljQWNjZXNzCiAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAgIHN0YXRl
LmppdCA9ICZqaXQ7CiAKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewotICAgICAg
ICBpZiAoc3RhdGUubV9kb2VzSlNHZXR0ZXJTZXR0ZXJDYWxscykgewotICAgICAgICAgICAgLy8g
V2UgaGF2ZSBubyBndWFyYW50ZWUgdGhhdCBzdGFjay1wb2ludGVyIGlzIHRoZSBleHBlY3RlZCBv
bmUuIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBpZiB3ZSBkbyBub3QgaGF2ZSBKUyBnZXR0ZXIgLyBz
ZXR0ZXIgY2FsbHMgc2luY2Ugc3RhY2stcG9pbnRlciBpcwotICAgICAgICAgICAgLy8gYSBjYWxs
ZWUtc2F2ZSByZWdpc3RlciBpbiB0aGUgQyBjYWxsaW5nIGNvbnZlbnNpb24uIEhvd2V2ZXIsIG91
ciBKUyBleGVjdXRhYmxlIGNhbGwgZG9lcyBub3Qgc2F2ZSBzdGFjay1wb2ludGVyLiBTbyB3ZSBh
cmUgYWRqdXN0aW5nIHN0YWNrLXBvaW50ZXIgYWZ0ZXIKLSAgICAgICAgICAgIC8vIEpTIGdldHRl
ciAvIHNldHRlciBjYWxscy4gQnV0IHRoaXMgY291bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlIGlu
aXRpYWwgc3RhY2stcG9pbnRlciwgYW5kIG1ha2VzIFBBQyB0YWdnaW5nIGJyb2tlbi4KLSAgICAg
ICAgICAgIC8vIFRvIGVuc3VyZSBQQUMtdGFnZ2luZyB3b3JrLCB3ZSBmaXJzdCBhZGp1c3Qgc3Rh
Y2stcG9pbnRlciB0byB0aGUgYXBwcm9wcmlhdGUgb25lLgotICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGppdC50YWdSZXR1
cm5BZGRyZXNzKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKKyAgICBpZiAoIWNhbkJlU2hhcmVkICYmIEFTU0VSVF9FTkFCTEVEKSB7CisgICAg
ICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFj
a1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgYXV0byBvayA9IGppdC5i
cmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgaml0LmJyZWFrcG9pbnQo
KTsKKyAgICAgICAgb2subGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0ZS5wcmVzZXJ2ZWRS
ZXVzZWRSZWdpc3RlclN0YXRlID0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewog
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjYWxjdWxhdGVMaXZlUmVnaXN0ZXJzRm9yQ2FsbEFuZEV4
Y2VwdGlvbkhhbmRsaW5nKCk7CiAKICAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7Ci0gICAgU3Bp
bGxTdGF0ZSBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRp
b25zKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7CisgICAgU3BpbGxTdGF0ZSBwcmVz
ZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAg
ICB2b2lkIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNl
cHRpb24oY29uc3QgU3BpbGxTdGF0ZSYpOwogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNG
cm9tU3RhY2tGb3JDYWxsKGNvbnN0IFNwaWxsU3RhdGUmLCBjb25zdCBSZWdpc3RlclNldCYgZG9u
dFJlc3RvcmUgPSB7IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTAg
KzE4MCwxMCBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVy
KCk7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh1aWQpOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1
YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7Cisg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICBy
ZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0dWJJbmZv
LT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAg
ICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0cnVj
dHVyZSwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAko
cmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTY1LDkg
KzY2LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKAogICAgIEFT
U0VSVChoYXNDb25zdGFudElkZW50aWZpZXIpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENh
Y2hlVHlwZTo6R2V0QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0g
ICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
ID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCku
aGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9m
ZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVT
dHViSW5mbzo6aW5pdEFycmF5TGVuZ3RoKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxv
Y2tlcikKQEAgLTg3LDkgKzg4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5
SWRSZXBsYQogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KTsKICAg
ICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlKTsKICAgICBt
X2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAg
IG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUt
PmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7
Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBv
ZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC05Nyw5ICs5OCw5IEBAIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGMKICAgICBBU1NFUlQobV9jYWNoZVR5
cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVU
eXBlOjpJbkJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAu
d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7
CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OmRlcmVmKCkKQEAgLTIzNiw3ICsyMzcsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0
cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgIC8vIHdlJ3JlIGJ1ZmZlcmVkIGlzIGJlY2F1c2Ugd2Ug
cmVseSBvbiBpdCB0byByZXNldCBkdXJpbmcgR0MgaWYgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlCiAgICAgICAgIC8vIGlzIGNvbGxlY3RlZC4KICAgICAgICAgbV9pZGVudGlmaWVyID0gbnVs
bHB0cjsKLSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7CisgICAg
ICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAgICAgICAgIAogICAgICAgICAv
LyBJZiB3ZSBnZW5lcmF0ZWQgc29tZSBjb2RlIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBhdHRlbXB0
IHRvIHJlcGF0Y2ggaW4gdGhlIGZ1dHVyZSB1bnRpbCB3ZQogICAgICAgICAvLyBnYXRoZXIgZW5v
dWdoIGNhc2VzLgpAQCAtMjUxLDcgKzI1Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJl
c2V0KGNvbnN0IENvbmMKIHsKICAgICBjbGVhckJ1ZmZlcmVkU3RydWN0dXJlcygpOwogICAgIG1f
aWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNs
ZWFyKCk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKIAogICAgIGlmICht
X2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CkBAIC0yODUs
NiArMjg2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAg
ICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0
aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NU
eXBlOjpJbkJ5SWQ6CkBAIC0zNjAsOCArMzYyLDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRXZWFrUmVmZXJlbgogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0gICAg
aWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgaXNWYWxpZCAmPSB2bS5o
ZWFwLmlzTWFya2VkKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgaWYg
KFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpCisg
ICAgICAgIGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpOwogICAgIGlmICht
X2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIGlzVmFsaWQgJj0gdS5zdHVi
LT52aXNpdFdlYWsodm0pOwogCkBAIC0zNzUsOCArMzc3LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7Ci0gICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgbV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZpc2l0b3Iudm0o
KSkpCisgICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAKICAgICBpZiAo
bV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICB1LnN0dWItPnByb3BhZ2F0
ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwpAQCAtNDMwLDYgKzQzMiwyMDQgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVU
eXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYg
dW5saW5rZWRTdHViSW5mbykKK3sKKyAgICBhY2Nlc3NUeXBlID0gdW5saW5rZWRTdHViSW5mby5h
Y2Nlc3NUeXBlOworICAgIHN0YXJ0ID0gdW5saW5rZWRTdHViSW5mby5zdGFydDsKKyAgICBkb25l
TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93UGF0aFN0
YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKyAg
ICBjYWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KHVubGlua2VkU3R1
YkluZm8uYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpOworICAgIGNvZGVPcmlnaW4gPSBDb2RlT3Jp
Z2luKHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgbV9jb2RlUHRyID0gc2xv
d1BhdGhTdGFydExvY2F0aW9uOworCisgICAgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICBpZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NU
eXBlOjpHZXRCeUlkICYmIHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpIHsKKyAgICAgICAgLy8gRm9yIGl0ZXJhdG9yX25leHQsIHdlIGNhbid0IGNsb2JiZXIgdGhl
ICJkb250Q2xvYmJlclJlZ2lzdGVyIiByZWdpc3RlciBlaXRoZXIuCisgICAgICAgIHVzZWRSZWdp
c3RlcnMuYWRkKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdpc3Rlcik7
CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpEZWxldGVCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRl
QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxl
dGVCeUlEOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6Cisg
ICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbklu
QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5
SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAg
IG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOiAKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBzd2l0
Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5v
dERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3Ry
aWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlm
ICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKKyAgICAgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRT
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6
OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
UHV0QnlWYWw6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2Vk
U3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0
cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnByaXZhdGVGaWVsZFB1dEtpbmQuaXNEZWZpbmUoKSA/
IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25Q
dXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6
RGVsZXRlQnlWYWw6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAg
ICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAg
cmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5Owor
ICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAg
ICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNl
bGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBJ
bnZhbGlkR1BSUmVnOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVy
czo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRC
eVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOgorICAgICAgICBoYXND
b25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSBmYWxzZTsKKyAgICAgICAgcHJvdG90eXBlSXNLbm93bk9iamVjdCA9IGZhbHNlOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAg
dmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAg
cmVncy5wcm90b3R5cGVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOwor
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAg
IGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWU6IAorICAgIGNhc2UgQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7
CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
ICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CisgICAgICAg
IGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IElu
dmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0
OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgIGNhc2UgQWNjZXNzVHlwZTo6
R2V0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAg
cmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0
cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICAgICAgcmVncy50aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpQdXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBi
YXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9H
UFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0
UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAg
ICAgICBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAg
cmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5Owor
ICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAg
ICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsKQorICAgICAg
ICAgICAgbV9hcnJheVByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9m
aWxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFu
ZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBoYXND
b25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MuYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6YnJhbmQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogI2lmIEFTU0VS
VF9FTkFCTEVECiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIu
aCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUg
IlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0
dXJlU2V0LmgiCkBAIC01Niw2ICs1Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhf
dCB7CiAgICAgR2V0QnlWYWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQ
cml2YXRlTmFtZSwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFt
ZSwKQEAgLTc4LDYgKzgwLDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAg
IFN0cmluZ0xlbmd0aAogfTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisK
IGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1
Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsx
MDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgp
OwogCisgICAgdm9pZCBpbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29k
ZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJ
VF9BR0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVu
Y2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAg
LTMyNSwxMyArMzMxLDE5IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW47CisgICAgUHJvcGVydHlPZmZzZXQgYnlJZFNlbGZPZmZzZXQ7CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBieUlkU2VsZk9mZnNldCk7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
KTsgfQogICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgfSBieUlkU2VsZjsKICAgICAgICAgUG9seW1vcnBoaWNB
Y2Nlc3MqIHN0dWI7CiAgICAgfSB1OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHZt
LmdldFN0cnVjdHVyZShtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIH0KKyAgICBT
dHJ1Y3R1cmVJRCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAwIH07CiBwcml2YXRlOgog
ICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIC8vIFJlcHJlc2VudHMg
dGhvc2Ugc3RydWN0dXJlcyB0aGF0IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nlc3NDYXNlcyBp
biB0aGUgUG9seW1vcnBoaWNBY2Nlc3MuCkBAIC0zNTIsNiArMzY0LDcgQEAgcHVibGljOgogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2RlUHRyOwog
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVQdHIoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1fY29kZVB0cik7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mRG9uZUxvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
cnVjdHVyZVN0dWJJbmZvLCBkb25lTG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlNsb3dQYXRoU3RhcnRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihT
dHJ1Y3R1cmVTdHViSW5mbywgc2xvd1BhdGhTdGFydExvY2F0aW9uKTsgfQogICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFN0cnVjdHVyZVN0dWJJbmZvLCBtX3Nsb3dPcGVyYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkNvdW50ZG93bigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1
cmVTdHViSW5mbywgY291bnRkb3duKTsgfQpAQCAtNDQ3LDYgKzQ2MCwxNyBAQCBpbmxpbmUgYXV0
byBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1
dEtpbmQgcHV0S2luZDsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtp
bmQgeyBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9k
ZSB7IEVDTUFNb2RlOjpzbG9wcHkoKSB9OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8v
IFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNo
ZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNh
Y2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRp
b247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRo
U3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5j
cHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dXBlclNhbXBsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgcHJp
bnRTdXBlclNhbXBsZXJTdGF0ZSgpCiAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAxMDAuMCAqIGlu
IC8gKGluICsgb3V0KTsKICAgICBpZiAocGVyY2VudGFnZSAhPSBwZXJjZW50YWdlKQogICAgICAg
ICBwZXJjZW50YWdlID0gMC4wOwotICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3Vw
ZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJQZXJj
ZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIiVcbiIp
OwogfQogCiB2b2lkIGVuYWJsZVN1cGVyU2FtcGxlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlVu
bGlua2VkQ29kZUJsb2NrLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNs
dWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVj
dHMuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKQEAgLTc4LDYgKzc5LDggQEAgVW5saW5rZWRD
b2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgICAgICBjcmVhdGVSYXJlRGF0YUlm
TmVjZXNzYXJ5KGxvY2tlcik7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fcHJpdmF0ZUJyYW5kUmVx
dWlyZW1lbnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQ6
Ok5lZWRlZCk7CiAgICAgfQorCisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVz
aG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAo
KSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpAQCAtMzE2LDYgKzMxOSw0OCBA
QCBpbnQgVW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzCiAgICAgcmV0dXJuIG1f
b3V0T2ZMaW5lSnVtcFRhcmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAorI2lmIEFTU0VS
VF9FTkFCTEVECitib29sIFVubGlua2VkQ29kZUJsb2NrOjpoYXNJZGVudGlmaWVyKFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpCit7CisgICAgaWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSA+IDEwMCkg
eworICAgICAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpICE9IG1fY2FjaGVkSWRlbnRpZmll
clVpZHMuc2l6ZSgpKSB7CisgICAgICAgICAgICBMb2NrZXIgbG9ja2VyKG1fY2FjaGVkSWRlbnRp
ZmllclVpZHNMb2NrKTsKKyAgICAgICAgICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBj
YWNoZWRJZGVudGlmaWVyVWlkczsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50aWZpZXIgPSB0aGlzLT5pZGVudGlmaWVyKGkpOworICAgICAgICAgICAg
ICAgIGNhY2hlZElkZW50aWZpZXJVaWRzLmFkZChpZGVudGlmaWVyLmltcGwoKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAg
ICBtX2NhY2hlZElkZW50aWZpZXJVaWRzID0gV1RGTW92ZShjYWNoZWRJZGVudGlmaWVyVWlkcyk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5jb250
YWlucyh1aWQpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJP
ZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkg
PT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKyNlbmRpZgorCitpbnQzMl90IFVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JK
SVQoaW50MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRPcHRpbWl6ZSgpKSB7Cisg
ICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9s
ZDsKKyAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAq
IDQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAv
IDI7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0aHJlc2hv
bGQ7Cit9CisKKwogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxl
cygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWV0YWRhdGEtPmlzRmluYWxpemVkKCkpOwpA
QCAtMzM3LDE1ICszODIsMjUgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFy
ZWRQcgogICAgIGlmIChtX21ldGFkYXRhLT5oYXNNZXRhZGF0YSgpKSB7CiAgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mQXJyYXlQcm9maWxlcyA9IDA7CiAKLSNkZWZpbmUgQ09VTlQoX19vcCkgXAot
ICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxf
X29wPigpOworI2RlZmluZSBDT1VOVChfX29wKSBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9t
ZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOwogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lU
SF9BUlJBWV9QUk9GSUxFKENPVU5UKQogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElO
VF9DQUxMX0xJTktfSU5GTyhDT1VOVCkKICN1bmRlZiBDT1VOVAogICAgICAgICBudW1iZXJPZkFy
cmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9yTmV4dD4oKTsK
ICAgICAgICAgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8
T3BHZXRCeUlkPigpOwotCiAgICAgICAgIG1fYXJyYXlQcm9maWxlcyA9IEZpeGVkVmVjdG9yPFVu
bGlua2VkQXJyYXlQcm9maWxlPihudW1iZXJPZkFycmF5UHJvZmlsZXMpOworCisgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mQmluYXJ5QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5UKF9f
b3ApIG51bWJlck9mQmluYXJ5QXJpdGhQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVz
PF9fb3A+KCk7CisgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0JJTkFSWV9BUklUSF9QUk9G
SUxFKENPVU5UKQorI3VuZGVmIENPVU5UCisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcyA9
IEZpeGVkVmVjdG9yPEJpbmFyeUFyaXRoUHJvZmlsZT4obnVtYmVyT2ZCaW5hcnlBcml0aFByb2Zp
bGVzKTsKKworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyA9IDA7
CisjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzICs9IG1fbWV0
YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhf
VU5BUllfQVJJVEhfUFJPRklMRShDT1VOVCkKKyN1bmRlZiBDT1VOVAorICAgICAgICBtX3VuYXJ5
QXJpdGhQcm9maWxlcyA9IEZpeGVkVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPihudW1iZXJPZlVu
YXJ5QXJpdGhQcm9maWxlcyk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgzMDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1
ZGUgIkRGR0V4aXRQcm9maWxlLmgiCisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2lu
Y2x1ZGUgIkV4cHJlc3Npb25SYW5nZUluZm8uaCIKICNpbmNsdWRlICJIYW5kbGVySW5mby5oIgog
I2luY2x1ZGUgIklkZW50aWZpZXIuaCIKQEAgLTY0LDYgKzY2LDcgQEAgY2xhc3MgVW5saW5rZWRD
b2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNsYXNzIFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsK
K2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKIGVudW0gY2xh
c3MgTGlua1RpbWVDb25zdGFudCA6IGludDMyX3Q7CiAKQEAgLTE3NSw2ICsxNzgsNyBAQCBwdWJs
aWM6CiAKICAgICBjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25z
dGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBjb25z
dCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudElu
ZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29u
c3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3Jl
Zy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
KSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBAIC0y
MDcsNiArMjExLDE1IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3Jp
cHRNb2RlKTsgfQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygp
IGNvbnN0OworICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5k
ZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIoKTsg
fQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbikKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gaW5z
dHJ1Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9u
c0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVn
aW4gJiYgaW5zdHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4gaW5z
dHJ1Y3Rpb24gLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CisgICAgdW5zaWduZWQgaW5zdHJ1
Y3Rpb25zU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLnNpemUoKTsgfQogCiAg
ICAgdW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVM
b2NhbHM7IH0KICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJz
OyB9CkBAIC0zMzQsMTAgKzM0NywyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFk
YXRhLT5zaXplSW5CeXRlcygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2li
bGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlu
cyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAg
ICAgICAgcmV0dXJuICFpc0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KICAgICB2b2lkIGFsbG9j
YXRlU2hhcmVkUHJvZmlsZXMoKTsKICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSYgdW5saW5rZWRW
YWx1ZVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlc1tpbmRl
eF07IH0KICAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSYgdW5saW5rZWRBcnJheVByb2ZpbGUodW5z
aWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlc1tpbmRleF07IH0KIAorI2lmIEFT
U0VSVF9FTkFCTEVECisgICAgYm9vbCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7
CisjZW5kaWYKKworICAgIGludDMyX3QgdGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xk
KTsKKwogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwg
Q29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9u
TW9kZT4pOwogCkBAIC0zOTcsNiArNDIxLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xl
eGljYWxTY29wZUZlYXR1cmVzIDogNDsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2NrIG1f
bG9jazsKKyAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX3VubGlua2VkQmFzZWxpbmVDb2Rl
OwogcHJpdmF0ZToKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlcyB7IDAgfTsKICAgICBTb3Vy
Y2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC00MTMsNyArNDM4LDYgQEAgcHJpdmF0ZToKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3M7CiAK
LQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJvZmls
ZTsKICNlbmRpZgpAQCAtNDU4LDYgKzQ4MiwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBy
ZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAgfQor
ICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQo
cGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNldCk7
CisgICAgfQorCisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5z
aWduZWQgaSkgeyByZXR1cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlB
cml0aFByb2ZpbGUmIHVuYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5h
cnlBcml0aFByb2ZpbGVzW2ldOyB9CisKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxs
aW50RXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7IH0KIAog
cHJpdmF0ZToKICAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5zdHJ1
Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PjsKQEAgLTQ2NSw4ICs0OTksMTYgQEAgcHJpdmF0ZToK
ICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZlY3RvcjxFeHBy
ZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5lRXhlY3V0aW9u
Q291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRW
YWx1ZVByb2ZpbGU+IG1fdmFsdWVQcm9maWxlczsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZEFy
cmF5UHJvZmlsZT4gbV9hcnJheVByb2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPEJpbmFyeUFyaXRo
UHJvZmlsZT4gbV9iaW5hcnlBcml0aFByb2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPFVuYXJ5QXJp
dGhQcm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKKworI2lmIEFTU0VSVF9FTkFCTEVECisg
ICAgTG9jayBtX2NhY2hlZElkZW50aWZpZXJVaWRzTG9jazsKKyAgICBIYXNoU2V0PFVuaXF1ZWRT
dHJpbmdJbXBsKj4gbV9jYWNoZWRJZGVudGlmaWVyVWlkczsKKyNlbmRpZgogCiBwcm90ZWN0ZWQ6
CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9u
IDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFk
YXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTUgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUpOwogICAgIH0K
IAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNldElu
TWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9p
czMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUx
NigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAgICBiYXNlVHlwZU9mZnNldCA9IHJvdW5kVXBU
b011bHRpcGxlT2YoYWxpZ25vZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSwgYmFzZVR5cGVP
ZmZzZXQpOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YodHlwZW5hbWUg
T3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KICAgICB1bnNpZ25lZCBudW1FbnRyaWVzKCk7CiAK
QEAgLTEwNyw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc19vZmZzZXQxNlRh
YmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAgICAg
dXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSwxMyArNDUsMTEgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogCiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1
bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNr
ZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9
IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3Rh
bE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNr
ZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQogICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCi0gICAgICAgICAg
ICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgY2xl
YXJCdWNrZXRzKCk7CiAgICAgfQogICAgIAogICAgIEVuY29kZWRKU1ZhbHVlKiBzcGVjRmFpbEJ1
Y2tldCh1bnNpZ25lZCBpKQpAQCAtNTksNiArNTcsMTIgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJh
c2UgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZCdWNrZXRzICsgaSA8IHRvdGFsTnVtYmVyT2ZC
dWNrZXRzKTsKICAgICAgICAgcmV0dXJuIG1fYnVja2V0cyArIG51bWJlck9mQnVja2V0cyArIGk7
CiAgICAgfQorCisgICAgdm9pZCBjbGVhckJ1Y2tldHMoKQorICAgIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCisgICAgICAgICAg
ICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICB9CiAgICAg
CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8odW5zaWduZWQgYnVja2V0KSBjb25zdAog
ICAgIHsKQEAgLTEyMyw4ICsxMjcsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0
dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8v
IHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kp
IHsKQEAgLTEzOSw3ICsxNDEsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29k
ZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxh
dGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTYxLDYgKzE2Myw3IEBAIHN0
cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJv
ZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAg
ICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4o
KSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBz
dHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmls
ZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklU
KQogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmgiCkBAIC0zNCw3ICszNSw5IEBACiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2VtZW50
LmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWVT
ZXQuaCIKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJKU0Nhc3QuaCIKKyNpbmNs
dWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGlsYXRpb24u
aCIKICNpbmNsdWRlICJSZWNvcmRlZFN0YXR1c2VzLmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgpA
QCAtNzAsNyArNzMsNyBAQCBzdHJ1Y3QgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24gewogICAgIFdy
aXRlQmFycmllcjxKU0NlbGw+IG1fdG87CiB9OwogICAgICAgICAKLWNsYXNzIENvbW1vbkRhdGEg
eworY2xhc3MgQ29tbW9uRGF0YSA6IHB1YmxpYyBNYXRoSUNIb2xkZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENvbW1vbkRhdGEpOwogcHVibGljOgogICAgIENvbW1vbkRhdGEoKQpAQCAt
MTE2LDYgKzExOSw3IEBAIHB1YmxpYzoKICAgICBGaXhlZFZlY3RvcjxDb2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQ+IG1fd2F0Y2hwb2ludHM7CiAgICAgRml4ZWRWZWN0b3I8QWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50PiBtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CiAgICAg
Rml4ZWRWZWN0b3I8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBtX2Fk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgIFJlY29yZGVk
U3RhdHVzZXMgcmVjb3JkZWRTdGF0dXNlczsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBt
X2p1bXBSZXBsYWNlbWVudHM7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZS5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5o
IgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZpc2lv
biAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgVHJh
Y2tlZFJlZmVyZW5jZXM7CiAKK3N0cnVjdCBTaW1wbGVKdW1wVGFibGU7CitzdHJ1Y3QgU3RyaW5n
SnVtcFRhYmxlOworCiBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSklUQ29tcGlsZXI7CkBAIC0x
MDEsNiArMTA0LDggQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gZmlu
ZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSBmaW5hbDsKIAogICAgIHVzaW5nIERpcmVjdEpJVENv
ZGU6OmluaXRpYWxpemVDb2RlUmVmRm9yREZHOworCisgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBj
VG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gY29tbW9uLm1fcGNUb0NvZGVPcmln
aW5NYXAuZ2V0KCk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENvbXBp
bGVyOyAvLyBBbGxvdyBKSVRDb21waWxlciB0byBjYWxsIHNldENvZGVSZWYoKS4KQEAgLTE0MCw2
ICsxNDUsOCBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxCeXRlY29kZUluZGV4LCBUcmlnZ2VyUmVh
c29uPiB0aWVyVXBFbnRyeVRyaWdnZXJzOwogCiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4g
bV9vc3JFbnRyeUJsb2NrOworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0
Y2hKdW1wVGFibGVzOworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdT
d2l0Y2hKdW1wVGFibGVzOwogICAgIHVuc2lnbmVkIG9zckVudHJ5UmV0cnk7CiAgICAgYm9vbCBh
YmFuZG9uT1NSRW50cnk7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgzMDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4NSwxMyArMTg1LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlu
a0J1ZmZlciYgbGlua0IKICAgICAKICAgICBtX2dyYXBoLnJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7
CiAKLSAgICBpZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSB8
fCAhbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmICgh
bV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAg
bV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKLSAgICAgICAg
aWYgKCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBt
X2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdU
Rk1vdmUobV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwotICAgIH0KKyAgICBBU1NFUlQobV9q
aXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQo
bV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKKyAgICBpZiAoIW1fZ3Jh
cGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgCisgICAgICAgIG1faml0Q29k
ZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlcyk7CisgICAgaWYgKCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0Vt
cHR5KCkpCisgICAgICAgIG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZSht
X2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7CiAKICAgICBmb3IgKEJhZzxTd2l0Y2hEYXRhPjo6
aXRlcmF0b3IgaXRlciA9IG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmJlZ2luKCk7ICEhaXRlcjsgKytp
dGVyKSB7CiAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqKml0ZXI7CkBAIC0xOTksMTIgKzE5
OCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAg
IGNhc2UgU3dpdGNoQ2hhcjoKICAgICAgICAgY2FzZSBTd2l0Y2hJbW06IHsKICAgICAgICAgICAg
IGlmICghZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9j
b2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHko
KSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVz
W2RhdGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2VkU3dpdGNoSnVtcFRhYmxl
KGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxl
SW5kZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1faml0
Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF07CiAgICAgICAg
ICAgICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNT
d2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0p
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNp
emUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCkpOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gbGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKTsgai0t
OykKQEAgLTIxOSwxMiArMjE4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZl
ciYgbGlua0IKIAogICAgICAgICBjYXNlIFN3aXRjaFN0cmluZzogewogICAgICAgICAgICAgaWYg
KCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCkuaXNFbXB0
eSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XS5pc0VtcHR5KCkpOwogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25zdCBVbmxpbmtl
ZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmlu
Z0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRh
YmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbZGF0YS5z
d2l0Y2hUYWJsZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8gY3RpRGVmYXVsdCA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91
Z2guYmxvY2stPmluZGV4XSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJs
ZS5tX2N0aU9mZnNldHMuc2l6ZSgpID09IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS5zaXpl
KCkgKyAxKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBsaW5rZWRUYWJsZS5tX2N0
aU9mZnNldHMpCkBAIC0zMzMsNyArMzMyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5r
QnVmZmVyJiBsaW5rQgogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRl
ci5kaWRCdWlsZE1hcHBpbmcoKSkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3Jp
Z2luTWFwKG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIpLCBsaW5rQnVmZmVyKSk7CisgICAgICAgIG1faml0Q29kZS0+Y29tbW9u
Lm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZN
b3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcik7CiB9CiAKIHN0YXRp
YyB2b2lkIGVtaXRTdGFja092ZXJmbG93Q2hlY2soSklUQ29tcGlsZXImIGppdCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0JiBzdGFja092ZXJmbG93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5
Nyw2IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSoKICAgICBBU1NF
UlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBB
U1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5q
aXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCiAgICAgaWYgKCFPcHRpb25z
Ojp1c2VPU1JFbnRyeVRvREZHKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3Miw5ICs3NzIsNiBAQCB2b2lk
IE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgCiAgICAgLy8gVGhlIHRhZyByZWdp
c3RlcnMgYXJlIG5lZWRlZCB0byBtYXRlcmlhbGl6ZSByZWNvdmVyaWVzIGJlbG93LgogICAgIGpp
dC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCi0gICAgaWYgKGV4aXQuaXNF
eGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKLQogICAgIGlmIChpbmxpbmVT
dGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCkgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSog
dG1wU2NyYXRjaCA9IHNjcmF0Y2ggKyBvcGVyYW5kcy50bXBJbmRleCgwKTsKICAgICAgICAgaml0
LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbk1hdGVyaWFsaXplT1NSRXhpdFNpZGVT
dGF0ZSk+KCZ2bSwgJmV4aXQsIHRtcFNjcmF0Y2gpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNp
b24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJE
RkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpJVC5o
IgpAQCAtMTE5LDEwICsxMjAsMTAgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKFZNJiB2bSwgQ0Nh
bGxIZWxwZQogICAgIGludDMyX3QgY2xpcHBlZFZhbHVlOwogICAgIHN3aXRjaCAoaml0LmNvZGVC
bG9jaygpLT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAg
Y2xpcHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xk
KGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAg
Y2xpcHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xk
KHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6
Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IFVwcGVyVGllckV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBw
ZWRUaHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKSwgdGFyZ2V0VmFsdWUp
OworICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlw
cGVkVGhyZXNob2xkKHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE0MiwxMSArMTQzLDgg
QEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVAogewogICAgIGNhbGxl
cklzTExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwog
Ci0gICAgaWYgKGNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgewotICAgICAgICBpZiAo
IWNhbGxlcklzTExJbnQpCi0gICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+
bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKKyAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKQogICAgICAgICByZXR1cm4gTExJbnQ6OmNoZWNrcG9pbnRPU1JFeGl0RnJvbUlu
bGluZWRDYWxsVHJhbXBvbGluZVRodW5rKCkuY29kZSgpOwotICAgIH0KIAogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0OwogCkBAIC0xOTgsOCArMTk2
LDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVAogI3VuZGVmIExM
SU5UX1JFVFVSTl9MT0NBVElPTgogCiAgICAgfSBlbHNlIHsKLSAgICAgICAgYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7Ci0KICAgICAgICAgc3dp
dGNoICh0cnVlQ2FsbGVyQ2FsbEtpbmQpIHsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6
OkNhbGw6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CkBAIC0zMTMs
NiArMzA5LDEwIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAg
ICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFz
ZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+
bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGlu
ZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAg
ICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNs
b3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6
cGJHUFIpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJs
b2NrRm9yKCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFi
bGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ss
IEpJVDo6c19tZXRhZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVK
SVRDb25zdGFudFBvb2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxp
bmVDb2RlQmxvY2ssIEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw3ICs0MDQsOCBAQCB2
b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTElu
dDo6UmVnaXN0ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5y
ZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgY29kZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsK
KyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0Zv
ckV4aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNl
bGluZUpJVENvbnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CiAKICAgICAgICAg
Qnl0ZWNvZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
KCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5h
dGlvbjsKQEAgLTQyMCwxMiArNDIxLDE2IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZN
JiB2bSwgQ0NhbGwKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9T
UkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKLSAgICBqaXQuYWRk
UHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKGNvZGVCbG9ja0ZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgeworICAgICAgICBBU1NFUlQoIVJlZ2lz
dGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhMTEludDo6UmVnaXN0ZXJz
OjpwY0dQUikpOworICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSwgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3Jh
dGNoR1BSKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSk7CisKICAgICAgICAgLy8gU2luY2Ugd2Un
cmUganVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2gu
CiAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgdm0uYWRk
cmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSk7CiAgICAgfQotICAgIAorCisgICAgaml0LmFkZFB0
cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZv
cihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKICAg
ICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQ
UkluZm86OnJlZ1QyKTsKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0
clRhZyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50
cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMu
aCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIK
ICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCkBAIC0yODY5LDcgKzI4NzAsNyBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRmluZFN3CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
IGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzRG91YmxlKCkpOwogICAgIGRv
dWJsZSBhc0RvdWJsZSA9IHZhbHVlLmFzRG91YmxlKCk7CkBAIC0yODkwLDcgKzI4OTEsNyBAQCBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZn
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIHJldHVybiBsaW5rZWRUYWJs
ZS5jdGlGb3JWYWx1ZSgqdW5saW5rZWRUYWJsZSwgc3RySW1wbCkuZXhlY3V0YWJsZUFkZHJlc3M8
Y2hhcio+KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzMwLDYgKzczMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6
OmluUGFpcihjYWxsZWVUYWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1
ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZm
bGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
OwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsg
KytpKSB7CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJB
cmdDaGlsZChub2RlLCBpICsgMSk7CkBAIC04ODksNyArODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBz
bG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJl
ZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMg
PSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZd
IHsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAg
ICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI4LDYg
KzgyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQ
UiwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51
bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9
IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0g
bV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAg
ICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgaSArIDEpOwpAQCAtOTc5LDcgKzk4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKE5vZGUqIG5vZGUKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNl
czsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAg
ICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9y
VGFpbENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICsz
OTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBK
SVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRU
eXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwg
dXNlZFJlZ2lzdGVycywKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJ
VCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2Vk
UmVnaXN0ZXJzLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpT
VmFsdWVSZWdzOjpwYXlsb2FkT25seShwcm9wZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQ
UlJlZywgc3R1YkluZm9HUFIpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9s
ID0gdHJ1ZTsKIApAQCAtNDkwNSw3ICs0OTA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlQWRkKE5vZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2pp
dC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5
dGVjb2RlSW5kZXgoKTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJh
c2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVj
b2RlSW5kZXgpOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRK
SVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmppdENv
ZGUoKS0+Y29tbW9uLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNo
aW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVw
YXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGQ7CiAgICAgCkBAIC00OTg5LDcgKzQ5
ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVTdWIoTm9kCiAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFy
aXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUU3ViSUMq
IHN1YklDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7Cisg
ICAgSklUU3ViSUMqIHN1YklDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUU3ViSUMo
YXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZh
bHVlU3ViT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRp
b25WYWx1ZVN1YjsKIApAQCAtNTU3MSw3ICs1NTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlTmVnYXRlKAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBt
X2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmJ5dGVjb2RlSW5kZXgoKTsKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
YmFzZWxpbmVDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRl
Y29kZUluZGV4KTsKLSAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRk
SklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5qaXRD
b2RlKCktPmNvbW1vbi5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRj
aGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5v
blJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlOwogICAgIGNvbXBpbGVN
YXRoSUMobm9kZSwgbmVnSUMsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0
aW9uKTsKQEAgLTU4MTUsNyArNTgxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVW
YWx1ZU11bChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3Jh
cGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29k
ZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUlu
ZGV4KTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTXVs
SUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5qaXRDb2RlKCkt
PmNvbW1vbi5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1
bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hp
bmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwogCkBAIC0xNDc3MCw3ICsxNDc3MCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3Bl
UmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCks
IGNhbGxTaXRlSW5kZXgpOworICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNo
YWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChu
b2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3Bw
CShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBp
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBjb21waWxlKFN0
YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogCiAgICAgaWYgKHZtLnNob3VsZEJ1aWxkZXJQQ1Rv
Q29kZU9yaWdpbk1hcHBpbmcoKSkgewogICAgICAgICBCMzo6UENUb09yaWdpbk1hcCBvcmlnaW5N
YXAgPSBzdGF0ZS5wcm9jLT5yZWxlYXNlUENUb09yaWdpbk1hcCgpOwotICAgICAgICBjb2RlQmxv
Y2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBD
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZp
bmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcikpOworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21t
b24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBD
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZp
bmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcik7CiAgICAgfQogCiAgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNFbnRyeVB0clRhZz4gbGFiZWwgPSBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZm
ZXItPmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oc3RhdGUucHJvYy0+Y29kZSgpLmVudHJ5cG9p
bnRMYWJlbCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAko
cmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDggQEAgcHVibGljOgogICAgIERGRzo6Q29t
bW9uRGF0YSogZGZnQ29tbW9uKCkgb3ZlcnJpZGU7CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjb21t
b25EYXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVENvZGUsIGNvbW1vbik7
IH0KICAgICB2b2lkIHNocmlua1RvRml0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIG92ZXJy
aWRlOworCisgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gY29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKICAg
ICBERkc6OkNvbW1vbkRhdGEgY29tbW9uOwogICAgIFZlY3RvcjxPU1JFeGl0PiBtX29zckV4aXQ7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDI4MzAx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDE0ICs1Miw2IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICBncmFw
aC5yZWdpc3RlckZyb3plblZhbHVlcygpOwogCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB7Ci0g
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAg
ICAgICBBU1NFUlQoY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmVuc3Vy
ZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKLSAgICB9Ci0j
ZW5kaWYKLQogICAgIC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0
aGlzIGVudHJ5cG9pbnQgdG90YWxseSBkaWZmZXJlbnRseQogICAgIC8vIGRlcGVuZGluZyBvbiB3
aGV0aGVyIHdlJ3JlIGRvaW5nIE9TUiBlbnRyeSBvciBub3QuCiAgICAgQ0NhbGxIZWxwZXJzIGpp
dChjb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBA
CiAjaW5jbHVkZSAiSlNTZXRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAj
aW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAu
aCIKICNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIK
ICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKQEAgLTIzMjAsNiArMjMyMSwx
OCBAQCBwcml2YXRlOgogICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVFN1YkdlbmVyYXRv
cj4oYXJpdGhQcm9maWxlLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlv
bik7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUg
PSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRH
ZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVEFkZElDKiBhZGRNYXRoSUMo
REZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyBy
ZXR1cm4gY29tbW9uLmFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6
aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBz
dGF0aWMgSklUTXVsSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5
QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUTXVsSUMocHJvZmls
ZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJh
dG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVROZWdJQyogYWRkTWF0aElDKERGRzo6
Q29tbW9uRGF0YSYgY29tbW9uLCBVbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4g
Y29tbW9uLmFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2Ft
ZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMg
SklUU3ViSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQ
cm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUU3ViSUMocHJvZmlsZSk7IH0K
KwogICAgIHZvaWQgY29tcGlsZVZhbHVlTXVsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1h
bnRpYyk7CkBAIC0yMzkxLDcgKzI0MDQsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAgICAg
ICAgICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUg
PSBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAg
SklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRN
YXRoSUM8R2VuZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVFVuYXJ5
TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5q
aXRDb2RlLT5jb21tb24sIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5t
X2dlbmVyYXRvciA9IEdlbmVyYXRvcihKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLCBKU1Zh
bHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKIAogICAgICAg
ICAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwpAQCAtMjUwMCw3ICsy
NTEzLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dl
bmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5l
cmF0b3I+KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFy
aXRoUHJvZmlsZSk7CisgICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4q
IG1hdGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRDb2RlLT5jb21tb24sIGFy
aXRoUHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVy
YXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3By
KCkpLAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBK
U1ZhbHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkpLCBwYXJhbXMuZnBTY3JhdGNoKDApLAogICAgICAg
ICAgICAgICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsK
QEAgLTQzMTcsNyArNDMzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNj
cmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9
IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQu
Y29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0
ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJs
b2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4
LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5m
b0dQUik7CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CkBAIC0xMDI4NSw2ICsxMDI5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1BbGxvY2F0
ZWRBcmdzOyArK2kpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFw
cGVuZChWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAg
ICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9j
aygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBq
aXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhzZW1hbnRpY05vZGVPcmlnaW4pOwpAQCAt
MTA0NDMsMTMgKzEwNDU3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZm
bGVEYXRhLmFyZ3MuYXBwZW5kKHBhcmFtc1sxICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOwog
CiAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bUFyZ3M7Cisg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogCiAg
ICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2Nr
KCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7
CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFp
bENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0
aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdU
MCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZm
bGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZs
ZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICAg
ICAgfSk7CkBAIC0xMDc5Miw3ICsxMDgwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpV
c2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxM
aW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAg
ICAgICAgICAgICAgICAgICB9KTsKQEAgLTExMDczLDcgKzExMDg4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1Rh
aWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBD
YWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86
OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENh
bGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgzMDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MTMsMjggKzQxMywxNiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1
YihWTSYgdm0sIHVuc2lnbmVkCiAKICAgICBSZWdpc3RlclNldCBhbGxGVExDYWxsZWVTYXZlcyA9
IFJlZ2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAgICAgY29uc3QgUmVnaXN0
ZXJBdE9mZnNldExpc3QqIGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiB2bUNhbGxl
ZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAg
IFJlZ2lzdGVyU2V0IHZtQ2FsbGVlU2F2ZXNUb1NraXAgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdp
c3RlcnMoKTsKLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICBq
aXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNh
dmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICB9CiAKICAg
ICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0g
cmVnLm5leHQoKSkgewogICAgICAgICBpZiAoIWFsbEZUTENhbGxlZVNhdmVzLmdldChyZWcpKSB7
Ci0gICAgICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghdm1DYWxsZWVTYXZlcy0+ZmluZChyZWcpKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVkIHVud2luZEluZGV4ID0g
Y29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCktPmluZGV4T2YocmVnKTsKICAgICAgICAg
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldCogYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA9IGJhc2VsaW5l
Q2FsbGVlU2F2ZXMtPmZpbmQocmVnKTsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCogdm1DYWxs
ZWVTYXZlID0gbnVsbHB0cjsgCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigp
KQotICAgICAgICAgICAgdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChyZWcpOwog
CiAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkgewogICAgICAgICAgICAgR1BSUmVnIHJlZ1RvTG9h
ZCA9IGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPyBHUFJJbmZvOjpyZWdUMCA6IHJlZy5ncHIoKTsK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1RvTG9hZCAhPSBHUFJJbmZvOjpyZWdUMSk7
CiAKICAgICAgICAgICAgIGlmICh1bndpbmRJbmRleCA9PSBVSU5UX01BWCkgewogICAgICAgICAg
ICAgICAgIC8vIFRoZSBGVEwgY29tcGlsYXRpb24gZGlkbid0IHByZXNlcnZlIHRoaXMgcmVnaXN0
ZXIuIFRoaXMgbWVhbnMgdGhhdCBpdCBhbHNvCkBAIC00NTIsOCArNDQwLDYgQEAgc3RhdGljIHZv
aWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAogCiAgICAgICAgICAgICBpZiAoYmFzZWxp
bmVSZWdpc3Rlck9mZnNldCkKICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdp
c3RlciwgYmFzZWxpbmVSZWdpc3Rlck9mZnNldC0+b2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlm
ICh2bUNhbGxlZVNhdmUgJiYgIXZtQ2FsbGVlU2F2ZXNUb1NraXAuZ2V0KHZtQ2FsbGVlU2F2ZS0+
cmVnKCkpKQotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHJlZ1RvTG9hZCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEZQUlJlZyBmcFJlZ1RvTG9hZCA9IGJhc2Vs
aW5lUmVnaXN0ZXJPZmZzZXQgPyBGUFJJbmZvOjpmcFJlZ1QwIDogcmVnLmZwcigpOwogCkBAIC00
NjQsMTkgKzQ1MCw5IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQK
IAogICAgICAgICAgICAgaWYgKGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAg
ICAgaml0LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhN
YWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZz
ZXQtPm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAodm1DYWxsZWVTYXZlICYmICF2bUNhbGxl
ZVNhdmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNhdmUtPnJlZygpKSkKLSAgICAgICAgICAgICAgICBq
aXQuc3RvcmVEb3VibGUoZnBSZWdUb0xvYWQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICBSZWdpc3RlckF0
T2Zmc2V0KiB2bUNhbGxlZVNhdmUgPSB2bUNhbGxlZVNhdmVzLT5maW5kKEdQUkluZm86Om51bWJl
clRhZ1JlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNh
dmUtPm9mZnNldCgpKSk7Ci0KLSAgICAgICAgdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+
ZmluZChHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlNjQo
R1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BS
SW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKLSAgICB9Ci0KICAgICBzaXpl
X3QgYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVC
bG9jay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAKICAgICBpZiAoZXhp
dC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZp
c2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRh
LnJiCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjggQEAgY2xhc3MgTWV0YWRhdGEKICAg
ICBkZWYgc3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVm
IGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBnZW5lcmF0ZU9mZnNl
dE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKKyAgICAgICAgICAgIGZpZWxkTmFtZXMu
bWFwIGRvIHxmaWVsZE5hbWV8CisgICAgICAgICAgICAgICAgIiN7cHJlZml4fXN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uLTFdfSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9Igor
ICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKKyAgICAgICAgZW5kCisKKyAgICAgICAgZGVmIGNv
bnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGZpZWxkTmFtZXMpCiAgICAgICAgICAgICBmaWVs
ZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/
IEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZp
ZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCisgICAgICAgICAgICAg
ICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAn
LCB0eXBlLCBmaWVsZE5hbWVzKX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9f
c307IgorICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAg
ICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVzaChmaWVsZE5hbWUpCisgICAgICAgICAgICAgICAg
ICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgogICAgICAgICAgICAg
ICAgIGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAg
ICAgZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBm
aWVsZE5hbWVzID0gW10KKyAgICAgICAgcHJlZml4ID0gIiAgICAgICAgIgorICAgICAgICBmaWVs
ZHMgPSBjb252ZXJ0RmllbGRzKHByZWZpeCwgQGZpZWxkcywgZmllbGROYW1lcykKKyAgICAgICAg
ZmllbGRzID0gZmllbGRzICsgIlxuIiArIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4
LCBmaWVsZE5hbWVzKQogCiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFs
aXplcnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzY3LDYgKzM2NywyOCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6bG9hZFByb3Bl
cnR5KEdQUlJlCiAgICAgICAgIHJlc3VsdCk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpz
dG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zm
c2V0LCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBKdW1wIGlzSW5saW5lID0gYnJhbmNoMzIoTGVz
c1RoYW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAg
CisgICAgbG9hZFB0cihBZGRyZXNzKG9iamVjdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaCk7CisgICAgbmVnMzIob2Zmc2V0KTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihv
ZmZzZXQsIG9mZnNldCk7CisgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKKyAgICAKKyAgICBpc0lu
bGluZS5saW5rKHRoaXMpOworICAgIGFkZFB0cigKKyAgICAgICAgVHJ1c3RlZEltbTMyKAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEpTT2JqZWN0KSkgLQorICAgICAg
ICAgICAgKHN0YXRpY19jYXN0PGludDMyX3Q+KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDIpICog
c3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpLAorICAgICAgICBv
YmplY3QsIHNjcmF0Y2gpOworICAgIAorICAgIHJlYWR5LmxpbmsodGhpcyk7CisgICAgCisgICAg
c3RvcmVWYWx1ZSh2YWx1ZSwKKyAgICAgICAgQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSk7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVyZShWTSYg
dm0sIFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRj
aCkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjk4LDggKzcyMCwxMyBAQCB2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzCiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpl
bWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
TGlua0luZm8qIGluZm8pCiB7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZv
OjpyZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86
OnJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZt
LCBpbmZvKTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhv
dXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCit7CisgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxs
ID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjgzMDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjM0LDggKzIzNCw5IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKLSAg
ICAvLyBOb3RlIHRoYXQgdGhpcyBjbG9iYmVycyBvZmZzZXQuCisgICAgLy8gTm90ZSB0aGF0IHRo
ZXNlIGNsb2JiZXIgb2Zmc2V0LgogICAgIHZvaWQgbG9hZFByb3BlcnR5KEdQUlJlZyBvYmplY3Qs
IEdQUlJlZyBvZmZzZXQsIEpTVmFsdWVSZWdzIHJlc3VsdCk7CisgICAgdm9pZCBzdG9yZVByb3Bl
cnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBHUFJS
ZWcgc2NyYXRjaCk7CiAKICAgICB2b2lkIG1vdmVWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3Mgc3JjUmVn
cywgSlNWYWx1ZVJlZ3MgZGVzdFJlZ3MpCiAgICAgewpAQCAtMzc5LDE1ICszODAsMjYgQEAgcHVi
bGljOgogI2VuZGlmCiAgICAgfQogCisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlGcmFtZSwgR1BSUmVnIHNj
cmF0Y2gpCisgICAgeworI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAor
ICAgICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCBzY3JhdGNoKTsKKyAgICAgICAgY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHNjcmF0Y2gpOworI2Vs
c2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOworICAgICAgICBVTlVTRURf
UEFSQU0oc2NyYXRjaCk7CisjZW5kaWYKKyAgICB9CisKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZl
c1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1l
KQogICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICAg
ICAgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfTsKICAgICAgICAgR1BSUmVnIHRlbXAxID0gdXNl
ZFJlZ2lzdGVycy5nZXRGcmVlR1BSKDApOwotICAgICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1l
LCB0ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVySW1wbCh0ZW1wMSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKHRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKICNlbHNlCiAgICAgICAgIFVO
VVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5
RnJhbWUpOwogI2VuZGlmCiAgICAgfQogICAgIApAQCAtMTcyMCw2ICsxNzMyLDcgQEAgcHVibGlj
OgogICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92
aW5nR2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtl
U3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JD
Q2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRD
b2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2Vs
aW5lSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCisKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIK
KyNpbmNsdWRlICJKdW1wVGFibGUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworSklUQWRkSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUQWRkSUMo
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fYWRkSUNzLmFkZChh
cml0aFByb2ZpbGUpOyB9CitKSVRNdWxJQyogTWF0aElDSG9sZGVyOjphZGRKSVRNdWxJQyhCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRo
UHJvZmlsZSk7IH0KK0pJVFN1YklDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVFN1YklDKEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9m
aWxlKTsgfQorSklUTmVnSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTmVnSUMoVW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7
IH0KKwordm9pZCBNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVy
KQoreworICAgIG1fYWRkSUNzID0gV1RGTW92ZShvdGhlci5tX2FkZElDcyk7CisgICAgbV9tdWxJ
Q3MgPSBXVEZNb3ZlKG90aGVyLm1fbXVsSUNzKTsKKyAgICBtX25lZ0lDcyA9IFdURk1vdmUob3Ro
ZXIubV9uZWdJQ3MpOworICAgIG1fc3ViSUNzID0gV1RGTW92ZShvdGhlci5tX3N1YklDcyk7Cit9
CisKK0Jhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRh
Zz4gY29kZSwgQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjaykKKyAgICA6IERp
cmVjdEpJVENvZGUoV1RGTW92ZShjb2RlKSwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklUKQorICAgICwgTWF0aElDSG9sZGVyKCkKK3sgfQorCitCYXNlbGluZUpJVENvZGU6On5C
YXNlbGluZUpJVENvZGUoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisj
aW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVuYXJ5QXJpdGhQcm9m
aWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgU2ltcGxlSnVt
cFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3MgTWF0aElDSG9sZGVyIHsK
K3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKTsKKyAg
ICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTXVs
SUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1YklDKiBhZGRK
SVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklUTmVnSUMo
VW5hcnlBcml0aFByb2ZpbGUqKTsKKworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRk
SUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25l
Z0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKworY2xhc3MgSklUQ29uc3Rh
bnRQb29sIHsKK3B1YmxpYzoKKyAgICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisgICAg
ZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIEdsb2JhbE9iamVjdCwKKyAgICAg
ICAgQ2FsbExpbmtJbmZvLAorICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAgRnVu
Y3Rpb25EZWNsLAorICAgICAgICBGdW5jdGlvbkV4cHIsCisgICAgfTsKKworICAgIHN0cnVjdCBW
YWx1ZSB7CisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgUGFja2VkUHRyPHZvaWQ+IHBheWxv
YWQ7CisgICAgfTsKKworICAgIEpJVENvbnN0YW50UG9vbCgpID0gZGVmYXVsdDsKKyAgICBKSVRD
b25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAgICBKSVRDb25zdGFu
dFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworCisgICAgQ29u
c3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIpCisgICAgeworICAg
ICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXplKCk7CisgICAgICAgIG1fY29u
c3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0
YW50cy5zaXplKCk7IH0KKyAgICBWYWx1ZSBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9j
b25zdGFudHNbaV07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fY29uc3RhbnRz
OworfTsKKworCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSwg
cHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2RlKENvZGVS
ZWY8SlNFbnRyeVB0clRhZz4sIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sp
OworICAgIH5CYXNlbGluZUpJVENvZGUoKSBvdmVycmlkZTsKKyAgICBQQ1RvQ29kZU9yaWdpbk1h
cCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2lu
TWFwLmdldCgpOyB9CisKKyAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRD
YWxsczsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgIEJh
ZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgIEZp
eGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZpeGVk
VmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAgIEpJ
VENvZGVNYXAgbV9qaXRDb2RlTWFwOworICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9v
bDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmln
aW5NYXA7CisgICAgYm9vbCBtX2lzU2hhcmVhYmxlIHsgdHJ1ZSB9OworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxh
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJ
VFBsYW4uY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgc2l6
ZV90IEJhc2VsaW5lSklUUGxhbjo6Y29kZVNpemUoKSBjb25zdAogCiBDb21waWxhdGlvblJlc3Vs
dCBCYXNlbGluZUpJVFBsYW46OmZpbmFsaXplKCkKIHsKLSAgICBDb21waWxhdGlvblJlc3VsdCBy
ZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgIENvbXBpbGF0aW9uUmVz
dWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKG1fY29kZUJsb2NrKTsKICAg
ICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CiAgICAgICAg
IENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNv
bXBpbGF0aW9uIGZhaWxlZCIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0Nh
bGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ND
YWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDYgQEAg
dm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sbwogICAgIHN0b3JlUHRyKHNj
b3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgc2NvcGUpKSk7CiB9CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywg
R1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4KQotewotICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRy
ZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwg
ZnJhbWUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Ci0gICAgc3RvcmVWYWx1ZSh0aGlzUmVn
cywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQ
YWNrZXQsIHRoaXNWYWx1ZSkpKTsKLSAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwot
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsK
LSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxs
U2l0ZUluZGV4KSkpOwotfQotCiB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldChWTSYgdm0sIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFy
Z0dQUiwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAgIFNoYWRvd0NoaWNrZW4qIHNoYWRvd0NoaWNr
ZW4gPSB2bS5zaGFkb3dDaGlja2VuKCk7CkBAIC03Miw2ICs2MiwyOCBAQCB2b2lkIENDYWxsSGVs
cGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhCiAgICAgc3RvcmVQdHIoc2NyYXRjaDIsIEFkZHJl
c3Moc2NyYXRjaDFOb25BcmdHUFIpKTsKIH0KIAorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJs
b2NrVHlwZT4KK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldElt
cGwoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29w
ZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkK
K3sKKyAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkp
OworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWls
TWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0No
aWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOworICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0
aGlzVmFsdWUpKSk7CisgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKKyAgICBzdG9y
ZVB0cihjb2RlQmxvY2ssIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKK30KKwordm9p
ZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIg
Y29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93
Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2Rl
QmxvY2ssIGNhbGxTaXRlSW5kZXgpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93
Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1Jl
Z3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNr
ZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwogdm9p
ZCBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJ
bnRlcm5hbFB0clRhZz4gd2hlcmUsIFNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPiBl
bWl0Q29kZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNp
b24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtODQwLDcgKzg0MCwxNCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2Ug
b3BlcmF0aW9ucyBjbG9iYmVyIGFsbCB2b2xhdGlsZSByZWdpc3RlcnMuIFRoZXkgYXNzdW1lIHRo
YXQgdGhlcmUgaXMgcm9vbSBvbiB0aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sgdG8gbWFyc2hhbGwg
Y2FsbCBhcmd1bWVudHMuCiAgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQo
R1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NvcGUpOwotICAg
IHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRl
eCk7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cisg
ICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tl
dCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CitwdWJsaWM6CisgICAgdm9pZCBs
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVn
cyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2Nv
cGUsIEdQUlJlZyBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisKICAg
ICAvLyBMZWF2ZXMgYmVoaW5kIGEgcG9pbnRlciB0byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0
ZSB0byBpbiBzaGFkb3dQYWNrZXQuCiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0
KFZNJiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJS
ZWcgc2NyYXRjaDIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDggKzM3LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIENhbGxGcmFtZVNodWZm
bGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7
CisgICAgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZl
UmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlv
bnMpCit7CiAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycyB7IFJlZ2lzdGVyU2V0
Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB9OwotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRM
aXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJTYXZlTG9jYXRpb25z
LT5zaXplKCk7ICsraSkgewogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5IHsgcmVnaXN0
ZXJTYXZlTG9jYXRpb25zLT5hdChpKSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MywxMSArNDMsMTMgQEAgcHVibGljOgogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5
PiBhcmdzOwogICAgIHVuc2lnbmVkIG51bUxvY2FscyB7IFVJTlRfTUFYIH07CiAgICAgdW5zaWdu
ZWQgbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVy
cyB7IFVJTlRfTUFYIH07IC8vIE9uIG91ciBtYWNoaW5lIGZyYW1lLgogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgUmVnaXN0ZXJNYXA8VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOwogICAgIEdQUlJl
ZyBudW1iZXJUYWdSZWdpc3RlciB7IEludmFsaWRHUFJSZWcgfTsKIAogICAgIHZvaWQgc2V0dXBD
YWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayopOworICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZl
UmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0Kik7CiAjZW5kaWYKICAgICBWYWx1
ZVJlY292ZXJ5IGNhbGxlZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDEzICszOCwxMyBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0Nh
CiAgICAgOiBtX2ppdChqaXQpCiAgICAgLCBtX29sZEZyYW1lKGRhdGEubnVtTG9jYWxzICsgQ2Fs
bGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQogICAgICwgbV9uZXdGcmFt
ZShkYXRhLmFyZ3Muc2l6ZSgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMsIG51
bGxwdHIpCi0gICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXpl
SW5SZWdpc3RlcnMKLSAgICAgICAgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoaml0
LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpKQorICAgICwgbV9hbGlnbmVkT2xkRnJhbWVT
aXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgcm91bmRBcmd1bWVudENvdW50
VG9BbGlnbkZyYW1lKGRhdGEubnVtUGFyYW1ldGVycykpCiAgICAgLCBtX2FsaWduZWROZXdGcmFt
ZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMKICAgICAgICAgKyByb3VuZEFy
Z3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5hcmdzLnNpemUoKSkpCiAgICAgLCBtX2ZyYW1l
RGVsdGEobV9hbGlnbmVkTmV3RnJhbWVTaXplIC0gbV9hbGlnbmVkT2xkRnJhbWVTaXplKQogICAg
ICwgbV9sb2NrZWRSZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpKQogICAgICwg
bV9udW1QYXNzZWRBcmdzKGRhdGEubnVtUGFzc2VkQXJncykKKyAgICAsIG1fbnVtUGFyYW1ldGVy
cyhkYXRhLm51bVBhcmFtZXRlcnMpCiB7CiAgICAgLy8gV2UgYXJlIGFsbG93ZWQgYWxsIHRoZSB1
c3VhbCByZWdpc3RlcnMuLi4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVyczsgaS0tOyApCkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBDYWxsRnJhbWVTaHVm
Zmxlcjo6cHJlcGFyZUZvclRhaWxDYQogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
ICsgUGF5bG9hZE9mZnNldCksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBhcmd1bWVudENvdW50T0sgPQogICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3dPckVxdWFsLCBtX25ld0ZyYW1lQmFzZSwKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkp
OworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX251bVBhcmFtZXRl
cnMpKTsKICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNr
QWxpZ25tZW50UmVnaXN0ZXJzKCkgLSAxICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3Rl
cnMpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigtc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSksIG1fbmV3RnJhbWVCYXNlKTsK
ICAgICBtX2ppdC5tdWwzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihSZWdp
c3RlcikpLCBtX25ld0ZyYW1lQmFzZSwgbV9uZXdGcmFtZUJhc2UpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkocmV2aXNpb24gMjgzMDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDcgQEAgcHVibGljOgogICAgICAgICBDYWxsRnJhbWVT
aHVmZmxlRGF0YSBkYXRhOwogICAgICAgICBkYXRhLm51bUxvY2FscyA9IG51bUxvY2FscygpOwog
ICAgICAgICBkYXRhLm51bVBhc3NlZEFyZ3MgPSBtX251bVBhc3NlZEFyZ3M7CisgICAgICAgIGRh
dGEubnVtUGFyYW1ldGVycyA9IG1fbnVtUGFyYW1ldGVyczsKICAgICAgICAgZGF0YS5jYWxsZWUg
PSBnZXROZXcoVmlydHVhbFJlZ2lzdGVyIHsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIH0pLT5yZWNv
dmVyeSgpOwogICAgICAgICBkYXRhLmFyZ3MucmVzaXplKGFyZ0NvdW50KCkpOwogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50KCk7ICsraSkKQEAgLTc5OCw2ICs3OTksNyBA
QCBwcml2YXRlOgogICAgIGJvb2wgcGVyZm9ybVNhZmVXcml0ZXMoKTsKICAgICAKICAgICB1bnNp
Z25lZCBtX251bVBhc3NlZEFyZ3MgeyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG1fbnVtUGFy
YW1ldGVycyB7IFVJTlRfTUFYIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2
b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BCiB9CiAKIEpJVDo6SklUKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0
ZWNvZGVJbmRleCkKLSAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQorICAgIDog
SlNJbnRlcmZhY2VKSVQoJnZtLCBudWxscHRyKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRl
cnByZXRlcikKICAgICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpIDogMCkKICAgICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtKQpA
QCAtNzcsNiArNzcsOSBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBC
CiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX2xvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKKyAgICBtX2dsb2Jh
bE9iamVjdENvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6R2xvYmFsT2JqZWN0KTsKKyAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrID0gY29kZUJsb2NrOwor
ICAgIG1fdW5saW5rZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7
CiB9CiAKIEpJVDo6fkpJVCgpCkBAIC05MCw4ICs5Myw4IEBAIHZvaWQgSklUOjplbWl0RW50ZXJP
cHRpbWl6YXRpb25DaGVjaygpCiAgICAgICAgIHJldHVybjsKIAogICAgIEp1bXBMaXN0IHNraXBP
cHRpbWl6ZTsKLSAgICAKLSAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25l
ZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRy
eSgpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291
bnRlcigpKSkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQs
IFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnko
KSksIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigp
KSkpOwogICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKIAogICAgIGNvcHlM
TEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTExMywxNSArMTE2LDIwIEBA
IHZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCoKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90
aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCkKK3ZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGVX
YXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpCiB7CisgICAgYXV0byBvayA9IGJyYW5jaFRl
c3RQdHIoWmVybywgcG9pbnRlclRvU2V0KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVx
dWFsLCBBZGRyZXNzKHBvaW50ZXJUb1NldCwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgb2subGluayh0aGlzKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
KQordm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
LCBHUFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFy
IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPnZhclJlYWRPbmx5V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0
ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgaWYgKHJlc29sdmVUeXBl
ID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSB7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmpl
Y3QsIG1fdmFyUmVhZE9ubHlXYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6
Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH0K
IH0KIAogdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCkBAIC0xMjksMTIgKzEz
NywxOCBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICAgICBpZiAoIUFT
U0VSVF9FTkFCTEVEKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBKdW1wIG9rID0gYnJhbmNoUHRy
KEVxdWFsLCByZWdUMCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGJyZWFrcG9pbnQoKTsK
ICAgICBvay5saW5rKHRoaXMpOwogfQogCit2b2lkIEpJVDo6cmVzZXRTUCgpCit7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworfQorCiAjZGVmaW5l
IE5FWFRfT1BDT0RFKG5hbWUpIFwKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsg
XAogICAgIGJyZWFrOwpAQCAtMTgxLDYxICsxOTUsNDQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93Q2Fz
ZUNhbGwoY29uc3QgSW5zdHJ1YwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3ZvaWQg
SklUOjplbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1
bmN0aW9uQ29kZSk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEpTRnVu
Y3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJlc3VsdCk7CisgICAgYXV0
byBoYXNFeGVjdXRhYmxlID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHQsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBK
U0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHJlc3VsdCk7CisgICAgaGFzRXhlY3V0YWJsZS5saW5r
KHRoaXMpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkpCisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0
T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSksIHJlc3VsdCk7CisgICAgZWxzZQorICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJs
b2NrRm9yQ2FsbCgpKSwgcmVzdWx0KTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEV4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6Om9mZnNldE9mQ29kZUJsb2NrKCkpLCByZXN1bHQpOwor
ICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZXN1bHQsIENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayk7CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6
Q29udGV4dCYgY3R4KSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENh
bGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgfSk7CisjZW5kaWYK
K30KKwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogewogICAgIGlmIChKSVRJ
bnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVC
bG9jaywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9wcm9maWxlZENv
ZGVCbG9jaywgIlxuIik7CiAgICAgCiAgICAgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICBq
aXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgpOwogICAgIAotICAgIGF1dG8mIGluc3RydWN0aW9u
cyA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlv
bkNvdW50ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBhdXRvJiBp
bnN0cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKKyAgICB1
bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpOwogCiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAKLSAgICBWTSYg
dm0gPSBtX2NvZGVCbG9jay0+dm0oKTsKICAgICBCeXRlY29kZUluZGV4IHN0YXJ0Qnl0ZWNvZGVJ
bmRleCgwKTsKLSAgICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4ICYmIChtX2NvZGVC
bG9jay0+aW5oZXJpdHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhl
cml0czxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7Ci0gICAgICAgIC8vIFdlIGNhbiBv
bmx5IGRvIHRoaXMgb3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFtQ29kZUJs
b2NrJ3MgZXhhY3RseSBvbmNlLgotICAgICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBi
ZSBpbnZhbGlkIG90aGVyd2lzZS4gV2hlbiB0aGUgTExJbnQgZGV0ZXJtaW5lcyBpdCB3YW50cyB0
bwotICAgICAgICAvLyBkbyBPU1IgZW50cnkgaW50byB0aGUgYmFzZWxpbmUgSklUIGluIGEgbG9v
cCwgaXQgd2lsbCBwYXNzIGluIHRoZSBieXRlY29kZSBvZmZzZXQgaXQKLSAgICAgICAgLy8gd2Fz
IGV4ZWN1dGluZyBhdCB3aGVuIGl0IGtpY2tlZCBvZmYgb3VyIGNvbXBpbGF0aW9uLiBXZSBvbmx5
IG5lZWQgdG8gY29tcGlsZSBjb2RlIGZvcgotICAgICAgICAvLyBhbnl0aGluZyByZWFjaGFibGUg
ZnJvbSB0aGF0IGJ5dGVjb2RlIG9mZnNldC4KLQotICAgICAgICAvLyBXZSBvbmx5IGJvdGhlciBi
dWlsZGluZyB0aGUgYnl0ZWNvZGUgZ3JhcGggaWYgaXQgY291bGQgc2F2ZSB0aW1lIGFuZCBleGVj
dXRhYmxlCi0gICAgICAgIC8vIG1lbW9yeS4gV2UgcGljayBhbiBhcmJpdHJhcnkgb2Zmc2V0IHdo
ZXJlIHdlIGRlZW0gdGhpcyBpcyBwcm9maXRhYmxlLgotICAgICAgICBpZiAobV9sb29wT1NSRW50
cnlCeXRlY29kZUluZGV4Lm9mZnNldCgpID49IDIwMCkgewotICAgICAgICAgICAgLy8gQXMgYSBz
aW1wbGlmaWNhdGlvbiwgd2UgZG9uJ3QgZmluZCBhbGwgYnl0ZWNvZGUgcmFuZ2VzIHRoYXQgYXJl
IHVucmVhY2hhYmxlLgotICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2UganVzdCBmaW5kIHRoZSBt
aW5pbXVtIGJ5dGVjb2RlIG9mZnNldCB0aGF0IGlzIHJlYWNoYWJsZSwgYW5kCi0gICAgICAgICAg
ICAvLyBjb21waWxlIGNvZGUgZnJvbSB0aGF0IGJ5dGVjb2RlIG9mZnNldCBvbndhcmRzLgotCi0g
ICAgICAgICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkpOwotICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9
IGdyYXBoLmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9sb29wT1NSRW50cnlCeXRl
Y29kZUluZGV4Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJsb2NrKTsK
LQotICAgICAgICAgICAgR3JhcGhOb2RlV29ya2xpc3Q8Qnl0ZWNvZGVCYXNpY0Jsb2NrKj4gd29y
a2xpc3Q7Ci0gICAgICAgICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KCk7
Ci0gICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKTsKLQotICAgICAgICAgICAgd2hpbGUg
KEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgewotICAgICAgICAg
ICAgICAgIHN0YXJ0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoc3RkOjptaW4oc3RhcnRC
eXRlY29kZUluZGV4Lm9mZnNldCgpLCBibG9jay0+bGVhZGVyT2Zmc2V0KCkpKTsKLSAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4IDogYmxvY2stPnN1Y2Nlc3NvcnMo
KSkKLSAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaCgmZ3JhcGhbc3VjY2Vzc29ySW5k
ZXhdKTsKLQotICAgICAgICAgICAgICAgIC8vIEFsc28gYWRkIGNhdGNoIGJsb2NrcyBmb3IgYnl0
ZWNvZGVzIHRoYXQgdGhyb3cuCi0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1i
ZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5sZWFkZXJPZmZzZXQoKTsgYnl0ZWNvZGVPZmZz
ZXQgPCBibG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBibG9jay0+dG90YWxMZW5ndGgoKTspIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQo
Ynl0ZWNvZGVPZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGhhbmRs
ZXIgPSBtX2NvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleChi
eXRlY29kZU9mZnNldCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1
c2goZ3JhcGguZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGhhbmRsZXItPnRhcmdldCkp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZU9mZnNldCArPSBpbnN0cnVjdGlv
bi0+c2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5n
U2xvd0Nhc2UgPSAwOwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgw
KTsgbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CkBAIC0y
NzgsMTIgKzI3NSwxNSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAg
ICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
CiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9u
KCkpKSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwog
ICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAg
ICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5j
b2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVP
ZmZzZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihj
dHguZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0K
IAorICAgICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2F0Y2gpCisgICAgICAgICAgICBhc3NlcnRT
dGFja1BvaW50ZXJPZmZzZXQoKTsKKwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAg
ICAgIERFRklORV9TTE9XX09QKGxlc3MpCiAgICAgICAgIERFRklORV9TTE9XX09QKGxlc3NlcSkK
QEAgLTUyNyw3ICs1MjcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAotICAg
ICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgICAgIGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX3VubGlua2VkQ29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICAKICAgICAg
ICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJCYXNl
bGluZSBKSVQgZW1pdHRpbmcgc2xvdyBjb2RlIGZvciAiLCBtX2J5dGVjb2RlSW5kZXgsICIgYXQg
b2Zmc2V0ICIsIChsb25nKWRlYnVnT2Zmc2V0KCkpOwpAQCAtNTQ1LDggKzU0NSw4IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKICAgICAgICAgICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAgICAgICAgIHByb2Jl
RGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CiAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSBTTE9XICIs
IG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIg
QCAiLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTYwMyw3ICs2
MDMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09Q
KG9wX2RlbF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikKLSNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9mcm9tX3Njb3BlKQogI2VuZGlmCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9wdXRfdG9fc2NvcGUpCkBAIC02NzQsNTUgKzY3NCw1NSBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKK3ZvaWQgSklU
OjplbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpCit7Cisg
ICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRh
YmxlKCkpLCBzX21ldGFkYXRhR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVC
bG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkpLCBzX2Nv
bnN0YW50c0dQUik7Cit9CisKK3ZvaWQgSklUOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCkKK3sK
KyAgICBCYXNlOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlz
dDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKIHZvaWQgSklUOjpj
b21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9y
dCkKIHsKLSAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBh
YmlsaXR5TGV2ZWwoKTsKKyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmls
ZWRDb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAg
ICBjYXNlIERGRzo6Q2Fubm90Q29tcGlsZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZh
bHNlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAg
IG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IERGRzo6Q2FuQ29tcGlsZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAg
ICAgICAgbV9jYW5CZU9wdGltaXplZCA9IHRydWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRP
cklubGluZWQgPSB0cnVlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChtX2Nv
ZGVCbG9jay0+Y29kZVR5cGUoKSkgewotICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICBjYXNlIE1v
ZHVsZUNvZGU6Ci0gICAgY2FzZSBFdmFsQ29kZToKLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hv
dWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRnVu
Y3Rpb25Db2RlOgotICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZh
bHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCi0gICAgICAgIC8v
IERvbid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRpb24uCi0gICAgICAgIG1fY29kZUJsb2NrLT5t
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJ
bmxpbmVGdW5jdGlvbihtX2NvZGVCbG9jayk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICAg
IGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBt
X2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgewot
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwot
ICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVz
KCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dp
dGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV9jb2RlQmxvY2st
Pm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpOwotICAgICAgICBpZiAobV9jb2Rl
QmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAg
ICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlcyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJl
ck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOworICAgIGlmIChtX3VubGlua2Vk
Q29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsK
KyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hK
dW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3Rv
cjxTaW1wbGVKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
d2l0Y2hKdW1wVGFibGVzKCkpOworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV91bmxp
bmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7
CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8
IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNl
bGluZUZvclByb2ZpbGVyKCkpKSkKLSAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVl
PEpJVERpc2Fzc2VtYmxlcj4obV9jb2RlQmxvY2spOworICAgIGlmIChVTkxJS0VMWShPcHRpb25z
OjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9w
dGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpIHsKKyAgICAgICAgLy8g
RklYTUU6IGJ1aWxkIGEgZGlzYXNzZW1ibGVyIG9mZiBvZiBVbmxpbmtlZENvZGVCbG9jay4KKyAg
ICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9wcm9m
aWxlZENvZGVCbG9jayk7CisgICAgfQogICAgIGlmIChVTkxJS0VMWShtX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIpKSB7CisgICAgICAgIC8vIEZJWE1FOiBidWlsZCBwcm9maWxlciBkaXNhc3Nl
bWJsZXIgb2ZmIFVubGlua2VkQ29kZUJsb2NrLgogICAgICAgICBtX2NvbXBpbGF0aW9uID0gYWRv
cHRSZWYoCiAgICAgICAgICAgICBuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKAotICAgICAgICAg
ICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1f
Y29kZUJsb2NrKSwKKyAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX3Byb2ZpbGVkQ29kZUJsb2NrKSwKICAgICAgICAgICAgICAg
ICBQcm9maWxlcjo6QmFzZWxpbmUpKTsKLSAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmls
ZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOwor
ICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLCBtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAg
bV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2lu
KEJ5dGVjb2RlSW5kZXgoMCkpKTsKQEAgLTc0MiwxMSArNzQyLDEyIEBAIHZvaWQgSklUOjpjb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVu
Y3Rpb25Qcm9sb2d1ZSgpOwotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9j
aywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9j
ay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpCisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tU
b0ZyYW1lSW5Qcm9sb2d1ZSgpOwogCiAgICAgTGFiZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAotICAg
IGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpOworICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAg
dW5zaWduZWQgbWF4RnJhbWVTaXplID0gLWZyYW1lVG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoZnJhbWVUb3BPZmZzZXQpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwogICAg
IEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CkBAIC03NTcsMTYgKzc1OCwyMCBAQCB2b2lkIEpJVDo6
Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgbW92ZShyZWdUMSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBl
bWl0U2F2ZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0
ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAg
IGVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CisgICAgZW1pdE1hdGVyaWFsaXpl
TWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKIAotICAgIGlmIChtX2NvZGVCbG9j
ay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKKyAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgQVNTRVJUKCFtX2J5
dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2NvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0
UHJvZmlsaW5nKCkgJiYgKCFtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwg
bV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID4gMSkpIHsKKyAgICAgICAgICAg
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywg
cmVnVDIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9m
ZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+
OjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlZ1QyKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNv
bnN0cnVjdG9yLCB0aGVuIHdlIHdhbnQgdG8gcHV0IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUg
KHRvCiAgICAgICAgICAgICAgICAgLy8ga2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRv
bid0IGFjdHVhbGx5IHdhbnQgdG8gcmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4KLSAgICAgICAgICAg
ICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCisgICAg
ICAgICAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAh
YXJndW1lbnQpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IGludCBvZmZzZXQgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1
bWVudCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCkBAIC03NzcsMTIgKzc4MiwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRo
b3V0RmluYWxpemluCiAgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVn
aXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2Fk
KSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgICAgICBsb2FkMzIoQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgotICAgICAgICAg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZv
ckFyZ3VtZW50KGFyZ3VtZW50KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgc3RvcmVW
YWx1ZShyZXN1bHRSZWdzLCBBZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVBy
b2ZpbGUpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29k
ZTo6aXNKSVQobV9jb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFK
SVRDb2RlOjppc0pJVChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlm
IChVTkxJS0VMWShzaXplTWFya2VyKSkKICAgICAgICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3Mt
Pm1hcmtFbmQoV1RGTW92ZSgqc2l6ZU1hcmtlciksICp0aGlzKTsKQEAgLTc5OSwyNCArODA0LDI3
IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50
MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwotICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihv
cGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgbV9jb2RlQmxvY2spOworICAgIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDAp
OworICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVy
YXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgcmVnVDApOwogCiAgICAgLy8gSWYgdGhlIG51
bWJlciBvZiBwYXJhbWV0ZXJzIGlzIDEsIHdlIG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCi0g
ICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJz
ICE9IDE7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAm
JiByZXF1aXJlc0FyaXR5Rml4dXApIHsKKyAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAhPSAxOworICAgIGlmIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5
Rml4dXApIHsKICAgICAgICAgbV9hcml0eUNoZWNrID0gbGFiZWwoKTsKLSAgICAgICAgc3RvcmU4
KFRydXN0ZWRJbW0zMigwKSwgJm1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7
CisKICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAg
ICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUocmVnVDApOworICAgICAgICBz
dG9yZTgoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
U2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkpKTsKIAogICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QxKTsKLSAgICAg
ICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2Nr
LT5tX251bVBhcmFtZXRlcnMpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CisgICAgICAgIGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCkpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAKICAgICAg
ICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKIAogICAgICAgICBpZiAobWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZy
YW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3Bl
cmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNo
ZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGlm
IChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgICAgIGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1Rv
KGJlZ2luTGFiZWwsIHRoaXMpOwpAQCAtODM5LDcgKzg0Nyw3IEBAIHZvaWQgSklUOjpjb21waWxl
QW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9m
Q29kZShsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVt
KGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7
CiAKLSAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExp
bmtCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGlu
ZUpJVCwgZWZmb3J0KSk7CisgICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtC
dWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX3VubGlua2VkQ29kZUJsb2NrLCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CiAgICAgbGluaygpOwogfQogCkBA
IC04NTgsOCArODY2LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29y
ZC50eXBlKSB7CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAg
IGNhc2UgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXI6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNo
SnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVm
YXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5
dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDA7IGogPCB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCk7
ICsraikgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHVubGlua2VkVGFibGUu
bV9icmFuY2hPZmZzZXRzW2pdOwpAQCAtODcxLDggKzg3OSw4IEBAIHZvaWQgSklUOjpsaW5rKCkK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpTdHJpbmc6IHsKLSAgICAg
ICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9j
b2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAg
ICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJp
bmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtl
ZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVu
bGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3Ry
aW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8gY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRl
ZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgbG9jYXRpb24gOiB1bmxpbmtl
ZFRhYmxlLm1fb2Zmc2V0VGFibGUudmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBvZmZzZXQgPSBsb2NhdGlvbi5tX2JyYW5jaE9mZnNldDsKQEAgLTkwNiw2ICs5MTQsMjcgQEAg
dm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJv
bSwgcmVjb3JkLmNhbGxlZSk7CiAgICAgfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBhdXRv
IGZpbmFsaXplSUNzID0gWyZdIChhdXRvJiBnZW5lcmF0b3JzKSB7CisgICAgICAgIGZvciAoYXV0
byYgZ2VuIDogZ2VuZXJhdG9ycykgeworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
by0+c3RhcnQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihn
ZW4ubV9zdGFydCk7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5kb25lTG9j
YXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGdlbi5tX2Rv
bmUpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+c2xvd1BhdGhTdGFydExv
Y2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2Vu
Lm1fc2xvd1BhdGhCZWdpbik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZmluYWxpemVJQ3Mo
bV9nZXRCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeVZhbHMpOworICAgIGZpbmFsaXpl
SUNzKG1fZ2V0QnlJZHNXaXRoVGhpcyk7CisgICAgZmluYWxpemVJQ3MobV9wdXRCeUlkcyk7Cisg
ICAgZmluYWxpemVJQ3MobV9wdXRCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlJZHMp
OworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlJ
ZHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5z
dGFuY2VPZnMpOworICAgIGZpbmFsaXplSUNzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMpOworI2Vs
c2UKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBm
aW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKQEAg
LTkxNywyMSArOTQ2LDI1IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICBmaW5hbGl6ZUlubGluZUNh
Y2hlcyhtX2luQnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9pbnN0YW5jZU9mcywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1f
cHJpdmF0ZUJyYW5kQWNjZXNzZXMsIHBhdGNoQnVmZmVyKTsKKyNlbmRpZgogCiAgICAgZm9yIChh
dXRvJiBjb21waWxhdGlvbkluZm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxh
dGlvbkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGluZm8uZG9uZUxvY2F0aW9u
ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbklu
Zm8uZG9uZUxvY2F0aW9uKTsKKyNlbHNlCiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpj
b21waWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwogICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlv
bnMoCiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KGNvbXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKICAgICAgICAgICAgIHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlv
bikpOworI2VuZGlmCisKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIEpJVENvZGVNYXBCdWlsZGVy
IGppdENvZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQp
IHsKLSAgICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKLSAg
ICAgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRl
Y29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJl
bHNbYnl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxvY2stPnNl
dEpJVENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKSk7CisgICAgSklUQ29kZU1h
cEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zm
c2V0KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKKyAg
ICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
T2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1ti
eXRlY29kZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk3Myw0MiBAQCB2b2lkIEpJVDo6bGluaygp
CiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7CisgICAgICAgIC8v
IEZJWE1FOiBzaG91bGQgd2UgbWFrZSB0aGUgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91dCBV
bmxpbmtlZENvZGVCbG9jaz8KICAgICAgICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxp
bmVGb3JQcm9maWxlcigpKQogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJv
ZmlsZXIobV9jb21waWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3ZtLT5t
X3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9jb21w
aWxhdGlvbik7CisgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGls
YXRpb24obV9wcm9maWxlZENvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAogICAg
IGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAg
ICAgbV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdU
Rk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAgCisg
ICAgLy8gRklYTUU6IE1ha2UgYSB2ZXJzaW9uIG9mIENvZGVCbG9ja1dpdGhKSVRUeXBlIHRoYXQg
a25vd3MgYWJvdXQgVW5saW5rZWRDb2RlQmxvY2suCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFn
PiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0
clRhZywKLSAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2Rl
QmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRh
KCkpOworICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVC
bG9ja1dpdGhKSVRUeXBlKG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkuZGF0YSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gd2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+
KG1fYXJpdHlDaGVjayk7Ci0gICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRD
b2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSk7CisgICAg
bV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJp
dHlDaGVjaykpOworCisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBXVEZNb3ZlKG1f
dW5saW5rZWRDYWxscyk7CisgICAgbV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9zID0gV1RG
TW92ZShtX2V2YWxDYWxsTGlua0luZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRTdHVi
SW5mb3MgPSBXVEZNb3ZlKG1fdW5saW5rZWRTdHViSW5mb3MpOworICAgIG1faml0Q29kZS0+bV9z
d2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0
Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXMpOworICAgIG1faml0Q29kZS0+bV9qaXRDb2RlTWFwID0gaml0Q29kZU1hcEJ1aWxk
ZXIuZmluYWxpemUoKTsKKyAgICBtX2ppdENvZGUtPmFkb3B0TWF0aElDcyhtX21hdGhJQ3MpOwor
ICAgIG1faml0Q29kZS0+bV9jb25zdGFudFBvb2wgPSBXVEZNb3ZlKG1fY29uc3RhbnRQb29sKTsK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIG1faml0Q29kZS0+bV9pc1NoYXJlYWJsZSA9IG1faXNT
aGFyZWFibGU7CisjZWxzZQorICAgIG1faml0Q29kZS0+bV9pc1NoYXJlYWJsZSA9IGZhbHNlOwor
I2VuZGlmCiAKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dG
KCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ss
IHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0
LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CisgICAgICAgIGRhdGFM
b2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV91bmxpbmtl
ZENvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0
cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKIH0K
IAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZCgpCitDb21waWxh
dGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayogY29kZUJsb2Nr
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogCkBAIC05
NjgsMjUgKzEwMTcsMTQgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRo
cgogCiAgICAgbV9saW5rQnVmZmVyLT5ydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MoKTsK
IAotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAgICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KGxvY2tlciwgQ29kZUJs
b2NrOjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5rKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkg
ewotICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fY29kZUJsb2NrLT5leGNlcHRpb25I
YW5kbGVyKGkpOwotICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4K
LSAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gbV9jb2RlQmxvY2stPmppdENvZGVNYXAoKS5m
aW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5k
bGVyUHRyVGFnPigpOwotICAgIH0KLQogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwKQotICAg
ICAgICBtX2NvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoV1RGTW92ZShtX3BjVG9Db2Rl
T3JpZ2luTWFwKSk7CisgICAgICAgIG1faml0Q29kZS0+bV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdU
Rk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCk7CiAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVz
UGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8
ZG91YmxlPihtX2ppdENvZGUtPnNpemUoKSkgLwotICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
ZG91YmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKIAotICAg
IG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKG1faml0Q29kZS5yZWxl
YXNlTm9uTnVsbCgpKTsKIAogICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CkBA
IC05OTgsMTEgKzEwMzYsMTEgQEAgc2l6ZV90IEpJVDo6Y29kZVNpemUoKSBjb25zdAogICAgIHJl
dHVybiBtX2xpbmtCdWZmZXItPnNpemUoKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpw
cml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitDb21waWxhdGlvblJl
c3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVD
b21waWxlKCk7CiAgICAgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhlZmZvcnQpOwot
ICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgIHJldHVybiBmaW5hbGl6ZU9u
TWFpblRocmVhZChjb2RlQmxvY2spOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNl
cHRpb25IYW5kbGVycygpCkBAIC0xMDQyLDE4ICsxMDgwLDI4IEBAIHZvaWQgSklUOjpkb01haW5U
aHJlYWRQcmVwYXJhdGlvbkJlZm9yZUMKICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCkt
PnByb2Nlc3NMb2dFbnRyaWVzKCptX3ZtLCAiUHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24u
Il9zKTsKIH0KIAotdW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtl
ZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2Rl
QmxvY2stPm51bUNhbGxlZUxvY2FscygpKSkpOwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdp
c3RlckNvdW50Rm9yRnJhbWVQb2ludGVyT2Zmc2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxz
KCkgKyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAotaW50
IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWdu
ZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7Cisg
ICAgcmV0dXJuIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJs
b2NrKCkpOworfQorCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jaykgLSAxKS5vZmZzZXQoKTsKIH0KIAoraW50
IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAg
IHJldHVybiBzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9j
aygpKTsKK30KKwogSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBKSVQ6OmNvbXBpbGVUaW1lU3Rh
dHMoKQogewogICAgIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gcmVzdWx0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAKICNkZWZp
bmUgQVNTRVJUX0pJVF9PRkZTRVQoYWN0dWFsLCBleHBlY3RlZCkgQVNTRVJUX1dJVEhfTUVTU0FH
RShhY3R1YWwgPT0gZXhwZWN0ZWQsICJKSVQgT2Zmc2V0IFwiJXNcIiBzaG91bGQgYmUgJWQsIG5v
dCAlZC5cbiIsICNleHBlY3RlZCwgc3RhdGljX2Nhc3Q8aW50PihleHBlY3RlZCksIHN0YXRpY19j
YXN0PGludD4oYWN0dWFsKSk7CiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRl
ICJKSVREaXNhc3NlbWJsZXIuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJKSVRNYXRo
SUMuaCIKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJ
bnRlcmZhY2VKSVQuaCIKKyNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJQQ1RvQ29k
ZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKICNpbmNsdWRlIDx3dGYv
VW5pcXVlUmVmLmg+CkBAIC0xNDksMTQgKzE1MSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9
OwogCiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgc2xvd1BhdGhTdGFydDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IGRvbmVMb2NhdGlvbjsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBVbmxpbmtlZENhbGxM
aW5rSW5mbyogdW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQ7CisjZWxzZQorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgc2xvd1BhdGhTdGFydDsKICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm87CisjZW5kaWYKICAgICB9OwogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdD
YWxsZWVGdW5jdGlvbik7CiAKLSAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHBy
aXZhdGUgSlNJbnRlcmZhY2VKSVQgeworICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklU
IDogcHVibGljIEpTSW50ZXJmYWNlSklUIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQ
YXRoQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogICAgICAgICBmcmll
bmQgY2xhc3MgSklUVGh1bmtzOwpAQCAtMTcxLDYgKzE3OCw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90
IGJlIGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCiAgICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7CiAKKyAgICAgICAgdXNpbmcg
QmFzZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgcHVibGljOgogICAgICAgICBKSVQoVk0mLCBD
b2RlQmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9m
ZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0xNzgsMjggKzE4
NywzMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVk0mIHZtKCkgeyByZXR1cm4gKkpTSW50
ZXJmYWNlSklUOjp2bSgpOyB9CiAKICAgICAgICAgdm9pZCBjb21waWxlQW5kTGlua1dpdGhvdXRG
aW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1
bHQgZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgZmlu
YWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKik7CiAgICAgICAgIHNpemVfdCBjb2RlU2l6ZSgp
IGNvbnN0OwogCiAgICAgICAgIHZvaWQgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21w
aWxlKCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGls
ZShWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zm
c2V0KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwg
Y29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoY29kZUJsb2NrLCBlZmZv
cnQpOwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJD
b3VudEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJh
bWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOworICAgICAgICBzdGF0aWMgaW50IHN0YWNr
UG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogICAgICAgICBzdGF0aWMgaW50
IHN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsKIAogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBjb21waWxlVGltZVN0YXRz
KCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTZWNvbmRzIHRvdGFsQ29tcGls
ZVRpbWUoKTsKIAorICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX21ldGFkYXRhR1BS
ID0gTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUjsKKyAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc19jb25zdGFudHNHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUjsK
KwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpOwog
ICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAgICAgICAgdm9pZCBwcml2
YXRlQ29tcGlsZVNsb3dDYXNlcygpOwogICAgICAgICB2b2lkIGxpbmsoKTsKLSAgICAgICAgQ29t
cGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQpOworICAg
ICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqLCBKSVRDb21w
aWxhdGlvbkVmZm9ydCk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29k
ZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQpAQCAtMjIzLDYgKzIz
NywzMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWRQdHJGcm9tTWV0YWRh
dGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkMzJGcm9tTWV0YWRh
dGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkOEZyb21NZXRhZGF0
YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZv
aWQgc3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2
b2lkIHN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zm
c2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZv
aWQgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90
IG9mZnNldCwgR1BSUmVnKTsKKworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBsb2FkQ29uc3Rh
bnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BSUmVnKTsKKyAgICBwcml2YXRlOgorICAgICAg
ICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2FkQ29kZUJs
b2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworCisgICAgICAgIHZvaWQgZW1p
dFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdUMCk7CisK
ICAgICAgICAgdm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAgICAgICAg
IHsKICAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5kbGVyKTsK
QEAgLTI1NCw2ICsyOTQsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY29tcGls
ZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAgICAgICAgc3RkOjplbmFibGVfaWZfdDwK
KyAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29k
ZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCisgICAgICAgICAgICAmJiBPcDo6b3Bjb2RlSUQg
IT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CisK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8
CisgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNv
ZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncworICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOwor
I2Vsc2UKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9w
OjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMjY1LDkgKzMxOCwxMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFy
Z3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8
fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogICAgICAgICAsIHZvaWQ+IGNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisjZW5kaWYKIAogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3Qg
T3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAg
IGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCk7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZh
bChjb25zdCBPcCYpOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtMjg3
LDE0ICszNDEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFy
cmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVC
YXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVy
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lk
IGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcik7CisgICAgICAgIHZvaWQgZW1pdFdyaXRl
QmFycmllcihHUFJSZWcgb3duZXIpOwogCiAgICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRo
ZSB2YWx1ZSB0byBwcm9maWxlIGlzIGluIHJlZ1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJs
ZSBmb3IKICAgICAgICAgLy8gc2NyYXRjaC4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB2
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKLSAgICAg
ICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdz
KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJlZyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVl
UmVncyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5
dGVjb2RlJiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYs
IEpTVmFsdWVSZWdzKTsKQEAgLTMwNSw4ICszNTgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6
bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CiAgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsKIAotICAgICAgICB2
b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFy
cmF5UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7Ci0gICAgICAgIHZvaWQgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBh
cnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQg
c2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAg
ICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBw
dHJkaWZmX3QsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKIAog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUo
T3ApOwpAQCAtNTkzLDcgKzY0OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYxMSw3ICs2NjUsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQor
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CiAjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02Mjcs
MTQgKzY4MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlm
dFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZShW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSk7Ci0gICAgICAgIHZvaWQgZW1pdEhhc1ByaXZh
dGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUpOworICAgICAgICB2b2lkIGVt
aXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlKTsKIAogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9p
ZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9p
ZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0g
ICAgICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUpOworICAgICAgICB2
b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBH
UFJSZWcpOworICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBH
UFJSZWcgc2NyYXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwogICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJl
U2xvdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY0Niw3ICs3MDAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICNlbmRpZgogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlX
cml0ZShXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJl
ZyBwb2ludGVyVG9TZXQpOworICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQo
R1BSUmVnIHBvaW50ZXJUb1NldCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxl
KEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCop
OwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBh
ZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7
CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1
aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7
CkBAIC02NTUsNiArNzA5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0
UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIp
OwogCisgICAgICAgIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAg
SlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9v
bCBpc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlz
T3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjc2LDEzICs3MzEsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZN
Jik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwog
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93
X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJvbV9z
Y29wZUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5l
cmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19v
cF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X3ByaXZhdGVf
bmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRv
cihWTSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKIAogICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFwc19o
YW5kbGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKQEAgLTY5
NiwzMiArNzQ5LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZh
ciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVD
TEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2Nv
cGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09M
VkVfVFlQRShERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJF
X0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBl
LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCB0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVm
ZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8g
UmVzb2x2ZWRDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGgg
b3BfcmVzb2x2ZV9zY29wZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJl
c29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9
Ci0KLSNkZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkg
XAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBv
cF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBG
T1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1
bmRlZiBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmso
UmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KICAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRv
cihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CiAKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAorICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJik7CisgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3Bf
cmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0m
LCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJh
dGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNv
bnN0IGNoYXIqIHRodW5rTmFtZSk7CisKICAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gaXRlcisrLT5mcm9tOwpAQCAtNzYwLDEwICs3OTcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9s
bGJhY2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHQoQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7Ci0g
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKE1ldGFkYXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PgotICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIEFkZHJlc3MsIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZf
dDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbD4KQEAgLTgyMSwyMCArODU4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIHRhcmdldC5vZmZzZXQpKTsKICAgICAgICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlw
ZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRy
YWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgT3BlcmF0
aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykK
KyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3Mu
Li4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9u
VHlwZT4oYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uLCBy
ZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbiwgcmVzdWx0KTsK
ICAgICAgICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5
cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUuLi4gQXJncz4K
ICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6
aGFzUmVzdWx0LCB2b2lkPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRh
dGEmIG1ldGFkYXRhLCBBZGRyZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJn
cy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBBZGRyZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJn
cy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50c0ZvckluZGly
ZWN0Q2FsbDxPcGVyYXRpb25UeXBlPih0YXJnZXQsIGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2Zp
bGUobWV0YWRhdGEsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCks
IHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShieXRlY29kZSwgQWRkcmVzcyhHUFJJbmZvOjpu
b25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CkBAIC05
MTksMjUgKzk1NiwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQog
ICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZDsg
fQotICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4gbV9jYW5C
ZU9wdGltaXplZE9ySW5saW5lZDsgfQogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmco
KSB7IHJldHVybiBtX3Nob3VsZEVtaXRQcm9maWxpbmc7IH0KICNlbHNlCiAgICAgICAgIGJvb2wg
Y2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICBib29sIGNhbkJlT3B0
aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgLy8gRW5hYmxlcyB1
c2Ugb2YgdmFsdWUgcHJvZmlsZXIgd2l0aCB0aWVyZWQgY29tcGlsYXRpb24gdHVybmVkIG9mZiwK
ICAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSBhbGwgY29kZSBnZXRzIHByb2ZpbGVkLgogICAgICAg
ICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAK
KyAgICAgICAgdm9pZCBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lz
dGVycygpOworCisgICAgICAgIHZvaWQgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworCiAgICAg
ICAgIHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9v
bCBjb21wdXRlQ29tcGlsZVRpbWVzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB5b3UgbmVl
ZCB0byBjaGVjayBhIHZhbHVlIGZyb20gdGhlIG1ldGFkYXRhIHRhYmxlIGFuZCB5b3UgbmVlZCBp
dCB0bwotICAgICAgICAvLyBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFzdCBhbmQgc2xvdyBw
YXRoLCB0aGVuIHlvdSB3YW50IHRvIHVzZSB0aGlzLgotICAgICAgICAvLyBJdCB3aWxsIGdpdmUg
dGhlIHNsb3cgcGF0aCB0aGUgc2FtZSB2YWx1ZSByZWFkIGJ5IHRoZSBmYXN0IHBhdGguCi0gICAg
ICAgIEdldFB1dEluZm8gY29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUpOwotICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLSAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNv
cGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CisKKyAgICAgICAgdm9pZCByZXNldFNQKCk7CiAK
ICAgICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKQEAgLTk2NCw5ICs5OTgsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nh
c2VzOwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCi0gICAgICAg
IEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwotICAgICAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQcm9m
aWxlczsKLQogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVt
cExpc3QgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7CiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTAwMCwxMSArMTAzMSwyNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSGFzaE1hcDxjb25zdCBJbnN0cnVjdGlvbiosIFVuaXF1ZVJlZjxNYXRoSUNH
ZW5lcmF0aW9uU3RhdGU+PiBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGU7CiAK
ICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwotICAgICAgICBib29sIG1fY2FuQmVPcHRp
bWl6ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAg
ICAgICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKIAotICAgICAg
ICBSZWZQdHI8RGlyZWN0SklUQ29kZT4gbV9qaXRDb2RlOworICAgICAgICBDb2RlQmxvY2sqIG1f
cHJvZmlsZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFVubGlua2VkQ29kZUJsb2Nr
KiBtX3VubGlua2VkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworCisgICAgICAgIE1hdGhJQ0hvbGRl
ciBtX21hdGhJQ3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1faml0Q29kZTsK
KworICAgICAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5rZWRDYWxsTGlu
a0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFs
Q2FsbExpbmtJbmZvczsKKyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1f
dW5saW5rZWRTdHViSW5mb3M7CisgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4g
bV9zd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+
IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBzdHJ1Y3QgTm90QUNvZGVCbG9j
ayB7IH0gbV9jb2RlQmxvY2s7CisKKyAgICAgICAgYm9vbCBtX2lzU2hhcmVhYmxlIHsgdHJ1ZSB9
OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OTIsOSArMjkyLDEwIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkK
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRD
aGFyKG9wMikpIHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4
LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9
CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Myk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1Qx
KTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8g
OiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0zNzIsNyArMzc1LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbChWaQogICAgIH0KIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJ
bnQuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdU
MSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBO
b25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTU3Myw3ICs1NzcsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgCiAKICAgICBlbWl0TG9h
ZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8g
OiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjIs
OCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklU
OjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRo
UHJvZmlsZSk7CisgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayku
bV9hcml0aFByb2ZpbGU7CisgICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9tYXRoSUNzLmFkZEpJ
VE5lZ0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG5lZ2F0ZUlDKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0
dGVyIHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5k
IGNhbiBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywg
Y3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRp
b25Bcml0aE5lZ2F0ZSk7CkBAIC04OTksOCArOTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJz
aGlmdChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVC
bG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgSklUQWRkSUMqIGFkZElD
ID0gbV9tYXRoSUNzLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlv
blRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElD
RmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQpAQCAtOTQ1LDEwICs5NTAsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIGJvb2wgZ2VuZXJhdGVk
SW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CiAgICAgICAgIFVuYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAg
ICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9m
aWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3Jj
UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAg
ICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwog
CkBAIC0xMDE1LDEwICsxMDIxLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5h
cnlNYXRoSUMKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAgICAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7
CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0
aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0
aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJp
dGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAg
ICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAg
LTEwNTUsMTMgKzEwNjIsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0
aElDPAogI2VuZGlmCiAKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0
aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBp
ZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAo
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1h
dGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBz
cmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQot
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRj
aEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNp
ZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsK
QEAgLTExMjAsMTMgKzExMjgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFy
eU1hdGhJQwogI2VuZGlmCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAg
ICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
aWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7
CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsK
KyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJp
dHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxh
YmVsKCk7CkBAIC0xMTY2LDcgKzExNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3Qg
SW5zdHJ1Y3Rpb24qCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51
bGxwdHI7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9m
aWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOworICAgICAgICBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVy
YW5kVHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVj
b2RlLm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKQEAgLTEyMTEsOCArMTIyMCw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
bXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11
bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMq
IG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TXVsPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAg
IEpJVE11bElDKiBtdWxJQyA9IG1fbWF0aElDcy5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwog
ICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7
CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KQEAgLTEyMjcs
OCArMTIzNiw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3QKIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRo
UHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJ
Qyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudElu
c3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVl
U3ViKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5j
cHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNv
bnN0IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2sp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBlbWl0U3RvcmUoZGVzdGluYXRpb25G
b3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3Rl
cigpLCByZWdUMSwgcmVnVDApOwogfQogCkBAIC0xNTcsNyArMTU3LDcgQEAgc3RkOjplbmFibGVf
aWZfdDwKIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlu
a0luZm8qKQogewogICAgIHVuc2lnbmVkIGNoZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZEJsb2NrKTsKICAgICBpbnQgYXJnQ291bnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0Zv
cihieXRlY29kZSwgY2hlY2twb2ludCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRp
Y19jYXN0PGludD4oc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNr
cG9pbnQpKTsKIApAQCAtMTkyLDcgKzE5Miw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFt
ZUZvckZvcndhcmRBcmd1bWVudHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0g
b3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVy
YXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgY2FsbE9w
ZXJhdGlvbihzaXplT3BlcmF0aW9uLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJn
T2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdU
MSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIsIGZhbHNl
LCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLShzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRl
cygpLCA2ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
QEAgLTIwMiw3ICsyMDIsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRl
Y29kCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1l
bnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNl
dHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUNCks
IGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJh
dGlvbiwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdz
KHJlZ1QyLCByZWdUNCksIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQu
CkBAIC0yMzIsMTAgKzIzMiwxMCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9w
Q2FsbEV2CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsK
ICAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1l
OjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNh
bGxFdmFsLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwog
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogCkBAIC0yNDksNyArMjQ5
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFk
ZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5r
SW5mbyogaW5mbyA9IG1fcHJvZmlsZWRCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2Fs
bCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsK
QEAgLTI1OCw4ICsyNTgsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29u
c3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdp
c3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDAp
OwotICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fcHJvZmlsZWRC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2Rl
KTsKQEAgLTI4NiwxMSArMjg2LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IElu
c3RydWN0aW8KICAgICAqLwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CiAgICAg
aWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2Nr
LT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAg
aW5mbyA9IG1fcHJvZmlsZWRCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSk7CiAgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOwogICAg
IC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0
aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgogICAgIAotICAgIGF1dG8gYnl0ZWNvZGVJbmRl
eCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKKyAgICBhdXRvIGJ5
dGVjb2RlSW5kZXggPSBtX3Byb2ZpbGVkQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24p
OwogICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRl
eCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIHRhZ0Zv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgIGVtaXRM
b2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsgLy8gcmVnVDEsIHJlZ1QwIGhvbGRzIGNhbGxlZS4K
QEAgLTMyNCw3ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVj
dGlvCiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2Vk
Q29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAg
ICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zNDEsMTIgKzM0MSwxMSBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgfQogCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92bSwgKnRo
aXMpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMpIHsKQEAgLTM1NCw3ICszNTMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNs
b3dDYXNlKGNvbnN0IEluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpAQCAtMzk1LDcgKzM5NCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBKU1ZhbHVlUmVncyBu
ZXh0UmVncyA9IEpTVmFsdWVSZWdzKHRhZ05leHRHUFIsIHBheWxvYWROZXh0R1BSKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywKKyAgICAgICAg
bV9wcm9maWxlZEJsb2NrLAogICAgICAgICBKSVRUeXBlOjpCYXNlbGluZUpJVCwKICAgICAgICAg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCkBAIC00MTAsNyArNDA5LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBu
ZXh0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQmxvY2spLCBuZXh0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX25leHQsIG5leHRSZWdzKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CkBA
IC00NDAsMTAgKzQzOSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoCi0gICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgLy8gbWV0YWRhdGEKKyAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZEJsb2NrKSwgLy8gbWV0YWRhdGEKICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
LCAvLyBvcGVyYXRpb24KICAgICAgICAgbmV4dFZSZWcsIC8vIHJlc3VsdAotICAgICAgICBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKKyAgICAgICAg
VHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQog
ICAgICAgICBnZW4uc3R1YkluZm8oKSwgLy8gYXJnMgogICAgICAgICBKU1ZhbHVlUmVncyh0YWdJ
dGVyYXRvckdQUiwgcGF5bG9hZEl0ZXJhdG9yR1BSKSwgLy8gYXJnMwogICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOyAvLyBhcmc0CkBAIC00NTIsNyArNDUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX29wZW4oY29ucwogICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVj
dC5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJl
c3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90
T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsK
IAogICAgIGRvbmUubGluayh0aGlzKTsKIH0KQEAgLTQ2MCw3ICs0NTksNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRv
cl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0
RnVuY3Rpb24gPSAoWyZdICgpIHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgo
KSkgewogICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3Rf
bmFycm93OwpAQCAtNTA2LDcgKzUwNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW4KICAgICAgICAgcHJlc2VydmVkUmVncy5hZGQodGFnVmFsdWVHUFIpOwogICAg
ICAgICBwcmVzZXJ2ZWRSZWdzLmFkZChwYXlsb2FkVmFsdWVHUFIpOwogICAgICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLAorICAgICAgICAgICAg
bV9wcm9maWxlZEJsb2NrLAogICAgICAgICAgICAgSklUVHlwZTo6QmFzZWxpbmVKSVQsCiAgICAg
ICAgICAgICBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgICAgICBDYWxsU2l0
ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCkBAIC01MzMs
MTAgKzUzMiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Q2OwogICAgICAgICBHUFJSZWcgc2NyYXRjaDIg
PSByZWdUNzsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElm
VHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHRhZ0RvbmVHUFIsIHBheWxvYWREb25lR1BSKSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIEp1bXBM
aXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh0YWdE
b25lR1BSLCBwYXlsb2FkRG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2ZpbGVkQmxvY2st
Pmdsb2JhbE9iamVjdCgpKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgICAgIG1fY29kZUJsb2NrLAorICAgICAgICAgICAgbV9wcm9maWxlZEJsb2NrLAogICAg
ICAgICAgICAgSklUVHlwZTo6QmFzZWxpbmVKSVQsCiAgICAgICAgICAgICBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksCiAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCkBAIC01ODgsMTAgKzU4NywxMCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZSgKLSAgICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgLy8g
bWV0YWRhdGEKKyAgICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayks
IC8vIG1ldGFkYXRhCiAgICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9w
ZXJhdGlvbgogICAgICAgICAgICAgZG9uZVZSZWcsIC8vIHJlc3VsdAotICAgICAgICAgICAgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCisgICAgICAg
ICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBh
cmcxCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKSwgLy8gYXJnMgogICAgICAgICAgICAgSlNW
YWx1ZVJlZ3ModGFnSXRlclJlc3VsdEdQUiwgcGF5bG9hZEl0ZXJSZXN1bHRHUFIpLCAvLyBhcmcz
CiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOyAvLyBhcmc0CkBAIC02MDIsNyArNjAxLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0
aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0
SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90
T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsK
ICAgICB9CiAKICAgICB7ICAgCkBAIC02MTgsMTAgKzYxNywxMCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSgK
LSAgICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgLy8gbWV0YWRhdGEK
KyAgICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIC8vIG1ldGFk
YXRhCiAgICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgog
ICAgICAgICAgICAgdmFsdWVWUmVnLCAvLyByZXN1bHQKLSAgICAgICAgICAgIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICAgICAgVHJ1
c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQogICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKICAgICAgICAgICAgIEpTVmFsdWVSZWdz
KHRhZ0l0ZXJSZXN1bHRHUFIsIHBheWxvYWRJdGVyUmVzdWx0R1BSKSwgLy8gYXJnMwogICAgICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihp
ZGVudCkucmF3Qml0cygpKTsgLy8gYXJnNApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi
Q2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJK
SVRJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5j
bHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKICNp
bmNsdWRlICJTdGFja0FsaWdubWVudC5oIgpAQCAtNDQsNyArNDUsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNv
bnN0IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0
aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVn
aXN0ZXIoKSwgcmVnVDApOwogfQogCkBAIC01MywxOCArNTQsMTggQEAgc3RkOjplbmFibGVfaWZf
dDwKICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAh
PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2Nh
bGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwg
Q2FsbExpbmtJbmZvKikKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2Rl
LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHVuc2lnbmVkIGNoZWNrcG9pbnQg
PSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGludCBhcmdDb3VudEluY2x1ZGluZ1Ro
aXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2ludCk7
CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oc3RhY2tPZmZzZXRJ
blJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpKTsKIAorCiAgICAgaWYgKE9w
OjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCAr
IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApKSwgcmVnVDApOwogICAg
ICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwogICAgICAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAg
ICAgICBzdG9yZTMyKHJlZ1QwLCBhcnJheVByb2ZpbGVGb3IobWV0YWRhdGEsIGNoZWNrcG9pbnQp
LmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFk
YXRhKHJlZ1QwLCBieXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0lu
Zm8oKSArIExMSW50Q2FsbExpbmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQ
cm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGRvbmUubGlu
ayh0aGlzKTsKICAgICB9CiAKQEAgLTc4LDcgKzc5LDcgQEAgc3RkOjplbmFibGVfaWZfdDwKICAg
ICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9j
b25zdHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFy
YXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAs
IHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExp
bmtJbmZvKiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUs
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKQEAgLTkxLDcg
KzkyLDggQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAg
ICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50czsK
ICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JW
YXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBm
aXJzdFZhckFyZ09mZnNldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CisgICAgY2Fs
bE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCByZWdUMCwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3Rl
ciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1maXJzdEZyZWVS
ZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0aGlzLCByZXR1cm5W
YWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigt
KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFj
a0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwpAQCAtMTAxLDE0ICsxMDMsMTYgQEAgSklUOjpjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNl
dHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UKICAgICAgICAgc2V0dXBPcGVyYXRp
b24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0aW9uKHNldHVw
T3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCByZWdUMywgcmVn
VDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50LgogICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zm
c2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7Ci0gICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIo
QWJvdmUsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMiwgaW5mby0+YWRkcmVzc09m
TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7CisgICAgbG9hZENvbnN0YW50KGNhbGxM
aW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENhbGxM
aW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwgcmVnVDMp
OworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMywgcmVnVDIpOwor
ICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZN
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CiAgICAgbm90QmlnZ2VzdC5saW5rKHRo
aXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgpAQCAtMTI3LDE2ICsxMzEsMTUg
QEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpCiB0ZW1wbGF0ZTw+CiBib29s
IEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVjb2RlKQogewotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgc3RvcmVQ
dHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJh
bWVPZmZzZXQoKSkpOwotCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgYXJndW1lbnRHUFIx
KTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhhcmd1bWVudEdQUjEs
IENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEs
IHJlZ1QyKTsKKyAgICByZXNldFNQKCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5
KHJlZ1QwKSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1
ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShy
ZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogCkBA
IC0xNDgsNyArMTUxLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0
IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9j
b2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwor
ICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6
Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJn
djsKQEAgLTE1Niw0MyArMTU5LDQ3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9m
KFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1f
dm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsK
KyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBpbmZv
KTsKKyAgICByZXNldFNQKCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25z
dCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2Fs
bChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQsIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1i
b29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBDYWxs
TGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQorYm9vbCBKSVQ6OmNv
bXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlu
a0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewotICAgIENhbGxGcmFtZVNodWZmbGVE
YXRhIHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29k
ZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpu
dW1iZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQorICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVl
PENhbGxGcmFtZVNodWZmbGVEYXRhPigpOworICAgIHNodWZmbGVEYXRhLT5udW1QYXNzZWRBcmdz
ID0gYnl0ZWNvZGUubV9hcmdjOworICAgIHNodWZmbGVEYXRhLT5udW1QYXJhbWV0ZXJzID0gbV91
bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworICAgIHNodWZmbGVEYXRhLT5udW1i
ZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworICAgIHNodWZmbGVE
YXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLmFyZ3MucmVz
aXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1ZmZsZURhdGEtPmFyZ3MucmVzaXplKGJ5dGVj
b2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJn
YzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAgICBzaHVmZmxl
RGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpT
U3RhY2soCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRp
bmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAgICAgICAgIERhdGFGb3JtYXRK
Uyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAgICAgIFZhbHVlUmVjb3Zl
cnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotICAgIHNodWZmbGVEYXRhLnNldHVwQ2Fs
bGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7Ci0gICAgaW5mby0+c2V0RnJhbWVTaHVmZmxl
RGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zl
cnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgIHNodWZmbGVEYXRhLT5zZXR1cENh
bGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCBzaHVm
ZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5r
SW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJ
bmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0g
eworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgKnNodWZmbGVEYXRhKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworCisg
ICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CisgICAgaW5mby0+ZnJhbWVTaHVmZmxlRGF0
YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJl
bCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxv
Y2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjE4LDE0ICsyMjUsMjUgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0
aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBj
YWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KLSAgICBDYWxsTGlua0luZm8q
IGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAg
ICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOworCisg
ICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0gVUlOVF9NQVg7CisgICAgaWYgKG9wY29kZUlE
ICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBpbmZvID0gbV91bmxpbmtlZENhbGxzLmFkZCgp
OworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAg
ICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpOwor
CisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAgICAgQVNTRVJUKG1fY2FsbENv
bXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CisgICAgICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlu
a0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50OworICAgIH0KKyAgICBj
b21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAogICAgIC8vIFNQIGhv
bGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVu
dENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2Nr
LT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMg
PSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1aW50MzJfdCBsb2Nh
dGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0
ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAt
MjM0LDE2ICsyNTIsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9J
bmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bj
b2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29t
cGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0
ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxs
KGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFudCwgcmVnVDIpOwogICAg
IGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBp
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxM
aW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwg
WyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAg
IHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9KTsKQEAgLTI1MywxNCAr
MjY3LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQ
YXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOwor
ICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwot
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgcmVzZXRTUCgpOwogCiAgICAg
ZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQpAQCAtMjczLDIxICsyODYsMjAgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7
CisgICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlzKTsKKyAg
ICBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgqbV92bSwgKnRoaXMsIHJlZ1QyKTsK
IAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKKyAgICByZXNldFNQKCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAg
LTM5NSwxNyArNDA3LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3Qg
SW4KIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+
bmV4dDsKICAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgbW92ZShyZWdUMCwgYmFzZUdQUik7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBy
ZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2Vy
dmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRH
UFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CkBAIC00MTYs
MTAgKzQ0Miw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVy
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2tw
b2ludChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgR1BS
UmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKICAgICBu
b3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyYXRvckdQUikpOwogICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0b3JHUFIpKTsKQEAgLTQzMiwxOSAr
NDU2LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZv
Ojpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBl
KG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyYXRvckdQUiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0
cygpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgbW92ZShpdGVyYXRvckdQUiwg
YXJndW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIAogICAgIGF1dG8gZG9uZSA9
IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJ
c05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKIH0KQEAg
LTQ1Miw3ICs0NzQsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25z
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0
b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewogICAgICAgICBz
d2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNhc2UgTmFycm93OiByZXR1
cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC00NzAsNTAgKzQ5MSw3OSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgSnVtcCBmYXN0Q2Fz
ZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpKTsKIAog
ICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgb3I4KFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIEFic29sdXRlQWRkcmVzcygm
bWV0YWRhdGEubV9pdGVyYXRpb25NZXRhZGF0YS5zZWVuTW9kZXMpKTsKKyAgICBsb2FkOEZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJh
dGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9mU2Vlbk1vZGVz
KCksIHJlZ1QwKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihJ
dGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIHJlZ1QwKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJl
Z1QwLCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdGlv
bk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9mU2Vlbk1vZGVzKCkp
OwogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgLy8g
Y2FsbCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkgaW4gcmVnVDAKIAotICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7
Ci0gICAgR1BSUmVnIGRvbmVHUFIgPSByZWdUMTsKLSAgICAvLyBpdGVyUmVzdWx0R1BSIHdpbGwg
Z2V0IHRyYXNoZWQgYnkgdGhlIGZpcnN0IGdldCBieSBpZCBiZWxvdy4KLSAgICBtb3ZlKHZhbHVl
R1BSLCBpdGVyUmVzdWx0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJl
clJlZ2lzdGVyOworICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsK
IAorICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6cmVzdWx0OwogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0
ZXJSZXN1bHRHUFIpOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFs
dWVHUFIgPT0gYmFzZUdQUik7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIpOwogCiAgICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3Mu
YWRkKHZhbHVlR1BSKTsKKyAgICAgICAgcHJlc2VydmVkUmVncy5hZGQoaXRlckNhbGxSZXN1bHRH
UFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSks
IHByZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBK
U1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHJlZ1QzLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCBwcmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzdHViSW5mb0dQUiwg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVl
ZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAg
ICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAg
ICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7Ci0gICAg
ICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBy
ZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2Fs
bFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxs
b2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNo
QWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIg
PSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcg
Z2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAg
ICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsK
LSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpT
VmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgICAgICBK
dW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3Mo
ZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxHUFIpOworCisgICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnJlc3VsdDsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYmFzZUdQUik7CiAKICAg
ICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1l
cy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgcmVz
ZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZh
dGl2ZWx5IHJlc2V0IFNQCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlc3VsdEdQUik7CiAKICAg
ICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwogICAgIH0KQEAgLTUyNyw1OSArNTc3LDU1
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1w
KCkpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdpc3RlcjsKKwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgewogICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7Ci0gICAgICAgIEdQUlJl
ZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwotICAgICAgICBub3RPYmplY3QuYXBwZW5k
KGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBl
bmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJDYWxsUmVzdWx0R1BSKSk7CiAKICAgICAgICAgVW5pcXVl
ZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKTsKICAg
ICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRl
eCsrXTsKICAgICAgICAgCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQ
UikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJDYWxs
UmVzdWx0R1BSKSk7CiAKLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFy
Z0dQUjApOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotCi0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIHJlZ1QxKTsKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7CisgICAgICAgIG1vdmUo
aXRlckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUs
IEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBkb25lVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihp
ZGVudCkucmF3Qml0cygpKTsKKworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoZG9uZVZSZWcsIGRvbmVHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0Lmxp
bmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJl
c3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSkpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1
bWVudEdQUjApOwogICAgIH0KIAogICAgIHsgICAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFs
dWU7Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKICAgICAgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCk7
CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CiAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAg
ICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpu
b25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2
YWx1ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCB2YWx1ZVZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1
bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2
YWx1ZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0Jp
dHMoKSk7CisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKICAgICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDExIEBACiAj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQu
aCIKIAorCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CisKIG5h
bWVzcGFjZSBERkcgewogY2xhc3MgQ29tbW9uRGF0YTsKIGNsYXNzIEpJVENvZGU7CkBAIC0xNTks
MTAgKzE2MiwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCB1c2VEYXRhSUMoSklUVHlw
ZSBqaXRUeXBlKQogICAgIHsKLSAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVD
b2RlKGppdFR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghT3B0
aW9uczo6dXNlRGF0YUlDKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJl
dHVybiBPcHRpb25zOjp1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQoKTsKICAgICB9CiAKQEAgLTIy
Myw2ICsyMjYsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzU2hhcmVkKCkgY29uc3QgeyByZXR1
cm4gbV9zaGFyZUF0dHJpYnV0ZSA9PSBTaGFyZUF0dHJpYnV0ZTo6U2hhcmVkOyB9CiAKKyAgICB2
aXJ0dWFsIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIHsgcmV0dXJuIG51
bGxwdHI7IH0KKwogcHJpdmF0ZToKICAgICBKSVRUeXBlIG1faml0VHlwZTsKICAgICBTaGFyZUF0
dHJpYnV0ZSBtX3NoYXJlQXR0cmlidXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb21waWxhdGlvbktleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw3ICszOCw3IEBAIHZvaWQgSklUQ29tcGlsYXRpb25LZXk6OmR1bXAoUHJpbnRTdHJl
YW0KICAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgb3V0LnByaW50KCIoQ29tcGlsZSBvZiAiLCAqbV9wcm9maWxlZEJsb2NrLCAiIHdpdGgg
IiwgbV9tb2RlLCAiKSIpOworICAgIG91dC5wcmludCgiKENvbXBpbGUgb2YgIiwgUmF3UG9pbnRl
cihtX2NvZGVCbG9jayksICIgd2l0aCAiLCBtX21vZGUsICIpIik7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktl
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRp
b25LZXkuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb21waWxhdGlvbktleS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw1NyArMzAsNTYgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIENvZGVCbG9ja1NldDsK
K2NsYXNzIEpTQ2VsbDsKIAogY2xhc3MgSklUQ29tcGlsYXRpb25LZXkgewogcHVibGljOgogICAg
IEpJVENvbXBpbGF0aW9uS2V5KCkKLSAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2sobnVsbHB0cikK
KyAgICAgICAgOiBtX2NvZGVCbG9jayhudWxscHRyKQogICAgICAgICAsIG1fbW9kZShKSVRDb21w
aWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbikKICAgICB7CiAgICAgfQogICAgIAogICAg
IEpJVENvbXBpbGF0aW9uS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAg
ICAgOiBtX3Byb2ZpbGVkQmxvY2sobnVsbHB0cikKKyAgICAgICAgOiBtX2NvZGVCbG9jayhudWxs
cHRyKQogICAgICAgICAsIG1fbW9kZShKSVRDb21waWxhdGlvbk1vZGU6OkRGRykKICAgICB7CiAg
ICAgfQogICAgIAotICAgIEpJVENvbXBpbGF0aW9uS2V5KENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aywgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKHBy
b2ZpbGVkQmxvY2spCisgICAgSklUQ29tcGlsYXRpb25LZXkoSlNDZWxsKiBwcm9maWxlZEJsb2Nr
LCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSkKKyAgICAgICAgOiBtX2NvZGVCbG9jayhwcm9maWxl
ZEJsb2NrKQogICAgICAgICAsIG1fbW9kZShtb2RlKQogICAgIHsKICAgICB9CiAgICAgCiAgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3Byb2ZpbGVk
QmxvY2sgJiYgbV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9u
OworICAgICAgICByZXR1cm4gIW1fY29kZUJsb2NrICYmIG1fbW9kZSA9PSBKSVRDb21waWxhdGlv
bk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gIW1fcHJvZmls
ZWRCbG9jayAmJiBtX21vZGUgIT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRp
b247CisgICAgICAgIHJldHVybiAhbV9jb2RlQmxvY2sgJiYgbV9tb2RlICE9IEpJVENvbXBpbGF0
aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOwogICAgIH0KICAgICAKLSAgICBDb2RlQmxvY2sq
IHByb2ZpbGVkQmxvY2soKSBjb25zdCB7IHJldHVybiBtX3Byb2ZpbGVkQmxvY2s7IH0KICAgICBK
SVRDb21waWxhdGlvbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIAog
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBKSVRDb21waWxhdGlvbktleSYgb3RoZXIpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJsb2NrID09IG90aGVyLm1fcHJvZmls
ZWRCbG9jaworICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2sgPT0gb3RoZXIubV9jb2RlQmxvY2sK
ICAgICAgICAgICAgICYmIG1fbW9kZSA9PSBvdGhlci5tX21vZGU7CiAgICAgfQogICAgIAogICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cGFpcklu
dEhhc2goV1RGOjpQdHJIYXNoPENvZGVCbG9jayo+OjpoYXNoKG1fcHJvZmlsZWRCbG9jayksIHN0
YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPEpJVENvbXBpbGF0aW9uTW9kZT46OnR5cGU+
KG1fbW9kZSkpOworICAgICAgICByZXR1cm4gV1RGOjpwYWlySW50SGFzaChXVEY6OlB0ckhhc2g8
SlNDZWxsKj46Omhhc2gobV9jb2RlQmxvY2spLCBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdf
dHlwZTxKSVRDb21waWxhdGlvbk1vZGU+Ojp0eXBlPihtX21vZGUpKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgQ29kZUJs
b2NrKiBtX3Byb2ZpbGVkQmxvY2s7CisgICAgLy8gRWl0aGVyIENvZGVCbG9jayogb3IgVW5saW5r
ZWRDb2RlQmxvY2sqIGZvciBiYXNsZWxpbmUgSklULgorICAgIEpTQ2VsbCogbV9jb2RlQmxvY2s7
CiAgICAgSklUQ29tcGlsYXRpb25Nb2RlIG1fbW9kZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1
ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAi
TGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKQEAgLTQ2LDEw
ICs0Nyw5IEBAIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmYKIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENh
bGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKLSAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
LSAgICAsIG1faml0VHlwZShqaXRUeXBlKQorICAgIDogbV9qaXRUeXBlKGppdFR5cGUpCiB7Ci0g
ICAgbV9zdHViSW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFj
Y2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5m
byA9IGNvZGVCbG9jayA/IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9y
aWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUluZGV4
ID0gY2FsbFNpdGU7CiAKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lz
dGVyczsKQEAgLTU5LDcgKzU5LDYgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Zmlu
YWxpemUoCiAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpCiB7CiAgICAgbV9z
dHViSW5mby0+c3RhcnQgPSBzdGFydDsKLQogICAgIG1fc3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9
IGZhc3RQYXRoLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obV9kb25lKTsKIAogICAgIGlm
ICghSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCkBAIC02Nyw2ICs2NiwxNSBAQCB2b2lk
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBtX3N0dWJJbmZvLT5zbG93
UGF0aFN0YXJ0TG9jYXRpb24gPSBzbG93UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPihtX3Nsb3dQYXRoQmVnaW4pOwogfQogCit2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9y
OjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJ
bmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKyAgICBq
aXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgaml0LmZhckp1bXAo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9kb25lID0gaml0
LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFs
dWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0xMTAsNyArMTE4LDcgQEAgSklU
R2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcgogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVS
ZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKICAg
ICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxs
U2l0ZSwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BS
KQotICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJsb2Nr
LT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCisgICAgLCBtX2lzTGVuZ3RoQWNj
ZXNzKGNvZGVCbG9jayAmJiBwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJsb2NrLT52bSgpLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZS5w
YXlsb2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQpAQCAtMTIwLDYgKzEyOCwzNSBAQCB2
b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhCiAgICAgZ2VuZXJhdGVGYXN0
Q29tbW9uKGppdCwgbV9pc0xlbmd0aEFjY2VzcyA/IElubGluZUFjY2Vzczo6c2l6ZUZvckxlbmd0
aEFjY2VzcygpIDogSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAK
K3N0YXRpYyB2b2lkIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhKSVQmIGppdCwgR1BSUmVn
IHN0dWJJbmZvR1BSLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyByZXN1bHQp
Cit7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxs
SGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZSgpKSk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoKTsK
KyAgICBqaXQubG9hZFByb3BlcnR5KGJhc2UsIHNjcmF0Y2gsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
IH0pOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFj
Y2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhz
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1
YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0KTsKK30KKwordm9pZCBK
SVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBq
aXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9
IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9H
UFIpOworICAgIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhqaXQsIHN0dWJJbmZvR1BSLCBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgbV9kb25l
ID0gaml0LmxhYmVsKCk7Cit9CisKKwogSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5
cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNoZWFibGVJZGVudGlm
aWVyLCBKU1ZhbHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTEzOCw2ICsxNzUsMTggQEAgdm9pZCBKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYQogICAgIGdlbmVyYXRlRmFzdENvbW1vbihq
aXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCit2b2lkIEpJ
VEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1f
c3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0
dWJJbmZvR1BSKTsKKyAgICBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3Moaml0LCBzdHViSW5m
b0dQUiwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lR2V0
QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1Jl
Z2lzdGVyczo6cmVzdWx0KTsKKworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRQ
dXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJs
ZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQ
UlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIApAQCAtMTQ5LDYgKzE5OCwzNCBAQCBK
SVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yCiAgICAgbV9zdHViSW5mby0+
dXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNoKTsKIH0KIAordm9pZCBKSVRQdXRCeUlkR2VuZXJh
dG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0
dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29k
ZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwor
CisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworCisgICAgR1BS
UmVnIGJhc2UgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHNj
cmF0Y2ggPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgR1BSUmVnIHNj
cmF0Y2gyID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBHUFJSZWcg
dmFsdWUgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworCisgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0
byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWws
IHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0Lmxv
YWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQuc3RvcmVQcm9w
ZXJ0eShKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIGJhc2UsIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKKyAg
ICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJbmxpbmVBY2Nlc3MubGlu
aygmaml0KTsKKyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5l
UHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25lID0gaml0Lmxh
YmVsKCk7Cit9CisKIHZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChN
YWNyb0Fzc2VtYmxlciYgaml0KQogewogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGlu
ZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5UmVwbGFjZSgpKTsKQEAgLTIwMCw3ICsyNzcsNyBAQCB2
b2lkIEpJVERlbEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQCiAgICAgbV9zdGFydCA9IGpp
dC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1f
c3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFy
SnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1w
KCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0yMzYsNyArMzEzLDcgQEAgdm9pZCBK
SVREZWxCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIG1fc3RhcnQgPSBqaXQubGFi
ZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJ
bmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAg
ICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwog
ICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtMjcwLDcgKzM0Nyw3IEBAIHZvaWQgSklUSW5C
eVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGEKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7
CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+
bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyht
X3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2Rl
UHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxs
SGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBl
bHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBt
X2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTMwMCw2ICszNzcsMzIgQEAgdm9pZCBKSVRJbkJ5SWRH
ZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdAogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElu
bGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCit2b2lkIEpJVEluQnlJ
ZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNp
Z25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFi
ZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKwor
ICAgIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BS
UmVnIHJlc3VsdCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgR1BSUmVn
IHNjcmF0Y2ggPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAg
IGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGpp
dC5ib3hCb29sZWFuKHRydWUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOworICAgIGF1dG8gZmlu
aXNoZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOwor
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwor
CisgICAgZmluaXNoZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30K
KwogSklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6SklUSW5zdGFuY2VPZkdlbmVyYXRvcigKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwKICAgICBjb25zdCBSZWdpc3RlclNldCYg
dXNlZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgcHJvdG90
eXBlLCBHUFJSZWcgc3R1YkluZm9HUFIsCkBAIC0zMzIsNyArNDM1LDcgQEAgdm9pZCBKSVRJbnN0
YW5jZU9mR2VuZXJhdG9yOjpnZW5lcmF0ZUZhcwogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsK
ICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5t
X3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1f
c3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQ
dHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVs
c2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1f
ZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtMzY4LDcgKzQ3MSw3IEBAIHZvaWQgSklUR2V0QnlWYWxH
ZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHVi
SW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJ
bmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkp
LCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVy
czo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUg
PSBqaXQubGFiZWwoKTsKQEAgLTQwNSw3ICs1MDgsNyBAQCB2b2lkIEpJVFB1dEJ5VmFsR2VuZXJh
dG9yOjpnZW5lcmF0ZUZhc3RQCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9H
UFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+
bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklU
U3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAg
ICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0
LmxhYmVsKCk7CkBAIC00NDAsNyArNTQzLDcgQEAgdm9pZCBKSVRQcml2YXRlQnJhbmRBY2Nlc3NH
ZW5lcmF0b3I6OmdlbgogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsK
LSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNv
ZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9z
bG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJl
bCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNp
bmNsdWRlICJKSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCkBAIC0z
OCwxMSArMzksMTE4IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmll
cjsKIGNsYXNzIENhbGxTaXRlSW5kZXg7CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBj
bGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
OwogCiBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUg
OiB1aW50OF90OwogCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVEZWxCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5m
bzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFz
ZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlu
a2luZyBhIENvZGVCbG9jayBhbmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZh
bCBTdHViSW5mby4KKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0
dWJJbmZvID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3Ry
dWN0IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcHJvdG8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisK
K3N0cnVjdCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5
ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQ
UkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJ
bmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBkb250Q2xvYmJlclJlZ2lz
dGVyID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkV2l0aFRo
aXNSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB0aGlzVmFsdWUgPSBHUFJJbmZvOjpy
ZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJl
Z1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdU
MzsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKK307CisKK3N0
cnVjdCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2
YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aCA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gy
ID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9maWxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0
cnVjdCBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJyYW5kID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQoYnJhbmQg
PT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCiBjbGFzcyBKSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IoKSB7IH0KQEAgLTYyLDEyICsxNzAsMTggQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxp
emUoCiAgICAgICAgIExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYg
c2xvd1BhdGhMaW5rQnVmZmVyLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4gc3RhcnQpOwotICAgIAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJ
bmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHVi
SW5mbyB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3Rl
Y3RlZDoKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBl
OwogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
ZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOwpAQCAtOTgsNyArMjEyLDcgQEAgcHJv
dGVjdGVkOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVl
OwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CitwdWJsaWM6CiAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0xMTEsNiArMjI1LDcg
QEAgcHVibGljOgogICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwg
R1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRl
RmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1Yklu
Zm9HUFIpOwogCiBwcml2YXRlOgogICAgIGJvb2wgbV9pc0xlbmd0aEFjY2VzczsKQEAgLTEyNCw2
ICsyMzksNyBAQCBwdWJsaWM6CiAgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmln
aW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNo
ZWFibGVJZGVudGlmaWVyLAogICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3Mg
YmFzZSwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKKyAgICB2
b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5m
b0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0
aChNYWNyb0Fzc2VtYmxlciYpOwogfTsKIApAQCAtMTMyLDEwICsyNDgsMTEgQEAgcHVibGljOgog
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yKAotICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0
ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRp
ZmllciwgSlNWYWx1ZVJlZ3MgYmFzZSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJl
ZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKKyAgICAg
ICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3Qg
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCisgICAgICAg
IEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIs
IEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CiAgICAgCiAgICAgdm9pZCBnZW5l
cmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0
dWJJbmZvR1BSKTsKICAgICAKICAgICBWX0pJVE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVu
Y3Rpb24oKTsKIApAQCAtMTYzLDExICsyODAsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVy
YXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVn
cyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xv
d1BhdGhKdW1wOwogfTsKIApAQCAtMTkxLDggKzMwNiw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVK
dW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjE2LDggKzMyOSw2IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgot
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQ
YXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjQxLDggKzM1Miw2IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1w
cml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjU1LDYgKzM2
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChK
SVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogfTsK
IAogY2xhc3MgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxpbmVD
YWNoZUdlbmVyYXRvciB7CkBAIC0yNzcsOCArMzg3LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBm
aW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQ
YXRoTGlua0J1ZmZlcik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
c3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7
CiB9OwogCkBAIC0zMDIsMTEgKzQxMCw5IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVy
YXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVn
cyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV9yZXN1bHQ7CiAKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Ns
b3dQYXRoSnVtcDsKIH07CiAKQEAgLTMzMCw4ICs0MzYsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNo
YWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwzOCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3Rh
bnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIGlmICghc3Jj
LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2Vk
Q29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQor
CitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVD
b25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0ludDMyKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25v
d25DZWxsKFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
bnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KSB7CisgICAgICAgIC8vIEFsbCBsaW5rIHRpbWUgY29u
c3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBK
U1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAg
ICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5j
b25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxv
Y2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQ
dXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBl
bnRyeSkKQEAgLTE1NiwzNiArMTgxLDM2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXgKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwg
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lz
dGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQog
ewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQ
UikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJl
dHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1
cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogICAgIHJldHVybiBjYWxsOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
TWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0
KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVy
IGRzdCkKIHsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1
cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1
ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJu
VmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZh
bHVlR1BSKTsKICNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJl
ZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNB
bnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkK
IHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBz
byB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2st
Pmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAg
QVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4
KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkg
KyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVj
b2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6
YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9I
b3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1f
Ynl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQi
KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4
KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmlu
c3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9i
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hl
Y2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwyOSBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQog
ewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkp
LT5sZW5ndGgoKSA9PSAxOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1Rp
bWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2
YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAgIEFTU0VSVChzaG91bGRFbWl0
UHJvZmlsaW5nKCkpOwogCi0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjog
b25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3Jl
LgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9m
aWxlLm1fYnVja2V0cyk7Ci0jZWxzZQogICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmls
ZS5tX2J1Y2tldHMpOwogICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRv
ci0+YXNCaXRzLnBheWxvYWQpOwogICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlw
dG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgogfQorI2VuZGlmCiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpN
ZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2Vu
ZGlmCkBAIC0zMjMsNDEgKzM0OCwzNyBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJv
ZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBK
U1ZhbHVlUmVncyB2YWx1ZSkKKyNpZiBVU0UoSlNWQUxVRTY0KQordGVtcGxhdGU8dHlwZW5hbWUg
Qnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3Qg
Qnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKIHsKICAgICBpZiAoIXNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpKSwgdmFsdWUpOwotfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVn
IHJlc3VsdFJlZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwg
SlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgcHRyZGlmZl90IG9mZnNldCA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSAr
IHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29kZT4obV9ieXRlY29kZUluZGV4LmNoZWNrcG9p
bnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0
KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVn
KSk7CiB9CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwg
UmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5s
aW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQg
Y2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQogewogICAgIGlmIChzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpIHsKICAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBz
dG9yZTMyKHNjcmF0Y2hHUFIsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1
cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUs
IG9mZnNldE9mQXJyYXlQcm9maWxlKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJ
RCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdp
c3RlcklEIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewot
ICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRj
aEdQUiwgQWRkcmVzcyhhcnJheVByb2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0
U2VlblN0cnVjdHVyZUlEKCkpKTsKLSAgICB9CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxl
KCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BS
LCBzY3JhdGNoR1BSKTsKIH0KIAogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCkBAIC0zODAsNyArNDAxLDcgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7
CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUo
VHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTE3LDcg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQog
ewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlz
S25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTI3LDcg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBS
ZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcp
KSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpA
QCAtNTE0LDExICs1MzUsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFu
dEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50
KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU2
MCwxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNT
RVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRl
eCBpcyBzZXQuCiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFs
dWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZSkpLCBkc3QpOwotICAgICAgICBlbHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5pc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFu
dChzcmMpOwogICAgICAgICAgICAgbW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwg
ZHN0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQo
c3JjLCBkc3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01NjYsMTEgKzU4Miw2IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpp
c09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBz
cmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0K
LQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRy
ZXNzRm9yKGRzdCkpOwpAQCAtNTk1LDcgKzYwNiw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRKdW1wU2xvd0Nhc2UKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsK
LSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25v
d25DZWxsKHZSZWcpKQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsK
IH0KIApAQCAtNjM3LDMwICs2NDgsNyBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJn
ZXQoY29uc3QgCiB7CiAgICAgaWYgKHRhcmdldCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAg
ICByZXR1cm4gbV9jb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwot
fQotCi1BTFdBWVNfSU5MSU5FIEdldFB1dEluZm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0
VG9TY29wZSBieXRlY29kZSkKLXsKLSAgICB1bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFk
YXRhSUQgKyAxOyAvLyBIYXNoTWFwIGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBp
dGVyYXRvciA9IG1fY29waWVkR2V0UHV0SW5mb3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRv
ciAhPSBtX2NvcGllZEdldFB1dEluZm9zLmVuZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5m
byhpdGVyYXRvci0+dmFsdWUpOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2dldFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJ
bmZvcy5hZGQoa2V5LCBnZXRQdXRJbmZvLm9wZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dElu
Zm87Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5h
cnlBcml0aFByb2ZpbGUgSklUOjpjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUp
Ci17Ci0gICAgdWludDY0X3Qga2V5ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6
b3Bjb2RlSUQpICsgMSkgPDwgMzIgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9t
ZXRhZGF0YUlEKTsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZp
bmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgp
KQotICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFBy
b2ZpbGU7Ci0gICAgbV9jb3BpZWRBcml0aFByb2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7
Ci0gICAgcmV0dXJuIGFyaXRoUHJvZmlsZTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9j
ay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgpAQCAtNjgxLDYgKzY2OSw2MCBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6
ZWNtYU1vZGU8T3BQCiAgICAgcmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZy
b21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJl
ZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5r
ZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSAr
IG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYg
Ynl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFk
ZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZz
ZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhG
cm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJS
ZWcgcmVzdWx0KQoreworICAgIGxvYWQ4KEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtl
ZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsg
b2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRh
KFZhbHVlVHlwZSB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0
KQoreworICAgIHN0b3JlOCh2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBv
ZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6c3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29k
ZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVz
cyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldElu
TWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVy
SW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BS
UmVnIHJlc3VsdCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxv
Y2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCks
IHNfbWV0YWRhdGFHUFIsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxv
YWRDb25zdGFudChKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJl
ZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KGNvbnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAg
ICBsb2FkQ29uc3RhbnQobV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3Rl
ciBjb25zdGFudCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dC5pc0NvbnN0YW50KCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9j
azo6b2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7CisgICAgbG9hZFB0
cihBZGRyZXNzKHJlc3VsdCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2Yodm9p
ZCopKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25l
d19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
LnN0cnVjdHVyZSgpOwogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6
OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2Nh
dG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5h
bE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0
b3JJZkV4aXN0cyk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
d19vYmplY3QoY29uc3QgSQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgp
LCBzdHJ1Y3R1cmUpOwpAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJy
aWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0TG9hZFBheWxvYWQoaGFzSW5zdGFuY2VWYWx1ZSwg
cmVnVDApOwogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJ
bnN0YW5jZSB3b3VsZCBkby4KICAgICBKdW1wIGhhc0luc3RhbmNlVmFsdWVOb3RDZWxsID0gZW1p
dEp1bXBJZk5vdEpTQ2VsbChoYXNJbnN0YW5jZVZhbHVlKTsKLSAgICBKdW1wIGN1c3RvbWhhc0lu
c3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9s
RnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0
cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCiAg
ICAgLy8gV2Uga25vdyB0aGF0IGNvbnN0cnVjdG9yIGlzIGFuIG9iamVjdCBmcm9tIHRoZSB3YXkg
Ynl0ZWNvZGUgaXMgZW1pdHRlZCBmb3IgaW5zdGFuY2VvZiBleHByZXNzaW9ucy4KICAgICBlbWl0
TG9hZFBheWxvYWQoY29uc3RydWN0b3IsIHJlZ1QwKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHByb3RvKTsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAg
ICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgcmVnVDAsIC8v
IHJlc3VsdAogICAgICAgICByZWdUMiwgLy8gdmFsdWUKQEAgLTE5Niw3ICsxOTYsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAgICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKICAgICBlbWl0
TG9hZFRhZyhwcm90bywgcmVnVDMpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QwLCByZWdUMiksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMSkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplLCBkc3QsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMCwgcmVnVDIpLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDEpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwogfQogCkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKAogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAg
IGVtaXRMb2FkUGF5bG9hZChjb25zdHJ1Y3RvciwgcmVnVDIpOwogICAgIGVtaXRMb2FkKGhhc0lu
c3RhbmNlVmFsdWUsIHJlZ1Q0LCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25J
bnN0YW5jZU9mQ3VzdG9tLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIG1fcHJvZmlsZWRCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBKU1ZhbHVl
UmVncyhyZWdUNCwgcmVnVDMpKTsKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogfQogICAgIApAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVv
Zl9pc191bmRlZmluZWQoY28KICAgICAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVk
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJl
MzIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwogCkBAIC0zNzgsNyArMzc4LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29ucwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBuYW1lID0gYnl0ZWNvZGUubV9uYW1lOwogICAgIGVtaXRMb2FkUGF5bG9hZChmdW5jLCByZWdU
MSk7CiAgICAgZW1pdExvYWQobmFtZSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBy
ZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRGdW5jdGlvbk5hbWUsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJl
Z1QxLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MDgsNyArNDA4
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogICAgIEdQUlJl
ZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgIGJv
b2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1w
KGJyYW5jaElmRmFsc2V5KHZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZt
KCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MjIsNyArNDIyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogICAgIEpTVmFsdWVSZWdzIHZhbHVlKHJlZ1Qx
LCByZWdUMCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgR1BSUmVnIHNjcmF0
Y2gyID0gcmVnVDM7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCB2YWx1ZSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAg
YWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJv
ZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDM3LDcgKzQzNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMK
IAogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVy
bywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAg
ICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRl
c0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNDYzLDcgKzQ2Myw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKIAogICAgIGFkZEp1bXAoYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdl
dCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTUwNCw3ICs1MDQs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgSlNWYWx1
ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQ
b2ludGVyKTsKICAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwpAQCAtNTUyLDEz
ICs1NTIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAg
IGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8g
U3RyaW5nIGNhc2UuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKICAgICBzdG9yZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsK
IAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nh
c2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZEJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9yZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIGVtaXRT
dG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC01OTEsMTQgKzU5MSwxNCBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvCiAgICAgZ2VuZXJpY0Nhc2UuYXBw
ZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QyKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwg
cmVnVDIpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBp
bGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFy
Z2V0KTsKICAgICBkb25lLmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgog
ICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAg
ICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8g
Tm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdldCk7CiAKICAgICBkb25l
LmxpbmsodGhpcyk7CkBAIC02NDMsMTMgKzY0MywxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmVxKGNvbnN0IEluc3RydWN0CiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3Ry
aW5nKHJlZ1QyKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdU
MCwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBt
X3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwogICAgIHN0b3Jl
UmVzdWx0LmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVy
aWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmlj
Q2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIHN0b3JlUmVzdWx0
LmxpbmsodGhpcyk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJldHVyblZhbHVlR1BS
KTsKQEAgLTc2Miw3ICs3NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNv
bnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpz
dHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fcHJvZmlsZWRCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTc3Miw3ICs3NzIsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBA
IC03OTEsNyArNzkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVj
dAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVn
VDIsIHJlZ1QxKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTgyMyw3
ICs4MjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAg
ICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtODQ2LDcgKzg0
Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICAgICBBU1NF
UlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdExvYWQo
Ynl0ZWNvZGUubV92YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25UaHJvdywgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgp
KTsKIH0KIApAQCAtODYyLDcgKzg2Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihj
b25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwogICAgIGlzSW50MzIubGluayh0
aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOwogICAgIGlmIChzcmMgIT0gZHN0KQogICAgICAgICBlbWl0U3RvcmUo
ZHN0LCByZWdUMSwgcmVnVDApOwogfQpAQCAtODg0LDcgKzg4NCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51
bWJlcihhcmd1bWVudFZhbHVlUmVncywgcmVnVDIpKTsKICAgICBpc0JpZ0ludC5saW5rKHRoaXMp
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSk7CiAgICAgaWYgKHNyYyAhPSBkc3QpCiAgICAgICAgIGVtaXRTdG9yZShkc3Qs
IHJlZ1QxLCByZWdUMCk7CiB9CkBAIC05MTUsNyArOTE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fb2JqZWN0KGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWdUMSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEs
IHJlZ1QwKTsKIH0KQEAgLTkzMSw3ICs5MzEsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2go
Y29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1l
Rm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hP
ZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFdoZW4gdGhl
IExMSW50IHRocm93cyBhbiBleGNlcHRpb24sIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUg
YWxyZWFkeSB0aWVyZWQgdXAKKyAgICAvLyB0aGUgc2FtZSBDb2RlQmxvY2sgdG8gYmFzZWxpbmUs
IGFuZCB3ZSdsbCBjYXRjaCB0aGUgZXhjZXB0aW9uIGluIHRoZSBiYXNlbGluZSBKSVQgKGJlY2F1
c2UKKyAgICAvLyB3ZSB1cGRhdGVkIHRoZSBleGNlcHRpb24gaGFuZGxlcnMgdG8gcG9pbnQgaGVy
ZSkuIEJlY2F1c2UgdGhlIExMSW50IHVzZXMgYSBkaWZmZXJlbnQgdmFsdWUKKyAgICAvLyBpbnNp
ZGUgc19jb25zdGFudHNHUFIsIHRoZSBjYWxsZWUgc2F2ZXMgd2UgcmVzdG9yZSBhYm92ZSBtYXkg
bm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgcmVnaXN0ZXIuCisgICAgLy8gU28gd2UgcmVwbGVuaXNo
IGl0IGhlcmUuCisgICAgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgp
KSwgc19jb25zdGFudHNHUFIpOworICAgIH0KIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZt
KCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTU0LDcgKzk2NSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3Rv
cmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxS
ZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZl
ciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2Rl
SW5kZXguYXNCaXRzKCkpOwpAQCAtOTk2LDggKzEwMDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9z
d2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5
dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRj
aCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmls
ZWRCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxl
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsK
ICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29k
ZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxp
bmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDIzLDEzICsx
MDM0LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAv
LyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBz
d2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV9wcm9maWxlZEJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9z
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRj
aFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRj
aFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5s
aW5rZWRUYWJsZSk7CiAKICAgICBlbWl0TG9hZChzY3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRh
YmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCwgdW5saW5rZWRU
YWJsZS5tX21pbik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogfQog
CkBAIC0xMDQxLDEzICsxMDUyLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmco
Y29uc3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1
dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
IGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9wcm9maWxl
ZEJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBT
dHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4
LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7
CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKICAgICBl
bWl0TG9hZChzY3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIG1fcHJv
ZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRh
YmxlSW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIApA
QCAtMTA2OCw3ICsxMDc5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1
Y3RpbwogICAgIC8vIEV2ZW4gdGhvdWdoIEpJVCBjb2RlIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGlu
aXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2lu
dGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxp
ZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIGZvciAoaW50IGkgPSBDb2Rl
QmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsg
aSA8IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7ICsraSkKKyAgICBmb3IgKGludCBpID0gQ29kZUJs
b2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkg
PCBtX3Byb2ZpbGVkQmxvY2stPm51bVZhcnMoKTsgKytpKQogICAgICAgICBlbWl0U3RvcmUodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSklUU2xvd1Bh
dGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9l
bnRlcik7CkBAIC0xMDg3LDcgKzEwOTgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUo
Y29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxl
ZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2Fj
aGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBj
YWxsZWVSZWcgPSByZWdUMDsKQEAgLTExMjIsNyArMTEzMyw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hl
ZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHRoaXNSZWdpc3RlciA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCkBAIC0xMTQ1LDcg
KzExNTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1CiB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZEJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1l
dGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmls
ZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCkBAIC0xMjM5LDcgKzEyNTAs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgZW1pdExv
YWRUYWcoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QxKTsKICAgICBKU1ZhbHVlUmVncyB0aGlz
UmVncyhyZWdUMSwgcmVnVDIpOwogICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
LCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVn
LCB0aGlzUmVncywgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCkpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
dGhpc1JlZ3MsIHJlZ1QzLCBtX3Byb2ZpbGVkQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMSAr
NTQsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGlmIChzcmMuaXNDb25z
dGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgc3Rv
cmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0
KSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29u
c3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soc3JjKSkgeworICAgICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAg
ICAgICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRz
dCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50
KHNyYywgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3Qp
KTsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICs5MCwz
NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmpl
Y3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmlu
YWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50
bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2Rl
OjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1Qw
OwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBz
Y3JhdGNoUmVnID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsK
IAotICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAg
IGVsc2UgewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVy
Zmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmpl
Y3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRv
clJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNs
b3dDYXNlcyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcs
IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92
bSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRv
cigpLCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
TmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJl
Zyk7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVz
dGVkSW1tUHRyKG51bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywg
SklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0
dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0
dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsK
KyAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsK
KyAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSBy
ZWdUMzsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
c3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
TmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTEzMSw3ICsxMzIsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKICAgICAvLyBXZSBkb24n
dCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAg
SnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9I
YXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qx
KTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWws
IHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1f
ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24pKSk7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CiAKQEAgLTE1NCwzMCArMTU2LDM4
IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMg
KGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4K
LSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdp
dGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvdG9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCB2YWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9H
UFIpOwogICAgIAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11
c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJv
bC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZh
bHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3Rh
bmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAg
ICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
cmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEs
IC8vIHByb3RvCi0gICAgICAgIHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3Jh
dGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgIHJlc3VsdEdQUiwKKyAgICAgICAgdmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAg
ICAgICBzdHViSW5mb0dQUiwKKyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpz
Y3JhdGNoMSwgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9m
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0g
ICAgCisKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCAr
MjAyLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9w
dGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJ
bmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRp
b25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BS
MCwgcmVnVDIsIHJlZ1QxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVn
VDEpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09
IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdp
c3RlcnM6OnZhbHVlID09IGFyZ3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9u
PGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rp
b24qKQpAQCAtMjQwLDcgKzI0OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRl
ZmluZWQoY28KIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAg
IGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1
YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwogCkBAIC0zODMsOSArMzkyLDkgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3Bf
cmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJikKIHsKLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaml0LmNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lz
dGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAg
LTQxMSw3ICs0MjAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5z
CiAKICAgICBpZiAoZHN0ICE9IHNyYykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM0LDkgKzQ0MiwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25O
YW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdU
MSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIGFyZ3VtZW50R1BS
Mik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NjUsOCArNDc0LDEwIEBAIHZvaWQgSklUOjpl
bWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBK
U1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsK
KyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTQ4MCw3ICs0OTEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNTE5LDcgKzUzMCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2Vs
bCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1
cmUuCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OCha
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1h
c3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwogCkBAIC01NDMsNyArNTU0
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydQogICAgIC8vIEZp
cnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBi
aXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAg
d2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCkBAIC01ODIsMTUgKzU5MywxMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
X3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2lu
dGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAg
IEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
ICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0
cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSks
ICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVj
b2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QxKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1
YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0
YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVjb2RlLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRP
Zkhhc0p1bXBlZCgpKTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5s
aW5rKHRoaXMpOwogfQpAQCAtNjI1LDggKzYzNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1
ZShjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBy
ZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFy
Z2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVt
cChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3Jh
dGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bSgpLmdldENUSVN0dWIodmFsdWVJc1RydXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRh
cmdldCk7CkBAIC02NDAsNyArNjUxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMTsKQEAgLTY5NSw3ICs3MDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJv
dyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNv
cHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlG
cmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdU
MCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblRocm93LCByZWdUMSwgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIodm0oKSk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSBhcmd1bWVudEdQUjI7CkBAIC03MTEsNyArNzIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhy
b3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5l
cmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIy
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhyb3duVmFsdWVHUFIgPSBhcmd1bWVudEdQUjE7CkBA
IC03MjAsNyArNzMyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogCiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgaml0Lmxv
YWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIGFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChhcmd1bWVudEdQUjApOwor
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihhcmd1
bWVudEdQUjApOwogI2VuZGlmCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQ
UiA9IGFyZ3VtZW50R1BSMDsKQEAgLTkwOCw3ICs5MjAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfanN0cmljdGVxKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
cmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTE4LDcgKzkzMSw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KIApAQCAtOTMxLDcgKzk0NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25z
dCBJbnN0cnUKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkp
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdU
MCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk1MSw3ICs5NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90b19udW1lcmljKGNvbnN0IEluc3RyCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApKTsKICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcg
IT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0K
QEAgLTk3OCw3ICs5OTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5z
dHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRz
dFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05
OTMsNyArMTAwNywxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlv
CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0
ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3Vu
bGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gV2hlbiB0aGUgTExJbnQgdGhyb3dzIGFu
IGV4Y2VwdGlvbiwgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSd2ZSBhbHJlYWR5IHRpZXJlZCB1
cAorICAgIC8vIHRoZSBzYW1lIENvZGVCbG9jayB0byBiYXNlbGluZSwgYW5kIHdlJ2xsIGNhdGNo
IHRoZSBleGNlcHRpb24gaW4gdGhlIGJhc2VsaW5lIEpJVCAoYmVjYXVzZQorICAgIC8vIHdlIHVw
ZGF0ZWQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVycyB0byBwb2ludCBoZXJlKS4gQmVjYXVzZSB0aGUg
TExJbnQgdXNlcyBhIGRpZmZlcmVudCB2YWx1ZQorICAgIC8vIGluc2lkZSBzX2NvbnN0YW50c0dQ
UiwgdGhlIGNhbGxlZSBzYXZlcyB3ZSByZXN0b3JlIGFib3ZlIG1heSBub3QgY29udGFpbiB0aGUg
Y29ycmVjdCByZWdpc3Rlci4KKyAgICAvLyBTbyB3ZSByZXBsZW5pc2ggaXQgaGVyZS4KKyAgICB7
CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkpJVERhdGEoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2Rl
QmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQ
Uik7CisgICAgfQogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
UmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBp
c0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
Uik7CkBAIC0xMDExLDIzICsxMDM2LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0
IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMg
dG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVy
KiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKLSAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRF
bWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMo
KSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2Rl
SW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJ
bmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBza2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFpl
cm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAg
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tp
cE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJl
Z1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJh
bmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2Fz
dDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSwgcmVncyk7Ci0gICAgICAgIH0pOwotICAgIH0KICNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIApAQCAtMTA1Myw4ICsxMDY2LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBz
Y3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRh
YmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQu
Ci0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxl
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFi
bGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFi
bGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJs
ZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1t
ZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7
CiAKQEAgLTEwODEsMTMgKzEwOTQsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIo
Y29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3Nj
cnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRp
b25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1w
bGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1f
c3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgs
IGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFi
bGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dp
dGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJu
VmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIApAQCAtMTA5OSwyMCArMTExMywyMiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1
bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRl
bWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
LSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBU
YWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0
Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVm
YXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1
cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJp
bmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3du
S2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgpOwogICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOwotICAg
IGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwor
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7
CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJl
cXVlc3RzKCkpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hU
ZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2
bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5v
RGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwpAQCAtMTEzMyw3ICsxMTQ5LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAs
IHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMik7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAg
SnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTQ4LDcgKzExNjQsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE2Niw3ICsxMTgxLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1Qy
LCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7
CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVt
cCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTg4LDEyICsxMjAzLDE0IEBAIHZvaWQg
SklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBD
VEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyBy
ZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHBy
b2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1
cmUuCi0gICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKKyAgICBzaXpl
X3QgY291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1WYXJzKCk7CiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2op
CiAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwog
Ci0gICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CisgICAgCisgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0V3Jp
dGVCYXJyaWVyKHJlZ1QwKTsKIAogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAj
ZWxzZQpAQCAtMTIxMiw3ICsxMjI5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3Qg
SW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0m
IHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBD
UFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTEzMTAsMjMg
KzEzMjcsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9U
aGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2Nh
Y2hlZFN0cnVjdHVyZUlEOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
cmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7
CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlw
ZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0
cnVjdHVyZUlEKCksIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2Rl
Lm1fY2FsbGVlOwotICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24g
PSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSBy
ZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJ
RCByZXN1bHRSZWcgPSByZWdUMDsKQEAgLTEzNDIsNyArMTM1NSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFS
ZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSAr
IE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3Io
KSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6
b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJl
UmVnKTsKIAotICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsK
KyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcENyZWF0ZVRoaXM6Ok1ldGFkYXRh
OjpvZmZzZXRPZkNhY2hlZENhbGxlZSgpLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBo
YXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJl
ZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5j
dGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEz
NzIsNyArMTM4NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29s
ZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsK
IH0KQEAgLTEzODIsNyArMTM5Niw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAg
ICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVy
blZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQs
NyArMTQwOSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBA
IC0xNDA0LDcgKzE0MjAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0
cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKQEAgLTE0MTgsMTAgKzE0MzUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1f
Y29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRl
Y29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVn
VDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBH
UFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20s
IEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1
cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTQzMCw3ICsxNDQ4
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewot
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9y
RnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdF
YXJseVJldHVybigpKSkgeworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZy
b21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fdW5saW5rZWRDb2RlQmxvY2stPmxvb3BI
aW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRw
dHJfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24p
OwogICAgICAgICBsb2FkUHRyKHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJl
dHVybiA9IGJyYW5jaFB0cihCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFy
bHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTE0NDAsNyArMTQ1OCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICNlbHNlCiAgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKLSAgICAgICAgbW92ZVZhbHVlKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVzdWx0UmVncy5ncHIoKSk7CiAgICAgICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKQEAgLTE0NTMsOCArMTQ3MSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3Bf
aGludChjb25zdCBJbnN0cnUKIAogICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hl
Y2s6IAogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZlT3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhl
Y3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCi0gICAgICAgICAgICBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAg
ICAgICAgICBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50
ZXIoKSkpKTsKICAgICB9CiB9CiAKQEAgLTE1MDksNyArMTUyOCw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFyZ3VtZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTIyLDcg
KzE1NDIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0g
ICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQp
CiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMTU2NCwzNCArMTU4NCwzNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdl
eHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1Jl
Z2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8
UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcg
Z2xvYmFsR1BSID0gYXJndW1lbnRHUFIwOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BS
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nh
c3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwog
ICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0g
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9h
ZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5
dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8
dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7
CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwogCiAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19m
dW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAg
ZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAg
ZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNF
eGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBk
c3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAg
ICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTYyMSwyMyArMTY0MywyNCBAQCB2b2lkIEpJ
VDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRl
Y29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCiAKLSAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1
bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwciwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRD
b25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rp
b24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlm
IChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxz
ZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5j
dGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAg
ICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjY0LDI5ICsxNjg3LDMwIEBAIHZv
aWQgSklUOjplbWl0X29wX25ld19hc3luY19nZW5lcmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29w
X25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2Rl
Lm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
dmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIGFyZ3VtZW50R1BSMik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5
dGVjb2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9m
aWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBzaXplKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1f
bGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
aXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0
aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVn
VDApOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdB
cnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCks
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFy
Z3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAjZWxzZQorICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKICAgICBl
bWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2Nh
dGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKICNlbmRpZgogfQogCkBAIC0xNjk0LDggKzE3MTgsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBtX2lzU2hhcmVh
YmxlID0gZmFsc2U7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRp
b24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVU
b1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTc3Nywy
MCArMTgwMywyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAg
ICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVn
VDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+
KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3Jh
dGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdp
c3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dD
aGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gy
UmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8v
IFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0o
KSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIH0KICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAg
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhy
ZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
KTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNW
YWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogeworICAgIG1faXNTaGFyZWFibGUgPSBmYWxzZTsKKwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAg
QmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2lj
QmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlv
bi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsKQEAgLTE4NjAsNyArMTg5MSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmlu
ZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3
ICsxOTE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAg
IGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJl
Z3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBy
ZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ29kZUJs
b2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNs
dWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgpAQCAtMjg1NSw3ICsy
ODU2LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpT
VmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2Nr
LT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJs
b2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwog
ICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRk
cmVzcygpOwogCkBAIC0yODgwLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJ
bnQzMigpKQpAQCAtMjkwMyw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNl
bGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNT
dHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZh
bHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpAQCAtMjkxOSw3ICsyOTIwLDYgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPihyZXN1bHQpOwogfQogCi0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUs
IEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5z
dHJ1Y3Rpb24qIHBjKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0y
OTcxLDcgKzI5NzEsNiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2
CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc29sdmVkU2NvcGUpOwogfQotI2VuZGlm
CiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29k
ZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rp
b24qIHBjKSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCw3IEBAIEpTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHIKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgY2hhciosIChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgsIGludDMyX3QgbWlu
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtu
b3duS2V5VHlwZSwgY2hhciosIChWTSosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxl
SW5kZXgsIGludDMyX3QgbWluKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgY2hhciosIChKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgpKTsKLSNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2
ZVNjb3BlRm9yQmFzZWxpbmUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25z
dCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwotI2VuZGlmCiBKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkdldEZyb21TY29wZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9i
amVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBDKSk7CiBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblB1dFRvU2NvcGUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIGNv
bnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBDKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQbGFuLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsMTIgQEAgYXV0
byBKSVRQbGFuOjp0aWVyKCkgY29uc3QgLT4gVGllcgogCiBKSVRDb21waWxhdGlvbktleSBKSVRQ
bGFuOjprZXkoKQogewotICAgIHJldHVybiBKSVRDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+
YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLCBtX21vZGUpOworICAgIEpTQ2VsbCogY29kZUJsb2NrOwor
ICAgIGlmIChtX21vZGUgPT0gSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkKKyAgICAgICAg
Y29kZUJsb2NrID0gbV9jb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CisgICAgZWxzZQor
ICAgICAgICBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwor
ICAgIHJldHVybiBKSVRDb21waWxhdGlvbktleShjb2RlQmxvY2ssIG1fbW9kZSk7CiB9CiAKIGJv
b2wgSklUUGxhbjo6aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlz
aW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdAogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2Us
IHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRp
b25zLCByZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBt
X3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZEJsb2NrLT5p
ZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X2lkKGNvbnN0CiAKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVt
aXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFNldHRlckJ5SWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIG1fcHJvZmlsZWRCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIocHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtODcsNyArODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9i
eV9pCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxv
YWQoZ2V0dGVyLCByZWdUMyk7CiAgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDQpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSku
aW1wbCgpLCBhdHRyaWJ1dGVzLCByZWdUMywgcmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBy
ZWdUMSwgbV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIGF0dHJp
YnV0ZXMsIHJlZ1QzLCByZWdUNCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDEsNyAr
MTAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVt
aXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMik7CiAgICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1Qx
LCByZWdUMCk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1Qz
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBtX3Byb2ZpbGVk
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
YXR0cmlidXRlcywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE1LDcgKzEx
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0
TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMSwg
cmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgbV9wcm9maWxlZEJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0
dHJpYnV0ZXMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjMsNyArMTIzLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKQEAgLTEzMSw4ICsxMzEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1CiAgICAgZW1pdExvYWQoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdz
LnBheWxvYWRHUFIoKSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJh
c2VSZWdzLnRhZ0dQUigpKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCisg
ICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxv
Y2ssICppZGVudCksCiAgICAgICAgIGJhc2VSZWdzLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVn
LCByZWdUNCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChwcm9wZXJ0eSwgcHJvcGVydHlSZWdzLnRhZ0dQUigpKTsKIAogICAgIEpJVERlbEJ5VmFs
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBt
X3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBiYXNlUmVncywgcHJvcGVydHlSZWdz
LCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7CiAKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CkBAIC0yMDIsNyArMjAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV92YWwoY29uc3QgSQogCiAgICAgZW1pdExvYWQyKGJhc2UsIGJhc2VSZWdzLnRhZ0dQ
UigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCksIHByb3BlcnR5LCBwcm9wZXJ0eVJlZ3MudGFnR1BS
KCksIHByb3BlcnR5UmVncy5wYXlsb2FkR1BSKCkpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhiYXNl
UmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKSwgVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKGJh
c2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5wYXlsb2FkR1BSKCkpLCBUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIHJlc3Vs
dFJlZ3MpOwpAQCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlf
aWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKU1ZhbHVlUmVncyBi
YXNlUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CkBAIC0yMjcsNyArMjI3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogCiAgICAgZW1pdExvYWQo
YmFzZSwgYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSk7CiAKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
YmFzZVJlZ3MsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVk
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9m
aWxlZEJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCByZXN1bHRSZWdzKTsKQEAgLTIzNyw3
ICsyMzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CkBAIC0yNDksNyArMjQ5LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgICAgICBhdXRvIG5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwogICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1Q0KTsKICAgICAgICAgbm90Q2VsbC5s
aW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgb3BlcmF0aW9uR2V0QnlW
YWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJl
Z1QxKTsKICAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9m
aWxlLCByZWdUNCk7CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cgogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCiAgICAgICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKICAgICAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwpAQCAtMjY1LDcgKzI2NSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7
CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgICAgICBl
bWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogICAgIH0KIH0KQEAgLTI3NSw3ICsyNzUsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgaWYgKGhhc0Fu
eVNsb3dDYXNlcyhpdGVyKSkgewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKQEAgLTI4NCw3ICsyODQsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CisgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKICAgICB9CiB9CkBAIC0zMDUsMTMgKzMwNSwxMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCiAgICAg
ICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgYmFzZUdQUiwgcHJv
cGVydHlHUFIsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgcmVzdWx0
UmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVn
cy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC0zMzAsNyArMzMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9wcml2YXRlX25hbWUoYwogCiAgICAgYXV0byBiYXNlR1BSID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKICAgICBhdXRvIHByb3BlcnR5R1BSID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwg
b3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJv
ZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJv
cGVydHlHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiB9CiAKQEAgLTM0OCw3ICszNDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0
ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1Qx
KTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdz
KHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9wcml2YXRlX25hbWUoYwogICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUNSwgcmVnVDQp
OwogCiAgICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25Q
dXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQ
cml2YXRlRmllbGRPcHRpbWl6ZTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlUmVn
cywgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MsIGdlbi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRy
KG51bGxwdHIpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZVJlZ3MsIHBy
b3BlcnR5UmVncywgdmFsdWVSZWdzLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxs
cHRyKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwogfQpAQCAtMzk1LDcgKzM5NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2Jy
YW5kKGNvbnMKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3Mu
dGFnR1BSKCkpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKICAgICAgICAgYmFzZVJlZ3MsIGJyYW5kUmVncywgSW52YWxpZEdQUlJlZyk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CkBAIC00MTgsNyArNDE4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Nl
dF9wcml2YXRlX2JyYW5kKAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2Vu
ID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4XTsKICAg
ICArK21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2
YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGJhc2VSZWdzLCBicmFuZFJlZ3MpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTQzNSw3ICs0MzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBiYXNlUmVncywgYnJhbmRSZWdz
LCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTQ1Miw3ICs0NTIsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgSklUUHJpdmF0ZUJyYW5k
QWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJy
YW5kQWNjZXNzSW5kZXhdOwogICAgICsrbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleDsKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFu
ZFJlZ3MpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2
YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOwogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTQ2NSw3ICs0
NjUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwpAQCAtNDc4LDcgKzQ3OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHIKICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAs
IHJlZ1Q2LCByZWdUNyk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1f
cHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1Zh
bHVlUmVncyhyZWdUNSwgcmVnVDQpLCByZWdUNiwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CkBAIC01MDQsNyArNTA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSQogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAg
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBKSVQ6OmVjbWFN
b2RlKGJ5dGVjb2RlKTsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZEJsb2NrKTsKICAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKICAgICB9OwogCkBAIC01MjQsNyArNTI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMiwgcmVnVDEs
IHByb3BlcnR5LCByZWdUMywgcmVnVDApOwogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUNSwgcmVn
VDQpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9k
ZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSk7
CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpA
QCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3Qg
SW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdU
MSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7
CkBAIC01NDIsMTMgKzU0MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
OjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5
cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHko
cmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlk
KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3Vs
dFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtNTU4LDEz
ICs1NTgsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9m
aWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
bV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
fQpAQCAtNTc1LDcgKzU3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNl
LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBy
ZWdUMSk7CkBAIC01ODMsMTMgKzU4MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
ZGlyZWN0KGNvbnN0CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5
bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkRGlyZWN0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4p
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRz
dCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBA
IC01OTksMTMgKzU5OSwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRl
eCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogCiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTYxNCwx
MCArNjE0LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAgICAgCiAgICAgZW1pdExvYWQoYmFz
ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwg
cmVnVDEpOwpAQCAtNjMwLDEzICs2MzAsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydQogCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRP
bmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJl
Z3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtNjQ2LDEzICs2
NDYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmls
ZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC02NjMsNyArNjYzLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNW
YWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
ICAgIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQodGhp
c1ZSZWcsIHJlZ1Q0LCByZWdUMyk7CkBAIC02NzMsMTMgKzY3MywxMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgSW52YWxpZEdQUlJlZyk7CisgICAgICAg
IG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICpp
ZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1Q0LCByZWdUMyksIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayks
IHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtNjg5LDEzICs2ODksMTMgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlz
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRl
eCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9i
amVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CiB9CkBAIC03MTAsMTUgKzcxMCwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29u
c3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRp
cmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRMb2FkMihiYXNlLCBy
ZWdUMSwgcmVnVDAsIHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgIAogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksCisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCksCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2Fk
T25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEludmFsaWRHUFJSZWcsCiAg
ICAgICAgIHJlZ1QxLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFNb2RlKCksIGRpcmVjdCA/IFB1dEtp
bmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7CiAgICAgCkBAIC03MzgsNyArNzM4LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRo
aXMpOwogCkBAIC03NDgsNyArNzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9p
ZChjb25zdCBJbgogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9w
dXRCeUlkSW5kZXgrK107CiAgICAgCiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigKLSAg
ICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgICAg
IGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAg
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAg
LTc1OCwxNCArNzU4LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAog
ICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZhbGlkR1BSUmVnKTsKKyAg
ICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5
SWRzLmFwcGVuZChnZW4pOwpAQCAtNzc5LDEzICs3NzksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9p
bkJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZv
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CiB9CkBAIC03OTYsNyArNzk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFs
KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBlbWl0TG9hZDIoYmFz
ZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKQEAgLTgwNCw3ICs4MDQs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUNCk7CiAKICAgICBK
SVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTgxOSwxNCArODE5LDE0IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9
IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5C
eVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxl
ZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC04MzcsNyAr
ODM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlcgogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRJbkJ5VmFs
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVn
czo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTg1
Myw3ICs4NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAg
ICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsr
XTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJh
dGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDog
b3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3By
b2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogCiAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTg5MCw3ICs4OTAs
NyBAQCB2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlCiB7CiAgICAgaWYg
KCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmpl
Y3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MsIHVuc2lnbmVkIGRlcHRoKQpAQCAtOTA2LDcgKzkwNiw3IEBAIHZvaWQgSklUOjplbWl0
UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBz
Y29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBt
ZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwpAQCAtOTE2LDExICs5MTYsMTEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25z
dGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlw
ZSwgbV9jb2RlQmxvY2spOworICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fcHJvZmlsZWRC
bG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxC
aW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRy
ZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX3Byb2ZpbGVk
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2No
KCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIHJlZ1QxKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNj
b3BlKSwgcmVnVDApOwogICAgICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsK
QEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluCiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogCiAgICAg
ICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRT
Y29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1f
Y29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3Bl
Ojpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2ZpbGVkQmxvY2sp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBy
ZWdUMSk7CkBAIC0xMDM5LDcgKzEwMzksNyBAQCB2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIo
VmlydHVhbFJlZ2lzCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNv
ZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpOwpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZEJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAgZW1pdFN0b3Jl
KGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIApAQCAtMTE1Niw3ICsxMTU2LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9j
ayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9i
amVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCogc2V0KQpAQCAtMTE5MCw3ICsxMTkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRQdXRDbG9z
dXJlVmFyKFZpcnR1YWxSZWdpcwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gY29waWVkR2V0
UHV0SW5mbyhieXRlY29kZSk7CkBAIC0xMjAyLDcgKzEyMDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwor
ICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVj
dCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sg
Y292ZXJzIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMs
IHJlZ1QyKTsKICAgICAgICAgICAgIApAQCAtMTIxNyw3ICsxMjE3LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAg
ICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JD
b2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX3Byb2ZpbGVkQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29u
c3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKQEAgLTEzMTgsNyAr
MTMxOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICAg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJv
cik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFRvU2NvcGUsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0
cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTMzMyw3ICsxMzMzLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIGVtaXRMb2FkUGF5
bG9hZChhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0
QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pICsgVGFnT2Zmc2V0KSwgcmVzdXRsUmVncy50YWdHUFIoKSk7CiAgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXgg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFBheWxvYWRPZmZzZXQpLCByZXN1dGxS
ZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3V0bFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgcmVzdXRsUmVncyk7CiAg
ICAgZW1pdFN0b3JlKGRzdCwgcmVzdXRsUmVncy50YWdHUFIoKSwgcmVzdXRsUmVncy5wYXlsb2Fk
R1BSKCkpOwogfQogCkBAIC0xMzU1LDcgKzEzNTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fYXJndW1lbnRzKGNvbnN0CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1f
aW5kZXg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwxMDQg
QEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHByb3BlcnR5R1BSKTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3Vu
dCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAg
ICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBp
ZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmll
cnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkp
IHsKKyAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAg
ICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNj
cmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRC
eVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdU
Mik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BS
LCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKKyAgICAgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZv
R1BSKTsKKwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIHJlc2V0U1Ao
KTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVs
eSByZXNldCBTUAorCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxz
LmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlw
ZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYg
Ynl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
aWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRlcikpCisg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKworICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlW
YWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOwogCi0gICAgICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eSwgYXJndW1lbnRHUFI0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9m
aWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0
eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBh
cmd1bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0g
ICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2Rl
SW5kZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAot
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBh
cmcxIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVH
UFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAg
IENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAg
IHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7
CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9
PSByZWdUMSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0
dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0
YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCks
IHByb2ZpbGVHUFIpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKQEAgLTE0OSw3ICsxNjEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAg
ICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNjAsOCArMTcyLDggQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BS
ID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIApAQCAtMTg3LDM0ICsxOTksNDAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0
ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVn
cywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkdldFByaXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVy
KSk7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2
YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzI0MSwxMSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRh
ZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHks
IGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTIzNSwyNiArMjU1LDIwIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2Vk
LgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVf
bmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
dHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKQEAgLTI2NCw3ICsyNzgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
ICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAg
ICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0zMDAsMjEgKzMxNCwyOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5k
ID0gYnl0ZWNvZGUubV9icmFuZDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQ
UlJlZyBicmFuZEdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7Ci0KICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2
YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7Cisg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2Vu
KTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBz
ZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTMyNCwx
NyArMzQ1LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CisgICAgVU5VU0VEX1BB
UkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFu
ZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
cmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsK
KyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGlt
aXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0zNDQs
MjQgKzM3MCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBh
cmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1l
bnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5j
dGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpB
cmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRl
TmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJh
bmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
blNldFByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogI2VuZGlmCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzcwLDMzICszOTAsNDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjbwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2Rl
Lm1fYnJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKKwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJ
VFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJh
bmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBl
bmQoZ2VuKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1ByaXZhdGVCcmFuZD4oKTsKKyAg
ICBVTlVTRURfUEFSQU0oYnl0ZWNvZGUpOworCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2Vu
ZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNz
SW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
YmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jy
YW5kLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0NDAsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQ
cml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNs
dHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2
YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9w
cml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NjMsNDMgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29k
ZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2Zp
bGVHUFIpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywg
cmVnVDQpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworCiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IHN0ZDo6
aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsRGlyZWN0PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtp
bmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29k
ZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVl
ZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9w
dXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVy
ZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00NzQsMTUgKzUx
NSwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBF
Q01BTW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKLSAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUp
IHsKICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgICAgIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKLSAgICAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkK
QEAgLTQ5OCw3ICs1MzYsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSQogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkgYXJlIGNv
bmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
KSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEsIHJlZ1QyLCBnZW4uc3R1YkluZm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50
R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFI0KTsKKyAgICBpZiAoaXNEaXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCksIE9w
UHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVu
dEdQUjUpOworICAgIGVsc2UKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRh
KGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbDo6TWV0YWRh
dGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAgY2FsbE9wZXJh
dGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKT4oQWRkcmVzcyhh
cmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywg
YXJndW1lbnRHUFI0LCBhcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtNTEyLDcgKzU1OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBDYWxs
IGNhbGw7CiAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmlj
dCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZSk7CkBAIC01MjMsNyArNTcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAt
NTMzLDE4ICs1ODAsMjQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmpl
Y3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBE
RkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmpl
Y3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
LSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0
dXJuQWRkcmVzcygpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBy
ZWdUNTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBw
cm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgeworICAgICAgICBSZWdpc3RlclNldCB1c2Vk
KEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5LCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZSwgQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlu
cyhyZWdUNCkpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDUpKTsKKyAgICB9
CisKIAogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBqaXQubG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CkBAIC01
NzAsMjAgKzYyMywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIElu
dmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZv
R1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmllbGRQdXRLaW5kID0g
Ynl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxz
LmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91
dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTk0LDggKzY1OCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwot
ICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAg
ICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgIEpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKQEAgLTYwMywx
MyArNjY2LDE1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgYXV0byBvcGVyYXRpb24g
PSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVs
ZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBp
biB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdU
MTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7Ci0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSLCBnZW4uc3R1Yklu
Zm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKKworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFI0KTsKKyAgICBjYWxs
T3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0
aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwog
I2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNjIyLDE4ICs2ODcsMTIgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2Fs
bDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICBl
bHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC02NDMsMTQgKzcwMiwxNCBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJl
Z1Q0OwogCkBAIC02ODAsNyArNzM5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9i
eV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTY4OSw3ICs3NDksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5
X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJl
Z1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3NjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX3NldHRlcl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVn
VDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1Qy
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCBy
ZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVn
VDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3NzEsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRy
aWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwg
cmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNzE5LDcgKzc4Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdU
Mik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0
ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1
dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3LDIzICs3OTEsMzMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2Vs
aW5lRGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwK
KyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0
dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3Jp
dGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0
ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9i
YmVycyByZWdpc3RlcnMuCkBAIC03NTksMTUgKzgzMywxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAg
IEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0z
MihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkRl
bGV0ZUJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRy
dXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODU3LDE5IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1
bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lkX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2Fs
bCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVs
ZXRlQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODA4LDcgKzg3OSw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTg0
NSwyMiArOTE2LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIg
PSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCBy
ZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7Cisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5m
b0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRH
UFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdy
aXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNs
b2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRo
b3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTY1LDExIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uRGVs
ZXRlQnlWYWxPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwy
NCArOTgzLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRp
bWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0
ZUJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3Rh
dGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdU
MCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkp
OwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC05MjYsNyArMTAwNSw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBi
ZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAg
IC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTk2MSwyMiArMTA0
MCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVn
cywgcmVnVDEsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNz
VHlwZTo6VHJ5R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBz
dHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1f
Z2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTk4NiwxNCArMTA3NCwxNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2Fs
bE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpPihBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwMDMsMjYgKzEwOTQsMjAgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwg
IWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5
R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25U
cnlHZXRCeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6
dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5k
Q2FsbChvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVy
blZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xMDMwLDIyICsxMTE1LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9k
aXJlY3QoY29uc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVj
dCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3Vs
dFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJl
Y3Q7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1
bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBA
IC0xMDU0LDE2ICsxMTQ4LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGly
ZWN0KGMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25H
ZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3Vs
dFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTY5LDYyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RP
cHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5
SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
VlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5n
dGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21v
ZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5
SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFy
cmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2Rl
TWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSnVtcCBub3RB
cnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6
Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFy
cmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBy
ZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KLSAgICBKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAv
LyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJl
c2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
c3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAK
QEAgLTExNTgsMTYgKzEyMzMsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChj
b25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xMTc3LDI2ICsxMjU0LDU4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29u
c3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgc3RhdGljX2Fz
c2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogCi0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKwor
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0g
Ynl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhU
aGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVn
LCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BS
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisKKyAg
ICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3Ms
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSwgc3R1YkluZm9HUFIp
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
R2V0QnlJZFdpdGhUaGlzOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29k
ZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBz
dHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKwor
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhl
cmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2Fz
ZSgpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
QEAgLTEyMDYsNyArMTMxNSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKQEAgLTEyNDEsMTYgKzEzNTAsMTkgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRo
VGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAg
ICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNb
bV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRX
aXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3RoaXNWYWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpPihieXRlY29kZSwgQWRk
cmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEyNjAsMjggKzEzNzIsMjIg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5
IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhp
c1ZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7
CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdp
dGhUaGlzT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQpAQCAtMTI5MSw3ICsxMzk3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdo
dCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhl
ciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAg
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAg
ICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTMyOSwyMyArMTQzNSwzOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5p
c0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBT
dHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAg
ICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byBy
ZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3Vj
aCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0
YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywg
cmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3Rl
cnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwg
dmFsdWVWUmVnLCB2YWx1ZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwK
LSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCBy
ZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BS
LCBlY21hTW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6
IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZv
LT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0
OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVz
ZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZh
dGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFwcGVu
ZChnZW4pOwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQg
d3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0ODAsMTggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAogICAg
IEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
QEAgLTEzNzYsMjUgKzE1MDEsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChj
b25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMzsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFs
dWU7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0
ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQ
UjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02
NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKTsK
LSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9u
KCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTQwNCw3ICsxNTIz
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0
IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZh
aWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBp
bmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBt
YXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OwpAQCAtMTQ0MSwyMCArMTU2MCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25z
dCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
bkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVy
czo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAg
ICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZWdUMSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlJ
ZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ2Mywx
NCArMTU5MywxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklU
SW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIp
OworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpPihB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0ODAsMjggKzE2MTMsMjIgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwg
IWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5
R1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxs
IGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGlu
IGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBu
YW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbklu
QnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lk
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAg
Q2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
SW5CeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxMCwyNSArMTYz
NywzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNl
R1BSLCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwogCiAgICAgSklUSW5CeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZh
bDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUzNywxNSArMTY3MiwxOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdl
biA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBw
cm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVj
b2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSwgYXJndW1lbnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbklu
QnlWYWxPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NTYsNTkgKzE2OTQsNzAgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIg
PSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FS
TTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFs
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8g
c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3
aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBk
dXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXpl
KSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5
VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIg
ZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFu
ZCwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5m
b0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOwor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZh
dGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklUOjpl
bWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJh
c2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIEFT
U0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAgVU5V
U0VEX1BBUkFNKHByb3BlcnR5KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0gQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
QnJhbmQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2lu
QnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRl
TmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAg
IGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSk+
KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNjE4
LDI3ICsxNzY3LDIxIEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2kK
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eU9yQnJhbmRHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eU9yQnJhbmRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eU9yQnJhbmRHUFIgPT0gYXJndW1lbnRHUFIx
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShv
cGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Nh
bWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpLCBkZWNsdHlwZShv
cGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IHR5cGUgPT0gQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0
aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFz
UHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjUyLDcgKzE3OTUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaGFzX3ByaXZhdGVfbmFtZShjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZU5h
bWU+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlTmFtZSk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0
LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fcHJvcGVydHksIEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVOYW1lKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfYnJhbmQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NjYsMjE1ICsxODA5LDEy
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVfYnJhbmQoCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSGFzUHJpdmF0ZUJyYW5kPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRl
Y29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBlbWl0SGFzUHJp
dmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9icmFu
ZCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJ
bmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVt
aXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcg
c2NyYXRjaEdQUikKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAg
ICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNz
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5h
ZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNo
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hw
b2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBZGRy
ZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJl
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7Ci0gICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCByZWdUMCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRo
OyArK2kpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZO
ZXh0KCkpLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi0j
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0g
bWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKLSAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1f
bG9jYWxTY29wZURlcHRoOwotCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2Nr
KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7Ci0gICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRp
bmdFcG9jaCwgcmVnVDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NP
Zkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgotICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAg
ICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVC
bG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwgc2NvcGUsIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwotICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6Ci0g
ICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN3aXRjaCAocmVzb2x2
ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7Ci0KLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsK
LSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
IDogR2xvYmFsTGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5
cGUsIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4
aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0g
ICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLX0KLSNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BS
ZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fcmVzb2x2ZVR5cGU7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBz
Y29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBt
ZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICBB
U1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsK
LSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9
PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IHJlZ1Q1OworICAgIC8vIElmIHdlIHByb2ZpbGUgY2VydGFpbiByZXNvbHZlIHR5
cGVzLCB3ZSdyZSBnYXVyYW50ZWVkIGFsbCBsaW5rZWQgY29kZSB3aWxsIGhhdmUgdGhlIHNhbWUK
KyAgICAvLyByZXNvbHZlIHR5cGUuCiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFy
KQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1l
bnQuZ2V0KCkpLCByZWdUMCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxl
VmFyKSAKKyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2Nv
cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVudCgpLCByZWdUMCk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5v
ZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICAgICAgcHRyZGlmZl90IG1ldGFk
YXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFk
YXRhVGFibGUoYnl0ZWNvZGUpOworCisgICAgICAgIGF1dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9
IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZl
U2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENs
b3N1cmVWYXIiKTsKKyAgICAgICAgfTsKIAotI2RlZmluZSBSRVNPTFZFX1NDT1BFX0dFTkVSQVRP
UihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3Is
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0g
ICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1Ip
CisgICAgICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3Ig
PSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2
ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxp
bmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MiKTsK
ICAgICAgICAgfTsKLSN1bmRlZiBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgorCisgICAgICAgIGF1
dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAg
ICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgc3RkOjpudWxs
b3B0LCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgZ2VuZXJpYyIpOworICAgICAgICB9Owor
CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUMjsKKyAgICAgICAg
Y29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0
YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gY29kZTsKKyAgICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZh
cikKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3Ip
OworICAgICAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJh
dG9yKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogICAgIH0KIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtO
YW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJl
c29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdl
bmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBC
YXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRo
ZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0
byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KKworICAgIENDYWxsSGVscGVycyBqaXQ7CisKICAgICB1c2luZyBN
ZXRhZGF0YSA9IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDc7IC8vIGluY29taW5nCi0gICAgY29uc3RleHByIEdQUlJlZyBz
Y29wZUdQUiA9IHJlZ1Q2OyAvLyBpbmNvbWluZworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRh
dGFHUFIgPSByZWdUMjsgLy8gaW5jb21pbmcKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BS
ID0gcmVnVDA7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCi0gICAg
Y29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFS
QU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9y
T3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsK
KyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRk
UHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBq
aXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsK
IAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgewor
ICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKICAgICAg
ICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAg
ICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2Jh
bE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVj
dEdQUik7CiAgICAgICAgIH0KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQ
UiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9p
bnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRk
cmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2Jq
ZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0
Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChF
cXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1
c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29s
dmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAg
IG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEp
OwotCi0gICAgICAgIExhYmVsIGxvb3AgPSBsYWJlbCgpOwotICAgICAgICBKdW1wIGRvbmUgPSBi
cmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOwotICAgICAgICB7Ci0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgICAg
ICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgICAgICAgICBqdW1wKCku
bGlua1RvKGxvb3AsIHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Cisg
ICAgICAgIHN0YXRpY19hc3NlcnQoc2NvcGVHUFIgPT0gcmVnVDApOworICAgICAgICBqaXQubG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkxvY2FsU2NvcGVEZXB0
aCgpKSwgcmVnVDEpOworCisgICAgICAgIExhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAg
ICAgSnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CisgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDAp
OworICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAgICAgIGpp
dC5qdW1wKCkubGlua1RvKGxvb3AsICZqaXQpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAg
ICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
KSB7CkBAIC0xODgyLDEyICsxOTM3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxC
aW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9m
ZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAg
IG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdsb2JhbExleGljYWxC
aW5kaW5nRXBvY2goKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRP
Zkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCkBAIC0xODk3LDExICsxOTUxLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRT
Y29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEds
b2JhbFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAg
ICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwog
ICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZH
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTE5MDksNyArMTk2Myw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgICAgIGVtaXRSZXNvbHZl
Q2xvc3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTE5MTksODMgKzE5NzMsNDUgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3
aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xv
YmFsTGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2
ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVW
YXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsUHJvcGVydHkubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgTWV0YWRhdGE6Om9mZnNldE9mUmVzb2x2ZVR5cGUoKSksIHJlZ1QxKTsKIAotICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgYXV0byBlbWl0Q2FzZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9
IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkp
OworICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOworICAgICAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgIG5vdENhc2UubGluaygmaml0KTsK
KyAgICAgICAgfTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
c2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgZW1p
dENhc2UoR2xvYmFsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHkpOworICAg
ICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUp
OwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQog
Ci0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0g
ICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZl
X3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9j
YXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVM
b2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVG
SU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVU
eXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAo
IXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAg
ICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBq
aXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9w
X3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xW
RV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfUkVT
T0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAg
Ly8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0
aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0
aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwMzQsNyArMjA1MCw2IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX3Jlc29sdmVfc2NvcGUiKTsKIH0K
LSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogdm9pZCBKSVQ6OmVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCkKIHsKQEAgLTIwNjIsMjc2ICsyMDc3LDEzMyBAQCB2b2lkIEpJVDo6ZW1pdEdl
dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgcmVnVDApOwogfQogCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZl
VHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVj
dHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CisgICAgUmVzb2x2ZVR5cGUgcHJv
ZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2sp
Lm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewot
ICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHk6Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJl
U2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBk
b24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4g
QWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIg
aW5qZWN0aW9uLgotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAgICAgICAgICAg
IEdQUlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZzZXQgPSByZWdU
MTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7Ci0KLSAgICAgICAgICAgIGpp
dEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7Ci0gICAgICAgICAgICB9KSk7CisgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkg
PT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAg
ICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChB
U1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFu
Y2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElz
Tm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0
KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAg
ICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmly
c3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHbG9iYWxWYXI6
Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5k
aXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAg
IGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6
Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQor
ICAgIGF1dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0
dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFz
ZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKICAgICB9OwogCi0gICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qg
c2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDAp
OwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29s
dmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xv
YmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJp
dHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4
aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOwotfQotCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0
YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotI2Vsc2UgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0KLXZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRh
ZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBhdXRvIGNsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1
cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIi
KTsKKyAgICB9OwogCi0gICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICBBU1NFUlQoQnl0ZWNv
ZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQo
bV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5z
dHJ1Y3Rpb24pOworICAgIGF1dG8gZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvciA9IFtdIChW
TSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5r
KHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgZ2VuZXJpYyIp
OworICAgIH07CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0g
cmVnVDI7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1Owog
Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRyX3Qq
IG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9v
cGVyYW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRp
ZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Jm1ldGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNk
ZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9z
Y29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZF
X1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNj
b3BlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0
YUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVH
UFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0
YUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdl
bmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0K
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYg
KHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdl
dENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgY29k
ZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0
b3IpOworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZy
b21TY29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdl
dEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVu
a05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJh
dGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4g
cmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsg
Z2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAv
IEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6
Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
dGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwotCi0gICAgdGFnUmV0
dXJuQWRkcmVzcygpOwotCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRh
ZGF0YUdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKIAotICAgIEp1bXBMaXN0IHNsb3dD
YXNlOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1
cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0
YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDAp
OwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Ci0g
ICAgfTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJl
Z1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisKKyAgICBKdW1wTGlz
dCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNr
ID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGlmICghbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRP
RihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNo
cG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OworICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0
aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJh
bmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKICAgICAKLSAgICBhdXRv
IGVtaXRHZXRWYXJGcm9tUG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVn
KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7
Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRHZXRW
YXJGcm9tSW5kaXJlY3RQb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcp
IHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsK
LSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldENs
b3N1cmVWYXIgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIG9wZXJhbmRHUFIpIHsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAg
IGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGFkZFB0cihz
Y29wZUdQUiwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BS
LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKLSAg
ICB9OwotCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUs
IGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0g
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0
dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBk
b24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4g
QWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIg
aW5qZWN0aW9uLgotCi0gICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSByZWdUMDsK
LSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7Ci0KLSAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRM
YW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVh
bCwgYmFzZSwgcmVnVDMpOworICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2
YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5n
IGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxl
cyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
U3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJy
YW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVz
cyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29w
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKworICAgICAgICAg
ICAgaml0LmppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAg
eworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaml0LmJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIHJlZ1QzKTsK
ICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mT3BlcmFuZCgpKSwgcmVnVDEpOworCiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQp
IHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRo
YW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwot
ICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7
Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVn
VDEsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAg
IGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAg
ICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVu
ZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChz
Y3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGppdC5uZWczMihyZWdUMSk7CisgICAgICAgICAgICBqaXQuc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgog
ICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBy
ZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAg
ICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAg
ICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAg
ICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fb3BlcmFuZCkpLCByZWdUMyk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZh
cihzY29wZUdQUiwgcmVnVDMpOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJl
Z1QzKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3Rl
cikpOworICAgICAgICAgICAgaml0LmxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgcmVnVDMpOwor
ICAgICAgICAgICAgaml0LmFkZFB0cihzY29wZUdQUiwgcmVnVDMpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFy
aWFibGVzKCkpLCByZWdUMCk7CisKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5
bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0y
MzQxLDg2ICsyMjEzLDYzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0
SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAg
SnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZh
bHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90
R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQu
bGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAg
IH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZv
KSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgaml0Lmxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkp
LCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1
bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3Bl
cnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1
ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5i
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAg
ICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVt
cCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAg
ICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBq
aXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
ci5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7
CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQp
OwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9
CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOworICAg
ICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZh
bHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAsIEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkp
OworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6
b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkp
OwogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7
Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
ZnJvbV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29k
ZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBD
b2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmlu
ZSBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVfIyNy
ZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25z
dGV4cHIgKCF0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAg
ICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICBy
ZXR1cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2Vs
aW5lOiBvcF9nZXRfZnJvbV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFD
SF9SRVNPTFZFX1RZUEUoREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBE
RUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2
bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9u
bHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQg
bWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFp
bGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlu
bGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1h
eSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5w
dXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTI0MjksNyArMjI3OCw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICNlbmRpZgogCiAgICAgdXNpbmcgTWV0YWRh
dGEgPSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRh
ZGF0YUdQUiA9IHJlZ1Q3OworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdU
NDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAgICAg
aml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogCkBAIC0yNDQ5LDcgKzIyOTgsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgQ2FsbCBvcGVyYXRpb24gPSBq
aXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBqaXQu
ZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKIAotICAgIGppdC5zdG9yZTY0KHJl
Z1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhH
UFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsg
VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICBqaXQubW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIp
OwogCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTI0NjksODggKzIzMTgsNzcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIHBhdGNoQnVmZmVyLmxpbmsoanVtcFRv
SGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJU
YWcsICJCYXNlbGluZTogc2xvd19vcF9nZXRfZnJvbV9zY29wZSIpOwogfQotI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxl
KEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCog
c2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBl
bWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12
b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NP
Zk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0
V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0
Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEp
OwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xv
c3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci19CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgR2V0UHV0SW5mbyBnZXRQ
dXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3Qq
IG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9v
cGVyYW5kKTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9m
aWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayku
bV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3Zl
cnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0
aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhh
bmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgLy8gU3Ry
dWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0
cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LgorICAgICAgICAgICAg
Ly8gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2
YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOworICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QxKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworCiAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAKICAgICAgICAgICAg
IGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAg
ICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOworICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Cisg
ICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwogICAgICAgICAgICAgbmVnUHRyKHJl
Z1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1Qx
LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgc3Rv
cmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91
dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAg
ICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2Ug
R2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2Nr
KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7Ci0gICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0g
ICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZl
VHlwZSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDApOworCisg
ICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLmlu
aXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
IHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVj
YXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3Rh
dGljYWxseS4KLSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAg
ICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9j
YXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCksIHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJlZ1QxKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRh
dGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBl
bWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3Qp
LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKworICAg
ICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRO
b3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDEpOworCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QwKSk7CisKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgog
ICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90
LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1Qw
KTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QwKTsKKyAgICAgICAg
ICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6
Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVX
YXRjaHBvaW50KHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJl
Z1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJbmRleChyZWdUMCwgcmVnVDIs
IFRpbWVzRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSk7
CisKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBA
IC0yNTY0LDU4ICsyNDAyLDUyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnMKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0g
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlw
ZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0ds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1
dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAgICAg
ICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRv
RW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKKyAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1cmVWYXIv
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21waWxlIHRo
aW5ncworICAgIC8vIHRoYXQgd2F5IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2UndmUgcHJv
dmVuIHRoYXQgaXMgdGhlIHR5cGUgd2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJlVmFyLAor
ICAgIC8vIGFsbCBDb2RlQmxvY2tzIHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFyCisgICAg
Ly8gaWYgdGhlIHZhciBpbmplY3Rpb24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYgaXQgaXMg
ZmlyZWQsIHRoZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0CisgICAgLy8g
bWF0dGVyIHdoYXQgdHlwZSB3ZSBhcmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcik7Cisg
ICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIpCisg
ICAgICAgIGVtaXRDb2RlKFJlc29sdmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmls
ZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAg
ICAgZW1pdENvZGUoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVsc2Ug
ewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
bV9nZXRQdXRJbmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1QwKTsK
ICAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDAp
OyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eSkpOwogICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBlbWl0
Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
ICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwog
CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7Cisg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxp
bmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBu
b3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
LCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5r
KHRoaXMpOwogCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7CiAKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAogICAg
ICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
ZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAg
YnJlYWs7CiAgICAgfQogfQogCkBAIC0yNjI0LDE4ICsyNDU2LDIxIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3Bl
PigpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRl
Y29kZSkucmVzb2x2ZVR5cGUoKTsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7
CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGlm
IChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJZiBhbnkg
bGlua2VkIENvZGVCbG9jayBzYXcgYSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBDb2RlQmxv
Y2tzIGFyZSBndWFyYW50ZWVkCisgICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZhci4KICAg
ICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9l
cnJvcik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0VG9TY29wZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBj
dXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJndW1lbnRH
UFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CiAgICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9
PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBB
U1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgp
ID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CkBAIC0yNjUyLDcgKzI0ODcsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNo
KFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTI3MDEsNyArMjUzNiw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RB
cmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
CkBAIC0yNzU5LDcgKzI1OTQsNiBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKQEAgLTI3
NjcsNyArMjYwMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb24K
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5h
bEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdU
MCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yODIzLDcgKzI2
NTcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVudW1lcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CkBAIC0y
ODM5LDExICsyNjcyLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25z
dCAKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9z
dCBjb21tb24gbW9kZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3
ZSBwcm9maWxlIGl0IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9y
TWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7
CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVy
YXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9k
ZSkgewogICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVu
dW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQo
YnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKCh+SlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSAmIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BFbnVtZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCks
IHNjcmF0Y2hHUFIpOworICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmU4
VG9NZXRhZGF0YShzY3JhdGNoR1BSLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yTmV4dDo6TWV0YWRh
dGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOworCiAgICAgICAgIGxvYWQzMihBZGRy
ZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSksIGluZGV4R1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5k
KGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpKSk7CiAKQEAgLTI4ODEsNzggKzI3MjAsODggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
R2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHlOYW1lOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0g
Ynl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKIAotICAgIGF1
dG8gcmVzdWx0R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBC
YXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVudW1lcmF0
b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlW
YWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBC
YXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJz
OjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHNj
cmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcHJvcGVy
dHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51
bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wRW51
bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwg
c2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZThUb01l
dGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNl
R1BSKSk7CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KLSAg
ICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdU
MiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBpc05vdE93
blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVy
ZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7
Ci0gICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywg
QWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBzY3Jh
dGNoMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgc2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gz
MihOb3RFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0ZSB0
aGUgb2Zmc2V0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8gSWYgaW5k
ZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0
aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0g
ICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4
KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1wIG91dE9m
TGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2Ny
YXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSkpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CisgICAg
bG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBw
ZW5kKGp1bXAoKSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91
dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVn
VDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSksIHJlZ1QzKTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVn
VDMsIHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2Ny
YXRjaDIpOworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3Jh
dGNoMiwgc2NyYXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkgPSBvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJhc2VJ
bmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJl
c3VsdEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNF
aWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMu
YXBwZW5kKGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOwotICAg
IHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3du
U3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1l
dGFkYXRhKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCBi
eXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0
b3JNZXRhZGF0YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRoaXMpOwot
ICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVk
SW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIEp1bXAg
aXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJlcGxhY2Ug
dGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
ZGV4LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJvcGVydHlH
UFIpOwogCiAgICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAKICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1
YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQg
aGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBkb25lQ2FzZXMubGlu
ayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIApAQCAtMjk2MSwxMCArMjgxMCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJh
dG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0
eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQg
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhG
dW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5
cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9o
YXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2Up
CiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVt
ZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjk3Myw3ICsyODIxLDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9y
OChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkp
OworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9m
ZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCByZWdU
MSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAtMzA2Miw2ICsyOTEyLDEzIEBA
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKICAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4g
PSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNoR1BSKG93bmVyKSk7Cisg
ICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xv
d1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5r
KHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI4MzAx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNiw5ICsyMzYsOSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVH
ZXRCeShKCiAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KGJhc2VDZWxsKSkgewogICAgICAgICAg
ICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CiAgICAg
ICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlQ2VsbAotICAgICAgICAg
ICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1Yklu
Zm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgeworICAgICAgICAgICAgICAgICAgICAm
JiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5m
bywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
Ym9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVu
Z3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CisgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVB
cnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxs
KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3RoKGxvY2tlcik7CkBAIC0yNDks
OCArMjQ5LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAg
ICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywg
QWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICB9IGVs
c2UgaWYgKGlzSlNTdHJpbmcoYmFzZUNlbGwpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJ
bmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAg
JiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChzdHViSW5mbykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgICAgICYm
IElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5m
bykpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5s
aW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBw
cm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHViSW5mby5pbml0U3RyaW5nTGVuZ3RoKGxvY2tlcik7CkBAIC0zMDQsNyArMzA0
LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAg
ICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1
Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAgICAgICYm
ICFsb2FkVGFyZ2V0RnJvbVByb3h5KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRD
b2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhzdHVi
SW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBi
b29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3Bl
cnR5QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAg
ICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVNlbGZQYXRjaCwgc3RydWN0dXJl
LT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgp
KSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5j
YWNoZWRPZmZzZXQoKSk7CkBAIC03MzEsMTEgKzczMSwxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVQdXRCeShKCiAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLT5kaWRD
YWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hl
VHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5HZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCisg
ICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVy
dHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCiAgICAg
ICAgICAgICAgICAgICAgICYmICFvbGRTdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoKQogICAgICAgICAgICAgICAgICAgICAmJiAhaXNQcm94eSkgewogICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0g
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9sZFN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wg
Z2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBv
bGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVl
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9j
aywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0
QnlLaW5kLCBwdXRLaW5kKSk7CkBAIC0xMTMyLDcgKzExMzIsNyBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAogICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2Uo
KSA9PSBiYXNlCiAgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCiAgICAg
ICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlKTsKKyAgICAgICAg
ICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
U2VsZkluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSk7CiAgICAgICAgICAg
ICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpJbkJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVu
dCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0
dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOwpAQCAtMTU1Miw3ICsxNTUyLDcgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChW
TSYgdm0sIENhbGxMaW5rSQogCiB2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1i
bHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0KCkp
OworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5n
IENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7CiAgICAgCiAgICAg
cmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9u
IDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMsMjQgKzQzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQotewotICAgIENDYWxs
SGVscGVycyBqaXQ7Ci0KLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7Ci0KLSAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQu
cHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwotCi0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJh
dGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7Ci0KLSAgICBqaXQuanVtcFRvRXhjZXB0
aW9uSGFuZGxlcih2bSk7Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uIik7Ci19Ci0KIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0
OwpAQCAtNzcsMjQgKzU5LDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBoYQogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgImhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFjayIpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRI
YW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQotewotICAgIENDYWxsSGVscGVycyBqaXQ7
Ci0KLSNpZiBDUFUoWDg2XzY0KQotICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVzcCk7Ci0jZWxp
ZiBDUFUoQVJNNjQpCi0gICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJS
ZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIpOwotI2VuZGlmCi0KLSAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgY29udGludWF0aW9uID0gaml0Lmp1bXAoKTsKLQotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6
OkV4dHJhQ1RJVGh1bmspOwotICAgIGF1dG8gaGFuZGxlciA9IHZtLmdldENUSVN0dWIoaGFuZGxl
RXhjZXB0aW9uR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNvbnRpbnVhdGlvbiwg
Q29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKLSAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJwb3BU
aHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uIik7Ci19Ci0KIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZt
KQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkBAIC0xMzcsNiArMTAxLDQyIEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2gKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhh
bmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
KworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bS50b3BFbnRyeUZyYW1lKTsKKworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cigmdm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGppdC5wcmVwYXJlQ2FsbE9w
ZXJhdGlvbih2bSk7CisKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uID0gaml0LmNh
bGwoT3BlcmF0aW9uUHRyVGFnKTsKKworICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZt
KTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmso
b3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXIpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRpb24iKTsKK30KKworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhj
ZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisjaWYg
Q1BVKFg4Nl82NCkKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIg
KiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjplc3ApOworI2VsaWYgQ1BVKEFS
TTY0KQorICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIs
IENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNU
SVRodW5rKTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlv
bkdlbmVyYXRvcik7CisgICAgcGF0Y2hCdWZmZXIubGluayhjb250aW51YXRpb24sIENvZGVMb2Nh
dGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAicG9wVGh1bmtTdGFj
a1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
YWdUeXBlPgogaW5saW5lIHZvaWQgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgcG9pbnRlckdQUiwgVGFnVHlwZSB0YWcpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9uIDI4MzAxOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDEyICszNywxMiBAQCBjbGFzcyBWTTsKIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4
Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tHZW5lcmF0b3IoVk0mKTsK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNl
cnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogCiAjZW5kaWYgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IoVk0mKTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0mKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lv
biAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVP
cGVyYW5kc0ZvckNoZWNrcG9pbnQuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRl
ICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGlu
ZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJy
b3IuaCIKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKQEAgLTM3MCwxMyArMzcxLDIy
IEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYKICAgICAKICAgICBj
b2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAKKyAgICBpZiAo
Y29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAg
aWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxp
bmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlKSB7CisgICAgICAgICAgICBj
b2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVh
c2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+
aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+aml0TmV4dElu
dm9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
CiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAg
ICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAo
InRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVj
dXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgSklUV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3Rh
dGUgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbFJlYWR5
UGxhbnNGb3JWTSh2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bk1vZGU6OkJhc2VsaW5lKSk7CisgICAgSklUV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGUg
PSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbFJlYWR5UGxh
bnNGb3JWTSh2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9j
aygpLCBKSVRDb21waWxhdGlvbk1vZGU6OkJhc2VsaW5lKSk7CiAKICAgICBpZiAoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKICAgICAgICAgZGF0YUxvZ0xu
SWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIENvZGUgd2FzIGFscmVhZHkgY29tcGlsZWQu
Iik7CkBAIC00NjYsOCArNDc2LDEwIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQog
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9y
RnV6emluZygpICYmIGNvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bS5nZXRMb29wSGludEV4
ZWN1dGlvbkNvdW50ZXIocGMpOwogICAgICAgICAqcHRyICs9IGNvZGVCbG9jay0+bGxpbnRFeGVj
dXRlQ291bnRlcigpLm1fYWN0aXZlVGhyZXNob2xkOwotICAgICAgICBpZiAoKnB0ciA+PSBPcHRp
b25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkKKyAgICAgICAgaWYgKCpw
dHIgPj0gT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpIHsKKyAg
ICAgICAgICAgIGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShDb25jdXJyZW50SlNMb2NrZXIoY29k
ZUJsb2NrLT5tX2xvY2spKTsgLy8gV2UncmUgcmV0dXJuaW5nIHRvIHRoZSBPU1IgZW50cnkgY29k
ZSBoZXJlLCB3aGljaCBleHBlY3RzIHRoYXQgbV9qaXREYXRhIGlzIG5vdCBudWxsLgogICAgICAg
ICAgICAgTExJTlRfUkVUVVJOX1RXTyhMTEludDo6ZnV6emVyUmV0dXJuRWFybHlGcm9tTG9vcEhp
bnRFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIGNhbGxGcmFtZS0+dG9w
T2ZGcmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTAxMiwxMCAr
MTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFj
cm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAg
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1
cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0
c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEsIHQyKQogICAgICAgICBn
ZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0sIElu
dDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFt
ZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGluIHQxLCBzcmNEc3QgaW4g
dDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAgICAgICAgIHN0b3JlaSB0
MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUo
QXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVT
dHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAg
ICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBsbGludE9wV2l0aE1ldGFk
YXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRh
ZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAg
ICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1ldGFkYXRhKHQ1LCB0MCkK
ICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUs
IHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BOZWdhdGVTcmNOb3RJbnQK
ICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MgotICAg
IHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0
aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQzKQogICAgIHJldHVybiAo
SW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJpYSB0MSwgTG93ZXN0VGFn
LCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQotICAgIHVwZGF0ZUFyaXRo
UHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUo
T3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAgIHJldHVybih0MSwgdDIp
CiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAgZW5kKQogCiBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJh
dGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJvZmlsZSh0eXBlKQotICAg
ICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2Zp
bGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAg
ICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMsIHQyKQogICAgICAgICBnZXQo
bV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9y
ZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyhzaXpl
LCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcsIC5vcDFOb3RJbnQKICAg
ICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0gICAgICAgIGFyaXRoUHJvZmls
ZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBnZXQobV9k
c3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDMsIHQxLCB0MCwgLnNs
b3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsxMTI0LDEyIEBAIG1hY3Jv
IGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYmlhIHQyLCBMb3dl
c3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAub3AxTm90SW50T3AyRG91
YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9m
aWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9m
aWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDQpCiAgICAgICAg
IGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJ
bnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0gICAgICAgIGFyaXRoUHJv
ZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQ0KQog
ICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAgICAgZmlp
MmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9t
U3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRl
bHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAg
IGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFnLCAuc2xvdwotICAgICAg
ICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0
NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQogICAg
ICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24g
MjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEsMTMgQEAgbWFjcm8gY2hlY2tT
d2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSBQQywgYTEKICAgICAgICAgICAg
IGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBidHB6IHIwLCAucmVjb3Zlcgot
CiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisgICAgICAgICAgICAjIEJhc2VsaW5lIHVzZXMg
TExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFudCBwb29sLgorICAgICAgICAg
ICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6
Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6OkpJVERhdGE6
Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwogICAgICAgICAgICAgaWYgQVJNNjRFCiAgICAg
ICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0Nv
bmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6Omxvb3BPU1JFbnRyeSkgKiBQdHJTaXplLCBh
MgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0Vu
dHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5z
dHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3Qs
IGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFt
ZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBy
ZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAg
ICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBV
bmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQo
bV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQxCiAgICAgICAgIG1l
dGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3MCw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5h
bWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MSwgLnNsb3cp
CiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3JlcSB0MSwgW2NmciwgdDAs
IDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAg
IHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0
MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTEzNCwxMSArMTEz
NSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUs
IG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotCi0gICAgbWFj
cm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6
TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0K
LSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikKQEAgLTExNDYsMTIgKzEx
NDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLAogICAgIGJ0
aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQzCiAgICAgb3JxIG51
bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAg
IHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0
MikKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAgYnRxeiB0MywgbnVtYmVy
VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAwMDAwMDAsIHQzCi0gICAg
dXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFy
aXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0MSwgdDIpCiAgICAgcmV0
dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE2MCw2IEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGludE9wV2l0aE1ldGFkYXRh
KG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRj
aCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQogCi0gICAgICAg
IG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNb
dDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3JocywgdDApCiAgICAgICAgIGdldCht
X2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQpA
QCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1l
LCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5k
U3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJ
bnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFy
aXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAub3Ax
Tm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3Jl
KG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKICAgICAg
ICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQotICAgICAgICBwcm9m
aWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQ
cm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDIpCiAg
ICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AySW50OgotICAgICAg
ICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDIpCiAg
ICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldCht
X2RzdCwgdDIpCkBAIC0xMjA0LDkgKzExOTYsOSBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3Jl
KG9wY29kZU5hbWUsIG9wCiAKICAgICAub3AyTm90SW50OgogICAgICAgICAjIEZpcnN0IG9wZXJh
bmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCi0g
ICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cK
LSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUs
IHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAg
ICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20J
KHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTQyMCw3ICsxNDIwLDggQEAgZW5k
CiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5jcmVtZW50LCBhY3Rpb24pCiAgICAgbG9hZHAg
Q29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgYmFkZGlzIGluY3JlbWVudCwgQ29kZUJsb2NrOjptX2xs
aW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0
MF0sIC5jb250aW51ZQorICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVy
W3QwXSwgdDAKKyAgICBiYWRkaXMgaW5jcmVtZW50LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6
Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgIGFjdGlvbigpCiAgICAgLmNvbnRpbnVlOgog
ZW5kCkBAIC0xNTAzLDcgKzE1MDQsOCBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIs
IGNvZGVCbG9jCiAgICAgY29kZUJsb2NrR2V0dGVyKHQxKQogICAgIGNvZGVCbG9ja1NldHRlcih0
MSkKICAgICBpZiBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQotICAgICAgICBiYWRkaXMgNSwg
Q29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50
ZXI6Om1fY291bnRlclt0MV0sIC5jb250aW51ZQorICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1f
bGxpbnRFeGVjdXRlQ291bnRlclt0MV0sIHQwCisgICAgICAgIGJhZGRpcyA1LCBCYXNlbGluZUV4
ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgICAgICBpZiBKU1ZB
TFVFNjQKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAgICAgICAgbW92ZSBQQywgYTEK
QEAgLTE2MTcsMTQgKzE2MTksMTQgQEAgbWFjcm8gZnVuY3Rpb25Jbml0aWFsaXphdGlvbihwcm9m
aWxlQXJnUwogICAgICMgb3B0aW1hbCB3YXkgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIG1v
cmUgdGhhbiBmaXZlIHJlZ2lzdGVycyBhdmFpbGFibGUKICAgICAjIGZvciBhcmJpdHJhcnkgdXNl
IGluIHRoZSBpbnRlcnByZXRlci4KICAgICBsb2FkaSBDb2RlQmxvY2s6Om1fbnVtUGFyYW1ldGVy
c1t0MV0sIHQwCi0gICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQwICMgVXNlIGFkZGkgYmVjYXVz
ZSB0aGF0J3Mgd2hhdCBoYXMgdGhlIHBlZXBob2xlCisgICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAs
IHQwCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnBndGVxIHQwLCAwLCBvayBlbmQpCiAgICAgYnRw
eiB0MCwgLmFyZ3VtZW50UHJvZmlsZURvbmUKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fYXJndW1l
bnRWYWx1ZVByb2ZpbGVzICsgRml4ZWRWZWN0b3I6Om1fc3RvcmFnZSArIFJlZkNvdW50ZWRBcnJh
eTo6bV9kYXRhW3QxXSwgdDMKICAgICBidHB6IHQzLCAuYXJndW1lbnRQcm9maWxlRG9uZSAjIFdo
ZW4gd2UgY2FuJ3QgSklULCB3ZSBkb24ndCBhbGxvY2F0ZSBhbnkgYXJndW1lbnQgdmFsdWUgcHJv
ZmlsZXMuCiAgICAgbXVscCBzaXplb2YgVmFsdWVQcm9maWxlLCB0MCwgdDIgIyBBYWFhYWhoaGgh
IE5lZWQgc3RyZW5ndGggcmVkdWN0aW9uIQogICAgIGxzaGlmdHAgMywgdDAgIyBvZmZzZXQgb2Yg
bGFzdCBKU1ZhbHVlIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCi0gICAgYWRkcCB0MiwgdDMgIyBw
b2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gQ29kZUJsb2NrOjptX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcy4KKyAgICBhZGRwIHQyLCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9mIFZh
bHVlUHJvZmlsZSBhcnJheSBpbiB0aGUgdmFsdWUgcHJvZmlsZSBhcnJheS4KIC5hcmd1bWVudFBy
b2ZpbGVMb29wOgogICAgIGlmIEpTVkFMVUU2NAogICAgICAgICBsb2FkcSBUaGlzQXJndW1lbnRP
ZmZzZXQgLSA4ICsgcHJvZmlsZUFyZ1NraXAgKiA4W2NmciwgdDBdLCB0MgpAQCAtMjU2Myw2ICsy
NTY1LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNybyB1
cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1w
KQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0
YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVt
cF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0
eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5l
ZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNob3Vs
ZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0X1dJ
TgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmll
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJs
ZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0
OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsKIAog
ICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChKU0Nl
bGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3QgSWRl
bnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmluZ0lt
cGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMg
aW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVu
dGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBl
KiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50
aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwog
ICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3Qml0
cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdCaXRz
KTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVu
dGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
aW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJ
ZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUg
Q2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJZGVu
dGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlm
aWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3RlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAg
ICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVpZCkp
OwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyODMwMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJDYWNoZWRUeXBlcy5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVk
ZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDYWNoZUVycm9yLmgiCiAjaW5j
bHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCkBAIC0xOTE4LDYgKzE5MTksOCBAQCBw
dWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1WYWx1ZVByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4g
bV9udW1WYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5zaWduZWQgbnVtQXJyYXlQcm9maWxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtQXJyYXlQcm9maWxlczsgfQorICAgIHVuc2lnbmVkIG51bUJpbmFy
eUFyaXRoUHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bUJpbmFyeUFyaXRoUHJvZmlsZXM7
IH0KKyAgICB1bnNpZ25lZCBudW1VbmFyeUFyaXRoUHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBt
X251bVVuYXJ5QXJpdGhQcm9maWxlczsgfQogCiBwcml2YXRlOgogICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX3RoaXNSZWdpc3RlcjsKQEAgLTE5NTIsNiArMTk1NSw4IEBAIHByaXZhdGU6CiAKICAgICB1
bnNpZ25lZCBtX251bVZhbHVlUHJvZmlsZXM7CiAgICAgdW5zaWduZWQgbV9udW1BcnJheVByb2Zp
bGVzOworICAgIHVuc2lnbmVkIG1fbnVtQmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICB1bnNpZ25l
ZCBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsKIAogICAgIENhY2hlZE1ldGFkYXRhVGFibGUgbV9t
ZXRhZGF0YTsKIApAQCAtMjE2MCw2ICsyMTY1LDggQEAgQUxXQVlTX0lOTElORSBVbmxpbmtlZENv
ZGVCbG9jazo6VW5saW5rZQogICAgICwgbV9yYXJlRGF0YShjYWNoZWRDb2RlQmxvY2sucmFyZURh
dGEoZGVjb2RlcikpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bVZh
bHVlUHJvZmlsZXMoKSkKICAgICAsIG1fYXJyYXlQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVt
QXJyYXlQcm9maWxlcygpKQorICAgICwgbV9iaW5hcnlBcml0aFByb2ZpbGVzKGNhY2hlZENvZGVC
bG9jay5udW1CaW5hcnlBcml0aFByb2ZpbGVzKCkpCisgICAgLCBtX3VuYXJ5QXJpdGhQcm9maWxl
cyhjYWNoZWRDb2RlQmxvY2subnVtVW5hcnlBcml0aFByb2ZpbGVzKCkpCiB7CiB9CiAKQEAgLTIz
MzcsNiArMjM0NCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29kZUIK
ICAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29kZUJsb2NrLm1faGFzQ2hlY2twb2ludHM7CiAgICAg
bV9udW1WYWx1ZVByb2ZpbGVzID0gY29kZUJsb2NrLm1fdmFsdWVQcm9maWxlcy5zaXplKCk7CiAg
ICAgbV9udW1BcnJheVByb2ZpbGVzID0gY29kZUJsb2NrLm1fYXJyYXlQcm9maWxlcy5zaXplKCk7
CisgICAgbV9udW1CaW5hcnlBcml0aFByb2ZpbGVzID0gY29kZUJsb2NrLm1fYmluYXJ5QXJpdGhQ
cm9maWxlcy5zaXplKCk7CisgICAgbV9udW1VbmFyeUFyaXRoUHJvZmlsZXMgPSBjb2RlQmxvY2su
bV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOwogCiAgICAgbV9tZXRhZGF0YS5lbmNvZGUoZW5j
b2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEuZ2V0KCkpOwogICAgIG1fcmFyZURhdGEuZW5jb2Rl
KGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVEYXRhLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24g
MjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9O
X1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBk
YXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRh
dGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFBy
b2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRo
UHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxl
Lm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJl
c3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGlubGluZSBwdHJk
aWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlv
bkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9CiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qg
b2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUmFy
ZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0
T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhl
Y3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlm
Zl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOyB9CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzQsOCArNDM0LDYgQEAgdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25z
KAogICAgIE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpID0gZmFsc2U7CiAjZW5kaWYKIAotICAg
IGlmICghaXNBUk02NCgpKQotICAgICAgICBPcHRpb25zOjp1c2VEYXRhSUMoKSA9IGZhbHNlOwog
ICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCiAgICAgICAgIE9wdGlvbnM6OnVzZURhdGFJ
Q0luT3B0aW1pemluZ0pJVCgpID0gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzA5
LDcgKzMwOSw2IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihJ
bnQzMiwgZXZhbFRocmVzaG9sZE11bHRpcGxpZXIsIDEwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KFVuc2lnbmVkLCBtYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0aCwgMjU2LCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICBcCi0gICAgdihCb29sLCByYW5kb21pemVFeGVjdXRpb25Db3Vu
dHNCZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KElu
dDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yQmFzZWxpbmUs
IDEwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25D
b3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JVcHBlclRpZXJzLCA1MDAwMCwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgXApAQCAtNTMyLDYgKzUzMSw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlG
YXN0TWVtb3J5KCk7CiAgICAgdihCb29sLCB1c2VEYXRhSUMsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCwgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDU2hhcmluZywgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgdXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZywgdHJ1
ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIC8qIEZlYXR1cmUgRmxhZ3MgKi9cCiAg
ICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0
RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNyAr
Mzk2LDkgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aQogICAgIGlm
IChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCiAgICAgICAgIGNvZGVCbG9jay0+dmFsaWRh
dGUoKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQorICAgIGlmIChSZWZQdHI8QmFz
ZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2so
KS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkKKyAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhV
bmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBl
bHNlIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQogICAgICAgICBzZXR1cExMSW50KGNvZGVCbG9j
ayk7CiAgICAgZWxzZQogICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVy
LmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21M
TEludFRpZXJVcENvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKCkKICAgICB7CiAgICAgICAgIGlmIChP
cHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9CQlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVz
aG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxw
dHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJC
UU9wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5l
d1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCks
IG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9s
ZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lm
T3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCkBAIC02NSw5ICs2NSw5IEBAIHB1YmxpYzoK
ICAgICB2b2lkIG9wdGltaXplU29vbigpCiAgICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2Fz
bUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9u
czo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICAgICAg
c2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvck9NR09wdGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1Ro
cmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAgICAgfQog
CiAgICAgc3RydWN0IE9TUkVudHJ5RGF0YSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtVGllclVwQ291bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogVGll
clVwQ291bnQ6OlRpZXJVcENvdW50KCkKIHsKLSAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6
dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICBzZXRO
ZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgp
KTsKIH0KIAogVGllclVwQ291bnQ6On5UaWVyVXBDb3VudCgpID0gZGVmYXVsdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCShyZXZpc2lvbiAy
ODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6
ZUFmdGVyV2FybVVwKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRp
bWl6aW5nIGFmdGVyIHdhcm0tdXAuIik7Ci0gICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25z
Ojp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAg
ICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldh
cm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRS
ZWFjaGVkKCkKQEAgLTkwLDE0ICs5MCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZU5l
eHRJbnZvY2F0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRh
TG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRp
bWl6aW5nIG5leHQgaW52b2NhdGlvbi4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKDAsIG51
bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCk7CiAgICAgfQogCiAgICAgdm9pZCBv
cHRpbWl6ZVNvb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGlt
aXppbmcgc29vbi4iKTsKICAgICAgICAgLy8gRklYTUU6IE5lZWQgYWRqdXN0bWVudCBvbmNlIHdl
IGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdhc20gZnVuY3Rpb25zLgotICAgICAgICBzZXRO
ZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCksIG51bGxw
dHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0
aW1pemVTb29uKCkpOwogICAgIH0KIAogICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xk
QmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvbXBpbGF0
aW9uUmVzdWx0IHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvV1RG
L3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMjAgQEAgcHVibGljOgogICAg
ICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+CisgICAgQmFnJiBvcGVyYXRvcj0oQmFnPFQsIFU+JiYgb3RoZXIpCisgICAgeworICAg
ICAgICBpZiAodW53cmFwcGVkSGVhZCgpID09IG90aGVyLnVud3JhcHBlZEhlYWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKworICAgICAgICBCYWcgZGVzdHJveTsKKyAgICAgICAgZGVz
dHJveS5tX2hlYWQgPSB1bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG1faGVhZCA9IG90aGVyLnVu
d3JhcHBlZEhlYWQoKTsKKyAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKKworICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgfQorCiAgICAgfkJhZygpCiAgICAgewogICAgICAgICBjbGVh
cigpOwpJbmRleDogU291cmNlL1dURi93dGYvUGFja2VkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvUGFja2VkLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9XVEYvd3RmL1Bh
Y2tlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDEwIEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KLSAgICBUJiBv
cGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBVID0gVD4KKyAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc192b2lkX3Y8
VT4sIFUmPjo6dHlwZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KKwogICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWdldCgpOyB9CiAKICAgICAvLyBUaGlz
IGNvbnZlcnNpb24gb3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBi
dXQgbm90IHRvIG90aGVyIGludGVnZXIgdHlwZXMuCg==
</data>
<flag name="commit-queue"
          id="462777"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439185</attachid>
            <date>2021-09-24 12:58:00 -0700</date>
            <delta_ts>2021-09-24 13:32:15 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>645477</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMDUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzOCBA
QAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhZGRzIGFuICJ1bmxpbmtlZCIgYmFzZWxpbmUgSklUIHRvIEpTVkFMVUU2
NCBwbGF0Zm9ybXMuIFRoZSBKSVQKKyAgICAgICAgY29kZSBwcm9kdWNlZCBieSB0aGlzIGJhc2Vs
aW5lIEpJVCBjYW4gYmUgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3MgdGhhdAorICAgICAg
ICBzaGFyZSBhbiBVbmxpbmtlZENvZGVCbG9jay4gVGhlIGJlbmVmaXQgb2YgdGhpcyBpcywgaWYg
d2UncmUgY3JlYXRpbmcgYSBDb2RlQmxvY2sKKyAgICAgICAgZnJvbSBhbiBVbmxpbmtlZENvZGVC
bG9jayB0aGF0IGFscmVhZHkgY29tcGlsZWQgYW4gdW5saW5rZWQgYmFzZWxpbmUgSklUCisgICAg
ICAgIGluc3RhbmNlLCB0aGlzIG5ldyBDb2RlQmxvY2sganVzdCBzdGFydHMgb2ZmIGV4ZWN1dGlu
ZyBpbiB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgICJmb3IgZnJlZSIuCisgICAgICAgIAorICAg
ICAgICBUbyBtYWtlIHRoaXMgd29yaywgdGhlIGNvZGUgd2UgZW1pdCBub3cgbmVlZHMgdG8gYmUg
aW5kZXBlbmRlbnQgb2YgYSBzcGVjaWZpYworICAgICAgICBDb2RlQmxvY2sgaW5zdGFuY2UuIFdl
IHVzZSBhIENvZGVCbG9jayBpbnN0YW5jZSBmb3IgbWluaW1hbCBwcm9maWxpbmcgaW5mb3JtYXRp
b24KKyAgICAgICAgd2hlbiBjb21waWxpbmcsIGJ1dCBvdGhlcndpc2UsIHRoZSBjb2RlIGlzIHRp
ZWQgdG8gdGhlIFVubGlua2VkQ29kZUJsb2NrLiBXaGVuCisgICAgICAgIHdlIG5lZWQgQ29kZUJs
b2NrIHNwZWNpZmljIGluZm9ybWF0aW9uLCB3ZSBsb2FkIGl0LiBUaGlzIHVzdWFsbHkgbWVhbnMg
dGhpbmdzCisgICAgICAgIGxpa2Ugd2UnbGwgbG9hZCB0aGluZ3MgZnJvbSB0aGUgTWV0YWRhdGEg
ZHluYW1pY2FsbHkuIFRoaXMgcGF0Y2ggYWxzbyBhZGRzIGEKKyAgICAgICAgImxpbmtlZCBjb25z
dGFudCBwb29sIiBjb25jZXB0LCBhbmQgYW55dGltZSB3ZSBpbnN0YW50aWF0ZSBzdWNoIGEgQ29k
ZUJsb2NrLAorICAgICAgICB3ZSBhbHNvIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcyAibGlua2Vk
IGNvbnN0YW50IHBvb2wiLiBUaGlzIGNvbnRhaW5zIHRoaW5ncworICAgICAgICBsaWtlIG91ciBp
bmxpbmUgY2FjaGUgZGF0YSBzdHJ1Y3R1cmVzIChTdHJ1Y3R1cmVTdHViSW5mbyopLCBKU0dsb2Jh
bE9iamVjdCosCisgICAgICAgIGV0Yy4KKyAgICAgICAgCisgICAgICAgIFVubGlua2VkIGJhc2Vs
aW5lIEpJVCBhbHdheXMgcnVucyBJQ3MgaW4gdGhlICJkYXRhIiBtb2RlLiBUbyBtYWtlIHRoaXMg
d29yaywgSQorICAgICAgICBtYWRlIGRhdGEgSUNzIHdvcmsgb24geDg2XzY0LiBUbyBkbyB0aGlz
LCB3ZSBubyBsb25nZXIgY2FsbC9yZXQgdG8gdGhlIElDLgorICAgICAgICBJbnN0ZWFkLCB3ZSBq
dW1wIHRvIHRoZSBJQywgYW5kIHRoZSBJQyBqdW1wcyBiYWNrIGJ5IGxvYWRpbmcgdGhlICJkb25l
IiBsb2NhdGlvbgorICAgICAgICBmcm9tIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBkeW5hbWljYWxs
eS4gVGhpcyBzaW1wbGlmaWVzIHRoZSBkZXNpZ24gdG8gbm90IGJlCisgICAgICAgIGJhc2VkIG9u
IHRoZSBhcm02NCBjYWxsaW5nIGNvbnZlbnRpb24sIGFuZCBrZWVwcyB0aGUgc2FtZSBwZXJmb3Jt
YW5jZSBjaGFyYWN0ZXJpc3RpY3MuIAorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNv
IGFkZHMgYSBuZXcgdmVyc2lvbiBvZiBJbmxpbmVBY2Nlc3MgdGhhdCBpcyBvbmx5IHVzZWQgaW4g
YmFzZWxpbmUKKyAgICAgICAgSklUIChmb3Igbm93KS4gSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIG1h
a2UgdGhlIERGRy9GVEwgYWxzbyB1c2UgdGhpcyBmb3IgRGF0YQorICAgICAgICBJQ3MuIEJ1dCB3
ZSBkb24ndCBuZWVkIHRvIGRvIHRoYXQgeWV0IHNpbmNlIHRob3NlIHRpZXJzIGRvbid0IHVzZSBk
YXRhIElDcyBieQorICAgICAgICBkZWZhdWx0LiBUaGUgYmFzZWxpbmUgSklUIG5vdyBoYXMgYSBw
dXJlIGRhdGEgSUMgYXBwcm9hY2ggdG8gSW5saW5lQWNjZXNzLiBTbworICAgICAgICBpbnN0ZWFk
IG9mIHJlcGF0Y2hpbmcgY29kZSwgd2UgcmVwYXRjaCBmaWVsZHMgd2UgbG9hZCBkeW5hbWljYWxs
eS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgYSBmZXcgdGhp
bmdzIGluIE9TUiBleGl0LCB3aGVyZSBib3RoIERGRy9GVEwgd2VyZQorICAgICAgICBzdG9yaW5n
IGNhbGxlZSBzYXZlcyB0byB0aGUgY2FsbGVlIHNhdmVzIGJ1ZmZlciBpbiBhIHdlaXJkIHBsYWNl
LCBhbmQgc2VwYXJhdGUKKyAgICAgICAgZnJvbSBvbmUgYW5vdGhlci4gSSBub3RpY2VkIHRoaXMg
Y29kZSBjYW4gYmUgc2ltcGxpZmllZCBpZiB3ZSBqdXN0IHN0b3JlCisgICAgICAgIGNhbGxlZSBz
YXZlcyBhdCB0aGUgZW5kIG9mIHRoZSBPU1IgZXhpdCBoYW5kbGVyLCBhbmQgZnJvbSBjb21tb24g
SklUIGVtaXNzaW9uCisgICAgICAgIGNvZGUuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNo
IGFsc28gZml4ZXMgYSBidWcgd2hlcmUgd2UgY291bGQgZW5kIHVwIHdpdGggdGhlIHdyb25nIChh
bmQgYWx3YXlzCisgICAgICAgIG1vcmUgbmVnYXRpdmUpIFNQIGluIHRoZSBiYXNlbGluZSBKSVQu
IFRoaXMgY291bGQgaGFwcGVuIHdoZW4gd2UgT1NSIGV4aXQKKyAgICAgICAgZnJvbSBhbiBpbmxp
bmVkIGdldHRlci9zZXR0ZXIuIFRoZSBPU1IgZXhpdCBjb2RlIHB1dHMgdGhlIHJldHVybiBQQyB3
aGVuCisgICAgICAgIHJldHVybmluZyB0byB0aGUgY2FsbCBzaXRlIG9mIHRoZSBnZXR0ZXIvc2V0
dGVyIHRvIGJlIHRoZSBpbmxpbmUgY2FjaGUncworICAgICAgICAiZG9uZSBsb2NhdGlvbiIuIEhv
d2V2ZXIsIHRoaXMgImRvbmUgbG9jYXRpb24iIGRpZG4ndCB1c2VkIHRvIHJlc3RvcmUgU1AuCisg
ICAgICAgIFRoaXMgcGF0Y2ggY29uc2VydmF0aXZlbHkgbWFrZXMgaXQgc28gdGhhdCB3ZSByZXN0
b3JlIHRoZSBTUCBhdCB0aGVzZSBzaXRlcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbWVh
c3VyZWQgYXMgYSAxJSBzcGVlZHVwIG9uIFNwZWVkb21ldGVyMi4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlT3Bl
cmFuZHNGb3JDaGVja3BvaW50Lmg6CisgICAgICAgIChKU0M6OnZhbHVlUHJvZmlsZU9mZnNldEZv
cik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjplbWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RmFz
dFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKToKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgpOgorICAgICAgICAo
SlNDOjpDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMpOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNsb3dT
dHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjphZGRyZXNzT2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZSk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6ZnJhbWVSZWdpc3RlckNvdW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiaW5hcnlB
cml0aFByb2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5hcnlBcml0aFBy
b2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluZFBDKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpqaXRTb29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRO
ZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRBZGRJQyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUTXVsSUMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVFN1YklDKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRKSVROZWdJQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6aml0QWZ0ZXJXYXJtVXApOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29u
c3RhbnRQb29sKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFzZWxpbmVKSVRDb25zdGFudFBvb2wpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpkb250SklUQW55dGltZVNvb24pOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duQ2VsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6YWRkTWF0aElDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzZXRKSVRDb2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRD
b2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzd2l0Y2hKdW1wVGFi
bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJh
c2VsaW5lU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNlbGlu
ZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZGZnU3dp
dGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdTdHJpbmdTd2l0Y2hK
dW1wVGFibGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uu
aDoKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjpzZXRUaHJlc2hvbGQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0
aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJ
ZE1ldGFkYXRhLmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0
aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpHZXRCeUlkTW9kZU1ldGFk
YXRhOjpvZmZzZXRPZk1vZGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcDoK
KyAgICAgICAgKEpTQzo6R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0
U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEdl
dHRlcik6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6
OkluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToK
KyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5s
aW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UpOgorICAgICAgICAoSlND
OjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChK
U0M6OklubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OklubGlu
ZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyk6CisgICAgICAgIChKU0M6OklubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2Vzcyk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmg6
CisgICAgICAgICogYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmg6CisgICAgICAgIChK
U0M6Okl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMpOgorICAgICAgICAq
IGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6CisgICAgICAgIChKU0M6OkxMSW50Q2FsbExp
bmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSk6CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2Rl
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAo
SlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OmNhbGN1bGF0ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0
aW9uSGFuZGxpbmcpOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNl
cnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMpOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgICogYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0
YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5jcHA6CisgICAgICAg
IChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OmluaXRHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0UHV0QnlJZFJlcGxhY2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5p
dEluQnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNz
Q2FzZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZE
b25lTG9jYXRpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHA6CisgICAg
ICAgIChKU0M6OnByaW50U3VwZXJTYW1wbGVyU3RhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0lk
ZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dGhyZXNob2xkRm9y
SklUKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJv
ZmlsZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6Omluc3RydWN0aW9uQXQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmJpbmFyeUFyaXRoUHJvZmlsZSk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp1bmFyeUFyaXRoUHJvZmlsZSk6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpsbGludEV4ZWN1dGVDb3VudGVyKToKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaDoKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRNZXRhZGF0YVRhYmxlOjpvZmZzZXRJbk1ldGFkYXRhVGFibGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNl
OjpWYWx1ZVByb2ZpbGVCYXNlKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQmFzZTo6Y2xl
YXJCdWNrZXRzKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVj
a2V0KToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb2RlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAqIGRmZy9E
RkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxpbmsp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJl
cGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmhhbmRsZUV4aXRDb3VudHMp
OgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRK
dW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRQcml2YXRlTmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVWYWx1ZVN1Yik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dTaGFkb3dDaGlja2VuVGFpbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExKSVRDb2Rl
Lmg6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Omxpbmsp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjphZGRNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlVW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpjb21waWxlQmluYXJ5TWF0aElDKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVB1dFByaXZhdGVOYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAg
ICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29t
cGlsZVN0dWIpOgorICAgICAgICAqIGdlbmVyYXRvci9NZXRhZGF0YS5yYjoKKyAgICAgICAgKiBq
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpz
dG9yZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVh
bENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMu
aDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6CisgICAgICAgICogaml0L0Jhc2VsaW5lSklUQ29kZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKToKKyAg
ICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZGRKSVRNdWxJQyk6CisgICAgICAgIChKU0M6Ok1h
dGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMpOgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFk
ZEpJVE5lZ0lDKToKKyAgICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MpOgor
ICAgICAgICAoSlNDOjpCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAg
IChKU0M6OkJhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAgICogaml0
L0Jhc2VsaW5lSklUQ29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SklUQ29uc3RhbnRQb29s
OjphZGQpOgorICAgICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OnNpemUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OmF0IGNvbnN0KToKKyAgICAgICAgKiBqaXQvQmFz
ZWxpbmVKSVRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6QmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6
ZSk6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkNDYWxs
SGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKToKKyAgICAgICAgKEpTQzo6
Q0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldCk6CisgICAgICAgICogaml0
L0NDYWxsSGVscGVycy5oOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHA6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oOgorICAgICAgICAq
IGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpDYWxsRnJhbWVTaHVmZmxlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpwcmVwYXJlRm9yVGFpbENhbGwpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5o
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c25hcHNob3QgY29uc3QpOgorICAg
ICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OkpJVCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRWYXJS
ZWFkT25seUNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc2V0U1ApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5k
Q29uc3RhbnRQb29sUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpm
aW5hbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcik6CisgICAgICAgIChK
U0M6OkpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKToKKyAgICAgICAgKiBqaXQvSklULmg6Cisg
ICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVnYXRlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2FkZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tdWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3ViKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2Fs
bEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2l0ZXJhdG9yX25leHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX25leHQpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxl
U2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dD
YXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpT
Qzo6SklUQ29kZTo6dXNlRGF0YUlDKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6cGNUb0NvZGVP
cmlnaW5NYXApOgorICAgICAgICAqIGppdC9KSVRDb21waWxhdGlvbktleS5jcHA6CisgICAgICAg
IChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklU
Q29tcGlsYXRpb25LZXkuaDoKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OkpJVENv
bXBpbGF0aW9uS2V5KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJhdG9y
ISBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpvcGVy
YXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Omhhc2ggY29u
c3QpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6cHJvZmlsZWRCbG9jayBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXpl
KToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJ
VEdldEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUdldEJ5SWRJbmxpbmVB
Y2Nlc3MpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJ
VFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkpJVERlbEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklURGVsQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAg
IChKU0M6OkpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAo
SlNDOjpKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpKSVRHZXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXRoKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0
YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudEludCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6aXNLbm93bkNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdldENv
bnN0YW50T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6
bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmFkdmFuY2VUb05l
eHRDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdExvYWREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkpJVDo6anVtcFRhcmdldCk6CisgICAgICAgIChKU0M6OkpJVDo6
bG9hZFB0ckZyb21NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZDMyRnJvbU1ldGFk
YXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkOEZyb21NZXRhZGF0YSk6CisgICAgICAgIChK
U0M6OkpJVDo6c3RvcmU4VG9NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6c3RvcmUzMlRv
TWV0YWRhdGEpOgorICAgICAgICAoSlNDOjpKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
SklUOjpsb2FkR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29kZUJsb2Nr
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEdldFB1dEluZm8pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZSk6IERlbGV0ZWQuCisgICAg
ICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9u
dWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzVHJ1dGh5
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dp
dGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVj
a190cmFwcyk6CisgICAgICAgIChKU0M6OkpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5l
d0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYXJndW1lbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9v
Zik6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdHlwZW9mX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SklUX09QRVJBVElPTik6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBqaXQvSklUUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmtleSk6CisgICAgICAg
ICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6c2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9k
ZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
aW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQcml2YXRlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SGFzUHJpdmF0ZVNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19w
cml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRl
X2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmspOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29w
ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKToKKyAgICAg
ICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF90
b19zY29wZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1
cmVWYXIpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9wcml2YXRlX2Jy
YW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9pbnRl
cm5hbF9maWVsZCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUdldEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeSk6CisgICAgICAgIChK
U0M6OnRyeUNhY2hlSW5CeSk6CisgICAgICAgIChKU0M6OnVubGlua0NhbGwpOgorICAgICAgICAq
IGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpoYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxl
RXhjZXB0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6Cisg
ICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6
aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRf
U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayk6CisgICAgICAgICogcnVudGltZS9DYWNoZWRU
eXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtQmluYXJ5QXJpdGhQ
cm9maWxlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtVW5hcnlB
cml0aFByb2ZpbGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9j
a1R5cGU+OjplbmNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoK
KyAgICAgICAgKEpTQzo6dXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKToKKyAgICAg
ICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlv
bnMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1l
L1NjcmlwdEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpw
cmVwYXJlRm9yRXhlY3V0aW9uSW1wbCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRUaWVyVXBD
b3VudGVyLmg6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6b3B0aW1p
emVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6
b3B0aW1pemVTb29uKToKKyAgICAgICAgKiB3YXNtL1dhc21UaWVyVXBDb3VudC5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50OjpUaWVyVXBDb3VudCk6CisgICAgICAgICogd2Fz
bS9XYXNtVGllclVwQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6Om9w
dGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6b3B0
aW1pemVOZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50Ojpv
cHRpbWl6ZVNvb24pOgorCiAyMDIxLTA5LTIzICBQaGlsaXAgQ2hpbWVudG8gIDxwY2hpbWVudG9A
aWdhbGlhLmNvbT4KIAogICAgICAgICBWYXJpb3VzIHR3ZWFrcyBpbiBwcmVwYXJhdGlvbiBmb3Ig
VGVtcG9yYWwuSW5zdGFudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC04MzcsNiArODM3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQQogCiAgICAgaml0L0Fzc2VtYmx5SGVscGVycy5oCiAgICAgaml0
L0Fzc2VtYmx5SGVscGVyc1Nwb29sZXJzLmgKKyAgICBqaXQvQmFzZWxpbmVKSVRDb2RlLmgKICAg
ICBqaXQvQ0NhbGxIZWxwZXJzLmgKICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCiAgICAg
aml0L0V4ZWN1dGFibGVNZW1vcnlIYW5kbGUuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC02MTksNiArNjE5LDcgQEAgaW50ZXJwcmV0ZXIvU2hhZG93
Q2hpY2tlbi5jcHAKIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKIAogaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAKK2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCiBqaXQvQmFzZWxpbmVKSVRQbGFu
LmNwcAogaml0L0JpbmFyeVN3aXRjaC5jcHAKIGppdC9DQ2FsbEhlbHBlcnMuY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTkwMCw2ICs5MDAsNyBAQAogCQk1MkNEMEY1RDIyNDJGNTY5MDA0QTE4
QTUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlv
bi5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0MkY1NjkwMDRBMThBNSAvKiBKYXZhU2Ny
aXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJh
bWV3b3JrICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNEMEY2NzIy
NDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87IH07CisJCTUyREQwMDA4MjZFMDM5Qjkw
MDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJ
VENvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MkVFRDc5NDI0OTJCODcwMDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRUVENzkzMjQ5MkI4Njgw
MDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovOyB9OwogCQk1MkY2QzM1RTFFNzFFQjA4
MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyB9OwogCQk1MzBBNjZCOTFGQTNFNzhC
MDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCMTFGQTNFNzdBMDAyNkE1NDUgLyogVW5pZmll
ZFNvdXJjZTMtbW0ubW0gKi87IH07CkBAIC0xMjIwLDcgKzEyMjEsNyBAQAogCQk3OTg3MkM0ODIy
MUJCQUYzMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODcyQzQ3MjIxQkJBRUQwMDhDNjk2OSAvKiBKU0Jh
c2VJbnRlcm5hbC5oICovOyB9OwogCQk3OTlFRjdDNDFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1Rv
T3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBMDkwODAxRDc2ODQ2
NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3OUEy
MjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyog
QXJpdGhQcm9maWxlLmggKi87IH07CisJCTc5QTIyODM2MUQzNUQ3MUYwMEQ4RTA2NyAvKiBBcml0
aFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUFCQjE3RTFFNUNDQjU3MDA0
NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUFCQjE3QzFFNUNDQjU3MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1i
bGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzlBQzMwRkYxRjk5NTM2NDAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBQzMw
RkUxRjk5NTM2MzAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oICov
OyB9OwogCQk3OUFGMEJFNDFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFGMEJF
MzFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM2NzQsNiArMzY3NSw4IEBA
CiAJCTUyQ0QwRjY0MjI0MkY1NjkwMDRBMThBNSAvKiB0ZXN0ZGZnICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFi
bGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0ZGZnOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRm
Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0ZGZnLmNwcDsg
cGF0aCA9IGRmZy90ZXN0ZGZnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJE
MTMwOEYyMjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9IGZvby5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJE
RDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCYXNlbGluZUpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJERDAw
MDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBCYXNlbGluZUpJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MkVFRDc5MjI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzYsNiArNjI3OSw4IEBA
CiAJCQkJNkI3NjdFN0EyNjc5MUYyNzAwMTdGOEQxIC8qIEFzc2VtYmx5SGVscGVyc1Nwb29sZXJz
LmggKi8sCiAJCQkJNzIzOTk4RjYyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5j
cHAgKi8sCiAJCQkJNzIzOTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5o
ICovLAorCQkJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuY3Bw
ICovLAorCQkJCTUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAq
LywKIAkJCQkwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNwcCAqLywK
IAkJCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi8sCiAJCQkJ
NjVCODM5MkQxQkFDQTlEMzAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmNwcCAqLywKQEAgLTk3
MzAsNiArOTczNSw3IEBACiAJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1OTUwIC8qIERGR0Zsb3dN
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdG
bHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJERDAwMDgyNkUwMzlCOTAw
NTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTUx
QUIzRDhCRTAwQkJCOEU4IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjY5Q0M4OTE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzODZGRDdFMjZFODY3QjgwMEU0QzI4QiAvKiBUZW1wb3JhbFBsYWluVGltZS5oIGlu
IEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxNSArMjAyLDE1
IEBAIFJlZlB0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9tU3RydWMKICAgICBzd2l0Y2gg
KHN0dWJJbmZvLmNhY2hlVHlwZSgpKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxm
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIp
OwotICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwg
TG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBQcm94eWFi
bGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBMb2FkLCBpZGVudGlmaWVyLCBzdHViSW5m
by5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8uaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkp
OwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgogICAgICAgICBSRUxFQVNF
X0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICByZXR1cm4g
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmllciwgc3R1Yklu
Zm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBS
ZXBsYWNlLCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8uaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJ
ZFNlbGY6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRp
Zmllcik7Ci0gICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBJbkhp
dCwgaWRlbnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNl
OjpjcmVhdGUodm0sIG93bmVyLCBJbkhpdCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZP
ZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNh
c2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1Yklu
Zm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKQEAgLTE5ODUsMTQgKzE5ODUsMTAgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAvLyBTdHVmZiBmb3Ig
Y3VzdG9tIGdldHRlcnMvc2V0dGVycy4KICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJh
dGlvbkNhbGw7CiAKKwogICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNh
bGN1bGF0aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAgICAgICAvLyBleGNlcHRp
b24gaGFuZGxpbmcgY2FsbCBzaXRlLgotICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVy
c1RvUHJlc2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VE
YXRhSUMoKSkKLSAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRS
ZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgotICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNw
aWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tG
b3JDYWxsKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAgIEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0
ZXJzVG9TdGFja0ZvckNhbGwoKTsKIAogICAgICAgICBhdXRvIHJlc3RvcmVMaXZlUmVnaXN0ZXJz
RnJvbVN0YWNrRm9yQ2FsbCA9IFsmXShBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUm
IHNwaWxsU3RhdGUsIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlKSB7CiAgICAgICAgICAgICBSZWdp
c3RlclNldCBkb250UmVzdG9yZTsKQEAgLTIwNzksOCArMjA3NSw3IEBAIHZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIEFTU0VSVCghKG51bWJlck9m
UmVnc0ZvckNhbGwgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSk7CiAgICAgICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXpl
b2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwogCi0gICAgICAgICAgICB1
bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQotICAgICAgICAgICAgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0Zv
ckNhbGwpOworICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxs
ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVy
T2ZCeXRlc0ZvckNhbGwpOwogCiAgICAgICAgICAgICBqaXQuc3ViUHRyKAogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2Fs
bCksCkBAIC0yMTM4LDYgKzIxMzMsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChB
Y2Nlc3NHZW5lCiAKICAgICAgICAgICAgIGludCBzdGFja1BvaW50ZXJPZmZzZXQgPSAoY29kZUJs
b2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpIC0gc3RhdGUucHJl
c2VydmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZS5udW1iZXJPZkJ5dGVzUHJlc2VydmVkIC0gc3BpbGxT
dGF0ZS5udW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb247CiAgICAg
ICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKwogICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUg
PSBpc0dldHRlcigpOwogICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tG
b3JDYWxsKHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7CiAKQEAgLTIyNjQsMTIgKzIy
NjAsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAKICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5
Ojp0YXJnZXRPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgICAgICBSZWdpc3RlclNl
dCBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAg
aWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAgICAgZXh0cmFSZWdpc3Rl
cnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCi0gICAgICAgICAg
ICBhdXRvIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9y
Q2FsbFdpdGhvdXRFeGNlcHRpb25zKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAg
ICAgICBhdXRvIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNr
Rm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3Vt
ZW50czxkZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+KENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cigmdm0pLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGppdC5wcmVw
YXJlQ2FsbE9wZXJhdGlvbih2bSk7CkBAIC0yMzY0LDEwICsyMzU1LDYgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVy
c1RvUHJlc2VydmUuc2V0KGJhc2VHUFIpOwogICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJz
VG9QcmVzZXJ2ZS5zZXQodmFsdWVSZWdzKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgICAgICAgICAg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgogICAg
ICAgICAgICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRl
ID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3Rl
cnNUb1ByZXNlcnZlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmUzMigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3Qu
cmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGlzdC5yYgkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBAIG9w
X2dyb3VwIDpQcm9maWxlZEJpbmFyeU9wLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmlu
YXJ5QXJpdGhQcm9maWxlCisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTMsNyAr
MzUzLDcgQEAgb3BfZ3JvdXAgOlVuYXJ5SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgICAgIHNyY0Rz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJp
dGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5
QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDp0b19vYmplY3QsCkBAIC0zODYsNyArMzg2LDcg
QEAgb3AgOm5lZ2F0ZSwKICAgICAgICAgcmVzdWx0VHlwZTogUmVzdWx0VHlwZSwKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUs
CisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3Ag
Om5vdCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJh
bmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAyODMwMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNo
ZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjggQEAgVmFsdWVQcm9maWxl
KiB2YWx1ZVByb2ZpbGVGb3JJbXBsKEJ5dGVjbwogICAgICAgICByZXR1cm4gJm1ldGFkYXRhLm1f
cHJvZmlsZTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgordWludHB0cl90IHZh
bHVlUHJvZmlsZU9mZnNldEZvcih1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCit7CisgICAgVU5V
U0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRleCk7CisgICAgaWYgY29uc3RleHByIChCeXRlY29kZTo6
b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3Jfb3BlbikgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9p
bnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1
cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOworICAgICAg
ICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZk5leHRQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKEJ5
dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CisgICAgICAgIHN3aXRjaCAo
Y2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVO
ZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRSZXN1bHRQcm9maWxl
KCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJldHVybiBCeXRlY29k
ZTo6TWV0YWRhdGE6Om9mZnNldE9mRG9uZVByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJh
dG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mVmFs
dWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIHJldHVybiBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29k
ZU1ldGFkYXRhPgogYm9vbCBoYXNWYWx1ZVByb2ZpbGVGb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0
YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAyODMwMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE0LDExICsxMTQsNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5r
KFZNJiB2bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7CiB9CiAKLUNvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgp
Ci17Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFn
PihtX2Zhc3RQYXRoU3RhcnQpOwotfQotCiBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KCFpc0RhdGFJQygpKTsKQEAgLTIyNSw2ICsyMjAsMTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnNl
dE1heEFyZ3VtZW50Q291bnRJbgogICAgIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PSB2YWx1ZTsKIH0KIAorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExp
bmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVjdCgp
ICYmIGlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxK
U0ludGVybmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQpOworfQorCiB2b2lkIENh
bGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRvIGhhbmRsZVNwZWNpZmlj
Q2FsbGVlID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKQEAgLTI5OCwyMyArMjk5LDExIEBA
IHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGMKICAgICBtX2ZyYW1lU2h1
ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBD
YWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewotICAgIHNldFVzZXNEYXRh
SUNzKHVzZURhdGFJQyk7Ci0gICAgaWYgKGlzRGF0YUlDKCkpIHsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7Ci0gICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZv
R1BSKTsKLSAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9H
UFI7Ci0gICAgfQotCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAg
aml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBt
X2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
ZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNs
b3dQYXRoOwogCi0gICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICBpZiAodXNlRGF0YUlDID09IFVz
ZURhdGFJQzo6WWVzKSB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hS
ZWdpc3RlcigpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2Fs
bExpbmtJbmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7IAogICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKQEAgLTMyMyw3ICszMTIsNyBAQCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAgICAgICBnb1BvbHlt
b3JwaGljID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNo
R1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5bW9ycGhpY0NhbGxlZU1hc2spKTsK
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAg
IHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgZ29Qb2x5bW9ycGhpYy5saW5rKCZq
aXQpOyAvLyBQb2x5bW9ycGhpYyBzdHViIGhhbmRsZXMgdGFpbCBjYWxsIHN0YWNrIHByZXAuCiAg
ICAgICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZv
R1BSLCBvZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFn
KTsKQEAgLTMzNiwxNCArMzI1LDE2IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmUKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2go
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKSk7CiAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGNhbGw7Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFp
bENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAg
Y2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBj
YWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJ
bmZvKTsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAgICAgICAgICAgIHUu
Y29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJ
Qy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJu
YWxQdHJUYWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2Nh
bGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNh
bGxlZUNoZWNrKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNTMsMTMgKzM0NCwzNCBAQCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlD
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0
RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywg
bnVsbHB0cik7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKworICAgIGlmIChpc0Rh
dGFJQygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJS
ZWc6OkludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHUuZGF0YUlDLm1fY2Fs
bExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKworICAgIHJldHVybiBlbWl0
RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURh
dGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQs
IEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VE
YXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwot
ICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9H
UFIsIHVzZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKKyAgICBzZXRVc2Vz
RGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlz
LCBqaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgVXNlRGF0YUlDOjpObywgaXNUYWlsQ2Fs
bCgpLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVy
biBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4gZW1p
dEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBV
c2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKIH0KIAog
dm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0
KQpAQCAtMzY5LDE3ICszODEsMzIgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChW
TSYgdm0sIAogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
Miwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9
CiAKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBqaXQubW92ZShjYWxsTGlu
a0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSks
IEpTRW50cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJ
QyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBtX2NvZGVPcmln
aW4gPSBDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAg
IHNldFVwQ2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2FsbGVlR1BSKTsKKyAg
ICBtX2RvbmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbjsKKyAg
ICBpZiAodW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkgeworICAgICAgICAv
LyBGSVhNRTogSXQnZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBzdHJ1
Y3R1cmUuCisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1l
U2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsKKyAg
ICB9CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlDLm1f
Y2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2FsbERl
c3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUg
cmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6
ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0VfQVNT
RVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7
CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhT
dGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0
YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgdS5j
b2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0lu
dGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQu
bGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0UGF0
aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRo
U3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwgdGhp
cyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNp
Z25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2Fs
bExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGlu
ZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAg
IGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwK
ICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAg
ICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVE
YXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0
dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50
OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgot
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVy
cyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVU
VVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1w
bChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGlj
OgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRo
KENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJl
Rm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBh
cmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZh
c3RQYXRoKENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2Fs
bCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBzdGF0
aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wg
aXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0
YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsyNDks
NiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAotICAg
IEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zbG93
U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsKICAg
ICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBt
X21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJfdCBt
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVibGlj
OgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlvblR5
cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9jYXRp
b25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAgICAg
IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxvY2F0
aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9z
bG93UGF0aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAKQEAg
LTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9y
aQogICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3QgVW5s
aW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsgLy8g
Q3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxseSBw
cm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBl
OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZsZURh
dGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw4ICsyNzksNiBAQCBDb2RlQmxvY2s6OkNvZGVC
bG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihm
YWxzZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9oYXNC
ZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNl
KQotICAgICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUoZmFsc2UpCiAgICAgLCBtX251
bUNhbGxlZUxvY2FscyhvdGhlci5tX251bUNhbGxlZUxvY2FscykKICAgICAsIG1fbnVtVmFycyhv
dGhlci5tX251bVZhcnMpCiAgICAgLCBtX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKG90aGVyLm1f
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCkBAIC0zMDgsNiArMzA2LDggQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3Zp
ZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKKwor
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxpbnRFeGVjdXRl
Q291bnRlcigpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwog
fQpAQCAtMzE4LDcgKzMxOCw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIEMKICAgICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKICAgICBvcHRpbWl6ZUFmdGVy
V2FybVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKIAogICAgIGlmIChvdGhlci5tX3JhcmVE
YXRhKSB7CiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTMzNiw4ICsz
MzUsNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBt
X2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0
aW9uKGZhbHNlKQogICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwg
bV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNlKQotICAgICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUoZmFsc2UpIAogICAgICwgbV9udW1DYWxsZWVMb2NhbHModW5saW5rZWRDb2RlQmxvY2st
Pm51bUNhbGxlZUxvY2FscygpKQogICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5u
dW1WYXJzKCkpCiAgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQpAQCAtMzU5LDcg
KzM1Niw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAg
IEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlu
a2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9sbGludEV4ZWN1
dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CisKICAg
ICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcwLDcgKzM2OSw4
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIC8vIHdlIGNhbid0
IGdlbmVyYXRlIGR1cmluZyB1bmxpbmtlZCBieXRlY29kZSBnZW5lcmF0aW9uLiBUaGlzIHByb2Nl
c3MgaXMgbm90IGFsbG93ZWQgdG8gZ2VuZXJhdGUgY29udHJvbAogLy8gZmxvdyBvciBpbnRyb2R1
Y2UgbmV3IGxvY2Fscy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB3ZSByZWx5IG9uIGxpdmVuZXNz
IGFuYWx5c2lzIHRvIGJlIHRoZSBzYW1lIGZvcgogLy8gYWxsIHRoZSBDb2RlQmxvY2tzIG9mIGFu
IFVubGlua2VkQ29kZUJsb2NrLiBXZSByZWx5IG9uIHRoaXMgZmFjdCBieSBjYWNoaW5nIHRoZSBs
aXZlbmVzcyBhbmFseXNpcwotLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLgorLy8gaW5zaWRl
IFVubGlua2VkQ29kZUJsb2NrLiBBbHNvLCBCYXNlbGluZSBKSVQgY29kZSBpcyBzaGFyZWQgYmV0
d2VlbiBhbGwgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jaywKKy8vIHNvIHRoZSBi
eXRlY29kZSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBiZXR3ZWVuIENvZGVCbG9ja3Mgc2hhcmluZyBh
biBVbmxpbmtlZENvZGVCbG9jay4KIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sq
IHVubGlua2VkQ29kZUJsb2NrLAogICAgIEpTU2NvcGUqIHNjb3BlKQogewpAQCAtNDcxLDYgKzQ3
MSwyMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAg
IGJyZWFrOyBcCiAgICAgfQogCisgICAgdW5zaWduZWQgYmluYXJ5UHJvZmlsZUluZGV4ID0gMDsK
KyAgICB1bnNpZ25lZCB1bmFyeVByb2ZpbGVJbmRleCA9IDA7CisjZGVmaW5lIExJTktfV0lUSF9C
SU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAg
IElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJv
ZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJpbmFyeVByb2ZpbGVJ
bmRleCsrKTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJ
TklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2Zp
bGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKHVuYXJ5UHJvZmlsZUluZGV4
KyspOyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mIGluc3RydWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25z
dCBhdXRvJiBpbnN0cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29k
ZUlEIG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMsMTQgKzU0OCwx
NCBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJ
TksoT3BDcmVhdGVQcm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0g
ICAgICAgIExJTksoT3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BE
aXYpCi0gICAgICAgIExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAg
ICAgTElOSyhPcEluYykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJ
TkFSWV9BUklUSF9QUk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRI
X1BST0ZJTEUoT3BNdWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShP
cERpdikKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisg
ICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBM
SU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAg
LTc2OSw3ICs3ODQsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBT
CiAgICAgLy8gcmVseSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5
IHBlcm1pdHRlZCB0byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFt
IHRvIG1vcmUgYWNjdXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGlt
aXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgLy8gSWYgdGhl
IGNvbmN1cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4g
Y29tcHV0ZSBpdCBoZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAgLTc5Myw2ICs4MDcsNzYg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3duZXJF
ZGdlLnNldCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZtLCB0
aGlzKSk7CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29k
ZShSZWY8QmFzZWxpbmVKSVRDb2RlPiBqaXRDb2RlKQoreworICAgIHNldEpJVENvZGUoaml0Q29k
ZS5jb3B5UmVmKCkpOworCisgICAgeworICAgICAgICBjb25zdCBhdXRvJiBqaXRDb2RlTWFwID0g
dGhpcy0+aml0Q29kZU1hcCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJl
ck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7CisgICAgICAgICAgICBIYW5kbGVySW5mbyYg
aGFuZGxlciA9IGV4Y2VwdGlvbkhhbmRsZXIoaSk7CisgICAgICAgICAgICAvLyBGSVhNRTogPHJk
YXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KKyAgICAgICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9
IGppdENvZGVNYXAuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8
RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBhdXRvJiBq
aXREYXRhID0gZW5zdXJlSklURGF0YShsb2NrZXIpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGppdERhdGEubV9qaXRDb25zdGFudFBvb2wuaXNFbXB0eSgpKTsKKyAgICAgICAgaml0RGF0YS5t
X2ppdENvbnN0YW50UG9vbCA9IEZpeGVkVmVjdG9yPHZvaWQqPihqaXRDb2RlLT5tX2NvbnN0YW50
UG9vbC5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGppdENvZGUtPm1f
Y29uc3RhbnRQb29sLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvIGVudHJ5ID0gaml0
Q29kZS0+bV9jb25zdGFudFBvb2wuYXQoaSk7CisgICAgICAgICAgICBzd2l0Y2ggKGVudHJ5LnR5
cGUpIHsKKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmpl
Y3Q6CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IG1fZ2xv
YmFsT2JqZWN0LmdldCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbzogeworICAgICAgICAgICAgICAg
IFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbyA9ICpzdGF0aWNfY2Fz
dDxVbmxpbmtlZENhbGxMaW5rSW5mbyo+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAg
ICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0RGF0YS5tX2NhbGxMaW5rSW5m
b3MuYWRkKENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCkpOwor
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+aW5pdGlhbGl6ZURhdGFJQyh2bSgpLCB1bmxp
bmtlZENhbGxMaW5rSW5mbywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAg
ICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gY2FsbExpbmtJbmZvOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvOiB7CisgICAgICAgICAgICAg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbyA9ICpzdGF0aWNf
Y2FzdDxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKj4oZW50cnkucGF5bG9hZC5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gaml0RGF0YS5tX3N0
dWJJbmZvcy5hZGQodW5saW5rZWRTdHViSW5mby5hY2Nlc3NUeXBlLCBDb2RlT3JpZ2luKHVubGlu
a2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5p
bml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8odGhpcywgdW5saW5rZWRTdHVi
SW5mbyk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IHN0
dWJJbmZvOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbDogeworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucGF5
bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtp
XSA9IGZ1bmN0aW9uRGVjbChpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25F
eHByOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1f
aml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25FeHByKGluZGV4KTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHN3aXRjaCAoY29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICBj
YXNlIE1vZHVsZUNvZGU6CisgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgbV9zaG91bGRBbHdh
eXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGdW5jdGlvbkNv
ZGU6CisgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVj
YXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KKyAgICAgICAgLy8gRG9uJ3Qg
b3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGlu
ZWQgJj0gY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCgpKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVu
Y3Rpb24odGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChqaXRDb2RlLT5t
X2lzU2hhcmVhYmxlICYmICF1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVD
b2RlICYmIE9wdGlvbnM6OnVzZUJhc2VsaW5lSklUQ29kZVNoYXJpbmcoKSkKKyAgICAgICAgdW5s
aW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSA9IFdURk1vdmUoaml0Q29k
ZSk7Cit9CisKIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07
CkBAIC04NzMsNiArOTU3LDI3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKIH0KIAorYm9vbCBDb2RlQmxvY2s6OmlzQ29uc3RhbnRPd25lZEJ5VW5saW5r
ZWRDb2RlQmxvY2soVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKK3sKKyAgICAvLyBUaGlzIG5l
ZWRzIHRvIGNvcnJlc3BvbmQgdG8gd2hhdCB3ZSBkbyBpbnNpZGUgc2V0Q29uc3RhbnRSZWdpc3Rl
cnMuCisgICAgc3dpdGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5jb25zdGFudFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbihyZWcpKSB7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
OkludGVnZXI6CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZToKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90
aGVyOiB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB1bmxpbmtlZENvZGVCbG9jaygpLT5nZXRD
b25zdGFudChyZWcpOworICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0Nl
bGwoKTsKKyAgICAgICAgaWYgKGNlbGwtPmluaGVyaXRzPFN5bWJvbFRhYmxlPih2bSgpKSB8fCBj
ZWxsLT5pbmhlcml0czxKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4odm0oKSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNl
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKwogVmVjdG9yPHVuc2lnbmVkPiBDb2RlQmxvY2s6OnNldENv
bnN0YW50UmVnaXN0ZXJzKGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4m
IGNvbnN0YW50cywgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYg
Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogewogICAgIFZNJiB2bSA9ICptX3Zt
OwpAQCAtODkyLDYgKzk5Nyw3IEBAIFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25z
dGFudFIKICAgICAgICAgc3dpdGNoIChyZXByZXNlbnRhdGlvbikgewogICAgICAgICBjYXNlIFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKICAgICAgICAgICAgIGNv
bnN0YW50ID0gZ2xvYmFsT2JqZWN0LT5saW5rVGltZUNvbnN0YW50KHN0YXRpY19jYXN0PExpbmtU
aW1lQ29uc3RhbnQ+KGNvbnN0YW50LmFzSW50MzJBc0FueUludCgpKSk7CisgICAgICAgICAgICBB
U1NFUlQoY29uc3RhbnQuaXNDZWxsKCkpOyAvLyBVbmxpbmtlZCBCYXNlbGluZSBKSVQgcmVxdWly
ZXMgdGhpcy4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjo6T3RoZXI6CiAgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpJbnRlZ2VyOgpAQCAtMTUxNCw3ICsxNjIwLDcgQEAgQ29kZUJsb2NrOjpKSVREYXRhJiBDb2Rl
QmxvY2s6OmVuc3VyZUpJVAogICAgIHJldHVybiAqbV9qaXREYXRhOwogfQogCi12b2lkIENvZGVC
bG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpCit2b2lkIENvZGVCbG9jazo6
ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKQogewogICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9q
aXREYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
OiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCkBAIC0xNTI1LDYgKzE2MzEsMjAgQEAgdm9pZCBD
b2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbgogICAgICAgICAgICAgc3R1YkluZm8t
PnZpc2l0V2Vha1JlZmVyZW5jZXMobG9ja2VyLCB0aGlzKTsKICAgICAgICAgfQogICAgIH0KKwor
CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBpZiAoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSB7CisgICAgICAgIC8vIFZlcmlmeSB3ZSBkb24ndCBuZWVkIHRvIGZpbmFsaXplIHRo
ZXNlIHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KKyAgICAgICAgZm9yIChDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbyA6IHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29k
ZS5nZXQoKSktPm1fZXZhbENhbGxMaW5rSW5mb3MpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2Fs
bExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+Zm9yRWFj
aERlcGVuZGVudENlbGwoW10gKEpTQ2VsbCopIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICB9CisjZW5kaWYK
IH0KICNlbmRpZgogCkBAIC0xNTM0LDQ2ICsxNjU0LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5h
bGl6ZVVuY29uZGl0aW9uYWxseSgKIAogICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAKLSNp
ZiBFTkFCTEUoSklUKQotICAgIGJvb2wgaXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gbV9p
c0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGU7Ci0gICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUgPSBmYWxzZTsKLSAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBleGVjdXRp
bmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0Ci0gICAg
Ly8gdG8gZGlzY2FyZCBiYXNlbGluZSBKSVQgY29kZSBhbmQgcmVpbnN0YWxsIExMSW50IGNvZGUg
dG8gc2F2ZSBKSVQgbWVtb3J5LgotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpICYmICFtX2hh
c0xpbmtlZE9TUkV4aXQgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmICFt
X3ZtLT5oZWFwLmNvZGVCbG9ja1NldCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpKSB7Ci0g
ICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IG9wdGltaXplZFJlcGxh
Y2VtZW50KCkpIHsKLSAgICAgICAgICAgIGlmICghb3B0aW1pemVkQ29kZUJsb2NrLT5tX29zckV4
aXRDb3VudGVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRWxpZ2libGVGb3JMTEludERvd25n
cmFkZSkgewotICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGUgPSBudWxscHRyOwotICAgICAg
ICAgICAgICAgICAgICBMTEludDo6c2V0RW50cnlwb2ludCh0aGlzKTsKLSAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1
bmspOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxp
bmtlZENvZGUtPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIg
PSBtX3VubGlua2VkQ29kZS0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5k
bGVyc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmlu
c3RydWN0aW9ucygpLmF0KHVubGlua2VkSGFuZGxlci50YXJnZXQpLnB0cigpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxv
Y2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZUNhdGNoKGlu
c3RydWN0aW9uLndpZHRoKCkpLmNvZGUoKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgdW5saW5rSW5jb21pbmdDYWxscygpOwotCi0gICAgICAgICAgICAg
ICAgICAgIC8vIEl0J3Mgc2FmZSB0byBjbGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGluIGZp
bmFsaXplVW5jb25kaXRpb25hbGx5IGFsbCBjb21waWxlciB0aHJlYWRzCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGFyZSBzYWZlcG9pbnRlZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5pbmcgZWl0aGVy
IGJlZm9yZSBvciBhZnRlciBieXRlY29kZSBwYXJzZXIsIGFuZCBieXRlY29kZQotICAgICAgICAg
ICAgICAgICAgICAvLyBwYXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcg
aW50byB0aGUgdmFyaW91cyAqaW5mb3MuCi0gICAgICAgICAgICAgICAgICAgIHJlc2V0SklURGF0
YSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2lzRWxp
Z2libGVGb3JMTEludERvd25ncmFkZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSNlbmRpZgotICAgIAogICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0
ZWQoaml0VHlwZSgpKSkKICAgICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogCiAj
aWYgRU5BQkxFKEpJVCkKICAgICBpZiAoISFqaXRDb2RlKCkpCi0gICAgICAgIGZpbmFsaXplQmFz
ZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKKyAgICAgICAgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMo
KTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0xNTk0LDcgKzE2ODAsNyBAQCB2
b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgIGNhc2UgSklU
VHlwZTo6SG9zdENhbGxUaHVuazoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBK
SVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgotICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXIuY291bnQoKTsKKyAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVD
b3VudGVyLT5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlw
ZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIu
Y291bnQoKTsKQEAgLTE2NzUsMzAgKzE3NjEsNiBAQCBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJs
b2NrOjphZGRTdHViSW5mCiAgICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0dWJJ
bmZvcy5hZGQoYWNjZXNzVHlwZSwgY29kZU9yaWdpbik7CiB9CiAKLUpJVEFkZElDKiBDb2RlQmxv
Y2s6OmFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklU
RGF0YShsb2NrZXIpLm1fYWRkSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVRNdWxJQyog
Q29kZUJsb2NrOjphZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkK
LXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVu
c3VyZUpJVERhdGEobG9ja2VyKS5tX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklU
U3ViSUMqIENvZGVCbG9jazo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJl
dHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19
Ci0KLUpJVE5lZ0lDKiBDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwot
ICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmls
ZSk7Ci19Ci0KIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xv
Y2spOwpAQCAtMzEzMyw3ICszMTk1LDcgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lz
dGVyQ291bnQoKQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5l
SklUOgotICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7Cisg
ICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzLT51bmxpbmtlZENv
ZGVCbG9jaygpKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAjaWYgRU5BQkxFKERGR19KSVQp
CkBAIC0zMzQ5LDEzICszNDExLDEzIEBAIEJpbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjpi
aW5hcnlBcmkKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9h
ZGQ6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJp
dGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMp
Lm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfbXVsOgotICAgICAgICByZXR1cm4gJnBjLT5h
czxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJu
IHBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNl
IG9wX3N1YjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcyku
bV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEo
dGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAm
cGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICBy
ZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzNjcsMTEgKzM0MjksMTEgQEAg
VW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0aAogewogICAgIHN3aXRjaCAo
cGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0dXJuICZw
Yy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wSW5jPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wSW5jPigp
Lm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfZGVjOgotICAgICAg
ICByZXR1cm4gJnBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
KyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJv
ZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zNDcyLDIyICsz
NTM0LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmkKIH0KIAog
I2lmIEVOQUJMRShKSVQpCi12b2lkIENvZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXAoc3Rk
Ojp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmIG1hcCkgCi17IAotICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9w
Y1RvQ29kZU9yaWdpbk1hcCA9IFdURk1vdmUobWFwKTsKLX0KLQogc3RkOjpvcHRpb25hbDxDb2Rl
T3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQQyh2b2lkKiBwYykKIHsKKyAgICBpZiAoYXV0byogcGNU
b0NvZGVPcmlnaW5NYXAgPSBtX2ppdENvZGUtPnBjVG9Db2RlT3JpZ2luTWFwKCkpIHsKKyAgICAg
ICAgaWYgKHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IHBjVG9Db2RlT3Jp
Z2luTWFwLT5maW5kUEMocGMpKQorICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CisgICAg
fQorCiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAg
ICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoaml0RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcCkgewotICAgICAgICAgICAgICAgIGlm
IChzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBqaXREYXRhLT5tX3BjVG9D
b2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29k
ZU9yaWdpbjsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykgewogICAgICAgICAgICAgICAg
IGlmIChzdHViSW5mby0+Y29udGFpbnNQQyhwYykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+KHN0dWJJbmZvLT5jb2RlT3JpZ2luKTsKQEAgLTM1
MjEsMjggKzM1NzcsMTQgQEAgc3RkOjpvcHRpb25hbDxCeXRlY29kZUluZGV4PiBDb2RlQmxvY2s6
OgogICAgIHJldHVybiBieXRlY29kZUluZGV4OwogfQogCi1pbnQzMl90IENvZGVCbG9jazo6dGhy
ZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKQotewotICAgIHN3aXRjaCAodW5saW5rZWRD
b2RlQmxvY2soKS0+ZGlkT3B0aW1pemUoKSkgewotICAgIGNhc2UgVHJpU3RhdGU6OkluZGV0ZXJt
aW5hdGU6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQ7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6RmFs
c2U6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQgKiA0OwotICAgIGNhc2UgVHJpU3RhdGU6OlRy
dWU6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQgLyAyOwotICAgIH0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gdGhyZXNob2xkOwotfQotCi12b2lkIENvZGVCbG9jazo6
aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBDb2RlQmxvY2s6OmppdFNvb24oKQogewotICAgIG1fbGxp
bnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6
OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKKyAgICBtX2xsaW50RXhlY3V0
ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCh1bmxpbmtlZENvZGVCbG9jaygpLT50aHJlc2hvbGRG
b3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7CiB9CiAKLXZvaWQg
Q29kZUJsb2NrOjpqaXRTb29uKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXROZXh0SW52b2NhdGlvbigp
CiB7Ci0gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRG
b3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7CisgICAgbV9sbGlu
dEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAKIGJvb2wgQ29k
ZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0CkBAIC0zNTg4LDI4
ICszNjMwLDggQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBNYXRoSUNTdGF0cygpCiAgICAgZG91Ymxl
IG51bVN1YnMgPSAwLjA7CiAgICAgZG91YmxlIHRvdGFsU3ViU2l6ZSA9IDAuMDsKIAotICAgIGF1
dG8gY291bnRJQ3MgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBqaXREYXRhID0gY29kZUJsb2NrLT5tX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgICAg
IGZvciAoSklUQWRkSUMqIGFkZElDIDogaml0RGF0YS0+bV9hZGRJQ3MpIHsKLSAgICAgICAgICAg
ICAgICBudW1BZGRzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxBZGRTaXplICs9IGFkZElDLT5j
b2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJVE11bElDKiBt
dWxJQyA6IGppdERhdGEtPm1fbXVsSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtTXVscysrOwot
ICAgICAgICAgICAgICAgIHRvdGFsTXVsU2l6ZSArPSBtdWxJQy0+Y29kZVNpemUoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChKSVROZWdJQyogbmVnSUMgOiBqaXREYXRhLT5t
X25lZ0lDcykgewotICAgICAgICAgICAgICAgIG51bU5lZ3MrKzsKLSAgICAgICAgICAgICAgICB0
b3RhbE5lZ1NpemUgKz0gbmVnSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGZvciAoSklUU3ViSUMqIHN1YklDIDogaml0RGF0YS0+bV9zdWJJQ3MpIHsKLSAgICAg
ICAgICAgICAgICBudW1TdWJzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxTdWJTaXplICs9IHN1
YklDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgYXV0byBjb3Vu
dElDcyA9IFsmXSAoQ29kZUJsb2NrKikgeworICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBy
ZS1pbXBsZW1lbnQgdGhpcyB1c2luZyBKSVRDb2RlLgogICAgIH07CiAgICAgaGVhcCgpLT5mb3JF
YWNoQ29kZUJsb2NrKGNvdW50SUNzKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw5
IEBAIGNsYXNzIEpTTW9kdWxlRW52aXJvbm1lbnQ7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiBjbGFzcyBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ7
CiBjbGFzcyBNZXRhZGF0YVRhYmxlOwotY2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CiBjbGFzcyBS
ZWdpc3RlckF0T2Zmc2V0TGlzdDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworY2xhc3MgQmFz
ZWxpbmVKSVRDb2RlOwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihD
b2RlQmxvY2tSYXJlRGF0YSk7CiAKQEAgLTE1OCw3ICsxNTgsOSBAQCBwdWJsaWM6CiAgICAgTWV0
YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuZ2V0
KCk7IH0KIAogICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251
bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKHVuc2ln
bmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgfQogCkBA
IC0xNjcsNyArMTY5LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7
IHJldHVybiBtX251bVZhcnM7IH0KICAgICB1bnNpZ25lZCBudW1UbXBzKCkgY29uc3QgeyByZXR1
cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50VG1w
czsgfQogCi0gICAgdW5zaWduZWQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAm
bV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFt
ZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRl
cnMpOyB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAgLTIzMiwxNiAr
MjMzLDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMo
KSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3BvaW50cygpOwogCi0gICAgaW5s
aW5lIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAg
IC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYmFjayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdl
IHJldHVybiB0cnVlIGlmIGByZWdgIGlzIGB0aGlzYCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUu
Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAx
NDUKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0
Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHJlZykKICAgICB7CiAgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nh
c3Q8aW50PihtX251bVZhcnMpOwpAQCAtMjY4LDIzICsyNTksMjEgQEAgcHVibGljOgogI2lmIEVO
QUJMRShKSVQpCiAgICAgc3RydWN0IEpJVERhdGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1Rf
RkFTVF9BTExPQ0FURUQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiAKICAgICAgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAgICAg
ICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKLSAgICAgICAgQmFnPEpJVE11bElDPiBtX211bElD
czsKLSAgICAgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKLSAgICAgICAgQmFnPEpJVFN1YklD
PiBtX3N1YklDczsKICAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwog
ICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5l
bE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwogICAgICAgICBTZW50aW5lbExp
bmtlZExpc3Q8UG9seW1vcnBoaWNDYWxsTm9kZSwgUGFja2VkUmF3U2VudGluZWxOb2RlPFBvbHlt
b3JwaGljQ2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxsczsKLSAgICAgICAgRml4
ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIEZp
eGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwotICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5N
YXA7CiAgICAgICAgIGJvb2wgbV9oYXNDYWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAg
ICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgICAg
ICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKworICAgICAgICBGaXhlZFZlY3Rvcjx2b2lkKj4g
bV9qaXRDb25zdGFudFBvb2w7CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRD
b25zdGFudFBvb2woKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwgbV9qaXRDb25z
dGFudFBvb2wpOyB9CiAgICAgfTsKIAorICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGlu
ZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4pOworCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0
YShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChM
SUtFTFkobV9qaXREYXRhKSkKQEAgLTI5MywyMiArMjgyLDcgQEAgcHVibGljOgogICAgIH0KICAg
ICBKSVREYXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsK
IAotICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLSAgICBK
SVRNdWxJQyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTmVnSUMq
IGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUU3ViSUMqIGFkZEpJVFN1
YklDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2Vu
ZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUQWRkSUMqIGFk
ZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElD
KHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFt
ZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11
bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFy
eUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0K
LQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6
dmFsdWU+Ojp0eXBlPgotICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUq
IHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4K
LSAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyBy
ZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mSklURGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RGF0
YSk7IH0KIAogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlLCBD
b2RlT3JpZ2luKTsKIApAQCAtMzIyLDE4ICsyOTYsOCBAQCBwdWJsaWM6CiAgICAgLy8gbG9va2lu
ZyBmb3IgYSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0
aGlzLgogICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChC
eXRlY29kZUluZGV4KTsKICAgICAKLSAgICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29kZU1hcCYm
IGppdENvZGVNYXApCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1f
bG9jayk7Ci0gICAgICAgIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXAgPSBXVEZN
b3ZlKGppdENvZGVNYXApOwotICAgIH0KLSAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFw
KCkKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAg
ICAgICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXA7Ci0gICAgfQor
ICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKTsKIAotICAgIHZvaWQgc2V0UENUb0Nv
ZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKICAgICBz
dGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyh2b2lkKiBwYyk7CiAKICAgICB2b2lkIHNl
dENhbGxlZVNhdmVSZWdpc3RlcnMoUmVnaXN0ZXJTZXQpOwpAQCAtNDcyLDYgKzQzNiw3IEBAIHB1
YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7
IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewog
ICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBA
IC01NjksOCArNTM0LDEwIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVy
PFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0
ZXJzOyB9CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3Rh
bnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50
b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KKyAgICBib29sIGlzQ29uc3RhbnRPd25lZEJ5VW5s
aW5rZWRDb2RlQmxvY2soVmlydHVhbFJlZ2lzdGVyKSBjb25zdDsKICAgICBBTFdBWVNfSU5MSU5F
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29u
c3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUg
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihD
b2RlQmxvY2ssIG1fY29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lz
dGVycyk6OmRhdGFNZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdl
dCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rp
b25EZWNscy5zaXplKCk7IH0KQEAgLTU5NSwyMiArNTYyLDIyIEBAIHB1YmxpYzoKICAgICAvLyBK
dW1wIFRhYmxlcwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBTaW1wbGVKdW1wVGFibGUmIHN3aXRj
aEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKKyAgICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5l
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGJh
c2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICB2b2lkKiBi
YXNlbGluZUpJVENvbnN0YW50UG9vbCgpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X2ppdERhdGEpOwotICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNb
dGFibGVJbmRleF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSAmJiBqaXRUeXBl
KCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5t
X2ppdENvbnN0YW50UG9vbC5kYXRhKCk7CiAgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJl
ck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENv
ZGUtPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5k
ZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsgfQogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBTdHJpbmdKdW1wVGFibGUmIHN0cmlu
Z1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG1faml0RGF0YSk7Ci0gICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAgICB9CisjaWYgRU5BQkxFKERGR19KSVQpCisg
ICAgU3RyaW5nSnVtcFRhYmxlJiBkZmdTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5k
ZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgZGZnU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUlu
ZGV4KTsKICNlbmRpZgorCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5r
ZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsg
cmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsgfQogCkBAIC02MzIsMjEgKzU5OSwyMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNo
ZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50
RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAg
ICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNoZWNrSWZUaHJlc2hvbGRDcm9zc2Vk
QW5kU2V0KHRoaXMpOwogICAgIH0KIAogICAgIHZvaWQgZG9udEpJVEFueXRpbWVTb29uKCkKICAg
ICB7Ci0gICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgpOwor
ICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAg
fQogCi0gICAgaW50MzJfdCB0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOwotICAg
IHZvaWQgaml0QWZ0ZXJXYXJtVXAoKTsKICAgICB2b2lkIGppdFNvb24oKTsKKyAgICB2b2lkIGpp
dE5leHRJbnZvY2F0aW9uKCk7CiAKICAgICBjb25zdCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIm
IGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxp
bnRFeGVjdXRlQ291bnRlcjsKKyAgICAgICAgcmV0dXJuICptX2xsaW50RXhlY3V0ZUNvdW50ZXI7
CiAgICAgfQogCiAgICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6dHVwbGU8U3RydWN0dXJlSUQsIHVu
c2lnbmVkPiwgRml4ZWRWZWN0b3I8TExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0Y2hwb2ludE1hcDsKQEAgLTc5Nyw2ICs3NjMsNyBAQCBw
dWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBt
X2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygp
IHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxv
Y2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNp
Z25lZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVk
IG51bUJyZWFrcG9pbnRzKQpAQCAtODM4LDYgKzgwNSw3IEBAIHB1YmxpYzoKICAgICBtdXRhYmxl
IENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwogCiAgICAgYm9vbCBtX3Nob3VsZEFsd2F5c0JlSW5s
aW5lZDsgLy8gTm90IGEgYml0ZmllbGQgYmVjYXVzZSB0aGUgSklUIHdhbnRzIHRvIHN0b3JlIHRv
IGl0LgorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3VsZEFsd2F5c0JlSW5s
aW5lZCk7IH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdW5zaWduZWQgbV9jYXBhYmlsaXR5TGV2
ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCkBAIC04NDcsOCArODE1LDYgQEAg
cHVibGljOgogICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24gOiAxOwogICAgIGJvb2wg
bV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMIDogMTsKIAotICAgIGJvb2wgbV9oYXNMaW5rZWRPU1JF
eGl0IDogMTsKLSAgICBib29sIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlIDogMTsKICAg
ICBib29sIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAKICAg
ICAvLyBJbnRlcm5hbCBtZXRob2RzIGZvciB1c2UgYnkgdmFsaWRhdGlvbiBjb2RlLiBJdCB3b3Vs
ZCBiZSBwcml2YXRlIGlmIGl0IHdhc24ndApAQCAtOTA3LDE2ICs4NzMsMTIgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7IH0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcik7IH0KIAotICAgIGJvb2wg
bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQotICAgIHsKLSAgICAg
ICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBs
b29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3VubGlua2VkQ29kZS0+aXNCdWlsdGlu
RnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enpp
bmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5sb29wSGludHNBcmVFbGln
aWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZp
bmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKICNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgZmlu
YWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOworICAgIHZvaWQgZmluYWxpemVKSVRJbmxp
bmVDYWNoZXMoKTsKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAgIHZvaWQgdGFsbHlG
cmVxdWVudEV4aXRTaXRlcygpOwpAQCAtMTAxMCw3ICs5NzIsOSBAQCBwcml2YXRlOgogICAgIFN0
cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwogICAgIFJl
ZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7CiAjaWYgRU5BQkxFKEpJVCkKK3B1YmxpYzoKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8SklURGF0YT4gbV9qaXREYXRhOworcHJpdmF0ZToKICNlbmRpZgogI2lm
IEVOQUJMRShERkdfSklUKQogICAgIC8vIFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2Rl
IGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRoZSBwcm9maWxlZCBjb2RlIGJsb2NrCkBAIC0xMDI5LDcg
Kzk5Myw3IEBAIHByaXZhdGU6CiAKICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2FsdGVy
bmF0aXZlOwogICAgIAotICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0
ZUNvdW50ZXI7CisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyKiBtX2xsaW50RXhlY3V0ZUNv
dW50ZXIgeyBudWxscHRyIH07CiAKICAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9qaXRF
eGVjdXRlQ291bnRlcjsKICAgICB1aW50MzJfdCBtX29zckV4aXRDb3VudGVyOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShy
ZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSwxMCBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2Rl
U3RydWN0cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUu
aCIKICNpbmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtNDAsOSArNDIsNyBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJv
ZmlsZShjb25zCiAgICAgaWYgKG1fbWV0YWRhdGEpIHsKICNkZWZpbmUgVklTSVQoX19vcCkgXAog
ICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsg
ZnVuYyhtZXRhZGF0YS5tX3Byb2ZpbGUsIGZhbHNlKTsgfSk7Ci0KICAgICAgICAgRk9SX0VBQ0hf
T1BDT0RFX1dJVEhfVkFMVUVfUFJPRklMRShWSVNJVCkKLQogI3VuZGVmIFZJU0lUCiAKICAgICAg
ICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEl0ZXJhdG9yT3Blbj4oWyZdIChhdXRvJiBtZXRhZGF0
YSkgeyAKQEAgLTU3LDcgKzU3LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2Zp
bGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFsc2Up
OwogICAgICAgICB9KTsKICAgICB9ICAgCi0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KQEAgLTk5LDQgKzk4LDM4IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoTExJbnRDYWxsTGlu
a0luZm8KICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoSklUKQorQUxXQVlTX0lOTElORSBjb25zdCBK
SVRDb2RlTWFwJiBDb2RlQmxvY2s6OmppdENvZGVNYXAoKQoreworICAgIEFTU0VSVChqaXRUeXBl
KCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNl
bGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVNYXA7Cit9CisKK0FMV0FZ
U19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5lU3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6
QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPiht
X2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisKK0FM
V0FZU19JTkxJTkUgU3RyaW5nSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5lU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJ
VENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJ
bmRleF07Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShERkdfSklUKQorQUxXQVlTX0lOTElORSBT
aW1wbGVKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUlu
ZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBU
YWJsZSYgQ29kZUJsb2NrOjpkZmdTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgp
Cit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxERkc6OkpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAgcHVibGljOgogICAgIHN0YXRpYyBFeGVjdXRh
YmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwKENvZGVCbG9jayogY29kZUJsb2NrKTsKICAgICAKICAg
ICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcEFuZEFjdGl2YXRlKENvZGVC
bG9jayogY29kZUJsb2NrKTsKKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxv
Y2soKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSwg
bV9jb2RlQmxvY2spOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhl
Y3V0aW9uQ291bnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1OSw3ICsxNTksNyBAQCBib29sIEV4ZWN1dGlvbkNvdW50ZXI8Y291bnRpbmdWYXJp
YW50Pjo6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHRocmVzaG9sZCA9IGNs
aXBwZWRUaHJlc2hvbGQoY29kZUJsb2NrID8gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSA6IG51
bGxwdHIsIHRocmVzaG9sZCk7CisgICAgdGhyZXNob2xkID0gY2xpcHBlZFRocmVzaG9sZCh0aHJl
c2hvbGQpOwogICAgIAogICAgIG1fY291bnRlciA9IHN0YXRpY19jYXN0PGludDMyX3Q+KC10aHJl
c2hvbGQpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRpb25Db3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JjZVNsb3dQYXRoQ29uY3VycmVu
dGx5KCk7IC8vIElmIHlvdSB1c2UgdGhpcywgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQo
KSBtYXkgc3RpbGwgcmV0dXJuIGZhbHNlLgogICAgIGJvb2wgY2hlY2tJZlRocmVzaG9sZENyb3Nz
ZWRBbmRTZXQoQ29kZUJsb2NrKik7CiAgICAgYm9vbCBoYXNDcm9zc2VkVGhyZXNob2xkKCkgY29u
c3QgeyByZXR1cm4gbV9jb3VudGVyID49IDA7IH0KLSAgICB2b2lkIHNldE5ld1RocmVzaG9sZChp
bnQzMl90IHRocmVzaG9sZCwgQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXROZXdUaHJlc2hvbGQo
aW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayogPSBudWxscHRyKTsKICAgICB2b2lkIGRlZmVy
SW5kZWZpbml0ZWx5KCk7CiAgICAgZG91YmxlIGNvdW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291bnQpICsgbV9jb3VudGVyOyB9CiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CkBAIC04NiwxMyArODYsOSBAQCBwdWJsaWM6CiAgICAgfQog
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIFQgY2xpcHBlZFRocmVz
aG9sZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUIHRocmVzaG9sZCkKKyAgICBzdGF0
aWMgVCBjbGlwcGVkVGhyZXNob2xkKFQgdGhyZXNob2xkKQogICAgIHsKLSAgICAgICAgaW50MzJf
dCBtYXhUaHJlc2hvbGQ7Ci0gICAgICAgIGlmIChPcHRpb25zOjpyYW5kb21pemVFeGVjdXRpb25D
b3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKSAmJiBnbG9iYWxPYmplY3QpCi0gICAgICAgICAgICBt
YXhUaHJlc2hvbGQgPSBnbG9iYWxPYmplY3QtPndlYWtSYW5kb21JbnRlZ2VyKCkgJSBtYXhpbXVt
RXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1heFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2tw
b2ludHMoKTsKKyAgICAgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0aW9u
Q291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CiAgICAgICAgIGlmICh0aHJlc2hvbGQgPiBtYXhU
aHJlc2hvbGQpCiAgICAgICAgICAgICB0aHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7CiAgICAgICAg
IHJldHVybiB0aHJlc2hvbGQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZE1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDYgKzQ5LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB7CiBzdGF0aWNf
YXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQpID09IDEyKTsKIAogc3RydWN0
IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCB7CisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9k
ZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmlsZSk7IH0KICAgICBBcnJheVByb2ZpbGUg
YXJyYXlQcm9maWxlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRh
dGFBcnJheUxlbmd0aCkgPT0gMTIpOwpAQCAtODgsNiArODksNyBAQCB1bmlvbiBHZXRCeUlkTW9k
ZU1ldGFkYXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUgbW9kZTsKICAgICAgICAgdWludDhfdCBo
aXRDb3VudEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBtdXN0IGJlIHplcm8gd2hlbiB3ZSB1c2Ug
UHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9k
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhLCBtb2RlKTsg
fQogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0IGRlZmF1bHRNb2RlOwogICAgIEdldEJ5
SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YUFy
cmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9kZTsKQEAgLTExNyw2ICsxMTksNyBAQCBzdHJ1Y3QgR2V0
QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFQcm90b0xvYWQg
cHJvdG9Mb2FkTW9kZTsKICAgICB9OwogICAgIEdldEJ5SWRNb2RlIG1vZGU7CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJ
ZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICB1aW50OF90IGhpdENvdW50Rm9yTExJbnRDYWNo
aW5nOwogfTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyAr
MjE1LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAg
ICByZXR1cm4gR2V0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAogICAgIGNhc2Ug
Q2FjaGVUeXBlOjpHZXRCeUlkU2VsZjogewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUo
cHJvZmlsZWRCbG9jay0+dm0oKSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1Bh
dGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgc3R1YkluZm8pOwogICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTAsNyArMTkwLDcgQEAgdm9pZCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklU
RwogCiAgICAgLy8gTGV0J3Mgc3RvcmUgdGhlIHJldXNlZCByZWdpc3RlcnMgdG8gdGhlIHN0YWNr
LiBBZnRlciB0aGF0LCB3ZSBjYW4gdXNlIGFsbG9jYXRlZCBzY3JhdGNoIHJlZ2lzdGVycy4KICAg
ICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRl
ID0KLSAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7
CisgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQs
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxs
KTsKIAogICAgIGlmIChHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsK
ICAgICAgICAgZGF0YUxvZygiYmFzZUdQUiA9ICIsIGJhc2VHUFIsICJcbiIpOwpAQCAtMjI1LDEy
ICsyMjUsOSBAQCB2b2lkIEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmVtaXRET01KSVRHCiAgICAg
ICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnKTsKICAgICBmb3IgKEZQUlJlZyBy
ZWcgOiBmcFNjcmF0Y2gpCiAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVn
KTsKKyAgICBpZiAoaml0LmNvZGVCbG9jaygpLT51c2VEYXRhSUMoKSkKKyAgICAgICAgcmVnaXN0
ZXJzVG9TcGlsbEZvckNDYWxsLnNldChzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKICAgICByZWdp
c3RlcnNUb1NwaWxsRm9yQ0NhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6cmVnaXN0ZXJzVG9Ob3RT
YXZlRm9yQ0NhbGwoKSk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gaml0LmNvZGVCbG9jaygpOwotICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAg
ICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0j
ZW5kaWYKIAogICAgIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zIHBhcmFtcyhzdGF0ZS5tX3ZtLCBX
VEZNb3ZlKHJlZ3MpLCBXVEZNb3ZlKGdwU2NyYXRjaCksIFdURk1vdmUoZnBTY3JhdGNoKSk7CiAg
ICAgc25pcHBldC0+Z2VuZXJhdG9yKCktPnJ1bihqaXQsIHBhcmFtcyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMw
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBJbkJ5U3RhdHVzIEluQnlTdGF0dXM6OmNv
bXB1dGVGb3JTdHViSW5mCiAgICAgICAgIHJldHVybiBJbkJ5U3RhdHVzKE5vSW5mb3JtYXRpb24p
OwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6IHsKLSAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgp
OworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlKHZtKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aElu
REZHRm9ySW1wdXJlUHJvcGVydHkoKSkKICAgICAgICAgICAgIHJldHVybiBJbkJ5U3RhdHVzKFRh
a2VzU2xvd1BhdGgpOwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBz
dHViSW5mby0+aWRlbnRpZmllcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzYsMTEgKzE3NiwxNiBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGxpbmtDb2RlSW5s
aW5lCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVT
ZWxmUHJvcGVydHlBY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7Cisg
ICAgICAgIC8vIFRoZXNlIGR5bmFtaWMgc2xvdHMgZ2V0IGZpbGxlZCBpbiBieSBTdHJ1Y3R1cmVT
dHViSW5mby4gTm90aGluZyBlbHNlIHRvIGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIAogICAgIEdQUlJlZyBiYXNlID0gc3R1Yklu
Zm8uYmFzZUdQUjsKQEAgLTIzMywyMyArMjM4LDMxIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJv
b2wgaGFzRnJlZVJlZ2lzdGUKICAgICByZXR1cm4gZ2V0U2NyYXRjaFJlZ2lzdGVyKHN0dWJJbmZv
KSAhPSBJbnZhbGlkR1BSUmVnOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVT
ZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5
UmVwbGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFu
dElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2st
PnVzZURhdGFJQygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIGlmIChpc0lubGluZU9m
ZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBoYXNGcmVl
UmVnaXN0ZXIoc3R1YkluZm8pOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxm
UHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQVNTRVJUKGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVw
bGFjZShzdHViSW5mbywgb2Zmc2V0KSk7CisgICAgQVNTRVJUKGNhbkdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBvZmZzZXQpKTsKKworICAgIGlmIChjb2Rl
QmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIFRoZXNlIGR5bmFtaWMgc2xvdHMgZ2V0
IGZpbGxlZCBpbiBieSBTdHJ1Y3R1cmVTdHViSW5mby4gTm90aGluZyBlbHNlIHRvIGRvLgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCkBAIC0y
NzksMjIgKzI5MiwyNSBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlS
CiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpp
c0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJh
eSogYXJyYXkpCitib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBh
cnJheSkKIHsKICAgICBBU1NFUlQoYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CiAK
ICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoIWhhc0ZyZWVSZWdpc3Rl
cihzdHViSW5mbykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhaGFzQW55
QXJyYXlTdG9yYWdlKGFycmF5LT5pbmRleGluZ1R5cGUoKSkgJiYgYXJyYXktPmluZGV4aW5nVHlw
ZSgpICE9IEFycmF5Q2xhc3M7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5
TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCitib29s
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBBU1NF
UlQoaXNDYWNoZWFibGVBcnJheUxlbmd0aChzdHViSW5mbywgYXJyYXkpKTsKKyAgICBBU1NFUlRf
VU5VU0VEKGNvZGVCbG9jaywgaXNDYWNoZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBhcnJheSkpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMxOSwxNyArMzM1LDIwIEBAIGJvb2wgSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKFMKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGlu
ZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0
cmluZ0xlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6QmFzZWxpbmVKSVQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiBoYXNG
cmVlUmVnaXN0ZXIoc3R1YkluZm8pOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVT
dHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorYm9vbCBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgQVNTRVJUKGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3Ro
KHN0dWJJbmZvKSk7CisgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGlzQ2FjaGVhYmxlU3Ry
aW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pKTsKIAogICAgIGlmICghc3R1YkluZm8uaGFz
Q29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNjMsMTMgKzM4
MiwxOCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoCiB9CiAKIAot
Ym9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitib29sIElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTZWxmSW5BY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAg
ICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1Yklu
Zm8uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAg
ICAgR1BSUmVnIGJhc2UgPSBzdHViSW5mby5iYXNlR1BSOwogICAgIEpTVmFsdWVSZWdzIHZhbHVl
ID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAKQEAgLTQwNiwxMyArNDMwLDEzIEBAIHZvaWQgSW5s
aW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICBpZiAoY29kZUJsb2NrLT51c2VE
YXRhSUMoKSkgewogICAgICAgICAvLyBJZiBpdCBpcyBub3QgR2V0QnlJZC1saWtlLXRoaW5nLCB3
ZSBkbyBub3QgZW1pdCBub3Agc2xlZCAoZS5nLiBHZXRCeVZhbCkuCiAgICAgICAgIC8vIFRoZSBj
b2RlIGlzIGFscmVhZHkgYW4gaW5kaXJlY3QganVtcCwgYW5kIG9ubHkgdGhpbmcgd2Ugc2hvdWxk
IGRvIGlzIHJlcGxhY2luZyBtX2NvZGVQdHIuCi0gICAgICAgIGlmIChzdHViSW5mby5oYXNDb25z
dGFudElkZW50aWZpZXIpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJ
VFR5cGU6OkJhc2VsaW5lSklUICYmIHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikgewog
ICAgICAgICAgICAgLy8gSWYgbV9jb2RlUHRyIGlzIHBvaW50aW5nIHRvIHN0dWJJbmZvLnNsb3dQ
YXRoU3RhcnRMb2NhdGlvbiwgdGhpcyBtZWFucyB0aGF0IElubGluZUFjY2VzcyBjb2RlIGlzIG5v
dCBhIHN0dWIgb25lLgogICAgICAgICAgICAgLy8gV2UgcmV3cml0ZSB0aGlzIHdpdGggdGhlIHN0
dWItYmFzZWQgZGlzcGF0Y2hpbmcgY29kZSBvbmNlLCBhbmQgY29udGludWUgdXNpbmcgaXQgdW50
aWwgd2UgcmVzZXQgdGhlIGNvZGUuCiAgICAgICAgICAgICBpZiAoc3R1YkluZm8ubV9jb2RlUHRy
LmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0gc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpIHsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRK
SVRDb2RlT3ZlcihzdHViSW5mby5zdGFydC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBz
Y29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7
CiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cigmc3R1YkluZm8pLCBzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRy
VGFnKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNv
ZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICAgICAgICAgICAgICAgICAgYXV0
byBqdW1wID0gaml0Lmp1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRp
b24gPSBzdHViSW5mby5kb25lTG9jYXRpb247CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRM
aW5rVGFzayhbPV0oTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewpAQCAtNDIxLDcgKzQ0NSw5IEBA
IHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICAgICAgICAgICAg
ICB9KSwgIklubGluZUFjY2VzczogbGlua2luZyBzdHViIGNhbGwiKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQorCiAgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHRhcmdldDsKKyAgICAg
ICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0
IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQz
NCw4ICs0NjAsMTQgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwog
ICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5raW5nIGNvbnN0YW50IGp1bXAiKTsKIH0KIAotdm9p
ZCBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1
bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQogeworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpICYmIGNvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIHN0dWJJbmZvLm1fY29k
ZVB0ciA9IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKyAgICAgICAgc3R1YkluZm8u
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUg
YWNjZXNzIGNvZGUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnM6
OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5mby5zdGFydC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFn
PigpLCBzY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYg
aml0KSB7CiAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ug
bm9ib2R5IHNob3VsZCBiZSBqdW1waW5nIGludG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4KICAgICAg
ICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAt
OTksMTQgKzk5LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KHNpemUsIHNp
emVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0
ZVNlbGZQcm9wZXJ0eUFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3Bl
cnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMgYm9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxh
Y2UoU3RydWN0dXJlU3R1YkluZm8mLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wg
Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJl
KiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5n
dGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNo
ZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBn
ZW5lcmF0ZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOwotICAgIHN0
YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0
dXJlKik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1
YkluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhDb2Rl
QmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsK
KyAgICBzdGF0aWMgYm9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2Nr
KiwgU3RydWN0dXJlU3R1YkluZm8mLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wg
Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZv
JiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGlzQ2FjaGVh
YmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7
CisgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29s
IGdlbmVyYXRlU2VsZkluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3Ry
dWN0dXJlKik7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTdHJpbmdMZW5ndGgoQ29kZUJsb2Nr
KiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIAogICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1
bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKICAgICBzdGF0
aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1
YkluZm8mLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2Rl
TWV0YWRhdGEuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0
MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0VfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0
IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7CiAgICAgdWludDhfdCBzZWVuTW9kZXMgeyAwIH07Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNlZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0YWRhdGEsIHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGlj
X2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc2Vlbk1vZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1v
ZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENh
bGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MTEludENhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
ODcsNiArODcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQ
cm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJbnRDYWxsTGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsg
fQogCiBwcml2YXRlOgogICAgIHVpbnRwdHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRo
TGlua0JpdCB7IHVubGlua2VkQml0IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wY29kZS5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMTcgQEAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heAogICAgIG1hY3JvKE9wSXRlcmF0
b3JPcGVuKSBcCiAgICAgbWFjcm8oT3BJdGVyYXRvck5leHQpIFwKIAorI2RlZmluZSBGT1JfRUFD
SF9PUENPREVfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAorICAgIG1hY3JvKE9w
QWRkKSBcCisgICAgbWFjcm8oT3BNdWwpIFwKKyAgICBtYWNybyhPcERpdikgXAorICAgIG1hY3Jv
KE9wU3ViKSBcCisKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJP
RklMRShtYWNybykgXAorICAgIG1hY3JvKE9wSW5jKSBcCisgICAgbWFjcm8oT3BEZWMpIFwKKyAg
ICBtYWNybyhPcE5lZ2F0ZSkgXAorCiAKIElHTk9SRV9XQVJOSU5HU19CRUdJTigidHlwZS1saW1p
dHMiKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDcgQEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQoKQogewog
ICAgIHJlc3RvcmVTY3JhdGNoKCk7CiAgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJ
QygpKQotICAgICAgICBqaXQtPnJldCgpOworICAgICAgICBqaXQtPmZhckp1bXAoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZEb25lTG9jYXRpb24oKSksIEpTSW50ZXJuYWxQdHJUYWcpOwogICAgIGVsc2UKICAg
ICAgICAgc3VjY2Vzcy5hcHBlbmQoaml0LT5qdW1wKCkpOwogfQpAQCAtMTEwLDYgKzExMCw4IEBA
IGNvbnN0IFJlZ2lzdGVyU2V0JiBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXQtPmNvZGVCbG9jaygpLT5q
aXRUeXBlKCkpKTsKIAogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsID0gUmVnaXN0ZXJT
ZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSwg
YWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJzKCkpOworICAgICAgICBpZiAoaml0LT5jb2RlQmxvY2so
KS0+dXNlRGF0YUlDKCkpCisgICAgICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmFkZChz
dHViSW5mby0+bV9zdHViSW5mb0dQUik7CiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwu
ZXhjbHVkZShjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIH0KICAgICByZXR1cm4gbV9saXZl
UmVnaXN0ZXJzRm9yQ2FsbDsKQEAgLTEyOCwxMSArMTMwLDEyIEBAIGF1dG8gQWNjZXNzR2VuZXJh
dGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmUKICAgICB9OwogfQogCi1hdXRvIEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZTo6cHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0
aW9ucyhjb25zdCBSZWdpc3RlclNldCYgZXh0cmEpIC0+IFNwaWxsU3RhdGUKK2F1dG8gQWNjZXNz
R2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhv
dXRFeGNlcHRpb25zKCkgLT4gU3BpbGxTdGF0ZQogewogICAgIFJlZ2lzdGVyU2V0IGxpdmVSZWdp
c3RlcnMgPSBhbGxvY2F0b3ItPnVzZWRSZWdpc3RlcnMoKTsKKyAgICBpZiAoaml0LT5jb2RlQmxv
Y2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgIGxpdmVSZWdpc3RlcnMuYWRkKHN0dWJJbmZvLT5t
X3N0dWJJbmZvR1BSKTsKICAgICBsaXZlUmVnaXN0ZXJzLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKLSAgICBsaXZlUmVnaXN0ZXJzLm1lcmdlKGV4dHJhKTsKIAogICAgIGNvbnN0ZXhw
ciB1bnNpZ25lZCBleHRyYVN0YWNrUGFkZGluZyA9IDA7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZT
dGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCpqaXQsIGxpdmVSZWdpc3Rl
cnMsIGV4dHJhU3RhY2tQYWRkaW5nKTsKQEAgLTU5NiwxNiArNTk5LDExIEBAIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVC
bG9jayk7CiAgICAgc3RhdGUuaml0ID0gJmppdDsKIAotICAgIGlmIChjb2RlQmxvY2stPnVzZURh
dGFJQygpKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5tX2RvZXNKU0dldHRlclNldHRlckNhbGxzKSB7
Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIG5vIGd1YXJhbnRlZSB0aGF0IHN0YWNrLXBvaW50ZXIg
aXMgdGhlIGV4cGVjdGVkIG9uZS4gVGhpcyBpcyBub3QgYSBwcm9ibGVtIGlmIHdlIGRvIG5vdCBo
YXZlIEpTIGdldHRlciAvIHNldHRlciBjYWxscyBzaW5jZSBzdGFjay1wb2ludGVyIGlzCi0gICAg
ICAgICAgICAvLyBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyIGluIHRoZSBDIGNhbGxpbmcgY29udmVu
c2lvbi4gSG93ZXZlciwgb3VyIEpTIGV4ZWN1dGFibGUgY2FsbCBkb2VzIG5vdCBzYXZlIHN0YWNr
LXBvaW50ZXIuIFNvIHdlIGFyZSBhZGp1c3Rpbmcgc3RhY2stcG9pbnRlciBhZnRlcgotICAgICAg
ICAgICAgLy8gSlMgZ2V0dGVyIC8gc2V0dGVyIGNhbGxzLiBCdXQgdGhpcyBjb3VsZCBiZSBkaWZm
ZXJlbnQgZnJvbSB0aGUgaW5pdGlhbCBzdGFjay1wb2ludGVyLCBhbmQgbWFrZXMgUEFDIHRhZ2dp
bmcgYnJva2VuLgotICAgICAgICAgICAgLy8gVG8gZW5zdXJlIFBBQy10YWdnaW5nIHdvcmssIHdl
IGZpcnN0IGFkanVzdCBzdGFjay1wb2ludGVyIHRvIHRoZSBhcHByb3ByaWF0ZSBvbmUuCi0gICAg
ICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+
c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAg
ICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworICAgIGlmICghY2FuQmVTaGFyZWQgJiYgQVNTRVJU
X0VOQUJMRUQpIHsKKyAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
Mihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqaXQuc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAg
ICBhdXRvIG9rID0gaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBqaXQuc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAg
ICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICBvay5saW5rKCZqaXQpOwogICAgIH0KIAogICAg
IHN0YXRlLnByZXNlcnZlZFJldXNlZFJlZ2lzdGVyU3RhdGUgPQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9u
IDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNyArMjUxLDcgQEAgc3RydWN0IEFjY2Vzc0dl
bmVyYXRpb25TdGF0ZSB7CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGNhbGN1bGF0ZUxpdmVSZWdp
c3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcoKTsKIAogICAgIFNwaWxsU3RhdGUgcHJl
c2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJh
ID0geyB9KTsKLSAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JD
YWxsV2l0aG91dEV4Y2VwdGlvbnMoY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhID0geyB9KTsKKyAg
ICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4
Y2VwdGlvbnMoKTsKIAogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JD
YWxsV2l0aFRocm93bkV4Y2VwdGlvbihjb25zdCBTcGlsbFN0YXRlJik7CiAgICAgdm9pZCByZXN0
b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoY29uc3QgU3BpbGxTdGF0ZSYsIGNvbnN0
IFJlZ2lzdGVyU2V0JiBkb250UmVzdG9yZSA9IHsgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4MCwxMCArMTgwLDEwIEBAIFB1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21w
dXRlRm9yU3R1YkkKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1
YkluZm8tPmlkZW50aWZpZXIoKTsKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlk
ZW50aWZpZXIudWlkKCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHVpZCk7Ci0gICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShwcm9maWxl
ZEJsb2NrLT52bSgpKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVu
dGlmaWVyKSwgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zm
c2V0KTsKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShp
ZGVudGlmaWVyKSwgc3RydWN0dXJlLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gUHV0QnlTdGF0
dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAgICB9CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAogI2luY2x1ZGUgIkNh
Y2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlcGF0
Y2guaCIKIApAQCAtNjUsOSArNjYsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0
QnlJZFNlbGYoCiAgICAgQVNTRVJUKGhhc0NvbnN0YW50SWRlbnRpZmllcik7CiAgICAgc2V0Q2Fj
aGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZik7CiAgICAgbV9pZGVudGlmaWVy
ID0gaWRlbnRpZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91
dFdyaXRlQmFycmllcihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAg
IGNvZGVCbG9jay0+dm0oKS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJ
ZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQog
CiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0QXJyYXlMZW5ndGgoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyQmFzZSYgbG9ja2VyKQpAQCAtODcsOSArODgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjppbml0UHV0QnlJZFJlcGxhCiAgICAgQVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hl
VHlwZTo6VW5zZXQpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6UHV0QnlJ
ZFJlcGxhY2UpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBi
eUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5p
dEluQnlJZFNlbGYoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTk3
LDkgKzk4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEluQnlJZFNlbGYoYwogICAg
IEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KTsKICAgICBzZXRDYWNoZVR5
cGUobG9ja2VyLCBDYWNoZVR5cGU6OkluQnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlk
ZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0
ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2Rl
QmxvY2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxm
Lm9mZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQpAQCAtMjM2LDcgKzIzNyw3IEBAIEFjY2Vzc0dl
bmVyYXRpb25SZXN1bHQgU3RydWN0dXJlU3R1YkluZm8KICAgICAgICAgLy8gd2UncmUgYnVmZmVy
ZWQgaXMgYmVjYXVzZSB3ZSByZWx5IG9uIGl0IHRvIHJlc2V0IGR1cmluZyBHQyBpZiBtX2lubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUKICAgICAgICAgLy8gaXMgY29sbGVjdGVkLgogICAgICAgICBt
X2lkZW50aWZpZXIgPSBudWxscHRyOwotICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmUuY2xlYXIoKTsKKyAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKICAg
ICAgICAgCiAgICAgICAgIC8vIElmIHdlIGdlbmVyYXRlZCBzb21lIGNvZGUgdGhlbiB3ZSBkb24n
dCB3YW50IHRvIGF0dGVtcHQgdG8gcmVwYXRjaCBpbiB0aGUgZnV0dXJlIHVudGlsIHdlCiAgICAg
ICAgIC8vIGdhdGhlciBlbm91Z2ggY2FzZXMuCkBAIC0yNTEsNyArMjUyLDcgQEAgdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogewogICAgIGNsZWFyQnVmZmVyZWRTdHJ1
Y3R1cmVzKCk7CiAgICAgbV9pZGVudGlmaWVyID0gbnVsbHB0cjsKLSAgICBtX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUg
PSAwOwogCiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpCiAgICAgICAg
IHJldHVybjsKQEAgLTI4NSw2ICsyODYsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNl
dChjb25zdCBDb25jCiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlL
aW5kOjpCeUlkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZh
bDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgogICAgICAgICByZXNldFB1
dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKQEAgLTM2MCw4ICszNjIsOCBAQCB2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgfQogCiAgICAgYm9vbCBpc1Zh
bGlkID0gdHJ1ZTsKLSAgICBpZiAobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQotICAgICAg
ICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNNYXJrZWQobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
LmdldCgpKTsKKyAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlKHZtKSkKKyAgICAgICAgaXNWYWxpZCAmPSB2bS5oZWFwLmlzTWFya2VkKHN0cnVj
dHVyZSk7CiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikKICAgICAgICAg
aXNWYWxpZCAmPSB1LnN0dWItPnZpc2l0V2Vhayh2bSk7CiAKQEAgLTM3NSw4ICszNzcsOCBAQCB2
b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaXNpdG9yPgogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMo
VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
KQotICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0
b3IpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUodmlzaXRvci52bSgpKSkKKyAgICAgICAgc3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNp
dG9yKTsKIAogICAgIGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAg
IHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CkBAIC00MzAsNiArNDMyLDIw
NCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNo
ZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRp
YWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvKQoreworICAgIGFjY2Vzc1R5cGUgPSB1
bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZv
LnN0YXJ0OworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9u
OworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhT
dGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2Rl
SW5kZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNldCgpKSk7CisgICAgY29k
ZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsKKyAg
ICBtX2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICB1c2VkUmVnaXN0ZXJz
ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIGlmIChhY2Nl
c3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5ieXRlY29k
ZUluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwgd2Ug
Y2FuJ3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVyUmVnaXN0ZXIiIHJlZ2lzdGVyIGVpdGhlci4K
KyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250
Q2xvYmJlclJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NU
eXBlOjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5j
ZU9mOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1p
emU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRy
eUdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGly
ZWN0OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0
aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhU
aGlzOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
TmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZUJyYW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJy
YW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJp
dmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRl
TmFtZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5
SWQ6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAg
IGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1Yklu
Zm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9w
dGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0
OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkK
KyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxk
RGVmaW5lOgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERl
ZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJ
bmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAg
ICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAg
ICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJ
bmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6Cisg
ICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxkUHV0
S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRp
bWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlm
aWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lz
dGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
RGVsZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAg
ICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVn
cy5wcm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxp
bmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNl
bGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5h
bWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2
YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9z
dHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIGhhc0Nv
bnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBwcm90b3R5cGVJc0tub3duT2JqZWN0
ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6
OnZhbHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
cmVzdWx0OworICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBoYXNDb25zdGFudElk
ZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkluQnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAg
cmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5l
SW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIGhhc0NvbnN0
YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnRoaXNHUFIgPSBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhhc0Nv
bnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRH
UFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7
CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAg
ICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlm
aWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6
UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJh
bmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICB2YWx1
ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2VsaW5lUHJp
dmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmNoZWNr
Q29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlICJQdXRL
aW5kLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKQEAgLTU2LDYgKzU3LDcgQEAgZW51bSBjbGFzcyBB
Y2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRCeVZhbCwKICAgICBQdXRCeUlkLAogICAgIFB1
dEJ5VmFsLAorICAgIFB1dFByaXZhdGVOYW1lLAogICAgIEluQnlJZCwKICAgICBJbkJ5VmFsLAog
ICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtNzgsNiArODAsOCBAQCBlbnVtIGNsYXNzIENhY2hlVHlw
ZSA6IGludDhfdCB7CiAgICAgU3RyaW5nTGVuZ3RoCiB9OwogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbzsKKwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZvKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKQEAgLTk4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlcmVmKCk7CiAgICAg
dm9pZCBhYm91dFRvRGllKCk7CiAKKyAgICB2b2lkIGluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJik7CisK
ICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHVi
IGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCBy
ZXNldHMgaXRzZWxmLApAQCAtMzI1LDEzICszMzEsMTkgQEAgcHJpdmF0ZToKIAogcHVibGljOgog
ICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKKyAgICBQcm9wZXJ0eU9mZnNldCBieUlkU2VsZk9m
ZnNldDsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIGJ5SWRTZWxmT2Zmc2V0KTsg
fQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBtX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUpOyB9CiAgICAgdW5pb24gewotICAgICAgICBzdHJ1Y3QgewotICAg
ICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgICAgICB9IGJ5SWRTZWxmOwogICAg
ICAgICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsKICAgICB9IHU7Ci0gICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlOworICAgIFN0cnVjdHVyZSog
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShWTSYgdm0pCisgICAgeworICAgICAgICBpZiAoIW1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gdm0uZ2V0U3RydWN0dXJlKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZSk7CisgICAgfQorICAgIFN0cnVjdHVyZUlEIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSB7
IDAgfTsKIHByaXZhdGU6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAg
ICAgLy8gUmVwcmVzZW50cyB0aG9zZSBzdHJ1Y3R1cmVzIHRoYXQgYWxyZWFkeSBoYXZlIGJ1ZmZl
cmVkIEFjY2Vzc0Nhc2VzIGluIHRoZSBQb2x5bW9ycGhpY0FjY2Vzcy4KQEAgLTM1Miw2ICszNjQs
NyBAQCBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiBtX2NvZGVQdHI7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZVB0cigp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgbV9jb2RlUHRyKTsg
fQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEb25lTG9jYXRpb24oKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIGRvbmVMb2NhdGlvbik7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2xvd1BhdGhTdGFydExvY2F0aW9uKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBzbG93UGF0aFN0YXJ0TG9jYXRpb24p
OyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1fc2xvd09wZXJhdGlvbik7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ291bnRkb3duKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBjb3VudGRvd24pOyB9CkBAIC00NDcsNiArNDYw
LDE3IEBAIGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW4KICAgICB9CiB9
CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVGaWVsZFB1dEtpbmQg
cHJpdmF0ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSB9OworICAg
IEVDTUFNb2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgpIH07CisgICAgQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5l
UHRyVGFnPiBzdGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUg
SUMgZm9yICpieUlkIGNhY2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZv
ciAnaW5zdGFuY2VvZicgY2FjaGVzLgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQ
dHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4gc2xvd1BhdGhTdGFydExvY2F0aW9uOworfTsKKwogI2Vsc2UKIAogY2xhc3MgU3Ry
dWN0dXJlU3R1YkluZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Vw
ZXJTYW1wbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3VwZXJTYW1wbGVyLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcg
Kzg0LDcgQEAgdm9pZCBwcmludFN1cGVyU2FtcGxlclN0YXRlKCkKICAgICBkb3VibGUgcGVyY2Vu
dGFnZSA9IDEwMC4wICogaW4gLyAoaW4gKyBvdXQpOwogICAgIGlmIChwZXJjZW50YWdlICE9IHBl
cmNlbnRhZ2UpCiAgICAgICAgIHBlcmNlbnRhZ2UgPSAwLjA7Ci0gICAgZGF0YUxvZygiUGVyY2Vu
dCB0aW1lIGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNlbnRhZ2UsICJcbiIpOwor
ICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBw
ZXJjZW50YWdlLCAiJVxuIik7CiB9CiAKIHZvaWQgZW5hYmxlU3VwZXJTYW1wbGVyKCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKIAorI2luY2x1ZGUgIkJhc2VsaW5l
SklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgpAQCAtNzgsNiAr
NzksOCBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0mCiAgICAgICAg
IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkobG9ja2VyKTsKICAgICAgICAgbV9yYXJlRGF0YS0+
bV9wcml2YXRlQnJhbmRSZXF1aXJlbWVudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcml2YXRl
QnJhbmRSZXF1aXJlbWVudDo6TmVlZGVkKTsKICAgICB9CisKKyAgICBtX2xsaW50RXhlY3V0ZUNv
dW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRG
b3JKSVRBZnRlcldhcm1VcCgpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CkBA
IC0zMTYsNiArMzE5LDQ4IEBAIGludCBVbmxpbmtlZENvZGVCbG9jazo6b3V0T2ZMaW5lSnVtcE9m
ZnMKICAgICByZXR1cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5nZXQoYnl0ZWNvZGVPZmZzZXQp
OwogfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKK2Jvb2wgVW5saW5rZWRDb2RlQmxvY2s6Omhhc0lk
ZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBpZiAobnVtYmVyT2ZJZGVu
dGlmaWVycygpID4gMTAwKSB7CisgICAgICAgIGlmIChudW1iZXJPZklkZW50aWZpZXJzKCkgIT0g
bV9jYWNoZWRJZGVudGlmaWVyVWlkcy5zaXplKCkpIHsKKyAgICAgICAgICAgIExvY2tlciBsb2Nr
ZXIobV9jYWNoZWRJZGVudGlmaWVyVWlkc0xvY2spOworICAgICAgICAgICAgSGFzaFNldDxVbmlx
dWVkU3RyaW5nSW1wbCo+IGNhY2hlZElkZW50aWZpZXJVaWRzOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7CisgICAgICAg
ICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciA9IHRoaXMtPmlkZW50aWZpZXIo
aSk7CisgICAgICAgICAgICAgICAgY2FjaGVkSWRlbnRpZmllclVpZHMuYWRkKGlkZW50aWZpZXIu
aW1wbCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKKyAgICAgICAgICAgIG1fY2FjaGVkSWRlbnRpZmllclVpZHMgPSBXVEZNb3ZlKGNhY2hl
ZElkZW50aWZpZXJVaWRzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX2NhY2hlZElk
ZW50aWZpZXJVaWRzLmNvbnRhaW5zKHVpZCk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7CisgICAgICAgIGlmIChpZGVu
dGlmaWVyKGkpLmltcGwoKSA9PSB1aWQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK2ludDMyX3QgVW5saW5rZWRDb2RlQmxv
Y2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKK3sKKyAgICBzd2l0Y2ggKGRp
ZE9wdGltaXplKCkpIHsKKyAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgorICAgICAg
ICByZXR1cm4gdGhyZXNob2xkOworICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgorICAgICAgICBy
ZXR1cm4gdGhyZXNob2xkICogNDsKKyAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgorICAgICAgICBy
ZXR1cm4gdGhyZXNob2xkIC8gMjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIHRocmVzaG9sZDsKK30KKworCiB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjphbGxv
Y2F0ZVNoYXJlZFByb2ZpbGVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9tZXRhZGF0YS0+
aXNGaW5hbGl6ZWQoKSk7CkBAIC0zMzcsMTUgKzM4MiwyNSBAQCB2b2lkIFVubGlua2VkQ29kZUJs
b2NrOjphbGxvY2F0ZVNoYXJlZFByCiAgICAgaWYgKG1fbWV0YWRhdGEtPmhhc01ldGFkYXRhKCkp
IHsKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheVByb2ZpbGVzID0gMDsKIAotI2RlZmlu
ZSBDT1VOVChfX29wKSBcCi0gICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFk
YXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CisjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQXJy
YXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CiAgICAgICAgIEZP
Ul9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ09VTlQpCiAgICAgICAgIEZPUl9FQUNI
X09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENPVU5UKQogI3VuZGVmIENPVU5UCiAg
ICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9w
SXRlcmF0b3JOZXh0PigpOwogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRh
ZGF0YS0+bnVtRW50cmllczxPcEdldEJ5SWQ+KCk7Ci0KICAgICAgICAgbV9hcnJheVByb2ZpbGVz
ID0gRml4ZWRWZWN0b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+KG51bWJlck9mQXJyYXlQcm9maWxl
cyk7CisKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCaW5hcnlBcml0aFByb2ZpbGVzID0gMDsK
KyNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZCaW5hcnlBcml0aFByb2ZpbGVzICs9IG1fbWV0
YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhf
QklOQVJZX0FSSVRIX1BST0ZJTEUoQ09VTlQpCisjdW5kZWYgQ09VTlQKKyAgICAgICAgbV9iaW5h
cnlBcml0aFByb2ZpbGVzID0gRml4ZWRWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPihudW1iZXJP
ZkJpbmFyeUFyaXRoUHJvZmlsZXMpOworCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mVW5hcnlB
cml0aFByb2ZpbGVzID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZVbmFyeUFyaXRo
UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOworICAgICAgICBGT1Jf
RUFDSF9PUENPREVfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKENPVU5UKQorI3VuZGVmIENPVU5U
CisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzID0gRml4ZWRWZWN0b3I8VW5hcnlBcml0aFBy
b2ZpbGU+KG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzKTsKICAgICB9CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
CShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDEyIEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQXJyYXlQ
cm9maWxlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkNv
ZGVUeXBlLmgiCiAjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKKyNpbmNsdWRlICJFeGVjdXRp
b25Db3VudGVyLmgiCiAjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgogI2luY2x1ZGUg
IkhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgpAQCAtNjQsNiArNjYsNyBA
QCBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogc3RydWN0IEV4ZWN1dGFi
bGVJbmZvOwogZW51bSBjbGFzcyBMaW5rVGltZUNvbnN0YW50IDogaW50MzJfdDsKIApAQCAtMTc1
LDYgKzE3OCw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmll
cjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lz
dGVyczsgfQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJz
W3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNv
bnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25zdGFudFJl
Z2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQogICAgIGNvbnN0
IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uOyB9CiAKQEAgLTIwNyw2ICsyMTEsMTUgQEAgcHVibGljOgogICAgIEpTUGFyc2VyU2Ny
aXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJT
Y3JpcHRNb2RlPihtX3NjcmlwdE1vZGUpOyB9CiAKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3Q7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uQXQoQnl0ZWNvZGVJbmRleCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCku
YXQoaW5kZXgpLnB0cigpOyB9CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1
Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5hdCgwKS5wdHIoKTsKKyAgICAgICAgY29uc3Qg
YXV0byogaW5zdHJ1Y3Rpb25zRW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlv
bio+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbnN0cnVjdGlvbnNCZWdpbikgKyBpbnN0
cnVjdGlvbnMoKS5zaXplKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0cnVjdGlvbiA+
PSBpbnN0cnVjdGlvbnNCZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGluc3RydWN0aW9uc0VuZCk7Cisg
ICAgICAgIHJldHVybiBpbnN0cnVjdGlvbiAtIGluc3RydWN0aW9uc0JlZ2luOworICAgIH0KKyAg
ICB1bnNpZ25lZCBpbnN0cnVjdGlvbnNTaXplKCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJl
dHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7
IHJldHVybiBtX251bVZhcnM7IH0KQEAgLTMzNCwxMCArMzQ3LDIxIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fbWV0YWRhdGEtPnNpemVJbkJ5dGVzKCk7CiAgICAgfQogCisgICAgYm9vbCBs
b29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCisgICAgeworICAgICAg
ICAvLyBTb21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxv
b3BzIHRoZXkgcnVuLgorICAgICAgICByZXR1cm4gIWlzQnVpbHRpbkZ1bmN0aW9uKCk7CisgICAg
fQogICAgIHZvaWQgYWxsb2NhdGVTaGFyZWRQcm9maWxlcygpOwogICAgIFVubGlua2VkVmFsdWVQ
cm9maWxlJiB1bmxpbmtlZFZhbHVlUHJvZmlsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92
YWx1ZVByb2ZpbGVzW2luZGV4XTsgfQogICAgIFVubGlua2VkQXJyYXlQcm9maWxlJiB1bmxpbmtl
ZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVzW2lu
ZGV4XTsgfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29sIGhhc0lkZW50aWZpZXIoVW5p
cXVlZFN0cmluZ0ltcGwqKTsKKyNlbmRpZgorCisgICAgaW50MzJfdCB0aHJlc2hvbGRGb3JKSVQo
aW50MzJfdCB0aHJlc2hvbGQpOworCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2RlQmxvY2so
Vk0mLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mLCBPcHRpb25T
ZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPik7CiAKQEAgLTM5Nyw2ICs0MjEsNyBAQCBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1fbGV4aWNhbFNjb3BlRmVhdHVyZXMgOiA0OwogcHVibGljOgogICAgIENv
bmN1cnJlbnRKU0xvY2sgbV9sb2NrOworICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1fdW5s
aW5rZWRCYXNlbGluZUNvZGU7CiBwcml2YXRlOgogICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVz
IHsgMCB9OwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKQEAgLTQxMyw3ICs0Mzgs
NiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4gbV9p
bnN0cnVjdGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cz4gbV9saXZlbmVzczsKIAotCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpFeGl0UHJv
ZmlsZSBtX2V4aXRQcm9maWxlOwogI2VuZGlmCkBAIC00NTgsNiArNDgyLDE2IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uLm9m
ZnNldCgpKTsKICAgICB9CisgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29uc3QgSW5zdHJ1
Y3Rpb24qIHBjKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSB0aGlz
LT5ieXRlY29kZU9mZnNldChwYyk7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0
KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICB9CisKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUmIGJpbmFy
eUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX2JpbmFyeUFyaXRoUHJvZmlsZXNb
aV07IH0KKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgdW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQg
aSkgeyByZXR1cm4gbV91bmFyeUFyaXRoUHJvZmlsZXNbaV07IH0KKworICAgIEJhc2VsaW5lRXhl
Y3V0aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIHsgcmV0dXJuIG1fbGxpbnRFeGVj
dXRlQ291bnRlcjsgfQogCiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRz
ID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwpAQCAtNDY1LDggKzQ5
OSwxNiBAQCBwcml2YXRlOgogICAgIE91dE9mTGluZUp1bXBUYXJnZXRzIG1fb3V0T2ZMaW5lSnVt
cFRhcmdldHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOwogICAg
IEZpeGVkVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVzc2lvbkluZm87CisgICAg
QmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKICAgICBGaXhl
ZFZlY3RvcjxVbmxpbmtlZFZhbHVlUHJvZmlsZT4gbV92YWx1ZVByb2ZpbGVzOwogICAgIEZpeGVk
VmVjdG9yPFVubGlua2VkQXJyYXlQcm9maWxlPiBtX2FycmF5UHJvZmlsZXM7CisgICAgRml4ZWRW
ZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPiBtX2JpbmFyeUFyaXRoUHJvZmlsZXM7CisgICAgRml4
ZWRWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+IG1fdW5hcnlBcml0aFByb2ZpbGVzOworCisjaWYg
QVNTRVJUX0VOQUJMRUQKKyAgICBMb2NrIG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrOworICAg
IEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBtX2NhY2hlZElkZW50aWZpZXJVaWRzOworI2Vu
ZGlmCiAKIHByb3RlY3RlZDoKICAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRh
VGFibGUuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwx
NSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVubGlua2VkTWV0YWRh
dGFUYWJsZSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZT4KKyAgICB1
aW50cHRyX3Qgb2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGNvbnN0IE9wY29kZSYgb3Bjb2RlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1faXNGaW5hbGl6ZWQpOworICAgICAgICB1aW50cHRyX3QgYmFz
ZVR5cGVPZmZzZXQgPSBtX2lzMzJCaXQgPyBvZmZzZXRUYWJsZTMyKClbT3Bjb2RlOjpvcGNvZGVJ
RF0gOiBvZmZzZXRUYWJsZTE2KClbT3Bjb2RlOjpvcGNvZGVJRF07CisgICAgICAgIGJhc2VUeXBl
T2Zmc2V0ID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm9mKHR5cGVuYW1lIE9wY29kZTo6TWV0
YWRhdGEpLCBiYXNlVHlwZU9mZnNldCk7CisgICAgICAgIHJldHVybiBiYXNlVHlwZU9mZnNldCAr
IHNpemVvZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSAqIG9wY29kZS5tX21ldGFkYXRhSUQ7
CisgICAgfQorCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgogICAgIHVuc2lnbmVk
IG51bUVudHJpZXMoKTsKIApAQCAtMTA3LDYgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBzX29mZnNldDE2VGFibGVTaXplOwogICAgIH0KIAorCiAgICAgdXNpbmcgT2Zmc2V0MzIg
PSB1aW50MzJfdDsKICAgICB1c2luZyBPZmZzZXQxNiA9IHVpbnQxNl90OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiAy
ODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDEzICs0NSwxMSBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFz
ZSB7CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mQnVja2V0cyA9IG51
bWJlck9mQnVja2V0c0FyZ3VtZW50OwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVt
YmVyT2ZTcGVjRmFpbEJ1Y2tldHMgPSAxOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
YnVja2V0SW5kZXhNYXNrID0gbnVtYmVyT2ZCdWNrZXRzIC0gMTsKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRzICsgbnVt
YmVyT2ZTcGVjRmFpbEJ1Y2tldHM7CiAgICAgCiAgICAgVmFsdWVQcm9maWxlQmFzZSgpCiAgICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7
ICsraSkKLSAgICAgICAgICAgIG1fYnVja2V0c1tpXSA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOworICAgICAgICBjbGVhckJ1Y2tldHMoKTsKICAgICB9CiAgICAgCiAgICAgRW5jb2RlZEpT
VmFsdWUqIHNwZWNGYWlsQnVja2V0KHVuc2lnbmVkIGkpCkBAIC01OSw2ICs1NywxMiBAQCBzdHJ1
Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIEFTU0VSVChudW1iZXJPZkJ1Y2tldHMgKyBp
IDwgdG90YWxOdW1iZXJPZkJ1Y2tldHMpOwogICAgICAgICByZXR1cm4gbV9idWNrZXRzICsgbnVt
YmVyT2ZCdWNrZXRzICsgaTsKICAgICB9CisKKyAgICB2b2lkIGNsZWFyQnVja2V0cygpCisgICAg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZkJ1Y2tldHM7
ICsraSkKKyAgICAgICAgICAgIG1fYnVja2V0c1tpXSA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOworICAgIH0KICAgICAKICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyh1bnNpZ25l
ZCBidWNrZXQpIGNvbnN0CiAgICAgewpAQCAtMTIzLDggKzEyNyw2IEBAIHN0cnVjdCBWYWx1ZVBy
b2ZpbGVCYXNlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBw
cmVkaWN0aW9uIGFuZCByZXR1cm5zIHRoZSBuZXcgb25lLiBOZXZlciBjYWxsIHRoaXMgZnJvbSBh
bnkgdGhyZWFkCi0gICAgLy8gdGhhdCBpc24ndCBleGVjdXRpbmcgdGhlIGNvZGUuCiAgICAgU3Bl
Y3VsYXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1i
ZXJPZkJ1Y2tldHM7ICsraSkgewpAQCAtMTM5LDcgKzE0MSw3IEBAIHN0cnVjdCBWYWx1ZVByb2Zp
bGVCYXNlIHsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb247CiAgICAgfQot
ICAgIAorCiAgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNrZXRzW3RvdGFsTnVtYmVyT2ZCdWNrZXRz
XTsKIAogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbiB7IFNwZWNOb25lIH07CkBAIC0x
NjEsNiArMTYzLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldAog
CiBzdHJ1Y3QgVmFsdWVQcm9maWxlIDogcHVibGljIFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJP
ZkJ1Y2tldHM8MD4gewogICAgIFZhbHVlUHJvZmlsZSgpIDogVmFsdWVQcm9maWxlV2l0aExvZ051
bWJlck9mQnVja2V0czwwPigpIHsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJz
dEJ1Y2tldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0
c1swXSk7IH0KIH07CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIgOiBw
dWJsaWMgVmFsdWVQcm9maWxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCIKICNpbmNsdWRlICJERkdBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCIKQEAgLTM0LDcgKzM1LDkgQEAKICNpbmNsdWRlICJE
RkdKdW1wUmVwbGFjZW1lbnQuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUg
IklubGluZUNhbGxGcmFtZVNldC5oIgorI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUg
IkpTQ2FzdC5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiUHJv
ZmlsZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIlJlY29yZGVkU3RhdHVzZXMuaCIKICNpbmNs
dWRlIDx3dGYvQmFnLmg+CkBAIC03MCw3ICs3Myw3IEBAIHN0cnVjdCBXZWFrUmVmZXJlbmNlVHJh
bnNpdGlvbiB7CiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV90bzsKIH07CiAgICAgICAgIAot
Y2xhc3MgQ29tbW9uRGF0YSB7CitjbGFzcyBDb21tb25EYXRhIDogcHVibGljIE1hdGhJQ0hvbGRl
ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CiBwdWJsaWM6CiAgICAg
Q29tbW9uRGF0YSgpCkBAIC0xMTYsNiArMTE5LDcgQEAgcHVibGljOgogICAgIEZpeGVkVmVjdG9y
PENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludD4gbV93YXRjaHBvaW50czsKICAgICBGaXhl
ZFZlY3RvcjxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50czsKICAgICBGaXhlZFZlY3RvcjxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1
ZVdhdGNocG9pbnQ+IG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50czsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5N
YXA7CiAgICAgUmVjb3JkZWRTdGF0dXNlcyByZWNvcmRlZFN0YXR1c2VzOwogICAgIFZlY3RvcjxK
dW1wUmVwbGFjZW1lbnQ+IG1fanVtcFJlcGxhY2VtZW50czsKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb2RlLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKIAorc3RydWN0IFNpbXBsZUp1bXBUYWJs
ZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKIG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBK
SVRDb21waWxlcjsKQEAgLTEwMSw2ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25h
bDxDb2RlT3JpZ2luPiBmaW5kUEMoQ29kZUJsb2NrKiwgdm9pZCogcGMpIGZpbmFsOwogCiAgICAg
dXNpbmcgRGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWZGb3JERkc7CisKKyAgICBQQ1Rv
Q29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBjb21t
b24ubV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgSklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENvbXBpbGVyIHRvIGNhbGwgc2V0Q29k
ZVJlZigpLgpAQCAtMTQwLDYgKzE0NSw4IEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPEJ5dGVjb2Rl
SW5kZXgsIFRyaWdnZXJSZWFzb24+IHRpZXJVcEVudHJ5VHJpZ2dlcnM7CiAKICAgICBXcml0ZUJh
cnJpZXI8Q29kZUJsb2NrPiBtX29zckVudHJ5QmxvY2s7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxl
SnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVt
cFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgdW5zaWduZWQgb3NyRW50cnlS
ZXRyeTsKICAgICBib29sIGFiYW5kb25PU1JFbnRyeTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
CShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDEzICsxODUsMTIgQEAgdm9pZCBKSVRD
b21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIAogICAgIG1fZ3JhcGgucmVnaXN0
ZXJGcm96ZW5WYWx1ZXMoKTsKIAotICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXMuaXNFbXB0eSgpIHx8ICFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2Nr
KTsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXMpOwotICAgICAgICBpZiAoIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0
Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7Ci0gICAg
fQorICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5
KCkpOworICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkp
OworICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKSAK
KyAgICAgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1f
Z3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBpZiAoIW1fZ3JhcGgubV9zd2l0
Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBU
YWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKIAogICAgIGZvciAo
QmFnPFN3aXRjaERhdGE+OjppdGVyYXRvciBpdGVyID0gbV9ncmFwaC5tX3N3aXRjaERhdGEuYmVn
aW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKICAgICAgICAgU3dpdGNoRGF0YSYgZGF0YSA9ICoqaXRl
cjsKQEAgLTE5OSwxMiArMTk4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZl
ciYgbGlua0IKICAgICAgICAgY2FzZSBTd2l0Y2hDaGFyOgogICAgICAgICBjYXNlIFN3aXRjaElt
bTogewogICAgICAgICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkgewotICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFi
bGVJbmRleCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlLT5t
X3N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XS5pc0VtcHR5KCkpOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25z
dCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgICAgIFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxl
KGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJs
ZUluZGV4XTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91
Z2guYmxvY2stPmluZGV4XSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJs
ZS5tX2N0aU9mZnNldHMuc2l6ZSgpID09IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNp
emUoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsaW5rZWRUYWJsZS5tX2N0aU9m
ZnNldHMuc2l6ZSgpOyBqLS07KQpAQCAtMjE5LDEyICsyMTgsMTIgQEAgdm9pZCBKSVRDb21waWxl
cjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogCiAgICAgICAgIGNhc2UgU3dpdGNoU3RyaW5nOiB7
CiAgICAgICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hU
YWJsZUluZGV4KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGUt
Pm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlzRW1wdHko
KSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFw
aC51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwot
ICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5z
dHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgICAg
IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlE
ZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVh
ZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCkgPT0gdW5saW5rZWRUYWJsZS5t
X29mZnNldFRhYmxlLnNpemUoKSArIDEpOwogICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6
IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cykKQEAgLTMzMyw3ICszMzIsNyBAQCB2b2lkIEpJVENv
bXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQotICAgICAgICBtX2NvZGVCbG9j
ay0+c2V0UENUb0NvZGVPcmlnaW5NYXAobWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RG
TW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpKTsKKyAgICAgICAg
bV9qaXRDb2RlLT5jb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0Nv
ZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBsaW5rQnVm
ZmVyKTsKIH0KIAogc3RhdGljIHZvaWQgZW1pdFN0YWNrT3ZlcmZsb3dDaGVjayhKSVRDb21waWxl
ciYgaml0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHN0YWNrT3ZlcmZsb3cpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjgzMDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk3LDcgKzk3LDYgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KFZNJiB2bSwgQ2Fs
bEZyYW1lKgogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5q
aXRUeXBlKCkpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBB
U1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpOwotICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogICAgIEFT
U0VSVChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzU3RpbGxWYWxpZCk7CiAK
ICAgICBpZiAoIU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9ERkcoKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcy
LDkgKzc3Miw2IEBAIHZvaWQgT1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiAKICAg
ICAvLyBUaGUgdGFnIHJlZ2lzdGVycyBhcmUgbmVlZGVkIHRvIG1hdGVyaWFsaXplIHJlY292ZXJp
ZXMgYmVsb3cuCiAgICAgaml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CiAK
LSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwot
CiAgICAgaWYgKGlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KSB7CiAgICAgICAg
IEVuY29kZWRKU1ZhbHVlKiB0bXBTY3JhdGNoID0gc2NyYXRjaCArIG9wZXJhbmRzLnRtcEluZGV4
KDApOwogICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uTWF0ZXJp
YWxpemVPU1JFeGl0U2lkZVN0YXRlKT4oJnZtLCAmZXhpdCwgdG1wU2NyYXRjaCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5l
cy5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiSklULmgiCkBAIC0xMTksMTAgKzEyMCwxMCBAQCB2b2lkIGhhbmRsZUV4aXRD
b3VudHMoVk0mIHZtLCBDQ2FsbEhlbHBlCiAgICAgaW50MzJfdCBjbGlwcGVkVmFsdWU7CiAgICAg
c3dpdGNoIChqaXQuY29kZUJsb2NrKCktPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklUVHlwZTo6
REZHSklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6
OmNsaXBwZWRUaHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKSwgdGFyZ2V0
VmFsdWUpOworICAgICAgICBjbGlwcGVkVmFsdWUgPSBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6
OmNsaXBwZWRUaHJlc2hvbGQodGFyZ2V0VmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEpJVFR5cGU6OkZUTEpJVDoKLSAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0
aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVj
dCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9IFVwcGVyVGllckV4ZWN1
dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQodGFyZ2V0VmFsdWUpOwogICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtMTQyLDExICsxNDMsOCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUCiB7CiAgICAgY2FsbGVySXNMTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQo
KSB8fCBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aml0VHlwZSgpID09IEpJVFR5cGU6Oklu
dGVycHJldGVyVGh1bms7CiAKLSAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgp
KSB7Ci0gICAgICAgIGlmICghY2FsbGVySXNMTEludCkKLSAgICAgICAgICAgIGJhc2VsaW5lQ29k
ZUJsb2NrRm9yQ2FsbGVyLT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOworICAgIGlmIChjYWxs
Qnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCiAgICAgICAgIHJldHVybiBMTEludDo6Y2hlY2tw
b2ludE9TUkV4aXRGcm9tSW5saW5lZENhbGxUcmFtcG9saW5lVGh1bmsoKS5jb2RlKCk7Ci0gICAg
fQogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGp1bXBUYXJnZXQ7
CiAKQEAgLTE5OCw4ICsxOTYsNiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUCiAjdW5kZWYgTExJTlRfUkVUVVJOX0xPQ0FUSU9OCiAKICAgICB9IGVsc2UgewotICAg
ICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1
ZTsKLQogICAgICAgICBzd2l0Y2ggKHRydWVDYWxsZXJDYWxsS2luZCkgewogICAgICAgICBjYXNl
IElubGluZUNhbGxGcmFtZTo6Q2FsbDoKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNv
bnN0cnVjdDoKQEAgLTMxMyw2ICszMDksMTAgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVz
KENDYWxsSGVscGVycwogICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CiAgICAgICAg
ICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29k
ZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVD
YWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRh
YmxlR1BSKSk7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5pbnN0cnVjdGlvbnNSYXdQb2ludGVy
KCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBM
TEludDo6UmVnaXN0ZXJzOjpwYkdQUikpOworICAgICAgICB9IGVsc2UgaWYgKHRydWVDYWxsZXIp
IHsKKyAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBq
aXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOworICAgICAgICAgICAgaml0LnN0
b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNh
bGxlci0+bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBi
YXNlbGluZUNvZGVCbG9jaywgSklUOjpzX21ldGFkYXRhR1BSKSk7CisgICAgICAgICAgICBqaXQu
c3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9y
Q2FsbGVyLT5iYXNlbGluZUpJVENvbnN0YW50UG9vbCgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5l
Q2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgSklUOjpzX2NvbnN0YW50c0dQUikpOwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQpAQCAt
NDA0LDcgKzQwNCw4IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwK
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSksIExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKTsKICAgICAgICAganVtcFRhcmdl
dCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb2RlQmxvY2tGb3JFeGl0LT5tX2hhc0xpbmtl
ZE9TUkV4aXQgPSB0cnVlOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRhdGFUYWJsZSgpKSwgSklUOjpzX21ldGFkYXRh
R1BSKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVC
bG9ja0ZvckV4aXQtPmJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkpLCBKSVQ6OnNfY29uc3RhbnRz
R1BSKTsKIAogICAgICAgICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IGRlc3RpbmF0aW9uOwpAQCAtNDIwLDEyICs0MjEsMTYgQEAgdm9pZCBhZGp1c3RB
bmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGlu
YXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAg
IH0KIAotICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpz
dGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7CisgICAg
ICAgIEFTU0VSVCghUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpLmNvbnRhaW5z
KExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSk7CisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lLCBBc3NlbWJseUhl
bHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpKTsKKwogICAg
ICAgICAvLyBTaW5jZSB3ZSdyZSBqdW1waW5nIHRvIG9wX2NhdGNoLCB3ZSBuZWVkIHRvIHNldCBj
YWxsRnJhbWVGb3JDYXRjaC4KICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCB2bS5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgpKTsKICAgICB9Ci0gICAg
CisKKyAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpJVDo6c3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9ja0ZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVyKSks
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKwogICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0
cihqdW1wVGFyZ2V0KSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIGppdC5mYXJKdW1wKEdQUkluZm86
OnJlZ1QyLCBPU1JFeGl0UHRyVGFnKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQ2xvbmVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAi
Q29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1
ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKQEAgLTI4NjksNyArMjg3
MCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25GaW5kU3cKICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0
aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBT
aW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNv
ZGVCbG9jay0+ZGZnU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBBU1NFUlQodmFsdWUuaXNE
b3VibGUoKSk7CiAgICAgZG91YmxlIGFzRG91YmxlID0gdmFsdWUuYXNEb3VibGUoKTsKQEAgLTI4
OTAsNyArMjg5MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gK
IAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgbnVsbHB0cik7CiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFN0
cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gY29kZUJsb2NrLT5kZmdTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAg
cmV0dXJuIGxpbmtlZFRhYmxlLmN0aUZvclZhbHVlKCp1bmxpbmtlZFRhYmxlLCBzdHJJbXBsKS5l
eGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAy
ODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzAsNiArNzMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVl
ID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZVRhZ0dQUiwgY2FsbGVlUGF5bG9hZEdQUik7
CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsK
ICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOwor
ICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygp
LT5udW1QYXJhbWV0ZXJzKCk7CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBt
X2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTg4OSw3ICs4OTAsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAKICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNs
b3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVQYXlsb2Fk
R1BSLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7Cisg
ICAgICAgIHNsb3dDYXNlcyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxs
ZWVQYXlsb2FkR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENh
bGwpIHsKICAgICAgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVE
YXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURh
dGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MjgsNiArODI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwo
Tm9kZSogbm9kZQogICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVy
eTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgc2h1ZmZsZURh
dGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0
YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVEYXRh
Lm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2Vk
QXJnczsgKytpKSB7CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgo
KS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CkBAIC05NzksNyArOTgwLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2Vz
ID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBJ
bnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAg
IHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNh
bGxlZUdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7
CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZm
bGVEYXRhKTsKICAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZs
ZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTg1LDcgKzM5ODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
UHJpdmF0ZU5hCiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdp
c3RlcnMoKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQu
Y29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vz
c1R5cGU6OlB1dEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBtX2ppdC5jb2RlQmxvY2so
KSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0
UHJpdmF0ZU5hbWUsIHVzZWRSZWdpc3RlcnMsCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2Fk
T25seShiYXNlR1BSKSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHByb3BlcnR5R1BSKSwgdmFs
dWVSZWdzLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAgICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogCkBAIC00OTA1LDcgKzQ5MDUsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5v
cmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQu
Y29kZUJsb2NrKCktPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUQWRkSUMqIGFk
ZElDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsK
ICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkT3B0aW1pemU7
CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZDsKICAg
ICAKQEAgLTQ5ODksNyArNDk4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1
ZVN1YihOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgo
KS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUlu
ZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNv
ZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4
KTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUU3ViSUMo
YXJpdGhQcm9maWxlKTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNv
bW1vbi5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0
aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViOwogCkBAIC01NTcxLDcgKzU1NzEsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVOZWdhdGUoCiAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2Rl
LT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIFVuYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGVGb3JC
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0
LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVE5lZ0lDKiBu
ZWdJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7
CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGlt
aXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdh
dGU7CiAgICAgY29tcGlsZU1hdGhJQyhub2RlLCBuZWdJQywgcmVwYXRjaGluZ0Z1bmN0aW9uLCBu
b25SZXBhdGNoaW5nRnVuY3Rpb24pOwpAQCAtNTgxNSw3ICs1ODE1LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVZhbHVlTXVsKE5vZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29k
ZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1faml0LmNvZGVC
bG9jaygpLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVE11bElDKiBtdWxJQyA9
IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAg
YXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bE9wdGltaXplOwogICAg
IGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWw7CiAKQEAgLTE0
NzcwLDcgKzE0NzcwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ1NoYWRvd0No
aQogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
ICAgICBHUFJSZWcgc2NvcGVSZWcgPSBzY29wZS5ncHIoKTsKIAotICAgIG1faml0LmxvZ1NoYWRv
d0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBt
X2ppdC5jb2RlQmxvY2soKSwgY2FsbFNpdGVJbmRleCk7CisgICAgbV9qaXQubG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKSksIGNhbGxTaXRlSW5kZXgp
OwogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBA
QCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAKICAgICBpZiAodm0u
c2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygpKSB7CiAgICAgICAgIEIzOjpQQ1Rv
T3JpZ2luTWFwIG9yaWdpbk1hcCA9IHN0YXRlLnByb2MtPnJlbGVhc2VQQ1RvT3JpZ2luTWFwKCk7
Ci0gICAgICAgIGNvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAobWFrZVVuaXF1ZTxQQ1Rv
Q29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtLCBXVEZNb3ZlKG9yaWdp
bk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyKSk7CisgICAgICAgIHN0
YXRlLmppdENvZGUtPmNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1Rv
Q29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtLCBXVEZNb3ZlKG9yaWdp
bk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyKTsKICAgICB9CiAKICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5UHRyVGFnPiBsYWJlbCA9IHN0YXRlLmZpbmFsaXpl
ci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihzdGF0ZS5wcm9j
LT5jb2RlKCkuZW50cnlwb2ludExhYmVsKDApKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsOCBAQCBwdWJs
aWM6CiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24oKSBvdmVycmlkZTsKICAgICBzdGF0
aWMgcHRyZGlmZl90IGNvbW1vbkRhdGFPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SklUQ29kZSwgY29tbW9uKTsgfQogICAgIHZvaWQgc2hyaW5rVG9GaXQoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJikgb3ZlcnJpZGU7CisKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVP
cmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBjb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcC5n
ZXQoKTsgfQogICAgIAogICAgIERGRzo6Q29tbW9uRGF0YSBjb21tb247CiAgICAgVmVjdG9yPE9T
UkV4aXQ+IG1fb3NyRXhpdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGlu
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNw
cAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5r
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTQgKzUyLDYgQEAgdm9pZCBsaW5rKFN0YXRlJiBz
dGF0ZSkKIAogICAgIGdyYXBoLnJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7CiAKLSNpZiBBU1NFUlRf
RU5BQkxFRAotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9j
a2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKLSAgICAgICAgQVNTRVJU
KGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0Vt
cHR5KCkpOwotICAgIH0KLSNlbmRpZgotCiAgICAgLy8gQ3JlYXRlIHRoZSBlbnRyeXBvaW50LiBO
b3RlIHRoYXQgd2UgdXNlIHRoaXMgZW50cnlwb2ludCB0b3RhbGx5IGRpZmZlcmVudGx5CiAgICAg
Ly8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UncmUgZG9pbmcgT1NSIGVudHJ5IG9yIG5vdC4KICAg
ICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg4LDYgKzg4LDcgQEAKICNpbmNsdWRlICJKU1NldEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
TExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKKyNpbmNsdWRlICJQ
Q1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1ZGUg
IlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgpA
QCAtMjMyMCw2ICsyMzIxLDE4IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbXBpbGVCaW5hcnlNYXRo
SUM8SklUU3ViR2VuZXJhdG9yPihhcml0aFByb2ZpbGUsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9u
UmVwYXRjaGluZ0Z1bmN0aW9uKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxH
ZW5lcmF0b3IsIEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklU
QWRkSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9m
aWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUQWRkSUMocHJvZmlsZSk7IH0KKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTXVsR2VuZXJhdG9yPjo6dmFs
dWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRNdWxJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0
YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5h
ZGRKSVRNdWxJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJh
dG9yLCBKSVROZWdHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVE5lZ0lD
KiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIFVuYXJ5QXJpdGhQcm9maWxlKiBw
cm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUTmVnSUMocHJvZmlsZSk7IH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUU3ViR2VuZXJhdG9yPjo6dmFsdWU+Ojp0
eXBlPgorICAgIHN0YXRpYyBKSVRTdWJJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29t
bW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRT
dWJJQyhwcm9maWxlKTsgfQorCiAgICAgdm9pZCBjb21waWxlVmFsdWVNdWwoKQogICAgIHsKICAg
ICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKQEAgLTIzOTEsNyArMjQwNCw3IEBAIHByaXZhdGU6CiAj
ZW5kaWYKIAogICAgICAgICAgICAgICAgIEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+OjpjcmVhdGUoKTsK
LSAgICAgICAgICAgICAgICBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBqaXQu
Y29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSk7CisgICAgICAg
ICAgICAgICAgSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gYWRkTWF0aElDPEdl
bmVyYXRvcj4oc3RhdGUtPmppdENvZGUtPmNvbW1vbiwgYXJpdGhQcm9maWxlKTsKICAgICAgICAg
ICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKEpTVmFsdWVSZWdzKHBhcmFt
c1swXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIHBhcmFtcy5ncFNjcmF0
Y2goMCkpOwogCiAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gZmFs
c2U7CkBAIC0yNTAwLDcgKzI1MTMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAgICAgICAg
ICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBC
b3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgSklU
QmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0
aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgICAgICBKSVRCaW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gYWRkTWF0aElDPEdlbmVyYXRvcj4oc3RhdGUtPmpp
dENvZGUtPmNvbW1vbiwgYXJpdGhQcm9maWxlKTsKICAgICAgICAgICAgICAgICBtYXRoSUMtPm1f
Z2VuZXJhdG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIEpTVmFsdWVS
ZWdzKHBhcmFtc1swXS5ncHIoKSksCiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHBh
cmFtc1sxXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBhcmFtc1syXS5ncHIoKSksIHBhcmFtcy5mcFNj
cmF0Y2goMCksCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mcFNjcmF0Y2goMSksIHBhcmFt
cy5ncFNjcmF0Y2goMCkpOwpAQCAtNDMxNyw3ICs0MzMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpGVExK
SVQpID8gcGFyYW1zLmdwU2NyYXRjaCgwKSA6IEludmFsaWRHUFJSZWc7CiAKICAgICAgICAgICAg
IGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVFB1dEJ5VmFsR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAg
ICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50
aWNPcmlnaW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLAorICAgICAgICAg
ICAgICAgIGppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6RlRMSklULCBub2RlU2VtYW50aWNPcmln
aW4sIGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLAogICAgICAgICAg
ICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFs
aWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKIAogICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdHViSW5m
bygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKQEAgLTEwMjg1LDYgKzEwMjk4LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtUGFzc2VkQXJn
czsgaSA8IG51bUFsbG9jYXRlZEFyZ3M7ICsraSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLmFyZ3MuYXBwZW5kKFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVk
KCkpKTsKICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51
bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRl
cnMgPSBqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAg
ICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKHNlbWFudGlj
Tm9kZU9yaWdpbik7CkBAIC0xMDQ0MywxMyArMTA0NTcsMTQgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQocGFyYW1zWzEgKyBpXS5yZWNvdmVy
eUZvckpTVmFsdWUoKSk7CiAKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRB
cmdzID0gbnVtQXJnczsKKyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJz
ID0gaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5j
b2RlQmxvY2soKSk7CiAKICAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
byA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKGNvZGVPcmlnaW4pOwogICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGws
IEdQUkluZm86OnJlZ1QwKTsKIAotICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFs
aWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChq
aXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgICAg
ICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwo
KTsKICAgICAgICAgICAgICAgICB9KTsKQEAgLTEwNzkyLDcgKzEwODA3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChp
c1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVn
LCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUklu
Zm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFp
bENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpAQCAtMTEwNzMsNyArMTEwODgs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xv
d1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAg
ICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgg
PSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAs
IEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBq
aXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0
LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3Bw
CShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMywyOCArNDEzLDE2IEBAIHN0YXRp
YyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAogICAgIFJlZ2lzdGVyU2V0IGFs
bEZUTENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmZ0bENhbGxlZVNhdmVSZWdpc3RlcnMoKTsK
ICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYmFzZWxpbmVDYWxsZWVTYXZlcyA9IGJh
c2VsaW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqIHZtQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0
ZXJPZmZzZXRzKCk7Ci0gICAgUmVnaXN0ZXJTZXQgdm1DYWxsZWVTYXZlc1RvU2tpcCA9IFJlZ2lz
dGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxl
cigpKSB7Ci0gICAgICAgIGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBHUFJJbmZvOjpy
ZWdUMSk7Ci0gICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoRW50
cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgR1BSSW5mbzo6cmVn
VDEpOwotICAgIH0KIAogICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJl
Zzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CiAgICAgICAgIGlmICghYWxsRlRMQ2FsbGVl
U2F2ZXMuZ2V0KHJlZykpIHsKLSAgICAgICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxl
cigpKQotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2bUNhbGxlZVNhdmVzLT5maW5k
KHJlZykpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgdW5zaWdu
ZWQgdW53aW5kSW5kZXggPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKS0+aW5kZXhP
ZihyZWcpOwogICAgICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0KiBiYXNlbGluZVJlZ2lzdGVy
T2Zmc2V0ID0gYmFzZWxpbmVDYWxsZWVTYXZlcy0+ZmluZChyZWcpOwotICAgICAgICBSZWdpc3Rl
ckF0T2Zmc2V0KiB2bUNhbGxlZVNhdmUgPSBudWxscHRyOyAKLSAgICAgICAgaWYgKGV4aXQuaXNF
eGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgICAgICB2bUNhbGxlZVNhdmUgPSB2bUNhbGxlZVNh
dmVzLT5maW5kKHJlZyk7CiAKICAgICAgICAgaWYgKHJlZy5pc0dQUigpKSB7CiAgICAgICAgICAg
ICBHUFJSZWcgcmVnVG9Mb2FkID0gYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA/IEdQUkluZm86OnJl
Z1QwIDogcmVnLmdwcigpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVnVG9Mb2FkICE9
IEdQUkluZm86OnJlZ1QxKTsKIAogICAgICAgICAgICAgaWYgKHVud2luZEluZGV4ID09IFVJTlRf
TUFYKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIEZUTCBjb21waWxhdGlvbiBkaWRuJ3QgcHJl
c2VydmUgdGhpcyByZWdpc3Rlci4gVGhpcyBtZWFucyB0aGF0IGl0IGFsc28KQEAgLTQ1Miw4ICs0
NDAsNiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkCiAKICAgICAg
ICAgICAgIGlmIChiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQogICAgICAgICAgICAgICAgIGppdC5z
dG9yZTY0KHJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6
OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0LT5vZmZzZXQoKSkp
OwotICAgICAgICAgICAgaWYgKHZtQ2FsbGVlU2F2ZSAmJiAhdm1DYWxsZWVTYXZlc1RvU2tpcC5n
ZXQodm1DYWxsZWVTYXZlLT5yZWcoKSkpCi0gICAgICAgICAgICAgICAgaml0LnN0b3JlNjQocmVn
VG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVT
YXZlLT5vZmZzZXQoKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgRlBSUmVnIGZw
UmVnVG9Mb2FkID0gYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA/IEZQUkluZm86OmZwUmVnVDAgOiBy
ZWcuZnByKCk7CiAKQEAgLTQ2NCwxOSArNDUwLDkgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIo
Vk0mIHZtLCB1bnNpZ25lZAogCiAgICAgICAgICAgICBpZiAoYmFzZWxpbmVSZWdpc3Rlck9mZnNl
dCkKICAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoZnBSZWdUb0xvYWQsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgYmFz
ZWxpbmVSZWdpc3Rlck9mZnNldC0+b2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmICh2bUNhbGxl
ZVNhdmUgJiYgIXZtQ2FsbGVlU2F2ZXNUb1NraXAuZ2V0KHZtQ2FsbGVlU2F2ZS0+cmVnKCkpKQot
ICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShmcFJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7Ci0g
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZp
bmQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOwotICAgICAgICBqaXQuc3RvcmU2NChHUFJJ
bmZvOjpudW1iZXJUYWdSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKLQotICAgICAgICB2bUNhbGxlZVNhdmUg
PSB2bUNhbGxlZVNhdmVzLT5maW5kKEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIpOwotICAg
ICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwot
ICAgIH0KLQogICAgIHNpemVfdCBiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZl
cyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMo
KTsKIAogICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZl
Q2hlY2twb2ludCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01l
dGFkYXRhLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
TWV0YWRhdGEucmIJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvTWV0YWRhdGEucmIJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE3ICs0MiwyOCBAQCBj
bGFzcyBNZXRhZGF0YQogICAgIGRlZiBzdHJ1Y3Qob3ApCiAgICAgICAgIHJldHVybiBpZiBlbXB0
eT8KIAotICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcykKKyAgICAgICAg
ZGVmIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQorICAgICAg
ICAgICAgZmllbGROYW1lcy5tYXAgZG8gfGZpZWxkTmFtZXwKKyAgICAgICAgICAgICAgICAiI3tw
cmVmaXh9c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZiN7ZmllbGROYW1lWzBdLnVwY2FzZX0je2Zp
ZWxkTmFtZVsxLi4tMV19KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtXyN7
ZmllbGROYW1lfSk7IH0iCisgICAgICAgICAgICBlbmQuam9pbigiXG4iKQorICAgICAgICBlbmQK
KworICAgICAgICBkZWYgY29udmVydEZpZWxkcyhwcmVmaXgsIGZpZWxkcywgZmllbGROYW1lcykK
ICAgICAgICAgICAgIGZpZWxkcy5tYXAgZG8gfGZpZWxkLCB0eXBlfAogICAgICAgICAgICAgICAg
IGlmIHR5cGUua2luZF9vZj8gSGFzaAotICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5p
b24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSl9XG4je3ByZWZpeH19
OyIKKyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxk
cyhwcmVmaXggKyAnICAgICcsIHR5cGUsIGZpZWxkTmFtZXMpfVxuI3twcmVmaXh9fTsiCiAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRv
X3N9IG1fI3tmaWVsZC50b19zfTsiCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZp
ZWxkLnRvX3MKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lcy5wdXNoKGZpZWxkTmFtZSkK
KyAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGROYW1l
fTsiCiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmQuam9pbigiXG4iKQogICAg
ICAgICBlbmQKIAotICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKCIgICAgICAgICIsIEBm
aWVsZHMpCisgICAgICAgIGZpZWxkTmFtZXMgPSBbXQorICAgICAgICBwcmVmaXggPSAiICAgICAg
ICAiCisgICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMocHJlZml4LCBAZmllbGRzLCBmaWVs
ZE5hbWVzKQorICAgICAgICBmaWVsZHMgPSBmaWVsZHMgKyAiXG4iICsgZ2VuZXJhdGVPZmZzZXRP
ZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCiAKICAgICAgICAgaW5pdHMgPSBuaWwKICAg
ICAgICAgaWYgQGluaXRpYWxpemVycyAmJiAobm90IEBpbml0aWFsaXplcnMuZW1wdHk/KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsNiArMzY3LDI4IEBAIHZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjpsb2FkUHJvcGVydHkoR1BSUmUKICAgICAgICAgcmVzdWx0KTsKIH0KIAordm9pZCBB
c3NlbWJseUhlbHBlcnM6OnN0b3JlUHJvcGVydHkoSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBv
YmplY3QsIEdQUlJlZyBvZmZzZXQsIEdQUlJlZyBzY3JhdGNoKQoreworICAgIEp1bXAgaXNJbmxp
bmUgPSBicmFuY2gzMihMZXNzVGhhbiwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxp
bmVPZmZzZXQpKTsKKyAgICAKKyAgICBsb2FkUHRyKEFkZHJlc3Mob2JqZWN0LCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBuZWczMihvZmZzZXQpOworICAgIHNp
Z25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICBKdW1wIHJlYWR5ID0ganVtcCgp
OworICAgIAorICAgIGlzSW5saW5lLmxpbmsodGhpcyk7CisgICAgYWRkUHRyKAorICAgICAgICBU
cnVzdGVkSW1tMzIoCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXplb2YoSlNP
YmplY3QpKSAtCisgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8aW50MzJfdD4oZmlyc3RPdXRPZkxp
bmVPZmZzZXQpIC0gMikgKiBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSksCisgICAgICAgIG9iamVjdCwgc2NyYXRjaCk7CisgICAgCisgICAgcmVhZHkubGluayh0
aGlzKTsKKyAgICAKKyAgICBzdG9yZVZhbHVlKHZhbHVlLAorICAgICAgICBCYXNlSW5kZXgoc2Ny
YXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKK30KKwogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRM
b2FkU3RydWN0dXJlKFZNJiB2bSwgUmVnaXN0ZXJJRCBzb3VyY2UsIFJlZ2lzdGVySUQgZGVzdCwg
UmVnaXN0ZXJJRCBzY3JhdGNoKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02OTgsOCArNzIw
LDEzIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXMKIAogdm9pZCBB
c3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogaW5mbykKIHsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFs
T2JqZWN0KSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3Zp
bmdHbG9iYWxPYmplY3Qodm0sIGluZm8pOworfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYgdm0sIENhbGxMaW5rSW5m
byogaW5mbykKK3sKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1Qy
KTsKICAgICBDYWxsIGNhbGwgPSBuZWFyQ2FsbCgpOwogICAgIGFkZExpbmtUYXNrKFs9LCAmdm1d
IChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgIGF1dG8gY2FsbExvY2F0aW9uID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SklUQ29tcGlsYXRpb25QdHJUYWc+KGNhbGwp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShy
ZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsOCArMjM0LDkgQEAgcHVibGljOgogI2VuZGlm
CiAgICAgfQogICAgIAotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNsb2JiZXJzIG9mZnNldC4KKyAg
ICAvLyBOb3RlIHRoYXQgdGhlc2UgY2xvYmJlciBvZmZzZXQuCiAgICAgdm9pZCBsb2FkUHJvcGVy
dHkoR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNldCwgSlNWYWx1ZVJlZ3MgcmVzdWx0KTsKKyAg
ICB2b2lkIHN0b3JlUHJvcGVydHkoSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBvYmplY3QsIEdQ
UlJlZyBvZmZzZXQsIEdQUlJlZyBzY3JhdGNoKTsKIAogICAgIHZvaWQgbW92ZVZhbHVlUmVncyhK
U1ZhbHVlUmVncyBzcmNSZWdzLCBKU1ZhbHVlUmVncyBkZXN0UmVncykKICAgICB7CkBAIC0zNzks
MTUgKzM4MCwyNiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICB2b2lkIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRy
eUZyYW1lLCBHUFJSZWcgc2NyYXRjaCkKKyAgICB7CisjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZF
U19SRUdJU1RFUlMgPiAwCisgICAgICAgIGxvYWRQdHIoJnRvcEVudHJ5RnJhbWUsIHNjcmF0Y2gp
OworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcklt
cGwoc2NyYXRjaCk7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7
CisgICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKKyNlbmRpZgorICAgIH0KKwogICAgIHZv
aWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFt
ZSomIHRvcEVudHJ5RnJhbWUpCiAgICAgewogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVH
SVNURVJTID4gMAogICAgICAgICBjb25zdCBUZW1wUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMg
PSB7IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSB9OwogICAgICAgICBH
UFJSZWcgdGVtcDEgPSB1c2VkUmVnaXN0ZXJzLmdldEZyZWVHUFIoMCk7Ci0gICAgICAgIGxvYWRQ
dHIoJnRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKLSAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHRlbXAxKTsKKyAgICAgICAgY29weUNhbGxlZVNh
dmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodG9wRW50cnlGcmFtZSwgdGVtcDEpOwog
I2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOworICAgICAgICBVTlVT
RURfUEFSQU0odG9wRW50cnlGcmFtZSk7CiAjZW5kaWYKICAgICB9CiAgICAgCkBAIC0xNzIwLDYg
KzE3MzIsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxs
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBDYWxsTGlua0luZm8qKTsKKyAgICB2b2lkIGVtaXRWaXJ0
dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mLCBDYWxsTGlua0luZm8qKTsKICAg
ICAKICAgICB2b2lkIG1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwogICAgIHZvaWQgcmVjbGFp
bVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Jhc2VsaW5lSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKKworI2luY2x1
ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgorI2luY2x1ZGUgIlN0cnVj
dHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKSVRBZGRJQyogTWF0aElDSG9s
ZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1
cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE11bElDKiBNYXRoSUNIb2xkZXI6
OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBt
X211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUU3ViSUMqIE1hdGhJQ0hvbGRlcjo6YWRk
SklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3Vi
SUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVROZWdJQyogTWF0aElDSG9sZGVyOjphZGRKSVRO
ZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5h
ZGQoYXJpdGhQcm9maWxlKTsgfQorCit2b2lkIE1hdGhJQ0hvbGRlcjo6YWRvcHRNYXRoSUNzKE1h
dGhJQ0hvbGRlciYgb3RoZXIpCit7CisgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRk
SUNzKTsKKyAgICBtX211bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAgIG1fbmVn
SUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90
aGVyLm1fc3ViSUNzKTsKK30KKworQmFzZWxpbmVKSVRDb2RlOjpCYXNlbGluZUpJVENvZGUoQ29k
ZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0
eUNoZWNrKQorICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVj
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgLCBNYXRoSUNIb2xkZXIoKQoreyB9CisKK0Jh
c2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRD
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJD
YWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSklUQ29kZU1h
cC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQmluYXJ5QXJpdGhQcm9maWxlOworY2xh
c3MgVW5hcnlBcml0aFByb2ZpbGU7CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsK
K3N0cnVjdCBTaW1wbGVKdW1wVGFibGU7CitzdHJ1Y3QgU3RyaW5nSnVtcFRhYmxlOworCitjbGFz
cyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIHZvaWQgYWRvcHRNYXRoSUNzKE1hdGhJQ0hv
bGRlciYgb3RoZXIpOworICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2Zp
bGUqKTsKKyAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Cisg
ICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVE5l
Z0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOworCitwcml2YXRlOgorICAgIEJh
ZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKKyAgICBC
YWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7Cit9Owor
CitjbGFzcyBKSVRDb25zdGFudFBvb2wgeworcHVibGljOgorICAgIHVzaW5nIENvbnN0YW50ID0g
dW5zaWduZWQ7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAgR2xv
YmFsT2JqZWN0LAorICAgICAgICBDYWxsTGlua0luZm8sCisgICAgICAgIFN0cnVjdHVyZVN0dWJJ
bmZvLAorICAgICAgICBGdW5jdGlvbkRlY2wsCisgICAgICAgIEZ1bmN0aW9uRXhwciwKKyAgICB9
OworCisgICAgc3RydWN0IFZhbHVlIHsKKyAgICAgICAgVHlwZSB0eXBlOworICAgICAgICBQYWNr
ZWRQdHI8dm9pZD4gcGF5bG9hZDsKKyAgICB9OworCisgICAgSklUQ29uc3RhbnRQb29sKCkgPSBk
ZWZhdWx0OworICAgIEpJVENvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0
OworICAgIEpJVENvbnN0YW50UG9vbCYgb3BlcmF0b3I9KEpJVENvbnN0YW50UG9vbCYmKSA9IGRl
ZmF1bHQ7CisKKyAgICBDb25zdGFudCBhZGQoVHlwZSB0eXBlLCB2b2lkKiBwYXlsb2FkID0gbnVs
bHB0cikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRzLnNpemUo
KTsKKyAgICAgICAgbV9jb25zdGFudHMuYXBwZW5kKFZhbHVlIHsgdHlwZSwgcGF5bG9hZCB9KTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29uc3RhbnRzLnNpemUoKTsgfQorICAgIFZhbHVlIGF0KHNpemVfdCBpKSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpXTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxW
YWx1ZT4gbV9jb25zdGFudHM7Cit9OworCisKK2NsYXNzIEJhc2VsaW5lSklUQ29kZSA6IHB1Ymxp
YyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBCYXNl
bGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiwgQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiB3aXRoQXJpdHlDaGVjayk7CisgICAgfkJhc2VsaW5lSklUQ29kZSgpIG92ZXJyaWRlOworICAg
IFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJu
IG1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KKworICAgIEJhZzxVbmxpbmtlZENhbGxMaW5r
SW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxM
aW5rSW5mb3M7CisgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRT
dHViSW5mb3M7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBU
YWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXM7CisgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisgICAgSklUQ29uc3RhbnRQ
b29sIG1fY29uc3RhbnRQb29sOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1h
cD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKKyAgICBib29sIG1faXNTaGFyZWFibGUgeyB0cnVlIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNvbnN0CiAK
IENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUoKQogewotICAgIENv
bXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKCk7Cisg
ICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQo
bV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlv
bkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5
SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblByb2xv
CiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBl
cnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFs
dWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNo
YWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAgICBz
dG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNjb3Bl
LCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2spLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXgu
Yml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjpl
bnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BS
UmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93Q2hp
Y2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAgLTcyLDYgKzYyLDI4
IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEKICAgICBzdG9yZVB0
cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikpOwogfQogCisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlz
UmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgc3RvcmVWYWx1
ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNj
b3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93
UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUlu
ZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNr
ZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29w
ZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkK
K3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlz
UmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKK3ZvaWQgQ0NhbGxI
ZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBK
U1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNr
ZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRl
SW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVkTGFtYmRhPHZvaWQo
Q0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKIHsKICAg
ICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2Fs
bEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxs
SGVscGVycy5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDE0IEBAIHB1Ymxp
YzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJlZ2lzdGVy
cy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Agb2YKICAgICAvLyBz
dGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNr
ZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDEsIEdQ
UlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcg
c2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxv
Y2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChH
UFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBD
b2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKK3B1
YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIg
Y29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworICAgIHZvaWQgbG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRoZSBQYWNr
ZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2b2lkIGVuc3VyZVNo
YWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRj
aDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCShyZXZpc2lvbiAyODMw
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZv
aWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29kZUJsb2Nr
LT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRh
OjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJl
Z2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0
ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07Ci0gICAgY29uc3Qg
UmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVCbG9jay0+
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdp
c3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZz
ZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCShyZXZpc2lv
biAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMyBAQCBwdWJsaWM6CiAgICAgVmVj
dG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWduZWQgbnVtTG9jYWxzIHsgVUlOVF9N
QVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAgICB1bnNp
Z25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8gT24gb3VyIG1hY2hpbmUgZnJhbWUu
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1hcDxWYWx1ZVJlY292ZXJ5PiByZWdp
c3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVyIHsgSW52YWxpZEdQUlJlZyB9Owog
CiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7CisgICAgdm9p
ZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqKTsK
ICNlbmRpZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShyZXZpc2lvbiAyODMw
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENhbGxGcmFtZVNodWZmbGVyOjpDYWxs
RnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkKICAgICAsIG1fb2xkRnJhbWUoZGF0
YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsIG51bGxwdHIp
CiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxs
RnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAgICAgICArIHJvdW5kQXJndW1lbnRDb3Vu
dFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpCisgICAgLCBt
X2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBy
b3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5udW1QYXJhbWV0ZXJzKSkKICAgICAs
IG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwog
ICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Muc2l6ZSgp
KSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUgLSBtX2FsaWduZWRP
bGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6YWxsUmVn
aXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNzZWRBcmdzKQorICAg
ICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykKIHsKICAgICAvLyBXZSBhcmUg
YWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAgIGZvciAodW5zaWduZWQgaSA9
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3ICs0MjEsNyBAQCB2
b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhCiAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFtZUJhc2UpOwogICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9CiAgICAgICAgIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fbmV3RnJhbWVCYXNlLAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5hbmQzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSwg
bV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVCYXNlLCBtX25ld0ZyYW1lQmFzZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5o
CShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAgICAgIGRhdGEubnVtTG9jYWxz
ID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2VkQXJncyA9IG1fbnVtUGFzc2Vk
QXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9udW1QYXJhbWV0ZXJzOwogICAg
ICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90
OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJnQ291
bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytpKQpA
QCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwZXJmb3JtU2FmZVdyaXRlcygp
OwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07CisgICAg
dW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjgzMDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEK
IH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRl
eCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBj
b2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51bGxwdHIpCiAgICAgLCBtX2lu
dGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwgbV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAg
ICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4
KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAgIG1fcHJvZmlsZWRDb2RlQmxv
Y2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+dW5s
aW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTkwLDggKzkzLDggQEAgdm9p
ZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQo
YnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRl
ckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJl
c3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJy
YW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJ
bmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJ
VEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0
ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAt
MTEzLDE1ICsxMTYsMjAgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0
KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQt
PmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KQordm9pZCBKSVQ6
OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCkKIHsKKyAgICBh
dXRvIG9rID0gYnJhbmNoVGVzdFB0cihaZXJvLCBwb2ludGVyVG9TZXQpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0
OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBv
ay5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUpCit2b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVB
ZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFyUmVhZE9ubHlXYXRjaHBvaW50
KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3Jh
dGNoR1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZT
RVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJSZWFkT25seVdhdGNocG9pbnQpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQ
UiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0
KCkKQEAgLTEyOSwxMiArMTM3LDE4IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIEp1
bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjpyZXNl
dFNQKCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7Cit9CisKICNkZWZpbmUgTkVYVF9PUENPREUobmFtZSkgXAogICAgIG1fYnl0ZWNvZGVJbmRl
eCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3Ry
dWN0aW9uLT5zaXplKCkpOyBcCiAgICAgYnJlYWs7CkBAIC0xODEsNjEgKzE5NSw0NCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShH
UFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRy
ZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwg
cmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJl
c3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcp
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRP
ZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgcmVzdWx0KTsKKyAgICBo
YXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlz
Q29uc3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25F
eGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAg
ICBlbHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCByZXN1bHQpOworCisgICAgbG9hZFB0cihB
ZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxv
Y2soKSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgcHJvYmVE
ZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsK
KyAgICB9KTsKKyNlbmRpZgorfQorCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb21w
aWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5n
ICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4iKTsKICAgICAKICAgICBqaXRBc3NlcnRUYWdz
SW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCk7CiAgICAgCi0gICAg
YXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpOwotICAgIHVu
c2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4
ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJsb2NrLT52bSgpOwogICAgIEJ5dGVjb2RlSW5k
ZXggc3RhcnRCeXRlY29kZUluZGV4KDApOwotICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2Rl
SW5kZXggJiYgKG1fY29kZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJsb2NrPih2bSkgfHwg
bV9jb2RlQmxvY2stPmluaGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtKSkpIHsKLSAg
ICAgICAgLy8gV2UgY2FuIG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBleGVj
dXRlIFByb2dyYW1Db2RlQmxvY2sncyBleGFjdGx5IG9uY2UuCi0gICAgICAgIC8vIFRoaXMgb3B0
aW1pemF0aW9uIHdvdWxkIGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRoZSBMTEludCBkZXRl
cm1pbmVzIGl0IHdhbnRzIHRvCi0gICAgICAgIC8vIGRvIE9TUiBlbnRyeSBpbnRvIHRoZSBiYXNl
bGluZSBKSVQgaW4gYSBsb29wLCBpdCB3aWxsIHBhc3MgaW4gdGhlIGJ5dGVjb2RlIG9mZnNldCBp
dAotICAgICAgICAvLyB3YXMgZXhlY3V0aW5nIGF0IHdoZW4gaXQga2lja2VkIG9mZiBvdXIgY29t
cGlsYXRpb24uIFdlIG9ubHkgbmVlZCB0byBjb21waWxlIGNvZGUgZm9yCi0gICAgICAgIC8vIGFu
eXRoaW5nIHJlYWNoYWJsZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0LgotCi0gICAgICAgIC8v
IFdlIG9ubHkgYm90aGVyIGJ1aWxkaW5nIHRoZSBieXRlY29kZSBncmFwaCBpZiBpdCBjb3VsZCBz
YXZlIHRpbWUgYW5kIGV4ZWN1dGFibGUKLSAgICAgICAgLy8gbWVtb3J5LiBXZSBwaWNrIGFuIGFy
Yml0cmFyeSBvZmZzZXQgd2hlcmUgd2UgZGVlbSB0aGlzIGlzIHByb2ZpdGFibGUuCi0gICAgICAg
IGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gMjAwKSB7Ci0gICAg
ICAgICAgICAvLyBBcyBhIHNpbXBsaWZpY2F0aW9uLCB3ZSBkb24ndCBmaW5kIGFsbCBieXRlY29k
ZSByYW5nZXMgdGhhdCBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAvLyBJbnN0ZWFkLCB3
ZSBqdXN0IGZpbmQgdGhlIG1pbmltdW0gYnl0ZWNvZGUgb2Zmc2V0IHRoYXQgaXMgcmVhY2hhYmxl
LCBhbmQKLSAgICAgICAgICAgIC8vIGNvbXBpbGUgY29kZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zm
c2V0IG9ud2FyZHMuCi0KLSAgICAgICAgICAgIEJ5dGVjb2RlR3JhcGggZ3JhcGgobV9jb2RlQmxv
Y2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAgICAgICAgICBCeXRlY29kZUJh
c2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldCht
X2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoYmxvY2spOwotCi0gICAgICAgICAgICBHcmFwaE5vZGVXb3JrbGlzdDxCeXRlY29k
ZUJhc2ljQmxvY2sqPiB3b3JrbGlzdDsKLSAgICAgICAgICAgIHN0YXJ0Qnl0ZWNvZGVJbmRleCA9
IEJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goYmxvY2spOwotCi0g
ICAgICAgICAgICB3aGlsZSAoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBv
cCgpKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eChzdGQ6Om1pbihzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGJsb2NrLT5sZWFkZXJPZmZz
ZXQoKSkpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggOiBi
bG9jay0+c3VjY2Vzc29ycygpKQotICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKCZn
cmFwaFtzdWNjZXNzb3JJbmRleF0pOwotCi0gICAgICAgICAgICAgICAgLy8gQWxzbyBhZGQgY2F0
Y2ggYmxvY2tzIGZvciBieXRlY29kZXMgdGhhdCB0aHJvdy4KLSAgICAgICAgICAgICAgICBpZiAo
bV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgewotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmxlYWRlck9mZnNl
dCgpOyBieXRlY29kZU9mZnNldCA8IGJsb2NrLT5sZWFkZXJPZmZzZXQoKSArIGJsb2NrLT50b3Rh
bExlbmd0aCgpOykgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9
IGluc3RydWN0aW9ucy5hdChieXRlY29kZU9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoYXV0byogaGFuZGxlciA9IG1fY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRl
eChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd29ya2xpc3QucHVzaChncmFwaC5maW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQo
aGFuZGxlci0+dGFyZ2V0KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlT2Zm
c2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAKICAgICBtX2J5
dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CiAgICAgZm9yIChtX2J5dGVjb2RlSW5kZXgg
PSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlv
bkNvdW50OyApIHsKQEAgLTI3OCwxMiArMjc1LDE1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFz
ZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRl
eHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZw
PENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigi
SklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNm
ciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYXRjaCkKKyAg
ICAgICAgICAgIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOworCiAgICAgICAgIHN3aXRjaCAo
b3Bjb2RlSUQpIHsKICAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKICAgICAgICAgREVGSU5F
X1NMT1dfT1AobGVzc2VxKQpAQCAtNTI3LDcgKzUyNyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRl
Y29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIo
KTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAg
ICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9yICIsIG1fYnl0
ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CkBAIC01NDUs
OCArNTQ1LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewog
ICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwog
ICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAg
ICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5j
b2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVP
ZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2lu
dGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgfQpAQCAtNjAzLDcgKzYwMyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNl
cygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfdmFsKQogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X2lkKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3Bfc3ViKQotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2Zyb21fc2NvcGUpCiAj
ZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3B1dF90b19zY29wZSkKQEAgLTY3
NCw1NSArNjc0LDU1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAjZW5k
aWYKIH0KIAordm9pZCBKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29s
UmVnaXN0ZXJzKCkKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpv
ZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHNfbWV0YWRhdGFHUFIpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJlZ1QwKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25z
dGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKK30KKwordm9pZCBKSVQ6OmVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKQoreworICAgIEJhc2U6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJl
Z2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsK
K30KKwogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGls
YXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0g
bV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVs
IGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CiAgICAgc3dp
dGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgogICAgICAgICBtX2Nh
bkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQg
PSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2UgREZHOjpDYW5Db21w
aWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1ZTsKLSAgICAgICAg
bV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkRW1pdFBy
b2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAK
LSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7Ci0gICAgY2FzZSBHbG9iYWxD
b2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToKLSAgICBjYXNlIEV2YWxDb2RlOgotICAgICAgICBt
X2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxy
ZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1bmlubGluZWFibGUg
Y2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZhdGlvbi4KLSAgICAg
ICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShsZXZl
bCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29kZUJsb2NrKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2Rl
QmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRh
YmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7Ci0g
ICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlciku
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiht
X2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZXMoKSkgeworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVy
T2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3dpdGNoSnVtcFRh
YmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+
bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgICAgIGlmIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQor
ICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5n
SnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25z
OjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKQotICAgICAgICBtX2Rpc2Fzc2Vt
YmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX2NvZGVCbG9jayk7CisgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkp
KSkgeworICAgICAgICAvLyBGSVhNRTogYnVpbGQgYSBkaXNhc3NlbWJsZXIgb2ZmIG9mIFVubGlu
a2VkQ29kZUJsb2NrLgorICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlz
YXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICB9CiAgICAgaWYgKFVOTElLRUxZ
KG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpIHsKKyAgICAgICAgLy8gRklYTUU6IGJ1aWxk
IHByb2ZpbGVyIGRpc2Fzc2VtYmxlciBvZmYgVW5saW5rZWRDb2RlQmxvY2suCiAgICAgICAgIG1f
Y29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAgICAgICAgIG5ldyBQcm9maWxlcjo6Q29tcGls
YXRpb24oCi0gICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1
cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAorICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVy
Qnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fcHJvZmlsZWRDb2RlQmxvY2sp
LAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpCYXNlbGluZSkpOwotICAgICAgICBtX2NvbXBp
bGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
LCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNv
ZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwog
ICAgIH0KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxh
YmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwpAQCAtNzQyLDExICs3NDIsMTIg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBub3Ao
KTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgIGlmICht
X3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAg
ZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKCk7CiAKICAgICBMYWJlbCBiZWdpbkxh
YmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAgaW50IGZyYW1lVG9wT2Zm
c2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUgPSAtZnJhbWVUb3BPZmZzZXQ7
CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9mZnNldCksIGNhbGxGcmFtZVJlZ2lz
dGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxvdzsKQEAgLTc1NywxNiArNzU4
LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtb3Zl
KHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0U2F2ZUNhbGxl
ZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKyAg
ICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOwogCi0g
ICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgeworICAgIGlm
IChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAg
ICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1
bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAg
ICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAmJiAoIW1fdW5saW5rZWRDb2RlQmxvY2stPmlz
Q29uc3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAx
KSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSArIEZpeGVkVmVj
dG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIpOworCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICAv
LyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1t
eSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25z
aXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZh
bHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYm
ICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXND
b25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJ
bmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArNzgyLDEyIEBAIHZvaWQgSklUOjpj
b21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAgICBsb2FkMzIoQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwog
I2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9j
ay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRSZWdzKTsKKyAgICAg
ICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50
ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNr
ZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFJFTEVB
U0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgpKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmlsZWRDb2RlQmxvY2stPmppdFR5
cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQogICAgICAgICBtX3ZtLT5q
aXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgKnRoaXMpOwpA
QCAtNzk5LDI0ICs4MDQsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xs
YmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVC
bG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFj
a09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCByZWdUMCk7CiAK
ICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2UgbmV2ZXIgcmVxdWly
ZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fY29kZUJsb2Nr
LT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkg
PT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgeworICAgIGJvb2wgcmVxdWly
ZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpICE9IDE7
CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
ICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hlY2sgPSBsYWJlbCgp
OwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxvY2stPm1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAg
ICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShy
ZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkpOwogCiAgICAgICAgIGxv
YWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0
aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMy
KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtUbyhiZWdpbkxhYmVs
LCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwog
CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29kZUJsb2NrLT5pc0Nv
bnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2Fs
bEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgYXJn
dW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09u
RXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlv
bkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgYXJndW1lbnRH
UFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCks
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04MzksNyArODQ3LDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBtX2Rpc2Fz
c2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZh
dWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxM
aW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6
OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6
OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1fdW5saW5rZWRD
b2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKICAg
ICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4NjYsOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAg
ICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6Oklt
bWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcjogewotICAgICAg
ICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgbGlu
a2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0
clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2VkVGFibGUubV9icmFu
Y2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0
ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEsOCArODc5LDggQEAg
dm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6
OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAg
ICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxp
bmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBjdGlEZWZhdWx0ID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVP
ZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yIChhdXRvJiBs
b2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMoKSkgewogICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNoT2Zmc2V0OwpAQCAt
OTA2LDYgKzkxNCwyNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKHJlY29yZC5mcm9tLCByZWNvcmQuY2FsbGVlKTsKICAgICB9CiAKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIGF1dG8gZmluYWxpemVJQ3MgPSBbJl0gKGF1dG8mIGdlbmVyYXRvcnMpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5lcmF0b3JzKSB7CisgICAgICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oZ2VuLm1fZG9uZSk7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
LT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPihnZW4ubV9zbG93UGF0aEJlZ2luKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5VmFs
cyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkc1dpdGhUaGlzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX3B1dEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5VmFscyk7CisgICAgZmluYWxp
emVJQ3MobV9kZWxCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeVZhbHMpOworICAgIGZp
bmFsaXplSUNzKG1faW5CeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5VmFscyk7CisgICAg
ZmluYWxpemVJQ3MobV9pbnN0YW5jZU9mcyk7CisgICAgZmluYWxpemVJQ3MobV9wcml2YXRlQnJh
bmRBY2Nlc3Nlcyk7CisjZWxzZQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHMs
IHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0
Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywg
cGF0Y2hCdWZmZXIpOwpAQCAtOTE3LDIxICs5NDYsMjUgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAg
IGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5h
bGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNlT2ZzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxp
emVJbmxpbmVDYWNoZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgcGF0Y2hCdWZmZXIpOworI2Vu
ZGlmCiAKICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2FsbENvbXBpbGF0aW9u
SW5mbykgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZv
JiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAg
aW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pOworI2Vsc2UKICAgICAgICAgQ2FsbExp
bmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87CiAgICAgICAgIGlu
Zm8uc2V0Q29kZUxvY2F0aW9ucygKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQYXRoU3RhcnQpLAogICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlv
bkluZm8uZG9uZUxvY2F0aW9uKSk7CisjZW5kaWYKKwogICAgIH0KIAotICAgIHsKLSAgICAgICAg
SklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsg
KytieXRlY29kZU9mZnNldCkgewotICAgICAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zm
c2V0XS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChC
eXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0Vu
dHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKLSAgICAgICAgfQotICAgICAg
ICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgp
KTsKKyAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKKyAgICBmb3IgKHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXpl
KCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKKyAgICAgICAgaWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zm
c2V0XS5pc1NldCgpKQorICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQ
dHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwogICAgIH0KIAogICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkpIHsKQEAgLTk0MCwyNiArOTczLDQyIEBA
IHZvaWQgSklUOjpsaW5rKCkKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkobV9jb21waWxhdGlv
bikpIHsKKyAgICAgICAgLy8gRklYTUU6IHNob3VsZCB3ZSBtYWtlIHRoZSBieXRlY29kZSBwcm9m
aWxlciBrbm93IGFib3V0IFVubGlua2VkQ29kZUJsb2NrPwogICAgICAgICBpZiAoT3B0aW9uczo6
ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpCiAgICAgICAgICAgICBtX2Rpc2Fzc2Vt
Ymxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9uLmdldCgpLCBwYXRjaEJ1ZmZlcik7
Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9j
b2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqbV9jb21waWxhdGlv
bik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxk
TWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1Rv
Q29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIHBhdGNo
QnVmZmVyKTsKICAgICAKKyAgICAvLyBGSVhNRTogTWFrZSBhIHZlcnNpb24gb2YgQ29kZUJsb2Nr
V2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBVbmxpbmtlZENvZGVCbG9jay4KICAgICBDb2Rl
UmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUoCiAgICAgICAgIHBhdGNo
QnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVz
IiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMi
LCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wcm9maWxlZENvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2ppdENvZGUgPSBhZG9wdFJl
ZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IEJhc2VsaW5lSklUQ29k
ZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRD
YWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2ppdENvZGUtPm1fZXZhbENh
bGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOworICAgIG1faml0Q29k
ZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1vdmUobV91bmxpbmtlZFN0dWJJbmZvcyk7Cisg
ICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRh
Ymxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3Zl
KG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAg
PSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOworICAgIG1faml0Q29kZS0+YWRvcHRNYXRo
SUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2RlLT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUo
bV9jb25zdGFudFBvb2wpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgbV9qaXRDb2RlLT5tX2lz
U2hhcmVhYmxlID0gbV9pc1NoYXJlYWJsZTsKKyNlbHNlCisgICAgbV9qaXRDb2RlLT5tX2lzU2hh
cmVhYmxlID0gZmFsc2U7CisjZW5kaWYKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkK
LSAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCku
XG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRh
Z2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigp
KTsKKyAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAl
cCkuXG4iLCBtX3VubGlua2VkQ29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5z
dGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVu
dGFnZ2VkUHRyKCkpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWlu
VGhyZWFkKCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzQ29tcGlsYXRpb25U
aHJlYWQoKSk7CiAKQEAgLTk2OCwyNSArMTAxNywxNCBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6
OmZpbmFsaXplT25NYWluVGhyCiAKICAgICBtX2xpbmtCdWZmZXItPnJ1bk1haW5UaHJlYWRGaW5h
bGl6YXRpb25UYXNrcygpOwogCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9G
aXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmspOwotICAgIH0KLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9u
SGFuZGxlcnMoKTsgKytpKSB7Ci0gICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9jb2Rl
QmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3By
b2JsZW0vMzk0MzMzMTg+LgotICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBtX2NvZGVCbG9j
ay0+aml0Q29kZU1hcCgpLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFn
Z2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7Ci0gICAgfQotCiAgICAgaWYgKG1fcGNUb0Nv
ZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChX
VEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKKyAgICAgICAgbV9qaXRDb2RlLT5tX3BjVG9D
b2RlT3JpZ2luTWFwID0gV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKTsKIAogICAgIG1fdm0t
Pm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVC0+YWRkKAogICAg
ICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgpKSAvCi0gICAgICAgIHN0
YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOworICAg
ICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9u
c1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLnJlbGVh
c2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNv
ZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIENvbXBpbGF0aW9u
U3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTAzNiwxMSBAQCBzaXplX3QgSklUOjpjb2RlU2l6
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZlci0+c2l6ZSgpOwogfQogCi1Db21waWxh
dGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9y
dCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBkb01haW5UaHJlYWRQ
cmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAg
cmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVCbG9jayk7CiB9CiAKIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKQEAgLTEwNDIsMTggKzEwODAsMjggQEAg
dm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwogICAgICAgICBtX3ZtLT50
eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQcmVwYXJpbmcgZm9y
IEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJD
b3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3Rl
ckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgQVNTRVJUKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSA9PSBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7CiAKICAgICByZXR1
cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJPZmZzZXQoY29kZUJsb2Nr
LT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdp
c3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sq
IGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9j
ay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNl
dEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJldHVybiB2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9m
ZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2st
PnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IEpJ
VDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBy
ZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI4MzAxOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYg
KzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWwsIGV4cGVjdGVkKSBB
U1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wi
IHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4
cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAorI2luY2x1ZGUgIkJhc2VsaW5l
SklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQ
YXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgpAQCAtNDQsNiArNDUsNyBAQAog
I2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3Iu
aCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgorI2luY2x1ZGUgIkxMSW50RGF0YS5oIgog
I2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiVW51c2VkUG9pbnRlci5o
IgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTE0OSwxNCArMTUxLDE5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5mbzsKKyAgICAgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudDsKKyNlbHNlCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0OwogICAgICAgICBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyNlbmRpZgogICAgIH07CiAKICAgICB2b2lkIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNzIEpJVF9DTEFTU19B
TElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAgY2xhc3MgSklUX0NM
QVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgICAgICBmcmll
bmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YkNh
bGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEsNiArMTc4LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVu
dCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9mZnNldC4KICAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCA9IDI1NjsK
IAorICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAgICBwdWJsaWM6CiAg
ICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29kZUluZGV4IGxvb3BP
U1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAgICAgICAgIH5KSVQo
KTsKQEAgLTE3OCwyOCArMTg3LDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWTSYgdm0o
KSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAgICB2b2lkIGNvbXBp
bGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQpOwotICAgICAg
ICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBDb21w
aWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqKTsKICAgICAgICAg
c2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01haW5UaHJlYWRQcmVw
YXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBDb21waWxh
dGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9mZnNldCA9IEJ5dGVj
b2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVC
bG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7CisgICAgICAgICAg
ICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGls
ZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CisgICAgICAg
IHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7CiAg
ICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOwogCiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+
IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNl
Y29uZHMgdG90YWxDb21waWxlVGltZSgpOwogCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNfbWV0YWRhdGFHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0YVRhYmxlR1BSOwor
ICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX2NvbnN0YW50c0dQUiA9IExMSW50OjpS
ZWdpc3RlcnM6OnBiR1BSOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwog
ICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAgICAgIHZvaWQgbGlu
aygpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShKSVRDb21waWxh
dGlvbkVmZm9ydCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKENv
ZGVCbG9jayosIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAvLyBBZGQgYSBjYWxs
IG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KICAgICAgICAg
Q2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rp
b24pCkBAIC0yMjMsNiArMjM3LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAjZW5k
aWYKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQg
bG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJl
Zyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lk
IGxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJl
Zyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lk
IGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVn
KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRl
Y29kZT4KKyAgICAgICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSwgY29uc3QgQnl0
ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRl
Y29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZT4KKyAgICAgICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3Qg
Qnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVibGljOgorICAgICAg
ICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBHUFJSZWcpOworICAg
IHByaXZhdGU6CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJSZWcpOworICAgICAg
ICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisK
KyAgICAgICAgdm9pZCBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJl
c3VsdCA9IHJlZ1QwKTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRv
SGFuZGxlcikKICAgICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5k
KGp1bXBUb0hhbmRsZXIpOwpAQCAtMjU0LDYgKzI5NCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
dm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAgICAgICBz
dGQ6OmVuYWJsZV9pZl90PAorICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFy
YXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKKyAgICAgICAgICAg
ICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQg
IT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCisgICAgICAgICwgdm9pZD4gY29tcGls
ZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5r
SW5mb0NvbnN0YW50KTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAgICAgICAg
c3RkOjplbmFibGVfaWZfdDwKKyAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3Zh
cmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCisgICAgICAgICAg
ICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cworICAgICAgICAsIHZvaWQ+IGNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlu
a0luZm9Db25zdGFudCk7CisjZWxzZQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9j
YWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCkBAIC0y
NjUsOSArMzE4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgT3A6Om9wY29kZUlE
ID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFy
Z3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8
fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAgICAgICAg
ICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qKTsKKyNl
bmRpZgogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBib29sIGNvbXBp
bGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtl
ZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIGJv
b2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQgY29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CkBAIC0yODcsMTQgKzM0MSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJy
aWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9k
ZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKTsKKyAgICAg
ICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcik7CiAKICAgICAgICAgLy8gVGhp
cyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQg
cmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUm
LCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9m
aWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4g
dm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVnKTsKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShN
ZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEdQUlJlZyk7
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1ZhbHVlUmVncyk7CiAjZWxzZQogICAgICAgICB2
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOwpAQCAtMzA1LDggKzM1OCwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5
cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4K
ICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNv
ZGUpOwogCi0gICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lz
dGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKLSAg
ICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxs
R1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2Vs
bEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChj
b25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklE
IHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBF
Q01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01OTMsNyArNjQ4LDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9k
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpA
QCAtNjExLDcgKzY2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9n
ZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICNlbmRpZgogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1
dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKQEAgLTYyNywxNCArNjgxLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAogICAgICAgICB2b2lk
IGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNl
LCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlKTsKLSAgICAgICAg
dm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7
CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZp
cnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUp
OwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdG
dW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlv
biopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZl
VHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hl
Y2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICAgICAgICAgdm9pZCBlbWl0UmVz
b2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7CiAgICAgICAgIHZv
aWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1
Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjQ2LDcgKzcw
MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1
cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAg
IHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0
Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZvaWQgZW1pdE5vdGlm
eVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAgICAgdm9pZCBlbWl0
UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5k
aXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NSw2ICs3MDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20s
IFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7
CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBA
IC02NzYsMTMgKzczMSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYp
OwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBz
bG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsK
ICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xv
d19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0
X3RvX3Njb3BlR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYp
OwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IG9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfaGFuZGxlckdlbmVy
YXRvcihWTSYpOwpAQCAtNjk2LDMyICs3NDksMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
UmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7CiAgICAgICAg
IH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlw
ZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAg
ICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9S
KQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3Bl
VGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KLSAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1vZHVsZVZhciBiZWNh
dXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4gdXNlIGEgdGh1bmsu
Ci0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3ZSBkb24ndCB1c2Ug
dGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAgICAgICAgICAgcmV0dXJuICEo
cmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVs
ZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJB
VE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9y
KFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX1JFU09MVkVfU0NP
UEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQot
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BS
ZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKLQog
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1
ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mKTsKIAogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCisgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5l
cmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRG
cm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFy
KiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mLCBzdGQ6Om9wdGlvbmFs
PFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKwogICAgICAgICBKdW1wIGdl
dFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207CkBAIC03NjAsMTAgKzc5NywxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2Fs
bFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgdm9pZCBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChBZGRyZXNzLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIEFkZHJlc3MsIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4K
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2Rl
JiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAg
ICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1
bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIxLDIwICs4NTgsMjAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKEFkZHJlc3Mo
R1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkpOwogICAgICAgICB9CiAKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBl
bmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJs
ZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3Qg
Qnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFy
Z3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFk
YXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShieXRlY29kZSwgb3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlLCB0
eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRz
PE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVw
QXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5cGU+KHRhcmdldCwgYXJncy4uLik7
Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIw
LCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBB
ZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOwogICAg
ICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5h
bWUuLi4gQXJncz4KQEAgLTkxOSwyNSArOTU2LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBt
X2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQo
KSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAgICAgIGJvb2wgc2hv
dWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsgfQogI2Vs
c2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
ICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAg
ICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxh
dGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFsbCBjb2RlIGdldHMg
cHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIGZh
bHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5k
Q29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgdm9pZCBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAg
ICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFi
bGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRo
ZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCi0gICAgICAg
IC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhl
IGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9T
Y29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotICAgICAgICBCaW5h
cnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKKworICAgICAgICB2
b2lkIHJlc2V0U1AoKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKIApA
QCAtOTY0LDkgKzk5OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dp
dGNoZXM7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0
UHV0SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEJpbmFyeUFyaXRoUHJvZmlsZT4g
bV9jb3BpZWRBcml0aFByb2ZpbGVzOwotCiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hl
Y2tzOwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xs
YmFjazsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMDAwLDExICsxMDMxLDI2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoTWFwPGNvbnN0IEluc3RydWN0aW9uKiwg
VW5pcXVlUmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dl
bmVyYXRpb25TdGF0ZTsKIAogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAg
IGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9vbCBtX3Nob3VsZEVt
aXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4OwogCi0gICAgICAgIFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2ppdENvZGU7CisgICAg
ICAgIENvZGVCbG9jayogbV9wcm9maWxlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAg
VW5saW5rZWRDb2RlQmxvY2sqIG1fdW5saW5rZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisKKyAg
ICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRyPEJhc2VsaW5lSklU
Q29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9v
bDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2JhbE9iamVjdENvbnN0
YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAgICAgIEJh
ZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgICAgICBCYWc8Q2Fs
bExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgICAgICBCYWc8VW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICAgICAgRml4ZWRWZWN0b3I8
U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIEZpeGVkVmVjdG9y
PFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworCisgICAgICAgIHN0
cnVjdCBOb3RBQ29kZUJsb2NrIHsgfSBtX2NvZGVCbG9jazsKKworICAgICAgICBib29sIG1faXNT
aGFyZWFibGUgeyB0cnVlIH07CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDI4
MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBp
c09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjAp
OwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMyMCw3ICszMjEs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0K
IAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qy
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEp
OwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
cmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOworICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJl
Z1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBy
ZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
aW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApA
QCAtNTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCAKIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZChvcDIs
IHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0K
IApAQCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3Qg
SW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMg
PSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9u
VG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOwogICAgIC8vIEZJWE1F
OiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwg
c2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BO
ZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRl
UHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5MDQsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29w
X2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BB
ZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVEFkZElD
KiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEFkZD4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3MuYWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsK
ICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMp
OwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7CiB9CkBAIC05NDUs
MTAgKzk1MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAg
ICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhp
cywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUp
IHsKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJp
dGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAg
ICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0
aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3Mp
OwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUsMTAgKzEwMjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRN
YXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQu
aXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0
UmVncyk7CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsK
ICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdz
LCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdo
dFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwxMyArMTA2MiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUVW5hcnlNYXRoSUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBh
dGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pN
aWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJ
QykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pN
aWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3Ms
IFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmls
ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElD
KSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihy
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1Bh
dGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwxMyArMTEyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRo
UmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pK
TWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3Rl
ZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0
LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0g
ZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVw
YXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRj
aEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0
ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRv
IHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExNjYsNyArMTE3NSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQot
ICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmls
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFu
ZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCBy
aWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4
ICsxMjIwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQ
cm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNzLmFkZEpJVE11bElD
KGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVN
dWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChj
b25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9t
YXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0
aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxP
cFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1p
dFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGVtaXRT
dG9yZShkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQo
KSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QxLCByZWdUMCk7CiB9CiAKQEAgLTE1Nyw3ICsxNTcs
NyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIGludCBhcmdDb3VudCA9IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0
ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2Fs
bChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCkBAIC0xOTIsNyArMTkyLDcgQEAgSklUOjpjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzaXplT3BlcmF0aW9uID0g
b3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50czsKICAgICBlbHNlCiAgICAgICAg
IHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzOwotICAgIGNhbGxP
cGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zm
c2V0KTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIG1fcHJvZmlsZWRCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIC1maXJzdEZyZWVSZWdp
c3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1maXJzdEZy
ZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0aGlzLCByZXR1
cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihz
dGFja0FsaWdubWVudEJ5dGVzKCksIDYgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwpAQCAtMjAyLDcgKzIwMiw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25T
ZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNldHVwT3BlcmF0
aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJhdGlvbihzZXR1
cE9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJl
Z3MocmVnVDIsIHJlZ1Q0KSwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKHNldHVwT3BlcmF0aW9uLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBy
ZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0KSwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1Qw
KTsKICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRo
ZSBhcmd1bWVudCBjb3VudC4KQEAgLTIzMiwxMCArMjMyLDEwIEBAIGJvb2wgSklUOjpjb21waWxl
Q2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNf
Y2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJS
ZWdpc3RlciwgcmVnVDEpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNz
KHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2Rl
LnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IHJlZ1QxLCByZWdUMik7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7
CiAKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
Y29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGluZm8g
PSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9wcm9maWxlZEJsb2NrLT5hZGRDYWxsTGlu
a0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwo
Q2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAt
Ynl0ZWNvZGUubV9hcmd2OwpAQCAtMjU4LDggKzI1OCw4IEBAIHZvaWQgSklUOjpjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zm
c2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBlbWl0TG9hZChjYWxs
ZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGVtaXRWaXJ0dWFsQ2FsbCgq
bV92bSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENh
bGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjg2LDExICsyODYsMTEgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICovCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZv
ID0gbnVsbHB0cjsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBp
bmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCkpOworICAgICAgICBpbmZvID0gbV9wcm9maWxlZEJsb2NrLT5hZGRDYWxsTGlua0luZm8o
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBjb21waWxlU2V0dXBGcmFtZShieXRl
Y29kZSwgaW5mbyk7CiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCiAgICAgCi0gICAg
YXV0byBieXRlY29kZUluZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rp
b24pOworICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fcHJvZmlsZWRCbG9jay0+Ynl0ZWNvZGVJ
bmRleChpbnN0cnVjdGlvbik7CiAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJ
bmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9j
YXRpb25CaXRzKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSk7CiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOyAvLyByZWdUMSwgcmVn
VDAgaG9sZHMgY2FsbGVlLgpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BD
YWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogICAgIG1f
Y2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gbGFi
ZWwoKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM0MSwx
MiArMzQxLDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAg
ICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAg
ICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKICAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNs
b3dQYXRoKCptX3ZtLCAqdGhpcyk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0z
OTUsNyArMzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgog
ICAgIEpTVmFsdWVSZWdzIG5leHRSZWdzID0gSlNWYWx1ZVJlZ3ModGFnTmV4dEdQUiwgcGF5bG9h
ZE5leHRHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgIEpJVFR5cGU6OkJhc2Vs
aW5lSklULAogICAgICAgICBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwKQEAg
LTQxMCw3ICs0MDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IElu
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFw
cGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG5leHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG5leHRSZWdzKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgbmV4dFJlZ3MpOwogCiAgICAgZmFzdENh
c2UubGluayh0aGlzKTsKQEAgLTQ0MCwxMCArNDM5LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSgKLSAgICAgICAgYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAgICAgICBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCAvLyBtZXRhZGF0YQogICAgICAgICBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgogICAgICAgICBuZXh0VlJlZywgLy8gcmVz
dWx0Ci0gICAgICAgIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Ly8gYXJnMQorICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCAvLyBhcmcxCiAgICAgICAgIGdlbi5zdHViSW5mbygpLCAvLyBhcmcyCiAgICAgICAg
IEpTVmFsdWVSZWdzKHRhZ0l0ZXJhdG9yR1BSLCBwYXlsb2FkSXRlcmF0b3JHUFIpLCAvLyBhcmcz
CiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKQEAgLTQ1Miw3ICs0NTEsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgYXV0byBkb25lID0ganVtcCgp
OwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0
ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5n
bG9iYWxPYmplY3QoKSkpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwogfQpAQCAtNDYwLDcgKzQ1
OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKIHZvaWQgSklU
OjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwog
ICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewogICAgICAgICBzd2l0Y2ggKGlu
c3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNhc2UgTmFycm93OiByZXR1cm4gaXRlcmF0
b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC01MDYsNyArNTA1LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh0
YWdWYWx1ZUdQUik7CiAgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHBheWxvYWRWYWx1ZUdQUik7
CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxv
Y2ssCisgICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICBKSVRUeXBlOjpC
YXNlbGluZUpJVCwKICAgICAgICAgICAgIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwKICAg
ICAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpKSwKQEAgLTUzMywxMCArNTMyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9y
X25leHQoY29uc3QgSW4KICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDY7CiAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Q3OwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRp
b25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModGFnRG9uZUdQUiwgcGF5
bG9hZERvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCks
IEpTVmFsdWVSZWdzKHRhZ0RvbmVHUFIsIHBheWxvYWREb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogCiAgICAgICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssCisgICAgICAgICAgICBtX3By
b2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICBKSVRUeXBlOjpCYXNlbGluZUpJVCwKICAgICAgICAg
ICAgIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgICAgIENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwKQEAgLTU4OCwxMCAr
NTg3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICAgICAgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZEJsb2NrKSwgLy8gbWV0YWRhdGEKICAgICAgICAgICAgIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgLy8gb3BlcmF0aW9uCiAgICAgICAgICAgICBkb25lVlJlZywgLy8gcmVzdWx0
Ci0gICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IC8vIGFyZzEKKyAgICAgICAgICAgIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIC8vIGFyZzEKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLCAvLyBhcmcy
CiAgICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJl
c3VsdEdQUiksIC8vIGFyZzMKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKQEAgLTYw
Miw3ICs2MDEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAg
IG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRo
cm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0
ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5n
bG9iYWxPYmplY3QoKSkpOwogICAgIH0KIAogICAgIHsgICAKQEAgLTYxOCwxMCArNjE3LDEwIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKAotICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCAvLyBtZXRhZGF0YQorICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZEJsb2NrKSwgLy8gbWV0YWRhdGEKICAgICAgICAgICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSwgLy8gb3BlcmF0aW9uCiAgICAgICAgICAgICB2YWx1ZVZSZWcsIC8vIHJlc3VsdAotICAgICAg
ICAgICAgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcx
CisgICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCAvLyBhcmcxCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKSwgLy8gYXJnMgogICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3ModGFnSXRlclJlc3VsdEdQUiwgcGF5bG9hZEl0ZXJSZXN1bHRHUFIp
LCAvLyBhcmczCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOyAvLyBhcmc0CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0
LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNs
b3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC00NCw3ICs0NSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1p
dFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3Bv
aW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDE4ICs1NCwxOCBA
QCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3Mg
JiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29k
ZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5z
aWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFy
Z0NvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVj
b2RlLCBjaGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8
aW50PihzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkp
OwogCisKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2Zp
bGluZygpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
KHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMo
MCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRh
ZGF0YSwgY2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAg
ICAgc3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsK
ICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyArNzksNyBAQCBzdGQ6
OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6
Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
IGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNv
bnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9D
b25zdGFudCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90
aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJn
dW1lbnRzOwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JG
b3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJh
dGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9u
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCAtZmly
c3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCByZWdUMSwg
LWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJh
bWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSks
IHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEwMywxNiBAQCBKSVQ6
OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVwT3BlcmF0
aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxzZQogICAg
ICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGNh
bGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVy
YXRpb24sIHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAg
ICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJn
dW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFkZHJlc3NP
Zk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJp
Z2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1Qy
LCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsKKyAgICBs
b2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUs
IHJlZ1QzLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExp
bmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKICAgICBu
b3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCkBA
IC0xMjcsMTYgKzEzMSwxNSBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikK
IHRlbXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYg
Ynl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJl
Z1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2Fs
bEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOworICAgIHJlc2V0U1AoKTsKIAotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJldHVyblZhbHVlR1BSKSk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3Vs
dChieXRlY29kZSk7CiAKQEAgLTE0OCw3ICsxNTEsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlu
a0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJ
bmZvcy5hZGQoQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENh
bGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAtMTU2LDQzICsxNTksNDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0
ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChB
ZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVt
aXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxP
YmplY3QoKm1fdm0sIGluZm8pOworICAgIHJlc2V0U1AoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVz
dWx0KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29t
cGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCitib29sIEpJ
VDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNp
Z25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIHRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2Fs
bCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5k
ZXgpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2Rl
LCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgs
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0gICAg
Q2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEubnVtUGFz
c2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdp
c3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRhLm51bUxv
Y2FscyA9CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxl
RGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZsZURh
dGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEtPm51
bVBhcmFtZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CisgICAg
c2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0
ZXI7CisgICAgc2h1ZmZsZURhdGEtPm51bUxvY2FscyA9CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJn
diAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1
ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICBzaHVmZmxlRGF0YS0+
YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9
CisgICAgICAgIHNodWZmbGVEYXRhLT5hcmdzW2ldID0KICAgICAgICAgICAgIFZhbHVlUmVjb3Zl
cnk6OmRpc3BsYWNlZEluSlNTdGFjaygKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAg
ICAgICAgRGF0YUZvcm1hdEpTKTsKICAgICB9Ci0gICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KLSAg
ICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0gICAgc2h1
ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAgICBpbmZv
LT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICBzaHVmZmxlRGF0YS0+Y2Fs
bGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAgc2h1
ZmZsZURhdGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogCi0gICAgSnVtcExpc3Qgc2xv
d1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1
ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBsb2Fk
Q29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKKyAgICBKdW1wTGlzdCBzbG93
UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBy
ZWdUMCwgcmVnVDIsIFsmXSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1
ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgIH0pOwogICAgIGFkZFNsb3dDYXNl
KHNsb3dQYXRocyk7CisKKyAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZv
LT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7CisKICAgICBhdXRvIGRv
bmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0yMTgsMTQg
KzIyNSwyNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAg
ICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0g
Q2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLwot
ICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9w
X2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8o
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRl
Y29kZSwgaW5mbyk7CisKKyAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsK
KyAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKSB7CisgICAgICAgIGluZm8gPSBtX3Vu
bGlua2VkQ2FsbHMuYWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlw
ZUZvcihvcGNvZGVJRCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZvKTsKKworICAgICAg
ICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRl
eCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9u
SW5mbygpKTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS51bmxpbmtlZENhbGxMaW5rSW5mbyA9IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3Rh
bnQ7CisgICAgfQorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQp
OwogCiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRlY29kZUlu
ZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOwor
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBo
b2xkcyBjYWxsZWUuCkBAIC0yMzQsMTYgKzI1MiwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgp
ID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZv
OjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAgaWYgKGNv
bXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQorICAgIGlm
IChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZv
Q29uc3RhbnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0
YW50LCByZWdUMik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAgICBh
dXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwg
cmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7CisgICAgICAgIGF1dG8g
c2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhp
cywgcmVnVDAsIHJlZ1QyLCBbJl0gewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CiAgICAgICAg
IH0pOwpAQCAtMjUzLDE0ICsyNjcsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBzbG93UGF0aHMg
PSBpbmZvLT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpV
c2VEYXRhSUM6Olllcyk7CisgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRE
YXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyKTsKICAgICBhdXRvIGRvbmVMb2NhdGlv
biA9IGxhYmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0
aW9uOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBy
ZXNldFNQKCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CkBAIC0yNzMs
MjEgKzI4NiwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOwogCiAgICAg
aWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAg
ICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgq
bV92bSwgKnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKCptX3Zt
LCAqdGhpcywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJl
dHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIHJlc2V0U1AoKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgZW1pdFB1dENhbGxSZXN1
bHQoYnl0ZWNvZGUpOwpAQCAtMzk1LDE3ICs0MDcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRl
cmF0b3Jfb3Blbihjb25zdCBJbgogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0o
KS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwogICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBtb3Zl
KHJlZ1QwLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
Uik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtl
ZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6
OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28g
d2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlc3VsdEdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX25leHQsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgZmFzdENhc2UubGluayh0
aGlzKTsKIH0KQEAgLTQxNiwxMCArNDQyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJh
dG9yX29wZW4oY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4o
aW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBT
bG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgaXRl
cmF0b3JHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgSnVtcExpc3Qg
bm90T2JqZWN0OwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9y
R1BSKSk7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckdQ
UikpOwpAQCAtNDMyLDE5ICs0NTYsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29ucwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0
ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBt
b3ZlKGl0ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3Vt
ZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4
dFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
CiAgICAgYXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhy
b3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogCiAgICAgZG9uZS5s
aW5rKHRoaXMpOwogfQpAQCAtNDUyLDcgKzQ3NCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9uID0gKFsm
XSAoKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKICAgICAgICAg
Y2FzZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25hcnJvdzsKQEAgLTQ3
MCw1MCArNDkxLDc5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4K
ICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRpb25Nb2Rl
OjpHZW5lcmljKSkpOwogCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBvcjgoVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwg
QWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2l0ZXJhdGlvbk1ldGFkYXRhLnNlZW5Nb2Rlcykp
OworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRh
dGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6
b2Zmc2V0T2ZTZWVuTW9kZXMoKSwgcmVnVDApOworICAgIG9yMzIoVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgcmVnVDApOworICAgIHN0
b3JlOFRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6
Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zm
c2V0T2ZTZWVuTW9kZXMoKSk7CiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yTmV4dD4oaW5z
dHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgYWR2YW5jZVRvTmV4dENoZWNr
cG9pbnQoKTsKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2JqZWN0KSBp
biByZWdUMAogCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGl0ZXJS
ZXN1bHRHUFIgPSByZWdUMjsKLSAgICBHUFJSZWcgZG9uZUdQUiA9IHJlZ1QxOwotICAgIC8vIGl0
ZXJSZXN1bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0IGJ5IGlkIGJlbG93
LgotICAgIG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgaXRl
ckNhbGxSZXN1bHRHUFIpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoaXRlclJlc3VsdEdQUik7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSBiYXNlR1BSKTsKKworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2Vy
dmVkUmVncyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAg
ICAgcHJlc2VydmVkUmVncy5hZGQodmFsdWVHUFIpOworICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFk
ZChpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKLSAgICAgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVz
LT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhk
b25lR1BSKSwgcmVnVDMsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCisgICAgICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1l
cy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQ
UiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAg
ICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhp
dCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0p
OworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7
IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
b25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9
CiAKLQogICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7Ci0gICAgICAgIEdQ
UlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
KGRvbmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
CisgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNo
SWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwg
ZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2Jh
bEdQUik7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbEdQUik7CisK
KyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BS
LCBiYXNlR1BSKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
dm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAg
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9H
UFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdl
IG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRH
UFIgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
cmVzdWx0R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpA
QCAtNTI3LDU5ICs1NzcsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQo
Y29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rp
b24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RG
b3JDaGVja3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVz
dWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyOwor
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsK
ICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9u
ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAg
ICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsK
IAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMt
PmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9i
amVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZO
b3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAg
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJS
ZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJh
d0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEp
OwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1Qw
KTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIp
OwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAg
ICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0
SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVn
ID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdU
MDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFt
ZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBB
ZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAg
bW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRl
Y29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODMwMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsOCArMzIsMTEgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNs
dWRlICJSZWdpc3RlclNldC5oIgogCisKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBQQ1RvQ29k
ZU9yaWdpbk1hcDsKKwogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBDb21tb25EYXRhOwogY2xhc3Mg
SklUQ29kZTsKQEAgLTE1OSwxMCArMTYyLDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29s
IHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgewotICAgICAgICBpZiAoIU9wdGlvbnM6
OnVzZURhdGFJQygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoSklU
Q29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgp
OwogICAgIH0KIApAQCAtMjIzLDYgKzIyNiw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTaGFy
ZWQoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlQXR0cmlidXRlID09IFNoYXJlQXR0cmlidXRlOjpT
aGFyZWQ7IH0KIAorICAgIHZpcnR1YWwgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2lu
TWFwKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorCiBwcml2YXRlOgogICAgIEpJVFR5cGUgbV9qaXRU
eXBlOwogICAgIFNoYXJlQXR0cmlidXRlIG1fc2hhcmVBdHRyaWJ1dGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAkocmV2aXNpb24g
MjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgdm9pZCBKSVRDb21waWxhdGlvbktl
eTo6ZHVtcChQcmludFN0cmVhbQogICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBvdXQucHJpbnQoIihDb21waWxlIG9mICIsICptX3Byb2Zp
bGVkQmxvY2ssICIgd2l0aCAiLCBtX21vZGUsICIpIik7CisgICAgb3V0LnByaW50KCIoQ29tcGls
ZSBvZiAiLCBSYXdQb2ludGVyKG1fY29kZUJsb2NrKSwgIiB3aXRoICIsIG1fbW9kZSwgIikiKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvbXBpbGF0aW9uS2V5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb21waWxhdGlvbktleS5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDU3ICszMCw1NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgQ29kZUJsb2NrOwotY2xh
c3MgQ29kZUJsb2NrU2V0OworY2xhc3MgSlNDZWxsOwogCiBjbGFzcyBKSVRDb21waWxhdGlvbktl
eSB7CiBwdWJsaWM6CiAgICAgSklUQ29tcGlsYXRpb25LZXkoKQotICAgICAgICA6IG1fcHJvZmls
ZWRCbG9jayhudWxscHRyKQorICAgICAgICA6IG1fY29kZUJsb2NrKG51bGxwdHIpCiAgICAgICAg
ICwgbV9tb2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uKQogICAgIHsK
ICAgICB9CiAgICAgCiAgICAgSklUQ29tcGlsYXRpb25LZXkoV1RGOjpIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhudWxscHRyKQorICAgICAgICA6
IG1fY29kZUJsb2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9tb2RlKEpJVENvbXBpbGF0aW9uTW9k
ZTo6REZHKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgSklUQ29tcGlsYXRpb25LZXkoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSkKLSAgICAgICAgOiBt
X3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKKyAgICBKSVRDb21waWxhdGlvbktleShKU0Nl
bGwqIHByb2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQorICAgICAgICA6IG1f
Y29kZUJsb2NrKHByb2ZpbGVkQmxvY2spCiAgICAgICAgICwgbV9tb2RlKG1vZGUpCiAgICAgewog
ICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgPT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJ
bnZhbGlkQ29tcGlsYXRpb247CisgICAgICAgIHJldHVybiAhbV9jb2RlQmxvY2sgJiYgbV9tb2Rl
ID09IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOwogICAgIH0KICAgICAK
ICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSAhPSBKSVRDb21waWxhdGlvbk1vZGU6
OkludmFsaWRDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuICFtX2NvZGVCbG9jayAmJiBtX21v
ZGUgIT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CiAgICAgfQogICAg
IAotICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZmls
ZWRCbG9jazsgfQogICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9tb2RlOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEpJVENvbXBpbGF0aW9u
S2V5JiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3Byb2ZpbGVkQmxvY2sg
PT0gb3RoZXIubV9wcm9maWxlZEJsb2NrCisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jayA9PSBv
dGhlci5tX2NvZGVCbG9jawogICAgICAgICAgICAgJiYgbV9tb2RlID09IG90aGVyLm1fbW9kZTsK
ICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gV1RGOjpwYWlySW50SGFzaChXVEY6OlB0ckhhc2g8Q29kZUJsb2NrKj46Omhhc2gobV9w
cm9maWxlZEJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8SklUQ29tcGls
YXRpb25Nb2RlPjo6dHlwZT4obV9tb2RlKSk7CisgICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRI
YXNoKFdURjo6UHRySGFzaDxKU0NlbGwqPjo6aGFzaChtX2NvZGVCbG9jayksIHN0YXRpY19jYXN0
PHN0ZDo6dW5kZXJseWluZ190eXBlPEpJVENvbXBpbGF0aW9uTW9kZT46OnR5cGU+KG1fbW9kZSkp
OwogICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAogcHJp
dmF0ZToKLSAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKKyAgICAvLyBFaXRoZXIgQ29k
ZUJsb2NrKiBvciBVbmxpbmtlZENvZGVCbG9jayogZm9yIGJhc2xlbGluZSBKSVQuCisgICAgSlND
ZWxsKiBtX2NvZGVCbG9jazsKICAgICBKSVRDb21waWxhdGlvbk1vZGUgbV9tb2RlOwogfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKKyNpbmNsdWRlICJK
SVQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1Yklu
Zm8uaCIKIApAQCAtNDYsMTAgKzQ3LDkgQEAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBnYXJi
YWdlU3R1YkluZgogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJh
dG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQotICAgIDogbV9jb2Rl
QmxvY2soY29kZUJsb2NrKQotICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCisgICAgOiBtX2ppdFR5
cGUoaml0VHlwZSkKIHsKLSAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9j
ay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8o
KTsKKyAgICBtX3N0dWJJbmZvID0gY29kZUJsb2NrID8gY29kZUJsb2NrLT5hZGRTdHViSW5mbyhh
Y2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1Yklu
Zm8tPmNhbGxTaXRlSW5kZXggPSBjYWxsU2l0ZTsKIAogICAgIG1fc3R1YkluZm8tPnVzZWRSZWdp
c3RlcnMgPSB1c2VkUmVnaXN0ZXJzOwpAQCAtNTksNyArNTksNiBAQCB2b2lkIEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1
ZmZlciYgc2xvd1BhdGgsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBz
dGFydCkKIHsKICAgICBtX3N0dWJJbmZvLT5zdGFydCA9IHN0YXJ0OwotCiAgICAgbV9zdHViSW5m
by0+ZG9uZUxvY2F0aW9uID0gZmFzdFBhdGgubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPiht
X2RvbmUpOwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkKQEAgLTY3
LDYgKzY2LDE1IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAg
IG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9uT2Y8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc2xvd1BhdGhCZWdpbik7CiB9CiAKK3ZvaWQgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGpp
dCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBtX3N0YXJ0
ID0gaml0LmxhYmVsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1f
aml0VHlwZSkpOworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsK
KyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsK
KyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJ
ZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUg
YWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1
ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTEx
MCw3ICsxMTgsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycywKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJl
Z3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlw
ZSBhY2Nlc3NUeXBlKQogICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUs
IGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2
YWx1ZSwgc3R1YkluZm9HUFIpCi0gICAgLCBtX2lzTGVuZ3RoQWNjZXNzKHByb3BlcnR5TmFtZS51
aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAg
ICAsIG1faXNMZW5ndGhBY2Nlc3MoY29kZUJsb2NrICYmIHByb3BlcnR5TmFtZS51aWQoKSA9PSBj
b2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChiYXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9CkBAIC0x
MjAsNiArMTI4LDM1IEBAIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGEK
ICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBtX2lzTGVuZ3RoQWNjZXNzID8gSW5saW5lQWNj
ZXNzOjpzaXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0
eUFjY2VzcygpKTsKIH0KIAorc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNz
KEpJVCYgaml0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBiYXNlLCBHUFJSZWcgc2NyYXRj
aCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisK
KyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBq
aXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZz
ZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHJvcGVydHkoYmFzZSwgc2NyYXRjaCwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisK
KyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmZhckp1bXAoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZD
b2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hlZC5saW5rKCZq
aXQpOworfQorCit2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQ
UikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7
CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0
dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGpp
dCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3Vs
dCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKworCiBKSVRHZXRCeUlkV2l0aFRo
aXNHZW5lcmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcigKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxT
aXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAg
IENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIHZhbHVlLCBKU1ZhbHVlUmVncyBiYXNl
LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTM4LDYgKzE3
NSwxOCBAQCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2VuZXJhCiAgICAgZ2Vu
ZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3Mo
KSk7CiB9CiAKK3ZvaWQgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1
YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0
VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25z
dGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGdlbmVyYXRlR2V0QnlJZElubGluZUFj
Y2VzcyhqaXQsIHN0dWJJbmZvR1BSLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
YmFzZSwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnNjcmF0Y2gsIEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgbV9kb25lID0gaml0Lmxh
YmVsKCk7Cit9CisKIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IoCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgCkBAIC0x
NDksNiArMTk4LDM0IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IK
ICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzLmNsZWFyKHNjcmF0Y2gpOwogfQogCit2b2lk
IEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQm
IGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0
ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5m
b0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRj
aDsKKyAgICBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0
Y2gyOworICAgIEdQUlJlZyB2YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7
CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
KCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gpOwor
ICAgIGppdC5zdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgYmFzZSwgc2NyYXRj
aCwgc2NyYXRjaDIpOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tp
cElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigp
KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0KTsKKyAg
ICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogdm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpn
ZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCiB7CiAgICAgZ2VuZXJhdGVGYXN0
Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlSZXBsYWNlKCkpOwpAQCAt
MjAwLDcgKzI3Nyw3IEBAIHZvaWQgSklURGVsQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAK
ICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyht
X2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5j
YWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7
CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5t
X3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRT
dHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0g
aml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTIzNiw3
ICszMTMsNyBAQCB2b2lkIEpJVERlbEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhCiAgICAg
bV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRU
eXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9z
dHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAg
ICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJv
dXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5w
YXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0yNzAsNyArMzQ3
LDcgQEAgdm9pZCBKSVRJbkJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIG1fc3Rh
cnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkp
IHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1Yklu
Zm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAg
aml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5l
UHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hh
YmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtMzAwLDYgKzM3NywzMiBA
QCB2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0CiAgICAgZ2VuZXJhdGVG
YXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9
CiAKK3ZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAg
bV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywg
c3R1YkluZm9HUFIpOworCisgICAgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzY3Jh
dGNoOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSgpKSk7CisgICAgaml0LmJveEJvb2xlYW4odHJ1ZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQg
fSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNj
ZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHVi
Um91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hlZC5saW5rKCZqaXQpOworICAgIG1fZG9uZSA9
IGppdC5sYWJlbCgpOworfQorCiBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpKSVRJbnN0YW5jZU9m
R2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LAogICAgIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFs
dWUsIEdQUlJlZyBwcm90b3R5cGUsIEdQUlJlZyBzdHViSW5mb0dQUiwKQEAgLTMzMiw3ICs0MzUs
NyBAQCB2b2lkIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzCiAgICAgbV9zdGFy
dCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkg
ewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5m
byksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBq
aXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQ
UiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQ
dHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFi
bGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0zNjgsNyArNDcxLDcgQEAg
dm9pZCBKSVRHZXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBq
aXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBt
X3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZh
ckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFn
KTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVt
cCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtNDA1LDcgKzUwOCw3IEBAIHZvaWQg
SklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0ID0gaml0Lmxh
YmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHVi
SW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRk
cmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1w
KENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsK
ICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTQ0MCw3ICs1NDMsNyBAQCB2b2lkIEpJVFBy
aXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcjo6Z2VuCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgp
OwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8t
Pm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
bV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29k
ZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0g
ZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAg
bV9kb25lID0gaml0LmxhYmVsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAi
Q29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvblZhbGlkYXRpb24uaCIKICNpbmNs
dWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUg
IlB1dEtpbmQuaCIKQEAgLTM4LDExICszOSwxMTggQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBD
YWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVCbG9j
azsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVu
dW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKK3N0cnVjdCBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVn
VDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307
CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpy
ZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Qy
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsK
K307CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICAvLyBXZSByZWx5
IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0
ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgorICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworICAg
IHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZv
OjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86
OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5mbzo6
cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUkluZm86OmFyZ3VtZW50R1BSMzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OmFyZ3VtZW50R1BS
MTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86Om5vbkFy
Z0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpu
b25BcmdHUFIxOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fz
c2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkp
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOwor
fTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGRvbnRDbG9iYmVyUmVnaXN0ZXIgPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHRoaXNW
YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpz
Y3JhdGNoOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBH
UFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUklu
Zm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGUgPSBHUFJJbmZv
OjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86
OnJlZ1Q0OworfTsKKworc3RydWN0IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmQgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNf
YXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3Rh
dGljX2Fzc2VydChicmFuZCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsK
K307CisKIGNsYXNzIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcigpIHsgfQpAQCAtNjIsMTIgKzE3MCwxOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBmaW5hbGl6ZSgKICAgICAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVm
ZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIsCiAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCk7Ci0gICAgCisKKyAgICB2b2lkIGdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0
YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogbV91bmxpbmtlZFN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkgfTsKKwogcHJvdGVjdGVkOgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAg
SklUVHlwZSBtX2ppdFR5cGU7CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIG1fc3R1YkluZm87CiAK
K3B1YmxpYzoKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgbV9kb25lOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Nsb3dQ
YXRoQmVnaW47CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7CkBAIC05
OCw3ICsyMTIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpT
VmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsK
K3B1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAK
QEAgLTExMSw2ICsyMjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpT
VmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUpOwogICAgIAog
ICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3Rh
bnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzTGVuZ3Ro
QWNjZXNzOwpAQCAtMTI0LDYgKzIzOSw3IEBAIHB1YmxpYzoKICAgICAgICAgQ29kZUJsb2NrKiwg
SklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgICAgIEpTVmFsdWVSZWdzIHZh
bHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJ
bmZvR1BSKTsKIAorICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYs
IHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAgICAgdm9p
ZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiB9OwogCkBAIC0xMzIsMTAgKzI0
OCwxMSBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAog
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLAotICAgICAgICBKU1ZhbHVl
UmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUs
IFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxs
U2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRl
bnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQ
UlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKICAg
ICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lk
IGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0Nv
bnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogICAgIAogICAgIFZfSklUT3BlcmF0aW9uX0dT
c2lKSkMgc2xvd1BhdGhGdW5jdGlvbigpOwogCkBAIC0xNjMsMTEgKzI4MCw5IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRl
OgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBh
dGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0xOTEsOCArMzA2LDYgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXBy
aXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yMTYsOCArMzI5
LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVy
Jik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0y
NDEsOCArMzUyLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3Jv
QXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3Rh
cnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9
OwogCkBAIC0yNTUsNiArMzY0LDcgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVlUmVncyBiYXNl
LCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIAogICAgIHZvaWQgZ2Vu
ZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBz
dHViSW5mb0dQUik7CiB9OwogCiBjbGFzcyBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGZpbmFsIDog
cHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTI3Nyw4ICszODcsNiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwg
TGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVt
cCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSArNDEwLDkgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRl
OgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3Jlc3VsdDsKIAot
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQ
YXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzMwLDggKzQzNiw2IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
IAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklU
Ojppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJl
dHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91Ymxl
KCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
bnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAo
IXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAgICAgICAgLy8g
QWxsIGxpbmsgdGltZSBjb25zdGFudHMgYXJlIGNlbGxzLgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzQ2VsbCgpOwogfQog
CiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJl
Z2lzdGVyIHNyYykKIHsKICAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7Ci0gICAgcmV0dXJu
IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0g
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKKyAgICByZXR1cm4g
bV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAogQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwg
VmlydHVhbFJlZ2lzdGVyIGVudHJ5KQpAQCAtMTU2LDM2ICsxODEsMzYgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeAogI2VuZGlmCiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0
YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitB
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1
YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQ
UjIsIHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGVt
aXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCiAg
ICAgcmV0dXJuIGNhbGw7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgZnVuY3Rpb24sIFZp
cnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBBZGRyZXNzIGZ1bmN0aW9u
LCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJu
VmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZh
bHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9j
ay0+aXNLbm93bkNlbGwocmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpCiAgICAgICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjA1LDcgKzIzMCw3IEBAIEFMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcygKIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRv
TmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUlu
ZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBw
YXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFT
U0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVj
a3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byByZXN1bHQgPSBtX2NoZWNrcG9pbnRM
YWJlbHMuYWRkKG1fYnl0ZWNvZGVJbmRleCwgbGFiZWwoKSk7CkBAIC0yMTUsNyArMjQwLDcgQEAg
aW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludAogaW5saW5lIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCBqdW1wKQogewogICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRl
Y29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxp
bmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3Bv
aW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAg
YXV0byBpdGVyID0gbV9jaGVja3BvaW50TGFiZWxzLmZpbmQobV9ieXRlY29kZUluZGV4KTsKQEAg
LTI5MywyOSArMzE4LDI5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRDb3VudChBYnN0
cmEKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1
YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CisgICAgaWYgKCFzcmMuaXNDb25zdGFu
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAg
QVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CiAKLSAgICAvLyBXZSdyZSBpbiBhIHNpbXBs
ZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGly
ZWN0Ci0gICAgLy8gc3RvcmUuCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdG9yZTY0KHZhbHVl
LmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSNlbHNlCiAgICAgRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CiAgICAgc3RvcmUzMih2YWx1ZS5wYXlsb2Fk
R1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7CiAgICAgc3RvcmUzMih2YWx1ZS50
YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOwotI2VuZGlmCiB9CisjZW5kaWYKIAog
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Nh
bWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1
ZSwgdm9pZD4gSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBi
eXRlY29kZSkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogI2Vsc2UKICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSk7CiAjZW5kaWYKQEAgLTMyMyw0MSArMzQ4LDM3IEBAIGlubGluZSBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pIHsgfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRh
ZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWVSZWdzIHZhbHVlKQorI2lmIFVTRShKU1ZBTFVFNjQpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQog
ewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNv
ZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7Ci19CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQot
aW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFs
dWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBwdHJkaWZmX3Qg
b2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRh
VGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVj
b2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tl
dCgpOworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zm
c2V0KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlc3Vs
dFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgR1BSUmVnIHJlc3Vs
dFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVn
cyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1Zh
bHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJv
ZmlsZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCiB7CiAgICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgYXJyYXlQcm9maWxlLT5hZGRyZXNz
T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YShzY3Jh
dGNoR1BSLCBieXRlY29kZSwgb2Zmc2V0T2ZBcnJheVByb2ZpbGUpOwogICAgIH0KIH0KIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BS
KQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBSZWdpc3Rl
cklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAoc2hvdWxkRW1p
dFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhj
ZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRyZXNzKGFycmF5UHJvZmlsZUdQUiwgQXJyYXlQcm9m
aWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSkpOwotICAgIH0KKyAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVj
dHVyZUlEKCksIGNlbGxHUFIsIHNjcmF0Y2hHUFIpOwogfQogCiBBTFdBWVNfSU5MSU5FIGludDMy
X3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKQEAgLTM4
MCw3ICs0MDEsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyCiBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0
YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0
YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAg
ICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsK
ICAgICB9IGVsc2UKICAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsK
QEAgLTQ5Niw3ICs1MTcsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVn
aXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1
YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVn
KSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29u
c3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UK
QEAgLTUwNiw3ICs1MjcsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1
YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewotICAgIGlmICghbV9jb2RlQmxvY2st
PmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAg
ICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OwogICAgICAgICBlbHNlCkBAIC01MTQsMTEgKzUzNSw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6
OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJu
IHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwot
fQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwg
aW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkp
IHsKQEAgLTU0NCwxMSArNTYwLDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRW
aXJ0dWFsUmUKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRo
YXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7
Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsK
LSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7Ci0gICAgICAgIGVsc2UKKyAgICAg
ICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2Rl
QmxvY2soc3JjKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBtb3ZlKEltbTY0KEpTVmFsdWU6
OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGxvYWRD
b2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTU2NiwxMSArNTgyLDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxS
ZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMp
Ci17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBz
dG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01OTUsNyArNjA2LDcgQEAgQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxS
ZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHZSZWcp
KQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY0OCw3IEBAIEFMV0FZU19JTkxJTkUg
aW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBpZiAodGFyZ2V0KQogICAgICAgICBy
ZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNl
dChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGll
ZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQotewotICAgIHVuc2lnbmVkIGtleSA9
IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hNYXAgZG9lc24ndCBsaWtlIDAgYXMg
YSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRHZXRQdXRJbmZvcy5maW5kKGtleSk7
Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0SW5mb3MuZW5kKCkpCi0gICAgICAg
IHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgR2V0UHV0SW5mbyBnZXRQ
dXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAg
ICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1dEluZm8ub3BlcmFuZCgpKTsKLSAg
ICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1B
TFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZShC
aW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGll
ZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEFy
aXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Ci0gICAg
QmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGllZEFyaXRoUHJvZmlsZXMuYWRkKGtl
eSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQcm9maWxlOworICAgIHJldHVybiBt
X3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiArNjY5LDYwIEBAIEFMV0FZU19JTkxJ
TkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICByZXR1cm4gRUNNQU1vZGU6OnN0cmlj
dCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6
ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19tZXRh
ZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRh
VGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDMyRnJvbU1ldGFkYXRh
KGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkK
K3sKKyAgICBsb2FkMzIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2Nr
LT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBy
ZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNp
emVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDgoQWRkcmVzcyhzX21ldGFk
YXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFU
YWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRh
dGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRh
YmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcgdmFs
dWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9y
ZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1l
dGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpt
YXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBz
aXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
bV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0
ZWNvZGUpICsgb2Zmc2V0KSwgc19tZXRhZGF0YUdQUiwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6bG9hZENvbnN0YW50KEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY29u
c3RhbnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19jb25z
dGFudHNHUFIsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oY29uc3RhbnRJbmRleCkgKiA4KSwgcmVz
dWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZEdsb2JhbE9iamVjdChHUFJS
ZWcgcmVzdWx0KQoreworICAgIGxvYWRDb25zdGFudChtX2dsb2JhbE9iamVjdENvbnN0YW50LCBy
ZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29kZUJsb2NrQ29uc3Rh
bnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVB
U0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCwgQ29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVz
dWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBjb25zdGFudC50b0NvbnN0YW50SW5k
ZXgoKSAqIHNpemVvZih2b2lkKikpLCByZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0
LDcgKzg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgogdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZEJsb2NrKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXpl
ID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENv
bmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRv
ckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxl
LnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIGVtaXRMb2FkUGF5bG9hZCho
YXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93
IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgogICAgIEp1bXAgaGFzSW5zdGFuY2VW
YWx1ZU5vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKGhhc0luc3RhbmNlVmFsdWUpOwotICAg
IEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3Rv
SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5j
ZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xG
dW5jdGlvbigpKSk7CiAKICAgICAvLyBXZSBrbm93IHRoYXQgY29uc3RydWN0b3IgaXMgYW4gb2Jq
ZWN0IGZyb20gdGhlIHdheSBieXRlY29kZSBpcyBlbWl0dGVkIGZvciBpbnN0YW5jZW9mIGV4cHJl
c3Npb25zLgogICAgIGVtaXRMb2FkUGF5bG9hZChjb25zdHJ1Y3RvciwgcmVnVDApOwpAQCAtMTYy
LDcgKzE2Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG8pOwogICAgIAogICAgIEpJVEluc3Rh
bmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAog
ICAgICAgICByZWdUMCwgLy8gcmVzdWx0CiAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQpAQCAtMTk2
LDcgKzE5Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBlbWl0TG9hZFRhZyh2YWx1ZSwg
cmVnVDApOwogICAgIGVtaXRMb2FkVGFnKHByb3RvLCByZWdUMyk7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIGRzdCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDAsIHJl
Z1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QxKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIGRzdCwgbV9wcm9maWxlZEJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QwLCByZWdU
MiksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgZW1pdExvYWQodmFsdWUsIHJl
Z1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMik7CiAg
ICAgZW1pdExvYWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDQsIHJlZ1QzKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1Q0
LCByZWdUMykpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwg
bV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMykpOwogICAgIGVtaXRTdG9yZUJvb2wo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAgICAgCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIAogICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDEpOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM3
OCw3ICszNzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG5hbWUgPSBieXRlY29kZS5tX25hbWU7CiAgICAgZW1pdExvYWRQ
YXlsb2FkKGZ1bmMsIHJlZ1QxKTsKICAgICBlbWl0TG9hZChuYW1lLCByZWdUMywgcmVnVDIpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgbV9wcm9maWxlZEJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTQwOCw3ICs0MDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5z
dHJ1Y3RpCiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgR1BSUmVnIHNjcmF0Y2gy
ID0gcmVnVDM7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0
cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGFkZEp1bXAo
YnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2ZpbGVkQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQyMiw3ICs0MjIs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAgICAgSlNWYWx1
ZVJlZ3MgdmFsdWUocmVnVDEsIHJlZ1QwKTsKICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsK
ICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5
KHZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIHZhbHVlLCBzY3Jh
dGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC00MzcsNyArNDM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251
bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdU
MiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAg
ICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwogCkBAIC00
NjMsNyArNDYzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydQog
CiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSksIHRhcmdldCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9m
aWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsK
IApAQCAtNTA0LDcgKzUwNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251
bGwoY28KIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5
dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwogICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0Nl
bGwoKSk7CkBAIC01NTIsMTMgKzU1MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29u
c3QgSW5zdHJ1Y3RpCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJl
Z1QyKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVn
VDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwogICAgIHN0b3JlUmVzdWx0
LmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNl
LmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5s
aW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIHN0b3JlUmVzdWx0Lmxpbmso
dGhpcyk7CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTU5MSwx
NCArNTkxLDE0IEBAIHZvaWQgSklUOjpjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG8KICAg
ICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8v
IFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0Vx
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpFcSA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5W
YWx1ZUdQUiksIGp1bXBUYXJnZXQpOwogICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAv
LyBHZW5lcmljIGNhc2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIp
KTsgLy8gZG91YmxlcwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBp
bGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFy
Z2V0KTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKQEAgLTY0MywxMyArNjQzLDEzIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBnZW5lcmljQ2FzZS5hcHBl
bmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCBy
ZWdUMik7CiAgICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBHZW5lcmlj
IGNhc2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91
YmxlcwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwog
CiAgICAgc3RvcmVSZXN1bHQubGluayh0aGlzKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgx
KSwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtNzYyLDcgKzc2Miw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9w
cm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzcyLDcg
Kzc3Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwog
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiB9CiAKQEAgLTc5MSw3ICs3OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9u
dWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlMzIo
RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0g
anVtcCgpOwpAQCAtODIzLDcgKzgyMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNv
bnN0IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihOb3RFcXVh
bCwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CkBAIC04NDYsNyArODQ2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5z
dHJ1Y3RpbwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7CiAgICAgY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1l
KTsKICAgICBlbWl0TG9hZChieXRlY29kZS5tX3ZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX3Byb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBqdW1wVG9FeGNl
cHRpb25IYW5kbGVyKHZtKCkpOwogfQogCkBAIC04NjIsNyArODYyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CiAg
ICAgaXNJbnQzMi5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJs
b2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAgaWYgKHNyYyAhPSBkc3QpCiAg
ICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CkBAIC04ODQsNyArODg0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90TnVtYmVyKGFyZ3VtZW50VmFsdWVSZWdzLCByZWdUMikpOwogICAgIGlz
QmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2sp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkKICAgICAg
ICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTkxNSw3ICs5MTUsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmpl
Y3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGlmIChzcmMgIT0gZHN0KQogICAgICAgICBlbWl0
U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQpAQCAtOTMxLDcgKzkzMSwxOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDMyKEFkZHJlc3MocmVn
VDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwog
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpj
YWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
CisgICAgLy8gV2hlbiB0aGUgTExJbnQgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlcmUgaXMgYSBj
aGFuY2UgdGhhdCB3ZSd2ZSBhbHJlYWR5IHRpZXJlZCB1cAorICAgIC8vIHRoZSBzYW1lIENvZGVC
bG9jayB0byBiYXNlbGluZSwgYW5kIHdlJ2xsIGNhdGNoIHRoZSBleGNlcHRpb24gaW4gdGhlIGJh
c2VsaW5lIEpJVCAoYmVjYXVzZQorICAgIC8vIHdlIHVwZGF0ZWQgdGhlIGV4Y2VwdGlvbiBoYW5k
bGVycyB0byBwb2ludCBoZXJlKS4gQmVjYXVzZSB0aGUgTExJbnQgdXNlcyBhIGRpZmZlcmVudCB2
YWx1ZQorICAgIC8vIGluc2lkZSBzX2NvbnN0YW50c0dQUiwgdGhlIGNhbGxlZSBzYXZlcyB3ZSBy
ZXN0b3JlIGFib3ZlIG1heSBub3QgY29udGFpbiB0aGUgY29ycmVjdCByZWdpc3Rlci4KKyAgICAv
LyBTbyB3ZSByZXBsZW5pc2ggaXQgaGVyZS4KKyAgICB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJlZ1QwKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9m
SklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7CisgICAgfQogCiAgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlv
bklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC05NTQsNyArOTY1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50
IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZl
cjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwg
JnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC05OTYsOCArMTAwNyw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVt
cCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVt
ZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtl
ZFRhYmxlID0gbV9wcm9maWxlZEJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFi
bGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJs
ZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1t
ZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7
CiAKQEAgLTEwMjMsMTMgKzEwMzQsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIo
Y29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3Nj
cnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRp
b25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1w
bGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2ZpbGVkQmxvY2stPnVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0
Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVm
YXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5l
bnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAogICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwg
cmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRo
VW5rbm93bktleVR5cGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJs
ZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BS
LCBOb1B0clRhZyk7CiB9CiAKQEAgLTEwNDEsMTMgKzEwNTIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUg
PSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBz
d2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29u
c3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX3Byb2ZpbGVkQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNo
UmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNo
UmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtl
ZFRhYmxlKTsKIAogICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJs
ZUluZGV4KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtu
b3duS2V5VHlwZSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
Tm9QdHJUYWcpOwogfQogCkBAIC0xMDY4LDcgKzEwNzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggSklUIGNvZGUgZG9lc24n
dCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMg
dG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcK
ICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAg
Zm9yIChpbnQgaSA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpOyBpIDwgbV9jb2RlQmxvY2stPm51bVZhcnMoKTsgKytpKQorICAgIGZv
ciAoaW50IGkgPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMoKTsgaSA8IG1fcHJvZmlsZWRCbG9jay0+bnVtVmFycygpOyArK2kpCiAgICAg
ICAgIGVtaXRTdG9yZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwganNVbmRlZmluZWQoKSk7
CiAKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd19wYXRoX2VudGVyKTsKQEAgLTEwODcsNyArMTA5OCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVy
QmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsK
ICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwpAQCAtMTEyMiw3ICsxMTMzLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBT
dHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1
cmVJRDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyID0gYnl0ZWNvZGUubV9zcmNE
c3Q7CiAKQEAgLTExNDUsNyArMTE1Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihj
b25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVk
VHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAK
QEAgLTEyMzksNyArMTI1MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tl
bl90YWkKICAgICBlbWl0TG9hZFRhZyhieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDEpOwogICAg
IEpTVmFsdWVSZWdzIHRoaXNSZWdzKHJlZ1QxLCByZWdUMik7CiAgICAgZW1pdExvYWRQYXlsb2Fk
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
c2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgcmVnVDMsIG1fcHJvZmlsZWRCbG9jaywgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI4MzAx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU0LDExICs1NCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCiAg
ICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkp
Ci0gICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUp
KSwgYWRkcmVzc0Zvcihkc3QpKTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobV9wcm9maWxl
ZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKSB7Cisg
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoc3JjKTsKICAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KSksIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2Fk
Q29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1Qw
LCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtODcsMzcgKzkwLDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVj
dGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRh
Lm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9j
YXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9u
VmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUs
IEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lzdGVySUQg
cmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsK
ICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBSZWdpc3RlcklEIHN0cnVj
dHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAg
ICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBl
bWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxs
b2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZs
eSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVT
dG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAg
bXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Ci0gICAgfQorICAg
IGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6
Om9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1
cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBhdXRv
IGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgZW1pdEFsbG9jYXRlSlNP
YmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywg
c3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgbG9h
ZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRS
ZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBSZWdpc3RlcklE
IHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RB
bGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOworICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVj
dHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KIApA
QCAtMTMxLDcgKzEzMiw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFu
Y2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsK
IAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5j
ZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJy
YW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikp
KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKIApA
QCAtMTU0LDMwICsxNTYsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAgICAvLyBM
b2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkp
IGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3
ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZv
ciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm90b0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVy
czo6cHJvdG87CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3RvLCBwcm90b0dQUik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUg
Y2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdl
dF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSwgcHJvdG8pOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZUdQUiwg
dmFsdWUpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwgcHJvdG8p
OwogCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1
ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDUsCi0gICAgICAgIHJlZ1Qz
LCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgcmVzdWx0R1BSLAorICAgICAgICB2YWx1ZUdQUiwKKyAgICAg
ICAgcHJvdG9HUFIsCisgICAgICAgIHN0dWJJbmZvR1BSLAorICAgICAgICBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxLCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNj
cmF0Y2gyKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6Okluc3RhbmNlT2Y7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbnN0YW5jZU9m
cy5hcHBlbmQoZ2VuKTsKLSAgICAKKwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIApAQCAtMTkyLDE0ICsyMDIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSQogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9u
PGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
cmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBH
UFJJbmZvOjpub25BcmdHUFIwLCByZWdUMiwgcmVnVDEpOwotICAgIH0gZWxzZQotICAgICAgICBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6c3R1YkluZm8gPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2Vs
aW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWUgPT0gYXJndW1lbnRHUFIyKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG8gPT0gYXJndW1lbnRH
UFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4o
QWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3Rv
bShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0yNDAsNyArMjQ5LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAg
ICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM4Myw5ICsz
OTIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiB9CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3Io
Vk0mKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBq
aXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZl
UmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQyMCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3By
aW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVy
dHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzQsOSAr
NDQyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAKIHZvaWQg
SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0
aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlv
biwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
bmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
b3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4ICs0NzQs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5j
aElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsK
ICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNGYWxz
ZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzQ5MSw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTksNyArNTMw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAgIC8vIEZp
cnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBi
aXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJn
ZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7
CiAKQEAgLTU0Myw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3Qg
SW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAoYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRh
cmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTU4MiwxNSAr
NTkzLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KIHZvaWQg
SklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVx
UHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEpT
VmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVj
aWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAgc3RvcmU4
KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICBsb2FkQ29kZUJs
b2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAgIENDYWxs
SGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNvZGUsIE9wSm5lcVB0cjo6
TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOwogICAgIGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC02MjUsOCArNjM0LDEwIEBAIHZvaWQg
SklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGds
b2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0
R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVl
KSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTY0MCw3ICs2NTEsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNjk1LDcgKzcwNiw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAgICAganVt
cFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTcxMSw3ICs3MjMsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3Bf
dGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSBhcmd1bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB0aHJvd25WYWx1ZUdQUiA9
IGFyZ3VtZW50R1BSMTsKQEAgLTcyMCw3ICs3MzIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVS
UyA+IDAKICAgICBqaXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgYXJndW1lbnRHUFIwKTsK
LSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBs
KGFyZ3VtZW50R1BSMCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKGFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwpAQCAtOTA4LDcgKzkyMCw4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQog
CkBAIC05MTgsNyArOTMxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29u
c3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0
cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MzEsNyArOTQ1LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk2NSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsK
ICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdFZSZWcpOwogfQpAQCAtOTc4LDcgKzk5Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVn
VDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
Z1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAg
aWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3RWUmVnKTsKIH0KQEAgLTk5Myw3ICsxMDA3LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNo
KGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFt
ZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNo
T2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBXaGVuIHRo
ZSBMTEludCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlJ3Zl
IGFscmVhZHkgdGllcmVkIHVwCisgICAgLy8gdGhlIHNhbWUgQ29kZUJsb2NrIHRvIGJhc2VsaW5l
LCBhbmQgd2UnbGwgY2F0Y2ggdGhlIGV4Y2VwdGlvbiBpbiB0aGUgYmFzZWxpbmUgSklUIChiZWNh
dXNlCisgICAgLy8gd2UgdXBkYXRlZCB0aGUgZXhjZXB0aW9uIGhhbmRsZXJzIHRvIHBvaW50IGhl
cmUpLiBCZWNhdXNlIHRoZSBMTEludCB1c2VzIGEgZGlmZmVyZW50IHZhbHVlCisgICAgLy8gaW5z
aWRlIHNfY29uc3RhbnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdlIHJlc3RvcmUgYWJvdmUgbWF5
IG5vdCBjb250YWluIHRoZSBjb3JyZWN0IHJlZ2lzdGVyLgorICAgIC8vIFNvIHdlIHJlcGxlbmlz
aCBpdCBoZXJlLgorICAgIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBD
b2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2wo
KSksIHNfY29uc3RhbnRzR1BSKTsKKyAgICB9CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2
bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzYsMTEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJvb2Zz
LCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0
dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwotICAgIGlmIChi
dWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRl
Y29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwg
JnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAm
dm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JFbnRyeSA9
IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVy
UHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVmZmVyICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChW
YWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAgICAgICAgIEpT
VmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdzKTsKLSAgICAg
ICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBAIC0xMDUzLDgg
KzEwNjYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAg
Ly8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMg
c3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBU
YWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQo
U3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwg
U3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJs
ZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5NCwxNCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5l
ZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9y
IHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBj
b25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgs
IG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIp
KTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4LCB1bmxpbmtl
ZFRhYmxlLm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJn
dW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CiAg
ICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCkBAIC0xMDk5
LDIwICsxMTEzLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4K
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAK
ICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sg
dGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxl
JiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2Nv
ZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVu
bGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3RyaW5n
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9i
eXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwogICAg
IGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
U3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFi
bGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRk
cmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJS
ZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1Z0hv
b2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0xMTMzLDcg
KzExNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAg
ICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVn
VDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTExNDgs
NyArMTE2NCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAog
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTY2LDcgKzExODEs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2
bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIs
IHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTExODgsMTIg
KzEyMDMsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAg
IC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBj
b25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lk
IHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5j
cmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVt
VmFycygpOworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMo
KTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9yIChzaXplX3QgaiA9IENv
ZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygp
OyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKKyAg
ICAKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDApOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAgZW1pdEVudGVyT3B0aW1p
emF0aW9uQ2hlY2soKTsKICNlbHNlCkBAIC0xMjEyLDcgKzEyMjksNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfaGFu
ZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjpl
YnApOwpAQCAtMTMxMCwyMyArMTMyNywxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUo
Y29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlE
ID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdU
MSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdU
Mik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRvVGhpczo6TWV0YWRhdGE6
Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+
KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3Rl
cklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdU
NDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAtMTM0Miw3ICsxMzU1LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWRQdHIo
QWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpv
ZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBhbGxvY2F0b3JS
ZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6
b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURh
dGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNoZWRGdW5jdGlvbiwgY2Fj
aGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wQ3Jl
YXRlVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkQ2FsbGVlKCksIGNhY2hlZEZ1bmN0aW9u
UmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1YWws
IGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2Fs
bGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBjYWxs
ZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcy5s
aW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzg1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Vx
KGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVn
VDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJu
VmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwg
cmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzk2LDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwg
cmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwogICAg
IGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIg
fSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0dXJuVmFs
dWVHUFIpOwpAQCAtMTM5NCw3ICsxNDA5LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShj
b25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQyMCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdU
MSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzNSwxMSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVj
dG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5z
dGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0
YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9m
Q3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3Rv
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhh
c0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKICAg
ICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BS
IH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9
CkBAIC0xNDMwLDcgKzE0NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9j
dXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJv
bUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50c0FyZUVs
aWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV91bmxpbmtl
ZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkp
IHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291
bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCByZWdUMCk7CiAgICAgICAg
IGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCByZWdUMCwgVHJ1c3RlZElt
bVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwpAQCAt
MTQ0MCw3ICsxNDU4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3Ry
dQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRpZgotICAgICAgICBtb3Zl
VmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRSZWdzKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAg
ICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsxNDcxLDkgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAgLy8gRW1pdCB0aGUgSklU
IG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKKyAgICAg
ICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsK
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8sIFRydXN0ZWRJ
bW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwKLSAgICAg
ICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNv
dW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0
T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAtMTUwOSw3ICsxNTI4LDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1lbnRHUFIwKTsK
ICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50
R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTE1MjIsNyArMTU0Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190
cmFwcyhjb25zdCAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJh
dG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0x
NTY0LDM0ICsxNTg0LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5z
dHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4
cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhw
KSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBhcmd1bWVudEdQUjA7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhw
LCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25z
dGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKdW1wIGxhenlK
dW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVu
dEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEp
OwogI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2Nr
LT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3Rh
bnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRl
Y2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5t
X2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BS
Mik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1
bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuYykK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2
bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsK
ICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5l
cmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgp
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjIxLDIzICsx
NjQzLDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxz
ZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1p
dExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKIAot
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25F
eHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByLCBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRl
Y2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwogICAgIE9w
Y29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9w
X25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHAp
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRz
dCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHAp
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7
CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2Vu
ZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwg
JnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2NjQs
MjkgKzE2ODcsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdQog
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2OwogICAgIGlu
dCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVz
U3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJl
Z1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAm
bWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIyKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50
ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZzZXRPZkFy
cmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUlu
ZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9j
YXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRh
KGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxs
b2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNpemVJbmRleCwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5k
UHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsK
ICNlbHNlCisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5l
d0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUo
KSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFk
YXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywgcmVnVDIsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTQsOCArMTcxOCwxMCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAKIHZvaWQgSklUOjplbWl0
X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
eworICAgIG1faXNTaGFyZWFibGUgPSBmYWxzZTsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24q
IGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lz
dGVyOwogCkBAIC0xNzc3LDIwICsxODAzLDI1IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFk
b3dfY2hpY2tlbl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYg
bm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRy
dWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dT
aGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7
Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEg
bm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwot
ICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3Jh
dGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxUmVn
ID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgor
ICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAgICAgZW5zdXJlU2hhZG93
Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNo
MlJlZyk7CisgICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlz
VmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2Nv
cGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRS
ZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hh
ZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUMSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAK
IHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgbV9pc1NoYXJlYWJsZSA9IGZhbHNlOworCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlQ29udHJv
bEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9
IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
YmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMpOwpAQCAtMTg2MCw3ICsx
ODkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwogICAgIG1v
dmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAogICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3Mp
OwogfQogCkBAIC0xODg2LDcgKzE5MTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90
eXBlX29mKGNvbnN0CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxv
YWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93
Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJBcnJh
eUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIK
KyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhz
SW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5
LmgiCkBAIC0yODU1LDcgKzI4NTYsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0g
ICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwog
ICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
Lm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0ID0gbGlua2VkVGFibGUubV9jdGlEZWZh
dWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKQEAgLTI4ODAsNyArMjg4MSw3IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3Qg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQ7
CiAgICAgaWYgKGtleS5pc0ludDMyKCkpCkBAIC0yOTAzLDcgKzI5MDQsNyBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7Ci0gICAgY29uc3QgU3Ry
aW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBjb2RlQmxvY2stPmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwog
CiAgICAgaWYgKGtleS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmluZ0ltcGwqIHZhbHVlID0g
YXNTdHJpbmcoa2V5KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7CkBAIC0yOTE5LDcgKzI5
MjAsNiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKLSNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25SZXNvbHZl
U2NvcGVGb3JCYXNlbGluZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBJbnN0cnVjdGlvbiogcGMpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKQEAgLTI5NzEsNyArMjk3MSw2IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25SZXNvbHYKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzb2x2ZWRT
Y29wZSk7CiB9Ci0jZW5kaWYKIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdl
dEZyb21TY29wZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBJbnN0cnVjdGlvbiogcGMpKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsOSArMjkw
LDcgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRQcgogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBj
aGFyKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUga2V5LCBzaXplX3QgdGFibGVJ
bmRleCwgaW50MzJfdCBtaW4pKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
U3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKFZNKiwgRW5jb2RlZEpTVmFsdWUg
a2V5LCBzaXplX3QgdGFibGVJbmRleCwgaW50MzJfdCBtaW4pKTsKIEpTQ19ERUNMQVJFX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwg
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUga2V5LCBzaXplX3QgdGFibGVJbmRleCkp
OwotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25SZXNvbHZlU2NvcGVGb3JCYXNlbGluZSwgRW5jb2RlZEpTVmFsdWUsIChKU0ds
b2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBDKSk7Ci0jZW5kaWYKIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBFbmNvZGVkSlNW
YWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpKTsK
IEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0VG9TY29wZSwgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Nyw3ICs4NywxMiBAQCBhdXRvIEpJVFBsYW46OnRpZXIoKSBjb25zdCAtPiBUaWVyCiAKIEpJVENv
bXBpbGF0aW9uS2V5IEpJVFBsYW46OmtleSgpCiB7Ci0gICAgcmV0dXJuIEpJVENvbXBpbGF0aW9u
S2V5KG1fY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksIG1fbW9kZSk7CisgICAgSlND
ZWxsKiBjb2RlQmxvY2s7CisgICAgaWYgKG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkJh
c2VsaW5lKQorICAgICAgICBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxv
Y2soKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLT5iYXNlbGlu
ZUFsdGVybmF0aXZlKCk7CisgICAgcmV0dXJuIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywg
bV9tb2RlKTsKIH0KIAogYm9vbCBKSVRQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdDKCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTks
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAKICAgICBlbWl0
TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJl
Z1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3Bl
cnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5SWQsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBt
X3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVn
VDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKIAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNl
LCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDMpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0
aW9ucywgcmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwg
bV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmlsZWRCbG9jay0+
aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwog
ICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKICAgICBlbWl0TG9hZFBheWxvYWQo
c2V0dGVyLCByZWdUNCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0
ZXIsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZXMsIHJlZ1QzLCByZWdUNCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIG1fcHJvZmlsZWRCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIocHJvcGVy
dHkpLmltcGwoKSwgYXR0cmlidXRlcywgcmVnVDMsIHJlZ1Q0KTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5
X3ZhbChjb25zCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9h
ZChwcm9wZXJ0eSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCBy
ZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
YXR0cmlidXRlcywgcmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlWYWwsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92
YWwoY29ucwogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMik7CiAgICAgZW1pdExvYWQo
cHJvcGVydHksIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVn
VDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0
dHJpYnV0ZXMsIHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
VmFsLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEy
Myw3ICsxMjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApOwpAQCAtMTMxLDggKzEzMSw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0TG9hZChiYXNlLCBiYXNlUmVncy50
YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KSwKICAgICAgICAgYmFzZVJlZ3MsIHJlc3VsdFJl
Z3MsIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTE2Niw3ICsxNjYs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eVJlZ3MudGFnR1BSKCkpOwog
CiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIGJhc2VS
ZWdzLCBwcm9wZXJ0eVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKIAog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTIwMiw3ICsyMDIsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKICAgICBlbWl0TG9hZDIoYmFz
ZSwgYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSwgcHJvcGVydHksIHBy
b3BlcnR5UmVncy50YWdHUFIoKSwgcHJvcGVydHlSZWdzLnBheWxvYWRHUFIoKSk7CiAKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IEpTVmFsdWVSZWdzKGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkpLCBK
U1ZhbHVlUmVncyhwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5wYXlsb2FkR1BS
KCkpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVz
dGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgSlNWYWx1ZVJlZ3MoYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSks
IEpTVmFsdWVSZWdzKHByb3BlcnR5UmVncy50YWdHUFIoKSwgcHJvcGVydHlSZWdzLnBheWxvYWRH
UFIoKSksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCiAgICAgYm94Qm9v
bGVhbihyZWdUMCwgcmVzdWx0UmVncyk7CkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKQEAg
LTIyNyw3ICsyMjcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IElu
CiAKICAgICBlbWl0TG9hZChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9h
ZEdQUigpKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRl
QnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVk
SW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
YmFzZVJlZ3MsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIHJlc3Vs
dFJlZ3MpOwpAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlf
aWQoY29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKQEAg
LTI0OSw3ICsyNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
CiAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CiAgICAgICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDQpOwog
ICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2sp
LCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpKTsKICAgICB9IGVsc2UgewogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1Q0KTsKQEAgLTI1Nyw3ICsyNTcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2Fk
T25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIHJlc3VsdFJlZ3MsIEludmFs
aWRHUFJSZWcpOwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQog
ICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CkBAIC0y
NjUsNyArMjY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgog
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5
VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgcmVzdWx0
UmVncyk7CiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAgfQogfQpA
QCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0
IEkKICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7CiAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CiAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICAgICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgICAgIEpJVEdl
dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwpAQCAt
Mjg0LDcgKzI4NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkK
ICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9wZXJhdGlv
bkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KIH0KQEAgLTMwNSwxMyAr
MzA1LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIG1f
cHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQ
cml2YXRlTmFtZSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZyk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVn
cyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRh
Z0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTMzMCw3ICszMzAsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAKICAgICBhdXRvIGJh
c2VHUFIgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIGF1dG8gcHJvcGVydHlHUFIg
PSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIApAQCAtMzQ4LDcgKzM0OCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQ
dXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
ICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgSW52YWxpZEdQUlJlZywgSW52YWxpZEdQ
UlJlZyk7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVS
ZWdzKHJlZ1Q1LCByZWdUNCk7CiAKICAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNEZWZp
bmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVy
YXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHZhbHVlUmVncywgZ2VuLnN0dWJJbmZv
KCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBiYXNlUmVncywgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MsIGdlbi5zdHViSW5mbygpLCBU
cnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC0zOTUsNyArMzk1LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBiYXNlUmVncywgYnJhbmRSZWdzLCBJ
bnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTQxOCw3ICs0MTgsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNj
ZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5k
QWNjZXNzSW5kZXhdOwogICAgICsrbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleDsKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgYnJhbmRSZWdz
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFu
ZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7CiAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIApAQCAtNDM1LDcgKzQzNSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY28KICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkpOwogCiAgICAgSklUUHJp
dmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZEJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJy
YW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIGJh
c2VSZWdzLCBicmFuZFJlZ3MsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNDUy
LDcgKzQ1Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAg
ICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNj
ZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleF07CiAgICAgKyttX3ByaXZhdGVCcmFuZEFj
Y2Vzc0luZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmls
ZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIGJyYW5k
UmVncyk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
IH0KIApAQCAtNDY1LDcgKzQ2NSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC00NzgsNyArNDc4LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChyZWdUMCwgcmVnVDYsIHJlZ1Q3KTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIHJlZ1Q2LCBJbnZhbGlkR1BS
UmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21h
TW9kZSA9IEpJVDo6ZWNtYU1vZGUoYnl0ZWNvZGUpOwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgICAgICBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKQEAgLTUyNCw3ICs1MjQsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgZW1pdExvYWQyKGJh
c2UsIHJlZ1QyLCByZWdUMSwgcHJvcGVydHksIHJlZ1QzLCByZWdUMCk7CiAgICAgZW1pdExvYWQo
dmFsdWUsIHJlZ1Q1LCByZWdUNCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlz
RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkg
OiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDEpLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBnZW4uc3R1
YkluZm8oKSwgcHJvZmlsZSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVj
dCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVj
bWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9wcm9maWxl
ZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGdlbi5zdHVi
SW5mbygpLCBwcm9maWxlKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CiB9CkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5
X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9w
cm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVt
aXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTU0MiwxMyArNTQyLDEzIEBAIHZvaWQgSklUOjplbWl0X29w
X3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxp
ZEdQUlJlZywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIG1fcHJvZmlsZWRCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vz
c1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1p
dFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OwogfQogCkBAIC01NTgsMTMgKzU1OCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5
SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1
YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiB9CkBAIC01NzUsNyArNTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTU4MywxMyArNTgzLDEzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywg
SW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisgICAgICAgIG1fcHJv
ZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJS
ZWcsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCByZXN1bHRSZWdzKTsK
ICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxv
YWRHUFIoKSk7CiB9CiAKQEAgLTU5OSwxMyArNTk5LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfZGlyZWN0KGMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJl
c3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJl
c3VsdFZSZWcsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQpAQCAtNjE0LDEwICs2MTQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF9kaXJlY3QoYwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKICAgICAK
ICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC02MzAsMTMgKzYzMCwxMyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3Ms
IEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICBtX3Byb2ZpbGVk
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFN0
b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwog
fQogCkBAIC02NDYsMTMgKzY0NiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRl
eCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgCiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTY2Myw3
ICs2NjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9
IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAgICAgCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsK
ICAgICBlbWl0TG9hZCh0aGlzVlJlZywgcmVnVDQsIHJlZ1QzKTsKQEAgLTY3MywxMyArNjczLDEz
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJVEdl
dEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVn
czo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
cHJvZmlsZWRCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3M6OnBheWxvYWRP
bmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgSW52YWxpZEdQUlJlZyk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZEJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0
UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC02ODksMTMg
KzY4OSwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhp
cz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
cHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dl
dEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09w
dGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHVi
SW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVn
VDMpLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmls
ZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTcxMCwxNSArNzEwLDE1IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJv
ZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAgICAgCiAgICAg
ZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgdmFsdWUsIHJlZ1QzLCByZWdUMik7CiAgICAg
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KSwKICAgICAgICAgSlNW
YWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwg
SW52YWxpZEdQUlJlZywKICAgICAgICAgcmVnVDEsIGJ5dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUo
KSwgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKICAgICAK
QEAgLTczOCw3ICs3MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0
IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9m
aWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4odGhpcyk7CiAKQEAgLTc0OCw3ICs3NDgsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKAotICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKKyAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgbV9wcm9maWxlZEJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwogfQpAQCAtNzU4LDE0ICs3NTgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2Zp
bGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExv
YWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZSwgcmVnVDEpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIElu
dmFsaWRHUFJSZWcpOworICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CkBAIC03NzksMTMgKzc3OSwxMyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdl
biA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdl
bi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmls
ZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTc5Niw3ICs3OTYsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwog
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAog
ICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIp
OwpAQCAtODA0LDcgKzgwNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJ
bnN0cnUKICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUs
IHJlZ1Q0KTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdz
OjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtODE5
LDE0ICs4MTksMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSklUSW5CeVZh
bEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKIH0KQEAgLTgzNyw3ICs4MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVh
bFJlZ2lzdGVyCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsK
IAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAg
ICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOwogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwpAQCAtODUzLDcgKzg1Myw3IEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNs
b3coVmlydHVhbFJlZ2kKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxz
W21faW5CeVZhbEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhh
c1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZh
dGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
fQpAQCAtODkwLDcgKzg5MCw3IEBAIHZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9v
bCBuZWUKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1
cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNz
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRy
dXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFJlc29sdmVD
bG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCkBAIC05MDYsNyArOTA2LDcg
QEAgdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaQogdm9pZCBKSVQ6OmVt
aXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2
ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CkBAIC05MTYsMTEgKzkxNiwx
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIHN3
aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
ICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29k
ZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9wcm9maWxlZEJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0
YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwotICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1Qx
KSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVB
ZGRyZXNzKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExl
eGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0U3RvcmUoZHN0
LCByZWdUMSwgcmVnVDApOwpAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jl
c29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiAKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNl
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBK
U1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9j
ayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOworICAgICAgICAgICAgSlNTY29wZSogY29uc3Rh
bnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUs
IG1fcHJvZmlsZWRCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNj
b3BlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKQEAgLTEwMzksNyArMTAzOSw3IEBAIHZvaWQgSklUOjpl
bWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
ID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CkBAIC0xMTQ2LDcgKzExNDYs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAgIGVt
aXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCkBAIC0xMTU2LDcgKzEx
NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZEJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fcHJvZmls
ZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQg
SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCkBAIC0xMTkwLDcgKzExOTAsNyBAQCB2b2lk
IEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBHZXRQdXRJbmZvIGdldFB1
dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKQEAgLTEyMDIsNyArMTIwMiw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgc3dpdGNo
IChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fcHJvZmlsZWRC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAg
ICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8v
IFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbi4KICAgICAgICAgICAgIGVtaXRM
b2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgICAgICAgICAgCkBAIC0xMjE3LDcgKzEyMTcs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgIGNh
c2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6
Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOworICAg
ICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVG
b3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fcHJvZmlsZWRCbG9jayk7CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJp
ZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwpAQCAtMTMxOCw3ICsxMzE4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19z
Y29wZShjb25zdAogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3By
b3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9
IGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
MzMzLDcgKzEzMzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29u
CiAgICAgZW1pdExvYWRQYXlsb2FkKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBUYWdPZmZzZXQpLCByZXN1dGxSZWdzLnRhZ0dQ
UigpKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdl
T2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgUGF5bG9h
ZE9mZnNldCksIHJlc3V0bFJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdXRsUmVncyk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2sp
LCByZXN1dGxSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1dGxSZWdzLnRhZ0dQUigpLCBy
ZXN1dGxSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTEzNTUsNyArMTM1NSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJu
YWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDksOTIgKzQ5LDEwNCBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgaWYgKG1ldGFkYXRhLm1fc2Vl
bklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVu
dGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmls
ZSwgcmVnVDIpOworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJl
ck9mSWRlbnRpZmllcnMoKSkgeworICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRl
Y29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUsIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIHNjcmF0Y2hHUFIsIGJhc2VHUFIsIHByb3BlcnR5
R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVn
VDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
Ynl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOwog
CiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncywgcmVnVDIpOworICAg
ICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVz
dWx0UmVncywgc3R1YkluZm9HUFIpOworCiAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMy
ID0gdHJ1ZTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBhZGRTbG93Q2FzZSgpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICAgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICAgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVk
IHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIH0KLQogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGNvZGVUeXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShj
b25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAgICBpZiAoIWhhc0FueVNs
b3dDYXNlcyhpdGVyKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworCisg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOworICAgIEpJVEdldEJ5VmFs
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CiAKLSAgICAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIG1vdmUo
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBtb3Zl
KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+KGJ5dGVjb2Rl
LCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQotICAgICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwotICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKLSAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBB
U1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsK
IAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRH
UFI0OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2Rl
T2Zmc2V0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJn
dW1lbnRHUFI0OworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBh
cmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBh
cmd1bWVudEdQUjEpOwotCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIHN0dWJJbmZvR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBw
cm9maWxlR1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7Ci0KLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeVZhbE9wdGltaXpl
KTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2Vk
LgorICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFy
Z3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlID09IHJlZ1QwKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5ID09IHJlZ1QxKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQ
b2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwor
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ5LDcgKzE2MSw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE2MCw4
ICsxNzIsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
Y29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjU7CiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBh
cmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0xODcsMzQgKzE5OSw0MCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0g
ICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdU
MTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cmVzdWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBBU1NFUlQoaGFz
QW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yMjMsOSArMjQx
LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGJ5dGVjb2Rl
LCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMjM1
LDI2ICsyNTUsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8g
YXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwg
IWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQ
UjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9H
UFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMjY0LDcgKzI3OCw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9u
cyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAog
ICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTMwMCwyMSAr
MzE0LDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwotICAgIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3Rl
cnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJy
YW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
KTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZh
dGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCByZWdUMik7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJy
YW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlNl
dFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFj
Y2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmll
ciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVn
aXN0ZXJzLgpAQCAtMzI0LDE3ICszNDUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZh
dGVfYnJhbmQoY29ucwogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFz
ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKKwogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdl
biA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleCsrXTsK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJh
bmRHUFIpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0
UHJpdmF0ZUJyYW5kPigpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFy
Z3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5k
LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uU2V0
UHJpdmF0ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTM0NCwyNCArMzcwLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRf
cHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBh
cmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdU
MTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9w
ZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVC
cmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVf
bmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2Jy
YW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMzMgKzM5
MCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFu
ZCwgYnJhbmRHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hl
Y2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZh
dGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQ
Uik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVC
cmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hl
Y2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9i
cmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrUHJp
dmF0ZUJyYW5kPigpOworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZSk7CisKICAgICBKSVRQcml2
YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9w
cml2YXRlQnJhbmRBY2Nlc3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVn
VDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVC
cmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxk
ZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC00MDYsMjQgKzQ0MCwxOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4K
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKICAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwog
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlw
ZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1
bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6
QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25DaGVja1ByaXZhdGVC
cmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzUsMzAgKzQ2Myw0
MyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSks
IHJlZ1QzKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJlZ1Q0KTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9maWxlR1BSKTsKKyAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVn
cyhyZWdUMiksIHJlZ1QzLCByZWdUNCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBwcm9maWxlR1BSLCBzdHVi
SW5mb0dQUik7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOworICAgIHN0dWJJbmZv
LT5wdXRLaW5kID0gc3RkOjppc19zYW1lX3Y8T3AsIE9wUHV0QnlWYWxEaXJlY3Q+ID8gUHV0S2lu
ZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9
IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhp
dCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3
cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2Vs
bC4KQEAgLTQ3NCwxNSArNTE1LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwot
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBb
Jl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
ICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOwot
ICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAg
ICAgaWYgKGlzRGlyZWN0KQpAQCAtNDk4LDcgKzUzNiwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAg
ICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJl
cmVkLgotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUu
aXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmlj
dCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGdlbi5zdHViSW5mbygpLCByZWdUMyk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFy
Z3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjQpOworICAgIGlmIChpc0RpcmVjdCkKKyAgICAgICAgbWF0
ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRC
eVZhbERpcmVjdD4oKSwgT3BQdXRCeVZhbERpcmVjdDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAgZWxzZQorICAgICAgICBtYXRlcmlhbGl6ZVBv
aW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpLCBP
cFB1dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFI1
KTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0
aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQsIGFyZ3VtZW50R1BSNSk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC01MTIsNyArNTU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSByZWdUNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVn
VDU7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9H
UFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogICAgIENhbGwgY2FsbDsKICAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8g
KGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGlt
aXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKQEAgLTUyMyw3ICs1NzAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCkBAIC01MzMsMTggKzU4MCwyNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAg
ICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGds
b2JhbE9iamVjdEdQUiA9IHJlZ1Q1OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICB7CisgICAgICAg
IFJlZ2lzdGVyU2V0IHVzZWQoQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnZhbHVlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlKTsKKyAgICAgICAgQVNT
RVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q0KSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlu
cyhyZWdUNSkpOworICAgIH0KKwogCiAgICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIs
IHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAg
IGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFs
T2JqZWN0R1BSKTsKQEAgLTU3MCwyMCArNjIzLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9w
cml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QyKSwgSW52YWxpZEdQUlJlZywgcmVnVDQpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxp
ZEdQUlJlZywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPnByaXZh
dGVGaWVsZFB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC01
OTQsOCArNjU4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
UHJpdmF0ZU5hbWU+KCk7Ci0gICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNv
ZGUubV9wdXRLaW5kOworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAg
ICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJbmRl
eCsrXTsKIApAQCAtNjAzLDEzICs2NjYsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9w
cml2YXRlX25hbWUoYwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAg
ICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFs
RGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVG
aWVsZE9wdGltaXplOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5
IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdU
MjsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFs
dWVHUFIsIGdlbi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwor
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjQpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxEZWZp
bmVQcml2YXRlRmllbGRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1c3RlZElt
bVB0cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02MjIs
MTggKzY4NywxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9H
UFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJp
dmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0MywxNCArNzAyLDE0
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
IAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3MzksOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5t
X2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vz
c29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzc0OSw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc2MCw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
U2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0
dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBt
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwo
KSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NzA5LDcgKzc3MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsK
ICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzgyLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRl
ckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdU
MCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMg
Kzc5MSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
cmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nh
c2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1
Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdl
IHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3
cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODMzLDE3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1tt
X2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVj
bHR5cGUob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkp
OwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNzgxLDI0ICs4NTcsMTkgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBl
Y21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgp
KSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSBy
ZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC04
MDgsNyArODc5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3Qg
YmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcv
RlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3Rz
LCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAg
ICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJu
QWRkcmVzcygpOwpAQCAtODQ1LDIyICs5MTYsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5
X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIHByb3BlcnR5KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisKICAgICBKSVRE
ZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAg
YWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHN0dWJJbmZvR1BSLCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNo
KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtl
ZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6
OkRlbGV0ZUJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBi
b3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8g
V2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNl
IHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBu
ZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAg
LTg4Myw5ICs5NjUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3Qg
SQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNs
dHlwZShvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtODk5LDI0ICs5ODMsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV92YWwoY29uc3QgSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVu
dEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNDsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQ
Uik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV92
YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25EZWxldGVCeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTkyNiw3ICsxMDA1
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0
IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZh
aWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBp
bmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBt
YXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OwpAQCAtOTYxLDIyICsxMDQwLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQo
Y29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRy
eUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIHJlZ1QwKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
YmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VW
UmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0
dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVn
cyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2LDE0ICsx
MDc0LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0
QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRP
cHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTAwMywyNiArMTA5NCwyMCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbW92ZShKSVQ6
OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRl
Y2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMzAsMjIgKzExMTUsMzEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZS
ZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NU
eXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWRE
aXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYgKzExNDgsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0
YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk+KGJ5dGVjb2Rl
LCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwNzMsODMgKzExNjksNjIgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0
aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAg
SnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5h
cnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCByZWdUMSk7CisgICAgICAgIGxvYWQ4RnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0
YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlKCksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0
ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRC
eUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGg6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGJhc2VH
UFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsK
ICAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OwotCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJl
ZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6
OkdldEJ5SWQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKLQotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1
bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOwor
ICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8g
Y29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKIH0KIApAQCAtMTE1OCwxNiArMTIzMywxOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRD
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0
YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
PGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFy
Z3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
cmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNTQsNTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zm
c2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0
KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwot
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRo
aXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0
aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFz
ZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIs
IHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNH
UFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2Ug
bWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBT
UAorICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4p
OworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQpAQCAtMTIwNiw3ICsxMzE1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0MSwxNiArMTM1MCwxOSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwg
b3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBy
ZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6
ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
MTI2MCwyOCArMTM3MiwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIy
OyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IHJlZ1QxOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhU
aGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodGhpc0dQUiA9PSBhcmd1bWVu
dEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1Yklu
Zm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF93
aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjkxLDcgKzEzOTcsNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlv
bnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMg
YmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAg
ICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxs
SGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMzI5LDIzICsx
NDM1LDM4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBi
eXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRv
IHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9y
ZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBi
ZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRl
IGNvZGUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlz
IGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJh
c2VWUmVnLCBiYXNlR1BSLCB2YWx1ZVZSZWcsIHZhbHVlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUUHV0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgcmVnVDMsIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc3R1Yklu
Zm9HUFIsIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0ID8g
UHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5
SWQ7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQ
dXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0
ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdl
IG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBT
dHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMTM1
OSwxNCArMTQ4MCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IElu
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4o
dGhpcyk7CiAgICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1tt
X3B1dEJ5SWRJbmRleCsrXTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qx
LCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJh
dGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpPihBZGRyZXNzKGFy
Z3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3NiwyNSArMTUwMSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRC
eUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJn
dW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0
dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlH
UFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlf
aWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xv
d1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2Vu
LnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CkBAIC0xNDA0LDcgKzE1MjMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2Jh
bE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAg
IC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2Jh
bE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50
YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQxLDIwICsxNTYwLDMxIEBAIHZvaWQgSklUOjplbWl0
X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTkzLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9i
eV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJ
ZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25J
bkJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTQ4MCwyOCArMTYx
MywyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVD
YWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRo
ZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZl
IGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVj
bHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xNTEwLDI1ICsxNjM3LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25z
dCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoYnl0ZWNvZGUsIGJhc2VHUFIsIEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7
CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
dHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpJbkJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMu
YXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0x
NTM3LDE1ICsxNjcyLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3Qg
SW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZh
bD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSklUSW5C
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb248ZGVj
bHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQ
UjQpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTU1Niw1OSArMTY5NCw3
MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9
PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmls
ZUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5
dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9m
aWxlR1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Ig
d2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2lu
dCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJl
bnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRp
b25JbkJ5VmFsT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKT46
OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0
X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
IAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRD
YWxsKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRl
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eU9yQnJhbmQsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcHJvcGVydHlHUFIpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEluQnlW
YWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBl
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IHR5cGU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0
dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBl
bmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSB0
eXBlKQordm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBl
IHR5cGUpCiB7Ci0gICAgQVNTRVJUKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUg
fHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIFVOVVNFRF9QQVJB
TShiYXNlKTsKKyAgICBVTlVTRURfUEFSQU0ocHJvcGVydHkpOworICAgIEFTU0VSVF9VTlVTRUQo
dHlwZSwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9w
ZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFy
Z3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2
YXRlTmFtZU9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTE2MTgsMjcgKzE3NjcsMjEgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRl
U2xvdyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IHJlZ1QxOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5T3JCcmFuZEdQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpLCBkZWNsdHlw
ZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gdHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX25hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NTIsNyArMTc5NSw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKGMKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUu
bV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNs
b3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
cHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTY2NiwyMTUgKzE4MDksMTI3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9i
cmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhh
c1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQp
OworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNl
LCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rp
b25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0
cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92
YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi12b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNv
bHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwotICAgIHVuc2lnbmVkIGRl
cHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7Ci0KLSAgICBhdXRvIGVtaXRDb2RlID0g
WyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewotICAgICAgICBzd2l0Y2ggKHJlc29sdmVU
eXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRT
Y29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
bG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsK
LSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwot
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25z
dGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1
cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0
aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0
KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlc29s
dmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVt
cExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUs
IHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENv
ZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0K
LSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJl
c29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNv
bHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBt
X2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdCht
X2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJvZmlsZSBj
ZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdp
bGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5t
X2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50
KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0
ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgICAg
ICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CisKKyAgICAgICAgYXV0byBjbG9z
dXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9w
X3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhciIpOworICAgICAgICB9OwogCi0jZGVmaW5lIFJFU09M
VkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2
ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShSRVNPTFZF
X1NDT1BFX0dFTkVSQVRPUikKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6
OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyIpOwogICAgICAgICB9OwotI3VuZGVmIFJFU09MVkVfU0NPUEVfR0VORVJB
VE9SCisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0gW10gKFZN
JiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmlj
Iik7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9
IHJlZ1QyOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlw
ZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xv
c3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICBjb2RlID0g
dm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNS
ZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBj
b25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25h
bDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAg
ICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3
aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCisgICAgY29uc3Rl
eHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1QyOyAvLyBpbmNvbWluZworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7IC8vIGluY29taW5nIC0gcGFzcyB0aHJ1IHRv
IHNsb3cgcGF0aC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0
OwogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZU9mZnNldEdQUik7Ci0gICAgUkVMRUFTRV9BU1NF
UlQodGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFn
UmV0dXJuQWRkcmVzcygpOworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSks
IHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBqaXQubG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgp
KSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKIAogICAgIEp1
bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0g
KGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJ
bnZhbGlkR1BSUmVnKSB7CisgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxp
ZEdQUlJlZykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJS
ZWcpIHsKICAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwotICAgICAgICAgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgfQotICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFy
SW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRl
KCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwg
bV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZz
ZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogCiAg
ICAgYXV0byBlbWl0UmVzb2x2ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpIHsKLSAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBsb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2xvY2FsU2Nv
cGVEZXB0aCkpLCByZWdUMSk7Ci0KLSAgICAgICAgTGFiZWwgbG9vcCA9IGxhYmVsKCk7Ci0gICAg
ICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZWdUMCk7Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAg
ICAgICAgICAgIGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzY29wZUdQUiA9PSByZWdUMCk7
CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mTG9jYWxTY29wZURlcHRoKCkpLCByZWdUMSk7CisKKyAgICAgICAgTGFiZWwgbG9vcCA9IGpp
dC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QxKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0
T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJl
Z1QxKTsKKyAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CisgICAgICAgIGRv
bmUubGluaygmaml0KTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKQEAgLTE4ODIsMTIgKzE5MzcsMTEgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewog
ICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRz
IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkuCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9i
YWxPYmplY3RHUFIpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAg
ICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBK
U0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdU
MSkpOwotICAgICAgICAgICAgbW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNHbG9i
YWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEgKzE5NTEsMTEgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBK
U1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4
aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBD
b2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFs
T2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAg
ICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0Ojpv
ZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsx
OTYzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAg
ICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZl
ZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMTk3Myw0
NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0K
ICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1Qw
KTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVz
b2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAg
bm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
eworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0g
ZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkp
LCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVn
VDEpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBh
dXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAgICAgICAg
ICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZElt
bTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Cisg
ICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgbm90
Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
dW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9i
YWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOworICAgICAg
ICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1p
dENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1p
dENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0
Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGlu
aygmaml0KTsKICAgICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlBy
b2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1
YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGlu
ayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29s
dmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsK
IH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUp
IFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZl
X3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAg
ICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlw
ZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwK
LSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5
cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9
Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQot
I3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9y
KFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24g
Y2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRo
IGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAt
MjAzNCw3ICsyMDUwLDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVs
KGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfcmVz
b2x2ZV9zY29wZSIpOwogfQotI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiB2
b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
LCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQogewpAQCAtMjA2MiwyNzYgKzIwNzcsMTMzIEBA
IHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsg
b3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7CiB9CiAKLSNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9
IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKKyAg
ICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKLSAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5q
ZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0
aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVj
a2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJl
Z1QwOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgR1BS
UmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsK
LQotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkg
LT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKLSAgICAgICAgICAg
IH0pKTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRlY29kZUluZGV4
KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIEFTU0VSVChtX3VubGlu
a2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudElu
c3RydWN0aW9uKTsKIAotICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQpOwot
ICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBp
c091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVk
SW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBhYm9ydFdpdGhS
ZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAgICAgICAgIGlzT3V0T2ZM
aW5lLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAg
ICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0
LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQs
IFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksIHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJh
bmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRH
ZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8
IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAv
LyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShy
ZWdUMCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJl
c29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICB9CisgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2
bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0s
IENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOwog
ICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAg
ICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUs
IGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlz
Tm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
Ci0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAg
IGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJv
cGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVz
b2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwot
fQotCi0jZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21T
Y29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGF1
dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZt
KSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwg
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21f
c2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CiAKLSAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwot
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwot
ICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5k
ZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgYXV0byBnZW5lcmljR2V0RnJvbVNjb3Bl
R2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9w
R2V0RnJvbVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9nZXRfZnJv
bV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRh
dGFHUFIgPSByZWdUNzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0g
ICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNl
dEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNl
dCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5
cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAg
c3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAg
IEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAg
IH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0
YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0
YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAg
ICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNl
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJ
U3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJD
YWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUs
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlv
bmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewog
ICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3Jr
IHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgdXNpbmcgTWV0YWRhdGEg
PSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAg
ICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBl
KSk7Ci0KLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7Ci0KLSAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBh
ZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOwogCi0g
ICAgSnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAgIGF1dG8g
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJf
dCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCkgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAgICBtb3Zl
KHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRy
KFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDEpKTsKLSAgICB9OworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0
YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BS
KTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICBhdXRvIGRv
VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsK
ICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9p
bnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRk
cmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9i
amVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0
OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9
OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90IG9w
ZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQot
ICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3Bl
cmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0g
ICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcg
b3BlcmFuZEdQUikgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVn
aXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsK
LSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxl
cygpKSwgcmVnVDApOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgYXV0
byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAg
ICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIsIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV9zdHJ1Y3R1cmUpKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5q
ZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0
aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVj
a2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0KLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBy
ZWdUMDsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAg
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKLQotICAgICAgICAgICAg
aml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAg
ICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAgICAgICAgICAvLyBTdHJ1Y3R1
cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0
dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVz
b2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICAgICAg
aml0LmxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MSkpOworCisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQp
PihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVxdWFsLCBz
Y29wZUdQUiwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5k
KSksIG9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMSk7CisKICAgICAgICAgICAgIGlm
IChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBi
cmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNl
dElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMp
OworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRl
clRoYW5PckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7
CisgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9m
TGluZSk7CisgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluaygmaml0KTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAg
ICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBs
b2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0Lm5lZzMyKHJlZ1QxKTsKKyAgICAg
ICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICAgICAg
aml0LmxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZWdUMCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAg
ICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEds
b2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2lu
dGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZz
ZXRPZk9wZXJhbmQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKHJlZ1QwLCBy
ZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykg
Ly8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hJZkVt
cHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJ
ZkVtcHR5KHJlZ1QwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9zdXJl
VmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIHJlZ1QzKTsKLSAgICAgICAgICAg
IGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CisgICAgICAgICAgICBkb1Zhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNl
dE9mT3BlcmFuZCgpKSwgcmVnVDMpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMg
PT0gc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDMpLCByZWdUMyk7CisgICAgICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCByZWdUMyk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBKU0xleGljYWxFbnZpcm9u
bWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKKwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1w
KCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNl
IE1vZHVsZVZhcjoKQEAgLTIzNDEsODYgKzIyMTMsNjMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZElt
bTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGlu
dG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29k
ZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0
Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotCi0g
ICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpy
ZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIo
R2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBU
MAorICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZz
ZXRPZkdldFB1dEluZm8oKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LmFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRv
IFQwCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAg
ICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
UHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluaygmaml0KTsK
KworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBqaXQuYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgaXNH
bG9iYWxQcm9wZXJ0eSA9IGppdC5icmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGlzR2xvYmFsUHJv
cGVydHkubGluaygmaml0KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOworICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywg
dHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsoJmppdCk7CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGp1bXAoKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwog
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAogICAg
IHN0YXRpY19hc3NlcnQoVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0gMSk7Ci0gICAg
c3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRh
dGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0
T2ZGaXJzdEJ1Y2tldCgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05h
bWUpOwogfQogCi0jZGVmaW5lIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2
ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9n
ZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBc
Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVz
b2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQo
dm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHJl
c29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsg
XAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VO
RVJBVE9SKQotI3VuZGVmIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhp
cyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJl
Y2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShY
ODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjQyOSw3ICsyMjc4
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogI2VuZGlmCiAK
ICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgY29uc3RleHByIEdQUlJlZyBt
ZXRhZGF0YUdQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSByZWdUNTsKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKQEAgLTI0NDksNyAr
MjI5OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBD
YWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgSnVtcCBleGNl
cHRpb25DaGVjayA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0pOwogCi0g
ICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIs
IE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0
KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBNZXRhZGF0YTo6b2Zm
c2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwog
ICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpu
dW1iZXJUYWdSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2XzY0KQpAQCAtMjQ2OSw4OCArMjMxOCw3
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgcGF0Y2hC
dWZmZXIubGluayhqdW1wVG9IYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX2dldF9mcm9tX3Njb3BlIik7
CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0KLXZvaWQgSklUOjplbWl0
UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1Qw
LCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChK
U1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwg
cmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNz
T2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0g
ICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1f
c2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAg
ICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAg
ICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgp
OwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAg
IFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8g
ZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAg
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3Ry
dWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0
cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHks
IHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisg
ICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ug
d2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmpl
Y3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBj
aGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVy
ZSgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBy
ZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1Qx
KSk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QxKSk7CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qy
KTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0g
KCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAg
ICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Cisg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7CiAgICAg
ICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJ
bmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMSwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRT
Y29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNr
KHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJ
bmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpIHsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRWYXJSZWFk
T25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFu
ZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihieXRlY29k
ZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBU
RFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVt
aXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9p
bnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRH
bG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90
KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDEpOwor
ICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIHN0
b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBj
YXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNj
b3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwg
cmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAgICAgICAg
IGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNl
dE9mVmFyaWFibGVzKCkpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIE1vZHVsZVZhcjoKQEAgLTI1NjQsNTggKzI0MDIsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAg
ICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAv
LyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwot
ICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwot
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlm
IHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBi
aW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQ
cm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2Up
OwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2Nr
IHNlZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4g
d2UgY2FuIGNvbXBpbGUgdGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tz
LCBzaW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdy
ZSBhIENsb3N1cmVWYXIsCisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFy
LiBJZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlz
IENsb3N1cmVWYXIKKyAgICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0
IGZpcmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0
IGRvZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAg
ICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29k
ZShDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29s
dmVkQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAg
ICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7CisgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1
dEluZm8oKSwgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6
dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAg
IEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFBy
b3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxz
ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENv
ZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAg
ICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsK
KwogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
ICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwg
ZmFsc2UpOwotICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTggKzI0NTYsMjEg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3Bp
ZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29s
dmVUeXBlKCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7Cisg
ICAgICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBh
bGwgbGlua2VkIENvZGVCbG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBz
ZWUgTW9kdWxlVmFyLgogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5
X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAg
ICB9IGVsc2UgewogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRU
b1Njb3BlLCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVj
dGlvbik7CisgICAgICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0
KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAg
LTI2NTIsNyArMjQ4Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZf
NjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjcwMSw3ICsyNTM2LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJl
c3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3NTksNyArMjU5NCw2IEBAIHZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9m
aWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwpAQCAtMjc2Nyw3ICsyNjAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2lu
dGVybmFsX2ZpZWxkKGNvbgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEp
OwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+
OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKQEAgLTI4MjMsNyArMjY1Nyw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm9wZXJ0eV9l
bnVtZXJhdG8KIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVj
b2RlLm1fbW9kZTsKQEAgLTI4MzksMTEgKzI2NzIsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAv
LyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3Bl
Y2lhbCBjYXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRh
ZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93
blN0cnVjdHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jaykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpPd25TdHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVn
VDM7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAgICAgICAgIG9wZXJh
dGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhlbnVtZXJhdG9y
R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpICYgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgIGxvYWQ4RnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVt
ZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBPcEVudW1l
cmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CisKICAg
ICAgICAgbG9hZDMyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSwgaW5kZXhHUFIpOwogICAgICAgICBvcGVy
YXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpKTsKIApAQCAtMjg4MSw3OCArMjcy
MCw4OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9u
ZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGlu
ZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3Jh
dGNoMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9y
R2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVz
cygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1l
cmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoMik7CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIp
OworICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JH
ZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBl
bmNvZGVkIHZhbHVlLgotICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsK
KyAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBz
Y3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBD
aGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVN
aXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAK
ICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bmRleCwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gy
KTsKICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQg
aW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRP
ZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1Qy
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
KTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsK
LQorICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3Jh
dGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIs
IHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1l
c0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwog
ICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91
dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAg
c3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWdu
RXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRy
ZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25F
eHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CiAgICAgY29uc3RleHByIGludHB0cl90
IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsK
LSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIs
IHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIp
OwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNo
LmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRh
dGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZElt
bTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1
Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6
Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVN
b2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVy
bywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRN
b2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRj
aDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7
CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsK
KyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNj
cmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBX
ZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0
IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAog
ICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTYxLDEwICsyODEwLDkgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVyKTsK
IH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVu
Y3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5
dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6
ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9u
VHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0yOTcz
LDcgKzI4MjEsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltCiAg
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2Rl
LCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51
bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgcmVnVDEpOworICAg
IG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1QxLCBieXRlY29k
ZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAog
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwogCkBAIC0z
MDYyLDYgKzI5MTIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
cgogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIAordm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQoreworICAgIEp1bXAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNlbGVjdFNjcmF0
Y2hHUFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDkgKzIzNiw5IEBAIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZUNl
bGwpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hl
VHlwZTo6VW5zZXQKICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJh
c2VDZWxsCi0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVB
cnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKIAotICAg
ICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwp
KTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxK
U0FycmF5Kj4oYmFzZUNlbGwpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENv
ZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihr
aW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0QXJyYXlMZW5ndGgo
bG9ja2VyKTsKQEAgLTI0OSw4ICsyNDksOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCwgcHJvcGVydHlOYW1lKTsK
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlQ2VsbCkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAg
ICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3Ro
KHN0dWJJbmZvKSkgewotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxp
bmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKTsKKyAgICAg
ICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChj
b2RlQmxvY2ssIHN0dWJJbmZvKSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRl
ZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9j
aywgc3R1YkluZm8pOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGlu
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRTdHJpbmdMZW5ndGgobG9ja2Vy
KTsKQEAgLTMwNCw3ICszMDQsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVH
ZXRCeShKCiAgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCiAgICAgICAg
ICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAg
ICAgICAgICAgICAgICAgJiYgIWxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAgICAgICAgICAg
ICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlBy
b3BlcnR5QWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJl
LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29k
ZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5U2Vs
ZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBw
cm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFj
ZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTczMSwxMSArNzMxLDExIEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5KEoKICAgICAgICAgICAgICAgICBv
bGRTdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2Fj
aGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxp
bmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgc2xvdC5j
YWNoZWRPZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5H
ZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgc2xvdC5jYWNo
ZWRPZmZzZXQoKSkKICAgICAgICAgICAgICAgICAgICAgJiYgIW9sZFN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAgICAgICAgICAgICAgICAgICAgICYmICFpc1Byb3h5
KSB7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVy
YXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFj
ZShzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2xkU3RydWN0dXJl
LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRl
ZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6
UHV0QnlTZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJh
c2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlG
dW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKQEAgLTExMzIsNyArMTEzMiw3IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnkoCiAgICAgICAgICAgICAgICAg
JiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2UKICAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRj
aHBvaW50U2V0KCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJ
bmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKHN0dWJJbmZvLCBzdHJ1
Y3R1cmUpOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0
dXJlKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAg
ICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwogICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50
cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBAIC0xNTUyLDcgKzE1NTIsNyBAQCBzdGF0aWMg
dm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAKIHZvaWQgdW5saW5rQ2FsbChWTSYg
dm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZv
LmZhc3RQYXRoU3RhcnQoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlua0lu
Zm8pKTsKICAgICAKICAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0
dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywyNCArNDMsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYg
dm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdDsKLQotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKLQotICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwotICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7Ci0KLSAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKLQotICAg
IGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJ
VGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKTsKLSAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNl
cHRpb24iKTsKLX0KLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5k
bGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tHZW5lcmF0b3IoVk0mIHZtKQogewogICAg
IENDYWxsSGVscGVycyBqaXQ7CkBAIC03NywyNCArNTksNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGhhCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNr
Iik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtT
dGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCi17Ci0gICAg
Q0NhbGxIZWxwZXJzIGppdDsKLQotI2lmIENQVShYODZfNjQpCi0gICAgaml0LmFkZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lz
dGVyczo6ZXNwKTsKLSNlbGlmIENQVShBUk02NCkKLSAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBl
cnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7Ci0j
ZW5kaWYKLQotICAgIENDYWxsSGVscGVyczo6SnVtcCBjb250aW51YXRpb24gPSBqaXQuanVtcCgp
OwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlu
a0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgYXV0byBoYW5kbGVyID0gdm0u
Z2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoY29udGludWF0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgInBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsK
LX0KLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKQEAgLTEzNyw2ICsx
MDEsNDIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaAogCiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OworCisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOworCisgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
aml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKworICAgIENDYWxsSGVscGVyczo6Q2FsbCBv
cGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworCisgICAgaml0Lmp1bXBUb0V4
Y2VwdGlvbkhhbmRsZXIodm0pOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOworICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbiIpOworfQor
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVz
ZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVs
cGVycyBqaXQ7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVz
cCk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxwZXJzOjpmcmFt
ZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisK
KyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29udGludWF0aW9uID0gaml0Lmp1bXAoKTsKKworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIGF1dG8gaGFuZGxlciA9IHZtLmdldENUSVN0
dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNvbnRp
bnVhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJU
YWcsICJwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uIik7Cit9CisKIHRl
bXBsYXRlPHR5cGVuYW1lIFRhZ1R5cGU+CiBpbmxpbmUgdm9pZCBlbWl0UG9pbnRlclZhbGlkYXRp
b24oQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwb2ludGVyR1BSLCBUYWdUeXBlIHRhZykKIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDEyIEBAIGNsYXNzIFZNOwogCiAjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFj
a0dlbmVyYXRvcihWTSYpOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBw
b3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0Fu
ZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihW
TSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oIgogI2luY2x1ZGUgIkNhbGxG
cmFtZS5oIgogI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCisjaW5jbHVk
ZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMu
aCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgpA
QCAtMzcwLDEzICszNzEsMjIgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3Rp
Y3MoVgogICAgIAogICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlv
bnMoKTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkgeworICAgICAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gYmFzZWxpbmVSZWYg
PSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUp
IHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUo
YmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOworICAgICAgICAgICAgY29k
ZUJsb2NrLT5qaXROZXh0SW52b2NhdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9s
ZFJlYWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRl
bGF5SklUQ29tcGlsZSIsICgidGhyZXNob2xkIG5vdCByZWFjaGVkLCBjb3VudGVyID0gIiwgY29k
ZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0
aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJlIGxpZnRlZC4i
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBKSVRXb3JrbGlzdDo6
U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgp
LmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBKSVRDb21waWxhdGlvbktleShjb2RlQmxv
Y2ssIEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpKTsKKyAgICBKSVRXb3JrbGlzdDo6U3Rh
dGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNv
bXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBKSVRDb21waWxhdGlvbktleShjb2RlQmxvY2st
PnVubGlua2VkQ29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpKTsKIAog
ICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewog
ICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgQ29kZSB3YXMg
YWxyZWFkeSBjb21waWxlZC4iKTsKQEAgLTQ2Niw4ICs0NzYsMTAgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0wobG9vcF9vc3IpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJv
bUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGln
aWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9
IHZtLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihwYyk7CiAgICAgICAgICpwdHIgKz0gY29k
ZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkubV9hY3RpdmVUaHJlc2hvbGQ7Ci0gICAgICAg
IGlmICgqcHRyID49IE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgp
KQorICAgICAgICBpZiAoKnB0ciA+PSBPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxv
b3BzTGltaXQoKSkgeworICAgICAgICAgICAgY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKENvbmN1
cnJlbnRKU0xvY2tlcihjb2RlQmxvY2stPm1fbG9jaykpOyAvLyBXZSdyZSByZXR1cm5pbmcgdG8g
dGhlIE9TUiBlbnRyeSBjb2RlIGhlcmUsIHdoaWNoIGV4cGVjdHMgdGhhdCBtX2ppdERhdGEgaXMg
bm90IG51bGwuCiAgICAgICAgICAgICBMTElOVF9SRVRVUk5fVFdPKExMSW50OjpmdXp6ZXJSZXR1
cm5FYXJseUZyb21Mb29wSGludEVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgY2FsbEZyYW1lLT50b3BPZkZyYW1lKCkpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3Rl
cSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVn
ZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9w
Y29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4p
Ci0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3Jo
IHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFy
aXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0
MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGJpbmVxIFRhZ09mZnNl
dFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBAIC0xMDIzLDcgKzEwMTksNyBAQCBtYWNy
byBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgICMgTWV0YWRhdGEg
aW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQyLCAuc2xvdykK
ICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCi0gICAgICAgIHVw
ZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAgICAg
IGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4OSwyMiArMTA4NSwxOCBAQCBlbmQpCiAK
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAKLSAgICBtYWNybyB1cGRhdGVBcml0aFBy
b2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgIGVuZAotCiAgICAg
bWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5lcSB0MSwgSW50MzJUYWcsIC5v
cE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cK
ICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAg
ICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0NSwg
dDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdhdGVTcmNOb3RJbnQ6CiAgICAg
YmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JpIDB4ODAwMDAwMDAsIHQx
Ci0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVV
bmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0NSwgdDMpCiAg
ICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExMTUsMTAgKzExMDcsNiBA
QCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3Bjb2RlU3Ry
dWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9wZXJhdGlvbikKICAgICBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gYXJpdGhQ
cm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAg
ICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCiAgICAgICAgIGdldChtX3Jocywg
dDIpCiAgICAgICAgIGdldChtX2xocywgdDApCkBAIC0xMTI2LDcgKzExMTQsNyBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCBJbnQzMlRh
ZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5vcDJOb3RJbnQKLSAg
ICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmlu
YXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIp
CiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9y
ZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKQEAgLTExMzYsMTIg
KzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAg
ICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAgICAgICAgYmliIHQzLCBMb3dlc3RUYWcs
IC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAuc2xvdwot
ICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRh
dGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQs
IHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgICAgICBqbXAgLm9wMU5vdEludFJl
YWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEK
LSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVy
TnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3Qs
IHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1Myw3ICsxMTQxLDcgQEAgbWFj
cm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9w
ZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgb3BlcmFuZCBpcyBkZWZpbml0
ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYmlhIHQzLCBMb3dlc3RU
YWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisg
ICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmls
ZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGZpaTJk
IHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJhdGlvbihmdDEsIGZ0MCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNDQxLDggKzQ0MSwx
MyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgICAgICAgICBtb3ZlIFBD
LCBhMQogICAgICAgICAgICAgY0NhbGwyKF9sbGludF9sb29wX29zcikKICAgICAgICAgICAgIGJ0
cHogcjAsIC5yZWNvdmVyCi0KICAgICAgICAgICAgIG1vdmUgcjEsIHNwCisKKyAgICAgICAgICAg
ICMgQmFzZWxpbmUgdXNlcyBMTEludCdzIFBCIHJlZ2lzdGVyIGZvciBpdHMgSklUIGNvbnN0YW50
IHBvb2wuCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKKyAgICAgICAgICAg
IGxvYWRwIENvZGVCbG9jazo6bV9qaXREYXRhW1BCXSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENv
ZGVCbG9jazo6SklURGF0YTo6bV9qaXRDb25zdGFudFBvb2xbUEJdLCBQQgorCiAgICAgICAgICAg
ICBpZiBBUk02NEUKICAgICAgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBK
U0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6bG9vcE9TUkVu
dHJ5KSAqIFB0clNpemUsIGEyCiAgICAgICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklU
R2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKQEAgLTEwNTYsMTAgKzEwNjEsNiBAQCBzdHJpY3RF
cXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5h
bWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFk
YXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxl
KHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDJdCi0gICAgICAgIGVu
ZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGxvYWRxIFtjZnIsIHQwLCA4
XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpAQCAtMTA2OSw3ICsxMDcwLDcgQEAgbWFj
cm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICBpbnRlZ2VyT3Bl
cmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51bWJlclRhZywgdDEKICAgICAgICAgc3Rv
cmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJv
ZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBB
cml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6
CkBAIC0xMTM0LDExICsxMTM1LDYgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
bmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBy
ZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3Jo
IHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCiAgICAgbWV0YWRhdGEodDEsIHQy
KQpAQCAtMTE0NiwxMiArMTE0MiwxMiBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwg
T3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5l
Z2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0
aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRo
UHJvZmlsZUludCwgdDEsIHQyKQogICAgIHJldHVybih0MykKIC5vcE5lZ2F0ZU5vdEludDoKICAg
ICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JxIDB4ODAwMDAwMDAw
MDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQor
ICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIs
IHQxLCB0MikKICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTY0LDEwICsx
MTYwLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgIGxs
aW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChz
aXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0YSh0
NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5
cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fcmhzLCB0
MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZShzaXplLCB0MCwgdDEpCkBAIC0xMTc3LDcgKzExNjksNyBAQCBtYWNybyBiaW5hcnlPcEN1c3Rv
bVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGlu
dGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5zbG93LCB0MikKIAotICAgICAgICBwcm9m
aWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxl
KG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGRpc3Bh
dGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTg3LDEwICsxMTc5LDEwIEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYnRxeiB0MSwgbnVtYmVy
VGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwg
ZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1
cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJO
dW1iZXIsIHQ1LCB0MikKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJ
bnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAg
ICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1i
ZXJJbnQsIHQ1LCB0MikKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgIC5vcDFOb3RJbnRSZWFk
eToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEyMDQsOSArMTE5Niw5IEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKIAogICAgIC5vcDJOb3RJbnQ6CiAgICAg
ICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBpcyBk
ZWZpbml0ZWx5IG5vdC4KLSAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYnRxeiB0MSwg
bnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikK
KyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9m
aWxlSW50TnVtYmVyLCB0NSwgdDIpCisgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGNp
MmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEs
IGZ0MQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIw
LDcgKzE0MjAsOCBAQCBlbmQKIAogbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFj
dGlvbikKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBiYWRkaXMgaW5jcmVtZW50
LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291
bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2xs
aW50RXhlY3V0ZUNvdW50ZXJbdDBdLCB0MAorICAgIGJhZGRpcyBpbmNyZW1lbnQsIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgYWN0aW9uKCkK
ICAgICAuY29udGludWU6CiBlbmQKQEAgLTE1MDMsNyArMTUwNCw4IEBAIG1hY3JvIHByb2xvZ3Vl
KGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2MKICAgICBjb2RlQmxvY2tHZXR0ZXIodDEpCiAgICAg
Y29kZUJsb2NrU2V0dGVyKHQxKQogICAgIGlmIG5vdCAoQ19MT09QIG9yIENfTE9PUF9XSU4pCi0g
ICAgICAgIGJhZGRpcyA1LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QxXSwgLmNvbnRpbnVlCisgICAgICAgIGxv
YWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyW3QxXSwgdDAKKyAgICAgICAgYmFk
ZGlzIDUsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVl
CiAgICAgICAgIGlmIEpTVkFMVUU2NAogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAgICAg
ICAgICBtb3ZlIFBDLCBhMQpAQCAtMTYxNywxNCArMTYxOSwxNCBAQCBtYWNybyBmdW5jdGlvbklu
aXRpYWxpemF0aW9uKHByb2ZpbGVBcmdTCiAgICAgIyBvcHRpbWFsIHdheSBmb3IgYXJjaGl0ZWN0
dXJlcyB0aGF0IGhhdmUgbW9yZSB0aGFuIGZpdmUgcmVnaXN0ZXJzIGF2YWlsYWJsZQogICAgICMg
Zm9yIGFyYml0cmFyeSB1c2UgaW4gdGhlIGludGVycHJldGVyLgogICAgIGxvYWRpIENvZGVCbG9j
azo6bV9udW1QYXJhbWV0ZXJzW3QxXSwgdDAKLSAgICBhZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAg
IyBVc2UgYWRkaSBiZWNhdXNlIHRoYXQncyB3aGF0IGhhcyB0aGUgcGVlcGhvbGUKKyAgICBhZGRw
IC1wcm9maWxlQXJnU2tpcCwgdDAKICAgICBhc3NlcnQobWFjcm8gKG9rKSBicGd0ZXEgdDAsIDAs
IG9rIGVuZCkKICAgICBidHB6IHQwLCAuYXJndW1lbnRQcm9maWxlRG9uZQogICAgIGxvYWRwIENv
ZGVCbG9jazo6bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMgKyBGaXhlZFZlY3Rvcjo6bV9zdG9yYWdl
ICsgUmVmQ291bnRlZEFycmF5OjptX2RhdGFbdDFdLCB0MwogICAgIGJ0cHogdDMsIC5hcmd1bWVu
dFByb2ZpbGVEb25lICMgV2hlbiB3ZSBjYW4ndCBKSVQsIHdlIGRvbid0IGFsbG9jYXRlIGFueSBh
cmd1bWVudCB2YWx1ZSBwcm9maWxlcy4KICAgICBtdWxwIHNpemVvZiBWYWx1ZVByb2ZpbGUsIHQw
LCB0MiAjIEFhYWFhaGhoaCEgTmVlZCBzdHJlbmd0aCByZWR1Y3Rpb24hCiAgICAgbHNoaWZ0cCAz
LCB0MCAjIG9mZnNldCBvZiBsYXN0IEpTVmFsdWUgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4KLSAg
ICBhZGRwIHQyLCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBpbiBD
b2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLgorICAgIGFkZHAgdDIsIHQzICMgcG9p
bnRlciB0byBlbmQgb2YgVmFsdWVQcm9maWxlIGFycmF5IGluIHRoZSB2YWx1ZSBwcm9maWxlIGFy
cmF5LgogLmFyZ3VtZW50UHJvZmlsZUxvb3A6CiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIGxv
YWRxIFRoaXNBcmd1bWVudE9mZnNldCAtIDggKyBwcm9maWxlQXJnU2tpcCAqIDhbY2ZyLCB0MF0s
IHQyCkBAIC0yNTYzLDYgKzI1NjUsMTcgQEAgbWFjcm8gbm90U3VwcG9ydGVkKCkKICAgICBlbmQK
IGVuZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlw
ZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgVW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3Jo
IHR5cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKwogLy8gRklYTUU6
IFdlIHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0X1dJTiBjb25kaXRpb24gaGVyZSwgc2luY2Ug
V0VCQVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUgZmFsc2Ugb24gV2luZG93cwogLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNgogaWYgV0VCQVNTRU1CTFkg
YW5kIG5vdCBYODZfNjRfV0lOCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDggKzQ4LDEwIEBAIHB1YmxpYzoKICAgICBDYWNoZWFibGVJZGVudGlmaWVy
KCkgPSBkZWZhdWx0OwogCiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNy
ZWF0ZUZyb21DZWxsKEpTQ2VsbCogaWRlbnRpZmllcik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNo
ZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2Rl
QmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJ
ZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sq
LCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIGNvbnN0IElkZW50aWZpZXIm
KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKENvZGVCbG9ja1R5cGUqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKFVuaXF1
ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBDYWNoZWFibGVJZGVudGlmaWVy
IGNyZWF0ZUZyb21SYXdCaXRzKHVpbnRwdHJfdCByYXdCaXRzKSB7IHJldHVybiBDYWNoZWFibGVJ
ZGVudGlmaWVyKHJhd0JpdHMpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNp
b24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRl
bnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE0IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJs
b2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2Rl
QmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhjb2RlQmxvY2ssIGkuaW1wbCgpKTsKIH0KIAotaW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxvY2stPmhh
c0lkZW50aWZpZXIodWlkKSk7CiAgICAgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIodWlkKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJ
KHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
ZFR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJ
VENvZGUuaCIKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUNh
Y2hlRXJyb3IuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKQEAgLTE5
MTgsNiArMTkxOSw4IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bVZhbHVlUHJvZmlsZXMo
KSBjb25zdCB7IHJldHVybiBtX251bVZhbHVlUHJvZmlsZXM7IH0KICAgICB1bnNpZ25lZCBudW1B
cnJheVByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1BcnJheVByb2ZpbGVzOyB9CisgICAg
dW5zaWduZWQgbnVtQmluYXJ5QXJpdGhQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQmlu
YXJ5QXJpdGhQcm9maWxlczsgfQorICAgIHVuc2lnbmVkIG51bVVuYXJ5QXJpdGhQcm9maWxlcygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtVW5hcnlBcml0aFByb2ZpbGVzOyB9CiAKIHByaXZhdGU6CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fdGhpc1JlZ2lzdGVyOwpAQCAtMTk1Miw2ICsxOTU1LDggQEAg
cHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVQcm9maWxlczsKICAgICB1bnNpZ25l
ZCBtX251bUFycmF5UHJvZmlsZXM7CisgICAgdW5zaWduZWQgbV9udW1CaW5hcnlBcml0aFByb2Zp
bGVzOworICAgIHVuc2lnbmVkIG1fbnVtVW5hcnlBcml0aFByb2ZpbGVzOwogCiAgICAgQ2FjaGVk
TWV0YWRhdGFUYWJsZSBtX21ldGFkYXRhOwogCkBAIC0yMTYwLDYgKzIxNjUsOCBAQCBBTFdBWVNf
SU5MSU5FIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlCiAgICAgLCBtX3JhcmVEYXRhKGNhY2hl
ZENvZGVCbG9jay5yYXJlRGF0YShkZWNvZGVyKSkKICAgICAsIG1fdmFsdWVQcm9maWxlcyhjYWNo
ZWRDb2RlQmxvY2subnVtVmFsdWVQcm9maWxlcygpKQogICAgICwgbV9hcnJheVByb2ZpbGVzKGNh
Y2hlZENvZGVCbG9jay5udW1BcnJheVByb2ZpbGVzKCkpCisgICAgLCBtX2JpbmFyeUFyaXRoUHJv
ZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bUJpbmFyeUFyaXRoUHJvZmlsZXMoKSkKKyAgICAsIG1f
dW5hcnlBcml0aFByb2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1VbmFyeUFyaXRoUHJvZmlsZXMo
KSkKIHsKIH0KIApAQCAtMjMzNyw2ICsyMzQ0LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIENhY2hl
ZENvZGVCbG9jazxDb2RlQgogICAgIG1faGFzQ2hlY2twb2ludHMgPSBjb2RlQmxvY2subV9oYXND
aGVja3BvaW50czsKICAgICBtX251bVZhbHVlUHJvZmlsZXMgPSBjb2RlQmxvY2subV92YWx1ZVBy
b2ZpbGVzLnNpemUoKTsKICAgICBtX251bUFycmF5UHJvZmlsZXMgPSBjb2RlQmxvY2subV9hcnJh
eVByb2ZpbGVzLnNpemUoKTsKKyAgICBtX251bUJpbmFyeUFyaXRoUHJvZmlsZXMgPSBjb2RlQmxv
Y2subV9iaW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICBtX251bVVuYXJ5QXJpdGhQcm9m
aWxlcyA9IGNvZGVCbG9jay5tX3VuYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CiAKICAgICBtX21l
dGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9tZXRhZGF0YS5nZXQoKSk7CiAgICAg
bV9yYXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcmFyZURhdGEuZ2V0KCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCShyZXZpc2lvbiAyODMwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODAsNyArNDgwLDcgQEAg
SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90bwogI2lmIEVOQUJMRShKSVQp
CiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3AoT3BOZWdhdGU6
Ok1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZSByZXN1bHQsIEpTVmFsdWUgb3BlcmFuZCkKIHsK
LSAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxl
OworICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gKm1ldGFkYXRhLm1fYXJpdGhQcm9m
aWxlOwogICAgIHByb2ZpbGUub2JzZXJ2ZUFyZyhvcGVyYW5kKTsKICAgICBBU1NFUlQocmVzdWx0
LmlzTnVtYmVyKCkgfHwgcmVzdWx0LmlzQmlnSW50KCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24g
MjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsyODksOCBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZlJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9yYXJlRGF0YSk7IH0KICAgICBzdGF0aWMg
aW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFzU3RyaW5nSW5SYXJlRGF0YSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihSYXJlRGF0YSwgbV9hc1N0cmluZyk7IH0KKyAgICBzdGF0aWMgaW5saW5l
IHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9ja0ZvckNhbGwpOyB9CisgICAgc3Rh
dGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdCk7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNp
b24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzNCw4ICs0MzQsNiBAQCB2b2lkIE9wdGlvbnM6OnJlY29tcHV0
ZURlcGVuZGVudE9wdGlvbnMoCiAgICAgT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkgPSBmYWxz
ZTsKICNlbmRpZgogCi0gICAgaWYgKCFpc0FSTTY0KCkpCi0gICAgICAgIE9wdGlvbnM6OnVzZURh
dGFJQygpID0gZmFsc2U7CiAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKICAgICAgICAg
T3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCkgPSBmYWxzZTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyODMw
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDYgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RN
ZW1vcnkoKTsKICAgICB2KEludDMyLCBldmFsVGhyZXNob2xkTXVsdGlwbGllciwgMTAsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1heGltdW1FdmFsQ2FjaGVhYmxlU291cmNl
TGVuZ3RoLCAyNTYsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKLSAgICB2KEJvb2wsIHJhbmRv
bWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2tw
b2ludHNGb3JCYXNlbGluZSwgMTAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJbnQzMiwg
bWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvclVwcGVyVGllcnMsIDUw
MDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkBAIC01MzIsNiArNTMxLDcgQEAgYm9vbCBj
YW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZURhdGFJQywgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDSW5PcHRpbWl6aW5n
SklULCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNTaGFy
aW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB1c2VCYXNlbGluZUpJ
VENvZGVTaGFyaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgLyogRmVh
dHVyZSBGbGFncyAqL1wKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjgzMDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5Niw3ICszOTYsOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVG
b3JFeGVjdXRpCiAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlQnl0ZWNvZGUoKSkKICAgICAgICAg
Y29kZUJsb2NrLT52YWxpZGF0ZSgpOwogCi0gICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpCisg
ICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51
bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlKQorICAgICAgICBjb2Rl
QmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VO
b25OdWxsKCkpOworICAgIGVsc2UgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpCiAgICAgICAgIHNl
dHVwTExJbnQoY29kZUJsb2NrKTsKICAgICBlbHNlCiAgICAgICAgIHNldHVwSklUKHZtLCBjb2Rl
QmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVw
Q291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21M
TEludFRpZXJVcENvdW50ZXIuaAkocmV2aXNpb24gMjgzMDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw5ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAg
IHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgpKQotICAgICAg
ICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplQWZ0
ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9u
czo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGlt
aXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQo
T3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAK
ICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKQEAgLTY1LDkg
KzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVTb29uKCkKICAgICB7CiAgICAgICAg
IGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9CQlEoKSkKLSAgICAgICAgICAgIHNldE5l
d1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZVNvb24oKSwgbnVsbHB0
cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJR
T3B0aW1pemVTb29uKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hv
bGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAg
ICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXpl
U29vbigpKTsKICAgICB9CiAKICAgICBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAkocmV2aXNpb24g
MjgzMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20gewogCiBUaWVyVXBDb3VudDo6VGllclVwQ291bnQoKQogewotICAgIHNldE5ld1Ro
cmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51
bGxwdHIpOworICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRp
bWl6ZUFmdGVyV2FybVVwKCkpOwogfQogCiBUaWVyVXBDb3VudDo6flRpZXJVcENvdW50KCkgPSBk
ZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENv
dW50LmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UaWVyVXBDb3VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAodWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAg
ICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25J
bmRleCwgIjogT01HLW9wdGltaXppbmcgYWZ0ZXIgd2FybS11cC4iKTsKLSAgICAgICAgc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwg
bnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JP
TUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0KIAogICAgIGJvb2wgY2hlY2tJZk9wdGlt
aXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtOTAsMTQgKzkwLDE0IEBAIHB1YmxpYzoKICAg
ICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAg
ICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25J
bmRleCwgIjogT01HLW9wdGltaXppbmcgbmV4dCBpbnZvY2F0aW9uLiIpOwotICAgICAgICBzZXRO
ZXdUaHJlc2hvbGQoMCwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9sZCgwKTsKICAg
ICB9CiAKICAgICB2b2lkIG9wdGltaXplU29vbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAg
IHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbklu
ZGV4LCAiOiBPTUctb3B0aW1pemluZyBzb29uLiIpOwogICAgICAgICAvLyBGSVhNRTogTmVlZCBh
ZGp1c3RtZW50IG9uY2Ugd2UgZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2FzbSBmdW5jdGlv
bnMuCi0gICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRp
bWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0
aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRPcHRp
bWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQodWludDMyX3QgZnVuY3Rp
b25JbmRleCwgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQpJbmRleDogU291cmNlL1dURi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4MzAx
OSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMjEtMDktMjQgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAg
ICAgQnVpbGQgYW4gdW5saW5rZWQgYmFzZWxpbmUgSklUCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjkyMjMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzgyMzIxNzcyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogd3RmL0JhZy5oOgorICAgICAgICAqIHd0Zi9QYWNrZWQuaDoKKyAgICAgICAgKFdURjo6
UGFja2VkQWxpZ25lZFB0cjo6b3BlcmF0b3IqIGNvbnN0KToKKwogMjAyMS0wOS0yMyAgVGltIEhv
cnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIG1vcmUgbGlu
a2VkLW9uLW9yLWFmdGVyIGNoZWNrcyB0byBXZWJDb3JlOjpsaW5rZWRPbk9yQWZ0ZXIoKQpJbmRl
eDogU291cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFn
LmgJKHJldmlzaW9uIDI4MzAxOSkKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw2ICs2NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG90aGVyLm1faGVhZCA9IG51
bGxwdHI7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBCYWcmIG9wZXJh
dG9yPShCYWc8VCwgVT4mJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh1bndyYXBwZWRIZWFk
KCkgPT0gb3RoZXIudW53cmFwcGVkSGVhZCgpKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
CisgICAgICAgIEJhZyBkZXN0cm95OworICAgICAgICBkZXN0cm95Lm1faGVhZCA9IHVud3JhcHBl
ZEhlYWQoKTsKKyAgICAgICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgpOworICAgICAg
ICBvdGhlci5tX2hlYWQgPSBudWxscHRyOworCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CisKICAgICB+QmFnKCkKICAgICB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9QYWNrZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAkocmV2
aXNpb24gMjgzMDE5KQorKysgU291cmNlL1dURi93dGYvUGFja2VkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE4Niw3ICsxODYsMTAgQEAgcHVibGljOgogICAgIH0KIAogICAgIFQqIG9wZXJhdG9yLT4o
KSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQotICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuICpnZXQoKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUgPSBUPgorICAgIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3ZvaWRfdjxVPiwgVSY+Ojp0eXBlIG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQorCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiAhZ2V0KCk7IH0KIAogICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBh
bGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdl
ciB0eXBlcy4K
</data>
<flag name="commit-queue"
          id="462785"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439189</attachid>
            <date>2021-09-24 13:32:15 -0700</date>
            <delta_ts>2021-09-24 13:41:57 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>646209</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzOCBA
QAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhZGRzIGFuICJ1bmxpbmtlZCIgYmFzZWxpbmUgSklUIHRvIEpTVkFMVUU2
NCBwbGF0Zm9ybXMuIFRoZSBKSVQKKyAgICAgICAgY29kZSBwcm9kdWNlZCBieSB0aGlzIGJhc2Vs
aW5lIEpJVCBjYW4gYmUgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3MgdGhhdAorICAgICAg
ICBzaGFyZSBhbiBVbmxpbmtlZENvZGVCbG9jay4gVGhlIGJlbmVmaXQgb2YgdGhpcyBpcywgaWYg
d2UncmUgY3JlYXRpbmcgYSBDb2RlQmxvY2sKKyAgICAgICAgZnJvbSBhbiBVbmxpbmtlZENvZGVC
bG9jayB0aGF0IGFscmVhZHkgY29tcGlsZWQgYW4gdW5saW5rZWQgYmFzZWxpbmUgSklUCisgICAg
ICAgIGluc3RhbmNlLCB0aGlzIG5ldyBDb2RlQmxvY2sganVzdCBzdGFydHMgb2ZmIGV4ZWN1dGlu
ZyBpbiB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgICJmb3IgZnJlZSIuCisgICAgICAgIAorICAg
ICAgICBUbyBtYWtlIHRoaXMgd29yaywgdGhlIGNvZGUgd2UgZW1pdCBub3cgbmVlZHMgdG8gYmUg
aW5kZXBlbmRlbnQgb2YgYSBzcGVjaWZpYworICAgICAgICBDb2RlQmxvY2sgaW5zdGFuY2UuIFdl
IHVzZSBhIENvZGVCbG9jayBpbnN0YW5jZSBmb3IgbWluaW1hbCBwcm9maWxpbmcgaW5mb3JtYXRp
b24KKyAgICAgICAgd2hlbiBjb21waWxpbmcsIGJ1dCBvdGhlcndpc2UsIHRoZSBjb2RlIGlzIHRp
ZWQgdG8gdGhlIFVubGlua2VkQ29kZUJsb2NrLiBXaGVuCisgICAgICAgIHdlIG5lZWQgQ29kZUJs
b2NrIHNwZWNpZmljIGluZm9ybWF0aW9uLCB3ZSBsb2FkIGl0LiBUaGlzIHVzdWFsbHkgbWVhbnMg
dGhpbmdzCisgICAgICAgIGxpa2Ugd2UnbGwgbG9hZCB0aGluZ3MgZnJvbSB0aGUgTWV0YWRhdGEg
ZHluYW1pY2FsbHkuIFRoaXMgcGF0Y2ggYWxzbyBhZGRzIGEKKyAgICAgICAgImxpbmtlZCBjb25z
dGFudCBwb29sIiBjb25jZXB0LCBhbmQgYW55dGltZSB3ZSBpbnN0YW50aWF0ZSBzdWNoIGEgQ29k
ZUJsb2NrLAorICAgICAgICB3ZSBhbHNvIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcyAibGlua2Vk
IGNvbnN0YW50IHBvb2wiLiBUaGlzIGNvbnRhaW5zIHRoaW5ncworICAgICAgICBsaWtlIG91ciBp
bmxpbmUgY2FjaGUgZGF0YSBzdHJ1Y3R1cmVzIChTdHJ1Y3R1cmVTdHViSW5mbyopLCBKU0dsb2Jh
bE9iamVjdCosCisgICAgICAgIGV0Yy4KKyAgICAgICAgCisgICAgICAgIFVubGlua2VkIGJhc2Vs
aW5lIEpJVCBhbHdheXMgcnVucyBJQ3MgaW4gdGhlICJkYXRhIiBtb2RlLiBUbyBtYWtlIHRoaXMg
d29yaywgSQorICAgICAgICBtYWRlIGRhdGEgSUNzIHdvcmsgb24geDg2XzY0LiBUbyBkbyB0aGlz
LCB3ZSBubyBsb25nZXIgY2FsbC9yZXQgdG8gdGhlIElDLgorICAgICAgICBJbnN0ZWFkLCB3ZSBq
dW1wIHRvIHRoZSBJQywgYW5kIHRoZSBJQyBqdW1wcyBiYWNrIGJ5IGxvYWRpbmcgdGhlICJkb25l
IiBsb2NhdGlvbgorICAgICAgICBmcm9tIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBkeW5hbWljYWxs
eS4gVGhpcyBzaW1wbGlmaWVzIHRoZSBkZXNpZ24gdG8gbm90IGJlCisgICAgICAgIGJhc2VkIG9u
IHRoZSBhcm02NCBjYWxsaW5nIGNvbnZlbnRpb24sIGFuZCBrZWVwcyB0aGUgc2FtZSBwZXJmb3Jt
YW5jZSBjaGFyYWN0ZXJpc3RpY3MuIAorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNv
IGFkZHMgYSBuZXcgdmVyc2lvbiBvZiBJbmxpbmVBY2Nlc3MgdGhhdCBpcyBvbmx5IHVzZWQgaW4g
YmFzZWxpbmUKKyAgICAgICAgSklUIChmb3Igbm93KS4gSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIG1h
a2UgdGhlIERGRy9GVEwgYWxzbyB1c2UgdGhpcyBmb3IgRGF0YQorICAgICAgICBJQ3MuIEJ1dCB3
ZSBkb24ndCBuZWVkIHRvIGRvIHRoYXQgeWV0IHNpbmNlIHRob3NlIHRpZXJzIGRvbid0IHVzZSBk
YXRhIElDcyBieQorICAgICAgICBkZWZhdWx0LiBUaGUgYmFzZWxpbmUgSklUIG5vdyBoYXMgYSBw
dXJlIGRhdGEgSUMgYXBwcm9hY2ggdG8gSW5saW5lQWNjZXNzLiBTbworICAgICAgICBpbnN0ZWFk
IG9mIHJlcGF0Y2hpbmcgY29kZSwgd2UgcmVwYXRjaCBmaWVsZHMgd2UgbG9hZCBkeW5hbWljYWxs
eS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgYSBmZXcgdGhp
bmdzIGluIE9TUiBleGl0LCB3aGVyZSBib3RoIERGRy9GVEwgd2VyZQorICAgICAgICBzdG9yaW5n
IGNhbGxlZSBzYXZlcyB0byB0aGUgY2FsbGVlIHNhdmVzIGJ1ZmZlciBpbiBhIHdlaXJkIHBsYWNl
LCBhbmQgc2VwYXJhdGUKKyAgICAgICAgZnJvbSBvbmUgYW5vdGhlci4gSSBub3RpY2VkIHRoaXMg
Y29kZSBjYW4gYmUgc2ltcGxpZmllZCBpZiB3ZSBqdXN0IHN0b3JlCisgICAgICAgIGNhbGxlZSBz
YXZlcyBhdCB0aGUgZW5kIG9mIHRoZSBPU1IgZXhpdCBoYW5kbGVyLCBhbmQgZnJvbSBjb21tb24g
SklUIGVtaXNzaW9uCisgICAgICAgIGNvZGUuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNo
IGFsc28gZml4ZXMgYSBidWcgd2hlcmUgd2UgY291bGQgZW5kIHVwIHdpdGggdGhlIHdyb25nIChh
bmQgYWx3YXlzCisgICAgICAgIG1vcmUgbmVnYXRpdmUpIFNQIGluIHRoZSBiYXNlbGluZSBKSVQu
IFRoaXMgY291bGQgaGFwcGVuIHdoZW4gd2UgT1NSIGV4aXQKKyAgICAgICAgZnJvbSBhbiBpbmxp
bmVkIGdldHRlci9zZXR0ZXIuIFRoZSBPU1IgZXhpdCBjb2RlIHB1dHMgdGhlIHJldHVybiBQQyB3
aGVuCisgICAgICAgIHJldHVybmluZyB0byB0aGUgY2FsbCBzaXRlIG9mIHRoZSBnZXR0ZXIvc2V0
dGVyIHRvIGJlIHRoZSBpbmxpbmUgY2FjaGUncworICAgICAgICAiZG9uZSBsb2NhdGlvbiIuIEhv
d2V2ZXIsIHRoaXMgImRvbmUgbG9jYXRpb24iIGRpZG4ndCB1c2VkIHRvIHJlc3RvcmUgU1AuCisg
ICAgICAgIFRoaXMgcGF0Y2ggY29uc2VydmF0aXZlbHkgbWFrZXMgaXQgc28gdGhhdCB3ZSByZXN0
b3JlIHRoZSBTUCBhdCB0aGVzZSBzaXRlcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbWVh
c3VyZWQgYXMgYSAxJSBzcGVlZHVwIG9uIFNwZWVkb21ldGVyMi4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlT3Bl
cmFuZHNGb3JDaGVja3BvaW50Lmg6CisgICAgICAgIChKU0M6OnZhbHVlUHJvZmlsZU9mZnNldEZv
cik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjplbWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RmFz
dFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKToKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgpOgorICAgICAgICAo
SlNDOjpDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMpOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNsb3dT
dHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjphZGRyZXNzT2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZSk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6ZnJhbWVSZWdpc3RlckNvdW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiaW5hcnlB
cml0aFByb2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5hcnlBcml0aFBy
b2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluZFBDKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpqaXRTb29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRO
ZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRBZGRJQyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUTXVsSUMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVFN1YklDKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRKSVROZWdJQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6aml0QWZ0ZXJXYXJtVXApOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29u
c3RhbnRQb29sKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFzZWxpbmVKSVRDb25zdGFudFBvb2wpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpkb250SklUQW55dGltZVNvb24pOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duQ2VsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6YWRkTWF0aElDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzZXRKSVRDb2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRD
b2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzd2l0Y2hKdW1wVGFi
bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJh
c2VsaW5lU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNlbGlu
ZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZGZnU3dp
dGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdTdHJpbmdTd2l0Y2hK
dW1wVGFibGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uu
aDoKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjpzZXRUaHJlc2hvbGQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0
aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJ
ZE1ldGFkYXRhLmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0
aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpHZXRCeUlkTW9kZU1ldGFk
YXRhOjpvZmZzZXRPZk1vZGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcDoK
KyAgICAgICAgKEpTQzo6R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0
U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEdl
dHRlcik6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6
OkluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToK
KyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5s
aW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UpOgorICAgICAgICAoSlND
OjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChK
U0M6OklubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OklubGlu
ZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyk6CisgICAgICAgIChKU0M6OklubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2Vzcyk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmg6
CisgICAgICAgICogYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmg6CisgICAgICAgIChK
U0M6Okl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMpOgorICAgICAgICAq
IGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6CisgICAgICAgIChKU0M6OkxMSW50Q2FsbExp
bmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSk6CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2Rl
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAo
SlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OmNhbGN1bGF0ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0
aW9uSGFuZGxpbmcpOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNl
cnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMpOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgICogYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0
YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5jcHA6CisgICAgICAg
IChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OmluaXRHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0UHV0QnlJZFJlcGxhY2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5p
dEluQnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNz
Q2FzZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZE
b25lTG9jYXRpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHA6CisgICAg
ICAgIChKU0M6OnByaW50U3VwZXJTYW1wbGVyU3RhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0lk
ZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dGhyZXNob2xkRm9y
SklUKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJv
ZmlsZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6Omluc3RydWN0aW9uQXQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmJpbmFyeUFyaXRoUHJvZmlsZSk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp1bmFyeUFyaXRoUHJvZmlsZSk6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpsbGludEV4ZWN1dGVDb3VudGVyKToKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaDoKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRNZXRhZGF0YVRhYmxlOjpvZmZzZXRJbk1ldGFkYXRhVGFibGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNl
OjpWYWx1ZVByb2ZpbGVCYXNlKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQmFzZTo6Y2xl
YXJCdWNrZXRzKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVj
a2V0KToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb2RlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAqIGRmZy9E
RkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxpbmsp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJl
cGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmhhbmRsZUV4aXRDb3VudHMp
OgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRK
dW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRQcml2YXRlTmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVWYWx1ZVN1Yik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dTaGFkb3dDaGlja2VuVGFpbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExKSVRDb2Rl
Lmg6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Omxpbmsp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjphZGRNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlVW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpjb21waWxlQmluYXJ5TWF0aElDKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVB1dFByaXZhdGVOYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAg
ICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29t
cGlsZVN0dWIpOgorICAgICAgICAqIGdlbmVyYXRvci9NZXRhZGF0YS5yYjoKKyAgICAgICAgKiBq
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpz
dG9yZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVh
bENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMu
aDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6CisgICAgICAgICogaml0L0Jhc2VsaW5lSklUQ29kZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKToKKyAg
ICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZGRKSVRNdWxJQyk6CisgICAgICAgIChKU0M6Ok1h
dGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMpOgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFk
ZEpJVE5lZ0lDKToKKyAgICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MpOgor
ICAgICAgICAoSlNDOjpCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAg
IChKU0M6OkJhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAgICogaml0
L0Jhc2VsaW5lSklUQ29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SklUQ29uc3RhbnRQb29s
OjphZGQpOgorICAgICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OnNpemUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OmF0IGNvbnN0KToKKyAgICAgICAgKiBqaXQvQmFz
ZWxpbmVKSVRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6QmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6
ZSk6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkNDYWxs
SGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKToKKyAgICAgICAgKEpTQzo6
Q0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldCk6CisgICAgICAgICogaml0
L0NDYWxsSGVscGVycy5oOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHA6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oOgorICAgICAgICAq
IGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpDYWxsRnJhbWVTaHVmZmxlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpwcmVwYXJlRm9yVGFpbENhbGwpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5o
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c25hcHNob3QgY29uc3QpOgorICAg
ICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OkpJVCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRWYXJS
ZWFkT25seUNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc2V0U1ApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5k
Q29uc3RhbnRQb29sUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpm
aW5hbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcik6CisgICAgICAgIChK
U0M6OkpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKToKKyAgICAgICAgKiBqaXQvSklULmg6Cisg
ICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVnYXRlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2FkZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tdWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3ViKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2Fs
bEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2l0ZXJhdG9yX25leHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX25leHQpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxl
U2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dD
YXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpT
Qzo6SklUQ29kZTo6dXNlRGF0YUlDKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6cGNUb0NvZGVP
cmlnaW5NYXApOgorICAgICAgICAqIGppdC9KSVRDb21waWxhdGlvbktleS5jcHA6CisgICAgICAg
IChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklU
Q29tcGlsYXRpb25LZXkuaDoKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OkpJVENv
bXBpbGF0aW9uS2V5KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJhdG9y
ISBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpvcGVy
YXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Omhhc2ggY29u
c3QpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6cHJvZmlsZWRCbG9jayBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXpl
KToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJ
VEdldEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUdldEJ5SWRJbmxpbmVB
Y2Nlc3MpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJ
VFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkpJVERlbEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklURGVsQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAg
IChKU0M6OkpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAo
SlNDOjpKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpKSVRHZXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXRoKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0
YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudEludCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6aXNLbm93bkNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdldENv
bnN0YW50T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6
bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmFkdmFuY2VUb05l
eHRDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdExvYWREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkpJVDo6anVtcFRhcmdldCk6CisgICAgICAgIChKU0M6OkpJVDo6
bG9hZFB0ckZyb21NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZDMyRnJvbU1ldGFk
YXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkOEZyb21NZXRhZGF0YSk6CisgICAgICAgIChK
U0M6OkpJVDo6c3RvcmU4VG9NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6c3RvcmUzMlRv
TWV0YWRhdGEpOgorICAgICAgICAoSlNDOjpKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
SklUOjpsb2FkR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29kZUJsb2Nr
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEdldFB1dEluZm8pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZSk6IERlbGV0ZWQuCisgICAg
ICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9u
dWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzVHJ1dGh5
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dp
dGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVj
a190cmFwcyk6CisgICAgICAgIChKU0M6OkpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5l
d0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYXJndW1lbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9v
Zik6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdHlwZW9mX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SklUX09QRVJBVElPTik6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBqaXQvSklUUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmtleSk6CisgICAgICAg
ICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6c2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9k
ZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
aW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQcml2YXRlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SGFzUHJpdmF0ZVNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19w
cml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRl
X2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmspOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29w
ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKToKKyAgICAg
ICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF90
b19zY29wZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1
cmVWYXIpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9wcml2YXRlX2Jy
YW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9pbnRl
cm5hbF9maWVsZCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUdldEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeSk6CisgICAgICAgIChK
U0M6OnRyeUNhY2hlSW5CeSk6CisgICAgICAgIChKU0M6OnVubGlua0NhbGwpOgorICAgICAgICAq
IGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpoYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxl
RXhjZXB0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6Cisg
ICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6
aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRf
U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayk6CisgICAgICAgICogcnVudGltZS9DYWNoZWRU
eXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtQmluYXJ5QXJpdGhQ
cm9maWxlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtVW5hcnlB
cml0aFByb2ZpbGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9j
a1R5cGU+OjplbmNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoK
KyAgICAgICAgKEpTQzo6dXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKToKKyAgICAg
ICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlv
bnMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1l
L1NjcmlwdEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpw
cmVwYXJlRm9yRXhlY3V0aW9uSW1wbCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRUaWVyVXBD
b3VudGVyLmg6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6b3B0aW1p
emVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6
b3B0aW1pemVTb29uKToKKyAgICAgICAgKiB3YXNtL1dhc21UaWVyVXBDb3VudC5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50OjpUaWVyVXBDb3VudCk6CisgICAgICAgICogd2Fz
bS9XYXNtVGllclVwQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6Om9w
dGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6b3B0
aW1pemVOZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50Ojpv
cHRpbWl6ZVNvb24pOgorCiAyMDIxLTA5LTIzICBQaGlsaXAgQ2hpbWVudG8gIDxwY2hpbWVudG9A
aWdhbGlhLmNvbT4KIAogICAgICAgICBWYXJpb3VzIHR3ZWFrcyBpbiBwcmVwYXJhdGlvbiBmb3Ig
VGVtcG9yYWwuSW5zdGFudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC04MzcsNiArODM3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQQogCiAgICAgaml0L0Fzc2VtYmx5SGVscGVycy5oCiAgICAgaml0
L0Fzc2VtYmx5SGVscGVyc1Nwb29sZXJzLmgKKyAgICBqaXQvQmFzZWxpbmVKSVRDb2RlLmgKICAg
ICBqaXQvQ0NhbGxIZWxwZXJzLmgKICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCiAgICAg
aml0L0V4ZWN1dGFibGVNZW1vcnlIYW5kbGUuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC02MTksNiArNjE5LDcgQEAgaW50ZXJwcmV0ZXIvU2hhZG93
Q2hpY2tlbi5jcHAKIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKIAogaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAKK2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCiBqaXQvQmFzZWxpbmVKSVRQbGFu
LmNwcAogaml0L0JpbmFyeVN3aXRjaC5jcHAKIGppdC9DQ2FsbEhlbHBlcnMuY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTkwMCw2ICs5MDAsNyBAQAogCQk1MkNEMEY1RDIyNDJGNTY5MDA0QTE4
QTUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlv
bi5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0MkY1NjkwMDRBMThBNSAvKiBKYXZhU2Ny
aXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJh
bWV3b3JrICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNEMEY2NzIy
NDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87IH07CisJCTUyREQwMDA4MjZFMDM5Qjkw
MDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJ
VENvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MkVFRDc5NDI0OTJCODcwMDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRUVENzkzMjQ5MkI4Njgw
MDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovOyB9OwogCQk1MkY2QzM1RTFFNzFFQjA4
MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyB9OwogCQk1MzBBNjZCOTFGQTNFNzhC
MDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCMTFGQTNFNzdBMDAyNkE1NDUgLyogVW5pZmll
ZFNvdXJjZTMtbW0ubW0gKi87IH07CkBAIC0xMjIwLDcgKzEyMjEsNyBAQAogCQk3OTg3MkM0ODIy
MUJCQUYzMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODcyQzQ3MjIxQkJBRUQwMDhDNjk2OSAvKiBKU0Jh
c2VJbnRlcm5hbC5oICovOyB9OwogCQk3OTlFRjdDNDFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1Rv
T3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBMDkwODAxRDc2ODQ2
NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3OUEy
MjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyog
QXJpdGhQcm9maWxlLmggKi87IH07CisJCTc5QTIyODM2MUQzNUQ3MUYwMEQ4RTA2NyAvKiBBcml0
aFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUFCQjE3RTFFNUNDQjU3MDA0
NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUFCQjE3QzFFNUNDQjU3MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1i
bGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzlBQzMwRkYxRjk5NTM2NDAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBQzMw
RkUxRjk5NTM2MzAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oICov
OyB9OwogCQk3OUFGMEJFNDFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFGMEJF
MzFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM2NzQsNiArMzY3NSw4IEBA
CiAJCTUyQ0QwRjY0MjI0MkY1NjkwMDRBMThBNSAvKiB0ZXN0ZGZnICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFi
bGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0ZGZnOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRm
Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0ZGZnLmNwcDsg
cGF0aCA9IGRmZy90ZXN0ZGZnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJE
MTMwOEYyMjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9IGZvby5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJE
RDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCYXNlbGluZUpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJERDAw
MDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBCYXNlbGluZUpJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MkVFRDc5MjI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzYsNiArNjI3OSw4IEBA
CiAJCQkJNkI3NjdFN0EyNjc5MUYyNzAwMTdGOEQxIC8qIEFzc2VtYmx5SGVscGVyc1Nwb29sZXJz
LmggKi8sCiAJCQkJNzIzOTk4RjYyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5j
cHAgKi8sCiAJCQkJNzIzOTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5o
ICovLAorCQkJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuY3Bw
ICovLAorCQkJCTUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAq
LywKIAkJCQkwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNwcCAqLywK
IAkJCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi8sCiAJCQkJ
NjVCODM5MkQxQkFDQTlEMzAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmNwcCAqLywKQEAgLTk3
MzAsNiArOTczNSw3IEBACiAJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1OTUwIC8qIERGR0Zsb3dN
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdG
bHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJERDAwMDgyNkUwMzlCOTAw
NTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTUx
QUIzRDhCRTAwQkJCOEU4IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjY5Q0M4OTE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzODZGRDdFMjZFODY3QjgwMEU0QzI4QiAvKiBUZW1wb3JhbFBsYWluVGltZS5oIGlu
IEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxNSArMjAyLDE1
IEBAIFJlZlB0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9tU3RydWMKICAgICBzd2l0Y2gg
KHN0dWJJbmZvLmNhY2hlVHlwZSgpKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxm
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIp
OwotICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwg
TG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBQcm94eWFi
bGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBMb2FkLCBpZGVudGlmaWVyLCBzdHViSW5m
by5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8uaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkp
OwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgogICAgICAgICBSRUxFQVNF
X0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICByZXR1cm4g
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmllciwgc3R1Yklu
Zm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBS
ZXBsYWNlLCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8uaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJ
ZFNlbGY6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRp
Zmllcik7Ci0gICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBJbkhp
dCwgaWRlbnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNl
OjpjcmVhdGUodm0sIG93bmVyLCBJbkhpdCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZP
ZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNh
c2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1Yklu
Zm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKQEAgLTE5ODUsMTQgKzE5ODUsMTAgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAvLyBTdHVmZiBmb3Ig
Y3VzdG9tIGdldHRlcnMvc2V0dGVycy4KICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJh
dGlvbkNhbGw7CiAKKwogICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNh
bGN1bGF0aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAgICAgICAvLyBleGNlcHRp
b24gaGFuZGxpbmcgY2FsbCBzaXRlLgotICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVy
c1RvUHJlc2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VE
YXRhSUMoKSkKLSAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRS
ZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgotICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNw
aWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tG
b3JDYWxsKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAgIEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0
ZXJzVG9TdGFja0ZvckNhbGwoKTsKIAogICAgICAgICBhdXRvIHJlc3RvcmVMaXZlUmVnaXN0ZXJz
RnJvbVN0YWNrRm9yQ2FsbCA9IFsmXShBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUm
IHNwaWxsU3RhdGUsIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlKSB7CiAgICAgICAgICAgICBSZWdp
c3RlclNldCBkb250UmVzdG9yZTsKQEAgLTIwNzksOCArMjA3NSw3IEBAIHZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIEFTU0VSVCghKG51bWJlck9m
UmVnc0ZvckNhbGwgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSk7CiAgICAgICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXpl
b2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwogCi0gICAgICAgICAgICB1
bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQotICAgICAgICAgICAgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0Zv
ckNhbGwpOworICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxs
ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVy
T2ZCeXRlc0ZvckNhbGwpOwogCiAgICAgICAgICAgICBqaXQuc3ViUHRyKAogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2Fs
bCksCkBAIC0yMTM4LDYgKzIxMzMsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChB
Y2Nlc3NHZW5lCiAKICAgICAgICAgICAgIGludCBzdGFja1BvaW50ZXJPZmZzZXQgPSAoY29kZUJs
b2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpIC0gc3RhdGUucHJl
c2VydmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZS5udW1iZXJPZkJ5dGVzUHJlc2VydmVkIC0gc3BpbGxT
dGF0ZS5udW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb247CiAgICAg
ICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKwogICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUg
PSBpc0dldHRlcigpOwogICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tG
b3JDYWxsKHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7CiAKQEAgLTIyNjQsMTIgKzIy
NjAsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAKICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5
Ojp0YXJnZXRPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgICAgICBSZWdpc3RlclNl
dCBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAg
aWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAgICAgZXh0cmFSZWdpc3Rl
cnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCi0gICAgICAgICAg
ICBhdXRvIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9y
Q2FsbFdpdGhvdXRFeGNlcHRpb25zKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAg
ICAgICBhdXRvIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNr
Rm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3Vt
ZW50czxkZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+KENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cigmdm0pLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGppdC5wcmVw
YXJlQ2FsbE9wZXJhdGlvbih2bSk7CkBAIC0yMzY0LDEwICsyMzU1LDYgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVy
c1RvUHJlc2VydmUuc2V0KGJhc2VHUFIpOwogICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJz
VG9QcmVzZXJ2ZS5zZXQodmFsdWVSZWdzKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgICAgICAgICAg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgogICAg
ICAgICAgICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRl
ID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3Rl
cnNUb1ByZXNlcnZlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmUzMigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3Qu
cmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGlzdC5yYgkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBAIG9w
X2dyb3VwIDpQcm9maWxlZEJpbmFyeU9wLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmlu
YXJ5QXJpdGhQcm9maWxlCisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTMsNyAr
MzUzLDcgQEAgb3BfZ3JvdXAgOlVuYXJ5SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgICAgIHNyY0Rz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJp
dGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5
QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDp0b19vYmplY3QsCkBAIC0zODYsNyArMzg2LDcg
QEAgb3AgOm5lZ2F0ZSwKICAgICAgICAgcmVzdWx0VHlwZTogUmVzdWx0VHlwZSwKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUs
CisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3Ag
Om5vdCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJh
bmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNo
ZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjggQEAgVmFsdWVQcm9maWxl
KiB2YWx1ZVByb2ZpbGVGb3JJbXBsKEJ5dGVjbwogICAgICAgICByZXR1cm4gJm1ldGFkYXRhLm1f
cHJvZmlsZTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgordWludHB0cl90IHZh
bHVlUHJvZmlsZU9mZnNldEZvcih1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCit7CisgICAgVU5V
U0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRleCk7CisgICAgaWYgY29uc3RleHByIChCeXRlY29kZTo6
b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3Jfb3BlbikgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9p
bnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1
cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOworICAgICAg
ICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZk5leHRQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKEJ5
dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CisgICAgICAgIHN3aXRjaCAo
Y2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVO
ZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRSZXN1bHRQcm9maWxl
KCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJldHVybiBCeXRlY29k
ZTo6TWV0YWRhdGE6Om9mZnNldE9mRG9uZVByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJh
dG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mVmFs
dWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIHJldHVybiBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29k
ZU1ldGFkYXRhPgogYm9vbCBoYXNWYWx1ZVByb2ZpbGVGb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0
YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE0LDExICsxMTQsNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5r
KFZNJiB2bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7CiB9CiAKLUNvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgp
Ci17Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFn
PihtX2Zhc3RQYXRoU3RhcnQpOwotfQotCiBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KCFpc0RhdGFJQygpKTsKQEAgLTIyNSw2ICsyMjAsMTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnNl
dE1heEFyZ3VtZW50Q291bnRJbgogICAgIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PSB2YWx1ZTsKIH0KIAorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExp
bmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVjdCgp
ICYmIGlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxK
U0ludGVybmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQpOworfQorCiB2b2lkIENh
bGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRvIGhhbmRsZVNwZWNpZmlj
Q2FsbGVlID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKQEAgLTI5OCwyMyArMjk5LDExIEBA
IHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGMKICAgICBtX2ZyYW1lU2h1
ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBD
YWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewotICAgIHNldFVzZXNEYXRh
SUNzKHVzZURhdGFJQyk7Ci0gICAgaWYgKGlzRGF0YUlDKCkpIHsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7Ci0gICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZv
R1BSKTsKLSAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9H
UFI7Ci0gICAgfQotCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAg
aml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBt
X2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
ZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNs
b3dQYXRoOwogCi0gICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICBpZiAodXNlRGF0YUlDID09IFVz
ZURhdGFJQzo6WWVzKSB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hS
ZWdpc3RlcigpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2Fs
bExpbmtJbmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7IAogICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKQEAgLTMyMyw3ICszMTIsNyBAQCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAgICAgICBnb1BvbHlt
b3JwaGljID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNo
R1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5bW9ycGhpY0NhbGxlZU1hc2spKTsK
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAg
IHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgZ29Qb2x5bW9ycGhpYy5saW5rKCZq
aXQpOyAvLyBQb2x5bW9ycGhpYyBzdHViIGhhbmRsZXMgdGFpbCBjYWxsIHN0YWNrIHByZXAuCiAg
ICAgICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZv
R1BSLCBvZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFn
KTsKQEAgLTMzNiwxNCArMzI1LDE2IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmUKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2go
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKSk7CiAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGNhbGw7Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFp
bENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAg
Y2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBj
YWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJ
bmZvKTsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAgICAgICAgICAgIHUu
Y29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJ
Qy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJu
YWxQdHJUYWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2Nh
bGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNh
bGxlZUNoZWNrKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNTMsMTMgKzM0NCwzNCBAQCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlD
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0
RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywg
bnVsbHB0cik7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKworICAgIGlmIChpc0Rh
dGFJQygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJS
ZWc6OkludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHUuZGF0YUlDLm1fY2Fs
bExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKworICAgIHJldHVybiBlbWl0
RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURh
dGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQs
IEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VE
YXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwot
ICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9H
UFIsIHVzZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKKyAgICBzZXRVc2Vz
RGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlz
LCBqaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgVXNlRGF0YUlDOjpObywgaXNUYWlsQ2Fs
bCgpLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVy
biBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4gZW1p
dEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBV
c2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKIH0KIAog
dm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0
KQpAQCAtMzY5LDE3ICszODEsMzIgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChW
TSYgdm0sIAogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
Miwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9
CiAKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBqaXQubW92ZShjYWxsTGlu
a0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSks
IEpTRW50cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJ
QyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBtX2NvZGVPcmln
aW4gPSBDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAg
IHNldFVwQ2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2FsbGVlR1BSKTsKKyAg
ICBtX2RvbmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbjsKKyAg
ICBpZiAodW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkgeworICAgICAgICAv
LyBGSVhNRTogSXQnZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBzdHJ1
Y3R1cmUuCisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1l
U2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsKKyAg
ICB9CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlDLm1f
Y2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2FsbERl
c3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUg
cmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6
ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0VfQVNT
RVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7
CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhT
dGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0
YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgdS5j
b2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0lu
dGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQu
bGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0UGF0
aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRo
U3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwgdGhp
cyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNp
Z25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2Fs
bExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGlu
ZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAg
IGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwK
ICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAg
ICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVE
YXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0
dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50
OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgot
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVy
cyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVU
VVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1w
bChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGlj
OgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRo
KENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJl
Rm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBh
cmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZh
c3RQYXRoKENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2Fs
bCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBzdGF0
aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wg
aXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0
YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsyNDks
NiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAotICAg
IEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zbG93
U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsKICAg
ICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBt
X21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJfdCBt
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVibGlj
OgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlvblR5
cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9jYXRp
b25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAgICAg
IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxvY2F0
aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9z
bG93UGF0aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAKQEAg
LTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9y
aQogICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3QgVW5s
aW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsgLy8g
Q3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxseSBw
cm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBl
OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZsZURh
dGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw4ICsyNzksNiBAQCBDb2RlQmxvY2s6OkNvZGVC
bG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihm
YWxzZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9oYXNC
ZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNl
KQotICAgICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUoZmFsc2UpCiAgICAgLCBtX251
bUNhbGxlZUxvY2FscyhvdGhlci5tX251bUNhbGxlZUxvY2FscykKICAgICAsIG1fbnVtVmFycyhv
dGhlci5tX251bVZhcnMpCiAgICAgLCBtX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKG90aGVyLm1f
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCkBAIC0zMDgsNiArMzA2LDggQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3Zp
ZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKKwor
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxpbnRFeGVjdXRl
Q291bnRlcigpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwog
fQpAQCAtMzE4LDcgKzMxOCw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIEMKICAgICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKICAgICBvcHRpbWl6ZUFmdGVy
V2FybVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKIAogICAgIGlmIChvdGhlci5tX3JhcmVE
YXRhKSB7CiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTMzNiw4ICsz
MzUsNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBt
X2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0
aW9uKGZhbHNlKQogICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwg
bV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNlKQotICAgICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUoZmFsc2UpIAogICAgICwgbV9udW1DYWxsZWVMb2NhbHModW5saW5rZWRDb2RlQmxvY2st
Pm51bUNhbGxlZUxvY2FscygpKQogICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5u
dW1WYXJzKCkpCiAgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQpAQCAtMzU5LDcg
KzM1Niw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAg
IEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlu
a2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9sbGludEV4ZWN1
dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CisKICAg
ICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcwLDcgKzM2OSw4
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIC8vIHdlIGNhbid0
IGdlbmVyYXRlIGR1cmluZyB1bmxpbmtlZCBieXRlY29kZSBnZW5lcmF0aW9uLiBUaGlzIHByb2Nl
c3MgaXMgbm90IGFsbG93ZWQgdG8gZ2VuZXJhdGUgY29udHJvbAogLy8gZmxvdyBvciBpbnRyb2R1
Y2UgbmV3IGxvY2Fscy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB3ZSByZWx5IG9uIGxpdmVuZXNz
IGFuYWx5c2lzIHRvIGJlIHRoZSBzYW1lIGZvcgogLy8gYWxsIHRoZSBDb2RlQmxvY2tzIG9mIGFu
IFVubGlua2VkQ29kZUJsb2NrLiBXZSByZWx5IG9uIHRoaXMgZmFjdCBieSBjYWNoaW5nIHRoZSBs
aXZlbmVzcyBhbmFseXNpcwotLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLgorLy8gaW5zaWRl
IFVubGlua2VkQ29kZUJsb2NrLiBBbHNvLCBCYXNlbGluZSBKSVQgY29kZSBpcyBzaGFyZWQgYmV0
d2VlbiBhbGwgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jaywKKy8vIHNvIHRoZSBi
eXRlY29kZSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBiZXR3ZWVuIENvZGVCbG9ja3Mgc2hhcmluZyBh
biBVbmxpbmtlZENvZGVCbG9jay4KIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sq
IHVubGlua2VkQ29kZUJsb2NrLAogICAgIEpTU2NvcGUqIHNjb3BlKQogewpAQCAtNDcxLDYgKzQ3
MSwyMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAg
IGJyZWFrOyBcCiAgICAgfQogCisgICAgdW5zaWduZWQgYmluYXJ5UHJvZmlsZUluZGV4ID0gMDsK
KyAgICB1bnNpZ25lZCB1bmFyeVByb2ZpbGVJbmRleCA9IDA7CisjZGVmaW5lIExJTktfV0lUSF9C
SU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAg
IElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJv
ZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJpbmFyeVByb2ZpbGVJ
bmRleCsrKTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJ
TklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2Zp
bGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKHVuYXJ5UHJvZmlsZUluZGV4
KyspOyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mIGluc3RydWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25z
dCBhdXRvJiBpbnN0cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29k
ZUlEIG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMsMTQgKzU0OCwx
NCBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJ
TksoT3BDcmVhdGVQcm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0g
ICAgICAgIExJTksoT3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BE
aXYpCi0gICAgICAgIExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAg
ICAgTElOSyhPcEluYykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJ
TkFSWV9BUklUSF9QUk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRI
X1BST0ZJTEUoT3BNdWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShP
cERpdikKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisg
ICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBM
SU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAg
LTc2OSw3ICs3ODQsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBT
CiAgICAgLy8gcmVseSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5
IHBlcm1pdHRlZCB0byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFt
IHRvIG1vcmUgYWNjdXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGlt
aXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgLy8gSWYgdGhl
IGNvbmN1cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4g
Y29tcHV0ZSBpdCBoZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAgLTc5Myw2ICs4MDcsNzgg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3duZXJF
ZGdlLnNldCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZtLCB0
aGlzKSk7CiB9CiAKKyNpZiBFTkFCTEUoSklUKQordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVu
bGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7CisgICAg
c2V0SklUQ29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0IGF1
dG8mIGppdENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAgICAg
ICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAgaGFu
ZGxlci5uYXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50
YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CisgICAgICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOwor
ICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGpp
dENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAgICAg
IHN3aXRjaCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6
OlR5cGU6Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3Rh
bnRQb29sW2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7
CisgICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJ
bmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9hZC5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXRE
YXRhLm1fY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5i
eXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFsaXpl
RGF0YUlDKHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5m
bzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0g
PSBjYWxsTGlua0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86
IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0
dWJJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRyeS5w
YXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBqaXREYXRhLm1fc3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUs
IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAg
ICAgICAgc3R1YkluZm8tPmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyh0
aGlzLCB1bmxpbmtlZFN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gc3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25E
ZWNsOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1f
aml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpGdW5jdGlvbkV4cHI6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAg
ICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5kZXgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBH
bG9iYWxDb2RlOgorICAgIGNhc2UgTW9kdWxlQ29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgorICAg
ICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZ1bmN0aW9uQ29kZToKKyAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNl
dCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgor
ICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBtX3No
b3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYmIERG
Rzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgaWYgKGppdENvZGUtPm1faXNTaGFyZWFibGUgJiYgIXVubGlua2VkQ29kZUJsb2NrKCktPm1f
dW5saW5rZWRCYXNlbGluZUNvZGUgJiYgT3B0aW9uczo6dXNlQmFzZWxpbmVKSVRDb2RlU2hhcmlu
ZygpKQorICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2Rl
ID0gV1RGTW92ZShqaXRDb2RlKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCiBDb2RlQmxv
Y2s6On5Db2RlQmxvY2soKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtODczLDYgKzk1OSwy
NyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAK
K2Jvb2wgQ29kZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBuZWVkcyB0byBjb3JyZXNwb25k
IHRvIHdoYXQgd2UgZG8gaW5zaWRlIHNldENvbnN0YW50UmVnaXN0ZXJzLgorICAgIHN3aXRjaCAo
dW5saW5rZWRDb2RlQmxvY2soKS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVn
KSkgeworICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgIGNh
c2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcjogeworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gdW5saW5rZWRDb2RlQmxvY2soKS0+Z2V0Q29uc3RhbnQocmVnKTsKKyAg
ICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlm
IChjZWxsLT5pbmhlcml0czxTeW1ib2xUYWJsZT4odm0oKSkgfHwgY2VsbC0+aW5oZXJpdHM8SlNU
ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KHZtKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKIFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhj
b25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0
IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbikKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTg5Miw2ICs5OTks
NyBAQCBWZWN0b3I8dW5zaWduZWQ+IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSCiAgICAgICAgIHN3
aXRjaCAocmVwcmVzZW50YXRpb24pIHsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb25zdGFudCA9IGdsb2JhbE9i
amVjdC0+bGlua1RpbWVDb25zdGFudChzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50Pihjb25z
dGFudC5hc0ludDMyQXNBbnlJbnQoKSkpOworICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50Lmlz
Q2VsbCgpKTsgLy8gVW5saW5rZWQgQmFzZWxpbmUgSklUIHJlcXVpcmVzIHRoaXMuCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVy
OgogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKQEAgLTE1
MTQsNyArMTYyMiw3IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJsb2NrOjplbnN1cmVKSVQK
ICAgICByZXR1cm4gKm1faml0RGF0YTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFz
ZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5l
Q2FjaGVzKCkKIHsKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewog
ICAgICAgICBmb3IgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxs
TGlua0luZm9zKQpAQCAtMTUyNSw2ICsxNjMzLDIwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZUJhc2VsaW5lSklUSW5saW4KICAgICAgICAgICAgIHN0dWJJbmZvLT52aXNpdFdlYWtSZWZlcmVu
Y2VzKGxvY2tlciwgdGhpcyk7CiAgICAgICAgIH0KICAgICB9CisKKworI2lmIEFTU0VSVF9FTkFC
TEVECisgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAg
ICAvLyBWZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3Jl
IHZpcnR1YWwgY2FsbHMuCisgICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
OiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxD
YWxsTGlua0luZm9zKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5r
ZWQoKSk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtd
IChKU0NlbGwqKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgfQorI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAt
MTUzNCw0NiArMTY1NiwxMiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAg
ICBib29sIGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50
RG93bmdyYWRlOwotICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0g
ICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1p
emVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFz
ZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9y
eS4KLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYm
IGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxv
Y2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJs
b2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAg
ICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJ
bnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJP
ZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUt
PmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5m
byYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1
bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgp
KS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IHVubGlua0luY29taW5nQ2FsbHMoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNh
ZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwotICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2Fm
ZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIg
Ynl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFy
c2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMg
KmluZm9zLgotICAgICAgICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYK
LSAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAg
ICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgaWYgKCEhaml0Q29kZSgpKQotICAgICAgICBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKCk7CisgICAgICAgIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShERkdfSklUKQpAQCAtMTU5NCw3ICsxNjgyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1
bms6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuazoKLSAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50
KCk7CisgICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y291bnQoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgog
ICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CkBAIC0xNjc1
LDMwICsxNzYzLDYgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgog
ICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5
cGUsIGNvZGVPcmlnaW4pOwogfQogCi1KSVRBZGRJQyogQ29kZUJsb2NrOjphZGRKSVRBZGRJQyhC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2Fk
ZElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklU
TXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVFN1YklDKiBDb2RlQmxvY2s6
OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0
YShsb2NrZXIpLm1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVROZWdJQyogQ29k
ZUJsb2NrOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewot
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJl
SklURGF0YShsb2NrZXIpLm1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCiBTdHJ1Y3R1
cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKQEAgLTMxMzMsNyAr
MzE5Nyw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lm
IEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0
dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzM0OSwxMyArMzQx
MywxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAg
c3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAg
IHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwor
ICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9m
aWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERp
dj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC0zMzY3LDExICszNDMxLDExIEBAIFVuYXJ5QXJpdGhQcm9maWxl
KiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7
CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigp
Lm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9w
TmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5j
OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5t
X2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8
T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBw
Yy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzQ3MiwyMiArMzUzNiwxNiBAQCB2b2lkIENv
ZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiB9CiAKICNpZiBFTkFCTEUoSklUKQot
dm9pZCBDb2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1Rv
Q29kZU9yaWdpbk1hcD4mJiBtYXApIAoteyAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7Ci0gICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1fcGNUb0NvZGVPcmlnaW5NYXAg
PSBXVEZNb3ZlKG1hcCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2Nr
OjpmaW5kUEModm9pZCogcGMpCiB7CisgICAgaWYgKGF1dG8qIHBjVG9Db2RlT3JpZ2luTWFwID0g
bV9qaXRDb2RlLT5wY1RvQ29kZU9yaWdpbk1hcCgpKSB7CisgICAgICAgIGlmIChzdGQ6Om9wdGlv
bmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBwY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBj
KSkKKyAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAgIH0KKwogICAgIHsKICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBpZiAoYXV0byog
aml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICAgICAgaWYgKGppdERhdGEtPm1f
cGNUb0NvZGVPcmlnaW5NYXApIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxD
b2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gaml0RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcC0+Zmlu
ZFBDKHBjKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47Ci0gICAgICAg
ICAgICB9Ci0KICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDog
aml0RGF0YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNv
bnRhaW5zUEMocGMpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxD
b2RlT3JpZ2luPihzdHViSW5mby0+Y29kZU9yaWdpbik7CkBAIC0zNTIxLDI4ICszNTc5LDE0IEBA
IHN0ZDo6b3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0
ZWNvZGVJbmRleDsKIH0KIAotaW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQz
Ml90IHRocmVzaG9sZCkKLXsKLSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9w
dGltaXplKCkpIHsKLSAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICBy
ZXR1cm4gdGhyZXNob2xkOwotICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1
cm4gdGhyZXNob2xkICogNDsKLSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1
cm4gdGhyZXNob2xkIC8gMjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIHRocmVzaG9sZDsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkK
K3ZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIu
c2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRB
ZnRlcldhcm1VcCgpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdU
aHJlc2hvbGQodW5saW5rZWRDb2RlQmxvY2soKS0+dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOwogfQogCi12b2lkIENvZGVCbG9jazo6aml0U29v
bigpCit2b2lkIENvZGVCbG9jazo6aml0TmV4dEludm9jYXRpb24oKQogewotICAgIG1fbGxpbnRF
eGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+
c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwogfQogCiBib29sIENvZGVCbG9jazo6aGFzSW5zdGFs
bGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdApAQCAtMzU4OCwyOCArMzYzMiw4IEBAIHZvaWQg
Q29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRvdWJsZSBudW1TdWJzID0gMC4wOwog
ICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKLSAgICBhdXRvIGNvdW50SUNzID0gWyZd
IChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IGNv
ZGVCbG9jay0+bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKEpJVEFkZElDKiBh
ZGRJQyA6IGppdERhdGEtPm1fYWRkSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtQWRkcysrOwot
ICAgICAgICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29kZVNpemUoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMgOiBqaXREYXRhLT5t
X211bElDcykgewotICAgICAgICAgICAgICAgIG51bU11bHMrKzsKLSAgICAgICAgICAgICAgICB0
b3RhbE11bFNpemUgKz0gbXVsSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lDIDogaml0RGF0YS0+bV9uZWdJQ3MpIHsKLSAgICAg
ICAgICAgICAgICBudW1OZWdzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxOZWdTaXplICs9IG5l
Z0lDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJVFN1
YklDKiBzdWJJQyA6IGppdERhdGEtPm1fc3ViSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtU3Vi
cysrOwotICAgICAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJQy0+Y29kZVNpemUoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVC
bG9jayopIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmUtaW1wbGVtZW50IHRoaXMg
dXNpbmcgSklUQ29kZS4KICAgICB9OwogICAgIGhlYXAoKS0+Zm9yRWFjaENvZGVCbG9jayhjb3Vu
dElDcyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCBjbGFzcyBKU01vZHVs
ZUVudmlyb25tZW50OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTExJbnRQ
cm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OwogY2xhc3MgTWV0YWRhdGFU
YWJsZTsKLWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExp
c3Q7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAog
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEp
OwogCkBAIC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFk
YXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNp
Z25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citw
cml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7Citw
dWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBA
IHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJz
OyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2ln
bmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29k
ZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9j
ayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoK
ICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9v
bCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25D
ZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBg
cmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChy
ZWcuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXND
ZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewog
ICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJz
KTsKQEAgLTI2OCwyMyArMjU5LDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUKQogICAgIHN0
cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwor
ICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJh
ZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAgICAgIEJhZzxKSVRBZGRJQz4g
bV9hZGRJQ3M7Ci0gICAgICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Ci0gICAgICAgIEJhZzxK
SVROZWdJQz4gbV9uZWdJQ3M7Ci0gICAgICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7CiAgICAg
ICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxM
aW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5m
bz4+IG1faW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3Jw
aGljQ2FsbE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4g
bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1
bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdK
dW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29s
IG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2pp
dENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29s
OworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAg
IH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGlu
ZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkp
CkBAIC0yOTMsMjIgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgSklURGF0YSYgZW5zdXJl
SklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAKLSAgICBKSVRBZGRJQyog
YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11
bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFy
eUFyaXRoUHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQotCi0g
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+Ci0gICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAg
ICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVy
biBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2Vu
ZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUU3ViSUMqIGFk
ZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklD
KHByb2ZpbGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdERhdGEpOyB9CiAKICAgICBTdHJ1
Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSwgQ29kZU9yaWdpbik7CiAKQEAg
LTMyMiwxOCArMjk2LDggQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJ
bmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlu
a0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAg
ICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAg
IHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBl
bnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsK
LSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0gICAgewotICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1
cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBjb25zdCBKSVRDb2Rl
TWFwJiBqaXRDb2RlTWFwKCk7CiAKLSAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6
dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpvcHRpb25hbDxDb2Rl
T3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwogCiAgICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0
ZXJzKFJlZ2lzdGVyU2V0KTsKQEAgLTQ3Miw2ICs0MzYsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJp
bmcgbmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9CiAgICAgdW5zaWduZWQg
bnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
YXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9u
dW1QYXJhbWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNlSklUKCkpOwpAQCAtNTY5LDggKzUzNCwxMCBA
QCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0
YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAg
ICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCld
LmdldCgpOyB9CisgICAgYm9vbCBpc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZp
cnR1YWxSZWdpc3RlcikgY29uc3Q7CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKHJlZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKGluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNW
ZWN0b3JCdWZmZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0
YW50UmVnaXN0ZXJzKSArIGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5
T2Zmc2V0KCk7IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBp
bmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBu
dW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9
CkBAIC01OTUsMjIgKzU2MiwyMiBAQCBwdWJsaWM6CiAgICAgLy8gSnVtcCBUYWJsZXMKIAogI2lm
IEVOQUJMRShKSVQpCi0gICAgU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpCisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShp
bnQgdGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRj
aEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFu
dFBvb2woKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAg
ICAgcmV0dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wu
ZGF0YSgpOwogICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIHVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIAotI2lm
IEVOQUJMRShKSVQpCi0gICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUo
aW50IHRhYmxlSW5kZXgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEp
OwotICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07Ci0gICAgfQorI2lmIEVOQUJMRShERkdfSklUKQorICAgIFN0cmluZ0p1bXBUYWJs
ZSYgZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVK
dW1wVGFibGUmIGRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CiAjZW5kaWYKKwog
ICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIApAQCAt
NjMyLDIxICs1OTksMjAgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xk
UmVhY2hlZCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNo
ZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOworICAgICAgICByZXR1cm4gbV9sbGlu
dEV4ZWN1dGVDb3VudGVyLT5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKICAg
ICB9CiAKICAgICB2b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCiAgICAgewotICAgICAgICBtX2xs
aW50RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICAgICAgbV9sbGludEV4
ZWN1dGVDb3VudGVyLT5kZWZlckluZGVmaW5pdGVseSgpOwogICAgIH0KIAotICAgIGludDMyX3Qg
dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2Fy
bVVwKCk7CiAgICAgdm9pZCBqaXRTb29uKCk7CisgICAgdm9pZCBqaXROZXh0SW52b2NhdGlvbigp
OwogCiAgICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3Vu
dGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7
CisgICAgICAgIHJldHVybiAqbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIH0KIAogICAgIHR5
cGVkZWYgSGFzaE1hcDxzdGQ6OnR1cGxlPFN0cnVjdHVyZUlELCB1bnNpZ25lZD4sIEZpeGVkVmVj
dG9yPExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVj
dHVyZVdhdGNocG9pbnRNYXA7CkBAIC03OTcsNiArNzYzLDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3Rz
OyB9CiAgICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1
Z2dlclJlcXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVx
dWVzdHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVx
dWVzdHMpOyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2lu
dHMpOwogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykK
QEAgLTgzOCw2ICs4MDUsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2Nr
IG1fbG9jazsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJp
dGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBF
TkFCTEUoSklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBE
Rkc6OkNhcGFiaWxpdHlMZXZlbApAQCAtODQ3LDggKzgxNSw2IEBAIHB1YmxpYzoKICAgICBib29s
IG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1faGFzQmVlbkNvbXBpbGVk
V2l0aEZUTCA6IDE7CiAKLSAgICBib29sIG1faGFzTGlua2VkT1NSRXhpdCA6IDE7Ci0gICAgYm9v
bCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA6IDE7CiAgICAgYm9vbCBtX3Zpc2l0Q2hp
bGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAgLy8gSW50ZXJuYWwgbWV0
aG9kcyBmb3IgdXNlIGJ5IHZhbGlkYXRpb24gY29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBp
dCB3YXNuJ3QKQEAgLTkwNywxNiArODczLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3Ry
dWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBt
X2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpOyB9CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdp
YmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKLSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRp
bnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0g
ICAgICAgIHJldHVybiAhbV91bmxpbmtlZENvZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAg
fQorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5l
Q2FjaGVzKCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJ
bmxpbmVDYWNoZXMoKTsKKyAgICB2b2lkIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5k
aWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMo
KTsKQEAgLTEwMTAsNyArOTcyLDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50
TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9q
aXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJ
VERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2
ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jawpAQCAtMTAyOSw3ICs5OTMsNyBAQCBwcml2YXRl
OgogCiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAg
ICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJh
c2VsaW5lRXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9
OwogCiAgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAg
ICAgdWludDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRl
ICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5s
aW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkg
KzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlm
IChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0
YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9w
cm9maWxlLCBmYWxzZSk7IH0pOwotCiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVF
X1BST0ZJTEUoVklTSVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZv
ckVhY2g8T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1
Nyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAg
ICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAg
ICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwz
OCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQog
CisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZU19JTkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJs
b2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9q
aXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFwOworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1
bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+
bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmlu
Z0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQg
dGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2Rl
LmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlm
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBD
b2RlQmxvY2s6OmRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NF
UlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PERGRzo6SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6
ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChq
aXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZH
OjpKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7
CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQog
ICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25D
b3VudGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5
LDcgQEAgYm9vbCBFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNv
ZGVCbG9jayA/IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQp
OworICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAg
ICBtX2NvdW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25D
b3VudGVyLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAg
cHVibGljOgogICAgIHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3Ug
dXNlIHRoaXMsIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVy
biBmYWxzZS4KICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9j
ayopOwogICAgIGJvb2wgaGFzQ3Jvc3NlZFRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291
bnRlciA+PSAwOyB9Ci0gICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQs
IENvZGVCbG9jayopOworICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xk
LCBDb2RlQmxvY2sqID0gbnVsbHB0cik7CiAgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwog
ICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90
b3RhbENvdW50KSArIG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwpAQCAtODYsMTMgKzg2LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVCB0aHJlc2hvbGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVz
aG9sZChUIHRocmVzaG9sZCkKICAgICB7Ci0gICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwot
ICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNr
cG9pbnRzKCkgJiYgZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xv
YmFsT2JqZWN0LT53ZWFrUmFuZG9tSW50ZWdlcigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0Jl
dHdlZW5DaGVja3BvaW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hv
bGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAg
IGludDMyX3QgbWF4VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVj
a3BvaW50cygpOwogICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAg
ICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xk
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0
YWRhdGEuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0
cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0
QnlJZE1vZGVNZXRhZGF0YVVuc2V0KSA9PSAxMik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFk
YXRhQXJyYXlMZW5ndGggeworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2Zp
bGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVu
Z3RoLCBhcnJheVByb2ZpbGUpOyB9CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07
CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09
IDEyKTsKQEAgLTg4LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAg
ICAgIEdldEJ5SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENh
Y2hpbmc7IC8vIFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgog
ICAgIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9k
ZU1ldGFkYXRhRGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5z
ZXQgdW5zZXRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxl
bmd0aE1vZGU7CkBAIC0xMTcsNiArMTE5LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGEg
ewogICAgICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhUHJvdG9Mb2FkIHByb3RvTG9hZE1vZGU7CiAg
ICAgfTsKICAgICBHZXRCeUlkTW9kZSBtb2RlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1v
ZGUpOyB9CiAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsKIH07CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNw
cAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIEdldEJ5U3Rh
dHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgcmV0dXJuIEdldEJ5U3Rh
dHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAgICAKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJ
ZFNlbGY6IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZt
KCkpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQ
cm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBA
IHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEcKIAogICAgIC8vIExldCdz
IHN0b3JlIHRoZSByZXVzZWQgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4gQWZ0ZXIgdGhhdCwgd2Ug
Y2FuIHVzZSBhbGxvY2F0ZWQgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgYWxsb2NhdG9y
LnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOworICAgICAgICBhbGxvY2F0
b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CiAKICAgICBpZiAoR2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2co
ImJhc2VHUFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsKQEAgLTIyNSwxMiArMjI1LDkgQEAgdm9pZCBH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogICAgICAgICByZWdpc3RlcnNUb1Nw
aWxsRm9yQ0NhbGwuc2V0KHJlZyk7CiAgICAgZm9yIChGUFJSZWcgcmVnIDogZnBTY3JhdGNoKQog
ICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CisgICAgaWYgKGppdC5j
b2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2Fs
bC5zZXQoc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CiAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckND
YWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckNDYWxsKCkpOwot
I2lmIENQVShBUk02NCkKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2so
KTsKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgcmVnaXN0ZXJzVG9T
cGlsbEZvckNDYWxsLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCiAKICAgICBBY2Nl
c3NDYXNlU25pcHBldFBhcmFtcyBwYXJhbXMoc3RhdGUubV92bSwgV1RGTW92ZShyZWdzKSwgV1RG
TW92ZShncFNjcmF0Y2gpLCBXVEZNb3ZlKGZwU2NyYXRjaCkpOwogICAgIHNuaXBwZXQtPmdlbmVy
YXRvcigpLT5ydW4oaml0LCBwYXJhbXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzksNyArMTM5LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgog
ICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpJbkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1
YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSk7
CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3Bl
cnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZp
ZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsMTYg
QEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNz
KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0
eUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlm
ICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBk
eW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcg
ZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKICAgICAKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0y
MzMsMjMgKzIzOCwzMSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3Rl
CiAgICAgcmV0dXJuIGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJl
ZzsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFj
ZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jv
b2wgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZv
KTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYg
KCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9m
ZnNldCkpOworICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJs
b2NrLCBzdHViSW5mbywgb2Zmc2V0KSk7CisKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3Ry
dWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQogCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIApAQCAtMjc5LDIyICsyOTIsMjUgQEAg
Ym9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UgogICAgIHJldHVybiBsaW5r
ZWRDb2RlSW5saW5lOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxl
bmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJ
bmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgQVNT
RVJUKGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogCiAgICAgaWYgKCFzdHViSW5m
by5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlm
IChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWhhc0FueUFycmF5U3RvcmFnZShhcnJh
eS0+aW5kZXhpbmdUeXBlKCkpICYmIGFycmF5LT5pbmRleGluZ1R5cGUoKSAhPSBBcnJheUNsYXNz
OwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgQVNTRVJUKGlzQ2FjaGVhYmxlQXJy
YXlMZW5ndGgoc3R1YkluZm8sIGFycmF5KSk7CisgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ss
IGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywgYXJyYXkpKTsKIAog
ICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0zMTksMTcgKzMzNSwyMCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVB
cnJheUxlbmd0aChTCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLWJvb2wgSW5s
aW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCitib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICBpZiAo
IXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJ
bmZvKTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmlu
Z0xlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQogewotICAgIEFTU0VSVChpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChzdHViSW5mbykpOworICAg
IEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxv
Y2ssIHN0dWJJbmZvKSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmll
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzYzLDEzICszODIsMTggQEAgYm9vbCBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKAogfQogCiAKLWJvb2wgSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNz
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIXN0
dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gVGhlc2UgZHluYW1p
YyBzbG90cyBnZXQgZmlsbGVkIGluIGJ5IFN0cnVjdHVyZVN0dWJJbmZvLiBOb3RoaW5nIGVsc2Ug
dG8gZG8uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIEdQUlJlZyBiYXNlID0g
c3R1YkluZm8uYmFzZUdQUjsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVl
UmVncygpOwogCkBAIC00MDYsMTMgKzQzMCwxMyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjCiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAg
ICAgLy8gSWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9w
IHNsZWQgKGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFu
IGluZGlyZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcg
bV9jb2RlUHRyLgotICAgICAgICBpZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7
CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCAmJiBzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElm
IG1fY29kZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24s
IHRoaXMgbWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAg
ICAgICAgICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNo
aW5nIGNvZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBj
b2RlLgogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVz
cygpID09IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygp
KSB7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1Yklu
Zm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQo
Q0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnN0dWJJbmZvKSwgc3R1
YkluZm8ubV9zdHViSW5mb0dQUik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKENDYWxs
SGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHVi
Um91dGluZVB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1w
KCk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gc3R1YkluZm8uZG9u
ZUxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKQEAgLTQyMSw3ICs0NDUsOSBAQCB2b2lkIElubGluZUFjY2Vz
czo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nl
c3M6IGxpbmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAg
ICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CisgICAgICAgIHN0dWJJbmZvLm1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2Vz
cyBjb2RlLgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzQsOCArNDYwLDE0IEBAIHZv
aWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICB9KSwgIklubGluZUFj
Y2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpy
ZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCit2b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKKyAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSAmJiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCkgeworICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSBzdHViSW5mby5z
bG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLgorICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIo
c3R1YkluZm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRh
PHZvaWQoQ0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIGEgbm9wIHNsZWQgaGVyZSBiZWNhdXNlIG5vYm9keSBzaG91bGQgYmUg
anVtcGluZyBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCiAgICAgICAgIGF1dG8ganVtcCA9IGpp
dC5qdW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUFjY2Vzcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDE0ICs5OSwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBzdGQ6Om1heChzaXplLCBzaXplRm9yUHJvcGVydHlBY2Nl
c3MoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nl
c3MoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAg
c3RhdGljIGJvb2wgY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJ
bmZvJiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0
KTsKLSAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJ
bmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3Ro
KFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0
aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0
ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRp
YyBib29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3Rh
dGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wg
Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFBy
b3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29s
IGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7
CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJbkFj
Y2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOworICAgIHN0
YXRpYyBib29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJik7CiAKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2lu
Z0lubGluZUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CiAgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1
YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25N
b2RlTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBPVkVSTE9BRF9C
SVRXSVNFX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJdGVyYXRpb25Nb2RlTWV0
YWRhdGEgewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSXRlcmF0aW9u
TW9kZU1ldGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRl
Y2x0eXBlKHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRpb25Nb2RlKSk7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0lu
Zm8uaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0xMSW50Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKExMSW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KIAogcHJpdmF0ZToKICAg
ICB1aW50cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgeyB1bmxpbmtl
ZEJpdCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDE3IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgYml0V2lkdGhGb3JNYXgKICAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAogICAgIG1h
Y3JvKE9wSXRlcmF0b3JOZXh0KSBcCiAKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQklO
QVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKKyAgICBtYWNybyhPcEFkZCkgXAorICAgIG1hY3Jv
KE9wTXVsKSBcCisgICAgbWFjcm8oT3BEaXYpIFwKKyAgICBtYWNybyhPcFN1YikgXAorCisjZGVm
aW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKKyAg
ICBtYWNybyhPcEluYykgXAorICAgIG1hY3JvKE9wRGVjKSBcCisgICAgbWFjcm8oT3BOZWdhdGUp
IFwKKwogCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInR5cGUtbGltaXRzIikKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZv
aWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpzdWNjZWVkKCkKIHsKICAgICByZXN0b3JlU2NyYXRj
aCgpOwogICAgIGlmIChqaXQtPmNvZGVCbG9jaygpLT51c2VEYXRhSUMoKSkKLSAgICAgICAgaml0
LT5yZXQoKTsKKyAgICAgICAgaml0LT5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mRG9uZUxvY2F0
aW9uKCkpLCBKU0ludGVybmFsUHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIHN1Y2Nlc3MuYXBw
ZW5kKGppdC0+anVtcCgpKTsKIH0KQEAgLTExMCw2ICsxMTAsOCBAQCBjb25zdCBSZWdpc3RlclNl
dCYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7CiAKICAg
ICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1fbGl2ZVJlZ2lzdGVy
c1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9jYXRvci0+dXNlZFJl
Z2lzdGVycygpKTsKKyAgICAgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQor
ICAgICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5hZGQoc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIpOwogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGw7
CkBAIC0xMjgsMTEgKzEzMCwxMiBAQCBhdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2Vy
dmVMaXZlCiAgICAgfTsKIH0KIAotYXV0byBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZl
TGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29uc3QgUmVnaXN0
ZXJTZXQmIGV4dHJhKSAtPiBTcGlsbFN0YXRlCithdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6
cHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucygpIC0+
IFNwaWxsU3RhdGUKIHsKICAgICBSZWdpc3RlclNldCBsaXZlUmVnaXN0ZXJzID0gYWxsb2NhdG9y
LT51c2VkUmVnaXN0ZXJzKCk7CisgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygp
KQorICAgICAgICBsaXZlUmVnaXN0ZXJzLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7CiAg
ICAgbGl2ZVJlZ2lzdGVycy5leGNsdWRlKGNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgbGl2
ZVJlZ2lzdGVycy5tZXJnZShleHRyYSk7CiAKICAgICBjb25zdGV4cHIgdW5zaWduZWQgZXh0cmFT
dGFja1BhZGRpbmcgPSAwOwogICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JS
ZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVS
ZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqaml0LCBsaXZlUmVnaXN0ZXJzLCBleHRyYVN0YWNrUGFk
ZGluZyk7CkBAIC01OTYsMTYgKzU5OSwxMSBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHlt
b3JwaGljQWNjZXNzCiAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAgIHN0YXRl
LmppdCA9ICZqaXQ7CiAKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewotICAgICAg
ICBpZiAoc3RhdGUubV9kb2VzSlNHZXR0ZXJTZXR0ZXJDYWxscykgewotICAgICAgICAgICAgLy8g
V2UgaGF2ZSBubyBndWFyYW50ZWUgdGhhdCBzdGFjay1wb2ludGVyIGlzIHRoZSBleHBlY3RlZCBv
bmUuIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBpZiB3ZSBkbyBub3QgaGF2ZSBKUyBnZXR0ZXIgLyBz
ZXR0ZXIgY2FsbHMgc2luY2Ugc3RhY2stcG9pbnRlciBpcwotICAgICAgICAgICAgLy8gYSBjYWxs
ZWUtc2F2ZSByZWdpc3RlciBpbiB0aGUgQyBjYWxsaW5nIGNvbnZlbnNpb24uIEhvd2V2ZXIsIG91
ciBKUyBleGVjdXRhYmxlIGNhbGwgZG9lcyBub3Qgc2F2ZSBzdGFjay1wb2ludGVyLiBTbyB3ZSBh
cmUgYWRqdXN0aW5nIHN0YWNrLXBvaW50ZXIgYWZ0ZXIKLSAgICAgICAgICAgIC8vIEpTIGdldHRl
ciAvIHNldHRlciBjYWxscy4gQnV0IHRoaXMgY291bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlIGlu
aXRpYWwgc3RhY2stcG9pbnRlciwgYW5kIG1ha2VzIFBBQyB0YWdnaW5nIGJyb2tlbi4KLSAgICAg
ICAgICAgIC8vIFRvIGVuc3VyZSBQQUMtdGFnZ2luZyB3b3JrLCB3ZSBmaXJzdCBhZGp1c3Qgc3Rh
Y2stcG9pbnRlciB0byB0aGUgYXBwcm9wcmlhdGUgb25lLgotICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGppdC50YWdSZXR1
cm5BZGRyZXNzKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKKyAgICBpZiAoIWNhbkJlU2hhcmVkICYmIEFTU0VSVF9FTkFCTEVEKSB7CisgICAg
ICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFj
a1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgYXV0byBvayA9IGppdC5i
cmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgaml0LmJyZWFrcG9pbnQo
KTsKKyAgICAgICAgb2subGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0ZS5wcmVzZXJ2ZWRS
ZXVzZWRSZWdpc3RlclN0YXRlID0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewog
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjYWxjdWxhdGVMaXZlUmVnaXN0ZXJzRm9yQ2FsbEFuZEV4
Y2VwdGlvbkhhbmRsaW5nKCk7CiAKICAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7Ci0gICAgU3Bp
bGxTdGF0ZSBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRp
b25zKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7CisgICAgU3BpbGxTdGF0ZSBwcmVz
ZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAg
ICB2b2lkIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNl
cHRpb24oY29uc3QgU3BpbGxTdGF0ZSYpOwogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNG
cm9tU3RhY2tGb3JDYWxsKGNvbnN0IFNwaWxsU3RhdGUmLCBjb25zdCBSZWdpc3RlclNldCYgZG9u
dFJlc3RvcmUgPSB7IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTAg
KzE4MCwxMCBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVy
KCk7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh1aWQpOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1
YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7Cisg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICBy
ZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0dWJJbmZv
LT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAg
ICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0cnVj
dHVyZSwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTY1LDkg
KzY2LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKAogICAgIEFT
U0VSVChoYXNDb25zdGFudElkZW50aWZpZXIpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENh
Y2hlVHlwZTo6R2V0QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0g
ICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
ID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCku
aGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9m
ZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVT
dHViSW5mbzo6aW5pdEFycmF5TGVuZ3RoKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxv
Y2tlcikKQEAgLTg3LDkgKzg4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5
SWRSZXBsYQogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KTsKICAg
ICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlKTsKICAgICBt
X2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAg
IG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUt
PmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7
Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBv
ZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC05Nyw5ICs5OCw5IEBAIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGMKICAgICBBU1NFUlQobV9jYWNoZVR5
cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVU
eXBlOjpJbkJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAu
d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7
CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OmRlcmVmKCkKQEAgLTIzNiw3ICsyMzcsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0
cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgIC8vIHdlJ3JlIGJ1ZmZlcmVkIGlzIGJlY2F1c2Ugd2Ug
cmVseSBvbiBpdCB0byByZXNldCBkdXJpbmcgR0MgaWYgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlCiAgICAgICAgIC8vIGlzIGNvbGxlY3RlZC4KICAgICAgICAgbV9pZGVudGlmaWVyID0gbnVs
bHB0cjsKLSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7CisgICAg
ICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAgICAgICAgIAogICAgICAgICAv
LyBJZiB3ZSBnZW5lcmF0ZWQgc29tZSBjb2RlIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBhdHRlbXB0
IHRvIHJlcGF0Y2ggaW4gdGhlIGZ1dHVyZSB1bnRpbCB3ZQogICAgICAgICAvLyBnYXRoZXIgZW5v
dWdoIGNhc2VzLgpAQCAtMjUxLDcgKzI1Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJl
c2V0KGNvbnN0IENvbmMKIHsKICAgICBjbGVhckJ1ZmZlcmVkU3RydWN0dXJlcygpOwogICAgIG1f
aWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNs
ZWFyKCk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKIAogICAgIGlmICht
X2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CkBAIC0yODUs
NiArMjg2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAg
ICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0
aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NU
eXBlOjpJbkJ5SWQ6CkBAIC0zNjAsOCArMzYyLDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRXZWFrUmVmZXJlbgogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0gICAg
aWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgaXNWYWxpZCAmPSB2bS5o
ZWFwLmlzTWFya2VkKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgaWYg
KFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpCisg
ICAgICAgIGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpOwogICAgIGlmICht
X2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIGlzVmFsaWQgJj0gdS5zdHVi
LT52aXNpdFdlYWsodm0pOwogCkBAIC0zNzUsOCArMzc3LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7Ci0gICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgbV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZpc2l0b3Iudm0o
KSkpCisgICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAKICAgICBpZiAo
bV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICB1LnN0dWItPnByb3BhZ2F0
ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwpAQCAtNDMwLDYgKzQzMiwyMDkgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVU
eXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYg
dW5saW5rZWRTdHViSW5mbykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGFjY2Vzc1R5cGUg
PSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJ
bmZvLnN0YXJ0OworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0
aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1Bh
dGhTdGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNldCgpKSk7CisgICAg
Y29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsK
KyAgICBtX2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICB1c2VkUmVnaXN0
ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIGlmIChh
Y2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5ieXRl
Y29kZUluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwg
d2UgY2FuJ3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVyUmVnaXN0ZXIiIHJlZ2lzdGVyIGVpdGhl
ci4KKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpk
b250Q2xvYmJlclJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0
YW5jZU9mOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0
aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OlRyeUdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5
SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlk
RGlyZWN0OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdp
dGhUaGlzOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRo
aXNPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2
YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVO
YW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZUJyYW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0
UHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2
YXRlTmFtZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1
dEJ5SWQ6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1
YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGly
ZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3Qo
KSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZp
ZWxkRGVmaW5lOgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9w
dGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0
dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAg
ICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAg
ICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0
dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxk
UHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVu
dGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAg
ICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAg
cmVncy5wcm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVlR1BSID0gQmFz
ZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBC
YXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0
ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5w
cm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAg
bV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBwcm90b3R5cGVJc0tub3duT2Jq
ZWN0ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnZhbHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVy
czo6cmVzdWx0OworICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBoYXNDb25zdGFu
dElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkluQnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAg
ICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5C
eUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUlu
QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIGhhc0Nv
bnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnRoaXNHUFIgPSBC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBtX3N0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFs
aWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsK
KyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVu
dGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlw
ZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRl
QnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICB2
YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odW5saW5rZWRTdHViSW5mbyk7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpJ
VFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJP
cHRpb25zLmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0Lmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCkBAIC01
Niw2ICs1Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlW
YWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAg
ICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzgw
LDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAog
fTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVy
ZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDIsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBp
bml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAK
ICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRl
YWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTMyNSwxMyArMzMxLDE5
IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CisgICAg
UHJvcGVydHlPZmZzZXQgYnlJZFNlbGZPZmZzZXQ7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkJ5SWRTZWxmT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0
dWJJbmZvLCBieUlkU2VsZk9mZnNldCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
SW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1
Y3R1cmVTdHViSW5mbywgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsgfQogICAgIHVuaW9u
IHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsK
LSAgICAgICAgfSBieUlkU2VsZjsKICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAg
ICAgfSB1OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoVk0mIHZt
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZSht
X2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIH0KKyAgICBTdHJ1Y3R1cmVJRCBtX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAwIH07CiBwcml2YXRlOgogICAgIENhY2hlYWJsZUlk
ZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIC8vIFJlcHJlc2VudHMgdGhvc2Ugc3RydWN0dXJl
cyB0aGF0IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nlc3NDYXNlcyBpbiB0aGUgUG9seW1vcnBo
aWNBY2Nlc3MuCkBAIC0zNTIsNiArMzY0LDcgQEAgcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2RlUHRyOwogCiAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkNvZGVQdHIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0
dXJlU3R1YkluZm8sIG1fY29kZVB0cik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
RG9uZUxvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZv
LCBkb25lTG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRo
U3RhcnRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5m
bywgc2xvd1BhdGhTdGFydExvY2F0aW9uKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJ
bmZvLCBtX3Nsb3dPcGVyYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNv
dW50ZG93bigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgY291
bnRkb3duKTsgfQpAQCAtNDQ3LDYgKzQ2MCwxNyBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdl
bmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsK
KyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmll
bGRQdXRLaW5kOjpub25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpz
bG9wcHkoKSB9OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVy
IHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2Nh
dGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsK
K307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJT
dGF0ZSgpCiAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsK
ICAgICBpZiAocGVyY2VudGFnZSAhPSBwZXJjZW50YWdlKQogICAgICAgICBwZXJjZW50YWdlID0g
MC4wOwotICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFn
OiAiLCBwZXJjZW50YWdlLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5k
IHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIiVcbiIpOwogfQogCiB2b2lkIGVu
YWJsZVN1cGVyU2FtcGxlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2Nr
LmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRl
ICJDbGFzc0luZm8uaCIKQEAgLTc4LDYgKzc5LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlu
a2VkQ29kZUJsb2NrKFZNJgogICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tl
cik7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAg
fQorCisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRG
b3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpAQCAtMzE2LDYgKzMxOSw0OCBAQCBpbnQgVW5saW5rZWRD
b2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzCiAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRh
cmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECitib29s
IFVubGlua2VkQ29kZUJsb2NrOjpoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
Cit7CisgICAgaWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSA+IDEwMCkgeworICAgICAgICBpZiAo
bnVtYmVyT2ZJZGVudGlmaWVycygpICE9IG1fY2FjaGVkSWRlbnRpZmllclVpZHMuc2l6ZSgpKSB7
CisgICAgICAgICAgICBMb2NrZXIgbG9ja2VyKG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrKTsK
KyAgICAgICAgICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBjYWNoZWRJZGVudGlmaWVy
VWlkczsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50
aWZpZXJzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIgPSB0aGlzLT5pZGVudGlmaWVyKGkpOworICAgICAgICAgICAgICAgIGNhY2hlZElkZW50
aWZpZXJVaWRzLmFkZChpZGVudGlmaWVyLmltcGwoKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAgICBtX2NhY2hlZElkZW50
aWZpZXJVaWRzID0gV1RGTW92ZShjYWNoZWRJZGVudGlmaWVyVWlkcyk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5jb250YWlucyh1aWQpOworICAg
IH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7
ICsraSkgeworICAgICAgICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgor
CitpbnQzMl90IFVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJl
c2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRPcHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0
ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIFRy
aVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBU
cmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwogdm9p
ZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcygpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIW1fbWV0YWRhdGEtPmlzRmluYWxpemVkKCkpOwpAQCAtMzM3LDE1ICszODIs
MjUgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcgogICAgIGlmICht
X21ldGFkYXRhLT5oYXNNZXRhZGF0YSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJy
YXlQcm9maWxlcyA9IDA7CiAKLSNkZWZpbmUgQ09VTlQoX19vcCkgXAotICAgICAgICBudW1iZXJP
ZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOworI2RlZmlu
ZSBDT1VOVChfX29wKSBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50
cmllczxfX29wPigpOwogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxF
KENPVU5UKQogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5G
TyhDT1VOVCkKICN1bmRlZiBDT1VOVAogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0g
bV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICAgICAgbnVtYmVy
T2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BHZXRCeUlkPigpOwot
CiAgICAgICAgIG1fYXJyYXlQcm9maWxlcyA9IEZpeGVkVmVjdG9yPFVubGlua2VkQXJyYXlQcm9m
aWxlPihudW1iZXJPZkFycmF5UHJvZmlsZXMpOworCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9m
QmluYXJ5QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQmlu
YXJ5QXJpdGhQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CisgICAg
ICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKENPVU5UKQorI3Vu
ZGVmIENPVU5UCisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcyA9IEZpeGVkVmVjdG9yPEJp
bmFyeUFyaXRoUHJvZmlsZT4obnVtYmVyT2ZCaW5hcnlBcml0aFByb2ZpbGVzKTsKKworICAgICAg
ICB1bnNpZ25lZCBudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5U
KF9fb3ApIG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJp
ZXM8X19vcD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJP
RklMRShDT1VOVCkKKyN1bmRlZiBDT1VOVAorICAgICAgICBtX3VuYXJ5QXJpdGhQcm9maWxlcyA9
IEZpeGVkVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPihudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxl
cyk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDEwICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJv
ZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29u
dmVudGlvbnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9m
aWxlLmgiCisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkV4cHJlc3Np
b25SYW5nZUluZm8uaCIKICNpbmNsdWRlICJIYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIklkZW50
aWZpZXIuaCIKQEAgLTY0LDYgKzY2LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiBjbGFz
cyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEJhc2VsaW5l
SklUQ29kZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKIGVudW0gY2xhc3MgTGlua1RpbWVDb25z
dGFudCA6IGludDMyX3Q7CiAKQEAgLTE3NSw2ICsxNzgsNyBAQCBwdWJsaWM6CiAKICAgICBjb25z
dCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygp
IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyBy
ZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsg
fQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5k
ZXgoKV0uZ2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2Nv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBAIC0yMDcsNiArMjExLDE1IEBA
IHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogCiAg
ICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0OworICAgIGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIoKTsgfQorICAgIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7Cisg
ICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQo
MCkucHRyKCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
aW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rp
b24gPCBpbnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0
cnVjdGlvbnNCZWdpbjsKKyAgICB9CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25zU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLnNpemUoKTsgfQogCiAgICAgdW5zaWduZWQgbnVt
Q2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KICAgICB1
bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CkBAIC0zMzQsMTAg
KzM0NywyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRl
cygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQg
dG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFp
c0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KICAgICB2b2lkIGFsbG9jYXRlU2hhcmVkUHJvZmls
ZXMoKTsKICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSYgdW5saW5rZWRWYWx1ZVByb2ZpbGUodW5z
aWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlc1tpbmRleF07IH0KICAgICBVbmxp
bmtlZEFycmF5UHJvZmlsZSYgdW5saW5rZWRBcnJheVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsg
cmV0dXJuIG1fYXJyYXlQcm9maWxlc1tpbmRleF07IH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECisg
ICAgYm9vbCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CisjZW5kaWYKKworICAg
IGludDMyX3QgdGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKKwogcHJvdGVjdGVk
OgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0
IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwogCkBAIC0z
OTcsNiArNDIxLDkgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xleGljYWxTY29wZUZlYXR1
cmVzIDogNDsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKKyNpZiBFTkFC
TEUoSklUKQorICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1fdW5saW5rZWRCYXNlbGluZUNv
ZGU7CisjZW5kaWYKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07
CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEzLDcgKzQ0MCw2IEBAIHBy
aXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0
aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xp
dmVuZXNzOwogCi0KICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9maWxlIG1f
ZXhpdFByb2ZpbGU7CiAjZW5kaWYKQEAgLTQ1OCw2ICs0ODQsMTYgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkp
OwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiog
cGMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVj
b2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQpOworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQ
cm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQor
ICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJl
dHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25D
b3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3Vu
dGVyOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNo
TWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjUsOCArNTAxLDE2IEBA
IHByaXZhdGU6CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0
czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4ZWRW
ZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIEZpeGVkVmVjdG9y
PFVubGlua2VkVmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CiAgICAgRml4ZWRWZWN0b3I8
VW5saW5rZWRBcnJheVByb2ZpbGU+IG1fYXJyYXlQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxC
aW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBGaXhlZFZlY3Rv
cjxVbmFyeUFyaXRoUHJvZmlsZT4gbV91bmFyeUFyaXRoUHJvZmlsZXM7CisKKyNpZiBBU1NFUlRf
RU5BQkxFRAorICAgIExvY2sgbV9jYWNoZWRJZGVudGlmaWVyVWlkc0xvY2s7CisgICAgSGFzaFNl
dDxVbmlxdWVkU3RyaW5nSW1wbCo+IG1fY2FjaGVkSWRlbnRpZmllclVpZHM7CisjZW5kaWYKIAog
cHJvdGVjdGVkOgogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5o
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDE1IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxl
KTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJf
dCBvZmZzZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9m
ZnNldCA9IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9m
ZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgYmFzZVR5cGVPZmZzZXQg
PSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdub2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSks
IGJhc2VUeXBlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9m
KHR5cGVuYW1lIE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9
CisKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAgdW5zaWduZWQgbnVtRW50
cmllcygpOwogCkBAIC0xMDcsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNf
b2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQz
Ml90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsMTMgKzQ1LDExIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKIAog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZC
dWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNw
ZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJ
bmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNw
ZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKICAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQot
ICAgICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Cisg
ICAgICAgIGNsZWFyQnVja2V0cygpOwogICAgIH0KICAgICAKICAgICBFbmNvZGVkSlNWYWx1ZSog
c3BlY0ZhaWxCdWNrZXQodW5zaWduZWQgaSkKQEAgLTU5LDYgKzU3LDEyIEBAIHN0cnVjdCBWYWx1
ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgQVNTRVJUKG51bWJlck9mQnVja2V0cyArIGkgPCB0b3Rh
bE51bWJlck9mQnVja2V0cyk7CiAgICAgICAgIHJldHVybiBtX2J1Y2tldHMgKyBudW1iZXJPZkJ1
Y2tldHMgKyBpOwogICAgIH0KKworICAgIHZvaWQgY2xlYXJCdWNrZXRzKCkKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQor
ICAgICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Cisg
ICAgfQogICAgIAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tl
dCkgY29uc3QKICAgICB7CkBAIC0xMjMsOCArMTI3LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJh
c2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rp
b24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJl
YWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVk
VHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVj
a2V0czsgKytpKSB7CkBAIC0xMzksNyArMTQxLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ug
ewogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisK
ICAgICBFbmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAg
ICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE2MSw2ICsx
NjMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVj
dCBWYWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0
czwwPiB7CiAgICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZC
dWNrZXRzPDA+KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsg
fQogfTsKIAogc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBW
YWx1ZVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oIgpAQCAtMzQsNyArMzUsOSBAQAogI2luY2x1ZGUgIkRGR0p1bXBS
ZXBsYWNlbWVudC5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5l
Q2FsbEZyYW1lU2V0LmgiCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSlNDYXN0
LmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckNv
bXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiUmVjb3JkZWRTdGF0dXNlcy5oIgogI2luY2x1ZGUgPHd0
Zi9CYWcuaD4KQEAgLTcwLDcgKzczLDcgQEAgc3RydWN0IFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9u
IHsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX3RvOwogfTsKICAgICAgICAgCi1jbGFzcyBD
b21tb25EYXRhIHsKK2NsYXNzIENvbW1vbkRhdGEgOiBwdWJsaWMgTWF0aElDSG9sZGVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21tb25EYXRhKTsKIHB1YmxpYzoKICAgICBDb21tb25E
YXRhKCkKQEAgLTExNiw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8Q29kZUJs
b2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PiBtX3dhdGNocG9pbnRzOwogICAgIEZpeGVkVmVjdG9y
PEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRzOwogICAgIEZpeGVkVmVjdG9yPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludD4gbV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKICAg
ICBSZWNvcmRlZFN0YXR1c2VzIHJlY29yZGVkU3RhdHVzZXM7CiAgICAgVmVjdG9yPEp1bXBSZXBs
YWNlbWVudD4gbV9qdW1wUmVwbGFjZW1lbnRzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRy
eUpJVENvZGUuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUu
aAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOwogCitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3Ry
dWN0IFN0cmluZ0p1bXBUYWJsZTsKKwogbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEpJVENvbXBp
bGVyOwpAQCAtMTAxLDYgKzEwNCw4IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVP
cmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgZmluYWw7CiAKICAgICB1c2luZyBE
aXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZkZvckRGRzsKKworICAgIFBDVG9Db2RlT3Jp
Z2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3Bj
VG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBKSVRDb21waWxlcjsgLy8gQWxsb3cgSklUQ29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCku
CkBAIC0xNDAsNiArMTQ1LDggQEAgcHVibGljOgogICAgIEhhc2hNYXA8Qnl0ZWNvZGVJbmRleCwg
VHJpZ2dlclJlYXNvbj4gdGllclVwRW50cnlUcmlnZ2VyczsKIAogICAgIFdyaXRlQmFycmllcjxD
b2RlQmxvY2s+IG1fb3NyRW50cnlCbG9jazsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFi
bGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+
IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKICAgICB1bnNpZ25lZCBvc3JFbnRyeVJldHJ5Owog
ICAgIGJvb2wgYWJhbmRvbk9TUkVudHJ5OwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsMTMgKzE4NSwxMiBAQCB2b2lkIEpJVENvbXBpbGVy
OjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgCiAgICAgbV9ncmFwaC5yZWdpc3RlckZyb3pl
blZhbHVlcygpOwogCi0gICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5p
c0VtcHR5KCkgfHwgIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAg
ICAgICBpZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7
Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBU
YWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKLSAgICB9CisgICAg
QVNTRVJUKG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAg
aWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIAorICAgICAg
ICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1bXBU
YWJsZXMuaXNFbXB0eSgpKQorICAgICAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9
IFdURk1vdmUobV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwogCiAgICAgZm9yIChCYWc8U3dp
dGNoRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fc3dpdGNoRGF0YS5iZWdpbigpOyAh
IWl0ZXI7ICsraXRlcikgewogICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKippdGVyOwpAQCAt
MTk5LDEyICsxOTgsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5r
QgogICAgICAgICBjYXNlIFN3aXRjaENoYXI6CiAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CiAg
ICAgICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4
KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNo
SnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlzRW1wdHkoKSk7CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN3aXRj
aEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5z
d2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhd
OwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9j
ay0+aW5kZXhdKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtlZFRhYmxlLm1fY3Rp
T2Zmc2V0cy5zaXplKCkgPT0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpKTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5z
aXplKCk7IGotLTspCkBAIC0yMTksMTIgKzIxOCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5r
KExpbmtCdWZmZXImIGxpbmtCCiAKICAgICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6IHsKICAgICAg
ICAgICAgIGlmICghZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQobV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5k
ZXgpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29u
c3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAg
ICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3
aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5n
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRh
LmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0
VGFibGUuc2l6ZSgpICsgMSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbGlua2Vk
VGFibGUubV9jdGlPZmZzZXRzKQpAQCAtMzMzLDcgKzMzMiw3IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQ
Q1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcikpOworICAgICAgICBtX2ppdENv
ZGUtPmNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdp
bk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpOwog
fQogCiBzdGF0aWMgdm9pZCBlbWl0U3RhY2tPdmVyZmxvd0NoZWNrKEpJVENvbXBpbGVyJiBqaXQs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc3RhY2tPdmVyZmxvdykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTcsNyArOTcsNiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUq
CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUo
KSkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCk7Ci0gICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNv
ZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIAogICAgIGlm
ICghT3B0aW9uczo6dXNlT1NSRW50cnlUb0RGRygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzIsOSArNzcy
LDYgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIAogICAgIC8vIFRo
ZSB0YWcgcmVnaXN0ZXJzIGFyZSBuZWVkZWQgdG8gbWF0ZXJpYWxpemUgcmVjb3ZlcmllcyBiZWxv
dy4KICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKIAotICAgIGlm
IChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVz
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7Ci0KICAgICBp
ZiAoaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQpIHsKICAgICAgICAgRW5jb2Rl
ZEpTVmFsdWUqIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CiAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25NYXRlcmlhbGl6ZU9T
UkV4aXRTaWRlU3RhdGUpPigmdm0sICZleGl0LCB0bXBTY3JhdGNoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJKSVQuaCIKQEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhW
TSYgdm0sIENDYWxsSGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2gg
KGppdC5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6
Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBl
ZFRocmVzaG9sZChqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7
CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBl
ZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlw
ZTo6RlRMSklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3Vu
dGVyOjpjbGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRh
cmdldFZhbHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291
bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDIs
MTEgKzE0Myw4IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clQKIHsK
ICAgICBjYWxsZXJJc0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGJh
c2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuazsKIAotICAgIGlmIChjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpIHsKLSAg
ICAgICAgaWYgKCFjYWxsZXJJc0xMSW50KQotICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXItPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CisgICAgaWYgKGNhbGxCeXRlY29k
ZUluZGV4LmNoZWNrcG9pbnQoKSkKICAgICAgICAgcmV0dXJuIExMSW50OjpjaGVja3BvaW50T1NS
RXhpdEZyb21JbmxpbmVkQ2FsbFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKLSAgICB9CiAKICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganVtcFRhcmdldDsKIApAQCAt
MTk4LDggKzE5Niw2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clQK
ICN1bmRlZiBMTElOVF9SRVRVUk5fTE9DQVRJT04KIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIGJh
c2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwotCiAg
ICAgICAgIHN3aXRjaCAodHJ1ZUNhbGxlckNhbGxLaW5kKSB7CiAgICAgICAgIGNhc2UgSW5saW5l
Q2FsbEZyYW1lOjpDYWxsOgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0
OgpAQCAtMzEzLDYgKzMwOSwxMCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxI
ZWxwZXJzCiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVy
ID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKICAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFt
ZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIp
KTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGNh
bGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpS
ZWdpc3RlcnM6OnBiR1BSKSk7CisgICAgICAgIH0gZWxzZSBpZiAodHJ1ZUNhbGxlcikgeworICAg
ICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNl
bGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5t
ZXRhZGF0YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5l
Q29kZUJsb2NrLCBKSVQ6OnNfbWV0YWRhdGFHUFIpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIt
PmJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJh
bWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBKSVQ6OnNfY29uc3RhbnRzR1BSKSk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCkBAIC00MDQsNyAr
NDA0LDggQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOwogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVz
dGluYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvZGVCbG9ja0ZvckV4aXQtPm1faGFzTGlua2VkT1NSRXhp
dCA9IHRydWU7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihj
b2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRhdGFHUFIpOwor
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9y
RXhpdC0+YmFzZWxpbmVKSVRDb25zdGFudFBvb2woKSksIEpJVDo6c19jb25zdGFudHNHUFIpOwog
CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCgpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gZGVzdGluYXRpb247CkBAIC00MjAsMTIgKzQyMSwxNiBAQCB2b2lkIGFkanVzdEFuZEp1bXBU
b1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5y
ZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCi0g
ICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9p
bnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKKyAgICAgICAgQVNT
RVJUKCFSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29udGFpbnMoTExJbnQ6
OlJlZ2lzdGVyczo6cGNHUFIpKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUsIEFzc2VtYmx5SGVscGVyczo6
c2VsZWN0U2NyYXRjaEdQUihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikpOworCiAgICAgICAgIC8v
IFNpbmNlIHdlJ3JlIGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFt
ZUZvckNhdGNoLgogICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIHZtLmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOwogICAgIH0KLSAgICAKKworICAg
IGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFja1BvaW50
ZXJPZmZzZXRGb3IoY29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworCiAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBU
YXJnZXQpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDIs
IE9TUkV4aXRQdHJUYWcpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBA
CiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDbG9u
ZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxv
Y2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiREZH
RHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgpAQCAtMjg2OSw3ICsyODcwLDcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkZpbmRTdwogICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9s
b2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2Nr
LT5kZmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5pc0RvdWJsZSgp
KTsKICAgICBkb3VibGUgYXNEb3VibGUgPSB2YWx1ZS5hc0RvdWJsZSgpOwpAQCAtMjg5MCw3ICsy
ODkxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogCiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgU3RyaW5nSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2Rl
QmxvY2stPmRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICByZXR1cm4g
bGlua2VkVGFibGUuY3RpRm9yVmFsdWUoKnVubGlua2VkVGFibGUsIHN0ckltcGwpLmV4ZWN1dGFi
bGVBZGRyZXNzPGNoYXIqPigpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTczMCw2ICs3MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1
ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlVGFnR1BSLCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAg
ICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBh
cmFtZXRlcnMoKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBh
c3NlZEFyZ3M7ICsraSkgewogICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0Lmdy
YXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwpAQCAtODg5LDcgKzg5MCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIAogICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2Vz
ID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIElu
dmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAg
c2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxv
YWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewog
ICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwog
ICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJl
cGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgyOCw2ICs4MjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBu
b2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQ
UihjYWxsZWVHUFIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdz
LnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBh
c3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFy
YW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyAr
K2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTk3OSw3ICs5ODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRH
UFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nh
c2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BS
LCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEp
OwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5ODUsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRl
TmEKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygp
OwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxv
Y2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6
UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRU
eXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRl
TmFtZSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJh
c2VHUFIpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3Ms
IEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVy
dHlJc1N5bWJvbCA9IHRydWU7CiAKQEAgLTQ5MDUsNyArNDkwNSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJ
bmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxv
Y2soKS0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBt
X2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1
dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICBh
dXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkOwogICAgIApAQCAt
NDk4OSw3ICs0OTg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5v
ZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsK
ICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2Nr
LT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAg
IEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0aFBy
b2ZpbGUpOworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFk
ZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBv
cGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
ID0gb3BlcmF0aW9uVmFsdWVTdWI7CiAKQEAgLTU1NzEsNyArNTU3MSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU5lZ2F0ZSgKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuY29kZUJs
b2NrKCktPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTmVnSUMqIG5lZ0lDID0g
bV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBh
dXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemU7CiAg
ICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZTsKICAg
ICBjb21waWxlTWF0aElDKG5vZGUsIG5lZ0lDLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0
Y2hpbmdGdW5jdGlvbik7CkBAIC01ODE1LDcgKzU4MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlVmFsdWVNdWwoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9
IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50
aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuY29kZUJsb2NrKCkt
PmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQu
aml0Q29kZSgpLT5jb21tb24uYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7CiAgICAgYXV0byBu
b25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bDsKIApAQCAtMTQ3NzAsNyAr
MTQ3NzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQ
UlJlZyBzY29wZVJlZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIG1faml0LmNv
ZGVCbG9jaygpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFp
bFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CiAgICAg
bm9SZXN1bHQobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQg
Y29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKIAogICAgIGlmICh2bS5zaG91bGRC
dWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpIHsKICAgICAgICAgQjM6OlBDVG9PcmlnaW5N
YXAgb3JpZ2luTWFwID0gc3RhdGUucHJvYy0+cmVsZWFzZVBDVG9PcmlnaW5NYXAoKTsKLSAgICAg
ICAgY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3Jp
Z2luTWFwPihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSks
ICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpKTsKKyAgICAgICAgc3RhdGUuaml0
Q29kZS0+Y29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3Jp
Z2luTWFwPihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSks
ICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpOwogICAgIH0KIAogICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGxhYmVsID0gc3RhdGUuZmluYWxpemVyLT5iM0Nv
ZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHN0YXRlLnByb2MtPmNvZGUo
KS5lbnRyeXBvaW50TGFiZWwoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
SVRDb2RlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHB1YmxpYzoKICAg
ICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpIG92ZXJyaWRlOwogICAgIHN0YXRpYyBwdHJk
aWZmX3QgY29tbW9uRGF0YU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKSVRDb2Rl
LCBjb21tb24pOyB9CiAgICAgdm9pZCBzaHJpbmtUb0ZpdChjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImKSBvdmVycmlkZTsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1h
cCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9
CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhIGNvbW1vbjsKICAgICBWZWN0b3I8T1NSRXhpdD4g
bV9vc3JFeGl0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MiwxNCArNTIsNiBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQog
CiAgICAgZ3JhcGgucmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsKIAotI2lmIEFTU0VSVF9FTkFCTEVE
Ci0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9s
b2NrKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpOwotICAgICAgICBBU1NFUlQoY29kZUJs
b2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7
Ci0gICAgfQotI2VuZGlmCi0KICAgICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuIE5vdGUgdGhh
dCB3ZSB1c2UgdGhpcyBlbnRyeXBvaW50IHRvdGFsbHkgZGlmZmVyZW50bHkKICAgICAvLyBkZXBl
bmRpbmcgb24gd2hldGhlciB3ZSdyZSBkb2luZyBPU1IgZW50cnkgb3Igbm90LgogICAgIENDYWxs
SGVscGVycyBqaXQoY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgs
NiArODgsNyBAQAogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJMTEludFRo
dW5rcy5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorI2luY2x1ZGUgIlBDVG9Db2Rl
T3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVnRXhw
T2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCkBAIC0yMzIw
LDYgKzIzMjEsMTggQEAgcHJpdmF0ZToKICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRT
dWJHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNo
aW5nRnVuY3Rpb24pOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3Is
IHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRv
ciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRBZGRJQyog
YWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5
cGU+CisgICAgc3RhdGljIEpJVE11bElDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21t
b24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVE11
bElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBl
bmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJ
VE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUTmVnSUMqIGFkZE1h
dGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUp
IHsgcmV0dXJuIGNvbW1vbi5hZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Cisg
ICAgc3RhdGljIEpJVFN1YklDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJp
bmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVFN1YklDKHBy
b2ZpbGUpOyB9CisKICAgICB2b2lkIGNvbXBpbGVWYWx1ZU11bCgpCiAgICAgewogICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9v
cmlnaW4uc2VtYW50aWMpOwpAQCAtMjM5MSw3ICsyNDA0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgog
CiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJh
dGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgICAgIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxv
Y2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgICAg
ICBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9y
PihzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAgICAgICAgICAgICAg
IG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IoSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdw
cigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7
CiAKICAgICAgICAgICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKQEAg
LTI1MDAsNyArMjUxMyw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgICAgICAgICAgICAgIEJv
eDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRo
SUNHZW5lcmF0aW9uU3RhdGU+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBKSVRCaW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRoSUM8R2Vu
ZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxH
ZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0Q29kZS0+
Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0
b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFy
YW1zWzBdLmdwcigpKSwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFd
LmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwgcGFyYW1zLmZwU2NyYXRjaCgw
KSwKICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmZwU2NyYXRjaCgxKSwgcGFyYW1zLmdwU2Ny
YXRjaCgwKSk7CkBAIC00MzE3LDcgKzQzMzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgR1BS
UmVnIHN0dWJJbmZvR1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBw
YXJhbXMuZ3BTY3JhdGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAgYXV0byBn
ZW5lcmF0b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAg
ICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdp
biwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAg
aml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2Fs
bFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAg
cGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJl
Zywgc3R1YkluZm9HUFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNTeW1ib2wgPSB0cnVlOwpAQCAtMTAyODUsNiArMTAyOTgsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwg
bnVtQWxsb2NhdGVkQXJnczsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURh
dGEuYXJncy5hcHBlbmQoVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSkpOwog
ICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2Vk
QXJnczsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGpp
dC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50aWNOb2RlT3Jp
Z2luKTsKQEAgLTEwNDQzLDEzICsxMDQ1NywxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292ZXJ5Rm9ySlNW
YWx1ZSgpKTsKIAogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBu
dW1BcmdzOworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQu
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9j
aygpKTsKIAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0
LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5m
bzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJl
ZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1
dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BS
SW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxG
cmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAg
ICAgICAgICAgICAgIH0pOwpAQCAtMTA3OTIsNyArMTA4MDcsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENh
bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVn
VDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNs
b3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMTA3Myw3ICsxMTA4OCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsK
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAg
ICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxM
aW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxp
ZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0
LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFy
ZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEzLDI4ICs0MTMsMTYgQEAgc3RhdGljIHZvaWQg
Y29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAogCiAgICAgUmVnaXN0ZXJTZXQgYWxsRlRMQ2Fs
bGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6ZnRsQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBiYXNlbGluZUNhbGxlZVNhdmVzID0gYmFzZWxpbmVD
b2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogdm1DYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNl
dHMoKTsKLSAgICBSZWdpc3RlclNldCB2bUNhbGxlZVNhdmVzVG9Ta2lwID0gUmVnaXN0ZXJTZXQ6
OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsK
LSAgICAgICAgaml0LmxvYWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIEdQUkluZm86OnJlZ1QxKTsK
LSAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihFbnRyeUZyYW1l
OjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0g
ICAgfQogCiAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0
KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKICAgICAgICAgaWYgKCFhbGxGVExDYWxsZWVTYXZlcy5n
ZXQocmVnKSkgewotICAgICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0g
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKSk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCB1bndp
bmRJbmRleCA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5pbmRleE9mKHJlZyk7
CiAgICAgICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQg
PSBiYXNlbGluZUNhbGxlZVNhdmVzLT5maW5kKHJlZyk7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZz
ZXQqIHZtQ2FsbGVlU2F2ZSA9IG51bGxwdHI7IAotICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlv
bkhhbmRsZXIoKSkKLSAgICAgICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZp
bmQocmVnKTsKIAogICAgICAgICBpZiAocmVnLmlzR1BSKCkpIHsKICAgICAgICAgICAgIEdQUlJl
ZyByZWdUb0xvYWQgPSBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8gR1BSSW5mbzo6cmVnVDAgOiBy
ZWcuZ3ByKCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWdUb0xvYWQgIT0gR1BSSW5m
bzo6cmVnVDEpOwogCiAgICAgICAgICAgICBpZiAodW53aW5kSW5kZXggPT0gVUlOVF9NQVgpIHsK
ICAgICAgICAgICAgICAgICAvLyBUaGUgRlRMIGNvbXBpbGF0aW9uIGRpZG4ndCBwcmVzZXJ2ZSB0
aGlzIHJlZ2lzdGVyLiBUaGlzIG1lYW5zIHRoYXQgaXQgYWxzbwpAQCAtNDUyLDggKzQ0MCw2IEBA
IHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAogICAgICAgICAgICAg
aWYgKGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQo
cmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQ
b2ludGVyUmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQtPm9mZnNldCgpKSk7Ci0gICAg
ICAgICAgICBpZiAodm1DYWxsZWVTYXZlICYmICF2bUNhbGxlZVNhdmVzVG9Ta2lwLmdldCh2bUNh
bGxlZVNhdmUtPnJlZygpKSkKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9m
ZnNldCgpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBGUFJSZWcgZnBSZWdUb0xv
YWQgPSBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8gRlBSSW5mbzo6ZnBSZWdUMCA6IHJlZy5mcHIo
KTsKIApAQCAtNDY0LDE5ICs0NTAsOSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0s
IHVuc2lnbmVkCiAKICAgICAgICAgICAgIGlmIChiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQogICAg
ICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShmcFJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBiYXNlbGluZVJl
Z2lzdGVyT2Zmc2V0LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKHZtQ2FsbGVlU2F2ZSAm
JiAhdm1DYWxsZWVTYXZlc1RvU2tpcC5nZXQodm1DYWxsZWVTYXZlLT5yZWcoKSkpCi0gICAgICAg
ICAgICAgICAgaml0LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAg
UmVnaXN0ZXJBdE9mZnNldCogdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChHUFJJ
bmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om51
bWJlclRhZ1JlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwg
dm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwotCi0gICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2Fs
bGVlU2F2ZXMtPmZpbmQoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3Rlcik7Ci0gICAgICAgIGpp
dC5zdG9yZTY0KEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7Ci0gICAgfQot
CiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0gYmFz
ZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogCiAg
ICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3Bv
aW50KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEu
cmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0
YS5yYgkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRv
ci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1l
dGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0g
ICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAgICBkZWYgZ2Vu
ZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCisgICAgICAgICAgICBm
aWVsZE5hbWVzLm1hcCBkbyB8ZmllbGROYW1lfAorICAgICAgICAgICAgICAgICIje3ByZWZpeH1z
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1l
WzEuLi0xXX0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fI3tmaWVsZE5h
bWV9KTsgfSIKKyAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisgICAgICAgIGVuZAorCisgICAg
ICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBmaWVsZE5hbWVzKQogICAgICAg
ICAgICAgZmllbGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlw
ZS5raW5kX29mPyBIYXNoCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4j
e2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAg
ICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZp
eCArICcgICAgJywgdHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZpeH19OyIKICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8j
e2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmllbGQudG9f
cworICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2goZmllbGROYW1lKQorICAgICAg
ICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZE5hbWV9OyIKICAg
ICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVu
ZAogCi0gICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcykK
KyAgICAgICAgZmllbGROYW1lcyA9IFtdCisgICAgICAgIHByZWZpeCA9ICIgICAgICAgICIKKyAg
ICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBmaWVsZHMsIGZpZWxkTmFtZXMp
CisgICAgICAgIGZpZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rp
b25zKHByZWZpeCwgZmllbGROYW1lcykKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBp
ZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2Nyw2ICszNjcsMjggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmxvYWRQcm9wZXJ0eShHUFJSZQogICAgICAgICByZXN1bHQpOwogfQogCit2b2lkIEFzc2VtYmx5
SGVscGVyczo6c3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwg
R1BSUmVnIG9mZnNldCwgR1BSUmVnIHNjcmF0Y2gpCit7CisgICAgSnVtcCBpc0lubGluZSA9IGJy
YW5jaDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNl
dCkpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIG5lZzMyKG9mZnNldCk7CisgICAgc2lnbkV4dGVu
ZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CisgICAg
CisgICAgaXNJbmxpbmUubGluayh0aGlzKTsKKyAgICBhZGRQdHIoCisgICAgICAgIFRydXN0ZWRJ
bW0zMigKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihKU09iamVjdCkp
IC0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDxpbnQzMl90PihmaXJzdE91dE9mTGluZU9mZnNl
dCkgLSAyKSAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSwK
KyAgICAgICAgb2JqZWN0LCBzY3JhdGNoKTsKKyAgICAKKyAgICByZWFkeS5saW5rKHRoaXMpOwor
ICAgIAorICAgIHN0b3JlVmFsdWUodmFsdWUsCisgICAgICAgIEJhc2VJbmRleChzY3JhdGNoLCBv
ZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSkpOworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdExvYWRTdHJ1
Y3R1cmUoVk0mIHZtLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3Rl
cklEIHNjcmF0Y2gpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY5OCw4ICs3MjAsMTMgQEAg
dm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5
SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZv
KSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3Qp
LCBHUFJJbmZvOjpyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2Jh
bE9iamVjdCh2bSwgaW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVh
bENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZv
KQoreworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAg
IENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9u
IDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzNCw4ICsyMzQsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9
CiAgICAgCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgY2xvYmJlcnMgb2Zmc2V0LgorICAgIC8vIE5v
dGUgdGhhdCB0aGVzZSBjbG9iYmVyIG9mZnNldC4KICAgICB2b2lkIGxvYWRQcm9wZXJ0eShHUFJS
ZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpOworICAgIHZvaWQg
c3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9m
ZnNldCwgR1BSUmVnIHNjcmF0Y2gpOwogCiAgICAgdm9pZCBtb3ZlVmFsdWVSZWdzKEpTVmFsdWVS
ZWdzIHNyY1JlZ3MsIEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAgIHsKQEAgLTM3OSwxNSArMzgw
LDI2IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIHZvaWQgY29weUNhbGxlZVNhdmVz
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUs
IEdQUlJlZyBzY3JhdGNoKQorICAgIHsKKyNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lT
VEVSUyA+IDAKKyAgICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwgc2NyYXRjaCk7CisgICAg
ICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChzY3Jh
dGNoKTsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBjb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9w
RW50cnlGcmFtZSkKICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMg
PiAwCiAgICAgICAgIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH07CiAgICAgICAgIEdQUlJlZyB0
ZW1wMSA9IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9hZFB0cigmdG9w
RW50cnlGcmFtZSwgdGVtcDEpOwotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlckltcGwodGVtcDEpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CiAjZWxzZQog
ICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7CisgICAgICAgIFVOVVNFRF9QQVJB
TSh0b3BFbnRyeUZyYW1lKTsKICNlbmRpZgogICAgIH0KICAgICAKQEAgLTE3MjAsNiArMTczMiw3
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0mLCBK
U0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxs
V2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOwogICAgIAogICAg
IHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNsYWltU3BhY2VP
blN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxp
bmVKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jh
c2VsaW5lSklUQ29kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgorCisjaW5jbHVkZSAiSklU
TWF0aElDLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1
YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVEFkZElDKiBNYXRoSUNIb2xkZXI6OmFk
ZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX2Fk
ZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUTXVsSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklU
TXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbXVsSUNz
LmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRTdWJJQyogTWF0aElDSG9sZGVyOjphZGRKSVRTdWJJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJQ3MuYWRk
KGFyaXRoUHJvZmlsZSk7IH0KK0pJVE5lZ0lDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE5lZ0lDKFVu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0
aFByb2ZpbGUpOyB9CisKK3ZvaWQgTWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MoTWF0aElDSG9s
ZGVyJiBvdGhlcikKK3sKKyAgICBtX2FkZElDcyA9IFdURk1vdmUob3RoZXIubV9hZGRJQ3MpOwor
ICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhlci5tX211bElDcyk7CisgICAgbV9uZWdJQ3MgPSBX
VEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICBtX3N1YklDcyA9IFdURk1vdmUob3RoZXIubV9z
dWJJQ3MpOworfQorCitCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpT
RW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sp
CisgICAgOiBEaXJlY3RKSVRDb2RlKFdURk1vdmUoY29kZSksIHdpdGhBcml0eUNoZWNrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCkKKyAgICAsIE1hdGhJQ0hvbGRlcigpCit7IH0KKworQmFzZWxpbmVK
SVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGxMaW5r
SW5mby5oIgorI2luY2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRlICJKSVRDb2RlTWFwLmgiCisK
KyNpZiBFTkFCTEUoSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQmluYXJ5QXJpdGhQ
cm9maWxlOworY2xhc3MgVW5hcnlBcml0aFByb2ZpbGU7CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbzsKK3N0cnVjdCBTaW1wbGVKdW1wVGFibGU7CitzdHJ1Y3QgU3RyaW5nSnVtcFRh
YmxlOworCitjbGFzcyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIHZvaWQgYWRvcHRNYXRo
SUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpOworICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5h
cnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQ
cm9maWxlKik7CisgICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSop
OworICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOworCitwcml2
YXRlOgorICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CisgICAgQmFnPEpJVE11bElDPiBtX211
bElDczsKKyAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOworICAgIEJhZzxKSVRTdWJJQz4gbV9z
dWJJQ3M7Cit9OworCitjbGFzcyBKSVRDb25zdGFudFBvb2wgeworcHVibGljOgorICAgIHVzaW5n
IENvbnN0YW50ID0gdW5zaWduZWQ7CisKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsK
KyAgICAgICAgR2xvYmFsT2JqZWN0LAorICAgICAgICBDYWxsTGlua0luZm8sCisgICAgICAgIFN0
cnVjdHVyZVN0dWJJbmZvLAorICAgICAgICBGdW5jdGlvbkRlY2wsCisgICAgICAgIEZ1bmN0aW9u
RXhwciwKKyAgICB9OworCisgICAgc3RydWN0IFZhbHVlIHsKKyAgICAgICAgVHlwZSB0eXBlOwor
ICAgICAgICBQYWNrZWRQdHI8dm9pZD4gcGF5bG9hZDsKKyAgICB9OworCisgICAgSklUQ29uc3Rh
bnRQb29sKCkgPSBkZWZhdWx0OworICAgIEpJVENvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2wm
JikgPSBkZWZhdWx0OworICAgIEpJVENvbnN0YW50UG9vbCYgb3BlcmF0b3I9KEpJVENvbnN0YW50
UG9vbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBDb25zdGFudCBhZGQoVHlwZSB0eXBlLCB2b2lkKiBw
YXlsb2FkID0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29u
c3RhbnRzLnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFudHMuYXBwZW5kKFZhbHVlIHsgdHlwZSwg
cGF5bG9hZCB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzaXplX3Qg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzLnNpemUoKTsgfQorICAgIFZhbHVlIGF0
KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tpXTsgfQorCitwcml2YXRlOgor
ICAgIFZlY3RvcjxWYWx1ZT4gbV9jb25zdGFudHM7Cit9OworCisKK2NsYXNzIEJhc2VsaW5lSklU
Q29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlLCBwdWJsaWMgTWF0aElDSG9sZGVyIHsKK3B1Ymxp
YzoKKyAgICBCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiwgQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayk7CisgICAgfkJhc2VsaW5lSklUQ29kZSgpIG92
ZXJyaWRlOworICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJy
aWRlIHsgcmV0dXJuIG1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KKworICAgIEJhZzxVbmxp
bmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAgIEJhZzxDYWxsTGlua0luZm8+
IG1fZXZhbENhbGxMaW5rSW5mb3M7CisgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+
IG1fdW5saW5rZWRTdHViSW5mb3M7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBt
X3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisgICAg
SklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1Rv
Q29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKKyAgICBib29sIG1faXNTaGFyZWFi
bGUgeyB0cnVlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBs
YW4uY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jh
c2VsaW5lSklUUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgc2l6ZV90
IEJhc2VsaW5lSklUUGxhbjo6Y29kZVNpemUoKSBjb25zdAogCiBDb21waWxhdGlvblJlc3VsdCBC
YXNlbGluZUpJVFBsYW46OmZpbmFsaXplKCkKIHsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1
bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgIENvbXBpbGF0aW9uUmVzdWx0
IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKG1fY29kZUJsb2NrKTsKICAgICBz
d2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CiAgICAgICAgIENP
REVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoImNvbXBp
bGF0aW9uIGZhaWxlZCIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxI
ZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxs
SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDYgQEAgdm9p
ZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5Qcm9sbwogICAgIHN0b3JlUHRyKHNjb3Bl
LCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgc2NvcGUpKSk7CiB9CiAKLXZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BS
UmVnIHNjb3BlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4KQotewotICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJh
bWUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6
OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Ci0gICAgc3RvcmVWYWx1ZSh0aGlzUmVncywg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIHRoaXNWYWx1ZSkpKTsKLSAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwotICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKLSAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0
ZUluZGV4KSkpOwotfQotCiB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBh
Y2tldChWTSYgdm0sIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQ
UiwgR1BSUmVnIHNjcmF0Y2gyKQogewogICAgIFNoYWRvd0NoaWNrZW4qIHNoYWRvd0NoaWNrZW4g
PSB2bS5zaGFkb3dDaGlja2VuKCk7CkBAIC03Miw2ICs2MiwyOCBAQCB2b2lkIENDYWxsSGVscGVy
czo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhCiAgICAgc3RvcmVQdHIoc2NyYXRjaDIsIEFkZHJlc3Mo
c2NyYXRjaDFOb25BcmdHUFIpKTsKIH0KIAorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZT4KK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwo
R1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwg
Q29kZUJsb2NrVHlwZSBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sK
KyAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwor
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFy
a2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNr
ZW46OlBhY2tldCwgY2FsbGVlKSkpOworICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlz
VmFsdWUpKSk7CisgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKKyAgICBzdG9yZVB0
cihjb2RlQmxvY2ssIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
Y2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKK30KKwordm9pZCBD
Q2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNr
ZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29k
ZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxv
Y2ssIGNhbGxTaXRlSW5kZXgpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3Ms
IEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQs
IHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwogdm9pZCBD
Q2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNJbnRl
cm5hbFB0clRhZz4gd2hlcmUsIFNjb3BlZExhbWJkYTx2b2lkKENDYWxsSGVscGVycyYpPiBlbWl0
Q29kZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtODQwLDcgKzg0MCwxNCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2Ugb3Bl
cmF0aW9ucyBjbG9iYmVyIGFsbCB2b2xhdGlsZSByZWdpc3RlcnMuIFRoZXkgYXNzdW1lIHRoYXQg
dGhlcmUgaXMgcm9vbSBvbiB0aGUgdG9wIG9mCiAgICAgLy8gc3RhY2sgdG8gbWFyc2hhbGwgY2Fs
bCBhcmd1bWVudHMuCiAgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoR1BS
UmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NvcGUpOwotICAgIHZv
aWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1
ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCk7
CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAg
dm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoR1BSUmVnIHNoYWRvd1BhY2tldCwg
SlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrVHlwZSBjb2RlQmxv
Y2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CitwdWJsaWM6CisgICAgdm9pZCBsb2dT
aGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0
aGlzUmVncywgR1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4KTsKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0
KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUs
IEdQUlJlZyBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisKICAgICAv
LyBMZWF2ZXMgYmVoaW5kIGEgcG9pbnRlciB0byB0aGUgUGFja2V0IHdlIHNob3VsZCB3cml0ZSB0
byBpbiBzaGFkb3dQYWNrZXQuCiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZN
JiwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcg
c2NyYXRjaDIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVEYXRhLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDggKzM3LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIENhbGxGcmFtZVNodWZmbGVE
YXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Cisg
ICAgc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVn
aXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMp
Cit7CiAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycyB7IFJlZ2lzdGVyU2V0Ojp2
bUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB9OwotICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0
KiByZWdpc3RlclNhdmVMb2NhdGlvbnMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMo
KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5z
aXplKCk7ICsraSkgewogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5IHsgcmVnaXN0ZXJT
YXZlTG9jYXRpb25zLT5hdChpKSB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MywxMSArNDMsMTMgQEAgcHVibGljOgogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBh
cmdzOwogICAgIHVuc2lnbmVkIG51bUxvY2FscyB7IFVJTlRfTUFYIH07CiAgICAgdW5zaWduZWQg
bnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycyB7
IFVJTlRfTUFYIH07IC8vIE9uIG91ciBtYWNoaW5lIGZyYW1lLgogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgUmVnaXN0ZXJNYXA8VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOwogICAgIEdQUlJlZyBu
dW1iZXJUYWdSZWdpc3RlciB7IEludmFsaWRHUFJSZWcgfTsKIAogICAgIHZvaWQgc2V0dXBDYWxs
ZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayopOworICAgIHZvaWQgc2V0dXBDYWxsZWVTYXZlUmVn
aXN0ZXJzKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0Kik7CiAjZW5kaWYKICAgICBWYWx1ZVJl
Y292ZXJ5IGNhbGxlZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDEzICszOCwxMyBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhCiAg
ICAgOiBtX2ppdChqaXQpCiAgICAgLCBtX29sZEZyYW1lKGRhdGEubnVtTG9jYWxzICsgQ2FsbGVy
RnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQogICAgICwgbV9uZXdGcmFtZShk
YXRhLmFyZ3Muc2l6ZSgpICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMsIG51bGxw
dHIpCi0gICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnMKLSAgICAgICAgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoaml0LmNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpKQorICAgICwgbV9hbGlnbmVkT2xkRnJhbWVTaXpl
KENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgcm91bmRBcmd1bWVudENvdW50VG9B
bGlnbkZyYW1lKGRhdGEubnVtUGFyYW1ldGVycykpCiAgICAgLCBtX2FsaWduZWROZXdGcmFtZVNp
emUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMKICAgICAgICAgKyByb3VuZEFyZ3Vt
ZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5hcmdzLnNpemUoKSkpCiAgICAgLCBtX2ZyYW1lRGVs
dGEobV9hbGlnbmVkTmV3RnJhbWVTaXplIC0gbV9hbGlnbmVkT2xkRnJhbWVTaXplKQogICAgICwg
bV9sb2NrZWRSZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpKQogICAgICwgbV9u
dW1QYXNzZWRBcmdzKGRhdGEubnVtUGFzc2VkQXJncykKKyAgICAsIG1fbnVtUGFyYW1ldGVycyhk
YXRhLm51bVBhcmFtZXRlcnMpCiB7CiAgICAgLy8gV2UgYXJlIGFsbG93ZWQgYWxsIHRoZSB1c3Vh
bCByZWdpc3RlcnMuLi4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgaS0tOyApCkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxl
cjo6cHJlcGFyZUZvclRhaWxDYQogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsg
UGF5bG9hZE9mZnNldCksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBhcmd1bWVudENvdW50T0sgPQogICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QmVsb3dPckVxdWFsLCBtX25ld0ZyYW1lQmFzZSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpOwor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX251bVBhcmFtZXRlcnMp
KTsKICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrQWxp
Z25tZW50UmVnaXN0ZXJzKCkgLSAxICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMp
LCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigtc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSksIG1fbmV3RnJhbWVCYXNlKTsKICAg
ICBtX2ppdC5tdWwzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3Rl
cikpLCBtX25ld0ZyYW1lQmFzZSwgbV9uZXdGcmFtZUJhc2UpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDQsNiArMTA0LDcgQEAgcHVibGljOgogICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlRGF0YSBkYXRhOwogICAgICAgICBkYXRhLm51bUxvY2FscyA9IG51bUxvY2FscygpOwogICAg
ICAgICBkYXRhLm51bVBhc3NlZEFyZ3MgPSBtX251bVBhc3NlZEFyZ3M7CisgICAgICAgIGRhdGEu
bnVtUGFyYW1ldGVycyA9IG1fbnVtUGFyYW1ldGVyczsKICAgICAgICAgZGF0YS5jYWxsZWUgPSBn
ZXROZXcoVmlydHVhbFJlZ2lzdGVyIHsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIH0pLT5yZWNvdmVy
eSgpOwogICAgICAgICBkYXRhLmFyZ3MucmVzaXplKGFyZ0NvdW50KCkpOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50KCk7ICsraSkKQEAgLTc5OCw2ICs3OTksNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgcGVyZm9ybVNhZmVXcml0ZXMoKTsKICAgICAKICAgICB1bnNpZ25l
ZCBtX251bVBhc3NlZEFyZ3MgeyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG1fbnVtUGFyYW1l
dGVycyB7IFVJTlRfTUFYIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lk
IGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BCiB9CiAKIEpJVDo6SklUKFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleCkKLSAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgY29kZUJsb2NrKQorICAgIDogSlNJ
bnRlcmZhY2VKSVQoJnZtLCBudWxscHRyKQogICAgICwgbV9pbnRlcnByZXRlcih2bS5pbnRlcnBy
ZXRlcikKICAgICAsIG1fbGFiZWxzKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpIDogMCkKICAgICAsIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtKQpAQCAt
NzcsNiArNzcsOSBAQCBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCCiAg
ICAgLCBtX3Nob3VsZEVtaXRQcm9maWxpbmcoZmFsc2UpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgobG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCkKIHsKKyAgICBtX2dsb2JhbE9i
amVjdENvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
R2xvYmFsT2JqZWN0KTsKKyAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrID0gY29kZUJsb2NrOworICAg
IG1fdW5saW5rZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CiB9
CiAKIEpJVDo6fkpJVCgpCkBAIC05MCw4ICs5Myw4IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRp
bWl6YXRpb25DaGVjaygpCiAgICAgICAgIHJldHVybjsKIAogICAgIEp1bXBMaXN0IHNraXBPcHRp
bWl6ZTsKLSAgICAKLSAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwg
VHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgp
KSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRl
cigpKSkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMCk7CisgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRy
dXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSks
IEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkp
OwogICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKTsKIAogICAgIGNvcHlMTElu
dEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKQEAgLTExMywxNSArMTE2LDIwIEBAIHZv
aWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCoKICAgICBhZGRTbG93Q2FzZShi
cmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwg
VHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5
V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCkKK3ZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGVXYXRj
aHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpCiB7CisgICAgYXV0byBvayA9IGJyYW5jaFRlc3RQ
dHIoWmVybywgcG9pbnRlclRvU2V0KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFs
LCBBZGRyZXNzKHBvaW50ZXJUb1NldCwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwg
VHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgb2subGluayh0aGlzKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQor
dm9pZCBKSVQ6OmVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBH
UFJSZWcgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8
IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPnZhclJlYWRPbmx5V2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgaWYgKHJlc29sdmVUeXBlID09
IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSB7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3Qs
IG1fdmFyUmVhZE9ubHlXYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9m
ZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH0KIH0K
IAogdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCkBAIC0xMjksMTIgKzEzNywx
OCBAQCB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKICAgICBpZiAoIUFTU0VS
VF9FTkFCTEVEKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBKdW1wIG9rID0gYnJhbmNoUHRyKEVx
dWFsLCByZWdUMCwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGJyZWFrcG9pbnQoKTsKICAg
ICBvay5saW5rKHRoaXMpOwogfQogCit2b2lkIEpJVDo6cmVzZXRTUCgpCit7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworfQorCiAjZGVmaW5lIE5F
WFRfT1BDT0RFKG5hbWUpIFwKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsgXAog
ICAgIGJyZWFrOwpAQCAtMTgxLDYxICsxOTUsNDQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93Q2FzZUNh
bGwoY29uc3QgSW5zdHJ1YwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3ZvaWQgSklU
OjplbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0
aW9uQ29kZSk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEpTRnVuY3Rp
b246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJlc3VsdCk7CisgICAgYXV0byBo
YXNFeGVjdXRhYmxlID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHQsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgbG9hZFB0cihBZGRy
ZXNzKHJlc3VsdCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1
bmN0aW9uOjpyYXJlRGF0YVRhZyksIHJlc3VsdCk7CisgICAgaGFzRXhlY3V0YWJsZS5saW5rKHRo
aXMpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkpCisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZD
b2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSksIHJlc3VsdCk7CisgICAgZWxzZQorICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2Nr
Rm9yQ2FsbCgpKSwgcmVzdWx0KTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEV4ZWN1
dGFibGVUb0NvZGVCbG9ja0VkZ2U6Om9mZnNldE9mQ29kZUJsb2NrKCkpLCByZXN1bHQpOworICAg
IGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZXN1bHQsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayk7CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29u
dGV4dCYgY3R4KSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxG
cmFtZSo+KCktPmNvZGVCbG9jaygpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxvY2st
PmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7CisgICAgfSk7CisjZW5kaWYKK30K
Kwogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogewogICAgIGlmIChKSVRJbnRl
cm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX2NvZGVCbG9j
aywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9wcm9maWxlZENvZGVC
bG9jaywgIlxuIik7CiAgICAgCiAgICAgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICBqaXRB
c3NlcnRBcmd1bWVudENvdW50U2FuZSgpOwogICAgIAotICAgIGF1dG8mIGluc3RydWN0aW9ucyA9
IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKLSAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNv
dW50ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBhdXRvJiBpbnN0
cnVjdGlvbnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKTsKKyAgICB1bnNp
Z25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpOwogCiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAKLSAgICBWTSYgdm0g
PSBtX2NvZGVCbG9jay0+dm0oKTsKICAgICBCeXRlY29kZUluZGV4IHN0YXJ0Qnl0ZWNvZGVJbmRl
eCgwKTsKLSAgICBpZiAobV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4ICYmIChtX2NvZGVCbG9j
ay0+aW5oZXJpdHM8UHJvZ3JhbUNvZGVCbG9jaz4odm0pIHx8IG1fY29kZUJsb2NrLT5pbmhlcml0
czxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSkpKSB7Ci0gICAgICAgIC8vIFdlIGNhbiBvbmx5
IGRvIHRoaXMgb3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgZXhlY3V0ZSBQcm9ncmFtQ29kZUJsb2Nr
J3MgZXhhY3RseSBvbmNlLgotICAgICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBiZSBp
bnZhbGlkIG90aGVyd2lzZS4gV2hlbiB0aGUgTExJbnQgZGV0ZXJtaW5lcyBpdCB3YW50cyB0bwot
ICAgICAgICAvLyBkbyBPU1IgZW50cnkgaW50byB0aGUgYmFzZWxpbmUgSklUIGluIGEgbG9vcCwg
aXQgd2lsbCBwYXNzIGluIHRoZSBieXRlY29kZSBvZmZzZXQgaXQKLSAgICAgICAgLy8gd2FzIGV4
ZWN1dGluZyBhdCB3aGVuIGl0IGtpY2tlZCBvZmYgb3VyIGNvbXBpbGF0aW9uLiBXZSBvbmx5IG5l
ZWQgdG8gY29tcGlsZSBjb2RlIGZvcgotICAgICAgICAvLyBhbnl0aGluZyByZWFjaGFibGUgZnJv
bSB0aGF0IGJ5dGVjb2RlIG9mZnNldC4KLQotICAgICAgICAvLyBXZSBvbmx5IGJvdGhlciBidWls
ZGluZyB0aGUgYnl0ZWNvZGUgZ3JhcGggaWYgaXQgY291bGQgc2F2ZSB0aW1lIGFuZCBleGVjdXRh
YmxlCi0gICAgICAgIC8vIG1lbW9yeS4gV2UgcGljayBhbiBhcmJpdHJhcnkgb2Zmc2V0IHdoZXJl
IHdlIGRlZW0gdGhpcyBpcyBwcm9maXRhYmxlLgotICAgICAgICBpZiAobV9sb29wT1NSRW50cnlC
eXRlY29kZUluZGV4Lm9mZnNldCgpID49IDIwMCkgewotICAgICAgICAgICAgLy8gQXMgYSBzaW1w
bGlmaWNhdGlvbiwgd2UgZG9uJ3QgZmluZCBhbGwgYnl0ZWNvZGUgcmFuZ2VzIHRoYXQgYXJlIHVu
cmVhY2hhYmxlLgotICAgICAgICAgICAgLy8gSW5zdGVhZCwgd2UganVzdCBmaW5kIHRoZSBtaW5p
bXVtIGJ5dGVjb2RlIG9mZnNldCB0aGF0IGlzIHJlYWNoYWJsZSwgYW5kCi0gICAgICAgICAgICAv
LyBjb21waWxlIGNvZGUgZnJvbSB0aGF0IGJ5dGVjb2RlIG9mZnNldCBvbndhcmRzLgotCi0gICAg
ICAgICAgICBCeXRlY29kZUdyYXBoIGdyYXBoKG1fY29kZUJsb2NrLCBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkpOwotICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IGdy
YXBoLmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9sb29wT1NSRW50cnlCeXRlY29k
ZUluZGV4Lm9mZnNldCgpKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJsb2NrKTsKLQot
ICAgICAgICAgICAgR3JhcGhOb2RlV29ya2xpc3Q8Qnl0ZWNvZGVCYXNpY0Jsb2NrKj4gd29ya2xp
c3Q7Ci0gICAgICAgICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KCk7Ci0g
ICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKTsKLQotICAgICAgICAgICAgd2hpbGUgKEJ5
dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgewotICAgICAgICAgICAg
ICAgIHN0YXJ0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoc3RkOjptaW4oc3RhcnRCeXRl
Y29kZUluZGV4Lm9mZnNldCgpLCBibG9jay0+bGVhZGVyT2Zmc2V0KCkpKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4IDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkK
LSAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaCgmZ3JhcGhbc3VjY2Vzc29ySW5kZXhd
KTsKLQotICAgICAgICAgICAgICAgIC8vIEFsc28gYWRkIGNhdGNoIGJsb2NrcyBmb3IgYnl0ZWNv
ZGVzIHRoYXQgdGhyb3cuCi0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJP
ZkV4Y2VwdGlvbkhhbmRsZXJzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5sZWFkZXJPZmZzZXQoKTsgYnl0ZWNvZGVPZmZzZXQg
PCBibG9jay0+bGVhZGVyT2Zmc2V0KCkgKyBibG9jay0+dG90YWxMZW5ndGgoKTspIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMuYXQoYnl0
ZWNvZGVPZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGhhbmRsZXIg
PSBtX2NvZGVCbG9jay0+aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleChieXRl
Y29kZU9mZnNldCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2go
Z3JhcGguZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zmc2V0KGhhbmRsZXItPnRhcmdldCkpOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZU9mZnNldCArPSBpbnN0cnVjdGlvbi0+
c2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQogCiAgICAgbV9ieXRlY29kZUNvdW50SGF2aW5nU2xv
d0Nhc2UgPSAwOwogICAgIGZvciAobV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsg
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CkBAIC0yNzgs
MTIgKzI3NSwxNSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAg
ICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkp
KSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAg
ICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAg
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2Rl
QmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZz
ZXQsICJdICIsIG9wY29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihjdHgu
ZnAoKSksICIgQCAiLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAor
ICAgICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2F0Y2gpCisgICAgICAgICAgICBhc3NlcnRTdGFj
a1BvaW50ZXJPZmZzZXQoKTsKKwogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgICAg
IERFRklORV9TTE9XX09QKGxlc3MpCiAgICAgICAgIERFRklORV9TTE9XX09QKGxlc3NlcSkKQEAg
LTUyNyw3ICs1MjcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAg
ICAgICAgIEJ5dGVjb2RlSW5kZXggZmlyc3RUbyA9IG1fYnl0ZWNvZGVJbmRleDsKIAotICAgICAg
ICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CisgICAgICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICAKICAgICAgICAg
aWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJCYXNlbGlu
ZSBKSVQgZW1pdHRpbmcgc2xvdyBjb2RlIGZvciAiLCBtX2J5dGVjb2RlSW5kZXgsICIgYXQgb2Zm
c2V0ICIsIChsb25nKWRlYnVnT2Zmc2V0KCkpOwpAQCAtNTQ1LDggKzU0NSw4IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKICAgICAgICAgICAgIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAgICAgICAgIHByb2JlRGVi
dWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSBTTE9XICIsIG9w
Y29kZU5hbWVzW29wY29kZUlEXSwgIiBjZnIgIiwgUmF3UG9pbnRlcihjdHguZnAoKSksICIgQCAi
LCBjb2RlQmxvY2spOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTYwMyw3ICs2MDMs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2RlbF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikKLSNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX2dldF9mcm9tX3Njb3BlKQogI2VuZGlmCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9wdXRfdG9fc2NvcGUpCkBAIC02NzQsNTUgKzY3NCw1NSBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKK3ZvaWQgSklUOjpl
bWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpCit7CisgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxl
KCkpLCBzX21ldGFkYXRhR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9j
azo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0
YW50c0dQUik7Cit9CisKK3ZvaWQgSklUOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCkKK3sKKyAg
ICBCYXNlOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKIHZvaWQgSklUOjpjb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkK
IHsKLSAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBhYmls
aXR5TGV2ZWwoKTsKKyAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRD
b2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBj
YXNlIERGRzo6Q2Fubm90Q29tcGlsZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNl
OwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1f
c2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERG
Rzo6Q2FuQ29tcGlsZToKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAg
ICAgbV9jYW5CZU9wdGltaXplZCA9IHRydWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklu
bGluZWQgPSB0cnVlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChtX2NvZGVC
bG9jay0+Y29kZVR5cGUoKSkgewotICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICBjYXNlIE1vZHVs
ZUNvZGU6Ci0gICAgY2FzZSBFdmFsQ29kZToKLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRnVuY3Rp
b25Db2RlOgotICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNl
IGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCi0gICAgICAgIC8vIERv
bid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRpb24uCi0gICAgICAgIG1fY29kZUJsb2NrLT5tX3No
b3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJbmxp
bmVGdW5jdGlvbihtX2NvZGVCbG9jayk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICAgIGlm
IChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX2Nv
ZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAg
ICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkp
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNo
SnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51
bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpOwotICAgICAgICBpZiAobV9jb2RlQmxv
Y2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAg
ICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRh
YmxlcyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9m
VW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOworICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fdW5saW5rZWRD
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAg
ICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1w
VGFibGVzKCkpCisgICAgICAgICAgICBtX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxT
aW1wbGVKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0
Y2hKdW1wVGFibGVzKCkpOworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVy
T2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV91bmxpbmtl
ZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CiAg
ICAgfQogCi0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8ICht
X3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGlu
ZUZvclByb2ZpbGVyKCkpKSkKLSAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJ
VERpc2Fzc2VtYmxlcj4obV9jb2RlQmxvY2spOworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpk
dW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlv
bnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpIHsKKyAgICAgICAgLy8gRklY
TUU6IGJ1aWxkIGEgZGlzYXNzZW1ibGVyIG9mZiBvZiBVbmxpbmtlZENvZGVCbG9jay4KKyAgICAg
ICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9wcm9maWxl
ZENvZGVCbG9jayk7CisgICAgfQogICAgIGlmIChVTkxJS0VMWShtX3ZtLT5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXIpKSB7CisgICAgICAgIC8vIEZJWE1FOiBidWlsZCBwcm9maWxlciBkaXNhc3NlbWJs
ZXIgb2ZmIFVubGlua2VkQ29kZUJsb2NrLgogICAgICAgICBtX2NvbXBpbGF0aW9uID0gYWRvcHRS
ZWYoCiAgICAgICAgICAgICBuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKAotICAgICAgICAgICAg
ICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fY29k
ZUJsb2NrKSwKKyAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVu
c3VyZUJ5dGVjb2Rlc0ZvcihtX3Byb2ZpbGVkQ29kZUJsb2NrKSwKICAgICAgICAgICAgICAgICBQ
cm9maWxlcjo6QmFzZWxpbmUpKTsKLSAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRC
eXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOworICAg
ICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyLCBtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKEJ5
dGVjb2RlSW5kZXgoMCkpKTsKQEAgLTc0MiwxMSArNzQyLDEyIEBAIHZvaWQgSklUOjpjb21waWxl
QW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVuY3Rp
b25Qcm9sb2d1ZSgpOwotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywg
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+
Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpCisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0Zy
YW1lSW5Qcm9sb2d1ZSgpOwogCiAgICAgTGFiZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAotICAgIGlu
dCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpOworICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgdW5z
aWduZWQgbWF4RnJhbWVTaXplID0gLWZyYW1lVG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoZnJhbWVUb3BPZmZzZXQpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwogICAgIEp1
bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CkBAIC03NTcsMTYgKzc1OCwyMCBAQCB2b2lkIEpJVDo6Y29t
cGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgbW92ZShyZWdUMSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBlbWl0
U2F2ZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJB
dE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVt
aXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CisgICAgZW1pdE1hdGVyaWFsaXplTWV0
YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+
Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9j
ay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgQVNTRVJUKCFtX2J5dGVj
b2RlSW5kZXgpOwotICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJv
ZmlsaW5nKCkgJiYgKCFtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwgbV91
bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID4gMSkpIHsKKyAgICAgICAgICAgIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVn
VDIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNl
dE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+Ojpv
ZmZzZXRPZlN0b3JhZ2UoKSksIHJlZ1QyKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0
cnVjdG9yLCB0aGVuIHdlIHdhbnQgdG8gcHV0IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRv
CiAgICAgICAgICAgICAgICAgLy8ga2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0
IGFjdHVhbGx5IHdhbnQgdG8gcmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4KLSAgICAgICAgICAgICAg
ICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCisgICAgICAg
ICAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJn
dW1lbnQpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlu
dCBvZmZzZXQgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVu
dCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVF
NjQpCkBAIC03NzcsMTIgKzc4MiwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluCiAgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0
ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSks
IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgotICAgICAgICAgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFy
Z3VtZW50KGFyZ3VtZW50KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1
ZShyZXN1bHRSZWdzLCBBZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2Zp
bGUpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6
aXNKSVQobV9jb2RlQmxvY2stPmppdFR5cGUoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRD
b2RlOjppc0pJVChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlmIChV
TkxJS0VMWShzaXplTWFya2VyKSkKICAgICAgICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1h
cmtFbmQoV1RGTW92ZSgqc2l6ZU1hcmtlciksICp0aGlzKTsKQEAgLTc5OSwyNCArODA0LDI3IEBA
IHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtX2J5dGVjb2Rl
SW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCkKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJf
dD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVy
YXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgbV9jb2RlQmxvY2spOworICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDApOwor
ICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRp
b25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgcmVnVDApOwogCiAgICAgLy8gSWYgdGhlIG51bWJl
ciBvZiBwYXJhbWV0ZXJzIGlzIDEsIHdlIG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCi0gICAg
Ym9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9
IDE7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBy
ZXF1aXJlc0FyaXR5Rml4dXApIHsKKyAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAhPSAxOworICAgIGlmIChtX3VubGlua2Vk
Q29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4
dXApIHsKICAgICAgICAgbV9hcml0eUNoZWNrID0gbGFiZWwoKTsKLSAgICAgICAgc3RvcmU4KFRy
dXN0ZWRJbW0zMigwKSwgJm1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7CisK
ICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAg
ICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUocmVnVDApOworICAgICAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hv
dWxkQWx3YXlzQmVJbmxpbmVkKCkpKTsKIAogICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QxKTsKLSAgICAgICAg
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5t
X251bVBhcmFtZXRlcnMpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CisgICAgICAgIGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAKICAgICAgICAg
bV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKIAogICAgICAgICBpZiAobWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1l
Um9sbGJhY2tPbkV4Y2VwdGlvbihtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0
aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNr
IDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGlmICht
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAgICAgICAgIGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1RvKGJl
Z2luTGFiZWwsIHRoaXMpOwpAQCAtODM5LDcgKzg0Nyw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5k
TGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29k
ZShsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxh
YmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAK
LSAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtC
dWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJ
VCwgZWZmb3J0KSk7CisgICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZm
ZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX3VubGlua2VkQ29kZUJsb2NrLCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04
NTgsOCArODY2LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50
eXBlKSB7CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNh
c2UgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXI6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVt
cFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVs
dCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVj
b2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsr
aikgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHVubGlua2VkVGFibGUubV9i
cmFuY2hPZmZzZXRzW2pdOwpAQCAtODcxLDggKzg3OSw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpTdHJpbmc6IHsKLSAgICAgICAg
ICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAg
ICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5n
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsKICAgICAgICAgICAgIGF1dG8gY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1
bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgbG9jYXRpb24gOiB1bmxpbmtlZFRh
YmxlLm1fb2Zmc2V0VGFibGUudmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBv
ZmZzZXQgPSBsb2NhdGlvbi5tX2JyYW5jaE9mZnNldDsKQEAgLTkwNiw2ICs5MTQsMjcgQEAgdm9p
ZCBKSVQ6OmxpbmsoKQogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwg
cmVjb3JkLmNhbGxlZSk7CiAgICAgfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBhdXRvIGZp
bmFsaXplSUNzID0gWyZdIChhdXRvJiBnZW5lcmF0b3JzKSB7CisgICAgICAgIGZvciAoYXV0byYg
Z2VuIDogZ2VuZXJhdG9ycykgeworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+
c3RhcnQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4u
bV9zdGFydCk7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5kb25lTG9jYXRp
b24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGdlbi5tX2RvbmUp
OworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0
aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1f
c2xvd1BhdGhCZWdpbik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZmluYWxpemVJQ3MobV9n
ZXRCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeVZhbHMpOworICAgIGZpbmFsaXplSUNz
KG1fZ2V0QnlJZHNXaXRoVGhpcyk7CisgICAgZmluYWxpemVJQ3MobV9wdXRCeUlkcyk7CisgICAg
ZmluYWxpemVJQ3MobV9wdXRCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlJZHMpOwor
ICAgIGZpbmFsaXplSUNzKG1fZGVsQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlJZHMp
OworICAgIGZpbmFsaXplSUNzKG1faW5CeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5zdGFu
Y2VPZnMpOworICAgIGZpbmFsaXplSUNzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMpOworI2Vsc2UK
ICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CiAgICAg
ZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5h
bGl6ZUlubGluZUNhY2hlcyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKQEAgLTkx
NywyMSArOTQ2LDI1IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX2luQnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9p
bnN0YW5jZU9mcywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHJp
dmF0ZUJyYW5kQWNjZXNzZXMsIHBhdGNoQnVmZmVyKTsKKyNlbmRpZgogCiAgICAgZm9yIChhdXRv
JiBjb21waWxhdGlvbkluZm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlv
bkluZm8udW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIGluZm8uZG9uZUxvY2F0aW9uID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8u
ZG9uZUxvY2F0aW9uKTsKKyNlbHNlCiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21w
aWxhdGlvbkluZm8uY2FsbExpbmtJbmZvOwogICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMo
CiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNv
bXBpbGF0aW9uSW5mby5zbG93UGF0aFN0YXJ0KSwKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbikp
OworI2VuZGlmCisKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIEpJVENvZGVNYXBCdWlsZGVyIGpp
dENvZGVNYXBCdWlsZGVyOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0g
MDsgYnl0ZWNvZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsK
LSAgICAgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKLSAgICAg
ICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29k
ZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXRdKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxvY2stPnNldEpJ
VENvZGVNYXAoaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKSk7CisgICAgSklUQ29kZU1hcEJ1
aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0
KSB7CisgICAgICAgIGlmIChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKKyAgICAg
ICAgICAgIGppdENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zm
c2V0KSwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRl
Y29kZU9mZnNldF0pKTsKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERp
c2Fzc2VtYmx5KCkpKSB7CkBAIC05NDAsMjYgKzk3Myw0MiBAQCB2b2lkIEpJVDo6bGluaygpCiAg
ICAgfQogCiAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBzaG91bGQgd2UgbWFrZSB0aGUgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91dCBVbmxp
bmtlZENvZGVCbG9jaz8KICAgICAgICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVG
b3JQcm9maWxlcigpKQogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmls
ZXIobV9jb21waWxhdGlvbi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9jb21waWxh
dGlvbik7CisgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRp
b24obV9wcm9maWxlZENvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAogICAgIGlm
IChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAgICAg
bV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1v
dmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAgCisgICAg
Ly8gRklYTUU6IE1ha2UgYSB2ZXJzaW9uIG9mIENvZGVCbG9ja1dpdGhKSVRUeXBlIHRoYXQga25v
d3MgYWJvdXQgVW5saW5rZWRDb2RlQmxvY2suCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBy
ZXN1bHQgPSBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRh
ZywKLSAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxv
Y2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkp
OworICAgICAgICAiQmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9j
a1dpdGhKSVRUeXBlKG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSku
ZGF0YSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
d2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1f
YXJpdHlDaGVjayk7Ci0gICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2Rl
KHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSk7CisgICAgbV9q
aXRDb2RlID0gYWRvcHRSZWYoKm5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlD
aGVjaykpOworCisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBXVEZNb3ZlKG1fdW5s
aW5rZWRDYWxscyk7CisgICAgbV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9zID0gV1RGTW92
ZShtX2V2YWxDYWxsTGlua0luZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRTdHViSW5m
b3MgPSBXVEZNb3ZlKG1fdW5saW5rZWRTdHViSW5mb3MpOworICAgIG1faml0Q29kZS0+bV9zd2l0
Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0Q29k
ZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXMpOworICAgIG1faml0Q29kZS0+bV9qaXRDb2RlTWFwID0gaml0Q29kZU1hcEJ1aWxkZXIu
ZmluYWxpemUoKTsKKyAgICBtX2ppdENvZGUtPmFkb3B0TWF0aElDcyhtX21hdGhJQ3MpOworICAg
IG1faml0Q29kZS0+bV9jb25zdGFudFBvb2wgPSBXVEZNb3ZlKG1fY29uc3RhbnRQb29sKTsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgIG1faml0Q29kZS0+bV9pc1NoYXJlYWJsZSA9IG1faXNTaGFy
ZWFibGU7CisjZWxzZQorICAgIG1faml0Q29kZS0+bV9pc1NoYXJlYWJsZSA9IGZhbHNlOworI2Vu
ZGlmCiAKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dGKCJK
SVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJl
c3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4
ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CisgICAgICAgIGRhdGFMb2dG
KCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV91bmxpbmtlZENv
ZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigp
LCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKIH0KIAot
Q29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZCgpCitDb21waWxhdGlv
blJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayogY29kZUJsb2NrKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogCkBAIC05Njgs
MjUgKzEwMTcsMTQgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocgog
CiAgICAgbV9saW5rQnVmZmVyLT5ydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MoKTsKIAot
ICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9s
b2NrKTsKLSAgICAgICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0KGxvY2tlciwgQ29kZUJsb2Nr
OjpTaHJpbmtNb2RlOjpMYXRlU2hyaW5rKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgewot
ICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5k
bGVyKGkpOwotICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KLSAg
ICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gbV9jb2RlQmxvY2stPmppdENvZGVNYXAoKS5maW5k
KEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVy
UHRyVGFnPigpOwotICAgIH0KLQogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwKQotICAgICAg
ICBtX2NvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoV1RGTW92ZShtX3BjVG9Db2RlT3Jp
Z2luTWFwKSk7CisgICAgICAgIG1faml0Q29kZS0+bV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1v
dmUobV9wY1RvQ29kZU9yaWdpbk1hcCk7CiAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVy
Qnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91
YmxlPihtX2ppdENvZGUtPnNpemUoKSkgLwotICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8ZG91
YmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKIAotICAgIG1f
Y29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBj
b2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKG1faml0Q29kZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKIAogICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CkBAIC05
OTgsMTEgKzEwMzYsMTEgQEAgc2l6ZV90IEpJVDo6Y29kZVNpemUoKSBjb25zdAogICAgIHJldHVy
biBtX2xpbmtCdWZmZXItPnNpemUoKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2
YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitDb21waWxhdGlvblJlc3Vs
dCBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21w
aWxlKCk7CiAgICAgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhlZmZvcnQpOwotICAg
IHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOworICAgIHJldHVybiBmaW5hbGl6ZU9uTWFp
blRocmVhZChjb2RlQmxvY2spOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRp
b25IYW5kbGVycygpCkBAIC0xMDQyLDE4ICsxMDgwLDI4IEBAIHZvaWQgSklUOjpkb01haW5UaHJl
YWRQcmVwYXJhdGlvbkJlZm9yZUMKICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnBy
b2Nlc3NMb2dFbnRyaWVzKCptX3ZtLCAiUHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24uIl9z
KTsKIH0KIAotdW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENv
ZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Y29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpKSkpOwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdpc3Rl
ckNvdW50Rm9yRnJhbWVQb2ludGVyT2Zmc2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkg
KyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAotaW50IEpJ
VDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQg
SklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAg
cmV0dXJuIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2Nr
KCkpOworfQorCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJh
bWVSZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jaykgLSAxKS5vZmZzZXQoKTsKIH0KIAoraW50IEpJ
VDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJl
dHVybiBzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygp
KTsKK30KKwogSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBKSVQ6OmNvbXBpbGVUaW1lU3RhdHMo
KQogewogICAgIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gcmVzdWx0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAKICNkZWZpbmUg
QVNTRVJUX0pJVF9PRkZTRVQoYWN0dWFsLCBleHBlY3RlZCkgQVNTRVJUX1dJVEhfTUVTU0FHRShh
Y3R1YWwgPT0gZXhwZWN0ZWQsICJKSVQgT2Zmc2V0IFwiJXNcIiBzaG91bGQgYmUgJWQsIG5vdCAl
ZC5cbiIsICNleHBlY3RlZCwgc3RhdGljX2Nhc3Q8aW50PihleHBlY3RlZCksIHN0YXRpY19jYXN0
PGludD4oYWN0dWFsKSk7CiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJK
SVREaXNhc3NlbWJsZXIuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJKSVRNYXRoSUMu
aCIKICNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRl
cmZhY2VKSVQuaCIKKyNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9y
aWdpbk1hcC5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5p
cXVlUmVmLmg+CkBAIC0xNDksMTQgKzE1MSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9Owog
CiAgICAgc3RydWN0IENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgc2xvd1BhdGhTdGFydDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRv
bmVMb2NhdGlvbjsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBVbmxpbmtlZENhbGxMaW5r
SW5mbyogdW5saW5rZWRDYWxsTGlua0luZm87CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQ7CisjZWxzZQorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgc2xvd1BhdGhTdGFydDsKICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm87CisjZW5kaWYKICAgICB9OwogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoUmV0dXJuQWRkcmVzc1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxs
ZWVGdW5jdGlvbik7CiAKLSAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZh
dGUgSlNJbnRlcmZhY2VKSVQgeworICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDog
cHVibGljIEpTSW50ZXJmYWNlSklUIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRo
Q2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogICAgICAgICBmcmllbmQg
Y2xhc3MgSklUVGh1bmtzOwpAQCAtMTcxLDYgKzE3OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAvLyB3aWxsIGNvbXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJl
IGFibGUgdG8gZml0IGEgcGF0Y2hlZCBvZmZzZXQuCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
aW50IHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQgPSAyNTY7CiAKKyAgICAgICAgdXNpbmcgQmFz
ZSA9IEpTSW50ZXJmYWNlSklUOworCiAgICAgcHVibGljOgogICAgICAgICBKSVQoVk0mLCBDb2Rl
QmxvY2sqID0gbnVsbHB0ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNl
dCA9IEJ5dGVjb2RlSW5kZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0xNzgsMjggKzE4Nywz
MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVk0mIHZtKCkgeyByZXR1cm4gKkpTSW50ZXJm
YWNlSklUOjp2bSgpOyB9CiAKICAgICAgICAgdm9pZCBjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQg
ZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxp
emVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKik7CiAgICAgICAgIHNpemVfdCBjb2RlU2l6ZSgpIGNv
bnN0OwogCiAgICAgICAgIHZvaWQgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxl
KCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShW
TSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQs
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0
KS5wcml2YXRlQ29tcGlsZShlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29k
ZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoY29kZUJsb2NrLCBlZmZvcnQp
OwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3Vu
dEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOworICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9p
bnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayopOwogICAgICAgICBzdGF0aWMgaW50IHN0
YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgSGFzaE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBjb21waWxlVGltZVN0YXRzKCk7
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTZWNvbmRzIHRvdGFsQ29tcGlsZVRp
bWUoKTsKIAorICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX21ldGFkYXRhR1BSID0g
TExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUjsKKyAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc19jb25zdGFudHNHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUjsKKwog
ICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpOwogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAgICAgICAgdm9pZCBwcml2YXRl
Q29tcGlsZVNsb3dDYXNlcygpOwogICAgICAgICB2b2lkIGxpbmsoKTsKLSAgICAgICAgQ29tcGls
YXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQpOworICAgICAg
ICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqLCBKSVRDb21waWxh
dGlvbkVmZm9ydCk7CiAKICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwg
d2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25z
dCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQpAQCAtMjIzLDYgKzIzNywz
MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Y29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkMzJGcm9tTWV0YWRhdGEo
Y29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkOEZyb21NZXRhZGF0YShj
b25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQg
c3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNl
dCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lk
IHN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZywgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0
KTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQg
bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnKTsKKworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBsb2FkQ29uc3RhbnQo
dW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BSUmVnKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2
b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2Nr
Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworCisgICAgICAgIHZvaWQgZW1pdFB1
dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdUMCk7CisKICAg
ICAgICAgdm9pZCBleGNlcHRpb25DaGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5kbGVyKTsKQEAg
LTI1NCw2ICsyOTQsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY29tcGlsZU9w
Q2FsbChjb25zdCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKKyAg
ICAgICAgICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlE
ICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCisgICAgICAgICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CisKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8Cisg
ICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncworICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworI2Vs
c2UKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpv
cGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwpAQCAtMjY1LDkgKzMxOCwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3Mg
fHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8fCBP
cDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1
cEZyYW1lKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKik7CisjZW5kaWYKIAogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KLSAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3Am
LCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIGJv
b2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNp
Z25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCk7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChj
b25zdCBPcCYpOwogICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtMjg3LDE0
ICszNDEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmll
cihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJy
aWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVt
aXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcik7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFy
cmllcihHUFJSZWcgb3duZXIpOwogCiAgICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2
YWx1ZSB0byBwcm9maWxlIGlzIGluIHJlZ1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBm
b3IKICAgICAgICAgLy8gc2NyYXRjaC4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB2b2lk
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKLSAgICAgICAg
dm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsK
LSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShNZXRhZGF0YSYsIEdQUlJlZyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1l
dGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVn
cyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVj
b2RlJiwgSlNWYWx1ZVJlZ3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpT
VmFsdWVSZWdzKTsKQEAgLTMwNSw4ICszNTgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9w
cm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+CiAgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsKIAotICAgICAgICB2b2lk
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5
UHJvZmlsZSosIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7Ci0gICAgICAgIHZvaWQgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJh
eVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2Ny
YXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBwdHJk
aWZmX3QsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3Ap
OwpAQCAtNTkzLDcgKzY0OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYxMSw3ICs2NjUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKik7Ci0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02MjcsMTQg
KzY4MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNs
b3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZShWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSk7Ci0gICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVT
bG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUpOworICAgICAgICB2b2lkIGVtaXRI
YXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlKTsKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBl
bWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBl
bWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAg
ICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUpOworICAgICAgICB2b2lk
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJS
ZWcpOworICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBHUFJS
ZWcgc2NyYXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwogICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xv
dCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY0Niw3ICs3MDAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICNlbmRpZgogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0
ZShXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBw
b2ludGVyVG9TZXQpOworICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BS
UmVnIHBvaW50ZXJUb1NldCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpT
VmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwog
ICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRy
ZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAg
ICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50
cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CkBA
IC02NTUsNiArNzA5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0UHV0
SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwog
CisgICAgICAgIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSlNW
YWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBp
c09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3Bl
cmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjc2LDEzICs3MzEsMTEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNs
b3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29w
X2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJvbV9zY29w
ZUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0
b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9w
dXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcihW
TSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKIAogICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFwc19oYW5k
bGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKQEAgLTY5Niwz
MiArNzQ5LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2
ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8
fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFS
RV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVf
IyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVf
VFlQRShERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dF
VF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBj
b25zdCBjaGFyKiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0
aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmlj
aWVudCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVz
b2x2ZWRDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3Bf
cmVzb2x2ZV9zY29wZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29s
dmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0K
LSNkZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAot
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9y
ZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1Jf
RUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRl
ZiBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVz
b2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihW
TSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CiAKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAorICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJik7CisgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcmVz
b2x2ZV9zY29wZUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mLCBz
dGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0
IGNoYXIqIHRodW5rTmFtZSk7CisKICAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gaXRlcisrLT5mcm9tOwpAQCAtNzYwLDEwICs3OTcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJh
Y2tPbkV4Y2VwdGlvbihjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCk7CiAgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldEpTVmFsdWVSZXN1bHQoQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7Ci0gICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKE1ldGFkYXRhJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgot
ICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYsIEFkZHJlc3MsIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQpOwogICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bl
cmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxG
dW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbD4KQEAgLTgyMSwyMCArODU4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAs
IHRhcmdldC5vZmZzZXQpKTsKICAgICAgICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwg
dHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0
czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgT3BlcmF0aW9u
VHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
T3BlcmF0aW9uVHlwZSBvcGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4g
YXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlw
ZT4oYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uLCByZXN1
bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRK
U1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICAgICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVu
YW1lIE1ldGFkYXRhLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUuLi4gQXJncz4KICAg
ICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFz
UmVzdWx0LCB2b2lkPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBBZGRyZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4u
LiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBBZGRyZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4u
LiBhcmdzKQogICAgICAgICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50c0ZvckluZGlyZWN0
Q2FsbDxPcGVyYXRpb25UeXBlPih0YXJnZXQsIGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
bWV0YWRhdGEsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJl
c3VsdCk7CisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShieXRlY29kZSwgQWRkcmVzcyhHUFJJbmZvOjpub25B
cmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CkBAIC05MTks
MjUgKzk1NiwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAg
ICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZDsgfQot
ICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4gbV9jYW5CZU9w
dGltaXplZE9ySW5saW5lZDsgfQogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7
IHJldHVybiBtX3Nob3VsZEVtaXRQcm9maWxpbmc7IH0KICNlbHNlCiAgICAgICAgIGJvb2wgY2Fu
QmVPcHRpbWl6ZWQoKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICBib29sIGNhbkJlT3B0aW1p
emVkT3JJbmxpbmVkKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgLy8gRW5hYmxlcyB1c2Ug
b2YgdmFsdWUgcHJvZmlsZXIgd2l0aCB0aWVyZWQgY29tcGlsYXRpb24gdHVybmVkIG9mZiwKICAg
ICAgICAgLy8gaW4gd2hpY2ggY2FzZSBhbGwgY29kZSBnZXRzIHByb2ZpbGVkLgogICAgICAgICBi
b29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAg
ICAgICAgdm9pZCBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVy
cygpOworCisgICAgICAgIHZvaWQgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworCiAgICAgICAg
IHN0YXRpYyBib29sIHJlcG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBj
b21wdXRlQ29tcGlsZVRpbWVzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB5b3UgbmVlZCB0
byBjaGVjayBhIHZhbHVlIGZyb20gdGhlIG1ldGFkYXRhIHRhYmxlIGFuZCB5b3UgbmVlZCBpdCB0
bwotICAgICAgICAvLyBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFzdCBhbmQgc2xvdyBwYXRo
LCB0aGVuIHlvdSB3YW50IHRvIHVzZSB0aGlzLgotICAgICAgICAvLyBJdCB3aWxsIGdpdmUgdGhl
IHNsb3cgcGF0aCB0aGUgc2FtZSB2YWx1ZSByZWFkIGJ5IHRoZSBmYXN0IHBhdGguCi0gICAgICAg
IEdldFB1dEluZm8gY29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUpOwotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLSAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGll
ZEFyaXRoUHJvZmlsZShCaW5hcnlPcCk7CisKKyAgICAgICAgdm9pZCByZXNldFNQKCk7CiAKICAg
ICAgICAgSW50ZXJwcmV0ZXIqIG1faW50ZXJwcmV0ZXI7CiAKQEAgLTk2NCw5ICs5OTgsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2Vz
OwogICAgICAgICBWZWN0b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCi0gICAgICAgIEhh
c2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwotICAgICAgICBI
YXNoTWFwPHVpbnQ2NF90LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQcm9maWxl
czsKLQogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExp
c3QgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7CiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQpAQCAtMTAwMCwxMSArMTAzMSwyNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgSGFzaE1hcDxjb25zdCBJbnN0cnVjdGlvbiosIFVuaXF1ZVJlZjxNYXRoSUNHZW5l
cmF0aW9uU3RhdGU+PiBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGU7CiAKICAg
ICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwotICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQ7CiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAg
ICBCeXRlY29kZUluZGV4IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKIAotICAgICAgICBS
ZWZQdHI8RGlyZWN0SklUQ29kZT4gbV9qaXRDb2RlOworICAgICAgICBDb2RlQmxvY2sqIG1fcHJv
ZmlsZWRDb2RlQmxvY2sgeyBudWxscHRyIH07CisgICAgICAgIFVubGlua2VkQ29kZUJsb2NrKiBt
X3VubGlua2VkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworCisgICAgICAgIE1hdGhJQ0hvbGRlciBt
X21hdGhJQ3M7CisgICAgICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1faml0Q29kZTsKKwor
ICAgICAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5rZWRDYWxsTGlua0lu
Zm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2Fs
bExpbmtJbmZvczsKKyAgICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5s
aW5rZWRTdHViSW5mb3M7CisgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9z
d2l0Y2hKdW1wVGFibGVzOworICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKworICAgICAgICBzdHJ1Y3QgTm90QUNvZGVCbG9jayB7
IH0gbV9jb2RlQmxvY2s7CisKKyAgICAgICAgYm9vbCBtX2lzU2hhcmVhYmxlIHsgdHJ1ZSB9Owog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIs
OSArMjkyLDEwIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFy
KG9wMikpIHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAK
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsK
ICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBO
b25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0zNzIsNyArMzc1LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaQogICAgIH0KIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQu
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25a
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTU3Myw3ICs1NzcsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgCiAKICAgICBlbWl0TG9hZChv
cDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBy
ZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBO
b25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjIsOCBA
QCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjpl
bWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0g
ICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJv
ZmlsZSk7CisgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9h
cml0aFByb2ZpbGU7CisgICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9tYXRoSUNzLmFkZEpJVE5l
Z0lDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50
SW5zdHJ1Y3Rpb24sIG5lZ2F0ZUlDKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVy
IHRvIGNhbGwgdGhvc2Ugb3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNh
biBiZSBhIEJpZ0ludAogICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25B
cml0aE5lZ2F0ZSk7CkBAIC04OTksOCArOTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlm
dChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgSklUQWRkSUMqIGFkZElDID0g
bV9tYXRoSUNzLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRv
TWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFz
dDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQpAQCAtOTQ1LDEwICs5NTAsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIGJvb2wgZ2VuZXJhdGVkSW5s
aW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CiAgICAgICAgIFVuYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxl
ICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVn
cyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAg
ICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBA
IC0xMDE1LDEwICsxMDIxLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlN
YXRoSUMKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAgICAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFBy
b2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFBy
b2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQ
cm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBh
ZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEw
NTUsMTMgKzEwNjIsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElD
PAogI2VuZGlmCiAKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0
aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hG
dW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJ
QykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNS
ZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVp
bnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBF
TkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAg
LTExMjAsMTMgKzExMjgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1h
dGhJQwogI2VuZGlmCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1h
dGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAg
aWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYg
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7Cisg
ICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmls
ZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAg
ICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJp
dHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdp
c2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwog
CiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVs
KCk7CkBAIC0xMTY2LDcgKzExNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5z
dHJ1Y3Rpb24qCiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxw
dHI7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOworICAgICAgICBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5k
VHlwZXMuZmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2Rl
Lm1fb3BlcmFuZFR5cGVzLnNlY29uZCgpKTsKQEAgLTEyMTEsOCArMTIyMCw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4o
KS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11
bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVs
PigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJ
VE11bElDKiBtdWxJQyA9IG1fbWF0aElDcy5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAg
IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAg
ICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJh
dGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KQEAgLTEyMjcsOCAr
MTIzNiw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7
Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJv
ZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhh
cml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3Ry
dWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3Vi
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0
IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBlbWl0U3RvcmUoZGVzdGluYXRpb25Gb3Io
Ynl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3Rlcigp
LCByZWdUMSwgcmVnVDApOwogfQogCkBAIC0xNTcsNyArMTU3LDcgQEAgc3RkOjplbmFibGVfaWZf
dDwKIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0lu
Zm8qKQogewogICAgIHVuc2lnbmVkIGNoZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJs
b2NrKTsKICAgICBpbnQgYXJnQ291bnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0Zvcihi
eXRlY29kZSwgY2hlY2twb2ludCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19j
YXN0PGludD4oc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9p
bnQpKTsKIApAQCAtMTkyLDcgKzE5Miw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmIGJ5dGVjb2QKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZv
ckZvcndhcmRBcmd1bWVudHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3Bl
cmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRp
b24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgY2FsbE9wZXJh
dGlvbihzaXplT3BlcmF0aW9uLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zm
c2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7
CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIsIGZhbHNlLCBy
ZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygp
LCA2ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAg
LTIwMiw3ICsyMDIsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29k
CiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRz
RnJhbWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVw
VmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUNCksIGZp
cnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlv
biwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJl
Z1QyLCByZWdUNCksIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCkBA
IC0yMzIsMTAgKzIzMiwxMCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2Fs
bEV2CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAg
ICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpj
YWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxF
dmFsLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwogCiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogCkBAIC0yNDksNyArMjQ5LDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
Q2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENh
bGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5m
byogaW5mbyA9IG1fcHJvZmlsZWRCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwg
cmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKQEAg
LTI1OCw4ICsyNTgsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3Qg
CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3Rl
cikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwot
ICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBp
bmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fcHJvZmlsZWRCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsK
QEAgLTI4NiwxMSArMjg2LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3Ry
dWN0aW8KICAgICAqLwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CiAgICAgaWYg
KG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5h
ZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgaW5m
byA9IG1fcHJvZmlsZWRCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSk7CiAgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOwogICAgIC8v
IFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBB
cmd1bWVudENvdW50IGluaXRpYWxpemVkLgogICAgIAotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9
IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKKyAgICBhdXRvIGJ5dGVj
b2RlSW5kZXggPSBtX3Byb2ZpbGVkQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwog
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCku
Yml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIHRhZ0ZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgIGVtaXRMb2Fk
KGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsgLy8gcmVnVDEsIHJlZ1QwIGhvbGRzIGNhbGxlZS4KQEAg
LTMyNCw3ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlv
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBl
bWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zNDEsMTIgKzM0MSwxMSBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgfQogCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMyk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92bSwgKnRoaXMp
OwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMpIHsKQEAgLTM1NCw3ICszNTMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dD
YXNlKGNvbnN0IEluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpAQCAtMzk1LDcgKzM5NCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBKU1ZhbHVlUmVncyBuZXh0
UmVncyA9IEpTVmFsdWVSZWdzKHRhZ05leHRHUFIsIHBheWxvYWROZXh0R1BSKTsKIAogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywKKyAgICAgICAgbV9w
cm9maWxlZEJsb2NrLAogICAgICAgICBKSVRUeXBlOjpCYXNlbGluZUpJVCwKICAgICAgICAgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCkBAIC00MTAsNyArNDA5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBuZXh0
UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQmxvY2spLCBuZXh0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25leHQsIG5leHRSZWdzKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CkBAIC00
NDAsMTAgKzQzOSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25z
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoCi0gICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgLy8gbWV0YWRhdGEKKyAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZEJsb2NrKSwgLy8gbWV0YWRhdGEKICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCAv
LyBvcGVyYXRpb24KICAgICAgICAgbmV4dFZSZWcsIC8vIHJlc3VsdAotICAgICAgICBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKKyAgICAgICAgVHJ1
c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQogICAg
ICAgICBnZW4uc3R1YkluZm8oKSwgLy8gYXJnMgogICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVy
YXRvckdQUiwgcGF5bG9hZEl0ZXJhdG9yR1BSKSwgLy8gYXJnMwogICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkp
OyAvLyBhcmc0CkBAIC00NTIsNyArNDUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJh
dG9yX29wZW4oY29ucwogICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5s
aW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3Vs
dElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2Jq
ZWN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIAog
ICAgIGRvbmUubGluayh0aGlzKTsKIH0KQEAgLTQ2MCw3ICs0NTksNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9u
ZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVu
Y3Rpb24gPSAoWyZdICgpIHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkg
ewogICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFy
cm93OwpAQCAtNTA2LDcgKzUwNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW4KICAgICAgICAgcHJlc2VydmVkUmVncy5hZGQodGFnVmFsdWVHUFIpOwogICAgICAg
ICBwcmVzZXJ2ZWRSZWdzLmFkZChwYXlsb2FkVmFsdWVHUFIpOwogICAgICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLAorICAgICAgICAgICAgbV9w
cm9maWxlZEJsb2NrLAogICAgICAgICAgICAgSklUVHlwZTo6QmFzZWxpbmVKSVQsCiAgICAgICAg
ICAgICBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgICAgICBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCkBAIC01MzMsMTAg
KzUzMiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Q2OwogICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBy
ZWdUNzsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1
dGh5KHZtKCksIEpTVmFsdWVSZWdzKHRhZ0RvbmVHUFIsIHBheWxvYWREb25lR1BSKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIEp1bXBMaXN0
IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh0YWdEb25l
R1BSLCBwYXlsb2FkRG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdU
MSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgICAgIG1fY29kZUJsb2NrLAorICAgICAgICAgICAgbV9wcm9maWxlZEJsb2NrLAogICAgICAg
ICAgICAgSklUVHlwZTo6QmFzZWxpbmVKSVQsCiAgICAgICAgICAgICBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksCiAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpKSksCkBAIC01ODgsMTAgKzU4NywxMCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZSgKLSAgICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgLy8gbWV0
YWRhdGEKKyAgICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIC8v
IG1ldGFkYXRhCiAgICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJh
dGlvbgogICAgICAgICAgICAgZG9uZVZSZWcsIC8vIHJlc3VsdAotICAgICAgICAgICAgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCisgICAgICAgICAg
ICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcx
CiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKSwgLy8gYXJnMgogICAgICAgICAgICAgSlNWYWx1
ZVJlZ3ModGFnSXRlclJlc3VsdEdQUiwgcGF5bG9hZEl0ZXJSZXN1bHRHUFIpLCAvLyBhcmczCiAg
ICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKGlkZW50KS5yYXdCaXRzKCkpOyAvLyBhcmc0CkBAIC02MDIsNyArNjAxLDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlz
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNO
b3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2Jq
ZWN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAg
ICB9CiAKICAgICB7ICAgCkBAIC02MTgsMTAgKzYxNywxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSgKLSAg
ICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgLy8gbWV0YWRhdGEKKyAg
ICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIC8vIG1ldGFkYXRh
CiAgICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgogICAg
ICAgICAgICAgdmFsdWVWUmVnLCAvLyByZXN1bHQKLSAgICAgICAgICAgIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICAgICAgVHJ1c3Rl
ZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQogICAgICAg
ICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHRh
Z0l0ZXJSZXN1bHRHUFIsIHBheWxvYWRJdGVyUmVzdWx0R1BSKSwgLy8gYXJnMwogICAgICAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsgLy8gYXJnNApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQ2Fs
bEZyYW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJKSVRJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVk
ZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKICNpbmNs
dWRlICJTdGFja0FsaWdubWVudC5oIgpAQCAtNDQsNyArNDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0
IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9u
Rm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0
ZXIoKSwgcmVnVDApOwogfQogCkBAIC01MywxOCArNTQsMTggQEAgc3RkOjplbmFibGVfaWZfdDwK
ICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBv
cF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxf
dmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
CiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2Fs
bExpbmtJbmZvKikKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHVuc2lnbmVkIGNoZWNrcG9pbnQgPSBt
X2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGludCBhcmdDb3VudEluY2x1ZGluZ1RoaXMg
PSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2ludCk7CiAg
ICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oc3RhY2tPZmZzZXRJblJl
Z2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpKTsKIAorCiAgICAgaWYgKE9wOjpv
cGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApKSwgcmVnVDApOwogICAgICAg
ICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwogICAgICAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgICAg
ICBzdG9yZTMyKHJlZ1QwLCBhcnJheVByb2ZpbGVGb3IobWV0YWRhdGEsIGNoZWNrcG9pbnQpLmFk
ZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRh
KHJlZ1QwLCBieXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8o
KSArIExMSW50Q2FsbExpbmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9m
aWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGRvbmUubGluayh0
aGlzKTsKICAgICB9CiAKQEAgLTc4LDcgKzc5LDcgQEAgc3RkOjplbmFibGVfaWZfdDwKICAgICBP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25z
dHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJn
cyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAsIHZv
aWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJ
bmZvKiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKQEAgLTkxLDcgKzky
LDggQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBz
aXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50czsKICAg
ICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJh
cmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJz
dFZhckFyZ09mZnNldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CisgICAgY2FsbE9w
ZXJhdGlvbihzaXplT3BlcmF0aW9uLCByZWdUMCwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3Rlciwg
Zmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1maXJzdEZyZWVSZWdp
c3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1
ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0Fs
aWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwpAQCAtMTAxLDE0ICsxMDMsMTYgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVw
Rm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UKICAgICAgICAgc2V0dXBPcGVyYXRpb24g
PSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qx
LCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCByZWdUMywgcmVnVDEs
IHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0
KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpLCByZWdUMCk7Ci0gICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJv
dmUsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMiwgaW5mby0+YWRkcmVzc09mTWF4
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5r
SW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENhbGxMaW5r
SW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSwgcmVnVDMpOwor
ICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMywgcmVnVDIpOworICAg
IHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CiAgICAgbm90QmlnZ2VzdC5saW5rKHRoaXMp
OwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgpAQCAtMTI3LDE2ICsxMzEsMTUgQEAg
Ym9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpCiB0ZW1wbGF0ZTw+CiBib29sIEpJ
VDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVjb2RlKQogewotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIo
Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVP
ZmZzZXQoKSkpOwotCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
KyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgYXJndW1lbnRHUFIxKTsK
KyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIENh
bGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJl
Z1QyKTsKKyAgICByZXNldFNQKCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgp
KSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZXR1
cm5WYWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogCkBAIC0x
NDgsNyArMTUxLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2Rl
QmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAg
IENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxMaW5rSW5mb3MuYWRkKENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2Fs
bCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsK
QEAgLTE1Niw0MyArMTU5LDQ3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
b25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJl
Z2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0s
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAg
ICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KCptX3ZtLCBpbmZvKTsK
KyAgICByZXNldFNQKCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChj
b25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQsIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29s
IEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBDYWxsTGlu
a0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQorYm9vbCBKSVQ6OmNvbXBp
bGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgVW5saW5rZWRDYWxsTGlua0lu
Zm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewotICAgIENhbGxGcmFtZVNodWZmbGVEYXRh
IHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5t
X2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQorICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENh
bGxGcmFtZVNodWZmbGVEYXRhPigpOworICAgIHNodWZmbGVEYXRhLT5udW1QYXNzZWRBcmdzID0g
Ynl0ZWNvZGUubV9hcmdjOworICAgIHNodWZmbGVEYXRhLT5udW1QYXJhbWV0ZXJzID0gbV91bmxp
bmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworICAgIHNodWZmbGVEYXRhLT5udW1iZXJU
YWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworICAgIHNodWZmbGVEYXRh
LT5udW1Mb2NhbHMgPQogICAgICAgICBieXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXpl
KGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1ZmZsZURhdGEtPmFyZ3MucmVzaXplKGJ5dGVjb2Rl
Lm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsg
KytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAgICBzaHVmZmxlRGF0
YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3Rh
Y2soCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdU
aGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7
CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVl
U2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7Ci0gICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0
YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZsZURhdGEtPmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6
OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgIHNodWZmbGVEYXRhLT5zZXR1cENhbGxl
ZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IGluZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0
YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxl
RGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5m
b0NvbnN0YW50LCByZWdUMik7CisgICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZv
OjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0gewor
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgKnNodWZmbGVEYXRhKS5wcmVwYXJlRm9y
VGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOworCisgICAg
c2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CisgICAgaW5mby0+ZnJhbWVTaHVmZmxlRGF0YSA9
IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgp
OwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0
aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjE4LDE0ICsyMjUsMjUgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICAtIENhbGxlciBpbml0aWFs
aXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxs
RnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KLSAgICBDYWxsTGlua0luZm8qIGlu
Zm8gPSBudWxscHRyOwotICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAg
IGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOworCisgICAg
VW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0gVUlOVF9NQVg7CisgICAgaWYgKG9wY29kZUlEICE9
IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBpbmZvID0gbV91bmxpbmtlZENhbGxzLmFkZCgpOwor
ICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBp
bmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpOworCisg
ICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAgICAgICAgQVNTRVJUKG1fY2FsbENvbXBp
bGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CisgICAgICAgIG1f
Y2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0udW5saW5rZWRDYWxsTGlua0lu
Zm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0NvbnN0YW50OworICAgIH0KKyAgICBjb21w
aWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0YW50KTsKIAogICAgIC8vIFNQIGhvbGRz
IG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENv
dW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2NrLT5i
eXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBD
YWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIs
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNldCkpOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAtMjM0
LDE2ICsyNTIsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRl
eCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2Rl
SUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGls
YXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNv
ZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5
dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwgaW5mb0NvbnN0YW50KSkKICAgICAgICAg
cmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9Db25zdGFudCwgcmVnVDIpOwogICAgIGlm
IChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgYXV0byBzbG93UGF0aHMgPSBpbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5r
SW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZd
IHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgIHBy
ZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAgICAgICB9KTsKQEAgLTI1MywxNCArMjY3
LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdEZhc3RQYXRo
KCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMpOworICAg
IGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIGFk
ZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKIAotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgcmVzZXRTUCgpOwogCiAgICAgZW1p
dFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQpAQCAtMjczLDIxICsyODYsMjAgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
c2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Cisg
ICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
Y2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0sICp0aGlzKTsKKyAgICBD
YWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgqbV92bSwgKnRoaXMsIHJlZ1QyKTsKIAog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKKyAgICByZXNldFNQKCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM5
NSwxNyArNDA3LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4K
IAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJnZtKCkucHJvcGVydHlOYW1lcy0+bmV4
dDsKICAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDApOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgbW92ZShyZWdUMCwgYmFzZUdQUik7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMCksIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
aWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7Cisg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNl
dFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0
aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRHUFIp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CiB9CkBAIC00MTYsMTAg
KzQ0Miw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9wZW4+KGluc3RydWN0aW9uLCBpdGVyLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2lu
dChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgR1BSUmVn
IGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKICAgICBub3RP
YmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyYXRvckdQUikpOwogICAgIG5vdE9iamVj
dC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0b3JHUFIpKTsKQEAgLTQzMiwxOSArNDU2
LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpu
b25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygp
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
bmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgbW92ZShpdGVyYXRvckdQUiwgYXJn
dW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIAogICAgIGF1dG8gZG9uZSA9IGp1
bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05v
dE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKIH0KQEAgLTQ1
Miw3ICs0NzQsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JO
ZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewogICAgICAgICBzd2l0
Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNhc2UgTmFycm93OiByZXR1cm4g
aXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC00NzAsNTAgKzQ5MSw3OSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgSnVtcCBmYXN0Q2FzZSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpKTsKIAogICAg
IGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgb3I4KFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIEFic29sdXRlQWRkcmVzcygmbWV0
YWRhdGEubV9pdGVyYXRpb25NZXRhZGF0YS5zZWVuTW9kZXMpKTsKKyAgICBsb2FkOEZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdGlv
bk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9mU2Vlbk1vZGVzKCks
IHJlZ1QwKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihJdGVy
YXRpb25Nb2RlOjpHZW5lcmljKSksIHJlZ1QwKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1Qw
LCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdGlvbk1l
dGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6Om9mZnNldE9mU2Vlbk1vZGVzKCkpOwog
ICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgLy8gY2Fs
bCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkgaW4gcmVnVDAKIAotICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7Ci0g
ICAgR1BSUmVnIGRvbmVHUFIgPSByZWdUMTsKLSAgICAvLyBpdGVyUmVzdWx0R1BSIHdpbGwgZ2V0
IHRyYXNoZWQgYnkgdGhlIGZpcnN0IGdldCBieSBpZCBiZWxvdy4KLSAgICBtb3ZlKHZhbHVlR1BS
LCBpdGVyUmVzdWx0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0
ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJlclJl
Z2lzdGVyOworICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKIAor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
cmVzdWx0OwogICAgIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJS
ZXN1bHRHUFIpOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVH
UFIgPT0gYmFzZUdQUik7CisKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIpOwogCiAgICAgICAgIFJlZ2lzdGVyU2V0IHByZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0gICAgICAgIHByZXNlcnZlZFJlZ3MuYWRk
KHZhbHVlR1BSKTsKKyAgICAgICAgcHJlc2VydmVkUmVncy5hZGQoaXRlckNhbGxSZXN1bHRHUFIp
OwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHBy
ZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1Zh
bHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHJlZ1QzLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBw
cmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzdHViSW5mb0dQUiwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0
byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKKyAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOwogICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZG9uZSwgZG9uZUdQUik7CiAgICAg
ICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgfQogCi0KICAgICB7Ci0gICAgICAg
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdU
MzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhkb25lR1BSLCBpdGVyQ2FsbFJl
c3VsdEdQUik7CisgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2Nh
dG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBz
Y3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBHUFJSZWcgZ2xv
YmFsR1BSID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAg
Y29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAg
ICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFs
dWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgICAgICBKdW1w
TGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9u
ZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxHUFIpOworCisgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAg
Y29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYmFzZUdQUik7CiAKICAgICAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+
dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwor
ICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgcmVzZXRT
UCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2
ZWx5IHJlc2V0IFNQCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMu
YXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
SlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0R1BSIH0pOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlc3VsdEdQUik7CiAKICAgICAg
ICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwogICAgIH0KQEAgLTUyNyw1OSArNTc3LDU1IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkp
OwogCisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdpc3RlcjsKKwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7CiAgICAgewogICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5tX2RvbmU7Ci0gICAgICAgIEdQUlJlZyBp
dGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
ICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJy
YW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKGl0ZXJDYWxsUmVzdWx0R1BSKSk7CiAKICAgICAgICAgVW5pcXVlZFN0
cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKTsKICAgICAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKICAgICAgICAgCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0g
ICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlclJlc3VsdEdQUikp
OworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJDYWxsUmVz
dWx0R1BSKSk7CiAKLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRk
cmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkp
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUsIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotCi0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIHJlZ1QxKTsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7CisgICAgICAgIG1vdmUoaXRl
ckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFk
ZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0
aW9uKCkpLCBkb25lVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsKKworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoZG9uZVZSZWcsIGRvbmVHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0Lmxpbmso
dGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3Vs
dElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkp
OworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVu
dEdQUjApOwogICAgIH0KIAogICAgIHsgICAKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7
Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDA7CiAKICAgICAgICAgVW5pcXVl
ZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCk7CiAg
ICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5k
ZXgrK107CiAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAg
ICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkgewotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25B
cmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1
ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCB2YWx1ZVZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRH
UFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVj
bHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1l
bnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1
ZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7CisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKICAgICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDExIEBACiAjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIK
IAorCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CisKIG5hbWVz
cGFjZSBERkcgewogY2xhc3MgQ29tbW9uRGF0YTsKIGNsYXNzIEpJVENvZGU7CkBAIC0xNTksMTAg
KzE2MiwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCB1c2VEYXRhSUMoSklUVHlwZSBq
aXRUeXBlKQogICAgIHsKLSAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2Rl
KGppdFR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghT3B0aW9u
czo6dXNlRGF0YUlDKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVy
biBPcHRpb25zOjp1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQoKTsKICAgICB9CiAKQEAgLTIyMyw2
ICsyMjYsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzU2hhcmVkKCkgY29uc3QgeyByZXR1cm4g
bV9zaGFyZUF0dHJpYnV0ZSA9PSBTaGFyZUF0dHJpYnV0ZTo6U2hhcmVkOyB9CiAKKyAgICB2aXJ0
dWFsIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIHsgcmV0dXJuIG51bGxw
dHI7IH0KKwogcHJpdmF0ZToKICAgICBKSVRUeXBlIG1faml0VHlwZTsKICAgICBTaGFyZUF0dHJp
YnV0ZSBtX3NoYXJlQXR0cmlidXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb21waWxhdGlvbktleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb21waWxhdGlvbktleS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw3IEBAIHZvaWQgSklUQ29tcGlsYXRpb25LZXk6OmR1bXAoUHJpbnRTdHJlYW0K
ICAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgb3V0LnByaW50KCIoQ29tcGlsZSBvZiAiLCAqbV9wcm9maWxlZEJsb2NrLCAiIHdpdGggIiwg
bV9tb2RlLCAiKSIpOworICAgIG91dC5wcmludCgiKENvbXBpbGUgb2YgIiwgUmF3UG9pbnRlciht
X2NvZGVCbG9jayksICIgd2l0aCAiLCBtX21vZGUsICIpIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25L
ZXkuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b21waWxhdGlvbktleS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw1NyArMzAsNTYgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIENvZGVCbG9ja1NldDsKK2Ns
YXNzIEpTQ2VsbDsKIAogY2xhc3MgSklUQ29tcGlsYXRpb25LZXkgewogcHVibGljOgogICAgIEpJ
VENvbXBpbGF0aW9uS2V5KCkKLSAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2sobnVsbHB0cikKKyAg
ICAgICAgOiBtX2NvZGVCbG9jayhudWxscHRyKQogICAgICAgICAsIG1fbW9kZShKSVRDb21waWxh
dGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbikKICAgICB7CiAgICAgfQogICAgIAogICAgIEpJ
VENvbXBpbGF0aW9uS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAgICAg
OiBtX3Byb2ZpbGVkQmxvY2sobnVsbHB0cikKKyAgICAgICAgOiBtX2NvZGVCbG9jayhudWxscHRy
KQogICAgICAgICAsIG1fbW9kZShKSVRDb21waWxhdGlvbk1vZGU6OkRGRykKICAgICB7CiAgICAg
fQogICAgIAotICAgIEpJVENvbXBpbGF0aW9uS2V5KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywg
SklUQ29tcGlsYXRpb25Nb2RlIG1vZGUpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKHByb2Zp
bGVkQmxvY2spCisgICAgSklUQ29tcGlsYXRpb25LZXkoSlNDZWxsKiBwcm9maWxlZEJsb2NrLCBK
SVRDb21waWxhdGlvbk1vZGUgbW9kZSkKKyAgICAgICAgOiBtX2NvZGVCbG9jayhwcm9maWxlZEJs
b2NrKQogICAgICAgICAsIG1fbW9kZShtb2RlKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3Byb2ZpbGVkQmxv
Y2sgJiYgbV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOwor
ICAgICAgICByZXR1cm4gIW1fY29kZUJsb2NrICYmIG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1v
ZGU6OkludmFsaWRDb21waWxhdGlvbjsKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gIW1fcHJvZmlsZWRC
bG9jayAmJiBtX21vZGUgIT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247
CisgICAgICAgIHJldHVybiAhbV9jb2RlQmxvY2sgJiYgbV9tb2RlICE9IEpJVENvbXBpbGF0aW9u
TW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOwogICAgIH0KICAgICAKLSAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2soKSBjb25zdCB7IHJldHVybiBtX3Byb2ZpbGVkQmxvY2s7IH0KICAgICBKSVRD
b21waWxhdGlvbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIAogICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBKSVRDb21waWxhdGlvbktleSYgb3RoZXIpIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJsb2NrID09IG90aGVyLm1fcHJvZmlsZWRC
bG9jaworICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2sgPT0gb3RoZXIubV9jb2RlQmxvY2sKICAg
ICAgICAgICAgICYmIG1fbW9kZSA9PSBvdGhlci5tX21vZGU7CiAgICAgfQogICAgIAogICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhh
c2goV1RGOjpQdHJIYXNoPENvZGVCbG9jayo+OjpoYXNoKG1fcHJvZmlsZWRCbG9jayksIHN0YXRp
Y19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPEpJVENvbXBpbGF0aW9uTW9kZT46OnR5cGU+KG1f
bW9kZSkpOworICAgICAgICByZXR1cm4gV1RGOjpwYWlySW50SGFzaChXVEY6OlB0ckhhc2g8SlND
ZWxsKj46Omhhc2gobV9jb2RlQmxvY2spLCBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlw
ZTxKSVRDb21waWxhdGlvbk1vZGU+Ojp0eXBlPihtX21vZGUpKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgQ29kZUJsb2Nr
KiBtX3Byb2ZpbGVkQmxvY2s7CisgICAgLy8gRWl0aGVyIENvZGVCbG9jayogb3IgVW5saW5rZWRD
b2RlQmxvY2sqIGZvciBiYXNsZWxpbmUgSklULgorICAgIEpTQ2VsbCogbV9jb2RlQmxvY2s7CiAg
ICAgSklUQ29tcGlsYXRpb25Nb2RlIG1fbW9kZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKQEAgLTQ2LDEwICs0
Nyw5IEBAIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyogZ2FyYmFnZVN0dWJJbmYKIEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxT
aXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycykKLSAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKLSAg
ICAsIG1faml0VHlwZShqaXRUeXBlKQorICAgIDogbV9qaXRUeXBlKGppdFR5cGUpCiB7Ci0gICAg
bV9zdHViSW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vz
c1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CisgICAgbV9zdHViSW5mbyA9
IGNvZGVCbG9jayA/IGNvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdp
bikgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0g
Y2FsbFNpdGU7CiAKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVy
czsKQEAgLTU5LDcgKzU5LDYgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxp
emUoCiAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGgsIExpbmtCdWZmZXImIHNsb3dQYXRoLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpCiB7CiAgICAgbV9zdHVi
SW5mby0+c3RhcnQgPSBzdGFydDsKLQogICAgIG1fc3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IGZh
c3RQYXRoLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4obV9kb25lKTsKIAogICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCkBAIC02Nyw2ICs2NiwxNSBAQCB2b2lkIEpJ
VElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBtX3N0dWJJbmZvLT5zbG93UGF0
aFN0YXJ0TG9jYXRpb24gPSBzbG93UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihtX3Nsb3dQYXRoQmVnaW4pOwogfQogCit2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpn
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZv
LCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworICAg
IFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKyAgICBqaXQu
bG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgaml0LmZhckp1bXAoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgbV9kb25lID0gaml0Lmxh
YmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJVEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVS
ZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0xMTAsNyArMTE4LDcgQEAgSklUR2V0
QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRvcgogICAgIENvZGVCbG9jayogY29kZUJs
b2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdz
IHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKICAgICA6
IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRUeXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0
ZSwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycywgYmFzZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQot
ICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJsb2NrLT52
bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCisgICAgLCBtX2lzTGVuZ3RoQWNjZXNz
KGNvZGVCbG9jayAmJiBwcm9wZXJ0eU5hbWUudWlkKCkgPT0gY29kZUJsb2NrLT52bSgpLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZS5wYXls
b2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQpAQCAtMTIwLDYgKzEyOCwzNyBAQCB2b2lk
IEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhCiAgICAgZ2VuZXJhdGVGYXN0Q29t
bW9uKGppdCwgbV9pc0xlbmd0aEFjY2VzcyA/IElubGluZUFjY2Vzczo6c2l6ZUZvckxlbmd0aEFj
Y2VzcygpIDogSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKKwor
I2lmIFVTRShKU1ZBTFVFNjQpCitzdGF0aWMgdm9pZCBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nl
c3MoSklUJiBqaXQsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBzY3Jh
dGNoLCBHUFJSZWcgcmVzdWx0KQoreworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsK
KworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGF1dG8gc2tpcElubGluZUFjY2VzcyA9
IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9m
ZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWRQcm9wZXJ0eShiYXNlLCBzY3JhdGNoLCBK
U1ZhbHVlUmVncyB7IHJlc3VsdCB9KTsKKyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsK
KworICAgIHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsKKyAgICBqaXQuZmFySnVtcChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmso
JmppdCk7Cit9CisKK3ZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZv
R1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUp
KTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQo
c3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3Mo
aml0LCBzdHViSW5mb0dQUiwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVz
dWx0KTsKKworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorI2VuZGlmCisKIEpJVEdldEJ5
SWRXaXRoVGhpc0dlbmVyYXRvcjo6SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yKAogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMsCiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVS
ZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0x
MzgsNiArMTc3LDIwIEBAIHZvaWQgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpnZW5lcmEK
ICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0
eUFjY2VzcygpKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCit2b2lkIEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1
bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQu
bGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsK
KyAgICBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3Moaml0LCBzdHViSW5mb0dQUiwgQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlz
UmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVz
dWx0KTsKKworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorI2VuZGlmCisKIEpJVFB1dEJ5
SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRl
bnRpZmllciwKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVn
IHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgCkBAIC0xNDksNiArMjAyLDM2IEBAIEpJVFB1
dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3IKICAgICBtX3N0dWJJbmZvLT51c2Vk
UmVnaXN0ZXJzLmNsZWFyKHNjcmF0Y2gpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKK3ZvaWQg
SklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYg
aml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQg
PSBqaXQubGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZv
R1BSKTsKKworICAgIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNl
OworICAgIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNo
OworICAgIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRj
aDI7CisgICAgR1BSUmVnIHZhbHVlID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsK
KworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2gpOworICAgIGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUo
KSkpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7Cisg
ICAgaml0LnN0b3JlUHJvcGVydHkoSlNWYWx1ZVJlZ3MgeyB2YWx1ZSB9LCBiYXNlLCBzY3JhdGNo
LCBzY3JhdGNoMik7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBza2lw
SW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkp
LCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hlZC5saW5rKCZqaXQpOworICAg
IG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorI2VuZGlmCisKIHZvaWQgSklUUHV0QnlJZEdlbmVy
YXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYgaml0KQogewogICAgIGdlbmVy
YXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5UmVwbGFjZSgp
KTsKQEAgLTIwMCw3ICsyODMsNyBAQCB2b2lkIEpJVERlbEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0
ZUZhc3RQCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAg
ICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQ
UiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQ
dHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHVi
SW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigp
KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRo
SnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBA
IC0yMzYsNyArMzE5LDcgQEAgdm9pZCBKSVREZWxCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQ
YQogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0
LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFn
KTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8t
Pm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJ
VFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAg
PSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtMjcw
LDcgKzM1Myw3IEBAIHZvaWQgSklUSW5CeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGEKICAg
ICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2pp
dFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0ciht
X3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxs
KENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Cisg
ICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHVi
Um91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0
LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTMwMCw2ICsz
ODMsMzQgQEAgdm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdAogICAgIGdl
bmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNz
KCkpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKK3ZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpn
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZv
LCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNl
RGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAg
aml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworCisgICAgR1BSUmVnIGJh
c2UgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgcmVzdWx0ID0g
QmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5s
aW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmJveEJvb2xlYW4o
dHJ1ZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5q
dW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmZhckp1
bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hl
ZC5saW5rKCZqaXQpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorI2VuZGlmCisKIEpJ
VEluc3RhbmNlT2ZHZW5lcmF0b3I6OkpJVEluc3RhbmNlT2ZHZW5lcmF0b3IoCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMsIEdQUlJlZyByZXN1bHQsIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHByb3RvdHlwZSwg
R1BSUmVnIHN0dWJJbmZvR1BSLApAQCAtMzMyLDcgKzQ0Myw3IEBAIHZvaWQgSklUSW5zdGFuY2VP
ZkdlbmVyYXRvcjo6Z2VuZXJhdGVGYXMKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHVi
SW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJ
bmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkp
LCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVy
czo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUg
PSBqaXQubGFiZWwoKTsKQEAgLTM2OCw3ICs0NzksNyBAQCB2b2lkIEpJVEdldEJ5VmFsR2VuZXJh
dG9yOjpnZW5lcmF0ZUZhc3RQCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9H
UFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+
bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklU
U3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAg
ICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0
LmxhYmVsKCk7CkBAIC00MDUsNyArNTE2LDcgQEAgdm9pZCBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6
Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsK
LSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNv
ZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9z
bG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJl
bCgpOwpAQCAtNDQwLDcgKzU1MSw3IEBAIHZvaWQgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJh
dG9yOjpnZW4KICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAg
ICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGlu
ZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRy
KCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1Bh
dGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVk
ZSAiSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHV0S2luZC5oIgpAQCAtMzgsMTEg
KzM5LDEyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIENhY2hlYWJsZUlkZW50aWZpZXI7CiBj
bGFzcyBDYWxsU2l0ZUluZGV4OwogY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklUOwogY2xhc3Mg
U3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKIAog
ZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90OwogZW51bSBjbGFzcyBKSVRUeXBlIDogdWlu
dDhfdDsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1Qx
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVn
VDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9
OworCitzdHJ1Y3QgQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgLy8gV2UgcmVseSBv
biB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9jayBhbmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVy
cyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0
eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljX2Fz
c2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKyAgICBz
dGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6
cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpy
ZWdUNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEdQUkluZm86OnJl
Z1Q1OworfTsKKworc3RydWN0IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjM7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpub25BcmdH
UFIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9u
QXJnR1BSMTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnMgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3Nl
cnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307
CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBk
b250Q2xvYmJlclJlZ2lzdGVyID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB0aGlzVmFs
dWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
byA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gg
PSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUluQnlJZFJlZ2lzdGVycyB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2Ny
YXRjaDsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BS
SW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZv
OjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9maWxlID0gR1BSSW5mbzo6
cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpy
ZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIGJyYW5kID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fz
c2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRp
Y19hc3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9
OworI2VuZGlmCisKIGNsYXNzIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKIHByb3RlY3RlZDoK
ICAgICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigpIHsgfQpAQCAtNjIsMTIgKzE3MiwxOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZSgKICAgICAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGhM
aW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIsCiAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCk7Ci0gICAgCisKKyAgICB2
b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5m
b0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogbV91bmxpbmtlZFN0dWJJbmZvIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkgfTsKKwogcHJvdGVjdGVkOgotICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7
CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIG1fc3R1Yklu
Zm87CiAKK3B1YmxpYzoKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9kb25lOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3Nsb3dQYXRoQmVnaW47CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7
CkBAIC05OCw3ICsyMTQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwog
ICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9z
dGFydDsKK3B1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX3Nsb3dQYXRoSnVtcDsK
IH07CiAKQEAgLTExMSw2ICsyMjcsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGUpOwog
ICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZv
aWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZv
Q29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBtX2lz
TGVuZ3RoQWNjZXNzOwpAQCAtMTI0LDYgKzI0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgQ29kZUJs
b2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgICAgIEpTVmFsdWVS
ZWdzIHZhbHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVn
IHN0dWJJbmZvR1BSKTsKIAorICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAg
ICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiB9OwogCkBAIC0xMzIs
MTAgKzI1MCwxMSBAQCBwdWJsaWM6CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigpID0gZGVmYXVs
dDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0gICAgICAgIENvZGVCbG9jayosIEpJVFR5
cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyBiYXNlLAotICAgICAgICBK
U1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNN
QU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2lu
LCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVh
YmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5k
KTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAg
ICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHVi
SW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogICAgIAogICAgIFZfSklUT3BlcmF0
aW9uX0dTc2lKSkMgc2xvd1BhdGhGdW5jdGlvbigpOwogCkBAIC0xNjMsMTEgKzI4Miw5IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1w
cml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVl
OwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0xOTEsOCArMzA4LDYg
QEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7
CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yMTYs
OCArMzMxLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9Owog
CkBAIC0yNDEsOCArMzU0LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRo
KE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1
bXA7CiB9OwogCkBAIC0yNTUsNiArMzY2LDcgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVlUmVn
cyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIAogICAgIHZv
aWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQ
UlJlZyBzdHViSW5mb0dQUik7CiB9OwogCiBjbGFzcyBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGZp
bmFsIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJhdG9yIHsKQEAgLTI3Nyw4ICszODksNiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1
ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyKTsKIAotcHJpdmF0ZToKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hh
YmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMwMiwxMSArNDEyLDkgQEAgcHVibGlj
OgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1w
cml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3Jlc3Vs
dDsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzMwLDggKzQzOCw2
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewot
ICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
RG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0
YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25z
dGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKK30KKworQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAg
ICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3Jj
KSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpIHsKKyAgICAg
ICAgLy8gQWxsIGxpbmsgdGltZSBjb25zdGFudHMgYXJlIGNlbGxzLgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzQ2VsbCgp
OwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7Ci0gICAg
cmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgIFJFTEVBU0VfQVNTRVJU
KG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNy
YykgIT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKKyAgICBy
ZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAogQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQg
ZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQpAQCAtMTU2LDM2ICsxODEsMzYgQEAgQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeAogI2VuZGlmCiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBK
SVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2Zp
bGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29k
ZSYgYnl0ZWNvZGUsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24s
IFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5W
YWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwog
ICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwogI2Vu
ZGlmCiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpT
VmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgZnVuY3Rp
b24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1Zh
bHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBBZGRyZXNzIGZ1
bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVl
R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3Mo
cmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9yZShkc3QsIHJl
dHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCiB9CiAKIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2Nv
ZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpCiAg
ICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjA1LDcgKzIzMCw3IEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNlcygKIGlubGluZSB2b2lkIEpJVDo6YWR2
YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRl
Y29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3Qv
Y29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwot
ICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5o
YXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRl
Y29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byByZXN1bHQgPSBtX2NoZWNr
cG9pbnRMYWJlbHMuYWRkKG1fYnl0ZWNvZGVJbmRleCwgbGFiZWwoKSk7CkBAIC0yMTUsNyArMjQw
LDcgQEAgaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludAogaW5saW5lIHZv
aWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCBqdW1wKQogewogICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQg
bV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQo
bV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXND
aGVja3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwog
CiAgICAgYXV0byBpdGVyID0gbV9jaGVja3BvaW50TGFiZWxzLmZpbmQobV9ieXRlY29kZUluZGV4
KTsKQEAgLTI5MywyOSArMzE4LDI5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRDb3Vu
dChBYnN0cmEKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFy
KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CisgICAgaWYgKCFzcmMuaXND
b25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJp
bmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQog
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7
CiAgICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmcoKSk7CiAKLSAgICAvLyBXZSdyZSBpbiBh
IHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRv
IGEgZGlyZWN0Ci0gICAgLy8gc3RvcmUuCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdG9yZTY0
KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKLSNlbHNlCiAgICAgRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0cyk7CiAgICAgc3RvcmUzMih2YWx1ZS5w
YXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMucGF5bG9hZCk7CiAgICAgc3RvcmUzMih2
YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy50YWcpOwotI2VuZGlmCiB9CisjZW5k
aWYKIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6
OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+
Ojp2YWx1ZSwgdm9pZD4gSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29k
ZShPcCBieXRlY29kZSkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogI2Vsc2UKICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKQEAgLTMyMyw0MSArMzQ4LDM3IEBAIGlubGluZSBz
dGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0
VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pIHsgfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWVSZWdzIHZhbHVlKQorI2lmIFVTRShKU1ZBTFVF
NjQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZh
bHVlKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1ZSk7Ci19CiAKLSNpZiBVU0UoSlNWQUxV
RTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmls
ZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBwdHJk
aWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1l
dGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPiht
X2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJz
dEJ1Y2tldCgpOworICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIEFkZHJlc3Moc19tZXRhZGF0YUdQ
Uiwgb2Zmc2V0KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVn
IHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgR1BSUmVn
IHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1Zh
bHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNlbmRpZgogCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5
UHJvZmlsZSogYXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHB0cmRpZmZfdCBvZmZzZXRPZkFy
cmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCiB7
CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBsb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgYXJyYXlQcm9maWxlLT5h
ZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9NZXRhZGF0
YShzY3JhdGNoR1BSLCBieXRlY29kZSwgb2Zmc2V0T2ZBcnJheVByb2ZpbGUpOwogICAgIH0KIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0
ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3Jh
dGNoR1BSKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjpl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBS
ZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsKLSAgICBpZiAoc2hv
dWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRyZXNzKGFycmF5UHJvZmlsZUdQUiwgQXJy
YXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSkpOwotICAgIH0KKyAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2Vl
blN0cnVjdHVyZUlEKCksIGNlbGxHUFIsIHNjcmF0Y2hHUFIpOwogfQogCiBBTFdBWVNfSU5MSU5F
IGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykK
QEAgLTM4MCw3ICs0MDEsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lz
dGVyCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcs
IEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewotICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2st
PmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBp
bkNvbnN0YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVn
KTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZh
bHVlKTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZh
bHVlKTsKQEAgLTQ5Niw3ICs1MTcsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0
dWFsUmVnaXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNl
bGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVn
LmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAg
IGVsc2UKQEAgLTUwNiw3ICs1MjcsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogewotICAgIGlmICghbV9jb2Rl
QmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsK
ICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MTQsMTEgKzUzNSw2IEBAIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAg
cmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQz
MigpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVy
JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMSkpIHsKQEAgLTU0NCwxMSArNTYwLDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmUKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KIAogICAgIGlmIChzcmMuaXNDb25zdGFu
dCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
c3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7Ci0gICAgICAgIGVsc2UK
KyAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5r
ZWRDb2RlQmxvY2soc3JjKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBtb3ZlKEltbTY0KEpT
VmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTU2NiwxMSArNTgyLDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZp
cnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0Mik7CiB9CiAKLUFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsK
ICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC01OTUsNyArNjA2LDcgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZp
cnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxs
KHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJlZykpCiAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02MzcsMzAgKzY0OCw3IEBAIEFMV0FZU19J
TkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIHsKICAgICBpZiAodGFyZ2V0KQogICAg
ICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+b3V0T2ZMaW5lSnVt
cE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgR2V0UHV0SW5mbyBKSVQ6
OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQotewotICAgIHVuc2lnbmVk
IGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7IC8vIEhhc2hNYXAgZG9lc24ndCBsaWtl
IDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRHZXRQdXRJbmZvcy5maW5k
KGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkR2V0UHV0SW5mb3MuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgR2V0UHV0SW5m
byBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fZ2V0UHV0SW5m
bzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChrZXksIGdldFB1dEluZm8ub3BlcmFuZCgp
KTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5
T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJvZmlsZSBKSVQ6OmNvcGllZEFyaXRoUHJv
ZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1aW50NjRfdCBrZXkgPSAoc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkgKyAxKSA8PCAzMiB8IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQpOwotICAgIGF1dG8gaXRlcmF0b3IgPSBt
X2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2Nv
cGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7
Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBtX2NvcGllZEFyaXRoUHJvZmlsZXMu
YWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1cm4gYXJpdGhQcm9maWxlOworICAgIHJl
dHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9u
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02ODEsNiArNjY5LDYwIEBAIEFMV0FZ
U19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxPcFAKICAgICByZXR1cm4gRUNNQU1vZGU6
OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
c19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1l
dGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDMyRnJvbU1l
dGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJl
c3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29k
ZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZz
ZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDgoQWRkcmVzcyhz
X21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0
YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlIHZhbHVlLCBjb25zdCBCeXRlY29kZSYg
Ynl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmU4KHZhbHVlLCBBZGRyZXNzKHNf
bWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZTMyVG9NZXRhZGF0YShHUFJS
ZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAg
ICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxv
Y2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgc19tZXRhZGF0YUdQUiwgcmVzdWx0KTsKK30KKworQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvbnN0YW50KEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgY29uc3RhbnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
c19jb25zdGFudHNHUFIsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oY29uc3RhbnRJbmRleCkgKiA4
KSwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZEdsb2JhbE9iamVj
dChHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRDb25zdGFudChtX2dsb2JhbE9iamVjdENvbnN0
YW50LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29kZUJsb2Nr
Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBHUFJSZWcgcmVzdWx0KQoreworICAg
IFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CisgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlc3VsdCk7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHJlc3VsdCwgQ29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigp
KSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBjb25zdGFudC50b0NvbnN0
YW50SW5kZXgoKSAqIHNpemVvZih2b2lkKikpLCByZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9u
Kgogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZEJsb2NrKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1f
b2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRp
b25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVD
YXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmly
dHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKQEAgLTExMCw3ICsxMTAsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Q
cm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CkBAIC0xMjcsNyArMTI3LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIGVtaXRMb2FkUGF5
bG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3
ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgogICAgIEp1bXAgaGFzSW5z
dGFuY2VWYWx1ZU5vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKGhhc0luc3RhbmNlVmFsdWUp
OwotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlv
blByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21oYXNJ
bnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0ciht
X3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VT
eW1ib2xGdW5jdGlvbigpKSk7CiAKICAgICAvLyBXZSBrbm93IHRoYXQgY29uc3RydWN0b3IgaXMg
YW4gb2JqZWN0IGZyb20gdGhlIHdheSBieXRlY29kZSBpcyBlbWl0dGVkIGZvciBpbnN0YW5jZW9m
IGV4cHJlc3Npb25zLgogICAgIGVtaXRMb2FkUGF5bG9hZChjb25zdHJ1Y3RvciwgcmVnVDApOwpA
QCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5z
dHIKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG8pOwogICAgIAogICAgIEpJ
VEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAogICAgICAgICByZWdUMCwgLy8gcmVzdWx0CiAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQpA
QCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0
IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBlbWl0TG9hZFRhZyh2
YWx1ZSwgcmVnVDApOwogICAgIGVtaXRMb2FkVGFnKHByb3RvLCByZWdUMyk7Ci0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIGRzdCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVn
VDAsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QxKSk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIGRzdCwgbV9wcm9maWxl
ZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1Qw
LCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMSkpOwogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTIxMyw3ICsyMTMsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgZW1pdExvYWQodmFs
dWUsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdU
Mik7CiAgICAgZW1pdExvYWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDQsIHJlZ1QzKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgcmVnVDIsIEpTVmFsdWVSZWdz
KHJlZ1Q0LCByZWdUMykpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1
c3RvbSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMykpOwogICAgIGVtaXRTdG9y
ZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAgICAgCkBAIC0yNDgsNyArMjQ4LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIAogICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDEpOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAK
QEAgLTM3OCw3ICszNzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShj
b25zCiAgICAgVmlydHVhbFJlZ2lzdGVyIG5hbWUgPSBieXRlY29kZS5tX25hbWU7CiAgICAgZW1p
dExvYWRQYXlsb2FkKGZ1bmMsIHJlZ1QxKTsKICAgICBlbWl0TG9hZChuYW1lLCByZWdUMywgcmVn
VDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgbV9wcm9maWxlZEJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTQwOCw3ICs0MDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29u
c3QgSW5zdHJ1Y3RpCiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgR1BSUmVnIHNj
cmF0Y2gyID0gcmVnVDM7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQyMiw3
ICs0MjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAgICAg
SlNWYWx1ZVJlZ3MgdmFsdWUocmVnVDEsIHJlZ1QwKTsKICAgICBHUFJSZWcgc2NyYXRjaDEgPSBy
ZWdUMjsKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKLSAgICBhZGRKdW1wKGJyYW5jaElm
VHJ1dGh5KHZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIHZhbHVl
LCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzcsNyArNDM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
amVxX251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwog
CkBAIC00NjMsNyArNDYzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IElu
c3RydQogCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSksIHRhcmdldCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBhZGRKdW1wKGJy
YW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKIApAQCAtNTA0LDcgKzUwNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVk
X29yX251bGwoY28KIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNv
ZGUubV92YWx1ZTsKICAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVy
YW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwogICAgIEFTU0VSVChzcGVjaWFsUG9pbnRl
ci5pc0NlbGwoKSk7CkBAIC01NTIsMTMgKzU1MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
ZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3Ry
aW5nKHJlZ1QyKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdU
MCwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBt
X3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwogICAgIHN0b3Jl
UmVzdWx0LmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVy
aWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmlj
Q2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIHN0b3JlUmVzdWx0
LmxpbmsodGhpcyk7CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZhbHVlR1BSKTsKQEAg
LTU5MSwxNCArNTkxLDE0IEBAIHZvaWQgSklUOjpjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxT
bG8KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAog
ICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmluZ0VxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpFcSA/IE5vblplcm8gOiBaZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwogICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CiAK
ICAgICAvLyBHZW5lcmljIGNhc2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNl
KGl0ZXIpKTsgLy8gZG91YmxlcwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fcHJvZmlsZWRCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0eXBlID09
IENvbXBpbGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpLCBq
dW1wVGFyZ2V0KTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKQEAgLTY0MywxMyArNjQzLDEzIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBnZW5lcmljQ2Fz
ZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNl
LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJl
Z1QwLCByZWdUMik7CiAgICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBH
ZW5lcmljIGNhc2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsg
Ly8gZG91YmxlcwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MikpOwogCiAgICAgc3RvcmVSZXN1bHQubGluayh0aGlzKTsKICAgICB4b3IzMihUcnVzdGVkSW1t
MzIoMHgxKSwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtNzYyLDcgKzc2Miw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAt
NzcyLDcgKzc3Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3Rl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTc5MSw3ICs3OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21w
YXJlMzIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwogICAgIEp1bXAgd2FzTm90SW1tZWRp
YXRlID0ganVtcCgpOwpAQCAtODIzLDcgKzgyMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9u
dWxsKGNvbnN0IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihO
b3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUg
PSBqdW1wKCk7CkBAIC04NDYsNyArODQ2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29u
c3QgSW5zdHJ1Y3RpbwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7CiAgICAg
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRy
eUZyYW1lKTsKICAgICBlbWl0TG9hZChieXRlY29kZS5tX3ZhbHVlLCByZWdUMSwgcmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX3Byb2ZpbGVkQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBqdW1w
VG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogfQogCkBAIC04NjIsNyArODYyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcp
KSk7CiAgICAgaXNJbnQzMi5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZEJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAgaWYgKHNyYyAhPSBk
c3QpCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CkBAIC04ODQsNyAr
ODg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGFyZ3VtZW50VmFsdWVSZWdzLCByZWdUMikpOwog
ICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
QmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkK
ICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTkxNSw3ICs5MTUs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGlmIChzcmMgIT0gZHN0KQogICAgICAg
ICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQpAQCAtOTMxLDcgKzkzMSwxOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMs
IFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworCisgICAgLy8gV2hlbiB0aGUgTExJbnQgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlcmUg
aXMgYSBjaGFuY2UgdGhhdCB3ZSd2ZSBhbHJlYWR5IHRpZXJlZCB1cAorICAgIC8vIHRoZSBzYW1l
IENvZGVCbG9jayB0byBiYXNlbGluZSwgYW5kIHdlJ2xsIGNhdGNoIHRoZSBleGNlcHRpb24gaW4g
dGhlIGJhc2VsaW5lIEpJVCAoYmVjYXVzZQorICAgIC8vIHdlIHVwZGF0ZWQgdGhlIGV4Y2VwdGlv
biBoYW5kbGVycyB0byBwb2ludCBoZXJlKS4gQmVjYXVzZSB0aGUgTExJbnQgdXNlcyBhIGRpZmZl
cmVudCB2YWx1ZQorICAgIC8vIGluc2lkZSBzX2NvbnN0YW50c0dQUiwgdGhlIGNhbGxlZSBzYXZl
cyB3ZSByZXN0b3JlIGFib3ZlIG1heSBub3QgY29udGFpbiB0aGUgY29ycmVjdCByZWdpc3Rlci4K
KyAgICAvLyBTbyB3ZSByZXBsZW5pc2ggaXQgaGVyZS4KKyAgICB7CisgICAgICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJlZ1Qw
KTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9m
ZnNldE9mSklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7CisgICAgfQogCiAgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4
Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlv
biA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC05NTQsNyArOTY1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFy
Z3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAg
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5t
X2J1ZmZlcjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAg
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRD
YXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC05OTYsOCArMTAwNyw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVh
dGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2gg
c3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV9wcm9maWxlZEJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hK
dW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29y
ZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29y
ZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRU
YWJsZSk7CiAKQEAgLTEwMjMsMTMgKzEwMzQsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2NoYXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29k
ZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVz
dGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29u
c3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2ZpbGVkQmxv
Y2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAg
bV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRl
eCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRU
YWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAogICAgIGVtaXRMb2FkKHNjcnV0
aW5lZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENo
YXJXaXRoVW5rbm93bktleVR5cGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBt
X3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKQEAgLTEwNDEsMTMgKzEwNTIsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1
dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxl
IGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0g
ICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3Ry
aW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX3Byb2ZpbGVkQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQo
U3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwg
U3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1
bmxpbmtlZFRhYmxlKTsKIAogICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlw
ZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCB0YWJsZUluZGV4KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dp
dGhVbmtub3duS2V5VHlwZSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgTm9QdHJUYWcpOwogfQogCkBAIC0xMDY4LDcgKzEwNzksNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggSklUIGNvZGUg
ZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdp
c3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xv
bmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUu
Ci0gICAgZm9yIChpbnQgaSA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycygpOyBpIDwgbV9jb2RlQmxvY2stPm51bVZhcnMoKTsgKytpKQor
ICAgIGZvciAoaW50IGkgPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VB
c1ZpcnR1YWxSZWdpc3RlcnMoKTsgaSA8IG1fcHJvZmlsZWRCbG9jay0+bnVtVmFycygpOyArK2kp
CiAgICAgICAgIGVtaXRTdG9yZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwganNVbmRlZmlu
ZWQoKSk7CiAKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudGVyKTsKQEAgLTEwODcsNyArMTA5OCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX2Ny
ZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CiAgICAgV3JpdGVC
YXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENh
bGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwpAQCAtMTEyMiw3ICsxMTMz
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsK
ICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRT
dHJ1Y3R1cmVJRDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyID0gYnl0ZWNvZGUu
bV9zcmNEc3Q7CiAKQEAgLTExNDUsNyArMTE1Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNr
X3Rkeihjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiog
Y2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0
ZXI7CiAKQEAgLTEyMzksNyArMTI1MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWkKICAgICBlbWl0TG9hZFRhZyhieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDEp
OwogICAgIEpTVmFsdWVSZWdzIHRoaXNSZWdzKHJlZ1QxLCByZWdUMik7CiAgICAgZW1pdExvYWRQ
YXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFp
bFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCByZWdUMywgbV9jb2RlQmxvY2ssIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgcmVnVDMsIG1fcHJvZmlsZWRCbG9jaywg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9u
IDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDExICs1NCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29u
c3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3Jj
OwogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVt
YmVyKCkpCi0gICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
dmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobV9w
cm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMp
KSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0
KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtODcsMzcgKzkwLDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJ
bnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1l
dGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90
IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJl
LT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9y
Rm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlv
blNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lz
dGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSBy
ZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBSZWdpc3RlcklE
IHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3Rh
bnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1
dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxpemVJ
bmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAg
ICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2Vz
KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Ci0gICAg
fQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0
YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0ckZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVj
dEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZT
dHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAg
ICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRv
clJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Cisg
ICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShy
ZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBSZWdp
c3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9v
YmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOworICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCks
IHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsK
IH0KIApAQCAtMTMxLDcgKzEzMiw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNf
aW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJl
Z1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJ
bnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFu
Y2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1
ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZT
RVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5j
dGlvbikpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1Qw
KTsKIApAQCAtMTU0LDMwICsxNTYsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihj
b25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAg
ICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0
aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBz
aW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNl
IGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFs
dWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm90b0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6cHJvdG87CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3RvLCBwcm90b0dQUik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90
byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkg
dGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSwgcHJvdG8pOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1
ZUdQUiwgdmFsdWUpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwg
cHJvdG8pOwogCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAv
LyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDUsCi0gICAgICAg
IHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgcmVzdWx0R1BSLAorICAgICAgICB2YWx1ZUdQUiwK
KyAgICAgICAgcHJvdG9HUFIsCisgICAgICAgIHN0dWJJbmZvR1BSLAorICAgICAgICBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxLCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnNjcmF0Y2gyKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbnN0
YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKKwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKIH0KIApAQCAtMTkyLDE0ICsyMDIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2YoY29uc3QgSQogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCByZWdUMiwgcmVnVDEpOwotICAgIH0gZWxzZQotICAg
ICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJl
c3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6c3R1YkluZm8gPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWUgPT0gYXJndW1lbnRHUFIyKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG8gPT0gYXJn
dW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGlt
aXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0yNDAsNyArMjQ5LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
MSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM4
Myw5ICszOTIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiB9
CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5l
cmF0b3IoVk0mKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
ICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQyMCw2IEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
cHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00
MzQsOSArNDQyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAK
IHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNl
dEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9m
dW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4
ICs0NzQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gx
ID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJv
b2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1w
KGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwg
SlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFy
Z2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVl
SXNGYWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVt
cChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzQ5MSw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUg
PSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTks
NyArNTMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAg
IC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
ICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFs
LCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDAp
LCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBq
dW1wKCk7CiAKQEAgLTU0Myw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwo
Y29uc3QgSW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAo
YnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwog
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
MCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTU4
MiwxNSArNTkzLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28K
IHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwot
ICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUu
bV9zcGVjaWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAg
c3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICBsb2Fk
Q29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAg
IENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNvZGUsIE9wSm5l
cVB0cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOwogICAgIGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC02MjUsOCArNjM0LDEwIEBA
IHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRy
dXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFs
T2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxz
ZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTY0MCw3ICs2NTEsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNjk1LDcgKzcwNiw4IEBA
IHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAg
ICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTcxMSw3ICs3MjMsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6b3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB0aHJvd25WYWx1
ZUdQUiA9IGFyZ3VtZW50R1BSMTsKQEAgLTcyMCw3ICs3MzIsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JF
R0lTVEVSUyA+IDAKICAgICBqaXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgYXJndW1lbnRH
UFIwKTsKLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXJJbXBsKGFyZ3VtZW50R1BSMCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKGFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwpAQCAtOTA4LDcgKzkyMCw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogfQogCkBAIC05MTgsNyArOTMxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0
ZXEoY29uc3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVn
VDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MzEsNyArOTQ1LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQog
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk2
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhp
cyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
Z1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTc4LDcgKzk5Miw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3RvX29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7
CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk5Myw3ICsxMDA3LDE4IEBAIHZvaWQgSklUOjplbWl0X29w
X2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNh
bGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZv
ckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBX
aGVuIHRoZSBMTEludCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0
IHdlJ3ZlIGFscmVhZHkgdGllcmVkIHVwCisgICAgLy8gdGhlIHNhbWUgQ29kZUJsb2NrIHRvIGJh
c2VsaW5lLCBhbmQgd2UnbGwgY2F0Y2ggdGhlIGV4Y2VwdGlvbiBpbiB0aGUgYmFzZWxpbmUgSklU
IChiZWNhdXNlCisgICAgLy8gd2UgdXBkYXRlZCB0aGUgZXhjZXB0aW9uIGhhbmRsZXJzIHRvIHBv
aW50IGhlcmUpLiBCZWNhdXNlIHRoZSBMTEludCB1c2VzIGEgZGlmZmVyZW50IHZhbHVlCisgICAg
Ly8gaW5zaWRlIHNfY29uc3RhbnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdlIHJlc3RvcmUgYWJv
dmUgbWF5IG5vdCBjb250YWluIHRoZSBjb3JyZWN0IHJlZ2lzdGVyLgorICAgIC8vIFNvIHdlIHJl
cGxlbmlzaCBpdCBoZXJlLgorICAgIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFu
dFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKKyAgICB9CiAKICAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFi
bGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzYsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUg
cHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwotICAg
IGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJv
ZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9m
aWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JF
bnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25I
YW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVm
ZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2go
WyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAgICAg
ICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdzKTsK
LSAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBAIC0x
MDUzLDggKzEwNjYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3Ry
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwog
CiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNr
IHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5h
cHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9m
ZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVD
VElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5NCwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNj
cnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFi
bGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4K
LSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxl
SW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFy
YWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4LCB1
bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21p
bik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCkBA
IC0xMDk5LDIwICsxMTEzLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29u
c3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGlu
ZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNv
bnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
U3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRl
eCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykp
OwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJU
YWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVl
c3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVi
dWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9k
ZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0x
MTMzLDcgKzExNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0
CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdU
MCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAg
LTExNDgsNyArMTE2NCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1
Y3QKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25l
cV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTY2LDcg
KzExODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAg
ICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwg
cmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTEx
ODgsMTIgKzEyMDMsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXpl
IG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRv
IGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBh
bmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9j
ay0+bnVtVmFycygpOworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51
bVZhcnMoKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9yIChzaXplX3Qg
aiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpOyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2Nr
KTsKKyAgICAKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAgZW1pdEVudGVy
T3B0aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCkBAIC0xMjEyLDcgKzEyMjksNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50
ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0
ZXJzOjplYnApOwpAQCAtMTMxMCwyMyArMTMyNywxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
c2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVj
dHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlw
ZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlE
LCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRvVGhpczo6TWV0
YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxK
U0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBS
ZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcg
PSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAtMTM0Miw3ICsx
MzU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxv
YWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90
eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBhbGxv
Y2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJl
RGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNoZWRGdW5jdGlv
biwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wQ3JlYXRlVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkQ2FsbGVlKCksIGNhY2hlZEZ1
bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIo
RXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRp
cGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFs
LCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxlQ2Fs
bGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzg1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzk2LDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4o
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBy
ZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDAp
OwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFs
dWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0
dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDA5LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEp
OwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQyMCw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1Qw
LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzNSwxMSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNv
bnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
aGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlciho
YXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0
YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25z
dHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEds
b2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIz
KTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZh
bHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiB9CkBAIC0xNDMwLDcgKzE0NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVh
cmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50
c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV91
bmxpbmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1
cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0
aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCByZWdUMCk7CiAg
ICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCByZWdUMCwgVHJ1
c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkp
OwpAQCAtMTQ0MCw3ICsxNDU4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0
IEluc3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRpZgotICAgICAg
ICBtb3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRSZWdzKTsKKyAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsxNDcxLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAgLy8gRW1pdCB0
aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsK
KyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8sIFRy
dXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwK
LSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhl
Y3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAtMTUwOSw3ICsx
NTI4LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1lbnRH
UFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTE1MjIsNyArMTU0Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9j
aGVja190cmFwcyhjb25zdCAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9jaGVja190cmFwc19oYW5kbGVy
R2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7
CkBAIC0xNTY0LDM0ICsxNTg0LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29u
c3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
cmVnZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBhcmd1bWVudEdQUjA7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29kZUJsb2NrLT5n
ZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVl
R1BSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmND
b21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKdW1w
IGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3Bl
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBh
cmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29w
ZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVu
dEdQUjEpOwogI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29k
ZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8g
Y29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5j
dGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRl
Y29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3Vt
ZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJh
dG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNf
ZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBk
c3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3lu
Y19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5
bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjIx
LDIzICsxNjQzLDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7
CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7Cisg
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5k
aWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVu
Y3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByLCBi
aXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5j
dGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwog
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlE
ID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5
bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAg
LTE2NjQsMjkgKzE2ODcsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRv
cl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2Owog
ICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
dmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2Zp
bGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAg
ICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIyKTsKKyAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXpl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJh
eUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFy
cmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2Rl
LCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblBy
b2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAg
Jm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywgcmVnVDIsIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTQsOCArMTcxOCwx
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAKIHZvaWQgSklU
OjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogeworICAgIG1faXNTaGFyZWFibGUgPSBmYWxzZTsKKwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBUeXBlTG9j
YXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVh
bFJlZ2lzdGVyOwogCkBAIC0xNzc3LDIwICsxODAzLDI1IEBAIHZvaWQgSklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVn
VDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlz
IGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0g
cmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0
IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJl
Z1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVn
LCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lz
dGVyLgorICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAgICAgZW5zdXJl
U2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBz
Y3JhdGNoMlJlZyk7CisgICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV90aGlzVmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQ
YWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNr
ZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUMSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVF
NjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgbV9pc1NoYXJlYWJsZSA9IGZhbHNl
OworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxl
Q29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2Nh
dGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMpOwpAQCAtMTg2
MCw3ICsxODkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwog
ICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAogICAgIGRvbmUubGlu
ayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE5MTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRl
ICJBcnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGlu
ZXMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xv
d1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR09T
UkVudHJ5LmgiCkBAIC0yODU1LDcgKzI4NTYsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0ID0gbGlua2VkVGFibGUubV9j
dGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKQEAgLTI4ODAsNyArMjg4MSw3IEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
Y29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiBy
ZXN1bHQ7CiAgICAgaWYgKGtleS5pc0ludDMyKCkpCkBAIC0yOTAzLDcgKzI5MDQsNyBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7Ci0gICAgY29u
c3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwogCiAgICAgaWYgKGtleS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmluZ0ltcGwqIHZh
bHVlID0gYXNTdHJpbmcoa2V5KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7CkBAIC0yOTE5
LDcgKzI5MjAsNiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKLSNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25S
ZXNvbHZlU2NvcGVGb3JCYXNlbGluZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0cnVjdGlvbiogcGMpKQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKQEAgLTI5NzEsNyArMjk3MSw2IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25SZXNvbHYKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
b2x2ZWRTY29wZSk7CiB9Ci0jZW5kaWYKIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkdldEZyb21TY29wZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBJbnN0cnVjdGlvbiogcGMpKQogewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAs
OSArMjkwLDcgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRQcgogSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlU
eXBlLCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUga2V5LCBzaXplX3Qg
dGFibGVJbmRleCwgaW50MzJfdCBtaW4pKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKFZNKiwgRW5jb2RlZEpT
VmFsdWUga2V5LCBzaXplX3QgdGFibGVJbmRleCwgaW50MzJfdCBtaW4pKTsKIEpTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBj
aGFyKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUga2V5LCBzaXplX3QgdGFibGVJ
bmRleCkpOwotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25SZXNvbHZlU2NvcGVGb3JCYXNlbGluZSwgRW5jb2RlZEpTVmFsdWUs
IChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBDKSk7Ci0jZW5k
aWYKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBFbmNv
ZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2Rl
UEMpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0VG9TY29wZSwgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw3ICs4NywxMiBAQCBhdXRvIEpJVFBsYW46OnRpZXIoKSBjb25zdCAtPiBUaWVyCiAK
IEpJVENvbXBpbGF0aW9uS2V5IEpJVFBsYW46OmtleSgpCiB7Ci0gICAgcmV0dXJuIEpJVENvbXBp
bGF0aW9uS2V5KG1fY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksIG1fbW9kZSk7Cisg
ICAgSlNDZWxsKiBjb2RlQmxvY2s7CisgICAgaWYgKG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1v
ZGU6OkJhc2VsaW5lKQorICAgICAgICBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRD
b2RlQmxvY2soKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLT5i
YXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgcmV0dXJuIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVC
bG9jaywgbV9tb2RlKTsKIH0KIAogYm9vbCBKSVRQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdD
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTks
NyArNTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAKICAg
ICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0
ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5SWQsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJl
Z1QxLCBtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKIAogICAgIGVtaXRMb2FkUGF5bG9h
ZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDMpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwo
KSwgb3B0aW9ucywgcmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVy
QnlJZCwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmlsZWRC
bG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVn
VDEpOwogICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKICAgICBlbWl0TG9hZFBh
eWxvYWQoc2V0dGVyLCByZWdUNCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJTZXR0ZXIsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZXMsIHJlZ1QzLCByZWdUNCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIG1fcHJvZmlsZWRC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIo
cHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlcywgcmVnVDMsIHJlZ1Q0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBl
bWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoZ2V0
dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlWYWwsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV92YWwoY29ucwogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMik7CiAgICAgZW1p
dExvYWQocHJvcGVydHksIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWRQYXlsb2FkKHNldHRl
ciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNl
dHRlckJ5VmFsLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5z
dHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwpAQCAtMTMxLDggKzEzMSw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0TG9hZChiYXNlLCBiYXNl
UmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkpOwogICAgIEpJVERlbEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KSwKICAgICAgICAgYmFzZVJlZ3MsIHJl
c3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTE2Niw3
ICsxNjYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eVJlZ3MudGFnR1BS
KCkpOwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAg
IGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIHJlZ1Q0
KTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTIwMiw3ICsyMDIsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKICAgICBlbWl0TG9h
ZDIoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSwgcHJvcGVy
dHksIHByb3BlcnR5UmVncy50YWdHUFIoKSwgcHJvcGVydHlSZWdzLnBheWxvYWRHUFIoKSk7CiAK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIEpTVmFsdWVSZWdzKGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BS
KCkpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5wYXls
b2FkR1BSKCkpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7Cisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXpl
LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRH
UFIoKSksIEpTVmFsdWVSZWdzKHByb3BlcnR5UmVncy50YWdHUFIoKSwgcHJvcGVydHlSZWdzLnBh
eWxvYWRHUFIoKSksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCiAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgcmVzdWx0UmVncyk7CkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KTsKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNv
bnN0IEluCiAKICAgICBlbWl0TG9hZChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3Mu
cGF5bG9hZEdQUigpKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBU
cnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZVJlZ3MsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVz
dGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAogICAgIGJveEJvb2xlYW4ocmVnVDAs
IHJlc3VsdFJlZ3MpOwpAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfaWQoY29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0
IEluc3RyCiAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CiAg
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVn
VDQpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
QmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKICAgICB9IGVsc2UgewogICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1Q0KTsKQEAgLTI1Nyw3ICsyNTcsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgICAgIEpJ
VEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgICAgIEpTVmFsdWVSZWdzOjpw
YXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIHJlc3VsdFJlZ3Ms
IEludmFsaWRHUFJSZWcpOwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVy
dHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7
CkBAIC0yNjUsNyArMjY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cgogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBt
X2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwg
cmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAg
fQogfQpAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFs
KGNvbnN0IEkKICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7CiAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICAgICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhd
OwpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNv
bnN0IEkKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KIH0KQEAgLTMw
NSwxMyArMzA1LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QK
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsK
IAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAg
ICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpHZXRQcml2YXRlTmFtZSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJl
Zyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRS
ZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTMzMCw3ICsz
MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAKICAgICBh
dXRvIGJhc2VHUFIgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIGF1dG8gcHJvcGVy
dHlHUFIgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIApAQCAtMzQ4LDcgKzM0OCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgSW52YWxpZEdQUlJlZywgSW52
YWxpZEdQUlJlZyk7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVl
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTM3Nyw3ICszNzcsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgSlNWYWx1ZVJlZ3Mg
dmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCk7CiAKICAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQu
aXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUg
OiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHZhbHVlUmVncywgZ2VuLnN0
dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBiYXNlUmVncywgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MsIGdlbi5zdHViSW5m
bygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC0zOTUsNyArMzk1LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRB
Y2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBiYXNlUmVncywgYnJhbmRS
ZWdzLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTQxOCw3ICs0MTgsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiAgICAgSklUUHJpdmF0ZUJy
YW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0
ZUJyYW5kQWNjZXNzSW5kZXhdOwogICAgICsrbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleDsKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgYnJh
bmRSZWdzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZh
dGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7CiAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIApAQCAtNDM1LDcgKzQz
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY28KICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkpOwogCiAgICAg
SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQs
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9m
aWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJp
dmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAg
ICAgIGJhc2VSZWdzLCBicmFuZFJlZ3MsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpA
QCAtNDUyLDcgKzQ1Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2Jy
YW4KICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJy
YW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleF07CiAgICAgKyttX3ByaXZhdGVC
cmFuZEFjY2Vzc0luZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRp
bWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1f
cHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3Ms
IGJyYW5kUmVncyk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIH0KIApAQCAtNDY1LDcgKzQ2NSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC00NzgsNyArNDc4LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDYsIHJlZ1Q3KTsKIAogICAgIEpJVFB1dEJ5VmFs
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIHJlZ1Q2LCBJbnZh
bGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAg
ICBlY21hTW9kZSA9IEpJVDo6ZWNtYU1vZGUoYnl0ZWNvZGUpOwotICAgICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgICAgICBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKQEAgLTUyNCw3ICs1MjQs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgZW1pdExv
YWQyKGJhc2UsIHJlZ1QyLCByZWdUMSwgcHJvcGVydHksIHJlZ1QzLCByZWdUMCk7CiAgICAgZW1p
dExvYWQodmFsdWUsIHJlZ1Q1LCByZWdUNCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRC
eVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRp
bWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0
aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDEp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBn
ZW4uc3R1YkluZm8oKSwgcHJvZmlsZSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihp
c0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUp
IDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXpl
IDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9w
cm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGdl
bi5zdHViSW5mbygpLCBwcm9maWxlKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTU0MiwxMyArNTQyLDEzIEBAIHZvaWQgSklUOjpl
bWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywg
SW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIG1fcHJvZmls
ZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcs
IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMu
YXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgcmVzdWx0UmVncyk7CiAg
ICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2Fk
R1BSKCkpOwogfQogCkBAIC01NTgsMTMgKzU1OCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dHJ5X2dldF9ieV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1tt
X2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZv
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJ
ZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBn
ZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC01NzUsNyArNTc1LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTU4MywxMyArNTgzLDEzIEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0
UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisgICAgICAg
IG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFs
aWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCByZXN1bHRS
ZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdz
LnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTU5OSwxMyArNTk5LDEzIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1p
emUsIHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZv
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1p
emUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHVi
SW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwogfQpAQCAtNjE0LDEwICs2MTQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF9kaXJlY3QoYwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
ICAgICAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC02MzAsMTMgKzYzMCwxMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3Vs
dFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworICAgICAgICBtX3By
b2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BS
UmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAg
ZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BS
KCkpOwogfQogCkBAIC02NDYsMTMgKzY0NiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5
SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAg
ICAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJv
ZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAg
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAg
LTY2Myw3ICs2NjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNv
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlz
VlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAgICAgCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJl
Z1QwKTsKICAgICBlbWl0TG9hZCh0aGlzVlJlZywgcmVnVDQsIHJlZ1QzKTsKQEAgLTY3MywxMyAr
NjczLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAg
IEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1Zh
bHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBJ
bnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3M6OnBh
eWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgSW52YWxpZEdQUlJl
Zyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwg
cmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC02
ODksMTMgKzY4OSwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRX
aXRoVGhpcz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhp
c1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRo
VGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdl
bi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
NCwgcmVnVDMpLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZEJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1f
cHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTcxMCwxNSArNzEwLDE1IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgp
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAgICAg
CiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgdmFsdWUsIHJlZ1QzLCByZWdUMik7
CiAgICAgCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAog
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgbV9wcm9maWxlZEJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KSwKICAgICAg
ICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSwgSW52YWxpZEdQUlJlZywKICAgICAgICAgcmVnVDEsIGJ5dGVjb2RlLm1fZmxhZ3MuZWNt
YU1vZGUoKSwgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsK
ICAgICAKQEAgLTczOCw3ICs3MzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lk
KGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAKQEAgLTc0OCw3ICs3NDgsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgSklUUHV0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKAotICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgbV9wcm9maWxl
ZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzU4LDE0ICs3NTgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
ZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEludmFsaWRHUFJSZWcpOworICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZhbGlkR1BSUmVnKTsKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CkBAIC03NzksMTMgKzc3OSwx
MyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
cHJvZmlsZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTc5Niw3ICs3OTYsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxv
Y2spOwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywg
cmVnVDIpOwpAQCAtODA0LDcgKzgwNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChj
b25zdCBJbnN0cnUKICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHBy
b2ZpbGUsIHJlZ1Q0KTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJv
ZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFs
dWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpA
QCAtODE5LDE0ICs4MTksMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25z
dCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5
VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSklU
SW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKIH0KQEAgLTgzNyw3ICs4MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUo
VmlydHVhbFJlZ2lzdGVyCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJl
Z1QxKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcp
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwpAQCAtODUzLDcgKzg1Myw3IEBAIHZvaWQgSklUOjplbWl0SGFzUHJp
dmF0ZVNsb3coVmlydHVhbFJlZ2kKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2lu
QnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6
Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJh
dGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhh
c1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQpAQCAtODkwLDcgKzg5MCw3IEBAIHZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hl
Y2soYm9vbCBuZWUKIHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAg
ICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNz
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5h
ZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fcHJvZmlsZWRCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFJl
c29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCkBAIC05MDYsNyAr
OTA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaQogdm9pZCBK
SVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CkBAIC05MTYsMTEg
KzkxNiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAg
ICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBKU1Nj
b3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhy
ZXNvbHZlVHlwZSwgbV9wcm9maWxlZEJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBsb2FkMzIoJm1l
dGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwotICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSks
IHJlZ1QxKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkds
b2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CiAgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwogICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0U3Rv
cmUoZHN0LCByZWdUMSwgcmVnVDApOwpAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiAKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAg
ICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNv
ZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOworICAgICAgICAgICAgSlNTY29wZSog
Y29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2
ZVR5cGUsIG1fcHJvZmlsZWRCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25z
dGFudFNjb3BlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKQEAgLTEwMzksNyArMTAzOSw3IEBAIHZvaWQg
SklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CkBAIC0xMTQ2LDcg
KzExNDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCkBAIC0xMTU2
LDcgKzExNTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29w
ZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1f
cHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAK
IHZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCkBAIC0xMTkwLDcgKzExOTAsNyBA
QCB2b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2Nv
cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBHZXRQdXRJbmZv
IGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKQEAgLTEyMDIsNyArMTIw
Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAg
c3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAg
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAg
ICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fcHJv
ZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAg
ICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xv
dCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbi4KICAgICAgICAgICAg
IGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgICAgICAgICAgCkBAIC0xMjE3LDcg
KzEyMTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAg
ICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBH
bG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNT
Y29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2sp
OworICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50
U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fcHJvZmlsZWRCbG9jayk7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwpAQCAtMTMxOCw3ICsxMzE4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF90b19zY29wZShjb25zdAogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRv
bmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgbV9wcm9maWxlZEJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xMzMzLDcgKzEzMzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVu
dHMoY29uCiAgICAgZW1pdExvYWRQYXlsb2FkKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBUYWdPZmZzZXQpLCByZXN1dGxSZWdz
LnRhZ0dQUigpKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpz
dG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsg
UGF5bG9hZE9mZnNldCksIHJlc3V0bFJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdXRsUmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
QmxvY2spLCByZXN1dGxSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1dGxSZWdzLnRhZ0dQ
UigpLCByZXN1dGxSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTEzNTUsNyArMTM1NSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QKIHZvaWQgSklUOjplbWl0
X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2ln
bmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksOTIgKzQ5LDEwNCBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgaWYgKG1ldGFkYXRh
Lm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVy
T2ZJZGVudGlmaWVycygpKSB7Ci0gICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwg
cHJvZmlsZSwgcmVnVDIpOworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01h
eE51bWJlck9mSWRlbnRpZmllcnMoKSkgeworICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwoYmFzZUdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdENlbGwubGluayh0
aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIHNjcmF0Y2hHUFIsIGJhc2VHUFIsIHBy
b3BlcnR5R1BSKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1
bHQpOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncywgcmVnVDIp
OworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BS
KSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCiAgICAgICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJ
c0ludDMyID0gdHJ1ZTsKLSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
ICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBhZGRTbG93Q2FzZSgpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICAgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICAgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3
ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIH0KLQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93
Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAgICBpZiAoIWhh
c0FueVNsb3dDYXNlcyhpdGVyKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OworCisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBKSVRHZXRCeVZhbEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOworICAgIEpJVEdl
dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CiAK
LSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAg
IG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAg
ICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBhcmd1bWVudEdQUjQp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+KGJ5
dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQotICAgICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwotICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
KyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
KyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUlu
ZGV4KTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJn
dW1lbnRHUFI0OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gYXJndW1lbnRHUFI0OworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQ
UiA9PSBhcmd1bWVudEdQUjEpOwotCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2Zp
bGUpLCBwcm9maWxlR1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7Ci0KLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFk
eSB1c2VkLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFy
Z3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BS
ID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlID09IHJlZ1QwKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5ID09IHJlZ1QxKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVH
UFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ5LDcgKzE2MSw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAg
LTE2MCw4ICsxNzIsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjU7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9w
ZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0xODcsMzQgKzE5OSw0MCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cmVzdWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwog
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0UHJpdmF0
ZU5hbWU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBBU1NF
UlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yMjMs
OSArMjQxLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGJ5
dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMjM1LDI2ICsyNTUsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25h
bWUoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1
bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKLSAgICBl
bHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMjY0LDcgKzI3OCw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTMw
MCwyMSArMzE0LDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVC
cmFuZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwotICAgIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7CisKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRS
ZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJh
bmQsIGJyYW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNl
dFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCByZWdU
Mik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJp
dmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZv
R1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OlNldFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVC
cmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUt
YmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJl
cnMgcmVnaXN0ZXJzLgpAQCAtMzI0LDE3ICszNDUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0
X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmls
dGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKKwogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0
b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRl
eCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQ
UiwgYnJhbmRHUFIpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wU2V0UHJpdmF0ZUJyYW5kPigpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0
aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzcwLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2Vy
dChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFBy
aXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0
eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZh
bHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3By
aXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2
YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAs
MzMgKzM5MCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJl
Z1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihicmFuZCwgYnJhbmRHUFIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVj
a1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHVi
SW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3By
aXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJp
dmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENo
ZWNrUHJpdmF0ZUJyYW5kPigpOworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZSk7CisKICAgICBK
SVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNz
ZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BS
ID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJh
dGlvbjxkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT4oQWRkcmVz
cyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BS
Myk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC00MDYsMjQgKzQ0MCwxOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkg
dXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFu
ZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0
KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxk
ZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlw
ZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1p
emU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxf
ZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzUsMzAg
KzQ2Myw0MyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJv
ZmlsZSksIHJlZ1QzKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJv
ZmlsZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJlZ1Q0KTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9maWxlR1BSKTsKKyAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1Zh
bHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBwcm9maWxlR1BS
LCBzdHViSW5mb0dQUik7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkp
KQogICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOworICAgIHN0
dWJJbmZvLT5wdXRLaW5kID0gc3RkOjppc19zYW1lX3Y8T3AsIE9wUHV0QnlWYWxEaXJlY3Q+ID8g
UHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21h
TW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBP
U1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElD
IGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2Ug
aXMgY2VsbC4KQEAgLTQ3NCwxNSArNTE1LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmlj
dCgpOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxv
YWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFN
b2RlOwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9
OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNDk4LDcgKzUzNiwxNiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAgICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3Qg
Y2xvYmJlcmVkLgotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGdlbi5zdHViSW5mbygpLCByZWdUMyk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjQpOworICAgIGlmIChpc0RpcmVjdCkKKyAgICAg
ICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeVZhbERpcmVjdD4oKSwgT3BQdXRCeVZhbERpcmVjdDo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSNSk7CisgICAgZWxzZQorICAgICAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFs
PigpLCBPcFB1dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1l
bnRHUFI1KTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3Ry
aWN0T3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQsIGFyZ3VtZW50R1BSNSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC01MTIsNyArNTU5LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSByZWdUNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gcmVnVDU7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogICAgIENhbGwgY2FsbDsKICAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGly
ZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAo
ZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsKQEAgLTUyMyw3ICs1NzAsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC01MzMsMTggKzU4MCwyNCBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJv
dXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25n
aW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q1OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICB7Cisg
ICAgICAgIFJlZ2lzdGVyU2V0IHVzZWQoQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwg
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnZhbHVlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlKTsKKyAgICAg
ICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q0KSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5j
b250YWlucyhyZWdUNSkpOworICAgIH0KKwogCiAgICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZz
ZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykp
OwogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
Z2xvYmFsT2JqZWN0R1BSKTsKQEAgLTU3MCwyMCArNjIzLDMxIEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2
YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSks
IEpTVmFsdWVSZWdzKHJlZ1QyKSwgSW52YWxpZEdQUlJlZywgcmVnVDQpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
SW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8t
PnByaXZhdGVGaWVsZFB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3Jp
dGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwu
CkBAIC01OTQsOCArNjU4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShj
b25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0g
Ynl0ZWNvZGUubV9wdXRLaW5kOworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24p
OwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlW
YWxJbmRleCsrXTsKIApAQCAtNjAzLDEzICs2NjYsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9wcml2YXRlX25hbWUoYwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKLSAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1
dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFBy
aXZhdGVGaWVsZE9wdGltaXplOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAv
LyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQu
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSByZWdUMjsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQ
UiwgdmFsdWVHUFIsIGdlbi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1l
PigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGFyZ3VtZW50R1BSMyk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlW
YWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFI0LCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgVHJ1
c3RlZEltbVB0cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC02MjIsMTggKzY4NywxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFt
ZShjCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9w
dXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0MywxNCAr
NzAyLDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3MzksOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlv
bnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzc0OSw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVn
VDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc2MCw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJp
YnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJl
Z1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNzA5LDcgKzc3MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFs
KGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJl
Z1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCBy
ZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzgyLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRl
cyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1Qz
LCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03
MjcsMjMgKzc5MSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwg
YmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVE
ZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
Ym94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3Vs
dEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAg
IC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBz
aW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODMzLDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxC
eUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRp
b248ZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFs
dWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNzgxLDI0ICs4NTcs
MTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52
YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAg
ICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQ
UiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CkBAIC04MDgsNyArODc5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFn
UmV0dXJuQWRkcmVzcygpOwpAQCAtODQ1LDIyICs5MTYsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisKICAg
ICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpz
Y3JhdGNoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OkRlbGV0ZUJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlWYWxz
LmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
KyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAg
ICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNl
IHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3
cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2Vs
bC4KQEAgLTg4Myw5ICs5NjUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwo
Y29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlv
bjxkZWNsdHlwZShvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtODk5LDI0ICs5ODMsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV92YWwoY29uc3QgSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBh
cmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50
R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsK
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21h
TW9kZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2Rl
bF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1Qw
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTkyNiw3
ICsxMDA1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRk
cmVzcygpOwpAQCAtOTYxLDIyICsxMDQwLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRf
YnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJl
Z3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7CisgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2
LDE0ICsxMDc0LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsr
XTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
VHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdl
dEJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTAwMywyNiArMTA5
NCwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbW92
ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNl
Ci0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMzAsMjIgKzExMTUsMzEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWREaXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYgKzExNDgsMTggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRE
aXJlY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk+KGJ5
dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwNzMsODMgKzExNjksNjIgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
LCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOwotICAgIGVsc2UKLSAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91
bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlkZW50ID09IG1f
dm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAg
ICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsICZtZXRhZGF0YS5tX21vZGVNZXRh
ZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCByZWdUMSk7CisgICAgICAgIGxvYWQ4
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVN
ZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlKCksIHNjcmF0Y2hH
UFIpOworICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDMyKE5vdEVxdWFs
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVu
Z3RoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkg
KyBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGg6Om9mZnNldE9mQXJyYXlQcm9maWxlKCks
IGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0
aGlzKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOwotCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1
ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKKyAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vz
c1R5cGU6OkdldEJ5SWQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKLQotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsK
KyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRC
eUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5l
ZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1f
Z2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTE1OCwxNiArMTIzMywxOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
ICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNTQsNTggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIz
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQ
UjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRC
eUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BS
ID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRo
aXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4o
CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsg
Ly8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSBy
ZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVu
ZChnZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVn
cyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTIwNiw3ICsxMzE1LDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25z
IGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJl
bG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAg
Ly8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0MSwxNiArMTM1
MCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRh
ZGF0YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNP
cHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwpAQCAtMTI2MCwyOCArMTM3MiwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1l
bnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IHJlZ1QxOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodGhpc0dQUiA9PSBh
cmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjkxLDcgKzEzOTcsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMzI5
LDIzICsxNDM1LDM4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJl
Y3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICAvLyBJbiBvcmRlciB0byBiZSBh
YmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3
ZSBzdG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMg
aGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdl
bmVyYXRlIGNvZGUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUg
YWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5
SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9
IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKIAotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJhc2VWUmVnLCBiYXNlR1BSLCB2YWx1ZVZSZWcsIHZhbHVlR1BSKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUUHV0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgcmVnVDMsIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
c3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGly
ZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtl
ZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6
OlB1dEJ5SWQ7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBkaXJlY3QgPyBQdXRLaW5kOjpEaXJl
Y3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1v
ZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUs
IHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCiAgICAgLy8gSUMgY2FuIHdyaXRl
IG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpA
QCAtMTM1OSwxNCArMTQ4MCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNv
bnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4odGhpcyk7CiAgICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRC
eUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgY2Fs
bE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpPihBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRH
UFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3NiwyNSArMTUwMSwxOSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxp
bmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0g
YXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVHUFIg
PT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJv
cGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9w
dXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBn
ZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCkBAIC0xNDA0LDcgKzE1MjMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0
IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVy
IGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAg
IGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQxLDIwICsxNTYwLDMxIEBAIHZvaWQgSklU
OjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9
IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJl
Z1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5C
eUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5C
eUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
Zyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNTkzLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1tt
X2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVy
YXRpb25JbkJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTQ4MCwy
OCArMTYxMywyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X2lkX3By
ZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8g
U28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0
byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Nh
bWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNTEwLDI1ICsxNjM3LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3Zh
bChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJl
Z1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
SW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRH
UFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c2Ny
YXRjaCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5C
eVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CkBAIC0xNTM3LDE1ICsxNjcyLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwo
Y29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5CeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAg
SklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5C
eVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBv
aW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRp
b248ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQ
UjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1
bWVudEdQUjQpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTU1Niw1OSAr
MTY5NCw3MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9
PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0
eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwg
cHJvZmlsZUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBwcm9maWxlR1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5l
cmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBu
byBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBk
aWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShv
cGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9wdGlt
aXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBh
cHBlbmRDYWxsKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRIYXNQ
cml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eU9yQnJhbmQsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
SW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0
dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcHJvcGVydHlHUFIpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJ
VEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAg
YWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IHR5cGU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNz
VHlwZSB0eXBlKQordm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIg
ZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nl
c3NUeXBlIHR5cGUpCiB7Ci0gICAgQVNTRVJUKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIFVOVVNF
RF9QQVJBTShiYXNlKTsKKyAgICBVTlVTRURfUEFSQU0ocHJvcGVydHkpOworICAgIEFTU0VSVF9V
TlVTRUQodHlwZSwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09
IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9y
JiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRl
QnJhbmRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25I
YXNQcml2YXRlTmFtZU9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTE2MTgsMjcgKzE3NjcsMjEgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQ
cml2YXRlU2xvdyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zm
c2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IHJlZ1QxOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFy
Z3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5T3JC
cmFuZEdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5z
dHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpLCBk
ZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlQnJh
bmRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6
dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
cHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZh
dGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBl
bHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFz
UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX25h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NTIsNyArMTc5
NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKGMKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0
ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAgICBlbWl0SGFzUHJp
dmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9wcm9w
ZXJ0eSwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9oYXNfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTY2NiwyMTUgKzE4MDksMTI3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJp
dmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAg
ZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
QnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUu
bV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICghbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4
KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJ
bmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJ
bnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAg
bG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVj
dCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zm
c2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkK
IHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDAp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiB9CiAKLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi12b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwotICAgIHVuc2ln
bmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7Ci0KLSAgICBhdXRvIGVtaXRD
b2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewotICAgICAgICBzd2l0Y2ggKHJl
c29sdmVUeXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Nj
b3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhy
ZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29u
c3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRh
dGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVn
VDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVn
VDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAg
Y2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3Bl
Ojpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7
Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2
ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCBkZXB0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0g
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1l
bnQuZ2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFJlc29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0g
ICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6
Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2
ZVR5cGUsIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENv
ZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGlu
ayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhp
cyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29s
dmVUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotI2Vsc2UgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9m
aWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayku
bV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJU
KG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBj
dXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9
IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJv
ZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBj
b2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRh
ZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmls
ZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmly
b25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRh
T2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOwor
ICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5t
ZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CisKKyAgICAgICAgYXV0
byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJu
IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxp
bmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhciIpOworICAgICAgICB9OwogCi0jZGVmaW5l
IFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMj
cmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJh
dG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShS
RVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVy
biBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyIpOwogICAgICAgICB9OwotI3VuZGVmIFJFU09MVkVfU0NPUEVf
R0VORVJBVE9SCisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0g
W10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVT
Y29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBn
ZW5lcmljIik7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1QyOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7
CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNv
bHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0
dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICBj
b2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVy
YXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdl
bmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChj
b2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSwgc3RkOjpv
cHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkK
IHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkg
d29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRh
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCisgICAg
Y29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1QyOyAvLyBpbmNvbWluZworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7IC8vIGluY29taW5nIC0gcGFzcyB0
aHJ1IHRvIHNsb3cgcGF0aC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9
IHJlZ1Q0OwogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZU9mZnNldEdQUik7Ci0gICAgUkVMRUFT
RV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpOwogCi0g
ICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFi
bGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBqaXQu
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFU
YWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKIAog
ICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sg
PSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RH
UFIgPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZd
IChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
SW52YWxpZEdQUlJlZykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09IEludmFs
aWRHUFJSZWcpIHsKICAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwotICAgICAg
ICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgfQotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3Qs
IG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFw
cGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRP
ZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9i
amVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0
OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9
OwogCiAgICAgYXV0byBlbWl0UmVzb2x2ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpIHsKLSAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBs
b2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2xv
Y2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7Ci0KLSAgICAgICAgTGFiZWwgbG9vcCA9IGxhYmVsKCk7
Ci0gICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZO
ZXh0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1Qx
KTsKLSAgICAgICAgICAgIGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzY29wZUdQUiA9PSBy
ZWdUMCk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6
Om9mZnNldE9mTG9jYWxTY29wZURlcHRoKCkpLCByZWdUMSk7CisKKyAgICAgICAgTGFiZWwgbG9v
cCA9IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QxKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6
b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGppdC5zdWIzMihUcnVzdGVkSW1tMzIo
MSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CisgICAg
ICAgIGRvbmUubGluaygmaml0KTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKQEAgLTE4ODIsMTIgKzE5MzcsMTEgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygp
IGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkuCi0gICAgICAgICAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAg
ICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7Ci0gICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0
R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkp
LCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6
Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVn
VDEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEgKzE5NTEs
MTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAg
ICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBjb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xv
YmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
R2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDAp
OworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2Jq
ZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkw
OSw3ICsxOTYzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQog
ICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgot
ICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBS
ZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyAr
MTk3Myw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
ICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSks
IHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENv
ZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgq
cmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOwor
ICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZl
VHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgaml0Lmxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgp
KSwgcmVnVDEpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAg
ICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAg
ICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAg
ICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSk7CisgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAg
ICAgbm90Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0Q2Fz
ZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOwor
ICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAg
ICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAg
ICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9F
bmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0
Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZm
ZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtO
YW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2
ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9y
ZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwK
LSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNv
bHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2
bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVz
b2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwK
LSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJB
VE9SKQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2Vu
ZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVu
Y3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNl
CiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVj
dCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERG
Ry9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVj
dHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFz
dCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0
KQpAQCAtMjAzNCw3ICsyMDUwLDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlv
bkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3df
b3BfcmVzb2x2ZV9zY29wZSIpOwogfQotI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCiB2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQogewpAQCAtMjA2MiwyNzYgKzIwNzcs
MTMzIEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxl
cygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7CiB9CiAKLSNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUg
PSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRh
dGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3RydWN0dXJl
U2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3QqIG9wZXJh
bmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5k
KTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKLSAg
ICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2
YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5n
IGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxl
cyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcgYmFz
ZSA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAg
ICAgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBy
ZWdUMjsKLQotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihb
Jl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwg
YmFzZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKLSAgICAg
ICAgICAgIH0pKTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRlY29k
ZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIEFTU0VSVCht
X3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3Vy
cmVudEluc3RydWN0aW9uKTsKIAotICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZz
ZXQpOwotICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAg
SnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBU
cnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBhYm9y
dFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAgICAgICAgIGlz
T3V0T2ZMaW5lLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0g
ICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIo
b2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBv
ZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6Ci0gICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+
KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShyZWdUMCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZh
cjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5k
U2xvdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICB9CisgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10g
KFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1
bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZh
ciIpOwogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRh
dGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQ
dXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0K
LSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAg
ICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBp
bnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0g
ICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsUHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0K
LSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAg
ICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENv
ZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rp
b24pOwotfQotCi0jZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwor
ICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAo
Vk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVu
ayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfZ2V0
X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CiAKLSAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwotICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwotICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVj
b2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVj
b2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgYXV0byBnZW5lcmljR2V0RnJv
bVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5l
cmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9n
ZXRfZnJvbV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcg
bWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVn
VDY7CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFy
KSB7Ci0gICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2st
Pm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0
YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0
YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVz
b2x2ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAg
ICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAg
ICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0g
ICAgICAgIH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
ZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
ZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFy
KQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAg
ICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0u
Z2V0Q1RJU3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtl
ZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6
Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1l
KQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25s
eSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgdXNpbmcgTWV0
YWRhdGEgPSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBt
ZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdU
NjsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29s
dmVUeXBlKSk7Ci0KLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7Ci0KLSAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsK
LSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1l
dGFkYXRhR1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Qy
OwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAg
IGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwg
aW50MzJfdCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCkgewotICAgICAgICBsb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAg
ICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hU
ZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1
Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFw
cGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDEpKTsKLSAgICB9OworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7
CisKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFk
YXRhR1BSKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICBh
dXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldh
dGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVh
bCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3Rl
ZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7
CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0ds
b2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBv
aW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
ICAgICB9OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Qb2ludGVyID0gWyZdIChpbnQz
Ml90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAg
fTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIgPSBbJl0gKGludDMy
X3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9
OwotCi0gICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBH
UFJSZWcgb3BlcmFuZEdQUikgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXpl
b2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5k
R1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZh
cmlhYmxlcygpKSwgcmVnVDApOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7Cisg
ICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAg
ICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5Ogog
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAg
ICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9zdHJ1Y3R1cmUpKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2
YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5n
IGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxl
cyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0KLSAgICAgICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1
bHQgPSByZWdUMDsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7
Ci0gICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKLQotICAgICAg
ICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7
Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAgICAgICAgICAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUg
c3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxs
eSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4K
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAg
ICAgICAgaml0LmxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSkpOworCisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1w
KHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVx
dWFsLCBzY29wZUdQUiwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9v
cGVyYW5kKSksIG9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMSk7CisKICAgICAgICAg
ICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxp
bmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJ
VE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5r
KHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIo
R3JlYXRlclRoYW5PckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0KSk7CisgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05v
dE91dE9mTGluZSk7CisgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluaygmaml0KTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7
Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAg
ICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsK
KworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0Lm5lZzMyKHJlZ1QxKTsK
KyAgICAgICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAg
ICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmly
c3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZWdUMCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoK
ICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGlmIChpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJl
Y3RQb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKKyAgICAgICAgICAg
IGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRh
OjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKHJl
Z1QwLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFu
Y2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5i
cmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
bG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFH
UFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIHJlZ1QzKTsKLSAgICAg
ICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CisgICAgICAgICAgICBk
b1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6
Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydCgx
IDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1
c3RlZEltbTMyKDMpLCByZWdUMyk7CisgICAgICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCBy
ZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBKU0xleGljYWxF
bnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKKwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAg
ICBjYXNlIE1vZHVsZVZhcjoKQEAgLTIzNDEsODYgKzIyMTMsNjMgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVU
eXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBl
bWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUp
OwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRD
b2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRv
RW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVk
SW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUg
aW50byBUMAorICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRh
OjpvZmZzZXRPZkdldFB1dEluZm8oKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LmFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlw
ZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsUHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7
Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CisgICAgICAgIEp1
bXAgbm90R2xvYmFsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluaygm
aml0KTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBqaXQu
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAg
ICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKCZqaXQpOworCisgICAgICAgIEp1
bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGppdC5icmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGlzR2xv
YmFsUHJvcGVydHkubGluaygmaml0KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkp
OworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsoJmppdCk7CiAKLSAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGp1bXAoKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1w
KCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNl
KTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0K
IAogICAgIHN0YXRpY19hc3NlcnQoVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0gMSk7
Ci0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6
b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCku
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7
CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0
aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1Io
cmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0g
ICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2Nv
cGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJ
VCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcEdldEZyb21TY29wZVRo
dW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlXyIgI3Jlc29sdmVU
eXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQg
YnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUg
SklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQg
Z2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIg
Z2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lm
IENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjQyOSw3
ICsyMjc4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogI2Vu
ZGlmCiAKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgY29uc3RleHByIEdQ
UlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSByZWdUNTsKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFn
Rm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKQEAgLTI0
NDksNyArMjI5OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICBDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgSnVt
cCBleGNlcHRpb25DaGVjayA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0p
OwogCi0gICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5z
dG9yZTY0KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBNZXRhZGF0
YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQo
KSkpOwogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJ
bmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2XzY0KQpAQCAtMjQ2OSw4OCAr
MjMxOCw3NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
cGF0Y2hCdWZmZXIubGluayhqdW1wVG9IYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVy
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX2dldF9mcm9tX3Nj
b3BlIik7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0KLXZvaWQgSklU
OjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRy
KHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
YXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2lu
dFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihh
ZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNl
dCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsK
LX0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVj
b2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2Rl
KTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUu
c2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkg
eworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAg
IHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAg
ICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsg
Ly8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNh
Y2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlv
bmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rp
b24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24g
c2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9i
YWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFu
ZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0
cnVjdHVyZSgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3BlLCByZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8s
IHJlZ1QxKSk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKSk7CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QyKTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQp
PihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7Cisg
ICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsK
IAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdU
MSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7
CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIs
IEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNl
dCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdU
MSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Nj
b3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhy
ZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29u
c3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25s
eUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihn
ZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpIHsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRW
YXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
T3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihi
eXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8g
ZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVk
IHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1Qw
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
LSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAg
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVt
aXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJh
bmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQp
OwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVn
VDEpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAg
ICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJl
VmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQp
OworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRT
ZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAg
ICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwg
QmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihz
Y29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTI1NjQsNTggKzI0MDIsNTIgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3
aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1Qw
KTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVn
VDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZh
cikpOwotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFw
cGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBj
b25zdCBiaW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwot
ICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIs
IHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNH
bG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwg
ZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29k
ZUJsb2NrIHNlZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Ms
IHRoZW4gd2UgY2FuIGNvbXBpbGUgdGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2Rl
QmxvY2tzLCBzaW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJ
ZiB3ZSdyZSBhIENsb3N1cmVWYXIsCisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9z
dXJlVmFyLiBJZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUg
YWx3YXlzIENsb3N1cmVWYXIKKyAgICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50
IGlzbid0IGZpcmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgs
IHNvIGl0IGRvZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxs
eS4KKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBl
bWl0Q29kZShDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IFJlc29sdmVkQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFy
KTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9h
ZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkdldFB1dEluZm8oKSwgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAg
ICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0ds
b2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5
LCBmYWxzZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zLmxpbmsodGhpcyk7CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwor
ICAgICAgICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0
aGlzKTsKKwogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1
ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZl
VHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTggKzI0
NTYsMjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUg
PSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVU
eXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZv
LnJlc29sdmVUeXBlKCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFy
KSB7CisgICAgICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwg
dGhlbiBhbGwgbGlua2VkIENvZGVCbG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8g
YWxzbyBzZWUgTW9kdWxlVmFyLgogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3Jl
YWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKICAgICB9IGVsc2UgewogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRUb1Njb3BlLCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQog
ICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VS
VChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisgICAgICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVj
dGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKQEAgLTI2NTIsNyArMjQ4Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQ
VShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjcwMSw3ICsy
NTM2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0
KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXgg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3NTksNyArMjU5NCw2IEBAIHZvaWQgSklUOjpl
bWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRl
cm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVs
ZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4OwpAQCAtMjc2Nyw3ICsyNjAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CiB9CiAKQEAgLTI4MjMsNyArMjY1Nyw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm9w
ZXJ0eV9lbnVtZXJhdG8KIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9
IGJ5dGVjb2RlLm1fbW9kZTsKQEAgLTI4MzksMTEgKzI2NzIsMTcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAK
ICAgICAvLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwg
c28gc3BlY2lhbCBjYXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlm
IChtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jaykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BS
ID0gcmVnVDM7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAgICAgICAg
IG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpICYg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwogICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgIGxvYWQ4
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0
T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG9yMzIoVHJ1c3Rl
ZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSksIHNjcmF0
Y2hHUFIpOworICAgICAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBP
cEVudW1lcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7
CisKICAgICAgICAgbG9hZDMyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSwgaW5kZXhHUFIpOwogICAgICAg
ICBvcGVyYXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4R1BSLCBBZGRy
ZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpKTsKIApAQCAtMjg4MSw3
OCArMjcyMCw4OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiB2
b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5t
X21vZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExp
c3QgZG9uZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVFbnVtZXJh
dG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlW
YWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBC
YXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJz
OjpzY3JhdGNoMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVt
ZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCBy
ZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRl
QWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoMik7CisgICAgb3IzMihzY3JhdGNoMywgc2Ny
YXRjaDIpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBPcEVudW1l
cmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwog
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBp
bnQzMiBlbmNvZGVkIHZhbHVlLgotICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01v
ZGUpKTsKKyAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25a
ZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5k
ZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAg
ICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVt
ZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1
Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3Jh
dGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbmRleCwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNj
cmF0Y2gyKTsKICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBj
YWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVt
cCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zm
c2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMp
OwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0
R1BSKTsKLQorICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2Ny
YXRjaDIsIHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gy
LCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRH
UFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBp
dCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7
Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAg
ICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIz
MihBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CiAgICAgY29uc3RleHByIGlu
dHB0cl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zm
c2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJh
c2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1
bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1p
c21hdGNoLmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAm
bWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1v
ZGVTdHJ1Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0
YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgaXNOb3RPd25TdHJ1
Y3R1cmVNb2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0
MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Oklu
ZGV4ZWRNb2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywg
c2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRN
b2RlKSk7CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAgICBpc05vdEluZGV4ZWQubGluayh0aGlz
KTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJl
Z1QyKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VH
UFIsIHNjcmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgp
OyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5
IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2Vu
KTsKIAogICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTYxLDEwICsyODEwLDkgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxT
bG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBp
dGVyKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQ
YXRoRnVuY3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJ
bXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5
cGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lk
IEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1
bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBA
IC0yOTczLDcgKzI4MjEsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0
eUltCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihtb2RlLCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRh
Lm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgcmVnVDEp
OworICAgIG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1QxLCBi
eXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgp
KTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwog
CkBAIC0zMDYyLDYgKzI5MTIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lcgogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIAor
dm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQoreworICAgIEp1bXAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNlbGVj
dFNjcmF0Y2hHUFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDkgKzIzNiw5IEBAIHN0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgIGlmIChpc0pTQXJyYXko
YmFzZUNlbGwpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09
IENhY2hlVHlwZTo6VW5zZXQKICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgp
ID09IGJhc2VDZWxsCi0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNo
ZWFibGVBcnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7
CisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxl
bmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsK
IAotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFz
ZUNlbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0g
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpz
Q2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVy
YXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0
aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5j
dGlvbihraW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0QXJyYXlM
ZW5ndGgobG9ja2VyKTsKQEAgLTI0OSw4ICsyNDksOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6
OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCwgcHJvcGVydHlO
YW1lKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlQ2VsbCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNl
dAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5n
TGVuZ3RoKHN0dWJJbmZvKSkgewotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENv
ZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKTsK
KyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xl
bmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGdl
bmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKGNv
ZGVCbG9jaywgc3R1YkluZm8pOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29k
ZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtp
bmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRTdHJpbmdMZW5ndGgo
bG9ja2VyKTsKQEAgLTMwNCw3ICszMDQsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCiAg
ICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpCiAgICAgICAgICAgICAgICAgJiYgIWxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAgICAg
ICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
U2VsZlByb3BlcnR5QWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3Ry
dWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJh
dGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Okdl
dEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7
CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9y
UmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTczMSwxMSArNzMxLDEx
IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5KEoKICAgICAgICAgICAg
ICAgICBvbGRTdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5j
YWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICAgICAm
JiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywg
c2xvdC5jYWNoZWRPZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNz
OjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgc2xv
dC5jYWNoZWRPZmZzZXQoKSkKICAgICAgICAgICAgICAgICAgICAgJiYgIW9sZFN0cnVjdHVyZS0+
bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAgICAgICAgICAgICAgICAgICAgICYmICFp
c1Byb3h5KSB7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBib29s
IGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5
UmVwbGFjZShzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2xkU3Ry
dWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdl
bmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNF
dmVudDo6UHV0QnlTZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0
Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5n
UHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKQEAgLTExMzIsNyArMTEz
Miw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnkoCiAgICAgICAgICAg
ICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2UKICAgICAgICAgICAgICAgICAmJiAhc2xv
dC53YXRjaHBvaW50U2V0KCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRl
ZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKHN0dWJJbmZv
LCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywg
c3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewog
ICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwogICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxh
Y2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBAIC0xNTUyLDcgKzE1NTIsNyBAQCBz
dGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAKIHZvaWQgdW5saW5rQ2Fs
bChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIGRhdGFMb2dMbklm
KE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExp
bmtJbmZvLmZhc3RQYXRoU3RhcnQoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERp
c2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKCZjYWxs
TGlua0luZm8pKTsKICAgICAKICAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZtLmdl
dENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywyNCArNDMsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRv
cihWTSYgdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdDsKLQotICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKLQot
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOwotICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7Ci0KLSAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsK
LQotICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKLQotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4
dHJhQ1RJVGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKTsKLSAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5k
bGVFeGNlcHRpb24iKTsKLX0KLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tHZW5lcmF0b3IoVk0mIHZtKQog
ewogICAgIENDYWxsSGVscGVycyBqaXQ7CkBAIC03NywyNCArNTksNiBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJv
bGxiYWNrIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9w
VGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCi17
Ci0gICAgQ0NhbGxIZWxwZXJzIGppdDsKLQotI2lmIENQVShYODZfNjQpCi0gICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4
NlJlZ2lzdGVyczo6ZXNwKTsKLSNlbGlmIENQVShBUk02NCkKLSAgICBqaXQucG9wUGFpcihDQ2Fs
bEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rl
cik7Ci0jZW5kaWYKLQotICAgIENDYWxsSGVscGVyczo6SnVtcCBjb250aW51YXRpb24gPSBqaXQu
anVtcCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgYXV0byBoYW5kbGVy
ID0gdm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOwotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoY29udGludWF0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSkpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgInBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRp
b24iKTsKLX0KLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKQEAgLTEz
Nyw2ICsxMDEsNDIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaAog
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKK3sK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOworCisgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKworICAgIENDYWxsSGVscGVyczo6
Q2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworCisgICAgaml0Lmp1
bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOworICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbiIp
OworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3Rh
Y2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIEND
YWxsSGVscGVycyBqaXQ7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIGppdC5hZGRQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3Rl
cnM6OmVzcCk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxwZXJz
OjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIpOworI2Vu
ZGlmCisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29udGludWF0aW9uID0gaml0Lmp1bXAoKTsK
KworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIGF1dG8gaGFuZGxlciA9IHZtLmdl
dENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KGNvbnRpbnVhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1
bmtQdHJUYWcsICJwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uIik7Cit9
CisKIHRlbXBsYXRlPHR5cGVuYW1lIFRhZ1R5cGU+CiBpbmxpbmUgdm9pZCBlbWl0UG9pbnRlclZh
bGlkYXRpb24oQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwb2ludGVyR1BSLCBUYWdUeXBlIHRh
ZykKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMu
aAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDEyIEBAIGNsYXNzIFZNOwog
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVS
b2xsYmFja0dlbmVyYXRvcihWTSYpOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZN
Jik7CiAKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNl
cnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcihWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oIgogI2luY2x1ZGUg
IkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCisj
aW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lu
bGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29w
ZS5oIgpAQCAtMzcwLDEzICszNzEsMjIgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhl
dXJpc3RpY3MoVgogICAgIAogICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJl
ZGljdGlvbnMoKTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpC
YXNlbGluZUpJVCkgeworICAgICAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gYmFzZWxp
bmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGlu
ZUNvZGUpIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGlu
ZUNvZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOworICAgICAgICAg
ICAgY29kZUJsb2NrLT5qaXROZXh0SW52b2NhdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRo
cmVzaG9sZFJlYWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9j
aywgImRlbGF5SklUQ29tcGlsZSIsICgidGhyZXNob2xkIG5vdCByZWFjaGVkLCBjb3VudGVyID0g
IiwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICAgICAgZGF0YUxvZ0xu
SWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJlIGxp
ZnRlZC4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBKSVRXb3Jr
bGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3Jr
bGlzdCgpLmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBKSVRDb21waWxhdGlvbktleShj
b2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpKTsKKyAgICBKSVRXb3JrbGlz
dDo6U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlz
dCgpLmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBKSVRDb21waWxhdGlvbktleShjb2Rl
QmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUp
KTsKIAogICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCkgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgQ29k
ZSB3YXMgYWxyZWFkeSBjb21waWxlZC4iKTsKQEAgLTQ2Niw4ICs0NzYsMTAgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVh
cmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgY29kZUJsb2NrLT5sb29wSGludHNB
cmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAgICAgICB1aW50cHRyX3Qq
IHB0ciA9IHZtLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihwYyk7CiAgICAgICAgICpwdHIg
Kz0gY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkubV9hY3RpdmVUaHJlc2hvbGQ7Ci0g
ICAgICAgIGlmICgqcHRyID49IE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNM
aW1pdCgpKQorICAgICAgICBpZiAoKnB0ciA+PSBPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZp
bml0ZUxvb3BzTGltaXQoKSkgeworICAgICAgICAgICAgY29kZUJsb2NrLT5lbnN1cmVKSVREYXRh
KENvbmN1cnJlbnRKU0xvY2tlcihjb2RlQmxvY2stPm1fbG9jaykpOyAvLyBXZSdyZSByZXR1cm5p
bmcgdG8gdGhlIE9TUiBlbnRyeSBjb2RlIGhlcmUsIHdoaWNoIGV4cGVjdHMgdGhhdCBtX2ppdERh
dGEgaXMgbm90IG51bGwuCiAgICAgICAgICAgICBMTElOVF9SRVRVUk5fVFdPKExMSW50OjpmdXp6
ZXJSZXR1cm5FYXJseUZyb21Mb29wSGludEVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgY2FsbEZyYW1lLT50b3BPZkZyYW1lKCkpOworICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5z
dHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3Qs
IGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFt
ZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBy
ZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAg
ICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBV
bmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRh
ZGF0YSh0MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGJpbmVxIFRh
Z09mZnNldFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBAIC0xMDIzLDcgKzEwMTksNyBA
QCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgICMgTWV0
YWRhdGEgaW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQyLCAu
c2xvdykKICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCi0gICAg
ICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVu
YXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAg
ICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4OSwyMiArMTA4NSwxOCBAQCBl
bmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAKLSAgICBtYWNybyB1cGRhdGVB
cml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgIGVuZAot
CiAgICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5lcSB0MSwgSW50MzJU
YWcsIC5vcE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0
ZVNsb3cKICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUlu
dCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50
LCB0NSwgdDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdhdGVTcmNOb3RJbnQ6
CiAgICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JpIDB4ODAwMDAw
MDAsIHQxCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1
cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0NSwg
dDMpCiAgICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExMTUsMTAgKzEx
MDcsNiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3Bj
b2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9wZXJhdGlvbikKICAg
ICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNy
byAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8g
YXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1
XQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCiAgICAgICAgIGdldCht
X3JocywgdDIpCiAgICAgICAgIGdldChtX2xocywgdDApCkBAIC0xMTI2LDcgKzExMTQsNyBAQCBt
YWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCBJ
bnQzMlRhZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5vcDJOb3RJ
bnQKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0
NSwgdDIpCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25B
bmRTdG9yZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKQEAgLTEx
MzYsMTIgKzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBv
cAogICAgICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAgICAgICAgYmliIHQzLCBMb3dl
c3RUYWcsIC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAu
c2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAg
ICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1i
ZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgICAgICBqbXAgLm9wMU5v
dEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAgICAgICAgZmlpMmQgdDEsIHQz
LCBmdDEKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAg
ICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxl
TnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQo
bV9kc3QsIHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1Myw3ICsxMTQxLDcg
QEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZp
cnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgb3BlcmFuZCBpcyBk
ZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYmlhIHQzLCBM
b3dlc3RUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1i
ZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRo
UHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAg
IGZpaTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJhdGlvbihmdDEsIGZ0MCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNDQxLDgg
KzQ0MSwxMyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgICAgICAgICBt
b3ZlIFBDLCBhMQogICAgICAgICAgICAgY0NhbGwyKF9sbGludF9sb29wX29zcikKICAgICAgICAg
ICAgIGJ0cHogcjAsIC5yZWNvdmVyCi0KICAgICAgICAgICAgIG1vdmUgcjEsIHNwCisKKyAgICAg
ICAgICAgICMgQmFzZWxpbmUgdXNlcyBMTEludCdzIFBCIHJlZ2lzdGVyIGZvciBpdHMgSklUIGNv
bnN0YW50IHBvb2wuCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKKyAgICAg
ICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9qaXREYXRhW1BCXSwgUEIKKyAgICAgICAgICAgIGxv
YWRwIENvZGVCbG9jazo6SklURGF0YTo6bV9qaXRDb25zdGFudFBvb2xbUEJdLCBQQgorCiAgICAg
ICAgICAgICBpZiBBUk02NEUKICAgICAgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0
ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6bG9v
cE9TUkVudHJ5KSAqIFB0clNpemUsIGEyCiAgICAgICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2
ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKQEAgLTEwNTYsMTAgKzEwNjEsNiBAQCBz
dHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9w
Y29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0
aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQ
cm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDJdCi0gICAg
ICAgIGVuZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGxvYWRxIFtjZnIs
IHQwLCA4XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpAQCAtMTA2OSw3ICsxMDcwLDcg
QEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICBpbnRl
Z2VyT3BlcmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51bWJlclRhZywgdDEKICAgICAg
ICAgc3RvcmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFy
aXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3Ry
dWN0LCBBcml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAg
LnNsb3c6CkBAIC0xMTM0LDExICsxMTM1LDYgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoTWV0YWRh
dGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFk
YXRhLCByZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAg
ICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFy
aXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDAp
CiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCiAgICAgbWV0YWRhdGEo
dDEsIHQyKQpAQCAtMTE0NiwxMiArMTE0MiwxMiBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25l
Z2F0ZSwgT3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwog
ICAgIG5lZ2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmls
ZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUs
IEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgIHJldHVybih0MykKIC5vcE5lZ2F0ZU5vdElu
dDoKICAgICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JxIDB4ODAw
MDAwMDAwMDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVt
YmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVO
dW1iZXIsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTY0
LDEwICsxMTYwLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAog
ICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1h
Y3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRh
ZGF0YSh0NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0eXBlKQotICAgICAgICAgICAg
b3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5h
cnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1f
cmhzLCB0MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZShzaXplLCB0MCwgdDEpCkBAIC0xMTc3LDcgKzExNjksNyBAQCBtYWNybyBiaW5hcnlP
cEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAg
ICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5zbG93LCB0MikKIAotICAgICAg
ICBwcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQ
cm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAg
IGRpc3BhdGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTg3LDEwICsxMTc5LDEwIEBAIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYnRxeiB0MSwg
bnVtYmVyVGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEy
ZCB0MSwgZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAg
ICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVO
dW1iZXJOdW1iZXIsIHQ1LCB0MikKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5v
cDFOb3RJbnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQor
ICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2Zp
bGVOdW1iZXJJbnQsIHQ1LCB0MikKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgIC5vcDFOb3RJ
bnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEyMDQsOSArMTE5Niw5IEBAIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKIAogICAgIC5vcDJOb3RJbnQ6
CiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29u
ZCBpcyBkZWZpbml0ZWx5IG5vdC4KLSAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYnRx
eiB0MSwgbnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludE51
bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJp
dGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDIpCisgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAg
ICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZx
MmQgdDEsIGZ0MQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDIwLDcgKzE0MjAsOCBAQCBlbmQKIAogbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1l
bnQsIGFjdGlvbikKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBiYWRkaXMgaW5j
cmVtZW50LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0
aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCisgICAgbG9hZHAgQ29kZUJsb2Nr
OjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDBdLCB0MAorICAgIGJhZGRpcyBpbmNyZW1lbnQsIEJh
c2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgYWN0
aW9uKCkKICAgICAuY29udGludWU6CiBlbmQKQEAgLTE1MDMsNyArMTUwNCw4IEBAIG1hY3JvIHBy
b2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2MKICAgICBjb2RlQmxvY2tHZXR0ZXIodDEp
CiAgICAgY29kZUJsb2NrU2V0dGVyKHQxKQogICAgIGlmIG5vdCAoQ19MT09QIG9yIENfTE9PUF9X
SU4pCi0gICAgICAgIGJhZGRpcyA1LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciAr
IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QxXSwgLmNvbnRpbnVlCisgICAg
ICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyW3QxXSwgdDAKKyAgICAg
ICAgYmFkZGlzIDUsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNv
bnRpbnVlCiAgICAgICAgIGlmIEpTVkFMVUU2NAogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAg
ICAgICAgICAgICBtb3ZlIFBDLCBhMQpAQCAtMTYxNywxNCArMTYxOSwxNCBAQCBtYWNybyBmdW5j
dGlvbkluaXRpYWxpemF0aW9uKHByb2ZpbGVBcmdTCiAgICAgIyBvcHRpbWFsIHdheSBmb3IgYXJj
aGl0ZWN0dXJlcyB0aGF0IGhhdmUgbW9yZSB0aGFuIGZpdmUgcmVnaXN0ZXJzIGF2YWlsYWJsZQog
ICAgICMgZm9yIGFyYml0cmFyeSB1c2UgaW4gdGhlIGludGVycHJldGVyLgogICAgIGxvYWRpIENv
ZGVCbG9jazo6bV9udW1QYXJhbWV0ZXJzW3QxXSwgdDAKLSAgICBhZGRwIC1wcm9maWxlQXJnU2tp
cCwgdDAgIyBVc2UgYWRkaSBiZWNhdXNlIHRoYXQncyB3aGF0IGhhcyB0aGUgcGVlcGhvbGUKKyAg
ICBhZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAKICAgICBhc3NlcnQobWFjcm8gKG9rKSBicGd0ZXEg
dDAsIDAsIG9rIGVuZCkKICAgICBidHB6IHQwLCAuYXJndW1lbnRQcm9maWxlRG9uZQogICAgIGxv
YWRwIENvZGVCbG9jazo6bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMgKyBGaXhlZFZlY3Rvcjo6bV9z
dG9yYWdlICsgUmVmQ291bnRlZEFycmF5OjptX2RhdGFbdDFdLCB0MwogICAgIGJ0cHogdDMsIC5h
cmd1bWVudFByb2ZpbGVEb25lICMgV2hlbiB3ZSBjYW4ndCBKSVQsIHdlIGRvbid0IGFsbG9jYXRl
IGFueSBhcmd1bWVudCB2YWx1ZSBwcm9maWxlcy4KICAgICBtdWxwIHNpemVvZiBWYWx1ZVByb2Zp
bGUsIHQwLCB0MiAjIEFhYWFhaGhoaCEgTmVlZCBzdHJlbmd0aCByZWR1Y3Rpb24hCiAgICAgbHNo
aWZ0cCAzLCB0MCAjIG9mZnNldCBvZiBsYXN0IEpTVmFsdWUgYXJndW1lbnRzIG9uIHRoZSBzdGFj
ay4KLSAgICBhZGRwIHQyLCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJh
eSBpbiBDb2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLgorICAgIGFkZHAgdDIsIHQz
ICMgcG9pbnRlciB0byBlbmQgb2YgVmFsdWVQcm9maWxlIGFycmF5IGluIHRoZSB2YWx1ZSBwcm9m
aWxlIGFycmF5LgogLmFyZ3VtZW50UHJvZmlsZUxvb3A6CiAgICAgaWYgSlNWQUxVRTY0CiAgICAg
ICAgIGxvYWRxIFRoaXNBcmd1bWVudE9mZnNldCAtIDggKyBwcm9maWxlQXJnU2tpcCAqIDhbY2Zy
LCB0MF0sIHQyCkBAIC0yNTYzLDYgKzI1NjUsMTcgQEAgbWFjcm8gbm90U3VwcG9ydGVkKCkKICAg
ICBlbmQKIGVuZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVj
dCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgVW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVv
cGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisg
ICAgb3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKwogLy8g
RklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0X1dJTiBjb25kaXRpb24gaGVyZSwg
c2luY2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUgZmFsc2Ugb24gV2luZG93cwogLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNgogaWYgV0VCQVNT
RU1CTFkgYW5kIG5vdCBYODZfNjRfV0lOCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShyZXZpc2lvbiAyODMwNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDEwIEBAIHB1YmxpYzoKICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyKCkgPSBkZWZhdWx0OwogCiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlm
aWVyIGNyZWF0ZUZyb21DZWxsKEpTQ2VsbCogaWRlbnRpZmllcik7Ci0gICAgc3RhdGljIGlubGlu
ZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNo
ZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2Rl
QmxvY2sqLCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2Rl
QmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIGNvbnN0IElkZW50
aWZpZXImKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0
aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRp
YyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBDYWNoZWFibGVJZGVu
dGlmaWVyIGNyZWF0ZUZyb21SYXdCaXRzKHVpbnRwdHJfdCByYXdCaXRzKSB7IHJldHVybiBDYWNo
ZWFibGVJZGVudGlmaWVyKHJhd0JpdHMpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVh
YmxlSWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE0IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBl
KiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhjb2RlQmxvY2ssIGkuaW1wbCgpKTsKIH0KIAot
aW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Citpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxv
Y2stPmhhc0lkZW50aWZpZXIodWlkKSk7CiAgICAgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIo
dWlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBl
cy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlZFR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgiCiAKKyNpbmNsdWRlICJCYXNl
bGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJCeXRl
Y29kZUNhY2hlRXJyb3IuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIK
QEAgLTE5MTgsNiArMTkxOSw4IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bVZhbHVlUHJv
ZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bVZhbHVlUHJvZmlsZXM7IH0KICAgICB1bnNpZ25l
ZCBudW1BcnJheVByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1BcnJheVByb2ZpbGVzOyB9
CisgICAgdW5zaWduZWQgbnVtQmluYXJ5QXJpdGhQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1f
bnVtQmluYXJ5QXJpdGhQcm9maWxlczsgfQorICAgIHVuc2lnbmVkIG51bVVuYXJ5QXJpdGhQcm9m
aWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVW5hcnlBcml0aFByb2ZpbGVzOyB9CiAKIHByaXZh
dGU6CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1fdGhpc1JlZ2lzdGVyOwpAQCAtMTk1Miw2ICsxOTU1
LDggQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVQcm9maWxlczsKICAgICB1
bnNpZ25lZCBtX251bUFycmF5UHJvZmlsZXM7CisgICAgdW5zaWduZWQgbV9udW1CaW5hcnlBcml0
aFByb2ZpbGVzOworICAgIHVuc2lnbmVkIG1fbnVtVW5hcnlBcml0aFByb2ZpbGVzOwogCiAgICAg
Q2FjaGVkTWV0YWRhdGFUYWJsZSBtX21ldGFkYXRhOwogCkBAIC0yMTYwLDYgKzIxNjUsOCBAQCBB
TFdBWVNfSU5MSU5FIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlCiAgICAgLCBtX3JhcmVEYXRh
KGNhY2hlZENvZGVCbG9jay5yYXJlRGF0YShkZWNvZGVyKSkKICAgICAsIG1fdmFsdWVQcm9maWxl
cyhjYWNoZWRDb2RlQmxvY2subnVtVmFsdWVQcm9maWxlcygpKQogICAgICwgbV9hcnJheVByb2Zp
bGVzKGNhY2hlZENvZGVCbG9jay5udW1BcnJheVByb2ZpbGVzKCkpCisgICAgLCBtX2JpbmFyeUFy
aXRoUHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bUJpbmFyeUFyaXRoUHJvZmlsZXMoKSkKKyAg
ICAsIG1fdW5hcnlBcml0aFByb2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1VbmFyeUFyaXRoUHJv
ZmlsZXMoKSkKIHsKIH0KIApAQCAtMjMzNyw2ICsyMzQ0LDggQEAgQUxXQVlTX0lOTElORSB2b2lk
IENhY2hlZENvZGVCbG9jazxDb2RlQgogICAgIG1faGFzQ2hlY2twb2ludHMgPSBjb2RlQmxvY2su
bV9oYXNDaGVja3BvaW50czsKICAgICBtX251bVZhbHVlUHJvZmlsZXMgPSBjb2RlQmxvY2subV92
YWx1ZVByb2ZpbGVzLnNpemUoKTsKICAgICBtX251bUFycmF5UHJvZmlsZXMgPSBjb2RlQmxvY2su
bV9hcnJheVByb2ZpbGVzLnNpemUoKTsKKyAgICBtX251bUJpbmFyeUFyaXRoUHJvZmlsZXMgPSBj
b2RlQmxvY2subV9iaW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICBtX251bVVuYXJ5QXJp
dGhQcm9maWxlcyA9IGNvZGVCbG9jay5tX3VuYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CiAKICAg
ICBtX21ldGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9tZXRhZGF0YS5nZXQoKSk7
CiAgICAgbV9yYXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcmFyZURhdGEuZ2V0
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODAsNyArNDgw
LDcgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90bwogI2lmIEVOQUJM
RShKSVQpCiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3AoT3BO
ZWdhdGU6Ok1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZSByZXN1bHQsIEpTVmFsdWUgb3BlcmFu
ZCkKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQ
cm9maWxlOworICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gKm1ldGFkYXRhLm1fYXJp
dGhQcm9maWxlOwogICAgIHByb2ZpbGUub2JzZXJ2ZUFyZyhvcGVyYW5kKTsKICAgICBBU1NFUlQo
cmVzdWx0LmlzTnVtYmVyKCkgfHwgcmVzdWx0LmlzQmlnSW50KCkpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25F
eGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsyODksOCBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZlJhcmVEYXRhKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9yYXJlRGF0YSk7IH0KICAgICBz
dGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFzU3RyaW5nSW5SYXJlRGF0YSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihSYXJlRGF0YSwgbV9hc1N0cmluZyk7IH0KKyAgICBzdGF0aWMg
aW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9ja0ZvckNhbGwpOyB9Cisg
ICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3Qo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdCk7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJs
ZUJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw4ICs0MzQsNiBAQCB2b2lkIE9wdGlvbnM6OnJl
Y29tcHV0ZURlcGVuZGVudE9wdGlvbnMoCiAgICAgT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkg
PSBmYWxzZTsKICNlbmRpZgogCi0gICAgaWYgKCFpc0FSTTY0KCkpCi0gICAgICAgIE9wdGlvbnM6
OnVzZURhdGFJQygpID0gZmFsc2U7CiAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKICAg
ICAgICAgT3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCkgPSBmYWxzZTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDYgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJs
eUZhc3RNZW1vcnkoKTsKICAgICB2KEludDMyLCBldmFsVGhyZXNob2xkTXVsdGlwbGllciwgMTAs
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1heGltdW1FdmFsQ2FjaGVhYmxl
U291cmNlTGVuZ3RoLCAyNTYsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKLSAgICB2KEJvb2ws
IHJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVu
Q2hlY2twb2ludHNGb3JCYXNlbGluZSwgMTAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJ
bnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvclVwcGVyVGll
cnMsIDUwMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkBAIC01MzIsNiArNTMxLDcgQEAg
Ym9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZURhdGFJ
QywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDSW5PcHRp
bWl6aW5nSklULCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRh
SUNTaGFyaW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB1c2VCYXNl
bGluZUpJVENvZGVTaGFyaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAg
LyogRmVhdHVyZSBGbGFncyAqL1wKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5NiwxMCArMzk2LDE5IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6
cHJlcGFyZUZvckV4ZWN1dGkKICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVCeXRlY29kZSgpKQog
ICAgICAgICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7CiAKLSAgICBpZiAoT3B0aW9uczo6dXNlTExJ
bnQoKSkKLSAgICAgICAgc2V0dXBMTEludChjb2RlQmxvY2spOwotICAgIGVsc2UKLSAgICAgICAg
c2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CisgICAgYm9vbCBpbnN0YWxsZWRVbmxpbmtlZEJhc2Vs
aW5lQ29kZSA9IGZhbHNlOworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKFJlZlB0cjxCYXNlbGlu
ZUpJVENvZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5t
X3VubGlua2VkQmFzZWxpbmVDb2RlKSB7CisgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5s
aW5rZWRCYXNlbGluZUNvZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAg
IGluc3RhbGxlZFVubGlua2VkQmFzZWxpbmVDb2RlID0gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKyAg
ICBpZiAoIWluc3RhbGxlZFVubGlua2VkQmFzZWxpbmVDb2RlKSB7CisgICAgICAgIGlmIChPcHRp
b25zOjp1c2VMTEludCgpKQorICAgICAgICAgICAgc2V0dXBMTEludChjb2RlQmxvY2spOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrKTsKKyAgICB9CiAK
ICAgICBpbnN0YWxsQ29kZSh2bSwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmNvZGVUeXBlKCksIGNv
ZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291
bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IG9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21M
TEludFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAg
ICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRl
cldhcm1VcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9w
dGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1p
emVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25U
aHJlc2hvbGRSZWFjaGVkKCkKQEAgLTY1LDkgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0
aW1pemVTb29uKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1Vw
VG9CQlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRG
b3JCQlFPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hv
bGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29uKCkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0
aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlv
bnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICBzdHJ1Y3Qg
T1NSRW50cnlEYXRhIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVy
VXBDb3VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVRpZXJVcENvdW50LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBUaWVyVXBDb3VudDo6VGll
clVwQ291bnQoKQogewotICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JP
TUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgIHNldE5ld1RocmVzaG9sZChP
cHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogfQogCiBUaWVy
VXBDb3VudDo6flRpZXJVcENvdW50KCkgPSBkZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAo
dWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgYWZ0ZXIg
d2FybS11cC4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZv
ck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVz
aG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAg
IH0KIAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAt
OTAsMTQgKzkwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24o
dWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgbmV4dCBp
bnZvY2F0aW9uLiIpOwotICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCwgbnVsbHB0cik7CisgICAg
ICAgIHNldE5ld1RocmVzaG9sZCgwKTsKICAgICB9CiAKICAgICB2b2lkIG9wdGltaXplU29vbih1
aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBzb29uLiIp
OwogICAgICAgICAvLyBGSVhNRTogTmVlZCBhZGp1c3RtZW50IG9uY2Ugd2UgZ2V0IG1vcmUgaW5m
b3JtYXRpb24gYWJvdXQgd2FzbSBmdW5jdGlvbnMuCi0gICAgICAgIHNldE5ld1RocmVzaG9sZChP
cHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAg
IHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7
CiAgICAgfQogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGls
YXRpb25SZXN1bHQodWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25SZXN1bHQgcmVz
dWx0KQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDktMjQgIFNhYW0gQmFyYXRpICA8
c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgQnVpbGQgYW4gdW5saW5rZWQgYmFzZWxpbmUg
SklUCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjky
MjMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzgyMzIxNzcyPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0JhZy5oOgorICAgICAgICAqIHd0
Zi9QYWNrZWQuaDoKKyAgICAgICAgKFdURjo6UGFja2VkQWxpZ25lZFB0cjo6b3BlcmF0b3IqIGNv
bnN0KToKKwogMjAyMS0wOS0yNCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIHR5cGVjaGVja2luZyBgaXNgIG92ZXJsb2FkcyBmb3IgYHN0ZDo6dW5pcXVl
X3B0cmAsIGBXVEY6OlVuaXF1ZVJlZmAsIGFuZCBgV1RGOjpXZWFrUHRyYApJbmRleDogU291cmNl
L1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw2ICs2NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CiAg
ICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBCYWcmIG9wZXJhdG9yPShCYWc8
VCwgVT4mJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh1bndyYXBwZWRIZWFkKCkgPT0gb3Ro
ZXIudW53cmFwcGVkSGVhZCgpKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgICAg
IEJhZyBkZXN0cm95OworICAgICAgICBkZXN0cm95Lm1faGVhZCA9IHVud3JhcHBlZEhlYWQoKTsK
KyAgICAgICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgpOworICAgICAgICBvdGhlci5t
X2hlYWQgPSBudWxscHRyOworCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICB+
QmFnKCkKICAgICB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYWNr
ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL1dURi93dGYvUGFja2VkLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw3
ICsxODYsMTAgQEAgcHVibGljOgogICAgIH0KIAogICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiBnZXQoKTsgfQotICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQo
KTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUgPSBUPgorICAgIHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPCFzdGQ6OmlzX3ZvaWRfdjxVPiwgVSY+Ojp0eXBlIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuICpnZXQoKTsgfQorCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biAhZ2V0KCk7IH0KIAogICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1w
bGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4K
</data>
<flag name="commit-queue"
          id="462793"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439190</attachid>
            <date>2021-09-24 13:41:57 -0700</date>
            <delta_ts>2021-09-24 13:57:45 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>646253</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzOCBA
QAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhZGRzIGFuICJ1bmxpbmtlZCIgYmFzZWxpbmUgSklUIHRvIEpTVkFMVUU2
NCBwbGF0Zm9ybXMuIFRoZSBKSVQKKyAgICAgICAgY29kZSBwcm9kdWNlZCBieSB0aGlzIGJhc2Vs
aW5lIEpJVCBjYW4gYmUgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3MgdGhhdAorICAgICAg
ICBzaGFyZSBhbiBVbmxpbmtlZENvZGVCbG9jay4gVGhlIGJlbmVmaXQgb2YgdGhpcyBpcywgaWYg
d2UncmUgY3JlYXRpbmcgYSBDb2RlQmxvY2sKKyAgICAgICAgZnJvbSBhbiBVbmxpbmtlZENvZGVC
bG9jayB0aGF0IGFscmVhZHkgY29tcGlsZWQgYW4gdW5saW5rZWQgYmFzZWxpbmUgSklUCisgICAg
ICAgIGluc3RhbmNlLCB0aGlzIG5ldyBDb2RlQmxvY2sganVzdCBzdGFydHMgb2ZmIGV4ZWN1dGlu
ZyBpbiB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgICJmb3IgZnJlZSIuCisgICAgICAgIAorICAg
ICAgICBUbyBtYWtlIHRoaXMgd29yaywgdGhlIGNvZGUgd2UgZW1pdCBub3cgbmVlZHMgdG8gYmUg
aW5kZXBlbmRlbnQgb2YgYSBzcGVjaWZpYworICAgICAgICBDb2RlQmxvY2sgaW5zdGFuY2UuIFdl
IHVzZSBhIENvZGVCbG9jayBpbnN0YW5jZSBmb3IgbWluaW1hbCBwcm9maWxpbmcgaW5mb3JtYXRp
b24KKyAgICAgICAgd2hlbiBjb21waWxpbmcsIGJ1dCBvdGhlcndpc2UsIHRoZSBjb2RlIGlzIHRp
ZWQgdG8gdGhlIFVubGlua2VkQ29kZUJsb2NrLiBXaGVuCisgICAgICAgIHdlIG5lZWQgQ29kZUJs
b2NrIHNwZWNpZmljIGluZm9ybWF0aW9uLCB3ZSBsb2FkIGl0LiBUaGlzIHVzdWFsbHkgbWVhbnMg
dGhpbmdzCisgICAgICAgIGxpa2Ugd2UnbGwgbG9hZCB0aGluZ3MgZnJvbSB0aGUgTWV0YWRhdGEg
ZHluYW1pY2FsbHkuIFRoaXMgcGF0Y2ggYWxzbyBhZGRzIGEKKyAgICAgICAgImxpbmtlZCBjb25z
dGFudCBwb29sIiBjb25jZXB0LCBhbmQgYW55dGltZSB3ZSBpbnN0YW50aWF0ZSBzdWNoIGEgQ29k
ZUJsb2NrLAorICAgICAgICB3ZSBhbHNvIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcyAibGlua2Vk
IGNvbnN0YW50IHBvb2wiLiBUaGlzIGNvbnRhaW5zIHRoaW5ncworICAgICAgICBsaWtlIG91ciBp
bmxpbmUgY2FjaGUgZGF0YSBzdHJ1Y3R1cmVzIChTdHJ1Y3R1cmVTdHViSW5mbyopLCBKU0dsb2Jh
bE9iamVjdCosCisgICAgICAgIGV0Yy4KKyAgICAgICAgCisgICAgICAgIFVubGlua2VkIGJhc2Vs
aW5lIEpJVCBhbHdheXMgcnVucyBJQ3MgaW4gdGhlICJkYXRhIiBtb2RlLiBUbyBtYWtlIHRoaXMg
d29yaywgSQorICAgICAgICBtYWRlIGRhdGEgSUNzIHdvcmsgb24geDg2XzY0LiBUbyBkbyB0aGlz
LCB3ZSBubyBsb25nZXIgY2FsbC9yZXQgdG8gdGhlIElDLgorICAgICAgICBJbnN0ZWFkLCB3ZSBq
dW1wIHRvIHRoZSBJQywgYW5kIHRoZSBJQyBqdW1wcyBiYWNrIGJ5IGxvYWRpbmcgdGhlICJkb25l
IiBsb2NhdGlvbgorICAgICAgICBmcm9tIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBkeW5hbWljYWxs
eS4gVGhpcyBzaW1wbGlmaWVzIHRoZSBkZXNpZ24gdG8gbm90IGJlCisgICAgICAgIGJhc2VkIG9u
IHRoZSBhcm02NCBjYWxsaW5nIGNvbnZlbnRpb24sIGFuZCBrZWVwcyB0aGUgc2FtZSBwZXJmb3Jt
YW5jZSBjaGFyYWN0ZXJpc3RpY3MuIAorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNv
IGFkZHMgYSBuZXcgdmVyc2lvbiBvZiBJbmxpbmVBY2Nlc3MgdGhhdCBpcyBvbmx5IHVzZWQgaW4g
YmFzZWxpbmUKKyAgICAgICAgSklUIChmb3Igbm93KS4gSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIG1h
a2UgdGhlIERGRy9GVEwgYWxzbyB1c2UgdGhpcyBmb3IgRGF0YQorICAgICAgICBJQ3MuIEJ1dCB3
ZSBkb24ndCBuZWVkIHRvIGRvIHRoYXQgeWV0IHNpbmNlIHRob3NlIHRpZXJzIGRvbid0IHVzZSBk
YXRhIElDcyBieQorICAgICAgICBkZWZhdWx0LiBUaGUgYmFzZWxpbmUgSklUIG5vdyBoYXMgYSBw
dXJlIGRhdGEgSUMgYXBwcm9hY2ggdG8gSW5saW5lQWNjZXNzLiBTbworICAgICAgICBpbnN0ZWFk
IG9mIHJlcGF0Y2hpbmcgY29kZSwgd2UgcmVwYXRjaCBmaWVsZHMgd2UgbG9hZCBkeW5hbWljYWxs
eS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgYSBmZXcgdGhp
bmdzIGluIE9TUiBleGl0LCB3aGVyZSBib3RoIERGRy9GVEwgd2VyZQorICAgICAgICBzdG9yaW5n
IGNhbGxlZSBzYXZlcyB0byB0aGUgY2FsbGVlIHNhdmVzIGJ1ZmZlciBpbiBhIHdlaXJkIHBsYWNl
LCBhbmQgc2VwYXJhdGUKKyAgICAgICAgZnJvbSBvbmUgYW5vdGhlci4gSSBub3RpY2VkIHRoaXMg
Y29kZSBjYW4gYmUgc2ltcGxpZmllZCBpZiB3ZSBqdXN0IHN0b3JlCisgICAgICAgIGNhbGxlZSBz
YXZlcyBhdCB0aGUgZW5kIG9mIHRoZSBPU1IgZXhpdCBoYW5kbGVyLCBhbmQgZnJvbSBjb21tb24g
SklUIGVtaXNzaW9uCisgICAgICAgIGNvZGUuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNo
IGFsc28gZml4ZXMgYSBidWcgd2hlcmUgd2UgY291bGQgZW5kIHVwIHdpdGggdGhlIHdyb25nIChh
bmQgYWx3YXlzCisgICAgICAgIG1vcmUgbmVnYXRpdmUpIFNQIGluIHRoZSBiYXNlbGluZSBKSVQu
IFRoaXMgY291bGQgaGFwcGVuIHdoZW4gd2UgT1NSIGV4aXQKKyAgICAgICAgZnJvbSBhbiBpbmxp
bmVkIGdldHRlci9zZXR0ZXIuIFRoZSBPU1IgZXhpdCBjb2RlIHB1dHMgdGhlIHJldHVybiBQQyB3
aGVuCisgICAgICAgIHJldHVybmluZyB0byB0aGUgY2FsbCBzaXRlIG9mIHRoZSBnZXR0ZXIvc2V0
dGVyIHRvIGJlIHRoZSBpbmxpbmUgY2FjaGUncworICAgICAgICAiZG9uZSBsb2NhdGlvbiIuIEhv
d2V2ZXIsIHRoaXMgImRvbmUgbG9jYXRpb24iIGRpZG4ndCB1c2VkIHRvIHJlc3RvcmUgU1AuCisg
ICAgICAgIFRoaXMgcGF0Y2ggY29uc2VydmF0aXZlbHkgbWFrZXMgaXQgc28gdGhhdCB3ZSByZXN0
b3JlIHRoZSBTUCBhdCB0aGVzZSBzaXRlcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbWVh
c3VyZWQgYXMgYSAxJSBzcGVlZHVwIG9uIFNwZWVkb21ldGVyMi4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlT3Bl
cmFuZHNGb3JDaGVja3BvaW50Lmg6CisgICAgICAgIChKU0M6OnZhbHVlUHJvZmlsZU9mZnNldEZv
cik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjplbWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RmFz
dFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKToKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgpOgorICAgICAgICAo
SlNDOjpDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMpOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNsb3dT
dHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjphZGRyZXNzT2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZSk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6ZnJhbWVSZWdpc3RlckNvdW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiaW5hcnlB
cml0aFByb2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5hcnlBcml0aFBy
b2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluZFBDKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpqaXRTb29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRO
ZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRBZGRJQyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUTXVsSUMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVFN1YklDKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRKSVROZWdJQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6aml0QWZ0ZXJXYXJtVXApOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29u
c3RhbnRQb29sKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFzZWxpbmVKSVRDb25zdGFudFBvb2wpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpkb250SklUQW55dGltZVNvb24pOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duQ2VsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6YWRkTWF0aElDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzZXRKSVRDb2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRD
b2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzd2l0Y2hKdW1wVGFi
bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJh
c2VsaW5lU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNlbGlu
ZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZGZnU3dp
dGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdTdHJpbmdTd2l0Y2hK
dW1wVGFibGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uu
aDoKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjpzZXRUaHJlc2hvbGQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0
aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJ
ZE1ldGFkYXRhLmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0
aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpHZXRCeUlkTW9kZU1ldGFk
YXRhOjpvZmZzZXRPZk1vZGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcDoK
KyAgICAgICAgKEpTQzo6R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0
U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEdl
dHRlcik6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6
OkluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToK
KyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5s
aW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UpOgorICAgICAgICAoSlND
OjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChK
U0M6OklubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OklubGlu
ZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyk6CisgICAgICAgIChKU0M6OklubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2Vzcyk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmg6
CisgICAgICAgICogYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmg6CisgICAgICAgIChK
U0M6Okl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMpOgorICAgICAgICAq
IGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6CisgICAgICAgIChKU0M6OkxMSW50Q2FsbExp
bmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSk6CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2Rl
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAo
SlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OmNhbGN1bGF0ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0
aW9uSGFuZGxpbmcpOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNl
cnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMpOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgICogYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0
YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5jcHA6CisgICAgICAg
IChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OmluaXRHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0UHV0QnlJZFJlcGxhY2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5p
dEluQnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNz
Q2FzZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZE
b25lTG9jYXRpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHA6CisgICAg
ICAgIChKU0M6OnByaW50U3VwZXJTYW1wbGVyU3RhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0lk
ZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dGhyZXNob2xkRm9y
SklUKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJv
ZmlsZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6Omluc3RydWN0aW9uQXQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmJpbmFyeUFyaXRoUHJvZmlsZSk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp1bmFyeUFyaXRoUHJvZmlsZSk6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpsbGludEV4ZWN1dGVDb3VudGVyKToKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaDoKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRNZXRhZGF0YVRhYmxlOjpvZmZzZXRJbk1ldGFkYXRhVGFibGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNl
OjpWYWx1ZVByb2ZpbGVCYXNlKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQmFzZTo6Y2xl
YXJCdWNrZXRzKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVj
a2V0KToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb2RlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAqIGRmZy9E
RkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxpbmsp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJl
cGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmhhbmRsZUV4aXRDb3VudHMp
OgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRK
dW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRQcml2YXRlTmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVWYWx1ZVN1Yik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dTaGFkb3dDaGlja2VuVGFpbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExKSVRDb2Rl
Lmg6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Omxpbmsp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjphZGRNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlVW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpjb21waWxlQmluYXJ5TWF0aElDKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVB1dFByaXZhdGVOYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAg
ICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29t
cGlsZVN0dWIpOgorICAgICAgICAqIGdlbmVyYXRvci9NZXRhZGF0YS5yYjoKKyAgICAgICAgKiBq
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpz
dG9yZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVh
bENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMu
aDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6CisgICAgICAgICogaml0L0Jhc2VsaW5lSklUQ29kZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKToKKyAg
ICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZGRKSVRNdWxJQyk6CisgICAgICAgIChKU0M6Ok1h
dGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMpOgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFk
ZEpJVE5lZ0lDKToKKyAgICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MpOgor
ICAgICAgICAoSlNDOjpCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAg
IChKU0M6OkJhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAgICogaml0
L0Jhc2VsaW5lSklUQ29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SklUQ29uc3RhbnRQb29s
OjphZGQpOgorICAgICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OnNpemUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OmF0IGNvbnN0KToKKyAgICAgICAgKiBqaXQvQmFz
ZWxpbmVKSVRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6QmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6
ZSk6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkNDYWxs
SGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKToKKyAgICAgICAgKEpTQzo6
Q0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldCk6CisgICAgICAgICogaml0
L0NDYWxsSGVscGVycy5oOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHA6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oOgorICAgICAgICAq
IGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpDYWxsRnJhbWVTaHVmZmxlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpwcmVwYXJlRm9yVGFpbENhbGwpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5o
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c25hcHNob3QgY29uc3QpOgorICAg
ICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OkpJVCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRWYXJS
ZWFkT25seUNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc2V0U1ApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5k
Q29uc3RhbnRQb29sUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpm
aW5hbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcik6CisgICAgICAgIChK
U0M6OkpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKToKKyAgICAgICAgKiBqaXQvSklULmg6Cisg
ICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVnYXRlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2FkZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tdWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3ViKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2Fs
bEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2l0ZXJhdG9yX25leHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX25leHQpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxl
U2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dD
YXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpT
Qzo6SklUQ29kZTo6dXNlRGF0YUlDKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6cGNUb0NvZGVP
cmlnaW5NYXApOgorICAgICAgICAqIGppdC9KSVRDb21waWxhdGlvbktleS5jcHA6CisgICAgICAg
IChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklU
Q29tcGlsYXRpb25LZXkuaDoKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OkpJVENv
bXBpbGF0aW9uS2V5KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJhdG9y
ISBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpvcGVy
YXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Omhhc2ggY29u
c3QpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6cHJvZmlsZWRCbG9jayBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXpl
KToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJ
VEdldEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUdldEJ5SWRJbmxpbmVB
Y2Nlc3MpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJ
VFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkpJVERlbEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklURGVsQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAg
IChKU0M6OkpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAo
SlNDOjpKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpKSVRHZXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXRoKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0
YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudEludCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6aXNLbm93bkNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdldENv
bnN0YW50T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6
bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmFkdmFuY2VUb05l
eHRDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdExvYWREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkpJVDo6anVtcFRhcmdldCk6CisgICAgICAgIChKU0M6OkpJVDo6
bG9hZFB0ckZyb21NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZDMyRnJvbU1ldGFk
YXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkOEZyb21NZXRhZGF0YSk6CisgICAgICAgIChK
U0M6OkpJVDo6c3RvcmU4VG9NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6c3RvcmUzMlRv
TWV0YWRhdGEpOgorICAgICAgICAoSlNDOjpKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
SklUOjpsb2FkR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29kZUJsb2Nr
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEdldFB1dEluZm8pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZSk6IERlbGV0ZWQuCisgICAg
ICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9u
dWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzVHJ1dGh5
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dp
dGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVj
a190cmFwcyk6CisgICAgICAgIChKU0M6OkpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5l
d0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYXJndW1lbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9v
Zik6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdHlwZW9mX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SklUX09QRVJBVElPTik6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBqaXQvSklUUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmtleSk6CisgICAgICAg
ICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6c2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9k
ZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
aW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQcml2YXRlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SGFzUHJpdmF0ZVNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19w
cml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRl
X2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmspOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29w
ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKToKKyAgICAg
ICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF90
b19zY29wZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1
cmVWYXIpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9wcml2YXRlX2Jy
YW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9pbnRl
cm5hbF9maWVsZCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUdldEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeSk6CisgICAgICAgIChK
U0M6OnRyeUNhY2hlSW5CeSk6CisgICAgICAgIChKU0M6OnVubGlua0NhbGwpOgorICAgICAgICAq
IGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpoYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxl
RXhjZXB0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6Cisg
ICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6
aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRf
U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayk6CisgICAgICAgICogcnVudGltZS9DYWNoZWRU
eXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtQmluYXJ5QXJpdGhQ
cm9maWxlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtVW5hcnlB
cml0aFByb2ZpbGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9j
a1R5cGU+OjplbmNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoK
KyAgICAgICAgKEpTQzo6dXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKToKKyAgICAg
ICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlv
bnMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1l
L1NjcmlwdEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpw
cmVwYXJlRm9yRXhlY3V0aW9uSW1wbCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRUaWVyVXBD
b3VudGVyLmg6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6b3B0aW1p
emVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6
b3B0aW1pemVTb29uKToKKyAgICAgICAgKiB3YXNtL1dhc21UaWVyVXBDb3VudC5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50OjpUaWVyVXBDb3VudCk6CisgICAgICAgICogd2Fz
bS9XYXNtVGllclVwQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6Om9w
dGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6b3B0
aW1pemVOZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50Ojpv
cHRpbWl6ZVNvb24pOgorCiAyMDIxLTA5LTIzICBQaGlsaXAgQ2hpbWVudG8gIDxwY2hpbWVudG9A
aWdhbGlhLmNvbT4KIAogICAgICAgICBWYXJpb3VzIHR3ZWFrcyBpbiBwcmVwYXJhdGlvbiBmb3Ig
VGVtcG9yYWwuSW5zdGFudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC04MzcsNiArODM3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQQogCiAgICAgaml0L0Fzc2VtYmx5SGVscGVycy5oCiAgICAgaml0
L0Fzc2VtYmx5SGVscGVyc1Nwb29sZXJzLmgKKyAgICBqaXQvQmFzZWxpbmVKSVRDb2RlLmgKICAg
ICBqaXQvQ0NhbGxIZWxwZXJzLmgKICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCiAgICAg
aml0L0V4ZWN1dGFibGVNZW1vcnlIYW5kbGUuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC02MTksNiArNjE5LDcgQEAgaW50ZXJwcmV0ZXIvU2hhZG93
Q2hpY2tlbi5jcHAKIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKIAogaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAKK2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCiBqaXQvQmFzZWxpbmVKSVRQbGFu
LmNwcAogaml0L0JpbmFyeVN3aXRjaC5jcHAKIGppdC9DQ2FsbEhlbHBlcnMuY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTkwMCw2ICs5MDAsNyBAQAogCQk1MkNEMEY1RDIyNDJGNTY5MDA0QTE4
QTUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlv
bi5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0MkY1NjkwMDRBMThBNSAvKiBKYXZhU2Ny
aXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJh
bWV3b3JrICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNEMEY2NzIy
NDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87IH07CisJCTUyREQwMDA4MjZFMDM5Qjkw
MDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJ
VENvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MkVFRDc5NDI0OTJCODcwMDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRUVENzkzMjQ5MkI4Njgw
MDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovOyB9OwogCQk1MkY2QzM1RTFFNzFFQjA4
MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyB9OwogCQk1MzBBNjZCOTFGQTNFNzhC
MDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCMTFGQTNFNzdBMDAyNkE1NDUgLyogVW5pZmll
ZFNvdXJjZTMtbW0ubW0gKi87IH07CkBAIC0xMjIwLDcgKzEyMjEsNyBAQAogCQk3OTg3MkM0ODIy
MUJCQUYzMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODcyQzQ3MjIxQkJBRUQwMDhDNjk2OSAvKiBKU0Jh
c2VJbnRlcm5hbC5oICovOyB9OwogCQk3OTlFRjdDNDFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1Rv
T3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBMDkwODAxRDc2ODQ2
NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3OUEy
MjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyog
QXJpdGhQcm9maWxlLmggKi87IH07CisJCTc5QTIyODM2MUQzNUQ3MUYwMEQ4RTA2NyAvKiBBcml0
aFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUFCQjE3RTFFNUNDQjU3MDA0
NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUFCQjE3QzFFNUNDQjU3MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1i
bGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzlBQzMwRkYxRjk5NTM2NDAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBQzMw
RkUxRjk5NTM2MzAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oICov
OyB9OwogCQk3OUFGMEJFNDFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFGMEJF
MzFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM2NzQsNiArMzY3NSw4IEBA
CiAJCTUyQ0QwRjY0MjI0MkY1NjkwMDRBMThBNSAvKiB0ZXN0ZGZnICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFi
bGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0ZGZnOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRm
Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0ZGZnLmNwcDsg
cGF0aCA9IGRmZy90ZXN0ZGZnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJE
MTMwOEYyMjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9IGZvby5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJE
RDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCYXNlbGluZUpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJERDAw
MDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBCYXNlbGluZUpJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MkVFRDc5MjI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzYsNiArNjI3OSw4IEBA
CiAJCQkJNkI3NjdFN0EyNjc5MUYyNzAwMTdGOEQxIC8qIEFzc2VtYmx5SGVscGVyc1Nwb29sZXJz
LmggKi8sCiAJCQkJNzIzOTk4RjYyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5j
cHAgKi8sCiAJCQkJNzIzOTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5o
ICovLAorCQkJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuY3Bw
ICovLAorCQkJCTUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAq
LywKIAkJCQkwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNwcCAqLywK
IAkJCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi8sCiAJCQkJ
NjVCODM5MkQxQkFDQTlEMzAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmNwcCAqLywKQEAgLTk3
MzAsNiArOTczNSw3IEBACiAJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1OTUwIC8qIERGR0Zsb3dN
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdG
bHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJERDAwMDgyNkUwMzlCOTAw
NTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTUx
QUIzRDhCRTAwQkJCOEU4IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjY5Q0M4OTE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzODZGRDdFMjZFODY3QjgwMEU0QzI4QiAvKiBUZW1wb3JhbFBsYWluVGltZS5oIGlu
IEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxNSArMjAyLDE1
IEBAIFJlZlB0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9tU3RydWMKICAgICBzd2l0Y2gg
KHN0dWJJbmZvLmNhY2hlVHlwZSgpKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxm
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIp
OwotICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwg
TG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBQcm94eWFi
bGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBMb2FkLCBpZGVudGlmaWVyLCBzdHViSW5m
by5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8uaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkp
OwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgogICAgICAgICBSRUxFQVNF
X0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICByZXR1cm4g
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmllciwgc3R1Yklu
Zm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBS
ZXBsYWNlLCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8uaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJ
ZFNlbGY6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRp
Zmllcik7Ci0gICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBJbkhp
dCwgaWRlbnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNl
OjpjcmVhdGUodm0sIG93bmVyLCBJbkhpdCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZP
ZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNh
c2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1Yklu
Zm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKQEAgLTE5ODUsMTQgKzE5ODUsMTAgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAvLyBTdHVmZiBmb3Ig
Y3VzdG9tIGdldHRlcnMvc2V0dGVycy4KICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJh
dGlvbkNhbGw7CiAKKwogICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNh
bGN1bGF0aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAgICAgICAvLyBleGNlcHRp
b24gaGFuZGxpbmcgY2FsbCBzaXRlLgotICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVy
c1RvUHJlc2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VE
YXRhSUMoKSkKLSAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRS
ZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgotICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNw
aWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tG
b3JDYWxsKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAgIEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0
ZXJzVG9TdGFja0ZvckNhbGwoKTsKIAogICAgICAgICBhdXRvIHJlc3RvcmVMaXZlUmVnaXN0ZXJz
RnJvbVN0YWNrRm9yQ2FsbCA9IFsmXShBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUm
IHNwaWxsU3RhdGUsIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlKSB7CiAgICAgICAgICAgICBSZWdp
c3RlclNldCBkb250UmVzdG9yZTsKQEAgLTIwNzksOCArMjA3NSw3IEBAIHZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIEFTU0VSVCghKG51bWJlck9m
UmVnc0ZvckNhbGwgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSk7CiAgICAgICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXpl
b2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwogCi0gICAgICAgICAgICB1
bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQotICAgICAgICAgICAgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0Zv
ckNhbGwpOworICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxs
ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVy
T2ZCeXRlc0ZvckNhbGwpOwogCiAgICAgICAgICAgICBqaXQuc3ViUHRyKAogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2Fs
bCksCkBAIC0yMTM4LDYgKzIxMzMsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChB
Y2Nlc3NHZW5lCiAKICAgICAgICAgICAgIGludCBzdGFja1BvaW50ZXJPZmZzZXQgPSAoY29kZUJs
b2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpIC0gc3RhdGUucHJl
c2VydmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZS5udW1iZXJPZkJ5dGVzUHJlc2VydmVkIC0gc3BpbGxT
dGF0ZS5udW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb247CiAgICAg
ICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKwogICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUg
PSBpc0dldHRlcigpOwogICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tG
b3JDYWxsKHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7CiAKQEAgLTIyNjQsMTIgKzIy
NjAsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAKICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5
Ojp0YXJnZXRPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgICAgICBSZWdpc3RlclNl
dCBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAg
aWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAgICAgZXh0cmFSZWdpc3Rl
cnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCi0gICAgICAgICAg
ICBhdXRvIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9y
Q2FsbFdpdGhvdXRFeGNlcHRpb25zKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAg
ICAgICBhdXRvIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNr
Rm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3Vt
ZW50czxkZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+KENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cigmdm0pLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGppdC5wcmVw
YXJlQ2FsbE9wZXJhdGlvbih2bSk7CkBAIC0yMzY0LDEwICsyMzU1LDYgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVy
c1RvUHJlc2VydmUuc2V0KGJhc2VHUFIpOwogICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJz
VG9QcmVzZXJ2ZS5zZXQodmFsdWVSZWdzKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgICAgICAgICAg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgogICAg
ICAgICAgICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRl
ID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3Rl
cnNUb1ByZXNlcnZlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmUzMigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3Qu
cmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGlzdC5yYgkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBAIG9w
X2dyb3VwIDpQcm9maWxlZEJpbmFyeU9wLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmlu
YXJ5QXJpdGhQcm9maWxlCisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTMsNyAr
MzUzLDcgQEAgb3BfZ3JvdXAgOlVuYXJ5SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgICAgIHNyY0Rz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJp
dGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5
QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDp0b19vYmplY3QsCkBAIC0zODYsNyArMzg2LDcg
QEAgb3AgOm5lZ2F0ZSwKICAgICAgICAgcmVzdWx0VHlwZTogUmVzdWx0VHlwZSwKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUs
CisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3Ag
Om5vdCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJh
bmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNo
ZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjggQEAgVmFsdWVQcm9maWxl
KiB2YWx1ZVByb2ZpbGVGb3JJbXBsKEJ5dGVjbwogICAgICAgICByZXR1cm4gJm1ldGFkYXRhLm1f
cHJvZmlsZTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgordWludHB0cl90IHZh
bHVlUHJvZmlsZU9mZnNldEZvcih1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCit7CisgICAgVU5V
U0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRleCk7CisgICAgaWYgY29uc3RleHByIChCeXRlY29kZTo6
b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3Jfb3BlbikgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9p
bnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1
cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOworICAgICAg
ICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZk5leHRQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKEJ5
dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CisgICAgICAgIHN3aXRjaCAo
Y2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVO
ZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRSZXN1bHRQcm9maWxl
KCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJldHVybiBCeXRlY29k
ZTo6TWV0YWRhdGE6Om9mZnNldE9mRG9uZVByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJh
dG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mVmFs
dWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIHJldHVybiBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29k
ZU1ldGFkYXRhPgogYm9vbCBoYXNWYWx1ZVByb2ZpbGVGb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0
YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE0LDExICsxMTQsNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5r
KFZNJiB2bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7CiB9CiAKLUNvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgp
Ci17Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFn
PihtX2Zhc3RQYXRoU3RhcnQpOwotfQotCiBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KCFpc0RhdGFJQygpKTsKQEAgLTIyNSw2ICsyMjAsMTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnNl
dE1heEFyZ3VtZW50Q291bnRJbgogICAgIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PSB2YWx1ZTsKIH0KIAorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExp
bmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVjdCgp
ICYmIGlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxK
U0ludGVybmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQpOworfQorCiB2b2lkIENh
bGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRvIGhhbmRsZVNwZWNpZmlj
Q2FsbGVlID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKQEAgLTI5OCwyMyArMjk5LDExIEBA
IHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGMKICAgICBtX2ZyYW1lU2h1
ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBD
YWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewotICAgIHNldFVzZXNEYXRh
SUNzKHVzZURhdGFJQyk7Ci0gICAgaWYgKGlzRGF0YUlDKCkpIHsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7Ci0gICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZv
R1BSKTsKLSAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9H
UFI7Ci0gICAgfQotCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAg
aml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBt
X2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
ZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNs
b3dQYXRoOwogCi0gICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICBpZiAodXNlRGF0YUlDID09IFVz
ZURhdGFJQzo6WWVzKSB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hS
ZWdpc3RlcigpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2Fs
bExpbmtJbmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7IAogICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKQEAgLTMyMyw3ICszMTIsNyBAQCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAgICAgICBnb1BvbHlt
b3JwaGljID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNo
R1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5bW9ycGhpY0NhbGxlZU1hc2spKTsK
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAg
IHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgZ29Qb2x5bW9ycGhpYy5saW5rKCZq
aXQpOyAvLyBQb2x5bW9ycGhpYyBzdHViIGhhbmRsZXMgdGFpbCBjYWxsIHN0YWNrIHByZXAuCiAg
ICAgICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZv
R1BSLCBvZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFn
KTsKQEAgLTMzNiwxNCArMzI1LDE2IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmUKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2go
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKSk7CiAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGNhbGw7Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFp
bENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAg
Y2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBj
YWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJ
bmZvKTsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAgICAgICAgICAgIHUu
Y29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJ
Qy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJu
YWxQdHJUYWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2Nh
bGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNh
bGxlZUNoZWNrKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNTMsMTMgKzM0NCwzNCBAQCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlD
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0
RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywg
bnVsbHB0cik7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKworICAgIGlmIChpc0Rh
dGFJQygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJS
ZWc6OkludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHUuZGF0YUlDLm1fY2Fs
bExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKworICAgIHJldHVybiBlbWl0
RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURh
dGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQs
IEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VE
YXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwot
ICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9H
UFIsIHVzZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKKyAgICBzZXRVc2Vz
RGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlz
LCBqaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgVXNlRGF0YUlDOjpObywgaXNUYWlsQ2Fs
bCgpLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVy
biBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4gZW1p
dEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBV
c2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKIH0KIAog
dm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0
KQpAQCAtMzY5LDE3ICszODEsMzIgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChW
TSYgdm0sIAogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
Miwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9
CiAKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBqaXQubW92ZShjYWxsTGlu
a0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSks
IEpTRW50cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJ
QyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBtX2NvZGVPcmln
aW4gPSBDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAg
IHNldFVwQ2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2FsbGVlR1BSKTsKKyAg
ICBtX2RvbmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbjsKKyAg
ICBpZiAodW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkgeworICAgICAgICAv
LyBGSVhNRTogSXQnZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBzdHJ1
Y3R1cmUuCisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1l
U2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsKKyAg
ICB9CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlDLm1f
Y2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2FsbERl
c3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUg
cmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6
ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0VfQVNT
RVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7
CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhT
dGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0
YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgdS5j
b2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0lu
dGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQu
bGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0UGF0
aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRo
U3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwgdGhp
cyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNp
Z25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2Fs
bExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGlu
ZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAg
IGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwK
ICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAg
ICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVE
YXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0
dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50
OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgot
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVy
cyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVU
VVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1w
bChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGlj
OgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRo
KENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJl
Rm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBh
cmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZh
c3RQYXRoKENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2Fs
bCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBzdGF0
aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wg
aXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0
YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsyNDks
NiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAotICAg
IEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zbG93
U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsKICAg
ICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBt
X21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJfdCBt
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVibGlj
OgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlvblR5
cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9jYXRp
b25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAgICAg
IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxvY2F0
aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9z
bG93UGF0aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAKQEAg
LTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9y
aQogICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3QgVW5s
aW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsgLy8g
Q3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxseSBw
cm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBl
OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZsZURh
dGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw4ICsyNzksNiBAQCBDb2RlQmxvY2s6OkNvZGVC
bG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihm
YWxzZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9oYXNC
ZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNl
KQotICAgICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUoZmFsc2UpCiAgICAgLCBtX251
bUNhbGxlZUxvY2FscyhvdGhlci5tX251bUNhbGxlZUxvY2FscykKICAgICAsIG1fbnVtVmFycyhv
dGhlci5tX251bVZhcnMpCiAgICAgLCBtX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKG90aGVyLm1f
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCkBAIC0zMDgsNiArMzA2LDggQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3Zp
ZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKKwor
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxpbnRFeGVjdXRl
Q291bnRlcigpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwog
fQpAQCAtMzE4LDcgKzMxOCw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIEMKICAgICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKICAgICBvcHRpbWl6ZUFmdGVy
V2FybVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKIAogICAgIGlmIChvdGhlci5tX3JhcmVE
YXRhKSB7CiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTMzNiw4ICsz
MzUsNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBt
X2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0
aW9uKGZhbHNlKQogICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwg
bV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNlKQotICAgICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUoZmFsc2UpIAogICAgICwgbV9udW1DYWxsZWVMb2NhbHModW5saW5rZWRDb2RlQmxvY2st
Pm51bUNhbGxlZUxvY2FscygpKQogICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5u
dW1WYXJzKCkpCiAgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQpAQCAtMzU5LDcg
KzM1Niw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAg
IEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlu
a2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9sbGludEV4ZWN1
dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CisKICAg
ICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcwLDcgKzM2OSw4
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIC8vIHdlIGNhbid0
IGdlbmVyYXRlIGR1cmluZyB1bmxpbmtlZCBieXRlY29kZSBnZW5lcmF0aW9uLiBUaGlzIHByb2Nl
c3MgaXMgbm90IGFsbG93ZWQgdG8gZ2VuZXJhdGUgY29udHJvbAogLy8gZmxvdyBvciBpbnRyb2R1
Y2UgbmV3IGxvY2Fscy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB3ZSByZWx5IG9uIGxpdmVuZXNz
IGFuYWx5c2lzIHRvIGJlIHRoZSBzYW1lIGZvcgogLy8gYWxsIHRoZSBDb2RlQmxvY2tzIG9mIGFu
IFVubGlua2VkQ29kZUJsb2NrLiBXZSByZWx5IG9uIHRoaXMgZmFjdCBieSBjYWNoaW5nIHRoZSBs
aXZlbmVzcyBhbmFseXNpcwotLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLgorLy8gaW5zaWRl
IFVubGlua2VkQ29kZUJsb2NrLiBBbHNvLCBCYXNlbGluZSBKSVQgY29kZSBpcyBzaGFyZWQgYmV0
d2VlbiBhbGwgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jaywKKy8vIHNvIHRoZSBi
eXRlY29kZSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBiZXR3ZWVuIENvZGVCbG9ja3Mgc2hhcmluZyBh
biBVbmxpbmtlZENvZGVCbG9jay4KIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sq
IHVubGlua2VkQ29kZUJsb2NrLAogICAgIEpTU2NvcGUqIHNjb3BlKQogewpAQCAtNDcxLDYgKzQ3
MSwyMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAg
IGJyZWFrOyBcCiAgICAgfQogCisgICAgdW5zaWduZWQgYmluYXJ5UHJvZmlsZUluZGV4ID0gMDsK
KyAgICB1bnNpZ25lZCB1bmFyeVByb2ZpbGVJbmRleCA9IDA7CisjZGVmaW5lIExJTktfV0lUSF9C
SU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAg
IElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJv
ZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJpbmFyeVByb2ZpbGVJ
bmRleCsrKTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJ
TklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2Zp
bGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKHVuYXJ5UHJvZmlsZUluZGV4
KyspOyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mIGluc3RydWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25z
dCBhdXRvJiBpbnN0cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29k
ZUlEIG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMsMTQgKzU0OCwx
NCBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJ
TksoT3BDcmVhdGVQcm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0g
ICAgICAgIExJTksoT3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BE
aXYpCi0gICAgICAgIExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAg
ICAgTElOSyhPcEluYykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJ
TkFSWV9BUklUSF9QUk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRI
X1BST0ZJTEUoT3BNdWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShP
cERpdikKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisg
ICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBM
SU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAg
LTc2OSw3ICs3ODQsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBT
CiAgICAgLy8gcmVseSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5
IHBlcm1pdHRlZCB0byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFt
IHRvIG1vcmUgYWNjdXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGlt
aXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgLy8gSWYgdGhl
IGNvbmN1cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4g
Y29tcHV0ZSBpdCBoZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAgLTc5Myw2ICs4MDcsNzgg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3duZXJF
ZGdlLnNldCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZtLCB0
aGlzKSk7CiB9CiAKKyNpZiBFTkFCTEUoSklUKQordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVu
bGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7CisgICAg
c2V0SklUQ29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0IGF1
dG8mIGppdENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAgICAg
ICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAgaGFu
ZGxlci5uYXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50
YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CisgICAgICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOwor
ICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGpp
dENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAgICAg
IHN3aXRjaCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6
OlR5cGU6Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3Rh
bnRQb29sW2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7
CisgICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJ
bmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9hZC5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXRE
YXRhLm1fY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5i
eXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFsaXpl
RGF0YUlDKHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5m
bzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0g
PSBjYWxsTGlua0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86
IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0
dWJJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRyeS5w
YXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBqaXREYXRhLm1fc3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUs
IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAg
ICAgICAgc3R1YkluZm8tPmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyh0
aGlzLCB1bmxpbmtlZFN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gc3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25E
ZWNsOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1f
aml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpGdW5jdGlvbkV4cHI6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAg
ICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5kZXgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBH
bG9iYWxDb2RlOgorICAgIGNhc2UgTW9kdWxlQ29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgorICAg
ICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZ1bmN0aW9uQ29kZToKKyAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNl
dCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgor
ICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBtX3No
b3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYmIERG
Rzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgaWYgKGppdENvZGUtPm1faXNTaGFyZWFibGUgJiYgIXVubGlua2VkQ29kZUJsb2NrKCktPm1f
dW5saW5rZWRCYXNlbGluZUNvZGUgJiYgT3B0aW9uczo6dXNlQmFzZWxpbmVKSVRDb2RlU2hhcmlu
ZygpKQorICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2Rl
ID0gV1RGTW92ZShqaXRDb2RlKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCiBDb2RlQmxv
Y2s6On5Db2RlQmxvY2soKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtODczLDYgKzk1OSwy
NyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAK
K2Jvb2wgQ29kZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBuZWVkcyB0byBjb3JyZXNwb25k
IHRvIHdoYXQgd2UgZG8gaW5zaWRlIHNldENvbnN0YW50UmVnaXN0ZXJzLgorICAgIHN3aXRjaCAo
dW5saW5rZWRDb2RlQmxvY2soKS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVn
KSkgeworICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgIGNh
c2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcjogeworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gdW5saW5rZWRDb2RlQmxvY2soKS0+Z2V0Q29uc3RhbnQocmVnKTsKKyAg
ICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlm
IChjZWxsLT5pbmhlcml0czxTeW1ib2xUYWJsZT4odm0oKSkgfHwgY2VsbC0+aW5oZXJpdHM8SlNU
ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KHZtKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKIFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhj
b25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0
IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbikKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTg5Miw2ICs5OTks
NyBAQCBWZWN0b3I8dW5zaWduZWQ+IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSCiAgICAgICAgIHN3
aXRjaCAocmVwcmVzZW50YXRpb24pIHsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb25zdGFudCA9IGdsb2JhbE9i
amVjdC0+bGlua1RpbWVDb25zdGFudChzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50Pihjb25z
dGFudC5hc0ludDMyQXNBbnlJbnQoKSkpOworICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50Lmlz
Q2VsbCgpKTsgLy8gVW5saW5rZWQgQmFzZWxpbmUgSklUIHJlcXVpcmVzIHRoaXMuCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVy
OgogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKQEAgLTE1
MTQsNyArMTYyMiw3IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJsb2NrOjplbnN1cmVKSVQK
ICAgICByZXR1cm4gKm1faml0RGF0YTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFz
ZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5l
Q2FjaGVzKCkKIHsKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewog
ICAgICAgICBmb3IgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxs
TGlua0luZm9zKQpAQCAtMTUyNSw2ICsxNjMzLDIwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZUJhc2VsaW5lSklUSW5saW4KICAgICAgICAgICAgIHN0dWJJbmZvLT52aXNpdFdlYWtSZWZlcmVu
Y2VzKGxvY2tlciwgdGhpcyk7CiAgICAgICAgIH0KICAgICB9CisKKworI2lmIEFTU0VSVF9FTkFC
TEVECisgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAg
ICAvLyBWZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3Jl
IHZpcnR1YWwgY2FsbHMuCisgICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
OiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxD
YWxsTGlua0luZm9zKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5r
ZWQoKSk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtd
IChKU0NlbGwqKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgfQorI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAt
MTUzNCw0NiArMTY1NiwxMiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAg
ICBib29sIGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50
RG93bmdyYWRlOwotICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0g
ICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1p
emVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFz
ZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9y
eS4KLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYm
IGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxv
Y2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJs
b2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAg
ICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJ
bnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJP
ZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUt
PmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5m
byYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1
bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgp
KS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IHVubGlua0luY29taW5nQ2FsbHMoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNh
ZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwotICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2Fm
ZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIg
Ynl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFy
c2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMg
KmluZm9zLgotICAgICAgICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYK
LSAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAg
ICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgaWYgKCEhaml0Q29kZSgpKQotICAgICAgICBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKCk7CisgICAgICAgIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShERkdfSklUKQpAQCAtMTU5NCw3ICsxNjgyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1
bms6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuazoKLSAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50
KCk7CisgICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y291bnQoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgog
ICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CkBAIC0xNjc1
LDMwICsxNzYzLDYgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgog
ICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5
cGUsIGNvZGVPcmlnaW4pOwogfQogCi1KSVRBZGRJQyogQ29kZUJsb2NrOjphZGRKSVRBZGRJQyhC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2Fk
ZElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklU
TXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVFN1YklDKiBDb2RlQmxvY2s6
OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0
YShsb2NrZXIpLm1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVROZWdJQyogQ29k
ZUJsb2NrOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewot
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJl
SklURGF0YShsb2NrZXIpLm1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCiBTdHJ1Y3R1
cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKQEAgLTMxMzMsNyAr
MzE5Nyw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lm
IEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0
dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzM0OSwxMyArMzQx
MywxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAg
c3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAg
IHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwor
ICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9m
aWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERp
dj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC0zMzY3LDExICszNDMxLDExIEBAIFVuYXJ5QXJpdGhQcm9maWxl
KiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7
CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigp
Lm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9w
TmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5j
OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5t
X2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8
T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBw
Yy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzQ3MiwyMiArMzUzNiwxNiBAQCB2b2lkIENv
ZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiB9CiAKICNpZiBFTkFCTEUoSklUKQot
dm9pZCBDb2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1Rv
Q29kZU9yaWdpbk1hcD4mJiBtYXApIAoteyAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7Ci0gICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1fcGNUb0NvZGVPcmlnaW5NYXAg
PSBXVEZNb3ZlKG1hcCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2Nr
OjpmaW5kUEModm9pZCogcGMpCiB7CisgICAgaWYgKGF1dG8qIHBjVG9Db2RlT3JpZ2luTWFwID0g
bV9qaXRDb2RlLT5wY1RvQ29kZU9yaWdpbk1hcCgpKSB7CisgICAgICAgIGlmIChzdGQ6Om9wdGlv
bmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBwY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBj
KSkKKyAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAgIH0KKwogICAgIHsKICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBpZiAoYXV0byog
aml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICAgICAgaWYgKGppdERhdGEtPm1f
cGNUb0NvZGVPcmlnaW5NYXApIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxD
b2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gaml0RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcC0+Zmlu
ZFBDKHBjKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47Ci0gICAgICAg
ICAgICB9Ci0KICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDog
aml0RGF0YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNv
bnRhaW5zUEMocGMpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxD
b2RlT3JpZ2luPihzdHViSW5mby0+Y29kZU9yaWdpbik7CkBAIC0zNTIxLDI4ICszNTc5LDE0IEBA
IHN0ZDo6b3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0
ZWNvZGVJbmRleDsKIH0KIAotaW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQz
Ml90IHRocmVzaG9sZCkKLXsKLSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9w
dGltaXplKCkpIHsKLSAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICBy
ZXR1cm4gdGhyZXNob2xkOwotICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1
cm4gdGhyZXNob2xkICogNDsKLSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1
cm4gdGhyZXNob2xkIC8gMjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIHRocmVzaG9sZDsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkK
K3ZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIu
c2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRB
ZnRlcldhcm1VcCgpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdU
aHJlc2hvbGQodW5saW5rZWRDb2RlQmxvY2soKS0+dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOwogfQogCi12b2lkIENvZGVCbG9jazo6aml0U29v
bigpCit2b2lkIENvZGVCbG9jazo6aml0TmV4dEludm9jYXRpb24oKQogewotICAgIG1fbGxpbnRF
eGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+
c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwogfQogCiBib29sIENvZGVCbG9jazo6aGFzSW5zdGFs
bGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdApAQCAtMzU4OCwyOCArMzYzMiw4IEBAIHZvaWQg
Q29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRvdWJsZSBudW1TdWJzID0gMC4wOwog
ICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKLSAgICBhdXRvIGNvdW50SUNzID0gWyZd
IChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IGNv
ZGVCbG9jay0+bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKEpJVEFkZElDKiBh
ZGRJQyA6IGppdERhdGEtPm1fYWRkSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtQWRkcysrOwot
ICAgICAgICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29kZVNpemUoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMgOiBqaXREYXRhLT5t
X211bElDcykgewotICAgICAgICAgICAgICAgIG51bU11bHMrKzsKLSAgICAgICAgICAgICAgICB0
b3RhbE11bFNpemUgKz0gbXVsSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lDIDogaml0RGF0YS0+bV9uZWdJQ3MpIHsKLSAgICAg
ICAgICAgICAgICBudW1OZWdzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxOZWdTaXplICs9IG5l
Z0lDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJVFN1
YklDKiBzdWJJQyA6IGppdERhdGEtPm1fc3ViSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtU3Vi
cysrOwotICAgICAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJQy0+Y29kZVNpemUoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVC
bG9jayopIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmUtaW1wbGVtZW50IHRoaXMg
dXNpbmcgSklUQ29kZS4KICAgICB9OwogICAgIGhlYXAoKS0+Zm9yRWFjaENvZGVCbG9jayhjb3Vu
dElDcyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCBjbGFzcyBKU01vZHVs
ZUVudmlyb25tZW50OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTExJbnRQ
cm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OwogY2xhc3MgTWV0YWRhdGFU
YWJsZTsKLWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExp
c3Q7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAog
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEp
OwogCkBAIC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFk
YXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNp
Z25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citw
cml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7Citw
dWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBA
IHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJz
OyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2ln
bmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29k
ZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9j
ayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoK
ICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9v
bCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25D
ZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBg
cmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChy
ZWcuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXND
ZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewog
ICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJz
KTsKQEAgLTI2OCwyMyArMjU5LDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUKQogICAgIHN0
cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwor
ICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJh
ZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAgICAgIEJhZzxKSVRBZGRJQz4g
bV9hZGRJQ3M7Ci0gICAgICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Ci0gICAgICAgIEJhZzxK
SVROZWdJQz4gbV9uZWdJQ3M7Ci0gICAgICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7CiAgICAg
ICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxM
aW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5m
bz4+IG1faW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3Jw
aGljQ2FsbE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4g
bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1
bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdK
dW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29s
IG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2pp
dENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29s
OworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAg
IH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGlu
ZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkp
CkBAIC0yOTMsMjIgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgSklURGF0YSYgZW5zdXJl
SklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAKLSAgICBKSVRBZGRJQyog
YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11
bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFy
eUFyaXRoUHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQotCi0g
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+Ci0gICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAg
ICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVy
biBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2Vu
ZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUU3ViSUMqIGFk
ZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklD
KHByb2ZpbGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdERhdGEpOyB9CiAKICAgICBTdHJ1
Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSwgQ29kZU9yaWdpbik7CiAKQEAg
LTMyMiwxOCArMjk2LDggQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJ
bmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlu
a0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAg
ICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAg
IHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBl
bnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsK
LSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0gICAgewotICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1
cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBjb25zdCBKSVRDb2Rl
TWFwJiBqaXRDb2RlTWFwKCk7CiAKLSAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6
dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpvcHRpb25hbDxDb2Rl
T3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwogCiAgICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0
ZXJzKFJlZ2lzdGVyU2V0KTsKQEAgLTQ3Miw2ICs0MzYsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJp
bmcgbmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9CiAgICAgdW5zaWduZWQg
bnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
YXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9u
dW1QYXJhbWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNlSklUKCkpOwpAQCAtNTY5LDggKzUzNCwxMCBA
QCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0
YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAg
ICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCld
LmdldCgpOyB9CisgICAgYm9vbCBpc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZp
cnR1YWxSZWdpc3RlcikgY29uc3Q7CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKHJlZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKGluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNW
ZWN0b3JCdWZmZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0
YW50UmVnaXN0ZXJzKSArIGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5
T2Zmc2V0KCk7IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBp
bmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBu
dW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9
CkBAIC01OTUsMjIgKzU2MiwyMiBAQCBwdWJsaWM6CiAgICAgLy8gSnVtcCBUYWJsZXMKIAogI2lm
IEVOQUJMRShKSVQpCi0gICAgU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpCisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShp
bnQgdGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRj
aEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFu
dFBvb2woKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAg
ICAgcmV0dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wu
ZGF0YSgpOwogICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIHVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIAotI2lm
IEVOQUJMRShKSVQpCi0gICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUo
aW50IHRhYmxlSW5kZXgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEp
OwotICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07Ci0gICAgfQorI2lmIEVOQUJMRShERkdfSklUKQorICAgIFN0cmluZ0p1bXBUYWJs
ZSYgZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVK
dW1wVGFibGUmIGRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CiAjZW5kaWYKKwog
ICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIApAQCAt
NjMyLDIxICs1OTksMjAgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xk
UmVhY2hlZCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNo
ZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOworICAgICAgICByZXR1cm4gbV9sbGlu
dEV4ZWN1dGVDb3VudGVyLT5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKICAg
ICB9CiAKICAgICB2b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCiAgICAgewotICAgICAgICBtX2xs
aW50RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICAgICAgbV9sbGludEV4
ZWN1dGVDb3VudGVyLT5kZWZlckluZGVmaW5pdGVseSgpOwogICAgIH0KIAotICAgIGludDMyX3Qg
dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2Fy
bVVwKCk7CiAgICAgdm9pZCBqaXRTb29uKCk7CisgICAgdm9pZCBqaXROZXh0SW52b2NhdGlvbigp
OwogCiAgICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3Vu
dGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7
CisgICAgICAgIHJldHVybiAqbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIH0KIAogICAgIHR5
cGVkZWYgSGFzaE1hcDxzdGQ6OnR1cGxlPFN0cnVjdHVyZUlELCB1bnNpZ25lZD4sIEZpeGVkVmVj
dG9yPExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVj
dHVyZVdhdGNocG9pbnRNYXA7CkBAIC03OTcsNiArNzYzLDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3Rz
OyB9CiAgICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1
Z2dlclJlcXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVx
dWVzdHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVx
dWVzdHMpOyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2lu
dHMpOwogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykK
QEAgLTgzOCw2ICs4MDUsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2Nr
IG1fbG9jazsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJp
dGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBF
TkFCTEUoSklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBE
Rkc6OkNhcGFiaWxpdHlMZXZlbApAQCAtODQ3LDggKzgxNSw2IEBAIHB1YmxpYzoKICAgICBib29s
IG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1faGFzQmVlbkNvbXBpbGVk
V2l0aEZUTCA6IDE7CiAKLSAgICBib29sIG1faGFzTGlua2VkT1NSRXhpdCA6IDE7Ci0gICAgYm9v
bCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA6IDE7CiAgICAgYm9vbCBtX3Zpc2l0Q2hp
bGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAgLy8gSW50ZXJuYWwgbWV0
aG9kcyBmb3IgdXNlIGJ5IHZhbGlkYXRpb24gY29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBp
dCB3YXNuJ3QKQEAgLTkwNywxNiArODczLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3Ry
dWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBt
X2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpOyB9CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdp
YmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKLSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRp
bnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0g
ICAgICAgIHJldHVybiAhbV91bmxpbmtlZENvZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAg
fQorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5l
Q2FjaGVzKCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJ
bmxpbmVDYWNoZXMoKTsKKyAgICB2b2lkIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5k
aWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMo
KTsKQEAgLTEwMTAsNyArOTcyLDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50
TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9q
aXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJ
VERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2
ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jawpAQCAtMTAyOSw3ICs5OTMsNyBAQCBwcml2YXRl
OgogCiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAg
ICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJh
c2VsaW5lRXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9
OwogCiAgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAg
ICAgdWludDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRl
ICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5s
aW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkg
KzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlm
IChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0
YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9w
cm9maWxlLCBmYWxzZSk7IH0pOwotCiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVF
X1BST0ZJTEUoVklTSVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZv
ckVhY2g8T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1
Nyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAg
ICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAg
ICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwz
OCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQog
CisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZU19JTkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJs
b2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9q
aXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFwOworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1
bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+
bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmlu
Z0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQg
dGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2Rl
LmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlm
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBD
b2RlQmxvY2s6OmRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NF
UlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PERGRzo6SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6
ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChq
aXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZH
OjpKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7
CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQog
ICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25D
b3VudGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5
LDcgQEAgYm9vbCBFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNv
ZGVCbG9jayA/IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQp
OworICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAg
ICBtX2NvdW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25D
b3VudGVyLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAg
cHVibGljOgogICAgIHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3Ug
dXNlIHRoaXMsIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVy
biBmYWxzZS4KICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9j
ayopOwogICAgIGJvb2wgaGFzQ3Jvc3NlZFRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291
bnRlciA+PSAwOyB9Ci0gICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQs
IENvZGVCbG9jayopOworICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xk
LCBDb2RlQmxvY2sqID0gbnVsbHB0cik7CiAgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwog
ICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90
b3RhbENvdW50KSArIG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwpAQCAtODYsMTMgKzg2LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVCB0aHJlc2hvbGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVz
aG9sZChUIHRocmVzaG9sZCkKICAgICB7Ci0gICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwot
ICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNr
cG9pbnRzKCkgJiYgZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xv
YmFsT2JqZWN0LT53ZWFrUmFuZG9tSW50ZWdlcigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0Jl
dHdlZW5DaGVja3BvaW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hv
bGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAg
IGludDMyX3QgbWF4VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVj
a3BvaW50cygpOwogICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAg
ICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xk
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0
YWRhdGEuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0
cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0
QnlJZE1vZGVNZXRhZGF0YVVuc2V0KSA9PSAxMik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFk
YXRhQXJyYXlMZW5ndGggeworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2Zp
bGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVu
Z3RoLCBhcnJheVByb2ZpbGUpOyB9CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07
CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09
IDEyKTsKQEAgLTg4LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAg
ICAgIEdldEJ5SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENh
Y2hpbmc7IC8vIFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgog
ICAgIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9k
ZU1ldGFkYXRhRGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5z
ZXQgdW5zZXRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxl
bmd0aE1vZGU7CkBAIC0xMTcsNiArMTE5LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGEg
ewogICAgICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhUHJvdG9Mb2FkIHByb3RvTG9hZE1vZGU7CiAg
ICAgfTsKICAgICBHZXRCeUlkTW9kZSBtb2RlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1v
ZGUpOyB9CiAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsKIH07CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNw
cAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIEdldEJ5U3Rh
dHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgcmV0dXJuIEdldEJ5U3Rh
dHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAgICAKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJ
ZFNlbGY6IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZt
KCkpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQ
cm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBA
IHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEcKIAogICAgIC8vIExldCdz
IHN0b3JlIHRoZSByZXVzZWQgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4gQWZ0ZXIgdGhhdCwgd2Ug
Y2FuIHVzZSBhbGxvY2F0ZWQgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgYWxsb2NhdG9y
LnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOworICAgICAgICBhbGxvY2F0
b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CiAKICAgICBpZiAoR2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2co
ImJhc2VHUFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsKQEAgLTIyNSwxMiArMjI1LDkgQEAgdm9pZCBH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogICAgICAgICByZWdpc3RlcnNUb1Nw
aWxsRm9yQ0NhbGwuc2V0KHJlZyk7CiAgICAgZm9yIChGUFJSZWcgcmVnIDogZnBTY3JhdGNoKQog
ICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CisgICAgaWYgKGppdC5j
b2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2Fs
bC5zZXQoc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CiAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckND
YWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckNDYWxsKCkpOwot
I2lmIENQVShBUk02NCkKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2so
KTsKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgcmVnaXN0ZXJzVG9T
cGlsbEZvckNDYWxsLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCiAKICAgICBBY2Nl
c3NDYXNlU25pcHBldFBhcmFtcyBwYXJhbXMoc3RhdGUubV92bSwgV1RGTW92ZShyZWdzKSwgV1RG
TW92ZShncFNjcmF0Y2gpLCBXVEZNb3ZlKGZwU2NyYXRjaCkpOwogICAgIHNuaXBwZXQtPmdlbmVy
YXRvcigpLT5ydW4oaml0LCBwYXJhbXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzksNyArMTM5LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgog
ICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpJbkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1
YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSk7
CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3Bl
cnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZp
ZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsMTYg
QEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNz
KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0
eUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlm
ICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBk
eW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcg
ZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKICAgICAKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0y
MzMsMjMgKzIzOCwzMSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3Rl
CiAgICAgcmV0dXJuIGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJl
ZzsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFj
ZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jv
b2wgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZv
KTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYg
KCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9m
ZnNldCkpOworICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJs
b2NrLCBzdHViSW5mbywgb2Zmc2V0KSk7CisKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3Ry
dWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQogCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIApAQCAtMjc5LDIyICsyOTIsMjUgQEAg
Ym9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UgogICAgIHJldHVybiBsaW5r
ZWRDb2RlSW5saW5lOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxl
bmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJ
bmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgQVNT
RVJUKGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogCiAgICAgaWYgKCFzdHViSW5m
by5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlm
IChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWhhc0FueUFycmF5U3RvcmFnZShhcnJh
eS0+aW5kZXhpbmdUeXBlKCkpICYmIGFycmF5LT5pbmRleGluZ1R5cGUoKSAhPSBBcnJheUNsYXNz
OwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgQVNTRVJUKGlzQ2FjaGVhYmxlQXJy
YXlMZW5ndGgoc3R1YkluZm8sIGFycmF5KSk7CisgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ss
IGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywgYXJyYXkpKTsKIAog
ICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0zMTksMTcgKzMzNSwyMCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVB
cnJheUxlbmd0aChTCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLWJvb2wgSW5s
aW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCitib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICBpZiAo
IXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJ
bmZvKTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmlu
Z0xlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQogewotICAgIEFTU0VSVChpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChzdHViSW5mbykpOworICAg
IEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxv
Y2ssIHN0dWJJbmZvKSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmll
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzYzLDEzICszODIsMTggQEAgYm9vbCBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKAogfQogCiAKLWJvb2wgSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNz
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIXN0
dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gVGhlc2UgZHluYW1p
YyBzbG90cyBnZXQgZmlsbGVkIGluIGJ5IFN0cnVjdHVyZVN0dWJJbmZvLiBOb3RoaW5nIGVsc2Ug
dG8gZG8uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIEdQUlJlZyBiYXNlID0g
c3R1YkluZm8uYmFzZUdQUjsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVl
UmVncygpOwogCkBAIC00MDYsMTMgKzQzMCwxMyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjCiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAg
ICAgLy8gSWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9w
IHNsZWQgKGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFu
IGluZGlyZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcg
bV9jb2RlUHRyLgotICAgICAgICBpZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7
CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCAmJiBzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElm
IG1fY29kZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24s
IHRoaXMgbWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAg
ICAgICAgICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNo
aW5nIGNvZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBj
b2RlLgogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVz
cygpID09IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygp
KSB7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1Yklu
Zm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQo
Q0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnN0dWJJbmZvKSwgc3R1
YkluZm8ubV9zdHViSW5mb0dQUik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKENDYWxs
SGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHVi
Um91dGluZVB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1w
KCk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gc3R1YkluZm8uZG9u
ZUxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKQEAgLTQyMSw3ICs0NDUsOSBAQCB2b2lkIElubGluZUFjY2Vz
czo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nl
c3M6IGxpbmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAg
ICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CisgICAgICAgIHN0dWJJbmZvLm1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2Vz
cyBjb2RlLgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzQsOCArNDYwLDE0IEBAIHZv
aWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICB9KSwgIklubGluZUFj
Y2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpy
ZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCit2b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKKyAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSAmJiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCkgeworICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSBzdHViSW5mby5z
bG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLgorICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIo
c3R1YkluZm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRh
PHZvaWQoQ0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIGEgbm9wIHNsZWQgaGVyZSBiZWNhdXNlIG5vYm9keSBzaG91bGQgYmUg
anVtcGluZyBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCiAgICAgICAgIGF1dG8ganVtcCA9IGpp
dC5qdW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUFjY2Vzcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDE0ICs5OSwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBzdGQ6Om1heChzaXplLCBzaXplRm9yUHJvcGVydHlBY2Nl
c3MoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nl
c3MoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAg
c3RhdGljIGJvb2wgY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJ
bmZvJiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0
KTsKLSAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJ
bmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3Ro
KFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0
aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0
ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRp
YyBib29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3Rh
dGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wg
Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFBy
b3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29s
IGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7
CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJbkFj
Y2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOworICAgIHN0
YXRpYyBib29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJik7CiAKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2lu
Z0lubGluZUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CiAgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1
YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25N
b2RlTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBPVkVSTE9BRF9C
SVRXSVNFX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJdGVyYXRpb25Nb2RlTWV0
YWRhdGEgewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSXRlcmF0aW9u
TW9kZU1ldGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRl
Y2x0eXBlKHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRpb25Nb2RlKSk7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0lu
Zm8uaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0xMSW50Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKExMSW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KIAogcHJpdmF0ZToKICAg
ICB1aW50cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgeyB1bmxpbmtl
ZEJpdCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDE3IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgYml0V2lkdGhGb3JNYXgKICAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAogICAgIG1h
Y3JvKE9wSXRlcmF0b3JOZXh0KSBcCiAKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQklO
QVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKKyAgICBtYWNybyhPcEFkZCkgXAorICAgIG1hY3Jv
KE9wTXVsKSBcCisgICAgbWFjcm8oT3BEaXYpIFwKKyAgICBtYWNybyhPcFN1YikgXAorCisjZGVm
aW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKKyAg
ICBtYWNybyhPcEluYykgXAorICAgIG1hY3JvKE9wRGVjKSBcCisgICAgbWFjcm8oT3BOZWdhdGUp
IFwKKwogCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInR5cGUtbGltaXRzIikKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZv
aWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpzdWNjZWVkKCkKIHsKICAgICByZXN0b3JlU2NyYXRj
aCgpOwogICAgIGlmIChqaXQtPmNvZGVCbG9jaygpLT51c2VEYXRhSUMoKSkKLSAgICAgICAgaml0
LT5yZXQoKTsKKyAgICAgICAgaml0LT5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mRG9uZUxvY2F0
aW9uKCkpLCBKU0ludGVybmFsUHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIHN1Y2Nlc3MuYXBw
ZW5kKGppdC0+anVtcCgpKTsKIH0KQEAgLTExMCw2ICsxMTAsOCBAQCBjb25zdCBSZWdpc3RlclNl
dCYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7CiAKICAg
ICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1fbGl2ZVJlZ2lzdGVy
c1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9jYXRvci0+dXNlZFJl
Z2lzdGVycygpKTsKKyAgICAgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQor
ICAgICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5hZGQoc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIpOwogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGw7
CkBAIC0xMjgsMTEgKzEzMCwxMiBAQCBhdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2Vy
dmVMaXZlCiAgICAgfTsKIH0KIAotYXV0byBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZl
TGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29uc3QgUmVnaXN0
ZXJTZXQmIGV4dHJhKSAtPiBTcGlsbFN0YXRlCithdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6
cHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucygpIC0+
IFNwaWxsU3RhdGUKIHsKICAgICBSZWdpc3RlclNldCBsaXZlUmVnaXN0ZXJzID0gYWxsb2NhdG9y
LT51c2VkUmVnaXN0ZXJzKCk7CisgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygp
KQorICAgICAgICBsaXZlUmVnaXN0ZXJzLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7CiAg
ICAgbGl2ZVJlZ2lzdGVycy5leGNsdWRlKGNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgbGl2
ZVJlZ2lzdGVycy5tZXJnZShleHRyYSk7CiAKICAgICBjb25zdGV4cHIgdW5zaWduZWQgZXh0cmFT
dGFja1BhZGRpbmcgPSAwOwogICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JS
ZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVS
ZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqaml0LCBsaXZlUmVnaXN0ZXJzLCBleHRyYVN0YWNrUGFk
ZGluZyk7CkBAIC01OTYsMTYgKzU5OSwxMSBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHlt
b3JwaGljQWNjZXNzCiAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAgIHN0YXRl
LmppdCA9ICZqaXQ7CiAKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewotICAgICAg
ICBpZiAoc3RhdGUubV9kb2VzSlNHZXR0ZXJTZXR0ZXJDYWxscykgewotICAgICAgICAgICAgLy8g
V2UgaGF2ZSBubyBndWFyYW50ZWUgdGhhdCBzdGFjay1wb2ludGVyIGlzIHRoZSBleHBlY3RlZCBv
bmUuIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBpZiB3ZSBkbyBub3QgaGF2ZSBKUyBnZXR0ZXIgLyBz
ZXR0ZXIgY2FsbHMgc2luY2Ugc3RhY2stcG9pbnRlciBpcwotICAgICAgICAgICAgLy8gYSBjYWxs
ZWUtc2F2ZSByZWdpc3RlciBpbiB0aGUgQyBjYWxsaW5nIGNvbnZlbnNpb24uIEhvd2V2ZXIsIG91
ciBKUyBleGVjdXRhYmxlIGNhbGwgZG9lcyBub3Qgc2F2ZSBzdGFjay1wb2ludGVyLiBTbyB3ZSBh
cmUgYWRqdXN0aW5nIHN0YWNrLXBvaW50ZXIgYWZ0ZXIKLSAgICAgICAgICAgIC8vIEpTIGdldHRl
ciAvIHNldHRlciBjYWxscy4gQnV0IHRoaXMgY291bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlIGlu
aXRpYWwgc3RhY2stcG9pbnRlciwgYW5kIG1ha2VzIFBBQyB0YWdnaW5nIGJyb2tlbi4KLSAgICAg
ICAgICAgIC8vIFRvIGVuc3VyZSBQQUMtdGFnZ2luZyB3b3JrLCB3ZSBmaXJzdCBhZGp1c3Qgc3Rh
Y2stcG9pbnRlciB0byB0aGUgYXBwcm9wcmlhdGUgb25lLgotICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGppdC50YWdSZXR1
cm5BZGRyZXNzKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKKyAgICBpZiAoIWNhbkJlU2hhcmVkICYmIEFTU0VSVF9FTkFCTEVEKSB7CisgICAg
ICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFj
a1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgYXV0byBvayA9IGppdC5i
cmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgaml0LmJyZWFrcG9pbnQo
KTsKKyAgICAgICAgb2subGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0ZS5wcmVzZXJ2ZWRS
ZXVzZWRSZWdpc3RlclN0YXRlID0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewog
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjYWxjdWxhdGVMaXZlUmVnaXN0ZXJzRm9yQ2FsbEFuZEV4
Y2VwdGlvbkhhbmRsaW5nKCk7CiAKICAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7Ci0gICAgU3Bp
bGxTdGF0ZSBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRp
b25zKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7CisgICAgU3BpbGxTdGF0ZSBwcmVz
ZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAg
ICB2b2lkIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNl
cHRpb24oY29uc3QgU3BpbGxTdGF0ZSYpOwogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNG
cm9tU3RhY2tGb3JDYWxsKGNvbnN0IFNwaWxsU3RhdGUmLCBjb25zdCBSZWdpc3RlclNldCYgZG9u
dFJlc3RvcmUgPSB7IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTAg
KzE4MCwxMCBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVy
KCk7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh1aWQpOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1
YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7Cisg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICBy
ZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0dWJJbmZv
LT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAg
ICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0cnVj
dHVyZSwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTY1LDkg
KzY2LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKAogICAgIEFT
U0VSVChoYXNDb25zdGFudElkZW50aWZpZXIpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENh
Y2hlVHlwZTo6R2V0QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0g
ICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
ID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCku
aGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9m
ZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVT
dHViSW5mbzo6aW5pdEFycmF5TGVuZ3RoKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxv
Y2tlcikKQEAgLTg3LDkgKzg4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5
SWRSZXBsYQogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KTsKICAg
ICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlKTsKICAgICBt
X2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAg
IG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUt
PmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7
Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBv
ZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC05Nyw5ICs5OCw5IEBAIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGMKICAgICBBU1NFUlQobV9jYWNoZVR5
cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVU
eXBlOjpJbkJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAu
d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7
CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OmRlcmVmKCkKQEAgLTIzNiw3ICsyMzcsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0
cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgIC8vIHdlJ3JlIGJ1ZmZlcmVkIGlzIGJlY2F1c2Ugd2Ug
cmVseSBvbiBpdCB0byByZXNldCBkdXJpbmcgR0MgaWYgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlCiAgICAgICAgIC8vIGlzIGNvbGxlY3RlZC4KICAgICAgICAgbV9pZGVudGlmaWVyID0gbnVs
bHB0cjsKLSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7CisgICAg
ICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAgICAgICAgIAogICAgICAgICAv
LyBJZiB3ZSBnZW5lcmF0ZWQgc29tZSBjb2RlIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBhdHRlbXB0
IHRvIHJlcGF0Y2ggaW4gdGhlIGZ1dHVyZSB1bnRpbCB3ZQogICAgICAgICAvLyBnYXRoZXIgZW5v
dWdoIGNhc2VzLgpAQCAtMjUxLDcgKzI1Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJl
c2V0KGNvbnN0IENvbmMKIHsKICAgICBjbGVhckJ1ZmZlcmVkU3RydWN0dXJlcygpOwogICAgIG1f
aWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNs
ZWFyKCk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKIAogICAgIGlmICht
X2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CkBAIC0yODUs
NiArMjg2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAg
ICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0
aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NU
eXBlOjpJbkJ5SWQ6CkBAIC0zNjAsOCArMzYyLDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRXZWFrUmVmZXJlbgogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0gICAg
aWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgaXNWYWxpZCAmPSB2bS5o
ZWFwLmlzTWFya2VkKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgaWYg
KFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpCisg
ICAgICAgIGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpOwogICAgIGlmICht
X2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIGlzVmFsaWQgJj0gdS5zdHVi
LT52aXNpdFdlYWsodm0pOwogCkBAIC0zNzUsOCArMzc3LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7Ci0gICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgbV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZpc2l0b3Iudm0o
KSkpCisgICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAKICAgICBpZiAo
bV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICB1LnN0dWItPnByb3BhZ2F0
ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwpAQCAtNDMwLDYgKzQzMiwyMDkgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVU
eXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYg
dW5saW5rZWRTdHViSW5mbykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGFjY2Vzc1R5cGUg
PSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJ
bmZvLnN0YXJ0OworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0
aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1Bh
dGhTdGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNldCgpKSk7CisgICAg
Y29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsK
KyAgICBtX2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICB1c2VkUmVnaXN0
ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIGlmIChh
Y2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5ieXRl
Y29kZUluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwg
d2UgY2FuJ3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVyUmVnaXN0ZXIiIHJlZ2lzdGVyIGVpdGhl
ci4KKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpk
b250Q2xvYmJlclJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0
YW5jZU9mOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0
aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OlRyeUdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5
SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlk
RGlyZWN0OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdp
dGhUaGlzOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRo
aXNPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2
YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVO
YW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZUJyYW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0
UHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2
YXRlTmFtZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1
dEJ5SWQ6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1
YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGly
ZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3Qo
KSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZp
ZWxkRGVmaW5lOgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9w
dGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0
dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAg
ICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAg
ICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0
dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxk
UHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVu
dGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAg
ICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAg
cmVncy5wcm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVlR1BSID0gQmFz
ZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBC
YXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0
ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5w
cm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAg
bV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBwcm90b3R5cGVJc0tub3duT2Jq
ZWN0ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnZhbHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVy
czo6cmVzdWx0OworICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBoYXNDb25zdGFu
dElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkluQnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAg
ICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5C
eUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUlu
QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIGhhc0Nv
bnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnRoaXNHUFIgPSBC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBtX3N0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFs
aWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsK
KyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVu
dGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlw
ZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRl
QnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICB2
YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odW5saW5rZWRTdHViSW5mbyk7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpJ
VFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJP
cHRpb25zLmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0Lmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCkBAIC01
Niw2ICs1Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlW
YWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAg
ICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzgw
LDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAog
fTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVy
ZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDIsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBp
bml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAK
ICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRl
YWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTMyNSwxMyArMzMxLDE5
IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CisgICAg
UHJvcGVydHlPZmZzZXQgYnlJZFNlbGZPZmZzZXQ7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkJ5SWRTZWxmT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0
dWJJbmZvLCBieUlkU2VsZk9mZnNldCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
SW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1
Y3R1cmVTdHViSW5mbywgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsgfQogICAgIHVuaW9u
IHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsK
LSAgICAgICAgfSBieUlkU2VsZjsKICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAg
ICAgfSB1OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoVk0mIHZt
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZSht
X2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIH0KKyAgICBTdHJ1Y3R1cmVJRCBtX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAwIH07CiBwcml2YXRlOgogICAgIENhY2hlYWJsZUlk
ZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIC8vIFJlcHJlc2VudHMgdGhvc2Ugc3RydWN0dXJl
cyB0aGF0IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nlc3NDYXNlcyBpbiB0aGUgUG9seW1vcnBo
aWNBY2Nlc3MuCkBAIC0zNTIsNiArMzY0LDcgQEAgcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2RlUHRyOwogCiAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkNvZGVQdHIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0
dXJlU3R1YkluZm8sIG1fY29kZVB0cik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
RG9uZUxvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZv
LCBkb25lTG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRo
U3RhcnRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5m
bywgc2xvd1BhdGhTdGFydExvY2F0aW9uKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJ
bmZvLCBtX3Nsb3dPcGVyYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNv
dW50ZG93bigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgY291
bnRkb3duKTsgfQpAQCAtNDQ3LDYgKzQ2MCwxNyBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdl
bmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsK
KyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmll
bGRQdXRLaW5kOjpub25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpz
bG9wcHkoKSB9OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVy
IHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2Nh
dGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsK
K307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJT
dGF0ZSgpCiAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsK
ICAgICBpZiAocGVyY2VudGFnZSAhPSBwZXJjZW50YWdlKQogICAgICAgICBwZXJjZW50YWdlID0g
MC4wOwotICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFn
OiAiLCBwZXJjZW50YWdlLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5k
IHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIiVcbiIpOwogfQogCiB2b2lkIGVu
YWJsZVN1cGVyU2FtcGxlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2Nr
LmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRl
ICJDbGFzc0luZm8uaCIKQEAgLTc4LDYgKzc5LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlu
a2VkQ29kZUJsb2NrKFZNJgogICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tl
cik7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAg
fQorCisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRG
b3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpAQCAtMzE2LDYgKzMxOSw0OCBAQCBpbnQgVW5saW5rZWRD
b2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzCiAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRh
cmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECitib29s
IFVubGlua2VkQ29kZUJsb2NrOjpoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
Cit7CisgICAgaWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSA+IDEwMCkgeworICAgICAgICBpZiAo
bnVtYmVyT2ZJZGVudGlmaWVycygpICE9IG1fY2FjaGVkSWRlbnRpZmllclVpZHMuc2l6ZSgpKSB7
CisgICAgICAgICAgICBMb2NrZXIgbG9ja2VyKG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrKTsK
KyAgICAgICAgICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBjYWNoZWRJZGVudGlmaWVy
VWlkczsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50
aWZpZXJzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIgPSB0aGlzLT5pZGVudGlmaWVyKGkpOworICAgICAgICAgICAgICAgIGNhY2hlZElkZW50
aWZpZXJVaWRzLmFkZChpZGVudGlmaWVyLmltcGwoKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAgICBtX2NhY2hlZElkZW50
aWZpZXJVaWRzID0gV1RGTW92ZShjYWNoZWRJZGVudGlmaWVyVWlkcyk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5jb250YWlucyh1aWQpOworICAg
IH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7
ICsraSkgeworICAgICAgICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgor
CitpbnQzMl90IFVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJl
c2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRPcHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0
ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIFRy
aVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBU
cmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwogdm9p
ZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcygpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIW1fbWV0YWRhdGEtPmlzRmluYWxpemVkKCkpOwpAQCAtMzM3LDE1ICszODIs
MjUgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcgogICAgIGlmICht
X21ldGFkYXRhLT5oYXNNZXRhZGF0YSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJy
YXlQcm9maWxlcyA9IDA7CiAKLSNkZWZpbmUgQ09VTlQoX19vcCkgXAotICAgICAgICBudW1iZXJP
ZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOworI2RlZmlu
ZSBDT1VOVChfX29wKSBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50
cmllczxfX29wPigpOwogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxF
KENPVU5UKQogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5G
TyhDT1VOVCkKICN1bmRlZiBDT1VOVAogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0g
bV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICAgICAgbnVtYmVy
T2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BHZXRCeUlkPigpOwot
CiAgICAgICAgIG1fYXJyYXlQcm9maWxlcyA9IEZpeGVkVmVjdG9yPFVubGlua2VkQXJyYXlQcm9m
aWxlPihudW1iZXJPZkFycmF5UHJvZmlsZXMpOworCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9m
QmluYXJ5QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQmlu
YXJ5QXJpdGhQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CisgICAg
ICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKENPVU5UKQorI3Vu
ZGVmIENPVU5UCisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcyA9IEZpeGVkVmVjdG9yPEJp
bmFyeUFyaXRoUHJvZmlsZT4obnVtYmVyT2ZCaW5hcnlBcml0aFByb2ZpbGVzKTsKKworICAgICAg
ICB1bnNpZ25lZCBudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5U
KF9fb3ApIG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJp
ZXM8X19vcD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJP
RklMRShDT1VOVCkKKyN1bmRlZiBDT1VOVAorICAgICAgICBtX3VuYXJ5QXJpdGhQcm9maWxlcyA9
IEZpeGVkVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPihudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxl
cyk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDEwICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJv
ZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29u
dmVudGlvbnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9m
aWxlLmgiCisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkV4cHJlc3Np
b25SYW5nZUluZm8uaCIKICNpbmNsdWRlICJIYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIklkZW50
aWZpZXIuaCIKQEAgLTY0LDYgKzY2LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiBjbGFz
cyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEJhc2VsaW5l
SklUQ29kZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKIGVudW0gY2xhc3MgTGlua1RpbWVDb25z
dGFudCA6IGludDMyX3Q7CiAKQEAgLTE3NSw2ICsxNzgsNyBAQCBwdWJsaWM6CiAKICAgICBjb25z
dCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygp
IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyBy
ZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsg
fQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5k
ZXgoKV0uZ2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2Nv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBAIC0yMDcsNiArMjExLDE1IEBA
IHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogCiAg
ICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0OworICAgIGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIoKTsgfQorICAgIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7Cisg
ICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQo
MCkucHRyKCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
aW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rp
b24gPCBpbnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0
cnVjdGlvbnNCZWdpbjsKKyAgICB9CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25zU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLnNpemUoKTsgfQogCiAgICAgdW5zaWduZWQgbnVt
Q2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KICAgICB1
bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CkBAIC0zMzQsMTAg
KzM0NywyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRl
cygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQg
dG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFp
c0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KICAgICB2b2lkIGFsbG9jYXRlU2hhcmVkUHJvZmls
ZXMoKTsKICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSYgdW5saW5rZWRWYWx1ZVByb2ZpbGUodW5z
aWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlc1tpbmRleF07IH0KICAgICBVbmxp
bmtlZEFycmF5UHJvZmlsZSYgdW5saW5rZWRBcnJheVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsg
cmV0dXJuIG1fYXJyYXlQcm9maWxlc1tpbmRleF07IH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECisg
ICAgYm9vbCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CisjZW5kaWYKKworICAg
IGludDMyX3QgdGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKKwogcHJvdGVjdGVk
OgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0
IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwogCkBAIC0z
OTcsNiArNDIxLDkgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xleGljYWxTY29wZUZlYXR1
cmVzIDogNDsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKKyNpZiBFTkFC
TEUoSklUKQorICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1fdW5saW5rZWRCYXNlbGluZUNv
ZGU7CisjZW5kaWYKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07
CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEzLDcgKzQ0MCw2IEBAIHBy
aXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0
aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xp
dmVuZXNzOwogCi0KICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9maWxlIG1f
ZXhpdFByb2ZpbGU7CiAjZW5kaWYKQEAgLTQ1OCw2ICs0ODQsMTYgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkp
OwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiog
cGMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVj
b2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQpOworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQ
cm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQor
ICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJl
dHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25D
b3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3Vu
dGVyOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNo
TWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjUsOCArNTAxLDE2IEBA
IHByaXZhdGU6CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0
czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4ZWRW
ZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIEZpeGVkVmVjdG9y
PFVubGlua2VkVmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CiAgICAgRml4ZWRWZWN0b3I8
VW5saW5rZWRBcnJheVByb2ZpbGU+IG1fYXJyYXlQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxC
aW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBGaXhlZFZlY3Rv
cjxVbmFyeUFyaXRoUHJvZmlsZT4gbV91bmFyeUFyaXRoUHJvZmlsZXM7CisKKyNpZiBBU1NFUlRf
RU5BQkxFRAorICAgIExvY2sgbV9jYWNoZWRJZGVudGlmaWVyVWlkc0xvY2s7CisgICAgSGFzaFNl
dDxVbmlxdWVkU3RyaW5nSW1wbCo+IG1fY2FjaGVkSWRlbnRpZmllclVpZHM7CisjZW5kaWYKIAog
cHJvdGVjdGVkOgogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5o
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDE1IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxl
KTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJf
dCBvZmZzZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9m
ZnNldCA9IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9m
ZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgYmFzZVR5cGVPZmZzZXQg
PSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdub2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSks
IGJhc2VUeXBlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9m
KHR5cGVuYW1lIE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9
CisKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAgdW5zaWduZWQgbnVtRW50
cmllcygpOwogCkBAIC0xMDcsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNf
b2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQz
Ml90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsMTMgKzQ1LDExIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKIAog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZC
dWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNw
ZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJ
bmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNw
ZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKICAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQot
ICAgICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Cisg
ICAgICAgIGNsZWFyQnVja2V0cygpOwogICAgIH0KICAgICAKICAgICBFbmNvZGVkSlNWYWx1ZSog
c3BlY0ZhaWxCdWNrZXQodW5zaWduZWQgaSkKQEAgLTU5LDYgKzU3LDEyIEBAIHN0cnVjdCBWYWx1
ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgQVNTRVJUKG51bWJlck9mQnVja2V0cyArIGkgPCB0b3Rh
bE51bWJlck9mQnVja2V0cyk7CiAgICAgICAgIHJldHVybiBtX2J1Y2tldHMgKyBudW1iZXJPZkJ1
Y2tldHMgKyBpOwogICAgIH0KKworICAgIHZvaWQgY2xlYXJCdWNrZXRzKCkKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQor
ICAgICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Cisg
ICAgfQogICAgIAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tl
dCkgY29uc3QKICAgICB7CkBAIC0xMjMsOCArMTI3LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJh
c2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rp
b24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJl
YWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVk
VHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVj
a2V0czsgKytpKSB7CkBAIC0xMzksNyArMTQxLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ug
ewogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisK
ICAgICBFbmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAg
ICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE2MSw2ICsx
NjMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVj
dCBWYWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0
czwwPiB7CiAgICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZC
dWNrZXRzPDA+KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsg
fQogfTsKIAogc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBW
YWx1ZVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oIgpAQCAtMzQsNyArMzUsOSBAQAogI2luY2x1ZGUgIkRGR0p1bXBS
ZXBsYWNlbWVudC5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5l
Q2FsbEZyYW1lU2V0LmgiCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSlNDYXN0
LmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckNv
bXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiUmVjb3JkZWRTdGF0dXNlcy5oIgogI2luY2x1ZGUgPHd0
Zi9CYWcuaD4KQEAgLTcwLDcgKzczLDcgQEAgc3RydWN0IFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9u
IHsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX3RvOwogfTsKICAgICAgICAgCi1jbGFzcyBD
b21tb25EYXRhIHsKK2NsYXNzIENvbW1vbkRhdGEgOiBwdWJsaWMgTWF0aElDSG9sZGVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21tb25EYXRhKTsKIHB1YmxpYzoKICAgICBDb21tb25E
YXRhKCkKQEAgLTExNiw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8Q29kZUJs
b2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PiBtX3dhdGNocG9pbnRzOwogICAgIEZpeGVkVmVjdG9y
PEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRzOwogICAgIEZpeGVkVmVjdG9yPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludD4gbV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKICAg
ICBSZWNvcmRlZFN0YXR1c2VzIHJlY29yZGVkU3RhdHVzZXM7CiAgICAgVmVjdG9yPEp1bXBSZXBs
YWNlbWVudD4gbV9qdW1wUmVwbGFjZW1lbnRzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRy
eUpJVENvZGUuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUu
aAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOwogCitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3Ry
dWN0IFN0cmluZ0p1bXBUYWJsZTsKKwogbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEpJVENvbXBp
bGVyOwpAQCAtMTAxLDYgKzEwNCw4IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVP
cmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgZmluYWw7CiAKICAgICB1c2luZyBE
aXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZkZvckRGRzsKKworICAgIFBDVG9Db2RlT3Jp
Z2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3Bj
VG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBKSVRDb21waWxlcjsgLy8gQWxsb3cgSklUQ29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCku
CkBAIC0xNDAsNiArMTQ1LDggQEAgcHVibGljOgogICAgIEhhc2hNYXA8Qnl0ZWNvZGVJbmRleCwg
VHJpZ2dlclJlYXNvbj4gdGllclVwRW50cnlUcmlnZ2VyczsKIAogICAgIFdyaXRlQmFycmllcjxD
b2RlQmxvY2s+IG1fb3NyRW50cnlCbG9jazsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFi
bGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+
IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKICAgICB1bnNpZ25lZCBvc3JFbnRyeVJldHJ5Owog
ICAgIGJvb2wgYWJhbmRvbk9TUkVudHJ5OwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsMTMgKzE4NSwxMiBAQCB2b2lkIEpJVENvbXBpbGVy
OjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgCiAgICAgbV9ncmFwaC5yZWdpc3RlckZyb3pl
blZhbHVlcygpOwogCi0gICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5p
c0VtcHR5KCkgfHwgIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAg
ICAgICBpZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7
Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBU
YWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKLSAgICB9CisgICAg
QVNTRVJUKG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAg
aWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIAorICAgICAg
ICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1bXBU
YWJsZXMuaXNFbXB0eSgpKQorICAgICAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9
IFdURk1vdmUobV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwogCiAgICAgZm9yIChCYWc8U3dp
dGNoRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fc3dpdGNoRGF0YS5iZWdpbigpOyAh
IWl0ZXI7ICsraXRlcikgewogICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKippdGVyOwpAQCAt
MTk5LDEyICsxOTgsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5r
QgogICAgICAgICBjYXNlIFN3aXRjaENoYXI6CiAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CiAg
ICAgICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4
KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNo
SnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlzRW1wdHkoKSk7CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN3aXRj
aEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5z
d2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhd
OwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9j
ay0+aW5kZXhdKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtlZFRhYmxlLm1fY3Rp
T2Zmc2V0cy5zaXplKCkgPT0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpKTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5z
aXplKCk7IGotLTspCkBAIC0yMTksMTIgKzIxOCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5r
KExpbmtCdWZmZXImIGxpbmtCCiAKICAgICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6IHsKICAgICAg
ICAgICAgIGlmICghZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQobV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5k
ZXgpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29u
c3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAg
ICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3
aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5n
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRh
LmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0
VGFibGUuc2l6ZSgpICsgMSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbGlua2Vk
VGFibGUubV9jdGlPZmZzZXRzKQpAQCAtMzMzLDcgKzMzMiw3IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQ
Q1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcikpOworICAgICAgICBtX2ppdENv
ZGUtPmNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdp
bk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpOwog
fQogCiBzdGF0aWMgdm9pZCBlbWl0U3RhY2tPdmVyZmxvd0NoZWNrKEpJVENvbXBpbGVyJiBqaXQs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc3RhY2tPdmVyZmxvdykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTcsNyArOTcsNiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUq
CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUo
KSkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCk7Ci0gICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNv
ZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIAogICAgIGlm
ICghT3B0aW9uczo6dXNlT1NSRW50cnlUb0RGRygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzIsOSArNzcy
LDYgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIAogICAgIC8vIFRo
ZSB0YWcgcmVnaXN0ZXJzIGFyZSBuZWVkZWQgdG8gbWF0ZXJpYWxpemUgcmVjb3ZlcmllcyBiZWxv
dy4KICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKIAotICAgIGlm
IChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVz
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7Ci0KICAgICBp
ZiAoaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQpIHsKICAgICAgICAgRW5jb2Rl
ZEpTVmFsdWUqIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CiAg
ICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25NYXRlcmlhbGl6ZU9T
UkV4aXRTaWRlU3RhdGUpPigmdm0sICZleGl0LCB0bXBTY3JhdGNoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJKSVQuaCIKQEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhW
TSYgdm0sIENDYWxsSGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2gg
KGppdC5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6
Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBl
ZFRocmVzaG9sZChqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7
CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBl
ZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlw
ZTo6RlRMSklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3Vu
dGVyOjpjbGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRh
cmdldFZhbHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291
bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDIs
MTEgKzE0Myw4IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clQKIHsK
ICAgICBjYWxsZXJJc0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGJh
c2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuazsKIAotICAgIGlmIChjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpIHsKLSAg
ICAgICAgaWYgKCFjYWxsZXJJc0xMSW50KQotICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXItPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CisgICAgaWYgKGNhbGxCeXRlY29k
ZUluZGV4LmNoZWNrcG9pbnQoKSkKICAgICAgICAgcmV0dXJuIExMSW50OjpjaGVja3BvaW50T1NS
RXhpdEZyb21JbmxpbmVkQ2FsbFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKLSAgICB9CiAKICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganVtcFRhcmdldDsKIApAQCAt
MTk4LDggKzE5Niw2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clQK
ICN1bmRlZiBMTElOVF9SRVRVUk5fTE9DQVRJT04KIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIGJh
c2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwotCiAg
ICAgICAgIHN3aXRjaCAodHJ1ZUNhbGxlckNhbGxLaW5kKSB7CiAgICAgICAgIGNhc2UgSW5saW5l
Q2FsbEZyYW1lOjpDYWxsOgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0
OgpAQCAtMzEzLDYgKzMwOSwxMCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxI
ZWxwZXJzCiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVy
ID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKICAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFt
ZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIp
KTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGNh
bGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpS
ZWdpc3RlcnM6OnBiR1BSKSk7CisgICAgICAgIH0gZWxzZSBpZiAodHJ1ZUNhbGxlcikgeworICAg
ICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNl
bGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5t
ZXRhZGF0YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5l
Q29kZUJsb2NrLCBKSVQ6OnNfbWV0YWRhdGFHUFIpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIt
PmJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJh
bWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBKSVQ6OnNfY29uc3RhbnRzR1BSKSk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCkBAIC00MDQsNyAr
NDA0LDggQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOwogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVz
dGluYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvZGVCbG9ja0ZvckV4aXQtPm1faGFzTGlua2VkT1NSRXhp
dCA9IHRydWU7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihj
b2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRhdGFHUFIpOwor
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9y
RXhpdC0+YmFzZWxpbmVKSVRDb25zdGFudFBvb2woKSksIEpJVDo6c19jb25zdGFudHNHUFIpOwog
CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCgpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4gZGVzdGluYXRpb247CkBAIC00MjAsMTIgKzQyMSwxNiBAQCB2b2lkIGFkanVzdEFuZEp1bXBU
b1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5y
ZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCi0g
ICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9p
bnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKKyAgICAgICAgQVNT
RVJUKCFSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29udGFpbnMoTExJbnQ6
OlJlZ2lzdGVyczo6cGNHUFIpKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUsIEFzc2VtYmx5SGVscGVyczo6
c2VsZWN0U2NyYXRjaEdQUihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikpOworCiAgICAgICAgIC8v
IFNpbmNlIHdlJ3JlIGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFt
ZUZvckNhdGNoLgogICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIHZtLmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOwogICAgIH0KLSAgICAKKworICAg
IGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFja1BvaW50
ZXJPZmZzZXRGb3IoY29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworCiAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBU
YXJnZXQpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDIs
IE9TUkV4aXRQdHJUYWcpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBA
CiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDbG9u
ZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxv
Y2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiREZH
RHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgpAQCAtMjg2OSw3ICsyODcwLDcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkZpbmRTdwogICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9s
b2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2Nr
LT5kZmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5pc0RvdWJsZSgp
KTsKICAgICBkb3VibGUgYXNEb3VibGUgPSB2YWx1ZS5hc0RvdWJsZSgpOwpAQCAtMjg5MCw3ICsy
ODkxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogCiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgU3RyaW5nSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2Rl
QmxvY2stPmRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICByZXR1cm4g
bGlua2VkVGFibGUuY3RpRm9yVmFsdWUoKnVubGlua2VkVGFibGUsIHN0ckltcGwpLmV4ZWN1dGFi
bGVBZGRyZXNzPGNoYXIqPigpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTczMCw2ICs3MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1
ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlVGFnR1BSLCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAg
ICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBh
cmFtZXRlcnMoKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBh
c3NlZEFyZ3M7ICsraSkgewogICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0Lmdy
YXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwpAQCAtODg5LDcgKzg5MCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIAogICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2Vz
ID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIElu
dmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAg
c2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxv
YWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewog
ICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwog
ICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJl
cGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgyOCw2ICs4MjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBu
b2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQ
UihjYWxsZWVHUFIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdz
LnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBh
c3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFy
YW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyAr
K2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTk3OSw3ICs5ODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxs
TGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRH
UFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nh
c2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BS
LCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEp
OwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSku
cHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5ODUsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRl
TmEKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygp
OwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxv
Y2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6
UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRU
eXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRl
TmFtZSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJh
c2VHUFIpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3Ms
IEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVy
dHlJc1N5bWJvbCA9IHRydWU7CiAKQEAgLTQ5MDUsNyArNDkwNSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJ
bmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxv
Y2soKS0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBt
X2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1
dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICBh
dXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkOwogICAgIApAQCAt
NDk4OSw3ICs0OTg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5v
ZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsK
ICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2Nr
LT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAg
IEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0aFBy
b2ZpbGUpOworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFk
ZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBv
cGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
ID0gb3BlcmF0aW9uVmFsdWVTdWI7CiAKQEAgLTU1NzEsNyArNTU3MSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU5lZ2F0ZSgKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuY29kZUJs
b2NrKCktPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTmVnSUMqIG5lZ0lDID0g
bV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBh
dXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemU7CiAg
ICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZTsKICAg
ICBjb21waWxlTWF0aElDKG5vZGUsIG5lZ0lDLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0
Y2hpbmdGdW5jdGlvbik7CkBAIC01ODE1LDcgKzU4MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlVmFsdWVNdWwoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9
IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50
aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuY29kZUJsb2NrKCkt
PmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQu
aml0Q29kZSgpLT5jb21tb24uYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7CiAgICAgYXV0byBu
b25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bDsKIApAQCAtMTQ3NzAsNyAr
MTQ3NzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQ
UlJlZyBzY29wZVJlZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIG1faml0LmNv
ZGVCbG9jaygpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFp
bFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CiAgICAg
bm9SZXN1bHQobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQg
Y29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKIAogICAgIGlmICh2bS5zaG91bGRC
dWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpIHsKICAgICAgICAgQjM6OlBDVG9PcmlnaW5N
YXAgb3JpZ2luTWFwID0gc3RhdGUucHJvYy0+cmVsZWFzZVBDVG9PcmlnaW5NYXAoKTsKLSAgICAg
ICAgY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3Jp
Z2luTWFwPihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSks
ICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpKTsKKyAgICAgICAgc3RhdGUuaml0
Q29kZS0+Y29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3Jp
Z2luTWFwPihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSks
ICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpOwogICAgIH0KIAogICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGxhYmVsID0gc3RhdGUuZmluYWxpemVyLT5iM0Nv
ZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHN0YXRlLnByb2MtPmNvZGUo
KS5lbnRyeXBvaW50TGFiZWwoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
SVRDb2RlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHB1YmxpYzoKICAg
ICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpIG92ZXJyaWRlOwogICAgIHN0YXRpYyBwdHJk
aWZmX3QgY29tbW9uRGF0YU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKSVRDb2Rl
LCBjb21tb24pOyB9CiAgICAgdm9pZCBzaHJpbmtUb0ZpdChjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImKSBvdmVycmlkZTsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1h
cCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9
CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhIGNvbW1vbjsKICAgICBWZWN0b3I8T1NSRXhpdD4g
bV9vc3JFeGl0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MiwxNCArNTIsNiBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQog
CiAgICAgZ3JhcGgucmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsKIAotI2lmIEFTU0VSVF9FTkFCTEVE
Ci0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9s
b2NrKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpOwotICAgICAgICBBU1NFUlQoY29kZUJs
b2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7
Ci0gICAgfQotI2VuZGlmCi0KICAgICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuIE5vdGUgdGhh
dCB3ZSB1c2UgdGhpcyBlbnRyeXBvaW50IHRvdGFsbHkgZGlmZmVyZW50bHkKICAgICAvLyBkZXBl
bmRpbmcgb24gd2hldGhlciB3ZSdyZSBkb2luZyBPU1IgZW50cnkgb3Igbm90LgogICAgIENDYWxs
SGVscGVycyBqaXQoY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgs
NiArODgsNyBAQAogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJMTEludFRo
dW5rcy5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorI2luY2x1ZGUgIlBDVG9Db2Rl
T3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVnRXhw
T2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCkBAIC0yMzIw
LDYgKzIzMjEsMTggQEAgcHJpdmF0ZToKICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRT
dWJHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNo
aW5nRnVuY3Rpb24pOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3Is
IHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRv
ciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRBZGRJQyog
YWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5
cGU+CisgICAgc3RhdGljIEpJVE11bElDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21t
b24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVE11
bElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBl
bmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJ
VE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUTmVnSUMqIGFkZE1h
dGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUp
IHsgcmV0dXJuIGNvbW1vbi5hZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Cisg
ICAgc3RhdGljIEpJVFN1YklDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJp
bmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVFN1YklDKHBy
b2ZpbGUpOyB9CisKICAgICB2b2lkIGNvbXBpbGVWYWx1ZU11bCgpCiAgICAgewogICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9v
cmlnaW4uc2VtYW50aWMpOwpAQCAtMjM5MSw3ICsyNDA0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgog
CiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJh
dGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgICAgIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxv
Y2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgICAg
ICBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9y
PihzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAgICAgICAgICAgICAg
IG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IoSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdw
cigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7
CiAKICAgICAgICAgICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKQEAg
LTI1MDAsNyArMjUxMyw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgICAgICAgICAgICAgIEJv
eDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRo
SUNHZW5lcmF0aW9uU3RhdGU+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBKSVRCaW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRoSUM8R2Vu
ZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxH
ZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0Q29kZS0+
Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0
b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFy
YW1zWzBdLmdwcigpKSwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFd
LmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwgcGFyYW1zLmZwU2NyYXRjaCgw
KSwKICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmZwU2NyYXRjaCgxKSwgcGFyYW1zLmdwU2Ny
YXRjaCgwKSk7CkBAIC00MzE3LDcgKzQzMzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgR1BS
UmVnIHN0dWJJbmZvR1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBw
YXJhbXMuZ3BTY3JhdGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAgYXV0byBn
ZW5lcmF0b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAg
ICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdp
biwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAg
aml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2Fs
bFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAg
cGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJl
Zywgc3R1YkluZm9HUFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNTeW1ib2wgPSB0cnVlOwpAQCAtMTAyODUsNiArMTAyOTgsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwg
bnVtQWxsb2NhdGVkQXJnczsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURh
dGEuYXJncy5hcHBlbmQoVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSkpOwog
ICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2Vk
QXJnczsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGpp
dC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50aWNOb2RlT3Jp
Z2luKTsKQEAgLTEwNDQzLDEzICsxMDQ1NywxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292ZXJ5Rm9ySlNW
YWx1ZSgpKTsKIAogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBu
dW1BcmdzOworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQu
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9j
aygpKTsKIAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0
LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5m
bzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJl
ZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1
dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BS
SW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxG
cmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAg
ICAgICAgICAgICAgIH0pOwpAQCAtMTA3OTIsNyArMTA4MDcsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENh
bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVn
VDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNs
b3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMTA3Myw3ICsxMTA4OCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsK
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAg
ICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxM
aW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxp
ZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0
LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFy
ZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBp
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEzLDI4ICs0MTMsMTYgQEAgc3RhdGljIHZvaWQg
Y29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAogCiAgICAgUmVnaXN0ZXJTZXQgYWxsRlRMQ2Fs
bGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6ZnRsQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBiYXNlbGluZUNhbGxlZVNhdmVzID0gYmFzZWxpbmVD
b2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogdm1DYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNl
dHMoKTsKLSAgICBSZWdpc3RlclNldCB2bUNhbGxlZVNhdmVzVG9Ta2lwID0gUmVnaXN0ZXJTZXQ6
OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsK
LSAgICAgICAgaml0LmxvYWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIEdQUkluZm86OnJlZ1QxKTsK
LSAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihFbnRyeUZyYW1l
OjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0g
ICAgfQogCiAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0
KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKICAgICAgICAgaWYgKCFhbGxGVExDYWxsZWVTYXZlcy5n
ZXQocmVnKSkgewotICAgICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0g
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKSk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCB1bndp
bmRJbmRleCA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5pbmRleE9mKHJlZyk7
CiAgICAgICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQg
PSBiYXNlbGluZUNhbGxlZVNhdmVzLT5maW5kKHJlZyk7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZz
ZXQqIHZtQ2FsbGVlU2F2ZSA9IG51bGxwdHI7IAotICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlv
bkhhbmRsZXIoKSkKLSAgICAgICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZp
bmQocmVnKTsKIAogICAgICAgICBpZiAocmVnLmlzR1BSKCkpIHsKICAgICAgICAgICAgIEdQUlJl
ZyByZWdUb0xvYWQgPSBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8gR1BSSW5mbzo6cmVnVDAgOiBy
ZWcuZ3ByKCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWdUb0xvYWQgIT0gR1BSSW5m
bzo6cmVnVDEpOwogCiAgICAgICAgICAgICBpZiAodW53aW5kSW5kZXggPT0gVUlOVF9NQVgpIHsK
ICAgICAgICAgICAgICAgICAvLyBUaGUgRlRMIGNvbXBpbGF0aW9uIGRpZG4ndCBwcmVzZXJ2ZSB0
aGlzIHJlZ2lzdGVyLiBUaGlzIG1lYW5zIHRoYXQgaXQgYWxzbwpAQCAtNDUyLDggKzQ0MCw2IEBA
IHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAogICAgICAgICAgICAg
aWYgKGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQo
cmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQ
b2ludGVyUmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQtPm9mZnNldCgpKSk7Ci0gICAg
ICAgICAgICBpZiAodm1DYWxsZWVTYXZlICYmICF2bUNhbGxlZVNhdmVzVG9Ta2lwLmdldCh2bUNh
bGxlZVNhdmUtPnJlZygpKSkKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9m
ZnNldCgpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBGUFJSZWcgZnBSZWdUb0xv
YWQgPSBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8gRlBSSW5mbzo6ZnBSZWdUMCA6IHJlZy5mcHIo
KTsKIApAQCAtNDY0LDE5ICs0NTAsOSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0s
IHVuc2lnbmVkCiAKICAgICAgICAgICAgIGlmIChiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQogICAg
ICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShmcFJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBiYXNlbGluZVJl
Z2lzdGVyT2Zmc2V0LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKHZtQ2FsbGVlU2F2ZSAm
JiAhdm1DYWxsZWVTYXZlc1RvU2tpcC5nZXQodm1DYWxsZWVTYXZlLT5yZWcoKSkpCi0gICAgICAg
ICAgICAgICAgaml0LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAg
UmVnaXN0ZXJBdE9mZnNldCogdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChHUFJJ
bmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om51
bWJlclRhZ1JlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwg
dm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwotCi0gICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2Fs
bGVlU2F2ZXMtPmZpbmQoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3Rlcik7Ci0gICAgICAgIGpp
dC5zdG9yZTY0KEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7Ci0gICAgfQot
CiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0gYmFz
ZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogCiAg
ICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3Bv
aW50KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEu
cmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0
YS5yYgkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRv
ci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1l
dGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0g
ICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAgICBkZWYgZ2Vu
ZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCisgICAgICAgICAgICBm
aWVsZE5hbWVzLm1hcCBkbyB8ZmllbGROYW1lfAorICAgICAgICAgICAgICAgICIje3ByZWZpeH1z
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1l
WzEuLi0xXX0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fI3tmaWVsZE5h
bWV9KTsgfSIKKyAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisgICAgICAgIGVuZAorCisgICAg
ICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBmaWVsZE5hbWVzKQogICAgICAg
ICAgICAgZmllbGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlw
ZS5raW5kX29mPyBIYXNoCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4j
e2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAg
ICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZp
eCArICcgICAgJywgdHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZpeH19OyIKICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8j
e2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmllbGQudG9f
cworICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2goZmllbGROYW1lKQorICAgICAg
ICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZE5hbWV9OyIKICAg
ICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVu
ZAogCi0gICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcykK
KyAgICAgICAgZmllbGROYW1lcyA9IFtdCisgICAgICAgIHByZWZpeCA9ICIgICAgICAgICIKKyAg
ICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBmaWVsZHMsIGZpZWxkTmFtZXMp
CisgICAgICAgIGZpZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rp
b25zKHByZWZpeCwgZmllbGROYW1lcykKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBp
ZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2Nyw2ICszNjcsMjggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmxvYWRQcm9wZXJ0eShHUFJSZQogICAgICAgICByZXN1bHQpOwogfQogCit2b2lkIEFzc2VtYmx5
SGVscGVyczo6c3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwg
R1BSUmVnIG9mZnNldCwgR1BSUmVnIHNjcmF0Y2gpCit7CisgICAgSnVtcCBpc0lubGluZSA9IGJy
YW5jaDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNl
dCkpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIG5lZzMyKG9mZnNldCk7CisgICAgc2lnbkV4dGVu
ZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CisgICAg
CisgICAgaXNJbmxpbmUubGluayh0aGlzKTsKKyAgICBhZGRQdHIoCisgICAgICAgIFRydXN0ZWRJ
bW0zMigKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihKU09iamVjdCkp
IC0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDxpbnQzMl90PihmaXJzdE91dE9mTGluZU9mZnNl
dCkgLSAyKSAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSwK
KyAgICAgICAgb2JqZWN0LCBzY3JhdGNoKTsKKyAgICAKKyAgICByZWFkeS5saW5rKHRoaXMpOwor
ICAgIAorICAgIHN0b3JlVmFsdWUodmFsdWUsCisgICAgICAgIEJhc2VJbmRleChzY3JhdGNoLCBv
ZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSkpOworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdExvYWRTdHJ1
Y3R1cmUoVk0mIHZtLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3Rl
cklEIHNjcmF0Y2gpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY5OCw4ICs3MjAsMTMgQEAg
dm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5
SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZv
KSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3Qp
LCBHUFJJbmZvOjpyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2Jh
bE9iamVjdCh2bSwgaW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVh
bENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZv
KQoreworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAg
IENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9u
IDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzNCw4ICsyMzQsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9
CiAgICAgCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgY2xvYmJlcnMgb2Zmc2V0LgorICAgIC8vIE5v
dGUgdGhhdCB0aGVzZSBjbG9iYmVyIG9mZnNldC4KICAgICB2b2lkIGxvYWRQcm9wZXJ0eShHUFJS
ZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpOworICAgIHZvaWQg
c3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9m
ZnNldCwgR1BSUmVnIHNjcmF0Y2gpOwogCiAgICAgdm9pZCBtb3ZlVmFsdWVSZWdzKEpTVmFsdWVS
ZWdzIHNyY1JlZ3MsIEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAgIHsKQEAgLTM3OSwxNSArMzgw
LDI2IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIHZvaWQgY29weUNhbGxlZVNhdmVz
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUs
IEdQUlJlZyBzY3JhdGNoKQorICAgIHsKKyNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lT
VEVSUyA+IDAKKyAgICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwgc2NyYXRjaCk7CisgICAg
ICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChzY3Jh
dGNoKTsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBjb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9w
RW50cnlGcmFtZSkKICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMg
PiAwCiAgICAgICAgIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH07CiAgICAgICAgIEdQUlJlZyB0
ZW1wMSA9IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9hZFB0cigmdG9w
RW50cnlGcmFtZSwgdGVtcDEpOwotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlckltcGwodGVtcDEpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CiAjZWxzZQog
ICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7CisgICAgICAgIFVOVVNFRF9QQVJB
TSh0b3BFbnRyeUZyYW1lKTsKICNlbmRpZgogICAgIH0KICAgICAKQEAgLTE3MjAsNiArMTczMiw3
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0mLCBK
U0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxs
V2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOwogICAgIAogICAg
IHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNsYWltU3BhY2VP
blN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxp
bmVKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jh
c2VsaW5lSklUQ29kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgorCisjaWYgRU5BQkxFKEpJ
VCkKKworI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgorI2lu
Y2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKSVRBZGRJ
QyogTWF0aElDSG9sZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE11bElDKiBN
YXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
KSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUU3ViSUMqIE1hdGhJ
Q0hvbGRlcjo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsg
cmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVROZWdJQyogTWF0aElDSG9s
ZGVyOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVy
biBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorCit2b2lkIE1hdGhJQ0hvbGRlcjo6YWRv
cHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCit7CisgICAgbV9hZGRJQ3MgPSBXVEZNb3Zl
KG90aGVyLm1fYWRkSUNzKTsKKyAgICBtX211bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJQ3Mp
OworICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAgbV9zdWJJQ3Mg
PSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKK30KKworQmFzZWxpbmVKSVRDb2RlOjpCYXNlbGlu
ZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IHdpdGhBcml0eUNoZWNrKQorICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3
aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgLCBNYXRoSUNIb2xkZXIo
KQoreyB9CisKK0Jhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSgpCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5j
bHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKKworI2lmIEVOQUJMRShK
SVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCaW5hcnlBcml0aFByb2ZpbGU7CitjbGFz
cyBVbmFyeUFyaXRoUHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwor
c3RydWN0IFNpbXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKK2NsYXNz
IE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9s
ZGVyJiBvdGhlcik7CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmls
ZSopOworICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAg
ICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTmVn
SUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CisKK3ByaXZhdGU6CisgICAgQmFn
PEpJVEFkZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAgIEJh
ZzxKSVROZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKK307CisK
K2NsYXNzIEpJVENvbnN0YW50UG9vbCB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29uc3RhbnQgPSB1
bnNpZ25lZDsKKworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBHbG9i
YWxPYmplY3QsCisgICAgICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAgU3RydWN0dXJlU3R1Yklu
Zm8sCisgICAgICAgIEZ1bmN0aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rpb25FeHByLAorICAgIH07
CisKKyAgICBzdHJ1Y3QgVmFsdWUgeworICAgICAgICBUeXBlIHR5cGU7CisgICAgICAgIFBhY2tl
ZFB0cjx2b2lkPiBwYXlsb2FkOworICAgIH07CisKKyAgICBKSVRDb25zdGFudFBvb2woKSA9IGRl
ZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7
CisgICAgSklUQ29uc3RhbnRQb29sJiBvcGVyYXRvcj0oSklUQ29uc3RhbnRQb29sJiYpID0gZGVm
YXVsdDsKKworICAgIENvbnN0YW50IGFkZChUeXBlIHR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxs
cHRyKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudHMuc2l6ZSgp
OworICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBlLCBwYXlsb2FkIH0pOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudHMuc2l6ZSgpOyB9CisgICAgVmFsdWUgYXQoc2l6ZV90IGkpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW2ldOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZh
bHVlPiBtX2NvbnN0YW50czsKK307CisKKworY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGlj
IERpcmVjdEpJVENvZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIEJhc2Vs
aW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+LCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IHdpdGhBcml0eUNoZWNrKTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisgICAg
UENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4g
bV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQorCisgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJ
bmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExp
bmtJbmZvczsKKyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0
dWJJbmZvczsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRh
YmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlczsKKyAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFudFBv
b2wgbV9jb25zdGFudFBvb2w7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFw
PiBtX3BjVG9Db2RlT3JpZ2luTWFwOworICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQ
bGFuOjpjb2RlU2l6ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxh
bjo6ZmluYWxpemUoKQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZp
bmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9q
aXQuZmluYWxpemVPbk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0
KSB7CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19F
VkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVk
IikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVy
czo6bG9nU2hhZG93Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkp
KTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQ
UlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAg
c3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0
LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBz
dG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigp
KSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQ
YWNrZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRv
d1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVl
KSkpOwotICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09G
RlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cihjb2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19
Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwg
R1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2Ny
YXRjaDIpCiB7CiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0No
aWNrZW4oKTsKQEAgLTcyLDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFk
b3dDaGlja2VuUGEKICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFy
Z0dQUikpOwogfQogCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBD
Q2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93
UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBl
IGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRy
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNU
X09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJl
c3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBj
YWxsZWUpKSk7CisgICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQs
IE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAg
ICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihT
aGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIGNvZGVCbG9jaykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4
LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJl
Z3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxT
aXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJ
bmRleCk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3Bl
LCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAg
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNj
b3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6
ZW1pdEpJVENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3
aGVyZSwgU2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBj
aGFyKiBkZXNjcmlwdGlvbikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC04NDAsNyArODQwLDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2Ji
ZXIgYWxsIHZvbGF0aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29t
IG9uIHRoZSB0b3Agb2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4K
ICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFj
a2V0LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVn
cywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRv
d0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0
aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJS
ZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXgpOworICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRv
d1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVC
bG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhp
bmQgYSBwb2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1Bh
Y2tldC4KICAgICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hh
ZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2Fs
bGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxl
ZVNhdmVSZWdpc3RlcnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2
b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3Qg
UmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdp
c3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpIH07Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2
ZUxvY2F0aW9ucyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7
CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMt
PmF0KGkpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlRGF0YS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0
MywxMyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5z
aWduZWQgbnVtTG9jYWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdz
IHsgVUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsg
Ly8gT24gb3VyIG1hY2hpbmUgZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rl
ck1hcDxWYWx1ZVJlY292ZXJ5PiByZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lz
dGVyIHsgSW52YWxpZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3Qg
UmVnaXN0ZXJBdE9mZnNldExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVl
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBA
IENhbGxGcmFtZVNodWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1faml0KGpp
dCkKICAgICAsIG1fb2xkRnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpz
aXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXpl
KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1f
YWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAg
ICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKSkpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnMgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0
YS5udW1QYXJhbWV0ZXJzKSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6
OmhlYWRlclNpemVJblJlZ2lzdGVycwogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxp
Z25GcmFtZShkYXRhLmFyZ3Muc2l6ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWRO
ZXdGcmFtZVNpemUgLSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lz
dGVycyhSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3Mo
ZGF0YS5udW1QYXNzZWRBcmdzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1l
dGVycykKIHsKICAgICAvLyBXZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4u
LgogICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07
ICkKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9y
VGFpbENhCiAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0
KSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291
bnRPSyA9CiAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1
YWwsIG1fbmV3RnJhbWVCYXNlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3Rl
cnMoKSAtIDEgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVC
YXNlKTsKICAgICBtX2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFj
a0FsaWdubWVudFJlZ2lzdGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJh
bWVCYXNlLCBtX25ld0ZyYW1lQmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
NCw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7
CiAgICAgICAgIGRhdGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVt
UGFzc2VkQXJncyA9IG1fbnVtUGFzc2VkQXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJz
ID0gbV9udW1QYXJhbWV0ZXJzOwogICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFs
UmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAg
IGRhdGEuYXJncy5yZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYXJnQ291bnQoKTsgKytpKQpAQCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBwZXJmb3JtU2FmZVdyaXRlcygpOwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2Vk
QXJncyB7IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9N
QVggfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAg
IDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgm
dm0sIG51bGxwdHIpCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwg
bV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAw
KQogICAgICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBA
IEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxk
RW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChs
b29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3Qp
OworICAgIG1fcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENv
ZGVCbG9jayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklU
KCkKQEAgLTkwLDggKzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNr
KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAot
ICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIo
T3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAg
ICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9w
dGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJU
KCFtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxs
ZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMjAgQEAgdm9pZCBKSVQ6OmVtaXRO
b3RpZnlXcml0ZShXYXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1
YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcg
cG9pbnRlclRvU2V0KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVn
IHBvaW50ZXJUb1NldCkKIHsKKyAgICBhdXRvIG9rID0gYnJhbmNoVGVzdFB0cihaZXJvLCBwb2lu
dGVyVG9TZXQpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9p
bnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKKyAgICBvay5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCit2b2lkIEpJVDo6ZW1p
dFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNo
R1BSKQogewotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUg
PT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+dmFyUmVhZE9ubHlXYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1t
MzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8
IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJSZWFkT25s
eVdhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgo
RXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6
YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKQEAgLTEyOSwxMiArMTM3LDE4IEBAIHZvaWQgSklU
Ojphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3RlciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhp
cyk7CiB9CiAKK3ZvaWQgSklUOjpyZXNldFNQKCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Cit9CisKICNkZWZpbmUgTkVYVF9PUENPREUobmFt
ZSkgXAogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyBcCiAgICAgYnJlYWs7CkBA
IC0xODEsNjEgKzE5NSw0NCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0
cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2Rl
QmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNT
RVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAg
ICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJl
c3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZF
eGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUg
PSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
SlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBG
dW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVE
YXRhVGFnKSwgcmVzdWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYg
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNv
bnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCBy
ZXN1bHQpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworI2lmIEFT
U0VSVF9FTkFCTEVECisgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsK
KyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29k
ZUJsb2NrKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09
IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICB9KTsKKyNlbmRpZgorfQorCiB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3Nl
KQotICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAg
ICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4iKTsK
ICAgICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3VtZW50
Q291bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3RydWN0
aW9uQ291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAK
ICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJsb2Nr
LT52bSgpOwogICAgIEJ5dGVjb2RlSW5kZXggc3RhcnRCeXRlY29kZUluZGV4KDApOwotICAgIGlm
IChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1fY29kZUJsb2NrLT5pbmhlcml0czxQ
cm9ncmFtQ29kZUJsb2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmluaGVyaXRzPE1vZHVsZVByb2dy
YW1Db2RlQmxvY2s+KHZtKSkpIHsKLSAgICAgICAgLy8gV2UgY2FuIG9ubHkgZG8gdGhpcyBvcHRp
bWl6YXRpb24gYmVjYXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2RlQmxvY2sncyBleGFjdGx5IG9u
Y2UuCi0gICAgICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxkIGJlIGludmFsaWQgb3RoZXJ3
aXNlLiBXaGVuIHRoZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRzIHRvCi0gICAgICAgIC8vIGRv
IE9TUiBlbnRyeSBpbnRvIHRoZSBiYXNlbGluZSBKSVQgaW4gYSBsb29wLCBpdCB3aWxsIHBhc3Mg
aW4gdGhlIGJ5dGVjb2RlIG9mZnNldCBpdAotICAgICAgICAvLyB3YXMgZXhlY3V0aW5nIGF0IHdo
ZW4gaXQga2lja2VkIG9mZiBvdXIgY29tcGlsYXRpb24uIFdlIG9ubHkgbmVlZCB0byBjb21waWxl
IGNvZGUgZm9yCi0gICAgICAgIC8vIGFueXRoaW5nIHJlYWNoYWJsZSBmcm9tIHRoYXQgYnl0ZWNv
ZGUgb2Zmc2V0LgotCi0gICAgICAgIC8vIFdlIG9ubHkgYm90aGVyIGJ1aWxkaW5nIHRoZSBieXRl
Y29kZSBncmFwaCBpZiBpdCBjb3VsZCBzYXZlIHRpbWUgYW5kIGV4ZWN1dGFibGUKLSAgICAgICAg
Ly8gbWVtb3J5LiBXZSBwaWNrIGFuIGFyYml0cmFyeSBvZmZzZXQgd2hlcmUgd2UgZGVlbSB0aGlz
IGlzIHByb2ZpdGFibGUuCi0gICAgICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkgPj0gMjAwKSB7Ci0gICAgICAgICAgICAvLyBBcyBhIHNpbXBsaWZpY2F0aW9uLCB3
ZSBkb24ndCBmaW5kIGFsbCBieXRlY29kZSByYW5nZXMgdGhhdCBhcmUgdW5yZWFjaGFibGUuCi0g
ICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGZpbmQgdGhlIG1pbmltdW0gYnl0ZWNvZGUg
b2Zmc2V0IHRoYXQgaXMgcmVhY2hhYmxlLCBhbmQKLSAgICAgICAgICAgIC8vIGNvbXBpbGUgY29k
ZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0IG9ud2FyZHMuCi0KLSAgICAgICAgICAgIEJ5dGVj
b2RlR3JhcGggZ3JhcGgobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7
Ci0gICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmluZEJhc2lj
QmxvY2tGb3JCeXRlY29kZU9mZnNldChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2spOwotCi0gICAgICAgICAgICBH
cmFwaE5vZGVXb3JrbGlzdDxCeXRlY29kZUJhc2ljQmxvY2sqPiB3b3JrbGlzdDsKLSAgICAgICAg
ICAgIHN0YXJ0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHdv
cmtsaXN0LnB1c2goYmxvY2spOwotCi0gICAgICAgICAgICB3aGlsZSAoQnl0ZWNvZGVCYXNpY0Js
b2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRCeXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChzdGQ6Om1pbihzdGFydEJ5dGVjb2RlSW5kZXgub2Zm
c2V0KCksIGJsb2NrLT5sZWFkZXJPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgc3VjY2Vzc29ySW5kZXggOiBibG9jay0+c3VjY2Vzc29ycygpKQotICAgICAgICAgICAg
ICAgICAgICB3b3JrbGlzdC5wdXNoKCZncmFwaFtzdWNjZXNzb3JJbmRleF0pOwotCi0gICAgICAg
ICAgICAgICAgLy8gQWxzbyBhZGQgY2F0Y2ggYmxvY2tzIGZvciBieXRlY29kZXMgdGhhdCB0aHJv
dy4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFu
ZGxlcnMoKSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0ID0gYmxvY2stPmxlYWRlck9mZnNldCgpOyBieXRlY29kZU9mZnNldCA8IGJsb2NrLT5sZWFk
ZXJPZmZzZXQoKSArIGJsb2NrLT50b3RhbExlbmd0aCgpOykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZU9mZnNldCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogaGFuZGxlciA9IG1fY29kZUJsb2Nr
LT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChncmFwaC5maW5kQmFz
aWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoaGFuZGxlci0+dGFyZ2V0KSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CiAg
ICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKQEAgLTI3OCwxMiArMjc1LDE1IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9i
ZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bj
b2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIs
IGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChv
cGNvZGVJRCAhPSBvcF9jYXRjaCkKKyAgICAgICAgICAgIGFzc2VydFN0YWNrUG9pbnRlck9mZnNl
dCgpOworCiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICAgICAgREVGSU5FX1NMT1df
T1AobGVzcykKICAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQpAQCAtNTI3LDcgKzUyNyw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNv
ZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
YXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0
KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJu
YWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGlu
ZyBzbG93IGNvZGUgZm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcp
ZGVidWdPZmZzZXQoKSk7CkBAIC01NDUsOCArNTQ1LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNl
bGluZUpJVEV4ZWN1dGlvbigpKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2Jl
OjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bj
b2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNjAzLDcgKzYwMyw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9kZWxfYnlfdmFsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X2lkKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfc3ViKQotI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfZ2V0X2Zyb21fc2NvcGUpCiAjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09Q
KG9wX3B1dF90b19zY29wZSkKQEAgLTY3NCw1NSArNjc0LDU1IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVNsb3dDYXNlcygpCiAjZW5kaWYKIH0KIAordm9pZCBKSVQ6OmVtaXRNYXRlcmlhbGl6
ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCkKK3sKKyAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHNfbWV0YWRh
dGFHUFIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJ
VERhdGEoKSksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6
SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKQoreworICAgIEJhc2U6OmVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0
aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6
Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOwor
ICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2Fw
YWJpbGl0eUxldmVsKCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5u
b3RDb21waWxlOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1f
Y2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJv
ZmlsaW5nID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxl
OgogICAgIGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0
aW1pemVkID0gdHJ1ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7
CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlw
ZSgpKSB7Ci0gICAgY2FzZSBHbG9iYWxDb2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToKLSAgICBj
YXNlIEV2YWxDb2RlOgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGlu
ZWQgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAg
ICAgIC8vIFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBk
ZXRlY3RlZCBhbiB1bmlubGluZWFibGUgY2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUg
dGhhdCBvYnNlcnZhdGlvbi4KLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkICY9IGNhbklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1f
Y29kZUJsb2NrKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2Nr
LT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmIChtX2Nv
ZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0g
Rml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN3aXRjaEp1bXBUYWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZV
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRW
ZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJl
ck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKKyAg
ICAgICAgICAgIG1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJs
ZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMo
KSk7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzID0gRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5u
dW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAKLSAgICBp
ZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0
ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIo
KSkpKQotICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVy
PihtX2NvZGVCbG9jayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJs
eSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1i
bGVCYXNlbGluZUZvclByb2ZpbGVyKCkpKSkgeworICAgICAgICAvLyBGSVhNRTogYnVpbGQgYSBk
aXNhc3NlbWJsZXIgb2ZmIG9mIFVubGlua2VkQ29kZUJsb2NrLgorICAgICAgICBtX2Rpc2Fzc2Vt
YmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2NrKTsK
KyAgICB9CiAgICAgaWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpIHsK
KyAgICAgICAgLy8gRklYTUU6IGJ1aWxkIHByb2ZpbGVyIGRpc2Fzc2VtYmxlciBvZmYgVW5saW5r
ZWRDb2RlQmxvY2suCiAgICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAgICAg
ICAgIG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAgICAgICAgbV92bS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAorICAg
ICAgICAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVz
Rm9yKG1fcHJvZmlsZWRDb2RlQmxvY2spLAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpCYXNl
bGluZSkpOwotICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92
bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1fY29tcGls
YXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIs
IG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgw
KSkpOwpAQCAtNzQyLDExICs3NDIsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbgogICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7
Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3Vl
KCk7CiAKICAgICBMYWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zm
c2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cik7CisgICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFt
ZVNpemUgPSAtZnJhbWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRv
cE9mZnNldCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tP
dmVyZmxvdzsKQEAgLTc1NywxNiArNzU4LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dp
dGhvdXRGaW5hbGl6aW4KICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVlU2F2
ZXMoKTsKKyAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFsaXpl
VGFnQ2hlY2tSZWdpc3RlcnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0
YW50UG9vbFJlZ2lzdGVycygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZSkgeworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAmJiAo
IW1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZh
bHVlUHJvZmlsZXMoKSArIEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3RvcmFn
ZSgpKSwgcmVnVDIpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsg
YXJndW1lbnQgPCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1l
bnQpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4g
d2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAg
ICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2Fu
dCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVC
bG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAo
bV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENh
bGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3Nywx
MiArNzgyLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAg
ICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJl
Z2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSks
IHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1l
bnQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3Ms
IEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVBy
b2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVC
bG9jay0+aml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1f
cHJvZmlsZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVN
YXJrZXIpKQogICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3Zl
KCpzaXplTWFya2VyKSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MDQsMjcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAg
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9w
ZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3Rh
Y2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJh
dGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tP
dmVyZmxvd0Vycm9yLCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRl
cnMgaXMgMSwgd2UgbmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVz
QXJpdHlGaXh1cCA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAo
bV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlG
aXh1cCkgeworICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAg
ICBtX2FyaXR5Q2hlY2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDAp
LCAmbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0
RnVuY3Rpb25Qcm9sb2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9j
b2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2Rl
QmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1t
MzIoMCksIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlu
bGluZWQoKSkpOwogCiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVy
cykpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSkpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0
PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhj
ZXB0aW9uKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RB
cml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlz
Q29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25D
YWxsQXJpdHlDaGVjaywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAg
YnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhp
cyk7CkBAIC04MzksNyArODQ3LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZp
bmFsaXppbgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwog
ICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1
ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywg
bV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsK
KyAgICBtX2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtC
dWZmZXIoKnRoaXMsIG1fdW5saW5rZWRDb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJh
c2VsaW5lSklULCBlZmZvcnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4NjYsOCBA
QCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAgICAg
ICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNv
cmQ6OkNoYXJhY3RlcjogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNv
bnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBy
ZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsg
aiA8IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNb
al07CkBAIC04NzEsOCArODc5LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5r
ZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxl
JiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAg
ICAgICAgYXV0byBjdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0
clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwog
ICAgICAgICAgICAgZm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRU
YWJsZS52YWx1ZXMoKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0
aW9uLm1fYnJhbmNoT2Zmc2V0OwpAQCAtOTA2LDYgKzkxNCwyNyBAQCB2b2lkIEpJVDo6bGluaygp
CiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCByZWNvcmQuY2FsbGVl
KTsKICAgICB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGF1dG8gZmluYWxpemVJQ3MgPSBb
Jl0gKGF1dG8mIGdlbmVyYXRvcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5lcmF0
b3JzKSB7CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsKKyAg
ICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1fZG9uZSk7CisgICAgICAgICAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zbG93UGF0aEJlZ2lu
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzKTsKKyAg
ICBmaW5hbGl6ZUlDcyhtX2dldEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkc1dp
dGhUaGlzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X3B1dEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeUlkcyk7CisgICAgZmluYWxpemVJ
Q3MobV9kZWxCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeUlkcyk7CisgICAgZmluYWxp
emVJQ3MobV9pbkJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9mcyk7CisgICAg
ZmluYWxpemVJQ3MobV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7CisjZWxzZQogICAgIGZpbmFsaXpl
SW5saW5lQ2FjaGVzKG1fZ2V0QnlJZHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGlu
ZUNhY2hlcyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1fZ2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIpOwpAQCAtOTE3LDIxICs5NDYsMjUg
QEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeVZhbHMs
IHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNlT2ZzLCBw
YXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wcml2YXRlQnJhbmRBY2Nl
c3NlcywgcGF0Y2hCdWZmZXIpOworI2VuZGlmCiAKICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0aW9u
SW5mbyA6IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgIFVubGlua2VkQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxpbmtl
ZENhbGxMaW5rSW5mbzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24p
OworI2Vsc2UKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5j
YWxsTGlua0luZm87CiAgICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKICAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZv
LnNsb3dQYXRoU3RhcnQpLAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CisjZW5kaWYKKwog
ICAgIH0KIAotICAgIHsKLSAgICAgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxk
ZXI7Ci0gICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9m
ZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgewotICAgICAgICAgICAg
aWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGpp
dENvZGVNYXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0
Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNl
dF0pKTsKLSAgICAgICAgfQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChqaXRD
b2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpKTsKKyAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2Rl
TWFwQnVpbGRlcjsKKyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNv
ZGVPZmZzZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKKyAgICAgICAg
aWYgKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQorICAgICAgICAgICAgaml0Q29k
ZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkp
OwogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkp
IHsKQEAgLTk0MCwyNiArOTczLDQyIEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICB9CiAKICAgICBp
ZiAoVU5MSUtFTFkobV9jb21waWxhdGlvbikpIHsKKyAgICAgICAgLy8gRklYTUU6IHNob3VsZCB3
ZSBtYWtlIHRoZSBieXRlY29kZSBwcm9maWxlciBrbm93IGFib3V0IFVubGlua2VkQ29kZUJsb2Nr
PwogICAgICAgICBpZiAoT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkp
CiAgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0
aW9uLmdldCgpLCBwYXRjaEJ1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlci0+YWRkQ29tcGlsYXRpb24obV9jb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAgICAg
ICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2ZpbGVk
Q29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2RlT3Jp
Z2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlciksIHBhdGNoQnVmZmVyKTsKICAgICAKKyAgICAvLyBGSVhNRTogTWFr
ZSBhIHZlcnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBVbmxp
bmtlZENvZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFM
SVpFX0NPREUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAi
QmFzZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJC
YXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUo
bV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAg
IAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVj
ayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsK
LSAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRo
QXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9w
dFJlZigqbmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAg
ICBtX2ppdENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsK
KyAgICBtX2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxM
aW5rSW5mb3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1vdmUo
bV91bmxpbmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMg
PSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAg
bV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOwor
ICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2RlLT5t
X2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgbV9qaXRDb2RlLT5tX2lzU2hhcmVhYmxlID0gbV9pc1NoYXJlYWJsZTsKKyNlbHNl
CisgICAgbV9qaXRDb2RlLT5tX2lzU2hhcmVhYmxlID0gZmFsc2U7CisjZW5kaWYKIAogICAgIGlm
IChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQg
Y29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFi
bGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9y
eSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0
ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2VkQ29kZUJsb2NrLCByZXN1
bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVj
dXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQogCi1Db21waWxhdGlvblJl
c3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6
ZmluYWxpemVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTk2OCwyNSArMTAxNywxNCBA
QCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyCiAKICAgICBtX2xpbmtC
dWZmZXItPnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCi0gICAgewotICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAg
ICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6
OkxhdGVTaHJpbmspOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2Rl
QmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7Ci0gICAgICAgIEhhbmRs
ZXJJbmZvJiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAg
ICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgotICAgICAgICBoYW5kbGVy
Lm5hdGl2ZUNvZGUgPSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQoQnl0ZWNvZGVJbmRl
eChoYW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7Ci0g
ICAgfQotCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJsb2Nr
LT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKKyAg
ICAgICAgbV9qaXRDb2RlLT5tX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtX3BjVG9Db2Rl
T3JpZ2luTWFwKTsKIAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRG
b3JCYXNlbGluZUpJVC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29k
ZS0+c2l6ZSgpKSAvCi0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmlu
c3RydWN0aW9uc1NpemUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5r
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNl
dEpJVENvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0
dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwog
CiAgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTAzNiwx
MSBAQCBzaXplX3QgSklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZl
ci0+c2l6ZSgpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJ
VENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0
ZUNvbXBpbGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9y
dCkKIHsKICAgICBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBj
b21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFs
aXplT25NYWluVGhyZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVC
bG9jayk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkK
QEAgLTEwNDIsMTggKzEwODAsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9u
QmVmb3JlQwogICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJp
ZXMoKm1fdm0sICJQcmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNp
Z25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vu
c2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiB7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51
bUNhbGxlZUxvY2FscygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRSZWdpc3RlcnMoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVl
TG9jYWxzKCkpKSk7CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFt
ZVBvaW50ZXJPZmZzZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50
ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVn
aXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2lu
dCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2Nr
KQogewogICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291
bnRGb3IoY29kZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50
ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9p
bnRlck9mZnNldEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNo
TWFwPENTdHJpbmcsIFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFz
aE1hcDxDU3RyaW5nLCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09G
RlNFVChhY3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBl
Y3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVj
dGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwp
KTsKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxl
ci5oIgpAQCAtNDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUg
IkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgor
I2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAj
aW5jbHVkZSAiVW51c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAg
LTE0OSwxNCArMTUxLDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3Qg
Q2FsbENvbXBpbGF0aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93
UGF0aFN0YXJ0OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtl
ZENhbGxMaW5rSW5mbzsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlu
a0luZm9Db25zdGFudDsKKyNlbHNlCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93
UGF0aFN0YXJ0OwogICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyNlbmRpZgog
ICAgIH07CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRy
ZXNzUHRyLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsK
IAotICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFj
ZUpJVCB7CisgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRl
cmZhY2VKSVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAg
ICBmcmllbmQgY2xhc3MgSklUU3R1YkNhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRUaHVu
a3M7CkBAIC0xNzEsNiArMTc4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwg
Y29tcHJlc3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQg
YSBwYXRjaGVkIG9mZnNldC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRC
eUlkRGVmYXVsdE9mZnNldCA9IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZh
Y2VKSVQ7CisKICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxs
cHRyLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJ
bmRleCgwKSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTE3OCwyOCArMTg3LDMzIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7
IH0KIAogICAgICAgICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29t
cGlsYXRpb25FZmZvcnQpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFp
blRocmVhZCgpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVh
ZChDb2RlQmxvY2sqKTsKICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAg
ICAgdm9pZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAg
CiAgICAgICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRl
eCBieXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21w
aWxlKGVmZm9ydCk7CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVj
b2RlT2Zmc2V0KS5wcml2YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0K
IAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2Vk
Q29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRG
b3IoQ29kZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KFVubGlua2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKENvZGVCbG9jayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBI
YXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21waWxlVGltZSgpOwogCisgICAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIgPSBMTEludDo6UmVnaXN0
ZXJzOjptZXRhZGF0YVRhYmxlR1BSOworICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
X2NvbnN0YW50c0dQUiA9IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSOworCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAgICAgICAgIHZvaWQgcHJp
dmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCk7CiAgICAgICAgIHZvaWQgbGluaygpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBw
cml2YXRlQ29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgICAgIENvbXBpbGF0aW9u
UmVzdWx0IHByaXZhdGVDb21waWxlKENvZGVCbG9jayosIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsK
IAogICAgICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4
Y2VwdGlvbiBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24pCkBAIC0yMjMsNiArMjM3LDMyIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29k
ZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29k
ZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2Rl
Jiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZThUb01ldGFk
YXRhKFZhbHVlVHlwZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmUzMlRvTWV0
YWRhdGEoR1BSUmVnLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBtYXRlcmlhbGl6ZVBv
aW50ZXJJbnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcp
OworCisgICAgcHVibGljOgorICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25lZCBjb25z
dGFudEluZGV4LCBHUFJSZWcpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgbG9hZEdsb2Jh
bE9iamVjdChHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0
dWFsUmVnaXN0ZXIsIEdQUlJlZyk7CisKKyAgICAgICAgdm9pZCBlbWl0UHV0Q29kZUJsb2NrVG9G
cmFtZUluUHJvbG9ndWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1QwKTsKKwogICAgICAgICB2b2lkIGV4
Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRvSGFuZGxlcikKICAgICAgICAgewogICAgICAgICAgICAg
bV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpAQCAtMjU0LDYgKzI5NCwx
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IElu
c3RydWN0aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgorICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAorICAgICAgICAgICAgT3A6
Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MKKyAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxf
dmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKKworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KKyAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKKyAgICAgICAgICAgIE9w
OjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0
cnVjdF92YXJhcmdzCisgICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cworICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CisjZWxzZQogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAg
ICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9w
X2NvbnN0cnVjdF92YXJhcmdzCkBAIC0yNjUsOSArMzE4LDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzCiAgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3Qg
T3AmLCBDYWxsTGlua0luZm8qKTsKKyNlbmRpZgogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPgotICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5m
byosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFp
bENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5r
SW5mb0luZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAg
ICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yODcsMTQgKzM0MSwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdp
c3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAg
ICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmll
cihKU0NlbGwqIG93bmVyKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBv
d25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2Zp
bGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAv
LyBzY3JhdGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFk
YXRhJiwgR1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShj
b25zdCBCeXRlY29kZSYsIEdQUlJlZyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVj
b2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1ZhbHVl
UmVncyk7CiAjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQ
cm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOwpA
QCAtMzA1LDggKzM1OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1
ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4KICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlm
UHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpOwogCi0gICAgICAgIHZvaWQgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVn
aXN0ZXJJRCBzY3JhdGNoR1BSKTsKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwg
UmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBC
eXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0
ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01OTMsNyAr
NjQ4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjExLDcgKzY2NSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICNlbmRpZgogICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNywxNCArNjgxLDE0IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vu
c2lnbmVkKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5k
LCBBY2Nlc3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJl
Z2lzdGVyIGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhw
ckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0
VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhckluamVj
dGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAgICAg
IHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BS
KTsKICAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNp
Z25lZCBkZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQpAQCAtNjQ2LDcgKzcwMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAg
ICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50
cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRT
ZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7
CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRv
U2V0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQg
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBl
bWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NSw2ICs3MDks
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFt
ZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAgYm9v
bCBpc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENvbnN0
YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRD
aGFyKFZpcnR1YWxSZWdpc3Rlcik7CkBAIC02NzYsMTMgKzczMSwxMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZN
Jik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29w
X3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV92YWxfcHJl
cGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKFZNJik7Ci0gICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcmVz
b2x2ZV9zY29wZUdlbmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3Io
Vk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gb3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYpOwpAQCAtNjk2LDMyICs3NDksMTYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9i
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBl
IyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVf
R0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVf
R0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9y
T3BSZXNvbHZlU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIE1vZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQg
aW5saW5lIHRoYW4gdXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVW
YXIgYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3Bl
LgotICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFy
IHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNM
QVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVf
IyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVf
VFlQRShERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVT
T0xWRV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29u
c3QgY2hhciogdGh1bmtOYW1lKTsKLQogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0
aHlHZW5lcmF0b3IoVk0mKTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2Vu
ZXJhdG9yKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8
UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3Bl
VGh1bmsoVk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtO
YW1lKTsKKwogICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZy
b207CkBAIC03NjAsMTAgKzc5NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9u
KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
KTsKICAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdChBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEm
LCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShN
ZXRhZGF0YSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25z
dCBCeXRlY29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAg
ICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0
eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRz
PE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIx
LDIwICs4NTgsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNl
dCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5
cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBB
cmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5
cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlv
biwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBl
IG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAg
ICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsK
LSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEs
IHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5
cGUsIHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVu
YWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+
Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFk
ZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFk
ZHJlc3MgdGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlv
blR5cGU+KHRhcmdldCwgYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRk
cmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdl
dC5vZmZzZXQpLCByZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOSwyNSArOTU2LDIyIEBA
IG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2Fu
QmVPcHRpbWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wg
Y2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxp
bmVkOyB9CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hv
dWxkRW1pdFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgp
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQo
KSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9m
aWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3
aGljaCBjYXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1p
dFByb2ZpbGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGVt
aXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAgICAg
ICAgdm9pZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wg
cmVwb3J0Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxl
VGltZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFs
dWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8v
IGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdh
bnQgdG8gdXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRo
ZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBj
b3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEJpbmFyeU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxl
KEJpbmFyeU9wKTsKKworICAgICAgICB2b2lkIHJlc2V0U1AoKTsKIAogICAgICAgICBJbnRlcnBy
ZXRlciogbV9pbnRlcnByZXRlcjsKIApAQCAtOTY0LDkgKzk5OCw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZl
Y3RvcjxTd2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25l
ZCwgdW5zaWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0
X3QsIEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9jb3BpZWRBcml0aFByb2ZpbGVzOwotCiAgICAgICAg
IEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlv
bkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjazsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCkBAIC0xMDAwLDExICsxMDMxLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIYXNo
TWFwPGNvbnN0IEluc3RydWN0aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4+
IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAogICAgICAgICBib29sIG1f
Y2FuQmVPcHRpbWl6ZWQ7Ci0gICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsK
ICAgICAgICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5k
ZXggbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgICAgIFJlZlB0cjxEaXJlY3RK
SVRDb2RlPiBtX2ppdENvZGU7CisgICAgICAgIENvZGVCbG9jayogbV9wcm9maWxlZENvZGVCbG9j
ayB7IG51bGxwdHIgfTsKKyAgICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fdW5saW5rZWRDb2Rl
QmxvY2sgeyBudWxscHRyIH07CisKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAg
ICAgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENv
bnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBtX2dsb2JhbE9iamVjdENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpIH07CisgICAgICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtl
ZENhbGxzOworICAgICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOwor
ICAgICAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZv
czsKKyAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJs
ZXM7CisgICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzOworCisgICAgICAgIHN0cnVjdCBOb3RBQ29kZUJsb2NrIHsgfSBtX2NvZGVCbG9j
azsKKworICAgICAgICBib29sIG1faXNTaGFyZWFibGUgeyB0cnVlIH07CiAgICAgfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09wZXJh
bmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewogICAg
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1l
bnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BS
Mik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8g
WmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmVnVDEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MiwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICsz
NzUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQog
CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJl
Z1QwKTsKICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklUOjpl
bWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRl
PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyog
bmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBV
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5lZ2F0ZT4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9m
aWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwg
bmVnYXRlSUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9z
ZSBvcGVyYXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50
CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsK
QEAgLTg5OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3Ry
dWN0CiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJ
Qyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3MuYWRk
SklUQWRkSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJ
QywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRp
b25WYWx1ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QoSklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0
aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBp
ZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1p
dFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmls
ZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwg
c3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2Fz
ZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUsMTAgKzEw
MjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgICAg
ICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEds
b2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwg
bGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwxMyArMTA2Miwx
NCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAjZW5kaWYKIAog
ICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmls
ZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVn
VDQsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWlu
dGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1Jl
Z3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0
PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdU
NCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lD
X1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwxMyArMTEy
OCwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAjZW5kaWYK
IAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFBy
b2ZpbGUoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9m
aWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJh
dGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNl
X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpf
SklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklU
T3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUo
TUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExNjYs
NyArMTE3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAog
ICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAgICBpZiAo
c2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+
KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBT
bmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgp
KTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlw
ZXMuc2Vjb25kKCkpOwpAQCAtMTIxMSw4ICsxMjIwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2
KGNvbnN0IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVC
bG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgSklUTXVsSUMqIG11bElD
ID0gbV9tYXRoSUNzLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlv
blRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElD
RmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQ
cm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJ
Qyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BTdWI+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Cisg
ICAgSklUU3ViSUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7
CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklD
KTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2Rl
KQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCkpOwogICAgIGVtaXRTdG9yZShkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9i
eXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QxLCByZWdU
MCk7CiB9CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogSklUOjpjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiB7CiAgICAg
dW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIGlu
dCBhcmdDb3VudCA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVj
a3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFj
a09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCkBAIC0x
OTIsNyArMTkyLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAog
ICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3Vt
ZW50czsKICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJh
bWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCAtZmlyc3RGcmVl
UmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVy
YXRpb24sIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0
VmFyYXJnc0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7
CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDYgKiBzaXplb2Yo
dm9pZCopKSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMjAyLDcgKzIwMiw3
IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0
dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBl
bHNlCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7
Ci0gICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0KSwgZmlyc3RWYXJBcmdPZmZz
ZXQsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBtX3Byb2ZpbGVk
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0KSwg
Zmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdU
MSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KQEAgLTIzMiwxMCArMjMy
LDEwIEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwogICAgIHN0b3JlUHRyKGNh
bGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zm
c2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdU
MSwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fcHJvZmls
ZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CiAKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CiAKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsK
LSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9w
cm9maWxlZEJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
KTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAg
ICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAtMjU4LDggKzI1OCw4
IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1
YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdu
bWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjg2LDExICsy
ODYsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICov
CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKICAgICBpZiAob3Bjb2RlSUQgIT0g
b3BfY2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5m
byhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgICAgICBpbmZvID0gbV9wcm9maWxl
ZEJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAg
ICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CiAgICAgLy8gU1AgaG9sZHMgbmV3
Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQg
aW5pdGlhbGl6ZWQuCiAgICAgCi0gICAgYXV0byBieXRlY29kZUluZGV4ID0gbV9jb2RlQmxvY2st
PmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOworICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1f
cHJvZmlsZWRCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7CiAgICAgdWludDMyX3Qg
bG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7CiAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdU
MSwgcmVnVDApOyAvLyByZWdUMSwgcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAtMzI0LDcgKzMyNCw3
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBhZGRTbG93
Q2FzZShzbG93UGF0aHMpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVz
dWx0KGJ5dGVjb2RlKTsKQEAgLTM0MSwxMiArMzQxLDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BD
YWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhT
dGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QzKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CiAKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewpAQCAt
MzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsNyArMzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIEpTVmFsdWVSZWdzIG5leHRSZWdzID0gSlNWYWx1
ZVJlZ3ModGFnTmV4dEdQUiwgcGF5bG9hZE5leHRHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ss
CiAgICAgICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAogICAgICAgICBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksCiAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKSwKQEAgLTQxMCw3ICs0MDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG5leHRSZWdzKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayks
IG5leHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwg
bmV4dFJlZ3MpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKQEAgLTQ0MCwxMCArNDM5LDEw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZSgKLSAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBt
ZXRhZGF0YQorICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCAvLyBt
ZXRhZGF0YQogICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgog
ICAgICAgICBuZXh0VlJlZywgLy8gcmVzdWx0Ci0gICAgICAgIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICBUcnVzdGVkSW1tUHRyKG1f
cHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCiAgICAgICAgIGdlbi5zdHVi
SW5mbygpLCAvLyBhcmcyCiAgICAgICAgIEpTVmFsdWVSZWdzKHRhZ0l0ZXJhdG9yR1BSLCBwYXls
b2FkSXRlcmF0b3JHUFIpLCAvLyBhcmczCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKQEAg
LTQ1Miw3ICs0NTEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25z
CiAgICAgYXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJ
bW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogCiAgICAgZG9uZS5saW5r
KHRoaXMpOwogfQpAQCAtNDYwLDcgKzQ1OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0g
KCkgewogICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNh
c2UgTmFycm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC01MDYs
NyArNTA1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAg
ICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh0YWdWYWx1ZUdQUik7CiAgICAgICAgIHByZXNlcnZlZFJl
Z3MuYWRkKHBheWxvYWRWYWx1ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssCisgICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2ss
CiAgICAgICAgICAgICBKSVRUeXBlOjpCYXNlbGluZUpJVCwKICAgICAgICAgICAgIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwKQEAgLTUzMywxMCArNTMyLDEwIEBAIHZv
aWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgR1BSUmVnIHNj
cmF0Y2gxID0gcmVnVDY7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Q3OwogICAgICAg
ICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwot
ICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNW
YWx1ZVJlZ3ModGFnRG9uZUdQUiwgcGF5bG9hZERvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9u
ZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHRhZ0RvbmVHUFIsIHBheWxvYWRE
b25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
OwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssCisgICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICBKSVRUeXBl
OjpCYXNlbGluZUpJVCwKICAgICAgICAgICAgIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwK
ICAgICAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKSwKQEAgLTU4OCwxMCArNTg3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAg
ICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAgICAg
ICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgLy8gbWV0YWRhdGEKICAg
ICAgICAgICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgLy8gb3BlcmF0aW9uCiAgICAgICAg
ICAgICBkb25lVlJlZywgLy8gcmVzdWx0Ci0gICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKKyAgICAgICAgICAgIFRydXN0ZWRJbW1Q
dHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKICAgICAgICAgICAg
IGdlbi5zdHViSW5mbygpLCAvLyBhcmcyCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVy
UmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFyZzMKICAgICAgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJh
d0JpdHMoKSk7IC8vIGFyZzQKQEAgLTYwMiw3ICs2MDEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2tw
b2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJ
bW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgIH0KIAogICAgIHsg
ICAKQEAgLTYxOCwxMCArNjE3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9u
ZXh0KGNvbnMKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICAgICAg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICAgICAgYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAgICAgICAgICAgYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgLy8gbWV0YWRhdGEKICAgICAgICAgICAg
IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgLy8gb3BlcmF0aW9uCiAgICAgICAgICAgICB2YWx1
ZVZSZWcsIC8vIHJlc3VsdAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCisgICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJv
ZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCiAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKSwgLy8gYXJnMgogICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnSXRlclJlc3VsdEdQ
UiwgcGF5bG9hZEl0ZXJSZXN1bHRHUFIpLCAvLyBhcmczCiAgICAgICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkp
OyAvLyBhcmc0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxl
ci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNp
bmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFy
Z3NGcmFtZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxp
Z25tZW50LmgiCkBAIC00NCw3ICs0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2Rl
KQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVn
VDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUs
IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7
CiB9CiAKQEAgLTUzLDE4ICs1NCwxOCBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNv
ZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92
YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9w
OjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJ
VDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQor
SklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0
ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2Fs
bChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCisKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9w
X2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVn
VDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0YSwgY2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNl
ZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVj
b2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxs
TGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9m
TGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0K
IApAQCAtNzgsNyArNzksNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9
PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdz
CiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitK
SVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFy
Z3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNv
bXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRpb24g
PSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAg
ICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2Fs
bE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVP
cGVyYXRpb24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09m
ZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEp
OwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwg
cmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMo
KSwgNSAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBA
IC0xMDEsMTQgKzEwMywxNiBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRl
Y29kCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1l
bnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNl
dHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJz
dFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAg
IGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0
VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwog
CiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0g
ICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCks
IHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJl
Z1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQs
IHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRP
Zk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RC
aWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdU
MiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAg
Ly8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEzMSwxNSBAQCBib29sIEpJVDo6Y29t
cGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2Fs
bEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdp
c3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0K
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRy
KGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxs
ZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2Vj
bWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxs
RXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOworICAgIHJl
c2V0U1AoKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQ
UjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJldHVyblZhbHVlR1BSKSk7
CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiAKQEAgLTE0OCw3ICsxNTEsNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BD
YWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2Fs
bExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CisgICAgQ2FsbExpbmtJbmZv
KiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CiAK
ICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAtMTU2LDQzICsx
NTksNDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXpl
b2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFs
Q2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAgIHJlc2V0U1Ao
KTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJ
bmZvKiwgdW5zaWduZWQpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5s
aW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkK
IHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxl
VGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNv
bnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5z
aWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExp
bmtJbmZvQ29uc3RhbnQpCiB7Ci0gICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7
Ci0gICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBz
aHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVy
OwotICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxG
cmFtZVNodWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZs
ZURhdGE+KCk7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2Fy
Z2M7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhcmFtZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCk7CisgICAgc2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVyID0g
R1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAgc2h1ZmZsZURhdGEtPm51bUxvY2FscyA9
CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNp
emVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9h
cmdjKTsKKyAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAg
ICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgIHNodWZmbGVEYXRhLT5hcmdzW2ldID0K
ICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKICAgICAgICAg
ICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRl
Y29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKICAgICB9Ci0gICAg
c2h1ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAs
IERhdGFGb3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJz
KG1fY29kZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRh
KTsKKyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAs
IERhdGFGb3JtYXRKUyk7CisgICAgc2h1ZmZsZURhdGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVy
cygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpOwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZd
IHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJl
Z1QyKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2Fs
bERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CisgICAgICAgIENhbGxG
cmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwog
ICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CisKKyAgICBzaHVmZmxlRGF0YS0+
c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVm
ZmxlRGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9j
YXRpb247CiAgICAgCkBAIC0yMTgsMTQgKzIyNSwyNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBD
OyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVy
IGFmdGVyIHJldHVybi4KICAgICAqLwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7
Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAg
ICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CisKKyAgICBVbmxpbmtlZENhbGxM
aW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBp
bmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFs
KSB7CisgICAgICAgIGluZm8gPSBtX3VubGlua2VkQ2FsbHMuYWRkKCk7CisgICAgICAgIGluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIGluZm8tPmNhbGxUeXBl
ID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCk7CisKKyAgICAgICAgaW5mb0Nv
bnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExp
bmtJbmZvLCBpbmZvKTsKKworICAgICAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNp
emUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
by5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS51bmxpbmtlZENhbGxMaW5rSW5mbyA9IGluZm87Cisg
ICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJ
bmZvQ29uc3RhbnQgPSBpbmZvQ29uc3RhbnQ7CisgICAgfQorICAgIGNvbXBpbGVTZXR1cEZyYW1l
KGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQpOwogCiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1l
ICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6
ZWQuCi0gICAgYXV0byBieXRlY29kZUluZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgo
aW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgo
Ynl0ZWNvZGVJbmRleCkuYml0cygpOworICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIobG9jYXRpb25CaXRzKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNh
bGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxsZWUuCkBAIC0yMzQsMTYgKzI1MiwxMiBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgaWYgKGNvbXBp
bGVDYWxsRXZhbChieXRlY29kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX2Nh
bGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZv
LT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsK
LSAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7
Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0lu
Zm8gPSBpbmZvOwotCi0gICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2Fs
bExpbmtJbmZvSW5kZXgpKQorICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8s
IGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3RhbnQpKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCByZWdUMik7CiAgICAgaWYgKG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cykgewotICAgICAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZ
ZXMsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFp
bENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0gewogICAgICAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxD
YWxsU2xvdyhyZWdUMik7CiAgICAgICAgIH0pOwpAQCAtMjUzLDE0ICsyNjcsMTMgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1Qw
LCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olllcyk7CisgICAgYXV0byBzbG93UGF0
aHMgPSBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1Qy
KTsKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xv
d1BhdGhzKTsKIAogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
ZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKKyAgICByZXNldFNQKCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3Vs
dChieXRlY29kZSk7CiB9CkBAIC0yNzMsMjEgKzI4NiwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbFNsb3dDYXNlKGNvbnN0IEluCiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0g
ICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0
ID0gbGFiZWwoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29uc3Rh
bnQobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9D
b25zdGFudCwgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMyk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxs
TGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92bSwgKnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6
ZW1pdERhdGFJQ1Nsb3dQYXRoKCptX3ZtLCAqdGhpcywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8
fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAg
YWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwor
ICAgIHJlc2V0U1AoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzk1LDE3ICs0MDcsMzEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogCiAgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwogICAgIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6c3R1YkluZm87CisKKyAgICBtb3ZlKHJlZ1QwLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgp
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZv
R1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2Ug
bWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBT
UAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEdQUik7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KQEAgLTQxNiwxMCArNDQyLDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIGNvbXBpbGVPcENhbGxT
bG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAK
LQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIg
PSByZWdUMDsKKyAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgIG5vdE9iamVjdC5hcHBlbmQo
YnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9yR1BSKSk7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFu
Y2hJZk5vdE9iamVjdChpdGVyYXRvckdQUikpOwpAQCAtNDMyLDE5ICs0NTYsMTcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUklu
Zm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIH0gZWxz
ZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
aXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBtb3ZlKGl0ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+
KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogCiAgICAgYXV0byBkb25lID0ganVtcCgpOwogCiAgICAg
bm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0
ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1
bWVudEdQUjApOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwogfQpAQCAtNDUyLDcgKzQ3NCw2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgYXV0
byogdHJ5RmFzdEZ1bmN0aW9uID0gKFsmXSAoKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rp
b24tPndpZHRoKCkpIHsKICAgICAgICAgY2FzZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0
X3RyeV9mYXN0X25hcnJvdzsKQEAgLTQ3MCw1MCArNDkxLDc5IEBAIHZvaWQgSklUOjplbWl0X29w
X2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90
RXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PHVpbnQzMl90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwogCiAgICAgZ2VuZXJpY0Nhc2Uu
bGluayh0aGlzKTsKLSAgICBvcjgoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0
ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2l0ZXJh
dGlvbk1ldGFkYXRhLnNlZW5Nb2RlcykpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSAr
IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSwgcmVnVDApOworICAg
IG9yMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6Okdl
bmVyaWMpKSwgcmVnVDApOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBP
cEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0
ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSk7CiAgICAgY29tcGlsZU9w
Q2FsbDxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBk
b25lLCB2YWx1ZSB9IEpTT2JqZWN0KSBpbiByZWdUMAogCi0gICAgR1BSUmVnIHZhbHVlR1BSID0g
cmVnVDA7Ci0gICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKLSAgICBHUFJSZWcgZG9u
ZUdQUiA9IHJlZ1QxOwotICAgIC8vIGl0ZXJSZXN1bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0
aGUgZmlyc3QgZ2V0IGJ5IGlkIGJlbG93LgotICAgIG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRH
UFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisgICAg
bW92ZShyZXR1cm5WYWx1ZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOwogCisgICAgY29uc3RleHBy
IEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CiAgICAg
ewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaXRlclJlc3VsdEdQUik7Cisg
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSBiYXNlR1BS
KTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAg
ICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVncyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJlc2VydmVkUmVncy5hZGQodmFsdWVHUFIpOwor
ICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZChpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
Qnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywK
LSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJS
ZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgcmVnVDMsIEFjY2Vzc1R5cGU6OkdldEJ5
SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3Ms
CisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgcmVzZXRT
UCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2
ZWx5IHJlc2V0IFNQCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMu
YXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
SlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRv
TmV4dENoZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0
Y2gxID0gcmVnVDI7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBS
ZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzKGRvbmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAg
ICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lz
dGVycyk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2Nh
dGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3Jh
dGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlz
dCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQ
UiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlv
bkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIGdsb2JhbEdQUik7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAg
ICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBiYXNlR1BSKTsKIAogICAgICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkp
LCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9w
ZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAg
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpH
ZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1p
Z2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AK
KyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7
IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25E
b25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1NzcsNTUgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
Ojpkb250Q2xvYmJlclJlZ2lzdGVyOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBk
b25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIg
PSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1w
TGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxs
KGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENl
bGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRl
bnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAgICAK
ICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2Jq
ZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5v
dE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAot
ICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86
Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQ
UkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQ
UiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkp
OworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJl
ZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92
YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAg
fQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BS
UmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCog
aWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAg
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7
Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7
Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIw
LCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3Vs
dEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihp
ZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRH
UFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29k
ZS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsMTEgQEAKICNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogCisKIG5hbWVzcGFj
ZSBKU0MgewogCitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKKwogbmFtZXNwYWNlIERGRyB7CiBj
bGFzcyBDb21tb25EYXRhOwogY2xhc3MgSklUQ29kZTsKQEAgLTE1OSwxMCArMTYyLDEwIEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAg
ewotICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVz
ZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApAQCAtMjIzLDYgKzIyNiw4IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlQXR0cmli
dXRlID09IFNoYXJlQXR0cmlidXRlOjpTaGFyZWQ7IH0KIAorICAgIHZpcnR1YWwgUENUb0NvZGVP
cmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorCiBwcml2
YXRlOgogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFNoYXJlQXR0cmlidXRlIG1fc2hhcmVB
dHRyaWJ1dGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9u
S2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBp
bGF0aW9uS2V5LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb21waWxhdGlvbktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcg
QEAgdm9pZCBKSVRDb21waWxhdGlvbktleTo6ZHVtcChQcmludFN0cmVhbQogICAgICAgICBvdXQu
cHJpbnQoIjxlbXB0eT4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBvdXQucHJpbnQo
IihDb21waWxlIG9mICIsICptX3Byb2ZpbGVkQmxvY2ssICIgd2l0aCAiLCBtX21vZGUsICIpIik7
CisgICAgb3V0LnByaW50KCIoQ29tcGlsZSBvZiAiLCBSYXdQb2ludGVyKG1fY29kZUJsb2NrKSwg
IiB3aXRoICIsIG1fbW9kZSwgIikiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5oCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDU3ICszMCw1NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgSlNDZWxsOwog
CiBjbGFzcyBKSVRDb21waWxhdGlvbktleSB7CiBwdWJsaWM6CiAgICAgSklUQ29tcGlsYXRpb25L
ZXkoKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhudWxscHRyKQorICAgICAgICA6IG1fY29k
ZUJsb2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9tb2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6SW52
YWxpZENvbXBpbGF0aW9uKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgSklUQ29tcGlsYXRpb25L
ZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fcHJvZmlsZWRC
bG9jayhudWxscHRyKQorICAgICAgICA6IG1fY29kZUJsb2NrKG51bGxwdHIpCiAgICAgICAgICwg
bV9tb2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6REZHKQogICAgIHsKICAgICB9CiAgICAgCi0gICAg
SklUQ29tcGlsYXRpb25LZXkoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBKSVRDb21waWxhdGlv
bk1vZGUgbW9kZSkKLSAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKKyAg
ICBKSVRDb21waWxhdGlvbktleShKU0NlbGwqIHByb2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0aW9u
TW9kZSBtb2RlKQorICAgICAgICA6IG1fY29kZUJsb2NrKHByb2ZpbGVkQmxvY2spCiAgICAgICAg
ICwgbV9tb2RlKG1vZGUpCiAgICAgewogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUg
PT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CisgICAgICAgIHJldHVy
biAhbV9jb2RlQmxvY2sgJiYgbV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENv
bXBpbGF0aW9uOwogICAgIH0KICAgICAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9k
ZSAhPSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKKyAgICAgICAgcmV0
dXJuICFtX2NvZGVCbG9jayAmJiBtX21vZGUgIT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlk
Q29tcGlsYXRpb247CiAgICAgfQogICAgIAotICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvZmlsZWRCbG9jazsgfQogICAgIEpJVENvbXBpbGF0aW9uTW9k
ZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEpJVENvbXBpbGF0aW9uS2V5JiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX3Byb2ZpbGVkQmxvY2sgPT0gb3RoZXIubV9wcm9maWxlZEJsb2NrCisgICAgICAg
IHJldHVybiBtX2NvZGVCbG9jayA9PSBvdGhlci5tX2NvZGVCbG9jawogICAgICAgICAgICAgJiYg
bV9tb2RlID09IG90aGVyLm1fbW9kZTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjpwYWlySW50SGFzaChXVEY6OlB0ckhh
c2g8Q29kZUJsb2NrKj46Omhhc2gobV9wcm9maWxlZEJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1
bmRlcmx5aW5nX3R5cGU8SklUQ29tcGlsYXRpb25Nb2RlPjo6dHlwZT4obV9tb2RlKSk7CisgICAg
ICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKFdURjo6UHRySGFzaDxKU0NlbGwqPjo6aGFzaCht
X2NvZGVCbG9jayksIHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPEpJVENvbXBpbGF0
aW9uTW9kZT46OnR5cGU+KG1fbW9kZSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRC
bG9jazsKKyAgICAvLyBFaXRoZXIgQ29kZUJsb2NrKiBvciBVbmxpbmtlZENvZGVCbG9jayogZm9y
IGJhc2xlbGluZSBKSVQuCisgICAgSlNDZWxsKiBtX2NvZGVCbG9jazsKICAgICBKSVRDb21waWxh
dGlvbk1vZGUgbV9tb2RlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRl
bnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJbmxp
bmVBY2Nlc3MuaCIKKyNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIApAQCAtNDYsMTAgKzQ3LDkgQEAgc3RhdGlj
IFN0cnVjdHVyZVN0dWJJbmZvKiBnYXJiYWdlU3R1YkluZgogSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBK
SVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzKQotICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICwgbV9qaXRUeXBl
KGppdFR5cGUpCisgICAgOiBtX2ppdFR5cGUoaml0VHlwZSkKIHsKLSAgICBtX3N0dWJJbmZvID0g
bV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9y
aWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKKyAgICBtX3N0dWJJbmZvID0gY29kZUJsb2NrID8g
Y29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VT
dHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNhbGxTaXRlSW5kZXggPSBjYWxsU2l0ZTsKIAog
ICAgIG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzOwpAQCAtNTksNyAr
NTksNiBAQCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBMaW5r
QnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgsIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCkKIHsKICAgICBtX3N0dWJJbmZvLT5zdGFydCA9
IHN0YXJ0OwotCiAgICAgbV9zdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gZmFzdFBhdGgubG9jYXRp
b25PZjxKU0ludGVybmFsUHRyVGFnPihtX2RvbmUpOwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMobV9qaXRUeXBlKSkKQEAgLTY3LDYgKzY2LDE1IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlv
biA9IHNsb3dQYXRoLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc2xvd1BhdGhC
ZWdpbik7CiB9CiAKK3ZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHVi
SW5mb0dQUikKK3sKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgUkVMRUFTRV9BU1NF
UlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworICAgIGppdC5sb2FkQ29uc3RhbnQo
c3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSks
IEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwog
SklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNl
dCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQ
UlJlZyBzdHViSW5mb0dQUikKQEAgLTExMCw3ICsxMTgsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9y
OjpKSVRHZXRCeUlkR2VuZXJhdG9yCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUg
aml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNoZWFibGVJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJl
ZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAgIDogSklUQnlJZEdlbmVy
YXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBl
LCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCi0gICAgLCBtX2lzTGVu
Z3RoQWNjZXNzKHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAgICAsIG1faXNMZW5ndGhBY2Nlc3MoY29kZUJsb2NrICYm
IHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVu
Z3RoLmltcGwoKSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlLnBheWxvYWRHUFIoKSAhPSB2
YWx1ZS50YWdHUFIoKSk7CiB9CkBAIC0xMjAsNiArMTI4LDM3IEBAIHZvaWQgSklUR2V0QnlJZEdl
bmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGEKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBtX2lz
TGVuZ3RoQWNjZXNzID8gSW5saW5lQWNjZXNzOjpzaXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxp
bmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAorCisjaWYgVVNFKEpTVkFM
VUU2NCkKK3N0YXRpYyB2b2lkIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhKSVQmIGppdCwg
R1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyBy
ZXN1bHQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgaml0Lmxv
YWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMy
KENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZSgpKSk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3Jh
dGNoKTsKKyAgICBqaXQubG9hZFByb3BlcnR5KGJhc2UsIHNjcmF0Y2gsIEpTVmFsdWVSZWdzIHsg
cmVzdWx0IH0pOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tpcElu
bGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRk
cmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwg
SklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0KTsKK30KKwor
dm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
SklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9z
dGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1
YkluZm9HUFIpOworICAgIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhqaXQsIHN0dWJJbmZv
R1BSLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAg
bV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisjZW5kaWYKKwogSklUR2V0QnlJZFdpdGhUaGlzR2Vu
ZXJhdG9yOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTEzOCw2ICsxNzcsMjAg
QEAgdm9pZCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYQogICAgIGdlbmVyYXRl
RmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwog
fQogCisjaWYgVVNFKEpTVkFMVUU2NCkKK3ZvaWQgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9y
OjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJ
bmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6
dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisg
ICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGdlbmVyYXRl
R2V0QnlJZElubGluZUFjY2VzcyhqaXQsIHN0dWJJbmZvR1BSLCBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnNj
cmF0Y2gsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAg
bV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisjZW5kaWYKKwogSklUUHV0QnlJZEdlbmVyYXRvcjo6
SklUUHV0QnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBq
aXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAg
IEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIs
IEdQUlJlZyBzY3JhdGNoLCAKQEAgLTE0OSw2ICsyMDIsMzYgQEAgSklUUHV0QnlJZEdlbmVyYXRv
cjo6SklUUHV0QnlJZEdlbmVyYXRvcgogICAgIG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMuY2xl
YXIoc2NyYXRjaCk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBKSVRQdXRCeUlkR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVk
IHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklU
Q29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgp
OworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworCisgICAg
R1BSUmVnIGJhc2UgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVn
IHNjcmF0Y2ggPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgR1BSUmVn
IHNjcmF0Y2gyID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBHUFJS
ZWcgdmFsdWUgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworCisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAg
YXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0
LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQuc3RvcmVQ
cm9wZXJ0eShKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIGJhc2UsIHNjcmF0Y2gsIHNjcmF0Y2gyKTsK
KyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJbmxpbmVBY2Nlc3Mu
bGluaygmaml0KTsKKyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0
aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25lID0gaml0
LmxhYmVsKCk7Cit9CisjZW5kaWYKKwogdm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0
ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCiB7CiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9u
KGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlSZXBsYWNlKCkpOwpAQCAtMjAwLDcg
KzI4Myw3IEBAIHZvaWQgSklURGVsQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBt
X3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5
cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0
dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKEND
YWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJ
bmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91
dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBh
dGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTIzNiw3ICszMTks
NyBAQCB2b2lkIEpJVERlbEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhCiAgICAgbV9zdGFy
dCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkg
ewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5m
byksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBq
aXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQ
UiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQ
dHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFi
bGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0yNzAsNyArMzUzLDcgQEAg
dm9pZCBKSVRJbkJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIG1fc3RhcnQgPSBq
aXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBt
X3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZh
ckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFn
KTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVt
cCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtMzAwLDYgKzM4MywzNCBAQCB2b2lk
IEpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0CiAgICAgZ2VuZXJhdGVGYXN0Q29t
bW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKKyNp
ZiBVU0UoSlNWQUxVRTY0KQordm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHVi
SW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRU
eXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0
YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5l
SW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIEdQUlJlZyByZXN1bHQgPSBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisK
KyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBq
aXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQuYm94Qm9vbGVhbih0cnVlLCBKU1ZhbHVl
UmVncyB7IHJlc3VsdCB9KTsKKyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAg
IHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsKKyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQ
dHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7
CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisjZW5kaWYKKwogSklUSW5zdGFuY2VPZkdl
bmVyYXRvcjo6SklUSW5zdGFuY2VPZkdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgcHJvdG90eXBlLCBHUFJSZWcgc3R1Yklu
Zm9HUFIsCkBAIC0zMzIsNyArNDQzLDcgQEAgdm9pZCBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpn
ZW5lcmF0ZUZhcwogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAg
ICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0
aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1f
c3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQ
dHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93
UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgp
OwpAQCAtMzY4LDcgKzQ3OSw3IEBAIHZvaWQgSklUR2V0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRl
RmFzdFAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAg
IGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BS
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0
clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJ
bmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkp
LCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhK
dW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAg
LTQwNSw3ICs1MTYsNyBAQCB2b2lkIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQ
CiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
bV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQu
Y2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+
bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklU
U3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9
IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC00NDAs
NyArNTUxLDcgQEAgdm9pZCBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I6OmdlbgogICAg
IG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0
VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1f
c3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAg
ICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQu
cGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5B
QkxFKEpJVCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRp
b25WYWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpT
Q0pTVmFsdWUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCkBAIC0zOCwxMSArMzksMTIwIEBAIG5h
bWVzcGFjZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNsYXNzIENhbGxTaXRl
SW5kZXg7CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBTdHJ1Y3R1cmVTdHVi
SW5mbzsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNzIEFj
Y2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCisjaWYg
VVNFKEpTVkFMVUU2NCkKK3N0cnVjdCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNl
bGluZURlbEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2Ug
PSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQ
UkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJ
bmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBC
YXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBs
aW5raW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5
VmFsIFN0dWJJbmZvLgorICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHN0YXRpY19hc3NlcnQo
c3R1YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm8pOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5mbzo6cmVnVDU7Cit9OworCitz
dHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBwcm90byA9IEdQUkluZm86OmFyZ3VtZW50R1BSMzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOworfTsK
Kworc3RydWN0IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVy
dHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQ
UkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGRvbnRDbG9iYmVyUmVn
aXN0ZXIgPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86
OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6
cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJl
Z1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworfTsKKwor
c3RydWN0IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDIgPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QyOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGUgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Q0OworfTsKKwor
c3RydWN0IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYnJhbmQgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChicmFu
ZCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisjZW5kaWYKKwog
Y2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yKCkgeyB9CkBAIC02MiwxMiArMTcyLDE4IEBAIHB1YmxpYzoKICAgICB2
b2lkIGZpbmFsaXplKAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExp
bmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQ
UlJlZyBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3Vu
bGlua2VkU3R1YkluZm8geyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9
OworCiBwcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBl
IG1faml0VHlwZTsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGlj
OgorICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBtX2RvbmU7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdp
bjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKQEAgLTk4LDcgKzIx
NCw3IEBAIHByb3RlY3RlZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJl
Z3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworcHVibGlj
OgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTEx
LDYgKzIyNyw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJl
Z3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSk7CiAgICAgCiAgICAgdm9p
ZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BS
UmVnIHN0dWJJbmZvR1BSKTsKIAogcHJpdmF0ZToKICAgICBib29sIG1faXNMZW5ndGhBY2Nlc3M7
CkBAIC0xMjQsNiArMjQxLDcgQEAgcHVibGljOgogICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBl
LCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpT
VmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIp
OwogCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWdu
ZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICB2b2lkIGdlbmVy
YXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIH07CiAKQEAgLTEzMiwxMCArMjUwLDExIEBA
IHB1YmxpYzoKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdp
biwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hl
YWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZh
bHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2lu
ZCk7CisgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5k
ZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVy
LAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0
dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAg
IHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQs
IEdQUlJlZyBzdHViSW5mb0dQUik7CiAgICAgCiAgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBz
bG93UGF0aEZ1bmN0aW9uKCk7CiAKQEAgLTE2MywxMSArMjgyLDkgQEAgcHVibGljOgogCiAgICAg
dm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAg
SlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxl
SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTE5MSw4ICszMDgsNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMzEsNiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAot
cHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICsz
NTQsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTI1NSw2ICszNjYsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFs
dWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiAgICAgdm9pZCBnZW5lcmF0ZUZh
c3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZv
R1BSKTsKIH07CiAKIGNsYXNzIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMg
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewpAQCAtMjc3LDggKzM4OSw2IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVm
ZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xv
d1BhdGhKdW1wOwogfTsKIApAQCAtMzAyLDExICs0MTIsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAg
SlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0OwogCi0gICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJs
ZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMzAsOCArNDM4LDYgQEAgcHVibGljOgog
ICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2
YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1i
bGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyAr
MzUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3Bl
cmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNy
Yy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAg
ICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3Jj
KSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3Vi
bGUoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQo
VmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBBbGwgbGlu
ayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENv
ZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlu
a2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFs
UmVnaXN0ZXIgZW50cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjphcHBlbmRDYWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYg
bWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZp
cnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lz
dGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0
dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1Zh
bHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3Jl
KGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1
cm4gY2FsbDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRo
UHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1
YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5j
dGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQ
UjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIy
LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tu
b3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBib29s
IEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hl
Y2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJU
aGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2Vu
ZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRz
KCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0
ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5h
ZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0
ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkp
OwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0
ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5
ICszMTgsMjkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lz
dGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAKKyNpZiBVU0UoSlNW
QUxVRTMyXzY0KQogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVl
UHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKIHsKICAgICBBU1NFUlQo
c2hvdWxkRW1pdFByb2ZpbGluZygpKTsKIAotICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZp
Z3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAg
ICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQodmFsdWUuZ3ByKCks
IHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UKICAgICBFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2
YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKICAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwg
JmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKICAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigp
LCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKIH0KKyNlbmRpZgogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNs
dHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lk
PiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2Rl
KQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApKTsKICNlbmRpZgpAQCAtMzIzLDQxICszNDgsMzcgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFk
YXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBt
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCisjaWYgVVNFKEpTVkFMVUU2NCkKK3RlbXBsYXRl
PHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAg
aWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKLX0KIAotI2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2Zp
bGUsIEdQUlJlZyByZXN1bHRSZWcpCi17Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1
ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIHB0cmRpZmZfdCBvZmZzZXQg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVPZmZzZXRGb3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRl
eC5jaGVja3BvaW50KCkpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7Cisg
ICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBvZmZzZXQpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQor
dGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQog
ewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3Vs
dFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdz
KHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiBhcnJh
eVByb2ZpbGUsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBS
ZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoc2hv
dWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RT
ZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHNjcmF0Y2hHUFIs
IGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmlsZSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIs
IFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2Vs
bEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQogewotICAgIGlmIChzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKLSAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9y
ZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYXJyYXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9m
ZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKSk7Ci0gICAgfQorICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFy
cmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQo
KSwgY2VsbEdQUiwgc2NyYXRjaEdQUik7CiB9CiAKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6
OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQpAQCAtMzgwLDcgKzQw
MSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2
b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklE
IHZhbHVlKQogewogICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdp
c3RlcihyZWcpOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29s
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBs
b2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0g
ZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2
LDcgKzUxNyw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAog
aW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lz
dGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7Cisg
ICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgp
KQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2
LDcgKzUyNyw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAog
aW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lz
dGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93
bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAo
cmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAg
ICAgIGVsc2UKQEAgLTUxNCwxMSArNTM1LDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNs
b3dDYXNlSWZOb3RKUwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVy
YW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlz
Q29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90
JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAt
NTQ0LDExICs1NjAsMTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxS
ZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25s
eSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5
dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAg
ICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAo
bV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhz
cmMpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KHZhbHVlKSksIGRzdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbG9hZENvZGVCbG9j
a0NvbnN0YW50KHNyYywgZHN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTY2LDEx
ICs1ODIsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAg
ICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0lu
dDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQo
ZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTU5NSw3ICs2MDYsNyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVy
IHZSZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykpCisgICAg
aWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZyk7CiB9CiAKQEAgLTYzNywzMCArNjQ4LDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklU
OjpqdW1wVGFyZ2V0KGNvbnN0IAogewogICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0
YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3Ry
dWN0aW9uKTsKLX0KLQotQUxXQVlTX0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0
SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNvZGUpCi17Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNv
ZGUubV9tZXRhZGF0YUlEICsgMTsgLy8gSGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtleQot
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsKLSAgICBp
ZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IEdldFB1dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8g
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAgIG1fY29w
aWVkR2V0UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAgIHJldHVy
biBnZXRQdXRJbmZvOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZU19J
TkxJTkUgQmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9w
IGJ5dGVjb2RlKQotewotICAgIHVpbnQ2NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4o
QmluYXJ5T3A6Om9wY29kZUlEKSArIDEpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5
dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkQXJpdGhQ
cm9maWxlcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQcm9m
aWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5hcnlB
cml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOwotICAgIG1fY29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0
aFByb2ZpbGUpOwotICAgIHJldHVybiBhcml0aFByb2ZpbGU7CisgICAgcmV0dXJuIG1fdW5saW5r
ZWRDb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY4MSw2ICs2NjksNjAgQEAgQUxXQVlTX0lOTElORSBFQ01B
TW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9
CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zm
c2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX21ldGFkYXRhR1BS
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3Qg
Qnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAg
IGxvYWQzMihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFk
YXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKHNfbWV0YWRhdGFHUFIs
IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5
dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1
ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmU4
VG9NZXRhZGF0YShWYWx1ZVR5cGUgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6
ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTgodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwg
bV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0
ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwgY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlMzIodmFs
dWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFs
aXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX3VubGlu
a2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkg
KyBvZmZzZXQpLCBzX21ldGFkYXRhR1BSLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpsb2FkQ29uc3RhbnQoSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFudElu
ZGV4LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX2NvbnN0YW50c0dQ
Uiwgc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQpOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1
bHQpCit7CisgICAgbG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7
Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0
dWFsUmVnaXN0ZXIgY29uc3RhbnQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0
LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkpLCByZXN1bHQpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICog
c2l6ZW9mKHZvaWQqKSksIHJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmpl
Y3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxv
Y2spOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0Zp
bmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwog
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVu
dGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0
dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2Jq
ZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdExvYWRQYXlsb2FkKGhhc0luc3Rh
bmNlVmFsdWUsIHJlZ1QwKTsKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBT
eW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCiAgICAgSnVtcCBoYXNJbnN0YW5jZVZhbHVlTm90
Q2VsbCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwoaGFzSW5zdGFuY2VWYWx1ZSk7Ci0gICAgSnVtcCBj
dXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0
YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUg
PSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9u
KCkpKTsKIAogICAgIC8vIFdlIGtub3cgdGhhdCBjb25zdHJ1Y3RvciBpcyBhbiBvYmplY3QgZnJv
bSB0aGUgd2F5IGJ5dGVjb2RlIGlzIGVtaXR0ZWQgZm9yIGluc3RhbmNlb2YgZXhwcmVzc2lvbnMu
CiAgICAgZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMCk7CkBAIC0xNjIsNyArMTYy
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90byk7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksCisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAog
ICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAg
IHJlZ1QwLCAvLyByZXN1bHQKICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCkBAIC0xOTYsNyArMTk2
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7
CiAgICAgZW1pdExvYWRUYWcocHJvdG8sIHJlZ1QzKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMCwgcmVnVDIpLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDEpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX3Byb2ZpbGVkQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDAsIHJlZ1QyKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QxKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKIH0KIApAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJl
Z1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoY29uc3RydWN0b3IsIHJlZ1QyKTsKICAgICBlbWl0
TG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUNCwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1Qz
KSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCByZWdU
MiwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSk7CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJl
dHVyblZhbHVlR1BSKTsKIH0KICAgICAKQEAgLTI0OCw3ICsyNDgsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAg
ICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzc4LDcgKzM3
OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnMKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbmFtZSA9IGJ5dGVjb2RlLm1fbmFtZTsKICAgICBlbWl0TG9hZFBheWxvYWQo
ZnVuYywgcmVnVDEpOwogICAgIGVtaXRMb2FkKG5hbWUsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9i
amVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
NDA4LDcgKzQwOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGkK
ICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdU
MzsKICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0g
ICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2hJ
ZkZhbHNleSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1Qx
LCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDIyLDcgKzQyMiw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICAgICBKU1ZhbHVlUmVncyB2
YWx1ZShyZWdUMSwgcmVnVDApOwogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAgIEdQ
UlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwg
dmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTQzNyw3ICs0MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25z
dCBJbnN0cnVjCiAKICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAg
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CiAKQEAgLTQ2Myw3ICs0
NjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1CiAKICAgICBh
ZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFy
Z2V0KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCkBAIC01
MDQsNyArNTA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwog
dm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpuZXFQdHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwog
ICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUu
bV9zcGVjaWFsUG9pbnRlcik7CiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsK
QEAgLTU1MiwxMyArNTUyLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0
cnVjdGkKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsK
IAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmluZ0VxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CiAgICAgc3RvcmVSZXN1bHQuYXBwZW5k
KGp1bXAoKSk7CiAKICAgICAvLyBHZW5lcmljIGNhc2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5k
KGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91YmxlcwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhp
cyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fcHJv
ZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogCiAgICAgc3RvcmVSZXN1bHQubGluayh0aGlzKTsK
ICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtNTkxLDE0ICs1OTEs
MTQgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsbwogICAgIGdlbmVy
aWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5n
IGNhc2UuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgcmVnVDAsIHJlZ1QyKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIodHlw
ZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BS
KSwganVtcFRhcmdldCk7CiAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVy
aWMgY2FzZS4KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBk
b3VibGVzCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFU
eXBlOjpFcSA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwog
CiAgICAgZG9uZS5saW5rKHRoaXMpOwpAQCAtNjQzLDEzICs2NDMsMTMgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFu
Y2hJZk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVT
dHJpbmdFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsK
ICAgICBzdG9yZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4K
ICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAg
ICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBz
dG9yZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZXR1
cm5WYWx1ZUdQUik7CkBAIC03NjIsNyArNzYyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pz
dHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX3Byb2ZpbGVk
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03NzIsNyArNzcyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVTdHJpY3RFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIApAQCAtNzkxLDcgKzc5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29u
c3QgSW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CkBAIC04MjMsNyArODIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5z
dHJ1YwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdU
MCwgcmVnVDIsIHJlZ1QxKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAg
LTg0Niw3ICs4NDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlv
CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKICAgICBjb3B5Q2FsbGVlU2F2
ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAg
IGVtaXRMb2FkKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhh
bmRsZXIodm0oKSk7CiB9CiAKQEAgLTg2Miw3ICs4NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
b19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKICAgICBpc0lu
dDMyLmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkKICAgICAgICAg
ZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTg4NCw3ICs4ODQsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RyCiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3ROdW1iZXIoYXJndW1lbnRWYWx1ZVJlZ3MsIHJlZ1QyKSk7CiAgICAgaXNCaWdJbnQu
bGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGlmIChzcmMgIT0gZHN0KQogICAgICAgICBlbWl0
U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQpAQCAtOTE1LDcgKzkxNSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdU
MCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSk7CiAgICAgaWYgKHNyYyAhPSBkc3QpCiAgICAgICAgIGVtaXRTdG9yZShk
c3QsIHJlZ1QxLCByZWdUMCk7CiB9CkBAIC05MzEsNyArOTMxLDE4IEBAIHZvaWQgSklUOjplbWl0
X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06
OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3Rv
cmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFt
ZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAv
LyBXaGVuIHRoZSBMTEludCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGVyZSBpcyBhIGNoYW5jZSB0
aGF0IHdlJ3ZlIGFscmVhZHkgdGllcmVkIHVwCisgICAgLy8gdGhlIHNhbWUgQ29kZUJsb2NrIHRv
IGJhc2VsaW5lLCBhbmQgd2UnbGwgY2F0Y2ggdGhlIGV4Y2VwdGlvbiBpbiB0aGUgYmFzZWxpbmUg
SklUIChiZWNhdXNlCisgICAgLy8gd2UgdXBkYXRlZCB0aGUgZXhjZXB0aW9uIGhhbmRsZXJzIHRv
IHBvaW50IGhlcmUpLiBCZWNhdXNlIHRoZSBMTEludCB1c2VzIGEgZGlmZmVyZW50IHZhbHVlCisg
ICAgLy8gaW5zaWRlIHNfY29uc3RhbnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdlIHJlc3RvcmUg
YWJvdmUgbWF5IG5vdCBjb250YWluIHRoZSBjb3JyZWN0IHJlZ2lzdGVyLgorICAgIC8vIFNvIHdl
IHJlcGxlbmlzaCBpdCBoZXJlLgorICAgIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25z
dGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKKyAgICB9CiAKICAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRj
aGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTk1NCw3ICs5NjUsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBw
cm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAg
IGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTk5Niw4ICsxMDA3LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1
dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxl
IGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0g
ICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUg
PSBtX3Byb2ZpbGVkQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgs
IG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUp
KTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAt
MTAyMywxMyArMTAzNCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJ
bnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVl
OwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRy
YWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBU
YWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRCbG9jay0+dW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFw
cGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zm
c2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNU
SVRhYmxlKHVubGlua2VkVGFibGUpOwogCiAgICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwg
cmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3du
S2V5VHlwZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgs
IHVubGlua2VkVGFibGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRy
VGFnKTsKIH0KIApAQCAtMTA0MSwxMyArMTA1MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVj
b2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBk
ZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxp
bmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9
IG1fcHJvZmlsZWRCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
dGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6
OlN0cmluZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUp
OwogCiAgICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlU
eXBlLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRh
Zyk7CiB9CiAKQEAgLTEwNjgsNyArMTA3OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNv
bnN0IEluc3RydWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBKSVQgY29kZSBkb2Vzbid0IHVzZSB0
aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAg
c3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8v
IG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBmb3IgKGlu
dCBpID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVn
aXN0ZXJzKCk7IGkgPCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCisgICAgZm9yIChpbnQg
aSA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpOyBpIDwgbV9wcm9maWxlZEJsb2NrLT5udW1WYXJzKCk7ICsraSkKICAgICAgICAgZW1p
dFN0b3JlKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBqc1VuZGVmaW5lZCgpKTsKIAogICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfZW50ZXIpOwpAQCAtMTA4Nyw3ICsxMDk4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpT
Q2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJl
Z2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CkBAIC0xMTIyLDcgKzExMzMsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFN0cnVjdHVy
ZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwog
ICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIgPSBieXRlY29kZS5tX3NyY0RzdDsKIApA
QCAtMTE0NSw3ICsxMTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IElu
c3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9j
YXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTIz
OSw3ICsxMjUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQog
ICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMSk7CiAgICAgSlNWYWx1
ZVJlZ3MgdGhpc1JlZ3MocmVnVDEsIHJlZ1QyKTsKICAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRv
d1BhY2tldFJlZywgdGhpc1JlZ3MsIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQ
YWNrZXRSZWcsIHRoaXNSZWdzLCByZWdUMywgbV9wcm9maWxlZEJsb2NrLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQsMTEgKzU0LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlv
bioKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAo
c3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAg
ICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRy
ZXNzRm9yKGRzdCkpOwotICAgICAgICBlbHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5pc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMp
OwogICAgICAgICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRk
cmVzc0Zvcihkc3QpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvYWRDb2RlQmxv
Y2tDb25zdGFudChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDAsIGFkZHJl
c3NGb3IoZHN0KSk7CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04
NywzNyArOTAsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgog
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNp
emUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFj
aXR5KCkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFs
Q29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRS
ZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJl
Z2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVn
ID0gcmVnVDM7CiAKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVt
cCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBh
dXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxv
Y2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3Ip
LCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3Jh
dGNoUmVnLCBzbG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2Uo
cmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtdXRhdG9y
RmVuY2UoKm1fdm0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAgbG9hZFB0
ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9i
amVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0
T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCBz
dHJ1Y3R1cmVSZWcpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGF1dG8gYnV0dGVy
Zmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChy
ZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1
cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBsb2FkOChBZGRy
ZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2Ny
YXRjaFJlZyk7CisgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2Ny
YXRjaFJlZyk7CisgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiB9
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIFJlZ2lzdGVySUQgc3RydWN0
dXJlUmVnID0gcmVnVDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CisgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVn
KTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0xMzEs
NyArMTMyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCiAgICAg
Ly8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxk
IGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5j
dGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRy
KE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFs
T2JqZWN0LCBtX2Z1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKSkpOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOwogCkBAIC0xNTQs
MzAgKzE1NiwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhl
IG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byBy
ZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwg
YmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSBy
ZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3RvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90
bzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
dG8sIHByb3RvR1BSKTsKICAgICAKICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4g
YmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lk
IGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBw
cm90byk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CiAKICAg
ICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAg
ICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUNSwKLSAgICAgICAgcmVnVDMsIHJlZ1Q0
KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2Fz
ZSgpOworICAgICAgICByZXN1bHRHUFIsCisgICAgICAgIHZhbHVlR1BSLAorICAgICAgICBwcm90
b0dQUiwKKyAgICAgICAgc3R1YkluZm9HUFIsCisgICAgICAgIEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6c2NyYXRjaDEsIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDIp
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
SW5zdGFuY2VPZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFwcGVu
ZChnZW4pOwotICAgIAorCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBA
IC0xOTIsMTQgKzIwMiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25z
dCBJCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
IHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbklu
c3RhbmNlT2ZPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5
cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhHUFJJbmZvOjpub25BcmdH
UFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86
Om5vbkFyZ0dQUjAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDIsIHJlZ1QxKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpz
dHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIpOworICAgIHN0YXRpY19hc3Nl
cnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9PSBhcmd1bWVudEdQUjMpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2Fs
bE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
YXJndW1lbnRHUFIzKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0
IEluc3RydWN0aW9uKikKQEAgLTI0MCw3ICsyNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBl
b2ZfaXNfdW5kZWZpbmVkKGNvCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21w
YXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzgzLDkgKzM5Miw5IEBA
IHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lmIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVz
Rm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSk7CkBAIC00MTEsNyArNDIwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZl
KGNvbnN0IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NDIsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVt
aXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNl
dEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
bmFtZSwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1l
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBh
cmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ3NCwxMCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxz
ZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9i
amVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNDkxLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1MzAsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhh
bmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0
aGUgc3RydWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAg
ICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAt
NTQzLDcgKzU1NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUK
ICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OCha
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsK
ICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs1OTMsMTMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVt
aXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBz
cGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2lu
dGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwot
ICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25z
dGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIHN0b3Jl
OFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAg
ICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2MzQsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpT
VmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwor
ICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3Jh
dGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywg
cmVnVDApLCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY1MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0
aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcg
dG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzA2LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgp
LnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92
YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
blRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNl
cHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzcyMyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19o
YW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFy
Z3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1l
bnRHUFIxOwpAQCAtNzIwLDcgKzczMiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAog
ICAgIGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAgIGpp
dC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1l
bnRHUFIwKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIoYXJndW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9i
YWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyArOTIwLDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkx
OCw3ICs5MzEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwog
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiB9CiAKQEAgLTkzMSw3ICs5NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19u
dW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTY1LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdU
MCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlm
IChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
VlJlZyk7CiB9CkBAIC05NzgsNyArOTkyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0
KGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3Jj
VlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcp
OwogfQpAQCAtOTkzLDcgKzEwMDcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3Qg
SW5zdHJ1Y3RpbwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0
Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1t
UHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQo
KSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29k
ZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFdoZW4gdGhlIExMSW50
IHRocm93cyBhbiBleGNlcHRpb24sIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFk
eSB0aWVyZWQgdXAKKyAgICAvLyB0aGUgc2FtZSBDb2RlQmxvY2sgdG8gYmFzZWxpbmUsIGFuZCB3
ZSdsbCBjYXRjaCB0aGUgZXhjZXB0aW9uIGluIHRoZSBiYXNlbGluZSBKSVQgKGJlY2F1c2UKKyAg
ICAvLyB3ZSB1cGRhdGVkIHRoZSBleGNlcHRpb24gaGFuZGxlcnMgdG8gcG9pbnQgaGVyZSkuIEJl
Y2F1c2UgdGhlIExMSW50IHVzZXMgYSBkaWZmZXJlbnQgdmFsdWUKKyAgICAvLyBpbnNpZGUgc19j
b25zdGFudHNHUFIsIHRoZSBjYWxsZWUgc2F2ZXMgd2UgcmVzdG9yZSBhYm92ZSBtYXkgbm90IGNv
bnRhaW4gdGhlIGNvcnJlY3QgcmVnaXN0ZXIuCisgICAgLy8gU28gd2UgcmVwbGVuaXNoIGl0IGhl
cmUuCisgICAgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9j
azo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19j
b25zdGFudHNHUFIpOworICAgIH0KIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwog
ICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwyMyArMTAzNiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
YXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3Jp
bmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdp
c3RlckJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1ZmZlciB8
fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5k
ZXguYXNCaXRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBt
X2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNo
VGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcp
OwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwotICAgIGlmIChidWZmZXIgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2Zp
bGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
c3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSksIHJlZ3MpOwotICAgICAgICB9KTsK
LSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKQEAgLTEwNTMsOCArMTA2Niw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVh
dGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2gg
c3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hS
ZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hS
ZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlu
a2VkVGFibGUpOwogCkBAIC0xMDgxLDEzICsxMDk0LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0
ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNo
IGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRl
Y29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAg
IGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUu
bV9taW4pOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQ
UjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEwOTksMjAgKzEx
MTMsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZp
cnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8v
IGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3
aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxp
bmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwog
ICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2Rl
SW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2Vk
VGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdX
aXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4
KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1
Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCks
IHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
RGVidWdnZXJSZXF1ZXN0cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3Rz
ID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUp
KTsKICAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTExMzMsNyArMTE0OSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
MCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVn
VDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE0OCw3ICsxMTY0
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjYsNyArMTE4MSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDAp
OwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE4OCwxMiArMTIwMywx
NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZl
biB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50
CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNl
c3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5n
IEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7
CisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpOwogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2Nr
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBj
b3VudDsgKytqKQogICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGopKTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOworICAgIAorICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgZW1pdFdyaXRlQmFycmllcihyZWdUMCk7CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25D
aGVjaygpOwogI2Vsc2UKQEAgLTEyMTIsNyArMTIyOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dGVyKGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2Vu
ZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBA
IC0xMzEwLDIzICsxMzI3LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJ
bnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0
YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5h
bE9iamVjdFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAg
ICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUg
PSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hl
ZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2Fs
bGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAg
IFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcgKzEzNTUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNz
KHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Q
cm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9m
QWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRP
Zk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQ
cm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyks
IHN0cnVjdHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5j
dGlvblJlZyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlz
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRDYWxsZWUoKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwog
ICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVk
RnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmpl
Y3RzKCkpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywg
Y2FjaGVkRnVuY3Rpb25SZWcpKTsKICAgICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhp
cyk7CkBAIC0xMzcyLDcgKzEzODUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3Qg
SW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAg
ICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQ
UiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcgKzEzOTYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Mik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwg
cmVnVDEpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9v
bGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7
CkBAIC0xMzk0LDcgKzE0MDksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IElu
c3RydWN0CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIApAQCAtMTQwNCw3ICsxNDIwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEo
Y29uc3QgSW5zdHJ1YwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCkBAIC0xNDE4LDEwICsxNDM1LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBi
eXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZh
bHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3Ry
dWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFs
dWUsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20s
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
LCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFu
Y2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5j
ZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwogICAgIGJveEJv
b2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE0
MzAsNyArMTQ0OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgK
IAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbikKIHsKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5p
dGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVG
b3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0
dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX3VubGlua2VkQ29kZUJs
b2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAg
ICAgICB1aW50cHRyX3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGlu
c3RydWN0aW9uKTsKICAgICAgICAgbG9hZFB0cihwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBz
a2lwRWFybHlSZXR1cm4gPSBicmFuY2hQdHIoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKE9w
dGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xNDQwLDcg
KzE0NTgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAjZWxz
ZQogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BS
MiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCi0gICAgICAgIG1vdmVWYWx1ZSht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkpOwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0xNDUzLDggKzE0NzEsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1p
emF0aW9uIGNoZWNrOiAKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9w
dGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAg
QWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigp
KSkpOworICAgICAgICAgICAgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4
ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQogfQogCkBAIC0xNTA5LDcgKzE1MjgsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMTUyMiw3ICsxNTQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNv
bnN0IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0m
IHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBD
UFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTE1NjQsMzQg
KzE1ODQsMzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwganNDYXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7Cisg
ICAgR1BSUmVnIGdsb2JhbEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGdsb2JhbEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2Jh
bEdQUiwganNDYXN0PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJl
Z2V4cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEp1bXAgbGF6eUp1bXA7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7
CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7Cisg
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5k
aWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0
aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbCwgYml0
d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rp
b25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKIAog
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJl
Z1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVs
c2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9m
dW5jKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2MjEsMjMgKzE2NDMsMjQg
QEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAg
ZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgogCi0gICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0
ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2
b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsK
KyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1
bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAg
ICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdH
ZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBy
ZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBl
bHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3Jf
ZnVuY19leHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTY2NCwyOSArMTY4
NywzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0Fy
cmF5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUg
PSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5v
ZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0
YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQUjIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2Zp
bGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgc2l6ZSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBi
eXRlY29kZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6
ZUluZGV4LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
LCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogI2Vsc2UK
KyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlX
aXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdU
Mik7CiAgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fy
cmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNzE4LDEwIEBAIHZvaWQgSklU
OjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJv
ZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAg
bV9pc1NoYXJlYWJsZSA9IGZhbHNlOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVk
VHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAK
QEAgLTE3NzcsMjAgKzE4MDMsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3RhaQogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdH
UFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0No
aWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBH
UFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJn
dW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5z
dXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVn
LCBzY3JhdGNoMlJlZyk7CisgICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25B
cmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAg
IEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2Vu
UGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsK
KyAgICB9CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwg
cmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNW
YWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QxKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNr
ZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKKyAgICBtX2lzU2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spOwogICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRh
dGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBiYXNpY0Js
b2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7CkBAIC0xODYwLDcgKzE4OTEsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgbW92ZVZhbHVl
KGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRS
ZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAK
QEAgLTE4ODYsNyArMTkxNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2Yo
Y29uc3QKICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
LCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1
ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKQEAg
LTI4NTUsNyArMjg1Niw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0
Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25z
dCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNT
RVJUKGNvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4g
PT0gbWluKTsKICAgICB2b2lkKiByZXN1bHQgPSBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQuZXhl
Y3V0YWJsZUFkZHJlc3MoKTsKIApAQCAtMjg4MCw3ICsyODgxLDcgQEAgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBj
b2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdDsKICAgICBp
ZiAoa2V5LmlzSW50MzIoKSkKQEAgLTI5MDMsNyArMjkwNCw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIHZvaWQqIHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmdKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVC
bG9jay0+YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAKICAgICBp
ZiAoa2V5LmlzU3RyaW5nKCkpIHsKICAgICAgICAgU3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmlu
ZyhrZXkpLT52YWx1ZShnbG9iYWxPYmplY3QpLmltcGwoKTsKQEAgLTI5MTksNyArMjkyMCw2IEBA
IEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAotI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZv
ckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IEluc3RydWN0aW9uKiBwYykpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwpAQCAtMjk3MSw3ICsyOTcxLDYgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblJlc29sdgogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXNvbHZlZFNjb3BlKTsK
IH0KLSNlbmRpZgogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNj
b3BlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IEluc3RydWN0aW9uKiBwYykpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsNyBAQCBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByCiBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAo
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBp
bnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hJ
bW1XaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoVk0qLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNp
emVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4KSk7Ci0jaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpKTsKLSNlbmRpZgogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAo
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRUb1Njb3BlLCB2b2lkLCAoSlNHbG9iYWxP
YmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3
LDEyIEBAIGF1dG8gSklUUGxhbjo6dGllcigpIGNvbnN0IC0+IFRpZXIKIAogSklUQ29tcGlsYXRp
b25LZXkgSklUUGxhbjo6a2V5KCkKIHsKLSAgICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkobV9j
b2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKKyAgICBKU0NlbGwqIGNv
ZGVCbG9jazsKKyAgICBpZiAobV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUp
CisgICAgICAgIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwor
ICAgIGVsc2UKKyAgICAgICAgY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJu
YXRpdmUoKTsKKyAgICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBtX21vZGUp
OwogfQogCiBib29sIEpJVFBsYW46OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKIAogICAgIGVtaXRMb2FkUGF5
bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgcmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlJZCwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmls
ZWRCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV9pZChjb25zdAogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1Qx
KTsKICAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJl
Z1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBy
ZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZEJsb2NrLT5pZGVudGlm
aWVyKHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRl
cl9zZXR0ZXJfYnlfaQogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1p
dExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIs
IHJlZ1Q0KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
cHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlcywgcmVnVDMsIHJlZ1Q0KTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgcmVnVDEsIG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1w
bCgpLCBhdHRyaWJ1dGVzLCByZWdUMywgcmVnVDQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNv
bnMKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHByb3Bl
cnR5LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1
dGVzLCByZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwg
bV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTExNSw3ICsxMTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25z
CiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0
eSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRl
cywgcmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIG1f
cHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIzLDcgKzEy
Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7CkBAIC0xMzEsOCArMTMxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVs
X2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRMb2FkKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigp
LCBiYXNlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9w
cm9maWxlZEJsb2NrLCAqaWRlbnQpLAogICAgICAgICBiYXNlUmVncywgcmVzdWx0UmVncywgSW52
YWxpZEdQUlJlZywgcmVnVDQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtMTY2LDcgKzE2Niw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocHJvcGVydHksIHByb3BlcnR5UmVncy50YWdHUFIoKSk7CiAKICAgICBK
SVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgYmFzZVJlZ3MsIHBy
b3BlcnR5UmVncywgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgcmVnVDQpOwogCiAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtMjAyLDcgKzIwMiw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogICAgIGVtaXRMb2FkMihiYXNlLCBiYXNl
UmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpLCBwcm9wZXJ0eSwgcHJvcGVydHlS
ZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKTsKIAotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1
ZVJlZ3MoYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5UmVncy50YWdHUFIoKSwgcHJvcGVydHlSZWdzLnBheWxvYWRHUFIoKSksIFRy
dXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1Q
dHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1Zh
bHVlUmVncyhiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKSwg
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKICAgICBib3hCb29sZWFuKHJl
Z1QwLCByZXN1bHRSZWdzKTsKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3By
b2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSlNW
YWx1ZVJlZ3MgYmFzZVJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwpAQCAtMjI3LDcg
KzIyNyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KIAogICAg
IGVtaXRMb2FkKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkp
OwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGJhc2VSZWdzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVz
dGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIo
bV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVn
cywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRl
Y29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgcmVzdWx0UmVncyk7
CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25z
dCBJbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwpAQCAtMjQ5LDcg
KzI0OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICAg
ICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKICAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUNCk7CiAgICAgICAg
IG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9wZXJh
dGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlLCByZWdUMSk7CiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgcHJvZmlsZSwgcmVnVDQpOwpAQCAtMjU3LDcgKzI1Nyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAogICAgICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJl
Zyk7CiAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKQEAgLTI2NSw3ICsy
NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFw
cGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCByZXN1bHRSZWdzKTsK
ICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKICAgICB9CiB9CkBAIC0yNzUs
NyArMjc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAg
IGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgICAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CkBAIC0yODQsNyAr
Mjg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOworICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgb3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgfQogfQpAQCAtMzA1LDEzICszMDUsMTMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAgICAgICAgbV9wcm9maWxl
ZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVO
YW1lLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGJh
c2VHUFIsIHByb3BlcnR5R1BSLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9j
ayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCks
IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKIAogICAgIGF1dG8gYmFzZUdQUiA9
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgYXV0byBwcm9wZXJ0eUdQUiA9IEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0
ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VHUFIsIHByb3BlcnR5R1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogfQogCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJv
ZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2
YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBK
U1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsK
ICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVn
VDUsIHJlZ1Q0KTsKIAogICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8g
b3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBnZW4uc3R1YkluZm8oKSwgVHJ1
c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJh
c2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHZhbHVlUmVncywgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJ
bW1QdHIobnVsbHB0cikpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKIH0KQEAgLTM5NSw3ICszOTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRf
cHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2Us
IGJhc2VSZWdzLnRhZ0dQUigpKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIGJhc2VSZWdzLCBicmFuZFJlZ3MsIEludmFsaWRH
UFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNDE4LDcgKzQxOCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5l
cmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJ
bmRleF07CiAgICAgKyttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4OwogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBiYXNlUmVncywgYnJhbmRSZWdzKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC00MzUsNyArNDM1LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjbwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSk7CiAKICAgICBKSVRQcml2YXRlQnJh
bmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgYmFzZVJlZ3Ms
IGJyYW5kUmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC00NTIsNyArNDUy
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIEpJVFBy
aXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1tt
X3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4XTsKICAgICArK21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5k
ZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNl
UmVncywgYnJhbmRSZWdzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgYnJhbmRSZWdzKTsK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBA
IC00NjUsNyArNDY1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKQEAgLTQ3OCw3ICs0NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKHJlZ1QwLCByZWdUNiwgcmVnVDcpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
ICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgcmVnVDYsIEludmFsaWRHUFJSZWcpOwog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwpAQCAtNTA0LDcgKzUwNCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0g
SklUOjplY21hTW9kZShieXRlY29kZSk7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIApAQCAtNTI0LDcgKzUyNCw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVn
VDIsIHJlZ1QxLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwg
cmVnVDUsIHJlZ1Q0KTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3Qg
PyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0
aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21h
TW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJh
dGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGdlbi5zdHViSW5mbygp
LCBwcm9maWxlKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVj
bWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXpl
IDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUu
aXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25Q
dXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCks
IHByb2ZpbGUpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIH0KQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVk
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQo
YmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZSwgcmVnVDEpOwpAQCAtNTQyLDEzICs1NDIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dl
dF9ieV9pZChjb25zdCBJbgogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVn
LCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBh
eWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6
VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
ICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUo
ZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAK
QEAgLTU1OCwxMyArNTU4LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lk
KGNvbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5
R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4
KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAgICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKIH0KQEAgLTU3NSw3ICs1NzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3By
b2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1p
dExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZSwgcmVnVDEpOwpAQCAtNTgzLDEzICs1ODMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlk
R1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9wcm9maWxlZEJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNj
ZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVt
aXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigp
KTsKIH0KIApAQCAtNTk5LDEzICs1OTksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF9kaXJlY3QoYwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCkucmF3Qml0cygp
KTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9
CkBAIC02MTQsMTAgKzYxNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2Zp
bGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVt
aXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTYzMCwxMyArNjMwLDEzIEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxp
ZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdz
OjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5
cGU6OkdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0
LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAg
LTY0NiwxMyArNjQ2LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3Qg
SW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
cHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwog
ICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIAotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayks
IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZEJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNjYzLDcgKzY2Myw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNv
ZGUubV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKICAgICAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVt
aXRMb2FkKHRoaXNWUmVnLCByZWdUNCwgcmVnVDMpOwpAQCAtNjczLDEzICs2NzMsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzOjpwYXls
b2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIEludmFsaWRHUFJSZWcp
OworICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxl
ZEJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVn
cyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRh
Z0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTY4OSwxMyArNjg5LDEz
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxl
ZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5
SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdp
dGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAgICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUs
IHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBvcGVy
YXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZEJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwogfQpAQCAtNzEwLDE1ICs3MTAsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKICAgICAKICAgICBlbWl0TG9h
ZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCB2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICAKICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLAogICAgICAgICBKU1ZhbHVlUmVn
czo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBJbnZhbGlk
R1BSUmVnLAogICAgICAgICByZWdUMSwgYnl0ZWNvZGUubV9mbGFncy5lY21hTW9kZSgpLCBkaXJl
Y3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwogICAgIApAQCAtNzM4
LDcgKzczOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbih0aGlzKTsKIApAQCAtNzQ4LDcgKzc0OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1
dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwogICAgIAogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oCi0gICAgICAgIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OworICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiB9CkBAIC03NTgsMTQgKzc1OCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChj
b25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNl
LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBy
ZWdUMSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6
OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQ
UlJlZyk7CisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3By
b2ZpbGVkQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwog
ICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKQEAgLTc3OSwxMyArNzc5LDEzIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9p
bkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJ
bmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdl
bi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzk2LDcgKzc5Niw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2luX2J5X3ZhbChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgZW1p
dExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CkBAIC04
MDQsNyArODA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQog
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDQp
OwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxv
YWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC04MTksMTQgKzgx
OSwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJh
dG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmls
ZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpA
QCAtODM3LDcgKzgzNyw3IEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0
ZXIKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAg
SklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAg
SlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CkBAIC04NTMsNyArODUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0
dWFsUmVnaQogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5
VmFsSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBl
ID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC04
OTAsNyArODkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZQog
ewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRl
KCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lk
IEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpCiB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKQEAgLTkxNiwxMSArOTE2LDExIEBAIHZv
aWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgc3dpdGNoIChy
ZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNT
Y29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2so
cmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBt
X3Byb2ZpbGVkQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29w
ZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Y29uc3RhbnRTY29wZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1Qx
LCByZWdUMCk7CkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9z
Y29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IAogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3Bl
ID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9m
aWxlZEJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwog
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSwgcmVnVDEpOwpAQCAtMTAzOSw3ICsxMDM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRD
bG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRh
ZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKQEAgLTExNDYsNyArMTE0Niw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAg
IGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKQEAgLTExNTYsNyArMTE1Niw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9t
U2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rp
b24pOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9wcm9maWxlZEJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdhdGNocG9pbnRTZXQqIHNldCkKQEAgLTExOTAsNyArMTE5MCw3IEBAIHZvaWQgSklUOjpl
bWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9
IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwpAQCAtMTIwMiw3ICsxMjAyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICBzd2l0Y2ggKHJlc29s
dmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9wcm9maWxlZEJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0
dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgZW1pdExvYWQodmFs
dWUsIHJlZ1QzLCByZWdUMik7CiAgICAgICAgICAgICAKQEAgLTEyMTcsNyArMTIxNyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgY2FzZSBHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxW
YXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFu
dFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CisgICAgICAgICAg
ICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVC
bG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZEJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25z
dGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CkBA
IC0xMzE4LDcgKzEzMTgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNv
bnN0CiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudElu
c3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlf
d3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRUb1Njb3BlLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBj
dXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1
bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzMzMsNyAr
MTMzMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBl
bWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJlc3MocmVn
VDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNldCksIHJlc3V0bFJlZ3MudGFnR1BSKCkpOwog
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQo
KSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBQYXlsb2FkT2Zmc2V0
KSwgcmVzdXRsUmVncy5wYXlsb2FkR1BSKCkpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1dGxSZWdzKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3V0
bFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3V0bFJlZ3MudGFnR1BSKCksIHJlc3V0bFJl
Z3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtMTM1NSw3ICsxMzU1LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVy
bmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxk
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5
MiArNDksMTA0IEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRp
ZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJz
KCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdU
Mik7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fc2Vl
bklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVu
dGlmaWVycygpKSB7CisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNl
R1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBi
YXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2Ny
YXRjaEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3Bl
cmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJv
ZmlsZSwgcmVnVDIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29k
ZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CiAKICAgICAg
ICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzLCByZWdUMik7CisgICAgICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdz
LCBzdHViSW5mb0dQUik7CisKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3Bl
cnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVl
OwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAg
ICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29u
c2VydmF0aXZlbHkgcmVzZXQgU1AKKworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBt
X2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wY29kZVR5cGU+CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9w
Y29kZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2Vz
KGl0ZXIpKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBv
aW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMywgYXJndW1lbnRHUFI0KTsKICNlbHNlCi0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7Ci0gICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwotICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0g
bV9ieXRlY29kZUluZGV4KTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChC
eXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQ
UjQ7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJl
Z1QxOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50
R1BSMSk7Ci0KLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVH
UFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0
X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
LQotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpOwotICAg
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRH
UFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2Ug
PT0gcmVnVDApOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHkgPT0gcmVnVDEpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDksNyArMTYxLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25z
IGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJl
bG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAg
Ly8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTYwLDggKzE3Miw4
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBjb25zdGV4
cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSNTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFy
Z3VtZW50R1BSMSk7CiAKQEAgLTE4NywzNCArMTk5LDQwIEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworCisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQp
OworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3By
aXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIEFTU0VSVChoYXNBbnlTbG93
Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKQEAgLTIyMyw5ICsyNDEsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
YmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Byb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxk
ZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1
NSwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFs
cmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02
NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dl
dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yNjQsNyArMjc4LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAwLDIxICszMTQsMjgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJh
bmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIp
OwotCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAg
ICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5k
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0
ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMu
YXBwZW5kKGdlbik7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRo
ZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMu
CkBAIC0zMjQsMTcgKzM0NSwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFu
ZChjb25zCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAg
IFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9w
cml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRl
QnJhbmQ+KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRH
UFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3Vt
ZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRl
QnJhbmRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwpAQCAtMzQ0LDI0ICszNzAsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRl
X2JyYW5kKAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFy
Z3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BS
ID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0
aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9u
R2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2Fs
bCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0
UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKICNlbmRpZgogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM3MCwzMyArMzkwLDQ3IEBA
IHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY28KICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQg
PSBieXRlY29kZS5tX2JyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgcmVnVDEpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFu
ZEdQUik7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZh
dGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5k
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkNoZWNr
UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNj
ZXNzZXMuYXBwZW5kKGdlbik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2
YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tQcml2YXRlQnJh
bmQ+KCk7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlKTsKKwogICAgIEpJVFByaXZhdGVCcmFu
ZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVC
cmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0
aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBl
KG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTQwNiwyNCArNDQwLDE4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3Rh
dGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJh
dGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25U
cmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVu
dFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNl
Ci0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0
aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNSwzMCArNDYzLDQzIEBAIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
LSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDMp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHByb2ZpbGVHUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpLCBwcm9maWxlR1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0
QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1Qy
KSwgcmVnVDMsIHJlZ1Q0KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIsIHN0dWJJbmZvR1BS
KTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtp
bmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJl
Y3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1v
ZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUs
IHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAt
NDc0LDE1ICs1MTUsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRv
IGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAg
ICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAo
aXNEaXJlY3QpCkBAIC00OTgsNyArNTM2LDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBU
aGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmlj
dCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBv
cGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFy
Z3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRH
UFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGly
ZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgYXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlW
YWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAg
IGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk+
KEFkZHJlc3MoYXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTUxMiw3ICs1NTksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJl
Z1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1
dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAgICAgQ2FsbCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1v
ZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0
cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU3MCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKQEAgLTUzMywxOCArNTgwLDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQg
Z2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIg
Z2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAg
aml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7
CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmls
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJTZXQgdXNlZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUs
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVz
ZWQuY29udGFpbnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1
KSk7CisgICAgfQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RH
UFIpOwpAQCAtNTcwLDIwICs2MjMsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVf
bmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDIpLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVn
LCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxk
UHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0
dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2
NTgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRl
TmFtZT4oKTsKLSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1
dEtpbmQ7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQ
dXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwog
CkBAIC02MDMsMTMgKzY2NiwxNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVf
bmFtZShjCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8g
b3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQ
cml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0
aW1pemU7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNv
bmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwg
Z2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7
CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZh
dGVGaWVsZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51
bGxwdHIpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjg3
LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25h
bWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b247Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0K
IAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNjQzLDE0ICs3MDIsMTQgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdU
MjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZz
ZXRHUFIgPSByZWdUNDsKIApAQCAtNjgwLDcgKzczOSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJl
Z1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC02ODksNyArNzQ5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3NldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02OTksNyArNzYwLDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9n
ZXR0ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0
dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRl
LCByZWdUMSwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRy
aWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MDksNyAr
NzcxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGlu
dDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcxOSw3ICs3ODIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWws
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
LCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdU
MSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyNywyMyArNzkxLDMz
IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVE
ZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywg
cmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3
aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxk
IGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJh
cnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNzU5LDE1ICs4MzMsMTcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJ
ZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVC
eUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBU
cnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShv
cGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC03ODEsMjQgKzg1NywxOSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2Rl
R1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRy
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21h
TW9kZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2Rl
bF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
IAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBl
bmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTgwOCw3ICs4
NzksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNz
KCk7CkBAIC04NDUsMjIgKzkxNiwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNv
bnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
cHJvcGVydHkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJh
c2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKwogICAgIEpJVERlbEJ5VmFs
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSwgc3R1YkluZm9HUFIsIEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRl
QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7
CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xl
YW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91
bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUt
YmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1
Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtODgzLDkg
Kzk2NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9w
ZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7
CkBAIC04OTksMjQgKzk4MywxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChj
b25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9H
UFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0
ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJl
Z3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMDUsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMg
YXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUg
ZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBm
dW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3Qg
bWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05
NjEsMjIgKzEwNDAsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVn
VDApOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BS
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9H
UFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNzQsMTcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIp
OworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXpl
KT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDAzLDI2ICsxMDk0LDIwIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKICAgICBtb3ZlKEpJVDo6VHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
LCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUo
b3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTAzMCwyMiArMTExNSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWREaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpH
ZXRCeUlkRGlyZWN0OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVn
KTsKIH0KIApAQCAtMTA1NCwxNiArMTE0OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwg
b3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTA3Myw4MyArMTE2OSw2MiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1l
bnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlz
QVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25HZXRC
eUlkRGlyZWN0T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6
dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpz
Y3JhdGNoOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZVZSZWcpOwogICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlO
YW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBKdW1wIG5v
dEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0
YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50
OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVu
Z3RoTW9kZS5hcnJheVByb2ZpbGUsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBH
ZXRCeUlkTW9kZU1ldGFkYXRhOjpvZmZzZXRPZk1vZGUoKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoMzIoTm90RXF1YWwsIFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwg
T3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2Rl
TWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFzZUdQUiwgc2Ny
YXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0K
IAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVz
dWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhU
aGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZp
cnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwot
Ci0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3Ms
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJl
c2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2
YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOwogfQogCkBAIC0xMTU4LDE2ICsxMjMzLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwg
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5
cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTE3NywyNiArMTI1NCw1OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAg
IHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcg
PSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1Jl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJ
ZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJl
ZywgdGhpc0dQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2VWUmVnKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZS
ZWcpOworCisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBy
ZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiksIHN0
dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBP
U1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAg
YWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCkBAIC0xMjA2LDcgKzEzMTUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
ICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAg
ICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMjQxLDE2ICsxMzUwLDE5IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlk
c1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRp
b25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV90aGlzVmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKT4oYnl0
ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI4
ICsxMzcyLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFy
ZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdp
c3RlcnM6OnRoaXNWYWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwg
IWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
LCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
c19wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyOTEsNyArMTM5Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91
dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdp
bmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTEzMjksMjMgKzE0MzUsMzgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2Rl
Lm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2gg
Ym90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBw
b2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9h
ZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQog
ICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhl
IHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
YmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVQdXRC
eUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcs
IGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEp
LCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzdHViSW5mb0dQUiwg
c2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5k
OjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlJZDsKKyAg
ICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6
Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0
byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRC
eUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVy
ZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsx
NDgwLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsK
ICAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJ
ZEluZGV4KytdOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1Qw
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRl
Y2x0eXBlKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC0xMzc2LDI1ICsxNTAxLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAg
fHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBhcmd1bWVudEdQ
UjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9H
UFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IGdlbi5zbG93UGF0aEZ1
bmN0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChnZW4uc2xvd1Bh
dGhGdW5jdGlvbigpKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTE0
MDQsNyArMTUyMyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0
IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZH
L0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0
cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0g
ICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVy
bkFkZHJlc3MoKTsKQEAgLTE0NDEsMjAgKzE1NjAsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5
SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
YmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VW
UmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5m
b0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpJbkJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChn
ZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
QEAgLTE0NjMsMTQgKzE1OTMsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNv
bnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
bkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9w
dGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjEzLDIyIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
LCBwcm9wZXJ0eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5l
cmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBu
byBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBk
aWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShv
cGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZh
bHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1
MTAsMjUgKzE2MzcsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3Ry
dQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5l
SW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRl
Y29kZSwgYmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAg
IEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZv
R1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkluQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25z
dGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0
dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQo
Z2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUg
KzE2NzIsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2Vu
ZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShv
cGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTU2LDU5ICsxNjk0LDcwIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIp
OwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRv
IGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNy
ZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1l
LgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlW
YWxPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6dmFsdWUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFs
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAg
Q2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
SW5CeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uSW5CeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JC
cmFuZCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BS
ID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gdHlwZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4p
OwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5cGUpCit2
b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUgdHlwZSkK
IHsKLSAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBl
ID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgVU5VU0VEX1BBUkFNKGJhc2Up
OworICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0
eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZUJyYW5kKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5C
eVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9u
SGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3Vt
ZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRH
UFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwpAQCAtMTYxOCwyNyArMTc2NywyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZp
cnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1l
bnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFy
Z3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8
ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwg
ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBD
YWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6
ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9w
ZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRP
cHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxNzk1LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhh
c1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwg
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRl
Y29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRl
X2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDIx
NSArMTgwOSwxMjcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX2JyYW5kKAog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVCcmFuZD4oKTsKLSAgICBlbWl0SGFzUHJpdmF0
ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAg
ZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVj
b2RlLm1fYnJhbmQsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3Zv
aWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNo
cG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OworCisgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVj
dGlvbldhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChF
cXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRSZXNv
bHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewotICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkZXB0aDsgKytpKQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6
Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKIH0KIAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLXZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29w
ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBt
ZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
LSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBt
X2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExl
eGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoK
LSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3Qs
IHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9z
dXJlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDAp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X3Jlc29sdmVUeXBlLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci19Ci0jZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5
cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBl
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNv
ZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVj
dGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4g
cmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZl
IHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09
IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNh
bEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVn
VDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2Nv
ZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRp
ZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJH
ZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0
ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2
ZV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgICAgIH07CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09Q
RV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMj
R2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9y
c1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVf
R0VORVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
R2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJh
dGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cywgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKwor
ICAgICAgICBhdXRvIGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7
CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0s
IHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMiKTsKKyAg
ICAgICAgfTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDI7
CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IENsb3N1cmVWYXIpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFy
R2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRD
VElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVT
Y29wZUdlbmVyYXRvcik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5l
cmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNo
YXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29s
dmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRo
ZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhl
IExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBi
ZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAg
IC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCiAg
ICAgdXNpbmcgTWV0YWRhdGEgPSBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsgLy8gaW5jb21pbmcKKyAgICBjb25zdGV4cHIgR1BS
UmVnIG1ldGFkYXRhR1BSID0gcmVnVDI7IC8vIGluY29taW5nCisgICAgY29uc3RleHByIEdQUlJl
ZyBzY29wZUdQUiA9IHJlZ1QwOyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBw
YXRoLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CiAgICAg
VU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVu
a0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5B
ZGRyZXNzKCk7CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMp
OwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdU
Myk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qg
c2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRH
UFJSZWcpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVn
KSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewog
ICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBn
bG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9i
YWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rp
b25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgo
RXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRy
dXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zhcklu
amVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0
LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBhdXRv
IGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykg
ewotICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mp
OwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRo
KSksIHJlZ1QxKTsKLQotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVt
cCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKLSAgICAgICAgewotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAg
ICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKLSAgICAgICAgfQotICAgICAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNjb3BlR1BSID09IHJlZ1QwKTsKKyAgICAg
ICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZMb2Nh
bFNjb3BlRGVwdGgoKSksIHJlZ1QxKTsKKworICAgICAgICBMYWJlbCBsb29wID0gaml0LmxhYmVs
KCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOwor
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlZ1QwKTsKKyAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwor
ICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsKKyAgICAgICAgZG9uZS5saW5r
KCZqaXQpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSkgewpAQCAtMTg4MiwxMiArMTkzNywxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAg
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAg
ICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVj
dEdQUik7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAgICAgbG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFs
T2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0g
ICAgICAgICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAg
ICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVj
dDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTg5NywxMSArMTk1MSwxMSBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6
OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpIGZvciBHbG9iYWxWYXIqLAogICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFy
Ki4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAg
ZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFy
IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KQotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6
Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAgICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9m
R2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0xOTA5LDcgKzE5NjMsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgICAgICBl
bWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
anVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3Vy
ZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0xOTE5LDgzICsxOTczLDQ1IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
LSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAg
ICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0g
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAg
aWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsK
ICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1Qw
KTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdUMSk7CiAK
LSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGF1dG8gZW1p
dENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAgICAgICBKdW1w
IG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIocmVz
b2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKKyAgICAgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICBub3RDYXNlLmxp
bmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Cisg
ICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3Bl
cnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIGVtaXRD
YXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNsb3dDYXNl
LmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJl
c29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQp
OwogICAgIH0KIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3df
b3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2Fz
ZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dD
YXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29w
ZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0j
ZGVmaW5lIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jlc29sdmVfc2NvcGVf
IyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBj
b25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSkgXAot
ICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAg
ICByZXR1cm4gaml0LmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJh
c2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9F
QUNIX1JFU09MVkVfVFlQRShERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYg
REVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZt
KQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25s
eSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIC8vIFRoZSBmYXN0IHBhdGggYWxyZWFk
eSBwdXNoZWQgdGhlIHJldHVybiBhZGRyZXNzLgogI2lmIENQVShYODZfNjQpCkBAIC0yMDM0LDcg
KzIwNTAsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
cGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxl
ci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNvbHZlX3Nj
b3BlIik7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklU
OjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QpCiB7CkBAIC0yMDYyLDI3NiArMjA3NywxMzMgQEAgdm9pZCBK
SVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5k
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKIH0KIAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1f
c2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dElu
Zm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRh
dGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOworICAgIFJlc29s
dmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAotICAgIGF1dG8gZW1pdENv
ZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUs
IHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24g
c2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9i
YWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZv
ciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0g
ICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zm
c2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotCi0gICAg
ICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1w
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwotICAgICAgICAgICAgfSkpOwor
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rp
b24pOwogCi0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7Ci0gICAgICAg
ICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZM
aW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihm
aXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihK
SVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGlu
ayh0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNl
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5l
ZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNl
dCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNF
aWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSwgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
R2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZy
b21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwot
ICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBj
aGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBj
YXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0g
ICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRD
bG9zdXJlVmFyOgotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIH0KKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7Cisg
ICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3Vy
ZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CiAgICAgfTsK
IAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5Ogot
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dElu
Zm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1w
IGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2Up
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwg
ZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVl
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLSNl
bHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgYXV0byBjbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAg
ICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBD
bG9zdXJlVmFyIik7CisgICAgfTsKIAotICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgQVNT
RVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0g
Y3VycmVudEluc3RydWN0aW9uKTsKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0
b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9t
U2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3Bl
IGdlbmVyaWMiKTsKKyAgICB9OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9
IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBz
Y29wZUdQUiA9IHJlZ1QyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSByZWdUNTsKIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsKLSAgICAgICAg
dWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1l
dGFkYXRhLm1fb3BlcmFuZCk7Ci0gICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91
bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNv
ZGUpOwogCi0jZGVmaW5lIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3Bf
Z2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMg
Y29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VB
Q0hfUkVTT0xWRV9UWVBFKEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSAgICAgICAgfTsKLSN1
bmRlZiBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCBzY29wZUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0
KSwgbWV0YWRhdGFHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHNjb3BlR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0
KSwgbWV0YWRhdGFHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLSAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2Rl
OworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGNv
ZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAgIGVsc2UgaWYgKHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisg
ICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzR2VuZXJhdG9yKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdl
bmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwoY29k
ZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Omdl
bmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3Qg
Y2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVz
b2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8g
VGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0
aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0
RnJvbVNjb3BlOjpNZXRhZGF0YTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0g
cmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVB
U0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKLQot
ICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKLQotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBD
b2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihy
ZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSBy
ZWdUNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7CiAKLSAgICBKdW1w
TGlzdCBzbG93Q2FzZTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0gICAgYXV0byBlbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFk
YXRhU3RydWN0dXJlT2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVH
UFIsIHJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywg
cmVnVDEpKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSkpOwotICAgIH07CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRh
YmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworCisg
ICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9
IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmpl
Y3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAg
ICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBy
ZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJl
Z1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBt
X3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNl
dE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAg
Ci0gICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwg
R1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJh
bmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0
byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBH
UFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFu
ZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRv
IGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5k
R1BSKSB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3Rlcikp
OwotICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAg
ICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
b3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCBy
ZWdUMCk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRD
b2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJl
c29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24g
c2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9i
YWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZv
ciB0aGUgdmFyIGluamVjdGlvbi4KLQotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gcmVnVDA7Ci0gICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwot
ICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAgICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAgICBqaXRBc3Nl
cnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAg
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFu
Y2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVj
ayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZv
ciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Nj
b3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubG9h
ZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFk
ZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisK
KyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAo
KSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdU
Myk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BS
LCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zm
c2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFk
YXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QxKTsKKwogICAgICAgICAgICAgaWYgKEFTU0VS
VF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMy
KEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RP
dXRPZkxpbmUpOwotICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9y
RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAg
ICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsK
KyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAg
IHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChC
YXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworCisgICAgICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubmVnMzIocmVnVDEpOworICAgICAgICAgICAg
aml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgICAgICBqaXQubG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9m
ZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlZ1QwKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNl
IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JK
RUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3Bl
cmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsK
ICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFog
Y2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVn
VDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHko
cmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAg
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09G
RlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOwotICAgICAgICAgICAgZW1pdEdl
dENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVy
YW5kKCkpLCByZWdUMyk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXpl
b2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyks
IHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5hZGRQdHIoc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Cisg
ICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxl
VmFyOgpAQCAtMjM0MSw4NiArMjIxMyw2MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlw
ZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0
UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAot
Ci0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29s
dmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAg
ICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAg
c2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVU
eXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
Z2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJ
bmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAg
ICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0
UHV0SW5mbygpKSwgcmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAot
ICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNH
bG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0
eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxW
YXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFy
KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAg
ICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFBy
b3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5s
aW5rKCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsK
LSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7
CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2Jh
bExleGljYWxWYXIubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgp
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBq
aXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGpp
dC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMu
bGluaygmaml0KTsKIAotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQorICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBk
ZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGlj
X2Fzc2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0
KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
cHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwg
TWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0
QnVja2V0KCkpKTsKIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
d0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9t
X3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9
CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkg
XAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9t
X3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAg
ICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlw
ZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwK
LSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5
cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAg
fQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1Ip
Ci0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVy
YXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0
aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQog
ICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3Qg
YmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcv
RlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3Rz
LCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAg
ICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkK
ICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNDI5LDcgKzIyNzgsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAjZW5kaWYKIAogICAgIHVz
aW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJl
Z1Q1OwogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIApAQCAtMjQ0OSw3ICsyMjk4LDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIENhbGwgb3Bl
cmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2VwdGlvbkNo
ZWNrID0gaml0LmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAgICBqaXQu
c3RvcmU2NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgT0JKRUNU
X09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAs
IEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE1ldGFkYXRhOjpvZmZzZXRPZlBy
b2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgaml0
Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyKTsKIAogI2lmIENQVShYODZfNjQpCkBAIC0yNDY5LDg4ICsyMzE4LDc3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGp1bXBUb0hhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJ
VFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0KLSNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9i
YWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJh
bmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUq
KiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
KiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7
Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJh
bmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6
ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9y
ZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1
dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAg
dWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1l
dGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2
ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29k
ZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNv
bHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUg
Y2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJl
cyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2
ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAg
ICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24n
dCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAg
ICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJl
Z1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAg
ICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsK
KwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAg
ICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBK
dW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAg
IG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJl
Z1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAg
ICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0
LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsK
KyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2Jh
bFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBt
X2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2
ZVR5cGUpOwotICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5p
dGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8
IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkg
eworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hl
Y2socmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJl
Z1QwKTsKKworICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0
UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVj
ayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFog
Y2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZh
cmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1
ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9w
ZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9T
Y29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAg
ICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChy
ZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNj
b3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xv
c3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpv
cGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7
CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdE5v
dGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVn
VDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSkpOworCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9k
dWxlVmFyOgpAQCAtMjU2NCw1OCArMjQwMiw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAg
IEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0
ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcu
Ci0KLSAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBD
bG9zdXJlVmFyLyBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4g
Y29tcGlsZSB0aGluZ3MKKyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNl
IHdlJ3ZlIHByb3ZlbiB0aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xv
c3VyZVZhciwKKyAgICAvLyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdl
J3JlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3Vy
ZVZhcgorICAgIC8vIGlmIHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQu
IElmIGl0IGlzIGZpcmVkLCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24n
dAorICAgIC8vIG1hdHRlciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChw
cm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1
cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9z
dXJlVmFyKQorICAgICAgICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2Ug
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygp
LCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0
cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBp
c0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHku
bGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKIAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEds
b2JhbFZhci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
KyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXIubGluayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7
Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjYyNCwxOCArMjQ1NiwyMSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9TY29wZT4oKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1
dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcikgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAg
Ly8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5r
ZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1
bGVWYXIuCiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVy
dHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxz
ZSB7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUs
IGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29k
ZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICAgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRl
Y29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3
ICsyNDg3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAg
ICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNzAxLDcgKzI1MzYsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdU
MCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyNTk0LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CkBAIC0yNzY3LDcgKzI2MDEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxf
ZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNl
dE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAt
MjgyMyw3ICsyNjU3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0
bwogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9t
b2RlOwpAQCAtMjgzOSwxMSArMjY3MiwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X25leHQoY29uc3QgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMg
aXMgdGhlIG1vc3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNh
c2UgaXQgaWYgd2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1f
ZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0
dXJlTW9kZSkgeworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0
cnVjdHVyZU1vZGUpIHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2Fz
ZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigofkpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgJiBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spKSk7CiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JN
ZXRhZGF0YSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5l
eHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKKwogICAgICAgICBs
b2FkMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpLCBpbmRleEdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNh
c2VzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwogCkBAIC0yODgxLDc4ICsyNzIwLDg4IEBA
IHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0
X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvckdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51
bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7
CiAKLSAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5lRW51bWVy
YXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gyID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gyOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZh
bFJlZ2lzdGVyczo6c2NyYXRjaDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihtb2RlLCBzY3JhdGNoMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5h
bWUsIHByb3BlcnR5R1BSKTsKIAotICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRh
ZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1l
dGFkYXRhKCksIHNjcmF0Y2gyKTsKKyAgICBvcjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7CisgICAg
c3RvcmU4VG9NZXRhZGF0YShzY3JhdGNoMiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFs
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwoYmFzZUdQUikpOwogICAgIC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQg
dmFsdWUuCi0gICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9u
WmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4
ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgIEp1
bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHNjcmF0Y2gz
LCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKIAogICAgIC8vIENoZWNrIHRo
ZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1Qy
KTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDMpOwotICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
U3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgc2NyYXRjaDEpOworICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNo
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKIAogICAgIC8v
IENvbXB1dGUgdGhlIG9mZnNldC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBy
ZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgc2NyYXRjaDIpOwogICAg
IC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUg
c3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFj
Y2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwg
cmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7Ci0gICAgbG9hZDY0
KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwotCisgICAg
SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBB
ZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNh
cGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRj
aDIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQs
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgZG9u
ZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxp
bmUKICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbmVnMzIocmVnVDMpOwotICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QzLCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2VHUFIpOworICAgIHN1YjMyKEFkZHJlc3Moc2Ny
YXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBuZWczMihzY3JhdGNoMik7CisgICAgc2lnbkV4dGVuZDMy
VG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKICAgICBjb25zdGV4cHIgaW50cHRyX3Qgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5ID0gb2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
ICogc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgIGxv
YWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkpLCByZXN1bHRHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRj
aDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CiAgICAg
ZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgc3RydWN0dXJlTWlzbWF0Y2gubGluayh0
aGlzKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2Vu
dW1lcmF0b3JNZXRhZGF0YSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1p
c21hdGNoKSwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBpc05vdE93blN0cnVjdHVyZU1vZGUubGlu
ayh0aGlzKTsKLSAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsK
KyAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBzY3JhdGNoMywgVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKICAgICAv
LyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgs
IHByb3BlcnR5R1BSKTsKIAogICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOwotICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaDEp
OwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVnVDIpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBz
dHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0
IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgZG9u
ZUNhc2VzLmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKQEAgLTI5NjEsMTAgKzI4MTAsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZW51bWVyYXRvcl9nZXRfYnlfCiAgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0ZXIpOwogfQogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5
cGU+Ci12b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUs
IFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5
dGVjb2RlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2Vu
dW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdl
bmVyYWxDYXNlKQogewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKQEAgLTI5NzMsNyArMjgy
MSw5IEBAIHZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW0KICAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1Qw
KTsKLSAgICBvcjgocmVnVDAsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9y
TWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCByZWdUMSk7CisgICAgb3IzMihy
ZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDEsIGJ5dGVjb2RlLCBCeXRl
Y29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAKQEAgLTMwNjIsNiAr
MjkxMiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiAgICAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCit2b2lkIEpJVDo6ZW1p
dFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpCit7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2VsZWN0U2NyYXRjaEdQUihv
d25lcikpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRl
QmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW4ubGluayh0aGlzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzYsOSArMjM2LDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlQ2VsbCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpV
bnNldAogICAgICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwK
LSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVu
Z3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9j
aywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgewogCi0gICAgICAgICAg
ICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJh
dGVBcnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOworICAg
ICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkq
PihiYXNlQ2VsbCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGlu
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aChsb2NrZXIp
OwpAQCAtMjQ5LDggKzI0OSw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdl
dEJ5KEoKICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBj
b2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICAgICAgfSBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VDZWxsKSkgewogICAgICAgICAgICAgICAg
IGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAg
ICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoc3R1Yklu
Zm8pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pOworICAgICAgICAgICAg
ICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9j
aywgc3R1YkluZm8pKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlu
bGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHVi
SW5mbyk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFN0cmluZ0xlbmd0aChsb2NrZXIpOwpAQCAt
MzA0LDcgKzMwNCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoK
ICAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKICAgICAgICAgICAgICAg
ICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAg
ICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94eSkgewotICAgICAgICAgICAgICAgIGJvb2wg
Z2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlB
Y2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAg
ICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVNlbGZQcm9wZXJ0eUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5l
KSB7CiAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gs
IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5
TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMo
dm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpAQCAtNzMxLDExICs3MzEsMTEgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnkoSgogICAgICAgICAgICAgICAgIG9sZFN0cnVj
dHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUo
KSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vz
czo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzbG90LmNhY2hlZE9m
ZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRl
U2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNl
dCgpKQogICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICAgICAgICAgJiYgIWlzUHJveHkpIHsKICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29k
ZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJ
bmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAg
ICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlu
bGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNl
bGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09
IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9u
KHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOwpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAmJiBzbG90
LnNsb3RCYXNlKCkgPT0gYmFzZQogICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRT
ZXQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSk7
CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBz
bG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0YXRpYyB2b2lkIHJl
dmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBh
dGhTdGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwg
IlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwog
ICAgIAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDI0ICs0Myw2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsK
LSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwotCi0gICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
Ci0gICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLQotICAgIENDYWxsSGVscGVyczo6
Q2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwotCi0gICAgaml0Lmp1
bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOwotICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbiIp
OwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2Vw
dGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKQEAgLTc3LDI0ICs1OSw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gaGEKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2siKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJl
c2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhl
bHBlcnMgaml0OwotCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjpl
c3ApOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJh
bWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKLSNlbmRpZgot
Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7Ci0KLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElT
dHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjb250
aW51YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRy
VGFnLCAicG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOwotfQotCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpAQCAtMTM3LDYgKzEwMSw0MiBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoCiAKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVs
cGVycyBqaXQ7CisKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQucHJl
cGFyZUNhbGxPcGVyYXRpb24odm0pOworCisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlv
biA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9u
SGFuZGxlcih2bSk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1
ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uIik7Cit9CisKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0Fu
ZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKKworI2lmIENQVShYODZfNjQpCisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKKyNl
bGlmIENQVShBUk02NCkKKyAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRl
clJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIEND
YWxsSGVscGVyczo6SnVtcCBjb250aW51YXRpb24gPSBqaXQuanVtcCgpOworCisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6RXh0cmFDVElUaHVuayk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1YihoYW5k
bGVFeGNlcHRpb25HZW5lcmF0b3IpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY29udGludWF0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwor
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInBv
cFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsKK30KKwogdGVtcGxhdGU8
dHlwZW5hbWUgVGFnVHlwZT4KIGlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2Fs
bEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIsIFRhZ1R5cGUgdGFnKQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsMTIgQEAgY2xhc3MgVk07CiAKICNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJh
dG9yKFZNJik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5r
U3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIAogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxl
RXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNJik7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgi
CiAjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKKyNpbmNsdWRlICJDb2Rl
QmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCkBAIC0zNzAs
MTMgKzM3MSwyMiBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAg
ICAgCiAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwog
CisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7
CisgICAgICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVC
bG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAg
ICAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGlu
ZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CisgICAgICAgICAgICBjb2RlQmxvY2st
PmppdE5leHRJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKwogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hl
ZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlKSVRD
b21waWxlIiwgKCJ0aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2RlQmxvY2st
PmxsaW50RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3
b3JrbGlzdFN0YXRlID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxl
dGVBbGxSZWFkeVBsYW5zRm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgSklU
Q29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkpOworICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3Jr
bGlzdFN0YXRlID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVB
bGxSZWFkeVBsYW5zRm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+dW5saW5r
ZWRDb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkpOwogCiAgICAgaWYg
KGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CiAgICAgICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5
IGNvbXBpbGVkLiIpOwpAQCAtNDY2LDggKzQ3NiwxMCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChs
b29wX29zcikKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5p
dGVMb29wc0ZvckZ1enppbmcoKSAmJiBjb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9y
RnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0uZ2V0
TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKHBjKTsKICAgICAgICAgKnB0ciArPSBjb2RlQmxvY2st
PmxsaW50RXhlY3V0ZUNvdW50ZXIoKS5tX2FjdGl2ZVRocmVzaG9sZDsKLSAgICAgICAgaWYgKCpw
dHIgPj0gT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpCisgICAg
ICAgIGlmICgqcHRyID49IE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1p
dCgpKSB7CisgICAgICAgICAgICBjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEoQ29uY3VycmVudEpT
TG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKSk7IC8vIFdlJ3JlIHJldHVybmluZyB0byB0aGUgT1NS
IGVudHJ5IGNvZGUgaGVyZSwgd2hpY2ggZXhwZWN0cyB0aGF0IG1faml0RGF0YSBpcyBub3QgbnVs
bC4KICAgICAgICAgICAgIExMSU5UX1JFVFVSTl9UV08oTExJbnQ6OmZ1enplclJldHVybkVhcmx5
RnJvbUxvb3BIaW50RW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBjYWxs
RnJhbWUtPnRvcE9mRnJhbWUoKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAg
LTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpu
c3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJh
dGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3Ry
dWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAg
ICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikK
ICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2Nmciwg
dDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9w
KG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwg
c3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAgICAg
ICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJp
dGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0
Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0
eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmls
ZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0
YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRl
U3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5l
Z2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0
ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAg
ICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEs
IExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1
cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJp
dGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1
cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkK
IAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGlu
dGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUo
dHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
YXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVu
ZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAg
ICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9w
Q3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAub3Ax
Tm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAgICBh
cml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0
aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAg
ICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0
MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwx
MiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJp
YSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5v
dEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAg
IGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0
KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAg
ICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAg
ICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVC
aW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIs
IHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAg
ICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBp
cyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90
LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNs
b3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVt
YmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQz
LCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20J
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEzIEBAIG1h
Y3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMsIGExCiAg
ICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRweiByMCwg
LnJlY292ZXIKLQogICAgICAgICAgICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAgIyBCYXNl
bGluZSB1c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQgcG9vbC4K
KyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAgbG9hZHAg
Q29kZUJsb2NrOjptX2ppdERhdGFbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2Nr
OjpKSVREYXRhOjptX2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAgIGlmIEFS
TTY0RQogICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zm
c2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50cnkpICog
UHRyU2l6ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRy
VGFnICMgSlNFbnRyeVB0clRhZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVxdWFsaXR5
SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bj
b2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
JW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBt
ZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkK
LSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0KICAg
ICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQog
ICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNybyBwcmVP
cChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24o
dDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEgdDEs
IFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50
KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEx
MzQsMTEgKzExMzUsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUs
IE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikK
LQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwg
T3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjpt
X2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0x
MTQ2LDEyICsxMTQyLDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0
ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0Mwog
ICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmls
ZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxl
SW50LCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0cXog
dDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAw
LCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBk
YXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEsIHQy
KQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNjAsNiBA
QCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkK
IAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmls
ZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQogICAg
ICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUs
IHQwLCB0MSkKQEAgLTExNzcsNyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUo
b3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9w
ZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUoQXJp
dGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQog
CiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmluYXJ5T3BD
dXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5z
bG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKLSAg
ICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwg
dDUsIHQyKQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMklu
dDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwg
dDUsIHQyKQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAg
ICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNCw5ICsxMTk2LDkgQEAgbWFjcm8gYmluYXJ5T3BD
dXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogCiAgICAgLm9wMk5vdEludDoKICAgICAgICAgIyBG
aXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIGlzIGRlZmluaXRl
bHkgbm90LgotICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6IHQxLCBudW1iZXJU
YWcsIC5zbG93Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAg
ICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRO
dW1iZXIsIHQ1LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgY2kyZHMgdDAs
IGZ0MAogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE0MjAsNyArMTQy
MCw4IEBAIGVuZAogCiBtYWNybyBjaGVja1N3aXRjaFRvSklUKGluY3JlbWVudCwgYWN0aW9uKQog
ICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGJhZGRpcyBpbmNyZW1lbnQsIENvZGVC
bG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpt
X2NvdW50ZXJbdDBdLCAuY29udGludWUKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVj
dXRlQ291bnRlclt0MF0sIHQwCisgICAgYmFkZGlzIGluY3JlbWVudCwgQmFzZWxpbmVFeGVjdXRp
b25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICBhY3Rpb24oKQogICAgIC5j
b250aW51ZToKIGVuZApAQCAtMTUwMyw3ICsxNTA0LDggQEAgbWFjcm8gcHJvbG9ndWUoY29kZUJs
b2NrR2V0dGVyLCBjb2RlQmxvYwogICAgIGNvZGVCbG9ja0dldHRlcih0MSkKICAgICBjb2RlQmxv
Y2tTZXR0ZXIodDEpCiAgICAgaWYgbm90IChDX0xPT1Agb3IgQ19MT09QX1dJTikKLSAgICAgICAg
YmFkZGlzIDUsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVj
dXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDFdLCAuY29udGludWUKKyAgICAgICAgbG9hZHAgQ29k
ZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDFdLCB0MAorICAgICAgICBiYWRkaXMgNSwg
QmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICAg
ICAgaWYgSlNWQUxVRTY0CiAgICAgICAgICAgICBtb3ZlIGNmciwgYTAKICAgICAgICAgICAgIG1v
dmUgUEMsIGExCkBAIC0xNjE3LDE0ICsxNjE5LDE0IEBAIG1hY3JvIGZ1bmN0aW9uSW5pdGlhbGl6
YXRpb24ocHJvZmlsZUFyZ1MKICAgICAjIG9wdGltYWwgd2F5IGZvciBhcmNoaXRlY3R1cmVzIHRo
YXQgaGF2ZSBtb3JlIHRoYW4gZml2ZSByZWdpc3RlcnMgYXZhaWxhYmxlCiAgICAgIyBmb3IgYXJi
aXRyYXJ5IHVzZSBpbiB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgbG9hZGkgQ29kZUJsb2NrOjptX251
bVBhcmFtZXRlcnNbdDFdLCB0MAotICAgIGFkZHAgLXByb2ZpbGVBcmdTa2lwLCB0MCAjIFVzZSBh
ZGRpIGJlY2F1c2UgdGhhdCdzIHdoYXQgaGFzIHRoZSBwZWVwaG9sZQorICAgIGFkZHAgLXByb2Zp
bGVBcmdTa2lwLCB0MAogICAgIGFzc2VydChtYWNybyAob2spIGJwZ3RlcSB0MCwgMCwgb2sgZW5k
KQogICAgIGJ0cHogdDAsIC5hcmd1bWVudFByb2ZpbGVEb25lCiAgICAgbG9hZHAgQ29kZUJsb2Nr
OjptX2FyZ3VtZW50VmFsdWVQcm9maWxlcyArIEZpeGVkVmVjdG9yOjptX3N0b3JhZ2UgKyBSZWZD
b3VudGVkQXJyYXk6Om1fZGF0YVt0MV0sIHQzCiAgICAgYnRweiB0MywgLmFyZ3VtZW50UHJvZmls
ZURvbmUgIyBXaGVuIHdlIGNhbid0IEpJVCwgd2UgZG9uJ3QgYWxsb2NhdGUgYW55IGFyZ3VtZW50
IHZhbHVlIHByb2ZpbGVzLgogICAgIG11bHAgc2l6ZW9mIFZhbHVlUHJvZmlsZSwgdDAsIHQyICMg
QWFhYWFoaGhoISBOZWVkIHN0cmVuZ3RoIHJlZHVjdGlvbiEKICAgICBsc2hpZnRwIDMsIHQwICMg
b2Zmc2V0IG9mIGxhc3QgSlNWYWx1ZSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLgotICAgIGFkZHAg
dDIsIHQzICMgcG9pbnRlciB0byBlbmQgb2YgVmFsdWVQcm9maWxlIGFycmF5IGluIENvZGVCbG9j
azo6bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuCisgICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRv
IGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gdGhlIHZhbHVlIHByb2ZpbGUgYXJyYXkuCiAu
YXJndW1lbnRQcm9maWxlTG9vcDoKICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgbG9hZHEgVGhp
c0FyZ3VtZW50T2Zmc2V0IC0gOCArIHByb2ZpbGVBcmdTa2lwICogOFtjZnIsIHQwXSwgdDIKQEAg
LTI1NjMsNiArMjU2NSwxNyBAQCBtYWNybyBub3RTdXBwb3J0ZWQoKQogICAgIGVuZAogZW5kCiAK
KworbWFjcm8gdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRh
ZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBVbmFyeUFyaXRoUHJvZmlsZTo6
bV9iaXRzW3RlbXBdCitlbmQKKworbWFjcm8gdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29k
ZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwg
QmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCiAvLyBGSVhNRTogV2Ugc2hv
dWxkIG5vdCBuZWVkIHRoZSBYODZfNjRfV0lOIGNvbmRpdGlvbiBoZXJlLCBzaW5jZSBXRUJBU1NF
TUJMWSBzaG91bGQgYWxyZWFkeSBiZSBmYWxzZSBvbiBXaW5kb3dzCiAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNzE2CiBpZiBXRUJBU1NFTUJMWSBhbmQgbm90
IFg4Nl82NF9XSU4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJs
ZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDgsOCArNDgsMTAgQEAgcHVibGljOgogICAgIENhY2hlYWJsZUlkZW50aWZpZXIoKSA9IGRl
ZmF1bHQ7CiAKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJv
bUNlbGwoSlNDZWxsKiBpZGVudGlmaWVyKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlk
ZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayos
IGNvbnN0IElkZW50aWZpZXImKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZp
ZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayosIFVuaXF1
ZWRTdHJpbmdJbXBsKik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cisg
ICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgY29uc3QgSWRlbnRpZmllciYpOworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29k
ZUJsb2NrVHlwZSosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGlubGluZSBDYWNo
ZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoVW5pcXVlZFN0cmlu
Z0ltcGwqKTsKICAgICBzdGF0aWMgY29uc3RleHByIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRl
RnJvbVJhd0JpdHModWludHB0cl90IHJhd0JpdHMpIHsgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZp
ZXIocmF3Qml0cyk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lvbiAyODMw
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTQgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgSWRlbnRpZmllciYgaSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
PgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywg
Y29uc3QgSWRlbnRpZmllciYgaSkKIHsKICAgICByZXR1cm4gY3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKGNvZGVCbG9jaywgaS5pbXBsKCkpOwogfQogCi1pbmxpbmUgQ2FjaGVh
YmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJ
ZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGNvZGVCbG9jay0+aGFzSWRlbnRp
Zmllcih1aWQpKTsKICAgICByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcih1aWQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiQ2FjaGVkVHlwZXMuaCIKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5o
IgogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ2FjaGVFcnJv
ci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgpAQCAtMTkxOCw2ICsx
OTE5LDggQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgbnVtVmFsdWVQcm9maWxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fbnVtVmFsdWVQcm9maWxlczsgfQogICAgIHVuc2lnbmVkIG51bUFycmF5UHJv
ZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bUFycmF5UHJvZmlsZXM7IH0KKyAgICB1bnNpZ25l
ZCBudW1CaW5hcnlBcml0aFByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1CaW5hcnlBcml0
aFByb2ZpbGVzOyB9CisgICAgdW5zaWduZWQgbnVtVW5hcnlBcml0aFByb2ZpbGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1VbmFyeUFyaXRoUHJvZmlsZXM7IH0KIAogcHJpdmF0ZToKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7CkBAIC0xOTUyLDYgKzE5NTUsOCBAQCBwcml2YXRl
OgogCiAgICAgdW5zaWduZWQgbV9udW1WYWx1ZVByb2ZpbGVzOwogICAgIHVuc2lnbmVkIG1fbnVt
QXJyYXlQcm9maWxlczsKKyAgICB1bnNpZ25lZCBtX251bUJpbmFyeUFyaXRoUHJvZmlsZXM7Cisg
ICAgdW5zaWduZWQgbV9udW1VbmFyeUFyaXRoUHJvZmlsZXM7CiAKICAgICBDYWNoZWRNZXRhZGF0
YVRhYmxlIG1fbWV0YWRhdGE7CiAKQEAgLTIxNjAsNiArMjE2NSw4IEBAIEFMV0FZU19JTkxJTkUg
VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2UKICAgICAsIG1fcmFyZURhdGEoY2FjaGVkQ29kZUJs
b2NrLnJhcmVEYXRhKGRlY29kZXIpKQogICAgICwgbV92YWx1ZVByb2ZpbGVzKGNhY2hlZENvZGVC
bG9jay5udW1WYWx1ZVByb2ZpbGVzKCkpCiAgICAgLCBtX2FycmF5UHJvZmlsZXMoY2FjaGVkQ29k
ZUJsb2NrLm51bUFycmF5UHJvZmlsZXMoKSkKKyAgICAsIG1fYmluYXJ5QXJpdGhQcm9maWxlcyhj
YWNoZWRDb2RlQmxvY2subnVtQmluYXJ5QXJpdGhQcm9maWxlcygpKQorICAgICwgbV91bmFyeUFy
aXRoUHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bVVuYXJ5QXJpdGhQcm9maWxlcygpKQogewog
fQogCkBAIC0yMzM3LDYgKzIzNDQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29kZUJs
b2NrPENvZGVCCiAgICAgbV9oYXNDaGVja3BvaW50cyA9IGNvZGVCbG9jay5tX2hhc0NoZWNrcG9p
bnRzOwogICAgIG1fbnVtVmFsdWVQcm9maWxlcyA9IGNvZGVCbG9jay5tX3ZhbHVlUHJvZmlsZXMu
c2l6ZSgpOwogICAgIG1fbnVtQXJyYXlQcm9maWxlcyA9IGNvZGVCbG9jay5tX2FycmF5UHJvZmls
ZXMuc2l6ZSgpOworICAgIG1fbnVtQmluYXJ5QXJpdGhQcm9maWxlcyA9IGNvZGVCbG9jay5tX2Jp
bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgIG1fbnVtVW5hcnlBcml0aFByb2ZpbGVzID0g
Y29kZUJsb2NrLm1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKIAogICAgIG1fbWV0YWRhdGEu
ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX21ldGFkYXRhLmdldCgpKTsKICAgICBtX3JhcmVE
YXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9yYXJlRGF0YS5nZXQoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVG
SU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRp
YyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRh
dGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVu
YXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAg
VW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAg
ICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1i
ZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBpbmxpbmUg
cHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlm
Zl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihG
dW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0aWMgaW5s
aW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0
KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyODMw
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDM0LDggKzQzNCw2IEBAIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5k
ZW50T3B0aW9ucygKICAgICBPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSA9IGZhbHNlOwogI2Vu
ZGlmCiAKLSAgICBpZiAoIWlzQVJNNjQoKSkKLSAgICAgICAgT3B0aW9uczo6dXNlRGF0YUlDKCkg
PSBmYWxzZTsKICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQogICAgICAgICBPcHRpb25z
Ojp1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQoKSA9IGZhbHNlOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwOSw3ICszMDksNiBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgp
OwogICAgIHYoSW50MzIsIGV2YWxUaHJlc2hvbGRNdWx0aXBsaWVyLCAxMCwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihVbnNpZ25lZCwgbWF4aW11bUV2YWxDYWNoZWFibGVTb3VyY2VMZW5ndGgs
IDI1NiwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAotICAgIHYoQm9vbCwgcmFuZG9taXplRXhl
Y3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihJbnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0Zv
ckJhc2VsaW5lLCAxMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMyLCBtYXhpbXVt
RXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yVXBwZXJUaWVycywgNTAwMDAsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIFwKQEAgLTUzMiw2ICs1MzEsNyBAQCBib29sIGNhblVzZVdl
YkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoQm9vbCwgdXNlRGF0YUlDLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ1NoYXJpbmcsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIHVzZUJhc2VsaW5lSklUQ29kZVNo
YXJpbmcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICAvKiBGZWF0dXJlIEZs
YWdzICovXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njcmlw
dEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzk2LDEwICszOTYsMTkgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhl
Y3V0aQogICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCiAgICAgICAgIGNvZGVC
bG9jay0+dmFsaWRhdGUoKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQotICAgICAg
ICBzZXR1cExMSW50KGNvZGVCbG9jayk7Ci0gICAgZWxzZQotICAgICAgICBzZXR1cEpJVCh2bSwg
Y29kZUJsb2NrKTsKKyAgICBib29sIGluc3RhbGxlZFVubGlua2VkQmFzZWxpbmVDb2RlID0gZmFs
c2U7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gYmFz
ZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNl
bGluZUNvZGUpIHsKKyAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5l
Q29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgaW5zdGFsbGVkVW5s
aW5rZWRCYXNlbGluZUNvZGUgPSB0cnVlOworICAgIH0KKyNlbmRpZgorICAgIGlmICghaW5zdGFs
bGVkVW5saW5rZWRCYXNlbGluZUNvZGUpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50
KCkpCisgICAgICAgICAgICBzZXR1cExMSW50KGNvZGVCbG9jayk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHNldHVwSklUKHZtLCBjb2RlQmxvY2spOworICAgIH0KIAogICAgIGluc3RhbGxD
b2RlKHZtLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+Y29kZVR5cGUoKSwgY29kZUJsb2NrLT5zcGVj
aWFsaXphdGlvbktpbmQoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTExJbnRUaWVyVXBDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRl
cldhcm1VcCgpCiAgICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRv
QkJRKCkpCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9y
QkJRT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1Ro
cmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNo
b2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVw
KCkpOwogICAgIH0KIAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNo
ZWQoKQpAQCAtNjUsOSArNjUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQog
ICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgpKQotICAg
ICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXpl
U29vbigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0
aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZVNvb24oKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwg
bnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xk
Rm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAogICAgIHN0cnVjdCBPU1JFbnRyeURhdGEg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGllclVwQ291bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIFRpZXJVcENvdW50OjpUaWVyVXBDb3VudCgpCiB7
Ci0gICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0
ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiB9CiAKIFRpZXJVcENvdW50Ojp+VGll
clVwQ291bnQoKSA9IGRlZmF1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVGllclVwQ291bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGllclVwQ291bnQuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzcz
LDcgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCh1aW50MzJfdCBmdW5j
dGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBhZnRlciB3YXJtLXVwLiIpOwot
ICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVB
ZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9v
bCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCkBAIC05MCwxNCArOTAsMTQg
QEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbih1aW50MzJfdCBmdW5j
dGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uIik7
Ci0gICAgICAgIHNldE5ld1RocmVzaG9sZCgwLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhy
ZXNob2xkKDApOwogICAgIH0KIAogICAgIHZvaWQgb3B0aW1pemVTb29uKHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NS
KCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIHNvb24uIik7CiAgICAgICAgIC8v
IEZJWE1FOiBOZWVkIGFkanVzdG1lbnQgb25jZSB3ZSBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91
dCB3YXNtIGZ1bmN0aW9ucy4KLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvck9NR09wdGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNo
b2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAg
ICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCh1
aW50MzJfdCBmdW5jdGlvbkluZGV4LCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCkluZGV4OiBT
b3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNSBAQAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KKworICAgICAgICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiB3dGYvQmFnLmg6CisgICAgICAgICogd3RmL1BhY2tlZC5oOgor
ICAgICAgICAoV1RGOjpQYWNrZWRBbGlnbmVkUHRyOjpvcGVyYXRvciogY29uc3QpOgorCiAyMDIx
LTA5LTI0ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQg
dHlwZWNoZWNraW5nIGBpc2Agb3ZlcmxvYWRzIGZvciBgc3RkOjp1bmlxdWVfcHRyYCwgYFdURjo6
VW5pcXVlUmVmYCwgYW5kIGBXVEY6OldlYWtQdHJgCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDIwIEBA
IHB1YmxpYzoKICAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEJhZyYgb3BlcmF0b3I9KEJhZzxULCBVPiYmIG90aGVy
KQorICAgIHsKKyAgICAgICAgaWYgKHVud3JhcHBlZEhlYWQoKSA9PSBvdGhlci51bndyYXBwZWRI
ZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAgQmFnIGRlc3Ryb3k7
CisgICAgICAgIGRlc3Ryb3kubV9oZWFkID0gdW53cmFwcGVkSGVhZCgpOworICAgICAgICBtX2hl
YWQgPSBvdGhlci51bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxw
dHI7CisKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIH5CYWcoKQogICAgIHsK
ICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QYWNrZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4NiwxMCBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgp
OyB9Ci0gICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVSA9IFQ+CisgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0
ZDo6aXNfdm9pZF92PFU+LCBVJj46OnR5cGUgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdl
dCgpOyB9CisKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFnZXQoKTsgfQog
CiAgICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJz
aW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgo=
</data>
<flag name="commit-queue"
          id="462796"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439194</attachid>
            <date>2021-09-24 13:57:45 -0700</date>
            <delta_ts>2021-09-24 15:59:11 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>646304</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzOCBA
QAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhZGRzIGFuICJ1bmxpbmtlZCIgYmFzZWxpbmUgSklUIHRvIEpTVkFMVUU2
NCBwbGF0Zm9ybXMuIFRoZSBKSVQKKyAgICAgICAgY29kZSBwcm9kdWNlZCBieSB0aGlzIGJhc2Vs
aW5lIEpJVCBjYW4gYmUgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3MgdGhhdAorICAgICAg
ICBzaGFyZSBhbiBVbmxpbmtlZENvZGVCbG9jay4gVGhlIGJlbmVmaXQgb2YgdGhpcyBpcywgaWYg
d2UncmUgY3JlYXRpbmcgYSBDb2RlQmxvY2sKKyAgICAgICAgZnJvbSBhbiBVbmxpbmtlZENvZGVC
bG9jayB0aGF0IGFscmVhZHkgY29tcGlsZWQgYW4gdW5saW5rZWQgYmFzZWxpbmUgSklUCisgICAg
ICAgIGluc3RhbmNlLCB0aGlzIG5ldyBDb2RlQmxvY2sganVzdCBzdGFydHMgb2ZmIGV4ZWN1dGlu
ZyBpbiB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgICJmb3IgZnJlZSIuCisgICAgICAgIAorICAg
ICAgICBUbyBtYWtlIHRoaXMgd29yaywgdGhlIGNvZGUgd2UgZW1pdCBub3cgbmVlZHMgdG8gYmUg
aW5kZXBlbmRlbnQgb2YgYSBzcGVjaWZpYworICAgICAgICBDb2RlQmxvY2sgaW5zdGFuY2UuIFdl
IHVzZSBhIENvZGVCbG9jayBpbnN0YW5jZSBmb3IgbWluaW1hbCBwcm9maWxpbmcgaW5mb3JtYXRp
b24KKyAgICAgICAgd2hlbiBjb21waWxpbmcsIGJ1dCBvdGhlcndpc2UsIHRoZSBjb2RlIGlzIHRp
ZWQgdG8gdGhlIFVubGlua2VkQ29kZUJsb2NrLiBXaGVuCisgICAgICAgIHdlIG5lZWQgQ29kZUJs
b2NrIHNwZWNpZmljIGluZm9ybWF0aW9uLCB3ZSBsb2FkIGl0LiBUaGlzIHVzdWFsbHkgbWVhbnMg
dGhpbmdzCisgICAgICAgIGxpa2Ugd2UnbGwgbG9hZCB0aGluZ3MgZnJvbSB0aGUgTWV0YWRhdGEg
ZHluYW1pY2FsbHkuIFRoaXMgcGF0Y2ggYWxzbyBhZGRzIGEKKyAgICAgICAgImxpbmtlZCBjb25z
dGFudCBwb29sIiBjb25jZXB0LCBhbmQgYW55dGltZSB3ZSBpbnN0YW50aWF0ZSBzdWNoIGEgQ29k
ZUJsb2NrLAorICAgICAgICB3ZSBhbHNvIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcyAibGlua2Vk
IGNvbnN0YW50IHBvb2wiLiBUaGlzIGNvbnRhaW5zIHRoaW5ncworICAgICAgICBsaWtlIG91ciBp
bmxpbmUgY2FjaGUgZGF0YSBzdHJ1Y3R1cmVzIChTdHJ1Y3R1cmVTdHViSW5mbyopLCBKU0dsb2Jh
bE9iamVjdCosCisgICAgICAgIGV0Yy4KKyAgICAgICAgCisgICAgICAgIFVubGlua2VkIGJhc2Vs
aW5lIEpJVCBhbHdheXMgcnVucyBJQ3MgaW4gdGhlICJkYXRhIiBtb2RlLiBUbyBtYWtlIHRoaXMg
d29yaywgSQorICAgICAgICBtYWRlIGRhdGEgSUNzIHdvcmsgb24geDg2XzY0LiBUbyBkbyB0aGlz
LCB3ZSBubyBsb25nZXIgY2FsbC9yZXQgdG8gdGhlIElDLgorICAgICAgICBJbnN0ZWFkLCB3ZSBq
dW1wIHRvIHRoZSBJQywgYW5kIHRoZSBJQyBqdW1wcyBiYWNrIGJ5IGxvYWRpbmcgdGhlICJkb25l
IiBsb2NhdGlvbgorICAgICAgICBmcm9tIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBkeW5hbWljYWxs
eS4gVGhpcyBzaW1wbGlmaWVzIHRoZSBkZXNpZ24gdG8gbm90IGJlCisgICAgICAgIGJhc2VkIG9u
IHRoZSBhcm02NCBjYWxsaW5nIGNvbnZlbnRpb24sIGFuZCBrZWVwcyB0aGUgc2FtZSBwZXJmb3Jt
YW5jZSBjaGFyYWN0ZXJpc3RpY3MuIAorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNv
IGFkZHMgYSBuZXcgdmVyc2lvbiBvZiBJbmxpbmVBY2Nlc3MgdGhhdCBpcyBvbmx5IHVzZWQgaW4g
YmFzZWxpbmUKKyAgICAgICAgSklUIChmb3Igbm93KS4gSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIG1h
a2UgdGhlIERGRy9GVEwgYWxzbyB1c2UgdGhpcyBmb3IgRGF0YQorICAgICAgICBJQ3MuIEJ1dCB3
ZSBkb24ndCBuZWVkIHRvIGRvIHRoYXQgeWV0IHNpbmNlIHRob3NlIHRpZXJzIGRvbid0IHVzZSBk
YXRhIElDcyBieQorICAgICAgICBkZWZhdWx0LiBUaGUgYmFzZWxpbmUgSklUIG5vdyBoYXMgYSBw
dXJlIGRhdGEgSUMgYXBwcm9hY2ggdG8gSW5saW5lQWNjZXNzLiBTbworICAgICAgICBpbnN0ZWFk
IG9mIHJlcGF0Y2hpbmcgY29kZSwgd2UgcmVwYXRjaCBmaWVsZHMgd2UgbG9hZCBkeW5hbWljYWxs
eS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgYSBmZXcgdGhp
bmdzIGluIE9TUiBleGl0LCB3aGVyZSBib3RoIERGRy9GVEwgd2VyZQorICAgICAgICBzdG9yaW5n
IGNhbGxlZSBzYXZlcyB0byB0aGUgY2FsbGVlIHNhdmVzIGJ1ZmZlciBpbiBhIHdlaXJkIHBsYWNl
LCBhbmQgc2VwYXJhdGUKKyAgICAgICAgZnJvbSBvbmUgYW5vdGhlci4gSSBub3RpY2VkIHRoaXMg
Y29kZSBjYW4gYmUgc2ltcGxpZmllZCBpZiB3ZSBqdXN0IHN0b3JlCisgICAgICAgIGNhbGxlZSBz
YXZlcyBhdCB0aGUgZW5kIG9mIHRoZSBPU1IgZXhpdCBoYW5kbGVyLCBhbmQgZnJvbSBjb21tb24g
SklUIGVtaXNzaW9uCisgICAgICAgIGNvZGUuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNo
IGFsc28gZml4ZXMgYSBidWcgd2hlcmUgd2UgY291bGQgZW5kIHVwIHdpdGggdGhlIHdyb25nIChh
bmQgYWx3YXlzCisgICAgICAgIG1vcmUgbmVnYXRpdmUpIFNQIGluIHRoZSBiYXNlbGluZSBKSVQu
IFRoaXMgY291bGQgaGFwcGVuIHdoZW4gd2UgT1NSIGV4aXQKKyAgICAgICAgZnJvbSBhbiBpbmxp
bmVkIGdldHRlci9zZXR0ZXIuIFRoZSBPU1IgZXhpdCBjb2RlIHB1dHMgdGhlIHJldHVybiBQQyB3
aGVuCisgICAgICAgIHJldHVybmluZyB0byB0aGUgY2FsbCBzaXRlIG9mIHRoZSBnZXR0ZXIvc2V0
dGVyIHRvIGJlIHRoZSBpbmxpbmUgY2FjaGUncworICAgICAgICAiZG9uZSBsb2NhdGlvbiIuIEhv
d2V2ZXIsIHRoaXMgImRvbmUgbG9jYXRpb24iIGRpZG4ndCB1c2VkIHRvIHJlc3RvcmUgU1AuCisg
ICAgICAgIFRoaXMgcGF0Y2ggY29uc2VydmF0aXZlbHkgbWFrZXMgaXQgc28gdGhhdCB3ZSByZXN0
b3JlIHRoZSBTUCBhdCB0aGVzZSBzaXRlcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbWVh
c3VyZWQgYXMgYSAxJSBzcGVlZHVwIG9uIFNwZWVkb21ldGVyMi4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlT3Bl
cmFuZHNGb3JDaGVja3BvaW50Lmg6CisgICAgICAgIChKU0M6OnZhbHVlUHJvZmlsZU9mZnNldEZv
cik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjplbWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RmFz
dFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKToKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgpOgorICAgICAgICAo
SlNDOjpDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMpOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNsb3dT
dHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjphZGRyZXNzT2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZSk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6ZnJhbWVSZWdpc3RlckNvdW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiaW5hcnlB
cml0aFByb2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5hcnlBcml0aFBy
b2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluZFBDKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpqaXRTb29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRO
ZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRBZGRJQyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUTXVsSUMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVFN1YklDKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRKSVROZWdJQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6aml0QWZ0ZXJXYXJtVXApOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29u
c3RhbnRQb29sKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFzZWxpbmVKSVRDb25zdGFudFBvb2wpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpkb250SklUQW55dGltZVNvb24pOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duQ2VsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6YWRkTWF0aElDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzZXRKSVRDb2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRD
b2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzd2l0Y2hKdW1wVGFi
bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJh
c2VsaW5lU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNlbGlu
ZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZGZnU3dp
dGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdTdHJpbmdTd2l0Y2hK
dW1wVGFibGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uu
aDoKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjpzZXRUaHJlc2hvbGQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0
aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJ
ZE1ldGFkYXRhLmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0
aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpHZXRCeUlkTW9kZU1ldGFk
YXRhOjpvZmZzZXRPZk1vZGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcDoK
KyAgICAgICAgKEpTQzo6R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0
U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEdl
dHRlcik6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6
OkluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToK
KyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5s
aW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UpOgorICAgICAgICAoSlND
OjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChK
U0M6OklubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OklubGlu
ZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyk6CisgICAgICAgIChKU0M6OklubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2Vzcyk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmg6
CisgICAgICAgICogYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmg6CisgICAgICAgIChK
U0M6Okl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMpOgorICAgICAgICAq
IGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6CisgICAgICAgIChKU0M6OkxMSW50Q2FsbExp
bmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSk6CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2Rl
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAo
SlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OmNhbGN1bGF0ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0
aW9uSGFuZGxpbmcpOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNl
cnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMpOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgICogYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0
YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5jcHA6CisgICAgICAg
IChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OmluaXRHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0UHV0QnlJZFJlcGxhY2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5p
dEluQnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNz
Q2FzZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZE
b25lTG9jYXRpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHA6CisgICAg
ICAgIChKU0M6OnByaW50U3VwZXJTYW1wbGVyU3RhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0lk
ZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dGhyZXNob2xkRm9y
SklUKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJv
ZmlsZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6Omluc3RydWN0aW9uQXQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmJpbmFyeUFyaXRoUHJvZmlsZSk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp1bmFyeUFyaXRoUHJvZmlsZSk6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpsbGludEV4ZWN1dGVDb3VudGVyKToKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaDoKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRNZXRhZGF0YVRhYmxlOjpvZmZzZXRJbk1ldGFkYXRhVGFibGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNl
OjpWYWx1ZVByb2ZpbGVCYXNlKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQmFzZTo6Y2xl
YXJCdWNrZXRzKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVj
a2V0KToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb2RlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAqIGRmZy9E
RkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxpbmsp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJl
cGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmhhbmRsZUV4aXRDb3VudHMp
OgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRK
dW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRQcml2YXRlTmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVWYWx1ZVN1Yik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dTaGFkb3dDaGlja2VuVGFpbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExKSVRDb2Rl
Lmg6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Omxpbmsp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjphZGRNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlVW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpjb21waWxlQmluYXJ5TWF0aElDKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVB1dFByaXZhdGVOYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAg
ICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29t
cGlsZVN0dWIpOgorICAgICAgICAqIGdlbmVyYXRvci9NZXRhZGF0YS5yYjoKKyAgICAgICAgKiBq
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpz
dG9yZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVh
bENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMu
aDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6CisgICAgICAgICogaml0L0Jhc2VsaW5lSklUQ29kZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKToKKyAg
ICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZGRKSVRNdWxJQyk6CisgICAgICAgIChKU0M6Ok1h
dGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMpOgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFk
ZEpJVE5lZ0lDKToKKyAgICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MpOgor
ICAgICAgICAoSlNDOjpCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAg
IChKU0M6OkJhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAgICogaml0
L0Jhc2VsaW5lSklUQ29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SklUQ29uc3RhbnRQb29s
OjphZGQpOgorICAgICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OnNpemUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OmF0IGNvbnN0KToKKyAgICAgICAgKiBqaXQvQmFz
ZWxpbmVKSVRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6QmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6
ZSk6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkNDYWxs
SGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKToKKyAgICAgICAgKEpTQzo6
Q0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldCk6CisgICAgICAgICogaml0
L0NDYWxsSGVscGVycy5oOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHA6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oOgorICAgICAgICAq
IGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpDYWxsRnJhbWVTaHVmZmxlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpwcmVwYXJlRm9yVGFpbENhbGwpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5o
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c25hcHNob3QgY29uc3QpOgorICAg
ICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OkpJVCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRWYXJS
ZWFkT25seUNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc2V0U1ApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5k
Q29uc3RhbnRQb29sUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpm
aW5hbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcik6CisgICAgICAgIChK
U0M6OkpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKToKKyAgICAgICAgKiBqaXQvSklULmg6Cisg
ICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVnYXRlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2FkZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tdWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3ViKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2Fs
bEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2l0ZXJhdG9yX25leHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX25leHQpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxl
U2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dD
YXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpT
Qzo6SklUQ29kZTo6dXNlRGF0YUlDKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6cGNUb0NvZGVP
cmlnaW5NYXApOgorICAgICAgICAqIGppdC9KSVRDb21waWxhdGlvbktleS5jcHA6CisgICAgICAg
IChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklU
Q29tcGlsYXRpb25LZXkuaDoKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OkpJVENv
bXBpbGF0aW9uS2V5KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJhdG9y
ISBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpvcGVy
YXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Omhhc2ggY29u
c3QpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6cHJvZmlsZWRCbG9jayBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXpl
KToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJ
VEdldEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUdldEJ5SWRJbmxpbmVB
Y2Nlc3MpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJ
VFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkpJVERlbEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklURGVsQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAg
IChKU0M6OkpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAo
SlNDOjpKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpKSVRHZXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXRoKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0
YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudEludCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6aXNLbm93bkNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdldENv
bnN0YW50T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6
bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmFkdmFuY2VUb05l
eHRDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdExvYWREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkpJVDo6anVtcFRhcmdldCk6CisgICAgICAgIChKU0M6OkpJVDo6
bG9hZFB0ckZyb21NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZDMyRnJvbU1ldGFk
YXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkOEZyb21NZXRhZGF0YSk6CisgICAgICAgIChK
U0M6OkpJVDo6c3RvcmU4VG9NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6c3RvcmUzMlRv
TWV0YWRhdGEpOgorICAgICAgICAoSlNDOjpKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
SklUOjpsb2FkR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29kZUJsb2Nr
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEdldFB1dEluZm8pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZSk6IERlbGV0ZWQuCisgICAg
ICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9u
dWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzVHJ1dGh5
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dp
dGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVj
a190cmFwcyk6CisgICAgICAgIChKU0M6OkpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5l
d0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYXJndW1lbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9v
Zik6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdHlwZW9mX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SklUX09QRVJBVElPTik6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBqaXQvSklUUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmtleSk6CisgICAgICAg
ICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6c2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9k
ZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
aW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQcml2YXRlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SGFzUHJpdmF0ZVNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19w
cml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRl
X2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmspOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29w
ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKToKKyAgICAg
ICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF90
b19zY29wZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1
cmVWYXIpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9wcml2YXRlX2Jy
YW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9pbnRl
cm5hbF9maWVsZCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUdldEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeSk6CisgICAgICAgIChK
U0M6OnRyeUNhY2hlSW5CeSk6CisgICAgICAgIChKU0M6OnVubGlua0NhbGwpOgorICAgICAgICAq
IGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpoYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxl
RXhjZXB0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6Cisg
ICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6
aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRf
U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayk6CisgICAgICAgICogcnVudGltZS9DYWNoZWRU
eXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtQmluYXJ5QXJpdGhQ
cm9maWxlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtVW5hcnlB
cml0aFByb2ZpbGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9j
a1R5cGU+OjplbmNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoK
KyAgICAgICAgKEpTQzo6dXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKToKKyAgICAg
ICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlv
bnMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1l
L1NjcmlwdEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpw
cmVwYXJlRm9yRXhlY3V0aW9uSW1wbCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRUaWVyVXBD
b3VudGVyLmg6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6b3B0aW1p
emVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6
b3B0aW1pemVTb29uKToKKyAgICAgICAgKiB3YXNtL1dhc21UaWVyVXBDb3VudC5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50OjpUaWVyVXBDb3VudCk6CisgICAgICAgICogd2Fz
bS9XYXNtVGllclVwQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6Om9w
dGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6b3B0
aW1pemVOZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50Ojpv
cHRpbWl6ZVNvb24pOgorCiAyMDIxLTA5LTIzICBQaGlsaXAgQ2hpbWVudG8gIDxwY2hpbWVudG9A
aWdhbGlhLmNvbT4KIAogICAgICAgICBWYXJpb3VzIHR3ZWFrcyBpbiBwcmVwYXJhdGlvbiBmb3Ig
VGVtcG9yYWwuSW5zdGFudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC04MzcsNiArODM3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQQogCiAgICAgaml0L0Fzc2VtYmx5SGVscGVycy5oCiAgICAgaml0
L0Fzc2VtYmx5SGVscGVyc1Nwb29sZXJzLmgKKyAgICBqaXQvQmFzZWxpbmVKSVRDb2RlLmgKICAg
ICBqaXQvQ0NhbGxIZWxwZXJzLmgKICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCiAgICAg
aml0L0V4ZWN1dGFibGVNZW1vcnlIYW5kbGUuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC02MTksNiArNjE5LDcgQEAgaW50ZXJwcmV0ZXIvU2hhZG93
Q2hpY2tlbi5jcHAKIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKIAogaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAKK2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCiBqaXQvQmFzZWxpbmVKSVRQbGFu
LmNwcAogaml0L0JpbmFyeVN3aXRjaC5jcHAKIGppdC9DQ2FsbEhlbHBlcnMuY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTkwMCw2ICs5MDAsNyBAQAogCQk1MkNEMEY1RDIyNDJGNTY5MDA0QTE4
QTUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlv
bi5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0MkY1NjkwMDRBMThBNSAvKiBKYXZhU2Ny
aXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJh
bWV3b3JrICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNEMEY2NzIy
NDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87IH07CisJCTUyREQwMDA4MjZFMDM5Qjkw
MDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJ
VENvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MkVFRDc5NDI0OTJCODcwMDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRUVENzkzMjQ5MkI4Njgw
MDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovOyB9OwogCQk1MkY2QzM1RTFFNzFFQjA4
MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAv
KiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyB9OwogCQk1MzBBNjZCOTFGQTNFNzhC
MDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCMTFGQTNFNzdBMDAyNkE1NDUgLyogVW5pZmll
ZFNvdXJjZTMtbW0ubW0gKi87IH07CkBAIC0xMjIwLDcgKzEyMjEsNyBAQAogCQk3OTg3MkM0ODIy
MUJCQUYzMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODcyQzQ3MjIxQkJBRUQwMDhDNjk2OSAvKiBKU0Jh
c2VJbnRlcm5hbC5oICovOyB9OwogCQk3OTlFRjdDNDFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1Rv
T3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBMDkwODAxRDc2ODQ2
NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3OUEy
MjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyog
QXJpdGhQcm9maWxlLmggKi87IH07CisJCTc5QTIyODM2MUQzNUQ3MUYwMEQ4RTA2NyAvKiBBcml0
aFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUFCQjE3RTFFNUNDQjU3MDA0
NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUFCQjE3QzFFNUNDQjU3MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1i
bGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzlBQzMwRkYxRjk5NTM2NDAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBQzMw
RkUxRjk5NTM2MzAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oICov
OyB9OwogCQk3OUFGMEJFNDFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFGMEJF
MzFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM2NzQsNiArMzY3NSw4IEBA
CiAJCTUyQ0QwRjY0MjI0MkY1NjkwMDRBMThBNSAvKiB0ZXN0ZGZnICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFi
bGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0ZGZnOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRm
Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0ZGZnLmNwcDsg
cGF0aCA9IGRmZy90ZXN0ZGZnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJE
MTMwOEYyMjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9IGZvby5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJE
RDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCYXNlbGluZUpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJERDAw
MDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBCYXNlbGluZUpJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MkVFRDc5MjI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzYsNiArNjI3OSw4IEBA
CiAJCQkJNkI3NjdFN0EyNjc5MUYyNzAwMTdGOEQxIC8qIEFzc2VtYmx5SGVscGVyc1Nwb29sZXJz
LmggKi8sCiAJCQkJNzIzOTk4RjYyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5j
cHAgKi8sCiAJCQkJNzIzOTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5o
ICovLAorCQkJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuY3Bw
ICovLAorCQkJCTUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAq
LywKIAkJCQkwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNwcCAqLywK
IAkJCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi8sCiAJCQkJ
NjVCODM5MkQxQkFDQTlEMzAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmNwcCAqLywKQEAgLTk3
MzAsNiArOTczNSw3IEBACiAJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1OTUwIC8qIERGR0Zsb3dN
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdG
bHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJERDAwMDgyNkUwMzlCOTAw
NTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTUx
QUIzRDhCRTAwQkJCOEU4IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjY5Q0M4OTE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzODZGRDdFMjZFODY3QjgwMEU0QzI4QiAvKiBUZW1wb3JhbFBsYWluVGltZS5oIGlu
IEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxNSArMjAyLDE1
IEBAIFJlZlB0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9tU3RydWMKICAgICBzd2l0Y2gg
KHN0dWJJbmZvLmNhY2hlVHlwZSgpKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxm
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIp
OwotICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwg
TG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBQcm94eWFi
bGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBMb2FkLCBpZGVudGlmaWVyLCBzdHViSW5m
by5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8uaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkp
OwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgogICAgICAgICBSRUxFQVNF
X0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICByZXR1cm4g
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmllciwgc3R1Yklu
Zm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBS
ZXBsYWNlLCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8uaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJ
ZFNlbGY6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRp
Zmllcik7Ci0gICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBJbkhp
dCwgaWRlbnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNl
OjpjcmVhdGUodm0sIG93bmVyLCBJbkhpdCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZP
ZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNh
c2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1Yklu
Zm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKQEAgLTE5ODUsMTQgKzE5ODUsMTAgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAvLyBTdHVmZiBmb3Ig
Y3VzdG9tIGdldHRlcnMvc2V0dGVycy4KICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJh
dGlvbkNhbGw7CiAKKwogICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNh
bGN1bGF0aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAgICAgICAvLyBleGNlcHRp
b24gaGFuZGxpbmcgY2FsbCBzaXRlLgotICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVy
c1RvUHJlc2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VE
YXRhSUMoKSkKLSAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRS
ZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgotICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNw
aWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tG
b3JDYWxsKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAgIEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0
ZXJzVG9TdGFja0ZvckNhbGwoKTsKIAogICAgICAgICBhdXRvIHJlc3RvcmVMaXZlUmVnaXN0ZXJz
RnJvbVN0YWNrRm9yQ2FsbCA9IFsmXShBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUm
IHNwaWxsU3RhdGUsIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlKSB7CiAgICAgICAgICAgICBSZWdp
c3RlclNldCBkb250UmVzdG9yZTsKQEAgLTIwNzksOCArMjA3NSw3IEBAIHZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIEFTU0VSVCghKG51bWJlck9m
UmVnc0ZvckNhbGwgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSk7CiAgICAgICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXpl
b2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwogCi0gICAgICAgICAgICB1
bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQotICAgICAgICAgICAgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0Zv
ckNhbGwpOworICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxs
ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVy
T2ZCeXRlc0ZvckNhbGwpOwogCiAgICAgICAgICAgICBqaXQuc3ViUHRyKAogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2Fs
bCksCkBAIC0yMTM4LDYgKzIxMzMsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChB
Y2Nlc3NHZW5lCiAKICAgICAgICAgICAgIGludCBzdGFja1BvaW50ZXJPZmZzZXQgPSAoY29kZUJs
b2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpIC0gc3RhdGUucHJl
c2VydmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZS5udW1iZXJPZkJ5dGVzUHJlc2VydmVkIC0gc3BpbGxT
dGF0ZS5udW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb247CiAgICAg
ICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKwogICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUg
PSBpc0dldHRlcigpOwogICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tG
b3JDYWxsKHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7CiAKQEAgLTIyNjQsMTIgKzIy
NjAsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAKICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5
Ojp0YXJnZXRPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgICAgICBSZWdpc3RlclNl
dCBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAg
aWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAgICAgZXh0cmFSZWdpc3Rl
cnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCi0gICAgICAgICAg
ICBhdXRvIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9y
Q2FsbFdpdGhvdXRFeGNlcHRpb25zKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAg
ICAgICBhdXRvIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNr
Rm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3Vt
ZW50czxkZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+KENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cigmdm0pLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGppdC5wcmVw
YXJlQ2FsbE9wZXJhdGlvbih2bSk7CkBAIC0yMzY0LDEwICsyMzU1LDYgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVy
c1RvUHJlc2VydmUuc2V0KGJhc2VHUFIpOwogICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJz
VG9QcmVzZXJ2ZS5zZXQodmFsdWVSZWdzKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgICAgICAgICAg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgogICAg
ICAgICAgICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRl
ID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3Rl
cnNUb1ByZXNlcnZlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuc3Rv
cmUzMigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3Qu
cmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGlzdC5yYgkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBAIG9w
X2dyb3VwIDpQcm9maWxlZEJpbmFyeU9wLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRU
eXBlcywKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmlu
YXJ5QXJpdGhQcm9maWxlCisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxl
LioKICAgICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTMsNyAr
MzUzLDcgQEAgb3BfZ3JvdXAgOlVuYXJ5SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgICAgIHNyY0Rz
dDogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJp
dGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5
QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDp0b19vYmplY3QsCkBAIC0zODYsNyArMzg2LDcg
QEAgb3AgOm5lZ2F0ZSwKICAgICAgICAgcmVzdWx0VHlwZTogUmVzdWx0VHlwZSwKICAgICB9LAog
ICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUs
CisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3Ag
Om5vdCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJh
bmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNo
ZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjggQEAgVmFsdWVQcm9maWxl
KiB2YWx1ZVByb2ZpbGVGb3JJbXBsKEJ5dGVjbwogICAgICAgICByZXR1cm4gJm1ldGFkYXRhLm1f
cHJvZmlsZTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgordWludHB0cl90IHZh
bHVlUHJvZmlsZU9mZnNldEZvcih1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCit7CisgICAgVU5V
U0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRleCk7CisgICAgaWYgY29uc3RleHByIChCeXRlY29kZTo6
b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3Jfb3BlbikgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9p
bnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1
cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOworICAgICAg
ICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZk5leHRQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKEJ5
dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CisgICAgICAgIHN3aXRjaCAo
Y2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVO
ZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRSZXN1bHRQcm9maWxl
KCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJldHVybiBCeXRlY29k
ZTo6TWV0YWRhdGE6Om9mZnNldE9mRG9uZVByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJh
dG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mVmFs
dWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIHJldHVybiBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29k
ZU1ldGFkYXRhPgogYm9vbCBoYXNWYWx1ZVByb2ZpbGVGb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0
YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE0LDExICsxMTQsNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5r
KFZNJiB2bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7CiB9CiAKLUNvZGVMb2Nh
dGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgp
Ci17Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFn
PihtX2Zhc3RQYXRoU3RhcnQpOwotfQotCiBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KCFpc0RhdGFJQygpKTsKQEAgLTIyNSw2ICsyMjAsMTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnNl
dE1heEFyZ3VtZW50Q291bnRJbgogICAgIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PSB2YWx1ZTsKIH0KIAorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExp
bmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVjdCgp
ICYmIGlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxK
U0ludGVybmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQpOworfQorCiB2b2lkIENh
bGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRvIGhhbmRsZVNwZWNpZmlj
Q2FsbGVlID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKQEAgLTI5OCwyMyArMjk5LDExIEBA
IHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGMKICAgICBtX2ZyYW1lU2h1
ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBD
YWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewotICAgIHNldFVzZXNEYXRh
SUNzKHVzZURhdGFJQyk7Ci0gICAgaWYgKGlzRGF0YUlDKCkpIHsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7Ci0gICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZv
R1BSKTsKLSAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9H
UFI7Ci0gICAgfQotCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAg
aml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBt
X2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4o
ZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNs
b3dQYXRoOwogCi0gICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICBpZiAodXNlRGF0YUlDID09IFVz
ZURhdGFJQzo6WWVzKSB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hS
ZWdpc3RlcigpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2Fs
bExpbmtJbmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7IAogICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKQEAgLTMyMyw3ICszMTIsNyBAQCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAgICAgICBnb1BvbHlt
b3JwaGljID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNo
R1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5bW9ycGhpY0NhbGxlZU1hc2spKTsK
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAg
IHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgZ29Qb2x5bW9ycGhpYy5saW5rKCZq
aXQpOyAvLyBQb2x5bW9ycGhpYyBzdHViIGhhbmRsZXMgdGFpbCBjYWxsIHN0YWNrIHByZXAuCiAg
ICAgICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZv
R1BSLCBvZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFn
KTsKQEAgLTMzNiwxNCArMzI1LDE2IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmUKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2go
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKSk7CiAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGNhbGw7Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFp
bENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAg
Y2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBj
YWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJ
bmZvKTsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAgICAgICAgICAgIHUu
Y29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5h
bFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJ
Qy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJu
YWxQdHJUYWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2Nh
bGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNh
bGxlZUNoZWNrKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNTMsMTMgKzM0NCwzNCBAQCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlD
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0
RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywg
bnVsbHB0cik7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKworICAgIGlmIChpc0Rh
dGFJQygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJS
ZWc6OkludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHUuZGF0YUlDLm1fY2Fs
bExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKworICAgIHJldHVybiBlbWl0
RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURh
dGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQs
IEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VE
YXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwot
ICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9H
UFIsIHVzZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKKyAgICBzZXRVc2Vz
RGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlz
LCBqaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgVXNlRGF0YUlDOjpObywgaXNUYWlsQ2Fs
bCgpLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVy
biBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4gZW1p
dEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBV
c2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKIH0KIAog
dm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0
KQpAQCAtMzY5LDE3ICszODEsMzIgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChW
TSYgdm0sIAogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
Miwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9
CiAKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBqaXQubW92ZShjYWxsTGlu
a0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSks
IEpTRW50cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJ
QyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBtX2NvZGVPcmln
aW4gPSBDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAg
IHNldFVwQ2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2FsbGVlR1BSKTsKKyAg
ICBtX2RvbmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbjsKKyAg
ICBpZiAodW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkgeworICAgICAgICAv
LyBGSVhNRTogSXQnZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBzdHJ1
Y3R1cmUuCisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1l
U2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsKKyAg
ICB9CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlDLm1f
Y2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2FsbERl
c3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUg
cmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6
ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0VfQVNT
RVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7
CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhT
dGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0
YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIGpp
dC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgdS5j
b2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0lu
dGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQu
bGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0UGF0
aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRo
U3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwgdGhp
cyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNp
Z25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2Fs
bExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGlu
ZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAg
IGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwK
ICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAg
ICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVE
YXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0
dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50
OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgot
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVy
cyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVU
VVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1w
bChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGlj
OgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRo
KENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJl
Rm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMm
LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBh
cmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZh
c3RQYXRoKENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2Fs
bCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBzdGF0
aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wg
aXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0
YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsyNDks
NiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAotICAg
IEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zbG93
U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsKICAg
ICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBt
X21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJfdCBt
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVibGlj
OgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFs
UHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVy
bmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlvblR5
cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9jYXRp
b25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAgICAg
IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxvY2F0
aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9z
bG93UGF0aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0
clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAKQEAg
LTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9y
aQogICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3QgVW5s
aW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsgLy8g
Q3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxseSBw
cm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBl
OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZsZURh
dGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw4ICsyNzksNiBAQCBDb2RlQmxvY2s6OkNvZGVC
bG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihm
YWxzZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9oYXNC
ZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNl
KQotICAgICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUoZmFsc2UpCiAgICAgLCBtX251
bUNhbGxlZUxvY2FscyhvdGhlci5tX251bUNhbGxlZUxvY2FscykKICAgICAsIG1fbnVtVmFycyhv
dGhlci5tX251bVZhcnMpCiAgICAgLCBtX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKG90aGVyLm1f
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCkBAIC0zMDgsNiArMzA2LDggQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3Zp
ZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKKwor
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxpbnRFeGVjdXRl
Q291bnRlcigpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwog
fQpAQCAtMzE4LDcgKzMxOCw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIEMKICAgICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKICAgICBvcHRpbWl6ZUFmdGVy
V2FybVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKIAogICAgIGlmIChvdGhlci5tX3JhcmVE
YXRhKSB7CiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTMzNiw4ICsz
MzUsNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBt
X2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0
aW9uKGZhbHNlKQogICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwg
bV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNlKQotICAgICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUoZmFsc2UpIAogICAgICwgbV9udW1DYWxsZWVMb2NhbHModW5saW5rZWRDb2RlQmxvY2st
Pm51bUNhbGxlZUxvY2FscygpKQogICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5u
dW1WYXJzKCkpCiAgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQpAQCAtMzU5LDcg
KzM1Niw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAg
IEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlu
a2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9sbGludEV4ZWN1
dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CisKICAg
ICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcwLDcgKzM2OSw4
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIC8vIHdlIGNhbid0
IGdlbmVyYXRlIGR1cmluZyB1bmxpbmtlZCBieXRlY29kZSBnZW5lcmF0aW9uLiBUaGlzIHByb2Nl
c3MgaXMgbm90IGFsbG93ZWQgdG8gZ2VuZXJhdGUgY29udHJvbAogLy8gZmxvdyBvciBpbnRyb2R1
Y2UgbmV3IGxvY2Fscy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB3ZSByZWx5IG9uIGxpdmVuZXNz
IGFuYWx5c2lzIHRvIGJlIHRoZSBzYW1lIGZvcgogLy8gYWxsIHRoZSBDb2RlQmxvY2tzIG9mIGFu
IFVubGlua2VkQ29kZUJsb2NrLiBXZSByZWx5IG9uIHRoaXMgZmFjdCBieSBjYWNoaW5nIHRoZSBs
aXZlbmVzcyBhbmFseXNpcwotLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLgorLy8gaW5zaWRl
IFVubGlua2VkQ29kZUJsb2NrLiBBbHNvLCBCYXNlbGluZSBKSVQgY29kZSBpcyBzaGFyZWQgYmV0
d2VlbiBhbGwgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jaywKKy8vIHNvIHRoZSBi
eXRlY29kZSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBiZXR3ZWVuIENvZGVCbG9ja3Mgc2hhcmluZyBh
biBVbmxpbmtlZENvZGVCbG9jay4KIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sq
IHVubGlua2VkQ29kZUJsb2NrLAogICAgIEpTU2NvcGUqIHNjb3BlKQogewpAQCAtNDcxLDYgKzQ3
MSwyMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAg
IGJyZWFrOyBcCiAgICAgfQogCisgICAgdW5zaWduZWQgYmluYXJ5UHJvZmlsZUluZGV4ID0gMDsK
KyAgICB1bnNpZ25lZCB1bmFyeVByb2ZpbGVJbmRleCA9IDA7CisjZGVmaW5lIExJTktfV0lUSF9C
SU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAg
IElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJv
ZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJpbmFyeVByb2ZpbGVJ
bmRleCsrKTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJ
TklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2Zp
bGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKHVuYXJ5UHJvZmlsZUluZGV4
KyspOyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25T
dHJlYW0mIGluc3RydWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25z
dCBhdXRvJiBpbnN0cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29k
ZUlEIG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMsMTQgKzU0OCwx
NCBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJ
TksoT3BDcmVhdGVQcm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0g
ICAgICAgIExJTksoT3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BE
aXYpCi0gICAgICAgIExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAg
ICAgTElOSyhPcEluYykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJ
TkFSWV9BUklUSF9QUk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRI
X1BST0ZJTEUoT3BNdWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShP
cERpdikKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisg
ICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBM
SU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAg
LTc2OSw3ICs3ODQsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBT
CiAgICAgLy8gcmVseSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5
IHBlcm1pdHRlZCB0byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFt
IHRvIG1vcmUgYWNjdXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGlt
aXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgLy8gSWYgdGhl
IGNvbmN1cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4g
Y29tcHV0ZSBpdCBoZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAgLTc5Myw2ICs4MDcsNzgg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3duZXJF
ZGdlLnNldCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZtLCB0
aGlzKSk7CiB9CiAKKyNpZiBFTkFCTEUoSklUKQordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVu
bGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7CisgICAg
c2V0SklUQ29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0IGF1
dG8mIGppdENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAgICAg
ICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAgaGFu
ZGxlci5uYXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50
YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CisgICAgICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOwor
ICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGpp
dENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAgICAg
IHN3aXRjaCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6
OlR5cGU6Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3Rh
bnRQb29sW2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7
CisgICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJ
bmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9hZC5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXRE
YXRhLm1fY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5i
eXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFsaXpl
RGF0YUlDKHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5m
bzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0g
PSBjYWxsTGlua0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86
IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0
dWJJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRyeS5w
YXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBqaXREYXRhLm1fc3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUs
IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAg
ICAgICAgc3R1YkluZm8tPmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyh0
aGlzLCB1bmxpbmtlZFN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gc3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25E
ZWNsOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1f
aml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpGdW5jdGlvbkV4cHI6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAg
ICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5kZXgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBH
bG9iYWxDb2RlOgorICAgIGNhc2UgTW9kdWxlQ29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgorICAg
ICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZ1bmN0aW9uQ29kZToKKyAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNl
dCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgor
ICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBtX3No
b3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYmIERG
Rzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgaWYgKGppdENvZGUtPm1faXNTaGFyZWFibGUgJiYgIXVubGlua2VkQ29kZUJsb2NrKCktPm1f
dW5saW5rZWRCYXNlbGluZUNvZGUgJiYgT3B0aW9uczo6dXNlQmFzZWxpbmVKSVRDb2RlU2hhcmlu
ZygpKQorICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2Rl
ID0gV1RGTW92ZShqaXRDb2RlKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCiBDb2RlQmxv
Y2s6On5Db2RlQmxvY2soKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtODczLDYgKzk1OSwy
NyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAK
K2Jvb2wgQ29kZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBuZWVkcyB0byBjb3JyZXNwb25k
IHRvIHdoYXQgd2UgZG8gaW5zaWRlIHNldENvbnN0YW50UmVnaXN0ZXJzLgorICAgIHN3aXRjaCAo
dW5saW5rZWRDb2RlQmxvY2soKS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVn
KSkgeworICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgIGNh
c2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcjogeworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gdW5saW5rZWRDb2RlQmxvY2soKS0+Z2V0Q29uc3RhbnQocmVnKTsKKyAg
ICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlm
IChjZWxsLT5pbmhlcml0czxTeW1ib2xUYWJsZT4odm0oKSkgfHwgY2VsbC0+aW5oZXJpdHM8SlNU
ZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KHZtKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKIFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhj
b25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0
IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbikKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTg5Miw2ICs5OTks
NyBAQCBWZWN0b3I8dW5zaWduZWQ+IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSCiAgICAgICAgIHN3
aXRjaCAocmVwcmVzZW50YXRpb24pIHsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb25zdGFudCA9IGdsb2JhbE9i
amVjdC0+bGlua1RpbWVDb25zdGFudChzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50Pihjb25z
dGFudC5hc0ludDMyQXNBbnlJbnQoKSkpOworICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50Lmlz
Q2VsbCgpKTsgLy8gVW5saW5rZWQgQmFzZWxpbmUgSklUIHJlcXVpcmVzIHRoaXMuCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVy
OgogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKQEAgLTE1
MTQsNyArMTYyMiw3IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJsb2NrOjplbnN1cmVKSVQK
ICAgICByZXR1cm4gKm1faml0RGF0YTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFz
ZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5l
Q2FjaGVzKCkKIHsKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewog
ICAgICAgICBmb3IgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxs
TGlua0luZm9zKQpAQCAtMTUyNSw2ICsxNjMzLDIwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6
ZUJhc2VsaW5lSklUSW5saW4KICAgICAgICAgICAgIHN0dWJJbmZvLT52aXNpdFdlYWtSZWZlcmVu
Y2VzKGxvY2tlciwgdGhpcyk7CiAgICAgICAgIH0KICAgICB9CisKKworI2lmIEFTU0VSVF9FTkFC
TEVECisgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAg
ICAvLyBWZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3Jl
IHZpcnR1YWwgY2FsbHMuCisgICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
OiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxD
YWxsTGlua0luZm9zKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5r
ZWQoKSk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtd
IChKU0NlbGwqKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgfQorI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAt
MTUzNCw0NiArMTY1NiwxMiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAg
ICBib29sIGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50
RG93bmdyYWRlOwotICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0g
ICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1p
emVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFz
ZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9y
eS4KLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYm
IGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxv
Y2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJs
b2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAg
ICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJ
bnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJP
ZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUt
PmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5m
byYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1
bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgp
KS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IHVubGlua0luY29taW5nQ2FsbHMoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNh
ZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwotICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2Fm
ZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIg
Ynl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFy
c2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMg
KmluZm9zLgotICAgICAgICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3du
Z3JhZGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYK
LSAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAg
ICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgaWYgKCEhaml0Q29kZSgpKQotICAgICAgICBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKCk7CisgICAgICAgIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShERkdfSklUKQpAQCAtMTU5NCw3ICsxNjgyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1
bms6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0
ZXJUaHVuazoKLSAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50
KCk7CisgICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y291bnQoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgog
ICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CkBAIC0xNjc1
LDMwICsxNzYzLDYgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgog
ICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5
cGUsIGNvZGVPcmlnaW4pOwogfQogCi1KSVRBZGRJQyogQ29kZUJsb2NrOjphZGRKSVRBZGRJQyhC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2Fk
ZElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklU
TXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVFN1YklDKiBDb2RlQmxvY2s6
OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0
YShsb2NrZXIpLm1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVROZWdJQyogQ29k
ZUJsb2NrOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewot
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJl
SklURGF0YShsb2NrZXIpLm1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCiBTdHJ1Y3R1
cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKQEAgLTMxMzMsNyAr
MzE5Nyw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lm
IEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0
dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzM0OSwxMyArMzQx
MywxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAg
c3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAg
IHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwor
ICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9m
aWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERp
dj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC0zMzY3LDExICszNDMxLDExIEBAIFVuYXJ5QXJpdGhQcm9maWxl
KiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7
CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigp
Lm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9w
TmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5j
OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5t
X2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8
T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBw
Yy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzQ3MiwyMiArMzUzNiwxNiBAQCB2b2lkIENv
ZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiB9CiAKICNpZiBFTkFCTEUoSklUKQot
dm9pZCBDb2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1Rv
Q29kZU9yaWdpbk1hcD4mJiBtYXApIAoteyAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7Ci0gICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1fcGNUb0NvZGVPcmlnaW5NYXAg
PSBXVEZNb3ZlKG1hcCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2Nr
OjpmaW5kUEModm9pZCogcGMpCiB7CisgICAgaWYgKGF1dG8qIHBjVG9Db2RlT3JpZ2luTWFwID0g
bV9qaXRDb2RlLT5wY1RvQ29kZU9yaWdpbk1hcCgpKSB7CisgICAgICAgIGlmIChzdGQ6Om9wdGlv
bmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBwY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBj
KSkKKyAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAgIH0KKwogICAgIHsKICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBpZiAoYXV0byog
aml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICAgICAgaWYgKGppdERhdGEtPm1f
cGNUb0NvZGVPcmlnaW5NYXApIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxD
b2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gaml0RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcC0+Zmlu
ZFBDKHBjKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47Ci0gICAgICAg
ICAgICB9Ci0KICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDog
aml0RGF0YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNv
bnRhaW5zUEMocGMpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxD
b2RlT3JpZ2luPihzdHViSW5mby0+Y29kZU9yaWdpbik7CkBAIC0zNTIxLDI4ICszNTc5LDE0IEBA
IHN0ZDo6b3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0
ZWNvZGVJbmRleDsKIH0KIAotaW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQz
Ml90IHRocmVzaG9sZCkKLXsKLSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9w
dGltaXplKCkpIHsKLSAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICBy
ZXR1cm4gdGhyZXNob2xkOwotICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1
cm4gdGhyZXNob2xkICogNDsKLSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1
cm4gdGhyZXNob2xkIC8gMjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIHRocmVzaG9sZDsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkK
K3ZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIu
c2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRB
ZnRlcldhcm1VcCgpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdU
aHJlc2hvbGQodW5saW5rZWRDb2RlQmxvY2soKS0+dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOwogfQogCi12b2lkIENvZGVCbG9jazo6aml0U29v
bigpCit2b2lkIENvZGVCbG9jazo6aml0TmV4dEludm9jYXRpb24oKQogewotICAgIG1fbGxpbnRF
eGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+
c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwogfQogCiBib29sIENvZGVCbG9jazo6aGFzSW5zdGFs
bGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdApAQCAtMzU4OCwyOCArMzYzMiw4IEBAIHZvaWQg
Q29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRvdWJsZSBudW1TdWJzID0gMC4wOwog
ICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKLSAgICBhdXRvIGNvdW50SUNzID0gWyZd
IChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IGNv
ZGVCbG9jay0+bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKEpJVEFkZElDKiBh
ZGRJQyA6IGppdERhdGEtPm1fYWRkSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtQWRkcysrOwot
ICAgICAgICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29kZVNpemUoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMgOiBqaXREYXRhLT5t
X211bElDcykgewotICAgICAgICAgICAgICAgIG51bU11bHMrKzsKLSAgICAgICAgICAgICAgICB0
b3RhbE11bFNpemUgKz0gbXVsSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lDIDogaml0RGF0YS0+bV9uZWdJQ3MpIHsKLSAgICAg
ICAgICAgICAgICBudW1OZWdzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxOZWdTaXplICs9IG5l
Z0lDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJVFN1
YklDKiBzdWJJQyA6IGppdERhdGEtPm1fc3ViSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtU3Vi
cysrOwotICAgICAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJQy0+Y29kZVNpemUoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVC
bG9jayopIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmUtaW1wbGVtZW50IHRoaXMg
dXNpbmcgSklUQ29kZS4KICAgICB9OwogICAgIGhlYXAoKS0+Zm9yRWFjaENvZGVCbG9jayhjb3Vu
dElDcyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCBjbGFzcyBKU01vZHVs
ZUVudmlyb25tZW50OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTExJbnRQ
cm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OwogY2xhc3MgTWV0YWRhdGFU
YWJsZTsKLWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExp
c3Q7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAog
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEp
OwogCkBAIC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFk
YXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNp
Z25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citw
cml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7Citw
dWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBA
IHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJz
OyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2ln
bmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29k
ZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9j
ayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoK
ICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9v
bCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25D
ZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBg
cmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChy
ZWcuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXND
ZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJ
TkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewog
ICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJz
KTsKQEAgLTI2OCwyMyArMjU5LDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUKQogICAgIHN0
cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwor
ICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJh
ZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAgICAgIEJhZzxKSVRBZGRJQz4g
bV9hZGRJQ3M7Ci0gICAgICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Ci0gICAgICAgIEJhZzxK
SVROZWdJQz4gbV9uZWdJQ3M7Ci0gICAgICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7CiAgICAg
ICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxM
aW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5m
bz4+IG1faW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3Jw
aGljQ2FsbE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4g
bV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1
bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdK
dW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29s
IG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2pp
dENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29s
OworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAg
IH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGlu
ZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkp
CkBAIC0yOTMsMjIgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgSklURGF0YSYgZW5zdXJl
SklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAKLSAgICBKSVRBZGRJQyog
YWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11
bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFy
eUFyaXRoUHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQotCi0g
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1
ZT46OnR5cGU+Ci0gICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHBy
b2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAg
ICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVy
biBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2Vu
ZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUU3ViSUMqIGFk
ZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklD
KHByb2ZpbGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdERhdGEpOyB9CiAKICAgICBTdHJ1
Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSwgQ29kZU9yaWdpbik7CiAKQEAg
LTMyMiwxOCArMjk2LDggQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJ
bmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlu
a0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAg
ICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAg
IHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBl
bnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsK
LSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0gICAgewotICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1
cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBjb25zdCBKSVRDb2Rl
TWFwJiBqaXRDb2RlTWFwKCk7CiAKLSAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6
dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpvcHRpb25hbDxDb2Rl
T3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwogCiAgICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0
ZXJzKFJlZ2lzdGVyU2V0KTsKQEAgLTQ3Miw2ICs0MzYsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJp
bmcgbmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9CiAgICAgdW5zaWduZWQg
bnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
YXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9u
dW1QYXJhbWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNlSklUKCkpOwpAQCAtNTY5LDggKzUzNCwxMCBA
QCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0
YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAg
ICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCld
LmdldCgpOyB9CisgICAgYm9vbCBpc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZp
cnR1YWxSZWdpc3RlcikgY29uc3Q7CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uKHJlZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKGluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNW
ZWN0b3JCdWZmZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0
YW50UmVnaXN0ZXJzKSArIGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5
T2Zmc2V0KCk7IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBp
bmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBu
dW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9
CkBAIC01OTUsMjIgKzU2MiwyMiBAQCBwdWJsaWM6CiAgICAgLy8gSnVtcCBUYWJsZXMKIAogI2lm
IEVOQUJMRShKSVQpCi0gICAgU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpCisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShp
bnQgdGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRj
aEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFu
dFBvb2woKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAg
ICAgcmV0dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wu
ZGF0YSgpOwogICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNo
SnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIHVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3Vu
bGlua2VkQ29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIAotI2lm
IEVOQUJMRShKSVQpCi0gICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUo
aW50IHRhYmxlSW5kZXgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEp
OwotICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07Ci0gICAgfQorI2lmIEVOQUJMRShERkdfSklUKQorICAgIFN0cmluZ0p1bXBUYWJs
ZSYgZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVK
dW1wVGFibGUmIGRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CiAjZW5kaWYKKwog
ICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIApAQCAt
NjMyLDIxICs1OTksMjAgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xk
UmVhY2hlZCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNo
ZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOworICAgICAgICByZXR1cm4gbV9sbGlu
dEV4ZWN1dGVDb3VudGVyLT5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKICAg
ICB9CiAKICAgICB2b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCiAgICAgewotICAgICAgICBtX2xs
aW50RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICAgICAgbV9sbGludEV4
ZWN1dGVDb3VudGVyLT5kZWZlckluZGVmaW5pdGVseSgpOwogICAgIH0KIAotICAgIGludDMyX3Qg
dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2Fy
bVVwKCk7CiAgICAgdm9pZCBqaXRTb29uKCk7CisgICAgdm9pZCBqaXROZXh0SW52b2NhdGlvbigp
OwogCiAgICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3Vu
dGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7
CisgICAgICAgIHJldHVybiAqbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIH0KIAogICAgIHR5
cGVkZWYgSGFzaE1hcDxzdGQ6OnR1cGxlPFN0cnVjdHVyZUlELCB1bnNpZ25lZD4sIEZpeGVkVmVj
dG9yPExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVj
dHVyZVdhdGNocG9pbnRNYXA7CkBAIC03OTcsNiArNzYzLDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3Rz
OyB9CiAgICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1
Z2dlclJlcXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVx
dWVzdHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVx
dWVzdHMpOyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2lu
dHMpOwogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykK
QEAgLTgzOCw2ICs4MDUsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2Nr
IG1fbG9jazsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJp
dGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBF
TkFCTEUoSklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBE
Rkc6OkNhcGFiaWxpdHlMZXZlbApAQCAtODQ3LDggKzgxNSw2IEBAIHB1YmxpYzoKICAgICBib29s
IG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1faGFzQmVlbkNvbXBpbGVk
V2l0aEZUTCA6IDE7CiAKLSAgICBib29sIG1faGFzTGlua2VkT1NSRXhpdCA6IDE7Ci0gICAgYm9v
bCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA6IDE7CiAgICAgYm9vbCBtX3Zpc2l0Q2hp
bGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAgLy8gSW50ZXJuYWwgbWV0
aG9kcyBmb3IgdXNlIGJ5IHZhbGlkYXRpb24gY29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBp
dCB3YXNuJ3QKQEAgLTkwNywxNiArODczLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3Ry
dWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBt
X2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpOyB9CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdp
YmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKLSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRp
bnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0g
ICAgICAgIHJldHVybiAhbV91bmxpbmtlZENvZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAg
fQorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5l
Q2FjaGVzKCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJ
bmxpbmVDYWNoZXMoKTsKKyAgICB2b2lkIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5k
aWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMo
KTsKQEAgLTEwMTAsNyArOTcyLDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50
TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9q
aXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJ
VERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2
ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jawpAQCAtMTAyOSw3ICs5OTMsNyBAQCBwcml2YXRl
OgogCiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAg
ICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJh
c2VsaW5lRXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9
OwogCiAgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAg
ICAgdWludDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRl
ICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5s
aW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkg
KzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlm
IChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0
YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9w
cm9maWxlLCBmYWxzZSk7IH0pOwotCiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVF
X1BST0ZJTEUoVklTSVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZv
ckVhY2g8T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1
Nyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAg
ICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAg
ICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwz
OCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQog
CisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZU19JTkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJs
b2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9q
aXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFwOworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1
bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+
bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmlu
Z0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQg
dGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2Rl
LmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlm
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBD
b2RlQmxvY2s6OmRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NF
UlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PERGRzo6SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6
ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChq
aXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZH
OjpKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFi
bGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7
CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQog
ICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25D
b3VudGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5
LDcgQEAgYm9vbCBFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNv
ZGVCbG9jayA/IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQp
OworICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAg
ICBtX2NvdW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25D
b3VudGVyLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAg
cHVibGljOgogICAgIHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3Ug
dXNlIHRoaXMsIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVy
biBmYWxzZS4KICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9j
ayopOwogICAgIGJvb2wgaGFzQ3Jvc3NlZFRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291
bnRlciA+PSAwOyB9Ci0gICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQs
IENvZGVCbG9jayopOworICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xk
LCBDb2RlQmxvY2sqID0gbnVsbHB0cik7CiAgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwog
ICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90
b3RhbENvdW50KSArIG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwpAQCAtODYsMTMgKzg2LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVCB0aHJlc2hvbGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVz
aG9sZChUIHRocmVzaG9sZCkKICAgICB7Ci0gICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwot
ICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNr
cG9pbnRzKCkgJiYgZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xv
YmFsT2JqZWN0LT53ZWFrUmFuZG9tSW50ZWdlcigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0Jl
dHdlZW5DaGVja3BvaW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hv
bGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAg
IGludDMyX3QgbWF4VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVj
a3BvaW50cygpOwogICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAg
ICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xk
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0
YWRhdGEuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0
cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0
QnlJZE1vZGVNZXRhZGF0YVVuc2V0KSA9PSAxMik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFk
YXRhQXJyYXlMZW5ndGggeworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2Zp
bGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVu
Z3RoLCBhcnJheVByb2ZpbGUpOyB9CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07
CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09
IDEyKTsKQEAgLTg4LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAg
ICAgIEdldEJ5SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENh
Y2hpbmc7IC8vIFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgog
ICAgIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9k
ZU1ldGFkYXRhRGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5z
ZXQgdW5zZXRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxl
bmd0aE1vZGU7CkBAIC0xMTcsNiArMTE5LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGEg
ewogICAgICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhUHJvdG9Mb2FkIHByb3RvTG9hZE1vZGU7CiAg
ICAgfTsKICAgICBHZXRCeUlkTW9kZSBtb2RlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1v
ZGUpOyB9CiAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsKIH07CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNw
cAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIEdldEJ5U3Rh
dHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgcmV0dXJuIEdldEJ5U3Rh
dHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAgICAKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJ
ZFNlbGY6IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZt
KCkpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQ
cm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0
ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBA
IHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEcKIAogICAgIC8vIExldCdz
IHN0b3JlIHRoZSByZXVzZWQgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4gQWZ0ZXIgdGhhdCwgd2Ug
Y2FuIHVzZSBhbGxvY2F0ZWQgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgYWxsb2NhdG9y
LnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOworICAgICAgICBhbGxvY2F0
b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CiAKICAgICBpZiAoR2V0
dGVyU2V0dGVyQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2co
ImJhc2VHUFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsKQEAgLTIyNSwxMiArMjI1LDkgQEAgdm9pZCBH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogICAgICAgICByZWdpc3RlcnNUb1Nw
aWxsRm9yQ0NhbGwuc2V0KHJlZyk7CiAgICAgZm9yIChGUFJSZWcgcmVnIDogZnBTY3JhdGNoKQog
ICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CisgICAgaWYgKGppdC5j
b2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2Fs
bC5zZXQoc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CiAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckND
YWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckNDYWxsKCkpOwot
I2lmIENQVShBUk02NCkKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2so
KTsKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgcmVnaXN0ZXJzVG9T
cGlsbEZvckNDYWxsLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCiAKICAgICBBY2Nl
c3NDYXNlU25pcHBldFBhcmFtcyBwYXJhbXMoc3RhdGUubV92bSwgV1RGTW92ZShyZWdzKSwgV1RG
TW92ZShncFNjcmF0Y2gpLCBXVEZNb3ZlKGZwU2NyYXRjaCkpOwogICAgIHNuaXBwZXQtPmdlbmVy
YXRvcigpLT5ydW4oaml0LCBwYXJhbXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzksNyArMTM5LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgog
ICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpJbkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1
YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSk7
CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3Bl
cnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZp
ZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsMTYg
QEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNz
KFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0
eUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlm
ICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBk
eW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcg
ZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKICAgICAKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0y
MzMsMjMgKzIzOCwzMSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3Rl
CiAgICAgcmV0dXJuIGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJl
ZzsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFj
ZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jv
b2wgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZv
KTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYg
KCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9m
ZnNldCkpOworICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJs
b2NrLCBzdHViSW5mbywgb2Zmc2V0KSk7CisKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3Ry
dWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQogCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIApAQCAtMjc5LDIyICsyOTIsMjUgQEAg
Ym9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UgogICAgIHJldHVybiBsaW5r
ZWRDb2RlSW5saW5lOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxl
bmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJ
bmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgQVNT
RVJUKGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogCiAgICAgaWYgKCFzdHViSW5m
by5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlm
IChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWhhc0FueUFycmF5U3RvcmFnZShhcnJh
eS0+aW5kZXhpbmdUeXBlKCkpICYmIGFycmF5LT5pbmRleGluZ1R5cGUoKSAhPSBBcnJheUNsYXNz
OwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgQVNTRVJUKGlzQ2FjaGVhYmxlQXJy
YXlMZW5ndGgoc3R1YkluZm8sIGFycmF5KSk7CisgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ss
IGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywgYXJyYXkpKTsKIAog
ICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0zMTksMTcgKzMzNSwyMCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVB
cnJheUxlbmd0aChTCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLWJvb2wgSW5s
aW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCitib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICBpZiAo
IXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJ
bmZvKTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmlu
Z0xlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
KQogewotICAgIEFTU0VSVChpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChzdHViSW5mbykpOworICAg
IEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxv
Y2ssIHN0dWJJbmZvKSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmll
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzYzLDEzICszODIsMTggQEAgYm9vbCBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKAogfQogCiAKLWJvb2wgSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNz
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIXN0
dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisg
ICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gVGhlc2UgZHluYW1p
YyBzbG90cyBnZXQgZmlsbGVkIGluIGJ5IFN0cnVjdHVyZVN0dWJJbmZvLiBOb3RoaW5nIGVsc2Ug
dG8gZG8uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIEdQUlJlZyBiYXNlID0g
c3R1YkluZm8uYmFzZUdQUjsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVl
UmVncygpOwogCkBAIC00MDYsMTMgKzQzMCwxMyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjCiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAg
ICAgLy8gSWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9w
IHNsZWQgKGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFu
IGluZGlyZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcg
bV9jb2RlUHRyLgotICAgICAgICBpZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7
CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJ
VCAmJiBzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElm
IG1fY29kZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24s
IHRoaXMgbWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAg
ICAgICAgICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNo
aW5nIGNvZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBj
b2RlLgogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVz
cygpID09IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygp
KSB7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1Yklu
Zm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQo
Q0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnN0dWJJbmZvKSwgc3R1
YkluZm8ubV9zdHViSW5mb0dQUik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKENDYWxs
SGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHVi
Um91dGluZVB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1w
KCk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gc3R1YkluZm8uZG9u
ZUxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKQEAgLTQyMSw3ICs0NDUsOSBAQCB2b2lkIElubGluZUFjY2Vz
czo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nl
c3M6IGxpbmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAg
ICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CisgICAgICAgIHN0dWJJbmZvLm1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2Vz
cyBjb2RlLgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzQsOCArNDYwLDE0IEBAIHZv
aWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICB9KSwgIklubGluZUFj
Y2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpy
ZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCit2b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKKyAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSAmJiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCkgeworICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSBzdHViSW5mby5z
bG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLgorICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIo
c3R1YkluZm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRh
PHZvaWQoQ0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIGEgbm9wIHNsZWQgaGVyZSBiZWNhdXNlIG5vYm9keSBzaG91bGQgYmUg
anVtcGluZyBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCiAgICAgICAgIGF1dG8ganVtcCA9IGpp
dC5qdW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUFjY2Vzcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDE0ICs5OSwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBzdGQ6Om1heChzaXplLCBzaXplRm9yUHJvcGVydHlBY2Nl
c3MoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nl
c3MoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAg
c3RhdGljIGJvb2wgY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJ
bmZvJiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0
KTsKLSAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJ
bmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3Ro
KFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0
aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0
ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRp
YyBib29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3Rh
dGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJl
U3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wg
Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFBy
b3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29s
IGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7
CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJbkFj
Y2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOworICAgIHN0
YXRpYyBib29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJik7CiAKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2lu
Z0lubGluZUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlv
bkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CiAgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1
YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25N
b2RlTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBPVkVSTE9BRF9C
SVRXSVNFX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJdGVyYXRpb25Nb2RlTWV0
YWRhdGEgewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSXRlcmF0aW9u
TW9kZU1ldGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRl
Y2x0eXBlKHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRpb25Nb2RlKSk7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0lu
Zm8uaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0xMSW50Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKExMSW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KIAogcHJpdmF0ZToKICAg
ICB1aW50cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgeyB1bmxpbmtl
ZEJpdCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDE3IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgYml0V2lkdGhGb3JNYXgKICAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAogICAgIG1h
Y3JvKE9wSXRlcmF0b3JOZXh0KSBcCiAKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQklO
QVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKKyAgICBtYWNybyhPcEFkZCkgXAorICAgIG1hY3Jv
KE9wTXVsKSBcCisgICAgbWFjcm8oT3BEaXYpIFwKKyAgICBtYWNybyhPcFN1YikgXAorCisjZGVm
aW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKKyAg
ICBtYWNybyhPcEluYykgXAorICAgIG1hY3JvKE9wRGVjKSBcCisgICAgbWFjcm8oT3BOZWdhdGUp
IFwKKwogCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInR5cGUtbGltaXRzIikKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZv
aWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpzdWNjZWVkKCkKIHsKICAgICByZXN0b3JlU2NyYXRj
aCgpOwogICAgIGlmIChqaXQtPmNvZGVCbG9jaygpLT51c2VEYXRhSUMoKSkKLSAgICAgICAgaml0
LT5yZXQoKTsKKyAgICAgICAgaml0LT5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mRG9uZUxvY2F0
aW9uKCkpLCBKU0ludGVybmFsUHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIHN1Y2Nlc3MuYXBw
ZW5kKGppdC0+anVtcCgpKTsKIH0KQEAgLTExMCw2ICsxMTAsOCBAQCBjb25zdCBSZWdpc3RlclNl
dCYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRD
b2RlOjppc09wdGltaXppbmdKSVQoaml0LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7CiAKICAg
ICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1fbGl2ZVJlZ2lzdGVy
c1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9jYXRvci0+dXNlZFJl
Z2lzdGVycygpKTsKKyAgICAgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQor
ICAgICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5hZGQoc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIpOwogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGw7
CkBAIC0xMjgsMTEgKzEzMCwxMiBAQCBhdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2Vy
dmVMaXZlCiAgICAgfTsKIH0KIAotYXV0byBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZl
TGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29uc3QgUmVnaXN0
ZXJTZXQmIGV4dHJhKSAtPiBTcGlsbFN0YXRlCithdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6
cHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucygpIC0+
IFNwaWxsU3RhdGUKIHsKICAgICBSZWdpc3RlclNldCBsaXZlUmVnaXN0ZXJzID0gYWxsb2NhdG9y
LT51c2VkUmVnaXN0ZXJzKCk7CisgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygp
KQorICAgICAgICBsaXZlUmVnaXN0ZXJzLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7CiAg
ICAgbGl2ZVJlZ2lzdGVycy5leGNsdWRlKGNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgbGl2
ZVJlZ2lzdGVycy5tZXJnZShleHRyYSk7CiAKICAgICBjb25zdGV4cHIgdW5zaWduZWQgZXh0cmFT
dGFja1BhZGRpbmcgPSAwOwogICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JS
ZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVS
ZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqaml0LCBsaXZlUmVnaXN0ZXJzLCBleHRyYVN0YWNrUGFk
ZGluZyk7CkBAIC01OTYsMTYgKzU5OSwxMSBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHlt
b3JwaGljQWNjZXNzCiAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAgIHN0YXRl
LmppdCA9ICZqaXQ7CiAKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewotICAgICAg
ICBpZiAoc3RhdGUubV9kb2VzSlNHZXR0ZXJTZXR0ZXJDYWxscykgewotICAgICAgICAgICAgLy8g
V2UgaGF2ZSBubyBndWFyYW50ZWUgdGhhdCBzdGFjay1wb2ludGVyIGlzIHRoZSBleHBlY3RlZCBv
bmUuIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBpZiB3ZSBkbyBub3QgaGF2ZSBKUyBnZXR0ZXIgLyBz
ZXR0ZXIgY2FsbHMgc2luY2Ugc3RhY2stcG9pbnRlciBpcwotICAgICAgICAgICAgLy8gYSBjYWxs
ZWUtc2F2ZSByZWdpc3RlciBpbiB0aGUgQyBjYWxsaW5nIGNvbnZlbnNpb24uIEhvd2V2ZXIsIG91
ciBKUyBleGVjdXRhYmxlIGNhbGwgZG9lcyBub3Qgc2F2ZSBzdGFjay1wb2ludGVyLiBTbyB3ZSBh
cmUgYWRqdXN0aW5nIHN0YWNrLXBvaW50ZXIgYWZ0ZXIKLSAgICAgICAgICAgIC8vIEpTIGdldHRl
ciAvIHNldHRlciBjYWxscy4gQnV0IHRoaXMgY291bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlIGlu
aXRpYWwgc3RhY2stcG9pbnRlciwgYW5kIG1ha2VzIFBBQyB0YWdnaW5nIGJyb2tlbi4KLSAgICAg
ICAgICAgIC8vIFRvIGVuc3VyZSBQQUMtdGFnZ2luZyB3b3JrLCB3ZSBmaXJzdCBhZGp1c3Qgc3Rh
Y2stcG9pbnRlciB0byB0aGUgYXBwcm9wcmlhdGUgb25lLgotICAgICAgICAgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGppdC50YWdSZXR1
cm5BZGRyZXNzKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFk
ZHJlc3MoKTsKKyAgICBpZiAoIWNhbkJlU2hhcmVkICYmIEFTU0VSVF9FTkFCTEVEKSB7CisgICAg
ICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFj
a1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgYXV0byBvayA9IGppdC5i
cmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgaml0LmJyZWFrcG9pbnQo
KTsKKyAgICAgICAgb2subGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0ZS5wcmVzZXJ2ZWRS
ZXVzZWRSZWdpc3RlclN0YXRlID0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewog
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjYWxjdWxhdGVMaXZlUmVnaXN0ZXJzRm9yQ2FsbEFuZEV4
Y2VwdGlvbkhhbmRsaW5nKCk7CiAKICAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7Ci0gICAgU3Bp
bGxTdGF0ZSBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRp
b25zKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7CisgICAgU3BpbGxTdGF0ZSBwcmVz
ZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAg
ICB2b2lkIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNl
cHRpb24oY29uc3QgU3BpbGxTdGF0ZSYpOwogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNG
cm9tU3RhY2tGb3JDYWxsKGNvbnN0IFNwaWxsU3RhdGUmLCBjb25zdCBSZWdpc3RlclNldCYgZG9u
dFJlc3RvcmUgPSB7IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTAg
KzE4MCwxMCBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVy
KCk7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh1aWQpOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1
YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7Cisg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICBy
ZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0dWJJbmZv
LT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAg
ICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0cnVj
dHVyZSwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTY1LDkg
KzY2LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKAogICAgIEFT
U0VSVChoYXNDb25zdGFudElkZW50aWZpZXIpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENh
Y2hlVHlwZTo6R2V0QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0g
ICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
ID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCku
aGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9m
ZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVT
dHViSW5mbzo6aW5pdEFycmF5TGVuZ3RoKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxv
Y2tlcikKQEAgLTg3LDkgKzg4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5
SWRSZXBsYQogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KTsKICAg
ICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlKTsKICAgICBt
X2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAg
IG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUt
PmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7
Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBv
ZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGNvbnN0
IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC05Nyw5ICs5OCw5IEBAIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGMKICAgICBBU1NFUlQobV9jYWNoZVR5
cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVU
eXBlOjpJbkJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAu
d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7
CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OmRlcmVmKCkKQEAgLTIzNiw3ICsyMzcsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0
cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgIC8vIHdlJ3JlIGJ1ZmZlcmVkIGlzIGJlY2F1c2Ugd2Ug
cmVseSBvbiBpdCB0byByZXNldCBkdXJpbmcgR0MgaWYgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlCiAgICAgICAgIC8vIGlzIGNvbGxlY3RlZC4KICAgICAgICAgbV9pZGVudGlmaWVyID0gbnVs
bHB0cjsKLSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7CisgICAg
ICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAgICAgICAgIAogICAgICAgICAv
LyBJZiB3ZSBnZW5lcmF0ZWQgc29tZSBjb2RlIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBhdHRlbXB0
IHRvIHJlcGF0Y2ggaW4gdGhlIGZ1dHVyZSB1bnRpbCB3ZQogICAgICAgICAvLyBnYXRoZXIgZW5v
dWdoIGNhc2VzLgpAQCAtMjUxLDcgKzI1Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJl
c2V0KGNvbnN0IENvbmMKIHsKICAgICBjbGVhckJ1ZmZlcmVkU3RydWN0dXJlcygpOwogICAgIG1f
aWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNs
ZWFyKCk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKIAogICAgIGlmICht
X2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CkBAIC0yODUs
NiArMjg2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAg
ICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0
aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NU
eXBlOjpJbkJ5SWQ6CkBAIC0zNjAsOCArMzYyLDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRXZWFrUmVmZXJlbgogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0gICAg
aWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgaXNWYWxpZCAmPSB2bS5o
ZWFwLmlzTWFya2VkKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgaWYg
KFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpCisg
ICAgICAgIGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpOwogICAgIGlmICht
X2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIGlzVmFsaWQgJj0gdS5zdHVi
LT52aXNpdFdlYWsodm0pOwogCkBAIC0zNzUsOCArMzc3LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImIHZpc2l0b3Ip
CiB7Ci0gICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgbV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZpc2l0b3Iudm0o
KSkpCisgICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAKICAgICBpZiAo
bV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICB1LnN0dWItPnByb3BhZ2F0
ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwpAQCAtNDMwLDYgKzQzMiwyMDkgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVU
eXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYg
dW5saW5rZWRTdHViSW5mbykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGFjY2Vzc1R5cGUg
PSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJ
bmZvLnN0YXJ0OworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0
aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1Bh
dGhTdGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNldCgpKSk7CisgICAg
Y29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsK
KyAgICBtX2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICB1c2VkUmVnaXN0
ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIGlmIChh
Y2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5ieXRl
Y29kZUluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwg
d2UgY2FuJ3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVyUmVnaXN0ZXIiIHJlZ2lzdGVyIGVpdGhl
ci4KKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpk
b250Q2xvYmJlclJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0
YW5jZU9mOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0
aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OlRyeUdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5
SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlk
RGlyZWN0OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdp
dGhUaGlzOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRo
aXNPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2
YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVO
YW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZUJyYW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0
UHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2
YXRlTmFtZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1
dEJ5SWQ6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAg
ICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1
YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGly
ZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3Qo
KSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZp
ZWxkRGVmaW5lOgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJ
ZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9w
dGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0
dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAg
ICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAg
ICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0
dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxk
UHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVu
dGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAg
ICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAg
cmVncy5wcm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVlR1BSID0gQmFz
ZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBC
YXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0
ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5w
cm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAg
ICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAg
bV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBwcm90b3R5cGVJc0tub3duT2Jq
ZWN0ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnZhbHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVy
czo6cmVzdWx0OworICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBoYXNDb25zdGFu
dElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkluQnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAg
ICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2Vs
aW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5C
eUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUlu
QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZp
ZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAg
ICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1
ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIGhhc0Nv
bnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnRoaXNHUFIgPSBC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBtX3N0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhh
c0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFs
aWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsK
KyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVu
dGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlw
ZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRl
QnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICB2
YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJh
c2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odW5saW5rZWRTdHViSW5mbyk7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpJ
VFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJP
cHRpb25zLmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0Lmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCkBAIC01
Niw2ICs1Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlW
YWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAg
ICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzgw
LDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAog
fTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVy
ZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDIsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBp
bml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAK
ICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRl
YWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTMyNSwxMyArMzMxLDE5
IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CisgICAg
UHJvcGVydHlPZmZzZXQgYnlJZFNlbGZPZmZzZXQ7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkJ5SWRTZWxmT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0
dWJJbmZvLCBieUlkU2VsZk9mZnNldCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
SW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1
Y3R1cmVTdHViSW5mbywgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsgfQogICAgIHVuaW9u
IHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsK
LSAgICAgICAgfSBieUlkU2VsZjsKICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAg
ICAgfSB1OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoVk0mIHZt
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZSht
X2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIH0KKyAgICBTdHJ1Y3R1cmVJRCBtX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAwIH07CiBwcml2YXRlOgogICAgIENhY2hlYWJsZUlk
ZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIC8vIFJlcHJlc2VudHMgdGhvc2Ugc3RydWN0dXJl
cyB0aGF0IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nlc3NDYXNlcyBpbiB0aGUgUG9seW1vcnBo
aWNBY2Nlc3MuCkBAIC0zNTIsNiArMzY0LDcgQEAgcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2RlUHRyOwogCiAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkNvZGVQdHIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0
dXJlU3R1YkluZm8sIG1fY29kZVB0cik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
RG9uZUxvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZv
LCBkb25lTG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRo
U3RhcnRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5m
bywgc2xvd1BhdGhTdGFydExvY2F0aW9uKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJ
bmZvLCBtX3Nsb3dPcGVyYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNv
dW50ZG93bigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgY291
bnRkb3duKTsgfQpAQCAtNDQ3LDYgKzQ2MCwxNyBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdl
bmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsK
KyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmll
bGRQdXRLaW5kOjpub25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpz
bG9wcHkoKSB9OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9j
YXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVy
IHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2Nh
dGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsK
K307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJT
dGF0ZSgpCiAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsK
ICAgICBpZiAocGVyY2VudGFnZSAhPSBwZXJjZW50YWdlKQogICAgICAgICBwZXJjZW50YWdlID0g
MC4wOwotICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFn
OiAiLCBwZXJjZW50YWdlLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5k
IHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIiVcbiIpOwogfQogCiB2b2lkIGVu
YWJsZVN1cGVyU2FtcGxlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2Nr
LmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRl
ICJDbGFzc0luZm8uaCIKQEAgLTc4LDYgKzc5LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlu
a2VkQ29kZUJsb2NrKFZNJgogICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tl
cik7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAg
fQorCisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRG
b3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpAQCAtMzE2LDYgKzMxOSw0OCBAQCBpbnQgVW5saW5rZWRD
b2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzCiAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRh
cmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECitib29s
IFVubGlua2VkQ29kZUJsb2NrOjpoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
Cit7CisgICAgaWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSA+IDEwMCkgeworICAgICAgICBpZiAo
bnVtYmVyT2ZJZGVudGlmaWVycygpICE9IG1fY2FjaGVkSWRlbnRpZmllclVpZHMuc2l6ZSgpKSB7
CisgICAgICAgICAgICBMb2NrZXIgbG9ja2VyKG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrKTsK
KyAgICAgICAgICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBjYWNoZWRJZGVudGlmaWVy
VWlkczsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50
aWZpZXJzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIgPSB0aGlzLT5pZGVudGlmaWVyKGkpOworICAgICAgICAgICAgICAgIGNhY2hlZElkZW50
aWZpZXJVaWRzLmFkZChpZGVudGlmaWVyLmltcGwoKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAgICBtX2NhY2hlZElkZW50
aWZpZXJVaWRzID0gV1RGTW92ZShjYWNoZWRJZGVudGlmaWVyVWlkcyk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5jb250YWlucyh1aWQpOworICAg
IH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7
ICsraSkgeworICAgICAgICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgor
CitpbnQzMl90IFVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJl
c2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRPcHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0
ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIFRy
aVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBU
cmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwogdm9p
ZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcygpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIW1fbWV0YWRhdGEtPmlzRmluYWxpemVkKCkpOwpAQCAtMzM3LDE1ICszODIs
MjUgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcgogICAgIGlmICht
X21ldGFkYXRhLT5oYXNNZXRhZGF0YSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJy
YXlQcm9maWxlcyA9IDA7CiAKLSNkZWZpbmUgQ09VTlQoX19vcCkgXAotICAgICAgICBudW1iZXJP
ZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOworI2RlZmlu
ZSBDT1VOVChfX29wKSBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50
cmllczxfX29wPigpOwogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxF
KENPVU5UKQogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5G
TyhDT1VOVCkKICN1bmRlZiBDT1VOVAogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0g
bV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICAgICAgbnVtYmVy
T2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BHZXRCeUlkPigpOwot
CiAgICAgICAgIG1fYXJyYXlQcm9maWxlcyA9IEZpeGVkVmVjdG9yPFVubGlua2VkQXJyYXlQcm9m
aWxlPihudW1iZXJPZkFycmF5UHJvZmlsZXMpOworCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9m
QmluYXJ5QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQmlu
YXJ5QXJpdGhQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CisgICAg
ICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKENPVU5UKQorI3Vu
ZGVmIENPVU5UCisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcyA9IEZpeGVkVmVjdG9yPEJp
bmFyeUFyaXRoUHJvZmlsZT4obnVtYmVyT2ZCaW5hcnlBcml0aFByb2ZpbGVzKTsKKworICAgICAg
ICB1bnNpZ25lZCBudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5U
KF9fb3ApIG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJp
ZXM8X19vcD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJP
RklMRShDT1VOVCkKKyN1bmRlZiBDT1VOVAorICAgICAgICBtX3VuYXJ5QXJpdGhQcm9maWxlcyA9
IEZpeGVkVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPihudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxl
cyk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDEwICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJv
ZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29u
dmVudGlvbnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9m
aWxlLmgiCisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkV4cHJlc3Np
b25SYW5nZUluZm8uaCIKICNpbmNsdWRlICJIYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIklkZW50
aWZpZXIuaCIKQEAgLTY0LDYgKzY2LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiBjbGFz
cyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEJhc2VsaW5l
SklUQ29kZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKIGVudW0gY2xhc3MgTGlua1RpbWVDb25z
dGFudCA6IGludDMyX3Q7CiAKQEAgLTE3NSw2ICsxNzgsNyBAQCBwdWJsaWM6CiAKICAgICBjb25z
dCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygp
IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyBy
ZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsg
fQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5k
ZXgoKV0uZ2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2Nv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBAIC0yMDcsNiArMjExLDE1IEBA
IHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogCiAg
ICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0OworICAgIGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIoKTsgfQorICAgIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7Cisg
ICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQo
MCkucHRyKCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
aW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rp
b24gPCBpbnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0
cnVjdGlvbnNCZWdpbjsKKyAgICB9CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25zU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLnNpemUoKTsgfQogCiAgICAgdW5zaWduZWQgbnVt
Q2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KICAgICB1
bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CkBAIC0zMzQsMTAg
KzM0NywyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRl
cygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQg
dG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFp
c0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KICAgICB2b2lkIGFsbG9jYXRlU2hhcmVkUHJvZmls
ZXMoKTsKICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSYgdW5saW5rZWRWYWx1ZVByb2ZpbGUodW5z
aWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlc1tpbmRleF07IH0KICAgICBVbmxp
bmtlZEFycmF5UHJvZmlsZSYgdW5saW5rZWRBcnJheVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsg
cmV0dXJuIG1fYXJyYXlQcm9maWxlc1tpbmRleF07IH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECisg
ICAgYm9vbCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CisjZW5kaWYKKworICAg
IGludDMyX3QgdGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKKwogcHJvdGVjdGVk
OgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0
IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwogCkBAIC0z
OTcsNiArNDIxLDkgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xleGljYWxTY29wZUZlYXR1
cmVzIDogNDsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKKyNpZiBFTkFC
TEUoSklUKQorICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1fdW5saW5rZWRCYXNlbGluZUNv
ZGU7CisjZW5kaWYKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07
CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEzLDcgKzQ0MCw2IEBAIHBy
aXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0
aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xp
dmVuZXNzOwogCi0KICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9maWxlIG1f
ZXhpdFByb2ZpbGU7CiAjZW5kaWYKQEAgLTQ1OCw2ICs0ODQsMTYgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkp
OwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiog
cGMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVj
b2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQpOworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQ
cm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQor
ICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJl
dHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25D
b3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3Vu
dGVyOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNo
TWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjUsOCArNTAxLDE2IEBA
IHByaXZhdGU6CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0
czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4ZWRW
ZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIEZpeGVkVmVjdG9y
PFVubGlua2VkVmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CiAgICAgRml4ZWRWZWN0b3I8
VW5saW5rZWRBcnJheVByb2ZpbGU+IG1fYXJyYXlQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxC
aW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBGaXhlZFZlY3Rv
cjxVbmFyeUFyaXRoUHJvZmlsZT4gbV91bmFyeUFyaXRoUHJvZmlsZXM7CisKKyNpZiBBU1NFUlRf
RU5BQkxFRAorICAgIExvY2sgbV9jYWNoZWRJZGVudGlmaWVyVWlkc0xvY2s7CisgICAgSGFzaFNl
dDxVbmlxdWVkU3RyaW5nSW1wbCo+IG1fY2FjaGVkSWRlbnRpZmllclVpZHM7CisjZW5kaWYKIAog
cHJvdGVjdGVkOgogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5o
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDE1IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxl
KTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJf
dCBvZmZzZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9m
ZnNldCA9IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9m
ZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgYmFzZVR5cGVPZmZzZXQg
PSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdub2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSks
IGJhc2VUeXBlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9m
KHR5cGVuYW1lIE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9
CisKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAgdW5zaWduZWQgbnVtRW50
cmllcygpOwogCkBAIC0xMDcsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNf
b2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQz
Ml90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsMTMgKzQ1LDExIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKIAog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZC
dWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNw
ZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJ
bmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNw
ZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKICAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQot
ICAgICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Cisg
ICAgICAgIGNsZWFyQnVja2V0cygpOwogICAgIH0KICAgICAKICAgICBFbmNvZGVkSlNWYWx1ZSog
c3BlY0ZhaWxCdWNrZXQodW5zaWduZWQgaSkKQEAgLTU5LDYgKzU3LDEyIEBAIHN0cnVjdCBWYWx1
ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgQVNTRVJUKG51bWJlck9mQnVja2V0cyArIGkgPCB0b3Rh
bE51bWJlck9mQnVja2V0cyk7CiAgICAgICAgIHJldHVybiBtX2J1Y2tldHMgKyBudW1iZXJPZkJ1
Y2tldHMgKyBpOwogICAgIH0KKworICAgIHZvaWQgY2xlYXJCdWNrZXRzKCkKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQor
ICAgICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Cisg
ICAgfQogICAgIAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tl
dCkgY29uc3QKICAgICB7CkBAIC0xMjMsOCArMTI3LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJh
c2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rp
b24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJl
YWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVk
VHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVj
a2V0czsgKytpKSB7CkBAIC0xMzksNyArMTQxLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ug
ewogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisK
ICAgICBFbmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAg
ICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE2MSw2ICsx
NjMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVj
dCBWYWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0
czwwPiB7CiAgICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZC
dWNrZXRzPDA+KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsg
fQogfTsKIAogc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBW
YWx1ZVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oIgpAQCAtMzQsNyArMzUsOSBAQAogI2luY2x1ZGUgIkRGR0p1bXBS
ZXBsYWNlbWVudC5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5l
Q2FsbEZyYW1lU2V0LmgiCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSlNDYXN0
LmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckNv
bXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiUmVjb3JkZWRTdGF0dXNlcy5oIgogI2luY2x1ZGUgPHd0
Zi9CYWcuaD4KQEAgLTcwLDcgKzczLDcgQEAgc3RydWN0IFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9u
IHsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX3RvOwogfTsKICAgICAgICAgCi1jbGFzcyBD
b21tb25EYXRhIHsKK2NsYXNzIENvbW1vbkRhdGEgOiBwdWJsaWMgTWF0aElDSG9sZGVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21tb25EYXRhKTsKIHB1YmxpYzoKICAgICBDb21tb25E
YXRhKCkKQEAgLTExNiw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8Q29kZUJs
b2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PiBtX3dhdGNocG9pbnRzOwogICAgIEZpeGVkVmVjdG9y
PEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRzOwogICAgIEZpeGVkVmVjdG9yPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludD4gbV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKICAg
ICBSZWNvcmRlZFN0YXR1c2VzIHJlY29yZGVkU3RhdHVzZXM7CiAgICAgVmVjdG9yPEp1bXBSZXBs
YWNlbWVudD4gbV9qdW1wUmVwbGFjZW1lbnRzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRy
eUpJVENvZGUuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUu
aAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOwogCitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3Ry
dWN0IFN0cmluZ0p1bXBUYWJsZTsKKwogbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEpJVENvbXBp
bGVyOwpAQCAtMTAxLDYgKzEwNCw4IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVP
cmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgZmluYWw7CiAKICAgICB1c2luZyBE
aXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZkZvckRGRzsKKworICAgIFBDVG9Db2RlT3Jp
Z2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3Bj
VG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBKSVRDb21waWxlcjsgLy8gQWxsb3cgSklUQ29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCku
CkBAIC0xMTAsNiArMTE1LDggQEAgcHVibGljOgogICAgIEZpeGVkVmVjdG9yPERGRzo6T1NSRW50
cnlEYXRhPiBtX29zckVudHJ5OwogICAgIEZpeGVkVmVjdG9yPERGRzo6T1NSRXhpdD4gbV9vc3JF
eGl0OwogICAgIEZpeGVkVmVjdG9yPERGRzo6U3BlY3VsYXRpb25SZWNvdmVyeT4gbV9zcGVjdWxh
dGlvblJlY292ZXJ5OworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hK
dW1wVGFibGVzOworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzOwogICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVhbSB2YXJpYWJsZUV2ZW50
U3RyZWFtOwogICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5pZmllZERGRzsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODUsMTMgKzE4NSwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5r
KExpbmtCdWZmZXImIGxpbmtCCiAgICAgCiAgICAgbV9ncmFwaC5yZWdpc3RlckZyb3plblZhbHVl
cygpOwogCi0gICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5
KCkgfHwgIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgewotICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBp
ZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7Ci0gICAg
ICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMg
PSBXVEZNb3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKLSAgICB9CisgICAgQVNTRVJU
KG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgQVNT
RVJUKG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgaWYgKCFt
X2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIAorICAgICAgICBtX2pp
dENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMpOworICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMu
aXNFbXB0eSgpKQorICAgICAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1v
dmUobV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwogCiAgICAgZm9yIChCYWc8U3dpdGNoRGF0
YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fc3dpdGNoRGF0YS5iZWdpbigpOyAhIWl0ZXI7
ICsraXRlcikgewogICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKippdGVyOwpAQCAtMTk5LDEy
ICsxOTgsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAg
ICAgICBjYXNlIFN3aXRjaENoYXI6CiAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CiAgICAgICAg
ICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KS5pc0Vt
cHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRh
Ymxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2lt
cGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN3aXRjaEp1bXBU
YWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hU
YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAg
ICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
PEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5k
ZXhdKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0
cy5zaXplKCkgPT0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpKTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCk7
IGotLTspCkBAIC0yMTksMTIgKzIxOCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtC
dWZmZXImIGxpbmtCCiAKICAgICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6IHsKICAgICAgICAgICAg
IGlmICghZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9j
b2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlz
RW1wdHkoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgICAgICBT
dHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1
bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2Rh
dGEuc3dpdGNoVGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxU
aHJvdWdoLmJsb2NrLT5pbmRleF0pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua2Vk
VGFibGUubV9jdGlPZmZzZXRzLnNpemUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUu
c2l6ZSgpICsgMSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbGlua2VkVGFibGUu
bV9jdGlPZmZzZXRzKQpAQCAtMzMzLDcgKzMzMiw3IEBAIHZvaWQgSklUQ29tcGlsZXI6Omxpbmso
TGlua0J1ZmZlciYgbGlua0IKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29k
ZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcikpOworICAgICAgICBtX2ppdENvZGUtPmNv
bW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4o
V1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpOwogfQogCiBz
dGF0aWMgdm9pZCBlbWl0U3RhY2tPdmVyZmxvd0NoZWNrKEpJVENvbXBpbGVyJiBqaXQsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCYgc3RhY2tPdmVyZmxvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcs
NyArOTcsNiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqCiAgICAg
QVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwog
ICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7Ci0g
ICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9j
ay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIAogICAgIGlmICghT3B0
aW9uczo6dXNlT1NSRW50cnlUb0RGRygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzIsOSArNzcyLDYgQEAg
dm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIAogICAgIC8vIFRoZSB0YWcg
cmVnaXN0ZXJzIGFyZSBuZWVkZWQgdG8gbWF0ZXJpYWxpemUgcmVjb3ZlcmllcyBiZWxvdy4KICAg
ICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKIAotICAgIGlmIChleGl0
LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7Ci0KICAgICBpZiAoaW5s
aW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQpIHsKICAgICAgICAgRW5jb2RlZEpTVmFs
dWUqIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CiAgICAgICAg
IGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25NYXRlcmlhbGl6ZU9TUkV4aXRT
aWRlU3RhdGUpPigmdm0sICZleGl0LCB0bXBTY3JhdGNoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJK
SVQuaCIKQEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0s
IENDYWxsSGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2ggKGppdC5j
b2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAg
ICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVz
aG9sZChqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAg
ICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVz
aG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlwZTo6RlRM
SklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpj
bGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZh
bHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6
Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDIsMTEgKzE0
Myw4IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clQKIHsKICAgICBj
YWxsZXJJc0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGJhc2VsaW5l
Q29kZUJsb2NrRm9yQ2FsbGVyLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
azsKIAotICAgIGlmIChjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpIHsKLSAgICAgICAg
aWYgKCFjYWxsZXJJc0xMSW50KQotICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxs
ZXItPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CisgICAgaWYgKGNhbGxCeXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkKICAgICAgICAgcmV0dXJuIExMSW50OjpjaGVja3BvaW50T1NSRXhpdEZy
b21JbmxpbmVkQ2FsbFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKLSAgICB9CiAKICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganVtcFRhcmdldDsKIApAQCAtMTk4LDgg
KzE5Niw2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clQKICN1bmRl
ZiBMTElOVF9SRVRVUk5fTE9DQVRJT04KIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIGJhc2VsaW5l
Q29kZUJsb2NrRm9yQ2FsbGVyLT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwotCiAgICAgICAg
IHN3aXRjaCAodHJ1ZUNhbGxlckNhbGxLaW5kKSB7CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZy
YW1lOjpDYWxsOgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OgpAQCAt
MzEzLDYgKzMwOSwxMCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJz
CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKICAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxs
ZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFz
ZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpKTsKICAg
ICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGNhbGxlZVNh
dmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3Rl
cnM6OnBiR1BSKSk7CisgICAgICAgIH0gZWxzZSBpZiAodHJ1ZUNhbGxlcikgeworICAgICAgICAg
ICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNv
ZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0
YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJs
b2NrLCBKSVQ6OnNfbWV0YWRhdGFHUFIpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmJhc2Vs
aW5lSklUQ29uc3RhbnRQb29sKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJh
c2VsaW5lQ29kZUJsb2NrLCBKSVQ6OnNfY29uc3RhbnRzR1BSKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCkBAIC00MDQsNyArNDA0LDgg
QEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwg
TExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOwogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRp
b24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGNvZGVCbG9ja0ZvckV4aXQtPm1faGFzTGlua2VkT1NSRXhpdCA9IHRy
dWU7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxv
Y2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRhdGFHUFIpOworICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+
YmFzZWxpbmVKSVRDb25zdGFudFBvb2woKSksIEpJVDo6c19jb25zdGFudHNHUFIpOwogCiAgICAg
ICAgIEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCgpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVz
dGluYXRpb247CkBAIC00MjAsMTIgKzQyMSwxNiBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1Rhcmdl
dChWTSYgdm0sIENDYWxsCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dl
ZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCi0gICAgaml0
LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9m
ZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKKyAgICAgICAgQVNTRVJUKCFS
ZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29udGFpbnMoTExJbnQ6OlJlZ2lz
dGVyczo6cGNHUFIpKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUsIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0
U2NyYXRjaEdQUihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikpOworCiAgICAgICAgIC8vIFNpbmNl
IHdlJ3JlIGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNh
dGNoLgogICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZt
LmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOwogICAgIH0KLSAgICAKKworICAgIGppdC5h
ZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFja1BvaW50ZXJPZmZz
ZXRGb3IoY29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
CiAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQp
LCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4
aXRQdHJUYWcpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1
bWVudHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVy
LmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgpAQCAtMjg2OSw3ICsyODcwLDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkZpbmRTdwogICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5kZmdT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5pc0RvdWJsZSgpKTsKICAg
ICBkb3VibGUgYXNEb3VibGUgPSB2YWx1ZS5hc0RvdWJsZSgpOwpAQCAtMjg5MCw3ICsyODkxLDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogCiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2st
PmRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICByZXR1cm4gbGlua2Vk
VGFibGUuY3RpRm9yVmFsdWUoKnVubGlua2VkVGFibGUsIHN0ckltcGwpLmV4ZWN1dGFibGVBZGRy
ZXNzPGNoYXIqPigpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTczMCw2ICs3MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292
ZXJ5OjppblBhaXIoY2FsbGVlVGFnR1BSLCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICAgICAgICAg
IHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAg
c2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBz
aHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFy
Z3M7ICsraSkgewogICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCku
dmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwpAQCAtODg5LDcgKzg5MCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRH
UFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nh
c2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIs
IFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAg
ICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAg
ICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZv
clRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgy
OCw2ICs4MjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxs
ZWVHUFIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6
ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFy
Z3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVy
cyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsK
ICAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxk
KG5vZGUsIGkgKyAxKTsKQEAgLTk3OSw3ICs5ODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0lu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0g
Y2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0g
ewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAg
ICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFy
ZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5ODUs
NyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmEKICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwogCiAg
ICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwg
SklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpE
RkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwg
dXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VHUFIp
LCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIEludmFs
aWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CiAKQEAgLTQ5MDUsNyArNDkwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0g
bV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChi
eXRlY29kZUluZGV4KTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+
YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5q
aXRDb2RlKCktPmNvbW1vbi5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVw
YXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICBhdXRvIG5v
blJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkOwogICAgIApAQCAtNDk4OSw3
ICs0OTg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5vZAogICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5h
cnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVFN1
YklDKiBzdWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUp
OworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVFN1
YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRp
b25WYWx1ZVN1Yk9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3Bl
cmF0aW9uVmFsdWVTdWI7CiAKQEAgLTU1NzEsNyArNTU3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZU5lZ2F0ZSgKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
ID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCkt
PmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQu
aml0Q29kZSgpLT5jb21tb24uYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemU7CiAgICAgYXV0
byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZTsKICAgICBjb21w
aWxlTWF0aElDKG5vZGUsIG5lZ0lDLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdG
dW5jdGlvbik7CkBAIC01ODE1LDcgKzU4MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlVmFsdWVNdWwoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0
LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAg
ICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0
ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFz
ZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJ
VE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuaml0Q29k
ZSgpLT5jb21tb24uYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hp
bmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBh
dGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bDsKIApAQCAtMTQ3NzAsNyArMTQ3NzAs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBz
Y29wZVJlZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIG1faml0LmNvZGVCbG9j
aygpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CiAgICAgbm9SZXN1
bHQobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxl
LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgY29tcGls
ZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKIAogICAgIGlmICh2bS5zaG91bGRCdWlsZGVy
UENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpIHsKICAgICAgICAgQjM6OlBDVG9PcmlnaW5NYXAgb3Jp
Z2luTWFwID0gc3RhdGUucHJvYy0+cmVsZWFzZVBDVG9PcmlnaW5NYXAoKTsKLSAgICAgICAgY29k
ZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFw
PihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0
ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpKTsKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+
Y29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFw
PihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0
ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpOwogICAgIH0KIAogICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTRW50cnlQdHJUYWc+IGxhYmVsID0gc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5r
QnVmZmVyLT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHN0YXRlLnByb2MtPmNvZGUoKS5lbnRy
eXBvaW50TGFiZWwoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRD
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2Rl
LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHB1YmxpYzoKICAgICBERkc6
OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpIG92ZXJyaWRlOwogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
Y29tbW9uRGF0YU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKSVRDb2RlLCBjb21t
b24pOyB9CiAgICAgdm9pZCBzaHJpbmtUb0ZpdChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKSBv
dmVycmlkZTsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92
ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CiAgICAg
CiAgICAgREZHOjpDb21tb25EYXRhIGNvbW1vbjsKICAgICBWZWN0b3I8T1NSRXhpdD4gbV9vc3JF
eGl0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MiwxNCArNTIsNiBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogCiAgICAg
Z3JhcGgucmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsKIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAg
ewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsK
LSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5l
bnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7Ci0gICAg
fQotI2VuZGlmCi0KICAgICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuIE5vdGUgdGhhdCB3ZSB1
c2UgdGhpcyBlbnRyeXBvaW50IHRvdGFsbHkgZGlmZmVyZW50bHkKICAgICAvLyBkZXBlbmRpbmcg
b24gd2hldGhlciB3ZSdyZSBkb2luZyBPU1IgZW50cnkgb3Igbm90LgogICAgIENDYWxsSGVscGVy
cyBqaXQoY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgs
NyBAQAogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5o
IgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2lu
TWFwLmgiCiAjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0
LmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCkBAIC0yMzIwLDYgKzIz
MjEsMTggQEAgcHJpdmF0ZToKICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5l
cmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVu
Y3Rpb24pOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVu
YW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklU
QWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRBZGRJQyogYWRkTWF0
aElDKERGRzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUp
IHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Cisg
ICAgc3RhdGljIEpJVE11bElDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJp
bmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVE11bElDKHBy
b2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dl
bmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUTmVnSUMqIGFkZE1hdGhJQyhE
Rkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0
dXJuIGNvbW1vbi5hZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3Rh
dGljIEpJVFN1YklDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFy
aXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVFN1YklDKHByb2ZpbGUp
OyB9CisKICAgICB2b2lkIGNvbXBpbGVWYWx1ZU11bCgpCiAgICAgewogICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4u
c2VtYW50aWMpOwpAQCAtMjM5MSw3ICsyNDA0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAg
ICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0
YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAg
ICAgIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxvY2soKS0+
YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgICAgICBKSVRV
bmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0
ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJ
Qy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IoSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwg
SlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CiAKICAg
ICAgICAgICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKQEAgLTI1MDAs
NyArMjUxMyw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgICAgICAgICAgICAgIEJveDxNYXRo
SUNHZW5lcmF0aW9uU3RhdGU+IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5l
cmF0aW9uU3RhdGU+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBKSVRCaW5hcnlNYXRoSUM8
R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRoSUM8R2VuZXJhdG9y
Pihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0Q29kZS0+Y29tbW9u
LCBhcml0aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBH
ZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBd
LmdwcigpKSwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigp
KSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwgcGFyYW1zLmZwU2NyYXRjaCgwKSwKICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zLmZwU2NyYXRjaCgxKSwgcGFyYW1zLmdwU2NyYXRjaCgw
KSk7CkBAIC00MzE3LDcgKzQzMzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgR1BSUmVnIHN0
dWJJbmZvR1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBwYXJhbXMu
Z3BTY3JhdGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAgYXV0byBnZW5lcmF0
b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAg
aml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2Fs
bFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgaml0LmNv
ZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJ
bmRleCwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgcGFyYW1z
LnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1
YkluZm9HUFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5
SXNTeW1ib2wgPSB0cnVlOwpAQCAtMTAyODUsNiArMTAyOTgsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxs
b2NhdGVkQXJnczsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJn
cy5hcHBlbmQoVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSkpOwogICAgICAg
ICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsK
KyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0
YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZv
ID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50aWNOb2RlT3JpZ2luKTsK
QEAgLTEwNDQzLDEzICsxMDQ1NywxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBz
aHVmZmxlRGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgp
KTsKIAogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1Bcmdz
OworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJs
b2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsK
IAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVC
bG9jaygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVn
VDApOwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xv
d1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6
cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVT
aHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNo
dWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAg
ICAgICAgIH0pOwpAQCAtMTA3OTIsNyArMTA4MDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsK
LSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2Fs
bEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBj
YWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsm
XSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsK
ICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMTA3Myw3ICsxMTA4OCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAo
aXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5m
by0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJl
ZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJ
bmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRh
aWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEzLDI4ICs0MTMsMTYgQEAgc3RhdGljIHZvaWQgY29tcGls
ZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAogCiAgICAgUmVnaXN0ZXJTZXQgYWxsRlRMQ2FsbGVlU2F2
ZXMgPSBSZWdpc3RlclNldDo6ZnRsQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIGNvbnN0IFJl
Z2lzdGVyQXRPZmZzZXRMaXN0KiBiYXNlbGluZUNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxv
Y2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogdm1D
YWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsK
LSAgICBSZWdpc3RlclNldCB2bUNhbGxlZVNhdmVzVG9Ta2lwID0gUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCk7Ci0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAg
ICAgaml0LmxvYWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAg
ICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgfQog
CiAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJl
ZyA9IHJlZy5uZXh0KCkpIHsKICAgICAgICAgaWYgKCFhbGxGVExDYWxsZWVTYXZlcy5nZXQocmVn
KSkgewotICAgICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKSk7CiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCB1bndpbmRJbmRl
eCA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5pbmRleE9mKHJlZyk7CiAgICAg
ICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPSBiYXNl
bGluZUNhbGxlZVNhdmVzLT5maW5kKHJlZyk7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIHZt
Q2FsbGVlU2F2ZSA9IG51bGxwdHI7IAotICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRs
ZXIoKSkKLSAgICAgICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVn
KTsKIAogICAgICAgICBpZiAocmVnLmlzR1BSKCkpIHsKICAgICAgICAgICAgIEdQUlJlZyByZWdU
b0xvYWQgPSBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8gR1BSSW5mbzo6cmVnVDAgOiByZWcuZ3By
KCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWdUb0xvYWQgIT0gR1BSSW5mbzo6cmVn
VDEpOwogCiAgICAgICAgICAgICBpZiAodW53aW5kSW5kZXggPT0gVUlOVF9NQVgpIHsKICAgICAg
ICAgICAgICAgICAvLyBUaGUgRlRMIGNvbXBpbGF0aW9uIGRpZG4ndCBwcmVzZXJ2ZSB0aGlzIHJl
Z2lzdGVyLiBUaGlzIG1lYW5zIHRoYXQgaXQgYWxzbwpAQCAtNDUyLDggKzQ0MCw2IEBAIHN0YXRp
YyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAogICAgICAgICAgICAgaWYgKGJh
c2VsaW5lUmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQocmVnVG9M
b2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVy
UmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQtPm9mZnNldCgpKSk7Ci0gICAgICAgICAg
ICBpZiAodm1DYWxsZWVTYXZlICYmICF2bUNhbGxlZVNhdmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNh
dmUtPnJlZygpKSkKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgp
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBGUFJSZWcgZnBSZWdUb0xvYWQgPSBi
YXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8gRlBSSW5mbzo6ZnBSZWdUMCA6IHJlZy5mcHIoKTsKIApA
QCAtNDY0LDE5ICs0NTAsOSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2ln
bmVkCiAKICAgICAgICAgICAgIGlmIChiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQogICAgICAgICAg
ICAgICAgIGppdC5zdG9yZURvdWJsZShmcFJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBiYXNlbGluZVJlZ2lzdGVy
T2Zmc2V0LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKHZtQ2FsbGVlU2F2ZSAmJiAhdm1D
YWxsZWVTYXZlc1RvU2tpcC5nZXQodm1DYWxsZWVTYXZlLT5yZWcoKSkpCi0gICAgICAgICAgICAg
ICAgaml0LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwogICAgICAgICB9CiAgICAg
fQogCi0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgUmVnaXN0
ZXJBdE9mZnNldCogdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChHUFJJbmZvOjpu
dW1iZXJUYWdSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxs
ZWVTYXZlLT5vZmZzZXQoKSkpOwotCi0gICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2
ZXMtPmZpbmQoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9y
ZTY0KEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7Ci0gICAgfQotCiAgICAg
c2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0gYmFzZWxpbmVD
b2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogCiAgICAgaWYg
KGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkp
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRh
ZGF0YS5yYgkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRh
CiAgICAgZGVmIHN0cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAg
IGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVP
ZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5h
bWVzLm1hcCBkbyB8ZmllbGROYW1lfAorICAgICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLi0x
XX0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fI3tmaWVsZE5hbWV9KTsg
fSIKKyAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisgICAgICAgIGVuZAorCisgICAgICAgIGRl
ZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBmaWVsZE5hbWVzKQogICAgICAgICAgICAg
ZmllbGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5k
X29mPyBIYXNoCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZl
cnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAg
ICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcg
ICAgJywgdHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZpeH19OyIKICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxk
LnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmllbGQudG9fcworICAg
ICAgICAgICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2goZmllbGROYW1lKQorICAgICAgICAgICAg
ICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZE5hbWV9OyIKICAgICAgICAg
ICAgICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVuZAogCi0g
ICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcykKKyAgICAg
ICAgZmllbGROYW1lcyA9IFtdCisgICAgICAgIHByZWZpeCA9ICIgICAgICAgICIKKyAgICAgICAg
ZmllbGRzID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBmaWVsZHMsIGZpZWxkTmFtZXMpCisgICAg
ICAgIGZpZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHBy
ZWZpeCwgZmllbGROYW1lcykKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBpZiBAaW5p
dGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2Nyw2ICszNjcsMjggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRQ
cm9wZXJ0eShHUFJSZQogICAgICAgICByZXN1bHQpOwogfQogCit2b2lkIEFzc2VtYmx5SGVscGVy
czo6c3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVn
IG9mZnNldCwgR1BSUmVnIHNjcmF0Y2gpCit7CisgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMy
KExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwor
ICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2gpOworICAgIG5lZzMyKG9mZnNldCk7CisgICAgc2lnbkV4dGVuZDMyVG9Q
dHIob2Zmc2V0LCBvZmZzZXQpOworICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CisgICAgCisgICAg
aXNJbmxpbmUubGluayh0aGlzKTsKKyAgICBhZGRQdHIoCisgICAgICAgIFRydXN0ZWRJbW0zMigK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihKU09iamVjdCkpIC0KKyAg
ICAgICAgICAgIChzdGF0aWNfY2FzdDxpbnQzMl90PihmaXJzdE91dE9mTGluZU9mZnNldCkgLSAy
KSAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSwKKyAgICAg
ICAgb2JqZWN0LCBzY3JhdGNoKTsKKyAgICAKKyAgICByZWFkeS5saW5rKHRoaXMpOworICAgIAor
ICAgIHN0b3JlVmFsdWUodmFsdWUsCisgICAgICAgIEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQs
IFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSkpOworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdExvYWRTdHJ1Y3R1cmUo
Vk0mIHZtLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNj
cmF0Y2gpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY5OCw4ICs3MjAsMTMgQEAgdm9pZCBB
c3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVy
czo6ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BS
SW5mbzo6cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJ
bmZvOjpyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVj
dCh2bSwgaW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxX
aXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQorewor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwg
Y2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MzA1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzNCw4ICsyMzQsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAg
Ci0gICAgLy8gTm90ZSB0aGF0IHRoaXMgY2xvYmJlcnMgb2Zmc2V0LgorICAgIC8vIE5vdGUgdGhh
dCB0aGVzZSBjbG9iYmVyIG9mZnNldC4KICAgICB2b2lkIGxvYWRQcm9wZXJ0eShHUFJSZWcgb2Jq
ZWN0LCBHUFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpOworICAgIHZvaWQgc3RvcmVQ
cm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNldCwg
R1BSUmVnIHNjcmF0Y2gpOwogCiAgICAgdm9pZCBtb3ZlVmFsdWVSZWdzKEpTVmFsdWVSZWdzIHNy
Y1JlZ3MsIEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAgIHsKQEAgLTM3OSwxNSArMzgwLDI2IEBA
IHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUsIEdQUlJl
ZyBzY3JhdGNoKQorICAgIHsKKyNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+
IDAKKyAgICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwgc2NyYXRjaCk7CisgICAgICAgIGNv
cHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChzY3JhdGNoKTsK
KyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKHNjcmF0Y2gpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBjb3B5Q2FsbGVl
U2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlG
cmFtZSkKICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAg
ICAgICAgIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH07CiAgICAgICAgIEdQUlJlZyB0ZW1wMSA9
IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9hZFB0cigmdG9wRW50cnlG
cmFtZSwgdGVtcDEpOwotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlckltcGwodGVtcDEpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CiAjZWxzZQogICAgICAg
ICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BF
bnRyeUZyYW1lKTsKICNlbmRpZgogICAgIH0KICAgICAKQEAgLTE3MjAsNiArMTczMiw3IEBAIHB1
YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91
dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOwogICAgIAogICAgIHZvaWQg
bWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNr
Rm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRD
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5l
SklUQ29kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9C
YXNlbGluZUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgorCisjaWYgRU5BQkxFKEpJVCkKKwor
I2luY2x1ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKSVRBZGRJQyogTWF0
aElDSG9sZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkg
eyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE11bElDKiBNYXRoSUNI
b2xkZXI6OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJl
dHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUU3ViSUMqIE1hdGhJQ0hvbGRl
cjo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJu
IG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVROZWdJQyogTWF0aElDSG9sZGVyOjph
ZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25l
Z0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorCit2b2lkIE1hdGhJQ0hvbGRlcjo6YWRvcHRNYXRo
SUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCit7CisgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVy
Lm1fYWRkSUNzKTsKKyAgICBtX211bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAg
IG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAgbV9zdWJJQ3MgPSBXVEZN
b3ZlKG90aGVyLm1fc3ViSUNzKTsKK30KKworQmFzZWxpbmVKSVRDb2RlOjpCYXNlbGluZUpJVENv
ZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdp
dGhBcml0eUNoZWNrKQorICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJp
dHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgLCBNYXRoSUNIb2xkZXIoKQoreyB9
CisKK0Jhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSgpCit7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAi
SklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKKworI2lmIEVOQUJMRShKSVQpCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCaW5hcnlBcml0aFByb2ZpbGU7CitjbGFzcyBVbmFy
eUFyaXRoUHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0
IFNpbXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKK2NsYXNzIE1hdGhJ
Q0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBv
dGhlcik7CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwor
ICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRT
dWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTmVnSUMqIGFk
ZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CisKK3ByaXZhdGU6CisgICAgQmFnPEpJVEFk
ZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAgIEJhZzxKSVRO
ZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKK307CisKK2NsYXNz
IEpJVENvbnN0YW50UG9vbCB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29uc3RhbnQgPSB1bnNpZ25l
ZDsKKworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBHbG9iYWxPYmpl
Y3QsCisgICAgICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8sCisg
ICAgICAgIEZ1bmN0aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rpb25FeHByLAorICAgIH07CisKKyAg
ICBzdHJ1Y3QgVmFsdWUgeworICAgICAgICBUeXBlIHR5cGU7CisgICAgICAgIFBhY2tlZFB0cjx2
b2lkPiBwYXlsb2FkOworICAgIH07CisKKyAgICBKSVRDb25zdGFudFBvb2woKSA9IGRlZmF1bHQ7
CisgICAgSklUQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisgICAg
SklUQ29uc3RhbnRQb29sJiBvcGVyYXRvcj0oSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsK
KworICAgIENvbnN0YW50IGFkZChUeXBlIHR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxscHRyKQor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudHMuc2l6ZSgpOworICAg
ICAgICBtX2NvbnN0YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBlLCBwYXlsb2FkIH0pOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9jb25zdGFudHMuc2l6ZSgpOyB9CisgICAgVmFsdWUgYXQoc2l6ZV90IGkpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRzW2ldOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBt
X2NvbnN0YW50czsKK307CisKKworY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVj
dEpJVENvZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIEJhc2VsaW5lSklU
Q29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+LCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhB
cml0eUNoZWNrKTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisgICAgUENUb0Nv
ZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1Rv
Q29kZU9yaWdpbk1hcC5nZXQoKTsgfQorCisgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBt
X3VubGlua2VkQ2FsbHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZv
czsKKyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZv
czsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsK
KyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
czsKKyAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9j
b25zdGFudFBvb2w7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3Bj
VG9Db2RlT3JpZ2luTWFwOworICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpj
b2RlU2l6ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6Zmlu
YWxpemUoKQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXpl
T25NYWluVGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmlu
YWxpemVPbk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAg
ICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVCht
X2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9n
U2hhZG93Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFj
a2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0K
IAotdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBz
aGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQ
dHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0
cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IGNhbGxlZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tl
dCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwot
ICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cihjb2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZv
aWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVn
IHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIp
CiB7CiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4o
KTsKQEAgLTcyLDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlj
a2VuUGEKICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikp
OwogfQogCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhl
bHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0
LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVC
bG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUp
KSk7CisgICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVD
VF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9y
ZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVz
cyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNv
ZGVCbG9jaykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMo
KSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6
UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwo
c2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7
Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJS
ZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJS
ZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBj
b2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJ
VENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwg
U2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBk
ZXNjcmlwdGlvbikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAs
NyArODQwLDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxs
IHZvbGF0aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRo
ZSB0b3Agb2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2
b2lkIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBH
UFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BS
UmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNr
ZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVn
cywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2Nv
cGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgp
OworICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tl
dCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBw
b2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4K
ICAgICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFj
a2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2
ZVJlZ2lzdGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVS
ZWdpc3RlcnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENh
bGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0
ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNl
dCBjYWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVy
cygpIH07Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0
aW9ucyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkp
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
ZmxlRGF0YS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMyBA
QCBwdWJsaWM6CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWduZWQg
bnVtTG9jYWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsgVUlO
VF9NQVggfTsKKyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8gT24g
b3VyIG1hY2hpbmUgZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1hcDxW
YWx1ZVJlY292ZXJ5PiByZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVyIHsg
SW52YWxpZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29k
ZUJsb2NrKik7CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0
ZXJBdE9mZnNldExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENhbGxG
cmFtZVNodWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkKICAg
ICAsIG1fb2xkRnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5S
ZWdpc3RlcnMsIG51bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25l
ZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAgICAgICAr
IHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKSkpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnMgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5udW1Q
YXJhbWV0ZXJzKSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRl
clNpemVJblJlZ2lzdGVycwogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFt
ZShkYXRhLmFyZ3Muc2l6ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFt
ZVNpemUgLSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhS
ZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5u
dW1QYXNzZWRBcmdzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykK
IHsKICAgICAvLyBXZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAg
IGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAg
LTQyMSw3ICs0MjEsNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENh
CiAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9u
ZXdGcmFtZUJhc2UpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9
CiAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1f
bmV3RnJhbWVCYXNlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiht
X2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAgIG1faml0LmFkZDMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAt
IDEgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNlKTsK
ICAgICBtX2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdu
bWVudFJlZ2lzdGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVCYXNl
LCBtX25ld0ZyYW1lQmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlci5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsx
MDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAg
ICAgIGRhdGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2Vk
QXJncyA9IG1fbnVtUGFzc2VkQXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9u
dW1QYXJhbWV0ZXJzOwogICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0
ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEu
YXJncy5yZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXJnQ291bnQoKTsgKytpKQpAQCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBw
ZXJmb3JtU2FmZVdyaXRlcygpOwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7
IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJ
bnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51
bGxwdHIpCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJl
bHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAg
ICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6
SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFBy
b2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAg
IG1fcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9j
ayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAg
LTkwLDggKzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNr
aXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9u
czo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lw
T3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6
OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZl
c0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRv
cEVudHJ5RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMjAgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlX
cml0ZShXYXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFi
c29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRl
clRvU2V0KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50
ZXJUb1NldCkKIHsKKyAgICBhdXRvIG9rID0gYnJhbmNoVGVzdFB0cihaZXJvLCBwb2ludGVyVG9T
ZXQpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9pbnRlclRv
U2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKKyAgICBvay5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhclJl
YWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCit2b2lkIEpJVDo6ZW1pdFZhclJl
YWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKQog
ewotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
OChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFy
UmVhZE9ubHlXYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJ
bnZhbGlkYXRlZCkpKTsKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29s
dmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgbG9h
ZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0
Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJSZWFkT25seVdhdGNo
cG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWws
IEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1
c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6YXNzZXJ0
U3RhY2tQb2ludGVyT2Zmc2V0KCkKQEAgLTEyOSwxMiArMTM3LDE4IEBAIHZvaWQgSklUOjphc3Nl
cnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CiB9
CiAKK3ZvaWQgSklUOjpyZXNldFNQKCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNoZWNrU3Rh
Y2tQb2ludGVyQWxpZ25tZW50KCk7Cit9CisKICNkZWZpbmUgTkVYVF9PUENPREUobmFtZSkgXAog
ICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyBcCiAgICAgYnJlYWs7CkBAIC0xODEs
NjEgKzE5NSw0NCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjCiAg
ICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tU
b0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
dW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRh
YmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBicmFu
Y2hUZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5j
dGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlv
blJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFn
KSwgcmVzdWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYgKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVj
dCgpKSwgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQs
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCByZXN1bHQp
OworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworI2lmIEFTU0VSVF9F
TkFCTEVECisgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2Nr
KCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUKTsKKyAgICB9KTsKKyNlbmRpZgorfQorCiB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAg
ICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAg
ZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4iKTsKICAgICAK
ICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3VtZW50Q291bnRT
YW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291
bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAKICAgICBt
X2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJsb2NrLT52bSgp
OwogICAgIEJ5dGVjb2RlSW5kZXggc3RhcnRCeXRlY29kZUluZGV4KDApOwotICAgIGlmIChtX2xv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1fY29kZUJsb2NrLT5pbmhlcml0czxQcm9ncmFt
Q29kZUJsb2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmluaGVyaXRzPE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2s+KHZtKSkpIHsKLSAgICAgICAgLy8gV2UgY2FuIG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRp
b24gYmVjYXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2RlQmxvY2sncyBleGFjdGx5IG9uY2UuCi0g
ICAgICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxkIGJlIGludmFsaWQgb3RoZXJ3aXNlLiBX
aGVuIHRoZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRzIHRvCi0gICAgICAgIC8vIGRvIE9TUiBl
bnRyeSBpbnRvIHRoZSBiYXNlbGluZSBKSVQgaW4gYSBsb29wLCBpdCB3aWxsIHBhc3MgaW4gdGhl
IGJ5dGVjb2RlIG9mZnNldCBpdAotICAgICAgICAvLyB3YXMgZXhlY3V0aW5nIGF0IHdoZW4gaXQg
a2lja2VkIG9mZiBvdXIgY29tcGlsYXRpb24uIFdlIG9ubHkgbmVlZCB0byBjb21waWxlIGNvZGUg
Zm9yCi0gICAgICAgIC8vIGFueXRoaW5nIHJlYWNoYWJsZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zm
c2V0LgotCi0gICAgICAgIC8vIFdlIG9ubHkgYm90aGVyIGJ1aWxkaW5nIHRoZSBieXRlY29kZSBn
cmFwaCBpZiBpdCBjb3VsZCBzYXZlIHRpbWUgYW5kIGV4ZWN1dGFibGUKLSAgICAgICAgLy8gbWVt
b3J5LiBXZSBwaWNrIGFuIGFyYml0cmFyeSBvZmZzZXQgd2hlcmUgd2UgZGVlbSB0aGlzIGlzIHBy
b2ZpdGFibGUuCi0gICAgICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0
KCkgPj0gMjAwKSB7Ci0gICAgICAgICAgICAvLyBBcyBhIHNpbXBsaWZpY2F0aW9uLCB3ZSBkb24n
dCBmaW5kIGFsbCBieXRlY29kZSByYW5nZXMgdGhhdCBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAg
ICAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGZpbmQgdGhlIG1pbmltdW0gYnl0ZWNvZGUgb2Zmc2V0
IHRoYXQgaXMgcmVhY2hhYmxlLCBhbmQKLSAgICAgICAgICAgIC8vIGNvbXBpbGUgY29kZSBmcm9t
IHRoYXQgYnl0ZWNvZGUgb2Zmc2V0IG9ud2FyZHMuCi0KLSAgICAgICAgICAgIEJ5dGVjb2RlR3Jh
cGggZ3JhcGgobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAg
ICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmluZEJhc2ljQmxvY2tG
b3JCeXRlY29kZU9mZnNldChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2spOwotCi0gICAgICAgICAgICBHcmFwaE5v
ZGVXb3JrbGlzdDxCeXRlY29kZUJhc2ljQmxvY2sqPiB3b3JrbGlzdDsKLSAgICAgICAgICAgIHN0
YXJ0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHdvcmtsaXN0
LnB1c2goYmxvY2spOwotCi0gICAgICAgICAgICB3aGlsZSAoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBi
bG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRCeXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleChzdGQ6Om1pbihzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCks
IGJsb2NrLT5sZWFkZXJPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
c3VjY2Vzc29ySW5kZXggOiBibG9jay0+c3VjY2Vzc29ycygpKQotICAgICAgICAgICAgICAgICAg
ICB3b3JrbGlzdC5wdXNoKCZncmFwaFtzdWNjZXNzb3JJbmRleF0pOwotCi0gICAgICAgICAgICAg
ICAgLy8gQWxzbyBhZGQgY2F0Y2ggYmxvY2tzIGZvciBieXRlY29kZXMgdGhhdCB0aHJvdy4KLSAg
ICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMo
KSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0g
YmxvY2stPmxlYWRlck9mZnNldCgpOyBieXRlY29kZU9mZnNldCA8IGJsb2NrLT5sZWFkZXJPZmZz
ZXQoKSArIGJsb2NrLT50b3RhbExlbmd0aCgpOykgewotICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZU9mZnNldCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogaGFuZGxlciA9IG1fY29kZUJsb2NrLT5oYW5k
bGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChncmFwaC5maW5kQmFzaWNCbG9j
a1dpdGhMZWFkZXJPZmZzZXQoaGFuZGxlci0+dGFyZ2V0KSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CiAgICAgZm9y
IChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKQEAgLTI3OCwxMiArMjc1LDE1IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVn
KFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAg
ICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFt
ZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVC
bG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChvcGNvZGVJ
RCAhPSBvcF9jYXRjaCkKKyAgICAgICAgICAgIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwor
CiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICAgICAgREVGSU5FX1NMT1dfT1AobGVz
cykKICAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQpAQCAtNTI3LDcgKzUyNyw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRl
eCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9i
eXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0
ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZl
cmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93
IGNvZGUgZm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdP
ZmZzZXQoKSk7CkBAIC01NDUsOCArNTQ1LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKCkKIAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJ
VEV4ZWN1dGlvbigpKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250
ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5m
cDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4o
IkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURd
LCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAg
ICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNjAzLDcgKzYwMyw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxf
YnlfdmFsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X2lkKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfc3ViKQotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
Z2V0X2Zyb21fc2NvcGUpCiAjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3B1
dF90b19zY29wZSkKQEAgLTY3NCw1NSArNjc0LDU1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAjZW5kaWYKIH0KIAordm9pZCBKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFk
YXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCkKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHNfbWV0YWRhdGFHUFIp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEo
KSksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0
YTo6b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKQoreworICAgIEJhc2U6OmVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZp
bmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6Q2FwYWJp
bGl0eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOworICAgIERG
Rzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0
eUxldmVsKCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21w
aWxlOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVP
cHRpbWl6ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5n
ID0gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAg
IGNhc2UgREZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVk
ID0gdHJ1ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAg
ICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7
Ci0gICAgY2FzZSBHbG9iYWxDb2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToKLSAgICBjYXNlIEV2
YWxDb2RlOgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBm
YWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAgIC8v
IFdlIGNvdWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3Rl
ZCBhbiB1bmlubGluZWFibGUgY2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBv
YnNlcnZhdGlvbi4KLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
ICY9IGNhbklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29kZUJs
b2NrKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9j
ay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29k
ZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRW
ZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRj
aEp1bXBUYWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1
cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8
U3RyaW5nSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZV
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICBpZiAobV91bmxpbmtl
ZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAg
ICAgIG1fc3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV91
bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7Cisg
ICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0g
Rml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAKLSAgICBpZiAoVU5M
SUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKQot
ICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX2Nv
ZGVCbG9jayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8
IChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNl
bGluZUZvclByb2ZpbGVyKCkpKSkgeworICAgICAgICAvLyBGSVhNRTogYnVpbGQgYSBkaXNhc3Nl
bWJsZXIgb2ZmIG9mIFVubGlua2VkQ29kZUJsb2NrLgorICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9
IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICB9
CiAgICAgaWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpIHsKKyAgICAg
ICAgLy8gRklYTUU6IGJ1aWxkIHByb2ZpbGVyIGRpc2Fzc2VtYmxlciBvZmYgVW5saW5rZWRDb2Rl
QmxvY2suCiAgICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAgICAgICAgIG5l
dyBQcm9maWxlcjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAorICAgICAgICAg
ICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1f
cHJvZmlsZWRDb2RlQmxvY2spLAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpCYXNlbGluZSkp
OwotICAgICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1fY29tcGlsYXRpb24t
PmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fcHJv
ZmlsZWRDb2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwpA
QCAtNzQyLDExICs3NDIsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbgogICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAg
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0
aW9uQ29kZSkKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKCk7CiAK
ICAgICBMYWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0g
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7Cisg
ICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRD
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUg
PSAtZnJhbWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9mZnNl
dCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxv
dzsKQEAgLTc1NywxNiArNzU4LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRG
aW5hbGl6aW4KICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsK
KyAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hl
Y2tSZWdpc3RlcnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9v
bFJlZ2lzdGVycygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0
aW9uQ29kZSkgeworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1
bmN0aW9uQ29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAg
IGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
YXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsr
YXJndW1lbnQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAmJiAoIW1fdW5s
aW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJv
ZmlsZXMoKSArIEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3RvcmFnZSgpKSwg
cmVnVDIpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1l
bnQgPCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsK
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2Fu
dCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAv
LyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byBy
ZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+
aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArNzgy
LDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAg
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2Fk
R1BSKCkpOwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3Vs
dFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJl
c3MocmVnVDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6
Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+
aml0VHlwZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIp
KQogICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXpl
TWFya2VyKSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MDQsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlv
bldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxv
d0Vycm9yLCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMg
MSwgd2UgbmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlG
aXh1cCA9IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkg
eworICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2Fy
aXR5Q2hlY2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9j
b2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rp
b25Qcm9sb2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxv
Y2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tU
b0ZyYW1lSW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCks
IEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQo
KSkpOwogCiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxp
bmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkp
LmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMy
X3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9u
KG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNo
ZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJp
dHlDaGVjaywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNo
VGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBA
IC04MzksNyArODQ3LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1f
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9
IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2Rl
QmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBt
X2xpbmtCdWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIo
KnRoaXMsIG1fdW5saW5rZWRDb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5l
SklULCBlZmZvcnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4NjYsOCBAQCB2b2lk
IEpJVDo6bGluaygpCiAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAgICAgICAgY2Fz
ZSBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkNo
YXJhY3RlcjogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1w
bGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQu
ZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVu
bGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBA
IC04NzEsOCArODc5LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAg
Y2FzZSBTd2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAg
YXV0byBjdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4o
bV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAg
ICAgICAgZm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52
YWx1ZXMoKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1f
YnJhbmNoT2Zmc2V0OwpAQCAtOTA2LDYgKzkxNCwyNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAg
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCByZWNvcmQuY2FsbGVlKTsKICAg
ICB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGF1dG8gZmluYWxpemVJQ3MgPSBbJl0gKGF1
dG8mIGdlbmVyYXRvcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5lcmF0b3JzKSB7
CisgICAgICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsKKyAgICAgICAg
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1fZG9uZSk7CisgICAgICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zbG93UGF0aEJlZ2luKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX2dldEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkc1dpdGhUaGlz
KTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5
VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9k
ZWxCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeUlkcyk7CisgICAgZmluYWxpemVJQ3Mo
bV9pbkJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9mcyk7CisgICAgZmluYWxp
emVJQ3MobV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7CisjZWxzZQogICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1fZ2V0QnlJZHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX2dldEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1f
Z2V0QnlJZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIpOwpAQCAtOTE3LDIxICs5NDYsMjUgQEAgdm9p
ZCBKSVQ6OmxpbmsoKQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeVZhbHMsIHBhdGNo
QnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNlT2ZzLCBwYXRjaEJ1
ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wcml2YXRlQnJhbmRBY2Nlc3Nlcywg
cGF0Y2hCdWZmZXIpOworI2VuZGlmCiAKICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6
IG1fY2FsbENvbXBpbGF0aW9uSW5mbykgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIFVu
bGlua2VkQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxpbmtlZENhbGxM
aW5rSW5mbzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pOworI2Vs
c2UKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlu
a0luZm87CiAgICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKICAgICAgICAgICAgIHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQ
YXRoU3RhcnQpLAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CisjZW5kaWYKKwogICAgIH0K
IAotICAgIHsKLSAgICAgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8
IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgewotICAgICAgICAgICAgaWYgKG1f
bGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGppdENvZGVN
YXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsK
LSAgICAgICAgfQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChqaXRDb2RlTWFw
QnVpbGRlci5maW5hbGl6ZSgpKTsKKyAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVp
bGRlcjsKKyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZz
ZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKKyAgICAgICAgaWYgKG1f
bGFiZWxzW2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQorICAgICAgICAgICAgaml0Q29kZU1hcEJ1
aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwogICAg
IH0KIAogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkpIHsKQEAg
LTk0MCwyNiArOTczLDQyIEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICB9CiAKICAgICBpZiAoVU5M
SUtFTFkobV9jb21waWxhdGlvbikpIHsKKyAgICAgICAgLy8gRklYTUU6IHNob3VsZCB3ZSBtYWtl
IHRoZSBieXRlY29kZSBwcm9maWxlciBrbm93IGFib3V0IFVubGlua2VkQ29kZUJsb2NrPwogICAg
ICAgICBpZiAoT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpCiAgICAg
ICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9uLmdl
dCgpLCBwYXRjaEJ1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+
YWRkQ29tcGlsYXRpb24obV9jb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAgICAgICAgbV92
bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2ZpbGVkQ29kZUJs
b2NrLCAqbV9jb21waWxhdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyLmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFw
ID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlciksIHBhdGNoQnVmZmVyKTsKICAgICAKKyAgICAvLyBGSVhNRTogTWFrZSBhIHZl
cnNpb24gb2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBVbmxpbmtlZENv
ZGVCbG9jay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NP
REUoCiAgICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAiQmFzZWxp
bmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJCYXNlbGlu
ZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wcm9m
aWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBt
X2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlD
aGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigq
bmV3IEJhc2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2pp
dENvZGUtPm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBt
X2ppdENvZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5m
b3MpOworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1vdmUobV91bmxp
bmtlZFN0dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZN
b3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRD
b2RlLT5tX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOworICAgIG1f
aml0Q29kZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2RlLT5tX2NvbnN0
YW50UG9vbCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgbV9qaXRDb2RlLT5tX2lzU2hhcmVhYmxlID0gbV9pc1NoYXJlYWJsZTsKKyNlbHNlCisgICAg
bV9qaXRDb2RlLT5tX2lzU2hhcmVhYmxlID0gZmFsc2U7CisjZW5kaWYKIAogICAgIGlmIChKSVRJ
bnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBm
b3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1v
cnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5l
bmQoKS51bnRhZ2dlZFB0cigpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29k
ZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2VkQ29kZUJsb2NrLCByZXN1bHQuZXhl
Y3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxl
TWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBK
SVQ6OmZpbmFsaXplT25NYWluVGhyZWFkKCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxp
emVPbk1haW5UaHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTk2OCwyNSArMTAxNywxNCBAQCBDb21w
aWxhdGlvblJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyCiAKICAgICBtX2xpbmtCdWZmZXIt
PnJ1bk1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCi0gICAgewotICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBtX2Nv
ZGVCbG9jay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVT
aHJpbmspOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2st
Pm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7Ci0gICAgICAgIEhhbmRsZXJJbmZv
JiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgIC8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgotICAgICAgICBoYW5kbGVyLm5hdGl2
ZUNvZGUgPSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5k
bGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7Ci0gICAgfQot
CiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQ
Q1RvQ29kZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKKyAgICAgICAg
bV9qaXRDb2RlLT5tX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2lu
TWFwKTsKIAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNl
bGluZUpJVC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6
ZSgpKSAvCi0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0
aW9uc1NpemUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNldEpJVENv
ZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0dXBXaXRo
VW5saW5rZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAg
cmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTAzNiwxMSBAQCBz
aXplX3QgSklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZlci0+c2l6
ZSgpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBp
bGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsK
ICAgICBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBjb21waWxl
QW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFsaXplT25N
YWluVGhyZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVCbG9jayk7
CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKQEAgLTEw
NDIsMTggKzEwODAsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3Jl
QwogICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1f
dm0sICJQcmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBK
SVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVk
IEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxl
ZUxvY2FscygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdp
c3RlcnMoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxz
KCkpKSk7CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50
ZXJPZmZzZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZz
ZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJD
b3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVSZWdpc3Rl
ckNvdW50Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2ludCBKSVQ6
OnN0YWNrUG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewog
ICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3Io
Y29kZUJsb2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZz
ZXRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9pbnRlck9m
ZnNldEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNoTWFwPENT
dHJpbmcsIFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxD
U3RyaW5nLCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChh
Y3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwg
IkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBz
dGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAor
I2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgpA
QCAtNDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVFJp
Z2h0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgorI2luY2x1
ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVk
ZSAiVW51c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTE0OSwx
NCArMTUxLDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENv
bXBpbGF0aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0
YXJ0OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxM
aW5rSW5mbzsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9D
b25zdGFudDsKKyNlbHNlCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0
YXJ0OwogICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyNlbmRpZgogICAgIH07
CiAKICAgICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRy
LCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAg
IGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7
CisgICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VK
SVQgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmll
bmQgY2xhc3MgSklUU3R1YkNhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRUaHVua3M7CkBA
IC0xNzEsNiArMTc4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJl
c3MgdGhlIGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRj
aGVkIG9mZnNldC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVm
YXVsdE9mZnNldCA9IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7
CisKICAgICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgw
KSk7CiAgICAgICAgIH5KSVQoKTsKQEAgLTE3OCwyOCArMTg3LDMzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAog
ICAgICAgICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRp
b25FZmZvcnQpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVh
ZCgpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2Rl
QmxvY2sqKTsKICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9p
ZCBkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAg
ICAgIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZU9mZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVm
Zm9ydCk7CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zm
c2V0KS5wcml2YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAorICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJs
b2NrKik7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29k
ZUJsb2NrKik7CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlu
a2VkQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KENvZGVCbG9jayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFw
PENTdHJpbmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21waWxlVGltZSgpOwogCisgICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjpt
ZXRhZGF0YVRhYmxlR1BSOworICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX2NvbnN0
YW50c0dQUiA9IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSOworCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdm9pZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVMaW5rUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7
CiAgICAgICAgIHZvaWQgbGluaygpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRl
Q29tcGlsZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0
IHByaXZhdGVDb21waWxlKENvZGVCbG9jayosIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAg
ICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlv
biBjaGVjay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gZnVuY3Rpb24pCkBAIC0yMjMsNiArMjM3LDMyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CisgICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNp
emVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgorICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNp
emVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgorICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6
ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVU
eXBlLCB0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKFZh
bHVlVHlwZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEo
R1BSUmVnLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisg
ICAgcHVibGljOgorICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudElu
ZGV4LCBHUFJSZWcpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVj
dChHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVn
aXN0ZXIsIEdQUlJlZyk7CisKKyAgICAgICAgdm9pZCBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUlu
UHJvbG9ndWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1QwKTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlv
bkNoZWNrKEp1bXAganVtcFRvSGFuZGxlcikKICAgICAgICAgewogICAgICAgICAgICAgbV9leGNl
cHRpb25DaGVja3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpAQCAtMjU0LDYgKzI5NCwxOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW9uKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgorICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAorICAgICAgICAgICAgT3A6Om9wY29k
ZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3Zh
cmFyZ3MKKyAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJn
cyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCisgICAg
ICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KKyAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKKyAgICAgICAgICAgIE9wOjpvcGNv
ZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92
YXJhcmdzCisgICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFy
Z3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cworICAg
ICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CisjZWxzZQogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9w
OjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0
cnVjdF92YXJhcmdzCkBAIC0yNjUsOSArMzE4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0g
b3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzCiAgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBD
YWxsTGlua0luZm8qKTsKKyNlbmRpZgogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgot
ICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwo
Y29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0lu
ZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAg
IHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yODcsMTQgKzM0MSwxMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBv
d25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAg
dm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcik7
CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMg
aW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3Jh
dGNoLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShWYWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwg
R1BSUmVnKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBC
eXRlY29kZSYsIEdQUlJlZyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1ZhbHVlUmVncyk7
CiAjZWxzZQogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxl
JiwgSlNWYWx1ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9p
ZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOwpAQCAtMzA1
LDggKzM1OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxz
dGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2Zp
bGU+Ojp2YWx1ZSwgdm9pZD4KICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmls
ZWRPcGNvZGUoT3AgYnl0ZWNvZGUpOwogCi0gICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJ
RCBzY3JhdGNoR1BSKTsKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0
ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
ICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29k
ZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01OTMsNyArNjQ4LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwpAQCAtNjExLDcgKzY2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkK
ICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICNlbmRpZgogICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNywxNCArNjgxLDE0IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVk
KTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZp
cnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nl
c3NUeXBlKTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVy
IGRzdCwgQWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJv
cGVydHksIEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAg
ICAgICB2b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1v
bihjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0VmFyUmVh
ZE9ubHlDaGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNo
ZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAgICAgIHZvaWQg
ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICAg
ICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBk
ZXB0aCk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJl
Z2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxV
RTY0KQpAQCAtNjQ2LDcgKzcwMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAg
IHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qg
b3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsK
LSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAg
ICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsK
ICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1
dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0
Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NSw2ICs3MDksNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tu
b3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50
KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZp
cnR1YWxSZWdpc3Rlcik7CkBAIC02NzYsMTMgKzczMSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19v
cF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcihWTSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3df
b3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNh
bGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcmVzb2x2ZV9z
Y29wZUdlbmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsK
ICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3Bf
ZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYpOwpAQCAtNjk2LDMyICs3NDksMTYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIg
fHwgcmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dF
TkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5l
cmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZS
T01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJB
VE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5l
cmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFt
ZSk7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNv
bHZlU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIE1vZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5l
IHRoYW4gdXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVj
YXVzZSB3ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAg
ICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJl
c29sdmVUeXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JF
U09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNv
bHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShE
RUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9T
Q09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hh
ciogdGh1bmtOYW1lKTsKLQogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5l
cmF0b3IoVk0mKTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCisgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9y
KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2
ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmso
Vk0mLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsK
KwogICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207CkBA
IC03NjAsMTAgKzc5NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0
IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAg
ICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChB
ZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTWV0YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25z
dCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsK
LSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0
YSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRl
Y29kZSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAg
dm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKGNvbnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAg
ICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFt
ZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJh
dGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIxLDIwICs4
NTgsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkpOwog
ICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1l
IE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgog
ICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+Ojpo
YXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9wZXJh
dGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAg
ICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJv
ZmlsZShieXRlY29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVu
YW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5
cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3Mg
dGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3Mg
dGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5cGU+
KHRhcmdldCwgYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRkcmVzcyhH
UFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZz
ZXQpLCByZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bl
cmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOSwyNSArOTU2LDIyIEBAIG5hbWVz
cGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRp
bWl6ZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVP
cHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9
CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1p
dFByb2ZpbGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJl
dHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3
aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBj
YXNlIGFsbCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2Zp
bGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGVtaXRNYXRl
cmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgdm9p
ZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0
Q29tcGlsZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMo
KTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJv
bSB0aGUgbWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNv
bnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8g
dXNlIHRoaXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1l
IHZhbHVlIHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRH
ZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFy
eU9wPgotICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFy
eU9wKTsKKworICAgICAgICB2b2lkIHJlc2V0U1AoKTsKIAogICAgICAgICBJbnRlcnByZXRlciog
bV9pbnRlcnByZXRlcjsKIApAQCAtOTY0LDkgKzk5OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxT
d2l0Y2hSZWNvcmQ+IG1fc3dpdGNoZXM7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5z
aWduZWQ+IG1fY29waWVkR2V0UHV0SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEJp
bmFyeUFyaXRoUHJvZmlsZT4gbV9jb3BpZWRBcml0aFByb2ZpbGVzOwotCiAgICAgICAgIEp1bXBM
aXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNr
c1dpdGhDYWxsRnJhbWVSb2xsYmFjazsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBA
IC0xMDAwLDExICsxMDMxLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoTWFwPGNv
bnN0IEluc3RydWN0aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4+IG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAogICAgICAgICBib29sIG1fY2FuQmVP
cHRpbWl6ZWQ7Ci0gICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAg
ICAgYm9vbCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9s
b29wT1NSRW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgICAgIFJlZlB0cjxEaXJlY3RKSVRDb2Rl
PiBtX2ppdENvZGU7CisgICAgICAgIENvZGVCbG9jayogbV9wcm9maWxlZENvZGVCbG9jayB7IG51
bGxwdHIgfTsKKyAgICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fdW5saW5rZWRDb2RlQmxvY2sg
eyBudWxscHRyIH07CisKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAg
UmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50
UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBt
X2dsb2JhbE9iamVjdENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpIH07CisgICAgICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxz
OworICAgICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgICAg
ICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAg
ICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7Cisg
ICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzOworCisgICAgICAgIHN0cnVjdCBOb3RBQ29kZUJsb2NrIHsgfSBtX2NvZGVCbG9jazsKKwor
ICAgICAgICBib29sIG1faXNTaGFyZWFibGUgeyB0cnVlIH07CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
Yy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewogICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCBhcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
YXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIx
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJ
bXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmVnVDEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJl
Z1QyLCByZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVn
VDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICszNzUsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsK
ICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklUOjplbWl0Qmlu
YXJ5RG91YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1l
dGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyogbmVnYXRl
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBVbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0
ZT4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBK
SVROZWdJQyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsK
ICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRl
SUMpOwogICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVy
YXRpb25WYWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAg
ZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAgLTg5
OSw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAK
IHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0
aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3MuYWRkSklUQWRk
SUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1
ZUFkZCk7CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3Qo
SklUVW5hcnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5n
ZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdl
bmVyYXRlZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
c2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2Zp
bGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVn
cywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNj
cmF0Y2hHUFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUsMTAgKzEwMjEsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgICAgICBlbHNl
IGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0
UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBz
Y3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxlZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJl
Z3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwxMyArMTA2MiwxNCBAQCB2
b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAjZW5kaWYKIAogICAgIFVu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hv
dWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBU
cnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVn
cywgcmVnVDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7
CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIHNy
Y1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJl
dF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRy
dXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklU
T3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3Jj
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRT
KQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwxMyArMTEyOCwxNCBA
QCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAjZW5kaWYKIAogICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUo
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0
YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3Ms
IHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3
aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiks
IHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1h
dGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBs
ZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0
aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3Bl
cmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0
aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdz
LCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9J
Q19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExNjYsNyArMTE3
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxk
RW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Cisg
ICAgICAgIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBTbmlwcGV0
T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAg
ICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vj
b25kKCkpOwpAQCAtMTIxMSw4ICsxMjIwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0
IEluc3RydWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJs
b2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9t
YXRoSUNzLmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0
aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxP
cE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigp
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3Vi
SUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+
KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgSklU
U3ViSUMqIHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAg
bV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAg
ICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCkpOwogICAgIGVtaXRTdG9yZShkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29k
ZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QxLCByZWdUMCk7CiB9
CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogSklUOjpjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiB7CiAgICAgdW5zaWdu
ZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIGludCBhcmdD
b3VudCA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50
KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNl
dEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCkBAIC0xOTIsNyAr
MTkyLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAg
ICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50czsK
ICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JW
YXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCAtZmlyc3RGcmVlUmVnaXN0
ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24s
IG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJn
c0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDYgKiBzaXplb2Yodm9pZCop
KSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMjAyLDcgKzIwMiw3IEBAIEpJ
VDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVy
YXRpb24gPSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAg
ICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAg
Y2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0KSwgZmlyc3RWYXJBcmdPZmZzZXQsIHJl
Z1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBtX3Byb2ZpbGVkQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0KSwgZmlyc3RW
YXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMSk7CiAK
ICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KQEAgLTIzMiwxMCArMjMyLDEwIEBA
IGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkp
KTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVn
VDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fcHJvZmlsZWRCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CiAKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KHJlZ1QxKSk7CiAKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBD
YWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9wcm9maWxl
ZEJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAg
ICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAtMjU4LDggKzI1OCw4IEBAIHZv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAK
ICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxDYWxs
KCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
aW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91
bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjg2LDExICsyODYsMTEg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICovCiAgICAg
Q2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2Fs
bF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgICAgICBpbmZvID0gbV9wcm9maWxlZEJsb2Nr
LT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBjb21w
aWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZy
YW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlh
bGl6ZWQuCiAgICAgCi0gICAgYXV0byBieXRlY29kZUluZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVj
b2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOworICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fcHJvZmls
ZWRCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7CiAgICAgdWludDMyX3QgbG9jYXRp
b25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7CiAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVn
VDApOyAvLyByZWdUMSwgcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAtMzI0LDcgKzMyNCw3IEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBhZGRTbG93Q2FzZShz
bG93UGF0aHMpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
ZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5
dGVjb2RlKTsKQEAgLTM0MSwxMiArMzQxLDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9
IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNh
bGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CiAKICAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewpAQCAtMzU0LDcg
KzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CkBAIC0zOTUsNyArMzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0
b3Jfb3Blbihjb25zdCBJbgogICAgIEpTVmFsdWVSZWdzIG5leHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
dGFnTmV4dEdQUiwgcGF5bG9hZE5leHRHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssCiAgICAg
ICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAogICAgICAgICBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksCiAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwKQEAgLTQxMCw3ICs0MDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVy
YXRvcl9vcGVuKGNvbnN0IEluCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
ICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG5leHRSZWdzKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG5leHRS
ZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgbmV4dFJl
Z3MpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKQEAgLTQ0MCwxMCArNDM5LDEwIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKIAogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZSgKLSAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0
YQorICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCAvLyBtZXRhZGF0
YQogICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgogICAgICAg
ICBuZXh0VlJlZywgLy8gcmVzdWx0Ci0gICAgICAgIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmls
ZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCiAgICAgICAgIGdlbi5zdHViSW5mbygp
LCAvLyBhcmcyCiAgICAgICAgIEpTVmFsdWVSZWdzKHRhZ0l0ZXJhdG9yR1BSLCBwYXlsb2FkSXRl
cmF0b3JHUFIpLCAvLyBhcmczCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKQEAgLTQ1Miw3
ICs0NTEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAg
YXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIo
bV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogCiAgICAgZG9uZS5saW5rKHRoaXMp
OwogfQpAQCAtNDYwLDcgKzQ1OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9v
cGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewog
ICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNhc2UgTmFy
cm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC01MDYsNyArNTA1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBw
cmVzZXJ2ZWRSZWdzLmFkZCh0YWdWYWx1ZUdQUik7CiAgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRk
KHBheWxvYWRWYWx1ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssCisgICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssCiAgICAg
ICAgICAgICBKSVRUeXBlOjpCYXNlbGluZUpJVCwKICAgICAgICAgICAgIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwKICAgICAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwKQEAgLTUzMywxMCArNTMyLDEwIEBAIHZvaWQgSklU
OjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
ID0gcmVnVDY7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Q3OwogICAgICAgICBjb25z
dCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAg
ICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJl
Z3ModGFnRG9uZUdQUiwgcGF5bG9hZERvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJy
YW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHRhZ0RvbmVHUFIsIHBheWxvYWREb25lR1BS
KSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogCiAg
ICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ss
CisgICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICBKSVRUeXBlOjpCYXNl
bGluZUpJVCwKICAgICAgICAgICAgIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwKICAgICAg
ICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpKSwKQEAgLTU4OCwxMCArNTg3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9uZXh0KGNvbnMKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICAg
ICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICAgICAg
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAgICAgICAgICAg
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgLy8gbWV0YWRhdGEKICAgICAgICAg
ICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgLy8gb3BlcmF0aW9uCiAgICAgICAgICAgICBk
b25lVlJlZywgLy8gcmVzdWx0Ci0gICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKKyAgICAgICAgICAgIFRydXN0ZWRJbW1QdHIobV9w
cm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKICAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLCAvLyBhcmcyCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVyUmVzdWx0
R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFyZzMKICAgICAgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7IC8vIGFyZzQKQEAgLTYwMiw3ICs2MDEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dChjb25zCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChq
dW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIo
bV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgIH0KIAogICAgIHsgICAKQEAg
LTYxOCwxMCArNjE3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNv
bnMKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICAgICAgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICAgICAgYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAgICAgICAgICAgYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgLy8gbWV0YWRhdGEKICAgICAgICAgICAgIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwgLy8gb3BlcmF0aW9uCiAgICAgICAgICAgICB2YWx1ZVZSZWcs
IC8vIHJlc3VsdAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCAvLyBhcmcxCisgICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8o
KSwgLy8gYXJnMgogICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnSXRlclJlc3VsdEdQUiwgcGF5
bG9hZEl0ZXJSZXN1bHRHUFIpLCAvLyBhcmczCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOyAvLyBh
cmc0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRl
ICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFt
ZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50
LmgiCkBAIC00NCw3ICs0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0
ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAK
QEAgLTUzLDE4ICs1NCwxOCBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAh
PSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdz
CiAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNv
ZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQpCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZz
ZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRl
Y29kZSwgY2hlY2twb2ludCkpOwogCisKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldEluY2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFy
cmF5UHJvZmlsZUZvcihtZXRhZGF0YSwgY2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1
Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBP
cENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0lu
Zm86Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNl
ZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAt
NzgsNyArNzksNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9j
YWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAg
fHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNv
bXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1Zh
bHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50
cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVy
YXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6
ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJh
dGlvbihzaXplT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRp
b24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7
CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAg
IGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEs
IHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAq
IHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEs
MTQgKzEwMywxNiBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAg
ICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJh
bWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFy
YXJnc0ZyYW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFy
Z09mZnNldCwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxP
cGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJn
T2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAg
Ly8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEs
IENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9h
ZDMyKGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1Qw
KTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsK
LSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1Qw
KTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0
ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRk
cmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKCkpKTsKICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5p
dGlhbGl6ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEzMSwxNSBAQCBib29sIEpJVDo6Y29tcGlsZUNh
bGxFdmFsKGNvbnN0IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwo
Y29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigt
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3Rlciwg
QWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0KLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSks
IHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxG
cmFtZVJlZ2lzdGVyLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFt
ZU9mZnNldCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2Rl
LnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOworICAgIHJlc2V0U1Ao
KTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjIpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNhbGxFdmFsLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJldHVyblZhbHVlR1BSKSk7CiAKICAg
ICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiAKQEAgLTE0OCw3ICsxNTEsNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZh
bD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJ
bmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZv
ID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsK
ICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBp
bnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAtMTU2LDQzICsxNTksNDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKIAogICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVn
aXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSwgcmVnVDApOwotICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAgIHJlc2V0U1AoKTsKIAog
ICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
T3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwg
dW5zaWduZWQpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRD
YWxsTGlua0luZm8qLCB1bnNpZ25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENh
bGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXgpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9w
VGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZv
Q29uc3RhbnQpCiB7Ci0gICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAg
c2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxl
RGF0YS5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAg
IHNodWZmbGVEYXRhLm51bUxvY2FscyA9CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNo
dWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+
KCk7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Cisg
ICAgc2h1ZmZsZURhdGEtPm51bVBhcmFtZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCk7CisgICAgc2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5m
bzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAgc2h1ZmZsZURhdGEtPm51bUxvY2FscyA9CiAgICAg
ICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihS
ZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsK
KyAgICBzaHVmZmxlRGF0YS0+YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1
ZmZsZURhdGEuYXJnc1tpXSA9CisgICAgICAgIHNodWZmbGVEYXRhLT5hcmdzW2ldID0KICAgICAg
ICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKICAgICAgICAgICAgICAg
ICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5t
X2FyZ3YsCiAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKICAgICB9Ci0gICAgc2h1ZmZs
ZURhdGEuY2FsbGVlID0KLSAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFG
b3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29k
ZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAg
ICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFG
b3JtYXRKUyk7CisgICAgc2h1ZmZsZURhdGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVn
aXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwog
Ci0gICAgSnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRo
aXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKLSAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsK
KyAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CisgICAgICAgIENhbGxGcmFtZVNo
dWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgIH0p
OwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CisKKyAgICBzaHVmZmxlRGF0YS0+c2hyaW5r
VG9GaXQoKTsKKyAgICBpbmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0
YSk7CisKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247
CiAgICAgCkBAIC0yMTgsMTQgKzIyNSwyNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25z
dCBJbnN0cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2Rl
QmxvY2suCiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVy
IHJldHVybi4KICAgICAqLwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAg
aWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2Nr
LT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBjb21w
aWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CisKKyAgICBVbmxpbmtlZENhbGxMaW5rSW5m
byogaW5mbyA9IG51bGxwdHI7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBpbmZvQ29u
c3RhbnQgPSBVSU5UX01BWDsKKyAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKSB7Cisg
ICAgICAgIGluZm8gPSBtX3VubGlua2VkQ2FsbHMuYWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2Fs
bExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZv
LCBpbmZvKTsKKworICAgICAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9
PSBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBl
bmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS51bmxpbmtlZENhbGxMaW5rSW5mbyA9IGluZm87CisgICAgICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29u
c3RhbnQgPSBpbmZvQ29uc3RhbnQ7CisgICAgfQorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVj
b2RlLCBpbmZvQ29uc3RhbnQpOwogCiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0g
ICAgYXV0byBieXRlY29kZUluZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1
Y3Rpb24pOwotICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNv
ZGVJbmRleCkuYml0cygpOworICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9j
YXRpb25CaXRzKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpICsgVGFnT2Zmc2V0KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwg
cmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxsZWUuCkBAIC0yMzQsMTYgKzI1MiwxMiBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxs
RXZhbChieXRlY29kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21w
aWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRV
cENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBt
X2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBp
bmZvOwotCi0gICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJ
bmZvSW5kZXgpKQorICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxM
aW5rSW5mb0luZGV4LCBpbmZvQ29uc3RhbnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBsb2Fk
Q29uc3RhbnQoaW5mb0NvbnN0YW50LCByZWdUMik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cykgewotICAgICAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsm
XSB7CisgICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxE
YXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0gewogICAgICAgICAgICAgZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xv
dyhyZWdUMik7CiAgICAgICAgIH0pOwpAQCAtMjUzLDE0ICsyNjcsMTMgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdU
MiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Olllcyk7CisgICAgYXV0byBzbG93UGF0aHMgPSBD
YWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyKTsKICAg
ICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhz
KTsKIAogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxv
Y2F0aW9uID0gZG9uZUxvY2F0aW9uOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKKyAgICByZXNldFNQKCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRl
Y29kZSk7CiB9CkBAIC0yNzMsMjEgKzI4NiwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNs
b3dDYXNlKGNvbnN0IEluCiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgbV9j
YWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFi
ZWwoKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29uc3RhbnQobV9j
YWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFu
dCwgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7
Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0lu
Zm8tPmVtaXRTbG93UGF0aCgqbV92bSwgKnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdERh
dGFJQ1Nsb3dQYXRoKCptX3ZtLCAqdGhpcywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRX
aXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIHJl
c2V0U1AoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzk1LDE3ICs0MDcsMzEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogCiAgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwogICAgIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisKKyAgICBtb3ZlKHJlZ1QwLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQg
T1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEdQUik7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAg
ICAgZmFzdENhc2UubGluayh0aGlzKTsKIH0KQEAgLTQxNiwxMCArNDQyLDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdU
MDsKKyAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CiAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKGl0ZXJhdG9yR1BSKSk7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5v
dE9iamVjdChpdGVyYXRvckdQUikpOwpAQCAtNDMyLDE5ICs0NTYsMTcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5v
bkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5l
eHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjAsIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIH0gZWxzZQotICAg
ICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0
b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
aWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBtb3ZlKGl0ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVj
b2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogCiAgICAgYXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2Jq
ZWN0LmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9y
UmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQ
UjApOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwogfQpAQCAtNDUyLDcgKzQ3NCw2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0
ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgYXV0byogdHJ5
RmFzdEZ1bmN0aW9uID0gKFsmXSAoKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndp
ZHRoKCkpIHsKICAgICAgICAgY2FzZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9m
YXN0X25hcnJvdzsKQEAgLTQ3MCw1MCArNDkxLDc5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJh
dG9yX25leHQoY29uc3QgSW4KICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWws
IEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQz
Ml90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwogCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0
aGlzKTsKLSAgICBvcjgoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlv
bk1vZGU6OkdlbmVyaWMpKSwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2l0ZXJhdGlvbk1l
dGFkYXRhLnNlZW5Nb2RlcykpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEl0
ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJh
dGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSwgcmVnVDApOworICAgIG9yMzIo
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMp
KSwgcmVnVDApOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJh
dG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlv
bk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSk7CiAgICAgY29tcGlsZU9wQ2FsbDxP
cEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAg
YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2
YWx1ZSB9IEpTT2JqZWN0KSBpbiByZWdUMAogCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDA7
Ci0gICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKLSAgICBHUFJSZWcgZG9uZUdQUiA9
IHJlZ1QxOwotICAgIC8vIGl0ZXJSZXN1bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmly
c3QgZ2V0IGJ5IGlkIGJlbG93LgotICAgIG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOwogCisgICAgY29uc3RleHByIEdQUlJl
ZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CiAgICAgewotICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaXRlclJlc3VsdEdQUik7CisgICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSBiYXNlR1BSKTsKKwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICAgICAg
UmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVncyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKTsKLSAgICAgICAgcHJlc2VydmVkUmVncy5hZGQodmFsdWVHUFIpOworICAgICAg
ICBwcmVzZXJ2ZWRSZWdzLmFkZChpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKLSAgICAg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
dm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRH
UFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgcmVnVDMsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwot
ICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCisgICAg
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsK
KworICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgcmVzZXRTUCgpOyAv
LyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJl
c2V0IFNQCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1
ZVJlZ3MgeyBkb25lR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENo
ZWNrcG9pbnQoKTsKICAgICB9CiAKLQogICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDI7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdpc3Rl
clNldCB1c2VkUmVnaXN0ZXJzKGRvbmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7
CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3Jh
dGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVy
YXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUg
PSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNj
cmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIGdsb2JhbEdQUik7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtb3Zl
KGl0ZXJDYWxsUmVzdWx0R1BSLCBiYXNlR1BSKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQsIEFjY2Vzc1R5
cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5h
bWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlk
OworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9T
UiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVl
R1BSIH0pOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUs
IHZhbHVlR1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNW
YWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxp
bmsodGhpcyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1NzcsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJh
dG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250
Q2xvYmJlclJlZ2lzdGVyOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJl
ZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdU
MjsKIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlzdCBu
b3RPYmplY3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJS
ZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRl
ckNhbGxSZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2
bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAgICAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0LmFw
cGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVj
dC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAotICAgICAg
ICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFy
Z0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86
Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihkb25lVlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJn
dW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
ICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworCisg
ICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKwor
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgZG9u
ZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
aXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9p
bnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25U
aHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAgfQogCiAg
ICAgeyAgIAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0
ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQg
PSB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAg
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVy
UmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCku
cmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsMTEgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogCisKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKKwogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBD
b21tb25EYXRhOwogY2xhc3MgSklUQ29kZTsKQEAgLTE1OSwxMCArMTYyLDEwIEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgewotICAg
ICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURhdGFJ
Q0luT3B0aW1pemluZ0pJVCgpOwogICAgIH0KIApAQCAtMjIzLDYgKzIyNiw4IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNTaGFyZWQoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlQXR0cmlidXRlID09
IFNoYXJlQXR0cmlidXRlOjpTaGFyZWQ7IH0KIAorICAgIHZpcnR1YWwgUENUb0NvZGVPcmlnaW5N
YXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorCiBwcml2YXRlOgog
ICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFNoYXJlQXR0cmlidXRlIG1fc2hhcmVBdHRyaWJ1
dGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9u
S2V5LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb21waWxhdGlvbktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgdm9p
ZCBKSVRDb21waWxhdGlvbktleTo6ZHVtcChQcmludFN0cmVhbQogICAgICAgICBvdXQucHJpbnQo
IjxlbXB0eT4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBvdXQucHJpbnQoIihDb21w
aWxlIG9mICIsICptX3Byb2ZpbGVkQmxvY2ssICIgd2l0aCAiLCBtX21vZGUsICIpIik7CisgICAg
b3V0LnByaW50KCIoQ29tcGlsZSBvZiAiLCBSYXdQb2ludGVyKG1fY29kZUJsb2NrKSwgIiB3aXRo
ICIsIG1fbW9kZSwgIikiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5oCShyZXZpc2lvbiAyODMw
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDU3ICszMCw1NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xh
c3MgQ29kZUJsb2NrOwotY2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgSlNDZWxsOwogCiBjbGFz
cyBKSVRDb21waWxhdGlvbktleSB7CiBwdWJsaWM6CiAgICAgSklUQ29tcGlsYXRpb25LZXkoKQot
ICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhudWxscHRyKQorICAgICAgICA6IG1fY29kZUJsb2Nr
KG51bGxwdHIpCiAgICAgICAgICwgbV9tb2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENv
bXBpbGF0aW9uKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgSklUQ29tcGlsYXRpb25LZXkoV1RG
OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhu
dWxscHRyKQorICAgICAgICA6IG1fY29kZUJsb2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9tb2Rl
KEpJVENvbXBpbGF0aW9uTW9kZTo6REZHKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgSklUQ29t
cGlsYXRpb25LZXkoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGUg
bW9kZSkKLSAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKKyAgICBKSVRD
b21waWxhdGlvbktleShKU0NlbGwqIHByb2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBt
b2RlKQorICAgICAgICA6IG1fY29kZUJsb2NrKHByb2ZpbGVkQmxvY2spCiAgICAgICAgICwgbV9t
b2RlKG1vZGUpCiAgICAgewogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgPT0gSklU
Q29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CisgICAgICAgIHJldHVybiAhbV9j
b2RlQmxvY2sgJiYgbV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0
aW9uOwogICAgIH0KICAgICAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSAhPSBK
SVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuICFt
X2NvZGVCbG9jayAmJiBtX21vZGUgIT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGls
YXRpb247CiAgICAgfQogICAgIAotICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaygpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvZmlsZWRCbG9jazsgfQogICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEpJVENvbXBpbGF0aW9uS2V5JiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX3Byb2ZpbGVkQmxvY2sgPT0gb3RoZXIubV9wcm9maWxlZEJsb2NrCisgICAgICAgIHJldHVy
biBtX2NvZGVCbG9jayA9PSBvdGhlci5tX2NvZGVCbG9jawogICAgICAgICAgICAgJiYgbV9tb2Rl
ID09IG90aGVyLm1fbW9kZTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjpwYWlySW50SGFzaChXVEY6OlB0ckhhc2g8Q29k
ZUJsb2NrKj46Omhhc2gobV9wcm9maWxlZEJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5
aW5nX3R5cGU8SklUQ29tcGlsYXRpb25Nb2RlPjo6dHlwZT4obV9tb2RlKSk7CisgICAgICAgIHJl
dHVybiBXVEY6OnBhaXJJbnRIYXNoKFdURjo6UHRySGFzaDxKU0NlbGwqPjo6aGFzaChtX2NvZGVC
bG9jayksIHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPEpJVENvbXBpbGF0aW9uTW9k
ZT46OnR5cGU+KG1fbW9kZSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsK
KyAgICAvLyBFaXRoZXIgQ29kZUJsb2NrKiBvciBVbmxpbmtlZENvZGVCbG9jayogZm9yIGJhc2xl
bGluZSBKSVQuCisgICAgSlNDZWxsKiBtX2NvZGVCbG9jazsKICAgICBKSVRDb21waWxhdGlvbk1v
ZGUgbV9tb2RlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJbmxpbmVBY2Nl
c3MuaCIKKyNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIApAQCAtNDYsMTAgKzQ3LDkgQEAgc3RhdGljIFN0cnVj
dHVyZVN0dWJJbmZvKiBnYXJiYWdlU3R1YkluZgogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJ
VElubGluZUNhY2hlR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBl
IGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwg
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzKQotICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICwgbV9qaXRUeXBlKGppdFR5
cGUpCisgICAgOiBtX2ppdFR5cGUoaml0VHlwZSkKIHsKLSAgICBtX3N0dWJJbmZvID0gbV9jb2Rl
QmxvY2sgPyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikg
OiBnYXJiYWdlU3R1YkluZm8oKTsKKyAgICBtX3N0dWJJbmZvID0gY29kZUJsb2NrID8gY29kZUJs
b2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5m
bygpOwogICAgIG1fc3R1YkluZm8tPmNhbGxTaXRlSW5kZXggPSBjYWxsU2l0ZTsKIAogICAgIG1f
c3R1YkluZm8tPnVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzOwpAQCAtNTksNyArNTksNiBA
QCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBMaW5rQnVmZmVy
JiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiBzdGFydCkKIHsKICAgICBtX3N0dWJJbmZvLT5zdGFydCA9IHN0YXJ0
OwotCiAgICAgbV9zdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gZmFzdFBhdGgubG9jYXRpb25PZjxK
U0ludGVybmFsUHRyVGFnPihtX2RvbmUpOwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
bV9qaXRUeXBlKSkKQEAgLTY3LDYgKzY2LDE1IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3I6OmZpbmFsaXplKAogICAgIG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHNs
b3dQYXRoLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc2xvd1BhdGhCZWdpbik7
CiB9CiAKK3ZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQ
UikKK3sKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoSklU
Q29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1Yklu
Zm8sIHN0dWJJbmZvR1BSKTsKKyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJ
ZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBz
dHViSW5mb0dQUikKQEAgLTExMCw3ICsxMTgsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRH
ZXRCeUlkR2VuZXJhdG9yCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlw
ZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHVi
SW5mb0dQUiwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAgIDogSklUQnlJZEdlbmVyYXRvcihj
b2RlQmxvY2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBlLCB1c2Vk
UmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCi0gICAgLCBtX2lzTGVuZ3RoQWNj
ZXNzKHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLmltcGwoKSkKKyAgICAsIG1faXNMZW5ndGhBY2Nlc3MoY29kZUJsb2NrICYmIHByb3Bl
cnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmlt
cGwoKSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50
YWdHUFIoKSk7CiB9CkBAIC0xMjAsNiArMTI4LDM3IEBAIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRv
cjo6Z2VuZXJhdGVGYXN0UGEKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBtX2lzTGVuZ3Ro
QWNjZXNzID8gSW5saW5lQWNjZXNzOjpzaXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVBY2Nl
c3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAorCisjaWYgVVNFKEpTVkFMVUU2NCkK
K3N0YXRpYyB2b2lkIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhKSVQmIGppdCwgR1BSUmVn
IHN0dWJJbmZvR1BSLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyByZXN1bHQp
Cit7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxs
SGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZSgpKSk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoKTsK
KyAgICBqaXQubG9hZFByb3BlcnR5KGJhc2UsIHNjcmF0Y2gsIEpTVmFsdWVSZWdzIHsgcmVzdWx0
IH0pOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFj
Y2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhz
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1
YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0KTsKK30KKwordm9pZCBK
SVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBq
aXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9
IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9H
UFIpOworICAgIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhqaXQsIHN0dWJJbmZvR1BSLCBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgbV9kb25l
ID0gaml0LmxhYmVsKCk7Cit9CisjZW5kaWYKKwogSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9y
OjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyLCBKU1ZhbHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJl
Z3MgdGhpc1JlZ3MsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTEzOCw2ICsxNzcsMjAgQEAgdm9p
ZCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYQogICAgIGdlbmVyYXRlRmFzdENv
bW1vbihqaXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCisj
aWYgVVNFKEpTVkFMVUU2NCkKK3ZvaWQgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpnZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBH
UFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0
YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0
LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGdlbmVyYXRlR2V0QnlJ
ZElubGluZUFjY2VzcyhqaXQsIHN0dWJJbmZvR1BSLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1Jl
Z2lzdGVyczo6YmFzZSwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnNjcmF0Y2gs
IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgbV9kb25l
ID0gaml0LmxhYmVsKCk7Cit9CisjZW5kaWYKKwogSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0
QnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBl
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgIEpTVmFs
dWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJl
ZyBzY3JhdGNoLCAKQEAgLTE0OSw2ICsyMDIsMzYgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklU
UHV0QnlJZEdlbmVyYXRvcgogICAgIG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMuY2xlYXIoc2Ny
YXRjaCk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9y
OjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJ
bmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6
dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisg
ICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworCisgICAgR1BSUmVn
IGJhc2UgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHNjcmF0
Y2ggPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgR1BSUmVnIHNjcmF0
Y2gyID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBHUFJSZWcgdmFs
dWUgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworCisgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBz
a2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNj
cmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmxvYWQz
MihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQuc3RvcmVQcm9wZXJ0
eShKU1ZhbHVlUmVncyB7IHZhbHVlIH0sIGJhc2UsIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKKyAgICBh
dXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJbmxpbmVBY2Nlc3MubGluaygm
aml0KTsKKyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRy
VGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25lID0gaml0LmxhYmVs
KCk7Cit9CisjZW5kaWYKKwogdm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQ
YXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQpCiB7CiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwg
SW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlSZXBsYWNlKCkpOwpAQCAtMjAwLDcgKzI4Myw3
IEBAIHZvaWQgSklURGVsQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0
ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7
CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZv
KSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGpp
dC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BS
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0
clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJs
ZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTIzNiw3ICszMTksNyBAQCB2
b2lkIEpJVERlbEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhCiAgICAgbV9zdGFydCA9IGpp
dC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1f
c3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFy
SnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1w
KCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0yNzAsNyArMzUzLDcgQEAgdm9pZCBK
SVRJbkJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIG1fc3RhcnQgPSBqaXQubGFi
ZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJ
bmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAg
ICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwog
ICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtMzAwLDYgKzM4MywzNCBAQCB2b2lkIEpJVElu
QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0CiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGpp
dCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKKyNpZiBVU0Uo
SlNWQUxVRTY0KQordm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQ
UikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7
CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0
dWJJbmZvLCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpiYXNlOworICAgIEdQUlJlZyByZXN1bHQgPSBCYXNlbGluZUluQnlJZFJlZ2lz
dGVyczo6cmVzdWx0OworICAgIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3Rl
cnM6OnNjcmF0Y2g7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQuYm94Qm9vbGVhbih0cnVlLCBKU1ZhbHVlUmVncyB7
IHJlc3VsdCB9KTsKKyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJ
bmxpbmVBY2Nlc3MubGluaygmaml0KTsKKyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSks
IEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAg
bV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisjZW5kaWYKKwogSklUSW5zdGFuY2VPZkdlbmVyYXRv
cjo6SklUSW5zdGFuY2VPZkdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklU
VHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNp
dGVJbmRleCwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgcHJvdG90eXBlLCBHUFJSZWcgc3R1YkluZm9HUFIs
CkBAIC0zMzIsNyArNDQzLDcgQEAgdm9pZCBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpnZW5lcmF0
ZUZhcwogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAg
aml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRy
VGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1Yklu
Zm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSks
IEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1
bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAt
MzY4LDcgKzQ3OSw3IEBAIHZvaWQgSklUR2V0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAK
ICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyht
X2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5j
YWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7
CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5t
X3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRT
dHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0g
aml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTQwNSw3
ICs1MTYsNyBAQCB2b2lkIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQCiAgICAg
bV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRU
eXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9z
dHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAg
ICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJv
dXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5w
YXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC00NDAsNyArNTUx
LDcgQEAgdm9pZCBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I6OmdlbgogICAgIG1fc3Rh
cnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkp
IHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1Yklu
Zm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAg
aml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5l
UHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hh
YmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEpJ
VCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25WYWxp
ZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFs
dWUuaCIKICNpbmNsdWRlICJQdXRLaW5kLmgiCkBAIC0zOCwxMSArMzksMTIwIEBAIG5hbWVzcGFj
ZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNsYXNzIENhbGxTaXRlSW5kZXg7
CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsK
K3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNzIEFjY2Vzc1R5
cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCisjaWYgVVNFKEpT
VkFMVUU2NCkKK3N0cnVjdCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZURl
bEJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJ
bmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86
OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpy
ZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGlu
ZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5n
IGEgQ29kZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0
dWJJbmZvLgorICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHN0YXRpY19hc3NlcnQoc3R1Yklu
Zm8gPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm8pOworCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5mbzo6cmVnVDU7Cit9OworCitzdHJ1Y3Qg
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2
YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBwcm90byA9IEdQUkluZm86OmFyZ3VtZW50R1BSMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mbyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOworfTsKKworc3Ry
dWN0IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86
OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGRvbnRDbG9iYmVyUmVnaXN0ZXIg
PSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1Jl
Z2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6
cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1Qx
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOwor
fTsKKworc3RydWN0IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyByZXN1bHQgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpiYXNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworfTsKKworc3RydWN0
IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
R1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBH
UFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGUgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3RydWN0
IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
YnJhbmQgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChicmFuZCA9PSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisjZW5kaWYKKwogY2xhc3Mg
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hl
R2VuZXJhdG9yKCkgeyB9CkBAIC02MiwxMiArMTcyLDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZp
bmFsaXplKAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZm
ZXImIHNsb3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBz
dHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2Vk
U3R1YkluZm8geyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBw
cm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0
VHlwZTsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgorICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX2RvbmU7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKQEAgLTk4LDcgKzIxNCw3IEBA
IHByb3RlY3RlZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92
YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworcHVibGljOgogICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTExLDYgKzIy
Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSk7CiAgICAgCiAgICAgdm9pZCBnZW5l
cmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0
dWJJbmZvR1BSKTsKIAogcHJpdmF0ZToKICAgICBib29sIG1faXNMZW5ndGhBY2Nlc3M7CkBAIC0x
MjQsNiArMjQxLDcgQEAgcHVibGljOgogICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywg
Q2FjaGVhYmxlSWRlbnRpZmllciwKICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVS
ZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCisg
ICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1
YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICB2b2lkIGdlbmVyYXRlRmFz
dFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIH07CiAKQEAgLTEzMiwxMCArMjUwLDExIEBAIHB1Ymxp
YzoKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJ
ZEdlbmVyYXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2Fs
bFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlk
ZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBH
UFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7Cisg
ICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAg
ICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZv
R1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQg
Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJl
ZyBzdHViSW5mb0dQUik7CiAgICAgCiAgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0
aEZ1bmN0aW9uKCk7CiAKQEAgLTE2MywxMSArMjgyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBn
ZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1
ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBt
X3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTE5MSw4ICszMDgsNiBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hh
YmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMzEsNiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0
ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNTQsNiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
IAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI1NSw2
ICszNjYsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdz
IHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRo
KE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsK
IH07CiAKIGNsYXNzIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IgewpAQCAtMjc3LDggKzM4OSw2IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZmluYWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBz
bG93UGF0aExpbmtCdWZmZXIpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhK
dW1wOwogfTsKIApAQCAtMzAyLDExICs0MTIsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBn
ZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1
ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0OwogCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAg
bV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMzAsOCArNDM4LDYgQEAgcHVibGljOgogICAgIAog
ICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgot
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQ
YXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENv
bnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0Nv
bnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAo
IXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsK
K30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtU
aW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpp
c0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBBbGwgbGluayB0aW1l
IGNvbnN0YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQog
ewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9j
ay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0
ZXIgZW50cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
cHBlbmRDYWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+
Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRh
dGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxS
ZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3Qg
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRz
dCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFs
dWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVn
cyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwg
cmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2Fs
bDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVy
IGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmls
ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdp
c3RlciBkc3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpT
VmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJl
dHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1
cm5WYWx1ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Ns
b3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
VmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2Vs
bChyZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aGFzQW55U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2lu
dCgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1l
dGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlv
biwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwor
ICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2lu
dCgpICsgMSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9i
eXRlY29kZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBK
SVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xv
d1RvSG90Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVy
aW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMg
c2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAg
IG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
LCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBt
X2NoZWNrcG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgs
MjkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNf
SU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNy
YykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2Vs
bCgpKS0+bGVuZ3RoKCkgPT0gMTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Okxp
bmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmls
ZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2hvdWxk
RW1pdFByb2ZpbGluZygpKTsKIAotICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRp
b246IG9ubHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBz
dG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVl
UHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vsc2UKICAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVBy
b2ZpbGUubV9idWNrZXRzKTsKICAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2Ny
aXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKICAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVz
Y3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKIH0KKyNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShP
cDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
ICNlbmRpZgpAQCAtMzIzLDQxICszNDgsMzcgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3Rk
Ojppc19zYW1lPGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJ
ZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgot
aW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCisjaWYgVVNFKEpTVkFMVUU2NCkKK3RlbXBsYXRlPHR5cGVu
YW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFz
aG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSksIHZhbHVlKTsKLX0KIAotI2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQ
UlJlZyByZXN1bHRSZWcpCi17Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2Zp
bGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29k
ZSkgKyB2YWx1ZVByb2ZpbGVPZmZzZXRGb3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVj
a3BvaW50KCkpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7CisgICAgc3Rv
cmU2NCh2YWx1ZS5ncHIoKSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBvZmZzZXQpKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3Vs
dFJlZykpOwogfQogI2VuZGlmCiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiBhcnJheVByb2Zp
bGUsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
K2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3Rl
cklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoc2hvdWxkRW1p
dFByb2ZpbGluZygpKSB7CiAgICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhj
ZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgc3RvcmUzMihzY3JhdGNoR1BSLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3Ry
dWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVj
b2RlLCBvZmZzZXRPZkFycmF5UHJvZmlsZSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lz
dGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwg
UmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQogewotICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKLSAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNj
cmF0Y2hHUFIsIEFkZHJlc3MoYXJyYXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9m
TGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKSk7Ci0gICAgfQorICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJv
ZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2Vs
bEdQUiwgc2NyYXRjaEdQUik7CiB9CiAKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9w
ZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQpAQCAtMzgwLDcgKzQwMSw3IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVl
KQogewogICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rlcihy
ZWcpOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91
bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91
YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQog
ICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcgKzUx
Nyw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5l
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJl
ZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYg
KCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcgKzUy
Nyw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5l
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJl
ZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwo
cmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlz
Q29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVs
c2UKQEAgLTUxNCwxMSArNTM1LDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNl
SWZOb3RKUwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29u
c3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3Rh
bnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3Ax
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25z
dGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0LDEx
ICs1NjAsMTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAg
IEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
SW5kZXggaXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAo
IXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobV9wcm9m
aWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKSB7
CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoc3JjKTsKICAgICAgICAgICAgIG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KSksIGRzdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0
YW50KHNyYywgZHN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTY2LDExICs1ODIs
NiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1
cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7
Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwg
YWRkcmVzc0Zvcihkc3QpKTsKQEAgLTU5NSw3ICs2MDYsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcp
CiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFp
c0tub3duQ2VsbCh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Zyk7CiB9CiAKQEAgLTYzNywzMCArNjQ4LDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1w
VGFyZ2V0KGNvbnN0IAogewogICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7
Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9u
KTsKLX0KLQotQUxXQVlTX0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhP
cFB1dFRvU2NvcGUgYnl0ZWNvZGUpCi17Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9t
ZXRhZGF0YUlEICsgMTsgLy8gSGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1
dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRl
cmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1
dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0
UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQ
dXRJbmZvOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUg
QmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVj
b2RlKQotewotICAgIHVpbnQ2NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5
T3A6Om9wY29kZUlEKSArIDEpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2Rl
Lm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxl
cy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFBy
b2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJp
dGhQcm9maWxlOwotICAgIG1fY29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2Zp
bGUpOwotICAgIHJldHVybiBhcml0aFByb2ZpbGU7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
QmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KQEAgLTY4MSw2ICs2NjksNjAgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBK
SVQ6OmVjbWFNb2RlPE9wUAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQ
dHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBH
UFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29k
ZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQz
MihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCku
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxv
YWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwg
R1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2Rl
KSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUs
IHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRh
ZGF0YShWYWx1ZVR5cGUgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9m
ZnNldCkKK3sKKyAgICBzdG9yZTgodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxp
bmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUp
ICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OnN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwgY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlMzIodmFsdWUsIEFk
ZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZz
ZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQs
IEdQUlJlZyByZXN1bHQpCit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29k
ZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZz
ZXQpLCBzX21ldGFkYXRhR1BSLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
Ojpsb2FkQ29uc3RhbnQoSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBH
UFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX2NvbnN0YW50c0dQUiwgc3Rh
dGljX2Nhc3Q8dWludHB0cl90Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7
CisgICAgbG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVn
aXN0ZXIgY29uc3RhbnQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY29u
c3RhbnQuaXNDb25zdGFudCgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBDb2Rl
QmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkpLCByZXN1bHQpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9m
KHZvaWQqKSksIHJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwog
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2Jq
ZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFs
bG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpT
RmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxs
b2NhdG9ySWZFeGlzdHMpOwpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXdfb2JqZWN0KGNvbnN0IEkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7
CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAm
dm0oKSwgc3RydWN0dXJlKTsKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9v
dmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdExvYWRQYXlsb2FkKGhhc0luc3RhbmNlVmFs
dWUsIHJlZ1QwKTsKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wu
aGFzSW5zdGFuY2Ugd291bGQgZG8uCiAgICAgSnVtcCBoYXNJbnN0YW5jZVZhbHVlTm90Q2VsbCA9
IGVtaXRKdW1wSWZOb3RKU0NlbGwoaGFzSW5zdGFuY2VWYWx1ZSk7Ci0gICAgSnVtcCBjdXN0b21o
YXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5
bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFu
Y2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xv
YmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsK
IAogICAgIC8vIFdlIGtub3cgdGhhdCBjb25zdHJ1Y3RvciBpcyBhbiBvYmplY3QgZnJvbSB0aGUg
d2F5IGJ5dGVjb2RlIGlzIGVtaXR0ZWQgZm9yIGluc3RhbmNlb2YgZXhwcmVzc2lvbnMuCiAgICAg
ZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMCk7CkBAIC0xNjIsNyArMTYyLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChwcm90byk7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisg
ICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAg
ICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIHJlZ1Qw
LCAvLyByZXN1bHQKICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCkBAIC0xOTYsNyArMTk2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7CiAgICAg
ZW1pdExvYWRUYWcocHJvdG8sIHJlZ1QzKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMCwgcmVnVDIpLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDEpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDAsIHJlZ1QyKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QxKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKIH0KIApAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsK
ICAgICBlbWl0TG9hZFBheWxvYWQoY29uc3RydWN0b3IsIHJlZ1QyKTsKICAgICBlbWl0TG9hZCho
YXNJbnN0YW5jZVZhbHVlLCByZWdUNCwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5zdGFuY2VPZkN1c3RvbSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBtX3Byb2ZpbGVkQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCByZWdUMiwgSlNW
YWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSk7CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KICAgICAKQEAgLTI0OCw3ICsyNDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9m
aWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29t
cGFyZTMyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzc4LDcgKzM3OCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnMKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbmFtZSA9IGJ5dGVjb2RlLm1fbmFtZTsKICAgICBlbWl0TG9hZFBheWxvYWQoZnVuYywg
cmVnVDEpOwogICAgIGVtaXRMb2FkKG5hbWUsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgp
LCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDA4LDcg
KzQwOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGkKICAgICBH
UFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKICAg
ICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRk
SnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNl
eSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDIyLDcgKzQyMiw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICAgICBKU1ZhbHVlUmVncyB2YWx1ZShy
ZWdUMSwgcmVnVDApOwogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAgIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1QzOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgdmFsdWUs
IHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwor
ICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTQzNyw3ICs0MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0
cnVjCiAKICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4
KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVl
cmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CiAKQEAgLTQ2Myw3ICs0NjMsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1CiAKICAgICBhZGRKdW1w
KGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0
YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCkBAIC01MDQsNyAr
NTA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBK
SVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQ
dHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEpT
VmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVj
aWFsUG9pbnRlcik7CiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKQEAgLTU1
MiwxMyArNTUyLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkK
ICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAg
IC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlu
Z0VxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CiAgICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAo
KSk7CiAKICAgICAvLyBHZW5lcmljIGNhc2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNs
b3dDYXNlKGl0ZXIpKTsgLy8gZG91YmxlcwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fcHJvZmlsZWRC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOwogCiAgICAgc3RvcmVSZXN1bHQubGluayh0aGlzKTsKICAgICBl
bWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtNTkxLDE0ICs1OTEsMTQgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsbwogICAgIGdlbmVyaWNDYXNl
LmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2Uu
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVn
VDAsIHJlZ1QyKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBD
b21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVt
cFRhcmdldCk7CiAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2Fz
ZS4KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVz
CiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpF
cSA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwogCiAgICAg
ZG9uZS5saW5rKHRoaXMpOwpAQCAtNjQzLDEzICs2NDMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5v
dFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
cmVnVDAsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdF
cSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKICAgICBz
dG9yZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAgICBn
ZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAgZ2Vu
ZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9yZVJl
c3VsdC5saW5rKHRoaXMpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZXR1cm5WYWx1
ZUdQUik7CkBAIC03NjIsNyArNzYyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX3Byb2ZpbGVkQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03NzIsNyArNzcyLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0K
IApAQCAtNzkxLDcgKzc5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5z
dHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAs
IHJlZ1QyLCByZWdUMSk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC04
MjMsNyArODIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Ywog
CiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMCwgcmVn
VDIsIHJlZ1QxKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTg0Niw3
ICs4NDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAgICAg
QVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRM
b2FkKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIo
dm0oKSk7CiB9CiAKQEAgLTg2Miw3ICs4NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1i
ZXIoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKICAgICBpc0ludDMyLmxp
bmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkKICAgICAgICAgZW1pdFN0
b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTg4NCw3ICs4ODQsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RyCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3ROdW1iZXIoYXJndW1lbnRWYWx1ZVJlZ3MsIHJlZ1QyKSk7CiAgICAgaXNCaWdJbnQubGluayh0
aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOwogICAgIGlmIChzcmMgIT0gZHN0KQogICAgICAgICBlbWl0U3RvcmUo
ZHN0LCByZWdUMSwgcmVnVDApOwogfQpAQCAtOTE1LDcgKzkxNSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3RvX29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSk7CiAgICAgaWYgKHNyYyAhPSBkc3QpCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJl
Z1QxLCByZWdUMCk7CiB9CkBAIC05MzEsNyArOTMxLDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2Nh
dGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxG
cmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNh
dGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBXaGVu
IHRoZSBMTEludCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdl
J3ZlIGFscmVhZHkgdGllcmVkIHVwCisgICAgLy8gdGhlIHNhbWUgQ29kZUJsb2NrIHRvIGJhc2Vs
aW5lLCBhbmQgd2UnbGwgY2F0Y2ggdGhlIGV4Y2VwdGlvbiBpbiB0aGUgYmFzZWxpbmUgSklUIChi
ZWNhdXNlCisgICAgLy8gd2UgdXBkYXRlZCB0aGUgZXhjZXB0aW9uIGhhbmRsZXJzIHRvIHBvaW50
IGhlcmUpLiBCZWNhdXNlIHRoZSBMTEludCB1c2VzIGEgZGlmZmVyZW50IHZhbHVlCisgICAgLy8g
aW5zaWRlIHNfY29uc3RhbnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdlIHJlc3RvcmUgYWJvdmUg
bWF5IG5vdCBjb250YWluIHRoZSBjb3JyZWN0IHJlZ2lzdGVyLgorICAgIC8vIFNvIHdlIHJlcGxl
bmlzaCBpdCBoZXJlLgorICAgIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFudFBv
b2woKSksIHNfY29uc3RhbnRzR1BSKTsKKyAgICB9CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUs
ICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTk1NCw3ICs5NjUsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMs
IHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0
dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChi
dWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRl
Y29kZUluZGV4LmFzQml0cygpKTsKQEAgLTk5Niw4ICsxMDA3LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUg
PSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBz
d2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29u
c3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3By
b2ZpbGVkQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAg
ICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTAyMywx
MyArMTAzNCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAg
ICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRo
aXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2st
PnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1
bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRCbG9jay0+dW5saW5rZWRTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChT
d2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBT
d2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxl
KHVubGlua2VkVGFibGUpOwogCiAgICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlw
ZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgsIHVubGlu
a2VkVGFibGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsK
IH0KIApAQCAtMTA0MSwxMyArMTA1MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3Ry
aW5nKGNvbnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1f
c2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5h
dGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJv
ZmlsZWRCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJ
bmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmlu
ZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCiAg
ICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBt
X3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiB9
CiAKQEAgLTEwNjgsNyArMTA3OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IElu
c3RydWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBKSVQgY29kZSBkb2Vzbid0IHVzZSB0aGVtLCB3
ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUg
cG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVj
dCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBmb3IgKGludCBpID0g
Q29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCk7IGkgPCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCisgICAgZm9yIChpbnQgaSA9IENv
ZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygp
OyBpIDwgbV9wcm9maWxlZEJsb2NrLT5udW1WYXJzKCk7ICsraSkKICAgICAgICAgZW1pdFN0b3Jl
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3Bh
dGhfZW50ZXIpOwpAQCAtMTA4Nyw3ICsxMDk4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Nj
b3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBj
YWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4q
IGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVy
SUQgY2FsbGVlUmVnID0gcmVnVDA7CkBAIC0xMTIyLDcgKzExMzMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBj
YWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIFZp
cnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIgPSBieXRlY29kZS5tX3NyY0RzdDsKIApAQCAtMTE0
NSw3ICsxMTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydQog
dm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24g
PSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1By
b2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTIzOSw3ICsx
MjUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIGVt
aXRMb2FkVGFnKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMSk7CiAgICAgSlNWYWx1ZVJlZ3Mg
dGhpc1JlZ3MocmVnVDEsIHJlZ1QyKTsKICAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tl
dFJlZywgdGhpc1JlZ3MsIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRS
ZWcsIHRoaXNSZWdzLCByZWdUMywgbV9wcm9maWxlZEJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
MTEgKzU0LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlz
Q29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAg
IHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9y
KGRzdCkpOwotICAgICAgICBlbHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5p
c0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAg
ICAgICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zv
cihkc3QpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25z
dGFudChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NGb3Io
ZHN0KSk7CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NywzNyAr
OTAsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBK
U0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3Vy
cmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSBy
ZWdUMDsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVy
SUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVn
VDM7CiAKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRvIGJ1
dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxv
Y2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVn
LCBzbG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0
UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtdXRhdG9yRmVuY2Uo
Km1fdm0pOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFs
bG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxv
Y2F0b3IoKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUo
KSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1
cmVSZWcpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGF1dG8gYnV0dGVyZmx5ID0g
VHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRS
ZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcs
IGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBsb2FkOChBZGRyZXNzKHN0
cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJl
Zyk7CisgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJl
Zyk7CisgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVn
ID0gcmVnVDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9m
aWxlLnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0xMzEsNyArMTMy
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCiAgICAgLy8gV2Ug
ZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgot
ICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblBy
b3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVx
dWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX2Z1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKSkpOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOwogCkBAIC0xNTQsMzAgKzE1
NiwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJh
bmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3Rl
cnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9u
ZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQu
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3RvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVy
czo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgdmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHBy
b3RvR1BSKTsKICAgICAKICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZh
bCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBT
eW1ib2wuaGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qy
LCB2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CiAKICAgICBKSVRJ
bnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJl
Z1QxLCAvLyBwcm90bwotICAgICAgICByZWdUNSwKLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8g
c2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOwor
ICAgICAgICByZXN1bHRHUFIsCisgICAgICAgIHZhbHVlR1BSLAorICAgICAgICBwcm90b0dQUiwK
KyAgICAgICAgc3R1YkluZm9HUFIsCisgICAgICAgIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVy
czo6c2NyYXRjaDEsIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFu
Y2VPZjsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4p
OwotICAgIAorCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0xOTIs
MTQgKzIwMiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAg
ICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNl
T2ZPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3Bl
cmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFy
Z0dQUjAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIs
IHJlZ1QxKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5m
byA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIpOworICAgIHN0YXRpY19hc3NlcnQoQmFz
ZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9PSBhcmd1bWVudEdQUjMpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJh
dGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKGFyZ3Vt
ZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVz
dWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3Ry
dWN0aW9uKikKQEAgLTI0MCw3ICsyNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNf
dW5kZWZpbmVkKGNvCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
ICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlUHRy
KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzgzLDkgKzM5Miw5IEBAIHZvaWQg
SklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7Ci0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZS
ZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
CkBAIC00MTEsNyArNDIwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0
IElucwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NDIsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bf
c2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0
aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rp
b24sIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwg
cmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1bWVu
dEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ3NCwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9i
YWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQ
Uik7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSks
IHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25a
ZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNDkxLDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1MzAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBK
U0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3Ry
dWN0dXJlLgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVz
dDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVt
cCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQzLDcg
KzU1NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAgICAv
LyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBK
dW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs1OTMsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bf
am5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFs
UG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsK
LSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEND
YWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMy
KDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChi
eXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0
YWRhdGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1
YWwubGluayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2MzQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
anRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BS
ID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVS
ZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFk
ZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDAp
LCB0YXJnZXQpOwpAQCAtNjQwLDcgKzY1MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAg
ICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVu
dHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
cmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25I
YW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzcyMyw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVy
R2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50
R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIx
OwpAQCAtNzIwLDcgKzczMiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIGpp
dC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5jb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRHUFIw
KTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
YXJndW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyArOTIwLDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0
RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5
MzEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiB9CiAKQEAgLTkzMSw3ICs5NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIo
Y29uc3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTY1LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNW
UmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7
CiB9CkBAIC05NzgsNyArOTkyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0
IEluc3RydQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAh
PSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpA
QCAtOTkzLDcgKzEwMDcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1
Y3RpbwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZz
ZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwog
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2Nr
KCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFdoZW4gdGhlIExMSW50IHRocm93
cyBhbiBleGNlcHRpb24sIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFkeSB0aWVy
ZWQgdXAKKyAgICAvLyB0aGUgc2FtZSBDb2RlQmxvY2sgdG8gYmFzZWxpbmUsIGFuZCB3ZSdsbCBj
YXRjaCB0aGUgZXhjZXB0aW9uIGluIHRoZSBiYXNlbGluZSBKSVQgKGJlY2F1c2UKKyAgICAvLyB3
ZSB1cGRhdGVkIHRoZSBleGNlcHRpb24gaGFuZGxlcnMgdG8gcG9pbnQgaGVyZSkuIEJlY2F1c2Ug
dGhlIExMSW50IHVzZXMgYSBkaWZmZXJlbnQgdmFsdWUKKyAgICAvLyBpbnNpZGUgc19jb25zdGFu
dHNHUFIsIHRoZSBjYWxsZWUgc2F2ZXMgd2UgcmVzdG9yZSBhYm92ZSBtYXkgbm90IGNvbnRhaW4g
dGhlIGNvcnJlY3QgcmVnaXN0ZXIuCisgICAgLy8gU28gd2UgcmVwbGVuaXNoIGl0IGhlcmUuCisg
ICAgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
Q29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFu
dHNHUFIpOworICAgIH0KIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1
bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpOwpAQCAtMTAxMSwyMyArMTAzNiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChj
b25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9j
YWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1
ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hv
dWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNC
aXRzKCkpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRl
Y29kZUluZGV4LmFzQml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVj
b2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0
cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAg
IHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwotICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFBy
b2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFu
ZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVn
cyhyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9v
cGVyYW5kLCByZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGlj
X2Nhc3Q8VmFsdWVQcm9maWxlJj4ocHJvZmlsZSksIHJlZ3MpOwotICAgICAgICB9KTsKLSAgICB9
CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKQEAgLTEwNTMsOCArMTA2Niw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVt
cCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVt
ZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtl
ZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVt
cFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
dGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6
OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFi
bGUpOwogCkBAIC0xMDgxLDEzICsxMDk0LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9j
aGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUu
bV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3Rp
bmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0
IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVC
bG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAg
ICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUlu
ZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtl
ZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4p
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEwOTksMjAgKzExMTMsMjIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxS
ZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0
ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBz
dGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJp
bmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0
cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1f
c3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgs
IGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUu
ZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
U3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5r
bm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKICAg
ICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsK
LSAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1Qw
KTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdn
ZXJSZXF1ZXN0cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVn
LCAmdm0oKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAg
ICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTExMzMsNyArMTE0OSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwog
ICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE0OCw3ICsxMTY0LDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjYsNyArMTE4MSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCBy
ZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDIpOwogICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAg
IEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE4OCwxMiArMTIwMywxNCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91
Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAg
Ly8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3Nhcmls
eSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHBy
ZXNzdXJlLgotICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CisgICAg
c2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpOwogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsg
KytqKQogICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGop
KTsKIAotICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOworICAgIAorICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1p
dFdyaXRlQmFycmllcihyZWdUMCk7CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygp
OwogI2Vsc2UKQEAgLTEyMTIsNyArMTIyOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNv
bnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9y
KFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAj
aWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0xMzEw
LDIzICsxMzI3LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUK
IHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEu
bV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fc3JjRHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVj
dFR5cGUpKTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2Fk
MzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNo
ZWRTdHJ1Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRl
Y29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0
aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVn
ID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lz
dGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcgKzEzNTUsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVE
YXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxl
KCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2Nh
dG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVj
dEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5
cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVj
dHVyZVJlZyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJl
Zyk7CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlzOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZDYWNoZWRDYWxsZWUoKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1
bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rp
b25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkp
KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVk
RnVuY3Rpb25SZWcpKTsKICAgICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CkBA
IC0xMzcyLDcgKzEzODUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1
Y3RpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94
Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiB9CkBAIC0xMzgyLDcgKzEzOTYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNv
bnN0IEluc3RydWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEp
OwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihy
ZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0x
Mzk0LDcgKzE0MDksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0K
IApAQCAtMTQwNCw3ICsxNDIwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3Qg
SW5zdHJ1YwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogfQogCkBAIC0xNDE4LDEwICsxNDM1LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mX2N1c3RvbSgKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29k
ZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0g
Ynl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3Is
IHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdU
Mik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1
ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3Vz
dG9tLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwogICAgIGJveEJvb2xlYW4o
cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE0MzAsNyAr
MTQ0OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikK
IHsKLSAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29w
c0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6
aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFy
bHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX3VubGlua2VkQ29kZUJsb2NrLT5s
b29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAgICAgICB1
aW50cHRyX3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0
aW9uKTsKICAgICAgICAgbG9hZFB0cihwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFy
bHlSZXR1cm4gPSBicmFuY2hQdHIoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKE9wdGlvbnM6
OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xNDQwLDcgKzE0NTgs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAjZWxzZQogICAg
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCi0gICAgICAgIG1vdmVWYWx1ZShtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlc3VsdFJlZ3MuZ3ByKCkpOwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVu
dCgpOwogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlKCk7CkBAIC0xNDUzLDggKzE0NzEsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9s
b29wX2hpbnQoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9u
IGNoZWNrOiAKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6
OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAgQWJzb2x1
dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwor
ICAgICAgICAgICAgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVD
b3VudGVyKCkpKSk7CiAgICAgfQogfQogCkBAIC0xNTA5LDcgKzE1MjgsOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UKICAgICBj
b25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTUy
Miw3ICsxNTQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQog
ewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2
XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTE1NjQsMzQgKzE1ODQs
MzYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdSZWdleHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganND
YXN0PFJlZ0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgR1BS
UmVnIGdsb2JhbEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2Jh
bEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2JhbEdQUiwg
anNDYXN0PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkp
KTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxz
ZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1p
dExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKLSAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVj
bChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbCwgYml0d2lzZV9j
YXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNs
KSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKIAogICAgIE9w
Y29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwog
ICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwg
cmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5l
cmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwog
ICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBm
dW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlv
biwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2Ugewog
ICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2MjEsMjMgKzE2NDMsMjQgQEAgdm9p
ZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExv
YWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQo
Ynl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgogCi0gICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUu
bV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4o
c3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBs
b2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBPcDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhw
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxz
ZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVn
VDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0
b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAg
IGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwg
ZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rp
b24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsK
ICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19l
eHApOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTY2NCwyOSArMTY4NywzMCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5Pigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRl
Y29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBhcmd1bWVudEdQUjIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0
YShieXRlY29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRz
dCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgc2l6ZSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29k
ZS5tX2xlbmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2l6ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUs
IHJlZ1QwKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
TmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4
LCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3Qs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogI2Vsc2UKKyAgICBt
YXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6
ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMik7CiAg
ICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFs
bG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0
aFNpemVBbmRQcm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSk7CiAjZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNzE4LDEwIEBAIHZvaWQgSklUOjplbWl0
X29wX25ld19hcnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90
eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgbV9pc1No
YXJlYWJsZSA9IGZhbHNlOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxv
Y2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE3
NzcsMjAgKzE4MDMsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Rh
aQogICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9
IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5U
YWlsPigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcg
c2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQg
cmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hh
ZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3Jh
dGNoMlJlZyk7CisgICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIw
OyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0
KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwot
ICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJl
Z3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QxKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcs
IEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKKyAgICBtX2lzU2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwog
ICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9i
YXNpY0Jsb2NrTG9jYXRpb247CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9j
YXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7CkBAIC0xODYwLDcgKzE4OTEsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5k
ZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE4
ODYsNyArMTkxNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QK
ICAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCwgcmVzdWx0UmVncyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkNv
ZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKQEAgLTI4NTUs
NyArMjg1Niw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAg
ICBKU1ZhbHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1w
bGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVC
bG9jay0+YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNv
ZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWlu
KTsKICAgICB2b2lkKiByZXN1bHQgPSBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKIApAQCAtMjg4MCw3ICsyODgxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxv
Y2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoa2V5
LmlzSW50MzIoKSkKQEAgLTI5MDMsNyArMjkwNCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25Td2l0Y2gKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIHZvaWQqIHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
YmFzZWxpbmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAKICAgICBpZiAoa2V5
LmlzU3RyaW5nKCkpIHsKICAgICAgICAgU3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmluZyhrZXkp
LT52YWx1ZShnbG9iYWxPYmplY3QpLmltcGwoKTsKQEAgLTI5MTksNyArMjkyMCw2IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2Vs
aW5lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IEluc3RydWN0aW9uKiBwYykpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpA
QCAtMjk3MSw3ICsyOTcxLDYgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJl
c29sdgogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXNvbHZlZFNjb3BlKTsKIH0KLSNl
bmRpZgogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBF
bmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3Ry
dWN0aW9uKiBwYykpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsNyBAQCBKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9i
YWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90
IG1pbikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hJbW1XaXRo
VW5rbm93bktleVR5cGUsIGNoYXIqLCAoVk0qLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0
YWJsZUluZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4KSk7Ci0jaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJl
c29sdmVTY29wZUZvckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpKTsKLSNlbmRpZgogSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9i
YWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25QdXRUb1Njb3BlLCB2b2lkLCAoSlNHbG9iYWxPYmplY3Qq
LCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDEyIEBA
IGF1dG8gSklUUGxhbjo6dGllcigpIGNvbnN0IC0+IFRpZXIKIAogSklUQ29tcGlsYXRpb25LZXkg
SklUUGxhbjo6a2V5KCkKIHsKLSAgICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkobV9jb2RlQmxv
Y2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKKyAgICBKU0NlbGwqIGNvZGVCbG9j
azsKKyAgICBpZiAobV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpCisgICAg
ICAgIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgIGVs
c2UKKyAgICAgICAgY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUo
KTsKKyAgICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBtX21vZGUpOwogfQog
CiBib29sIEpJVFBsYW46OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKIAogICAgIGVtaXRMb2FkUGF5bG9hZChi
YXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwg
b3B0aW9ucywgcmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJ
ZCwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmlsZWRCbG9j
ay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Nl
dHRlcl9ieV9pZChjb25zdAogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAg
ICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeUlkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBtX3Byb2ZpbGVkQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKHBy
b3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0
ZXJfYnlfaQogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQ
YXlsb2FkKGdldHRlciwgcmVnVDMpOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1Q0
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVy
dHkpLmltcGwoKSwgYXR0cmlidXRlcywgcmVnVDMsIHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgcmVnVDEsIG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBh
dHRyaWJ1dGVzLCByZWdUMywgcmVnVDQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAx
LDcgKzEwMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAg
ICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHByb3BlcnR5LCBy
ZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCBy
ZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgbV9wcm9m
aWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNSw3
ICsxMTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAg
ZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVn
VDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVn
VDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIG1fcHJvZmls
ZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBhdHRyaWJ1dGVzLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIzLDcgKzEyMyw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMik7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CkBAIC0xMzEsOCArMTMxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydQogICAgIGVtaXRMb2FkKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNl
UmVncy5wYXlsb2FkR1BSKCkpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
LCBiYXNlUmVncy50YWdHUFIoKSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxl
ZEJsb2NrLCAqaWRlbnQpLAogICAgICAgICBiYXNlUmVncywgcmVzdWx0UmVncywgSW52YWxpZEdQ
UlJlZywgcmVnVDQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocHJvcGVydHksIHByb3BlcnR5UmVncy50YWdHUFIoKSk7CiAKICAgICBKSVREZWxC
eVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgYmFzZVJlZ3MsIHByb3BlcnR5
UmVncywgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgcmVnVDQpOwogCiAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtMjAyLDcgKzIwMiw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAogICAgIGVtaXRMb2FkMihiYXNlLCBiYXNlUmVncy50
YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpLCBwcm9wZXJ0eSwgcHJvcGVydHlSZWdzLnRh
Z0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKTsKIAotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3Mo
YmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5UmVncy50YWdHUFIoKSwgcHJvcGVydHlSZWdzLnBheWxvYWRHUFIoKSksIFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9w
cm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKSwgVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBy
ZXN1bHRSZWdzKTsKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVk
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSlNWYWx1ZVJl
Z3MgYmFzZVJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwpAQCAtMjI3LDcgKzIyNyw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KIAogICAgIGVtaXRM
b2FkKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkpOwogCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGJhc2VSZWdzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9m
aWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
cHJvZmlsZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5t
X2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgcmVzdWx0UmVncyk7CkBAIC0y
MzcsNyArMjM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwpAQCAtMjQ5LDcgKzI0OSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICAgICAgYXV0
byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKICAgICAgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUNCk7CiAgICAgICAgIG5vdENl
bGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9wZXJhdGlvbkdl
dEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
LCByZWdUMSk7CiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwg
cHJvZmlsZSwgcmVnVDQpOwpAQCAtMjU3LDcgKzI1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHIKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAogICAgICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZyk7CiAg
ICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKQEAgLTI2NSw3ICsyNjUsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChn
ZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICAg
ICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKICAgICB9CiB9CkBAIC0yNzUsNyArMjc1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgIGlmICho
YXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CkBAIC0yODQsNyArMjg0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMikpOworICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRp
bWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgfQogfQpAQCAtMzA1LDEzICszMDUsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAog
ICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGJhc2VHUFIs
IHByb3BlcnR5R1BSLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
ICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJl
c3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3Vs
dFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKIAogICAgIGF1dG8gYmFzZUdQUiA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgYXV0byBwcm9wZXJ0eUdQUiA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9j
ayksIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIs
IHByb3BlcnR5R1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwogfQogCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3By
aXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBy
ZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFt
ZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVl
UmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsKICAgICBn
ZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDUsIHJl
Z1Q0KTsKIAogICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0
aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFs
U2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFz
ZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZElt
bVB0cihudWxscHRyKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VSZWdz
LCBwcm9wZXJ0eVJlZ3MsIHZhbHVlUmVncywgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIo
bnVsbHB0cikpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIH0KQEAgLTM5NSw3ICszOTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0
ZV9icmFuZChjb25zCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJhc2VS
ZWdzLnRhZ0dQUigpKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCiAgICAgICAgIGJhc2VSZWdzLCBicmFuZFJlZ3MsIEludmFsaWRHUFJSZWcp
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwpAQCAtNDE4LDcgKzQxOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3Im
IGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleF07
CiAgICAgKyttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0
UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRy
dXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCBiYXNlUmVncywgYnJhbmRSZWdzKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC00MzUsNyArNDM1LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjbwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nl
c3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgYmFzZVJlZ3MsIGJyYW5k
UmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC00NTIsNyArNDUyLDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIEpJVFByaXZhdGVC
cmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZh
dGVCcmFuZEFjY2Vzc0luZGV4XTsKICAgICArK21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXg7CiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywg
YnJhbmRSZWdzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNr
UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgYnJhbmRSZWdzKTsKICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC00NjUs
NyArNDY1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKQEAgLTQ3OCw3ICs0NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCByZWdUNiwgcmVnVDcpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQ
dXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwg
SlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgcmVnVDYsIEludmFsaWRHUFJSZWcpOwogICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwpAQCAtNTA0LDcgKzUwNCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKGNvbnN0IEkKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAg
ICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gSklUOjpl
Y21hTW9kZShieXRlY29kZSk7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7CiAgICAgfTsKIApAQCAtNTI0LDcgKzUyNCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDIsIHJl
Z1QxLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUs
IHJlZ1Q0KTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGdlbi5zdHViSW5mbygpLCBwcm9m
aWxlKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2Rl
LmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJp
Y3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZh
bE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
IH0KQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlH
ZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwg
cmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVn
VDEpOwpAQCAtNTQyLDEzICs1NDIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbgogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nl
c3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRP
bmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6VHJ5R2V0
QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCBy
ZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTU1
OCwxMyArNTU4LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
cHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwog
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CiAgICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKIH0KQEAgLTU3NSw3ICs1NzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGly
ZWN0KGNvbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVk
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQo
YmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZSwgcmVnVDEpOwpAQCAtNTgzLDEzICs1ODMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdAogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVn
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6
OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlw
ZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9y
ZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0K
IApAQCAtNTk5LDEzICs1OTksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9k
aXJlY3QoYwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9w
cm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKIAog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC02
MTQsMTAgKzYxNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChj
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRMb2Fk
KGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2UsIHJlZ1QxKTsKQEAgLTYzMCwxMyArNjMwLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZChjb25zdCBJbnN0cnUKIAogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJl
ZywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXls
b2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
cmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1
bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTY0Niwx
MyArNjQ2LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmls
ZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIAotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3By
b2ZpbGVkQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNjYzLDcgKzY2Myw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90
aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKICAgICAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2Fk
KHRoaXNWUmVnLCByZWdUNCwgcmVnVDMpOwpAQCAtNjczLDEzICs2NzMsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlz
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25s
eShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIEludmFsaWRHUFJSZWcpOworICAg
ICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2Nr
LCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
ICAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxv
Y2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTY4OSwxMyArNjg5LDEzIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlz
SW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAg
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBvcGVyYXRpb25H
ZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZEJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQpAQCAtNzEwLDE1ICs3MTAsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lk
KGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9v
bCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKICAgICAKICAgICBlbWl0TG9hZDIoYmFz
ZSwgcmVnVDEsIHJlZ1QwLCB2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICAKICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5
bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBJbnZhbGlkR1BSUmVn
LAogICAgICAgICByZWdUMSwgYnl0ZWNvZGUubV9mbGFncy5lY21hTW9kZSgpLCBkaXJlY3QgPyBQ
dXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwogICAgIApAQCAtNzM4LDcgKzcz
OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
bih0aGlzKTsKIApAQCAtNzQ4LDcgKzc0OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfaWQoY29uc3QgSW4KICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRz
W21fcHV0QnlJZEluZGV4KytdOwogICAgIAogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
Ci0gICAgICAgIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAg
ICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwog
ICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9
CkBAIC03NTgsMTQgKzc1OCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJ
bnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5
SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdU
MSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7
CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxv
YWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7
CisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVk
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1f
aW5CeUlkcy5hcHBlbmQoZ2VuKTsKQEAgLTc3OSwxMyArNzc5LDEzIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRz
W21faW5CeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHVi
SW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwogfQpAQCAtNzk2LDcgKzc5Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5
X3ZhbChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgZW1pdExvYWQy
KGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CkBAIC04MDQsNyAr
ODA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDQpOwogCiAg
ICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC04MTksMTQgKzgxOSwxNCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBn
ZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJv
ZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtODM3
LDcgKzgzNyw3IEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIKICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUSW5C
eVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUs
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1
ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBA
IC04NTMsNyArODUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVn
aQogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5k
ZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBv
cGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5k
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6
ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC04OTAsNyAr
ODkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZQogewogICAg
IGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFy
SW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElz
SW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIEpJVDo6
ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
ID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKQEAgLTkxNiwxMSArOTE2LDExIEBAIHZvaWQgSklU
OjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSog
Y29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2
ZVR5cGUsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUg
PSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2Zp
bGVkQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAg
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9wcm9m
aWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdF
cG9jaCgpKSwgcmVnVDEpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLCByZWdUMSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3Rh
bnRTY29wZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdU
MCk7CkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShj
b25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IAog
ICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNT
Y29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZEJs
b2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgcmVnVDEpOwpAQCAtMTAzOSw3ICsxMDM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJl
VmFyKFZpcnR1YWxSZWdpcwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5
dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5t
X2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKQEAgLTExNDYsNyArMTE0Niw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGVtaXRT
dG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKQEAgLTExNTYsNyArMTE1Niw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUs
IGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
QmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9wcm9maWxlZEJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRQdXRH
bG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdh
dGNocG9pbnRTZXQqIHNldCkKQEAgLTExOTAsNyArMTE5MCw3IEBAIHZvaWQgSklUOjplbWl0UHV0
Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGll
ZEdldFB1dEluZm8oYnl0ZWNvZGUpOwpAQCAtMTIwMiw3ICsxMjAyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNo
ZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgZW1pdExvYWQodmFsdWUsIHJl
Z1QzLCByZWdUMik7CiAgICAgICAgICAgICAKQEAgLTEyMTcsNyArMTIxNyw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgY2FzZSBHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAg
ICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBKU1Nj
b3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhy
ZXNvbHZlVHlwZSwgbV9wcm9maWxlZEJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNj
b3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CkBAIC0xMzE4
LDcgKzEzMTgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAg
ICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0
aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVf
ZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRUb1Njb3BlLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzMzMsNyArMTMzMyw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBlbWl0TG9h
ZFBheWxvYWQoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIERp
cmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSArIFRhZ09mZnNldCksIHJlc3V0bFJlZ3MudGFnR1BSKCkpOwogICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGlu
ZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBQYXlsb2FkT2Zmc2V0KSwgcmVz
dXRsUmVncy5wYXlsb2FkR1BSKCkpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1dGxSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3V0bFJlZ3Mp
OwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3V0bFJlZ3MudGFnR1BSKCksIHJlc3V0bFJlZ3MucGF5
bG9hZEdQUigpKTsKIH0KIApAQCAtMTM1NSw3ICsxMzU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX2FyZ3VtZW50cyhjb25zdAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2Zp
ZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5MiArNDks
MTA0IEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMu
Y291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsK
LSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7Cisg
ICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50
aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVy
cygpKSB7CisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsK
KyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BS
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQ
Uik7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9u
R2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwg
cmVnVDIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFz
ZUdQUiwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CiAKICAgICAgICAgSklU
R2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzLCByZWdUMik7CisgICAgICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHVi
SW5mb0dQUik7CisKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkK
ICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAg
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dD
YXNlKCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICByZXNl
dFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0
aXZlbHkgcmVzZXQgU1AKKworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5
VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29k
ZVR5cGU+CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5
cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewot
ICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIp
KQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisKKyAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxk
ZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBk
c3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BS
MywgYXJndW1lbnRHUFI0KTsKICNlbHNlCi0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0g
ICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwotICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRl
Y29kZUluZGV4KTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRlY29k
ZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7Cisg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsg
Ly8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9m
aWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0
KCkpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7
Ci0KLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9H
UFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwot
ICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3Zh
bF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
ICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpOwotICAgICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FS
TTY0KCkpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UgPT0gcmVn
VDApOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHkgPT0gcmVnVDEpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IHJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDksNyArMTYxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTYwLDggKzE3Miw4IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSNTsKICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmls
ZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8
fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50
R1BSMSk7CiAKQEAgLTE4NywzNCArMTk5LDQwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2
YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworCisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFBy
aXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3Vs
dFJlZ3MsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nh
c2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpHZXRQcml2YXRlTmFtZSwKKyAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlH
UFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMo
aXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
UHJpdmF0ZU5hbWU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKQEAgLTIyMyw5ICsyNDEsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
bWV0YWRhdGEsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQ
UiwgcHJvcGVydHlHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFy
Z3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3Bl
cnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlw
ZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBk
c3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BS
Myk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI1NSwyMCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkg
dXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2
YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVy
blZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCkBAIC0yNjQsNyArMjc4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRo
ZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0
byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQog
ICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAwLDIxICszMTQsMjggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBi
cmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFz
ZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwotCiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklU
UHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5k
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5k
KGdlbik7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQg
b2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC0z
MjQsMTcgKzM0NSwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25z
CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIFVOVVNF
RF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRl
QnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+
KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BS
Myk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRP
cHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
MzQ0LDI0ICszNzAsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5k
KAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsg
Ly8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFy
Z3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8
RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUp
Pjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVy
YXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKICNlbmRpZgogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM3MCwzMyArMzkwLDQ3IEBAIHZvaWQg
SklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRl
Y29kZS5tX2JyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgcmVnVDEpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7
CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAg
ICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFu
ZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0
ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMu
YXBwZW5kKGdlbik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2Jy
YW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tQcml2YXRlQnJhbmQ+KCk7
CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlKTsKKwogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vz
c0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFj
Y2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJh
dGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTQwNiwyNCArNDQwLDE4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fz
c2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkNo
ZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8
ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVz
Pjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNSwzMCArNDYzLDQzIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDMpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2Zp
bGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0
ZWNvZGUsIGJhc2VHUFIsIHByb2ZpbGVHUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9N
ZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBw
cm9maWxlR1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWws
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVn
VDMsIHJlZ1Q0KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlH
UFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIsIHN0dWJJbmZvR1BSKTsKKwog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgIGdlbi5zdHVi
SW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBz
dGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQ
dXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0
ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdl
IG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1
Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1
ICs1MTUsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAg
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAg
ICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVj
b2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJl
Y3QpCkBAIC00OTgsNyArNTM2LDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFy
ZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRp
b25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRp
bWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50
R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50
ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0Pigp
LCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJn
dW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWw6Ok1l
dGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjUpOworICAgIGNhbGxP
cGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk+KEFkZHJl
c3MoYXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMsIGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTUxMiw3ICs1NTksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0Owog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQ
Uik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92
YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAg
Q2FsbCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU3MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
QEAgLTUzMywxOCArNTgwLDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BS
ID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQg
dXNlZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29u
dGFpbnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7Cisg
ICAgfQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpA
QCAtNTcwLDIwICs2MjMsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShj
b25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIp
LCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHVi
SW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2lu
ZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5
VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdp
dGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2NTgsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4o
KTsKLSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7
CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZh
bEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02
MDMsMTMgKzY2NiwxNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShj
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0
aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRl
RmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3Vy
ZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0
dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSNCk7CisgICAg
Y2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVs
ZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMywgYXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIp
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjg3LDEyIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lm
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNjQzLDE0ICs3MDIsMTQgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSByZWdUNDsKIApAQCAtNjgwLDcgKzczOSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0
ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC02ODksNyArNzQ5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0
ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC02OTksNyArNzYwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIs
IHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCBy
ZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdU
MSwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUs
IHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MDksNyArNzcxLDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlW
YWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTcxOSw3ICs3ODIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0
dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRy
aWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0
cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyNywyMyArNzkxLDMzIEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBC
YXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1Zh
bHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0
IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQg
d3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIg
Y2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNzU5LDE1ICs4MzMsMTcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4
KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVk
SW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRp
b25EZWxldGVCeUlkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
LCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC03ODEsMjQgKzg1NywxOSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0g
YXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQ
Uik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9p
ZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTgwOCw3ICs4NzksNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBA
IC04NDUsMjIgKzkxNiwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVy
dHkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
RGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKwogICAgIEpJVERlbEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdU
MywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1
YkluZm9HUFIsIEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1p
dCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmll
ciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtODgzLDkgKzk2NSwx
MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVz
dGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlv
bkRlbGV0ZUJ5VmFsT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9l
Y21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04
OTksMjQgKzk4MywxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBj
b25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25E
ZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMDUsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIg
KzEwNDAsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3Vs
dFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFj
Y2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwNzQsMTcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAg
IGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKT4oQWRk
cmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDAzLDI2ICsxMDk0LDIwIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKICAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0
aW9uVHJ5R2V0QnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTAzMCwyMiArMTExNSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWRE
aXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBy
ZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlk
RGlyZWN0OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0K
IApAQCAtMTA1NCwxNiArMTE0OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0
aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5
cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBy
ZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtMTA3Myw4MyArMTE2OSw2MiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIz
OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGly
ZWN0T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBD
YWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25H
ZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFs
dWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNo
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VW
UmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZVZSZWcpOwogICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+
bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBKdW1wIG5vdEFycmF5
TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEu
bV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihH
ZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChyZWdUMCwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9k
ZS5hcnJheVByb2ZpbGUsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlk
TW9kZU1ldGFkYXRhOjpvZmZzZXRPZk1vZGUoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIEp1bXAg
bm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoMzIoTm90RXF1YWwsIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgT3BHZXRC
eUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRh
dGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFzZUdQUiwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVn
cywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOworICAgICAgICBudWxscHRyLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCi0gICAg
SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1Ao
KTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVs
eSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwog
fQogCkBAIC0xMTU4LDE2ICsxMjMzLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwpAQCAtMTE3NywyNiArMTI1NCw1OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1l
bnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRl
Y29kZS5tX3RoaXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdpdGhU
aGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhp
c0dQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVn
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOwor
CisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRS
ZWdzLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiksIHN0dWJJbmZv
R1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkdldEJ5SWRXaXRoVGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhp
dCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xv
d0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCkBAIC0xMjA2LDcgKzEzMTUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgog
ICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGds
b2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGpp
dC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMjQxLDE2ICsxMzUwLDE5IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
V2l0aFRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhU
aGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRC
eUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV90aGlzVmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKT4oYnl0ZWNvZGUs
IEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI4ICsxMzcy
LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxy
ZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OnRoaXNWYWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRH
UFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5
SWRXaXRoVGhpc09wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFs
dWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKQEAgLTEyOTEsNyArMTM5Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAg
ICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTEzMjksMjMgKzE0MzUsMzggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVW
UmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxh
Z3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0
aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVy
LAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGlu
dG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8v
IHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUg
ZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZS
ZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVn
aXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIGJhc2VH
UFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdU
MywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRj
aEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJl
Y3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlJZDsKKyAgICBzdHVi
SW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERp
cmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25z
ZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeUlkcy5h
cHBlbmQoZ2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRo
b3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsxNDgwLDE4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAgICAK
ICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4
KytdOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBl
KG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CkBAIC0xMzc2LDI1ICsxNTAxLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
aWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjM7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1l
bnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlz
QVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBhcmd1bWVudEdQUjEpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwg
cHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IGdlbi5zbG93UGF0aEZ1bmN0aW9u
KCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChnZW4uc2xvd1BhdGhGdW5j
dGlvbigpKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTE0MDQsNyAr
MTUyMyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKQEAgLTE0NDEsMjAgKzE1NjAsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQo
Y29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdp
c3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsK
IAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJ
bkJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0
NjMsMTQgKzE1OTMsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElu
cwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAg
IEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJ
ZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRH
UFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXpl
KT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjEzLDIyIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Ig
d2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2lu
dCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJl
bnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRp
b25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2
YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkluQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUg
KzE2MzcsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwg
YmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVElu
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Oklu
QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2NzIs
MTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9y
JiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJv
cGVydHksIGFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRp
b25JbkJ5VmFsT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTU2LDU5ICsxNjk0LDcwIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxl
R1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAh
aXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BS
MSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5C
eVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAg
IC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0
bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5n
IGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZh
bE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
SW5CeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9y
QnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUs
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1
YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlw
ZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQ
cml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJ
VDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAg
ICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgVU5VU0VEX1BBUkFNKGJhc2UpOworICAg
IFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09
IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZUJyYW5kKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNb
bV9pbkJ5VmFsSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJp
dmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BS
Mik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsK
KyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1p
emUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
MTYxOCwyNyArMTc2NywyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxS
ZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIy
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FS
TTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50
R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5
cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdl
dFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5
cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNh
bGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9w
ZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlv
bkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxNzk1LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZh
dGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5t
X2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5k
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDIxNSArMTgw
OSwxMjcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEhhc1ByaXZhdGVCcmFuZD4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3co
Ynl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhh
c1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1f
YnJhbmQsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0
VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklU
OjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BS
UmVnIHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAg
ICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRk
cmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQo
KS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworCisg
ICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2Ny
YXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldh
dGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwg
QWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xv
c3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewotICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
ZXB0aDsgKytpKQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNl
dE9mTmV4dCgpKSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLXZvaWQgSklUOjplbWl0X29wX3Jlc29s
dmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0
YS5tX2xvY2FsU2NvcGVEZXB0aDsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUg
PSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVC
bG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxC
aW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRy
ZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAg
ICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JD
b2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3Bl
LCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsK
LSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFy
OgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzd2l0Y2ggKHJl
c29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9F
bmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwotCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0g
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAg
ICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29s
dmVUeXBlLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2Jh
bExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci19Ci0jZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQogdm9p
ZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
ID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAg
ICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7
CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2
ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBz
YW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVs
ZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmly
b25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2
ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwog
ICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9j
ay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBt
ZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5N
ZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0
b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29w
ZSBDbG9zdXJlVmFyIik7CisgICAgICAgIH07CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5F
UkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJh
dG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0g
ewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVfR0VORVJB
VE9SKQorICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJh
dG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJl
c29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJh
c2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
Iik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAg
ICBhdXRvIGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAg
ICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIHN0ZDo6
bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMiKTsKKyAgICAgICAg
fTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDI7CisgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGNvZGU7CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1
cmVWYXIpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJh
dG9yKTsKKyAgICAgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHVi
KGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdl
bmVyYXRvcik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKICAgICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5l
cmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBl
PiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVu
ayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50
IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91
dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdp
bmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNp
bmcgTWV0YWRhdGEgPSBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NvcGVHUFIgPSByZWdUNjsgLy8gaW5jb21pbmcKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1l
dGFkYXRhR1BSID0gcmVnVDI7IC8vIGluY29taW5nCisgICAgY29uc3RleHByIEdQUlJlZyBzY29w
ZUdQUiA9IHJlZ1QwOyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CiAgICAgVU5VU0VE
X1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNl
ZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNz
KCk7CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAg
IGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Cisg
ICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nh
c2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcp
IHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CiAg
ICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewogICAgICAg
ICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBn
bG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxP
YmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmpl
Y3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRj
aHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWws
IEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2Jh
bE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlv
bldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRS
ZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewotICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAg
ICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJl
Z1QxKTsKLQotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25l
ID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKLSAgICAgICAgewotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAg
ICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICAgICAganVt
cCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKLSAgICAgICAgfQotICAgICAgICBkb25lLmxpbmsodGhp
cyk7CisgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mp
OworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNjb3BlR1BSID09IHJlZ1QwKTsKKyAgICAgICAgaml0
LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZMb2NhbFNjb3Bl
RGVwdGgoKSksIHJlZ1QxKTsKKworICAgICAgICBMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7Cisg
ICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOworICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJl
Z1QwKTsKKyAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAg
ICBqaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsKKyAgICAgICAgZG9uZS5saW5rKCZqaXQp
OwogICAgIH07CiAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSkgewpAQCAtMTg4MiwxMiArMTkzNywxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAv
LyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAgICAgbG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0
OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAg
ICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgaml0
LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zm
c2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTg5NywxMSArMTk1MSwxMSBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0
YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZv
ciBHbG9iYWxWYXIqLAogICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KLSAg
ICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1Qw
KTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAg
ICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNl
dE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAgICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFs
TGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0xOTA5LDcgKzE5NjMsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgICAgICBlbWl0UmVz
b2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoK
ICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0xOTE5LDgzICsxOTczLDQ1IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAg
ICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBj
YXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1w
TGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6
IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJl
c29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9z
dXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQot
ICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
UHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdUMSk7CiAKLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGF1dG8gZW1pdENhc2Ug
PSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAgICAgICBKdW1wIG5vdENh
c2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5
cGUpKTsKKyAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKKyAgICAgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICBub3RDYXNlLmxpbmsoJmpp
dCk7CisgICAgICAgIH07CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAg
IGVtaXRDYXNlKEdsb2JhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsK
KyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAg
IH0KIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmsp
OwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVz
b2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29k
ZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBD
b2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5l
IERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jlc29sdmVfc2NvcGVfIyNyZXNv
bHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4
cHIgKCF0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAg
ICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1
cm4gaml0LmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5l
OiBvcF9yZXNvbHZlX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JF
U09MVkVfVFlQRShERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5F
X1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewog
ICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3Jr
IHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIC8vIFRoZSBmYXN0IHBhdGggYWxyZWFkeSBwdXNo
ZWQgdGhlIHJldHVybiBhZGRyZXNzLgogI2lmIENQVShYODZfNjQpCkBAIC0yMDM0LDcgKzIwNTAs
NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgcGF0Y2hC
dWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNvbHZlX3Njb3BlIik7
CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklUOjplbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoq
IHN0cnVjdHVyZVNsb3QpCiB7CkBAIC0yMDYyLDI3NiArMjA3NywxMzMgQEAgdm9pZCBKSVQ6OmVt
aXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6
ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKIH0KIAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7
Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVz
b2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9z
dHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOworICAgIFJlc29sdmVUeXBl
IHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBb
Jl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQp
IHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVj
dHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ug
d2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmpl
Y3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUg
dmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAg
ICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0g
cmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAg
ICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwotICAgICAgICAgICAgfSkpOworICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2st
Pmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwog
Ci0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7Ci0gICAgICAgICAgICBp
ZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0g
YnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91
dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZz
ZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlz
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9m
ZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0g
ICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwg
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVz
dWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2xvYmFs
VmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAg
ICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYg
KGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21J
bmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdU
MCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2lu
dGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAg
ICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUg
PT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4K
LSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAg
ICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJl
VmFyOgotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHk6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IH0KKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAg
IHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwg
IkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CiAgICAgfTsKIAotICAg
IHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJl
Z1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
cmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihy
ZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6
IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0g
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAg
ICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1
dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBK
dW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2Up
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRy
dWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2Jh
bExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFs
c2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0
YWRhdGEsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLSNlbHNlIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0g
bWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgYXV0byBjbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAg
cmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJl
VmFyIik7CisgICAgfTsKIAotICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgQVNTRVJUKEJ5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNT
RVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBb
XSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVy
aWMiKTsKKyAgICB9OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQ
UiA9IHJlZ1QyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdU
NTsKIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsKLSAgICAgICAgdWludHB0
cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRh
Lm1fb3BlcmFuZCk7Ci0gICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBw
dHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRh
YmxlKCZtZXRhZGF0YSk7CisgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwog
Ci0jZGVmaW5lIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfZ2V0X2Zy
b21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3Qg
VGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVT
T0xWRV9UWVBFKEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSAgICAgICAgfTsKLSN1bmRlZiBH
RVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCBzY29wZUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0
YWRhdGFHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNj
b3BlR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0
YWRhdGFHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAg
ICB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAg
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGNvZGUgPSB2
bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAgIGVsc2UgaWYgKHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAg
IGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2Vu
ZXJhdG9yKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNH
ZXRGcm9tU2NvcGVHZW5lcmF0b3IpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRl
T3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciog
dGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Omdl
bmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5
cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRo
dW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJ
bnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNj
b3BlOjpNZXRhZGF0YTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNT
RVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKLQotICAgIHRh
Z1JldHVybkFkZHJlc3MoKTsKLQotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxv
Y2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywg
bWV0YWRhdGFHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7CiAKLSAgICBKdW1wTGlzdCBz
bG93Q2FzZTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0gICAgYXV0byBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFkYXRhU3Ry
dWN0dXJlT2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgbWV0
YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJl
Z1QwKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEp
KTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkp
OwotICAgIH07CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGppdC5sb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkp
LCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworCisgICAgSnVt
cExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAo
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25D
aGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAo
IW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7
Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBX
YXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zhcklu
amVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0
LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAg
YXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVn
IHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCBy
ZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcg
cmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJl
Zyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRH
ZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAg
ICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQ
dHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFu
ZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7
Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0g
WyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVU
eXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0
cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ug
d2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmpl
Y3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUg
dmFyIGluamVjdGlvbi4KLQotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVn
VDA7Ci0gICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2Nv
cGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAg
ICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIo
RXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3Zl
cnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0
aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhh
bmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZlN0cnVjdHVyZSgpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFk
ZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Mo
c2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisKKyAgICAg
ICAgICAgIGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBK
dW1wIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCByZWdU
Myk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpv
ZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QxKTsKKwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFC
TEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
KTsKLSAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxp
bmUpOwotICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CisgICAgICAgICAg
ICAgICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAg
ICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAg
ICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25F
eHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5k
ZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAy
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworCisgICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMCk7CisgICAgICAgICAgICBqaXQubmVnMzIocmVnVDEpOworICAgICAgICAgICAgaml0LnNp
Z25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgICAgICBqaXQubG9hZDY0KEJh
c2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAt
IDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQp
Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09G
RlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRh
ZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgp
KSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAg
ICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2su
Ci0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsK
KyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDAp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsK
LSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1
cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkp
LCByZWdUMyk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVn
aXN0ZXIpKTsKKyAgICAgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHJlZ1Qz
KTsKKyAgICAgICAgICAgIGppdC5hZGRQdHIoc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRP
ZlZhcmlhYmxlcygpKSwgcmVnVDApOworCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpA
QCAtMjM0MSw4NiArMjIxMyw2MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewot
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dl
dFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAg
ICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBp
c05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRv
RW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
KnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsK
KyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0
SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGpp
dC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5m
bygpKSwgcmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAg
ICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQ
cm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFs
c2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIs
IHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBq
aXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0
Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAgIEp1
bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5
ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGpp
dC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKCZq
aXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXIubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1w
KCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluaygm
aml0KTsKIAotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQorICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0
OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsK
KyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2Vy
dChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1Qw
LCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmls
ZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRh
dGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0
KCkpKTsKIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1
bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2Us
IENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2Fz
ZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3Bl
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNk
ZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3Bl
XyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYg
Y29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwK
LSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAg
ICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJC
YXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9S
X0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5k
ZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihW
TSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNh
biBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8v
IGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcg
YXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1h
eSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGlj
aCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBq
aXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNDI5LDcgKzIyNzgsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAjZW5kaWYKIAogICAgIHVzaW5nIE1l
dGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
bWV0YWRhdGFHUFIgPSByZWdUNzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0g
cmVnVDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1Owog
ICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIApAQCAtMjQ0OSw3ICsyMjk4LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIENhbGwgb3BlcmF0aW9u
ID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0g
aml0LmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAgICBqaXQuc3RvcmU2
NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJl
c3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUo
KSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgaml0Lm1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lz
dGVyKTsKIAogI2lmIENQVShYODZfNjQpCkBAIC0yNDY5LDg4ICsyMzE4LDc3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1ZmZlci5saW5rKGp1
bXBUb0hhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0KLSNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJp
YWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0g
ICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwot
fQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRy
ZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRp
cmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAg
ZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJl
Z1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1
dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihy
ZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFi
bGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2Nv
cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8g
Z2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoq
IHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0
cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRh
Lm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUg
cHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlw
ZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sg
Y292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3Ig
YW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29w
ZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8v
IFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNo
ZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAg
ICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0
aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAg
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAg
ICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsK
LSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMp
OworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3Bl
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0
cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAg
IHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmly
c3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAg
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoK
ICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUg
PSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVC
bG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUp
OwotICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6
YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVz
b2x2ZVR5cGUsIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsK
KworICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5m
by5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJl
IGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tz
IHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQp
Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGly
ZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxl
SW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRT
bG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0
V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisK
KyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAgICBl
bWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwg
QWRkcmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5k
U2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBy
ZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0
VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7CisgICAg
ICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdy
aXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDAsIHJl
Z1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSkpOworCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFy
OgpAQCAtMjU2NCw1OCArMjQwMiw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihU
cnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2
ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAg
aXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0
byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAg
ICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxpbmso
dGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNr
aXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJl
VmFyLyBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGls
ZSB0aGluZ3MKKyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3Zl
IHByb3ZlbiB0aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZh
ciwKKyAgICAvLyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgor
ICAgIC8vIGlmIHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0
IGlzIGZpcmVkLCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAg
IC8vIG1hdHRlciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxl
ZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIp
OworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFy
KQorICAgICAgICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisg
ICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBl
bHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdU
MCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJl
Z1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0
aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlz
KTsKIAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIp
OworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZh
ci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlv
biA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAg
ICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIu
bGluayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAK
ICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAg
ICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjYyNCwxOCArMjQ1NiwyMSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9T
Y29wZT4oKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8o
Ynl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZh
cikgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAg
ICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYg
YW55IGxpbmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29k
ZUJsb2NrcyBhcmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIu
CiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3Jp
dGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3Vt
ZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwogICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNl
dCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAg
ICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUlu
ZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3ICsyNDg3
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0
IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZh
aWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBp
bmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBt
YXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQu
cHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNzAxLDcgKzI1MzYsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGly
ZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIApAQCAtMjc1OSw3ICsyNTk0LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlND
ZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkBA
IC0yNzY3LDcgKzI2MDEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQo
Y29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50
ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjgyMyw3
ICsyNjU3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0bwogdm9p
ZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwpA
QCAtMjgzOSwxMSArMjY3MiwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQo
Y29uc3QgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMgdGhl
IG1vc3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2UgaXQg
aWYgd2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51bWVy
YXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9k
ZSkgeworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2Vu
dW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVy
ZU1vZGUpIHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBw
ZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigofkpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgJiBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spKSk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0
YSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0
b3JlOFRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1l
dGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKKwogICAgICAgICBsb2FkMzIo
QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0
cnVjdHVyZUlET2Zmc2V0KCkpLCBpbmRleEdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFw
cGVuZChicmFuY2gzMihOb3RFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwogCkBAIC0yODgxLDc4ICsyNzIwLDg4IEBAIHZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVy
YXRvckdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUg
PSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRv
ciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CiAKLSAg
ICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BS
ID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVFbnVt
ZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5lRW51bWVyYXRvckdl
dEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gy
ID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lz
dGVyczo6c2NyYXRjaDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2Rl
LCBzY3JhdGNoMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHBy
b3BlcnR5R1BSKTsKIAotICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5t
X2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRh
KCksIHNjcmF0Y2gyKTsKKyAgICBvcjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7CisgICAgc3RvcmU4
VG9NZXRhZGF0YShzY3JhdGNoMiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
YmFzZUdQUikpOwogICAgIC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQgdmFsdWUu
Ci0gICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywg
cmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
IHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgIEp1bXAgaXNO
b3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHNjcmF0Y2gzLCBUcnVz
dGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKIAogICAgIC8vIENoZWNrIHRoZSBzdHJ1
Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDMpOwotICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwg
c2NyYXRjaDEpOworICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJh
bmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKIAogICAgIC8vIENvbXB1
dGUgdGhlIG9mZnNldC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMyk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgc2NyYXRjaDIpOwogICAgIC8vIElm
IGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFn
ZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9
IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDAp
OwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7Ci0gICAgbG9hZDY0KEJhc2VJ
bmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwotCisgICAgSnVtcCBv
dXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNz
KHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOwor
ICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2Vz
LmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKICAg
ICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zm
c2V0KCkpLCByZWdUMyk7Ci0gICAgbmVnMzIocmVnVDMpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QzLCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIGJhc2VHUFIpOworICAgIHN1YjMyKEFkZHJlc3Moc2NyYXRjaDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSks
IHNjcmF0Y2gyKTsKKyAgICBuZWczMihzY3JhdGNoMik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIo
c2NyYXRjaDIsIHNjcmF0Y2gyKTsKICAgICBjb25zdGV4cHIgaW50cHRyX3Qgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5ID0gb2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpICogc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgIGxvYWQ2NChC
YXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkp
LCByZXN1bHRHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRp
bWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNh
c2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgc3RydWN0dXJlTWlzbWF0Y2gubGluayh0aGlzKTsK
LSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vl
bk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2VudW1lcmF0
b3JNZXRhZGF0YSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNo
KSwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVt
ZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBpc05vdE93blN0cnVjdHVyZU1vZGUubGluayh0aGlz
KTsKLSAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKKyAgICBK
dW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBzY3JhdGNoMywgVHJ1c3RlZElt
bTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKICAgICAvLyBSZXBs
YWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbmRleCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHByb3Bl
cnR5R1BSKTsKIAogICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaDEpOwogCiAg
ICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVnVDIpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBl
eGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgZG9uZUNhc2Vz
LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1Zh
bHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CiB9CiAKQEAgLTI5NjEsMTAgKzI4MTAsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51
bWVyYXRvcl9nZXRfYnlfCiAgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0ZXIpOwogfQogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Ci12
b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQ
YXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
LCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2VudW1lcmF0
b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxD
YXNlKQogewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKQEAgLTI5NzMsNyArMjgyMSw5IEBA
IHZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW0KICAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QwKTsKLSAg
ICBvcjgocmVnVDAsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRh
dGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCByZWdUMSk7CisgICAgb3IzMihyZWdUMCwg
cmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDEsIGJ5dGVjb2RlLCBCeXRlY29kZTo6
TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAKQEAgLTMwNjIsNiArMjkxMiwx
MyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiAgICAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCit2b2lkIEpJVDo6ZW1pdFdyaXRl
QmFycmllcihHUFJSZWcgb3duZXIpCit7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2VsZWN0U2NyYXRjaEdQUihvd25lcikp
OworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmll
clNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluayh0aGlzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUo
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzYsOSArMjM2LDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlR2V0QnkoSgogICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlQ2VsbCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAog
ICAgICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwKLSAgICAg
ICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0
dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1
YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgewogCi0gICAgICAgICAgICAgICAg
ICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJh
eUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOworICAgICAgICAg
ICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNl
Q2VsbCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aChsb2NrZXIpOwpAQCAt
MjQ5LDggKzI0OSw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoK
ICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxv
Y2ssIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAg
fSBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VDZWxsKSkgewogICAgICAgICAgICAgICAgIGlmIChz
dHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAg
ICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pOworICAgICAgICAgICAgICAgICAg
ICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1
YkluZm8pKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbyk7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgc3R1YkluZm8uaW5pdFN0cmluZ0xlbmd0aChsb2NrZXIpOwpAQCAtMzA0LDcg
KzMwNCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAg
ICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKICAgICAgICAgICAgICAgICAmJiAh
c3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICAg
ICAmJiAhbG9hZFRhcmdldEZyb21Qcm94eSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJh
dGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3Mo
c3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAg
ICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQ
cm9wZXJ0eUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAg
ICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gsIHN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51
aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNs
b3QuY2FjaGVkT2Zmc2V0KCkpOwpAQCAtNzMxLDExICs3MzEsMTEgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlUHV0QnkoSgogICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZS0+
ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBD
YWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2Fu
R2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgp
KQorICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlBy
b3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQog
ICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkKICAgICAgICAgICAgICAgICAgICAgJiYgIWlzUHJveHkpIHsKICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGlu
ZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBv
bGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBi
b29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNlbGZQYXRj
aCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VW
YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKHNsb3Qs
IHB1dEJ5S2luZCwgcHV0S2luZCkpOwpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgc3RhdGljIElubGlu
ZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RC
YXNlKCkgPT0gYmFzZQogICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQog
ICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSk7CisgICAg
ICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwogICAgICAg
ICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAg
IExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwg
aWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNh
Y2hlZE9mZnNldCgpKTsKQEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENh
bGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fz
c2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFy
dCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlu
a2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAog
ICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDI0ICs0Myw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBD
Q2FsbEhlbHBlcnMgaml0OwotCi0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwotCi0gICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAg
aml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLQotICAgIENDYWxsSGVscGVyczo6Q2FsbCBv
cGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwotCi0gICAgaml0Lmp1bXBUb0V4
Y2VwdGlvbkhhbmRsZXIodm0pOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAg
cGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOwotICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbiIpOwotfQot
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbldp
dGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJz
IGppdDsKQEAgLTc3LDI0ICs1OSw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gaGEKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQ
dHJUYWcsICJoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2siKTsKIH0KIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVz
QW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMg
aml0OwotCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjplc3ApOwot
I2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2lu
dGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKLSNlbmRpZgotCi0gICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7Ci0KLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKGhh
bmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjb250aW51YXRp
b24sIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7
Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAi
cG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOwotfQotCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZN
JiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpAQCAtMTM3LDYgKzEwMSw0MiBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoCiAKICNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBq
aXQ7CisKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodm0udG9wRW50cnlGcmFtZSk7CisKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQucHJlcGFyZUNh
bGxPcGVyYXRpb24odm0pOworCisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbiA9IGpp
dC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxl
cih2bSk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29r
dXBFeGNlcHRpb25IYW5kbGVyKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uIik7Cit9CisKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRs
ZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwor
I2lmIENQVShYODZfNjQpCisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKKyNlbGlmIENQ
VShBUk02NCkKKyAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lz
dGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIENDYWxsSGVs
cGVyczo6SnVtcCBjb250aW51YXRpb24gPSBqaXQuanVtcCgpOworCisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0
cmFDVElUaHVuayk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNl
cHRpb25HZW5lcmF0b3IpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY29udGludWF0aW9uLCBDb2Rl
TG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInBvcFRodW5r
U3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsKK30KKwogdGVtcGxhdGU8dHlwZW5h
bWUgVGFnVHlwZT4KIGlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIsIFRhZ1R5cGUgdGFnKQogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNywxMiArMzcsMTIgQEAgY2xhc3MgVk07CiAKICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5k
bGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKFZN
Jik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQ
cmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIAogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0
aW9uR2VuZXJhdG9yKFZNJik7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNJik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkJ5dGVj
b2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5j
bHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUg
IkVycm9yLmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCkBAIC0zNzAsMTMgKzM3
MSwyMiBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAgICAgCiAg
ICAgY29kZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwogCisgICAg
aWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAg
ICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+
dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICAg
ICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5y
ZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmppdE5l
eHRJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKwogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7
CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxl
IiwgKCJ0aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50
RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlz
dFN0YXRlID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxS
ZWFkeVBsYW5zRm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgSklUQ29tcGls
YXRpb25Nb2RlOjpCYXNlbGluZSkpOworICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0
YXRlID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFk
eVBsYW5zRm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+dW5saW5rZWRDb2Rl
QmxvY2soKSwgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkpOwogCiAgICAgaWYgKGNvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CiAgICAgICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBp
bGVkLiIpOwpAQCAtNDY2LDggKzQ3NiwxMCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29z
cikKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29w
c0ZvckZ1enppbmcoKSAmJiBjb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emlu
Z0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0uZ2V0TG9vcEhp
bnRFeGVjdXRpb25Db3VudGVyKHBjKTsKICAgICAgICAgKnB0ciArPSBjb2RlQmxvY2stPmxsaW50
RXhlY3V0ZUNvdW50ZXIoKS5tX2FjdGl2ZVRocmVzaG9sZDsKLSAgICAgICAgaWYgKCpwdHIgPj0g
T3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpCisgICAgICAgIGlm
ICgqcHRyID49IE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSB7
CisgICAgICAgICAgICBjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEoQ29uY3VycmVudEpTTG9ja2Vy
KGNvZGVCbG9jay0+bV9sb2NrKSk7IC8vIFdlJ3JlIHJldHVybmluZyB0byB0aGUgT1NSIGVudHJ5
IGNvZGUgaGVyZSwgd2hpY2ggZXhwZWN0cyB0aGF0IG1faml0RGF0YSBpcyBub3QgbnVsbC4KICAg
ICAgICAgICAgIExMSU5UX1JFVFVSTl9UV08oTExJbnQ6OmZ1enplclJldHVybkVhcmx5RnJvbUxv
b3BIaW50RW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBjYWxsRnJhbWUt
PnRvcE9mRnJhbWUoKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTIs
MTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAK
IG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikK
ICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFj
cm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29k
ZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjpt
X2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAg
ICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhd
LCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9wKG9wY29k
ZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwgc3JjRHN0
IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAgICAgICBzdG9y
ZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9m
aWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bj
b2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0Y2goKQog
CiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwg
bWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQot
ICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVu
YXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0YSh0NSwg
dDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShz
aXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90
SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDIK
LSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5
QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAgICByZXR1
cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEsIExvd2Vz
dFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1cGRhdGVB
cml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9m
aWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1cm4odDEs
IHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkKIAogbWFj
cm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJP
cGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRh
dGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3Bh
dGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkK
LSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAg
ICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAgICAgICAg
Z2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9t
U3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWco
c2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAub3AxTm90SW50
CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAgICBhcml0aFBy
b2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZ2V0
KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0MSwgdDAs
IC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwxMiBAQCBt
YWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJpYSB0Miwg
TG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5vdEludE9w
MkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRo
UHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAg
ICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3Ax
Tm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAgICBhcml0
aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlB
cml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0
NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAgICAgICAg
IGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5hcnlPcEN1
c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZp
bml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90LgogICAg
ICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cKLSAg
ICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0
NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEK
ICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEzIEBAIG1hY3JvIGNo
ZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMsIGExCiAgICAgICAg
ICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRweiByMCwgLnJlY292
ZXIKLQogICAgICAgICAgICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAgIyBCYXNlbGluZSB1
c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQgcG9vbC4KKyAgICAg
ICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJs
b2NrOjptX2ppdERhdGFbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjpKSVRE
YXRhOjptX2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAgIGlmIEFSTTY0RQog
ICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZK
U0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50cnkpICogUHRyU2l6
ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMg
SlNFbnRyeVB0clRhZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9w
KGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3Ry
dWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29k
ZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0
YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAg
ICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxl
ICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0KICAgICAgICAg
Z2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQogICAgICAg
ICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNybyBwcmVPcChvcGNv
ZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDEsIC5z
bG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEgdDEsIFtjZnIs
IHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAg
ICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUlu
dCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTExMzQsMTEg
KzExMzUsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVn
YXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLQotICAg
IG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdh
dGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNb
dDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0xMTQ2LDEy
ICsxMTQyLDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwKICAg
ICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MwogICAgIG9y
cSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkK
KyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0
MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0cXogdDMsIG51
bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAwLCB0Mwot
ICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5h
cnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEsIHQyKQogICAg
IHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNjAsNiBAQCBtYWNy
byBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAotICAg
ICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9i
aXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQogICAgICAgICBn
ZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0
MSkKQEAgLTExNzcsNyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2Rl
TmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlv
bkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9m
aWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAg
Lm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21T
dG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93CiAg
ICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKLSAgICAgICAg
cHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQy
KQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkludDoKLSAg
ICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQy
KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBn
ZXQobV9kc3QsIHQyKQpAQCAtMTIwNCw5ICsxMTk2LDkgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21T
dG9yZShvcGNvZGVOYW1lLCBvcAogCiAgICAgLm9wMk5vdEludDoKICAgICAgICAgIyBGaXJzdCBv
cGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIGlzIGRlZmluaXRlbHkgbm90
LgotICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5z
bG93Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRh
dGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIs
IHQ1LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgY2kyZHMgdDAsIGZ0MAog
ICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE0MjAsNyArMTQyMCw4IEBA
IGVuZAogCiBtYWNybyBjaGVja1N3aXRjaFRvSklUKGluY3JlbWVudCwgYWN0aW9uKQogICAgIGxv
YWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGJhZGRpcyBpbmNyZW1lbnQsIENvZGVCbG9jazo6
bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50
ZXJbdDBdLCAuY29udGludWUKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291
bnRlclt0MF0sIHQwCisgICAgYmFkZGlzIGluY3JlbWVudCwgQmFzZWxpbmVFeGVjdXRpb25Db3Vu
dGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICBhY3Rpb24oKQogICAgIC5jb250aW51
ZToKIGVuZApAQCAtMTUwMyw3ICsxNTA0LDggQEAgbWFjcm8gcHJvbG9ndWUoY29kZUJsb2NrR2V0
dGVyLCBjb2RlQmxvYwogICAgIGNvZGVCbG9ja0dldHRlcih0MSkKICAgICBjb2RlQmxvY2tTZXR0
ZXIodDEpCiAgICAgaWYgbm90IChDX0xPT1Agb3IgQ19MT09QX1dJTikKLSAgICAgICAgYmFkZGlz
IDUsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25D
b3VudGVyOjptX2NvdW50ZXJbdDFdLCAuY29udGludWUKKyAgICAgICAgbG9hZHAgQ29kZUJsb2Nr
OjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDFdLCB0MAorICAgICAgICBiYWRkaXMgNSwgQmFzZWxp
bmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICAgICAgaWYg
SlNWQUxVRTY0CiAgICAgICAgICAgICBtb3ZlIGNmciwgYTAKICAgICAgICAgICAgIG1vdmUgUEMs
IGExCkBAIC0xNjE3LDE0ICsxNjE5LDE0IEBAIG1hY3JvIGZ1bmN0aW9uSW5pdGlhbGl6YXRpb24o
cHJvZmlsZUFyZ1MKICAgICAjIG9wdGltYWwgd2F5IGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgaGF2
ZSBtb3JlIHRoYW4gZml2ZSByZWdpc3RlcnMgYXZhaWxhYmxlCiAgICAgIyBmb3IgYXJiaXRyYXJ5
IHVzZSBpbiB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgbG9hZGkgQ29kZUJsb2NrOjptX251bVBhcmFt
ZXRlcnNbdDFdLCB0MAotICAgIGFkZHAgLXByb2ZpbGVBcmdTa2lwLCB0MCAjIFVzZSBhZGRpIGJl
Y2F1c2UgdGhhdCdzIHdoYXQgaGFzIHRoZSBwZWVwaG9sZQorICAgIGFkZHAgLXByb2ZpbGVBcmdT
a2lwLCB0MAogICAgIGFzc2VydChtYWNybyAob2spIGJwZ3RlcSB0MCwgMCwgb2sgZW5kKQogICAg
IGJ0cHogdDAsIC5hcmd1bWVudFByb2ZpbGVEb25lCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2Fy
Z3VtZW50VmFsdWVQcm9maWxlcyArIEZpeGVkVmVjdG9yOjptX3N0b3JhZ2UgKyBSZWZDb3VudGVk
QXJyYXk6Om1fZGF0YVt0MV0sIHQzCiAgICAgYnRweiB0MywgLmFyZ3VtZW50UHJvZmlsZURvbmUg
IyBXaGVuIHdlIGNhbid0IEpJVCwgd2UgZG9uJ3QgYWxsb2NhdGUgYW55IGFyZ3VtZW50IHZhbHVl
IHByb2ZpbGVzLgogICAgIG11bHAgc2l6ZW9mIFZhbHVlUHJvZmlsZSwgdDAsIHQyICMgQWFhYWFo
aGhoISBOZWVkIHN0cmVuZ3RoIHJlZHVjdGlvbiEKICAgICBsc2hpZnRwIDMsIHQwICMgb2Zmc2V0
IG9mIGxhc3QgSlNWYWx1ZSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLgotICAgIGFkZHAgdDIsIHQz
ICMgcG9pbnRlciB0byBlbmQgb2YgVmFsdWVQcm9maWxlIGFycmF5IGluIENvZGVCbG9jazo6bV9h
cmd1bWVudFZhbHVlUHJvZmlsZXMuCisgICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBv
ZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gdGhlIHZhbHVlIHByb2ZpbGUgYXJyYXkuCiAuYXJndW1l
bnRQcm9maWxlTG9vcDoKICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgbG9hZHEgVGhpc0FyZ3Vt
ZW50T2Zmc2V0IC0gOCArIHByb2ZpbGVBcmdTa2lwICogOFtjZnIsIHQwXSwgdDIKQEAgLTI1NjMs
NiArMjU2NSwxNyBAQCBtYWNybyBub3RTdXBwb3J0ZWQoKQogICAgIGVuZAogZW5kCiAKKworbWFj
cm8gdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwg
dGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxl
W21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRz
W3RlbXBdCitlbmQKKworbWFjcm8gdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVj
dCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgQmluYXJ5
QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG5v
dCBuZWVkIHRoZSBYODZfNjRfV0lOIGNvbmRpdGlvbiBoZXJlLCBzaW5jZSBXRUJBU1NFTUJMWSBz
aG91bGQgYWxyZWFkeSBiZSBmYWxzZSBvbiBXaW5kb3dzCiAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNzE2CiBpZiBXRUJBU1NFTUJMWSBhbmQgbm90IFg4Nl82
NF9XSU4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50
aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
OCArNDgsMTAgQEAgcHVibGljOgogICAgIENhY2hlYWJsZUlkZW50aWZpZXIoKSA9IGRlZmF1bHQ7
CiAKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUNlbGwo
SlNDZWxsKiBpZGVudGlmaWVyKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZp
ZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayosIGNvbnN0
IElkZW50aWZpZXImKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayosIFVuaXF1ZWRTdHJp
bmdJbXBsKik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3Rh
dGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgY29uc3QgSWRlbnRpZmllciYpOworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2Nr
VHlwZSosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJ
ZGVudGlmaWVyIGNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwq
KTsKICAgICBzdGF0aWMgY29uc3RleHByIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbVJh
d0JpdHModWludHB0cl90IHJhd0JpdHMpIHsgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIocmF3
Qml0cyk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxl
SWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lvbiAyODMwNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29u
c3QgSWRlbnRpZmllciYgaSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3Qg
SWRlbnRpZmllciYgaSkKIHsKICAgICByZXR1cm4gY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKGNvZGVCbG9jaywgaS5pbXBsKCkpOwogfQogCi1pbmxpbmUgQ2FjaGVhYmxlSWRl
bnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlm
aWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7
CiAgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGNvZGVCbG9jay0+aGFzSWRlbnRpZmllcih1
aWQpKTsKICAgICByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcih1aWQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiQ2FjaGVkVHlwZXMuaCIKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2lu
Y2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ2FjaGVFcnJvci5oIgog
I2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgpAQCAtMTkxOCw2ICsxOTE5LDgg
QEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgbnVtVmFsdWVQcm9maWxlcygpIGNvbnN0IHsgcmV0
dXJuIG1fbnVtVmFsdWVQcm9maWxlczsgfQogICAgIHVuc2lnbmVkIG51bUFycmF5UHJvZmlsZXMo
KSBjb25zdCB7IHJldHVybiBtX251bUFycmF5UHJvZmlsZXM7IH0KKyAgICB1bnNpZ25lZCBudW1C
aW5hcnlBcml0aFByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1CaW5hcnlBcml0aFByb2Zp
bGVzOyB9CisgICAgdW5zaWduZWQgbnVtVW5hcnlBcml0aFByb2ZpbGVzKCkgY29uc3QgeyByZXR1
cm4gbV9udW1VbmFyeUFyaXRoUHJvZmlsZXM7IH0KIAogcHJpdmF0ZToKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV90aGlzUmVnaXN0ZXI7CkBAIC0xOTUyLDYgKzE5NTUsOCBAQCBwcml2YXRlOgogCiAg
ICAgdW5zaWduZWQgbV9udW1WYWx1ZVByb2ZpbGVzOwogICAgIHVuc2lnbmVkIG1fbnVtQXJyYXlQ
cm9maWxlczsKKyAgICB1bnNpZ25lZCBtX251bUJpbmFyeUFyaXRoUHJvZmlsZXM7CisgICAgdW5z
aWduZWQgbV9udW1VbmFyeUFyaXRoUHJvZmlsZXM7CiAKICAgICBDYWNoZWRNZXRhZGF0YVRhYmxl
IG1fbWV0YWRhdGE7CiAKQEAgLTIxNjAsNiArMjE2NSw4IEBAIEFMV0FZU19JTkxJTkUgVW5saW5r
ZWRDb2RlQmxvY2s6OlVubGlua2UKICAgICAsIG1fcmFyZURhdGEoY2FjaGVkQ29kZUJsb2NrLnJh
cmVEYXRhKGRlY29kZXIpKQogICAgICwgbV92YWx1ZVByb2ZpbGVzKGNhY2hlZENvZGVCbG9jay5u
dW1WYWx1ZVByb2ZpbGVzKCkpCiAgICAgLCBtX2FycmF5UHJvZmlsZXMoY2FjaGVkQ29kZUJsb2Nr
Lm51bUFycmF5UHJvZmlsZXMoKSkKKyAgICAsIG1fYmluYXJ5QXJpdGhQcm9maWxlcyhjYWNoZWRD
b2RlQmxvY2subnVtQmluYXJ5QXJpdGhQcm9maWxlcygpKQorICAgICwgbV91bmFyeUFyaXRoUHJv
ZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bVVuYXJ5QXJpdGhQcm9maWxlcygpKQogewogfQogCkBA
IC0yMzM3LDYgKzIzNDQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29kZUJsb2NrPENv
ZGVCCiAgICAgbV9oYXNDaGVja3BvaW50cyA9IGNvZGVCbG9jay5tX2hhc0NoZWNrcG9pbnRzOwog
ICAgIG1fbnVtVmFsdWVQcm9maWxlcyA9IGNvZGVCbG9jay5tX3ZhbHVlUHJvZmlsZXMuc2l6ZSgp
OwogICAgIG1fbnVtQXJyYXlQcm9maWxlcyA9IGNvZGVCbG9jay5tX2FycmF5UHJvZmlsZXMuc2l6
ZSgpOworICAgIG1fbnVtQmluYXJ5QXJpdGhQcm9maWxlcyA9IGNvZGVCbG9jay5tX2JpbmFyeUFy
aXRoUHJvZmlsZXMuc2l6ZSgpOworICAgIG1fbnVtVW5hcnlBcml0aFByb2ZpbGVzID0gY29kZUJs
b2NrLm1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKIAogICAgIG1fbWV0YWRhdGEuZW5jb2Rl
KGVuY29kZXIsIGNvZGVCbG9jay5tX21ldGFkYXRhLmdldCgpKTsKICAgICBtX3JhcmVEYXRhLmVu
Y29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9yYXJlRGF0YS5nZXQoKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NP
TU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lk
IHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1l
dGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5QXJp
dGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5hcnlB
cml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAgcHJv
ZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8
fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBpbmxpbmUg
cHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVu
Y3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlm
Zl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9m
ZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlv
bkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0
cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsgfQog
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDM0LDggKzQzNCw2IEBAIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0
aW9ucygKICAgICBPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSA9IGZhbHNlOwogI2VuZGlmCiAK
LSAgICBpZiAoIWlzQVJNNjQoKSkKLSAgICAgICAgT3B0aW9uczo6dXNlRGF0YUlDKCkgPSBmYWxz
ZTsKICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQogICAgICAgICBPcHRpb25zOjp1c2VE
YXRhSUNJbk9wdGltaXppbmdKSVQoKSA9IGZhbHNlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwOSw3ICszMDksNiBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAg
IHYoSW50MzIsIGV2YWxUaHJlc2hvbGRNdWx0aXBsaWVyLCAxMCwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihVbnNpZ25lZCwgbWF4aW11bUV2YWxDYWNoZWFibGVTb3VyY2VMZW5ndGgsIDI1Niwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAotICAgIHYoQm9vbCwgcmFuZG9taXplRXhlY3V0aW9u
Q291bnRzQmV0d2VlbkNoZWNrcG9pbnRzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dihJbnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvckJhc2Vs
aW5lLCAxMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0
aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yVXBwZXJUaWVycywgNTAwMDAsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIFwKQEAgLTUzMiw2ICs1MzEsNyBAQCBib29sIGNhblVzZVdlYkFzc2Vt
Ymx5RmFzdE1lbW9yeSgpOwogICAgIHYoQm9vbCwgdXNlRGF0YUlDLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ1NoYXJpbmcsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIHVzZUJhc2VsaW5lSklUQ29kZVNoYXJpbmcs
IHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICAvKiBGZWF0dXJlIEZsYWdzICov
XAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1
dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
cmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2
LDEwICszOTYsMTkgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aQog
ICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCiAgICAgICAgIGNvZGVCbG9jay0+
dmFsaWRhdGUoKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQotICAgICAgICBzZXR1
cExMSW50KGNvZGVCbG9jayk7Ci0gICAgZWxzZQotICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJs
b2NrKTsKKyAgICBib29sIGluc3RhbGxlZFVubGlua2VkQmFzZWxpbmVDb2RlID0gZmFsc2U7Cisj
aWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gYmFzZWxpbmVS
ZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNv
ZGUpIHsKKyAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShi
YXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgaW5zdGFsbGVkVW5saW5rZWRC
YXNlbGluZUNvZGUgPSB0cnVlOworICAgIH0KKyNlbmRpZgorICAgIGlmICghaW5zdGFsbGVkVW5s
aW5rZWRCYXNlbGluZUNvZGUpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpCisg
ICAgICAgICAgICBzZXR1cExMSW50KGNvZGVCbG9jayk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHNldHVwSklUKHZtLCBjb2RlQmxvY2spOworICAgIH0KIAogICAgIGluc3RhbGxDb2RlKHZt
LCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+Y29kZVR5cGUoKSwgY29kZUJsb2NrLT5zcGVjaWFsaXph
dGlvbktpbmQoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRUaWVyVXBDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDkgKzUyLDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1V
cCgpCiAgICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkp
Ci0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0
aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9s
ZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9y
T01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1Ro
cmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwog
ICAgIH0KIAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpA
QCAtNjUsOSArNjUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQogICAgIHsK
ICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAg
ICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplU29vbigp
LCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hv
bGRGb3JCQlFPcHRpbWl6ZVNvb24oKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5l
d1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0
cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01H
T3B0aW1pemVTb29uKCkpOwogICAgIH0KIAogICAgIHN0cnVjdCBPU1JFbnRyeURhdGEgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVw
Q291bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CiAKIFRpZXJVcENvdW50OjpUaWVyVXBDb3VudCgpCiB7Ci0gICAg
c2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJt
VXAoKSwgbnVsbHB0cik7CisgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZv
ck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiB9CiAKIFRpZXJVcENvdW50Ojp+VGllclVwQ291
bnQoKSA9IGRlZmF1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGll
clVwQ291bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGllclVwQ291bnQuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAg
cHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCh1aW50MzJfdCBmdW5jdGlvbklu
ZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBm
dW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBhZnRlciB3YXJtLXVwLiIpOwotICAgICAg
ICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldh
cm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVj
a0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCkBAIC05MCwxNCArOTAsMTQgQEAgcHVi
bGljOgogICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbih1aW50MzJfdCBmdW5jdGlvbklu
ZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBm
dW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uIik7Ci0gICAg
ICAgIHNldE5ld1RocmVzaG9sZCgwLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xk
KDApOwogICAgIH0KIAogICAgIHZvaWQgb3B0aW1pemVTb29uKHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1
bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIHNvb24uIik7CiAgICAgICAgIC8vIEZJWE1F
OiBOZWVkIGFkanVzdG1lbnQgb25jZSB3ZSBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3YXNt
IGZ1bmN0aW9ucy4KLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZv
ck9NR09wdGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9w
dGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICB2b2lk
IHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCh1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNSBAQAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4K
KworICAgICAgICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiB3dGYvQmFnLmg6CisgICAgICAgICogd3RmL1BhY2tlZC5oOgorICAgICAg
ICAoV1RGOjpQYWNrZWRBbGlnbmVkUHRyOjpvcGVyYXRvciogY29uc3QpOgorCiAyMDIxLTA5LTI0
ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgdHlwZWNo
ZWNraW5nIGBpc2Agb3ZlcmxvYWRzIGZvciBgc3RkOjp1bmlxdWVfcHRyYCwgYFdURjo6VW5pcXVl
UmVmYCwgYW5kIGBXVEY6OldlYWtQdHJgCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDIwIEBAIHB1Ymxp
YzoKICAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgorICAgIEJhZyYgb3BlcmF0b3I9KEJhZzxULCBVPiYmIG90aGVyKQorICAg
IHsKKyAgICAgICAgaWYgKHVud3JhcHBlZEhlYWQoKSA9PSBvdGhlci51bndyYXBwZWRIZWFkKCkp
CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAgQmFnIGRlc3Ryb3k7CisgICAg
ICAgIGRlc3Ryb3kubV9oZWFkID0gdW53cmFwcGVkSGVhZCgpOworICAgICAgICBtX2hlYWQgPSBv
dGhlci51bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CisK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIH5CYWcoKQogICAgIHsKICAgICAg
ICAgY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvV1RG
L3d0Zi9QYWNrZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4NiwxMCBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9Ci0g
ICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVSA9IFQ+CisgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNf
dm9pZF92PFU+LCBVJj46OnR5cGUgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9
CisKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFnZXQoKTsgfQogCiAgICAg
Ly8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRv
IGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgo=
</data>
<flag name="review"
          id="462797"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
    <flag name="commit-queue"
          id="462798"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439203</attachid>
            <date>2021-09-24 15:59:11 -0700</date>
            <delta_ts>2021-09-24 16:14:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>646915</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzOCBA
QAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhZGRzIGFuICJ1bmxpbmtlZCIgYmFzZWxpbmUgSklUIHRvIEpTVkFMVUU2
NCBwbGF0Zm9ybXMuIFRoZSBKSVQKKyAgICAgICAgY29kZSBwcm9kdWNlZCBieSB0aGlzIGJhc2Vs
aW5lIEpJVCBjYW4gYmUgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3MgdGhhdAorICAgICAg
ICBzaGFyZSBhbiBVbmxpbmtlZENvZGVCbG9jay4gVGhlIGJlbmVmaXQgb2YgdGhpcyBpcywgaWYg
d2UncmUgY3JlYXRpbmcgYSBDb2RlQmxvY2sKKyAgICAgICAgZnJvbSBhbiBVbmxpbmtlZENvZGVC
bG9jayB0aGF0IGFscmVhZHkgY29tcGlsZWQgYW4gdW5saW5rZWQgYmFzZWxpbmUgSklUCisgICAg
ICAgIGluc3RhbmNlLCB0aGlzIG5ldyBDb2RlQmxvY2sganVzdCBzdGFydHMgb2ZmIGV4ZWN1dGlu
ZyBpbiB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgICJmb3IgZnJlZSIuCisgICAgICAgIAorICAg
ICAgICBUbyBtYWtlIHRoaXMgd29yaywgdGhlIGNvZGUgd2UgZW1pdCBub3cgbmVlZHMgdG8gYmUg
aW5kZXBlbmRlbnQgb2YgYSBzcGVjaWZpYworICAgICAgICBDb2RlQmxvY2sgaW5zdGFuY2UuIFdl
IHVzZSBhIENvZGVCbG9jayBpbnN0YW5jZSBmb3IgbWluaW1hbCBwcm9maWxpbmcgaW5mb3JtYXRp
b24KKyAgICAgICAgd2hlbiBjb21waWxpbmcsIGJ1dCBvdGhlcndpc2UsIHRoZSBjb2RlIGlzIHRp
ZWQgdG8gdGhlIFVubGlua2VkQ29kZUJsb2NrLiBXaGVuCisgICAgICAgIHdlIG5lZWQgQ29kZUJs
b2NrIHNwZWNpZmljIGluZm9ybWF0aW9uLCB3ZSBsb2FkIGl0LiBUaGlzIHVzdWFsbHkgbWVhbnMg
dGhpbmdzCisgICAgICAgIGxpa2Ugd2UnbGwgbG9hZCB0aGluZ3MgZnJvbSB0aGUgTWV0YWRhdGEg
ZHluYW1pY2FsbHkuIFRoaXMgcGF0Y2ggYWxzbyBhZGRzIGEKKyAgICAgICAgImxpbmtlZCBjb25z
dGFudCBwb29sIiBjb25jZXB0LCBhbmQgYW55dGltZSB3ZSBpbnN0YW50aWF0ZSBzdWNoIGEgQ29k
ZUJsb2NrLAorICAgICAgICB3ZSBhbHNvIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcyAibGlua2Vk
IGNvbnN0YW50IHBvb2wiLiBUaGlzIGNvbnRhaW5zIHRoaW5ncworICAgICAgICBsaWtlIG91ciBp
bmxpbmUgY2FjaGUgZGF0YSBzdHJ1Y3R1cmVzIChTdHJ1Y3R1cmVTdHViSW5mbyopLCBKU0dsb2Jh
bE9iamVjdCosCisgICAgICAgIGV0Yy4KKyAgICAgICAgCisgICAgICAgIFVubGlua2VkIGJhc2Vs
aW5lIEpJVCBhbHdheXMgcnVucyBJQ3MgaW4gdGhlICJkYXRhIiBtb2RlLiBUbyBtYWtlIHRoaXMg
d29yaywgSQorICAgICAgICBtYWRlIGRhdGEgSUNzIHdvcmsgb24geDg2XzY0LiBUbyBkbyB0aGlz
LCB3ZSBubyBsb25nZXIgY2FsbC9yZXQgdG8gdGhlIElDLgorICAgICAgICBJbnN0ZWFkLCB3ZSBq
dW1wIHRvIHRoZSBJQywgYW5kIHRoZSBJQyBqdW1wcyBiYWNrIGJ5IGxvYWRpbmcgdGhlICJkb25l
IiBsb2NhdGlvbgorICAgICAgICBmcm9tIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBkeW5hbWljYWxs
eS4gVGhpcyBzaW1wbGlmaWVzIHRoZSBkZXNpZ24gdG8gbm90IGJlCisgICAgICAgIGJhc2VkIG9u
IHRoZSBhcm02NCBjYWxsaW5nIGNvbnZlbnRpb24sIGFuZCBrZWVwcyB0aGUgc2FtZSBwZXJmb3Jt
YW5jZSBjaGFyYWN0ZXJpc3RpY3MuIAorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNv
IGFkZHMgYSBuZXcgdmVyc2lvbiBvZiBJbmxpbmVBY2Nlc3MgdGhhdCBpcyBvbmx5IHVzZWQgaW4g
YmFzZWxpbmUKKyAgICAgICAgSklUIChmb3Igbm93KS4gSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIG1h
a2UgdGhlIERGRy9GVEwgYWxzbyB1c2UgdGhpcyBmb3IgRGF0YQorICAgICAgICBJQ3MuIEJ1dCB3
ZSBkb24ndCBuZWVkIHRvIGRvIHRoYXQgeWV0IHNpbmNlIHRob3NlIHRpZXJzIGRvbid0IHVzZSBk
YXRhIElDcyBieQorICAgICAgICBkZWZhdWx0LiBUaGUgYmFzZWxpbmUgSklUIG5vdyBoYXMgYSBw
dXJlIGRhdGEgSUMgYXBwcm9hY2ggdG8gSW5saW5lQWNjZXNzLiBTbworICAgICAgICBpbnN0ZWFk
IG9mIHJlcGF0Y2hpbmcgY29kZSwgd2UgcmVwYXRjaCBmaWVsZHMgd2UgbG9hZCBkeW5hbWljYWxs
eS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgYSBmZXcgdGhp
bmdzIGluIE9TUiBleGl0LCB3aGVyZSBib3RoIERGRy9GVEwgd2VyZQorICAgICAgICBzdG9yaW5n
IGNhbGxlZSBzYXZlcyB0byB0aGUgY2FsbGVlIHNhdmVzIGJ1ZmZlciBpbiBhIHdlaXJkIHBsYWNl
LCBhbmQgc2VwYXJhdGUKKyAgICAgICAgZnJvbSBvbmUgYW5vdGhlci4gSSBub3RpY2VkIHRoaXMg
Y29kZSBjYW4gYmUgc2ltcGxpZmllZCBpZiB3ZSBqdXN0IHN0b3JlCisgICAgICAgIGNhbGxlZSBz
YXZlcyBhdCB0aGUgZW5kIG9mIHRoZSBPU1IgZXhpdCBoYW5kbGVyLCBhbmQgZnJvbSBjb21tb24g
SklUIGVtaXNzaW9uCisgICAgICAgIGNvZGUuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNo
IGFsc28gZml4ZXMgYSBidWcgd2hlcmUgd2UgY291bGQgZW5kIHVwIHdpdGggdGhlIHdyb25nIChh
bmQgYWx3YXlzCisgICAgICAgIG1vcmUgbmVnYXRpdmUpIFNQIGluIHRoZSBiYXNlbGluZSBKSVQu
IFRoaXMgY291bGQgaGFwcGVuIHdoZW4gd2UgT1NSIGV4aXQKKyAgICAgICAgZnJvbSBhbiBpbmxp
bmVkIGdldHRlci9zZXR0ZXIuIFRoZSBPU1IgZXhpdCBjb2RlIHB1dHMgdGhlIHJldHVybiBQQyB3
aGVuCisgICAgICAgIHJldHVybmluZyB0byB0aGUgY2FsbCBzaXRlIG9mIHRoZSBnZXR0ZXIvc2V0
dGVyIHRvIGJlIHRoZSBpbmxpbmUgY2FjaGUncworICAgICAgICAiZG9uZSBsb2NhdGlvbiIuIEhv
d2V2ZXIsIHRoaXMgImRvbmUgbG9jYXRpb24iIGRpZG4ndCB1c2VkIHRvIHJlc3RvcmUgU1AuCisg
ICAgICAgIFRoaXMgcGF0Y2ggY29uc2VydmF0aXZlbHkgbWFrZXMgaXQgc28gdGhhdCB3ZSByZXN0
b3JlIHRoZSBTUCBhdCB0aGVzZSBzaXRlcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbWVh
c3VyZWQgYXMgYSAxJSBzcGVlZHVwIG9uIFNwZWVkb21ldGVyMi4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlT3Bl
cmFuZHNGb3JDaGVja3BvaW50Lmg6CisgICAgICAgIChKU0M6OnZhbHVlUHJvZmlsZU9mZnNldEZv
cik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjplbWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RmFz
dFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKToKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgpOgorICAgICAgICAo
SlNDOjpDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMpOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNsb3dT
dHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjphZGRyZXNzT2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZSk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6ZnJhbWVSZWdpc3RlckNvdW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiaW5hcnlB
cml0aFByb2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5hcnlBcml0aFBy
b2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluZFBDKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpqaXRTb29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRO
ZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRBZGRJQyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUTXVsSUMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVFN1YklDKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRKSVROZWdJQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6aml0QWZ0ZXJXYXJtVXApOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29u
c3RhbnRQb29sKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFzZWxpbmVKSVRDb25zdGFudFBvb2wpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpkb250SklUQW55dGltZVNvb24pOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duQ2VsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6YWRkTWF0aElDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzZXRKSVRDb2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRD
b2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzd2l0Y2hKdW1wVGFi
bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJh
c2VsaW5lU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNlbGlu
ZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZGZnU3dp
dGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdTdHJpbmdTd2l0Y2hK
dW1wVGFibGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uu
aDoKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjpzZXRUaHJlc2hvbGQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0
aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJ
ZE1ldGFkYXRhLmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0
aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpHZXRCeUlkTW9kZU1ldGFk
YXRhOjpvZmZzZXRPZk1vZGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcDoK
KyAgICAgICAgKEpTQzo6R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0
U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEdl
dHRlcik6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6
OkluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToK
KyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5s
aW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UpOgorICAgICAgICAoSlND
OjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChK
U0M6OklubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OklubGlu
ZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyk6CisgICAgICAgIChKU0M6OklubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2Vzcyk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmg6
CisgICAgICAgICogYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmg6CisgICAgICAgIChK
U0M6Okl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMpOgorICAgICAgICAq
IGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6CisgICAgICAgIChKU0M6OkxMSW50Q2FsbExp
bmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSk6CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2Rl
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAo
SlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OmNhbGN1bGF0ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0
aW9uSGFuZGxpbmcpOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNl
cnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMpOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgICogYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0
YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5jcHA6CisgICAgICAg
IChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OmluaXRHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0UHV0QnlJZFJlcGxhY2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5p
dEluQnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNz
Q2FzZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZE
b25lTG9jYXRpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHA6CisgICAg
ICAgIChKU0M6OnByaW50U3VwZXJTYW1wbGVyU3RhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0lk
ZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dGhyZXNob2xkRm9y
SklUKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJv
ZmlsZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6Omluc3RydWN0aW9uQXQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmJpbmFyeUFyaXRoUHJvZmlsZSk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp1bmFyeUFyaXRoUHJvZmlsZSk6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpsbGludEV4ZWN1dGVDb3VudGVyKToKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaDoKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRNZXRhZGF0YVRhYmxlOjpvZmZzZXRJbk1ldGFkYXRhVGFibGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNl
OjpWYWx1ZVByb2ZpbGVCYXNlKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQmFzZTo6Y2xl
YXJCdWNrZXRzKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVj
a2V0KToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb2RlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAqIGRmZy9E
RkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxpbmsp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJl
cGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmhhbmRsZUV4aXRDb3VudHMp
OgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRK
dW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRQcml2YXRlTmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVWYWx1ZVN1Yik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dTaGFkb3dDaGlja2VuVGFpbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExKSVRDb2Rl
Lmg6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Omxpbmsp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjphZGRNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlVW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpjb21waWxlQmluYXJ5TWF0aElDKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVB1dFByaXZhdGVOYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAg
ICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29t
cGlsZVN0dWIpOgorICAgICAgICAqIGdlbmVyYXRvci9NZXRhZGF0YS5yYjoKKyAgICAgICAgKiBq
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpz
dG9yZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVh
bENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMu
aDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6CisgICAgICAgICogaml0L0Jhc2VsaW5lSklUQ29kZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKToKKyAg
ICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZGRKSVRNdWxJQyk6CisgICAgICAgIChKU0M6Ok1h
dGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMpOgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFk
ZEpJVE5lZ0lDKToKKyAgICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MpOgor
ICAgICAgICAoSlNDOjpCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAg
IChKU0M6OkJhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAgICogaml0
L0Jhc2VsaW5lSklUQ29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SklUQ29uc3RhbnRQb29s
OjphZGQpOgorICAgICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OnNpemUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OmF0IGNvbnN0KToKKyAgICAgICAgKiBqaXQvQmFz
ZWxpbmVKSVRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6QmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6
ZSk6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkNDYWxs
SGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKToKKyAgICAgICAgKEpTQzo6
Q0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldCk6CisgICAgICAgICogaml0
L0NDYWxsSGVscGVycy5oOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHA6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oOgorICAgICAgICAq
IGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpDYWxsRnJhbWVTaHVmZmxlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpwcmVwYXJlRm9yVGFpbENhbGwpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5o
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c25hcHNob3QgY29uc3QpOgorICAg
ICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OkpJVCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRWYXJS
ZWFkT25seUNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc2V0U1ApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5k
Q29uc3RhbnRQb29sUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpm
aW5hbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcik6CisgICAgICAgIChK
U0M6OkpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKToKKyAgICAgICAgKiBqaXQvSklULmg6Cisg
ICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVnYXRlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2FkZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tdWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3ViKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2Fs
bEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2l0ZXJhdG9yX25leHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX25leHQpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxl
U2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dD
YXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpT
Qzo6SklUQ29kZTo6dXNlRGF0YUlDKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6cGNUb0NvZGVP
cmlnaW5NYXApOgorICAgICAgICAqIGppdC9KSVRDb21waWxhdGlvbktleS5jcHA6CisgICAgICAg
IChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklU
Q29tcGlsYXRpb25LZXkuaDoKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OkpJVENv
bXBpbGF0aW9uS2V5KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJhdG9y
ISBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpvcGVy
YXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Omhhc2ggY29u
c3QpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6cHJvZmlsZWRCbG9jayBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXpl
KToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJ
VEdldEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUdldEJ5SWRJbmxpbmVB
Y2Nlc3MpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJ
VFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkpJVERlbEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklURGVsQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAg
IChKU0M6OkpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAo
SlNDOjpKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpKSVRHZXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXRoKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0
YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudEludCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6aXNLbm93bkNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdldENv
bnN0YW50T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6
bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmFkdmFuY2VUb05l
eHRDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdExvYWREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkpJVDo6anVtcFRhcmdldCk6CisgICAgICAgIChKU0M6OkpJVDo6
bG9hZFB0ckZyb21NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZDMyRnJvbU1ldGFk
YXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkOEZyb21NZXRhZGF0YSk6CisgICAgICAgIChK
U0M6OkpJVDo6c3RvcmU4VG9NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6c3RvcmUzMlRv
TWV0YWRhdGEpOgorICAgICAgICAoSlNDOjpKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
SklUOjpsb2FkR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29kZUJsb2Nr
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEdldFB1dEluZm8pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZSk6IERlbGV0ZWQuCisgICAg
ICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9u
dWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzVHJ1dGh5
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dp
dGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVj
a190cmFwcyk6CisgICAgICAgIChKU0M6OkpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5l
d0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYXJndW1lbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9v
Zik6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdHlwZW9mX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SklUX09QRVJBVElPTik6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBqaXQvSklUUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmtleSk6CisgICAgICAg
ICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6c2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9k
ZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
aW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQcml2YXRlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SGFzUHJpdmF0ZVNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19w
cml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRl
X2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmspOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29w
ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKToKKyAgICAg
ICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF90
b19zY29wZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1
cmVWYXIpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9wcml2YXRlX2Jy
YW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9pbnRl
cm5hbF9maWVsZCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUdldEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeSk6CisgICAgICAgIChK
U0M6OnRyeUNhY2hlSW5CeSk6CisgICAgICAgIChKU0M6OnVubGlua0NhbGwpOgorICAgICAgICAq
IGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpoYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxl
RXhjZXB0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6Cisg
ICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6
aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRf
U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayk6CisgICAgICAgICogcnVudGltZS9DYWNoZWRU
eXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtQmluYXJ5QXJpdGhQ
cm9maWxlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtVW5hcnlB
cml0aFByb2ZpbGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9j
a1R5cGU+OjplbmNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoK
KyAgICAgICAgKEpTQzo6dXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKToKKyAgICAg
ICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlv
bnMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1l
L1NjcmlwdEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpw
cmVwYXJlRm9yRXhlY3V0aW9uSW1wbCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRUaWVyVXBD
b3VudGVyLmg6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6b3B0aW1p
emVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6
b3B0aW1pemVTb29uKToKKyAgICAgICAgKiB3YXNtL1dhc21UaWVyVXBDb3VudC5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50OjpUaWVyVXBDb3VudCk6CisgICAgICAgICogd2Fz
bS9XYXNtVGllclVwQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6Om9w
dGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6b3B0
aW1pemVOZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50Ojpv
cHRpbWl6ZVNvb24pOgorCiAyMDIxLTA5LTIzICBQaGlsaXAgQ2hpbWVudG8gIDxwY2hpbWVudG9A
aWdhbGlhLmNvbT4KIAogICAgICAgICBWYXJpb3VzIHR3ZWFrcyBpbiBwcmVwYXJhdGlvbiBmb3Ig
VGVtcG9yYWwuSW5zdGFudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC02MTEsNiArNjExLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCiAgICAgYnVp
bHRpbnMvQnVpbHRpblV0aWxzLmgKIAorICAgIGJ5dGVjb2RlL0FyaXRoUHJvZmlsZS5oCiAgICAg
Ynl0ZWNvZGUvQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvQXJyYXlQcm9m
aWxlLmgKICAgICBieXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25zLmgKQEAgLTgzNyw2ICs4Mzgs
NyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAKICAgICBqaXQv
QXNzZW1ibHlIZWxwZXJzLmgKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaAorICAg
IGppdC9CYXNlbGluZUpJVENvZGUuaAogICAgIGppdC9DQ2FsbEhlbHBlcnMuaAogICAgIGppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmgKICAgICBqaXQvRXhlY3V0YWJsZU1lbW9yeUhhbmRsZS5oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYxOSw2ICs2
MTksNyBAQCBpbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAogaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcAogCiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAoraml0L0Jhc2VsaW5lSklUQ29k
ZS5jcHAKIGppdC9CYXNlbGluZUpJVFBsYW4uY3BwCiBqaXQvQmluYXJ5U3dpdGNoLmNwcAogaml0
L0NDYWxsSGVscGVycy5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTAwLDYgKzkwMCw3IEBA
CiAJCTUyQ0QwRjVEMjI0MkY1NjkwMDRBMThBNSAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBG
cmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVD
ODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKIAkJNTJDRDBGNUUy
MjQyRjU2OTAwNEExOEE1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDcz
Njk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjY4MjI0MkY3
MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAq
LzsgfTsKKwkJNTJERDAwMDgyNkUwMzlCOTAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJERDAwMDYyNkUw
MzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyRUVENzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBG
dW5jdGlvbkFsbG93bGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJFRUQ3OTMyNDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0Lmgg
Ki87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgg
Ki87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIx
MUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSAqLzsgfTsKQEAgLTEyMjAs
NyArMTIyMSw3IEBACiAJCTc5ODcyQzQ4MjIxQkJBRjMwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4NzJD
NDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFzZUludGVybmFsLmggKi87IH07CiAJCTc5OUVGN0M0
MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBC
M1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTA5MDdFMUQ3Njg0
NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTc5QTIyODM2MUQzNUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLzsgfTsKKwkJNzlBMjI4
MzYxRDM1RDcxRjAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFy
aXRoUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTc5QUJCMTdFMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUJCMTdDMUU1Q0NC
NTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUFDMzBGRjFGOTk1MzY0MDA0ODRGRDcgLyogT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFDMzBGRTFGOTk1MzYzMDA0ODRGRDcgLyogT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGVJbmxpbmVzLmggKi87IH07CiAJCTc5QUYwQkU0MUQzRUZENEMwMEU5NUZB
NSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUYwQkUzMUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJ
bmxpbmVSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMzY3NCw2ICszNjc1LDggQEAKIAkJNTJDRDBGNjQyMjQyRjU2OTAwNEExOEE1IC8q
IHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9
ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9
IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTUyQ0QwRjY3
MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBwYXRoID0gZGZnL3Rlc3RkZmcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQxMzA4RjIyMUNFMDNBMDA5QzgzNkMgLyogZm9vLmpz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VsaW5lSklUQ29kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVK
SVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VsaW5lSklUQ29kZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkyMjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5j
dGlvbkFsbG93bGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvbkFsbG93bGlzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkzMjQ5MkI4NjgwMDhGNEM5
MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlvbkFsbG93bGlz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1QjFFNzFFQjA4MDA4MUY0
Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBwYXRoID0g
anMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNjI3Niw2ICs2Mjc5LDggQEAKIAkJCQk2Qjc2N0U3QTI2NzkxRjI3MDAxN0Y4RDEg
LyogQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaCAqLywKIAkJCQk3MjM5OThGNjI2NURCQ0RCMDA1
Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLywKIAkJCQk3MjM5OThGNTI2NURCQ0RCMDA1
Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8sCisJCQkJNTJERDAwMDcyNkUwMzlCNDAwNTRF
NDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8sCisJCQkJNTJERDAwMDYyNkUwMzlCMzAwNTRF
NDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovLAogCQkJCTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2
NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAv
KiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4MzkyRDFCQUNBOUQzMDA0NEU4MjQgLyogQ2Fj
aGVkUmVjb3ZlcnkuY3BwICovLApAQCAtOTczMCw2ICs5NzM1LDcgQEAKIAkJCQkwRjIwMTc4MjFE
Q0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMz
OTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2ls
bHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlDQzg5MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdG
cm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM4NkZEN0UyNkU4NjdCODAwRTRDMjhC
IC8qIFRlbXBvcmFsUGxhaW5UaW1lLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAyLDE1ICsyMDIsMTUgQEAgUmVmUHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nh
c2U6OmZyb21TdHJ1YwogICAgIHN3aXRjaCAoc3R1YkluZm8uY2FjaGVUeXBlKCkpIHsKICAgICBj
YXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJ
bmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7Ci0gICAgICAgIHJldHVybiBQcm94eWFibGVBY2Nl
c3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBMb2FkLCBpZGVudGlmaWVyLCBzdHViSW5mby51LmJ5
SWRTZWxmLm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuIFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIs
IExvYWQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJ
ZFJlcGxhY2U6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7Ci0gICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBS
ZXBsYWNlLCBpZGVudGlmaWVyLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwgc3R1YkluZm8u
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIEFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5
SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAK
ICAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nh
c2U6OmNyZWF0ZSh2bSwgb3duZXIsIEluSGl0LCBpZGVudGlmaWVyLCBzdHViSW5mby51LmJ5SWRT
ZWxmLm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpKTsK
KyAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIEluSGl0LCBpZGVu
dGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8uaW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwpAQCAt
MTk4NSwxNCArMTk4NSwxMCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NH
ZW5lCiAgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy9zZXR0ZXJzLgogICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKIAorCiAgICAgICAgIC8vIFRoaXMg
YWxzbyBkb2VzIHRoZSBuZWNlc3NhcnkgY2FsY3VsYXRpb25zIG9mIHdoZXRoZXIgb3Igbm90IHdl
J3JlIGFuCiAgICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGluZyBjYWxsIHNpdGUuCi0gICAgICAg
IFJlZ2lzdGVyU2V0IGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKLSNpZiBDUFUoQVJNNjQpCi0g
ICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICAgICAgZXh0cmFSZWdp
c3RlcnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCi0gICAgICAg
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJl
c2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZl
KTsKKyAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUg
PSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgpOwogCiAgICAgICAg
IGF1dG8gcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsID0gWyZdKEFjY2Vzc0dl
bmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSYgc3BpbGxTdGF0ZSwgYm9vbCBjYWxsSGFzUmV0dXJu
VmFsdWUpIHsKICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlOwpAQCAtMjA3OSw4
ICsyMDc1LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAg
ICAgICAgICAgQVNTRVJUKCEobnVtYmVyT2ZSZWdzRm9yQ2FsbCAlIHN0YWNrQWxpZ25tZW50UmVn
aXN0ZXJzKCkpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0g
bnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQyk7CiAKLSAgICAgICAgICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9y
Q2FsbCA9Ci0gICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisgICAgICAgICAgICB1bnNpZ25lZCBh
bGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CiAKICAgICAgICAgICAg
IGppdC5zdWJQdHIoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
YWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKQEAgLTIxMzgsNiArMjEzMyw3IEBAIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKIAogICAgICAgICAgICAgaW50IHN0
YWNrUG9pbnRlck9mZnNldCA9IChjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSkgLSBzdGF0ZS5wcmVzZXJ2ZWRSZXVzZWRSZWdpc3RlclN0YXRlLm51bWJl
ck9mQnl0ZXNQcmVzZXJ2ZWQgLSBzcGlsbFN0YXRlLm51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JS
ZWdpc3RlclByZXNlcnZhdGlvbjsKICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCiAgICAgICAgICAg
ICBib29sIGNhbGxIYXNSZXR1cm5WYWx1ZSA9IGlzR2V0dGVyKCk7CiAgICAgICAgICAgICByZXN0
b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoc3BpbGxTdGF0ZSwgY2FsbEhhc1JldHVy
blZhbHVlKTsKIApAQCAtMjI2NCwxMiArMjI2MCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKIAogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CiAKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKLSNp
ZiBDUFUoQVJNNjQpCi0gICAgICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAg
ICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KEFSTTY0UmVnaXN0ZXJz
Ojpscik7Ci0jZW5kaWYKLSAgICAgICAgICAgIGF1dG8gc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNl
cnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoZXh0cmFSZWdp
c3RlcnNUb1ByZXNlcnZlKTsKKyAgICAgICAgICAgIGF1dG8gc3BpbGxTdGF0ZSA9IHN0YXRlLnBy
ZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoKTsKIAog
ICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbldyaXRlQmFy
cmllclNsb3dQYXRoKT4oQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIHNjcmF0Y2hH
UFIpOwogICAgICAgICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKQEAgLTIzNjQs
MTAgKzIzNTUsNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAg
ICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlOwogICAg
ICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoYmFzZUdQUik7CiAgICAg
ICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldCh2YWx1ZVJlZ3MpOwotI2lm
IENQVShBUk02NCkKLSAgICAgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkK
LSAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChBUk02NFJl
Z2lzdGVyczo6bHIpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0
YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNU
b1N0YWNrRm9yQ2FsbChleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCSh3b3JraW5nIGNv
cHkpCkBAIC0yOTIsNyArMjkyLDcgQEAgb3BfZ3JvdXAgOlByb2ZpbGVkQmluYXJ5T3AsCiAgICAg
ICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVzLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsK
LSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQ
cm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZhbHVlUHJv
ZmlsZWRCaW5hcnlPcCwKQEAgLTM1Myw3ICszNTMsNyBAQCBvcF9ncm91cCA6VW5hcnlJblBsYWNl
UHJvZmlsZWRPcCwKICAgICAgICAgc3JjRHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlCisg
ICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3AgOnRv
X29iamVjdCwKQEAgLTM4Niw3ICszODYsNyBAQCBvcCA6bmVnYXRlLAogICAgICAgICByZXN1bHRU
eXBlOiBSZXN1bHRUeXBlLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQ
cm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFy
aXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVj
a3BvaW50LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw2ICs3MywyOCBAQCBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckltcGwoQnl0ZWNvCiAg
ICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9maWxlOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yKHVuc2lnbmVkIGNo
ZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURfUEFSQU0oY2hlY2twb2ludEluZGV4KTsKKyAg
ICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9vcGVuKSB7
CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVy
YXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9m
SXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OmdldE5leHQ6
IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAg
ICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisg
ICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9y
X25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2Fz
ZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4
dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZEb25lUHJvZmls
ZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1ZTogcmV0dXJuIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDog
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSAKKyAg
ICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisK
IHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmls
ZUZvcihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4
KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBA
IHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFp
c09uTGlzdCgpKTsKIH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2Fs
bExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVM
b2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFy
dCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjI1LDYgKzIyMCwx
MiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0TWF4QXJndW1lbnRDb3VudEluCiAgICAgbV9tYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZhbHVlOwogfQogCitDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkgJiYgaXNUYWlsQ2FsbCgpKTsKKyAgICByZXR1cm4g
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KHUuY29kZUlDLm1fZmFz
dFBhdGhTdGFydCk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQog
ewogICAgIGF1dG8gaGFuZGxlU3BlY2lmaWNDYWxsZWUgPSBbJl0gKEpTRnVuY3Rpb24qIGNhbGxl
ZSkgewpAQCAtMjk4LDIzICsyOTksMTEgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldEZyYW1lU2h1
ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAot
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChD
Q2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQ
UiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JU
YWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0
UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0
YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKLSAgICBpZiAoaXNEYXRh
SUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVn
OjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwotICAgICAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAgICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRo
U3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKLSAgICB9KTsKLQogICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkg
eworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlDOjpZZXMpIHsKICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7CiAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkp
LCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBnb1BvbHltb3JwaGlj
OwpAQCAtMzIzLDcgKzMxMiw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0lu
Zm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2Fs
bEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGpp
dC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BS
KSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAo
aXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAg
ICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8vIFBvbHltb3JwaGljIHN0dWIgaGFuZGxl
cyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mTW9ub21vcnBoaWNDYWxsRGVz
dGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAtMzM2LDE0ICszMjUsMTYgQEAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICBzbG93UGF0aC5hcHBl
bmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVH
UFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpKTsK
IAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKLSAgICAgICAgaWYgKGlzVGFpbENh
bGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFyZUZv
clRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwogICAgICAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICB1LmNvZGVJQy5tX2Nh
bGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxsZWVDaGVjayk7CisgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CisgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOwogICAgICAgICB9KTsKICAgICB9
CiAKQEAgLTM1MywxMyArMzQ0LDM0IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFp
bENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNh
bGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRyKTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1
c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7CisgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZvR1BS
KTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7
CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywgaml0LCBjYWxsZWVH
UFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBpc1RhaWxDYWxsKCksIG51bGxwdHIpOwog
fQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxG
YXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BS
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0
LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVG
b3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOworICAgIHJl
dHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVn
LCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxs
KSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXREYXRh
SUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0g
SW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0
LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIGZhbHNlLCBudWxs
cHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRh
aWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIs
IEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9y
VGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFs
aWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2Fs
bGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHBy
ZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRo
KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0zNjksMTcgKzM4MSwzMiBAQCB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgCiAgICAgaml0LmNhbGwoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9pZCBDYWxsTGlua0luZm86OmVtaXREYXRh
SUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
KQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAg
IGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZT
bG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2Fs
bExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8m
IHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlu
a0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgc2V0VXBDYWxsKHVubGlua2VkQ2FsbExpbmtJbmZv
LmNhbGxUeXBlLCBjYWxsZWVHUFIpOworICAgIG1fZG9uZUxvY2F0aW9uID0gdW5saW5rZWRDYWxs
TGlua0luZm8uZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFt
ZVNodWZmbGVEYXRhKSB7CisgICAgICAgIC8vIEZJWE1FOiBJdCdkIGJlIG5pY2UgaWYgdGhpcyB3
ZXJlIGEgcmVmY291bnRlZCBkYXRhIHN0cnVjdHVyZS4KKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLmZyYW1lU2h1ZmZsZURhdGEpOworICAgIH0KKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRh
SUM6Olllcyk7CisgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9H
UFI7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7
Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7CiAKICAgICBzZXRV
c2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKIAotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGpp
dC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgYXV0byBjYWxs
ID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewogICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwpAQCAtMzk3LDcg
KzQyNCw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAg
IGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwor
ICAgICAgICB1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CiAgICAgfSk7CiAKICAgICAvLyAtIElm
IHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0MywxMSBAQCBjbGFzcyBKU0Z1bmN0
aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogc3RydWN0IENhbGxGcmFtZVNodWZmbGVE
YXRhOwogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87CisKIGNsYXNzIENhbGxMaW5rSW5m
byA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiBwdWJsaWM6
Ci0gICAgZW51bSBDYWxsVHlwZSB7CisgICAgZW51bSBDYWxsVHlwZSA6IHVpbnQ4X3QgewogICAg
ICAgICBOb25lLAogICAgICAgICBDYWxsLAogICAgICAgICBDYWxsVmFyYXJncywKQEAgLTE2NSw2
ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAg
IH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIFVubGlua2VkQ2FsbExpbmtJbmZv
JiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CisKICAgICBHUFJS
ZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVHUFI7IH0KICAgICAKICAgICBl
bnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgewpAQCAtMTczLDEzICsxNzcsMTYgQEAgcHVi
bGljOgogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVt
aXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYs
IEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9v
bCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBX
QVJOX1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJO
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBX
QVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWls
Q2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JU
YWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CiAgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7CiAgICAgdm9p
ZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2b2lkIGVtaXRTbG93UGF0aChWTSYs
IENDYWxsSGVscGVycyYpOworICAgIHN0YXRpYyB2b2lkIGVtaXREYXRhSUNTbG93UGF0aChWTSYs
IENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwogICAgIHZvaWQgcmV2ZXJ0
Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURhdGFJQzo6WWVzOyB9CkBAIC0y
MDMsNyArMjEwLDYgQEAgcHVibGljOgogICAgICAgICBtX2FsbG93U3R1YnMgPSBmYWxzZTsKICAg
ICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0
YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhT
dGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2Nh
dGlvbigpOwogCkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9zbG93U3R1
YiA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgSklUU3R1YlJvdXRpbmUqIHNsb3dTdHViKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3Nsb3dTdHViLmdldCgpOwotICAgIH0KLQogICAgIGJvb2wg
c2Vlbk9uY2UoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faGFzU2VlblNob3VsZFJlcGF0Y2g7
CkBAIC0zMDgsOSArMzA5LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q2FsbFR5cGU+KG1fY2FsbFR5cGUpOwogICAgIH0KIAotICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZN
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OwogICAgIH0KIAogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkK
QEAgLTM4MSw3ICszODIsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKKworICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKKwogICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3Rp
bmF0aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC0zOTcsNiArNDAwLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1f
Y2FsbExvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50
ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoU3RhcnQ7CisgICAgICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CiAgICAgICAg
IH0gY29kZUlDOwogICAgIH0gdTsKIApAQCAtNDI0LDYgKzQyOCwxMyBAQCBpbmxpbmUgQ29kZU9y
aWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpCiAgICAgcmV0dXJuIGNhbGxMaW5rSW5mby5jb2Rl
T3JpZ2luKCk7CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbyB7CisgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHksIG9ubHkgdXNlZCBieSBiYXNlbGlu
ZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBDb2RlT3JpZ2luLgorICAgIENhbGxM
aW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVT
aHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307CisKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDgg
KzI3OSw2IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAs
IG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGls
YXRpb24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCi0gICAg
LCBtX2hhc0xpbmtlZE9TUkV4aXQoZmFsc2UpCi0gICAgLCBtX2lzRWxpZ2libGVGb3JMTEludERv
d25ncmFkZShmYWxzZSkKICAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKG90aGVyLm1fbnVtQ2FsbGVl
TG9jYWxzKQogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVtVmFycykKICAgICAsIG1fbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAob3RoZXIubV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKQEAgLTMw
OCw2ICszMDYsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAK
ICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlkZXIoKSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhv
dGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0gJm1f
dW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CiAgICAgCiAgICAgdm0uaGVhcC5j
b2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9CkBAIC0zMTgsNyArMzE4LDYgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9u
KHZtKTsKIAogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgp
OwogCiAgICAgaWYgKG90aGVyLm1fcmFyZURhdGEpIHsKICAgICAgICAgY3JlYXRlUmFyZURhdGFJ
Zk5lY2Vzc2FyeSgpOwpAQCAtMzM2LDggKzMzNSw2IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZN
JiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQog
ICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5Db21w
aWxlZFdpdGhGVEwoZmFsc2UpCi0gICAgLCBtX2hhc0xpbmtlZE9TUkV4aXQoZmFsc2UpCi0gICAg
LCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZShmYWxzZSkgCiAgICAgLCBtX251bUNhbGxl
ZUxvY2Fscyh1bmxpbmtlZENvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpCiAgICAgLCBtX251
bVZhcnModW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMoKSkKICAgICAsIG1faGFzRGVidWdnZXJT
dGF0ZW1lbnQoZmFsc2UpCkBAIC0zNTksNyArMzU2LDkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2so
Vk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkpOwog
ICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7
Ci0gICAgCisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxs
aW50RXhlY3V0ZUNvdW50ZXIoKTsKKwogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRo
aXMpOwogfQogCkBAIC0zNzAsNyArMzY5LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZt
LCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2FuJ3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVj
b2RlIGdlbmVyYXRpb24uIFRoaXMgcHJvY2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBj
b250cm9sCiAvLyBmbG93IG9yIGludHJvZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0
aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5lc3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAv
LyBhbGwgdGhlIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24g
dGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhlIGxpdmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5s
aW5rZWRDb2RlQmxvY2suCisvLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2Vs
aW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlu
a2VkQ29kZUJsb2NrLAorLy8gc28gdGhlIGJ5dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJl
dHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5nIGFuIFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29w
ZSogc2NvcGUpCiB7CkBAIC00NzEsNiArNDcxLDIxIEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgYnJlYWs7IFwKICAgICB9CiAKKyAgICB1bnNpZ25l
ZCBiaW5hcnlQcm9maWxlSW5kZXggPSAwOworICAgIHVuc2lnbmVkIHVuYXJ5UHJvZmlsZUluZGV4
ID0gMDsKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAg
ICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisg
ICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlLT5iaW5hcnlB
cml0aFByb2ZpbGUoYmluYXJ5UHJvZmlsZUluZGV4KyspOyBcCisgICAgICAgIGJyZWFrOyBcCisg
ICAgfQorI2RlZmluZSBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAg
Q0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAg
ICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+dW5hcnlBcml0
aFByb2ZpbGUodW5hcnlQcm9maWxlSW5kZXgrKyk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9
CisKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25TdHJlYW0gPSBpbnN0
cnVjdGlvbnMoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uIDogaW5zdHJ1Y3Rp
b25TdHJlYW0pIHsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKTsKQEAgLTUzMywxNCArNTQ4LDE0IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIFMKICAgICAgICAgTElOSyhPcENyZWF0ZVByb21pc2UpCiAgICAgICAgIExJ
TksoT3BDcmVhdGVHZW5lcmF0b3IpCiAKLSAgICAgICAgTElOSyhPcEFkZCkKLSAgICAgICAgTElO
SyhPcE11bCkKLSAgICAgICAgTElOSyhPcERpdikKLSAgICAgICAgTElOSyhPcFN1YikKLQotICAg
ICAgICBMSU5LKE9wTmVnYXRlKQotICAgICAgICBMSU5LKE9wSW5jKQotICAgICAgICBMSU5LKE9w
RGVjKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BBZGQpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcE11bCkKKyAgICAgICAgTElOS19X
SVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wRGl2KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BTdWIpCisKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoT3BOZWdhdGUpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9w
SW5jKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcERlYykKIAogICAg
ICAgICBMSU5LKE9wSm5lcVB0cikKIApAQCAtNzY5LDcgKzc4NCw2IEBAIGJvb2wgQ29kZUJsb2Nr
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAvLyByZWx5IG9uIHRoZSBpbnN0cnVjdGlv
biBjb3VudCAoYW5kIGFyZSBpbiB0aGVvcnkgcGVybWl0dGVkIHRvIGFsc28gaW5zcGVjdCB0aGUK
ICAgICAvLyBpbnN0cnVjdGlvbiBzdHJlYW0gdG8gbW9yZSBhY2N1cmF0ZSBhc3Nlc3MgdGhlIGNv
c3Qgb2YgdGllci11cCkuCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGppdEFmdGVy
V2FybVVwKCk7CiAKICAgICAvLyBJZiB0aGUgY29uY3VycmVudCB0aHJlYWQgd2lsbCB3YW50IHRo
ZSBjb2RlIGJsb2NrJ3MgaGFzaCwgdGhlbiBjb21wdXRlIGl0IGhlcmUKICAgICAvLyBzeW5jaHJv
bm91c2x5LgpAQCAtNzkzLDYgKzgwNyw3OCBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRp
b25Db21tb24oVk0mCiAgICAgbV9vd25lckVkZ2Uuc2V0KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlOjpjcmVhdGUodm0sIHRoaXMpKTsKIH0KIAorI2lmIEVOQUJMRShKSVQpCit2
b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5l
SklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRDb2RlKGppdENvZGUuY29weVJlZigpKTsK
KworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0Q29kZU1hcCA9IHRoaXMtPmppdENvZGVN
YXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkV4Y2VwdGlvbkhh
bmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBleGNl
cHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8z
OTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBqaXRDb2RlTWFwLmZp
bmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgYXV0byYgaml0RGF0YSA9IGVuc3Vy
ZUpJVERhdGEobG9ja2VyKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXREYXRhLm1faml0
Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CisgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBv
b2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBlbnRyeSA9IGppdENvZGUtPm1fY29uc3Rh
bnRQb29sLmF0KGkpOworICAgICAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKSB7CisgICAgICAg
ICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0OgorICAgICAgICAg
ICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBtX2dsb2JhbE9iamVjdC5nZXQo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZENhbGxM
aW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRDYWxs
TGlua0luZm8qPihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxsTGlua0luZm9zLmFkZChDb2RlT3Jp
Z2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPmluaXRpYWxpemVEYXRhSUModm0oKSwgdW5saW5rZWRDYWxsTGlua0lu
Zm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgaml0
RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGNhbGxMaW5rSW5mbzsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbzogeworICAgICAgICAgICAgICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyo+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAg
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGppdERhdGEubV9zdHViSW5mb3MuYWRkKHVu
bGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZSwgQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5
dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+aW5pdGlhbGl6ZUZyb21V
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKHRoaXMsIHVubGlua2VkU3R1YkluZm8pOworICAgICAg
ICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBzdHViSW5mbzsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkRl
Y2woaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwcjogeworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnku
cGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9v
bFtpXSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2gg
KGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIEdsb2JhbENvZGU6CisgICAgY2FzZSBNb2R1bGVDb2Rl
OgorICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0g
ZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRnVuY3Rpb25Db2RlOgorICAgICAgICAv
LyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0
ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCisgICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoYXQg
b2JzZXJ2YXRpb24uCisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGlu
ZShjYXBhYmlsaXR5TGV2ZWwoKSkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKHRoaXMpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaml0Q29kZS0+bV9pc1NoYXJlYWJsZSAm
JiAhdW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSAmJiBPcHRpb25z
Ojp1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nKCkpCisgICAgICAgIHVubGlua2VkQ29kZUJsb2Nr
KCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUgPSBXVEZNb3ZlKGppdENvZGUpOworfQorI2VuZGlm
IC8vIEVOQUJMRShKSVQpCisKIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7CiAgICAgVk0mIHZt
ID0gKm1fdm07CkBAIC04NzMsNiArOTU5LDI3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAorYm9vbCBDb2RlQmxvY2s6OmlzQ29uc3RhbnRPd25l
ZEJ5VW5saW5rZWRDb2RlQmxvY2soVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKK3sKKyAgICAv
LyBUaGlzIG5lZWRzIHRvIGNvcnJlc3BvbmQgdG8gd2hhdCB3ZSBkbyBpbnNpZGUgc2V0Q29uc3Rh
bnRSZWdpc3RlcnMuCisgICAgc3dpdGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihyZWcpKSB7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkludGVnZXI6CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRv
dWJsZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246Ok90aGVyOiB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB1bmxpbmtlZENvZGVCbG9j
aygpLT5nZXRDb25zdGFudChyZWcpOworICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0Nl
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2
YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKGNlbGwtPmluaGVyaXRzPFN5bWJvbFRhYmxlPih2
bSgpKSB8fCBjZWxsLT5pbmhlcml0czxKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4odm0oKSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogVmVjdG9yPHVuc2lnbmVkPiBDb2RlQmxv
Y2s6OnNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogewogICAgIFZNJiB2
bSA9ICptX3ZtOwpAQCAtODkyLDYgKzk5OSw3IEBAIFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2Nr
OjpzZXRDb25zdGFudFIKICAgICAgICAgc3dpdGNoIChyZXByZXNlbnRhdGlvbikgewogICAgICAg
ICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKICAgICAg
ICAgICAgIGNvbnN0YW50ID0gZ2xvYmFsT2JqZWN0LT5saW5rVGltZUNvbnN0YW50KHN0YXRpY19j
YXN0PExpbmtUaW1lQ29uc3RhbnQ+KGNvbnN0YW50LmFzSW50MzJBc0FueUludCgpKSk7CisgICAg
ICAgICAgICBBU1NFUlQoY29uc3RhbnQuaXNDZWxsKCkpOyAvLyBVbmxpbmtlZCBCYXNlbGluZSBK
SVQgcmVxdWlyZXMgdGhpcy4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI6CiAgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpJbnRlZ2VyOgpAQCAtMTUxNCw3ICsxNjIyLDcgQEAgQ29kZUJsb2NrOjpKSVRE
YXRhJiBDb2RlQmxvY2s6OmVuc3VyZUpJVAogICAgIHJldHVybiAqbV9qaXREYXRhOwogfQogCi12
b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpCit2b2lkIENv
ZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKQogewogICAgIGlmIChhdXRvKiBqaXRE
YXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxs
TGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCkBAIC0xNTI1LDYgKzE2MzMsMjAg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbgogICAgICAgICAgICAg
c3R1YkluZm8tPnZpc2l0V2Vha1JlZmVyZW5jZXMobG9ja2VyLCB0aGlzKTsKICAgICAgICAgfQog
ICAgIH0KKworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBpZiAoaml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIC8vIFZlcmlmeSB3ZSBkb24ndCBuZWVkIHRvIGZp
bmFsaXplIHRoZXNlIHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KKyAgICAgICAgZm9yIChD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA6IHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+
KG1faml0Q29kZS5nZXQoKSktPm1fZXZhbENhbGxMaW5rSW5mb3MpIHsKKyAgICAgICAgICAgIEFT
U0VSVCghY2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+Zm9yRWFjaERlcGVuZGVudENlbGwoW10gKEpTQ2VsbCopIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICB9
CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC0xNTM0LDQ2ICsxNjU2LDEyIEBAIHZvaWQgQ29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAogICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25z
KCk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIGJvb2wgaXNFbGlnaWJsZUZvckxMSW50RG93bmdy
YWRlID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGU7Ci0gICAgbV9pc0VsaWdpYmxlRm9y
TExJbnREb3duZ3JhZGUgPSBmYWxzZTsKLSAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5v
dCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRl
bXB0Ci0gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGluZSBKSVQgY29kZSBhbmQgcmVpbnN0YWxsIExM
SW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5LgotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgp
ICYmICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1NldCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRo
aXMpKSB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IG9wdGlt
aXplZFJlcGxhY2VtZW50KCkpIHsKLSAgICAgICAgICAgIGlmICghb3B0aW1pemVkQ29kZUJsb2Nr
LT5tX29zckV4aXRDb3VudGVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRWxpZ2libGVGb3JM
TEludERvd25ncmFkZSkgewotICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGUgPSBudWxscHRy
OwotICAgICAgICAgICAgICAgICAgICBMTEludDo6c2V0RW50cnlwb2ludCh0aGlzKTsKLSAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkludGVy
cHJldGVyVGh1bmspOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV91bmxpbmtlZENvZGUtPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtl
ZEhhbmRsZXIgPSBtX3VubGlua2VkQ29kZS0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNl
cHRpb25IYW5kbGVyc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0
aW9uID0gKmluc3RydWN0aW9ucygpLmF0KHVubGlua2VkSGFuZGxlci50YXJnZXQpLnB0cigpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxl
ciwgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRs
ZUNhdGNoKGluc3RydWN0aW9uLndpZHRoKCkpLmNvZGUoKSkpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdW5saW5rSW5jb21pbmdDYWxscygpOwotCi0gICAg
ICAgICAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBjbGVhciB0aGVzZSBvdXQgaGVyZSBiZWNh
dXNlIGluIGZpbmFsaXplVW5jb25kaXRpb25hbGx5IGFsbCBjb21waWxlciB0aHJlYWRzCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGFyZSBzYWZlcG9pbnRlZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5p
bmcgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBieXRlY29kZSBwYXJzZXIsIGFuZCBieXRlY29kZQot
ICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUg
cG9pbnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5mb3MuCi0gICAgICAgICAgICAgICAgICAgIHJl
c2V0SklURGF0YSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAg
ICBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSNlbmRpZgotICAgIAogICAgIGlmIChKSVRDb2RlOjpjb3VsZEJl
SW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKICAgICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hl
cygpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoISFqaXRDb2RlKCkpCi0gICAgICAgIGZp
bmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKKyAgICAgICAgZmluYWxpemVKSVRJbmxp
bmVDYWNoZXMoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0xNTk0LDcgKzE2
ODIsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAg
IGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgotICAgICAgICAgICAgY291bnQgPSBt
X2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKKyAgICAgICAgICAgIGNvdW50ID0gbV9sbGlu
dEV4ZWN1dGVDb3VudGVyLT5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgICAgICBjb3VudCA9IG1faml0RXhlY3V0
ZUNvdW50ZXIuY291bnQoKTsKQEAgLTE2NzUsMzAgKzE3NjMsNiBAQCBTdHJ1Y3R1cmVTdHViSW5m
byogQ29kZUJsb2NrOjphZGRTdHViSW5mCiAgICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2Vy
KS5tX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSwgY29kZU9yaWdpbik7CiB9CiAKLUpJVEFkZElD
KiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
KQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4g
ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fYWRkSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1K
SVRNdWxJQyogQ29kZUJsb2NrOjphZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAg
cmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsK
LX0KLQotSklUU3ViSUMqIENvZGVCbG9jazo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdWJJQ3MuYWRkKGFyaXRoUHJv
ZmlsZSk7Ci19Ci0KLUpJVE5lZ0lDKiBDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9uZWdJQ3MuYWRkKGFy
aXRoUHJvZmlsZSk7Ci19Ci0KIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRTdHVi
SW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2xvY2spOwpAQCAtMzEzMyw3ICszMTk3LDcgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpm
cmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBjYXNlIEpJVFR5cGU6
OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3Io
dGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzLT51
bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAjaWYgRU5BQkxF
KERGR19KSVQpCkBAIC0zMzQ5LDEzICszNDEzLDEzIEBAIEJpbmFyeUFyaXRoUHJvZmlsZSogQ29k
ZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAgICAg
Y2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRo
aXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfbXVsOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BTdWI+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kaXY6Ci0gICAgICAg
IHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwor
ICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9m
aWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzNjcsMTEgKzM0
MzEsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0aAogewogICAg
IHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAg
cmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0
aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wSW5j
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFz
PE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfZGVj
OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5t
X2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0z
NDcyLDIyICszNTM2LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRh
cmkKIH0KIAogI2lmIEVOQUJMRShKSVQpCi12b2lkIENvZGVCbG9jazo6c2V0UENUb0NvZGVPcmln
aW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmIG1hcCkgCi17IAotICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBlbnN1cmVKSVREYXRhKGxv
Y2tlcikubV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1vdmUobWFwKTsKLX0KLQogc3RkOjpvcHRp
b25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQQyh2b2lkKiBwYykKIHsKKyAgICBpZiAo
YXV0byogcGNUb0NvZGVPcmlnaW5NYXAgPSBtX2ppdENvZGUtPnBjVG9Db2RlT3JpZ2luTWFwKCkp
IHsKKyAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IHBj
VG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQorICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmln
aW47CisgICAgfQorCiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CiAgICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0g
ICAgICAgICAgICBpZiAoaml0RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcCkgewotICAgICAgICAg
ICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBqaXREYXRh
LT5tX3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY29kZU9yaWdpbjsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgZm9yIChTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykgewogICAgICAg
ICAgICAgICAgIGlmIChzdHViSW5mby0+Y29udGFpbnNQQyhwYykpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+KHN0dWJJbmZvLT5jb2RlT3JpZ2lu
KTsKQEAgLTM1MjEsMjggKzM1NzksMTQgQEAgc3RkOjpvcHRpb25hbDxCeXRlY29kZUluZGV4PiBD
b2RlQmxvY2s6OgogICAgIHJldHVybiBieXRlY29kZUluZGV4OwogfQogCi1pbnQzMl90IENvZGVC
bG9jazo6dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKQotewotICAgIHN3aXRjaCAo
dW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUoKSkgewotICAgIGNhc2UgVHJpU3RhdGU6
OkluZGV0ZXJtaW5hdGU6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQ7Ci0gICAgY2FzZSBUcmlT
dGF0ZTo6RmFsc2U6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQgKiA0OwotICAgIGNhc2UgVHJp
U3RhdGU6OlRydWU6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQgLyAyOwotICAgIH0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gdGhyZXNob2xkOwotfQotCi12b2lkIENv
ZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBDb2RlQmxvY2s6OmppdFNvb24oKQogewot
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklU
KE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKKyAgICBtX2xs
aW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCh1bmxpbmtlZENvZGVCbG9jaygpLT50
aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7CiB9
CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXROZXh0SW52
b2NhdGlvbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0
aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7Cisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAK
IGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0CkBA
IC0zNTg4LDI4ICszNjMyLDggQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBNYXRoSUNTdGF0cygpCiAg
ICAgZG91YmxlIG51bVN1YnMgPSAwLjA7CiAgICAgZG91YmxlIHRvdGFsU3ViU2l6ZSA9IDAuMDsK
IAotICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBqaXREYXRhID0gY29kZUJsb2NrLT5tX2ppdERhdGEuZ2V0KCkpIHsKLSAg
ICAgICAgICAgIGZvciAoSklUQWRkSUMqIGFkZElDIDogaml0RGF0YS0+bV9hZGRJQ3MpIHsKLSAg
ICAgICAgICAgICAgICBudW1BZGRzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxBZGRTaXplICs9
IGFkZElDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJ
VE11bElDKiBtdWxJQyA6IGppdERhdGEtPm1fbXVsSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVt
TXVscysrOwotICAgICAgICAgICAgICAgIHRvdGFsTXVsU2l6ZSArPSBtdWxJQy0+Y29kZVNpemUo
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChKSVROZWdJQyogbmVnSUMgOiBq
aXREYXRhLT5tX25lZ0lDcykgewotICAgICAgICAgICAgICAgIG51bU5lZ3MrKzsKLSAgICAgICAg
ICAgICAgICB0b3RhbE5lZ1NpemUgKz0gbmVnSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGZvciAoSklUU3ViSUMqIHN1YklDIDogaml0RGF0YS0+bV9zdWJJQ3Mp
IHsKLSAgICAgICAgICAgICAgICBudW1TdWJzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxTdWJT
aXplICs9IHN1YklDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAg
YXV0byBjb3VudElDcyA9IFsmXSAoQ29kZUJsb2NrKikgeworICAgICAgICAvLyBGSVhNRTogV2Ug
bmVlZCB0byByZS1pbXBsZW1lbnQgdGhpcyB1c2luZyBKSVRDb2RlLgogICAgIH07CiAgICAgaGVh
cCgpLT5mb3JFYWNoQ29kZUJsb2NrKGNvdW50SUNzKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05
NCw5ICs5NCw5IEBAIGNsYXNzIEpTTW9kdWxlRW52aXJvbm1lbnQ7CiBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiBjbGFzcyBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQ7CiBjbGFzcyBNZXRhZGF0YVRhYmxlOwotY2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7
CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwor
Y2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihDb2RlQmxvY2tSYXJlRGF0YSk7CiAKQEAgLTE1OCw3ICsxNTgsOSBAQCBwdWJsaWM6
CiAgICAgTWV0YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0
YWRhdGEuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJl
dHVybiBtX251bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0
ZXJzKHVuc2lnbmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwKCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPZkFyZ3VtZW50c1RvU2tp
cDsgfQogCkBAIC0xNjcsNyArMTY5LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bVZhcnMo
KSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KICAgICB1bnNpZ25lZCBudW1UbXBzKCkgY29u
c3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVj
a3BvaW50VG1wczsgfQogCi0gICAgdW5zaWduZWQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7
IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251
bVBhcmFtZXRlcnMpOyB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAg
LTIzMiwxNiArMjMzLDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJl
YWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3BvaW50cygpOwog
Ci0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7
Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYmFjayB0aGUgb3B0aW1pemF0aW9u
IHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlzIGB0aGlzYCBhbmQgd2UncmUgaW4gc2xv
cHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0g
c3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAtMjY4LDIzICsyNTksMjEgQEAgcHVibGlj
OgogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RydWN0IEpJVERhdGEgewogICAgICAgICBXVEZfTUFL
RV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiAKICAgICAgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZv
czsKLSAgICAgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKLSAgICAgICAgQmFnPEpJVE11bElD
PiBtX211bElDczsKLSAgICAgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKLSAgICAgICAgQmFn
PEpJVFN1YklDPiBtX3N1YklDczsKICAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlu
a0luZm9zOwogICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRS
YXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwogICAgICAgICBT
ZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBoaWNDYWxsTm9kZSwgUGFja2VkUmF3U2VudGluZWxO
b2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxsczsKLSAg
ICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0g
ICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0Nv
ZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXNDYWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFs
c2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJz
OwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKworICAgICAgICBGaXhlZFZlY3Rv
cjx2b2lkKj4gbV9qaXRDb25zdGFudFBvb2w7CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZKSVRDb25zdGFudFBvb2woKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwg
bV9qaXRDb25zdGFudFBvb2wpOyB9CiAgICAgfTsKIAorICAgIHZvaWQgc2V0dXBXaXRoVW5saW5r
ZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4pOworCiAgICAgSklURGF0YSYgZW5z
dXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikKICAgICB7CiAgICAg
ICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkKQEAgLTI5MywyMiArMjgyLDcgQEAgcHVibGljOgog
ICAgIH0KICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImKTsKIAotICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUq
KTsKLSAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAg
SklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUU3ViSUMq
IGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwotCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklU
QWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFk
ZEpJVEFkZElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0
b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRNdWxJQyogYWRkTWF0
aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVsSUMocHJv
ZmlsZSk7IH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0
aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9Ci0KLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVl
Pjo6dHlwZT4KLSAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJv
ZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mSklURGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1faml0RGF0YSk7IH0KIAogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nl
c3NUeXBlLCBDb2RlT3JpZ2luKTsKIApAQCAtMzIyLDE4ICsyOTYsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2Yg
Y2FsbGluZyB0aGlzLgogICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNv
ZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICAKLSAgICB2b2lkIHNldEpJVENvZGVNYXAoSklU
Q29kZU1hcCYmIGppdENvZGVNYXApCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVN
YXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOwotICAgIH0KLSAgICBjb25zdCBKSVRDb2RlTWFwJiBq
aXRDb2RlTWFwKCkKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9s
b2NrKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXA7
Ci0gICAgfQorICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKTsKIAotICAgIHZvaWQg
c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYm
KTsKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyh2b2lkKiBwYyk7CiAKICAg
ICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVnaXN0ZXJTZXQpOwpAQCAtNDcyLDYgKzQz
Niw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmls
ZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQ
cm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygp
CiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VK
SVQoKSk7CkBAIC01NjksOCArNTM0LDEwIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8V3Jp
dGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0
YW50UmVnaXN0ZXJzOyB9CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVn
LnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25z
dGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0
ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KKyAgICBib29sIGlzQ29uc3RhbnRP
d25lZEJ5VW5saW5rZWRDb2RlQmxvY2soVmlydHVhbFJlZ2lzdGVyKSBjb25zdDsKICAgICBBTFdB
WVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKTsgfQogICAgIEFMV0FZ
U19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW5kZXgpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5cGUobV9jb25z
dGFudFJlZ2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNb
aW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJu
IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTU5NSwyMiArNTYyLDIyIEBAIHB1YmxpYzoK
ICAgICAvLyBKdW1wIFRhYmxlcwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBTaW1wbGVKdW1wVGFi
bGUmIHN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKKyAgICBTaW1wbGVKdW1wVGFibGUm
IGJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1w
VGFibGUmIGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAg
ICB2b2lkKiBiYXNlbGluZUpJVENvbnN0YW50UG9vbCgpCiAgICAgewotICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX2ppdERhdGEpOwotICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSAm
JiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXR1cm4gbV9q
aXREYXRhLT5tX2ppdENvbnN0YW50UG9vbC5kYXRhKCk7CiAgICAgfQogI2VuZGlmCiAgICAgc2l6
ZV90IG51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBj
b25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50
IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsgfQogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBTdHJpbmdKdW1wVGFi
bGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKLSAgICB7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7Ci0gICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAgICB9CisjaWYgRU5BQkxFKERG
R19KSVQpCisgICAgU3RyaW5nSnVtcFRhYmxlJiBkZmdTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50
IHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgZGZnU3dpdGNoSnVtcFRhYmxlKGlu
dCB0YWJsZUluZGV4KTsKICNlbmRpZgorCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJl
ck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtl
ZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxl
SW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsgfQogCkBAIC02MzIsMjEgKzU5OSwyMCBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhp
cyk7CisgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNoZWNrSWZUaHJlc2hv
bGRDcm9zc2VkQW5kU2V0KHRoaXMpOwogICAgIH0KIAogICAgIHZvaWQgZG9udEpJVEFueXRpbWVT
b29uKCkKICAgICB7Ci0gICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5kZWZlckluZGVmaW5p
dGVseSgpOworICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmRlZmVySW5kZWZpbml0ZWx5
KCk7CiAgICAgfQogCi0gICAgaW50MzJfdCB0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hv
bGQpOwotICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKTsKICAgICB2b2lkIGppdFNvb24oKTsKKyAg
ICB2b2lkIGppdE5leHRJbnZvY2F0aW9uKCk7CiAKICAgICBjb25zdCBCYXNlbGluZUV4ZWN1dGlv
bkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICAgICAgcmV0dXJuICptX2xsaW50RXhlY3V0
ZUNvdW50ZXI7CiAgICAgfQogCiAgICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6dHVwbGU8U3RydWN0
dXJlSUQsIHVuc2lnbmVkPiwgRml4ZWRWZWN0b3I8TExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0Y2hwb2ludE1hcDsKQEAgLTc5Nyw2ICs3
NjMsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7
IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3Rz
QWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihDb2RlQmxvY2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRkQnJlYWtw
b2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50
KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQpAQCAtODM4LDYgKzgwNSw3IEBAIHB1YmxpYzoKICAg
ICBtdXRhYmxlIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwogCiAgICAgYm9vbCBtX3Nob3VsZEFs
d2F5c0JlSW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQgYmVjYXVzZSB0aGUgSklUIHdhbnRzIHRv
IHN0b3JlIHRvIGl0LgorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdheXNC
ZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCk7IH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdW5zaWduZWQgbV9jYXBh
YmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCkBAIC04NDcsOCAr
ODE1LDYgQEAgcHVibGljOgogICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24gOiAxOwog
ICAgIGJvb2wgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMIDogMTsKIAotICAgIGJvb2wgbV9oYXNM
aW5rZWRPU1JFeGl0IDogMTsKLSAgICBib29sIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRl
IDogMTsKICAgICBib29sIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSB7IGZhbHNl
IH07CiAKICAgICAvLyBJbnRlcm5hbCBtZXRob2RzIGZvciB1c2UgYnkgdmFsaWRhdGlvbiBjb2Rl
LiBJdCB3b3VsZCBiZSBwcml2YXRlIGlmIGl0IHdhc24ndApAQCAtOTA3LDE2ICs4NzMsMTIgQEAg
cHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcik7IH0KIAot
ICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQotICAg
IHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBs
ZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3VubGlua2VkQ29kZS0+
aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJs
ZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5sb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHByb3RlY3RlZDoKICAg
ICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKICNpZiBFTkFCTEUoSklUKQotICAg
IHZvaWQgZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOworICAgIHZvaWQgZmluYWxp
emVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAgIHZv
aWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwpAQCAtMTAxMCw3ICs5NzIsOSBAQCBwcml2YXRl
OgogICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFw
OwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7CiAjaWYgRU5BQkxFKEpJVCkKK3B1Ymxp
YzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SklURGF0YT4gbV9qaXREYXRhOworcHJpdmF0ZToKICNl
bmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9u
LURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRoZSBwcm9maWxlZCBjb2RlIGJsb2NrCkBA
IC0xMDI5LDcgKzk5Myw3IEBAIHByaXZhdGU6CiAKICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2Nr
PiBtX2FsdGVybmF0aXZlOwogICAgIAotICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2xs
aW50RXhlY3V0ZUNvdW50ZXI7CisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyKiBtX2xsaW50
RXhlY3V0ZUNvdW50ZXIgeyBudWxscHRyIH07CiAKICAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50
ZXIgbV9qaXRFeGVjdXRlQ291bnRlcjsKICAgICB1aW50MzJfdCBtX29zckV4aXRDb3VudGVyOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5s
aW5lcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSwxMCBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRG
R0pJVENvZGUuaCIKICNpbmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxpbmVzLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtNDAsOSArNDIsNyBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFj
aFZhbHVlUHJvZmlsZShjb25zCiAgICAgaWYgKG1fbWV0YWRhdGEpIHsKICNkZWZpbmUgVklTSVQo
X19vcCkgXAogICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0
YWRhdGEpIHsgZnVuYyhtZXRhZGF0YS5tX3Byb2ZpbGUsIGZhbHNlKTsgfSk7Ci0KICAgICAgICAg
Rk9SX0VBQ0hfT1BDT0RFX1dJVEhfVkFMVUVfUFJPRklMRShWSVNJVCkKLQogI3VuZGVmIFZJU0lU
CiAKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEl0ZXJhdG9yT3Blbj4oWyZdIChhdXRv
JiBtZXRhZGF0YSkgeyAKQEAgLTU3LDcgKzU3LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hW
YWx1ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmls
ZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCi0KIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KQEAgLTk5LDQgKzk4LDM4IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoTExJ
bnRDYWxsTGlua0luZm8KICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoSklUKQorQUxXQVlTX0lOTElO
RSBjb25zdCBKSVRDb2RlTWFwJiBDb2RlQmxvY2s6OmppdENvZGVNYXAoKQoreworICAgIEFTU0VS
VChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVNYXA7Cit9
CisKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5lU3dp
dGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJ
VENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07
Cit9CisKK0FMV0FZU19JTkxJTkUgU3RyaW5nSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5l
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRU
eXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxC
YXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShERkdfSklUKQorQUxXQVlT
X0lOTElORSBTaW1wbGVKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3dpdGNoSnVtcFRhYmxlKGlu
dCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklU
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgp
KS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0
cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpkZmdTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxERkc6OkpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisjZW5kaWYKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAgcHVibGljOgogICAgIHN0YXRp
YyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwKENvZGVCbG9jayogY29kZUJsb2NrKTsK
ICAgICAKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcEFuZEFjdGl2
YXRlKENvZGVCbG9jayogY29kZUJsb2NrKTsKKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZDb2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZSwgbV9jb2RlQmxvY2spOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCShyZXZpc2lvbiAyODMwNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCBib29sIEV4ZWN1dGlvbkNvdW50ZXI8Y291
bnRpbmdWYXJpYW50Pjo6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHRocmVz
aG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2NrID8gY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSA6IG51bGxwdHIsIHRocmVzaG9sZCk7CisgICAgdGhyZXNob2xkID0gY2xpcHBlZFRocmVz
aG9sZCh0aHJlc2hvbGQpOwogICAgIAogICAgIG1fY291bnRlciA9IHN0YXRpY19jYXN0PGludDMy
X3Q+KC10aHJlc2hvbGQpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2aXNpb24gMjgzMDUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JjZVNsb3dQYXRo
Q29uY3VycmVudGx5KCk7IC8vIElmIHlvdSB1c2UgdGhpcywgY2hlY2tJZlRocmVzaG9sZENyb3Nz
ZWRBbmRTZXQoKSBtYXkgc3RpbGwgcmV0dXJuIGZhbHNlLgogICAgIGJvb2wgY2hlY2tJZlRocmVz
aG9sZENyb3NzZWRBbmRTZXQoQ29kZUJsb2NrKik7CiAgICAgYm9vbCBoYXNDcm9zc2VkVGhyZXNo
b2xkKCkgY29uc3QgeyByZXR1cm4gbV9jb3VudGVyID49IDA7IH0KLSAgICB2b2lkIHNldE5ld1Ro
cmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXROZXdU
aHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayogPSBudWxscHRyKTsKICAgICB2
b2lkIGRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgZG91YmxlIGNvdW50KCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291bnQpICsgbV9jb3VudGVyOyB9CiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkBAIC04NiwxMyArODYsOSBAQCBwdWJsaWM6
CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIFQgY2xp
cHBlZFRocmVzaG9sZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUIHRocmVzaG9sZCkK
KyAgICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKFQgdGhyZXNob2xkKQogICAgIHsKLSAgICAg
ICAgaW50MzJfdCBtYXhUaHJlc2hvbGQ7Ci0gICAgICAgIGlmIChPcHRpb25zOjpyYW5kb21pemVF
eGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKSAmJiBnbG9iYWxPYmplY3QpCi0gICAg
ICAgICAgICBtYXhUaHJlc2hvbGQgPSBnbG9iYWxPYmplY3QtPndlYWtSYW5kb21JbnRlZ2VyKCkg
JSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1heFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3
ZWVuQ2hlY2twb2ludHMoKTsKKyAgICAgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQgPSBtYXhpbXVt
RXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CiAgICAgICAgIGlmICh0aHJlc2hv
bGQgPiBtYXhUaHJlc2hvbGQpCiAgICAgICAgICAgICB0aHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7
CiAgICAgICAgIHJldHVybiB0aHJlc2hvbGQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB7
CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQpID09IDEyKTsK
IAogc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCB7CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihH
ZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmlsZSk7IH0KICAgICBBcnJh
eVByb2ZpbGUgYXJyYXlQcm9maWxlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRN
b2RlTWV0YWRhdGFBcnJheUxlbmd0aCkgPT0gMTIpOwpAQCAtODgsNiArODksNyBAQCB1bmlvbiBH
ZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUgbW9kZTsKICAgICAgICAg
dWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBtdXN0IGJlIHplcm8gd2hl
biB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRh
LCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0IGRlZmF1bHRNb2RlOwog
ICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAgICAgR2V0QnlJZE1vZGVN
ZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9kZTsKQEAgLTExNyw2ICsxMTksNyBAQCBz
dHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFQ
cm90b0xvYWQgcHJvdG9Mb2FkTW9kZTsKICAgICB9OwogICAgIEdldEJ5SWRNb2RlIG1vZGU7Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICB1aW50OF90IGhpdENvdW50Rm9y
TExJbnRDYWNoaW5nOwogfTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTUsNyArMjE1LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SQogICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAog
ICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjogewotICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7Cisg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRh
a2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4g
R2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgc3R1YkluZm8pOwogICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vz
c0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpl
bWl0RE9NSklURwogCiAgICAgLy8gTGV0J3Mgc3RvcmUgdGhlIHJldXNlZCByZWdpc3RlcnMgdG8g
dGhlIHN0YWNrLiBBZnRlciB0aGF0LCB3ZSBjYW4gdXNlIGFsbG9jYXRlZCBzY3JhdGNoIHJlZ2lz
dGVycy4KICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNl
cnZlZFN0YXRlID0KLSAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hp
bmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VG
b3JDQ2FsbCk7CisgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVz
aGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFj
ZUZvckNDYWxsKTsKIAogICAgIGlmIChHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlSW50ZXJuYWw6OnZl
cmJvc2UpIHsKICAgICAgICAgZGF0YUxvZygiYmFzZUdQUiA9ICIsIGJhc2VHUFIsICJcbiIpOwpA
QCAtMjI1LDEyICsyMjUsOSBAQCB2b2lkIEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmVtaXRET01K
SVRHCiAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnKTsKICAgICBmb3Ig
KEZQUlJlZyByZWcgOiBmcFNjcmF0Y2gpCiAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2Fs
bC5zZXQocmVnKTsKKyAgICBpZiAoaml0LmNvZGVCbG9jaygpLT51c2VEYXRhSUMoKSkKKyAgICAg
ICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsK
ICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6cmVnaXN0
ZXJzVG9Ob3RTYXZlRm9yQ0NhbGwoKSk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOwotICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJ
QygpKQotICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KEFSTTY0UmVnaXN0ZXJz
Ojpscik7Ci0jZW5kaWYKIAogICAgIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zIHBhcmFtcyhzdGF0
ZS5tX3ZtLCBXVEZNb3ZlKHJlZ3MpLCBXVEZNb3ZlKGdwU2NyYXRjaCksIFdURk1vdmUoZnBTY3Jh
dGNoKSk7CiAgICAgc25pcHBldC0+Z2VuZXJhdG9yKCktPnJ1bihqaXQsIHBhcmFtcyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBJbkJ5U3RhdHVzIEluQnlT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mCiAgICAgICAgIHJldHVybiBJbkJ5U3RhdHVzKE5vSW5m
b3JtYXRpb24pOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6IHsKLSAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNT
bG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKICAgICAgICAgICAgIHJldHVybiBJbkJ5
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50
aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzYsMTEgKzE3NiwxNiBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGxp
bmtDb2RlSW5saW5lCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZp
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJ
QygpKSB7CisgICAgICAgIC8vIFRoZXNlIGR5bmFtaWMgc2xvdHMgZ2V0IGZpbGxlZCBpbiBieSBT
dHJ1Y3R1cmVTdHViSW5mby4gTm90aGluZyBlbHNlIHRvIGRvLgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIAogICAgIEdQUlJlZyBiYXNl
ID0gc3R1YkluZm8uYmFzZUdQUjsKQEAgLTIzMywyMyArMjM4LDMxIEBAIEFMV0FZU19JTkxJTkUg
c3RhdGljIGJvb2wgaGFzRnJlZVJlZ2lzdGUKICAgICByZXR1cm4gZ2V0U2NyYXRjaFJlZ2lzdGVy
KHN0dWJJbmZvKSAhPSBJbnZhbGlkR1BSUmVnOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Y2Fu
R2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2Vs
ZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5o
YXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChj
b2RlQmxvY2stPnVzZURhdGFJQygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIGlmIChp
c0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVy
biBoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmll
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQVNTRVJUKGNhbkdlbmVyYXRlU2VsZlBy
b3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2Zmc2V0KSk7CisgICAgQVNTRVJUKGNhbkdlbmVyYXRl
U2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBvZmZzZXQpKTsKKworICAg
IGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIFRoZXNlIGR5bmFtaWMg
c2xvdHMgZ2V0IGZpbGxlZCBpbiBieSBTdHJ1Y3R1cmVTdHViSW5mby4gTm90aGluZyBlbHNlIHRv
IGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCkBAIC0yNzksMjIgKzI5MiwyNSBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxm
UHJvcGVydHlSCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLWJvb2wgSW5saW5l
QWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxl
bmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBK
U0FycmF5KiBhcnJheSkKIHsKICAgICBBU1NFUlQoYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSXNB
cnJheSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoIWhhc0Zy
ZWVSZWdpc3RlcihzdHViSW5mbykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biAhaGFzQW55QXJyYXlTdG9yYWdlKGFycmF5LT5pbmRleGluZ1R5cGUoKSkgJiYgYXJyYXktPmlu
ZGV4aW5nVHlwZSgpICE9IEFycmF5Q2xhc3M7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJy
YXkpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKIHsK
LSAgICBBU1NFUlQoaXNDYWNoZWFibGVBcnJheUxlbmd0aChzdHViSW5mbywgYXJyYXkpKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNoZWFibGVBcnJheUxlbmd0aChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBhcnJheSkpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElk
ZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMxOSwxNyArMzM1LDIwIEBAIGJv
b2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKFMKICAgICByZXR1cm4gbGlua2Vk
Q29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVu
Z3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNzOjppc0Nh
Y2hlYWJsZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVy
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJl
dHVybiBoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorYm9vbCBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgQVNTRVJUKGlzQ2FjaGVhYmxlU3Ry
aW5nTGVuZ3RoKHN0dWJJbmZvKSk7CisgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGlzQ2Fj
aGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pKTsKIAogICAgIGlmICghc3R1
YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0z
NjMsMTMgKzM4MiwxOCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgo
CiB9CiAKIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitib29sIElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkg
eworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0
dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5mby5iYXNlR1BSOwogICAgIEpTVmFsdWVS
ZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAKQEAgLTQwNiwxMyArNDMwLDEzIEBA
IHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICBpZiAoY29kZUJs
b2NrLT51c2VEYXRhSUMoKSkgewogICAgICAgICAvLyBJZiBpdCBpcyBub3QgR2V0QnlJZC1saWtl
LXRoaW5nLCB3ZSBkbyBub3QgZW1pdCBub3Agc2xlZCAoZS5nLiBHZXRCeVZhbCkuCiAgICAgICAg
IC8vIFRoZSBjb2RlIGlzIGFscmVhZHkgYW4gaW5kaXJlY3QganVtcCwgYW5kIG9ubHkgdGhpbmcg
d2Ugc2hvdWxkIGRvIGlzIHJlcGxhY2luZyBtX2NvZGVQdHIuCi0gICAgICAgIGlmIChzdHViSW5m
by5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlw
ZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRp
ZmllcikgewogICAgICAgICAgICAgLy8gSWYgbV9jb2RlUHRyIGlzIHBvaW50aW5nIHRvIHN0dWJJ
bmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbiwgdGhpcyBtZWFucyB0aGF0IElubGluZUFjY2VzcyBj
b2RlIGlzIG5vdCBhIHN0dWIgb25lLgogICAgICAgICAgICAgLy8gV2UgcmV3cml0ZSB0aGlzIHdp
dGggdGhlIHN0dWItYmFzZWQgZGlzcGF0Y2hpbmcgY29kZSBvbmNlLCBhbmQgY29udGludWUgdXNp
bmcgaXQgdW50aWwgd2UgcmVzZXQgdGhlIGNvZGUuCiAgICAgICAgICAgICBpZiAoc3R1YkluZm8u
bV9jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0gc3R1YkluZm8uc2xvd1BhdGhTdGFydExv
Y2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpIHsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5mby5zdGFydC5yZXRhZ2dlZDxKU0ludGVybmFsUHRy
VGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4oWyZdKENDYWxsSGVscGVy
cyYgaml0KSB7CiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cigmc3R1YkluZm8pLCBzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAg
ICAgICAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICAgICAgICAgICAg
ICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBk
b25lTG9jYXRpb24gPSBzdHViSW5mby5kb25lTG9jYXRpb247CiAgICAgICAgICAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbPV0oTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewpAQCAtNDIxLDcg
KzQ0NSw5IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICAg
ICAgICAgICAgICB9KSwgIklubGluZUFjY2VzczogbGlua2luZyBzdHViIGNhbGwiKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHRhcmdl
dDsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsgLy8g
Q2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTQzNCw4ICs0NjAsMTQgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1
bXBJbkFjYwogICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5raW5nIGNvbnN0YW50IGp1bXAiKTsK
IH0KIAotdm9pZCBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgSW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQogeworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpICYmIGNvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIHN0dWJJ
bmZvLm1fY29kZVB0ciA9IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKyAgICAgICAg
c3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRo
ZSBpbmxpbmUgYWNjZXNzIGNvZGUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBDQ2Fs
bEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5mby5zdGFydC5yZXRhZ2dlZDxKU0ludGVy
bmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4oWyZdKENDYWxs
SGVscGVycyYgaml0KSB7CiAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYSBub3Agc2xlZCBoZXJl
IGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1waW5nIGludG8gdGhlIG1pZGRsZSBvZiBhbiBJ
Qy4KICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAkod29ya2luZyBj
b3B5KQpAQCAtOTksMTQgKzk5LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4
KHNpemUsIHNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9v
bCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVy
ZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMgYm9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9w
ZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3Rh
dGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwg
U3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxl
QXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7Ci0gICAgc3RhdGljIGJv
b2wgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICBzdGF0
aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSop
OwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZv
JiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTdHJpbmdMZW5ndGgoU3Ry
dWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFj
Y2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5
T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uo
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3Rh
dGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29s
IGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBK
U0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5
TGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0
YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTdHJpbmdMZW5ndGgo
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIAogICAgIHN0YXRpYyB2b2lkIHJld2ly
ZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsK
ICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRh
ZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVy
YXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0VfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVMK
IAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7CiAgICAgdWludDhfdCBzZWVuTW9kZXMg
eyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNlZW5Nb2RlcygpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0YWRhdGEsIHNlZW5Nb2Rlcyk7IH0gCiAg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc2Vlbk1vZGVzKSkgPT0gc2l6ZW9mKEl0
ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQXJyYXlQcm9maWxl
IG1fYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2Zp
bGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJbnRDYWxsTGlua0luZm8sIG1fYXJyYXlQ
cm9maWxlKTsgfQogCiBwcml2YXRlOgogICAgIHVpbnRwdHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5D
YWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYs
MTcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heAogICAgIG1hY3Jv
KE9wSXRlcmF0b3JPcGVuKSBcCiAgICAgbWFjcm8oT3BJdGVyYXRvck5leHQpIFwKIAorI2RlZmlu
ZSBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAorICAg
IG1hY3JvKE9wQWRkKSBcCisgICAgbWFjcm8oT3BNdWwpIFwKKyAgICBtYWNybyhPcERpdikgXAor
ICAgIG1hY3JvKE9wU3ViKSBcCisKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllf
QVJJVEhfUFJPRklMRShtYWNybykgXAorICAgIG1hY3JvKE9wSW5jKSBcCisgICAgbWFjcm8oT3BE
ZWMpIFwKKyAgICBtYWNybyhPcE5lZ2F0ZSkgXAorCiAKIElHTk9SRV9XQVJOSU5HU19CRUdJTigi
dHlwZS1saW1pdHMiKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2Nl
ZWQoKQogewogICAgIHJlc3RvcmVTY3JhdGNoKCk7CiAgICAgaWYgKGppdC0+Y29kZUJsb2NrKCkt
PnVzZURhdGFJQygpKQotICAgICAgICBqaXQtPnJldCgpOworICAgICAgICBqaXQtPmZhckp1bXAo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZEb25lTG9jYXRpb24oKSksIEpTSW50ZXJuYWxQdHJUYWcpOwogICAg
IGVsc2UKICAgICAgICAgc3VjY2Vzcy5hcHBlbmQoaml0LT5qdW1wKCkpOwogfQpAQCAtMTEwLDYg
KzExMCw4IEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXQtPmNvZGVC
bG9jaygpLT5qaXRUeXBlKCkpKTsKIAogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsID0g
UmVnaXN0ZXJTZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdD
YWxsU2l0ZSwgYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJzKCkpOworICAgICAgICBpZiAoaml0LT5j
b2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JD
YWxsLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7CiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVy
c0ZvckNhbGwuZXhjbHVkZShjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIH0KICAgICByZXR1
cm4gbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbDsKQEAgLTEyOCwxMSArMTMwLDEyIEBAIGF1dG8gQWNj
ZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmUKICAgICB9OwogfQogCi1hdXRvIEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZTo6cHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRo
b3V0RXhjZXB0aW9ucyhjb25zdCBSZWdpc3RlclNldCYgZXh0cmEpIC0+IFNwaWxsU3RhdGUKK2F1
dG8gQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9y
Q2FsbFdpdGhvdXRFeGNlcHRpb25zKCkgLT4gU3BpbGxTdGF0ZQogewogICAgIFJlZ2lzdGVyU2V0
IGxpdmVSZWdpc3RlcnMgPSBhbGxvY2F0b3ItPnVzZWRSZWdpc3RlcnMoKTsKKyAgICBpZiAoaml0
LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgIGxpdmVSZWdpc3RlcnMuYWRkKHN0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKICAgICBsaXZlUmVnaXN0ZXJzLmV4Y2x1ZGUoY2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKLSAgICBsaXZlUmVnaXN0ZXJzLm1lcmdlKGV4dHJhKTsKIAogICAg
IGNvbnN0ZXhwciB1bnNpZ25lZCBleHRyYVN0YWNrUGFkZGluZyA9IDA7CiAgICAgdW5zaWduZWQg
bnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCpqaXQsIGxp
dmVSZWdpc3RlcnMsIGV4dHJhU3RhY2tQYWRkaW5nKTsKQEAgLTU5NiwxNiArNTk5LDExIEBAIEFj
Y2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICBDQ2FsbEhlbHBlcnMg
aml0KGNvZGVCbG9jayk7CiAgICAgc3RhdGUuaml0ID0gJmppdDsKIAotICAgIGlmIChjb2RlQmxv
Y2stPnVzZURhdGFJQygpKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5tX2RvZXNKU0dldHRlclNldHRl
ckNhbGxzKSB7Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIG5vIGd1YXJhbnRlZSB0aGF0IHN0YWNr
LXBvaW50ZXIgaXMgdGhlIGV4cGVjdGVkIG9uZS4gVGhpcyBpcyBub3QgYSBwcm9ibGVtIGlmIHdl
IGRvIG5vdCBoYXZlIEpTIGdldHRlciAvIHNldHRlciBjYWxscyBzaW5jZSBzdGFjay1wb2ludGVy
IGlzCi0gICAgICAgICAgICAvLyBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyIGluIHRoZSBDIGNhbGxp
bmcgY29udmVuc2lvbi4gSG93ZXZlciwgb3VyIEpTIGV4ZWN1dGFibGUgY2FsbCBkb2VzIG5vdCBz
YXZlIHN0YWNrLXBvaW50ZXIuIFNvIHdlIGFyZSBhZGp1c3Rpbmcgc3RhY2stcG9pbnRlciBhZnRl
cgotICAgICAgICAgICAgLy8gSlMgZ2V0dGVyIC8gc2V0dGVyIGNhbGxzLiBCdXQgdGhpcyBjb3Vs
ZCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5pdGlhbCBzdGFjay1wb2ludGVyLCBhbmQgbWFrZXMg
UEFDIHRhZ2dpbmcgYnJva2VuLgotICAgICAgICAgICAgLy8gVG8gZW5zdXJlIFBBQy10YWdnaW5n
IHdvcmssIHdlIGZpcnN0IGFkanVzdCBzdGFjay1wb2ludGVyIHRvIHRoZSBhcHByb3ByaWF0ZSBv
bmUuCi0gICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNv
ZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworICAgIGlmICghY2FuQmVTaGFyZWQg
JiYgQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqaXQuc2NyYXRjaFJlZ2lzdGVyKCkp
OworICAgICAgICBhdXRvIG9rID0gaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBqaXQuc2NyYXRjaFJlZ2lzdGVyKCkp
OworICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICBvay5saW5rKCZqaXQpOwogICAg
IH0KIAogICAgIHN0YXRlLnByZXNlcnZlZFJldXNlZFJlZ2lzdGVyU3RhdGUgPQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNyArMjUxLDcgQEAgc3RydWN0
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGNhbGN1bGF0
ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcoKTsKIAogICAgIFNwaWxs
U3RhdGUgcHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoY29uc3QgUmVnaXN0ZXJT
ZXQmIGV4dHJhID0geyB9KTsKLSAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1Rv
U3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhID0g
eyB9KTsKKyAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
V2l0aG91dEV4Y2VwdGlvbnMoKTsKIAogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9t
U3RhY2tGb3JDYWxsV2l0aFRocm93bkV4Y2VwdGlvbihjb25zdCBTcGlsbFN0YXRlJik7CiAgICAg
dm9pZCByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoY29uc3QgU3BpbGxTdGF0
ZSYsIGNvbnN0IFJlZ2lzdGVyU2V0JiBkb250UmVzdG9yZSA9IHsgfSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4MCwxMCArMTgwLDEwIEBAIFB1dEJ5U3RhdHVzIFB1dEJ5U3Rh
dHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHVpZCk7Ci0g
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+bV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZShwcm9maWxlZEJsb2NrLT52bSgpKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RG
TW92ZShpZGVudGlmaWVyKSwgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5n
ZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2Uo
V1RGTW92ZShpZGVudGlmaWVyKSwgc3RydWN0dXJlLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAgICB9
CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAogI2lu
Y2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1
ZGUgIlJlcGF0Y2guaCIKIApAQCAtNjUsOSArNjYsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojppbml0R2V0QnlJZFNlbGYoCiAgICAgQVNTRVJUKGhhc0NvbnN0YW50SWRlbnRpZmllcik7CiAg
ICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZik7CiAgICAgbV9p
ZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUu
c2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICBt
X2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5p
ZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwot
ICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zm
c2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0QXJyYXlMZW5ndGgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyKQpAQCAtODcsOSArODgsOSBAQCB2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJlcGxhCiAgICAgQVNTRVJUKG1fY2FjaGVUeXBl
ID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlw
ZTo6UHV0QnlJZFJlcGxhY2UpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAg
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0g
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVh
cC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNl
dDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6aW5pdEluQnlJZFNlbGYoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2Vy
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmll
cikKQEAgLTk3LDkgKzk4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEluQnlJZFNl
bGYoYwogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KTsKICAgICBz
ZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OkluQnlJZFNlbGYpOwogICAgIG1faWRlbnRp
ZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsK
ICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1
LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsK
IH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQpAQCAtMjM2LDcgKzIzNyw3IEBA
IEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJlU3R1YkluZm8KICAgICAgICAgLy8gd2Un
cmUgYnVmZmVyZWQgaXMgYmVjYXVzZSB3ZSByZWx5IG9uIGl0IHRvIHJlc2V0IGR1cmluZyBHQyBp
ZiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUKICAgICAgICAgLy8gaXMgY29sbGVjdGVkLgog
ICAgICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwotICAgICAgICBtX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
ID0gMDsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGdlbmVyYXRlZCBzb21lIGNvZGUgdGhl
biB3ZSBkb24ndCB3YW50IHRvIGF0dGVtcHQgdG8gcmVwYXRjaCBpbiB0aGUgZnV0dXJlIHVudGls
IHdlCiAgICAgICAgIC8vIGdhdGhlciBlbm91Z2ggY2FzZXMuCkBAIC0yNTEsNyArMjUyLDcgQEAg
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogewogICAgIGNsZWFyQnVm
ZmVyZWRTdHJ1Y3R1cmVzKCk7CiAgICAgbV9pZGVudGlmaWVyID0gbnVsbHB0cjsKLSAgICBtX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUgPSAwOwogCiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQp
CiAgICAgICAgIHJldHVybjsKQEAgLTI4NSw2ICsyODYsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhp
cywgUHV0QnlLaW5kOjpCeUlkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBl
OjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgogICAgICAg
ICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKQEAgLTM2MCw4ICszNjIsOCBA
QCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgfQogCiAgICAg
Ym9vbCBpc1ZhbGlkID0gdHJ1ZTsKLSAgICBpZiAobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
KQotICAgICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNNYXJrZWQobV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlLmdldCgpKTsKKyAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlKHZtKSkKKyAgICAgICAgaXNWYWxpZCAmPSB2bS5oZWFwLmlzTWFy
a2VkKHN0cnVjdHVyZSk7CiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikK
ICAgICAgICAgaXNWYWxpZCAmPSB1LnN0dWItPnZpc2l0V2Vhayh2bSk7CiAKQEAgLTM3NSw4ICsz
NzcsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAobV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlKQotICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPm1hcmtJZkNo
ZWFwKHZpc2l0b3IpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGlubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUodmlzaXRvci52bSgpKSkKKyAgICAgICAgc3RydWN0dXJlLT5tYXJrSWZD
aGVhcCh2aXNpdG9yKTsKIAogICAgIGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIp
CiAgICAgICAgIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CkBAIC00MzAs
NiArNDMyLDIwOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNlCiAg
ICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvKQoreworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgYWNjZXNzVHlwZSA9IHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZTsK
KyAgICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8uc3RhcnQ7CisgICAgZG9uZUxvY2F0aW9uID0g
dW5saW5rZWRTdHViSW5mby5kb25lTG9jYXRpb247CisgICAgc2xvd1BhdGhTdGFydExvY2F0aW9u
ID0gdW5saW5rZWRTdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgY2FsbFNpdGVJ
bmRleCA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKTsKKyAgICBjb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtl
ZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIG1fY29kZVB0ciA9IHNsb3dQYXRoU3RhcnRM
b2NhdGlvbjsKKworICAgIHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCk7CisgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJ
ZCAmJiB1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSB7CisgICAg
ICAgIC8vIEZvciBpdGVyYXRvcl9uZXh0LCB3ZSBjYW4ndCBjbG9iYmVyIHRoZSAiZG9udENsb2Ji
ZXJSZWdpc3RlciIgcmVnaXN0ZXIgZWl0aGVyLgorICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZChC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXIpOworICAgIH0KKwor
ICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlW
YWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1p
emU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtl
ZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Cisg
ICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAg
ICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRT
dHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgor
ICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNl
IFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVj
bWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0Ogor
ICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAg
ICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gdW5s
aW5rZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25Q
dXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQ
cml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpTZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNl
dFByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFs
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQ
UiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVy
dHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFs
dWVHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAgICAgICBoYXNDb25z
dGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlk
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gSW52YWxpZEdQUlJl
ZzsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsK
KyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVu
dGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7Cisg
ICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIHZhbHVlR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MucHJvdG90
eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICAgICAgbV9z
dHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVC
cmFuZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBi
YXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnBy
b3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAg
dmFsdWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9z
dHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBoYXNDb25zdGFu
dElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVn
OworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
ICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAg
bV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgIGNhc2UgQWNj
ZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6Cisg
ICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5
SWRXaXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAg
ICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAg
ICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJz
Ojp0aGlzVmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAg
ICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxp
bmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1l
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVy
dHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFs
dWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHVi
SW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBp
ZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQdXRCeVZhbCkKKyAgICAgICAgICAgIG1fYXJy
YXlQcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVu
dGlmaWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAg
ICAgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgICAg
ICByZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwor
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh1
bmxpbmtlZFN0dWJJbmZvKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQor
CiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmNoZWNrQ29uc2lz
dGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgi
CiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmVTZXQuaCIKQEAgLTU2LDYgKzU3LDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NU
eXBlIDogaW50OF90IHsKICAgICBHZXRCeVZhbCwKICAgICBQdXRCeUlkLAogICAgIFB1dEJ5VmFs
LAorICAgIFB1dFByaXZhdGVOYW1lLAogICAgIEluQnlJZCwKICAgICBJbkJ5VmFsLAogICAgIEhh
c1ByaXZhdGVOYW1lLApAQCAtNzgsNiArODAsOCBAQCBlbnVtIGNsYXNzIENhY2hlVHlwZSA6IGlu
dDhfdCB7CiAgICAgU3RyaW5nTGVuZ3RoCiB9OwogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbzsKKwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZvKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
QEAgLTk4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBh
Ym91dFRvRGllKCk7CiAKKyAgICB2b2lkIGluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJik7CisKICAgICBE
RUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3
ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMg
aXRzZWxmLApAQCAtMzI1LDEzICszMzEsMTkgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbjsKKyAgICBQcm9wZXJ0eU9mZnNldCBieUlkU2VsZk9mZnNldDsK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIGJ5SWRTZWxmT2Zmc2V0KTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBtX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOyB9CiAgICAgdW5pb24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgICAgICB9IGJ5SWRTZWxmOwogICAgICAgICBQ
b2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsKICAgICB9IHU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4gbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlOworICAgIFN0cnVjdHVyZSogaW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZShWTSYgdm0pCisgICAgeworICAgICAgICBpZiAoIW1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gdm0uZ2V0U3RydWN0dXJlKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7Cisg
ICAgfQorICAgIFN0cnVjdHVyZUlEIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSB7IDAgfTsK
IHByaXZhdGU6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgLy8g
UmVwcmVzZW50cyB0aG9zZSBzdHJ1Y3R1cmVzIHRoYXQgYWxyZWFkeSBoYXZlIGJ1ZmZlcmVkIEFj
Y2Vzc0Nhc2VzIGluIHRoZSBQb2x5bW9ycGhpY0FjY2Vzcy4KQEAgLTM1Miw2ICszNjQsNyBAQCBw
dWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBt
X2NvZGVQdHI7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZVB0cigpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgbV9jb2RlUHRyKTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEb25lTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIGRvbmVMb2NhdGlvbik7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2xvd1BhdGhTdGFydExvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBzbG93UGF0aFN0YXJ0TG9jYXRpb24pOyB9CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1fc2xvd09wZXJhdGlvbik7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ291bnRkb3duKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBjb3VudGRvd24pOyB9CkBAIC00NDcsNiArNDYwLDE3IEBA
IGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW4KICAgICB9CiB9CiAKK3N0
cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0
ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSB9OworICAgIEVDTUFN
b2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgpIH07CisgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PiBzdGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9y
ICpieUlkIGNhY2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW5z
dGFuY2VvZicgY2FjaGVzLgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IGRvbmVMb2NhdGlvbjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4gc2xvd1BhdGhTdGFydExvY2F0aW9uOworfTsKKwogI2Vsc2UKIAogY2xhc3MgU3RydWN0dXJl
U3R1YkluZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1w
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Vw
ZXJTYW1wbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcg
QEAgdm9pZCBwcmludFN1cGVyU2FtcGxlclN0YXRlKCkKICAgICBkb3VibGUgcGVyY2VudGFnZSA9
IDEwMC4wICogaW4gLyAoaW4gKyBvdXQpOwogICAgIGlmIChwZXJjZW50YWdlICE9IHBlcmNlbnRh
Z2UpCiAgICAgICAgIHBlcmNlbnRhZ2UgPSAwLjA7Ci0gICAgZGF0YUxvZygiUGVyY2VudCB0aW1l
IGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNlbnRhZ2UsICJcbiIpOworICAgIGRh
dGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50
YWdlLCAiJVxuIik7CiB9CiAKIHZvaWQgZW5hYmxlU3VwZXJTYW1wbGVyKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAj
aW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29k
ZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgogI2luY2x1ZGUgIkJ5
dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgpAQCAtNzgsNiArNzksOCBA
QCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0mCiAgICAgICAgIGNyZWF0
ZVJhcmVEYXRhSWZOZWNlc3NhcnkobG9ja2VyKTsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9wcml2
YXRlQnJhbmRSZXF1aXJlbWVudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcml2YXRlQnJhbmRS
ZXF1aXJlbWVudDo6TmVlZGVkKTsKICAgICB9CisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIu
c2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRB
ZnRlcldhcm1VcCgpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CkBAIC0zMTYs
NiArMzE5LDQ4IEBAIGludCBVbmxpbmtlZENvZGVCbG9jazo6b3V0T2ZMaW5lSnVtcE9mZnMKICAg
ICByZXR1cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5nZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQog
CisjaWYgQVNTRVJUX0VOQUJMRUQKK2Jvb2wgVW5saW5rZWRDb2RlQmxvY2s6Omhhc0lkZW50aWZp
ZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVy
cygpID4gMTAwKSB7CisgICAgICAgIGlmIChudW1iZXJPZklkZW50aWZpZXJzKCkgIT0gbV9jYWNo
ZWRJZGVudGlmaWVyVWlkcy5zaXplKCkpIHsKKyAgICAgICAgICAgIExvY2tlciBsb2NrZXIobV9j
YWNoZWRJZGVudGlmaWVyVWlkc0xvY2spOworICAgICAgICAgICAgSGFzaFNldDxVbmlxdWVkU3Ry
aW5nSW1wbCo+IGNhY2hlZElkZW50aWZpZXJVaWRzOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciA9IHRoaXMtPmlkZW50aWZpZXIoaSk7Cisg
ICAgICAgICAgICAgICAgY2FjaGVkSWRlbnRpZmllclVpZHMuYWRkKGlkZW50aWZpZXIuaW1wbCgp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
KyAgICAgICAgICAgIG1fY2FjaGVkSWRlbnRpZmllclVpZHMgPSBXVEZNb3ZlKGNhY2hlZElkZW50
aWZpZXJVaWRzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX2NhY2hlZElkZW50aWZp
ZXJVaWRzLmNvbnRhaW5zKHVpZCk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7CisgICAgICAgIGlmIChpZGVudGlmaWVy
KGkpLmltcGwoKSA9PSB1aWQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK2ludDMyX3QgVW5saW5rZWRDb2RlQmxvY2s6OnRo
cmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKK3sKKyAgICBzd2l0Y2ggKGRpZE9wdGlt
aXplKCkpIHsKKyAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgorICAgICAgICByZXR1
cm4gdGhyZXNob2xkOworICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgorICAgICAgICByZXR1cm4g
dGhyZXNob2xkICogNDsKKyAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgorICAgICAgICByZXR1cm4g
dGhyZXNob2xkIC8gMjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIHRocmVzaG9sZDsKK30KKworCiB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNo
YXJlZFByb2ZpbGVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9tZXRhZGF0YS0+aXNGaW5h
bGl6ZWQoKSk7CkBAIC0zMzcsMTUgKzM4MiwyNSBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjph
bGxvY2F0ZVNoYXJlZFByCiAgICAgaWYgKG1fbWV0YWRhdGEtPmhhc01ldGFkYXRhKCkpIHsKICAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheVByb2ZpbGVzID0gMDsKIAotI2RlZmluZSBDT1VO
VChfX29wKSBcCi0gICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5u
dW1FbnRyaWVzPF9fb3A+KCk7CisjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQXJyYXlQcm9m
aWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CiAgICAgICAgIEZPUl9FQUNI
X09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ09VTlQpCiAgICAgICAgIEZPUl9FQUNIX09QQ09E
RV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENPVU5UKQogI3VuZGVmIENPVU5UCiAgICAgICAg
IG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9wSXRlcmF0
b3JOZXh0PigpOwogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+
bnVtRW50cmllczxPcEdldEJ5SWQ+KCk7Ci0KICAgICAgICAgbV9hcnJheVByb2ZpbGVzID0gRml4
ZWRWZWN0b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+KG51bWJlck9mQXJyYXlQcm9maWxlcyk7CisK
KyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCaW5hcnlBcml0aFByb2ZpbGVzID0gMDsKKyNkZWZp
bmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZCaW5hcnlBcml0aFByb2ZpbGVzICs9IG1fbWV0YWRhdGEt
Pm51bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQklOQVJZ
X0FSSVRIX1BST0ZJTEUoQ09VTlQpCisjdW5kZWYgQ09VTlQKKyAgICAgICAgbV9iaW5hcnlBcml0
aFByb2ZpbGVzID0gRml4ZWRWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPihudW1iZXJPZkJpbmFy
eUFyaXRoUHJvZmlsZXMpOworCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mVW5hcnlBcml0aFBy
b2ZpbGVzID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZVbmFyeUFyaXRoUHJvZmls
ZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOworICAgICAgICBGT1JfRUFDSF9P
UENPREVfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKENPVU5UKQorI3VuZGVmIENPVU5UCisgICAg
ICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzID0gRml4ZWRWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+
KG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDEyIEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQXJyYXlQcm9maWxl
LmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkNvZGVUeXBl
LmgiCiAjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKKyNpbmNsdWRlICJFeGVjdXRpb25Db3Vu
dGVyLmgiCiAjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgogI2luY2x1ZGUgIkhhbmRs
ZXJJbmZvLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgpAQCAtNjQsNiArNjYsNyBAQCBjbGFz
cyBVbmxpbmtlZENvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOwog
Y2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogc3RydWN0IEV4ZWN1dGFibGVJbmZv
OwogZW51bSBjbGFzcyBMaW5rVGltZUNvbnN0YW50IDogaW50MzJfdDsKIApAQCAtMTc1LDYgKzE3
OCw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtu
b3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsg
fQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50
b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
c1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdl
dENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRS
ZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQogICAgIGNvbnN0IEZpeGVk
VmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OyB9CiAKQEAgLTIwNyw2ICsyMTEsMTUgQEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9k
ZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRN
b2RlPihtX3NjcmlwdE1vZGUpOyB9CiAKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5z
dHJ1Y3Rpb25zKCkgY29uc3Q7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uQXQo
Qnl0ZWNvZGVJbmRleCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5k
ZXgpLnB0cigpOyB9CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25z
QmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5hdCgwKS5wdHIoKTsKKyAgICAgICAgY29uc3QgYXV0byog
aW5zdHJ1Y3Rpb25zRW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbnN0cnVjdGlvbnNCZWdpbikgKyBpbnN0cnVjdGlv
bnMoKS5zaXplKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0cnVjdGlvbiA+PSBpbnN0
cnVjdGlvbnNCZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGluc3RydWN0aW9uc0VuZCk7CisgICAgICAg
IHJldHVybiBpbnN0cnVjdGlvbiAtIGluc3RydWN0aW9uc0JlZ2luOworICAgIH0KKyAgICB1bnNp
Z25lZCBpbnN0cnVjdGlvbnNTaXplKCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBt
X251bUNhbGxlZUxvY2FsczsgfQogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVy
biBtX251bVZhcnM7IH0KQEAgLTMzNCwxMCArMzQ3LDIxIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG1fbWV0YWRhdGEtPnNpemVJbkJ5dGVzKCk7CiAgICAgfQogCisgICAgYm9vbCBsb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCisgICAgeworICAgICAgICAvLyBT
b21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRo
ZXkgcnVuLgorICAgICAgICByZXR1cm4gIWlzQnVpbHRpbkZ1bmN0aW9uKCk7CisgICAgfQogICAg
IHZvaWQgYWxsb2NhdGVTaGFyZWRQcm9maWxlcygpOwogICAgIFVubGlua2VkVmFsdWVQcm9maWxl
JiB1bmxpbmtlZFZhbHVlUHJvZmlsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZVBy
b2ZpbGVzW2luZGV4XTsgfQogICAgIFVubGlua2VkQXJyYXlQcm9maWxlJiB1bmxpbmtlZEFycmF5
UHJvZmlsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVzW2luZGV4XTsg
fQogCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29sIGhhc0lkZW50aWZpZXIoVW5pcXVlZFN0
cmluZ0ltcGwqKTsKKyNlbmRpZgorCisgICAgaW50MzJfdCB0aHJlc2hvbGRGb3JKSVQoaW50MzJf
dCB0aHJlc2hvbGQpOworCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2RlQmxvY2soVk0mLCBT
dHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mLCBPcHRpb25TZXQ8Q29k
ZUdlbmVyYXRpb25Nb2RlPik7CiAKQEAgLTM5Nyw2ICs0MjEsOSBAQCBwcml2YXRlOgogICAgIHVu
c2lnbmVkIG1fbGV4aWNhbFNjb3BlRmVhdHVyZXMgOiA0OwogcHVibGljOgogICAgIENvbmN1cnJl
bnRKU0xvY2sgbV9sb2NrOworI2lmIEVOQUJMRShKSVQpCisgICAgUmVmUHRyPEJhc2VsaW5lSklU
Q29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKKyNlbmRpZgogcHJpdmF0ZToKICAgICBDb2Rl
RmVhdHVyZXMgbV9mZWF0dXJlcyB7IDAgfTsKICAgICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1v
ZGU7CkBAIC00MTMsNyArNDQwLDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5z
dHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3M7CiAKLQogI2lmIEVOQUJMRShERkdfSklU
KQogICAgIERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKICNlbmRpZgpAQCAtNDU4LDYg
KzQ4NCwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9m
ZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1w
T2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4g
b3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgfQorCisgICAgQmluYXJ5
QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1cm4gbV9i
aW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHVuYXJ5QXJp
dGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9
CisKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSB7
IHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7IH0KIAogcHJpdmF0ZToKICAgICB1c2luZyBP
dXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwg
aW50PjsKQEAgLTQ2NSw4ICs1MDEsMTYgQEAgcHJpdmF0ZToKICAgICBPdXRPZkxpbmVKdW1wVGFy
Z2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0
YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4
cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0
ZUNvdW50ZXI7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRWYWx1ZVByb2ZpbGU+IG1fdmFsdWVQ
cm9maWxlczsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZEFycmF5UHJvZmlsZT4gbV9hcnJheVBy
b2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9iaW5hcnlBcml0
aFByb2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJp
dGhQcm9maWxlczsKKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgTG9jayBtX2NhY2hlZElkZW50
aWZpZXJVaWRzTG9jazsKKyAgICBIYXNoU2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gbV9jYWNoZWRJ
ZGVudGlmaWVyVWlkczsKKyNlbmRpZgogCiBwcm90ZWN0ZWQ6CiAgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1l
dGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNiArNjQsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUpOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNldEluTWV0YWRhdGFUYWJsZShjb25zdCBP
cGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2lzRmluYWxpemVkKTsKKyAg
ICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9pczMyQml0ID8gb2Zmc2V0VGFibGUz
MigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUxNigpW09wY29kZTo6b3Bjb2RlSURd
OworICAgICAgICBiYXNlVHlwZU9mZnNldCA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25vZih0
eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSwgYmFzZVR5cGVPZmZzZXQpOworICAgICAgICByZXR1
cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSkgKiBv
cGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZT4KICAgICB1bnNpZ25lZCBudW1FbnRyaWVzKCk7CiAKQEAgLTEwNyw2ICsxMTYsNyBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gc19vZmZzZXQxNlRhYmxlU2l6ZTsKICAgICB9CiAKKwog
ICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAgICAgdXNpbmcgT2Zmc2V0MTYgPSB1aW50
MTZfdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmls
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVBy
b2ZpbGUuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMyArNDUsMTEgQEAgc3Ry
dWN0IFZhbHVlUHJvZmlsZUJhc2UgewogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBu
dW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51
bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVl
UHJvZmlsZUJhc2UoKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRv
dGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCi0gICAgICAgICAgICBtX2J1Y2tldHNbaV0gPSBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgY2xlYXJCdWNrZXRzKCk7CiAgICAgfQog
ICAgIAogICAgIEVuY29kZWRKU1ZhbHVlKiBzcGVjRmFpbEJ1Y2tldCh1bnNpZ25lZCBpKQpAQCAt
NTksNiArNTcsMTIgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICBBU1NFUlQo
bnVtYmVyT2ZCdWNrZXRzICsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzKTsKICAgICAgICAgcmV0
dXJuIG1fYnVja2V0cyArIG51bWJlck9mQnVja2V0cyArIGk7CiAgICAgfQorCisgICAgdm9pZCBj
bGVhckJ1Y2tldHMoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRv
dGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCisgICAgICAgICAgICBtX2J1Y2tldHNbaV0gPSBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICB9CiAgICAgCiAgICAgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8odW5zaWduZWQgYnVja2V0KSBjb25zdAogICAgIHsKQEAgLTEyMyw4ICsxMjcs
NiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0g
ICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2
ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5n
IHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKQEAgLTEzOSw3ICsxNDEsNyBA
QCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbV9w
cmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29kZWRKU1ZhbHVlIG1fYnVja2V0c1t0
b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rpb24g
eyBTcGVjTm9uZSB9OwpAQCAtMTYxLDYgKzE2Myw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVXaXRo
TG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1YmxpYyBWYWx1ZVBy
b2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAgICBWYWx1ZVByb2ZpbGUoKSA6IFZh
bHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVmFs
dWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQmFzZWxp
bmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Lmgi
CiAjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmgi
CiAjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCkBAIC0zNCw3ICsz
NSw5IEBACiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2VtZW50LmgiCiAjaW5jbHVkZSAiREZHT1NS
RW50cnkuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWVTZXQuaCIKKyNpbmNsdWRlICJKSVRN
YXRoSUMuaCIKICNpbmNsdWRlICJKU0Nhc3QuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1h
cC5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJSZWNvcmRl
ZFN0YXR1c2VzLmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgpAQCAtNzAsNyArNzMsNyBAQCBzdHJ1
Y3QgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24gewogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1f
dG87CiB9OwogICAgICAgICAKLWNsYXNzIENvbW1vbkRhdGEgeworY2xhc3MgQ29tbW9uRGF0YSA6
IHB1YmxpYyBNYXRoSUNIb2xkZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbW1vbkRh
dGEpOwogcHVibGljOgogICAgIENvbW1vbkRhdGEoKQpAQCAtMTE2LDYgKzExOSw3IEBAIHB1Ymxp
YzoKICAgICBGaXhlZFZlY3RvcjxDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ+IG1fd2F0
Y2hwb2ludHM7CiAgICAgRml4ZWRWZWN0b3I8QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBt
X2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CiAgICAgRml4ZWRWZWN0b3I8QWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBtX2FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFw
PiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgIFJlY29yZGVkU3RhdHVzZXMgcmVjb3JkZWRTdGF0
dXNlczsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBtX2p1bXBSZXBsYWNlbWVudHM7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgorI2luY2x1ZGUgIkp1bXBUYWJs
ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiAr
NDIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7CiAKK3N0
cnVjdCBTaW1wbGVKdW1wVGFibGU7CitzdHJ1Y3QgU3RyaW5nSnVtcFRhYmxlOworCiBuYW1lc3Bh
Y2UgREZHIHsKIAogY2xhc3MgSklUQ29tcGlsZXI7CkBAIC0xMDEsNiArMTA0LDggQEAgcHVibGlj
OgogICAgIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKENvZGVCbG9jayosIHZvaWQq
IHBjKSBmaW5hbDsKIAogICAgIHVzaW5nIERpcmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVm
Rm9yREZHOworCisgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3Zl
cnJpZGUgeyByZXR1cm4gY29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KICAgICAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENvbXBpbGVyOyAvLyBBbGxvdyBKSVRDb21w
aWxlciB0byBjYWxsIHNldENvZGVSZWYoKS4KQEAgLTExMCw2ICsxMTUsOCBAQCBwdWJsaWM6CiAg
ICAgRml4ZWRWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG1fb3NyRW50cnk7CiAgICAgRml4ZWRW
ZWN0b3I8REZHOjpPU1JFeGl0PiBtX29zckV4aXQ7CiAgICAgRml4ZWRWZWN0b3I8REZHOjpTcGVj
dWxhdGlvblJlY292ZXJ5PiBtX3NwZWN1bGF0aW9uUmVjb3Zlcnk7CisgICAgRml4ZWRWZWN0b3I8
U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3Ry
aW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgREZHOjpWYXJpYWJs
ZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07CiAgICAgREZHOjpNaW5pZmllZEdyYXBo
IG1pbmlmaWVkREZHOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSwxMyArMTg1LDEy
IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAKICAgICBt
X2dyYXBoLnJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7CiAKLSAgICBpZiAoIW1fZ3JhcGgubV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSB8fCAhbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJs
ZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2Rl
QmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEo
bG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKTsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRh
Ymxlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShs
b2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N3aXRjaEp1bXBU
YWJsZXMpOwotICAgIH0KKyAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJs
ZXMuaXNFbXB0eSgpKTsKKyAgICBpZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
LmlzRW1wdHkoKSkgCisgICAgICAgIG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
ID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgaWYgKCFt
X2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpCisgICAgICAgIG1faml0Q29kZS0+
bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7
CiAKICAgICBmb3IgKEJhZzxTd2l0Y2hEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fZ3JhcGgubV9z
d2l0Y2hEYXRhLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CiAgICAgICAgIFN3aXRjaERhdGEm
IGRhdGEgPSAqKml0ZXI7CkBAIC0xOTksMTIgKzE5OCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjps
aW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIGNhc2UgU3dpdGNoQ2hhcjoKICAgICAgICAg
Y2FzZSBTd2l0Y2hJbW06IHsKICAgICAgICAgICAgIGlmICghZGF0YS5kaWRVc2VKdW1wVGFibGUp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShk
YXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF0uaXNF
bXB0eSgpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X2dyYXBoLnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0g
ICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3
aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2ltcGxl
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2Rh
dGEuc3dpdGNoVGFibGVJbmRleF07CiAgICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1
bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tk
YXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fYnJh
bmNoT2Zmc2V0cy5zaXplKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbGlua2Vk
VGFibGUubV9jdGlPZmZzZXRzLnNpemUoKTsgai0tOykKQEAgLTIxOSwxMiArMjE4LDEyIEBAIHZv
aWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKIAogICAgICAgICBjYXNlIFN3
aXRjaFN0cmluZzogewogICAgICAgICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkgewot
ICAgICAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxl
KGRhdGEuc3dpdGNoVGFibGVJbmRleCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQobV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUlu
ZGV4XS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fZ3JhcGgudW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hU
YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7
CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9qaXRDb2RlLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XTsKICAgICAgICAg
ICAgIGF1dG8gY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRh
Zz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2stPmluZGV4XSk7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuc2l6ZSgpID09IHVu
bGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS5zaXplKCkgKyAxKTsKICAgICAgICAgICAgIGZvciAo
YXV0byYgZW50cnkgOiBsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMpCkBAIC0zMzMsNyArMzMyLDcg
QEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIH0KIAogICAg
IGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKLSAgICAg
ICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKG1ha2VVbmlxdWU8UENUb0NvZGVP
cmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBsaW5rQnVmZmVy
KSk7CisgICAgICAgIG1faml0Q29kZS0+Y29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtl
VW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyKSwgbGlua0J1ZmZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIGVtaXRTdGFja092ZXJmbG93Q2hl
Y2soSklUQ29tcGlsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzdGFja092ZXJm
bG93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw2IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRy
eShWTSYgdm0sIENhbGxGcmFtZSoKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09
IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1h
cCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0
aWxsVmFsaWQpOwogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VPU1JFbnRyeVRvREZHKCkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDI4MzA1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc3Miw5ICs3NzIsNiBAQCB2b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxs
SGVscGVycyYgCiAgICAgLy8gVGhlIHRhZyByZWdpc3RlcnMgYXJlIG5lZWRlZCB0byBtYXRlcmlh
bGl6ZSByZWNvdmVyaWVzIGJlbG93LgogICAgIGppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1Jl
Z2lzdGVycygpOwogCi0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAg
IGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BF
bnRyeUZyYW1lKTsKLQogICAgIGlmIChpbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2lu
dCkgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogdG1wU2NyYXRjaCA9IHNjcmF0Y2ggKyBvcGVy
YW5kcy50bXBJbmRleCgwKTsKICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvbk1hdGVyaWFsaXplT1NSRXhpdFNpZGVTdGF0ZSk+KCZ2bSwgJmV4aXQsIHRtcFNjcmF0
Y2gpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkNv
ZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZH
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpJVC5oIgpAQCAtMTE5LDEwICsxMjAsMTAgQEAgdm9p
ZCBoYW5kbGVFeGl0Q291bnRzKFZNJiB2bSwgQ0NhbGxIZWxwZQogICAgIGludDMyX3QgY2xpcHBl
ZFZhbHVlOwogICAgIHN3aXRjaCAoaml0LmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKICAgICBj
YXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAgY2xpcHBlZFZhbHVlID0gQmFzZWxpbmVFeGVj
dXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2Jq
ZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVlID0gQmFzZWxpbmVFeGVj
dXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IFVw
cGVyVGllckV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoaml0LmNvZGVCbG9jaygp
LT5nbG9iYWxPYmplY3QoKSwgdGFyZ2V0VmFsdWUpOworICAgICAgICBjbGlwcGVkVmFsdWUgPSBV
cHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKHRhcmdldFZhbHVlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTE0MiwxMSArMTQzLDggQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVAogewogICAgIGNhbGxlcklzTExJbnQgPSBPcHRpb25zOjpmb3JjZU9T
UkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogCi0gICAgaWYgKGNhbGxCeXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkgewotICAgICAgICBpZiAoIWNhbGxlcklzTExJbnQpCi0gICAgICAgICAg
ICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsK
KyAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQogICAgICAgICByZXR1cm4g
TExJbnQ6OmNoZWNrcG9pbnRPU1JFeGl0RnJvbUlubGluZWRDYWxsVHJhbXBvbGluZVRodW5rKCku
Y29kZSgpOwotICAgIH0KIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBqdW1wVGFyZ2V0OwogCkBAIC0xOTgsOCArMTk2LDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVAogI3VuZGVmIExMSU5UX1JFVFVSTl9MT0NBVElPTgogCiAgICAg
fSBlbHNlIHsKLSAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1faGFzTGlua2Vk
T1NSRXhpdCA9IHRydWU7Ci0KICAgICAgICAgc3dpdGNoICh0cnVlQ2FsbGVyQ2FsbEtpbmQpIHsK
ICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNhbGw6CiAgICAgICAgIGNhc2UgSW5saW5l
Q2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CkBAIC0zMTMsNiArMzA5LDEwIEBAIHZvaWQgcmVpZnlJbmxp
bmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxs
ZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2
ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVy
czo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rp
b25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGlu
ZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpKTsKKyAgICAgICAgfSBlbHNlIGlm
ICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKKyAgICAg
ICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVD
b2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGlu
ZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19tZXRhZGF0YUdQUikpOworICAg
ICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVKSVRDb25zdGFudFBvb2woKSksIGNhbGxlZVNh
dmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19jb25zdGFu
dHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1Zh
cmFyZ3MoKSkKQEAgLTQwNCw3ICs0MDQsOCBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChW
TSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CiAgICAg
ICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29kZUJsb2NrRm9yRXhp
dC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJ
VDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGluZUpJVENvbnN0YW50UG9vbCgpKSwgSklU
OjpzX2NvbnN0YW50c0dQUik7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBleGl0SW5kZXggPSBl
eGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbjsKQEAgLTQyMCwxMiArNDIxLDE2IEBA
IHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICAgICAganVtcFRh
cmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKICAgICB9CiAKLSAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9ja0ZvckV4aXQpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRs
ZXIoKSkgeworICAgICAgICBBU1NFUlQoIVJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rl
cnMoKS5jb250YWlucyhMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikpOworICAgICAgICBqaXQuY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFt
ZSwgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKExMSW50OjpSZWdpc3RlcnM6OnBj
R1BSKSk7CisKICAgICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9jYXRjaCwgd2Ug
bmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCiAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgdm0uYWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSk7
CiAgICAgfQotICAgIAorCisgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVv
ZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQuZmFy
SnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0clRhZyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5l
cy5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0
aHMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCkBA
IC0yODY5LDcgKzI4NzAsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRmlu
ZFN3CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwog
ICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
Ci0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgQVNT
RVJUKHZhbHVlLmlzRG91YmxlKCkpOwogICAgIGRvdWJsZSBhc0RvdWJsZSA9IHZhbHVlLmFzRG91
YmxlKCk7CkBAIC0yODkwLDcgKzI4OTEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uU3dpdGNoCiAKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxw
dHIpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
LSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJp
bmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwogICAgIHJldHVybiBsaW5rZWRUYWJsZS5jdGlGb3JWYWx1ZSgqdW5saW5rZWRUYWJs
ZSwgc3RySW1wbCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMwLDYgKzczMCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIHNodWZm
bGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihjYWxsZWVUYWdHUFIsIGNhbGxl
ZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxs
b2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVt
UGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2pp
dC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogCiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAgICAgRWRn
ZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CkBAIC04
ODksNyArODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQog
CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkg
ewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwg
Y2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6
Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0
aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxl
RGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9q
aXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI4LDYgKzgyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9
IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAg
ICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9
IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwpAQCAtOTc5LDcgKzk4MCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAKICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQs
IGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBb
Jl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVm
ZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
bV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICszOTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0
aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNh
bGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgbV9q
aXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFj
Y2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2VkUmVnaXN0ZXJzLAogICAgICAgICBKU1ZhbHVl
UmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShwcm9w
ZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwogICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKIApAQCAtNDkwNSw3ICs0OTA1
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0
aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVEFkZElDKiBh
ZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAg
IEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVEFkZElDKGFy
aXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1
ZUFkZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
VmFsdWVBZGQ7CiAgICAgCkBAIC00OTg5LDcgKzQ5ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlVmFsdWVTdWIoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9
IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50
aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9qaXQuY29kZUJsb2NrKCkt
PmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9qaXQu
aml0Q29kZSgpLT5jb21tb24uYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemU7CiAgICAgYXV0byBu
b25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1YjsKIApAQCAtNTU3MSw3ICs1
NTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTmVnYXRlKAogICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBVbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPnVuYXJ5QXJp
dGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVROZWdJQyog
bmVnSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAg
ICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVROZWdJQyhh
cml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJp
dGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJh
dGlvbkFyaXRoTmVnYXRlOwogICAgIGNvbXBpbGVNYXRoSUMobm9kZSwgbmVnSUMsIHJlcGF0Y2hp
bmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKQEAgLTU4MTUsNyArNTgxNSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU11bChOb2QKICAgICBDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9m
aWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRNdWxJQyogbXVsSUMg
PSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRN
dWxJQyogbXVsSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRNdWxJQyhhcml0aFBy
b2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxP
cHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVl
TXVsOwogCkBAIC0xNDc3MCw3ICsxNDc3MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2Rl
LT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBt
X2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdz
LCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCksIGNhbGxTaXRlSW5kZXgpOworICAgIG1faml0
LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNj
b3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBj
YWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTYsNyArMTU2LDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQog
CiAgICAgaWYgKHZtLnNob3VsZEJ1aWxkZXJQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKSkgewogICAg
ICAgICBCMzo6UENUb09yaWdpbk1hcCBvcmlnaW5NYXAgPSBzdGF0ZS5wcm9jLT5yZWxlYXNlUENU
b09yaWdpbk1hcCgpOwotICAgICAgICBjb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKG1h
a2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwg
V1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcikp
OworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1h
a2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwg
V1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcik7
CiAgICAgfQogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gbGFiZWwgPSBz
dGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRh
Zz4oc3RhdGUucHJvYy0+Y29kZSgpLmVudHJ5cG9pbnRMYWJlbCgwKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYg
KzY4LDggQEAgcHVibGljOgogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uKCkgb3ZlcnJp
ZGU7CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjb21tb25EYXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpJVENvZGUsIGNvbW1vbik7IH0KICAgICB2b2lkIHNocmlua1RvRml0KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIG92ZXJyaWRlOworCisgICAgUENUb0NvZGVPcmlnaW5N
YXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gY29tbW9uLm1fcGNUb0Nv
ZGVPcmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKICAgICBERkc6OkNvbW1vbkRhdGEgY29tbW9uOwog
ICAgIFZlY3RvcjxPU1JFeGl0PiBtX29zckV4aXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDE0ICs1Miw2IEBAIHZvaWQg
bGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICBncmFwaC5yZWdpc3RlckZyb3plblZhbHVlcygpOwog
Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5lbnN1
cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7Ci0g
ICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1
bXBUYWJsZXMuaXNFbXB0eSgpKTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIC8vIENyZWF0ZSB0aGUg
ZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlzIGVudHJ5cG9pbnQgdG90YWxseSBkaWZm
ZXJlbnRseQogICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3JlIGRvaW5nIE9TUiBlbnRy
eSBvciBub3QuCiAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBACiAjaW5jbHVkZSAiSlNTZXRJdGVyYXRvci5o
IgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgi
CisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9iZUNvbnRleHQu
aCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuaCIKQEAgLTIzMjAsNiArMjMyMSwxOCBAQCBwcml2YXRlOgogICAgICAgICBjb21w
aWxlQmluYXJ5TWF0aElDPEpJVFN1YkdlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCByZXBhdGNoaW5n
RnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CiAgICAgfQogCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Cisg
ICAgc3RhdGljIEpJVEFkZElDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJp
bmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVEFkZElDKHBy
b2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdl
bmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUTXVsSUMqIGFkZE1hdGhJQyhE
Rkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJl
dHVybiBjb21tb24uYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0
YXRpYyBKSVROZWdJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29tbW9uLCBVbmFyeUFy
aXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVE5lZ0lDKHByb2ZpbGUp
OyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRv
cj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUU3ViSUMqIGFkZE1hdGhJQyhERkc6OkNv
bW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBj
b21tb24uYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKwogICAgIHZvaWQgY29tcGlsZVZhbHVlTXVs
KCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CkBAIC0yMzkxLDcgKzI0MDQsNyBA
QCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAgICAgICAgICAgICBCb3g8TWF0aElDR2VuZXJhdGlv
blN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRl
Pjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiog
bWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRoSUM8R2VuZXJhdG9yPihhcml0aFByb2Zp
bGUpOworICAgICAgICAgICAgICAgIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9
IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRDb2RlLT5jb21tb24sIGFyaXRoUHJvZmls
ZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihKU1Zh
bHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLCBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBw
YXJhbXMuZ3BTY3JhdGNoKDApKTsKIAogICAgICAgICAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFBy
b2ZpbGluZyA9IGZhbHNlOwpAQCAtMjUwMCw3ICsyNTEzLDcgQEAgcHJpdmF0ZToKICNlbmRpZgog
CiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJh
dGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBqaXQuY29kZUJs
b2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICAg
ICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0
b3I+KHN0YXRlLT5qaXRDb2RlLT5jb21tb24sIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgICAgICAg
ICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVy
YW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLAogICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBKU1ZhbHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkp
LCBwYXJhbXMuZnBTY3JhdGNoKDApLAogICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZnBTY3Jh
dGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKQEAgLTQzMTcsNyArNDMzMCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwog
CiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46
OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJ
VCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZh
bCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9k
ZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFt
ZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAKICAgICAgICAgICAgIGdlbmVy
YXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CkBAIC0xMDI4NSw2ICsx
MDI5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1BbGxvY2F0ZWRBcmdzOyArK2kpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dChqc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBh
c3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0
YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAg
ICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQu
Y29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5r
SW5mbyhzZW1hbnRpY05vZGVPcmlnaW4pOwpAQCAtMTA0NDMsMTMgKzEwNDU3LDE0IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MuYXBwZW5kKHBhcmFtc1sx
ICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOwogCiAgICAgICAgICAgICAgICAgc2h1ZmZsZURh
dGEubnVtUGFzc2VkQXJncyA9IG51bUFyZ3M7CisgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEu
bnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJl
Z2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogCiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3Jp
Z2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0lu
Zm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNs
b3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86
OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7
CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAg
ICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDc5Miw3ICsxMDgwNyw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAg
ICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwg
SW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
cHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTEx
MDczLDcgKzExMDg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBk
b25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQ
UkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8s
IFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAg
ICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTMsMjggKzQx
MywxNiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkCiAKICAgICBS
ZWdpc3RlclNldCBhbGxGVExDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZl
UmVnaXN0ZXJzKCk7CiAgICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGJhc2VsaW5lQ2Fs
bGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAg
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiB2bUNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2Fs
bGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJlZ2lzdGVyU2V0IHZtQ2FsbGVlU2F2ZXNU
b1NraXAgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKLSAgICBpZiAoZXhpdC5pc0V4
Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICBqaXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFt
ZSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSks
IEdQUkluZm86OnJlZ1QxKTsKLSAgICB9CiAKICAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0
KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgewogICAgICAgICBpZiAo
IWFsbEZUTENhbGxlZVNhdmVzLmdldChyZWcpKSB7Ci0gICAgICAgICAgICBpZiAoZXhpdC5pc0V4
Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghdm1DYWxs
ZWVTYXZlcy0+ZmluZChyZWcpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAg
ICAgICAgIHVuc2lnbmVkIHVud2luZEluZGV4ID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0
ZXJzKCktPmluZGV4T2YocmVnKTsKICAgICAgICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldCogYmFz
ZWxpbmVSZWdpc3Rlck9mZnNldCA9IGJhc2VsaW5lQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKTsKLSAg
ICAgICAgUmVnaXN0ZXJBdE9mZnNldCogdm1DYWxsZWVTYXZlID0gbnVsbHB0cjsgCi0gICAgICAg
IGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICAgICAgdm1DYWxsZWVTYXZl
ID0gdm1DYWxsZWVTYXZlcy0+ZmluZChyZWcpOwogCiAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkg
ewogICAgICAgICAgICAgR1BSUmVnIHJlZ1RvTG9hZCA9IGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQg
PyBHUFJJbmZvOjpyZWdUMCA6IHJlZy5ncHIoKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlZ1RvTG9hZCAhPSBHUFJJbmZvOjpyZWdUMSk7CiAKICAgICAgICAgICAgIGlmICh1bndpbmRJ
bmRleCA9PSBVSU5UX01BWCkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBGVEwgY29tcGlsYXRp
b24gZGlkbid0IHByZXNlcnZlIHRoaXMgcmVnaXN0ZXIuIFRoaXMgbWVhbnMgdGhhdCBpdCBhbHNv
CkBAIC00NTIsOCArNDQwLDYgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1bnNp
Z25lZAogCiAgICAgICAgICAgICBpZiAoYmFzZWxpbmVSZWdpc3Rlck9mZnNldCkKICAgICAgICAg
ICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1h
Y3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgYmFzZWxpbmVSZWdpc3Rlck9mZnNl
dC0+b2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmICh2bUNhbGxlZVNhdmUgJiYgIXZtQ2FsbGVl
U2F2ZXNUb1NraXAuZ2V0KHZtQ2FsbGVlU2F2ZS0+cmVnKCkpKQotICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTY0KHJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVn
VDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIEZQUlJlZyBmcFJlZ1RvTG9hZCA9IGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPyBGUFJJbmZv
OjpmcFJlZ1QwIDogcmVnLmZwcigpOwogCkBAIC00NjQsMTkgKzQ1MCw5IEBAIHN0YXRpYyB2b2lk
IGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAogICAgICAgICAgICAgaWYgKGJhc2VsaW5l
UmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKGZwUmVnVG9M
b2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVy
UmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQtPm9mZnNldCgpKSk7Ci0gICAgICAgICAg
ICBpZiAodm1DYWxsZWVTYXZlICYmICF2bUNhbGxlZVNhdmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNh
dmUtPnJlZygpKSkKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoZnBSZWdUb0xvYWQs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9m
ZnNldCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhh
bmRsZXIoKSkgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0KiB2bUNhbGxlZVNhdmUgPSB2bUNh
bGxlZVNhdmVzLT5maW5kKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKLSAgICAgICAgaml0
LnN0b3JlNjQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7Ci0KLSAgICAgICAg
dm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChHUFJJbmZvOjpub3RDZWxsTWFza1Jl
Z2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3Rl
ciwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+
b2Zmc2V0KCkpKTsKLSAgICB9Ci0KICAgICBzaXplX3QgYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJz
Rm9yQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCk7CiAKICAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tD
b250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3b3JraW5nIGNvcHkpCkBAIC00Miwx
NyArNDIsMjggQEAgY2xhc3MgTWV0YWRhdGEKICAgICBkZWYgc3RydWN0KG9wKQogICAgICAgICBy
ZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVs
ZHMpCisgICAgICAgIGRlZiBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGRO
YW1lcykKKyAgICAgICAgICAgIGZpZWxkTmFtZXMubWFwIGRvIHxmaWVsZE5hbWV8CisgICAgICAg
ICAgICAgICAgIiN7cHJlZml4fXN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVsw
XS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uLTFdfSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikK
KyAgICAgICAgZW5kCisKKyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMs
IGZpZWxkTmFtZXMpCiAgICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAg
ICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAg
IiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUp
fVxuI3twcmVmaXh9fTsiCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4j
e2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlLCBmaWVsZE5hbWVzKX1cbiN7cHJl
Zml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJl
Zml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307IgorICAgICAgICAgICAgICAgICAgICBm
aWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVz
aChmaWVsZE5hbWUpCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30g
bV8je2ZpZWxkTmFtZX07IgogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpv
aW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygi
ICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVsZE5hbWVzID0gW10KKyAgICAgICAgcHJl
Zml4ID0gIiAgICAgICAgIgorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKHByZWZpeCwg
QGZpZWxkcywgZmllbGROYW1lcykKKyAgICAgICAgZmllbGRzID0gZmllbGRzICsgIlxuIiArIGdl
bmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQogCiAgICAgICAgIGlu
aXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJz
LmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDYgKzM2NywyOCBAQCB2
b2lkIEFzc2VtYmx5SGVscGVyczo6bG9hZFByb3BlcnR5KEdQUlJlCiAgICAgICAgIHJlc3VsdCk7
CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZh
bHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAg
ICBKdW1wIGlzSW5saW5lID0gYnJhbmNoMzIoTGVzc1RoYW4sIG9mZnNldCwgVHJ1c3RlZEltbTMy
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKG9iamVj
dCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgbmVnMzIob2Zm
c2V0KTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7CisgICAgSnVtcCBy
ZWFkeSA9IGp1bXAoKTsKKyAgICAKKyAgICBpc0lubGluZS5saW5rKHRoaXMpOworICAgIGFkZFB0
cigKKyAgICAgICAgVHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJf
dD4oc2l6ZW9mKEpTT2JqZWN0KSkgLQorICAgICAgICAgICAgKHN0YXRpY19jYXN0PGludDMyX3Q+
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDIpICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSkpLAorICAgICAgICBvYmplY3QsIHNjcmF0Y2gpOworICAgIAorICAg
IHJlYWR5LmxpbmsodGhpcyk7CisgICAgCisgICAgc3RvcmVWYWx1ZSh2YWx1ZSwKKyAgICAgICAg
QmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Cit9CisKIHZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVyZShWTSYgdm0sIFJlZ2lzdGVySUQgc291cmNlLCBSZWdp
c3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpA
QCAtNjk4LDggKzcyMCwxMyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNh
dmVzCiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENh
bGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBpbmZvKTsKK30KKwordm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZt
LCBDYWxsTGlua0luZm8qIGluZm8pCit7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBH
UFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5r
VGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNh
bGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9u
UHRyVGFnPihjYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDggKzIzNCw5IEBAIHB1
YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBjbG9iYmVy
cyBvZmZzZXQuCisgICAgLy8gTm90ZSB0aGF0IHRoZXNlIGNsb2JiZXIgb2Zmc2V0LgogICAgIHZv
aWQgbG9hZFByb3BlcnR5KEdQUlJlZyBvYmplY3QsIEdQUlJlZyBvZmZzZXQsIEpTVmFsdWVSZWdz
IHJlc3VsdCk7CisgICAgdm9pZCBzdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJS
ZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBHUFJSZWcgc2NyYXRjaCk7CiAKICAgICB2b2lkIG1v
dmVWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3Mgc3JjUmVncywgSlNWYWx1ZVJlZ3MgZGVzdFJlZ3MpCiAg
ICAgewpAQCAtMzc5LDE1ICszODAsMjYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAg
dm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZy
YW1lKiYgdG9wRW50cnlGcmFtZSwgR1BSUmVnIHNjcmF0Y2gpCisgICAgeworI2lmIE5VTUJFUl9P
Rl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorICAgICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZy
YW1lLCBzY3JhdGNoKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXJJbXBsKHNjcmF0Y2gpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRv
cEVudHJ5RnJhbWUpOworICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CisjZW5kaWYKKyAg
ICB9CisKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lKQogICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FM
TEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICAgICAgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkg
fTsKICAgICAgICAgR1BSUmVnIHRlbXAxID0gdXNlZFJlZ2lzdGVycy5nZXRGcmVlR1BSKDApOwot
ICAgICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh0ZW1wMSk7CisgICAgICAg
IGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHRvcEVudHJ5RnJh
bWUsIHRlbXAxKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOwogI2VuZGlmCiAgICAgfQogICAg
IApAQCAtMTcyMCw2ICsxNzMyLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIGVt
aXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7CisgICAg
dm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExp
bmtJbmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAg
ICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2Rl
LmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCisjaW5jbHVk
ZSAiSnVtcFRhYmxlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK0pJVEFkZElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX2FkZElDcy5hZGQoYXJpdGhQcm9m
aWxlKTsgfQorSklUTXVsSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUp
OyB9CitKSVRTdWJJQyogTWF0aElDSG9sZGVyOjphZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0K
K0pJVE5lZ0lDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisKK3Zv
aWQgTWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcikKK3sKKyAg
ICBtX2FkZElDcyA9IFdURk1vdmUob3RoZXIubV9hZGRJQ3MpOworICAgIG1fbXVsSUNzID0gV1RG
TW92ZShvdGhlci5tX211bElDcyk7CisgICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVn
SUNzKTsKKyAgICBtX3N1YklDcyA9IFdURk1vdmUob3RoZXIubV9zdWJJQ3MpOworfQorCitCYXNl
bGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUs
IENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spCisgICAgOiBEaXJlY3RKSVRD
b2RlKFdURk1vdmUoY29kZSksIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkK
KyAgICAsIE1hdGhJQ0hvbGRlcigpCit7IH0KKworQmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVK
SVRDb2RlKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRD
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJD
YWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSklUQ29kZU1h
cC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJpbmFy
eUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVuYXJ5QXJpdGhQcm9maWxlOworc3RydWN0IFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmlu
Z0p1bXBUYWJsZTsKKworY2xhc3MgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFk
b3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKTsKKyAgICBKSVRBZGRJQyogYWRkSklUQWRk
SUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFy
eUFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsK
KworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJ
Qz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3Vi
SUM+IG1fc3ViSUNzOworfTsKKworY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKK3B1YmxpYzoKKyAg
ICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisgICAgZW51bSBjbGFzcyBUeXBlIDogdWlu
dDhfdCB7CisgICAgICAgIEdsb2JhbE9iamVjdCwKKyAgICAgICAgQ2FsbExpbmtJbmZvLAorICAg
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAgRnVuY3Rpb25EZWNsLAorICAgICAgICBG
dW5jdGlvbkV4cHIsCisgICAgfTsKKworICAgIHN0cnVjdCBWYWx1ZSB7CisgICAgICAgIFR5cGUg
dHlwZTsKKyAgICAgICAgUGFja2VkUHRyPHZvaWQ+IHBheWxvYWQ7CisgICAgfTsKKworICAgIEpJ
VENvbnN0YW50UG9vbCgpID0gZGVmYXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2woSklUQ29uc3Rh
bnRQb29sJiYpID0gZGVmYXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2wmIG9wZXJhdG9yPShKSVRD
b25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworCisgICAgQ29uc3RhbnQgYWRkKFR5cGUgdHlwZSwg
dm9pZCogcGF5bG9hZCA9IG51bGxwdHIpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQg
PSBtX2NvbnN0YW50cy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7
IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50cy5zaXplKCk7IH0KKyAgICBW
YWx1ZSBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbaV07IH0KKworcHJp
dmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fY29uc3RhbnRzOworfTsKKworCitjbGFzcyBCYXNl
bGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7
CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4sIENv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spOworICAgIH5CYXNlbGluZUpJVENv
ZGUoKSBvdmVycmlkZTsKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAo
KSBvdmVycmlkZSB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CisKKyAgICBC
YWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBU
YWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJs
ZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFw
OworICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CisgICAgYm9vbCBtX2lz
U2hhcmVhYmxlIHsgdHJ1ZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJ
VFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxp
bmVKSVRQbGFuLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBA
IHNpemVfdCBCYXNlbGluZUpJVFBsYW46OmNvZGVTaXplKCkgY29uc3QKIAogQ29tcGlsYXRpb25S
ZXN1bHQgQmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6ZSgpCiB7Ci0gICAgQ29tcGlsYXRpb25SZXN1
bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBDb21waWxhdGlv
blJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRocmVhZChtX2NvZGVCbG9jayk7
CiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgogICAg
ICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwg
KCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw2
IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuUHJvbG8KICAgICBzdG9yZVB0
cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93
Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1Jl
Z3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6
UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOwotICAgIHN0b3JlVmFsdWUodGhp
c1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkp
KTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIEFkZHJlc3Moc2hhZG93
UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2sp
KSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRy
ZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwg
Y2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0No
aWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFO
b25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAgICBTaGFkb3dDaGlja2VuKiBzaGFkb3dD
aGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpAQCAtNzIsNiArNjIsMjggQEAgdm9pZCBDQ2Fs
bEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQogICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBB
ZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9CiAKKwordGVtcGxhdGUgPHR5cGVuYW1lIENv
ZGVCbG9ja1R5cGU+Cit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNr
ZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcg
c2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5k
ZXgpCit7CisgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFt
ZSkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6
dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFk
b3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKKyAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgdGhpc1ZhbHVlKSkpOworICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tl
dCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CisgICAg
c3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOworICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVD
VF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Cit9CisK
K3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hh
ZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1t
UHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwg
Y29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRo
aXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93
UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisK
IHZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMm
KT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQogewogICAgIENDYWxsSGVscGVy
cyBqaXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4NDAsMTQgQEAgcHVibGljOgogICAgIC8vIFRo
ZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9sYXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3Vt
ZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRvcCBvZgogICAgIC8vIHN0YWNrIHRvIG1hcnNo
YWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFj
a2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsK
LSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQs
IEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayosIENhbGxTaXRl
SW5kZXgpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
PgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUg
Y29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworcHVibGljOgorICAgIHZv
aWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1
ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENh
bGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFp
bFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVn
IHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOwor
CiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQg
d3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBh
Y2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwg
R1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw4ICszNywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBDYWxsRnJhbWVT
aHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayogY29kZUJsb2Nr
KQogeworICAgIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb2RlQmxvY2stPmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVl
U2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9j
YXRpb25zKQorewogICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMgeyBSZWdpc3Rl
clNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkgfTsKLSAgICBjb25zdCBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVn
aXN0ZXJzKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVyU2F2ZUxvY2F0
aW9ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSB7IHJl
Z2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDEzIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8VmFsdWVSZWNv
dmVyeT4gYXJnczsKICAgICB1bnNpZ25lZCBudW1Mb2NhbHMgeyBVSU5UX01BWCB9OwogICAgIHVu
c2lnbmVkIG51bVBhc3NlZEFyZ3MgeyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG51bVBhcmFt
ZXRlcnMgeyBVSU5UX01BWCB9OyAvLyBPbiBvdXIgbWFjaGluZSBmcmFtZS4KICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIFJlZ2lzdGVyTWFwPFZhbHVlUmVjb3Zlcnk+IHJlZ2lzdGVyczsKICAgICBH
UFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZhbGlkR1BSUmVnIH07CiAKICAgICB2b2lkIHNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldHVwQ2FsbGVl
U2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCopOwogI2VuZGlmCiAgICAg
VmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCwxMyArMzgsMTMgQEAgQ2FsbEZyYW1lU2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVy
KENDYQogICAgIDogbV9qaXQoaml0KQogICAgICwgbV9vbGRGcmFtZShkYXRhLm51bUxvY2FscyAr
IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKICAgICAsIG1fbmV3
RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJz
LCBudWxscHRyKQotICAgICwgbV9hbGlnbmVkT2xkRnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzCi0gICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1l
KGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAsIG1fYWxpZ25lZE9sZEZy
YW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIHJvdW5kQXJndW1lbnRD
b3VudFRvQWxpZ25GcmFtZShkYXRhLm51bVBhcmFtZXRlcnMpKQogICAgICwgbV9hbGlnbmVkTmV3
RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCiAgICAgICAgICsgcm91
bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEuYXJncy5zaXplKCkpKQogICAgICwgbV9m
cmFtZURlbHRhKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSAtIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSkK
ICAgICAsIG1fbG9ja2VkUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKSkKICAg
ICAsIG1fbnVtUGFzc2VkQXJncyhkYXRhLm51bVBhc3NlZEFyZ3MpCisgICAgLCBtX251bVBhcmFt
ZXRlcnMoZGF0YS5udW1QYXJhbWV0ZXJzKQogewogICAgIC8vIFdlIGFyZSBhbGxvd2VkIGFsbCB0
aGUgdXN1YWwgcmVnaXN0ZXJzLi4uCiAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7IGktLTsgKQpAQCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQgQ2FsbEZyYW1l
U2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSArIFBheWxvYWRPZmZzZXQpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgYXJndW1lbnRDb3VudE9LID0KICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbV9uZXdGcmFtZUJhc2UsCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9udW1QYXJh
bWV0ZXJzKSk7CiAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihz
dGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVn
aXN0ZXJzKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0LmFuZDMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpLCBtX25ld0ZyYW1lQmFz
ZSk7CiAgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2Yo
UmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1fbmV3RnJhbWVCYXNlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZURhdGEgZGF0YTsKICAgICAgICAgZGF0YS5udW1Mb2NhbHMgPSBudW1Mb2NhbHMo
KTsKICAgICAgICAgZGF0YS5udW1QYXNzZWRBcmdzID0gbV9udW1QYXNzZWRBcmdzOworICAgICAg
ICBkYXRhLm51bVBhcmFtZXRlcnMgPSBtX251bVBhcmFtZXRlcnM7CiAgICAgICAgIGRhdGEuY2Fs
bGVlID0gZ2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSB9KS0+
cmVjb3ZlcnkoKTsKICAgICAgICAgZGF0YS5hcmdzLnJlc2l6ZShhcmdDb3VudCgpKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudCgpOyArK2kpCkBAIC03OTgsNiArNzk5
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBlcmZvcm1TYWZlV3JpdGVzKCk7CiAgICAgCiAgICAg
dW5zaWduZWQgbV9udW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBtX251
bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcg
QEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJ
VChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpCi0gICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAg
ICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgbnVsbHB0cikKICAgICAsIG1faW50ZXJwcmV0ZXIodm0u
aW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLnNpemUoKSA6IDApCiAgICAgLCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2
bSkKQEAgLTc3LDYgKzc3LDkgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9n
bG9iYWxPYmplY3RDb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6Okdsb2JhbE9iamVjdCk7CisgICAgbV9wcm9maWxlZENvZGVCbG9jayA9IGNvZGVCbG9j
azsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9j
aygpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtOTAsOCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVu
dGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgICAgICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBz
a2lwT3B0aW1pemU7Ci0gICAgCi0gICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihT
aWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9y
RW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0
ZUNvdW50ZXIoKSkpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDApOworICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2ln
bmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVu
dHJ5KCkpLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50
ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBj
b3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNiwy
MCBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1p
dE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdy
aXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KQogeworICAgIGF1dG8gb2sgPSBicmFu
Y2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChO
b3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIG9rLmxpbmsodGhpcyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSkKK3ZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2Jh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQot
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJSZWFkT25seVdhdGNocG9pbnQoKS0+YWRkcmVzc09m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykgeworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFs
T2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50
U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQpAQCAtMTI5LDEy
ICsxMzcsMTggQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgaWYg
KCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CiAgICAgSnVtcCBvayA9IGJyYW5j
aFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50
KCk7CiAgICAgb2subGluayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6OnJlc2V0U1AoKQoreworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKK30KKwogI2Rl
ZmluZSBORVhUX09QQ09ERShuYW1lKSBcCiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KSk7IFwKICAgICBicmVhazsKQEAgLTE4MSw2MSArMTk1LDQ0IEBAIHZvaWQgSklUOjplbWl0U2xv
d0Nhc2VDYWxsKGNvbnN0IEluc3RydWMKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2
b2lkIEpJVDo6ZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9
PSBGdW5jdGlvbkNvZGUpOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByZXN1bHQpOworICAg
IGF1dG8gaGFzRXhlY3V0YWJsZSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0LCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgp
IC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCByZXN1bHQpOworICAgIGhhc0V4ZWN1dGFibGUu
bGluayh0aGlzKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3Rvcigp
KQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9m
ZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkpLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNv
ZGVCbG9ja0ZvckNhbGwoKSksIHJlc3VsdCk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0
LCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpvZmZzZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0
KTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spOworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBwcm9iZURlYnVnKFs9XSAoUHJv
YmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5m
cDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIH0pOworI2Vu
ZGlmCit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKICAgICBpZiAo
SklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9j
b2RlQmxvY2ssICJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fcHJvZmls
ZWRDb2RlQmxvY2ssICJcbiIpOwogICAgIAogICAgIGppdEFzc2VydFRhZ3NJblBsYWNlKCk7CiAg
ICAgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsKICAgICAKLSAgICBhdXRvJiBpbnN0cnVj
dGlvbnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1
Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgYXV0
byYgaW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Cisg
ICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwogCi0gICAg
Vk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgQnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVj
b2RlSW5kZXgoMCk7Ci0gICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9j
b2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+
aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0pKSkgewotICAgICAgICAvLyBXZSBj
YW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNv
ZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KLSAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291
bGQgYmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQgd2Fu
dHMgdG8KLSAgICAgICAgLy8gZG8gT1NSIGVudHJ5IGludG8gdGhlIGJhc2VsaW5lIEpJVCBpbiBh
IGxvb3AsIGl0IHdpbGwgcGFzcyBpbiB0aGUgYnl0ZWNvZGUgb2Zmc2V0IGl0Ci0gICAgICAgIC8v
IHdhcyBleGVjdXRpbmcgYXQgd2hlbiBpdCBraWNrZWQgb2ZmIG91ciBjb21waWxhdGlvbi4gV2Ug
b25seSBuZWVkIHRvIGNvbXBpbGUgY29kZSBmb3IKLSAgICAgICAgLy8gYW55dGhpbmcgcmVhY2hh
YmxlIGZyb20gdGhhdCBieXRlY29kZSBvZmZzZXQuCi0KLSAgICAgICAgLy8gV2Ugb25seSBib3Ro
ZXIgYnVpbGRpbmcgdGhlIGJ5dGVjb2RlIGdyYXBoIGlmIGl0IGNvdWxkIHNhdmUgdGltZSBhbmQg
ZXhlY3V0YWJsZQotICAgICAgICAvLyBtZW1vcnkuIFdlIHBpY2sgYW4gYXJiaXRyYXJ5IG9mZnNl
dCB3aGVyZSB3ZSBkZWVtIHRoaXMgaXMgcHJvZml0YWJsZS4KLSAgICAgICAgaWYgKG1fbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAyMDApIHsKLSAgICAgICAgICAgIC8vIEFz
IGEgc2ltcGxpZmljYXRpb24sIHdlIGRvbid0IGZpbmQgYWxsIGJ5dGVjb2RlIHJhbmdlcyB0aGF0
IGFyZSB1bnJlYWNoYWJsZS4KLSAgICAgICAgICAgIC8vIEluc3RlYWQsIHdlIGp1c3QgZmluZCB0
aGUgbWluaW11bSBieXRlY29kZSBvZmZzZXQgdGhhdCBpcyByZWFjaGFibGUsIGFuZAotICAgICAg
ICAgICAgLy8gY29tcGlsZSBjb2RlIGZyb20gdGhhdCBieXRlY29kZSBvZmZzZXQgb253YXJkcy4K
LQotICAgICAgICAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaChtX2NvZGVCbG9jaywgbV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxv
Y2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9j
ayk7Ci0KLSAgICAgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PEJ5dGVjb2RlQmFzaWNCbG9jayo+
IHdvcmtsaXN0OwotICAgICAgICAgICAgc3RhcnRCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eCgpOwotICAgICAgICAgICAgd29ya2xpc3QucHVzaChibG9jayk7Ci0KLSAgICAgICAgICAgIHdo
aWxlIChCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKLSAgICAg
ICAgICAgICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KHN0ZDo6bWluKHN0
YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgYmxvY2stPmxlYWRlck9mZnNldCgpKSk7Ci0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA6IGJsb2NrLT5zdWNjZXNz
b3JzKCkpCi0gICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goJmdyYXBoW3N1Y2Nlc3Nv
ckluZGV4XSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBBbHNvIGFkZCBjYXRjaCBibG9ja3MgZm9y
IGJ5dGVjb2RlcyB0aGF0IHRocm93LgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+
bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+bGVhZGVyT2Zmc2V0KCk7IGJ5dGVjb2Rl
T2Zmc2V0IDwgYmxvY2stPmxlYWRlck9mZnNldCgpICsgYmxvY2stPnRvdGFsTGVuZ3RoKCk7KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25z
LmF0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBo
YW5kbGVyID0gbV9jb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlz
dC5wdXNoKGdyYXBoLmZpbmRCYXNpY0Jsb2NrV2l0aExlYWRlck9mZnNldChoYW5kbGVyLT50YXJn
ZXQpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gaW5zdHJ1
Y3Rpb24tPnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhh
dmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewpA
QCAtMjc4LDEyICsyNzUsMTUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQog
CiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1
dGlvbigpKSkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9j
azsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7Cisg
ICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4o
KS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVj
b2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50
ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgICAg
ICB9CiAKKyAgICAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhdGNoKQorICAgICAgICAgICAgYXNz
ZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CisKICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewog
ICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzKQogICAgICAgICBERUZJTkVfU0xPV19PUChsZXNz
ZXEpCkBAIC01MjcsNyArNTI3LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2Vz
KCkKIAogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAK
LSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dMbigi
QmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgIiwgbV9ieXRlY29kZUluZGV4LCAi
IGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgpKTsKQEAgLTU0NSw4ICs1NDUsOCBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIGlmIChVTkxJS0VM
WShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7CiAgICAgICAgICAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBw
cm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwog
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gU0xP
VyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkp
LCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC02MDMs
NyArNjAzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV92YWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9kZWxfYnlfaWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9zdWIpCi0j
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZnJvbV9zY29wZSkKICNlbmRpZgogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcHV0X3RvX3Njb3BlKQpAQCAtNjc0LDU1ICs2NzQsNTUg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCit2b2lk
IEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKQor
eworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
MCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRh
dGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBD
b2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwg
c19jb25zdGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
Cit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCiB2b2lkIEpJ
VDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBl
ZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+
Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBzd2l0Y2ggKGxldmVsKSB7
CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQg
PSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAg
ICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6
CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwotICAgICAgICBtX2NhbkJlT3B0aW1p
emVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAgIHN3aXRjaCAo
bV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgY2Fz
ZSBNb2R1bGVDb2RlOgotICAgIGNhc2UgRXZhbENvZGU6Ci0gICAgICAgIG1fY29kZUJsb2NrLT5t
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZ1bmN0aW9uQ29kZToKLSAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0
byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgotICAgICAg
ICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgotICAgICAgICBtX2NvZGVCbG9j
ay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGxldmVsKSAmJiBERkc6Om1p
Z2h0SW5saW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwotICAgICAgICBicmVhazsKLSAgICB9CiAK
LSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkg
fHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkp
IHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2Nr
KTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRh
YmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5t
X3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fY29kZUJs
b2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKLSAgICAgICAgaWYgKG1f
Y29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQotICAg
ICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5u
dW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygp
KSB7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dp
dGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRW
ZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2st
Pm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBt
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1f
dW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVz
KCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHko
KSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxl
QmFzZWxpbmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVu
aXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAm
JiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKSB7CisgICAgICAg
IC8vIEZJWE1FOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBvZmYgb2YgVW5saW5rZWRDb2RlQmxvY2su
CisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1f
cHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KICAgICBpZiAoVU5MSUtFTFkobV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBGSVhNRTogYnVpbGQgcHJvZmlsZXIgZGlz
YXNzZW1ibGVyIG9mZiBVbmxpbmtlZENvZGVCbG9jay4KICAgICAgICAgbV9jb21waWxhdGlvbiA9
IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbigKLSAgICAg
ICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zv
cihtX2NvZGVCbG9jayksCisgICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVCbG9jayksCiAgICAgICAgICAg
ICAgICAgUHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFBy
b2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2Nr
KTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAog
ICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9y
aWdpbihCeXRlY29kZUluZGV4KDApKSk7CkBAIC03NDIsMTEgKzc0MiwxMiBAQCB2b2lkIEpJVDo6
Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1p
dEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2Rl
QmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAgICAgICBlbWl0UHV0Q29kZUJs
b2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAK
LSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwog
ICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsK
ICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzU3LDE2ICs3NTgsMjAgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1vdmUocmVnVDEsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0g
ICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJl
Z2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsK
ICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOworICAgIGVtaXRNYXRlcmlh
bGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKLSAgICBpZiAobV9jb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAgaWYgKG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCgh
bV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgeworICAgICAgICBpZiAoc2hvdWxk
RW1pdFByb2ZpbGluZygpICYmICghbV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3Rvcigp
IHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA+IDEpKSB7CisgICAgICAg
ICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4ZWRWZWN0b3I8VmFsdWVQcm9m
aWxlPjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMg
YSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBz
aXRlICh0bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3
ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCi0gICAgICAg
ICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQor
ICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkg
JiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMo
YXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQpAQCAtNzc3LDEyICs3ODIsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5
bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgICAgICAgICAgICAgbG9hZDMy
KEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CiAjZW5kaWYKLSAgICAg
ICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fY29kZUJsb2NrLT52YWx1ZVByb2Zp
bGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIHN0
b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwgYXJndW1lbnQgKiBzaXplb2YoVmFs
dWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoIUpJ
VENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCghSklUQ29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAKICAg
ICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAgICAgIG1fdm0tPmppdFNpemVTdGF0aXN0
aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhpcyk7CkBAIC03OTksMjQgKzgw
NCwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgbV9i
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0
PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRp
b24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2NrKTsKKyAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJl
Z1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24o
b3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIHJlZ1QwKTsKIAogICAgIC8vIElmIHRo
ZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciByZXF1aXJlIGFyaXR5IGZpeHVw
LgotICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1l
dGVycyAhPSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgIT0gMTsKKyAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNB
cml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxhYmVsKCk7Ci0gICAgICAgIHN0
b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGlu
ZWQpOworCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgICAgIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsK
KyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKHJlZ1QwKTsKKyAgICAg
ICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZz
ZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAKICAgICAgICAgbG9hZDMyKHBheWxvYWRG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMSk7Ci0g
ICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVC
bG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOworICAgICAg
ICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV91bmxpbmtlZENv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwogCiAg
ICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAKICAgICAgICAgaWYg
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/
IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjApOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV91
bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJp
dHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBhcmd1bWVudEdQUjApOwogICAgICAg
ICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLmxp
bmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTgzOSw3ICs4NDcsNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRF
bmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5k
SXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2lu
KCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5l
dyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFz
ZWxpbmVKSVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxM
aW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV91bmxpbmtlZENvZGVCbG9jaywgTGlu
a0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOwogICAgIGxpbmsoKTsKIH0K
IApAQCAtODU4LDggKzg2Niw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgc3dpdGNoIChy
ZWNvcmQudHlwZSkgewogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlOgogICAg
ICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyOiB7Ci0gICAgICAgICAgICBjb25zdCBV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3
aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0
aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVs
c1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6
ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB1bmxpbmtlZFRh
YmxlLm1fYnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3MSw4ICs4NzksOCBAQCB2b2lkIEpJVDo6bGlu
aygpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6U3RyaW5nOiB7Ci0g
ICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
LSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAg
IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNb
dGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29y
ZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGxvY2F0aW9uIDogdW5s
aW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAgICAgICAgICAgICAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hPZmZzZXQ7CkBAIC05MDYsNiArOTE0LDI3
IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsocmVjb3Jk
LmZyb20sIHJlY29yZC5jYWxsZWUpOwogICAgIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
YXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3Ig
KGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRh
Zz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9u
ZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4u
bV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3Rh
cnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXpl
SUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMp
OworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5
SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9p
bkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsK
KyNlbHNlCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIp
OwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7
CkBAIC05MTcsMjEgKzk0NiwyNSBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1faW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisjZW5kaWYKIAogICAgIGZv
ciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIGluZm8gPSAqY29t
cGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBpbmZvLmRvbmVMb2Nh
dGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRp
b25JbmZvLmRvbmVMb2NhdGlvbik7CisjZWxzZQogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8g
PSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKICAgICAgICAgaW5mby5zZXRDb2RlTG9j
YXRpb25zKAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCiAgICAgICAgICAgICBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9j
YXRpb24pKTsKKyNlbmRpZgorCiAgICAgfQogCi0gICAgewotICAgICAgICBKSVRDb2RlTWFwQnVp
bGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zm
c2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkp
Ci0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1f
bGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY29kZUJsb2Nr
LT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCkpOworICAgIEpJVENv
ZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOworICAgIGZvciAodW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29k
ZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkp
CisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRl
Y29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJl
bHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDI2ICs5NzMsNDIgQEAgdm9pZCBKSVQ6Omxp
bmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShtX2NvbXBpbGF0aW9uKSkgeworICAgICAg
ICAvLyBGSVhNRTogc2hvdWxkIHdlIG1ha2UgdGhlIGJ5dGVjb2RlIHByb2ZpbGVyIGtub3cgYWJv
dXQgVW5saW5rZWRDb2RlQmxvY2s/CiAgICAgICAgIGlmIChPcHRpb25zOjpkaXNhc3NlbWJsZUJh
c2VsaW5lRm9yUHJvZmlsZXIoKSkKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRU
b1Byb2ZpbGVyKG1fY29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsKLSAgICAgICAgbV92
bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2NvZGVCbG9jaywgKm1f
Y29tcGlsYXRpb24pOworICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENv
bXBpbGF0aW9uKG1fcHJvZmlsZWRDb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKICAgICB9CiAK
ICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCiAg
ICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFw
PihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpOwogICAg
IAorICAgIC8vIEZJWE1FOiBNYWtlIGEgdmVyc2lvbiBvZiBDb2RlQmxvY2tXaXRoSklUVHlwZSB0
aGF0IGtub3dzIGFib3V0IFVubGlua2VkQ29kZUJsb2NrLgogICAgIENvZGVSZWY8SlNFbnRyeVB0
clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50
cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmco
Q29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSku
ZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhD
b2RlQmxvY2tXaXRoSklUVHlwZShtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRy
VGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0
SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpOwor
ICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgQmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0
aEFyaXR5Q2hlY2spKTsKKworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gV1RGTW92
ZShtX3VubGlua2VkQ2FsbHMpOworICAgIG1faml0Q29kZS0+bV9ldmFsQ2FsbExpbmtJbmZvcyA9
IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3VubGlua2Vk
U3R1YkluZm9zID0gV1RGTW92ZShtX3VubGlua2VkU3R1YkluZm9zKTsKKyAgICBtX2ppdENvZGUt
Pm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBt
X2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1faml0Q29kZU1hcCA9IGppdENvZGVNYXBC
dWlsZGVyLmZpbmFsaXplKCk7CisgICAgbV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNz
KTsKKyAgICBtX2ppdENvZGUtPm1fY29uc3RhbnRQb29sID0gV1RGTW92ZShtX2NvbnN0YW50UG9v
bCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBt
X2lzU2hhcmVhYmxlOworI2Vsc2UKKyAgICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBmYWxz
ZTsKKyNlbmRpZgogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRh
TG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJs
b2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJl
c3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBk
YXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5s
aW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdn
ZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7
CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29t
cGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApA
QCAtOTY4LDI1ICsxMDE3LDE0IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1h
aW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tz
KCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENv
ZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyAr
K2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0
aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMx
OD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFw
KCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4oKTsKLSAgICB9Ci0KICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkK
LSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1Rv
Q29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX2ppdENvZGUtPm1fcGNUb0NvZGVPcmlnaW5NYXAg
PSBXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApOwogCiAgICAgbV92bS0+bWFjaGluZUNvZGVC
eXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0YXRpY19j
YXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAgICAgICAgc3RhdGljX2Nhc3Q8ZG91
YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CisgICAgICAgIHN0YXRpY19j
YXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CiAK
LSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShtX2ppdENvZGUu
cmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwog
fQpAQCAtOTk4LDExICsxMDM2LDExIEBAIHNpemVfdCBKSVQ6OmNvZGVTaXplKCkgY29uc3QKICAg
ICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJ
VDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVm
b3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoZWZmb3J0
KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICByZXR1cm4gZmluYWxp
emVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
RXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxOCArMTA4MCwyOCBAQCB2b2lkIEpJVDo6ZG9N
YWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxv
ZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0
aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVC
bG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5s
aW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpID09IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Y29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAogICAgIHJldHVybiByb3VuZExvY2Fs
UmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChjb2RlQmxvY2stPm51bUNhbGxlZUxv
Y2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9CiAK
LWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vu
c2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQor
eworICAgIHJldHVybiBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENv
ZGVCbG9jaygpKTsKK30KKworaW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2Vk
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2spIC0gMSkub2Zmc2V0KCk7CiB9CiAK
K2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sK
KyAgICByZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2Rl
QmxvY2soKSk7Cit9CisKIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gSklUOjpjb21waWxlVGlt
ZVN0YXRzKCkKIHsKICAgICBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IHJlc3VsdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogCiAj
ZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwgZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01F
U1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9mZnNldCBcIiVzXCIgc2hvdWxkIGJlICVk
LCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19jYXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0
aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5j
bHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCkBAIC00NCw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSklU
TWF0aElDLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUg
IkpTSW50ZXJmYWNlSklULmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiUENU
b0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCiAjaW5jbHVkZSA8
d3RmL1VuaXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsxNTEsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25JbmZvIHsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBkb25lTG9jYXRpb247CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgVW5saW5rZWRD
YWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OworI2Vsc2UKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAgICAgIENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvOworI2VuZGlmCiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
bmV3Q2FsbGVlRnVuY3Rpb24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQg
OiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5U
IEpJVCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRT
bG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEpJVFRodW5rczsKQEAgLTE3MSw2ICsxNzgsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5
IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgogICAgICAgICBzdGF0aWMgY29u
c3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCisgICAgICAgIHVz
aW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZN
JiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMTc4LDI4
ICsxODcsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpK
U0ludGVyZmFjZUpJVDo6dm0oKTsgfQogCiAgICAgICAgIHZvaWQgY29tcGlsZUFuZExpbmtXaXRo
b3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCk7Ci0gICAgICAgIENvbXBpbGF0aW9u
UmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0
IGZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayopOwogICAgICAgICBzaXplX3QgY29kZVNp
emUoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3Jl
Q29tcGlsZSgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNv
bXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQg
ZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29k
ZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBKSVQo
dm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGNvZGVCbG9jaywg
ZWZmb3J0KTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lz
dGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIGludCBz
dGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGlj
IGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKik7CiAKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gY29tcGlsZVRpbWVT
dGF0cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU2Vjb25kcyB0b3RhbENv
bXBpbGVUaW1lKCk7CiAKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0
YUdQUiA9IExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFI7CisgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNfY29uc3RhbnRzR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJH
UFI7CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3Mo
KTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7CiAgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKICAgICAgICAgdm9pZCBsaW5rKCk7Ci0gICAgICAg
IENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsK
KyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklU
Q29tcGlsYXRpb25FZmZvcnQpOwogCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklU
IGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENh
bGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2
ICsyMzcsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkUHRyRnJvbU1l
dGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDMyRnJvbU1l
dGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlLCBjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAg
ICAgdm9pZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90
IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNp
emVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgbG9hZENv
bnN0YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CisgICAgcHJpdmF0ZToKKyAg
ICAgICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZENv
ZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKworICAgICAgICB2b2lk
IGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDAp
OworCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAg
ICAgICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxl
cik7CkBAIC0yNTQsNiArMjk0LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNv
bXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVP
cENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8CisgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpv
cGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncworICAgICAgICAgICAgJiYgT3A6Om9wY29k
ZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQp
OworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PAorICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6
b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKKyAgICAgICAgICAgIHx8IE9wOjpvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzCisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50
KTsKKyNlbHNlCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVu
YWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAm
JiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTI2NSw5ICszMTgsMTAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92
YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAg
ICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICAgICAgICAgLCB2b2lkPiBjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworI2VuZGlmCiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNv
bnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAg
ICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZv
KiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQp
OwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2Fs
bEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAg
LTI4NywxNCArMzQxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0
ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdy
aXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAg
dm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOworICAgICAgICB2b2lkIGVtaXRX
cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhh
dCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFp
bGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0g
ICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVl
UmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNW
YWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25z
dCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRh
dGEmLCBKU1ZhbHVlUmVncyk7CkBAIC0zMDUsOCArMzU4LDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRh
dGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPgogICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSk7CiAKLSAgICAg
ICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BS
LCBBcnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwotICAgICAgICB2b2lkIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVy
SUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3Rl
cklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2Rl
JiwgcHRyZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7
CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2RlIGVjbWFN
b2RlKE9wKTsKQEAgLTU5Myw3ICs2NDgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0
cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02MTEsNyArNjY1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3Vt
ZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2Fy
Z3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAt
NjI3LDE0ICs2ODEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0
U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZh
dGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUpOwotICAgICAgICB2b2lkIGVtaXRIYXNQ
cml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKKyAgICAgICAgdm9p
ZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAg
IHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3Mp
OwotICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlKTsKKyAgICAg
ICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlw
ZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKICAgICAgICAgdm9pZCBlbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02NDYsNyArNzAwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90
aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShH
UFJSZWcgcG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBv
aW50KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJp
YWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVl
KiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0
KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCopOwpAQCAtNjU1LDYgKzcwOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQg
ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lz
dGVyKTsKIAorICAgICAgICBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAg
ICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAg
IGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9v
bCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY3NiwxMyArNzMx
LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0m
KTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGVHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNs
b3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9wcml2
YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfdG9fc2NvcGVHZW5l
cmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfY2hlY2tfdHJh
cHNfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJik7CkBA
IC02OTYsMzIgKzc0OSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAh
KHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1
cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKICAgICAgICAgfQogCi0jZGVmaW5l
IERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2dldF9mcm9t
X3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9S
RVNPTFZFX1RZUEUoREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVD
TEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZl
VHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKLQotICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gTW9kdWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9y
ZSBlZmZpY2llbnQgdG8gZW1pdCBpbmxpbmUgdGhhbiB1c2UgYSB0aHVuay4KLSAgICAgICAgICAg
IC8vIFJlc29sdmVkQ2xvc3VyZVZhciBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3
aXRoIG9wX3Jlc29sdmVfc2NvcGUuCi0gICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9
PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAg
ICAgfQotCi0jZGVmaW5lIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5
cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAg
ICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1Ip
Ci0jdW5kZWYgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwotCiAgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5l
cmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gdmFsdWVJc1RydXRoeUdlbmVyYXRvcihWTSYpOwogCiAjZW5kaWYgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYpOwor
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93
X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5r
KFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7
CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdl
bmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+
LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworCiAgICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKQEAgLTc2MCwxMCArNzk3LDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4s
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4KLSAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGw+CkBAIC04MjEsMjAgKzg1OCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25B
cmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJn
cz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlv
blR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rp
b25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+
Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9w
ZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFy
Z3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBB
cmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJh
dGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlv
biwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3Vs
dCk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBl
LCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFy
Z3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlw
ZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1l
dGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQs
IEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQs
IEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJ
bmRpcmVjdENhbGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKG1ldGFkYXRhLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZz
ZXQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpA
QCAtOTE5LDI1ICs5NTYsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6
ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1f
Y2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmls
aW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBi
b29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5C
ZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJs
ZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBv
ZmYsCiAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAg
ICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRp
ZgogCisgICAgICAgIHZvaWQgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xS
ZWdpc3RlcnMoKTsKKworICAgICAgICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwog
ICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGlj
IGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91
IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5l
ZWQgaXQgdG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNs
b3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBn
aXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgot
ICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOworCisgICAgICAgIHZvaWQgcmVzZXRTUCgp
OwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjQsOSArOTk4
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Ns
b3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAotICAg
ICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAg
ICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRo
UHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAg
IEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEwMDAsMTEgKzEwMzEsMjYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0
aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRl
OwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJl
T3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsK
ICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAg
ICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAgICAgICAgQ29kZUJsb2Nr
KiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBVbmxpbmtlZENvZGVC
bG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKworICAgICAgICBNYXRoSUNI
b2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENv
ZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAgICAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgQmFnPFVubGlua2VkQ2Fs
bExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1f
ZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
PiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFi
bGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRh
YmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAgc3RydWN0IE5vdEFDb2Rl
QmxvY2sgeyB9IG1fY29kZUJsb2NrOworCisgICAgICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRy
dWUgfTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0
YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzIwLDcgKzMyMSw4IEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcg
KzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAg
ICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCBy
ZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBu
b3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwg
cmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJv
IDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC01NzMsNyArNTc3
LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IAogCiAgICAgZW1p
dExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1Qy
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03MTcsOCAr
NzIyLDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cgogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhh
cml0aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5h
ZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQo
Y3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJl
IGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3Bl
cmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRl
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3Bl
cmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAtODk5LDggKzkwNCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9j
b2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJVEFkZElDKiBh
ZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
QWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUwLDExIEBA
IHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdlbmVy
YXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBV
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRo
UHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmls
ZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBlbHNl
CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBz
KTsKIApAQCAtMTAxNSwxMCArMTAyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklU
QmluYXJ5TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAgICAg
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmls
ZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
YXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKICAg
ICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwog
CkBAIC0xMDU1LDEzICsxMDYyLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFy
eU1hdGhJQzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAg
ICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
aWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVs
c2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJl
cGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlv
biksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwog
CiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVs
KCk7CkBAIC0xMTIwLDEzICsxMTI4LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRC
aW5hcnlNYXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQp
OwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAg
ICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJ
QykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+
KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmls
ZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQs
IGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24p
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCBy
ZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRo
SUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQg
PSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNv
bnN0IEluc3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1f
b3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0
X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11
bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE11bD4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRkSklUTXVsSUMoYXJpdGhQcm9maWxl
KTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVs
SUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CkBAIC0x
MjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0
CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhh
cml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX21hdGhJQ3MuYWRkSklU
U3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJl
bnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywg
Y3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25W
YWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJf
NjQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3Vs
dChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJs
b2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAgZW1pdFN0b3JlKGRlc3RpbmF0
aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVn
aXN0ZXIoKSwgcmVnVDEsIHJlZ1QwKTsKIH0KIApAQCAtMTU3LDcgKzE1Nyw3IEBAIHN0ZDo6ZW5h
YmxlX2lmX3Q8CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2Fs
bExpbmtJbmZvKikKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50ID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1z
dGF0aWNfY2FzdDxpbnQ+KHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBj
aGVja3BvaW50KSk7CiAKQEAgLTE5Miw3ICsxOTIsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXpl
RnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlv
biA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXpl
T3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGNh
bGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZh
ckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwg
cmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBm
YWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
Qnl0ZXMoKSwgNiAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CkBAIC0yMDIsNyArMjAyLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZAogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFy
Z3VtZW50c0ZyYW1lOwogICAgIGVsc2UKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRp
b25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVn
VDQpLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBP
cGVyYXRpb24sIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVl
UmVncyhyZWdUMiwgcmVnVDQpLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNv
dW50LgpAQCAtMjMyLDEwICsyMzIsMTAgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25z
dCBPcENhbGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdU
MSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxG
cmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
IAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25DYWxsRXZhbCwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1Qy
KTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKIApAQCAtMjQ5LDcg
KzI0OSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2Nr
LT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBDYWxs
TGlua0luZm8qIGluZm8gPSBtX3Byb2ZpbGVkQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86
OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2Fy
Z3Y7CkBAIC0yNTgsOCArMjU4LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNl
KGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2Yo
UmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJl
Z1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRl
Y29kZSk7CkBAIC0yODYsMTEgKzI4NiwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25z
dCBJbnN0cnVjdGlvCiAgICAgKi8KICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwog
ICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVC
bG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CisgICAg
ICAgIGluZm8gPSBtX3Byb2ZpbGVkQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCkpOwogICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsK
ICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyks
IHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KICAgICAKLSAgICBhdXRvIGJ5dGVjb2Rl
SW5kZXggPSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7CisgICAgYXV0
byBieXRlY29kZUluZGV4ID0gbV9wcm9maWxlZEJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0
aW9uKTsKICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2Rl
SW5kZXgpLmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0
YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBl
bWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7IC8vIHJlZ1QxLCByZWdUMCBob2xkcyBjYWxs
ZWUuCkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5z
dHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDEyICszNDEsMTEgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwogICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0s
ICp0aGlzKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKSB7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGxTbG93Q2FzZShjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKQEAgLTM5NSw3ICszOTQsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgSlNWYWx1ZVJl
Z3MgbmV4dFJlZ3MgPSBKU1ZhbHVlUmVncyh0YWdOZXh0R1BSLCBwYXlsb2FkTmV4dEdQUik7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssCisgICAg
ICAgIG1fcHJvZmlsZWRCbG9jaywKICAgICAgICAgSklUVHlwZTo6QmFzZWxpbmVKSVQsCiAgICAg
ICAgIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgQ2FsbFNpdGVJbmRleChC
eXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLApAQCAtNDEwLDcgKzQwOSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgbmV4dFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZEJsb2NrKSwgbmV4dFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9uZXh0LCBuZXh0UmVncyk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMp
OwpAQCAtNDQwLDEwICs0MzksMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29ucwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIC8vIG1ldGFkYXRhCisgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRCbG9jayksIC8vIG1ldGFkYXRhCiAgICAgICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgLy8gb3BlcmF0aW9uCiAgICAgICAgIG5leHRWUmVnLCAvLyByZXN1bHQKLSAgICAgICAg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCisgICAg
ICAgIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFy
ZzEKICAgICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKICAgICAgICAgSlNWYWx1ZVJlZ3Mo
dGFnSXRlcmF0b3JHUFIsIHBheWxvYWRJdGVyYXRvckdQUiksIC8vIGFyZzMKICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsgLy8gYXJnNApAQCAtNDUyLDcgKzQ1MSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RP
YmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0
b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJ
c05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgp
KSk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00NjAsNyArNDU5LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgYXV0byogdHJ5
RmFzdEZ1bmN0aW9uID0gKFsmXSAoKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndp
ZHRoKCkpIHsKICAgICAgICAgY2FzZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9m
YXN0X25hcnJvdzsKQEAgLTUwNiw3ICs1MDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRv
cl9uZXh0KGNvbnN0IEluCiAgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHRhZ1ZhbHVlR1BSKTsK
ICAgICAgICAgcHJlc2VydmVkUmVncy5hZGQocGF5bG9hZFZhbHVlR1BSKTsKICAgICAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywKKyAgICAgICAg
ICAgIG1fcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAog
ICAgICAgICAgICAgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICAgICAgQ2Fs
bFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLApAQCAt
NTMzLDEwICs1MzIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJ
bgogICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUNjsKICAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyID0gcmVnVDc7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFu
Y2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh0YWdEb25lR1BSLCBwYXlsb2FkRG9uZUdQUiks
IHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBK
dW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3Mo
dGFnRG9uZUdQUiwgcGF5bG9hZERvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9wcm9maWxlZEJs
b2NrLT5nbG9iYWxPYmplY3QoKSk7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jaywKKyAgICAgICAgICAgIG1fcHJvZmlsZWRCbG9jaywK
ICAgICAgICAgICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAogICAgICAgICAgICAgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICAgICAgQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLApAQCAtNTg4LDEwICs1ODcsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoCi0gICAgICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IC8vIG1ldGFkYXRhCisgICAgICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxv
Y2spLCAvLyBtZXRhZGF0YQogICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCAv
LyBvcGVyYXRpb24KICAgICAgICAgICAgIGRvbmVWUmVnLCAvLyByZXN1bHQKLSAgICAgICAgICAg
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAg
ICAgICAgICAgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Ly8gYXJnMQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKICAgICAgICAgICAg
IEpTVmFsdWVSZWdzKHRhZ0l0ZXJSZXN1bHRHUFIsIHBheWxvYWRJdGVyUmVzdWx0R1BSKSwgLy8g
YXJnMwogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsgLy8gYXJnNApAQCAtNjAyLDcgKzYwMSw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0Lmxp
bmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJl
c3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSkpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJ
c05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgp
KSk7CiAgICAgfQogCiAgICAgeyAgIApAQCAtNjE4LDEwICs2MTcsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoCi0gICAgICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIC8vIG1ldGFk
YXRhCisgICAgICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCAvLyBt
ZXRhZGF0YQogICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCAvLyBvcGVyYXRp
b24KICAgICAgICAgICAgIHZhbHVlVlJlZywgLy8gcmVzdWx0Ci0gICAgICAgICAgICBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKKyAgICAgICAgICAg
IFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEK
ICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLCAvLyBhcmcyCiAgICAgICAgICAgICBKU1ZhbHVl
UmVncyh0YWdJdGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFyZzMKICAg
ICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgog
I2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgi
CiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3Vs
dChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0
aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVh
bFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4IEBAIHN0ZDo6ZW5hYmxl
X2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2Rl
SUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZGUsIENhbGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRl
Y29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBjaGVja3Bv
aW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJbmNsdWRp
bmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9p
bnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0YWNrT2Zm
c2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKKwogICAgIGlm
IChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZz
ZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsK
ICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsK
LSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVja3Bv
aW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9N
ZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExp
bmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFy
cmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBkb25l
LmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8
CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0g
b3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENh
bGxMaW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVj
b2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewog
ICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC05
MSw3ICs5Miw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAg
ICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVu
dHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1l
Rm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3Rl
ciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOworICAg
IGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVlUmVn
aXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RG
cmVlUmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0
dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJVDo6Y29tcGlsZVNldHVw
RnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRp
b25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNldHVwT3Bl
cmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJhdGlvbihz
ZXR1cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVnVDMs
IHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4K
ICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9h
ZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5j
aDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFkZHJl
c3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25zdGFudChj
YWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBD
YWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJl
Z1QzKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1Qy
KTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNl
dE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dlc3QubGlu
ayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywxNiArMTMx
LDE1IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxhdGU8Pgog
Ym9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkKIHsK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAgIHN0
b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxl
ckZyYW1lT2Zmc2V0KCkpKTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25t
ZW50KCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFyZ3VtZW50
R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJl
Z1QxLCByZWdUMik7CisgICAgcmVzZXRTUCgpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUu
dmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsK
IApAQCAtMTQ4LDcgKzE1MSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
b25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9
IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
KTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFkZChDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0lu
Zm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5t
X2FyZ3Y7CkBAIC0xNTYsNDMgKzE1OSw0NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNp
emVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUg
LSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxDYWxs
KCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Myk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwg
aW5mbyk7CisgICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwo
Y29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKK2Jvb2wgSklUOjpjb21waWxlVGFp
bENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8
PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwg
Q2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK2Jvb2wgSklU
Ojpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2Fs
bExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxsRnJhbWVTaHVm
ZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0
ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5m
bzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0gbWFrZVVu
aXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFzc2Vk
QXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFyYW1ldGVycyA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICBzaHVmZmxlRGF0YS0+
bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICBzaHVm
ZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS5hcmdz
LnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShi
eXRlY29kZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5t
X2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgc2h1
ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2Vk
SW5KU1N0YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5j
bHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAgICAgICBEYXRhRm9y
bWF0SlMpOwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAgICAgICBWYWx1ZVJl
Y292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVmZmxlRGF0YS5zZXR1
cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8tPnNldEZyYW1lU2h1
ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJl
Y292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0YS0+c2V0
dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywg
c2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRDb25zdGFudChjYWxs
TGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxM
aW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwg
WyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0YSkucHJl
cGFyZUZvclRhaWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsK
KworICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8tPmZyYW1lU2h1ZmZs
ZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0g
bGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRv
bmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIxOCwxNCArMjI1LDI1IEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIg
aW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9y
ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0gICAgQ2FsbExpbmtJ
bmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQot
ICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsK
KworICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOworICAgIGlmIChvcGNv
ZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgaW5mbyA9IG1fdW5saW5rZWRDYWxscy5h
ZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlE
KTsKKworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOworCisgICAgICAgIEFTU0VSVChtX2Nh
bGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOworICAg
ICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnVubGlua2VkQ2Fs
bExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFudDsKKyAgICB9Cisg
ICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7CiAKICAgICAvLyBT
UCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJn
dW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBtX2NvZGVC
bG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7Ci0gICAgdWludDMyX3QgbG9jYXRpb25C
aXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7CisgICAgdWludDMyX3Qg
bG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBZGRyZXNzKGNhbGxGcmFtZVJl
Z2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQpKTsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNhbGxlZS4K
QEAgLTIzNCwxNiArMjUyLDEyIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3Ry
dWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJ
bmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9y
KG9wY29kZUlEKSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2Fs
bENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAgICBpZiAoY29tcGlsZVRhaWxDYWxs
KGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCisgICAgaWYgKGNvbXBpbGVUYWls
Q2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgsIGluZm9Db25zdGFudCkpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIGxvYWRDb25zdGFudChpbmZvQ29uc3RhbnQsIHJlZ1QyKTsK
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhz
ID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAgICAgYXV0byBzbG93UGF0aHMgPSBD
YWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVn
VDIsIFsmXSB7CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAg
ICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKICAgICAgICAgfSk7CkBAIC0yNTMs
MTQgKzI2NywxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRG
YXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVz
KTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsK
ICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIHJlc2V0U1AoKTsKIAog
ICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KQEAgLTI3MywyMSArMjg2LDIwIEBA
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7
CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlzLCByZWdU
Mik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxD
YWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CisgICAgcmVzZXRTUCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7
CkBAIC0zOTUsMTcgKzQwNywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNv
bnN0IEluCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFt
ZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNv
bnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQpAQCAt
NDE2LDEwICs0NDIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25z
CiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAg
ICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsKICAgICBu
b3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBAIC00MzIs
MTkgKzQ1NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAg
ICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJh
d0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRlcmF0b3JH
UFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBhdXRvIGRv
bmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVz
dWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9
CkBAIC00NTIsNyArNDc0LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKICAgICAg
ICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5hcnJvdzog
cmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0OTEsNzkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1bXAgZmFz
dENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7
CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0ZUFkZHJl
c3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAgbG9hZDhG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJ
dGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5N
b2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhf
dD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9NZXRhZGF0
YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVy
YXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rl
cygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAg
IC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAg
ICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJl
Z1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3
aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2
YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENs
b2JiZXJSZWdpc3RlcjsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQ
Uik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVy
blZhbHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRS
ZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVz
dWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgp
KSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdU
MywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwo
KSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9H
UFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdl
IG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsK
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIp
OwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAgICAgewot
ICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
ID0gcmVnVDM7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9uZUdQUiwgaXRl
ckNhbGxSZXN1bHRHUFIpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRj
aEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2Ny
YXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BS
UmVnIGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAg
ICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gZmFs
c2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgp
LCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICAg
ICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVS
ZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsKKworICAgICAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGJhc2VHUFIpOwog
CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5
TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWVHUFIpLCByZWdUNCwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAg
IHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25z
ZXJ2YXRpdmVseSByZXNldCBTUAorICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRHUFIpOwog
CiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01MjcsNTkgKzU3
Nyw1NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQo
anVtcCgpKTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisKICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgIHsKICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAgICAgICBH
UFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2JqZWN0LmFw
cGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3Qu
YXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCiAgICAgICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCk7
CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CiAgICAgICAgIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1
bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVy
Q2FsbFJlc3VsdEdQUikpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0g
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpu
b25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAg
ICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLQotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCByZWdUMSk7Ci0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOworICAgICAgICBt
b3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVj
b2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBkb25lR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVj
dC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0
b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwg
YXJndW1lbnRHUFIwKTsKICAgICB9CiAKICAgICB7ICAgCiAgICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5t
X3ZhbHVlOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCiAgICAgICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1w
bCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
Ci0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgdmFs
dWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgICAgICBtb3ZlKGl0ZXJDYWxs
UmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgdmFsdWVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5y
YXdCaXRzKCkpOworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiwxMSBA
QAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVy
U2V0LmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwor
CiBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIENvbW1vbkRhdGE7CiBjbGFzcyBKSVRDb2RlOwpAQCAt
MTU5LDEwICsxNjIsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJ
VFR5cGUgaml0VHlwZSkKICAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2Vs
aW5lQ29kZShqaXRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
IU9wdGlvbnM6OnVzZURhdGFJQygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICByZXR1cm4gT3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkBA
IC0yMjMsNiArMjI2LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hhcmVBdHRyaWJ1dGUgPT0gU2hhcmVBdHRyaWJ1dGU6OlNoYXJlZDsgfQogCisg
ICAgdmlydHVhbCBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSB7IHJldHVy
biBudWxscHRyOyB9CisKIHByaXZhdGU6CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAgICAgU2hh
cmVBdHRyaWJ1dGUgbV9zaGFyZUF0dHJpYnV0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNyArMzgsNyBAQCB2b2lkIEpJVENvbXBpbGF0aW9uS2V5OjpkdW1wKFByaW50
U3RyZWFtCiAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIG91dC5wcmludCgiKENvbXBpbGUgb2YgIiwgKm1fcHJvZmlsZWRCbG9jaywgIiB3
aXRoICIsIG1fbW9kZSwgIikiKTsKKyAgICBvdXQucHJpbnQoIihDb21waWxlIG9mICIsIFJhd1Bv
aW50ZXIobV9jb2RlQmxvY2spLCAiIHdpdGggIiwgbV9tb2RlLCAiKSIpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRp
b25LZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBp
bGF0aW9uS2V5LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29tcGlsYXRpb25LZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNTcgKzMwLDU2IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBDb2RlQmxvY2tT
ZXQ7CitjbGFzcyBKU0NlbGw7CiAKIGNsYXNzIEpJVENvbXBpbGF0aW9uS2V5IHsKIHB1YmxpYzoK
ICAgICBKSVRDb21waWxhdGlvbktleSgpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxw
dHIpCisgICAgICAgIDogbV9jb2RlQmxvY2sobnVsbHB0cikKICAgICAgICAgLCBtX21vZGUoSklU
Q29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb24pCiAgICAgewogICAgIH0KICAgICAK
ICAgICBKSVRDb21waWxhdGlvbktleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0g
ICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIpCisgICAgICAgIDogbV9jb2RlQmxvY2so
bnVsbHB0cikKICAgICAgICAgLCBtX21vZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpERkcpCiAgICAg
ewogICAgIH0KICAgICAKLSAgICBKSVRDb21waWxhdGlvbktleShDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9j
ayhwcm9maWxlZEJsb2NrKQorICAgIEpJVENvbXBpbGF0aW9uS2V5KEpTQ2VsbCogcHJvZmlsZWRC
bG9jaywgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUpCisgICAgICAgIDogbV9jb2RlQmxvY2socHJv
ZmlsZWRCbG9jaykKICAgICAgICAgLCBtX21vZGUobW9kZSkKICAgICB7CiAgICAgfQogICAgIAog
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9wcm9m
aWxlZEJsb2NrICYmIG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxh
dGlvbjsKKyAgICAgICAgcmV0dXJuICFtX2NvZGVCbG9jayAmJiBtX21vZGUgPT0gSklUQ29tcGls
YXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3By
b2ZpbGVkQmxvY2sgJiYgbV9tb2RlICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBp
bGF0aW9uOworICAgICAgICByZXR1cm4gIW1fY29kZUJsb2NrICYmIG1fbW9kZSAhPSBKSVRDb21w
aWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKICAgICB9CiAgICAgCi0gICAgQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9wcm9maWxlZEJsb2NrOyB9CiAg
ICAgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAg
ICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSklUQ29tcGlsYXRpb25LZXkmIG90aGVyKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJvZmlsZWRCbG9jayA9PSBvdGhlci5tX3By
b2ZpbGVkQmxvY2sKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrID09IG90aGVyLm1fY29kZUJs
b2NrCiAgICAgICAgICAgICAmJiBtX21vZGUgPT0gb3RoZXIubV9tb2RlOwogICAgIH0KICAgICAK
ICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnBh
aXJJbnRIYXNoKFdURjo6UHRySGFzaDxDb2RlQmxvY2sqPjo6aGFzaChtX3Byb2ZpbGVkQmxvY2sp
LCBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxKSVRDb21waWxhdGlvbk1vZGU+Ojp0
eXBlPihtX21vZGUpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goV1RGOjpQdHJI
YXNoPEpTQ2VsbCo+OjpoYXNoKG1fY29kZUJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5
aW5nX3R5cGU8SklUQ29tcGlsYXRpb25Nb2RlPjo6dHlwZT4obV9tb2RlKSk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIENv
ZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOworICAgIC8vIEVpdGhlciBDb2RlQmxvY2sqIG9yIFVu
bGlua2VkQ29kZUJsb2NrKiBmb3IgYmFzbGVsaW5lIEpJVC4KKyAgICBKU0NlbGwqIG1fY29kZUJs
b2NrOwogICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtX21vZGU7CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00
NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQog
ewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5m
byhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1
YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNv
ZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJ
bmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRS
ZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6
OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0
aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAg
IG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRp
b24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAg
dm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+
c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBz
dHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwo
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7Cisg
ICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGppdC5mYXJK
dW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIG1fZG9uZSA9
IGppdC5sYWJlbCgpOworfQorCiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKAog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAog
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBK
U1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTEwLDcgKzExOCw3IEBA
IEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxT
aXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAg
IENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUp
CiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwg
Y2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5m
b0dQUikKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVC
bG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAgICwgbV9pc0xlbmd0
aEFjY2Vzcyhjb2RlQmxvY2sgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9jay0+dm0o
KS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJh
c2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAgLTEyMCw2ICsxMjgsMzcg
QEAgdm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIGdlbmVyYXRl
RmFzdENvbW1vbihqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNpemVGb3JM
ZW5ndGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwog
fQogCisKKyNpZiBVU0UoSlNWQUxVRTY0KQorc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkSW5s
aW5lQWNjZXNzKEpJVCYgaml0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBiYXNlLCBHUFJS
ZWcgc2NyYXRjaCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVB
Y2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJ
ZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHJvcGVydHkoYmFzZSwgc2Ny
YXRjaCwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5q
dW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmZhckp1
bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hl
ZC5saW5rKCZqaXQpOworfQorCit2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBz
dHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9q
aXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENv
bnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5l
QWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZSwg
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRpZgorCiBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcigK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIHZhbHVlLCBK
U1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BS
KQpAQCAtMTM4LDYgKzE3NywyMCBAQCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6
Z2VuZXJhCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9y
UHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBKSVRHZXRC
eUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQm
IGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0
ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5m
b0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIs
IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRpZgorCiBK
SVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hl
YWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUs
IEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIApAQCAtMTQ5LDYgKzIwMiwzNiBA
QCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yCiAgICAgbV9zdHViSW5m
by0+dXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNoKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQp
Cit2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBt
X3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBz
dHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6
c2NyYXRjaDsKKyAgICBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OnNjcmF0Y2gyOworICAgIEdQUlJlZyB2YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6
dmFsdWU7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9h
ZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIo
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0
Y2gpOworICAgIGppdC5zdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgYmFzZSwg
c2NyYXRjaCwgc2NyYXRjaDIpOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisg
ICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29k
ZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0
KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRpZgorCiB2b2lkIEpJVFB1dEJ5
SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKIHsKICAg
ICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eVJl
cGxhY2UoKSk7CkBAIC0yMDAsNyArMjgzLDcgQEAgdm9pZCBKSVREZWxCeVZhbEdlbmVyYXRvcjo6
Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsK
LSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNv
ZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9z
bG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJl
bCgpOwpAQCAtMjM2LDcgKzMxOSw3IEBAIHZvaWQgSklURGVsQnlJZEdlbmVyYXRvcjo6Z2VuZXJh
dGVGYXN0UGEKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAg
ICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGlu
ZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRy
KCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1Bh
dGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsK
QEAgLTI3MCw3ICszNTMsNyBAQCB2b2lkIEpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBq
aXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJU
YWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwg
SklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVt
cCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0z
MDAsNiArMzgzLDM0IEBAIHZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXQK
ICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0
eUFjY2VzcygpKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCit2b2lkIEpJVEluQnlJZEdlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBz
dHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENv
ZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsK
KworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKworICAgIEdQ
UlJlZyBiYXNlID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHJl
c3VsdCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgR1BSUmVnIHNjcmF0
Y2ggPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGF1dG8g
c2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBz
Y3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5ib3hC
b29sZWFuKHRydWUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOworICAgIGF1dG8gZmluaXNoZWQg
PSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGpp
dC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAg
ZmluaXNoZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRp
ZgorCiBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpKSVRJbnN0YW5jZU9mR2VuZXJhdG9yKAogICAg
IENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBwcm90
b3R5cGUsIEdQUlJlZyBzdHViSW5mb0dQUiwKQEAgLTMzMiw3ICs0NDMsNyBAQCB2b2lkIEpJVElu
c3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgp
OwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8t
Pm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
bV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29k
ZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0g
ZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAg
bV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0zNjgsNyArNDc5LDcgQEAgdm9pZCBKSVRHZXRCeVZh
bEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0
dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1
YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIo
KSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UK
ICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9u
ZSA9IGppdC5sYWJlbCgpOwpAQCAtNDA1LDcgKzUxNiw3IEBAIHZvaWQgSklUUHV0QnlWYWxHZW5l
cmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5m
b0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZv
LT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBK
SVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6
QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBq
aXQubGFiZWwoKTsKQEAgLTQ0MCw3ICs1NTEsNyBAQCB2b2lkIEpJVFByaXZhdGVCcmFuZEFjY2Vz
c0dlbmVyYXRvcjo6Z2VuCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIp
OwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9z
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1
YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
Q29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBt
X3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0Lmxh
YmVsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgor
I2luY2x1ZGUgIkpJVE9wZXJhdGlvblZhbGlkYXRpb24uaCIKICNpbmNsdWRlICJKSVRPcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKQEAg
LTM4LDExICszOSwxMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlm
aWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsK
IGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVudW0gY2xhc3MgSklUVHlw
ZSA6IHVpbnQ4X3Q7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorc3RydWN0IEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86
OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1Qy
OworfTsKKworc3RydWN0IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUklu
Zm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86
OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6
cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJl
Z1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIC8vIFdl
IHJlbHkgb24gdGhpcyB3aGVuIGxpbmtpbmcgYSBDb2RlQmxvY2sgYW5kIGluaXRpYWxpemluZyBy
ZWdpc3RlcnMgZm9yIGEgR2V0QnlWYWwgU3R1YkluZm8uCisgICAgc3RhdGljX2Fzc2VydChiYXNl
ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0
YXRpY19hc3NlcnQocmVzdWx0ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7
CisgICAgc3RhdGljX2Fzc2VydChzdHViSW5mbyA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpzdHViSW5mbyk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQ
UkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BS
SW5mbzo6cmVnVDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBHUFJJ
bmZvOjpyZWdUNTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnMgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6YXJndW1lbnRHUFIyOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3RvID0gR1BSSW5mbzo6YXJndW1lbnRHUFIz
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6YXJndW1l
bnRHUFIxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6
bm9uQXJnR1BSMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUklu
Zm86Om5vbkFyZ0dQUjE7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0
aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAg
c3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpy
ZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVn
VDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgZG9udENsb2JiZXJSZWdpc3RlciA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0
IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
dGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5SWRSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2Ug
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnNjcmF0Y2g7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3RydWN0IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0g
R1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQ
UkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BS
SW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJl
Z1QyOworfTsKKyNlbmRpZgorCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90
ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDEyICsxNzIs
MTggQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZmZXImIGZh
c3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAogICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwotICAgIAor
CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQg
c3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIgfTsKKyAgICB1bnNp
Z25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBt
X3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbV9zbG93UGF0aEJlZ2luOwogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1Bh
dGhDYWxsOwpAQCAtOTgsNyArMjE0LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTVmFsdWVSZWdzIG1f
YmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIG1fc3RhcnQ7CitwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0
aEp1bXA7CiB9OwogCkBAIC0xMTEsNiArMjI3LDcgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NU
eXBlKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
KyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBz
dHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiBwcml2YXRlOgogICAgIGJv
b2wgbV9pc0xlbmd0aEFjY2VzczsKQEAgLTEyNCw2ICsyNDEsNyBAQCBwdWJsaWM6CiAgICAgICAg
IENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgICAgICBK
U1ZhbHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3Ms
IEdQUlJlZyBzdHViSW5mb0dQUik7CiAKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9H
UFIpOwogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogfTsKIApA
QCAtMTMyLDEwICsyNTAsMTEgQEAgcHVibGljOgogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSA9
IGRlZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAotICAgICAgICBDb2RlQmxvY2sq
LCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYg
dXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFzZSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0
Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29k
ZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IENhY2hlYWJsZUlkZW50aWZpZXIsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVS
ZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwg
UHV0S2luZCk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVy
Jik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWdu
ZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICAKICAgICBWX0pJ
VE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsKIApAQCAtMTYzLDExICsyODIs
OSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXIm
KTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3Mg
bV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTkxLDgg
KzMwOCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2Vt
YmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0Owog
ICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApA
QCAtMjE2LDggKzMzMSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChN
YWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1w
OwogfTsKIApAQCAtMjQxLDggKzM1NCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVG
YXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xv
d1BhdGhKdW1wOwogfTsKIApAQCAtMjU1LDYgKzM2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNW
YWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAK
ICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0
YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogfTsKIAogY2xhc3MgSklUSW5zdGFuY2VPZkdlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CkBAIC0yNzcsOCAr
Mzg5LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0
aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CiAKLXByaXZhdGU6
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMDIsMTEgKzQxMiw5IEBA
IHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXIm
KTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3Mg
bV9yZXN1bHQ7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMzMCw4
ICs0MzgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3Jv
QXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3Rh
cnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDEzICszNSwzOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNy
YykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1Rp
bWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpp
c09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3Jj
LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2Vk
Q29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Cit9CisK
K0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciBzcmMp
Cit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KSB7
CisgICAgICAgIC8vIEFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVy
YW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkp
OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7
CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAK
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdp
c3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiArMTgxLDM2IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRpZgogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3Qg
Qnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1
bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
ICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3Mo
cmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVH
UFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNz
IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRk
cmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1
cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFs
dWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUo
ZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogfQogCiBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChy
ZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBA
QCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBK
SVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJp
bmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBz
ZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUlu
ZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2st
Pmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAg
bV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCks
IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0g
bV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1
LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkK
IHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBz
byB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2st
Pmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAg
QVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4
KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkg
KyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNv
ZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwyOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0
YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFu
dCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworICAgIGlmICgh
c3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYm
IGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0g
MTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZh
bHVlKQogewogICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwogCi0gICAgLy8gV2Un
cmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4g
anVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
c3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQogICAg
IEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwogICAgIHN0b3JlMzIo
dmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwogICAgIHN0
b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgog
fQorI2VuZGlmCiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQ
cm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmls
ZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsNDEgKzM0OCwzNyBAQCBp
bmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKyNpZiBVU0Uo
SlNWQUxVRTY0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVl
UmVncyB2YWx1ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFk
YXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOwotfQogCi0jaWYgVVNF
KEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7Cisg
ICAgcHRyZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRl
Y29kZT4obV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNl
dE9mRmlyc3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0
YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEs
IEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CiB9CiAjZW5kaWYKIAotaW5saW5lIHZv
aWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BS
LCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQordGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZmX3Qgb2Zm
c2V0T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNo
R1BSKQogewogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgbG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIGFycmF5UHJv
ZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRv
TWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKICAg
ICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVy
SUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lk
IEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCiB7Ci0gICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhcnJheVByb2ZpbGVH
UFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpKTsKLSAgICB9
CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRlY29kZTo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9m
TGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3JhdGNoR1BSKTsKIH0KIAogQUxXQVlT
X0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCkBAIC0zODAsNyArNDAxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdElu
aXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkp
IHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBv
b2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcihy
ZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTE3LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3Rv
cmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlz
S25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwog
ICAgICAgICBlbHNlCkBAIC01MDYsNyArNTI3LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVt
cFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAo
IW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChy
ZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0LDExICs1MzUsNiBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAgICAgfQogfQogCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQot
ewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxS
ZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU2MCwxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRo
aXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5l
cmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKICAgICBpZiAoc3JjLmlz
Q29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwotICAgICAg
ICBlbHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50T3duZWRC
eVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAgbW92ZShJ
bW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3QpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC01NjYsMTEgKzU4Miw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwog
fQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFs
UmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZy
b20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNTk1LDcgKzYw
Niw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKIAogQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQg
cmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tu
b3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHZSZWcpKQogICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAtNjM3LDMwICs2NDgsNyBAQCBB
TFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7CiAgICAgaWYgKHRhcmdl
dCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPm91dE9m
TGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1BTFdBWVNfSU5MSU5FIEdldFB1dElu
Zm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSBieXRlY29kZSkKLXsKLSAgICB1
bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQgKyAxOyAvLyBIYXNoTWFwIGRvZXNu
J3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkR2V0UHV0SW5m
b3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdldFB1dEluZm9zLmVu
ZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFsdWUpOwotICAgIEdl
dFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2dl
dFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBnZXRQdXRJbmZvLm9w
ZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0aFByb2ZpbGUgSklUOjpjb3BpZWRB
cml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0gICAgdWludDY0X3Qga2V5ID0gKHN0
YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpICsgMSkgPDwgMzIgfCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0YUlEKTsKLSAgICBhdXRvIGl0ZXJh
dG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3Ig
IT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlcmF0b3It
PnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgbV9jb3BpZWRBcml0aFBy
b2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJuIGFyaXRoUHJvZmlsZTsK
KyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0
cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjgxLDYgKzY2OSw2MCBA
QCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0dXJuIEVD
TUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYg
Ynl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQz
MkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQ
UlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxp
bmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUp
ICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQ4KEFk
ZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZz
ZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSB2YWx1ZSwgY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlOCh2YWx1ZSwgQWRk
cmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNl
dEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmUzMlRvTWV0YWRh
dGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQp
Cit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBv
ZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHNfbWV0YWRhdGFHUFIsIHJlc3VsdCk7Cit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvbnN0YW50SW5k
ZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRHbG9i
YWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9nbG9iYWxPYmpl
Y3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENv
ZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BSUmVnIHJlc3VsdCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOworICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JC
dWZmZXIoKSksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgY29uc3RhbnQu
dG9Db25zdGFudEluZGV4KCkgKiBzaXplb2Yodm9pZCopKSwgcmVzdWx0KTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0
cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRh
ZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZv
ck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25T
aXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CkBAIC0xMTAsNyArMTEw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSQogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOwpAQCAtMTI3LDcgKzEy
Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0
TG9hZFBheWxvYWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogICAgIC8vIFdlIGRvbid0IGp1
bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KICAgICBKdW1w
IGhhc0luc3RhbmNlVmFsdWVOb3RDZWxsID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChoYXNJbnN0YW5j
ZVZhbHVlKTsKLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3Vz
dG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0lu
c3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCiAgICAgLy8gV2Uga25vdyB0aGF0IGNvbnN0cnVj
dG9yIGlzIGFuIG9iamVjdCBmcm9tIHRoZSB3YXkgYnl0ZWNvZGUgaXMgZW1pdHRlZCBmb3IgaW5z
dGFuY2VvZiBleHByZXNzaW9ucy4KICAgICBlbWl0TG9hZFBheWxvYWQoY29uc3RydWN0b3IsIHJl
Z1QwKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNv
bnN0IEluc3RyCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvKTsKICAgICAK
ICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAogICAgICAgICByZWdUMiwgLy8g
dmFsdWUKQEAgLTE5Niw3ICsxOTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgZW1pdExv
YWRUYWcodmFsdWUsIHJlZ1QwKTsKICAgICBlbWl0TG9hZFRhZyhwcm90bywgcmVnVDMpOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCBk
c3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVS
ZWdzKHJlZ1QwLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMSkpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCBkc3QsIG1f
cHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhyZWdUMCwgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDEpKTsKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC0yMTMsNyArMjEz
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIGVtaXRM
b2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChjb25zdHJ1Y3Rv
ciwgcmVnVDIpOwogICAgIGVtaXRMb2FkKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1Q0LCByZWdUMyk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBKU1Zh
bHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3Rh
bmNlT2ZDdXN0b20sIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKICAgICBl
bWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogICAgIApAQCAtMjQ4LDcgKzI0
OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICAKICAg
ICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVn
VDApOwogCkBAIC0zNzgsNyArMzc4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9u
X25hbWUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lID0gYnl0ZWNvZGUubV9uYW1lOwog
ICAgIGVtaXRMb2FkUGF5bG9hZChmdW5jLCByZWdUMSk7CiAgICAgZW1pdExvYWQobmFtZSwgcmVn
VDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIG1fcHJv
ZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC00MDgsNyArNDA4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZh
bHNlKGNvbnN0IEluc3RydWN0aQogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAgIEdQ
UlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIHZhbHVl
LCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsK
KyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC00MjIsNyArNDIyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIEpTVmFsdWVSZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7CiAgICAgR1BSUmVnIHNjcmF0
Y2gxID0gcmVnVDI7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7Ci0gICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgp
LCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM3LDcgKzQzNyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWws
IEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCks
IHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1
bXAoKTsKIApAQCAtNDYzLDcgKzQ2Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChj
b25zdCBJbnN0cnUKIAogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRk
SnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7CiAKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVu
ZGVmaW5lZF9vcl9udWxsKGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0
YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKICAgICBBU1NFUlQoc3BlY2lh
bFBvaW50ZXIuaXNDZWxsKCkpOwpAQCAtNTUyLDEzICs1NTIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJ
Zk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
bmdFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKICAg
ICBzdG9yZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAg
ICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAg
Z2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9y
ZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CkBAIC01OTEsMTQgKzU5MSwxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyhW
ZWN0b3I8U2xvCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1Qy
KSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVk
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBpbGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDog
WmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFyZ2V0KTsKICAgICBkb25lLmFwcGVuZChqdW1w
KCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRT
bG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVk
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
dHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVl
R1BSKSwganVtcFRhcmdldCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CkBAIC02NDMsMTMgKzY0
MywxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgZ2Vu
ZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QyKSk7CiAKICAgICAvLyBTdHJp
bmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVj
dCgpLCByZWdUMCwgcmVnVDIpOwogICAgIHN0b3JlUmVzdWx0LmFwcGVuZChqdW1wKCkpOwogCiAg
ICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShp
dGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpKTsKIAogICAgIHN0b3JlUmVzdWx0LmxpbmsodGhpcyk7CiAgICAgeG9yMzIoVHJ1
c3RlZEltbTMyKDB4MSksIHJldHVyblZhbHVlR1BSKTsKQEAgLTc2Miw3ICs3NjIsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKQEAgLTc3Miw3ICs3NzIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShj
b25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
c3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX3Byb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03OTEsNyArNzkxLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAg
ICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKICAgICBKdW1wIHdhc05v
dEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTgyMyw3ICs4MjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21w
YXJlMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwogICAgIEp1bXAgd2FzTm90SW1t
ZWRpYXRlID0ganVtcCgpOwpAQCAtODQ2LDcgKzg0Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Ro
cm93KGNvbnN0IEluc3RydWN0aW8KICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIp
OwogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCku
dG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdExvYWQoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDEsIHJl
Z1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
KyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgbV9wcm9m
aWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAg
ICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKIH0KIApAQCAtODYyLDcgKzg2Miw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnKSkpOwogICAgIGlzSW50MzIubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGlmIChz
cmMgIT0gZHN0KQogICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQpAQCAt
ODg0LDcgKzg4NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihhcmd1bWVudFZhbHVlUmVncywgcmVn
VDIpKTsKICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZEJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAgaWYgKHNyYyAh
PSBkc3QpCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CkBAIC05MTUs
NyArOTE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydQogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
QmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkK
ICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTkzMSw3ICs5MzEs
MTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNz
KHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKworICAgIC8vIFdoZW4gdGhlIExMSW50IHRocm93cyBhbiBleGNlcHRpb24s
IHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFkeSB0aWVyZWQgdXAKKyAgICAvLyB0
aGUgc2FtZSBDb2RlQmxvY2sgdG8gYmFzZWxpbmUsIGFuZCB3ZSdsbCBjYXRjaCB0aGUgZXhjZXB0
aW9uIGluIHRoZSBiYXNlbGluZSBKSVQgKGJlY2F1c2UKKyAgICAvLyB3ZSB1cGRhdGVkIHRoZSBl
eGNlcHRpb24gaGFuZGxlcnMgdG8gcG9pbnQgaGVyZSkuIEJlY2F1c2UgdGhlIExMSW50IHVzZXMg
YSBkaWZmZXJlbnQgdmFsdWUKKyAgICAvLyBpbnNpZGUgc19jb25zdGFudHNHUFIsIHRoZSBjYWxs
ZWUgc2F2ZXMgd2UgcmVzdG9yZSBhYm92ZSBtYXkgbm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgcmVn
aXN0ZXIuCisgICAgLy8gU28gd2UgcmVwbGVuaXNoIGl0IGhlcmUuCisgICAgeworICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkp
LCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVRE
YXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworICAgIH0K
IAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5k
Q2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVF
eGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTU0
LDcgKzk2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAg
ICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwg
ZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5
OAogCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2sp
OwogICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0
YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygp
KQogICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JF
bnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtOTk2LDgg
KzEwMDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAg
Ly8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMg
c3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBU
YWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
c3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0
Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0
Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVu
bGlua2VkVGFibGUpOwogCkBAIC0xMDIzLDEzICsxMDM0LDEzIEBAIHZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0g
Ynl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dp
dGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0
IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9wcm9m
aWxlZEJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1w
bGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVj
b2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAg
bGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKICAgICBlbWl0TG9h
ZChzY3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
d2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9t
aW4pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5
VHlwZSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CiAgICAgZmFySnVtcChy
ZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogfQogCkBAIC0xMDQxLDEzICsxMDUyLDEzIEBAIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVt
cCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVt
ZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV9wcm9maWxlZEJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJ
VGFibGUodW5saW5rZWRUYWJsZSk7CiAKICAgICBlbWl0TG9hZChzY3J1dGluZWUsIHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93
bktleVR5cGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgdGFibGVJbmRleCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hT
dHJpbmdXaXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgpOwogICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIApAQCAtMTA2OCw3ICsxMDc5LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIEV2ZW4gdGhvdWdoIEpJ
VCBjb2RlIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAg
Ly8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3Nhcmls
eSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHBy
ZXNzdXJlLgotICAgIGZvciAoaW50IGkgPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaSA8IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7
ICsraSkKKyAgICBmb3IgKGludCBpID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkgPCBtX3Byb2ZpbGVkQmxvY2stPm51bVZhcnMo
KTsgKytpKQogICAgICAgICBlbWl0U3RvcmUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnRlcik7CkBAIC0xMDg3LDcgKzEwOTgsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1p
dF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhp
cz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwogICAg
IFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9j
YWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKQEAgLTExMjIs
NyArMTEzMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKIHZv
aWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRv
VGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRC
bG9jayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1f
Y2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlciA9IGJ5
dGVjb2RlLm1fc3JjRHN0OwogCkBAIC0xMTQ1LDcgKzExNTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jaGVja190ZHooY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBUeXBlTG9j
YXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVh
bFJlZ2lzdGVyOwogCkBAIC0xMjM5LDcgKzEyNTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2df
c2hhZG93X2NoaWNrZW5fdGFpCiAgICAgZW1pdExvYWRUYWcoYnl0ZWNvZGUubV90aGlzVmFsdWUs
IHJlZ1QxKTsKICAgICBKU1ZhbHVlUmVncyB0aGlzUmVncyhyZWdUMSwgcmVnVDIpOwogICAgIGVt
aXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgcmVnVDMsIG1fY29kZUJs
b2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvZ1NoYWRvd0NoaWNr
ZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHJlZ1QzLCBtX3Byb2ZpbGVk
QmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMSArNTQsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX3NyYzsKIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1
ZS5pc051bWJlcigpKQotICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAg
aWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxv
Y2soc3JjKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6
OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDApOworICAgICAgICAgICAg
c3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICs5MCwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAg
IHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFs
bG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFs
bG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAg
ICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9y
UmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgUmVn
aXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKIAotICAgIGlmICghYWxsb2NhdG9yKQotICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVsc2UgewotICAgICAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRy
KTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6
OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRJbml0
aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
OwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6
TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpLCBhbGxvY2F0b3JSZWcpOworICAgIGxv
YWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0
T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9m
ZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJlZyk7CisKKyAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgIGVt
aXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBh
bGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2Fz
ZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNh
cGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0
b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKKyAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisg
ICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKKwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFk
YXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJl
KTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3Qs
ICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiB9CiAKQEAgLTEzMSw3ICsxMzIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlk
ZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZh
bHVlLCByZWdUMCk7CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1i
b2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVl
ID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3Rh
bmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3lt
Ym9sRnVuY3Rpb24pKSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9y
LCByZWdUMCk7CiAKQEAgLTE1NCwzMCArMTU2LDM4IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBl
OwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUg
cmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJh
c2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0
aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9HUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9HUFIpOwogICAgIAogICAgIC8vIENoZWNrIHRo
YXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVj
a2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJv
dG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICBy
ZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1Q1LAot
ICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHJlc3VsdEdQUiwKKyAgICAgICAgdmFs
dWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAgICAgICBzdHViSW5mb0dQUiwKKyAgICAgICAg
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMSwgQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCisKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCArMjAyLDEzIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRy
ZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGlt
aXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGlj
X2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlID09IGFyZ3VtZW50R1BS
Mik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3Rv
ID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNl
T2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMjQwLDcgKzI0OSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KIAogICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwog
CkBAIC0zODMsOSArMzkyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0
aW9uKgogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZt
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5k
bGVyR2VuZXJhdG9yKFZNJikKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgaml0LmVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAgLTQxMSw3ICs0MjAsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAKICAgICBpZiAoZHN0ICE9IHNyYykKICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNDM0LDkgKzQ0MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXko
Y29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZnVuY3Rpb24sIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX25hbWUsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1l
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC00NjUsOCArNDc0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVj
dGkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0
ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAg
YWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQ
UiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1
Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAg
IGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTQ4MCw3
ICs0OTEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpA
QCAtNTE5LDcgKzUzMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3Ry
dWMKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0
cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3Jl
aWduID0ganVtcCgpOwogCkBAIC01NDMsNyArNTU0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5l
cV9udWxsKGNvbnN0IEluc3RydQogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0g
Y2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBh
ZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFy
Z2V0KTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwog
CkBAIC01ODIsMTUgKzU5MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9u
dWxsKGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5
dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0Nl
bGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNo
UHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkp
OwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7Cisg
ICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1Qx
KTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1Qw
LCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVjb2Rl
LCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwogfQpAQCAtNjI1LDggKzYz
NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBy
ZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJh
bmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1Zh
bHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQp
OwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc1Ry
dXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDAsNyArNjUxLDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJl
Z1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTY5NSw3ICs3
MDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMSwgcmVn
VDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxzZQogICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CkBAIC03MTEsNyAr
NzIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhy
b3duVmFsdWVHUFIgPSBhcmd1bWVudEdQUjE7CkBAIC03MjAsNyArNzMyLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogCiAjaWYgTlVNQkVSX09GX0NBTExFRV9T
QVZFU19SRUdJU1RFUlMgPiAwCiAgICAgaml0LmxvYWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIGFy
Z3VtZW50R1BSMCk7Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVySW1wbChhcmd1bWVudEdQUjApOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihhcmd1bWVudEdQUjApOwogI2VuZGlmCiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKQEAgLTkwOCw3
ICs5MjAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKIH0KIApAQCAtOTE4LDcgKzkzMSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9q
bnN0cmljdGVxKGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVn
VDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTMxLDcgKzk0NSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKICAgICAKICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0
VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk1
MSw3ICs5NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RyCiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKICAgICBpc0JpZ0ludC5s
aW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk3OCw3ICs5OTIsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVn
VDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05OTMsNyArMTAwNywxOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMs
IFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxs
RnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisg
ICAgLy8gV2hlbiB0aGUgTExJbnQgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlcmUgaXMgYSBjaGFu
Y2UgdGhhdCB3ZSd2ZSBhbHJlYWR5IHRpZXJlZCB1cAorICAgIC8vIHRoZSBzYW1lIENvZGVCbG9j
ayB0byBiYXNlbGluZSwgYW5kIHdlJ2xsIGNhdGNoIHRoZSBleGNlcHRpb24gaW4gdGhlIGJhc2Vs
aW5lIEpJVCAoYmVjYXVzZQorICAgIC8vIHdlIHVwZGF0ZWQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVy
cyB0byBwb2ludCBoZXJlKS4gQmVjYXVzZSB0aGUgTExJbnQgdXNlcyBhIGRpZmZlcmVudCB2YWx1
ZQorICAgIC8vIGluc2lkZSBzX2NvbnN0YW50c0dQUiwgdGhlIGNhbGxlZSBzYXZlcyB3ZSByZXN0
b3JlIGFib3ZlIG1heSBub3QgY29udGFpbiB0aGUgY29ycmVjdCByZWdpc3Rlci4KKyAgICAvLyBT
byB3ZSByZXBsZW5pc2ggaXQgaGVyZS4KKyAgICB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJlZ1QwKTsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklU
Q29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7CisgICAgfQogCiAgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklm
Q2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMDExLDIzICsxMDM2LDExIEBA
IHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVu
dCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZl
cjsKLSAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwg
JnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRW
YWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZh
bHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBz
a2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhj
ZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAg
aWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5m
b3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSwg
cmVncyk7Ci0gICAgICAgIH0pOwotICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0K
IApAQCAtMTA1Myw4ICsxMDY2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25z
dCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0
aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25z
LCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dp
dGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRl
ZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUu
ZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwODEsMTMgKzEwOTQsMTQgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBq
dW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0
ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hK
dW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29y
ZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29y
ZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRU
YWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJ
bmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5
VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFi
bGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsK
IH0KIApAQCAtMTA5OSwyMCArMTExMywyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3Ry
aW5nKGNvbnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1f
c2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5h
dGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRh
YmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpT
dHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIHRhYmxlSW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dp
dGNoUHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERlYnVnPigpOwotICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdn
ZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAs
IENvZGVCbG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkpLCByZWdUMCk7CiAgICAgSnVt
cCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVj
b2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMp
OwpAQCAtMTEzMyw3ICsxMTQ5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJ
bnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihFcXVh
bCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CkBAIC0xMTQ4LDcgKzExNjQsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0
IEluc3RydWN0CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTE2Niw3ICsxMTgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1
YwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CkBAIC0xMTg4LDEyICsxMjAzLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IElu
c3RydWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5p
dGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50
ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlm
ZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgc2l6ZV90IGNvdW50ID0gbV9j
b2RlQmxvY2stPm51bVZhcnMoKTsKKyAgICBzaXplX3QgY291bnQgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5udW1WYXJzKCk7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGZvciAo
c2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCiAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIo
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihtX2Nv
ZGVCbG9jayk7CisgICAgCisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwKTsKIAogICAgIGVt
aXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAjZWxzZQpAQCAtMTIxMiw3ICsxMjI5LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4
NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTEzMTAsMjMgKzEzMjcsMTkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZUlEKiBjYWNo
ZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1
Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BUb1Ro
aXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1QyKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRl
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwotICAgIFdyaXRlQmFycmll
ckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7
CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVE
YXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKQEAgLTEz
NDIsNyArMTM1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNl
dE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0
aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFn
KSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0
aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVu
Y3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKIAotICAgIGxvYWRQdHIoY2FjaGVk
RnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcENyZWF0ZVRoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZENhbGxlZSgpLCBj
YWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJh
bmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNl
ZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihO
b3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0
aXBsZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM4NSw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdU
MiwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVl
UmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIsNyArMTM5Niw4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSks
IHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJl
dHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyArMTQwOSw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAs
IHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzE0MjAsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Qy
LCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0MzUsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdp
c3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwogfQpAQCAtMTQzMCw3ICsxNDQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpy
ZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5s
b29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygp
ICYmIG1fdW5saW5rZWRDb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vh
cmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0oKS5nZXRMb29wSGlu
dEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkUHRyKHB0ciwgcmVn
VDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaFB0cihCZWxvdywgcmVn
VDAsIFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xp
bWl0KCkpKTsKQEAgLTE0NDAsNyArMTQ1OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGlu
dChjb25zdCBJbnN0cnUKICNlbHNlCiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYK
LSAgICAgICAgbW92ZVZhbHVlKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVzdWx0UmVn
cyk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVzdWx0UmVncy5ncHIoKSk7CiAgICAgICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTE0NTMsOCArMTQ3
MSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKIAogICAgIC8v
IEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAogICAgIGlmIChjYW5CZU9wdGltaXpl
ZCgpKSB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZlT3Ja
ZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxv
b3AoKSksCi0gICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NP
ZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAgICAgICBBZGRyZXNzKHJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9CiB9CiAKQEAgLTE1
MDksNyArMTUyOCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFy
Z3VtZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTIyLDcgKzE1NDIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfY2hlY2tfdHJhcHNf
aGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJz
OjplYnApOwpAQCAtMTU2NCwzNCArMTU4NCwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVn
ZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRHUFIwOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVC
bG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRO
ZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2Rl
Lm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
YXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMg
PSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAg
ICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50
LCBhcmd1bWVudEdQUjIpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7
CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3
X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3
X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApA
QCAtMTYyMSwyMyArMTY0MywyNCBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNv
bnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVu
dEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEp
OwogI2VuZGlmCiAKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxv
Y2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25z
dGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9u
RXhwciwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2Rl
Lm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRH
UFIyKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJh
dG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Fz
eW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3Bf
bmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0
aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQog
fQogCkBAIC0xNjY0LDI5ICsxNjg3LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19n
ZW5lcmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1f
YXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNp
emUpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMik7CisgICAgbWF0
ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0
YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBzaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dp
dGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRh
Lm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMik7CiAjZWxzZQorICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9j
YXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKICAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJv
ZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0g
ICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJl
Z1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQogCkBAIC0xNjk0LDgg
KzE3MTgsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKKyAgICBtX2lzU2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAg
VHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlv
bjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3Rhcmdl
dFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTc3NywyMCArMTgwMywyNSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIw
ICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMg
aWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tl
dFJlZyA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRo
aXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJS
ZWcgPSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1Bh
Y2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVu
dCByZWdpc3Rlci4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAg
IGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNo
MVJlZywgc2NyYXRjaDJSZWcpOworICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
c2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVn
VDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0Uo
SlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIG1faXNTaGFyZWFibGUg
PSBmYWxzZTsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Js
b2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsK
QEAgLTE4NjAsNyArMTg5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25z
dCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxOTE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODMw
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAj
aW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNv
bW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRl
ICJERkdPU1JFbnRyeS5oIgpAQCAtMjg1NSw3ICsyODU2LDcgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRh
YmxlLm1fY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwogCkBAIC0yODgwLDcgKzI4ODEs
NyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1
ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJh
c2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2st
PnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAg
dm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJbnQzMigpKQpAQCAtMjkwMyw3ICsyOTA0LDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdm9pZCogcmVzdWx0Owot
ICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJ
bXBsKiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZhbHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpA
QCAtMjkxOSw3ICsyOTIwLDYgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3
aXRjaAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCi0j
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0yOTcxLDcgKzI5NzEsNiBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc29sdmVkU2NvcGUpOwogfQotI2VuZGlmCiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkKIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjkwLDkgKzI5MCw3IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0
UHIKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtu
b3duS2V5VHlwZSwgY2hhciosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGtleSwg
c2l6ZV90IHRhYmxlSW5kZXgsIGludDMyX3QgbWluKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgY2hhciosIChWTSosIEVu
Y29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgsIGludDMyX3QgbWluKSk7CiBKU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5
VHlwZSwgY2hhciosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90
IHRhYmxlSW5kZXgpKTsKLSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIEpTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUsIEVuY29kZWRK
U1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykp
OwotI2VuZGlmCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldEZyb21TY29w
ZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBi
eXRlY29kZVBDKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFRvU2Nv
cGUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBD
KSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODcsNyArODcsMTIgQEAgYXV0byBKSVRQbGFuOjp0aWVyKCkgY29uc3QgLT4g
VGllcgogCiBKSVRDb21waWxhdGlvbktleSBKSVRQbGFuOjprZXkoKQogewotICAgIHJldHVybiBK
SVRDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLCBtX21v
ZGUpOworICAgIEpTQ2VsbCogY29kZUJsb2NrOworICAgIGlmIChtX21vZGUgPT0gSklUQ29tcGls
YXRpb25Nb2RlOjpCYXNlbGluZSkKKyAgICAgICAgY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPnVu
bGlua2VkQ29kZUJsb2NrKCk7CisgICAgZWxzZQorICAgICAgICBjb2RlQmxvY2sgPSBtX2NvZGVC
bG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIHJldHVybiBKSVRDb21waWxhdGlvbktl
eShjb2RlQmxvY2ssIG1fbW9kZSk7CiB9CiAKIGJvb2wgSklUUGxhbjo6aXNLbm93blRvQmVMaXZl
QWZ0ZXJHQygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25z
dAogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxv
YWQoZ2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVj
dCgpLCByZWdUMSwgbV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCks
IG9wdGlvbnMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzIsNyArNzIsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0CiAKICAgICBlbWl0TG9h
ZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1Qz
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFNldHRlckJ5SWQsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX3By
b2ZpbGVkQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODcsNyArODcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAgZW1pdExvYWRQYXlsb2FkKGJh
c2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCByZWdUMyk7CiAgICAgZW1p
dExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDQpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyU2V0dGVyLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGVzLCByZWdUMywg
cmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBtX3By
b2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZEJsb2NrLT5pZGVu
dGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZXMsIHJlZ1QzLCByZWdUNCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMik7
CiAgICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWRQYXls
b2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlWYWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5VmFsLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdU
MiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwog
ICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9h
ZChzZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
VmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRTZXR0ZXJCeVZhbCwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xMjMsNyArMTIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNv
bnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpTVmFsdWVSZWdzIGJh
c2VSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKQEAgLTEzMSw4ICsxMzEsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdExvYWQoYmFz
ZSwgYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpKTsKICAgICBKSVRE
ZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCksCiAgICAgICAgIGJhc2VS
ZWdzLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBA
IC0xNjYsNyArMTY2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0
cgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlSZWdz
LnRhZ0dQUigpKTsKIAogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAog
ICAgICAgICBiYXNlUmVncywgcHJvcGVydHlSZWdzLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVn
LCByZWdUNCk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC0yMDIsNyAr
MjAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiAgICAg
ZW1pdExvYWQyKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCks
IHByb3BlcnR5LCBwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5wYXlsb2FkR1BS
KCkpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZh
bE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5
bG9hZEdQUigpKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJl
Z3MucGF5bG9hZEdQUigpKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxP
cHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5w
YXlsb2FkR1BSKCkpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5
UmVncy5wYXlsb2FkR1BSKCkpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1
ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
IAogICAgIGJveEJvb2xlYW4ocmVnVDAsIHJlc3VsdFJlZ3MpOwpAQCAtMjE2LDcgKzIxNiw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV9pZChjb25zdCBJbgogCiAgICAgZW1pdExvYWQoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCksIGJh
c2VSZWdzLnBheWxvYWRHUFIoKSk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkp
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRp
bWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VSZWdzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKICAgICBib3hCb29sZWFu
KHJlZ1QwLCByZXN1bHRSZWdzKTsKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7CkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cgogICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDEpOwogICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2Zp
bGUsIHJlZ1Q0KTsKICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZEJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3By
b2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKICAgICAgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUNCk7CkBAIC0yNTcsNyArMjU3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAg
ICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgbV9wcm9maWxlZEJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgICAgICBKU1ZhbHVl
UmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCByZXN1
bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIg
PSB0cnVlOwpAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHIKICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAg
ICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRC
bG9jayksIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDAp
OwogICAgIH0KIH0KQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbChjb25zdCBJCiAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewogICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwog
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAg
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAog
ICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZh
bEluZGV4XTsKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxv
Y2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9m
aWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKICAgICB9CiB9
CkBAIC0zMDUsMTMgKzMwNSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1l
KGNvbnN0CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1l
LAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHJlc3VsdFJlZ3MsIEludmFs
aWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwg
cmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC0z
MzAsNyArMzMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwog
CiAgICAgYXV0byBiYXNlR1BSID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBhdXRv
IHByb3BlcnR5R1BSID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3Bl
cnR5R1BSKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTM0OCw3ICszNDgsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJS
ZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9s
ID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC0zNzcsNyArMzc3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogICAgIEpTVmFs
dWVSZWdzIHZhbHVlUmVncyhyZWdUNSwgcmVnVDQpOwogCiAgICAgYXV0byBvcGVyYXRpb24gPSBw
dXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9w
dGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlUmVncywgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3Ms
IGdlbi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBnZW4u
c3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtMzk1LDcgKzM5NSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkpOwogCiAgICAgSklUUHJpdmF0
ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgYmFzZVJlZ3Ms
IGJyYW5kUmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC00MTgsNyArNDE4
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogICAgIEpJVFBy
aXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1tt
X3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4XTsKICAgICArK21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5k
ZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJl
Z3MsIGJyYW5kUmVncyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
ZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTQz
NSw3ICs0MzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpKTsK
IAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0
ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpD
aGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAogICAgICAgICBiYXNlUmVncywgYnJhbmRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKQEAgLTQ1Miw3ICs0NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJp
dmF0ZV9icmFuCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3By
aXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXhdOwogICAgICsrbV9w
cml2YXRlQnJhbmRBY2Nlc3NJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJy
YW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZElt
bVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VSZWdzLCBicmFuZFJlZ3MpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTQ2NSw3ICs0NjUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNDc4LDcgKzQ3OCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1Q2LCByZWdUNyk7CiAKICAgICBKSVRQ
dXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCByZWdU
NiwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC01MDQsNyArNTA0LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgICAgICBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICAgICAgZWNtYU1vZGUgPSBKSVQ6OmVjbWFNb2RlKGJ5dGVjb2RlKTsKLSAgICAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICAg
ICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCkBAIC01MjQs
NyArNTI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAg
IGVtaXRMb2FkMihiYXNlLCByZWdUMiwgcmVnVDEsIHByb3BlcnR5LCByZWdUMywgcmVnVDApOwog
ICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUNSwgcmVnVDQpOwogCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0
cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIs
IHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJl
Z1Q0KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1t
UHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMiwg
cmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVn
VDQpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC01NDIsMTMgKzU0MiwxMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3Vs
dFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBt
X3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlk
R1BSUmVnLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3VsdFJl
Z3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpKTsKIH0KIApAQCAtNTU4LDEzICs1NTgsMTMgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJ
ZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5z
dHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRy
eUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2Zp
bGVkQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNTc1LDcgKzU3NSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC01ODMsMTMgKzU4MywxMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCks
IHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwor
ICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdz
LCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwg
cmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVz
dWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC01OTksMTMgKzU5OSwxMyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVj
dE9wdGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5z
dHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVj
dE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBn
ZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTYxNCwxMCArNjE0LDEwIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAgICAgCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNjMwLDEzICs2MzAsMTMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDAp
LCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAg
ICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52
YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3VsdFJlZ3Mp
OwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKTsKIH0KIApAQCAtNjQ2LDEzICs2NDYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNb
bV9nZXRCeUlkSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAgICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZEJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVn
LCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CiB9CkBAIC02NjMsNyArNjYzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyhjbwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRMb2FkKGJhc2UsIHJl
Z1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQodGhpc1ZSZWcsIHJlZ1Q0LCByZWdUMyk7CkBAIC02
NzMsMTMgKzY3MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNv
CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVn
cywgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJl
Z1QzKSwgSW52YWxpZEdQUlJlZyk7CisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVS
ZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIEludmFs
aWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQo
Z2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9y
ZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0K
IApAQCAtNjg5LDEzICs2ODksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93
aXRoX3RoaQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
V2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDQsIHJlZ1QzKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRW
UmVnLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJv
ZmlsZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03MTAsMTUgKzcxMCwxNSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNE
aXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogICAgIAogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHZhbHVlLCByZWdUMywg
cmVnVDIpOwogICAgIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIG1fcHJv
ZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCks
CiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMiksIEludmFsaWRHUFJSZWcsCiAgICAgICAgIHJlZ1QxLCBieXRlY29kZS5tX2Zs
YWdzLmVjbWFNb2RlKCksIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERp
cmVjdCk7CiAgICAgCkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogCkBAIC03NDgsNyArNzQ4LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAgICAgCiAgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigKLSAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24o
KSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgICAgIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIG1f
cHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTc1OCwxNCArNzU4LDE0IEBAIHZvaWQgSklU
OjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBh
eWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJl
Zyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwpAQCAtNzc5LDEz
ICs3NzksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVk
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZEJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKIAogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03OTYsNyArNzk2LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZEJsb2NrKTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwg
cmVnVDMsIHJlZ1QyKTsKQEAgLTgwNCw3ICs4MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9i
eV92YWwoY29uc3QgSW5zdHJ1CiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCBwcm9maWxlLCByZWdUNCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAg
ICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKQEAgLTgxOSwxNCArODE5LDE0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92
YWwoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5CeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwog
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAog
ICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiB9CkBAIC04MzcsNyArODM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQ
cml2YXRlKFZpcnR1YWxSZWdpc3RlcgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlLCByZWdUMSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZhbGlk
R1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTg1Myw3ICs4NTMsNyBAQCB2b2lkIEpJVDo6ZW1p
dEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUg
OiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVy
YXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKIH0KQEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lkIEpJVDo6ZW1pdFZhckluamVj
dGlvbkNoZWNrKGJvb2wgbmVlCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykK
ICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRl
QWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9p
bnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwor
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX3Byb2ZpbGVk
QmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NP
ZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQpAQCAt
OTA2LDcgKzkwNiw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kK
IHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAg
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwpAQCAt
OTE2LDExICs5MTYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bgogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOworICAgICAgICAg
ICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2Rl
QmxvY2socmVzb2x2ZVR5cGUsIG1fcHJvZmlsZWRCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vw
b2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIEFic29sdXRlQWRkcmVzcyhtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRy
ZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKICAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwogICAgICAgICAgICAg
ZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoK
ICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpT
U2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2Nr
KHJlc29sdmVUeXBlLCBtX3Byb2ZpbGVkQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7CkBAIC0xMDM5LDcgKzEwMzksNyBA
QCB2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwpAQCAt
MTE0Niw3ICsxMTQ2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIApA
QCAtMTE1Niw3ICsxMTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KGNvbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwg
ZHN0LCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24p
OwogfQogCiB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQpAQCAtMTE5MCw3ICsx
MTkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3Bl
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgR2V0
UHV0SW5mbyBnZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7CkBAIC0xMjAy
LDcgKzEyMDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAg
ICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVj
dHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24uCiAgICAg
ICAgICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgICAgIApAQCAt
MTIxNyw3ICsxMjE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
cwogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAg
IGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29w
ZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29k
ZUJsb2NrKTsKKyAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpj
b25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2ZpbGVkQmxvY2spOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKQEAgLTEzMTgsNyArMTMxOCw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRo
Q2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9k
ZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9T
Y29wZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIG1fcHJvZmlsZWRCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTMzMyw3ICsxMzMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21f
YXJndW1lbnRzKGNvbgogICAgIGVtaXRMb2FkUGF5bG9hZChhcmd1bWVudHMsIHJlZ1QwKTsKICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkg
KyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgVGFnT2Zmc2V0KSwgcmVz
dXRsUmVncy50YWdHUFIoKSk7CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSArIFBheWxvYWRPZmZzZXQpLCByZXN1dGxSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3V0
bFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZEJsb2NrKSwgcmVzdXRsUmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVzdXRsUmVn
cy50YWdHUFIoKSwgcmVzdXRsUmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC0xMzU1LDcgKzEz
NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgzMDUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwxMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmICht
ZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01h
eE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5
VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxs
LmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cmVzdWx0KTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3Ms
IHJlZ1QyKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKwogICAgICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
ICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVy
ZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorCisgICAgICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0
UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0K
IAorI2lmICFPUyhXSU5ET1dTKQorc3RhdGljIGNvbnN0ZXhwciB2aWFibGVBcmd1bWVudEdQUjQg
PSBHUFJJbmZvOjphcmd1bWVudEdQUjQ7CitzdGF0aWMgY29uc3RleHByIHZpYWJsZUFyZ3VtZW50
R1BSNSA9IEdQUkluZm86OmFyZ3VtZW50R1BSNTsKKyNlbHNlCitzdGF0aWMgY29uc3RleHByIHZp
YWJsZUFyZ3VtZW50R1BSNCA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CitzdGF0aWMgY29uc3RleHBy
IHZpYWJsZUFyZ3VtZW50R1BSNSA9IEdQUkluZm86Om5vbkFyZ0dQUjE7CisjZW5kaWYKKwogdGVt
cGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xv
d0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYgKCFo
YXNBbnlTbG93Q2FzZXMoaXRlcikpCisgICAgICAgIHJldHVybjsKKworICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOwog
Ci0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
ICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgdmlhYmxlQXJndW1l
bnRHUFI0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEp
OworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlw
ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1p
emUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCB2aWFibGVBcmd1bWVudEdQUjQpOwogI2Vsc2UK
LSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29k
ZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09
IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2Vk
LgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0g
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRp
bWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJn
MSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBh
cmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQo
YmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2Vy
dChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5
cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJl
Q2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0
OSw3ICsxNjksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAg
ICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBi
ZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9G
VEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMs
IHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAg
IEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5B
ZGRyZXNzKCk7CkBAIC0xNjAsOCArMTgwLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJn
dW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMTg3LDM0ICsyMDcs
NDAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHBy
b3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJ
VEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAg
ICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZv
R1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkdldFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdz
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7CiAgICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwpAQCAtMjIzLDkgKzI0OSwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1l
T3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTIzNSwyNiArMjYzLDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
PSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBy
ZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVy
dHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQ
cml2YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTI2NCw3
ICsyODYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRy
ZXNzKCk7CkBAIC0zMDAsMjEgKzMyMiwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0
ZV9icmFuZChjb25zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BTZXRQcml2YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsK
LSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1Qx
OworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7Ci0KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJy
YW5kR1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRH
UFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIFdlIHNob3Vs
ZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1i
YXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTMyNCwxNyArMzUzLDIyIEBAIHZvaWQgSklU
OjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJh
c2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3By
aXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlv
bik7CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5k
QWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJy
YW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
ICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRl
Y2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0zNDQsMjQgKzM3OCwxOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShv
cGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlv
blRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3Vt
ZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNl
Ci0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGlt
aXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmCiAKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMzcwLDMzICszOTgsNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0
ZV9icmFuZChjbwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJyYW5kLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFu
ZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0
dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7CiAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNs
b3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJy
YW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BDaGVja1ByaXZhdGVCcmFuZD4oKTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNv
ZGUpOworCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZh
dGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOwor
ICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRp
bWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2
LDI0ICs0NDgsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8g
YXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVu
Y3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+
OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2
YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZh
dGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNDM1LDMwICs0NzEsNDMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZh
bHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFs
dWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
LSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQ
Uik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BS
KSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KHByb3BlcnR5KSkKICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9
IHRydWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisK
KyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRC
eVZhbDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5
VmFsRGlyZWN0PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBz
dHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsg
Ly8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSBy
ZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7
CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJp
ZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00NzQsMTUgKzUyMywxMiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVD
TUFNb2RlOjpzdHJpY3QoKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwog
CiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
ICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gYnl0
ZWNvZGUubV9lY21hTW9kZTsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTQ5OCw3ICs1NDQsMTYgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3Qg
cGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlz
RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkg
OiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgdmlhYmxlQXJndW1lbnRHUFI0KTsKKyAgICBp
ZiAoaXNEaXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCksIE9wUHV0QnlWYWxEaXJlY3Q6
Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCB2aWFibGVBcmd1bWVudEdQUjUpOwor
ICAgIGVsc2UKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNl
dE9mQXJyYXlQcm9maWxlKCksIHZpYWJsZUFyZ3VtZW50R1BSNSk7CisgICAgY2FsbE9wZXJhdGlv
bjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKT4oQWRkcmVzcyh2aWFi
bGVBcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BS
MywgdmlhYmxlQXJndW1lbnRHUFI0LCB2aWFibGVBcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNTEyLDcgKzU2Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1
OwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKICAgICBDYWxsIGNhbGw7CiAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChl
Y21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2Rl
LmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9u
UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CkBAIC01MjMsNyArNTc4LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtNTMzLDE4ICs1ODgsMjQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAg
ICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9i
YWxPYmplY3RHUFIgPSByZWdUNTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2
YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgeworICAgICAgICBS
ZWdpc3RlclNldCB1c2VkKEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2
YWx1ZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZSk7CisgICAgICAgIEFTU0VS
VCghdXNlZC5jb250YWlucyhyZWdUNCkpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMo
cmVnVDUpKTsKKyAgICB9CisKIAogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0
YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9i
amVjdEdQUik7CkBAIC01NzAsMjAgKzYzMSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJp
dmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRH
UFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRl
RmllbGRQdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBT
dHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTk0
LDggKzY2Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFBy
aXZhdGVOYW1lPigpOwotICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2Rl
Lm1fcHV0S2luZDsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKIAogICAg
IEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgr
K107CiAKQEAgLTYwMywxMyArNjc0LDE1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJp
dmF0ZV9uYW1lKGMKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAg
YXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERl
ZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmll
bGRPcHRpbWl6ZTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgLy8gVGhleSBh
cmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVl
R1BSLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKKwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgdmlhYmxlQXJn
dW1lbnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFs
RGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUpPihBZGRyZXNzKHZpYWJsZUFyZ3VtZW50R1BSNCwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCB2aWFibGVBcmd1bWVu
dEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtNjIyLDE4ICs2OTUsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9w
cml2YXRlX25hbWUoYwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUNDsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBl
bmRDYWxsKG9wZXJhdGlvbik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBA
IC02NDMsMTQgKzcxMCwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdS
ZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1
ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDM7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCkBAIC02ODAsNyArNzQ3LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRp
b25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1w
bCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBv
cHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY4OSw3ICs3NTcsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlv
bnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBs
KCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9w
dGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3
NjgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAgaW50
MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIs
IHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3NzksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRy
aWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0
cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzE5LDcgKzc5MCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90
IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNzI3LDIzICs3OTksMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNv
bnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
RGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c2Ny
YXRjaDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogICAgIEpJVERlbEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRl
bGV0ZUJ5SUQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9v
bGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNh
biB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMg
Y2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Yg
c2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC03NTks
MTUgKzg0MSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdl
biA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZh
bHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBj
YWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk+KEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2Vj
bWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4
MSwyNCArODY1LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4K
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0
dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtODA4LDcgKzg4Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAg
ICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTg0NSwyMiArOTI0LDMzIEBAIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
RGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVy
dHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIp
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBv
ZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAv
LyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBi
YXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTczLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdU
MSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9w
dGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2Rl
LnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BS
Mik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNh
bGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk+KEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQ
UjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCArOTkxLDE5IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIg
PSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9w
ZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1
ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQ
UiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CkBAIC05MjYsNyArMTAxMyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKQEAgLTk2MSwyMiArMTA0OCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDAp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OlRy
eUdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIp
LCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpUcnlHZXRC
eUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAg
ICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9
CiAKQEAgLTk4NiwxNCArMTA4MiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRC
eUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEw
MDMsMjYgKzExMDIsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29u
cwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpLCBkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7
Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25UcnlHZXRCeUlk
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDMwLDIyICsxMTIzLDMx
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnJlc3VsdCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VW
UmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdz
LCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMDU0LDE2ICsxMTU2LDE4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJl
c3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0
aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsx
MTc3LDYyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1l
PGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
Pm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBl
bHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAg
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCpp
ZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKSB7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsK
LSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEu
bV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAg
ICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gz
MihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2Rl
OjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVN
ZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhN
b2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUu
bV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRo
aXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJl
Zyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBw
ZW5kKGdlbik7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJl
LCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2Uo
KTsKKyAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTExNTgsMTYgKzEyNDEsMTggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRl
Y29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAj
ZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMTc3LDI2ICsxMjYyLDU4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFy
Z3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
YXJndW1lbnRHUFIzOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BS
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhU
aGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhU
aGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3IgZ2VuKAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyh0aGlzR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBy
ZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2Vy
dmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHNXaXRo
VGhpcy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9
CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyMDYsNyArMTMyMyw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTEy
NDEsMTYgKzEzNTgsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3Ro
aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsr
XTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgYXJndW1lbnRHUFIz
KTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTEyNjAsMjggKzEzODAsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBy
ZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRo
aXNHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI5MSw3ICsxNDA1
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0
IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZh
aWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBp
bmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBt
YXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OwpAQCAtMTMyOSwyMyArMTQ0MywzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29u
c3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgLy8gSW4gb3Jk
ZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0
IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUg
YXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbics
IGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBv
ZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlk
UmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAg
IEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUp
LAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAg
ICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0
S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9k
ZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1Ig
ZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAogICAgIC8vIElD
IGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2Ug
aXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0ODgsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdl
biA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5j
dGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMp
OworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGlt
aXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEzNzYsMjUgKzE1MDksMTkgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhbHJlYWR5IGlu
IHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDE7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQ
UiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHZhbHVlR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwg
PSBhcHBlbmRDYWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCkpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQpAQCAtMTQwNCw3ICsxNTMxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTQ0MSwyMCArMTU2OCwzMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBC
YXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSk7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ2MywxNCArMTYwMSwxNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb248ZGVj
bHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
QEAgLTE0ODAsMjggKzE2MjEsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNv
bnN0IElucwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dl
dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVk
LgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRo
dW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTUxMCwyNSArMTY0NSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBw
cm9maWxlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnNjcmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
cmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6Oklu
QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQpAQCAtMTUzNywxNSArMTY4MCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFs
SW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0
ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgdmlhYmxlQXJndW1lbnRHUFI0KTsK
KyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk+KEFk
ZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0
aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFy
Z3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTE1NTYsNTkgKzE3MDIsNzAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQ
UjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRf
YnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQu
CiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1
bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAg
ZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlw
ZSB0eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9y
QnJhbmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1
YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0SGFzUHJpdmF0
ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIEFTU0VSVCh0eXBlID09
IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZUJyYW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAgVU5VU0VEX1BBUkFNKHBy
b3BlcnR5KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFz
UHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogCiAg
ICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsr
XTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXpl
IDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRp
b248ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBk
c3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BS
Myk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNjE4LDI3ICsxNzc1LDIx
IEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2kKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eU9y
QnJhbmRHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eU9y
QnJhbmRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3Rh
dGljX2Fzc2VydChwcm9wZXJ0eU9yQnJhbmRHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQ
cml2YXRlTmFtZU9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZSk+Ojp2YWx1ZSk7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUo
b3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRQ
cml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbCh0eXBl
ID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xNjUyLDcgKzE4MDMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3By
aXZhdGVfbmFtZShjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZU5hbWU+KCk7Ci0gICAg
ZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
TmFtZSk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5t
X2Jhc2UsIGJ5dGVjb2RlLm1fcHJvcGVydHksIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NjYsMjE1ICsxODE3LDEyNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVfYnJhbmQoCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFz
UHJpdmF0ZUJyYW5kPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwg
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0
ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9icmFuZCwgQWNjZXNzVHlw
ZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVj
ayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQordm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rp
b25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgc2NyYXRjaEdQUikK
IHsKICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0
ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHNjcmF0Y2hHUFIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBzY3Jh
dGNoR1BSKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hH
UFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdp
c3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcywgdW5zaWduZWQgZGVwdGgpCiB7Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCByZWdUMCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCiAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdU
MCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi0jaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9y
ZXNvbHZlVHlwZTsKLSAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURl
cHRoOwotCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUp
IHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0
YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVn
VDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRl
QWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGlj
YWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2Fz
ZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRT
Y29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihj
b25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDbG9z
dXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgot
ICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwgc2NvcGUsIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFk
YXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJl
c29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5Lmxpbmso
dGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4
aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsK
LQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5r
KHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5s
aW5rKHRoaXMpOwotCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0Ogot
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0K
LSNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fcmVzb2x2ZVR5cGU7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVj
b2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jl
c29sdmVUeXBlOwogCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNv
ZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQo
bV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5z
dHJ1Y3Rpb24pOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0
KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3Bl
R1BSID0gcmVnVDY7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJl
Z1Q1OworICAgIC8vIElmIHdlIHByb2ZpbGUgY2VydGFpbiByZXNvbHZlIHR5cGVzLCB3ZSdyZSBn
YXVyYW50ZWVkIGFsbCBsaW5rZWQgY29kZSB3aWxsIGhhdmUgdGhlIHNhbWUKKyAgICAvLyByZXNv
bHZlIHR5cGUuCiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKQotICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCBy
ZWdUMCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKKyAgICAg
ICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVudCgpLCByZWdUMCk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFk
YXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0g
bV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0
ZWNvZGUpOwogCi0jZGVmaW5lIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBv
cF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGlj
IGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9F
QUNIX1JFU09MVkVfVFlQRShSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyAgICAgICAgYXV0byBj
bG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJ
VDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6
IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhciIpOwogICAgICAgICB9OwotI3VuZGVmIFJFU09M
VkVfU0NPUEVfR0VORVJBVE9SCisKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBK
SVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyIpOworICAgICAgICB9OworCisgICAgICAgIGF1dG8gZ2VuZXJpY1Jl
c29sdmVTY29wZUdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBK
SVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxp
bmU6IG9wX3Jlc29sdmVfc2NvcGUgZ2VuZXJpYyIpOworICAgICAgICB9OworCisgICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUMjsKKyAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgc2NvcGVHUFIpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQp
LCBtZXRhZGF0YUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsK
KyAgICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAg
ICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAgICAgICBl
bHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBj
b2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yKTsKKyAgICAg
ICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAg
IH0KIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVu
ayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2Nv
cGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBj
b25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0
aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQg
YmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KKworICAgIENDYWxsSGVscGVycyBqaXQ7CisKICAgICB1c2luZyBNZXRhZGF0YSA9IE9w
UmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BS
ID0gcmVnVDc7IC8vIGluY29taW5nCi0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJl
Z1Q2OyAvLyBpbmNvbWluZworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdU
MjsgLy8gaW5jb21pbmcKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7IC8v
IGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1
OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCi0gICAgY29uc3RleHByIEdQ
UlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVP
ZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2Nv
cGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFn
UmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBt
ZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJl
Z1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8g
ZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgeworICAgIGF1dG8gZG9W
YXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgaWYgKCFuZWVk
c1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGds
b2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmpl
Y3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAg
ICAgIH0KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09G
RlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMp
OwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywg
V2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBy
ZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVz
cyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElz
SW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0g
WyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVH
UFIsIHJlZ1QwKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOwotCi0gICAgICAg
IExhYmVsIGxvb3AgPSBsYWJlbCgpOwotICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0MzIo
WmVybywgcmVnVDEpOwotICAgICAgICB7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3As
IHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZG9W
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc2NvcGVHUFIgPT0gcmVnVDApOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkxvY2FsU2NvcGVEZXB0aCgpKSwgcmVnVDEp
OworCisgICAgICAgIExhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgSnVtcCBkb25l
ID0gaml0LmJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICBq
aXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAgICAgIGppdC5qdW1wKCkubGlu
a1RvKGxvb3AsICZqaXQpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgy
LDEyICsxOTQ1LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0
YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgot
ICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gp
KSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFs
TGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFs
T2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2go
KSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGlj
YWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCkBAIC0xODk3LDExICsxOTU5LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVC
bG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhciosCiAg
ICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNh
bEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAg
aWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKQEAgLTE5MDksNyArMTk3MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkp
OworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1v
ZHVsZVZhcjoKQEAgLTE5MTksODMgKzE5ODEsNDUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2
ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRh
ZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVU
eXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7
Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZh
cik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29s
dmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1p
dENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOworICAgICAgICBqaXQubG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCBy
ZWdUMSk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgYXV0byBlbWl0Q2FzZSA9IFsmXSAoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gz
MihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICAg
ICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOworICAgICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
aXQuanVtcCgpKTsKKyAgICAgICAgICAgIG5vdENhc2UubGluaygmaml0KTsKKyAgICAgICAgfTsK
IAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxp
bmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgZW1pdENhc2UoR2xvYmFs
VmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBlbWl0Q2Fz
ZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwog
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCi0gICAgcmV0KCk7
CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93
Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJh
dG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChz
bG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX1JFU09MVkVf
U0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0
b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2Vk
Rm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9
OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2Nv
cGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklO
RV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfUkVTT0xWRV9TQ09QRV9H
RU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNs
b3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5r
IGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQg
LyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFk
ZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwMzQsNyArMjA1OCw2IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1ZmZlci5saW5rKGV4Y2Vw
dGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgIkJhc2VsaW5lOiBzbG93X29wX3Jlc29sdmVfc2NvcGUiKTsKIH0KLSNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkK
IHsKQEAgLTIwNjIsMjc2ICsyMDg1LDEzMyBAQCB2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIo
VmlydHVhbFJlZ2lzCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9u
bWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
cmVnVDApOwogfQogCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZy
b21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAg
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7
Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZl
VHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewotICAgICAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAg
ICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0
cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBz
dHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5
LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgot
ICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1
bHQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7Ci0KLSAgICAgICAgICAgIGppdEFzc2VydChzY29w
ZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSk7Ci0gICAgICAgICAgICB9KSk7CisgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29k
ZUluZGV4KTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdCht
X2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICAgICAgICAgIGxv
YWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxF
RCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVy
VGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7
Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5l
KTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAg
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2
NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNh
c2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICBpZiAocmVzb2x2
ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRHZXRDbG9z
dXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6Ci0gICAgICAgIGNh
c2UgTW9kdWxlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQorICAgIGF1dG8gY2xv
c3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2Vu
ZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX2dl
dF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0g
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7
Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZh
ciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwot
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7
IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIp
KTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5r
KHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0KLSAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9u
R2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0KLXZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2Rl
Lm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1
dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5l
cmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9Owog
Ci0gICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRl
Y29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2st
Pmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
ICAgIGF1dG8gZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAg
ICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBzdGQ6Om51
bGxvcHQsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgZ2VuZXJpYyIpOworICAgIH07CiAK
LSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFH
UFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCi0gICAgaWYgKHJl
c29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKLSAg
ICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJh
bmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0
YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsK
KyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRh
ZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgR0VUX0ZS
T01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29s
dmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBn
ZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoR0VUX0ZS
T01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdFVF9GUk9NX1NDT1BFX0dF
TkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CisgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7Ci0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVz
b2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0KKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYgKHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xv
c3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgY29kZSA9IHZtLmdldENU
SVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgIGVs
c2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZyb21TY29wZUdlbmVy
YXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRo
dW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21T
Y29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUs
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5
IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJ
VCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgog
ICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGds
b2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRG
b3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwotCi0gICAgdGFnUmV0dXJuQWRkcmVzcygp
OwotCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRh
ZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0g
WyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9m
ZnNldCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEp
OwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Ci0gICAgfTsKKyAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBq
aXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZTsK
IAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKSB7CisgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwot
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9i
amVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9m
ZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
KyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2lu
dCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwg
QWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKICAgICAKLSAgICBhdXRvIGVtaXRHZXRWYXJG
cm9tUG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxv
YWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRHZXRWYXJGcm9tSW5kaXJl
Y3RQb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9h
ZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldENsb3N1cmVWYXIgPSBb
Jl0gKEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIG9wZXJhbmRHUFIpIHsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGxzaGlmdDY0KFRy
dXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGFkZFB0cihzY29wZUdQUiwgb3Bl
cmFuZEdQUik7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxF
bnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKLSAgICB9OwotCi0gICAg
YXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJl
Y3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0
cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBz
dHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5
LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgot
Ci0gICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAgICAgICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoID0gcmVnVDI7Ci0KLSAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2
b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgcmVn
VDMpOworICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9u
IHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xv
YmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBm
b3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCkp
LCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIo
WmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3Ry
dWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKworICAgICAgICAgICAgaml0LmppdEFz
c2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgeworICAgICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaml0LmJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAg
IH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgp
KSwgcmVnVDEpOworCiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAg
ICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBv
ZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAg
ICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAg
ICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0
T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJ
bW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdp
dGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0
T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAg
ICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zm
c2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZz
ZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
c2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAg
ICAgIGppdC5uZWczMihyZWdUMSk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIo
cmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNl
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7
Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAg
ICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBl
bWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQp
LCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3Bl
cmFuZCkpLCByZWdUMyk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZUdQUiwg
cmVnVDMpOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsKKyAgICAg
ICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOworICAgICAg
ICAgICAgaml0LmxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgcmVnVDMpOworICAgICAgICAgICAg
aml0LmFkZFB0cihzY29wZUdQUiwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCBy
ZWdUMCk7CisKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAg
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29s
dmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQxLDg2ICsyMjIx
LDYzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAg
fQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
ewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdU
MCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJl
Z1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVz
b2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVy
dHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBH
bG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlm
IChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0g
Q2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsK
LSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDAp
OyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7Cisg
ICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQ
cm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
ciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5s
aW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUo
R2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAg
ICAgbm90R2xvYmFsVmFyLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUo
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGlu
aygmaml0KTsKKworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVt
aXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVt
cCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZq
aXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBqaXQuYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwor
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKCZqaXQp
OwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAg
IHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9F
bmQubGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6
bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5z
dG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9m
aWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogCi0gICAgcmV0
KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywg
R0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBz
bG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdl
bmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFi
ZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2Zp
bGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25M
YWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfR0VU
X0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMj
R2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVu
a0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0
dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0Lmdl
bmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9nZXRf
ZnJvbV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZ
UEUoREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfR0VUX0ZS
T01fU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAv
LyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRo
IHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lz
dGVyczo6ZWJwKTsKQEAgLTI0MjksNyArMjI4Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICNlbmRpZgogCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZy
b21TY29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJl
Z1Q3OworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAgICAgaml0LnN0b3JlMzIo
Ynl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykpOwogCkBAIC0yNDQ5LDcgKzIzMDYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgQ2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVy
YXRpb25QdHJUYWcpOwogICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBqaXQuZW1pdE5vblBhdGNo
YWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKIAotICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNz
KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
cHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3RlciwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxl
OjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOwogCiAjaWYgQ1BV
KFg4Nl82NCkKQEAgLTI0NjksODggKzIzMjYsNzcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgIHBhdGNoQnVmZmVyLmxpbmsoanVtcFRvSGFuZGxlciwgQ29k
ZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGlu
ZTogc2xvd19vcF9nZXRfZnJvbV9zY29wZSIpOwogfQotI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9w
ZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3Jp
dGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1p
dFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNl
dCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgbG9h
ZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUo
cmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0b3Jl
UHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwot
ICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJl
Z1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQg
KiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci19CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gY29w
aWVkR2V0UHV0SW5mbyhieXRlY29kZSk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBn
ZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9
IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAot
ICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGlu
ZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVU
eXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZv
LnJlc29sdmVUeXBlKCk7CisKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhz
Y29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVj
dGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhl
IEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tp
bmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNr
IGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9y
IGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LgorICAgICAgICAgICAgLy8gQWRkaXRpb25h
bGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9u
LgorICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3Bl
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICAgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworCiAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAKICAgICAgICAgICAgIGppdEFzc2VydChz
Y29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAg
IHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDMpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdU
Myk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9h
ZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgICAgICAgICBs
b2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwogICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAg
ICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0
LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsK
LSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIs
IEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNl
dCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNh
bFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0
YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0gICAgICAgICAgICBp
ZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYg
KHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdU
MCk7CisgICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSwgcmVnVDAp
OworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2Nv
cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDApOworCisgICAgICAgICAgICBp
ZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9u
TW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAg
ICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4n
dCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KLSAg
ICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAg
ICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUq
Kj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigq
b3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCks
IHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1Qx
KSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFu
ZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBv
aW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFs
VmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0
YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29u
c3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKworICAgICAgICAgICAgbG9h
ZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdh
dGNocG9pbnQocmVnVDEpOworCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMSk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwKSk7
CisKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFJl
c29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0
YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKworICAgICAg
ICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHJG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3Bl
cmFuZCgpLCByZWdUMik7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJl
Z1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAg
ICAgICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQs
IEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSk7CisKICAgICAgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yNTY0LDU4ICsy
NDEwLDUyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRh
dGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQ
dXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0K
LSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxW
YXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsg
Ly8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRv
IGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAgICAgICBpc0dsb2JhbExl
eGljYWxWYXIubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwotCi0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAg
ZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToK
LSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAg
ICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1cmVWYXIvIENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21waWxlIHRoaW5ncworICAgIC8v
IHRoYXQgd2F5IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2UndmUgcHJvdmVuIHRoYXQgaXMg
dGhlIHR5cGUgd2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJlVmFyLAorICAgIC8vIGFsbCBD
b2RlQmxvY2tzIHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFyCisgICAgLy8gaWYgdGhlIHZh
ciBpbmplY3Rpb24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYgaXQgaXMgZmlyZWQsIHRoZW4g
d2UgdGFrZSB0aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0CisgICAgLy8gbWF0dGVyIHdoYXQg
dHlwZSB3ZSBhcmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0g
Q2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAo
cHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRD
b2RlKFJlc29sdmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlw
ZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgZW1pdENvZGUo
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVsc2UgewogICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZv
LCByZWdUMCk7CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1QwKTsKICAgICAgICAgYW5k
MzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJl
c29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAg
ICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQ
cm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCisgICAgICAgIEp1
bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsodGhpcyk7CisK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCiAg
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmso
dGhpcyk7CiAKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAogICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAg
ICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CiAgICAg
fQogfQogCkBAIC0yNjI0LDE4ICsyNDY0LDIxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
dG9fc2NvcGUoY29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2
ZVR5cGUoKTsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgUmVzb2x2
ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGlmIChwcm9maWxlZFJl
c29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVC
bG9jayBzYXcgYSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBDb2RlQmxvY2tzIGFyZSBndWFy
YW50ZWVkCisgICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZhci4KICAgICAgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0
aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAgICAg
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJndW1lbnRHUFIwLCBjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAg
ICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2Rl
SW5kZXgpOwotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRl
Y29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBBU1NFUlQobV91bmxp
bmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJ
bnN0cnVjdGlvbik7CiAKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IGFyZ3VtZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CkBAIC0yNjUyLDcgKzI0OTUsNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlv
bnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMg
YmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAg
ICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxs
SGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVy
czo6ZWJwKTsKQEAgLTI3MDEsNyArMjU0NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X2FyZ3VtZW50cyhjb24KICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50
cywgcmVnVDApOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0
b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCBy
ZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNzU5LDcg
KzI2MDIsNiBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKQEAgLTI3NjcsNyArMjYwOSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb24KICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4
KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1Qw
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yODIzLDcgKzI2NjUsNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvCiB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JO
ZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CkBAIC0yODM5LDExICsyNjgw
LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKICAgICBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gbW9k
ZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBwcm9maWxlIGl0
IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CisgICAgaWYgKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVyYXRvck1ldGFkYXRh
ID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgewogICAgICAg
ICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1Q0OwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVu
dW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMy
KE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKCh+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpPd25TdHJ1Y3R1cmVNb2RlKSAmIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW51bWVyYXRp
b25Nb2RlTWFzaykpKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BFbnVtZXJhdG9y
TmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHNjcmF0Y2hHUFIp
OworICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93
blN0cnVjdHVyZU1vZGUpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmU4VG9NZXRhZGF0YShz
Y3JhdGNoR1BSLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9m
RW51bWVyYXRvck1ldGFkYXRhKCkpOworCiAgICAgICAgIGxvYWQzMihBZGRyZXNzKGVudW1lcmF0
b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQo
KSksIGluZGV4R1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaDMyKE5v
dEVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpKSk7CiAKQEAgLTI4ODEsNzggKzI3MjgsODggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1f
aW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHlOYW1lOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKIAotICAgIGF1dG8gcmVzdWx0R1BS
ID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUVudW1l
cmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6
OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZUVudW1l
cmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMzsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHNjcmF0Y2gzKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcHJvcGVydHlHUFIpOwogCi0g
ICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFk
YXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5
VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaDIpOwor
ICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0
Y2gyLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVu
dW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CiAgICAg
Ly8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KLSAgICBKdW1wIGlzTm90
T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZElt
bTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1v
ZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVtcCBz
dHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdU
MiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7CisgICAg
bG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2Ny
YXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwg
c2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Lgot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0
aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4g
aW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVu
ZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdU
MywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9
IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CisgICAgbG9hZDY0KEJhc2VJ
bmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7
CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91dE9mTGluZUFjY2Vz
cy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QzKTsK
LSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDIpOworICAg
IG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRj
aDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBvZmZz
ZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnRwdHJf
dD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwg
cmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7Cisg
ICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAo
KSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOwotICAgIHN0b3JlOChUcnVz
dGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9k
ZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKyAg
ICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCBieXRlY29kZSwgT3BF
bnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgp
KTsKIAogICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNO
b3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIEp1bXAgaXNOb3RJbmRleGVk
ID0gYnJhbmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3
aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAgICAg
aXNOb3RJbmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAKICAgICBKSVRHZXRCeVZhbEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEp
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2Ug
bmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjk2
MSwxMCArMjgxOCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8K
ICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVu
dW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNv
ZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2Vu
dW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUg
Z2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQ
YXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJ
bXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjk3Myw3ICsyODI5LDkgQEAgdm9pZCBKSVQ6OmVtaXRf
ZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJz
b2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVy
YXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3Rv
cmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRl
c3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAtMzA2Miw2ICsyOTIwLDEzIEBAIHZvaWQgSklUOjpl
bWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBv
d25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJh
bmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNoR1BSKG93bmVyKSk7CisgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgp
LCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw5
ICsyMzYsOSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAg
ICAgICAgICBpZiAoaXNKU0FycmF5KGJhc2VDZWxsKSkgewogICAgICAgICAgICAgICAgIGlmIChz
dHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CiAgICAgICAgICAgICAgICAg
ICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlQ2VsbAotICAgICAgICAgICAgICAgICAgICAm
JiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxK
U0FycmF5Kj4oYmFzZUNlbGwpKSkgeworICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nl
c3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpT
QXJyYXkqPihiYXNlQ2VsbCkpKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0
ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKHN0dWJJbmZv
LCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wg
Z2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJp
YXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3RoKGxvY2tlcik7CkBAIC0yNDksOCArMjQ5LDggQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgICAg
IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6
QXJyYXlMZW5ndGgsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSlNT
dHJpbmcoYmFzZUNlbGwpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlw
ZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNj
ZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChzdHViSW5mbykpIHsKLSAgICAgICAgICAgICAg
ICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0
cmluZ0xlbmd0aChzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vz
czo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbykpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpn
ZW5lcmF0ZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRp
bWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby5pbml0U3RyaW5nTGVuZ3RoKGxvY2tlcik7CkBAIC0zMDQsNyArMzA0LDcgQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgICAgICYmICFz
bG90LndhdGNocG9pbnRTZXQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0
RnJvbVByb3h5KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0g
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhzdHViSW5mbywgc3RydWN0
dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRl
ZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8o
KSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90
QmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0
YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSk7CkBAIC03MzEsMTEgKzczMSwxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVQdXRCeShKCiAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5
UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQK
LSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9w
ZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCisgICAgICAgICAgICAg
ICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNv
ZGVCbG9jaywgc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAg
ICAgICYmICFvbGRTdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQogICAg
ICAgICAgICAgICAgICAgICAmJiAhaXNQcm94eSkgewogICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29k
ZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVC
bG9jaywgc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRL
aW5kKSk7CkBAIC0xMTMyLDcgKzExMzIsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVJbkJ5KAogICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlCiAg
ICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCiAgICAgICAgICAgICAgICAg
JiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7Ci0gICAgICAg
ICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVNlbGZJbkFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBib29s
IGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNz
KGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgaWYgKGdl
bmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpJbkJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90
QmFzZSgpID09IGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdh
dGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpA
QCAtMTU1Miw3ICsxNTUyLDcgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxM
aW5rSQogCiB2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bykKIHsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlu
a2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0KCkpOworICAgIGRhdGFM
b2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5m
bzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7CiAgICAgCiAgICAgcmV2ZXJ0Q2FsbCh2
bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJl
dGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDMsMjQgKzQzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBo
YW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQotewotICAgIENDYWxsSGVscGVycyBqaXQ7
Ci0KLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0udG9wRW50cnlGcmFtZSk7Ci0KLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQucHJlcGFyZUNhbGxP
cGVyYXRpb24odm0pOwotCi0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbiA9IGppdC5j
YWxsKE9wZXJhdGlvblB0clRhZyk7Ci0KLSAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2
bSk7Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5r
KG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBF
eGNlcHRpb25IYW5kbGVyKSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uIik7Ci19Ci0KIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxi
YWNrR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpAQCAtNzcsMjQg
KzU5LDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYQogICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4
Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFjayIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRp
b25HZW5lcmF0b3IoVk0mIHZtKQotewotICAgIENDYWxsSGVscGVycyBqaXQ7Ci0KLSNpZiBDUFUo
WDg2XzY0KQotICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMiAqIHNp
emVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVzcCk7Ci0jZWxpZiBDUFUoQVJNNjQp
Ci0gICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0Nh
bGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIpOwotI2VuZGlmCi0KLSAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgY29udGludWF0aW9uID0gaml0Lmp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1
bmspOwotICAgIGF1dG8gaGFuZGxlciA9IHZtLmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uR2Vu
ZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNvbnRpbnVhdGlvbiwgQ29kZUxvY2F0aW9u
TGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKLSAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJwb3BUaHVua1N0YWNrUHJl
c2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uIik7Ci19Ci0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQogewogICAgIEND
YWxsSGVscGVycyBqaXQ7CkBAIC0xMzcsNiArMTAxLDQyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gY2gKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlv
bkdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZy
YW1lKTsKKworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7
CisKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9u
UHRyVGFnKTsKKworICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKKworICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlBy
b2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBG
dW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXIpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJU
YWcsICJoYW5kbGVFeGNlcHRpb24iKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJh
dG9yKFZNJiB2bSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisjaWYgQ1BVKFg4Nl82NCkK
KyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BV
UmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjplc3ApOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIGpp
dC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVy
czo6bGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNvbnRp
bnVhdGlvbiA9IGppdC5qdW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAg
ICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7
CisgICAgcGF0Y2hCdWZmZXIubGluayhjb250aW51YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGhh
bmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAicG9wVGh1bmtTdGFja1ByZXNlcnZlc0Fu
ZEhhbmRsZUV4Y2VwdGlvbiIpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUYWdUeXBlPgogaW5s
aW5lIHZvaWQgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcg
cG9pbnRlckdQUiwgVGFnVHlwZSB0YWcpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEy
ICszNywxMiBAQCBjbGFzcyBWTTsKIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVy
YXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVF
eGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tHZW5lcmF0b3IoVk0mKTsKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRs
ZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogCiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhj
ZXB0aW9uR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0m
KTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVPcGVyYW5kc0ZvckNo
ZWNrcG9pbnQuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDaGVja3BvaW50
T1NSRXhpdFNpZGVTdGF0ZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNs
dWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNs
dWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKQEAgLTM3MCwxMyArMzcxLDIyIEBAIGlubGluZSBi
b29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYKICAgICAKICAgICBjb2RlQmxvY2stPnVw
ZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5q
aXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxC
YXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9j
aygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlKSB7CisgICAgICAgICAgICBjb2RlQmxvY2stPnNl
dHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkp
OworICAgICAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUo
Y29kZUJsb2NrKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+aml0TmV4dEludm9jYXRpb24oKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKCFj
b2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09ERUJM
T0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAoInRocmVzaG9sZCBu
b3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigp
KSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQg
dGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgCi0gICAgSklUV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGUgPSBKSVRXb3Jr
bGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2
bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGU6OkJhc2Vs
aW5lKSk7CisgICAgSklUV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGUgPSBKSVRXb3JrbGlz
dDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSwg
SklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLCBKSVRDb21w
aWxhdGlvbk1vZGU6OkJhc2VsaW5lKSk7CiAKICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6
dmVyYm9zZU9TUigpLCAiICAgIENvZGUgd2FzIGFscmVhZHkgY29tcGlsZWQuIik7CkBAIC00NjYs
OCArNDc2LDEwIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQogICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYm
IGNvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkp
IHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50
ZXIocGMpOwogICAgICAgICAqcHRyICs9IGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigp
Lm1fYWN0aXZlVGhyZXNob2xkOwotICAgICAgICBpZiAoKnB0ciA+PSBPcHRpb25zOjplYXJseVJl
dHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkKKyAgICAgICAgaWYgKCpwdHIgPj0gT3B0aW9u
czo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpIHsKKyAgICAgICAgICAgIGNv
ZGVCbG9jay0+ZW5zdXJlSklURGF0YShDb25jdXJyZW50SlNMb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spKTsgLy8gV2UncmUgcmV0dXJuaW5nIHRvIHRoZSBPU1IgZW50cnkgY29kZSBoZXJlLCB3aGlj
aCBleHBlY3RzIHRoYXQgbV9qaXREYXRhIGlzIG5vdCBudWxsLgogICAgICAgICAgICAgTExJTlRf
UkVUVVJOX1RXTyhMTEludDo6ZnV6emVyUmV0dXJuRWFybHlGcm9tTG9vcEhpbnRFbnRyeXBvaW50
KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIGNhbGxGcmFtZS0+dG9wT2ZGcmFtZSgpKTsK
KyAgICAgICAgfQogICAgIH0KICAgICAKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0
cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bj
b2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFBy
b2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAg
ICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEsIHQyKQogICAgICAgICBnZXQobV9zcmNEc3Qs
IHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xv
dwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3Ry
dWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGluIHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAg
aW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAgICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9m
ZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxl
SW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRo
UHJvZmlsZUludCwgdDEsIHQyKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAg
LTEwODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0
ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBl
LCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6
Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1ldGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9v
cGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIp
CiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BOZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQy
LCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRo
UHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BO
ZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQzKQogICAgIHJldHVybiAoSW50MzJUYWcsIHQy
KQogLm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJpYSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVT
bG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0
aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFy
aXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAgIHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0
ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAgZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3Rv
bVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3Jl
LCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFt
ZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBy
ZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3Jo
IHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEo
dDUsIHQyKQogICAgICAgICBnZXQobV9yaHMsIHQyKQogICAgICAgICBnZXQobV9saHMsIHQwKQpA
QCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1l
LCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQw
KQogICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcsIC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEg
dDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2Zp
bGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3Qs
IEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAg
ICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAg
ICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsxMTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3Vz
dG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93
CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAub3AxTm90SW50T3AyRG91YmxlCiAgICAgICAg
IGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJv
ZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0
cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBm
dDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6
CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFBy
b2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJ
bnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBm
dDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2Rl
TmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0
aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAgIGdldChtX2RzdCwg
dDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2Zp
bGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAg
Y2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVP
cGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjgzMDUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEsMTMgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZv
ckxvb3AoKQogICAgICAgICAgICAgbW92ZSBQQywgYTEKICAgICAgICAgICAgIGNDYWxsMihfbGxp
bnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBidHB6IHIwLCAucmVjb3ZlcgotCiAgICAgICAgICAg
ICBtb3ZlIHIxLCBzcAorCisgICAgICAgICAgICAjIEJhc2VsaW5lIHVzZXMgTExJbnQncyBQQiBy
ZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFudCBwb29sLgorICAgICAgICAgICAgbG9hZHAgQ29k
ZUJsb2NrW2Nmcl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1faml0RGF0YVtQ
Ql0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6OkpJVERhdGE6Om1faml0Q29uc3Rh
bnRQb29sW1BCXSwgUEIKKwogICAgICAgICAgICAgaWYgQVJNNjRFCiAgICAgICAgICAgICAgICAg
bGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAg
KyAoY29uc3RleHByIEdhdGU6Omxvb3BPU1JFbnRyeSkgKiBQdHJTaXplLCBhMgogICAgICAgICAg
ICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBA
IC0xMDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BK
bnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVy
YXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0
cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAg
ICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUs
ICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9zcmNEc3QsIHQw
KQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0
MykKQEAgLTEwNjksNyArMTA3MCw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0
cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9y
cSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3JlcSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAg
IHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5
QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAg
ICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTEzNCwxMSArMTEzNSw2IEBAIGVuZCkK
IAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXpl
LCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJp
dGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1f
YXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQog
ICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwg
dDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikKQEAgLTExNDYsMTIgKzExNDIsMTIgQEAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2Zm
ZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMK
LSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5
QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICByZXR1
cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAgYnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdh
dGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAwMDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQ
cm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShP
cE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogCiAu
b3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE2MCw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9t
U3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVO
YW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEs
IHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQogCi0gICAgICAgIG1hY3JvIHByb2Zp
bGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAg
IGVuZAotCiAgICAgICAgIGdldChtX3JocywgdDApCiAgICAgICAgIGdldChtX2xocywgdDIpCiAg
ICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsx
MTY5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAg
ICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQw
LCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAg
ICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUlu
dEludCwgdDUsIHQyKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAub3AxTm90SW50OgpAQCAt
MTE4NywxMCArMTE3OSwxMCBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUs
IG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1i
ZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJv
ZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29k
ZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDIpCiAgICAgICAgIGptcCAu
b3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AySW50OgotICAgICAgICBwcm9maWxlKEFy
aXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9w
Y29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDIpCiAgICAgICAgIGNpMmRz
IHQxLCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBA
IC0xMjA0LDkgKzExOTYsOSBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUs
IG9wCiAKICAgICAub3AyTm90SW50OgogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5p
dGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCi0gICAgICAgIGdldCht
X2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJv
ZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQyKQorICAgICAg
ICBnZXQobV9kc3QsIHQyKQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVt
YmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTQyMCw3ICsxNDIwLDggQEAgZW5kCiAKIG1hY3JvIGNo
ZWNrU3dpdGNoVG9KSVQoaW5jcmVtZW50LCBhY3Rpb24pCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nm
cl0sIHQwCi0gICAgYmFkZGlzIGluY3JlbWVudCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNv
dW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51
ZQorICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyW3QwXSwgdDAKKyAg
ICBiYWRkaXMgaW5jcmVtZW50LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0
MF0sIC5jb250aW51ZQogICAgIGFjdGlvbigpCiAgICAgLmNvbnRpbnVlOgogZW5kCkBAIC0xNTAz
LDcgKzE1MDQsOCBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAg
ICAgY29kZUJsb2NrR2V0dGVyKHQxKQogICAgIGNvZGVCbG9ja1NldHRlcih0MSkKICAgICBpZiBu
b3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQotICAgICAgICBiYWRkaXMgNSwgQ29kZUJsb2NrOjpt
X2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRl
clt0MV0sIC5jb250aW51ZQorICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRl
Q291bnRlclt0MV0sIHQwCisgICAgICAgIGJhZGRpcyA1LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50
ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgICAgICBpZiBKU1ZBTFVFNjQKICAgICAg
ICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAgICAgICAgbW92ZSBQQywgYTEKQEAgLTE2MTcsMTQg
KzE2MTksMTQgQEAgbWFjcm8gZnVuY3Rpb25Jbml0aWFsaXphdGlvbihwcm9maWxlQXJnUwogICAg
ICMgb3B0aW1hbCB3YXkgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIG1vcmUgdGhhbiBmaXZl
IHJlZ2lzdGVycyBhdmFpbGFibGUKICAgICAjIGZvciBhcmJpdHJhcnkgdXNlIGluIHRoZSBpbnRl
cnByZXRlci4KICAgICBsb2FkaSBDb2RlQmxvY2s6Om1fbnVtUGFyYW1ldGVyc1t0MV0sIHQwCi0g
ICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQwICMgVXNlIGFkZGkgYmVjYXVzZSB0aGF0J3Mgd2hh
dCBoYXMgdGhlIHBlZXBob2xlCisgICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQwCiAgICAgYXNz
ZXJ0KG1hY3JvIChvaykgYnBndGVxIHQwLCAwLCBvayBlbmQpCiAgICAgYnRweiB0MCwgLmFyZ3Vt
ZW50UHJvZmlsZURvbmUKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2Zp
bGVzICsgRml4ZWRWZWN0b3I6Om1fc3RvcmFnZSArIFJlZkNvdW50ZWRBcnJheTo6bV9kYXRhW3Qx
XSwgdDMKICAgICBidHB6IHQzLCAuYXJndW1lbnRQcm9maWxlRG9uZSAjIFdoZW4gd2UgY2FuJ3Qg
SklULCB3ZSBkb24ndCBhbGxvY2F0ZSBhbnkgYXJndW1lbnQgdmFsdWUgcHJvZmlsZXMuCiAgICAg
bXVscCBzaXplb2YgVmFsdWVQcm9maWxlLCB0MCwgdDIgIyBBYWFhYWhoaGghIE5lZWQgc3RyZW5n
dGggcmVkdWN0aW9uIQogICAgIGxzaGlmdHAgMywgdDAgIyBvZmZzZXQgb2YgbGFzdCBKU1ZhbHVl
IGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCi0gICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVu
ZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gQ29kZUJsb2NrOjptX2FyZ3VtZW50VmFsdWVQcm9m
aWxlcy4KKyAgICBhZGRwIHQyLCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBh
cnJheSBpbiB0aGUgdmFsdWUgcHJvZmlsZSBhcnJheS4KIC5hcmd1bWVudFByb2ZpbGVMb29wOgog
ICAgIGlmIEpTVkFMVUU2NAogICAgICAgICBsb2FkcSBUaGlzQXJndW1lbnRPZmZzZXQgLSA4ICsg
cHJvZmlsZUFyZ1NraXAgKiA4W2NmciwgdDBdLCB0MgpAQCAtMjU2Myw2ICsyNTY1LDE3IEBAIG1h
Y3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRw
ICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1w
CisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCitt
YWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0
YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9m
aWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1f
Yml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82
NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJl
IGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIu
aAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJs
aWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBp
bmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZp
ZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwot
ICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hl
YWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVC
bG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENv
ZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0
cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3Qg
cmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJs
ZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hl
YWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBp
KQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRl
bnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQog
ewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soY29kZUJs
b2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5
cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5V
U0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVy
biBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWRUeXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYWNoZWRUeXBl
cy5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5h
bWVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDYWNoZUVycm9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmgiCkBAIC0xOTE4LDYgKzE5MTksOCBAQCBwdWJsaWM6CiAKICAg
ICB1bnNpZ25lZCBudW1WYWx1ZVByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYWx1ZVBy
b2ZpbGVzOyB9CiAgICAgdW5zaWduZWQgbnVtQXJyYXlQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtQXJyYXlQcm9maWxlczsgfQorICAgIHVuc2lnbmVkIG51bUJpbmFyeUFyaXRoUHJvZmls
ZXMoKSBjb25zdCB7IHJldHVybiBtX251bUJpbmFyeUFyaXRoUHJvZmlsZXM7IH0KKyAgICB1bnNp
Z25lZCBudW1VbmFyeUFyaXRoUHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bVVuYXJ5QXJp
dGhQcm9maWxlczsgfQogCiBwcml2YXRlOgogICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdp
c3RlcjsKQEAgLTE5NTIsNiArMTk1NSw4IEBAIHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX251
bVZhbHVlUHJvZmlsZXM7CiAgICAgdW5zaWduZWQgbV9udW1BcnJheVByb2ZpbGVzOworICAgIHVu
c2lnbmVkIG1fbnVtQmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICB1bnNpZ25lZCBtX251bVVuYXJ5
QXJpdGhQcm9maWxlczsKIAogICAgIENhY2hlZE1ldGFkYXRhVGFibGUgbV9tZXRhZGF0YTsKIApA
QCAtMjE2MCw2ICsyMTY1LDggQEAgQUxXQVlTX0lOTElORSBVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZQogICAgICwgbV9yYXJlRGF0YShjYWNoZWRDb2RlQmxvY2sucmFyZURhdGEoZGVjb2Rlcikp
CiAgICAgLCBtX3ZhbHVlUHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bVZhbHVlUHJvZmlsZXMo
KSkKICAgICAsIG1fYXJyYXlQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVtQXJyYXlQcm9maWxl
cygpKQorICAgICwgbV9iaW5hcnlBcml0aFByb2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1CaW5h
cnlBcml0aFByb2ZpbGVzKCkpCisgICAgLCBtX3VuYXJ5QXJpdGhQcm9maWxlcyhjYWNoZWRDb2Rl
QmxvY2subnVtVW5hcnlBcml0aFByb2ZpbGVzKCkpCiB7CiB9CiAKQEAgLTIzMzcsNiArMjM0NCw4
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29kZUIKICAgICBtX2hhc0No
ZWNrcG9pbnRzID0gY29kZUJsb2NrLm1faGFzQ2hlY2twb2ludHM7CiAgICAgbV9udW1WYWx1ZVBy
b2ZpbGVzID0gY29kZUJsb2NrLm1fdmFsdWVQcm9maWxlcy5zaXplKCk7CiAgICAgbV9udW1BcnJh
eVByb2ZpbGVzID0gY29kZUJsb2NrLm1fYXJyYXlQcm9maWxlcy5zaXplKCk7CisgICAgbV9udW1C
aW5hcnlBcml0aFByb2ZpbGVzID0gY29kZUJsb2NrLm1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXpl
KCk7CisgICAgbV9udW1VbmFyeUFyaXRoUHJvZmlsZXMgPSBjb2RlQmxvY2subV91bmFyeUFyaXRo
UHJvZmlsZXMuc2l6ZSgpOwogCiAgICAgbV9tZXRhZGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJs
b2NrLm1fbWV0YWRhdGEuZ2V0KCkpOwogICAgIG1fcmFyZURhdGEuZW5jb2RlKGVuY29kZXIsIGNv
ZGVCbG9jay5tX3JhcmVEYXRhLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChz
bG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9m
aWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUg
cmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2Zp
bGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJv
ZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmco
b3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0lu
dCgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODks
NiArMjg5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0
T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUs
IG1fcmFyZURhdGEpOyB9CiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0
cmluZ0luUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNT
dHJpbmcpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tG
b3JDYWxsKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9j
b2RlQmxvY2tGb3JDYWxsKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9m
Q29kZUJsb2NrRm9yQ29uc3RydWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9u
RXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzQsOCArNDM0
LDYgQEAgdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKAogICAgIE9wdGlv
bnM6OnVzZUNvbmN1cnJlbnRHQygpID0gZmFsc2U7CiAjZW5kaWYKIAotICAgIGlmICghaXNBUk02
NCgpKQotICAgICAgICBPcHRpb25zOjp1c2VEYXRhSUMoKSA9IGZhbHNlOwogICAgIGlmICghT3B0
aW9uczo6dXNlRGF0YUlDKCkpCiAgICAgICAgIE9wdGlvbnM6OnVzZURhdGFJQ0luT3B0aW1pemlu
Z0pJVCgpID0gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw2IEBA
IGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihJbnQzMiwgZXZhbFRo
cmVzaG9sZE11bHRpcGxpZXIsIDEwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVk
LCBtYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0aCwgMjU2LCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICBcCi0gICAgdihCb29sLCByYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hl
Y2twb2ludHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMyLCBtYXhpbXVt
RXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yQmFzZWxpbmUsIDEwMDAsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVu
Q2hlY2twb2ludHNGb3JVcHBlclRpZXJzLCA1MDAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
XApAQCAtNTMyLDYgKzUzMSw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7
CiAgICAgdihCb29sLCB1c2VEYXRhSUMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KEJvb2wsIHVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIHYoQm9vbCwgdXNlRGF0YUlDU2hhcmluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAorICAgIHYoQm9vbCwgdXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZywgdHJ1ZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgXAogICAgIC8qIEZlYXR1cmUgRmxhZ3MgKi9cCiAgICAgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5j
cHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
cmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsMTAgKzM5NiwxOSBAQCB2
b2lkIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpCiAgICAgaWYgKE9wdGlvbnM6
OnZhbGlkYXRlQnl0ZWNvZGUoKSkKICAgICAgICAgY29kZUJsb2NrLT52YWxpZGF0ZSgpOwogCi0g
ICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpCi0gICAgICAgIHNldHVwTExJbnQoY29kZUJsb2Nr
KTsKLSAgICBlbHNlCi0gICAgICAgIHNldHVwSklUKHZtLCBjb2RlQmxvY2spOworICAgIGJvb2wg
aW5zdGFsbGVkVW5saW5rZWRCYXNlbGluZUNvZGUgPSBmYWxzZTsKKyNpZiBFTkFCTEUoSklUKQor
ICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+
dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICBj
b2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVh
c2VOb25OdWxsKCkpOworICAgICAgICBpbnN0YWxsZWRVbmxpbmtlZEJhc2VsaW5lQ29kZSA9IHRy
dWU7CisgICAgfQorI2VuZGlmCisgICAgaWYgKCFpbnN0YWxsZWRVbmxpbmtlZEJhc2VsaW5lQ29k
ZSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKKyAgICAgICAgICAgIHNldHVw
TExJbnQoY29kZUJsb2NrKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0dXBKSVQodm0s
IGNvZGVCbG9jayk7CisgICAgfQogCiAgICAgaW5zdGFsbENvZGUodm0sIGNvZGVCbG9jaywgY29k
ZUJsb2NrLT5jb2RlVHlwZSgpLCBjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpKTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVy
VXBDb3VudGVyLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKCkKICAgICB7CiAgICAg
ICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9CQlEoKSkKLSAgICAgICAgICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVw
KCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVy
V2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9v
bCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCkBAIC02NSw5ICs2NSw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplU29vbigpCiAgICAgewogICAgICAgICBpZiAoT3B0
aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hv
bGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAg
ICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXpl
U29vbigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlv
bnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgICAg
IHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7
CiAgICAgfQogCiAgICAgc3RydWN0IE9TUkVudHJ5RGF0YSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKIAogVGllclVwQ291bnQ6OlRpZXJVcENvdW50KCkKIHsKLSAgICBzZXROZXdUaHJlc2hvbGQo
T3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsK
KyAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRl
cldhcm1VcCgpKTsKIH0KIAogVGllclVwQ291bnQ6On5UaWVyVXBDb3VudCgpID0gZGVmYXVsdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVw
Q291bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBvcHRpbWl6ZUFmdGVyV2FybVVwKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAg
ICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6
IE9NRy1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuIik7Ci0gICAgICAgIHNldE5ld1RocmVzaG9s
ZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIp
OworICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1p
emVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25U
aHJlc2hvbGRSZWFjaGVkKCkKQEAgLTkwLDE0ICs5MCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBv
cHRpbWl6ZU5leHRJbnZvY2F0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAg
ICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6
IE9NRy1vcHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNo
b2xkKDAsIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCk7CiAgICAgfQogCiAg
ICAgdm9pZCBvcHRpbWl6ZVNvb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAg
ICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjog
T01HLW9wdGltaXppbmcgc29vbi4iKTsKICAgICAgICAgLy8gRklYTUU6IE5lZWQgYWRqdXN0bWVu
dCBvbmNlIHdlIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdhc20gZnVuY3Rpb25zLgotICAg
ICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29u
KCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xk
Rm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAogICAgIHZvaWQgc2V0T3B0aW1pemF0aW9u
VGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIx
LTA5LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIEJ1aWxk
IGFuIHVubGlua2VkIGJhc2VsaW5lIEpJVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjIzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84MjMyMTc3
Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0
Zi9CYWcuaDoKKyAgICAgICAgKiB3dGYvUGFja2VkLmg6CisgICAgICAgIChXVEY6OlBhY2tlZEFs
aWduZWRQdHI6Om9wZXJhdG9yKiBjb25zdCk6CisKIDIwMjEtMDktMjQgIERldmluIFJvdXNzbyAg
PGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCB0eXBlY2hlY2tpbmcgYGlzYCBvdmVy
bG9hZHMgZm9yIGBzdGQ6OnVuaXF1ZV9wdHJgLCBgV1RGOjpVbmlxdWVSZWZgLCBhbmQgYFdURjo6
V2Vha1B0cmAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0JhZy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcu
aAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMjAgQEAgcHVibGljOgogICAgICAgICBvdGhl
ci5tX2hlYWQgPSBudWxscHRyOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Cisg
ICAgQmFnJiBvcGVyYXRvcj0oQmFnPFQsIFU+JiYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAo
dW53cmFwcGVkSGVhZCgpID09IG90aGVyLnVud3JhcHBlZEhlYWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKworICAgICAgICBCYWcgZGVzdHJveTsKKyAgICAgICAgZGVzdHJveS5tX2hl
YWQgPSB1bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG1faGVhZCA9IG90aGVyLnVud3JhcHBlZEhl
YWQoKTsKKyAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorCiAgICAgfkJhZygpCiAgICAgewogICAgICAgICBjbGVhcigpOwpJbmRl
eDogU291cmNlL1dURi93dGYvUGFja2VkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
UGFja2VkLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDEwIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBU
KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KLSAgICBUJiBvcGVyYXRvcioo
KSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVID0g
VD4KKyAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc192b2lkX3Y8VT4sIFUmPjo6
dHlwZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KKwogICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWdldCgpOyB9CiAKICAgICAvLyBUaGlzIGNvbnZlcnNp
b24gb3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRv
IG90aGVyIGludGVnZXIgdHlwZXMuCg==
</data>
<flag name="commit-queue"
          id="462807"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439204</attachid>
            <date>2021-09-24 16:14:03 -0700</date>
            <delta_ts>2021-09-24 16:22:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>646943</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzOCBA
QAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhZGRzIGFuICJ1bmxpbmtlZCIgYmFzZWxpbmUgSklUIHRvIEpTVkFMVUU2
NCBwbGF0Zm9ybXMuIFRoZSBKSVQKKyAgICAgICAgY29kZSBwcm9kdWNlZCBieSB0aGlzIGJhc2Vs
aW5lIEpJVCBjYW4gYmUgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3MgdGhhdAorICAgICAg
ICBzaGFyZSBhbiBVbmxpbmtlZENvZGVCbG9jay4gVGhlIGJlbmVmaXQgb2YgdGhpcyBpcywgaWYg
d2UncmUgY3JlYXRpbmcgYSBDb2RlQmxvY2sKKyAgICAgICAgZnJvbSBhbiBVbmxpbmtlZENvZGVC
bG9jayB0aGF0IGFscmVhZHkgY29tcGlsZWQgYW4gdW5saW5rZWQgYmFzZWxpbmUgSklUCisgICAg
ICAgIGluc3RhbmNlLCB0aGlzIG5ldyBDb2RlQmxvY2sganVzdCBzdGFydHMgb2ZmIGV4ZWN1dGlu
ZyBpbiB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgICJmb3IgZnJlZSIuCisgICAgICAgIAorICAg
ICAgICBUbyBtYWtlIHRoaXMgd29yaywgdGhlIGNvZGUgd2UgZW1pdCBub3cgbmVlZHMgdG8gYmUg
aW5kZXBlbmRlbnQgb2YgYSBzcGVjaWZpYworICAgICAgICBDb2RlQmxvY2sgaW5zdGFuY2UuIFdl
IHVzZSBhIENvZGVCbG9jayBpbnN0YW5jZSBmb3IgbWluaW1hbCBwcm9maWxpbmcgaW5mb3JtYXRp
b24KKyAgICAgICAgd2hlbiBjb21waWxpbmcsIGJ1dCBvdGhlcndpc2UsIHRoZSBjb2RlIGlzIHRp
ZWQgdG8gdGhlIFVubGlua2VkQ29kZUJsb2NrLiBXaGVuCisgICAgICAgIHdlIG5lZWQgQ29kZUJs
b2NrIHNwZWNpZmljIGluZm9ybWF0aW9uLCB3ZSBsb2FkIGl0LiBUaGlzIHVzdWFsbHkgbWVhbnMg
dGhpbmdzCisgICAgICAgIGxpa2Ugd2UnbGwgbG9hZCB0aGluZ3MgZnJvbSB0aGUgTWV0YWRhdGEg
ZHluYW1pY2FsbHkuIFRoaXMgcGF0Y2ggYWxzbyBhZGRzIGEKKyAgICAgICAgImxpbmtlZCBjb25z
dGFudCBwb29sIiBjb25jZXB0LCBhbmQgYW55dGltZSB3ZSBpbnN0YW50aWF0ZSBzdWNoIGEgQ29k
ZUJsb2NrLAorICAgICAgICB3ZSBhbHNvIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcyAibGlua2Vk
IGNvbnN0YW50IHBvb2wiLiBUaGlzIGNvbnRhaW5zIHRoaW5ncworICAgICAgICBsaWtlIG91ciBp
bmxpbmUgY2FjaGUgZGF0YSBzdHJ1Y3R1cmVzIChTdHJ1Y3R1cmVTdHViSW5mbyopLCBKU0dsb2Jh
bE9iamVjdCosCisgICAgICAgIGV0Yy4KKyAgICAgICAgCisgICAgICAgIFVubGlua2VkIGJhc2Vs
aW5lIEpJVCBhbHdheXMgcnVucyBJQ3MgaW4gdGhlICJkYXRhIiBtb2RlLiBUbyBtYWtlIHRoaXMg
d29yaywgSQorICAgICAgICBtYWRlIGRhdGEgSUNzIHdvcmsgb24geDg2XzY0LiBUbyBkbyB0aGlz
LCB3ZSBubyBsb25nZXIgY2FsbC9yZXQgdG8gdGhlIElDLgorICAgICAgICBJbnN0ZWFkLCB3ZSBq
dW1wIHRvIHRoZSBJQywgYW5kIHRoZSBJQyBqdW1wcyBiYWNrIGJ5IGxvYWRpbmcgdGhlICJkb25l
IiBsb2NhdGlvbgorICAgICAgICBmcm9tIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBkeW5hbWljYWxs
eS4gVGhpcyBzaW1wbGlmaWVzIHRoZSBkZXNpZ24gdG8gbm90IGJlCisgICAgICAgIGJhc2VkIG9u
IHRoZSBhcm02NCBjYWxsaW5nIGNvbnZlbnRpb24sIGFuZCBrZWVwcyB0aGUgc2FtZSBwZXJmb3Jt
YW5jZSBjaGFyYWN0ZXJpc3RpY3MuIAorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNv
IGFkZHMgYSBuZXcgdmVyc2lvbiBvZiBJbmxpbmVBY2Nlc3MgdGhhdCBpcyBvbmx5IHVzZWQgaW4g
YmFzZWxpbmUKKyAgICAgICAgSklUIChmb3Igbm93KS4gSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIG1h
a2UgdGhlIERGRy9GVEwgYWxzbyB1c2UgdGhpcyBmb3IgRGF0YQorICAgICAgICBJQ3MuIEJ1dCB3
ZSBkb24ndCBuZWVkIHRvIGRvIHRoYXQgeWV0IHNpbmNlIHRob3NlIHRpZXJzIGRvbid0IHVzZSBk
YXRhIElDcyBieQorICAgICAgICBkZWZhdWx0LiBUaGUgYmFzZWxpbmUgSklUIG5vdyBoYXMgYSBw
dXJlIGRhdGEgSUMgYXBwcm9hY2ggdG8gSW5saW5lQWNjZXNzLiBTbworICAgICAgICBpbnN0ZWFk
IG9mIHJlcGF0Y2hpbmcgY29kZSwgd2UgcmVwYXRjaCBmaWVsZHMgd2UgbG9hZCBkeW5hbWljYWxs
eS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgYSBmZXcgdGhp
bmdzIGluIE9TUiBleGl0LCB3aGVyZSBib3RoIERGRy9GVEwgd2VyZQorICAgICAgICBzdG9yaW5n
IGNhbGxlZSBzYXZlcyB0byB0aGUgY2FsbGVlIHNhdmVzIGJ1ZmZlciBpbiBhIHdlaXJkIHBsYWNl
LCBhbmQgc2VwYXJhdGUKKyAgICAgICAgZnJvbSBvbmUgYW5vdGhlci4gSSBub3RpY2VkIHRoaXMg
Y29kZSBjYW4gYmUgc2ltcGxpZmllZCBpZiB3ZSBqdXN0IHN0b3JlCisgICAgICAgIGNhbGxlZSBz
YXZlcyBhdCB0aGUgZW5kIG9mIHRoZSBPU1IgZXhpdCBoYW5kbGVyLCBhbmQgZnJvbSBjb21tb24g
SklUIGVtaXNzaW9uCisgICAgICAgIGNvZGUuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNo
IGFsc28gZml4ZXMgYSBidWcgd2hlcmUgd2UgY291bGQgZW5kIHVwIHdpdGggdGhlIHdyb25nIChh
bmQgYWx3YXlzCisgICAgICAgIG1vcmUgbmVnYXRpdmUpIFNQIGluIHRoZSBiYXNlbGluZSBKSVQu
IFRoaXMgY291bGQgaGFwcGVuIHdoZW4gd2UgT1NSIGV4aXQKKyAgICAgICAgZnJvbSBhbiBpbmxp
bmVkIGdldHRlci9zZXR0ZXIuIFRoZSBPU1IgZXhpdCBjb2RlIHB1dHMgdGhlIHJldHVybiBQQyB3
aGVuCisgICAgICAgIHJldHVybmluZyB0byB0aGUgY2FsbCBzaXRlIG9mIHRoZSBnZXR0ZXIvc2V0
dGVyIHRvIGJlIHRoZSBpbmxpbmUgY2FjaGUncworICAgICAgICAiZG9uZSBsb2NhdGlvbiIuIEhv
d2V2ZXIsIHRoaXMgImRvbmUgbG9jYXRpb24iIGRpZG4ndCB1c2VkIHRvIHJlc3RvcmUgU1AuCisg
ICAgICAgIFRoaXMgcGF0Y2ggY29uc2VydmF0aXZlbHkgbWFrZXMgaXQgc28gdGhhdCB3ZSByZXN0
b3JlIHRoZSBTUCBhdCB0aGVzZSBzaXRlcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbWVh
c3VyZWQgYXMgYSAxJSBzcGVlZHVwIG9uIFNwZWVkb21ldGVyMi4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlT3Bl
cmFuZHNGb3JDaGVja3BvaW50Lmg6CisgICAgICAgIChKU0M6OnZhbHVlUHJvZmlsZU9mZnNldEZv
cik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjplbWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RmFz
dFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKToKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgpOgorICAgICAgICAo
SlNDOjpDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMpOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNsb3dT
dHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjphZGRyZXNzT2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZSk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6ZnJhbWVSZWdpc3RlckNvdW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiaW5hcnlB
cml0aFByb2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5hcnlBcml0aFBy
b2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluZFBDKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpqaXRTb29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRO
ZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRBZGRJQyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUTXVsSUMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVFN1YklDKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRKSVROZWdJQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6aml0QWZ0ZXJXYXJtVXApOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29u
c3RhbnRQb29sKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFzZWxpbmVKSVRDb25zdGFudFBvb2wpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpkb250SklUQW55dGltZVNvb24pOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duQ2VsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6YWRkTWF0aElDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzZXRKSVRDb2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRD
b2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzd2l0Y2hKdW1wVGFi
bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJh
c2VsaW5lU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNlbGlu
ZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZGZnU3dp
dGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdTdHJpbmdTd2l0Y2hK
dW1wVGFibGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uu
aDoKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjpzZXRUaHJlc2hvbGQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0
aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJ
ZE1ldGFkYXRhLmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0
aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpHZXRCeUlkTW9kZU1ldGFk
YXRhOjpvZmZzZXRPZk1vZGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcDoK
KyAgICAgICAgKEpTQzo6R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0
U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEdl
dHRlcik6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6
OkluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToK
KyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5s
aW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UpOgorICAgICAgICAoSlND
OjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChK
U0M6OklubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OklubGlu
ZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyk6CisgICAgICAgIChKU0M6OklubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2Vzcyk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmg6
CisgICAgICAgICogYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmg6CisgICAgICAgIChK
U0M6Okl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMpOgorICAgICAgICAq
IGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6CisgICAgICAgIChKU0M6OkxMSW50Q2FsbExp
bmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSk6CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2Rl
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAo
SlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OmNhbGN1bGF0ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0
aW9uSGFuZGxpbmcpOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNl
cnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMpOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgICogYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0
YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5jcHA6CisgICAgICAg
IChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OmluaXRHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0UHV0QnlJZFJlcGxhY2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5p
dEluQnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNz
Q2FzZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZE
b25lTG9jYXRpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHA6CisgICAg
ICAgIChKU0M6OnByaW50U3VwZXJTYW1wbGVyU3RhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0lk
ZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dGhyZXNob2xkRm9y
SklUKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJv
ZmlsZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6Omluc3RydWN0aW9uQXQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmJpbmFyeUFyaXRoUHJvZmlsZSk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp1bmFyeUFyaXRoUHJvZmlsZSk6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpsbGludEV4ZWN1dGVDb3VudGVyKToKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaDoKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRNZXRhZGF0YVRhYmxlOjpvZmZzZXRJbk1ldGFkYXRhVGFibGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNl
OjpWYWx1ZVByb2ZpbGVCYXNlKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQmFzZTo6Y2xl
YXJCdWNrZXRzKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVj
a2V0KToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb2RlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAqIGRmZy9E
RkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxpbmsp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJl
cGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmhhbmRsZUV4aXRDb3VudHMp
OgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRK
dW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRQcml2YXRlTmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVWYWx1ZVN1Yik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dTaGFkb3dDaGlja2VuVGFpbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExKSVRDb2Rl
Lmg6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Omxpbmsp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjphZGRNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlVW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpjb21waWxlQmluYXJ5TWF0aElDKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVB1dFByaXZhdGVOYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAg
ICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29t
cGlsZVN0dWIpOgorICAgICAgICAqIGdlbmVyYXRvci9NZXRhZGF0YS5yYjoKKyAgICAgICAgKiBq
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpz
dG9yZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVh
bENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMu
aDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6CisgICAgICAgICogaml0L0Jhc2VsaW5lSklUQ29kZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKToKKyAg
ICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZGRKSVRNdWxJQyk6CisgICAgICAgIChKU0M6Ok1h
dGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMpOgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFk
ZEpJVE5lZ0lDKToKKyAgICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MpOgor
ICAgICAgICAoSlNDOjpCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAg
IChKU0M6OkJhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAgICogaml0
L0Jhc2VsaW5lSklUQ29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SklUQ29uc3RhbnRQb29s
OjphZGQpOgorICAgICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OnNpemUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OmF0IGNvbnN0KToKKyAgICAgICAgKiBqaXQvQmFz
ZWxpbmVKSVRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6QmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6
ZSk6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkNDYWxs
SGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKToKKyAgICAgICAgKEpTQzo6
Q0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldCk6CisgICAgICAgICogaml0
L0NDYWxsSGVscGVycy5oOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHA6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oOgorICAgICAgICAq
IGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpDYWxsRnJhbWVTaHVmZmxlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpwcmVwYXJlRm9yVGFpbENhbGwpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5o
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c25hcHNob3QgY29uc3QpOgorICAg
ICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OkpJVCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRWYXJS
ZWFkT25seUNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc2V0U1ApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5k
Q29uc3RhbnRQb29sUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpm
aW5hbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcik6CisgICAgICAgIChK
U0M6OkpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKToKKyAgICAgICAgKiBqaXQvSklULmg6Cisg
ICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVnYXRlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2FkZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tdWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3ViKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2Fs
bEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2l0ZXJhdG9yX25leHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX25leHQpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxl
U2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dD
YXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpT
Qzo6SklUQ29kZTo6dXNlRGF0YUlDKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6cGNUb0NvZGVP
cmlnaW5NYXApOgorICAgICAgICAqIGppdC9KSVRDb21waWxhdGlvbktleS5jcHA6CisgICAgICAg
IChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklU
Q29tcGlsYXRpb25LZXkuaDoKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OkpJVENv
bXBpbGF0aW9uS2V5KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJhdG9y
ISBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpvcGVy
YXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Omhhc2ggY29u
c3QpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6cHJvZmlsZWRCbG9jayBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXpl
KToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJ
VEdldEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUdldEJ5SWRJbmxpbmVB
Y2Nlc3MpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJ
VFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkpJVERlbEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklURGVsQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAg
IChKU0M6OkpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAo
SlNDOjpKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpKSVRHZXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXRoKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0
YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudEludCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6aXNLbm93bkNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdldENv
bnN0YW50T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6
bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmFkdmFuY2VUb05l
eHRDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdExvYWREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkpJVDo6anVtcFRhcmdldCk6CisgICAgICAgIChKU0M6OkpJVDo6
bG9hZFB0ckZyb21NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZDMyRnJvbU1ldGFk
YXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkOEZyb21NZXRhZGF0YSk6CisgICAgICAgIChK
U0M6OkpJVDo6c3RvcmU4VG9NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6c3RvcmUzMlRv
TWV0YWRhdGEpOgorICAgICAgICAoSlNDOjpKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
SklUOjpsb2FkR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29kZUJsb2Nr
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEdldFB1dEluZm8pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZSk6IERlbGV0ZWQuCisgICAg
ICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9u
dWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzVHJ1dGh5
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dp
dGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVj
a190cmFwcyk6CisgICAgICAgIChKU0M6OkpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5l
d0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYXJndW1lbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9v
Zik6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdHlwZW9mX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SklUX09QRVJBVElPTik6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBqaXQvSklUUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmtleSk6CisgICAgICAg
ICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6c2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9k
ZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
aW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQcml2YXRlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SGFzUHJpdmF0ZVNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19w
cml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRl
X2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmspOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29w
ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKToKKyAgICAg
ICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF90
b19zY29wZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1
cmVWYXIpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9wcml2YXRlX2Jy
YW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9pbnRl
cm5hbF9maWVsZCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUdldEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeSk6CisgICAgICAgIChK
U0M6OnRyeUNhY2hlSW5CeSk6CisgICAgICAgIChKU0M6OnVubGlua0NhbGwpOgorICAgICAgICAq
IGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpoYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxl
RXhjZXB0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6Cisg
ICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6
aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRf
U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayk6CisgICAgICAgICogcnVudGltZS9DYWNoZWRU
eXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtQmluYXJ5QXJpdGhQ
cm9maWxlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtVW5hcnlB
cml0aFByb2ZpbGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9j
a1R5cGU+OjplbmNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoK
KyAgICAgICAgKEpTQzo6dXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKToKKyAgICAg
ICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlv
bnMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1l
L1NjcmlwdEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpw
cmVwYXJlRm9yRXhlY3V0aW9uSW1wbCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRUaWVyVXBD
b3VudGVyLmg6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6b3B0aW1p
emVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6
b3B0aW1pemVTb29uKToKKyAgICAgICAgKiB3YXNtL1dhc21UaWVyVXBDb3VudC5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50OjpUaWVyVXBDb3VudCk6CisgICAgICAgICogd2Fz
bS9XYXNtVGllclVwQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6Om9w
dGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6b3B0
aW1pemVOZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50Ojpv
cHRpbWl6ZVNvb24pOgorCiAyMDIxLTA5LTIzICBQaGlsaXAgQ2hpbWVudG8gIDxwY2hpbWVudG9A
aWdhbGlhLmNvbT4KIAogICAgICAgICBWYXJpb3VzIHR3ZWFrcyBpbiBwcmVwYXJhdGlvbiBmb3Ig
VGVtcG9yYWwuSW5zdGFudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC02MTEsNiArNjExLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCiAgICAgYnVp
bHRpbnMvQnVpbHRpblV0aWxzLmgKIAorICAgIGJ5dGVjb2RlL0FyaXRoUHJvZmlsZS5oCiAgICAg
Ynl0ZWNvZGUvQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvQXJyYXlQcm9m
aWxlLmgKICAgICBieXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25zLmgKQEAgLTgzNyw2ICs4Mzgs
NyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAKICAgICBqaXQv
QXNzZW1ibHlIZWxwZXJzLmgKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaAorICAg
IGppdC9CYXNlbGluZUpJVENvZGUuaAogICAgIGppdC9DQ2FsbEhlbHBlcnMuaAogICAgIGppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmgKICAgICBqaXQvRXhlY3V0YWJsZU1lbW9yeUhhbmRsZS5oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYxOSw2ICs2
MTksNyBAQCBpbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAogaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcAogCiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAoraml0L0Jhc2VsaW5lSklUQ29k
ZS5jcHAKIGppdC9CYXNlbGluZUpJVFBsYW4uY3BwCiBqaXQvQmluYXJ5U3dpdGNoLmNwcAogaml0
L0NDYWxsSGVscGVycy5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTAwLDYgKzkwMCw3IEBA
CiAJCTUyQ0QwRjVEMjI0MkY1NjkwMDRBMThBNSAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBG
cmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVD
ODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKIAkJNTJDRDBGNUUy
MjQyRjU2OTAwNEExOEE1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDcz
Njk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjY4MjI0MkY3
MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAq
LzsgfTsKKwkJNTJERDAwMDgyNkUwMzlCOTAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJERDAwMDYyNkUw
MzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyRUVENzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBG
dW5jdGlvbkFsbG93bGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJFRUQ3OTMyNDkyQjg2ODAwOEY0QzkzIC8qIEZ1bmN0aW9uQWxsb3dsaXN0Lmgg
Ki87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgg
Ki87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIx
MUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSAqLzsgfTsKQEAgLTEyMjAs
NyArMTIyMSw3IEBACiAJCTc5ODcyQzQ4MjIxQkJBRjMwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4NzJD
NDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFzZUludGVybmFsLmggKi87IH07CiAJCTc5OUVGN0M0
MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBC
M1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTA5MDdFMUQ3Njg0
NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTc5QTIyODM2MUQzNUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLzsgfTsKKwkJNzlBMjI4
MzYxRDM1RDcxRjAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMjI4MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFy
aXRoUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTc5QUJCMTdFMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUJCMTdDMUU1Q0NC
NTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUFDMzBGRjFGOTk1MzY0MDA0ODRGRDcgLyogT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFDMzBGRTFGOTk1MzYzMDA0ODRGRDcgLyogT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGVJbmxpbmVzLmggKi87IH07CiAJCTc5QUYwQkU0MUQzRUZENEMwMEU5NUZB
NSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUYwQkUzMUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJ
bmxpbmVSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMzY3NCw2ICszNjc1LDggQEAKIAkJNTJDRDBGNjQyMjQyRjU2OTAwNEExOEE1IC8q
IHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9
ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9
IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTUyQ0QwRjY3
MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBwYXRoID0gZGZnL3Rlc3RkZmcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQxMzA4RjIyMUNFMDNBMDA5QzgzNkMgLyogZm9vLmpz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNjI2RTAzOUIzMDA1NEU0MDggLyogQmFzZWxp
bmVKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2VsaW5lSklUQ29kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNzI2RTAzOUI0MDA1NEU0MDggLyogQmFzZWxpbmVK
SVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2VsaW5lSklUQ29kZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkyMjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5j
dGlvbkFsbG93bGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvbkFsbG93bGlzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzkzMjQ5MkI4NjgwMDhGNEM5
MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlvbkFsbG93bGlz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkY2QzM1QjFFNzFFQjA4MDA4MUY0
Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBwYXRoID0g
anMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNjI3Niw2ICs2Mjc5LDggQEAKIAkJCQk2Qjc2N0U3QTI2NzkxRjI3MDAxN0Y4RDEg
LyogQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaCAqLywKIAkJCQk3MjM5OThGNjI2NURCQ0RCMDA1
Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLywKIAkJCQk3MjM5OThGNTI2NURCQ0RCMDA1
Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8sCisJCQkJNTJERDAwMDcyNkUwMzlCNDAwNTRF
NDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8sCisJCQkJNTJERDAwMDYyNkUwMzlCMzAwNTRF
NDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovLAogCQkJCTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2
NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAv
KiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4MzkyRDFCQUNBOUQzMDA0NEU4MjQgLyogQ2Fj
aGVkUmVjb3ZlcnkuY3BwICovLApAQCAtOTczMCw2ICs5NzM1LDcgQEAKIAkJCQkwRjIwMTc4MjFE
Q0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMz
OTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2ls
bHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlDQzg5MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdG
cm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM4NkZEN0UyNkU4NjdCODAwRTRDMjhC
IC8qIFRlbXBvcmFsUGxhaW5UaW1lLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAyLDE1ICsyMDIsMTUgQEAgUmVmUHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nh
c2U6OmZyb21TdHJ1YwogICAgIHN3aXRjaCAoc3R1YkluZm8uY2FjaGVUeXBlKCkpIHsKICAgICBj
YXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJ
bmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7Ci0gICAgICAgIHJldHVybiBQcm94eWFibGVBY2Nl
c3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBMb2FkLCBpZGVudGlmaWVyLCBzdHViSW5mby51LmJ5
SWRTZWxmLm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuIFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIs
IExvYWQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJ
ZFJlcGxhY2U6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRl
bnRpZmllcik7Ci0gICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBS
ZXBsYWNlLCBpZGVudGlmaWVyLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwgc3R1YkluZm8u
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIEFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIFJlcGxhY2UsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5
SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAK
ICAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nh
c2U6OmNyZWF0ZSh2bSwgb3duZXIsIEluSGl0LCBpZGVudGlmaWVyLCBzdHViSW5mby51LmJ5SWRT
ZWxmLm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpKTsK
KyAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIEluSGl0LCBpZGVu
dGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8uaW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkFycmF5TGVuZ3RoOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwpAQCAt
MTk4NSwxNCArMTk4NSwxMCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NH
ZW5lCiAgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20gZ2V0dGVycy9zZXR0ZXJzLgogICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2FsbDsKIAorCiAgICAgICAgIC8vIFRoaXMg
YWxzbyBkb2VzIHRoZSBuZWNlc3NhcnkgY2FsY3VsYXRpb25zIG9mIHdoZXRoZXIgb3Igbm90IHdl
J3JlIGFuCiAgICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5kbGluZyBjYWxsIHNpdGUuCi0gICAgICAg
IFJlZ2lzdGVyU2V0IGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKLSNpZiBDUFUoQVJNNjQpCi0g
ICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICAgICAgZXh0cmFSZWdp
c3RlcnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCi0gICAgICAg
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJl
c2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZl
KTsKKyAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUg
PSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgpOwogCiAgICAgICAg
IGF1dG8gcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsID0gWyZdKEFjY2Vzc0dl
bmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSYgc3BpbGxTdGF0ZSwgYm9vbCBjYWxsSGFzUmV0dXJu
VmFsdWUpIHsKICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlOwpAQCAtMjA3OSw4
ICsyMDc1LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAg
ICAgICAgICAgQVNTRVJUKCEobnVtYmVyT2ZSZWdzRm9yQ2FsbCAlIHN0YWNrQWxpZ25tZW50UmVn
aXN0ZXJzKCkpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0g
bnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQyk7CiAKLSAgICAgICAgICAgIHVuc2lnbmVkIGFsaWduZWROdW1iZXJPZkJ5dGVzRm9y
Q2FsbCA9Ci0gICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CisgICAgICAgICAgICB1bnNpZ25lZCBh
bGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CiAKICAgICAgICAgICAg
IGppdC5zdWJQdHIoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
YWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKQEAgLTIxMzgsNiArMjEzMyw3IEBAIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKIAogICAgICAgICAgICAgaW50IHN0
YWNrUG9pbnRlck9mZnNldCA9IChjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSkgLSBzdGF0ZS5wcmVzZXJ2ZWRSZXVzZWRSZWdpc3RlclN0YXRlLm51bWJl
ck9mQnl0ZXNQcmVzZXJ2ZWQgLSBzcGlsbFN0YXRlLm51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JS
ZWdpc3RlclByZXNlcnZhdGlvbjsKICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCiAgICAgICAgICAg
ICBib29sIGNhbGxIYXNSZXR1cm5WYWx1ZSA9IGlzR2V0dGVyKCk7CiAgICAgICAgICAgICByZXN0
b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoc3BpbGxTdGF0ZSwgY2FsbEhhc1JldHVy
blZhbHVlKTsKIApAQCAtMjI2NCwxMiArMjI2MCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVJbXBsKEFjY2Vzc0dlbmUKIAogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CiAKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKLSNp
ZiBDUFUoQVJNNjQpCi0gICAgICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAg
ICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KEFSTTY0UmVnaXN0ZXJz
Ojpscik7Ci0jZW5kaWYKLSAgICAgICAgICAgIGF1dG8gc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNl
cnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoZXh0cmFSZWdp
c3RlcnNUb1ByZXNlcnZlKTsKKyAgICAgICAgICAgIGF1dG8gc3BpbGxTdGF0ZSA9IHN0YXRlLnBy
ZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoKTsKIAog
ICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbldyaXRlQmFy
cmllclNsb3dQYXRoKT4oQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIHNjcmF0Y2hH
UFIpOwogICAgICAgICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKQEAgLTIzNjQs
MTAgKzIzNTUsNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAg
ICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlOwogICAg
ICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoYmFzZUdQUik7CiAgICAg
ICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldCh2YWx1ZVJlZ3MpOwotI2lm
IENQVShBUk02NCkKLSAgICAgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkK
LSAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChBUk02NFJl
Z2lzdGVyczo6bHIpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0
YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNU
b1N0YWNrRm9yQ2FsbChleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCSh3b3JraW5nIGNv
cHkpCkBAIC0yOTIsNyArMjkyLDcgQEAgb3BfZ3JvdXAgOlByb2ZpbGVkQmluYXJ5T3AsCiAgICAg
ICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVzLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsK
LSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQ
cm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3BfZ3JvdXAgOlZhbHVlUHJv
ZmlsZWRCaW5hcnlPcCwKQEAgLTM1Myw3ICszNTMsNyBAQCBvcF9ncm91cCA6VW5hcnlJblBsYWNl
UHJvZmlsZWRPcCwKICAgICAgICAgc3JjRHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAg
ICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlCisg
ICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3AgOnRv
X29iamVjdCwKQEAgLTM4Niw3ICszODYsNyBAQCBvcCA6bmVnYXRlLAogICAgICAgICByZXN1bHRU
eXBlOiBSZXN1bHRUeXBlLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQ
cm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFy
aXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVj
a3BvaW50LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw2ICs3MywyOCBAQCBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckltcGwoQnl0ZWNvCiAg
ICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9maWxlOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yKHVuc2lnbmVkIGNo
ZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURfUEFSQU0oY2hlY2twb2ludEluZGV4KTsKKyAg
ICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9vcGVuKSB7
CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVy
YXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9m
SXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OmdldE5leHQ6
IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFByb2ZpbGUoKTsKKyAgICAg
ICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisg
ICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6Om9wY29kZUlEID09IG9wX2l0ZXJhdG9y
X25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3BvaW50SW5kZXgpIHsKKyAgICAgICAgY2Fz
ZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4
dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZEb25lUHJvZmls
ZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1ZTogcmV0dXJuIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDog
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSAKKyAg
ICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisK
IHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRhdGE+CiBib29sIGhhc1ZhbHVlUHJvZmls
ZUZvcihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwgdW5zaWduZWQgY2hlY2twb2ludEluZGV4
KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTEgKzExNCw2IEBA
IHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZtKQogICAgIFJFTEVBU0VfQVNTRVJUKCFp
c09uTGlzdCgpKTsKIH0KIAotQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2Fs
bExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKLXsKLSAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KG1fZmFzdFBhdGhTdGFydCk7Ci19Ci0KIENvZGVM
b2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFy
dCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGF0YUlDKCkpOwpAQCAtMjI1LDYgKzIyMCwx
MiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0TWF4QXJndW1lbnRDb3VudEluCiAgICAgbV9tYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZhbHVlOwogfQogCitDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQoKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkgJiYgaXNUYWlsQ2FsbCgpKTsKKyAgICByZXR1cm4g
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KHUuY29kZUlDLm1fZmFz
dFBhdGhTdGFydCk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNpdFdlYWsoVk0mIHZtKQog
ewogICAgIGF1dG8gaGFuZGxlU3BlY2lmaWNDYWxsZWUgPSBbJl0gKEpTRnVuY3Rpb24qIGNhbGxl
ZSkgewpAQCAtMjk4LDIzICsyOTksMTEgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldEZyYW1lU2h1
ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAot
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChD
Q2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQ
UiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JU
YWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0
UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIENDYWxsSGVscGVycyYgaml0LCBH
UFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0
YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKLSAgICBpZiAoaXNEYXRh
SUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0gR1BSUmVn
OjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwotICAgICAgICB1LmRhdGFJQy5tX2NhbGxM
aW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAgICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRo
U3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKLSAgICB9KTsKLQogICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkg
eworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlDOjpZZXMpIHsKICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7CiAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkp
LCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBnb1BvbHltb3JwaGlj
OwpAQCAtMzIzLDcgKzMxMiw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0lu
Zm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2Fs
bEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGpp
dC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BS
KSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAo
aXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAg
ICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8vIFBvbHltb3JwaGljIHN0dWIgaGFuZGxl
cyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9mZnNldE9mTW9ub21vcnBoaWNDYWxsRGVz
dGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAtMzM2LDE0ICszMjUsMTYgQEAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZQogICAgICAgICBzbG93UGF0aC5hcHBl
bmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVH
UFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0cikpKTsK
IAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKLSAgICAgICAgaWYgKGlzVGFpbENh
bGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFyZUZv
clRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwogICAgICAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICB1LmNvZGVJQy5tX2Nh
bGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjYWxsZWVDaGVjayk7CisgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbExvY2F0aW9uID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRhZz4oY2FsbCk7CisgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOwogICAgICAgICB9KTsKICAgICB9
CiAKQEAgLTM1MywxMyArMzQ0LDM0IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFp
bENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNh
bGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRyKTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1
c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7CisgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZvR1BS
KTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7
CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwodGhpcywgaml0LCBjYWxsZWVH
UFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBpc1RhaWxDYWxsKCksIG51bGxwdHIpOwog
fQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxG
YXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BS
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0
LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVG
b3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNzKFVzZURhdGFJQzo6Tm8pOworICAgIHJl
dHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVn
LCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdURk1vdmUocHJlcGFyZUZvclRhaWxDYWxs
KSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXREYXRh
SUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm9HUFIgIT0g
SW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRGYXN0UGF0aEltcGwobnVsbHB0ciwgaml0
LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDOjpZZXMsIGZhbHNlLCBudWxs
cHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRh
aWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIs
IEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9y
VGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFs
aWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2Fs
bGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHBy
ZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRo
KFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0zNjksMTcgKzM4MSwzMiBAQCB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgCiAgICAgaml0LmNhbGwoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZzZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9pZCBDYWxsTGlua0luZm86OmVtaXREYXRh
SUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
KQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5mb0dQUiwgR1BSSW5mbzo6cmVnVDIpOworICAg
IGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZT
bG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7Cit9CisKK3ZvaWQgQ2Fs
bExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2bSwgVW5saW5rZWRDYWxsTGlua0luZm8m
IHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRDYWxsTGlu
a0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgc2V0VXBDYWxsKHVubGlua2VkQ2FsbExpbmtJbmZv
LmNhbGxUeXBlLCBjYWxsZWVHUFIpOworICAgIG1fZG9uZUxvY2F0aW9uID0gdW5saW5rZWRDYWxs
TGlua0luZm8uZG9uZUxvY2F0aW9uOworICAgIGlmICh1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFt
ZVNodWZmbGVEYXRhKSB7CisgICAgICAgIC8vIEZJWE1FOiBJdCdkIGJlIG5pY2UgaWYgdGhpcyB3
ZXJlIGEgcmVmY291bnRlZCBkYXRhIHN0cnVjdHVyZS4KKyAgICAgICAgbV9mcmFtZVNodWZmbGVE
YXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKnVubGlua2VkQ2FsbExpbmtJ
bmZvLmZyYW1lU2h1ZmZsZURhdGEpOworICAgIH0KKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRh
SUM6Olllcyk7CisgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9H
UFI7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRpb24odm0uZ2V0Q1RJU3R1YihsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dlZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7
Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7CiAKICAgICBzZXRV
c2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKIAotICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGpp
dC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwotICAgIH0pOwotCiAgICAgYXV0byBjYWxs
ID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewogICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwpAQCAtMzk3LDcg
KzQyNCw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGlyZWN0VGFpbENhbGxGYXMKIAogICAg
IGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwor
ICAgICAgICB1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8
SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7CiAgICAgfSk7CiAKICAgICAvLyAtIElm
IHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEganVtcCB0byB0aGUgc2xvdyBwYXRoLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0MywxMSBAQCBjbGFzcyBKU0Z1bmN0
aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogc3RydWN0IENhbGxGcmFtZVNodWZmbGVE
YXRhOwogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm87CisKIGNsYXNzIENhbGxMaW5rSW5m
byA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiB7CiBwdWJsaWM6
Ci0gICAgZW51bSBDYWxsVHlwZSB7CisgICAgZW51bSBDYWxsVHlwZSA6IHVpbnQ4X3QgewogICAg
ICAgICBOb25lLAogICAgICAgICBDYWxsLAogICAgICAgICBDYWxsVmFyYXJncywKQEAgLTE2NSw2
ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGVlR1BSID0gY2FsbGVlR1BSOwogICAg
IH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhWTSYsIFVubGlua2VkQ2FsbExpbmtJbmZv
JiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUik7CisKICAgICBHUFJS
ZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVHUFI7IH0KICAgICAKICAgICBl
bnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgewpAQCAtMTczLDEzICsxNzcsMTYgQEAgcHVi
bGljOgogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVt
aXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNh
bGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyosIENDYWxsSGVscGVycyYs
IEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgYm9v
bCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBX
QVJOX1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJO
OwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBX
QVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWls
Q2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JU
YWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CiAgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7CiAgICAgdm9p
ZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKICAgICB2b2lkIGVtaXRTbG93UGF0aChWTSYs
IENDYWxsSGVscGVycyYpOworICAgIHN0YXRpYyB2b2lkIGVtaXREYXRhSUNTbG93UGF0aChWTSYs
IENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOwogICAgIHZvaWQgcmV2ZXJ0
Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJQygpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09IFVzZURhdGFJQzo6WWVzOyB9CkBAIC0y
MDMsNyArMjEwLDYgQEAgcHVibGljOgogICAgICAgICBtX2FsbG93U3R1YnMgPSBmYWxzZTsKICAg
ICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0
YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gc2xvd1BhdGhT
dGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2Nh
dGlvbigpOwogCkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9zbG93U3R1
YiA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgSklUU3R1YlJvdXRpbmUqIHNsb3dTdHViKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3Nsb3dTdHViLmdldCgpOwotICAgIH0KLQogICAgIGJvb2wg
c2Vlbk9uY2UoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faGFzU2VlblNob3VsZFJlcGF0Y2g7
CkBAIC0zMDgsOSArMzA5LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q2FsbFR5cGU+KG1fY2FsbFR5cGUpOwogICAgIH0KIAotICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZN
YXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKKyAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
OwogICAgIH0KIAogICAgIHVpbnQzMl90IG1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkK
QEAgLTM4MSw3ICszODIsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIENvZGVM
b2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZmFzdFBhdGhTdGFydDsKKworICAgIENv
ZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGZhc3RQYXRoU3RhcnQoKTsKKwogICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1fZG9uZUxvY2F0aW9uOwogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3Rp
bmF0aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBAIC0zOTcsNiArNDAwLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1f
Y2FsbExvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50
ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRoU3RhcnQ7CisgICAgICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CiAgICAgICAg
IH0gY29kZUlDOwogICAgIH0gdTsKIApAQCAtNDI0LDYgKzQyOCwxMyBAQCBpbmxpbmUgQ29kZU9y
aWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpCiAgICAgcmV0dXJuIGNhbGxMaW5rSW5mby5jb2Rl
T3JpZ2luKCk7CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENhbGxMaW5rSW5mbyB7CisgICAgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4OyAvLyBDdXJyZW50bHksIG9ubHkgdXNlZCBieSBiYXNlbGlu
ZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5IHByb2R1Y2UgYSBDb2RlT3JpZ2luLgorICAgIENhbGxM
aW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVT
aHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307CisKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDgg
KzI3OSw2IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAs
IG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGls
YXRpb24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCi0gICAg
LCBtX2hhc0xpbmtlZE9TUkV4aXQoZmFsc2UpCi0gICAgLCBtX2lzRWxpZ2libGVGb3JMTEludERv
d25ncmFkZShmYWxzZSkKICAgICAsIG1fbnVtQ2FsbGVlTG9jYWxzKG90aGVyLm1fbnVtQ2FsbGVl
TG9jYWxzKQogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVtVmFycykKICAgICAsIG1fbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAob3RoZXIubV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKQEAgLTMw
OCw2ICszMDYsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAK
ICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlkZXIoKSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhv
dGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0gJm1f
dW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CiAgICAgCiAgICAgdm0uaGVhcC5j
b2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9CkBAIC0zMTgsNyArMzE4LDYgQEAgdm9pZCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQwogICAgIGZpbmlzaENyZWF0aW9uQ29tbW9u
KHZtKTsKIAogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgp
OwogCiAgICAgaWYgKG90aGVyLm1fcmFyZURhdGEpIHsKICAgICAgICAgY3JlYXRlUmFyZURhdGFJ
Zk5lY2Vzc2FyeSgpOwpAQCAtMzM2LDggKzMzNSw2IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZN
JiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQog
ICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5Db21w
aWxlZFdpdGhGVEwoZmFsc2UpCi0gICAgLCBtX2hhc0xpbmtlZE9TUkV4aXQoZmFsc2UpCi0gICAg
LCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZShmYWxzZSkgCiAgICAgLCBtX251bUNhbGxl
ZUxvY2Fscyh1bmxpbmtlZENvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpCiAgICAgLCBtX251
bVZhcnModW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMoKSkKICAgICAsIG1faGFzRGVidWdnZXJT
dGF0ZW1lbnQoZmFsc2UpCkBAIC0zNTksNyArMzU2LDkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2so
Vk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkpOwog
ICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7
Ci0gICAgCisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxs
aW50RXhlY3V0ZUNvdW50ZXIoKTsKKwogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRo
aXMpOwogfQogCkBAIC0zNzAsNyArMzY5LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZt
LCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2FuJ3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVj
b2RlIGdlbmVyYXRpb24uIFRoaXMgcHJvY2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBj
b250cm9sCiAvLyBmbG93IG9yIGludHJvZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0
aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5lc3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAv
LyBhbGwgdGhlIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24g
dGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhlIGxpdmVuZXNzIGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5s
aW5rZWRDb2RlQmxvY2suCisvLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suIEFsc28sIEJhc2Vs
aW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBDb2RlQmxvY2tzIG9mIGFuIFVubGlu
a2VkQ29kZUJsb2NrLAorLy8gc28gdGhlIGJ5dGVjb2RlIG11c3QgcmVtYWluIHRoZSBzYW1lIGJl
dHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5nIGFuIFVubGlua2VkQ29kZUJsb2NrLgogYm9vbCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCiAgICAgSlNTY29w
ZSogc2NvcGUpCiB7CkBAIC00NzEsNiArNDcxLDIxIEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgYnJlYWs7IFwKICAgICB9CiAKKyAgICB1bnNpZ25l
ZCBiaW5hcnlQcm9maWxlSW5kZXggPSAwOworICAgIHVuc2lnbmVkIHVuYXJ5UHJvZmlsZUluZGV4
ID0gMDsKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKF9fb3ApIFwKKyAg
ICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElBTElaRV9NRVRBREFUQShfX29wKSBcCisg
ICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0gJm1fdW5saW5rZWRDb2RlLT5iaW5hcnlB
cml0aFByb2ZpbGUoYmluYXJ5UHJvZmlsZUluZGV4KyspOyBcCisgICAgICAgIGJyZWFrOyBcCisg
ICAgfQorI2RlZmluZSBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAg
Q0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAg
ICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+dW5hcnlBcml0
aFByb2ZpbGUodW5hcnlQcm9maWxlSW5kZXgrKyk7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9
CisKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25TdHJlYW0gPSBpbnN0
cnVjdGlvbnMoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uIDogaW5zdHJ1Y3Rp
b25TdHJlYW0pIHsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bj
b2RlSUQoKTsKQEAgLTUzMywxNCArNTQ4LDE0IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIFMKICAgICAgICAgTElOSyhPcENyZWF0ZVByb21pc2UpCiAgICAgICAgIExJ
TksoT3BDcmVhdGVHZW5lcmF0b3IpCiAKLSAgICAgICAgTElOSyhPcEFkZCkKLSAgICAgICAgTElO
SyhPcE11bCkKLSAgICAgICAgTElOSyhPcERpdikKLSAgICAgICAgTElOSyhPcFN1YikKLQotICAg
ICAgICBMSU5LKE9wTmVnYXRlKQotICAgICAgICBMSU5LKE9wSW5jKQotICAgICAgICBMSU5LKE9w
RGVjKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BBZGQpCisgICAg
ICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcE11bCkKKyAgICAgICAgTElOS19X
SVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wRGl2KQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZ
X0FSSVRIX1BST0ZJTEUoT3BTdWIpCisKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BS
T0ZJTEUoT3BOZWdhdGUpCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9w
SW5jKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcERlYykKIAogICAg
ICAgICBMSU5LKE9wSm5lcVB0cikKIApAQCAtNzY5LDcgKzc4NCw2IEBAIGJvb2wgQ29kZUJsb2Nr
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAvLyByZWx5IG9uIHRoZSBpbnN0cnVjdGlv
biBjb3VudCAoYW5kIGFyZSBpbiB0aGVvcnkgcGVybWl0dGVkIHRvIGFsc28gaW5zcGVjdCB0aGUK
ICAgICAvLyBpbnN0cnVjdGlvbiBzdHJlYW0gdG8gbW9yZSBhY2N1cmF0ZSBhc3Nlc3MgdGhlIGNv
c3Qgb2YgdGllci11cCkuCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwotICAgIGppdEFmdGVy
V2FybVVwKCk7CiAKICAgICAvLyBJZiB0aGUgY29uY3VycmVudCB0aHJlYWQgd2lsbCB3YW50IHRo
ZSBjb2RlIGJsb2NrJ3MgaGFzaCwgdGhlbiBjb21wdXRlIGl0IGhlcmUKICAgICAvLyBzeW5jaHJv
bm91c2x5LgpAQCAtNzkzLDYgKzgwNyw3OCBAQCB2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRp
b25Db21tb24oVk0mCiAgICAgbV9vd25lckVkZ2Uuc2V0KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9D
b2RlQmxvY2tFZGdlOjpjcmVhdGUodm0sIHRoaXMpKTsKIH0KIAorI2lmIEVOQUJMRShKSVQpCit2
b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5l
SklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRDb2RlKGppdENvZGUuY29weVJlZigpKTsK
KworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0Q29kZU1hcCA9IHRoaXMtPmppdENvZGVN
YXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkV4Y2VwdGlvbkhh
bmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBleGNl
cHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8z
OTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUgPSBqaXRDb2RlTWFwLmZp
bmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgYXV0byYgaml0RGF0YSA9IGVuc3Vy
ZUpJVERhdGEobG9ja2VyKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChqaXREYXRhLm1faml0
Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CisgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBv
b2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBlbnRyeSA9IGppdENvZGUtPm1fY29uc3Rh
bnRQb29sLmF0KGkpOworICAgICAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKSB7CisgICAgICAg
ICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6R2xvYmFsT2JqZWN0OgorICAgICAgICAg
ICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBtX2dsb2JhbE9iamVjdC5nZXQo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZENhbGxM
aW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRDYWxs
TGlua0luZm8qPihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9jYWxsTGlua0luZm9zLmFkZChDb2RlT3Jp
Z2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPmluaXRpYWxpemVEYXRhSUModm0oKSwgdW5saW5rZWRDYWxsTGlua0lu
Zm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgaml0
RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGNhbGxMaW5rSW5mbzsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbzogeworICAgICAgICAgICAgICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8gPSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyo+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAg
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGppdERhdGEubV9zdHViSW5mb3MuYWRkKHVu
bGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZSwgQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5
dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+aW5pdGlhbGl6ZUZyb21V
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKHRoaXMsIHVubGlua2VkU3R1YkluZm8pOworICAgICAg
ICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBzdHViSW5mbzsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkRl
Y2woaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwcjogeworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnku
cGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9v
bFtpXSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzd2l0Y2gg
KGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIEdsb2JhbENvZGU6CisgICAgY2FzZSBNb2R1bGVDb2Rl
OgorICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0g
ZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRnVuY3Rpb25Db2RlOgorICAgICAgICAv
LyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0
ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCisgICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoYXQg
b2JzZXJ2YXRpb24uCisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNhbklubGlu
ZShjYXBhYmlsaXR5TGV2ZWwoKSkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKHRoaXMpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaml0Q29kZS0+bV9pc1NoYXJlYWJsZSAm
JiAhdW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSAmJiBPcHRpb25z
Ojp1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nKCkpCisgICAgICAgIHVubGlua2VkQ29kZUJsb2Nr
KCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUgPSBXVEZNb3ZlKGppdENvZGUpOworfQorI2VuZGlm
IC8vIEVOQUJMRShKSVQpCisKIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7CiAgICAgVk0mIHZt
ID0gKm1fdm07CkBAIC04NzMsNiArOTU5LDI3IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAorYm9vbCBDb2RlQmxvY2s6OmlzQ29uc3RhbnRPd25l
ZEJ5VW5saW5rZWRDb2RlQmxvY2soVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKK3sKKyAgICAv
LyBUaGlzIG5lZWRzIHRvIGNvcnJlc3BvbmQgdG8gd2hhdCB3ZSBkbyBpbnNpZGUgc2V0Q29uc3Rh
bnRSZWdpc3RlcnMuCisgICAgc3dpdGNoICh1bmxpbmtlZENvZGVCbG9jaygpLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihyZWcpKSB7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246OkludGVnZXI6CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkRv
dWJsZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246Ok90aGVyOiB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB1bmxpbmtlZENvZGVCbG9j
aygpLT5nZXRDb25zdGFudChyZWcpOworICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0Nl
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2
YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKGNlbGwtPmluaGVyaXRzPFN5bWJvbFRhYmxlPih2
bSgpKSB8fCBjZWxsLT5pbmhlcml0czxKU1RlbXBsYXRlT2JqZWN0RGVzY3JpcHRvcj4odm0oKSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogVmVjdG9yPHVuc2lnbmVkPiBDb2RlQmxv
Y2s6OnNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgRml4ZWRWZWN0b3I8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKQogewogICAgIFZNJiB2
bSA9ICptX3ZtOwpAQCAtODkyLDYgKzk5OSw3IEBAIFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2Nr
OjpzZXRDb25zdGFudFIKICAgICAgICAgc3dpdGNoIChyZXByZXNlbnRhdGlvbikgewogICAgICAg
ICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKICAgICAg
ICAgICAgIGNvbnN0YW50ID0gZ2xvYmFsT2JqZWN0LT5saW5rVGltZUNvbnN0YW50KHN0YXRpY19j
YXN0PExpbmtUaW1lQ29uc3RhbnQ+KGNvbnN0YW50LmFzSW50MzJBc0FueUludCgpKSk7CisgICAg
ICAgICAgICBBU1NFUlQoY29uc3RhbnQuaXNDZWxsKCkpOyAvLyBVbmxpbmtlZCBCYXNlbGluZSBK
SVQgcmVxdWlyZXMgdGhpcy4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI6CiAgICAgICAgIGNhc2UgU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpJbnRlZ2VyOgpAQCAtMTUxNCw3ICsxNjIyLDcgQEAgQ29kZUJsb2NrOjpKSVRE
YXRhJiBDb2RlQmxvY2s6OmVuc3VyZUpJVAogICAgIHJldHVybiAqbV9qaXREYXRhOwogfQogCi12
b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpCit2b2lkIENv
ZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKQogewogICAgIGlmIChhdXRvKiBqaXRE
YXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxs
TGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5mb3MpCkBAIC0xNTI1LDYgKzE2MzMsMjAg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbgogICAgICAgICAgICAg
c3R1YkluZm8tPnZpc2l0V2Vha1JlZmVyZW5jZXMobG9ja2VyLCB0aGlzKTsKICAgICAgICAgfQog
ICAgIH0KKworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBpZiAoaml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIC8vIFZlcmlmeSB3ZSBkb24ndCBuZWVkIHRvIGZp
bmFsaXplIHRoZXNlIHNpbmNlIHRoZXkncmUgdmlydHVhbCBjYWxscy4KKyAgICAgICAgZm9yIChD
YWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA6IHN0YXRpY19jYXN0PEJhc2VsaW5lSklUQ29kZSo+
KG1faml0Q29kZS5nZXQoKSktPm1fZXZhbENhbGxMaW5rSW5mb3MpIHsKKyAgICAgICAgICAgIEFT
U0VSVCghY2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+Zm9yRWFjaERlcGVuZGVudENlbGwoW10gKEpTQ2VsbCopIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICB9
CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC0xNTM0LDQ2ICsxNjU2LDEyIEBAIHZvaWQgQ29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAogICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25z
KCk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIGJvb2wgaXNFbGlnaWJsZUZvckxMSW50RG93bmdy
YWRlID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGU7Ci0gICAgbV9pc0VsaWdpYmxlRm9y
TExJbnREb3duZ3JhZGUgPSBmYWxzZTsKLSAgICAvLyBJZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5v
dCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRl
bXB0Ci0gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGluZSBKSVQgY29kZSBhbmQgcmVpbnN0YWxsIExM
SW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5LgotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgp
ICYmICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1NldCgpLmlzQ3VycmVudGx5RXhlY3V0aW5nKHRo
aXMpKSB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IG9wdGlt
aXplZFJlcGxhY2VtZW50KCkpIHsKLSAgICAgICAgICAgIGlmICghb3B0aW1pemVkQ29kZUJsb2Nr
LT5tX29zckV4aXRDb3VudGVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRWxpZ2libGVGb3JM
TEludERvd25ncmFkZSkgewotICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGUgPSBudWxscHRy
OwotICAgICAgICAgICAgICAgICAgICBMTEludDo6c2V0RW50cnlwb2ludCh0aGlzKTsKLSAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkludGVy
cHJldGVyVGh1bmspOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV91bmxpbmtlZENvZGUtPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtl
ZEhhbmRsZXIgPSBtX3VubGlua2VkQ29kZS0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gbV9yYXJlRGF0YS0+bV9leGNl
cHRpb25IYW5kbGVyc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGluc3RydWN0
aW9uID0gKmluc3RydWN0aW9ucygpLmF0KHVubGlua2VkSGFuZGxlci50YXJnZXQpLnB0cigpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5pbml0aWFsaXplKHVubGlua2VkSGFuZGxl
ciwgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oTExJbnQ6OmhhbmRs
ZUNhdGNoKGluc3RydWN0aW9uLndpZHRoKCkpLmNvZGUoKSkpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdW5saW5rSW5jb21pbmdDYWxscygpOwotCi0gICAg
ICAgICAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBjbGVhciB0aGVzZSBvdXQgaGVyZSBiZWNh
dXNlIGluIGZpbmFsaXplVW5jb25kaXRpb25hbGx5IGFsbCBjb21waWxlciB0aHJlYWRzCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGFyZSBzYWZlcG9pbnRlZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5p
bmcgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBieXRlY29kZSBwYXJzZXIsIGFuZCBieXRlY29kZQot
ICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXIgaXMgdGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUg
cG9pbnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5mb3MuCi0gICAgICAgICAgICAgICAgICAgIHJl
c2V0SklURGF0YSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAg
ICBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSNlbmRpZgotICAgIAogICAgIGlmIChKSVRDb2RlOjpjb3VsZEJl
SW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKICAgICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hl
cygpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoISFqaXRDb2RlKCkpCi0gICAgICAgIGZp
bmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKKyAgICAgICAgZmluYWxpemVKSVRJbmxp
bmVDYWNoZXMoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0xNTk0LDcgKzE2
ODIsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAg
IGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOgotICAgICAgICAgICAgY291bnQgPSBt
X2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKKyAgICAgICAgICAgIGNvdW50ID0gbV9sbGlu
dEV4ZWN1dGVDb3VudGVyLT5jb3VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgICAgICBjb3VudCA9IG1faml0RXhlY3V0
ZUNvdW50ZXIuY291bnQoKTsKQEAgLTE2NzUsMzAgKzE3NjMsNiBAQCBTdHJ1Y3R1cmVTdHViSW5m
byogQ29kZUJsb2NrOjphZGRTdHViSW5mCiAgICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2Vy
KS5tX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSwgY29kZU9yaWdpbik7CiB9CiAKLUpJVEFkZElD
KiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
KQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4g
ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fYWRkSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1K
SVRNdWxJQyogQ29kZUJsb2NrOjphZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAg
cmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsK
LX0KLQotSklUU3ViSUMqIENvZGVCbG9jazo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdWJJQ3MuYWRkKGFyaXRoUHJv
ZmlsZSk7Ci19Ci0KLUpJVE5lZ0lDKiBDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9uZWdJQ3MuYWRkKGFy
aXRoUHJvZmlsZSk7Ci19Ci0KIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRTdHVi
SW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2xvY2spOwpAQCAtMzEzMyw3ICszMTk3LDcgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpm
cmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBjYXNlIEpJVFR5cGU6
OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3Io
dGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcih0aGlzLT51
bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAjaWYgRU5BQkxF
KERGR19KSVQpCkBAIC0zMzQ5LDEzICszNDEzLDEzIEBAIEJpbmFyeUFyaXRoUHJvZmlsZSogQ29k
ZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAgICAg
Y2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRo
aXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfbXVsOgotICAgICAgICByZXR1
cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAg
ICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BTdWI+KCku
bWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kaXY6Ci0gICAgICAg
IHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwor
ICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9m
aWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzNjcsMTEgKzM0
MzEsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6dW5hcnlBcml0aAogewogICAg
IHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAg
cmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7
CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0
aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wSW5j
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFz
PE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfZGVj
OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERlYz4oKS5tZXRhZGF0YSh0aGlzKS5t
X2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0z
NDcyLDIyICszNTM2LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRh
cmkKIH0KIAogI2lmIEVOQUJMRShKSVQpCi12b2lkIENvZGVCbG9jazo6c2V0UENUb0NvZGVPcmln
aW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmIG1hcCkgCi17IAotICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBlbnN1cmVKSVREYXRhKGxv
Y2tlcikubV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1vdmUobWFwKTsKLX0KLQogc3RkOjpvcHRp
b25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQQyh2b2lkKiBwYykKIHsKKyAgICBpZiAo
YXV0byogcGNUb0NvZGVPcmlnaW5NYXAgPSBtX2ppdENvZGUtPnBjVG9Db2RlT3JpZ2luTWFwKCkp
IHsKKyAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gY29kZU9yaWdpbiA9IHBj
VG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQorICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmln
aW47CisgICAgfQorCiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CiAgICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7Ci0g
ICAgICAgICAgICBpZiAoaml0RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcCkgewotICAgICAgICAg
ICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBqaXREYXRh
LT5tX3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY29kZU9yaWdpbjsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgZm9yIChTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRhLT5tX3N0dWJJbmZvcykgewogICAgICAg
ICAgICAgICAgIGlmIChzdHViSW5mby0+Y29udGFpbnNQQyhwYykpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+KHN0dWJJbmZvLT5jb2RlT3JpZ2lu
KTsKQEAgLTM1MjEsMjggKzM1NzksMTQgQEAgc3RkOjpvcHRpb25hbDxCeXRlY29kZUluZGV4PiBD
b2RlQmxvY2s6OgogICAgIHJldHVybiBieXRlY29kZUluZGV4OwogfQogCi1pbnQzMl90IENvZGVC
bG9jazo6dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKQotewotICAgIHN3aXRjaCAo
dW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUoKSkgewotICAgIGNhc2UgVHJpU3RhdGU6
OkluZGV0ZXJtaW5hdGU6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQ7Ci0gICAgY2FzZSBUcmlT
dGF0ZTo6RmFsc2U6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQgKiA0OwotICAgIGNhc2UgVHJp
U3RhdGU6OlRydWU6Ci0gICAgICAgIHJldHVybiB0aHJlc2hvbGQgLyAyOwotICAgIH0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gdGhyZXNob2xkOwotfQotCi12b2lkIENv
ZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBDb2RlQmxvY2s6OmppdFNvb24oKQogewot
ICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklU
KE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwKCkpLCB0aGlzKTsKKyAgICBtX2xs
aW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9sZCh1bmxpbmtlZENvZGVCbG9jaygpLT50
aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7CiB9
CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXROZXh0SW52
b2NhdGlvbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0
aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpKSwgdGhpcyk7Cisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAK
IGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3BvaW50cygpIGNvbnN0CkBA
IC0zNTg4LDI4ICszNjMyLDggQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBNYXRoSUNTdGF0cygpCiAg
ICAgZG91YmxlIG51bVN1YnMgPSAwLjA7CiAgICAgZG91YmxlIHRvdGFsU3ViU2l6ZSA9IDAuMDsK
IAotICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrKSB7Ci0gICAg
ICAgIGlmIChhdXRvKiBqaXREYXRhID0gY29kZUJsb2NrLT5tX2ppdERhdGEuZ2V0KCkpIHsKLSAg
ICAgICAgICAgIGZvciAoSklUQWRkSUMqIGFkZElDIDogaml0RGF0YS0+bV9hZGRJQ3MpIHsKLSAg
ICAgICAgICAgICAgICBudW1BZGRzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxBZGRTaXplICs9
IGFkZElDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJ
VE11bElDKiBtdWxJQyA6IGppdERhdGEtPm1fbXVsSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVt
TXVscysrOwotICAgICAgICAgICAgICAgIHRvdGFsTXVsU2l6ZSArPSBtdWxJQy0+Y29kZVNpemUo
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChKSVROZWdJQyogbmVnSUMgOiBq
aXREYXRhLT5tX25lZ0lDcykgewotICAgICAgICAgICAgICAgIG51bU5lZ3MrKzsKLSAgICAgICAg
ICAgICAgICB0b3RhbE5lZ1NpemUgKz0gbmVnSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGZvciAoSklUU3ViSUMqIHN1YklDIDogaml0RGF0YS0+bV9zdWJJQ3Mp
IHsKLSAgICAgICAgICAgICAgICBudW1TdWJzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxTdWJT
aXplICs9IHN1YklDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAg
YXV0byBjb3VudElDcyA9IFsmXSAoQ29kZUJsb2NrKikgeworICAgICAgICAvLyBGSVhNRTogV2Ug
bmVlZCB0byByZS1pbXBsZW1lbnQgdGhpcyB1c2luZyBKSVRDb2RlLgogICAgIH07CiAgICAgaGVh
cCgpLT5mb3JFYWNoQ29kZUJsb2NrKGNvdW50SUNzKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05
NCw5ICs5NCw5IEBAIGNsYXNzIEpTTW9kdWxlRW52aXJvbm1lbnQ7CiBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiBjbGFzcyBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQ7CiBjbGFzcyBNZXRhZGF0YVRhYmxlOwotY2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7
CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwor
Y2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihDb2RlQmxvY2tSYXJlRGF0YSk7CiAKQEAgLTE1OCw3ICsxNTgsOSBAQCBwdWJsaWM6
CiAgICAgTWV0YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0
YWRhdGEuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJl
dHVybiBtX251bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0
ZXJzKHVuc2lnbmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwKCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPZkFyZ3VtZW50c1RvU2tp
cDsgfQogCkBAIC0xNjcsNyArMTY5LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bVZhcnMo
KSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KICAgICB1bnNpZ25lZCBudW1UbXBzKCkgY29u
c3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVj
a3BvaW50VG1wczsgfQogCi0gICAgdW5zaWduZWQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7
IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251
bVBhcmFtZXRlcnMpOyB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAg
LTIzMiwxNiArMjMzLDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJl
YWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3RhbGxWTVRyYXBCcmVha3BvaW50cygpOwog
Ci0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7
Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgYmFjayB0aGUgb3B0aW1pemF0aW9u
IHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlzIGB0aGlzYCBhbmQgd2UncmUgaW4gc2xv
cHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAgIHJldHVybiByZWcub2Zmc2V0KCkgPj0g
c3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAtMjY4LDIzICsyNTksMjEgQEAgcHVibGlj
OgogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RydWN0IEpJVERhdGEgewogICAgICAgICBXVEZfTUFL
RV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiAKICAgICAgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZv
czsKLSAgICAgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKLSAgICAgICAgQmFnPEpJVE11bElD
PiBtX211bElDczsKLSAgICAgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKLSAgICAgICAgQmFn
PEpJVFN1YklDPiBtX3N1YklDczsKICAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlu
a0luZm9zOwogICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRS
YXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOwogICAgICAgICBT
ZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBoaWNDYWxsTm9kZSwgUGFja2VkUmF3U2VudGluZWxO
b2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxsczsKLSAg
ICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0g
ICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0Nv
ZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXNDYWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFs
c2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJz
OwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKworICAgICAgICBGaXhlZFZlY3Rv
cjx2b2lkKj4gbV9qaXRDb25zdGFudFBvb2w7CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZKSVRDb25zdGFudFBvb2woKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwg
bV9qaXRDb25zdGFudFBvb2wpOyB9CiAgICAgfTsKIAorICAgIHZvaWQgc2V0dXBXaXRoVW5saW5r
ZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4pOworCiAgICAgSklURGF0YSYgZW5z
dXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlcikKICAgICB7CiAgICAg
ICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkKQEAgLTI5MywyMiArMjgyLDcgQEAgcHVibGljOgog
ICAgIH0KICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRhU2xvdyhjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImKTsKIAotICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUq
KTsKLSAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAg
SklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUU3ViSUMq
IGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwotCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklU
QWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFk
ZEpJVEFkZElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0
b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRNdWxJQyogYWRkTWF0
aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTXVsSUMocHJv
ZmlsZSk7IH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVE5lZ0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0
aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9Ci0KLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVl
Pjo6dHlwZT4KLSAgICBKSVRTdWJJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJv
ZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mSklURGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1faml0RGF0YSk7IH0KIAogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nl
c3NUeXBlLCBDb2RlT3JpZ2luKTsKIApAQCAtMzIyLDE4ICsyOTYsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAgdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2Yg
Y2FsbGluZyB0aGlzLgogICAgIENhbGxMaW5rSW5mbyogZ2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNv
ZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICAKLSAgICB2b2lkIHNldEpJVENvZGVNYXAoSklU
Q29kZU1hcCYmIGppdENvZGVNYXApCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVN
YXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOwotICAgIH0KLSAgICBjb25zdCBKSVRDb2RlTWFwJiBq
aXRDb2RlTWFwKCkKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9s
b2NrKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXA7
Ci0gICAgfQorICAgIGNvbnN0IEpJVENvZGVNYXAmIGppdENvZGVNYXAoKTsKIAotICAgIHZvaWQg
c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYm
KTsKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyh2b2lkKiBwYyk7CiAKICAg
ICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVnaXN0ZXJTZXQpOwpAQCAtNDcyLDYgKzQz
Niw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmls
ZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQ
cm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygp
CiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VK
SVQoKSk7CkBAIC01NjksOCArNTM0LDEwIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8V3Jp
dGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0
YW50UmVnaXN0ZXJzOyB9CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVn
LnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25z
dGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0
ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KKyAgICBib29sIGlzQ29uc3RhbnRP
d25lZEJ5VW5saW5rZWRDb2RlQmxvY2soVmlydHVhbFJlZ2lzdGVyKSBjb25zdDsKICAgICBBTFdB
WVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKTsgfQogICAgIEFMV0FZ
U19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uIGNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oaW5kZXgpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdpc3RlcnMpICsgZGVjbHR5cGUobV9jb25z
dGFudFJlZ2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQoKTsgfQogCiAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNb
aW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJu
IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTU5NSwyMiArNTYyLDIyIEBAIHB1YmxpYzoK
ICAgICAvLyBKdW1wIFRhYmxlcwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBTaW1wbGVKdW1wVGFi
bGUmIHN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKKyAgICBTaW1wbGVKdW1wVGFibGUm
IGJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1w
VGFibGUmIGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAg
ICB2b2lkKiBiYXNlbGluZUpJVENvbnN0YW50UG9vbCgpCiAgICAgewotICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX2ppdERhdGEpOwotICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSAm
JiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgICAgICByZXR1cm4gbV9q
aXREYXRhLT5tX2ppdENvbnN0YW50UG9vbC5kYXRhKCk7CiAgICAgfQogI2VuZGlmCiAgICAgc2l6
ZV90IG51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBj
b25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50
IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsgfQogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBTdHJpbmdKdW1wVGFi
bGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKLSAgICB7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7Ci0gICAgICAgIHJldHVybiBtX2ppdERhdGEtPm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAgICB9CisjaWYgRU5BQkxFKERG
R19KSVQpCisgICAgU3RyaW5nSnVtcFRhYmxlJiBkZmdTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50
IHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgZGZnU3dpdGNoSnVtcFRhYmxlKGlu
dCB0YWJsZUluZGV4KTsKICNlbmRpZgorCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJl
ck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtl
ZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxl
SW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsgfQogCkBAIC02MzIsMjEgKzU5OSwyMCBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQodGhp
cyk7CisgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmNoZWNrSWZUaHJlc2hv
bGRDcm9zc2VkQW5kU2V0KHRoaXMpOwogICAgIH0KIAogICAgIHZvaWQgZG9udEpJVEFueXRpbWVT
b29uKCkKICAgICB7Ci0gICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5kZWZlckluZGVmaW5p
dGVseSgpOworICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPmRlZmVySW5kZWZpbml0ZWx5
KCk7CiAgICAgfQogCi0gICAgaW50MzJfdCB0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hv
bGQpOwotICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKTsKICAgICB2b2lkIGppdFNvb24oKTsKKyAg
ICB2b2lkIGppdE5leHRJbnZvY2F0aW9uKCk7CiAKICAgICBjb25zdCBCYXNlbGluZUV4ZWN1dGlv
bkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICAgICAgcmV0dXJuICptX2xsaW50RXhlY3V0
ZUNvdW50ZXI7CiAgICAgfQogCiAgICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6dHVwbGU8U3RydWN0
dXJlSUQsIHVuc2lnbmVkPiwgRml4ZWRWZWN0b3I8TExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0Y2hwb2ludE1hcDsKQEAgLTc5Nyw2ICs3
NjMsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7
IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAgICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3Rz
QWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihDb2RlQmxvY2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7IH0KIAogICAgIHZvaWQgYWRkQnJlYWtw
b2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAgICAgdm9pZCByZW1vdmVCcmVha3BvaW50
KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQpAQCAtODM4LDYgKzgwNSw3IEBAIHB1YmxpYzoKICAg
ICBtdXRhYmxlIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOwogCiAgICAgYm9vbCBtX3Nob3VsZEFs
d2F5c0JlSW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQgYmVjYXVzZSB0aGUgSklUIHdhbnRzIHRv
IHN0b3JlIHRvIGl0LgorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdheXNC
ZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCk7IH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdW5zaWduZWQgbV9jYXBh
YmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2FwYWJpbGl0eUxldmVsCkBAIC04NDcsOCAr
ODE1LDYgQEAgcHVibGljOgogICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24gOiAxOwog
ICAgIGJvb2wgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMIDogMTsKIAotICAgIGJvb2wgbV9oYXNM
aW5rZWRPU1JFeGl0IDogMTsKLSAgICBib29sIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRl
IDogMTsKICAgICBib29sIG1fdmlzaXRDaGlsZHJlblNraXBwZWREdWVUb09sZEFnZSB7IGZhbHNl
IH07CiAKICAgICAvLyBJbnRlcm5hbCBtZXRob2RzIGZvciB1c2UgYnkgdmFsaWRhdGlvbiBjb2Rl
LiBJdCB3b3VsZCBiZSBwcml2YXRlIGlmIGl0IHdhc24ndApAQCAtOTA3LDE2ICs4NzMsMTIgQEAg
cHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9tZXRhZGF0YSk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcik7IH0KIAot
ICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQotICAg
IHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBs
ZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAgcmV0dXJuICFtX3VubGlua2VkQ29kZS0+
aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJs
ZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5sb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpOyB9CiAKIHByb3RlY3RlZDoKICAg
ICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKICNpZiBFTkFCTEUoSklUKQotICAg
IHZvaWQgZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOworICAgIHZvaWQgZmluYWxp
emVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAgIHZv
aWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwpAQCAtMTAxMCw3ICs5NzIsOSBAQCBwcml2YXRl
OgogICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9sbGludEdldEJ5SWRXYXRjaHBvaW50TWFw
OwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7CiAjaWYgRU5BQkxFKEpJVCkKK3B1Ymxp
YzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SklURGF0YT4gbV9qaXREYXRhOworcHJpdmF0ZToKICNl
bmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9u
LURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRoZSBwcm9maWxlZCBjb2RlIGJsb2NrCkBA
IC0xMDI5LDcgKzk5Myw3IEBAIHByaXZhdGU6CiAKICAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2Nr
PiBtX2FsdGVybmF0aXZlOwogICAgIAotICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2xs
aW50RXhlY3V0ZUNvdW50ZXI7CisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyKiBtX2xsaW50
RXhlY3V0ZUNvdW50ZXIgeyBudWxscHRyIH07CiAKICAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50
ZXIgbV9qaXRFeGVjdXRlQ291bnRlcjsKICAgICB1aW50MzJfdCBtX29zckV4aXRDb3VudGVyOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5s
aW5lcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSwxMCBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRG
R0pJVENvZGUuaCIKICNpbmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxpbmVzLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtNDAsOSArNDIsNyBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFj
aFZhbHVlUHJvZmlsZShjb25zCiAgICAgaWYgKG1fbWV0YWRhdGEpIHsKICNkZWZpbmUgVklTSVQo
X19vcCkgXAogICAgICAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0
YWRhdGEpIHsgZnVuYyhtZXRhZGF0YS5tX3Byb2ZpbGUsIGZhbHNlKTsgfSk7Ci0KICAgICAgICAg
Rk9SX0VBQ0hfT1BDT0RFX1dJVEhfVkFMVUVfUFJPRklMRShWSVNJVCkKLQogI3VuZGVmIFZJU0lU
CiAKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEl0ZXJhdG9yT3Blbj4oWyZdIChhdXRv
JiBtZXRhZGF0YSkgeyAKQEAgLTU3LDcgKzU3LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hW
YWx1ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmls
ZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAgCi0KIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KQEAgLTk5LDQgKzk4LDM4IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoTExJ
bnRDYWxsTGlua0luZm8KICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoSklUKQorQUxXQVlTX0lOTElO
RSBjb25zdCBKSVRDb2RlTWFwJiBDb2RlQmxvY2s6OmppdENvZGVNYXAoKQoreworICAgIEFTU0VS
VChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2ppdENvZGVNYXA7Cit9
CisKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5lU3dp
dGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0g
SklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJ
VENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07
Cit9CisKK0FMV0FZU19JTkxJTkUgU3RyaW5nSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5l
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRU
eXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxC
YXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShERkdfSklUKQorQUxXQVlT
X0lOTElORSBTaW1wbGVKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3dpdGNoSnVtcFRhYmxlKGlu
dCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklU
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgp
KS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0
cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpkZmdTdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxERkc6OkpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisjZW5kaWYKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0
YWJsZVRvQ29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAgcHVibGljOgogICAgIHN0YXRp
YyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFwKENvZGVCbG9jayogY29kZUJsb2NrKTsK
ICAgICAKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcEFuZEFjdGl2
YXRlKENvZGVCbG9jayogY29kZUJsb2NrKTsKKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZDb2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZSwgbV9jb2RlQmxvY2spOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCShyZXZpc2lvbiAyODMwNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCBib29sIEV4ZWN1dGlvbkNvdW50ZXI8Y291
bnRpbmdWYXJpYW50Pjo6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHRocmVz
aG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2NrID8gY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSA6IG51bGxwdHIsIHRocmVzaG9sZCk7CisgICAgdGhyZXNob2xkID0gY2xpcHBlZFRocmVz
aG9sZCh0aHJlc2hvbGQpOwogICAgIAogICAgIG1fY291bnRlciA9IHN0YXRpY19jYXN0PGludDMy
X3Q+KC10aHJlc2hvbGQpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2aXNpb24gMjgzMDUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JjZVNsb3dQYXRo
Q29uY3VycmVudGx5KCk7IC8vIElmIHlvdSB1c2UgdGhpcywgY2hlY2tJZlRocmVzaG9sZENyb3Nz
ZWRBbmRTZXQoKSBtYXkgc3RpbGwgcmV0dXJuIGZhbHNlLgogICAgIGJvb2wgY2hlY2tJZlRocmVz
aG9sZENyb3NzZWRBbmRTZXQoQ29kZUJsb2NrKik7CiAgICAgYm9vbCBoYXNDcm9zc2VkVGhyZXNo
b2xkKCkgY29uc3QgeyByZXR1cm4gbV9jb3VudGVyID49IDA7IH0KLSAgICB2b2lkIHNldE5ld1Ro
cmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXROZXdU
aHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayogPSBudWxscHRyKTsKICAgICB2
b2lkIGRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgZG91YmxlIGNvdW50KCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291bnQpICsgbV9jb3VudGVyOyB9CiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkBAIC04NiwxMyArODYsOSBAQCBwdWJsaWM6
CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIFQgY2xp
cHBlZFRocmVzaG9sZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUIHRocmVzaG9sZCkK
KyAgICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKFQgdGhyZXNob2xkKQogICAgIHsKLSAgICAg
ICAgaW50MzJfdCBtYXhUaHJlc2hvbGQ7Ci0gICAgICAgIGlmIChPcHRpb25zOjpyYW5kb21pemVF
eGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKSAmJiBnbG9iYWxPYmplY3QpCi0gICAg
ICAgICAgICBtYXhUaHJlc2hvbGQgPSBnbG9iYWxPYmplY3QtPndlYWtSYW5kb21JbnRlZ2VyKCkg
JSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1heFRocmVzaG9sZCA9IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3
ZWVuQ2hlY2twb2ludHMoKTsKKyAgICAgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQgPSBtYXhpbXVt
RXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CiAgICAgICAgIGlmICh0aHJlc2hv
bGQgPiBtYXhUaHJlc2hvbGQpCiAgICAgICAgICAgICB0aHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7
CiAgICAgICAgIHJldHVybiB0aHJlc2hvbGQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB7
CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQpID09IDEyKTsK
IAogc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCB7CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihH
ZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFycmF5UHJvZmlsZSk7IH0KICAgICBBcnJh
eVByb2ZpbGUgYXJyYXlQcm9maWxlOwogfTsKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRN
b2RlTWV0YWRhdGFBcnJheUxlbmd0aCkgPT0gMTIpOwpAQCAtODgsNiArODksNyBAQCB1bmlvbiBH
ZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAgR2V0QnlJZE1vZGUgbW9kZTsKICAgICAgICAg
dWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsgLy8gVGhpcyBtdXN0IGJlIHplcm8gd2hl
biB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRh
LCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFEZWZhdWx0IGRlZmF1bHRNb2RlOwog
ICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNldE1vZGU7CiAgICAgR2V0QnlJZE1vZGVN
ZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9kZTsKQEAgLTExNyw2ICsxMTksNyBAQCBz
dHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFQ
cm90b0xvYWQgcHJvdG9Mb2FkTW9kZTsKICAgICB9OwogICAgIEdldEJ5SWRNb2RlIG1vZGU7Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICB1aW50OF90IGhpdENvdW50Rm9y
TExJbnRDYWNoaW5nOwogfTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTUsNyArMjE1LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHVi
SQogICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAog
ICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjogewotICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7Cisg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRh
a2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4g
R2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgc3R1YkluZm8pOwogICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vz
c0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpl
bWl0RE9NSklURwogCiAgICAgLy8gTGV0J3Mgc3RvcmUgdGhlIHJldXNlZCByZWdpc3RlcnMgdG8g
dGhlIHN0YWNrLiBBZnRlciB0aGF0LCB3ZSBjYW4gdXNlIGFsbG9jYXRlZCBzY3JhdGNoIHJlZ2lz
dGVycy4KICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNl
cnZlZFN0YXRlID0KLSAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hp
bmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VG
b3JDQ2FsbCk7CisgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVz
aGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFj
ZUZvckNDYWxsKTsKIAogICAgIGlmIChHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlSW50ZXJuYWw6OnZl
cmJvc2UpIHsKICAgICAgICAgZGF0YUxvZygiYmFzZUdQUiA9ICIsIGJhc2VHUFIsICJcbiIpOwpA
QCAtMjI1LDEyICsyMjUsOSBAQCB2b2lkIEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmVtaXRET01K
SVRHCiAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnKTsKICAgICBmb3Ig
KEZQUlJlZyByZWcgOiBmcFNjcmF0Y2gpCiAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2Fs
bC5zZXQocmVnKTsKKyAgICBpZiAoaml0LmNvZGVCbG9jaygpLT51c2VEYXRhSUMoKSkKKyAgICAg
ICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsK
ICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6cmVnaXN0
ZXJzVG9Ob3RTYXZlRm9yQ0NhbGwoKSk7Ci0jaWYgQ1BVKEFSTTY0KQotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOwotICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJ
QygpKQotICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KEFSTTY0UmVnaXN0ZXJz
Ojpscik7Ci0jZW5kaWYKIAogICAgIEFjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zIHBhcmFtcyhzdGF0
ZS5tX3ZtLCBXVEZNb3ZlKHJlZ3MpLCBXVEZNb3ZlKGdwU2NyYXRjaCksIFdURk1vdmUoZnBTY3Jh
dGNoKSk7CiAgICAgc25pcHBldC0+Z2VuZXJhdG9yKCktPnJ1bihqaXQsIHBhcmFtcyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBJbkJ5U3RhdHVzIEluQnlT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mCiAgICAgICAgIHJldHVybiBJbkJ5U3RhdHVzKE5vSW5m
b3JtYXRpb24pOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6IHsKLSAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNT
bG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKICAgICAgICAgICAgIHJldHVybiBJbkJ5
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50
aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzYsMTEgKzE3NiwxNiBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGxp
bmtDb2RlSW5saW5lCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZp
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJ
QygpKSB7CisgICAgICAgIC8vIFRoZXNlIGR5bmFtaWMgc2xvdHMgZ2V0IGZpbGxlZCBpbiBieSBT
dHJ1Y3R1cmVTdHViSW5mby4gTm90aGluZyBlbHNlIHRvIGRvLgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgIAogICAgIEdQUlJlZyBiYXNl
ID0gc3R1YkluZm8uYmFzZUdQUjsKQEAgLTIzMywyMyArMjM4LDMxIEBAIEFMV0FZU19JTkxJTkUg
c3RhdGljIGJvb2wgaGFzRnJlZVJlZ2lzdGUKICAgICByZXR1cm4gZ2V0U2NyYXRjaFJlZ2lzdGVy
KHN0dWJJbmZvKSAhPSBJbnZhbGlkR1BSUmVnOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Y2Fu
R2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2Vs
ZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5o
YXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChj
b2RlQmxvY2stPnVzZURhdGFJQygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIGlmIChp
c0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVy
biBoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmll
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQVNTRVJUKGNhbkdlbmVyYXRlU2VsZlBy
b3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2Zmc2V0KSk7CisgICAgQVNTRVJUKGNhbkdlbmVyYXRl
U2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBvZmZzZXQpKTsKKworICAg
IGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIFRoZXNlIGR5bmFtaWMg
c2xvdHMgZ2V0IGZpbGxlZCBpbiBieSBTdHJ1Y3R1cmVTdHViSW5mby4gTm90aGluZyBlbHNlIHRv
IGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCkBAIC0yNzksMjIgKzI5MiwyNSBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxm
UHJvcGVydHlSCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLWJvb2wgSW5saW5l
QWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxl
bmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBK
U0FycmF5KiBhcnJheSkKIHsKICAgICBBU1NFUlQoYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSXNB
cnJheSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5
cGU6OkJhc2VsaW5lSklUKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoIWhhc0Zy
ZWVSZWdpc3RlcihzdHViSW5mbykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biAhaGFzQW55QXJyYXlTdG9yYWdlKGFycmF5LT5pbmRleGluZ1R5cGUoKSkgJiYgYXJyYXktPmlu
ZGV4aW5nVHlwZSgpICE9IEFycmF5Q2xhc3M7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJy
YXkpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKIHsK
LSAgICBBU1NFUlQoaXNDYWNoZWFibGVBcnJheUxlbmd0aChzdHViSW5mbywgYXJyYXkpKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNoZWFibGVBcnJheUxlbmd0aChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBhcnJheSkpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElk
ZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMxOSwxNyArMzM1LDIwIEBAIGJv
b2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKFMKICAgICByZXR1cm4gbGlua2Vk
Q29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVu
Z3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNzOjppc0Nh
Y2hlYWJsZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVy
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJl
dHVybiBoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorYm9vbCBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgQVNTRVJUKGlzQ2FjaGVhYmxlU3Ry
aW5nTGVuZ3RoKHN0dWJJbmZvKSk7CisgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGlzQ2Fj
aGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pKTsKIAogICAgIGlmICghc3R1
YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0z
NjMsMTMgKzM4MiwxOCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgo
CiB9CiAKIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitib29sIElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkg
eworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0
dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5mby5iYXNlR1BSOwogICAgIEpTVmFsdWVS
ZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAKQEAgLTQwNiwxMyArNDMwLDEzIEBA
IHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICBpZiAoY29kZUJs
b2NrLT51c2VEYXRhSUMoKSkgewogICAgICAgICAvLyBJZiBpdCBpcyBub3QgR2V0QnlJZC1saWtl
LXRoaW5nLCB3ZSBkbyBub3QgZW1pdCBub3Agc2xlZCAoZS5nLiBHZXRCeVZhbCkuCiAgICAgICAg
IC8vIFRoZSBjb2RlIGlzIGFscmVhZHkgYW4gaW5kaXJlY3QganVtcCwgYW5kIG9ubHkgdGhpbmcg
d2Ugc2hvdWxkIGRvIGlzIHJlcGxhY2luZyBtX2NvZGVQdHIuCi0gICAgICAgIGlmIChzdHViSW5m
by5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlw
ZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRp
ZmllcikgewogICAgICAgICAgICAgLy8gSWYgbV9jb2RlUHRyIGlzIHBvaW50aW5nIHRvIHN0dWJJ
bmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbiwgdGhpcyBtZWFucyB0aGF0IElubGluZUFjY2VzcyBj
b2RlIGlzIG5vdCBhIHN0dWIgb25lLgogICAgICAgICAgICAgLy8gV2UgcmV3cml0ZSB0aGlzIHdp
dGggdGhlIHN0dWItYmFzZWQgZGlzcGF0Y2hpbmcgY29kZSBvbmNlLCBhbmQgY29udGludWUgdXNp
bmcgaXQgdW50aWwgd2UgcmVzZXQgdGhlIGNvZGUuCiAgICAgICAgICAgICBpZiAoc3R1YkluZm8u
bV9jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0gc3R1YkluZm8uc2xvd1BhdGhTdGFydExv
Y2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpIHsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5mby5zdGFydC5yZXRhZ2dlZDxKU0ludGVybmFsUHRy
VGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4oWyZdKENDYWxsSGVscGVy
cyYgaml0KSB7CiAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cigmc3R1YkluZm8pLCBzdHViSW5mby5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAg
ICAgICAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICAgICAgICAgICAg
ICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBk
b25lTG9jYXRpb24gPSBzdHViSW5mby5kb25lTG9jYXRpb247CiAgICAgICAgICAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzayhbPV0oTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewpAQCAtNDIxLDcg
KzQ0NSw5IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICAg
ICAgICAgICAgICB9KSwgIklubGluZUFjY2VzczogbGlua2luZyBzdHViIGNhbGwiKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHRhcmdl
dDsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsgLy8g
Q2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTQzNCw4ICs0NjAsMTQgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1
bXBJbkFjYwogICAgIH0pLCAiSW5saW5lQWNjZXNzOiBsaW5raW5nIGNvbnN0YW50IGp1bXAiKTsK
IH0KIAotdm9pZCBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3ZvaWQgSW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQogeworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpICYmIGNvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIHN0dWJJ
bmZvLm1fY29kZVB0ciA9IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKyAgICAgICAg
c3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRo
ZSBpbmxpbmUgYWNjZXNzIGNvZGUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBDQ2Fs
bEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5mby5zdGFydC5yZXRhZ2dlZDxKU0ludGVy
bmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4oWyZdKENDYWxs
SGVscGVycyYgaml0KSB7CiAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYSBub3Agc2xlZCBoZXJl
IGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1waW5nIGludG8gdGhlIG1pZGRsZSBvZiBhbiBJ
Qy4KICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAkod29ya2luZyBj
b3B5KQpAQCAtOTksMTQgKzk5LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4
KHNpemUsIHNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9v
bCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVy
ZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMgYm9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9w
ZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3Rh
dGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwg
U3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxl
QXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7Ci0gICAgc3RhdGljIGJv
b2wgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mKTsKLSAgICBzdGF0
aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSop
OwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZv
JiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTdHJpbmdMZW5ndGgoU3Ry
dWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFj
Y2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5
T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uo
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3Rh
dGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29s
IGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBK
U0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5
TGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0
YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTdHJpbmdMZW5ndGgo
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIAogICAgIHN0YXRpYyB2b2lkIHJld2ly
ZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsK
ICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRh
ZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVy
YXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0VfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVMK
IAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7CiAgICAgdWludDhfdCBzZWVuTW9kZXMg
eyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNlZW5Nb2RlcygpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0YWRhdGEsIHNlZW5Nb2Rlcyk7IH0gCiAg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc2Vlbk1vZGVzKSkgPT0gc2l6ZW9mKEl0
ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQXJyYXlQcm9maWxl
IG1fYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2Zp
bGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJbnRDYWxsTGlua0luZm8sIG1fYXJyYXlQ
cm9maWxlKTsgfQogCiBwcml2YXRlOgogICAgIHVpbnRwdHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5D
YWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYs
MTcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heAogICAgIG1hY3Jv
KE9wSXRlcmF0b3JPcGVuKSBcCiAgICAgbWFjcm8oT3BJdGVyYXRvck5leHQpIFwKIAorI2RlZmlu
ZSBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAorICAg
IG1hY3JvKE9wQWRkKSBcCisgICAgbWFjcm8oT3BNdWwpIFwKKyAgICBtYWNybyhPcERpdikgXAor
ICAgIG1hY3JvKE9wU3ViKSBcCisKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllf
QVJJVEhfUFJPRklMRShtYWNybykgXAorICAgIG1hY3JvKE9wSW5jKSBcCisgICAgbWFjcm8oT3BE
ZWMpIFwKKyAgICBtYWNybyhPcE5lZ2F0ZSkgXAorCiAKIElHTk9SRV9XQVJOSU5HU19CRUdJTigi
dHlwZS1saW1pdHMiKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2Nl
ZWQoKQogewogICAgIHJlc3RvcmVTY3JhdGNoKCk7CiAgICAgaWYgKGppdC0+Y29kZUJsb2NrKCkt
PnVzZURhdGFJQygpKQotICAgICAgICBqaXQtPnJldCgpOworICAgICAgICBqaXQtPmZhckp1bXAo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZEb25lTG9jYXRpb24oKSksIEpTSW50ZXJuYWxQdHJUYWcpOwogICAg
IGVsc2UKICAgICAgICAgc3VjY2Vzcy5hcHBlbmQoaml0LT5qdW1wKCkpOwogfQpAQCAtMTEwLDYg
KzExMCw4IEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXQtPmNvZGVC
bG9jaygpLT5qaXRUeXBlKCkpKTsKIAogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsID0g
UmVnaXN0ZXJTZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdD
YWxsU2l0ZSwgYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJzKCkpOworICAgICAgICBpZiAoaml0LT5j
b2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JD
YWxsLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7CiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVy
c0ZvckNhbGwuZXhjbHVkZShjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIH0KICAgICByZXR1
cm4gbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbDsKQEAgLTEyOCwxMSArMTMwLDEyIEBAIGF1dG8gQWNj
ZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmUKICAgICB9OwogfQogCi1hdXRvIEFjY2Vz
c0dlbmVyYXRpb25TdGF0ZTo6cHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRo
b3V0RXhjZXB0aW9ucyhjb25zdCBSZWdpc3RlclNldCYgZXh0cmEpIC0+IFNwaWxsU3RhdGUKK2F1
dG8gQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9y
Q2FsbFdpdGhvdXRFeGNlcHRpb25zKCkgLT4gU3BpbGxTdGF0ZQogewogICAgIFJlZ2lzdGVyU2V0
IGxpdmVSZWdpc3RlcnMgPSBhbGxvY2F0b3ItPnVzZWRSZWdpc3RlcnMoKTsKKyAgICBpZiAoaml0
LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgIGxpdmVSZWdpc3RlcnMuYWRkKHN0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKICAgICBsaXZlUmVnaXN0ZXJzLmV4Y2x1ZGUoY2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKLSAgICBsaXZlUmVnaXN0ZXJzLm1lcmdlKGV4dHJhKTsKIAogICAg
IGNvbnN0ZXhwciB1bnNpZ25lZCBleHRyYVN0YWNrUGFkZGluZyA9IDA7CiAgICAgdW5zaWduZWQg
bnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVyUHJlc2VydmF0aW9uID0gU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKCpqaXQsIGxp
dmVSZWdpc3RlcnMsIGV4dHJhU3RhY2tQYWRkaW5nKTsKQEAgLTU5NiwxNiArNTk5LDExIEBAIEFj
Y2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICBDQ2FsbEhlbHBlcnMg
aml0KGNvZGVCbG9jayk7CiAgICAgc3RhdGUuaml0ID0gJmppdDsKIAotICAgIGlmIChjb2RlQmxv
Y2stPnVzZURhdGFJQygpKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5tX2RvZXNKU0dldHRlclNldHRl
ckNhbGxzKSB7Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIG5vIGd1YXJhbnRlZSB0aGF0IHN0YWNr
LXBvaW50ZXIgaXMgdGhlIGV4cGVjdGVkIG9uZS4gVGhpcyBpcyBub3QgYSBwcm9ibGVtIGlmIHdl
IGRvIG5vdCBoYXZlIEpTIGdldHRlciAvIHNldHRlciBjYWxscyBzaW5jZSBzdGFjay1wb2ludGVy
IGlzCi0gICAgICAgICAgICAvLyBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyIGluIHRoZSBDIGNhbGxp
bmcgY29udmVuc2lvbi4gSG93ZXZlciwgb3VyIEpTIGV4ZWN1dGFibGUgY2FsbCBkb2VzIG5vdCBz
YXZlIHN0YWNrLXBvaW50ZXIuIFNvIHdlIGFyZSBhZGp1c3Rpbmcgc3RhY2stcG9pbnRlciBhZnRl
cgotICAgICAgICAgICAgLy8gSlMgZ2V0dGVyIC8gc2V0dGVyIGNhbGxzLiBCdXQgdGhpcyBjb3Vs
ZCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5pdGlhbCBzdGFjay1wb2ludGVyLCBhbmQgbWFrZXMg
UEFDIHRhZ2dpbmcgYnJva2VuLgotICAgICAgICAgICAgLy8gVG8gZW5zdXJlIFBBQy10YWdnaW5n
IHdvcmssIHdlIGZpcnN0IGFkanVzdCBzdGFjay1wb2ludGVyIHRvIHRoZSBhcHByb3ByaWF0ZSBv
bmUuCi0gICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNv
ZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworICAgIGlmICghY2FuQmVTaGFyZWQg
JiYgQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqaXQuc2NyYXRjaFJlZ2lzdGVyKCkp
OworICAgICAgICBhdXRvIG9rID0gaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBqaXQuc2NyYXRjaFJlZ2lzdGVyKCkp
OworICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICBvay5saW5rKCZqaXQpOwogICAg
IH0KIAogICAgIHN0YXRlLnByZXNlcnZlZFJldXNlZFJlZ2lzdGVyU3RhdGUgPQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNyArMjUxLDcgQEAgc3RydWN0
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGNhbGN1bGF0
ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9uSGFuZGxpbmcoKTsKIAogICAgIFNwaWxs
U3RhdGUgcHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoY29uc3QgUmVnaXN0ZXJT
ZXQmIGV4dHJhID0geyB9KTsKLSAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1Rv
U3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhID0g
eyB9KTsKKyAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
V2l0aG91dEV4Y2VwdGlvbnMoKTsKIAogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9t
U3RhY2tGb3JDYWxsV2l0aFRocm93bkV4Y2VwdGlvbihjb25zdCBTcGlsbFN0YXRlJik7CiAgICAg
dm9pZCByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoY29uc3QgU3BpbGxTdGF0
ZSYsIGNvbnN0IFJlZ2lzdGVyU2V0JiBkb250UmVzdG9yZSA9IHsgfSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeVN0YXR1cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4MCwxMCArMTgwLDEwIEBAIFB1dEJ5U3RhdHVzIFB1dEJ5U3Rh
dHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlm
aWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHVpZCk7Ci0g
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0gICAgICAgICAgICBzdHViSW5mby0+bV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKKyAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZShwcm9maWxlZEJsb2NrLT52bSgpKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RG
TW92ZShpZGVudGlmaWVyKSwgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5n
ZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBQdXRCeVZhcmlhbnQ6OnJlcGxhY2Uo
V1RGTW92ZShpZGVudGlmaWVyKSwgc3RydWN0dXJlLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4g
UHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKICAgICB9
CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKIAogI2lu
Y2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1
ZGUgIlJlcGF0Y2guaCIKIApAQCAtNjUsOSArNjYsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojppbml0R2V0QnlJZFNlbGYoCiAgICAgQVNTRVJUKGhhc0NvbnN0YW50SWRlbnRpZmllcik7CiAg
ICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZik7CiAgICAgbV9p
ZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUu
c2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsKKyAgICBt
X2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5p
ZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwot
ICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0OworICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zm
c2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0QXJyYXlMZW5ndGgoY29uc3Qg
Q29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyKQpAQCAtODcsOSArODgsOSBAQCB2b2lkIFN0
cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJlcGxhCiAgICAgQVNTRVJUKG1fY2FjaGVUeXBl
ID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlw
ZTo6UHV0QnlJZFJlcGxhY2UpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAg
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0g
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVh
cC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNl
dDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6aW5pdEluQnlJZFNlbGYoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2Vy
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlKiBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmll
cikKQEAgLTk3LDkgKzk4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEluQnlJZFNl
bGYoYwogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KTsKICAgICBz
ZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OkluQnlJZFNlbGYpOwogICAgIG1faWRlbnRp
ZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsK
ICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1
LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsK
IH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQpAQCAtMjM2LDcgKzIzNyw3IEBA
IEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJlU3R1YkluZm8KICAgICAgICAgLy8gd2Un
cmUgYnVmZmVyZWQgaXMgYmVjYXVzZSB3ZSByZWx5IG9uIGl0IHRvIHJlc2V0IGR1cmluZyBHQyBp
ZiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUKICAgICAgICAgLy8gaXMgY29sbGVjdGVkLgog
ICAgICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwotICAgICAgICBtX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
ID0gMDsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGdlbmVyYXRlZCBzb21lIGNvZGUgdGhl
biB3ZSBkb24ndCB3YW50IHRvIGF0dGVtcHQgdG8gcmVwYXRjaCBpbiB0aGUgZnV0dXJlIHVudGls
IHdlCiAgICAgICAgIC8vIGdhdGhlciBlbm91Z2ggY2FzZXMuCkBAIC0yNTEsNyArMjUyLDcgQEAg
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogewogICAgIGNsZWFyQnVm
ZmVyZWRTdHJ1Y3R1cmVzKCk7CiAgICAgbV9pZGVudGlmaWVyID0gbnVsbHB0cjsKLSAgICBtX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUgPSAwOwogCiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQp
CiAgICAgICAgIHJldHVybjsKQEAgLTI4NSw2ICsyODYsNyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgICAgIHJlc2V0UHV0QnkoY29kZUJsb2NrLCAqdGhp
cywgUHV0QnlLaW5kOjpCeUlkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBl
OjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgogICAgICAg
ICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlWYWwpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKQEAgLTM2MCw4ICszNjIsOCBA
QCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgfQogCiAgICAg
Ym9vbCBpc1ZhbGlkID0gdHJ1ZTsKLSAgICBpZiAobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
KQotICAgICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNNYXJrZWQobV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlLmdldCgpKTsKKyAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlKHZtKSkKKyAgICAgICAgaXNWYWxpZCAmPSB2bS5oZWFwLmlzTWFy
a2VkKHN0cnVjdHVyZSk7CiAgICAgaWYgKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6U3R1YikK
ICAgICAgICAgaXNWYWxpZCAmPSB1LnN0dWItPnZpc2l0V2Vhayh2bSk7CiAKQEAgLTM3NSw4ICsz
NzcsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJh
bnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAobV9pbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlKQotICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPm1hcmtJZkNo
ZWFwKHZpc2l0b3IpOworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGlubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUodmlzaXRvci52bSgpKSkKKyAgICAgICAgc3RydWN0dXJlLT5tYXJrSWZD
aGVhcCh2aXNpdG9yKTsKIAogICAgIGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIp
CiAgICAgICAgIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CkBAIC00MzAs
NiArNDMyLDIwOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnNlCiAg
ICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvKQoreworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgYWNjZXNzVHlwZSA9IHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZTsK
KyAgICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8uc3RhcnQ7CisgICAgZG9uZUxvY2F0aW9uID0g
dW5saW5rZWRTdHViSW5mby5kb25lTG9jYXRpb247CisgICAgc2xvd1BhdGhTdGFydExvY2F0aW9u
ID0gdW5saW5rZWRTdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgY2FsbFNpdGVJ
bmRleCA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKTsKKyAgICBjb2RlT3JpZ2luID0gQ29kZU9yaWdpbih1bmxpbmtl
ZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIG1fY29kZVB0ciA9IHNsb3dQYXRoU3RhcnRM
b2NhdGlvbjsKKworICAgIHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCk7CisgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJ
ZCAmJiB1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSB7CisgICAg
ICAgIC8vIEZvciBpdGVyYXRvcl9uZXh0LCB3ZSBjYW4ndCBjbG9iYmVyIHRoZSAiZG9udENsb2Ji
ZXJSZWdpc3RlciIgcmVnaXN0ZXIgZWl0aGVyLgorICAgICAgICB1c2VkUmVnaXN0ZXJzLmFkZChC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXIpOworICAgIH0KKwor
ICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlW
YWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1p
emU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIG1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtl
ZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6Cisg
ICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAg
ICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRp
bWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRT
dHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2
YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRC
eUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgor
ICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8ucHV0S2luZCkgeworICAgICAgICBjYXNl
IFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVj
bWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0Ogor
ICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAg
ICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0
cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gdW5s
aW5rZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25Q
dXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQ
cml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpTZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNl
dFByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFs
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQ
UiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVy
dHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFs
dWVHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOgorICAgICAgICBoYXNDb25z
dGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlk
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gSW52YWxpZEdQUlJl
ZzsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsK
KyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlWYWw6CisgICAg
Y2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVu
dGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7Cisg
ICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9
IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIHZhbHVlR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MucHJvdG90
eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICAgICAgbV9z
dHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVC
cmFuZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBi
YXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnBy
b3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAg
dmFsdWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9z
dHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBoYXNDb25zdGFu
dElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVn
OworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
ICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAg
bV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOgorICAgIGNhc2UgQWNj
ZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWQ6Cisg
ICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5
SWRXaXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAg
ICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAg
ICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJz
Ojp0aGlzVmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAg
ICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxp
bmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1l
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHJlZ3MucHJvcGVy
dHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFs
dWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHVi
SW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBp
ZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQdXRCeVZhbCkKKyAgICAgICAgICAgIG1fYXJy
YXlQcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVu
dGlmaWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAg
ICAgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgICAg
ICByZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwor
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh1
bmxpbmtlZFN0dWJJbmZvKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQor
CiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmNoZWNrQ29uc2lz
dGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlICJQdXRLaW5kLmgi
CiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmVTZXQuaCIKQEAgLTU2LDYgKzU3LDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NU
eXBlIDogaW50OF90IHsKICAgICBHZXRCeVZhbCwKICAgICBQdXRCeUlkLAogICAgIFB1dEJ5VmFs
LAorICAgIFB1dFByaXZhdGVOYW1lLAogICAgIEluQnlJZCwKICAgICBJbkJ5VmFsLAogICAgIEhh
c1ByaXZhdGVOYW1lLApAQCAtNzgsNiArODAsOCBAQCBlbnVtIGNsYXNzIENhY2hlVHlwZSA6IGlu
dDhfdCB7CiAgICAgU3RyaW5nTGVuZ3RoCiB9OwogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbzsKKwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm8gewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZvKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
QEAgLTk4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBh
Ym91dFRvRGllKCk7CiAKKyAgICB2b2lkIGluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJik7CisKICAgICBE
RUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8vIENoZWNrIGlmIHRoZSBzdHViIGhhcyB3
ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYgaXQgZG9lcywgdGhlbiBpdCByZXNldHMg
aXRzZWxmLApAQCAtMzI1LDEzICszMzEsMTkgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbjsKKyAgICBQcm9wZXJ0eU9mZnNldCBieUlkU2VsZk9mZnNldDsK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIGJ5SWRTZWxmT2Zmc2V0KTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBtX2lubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOyB9CiAgICAgdW5pb24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgICAgICB9IGJ5SWRTZWxmOwogICAgICAgICBQ
b2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsKICAgICB9IHU7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4gbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlOworICAgIFN0cnVjdHVyZSogaW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZShWTSYgdm0pCisgICAgeworICAgICAgICBpZiAoIW1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gdm0uZ2V0U3RydWN0dXJlKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7Cisg
ICAgfQorICAgIFN0cnVjdHVyZUlEIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSB7IDAgfTsK
IHByaXZhdGU6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgLy8g
UmVwcmVzZW50cyB0aG9zZSBzdHJ1Y3R1cmVzIHRoYXQgYWxyZWFkeSBoYXZlIGJ1ZmZlcmVkIEFj
Y2Vzc0Nhc2VzIGluIHRoZSBQb2x5bW9ycGhpY0FjY2Vzcy4KQEAgLTM1Miw2ICszNjQsNyBAQCBw
dWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBt
X2NvZGVQdHI7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZVB0cigpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgbV9jb2RlUHRyKTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEb25lTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIGRvbmVMb2NhdGlvbik7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2xvd1BhdGhTdGFydExvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBzbG93UGF0aFN0YXJ0TG9jYXRpb24pOyB9CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1fc2xvd09wZXJhdGlvbik7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ291bnRkb3duKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBjb3VudGRvd24pOyB9CkBAIC00NDcsNiArNDYwLDE3IEBA
IGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW4KICAgICB9CiB9CiAKK3N0
cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5
cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0
ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtpbmQ6Om5vbmUoKSB9OworICAgIEVDTUFN
b2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgpIH07CisgICAgQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PiBzdGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9y
ICpieUlkIGNhY2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9mIHBhdGNoYWJsZSBqdW1wIGZvciAnaW5z
dGFuY2VvZicgY2FjaGVzLgorICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IGRvbmVMb2NhdGlvbjsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4gc2xvd1BhdGhTdGFydExvY2F0aW9uOworfTsKKwogI2Vsc2UKIAogY2xhc3MgU3RydWN0dXJl
U3R1YkluZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1w
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Vw
ZXJTYW1wbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcg
QEAgdm9pZCBwcmludFN1cGVyU2FtcGxlclN0YXRlKCkKICAgICBkb3VibGUgcGVyY2VudGFnZSA9
IDEwMC4wICogaW4gLyAoaW4gKyBvdXQpOwogICAgIGlmIChwZXJjZW50YWdlICE9IHBlcmNlbnRh
Z2UpCiAgICAgICAgIHBlcmNlbnRhZ2UgPSAwLjA7Ci0gICAgZGF0YUxvZygiUGVyY2VudCB0aW1l
IGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBlcmNlbnRhZ2UsICJcbiIpOworICAgIGRh
dGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50
YWdlLCAiJVxuIik7CiB9CiAKIHZvaWQgZW5hYmxlU3VwZXJTYW1wbGVyKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAj
aW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29k
ZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgogI2luY2x1ZGUgIkJ5
dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgpAQCAtNzgsNiArNzksOCBA
QCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0mCiAgICAgICAgIGNyZWF0
ZVJhcmVEYXRhSWZOZWNlc3NhcnkobG9ja2VyKTsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9wcml2
YXRlQnJhbmRSZXF1aXJlbWVudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcml2YXRlQnJhbmRS
ZXF1aXJlbWVudDo6TmVlZGVkKTsKICAgICB9CisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIu
c2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRB
ZnRlcldhcm1VcCgpKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CkBAIC0zMTYs
NiArMzE5LDQ4IEBAIGludCBVbmxpbmtlZENvZGVCbG9jazo6b3V0T2ZMaW5lSnVtcE9mZnMKICAg
ICByZXR1cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5nZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQog
CisjaWYgQVNTRVJUX0VOQUJMRUQKK2Jvb2wgVW5saW5rZWRDb2RlQmxvY2s6Omhhc0lkZW50aWZp
ZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVy
cygpID4gMTAwKSB7CisgICAgICAgIGlmIChudW1iZXJPZklkZW50aWZpZXJzKCkgIT0gbV9jYWNo
ZWRJZGVudGlmaWVyVWlkcy5zaXplKCkpIHsKKyAgICAgICAgICAgIExvY2tlciBsb2NrZXIobV9j
YWNoZWRJZGVudGlmaWVyVWlkc0xvY2spOworICAgICAgICAgICAgSGFzaFNldDxVbmlxdWVkU3Ry
aW5nSW1wbCo+IGNhY2hlZElkZW50aWZpZXJVaWRzOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciA9IHRoaXMtPmlkZW50aWZpZXIoaSk7Cisg
ICAgICAgICAgICAgICAgY2FjaGVkSWRlbnRpZmllclVpZHMuYWRkKGlkZW50aWZpZXIuaW1wbCgp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
KyAgICAgICAgICAgIG1fY2FjaGVkSWRlbnRpZmllclVpZHMgPSBXVEZNb3ZlKGNhY2hlZElkZW50
aWZpZXJVaWRzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX2NhY2hlZElkZW50aWZp
ZXJVaWRzLmNvbnRhaW5zKHVpZCk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7CisgICAgICAgIGlmIChpZGVudGlmaWVy
KGkpLmltcGwoKSA9PSB1aWQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK2ludDMyX3QgVW5saW5rZWRDb2RlQmxvY2s6OnRo
cmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKK3sKKyAgICBzd2l0Y2ggKGRpZE9wdGlt
aXplKCkpIHsKKyAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgorICAgICAgICByZXR1
cm4gdGhyZXNob2xkOworICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgorICAgICAgICByZXR1cm4g
dGhyZXNob2xkICogNDsKKyAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgorICAgICAgICByZXR1cm4g
dGhyZXNob2xkIC8gMjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIHRocmVzaG9sZDsKK30KKworCiB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNo
YXJlZFByb2ZpbGVzKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9tZXRhZGF0YS0+aXNGaW5h
bGl6ZWQoKSk7CkBAIC0zMzcsMTUgKzM4MiwyNSBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjph
bGxvY2F0ZVNoYXJlZFByCiAgICAgaWYgKG1fbWV0YWRhdGEtPmhhc01ldGFkYXRhKCkpIHsKICAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheVByb2ZpbGVzID0gMDsKIAotI2RlZmluZSBDT1VO
VChfX29wKSBcCi0gICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5u
dW1FbnRyaWVzPF9fb3A+KCk7CisjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQXJyYXlQcm9m
aWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CiAgICAgICAgIEZPUl9FQUNI
X09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ09VTlQpCiAgICAgICAgIEZPUl9FQUNIX09QQ09E
RV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENPVU5UKQogI3VuZGVmIENPVU5UCiAgICAgICAg
IG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPE9wSXRlcmF0
b3JOZXh0PigpOwogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+
bnVtRW50cmllczxPcEdldEJ5SWQ+KCk7Ci0KICAgICAgICAgbV9hcnJheVByb2ZpbGVzID0gRml4
ZWRWZWN0b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+KG51bWJlck9mQXJyYXlQcm9maWxlcyk7CisK
KyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCaW5hcnlBcml0aFByb2ZpbGVzID0gMDsKKyNkZWZp
bmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZCaW5hcnlBcml0aFByb2ZpbGVzICs9IG1fbWV0YWRhdGEt
Pm51bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQklOQVJZ
X0FSSVRIX1BST0ZJTEUoQ09VTlQpCisjdW5kZWYgQ09VTlQKKyAgICAgICAgbV9iaW5hcnlBcml0
aFByb2ZpbGVzID0gRml4ZWRWZWN0b3I8QmluYXJ5QXJpdGhQcm9maWxlPihudW1iZXJPZkJpbmFy
eUFyaXRoUHJvZmlsZXMpOworCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mVW5hcnlBcml0aFBy
b2ZpbGVzID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZVbmFyeUFyaXRoUHJvZmls
ZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOworICAgICAgICBGT1JfRUFDSF9P
UENPREVfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKENPVU5UKQorI3VuZGVmIENPVU5UCisgICAg
ICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzID0gRml4ZWRWZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+
KG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDEyIEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQXJyYXlQcm9maWxl
LmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkNvZGVUeXBl
LmgiCiAjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKKyNpbmNsdWRlICJFeGVjdXRpb25Db3Vu
dGVyLmgiCiAjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgogI2luY2x1ZGUgIkhhbmRs
ZXJJbmZvLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgpAQCAtNjQsNiArNjYsNyBAQCBjbGFz
cyBVbmxpbmtlZENvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOwog
Y2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogc3RydWN0IEV4ZWN1dGFibGVJbmZv
OwogZW51bSBjbGFzcyBMaW5rVGltZUNvbnN0YW50IDogaW50MzJfdDsKIApAQCAtMTc1LDYgKzE3
OCw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtu
b3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsg
fQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50
b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
c1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdl
dENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRS
ZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQogICAgIGNvbnN0IEZpeGVk
VmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OyB9CiAKQEAgLTIwNyw2ICsyMTEsMTUgQEAgcHVibGljOgogICAgIEpTUGFyc2VyU2NyaXB0TW9k
ZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRN
b2RlPihtX3NjcmlwdE1vZGUpOyB9CiAKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5z
dHJ1Y3Rpb25zKCkgY29uc3Q7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uQXQo
Qnl0ZWNvZGVJbmRleCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5k
ZXgpLnB0cigpOyB9CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25z
QmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5hdCgwKS5wdHIoKTsKKyAgICAgICAgY29uc3QgYXV0byog
aW5zdHJ1Y3Rpb25zRW5kID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbnN0cnVjdGlvbnNCZWdpbikgKyBpbnN0cnVjdGlv
bnMoKS5zaXplKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0cnVjdGlvbiA+PSBpbnN0
cnVjdGlvbnNCZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGluc3RydWN0aW9uc0VuZCk7CisgICAgICAg
IHJldHVybiBpbnN0cnVjdGlvbiAtIGluc3RydWN0aW9uc0JlZ2luOworICAgIH0KKyAgICB1bnNp
Z25lZCBpbnN0cnVjdGlvbnNTaXplKCkgY29uc3QgeyByZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBt
X251bUNhbGxlZUxvY2FsczsgfQogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVy
biBtX251bVZhcnM7IH0KQEAgLTMzNCwxMCArMzQ3LDIxIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG1fbWV0YWRhdGEtPnNpemVJbkJ5dGVzKCk7CiAgICAgfQogCisgICAgYm9vbCBsb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCisgICAgeworICAgICAgICAvLyBT
b21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdheXMgY29tcGxldGUgdGhlIGxvb3BzIHRo
ZXkgcnVuLgorICAgICAgICByZXR1cm4gIWlzQnVpbHRpbkZ1bmN0aW9uKCk7CisgICAgfQogICAg
IHZvaWQgYWxsb2NhdGVTaGFyZWRQcm9maWxlcygpOwogICAgIFVubGlua2VkVmFsdWVQcm9maWxl
JiB1bmxpbmtlZFZhbHVlUHJvZmlsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZVBy
b2ZpbGVzW2luZGV4XTsgfQogICAgIFVubGlua2VkQXJyYXlQcm9maWxlJiB1bmxpbmtlZEFycmF5
UHJvZmlsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVzW2luZGV4XTsg
fQogCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29sIGhhc0lkZW50aWZpZXIoVW5pcXVlZFN0
cmluZ0ltcGwqKTsKKyNlbmRpZgorCisgICAgaW50MzJfdCB0aHJlc2hvbGRGb3JKSVQoaW50MzJf
dCB0aHJlc2hvbGQpOworCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2RlQmxvY2soVk0mLCBT
dHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mLCBPcHRpb25TZXQ8Q29k
ZUdlbmVyYXRpb25Nb2RlPik7CiAKQEAgLTM5Nyw2ICs0MjEsOSBAQCBwcml2YXRlOgogICAgIHVu
c2lnbmVkIG1fbGV4aWNhbFNjb3BlRmVhdHVyZXMgOiA0OwogcHVibGljOgogICAgIENvbmN1cnJl
bnRKU0xvY2sgbV9sb2NrOworI2lmIEVOQUJMRShKSVQpCisgICAgUmVmUHRyPEJhc2VsaW5lSklU
Q29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKKyNlbmRpZgogcHJpdmF0ZToKICAgICBDb2Rl
RmVhdHVyZXMgbV9mZWF0dXJlcyB7IDAgfTsKICAgICBTb3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1v
ZGU7CkBAIC00MTMsNyArNDQwLDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5z
dHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3M7CiAKLQogI2lmIEVOQUJMRShERkdfSklU
KQogICAgIERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKICNlbmRpZgpAQCAtNDU4LDYg
KzQ4NCwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9m
ZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAgfQorICAgIGludCBvdXRPZkxpbmVKdW1w
T2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZzZXQocGMpOworICAgICAgICByZXR1cm4g
b3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgfQorCisgICAgQmluYXJ5
QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUodW5zaWduZWQgaSkgeyByZXR1cm4gbV9i
aW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHVuYXJ5QXJp
dGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9
CisKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSB7
IHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7IH0KIAogcHJpdmF0ZToKICAgICB1c2luZyBP
dXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwg
aW50PjsKQEAgLTQ2NSw4ICs1MDEsMTYgQEAgcHJpdmF0ZToKICAgICBPdXRPZkxpbmVKdW1wVGFy
Z2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0
YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4
cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0
ZUNvdW50ZXI7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRWYWx1ZVByb2ZpbGU+IG1fdmFsdWVQ
cm9maWxlczsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtlZEFycmF5UHJvZmlsZT4gbV9hcnJheVBy
b2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPEJpbmFyeUFyaXRoUHJvZmlsZT4gbV9iaW5hcnlBcml0
aFByb2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJp
dGhQcm9maWxlczsKKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgTG9jayBtX2NhY2hlZElkZW50
aWZpZXJVaWRzTG9jazsKKyAgICBIYXNoU2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gbV9jYWNoZWRJ
ZGVudGlmaWVyVWlkczsKKyNlbmRpZgogCiBwcm90ZWN0ZWQ6CiAgICAgREVDTEFSRV9WSVNJVF9D
SElMRFJFTjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1l
dGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjQsNiArNjQsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUpOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNldEluTWV0YWRhdGFUYWJsZShjb25zdCBP
cGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2lzRmluYWxpemVkKTsKKyAg
ICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0gbV9pczMyQml0ID8gb2Zmc2V0VGFibGUz
MigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFibGUxNigpW09wY29kZTo6b3Bjb2RlSURd
OworICAgICAgICBiYXNlVHlwZU9mZnNldCA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25vZih0
eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSwgYmFzZVR5cGVPZmZzZXQpOworICAgICAgICByZXR1
cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSkgKiBv
cGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZT4KICAgICB1bnNpZ25lZCBudW1FbnRyaWVzKCk7CiAKQEAgLTEwNyw2ICsxMTYsNyBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gc19vZmZzZXQxNlRhYmxlU2l6ZTsKICAgICB9CiAKKwog
ICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAgICAgdXNpbmcgT2Zmc2V0MTYgPSB1aW50
MTZfdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmls
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVBy
b2ZpbGUuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMyArNDUsMTEgQEAgc3Ry
dWN0IFZhbHVlUHJvZmlsZUJhc2UgewogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBu
dW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNBcmd1bWVudDsKICAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzID0gMTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFzayA9IG51bWJlck9mQnVja2V0cyAtIDE7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0b3RhbE51bWJlck9mQnVja2V0cyA9IG51
bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxCdWNrZXRzOwogICAgIAogICAgIFZhbHVl
UHJvZmlsZUJhc2UoKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRv
dGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCi0gICAgICAgICAgICBtX2J1Y2tldHNbaV0gPSBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgY2xlYXJCdWNrZXRzKCk7CiAgICAgfQog
ICAgIAogICAgIEVuY29kZWRKU1ZhbHVlKiBzcGVjRmFpbEJ1Y2tldCh1bnNpZ25lZCBpKQpAQCAt
NTksNiArNTcsMTIgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICBBU1NFUlQo
bnVtYmVyT2ZCdWNrZXRzICsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzKTsKICAgICAgICAgcmV0
dXJuIG1fYnVja2V0cyArIG51bWJlck9mQnVja2V0cyArIGk7CiAgICAgfQorCisgICAgdm9pZCBj
bGVhckJ1Y2tldHMoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRv
dGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCisgICAgICAgICAgICBtX2J1Y2tldHNbaV0gPSBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICB9CiAgICAgCiAgICAgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8odW5zaWduZWQgYnVja2V0KSBjb25zdAogICAgIHsKQEAgLTEyMyw4ICsxMjcs
NiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0g
ICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2
ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAgIC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5n
IHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKQEAgLTEzOSw3ICsxNDEsNyBA
QCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbV9w
cmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVuY29kZWRKU1ZhbHVlIG1fYnVja2V0c1t0
b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVjdWxhdGVkVHlwZSBtX3ByZWRpY3Rpb24g
eyBTcGVjTm9uZSB9OwpAQCAtMTYxLDYgKzE2Myw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVXaXRo
TG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVlUHJvZmlsZSA6IHB1YmxpYyBWYWx1ZVBy
b2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsKICAgICBWYWx1ZVByb2ZpbGUoKSA6IFZh
bHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8MD4oKSB7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVmFs
dWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9OwogCiBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5k
VmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJvZmlsZSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQmFzZWxp
bmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50Lmgi
CiAjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmgi
CiAjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgiCkBAIC0zNCw3ICsz
NSw5IEBACiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2VtZW50LmgiCiAjaW5jbHVkZSAiREZHT1NS
RW50cnkuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWVTZXQuaCIKKyNpbmNsdWRlICJKSVRN
YXRoSUMuaCIKICNpbmNsdWRlICJKU0Nhc3QuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1h
cC5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJSZWNvcmRl
ZFN0YXR1c2VzLmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgpAQCAtNzAsNyArNzMsNyBAQCBzdHJ1
Y3QgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24gewogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1f
dG87CiB9OwogICAgICAgICAKLWNsYXNzIENvbW1vbkRhdGEgeworY2xhc3MgQ29tbW9uRGF0YSA6
IHB1YmxpYyBNYXRoSUNIb2xkZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbW1vbkRh
dGEpOwogcHVibGljOgogICAgIENvbW1vbkRhdGEoKQpAQCAtMTE2LDYgKzExOSw3IEBAIHB1Ymxp
YzoKICAgICBGaXhlZFZlY3RvcjxDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQ+IG1fd2F0
Y2hwb2ludHM7CiAgICAgRml4ZWRWZWN0b3I8QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBt
X2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CiAgICAgRml4ZWRWZWN0b3I8QWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBtX2FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFw
PiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgIFJlY29yZGVkU3RhdHVzZXMgcmVjb3JkZWRTdGF0
dXNlczsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50PiBtX2p1bXBSZXBsYWNlbWVudHM7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgorI2luY2x1ZGUgIkp1bXBUYWJs
ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiAr
NDIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7CiAKK3N0
cnVjdCBTaW1wbGVKdW1wVGFibGU7CitzdHJ1Y3QgU3RyaW5nSnVtcFRhYmxlOworCiBuYW1lc3Bh
Y2UgREZHIHsKIAogY2xhc3MgSklUQ29tcGlsZXI7CkBAIC0xMDEsNiArMTA0LDggQEAgcHVibGlj
OgogICAgIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gZmluZFBDKENvZGVCbG9jayosIHZvaWQq
IHBjKSBmaW5hbDsKIAogICAgIHVzaW5nIERpcmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVm
Rm9yREZHOworCisgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3Zl
cnJpZGUgeyByZXR1cm4gY29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KICAgICAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENvbXBpbGVyOyAvLyBBbGxvdyBKSVRDb21w
aWxlciB0byBjYWxsIHNldENvZGVSZWYoKS4KQEAgLTExMCw2ICsxMTUsOCBAQCBwdWJsaWM6CiAg
ICAgRml4ZWRWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG1fb3NyRW50cnk7CiAgICAgRml4ZWRW
ZWN0b3I8REZHOjpPU1JFeGl0PiBtX29zckV4aXQ7CiAgICAgRml4ZWRWZWN0b3I8REZHOjpTcGVj
dWxhdGlvblJlY292ZXJ5PiBtX3NwZWN1bGF0aW9uUmVjb3Zlcnk7CisgICAgRml4ZWRWZWN0b3I8
U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgRml4ZWRWZWN0b3I8U3Ry
aW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgREZHOjpWYXJpYWJs
ZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07CiAgICAgREZHOjpNaW5pZmllZEdyYXBo
IG1pbmlmaWVkREZHOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSwxMyArMTg1LDEy
IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAKICAgICBt
X2dyYXBoLnJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7CiAKLSAgICBpZiAoIW1fZ3JhcGgubV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSB8fCAhbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJs
ZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2Rl
QmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEo
bG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKTsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRh
Ymxlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShs
b2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N3aXRjaEp1bXBU
YWJsZXMpOwotICAgIH0KKyAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJs
ZXMuaXNFbXB0eSgpKTsKKyAgICBpZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
LmlzRW1wdHkoKSkgCisgICAgICAgIG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
ID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgaWYgKCFt
X2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpCisgICAgICAgIG1faml0Q29kZS0+
bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7
CiAKICAgICBmb3IgKEJhZzxTd2l0Y2hEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fZ3JhcGgubV9z
d2l0Y2hEYXRhLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CiAgICAgICAgIFN3aXRjaERhdGEm
IGRhdGEgPSAqKml0ZXI7CkBAIC0xOTksMTIgKzE5OCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjps
aW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIGNhc2UgU3dpdGNoQ2hhcjoKICAgICAgICAg
Y2FzZSBTd2l0Y2hJbW06IHsKICAgICAgICAgICAgIGlmICghZGF0YS5kaWRVc2VKdW1wVGFibGUp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShk
YXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF0uaXNF
bXB0eSgpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X2dyYXBoLnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0g
ICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3
aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICAgICAgU2ltcGxl
SnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2Rh
dGEuc3dpdGNoVGFibGVJbmRleF07CiAgICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1
bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tk
YXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fYnJh
bmNoT2Zmc2V0cy5zaXplKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbGlua2Vk
VGFibGUubV9jdGlPZmZzZXRzLnNpemUoKTsgai0tOykKQEAgLTIxOSwxMiArMjE4LDEyIEBAIHZv
aWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKIAogICAgICAgICBjYXNlIFN3
aXRjaFN0cmluZzogewogICAgICAgICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkgewot
ICAgICAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxl
KGRhdGEuc3dpdGNoVGFibGVJbmRleCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQobV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUlu
ZGV4XS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fZ3JhcGgudW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hU
YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7
CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9qaXRDb2RlLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XTsKICAgICAgICAg
ICAgIGF1dG8gY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRh
Zz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2stPmluZGV4XSk7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuc2l6ZSgpID09IHVu
bGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS5zaXplKCkgKyAxKTsKICAgICAgICAgICAgIGZvciAo
YXV0byYgZW50cnkgOiBsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMpCkBAIC0zMzMsNyArMzMyLDcg
QEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIH0KIAogICAg
IGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKLSAgICAg
ICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKG1ha2VVbmlxdWU8UENUb0NvZGVP
cmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpLCBsaW5rQnVmZmVy
KSk7CisgICAgICAgIG1faml0Q29kZS0+Y29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtl
VW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyKSwgbGlua0J1ZmZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIGVtaXRTdGFja092ZXJmbG93Q2hl
Y2soSklUQ29tcGlsZXImIGppdCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzdGFja092ZXJm
bG93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw2IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRy
eShWTSYgdm0sIENhbGxGcmFtZSoKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09
IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1h
cCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0
aWxsVmFsaWQpOwogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VPU1JFbnRyeVRvREZHKCkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDI4MzA1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc3Miw5ICs3NzIsNiBAQCB2b2lkIE9TUkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxs
SGVscGVycyYgCiAgICAgLy8gVGhlIHRhZyByZWdpc3RlcnMgYXJlIG5lZWRlZCB0byBtYXRlcmlh
bGl6ZSByZWNvdmVyaWVzIGJlbG93LgogICAgIGppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1Jl
Z2lzdGVycygpOwogCi0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAg
IGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BF
bnRyeUZyYW1lKTsKLQogICAgIGlmIChpbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2lu
dCkgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogdG1wU2NyYXRjaCA9IHNjcmF0Y2ggKyBvcGVy
YW5kcy50bXBJbmRleCgwKTsKICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvbk1hdGVyaWFsaXplT1NSRXhpdFNpZGVTdGF0ZSk+KCZ2bSwgJmV4aXQsIHRtcFNjcmF0
Y2gpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkNv
ZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZH
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpJVC5oIgpAQCAtMTE5LDEwICsxMjAsMTAgQEAgdm9p
ZCBoYW5kbGVFeGl0Q291bnRzKFZNJiB2bSwgQ0NhbGxIZWxwZQogICAgIGludDMyX3QgY2xpcHBl
ZFZhbHVlOwogICAgIHN3aXRjaCAoaml0LmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpIHsKICAgICBj
YXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAgY2xpcHBlZFZhbHVlID0gQmFzZWxpbmVFeGVj
dXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2Jq
ZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVlID0gQmFzZWxpbmVFeGVj
dXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IFVw
cGVyVGllckV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoaml0LmNvZGVCbG9jaygp
LT5nbG9iYWxPYmplY3QoKSwgdGFyZ2V0VmFsdWUpOworICAgICAgICBjbGlwcGVkVmFsdWUgPSBV
cHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKHRhcmdldFZhbHVlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTE0MiwxMSArMTQzLDggQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVAogewogICAgIGNhbGxlcklzTExJbnQgPSBPcHRpb25zOjpmb3JjZU9T
UkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmppdFR5cGUoKSA9
PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogCi0gICAgaWYgKGNhbGxCeXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkgewotICAgICAgICBpZiAoIWNhbGxlcklzTExJbnQpCi0gICAgICAgICAg
ICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsK
KyAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQogICAgICAgICByZXR1cm4g
TExJbnQ6OmNoZWNrcG9pbnRPU1JFeGl0RnJvbUlubGluZWRDYWxsVHJhbXBvbGluZVRodW5rKCku
Y29kZSgpOwotICAgIH0KIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFn
PiBqdW1wVGFyZ2V0OwogCkBAIC0xOTgsOCArMTk2LDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVAogI3VuZGVmIExMSU5UX1JFVFVSTl9MT0NBVElPTgogCiAgICAg
fSBlbHNlIHsKLSAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1faGFzTGlua2Vk
T1NSRXhpdCA9IHRydWU7Ci0KICAgICAgICAgc3dpdGNoICh0cnVlQ2FsbGVyQ2FsbEtpbmQpIHsK
ICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNhbGw6CiAgICAgICAgIGNhc2UgSW5saW5l
Q2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CkBAIC0zMTMsNiArMzA5LDEwIEBAIHZvaWQgcmVpZnlJbmxp
bmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxs
ZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2
ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVy
czo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rp
b25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGlu
ZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFIpKTsKKyAgICAgICAgfSBlbHNlIGlm
ICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKKyAgICAg
ICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVD
b2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGlu
ZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19tZXRhZGF0YUdQUikpOworICAg
ICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVKSVRDb25zdGFudFBvb2woKSksIGNhbGxlZVNh
dmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJVDo6c19jb25zdGFu
dHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1Zh
cmFyZ3MoKSkKQEAgLTQwNCw3ICs0MDQsOCBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChW
TSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6UmVnaXN0ZXJzOjpwY0dQUik7CiAgICAg
ICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29kZUJsb2NrRm9yRXhp
dC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJ
VDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGluZUpJVENvbnN0YW50UG9vbCgpKSwgSklU
OjpzX2NvbnN0YW50c0dQUik7CiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBleGl0SW5kZXggPSBl
eGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbjsKQEAgLTQyMCwxMiArNDIxLDE2IEBA
IHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2bSwgQ0NhbGwKICAgICAgICAganVtcFRh
cmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKICAgICB9CiAKLSAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9ja0ZvckV4aXQpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRs
ZXIoKSkgeworICAgICAgICBBU1NFUlQoIVJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rl
cnMoKS5jb250YWlucyhMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikpOworICAgICAgICBqaXQuY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFt
ZSwgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKExMSW50OjpSZWdpc3RlcnM6OnBj
R1BSKSk7CisKICAgICAgICAgLy8gU2luY2Ugd2UncmUganVtcGluZyB0byBvcF9jYXRjaCwgd2Ug
bmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCiAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgdm0uYWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSk7
CiAgICAgfQotICAgIAorCisgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVv
ZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKICAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJlZ1QyKTsKICAgICBqaXQuZmFy
SnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0clRhZyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5l
cy5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0
aHMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCkBA
IC0yODY5LDcgKzI4NzAsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRmlu
ZFN3CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwog
ICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
Ci0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgQVNT
RVJUKHZhbHVlLmlzRG91YmxlKCkpOwogICAgIGRvdWJsZSBhc0RvdWJsZSA9IHZhbHVlLmFzRG91
YmxlKCk7CkBAIC0yODkwLDcgKzI4OTEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uU3dpdGNoCiAKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxw
dHIpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
LSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJp
bmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU3RyaW5nSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwogICAgIHJldHVybiBsaW5rZWRUYWJsZS5jdGlGb3JWYWx1ZSgqdW5saW5rZWRUYWJs
ZSwgc3RySW1wbCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMwLDYgKzczMCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIHNodWZm
bGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihjYWxsZWVUYWdHUFIsIGNhbGxl
ZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQWxs
b2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVt
UGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBtX2pp
dC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogCiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CiAgICAgICAgICAgICAgICAgRWRn
ZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CkBAIC04
ODksNyArODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQog
CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkg
ewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwg
Y2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6
Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0
aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsKICAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxl
RGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9q
aXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI4LDYgKzgyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9
IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAg
ICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9
IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwpAQCAtOTc5LDcgKzk4MCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAKICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBpZiAoaXNUYWlsKSB7Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQs
IGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBb
Jl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVm
ZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
bV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICszOTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0
aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNh
bGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgbV9q
aXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFj
Y2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2VkUmVnaXN0ZXJzLAogICAgICAgICBKU1ZhbHVl
UmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShwcm9w
ZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwogICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKIApAQCAtNDkwNSw3ICs0OTA1
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0
aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVEFkZElDKiBh
ZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOworICAg
IEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVEFkZElDKGFy
aXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1
ZUFkZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
VmFsdWVBZGQ7CiAgICAgCkBAIC00OTg5LDcgKzQ5ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlVmFsdWVTdWIoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9
IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50
aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgSklUU3ViSUMqIHN1YklDID0gbV9qaXQuY29kZUJsb2NrKCkt
PmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUU3ViSUMqIHN1YklDID0gbV9qaXQu
aml0Q29kZSgpLT5jb21tb24uYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemU7CiAgICAgYXV0byBu
b25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1YjsKIApAQCAtNTU3MSw3ICs1
NTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTmVnYXRlKAogICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBVbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPnVuYXJ5QXJp
dGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVROZWdJQyog
bmVnSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAg
ICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVROZWdJQyhh
cml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJp
dGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJh
dGlvbkFyaXRoTmVnYXRlOwogICAgIGNvbXBpbGVNYXRoSUMobm9kZSwgbmVnSUMsIHJlcGF0Y2hp
bmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKQEAgLTU4MTUsNyArNTgxNSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU11bChOb2QKICAgICBDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9m
aWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRNdWxJQyogbXVsSUMg
PSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRN
dWxJQyogbXVsSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRNdWxJQyhhcml0aFBy
b2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxP
cHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVl
TXVsOwogCkBAIC0xNDc3MCw3ICsxNDc3MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2Rl
LT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3BlUmVnID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBt
X2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdz
LCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCksIGNhbGxTaXRlSW5kZXgpOworICAgIG1faml0
LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHNj
b3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBj
YWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTYsNyArMTU2LDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQog
CiAgICAgaWYgKHZtLnNob3VsZEJ1aWxkZXJQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKSkgewogICAg
ICAgICBCMzo6UENUb09yaWdpbk1hcCBvcmlnaW5NYXAgPSBzdGF0ZS5wcm9jLT5yZWxlYXNlUENU
b09yaWdpbk1hcCgpOwotICAgICAgICBjb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKG1h
a2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwg
V1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcikp
OworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1h
a2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwg
V1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcik7
CiAgICAgfQogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gbGFiZWwgPSBz
dGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRh
Zz4oc3RhdGUucHJvYy0+Y29kZSgpLmVudHJ5cG9pbnRMYWJlbCgwKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYg
KzY4LDggQEAgcHVibGljOgogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uKCkgb3ZlcnJp
ZGU7CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjb21tb25EYXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpJVENvZGUsIGNvbW1vbik7IH0KICAgICB2b2lkIHNocmlua1RvRml0KGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIG92ZXJyaWRlOworCisgICAgUENUb0NvZGVPcmlnaW5N
YXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gY29tbW9uLm1fcGNUb0Nv
ZGVPcmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKICAgICBERkc6OkNvbW1vbkRhdGEgY29tbW9uOwog
ICAgIFZlY3RvcjxPU1JFeGl0PiBtX29zckV4aXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDE0ICs1Miw2IEBAIHZvaWQg
bGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICBncmFwaC5yZWdpc3RlckZyb3plblZhbHVlcygpOwog
Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5lbnN1
cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7Ci0g
ICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1
bXBUYWJsZXMuaXNFbXB0eSgpKTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIC8vIENyZWF0ZSB0aGUg
ZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlzIGVudHJ5cG9pbnQgdG90YWxseSBkaWZm
ZXJlbnRseQogICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3JlIGRvaW5nIE9TUiBlbnRy
eSBvciBub3QuCiAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBACiAjaW5jbHVkZSAiSlNTZXRJdGVyYXRvci5o
IgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgi
CisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9iZUNvbnRleHQu
aCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuaCIKQEAgLTIzMjAsNiArMjMyMSwxOCBAQCBwcml2YXRlOgogICAgICAgICBjb21w
aWxlQmluYXJ5TWF0aElDPEpJVFN1YkdlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCByZXBhdGNoaW5n
RnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CiAgICAgfQogCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Cisg
ICAgc3RhdGljIEpJVEFkZElDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJp
bmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVEFkZElDKHBy
b2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdl
bmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUTXVsSUMqIGFkZE1hdGhJQyhE
Rkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJl
dHVybiBjb21tb24uYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0
YXRpYyBKSVROZWdJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29tbW9uLCBVbmFyeUFy
aXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVE5lZ0lDKHByb2ZpbGUp
OyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRv
cj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUU3ViSUMqIGFkZE1hdGhJQyhERkc6OkNv
bW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBj
b21tb24uYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKwogICAgIHZvaWQgY29tcGlsZVZhbHVlTXVs
KCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CkBAIC0yMzkxLDcgKzI0MDQsNyBA
QCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAgICAgICAgICAgICBCb3g8TWF0aElDR2VuZXJhdGlv
blN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRl
Pjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiog
bWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRoSUM8R2VuZXJhdG9yPihhcml0aFByb2Zp
bGUpOworICAgICAgICAgICAgICAgIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9
IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRDb2RlLT5jb21tb24sIGFyaXRoUHJvZmls
ZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihKU1Zh
bHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLCBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBw
YXJhbXMuZ3BTY3JhdGNoKDApKTsKIAogICAgICAgICAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFBy
b2ZpbGluZyA9IGZhbHNlOwpAQCAtMjUwMCw3ICsyNTEzLDcgQEAgcHJpdmF0ZToKICNlbmRpZgog
CiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJh
dGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBqaXQuY29kZUJs
b2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICAg
ICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0
b3I+KHN0YXRlLT5qaXRDb2RlLT5jb21tb24sIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgICAgICAg
ICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVy
YW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLAogICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBKU1ZhbHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkp
LCBwYXJhbXMuZnBTY3JhdGNoKDApLAogICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZnBTY3Jh
dGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKQEAgLTQzMTcsNyArNDMzMCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwog
CiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46
OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJ
VCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZh
bCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9k
ZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFt
ZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CiAKICAgICAgICAgICAgIGdlbmVy
YXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CkBAIC0xMDI4NSw2ICsx
MDI5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1BbGxvY2F0ZWRBcmdzOyArK2kpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dChqc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBh
c3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0
YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAg
ICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQu
Y29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5r
SW5mbyhzZW1hbnRpY05vZGVPcmlnaW4pOwpAQCAtMTA0NDMsMTMgKzEwNDU3LDE0IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MuYXBwZW5kKHBhcmFtc1sx
ICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOwogCiAgICAgICAgICAgICAgICAgc2h1ZmZsZURh
dGEubnVtUGFzc2VkQXJncyA9IG51bUFyZ3M7CisgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEu
bnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJl
Z2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogCiAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhjb2RlT3Jp
Z2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChDYWxsTGlua0lu
Zm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIHNs
b3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86
OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7
CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKICAgICAg
ICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMDc5Miw3ICsxMDgwNyw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAg
ICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwg
SW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
cHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKQEAgLTEx
MDczLDcgKzExMDg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBk
b25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQ
UkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6Tm8s
IFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBbJl0gewogICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICAgICAg
ICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTMsMjggKzQx
MywxNiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkCiAKICAgICBS
ZWdpc3RlclNldCBhbGxGVExDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZl
UmVnaXN0ZXJzKCk7CiAgICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGJhc2VsaW5lQ2Fs
bGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwotICAg
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiB2bUNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2Fs
bGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJlZ2lzdGVyU2V0IHZtQ2FsbGVlU2F2ZXNU
b1NraXAgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKLSAgICBpZiAoZXhpdC5pc0V4
Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICBqaXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFt
ZSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSks
IEdQUkluZm86OnJlZ1QxKTsKLSAgICB9CiAKICAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0
KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgewogICAgICAgICBpZiAo
IWFsbEZUTENhbGxlZVNhdmVzLmdldChyZWcpKSB7Ci0gICAgICAgICAgICBpZiAoZXhpdC5pc0V4
Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghdm1DYWxs
ZWVTYXZlcy0+ZmluZChyZWcpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAg
ICAgICAgIHVuc2lnbmVkIHVud2luZEluZGV4ID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0
ZXJzKCktPmluZGV4T2YocmVnKTsKICAgICAgICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldCogYmFz
ZWxpbmVSZWdpc3Rlck9mZnNldCA9IGJhc2VsaW5lQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKTsKLSAg
ICAgICAgUmVnaXN0ZXJBdE9mZnNldCogdm1DYWxsZWVTYXZlID0gbnVsbHB0cjsgCi0gICAgICAg
IGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICAgICAgdm1DYWxsZWVTYXZl
ID0gdm1DYWxsZWVTYXZlcy0+ZmluZChyZWcpOwogCiAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkg
ewogICAgICAgICAgICAgR1BSUmVnIHJlZ1RvTG9hZCA9IGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQg
PyBHUFJJbmZvOjpyZWdUMCA6IHJlZy5ncHIoKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlZ1RvTG9hZCAhPSBHUFJJbmZvOjpyZWdUMSk7CiAKICAgICAgICAgICAgIGlmICh1bndpbmRJ
bmRleCA9PSBVSU5UX01BWCkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBGVEwgY29tcGlsYXRp
b24gZGlkbid0IHByZXNlcnZlIHRoaXMgcmVnaXN0ZXIuIFRoaXMgbWVhbnMgdGhhdCBpdCBhbHNv
CkBAIC00NTIsOCArNDQwLDYgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1bnNp
Z25lZAogCiAgICAgICAgICAgICBpZiAoYmFzZWxpbmVSZWdpc3Rlck9mZnNldCkKICAgICAgICAg
ICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1h
Y3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgYmFzZWxpbmVSZWdpc3Rlck9mZnNl
dC0+b2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmICh2bUNhbGxlZVNhdmUgJiYgIXZtQ2FsbGVl
U2F2ZXNUb1NraXAuZ2V0KHZtQ2FsbGVlU2F2ZS0+cmVnKCkpKQotICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTY0KHJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVn
VDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIEZQUlJlZyBmcFJlZ1RvTG9hZCA9IGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPyBGUFJJbmZv
OjpmcFJlZ1QwIDogcmVnLmZwcigpOwogCkBAIC00NjQsMTkgKzQ1MCw5IEBAIHN0YXRpYyB2b2lk
IGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAogICAgICAgICAgICAgaWYgKGJhc2VsaW5l
UmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKGZwUmVnVG9M
b2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVy
UmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQtPm9mZnNldCgpKSk7Ci0gICAgICAgICAg
ICBpZiAodm1DYWxsZWVTYXZlICYmICF2bUNhbGxlZVNhdmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNh
dmUtPnJlZygpKSkKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoZnBSZWdUb0xvYWQs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9m
ZnNldCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhh
bmRsZXIoKSkgewotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0KiB2bUNhbGxlZVNhdmUgPSB2bUNh
bGxlZVNhdmVzLT5maW5kKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKLSAgICAgICAgaml0
LnN0b3JlNjQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7Ci0KLSAgICAgICAg
dm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChHUFJJbmZvOjpub3RDZWxsTWFza1Jl
Z2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3Rl
ciwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+
b2Zmc2V0KCkpKTsKLSAgICB9Ci0KICAgICBzaXplX3QgYmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJz
Rm9yQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCk7CiAKICAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tD
b250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3b3JraW5nIGNvcHkpCkBAIC00Miwx
NyArNDIsMjggQEAgY2xhc3MgTWV0YWRhdGEKICAgICBkZWYgc3RydWN0KG9wKQogICAgICAgICBy
ZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVs
ZHMpCisgICAgICAgIGRlZiBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGRO
YW1lcykKKyAgICAgICAgICAgIGZpZWxkTmFtZXMubWFwIGRvIHxmaWVsZE5hbWV8CisgICAgICAg
ICAgICAgICAgIiN7cHJlZml4fXN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVsw
XS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uLTFdfSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikK
KyAgICAgICAgZW5kCisKKyAgICAgICAgZGVmIGNvbnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMs
IGZpZWxkTmFtZXMpCiAgICAgICAgICAgICBmaWVsZHMubWFwIGRvIHxmaWVsZCwgdHlwZXwKICAg
ICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhhc2gKLSAgICAgICAgICAgICAgICAgICAg
IiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUp
fVxuI3twcmVmaXh9fTsiCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4j
e2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlLCBmaWVsZE5hbWVzKX1cbiN7cHJl
Zml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJl
Zml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307IgorICAgICAgICAgICAgICAgICAgICBm
aWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVz
aChmaWVsZE5hbWUpCisgICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30g
bV8je2ZpZWxkTmFtZX07IgogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpv
aW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcygi
ICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVsZE5hbWVzID0gW10KKyAgICAgICAgcHJl
Zml4ID0gIiAgICAgICAgIgorICAgICAgICBmaWVsZHMgPSBjb252ZXJ0RmllbGRzKHByZWZpeCwg
QGZpZWxkcywgZmllbGROYW1lcykKKyAgICAgICAgZmllbGRzID0gZmllbGRzICsgIlxuIiArIGdl
bmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBmaWVsZE5hbWVzKQogCiAgICAgICAgIGlu
aXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJz
LmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDYgKzM2NywyOCBAQCB2
b2lkIEFzc2VtYmx5SGVscGVyczo6bG9hZFByb3BlcnR5KEdQUlJlCiAgICAgICAgIHJlc3VsdCk7
CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZh
bHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAg
ICBKdW1wIGlzSW5saW5lID0gYnJhbmNoMzIoTGVzc1RoYW4sIG9mZnNldCwgVHJ1c3RlZEltbTMy
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKG9iamVj
dCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgbmVnMzIob2Zm
c2V0KTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7CisgICAgSnVtcCBy
ZWFkeSA9IGp1bXAoKTsKKyAgICAKKyAgICBpc0lubGluZS5saW5rKHRoaXMpOworICAgIGFkZFB0
cigKKyAgICAgICAgVHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJf
dD4oc2l6ZW9mKEpTT2JqZWN0KSkgLQorICAgICAgICAgICAgKHN0YXRpY19jYXN0PGludDMyX3Q+
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDIpICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSkpLAorICAgICAgICBvYmplY3QsIHNjcmF0Y2gpOworICAgIAorICAg
IHJlYWR5LmxpbmsodGhpcyk7CisgICAgCisgICAgc3RvcmVWYWx1ZSh2YWx1ZSwKKyAgICAgICAg
QmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Cit9CisKIHZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVyZShWTSYgdm0sIFJlZ2lzdGVySUQgc291cmNlLCBSZWdp
c3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpA
QCAtNjk4LDggKzcyMCwxMyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNh
dmVzCiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGwoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENh
bGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBpbmZvKTsKK30KKwordm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZt
LCBDYWxsTGlua0luZm8qIGluZm8pCit7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBH
UFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0gbmVhckNhbGwoKTsKICAgICBhZGRMaW5r
VGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICBhdXRvIGNh
bGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpJVENvbXBpbGF0aW9u
UHRyVGFnPihjYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDggKzIzNCw5IEBAIHB1
YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBjbG9iYmVy
cyBvZmZzZXQuCisgICAgLy8gTm90ZSB0aGF0IHRoZXNlIGNsb2JiZXIgb2Zmc2V0LgogICAgIHZv
aWQgbG9hZFByb3BlcnR5KEdQUlJlZyBvYmplY3QsIEdQUlJlZyBvZmZzZXQsIEpTVmFsdWVSZWdz
IHJlc3VsdCk7CisgICAgdm9pZCBzdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJS
ZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBHUFJSZWcgc2NyYXRjaCk7CiAKICAgICB2b2lkIG1v
dmVWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3Mgc3JjUmVncywgSlNWYWx1ZVJlZ3MgZGVzdFJlZ3MpCiAg
ICAgewpAQCAtMzc5LDE1ICszODAsMjYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAg
dm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZy
YW1lKiYgdG9wRW50cnlGcmFtZSwgR1BSUmVnIHNjcmF0Y2gpCisgICAgeworI2lmIE5VTUJFUl9P
Rl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorICAgICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZy
YW1lLCBzY3JhdGNoKTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXJJbXBsKHNjcmF0Y2gpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRv
cEVudHJ5RnJhbWUpOworICAgICAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7CisjZW5kaWYKKyAg
ICB9CisKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lKQogICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FM
TEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICAgICAgY29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkg
fTsKICAgICAgICAgR1BSUmVnIHRlbXAxID0gdXNlZFJlZ2lzdGVycy5nZXRGcmVlR1BSKDApOwot
ICAgICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh0ZW1wMSk7CisgICAgICAg
IGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHRvcEVudHJ5RnJh
bWUsIHRlbXAxKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOwogI2VuZGlmCiAgICAgfQogICAg
IApAQCAtMTcyMCw2ICsxNzMyLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIGVt
aXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQ2FsbExpbmtJbmZvKik7CisgICAg
dm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExp
bmtJbmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKICAg
ICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2FsbCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2Rl
LmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCisjaW5jbHVk
ZSAiSnVtcFRhYmxlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK0pJVEFkZElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX2FkZElDcy5hZGQoYXJpdGhQcm9m
aWxlKTsgfQorSklUTXVsSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbXVsSUNzLmFkZChhcml0aFByb2ZpbGUp
OyB9CitKSVRTdWJJQyogTWF0aElDSG9sZGVyOjphZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0K
K0pJVE5lZ0lDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CisKK3Zv
aWQgTWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcikKK3sKKyAg
ICBtX2FkZElDcyA9IFdURk1vdmUob3RoZXIubV9hZGRJQ3MpOworICAgIG1fbXVsSUNzID0gV1RG
TW92ZShvdGhlci5tX211bElDcyk7CisgICAgbV9uZWdJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVn
SUNzKTsKKyAgICBtX3N1YklDcyA9IFdURk1vdmUob3RoZXIubV9zdWJJQ3MpOworfQorCitCYXNl
bGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGUs
IENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spCisgICAgOiBEaXJlY3RKSVRD
b2RlKFdURk1vdmUoY29kZSksIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkK
KyAgICAsIE1hdGhJQ0hvbGRlcigpCit7IH0KKworQmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVK
SVRDb2RlKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRD
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJD
YWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSklUQ29kZU1h
cC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJpbmFy
eUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVuYXJ5QXJpdGhQcm9maWxlOworc3RydWN0IFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmlu
Z0p1bXBUYWJsZTsKKworY2xhc3MgTWF0aElDSG9sZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFk
b3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKTsKKyAgICBKSVRBZGRJQyogYWRkSklUQWRk
SUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFy
eUFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFBy
b2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoVW5hcnlBcml0aFByb2ZpbGUqKTsK
KworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+IG1fYWRkSUNzOworICAgIEJhZzxKSVRNdWxJ
Qz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBtX25lZ0lDczsKKyAgICBCYWc8SklUU3Vi
SUM+IG1fc3ViSUNzOworfTsKKworY2xhc3MgSklUQ29uc3RhbnRQb29sIHsKK3B1YmxpYzoKKyAg
ICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisgICAgZW51bSBjbGFzcyBUeXBlIDogdWlu
dDhfdCB7CisgICAgICAgIEdsb2JhbE9iamVjdCwKKyAgICAgICAgQ2FsbExpbmtJbmZvLAorICAg
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAgRnVuY3Rpb25EZWNsLAorICAgICAgICBG
dW5jdGlvbkV4cHIsCisgICAgfTsKKworICAgIHN0cnVjdCBWYWx1ZSB7CisgICAgICAgIFR5cGUg
dHlwZTsKKyAgICAgICAgUGFja2VkUHRyPHZvaWQ+IHBheWxvYWQ7CisgICAgfTsKKworICAgIEpJ
VENvbnN0YW50UG9vbCgpID0gZGVmYXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2woSklUQ29uc3Rh
bnRQb29sJiYpID0gZGVmYXVsdDsKKyAgICBKSVRDb25zdGFudFBvb2wmIG9wZXJhdG9yPShKSVRD
b25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworCisgICAgQ29uc3RhbnQgYWRkKFR5cGUgdHlwZSwg
dm9pZCogcGF5bG9hZCA9IG51bGxwdHIpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQg
PSBtX2NvbnN0YW50cy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7
IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50cy5zaXplKCk7IH0KKyAgICBW
YWx1ZSBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHNbaV07IH0KKworcHJp
dmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fY29uc3RhbnRzOworfTsKKworCitjbGFzcyBCYXNl
bGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7
CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2RlKENvZGVSZWY8SlNFbnRyeVB0clRhZz4sIENv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2spOworICAgIH5CYXNlbGluZUpJVENv
ZGUoKSBvdmVycmlkZTsKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAo
KSBvdmVycmlkZSB7IHJldHVybiBtX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CisKKyAgICBC
YWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRDYWxsczsKKyAgICBCYWc8Q2FsbExp
bmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBU
YWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJs
ZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAgIEpJVENvZGVNYXAgbV9qaXRDb2RlTWFw
OworICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CisgICAgYm9vbCBtX2lz
U2hhcmVhYmxlIHsgdHJ1ZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJ
VFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxp
bmVKSVRQbGFuLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBA
IHNpemVfdCBCYXNlbGluZUpJVFBsYW46OmNvZGVTaXplKCkgY29uc3QKIAogQ29tcGlsYXRpb25S
ZXN1bHQgQmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6ZSgpCiB7Ci0gICAgQ29tcGlsYXRpb25SZXN1
bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBDb21waWxhdGlv
blJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9uTWFpblRocmVhZChtX2NvZGVCbG9jayk7
CiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgogICAg
ICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwg
KCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw2
IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuUHJvbG8KICAgICBzdG9yZVB0
cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93
Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1Jl
Z3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6
UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVlKSkpOwotICAgIHN0b3JlVmFsdWUodGhp
c1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tl
bjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkp
KTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jayksIEFkZHJlc3Moc2hhZG93
UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2sp
KSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBBZGRy
ZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwg
Y2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0No
aWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFO
b25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAgICBTaGFkb3dDaGlja2VuKiBzaGFkb3dD
aGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpAQCAtNzIsNiArNjIsMjggQEAgdm9pZCBDQ2Fs
bEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQogICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBB
ZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9CiAKKwordGVtcGxhdGUgPHR5cGVuYW1lIENv
ZGVCbG9ja1R5cGU+Cit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNr
ZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcg
c2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5k
ZXgpCit7CisgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Mo
c2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFt
ZSkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6
dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFk
b3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKKyAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBB
ZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tl
dCwgdGhpc1ZhbHVlKSkpOworICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tl
dCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7CisgICAg
c3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOworICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVD
VF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Cit9CisK
K3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hh
ZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1t
UHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIGxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQYWNrZXQsIHRoaXNSZWdzLCBzY29wZSwg
Y29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRo
aXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93
UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisK
IHZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMm
KT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQogewogICAgIENDYWxsSGVscGVy
cyBqaXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4NDAsMTQgQEAgcHVibGljOgogICAgIC8vIFRo
ZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9sYXRpbGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3Vt
ZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRvcCBvZgogICAgIC8vIHN0YWNrIHRvIG1hcnNo
YWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFj
a2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsK
LSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQs
IEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayosIENhbGxTaXRl
SW5kZXgpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
PgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUg
Y29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworcHVibGljOgorICAgIHZv
aWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1
ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENh
bGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisgICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFp
bFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVn
IHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOwor
CiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIgdG8gdGhlIFBhY2tldCB3ZSBzaG91bGQg
d3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZvaWQgZW5zdXJlU2hhZG93Q2hpY2tlblBh
Y2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwg
R1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw4ICszNywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBDYWxsRnJhbWVT
aHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKENvZGVCbG9jayogY29kZUJsb2Nr
KQogeworICAgIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb2RlQmxvY2stPmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVl
U2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9j
YXRpb25zKQorewogICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMgeyBSZWdpc3Rl
clNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkgfTsKLSAgICBjb25zdCBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVn
aXN0ZXJzKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlZ2lzdGVyU2F2ZUxvY2F0
aW9ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSB7IHJl
Z2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDEzIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8VmFsdWVSZWNv
dmVyeT4gYXJnczsKICAgICB1bnNpZ25lZCBudW1Mb2NhbHMgeyBVSU5UX01BWCB9OwogICAgIHVu
c2lnbmVkIG51bVBhc3NlZEFyZ3MgeyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVkIG51bVBhcmFt
ZXRlcnMgeyBVSU5UX01BWCB9OyAvLyBPbiBvdXIgbWFjaGluZSBmcmFtZS4KICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIFJlZ2lzdGVyTWFwPFZhbHVlUmVjb3Zlcnk+IHJlZ2lzdGVyczsKICAgICBH
UFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZhbGlkR1BSUmVnIH07CiAKICAgICB2b2lkIHNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldHVwQ2FsbGVl
U2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCopOwogI2VuZGlmCiAgICAg
VmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCwxMyArMzgsMTMgQEAgQ2FsbEZyYW1lU2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVy
KENDYQogICAgIDogbV9qaXQoaml0KQogICAgICwgbV9vbGRGcmFtZShkYXRhLm51bUxvY2FscyAr
IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKICAgICAsIG1fbmV3
RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJz
LCBudWxscHRyKQotICAgICwgbV9hbGlnbmVkT2xkRnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzCi0gICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1l
KGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAsIG1fYWxpZ25lZE9sZEZy
YW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIHJvdW5kQXJndW1lbnRD
b3VudFRvQWxpZ25GcmFtZShkYXRhLm51bVBhcmFtZXRlcnMpKQogICAgICwgbV9hbGlnbmVkTmV3
RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCiAgICAgICAgICsgcm91
bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEuYXJncy5zaXplKCkpKQogICAgICwgbV9m
cmFtZURlbHRhKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSAtIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSkK
ICAgICAsIG1fbG9ja2VkUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKSkKICAg
ICAsIG1fbnVtUGFzc2VkQXJncyhkYXRhLm51bVBhc3NlZEFyZ3MpCisgICAgLCBtX251bVBhcmFt
ZXRlcnMoZGF0YS5udW1QYXJhbWV0ZXJzKQogewogICAgIC8vIFdlIGFyZSBhbGxvd2VkIGFsbCB0
aGUgdXN1YWwgcmVnaXN0ZXJzLi4uCiAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7IGktLTsgKQpAQCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQgQ2FsbEZyYW1l
U2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSArIFBheWxvYWRPZmZzZXQpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgYXJndW1lbnRDb3VudE9LID0KICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbV9uZXdGcmFtZUJhc2UsCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9udW1QYXJh
bWV0ZXJzKSk7CiAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihz
dGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVn
aXN0ZXJzKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0LmFuZDMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpLCBtX25ld0ZyYW1lQmFz
ZSk7CiAgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2Yo
UmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1fbmV3RnJhbWVCYXNlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICAgICAgQ2FsbEZy
YW1lU2h1ZmZsZURhdGEgZGF0YTsKICAgICAgICAgZGF0YS5udW1Mb2NhbHMgPSBudW1Mb2NhbHMo
KTsKICAgICAgICAgZGF0YS5udW1QYXNzZWRBcmdzID0gbV9udW1QYXNzZWRBcmdzOworICAgICAg
ICBkYXRhLm51bVBhcmFtZXRlcnMgPSBtX251bVBhcmFtZXRlcnM7CiAgICAgICAgIGRhdGEuY2Fs
bGVlID0gZ2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSB9KS0+
cmVjb3ZlcnkoKTsKICAgICAgICAgZGF0YS5hcmdzLnJlc2l6ZShhcmdDb3VudCgpKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudCgpOyArK2kpCkBAIC03OTgsNiArNzk5
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBlcmZvcm1TYWZlV3JpdGVzKCk7CiAgICAgCiAgICAg
dW5zaWduZWQgbV9udW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBtX251
bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcg
QEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJ
VChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUluZGV4IGxvb3BPU1JFbnRy
eUJ5dGVjb2RlSW5kZXgpCi0gICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAg
ICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgbnVsbHB0cikKICAgICAsIG1faW50ZXJwcmV0ZXIodm0u
aW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLnNpemUoKSA6IDApCiAgICAgLCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2
bSkKQEAgLTc3LDYgKzc3LDkgQEAgSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQogICAgICwgbV9sb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCiB7CisgICAgbV9n
bG9iYWxPYmplY3RDb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6Okdsb2JhbE9iamVjdCk7CisgICAgbV9wcm9maWxlZENvZGVCbG9jayA9IGNvZGVCbG9j
azsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9j
aygpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtOTAsOCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVu
dGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgICAgICByZXR1cm47CiAKICAgICBKdW1wTGlzdCBz
a2lwT3B0aW1pemU7Ci0gICAgCi0gICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihT
aWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9y
RW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0
ZUNvdW50ZXIoKSkpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDApOworICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2ln
bmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVu
dHJ5KCkpLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50
ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7CiAKICAgICBj
b3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CkBAIC0xMTMsMTUgKzExNiwy
MCBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqCiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1p
dE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdy
aXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KQogeworICAgIGF1dG8gb2sgPSBicmFu
Y2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChO
b3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9TZXQsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIG9rLmxpbmsodGhpcyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSkKK3ZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2Jh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQot
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJSZWFkT25seVdhdGNocG9pbnQoKS0+YWRkcmVzc09m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykgeworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFs
T2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50
U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQpAQCAtMTI5LDEy
ICsxMzcsMTggQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiAgICAgaWYg
KCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CiAgICAgSnVtcCBvayA9IGJyYW5j
aFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50
KCk7CiAgICAgb2subGluayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6OnJlc2V0U1AoKQoreworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKK30KKwogI2Rl
ZmluZSBORVhUX09QQ09ERShuYW1lKSBcCiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KSk7IFwKICAgICBicmVhazsKQEAgLTE4MSw2MSArMTk1LDQ0IEBAIHZvaWQgSklUOjplbWl0U2xv
d0Nhc2VDYWxsKGNvbnN0IEluc3RydWMKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2
b2lkIEpJVDo6ZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9
PSBGdW5jdGlvbkNvZGUpOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByZXN1bHQpOworICAg
IGF1dG8gaGFzRXhlY3V0YWJsZSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0LCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgp
IC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCByZXN1bHQpOworICAgIGhhc0V4ZWN1dGFibGUu
bGluayh0aGlzKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3Rvcigp
KQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9m
ZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkpLCByZXN1bHQpOworICAgIGVsc2UKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNv
ZGVCbG9ja0ZvckNhbGwoKSksIHJlc3VsdCk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0
LCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpvZmZzZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0
KTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spOworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBwcm9iZURlYnVnKFs9XSAoUHJv
YmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5m
cDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIH0pOworI2Vu
ZGlmCit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIHsKICAgICBpZiAo
SklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyAiLCAqbV9j
b2RlQmxvY2ssICJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fcHJvZmls
ZWRDb2RlQmxvY2ssICJcbiIpOwogICAgIAogICAgIGppdEFzc2VydFRhZ3NJblBsYWNlKCk7CiAg
ICAgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsKICAgICAKLSAgICBhdXRvJiBpbnN0cnVj
dGlvbnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1
Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgYXV0
byYgaW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7Cisg
ICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2FsbExpbmtJbmZvSW5kZXggPSAwOwogCi0gICAg
Vk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAgQnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVj
b2RlSW5kZXgoMCk7Ci0gICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9j
b2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxvY2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+
aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0pKSkgewotICAgICAgICAvLyBXZSBj
YW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNv
ZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KLSAgICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gd291
bGQgYmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhlIExMSW50IGRldGVybWluZXMgaXQgd2Fu
dHMgdG8KLSAgICAgICAgLy8gZG8gT1NSIGVudHJ5IGludG8gdGhlIGJhc2VsaW5lIEpJVCBpbiBh
IGxvb3AsIGl0IHdpbGwgcGFzcyBpbiB0aGUgYnl0ZWNvZGUgb2Zmc2V0IGl0Ci0gICAgICAgIC8v
IHdhcyBleGVjdXRpbmcgYXQgd2hlbiBpdCBraWNrZWQgb2ZmIG91ciBjb21waWxhdGlvbi4gV2Ug
b25seSBuZWVkIHRvIGNvbXBpbGUgY29kZSBmb3IKLSAgICAgICAgLy8gYW55dGhpbmcgcmVhY2hh
YmxlIGZyb20gdGhhdCBieXRlY29kZSBvZmZzZXQuCi0KLSAgICAgICAgLy8gV2Ugb25seSBib3Ro
ZXIgYnVpbGRpbmcgdGhlIGJ5dGVjb2RlIGdyYXBoIGlmIGl0IGNvdWxkIHNhdmUgdGltZSBhbmQg
ZXhlY3V0YWJsZQotICAgICAgICAvLyBtZW1vcnkuIFdlIHBpY2sgYW4gYXJiaXRyYXJ5IG9mZnNl
dCB3aGVyZSB3ZSBkZWVtIHRoaXMgaXMgcHJvZml0YWJsZS4KLSAgICAgICAgaWYgKG1fbG9vcE9T
UkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAyMDApIHsKLSAgICAgICAgICAgIC8vIEFz
IGEgc2ltcGxpZmljYXRpb24sIHdlIGRvbid0IGZpbmQgYWxsIGJ5dGVjb2RlIHJhbmdlcyB0aGF0
IGFyZSB1bnJlYWNoYWJsZS4KLSAgICAgICAgICAgIC8vIEluc3RlYWQsIHdlIGp1c3QgZmluZCB0
aGUgbWluaW11bSBieXRlY29kZSBvZmZzZXQgdGhhdCBpcyByZWFjaGFibGUsIGFuZAotICAgICAg
ICAgICAgLy8gY29tcGlsZSBjb2RlIGZyb20gdGhhdCBieXRlY29kZSBvZmZzZXQgb253YXJkcy4K
LQotICAgICAgICAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaChtX2NvZGVCbG9jaywgbV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxv
Y2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG1fbG9vcE9TUkVudHJ5
Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9j
ayk7Ci0KLSAgICAgICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PEJ5dGVjb2RlQmFzaWNCbG9jayo+
IHdvcmtsaXN0OwotICAgICAgICAgICAgc3RhcnRCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eCgpOwotICAgICAgICAgICAgd29ya2xpc3QucHVzaChibG9jayk7Ci0KLSAgICAgICAgICAgIHdo
aWxlIChCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKLSAgICAg
ICAgICAgICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KHN0ZDo6bWluKHN0
YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgYmxvY2stPmxlYWRlck9mZnNldCgpKSk7Ci0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA6IGJsb2NrLT5zdWNjZXNz
b3JzKCkpCi0gICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goJmdyYXBoW3N1Y2Nlc3Nv
ckluZGV4XSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBBbHNvIGFkZCBjYXRjaCBibG9ja3MgZm9y
IGJ5dGVjb2RlcyB0aGF0IHRocm93LgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+
bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+bGVhZGVyT2Zmc2V0KCk7IGJ5dGVjb2Rl
T2Zmc2V0IDwgYmxvY2stPmxlYWRlck9mZnNldCgpICsgYmxvY2stPnRvdGFsTGVuZ3RoKCk7KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25z
LmF0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBo
YW5kbGVyID0gbV9jb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlz
dC5wdXNoKGdyYXBoLmZpbmRCYXNpY0Jsb2NrV2l0aExlYWRlck9mZnNldChoYW5kbGVyLT50YXJn
ZXQpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gaW5zdHJ1
Y3Rpb24tPnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KIAogICAgIG1fYnl0ZWNvZGVDb3VudEhh
dmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5k
ZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewpA
QCAtMjc4LDEyICsyNzUsMTUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQog
CiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1
dGlvbigpKSkgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9j
azsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY3R4KSB7Cisg
ICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4o
KS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVj
b2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50
ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgICAg
ICB9CiAKKyAgICAgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhdGNoKQorICAgICAgICAgICAgYXNz
ZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CisKICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewog
ICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzKQogICAgICAgICBERUZJTkVfU0xPV19PUChsZXNz
ZXEpCkBAIC01MjcsNyArNTI3LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2Vz
KCkKIAogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAK
LSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2RlSW5kZXgpLnB0cigpOworICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dMbigi
QmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBmb3IgIiwgbV9ieXRlY29kZUluZGV4LCAi
IGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgpKTsKQEAgLTU0NSw4ICs1NDUsOCBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgICAgIGlmIChVTkxJS0VM
WShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0aW9uKCkpKSB7CiAgICAgICAgICAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBw
cm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwog
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gU0xP
VyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkp
LCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC02MDMs
NyArNjAzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV92YWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9kZWxfYnlfaWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9zdWIpCi0j
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZnJvbV9zY29wZSkKICNlbmRpZgogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcHV0X3RvX3Njb3BlKQpAQCAtNjc0LDU1ICs2NzQsNTUg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCit2b2lk
IEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKQor
eworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
MCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRh
dGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBD
b2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwg
c19jb25zdGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
Cit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCiB2b2lkIEpJ
VDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBl
ZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+
Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBzd2l0Y2ggKGxldmVsKSB7
CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQg
PSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAg
ICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6
CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwotICAgICAgICBtX2NhbkJlT3B0aW1p
emVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAgIHN3aXRjaCAo
bV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgY2Fz
ZSBNb2R1bGVDb2RlOgotICAgIGNhc2UgRXZhbENvZGU6Ci0gICAgICAgIG1fY29kZUJsb2NrLT5t
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZ1bmN0aW9uQ29kZToKLSAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0
byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgotICAgICAg
ICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgotICAgICAgICBtX2NvZGVCbG9j
ay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGxldmVsKSAmJiBERkc6Om1p
Z2h0SW5saW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwotICAgICAgICBicmVhazsKLSAgICB9CiAK
LSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkg
fHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkp
IHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2Nr
KTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRh
YmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5t
X3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fY29kZUJs
b2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKLSAgICAgICAgaWYgKG1f
Y29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQotICAg
ICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5u
dW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygp
KSB7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dp
dGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRW
ZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2st
Pm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBt
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1f
dW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVz
KCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHko
KSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxl
QmFzZWxpbmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVu
aXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAm
JiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKSB7CisgICAgICAg
IC8vIEZJWE1FOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBvZmYgb2YgVW5saW5rZWRDb2RlQmxvY2su
CisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1f
cHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KICAgICBpZiAoVU5MSUtFTFkobV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBGSVhNRTogYnVpbGQgcHJvZmlsZXIgZGlz
YXNzZW1ibGVyIG9mZiBVbmxpbmtlZENvZGVCbG9jay4KICAgICAgICAgbV9jb21waWxhdGlvbiA9
IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbigKLSAgICAg
ICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zv
cihtX2NvZGVCbG9jayksCisgICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVCbG9jayksCiAgICAgICAgICAg
ICAgICAgUHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFBy
b2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2Nr
KTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAog
ICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9y
aWdpbihCeXRlY29kZUluZGV4KDApKSk7CkBAIC03NDIsMTEgKzc0MiwxMiBAQCB2b2lkIEpJVDo6
Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1p
dEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2Rl
QmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAgICAgICBlbWl0UHV0Q29kZUJs
b2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAK
LSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwog
ICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsK
ICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzU3LDE2ICs3NTgsMjAgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1vdmUocmVnVDEsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0g
ICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJl
Z2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsK
ICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOworICAgIGVtaXRNYXRlcmlh
bGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKLSAgICBpZiAobV9jb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAgaWYgKG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCgh
bV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgeworICAgICAgICBpZiAoc2hvdWxk
RW1pdFByb2ZpbGluZygpICYmICghbV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3Rvcigp
IHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA+IDEpKSB7CisgICAgICAg
ICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4ZWRWZWN0b3I8VmFsdWVQcm9m
aWxlPjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMg
YSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBz
aXRlICh0bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3
ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCi0gICAgICAg
ICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQor
ICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkg
JiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMo
YXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQpAQCAtNzc3LDEyICs3ODIsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5
bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgICAgICAgICAgICAgbG9hZDMy
KEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CiAjZW5kaWYKLSAgICAg
ICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fY29kZUJsb2NrLT52YWx1ZVByb2Zp
bGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIHN0
b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwgYXJndW1lbnQgKiBzaXplb2YoVmFs
dWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoIUpJ
VENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCghSklUQ29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAKICAg
ICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAgICAgIG1fdm0tPmppdFNpemVTdGF0aXN0
aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhpcyk7CkBAIC03OTksMjQgKzgw
NCwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgbV9i
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0
PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRp
b24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2NrKTsKKyAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJl
Z1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24o
b3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIHJlZ1QwKTsKIAogICAgIC8vIElmIHRo
ZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciByZXF1aXJlIGFyaXR5IGZpeHVw
LgotICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1l
dGVycyAhPSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgIT0gMTsKKyAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNB
cml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxhYmVsKCk7Ci0gICAgICAgIHN0
b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGlu
ZWQpOworCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgICAgIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsK
KyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKHJlZ1QwKTsKKyAgICAg
ICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZz
ZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAKICAgICAgICAgbG9hZDMyKHBheWxvYWRG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMSk7Ci0g
ICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVC
bG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOworICAgICAg
ICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV91bmxpbmtlZENv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwogCiAg
ICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAKICAgICAgICAgaWYg
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/
IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjApOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV91
bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJp
dHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBhcmd1bWVudEdQUjApOwogICAgICAg
ICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLmxp
bmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTgzOSw3ICs4NDcsNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRF
bmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5k
SXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2lu
KCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5l
dyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFz
ZWxpbmVKSVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxM
aW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV91bmxpbmtlZENvZGVCbG9jaywgTGlu
a0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOwogICAgIGxpbmsoKTsKIH0K
IApAQCAtODU4LDggKzg2Niw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgc3dpdGNoIChy
ZWNvcmQudHlwZSkgewogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlOgogICAg
ICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyOiB7Ci0gICAgICAgICAgICBjb25zdCBV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3
aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0
aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVs
c1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6
ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB1bmxpbmtlZFRh
YmxlLm1fYnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3MSw4ICs4NzksOCBAQCB2b2lkIEpJVDo6bGlu
aygpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6U3RyaW5nOiB7Ci0g
ICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
LSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAg
IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNb
dGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29y
ZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGxvY2F0aW9uIDogdW5s
aW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAgICAgICAgICAgICAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hPZmZzZXQ7CkBAIC05MDYsNiArOTE0LDI3
IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsocmVjb3Jk
LmZyb20sIHJlY29yZC5jYWxsZWUpOwogICAgIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
YXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3Ig
KGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRh
Zz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9u
ZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4u
bV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3Rh
cnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXpl
SUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMp
OworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5
SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9p
bkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsK
KyNlbHNlCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIp
OwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7
CkBAIC05MTcsMjEgKzk0NiwyNSBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1faW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisjZW5kaWYKIAogICAgIGZv
ciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIGluZm8gPSAqY29t
cGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBpbmZvLmRvbmVMb2Nh
dGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRp
b25JbmZvLmRvbmVMb2NhdGlvbik7CisjZWxzZQogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8g
PSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKICAgICAgICAgaW5mby5zZXRDb2RlTG9j
YXRpb25zKAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCiAgICAgICAgICAgICBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9j
YXRpb24pKTsKKyNlbmRpZgorCiAgICAgfQogCi0gICAgewotICAgICAgICBKSVRDb2RlTWFwQnVp
bGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zm
c2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkp
Ci0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1f
bGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY29kZUJsb2Nr
LT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCkpOworICAgIEpJVENv
ZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOworICAgIGZvciAodW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29k
ZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkp
CisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRl
Y29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJl
bHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDI2ICs5NzMsNDIgQEAgdm9pZCBKSVQ6Omxp
bmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShtX2NvbXBpbGF0aW9uKSkgeworICAgICAg
ICAvLyBGSVhNRTogc2hvdWxkIHdlIG1ha2UgdGhlIGJ5dGVjb2RlIHByb2ZpbGVyIGtub3cgYWJv
dXQgVW5saW5rZWRDb2RlQmxvY2s/CiAgICAgICAgIGlmIChPcHRpb25zOjpkaXNhc3NlbWJsZUJh
c2VsaW5lRm9yUHJvZmlsZXIoKSkKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRU
b1Byb2ZpbGVyKG1fY29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsKLSAgICAgICAgbV92
bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2NvZGVCbG9jaywgKm1f
Y29tcGlsYXRpb24pOworICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENv
bXBpbGF0aW9uKG1fcHJvZmlsZWRDb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKICAgICB9CiAK
ICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCiAg
ICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFw
PihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpOwogICAg
IAorICAgIC8vIEZJWE1FOiBNYWtlIGEgdmVyc2lvbiBvZiBDb2RlQmxvY2tXaXRoSklUVHlwZSB0
aGF0IGtub3dzIGFib3V0IFVubGlua2VkQ29kZUJsb2NrLgogICAgIENvZGVSZWY8SlNFbnRyeVB0
clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50
cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmco
Q29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSku
ZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhD
b2RlQmxvY2tXaXRoSklUVHlwZShtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRy
VGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0
SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpOwor
ICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgQmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0
aEFyaXR5Q2hlY2spKTsKKworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gV1RGTW92
ZShtX3VubGlua2VkQ2FsbHMpOworICAgIG1faml0Q29kZS0+bV9ldmFsQ2FsbExpbmtJbmZvcyA9
IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3VubGlua2Vk
U3R1YkluZm9zID0gV1RGTW92ZShtX3VubGlua2VkU3R1YkluZm9zKTsKKyAgICBtX2ppdENvZGUt
Pm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBt
X2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1faml0Q29kZU1hcCA9IGppdENvZGVNYXBC
dWlsZGVyLmZpbmFsaXplKCk7CisgICAgbV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNz
KTsKKyAgICBtX2ppdENvZGUtPm1fY29uc3RhbnRQb29sID0gV1RGTW92ZShtX2NvbnN0YW50UG9v
bCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBt
X2lzU2hhcmVhYmxlOworI2Vsc2UKKyAgICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBmYWxz
ZTsKKyNlbmRpZgogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRh
TG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJs
b2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJl
c3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBk
YXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5s
aW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdn
ZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7
CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29t
cGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApA
QCAtOTY4LDI1ICsxMDE3LDE0IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1h
aW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tz
KCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENv
ZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyAr
K2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0
aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMx
OD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFw
KCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4oKTsKLSAgICB9Ci0KICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkK
LSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1Rv
Q29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX2ppdENvZGUtPm1fcGNUb0NvZGVPcmlnaW5NYXAg
PSBXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApOwogCiAgICAgbV92bS0+bWFjaGluZUNvZGVC
eXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0YXRpY19j
YXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAgICAgICAgc3RhdGljX2Nhc3Q8ZG91
YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CisgICAgICAgIHN0YXRpY19j
YXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CiAK
LSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShtX2ppdENvZGUu
cmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwog
fQpAQCAtOTk4LDExICsxMDM2LDExIEBAIHNpemVfdCBKSVQ6OmNvZGVTaXplKCkgY29uc3QKICAg
ICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJ
VDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVm
b3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoZWZmb3J0
KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICByZXR1cm4gZmluYWxp
emVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
RXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxOCArMTA4MCwyOCBAQCB2b2lkIEpJVDo6ZG9N
YWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxv
ZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0
aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVC
bG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5s
aW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpID09IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Y29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAogICAgIHJldHVybiByb3VuZExvY2Fs
UmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChjb2RlQmxvY2stPm51bUNhbGxlZUxv
Y2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9CiAK
LWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vu
c2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQor
eworICAgIHJldHVybiBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENv
ZGVCbG9jaygpKTsKK30KKworaW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2Vk
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2spIC0gMSkub2Zmc2V0KCk7CiB9CiAK
K2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sK
KyAgICByZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2Rl
QmxvY2soKSk7Cit9CisKIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gSklUOjpjb21waWxlVGlt
ZVN0YXRzKCkKIHsKICAgICBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IHJlc3VsdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogCiAj
ZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwgZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01F
U1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9mZnNldCBcIiVzXCIgc2hvdWxkIGJlICVk
LCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19jYXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0
aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5j
bHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCkBAIC00NCw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSklU
TWF0aElDLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUg
IkpTSW50ZXJmYWNlSklULmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiUENU
b0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCiAjaW5jbHVkZSA8
d3RmL1VuaXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsxNTEsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25JbmZvIHsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBkb25lTG9jYXRpb247CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgVW5saW5rZWRD
YWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OworI2Vsc2UKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAgICAgIENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvOworI2VuZGlmCiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
bmV3Q2FsbGVlRnVuY3Rpb24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQg
OiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5U
IEpJVCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRT
bG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEpJVFRodW5rczsKQEAgLTE3MSw2ICsxNzgsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5
IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgogICAgICAgICBzdGF0aWMgY29u
c3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCisgICAgICAgIHVz
aW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZN
JiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMTc4LDI4
ICsxODcsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpK
U0ludGVyZmFjZUpJVDo6dm0oKTsgfQogCiAgICAgICAgIHZvaWQgY29tcGlsZUFuZExpbmtXaXRo
b3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCk7Ci0gICAgICAgIENvbXBpbGF0aW9u
UmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0
IGZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayopOwogICAgICAgICBzaXplX3QgY29kZVNp
emUoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3Jl
Q29tcGlsZSgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNv
bXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQg
ZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29k
ZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBKSVQo
dm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGNvZGVCbG9jaywg
ZWZmb3J0KTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lz
dGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIGludCBz
dGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGlj
IGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKik7CiAKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gY29tcGlsZVRpbWVT
dGF0cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU2Vjb25kcyB0b3RhbENv
bXBpbGVUaW1lKCk7CiAKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0
YUdQUiA9IExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFI7CisgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNfY29uc3RhbnRzR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJH
UFI7CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3Mo
KTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7CiAgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKICAgICAgICAgdm9pZCBsaW5rKCk7Ci0gICAgICAg
IENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsK
KyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklU
Q29tcGlsYXRpb25FZmZvcnQpOwogCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklU
IGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENh
bGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2
ICsyMzcsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkUHRyRnJvbU1l
dGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDMyRnJvbU1l
dGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlLCBjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAg
ICAgdm9pZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90
IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNp
emVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgbG9hZENv
bnN0YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CisgICAgcHJpdmF0ZToKKyAg
ICAgICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZENv
ZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKworICAgICAgICB2b2lk
IGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDAp
OworCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAg
ICAgICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxl
cik7CkBAIC0yNTQsNiArMjk0LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNv
bXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVP
cENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8CisgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpv
cGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncworICAgICAgICAgICAgJiYgT3A6Om9wY29k
ZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQp
OworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PAorICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6
b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKKyAgICAgICAgICAgIHx8IE9wOjpvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzCisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50
KTsKKyNlbHNlCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVu
YWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAm
JiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTI2NSw5ICszMTgsMTAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92
YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAg
ICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICAgICAgICAgLCB2b2lkPiBjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworI2VuZGlmCiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNv
bnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAg
ICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZv
KiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQp
OwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2Fs
bEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAg
LTI4NywxNCArMzQxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0
ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdy
aXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAg
dm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOworICAgICAgICB2b2lkIGVtaXRX
cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhh
dCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFp
bGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0g
ICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVl
UmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNW
YWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25z
dCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRh
dGEmLCBKU1ZhbHVlUmVncyk7CkBAIC0zMDUsOCArMzU4LDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRh
dGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPgogICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSk7CiAKLSAgICAg
ICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BS
LCBBcnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwotICAgICAgICB2b2lkIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVy
SUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3Rl
cklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2Rl
JiwgcHRyZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7
CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2RlIGVjbWFN
b2RlKE9wKTsKQEAgLTU5Myw3ICs2NDgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0
cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02MTEsNyArNjY1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3Vt
ZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2Fy
Z3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAt
NjI3LDE0ICs2ODEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0
U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZh
dGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUpOwotICAgICAgICB2b2lkIGVtaXRIYXNQ
cml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlKTsKKyAgICAgICAgdm9p
ZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAg
IHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3Mp
OwotICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlKTsKKyAgICAg
ICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlw
ZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwogICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShW
aXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKICAgICAgICAgdm9pZCBlbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02NDYsNyArNzAwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90
aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShH
UFJSZWcgcG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBv
aW50KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJp
YWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVl
KiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0
KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCopOwpAQCAtNjU1LDYgKzcwOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQg
ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lz
dGVyKTsKIAorICAgICAgICBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAg
ICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAg
IGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9v
bCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY3NiwxMyArNzMx
LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0m
KTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGVHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNs
b3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9wcml2
YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfdG9fc2NvcGVHZW5l
cmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfY2hlY2tfdHJh
cHNfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJik7CkBA
IC02OTYsMzIgKzc0OSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAh
KHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1
cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKICAgICAgICAgfQogCi0jZGVmaW5l
IERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2dldF9mcm9t
X3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9S
RVNPTFZFX1RZUEUoREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVD
TEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZl
VHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKLQotICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gTW9kdWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9y
ZSBlZmZpY2llbnQgdG8gZW1pdCBpbmxpbmUgdGhhbiB1c2UgYSB0aHVuay4KLSAgICAgICAgICAg
IC8vIFJlc29sdmVkQ2xvc3VyZVZhciBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3
aXRoIG9wX3Jlc29sdmVfc2NvcGUuCi0gICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9
PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAg
ICAgfQotCi0jZGVmaW5lIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5
cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mKTsKLSAgICAg
ICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1Ip
Ci0jdW5kZWYgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwotCiAgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5l
cmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gdmFsdWVJc1RydXRoeUdlbmVyYXRvcihWTSYpOwogCiAjZW5kaWYgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYpOwor
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93
X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5r
KFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7
CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdl
bmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+
LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworCiAgICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKQEAgLTc2MCwxMCArNzk3LDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4s
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4KLSAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGw+CkBAIC04MjEsMjAgKzg1OCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25B
cmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJn
cz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlv
blR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rp
b25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+
Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9w
ZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFy
Z3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBB
cmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJh
dGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlv
biwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3Vs
dCk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBl
LCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFy
Z3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlw
ZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1l
dGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQs
IEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQs
IEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJ
bmRpcmVjdENhbGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKG1ldGFkYXRhLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZz
ZXQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpA
QCAtOTE5LDI1ICs5NTYsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6
ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1f
Y2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmls
aW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBi
b29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5C
ZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJs
ZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBv
ZmYsCiAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAg
ICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRp
ZgogCisgICAgICAgIHZvaWQgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xS
ZWdpc3RlcnMoKTsKKworICAgICAgICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwog
ICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGlj
IGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91
IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5l
ZWQgaXQgdG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNs
b3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBn
aXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgot
ICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOworCisgICAgICAgIHZvaWQgcmVzZXRTUCgp
OwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjQsOSArOTk4
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Ns
b3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAotICAg
ICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAg
ICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRo
UHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAg
IEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEwMDAsMTEgKzEwMzEsMjYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0
aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRl
OwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJl
T3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsK
ICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAg
ICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAgICAgICAgQ29kZUJsb2Nr
KiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBVbmxpbmtlZENvZGVC
bG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKworICAgICAgICBNYXRoSUNI
b2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENv
ZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAgICAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgQmFnPFVubGlua2VkQ2Fs
bExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1f
ZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
PiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFi
bGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRh
YmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAgc3RydWN0IE5vdEFDb2Rl
QmxvY2sgeyB9IG1fY29kZUJsb2NrOworCisgICAgICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRy
dWUgfTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0
YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzIwLDcgKzMyMSw4IEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcg
KzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAg
ICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCBy
ZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBu
b3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwg
cmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJv
IDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC01NzMsNyArNTc3
LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IAogCiAgICAgZW1p
dExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1Qy
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03MTcsOCAr
NzIyLDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cgogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhh
cml0aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5h
ZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQo
Y3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJl
IGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3Bl
cmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRl
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3Bl
cmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAtODk5LDggKzkwNCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9j
b2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJVEFkZElDKiBh
ZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
QWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUwLDExIEBA
IHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdlbmVy
YXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBV
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRo
UHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmls
ZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBlbHNl
CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBz
KTsKIApAQCAtMTAxNSwxMCArMTAyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklU
QmluYXJ5TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAgICAg
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmls
ZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
YXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKICAg
ICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwog
CkBAIC0xMDU1LDEzICsxMDYyLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFy
eU1hdGhJQzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAg
ICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
aWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVs
c2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJl
cGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlv
biksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwog
CiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVs
KCk7CkBAIC0xMTIwLDEzICsxMTI4LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRC
aW5hcnlNYXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQp
OwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAg
ICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJ
QykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+
KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmls
ZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQs
IGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24p
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCBy
ZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRo
SUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQg
PSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNv
bnN0IEluc3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1f
b3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0
X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11
bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE11bD4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRkSklUTXVsSUMoYXJpdGhQcm9maWxl
KTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVs
SUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CkBAIC0x
MjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0
CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhh
cml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX21hdGhJQ3MuYWRkSklU
U3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJl
bnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywg
Y3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25W
YWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJf
NjQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3Vs
dChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJs
b2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAgZW1pdFN0b3JlKGRlc3RpbmF0
aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVn
aXN0ZXIoKSwgcmVnVDEsIHJlZ1QwKTsKIH0KIApAQCAtMTU3LDcgKzE1Nyw3IEBAIHN0ZDo6ZW5h
YmxlX2lmX3Q8CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2Fs
bExpbmtJbmZvKikKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50ID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1z
dGF0aWNfY2FzdDxpbnQ+KHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBj
aGVja3BvaW50KSk7CiAKQEAgLTE5Miw3ICsxOTIsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXpl
RnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlv
biA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXpl
T3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGNh
bGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZh
ckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwg
cmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBm
YWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
Qnl0ZXMoKSwgNiAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CkBAIC0yMDIsNyArMjAyLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZAogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFy
Z3VtZW50c0ZyYW1lOwogICAgIGVsc2UKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRp
b25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVn
VDQpLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBP
cGVyYXRpb24sIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVl
UmVncyhyZWdUMiwgcmVnVDQpLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgIG1vdmUo
cmV0dXJuVmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNv
dW50LgpAQCAtMjMyLDEwICsyMzIsMTAgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25z
dCBPcENhbGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdU
MSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxG
cmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
IAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25DYWxsRXZhbCwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1Qy
KTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKIApAQCAtMjQ5LDcg
KzI0OSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2Nr
LT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBDYWxs
TGlua0luZm8qIGluZm8gPSBtX3Byb2ZpbGVkQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86
OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2Fy
Z3Y7CkBAIC0yNTgsOCArMjU4LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNl
KGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2Yo
UmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJl
Z1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRl
Y29kZSk7CkBAIC0yODYsMTEgKzI4NiwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25z
dCBJbnN0cnVjdGlvCiAgICAgKi8KICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwog
ICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVC
bG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CisgICAg
ICAgIGluZm8gPSBtX3Byb2ZpbGVkQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCkpOwogICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsK
ICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyks
IHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KICAgICAKLSAgICBhdXRvIGJ5dGVjb2Rl
SW5kZXggPSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7CisgICAgYXV0
byBieXRlY29kZUluZGV4ID0gbV9wcm9maWxlZEJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0
aW9uKTsKICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2Rl
SW5kZXgpLmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0
YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBl
bWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7IC8vIHJlZ1QxLCByZWdUMCBob2xkcyBjYWxs
ZWUuCkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5z
dHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDEyICszNDEsMTEgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwogICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1BhdGgoKm1fdm0s
ICp0aGlzKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKSB7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGxTbG93Q2FzZShjb25zdCBJbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKQEAgLTM5NSw3ICszOTQsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAgICAgSlNWYWx1ZVJl
Z3MgbmV4dFJlZ3MgPSBKU1ZhbHVlUmVncyh0YWdOZXh0R1BSLCBwYXlsb2FkTmV4dEdQUik7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssCisgICAg
ICAgIG1fcHJvZmlsZWRCbG9jaywKICAgICAgICAgSklUVHlwZTo6QmFzZWxpbmVKSVQsCiAgICAg
ICAgIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgQ2FsbFNpdGVJbmRleChC
eXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLApAQCAtNDEwLDcgKzQwOSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgbmV4dFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZEJsb2NrKSwgbmV4dFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9uZXh0LCBuZXh0UmVncyk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMp
OwpAQCAtNDQwLDEwICs0MzksMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29ucwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIC8vIG1ldGFkYXRhCisgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRCbG9jayksIC8vIG1ldGFkYXRhCiAgICAgICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgLy8gb3BlcmF0aW9uCiAgICAgICAgIG5leHRWUmVnLCAvLyByZXN1bHQKLSAgICAgICAg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCisgICAg
ICAgIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFy
ZzEKICAgICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKICAgICAgICAgSlNWYWx1ZVJlZ3Mo
dGFnSXRlcmF0b3JHUFIsIHBheWxvYWRJdGVyYXRvckdQUiksIC8vIGFyZzMKICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsgLy8gYXJnNApAQCAtNDUyLDcgKzQ1MSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RP
YmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0
b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJ
c05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgp
KSk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00NjAsNyArNDU5LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRl
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgYXV0byogdHJ5
RmFzdEZ1bmN0aW9uID0gKFsmXSAoKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndp
ZHRoKCkpIHsKICAgICAgICAgY2FzZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9m
YXN0X25hcnJvdzsKQEAgLTUwNiw3ICs1MDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRv
cl9uZXh0KGNvbnN0IEluCiAgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHRhZ1ZhbHVlR1BSKTsK
ICAgICAgICAgcHJlc2VydmVkUmVncy5hZGQocGF5bG9hZFZhbHVlR1BSKTsKICAgICAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywKKyAgICAgICAg
ICAgIG1fcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAog
ICAgICAgICAgICAgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICAgICAgQ2Fs
bFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLApAQCAt
NTMzLDEwICs1MzIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJ
bgogICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUNjsKICAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyID0gcmVnVDc7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFu
Y2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh0YWdEb25lR1BSLCBwYXlsb2FkRG9uZUdQUiks
IHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBK
dW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3Mo
dGFnRG9uZUdQUiwgcGF5bG9hZERvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9wcm9maWxlZEJs
b2NrLT5nbG9iYWxPYmplY3QoKSk7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jaywKKyAgICAgICAgICAgIG1fcHJvZmlsZWRCbG9jaywK
ICAgICAgICAgICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAogICAgICAgICAgICAgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICAgICAgQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLApAQCAtNTg4LDEwICs1ODcsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoCi0gICAgICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IC8vIG1ldGFkYXRhCisgICAgICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxv
Y2spLCAvLyBtZXRhZGF0YQogICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCAv
LyBvcGVyYXRpb24KICAgICAgICAgICAgIGRvbmVWUmVnLCAvLyByZXN1bHQKLSAgICAgICAgICAg
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAg
ICAgICAgICAgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Ly8gYXJnMQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKICAgICAgICAgICAg
IEpTVmFsdWVSZWdzKHRhZ0l0ZXJSZXN1bHRHUFIsIHBheWxvYWRJdGVyUmVzdWx0R1BSKSwgLy8g
YXJnMwogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsgLy8gYXJnNApAQCAtNjAyLDcgKzYwMSw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0Lmxp
bmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJl
c3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSkpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJ
c05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgp
KSk7CiAgICAgfQogCiAgICAgeyAgIApAQCAtNjE4LDEwICs2MTcsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoCi0gICAgICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIC8vIG1ldGFk
YXRhCisgICAgICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCAvLyBt
ZXRhZGF0YQogICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCAvLyBvcGVyYXRp
b24KICAgICAgICAgICAgIHZhbHVlVlJlZywgLy8gcmVzdWx0Ci0gICAgICAgICAgICBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKKyAgICAgICAgICAg
IFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEK
ICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLCAvLyBhcmcyCiAgICAgICAgICAgICBKU1ZhbHVl
UmVncyh0YWdJdGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFyZzMKICAg
ICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgog
I2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgi
CiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3Vs
dChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0
aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVh
bFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4IEBAIHN0ZDo6ZW5hYmxl
X2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2Rl
SUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZGUsIENhbGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRl
Y29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBjaGVja3Bv
aW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJbmNsdWRp
bmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9p
bnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0YWNrT2Zm
c2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKKwogICAgIGlm
IChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZz
ZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsK
ICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsK
LSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVja3Bv
aW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9N
ZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExp
bmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFy
cmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBkb25l
LmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8
CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0g
b3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENh
bGxMaW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVj
b2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewog
ICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC05
MSw3ICs5Miw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAg
ICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVu
dHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1l
Rm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3Rl
ciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOworICAg
IGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVlUmVn
aXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RG
cmVlUmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0
dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJVDo6Y29tcGlsZVNldHVw
RnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRp
b25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNldHVwT3Bl
cmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJhdGlvbihz
ZXR1cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVnVDMs
IHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4K
ICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9h
ZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5j
aDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFkZHJl
c3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25zdGFudChj
YWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBD
YWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJl
Z1QzKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1Qy
KTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNl
dE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dlc3QubGlu
ayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywxNiArMTMx
LDE1IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxhdGU8Pgog
Ym9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkKIHsK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAgIHN0
b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxl
ckZyYW1lT2Zmc2V0KCkpKTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25t
ZW50KCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFyZ3VtZW50
R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJl
Z1QxLCByZWdUMik7CisgICAgcmVzZXRTUCgpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUu
dmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsK
IApAQCAtMTQ4LDcgKzE1MSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
b25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9
IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
KTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFkZChDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0lu
Zm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5t
X2FyZ3Y7CkBAIC0xNTYsNDMgKzE1OSw0NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNp
emVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUg
LSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxDYWxs
KCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Myk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwg
aW5mbyk7CisgICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwo
Y29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKK2Jvb2wgSklUOjpjb21waWxlVGFp
bENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8
PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwg
Q2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK2Jvb2wgSklU
Ojpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2Fs
bExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxsRnJhbWVTaHVm
ZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0
ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5m
bzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0gbWFrZVVu
aXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFzc2Vk
QXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFyYW1ldGVycyA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICBzaHVmZmxlRGF0YS0+
bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICBzaHVm
ZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS5hcmdz
LnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShi
eXRlY29kZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5t
X2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgc2h1
ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2Vk
SW5KU1N0YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5j
bHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAgICAgICBEYXRhRm9y
bWF0SlMpOwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAgICAgICBWYWx1ZVJl
Y292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVmZmxlRGF0YS5zZXR1
cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8tPnNldEZyYW1lU2h1
ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJl
Y292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0YS0+c2V0
dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZv
LT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86
OlVzZURhdGFJQzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywg
c2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRDb25zdGFudChjYWxs
TGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxM
aW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwg
WyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0YSkucHJl
cGFyZUZvclRhaWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsK
KworICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8tPmZyYW1lU2h1ZmZs
ZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0g
bGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRv
bmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIxOCwxNCArMjI1LDI1IEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIg
aW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9y
ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0gICAgQ2FsbExpbmtJ
bmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQot
ICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsK
KworICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOworICAgIGlmIChvcGNv
ZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgaW5mbyA9IG1fdW5saW5rZWRDYWxscy5h
ZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlE
KTsKKworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOworCisgICAgICAgIEFTU0VSVChtX2Nh
bGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOworICAg
ICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnVubGlua2VkQ2Fs
bExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFudDsKKyAgICB9Cisg
ICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7CiAKICAgICAvLyBT
UCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJn
dW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBtX2NvZGVC
bG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7Ci0gICAgdWludDMyX3QgbG9jYXRpb25C
aXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7CisgICAgdWludDMyX3Qg
bG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBZGRyZXNzKGNhbGxGcmFtZVJl
Z2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQpKTsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNhbGxlZS4K
QEAgLTIzNCwxNiArMjUyLDEyIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3Ry
dWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJ
bmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9y
KG9wY29kZUlEKSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2Fs
bENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAgICBpZiAoY29tcGlsZVRhaWxDYWxs
KGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCisgICAgaWYgKGNvbXBpbGVUYWls
Q2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgsIGluZm9Db25zdGFudCkpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIGxvYWRDb25zdGFudChpbmZvQ29uc3RhbnQsIHJlZ1QyKTsK
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhz
ID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAgICAgYXV0byBzbG93UGF0aHMgPSBD
YWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVn
VDIsIFsmXSB7CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAg
ICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKICAgICAgICAgfSk7CkBAIC0yNTMs
MTQgKzI2NywxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRG
YXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVz
KTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsK
ICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIHJlc2V0U1AoKTsKIAog
ICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KQEAgLTI3MywyMSArMjg2LDIwIEBA
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7
CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlzLCByZWdU
Mik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxD
YWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CisgICAgcmVzZXRTUCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7
CkBAIC0zOTUsMTcgKzQwNywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNv
bnN0IEluCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFt
ZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNv
bnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQpAQCAt
NDE2LDEwICs0NDIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25z
CiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwg
aXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAg
ICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsKICAgICBu
b3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBAIC00MzIs
MTkgKzQ1NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAg
ICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJh
d0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRlcmF0b3JH
UFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBhdXRvIGRv
bmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVz
dWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9
CkBAIC00NTIsNyArNDc0LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKICAgICAg
ICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5hcnJvdzog
cmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0OTEsNzkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1bXAgZmFz
dENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7
CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0ZUFkZHJl
c3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAgbG9hZDhG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJ
dGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5N
b2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhf
dD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9NZXRhZGF0
YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVy
YXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rl
cygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAg
IC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAg
ICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJl
Z1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3
aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2
YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENs
b2JiZXJSZWdpc3RlcjsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQ
Uik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVy
blZhbHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRS
ZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVz
dWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgp
KSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdU
MywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwo
KSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9H
UFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdl
IG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsK
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIp
OwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAgICAgewot
ICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
ID0gcmVnVDM7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9uZUdQUiwgaXRl
ckNhbGxSZXN1bHRHUFIpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRj
aEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2Ny
YXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BS
UmVnIGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAg
ICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gZmFs
c2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgp
LCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICAg
ICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVS
ZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsKKworICAgICAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGJhc2VHUFIpOwog
CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5
TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWVHUFIpLCByZWdUNCwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAg
IHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25z
ZXJ2YXRpdmVseSByZXNldCBTUAorICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRHUFIpOwog
CiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01MjcsNTkgKzU3
Nyw1NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQo
anVtcCgpKTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisKICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgIHsKICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAgICAgICBH
UFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2JqZWN0LmFw
cGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3Qu
YXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCiAgICAgICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCk7
CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CiAgICAgICAgIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1
bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVy
Q2FsbFJlc3VsdEdQUikpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0g
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpu
b25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAg
ICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLQotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCByZWdUMSk7Ci0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOworICAgICAgICBt
b3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVj
b2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBkb25lR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVj
dC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0
b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwg
YXJndW1lbnRHUFIwKTsKICAgICB9CiAKICAgICB7ICAgCiAgICAgICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5t
X3ZhbHVlOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCiAgICAgICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1w
bCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwog
Ci0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgdmFs
dWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgICAgICBtb3ZlKGl0ZXJDYWxs
UmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgdmFsdWVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5y
YXdCaXRzKCkpOworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiwxMSBA
QAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVy
U2V0LmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwor
CiBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIENvbW1vbkRhdGE7CiBjbGFzcyBKSVRDb2RlOwpAQCAt
MTU5LDEwICsxNjIsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJ
VFR5cGUgaml0VHlwZSkKICAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2Vs
aW5lQ29kZShqaXRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
IU9wdGlvbnM6OnVzZURhdGFJQygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICByZXR1cm4gT3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkBA
IC0yMjMsNiArMjI2LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hhcmVBdHRyaWJ1dGUgPT0gU2hhcmVBdHRyaWJ1dGU6OlNoYXJlZDsgfQogCisg
ICAgdmlydHVhbCBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSB7IHJldHVy
biBudWxscHRyOyB9CisKIHByaXZhdGU6CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAgICAgU2hh
cmVBdHRyaWJ1dGUgbV9zaGFyZUF0dHJpYnV0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNyArMzgsNyBAQCB2b2lkIEpJVENvbXBpbGF0aW9uS2V5OjpkdW1wKFByaW50
U3RyZWFtCiAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIG91dC5wcmludCgiKENvbXBpbGUgb2YgIiwgKm1fcHJvZmlsZWRCbG9jaywgIiB3
aXRoICIsIG1fbW9kZSwgIikiKTsKKyAgICBvdXQucHJpbnQoIihDb21waWxlIG9mICIsIFJhd1Bv
aW50ZXIobV9jb2RlQmxvY2spLCAiIHdpdGggIiwgbV9tb2RlLCAiKSIpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRp
b25LZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBp
bGF0aW9uS2V5LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29tcGlsYXRpb25LZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNTcgKzMwLDU2IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBDb2RlQmxvY2tT
ZXQ7CitjbGFzcyBKU0NlbGw7CiAKIGNsYXNzIEpJVENvbXBpbGF0aW9uS2V5IHsKIHB1YmxpYzoK
ICAgICBKSVRDb21waWxhdGlvbktleSgpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxw
dHIpCisgICAgICAgIDogbV9jb2RlQmxvY2sobnVsbHB0cikKICAgICAgICAgLCBtX21vZGUoSklU
Q29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb24pCiAgICAgewogICAgIH0KICAgICAK
ICAgICBKSVRDb21waWxhdGlvbktleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0g
ICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIpCisgICAgICAgIDogbV9jb2RlQmxvY2so
bnVsbHB0cikKICAgICAgICAgLCBtX21vZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpERkcpCiAgICAg
ewogICAgIH0KICAgICAKLSAgICBKSVRDb21waWxhdGlvbktleShDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9j
ayhwcm9maWxlZEJsb2NrKQorICAgIEpJVENvbXBpbGF0aW9uS2V5KEpTQ2VsbCogcHJvZmlsZWRC
bG9jaywgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUpCisgICAgICAgIDogbV9jb2RlQmxvY2socHJv
ZmlsZWRCbG9jaykKICAgICAgICAgLCBtX21vZGUobW9kZSkKICAgICB7CiAgICAgfQogICAgIAog
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9wcm9m
aWxlZEJsb2NrICYmIG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxh
dGlvbjsKKyAgICAgICAgcmV0dXJuICFtX2NvZGVCbG9jayAmJiBtX21vZGUgPT0gSklUQ29tcGls
YXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3By
b2ZpbGVkQmxvY2sgJiYgbV9tb2RlICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBp
bGF0aW9uOworICAgICAgICByZXR1cm4gIW1fY29kZUJsb2NrICYmIG1fbW9kZSAhPSBKSVRDb21w
aWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKICAgICB9CiAgICAgCi0gICAgQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9wcm9maWxlZEJsb2NrOyB9CiAg
ICAgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAg
ICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSklUQ29tcGlsYXRpb25LZXkmIG90aGVyKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJvZmlsZWRCbG9jayA9PSBvdGhlci5tX3By
b2ZpbGVkQmxvY2sKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrID09IG90aGVyLm1fY29kZUJs
b2NrCiAgICAgICAgICAgICAmJiBtX21vZGUgPT0gb3RoZXIubV9tb2RlOwogICAgIH0KICAgICAK
ICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnBh
aXJJbnRIYXNoKFdURjo6UHRySGFzaDxDb2RlQmxvY2sqPjo6aGFzaChtX3Byb2ZpbGVkQmxvY2sp
LCBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxKSVRDb21waWxhdGlvbk1vZGU+Ojp0
eXBlPihtX21vZGUpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goV1RGOjpQdHJI
YXNoPEpTQ2VsbCo+OjpoYXNoKG1fY29kZUJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5
aW5nX3R5cGU8SklUQ29tcGlsYXRpb25Nb2RlPjo6dHlwZT4obV9tb2RlKSk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIENv
ZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOworICAgIC8vIEVpdGhlciBDb2RlQmxvY2sqIG9yIFVu
bGlua2VkQ29kZUJsb2NrKiBmb3IgYmFzbGVsaW5lIEpJVC4KKyAgICBKU0NlbGwqIG1fY29kZUJs
b2NrOwogICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtX21vZGU7CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00
NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQog
ewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5m
byhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1
YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNv
ZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJ
bmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRS
ZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6
OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0
aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAg
IG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRp
b24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAg
dm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+
c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBz
dHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwo
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7Cisg
ICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGppdC5mYXJK
dW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIG1fZG9uZSA9
IGppdC5sYWJlbCgpOworfQorCiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKAog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAog
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBK
U1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTEwLDcgKzExOCw3IEBA
IEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxT
aXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAg
IENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUp
CiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwg
Y2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5m
b0dQUikKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVC
bG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAgICwgbV9pc0xlbmd0
aEFjY2Vzcyhjb2RlQmxvY2sgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9jay0+dm0o
KS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJh
c2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAgLTEyMCw2ICsxMjgsMzcg
QEAgdm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIGdlbmVyYXRl
RmFzdENvbW1vbihqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNpemVGb3JM
ZW5ndGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwog
fQogCisKKyNpZiBVU0UoSlNWQUxVRTY0KQorc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkSW5s
aW5lQWNjZXNzKEpJVCYgaml0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBiYXNlLCBHUFJS
ZWcgc2NyYXRjaCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVB
Y2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJ
ZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHJvcGVydHkoYmFzZSwgc2Ny
YXRjaCwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5q
dW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmZhckp1
bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hl
ZC5saW5rKCZqaXQpOworfQorCit2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBz
dHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9q
aXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENv
bnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5l
QWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZSwg
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRpZgorCiBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcigK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIHZhbHVlLCBK
U1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BS
KQpAQCAtMTM4LDYgKzE3NywyMCBAQCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6
Z2VuZXJhCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9y
UHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBKSVRHZXRC
eUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQm
IGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0
ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5m
b0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIs
IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRpZgorCiBK
SVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hl
YWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUs
IEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIApAQCAtMTQ5LDYgKzIwMiwzNiBA
QCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yCiAgICAgbV9zdHViSW5m
by0+dXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNoKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQp
Cit2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBt
X3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBz
dHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6
c2NyYXRjaDsKKyAgICBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OnNjcmF0Y2gyOworICAgIEdQUlJlZyB2YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6
dmFsdWU7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9h
ZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIo
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0
Y2gpOworICAgIGppdC5zdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgYmFzZSwg
c2NyYXRjaCwgc2NyYXRjaDIpOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisg
ICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29k
ZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0
KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRpZgorCiB2b2lkIEpJVFB1dEJ5
SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKIHsKICAg
ICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eVJl
cGxhY2UoKSk7CkBAIC0yMDAsNyArMjgzLDcgQEAgdm9pZCBKSVREZWxCeVZhbEdlbmVyYXRvcjo6
Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsK
LSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNv
ZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9z
bG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJl
bCgpOwpAQCAtMjM2LDcgKzMxOSw3IEBAIHZvaWQgSklURGVsQnlJZEdlbmVyYXRvcjo6Z2VuZXJh
dGVGYXN0UGEKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAg
ICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGlu
ZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRy
KCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1Bh
dGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsK
QEAgLTI3MCw3ICszNTMsNyBAQCB2b2lkIEpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBq
aXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJU
YWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwg
SklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVt
cCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0z
MDAsNiArMzgzLDM0IEBAIHZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXQK
ICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0
eUFjY2VzcygpKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCit2b2lkIEpJVEluQnlJZEdlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBz
dHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENv
ZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsK
KworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKworICAgIEdQ
UlJlZyBiYXNlID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHJl
c3VsdCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgR1BSUmVnIHNjcmF0
Y2ggPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGF1dG8g
c2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBz
Y3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5ib3hC
b29sZWFuKHRydWUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOworICAgIGF1dG8gZmluaXNoZWQg
PSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGpp
dC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAg
ZmluaXNoZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRp
ZgorCiBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpKSVRJbnN0YW5jZU9mR2VuZXJhdG9yKAogICAg
IENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBwcm90
b3R5cGUsIEdQUlJlZyBzdHViSW5mb0dQUiwKQEAgLTMzMiw3ICs0NDMsNyBAQCB2b2lkIEpJVElu
c3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgp
OwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8t
Pm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
bV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29k
ZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0g
ZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAg
bV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0zNjgsNyArNDc5LDcgQEAgdm9pZCBKSVRHZXRCeVZh
bEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0
dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1
YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIo
KSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UK
ICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9u
ZSA9IGppdC5sYWJlbCgpOwpAQCAtNDA1LDcgKzUxNiw3IEBAIHZvaWQgSklUUHV0QnlWYWxHZW5l
cmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5m
b0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZv
LT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBK
SVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6
QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBq
aXQubGFiZWwoKTsKQEAgLTQ0MCw3ICs1NTEsNyBAQCB2b2lkIEpJVFByaXZhdGVCcmFuZEFjY2Vz
c0dlbmVyYXRvcjo6Z2VuCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIp
OwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9z
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1
YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
Q29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBt
X3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0Lmxh
YmVsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgor
I2luY2x1ZGUgIkpJVE9wZXJhdGlvblZhbGlkYXRpb24uaCIKICNpbmNsdWRlICJKSVRPcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKQEAg
LTM4LDExICszOSwxMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlm
aWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsK
IGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVudW0gY2xhc3MgSklUVHlw
ZSA6IHVpbnQ4X3Q7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorc3RydWN0IEJhc2VsaW5lRGVsQnlW
YWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86
OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1Qy
OworfTsKKworc3RydWN0IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUklu
Zm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86
OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6
cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJl
Z1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIC8vIFdl
IHJlbHkgb24gdGhpcyB3aGVuIGxpbmtpbmcgYSBDb2RlQmxvY2sgYW5kIGluaXRpYWxpemluZyBy
ZWdpc3RlcnMgZm9yIGEgR2V0QnlWYWwgU3R1YkluZm8uCisgICAgc3RhdGljX2Fzc2VydChiYXNl
ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0
YXRpY19hc3NlcnQocmVzdWx0ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7
CisgICAgc3RhdGljX2Fzc2VydChzdHViSW5mbyA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
OjpzdHViSW5mbyk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQ
UkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BS
SW5mbzo6cmVnVDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBHUFJJ
bmZvOjpyZWdUNTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnMgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6YXJndW1lbnRHUFIyOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3RvID0gR1BSSW5mbzo6YXJndW1lbnRHUFIz
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6YXJndW1l
bnRHUFIxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6
bm9uQXJnR1BSMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUklu
Zm86Om5vbkFyZ0dQUjE7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0
aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAg
c3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpy
ZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVn
VDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgZG9udENsb2JiZXJSZWdpc3RlciA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0
IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
dGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5SWRSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2Ug
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnNjcmF0Y2g7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3RydWN0IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJh
c2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0g
R1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQ
UkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BS
SW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJl
Z1QyOworfTsKKyNlbmRpZgorCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90
ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDEyICsxNzIs
MTggQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZmZXImIGZh
c3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAogICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwotICAgIAor
CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQg
c3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIgfTsKKyAgICB1bnNp
Z25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBt
X3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbV9zbG93UGF0aEJlZ2luOwogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1Bh
dGhDYWxsOwpAQCAtOTgsNyArMjE0LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTVmFsdWVSZWdzIG1f
YmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIG1fc3RhcnQ7CitwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0
aEp1bXA7CiB9OwogCkBAIC0xMTEsNiArMjI3LDcgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVl
UmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NU
eXBlKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
KyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBz
dHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiBwcml2YXRlOgogICAgIGJv
b2wgbV9pc0xlbmd0aEFjY2VzczsKQEAgLTEyNCw2ICsyNDEsNyBAQCBwdWJsaWM6CiAgICAgICAg
IENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgICAgICBK
U1ZhbHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3Ms
IEdQUlJlZyBzdHViSW5mb0dQUik7CiAKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9H
UFIpOwogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogfTsKIApA
QCAtMTMyLDEwICsyNTAsMTEgQEAgcHVibGljOgogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSA9
IGRlZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAotICAgICAgICBDb2RlQmxvY2sq
LCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYg
dXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFzZSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0
Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29k
ZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IENhY2hlYWJsZUlkZW50aWZpZXIsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVS
ZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwg
UHV0S2luZCk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVy
Jik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWdu
ZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICAKICAgICBWX0pJ
VE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsKIApAQCAtMTYzLDExICsyODIs
OSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXIm
KTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3Mg
bV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTkxLDgg
KzMwOCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2Vt
YmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0Owog
ICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApA
QCAtMjE2LDggKzMzMSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChN
YWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1w
OwogfTsKIApAQCAtMjQxLDggKzM1NCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVG
YXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xv
d1BhdGhKdW1wOwogfTsKIApAQCAtMjU1LDYgKzM2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNW
YWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAK
ICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0
YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogfTsKIAogY2xhc3MgSklUSW5zdGFuY2VPZkdlbmVy
YXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CkBAIC0yNzcsOCAr
Mzg5LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0
aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CiAKLXByaXZhdGU6
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMDIsMTEgKzQxMiw5IEBA
IHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXIm
KTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3Mg
bV9yZXN1bHQ7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMzMCw4
ICs0MzgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3Jv
QXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3Rh
cnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDEzICszNSwzOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNy
YykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1Rp
bWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpp
c09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3Jj
LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2Vk
Q29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Cit9CisK
K0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciBzcmMp
Cit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KSB7
CisgICAgICAgIC8vIEFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVy
YW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkp
OwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7
CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAK
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdp
c3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiArMTgxLDM2IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRpZgogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3Qg
Qnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1
bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
ICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3Mo
cmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVH
UFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNz
IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRk
cmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1
cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFs
dWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUo
ZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogfQogCiBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChy
ZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBA
QCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBK
SVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJp
bmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBz
ZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUlu
ZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2st
Pmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAg
bV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCks
IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0g
bV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1
LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkK
IHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBz
byB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2st
Pmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAg
QVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4
KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkg
KyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNv
ZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwyOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0
YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFu
dCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworICAgIGlmICgh
c3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlu
a2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYm
IGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0g
MTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZh
bHVlKQogewogICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwogCi0gICAgLy8gV2Un
cmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4g
anVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
c3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQogICAg
IEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwogICAgIHN0b3JlMzIo
dmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwogICAgIHN0
b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgog
fQorI2VuZGlmCiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQ
cm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmls
ZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsNDEgKzM0OCwzNyBAQCBp
bmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKyNpZiBVU0Uo
SlNWQUxVRTY0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVl
UmVncyB2YWx1ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFk
YXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOwotfQogCi0jaWYgVVNF
KEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1
ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7Cisg
ICAgcHRyZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRl
Y29kZT4obV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNl
dE9mRmlyc3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0
YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEs
IEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CiB9CiAjZW5kaWYKIAotaW5saW5lIHZv
aWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BS
LCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQordGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZmX3Qgb2Zm
c2V0T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNo
R1BSKQogewogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgbG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIGFycmF5UHJv
ZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRv
TWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKICAg
ICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVy
SUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lk
IEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRl
Y29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCiB7Ci0gICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhcnJheVByb2ZpbGVH
UFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpKTsKLSAgICB9
CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRlY29kZTo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9m
TGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3JhdGNoR1BSKTsKIH0KIAogQUxXQVlT
X0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCkBAIC0zODAsNyArNDAxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdElu
aXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkp
IHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBv
b2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcihy
ZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTE3LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3Rv
cmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlz
S25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwog
ICAgICAgICBlbHNlCkBAIC01MDYsNyArNTI3LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVt
cFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAo
IW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChy
ZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0LDExICs1MzUsNiBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAgICAgfQogfQogCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQot
ewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxS
ZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU2MCwxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRo
aXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5l
cmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKICAgICBpZiAoc3JjLmlz
Q29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwotICAgICAg
ICBlbHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50T3duZWRC
eVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAgbW92ZShJ
bW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3QpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC01NjYsMTEgKzU4Miw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwog
fQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFs
UmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZy
b20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNTk1LDcgKzYw
Niw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKIAogQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQg
cmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tu
b3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHZSZWcpKQogICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAtNjM3LDMwICs2NDgsNyBAQCBB
TFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7CiAgICAgaWYgKHRhcmdl
dCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPm91dE9m
TGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1BTFdBWVNfSU5MSU5FIEdldFB1dElu
Zm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSBieXRlY29kZSkKLXsKLSAgICB1
bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQgKyAxOyAvLyBIYXNoTWFwIGRvZXNu
J3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkR2V0UHV0SW5m
b3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdldFB1dEluZm9zLmVu
ZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFsdWUpOwotICAgIEdl
dFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2dl
dFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBnZXRQdXRJbmZvLm9w
ZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0aFByb2ZpbGUgSklUOjpjb3BpZWRB
cml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0gICAgdWludDY0X3Qga2V5ID0gKHN0
YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpICsgMSkgPDwgMzIgfCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0YUlEKTsKLSAgICBhdXRvIGl0ZXJh
dG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3Ig
IT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlcmF0b3It
PnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgbV9jb3BpZWRBcml0aFBy
b2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJuIGFyaXRoUHJvZmlsZTsK
KyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0
cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjgxLDYgKzY2OSw2MCBA
QCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0dXJuIEVD
TUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYg
Ynl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQz
MkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQ
UlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxp
bmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUp
ICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQ4KEFk
ZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZz
ZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSB2YWx1ZSwgY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlOCh2YWx1ZSwgQWRk
cmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNl
dEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmUzMlRvTWV0YWRh
dGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQp
Cit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBv
ZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRh
ZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHNfbWV0YWRhdGFHUFIsIHJlc3VsdCk7Cit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvbnN0YW50SW5k
ZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRHbG9i
YWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9nbG9iYWxPYmpl
Y3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENv
ZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BSUmVnIHJlc3VsdCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOworICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JC
dWZmZXIoKSksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgY29uc3RhbnQu
dG9Db25zdGFudEluZGV4KCkgKiBzaXplb2Yodm9pZCopKSwgcmVzdWx0KTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0
cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRh
ZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZv
ck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25T
aXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CkBAIC0xMTAsNyArMTEw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSQogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOwpAQCAtMTI3LDcgKzEy
Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0
TG9hZFBheWxvYWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogICAgIC8vIFdlIGRvbid0IGp1
bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KICAgICBKdW1w
IGhhc0luc3RhbmNlVmFsdWVOb3RDZWxsID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChoYXNJbnN0YW5j
ZVZhbHVlKTsKLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIEp1bXAgY3Vz
dG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0lu
c3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCiAgICAgLy8gV2Uga25vdyB0aGF0IGNvbnN0cnVj
dG9yIGlzIGFuIG9iamVjdCBmcm9tIHRoZSB3YXkgYnl0ZWNvZGUgaXMgZW1pdHRlZCBmb3IgaW5z
dGFuY2VvZiBleHByZXNzaW9ucy4KICAgICBlbWl0TG9hZFBheWxvYWQoY29uc3RydWN0b3IsIHJl
Z1QwKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNv
bnN0IEluc3RyCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvKTsKICAgICAK
ICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKICAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAogICAgICAgICByZWdUMiwgLy8g
dmFsdWUKQEAgLTE5Niw3ICsxOTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgZW1pdExv
YWRUYWcodmFsdWUsIHJlZ1QwKTsKICAgICBlbWl0TG9hZFRhZyhwcm90bywgcmVnVDMpOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCBk
c3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVS
ZWdzKHJlZ1QwLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMSkpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCBkc3QsIG1f
cHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhyZWdUMCwgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDEpKTsKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC0yMTMsNyArMjEz
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIGVtaXRM
b2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChjb25zdHJ1Y3Rv
ciwgcmVnVDIpOwogICAgIGVtaXRMb2FkKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1Q0LCByZWdUMyk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBKU1Zh
bHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3Rh
bmNlT2ZDdXN0b20sIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKICAgICBl
bWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogICAgIApAQCAtMjQ4LDcgKzI0
OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICAKICAg
ICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVn
VDApOwogCkBAIC0zNzgsNyArMzc4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9u
X25hbWUoY29ucwogICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lID0gYnl0ZWNvZGUubV9uYW1lOwog
ICAgIGVtaXRMb2FkUGF5bG9hZChmdW5jLCByZWdUMSk7CiAgICAgZW1pdExvYWQobmFtZSwgcmVn
VDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIG1fcHJv
ZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC00MDgsNyArNDA4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZh
bHNlKGNvbnN0IEluc3RydWN0aQogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAgIEdQ
UlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIHZhbHVl
LCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsK
KyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC00MjIsNyArNDIyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIEpTVmFsdWVSZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7CiAgICAgR1BSUmVnIHNjcmF0
Y2gxID0gcmVnVDI7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7Ci0gICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgp
LCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM3LDcgKzQzNyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWws
IEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCks
IHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1
bXAoKTsKIApAQCAtNDYzLDcgKzQ2Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChj
b25zdCBJbnN0cnUKIAogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRk
SnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7CiAKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVu
ZGVmaW5lZF9vcl9udWxsKGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0
YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKICAgICBBU1NFUlQoc3BlY2lh
bFBvaW50ZXIuaXNDZWxsKCkpOwpAQCAtNTUyLDEzICs1NTIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJ
Zk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
bmdFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKICAg
ICBzdG9yZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAg
ICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAg
Z2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9y
ZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CkBAIC01OTEsMTQgKzU5MSwxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyhW
ZWN0b3I8U2xvCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1Qy
KSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVk
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBpbGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDog
WmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFyZ2V0KTsKICAgICBkb25lLmFwcGVuZChqdW1w
KCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRT
bG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVk
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
dHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVl
R1BSKSwganVtcFRhcmdldCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CkBAIC02NDMsMTMgKzY0
MywxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAgZ2Vu
ZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QyKSk7CiAKICAgICAvLyBTdHJp
bmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVj
dCgpLCByZWdUMCwgcmVnVDIpOwogICAgIHN0b3JlUmVzdWx0LmFwcGVuZChqdW1wKCkpOwogCiAg
ICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShp
dGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpKTsKIAogICAgIHN0b3JlUmVzdWx0LmxpbmsodGhpcyk7CiAgICAgeG9yMzIoVHJ1
c3RlZEltbTMyKDB4MSksIHJldHVyblZhbHVlR1BSKTsKQEAgLTc2Miw3ICs3NjIsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKQEAgLTc3Miw3ICs3NzIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShj
b25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
c3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX3Byb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03OTEsNyArNzkxLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAg
ICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKICAgICBKdW1wIHdhc05v
dEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTgyMyw3ICs4MjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21w
YXJlMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwogICAgIEp1bXAgd2FzTm90SW1t
ZWRpYXRlID0ganVtcCgpOwpAQCAtODQ2LDcgKzg0Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Ro
cm93KGNvbnN0IEluc3RydWN0aW8KICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIp
OwogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCku
dG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdExvYWQoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDEsIHJl
Z1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
KyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgbV9wcm9m
aWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAg
ICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKIH0KIApAQCAtODYyLDcgKzg2Miw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnKSkpOwogICAgIGlzSW50MzIubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGlmIChz
cmMgIT0gZHN0KQogICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQpAQCAt
ODg0LDcgKzg4NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihhcmd1bWVudFZhbHVlUmVncywgcmVn
VDIpKTsKICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZEJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAgaWYgKHNyYyAh
PSBkc3QpCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CkBAIC05MTUs
NyArOTE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydQogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
QmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkK
ICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTkzMSw3ICs5MzEs
MTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNz
KHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKworICAgIC8vIFdoZW4gdGhlIExMSW50IHRocm93cyBhbiBleGNlcHRpb24s
IHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFkeSB0aWVyZWQgdXAKKyAgICAvLyB0
aGUgc2FtZSBDb2RlQmxvY2sgdG8gYmFzZWxpbmUsIGFuZCB3ZSdsbCBjYXRjaCB0aGUgZXhjZXB0
aW9uIGluIHRoZSBiYXNlbGluZSBKSVQgKGJlY2F1c2UKKyAgICAvLyB3ZSB1cGRhdGVkIHRoZSBl
eGNlcHRpb24gaGFuZGxlcnMgdG8gcG9pbnQgaGVyZSkuIEJlY2F1c2UgdGhlIExMSW50IHVzZXMg
YSBkaWZmZXJlbnQgdmFsdWUKKyAgICAvLyBpbnNpZGUgc19jb25zdGFudHNHUFIsIHRoZSBjYWxs
ZWUgc2F2ZXMgd2UgcmVzdG9yZSBhYm92ZSBtYXkgbm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgcmVn
aXN0ZXIuCisgICAgLy8gU28gd2UgcmVwbGVuaXNoIGl0IGhlcmUuCisgICAgeworICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkp
LCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVRE
YXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworICAgIH0K
IAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5k
Q2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVF
eGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTU0
LDcgKzk2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAg
ICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwg
ZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5
OAogCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2sp
OwogICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0
YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygp
KQogICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JF
bnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtOTk2LDgg
KzEwMDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RyCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAg
Ly8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMg
c3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBU
YWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
c3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0
Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0
Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVu
bGlua2VkVGFibGUpOwogCkBAIC0xMDIzLDEzICsxMDM0LDEzIEBAIHZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0g
Ynl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dp
dGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0
IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9wcm9m
aWxlZEJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1w
bGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVj
b2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAg
bGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKICAgICBlbWl0TG9h
ZChzY3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
d2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9t
aW4pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5
VHlwZSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CiAgICAgZmFySnVtcChy
ZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogfQogCkBAIC0xMDQxLDEzICsxMDUyLDEzIEBAIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVt
cCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVt
ZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlJiB1bmxpbmtlZFRhYmxlID0gbV9wcm9maWxlZEJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJ
VGFibGUodW5saW5rZWRUYWJsZSk7CiAKICAgICBlbWl0TG9hZChzY3J1dGluZWUsIHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93
bktleVR5cGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgdGFibGVJbmRleCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hT
dHJpbmdXaXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgpOwogICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIApAQCAtMTA2OCw3ICsxMDc5LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIEV2ZW4gdGhvdWdoIEpJ
VCBjb2RlIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAg
Ly8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3Nhcmls
eSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHBy
ZXNzdXJlLgotICAgIGZvciAoaW50IGkgPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaSA8IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7
ICsraSkKKyAgICBmb3IgKGludCBpID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkgPCBtX3Byb2ZpbGVkQmxvY2stPm51bVZhcnMo
KTsgKytpKQogICAgICAgICBlbWl0U3RvcmUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnRlcik7CkBAIC0xMDg3LDcgKzEwOTgsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1p
dF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhp
cz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwogICAg
IFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9j
YWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKQEAgLTExMjIs
NyArMTEzMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKIHZv
aWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRv
VGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRC
bG9jayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1f
Y2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlciA9IGJ5
dGVjb2RlLm1fc3JjRHN0OwogCkBAIC0xMTQ1LDcgKzExNTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jaGVja190ZHooY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBUeXBlTG9j
YXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVh
bFJlZ2lzdGVyOwogCkBAIC0xMjM5LDcgKzEyNTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2df
c2hhZG93X2NoaWNrZW5fdGFpCiAgICAgZW1pdExvYWRUYWcoYnl0ZWNvZGUubV90aGlzVmFsdWUs
IHJlZ1QxKTsKICAgICBKU1ZhbHVlUmVncyB0aGlzUmVncyhyZWdUMSwgcmVnVDIpOwogICAgIGVt
aXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgcmVnVDMsIG1fY29kZUJs
b2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvZ1NoYWRvd0NoaWNr
ZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHJlZ1QzLCBtX3Byb2ZpbGVk
QmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMSArNTQsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX3NyYzsKIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1
ZS5pc051bWJlcigpKQotICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAg
aWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxv
Y2soc3JjKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6
OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDApOworICAgICAgICAgICAg
c3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICs5MCwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAg
IHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFs
bG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFs
bG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAg
ICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9y
UmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgUmVn
aXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKIAotICAgIGlmICghYWxsb2NhdG9yKQotICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVsc2UgewotICAgICAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRy
KTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6
OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRJbml0
aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
OwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6
TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpLCBhbGxvY2F0b3JSZWcpOworICAgIGxv
YWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0
T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9m
ZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJlZyk7CisKKyAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgIGVt
aXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBh
bGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2Fz
ZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNh
cGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0
b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKKyAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisg
ICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKKwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFk
YXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJl
KTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3Qs
ICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiB9CiAKQEAgLTEzMSw3ICsxMzIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlk
ZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZh
bHVlLCByZWdUMCk7CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1i
b2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVl
ID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3Rh
bmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3lt
Ym9sRnVuY3Rpb24pKSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9y
LCByZWdUMCk7CiAKQEAgLTE1NCwzMCArMTU2LDM4IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBl
OwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUg
cmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJh
c2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0
aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9HUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9HUFIpOwogICAgIAogICAgIC8vIENoZWNrIHRo
YXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVj
a2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJv
dG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICBy
ZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1Q1LAot
ICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHJlc3VsdEdQUiwKKyAgICAgICAgdmFs
dWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAgICAgICBzdHViSW5mb0dQUiwKKyAgICAgICAg
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMSwgQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCisKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCArMjAyLDEzIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRy
ZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGlt
aXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGlj
X2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlID09IGFyZ3VtZW50R1BS
Mik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3Rv
ID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNl
T2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMjQwLDcgKzI0OSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KIAogICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJl
Z1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwog
CkBAIC0zODMsOSArMzkyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0
aW9uKgogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZt
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5k
bGVyR2VuZXJhdG9yKFZNJikKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgaml0LmVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAgLTQxMSw3ICs0MjAsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAKICAgICBpZiAoZHN0ICE9IHNyYykKICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNDM0LDkgKzQ0MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXko
Y29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZnVuY3Rpb24sIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX25hbWUsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1l
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC00NjUsOCArNDc0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVj
dGkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0
ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAg
YWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQ
UiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1
Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAg
IGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTQ4MCw3
ICs0OTEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpA
QCAtNTE5LDcgKzUzMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3Ry
dWMKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0
cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSks
IHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3Jl
aWduID0ganVtcCgpOwogCkBAIC01NDMsNyArNTU0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5l
cV9udWxsKGNvbnN0IEluc3RydQogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0g
Y2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBh
ZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFy
Z2V0KTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwog
CkBAIC01ODIsMTUgKzU5MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9u
dWxsKGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5
dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0Nl
bGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNo
UHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkp
OwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7Cisg
ICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1Qx
KTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1Qw
LCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVjb2Rl
LCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAgICBhZGRKdW1w
KGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwogfQpAQCAtNjI1LDggKzYz
NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBy
ZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJh
bmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1Zh
bHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQp
OwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc1Ry
dXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDAsNyArNjUxLDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJl
Z1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTY5NSw3ICs3
MDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMSwgcmVn
VDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxzZQogICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CkBAIC03MTEsNyAr
NzIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhy
b3duVmFsdWVHUFIgPSBhcmd1bWVudEdQUjE7CkBAIC03MjAsNyArNzMyLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogCiAjaWYgTlVNQkVSX09GX0NBTExFRV9T
QVZFU19SRUdJU1RFUlMgPiAwCiAgICAgaml0LmxvYWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIGFy
Z3VtZW50R1BSMCk7Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVySW1wbChhcmd1bWVudEdQUjApOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihhcmd1bWVudEdQUjApOwogI2VuZGlmCiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKQEAgLTkwOCw3
ICs5MjAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKIH0KIApAQCAtOTE4LDcgKzkzMSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9q
bnN0cmljdGVxKGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVn
VDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTMxLDcgKzk0NSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKICAgICAKICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0
VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk1
MSw3ICs5NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RyCiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKICAgICBpc0JpZ0ludC5s
aW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk3OCw3ICs5OTIsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVn
VDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05OTMsNyArMTAwNywxOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMs
IFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxs
RnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisg
ICAgLy8gV2hlbiB0aGUgTExJbnQgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlcmUgaXMgYSBjaGFu
Y2UgdGhhdCB3ZSd2ZSBhbHJlYWR5IHRpZXJlZCB1cAorICAgIC8vIHRoZSBzYW1lIENvZGVCbG9j
ayB0byBiYXNlbGluZSwgYW5kIHdlJ2xsIGNhdGNoIHRoZSBleGNlcHRpb24gaW4gdGhlIGJhc2Vs
aW5lIEpJVCAoYmVjYXVzZQorICAgIC8vIHdlIHVwZGF0ZWQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVy
cyB0byBwb2ludCBoZXJlKS4gQmVjYXVzZSB0aGUgTExJbnQgdXNlcyBhIGRpZmZlcmVudCB2YWx1
ZQorICAgIC8vIGluc2lkZSBzX2NvbnN0YW50c0dQUiwgdGhlIGNhbGxlZSBzYXZlcyB3ZSByZXN0
b3JlIGFib3ZlIG1heSBub3QgY29udGFpbiB0aGUgY29ycmVjdCByZWdpc3Rlci4KKyAgICAvLyBT
byB3ZSByZXBsZW5pc2ggaXQgaGVyZS4KKyAgICB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJlZ1QwKTsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklU
Q29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7CisgICAgfQogCiAgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklm
Q2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMDExLDIzICsxMDM2LDExIEBA
IHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVu
dCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQ
cm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZl
cjsKLSAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwg
JnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRW
YWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZh
bHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBz
a2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhj
ZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAg
aWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5m
b3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSwg
cmVncyk7Ci0gICAgICAgIH0pOwotICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0K
IApAQCAtMTA1Myw4ICsxMDY2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25z
dCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0
aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25z
LCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dp
dGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRl
ZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUu
ZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwODEsMTMgKzEwOTQsMTQgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdp
c3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBq
dW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0
ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hK
dW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29y
ZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29y
ZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRU
YWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJ
bmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5
VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFi
bGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsK
IH0KIApAQCAtMTA5OSwyMCArMTExMywyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3Ry
aW5nKGNvbnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1f
c2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5h
dGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRh
YmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpT
dHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIHRhYmxlSW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dp
dGNoUHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERlYnVnPigpOwotICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdn
ZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAs
IENvZGVCbG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkpLCByZWdUMCk7CiAgICAgSnVt
cCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVj
b2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMp
OwpAQCAtMTEzMyw3ICsxMTQ5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJ
bnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihFcXVh
bCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CkBAIC0xMTQ4LDcgKzExNjQsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0
IEluc3RydWN0CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTE2Niw3ICsxMTgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1
YwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CkBAIC0xMTg4LDEyICsxMjAzLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IElu
c3RydWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5p
dGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50
ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlm
ZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgc2l6ZV90IGNvdW50ID0gbV9j
b2RlQmxvY2stPm51bVZhcnMoKTsKKyAgICBzaXplX3QgY291bnQgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5udW1WYXJzKCk7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGZvciAo
c2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCiAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIo
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihtX2Nv
ZGVCbG9jayk7CisgICAgCisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwKTsKIAogICAgIGVt
aXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAjZWxzZQpAQCAtMTIxMiw3ICsxMjI5LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4
NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTEzMTAsMjMgKzEzMjcsMTkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZUlEKiBjYWNo
ZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1
Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BUb1Ro
aXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1QyKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRl
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwotICAgIFdyaXRlQmFycmll
ckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7
CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVE
YXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKQEAgLTEz
NDIsNyArMTM1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNl
dE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0
aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFn
KSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0
aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVu
Y3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKIAotICAgIGxvYWRQdHIoY2FjaGVk
RnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcENyZWF0ZVRoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZENhbGxlZSgpLCBj
YWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJh
bmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNl
ZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihO
b3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0
aXBsZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM4NSw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdU
MiwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVl
UmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIsNyArMTM5Niw4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSks
IHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJl
dHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyArMTQwOSw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAs
IHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzE0MjAsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Qy
LCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0MzUsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdp
c3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwogfQpAQCAtMTQzMCw3ICsxNDQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpy
ZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5s
b29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygp
ICYmIG1fdW5saW5rZWRDb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vh
cmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0oKS5nZXRMb29wSGlu
dEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkUHRyKHB0ciwgcmVn
VDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaFB0cihCZWxvdywgcmVn
VDAsIFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xp
bWl0KCkpKTsKQEAgLTE0NDAsNyArMTQ1OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGlu
dChjb25zdCBJbnN0cnUKICNlbHNlCiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYK
LSAgICAgICAgbW92ZVZhbHVlKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVzdWx0UmVn
cyk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVzdWx0UmVncy5ncHIoKSk7CiAgICAgICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTE0NTMsOCArMTQ3
MSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKIAogICAgIC8v
IEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAogICAgIGlmIChjYW5CZU9wdGltaXpl
ZCgpKSB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZlT3Ja
ZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxv
b3AoKSksCi0gICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NP
ZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAgICAgICBBZGRyZXNzKHJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9CiB9CiAKQEAgLTE1
MDksNyArMTUyOCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFy
Z3VtZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTIyLDcgKzE1NDIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfY2hlY2tfdHJhcHNf
aGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJz
OjplYnApOwpAQCAtMTU2NCwzNCArMTU4NCwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVn
ZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRHUFIwOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVC
bG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRO
ZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2Rl
Lm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
YXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMg
PSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAg
ICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50
LCBhcmd1bWVudEdQUjIpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7
CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3
X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3
X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9u
ZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApA
QCAtMTYyMSwyMyArMTY0MywyNCBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNv
bnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVu
dEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEp
OwogI2VuZGlmCiAKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxv
Y2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25z
dGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9u
RXhwciwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2Rl
Lm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRH
UFIyKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChv
cGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJh
dG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Fz
eW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3Bf
bmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0
aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQog
fQogCkBAIC0xNjY0LDI5ICsxNjg3LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19n
ZW5lcmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1f
YXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdp
dGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNp
emUpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMik7CisgICAgbWF0
ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0
YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBzaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dp
dGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRh
Lm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMik7CiAjZWxzZQorICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9j
YXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKICAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJv
ZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0g
ICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJl
Z1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQogCkBAIC0xNjk0LDgg
KzE3MTgsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKKyAgICBtX2lzU2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAg
VHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlv
bjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3Rhcmdl
dFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTc3NywyMCArMTgwMywyNSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIw
ICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMg
aWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tl
dFJlZyA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRo
aXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJS
ZWcgPSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1Bh
Y2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVu
dCByZWdpc3Rlci4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAg
IGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNo
MVJlZywgc2NyYXRjaDJSZWcpOworICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
c2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVn
VDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0Uo
SlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIG1faXNTaGFyZWFibGUg
PSBmYWxzZTsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Js
b2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsK
QEAgLTE4NjAsNyArMTg5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25z
dCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxOTE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODMw
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAj
aW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNv
bW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRl
ICJERkdPU1JFbnRyeS5oIgpAQCAtMjg1NSw3ICsyODU2LDcgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRh
YmxlLm1fY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwogCkBAIC0yODgwLDcgKzI4ODEs
NyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1
ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJh
c2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2st
PnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAg
dm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJbnQzMigpKQpAQCAtMjkwMyw3ICsyOTA0LDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdm9pZCogcmVzdWx0Owot
ICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJ
bXBsKiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZhbHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpA
QCAtMjkxOSw3ICsyOTIwLDYgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3
aXRjaAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCi0j
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0yOTcxLDcgKzI5NzEsNiBAQCBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc29sdmVkU2NvcGUpOwogfQotI2VuZGlmCiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkKIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjkwLDkgKzI5MCw3IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0
UHIKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtu
b3duS2V5VHlwZSwgY2hhciosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGtleSwg
c2l6ZV90IHRhYmxlSW5kZXgsIGludDMyX3QgbWluKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgY2hhciosIChWTSosIEVu
Y29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgsIGludDMyX3QgbWluKSk7CiBKU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5
VHlwZSwgY2hhciosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90
IHRhYmxlSW5kZXgpKTsKLSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIEpTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUsIEVuY29kZWRK
U1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykp
OwotI2VuZGlmCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldEZyb21TY29w
ZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBi
eXRlY29kZVBDKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFRvU2Nv
cGUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBD
KSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODcsNyArODcsMTIgQEAgYXV0byBKSVRQbGFuOjp0aWVyKCkgY29uc3QgLT4g
VGllcgogCiBKSVRDb21waWxhdGlvbktleSBKSVRQbGFuOjprZXkoKQogewotICAgIHJldHVybiBK
SVRDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLCBtX21v
ZGUpOworICAgIEpTQ2VsbCogY29kZUJsb2NrOworICAgIGlmIChtX21vZGUgPT0gSklUQ29tcGls
YXRpb25Nb2RlOjpCYXNlbGluZSkKKyAgICAgICAgY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPnVu
bGlua2VkQ29kZUJsb2NrKCk7CisgICAgZWxzZQorICAgICAgICBjb2RlQmxvY2sgPSBtX2NvZGVC
bG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIHJldHVybiBKSVRDb21waWxhdGlvbktl
eShjb2RlQmxvY2ssIG1fbW9kZSk7CiB9CiAKIGJvb2wgSklUUGxhbjo6aXNLbm93blRvQmVMaXZl
QWZ0ZXJHQygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25z
dAogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxv
YWQoZ2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVj
dCgpLCByZWdUMSwgbV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCks
IG9wdGlvbnMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzIsNyArNzIsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0CiAKICAgICBlbWl0TG9h
ZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1Qz
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFNldHRlckJ5SWQsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX3By
b2ZpbGVkQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODcsNyArODcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAgZW1pdExvYWRQYXlsb2FkKGJh
c2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCByZWdUMyk7CiAgICAgZW1p
dExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDQpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyU2V0dGVyLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGVzLCByZWdUMywg
cmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBtX3By
b2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZEJsb2NrLT5pZGVu
dGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZXMsIHJlZ1QzLCByZWdUNCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMik7
CiAgICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWRQYXls
b2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlWYWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5VmFsLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdU
MiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwog
ICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9h
ZChzZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
VmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRTZXR0ZXJCeVZhbCwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xMjMsNyArMTIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNv
bnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpTVmFsdWVSZWdzIGJh
c2VSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKQEAgLTEzMSw4ICsxMzEsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdExvYWQoYmFz
ZSwgYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpKTsKICAgICBKSVRE
ZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCksCiAgICAgICAgIGJhc2VS
ZWdzLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBA
IC0xNjYsNyArMTY2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0
cgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlSZWdz
LnRhZ0dQUigpKTsKIAogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAog
ICAgICAgICBiYXNlUmVncywgcHJvcGVydHlSZWdzLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVn
LCByZWdUNCk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC0yMDIsNyAr
MjAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiAgICAg
ZW1pdExvYWQyKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCks
IHByb3BlcnR5LCBwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5wYXlsb2FkR1BS
KCkpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZh
bE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5
bG9hZEdQUigpKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJl
Z3MucGF5bG9hZEdQUigpKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxP
cHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5w
YXlsb2FkR1BSKCkpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5
UmVncy5wYXlsb2FkR1BSKCkpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1
ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
IAogICAgIGJveEJvb2xlYW4ocmVnVDAsIHJlc3VsdFJlZ3MpOwpAQCAtMjE2LDcgKzIxNiw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV9pZChjb25zdCBJbgogCiAgICAgZW1pdExvYWQoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCksIGJh
c2VSZWdzLnBheWxvYWRHUFIoKSk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkp
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRp
bWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VSZWdzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKICAgICBib3hCb29sZWFu
KHJlZ1QwLCByZXN1bHRSZWdzKTsKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7CkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cgogICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDEpOwogICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2Zp
bGUsIHJlZ1Q0KTsKICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZEJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3By
b2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKICAgICAgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUNCk7CkBAIC0yNTcsNyArMjU3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAg
ICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgbV9wcm9maWxlZEJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgICAgICBKU1ZhbHVl
UmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCByZXN1
bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIg
PSB0cnVlOwpAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHIKICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAg
ICAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRC
bG9jayksIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDAp
OwogICAgIH0KIH0KQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbChjb25zdCBJCiAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewogICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwog
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAg
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAog
ICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZh
bEluZGV4XTsKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxv
Y2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9m
aWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKICAgICB9CiB9
CkBAIC0zMDUsMTMgKzMwNSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1l
KGNvbnN0CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1l
LAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHJlc3VsdFJlZ3MsIEludmFs
aWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwg
cmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC0z
MzAsNyArMzMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwog
CiAgICAgYXV0byBiYXNlR1BSID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBhdXRv
IHByb3BlcnR5R1BSID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3Bl
cnR5R1BSKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTM0OCw3ICszNDgsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIEludmFsaWRHUFJS
ZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9s
ID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC0zNzcsNyArMzc3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogICAgIEpTVmFs
dWVSZWdzIHZhbHVlUmVncyhyZWdUNSwgcmVnVDQpOwogCiAgICAgYXV0byBvcGVyYXRpb24gPSBw
dXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9w
dGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlUmVncywgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3Ms
IGdlbi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBnZW4u
c3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtMzk1LDcgKzM5NSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkpOwogCiAgICAgSklUUHJpdmF0
ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgYmFzZVJlZ3Ms
IGJyYW5kUmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC00MTgsNyArNDE4
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogICAgIEpJVFBy
aXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1tt
X3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4XTsKICAgICArK21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5k
ZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJl
Z3MsIGJyYW5kUmVncyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
ZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOwogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTQz
NSw3ICs0MzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpKTsK
IAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0
ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpD
aGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAogICAgICAgICBiYXNlUmVncywgYnJhbmRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKQEAgLTQ1Miw3ICs0NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJp
dmF0ZV9icmFuCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3By
aXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXhdOwogICAgICsrbV9w
cml2YXRlQnJhbmRBY2Nlc3NJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJy
YW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZElt
bVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VSZWdzLCBicmFuZFJlZ3MpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTQ2NSw3ICs0NjUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNDc4LDcgKzQ3OCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1Q2LCByZWdUNyk7CiAKICAgICBKSVRQ
dXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCByZWdU
NiwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC01MDQsNyArNTA0LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgICAgICBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICAgICAgZWNtYU1vZGUgPSBKSVQ6OmVjbWFNb2RlKGJ5dGVjb2RlKTsKLSAgICAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICAg
ICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCkBAIC01MjQs
NyArNTI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAg
IGVtaXRMb2FkMihiYXNlLCByZWdUMiwgcmVnVDEsIHByb3BlcnR5LCByZWdUMywgcmVnVDApOwog
ICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUNSwgcmVnVDQpOwogCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0
cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIs
IHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJl
Z1Q0KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1t
UHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMiwg
cmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVn
VDQpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC01NDIsMTMgKzU0MiwxMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3Vs
dFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBt
X3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRl
bnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlk
R1BSUmVnLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3VsdFJl
Z3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpKTsKIH0KIApAQCAtNTU4LDEzICs1NTgsMTMgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJ
ZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5z
dHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRy
eUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2Zp
bGVkQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNTc1LDcgKzU3NSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC01ODMsMTMgKzU4MywxMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCks
IHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwor
ICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdz
LCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwg
cmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVz
dWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC01OTksMTMgKzU5OSwxMyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVj
dE9wdGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5z
dHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVj
dE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBn
ZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTYxNCwxMCArNjE0LDEwIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAgICAgCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNjMwLDEzICs2MzAsMTMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDAp
LCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAg
ICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52
YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3VsdFJlZ3Mp
OwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKTsKIH0KIApAQCAtNjQ2LDEzICs2NDYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNb
bV9nZXRCeUlkSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAgICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZEJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVn
LCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CiB9CkBAIC02NjMsNyArNjYzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyhjbwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRMb2FkKGJhc2UsIHJl
Z1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQodGhpc1ZSZWcsIHJlZ1Q0LCByZWdUMyk7CkBAIC02
NzMsMTMgKzY3MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNv
CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVn
cywgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJl
Z1QzKSwgSW52YWxpZEdQUlJlZyk7CisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVS
ZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIEludmFs
aWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQo
Z2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9y
ZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0K
IApAQCAtNjg5LDEzICs2ODksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93
aXRoX3RoaQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
V2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDQsIHJlZ1QzKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRW
UmVnLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJv
ZmlsZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03MTAsMTUgKzcxMCwxNSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNE
aXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogICAgIAogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHZhbHVlLCByZWdUMywg
cmVnVDIpOwogICAgIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIG1fcHJv
ZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCks
CiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMiksIEludmFsaWRHUFJSZWcsCiAgICAgICAgIHJlZ1QxLCBieXRlY29kZS5tX2Zs
YWdzLmVjbWFNb2RlKCksIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERp
cmVjdCk7CiAgICAgCkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogCkBAIC03NDgsNyArNzQ4LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAgICAgCiAgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigKLSAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24o
KSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgICAgIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIG1f
cHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTc1OCwxNCArNzU4LDE0IEBAIHZvaWQgSklU
OjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBh
eWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJl
Zyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwpAQCAtNzc5LDEz
ICs3NzksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVk
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZEJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKIAogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03OTYsNyArNzk2LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZEJsb2NrKTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwg
cmVnVDMsIHJlZ1QyKTsKQEAgLTgwNCw3ICs4MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9i
eV92YWwoY29uc3QgSW5zdHJ1CiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCBwcm9maWxlLCByZWdUNCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAg
ICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKQEAgLTgxOSwxNCArODE5LDE0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92
YWwoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5CeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwog
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAog
ICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiB9CkBAIC04MzcsNyArODM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQ
cml2YXRlKFZpcnR1YWxSZWdpc3RlcgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlLCByZWdUMSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZhbGlk
R1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTg1Myw3ICs4NTMsNyBAQCB2b2lkIEpJVDo6ZW1p
dEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUg
OiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVy
YXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKIH0KQEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lkIEpJVDo6ZW1pdFZhckluamVj
dGlvbkNoZWNrKGJvb2wgbmVlCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykK
ICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRl
QWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9p
bnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwor
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX3Byb2ZpbGVk
QmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NP
ZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQpAQCAt
OTA2LDcgKzkwNiw3IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kK
IHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAg
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwpAQCAt
OTE2LDExICs5MTYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bgogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOworICAgICAgICAg
ICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2Rl
QmxvY2socmVzb2x2ZVR5cGUsIG1fcHJvZmlsZWRCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vw
b2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIEFic29sdXRlQWRkcmVzcyhtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRy
ZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKICAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwogICAgICAgICAgICAg
ZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczogCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoK
ICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpT
U2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2Nr
KHJlc29sdmVUeXBlLCBtX3Byb2ZpbGVkQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7CkBAIC0xMDM5LDcgKzEwMzksNyBA
QCB2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwpAQCAt
MTE0Niw3ICsxMTQ2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIApA
QCAtMTE1Niw3ICsxMTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KGNvbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tU2NvcGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwg
ZHN0LCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24p
OwogfQogCiB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQpAQCAtMTE5MCw3ICsx
MTkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZEJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3Bl
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgR2V0
UHV0SW5mbyBnZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7CkBAIC0xMjAy
LDcgKzEyMDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAg
ICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVj
dHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24uCiAgICAg
ICAgICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgICAgIApAQCAt
MTIxNyw3ICsxMjE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
cwogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAg
IGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29w
ZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29k
ZUJsb2NrKTsKKyAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpj
b25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2ZpbGVkQmxvY2spOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKQEAgLTEzMTgsNyArMTMxOCw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRo
Q2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9k
ZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9T
Y29wZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIG1fcHJvZmlsZWRCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTMzMyw3ICsxMzMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21f
YXJndW1lbnRzKGNvbgogICAgIGVtaXRMb2FkUGF5bG9hZChhcmd1bWVudHMsIHJlZ1QwKTsKICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkg
KyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgVGFnT2Zmc2V0KSwgcmVz
dXRsUmVncy50YWdHUFIoKSk7CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSArIFBheWxvYWRPZmZzZXQpLCByZXN1dGxSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3V0
bFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZEJsb2NrKSwgcmVzdXRsUmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVzdXRsUmVn
cy50YWdHUFIoKSwgcmVzdXRsUmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC0xMzU1LDcgKzEz
NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjgzMDUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwxMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGlmICht
ZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01h
eE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5
VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RDZWxs
LmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BSLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cmVzdWx0KTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3VsdFJlZ3Ms
IHJlZ1QyKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKwogICAgICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
ICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVy
ZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorCisgICAgICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0
UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9Ci0KIH0K
IAorI2lmICFPUyhXSU5ET1dTKQorc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmlhYmxlQXJndW1l
bnRHUFI0ID0gR1BSSW5mbzo6YXJndW1lbnRHUFI0Oworc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
dmlhYmxlQXJndW1lbnRHUFI1ID0gR1BSSW5mbzo6YXJndW1lbnRHUFI1OworI2Vsc2UKK3N0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHZpYWJsZUFyZ3VtZW50R1BSNCA9IEdQUkluZm86Om5vbkFyZ0dQ
UjA7CitzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2aWFibGVBcmd1bWVudEdQUjUgPSBHUFJJbmZv
Ojpub25BcmdHUFIxOworI2VuZGlmCisKIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+CiB2
b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVj
b2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGlmICho
YXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAK
LSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1tt
X2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHksIHZpYWJsZUFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJv
ZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1l
bnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3Qs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywg
dmlhYmxlQXJndW1lbnRHUFI0KTsKICNlbHNlCi0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
Ci0gICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwotICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9i
eXRlY29kZUluZGV4KTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRl
Y29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAgICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7
CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQ
Uik7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FS
TTY0KCkpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BS
MSk7Ci0KLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1Yklu
Zm9HUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIp
OwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5
X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpOwotICAgICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSByZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIx
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UgPT0g
cmVnVDApOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHkgPT0gcmVnVDEpOworCisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVBy
b2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKLSAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDksNyArMTY5LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTYwLDggKzE4MCw4IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBjb25zdGV4cHIg
R1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSNTsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
ZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKQEAgLTE4NywzNCArMjA3LDQwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9w
cml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworCisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOwor
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6Okdl
dFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJl
c3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIEFTU0VSVChoYXNBbnlTbG93Q2Fz
ZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKQEAgLTIyMyw5ICsyNDksMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFz
ZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNs
dHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50
R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI2Mywy
MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVh
ZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9w
cml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yNjQsNyArMjg2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAwLDIxICszMjIsMjggQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwot
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAg
SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJy
YW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBw
ZW5kKGdlbik7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBl
bmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBA
IC0zMjQsMTcgKzM1MywyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChj
b25zCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIFVO
VVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2
YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJh
bmQ+KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50
R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJh
bmRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMzQ0LDI0ICszNzgsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2Jy
YW5kKAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09
IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Nh
bWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1p
emUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0
UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJp
dmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChv
cGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICNlbmRpZgogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM3MCwzMyArMzk4LDQ3IEBAIHZv
aWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY28KICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBi
eXRlY29kZS5tX2JyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgcmVnVDEpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFu
ZCwgYnJhbmRHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAK
ICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVC
cmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZv
cy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkNoZWNrUHJp
dmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNz
ZXMuYXBwZW5kKGdlbik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRl
X2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tQcml2YXRlQnJhbmQ+
KCk7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlKTsKKwogICAgIEpJVFByaXZhdGVCcmFuZEFj
Y2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFu
ZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9w
ZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTQwNiwyNCArNDQ4LDE4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGlj
X2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlv
bkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFp
dHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5
cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1p
emUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNSwzMCArNDcxLDQzIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDMpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
Ynl0ZWNvZGUsIGJhc2VHUFIsIHByb2ZpbGVHUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
LCBwcm9maWxlR1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwg
cmVnVDMsIHJlZ1Q0KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIsIHN0dWJJbmZvR1BSKTsK
KwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQg
PSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3Qg
OiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUo
Ynl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNv
IHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBT
dHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0
LDE1ICs1MjMsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQog
ICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7
CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5
dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNE
aXJlY3QpCkBAIC00OTgsNyArNTQ0LDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5
IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVy
YXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RP
cHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBh
cmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3Vt
ZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIz
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHZpYWJsZUFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFs
RGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2Zp
bGUoKSwgdmlhYmxlQXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCks
IE9wUHV0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCB2aWFibGVBcmd1
bWVudEdQUjUpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3ModmlhYmxlQXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIHZpYWJsZUFyZ3VtZW50R1BSNCwgdmlhYmxl
QXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUxMiw3
ICs1NjcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAgIGF1
dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5v
blN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlW
YWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwpA
QCAtNTIzLDcgKzU3OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUzMywxOCArNTg4LDI0
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJl
Z1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZChCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwg
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDQpKTsKKyAg
ICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAgfQorCiAKICAgICBqaXQu
c3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpAQCAtNTcwLDIwICs2MzEsMzEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJl
Z1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwog
CiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVnLCBy
ZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7Cisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0
UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNW
YWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRl
TmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0
S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmll
ciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2NjYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJp
dmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKLSAgICBQcml2YXRlRmll
bGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgVU5VU0VEX1BBUkFN
KGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0g
bV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02MDMsMTMgKzY3NCwxNSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0Rl
ZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9w
ZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0
aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJ
bW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5
LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92
YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHZpYWJsZUFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJhdGlv
bjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplKT4o
QWRkcmVzcyh2aWFibGVBcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIp
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjk1LDEyIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lm
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNjQzLDE0ICs3MTAsMTQgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSByZWdUNDsKIApAQCAtNjgwLDcgKzc0Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0
ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC02ODksNyArNzU3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0
ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC02OTksNyArNzY4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIs
IHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCBy
ZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdU
MSwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUs
IHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MDksNyArNzc5LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlW
YWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTcxOSw3ICs3OTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0
dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRy
aWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0
cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyNywyMyArNzk5LDMzIEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBC
YXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1Zh
bHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0
IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQg
d3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIg
Y2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNzU5LDE1ICs4NDEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4
KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVk
SW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRp
b25EZWxldGVCeUlkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
LCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC03ODEsMjQgKzg2NSwxOSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0g
YXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQ
Uik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9p
ZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTgwOCw3ICs4ODcsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBA
IC04NDUsMjIgKzkyNCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVy
dHkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5l
RGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0
R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKwogICAgIEpJVERlbEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdU
MywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1
YkluZm9HUFIsIEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVz
dWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1p
dCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmll
ciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUg
d2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtODgzLDkgKzk3Mywx
MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVz
dGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlv
bkRlbGV0ZUJ5VmFsT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9l
Y21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04
OTksMjQgKzk5MSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBj
b25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25E
ZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMTMsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIg
KzEwNDgsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6cmVzdWx0KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZVZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3Vs
dFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFj
Y2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwODIsMTcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAg
IGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKT4oQWRk
cmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDAzLDI2ICsxMTAyLDIwIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKICAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0
aW9uVHJ5R2V0QnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtMTAzMCwyMiArMTEyMywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWRE
aXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBy
ZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlk
RGlyZWN0OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0K
IApAQCAtMTA1NCwxNiArMTE1NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0
aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5
cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBy
ZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtMTA3Myw4MyArMTE3Nyw2MiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIz
OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGly
ZWN0T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBD
YWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25H
ZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFs
dWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNo
OworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VW
UmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZVZSZWcpOwogICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+
bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBKdW1wIG5vdEFycmF5
TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEu
bV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihH
ZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChyZWdUMCwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9k
ZS5hcnJheVByb2ZpbGUsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlk
TW9kZU1ldGFkYXRhOjpvZmZzZXRPZk1vZGUoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIEp1bXAg
bm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoMzIoTm90RXF1YWwsIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgT3BHZXRC
eUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRh
dGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFzZUdQUiwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVn
cywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogCi0gICAg
SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1Ao
KTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVs
eSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwog
fQogCkBAIC0xMTU4LDE2ICsxMjQxLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwpAQCAtMTE3NywyNiArMTI2Miw1OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1l
bnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRl
Y29kZS5tX3RoaXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdpdGhU
aGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhp
c0dQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVn
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOwor
CisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRS
ZWdzLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiksIHN0dWJJbmZv
R1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkdldEJ5SWRXaXRoVGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhp
dCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xv
d0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCkBAIC0xMjA2LDcgKzEzMjMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgog
ICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGds
b2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGpp
dC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMjQxLDE2ICsxMzU4LDE5IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
V2l0aFRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhU
aGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRC
eUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV90aGlzVmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKT4oYnl0ZWNvZGUs
IEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI4ICsxMzgw
LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxy
ZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OnRoaXNWYWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRH
UFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5
SWRXaXRoVGhpc09wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFs
dWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKQEAgLTEyOTEsNyArMTQwNSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAg
ICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTEzMjksMjMgKzE0NDMsMzggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVW
UmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxh
Z3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0
aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVy
LAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGlu
dG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8v
IHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUg
ZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZS
ZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVn
aXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIGJhc2VH
UFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdU
MywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRj
aEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJl
Y3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlJZDsKKyAgICBzdHVi
SW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERp
cmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25z
ZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeUlkcy5h
cHBlbmQoZ2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRo
b3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsxNDg4LDE4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAgICAK
ICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4
KytdOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBl
KG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CkBAIC0xMzc2LDI1ICsxNTA5LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
aWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjM7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyB2
YWx1ZUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6
OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1l
bnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlz
QVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBhcmd1bWVudEdQUjEpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwg
cHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IGdlbi5zbG93UGF0aEZ1bmN0aW9u
KCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChnZW4uc2xvd1BhdGhGdW5j
dGlvbigpKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTE0MDQsNyAr
MTUzMSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKQEAgLTE0NDEsMjAgKzE1NjgsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQo
Y29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdp
c3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsK
IAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJ
bkJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0
NjMsMTQgKzE2MDEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElu
cwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAg
IEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJ
ZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRH
UFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXpl
KT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjIxLDIyIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Ig
d2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2lu
dCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJl
bnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRp
b25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2
YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkluQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BS
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUg
KzE2NDUsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwg
YmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVElu
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Oklu
QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2ODAs
MTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9y
JiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJv
cGVydHksIHZpYWJsZUFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShv
cGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIHZpYWJsZUFyZ3VtZW50R1BS
NCk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTU2LDU5ICsxNzAyLDcw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09
IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxl
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2Zp
bGVHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3
aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50
IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVu
dCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlv
bkluQnlWYWxPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6
dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
YnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5T3JCcmFuZCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUs
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nl
c3NUeXBlID0gdHlwZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5
cGUpCit2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZp
cnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUg
dHlwZSkKIHsKLSAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8
fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgVU5VU0VEX1BBUkFN
KGJhc2UpOworICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7CisgICAgQVNTRVJUX1VOVVNFRCh0
eXBlLCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9
IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3Bl
cmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJn
dW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZh
dGVOYW1lT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTYxOCwyNyArMTc3NSwyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVT
bG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVn
aXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BS
ID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBl
KG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGlt
aXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRl
X25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBl
ID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRl
QnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxODAzLDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5t
X2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xv
dyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19w
cml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
NjY2LDIxNSArMTgxNywxMjcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX2Jy
YW5kKAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVCcmFuZD4oKTsKLSAgICBlbWl0SGFz
UHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7
CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWws
IEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlv
bldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zh
ckluamVjdGlvbldhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0
YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewotICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBkZXB0aDsgKytpKQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
U2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLXZvaWQgSklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29s
dmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7Ci0gICAgdW5zaWduZWQgZGVw
dGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBb
Jl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5
cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNv
bnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVU
eXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNj
b3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2ds
b2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwot
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0g
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNh
bFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0
YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3Vy
ZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQo
KSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2
ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBj
YXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1w
TGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwg
cmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29k
ZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0Vu
ZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0jZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKLQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29s
dmVUeXBlOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1f
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBBU1NFUlQobV91bmxp
bmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJ
bnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNl
cnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2ls
bCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0gICAgaWYgKHJlc29sdmVU
eXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1f
bGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlmIChwcm9maWxlZFJlc29s
dmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQo
KSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQg
PSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgICAg
IHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2RlZmluZSBSRVNPTFZFX1ND
T1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBl
IyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0
b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoUkVTT0xWRV9TQ09Q
RV9HRU5FUkFUT1IpCisgICAgICAgIGF1dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYg
dm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVu
ayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXIi
KTsKICAgICAgICAgfTsKLSN1bmRlZiBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgorCisgICAgICAg
IGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0m
IHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsodm0sIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX3Jl
c29sdmVfc2NvcGUgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MiKTsKKyAgICAgICAg
fTsKKworICAgICAgICBhdXRvIGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0m
IHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMi
KTsKKyAgICAgICAgfTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0g
cmVnVDI7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwogICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBl
XSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9z
dXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgIGNvZGUgPSB2
bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY1Jl
c29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNv
bnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFs
PFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAg
IC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdp
dGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OworCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsgLy8gaW5jb21pbmcKKyAgICBjb25zdGV4
cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDI7IC8vIGluY29taW5nCisgICAgY29uc3RleHBy
IEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8g
c2xvdyBwYXRoLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7
CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBSRUxFQVNFX0FTU0VS
VCh0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSk7CiAKLSAgICB0YWdS
ZXR1cm5BZGRyZXNzKCk7CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwg
cmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGppdC5sb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkp
LCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCiAgICAgSnVt
cExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAo
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IElu
dmFsaWRHUFJSZWcpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlk
R1BSUmVnKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJl
ZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJ
bmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBt
X3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNl
dE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAg
ICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcykgewotICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIGxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29w
ZURlcHRoKSksIHJlZ1QxKTsKLQotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAg
ICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKLSAgICAgICAgewotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSks
IHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAg
ICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKLSAgICAgICAgfQotICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNjb3BlR1BSID09IHJlZ1QwKTsK
KyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0
T2ZMb2NhbFNjb3BlRGVwdGgoKSksIHJlZ1QxKTsKKworICAgICAgICBMYWJlbCBsb29wID0gaml0
LmxhYmVsKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVn
VDEpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRP
Zk5leHQoKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDEpOworICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsKKyAgICAgICAgZG9u
ZS5saW5rKCZqaXQpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSkgewpAQCAtMTg4MiwxMiArMTk0NSwxMSBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAg
ICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMg
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2Jh
bE9iamVjdEdQUik7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAg
ICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwg
bV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpT
R2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1Qx
KSk7Ci0gICAgICAgICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAg
ICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0
T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0dsb2Jh
bE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTg5NywxMSArMTk1OSwxMSBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAogICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhp
Y2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAg
ICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKQotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxP
YmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAg
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9m
ZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0xOTA5LDcgKzE5
NzEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAg
ICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVk
Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0xOTE5LDgzICsxOTgxLDQ1
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDAp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBl
bHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSks
IHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0
YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpKSwgcmVnVDEpOwogCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGlu
ayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhp
cyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGF1
dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAgICAg
ICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKKyAg
ICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICBub3RD
YXNlLmxpbmsoJmppdCk7CisgICAgICAgIH07CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICB9CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2Jh
bFByb3BlcnR5KTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAg
IGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0
Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0
Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5r
KCZqaXQpOwogICAgIH0KIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHVi
KHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2
ZV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwog
fQogCi0jZGVmaW5lIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkg
XAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jlc29sdmVf
c2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAg
ICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBl
KSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAot
ICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhyZXNvbHZlVHlw
ZSwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0K
LUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0j
dW5kZWYgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3Io
Vk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBj
YW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIC8vIFRoZSBmYXN0IHBhdGgg
YWxyZWFkeSBwdXNoZWQgdGhlIHJldHVybiBhZGRyZXNzLgogI2lmIENQVShYODZfNjQpCkBAIC0y
MDM0LDcgKzIwNTgsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwo
aGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNv
bHZlX3Njb3BlIik7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZv
aWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCiB7CkBAIC0yMDYyLDI3NiArMjA4NSwxMzMgQEAg
dm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBv
cGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKIH0KIAotI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVj
b2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dl
dFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0g
bWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3Qg
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOworICAg
IFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAotICAgIGF1dG8g
ZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
c2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNr
aW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVn
VDA7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJS
ZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwot
Ci0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAt
PiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwotICAgICAgICAgICAg
fSkpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5z
dHJ1Y3Rpb24pOwogCi0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7Ci0g
ICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlz
T3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJ
bW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJl
YXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxp
bmUubGluayh0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAg
ICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQs
IG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwg
VGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSwgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1p
dEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFu
ZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVn
VDApOwotICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwg
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8v
IFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVz
b2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIH0KKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZt
KSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwg
Q2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CiAg
ICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAg
ICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwg
ZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNO
b3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0Vu
ZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdl
dFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAK
LQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAg
aXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
LCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
Z1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19
Ci0KLSNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCi12b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQot
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNj
b3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgYXV0
byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0p
IHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9z
Y29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKIAotICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0g
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0g
ICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRl
eCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVH
ZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9t
X3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY29wZUdQUiA9IHJlZ1QyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZz
ZXRHUFIgPSByZWdUNTsKIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsKLSAg
ICAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0gICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Ynl0ZWNvZGUpOwogCi0jZGVmaW5lIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlw
ZSkgb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBz
dGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAg
Rk9SX0VBQ0hfUkVTT0xWRV9UWVBFKEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSAgICAgICAg
fTsKLSN1bmRlZiBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRh
T2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zm
c2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRh
T2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKLSAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBjb2RlOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAg
ICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAgIGVsc2Ug
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElT
dHViKGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IpOworCisgICAgZW1pdE5ha2VkTmVhckNh
bGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9u
YWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAg
ICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsg
d2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICB1c2luZyBNZXRhZGF0YSA9
IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAg
IFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUp
KTsKLQotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKLQotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFk
ZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFH
UFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7CiAKLSAg
ICBKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0gICAgYXV0byBl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90
IG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUo
c2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIo
WmVybywgcmVnVDEpKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSkpOwotICAgIH07CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAg
IGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRh
ZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIp
OworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25D
aGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgIGF1dG8gZG9W
YXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewog
ICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2lu
dCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2Jq
ZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6
Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07
CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3Bl
cmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0g
ICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVy
YW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
b3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAg
ICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBv
cGVyYW5kR1BSKSB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdp
c3RlcikpOwotICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwot
ICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFk
ZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVz
KCkpLCByZWdUMCk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAg
ICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNr
aW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLQotICAgICAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJl
Z1QwOwotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAg
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAgICBq
aXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAg
ICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVy
biBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIC8vIFN0cnVjdHVy
ZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1
cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNv
bHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBq
aXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KSk7CisKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+
KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIHNj
b3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQp
KSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QxKTsKKwogICAgICAgICAgICAgaWYg
KEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJy
YW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0
SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7
CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVy
VGhhbk9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsK
KyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZM
aW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAg
ICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxv
YWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworCisgICAg
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubmVnMzIocmVnVDEpOworICAgICAg
ICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgICAgICBq
aXQubG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9m
TGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlZ1QwKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAg
ICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJl
Z1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8
IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAv
LyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1w
dHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElm
RW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JK
RUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOwotICAgICAgICAgICAg
ZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAgIGRvVmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0
T2ZPcGVyYW5kKCkpLCByZWdUMyk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9
PSBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1t
MzIoMyksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5hZGRQdHIoc2NvcGVHUFIsIHJlZ1QzKTsK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAo
KSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2Ug
TW9kdWxlVmFyOgpAQCAtMjM0MSw4NiArMjIyMSw2MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNv
bHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5k
OwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAg
ICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJl
c29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0g
ICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mR2V0UHV0SW5mbygpKSwgcmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8g
VDAKIAotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAg
ICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQ
cm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOwor
CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0ds
b2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9w
ZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0
cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
anVtcCgpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAK
LSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAg
ICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAg
c3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBz
dG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0
YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRP
ZkZpcnN0QnVja2V0KCkpKTsKIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dl
dF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFt
ZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZl
VHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dl
dF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwK
LSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNv
bHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2
bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVz
b2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBc
Ci0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5F
UkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29w
ZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlz
IGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVj
YXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4
Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNDI5LDcgKzIyODYs
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAjZW5kaWYKIAog
ICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1l
dGFkYXRhR1BSID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IHJlZ1Q1OwogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIApAQCAtMjQ0OSw3ICsy
MzA2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIENh
bGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2Vw
dGlvbkNoZWNrID0gaml0LmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAg
ICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlciwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQo
cmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE1ldGFkYXRhOjpvZmZz
ZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAg
ICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51
bWJlclRhZ1JlZ2lzdGVyKTsKIAogI2lmIENQVShYODZfNjQpCkBAIC0yNDY5LDg4ICsyMzI2LDc3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1
ZmZlci5saW5rKGp1bXBUb0hhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsK
IH0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAs
IG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpT
VmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCBy
ZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NP
Zk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lk
IEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qg
b3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAg
ICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAg
IEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAg
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7
Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAg
UmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBl
bWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNo
IChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAg
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1
Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3Ry
dWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwg
cmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAg
ICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3
ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVj
dC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNo
ZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJl
KCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJl
Z1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEp
KTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIp
OwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAo
KSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAg
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAg
ICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
KyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1l
c0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpKTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNv
bnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVU
eXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNj
b3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2so
cmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dElu
Zm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSkgeworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRP
bmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5k
KCksIHJlZ1QwKTsKKworICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2Rl
Lm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFRE
WiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1p
dCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQ
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2lu
dGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7Cisg
ICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3Rv
cmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2Nv
cGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCBy
ZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAg
ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSkpOworCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgTW9kdWxlVmFyOgpAQCAtMjU2NCw1OCArMjQxMCw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChy
ZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRv
RW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAg
ICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8v
IExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0g
ICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYg
d2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJp
bmRpbmcuCi0KLSAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAg
IGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFBy
b3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sg
c2VlcyBDbG9zdXJlVmFyLyBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3
ZSBjYW4gY29tcGlsZSB0aGluZ3MKKyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3Ms
IHNpbmNlIHdlJ3ZlIHByb3ZlbiB0aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3Jl
IGEgQ2xvc3VyZVZhciwKKyAgICAvLyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIu
IElmIHdlJ3JlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMg
Q2xvc3VyZVZhcgorICAgIC8vIGlmIHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3Qg
ZmlyZWQuIElmIGl0IGlzIGZpcmVkLCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQg
ZG9lc24ndAorICAgIC8vIG1hdHRlciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAg
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2Rl
KENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2
ZWRDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAg
IGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0
SW5mbygpLCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAg
SnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJv
cGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNl
KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKIAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAg
IG5vdEdsb2JhbFZhci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOwor
CiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2Jh
bExleGljYWxWYXIubGluayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBm
YWxzZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjYyNCwxOCArMjQ2NCwyMSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGll
ZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcikgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAg
ICAgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFs
bCBsaW5rZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNl
ZSBNb2R1bGVWYXIuCiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlf
cHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAg
IH0gZWxzZSB7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRv
U2NvcGUsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChi
eXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0
aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAt
MjY1Miw3ICsyNDk1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmpl
Y3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBE
RkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmpl
Y3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
LSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82
NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNzAxLDcgKzI1NDQsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVz
cyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyNjAyLDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0
ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2Zp
ZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7CkBAIC0yNzY3LDcgKzI2MDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50
ZXJuYWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46
Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IApAQCAtMjgyMyw3ICsyNjY1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2Vu
dW1lcmF0bwogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNv
ZGUubV9tb2RlOwpAQCAtMjgzOSwxMSArMjY4MCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX25leHQoY29uc3QgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8v
IFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVj
aWFsIGNhc2UgaXQgaWYgd2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFk
YXRhLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3du
U3RydWN0dXJlTW9kZSkgeworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok93blN0cnVjdHVyZU1vZGUpIHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdU
MzsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAgICAgICAgb3BlcmF0
aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JH
UFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MigofkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgJiBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spKSk7CiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgbG9hZDhGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1l
cmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSwgc2NyYXRjaEdQUik7
CisgICAgICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIE9wRW51bWVy
YXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKKwogICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpLCBpbmRleEdQUik7CiAgICAgICAgIG9wZXJh
dGlvbkNhc2VzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwogCkBAIC0yODgxLDc4ICsyNzI4
LDg4IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25l
Q2FzZXM7CiAKLSAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3Vs
dDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5l
RW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gyID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0
Y2gyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JH
ZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihtb2RlLCBzY3JhdGNoMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eU5hbWUsIHByb3BlcnR5R1BSKTsKIAotICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNz
KCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVy
YXRvck1ldGFkYXRhKCksIHNjcmF0Y2gyKTsKKyAgICBvcjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7
CisgICAgc3RvcmU4VG9NZXRhZGF0YShzY3JhdGNoMiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdl
dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwoYmFzZUdQUikpOwogICAgIC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVu
Y29kZWQgdmFsdWUuCi0gICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0
MzIoTm9uWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwor
ICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHNj
cmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKIAogICAgIC8vIENo
ZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDMpOwotICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgc2NyYXRjaDEpOworICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBKdW1wIHN0cnVjdHVyZU1p
c21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKIAog
ICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
ZGV4LCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgc2NyYXRjaDIp
OwogICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBp
bmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9m
TGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkp
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFn
ZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7Ci0gICAg
bG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwot
CisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHNjcmF0
Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwg
c2NyYXRjaDIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVz
RWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAg
ICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0
IG9mIGxpbmUKICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBz
dWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbmVnMzIocmVnVDMpOwotICAgIHNpZ25F
eHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2VHUFIpOworICAgIHN1YjMyKEFkZHJl
c3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBuZWczMihzY3JhdGNoMik7CisgICAgc2lnbkV4
dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKICAgICBjb25zdGV4cHIgaW50cHRyX3Qg
b2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gb2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQpICogc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwot
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwg
c2NyYXRjaDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7
CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgc3RydWN0dXJlTWlzbWF0Y2gu
bGluayh0aGlzKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0
YS5tX2VudW1lcmF0b3JNZXRhZGF0YSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVj
dHVyZU1pc21hdGNoKSwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBpc05vdE93blN0cnVjdHVyZU1v
ZGUubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUpKTsKKyAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBzY3JhdGNo
MywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsK
ICAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHByb3BlcnR5R1BSKTsKIAogICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOwotICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOwor
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2Ny
YXRjaDEpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdl
IG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQg
U1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAg
ICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5NjEsMTAgKzI4MTgsOSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfCiAgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0ZXIpOwog
fQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5j
dGlvblR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0
ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQordGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjpl
bWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25U
eXBlIGdlbmVyYWxDYXNlKQogewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKQEAgLTI5NzMs
NyArMjgyOSw5IEBAIHZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW0KICAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUs
IHJlZ1QwKTsKLSAgICBvcjgocmVnVDAsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVt
ZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgQnl0ZWNv
ZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCByZWdUMSk7CisgICAg
b3IzMihyZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDEsIGJ5dGVjb2Rl
LCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAKQEAgLTMw
NjIsNiArMjkyMCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVy
CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCit2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpCit7CisgICAgSnVtcCBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2VsZWN0U2NyYXRj
aEdQUihvd25lcikpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4ubGluayh0aGlzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsOSArMjM2LDkgQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlQ2Vs
bCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVU
eXBlOjpVbnNldAogICAgICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFz
ZUNlbGwKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFy
cmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNv
ZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgewogCi0gICAg
ICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6
Z2VuZXJhdGVBcnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkp
OworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpT
QXJyYXkqPihiYXNlQ2VsbCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29k
ZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtp
bmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aChs
b2NrZXIpOwpAQCAtMjQ5LDggKzI0OSw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZUdldEJ5KEoKICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRl
KHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICAgICAgfSBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VDZWxsKSkgewogICAgICAgICAg
ICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAg
ICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgo
c3R1YkluZm8pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGlu
ZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pOworICAgICAg
ICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNv
ZGVCbG9jaywgc3R1YkluZm8pKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVk
Q29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29kZUJsb2Nr
LCBzdHViSW5mbyk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5l
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9j
aywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFN0cmluZ0xlbmd0aChsb2NrZXIp
OwpAQCAtMzA0LDcgKzMwNCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdl
dEJ5KEoKICAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKICAgICAgICAg
ICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAg
ICAgICAgICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94eSkgewotICAgICAgICAgICAgICAg
IGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJv
cGVydHlBY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Cisg
ICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpn
ZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUs
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2Rl
SW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxm
UGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHBy
b3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNl
bWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpAQCAtNzMxLDExICs3MzEsMTEgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnkoSgogICAgICAgICAgICAgICAgIG9s
ZFN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9m
ZnNldCgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNo
ZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGlu
ZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzbG90LmNh
Y2hlZE9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90LmNhY2hl
ZE9mZnNldCgpKQogICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5uZWVkSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICAgICAgICAgJiYgIWlzUHJveHkp
IHsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJh
dGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNl
KHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAg
ICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUs
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVk
Q29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQ
dXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFz
ZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQ
YXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1
bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOwpAQCAtMTEzMiw3ICsxMTMyLDcgQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAm
JiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZQogICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNo
cG9pbnRTZXQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlu
bGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3Moc3R1YkluZm8sIHN0cnVj
dHVyZSk7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1
cmUpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAg
ICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5j
bGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRz
KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0YXRpYyB2
b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2
bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9u
czo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8u
ZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1i
bHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5m
bykpOwogICAgIAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1
YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4o
KSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDI0ICs0Myw2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2
bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwotCi0gICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7Ci0gICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLQotICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwotCi0gICAg
aml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElU
aHVuayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOwotICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2Vw
dGlvbiIpOwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRs
ZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAg
Q0NhbGxIZWxwZXJzIGppdDsKQEAgLTc3LDI0ICs1OSw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gaGEKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2si
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0
YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBD
Q2FsbEhlbHBlcnMgaml0OwotCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVnaXN0
ZXJzOjplc3ApOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVy
czo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKLSNl
bmRpZgotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7
Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5n
ZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGlu
ayhjb250aW51YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRo
dW5rUHRyVGFnLCAicG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOwot
fQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpAQCAtMTM3LDYgKzEw
MSw0MiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoCiAKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIEND
YWxsSGVscGVycyBqaXQ7CisKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisKKyAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBq
aXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworCisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9w
ZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisKKyAgICBqaXQuanVtcFRvRXhj
ZXB0aW9uSGFuZGxlcih2bSk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihv
cGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uIik7Cit9CisK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNl
cnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKKworI2lmIENQVShYODZfNjQpCisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNw
KTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1l
UG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKwor
ICAgIENDYWxsSGVscGVyczo6SnVtcCBjb250aW51YXRpb24gPSBqaXQuanVtcCgpOworCisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1
YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY29udGlu
dWF0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgInBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsKK30KKwogdGVt
cGxhdGU8dHlwZW5hbWUgVGFnVHlwZT4KIGlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlv
bihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIsIFRhZ1R5cGUgdGFnKQogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsMTIgQEAgY2xhc3MgVk07CiAKICNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNr
R2VuZXJhdG9yKFZNJik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBv
cFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIAog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOworTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5k
SGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZN
Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQ2FsbEZy
YW1lLmgiCiAjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKKyNpbmNsdWRl
ICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5o
IgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCkBA
IC0zNzAsMTMgKzM3MSwyMiBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGlj
cyhWCiAgICAgCiAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9u
cygpOwogCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5l
SklUKSB7CisgICAgICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9
IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkg
eworICAgICAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShi
YXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CisgICAgICAgICAgICBjb2Rl
QmxvY2stPmppdE5leHRJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KKwogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xk
UmVhY2hlZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVs
YXlKSVRDb21waWxlIiwgKCJ0aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2Rl
QmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRp
b25zOjp2ZXJib3NlT1NSKCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEpJVFdvcmtsaXN0OjpT
dGF0ZSB3b3JrbGlzdFN0YXRlID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCku
Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkpOworICAgIEpJVFdvcmtsaXN0OjpTdGF0
ZSB3b3JrbGlzdFN0YXRlID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29t
cGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+
dW5saW5rZWRDb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkpOwogCiAg
ICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CiAg
ICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBh
bHJlYWR5IGNvbXBpbGVkLiIpOwpAQCAtNDY2LDggKzQ3NiwxMCBAQCBMTElOVF9TTE9XX1BBVEhf
REVDTChsb29wX29zcikKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9t
SW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBjb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdp
YmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0g
dm0uZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKHBjKTsKICAgICAgICAgKnB0ciArPSBjb2Rl
QmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKS5tX2FjdGl2ZVRocmVzaG9sZDsKLSAgICAgICAg
aWYgKCpwdHIgPj0gT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkp
CisgICAgICAgIGlmICgqcHRyID49IE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9v
cHNMaW1pdCgpKSB7CisgICAgICAgICAgICBjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEoQ29uY3Vy
cmVudEpTTG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKSk7IC8vIFdlJ3JlIHJldHVybmluZyB0byB0
aGUgT1NSIGVudHJ5IGNvZGUgaGVyZSwgd2hpY2ggZXhwZWN0cyB0aGF0IG1faml0RGF0YSBpcyBu
b3QgbnVsbC4KICAgICAgICAgICAgIExMSU5UX1JFVFVSTl9UV08oTExJbnQ6OmZ1enplclJldHVy
bkVhcmx5RnJvbUxvb3BIaW50RW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
LCBjYWxsRnJhbWUtPnRvcE9mRnJhbWUoKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVx
LCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdl
ck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bj
b2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikK
LSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmgg
dHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJp
dGhQcm9maWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQx
LCB0MikKICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0
W2NmciwgdDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3Jv
IHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBp
biB0MSwgc3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQog
ICAgICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBk
YXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0
aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAg
ZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAog
bGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJv
ZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRo
UHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBt
ZXRhZGF0YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9w
TmVnYXRlU3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwog
ICAgIG5lZ2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAg
IHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0
MykKICAgICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBi
aWEgdDEsIExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEK
LSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVu
YXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAg
ICByZXR1cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBA
IGVuZCkKIAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1
Y3QsIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50
T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXpl
LCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFBy
b2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRh
dGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAg
ICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0
MikKICAgICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFn
LCAub3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAg
ICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikK
ICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3Jl
KHQzLCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiAr
MTEyNCwxMiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAg
ICAgIGJpYSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywg
Lm9wMU5vdEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0g
ICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwg
dDUsIHQ0KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVh
ZHkKICAgICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQot
ICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1
cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJO
dW1iZXIsIHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwg
dDEpCiAgICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNy
byBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3Bl
cmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRl
bHkgbm90LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRh
ZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAg
ICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxl
SW50TnVtYmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQg
dDEsIHQzLCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20JKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEz
IEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMs
IGExCiAgICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRw
eiByMCwgLnJlY292ZXIKLQogICAgICAgICAgICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAg
IyBCYXNlbGluZSB1c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQg
cG9vbC4KKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAg
bG9hZHAgQ29kZUJsb2NrOjptX2ppdERhdGFbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29k
ZUJsb2NrOjpKSVREYXRhOjptX2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAg
IGlmIEFSTTY0RQogICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpT
Qzo6b2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50
cnkpICogUHRyU2l6ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRH
YXRlUHRyVGFnICMgSlNFbnRyeVB0clRhZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVx
dWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFt
ZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRh
dGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3Bh
dGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUo
dHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
YXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5k
Ci0KICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhd
LCB0MQogICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNy
byBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVy
YXRpb24odDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9y
ZXEgdDEsIFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9m
aWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFy
aXRoUHJvZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoK
QEAgLTExMzQsMTEgKzExMzUsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9u
ZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJl
dHVybikKLQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmgg
dHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIp
CkBAIC0xMTQ2LDEyICsxMTQyLDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBP
cE5lZ2F0ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVn
aSB0MwogICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRo
UHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQ
cm9maWxlSW50LCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAg
IGJ0cXogdDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAw
MDAwMDAwLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisg
ICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwg
dDEsIHQyKQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzEx
NjAsNiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1
LCB0MCkKIAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlw
ZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRo
UHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQw
KQogICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
KHNpemUsIHQwLCB0MSkKQEAgLTExNzcsNyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9t
U3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50
ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2Zp
bGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZGlzcGF0
Y2goKQogCiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJU
YWcsIC5zbG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBm
dDEKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVw
ZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51
bWJlciwgdDUsIHQyKQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdElu
dE9wMkludDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJl
ckludCwgdDUsIHQyKQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5
OgogICAgICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNCw5ICsxMTk2LDkgQEAgbWFjcm8gYmlu
YXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogCiAgICAgLm9wMk5vdEludDoKICAgICAg
ICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIGlzIGRl
ZmluaXRlbHkgbm90LgotICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6IHQxLCBu
dW1iZXJUYWcsIC5zbG93Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQor
ICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2Zp
bGVJbnROdW1iZXIsIHQ1LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgY2ky
ZHMgdDAsIGZ0MAogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwg
ZnQxCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE0MjAs
NyArMTQyMCw4IEBAIGVuZAogCiBtYWNybyBjaGVja1N3aXRjaFRvSklUKGluY3JlbWVudCwgYWN0
aW9uKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGJhZGRpcyBpbmNyZW1lbnQs
IENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3Vu
dGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxp
bnRFeGVjdXRlQ291bnRlclt0MF0sIHQwCisgICAgYmFkZGlzIGluY3JlbWVudCwgQmFzZWxpbmVF
eGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICBhY3Rpb24oKQog
ICAgIC5jb250aW51ZToKIGVuZApAQCAtMTUwMyw3ICsxNTA0LDggQEAgbWFjcm8gcHJvbG9ndWUo
Y29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvYwogICAgIGNvZGVCbG9ja0dldHRlcih0MSkKICAgICBj
b2RlQmxvY2tTZXR0ZXIodDEpCiAgICAgaWYgbm90IChDX0xPT1Agb3IgQ19MT09QX1dJTikKLSAg
ICAgICAgYmFkZGlzIDUsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxp
bmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDFdLCAuY29udGludWUKKyAgICAgICAgbG9h
ZHAgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDFdLCB0MAorICAgICAgICBiYWRk
aXMgNSwgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUK
ICAgICAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgICAgICBtb3ZlIGNmciwgYTAKICAgICAgICAg
ICAgIG1vdmUgUEMsIGExCkBAIC0xNjE3LDE0ICsxNjE5LDE0IEBAIG1hY3JvIGZ1bmN0aW9uSW5p
dGlhbGl6YXRpb24ocHJvZmlsZUFyZ1MKICAgICAjIG9wdGltYWwgd2F5IGZvciBhcmNoaXRlY3R1
cmVzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gZml2ZSByZWdpc3RlcnMgYXZhaWxhYmxlCiAgICAgIyBm
b3IgYXJiaXRyYXJ5IHVzZSBpbiB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgbG9hZGkgQ29kZUJsb2Nr
OjptX251bVBhcmFtZXRlcnNbdDFdLCB0MAotICAgIGFkZHAgLXByb2ZpbGVBcmdTa2lwLCB0MCAj
IFVzZSBhZGRpIGJlY2F1c2UgdGhhdCdzIHdoYXQgaGFzIHRoZSBwZWVwaG9sZQorICAgIGFkZHAg
LXByb2ZpbGVBcmdTa2lwLCB0MAogICAgIGFzc2VydChtYWNybyAob2spIGJwZ3RlcSB0MCwgMCwg
b2sgZW5kKQogICAgIGJ0cHogdDAsIC5hcmd1bWVudFByb2ZpbGVEb25lCiAgICAgbG9hZHAgQ29k
ZUJsb2NrOjptX2FyZ3VtZW50VmFsdWVQcm9maWxlcyArIEZpeGVkVmVjdG9yOjptX3N0b3JhZ2Ug
KyBSZWZDb3VudGVkQXJyYXk6Om1fZGF0YVt0MV0sIHQzCiAgICAgYnRweiB0MywgLmFyZ3VtZW50
UHJvZmlsZURvbmUgIyBXaGVuIHdlIGNhbid0IEpJVCwgd2UgZG9uJ3QgYWxsb2NhdGUgYW55IGFy
Z3VtZW50IHZhbHVlIHByb2ZpbGVzLgogICAgIG11bHAgc2l6ZW9mIFZhbHVlUHJvZmlsZSwgdDAs
IHQyICMgQWFhYWFoaGhoISBOZWVkIHN0cmVuZ3RoIHJlZHVjdGlvbiEKICAgICBsc2hpZnRwIDMs
IHQwICMgb2Zmc2V0IG9mIGxhc3QgSlNWYWx1ZSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLgotICAg
IGFkZHAgdDIsIHQzICMgcG9pbnRlciB0byBlbmQgb2YgVmFsdWVQcm9maWxlIGFycmF5IGluIENv
ZGVCbG9jazo6bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuCisgICAgYWRkcCB0MiwgdDMgIyBwb2lu
dGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gdGhlIHZhbHVlIHByb2ZpbGUgYXJy
YXkuCiAuYXJndW1lbnRQcm9maWxlTG9vcDoKICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgbG9h
ZHEgVGhpc0FyZ3VtZW50T2Zmc2V0IC0gOCArIHByb2ZpbGVBcmdTa2lwICogOFtjZnIsIHQwXSwg
dDIKQEAgLTI1NjMsNiArMjU2NSwxNyBAQCBtYWNybyBub3RTdXBwb3J0ZWQoKQogICAgIGVuZAog
ZW5kCiAKKworbWFjcm8gdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBl
LCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
YXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBVbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKworbWFjcm8gdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxl
KG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmgg
dHlwZSwgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCiAvLyBGSVhNRTog
V2Ugc2hvdWxkIG5vdCBuZWVkIHRoZSBYODZfNjRfV0lOIGNvbmRpdGlvbiBoZXJlLCBzaW5jZSBX
RUJBU1NFTUJMWSBzaG91bGQgYWxyZWFkeSBiZSBmYWxzZSBvbiBXaW5kb3dzCiAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNzE2CiBpZiBXRUJBU1NFTUJMWSBh
bmQgbm90IFg4Nl82NF9XSU4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDgsOCArNDgsMTAgQEAgcHVibGljOgogICAgIENhY2hlYWJsZUlkZW50aWZpZXIo
KSA9IGRlZmF1bHQ7CiAKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3Jl
YXRlRnJvbUNlbGwoSlNDZWxsKiBpZGVudGlmaWVyKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hl
YWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVC
bG9jayosIGNvbnN0IElkZW50aWZpZXImKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlk
ZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayos
IFVuaXF1ZWRTdHJpbmdJbXBsKik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5
cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgY29uc3QgSWRlbnRpZmllciYp
OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2soQ29kZUJsb2NrVHlwZSosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGlubGlu
ZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoVW5pcXVl
ZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgY29uc3RleHByIENhY2hlYWJsZUlkZW50aWZpZXIg
Y3JlYXRlRnJvbVJhd0JpdHModWludHB0cl90IHJhd0JpdHMpIHsgcmV0dXJuIENhY2hlYWJsZUlk
ZW50aWZpZXIocmF3Qml0cyk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVu
dGlmaWVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTQgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgY29uc3QgSWRlbnRpZmllciYgaSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVC
bG9jaywgY29uc3QgSWRlbnRpZmllciYgaSkKIHsKICAgICByZXR1cm4gY3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKGNvZGVCbG9jaywgaS5pbXBsKCkpOwogfQogCi1pbmxpbmUg
Q2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNo
ZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGNvZGVCbG9jay0+aGFz
SWRlbnRpZmllcih1aWQpKTsKICAgICByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcih1aWQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVk
VHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQ2FjaGVkVHlwZXMuaCIKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklU
Q29kZS5oIgogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ2Fj
aGVFcnJvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgpAQCAtMTkx
OCw2ICsxOTE5LDggQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgbnVtVmFsdWVQcm9maWxlcygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFsdWVQcm9maWxlczsgfQogICAgIHVuc2lnbmVkIG51bUFy
cmF5UHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bUFycmF5UHJvZmlsZXM7IH0KKyAgICB1
bnNpZ25lZCBudW1CaW5hcnlBcml0aFByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1CaW5h
cnlBcml0aFByb2ZpbGVzOyB9CisgICAgdW5zaWduZWQgbnVtVW5hcnlBcml0aFByb2ZpbGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1VbmFyeUFyaXRoUHJvZmlsZXM7IH0KIAogcHJpdmF0ZToKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7CkBAIC0xOTUyLDYgKzE5NTUsOCBAQCBw
cml2YXRlOgogCiAgICAgdW5zaWduZWQgbV9udW1WYWx1ZVByb2ZpbGVzOwogICAgIHVuc2lnbmVk
IG1fbnVtQXJyYXlQcm9maWxlczsKKyAgICB1bnNpZ25lZCBtX251bUJpbmFyeUFyaXRoUHJvZmls
ZXM7CisgICAgdW5zaWduZWQgbV9udW1VbmFyeUFyaXRoUHJvZmlsZXM7CiAKICAgICBDYWNoZWRN
ZXRhZGF0YVRhYmxlIG1fbWV0YWRhdGE7CiAKQEAgLTIxNjAsNiArMjE2NSw4IEBAIEFMV0FZU19J
TkxJTkUgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2UKICAgICAsIG1fcmFyZURhdGEoY2FjaGVk
Q29kZUJsb2NrLnJhcmVEYXRhKGRlY29kZXIpKQogICAgICwgbV92YWx1ZVByb2ZpbGVzKGNhY2hl
ZENvZGVCbG9jay5udW1WYWx1ZVByb2ZpbGVzKCkpCiAgICAgLCBtX2FycmF5UHJvZmlsZXMoY2Fj
aGVkQ29kZUJsb2NrLm51bUFycmF5UHJvZmlsZXMoKSkKKyAgICAsIG1fYmluYXJ5QXJpdGhQcm9m
aWxlcyhjYWNoZWRDb2RlQmxvY2subnVtQmluYXJ5QXJpdGhQcm9maWxlcygpKQorICAgICwgbV91
bmFyeUFyaXRoUHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bVVuYXJ5QXJpdGhQcm9maWxlcygp
KQogewogfQogCkBAIC0yMzM3LDYgKzIzNDQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVk
Q29kZUJsb2NrPENvZGVCCiAgICAgbV9oYXNDaGVja3BvaW50cyA9IGNvZGVCbG9jay5tX2hhc0No
ZWNrcG9pbnRzOwogICAgIG1fbnVtVmFsdWVQcm9maWxlcyA9IGNvZGVCbG9jay5tX3ZhbHVlUHJv
ZmlsZXMuc2l6ZSgpOwogICAgIG1fbnVtQXJyYXlQcm9maWxlcyA9IGNvZGVCbG9jay5tX2FycmF5
UHJvZmlsZXMuc2l6ZSgpOworICAgIG1fbnVtQmluYXJ5QXJpdGhQcm9maWxlcyA9IGNvZGVCbG9j
ay5tX2JpbmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgIG1fbnVtVW5hcnlBcml0aFByb2Zp
bGVzID0gY29kZUJsb2NrLm1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKIAogICAgIG1fbWV0
YWRhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX21ldGFkYXRhLmdldCgpKTsKICAgICBt
X3JhcmVEYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9yYXJlRGF0YS5nZXQoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBK
U0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkK
IHN0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6
TWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewot
ICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7
CisgICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2Zp
bGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQu
aXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUg
cHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0
aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDM0LDggKzQzNCw2IEBAIHZvaWQgT3B0aW9uczo6cmVjb21wdXRl
RGVwZW5kZW50T3B0aW9ucygKICAgICBPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSA9IGZhbHNl
OwogI2VuZGlmCiAKLSAgICBpZiAoIWlzQVJNNjQoKSkKLSAgICAgICAgT3B0aW9uczo6dXNlRGF0
YUlDKCkgPSBmYWxzZTsKICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQogICAgICAgICBP
cHRpb25zOjp1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQoKSA9IGZhbHNlOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI4MzA1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwOSw3ICszMDksNiBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1l
bW9yeSgpOwogICAgIHYoSW50MzIsIGV2YWxUaHJlc2hvbGRNdWx0aXBsaWVyLCAxMCwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwgbWF4aW11bUV2YWxDYWNoZWFibGVTb3VyY2VM
ZW5ndGgsIDI1NiwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAotICAgIHYoQm9vbCwgcmFuZG9t
aXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihJbnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3Bv
aW50c0ZvckJhc2VsaW5lLCAxMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMyLCBt
YXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yVXBwZXJUaWVycywgNTAw
MDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKQEAgLTUzMiw2ICs1MzEsNyBAQCBib29sIGNh
blVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoQm9vbCwgdXNlRGF0YUlDLCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNJbk9wdGltaXppbmdK
SVQsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ1NoYXJp
bmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIHVzZUJhc2VsaW5lSklU
Q29kZVNoYXJpbmcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICAvKiBGZWF0
dXJlIEZsYWdzICovXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NjcmlwdEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzk2LDEwICszOTYsMTkgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJl
Rm9yRXhlY3V0aQogICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCiAgICAgICAg
IGNvZGVCbG9jay0+dmFsaWRhdGUoKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQot
ICAgICAgICBzZXR1cExMSW50KGNvZGVCbG9jayk7Ci0gICAgZWxzZQotICAgICAgICBzZXR1cEpJ
VCh2bSwgY29kZUJsb2NrKTsKKyAgICBib29sIGluc3RhbGxlZFVubGlua2VkQmFzZWxpbmVDb2Rl
ID0gZmFsc2U7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklUQ29k
ZT4gYmFzZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5r
ZWRCYXNlbGluZUNvZGUpIHsKKyAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJh
c2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgaW5zdGFs
bGVkVW5saW5rZWRCYXNlbGluZUNvZGUgPSB0cnVlOworICAgIH0KKyNlbmRpZgorICAgIGlmICgh
aW5zdGFsbGVkVW5saW5rZWRCYXNlbGluZUNvZGUpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVz
ZUxMSW50KCkpCisgICAgICAgICAgICBzZXR1cExMSW50KGNvZGVCbG9jayk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHNldHVwSklUKHZtLCBjb2RlQmxvY2spOworICAgIH0KIAogICAgIGlu
c3RhbGxDb2RlKHZtLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+Y29kZVR5cGUoKSwgY29kZUJsb2Nr
LT5zcGVjaWFsaXphdGlvbktpbmQoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1p
emVBZnRlcldhcm1VcCgpCiAgICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGll
cnNVcFRvQkJRKCkpCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNo
b2xkRm9yQkJRT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVw
KCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6
dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAg
ICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVy
V2FybVVwKCkpOwogICAgIH0KIAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9s
ZFJlYWNoZWQoKQpAQCAtNjUsOSArNjUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZVNv
b24oKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgp
KQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9w
dGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRp
b25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZVNvb24oKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNv
b24oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhy
ZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAogICAgIHN0cnVjdCBPU1JFbnRy
eURhdGEgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVw
Q291bnQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGllclVwQ291bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIFRpZXJVcENvdW50OjpUaWVyVXBDb3Vu
dCgpCiB7Ci0gICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGlt
aXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiB9CiAKIFRpZXJVcENvdW50
Ojp+VGllclVwQ291bnQoKSA9IGRlZmF1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtVGllclVwQ291bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTcz
LDcgKzczLDcgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCh1aW50MzJf
dCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVy
Ym9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBhZnRlciB3YXJtLXVw
LiIpOwotICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0
aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9w
dGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAg
ICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCkBAIC05MCwxNCAr
OTAsMTQgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbih1aW50MzJf
dCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVy
Ym9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBuZXh0IGludm9jYXRp
b24uIik7Ci0gICAgICAgIHNldE5ld1RocmVzaG9sZCgwLCBudWxscHRyKTsKKyAgICAgICAgc2V0
TmV3VGhyZXNob2xkKDApOwogICAgIH0KIAogICAgIHZvaWQgb3B0aW1pemVTb29uKHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJi
b3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIHNvb24uIik7CiAgICAg
ICAgIC8vIEZJWE1FOiBOZWVkIGFkanVzdG1lbnQgb25jZSB3ZSBnZXQgbW9yZSBpbmZvcm1hdGlv
biBhYm91dCB3YXNtIGZ1bmN0aW9ucy4KLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9
CiAKICAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJl
c3VsdCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCklu
ZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRp
QGFwcGxlLmNvbT4KKworICAgICAgICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvQmFnLmg6CisgICAgICAgICogd3RmL1BhY2tl
ZC5oOgorICAgICAgICAoV1RGOjpQYWNrZWRBbGlnbmVkUHRyOjpvcGVyYXRvciogY29uc3QpOgor
CiAyMDIxLTA5LTI0ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgdHlwZWNoZWNraW5nIGBpc2Agb3ZlcmxvYWRzIGZvciBgc3RkOjp1bmlxdWVfcHRyYCwg
YFdURjo6VW5pcXVlUmVmYCwgYW5kIGBXVEY6OldlYWtQdHJgCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2
LDIwIEBAIHB1YmxpYzoKICAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEJhZyYgb3BlcmF0b3I9KEJhZzxULCBVPiYm
IG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHVud3JhcHBlZEhlYWQoKSA9PSBvdGhlci51bndy
YXBwZWRIZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAgQmFnIGRl
c3Ryb3k7CisgICAgICAgIGRlc3Ryb3kubV9oZWFkID0gdW53cmFwcGVkSGVhZCgpOworICAgICAg
ICBtX2hlYWQgPSBvdGhlci51bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG90aGVyLm1faGVhZCA9
IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIH5CYWcoKQog
ICAgIHsKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCShyZXZpc2lvbiAyODMwNTMpCisr
KyBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4Niwx
MCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
IGdldCgpOyB9Ci0gICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSA9IFQ+CisgICAgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8IXN0ZDo6aXNfdm9pZF92PFU+LCBVJj46OnR5cGUgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gKmdldCgpOyB9CisKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFnZXQo
KTsgfQogCiAgICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBj
b252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgo=
</data>
<flag name="commit-queue"
          id="462808"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439206</attachid>
            <date>2021-09-24 16:22:44 -0700</date>
            <delta_ts>2021-09-24 16:37:19 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>647196</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzOCBA
QAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhZGRzIGFuICJ1bmxpbmtlZCIgYmFzZWxpbmUgSklUIHRvIEpTVkFMVUU2
NCBwbGF0Zm9ybXMuIFRoZSBKSVQKKyAgICAgICAgY29kZSBwcm9kdWNlZCBieSB0aGlzIGJhc2Vs
aW5lIEpJVCBjYW4gYmUgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3MgdGhhdAorICAgICAg
ICBzaGFyZSBhbiBVbmxpbmtlZENvZGVCbG9jay4gVGhlIGJlbmVmaXQgb2YgdGhpcyBpcywgaWYg
d2UncmUgY3JlYXRpbmcgYSBDb2RlQmxvY2sKKyAgICAgICAgZnJvbSBhbiBVbmxpbmtlZENvZGVC
bG9jayB0aGF0IGFscmVhZHkgY29tcGlsZWQgYW4gdW5saW5rZWQgYmFzZWxpbmUgSklUCisgICAg
ICAgIGluc3RhbmNlLCB0aGlzIG5ldyBDb2RlQmxvY2sganVzdCBzdGFydHMgb2ZmIGV4ZWN1dGlu
ZyBpbiB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgICJmb3IgZnJlZSIuCisgICAgICAgIAorICAg
ICAgICBUbyBtYWtlIHRoaXMgd29yaywgdGhlIGNvZGUgd2UgZW1pdCBub3cgbmVlZHMgdG8gYmUg
aW5kZXBlbmRlbnQgb2YgYSBzcGVjaWZpYworICAgICAgICBDb2RlQmxvY2sgaW5zdGFuY2UuIFdl
IHVzZSBhIENvZGVCbG9jayBpbnN0YW5jZSBmb3IgbWluaW1hbCBwcm9maWxpbmcgaW5mb3JtYXRp
b24KKyAgICAgICAgd2hlbiBjb21waWxpbmcsIGJ1dCBvdGhlcndpc2UsIHRoZSBjb2RlIGlzIHRp
ZWQgdG8gdGhlIFVubGlua2VkQ29kZUJsb2NrLiBXaGVuCisgICAgICAgIHdlIG5lZWQgQ29kZUJs
b2NrIHNwZWNpZmljIGluZm9ybWF0aW9uLCB3ZSBsb2FkIGl0LiBUaGlzIHVzdWFsbHkgbWVhbnMg
dGhpbmdzCisgICAgICAgIGxpa2Ugd2UnbGwgbG9hZCB0aGluZ3MgZnJvbSB0aGUgTWV0YWRhdGEg
ZHluYW1pY2FsbHkuIFRoaXMgcGF0Y2ggYWxzbyBhZGRzIGEKKyAgICAgICAgImxpbmtlZCBjb25z
dGFudCBwb29sIiBjb25jZXB0LCBhbmQgYW55dGltZSB3ZSBpbnN0YW50aWF0ZSBzdWNoIGEgQ29k
ZUJsb2NrLAorICAgICAgICB3ZSBhbHNvIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcyAibGlua2Vk
IGNvbnN0YW50IHBvb2wiLiBUaGlzIGNvbnRhaW5zIHRoaW5ncworICAgICAgICBsaWtlIG91ciBp
bmxpbmUgY2FjaGUgZGF0YSBzdHJ1Y3R1cmVzIChTdHJ1Y3R1cmVTdHViSW5mbyopLCBKU0dsb2Jh
bE9iamVjdCosCisgICAgICAgIGV0Yy4KKyAgICAgICAgCisgICAgICAgIFVubGlua2VkIGJhc2Vs
aW5lIEpJVCBhbHdheXMgcnVucyBJQ3MgaW4gdGhlICJkYXRhIiBtb2RlLiBUbyBtYWtlIHRoaXMg
d29yaywgSQorICAgICAgICBtYWRlIGRhdGEgSUNzIHdvcmsgb24geDg2XzY0LiBUbyBkbyB0aGlz
LCB3ZSBubyBsb25nZXIgY2FsbC9yZXQgdG8gdGhlIElDLgorICAgICAgICBJbnN0ZWFkLCB3ZSBq
dW1wIHRvIHRoZSBJQywgYW5kIHRoZSBJQyBqdW1wcyBiYWNrIGJ5IGxvYWRpbmcgdGhlICJkb25l
IiBsb2NhdGlvbgorICAgICAgICBmcm9tIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBkeW5hbWljYWxs
eS4gVGhpcyBzaW1wbGlmaWVzIHRoZSBkZXNpZ24gdG8gbm90IGJlCisgICAgICAgIGJhc2VkIG9u
IHRoZSBhcm02NCBjYWxsaW5nIGNvbnZlbnRpb24sIGFuZCBrZWVwcyB0aGUgc2FtZSBwZXJmb3Jt
YW5jZSBjaGFyYWN0ZXJpc3RpY3MuIAorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNv
IGFkZHMgYSBuZXcgdmVyc2lvbiBvZiBJbmxpbmVBY2Nlc3MgdGhhdCBpcyBvbmx5IHVzZWQgaW4g
YmFzZWxpbmUKKyAgICAgICAgSklUIChmb3Igbm93KS4gSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIG1h
a2UgdGhlIERGRy9GVEwgYWxzbyB1c2UgdGhpcyBmb3IgRGF0YQorICAgICAgICBJQ3MuIEJ1dCB3
ZSBkb24ndCBuZWVkIHRvIGRvIHRoYXQgeWV0IHNpbmNlIHRob3NlIHRpZXJzIGRvbid0IHVzZSBk
YXRhIElDcyBieQorICAgICAgICBkZWZhdWx0LiBUaGUgYmFzZWxpbmUgSklUIG5vdyBoYXMgYSBw
dXJlIGRhdGEgSUMgYXBwcm9hY2ggdG8gSW5saW5lQWNjZXNzLiBTbworICAgICAgICBpbnN0ZWFk
IG9mIHJlcGF0Y2hpbmcgY29kZSwgd2UgcmVwYXRjaCBmaWVsZHMgd2UgbG9hZCBkeW5hbWljYWxs
eS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgYSBmZXcgdGhp
bmdzIGluIE9TUiBleGl0LCB3aGVyZSBib3RoIERGRy9GVEwgd2VyZQorICAgICAgICBzdG9yaW5n
IGNhbGxlZSBzYXZlcyB0byB0aGUgY2FsbGVlIHNhdmVzIGJ1ZmZlciBpbiBhIHdlaXJkIHBsYWNl
LCBhbmQgc2VwYXJhdGUKKyAgICAgICAgZnJvbSBvbmUgYW5vdGhlci4gSSBub3RpY2VkIHRoaXMg
Y29kZSBjYW4gYmUgc2ltcGxpZmllZCBpZiB3ZSBqdXN0IHN0b3JlCisgICAgICAgIGNhbGxlZSBz
YXZlcyBhdCB0aGUgZW5kIG9mIHRoZSBPU1IgZXhpdCBoYW5kbGVyLCBhbmQgZnJvbSBjb21tb24g
SklUIGVtaXNzaW9uCisgICAgICAgIGNvZGUuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNo
IGFsc28gZml4ZXMgYSBidWcgd2hlcmUgd2UgY291bGQgZW5kIHVwIHdpdGggdGhlIHdyb25nIChh
bmQgYWx3YXlzCisgICAgICAgIG1vcmUgbmVnYXRpdmUpIFNQIGluIHRoZSBiYXNlbGluZSBKSVQu
IFRoaXMgY291bGQgaGFwcGVuIHdoZW4gd2UgT1NSIGV4aXQKKyAgICAgICAgZnJvbSBhbiBpbmxp
bmVkIGdldHRlci9zZXR0ZXIuIFRoZSBPU1IgZXhpdCBjb2RlIHB1dHMgdGhlIHJldHVybiBQQyB3
aGVuCisgICAgICAgIHJldHVybmluZyB0byB0aGUgY2FsbCBzaXRlIG9mIHRoZSBnZXR0ZXIvc2V0
dGVyIHRvIGJlIHRoZSBpbmxpbmUgY2FjaGUncworICAgICAgICAiZG9uZSBsb2NhdGlvbiIuIEhv
d2V2ZXIsIHRoaXMgImRvbmUgbG9jYXRpb24iIGRpZG4ndCB1c2VkIHRvIHJlc3RvcmUgU1AuCisg
ICAgICAgIFRoaXMgcGF0Y2ggY29uc2VydmF0aXZlbHkgbWFrZXMgaXQgc28gdGhhdCB3ZSByZXN0
b3JlIHRoZSBTUCBhdCB0aGVzZSBzaXRlcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbWVh
c3VyZWQgYXMgYSAxJSBzcGVlZHVwIG9uIFNwZWVkb21ldGVyMi4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlT3Bl
cmFuZHNGb3JDaGVja3BvaW50Lmg6CisgICAgICAgIChKU0M6OnZhbHVlUHJvZmlsZU9mZnNldEZv
cik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjplbWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RmFz
dFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKToKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgpOgorICAgICAgICAo
SlNDOjpDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMpOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNsb3dT
dHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjphZGRyZXNzT2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZSk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6ZnJhbWVSZWdpc3RlckNvdW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiaW5hcnlB
cml0aFByb2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5hcnlBcml0aFBy
b2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluZFBDKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpqaXRTb29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRO
ZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRBZGRJQyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUTXVsSUMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVFN1YklDKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRKSVROZWdJQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6aml0QWZ0ZXJXYXJtVXApOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29u
c3RhbnRQb29sKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFzZWxpbmVKSVRDb25zdGFudFBvb2wpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpkb250SklUQW55dGltZVNvb24pOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duQ2VsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6YWRkTWF0aElDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzZXRKSVRDb2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRD
b2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzd2l0Y2hKdW1wVGFi
bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJh
c2VsaW5lU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNlbGlu
ZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZGZnU3dp
dGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdTdHJpbmdTd2l0Y2hK
dW1wVGFibGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uu
aDoKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjpzZXRUaHJlc2hvbGQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0
aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJ
ZE1ldGFkYXRhLmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0
aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpHZXRCeUlkTW9kZU1ldGFk
YXRhOjpvZmZzZXRPZk1vZGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcDoK
KyAgICAgICAgKEpTQzo6R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0
U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEdl
dHRlcik6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6
OkluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToK
KyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5s
aW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UpOgorICAgICAgICAoSlND
OjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChK
U0M6OklubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OklubGlu
ZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyk6CisgICAgICAgIChKU0M6OklubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2Vzcyk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmg6
CisgICAgICAgICogYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmg6CisgICAgICAgIChK
U0M6Okl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMpOgorICAgICAgICAq
IGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6CisgICAgICAgIChKU0M6OkxMSW50Q2FsbExp
bmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSk6CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2Rl
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAo
SlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OmNhbGN1bGF0ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0
aW9uSGFuZGxpbmcpOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNl
cnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMpOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgICogYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0
YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5jcHA6CisgICAgICAg
IChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OmluaXRHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0UHV0QnlJZFJlcGxhY2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5p
dEluQnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNz
Q2FzZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZE
b25lTG9jYXRpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHA6CisgICAg
ICAgIChKU0M6OnByaW50U3VwZXJTYW1wbGVyU3RhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0lk
ZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dGhyZXNob2xkRm9y
SklUKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJv
ZmlsZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6Omluc3RydWN0aW9uQXQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmJpbmFyeUFyaXRoUHJvZmlsZSk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp1bmFyeUFyaXRoUHJvZmlsZSk6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpsbGludEV4ZWN1dGVDb3VudGVyKToKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaDoKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRNZXRhZGF0YVRhYmxlOjpvZmZzZXRJbk1ldGFkYXRhVGFibGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNl
OjpWYWx1ZVByb2ZpbGVCYXNlKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQmFzZTo6Y2xl
YXJCdWNrZXRzKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVj
a2V0KToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb2RlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAqIGRmZy9E
RkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxpbmsp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJl
cGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmhhbmRsZUV4aXRDb3VudHMp
OgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRK
dW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRQcml2YXRlTmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVWYWx1ZVN1Yik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dTaGFkb3dDaGlja2VuVGFpbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExKSVRDb2Rl
Lmg6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Omxpbmsp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjphZGRNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlVW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpjb21waWxlQmluYXJ5TWF0aElDKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVB1dFByaXZhdGVOYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAg
ICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29t
cGlsZVN0dWIpOgorICAgICAgICAqIGdlbmVyYXRvci9NZXRhZGF0YS5yYjoKKyAgICAgICAgKiBq
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpz
dG9yZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVh
bENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMu
aDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6CisgICAgICAgICogaml0L0Jhc2VsaW5lSklUQ29kZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKToKKyAg
ICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZGRKSVRNdWxJQyk6CisgICAgICAgIChKU0M6Ok1h
dGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMpOgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFk
ZEpJVE5lZ0lDKToKKyAgICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MpOgor
ICAgICAgICAoSlNDOjpCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAg
IChKU0M6OkJhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAgICogaml0
L0Jhc2VsaW5lSklUQ29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SklUQ29uc3RhbnRQb29s
OjphZGQpOgorICAgICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OnNpemUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OmF0IGNvbnN0KToKKyAgICAgICAgKiBqaXQvQmFz
ZWxpbmVKSVRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6QmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6
ZSk6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkNDYWxs
SGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKToKKyAgICAgICAgKEpTQzo6
Q0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldCk6CisgICAgICAgICogaml0
L0NDYWxsSGVscGVycy5oOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHA6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oOgorICAgICAgICAq
IGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpDYWxsRnJhbWVTaHVmZmxlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpwcmVwYXJlRm9yVGFpbENhbGwpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5o
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c25hcHNob3QgY29uc3QpOgorICAg
ICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OkpJVCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRWYXJS
ZWFkT25seUNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc2V0U1ApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5k
Q29uc3RhbnRQb29sUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpm
aW5hbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcik6CisgICAgICAgIChK
U0M6OkpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKToKKyAgICAgICAgKiBqaXQvSklULmg6Cisg
ICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVnYXRlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2FkZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tdWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3ViKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2Fs
bEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2l0ZXJhdG9yX25leHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX25leHQpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxl
U2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dD
YXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpT
Qzo6SklUQ29kZTo6dXNlRGF0YUlDKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6cGNUb0NvZGVP
cmlnaW5NYXApOgorICAgICAgICAqIGppdC9KSVRDb21waWxhdGlvbktleS5jcHA6CisgICAgICAg
IChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklU
Q29tcGlsYXRpb25LZXkuaDoKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OkpJVENv
bXBpbGF0aW9uS2V5KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJhdG9y
ISBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpvcGVy
YXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Omhhc2ggY29u
c3QpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6cHJvZmlsZWRCbG9jayBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXpl
KToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJ
VEdldEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUdldEJ5SWRJbmxpbmVB
Y2Nlc3MpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJ
VFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkpJVERlbEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklURGVsQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAg
IChKU0M6OkpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAo
SlNDOjpKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpKSVRHZXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXRoKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0
YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudEludCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6aXNLbm93bkNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdldENv
bnN0YW50T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6
bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmFkdmFuY2VUb05l
eHRDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdExvYWREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkpJVDo6anVtcFRhcmdldCk6CisgICAgICAgIChKU0M6OkpJVDo6
bG9hZFB0ckZyb21NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZDMyRnJvbU1ldGFk
YXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkOEZyb21NZXRhZGF0YSk6CisgICAgICAgIChK
U0M6OkpJVDo6c3RvcmU4VG9NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6c3RvcmUzMlRv
TWV0YWRhdGEpOgorICAgICAgICAoSlNDOjpKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
SklUOjpsb2FkR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29kZUJsb2Nr
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEdldFB1dEluZm8pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZSk6IERlbGV0ZWQuCisgICAg
ICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9u
dWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzVHJ1dGh5
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dp
dGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVj
a190cmFwcyk6CisgICAgICAgIChKU0M6OkpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5l
d0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYXJndW1lbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9v
Zik6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdHlwZW9mX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SklUX09QRVJBVElPTik6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBqaXQvSklUUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmtleSk6CisgICAgICAg
ICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6c2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9k
ZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
aW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQcml2YXRlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SGFzUHJpdmF0ZVNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19w
cml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRl
X2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmspOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29w
ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKToKKyAgICAg
ICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF90
b19zY29wZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1
cmVWYXIpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9wcml2YXRlX2Jy
YW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9pbnRl
cm5hbF9maWVsZCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUdldEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeSk6CisgICAgICAgIChK
U0M6OnRyeUNhY2hlSW5CeSk6CisgICAgICAgIChKU0M6OnVubGlua0NhbGwpOgorICAgICAgICAq
IGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpoYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxl
RXhjZXB0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6Cisg
ICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6
aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRf
U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayk6CisgICAgICAgICogcnVudGltZS9DYWNoZWRU
eXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtQmluYXJ5QXJpdGhQ
cm9maWxlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtVW5hcnlB
cml0aFByb2ZpbGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9j
a1R5cGU+OjplbmNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoK
KyAgICAgICAgKEpTQzo6dXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKToKKyAgICAg
ICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlv
bnMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1l
L1NjcmlwdEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpw
cmVwYXJlRm9yRXhlY3V0aW9uSW1wbCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRUaWVyVXBD
b3VudGVyLmg6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6b3B0aW1p
emVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6
b3B0aW1pemVTb29uKToKKyAgICAgICAgKiB3YXNtL1dhc21UaWVyVXBDb3VudC5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50OjpUaWVyVXBDb3VudCk6CisgICAgICAgICogd2Fz
bS9XYXNtVGllclVwQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6Om9w
dGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6b3B0
aW1pemVOZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50Ojpv
cHRpbWl6ZVNvb24pOgorCiAyMDIxLTA5LTIzICBQaGlsaXAgQ2hpbWVudG8gIDxwY2hpbWVudG9A
aWdhbGlhLmNvbT4KIAogICAgICAgICBWYXJpb3VzIHR3ZWFrcyBpbiBwcmVwYXJhdGlvbiBmb3Ig
VGVtcG9yYWwuSW5zdGFudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC02MTEsNiArNjExLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCiAgICAgYnVp
bHRpbnMvQnVpbHRpblV0aWxzLmgKIAorICAgIGJ5dGVjb2RlL0FyaXRoUHJvZmlsZS5oCiAgICAg
Ynl0ZWNvZGUvQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvQXJyYXlQcm9m
aWxlLmgKICAgICBieXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25zLmgKQEAgLTgzNyw2ICs4Mzgs
NyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAKICAgICBqaXQv
QXNzZW1ibHlIZWxwZXJzLmgKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaAorICAg
IGppdC9CYXNlbGluZUpJVENvZGUuaAogICAgIGppdC9DQ2FsbEhlbHBlcnMuaAogICAgIGppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmgKICAgICBqaXQvRXhlY3V0YWJsZU1lbW9yeUhhbmRsZS5oCkBA
IC04NzUsNiArODc3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QQogICAgIHBhcnNlci9QYXJzZXJFcnJvci5oCiAgICAgcGFyc2VyL1BhcnNlck1vZGVzLmgKICAg
ICBwYXJzZXIvUGFyc2VyVG9rZW5zLmgKKyAgICBwYXJzZXIvUmVzdWx0VHlwZS5oCiAgICAgcGFy
c2VyL1NvdXJjZUNvZGUuaAogICAgIHBhcnNlci9Tb3VyY2VQcm92aWRlci5oCiAgICAgcGFyc2Vy
L1NvdXJjZVByb3ZpZGVyQ2FjaGUuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC02MTksNiArNjE5LDcgQEAgaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tl
bi5jcHAKIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKIAogaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAKK2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCiBqaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAog
aml0L0JpbmFyeVN3aXRjaC5jcHAKIGppdC9DQ2FsbEhlbHBlcnMuY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTkwMCw2ICs5MDAsNyBAQAogCQk1MkNEMEY1RDIyNDJGNTY5MDA0QTE4QTUgLyog
Rm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFt
ZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0MkY1NjkwMDRBMThBNSAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNEMEY2NzIyNDJGNzFD
MDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87IH07CisJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkVF
RDc5NDI0OTJCODcwMDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRUVENzkzMjQ5MkI4NjgwMDhGNEM5
MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovOyB9OwogCQk1MkY2QzM1RTFFNzFFQjA4MDA4MUY0
Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyB9OwogCQk1MzBBNjZCOTFGQTNFNzhCMDAyNkE1
NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCMTFGQTNFNzdBMDAyNkE1NDUgLyogVW5pZmllZFNvdXJj
ZTMtbW0ubW0gKi87IH07CkBAIC0xMjIwLDcgKzEyMjEsNyBAQAogCQk3OTg3MkM0ODIyMUJCQUYz
MDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODcyQzQ3MjIxQkJBRUQwMDhDNjk2OSAvKiBKU0Jhc2VJbnRl
cm5hbC5oICovOyB9OwogCQk3OTlFRjdDNDFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2lu
TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTlF
RjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4
ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3OUEyMjgzNjFE
MzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQ
cm9maWxlLmggKi87IH07CisJCTc5QTIyODM2MUQzNUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFByb2Zp
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTIy
ODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUFCQjE3RTFFNUNDQjU3MDA0NUI5QTYg
LyogQWlyRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUFCQjE3QzFFNUNDQjU3MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQzMw
RkYxRjk5NTM2NDAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBQzMwRkUxRjk5
NTM2MzAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oICovOyB9Owog
CQk3OUFGMEJFNDFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFGMEJFMzFEM0VG
RDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM2NzQsNiArMzY3NSw4IEBACiAJCTUy
Q0QwRjY0MjI0MkY1NjkwMDRBMThBNSAvKiB0ZXN0ZGZnICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBp
bmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0ZGZnOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwogCQk1MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0ZGZnLmNwcDsgcGF0aCA9
IGRmZy90ZXN0ZGZnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJEMTMwOEYy
MjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgcGF0aCA9IGZvby5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJERDAwMDYy
NkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNl
bGluZUpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJERDAwMDcyNkUw
MzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBC
YXNlbGluZUpJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkVFRDc5
MjI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzYsNiArNjI3OSw4IEBACiAJCQkJ
NkI3NjdFN0EyNjc5MUYyNzAwMTdGOEQxIC8qIEFzc2VtYmx5SGVscGVyc1Nwb29sZXJzLmggKi8s
CiAJCQkJNzIzOTk4RjYyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5jcHAgKi8s
CiAJCQkJNzIzOTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5oICovLAor
CQkJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovLAor
CQkJCTUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLywKIAkJ
CQkwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNwcCAqLywKIAkJCQkw
RjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi8sCiAJCQkJNjVCODM5
MkQxQkFDQTlEMzAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmNwcCAqLywKQEAgLTk3MzAsNiAr
OTczNSw3IEBACiAJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1OTUwIC8qIERGR0Zsb3dNYXAuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVk
QXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdG
bHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJERDAwMDgyNkUwMzlCOTAwNTRFNDA4
IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTUxQUIzRDhC
RTAwQkJCOEU4IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY5Q0M4
OTE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzODZGRDdFMjZFODY3QjgwMEU0QzI4QiAvKiBUZW1wb3JhbFBsYWluVGltZS5oIGluIEhlYWRl
cnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxNSArMjAyLDE1IEBAIFJl
ZlB0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9tU3RydWMKICAgICBzd2l0Y2ggKHN0dWJJ
bmZvLmNhY2hlVHlwZSgpKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAg
ICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgTG9hZCwg
aWRlbnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBQcm94eWFibGVBY2Nl
c3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBMb2FkLCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlk
U2VsZk9mZnNldCwgc3R1YkluZm8uaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAg
ICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgogICAgICAgICBSRUxFQVNFX0FTU0VS
VChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICByZXR1cm4gQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmllciwgc3R1YkluZm8udS5i
eUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQo
KSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBSZXBsYWNl
LCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8uaW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7
Ci0gICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBJbkhpdCwgaWRl
bnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIG93bmVyLCBJbkhpdCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uaGFz
Q29uc3RhbnRJZGVudGlmaWVyKTsKQEAgLTE5ODUsMTQgKzE5ODUsMTAgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAvLyBTdHVmZiBmb3IgY3VzdG9t
IGdldHRlcnMvc2V0dGVycy4KICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNh
bGw7CiAKKwogICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNhbGN1bGF0
aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAgICAgICAvLyBleGNlcHRpb24gaGFu
ZGxpbmcgY2FsbCBzaXRlLgotICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkKLSAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdpc3Rl
cnM6OmxyKTsKLSNlbmRpZgotICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3Rh
dGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
KGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9T
dGFja0ZvckNhbGwoKTsKIAogICAgICAgICBhdXRvIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0
YWNrRm9yQ2FsbCA9IFsmXShBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUmIHNwaWxs
U3RhdGUsIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlKSB7CiAgICAgICAgICAgICBSZWdpc3RlclNl
dCBkb250UmVzdG9yZTsKQEAgLTIwNzksOCArMjA3NSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIEFTU0VSVCghKG51bWJlck9mUmVnc0Zv
ckNhbGwgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSk7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVn
aXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwogCi0gICAgICAgICAgICB1bnNpZ25l
ZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQotICAgICAgICAgICAgV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwp
OworICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0gV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRl
c0ZvckNhbGwpOwogCiAgICAgICAgICAgICBqaXQuc3ViUHRyKAogICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCkBA
IC0yMTM4LDYgKzIxMzMsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NH
ZW5lCiAKICAgICAgICAgICAgIGludCBzdGFja1BvaW50ZXJPZmZzZXQgPSAoY29kZUJsb2NrLT5z
dGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpIC0gc3RhdGUucHJlc2VydmVk
UmV1c2VkUmVnaXN0ZXJTdGF0ZS5udW1iZXJPZkJ5dGVzUHJlc2VydmVkIC0gc3BpbGxTdGF0ZS5u
dW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb247CiAgICAgICAgICAg
ICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKwogICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUgPSBpc0dl
dHRlcigpOwogICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxs
KHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7CiAKQEAgLTIyNjQsMTIgKzIyNjAsNyBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAKICAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJn
ZXRPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgICAgICBSZWdpc3RlclNldCBleHRy
YVJlZ2lzdGVyc1RvUHJlc2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAgaWYgKGNv
ZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1By
ZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCi0gICAgICAgICAgICBhdXRv
IHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdp
dGhvdXRFeGNlcHRpb25zKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAgICAgICBh
dXRvIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2Fs
bFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+KENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cigmdm0pLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGppdC5wcmVwYXJlQ2Fs
bE9wZXJhdGlvbih2bSk7CkBAIC0yMzY0LDEwICsyMzU1LDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmUuc2V0KGJhc2VHUFIpOwogICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZS5zZXQodmFsdWVSZWdzKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgICAgICAgICAgICAgaWYg
KGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0
ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgogICAgICAgICAg
ICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3Rh
dGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3RlcnNUb1By
ZXNlcnZlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBAIG9wX2dyb3Vw
IDpQcm9maWxlZEJpbmFyeU9wLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRUeXBlcywK
ICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJp
dGhQcm9maWxlCisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAg
ICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTMsNyArMzUzLDcg
QEAgb3BfZ3JvdXAgOlVuYXJ5SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgICAgIHNyY0RzdDogVmly
dHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9m
aWxlOiBVbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQ
cm9maWxlLioKICAgICB9CiAKIG9wIDp0b19vYmplY3QsCkBAIC0zODYsNyArMzg2LDcgQEAgb3Ag
Om5lZ2F0ZSwKICAgICAgICAgcmVzdWx0VHlwZTogUmVzdWx0VHlwZSwKICAgICB9LAogICAgIG1l
dGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUsCisgICAg
ICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3AgOm5vdCwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9y
Q2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9p
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjggQEAgVmFsdWVQcm9maWxlKiB2YWx1
ZVByb2ZpbGVGb3JJbXBsKEJ5dGVjbwogICAgICAgICByZXR1cm4gJm1ldGFkYXRhLm1fcHJvZmls
ZTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgordWludHB0cl90IHZhbHVlUHJv
ZmlsZU9mZnNldEZvcih1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCit7CisgICAgVU5VU0VEX1BB
UkFNKGNoZWNrcG9pbnRJbmRleCk7CisgICAgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2Rl
SUQgPT0gb3BfaXRlcmF0b3Jfb3BlbikgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRl
eCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1cm4gQnl0
ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOworICAgICAgICBjYXNl
IE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZk5leHRQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKEJ5dGVjb2Rl
OjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2tw
b2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0OiBy
ZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRSZXN1bHRQcm9maWxlKCk7Cisg
ICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJldHVybiBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mRG9uZVByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4
dDo6Z2V0VmFsdWU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mVmFsdWVQcm9m
aWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mUHJvZmlsZSgpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZU1ldGFk
YXRhPgogYm9vbCBoYXNWYWx1ZVByb2ZpbGVGb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEs
IHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDExICsxMTQsNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2
bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7CiB9CiAKLUNvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCi17Ci0g
ICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPihtX2Zh
c3RQYXRoU3RhcnQpOwotfQotCiBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBD
YWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0Rh
dGFJQygpKTsKQEAgLTIyNSw2ICsyMjAsMTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldE1heEFy
Z3VtZW50Q291bnRJbgogICAgIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSB2YWx1
ZTsKIH0KIAorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZv
OjpmYXN0UGF0aFN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVjdCgpICYmIGlz
VGFpbENhbGwoKSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVy
bmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQpOworfQorCiB2b2lkIENhbGxMaW5r
SW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRvIGhhbmRsZVNwZWNpZmljQ2FsbGVl
ID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKQEAgLTI5OCwyMyArMjk5LDExIEBAIHZvaWQg
Q2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGMKICAgICBtX2ZyYW1lU2h1ZmZsZURh
dGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewotICAgIHNldFVzZXNEYXRhSUNzKHVz
ZURhdGFJQyk7Ci0gICAgaWYgKGlzRGF0YUlDKCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsK
LSAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7Ci0g
ICAgfQotCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQ
YXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBh
dGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRo
OwogCi0gICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICBpZiAodXNlRGF0YUlDID09IFVzZURhdGFJ
Qzo6WWVzKSB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hSZWdpc3Rl
cigpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJ
bmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7IAogICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKQEAgLTMyMyw3ICszMTIsNyBAQCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAgICAgICBnb1BvbHltb3JwaGlj
ID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5bW9ycGhpY0NhbGxlZU1hc2spKTsKICAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc1Rh
aWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBh
cmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgZ29Qb2x5bW9ycGhpYy5saW5rKCZqaXQpOyAv
LyBQb2x5bW9ycGhpYyBzdHViIGhhbmRsZXMgdGFpbCBjYWxsIHN0YWNrIHByZXAuCiAgICAgICAg
ICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBv
ZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKQEAg
LTMzNiwxNCArMzI1LDE2IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmUKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2goQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG51bGxwdHIpKSk7CiAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNh
bGw7Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwp
IHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgY2FsbCA9
IGppdC5uZWFyVGFpbENhbGwoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsK
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAgICAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbGVlQ2hlY2spOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2Nh
bGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2NhbGxlZUxv
Y2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNo
ZWNrKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNTMsMTMgKzM0NCwzNCBAQCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgbnVsbHB0
cik7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKworICAgIGlmIChpc0RhdGFJQygp
KSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6Oklu
dmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJ
bmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywg
aXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENh
bGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVG
b3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwotICAgIHJl
dHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVz
ZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKKyAgICBzZXRVc2VzRGF0YUlD
cyhVc2VEYXRhSUM6Ok5vKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQs
IGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgVXNlRGF0YUlDOjpObywgaXNUYWlsQ2FsbCgpLCBX
VEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0
RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQ
YXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKIH0KIAogdm9pZCBD
YWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0KQpAQCAt
MzY5LDE3ICszODEsMzIgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0s
IAogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zm
c2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKK3Zv
aWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmIGpp
dCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBqaXQubW92ZShjYWxsTGlua0luZm9H
UFIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50
cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyhWTSYg
dm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSUmVnIGNh
bGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBtX2NvZGVPcmlnaW4gPSBD
b2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIHNldFVw
Q2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2FsbGVlR1BSKTsKKyAgICBtX2Rv
bmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBpZiAo
dW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkgeworICAgICAgICAvLyBGSVhN
RTogSXQnZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBzdHJ1Y3R1cmUu
CisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZs
ZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsKKyAgICB9Cisg
ICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlDLm1fY2FsbExp
bmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdn
ZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERp
cmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFp
c1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CiAKLSAg
ICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsK
LSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1p
dERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwo
KTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQp
OwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwgdGhpcyBpcyBh
IGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JU
YWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZhc3RQYXRo
KENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAg
ICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBzdGF0aWMgdm9p
ZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wgaXNEYXRh
SUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9
PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoKICAgICAgICAg
bV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsyNDksNiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAotICAgIEpJVFN0
dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zbG93U3R1Yi5n
ZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAgICAgIHJldHVy
biBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsKICAgICB9CiAK
LSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX21heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJfdCBtYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVibGljOgogICAg
IH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBt
X2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlvblR5cGUgewpA
QCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25OZWFy
Q2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxvY2F0aW9uOwog
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9zbG93UGF0
aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
bV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAKQEAgLTQyNCw2
ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaQogICAg
IHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3QgVW5saW5rZWRD
YWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsgLy8gQ3VycmVu
dGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxseSBwcm9kdWNl
IGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOworICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZsZURhdGE7Cit9
OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3OSw4ICsyNzksNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhW
TSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkK
ICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9oYXNCZWVuQ29t
cGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNlKQotICAg
ICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUoZmFsc2UpCiAgICAgLCBtX251bUNhbGxl
ZUxvY2FscyhvdGhlci5tX251bUNhbGxlZUxvY2FscykKICAgICAsIG1fbnVtVmFycyhvdGhlci5t
X251bVZhcnMpCiAgICAgLCBtX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKG90aGVyLm1fbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXApCkBAIC0zMDgsNiArMzA2LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxv
Y2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkp
OwogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKKworICAgIG1f
bGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxpbnRFeGVjdXRlQ291bnRl
cigpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQpAQCAt
MzE4LDcgKzMxOCw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEMK
ICAgICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVw
KCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKIAogICAgIGlmIChvdGhlci5tX3JhcmVEYXRhKSB7
CiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTMzNiw4ICszMzUsNiBA
QCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2RpZEZh
aWxKSVRDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZh
bHNlKQogICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9oYXNM
aW5rZWRPU1JFeGl0KGZhbHNlKQotICAgICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUo
ZmFsc2UpIAogICAgICwgbV9udW1DYWxsZWVMb2NhbHModW5saW5rZWRDb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpKQogICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1WYXJz
KCkpCiAgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQpAQCAtMzU5LDcgKzM1Niw5
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAgIEFTU0VS
VChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9sbGludEV4ZWN1dGVDb3Vu
dGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CisKICAgICB2bS5o
ZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcwLDcgKzM2OSw4IEBAIENv
ZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIC8vIHdlIGNhbid0IGdlbmVy
YXRlIGR1cmluZyB1bmxpbmtlZCBieXRlY29kZSBnZW5lcmF0aW9uLiBUaGlzIHByb2Nlc3MgaXMg
bm90IGFsbG93ZWQgdG8gZ2VuZXJhdGUgY29udHJvbAogLy8gZmxvdyBvciBpbnRyb2R1Y2UgbmV3
IGxvY2Fscy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB3ZSByZWx5IG9uIGxpdmVuZXNzIGFuYWx5
c2lzIHRvIGJlIHRoZSBzYW1lIGZvcgogLy8gYWxsIHRoZSBDb2RlQmxvY2tzIG9mIGFuIFVubGlu
a2VkQ29kZUJsb2NrLiBXZSByZWx5IG9uIHRoaXMgZmFjdCBieSBjYWNoaW5nIHRoZSBsaXZlbmVz
cyBhbmFseXNpcwotLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLgorLy8gaW5zaWRlIFVubGlu
a2VkQ29kZUJsb2NrLiBBbHNvLCBCYXNlbGluZSBKSVQgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiBh
bGwgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jaywKKy8vIHNvIHRoZSBieXRlY29k
ZSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBiZXR3ZWVuIENvZGVCbG9ja3Mgc2hhcmluZyBhbiBVbmxp
bmtlZENvZGVCbG9jay4KIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlu
a2VkQ29kZUJsb2NrLAogICAgIEpTU2NvcGUqIHNjb3BlKQogewpAQCAtNDcxLDYgKzQ3MSwyMSBA
QCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFr
OyBcCiAgICAgfQogCisgICAgdW5zaWduZWQgYmluYXJ5UHJvZmlsZUluZGV4ID0gMDsKKyAgICB1
bnNpZ25lZCB1bmFyeVByb2ZpbGVJbmRleCA9IDA7CisjZGVmaW5lIExJTktfV0lUSF9CSU5BUllf
QVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJ
QUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9
ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJpbmFyeVByb2ZpbGVJbmRleCsr
KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19XSVRIX1VOQVJZX0FS
SVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFM
SVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAm
bV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKHVuYXJ5UHJvZmlsZUluZGV4KyspOyBc
CisgICAgICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
IGluc3RydWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRv
JiBpbnN0cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9w
Y29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMsMTQgKzU0OCwxNCBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BD
cmVhdGVQcm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAg
IExJTksoT3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0g
ICAgICAgIExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElO
SyhPcEluYykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9B
UklUSF9QUk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJ
TEUoT3BNdWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikK
KyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAg
IExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJ
VEhfVU5BUllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FS
SVRIX1BST0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2OSw3
ICs3ODQsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAg
Ly8gcmVseSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1p
dHRlZCB0byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1v
cmUgYWNjdXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0
ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgLy8gSWYgdGhlIGNvbmN1
cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4gY29tcHV0
ZSBpdCBoZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAgLTc5Myw2ICs4MDcsNzggQEAgdm9p
ZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3duZXJFZGdlLnNl
dCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZtLCB0aGlzKSk7
CiB9CiAKKyNpZiBFTkFCTEUoSklUKQordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2Vk
QmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7CisgICAgc2V0SklU
Q29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8mIGpp
dENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAgICAgICAgIEhh
bmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAgaGFuZGxlci5u
YXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQp
KS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9CisgICAgfQor
CisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAg
ICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOworICAgICAg
ICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGppdENvZGUt
Pm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8g
ZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAgICAgIHN3aXRj
aCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6
Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29s
W2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7CisgICAg
ICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvID0g
KnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9hZC5nZXQoKSk7
CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXREYXRhLm1f
Y2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29k
ZUluZGV4KSk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFsaXplRGF0YUlD
KHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVn
VDIpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBjYWxs
TGlua0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKKyAg
ICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZv
ID0gKnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRyeS5wYXlsb2Fk
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBq
aXREYXRhLm1fc3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUsIENvZGVP
cmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAg
c3R1YkluZm8tPmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyh0aGlzLCB1
bmxpbmtlZFN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQ
b29sW2ldID0gc3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsOiB7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpGdW5jdGlvbkV4cHI6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAg
IGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5kZXgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBHbG9iYWxD
b2RlOgorICAgIGNhc2UgTW9kdWxlQ29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgorICAgICAgICBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZ1bmN0aW9uQ29kZToKKyAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0
byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgorICAgICAg
ICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBtX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYmIERGRzo6bWln
aHRJbmxpbmVGdW5jdGlvbih0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYg
KGppdENvZGUtPm1faXNTaGFyZWFibGUgJiYgIXVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5r
ZWRCYXNlbGluZUNvZGUgJiYgT3B0aW9uczo6dXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZygpKQor
ICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlID0gV1RG
TW92ZShqaXRDb2RlKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCiBDb2RlQmxvY2s6On5D
b2RlQmxvY2soKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtODczLDYgKzk1OSwyNyBAQCBD
b2RlQmxvY2s6On5Db2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKK2Jvb2wg
Q29kZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZpcnR1YWxSZWdp
c3RlciByZWcpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBuZWVkcyB0byBjb3JyZXNwb25kIHRvIHdo
YXQgd2UgZG8gaW5zaWRlIHNldENvbnN0YW50UmVnaXN0ZXJzLgorICAgIHN3aXRjaCAodW5saW5r
ZWRDb2RlQmxvY2soKS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKSkgewor
ICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgIGNhc2UgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcjogeworICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gdW5saW5rZWRDb2RlQmxvY2soKS0+Z2V0Q29uc3RhbnQocmVnKTsKKyAgICAgICAg
aWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlmIChjZWxs
LT5pbmhlcml0czxTeW1ib2xUYWJsZT4odm0oKSkgfHwgY2VsbC0+aW5oZXJpdHM8SlNUZW1wbGF0
ZU9iamVjdERlc2NyaXB0b3I+KHZtKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkxpbmtUaW1lQ29uc3RhbnQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
IFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBG
aXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IEZpeGVk
VmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbikKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTg5Miw2ICs5OTksNyBAQCBW
ZWN0b3I8dW5zaWduZWQ+IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSCiAgICAgICAgIHN3aXRjaCAo
cmVwcmVzZW50YXRpb24pIHsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
OkxpbmtUaW1lQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb25zdGFudCA9IGdsb2JhbE9iamVjdC0+
bGlua1RpbWVDb25zdGFudChzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50Pihjb25zdGFudC5h
c0ludDMyQXNBbnlJbnQoKSkpOworICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50LmlzQ2VsbCgp
KTsgLy8gVW5saW5rZWQgQmFzZWxpbmUgSklUIHJlcXVpcmVzIHRoaXMuCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOgogICAg
ICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKQEAgLTE1MTQsNyAr
MTYyMiw3IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJsb2NrOjplbnN1cmVKSVQKICAgICBy
ZXR1cm4gKm1faml0RGF0YTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVK
SVRJbmxpbmVDYWNoZXMoKQordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVz
KCkKIHsKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewogICAgICAg
ICBmb3IgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0lu
Zm9zKQpAQCAtMTUyNSw2ICsxNjMzLDIwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJhc2Vs
aW5lSklUSW5saW4KICAgICAgICAgICAgIHN0dWJJbmZvLT52aXNpdFdlYWtSZWZlcmVuY2VzKGxv
Y2tlciwgdGhpcyk7CiAgICAgICAgIH0KICAgICB9CisKKworI2lmIEFTU0VSVF9FTkFCTEVECisg
ICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICAvLyBW
ZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3JlIHZpcnR1
YWwgY2FsbHMuCisgICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBzdGF0
aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxDYWxsTGlu
a0luZm9zKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7
CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtdIChKU0Nl
bGwqKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgfQorI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTUzNCw0
NiArMTY1NiwxMiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAK
ICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29s
IGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdy
YWRlOwotICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8g
SWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJl
cGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUg
SklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAg
ICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQo
KS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBv
cHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAgICAgICAg
ICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJbnQ6OnNl
dEVudHJ5cG9pbnQodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2Vw
dGlvbkhhbmRsZXJzKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5s
aW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2Vw
dGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFu
ZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtl
ZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIu
aW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2Rl
KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHVubGlu
a0luY29taW5nQ2FsbHMoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8g
Y2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBh
bGwgY29tcGlsZXIgdGhyZWFkcwotICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50
ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNv
ZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlz
IHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9z
LgotICAgICAgICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUg
PSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYKLSAgICAK
ICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAgICAgICAg
IGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYg
KCEhaml0Q29kZSgpKQotICAgICAgICBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7
CisgICAgICAgIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShERkdfSklUKQpAQCAtMTU5NCw3ICsxNjgyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KAogICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
azoKLSAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7Cisg
ICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y291bnQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAg
ICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CkBAIC0xNjc1LDMwICsx
NzYzLDYgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgogICAgIHJl
dHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUsIGNv
ZGVPcmlnaW4pOwogfQogCi1KSVRBZGRJQyogQ29kZUJsb2NrOjphZGRKSVRBZGRJQyhCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2FkZElDcy5h
ZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklUTXVsSUMo
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9t
dWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJ
VFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2Nr
ZXIpLm1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVROZWdJQyogQ29kZUJsb2Nr
OjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0
YShsb2NrZXIpLm1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCiBTdHJ1Y3R1cmVTdHVi
SW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewog
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKQEAgLTMxMzMsNyArMzE5Nyw3
IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lmIEVOQUJM
RShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0dXJuIEpJ
VDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklUOjpmcmFt
ZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzM0OSwxMyArMzQxMywxMyBA
QCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAgc3dpdGNo
IChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1cm4gJnBj
LT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0
dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBj
YXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhp
cykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAgIHJldHVy
biAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAg
ICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwog
ICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERpdj4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKICAgICB9CkBAIC0zMzY3LDExICszNDMxLDExIEBAIFVuYXJ5QXJpdGhQcm9maWxlKiBDb2Rl
QmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAgICAg
Y2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTmVnYXRl
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5jOgotICAg
ICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEZWM+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8
T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzQ3MiwyMiArMzUzNiwxNiBAQCB2b2lkIENvZGVCbG9j
azo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBD
b2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9y
aWdpbk1hcD4mJiBtYXApIAoteyAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7Ci0gICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZN
b3ZlKG1hcCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW5k
UEModm9pZCogcGMpCiB7CisgICAgaWYgKGF1dG8qIHBjVG9Db2RlT3JpZ2luTWFwID0gbV9qaXRD
b2RlLT5wY1RvQ29kZU9yaWdpbk1hcCgpKSB7CisgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENv
ZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBwY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBjKSkKKyAg
ICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAgIH0KKwogICAgIHsKICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBpZiAoYXV0byogaml0RGF0
YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICAgICAgaWYgKGppdERhdGEtPm1fcGNUb0Nv
ZGVPcmlnaW5NYXApIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxDb2RlT3Jp
Z2luPiBjb2RlT3JpZ2luID0gaml0RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBj
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47Ci0gICAgICAgICAgICB9
Ci0KICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDogaml0RGF0
YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnRhaW5z
UEMocGMpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxDb2RlT3Jp
Z2luPihzdHViSW5mby0+Y29kZU9yaWdpbik7CkBAIC0zNTIxLDI4ICszNTc5LDE0IEBAIHN0ZDo6
b3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0ZWNvZGVJ
bmRleDsKIH0KIAotaW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRo
cmVzaG9sZCkKLXsKLSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXpl
KCkpIHsKLSAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICByZXR1cm4g
dGhyZXNob2xkOwotICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1cm4gdGhy
ZXNob2xkICogNDsKLSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1cm4gdGhy
ZXNob2xkIC8gMjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IHRocmVzaG9sZDsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkKK3ZvaWQg
Q29kZUJsb2NrOjpqaXRTb29uKCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3
VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldh
cm1VcCgpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hv
bGQodW5saW5rZWRDb2RlQmxvY2soKS0+dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9s
ZEZvckpJVFNvb24oKSksIHRoaXMpOwogfQogCi12b2lkIENvZGVCbG9jazo6aml0U29vbigpCit2
b2lkIENvZGVCbG9jazo6aml0TmV4dEludm9jYXRpb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRl
Q291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9s
ZEZvckpJVFNvb24oKSksIHRoaXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+c2V0TmV3
VGhyZXNob2xkKDAsIHRoaXMpOwogfQogCiBib29sIENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1U
cmFwQnJlYWtwb2ludHMoKSBjb25zdApAQCAtMzU4OCwyOCArMzYzMiw4IEBAIHZvaWQgQ29kZUJs
b2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRvdWJsZSBudW1TdWJzID0gMC4wOwogICAgIGRv
dWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKLSAgICBhdXRvIGNvdW50SUNzID0gWyZdIChDb2Rl
QmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IGNvZGVCbG9j
ay0+bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKEpJVEFkZElDKiBhZGRJQyA6
IGppdERhdGEtPm1fYWRkSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtQWRkcysrOwotICAgICAg
ICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMgOiBqaXREYXRhLT5tX211bElD
cykgewotICAgICAgICAgICAgICAgIG51bU11bHMrKzsKLSAgICAgICAgICAgICAgICB0b3RhbE11
bFNpemUgKz0gbXVsSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZvciAoSklUTmVnSUMqIG5lZ0lDIDogaml0RGF0YS0+bV9uZWdJQ3MpIHsKLSAgICAgICAgICAg
ICAgICBudW1OZWdzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxOZWdTaXplICs9IG5lZ0lDLT5j
b2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJVFN1YklDKiBz
dWJJQyA6IGppdERhdGEtPm1fc3ViSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtU3VicysrOwot
ICAgICAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJQy0+Y29kZVNpemUoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVCbG9jayop
IHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmUtaW1wbGVtZW50IHRoaXMgdXNpbmcg
SklUQ29kZS4KICAgICB9OwogICAgIGhlYXAoKS0+Zm9yRWFjaENvZGVCbG9jayhjb3VudElDcyk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCBjbGFzcyBKU01vZHVsZUVudmly
b25tZW50OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTExJbnRQcm90b3R5
cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OwogY2xhc3MgTWV0YWRhdGFUYWJsZTsK
LWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBj
bGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAogREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEpOwogCkBA
IC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBu
dW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRl
OgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6
CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAg
ICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXND
aGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBh
ZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2Nr
KiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1f
YWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoKICAgICBi
b29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0
YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZp
cnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRk
aW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBp
cyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXND
b25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7
Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAg
ICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAg
LTI2OCwyMyArMjU5LDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUKQogICAgIHN0cnVjdCBK
SVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJhZzxTdHJ1
Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAgICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJ
Q3M7Ci0gICAgICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Ci0gICAgICAgIEJhZzxKSVROZWdJ
Qz4gbV9uZWdJQ3M7Ci0gICAgICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7CiAgICAgICAgIEJh
ZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxMaW5rZWRM
aXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1f
aW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3JwaGljQ2Fs
bE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNv
bWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJs
ZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFi
bGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBD
VG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29sIG1faGFz
Q2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRM
aXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2ppdENvZGVN
YXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29sOworICAg
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAgIH07CiAK
KyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENv
ZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkpCkBAIC0y
OTMsMjIgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0
YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAKLSAgICBKSVRBZGRJQyogYWRkSklU
QWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJp
bmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRo
UHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUq
KTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9y
Pjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9m
aWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQotCi0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5
cGU+Ci0gICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUp
IHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNf
c2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRO
ZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRK
SVROZWdJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9y
LCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUU3ViSUMqIGFkZE1hdGhJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2Zp
bGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdERhdGEpOyB9CiAKICAgICBTdHJ1Y3R1cmVT
dHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSwgQ29kZU9yaWdpbik7CiAKQEAgLTMyMiwx
OCArMjk2LDggQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFw
IHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0luZm8q
IGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0g
ICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAgIHsKLSAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBlbnN1cmVK
SVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKLSAgICB9
Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0gICAgewotICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBjb25zdCBKSVRDb2RlTWFwJiBq
aXRDb2RlTWFwKCk7CiAKLSAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVl
X3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2lu
PiBmaW5kUEModm9pZCogcGMpOwogCiAgICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJl
Z2lzdGVyU2V0KTsKQEAgLTQ3Miw2ICs0MzYsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgbmFt
ZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9CiAgICAgdW5zaWduZWQgbnVtYmVy
T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fYXJndW1l
bnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9udW1QYXJh
bWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNlSklUKCkpOwpAQCAtNTY5LDggKzUzNCwxMCBAQCBwdWJs
aWM6CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVn
aXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgp
OyB9CisgICAgYm9vbCBpc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZpcnR1YWxS
ZWdpc3RlcikgY29uc3Q7CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJlZykg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKHJlZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
biBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KGluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JC
dWZmZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0YW50UmVn
aXN0ZXJzKSArIGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5T2Zmc2V0
KCk7IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkg
eyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJP
ZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC01
OTUsMjIgKzU2MiwyMiBAQCBwdWJsaWM6CiAgICAgLy8gSnVtcCBUYWJsZXMKIAogI2lmIEVOQUJM
RShKSVQpCi0gICAgU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5k
ZXgpCisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFi
bGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBU
YWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFudFBvb2wo
KQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAgICAgcmV0
dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wuZGF0YSgp
OwogICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRh
YmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3dp
dGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIAotI2lmIEVOQUJM
RShKSVQpCi0gICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwotICAg
ICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07Ci0gICAgfQorI2lmIEVOQUJMRShERkdfSklUKQorICAgIFN0cmluZ0p1bXBUYWJsZSYgZGZn
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFi
bGUmIGRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CiAjZW5kaWYKKwogICAgIHNp
emVfdCBudW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0
dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
cygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIApAQCAtNjMyLDIx
ICs1OTksMjAgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xkUmVhY2hl
ZCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNoZWNrSWZU
aHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOworICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1
dGVDb3VudGVyLT5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKICAgICB9CiAK
ICAgICB2b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCiAgICAgewotICAgICAgICBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICAgICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyLT5kZWZlckluZGVmaW5pdGVseSgpOwogICAgIH0KIAotICAgIGludDMyX3QgdGhyZXNo
b2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2FybVVwKCk7
CiAgICAgdm9pZCBqaXRTb29uKCk7CisgICAgdm9pZCBqaXROZXh0SW52b2NhdGlvbigpOwogCiAg
ICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAg
ICAgIHJldHVybiAqbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIH0KIAogICAgIHR5cGVkZWYg
SGFzaE1hcDxzdGQ6OnR1cGxlPFN0cnVjdHVyZUlELCB1bnNpZ25lZD4sIEZpeGVkVmVjdG9yPExM
SW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVjdHVyZVdh
dGNocG9pbnRNYXA7CkBAIC03OTcsNiArNzYzLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNE
ZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CiAg
ICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1Z2dlclJl
cXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVxdWVzdHMp
OyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpOwog
ICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykKQEAgLTgz
OCw2ICs4MDUsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2NrIG1fbG9j
azsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJpdGZpZWxk
IGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBFTkFCTEUo
SklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBERkc6OkNh
cGFiaWxpdHlMZXZlbApAQCAtODQ3LDggKzgxNSw2IEBAIHB1YmxpYzoKICAgICBib29sIG1fZGlk
RmFpbEZUTENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZU
TCA6IDE7CiAKLSAgICBib29sIG1faGFzTGlua2VkT1NSRXhpdCA6IDE7Ci0gICAgYm9vbCBtX2lz
RWxpZ2libGVGb3JMTEludERvd25ncmFkZSA6IDE7CiAgICAgYm9vbCBtX3Zpc2l0Q2hpbGRyZW5T
a2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAgLy8gSW50ZXJuYWwgbWV0aG9kcyBm
b3IgdXNlIGJ5IHZhbGlkYXRpb24gY29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBpdCB3YXNu
J3QKQEAgLTkwNywxNiArODczLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mTWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fbWV0YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9u
c1Jhd1BvaW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3Ry
dWN0aW9uc1Jhd1BvaW50ZXIpOyB9CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9y
RnV6emluZ0Vhcmx5UmV0dXJuKCkKLSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJl
IHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0gICAgICAg
IHJldHVybiAhbV91bmxpbmtlZENvZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAgfQorICAg
IGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7IHJldHVy
biBtX3VubGlua2VkQ29kZS0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1
cm4oKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVz
KCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVD
YWNoZXMoKTsKKyAgICB2b2lkIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKQEAg
LTEwMTAsNyArOTcyLDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1f
bGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2Rl
OwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+
IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAv
LyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0
aGUgcHJvZmlsZWQgY29kZSBibG9jawpAQCAtMTAyOSw3ICs5OTMsNyBAQCBwcml2YXRlOgogCiAg
ICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAgICBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9OwogCiAg
ICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAgICAgdWlu
dDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsOCArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCYXNl
bGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRN
ZXRhZGF0YVRhYmxlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkgKzQyLDcg
QEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlmIChtX21l
dGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9y
RWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9wcm9maWxl
LCBmYWxzZSk7IH0pOwotCiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJ
TEUoVklTSVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8
T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1Nyw2IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwzOCBAQCB2
b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQogCisjaWYg
RU5BQkxFKEpJVCkKK0FMV0FZU19JTkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJsb2NrOjpq
aXRDb2RlTWFwKCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2Rl
LmdldCgpKS0+bV9qaXRDb2RlTWFwOworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJs
ZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sK
KyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBU
YWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgp
KS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxv
Y2s6OmRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0
VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6
SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBl
KCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRD
b2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3
MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3Jh
cChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQogICAgIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAg
Ym9vbCBFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9j
ayA/IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQpOworICAg
IHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAgICBtX2Nv
dW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRo
aXMsIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxz
ZS4KICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwog
ICAgIGJvb2wgaGFzQ3Jvc3NlZFRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlciA+
PSAwOyB9Ci0gICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVC
bG9jayopOworICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2Rl
QmxvY2sqID0gbnVsbHB0cik7CiAgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwogICAgIGRv
dWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENv
dW50KSArIG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpA
QCAtODYsMTMgKzg2LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVCB0aHJlc2hvbGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChU
IHRocmVzaG9sZCkKICAgICB7Ci0gICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwotICAgICAg
ICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
KCkgJiYgZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2Jq
ZWN0LT53ZWFrUmFuZG9tSW50ZWdlcigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5D
aGVja3BvaW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBt
YXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAgIGludDMy
X3QgbWF4VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50
cygpOwogICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAgICAgICAg
dGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xkOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEu
aAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBH
ZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1v
ZGVNZXRhZGF0YVVuc2V0KSA9PSAxMik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJy
YXlMZW5ndGggeworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBh
cnJheVByb2ZpbGUpOyB9CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07CiBzdGF0
aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsK
QEAgLTg4LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdl
dEJ5SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7
IC8vIFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFk
YXRhRGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5z
ZXRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1v
ZGU7CkBAIC0xMTcsNiArMTE5LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGEgewogICAg
ICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhUHJvdG9Mb2FkIHByb3RvTG9hZE1vZGU7CiAgICAgfTsK
ICAgICBHZXRCeUlkTW9kZSBtb2RlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2Rl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9
CiAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsKIH07CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3Rh
dHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIEdldEJ5U3RhdHVzIEdl
dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE5v
SW5mb3JtYXRpb24pOwogICAgICAgICAKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6
IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0
dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZtKCkpOwog
ICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0
eSgpKQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
ID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQg
R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEcKIAogICAgIC8vIExldCdzIHN0b3Jl
IHRoZSByZXVzZWQgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4gQWZ0ZXIgdGhhdCwgd2UgY2FuIHVz
ZSBhbGxvY2F0ZWQgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgYWxsb2NhdG9yLnByZXNl
cnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
OjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOworICAgICAgICBhbGxvY2F0b3IucHJl
c2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CiAKICAgICBpZiAoR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coImJhc2VH
UFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsKQEAgLTIyNSwxMiArMjI1LDkgQEAgdm9pZCBHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9y
Q0NhbGwuc2V0KHJlZyk7CiAgICAgZm9yIChGUFJSZWcgcmVnIDogZnBTY3JhdGNoKQogICAgICAg
ICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CisgICAgaWYgKGppdC5jb2RlQmxv
Y2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQo
c3R1YkluZm8ubV9zdHViSW5mb0dQUik7CiAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLmV4
Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckNDYWxsKCkpOwotI2lmIENQ
VShBUk02NCkKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKLSAg
ICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZv
ckNDYWxsLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCiAKICAgICBBY2Nlc3NDYXNl
U25pcHBldFBhcmFtcyBwYXJhbXMoc3RhdGUubV92bSwgV1RGTW92ZShyZWdzKSwgV1RGTW92ZShn
cFNjcmF0Y2gpLCBXVEZNb3ZlKGZwU2NyYXRjaCkpOwogICAgIHNuaXBwZXQtPmdlbmVyYXRvcigp
LT5ydW4oaml0LCBwYXJhbXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyAr
MTM5LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgogICAgICAg
ICByZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBl
OjpJbkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8t
Pm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSk7CiAgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkp
CiAgICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsMTYgQEAgQUxX
QVlTX0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vz
cyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1
YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWlj
IHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0
byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKICAgICAKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0yMzMsMjMg
KzIzOCwzMSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3RlCiAgICAg
cmV0dXJuIGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJlZzsKIH0K
IAotYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5s
aW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0K
IAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNl
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkp
OworICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBz
dHViSW5mbywgb2Zmc2V0KSk7CisKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewor
ICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJl
U3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQogCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIApAQCAtMjc5LDIyICsyOTIsMjUgQEAgYm9vbCBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UgogICAgIHJldHVybiBsaW5rZWRDb2Rl
SW5saW5lOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVB
Y2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgQVNTRVJUKGFy
cmF5LT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXND
b25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgaWYgKCFoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWhhc0FueUFycmF5U3RvcmFnZShhcnJheS0+aW5k
ZXhpbmdUeXBlKCkpICYmIGFycmF5LT5pbmRleGluZ1R5cGUoKSAhPSBBcnJheUNsYXNzOwogfQog
Ci1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
QXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgQVNTRVJUKGlzQ2FjaGVhYmxlQXJyYXlMZW5n
dGgoc3R1YkluZm8sIGFycmF5KSk7CisgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGlzQ2Fj
aGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywgYXJyYXkpKTsKIAogICAgIGlm
ICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0zMTksMTcgKzMzNSwyMCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxl
bmd0aChTCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLWJvb2wgSW5saW5lQWNj
ZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Citib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICBpZiAoIXN0dWJJ
bmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAg
aWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsK
IH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0
aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewot
ICAgIEFTU0VSVChpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChzdHViSW5mbykpOworICAgIEFTU0VS
VF9VTlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0
dWJJbmZvKSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzYzLDEzICszODIsMTggQEAgYm9vbCBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKAogfQogCiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIXN0dWJJbmZv
Lmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYg
KGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gVGhlc2UgZHluYW1pYyBzbG90
cyBnZXQgZmlsbGVkIGluIGJ5IFN0cnVjdHVyZVN0dWJJbmZvLiBOb3RoaW5nIGVsc2UgdG8gZG8u
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIEdQUlJlZyBiYXNlID0gc3R1Yklu
Zm8uYmFzZUdQUjsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVncygp
OwogCkBAIC00MDYsMTMgKzQzMCwxMyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjCiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgLy8g
SWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQg
KGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGly
ZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2Rl
UHRyLgotICAgICAgICBpZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAg
ICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBz
dHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29k
ZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMg
bWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAg
ICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNv
ZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgog
ICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09
IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1YkluZm8uc3Rh
cnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxI
ZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnN0dWJJbmZvKSwgc3R1YkluZm8u
bV9zdHViSW5mb0dQUik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGlu
ZVB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1wKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gc3R1YkluZm8uZG9uZUxvY2F0
aW9uOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKQEAgLTQyMSw3ICs0NDUsOSBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nlc3M6IGxp
bmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBz
dHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2Rl
LgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzQsOCArNDYwLDE0IEBAIHZvaWQgSW5s
aW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICB9KSwgIklubGluZUFjY2Vzczog
bGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpyZXNldFN0
dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit2b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKKyAgICBpZiAoY29kZUJs
b2NrLT51c2VEYXRhSUMoKSAmJiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCkgeworICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSBzdHViSW5mby5zbG93UGF0
aFN0YXJ0TG9jYXRpb247CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLgorICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1Yklu
Zm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQo
Q0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAvLyBXZSBk
b24ndCBuZWVkIGEgbm9wIHNsZWQgaGVyZSBiZWNhdXNlIG5vYm9keSBzaG91bGQgYmUganVtcGlu
ZyBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCiAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1w
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vz
cy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDE0ICs5OSwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBzdGQ6Om1heChzaXplLCBzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7
CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoU3Ry
dWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGlj
IGJvb2wgY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwg
UHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5UmVw
bGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAg
ICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiwg
SlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKFN0cnVj
dHVyZVN0dWJJbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1
Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJ
bkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBib29s
IGdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGljIGJv
b2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgY2FuR2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwg
UHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5UmVw
bGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5
T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGlzQ2Fj
aGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAg
c3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJbkFjY2VzcyhD
b2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBi
b29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7
CiAKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGlu
ZUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CiAgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1YkFzSnVt
cEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0
YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBPVkVSTE9BRF9CSVRXSVNF
X09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJdGVyYXRpb25Nb2RlTWV0YWRhdGEg
ewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSXRlcmF0aW9uTW9kZU1l
dGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBl
KHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRpb25Nb2RlKSk7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50
Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExM
SW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KIAogcHJpdmF0ZToKICAgICB1aW50
cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgeyB1bmxpbmtlZEJpdCB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDE3IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
Yml0V2lkdGhGb3JNYXgKICAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAogICAgIG1hY3JvKE9w
SXRlcmF0b3JOZXh0KSBcCiAKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQklOQVJZX0FS
SVRIX1BST0ZJTEUobWFjcm8pIFwKKyAgICBtYWNybyhPcEFkZCkgXAorICAgIG1hY3JvKE9wTXVs
KSBcCisgICAgbWFjcm8oT3BEaXYpIFwKKyAgICBtYWNybyhPcFN1YikgXAorCisjZGVmaW5lIEZP
Ul9FQUNIX09QQ09ERV9XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKKyAgICBtYWNy
byhPcEluYykgXAorICAgIG1hY3JvKE9wRGVjKSBcCisgICAgbWFjcm8oT3BOZWdhdGUpIFwKKwog
CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInR5cGUtbGltaXRzIikKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlOjpzdWNjZWVkKCkKIHsKICAgICByZXN0b3JlU2NyYXRjaCgpOwog
ICAgIGlmIChqaXQtPmNvZGVCbG9jaygpLT51c2VEYXRhSUMoKSkKLSAgICAgICAgaml0LT5yZXQo
KTsKKyAgICAgICAgaml0LT5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby0+
bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mRG9uZUxvY2F0aW9uKCkp
LCBKU0ludGVybmFsUHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKGpp
dC0+anVtcCgpKTsKIH0KQEAgLTExMCw2ICsxMTAsOCBAQCBjb25zdCBSZWdpc3RlclNldCYgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7CiAKICAgICAgICAg
bV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1fbGl2ZVJlZ2lzdGVyc1RvUHJl
c2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9jYXRvci0+dXNlZFJlZ2lzdGVy
cygpKTsKKyAgICAgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQorICAgICAg
ICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5hZGQoc3R1YkluZm8tPm1fc3R1YkluZm9HUFIp
OwogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGw7CkBAIC0x
MjgsMTEgKzEzMCwxMiBAQCBhdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2VydmVMaXZl
CiAgICAgfTsKIH0KIAotYXV0byBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZlTGl2ZVJl
Z2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29uc3QgUmVnaXN0ZXJTZXQm
IGV4dHJhKSAtPiBTcGlsbFN0YXRlCithdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2Vy
dmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucygpIC0+IFNwaWxs
U3RhdGUKIHsKICAgICBSZWdpc3RlclNldCBsaXZlUmVnaXN0ZXJzID0gYWxsb2NhdG9yLT51c2Vk
UmVnaXN0ZXJzKCk7CisgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQorICAg
ICAgICBsaXZlUmVnaXN0ZXJzLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7CiAgICAgbGl2
ZVJlZ2lzdGVycy5leGNsdWRlKGNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgbGl2ZVJlZ2lz
dGVycy5tZXJnZShleHRyYSk7CiAKICAgICBjb25zdGV4cHIgdW5zaWduZWQgZXh0cmFTdGFja1Bh
ZGRpbmcgPSAwOwogICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3Rl
clByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3Rl
cnNUb1N0YWNrRm9yQ2FsbCgqaml0LCBsaXZlUmVnaXN0ZXJzLCBleHRyYVN0YWNrUGFkZGluZyk7
CkBAIC01OTYsMTYgKzU5OSwxMSBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGlj
QWNjZXNzCiAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAgIHN0YXRlLmppdCA9
ICZqaXQ7CiAKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewotICAgICAgICBpZiAo
c3RhdGUubV9kb2VzSlNHZXR0ZXJTZXR0ZXJDYWxscykgewotICAgICAgICAgICAgLy8gV2UgaGF2
ZSBubyBndWFyYW50ZWUgdGhhdCBzdGFjay1wb2ludGVyIGlzIHRoZSBleHBlY3RlZCBvbmUuIFRo
aXMgaXMgbm90IGEgcHJvYmxlbSBpZiB3ZSBkbyBub3QgaGF2ZSBKUyBnZXR0ZXIgLyBzZXR0ZXIg
Y2FsbHMgc2luY2Ugc3RhY2stcG9pbnRlciBpcwotICAgICAgICAgICAgLy8gYSBjYWxsZWUtc2F2
ZSByZWdpc3RlciBpbiB0aGUgQyBjYWxsaW5nIGNvbnZlbnNpb24uIEhvd2V2ZXIsIG91ciBKUyBl
eGVjdXRhYmxlIGNhbGwgZG9lcyBub3Qgc2F2ZSBzdGFjay1wb2ludGVyLiBTbyB3ZSBhcmUgYWRq
dXN0aW5nIHN0YWNrLXBvaW50ZXIgYWZ0ZXIKLSAgICAgICAgICAgIC8vIEpTIGdldHRlciAvIHNl
dHRlciBjYWxscy4gQnV0IHRoaXMgY291bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlIGluaXRpYWwg
c3RhY2stcG9pbnRlciwgYW5kIG1ha2VzIFBBQyB0YWdnaW5nIGJyb2tlbi4KLSAgICAgICAgICAg
IC8vIFRvIGVuc3VyZSBQQUMtdGFnZ2luZyB3b3JrLCB3ZSBmaXJzdCBhZGp1c3Qgc3RhY2stcG9p
bnRlciB0byB0aGUgYXBwcm9wcmlhdGUgb25lLgotICAgICAgICAgICAgaml0LmFkZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGppdC50YWdSZXR1cm5BZGRy
ZXNzKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKKyAgICBpZiAoIWNhbkJlU2hhcmVkICYmIEFTU0VSVF9FTkFCTEVEKSB7CisgICAgICAgIGpp
dC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1BvaW50
ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgYXV0byBvayA9IGppdC5icmFuY2hQ
dHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAg
ICAgICAgb2subGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0ZS5wcmVzZXJ2ZWRSZXVzZWRS
ZWdpc3RlclN0YXRlID0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUxLDcgKzI1MSw3IEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewogICAgIGNv
bnN0IFJlZ2lzdGVyU2V0JiBjYWxjdWxhdGVMaXZlUmVnaXN0ZXJzRm9yQ2FsbEFuZEV4Y2VwdGlv
bkhhbmRsaW5nKCk7CiAKICAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3Rh
Y2tGb3JDYWxsKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7Ci0gICAgU3BpbGxTdGF0
ZSBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKGNv
bnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7CisgICAgU3BpbGxTdGF0ZSBwcmVzZXJ2ZUxp
dmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAgICB2b2lk
IHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRpb24o
Y29uc3QgU3BpbGxTdGF0ZSYpOwogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3Rh
Y2tGb3JDYWxsKGNvbnN0IFNwaWxsU3RhdGUmLCBjb25zdCBSZWdpc3RlclNldCYgZG9udFJlc3Rv
cmUgPSB7IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3Rh
dHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTAgKzE4MCwx
MCBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7CiAg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOwogICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh1aWQpOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQot
ICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KHVpZCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8t
PmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7CisgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7
CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4g
UHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0dWJJbmZvLT5tX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICByZXR1
cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0cnVjdHVyZSwg
b2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSksICpzdHViSW5mbyk7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5l
cy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiUG9s
eW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTY1LDkgKzY2LDkg
QEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKAogICAgIEFTU0VSVCho
YXNDb25zdGFudElkZW50aWZpZXIpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlw
ZTo6R2V0QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53
cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsK
KyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5m
bzo6aW5pdEFycmF5TGVuZ3RoKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlcikK
QEAgLTg3LDkgKzg4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRSZXBs
YQogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KTsKICAgICBzZXRD
YWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlKTsKICAgICBtX2lkZW50
aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7
CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAg
dS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7
CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBDYWNo
ZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC05Nyw5ICs5OCw5IEBAIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGMKICAgICBBU1NFUlQobV9jYWNoZVR5cGUgPT0g
Q2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpJ
bkJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVC
YXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAg
YnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRl
cmVmKCkKQEAgLTIzNiw3ICsyMzcsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0cnVjdHVy
ZVN0dWJJbmZvCiAgICAgICAgIC8vIHdlJ3JlIGJ1ZmZlcmVkIGlzIGJlY2F1c2Ugd2UgcmVseSBv
biBpdCB0byByZXNldCBkdXJpbmcgR0MgaWYgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlCiAg
ICAgICAgIC8vIGlzIGNvbGxlY3RlZC4KICAgICAgICAgbV9pZGVudGlmaWVyID0gbnVsbHB0cjsK
LSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3
ZSBnZW5lcmF0ZWQgc29tZSBjb2RlIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBhdHRlbXB0IHRvIHJl
cGF0Y2ggaW4gdGhlIGZ1dHVyZSB1bnRpbCB3ZQogICAgICAgICAvLyBnYXRoZXIgZW5vdWdoIGNh
c2VzLgpAQCAtMjUxLDcgKzI1Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNv
bnN0IENvbmMKIHsKICAgICBjbGVhckJ1ZmZlcmVkU3RydWN0dXJlcygpOwogICAgIG1faWRlbnRp
ZmllciA9IG51bGxwdHI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7
CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKIAogICAgIGlmIChtX2NhY2hl
VHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CkBAIC0yODUsNiArMjg2
LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgICAgICBy
ZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQ
dXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJ
bkJ5SWQ6CkBAIC0zNjAsOCArMzYyLDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRX
ZWFrUmVmZXJlbgogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0gICAgaWYgKG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgaXNWYWxpZCAmPSB2bS5oZWFwLmlz
TWFya2VkKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgaWYgKFN0cnVj
dHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpCisgICAgICAg
IGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpOwogICAgIGlmIChtX2NhY2hl
VHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIGlzVmFsaWQgJj0gdS5zdHViLT52aXNp
dFdlYWsodm0pOwogCkBAIC0zNzUsOCArMzc3LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRXZWFrUmVmZXJlbgogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0g
ICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgbV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpCisg
ICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAKICAgICBpZiAobV9jYWNo
ZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICB1LnN0dWItPnByb3BhZ2F0ZVRyYW5z
aXRpb25zKHZpc2l0b3IpOwpAQCAtNDMwLDYgKzQzMiwyMDkgQEAgQUxXQVlTX0lOTElORSB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVUeXBlOwog
fQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5r
ZWRTdHViSW5mbykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGFjY2Vzc1R5cGUgPSB1bmxp
bmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0
YXJ0OworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9uOwor
ICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhTdGFy
dExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNldCgpKSk7CisgICAgY29kZU9y
aWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBt
X2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICB1c2VkUmVnaXN0ZXJzID0g
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIGlmIChhY2Nlc3NU
eXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwgd2UgY2Fu
J3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVyUmVnaXN0ZXIiIHJlZ2lzdGVyIGVpdGhlci4KKyAg
ICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xv
YmJlclJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9m
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdl
dEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1p
emU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlz
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0
aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJy
YW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5k
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0
ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFt
ZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6
CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNh
c2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8u
ZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0Ogor
ICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAg
ICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVm
aW5lOgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmlu
ZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZv
LnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAg
ICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZv
LmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxkUHV0S2lu
ZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6
ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVy
ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVs
ZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAg
YmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5w
cm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVE
ZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6
CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1
ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIGhhc0NvbnN0
YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBwcm90b3R5cGVJc0tub3duT2JqZWN0ID0g
ZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZh
bHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVz
dWx0OworICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Oklu
QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVn
cy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5C
eUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0
cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIGhhc0NvbnN0YW50
SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnRoaXNHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0
YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJS
ZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAg
ICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVy
ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6UHV0
QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6
CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICB2YWx1ZUdQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odW5saW5rZWRTdHViSW5mbyk7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJS
b3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPcHRpb25z
LmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCkBAIC01Niw2ICs1
Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlWYWwsCiAg
ICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAgICBJbkJ5
SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzgwLDggQEAg
ZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAor
c3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJ
bmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFs
aXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAv
LyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElm
IGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTMyNSwxMyArMzMxLDE5IEBAIHBy
aXZhdGU6CiAKIHB1YmxpYzoKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CisgICAgUHJvcGVy
dHlPZmZzZXQgYnlJZFNlbGZPZmZzZXQ7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJ5
SWRTZWxmT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZv
LCBieUlkU2VsZk9mZnNldCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVT
dHViSW5mbywgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsgfQogICAgIHVuaW9uIHsKLSAg
ICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAg
ICAgfSBieUlkU2VsZjsKICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAgICAgfSB1
OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZTsKKyAgICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoVk0mIHZtKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX2lubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIH0KKyAgICBTdHJ1Y3R1cmVJRCBtX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAwIH07CiBwcml2YXRlOgogICAgIENhY2hlYWJsZUlkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOwogICAgIC8vIFJlcHJlc2VudHMgdGhvc2Ugc3RydWN0dXJlcyB0aGF0
IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nlc3NDYXNlcyBpbiB0aGUgUG9seW1vcnBoaWNBY2Nl
c3MuCkBAIC0zNTIsNiArMzY0LDcgQEAgcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2RlUHRyOwogCiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkNvZGVQdHIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1
YkluZm8sIG1fY29kZVB0cik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRG9uZUxv
Y2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBkb25l
TG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRoU3RhcnRM
b2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgc2xv
d1BhdGhTdGFydExvY2F0aW9uKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBt
X3Nsb3dPcGVyYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvdW50ZG93
bigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgY291bnRkb3du
KTsgfQpAQCAtNDQ3LDYgKzQ2MCwxNyBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNH
ZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7
CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQ
cml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRL
aW5kOjpub25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpzbG9wcHko
KSB9OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBz
dGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBv
ZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisK
ICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJTdGF0ZSgp
CiAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsKICAgICBp
ZiAocGVyY2VudGFnZSAhPSBwZXJjZW50YWdlKQogICAgICAgICBwZXJjZW50YWdlID0gMC4wOwot
ICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBw
ZXJjZW50YWdlLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVy
IHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIiVcbiIpOwogfQogCiB2b2lkIGVuYWJsZVN1
cGVyU2FtcGxlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAK
KyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDbGFz
c0luZm8uaCIKQEAgLTc4LDYgKzc5LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29k
ZUJsb2NrKFZNJgogICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tlcik7CiAg
ICAgICAgIG1fcmFyZURhdGEtPm1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAgfQorCisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQo
T3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgpAQCAtMzE2LDYgKzMxOSw0OCBAQCBpbnQgVW5saW5rZWRDb2RlQmxv
Y2s6Om91dE9mTGluZUp1bXBPZmZzCiAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMu
Z2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECitib29sIFVubGlu
a2VkQ29kZUJsb2NrOjpoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7Cisg
ICAgaWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSA+IDEwMCkgeworICAgICAgICBpZiAobnVtYmVy
T2ZJZGVudGlmaWVycygpICE9IG1fY2FjaGVkSWRlbnRpZmllclVpZHMuc2l6ZSgpKSB7CisgICAg
ICAgICAgICBMb2NrZXIgbG9ja2VyKG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrKTsKKyAgICAg
ICAgICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBjYWNoZWRJZGVudGlmaWVyVWlkczsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJz
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIg
PSB0aGlzLT5pZGVudGlmaWVyKGkpOworICAgICAgICAgICAgICAgIGNhY2hlZElkZW50aWZpZXJV
aWRzLmFkZChpZGVudGlmaWVyLmltcGwoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAgICBtX2NhY2hlZElkZW50aWZpZXJV
aWRzID0gV1RGTW92ZShjYWNoZWRJZGVudGlmaWVyVWlkcyk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5jb250YWlucyh1aWQpOworICAgIH0KKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkg
eworICAgICAgICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitpbnQz
Ml90IFVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQp
Cit7CisgICAgc3dpdGNoIChkaWRPcHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0ZTo6SW5k
ZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIFRyaVN0YXRl
OjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcmlTdGF0
ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwogdm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcygpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fbWV0YWRhdGEtPmlzRmluYWxpemVkKCkpOwpAQCAtMzM3LDE1ICszODIsMjUgQEAg
dm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcgogICAgIGlmIChtX21ldGFk
YXRhLT5oYXNNZXRhZGF0YSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJyYXlQcm9m
aWxlcyA9IDA7CiAKLSNkZWZpbmUgQ09VTlQoX19vcCkgXAotICAgICAgICBudW1iZXJPZkFycmF5
UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOworI2RlZmluZSBDT1VO
VChfX29wKSBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxf
X29wPigpOwogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENPVU5U
KQogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhDT1VO
VCkKICN1bmRlZiBDT1VOVAogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRh
ZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICAgICAgbnVtYmVyT2ZBcnJh
eVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BHZXRCeUlkPigpOwotCiAgICAg
ICAgIG1fYXJyYXlQcm9maWxlcyA9IEZpeGVkVmVjdG9yPFVubGlua2VkQXJyYXlQcm9maWxlPihu
dW1iZXJPZkFycmF5UHJvZmlsZXMpOworCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQmluYXJ5
QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQmluYXJ5QXJp
dGhQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CisgICAgICAgIEZP
Ul9FQUNIX09QQ09ERV9XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKENPVU5UKQorI3VuZGVmIENP
VU5UCisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcyA9IEZpeGVkVmVjdG9yPEJpbmFyeUFy
aXRoUHJvZmlsZT4obnVtYmVyT2ZCaW5hcnlBcml0aFByb2ZpbGVzKTsKKworICAgICAgICB1bnNp
Z25lZCBudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5UKF9fb3Ap
IG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19v
cD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShD
T1VOVCkKKyN1bmRlZiBDT1VOVAorICAgICAgICBtX3VuYXJ5QXJpdGhQcm9maWxlcyA9IEZpeGVk
VmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPihudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyk7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDEwICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5o
IgogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlv
bnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgi
CisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5n
ZUluZm8uaCIKICNpbmNsdWRlICJIYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIu
aCIKQEAgLTY0LDYgKzY2LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiBjbGFzcyBVbmxp
bmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7
CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEJhc2VsaW5lSklUQ29k
ZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKIGVudW0gY2xhc3MgTGlua1RpbWVDb25zdGFudCA6
IGludDMyX3Q7CiAKQEAgLTE3NSw2ICsxNzgsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGaXhl
ZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAg
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0u
Z2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+
JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBAIC0yMDcsNiArMjExLDE1IEBAIHB1Ymxp
YzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogCiAgICAgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0OworICAgIGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIoKTsgfQorICAgIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAg
IGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQoMCkucHRy
KCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1
Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rpb24gPCBp
bnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0cnVjdGlv
bnNCZWdpbjsKKyAgICB9CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25zU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIGluc3RydWN0aW9ucygpLnNpemUoKTsgfQogCiAgICAgdW5zaWduZWQgbnVtQ2FsbGVl
TG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KICAgICB1bnNpZ25l
ZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CkBAIC0zMzQsMTAgKzM0Nywy
MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpOwog
ICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1
cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3
YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFpc0J1aWx0
aW5GdW5jdGlvbigpOworICAgIH0KICAgICB2b2lkIGFsbG9jYXRlU2hhcmVkUHJvZmlsZXMoKTsK
ICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSYgdW5saW5rZWRWYWx1ZVByb2ZpbGUodW5zaWduZWQg
aW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlc1tpbmRleF07IH0KICAgICBVbmxpbmtlZEFy
cmF5UHJvZmlsZSYgdW5saW5rZWRBcnJheVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJu
IG1fYXJyYXlQcm9maWxlc1tpbmRleF07IH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgYm9v
bCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CisjZW5kaWYKKworICAgIGludDMy
X3QgdGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKKwogcHJvdGVjdGVkOgogICAg
IFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwogCkBAIC0zOTcsNiAr
NDIxLDkgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xleGljYWxTY29wZUZlYXR1cmVzIDog
NDsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKKyNpZiBFTkFCTEUoSklU
KQorICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1fdW5saW5rZWRCYXNlbGluZUNvZGU7Cisj
ZW5kaWYKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAg
U291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEzLDcgKzQ0MCw2IEBAIHByaXZhdGU6
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNz
OwogCi0KICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFBy
b2ZpbGU7CiAjZW5kaWYKQEAgLTQ1OCw2ICs0ODQsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAg
IH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zm
c2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQpOworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxl
KHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVu
YXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBt
X3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVy
JiBsbGludEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOyB9
CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPElu
c3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjUsOCArNTAxLDE2IEBAIHByaXZh
dGU6CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4ZWRWZWN0b3I8
RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNlbGluZUV4ZWN1
dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIEZpeGVkVmVjdG9yPFVubGlu
a2VkVmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5r
ZWRBcnJheVByb2ZpbGU+IG1fYXJyYXlQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxCaW5hcnlB
cml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxVbmFy
eUFyaXRoUHJvZmlsZT4gbV91bmFyeUFyaXRoUHJvZmlsZXM7CisKKyNpZiBBU1NFUlRfRU5BQkxF
RAorICAgIExvY2sgbV9jYWNoZWRJZGVudGlmaWVyVWlkc0xvY2s7CisgICAgSGFzaFNldDxVbmlx
dWVkU3RyaW5nSW1wbCo+IG1fY2FjaGVkSWRlbnRpZmllclVpZHM7CisjZW5kaWYKIAogcHJvdGVj
dGVkOgogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRN
ZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxlKTsKICAg
ICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZz
ZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBB
U1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9
IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRh
YmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgYmFzZVR5cGVPZmZzZXQgPSByb3Vu
ZFVwVG9NdWx0aXBsZU9mKGFsaWdub2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSksIGJhc2VU
eXBlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKHR5cGVu
YW1lIE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9CisKICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAgdW5zaWduZWQgbnVtRW50cmllcygp
OwogCkBAIC0xMDcsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0
MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90Owog
ICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDUsMTMgKzQ1LDExIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKIAogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRz
QXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNwZWNGYWls
QnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRleE1h
c2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
dG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNGYWls
QnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKICAgICB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQotICAgICAg
ICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAg
IGNsZWFyQnVja2V0cygpOwogICAgIH0KICAgICAKICAgICBFbmNvZGVkSlNWYWx1ZSogc3BlY0Zh
aWxCdWNrZXQodW5zaWduZWQgaSkKQEAgLTU5LDYgKzU3LDEyIEBAIHN0cnVjdCBWYWx1ZVByb2Zp
bGVCYXNlIHsKICAgICAgICAgQVNTRVJUKG51bWJlck9mQnVja2V0cyArIGkgPCB0b3RhbE51bWJl
ck9mQnVja2V0cyk7CiAgICAgICAgIHJldHVybiBtX2J1Y2tldHMgKyBudW1iZXJPZkJ1Y2tldHMg
KyBpOwogICAgIH0KKworICAgIHZvaWQgY2xlYXJCdWNrZXRzKCkKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQorICAgICAg
ICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgfQog
ICAgIAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tldCkgY29u
c3QKICAgICB7CkBAIC0xMjMsOCArMTI3LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ugewog
ICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5k
IHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAg
ICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBj
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsg
KytpKSB7CkBAIC0xMzksNyArMTQxLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAgICBF
bmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAgU3Bl
Y3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE2MSw2ICsxNjMsNyBA
QCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBWYWx1
ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPiB7
CiAgICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRz
PDA+KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQogfTsK
IAogc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVBy
b2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
a0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5oIgpAQCAtMzQsNyArMzUsOSBAQAogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNl
bWVudC5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZy
YW1lU2V0LmgiCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSlNDYXN0LmgiCisj
aW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0
aW9uLmgiCiAjaW5jbHVkZSAiUmVjb3JkZWRTdGF0dXNlcy5oIgogI2luY2x1ZGUgPHd0Zi9CYWcu
aD4KQEAgLTcwLDcgKzczLDcgQEAgc3RydWN0IFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uIHsKICAg
ICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX3RvOwogfTsKICAgICAgICAgCi1jbGFzcyBDb21tb25E
YXRhIHsKK2NsYXNzIENvbW1vbkRhdGEgOiBwdWJsaWMgTWF0aElDSG9sZGVyIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDb21tb25EYXRhKTsKIHB1YmxpYzoKICAgICBDb21tb25EYXRhKCkK
QEAgLTExNiw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8Q29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50PiBtX3dhdGNocG9pbnRzOwogICAgIEZpeGVkVmVjdG9yPEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzOwog
ICAgIEZpeGVkVmVjdG9yPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4g
bV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKICAgICBSZWNv
cmRlZFN0YXR1c2VzIHJlY29yZGVkU3RhdHVzZXM7CiAgICAgVmVjdG9yPEp1bXBSZXBsYWNlbWVu
dD4gbV9qdW1wUmVwbGFjZW1lbnRzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBA
CiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENv
ZGUuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IFRyYWNrZWRSZWZlcmVuY2VzOwogCitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0
cmluZ0p1bXBUYWJsZTsKKwogbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEpJVENvbXBpbGVyOwpA
QCAtMTAxLDYgKzEwNCw4IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+
IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgZmluYWw7CiAKICAgICB1c2luZyBEaXJlY3RK
SVRDb2RlOjppbml0aWFsaXplQ29kZVJlZkZvckRGRzsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFw
KiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2Rl
T3JpZ2luTWFwLmdldCgpOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRD
b21waWxlcjsgLy8gQWxsb3cgSklUQ29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCkuCkBAIC0x
MTAsNiArMTE1LDggQEAgcHVibGljOgogICAgIEZpeGVkVmVjdG9yPERGRzo6T1NSRW50cnlEYXRh
PiBtX29zckVudHJ5OwogICAgIEZpeGVkVmVjdG9yPERGRzo6T1NSRXhpdD4gbV9vc3JFeGl0Owog
ICAgIEZpeGVkVmVjdG9yPERGRzo6U3BlY3VsYXRpb25SZWNvdmVyeT4gbV9zcGVjdWxhdGlvblJl
Y292ZXJ5OworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFi
bGVzOworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzOwogICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVhbSB2YXJpYWJsZUV2ZW50U3RyZWFt
OwogICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5pZmllZERGRzsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODUsMTMgKzE4NSwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtC
dWZmZXImIGxpbmtCCiAgICAgCiAgICAgbV9ncmFwaC5yZWdpc3RlckZyb3plblZhbHVlcygpOwog
Ci0gICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkgfHwg
IW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgewotICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAoIW1f
Z3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
ID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7Ci0gICAgICAgIGlm
ICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZN
b3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKLSAgICB9CisgICAgQVNTRVJUKG1faml0
Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1f
aml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgaWYgKCFtX2dyYXBo
Lm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIAorICAgICAgICBtX2ppdENvZGUt
Pm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMpOworICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0
eSgpKQorICAgICAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9n
cmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwogCiAgICAgZm9yIChCYWc8U3dpdGNoRGF0YT46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fc3dpdGNoRGF0YS5iZWdpbigpOyAhIWl0ZXI7ICsraXRl
cikgewogICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKippdGVyOwpAQCAtMTk5LDEyICsxOTgs
MTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBj
YXNlIFN3aXRjaENoYXI6CiAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CiAgICAgICAgICAgICBp
ZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KS5pc0VtcHR5KCkp
OworICAgICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tk
YXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShk
YXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUlu
ZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENv
ZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAg
ICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dp
dGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXpl
KCkgPT0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpKTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCk7IGotLTsp
CkBAIC0yMTksMTIgKzIxOCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXIm
IGxpbmtCCiAKICAgICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6IHsKICAgICAgICAgICAgIGlmICgh
ZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxv
Y2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHko
KSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJs
ZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dp
dGNoVGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdo
LmJsb2NrLT5pbmRleF0pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua2VkVGFibGUu
bV9jdGlPZmZzZXRzLnNpemUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUuc2l6ZSgp
ICsgMSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbGlua2VkVGFibGUubV9jdGlP
ZmZzZXRzKQpAQCAtMzMzLDcgKzMzMiw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIu
ZGlkQnVpbGRNYXBwaW5nKCkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdp
bk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcikpOworICAgICAgICBtX2ppdENvZGUtPmNvbW1vbi5t
X3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92
ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpOwogfQogCiBzdGF0aWMg
dm9pZCBlbWl0U3RhY2tPdmVyZmxvd0NoZWNrKEpJVENvbXBpbGVyJiBqaXQsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYgc3RhY2tPdmVyZmxvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcs
NiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqCiAgICAgQVNTRVJU
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFT
U0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNT
RVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0
Q29kZSgpLT5kZmdDb21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIAogICAgIGlmICghT3B0aW9uczo6
dXNlT1NSRW50cnlUb0RGRygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzIsOSArNzcyLDYgQEAgdm9pZCBP
U1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIAogICAgIC8vIFRoZSB0YWcgcmVnaXN0
ZXJzIGFyZSBuZWVkZWQgdG8gbWF0ZXJpYWxpemUgcmVjb3ZlcmllcyBiZWxvdy4KICAgICBqaXQu
ZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKIAotICAgIGlmIChleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKQotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7Ci0KICAgICBpZiAoaW5saW5lU3Rh
Y2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQpIHsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIHRt
cFNjcmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CiAgICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25NYXRlcmlhbGl6ZU9TUkV4aXRTaWRlU3Rh
dGUpPigmdm0sICZleGl0LCB0bXBTY3JhdGNoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9u
IDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZH
SklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIK
QEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxs
SGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2ggKGppdC5jb2RlQmxv
Y2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAgICAgIGNs
aXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChq
aXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNs
aXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0
YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgot
ICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVk
VGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsK
KyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBl
ZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDIsMTEgKzE0Myw4IEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clQKIHsKICAgICBjYWxsZXJJ
c0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKIAot
ICAgIGlmIChjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpIHsKLSAgICAgICAgaWYgKCFj
YWxsZXJJc0xMSW50KQotICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1f
aGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CisgICAgaWYgKGNhbGxCeXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSkKICAgICAgICAgcmV0dXJuIExMSW50OjpjaGVja3BvaW50T1NSRXhpdEZyb21Jbmxp
bmVkQ2FsbFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKLSAgICB9CiAKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganVtcFRhcmdldDsKIApAQCAtMTk4LDggKzE5Niw2
IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clQKICN1bmRlZiBMTElO
VF9SRVRVUk5fTE9DQVRJT04KIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyLT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwotCiAgICAgICAgIHN3aXRj
aCAodHJ1ZUNhbGxlckNhbGxLaW5kKSB7CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpD
YWxsOgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OgpAQCAtMzEzLDYg
KzMwOSwxMCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAg
ICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1l
dGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVD
b2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpKTsKICAgICAgICAg
ICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGNhbGxlZVNhdmVTbG90
KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6OnBi
R1BSKSk7CisgICAgICAgIH0gZWxzZSBpZiAodHJ1ZUNhbGxlcikgeworICAgICAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9j
a0ZvcigqdHJ1ZUNhbGxlcik7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxl
KCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBK
SVQ6OnNfbWV0YWRhdGFHUFIpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmJhc2VsaW5lSklU
Q29uc3RhbnRQb29sKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5l
Q29kZUJsb2NrLCBKSVQ6OnNfY29uc3RhbnRzR1BSKSk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCkBAIC00MDQsNyArNDA0LDggQEAgdm9p
ZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6
OlJlZ2lzdGVyczo6cGNHUFIpOwogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0
YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGNvZGVCbG9ja0ZvckV4aXQtPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7Cisg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JF
eGl0LT5tZXRhZGF0YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRhdGFHUFIpOworICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxp
bmVKSVRDb25zdGFudFBvb2woKSksIEpJVDo6c19jb25zdGFudHNHUFIpOwogCiAgICAgICAgIEJ5
dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
OwogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRp
b247CkBAIC00MjAsMTIgKzQyMSwxNiBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYg
dm0sIENDYWxsCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JF
eGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCi0gICAgaml0LmFkZFB0
cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZv
cihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKKyAgICAgICAgQVNTRVJUKCFSZWdpc3Rl
clNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29udGFpbnMoTExJbnQ6OlJlZ2lzdGVyczo6
cGNHUFIpKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUsIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRj
aEdQUihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikpOworCiAgICAgICAgIC8vIFNpbmNlIHdlJ3Jl
IGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgog
ICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZtLmFkZHJl
c3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOwogICAgIH0KLSAgICAKKworICAgIGppdC5hZGRQdHIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Y29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCiAgICAg
aml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJ
bmZvOjpyZWdUMik7CiAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJU
YWcpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
Q2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMu
aCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAj
aW5jbHVkZSAiREZHSklUQ29kZS5oIgpAQCAtMjg2OSw3ICsyODcwLDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkZpbmRTdwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBj
b25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5kZmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5pc0RvdWJsZSgpKTsKICAgICBkb3Vi
bGUgYXNEb3VibGUgPSB2YWx1ZS5hc0RvdWJsZSgpOwpAQCAtMjg5MCw3ICsyODkxLDcgQEAgSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogCiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N0
cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICByZXR1cm4gbGlua2VkVGFibGUu
Y3RpRm9yVmFsdWUoKnVubGlua2VkVGFibGUsIHN0ckltcGwpLmV4ZWN1dGFibGVBZGRyZXNzPGNo
YXIqPigpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTczMCw2ICs3MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2Rl
KiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5Ojpp
blBhaXIoY2FsbGVlVGFnR1BSLCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIHNodWZm
bGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZs
ZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxl
RGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsK
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsr
aSkgewogICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgaSArIDEpOwpAQCAtODg5LDcgKzg5MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xv
d0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0g
aW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7
CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAg
ICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxD
YWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyOCw2ICs4
MjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVHUFIs
IERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1B
bGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBu
dW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1f
aml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAg
ICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IGkgKyAxKTsKQEAgLTk3OSw3ICs5ODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0gewogICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRh
aWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5ODUsNyArMzk4
NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmEKICAgICBSZWdp
c3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwogCiAgICAgSklU
UHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlw
ZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIHVz
ZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQs
IGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgdXNlZFJl
Z2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VHUFIpLCBKU1Zh
bHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIEludmFsaWRHUFJS
ZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9
IHRydWU7CiAKQEAgLTQ5MDUsNyArNDkwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZUFkZChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQu
Z3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRl
Y29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNl
bGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29k
ZUluZGV4KTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklU
QWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5qaXRDb2Rl
KCktPmNvbW1vbi5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGlu
Z0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0
Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkOwogICAgIApAQCAtNDk4OSw3ICs0OTg5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5vZAogICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0
aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVFN1YklDKiBz
dWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAg
IEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVFN1YklDKGFy
aXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1
ZVN1Yk9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
VmFsdWVTdWI7CiAKQEAgLTU1NzEsNyArNTU3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVWYWx1ZU5lZ2F0ZSgKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9q
aXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwog
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5i
eXRlY29kZUluZGV4KCk7CiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJh
c2VsaW5lQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJ
VE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuaml0Q29k
ZSgpLT5jb21tb24uYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hp
bmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemU7CiAgICAgYXV0byBub25S
ZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZTsKICAgICBjb21waWxlTWF0
aElDKG5vZGUsIG5lZ0lDLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlv
bik7CkBAIC01ODE1LDcgKzU4MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFs
dWVNdWwoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBo
KCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVD
b2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE11bElD
KGFyaXRoUHJvZmlsZSk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuaml0Q29kZSgpLT5j
b21tb24uYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5j
dGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5n
RnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bDsKIApAQCAtMTQ3NzAsNyArMTQ3NzAsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBzY29wZVJl
ZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
c2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIG1faml0LmNvZGVCbG9jaygpLCBj
YWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFk
b3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CiAgICAgbm9SZXN1bHQobm9k
ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgY29tcGlsZShTdGF0
ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKIAogICAgIGlmICh2bS5zaG91bGRCdWlsZGVyUENUb0Nv
ZGVPcmlnaW5NYXBwaW5nKCkpIHsKICAgICAgICAgQjM6OlBDVG9PcmlnaW5NYXAgb3JpZ2luTWFw
ID0gc3RhdGUucHJvYy0+cmVsZWFzZVBDVG9PcmlnaW5NYXAoKTsKLSAgICAgICAgY29kZUJsb2Nr
LT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQQ1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5h
bGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpKTsKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+Y29tbW9u
Lm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQQ1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5h
bGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpOwogICAgIH0KIAogICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+IGxhYmVsID0gc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVy
LT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHN0YXRlLnByb2MtPmNvZGUoKS5lbnRyeXBvaW50
TGFiZWwoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHB1YmxpYzoKICAgICBERkc6OkNvbW1v
bkRhdGEqIGRmZ0NvbW1vbigpIG92ZXJyaWRlOwogICAgIHN0YXRpYyBwdHJkaWZmX3QgY29tbW9u
RGF0YU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKSVRDb2RlLCBjb21tb24pOyB9
CiAgICAgdm9pZCBzaHJpbmtUb0ZpdChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKSBvdmVycmlk
ZTsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRl
IHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CiAgICAgCiAgICAg
REZHOjpDb21tb25EYXRhIGNvbW1vbjsKICAgICBWZWN0b3I8T1NSRXhpdD4gbV9vc3JFeGl0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MiwxNCArNTIsNiBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogCiAgICAgZ3JhcGgu
cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsKIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcy5pc0VtcHR5KCkpOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5lbnN1cmVK
SVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7Ci0gICAgfQotI2Vu
ZGlmCi0KICAgICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuIE5vdGUgdGhhdCB3ZSB1c2UgdGhp
cyBlbnRyeXBvaW50IHRvdGFsbHkgZGlmZmVyZW50bHkKICAgICAvLyBkZXBlbmRpbmcgb24gd2hl
dGhlciB3ZSdyZSBkb2luZyBPU1IgZW50cnkgb3Igbm90LgogICAgIENDYWxsSGVscGVycyBqaXQo
Y29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsNyBAQAog
I2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2lu
Y2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgi
CiAjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAj
aW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCkBAIC0yMzIwLDYgKzIzMjEsMTgg
QEAgcHJpdmF0ZToKICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+
KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24p
OwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRBZGRJQyogYWRkTWF0aElDKERG
Rzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0
dXJuIGNvbW1vbi5hZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3Rh
dGljIEpJVE11bElDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFy
aXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVE11bElDKHByb2ZpbGUp
OyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRv
cj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUTmVnSUMqIGFkZE1hdGhJQyhERkc6OkNv
bW1vbkRhdGEmIGNvbW1vbiwgVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNv
bW1vbi5hZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8
R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJ
VFN1YklDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJv
ZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisK
ICAgICB2b2lkIGNvbXBpbGVWYWx1ZU11bCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50
aWMpOwpAQCAtMjM5MSw3ICsyNDA0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAg
ICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0g
Qm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJ
VFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0
aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgICAgICBKSVRVbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0
Q29kZS0+Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9n
ZW5lcmF0b3IgPSBHZW5lcmF0b3IoSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwgSlNWYWx1
ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CiAKICAgICAgICAg
ICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKQEAgLTI1MDAsNyArMjUx
Myw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgICAgICAgICAgICAgIEJveDxNYXRoSUNHZW5l
cmF0aW9uU3RhdGU+IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9u
U3RhdGU+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBKSVRCaW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRoSUM8R2VuZXJhdG9yPihhcml0
aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBt
YXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0
aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0
b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigp
KSwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgSlNW
YWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwgcGFyYW1zLmZwU2NyYXRjaCgwKSwKICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zLmZwU2NyYXRjaCgxKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CkBA
IC00MzE3LDcgKzQzMzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgR1BSUmVnIHN0dWJJbmZv
R1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBwYXJhbXMuZ3BTY3Jh
dGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBC
b3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgaml0LmNv
ZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJ
bmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9j
aygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwg
QWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9H
UFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1i
b2wgPSB0cnVlOwpAQCAtMTAyODUsNiArMTAyOTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxsb2NhdGVk
QXJnczsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBl
bmQoVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSkpOwogICAgICAgICAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1
cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0
LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50aWNOb2RlT3JpZ2luKTsKQEAgLTEw
NDQzLDEzICsxMDQ1NywxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzaHVmZmxl
RGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgpKTsKIAog
ICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1BcmdzOworICAg
ICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCkt
Pm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKIAogICAg
ICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygp
LT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwog
Ci0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGgg
PSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAs
IFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxl
RGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgICAg
IH0pOwpAQCAtMTA3OTIsNyArMTA4MDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAg
ICAgICAgICAgICAgICAgfSk7CkBAIC0xMTA3Myw3ICsxMTA4OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWls
Q2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpy
ZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxs
U2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEzLDI4ICs0MTMsMTYgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIo
Vk0mIHZtLCB1bnNpZ25lZAogCiAgICAgUmVnaXN0ZXJTZXQgYWxsRlRMQ2FsbGVlU2F2ZXMgPSBS
ZWdpc3RlclNldDo6ZnRsQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIGNvbnN0IFJlZ2lzdGVy
QXRPZmZzZXRMaXN0KiBiYXNlbGluZUNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNh
bGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogdm1DYWxsZWVT
YXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKLSAgICBS
ZWdpc3RlclNldCB2bUNhbGxlZVNhdmVzVG9Ta2lwID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0
ZXJzKCk7Ci0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgaml0
LmxvYWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZl
UmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgfQogCiAgICAg
Zm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJl
Zy5uZXh0KCkpIHsKICAgICAgICAgaWYgKCFhbGxGVExDYWxsZWVTYXZlcy5nZXQocmVnKSkgewot
ICAgICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIXZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKSk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCB1bndpbmRJbmRleCA9IGNv
ZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5pbmRleE9mKHJlZyk7CiAgICAgICAgIGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPSBiYXNlbGluZUNh
bGxlZVNhdmVzLT5maW5kKHJlZyk7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIHZtQ2FsbGVl
U2F2ZSA9IG51bGxwdHI7IAotICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkK
LSAgICAgICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKTsKIAog
ICAgICAgICBpZiAocmVnLmlzR1BSKCkpIHsKICAgICAgICAgICAgIEdQUlJlZyByZWdUb0xvYWQg
PSBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8gR1BSSW5mbzo6cmVnVDAgOiByZWcuZ3ByKCk7Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWdUb0xvYWQgIT0gR1BSSW5mbzo6cmVnVDEpOwog
CiAgICAgICAgICAgICBpZiAodW53aW5kSW5kZXggPT0gVUlOVF9NQVgpIHsKICAgICAgICAgICAg
ICAgICAvLyBUaGUgRlRMIGNvbXBpbGF0aW9uIGRpZG4ndCBwcmVzZXJ2ZSB0aGlzIHJlZ2lzdGVy
LiBUaGlzIG1lYW5zIHRoYXQgaXQgYWxzbwpAQCAtNDUyLDggKzQ0MCw2IEBAIHN0YXRpYyB2b2lk
IGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAogICAgICAgICAgICAgaWYgKGJhc2VsaW5l
UmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQocmVnVG9Mb2FkLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0
ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQtPm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAo
dm1DYWxsZWVTYXZlICYmICF2bUNhbGxlZVNhdmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNhdmUtPnJl
ZygpKSkKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBGUFJSZWcgZnBSZWdUb0xvYWQgPSBiYXNlbGlu
ZVJlZ2lzdGVyT2Zmc2V0ID8gRlBSSW5mbzo6ZnBSZWdUMCA6IHJlZy5mcHIoKTsKIApAQCAtNDY0
LDE5ICs0NTAsOSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkCiAK
ICAgICAgICAgICAgIGlmIChiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQogICAgICAgICAgICAgICAg
IGppdC5zdG9yZURvdWJsZShmcFJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFj
cm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0
LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKHZtQ2FsbGVlU2F2ZSAmJiAhdm1DYWxsZWVT
YXZlc1RvU2tpcC5nZXQodm1DYWxsZWVTYXZlLT5yZWcoKSkpCi0gICAgICAgICAgICAgICAgaml0
LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldCogdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChHUFJJbmZvOjpudW1iZXJU
YWdSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lz
dGVyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZl
LT5vZmZzZXQoKSkpOwotCi0gICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZp
bmQoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQ
UkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7Ci0gICAgfQotCiAgICAgc2l6ZV90
IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxv
Y2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogCiAgICAgaWYgKGV4aXQu
bV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5y
Ygkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAg
ZGVmIHN0cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBj
b252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRP
ZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVzLm1h
cCBkbyB8ZmllbGROYW1lfAorICAgICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLi0xXX0oKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAg
ICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisgICAgICAgIGVuZAorCisgICAgICAgIGRlZiBjb252
ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBmaWVsZE5hbWVzKQogICAgICAgICAgICAgZmllbGRz
Lm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBI
YXNoCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVs
ZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAgICAg
ICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywg
dHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZpeH19OyIKICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkLnRvX3N9
OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmllbGQudG9fcworICAgICAgICAg
ICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2goZmllbGROYW1lKQorICAgICAgICAgICAgICAgICAg
ICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZE5hbWV9OyIKICAgICAgICAgICAgICAg
ICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVuZAogCi0gICAgICAg
IGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcykKKyAgICAgICAgZmll
bGROYW1lcyA9IFtdCisgICAgICAgIHByZWZpeCA9ICIgICAgICAgICIKKyAgICAgICAgZmllbGRz
ID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBmaWVsZHMsIGZpZWxkTmFtZXMpCisgICAgICAgIGZp
ZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwg
ZmllbGROYW1lcykKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBpZiBAaW5pdGlhbGl6
ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2Nyw2ICszNjcsMjggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRQcm9wZXJ0
eShHUFJSZQogICAgICAgICByZXN1bHQpOwogfQogCit2b2lkIEFzc2VtYmx5SGVscGVyczo6c3Rv
cmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNl
dCwgR1BSUmVnIHNjcmF0Y2gpCit7CisgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NU
aGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgIAor
ICAgIGxvYWRQdHIoQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2gpOworICAgIG5lZzMyKG9mZnNldCk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zm
c2V0LCBvZmZzZXQpOworICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CisgICAgCisgICAgaXNJbmxp
bmUubGluayh0aGlzKTsKKyAgICBhZGRQdHIoCisgICAgICAgIFRydXN0ZWRJbW0zMigKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihKU09iamVjdCkpIC0KKyAgICAgICAg
ICAgIChzdGF0aWNfY2FzdDxpbnQzMl90PihmaXJzdE91dE9mTGluZU9mZnNldCkgLSAyKSAqIHN0
YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSwKKyAgICAgICAgb2Jq
ZWN0LCBzY3JhdGNoKTsKKyAgICAKKyAgICByZWFkeS5saW5rKHRoaXMpOworICAgIAorICAgIHN0
b3JlVmFsdWUodmFsdWUsCisgICAgICAgIEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkpOworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdExvYWRTdHJ1Y3R1cmUoVk0mIHZt
LCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gp
CiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY5OCw4ICs3MjAsMTMgQEAgdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExp
bmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6
cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpy
ZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwg
aW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0
TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9
IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNCw4ICsyMzQsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAg
Ly8gTm90ZSB0aGF0IHRoaXMgY2xvYmJlcnMgb2Zmc2V0LgorICAgIC8vIE5vdGUgdGhhdCB0aGVz
ZSBjbG9iYmVyIG9mZnNldC4KICAgICB2b2lkIGxvYWRQcm9wZXJ0eShHUFJSZWcgb2JqZWN0LCBH
UFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpOworICAgIHZvaWQgc3RvcmVQcm9wZXJ0
eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNldCwgR1BSUmVn
IHNjcmF0Y2gpOwogCiAgICAgdm9pZCBtb3ZlVmFsdWVSZWdzKEpTVmFsdWVSZWdzIHNyY1JlZ3Ms
IEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAgIHsKQEAgLTM3OSwxNSArMzgwLDI2IEBAIHB1Ymxp
YzoKICNlbmRpZgogICAgIH0KIAorICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUsIEdQUlJlZyBzY3Jh
dGNoKQorICAgIHsKKyNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKKyAg
ICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwgc2NyYXRjaCk7CisgICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChzY3JhdGNoKTsKKyNlbHNl
CisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKHNjcmF0Y2gpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlGcmFtZSkK
ICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAg
IGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH07CiAgICAgICAgIEdQUlJlZyB0ZW1wMSA9IHVzZWRS
ZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwg
dGVtcDEpOwotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlckltcGwodGVtcDEpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CiAjZWxzZQogICAgICAgICBVTlVT
RURfUEFSQU0odG9wRW50cnlGcmFtZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZy
YW1lKTsKICNlbmRpZgogICAgIH0KICAgICAKQEAgLTE3MjAsNiArMTczMiw3IEBAIHB1YmxpYzoK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVj
dCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmlu
Z0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOwogICAgIAogICAgIHZvaWQgbWFrZVNw
YWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0Nh
bGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29k
ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGlu
ZUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1
ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgorI2luY2x1ZGUgIlN0cnVj
dHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKSVRBZGRJQyogTWF0aElDSG9s
ZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1
cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE11bElDKiBNYXRoSUNIb2xkZXI6
OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBt
X211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUU3ViSUMqIE1hdGhJQ0hvbGRlcjo6YWRk
SklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3Vi
SUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVROZWdJQyogTWF0aElDSG9sZGVyOjphZGRKSVRO
ZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5h
ZGQoYXJpdGhQcm9maWxlKTsgfQorCit2b2lkIE1hdGhJQ0hvbGRlcjo6YWRvcHRNYXRoSUNzKE1h
dGhJQ0hvbGRlciYgb3RoZXIpCit7CisgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRk
SUNzKTsKKyAgICBtX211bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAgIG1fbmVn
SUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90
aGVyLm1fc3ViSUNzKTsKK30KKworQmFzZWxpbmVKSVRDb2RlOjpCYXNlbGluZUpJVENvZGUoQ29k
ZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0
eUNoZWNrKQorICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVj
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgLCBNYXRoSUNIb2xkZXIoKQoreyB9CisKK0Jh
c2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiSklUQ29k
ZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKKworI2lmIEVOQUJMRShKSVQpCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBCaW5hcnlBcml0aFByb2ZpbGU7CitjbGFzcyBVbmFyeUFyaXRo
UHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFNpbXBs
ZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKK2NsYXNzIE1hdGhJQ0hvbGRl
ciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcik7
CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJ
VE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRTdWJJQyog
YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTmVnSUMqIGFkZEpJVE5l
Z0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CisKK3ByaXZhdGU6CisgICAgQmFnPEpJVEFkZElDPiBt
X2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4g
bV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKK307CisKK2NsYXNzIEpJVENv
bnN0YW50UG9vbCB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29uc3RhbnQgPSB1bnNpZ25lZDsKKwor
ICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBHbG9iYWxPYmplY3QsCisg
ICAgICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8sCisgICAgICAg
IEZ1bmN0aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rpb25FeHByLAorICAgIH07CisKKyAgICBzdHJ1
Y3QgVmFsdWUgeworICAgICAgICBUeXBlIHR5cGU7CisgICAgICAgIFBhY2tlZFB0cjx2b2lkPiBw
YXlsb2FkOworICAgIH07CisKKyAgICBKSVRDb25zdGFudFBvb2woKSA9IGRlZmF1bHQ7CisgICAg
SklUQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisgICAgSklUQ29u
c3RhbnRQb29sJiBvcGVyYXRvcj0oSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKworICAg
IENvbnN0YW50IGFkZChUeXBlIHR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxscHRyKQorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudHMuc2l6ZSgpOworICAgICAgICBt
X2NvbnN0YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBlLCBwYXlsb2FkIH0pOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9j
b25zdGFudHMuc2l6ZSgpOyB9CisgICAgVmFsdWUgYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRzW2ldOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0
YW50czsKK307CisKKworY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENv
ZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIEJhc2VsaW5lSklUQ29kZShD
b2RlUmVmPEpTRW50cnlQdHJUYWc+LCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNo
ZWNrKTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisgICAgUENUb0NvZGVPcmln
aW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1RvQ29kZU9y
aWdpbk1hcC5nZXQoKTsgfQorCisgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlu
a2VkQ2FsbHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAg
ICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAg
ICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBG
aXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAg
ICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFu
dFBvb2w7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2Rl
T3JpZ2luTWFwOworICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6
ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUo
KQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWlu
VGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVP
bk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2Fz
ZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVC
bG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93
Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9p
ZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxl
ZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0
b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihj
b2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0No
aWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNh
bGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRP
RihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0Nh
bGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRv
d1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAg
ICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAg
LTcyLDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEK
ICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikpOwogfQog
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6
OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1Zh
bHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFj
a2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Cisg
ICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9yZVB0cihz
Y29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9j
aykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3Ms
IEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93
UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisK
K3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hh
ZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29k
ZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxv
Y2ssIGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVP
dmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVk
TGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlw
dGlvbikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQw
LDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0
aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Ag
b2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxv
Z1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcg
c2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BS
UmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQ
UlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRy
dXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworICAg
IHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVy
IHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2
b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBH
UFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxGcmFt
ZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBjYWxs
ZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07
Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9
IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJl
Z2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0
YS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMyBAQCBwdWJs
aWM6CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWduZWQgbnVtTG9j
YWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsgVUlOVF9NQVgg
fTsKKyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8gT24gb3VyIG1h
Y2hpbmUgZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1hcDxWYWx1ZVJl
Y292ZXJ5PiByZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVyIHsgSW52YWxp
ZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2Nr
Kik7CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwogfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENhbGxGcmFtZVNo
dWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkKICAgICAsIG1f
b2xkRnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3Rl
cnMsIG51bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25lZE9sZEZy
YW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAgICAgICArIHJvdW5k
QXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSkpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnMgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5udW1QYXJhbWV0
ZXJzKSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJ
blJlZ2lzdGVycwogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRh
LmFyZ3Muc2l6ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUg
LSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3Rl
clNldDo6YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNz
ZWRBcmdzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykKIHsKICAg
ICAvLyBXZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAgIGZvciAo
dW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3
ICs0MjEsNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhCiAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFt
ZUJhc2UpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9CiAgICAg
ICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fbmV3RnJh
bWVCYXNlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5j
b2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAgIG1faml0LmFkZDMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBt
X2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudFJl
Z2lzdGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVCYXNlLCBtX25l
d0ZyYW1lQmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlci5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAgICAgIGRh
dGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2VkQXJncyA9
IG1fbnVtUGFzc2VkQXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9udW1QYXJh
bWV0ZXJzOwogICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBD
YWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5y
ZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291
bnQoKTsgKytpKQpAQCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwZXJmb3Jt
U2FmZVdyaXRlcygpOwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7IFVJTlRf
TUFYIH07CisgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Qnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJbnRlcmZh
Y2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51bGxwdHIp
CiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29k
ZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwgbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGlu
ZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAgIG1fcHJv
ZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9jayA9IGNv
ZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTkwLDgg
KzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNraXBPcHRp
bWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhl
Y3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lwT3B0aW1p
emUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1
dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21G
cmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5
RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMjAgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShX
YXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRl
QWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0
KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1Nl
dCkKIHsKKyAgICBhdXRvIG9rID0gYnJhbmNoVGVzdFB0cihaZXJvLCBwb2ludGVyVG9TZXQpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBX
YXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpKTsKKyAgICBvay5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5
Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCit2b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5
Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAg
IGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFyUmVhZE9u
bHlXYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBl
ID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIs
IE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJSZWFkT25seVdhdGNocG9pbnQp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJl
c3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQ
b2ludGVyT2Zmc2V0KCkKQEAgLTEyOSwxMiArMTM3LDE4IEBAIHZvaWQgSklUOjphc3NlcnRTdGFj
a1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Qw
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKK3Zv
aWQgSklUOjpyZXNldFNQKCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7Cit9CisKICNkZWZpbmUgTkVYVF9PUENPREUobmFtZSkgXAogICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpICsg
Y3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyBcCiAgICAgYnJlYWs7CkBAIC0xODEsNjEgKzE5
NSw0NCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjCiAgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1l
SW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JS
YXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBicmFuY2hUZXN0
UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgcmVz
dWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYgKG1fdW5saW5rZWRD
b2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3Vs
dCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpKSwg
cmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCByZXN1bHQpOworCisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6b2Zm
c2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICB9KTsKKyNlbmRpZgorfQorCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBk
YXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgZGF0YUxv
ZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4iKTsKICAgICAKICAgICBq
aXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCk7
CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAKICAgICBtX2NhbGxM
aW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJsb2NrLT52bSgpOwogICAg
IEJ5dGVjb2RlSW5kZXggc3RhcnRCeXRlY29kZUluZGV4KDApOwotICAgIGlmIChtX2xvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1fY29kZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJs
b2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmluaGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+
KHZtKSkpIHsKLSAgICAgICAgLy8gV2UgY2FuIG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVj
YXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2RlQmxvY2sncyBleGFjdGx5IG9uY2UuCi0gICAgICAg
IC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxkIGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRo
ZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRzIHRvCi0gICAgICAgIC8vIGRvIE9TUiBlbnRyeSBp
bnRvIHRoZSBiYXNlbGluZSBKSVQgaW4gYSBsb29wLCBpdCB3aWxsIHBhc3MgaW4gdGhlIGJ5dGVj
b2RlIG9mZnNldCBpdAotICAgICAgICAvLyB3YXMgZXhlY3V0aW5nIGF0IHdoZW4gaXQga2lja2Vk
IG9mZiBvdXIgY29tcGlsYXRpb24uIFdlIG9ubHkgbmVlZCB0byBjb21waWxlIGNvZGUgZm9yCi0g
ICAgICAgIC8vIGFueXRoaW5nIHJlYWNoYWJsZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0Lgot
Ci0gICAgICAgIC8vIFdlIG9ubHkgYm90aGVyIGJ1aWxkaW5nIHRoZSBieXRlY29kZSBncmFwaCBp
ZiBpdCBjb3VsZCBzYXZlIHRpbWUgYW5kIGV4ZWN1dGFibGUKLSAgICAgICAgLy8gbWVtb3J5LiBX
ZSBwaWNrIGFuIGFyYml0cmFyeSBvZmZzZXQgd2hlcmUgd2UgZGVlbSB0aGlzIGlzIHByb2ZpdGFi
bGUuCi0gICAgICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0g
MjAwKSB7Ci0gICAgICAgICAgICAvLyBBcyBhIHNpbXBsaWZpY2F0aW9uLCB3ZSBkb24ndCBmaW5k
IGFsbCBieXRlY29kZSByYW5nZXMgdGhhdCBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAv
LyBJbnN0ZWFkLCB3ZSBqdXN0IGZpbmQgdGhlIG1pbmltdW0gYnl0ZWNvZGUgb2Zmc2V0IHRoYXQg
aXMgcmVhY2hhYmxlLCBhbmQKLSAgICAgICAgICAgIC8vIGNvbXBpbGUgY29kZSBmcm9tIHRoYXQg
Ynl0ZWNvZGUgb2Zmc2V0IG9ud2FyZHMuCi0KLSAgICAgICAgICAgIEJ5dGVjb2RlR3JhcGggZ3Jh
cGgobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAgICAgICAg
ICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRl
Y29kZU9mZnNldChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2spOwotCi0gICAgICAgICAgICBHcmFwaE5vZGVXb3Jr
bGlzdDxCeXRlY29kZUJhc2ljQmxvY2sqPiB3b3JrbGlzdDsKLSAgICAgICAgICAgIHN0YXJ0Qnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHdvcmtsaXN0LnB1c2go
YmxvY2spOwotCi0gICAgICAgICAgICB3aGlsZSAoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9
IHdvcmtsaXN0LnBvcCgpKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRCeXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleChzdGQ6Om1pbihzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGJsb2Nr
LT5sZWFkZXJPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vz
c29ySW5kZXggOiBibG9jay0+c3VjY2Vzc29ycygpKQotICAgICAgICAgICAgICAgICAgICB3b3Jr
bGlzdC5wdXNoKCZncmFwaFtzdWNjZXNzb3JJbmRleF0pOwotCi0gICAgICAgICAgICAgICAgLy8g
QWxzbyBhZGQgY2F0Y2ggYmxvY2tzIGZvciBieXRlY29kZXMgdGhhdCB0aHJvdy4KLSAgICAgICAg
ICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgewot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2st
PmxlYWRlck9mZnNldCgpOyBieXRlY29kZU9mZnNldCA8IGJsb2NrLT5sZWFkZXJPZmZzZXQoKSAr
IGJsb2NrLT50b3RhbExlbmd0aCgpOykgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBp
bnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZU9mZnNldCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYXV0byogaGFuZGxlciA9IG1fY29kZUJsb2NrLT5oYW5kbGVyRm9y
Qnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChncmFwaC5maW5kQmFzaWNCbG9ja1dpdGhM
ZWFkZXJPZmZzZXQoaGFuZGxlci0+dGFyZ2V0KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGJ5dGVjb2RlT2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CiAgICAgZm9yIChtX2J5
dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkg
PCBpbnN0cnVjdGlvbkNvdW50OyApIHsKQEAgLTI3OCwxMiArMjc1LDE1IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAo
UHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bj
b2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChvcGNvZGVJRCAhPSBv
cF9jYXRjaCkKKyAgICAgICAgICAgIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOworCiAgICAg
ICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKICAg
ICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQpAQCAtNTI3LDcgKzUyNyw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJz
dFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29k
ZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJ
bmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUg
Zm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQo
KSk7CkBAIC01NDUsOCArNTQ1LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2Vz
KCkKIAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1
dGlvbigpKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
Y29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBj
dHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxs
RnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBb
IiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNm
ciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQpAQCAtNjAzLDcgKzYwMyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfdmFs
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X2lkKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3Bfc3ViKQotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2Zy
b21fc2NvcGUpCiAjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3B1dF90b19z
Y29wZSkKQEAgLTY3NCw1NSArNjc0LDU1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAjZW5kaWYKIH0KIAordm9pZCBKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5k
Q29uc3RhbnRQb29sUmVnaXN0ZXJzKCkKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
Q29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHNfbWV0YWRhdGFHUFIpOworICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJl
Z1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zm
c2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKQoreworICAgIEJhc2U6OmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6Q2FwYWJpbGl0eUxl
dmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOworICAgIERGRzo6Q2Fw
YWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVs
KCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgog
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFs
c2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2Ug
REZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1
ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1f
c2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7Ci0gICAg
Y2FzZSBHbG9iYWxDb2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToKLSAgICBjYXNlIEV2YWxDb2Rl
OgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAgIC8vIFdlIGNv
dWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1
bmlubGluZWFibGUgY2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZh
dGlvbi4KLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNh
bklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29kZUJsb2NrKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8
U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBU
YWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5n
SnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
d2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1f
c3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV91bmxpbmtl
ZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgICAg
IGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRW
ZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
ciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKQotICAgICAg
ICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX2NvZGVCbG9j
ayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3Zt
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZv
clByb2ZpbGVyKCkpKSkgeworICAgICAgICAvLyBGSVhNRTogYnVpbGQgYSBkaXNhc3NlbWJsZXIg
b2ZmIG9mIFVubGlua2VkQ29kZUJsb2NrLgorICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VV
bmlxdWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICB9CiAgICAg
aWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpIHsKKyAgICAgICAgLy8g
RklYTUU6IGJ1aWxkIHByb2ZpbGVyIGRpc2Fzc2VtYmxlciBvZmYgVW5saW5rZWRDb2RlQmxvY2su
CiAgICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAgICAgICAgIG5ldyBQcm9m
aWxlcjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAorICAgICAgICAgICAgICAg
IG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fcHJvZmls
ZWRDb2RlQmxvY2spLAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpCYXNlbGluZSkpOwotICAg
ICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFBy
b2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fcHJvZmlsZWRD
b2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5h
cHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwpAQCAtNzQy
LDExICs3NDIsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgog
ICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
OworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKCk7CiAKICAgICBM
YWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAgaW50
IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUgPSAtZnJh
bWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9mZnNldCksIGNh
bGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxvdzsKQEAg
LTc1NywxNiArNzU4LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6
aW4KICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsKKyAgICBl
bWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdp
c3RlcnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lz
dGVycygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkgeworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9u
Q29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChz
aG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1l
bnQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAmJiAoIW1fdW5saW5rZWRD
b2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMo
KSArIEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIp
OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBt
X3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAg
ICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBw
dXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBrZWVw
IHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQg
dGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25z
dHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArNzgyLDEyIEBA
IHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZz
ZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3Mu
dGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVn
VDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNl
dE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlw
ZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQogICAg
ICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2Vy
KSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MDQsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7
CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxs
RnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9y
LCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2Ug
bmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9
IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2RlQmxvY2st
PmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgeworICAg
IGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0g
RnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hl
Y2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxv
Y2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1l
SW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJl
c3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkpOwog
CiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJl
Z1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhi
ZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwg
VHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtU
byhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29k
ZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkK
ICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29k
ZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDog
b3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3Io
KSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVj
aywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMy
KFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04Mzks
NyArODQ3LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAg
ICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6
dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ss
IExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBtX2xpbmtC
dWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMs
IG1fdW5saW5rZWRDb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBl
ZmZvcnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4NjYsOCBAQCB2b2lkIEpJVDo6
bGluaygpCiAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAgICAgICAgY2FzZSBTd2l0
Y2hSZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rl
cjogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2st
PnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAg
ICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVs
dE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2Vk
VGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEs
OCArODc5LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBT
d2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBj
dGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJl
bHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAg
Zm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMo
KSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNo
T2Zmc2V0OwpAQCAtOTA2LDYgKzkxNCwyNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCByZWNvcmQuY2FsbGVlKTsKICAgICB9CiAK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGF1dG8gZmluYWxpemVJQ3MgPSBbJl0gKGF1dG8mIGdl
bmVyYXRvcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5lcmF0b3JzKSB7CisgICAg
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsKKyAgICAgICAgICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1fZG9uZSk7CisgICAgICAgICAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zbG93UGF0aEJlZ2luKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX2dldEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkc1dpdGhUaGlzKTsKKyAg
ICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5VmFscyk7
CisgICAgZmluYWxpemVJQ3MobV9kZWxCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeVZh
bHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5
VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9mcyk7CisgICAgZmluYWxpemVJQ3Mo
bV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7CisjZWxzZQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVz
KG1fZ2V0QnlJZHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dl
dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJ
ZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIpOwpAQCAtOTE3LDIxICs5NDYsMjUgQEAgdm9pZCBKSVQ6
OmxpbmsoKQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeVZhbHMsIHBhdGNoQnVmZmVy
KTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNlT2ZzLCBwYXRjaEJ1ZmZlcik7
CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgcGF0Y2hC
dWZmZXIpOworI2VuZGlmCiAKICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2Fs
bENvbXBpbGF0aW9uSW5mbykgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIFVubGlua2Vk
Q2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxpbmtlZENhbGxMaW5rSW5m
bzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pOworI2Vsc2UKICAg
ICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87
CiAgICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKICAgICAgICAgICAgIHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQYXRoU3Rh
cnQpLAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
Pihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CisjZW5kaWYKKwogICAgIH0KIAotICAg
IHsKLSAgICAgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFi
ZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgewotICAgICAgICAgICAgaWYgKG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGppdENvZGVNYXBCdWls
ZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKLSAgICAg
ICAgfQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChqaXRDb2RlTWFwQnVpbGRl
ci5maW5hbGl6ZSgpKTsKKyAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsK
KyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBt
X2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKKyAgICAgICAgaWYgKG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQorICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIu
YXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwogICAgIH0KIAog
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkpIHsKQEAgLTk0MCwy
NiArOTczLDQyIEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFko
bV9jb21waWxhdGlvbikpIHsKKyAgICAgICAgLy8gRklYTUU6IHNob3VsZCB3ZSBtYWtlIHRoZSBi
eXRlY29kZSBwcm9maWxlciBrbm93IGFib3V0IFVubGlua2VkQ29kZUJsb2NrPwogICAgICAgICBp
ZiAoT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpCiAgICAgICAgICAg
ICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9uLmdldCgpLCBw
YXRjaEJ1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29t
cGlsYXRpb24obV9jb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAgICAgICAgbV92bS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2ZpbGVkQ29kZUJsb2NrLCAq
bV9jb21waWxhdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyLmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFr
ZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlciksIHBhdGNoQnVmZmVyKTsKICAgICAKKyAgICAvLyBGSVhNRTogTWFrZSBhIHZlcnNpb24g
b2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBVbmxpbmtlZENvZGVCbG9j
ay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUoCiAg
ICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgSklU
IGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJCYXNlbGluZSBKSVQg
Y29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wcm9maWxlZENv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2ppdENv
ZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IEJh
c2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENvZGUt
Pm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2ppdENv
ZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOwor
ICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1vdmUobV91bmxpbmtlZFN0
dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1f
c3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5t
X2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOworICAgIG1faml0Q29k
ZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2RlLT5tX2NvbnN0YW50UG9v
bCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgbV9q
aXRDb2RlLT5tX2lzU2hhcmVhYmxlID0gbV9pc1NoYXJlYWJsZTsKKyNlbHNlCisgICAgbV9qaXRD
b2RlLT5tX2lzU2hhcmVhYmxlID0gZmFsc2U7CisjZW5kaWYKIAogICAgIGlmIChKSVRJbnRlcm5h
bDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAg
YXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+
c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51
bnRhZ2dlZFB0cigpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3Ig
JXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2VkQ29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJs
ZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5
KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OmZp
bmFsaXplT25NYWluVGhyZWFkKCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1h
aW5UaHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlz
Q29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTk2OCwyNSArMTAxNywxNCBAQCBDb21waWxhdGlv
blJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyCiAKICAgICBtX2xpbmtCdWZmZXItPnJ1bk1h
aW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCi0gICAgewotICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBtX2NvZGVCbG9j
ay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmsp
OwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJl
ck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7Ci0gICAgICAgIEhhbmRsZXJJbmZvJiBoYW5k
bGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgIC8vIEZJWE1F
OiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgotICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUg
PSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRh
cmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7Ci0gICAgfQotCiAgICAg
aWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29k
ZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKKyAgICAgICAgbV9qaXRD
b2RlLT5tX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKTsK
IAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJ
VC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgpKSAv
Ci0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1Np
emUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2st
Pmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUobV9q
aXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5r
ZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJu
IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTAzNiwxMSBAQCBzaXplX3Qg
SklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZlci0+c2l6ZSgpOwog
fQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9u
RWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBk
b01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhy
ZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVCbG9jayk7CiB9CiAK
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKQEAgLTEwNDIsMTgg
KzEwODAsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwogICAg
ICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQ
cmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZy
YW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7
CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJPZmZz
ZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZv
cihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVSZWdpc3RlckNvdW50
Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2ludCBKSVQ6OnN0YWNr
UG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJs
b2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9pbnRlck9mZnNldEZv
cihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNoTWFwPENTdHJpbmcs
IFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3RyaW5n
LCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9u
IDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWws
IGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBP
ZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNf
Y2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAorI2luY2x1
ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUg
IkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgpAQCAtNDQs
NiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hp
ZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgorI2luY2x1ZGUgIkxM
SW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiVW51
c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTE0OSwxNCArMTUx
LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0
aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0Owog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5m
bzsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFu
dDsKKyNlbHNlCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0Owog
ICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyNlbmRpZgogICAgIH07CiAKICAg
ICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNz
IEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAg
Y2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewog
ICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xh
c3MgSklUU3R1YkNhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEs
NiArMTc4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhl
IGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9m
ZnNldC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9m
ZnNldCA9IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAg
ICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29k
ZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAg
ICAgICAgIH5KSVQoKTsKQEAgLTE3OCwyOCArMTg3LDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAg
ICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZv
cnQpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOwor
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sq
KTsKICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01h
aW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0
YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9m
ZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBK
SVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7
CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5w
cml2YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAorICAgICAgICBz
dGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7
CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2Nr
Kik7CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29k
ZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVC
bG9jayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJp
bmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21waWxlVGltZSgpOwogCisgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0
YVRhYmxlR1BSOworICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX2NvbnN0YW50c0dQ
UiA9IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVM
aW5rUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAg
ICAgIHZvaWQgbGluaygpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGls
ZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZh
dGVDb21waWxlKENvZGVCbG9jayosIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAv
LyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVj
ay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gZnVuY3Rpb24pCkBAIC0yMjMsNiArMjM3LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
ICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
ICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlw
ZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVn
LCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVi
bGljOgorICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBH
UFJSZWcpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJS
ZWcpOworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIs
IEdQUlJlZyk7CisKKyAgICAgICAgdm9pZCBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9n
dWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1QwKTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNr
KEp1bXAganVtcFRvSGFuZGxlcikKICAgICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25D
aGVja3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpAQCAtMjU0LDYgKzI5NCwxOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgorICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAorICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9
IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MK
KyAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBP
cDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCisgICAgICAgICwg
dm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KKyAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKKyAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9
PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdz
CisgICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
T3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cworICAgICAgICAs
IHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CisjZWxzZQogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNv
ZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92
YXJhcmdzCkBAIC0yNjUsOSArMzE4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
T3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29u
c3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzCiAgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlu
a0luZm8qKTsKKyNlbmRpZgogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAg
ICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3Qg
T3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yODcsMTQgKzM0MSwxMyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBl
bWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3Jp
dGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcik7CiAKICAg
ICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVn
VDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShW
YWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVn
KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29k
ZSYsIEdQUlJlZyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1ZhbHVlUmVncyk7CiAjZWxz
ZQogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNW
YWx1ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOwpAQCAtMzA1LDggKzM1
OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2
YWx1ZSwgdm9pZD4KICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNv
ZGUoT3AgYnl0ZWNvZGUpOwogCi0gICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVn
aXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJl
Z2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BS
LCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01OTMsNyArNjQ4LDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29w
X2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwpAQCAtNjExLDcgKzY2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICNlbmRpZgogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNywxNCArNjgxLDE0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAog
ICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBl
KTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwg
QWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdp
c3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHks
IEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlD
aGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgZW1pdFZh
clJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICAgICAgICAg
dm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7
CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQpA
QCAtNjQ2LDcgKzcwMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQg
ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFu
ZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAg
ICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZv
aWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAg
ICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NSw2ICs3MDksNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdp
c3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxS
ZWdpc3Rlcik7CkBAIC02NzYsMTMgKzczMSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlz
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcihWTSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0
X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5l
cmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZN
Jik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdl
bmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJf
aGFuZGxlckdlbmVyYXRvcihWTSYpOwpAQCAtNjk2LDMyICs3NDksMTYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZh
cik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRP
UihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3Io
Vk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0K
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9w
R2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0K
LSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2Nv
cGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1v
ZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4g
dXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3
ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAgICAgICAg
ICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVU
eXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JFU09MVkVf
U0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlw
ZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJF
X1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9H
RU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKTsKLQogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3Io
Vk0mKTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCisgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGVHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJik7
CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdl
bmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+
LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mLCBz
dGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKwogICAg
ICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207CkBAIC03NjAs
MTAgKzc5NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAg
dm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChBZGRyZXNz
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIEFk
ZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBCeXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYs
IGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNv
bnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAg
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBB
cmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5
cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIxLDIwICs4NTgsMjAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJh
dGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAg
ICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1
bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAg
ICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShi
eXRlY29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lLi4u
IEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1l
IEJ5dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1
bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0gICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgdGFyZ2V0
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgdGFyZ2V0
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5cGU+KHRhcmdl
dCwgYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRkcmVzcyhHUFJJbmZv
Ojpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxl
KGJ5dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCBy
ZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9u
VHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOSwyNSArOTU2LDIyIEBAIG5hbWVzcGFjZSBK
U0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQo
KSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAg
ICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2Zp
bGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBm
YWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRp
ZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFs
bCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygp
IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGVtaXRNYXRlcmlhbGl6
ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgdm9pZCBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGls
ZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUg
bWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNpc3Rl
bnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRo
aXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVl
IHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJ
bmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgot
ICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsK
KworICAgICAgICB2b2lkIHJlc2V0U1AoKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRl
cnByZXRlcjsKIApAQCAtOTY0LDkgKzk5OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hS
ZWNvcmQ+IG1fc3dpdGNoZXM7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+
IG1fY29waWVkR2V0UHV0SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEJpbmFyeUFy
aXRoUHJvZmlsZT4gbV9jb3BpZWRBcml0aFByb2ZpbGVzOwotCiAgICAgICAgIEp1bXBMaXN0IG1f
ZXhjZXB0aW9uQ2hlY2tzOwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhD
YWxsRnJhbWVSb2xsYmFjazsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMDAw
LDExICsxMDMxLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoTWFwPGNvbnN0IElu
c3RydWN0aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6
ZWQ7Ci0gICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9v
bCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NS
RW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgICAgIFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2pp
dENvZGU7CisgICAgICAgIENvZGVCbG9jayogbV9wcm9maWxlZENvZGVCbG9jayB7IG51bGxwdHIg
fTsKKyAgICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fdW5saW5rZWRDb2RlQmxvY2sgeyBudWxs
cHRyIH07CisKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRy
PEJhc2VsaW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50UG9vbCBt
X2NvbnN0YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2Jh
bE9iamVjdENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07
CisgICAgICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAg
ICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgICAgICBCYWc8
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICAgICAg
Rml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAg
IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwor
CisgICAgICAgIHN0cnVjdCBOb3RBQ29kZUJsb2NrIHsgfSBtX2NvZGVCbG9jazsKKworICAgICAg
ICBib29sIG1faXNTaGFyZWFibGUgeyB0cnVlIH07CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENo
YXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewogICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBh
cmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1l
bnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
CiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEp
OwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52
ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOwor
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBl
bWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91
YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRh
KG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVROZWdJ
QyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBt
X2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOwog
ICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25W
YWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
bkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5
MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQg
SklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwot
ICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2Zp
bGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3MuYWRkSklUQWRkSUMoYXJp
dGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7
CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5h
cnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0
ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRl
ZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRj
aEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBz
cmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncywgYXJp
dGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hH
UFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUsMTAgKzEwMjEsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgICAgICBlbHNlIGlmIChy
aWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChz
Y3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNo
R1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxl
ZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
bm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJp
Z2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwxMyArMTA2MiwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1p
dFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxk
U2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVk
SW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVn
VDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAg
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3Ms
IGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0
PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywg
VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAg
IGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwxMyArMTEyOCwxNCBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAjZW5kaWYKIAogICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNo
b3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nh
c3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2Zp
bGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9u
X0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dK
Sk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFU
UykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExNjYsNyArMTE3NSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBTbmlwcGV0T3BlcmFu
ZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlw
cGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkp
OwpAQCAtMTIxMSw4ICsxMjIwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3Ry
dWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
TXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNz
LmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFk
ZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4o
bXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgSklUU3ViSUMq
IHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0
cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0
TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2
b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkp
OwogICAgIGVtaXRTdG9yZShkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QxLCByZWdUMCk7CiB9CiAKQEAg
LTE1Nyw3ICsxNTcsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogSklUOjpjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiB7CiAgICAgdW5zaWduZWQgY2hl
Y2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIGludCBhcmdDb3VudCA9
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKICAg
ICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNldEluUmVn
aXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCkBAIC0xOTIsNyArMTkyLDcg
QEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzaXpl
T3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50czsKICAgICBl
bHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdz
OwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZp
cnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIG1fcHJv
ZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIC1m
aXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1l
KCp0aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDYgKiBzaXplb2Yodm9pZCopKSkpLCBy
ZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMjAyLDcgKzIwMiw3IEBAIEpJVDo6Y29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24g
PSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAg
IHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9w
ZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdU
MSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0KSwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsK
KyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0KSwgZmlyc3RWYXJBcmdP
ZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAv
LyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KQEAgLTIzMiwxMCArMjMyLDEwIEBAIGJvb2wg
SklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBz
dGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lz
dGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fcHJvZmlsZWRCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KHJlZ1QxKSk7CiAKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlu
a0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9wcm9maWxlZEJsb2Nr
LT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZv
LT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0
ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAtMjU4LDggKzI1OCw4IEBAIHZvaWQgSklU
Ojpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBl
bWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxDYWxsKCptX3Zt
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGVtaXRW
aXJ0dWFsQ2FsbCgqbV92bSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAg
ICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjg2LDExICsyODYsMTEgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICovCiAgICAgQ2FsbExp
bmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFs
KQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCkpOworICAgICAgICBpbmZvID0gbV9wcm9maWxlZEJsb2NrLT5hZGRD
YWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBjb21waWxlU2V0
dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsg
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQu
CiAgICAgCi0gICAgYXV0byBieXRlY29kZUluZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5k
ZXgoaW5zdHJ1Y3Rpb24pOworICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fcHJvZmlsZWRCbG9j
ay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7CiAgICAgdWludDMyX3QgbG9jYXRpb25CaXRz
ID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIobG9jYXRpb25CaXRzKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOyAv
LyByZWdUMSwgcmVnVDAgaG9sZHMgY2FsbGVlLgpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBhZGRTbG93Q2FzZShzbG93UGF0
aHMpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxv
Y2F0aW9uID0gbGFiZWwoKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2Rl
KTsKQEAgLTM0MSwxMiArMzQxLDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Uo
Y29uc3QgSW4KICAgICB9CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2Fs
bENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVs
KCk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qz
KTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5r
SW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewpAQCAtMzU0LDcgKzM1Myw3
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CkBAIC0zOTUsNyArMzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbgogICAgIEpTVmFsdWVSZWdzIG5leHRSZWdzID0gSlNWYWx1ZVJlZ3ModGFnTmV4
dEdQUiwgcGF5bG9hZE5leHRHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgIEpJ
VFR5cGU6OkJhc2VsaW5lSklULAogICAgICAgICBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
CiAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpKSwKQEAgLTQxMCw3ICs0MDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG5leHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG5leHRSZWdzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgbmV4dFJlZ3MpOwog
CiAgICAgZmFzdENhc2UubGluayh0aGlzKTsKQEAgLTQ0MCwxMCArNDM5LDEwIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSgK
LSAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAg
ICAgICBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCAvLyBtZXRhZGF0YQogICAg
ICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgogICAgICAgICBuZXh0
VlJlZywgLy8gcmVzdWx0Ci0gICAgICAgIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCiAgICAgICAgIGdlbi5zdHViSW5mbygpLCAvLyBh
cmcyCiAgICAgICAgIEpTVmFsdWVSZWdzKHRhZ0l0ZXJhdG9yR1BSLCBwYXlsb2FkSXRlcmF0b3JH
UFIpLCAvLyBhcmczCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKQEAgLTQ1Miw3ICs0NTEs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgYXV0byBk
b25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9wcm9m
aWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwogfQpA
QCAtNDYwLDcgKzQ1OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNv
bnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVy
YXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewogICAgICAg
ICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNhc2UgTmFycm93OiBy
ZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC01MDYsNyArNTA1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBwcmVzZXJ2
ZWRSZWdzLmFkZCh0YWdWYWx1ZUdQUik7CiAgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHBheWxv
YWRWYWx1ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssCisgICAgICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgICAg
ICBKSVRUeXBlOjpCYXNlbGluZUpJVCwKICAgICAgICAgICAgIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwKICAgICAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkpKSwKQEAgLTUzMywxMCArNTMyLDEwIEBAIHZvaWQgSklUOjplbWl0
X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDY7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Q3OwogICAgICAgICBjb25zdCBib29s
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1w
TGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModGFn
RG9uZUdQUiwgcGF5bG9hZERvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElm
VHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHRhZ0RvbmVHUFIsIHBheWxvYWREb25lR1BSKSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOwogCiAgICAgICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssCisgICAg
ICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssCiAgICAgICAgICAgICBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwKICAgICAgICAgICAgIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgICAg
IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwK
QEAgLTU4OCwxMCArNTg3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0
KGNvbnMKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICAgICAgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICAgICAgYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAgICAgICAgICAgYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgLy8gbWV0YWRhdGEKICAgICAgICAgICAgIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgLy8gb3BlcmF0aW9uCiAgICAgICAgICAgICBkb25lVlJl
ZywgLy8gcmVzdWx0Ci0gICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIC8vIGFyZzEKKyAgICAgICAgICAgIFRydXN0ZWRJbW1QdHIobV9wcm9maWxl
ZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKICAgICAgICAgICAgIGdlbi5zdHViSW5m
bygpLCAvLyBhcmcyCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVyUmVzdWx0R1BSLCBw
YXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFyZzMKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8v
IGFyZzQKQEAgLTYwMiw3ICs2MDEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
bmV4dChjb25zCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkp
OwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9wcm9m
aWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgIH0KIAogICAgIHsgICAKQEAgLTYxOCwx
MCArNjE3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAg
ICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICAgICAgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZEJsb2NrKSwgLy8gbWV0YWRhdGEKICAgICAgICAgICAgIG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSwgLy8gb3BlcmF0aW9uCiAgICAgICAgICAgICB2YWx1ZVZSZWcsIC8vIHJl
c3VsdAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCAvLyBhcmcxCisgICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKSwgLy8g
YXJnMgogICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnSXRlclJlc3VsdEdQUiwgcGF5bG9hZEl0
ZXJSZXN1bHRHUFIpLCAvLyBhcmczCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOyAvLyBhcmc0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgog
I2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBA
IC00NCw3ICs0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2
b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdU
MCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUz
LDE4ICs1NCwxOCBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9j
YWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAg
JiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAh
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxl
U2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQp
CiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgaW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzRm9yKGJ5dGVjb2RlLCBjaGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAt
c3RhdGljX2Nhc3Q8aW50PihzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwg
Y2hlY2twb2ludCkpOwogCisKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hv
dWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldElu
Y2x1ZGluZ1RoaXMoMCkpLCByZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJv
ZmlsZUZvcihtZXRhZGF0YSwgY2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJ
RCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6
Ok1ldGFkYXRhOjpvZmZzZXRPZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9m
ZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1
Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyAr
NzksNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3Zh
cmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6
Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBj
YWxsTGlua0luZm9Db25zdGFudCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0g
Ynl0ZWNvZGUubV90aGlzVmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5
dGVjb2RlLm1fYXJndW1lbnRzOwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25T
aXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJh
dGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihz
aXplT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJl
Z1QwLCByZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRT
ZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1Qx
KTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsg
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVv
Zih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEw
MywxNiBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAg
IHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAg
ICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0Zy
YW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNl
dCwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRp
b24oc2V0dXBPcGVyYXRpb24sIHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0
LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJv
ZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50Pihz
aXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGlu
Zm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAg
ICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBz
dG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpKTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJh
bmNoMzIoQWJvdmUsIHJlZ1QzLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhy
ZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkpKTsKICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6
ZSAndGhpcycuCkBAIC0xMjcsMTYgKzEzMSwxNSBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFs
KGNvbnN0IE9wJikKIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3Qg
T3BDYWxsRXZhbCYgYnl0ZWNvZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVz
cyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0KLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
LXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBhcmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJl
Z2lzdGVyLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNl
dCgpKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOworICAgIHJlc2V0U1AoKTsKIAot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjIpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNhbGxFdmFsLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJldHVyblZhbHVlR1BSKSk7CiAKICAgICBlbWl0
UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiAKQEAgLTE0OCw3ICsxNTEsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsK
LSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9l
dmFsQ2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBp
bmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQgcmVn
aXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAtMTU2LDQzICsxNTksNDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAog
ICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIp
ICogQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVn
VDApOwotICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QoKm1fdm0sIGluZm8pOworICAgIHJlc2V0U1AoKTsKIAogICAgIGVt
aXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1i
b29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWdu
ZWQpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlu
a0luZm8qLCB1bnNpZ25lZCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKIHRlbXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29u
c3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpCitib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENh
bGwmIGJ5dGVjb2RlLCBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3Rh
bnQpCiB7Ci0gICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZs
ZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5u
dW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZm
bGVEYXRhLm51bUxvY2FscyA9CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVE
YXRhPiBzaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7Cisg
ICAgc2h1ZmZsZURhdGEtPm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1
ZmZsZURhdGEtPm51bVBhcmFtZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCk7CisgICAgc2h1ZmZsZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVt
YmVyVGFnUmVnaXN0ZXI7CisgICAgc2h1ZmZsZURhdGEtPm51bUxvY2FscyA9CiAgICAgICAgIGJ5
dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rl
cik7Ci0gICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICBz
aHVmZmxlRGF0YS0+YXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURh
dGEuYXJnc1tpXSA9CisgICAgICAgIHNodWZmbGVEYXRhLT5hcmdzW2ldID0KICAgICAgICAgICAg
IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKICAgICAgICAgICAgICAgICB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3Ys
CiAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKICAgICB9Ci0gICAgc2h1ZmZsZURhdGEu
Y2FsbGVlID0KLSAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRK
Uyk7Ci0gICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2Nr
KTsKLSAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICBzaHVm
ZmxlRGF0YS0+Y2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRK
Uyk7CisgICAgc2h1ZmZsZURhdGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJB
dE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogCi0gICAg
SnVtcExpc3Qgc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJl
Z1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKLSAgICAgICAg
Q2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwo
KTsKKyAgICBsb2FkQ29uc3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKKyAgICBK
dW1wTGlzdCBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KCp0aGlzLCAqc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgIH0pOwogICAg
IGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CisKKyAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQo
KTsKKyAgICBpbmZvLT5mcmFtZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7CisK
ICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAg
CkBAIC0yMTgsMTQgKzIyNSwyNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0
cnVjdGlvCiAgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2su
CiAgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVy
bi4KICAgICAqLwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgaWYgKG9w
Y29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRD
YWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBjb21waWxlU2V0
dXBGcmFtZShieXRlY29kZSwgaW5mbyk7CisKKyAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5m
byA9IG51bGxwdHI7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBpbmZvQ29uc3RhbnQg
PSBVSU5UX01BWDsKKyAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKSB7CisgICAgICAg
IGluZm8gPSBtX3VubGlua2VkQ2FsbHMuYWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJ
bmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZv
KTsKKworICAgICAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxs
TGlua0luZm9JbmRleCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2Fs
bENvbXBpbGF0aW9uSW5mbygpKTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS51bmxpbmtlZENhbGxMaW5rSW5mbyA9IGluZm87CisgICAgICAgIG1fY2Fs
bENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQg
PSBpbmZvQ29uc3RhbnQ7CisgICAgfQorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBp
bmZvQ29uc3RhbnQpOwogCiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0
byBieXRlY29kZUluZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24p
OwotICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRl
eCkuYml0cygpOworICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25C
aXRzKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsg
VGFnT2Zmc2V0KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDAp
OyAvLyByZWdUMCBob2xkcyBjYWxsZWUuCkBAIC0yMzQsMTYgKzI1MiwxMiBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChi
eXRlY29kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlv
bkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwo
Q2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxD
b21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwot
Ci0gICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5k
ZXgpKQorICAgIGlmIChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5m
b0luZGV4LCBpbmZvQ29uc3RhbnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3Rh
bnQoaW5mb0NvbnN0YW50LCByZWdUMik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykg
ewotICAgICAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0
aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Cisg
ICAgICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNG
YXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBbJl0gewogICAgICAgICAgICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdU
Mik7CiAgICAgICAgIH0pOwpAQCAtMjUzLDE0ICsyNjcsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0
byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Olllcyk7CisgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlu
a0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyKTsKICAgICBhdXRv
IGRvbmVMb2NhdGlvbiA9IGxhYmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAog
ICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9u
ID0gZG9uZUxvY2F0aW9uOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKKyAgICByZXNldFNQKCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7
CiB9CkBAIC0yNzMsMjEgKzI4NiwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNl
KGNvbnN0IEluCiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVn
VDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVt
aXRTbG93UGF0aCgqbV92bSwgKnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Ns
b3dQYXRoKCptX3ZtLCAqdGhpcywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVh
c29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIHJlc2V0U1Ao
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgZW1p
dFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzk1LDE3ICs0MDcsMzEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogCiAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0OwogICAgIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87
CisKKyAgICBtb3ZlKHJlZ1QwLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5p
bXBsKCkpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NU
eXBlOjpHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4
aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX25leHQsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgZmFz
dENhc2UubGluayh0aGlzKTsKIH0KQEAgLTQxNiwxMCArNDQyLDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0
ZXJhdG9yT3Blbj4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKKyAg
ICBHUFJSZWcgaXRlcmF0b3JHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAg
ICAgSnVtcExpc3Qgbm90T2JqZWN0OwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RD
ZWxsKGl0ZXJhdG9yR1BSKSk7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVj
dChpdGVyYXRvckdQUikpOwpAQCAtNDMyLDE5ICs0NTYsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4o
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5v
bkFyZ0dQUjAsIGl0ZXJhdG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgIH0gZWxzZQotICAgICAgICBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0b3JHUFIs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQp
LnJhd0JpdHMoKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBtb3ZlKGl0ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgbmV4dFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQpLnJhd0JpdHMoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogCiAgICAgYXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0Lmxp
bmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0
SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwog
CiAgICAgZG9uZS5saW5rKHRoaXMpOwogfQpAQCAtNDUyLDcgKzQ3NCw2IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9y
X25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1
bmN0aW9uID0gKFsmXSAoKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkp
IHsKICAgICAgICAgY2FzZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25h
cnJvdzsKQEAgLTQ3MCw1MCArNDkxLDc5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW4KICAgICBKdW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSMiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJ
dGVyYXRpb25Nb2RlOjpHZW5lcmljKSkpOwogCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsK
LSAgICBvcjgoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6
OkdlbmVyaWMpKSwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2l0ZXJhdGlvbk1ldGFkYXRh
LnNlZW5Nb2RlcykpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEl0ZXJhdG9y
TmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1v
ZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSwgcmVnVDApOworICAgIG9yMzIoVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgcmVn
VDApOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4
dDo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVN
ZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMoKSk7CiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJh
dG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgYWR2YW5j
ZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9
IEpTT2JqZWN0KSBpbiByZWdUMAogCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDA7Ci0gICAg
R1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKLSAgICBHUFJSZWcgZG9uZUdQUiA9IHJlZ1Qx
OwotICAgIC8vIGl0ZXJSZXN1bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0
IGJ5IGlkIGJlbG93LgotICAgIG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisgICAgbW92ZShyZXR1cm5W
YWx1ZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBkb25l
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CiAgICAgewotICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoaXRlclJlc3VsdEdQUik7CisgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSBiYXNlR1BSKTsKKworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICAgICAgUmVnaXN0
ZXJTZXQgcHJlc2VydmVkUmVncyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKTsKLSAgICAgICAgcHJlc2VydmVkUmVncy5hZGQodmFsdWVHUFIpOworICAgICAgICBwcmVz
ZXJ2ZWRSZWdzLmFkZChpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKLSAgICAgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5w
cm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBK
U1ZhbHVlUmVncyhkb25lR1BSKSwgcmVnVDMsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCisgICAgICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCku
cHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MoZG9uZUdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAg
ICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHVi
SW5mb3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
R2V0QnlJZDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgcmVzZXRTUCgpOyAvLyBXZSBt
aWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQ
CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7
CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3Mg
eyBkb25lR1BSIH0pOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBK
U1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kb25lLCBkb25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9p
bnQoKTsKICAgICB9CiAKLQogICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7
Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdpc3RlclNldCB1
c2VkUmVnaXN0ZXJzKGRvbmVHUFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAgU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVT
Y3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxsb2NhdG9y
LmFsbG9jYXRlU2NyYXRjaEdQUigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25E
b25lID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KGdsb2JhbEdQUik7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFu
Y2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGds
b2JhbEdQUik7CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtb3ZlKGl0ZXJD
YWxsUmVzdWx0R1BSLCBiYXNlR1BSKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52
YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAg
ICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0
IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0p
OwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVl
R1BSKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJl
Z3MgeyByZXN1bHRHUFIgfSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgcmVzdWx0R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhp
cyk7CiAgICAgfQpAQCAtNTI3LDU5ICs1NzcsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX25leHQoY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4
dD4oaW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJl
clJlZ2lzdGVyOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJh
dG9yTmV4dD4oKTsKICAgICB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5
dGVjb2RlLm1fZG9uZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAog
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmpl
Y3Q7Ci0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRH
UFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxS
ZXN1bHRHUFIpKTsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnBy
b3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChi
cmFuY2hJZk5vdE9iamVjdChpdGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBl
bmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxs
IGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFy
Z0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1v
cnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJS
ZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZp
ZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25l
VlJlZywgcmVnVDEpOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRH
UFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworCisgICAgICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNh
bGxSZXN1bHRHUFIpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVt
cCgpKTsKIAogICAgICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0
ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAg
IAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1
bHRHUFIgPSByZWdUMDsKIAogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgp
LnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0
cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsOCArMzIsMTEgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogCisKIG5hbWVzcGFjZSBKU0MgewogCitj
bGFzcyBQQ1RvQ29kZU9yaWdpbk1hcDsKKwogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBDb21tb25E
YXRhOwogY2xhc3MgSklUQ29kZTsKQEAgLTE1OSwxMCArMTYyLDEwIEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBib29sIHVzZURhdGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgewotICAgICAgICBp
ZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURhdGFJQ0luT3B0
aW1pemluZ0pJVCgpOwogICAgIH0KIApAQCAtMjIzLDYgKzIyNiw4IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNTaGFyZWQoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlQXR0cmlidXRlID09IFNoYXJl
QXR0cmlidXRlOjpTaGFyZWQ7IH0KIAorICAgIHZpcnR1YWwgUENUb0NvZGVPcmlnaW5NYXAqIHBj
VG9Db2RlT3JpZ2luTWFwKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorCiBwcml2YXRlOgogICAgIEpJ
VFR5cGUgbV9qaXRUeXBlOwogICAgIFNoYXJlQXR0cmlidXRlIG1fc2hhcmVBdHRyaWJ1dGU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNw
cAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21w
aWxhdGlvbktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgdm9pZCBKSVRD
b21waWxhdGlvbktleTo6ZHVtcChQcmludFN0cmVhbQogICAgICAgICBvdXQucHJpbnQoIjxlbXB0
eT4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBvdXQucHJpbnQoIihDb21waWxlIG9m
ICIsICptX3Byb2ZpbGVkQmxvY2ssICIgd2l0aCAiLCBtX21vZGUsICIpIik7CisgICAgb3V0LnBy
aW50KCIoQ29tcGlsZSBvZiAiLCBSYXdQb2ludGVyKG1fY29kZUJsb2NrKSwgIiB3aXRoICIsIG1f
bW9kZSwgIikiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5oCShyZXZpc2lvbiAyODMwNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDU3ICszMCw1NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgQ29k
ZUJsb2NrOwotY2xhc3MgQ29kZUJsb2NrU2V0OworY2xhc3MgSlNDZWxsOwogCiBjbGFzcyBKSVRD
b21waWxhdGlvbktleSB7CiBwdWJsaWM6CiAgICAgSklUQ29tcGlsYXRpb25LZXkoKQotICAgICAg
ICA6IG1fcHJvZmlsZWRCbG9jayhudWxscHRyKQorICAgICAgICA6IG1fY29kZUJsb2NrKG51bGxw
dHIpCiAgICAgICAgICwgbV9tb2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0
aW9uKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgSklUQ29tcGlsYXRpb25LZXkoV1RGOjpIYXNo
VGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhudWxscHRy
KQorICAgICAgICA6IG1fY29kZUJsb2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9tb2RlKEpJVENv
bXBpbGF0aW9uTW9kZTo6REZHKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgSklUQ29tcGlsYXRp
b25LZXkoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSkK
LSAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKKyAgICBKSVRDb21waWxh
dGlvbktleShKU0NlbGwqIHByb2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQor
ICAgICAgICA6IG1fY29kZUJsb2NrKHByb2ZpbGVkQmxvY2spCiAgICAgICAgICwgbV9tb2RlKG1v
ZGUpCiAgICAgewogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgPT0gSklUQ29tcGls
YXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CisgICAgICAgIHJldHVybiAhbV9jb2RlQmxv
Y2sgJiYgbV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOwog
ICAgIH0KICAgICAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSAhPSBKSVRDb21w
aWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuICFtX2NvZGVC
bG9jayAmJiBtX21vZGUgIT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247
CiAgICAgfQogICAgIAotICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaygpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvZmlsZWRCbG9jazsgfQogICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEpJ
VENvbXBpbGF0aW9uS2V5JiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3By
b2ZpbGVkQmxvY2sgPT0gb3RoZXIubV9wcm9maWxlZEJsb2NrCisgICAgICAgIHJldHVybiBtX2Nv
ZGVCbG9jayA9PSBvdGhlci5tX2NvZGVCbG9jawogICAgICAgICAgICAgJiYgbV9tb2RlID09IG90
aGVyLm1fbW9kZTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gV1RGOjpwYWlySW50SGFzaChXVEY6OlB0ckhhc2g8Q29kZUJsb2Nr
Kj46Omhhc2gobV9wcm9maWxlZEJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5
cGU8SklUQ29tcGlsYXRpb25Nb2RlPjo6dHlwZT4obV9tb2RlKSk7CisgICAgICAgIHJldHVybiBX
VEY6OnBhaXJJbnRIYXNoKFdURjo6UHRySGFzaDxKU0NlbGwqPjo6aGFzaChtX2NvZGVCbG9jayks
IHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPEpJVENvbXBpbGF0aW9uTW9kZT46OnR5
cGU+KG1fbW9kZSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKIAogcHJpdmF0ZToKLSAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKKyAgICAv
LyBFaXRoZXIgQ29kZUJsb2NrKiBvciBVbmxpbmtlZENvZGVCbG9jayogZm9yIGJhc2xlbGluZSBK
SVQuCisgICAgSlNDZWxsKiBtX2NvZGVCbG9jazsKICAgICBKSVRDb21waWxhdGlvbk1vZGUgbV9t
b2RlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGlu
ZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIK
KyNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKIApAQCAtNDYsMTAgKzQ3LDkgQEAgc3RhdGljIFN0cnVjdHVyZVN0
dWJJbmZvKiBnYXJiYWdlU3R1YkluZgogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5
cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNz
VHlwZSBhY2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQot
ICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCisg
ICAgOiBtX2ppdFR5cGUoaml0VHlwZSkKIHsKLSAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2sg
PyBtX2NvZGVCbG9jay0+YWRkU3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJi
YWdlU3R1YkluZm8oKTsKKyAgICBtX3N0dWJJbmZvID0gY29kZUJsb2NrID8gY29kZUJsb2NrLT5h
ZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOwog
ICAgIG1fc3R1YkluZm8tPmNhbGxTaXRlSW5kZXggPSBjYWxsU2l0ZTsKIAogICAgIG1fc3R1Yklu
Zm8tPnVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzOwpAQCAtNTksNyArNTksNiBAQCB2b2lk
IEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBMaW5rQnVmZmVyJiBmYXN0
UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPiBzdGFydCkKIHsKICAgICBtX3N0dWJJbmZvLT5zdGFydCA9IHN0YXJ0OwotCiAg
ICAgbV9zdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gZmFzdFBhdGgubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihtX2RvbmUpOwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRU
eXBlKSkKQEAgLTY3LDYgKzY2LDE1IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZp
bmFsaXplKAogICAgIG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHNsb3dQYXRo
LmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc2xvd1BhdGhCZWdpbik7CiB9CiAK
K3ZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sK
KyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6
dXNlRGF0YUlDKG1faml0VHlwZSkpOworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0
dWJJbmZvR1BSKTsKKyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0
aW5lUHRyVGFnKTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJZEdlbmVy
YXRvcjo6SklUQnlJZEdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlw
ZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUs
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5m
b0dQUikKQEAgLTExMCw3ICsxMTgsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlk
R2VuZXJhdG9yCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQ
UiwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQogICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxv
Y2ssIGppdFR5cGUsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0
ZXJzLCBiYXNlLCB2YWx1ZSwgc3R1YkluZm9HUFIpCi0gICAgLCBtX2lzTGVuZ3RoQWNjZXNzKHBy
b3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LmltcGwoKSkKKyAgICAsIG1faXNMZW5ndGhBY2Nlc3MoY29kZUJsb2NrICYmIHByb3BlcnR5TmFt
ZS51aWQoKSA9PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChiYXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdHUFIo
KSk7CiB9CkBAIC0xMjAsNiArMTI4LDM3IEBAIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVGYXN0UGEKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBtX2lzTGVuZ3RoQWNjZXNz
ID8gSW5saW5lQWNjZXNzOjpzaXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVBY2Nlc3M6OnNp
emVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAorCisjaWYgVVNFKEpTVkFMVUU2NCkKK3N0YXRp
YyB2b2lkIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhKSVQmIGppdCwgR1BSUmVnIHN0dWJJ
bmZvR1BSLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyByZXN1bHQpCit7Cisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRj
aCk7CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVy
czo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7
CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBq
aXQubG9hZFByb3BlcnR5KGJhc2UsIHNjcmF0Y2gsIEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOwor
ICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5s
aW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRp
bmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0KTsKK30KKwordm9pZCBKSVRHZXRC
eUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVu
c2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5s
YWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOwor
ICAgIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhqaXQsIHN0dWJJbmZvR1BSLCBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRj
aCwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgbV9kb25lID0gaml0
LmxhYmVsKCk7Cit9CisjZW5kaWYKKwogSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5
cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNoZWFibGVJZGVudGlm
aWVyLCBKU1ZhbHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTEzOCw2ICsxNzcsMjAgQEAgdm9pZCBKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYQogICAgIGdlbmVyYXRlRmFzdENvbW1vbihq
aXQsIElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCisjaWYgVVNF
KEpTVkFMVUU2NCkKK3ZvaWQgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpnZW5lcmF0ZUJh
c2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcg
c3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1f
aml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRD
b25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGdlbmVyYXRlR2V0QnlJZElubGlu
ZUFjY2VzcyhqaXQsIHN0dWJJbmZvR1BSLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVy
czo6YmFzZSwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnNjcmF0Y2gsIEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgbV9kb25lID0gaml0
LmxhYmVsKCk7Cit9CisjZW5kaWYKKwogSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdl
bmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgIEpTVmFsdWVSZWdz
IGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3Jh
dGNoLCAKQEAgLTE0OSw2ICsyMDIsMzYgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJ
ZEdlbmVyYXRvcgogICAgIG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMuY2xlYXIoc2NyYXRjaCk7
CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBH
UFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0
YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0
LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworCisgICAgR1BSUmVnIGJhc2Ug
PSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgR1BSUmVnIHNjcmF0Y2gyID0g
QmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBHUFJSZWcgdmFsdWUgPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5s
aW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmxvYWQzMihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQuc3RvcmVQcm9wZXJ0eShKU1Zh
bHVlUmVncyB7IHZhbHVlIH0sIGJhc2UsIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKKyAgICBhdXRvIGZp
bmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsK
KyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsK
KworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9
CisjZW5kaWYKKwogdm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1h
Y3JvQXNzZW1ibGVyJiBqaXQpCiB7CiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5l
QWNjZXNzOjpzaXplRm9yUHJvcGVydHlSZXBsYWNlKCkpOwpAQCAtMjAwLDcgKzI4Myw3IEBAIHZv
aWQgSklURGVsQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0ID0gaml0
LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9z
dHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6
QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJK
dW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7
CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAo
KTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTIzNiw3ICszMTksNyBAQCB2b2lkIEpJ
VERlbEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhCiAgICAgbV9zdGFydCA9IGppdC5sYWJl
bCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1Yklu
Zm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
Q29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAg
IH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAg
ICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0yNzAsNyArMzUzLDcgQEAgdm9pZCBKSVRJbkJ5
VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsK
ICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5t
X3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1f
c3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQ
dHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVs
c2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1f
ZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtMzAwLDYgKzM4MywzNCBAQCB2b2lkIEpJVEluQnlJZEdl
bmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0CiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5s
aW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxV
RTY0KQordm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAg
ICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZv
LCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0
ZXJzOjpiYXNlOworICAgIEdQUlJlZyByZXN1bHQgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6
cmVzdWx0OworICAgIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnNj
cmF0Y2g7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9h
ZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIo
Q0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKCkpKTsKKyAgICBqaXQuYm94Qm9vbGVhbih0cnVlLCBKU1ZhbHVlUmVncyB7IHJlc3Vs
dCB9KTsKKyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJbmxpbmVB
Y2Nlc3MubGluaygmaml0KTsKKyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25l
ID0gaml0LmxhYmVsKCk7Cit9CisjZW5kaWYKKwogSklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6SklU
SW5zdGFuY2VPZkdlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBq
aXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eCwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIHZhbHVlLCBHUFJSZWcgcHJvdG90eXBlLCBHUFJSZWcgc3R1YkluZm9HUFIsCkBAIC0z
MzIsNyArNDQzLDcgQEAgdm9pZCBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpnZW5lcmF0ZUZhcwog
ICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1f
aml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNh
bGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsK
KyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1f
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0
dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBq
aXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtMzY4LDcg
KzQ3OSw3IEBAIHZvaWQgSklUR2V0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBt
X3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5
cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0
dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKEND
YWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJ
bmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91
dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBh
dGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTQwNSw3ICs1MTYs
NyBAQCB2b2lkIEpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQCiAgICAgbV9zdGFy
dCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkg
ewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5m
byksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBq
aXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQ
UiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQ
dHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFi
bGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC00NDAsNyArNTUxLDcgQEAg
dm9pZCBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I6OmdlbgogICAgIG1fc3RhcnQgPSBq
aXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBt
X3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZh
ckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFn
KTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVt
cCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAog
I2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25WYWxpZGF0aW9u
LmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIK
ICNpbmNsdWRlICJQdXRLaW5kLmgiCkBAIC0zOCwxMSArMzksMTIwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogY2xhc3MgQ2FjaGVhYmxlSWRlbnRpZmllcjsKIGNsYXNzIENhbGxTaXRlSW5kZXg7CiBjbGFz
cyBDb2RlQmxvY2s7CitjbGFzcyBKSVQ7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVj
dCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBp
bnQ4X3Q7CiBlbnVtIGNsYXNzIEpJVFR5cGUgOiB1aW50OF90OwogCisjaWYgVVNFKEpTVkFMVUU2
NCkKK3N0cnVjdCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRS
ZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpy
ZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Qz
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsK
K307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUVudW1l
cmF0b3JHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0g
R1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBH
UFJJbmZvOjpyZWdUMjsKKyAgICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29k
ZUJsb2NrIGFuZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZv
LgorICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2gzID0gR1BSSW5mbzo6cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxp
bmVJbnN0YW5jZW9mUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1
bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9
IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90
byA9IEdQUkluZm86OmFyZ3VtZW50R1BSMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMSA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpub25BcmdHUFIxOworfTsKKworc3RydWN0IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1Qy
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGRvbnRDbG9iYmVyUmVnaXN0ZXIgPSBHUFJJ
bmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKwor
c3RydWN0IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworfTsKKworc3RydWN0IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BS
SW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5m
bzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZv
OjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGUgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3RydWN0IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBi
YXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmQg
PSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChicmFuZCA9PSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKK307CisjZW5kaWYKKwogY2xhc3MgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IgewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yKCkgeyB9CkBAIC02MiwxMiArMTcyLDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXpl
KAogICAgICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNs
b3dQYXRoTGlua0J1ZmZlciwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRp
bmVQdHJUYWc+IHN0YXJ0KTsKLSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5m
b0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2VkU3R1Yklu
Zm8geyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBwcm90ZWN0
ZWQ6Ci0gICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0VHlwZTsK
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgorICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2Rv
bmU7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBtX3Nsb3dQYXRoQ2FsbDsKQEAgLTk4LDcgKzIxNCw3IEBAIHByb3Rl
Y3RlZDoKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsK
IAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OworcHVibGljOgogICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTExLDYgKzIyNyw3IEBA
IHB1YmxpYzoKICAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQ
UlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZh
c3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZv
R1BSKTsKIAogcHJpdmF0ZToKICAgICBib29sIG1faXNMZW5ndGhBY2Nlc3M7CkBAIC0xMjQsNiAr
MjQxLDcgQEAgcHVibGljOgogICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2lu
LCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVh
YmxlSWRlbnRpZmllciwKICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVSZWdzIGJh
c2UsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCisgICAgdm9p
ZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9D
b25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgo
TWFjcm9Bc3NlbWJsZXImKTsKIH07CiAKQEAgLTEzMiwxMCArMjUwLDExIEBAIHB1YmxpYzoKICAg
ICBKSVRQdXRCeUlkR2VuZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVy
YXRvcigKLSAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZp
ZXIsIEpTVmFsdWVSZWdzIGJhc2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcg
c3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CisgICAgICAg
IENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAgICAgICBK
U1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBH
UFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQgZ2VuZXJh
dGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHVi
SW5mb0dQUik7CiAgICAgCiAgICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0
aW9uKCk7CiAKQEAgLTE2MywxMSArMjgyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0
ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3Mg
bV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQ
YXRoSnVtcDsKIH07CiAKQEAgLTE5MSw4ICszMDgsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdl
bmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVt
cCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTIxNiw4ICszMzEsNiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0
Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNTQsNiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJp
dmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI1NSw2ICszNjYs
NyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVl
LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3Jv
QXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklU
JiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIH07CiAK
IGNsYXNzIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3IgewpAQCAtMjc3LDggKzM4OSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmlu
YWxpemUoTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0
aExpbmtCdWZmZXIpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0
YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwog
fTsKIApAQCAtMzAyLDExICs0MTIsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0
ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3Mg
bV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0OwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93
UGF0aEp1bXA7CiB9OwogCkBAIC0zMzAsOCArNDM4LDYgQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFi
bGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50
KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAoIXNyYy5p
c0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKK30KKwor
QUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lz
dGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29u
c3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNJbnQzMigpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3du
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25z
dGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbjo6TGlua1RpbWVDb25zdGFudCkgeworICAgICAgICAvLyBBbGwgbGluayB0aW1lIGNvbnN0
YW50cyBhcmUgY2VsbHMuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAg
IEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29u
c3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0
SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50
cnkpCkBAIC0xNTYsMzYgKzE4MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRD
YWxsV2l0aEV4CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdB
WVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3Rl
ciBkc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIp
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1
cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJu
VmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2FsbDsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1l
dGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
K3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBk
c3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJu
VmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZh
bHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVh
bFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcp
KQorICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwogfQogCkBAIC0yMDUsNyArMjMwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55
U2xvd0Nhc2VzKAogaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7
CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBz
aG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28g
dGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFT
U0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkt
Pmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsg
MSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRlY29k
ZUluZGV4LCBsYWJlbCgpKTsKQEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFk
dmFuY2VUb05leHRDaGVja3BvaW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90
Rm9yQ2hlY2twb2ludChKdW1wIGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5
dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhv
dC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7
Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkt
Pmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5
dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNr
cG9pbnRMYWJlbHMuZmluZChtX2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgsMjkgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
LSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5p
c1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+
bGVuZ3RoKCkgPT0gMTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1l
Q29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQog
aW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFs
dWVQcm9maWxlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKTsKIAotICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9u
bHkgb25lIGJ1Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4K
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmls
ZS5tX2J1Y2tldHMpOwotI2Vsc2UKICAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlw
dG9yID0gYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUu
bV9idWNrZXRzKTsKICAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3It
PmFzQml0cy5wYXlsb2FkKTsKICAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRv
ci0+YXNCaXRzLnRhZyk7Ci0jZW5kaWYKIH0KKyNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0
YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZWdUMCk7CiAjZWxzZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRp
ZgpAQCAtMzIzLDQxICszNDgsMzcgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19z
YW1lPGRlYwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2Zp
bGVkT3Bjb2RlKC4uLikgeyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5l
IHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNW
YWx1ZVJlZ3MgdmFsdWUpCisjaWYgVVNFKEpTVkFMVUU2NCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRF
bWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKHZhbHVlUHJvZmlsZUZvcihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQo
KSksIHZhbHVlKTsKLX0KIAotI2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyBy
ZXN1bHRSZWcpCi17Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpT
VmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyB2
YWx1ZVByb2ZpbGVPZmZzZXRGb3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7CisgICAgc3RvcmU2NCh2
YWx1ZS5ncHIoKSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBvZmZzZXQpKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykp
OwogfQogI2VuZGlmCiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIFJl
Z2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNl
bGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsKICAgICBpZiAoc2hvdWxkRW1pdFByb2Zp
bGluZygpKSB7CiAgICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3Rv
cmUzMihzY3JhdGNoR1BSLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJl
SUQoKSk7CisgICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBv
ZmZzZXRPZkFycmF5UHJvZmlsZSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQg
YXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0
ZXJJRCBzY3JhdGNoR1BSKQogewotICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAg
ICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hH
UFIsIEFkZHJlc3MoYXJyYXlQcm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNl
ZW5TdHJ1Y3R1cmVJRCgpKSk7Ci0gICAgfQorICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgp
ICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2VsbEdQUiwg
c2NyYXRjaEdQUik7CiB9CiAKIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQpAQCAtMzgwLDcgKzQwMSw3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewog
ICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwor
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRy
dXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAg
ICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcgKzUxNyw3IEBA
IGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsK
LSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tu
b3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcgKzUyNyw3IEBA
IGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVn
aXN0ZXJJRCB0YWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkg
eworICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3Rh
bnQoKSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAg
LTUxNCwxMSArNTM1LDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RK
UwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJ
bnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAm
JiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUg
Ym9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0
dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkK
IHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0LDExICs1NjAs
MTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VS
VChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0LgogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVl
LmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobV9wcm9maWxlZENv
ZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKSB7CisgICAg
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
c3JjKTsKICAgICAgICAgICAgIG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRz
dCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNy
YywgZHN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTY2LDExICs1ODIsNiBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNP
cGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3Jj
LmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0K
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVz
c0Zvcihkc3QpKTsKQEAgLTU5NSw3ICs2MDYsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dDYXNlCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0g
ICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tub3du
Q2VsbCh2UmVnKSkKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9
CiAKQEAgLTYzNywzMCArNjQ4LDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0
KGNvbnN0IAogewogICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAg
cmV0dXJuIG1fY29kZUJsb2NrLT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKLX0K
LQotQUxXQVlTX0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRv
U2NvcGUgYnl0ZWNvZGUpCi17Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0
YUlEICsgMTsgLy8gSGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8gaXRl
cmF0b3IgPSBtX2NvcGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3Ig
IT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1dEluZm8o
aXRlcmF0b3ItPnZhbHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0SW5m
b3MuYWRkKGtleSwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJbmZv
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5
QXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQot
ewotICAgIHVpbnQ2NF90IGtleSA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9w
Y29kZUlEKSArIDEpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0
YWRhdGFJRCk7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5k
KGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUg
YXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOwotICAgIG1fY29waWVkQXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwot
ICAgIHJldHVybiBhcml0aFByb2ZpbGU7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2st
Pm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KQEAgLTY4MSw2ICs2NjksNjAgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVj
bWFNb2RlPE9wUAogICAgIHJldHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRl
IDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9t
TWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcg
cmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBv
ZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5
dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQzMihBZGRy
ZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQ4RnJv
bU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVn
IHJlc3VsdCkKK3sKKyAgICBsb2FkOChBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRD
b2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9m
ZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVu
YW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRhZGF0YShW
YWx1ZVR5cGUgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkK
K3sKKyAgICBzdG9yZTgodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENv
ZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zm
c2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OnN0b3JlMzJUb01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlMzIodmFsdWUsIEFkZHJlc3Mo
c19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1l
dGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJl
ZyByZXN1bHQpCit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2Nr
LT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBz
X21ldGFkYXRhR1BSLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2Fk
Q29uc3RhbnQoSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBHUFJSZWcg
cmVzdWx0KQoreworICAgIGxvYWRQdHIoQWRkcmVzcyhzX2NvbnN0YW50c0dQUiwgc3RhdGljX2Nh
c3Q8dWludHB0cl90Pihjb25zdGFudEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7CisgICAg
bG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIg
Y29uc3RhbnQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnQu
aXNDb25zdGFudCgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBDb2RlQmxvY2s6
Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkpLCByZXN1bHQpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKHZvaWQq
KSksIHJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5z
dHJ1Y3R1cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0Ojph
bGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRv
ciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxP
YmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9y
SWZFeGlzdHMpOwpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdf
b2JqZWN0KGNvbnN0IEkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwg
c3RydWN0dXJlKTsKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlk
ZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdExvYWRQYXlsb2FkKGhhc0luc3RhbmNlVmFsdWUsIHJl
Z1QwKTsKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5z
dGFuY2Ugd291bGQgZG8uCiAgICAgSnVtcCBoYXNJbnN0YW5jZVZhbHVlTm90Q2VsbCA9IGVtaXRK
dW1wSWZOb3RKU0NlbGwoaGFzSW5zdGFuY2VWYWx1ZSk7Ci0gICAgSnVtcCBjdXN0b21oYXNJbnN0
YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1
bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAogICAg
IC8vIFdlIGtub3cgdGhhdCBjb25zdHJ1Y3RvciBpcyBhbiBvYmplY3QgZnJvbSB0aGUgd2F5IGJ5
dGVjb2RlIGlzIGVtaXR0ZWQgZm9yIGluc3RhbmNlb2YgZXhwcmVzc2lvbnMuCiAgICAgZW1pdExv
YWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMCk7CkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChwcm90byk7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAg
IG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIHJlZ1QwLCAvLyBy
ZXN1bHQKICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdExv
YWRUYWcocHJvdG8sIHJlZ1QzKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMCwgcmVnVDIpLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDEpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBn
ZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDAsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QxKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIH0KIApAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mX2N1c3RvbSgKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBl
bWl0TG9hZFBheWxvYWQoY29uc3RydWN0b3IsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChoYXNJbnN0
YW5jZVZhbHVlLCByZWdUNCwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5z
dGFuY2VPZkN1c3RvbSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBtX3Byb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCByZWdUMiwgSlNWYWx1ZVJl
Z3MocmVnVDQsIHJlZ1QzKSk7CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZhbHVlR1BS
KTsKIH0KICAgICAKQEAgLTI0OCw3ICsyNDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2Zf
aXNfdW5kZWZpbmVkKGNvCiAgICAgCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZTMy
KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzc4LDcgKzM3OCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bmFtZSA9IGJ5dGVjb2RlLm1fbmFtZTsKICAgICBlbWl0TG9hZFBheWxvYWQoZnVuYywgcmVnVDEp
OwogICAgIGVtaXRMb2FkKG5hbWUsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVn
VDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU2V0RnVuY3Rpb25OYW1lLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdU
MSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25v
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDA4LDcgKzQwOCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGkKICAgICBHUFJSZWcg
c2NyYXRjaDEgPSByZWdUMjsKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKICAgICBib29s
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChi
cmFuY2hJZkZhbHNleSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgp
LCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDIyLDcgKzQyMiw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICAgICBKU1ZhbHVlUmVncyB2YWx1ZShyZWdUMSwg
cmVnVDApOwogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAgIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QzOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgdmFsdWUsIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGFk
ZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQz
Nyw3ICs0MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAK
ICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8s
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAg
IGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNH
bG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CiAKQEAgLTQ2Myw3ICs0NjMsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1CiAKICAgICBhZGRKdW1wKGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qy
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQp
OwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCkBAIC01MDQsNyArNTA0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVt
aXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEpTVmFsdWUg
c3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9p
bnRlcik7CiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKQEAgLTU1MiwxMyAr
NTUyLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBn
ZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0
cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QwLCByZWdUMik7CiAgICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7CiAK
ICAgICAvLyBHZW5lcmljIGNhc2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNl
KGl0ZXIpKTsgLy8gZG91YmxlcwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fcHJvZmlsZWRCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwogCiAgICAgc3RvcmVSZXN1bHQubGluayh0aGlzKTsKICAgICBlbWl0U3Rv
cmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtNTkxLDE0ICs1OTEsMTQgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsbwogICAgIGdlbmVyaWNDYXNlLmFwcGVu
ZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpbmdFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJl
Z1QyKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxl
T3BFcVR5cGU6OkVxID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdl
dCk7CiAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAg
ICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAg
Z2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpFcSA/IE5v
blplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwogCiAgICAgZG9uZS5s
aW5rKHRoaXMpOwpAQCAtNjQzLDEzICs2NDMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
cShjb25zdCBJbnN0cnVjdAogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmlu
ZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaW5nRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAs
IHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9w
cm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKICAgICBzdG9yZVJl
c3VsdC5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAgICBnZW5lcmlj
Q2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nh
c2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9yZVJlc3VsdC5s
aW5rKHRoaXMpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZXR1cm5WYWx1ZUdQUik7
CkBAIC03NjIsNyArNzYyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3Ry
aWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03NzIsNyArNzcyLDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAt
NzkxLDcgKzc5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QK
IAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1Qy
LCByZWdUMSk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC04MjMsNyAr
ODIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJl
Z1QxKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTg0Niw3ICs4NDYs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAgICAgQVNTRVJU
KHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRMb2FkKGJ5
dGVjb2RlLm1fdmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uVGhyb3csIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7
CiB9CiAKQEAgLTg2Miw3ICs4NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29u
c3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKICAgICBpc0ludDMyLmxpbmsodGhp
cyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkKICAgICAgICAgZW1pdFN0b3JlKGRz
dCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTg4NCw3ICs4ODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90b19udW1lcmljKGNvbnN0IEluc3RyCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1i
ZXIoYXJndW1lbnRWYWx1ZVJlZ3MsIHJlZ1QyKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCkpOwogICAgIGlmIChzcmMgIT0gZHN0KQogICAgICAgICBlbWl0U3RvcmUoZHN0LCBy
ZWdUMSwgcmVnVDApOwogfQpAQCAtOTE1LDcgKzkxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVn
VDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSk7CiAgICAgaWYgKHNyYyAhPSBkc3QpCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCBy
ZWdUMCk7CiB9CkBAIC05MzEsNyArOTMxLDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNv
bnN0IEluc3RydWN0aW8KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZv
ckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zm
c2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBXaGVuIHRoZSBM
TEludCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlJ3ZlIGFs
cmVhZHkgdGllcmVkIHVwCisgICAgLy8gdGhlIHNhbWUgQ29kZUJsb2NrIHRvIGJhc2VsaW5lLCBh
bmQgd2UnbGwgY2F0Y2ggdGhlIGV4Y2VwdGlvbiBpbiB0aGUgYmFzZWxpbmUgSklUIChiZWNhdXNl
CisgICAgLy8gd2UgdXBkYXRlZCB0aGUgZXhjZXB0aW9uIGhhbmRsZXJzIHRvIHBvaW50IGhlcmUp
LiBCZWNhdXNlIHRoZSBMTEludCB1c2VzIGEgZGlmZmVyZW50IHZhbHVlCisgICAgLy8gaW5zaWRl
IHNfY29uc3RhbnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdlIHJlc3RvcmUgYWJvdmUgbWF5IG5v
dCBjb250YWluIHRoZSBjb3JyZWN0IHJlZ2lzdGVyLgorICAgIC8vIFNvIHdlIHJlcGxlbmlzaCBp
dCBoZXJlLgorICAgIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2Rl
QmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSks
IHNfY29uc3RhbnRzR1BSKTsKKyAgICB9CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgp
KTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJldHVyblZhbHVlR1BSKTsKQEAgLTk1NCw3ICs5NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
YXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3Jp
bmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVn
aXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIg
fHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUlu
ZGV4LmFzQml0cygpKTsKQEAgLTk5Niw4ICsxMDA3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2ltbShjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRl
Y29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2gg
ZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
Y29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2ZpbGVk
QmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAg
ICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJ
bmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5r
ZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTAyMywxMyArMTAz
NCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8g
Y3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dp
dGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hS
ZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hS
ZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlu
a2VkVGFibGUpOwogCiAgICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJs
ZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgsIHVubGlua2VkVGFi
bGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIApA
QCAtMTA0MSwxMyArMTA1MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNv
bnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRp
bmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMs
IHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBj
b25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRC
bG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU3Ry
aW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwg
bV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwog
ICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCiAgICAgZW1p
dExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJs
ZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKQEAg
LTEwNjgsNyArMTA3OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0
aW8KICAgICAvLyBFdmVuIHRob3VnaCBKSVQgY29kZSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0
aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRl
cnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZl
dGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBmb3IgKGludCBpID0gQ29kZUJs
b2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkg
PCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCisgICAgZm9yIChpbnQgaSA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBpIDwg
bV9wcm9maWxlZEJsb2NrLT5udW1WYXJzKCk7ICsraSkKICAgICAgICAgZW1pdFN0b3JlKHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGkpLCBqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW50
ZXIpOwpAQCAtMTA4Nyw3ICsxMDk4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNv
bnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUg
PSBieXRlY29kZS5tX2NhbGxlZTsKICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hl
ZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2Fs
bGVlUmVnID0gcmVnVDA7CkBAIC0xMTIyLDcgKzExMzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
cmVhdGVfdGhpcyhjb25zdCBJbnN0CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRT
dHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIFZpcnR1YWxS
ZWdpc3RlciB0aGlzUmVnaXN0ZXIgPSBieXRlY29kZS5tX3NyY0RzdDsKIApAQCAtMTE0NSw3ICsx
MTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydQogdm9pZCBK
SVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
cm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRh
ZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUg
PSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTIzOSw3ICsxMjUwLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIGVtaXRMb2Fk
VGFnKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMSk7CiAgICAgSlNWYWx1ZVJlZ3MgdGhpc1Jl
Z3MocmVnVDEsIHJlZ1QyKTsKICAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
cmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
dGhpc1JlZ3MsIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRo
aXNSZWdzLCByZWdUMywgbV9wcm9maWxlZEJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0
LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3Rh
bnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50
KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3Jl
NjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkp
OwotICAgICAgICBlbHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0
YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAg
ICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3Qp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChz
cmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7
CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NywzNyArOTAsMzUg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9u
UHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFs
T2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAg
IEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5
PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsK
ICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2Ny
YXRjaFJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CiAK
LSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRlcmZs
eSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JS
ZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93
Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0p
OwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3Io
KSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5l
d09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVSZWcp
OworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3Rl
ZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJ
VEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRl
cmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVy
ZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7Cisg
ICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7Cisg
ICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKKworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVn
VDM7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09i
amVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0
cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5l
d09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0xMzEsNyArMTMyLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCiAgICAgLy8gV2UgZG9uJ3Qg
anVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1
bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFz
SW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7
CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBy
ZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2Z1
bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKSkpOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDApOwogCkBAIC0xNTQsMzAgKzE1NiwzOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
dG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChi
YXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0g
ICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRo
IHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3RvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgdmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BS
KTsKICAgICAKICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0
IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wu
aGFzSW5zdGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1
ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5j
ZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAg
ICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJl
Z1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAv
LyBwcm90bwotICAgICAgICByZWdUNSwKLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRj
aAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAg
ICByZXN1bHRHUFIsCisgICAgICAgIHZhbHVlR1BSLAorICAgICAgICBwcm90b0dQUiwKKyAgICAg
ICAgc3R1YkluZm9HUFIsCisgICAgICAgIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2Ny
YXRjaDEsIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAg
IAorCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQgKzIw
MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRp
bWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplKT4oQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAs
IHJlZ1QyLCByZWdUMSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1Qx
KTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBh
cmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxk
ZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJl
ZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9u
KikKQEAgLTI0MCw3ICsyNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZp
bmVkKGNvCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzgzLDkgKzM5Miw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jl
dF9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7Ci0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3Rl
ckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC00
MTEsNyArNDIwLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwog
CiAgICAgaWYgKGRzdCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NDIsMTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1
bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFt
ZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQUjIp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDY1LDggKzQ3NCwxMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7Cisg
ICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZWdUMCksIHRhcmdldCk7CkBAIC00ODAsNyArNDkxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRo
ZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0
byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1MzAsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwg
Y2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJl
LgogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVy
bywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
MCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNx
dWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU1NCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAgICAvLyBGaXJz
dCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0
IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qw
KTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdh
c05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs1OTMsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9w
dHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRl
ciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBB
U1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAg
ICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVs
cGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIo
c3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAm
bWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29k
ZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFs
ID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEo
VHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZI
YXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGlu
ayh0aGlzKTsKIH0KQEAgLTYyNSw4ICs2MzQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUo
Y29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVn
VDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZh
bHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAo
YnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
Z2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJn
ZXQpOwpAQCAtNjQwLDcgKzY1MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gxID0gcmVnVDE7CkBAIC02OTUsNyArNzA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3co
Y29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJh
bWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVy
KHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
YXJndW1lbnRHUFIyOwpAQCAtNzExLDcgKzcyMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93
KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJh
dG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAt
NzIwLDcgKzczMiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
IAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIGppdC5sb2Fk
UHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5jb3B5Q2FsbGVl
U2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRHUFIwKTsKKyAg
ICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYXJndW1l
bnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIg
PSBhcmd1bWVudEdQUjA7CkBAIC05MDgsNyArOTIwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJl
Z1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5MzEsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdU
MSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKQEAgLTkzMSw3ICs5NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3Qg
SW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDAp
OwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NTEsNyArOTY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVy
KHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9
IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBA
IC05NzgsNyArOTkyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3Ry
dQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RW
UmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTkz
LDcgKzEwMDcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSks
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIp
LCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFdoZW4gdGhlIExMSW50IHRocm93cyBhbiBl
eGNlcHRpb24sIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFkeSB0aWVyZWQgdXAK
KyAgICAvLyB0aGUgc2FtZSBDb2RlQmxvY2sgdG8gYmFzZWxpbmUsIGFuZCB3ZSdsbCBjYXRjaCB0
aGUgZXhjZXB0aW9uIGluIHRoZSBiYXNlbGluZSBKSVQgKGJlY2F1c2UKKyAgICAvLyB3ZSB1cGRh
dGVkIHRoZSBleGNlcHRpb24gaGFuZGxlcnMgdG8gcG9pbnQgaGVyZSkuIEJlY2F1c2UgdGhlIExM
SW50IHVzZXMgYSBkaWZmZXJlbnQgdmFsdWUKKyAgICAvLyBpbnNpZGUgc19jb25zdGFudHNHUFIs
IHRoZSBjYWxsZWUgc2F2ZXMgd2UgcmVzdG9yZSBhYm92ZSBtYXkgbm90IGNvbnRhaW4gdGhlIGNv
cnJlY3QgcmVnaXN0ZXIuCisgICAgLy8gU28gd2UgcmVwbGVuaXNoIGl0IGhlcmUuCisgICAgewor
ICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZK
SVREYXRhKCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJs
b2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIp
OworICAgIH0KIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJl
dHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXND
YXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
OwpAQCAtMTAxMSwyMyArMTAzNiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJ
bnN0cnVjdGlvCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRv
IHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzU1OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciog
YnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1p
dFByb2ZpbGluZygpKQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkp
OwotICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUlu
ZGV4LmFzQml0cygpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5k
ZXguYXNCaXRzKCkpOwogICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJv
LCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBP
U1JFbnRyeS5saW5rKHRoaXMpOwotICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1
YWxSZWdpc3RlciYgcHJvZmlsZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdU
MCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5k
LCByZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8
VmFsdWVQcm9maWxlJj4ocHJvZmlsZSksIHJlZ3MpOwotICAgICAgICB9KTsKLSAgICB9CiAjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCiB9CiAKQEAgLTEwNTMsOCArMTA2Niw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2Ny
dXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJs
ZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50Lgot
ICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJ
bmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVk
aWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwog
CkBAIC0xMDgxLDEzICsxMDk0LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNv
bnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1
dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxl
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3
aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBk
ZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxl
LmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRj
aENoYXJXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEwOTksMjAgKzExMTMsMjIgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1w
IHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1l
bnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0g
ICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNo
ZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1
bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJl
Q1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
cnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5n
V2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
cnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktl
eVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKICAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBs
b2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwor
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1
ZXN0cygpKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVz
dDMyKFplcm8sIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0o
KSwgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0Rl
YnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKQEAgLTExMzMsNyArMTE0OSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCBy
ZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDIpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1
bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE0OCw3ICsxMTY0LDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNjYsNyArMTE4MSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX25lcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwg
cmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwog
ICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAg
d2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwpAQCAtMTE4OCwxMiArMTIwMywxNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJ
IGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVn
aXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9s
b25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJl
LgotICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CisgICAgc2l6ZV90
IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpOwogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQog
ICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKIAot
ICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spOworICAgIAorICAgIGxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFdyaXRl
QmFycmllcihyZWdUMCk7CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vs
c2UKQEAgLTEyMTIsNyArMTIyOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IElu
c3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2
bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BV
KFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0xMzEwLDIzICsx
MzI3LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQg
SklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhp
cz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNo
ZWRTdHJ1Y3R1cmVJRDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3Jj
RHN0LCByZWdUMSk7CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwog
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUp
KTsKLSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1
Y3R1cmVJRCgpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5t
X2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0g
Jm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVn
VDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQg
cmVzdWx0UmVnID0gcmVnVDA7CkBAIC0xMzQyLDcgKzEzNTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVn
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkg
LSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9m
ZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJl
Zyk7CiAKLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7Cisg
ICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlzOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZDYWNoZWRDYWxsZWUoKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFz
U2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcs
IFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rp
b25SZWcpKTsKICAgICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcy
LDcgKzEzODUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVh
bihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9
CkBAIC0xMzgyLDcgKzEzOTYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IElu
c3RydWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAg
IHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcg
KzE0MDksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAt
MTQwNCw3ICsxNDIwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1
YwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQog
CkBAIC0xNDE4LDEwICsxNDM1LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbSgKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2Nv
bnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNv
ZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1Qx
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBH
UFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJu
VmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE0MzAsNyArMTQ0OCw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1
enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9t
SW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX3VubGlua2VkQ29kZUJsb2NrLT5sb29wSGlu
dHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAgICAgICB1aW50cHRy
X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsK
ICAgICAgICAgbG9hZFB0cihwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1
cm4gPSBicmFuY2hQdHIoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKE9wdGlvbnM6OmVhcmx5
UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xNDQwLDcgKzE0NTgsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAjZWxzZQogICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCi0gICAgICAgIG1vdmVWYWx1ZShtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
c3VsdFJlZ3MuZ3ByKCkpOwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
ICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7CkBAIC0xNDUzLDggKzE0NzEsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hp
bnQoY29uc3QgSW5zdHJ1CiAKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNr
OiAKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1
dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRy
ZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAg
ICAgICAgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVy
KCkpKSk7CiAgICAgfQogfQogCkBAIC0xNTA5LDcgKzE1MjgsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkhhbmRsZVRyYXBzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkhhbmRsZVRyYXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UKICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTUyMiw3ICsx
NTQyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAg
IEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQog
ICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTE1NjQsMzQgKzE1ODQsMzYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhw
ID0gYnl0ZWNvZGUubV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdl
eHAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJl
Z0V4cCo+KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGds
b2JhbEdQUiA9IGFyZ3VtZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0
PFJlZ0V4cCo+KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAg
ICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAg
IGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQ
YXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKLSAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRl
Y29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbCwgYml0d2lzZV9jYXN0PHZv
aWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOwor
ICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKIAogICAgIE9wY29kZUlE
IG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVu
YykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVs
c2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAs
IGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVs
c2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAg
ICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAgLTE2MjEsMjMgKzE2NDMsMjQgQEAgdm9pZCBKSVQ6
OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXls
b2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5j
dGlvbkRlY2wpOworICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGlj
X2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29u
c3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBP
cDo6b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9u
LCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2Ug
aWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rp
b24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRz
dCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAg
ICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTY2NCwyOSArMTY4NywzMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXdfYXJyYXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWVzU3RhcnQgPSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5t
X2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxs
b2NhdGlvblByb2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZh
bHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBhcmd1bWVudEdQUjIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRl
Y29kZSwgT3BOZXdBcnJheTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSgpLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgc2l6ZSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xl
bmd0aDsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6
ZUluZGV4LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1Qw
KTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJy
YXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBh
cmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmd1
bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogI2Vsc2UKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMik7CiAgICAgZW1p
dExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVB
bmRQcm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CiAjZW5kaWYKIH0KIApAQCAtMTY5NCw4ICsxNzE4LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX25l
d19hcnJheV93aXRoX3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgbV9pc1NoYXJlYWJs
ZSA9IGZhbHNlOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9u
ID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Q
cm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE3NzcsMjAg
KzE4MDMsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAg
IHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1Qy
LCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigp
OwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRj
aDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0
ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hp
Y2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJl
Zyk7CisgICAgeworICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBU
aGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMlJlZyA9IHJlZ1QyOworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCks
IHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVn
VDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7
CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qx
KTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFs
dWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKKyAgICBtX2lzU2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEJh
c2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9iYXNpY0Js
b2NrTG9jYXRpb247CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9jYXRpb24t
PmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7CkBAIC0xODYwLDcgKzE4OTEsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVk
KCksIHJlc3VsdFJlZ3MpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE4ODYsNyAr
MTkxNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QKICAgICBl
bWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdz
LCBzY3JhdGNoR1BSLCBzbG93Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVz
dWx0UmVncyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkNvZGVCbG9j
a0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKQEAgLTI4NTUsNyArMjg1
Niw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1Zh
bHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9j
ay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAg
ICB2b2lkKiByZXN1bHQgPSBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKIApAQCAtMjg4MCw3ICsyODgxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRL
ZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
IAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoa2V5LmlzSW50
MzIoKSkKQEAgLTI5MDMsNyArMjkwNCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25Td2l0Y2gKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIHZvaWQqIHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxp
bmVTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAKICAgICBpZiAoa2V5LmlzU3Ry
aW5nKCkpIHsKICAgICAgICAgU3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmluZyhrZXkpLT52YWx1
ZShnbG9iYWxPYmplY3QpLmltcGwoKTsKQEAgLTI5MTksNyArMjkyMCw2IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4ocmVzdWx0KTsKIH0KIAotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lLCBF
bmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3Ry
dWN0aW9uKiBwYykpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMjk3
MSw3ICsyOTcxLDYgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdgog
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXNvbHZlZFNjb3BlKTsKIH0KLSNlbmRpZgog
CiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBFbmNvZGVk
SlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RydWN0aW9u
KiBwYykpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsNyBAQCBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9iYWxPYmpl
Y3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1pbikp
OwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93
bktleVR5cGUsIGNoYXIqLCAoVk0qLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUlu
ZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25T
d2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4KSk7Ci0jaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdmVT
Y29wZUZvckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpKTsKLSNlbmRpZgogSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmpl
Y3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25QdXRUb1Njb3BlLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBjb25z
dCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDEyIEBAIGF1dG8g
SklUUGxhbjo6dGllcigpIGNvbnN0IC0+IFRpZXIKIAogSklUQ29tcGlsYXRpb25LZXkgSklUUGxh
bjo6a2V5KCkKIHsKLSAgICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkobV9jb2RlQmxvY2stPmJh
c2VsaW5lQWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKKyAgICBKU0NlbGwqIGNvZGVCbG9jazsKKyAg
ICBpZiAobV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpCisgICAgICAgIGNv
ZGVCbG9jayA9IG1fY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgIGVsc2UKKyAg
ICAgICAgY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAg
ICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBtX21vZGUpOwogfQogCiBib29s
IEpJVFBsYW46OmlzS25vd25Ub0JlTGl2ZUFmdGVyR0MoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKIAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCBy
ZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgbV9w
cm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmlsZWRCbG9jay0+aWRl
bnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9i
eV9pZChjb25zdAogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0
TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeUlkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBtX3Byb2ZpbGVkQmxvY2stPmds
b2JhbE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlf
aQogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2Fk
KGdldHRlciwgcmVnVDMpOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1Q0KTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmlt
cGwoKSwgYXR0cmlidXRlcywgcmVnVDMsIHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlclNldHRlciwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVn
VDEsIG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1
dGVzLCByZWdUMywgcmVnVDQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAxLDcgKzEw
MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0
TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMSwg
cmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgbV9wcm9maWxlZEJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0
dHJpYnV0ZXMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNSw3ICsxMTUs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdExv
YWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEsIHJl
Z1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIG1fcHJvZmlsZWRCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRy
aWJ1dGVzLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
Mik7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCk7CkBAIC0xMzEsOCArMTMxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydQogICAgIGVtaXRMb2FkKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5w
YXlsb2FkR1BSKCkpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNl
UmVncy50YWdHUFIoKSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAorICAg
ICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2Nr
LCAqaWRlbnQpLAogICAgICAgICBiYXNlUmVncywgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywg
cmVnVDQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocHJvcGVydHksIHByb3BlcnR5UmVncy50YWdHUFIoKSk7CiAKICAgICBKSVREZWxCeVZhbEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9w
cm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywg
cmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgcmVnVDQpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwpAQCAtMjAyLDcgKzIwMiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfdmFsKGNvbnN0IEkKIAogICAgIGVtaXRMb2FkMihiYXNlLCBiYXNlUmVncy50YWdHUFIo
KSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpLCBwcm9wZXJ0eSwgcHJvcGVydHlSZWdzLnRhZ0dQUigp
LCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFzZVJl
Z3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSksIEpTVmFsdWVSZWdzKHByb3BlcnR5
UmVncy50YWdHUFIoKSwgcHJvcGVydHlSZWdzLnBheWxvYWRHUFIoKSksIFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxl
ZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhiYXNl
UmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKSwgVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCByZXN1bHRS
ZWdzKTsKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lk
KGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BE
ZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYmFz
ZVJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwpAQCAtMjI3LDcgKzIyNyw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KIAogICAgIGVtaXRMb2FkKGJh
c2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkpOwogCi0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VSZWdzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0
ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmls
ZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgcmVzdWx0UmVncyk7CkBAIC0yMzcsNyAr
MjM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwpAQCAtMjQ5LDcgKzI0OSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICAgICAgYXV0byBub3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKICAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUNCk7CiAgICAgICAgIG5vdENlbGwubGlu
ayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFs
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7CiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmls
ZSwgcmVnVDQpOwpAQCAtMjU3LDcgKzI1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92
YWwoY29uc3QgSW5zdHIKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAogICAgICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICAgICAgZW1p
dFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKICAgICB9CiB9CkBAIC0yNzUsNyArMjc1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgIGlmIChoYXNBbnlT
bG93Q2FzZXMoaXRlcikpIHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQmxvY2spOwogICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CkBAIC0yODQsNyArMjg0LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwot
ICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHBy
b2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MikpOworICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiAgICAgfQogfQpAQCAtMzA1LDEzICszMDUsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAogICAgICAg
ICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGJhc2VHUFIsIHByb3Bl
cnR5R1BSLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3VsdFJl
Z3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpKTsKIH0KIApAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKIAogICAgIGF1dG8gYmFzZUdQUiA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7CiAgICAgYXV0byBwcm9wZXJ0eUdQUiA9IEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3Bl
cnR5R1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwogfQogCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVf
bmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7
CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhy
ZWdUNSwgcmVnVDQpLCBJbnZhbGlkR1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKGMKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KTsK
IAogICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0
QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJp
dmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZVJlZ3Ms
IHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihu
dWxscHRyKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0
ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VSZWdzLCBwcm9w
ZXJ0eVJlZ3MsIHZhbHVlUmVncywgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0
cikpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
IH0KQEAgLTM5NSw3ICszOTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFu
ZChjb25zCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJhc2VSZWdzLnRh
Z0dQUigpKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNl
dFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCiAgICAgICAgIGJhc2VSZWdzLCBicmFuZFJlZ3MsIEludmFsaWRHUFJSZWcpOwogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwpAQCAtNDE4LDcgKzQxOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRf
cHJpdmF0ZV9icmFuZCgKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9
IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleF07CiAgICAg
KyttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0
ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJ
bW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBi
YXNlUmVncywgYnJhbmRSZWdzKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogfQogCkBAIC00MzUsNyArNDM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2hlY2tfcHJpdmF0ZV9icmFuZChjbwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlLCBiYXNlUmVncy50YWdHUFIoKSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgYmFzZVJlZ3MsIGJyYW5kUmVncywg
SW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC00NTIsNyArNDUyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIEpJVFByaXZhdGVCcmFuZEFj
Y2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFu
ZEFjY2Vzc0luZGV4XTsKICAgICArK21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXg7CiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgYnJhbmRS
ZWdzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0
ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgYnJhbmRSZWdzKTsKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC00NjUsNyArNDY1
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKQEAgLTQ3OCw3ICs0NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RyCiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBy
ZWdUNiwgcmVnVDcpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3By
b2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1
ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgcmVnVDYsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwpAQCAtNTA0LDcgKzUwNCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEkKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gSklUOjplY21hTW9k
ZShieXRlY29kZSk7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRCbG9jayk7CiAgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGU7CiAgICAgfTsKIApAQCAtNTI0LDcgKzUyNCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDIsIHJlZ1QxLCBw
cm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0
KTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUu
aXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmlj
dCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/
IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0
cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUpOwog
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAg
LTUzNCw3ICs1MzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IElu
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEs
IHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpA
QCAtNTQyLDEzICs1NDIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25z
dCBJbgogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6
cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBl
OjpUcnlHZXRCeUlkKTsKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJl
Z1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7
CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRS
ZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTU1OCwxMyAr
NTU4LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmls
ZWRCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1f
cHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAg
ICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0K
QEAgLTU3NSw3ICs1NzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNv
bnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
RGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwg
cmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVn
VDEpOwpAQCAtNTgzLDEzICs1ODMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjb25zdAogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxv
YWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0
QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3Qs
IHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAt
NTk5LDEzICs1OTksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3Qo
YwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
RGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9j
ayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxl
ZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKIAogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC02MTQsMTAg
KzYxNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRMb2FkKGJhc2Us
IHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJl
Z1QxKTsKQEAgLTYzMCwxMyArNjMwLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChj
b25zdCBJbnN0cnUKIAogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApOwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25s
eShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdz
LnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTY0NiwxMyArNjQ2
LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVk
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNjYzLDcgKzY2Myw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFs
dWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKICAg
ICAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKHRoaXNW
UmVnLCByZWdUNCwgcmVnVDMpOwpAQCAtNjczLDEzICs2NzMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIEludmFsaWRHUFJSZWcpOworICAgICAgICBt
X3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRl
bnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUNCwgcmVnVDMpLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBy
ZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTY4OSwxMyArNjg5LDEzIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgr
K107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spLCBvcGVyYXRpb25HZXRCeUlk
V2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1Q0LCByZWdUMyksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
fQpAQCAtNzEwLDE1ICs3MTAsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJl
Y3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKICAgICAKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVn
VDEsIHJlZ1QwLCB2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICAKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLAorICAgICAgICBtX3Byb2ZpbGVkQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBJbnZhbGlkR1BSUmVnLAogICAg
ICAgICByZWdUMSwgYnl0ZWNvZGUubV9mbGFncy5lY21hTW9kZSgpLCBkaXJlY3QgPyBQdXRLaW5k
OjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwogICAgIApAQCAtNzM4LDcgKzczOCw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlz
KTsKIApAQCAtNzQ4LDcgKzc0OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQo
Y29uc3QgSW4KICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0
QnlJZEluZGV4KytdOwogICAgIAogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCi0gICAg
ICAgIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
Z2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgICAgICBn
ZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBn
ZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03
NTgsMTQgKzc1OCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVj
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVn
VDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAg
ICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CisgICAg
ICAgIG1fcHJvZmlsZWRCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQmxvY2ss
ICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1faW5CeUlk
cy5hcHBlbmQoZ2VuKTsKQEAgLTc3OSwxMyArNzc5LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9wcm9maWxlZEJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5C
eUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZEJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQpAQCAtNzk2LDcgKzc5Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChj
b25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgZW1pdExvYWQyKGJhc2Us
IHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CkBAIC04MDQsNyArODA0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDQpOwogCiAgICAgSklU
SW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC04MTksMTQgKzgxOSwxNCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBt
X2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlW
YWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtODM3LDcgKzgz
Nyw3IEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUSW5CeVZhbEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgbV9wcm9maWxlZEJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3M6
OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC04NTMs
NyArODUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaQogICAg
IEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRp
b25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9w
ZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9m
aWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC04OTAsNyArODkwLDcg
QEAgdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZQogewogICAgIGlmICgh
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0
aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzLCB1bnNpZ25lZCBkZXB0aCkKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIEpJVDo6ZW1pdFJl
c29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0
YWRhdGEubV9yZXNvbHZlVHlwZTsKQEAgLTkxNiwxMSArOTE2LDExIEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3Rh
bnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUs
IG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2ZpbGVkQmxv
Y2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKICAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVz
c09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9wcm9maWxlZEJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgp
KSwgcmVnVDEpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpLCByZWdUMSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29w
ZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CkBA
IC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IAogICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6
Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZEJsb2NrKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVn
VDEpOwpAQCAtMTAzOSw3ICsxMDM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZp
cnR1YWxSZWdpcwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2Rl
Lm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1
dEluZm8ucmVzb2x2ZVR5cGUoKTsKQEAgLTExNDYsNyArMTE0Niw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUs
IGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGVtaXRTdG9yZShk
c3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKQEAgLTExNTYsNyArMTE1Niw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQmxvY2sp
LCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqIHNldCkKQEAgLTExOTAsNyArMTE5MCw3IEBAIHZvaWQgSklUOjplbWl0UHV0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXMKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1
dEluZm8oYnl0ZWNvZGUpOwpAQCAtMTIwMiw3ICsxMjAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9wcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCBy
ZWdUMik7CiAgICAgICAgICAgICAKQEAgLTEyMTcsNyArMTIxNyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAg
IGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
ICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29k
ZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9wcm9maWxlZEJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0
YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CkBAIC0xMzE4LDcgKzEz
MTgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3Ip
OwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRUb1Njb3BlLCBtX3Byb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzMzMsNyArMTMzMyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBlbWl0TG9hZFBheWxv
YWQoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIERpcmVjdEFy
Z3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSArIFRhZ09mZnNldCksIHJlc3V0bFJlZ3MudGFnR1BSKCkpOwogICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBQYXlsb2FkT2Zmc2V0KSwgcmVzdXRsUmVn
cy5wYXlsb2FkR1BSKCkpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1dGxSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRCbG9jayksIHJlc3V0bFJlZ3MpOwogICAg
IGVtaXRTdG9yZShkc3QsIHJlc3V0bFJlZ3MudGFnR1BSKCksIHJlc3V0bFJlZ3MucGF5bG9hZEdQ
UigpKTsKIH0KIApAQCAtMTM1NSw3ICsxMzU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X2FyZ3VtZW50cyhjb25zdAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZEJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5MiArNDksMTEyIEBA
IG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnNjcmF0Y2g7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBw
cm9wZXJ0eUdQUik7CiAKLSAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQo
KSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAg
ICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgaWYg
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJz
LmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7
CisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlW
YWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAg
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIp
OworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7Cisg
ICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwg
c2NyYXRjaEdQUik7CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlW
YWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzLCByZWdUMik7CisgICAgICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQ
Uik7CisKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAg
ICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7
CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OkdldEJ5VmFsOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICByZXNldFNQKCk7
IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkg
cmVzZXQgU1AKKworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5h
cHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKKyNpZiAhT1MoV0lORE9XUykKK3N0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHZpYWJsZUFyZ3VtZW50R1BSNCA9IEdQUkluZm86OmFyZ3VtZW50R1BSNDsK
K3N0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZpYWJsZUFyZ3VtZW50R1BSNSA9IEdQUkluZm86OmFy
Z3VtZW50R1BSNTsKKyNlbHNlCitzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2aWFibGVBcmd1bWVu
dEdQUjQgPSBHUFJJbmZvOjpub25BcmdHUFIwOworc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmlh
YmxlQXJndW1lbnRHUFI1ID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKKyNlbmRpZgorCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAgICBpZiAoIWhhc0Fu
eVNsb3dDYXNlcyhpdGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOworICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CiAKLSAg
ICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9u
R2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIG1v
dmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBt
b3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCB2aWFibGVBcmd1bWVudEdQ
UjQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+
KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIHZpYWJsZUFyZ3VtZW50R1BSNCk7CiAjZWxzZQotICAg
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9i
eXRlY29kZUluZGV4KTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gYXJndW1lbnRHUFI0OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCi0g
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChw
cm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwotCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXpl
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25H
ZXRCeVZhbE9wdGltaXplKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFy
ZzEgYWxyZWFkeSB1c2VkLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3Vt
ZW50R1BSMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHBy
b3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlID09IHJlZ1QwKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5ID09IHJlZ1QxKTsKKworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOworICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ5LDcg
KzE2OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKQEAgLTE2MCw4ICsxODAsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVu
dEdQUjU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fz
c2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0xODcsMzQgKzIwNyw0MCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVy
dHlHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
LQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAg
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIp
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
R2V0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0
dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
ICAgICBBU1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CkBAIC0yMjMsOSArMjQ5LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9u
YW1lKGMKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRl
TmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMjM1LDI2ICsyNjMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9w
cml2YXRlX25hbWUoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBh
cmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldFByaXZh
dGVOYW1lT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMjY0LDcgKzI4
Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKQEAgLTMwMCwyMSArMzIyLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2Jy
YW5kKGNvbnMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNl
dFByaXZhdGVCcmFuZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwotICAg
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7CisK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRH
UFIpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiks
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVt
aXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJp
ZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtMzI0LDE3ICszNTMsMjIgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwg
U2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0
ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsK
KwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nl
c3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRB
Y2Nlc3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5
cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzc4LDE4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3Rh
dGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJh
dGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJh
aXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRU
eXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9j
aGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0zNzAsMzMgKzM5OCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2Jy
YW5kKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YnJhbmQsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVBy
aXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BS
ID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nh
c2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRH
UFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcENoZWNrUHJpdmF0ZUJyYW5kPigpOworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZSk7
CisKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJy
YW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAg
Y2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXpl
KT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFy
Z3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC00MDYsMjQg
KzQ0OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcx
IGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0
ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRH
UFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlv
blRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46OkFy
Z3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJy
YW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC00MzUsMzAgKzQ3MSw0MyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0
X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIocHJvZmlsZSksIHJlZ1QzKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6cHJvZmlsZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQ
Uik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJlZ1Q0KTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9maWxlR1BSKTsK
KyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAKICAgICBKSVRQdXRCeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBw
cm9maWxlR1BSLCBzdHViSW5mb0dQUik7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
cHJvcGVydHkpKQogICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1
ZTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZv
cy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
OworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gc3RkOjppc19zYW1lX3Y8T3AsIE9wUHV0QnlWYWxE
aXJlY3Q+ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJ
bmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBX
ZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0
IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAog
ICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBp
ZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTQ3NCwxNSArNTIzLDEyIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1v
ZGU6OnN0cmljdCgpOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAg
ICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAg
ICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBieXRlY29k
ZS5tX2VjbWFNb2RlOwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNDk4LDcgKzU0NCwxNiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAgICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRo
IGFuZCBub3QgY2xvYmJlcmVkLgotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJl
Y3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChl
Y21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9w
ZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGdlbi5zdHViSW5mbygp
LCByZWdUMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCB2aWFibGVBcmd1bWVudEdQUjQpOworICAgIGlmIChp
c0RpcmVjdCkKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSwgT3BQdXRCeVZhbERpcmVjdDo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHZpYWJsZUFyZ3VtZW50R1BSNSk7CisgICAg
ZWxzZQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpLCBPcFB1dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZB
cnJheVByb2ZpbGUoKSwgdmlhYmxlQXJndW1lbnRHUFI1KTsKKyAgICBjYWxsT3BlcmF0aW9uPGRl
Y2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpPihBZGRyZXNzKHZpYWJsZUFy
Z3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCB2
aWFibGVBcmd1bWVudEdQUjQsIHZpYWJsZUFyZ3VtZW50R1BSNSk7CiAjZWxzZQogICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC01MTIsNyArNTY3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV92YWwoY29uc3QgSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBy
ZWdUNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9w
dXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogICAgIENhbGwgY2FsbDsKICAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFN
b2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDog
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRC
eVZhbE5vblN0cmljdE9wdGltaXplKTsKQEAgLTUyMyw3ICs1NzgsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCkBAIC01MzMsMTggKzU4OCwyNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0
IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVy
IGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAg
IGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IHJlZ1Q1OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVl
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2Zp
bGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVyU2V0IHVzZWQoQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVl
LCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlKTsKKyAgICAgICAgQVNTRVJUKCF1
c2VkLmNvbnRhaW5zKHJlZ1Q0KSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlucyhyZWdU
NSkpOworICAgIH0KKwogCiAgICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0Zv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0
R1BSKTsKQEAgLTU3MCwyMCArNjMxLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRl
X25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdz
KHJlZ1QyKSwgSW52YWxpZEdQUlJlZywgcmVnVDQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJl
Zywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPnByaXZhdGVGaWVs
ZFB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVj
dHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC01OTQsOCAr
NjY2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0
ZU5hbWU+KCk7Ci0gICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9w
dXRLaW5kOworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgSklU
UHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJbmRleCsrXTsK
IApAQCAtNjAzLDEzICs2NzQsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRl
X25hbWUoYwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBhdXRv
IG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5l
UHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9w
dGltaXplOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5IGFyZSBj
b25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIs
IGdlbi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOworCisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCB2aWFibGVBcmd1bWVu
dEdQUjQpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxEZWZp
bmVQcml2YXRlRmllbGRPcHRpbWl6ZSk+KEFkZHJlc3ModmlhYmxlQXJndW1lbnRHUFI0LCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIHZpYWJsZUFyZ3VtZW50R1BS
NCwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CkBAIC02MjIsMTggKzY5NSwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZShjCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0
OwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9H
UFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0
MywxNCArNzEwLDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0
IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZH
L0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0
cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0g
ICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVy
bkFkZHJlc3MoKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3NDcsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRH
ZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlv
bnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzc1Nyw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNl
dHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
b3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2Vk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc2OCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90
IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVn
VDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNzA5LDcgKzc3OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdU
Mik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0
ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1
dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzkwLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWws
IHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC03MjcsMjMgKzc5OSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3Qg
SW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxC
eUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxC
eUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFz
ZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNo
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRl
QnlJRDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwog
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFu
KHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdy
aXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxs
LgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1
ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSAr
ODQxLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxP
cGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKT4oQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNzgxLDI0
ICs4NjUsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21h
TW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5W
YWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
ICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCkBAIC04MDgsNyArODg3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtODQ1LDIyICs5MjQsMzMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6
OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxC
eVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7
CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpzY3JhdGNoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVs
QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNl
cXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElD
IGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2Ug
aXMgY2VsbC4KQEAgLTg4Myw5ICs5NzMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV92YWwoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFs
dWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9w
ZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKT4oQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywg
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtODk5LDI0ICs5OTEsMTkgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFy
Z3VtZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0
dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkp
LCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09
IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAg
LTkyNiw3ICsxMDEzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmpl
Y3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBE
RkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmpl
Y3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
LSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0
dXJuQWRkcmVzcygpOwpAQCAtOTYxLDIyICsxMDQ4LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3Ry
eV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6VHJ5R2V0
QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJl
c3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApA
QCAtOTg2LDE0ICsxMDgyLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lk
KGNvbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5
R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJ
bmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlv
blRyeUdldEJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAs
IGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTAwMywy
NiArMTEwMiwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAg
ICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2Vy
dChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBl
KG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMzAsMjIgKzExMjMsMzEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVz
dWx0KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcp
OwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJl
Z1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5
cGU6OkdldEJ5SWREaXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYgKzExNTYsMTggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWREaXJlY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6
ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwNzMsODMgKzExNzcs
NjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0g
YXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVj
bHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlkZW50
ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKLSAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAg
ICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsICZtZXRhZGF0YS5tX21v
ZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCByZWdUMSk7CisgICAgICAg
IGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRP
Zk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlKCksIHNj
cmF0Y2hHUFIpOworICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDMyKE5v
dEVxdWFsLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFy
cmF5TGVuZ3RoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFk
YXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGg6Om9mZnNldE9mQXJyYXlQcm9m
aWxlKCksIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUu
bGluayh0aGlzKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOwotCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3Ro
aXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZS
ZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VW
UmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsK
LQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkKTsKIAotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQo
Z2VuKTsKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5r
ZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBl
OjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNv
IHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwor
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTE1OCwxNiArMTI0MSwxOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRl
eCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2Rl
LCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNjIsNTggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1l
bnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1
bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lk
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAg
Q2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVh
bFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0
aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRv
ciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1Yklu
Zm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0
U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRp
dmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlz
LmFwcGVuZChnZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVz
dWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTIwNiw3ICsxMzIzLDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0MSwx
NiArMTM1OCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwog
ICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOwor
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkV2l0
aFRoaXNPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTI2MCwyOCArMTM4MCwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
YXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IHJlZ1Qx
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlz
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodGhpc0dQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkp
OwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjkxLDcgKzE0MDUsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBA
IC0xMzI5LDIzICsxNDQzLDM4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJ
bnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9v
bCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICAvLyBJbiBvcmRlciB0
byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zm
c2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1
bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5k
IHdlIGdlbmVyYXRlIGNvZGUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNl
dCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aEdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJhc2VWUmVnLCBiYXNlR1BSLCB2YWx1ZVZSZWcsIHZhbHVlR1BSKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDMsIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAg
ICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OlB1dEJ5SWQ7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBkaXJlY3QgPyBQdXRLaW5k
OjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0g
ZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0
IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCiAgICAgLy8gSUMgY2Fu
IHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBj
ZWxsLgpAQCAtMTM1OSwxNCArMTQ4OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4odGhpcyk7CiAgICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9u
KCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGFyZ3VtZW50R1BSMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMyk7Cisg
ICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUp
PihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJn
dW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3NiwyNSArMTUwOSwxOSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNl
LgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
QmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VH
UFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodmFs
dWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCkBAIC0xNDA0LDcgKzE1MzEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAg
ICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQxLDIwICsxNTY4LDMxIEBAIHZv
aWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2Vs
aW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNjAxLDE3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5C
eUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlw
ZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
MTQ4MCwyOCArMTYyMSwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3Qg
SW5zCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIx
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2Vy
dChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5
X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAg
ICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsg
anVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygp
LT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xNTEwLDI1ICsxNjQ1LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2lu
X2J5X3ZhbChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2Zp
bGUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6c2NyYXRjaCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdU
Mik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCkBAIC0xNTM3LDE1ICsxNjgwLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9i
eV92YWwoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5CeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwog
CiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRl
eCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9m
ZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCB2aWFibGVBcmd1bWVudEdQUjQpOworICAg
IGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKT4oQWRkcmVz
cyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzLCB2aWFibGVBcmd1bWVudEdQUjQpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMTU1Niw1OSArMTcwMiw3MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlf
dmFsKGNvbnN0IEluCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1l
bnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3Rh
dGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxp
emVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV92
YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAg
ICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBq
dXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpLCBkZWNsdHlwZShvcGVy
YXRpb25HZXRCeVZhbE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNl
Ci0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5
cGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFu
ZCwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IHR5cGU7CisgICAgc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJl
Z2lzdGVyIGRzdCwgQWNjZXNzVHlwZSB0eXBlKQordm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xv
dyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAgQVNTRVJUKHR5cGUgPT0gQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
QnJhbmQpOworICAgIFVOVVNFRF9QQVJBTShiYXNlKTsKKyAgICBVTlVTRURfUEFSQU0ocHJvcGVy
dHkpOworICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2
YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiAKICAgICBK
SVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NU
eXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBv
cGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxk
ZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE2MTgsMjcgKzE3NzUsMjEgQEAg
dm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFu
ZEdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFu
ZEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fz
c2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHByb3BlcnR5T3JCcmFuZEdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwog
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZh
dGVOYW1lT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXpl
KT46OnZhbHVlKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVy
YXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZh
dGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/
IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJh
bmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0g
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGlt
aXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2hhc19wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE2NTIsNyArMTgwMyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0
ZV9uYW1lKGMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0
SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1l
KTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFz
ZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY2NiwyMTUgKzE4MTcsMTI3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2
YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29k
ZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlQnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNo
ZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewog
ICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qo
c2NyYXRjaEdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZT
RVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hH
UFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwg
V2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJl
Z1QwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLSNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi12b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2Rl
Lm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29s
dmVUeXBlOwotICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7
Ci0KLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewot
ICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHk6Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRT
Y29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7
Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRy
ZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihj
b25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEds
b2JhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgot
ICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0
YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBl
LCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0
YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENsb3N1cmVW
YXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAg
ICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEu
bV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBE
eW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2
ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
ID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2Fs
VmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9F
bmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwotCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQ
cm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90
R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhp
cyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmso
dGhpcyk7Ci0KLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5k
LmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotI2Vs
c2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0KIHZvaWQgSklUOjplbWl0X29wX3Jlc29s
dmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAg
ICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUu
bV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2
ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVj
dGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9i
eXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQ
UlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUNjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7
CisgICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJh
bnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUg
dHlwZS4KIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1Qw
KTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBs
b2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9m
ZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAg
cHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFU
YWJsZSgmbWV0YWRhdGEpOworICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29k
ZSk7CiAKLSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jl
c29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29u
c3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hf
UkVTT0xWRV9UWVBFKFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1
cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpn
ZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3Bf
cmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9T
Q09QRV9HRU5FUkFUT1IKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzIik7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2
ZVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTog
b3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1QyOworICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZz
ZXRHUFIgPSByZWdUNTsKIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBz
Y29wZUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1l
dGFkYXRhR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAg
ICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAg
Y29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2Ug
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUg
PSB2bS5nZXRDVElTdHViKGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBl
bWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQog
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0
IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMg
ZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNh
dXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNv
bHZlU2NvcGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSBy
ZWdUNzsgLy8gaW5jb21pbmcKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7
IC8vIGluY29taW5nCisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1QyOyAv
LyBpbmNvbWluZworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsgLy8gaW5j
b21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7IC8v
IGluY29taW5nIC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4KLSAgICBjb25zdGV4cHIgR1BSUmVn
IGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZU9mZnNl
dEdQUik7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShy
ZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIGppdC50YWdSZXR1
cm5BZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFk
YXRhR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMs
IG1ldGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQ
UlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgYXV0byBkb1Zhcklu
amVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgewogICAgICAgICBpZiAoIW5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZ2xvYmFs
T2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQ
UiA9IHJlZ1Q0OwotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAg
fQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0g
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRj
aHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
KTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1Qz
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJl
Z1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0UmVzb2x2ZUNsb3N1cmUgPSBbJl0g
KGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwg
cmVnVDApOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7Ci0KLSAgICAgICAgTGFi
ZWwgbG9vcCA9IGxhYmVsKCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMSk7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICAgICAgICAgIGp1bXAoKS5saW5rVG8obG9vcCwgdGhp
cyk7Ci0gICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb1Zhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChzY29wZUdQUiA9PSByZWdUMCk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mTG9jYWxTY29wZURlcHRoKCkpLCByZWdUMSk7CisK
KyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBq
aXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGppdC5z
dWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8o
bG9vcCwgJmppdCk7CisgICAgICAgIGRvbmUubGluaygmaml0KTsKICAgICB9OwogCiAgICAgYXV0
byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKQEAgLTE4ODIsMTIg
KzE5NDUsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRT
Y29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkuCi0gICAg
ICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xv
YmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCBy
ZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFk
ZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShnbG9iYWxPYmpl
Y3RHUFIsIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwg
cmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
QEAgLTE4OTcsMTEgKzE5NTksMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2Nr
KCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAg
ICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAo
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZp
cm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgp
KSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBD
bG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsxOTcxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Cisg
ICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxl
VmFyOgpAQCAtMTkxOSw4MyArMTk4MSw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlw
ZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAg
ICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsK
LQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5
cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29k
ZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7CisgICAgICAgIGppdC5sb2FkMzIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUmVzb2x2ZVR5cGUoKSksIHJlZ1Qx
KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5s
aW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOworICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSkgeworICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBl
bWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5q
dW1wKCkpOworICAgICAgICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0g
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIp
OworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEds
b2JhbExleGljYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAg
ICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFr
OworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICByZXQoKTsKKyAg
ICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxf
VEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNl
SGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3Ip
OwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dD
YXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVu
ayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09Q
RV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihW
TSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JP
cFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwK
LSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8i
ICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JF
U09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVS
QVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19v
cF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2Vu
ZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJh
c2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICAvLyBUaGUgZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVz
cy4KICNpZiBDUFUoWDg2XzY0KQpAQCAtMjAzNCw3ICsyMDU4LDYgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9u
Q2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFn
LCAiQmFzZWxpbmU6IHNsb3dfb3BfcmVzb2x2ZV9zY29wZSIpOwogfQotI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCiB2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hl
Y2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQogewpA
QCAtMjA2MiwyNzYgKzIwODUsMTMzIEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0
dWFsUmVnaXMKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50
OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdU
MCk7CiB9CiAKLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNj
b3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKLSAg
ICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigm
bWV0YWRhdGEubV9vcGVyYW5kKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBl
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJl
c29sdmVUeXBlKCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7Ci0gICAgICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0
dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVj
dHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJl
c29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAg
ICAgICAgICBHUFJSZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9
IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKLQotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExh
bWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpKTsKLSAgICAgICAgICAgIH0pKTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwor
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwor
ICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5k
ZXgpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0
ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAotICAgICAgICAgICAgbG9hZDMy
KG9wZXJhbmRTbG90LCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7
Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFu
T3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAg
ICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwot
ICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAg
c2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJh
c2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNl
dCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVy
YW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVW
YXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBN
b2R1bGVWYXI6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNl
IFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9CisgICAgYXV0byBjbG9zdXJl
VmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0
ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfZ2V0X2Zy
b21fc2NvcGUgQ2xvc3VyZVZhciIpOwogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMy
KFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAg
ICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAg
ICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0
cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9F
bmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAg
ICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8g
TG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsK
LSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhp
cyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLQotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRG
cm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi0jZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpOworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRl
T3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Ms
ICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CiAKLSAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
T2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
YXV0byBnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAg
ICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9w
dCwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKIAotICAg
IGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIHNjb3BlR1BSID0gcmVnVDY7CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9
IHJlZ1Q0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2
ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0gICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAg
ICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNs
b3QpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zm
c2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAg
IHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9T
Q09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5
cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVy
YXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9T
Q09QRV9HRU5FUkFUT1IpCi0gICAgICAgIH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJB
VE9SCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0g
ICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZl
VHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJl
VmFyR2VuZXJhdG9yKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1
YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQor
ICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9y
KTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmso
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3Bl
VGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29u
c3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhp
cyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJl
Y2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9w
R2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSk7Ci0KLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7Ci0K
LSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRh
VGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzY29wZUdQUiA9IHJlZ1QyOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAotICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0g
KEdQUlJlZyBzY29wZUdQUiwgaW50MzJfdCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCkgewotICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0
KSwgcmVnVDEpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0g
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKLSAgICB9OworICAgIGppdC50
YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1Qz
LCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5h
ZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0g
ICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9C
SkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSks
IHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRy
ZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIo
SXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Q
b2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0
cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBv
aW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRy
KHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAo
R1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgewotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5k
R1BSKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmly
b25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOwotICAgIH07Ci0KLSAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKSB7CisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2Nv
cGVHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9zdHJ1Y3R1cmUpKTsgLy8gU3RydWN0
dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVj
dHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJl
c29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0KLSAg
ICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAgICAgY29u
c3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gg
PSByZWdUMjsKLQotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQp
PihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1Qz
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7
CisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2lu
Y2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxP
YmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0
aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJl
Z1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJv
LCByZWdUMSkpOworICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1
cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworCisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0
KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVy
biBqaXQuYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgcmVnVDMpOwogICAgICAgICAgICAgfSkp
OwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIG9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBy
ZWdUMSk7CisKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAg
ICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNl
dCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAg
YWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAg
ICBpc091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxp
bmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMy
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJl
YXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CisgICAgICAgICAgICAgICAgaXNPdXRPZkxp
bmUubGluaygmaml0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAg
ICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQs
IG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwg
VGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSwgcmVzdWx0KTsKKworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY29w
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICAgICAg
aml0Lm5lZzMyKHJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihyZWdU
MSwgcmVnVDEpOworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1Qx
LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9v
cGVyYW5kKSwgcmVnVDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRH
ZXRWYXJGcm9tUG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QwKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKHJlZ1QwLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5k
KSksIHJlZ1QzKTsKLSAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlR1BSLCByZWdU
Myk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFk
YXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOworICAgICAgICAg
ICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgICAg
ICBqaXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCByZWdUMyk7CisgICAgICAgICAgICBqaXQu
YWRkUHRyKHNjb3BlR1BSLCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1Qw
KTsKKwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRD
bG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTIzNDEsODYgKzIyMjEsNjMg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsK
LSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDAp
OyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZl
VHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2Jh
bExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJl
c29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9z
dXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAg
ICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8v
IExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSksIHJlZ1QwKTsKKyAgICAg
ICAgaml0LmFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkp
KTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsK
LSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmso
dGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBu
b3RHbG9iYWxWYXIubGluaygmaml0KTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb24gPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
aXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKCZq
aXQpOworCisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGppdC5icmFuY2gzMihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CisgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluaygmaml0KTsKKyAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkp
OworICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7
CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGppdC5icmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsoJmppdCk7CiAK
LSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5s
aW5rKCZqaXQpOwogICAgIH0KIAogICAgIHN0YXRpY19hc3NlcnQoVmFsdWVQcm9maWxlOjpudW1i
ZXJPZkJ1Y2tldHMgPT0gMSk7Ci0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3Jl
NjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUo
KSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAKLSAgICByZXQoKTsK
KyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9C
QUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dD
YXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJh
dG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChz
bG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9HRVRfRlJP
TV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5l
cmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNV
c2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4g
eyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJh
dGVPcEdldEZyb21TY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9t
X3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShE
RUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9HRVRfRlJPTV9T
Q09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRo
ZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhl
IExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBi
ZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAg
IC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJz
OjplYnApOwpAQCAtMjQyOSw3ICsyMjg2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogI2VuZGlmCiAKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNj
b3BlOjpNZXRhZGF0YTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7
CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBqaXQuc3RvcmUzMihieXRl
Y29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSk7CiAKQEAgLTI0NDksNyArMjMwNiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICBDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlv
blB0clRhZyk7CiAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxl
RXhjZXB0aW9uQ2hlY2sodm0pOwogCi0gICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BS
SW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9m
aWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9m
ZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2
XzY0KQpAQCAtMjQ2OSw4OCArMjMyNiw3NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgcGF0Y2hCdWZmZXIubGluayhqdW1wVG9IYW5kbGVyLCBDb2RlTG9j
YXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBz
bG93X29wX2dldF9mcm9tX3Njb3BlIik7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShz
ZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0
R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQot
ewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRy
KGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdU
MSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIo
cmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAg
ZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAs
IEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNp
emVvZihSZWdpc3RlcikpKTsKLX0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRH
ZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1
dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0
YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAg
YXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJl
Y3RMb2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVz
b2x2ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3Bl
LCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9u
IHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xv
YmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBm
b3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292
ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55
dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHks
IHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisg
ICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3Bl
ZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsK
ICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRy
KG9wZXJhbmRTbG90LCByZWdUMSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
T3BlcmFuZCgpLCByZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAg
ICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChm
aXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFz
ZUluZGV4KHJlZ1QzLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
OgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRT
Y29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgIGlmICgh
aXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKyAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsK
KyAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7CisK
KyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICgh
aXNJbml0aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2Rl
KCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFs
d2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAg
ICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihv
cGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVy
YW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVn
VDEpOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQot
ICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRT
ZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJp
YWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0
YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFu
dFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldh
dGNocG9pbnRTZXQoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hw
b2ludChyZWdUMSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QxKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKwor
ICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUmVzb2x2
ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0
YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworCisgICAgICAgICAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5k
KCksIHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDAp
OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAg
ICAgc3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKwogICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTI1NjQsNTggKzI0MTAs
NTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICB9
CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9
IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
IDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBE
eW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxy
ZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6
IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0
Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIC8v
IElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2FuIGNvbXBpbGUgdGhpbmdzCisgICAgLy8gdGhh
dCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBpcyB0aGUg
dHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENsb3N1cmVWYXIsCisgICAgLy8gYWxsIENvZGVC
bG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1cmVWYXIKKyAgICAvLyBpZiB0aGUgdmFyIGlu
amVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhlbiB3ZSB0
YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hhdCB0eXBl
IHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9z
dXJlVmFyKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9m
aWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUo
UmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBlbWl0Q29kZShDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZWxzZSB7CiAgICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJl
Z1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOwogICAgICAgICBhbmQzMihU
cnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2
ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3Bl
cnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsKKworICAg
ICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAg
ICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlz
KTsKIAogICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5s
aW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKICAgICB9CiB9
CiAKQEAgLTI2MjQsMTggKzI0NjQsMjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19z
Y29wZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlw
ZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNvbHZlVHlw
ZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2Nr
IHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlua2VkIENvZGVCbG9ja3MgYXJlIGd1YXJhbnRl
ZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9kdWxlVmFyLgogICAgICAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Ro
cm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2UgewogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlv
bik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0
cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAg
ICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2Rl
SW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIEFTU0VSVChtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3Ry
dWN0aW9uKTsKIAogICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
YXJndW1lbnRHUFIyOwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAgLTI2NTIsNyArMjQ5NSw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjpl
YnApOwpAQCAtMjcwMSw3ICsyNTQ0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJn
dW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBy
ZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFn
ZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1Qw
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3NTksNyArMjYw
Miw2IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIHZvaWQgSklU
OjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
dW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpAQCAtMjc2Nyw3ICsyNjA5LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbgogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJ
bnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwg
cmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI4MjMsNyArMjY2NSw2IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG8KIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKQEAgLTI4MzksMTEgKzI2ODAsMTcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNl
dCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBjYXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4g
dGhlIExMSW50LgotICAgIGlmIChtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQ
UlJlZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
cmVnVDQ7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVy
YXRvckdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9u
WmVybywgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93
blN0cnVjdHVyZU1vZGUpICYgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlvbk1v
ZGVNYXNrKSkpOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OworCisgICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JOZXh0
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3Ry
dWN0dXJlTW9kZSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0
Y2hHUFIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVt
ZXJhdG9yTWV0YWRhdGEoKSk7CisKICAgICAgICAgbG9hZDMyKEFkZHJlc3MoZW51bWVyYXRvckdQ
UiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
aW5kZXhHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1
YWwsIGluZGV4R1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSkpKTsKIApAQCAtMjg4MSw3OCArMjcyOCw4OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJh
dG9yX25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1l
cmF0b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIgPSBy
ZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2Ny
YXRjaDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7CiAKLSAgICBv
cjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEp
KTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6
Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoMik7CisgICAg
b3IzMihzY3JhdGNoMywgc2NyYXRjaDIpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaDIs
IGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVy
YXRvck1ldGFkYXRhKCkpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKICAgICAvLyBU
aGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgotICAgIEp1bXAgaXNOb3RPd25T
dHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9
IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okdl
bmVyaWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIHN0cnVj
dHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNo
Mik7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3Jh
dGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQuCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gyKTsKICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4g
dGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxp
bmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJU
b1B0cihyZWdUMywgcmVnVDMpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBU
aW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQorICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgc2ln
bkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4
KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAog
ICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxp
bmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDMpOwotICAg
IG5lZzMyKHJlZ1QzKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOworICAg
IGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBi
YXNlR1BSKTsKKyAgICBzdWIzMihBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgbmVn
MzIoc2NyYXRjaDIpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7
CiAgICAgY29uc3RleHByIGludHB0cl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IG9mZnNldElu
QnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludHB0cl90Pihz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdU
MywgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICBs
b2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsK
IAogICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3Ry
dWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgIHN0
b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFz
U2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2RlLCBPcEVudW1l
cmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwog
CiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc05vdElu
ZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQgPSBi
cmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdpdGgg
dGhlIGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAgICBpc05v
dEluZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZh
bDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVk
IHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dl
dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0
R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTYxLDEw
ICsyODE4LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAg
IGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVy
YXRvckdldEJ5VmFsPigpLCBpdGVyKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5
cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVy
YXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5l
cmFsQ2FzZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhG
dW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5
dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29k
ZS5tX2VudW1lcmF0b3I7CkBAIC0yOTczLDcgKzI4MjksOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVt
ZXJhdG9yX2hhc19wcm9wZXJ0eUltCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0
ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9y
TWV0YWRhdGEoKSwgcmVnVDEpOworICAgIG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThU
b01ldGFkYXRhKHJlZ1QxLCBieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVu
dW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25T
dHJ1Y3R1cmVNb2RlKSkpOwogCkBAIC0zMDYyLDYgKzI5MjAsMTMgQEAgdm9pZCBKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVy
KQoreworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2go
dm0oKSwgb3duZXIsIHNlbGVjdFNjcmF0Y2hHUFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93
bmVyKTsKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDkgKzIz
Niw5IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAg
ICAgIGlmIChpc0pTQXJyYXkoYmFzZUNlbGwpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJ
bmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKICAgICAgICAgICAgICAgICAgICAg
JiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VDZWxsCi0gICAgICAgICAgICAgICAgICAgICYmIElu
bGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJy
YXkqPihiYXNlQ2VsbCkpKSB7CisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6
aXNDYWNoZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJh
eSo+KGJhc2VDZWxsKSkpIHsKIAotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENv
ZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpz
Q2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5l
cmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKGNvZGVC
bG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVP
cHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby5pbml0QXJyYXlMZW5ndGgobG9ja2VyKTsKQEAgLTI0OSw4ICsyNDksOCBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICAgICAgbmV3
Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJh
eUxlbmd0aCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmlu
ZyhiYXNlQ2VsbCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkg
PT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6
OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKSkgewotICAgICAgICAgICAgICAgICAg
ICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5n
TGVuZ3RoKHN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpp
c0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKSkgeworICAgICAgICAg
ICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVw
YXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXpp
bmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZv
LmluaXRTdHJpbmdMZW5ndGgobG9ja2VyKTsKQEAgLTMwNCw3ICszMDQsNyBAQCBzdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICAgICAgJiYgIXNsb3Qu
d2F0Y2hwb2ludFNldCgpCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAgICAgICAgICAgICAgICAgJiYgIWxvYWRUYXJnZXRGcm9t
UHJveHkpIHsKLSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUs
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29k
ZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoY29kZUJs
b2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAg
ICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICBM
T0dfSUMoKElDRXZlbnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJ
ZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNl
KCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRX
YXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsK
QEAgLTczMSwxMSArNzMxLDExIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1
dEJ5KEoKICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBs
YWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAg
ICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5
UmVwbGFjZShzdHViSW5mbywgc2xvdC5jYWNoZWRPZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgJiYgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJs
b2NrLCBzdHViSW5mbywgc2xvdC5jYWNoZWRPZmZzZXQoKSkKICAgICAgICAgICAgICAgICAgICAg
JiYgIW9sZFN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAgICAgICAg
ICAgICAgICAgICAgICYmICFpc1Byb3h5KSB7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNh
Y2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5s
aW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2Nr
LCBzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlTZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBw
cm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQp
KTsKQEAgLTExMzIsNyArMTEzMiw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZUluQnkoCiAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2UKICAgICAg
ICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKICAgICAgICAgICAgICAgICAmJiAh
c3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgICAg
ICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZkluQWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGJvb2wgZ2Vu
ZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJh
dGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Oklu
QnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNl
KCkgPT0gYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hp
bmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBAIC0x
NTUyLDcgKzE1NTIsNyBAQCBzdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJ
CiAKIHZvaWQgdW5saW5rQ2FsbChWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQog
ewotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5n
IGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmZhc3RQYXRoU3RhcnQoKSk7CisgICAgZGF0YUxvZ0xu
SWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAi
LCBSYXdQb2ludGVyKCZjYWxsTGlua0luZm8pKTsKICAgICAKICAgICByZXZlcnRDYWxsKHZtLCBj
YWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdn
ZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MywyNCArNDMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRs
ZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdDsKLQot
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50
b3BFbnRyeUZyYW1lKTsKLQotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cigmdm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJh
dGlvbih2bSk7Ci0KLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwo
T3BlcmF0aW9uUHRyVGFnKTsKLQotICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsK
LQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmsob3Bl
cmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXIpKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRpb24iKTsKLX0KLQogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tH
ZW5lcmF0b3IoVk0mIHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkBAIC03NywyNCArNTks
NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhCiAgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0
aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrIik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdl
bmVyYXRvcihWTSYgdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdDsKLQotI2lmIENQVShYODZf
NjQpCi0gICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9m
KENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKLSNlbGlmIENQVShBUk02NCkKLSAg
ICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhl
bHBlcnM6OmxpbmtSZWdpc3Rlcik7Ci0jZW5kaWYKLQotICAgIENDYWxsSGVscGVyczo6SnVtcCBj
b250aW51YXRpb24gPSBqaXQuanVtcCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7
Ci0gICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0
b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY29udGludWF0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwotICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInBvcFRodW5rU3RhY2tQcmVzZXJ2
ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsKLX0KLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKQEAgLTEzNyw2ICsxMDEsNDIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBjaAogCiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2Vu
ZXJhdG9yKFZNJiB2bSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUp
OworCisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKwor
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJU
YWcpOworCisgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOworCisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikp
OworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
ImhhbmRsZUV4Y2VwdGlvbiIpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3Io
Vk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyNpZiBDUFUoWDg2XzY0KQorICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMiAqIHNpemVvZihDUFVSZWdp
c3RlcikpLCBYODZSZWdpc3RlcnM6OmVzcCk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgaml0LnBv
cFBhaXIoQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjps
aW5rUmVnaXN0ZXIpOworI2VuZGlmCisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29udGludWF0
aW9uID0gaml0Lmp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIGF1
dG8gaGFuZGxlciA9IHZtLmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKKyAg
ICBwYXRjaEJ1ZmZlci5saW5rKGNvbnRpbnVhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxl
ci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFu
ZGxlRXhjZXB0aW9uIik7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFRhZ1R5cGU+CiBpbmxpbmUg
dm9pZCBlbWl0UG9pbnRlclZhbGlkYXRpb24oQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwb2lu
dGVyR1BSLCBUYWdUeXBlIHRhZykKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTIgKzM3
LDEyIEBAIGNsYXNzIFZNOwogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9y
KFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2Vw
dGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcihWTSYpOwotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhj
ZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRp
b25HZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
cG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwog
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2tw
b2ludC5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JF
eGl0U2lkZVN0YXRlLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUg
IkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUg
IkVycm9ySGFuZGxpbmdTY29wZS5oIgpAQCAtMzcwLDEzICszNzEsMjIgQEAgaW5saW5lIGJvb2wg
aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVgogICAgIAogICAgIGNvZGVCbG9jay0+dXBkYXRl
QWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoKTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5
cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICBpZiAoUmVmUHRyPEJhc2Vs
aW5lSklUQ29kZT4gYmFzZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkt
Pm1fdW5saW5rZWRCYXNlbGluZUNvZGUpIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0dXBX
aXRoVW5saW5rZWRCYXNlbGluZUNvZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2Rl
QmxvY2spOworICAgICAgICAgICAgY29kZUJsb2NrLT5qaXROZXh0SW52b2NhdGlvbigpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoIWNvZGVC
bG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tf
TE9HX0VWRU5UKGNvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgidGhyZXNob2xkIG5vdCBy
ZWFjaGVkLCBjb3VudGVyID0gIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsK
ICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJl
c2hvbGQgc2hvdWxkIGJlIGxpZnRlZC4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICAKLSAgICBKSVRXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdvcmtsaXN0
OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBK
SVRDb21waWxhdGlvbktleShjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUp
KTsKKyAgICBKSVRXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdvcmtsaXN0Ojpl
bnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBKSVRD
b21waWxhdGlvbktleShjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCksIEpJVENvbXBpbGF0
aW9uTW9kZTo6QmFzZWxpbmUpKTsKIAogICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCkgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJi
b3NlT1NSKCksICIgICAgQ29kZSB3YXMgYWxyZWFkeSBjb21waWxlZC4iKTsKQEAgLTQ2Niw4ICs0
NzYsMTAgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgY29k
ZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewog
ICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZtLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihw
Yyk7CiAgICAgICAgICpwdHIgKz0gY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkubV9h
Y3RpdmVUaHJlc2hvbGQ7Ci0gICAgICAgIGlmICgqcHRyID49IE9wdGlvbnM6OmVhcmx5UmV0dXJu
RnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKQorICAgICAgICBpZiAoKnB0ciA+PSBPcHRpb25zOjpl
YXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkgeworICAgICAgICAgICAgY29kZUJs
b2NrLT5lbnN1cmVKSVREYXRhKENvbmN1cnJlbnRKU0xvY2tlcihjb2RlQmxvY2stPm1fbG9jaykp
OyAvLyBXZSdyZSByZXR1cm5pbmcgdG8gdGhlIE9TUiBlbnRyeSBjb2RlIGhlcmUsIHdoaWNoIGV4
cGVjdHMgdGhhdCBtX2ppdERhdGEgaXMgbm90IG51bGwuCiAgICAgICAgICAgICBMTElOVF9SRVRV
Uk5fVFdPKExMSW50OjpmdXp6ZXJSZXR1cm5FYXJseUZyb21Mb29wSGludEVudHJ5cG9pbnQoKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgY2FsbEZyYW1lLT50b3BPZkZyYW1lKCkpOworICAg
ICAgICB9CiAgICAgfQogICAgIAogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9u
IDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0
RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVO
YW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBl
bmQKLQogICAgICAgICBtZXRhZGF0YSh0MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDAp
CiAgICAgICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBA
IC0xMDIzLDcgKzEwMTksNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3Qs
IGluCiAgICAgICAgICMgTWV0YWRhdGEgaW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRl
Z2VyT3BlcmF0aW9uKHQyLCAuc2xvdykKICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0
W2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQp
CisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9m
aWxlSW50LCB0MSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4
OSwyMiArMTA4NSwxOCBAQCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBP
cE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAK
LSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9w
TmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9i
aXRzW3Q1XQotICAgIGVuZAotCiAgICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29wZXJh
bmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAg
ICBiaW5lcSB0MSwgSW50MzJUYWcsIC5vcE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4
N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9m
aWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0
ZSwgQXJpdGhQcm9maWxlSW50LCB0NSwgdDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAu
b3BOZWdhdGVTcmNOb3RJbnQ6CiAgICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cK
ICAgICB4b3JpIDB4ODAwMDAwMDAsIHQxCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJv
ZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQ
cm9maWxlTnVtYmVyLCB0NSwgdDMpCiAgICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xv
dzoKQEAgLTExMTUsMTAgKzExMDcsNiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3Rv
cmUob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRv
dWJsZU9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwg
b3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVy
bikKLSAgICAgICAgbWFjcm8gYXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlw
ZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRo
UHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwg
dDIpCiAgICAgICAgIGdldChtX3JocywgdDIpCiAgICAgICAgIGdldChtX2xocywgdDApCkBAIC0x
MTI2LDcgKzExMTQsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9w
CiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAg
ICAgICAgIGJpbmVxIHQyLCBJbnQzMlRhZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0Mywg
SW50MzJUYWcsIC5vcDJOb3RJbnQKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUlu
dEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJp
dGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAg
IGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAg
IGRpc3BhdGNoKCkKQEAgLTExMzYsMTIgKzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21T
dG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAg
ICAgICAgYmliIHQzLCBMb3dlc3RUYWcsIC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAgICAgYmlu
ZXEgdDMsIEludDMyVGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxl
TnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQog
ICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAg
ICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmls
ZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0
cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJl
YWR5OgogICAgICAgICBnZXQobV9kc3QsIHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApA
QCAtMTE1Myw3ICsxMTQxLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1l
LCBvcAogICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBz
ZWNvbmQgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikK
ICAgICAgICAgYmlhIHQzLCBMb3dlc3RUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShB
cml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJk
cyB0MCwgZnQwCiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJh
dGlvbihmdDEsIGZ0MCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDQxLDggKzQ0MSwxMyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9v
cCgpCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQogICAgICAgICAgICAgY0NhbGwyKF9sbGludF9s
b29wX29zcikKICAgICAgICAgICAgIGJ0cHogcjAsIC5yZWNvdmVyCi0KICAgICAgICAgICAgIG1v
dmUgcjEsIHNwCisKKyAgICAgICAgICAgICMgQmFzZWxpbmUgdXNlcyBMTEludCdzIFBCIHJlZ2lz
dGVyIGZvciBpdHMgSklUIGNvbnN0YW50IHBvb2wuCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxv
Y2tbY2ZyXSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9qaXREYXRhW1BCXSwg
UEIKKyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6SklURGF0YTo6bV9qaXRDb25zdGFudFBv
b2xbUEJdLCBQQgorCiAgICAgICAgICAgICBpZiBBUk02NEUKICAgICAgICAgICAgICAgICBsZWFw
IEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChj
b25zdGV4cHIgR2F0ZTo6bG9vcE9TUkVudHJ5KSAqIFB0clNpemUsIGEyCiAgICAgICAgICAgICAg
ICAgam1wIFthMl0sIE5hdGl2ZVRvSklUR2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKQEAgLTEw
NTYsMTAgKzEwNjEsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3Ry
CiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlv
bikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAg
bWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxl
OjptX2JpdHNbdDJdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAg
ICAgICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpA
QCAtMTA2OSw3ICsxMDcwLDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0
LCBpbgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51
bWJlclRhZywgdDEKICAgICAgICAgc3RvcmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBk
YXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0
aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAg
ZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMTM0LDExICsxMTM1LDYgQEAgZW5kKQogCiAK
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFBy
b2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAg
Z2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwg
dDMpCiAgICAgbWV0YWRhdGEodDEsIHQyKQpAQCAtMTE0NiwxMiArMTE0MiwxMiBAQCBsbGludE9w
V2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZm
ZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAg
IHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0
aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgIHJldHVybih0
MykKIC5vcE5lZ2F0ZU5vdEludDoKICAgICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNs
b3cKICAgICB4b3JxIDB4ODAwMDAwMDAwMDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2Zp
bGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVn
YXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAKIC5vcE5l
Z2F0ZVNsb3c6CkBAIC0xMTY0LDEwICsxMTYwLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9y
ZShvcGNvZGVOYW1lLCBvcAogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUl
LCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0
dXJuKQogICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0
eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5k
Ci0KICAgICAgICAgZ2V0KG1fcmhzLCB0MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCkBAIC0xMTc3LDcgKzExNjks
NyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdl
dChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5z
bG93LCB0MikKIAotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50
LCB0NSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTg3
LDEwICsxMTc5LDEwIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AK
ICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRh
ZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxl
TnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3Ry
dWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0MikKICAgICAgICAgam1wIC5vcDFO
b3RJbnRSZWFkeQogICAgIC5vcDFOb3RJbnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQ
cm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0MikKICAgICAgICAgY2kyZHMgdDEs
IGZ0MQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEy
MDQsOSArMTE5Niw5IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AK
IAogICAgIC5vcDJOb3RJbnQ6CiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5
IGFuIGludCwgdGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KLSAgICAgICAgZ2V0KG1fZHN0
LCB0MikKICAgICAgICAgYnRxeiB0MSwgbnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBwcm9maWxl
KEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxl
KG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwgdDIpCisgICAgICAgIGdl
dChtX2RzdCwgdDIpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJU
YWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgzMDUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDIwLDcgKzE0MjAsOCBAQCBlbmQKIAogbWFjcm8gY2hlY2tT
d2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlvbikKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
dDAKLSAgICBiYWRkaXMgaW5jcmVtZW50LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRl
ciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCisg
ICAgbG9hZHAgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDBdLCB0MAorICAgIGJh
ZGRpcyBpbmNyZW1lbnQsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwg
LmNvbnRpbnVlCiAgICAgYWN0aW9uKCkKICAgICAuY29udGludWU6CiBlbmQKQEAgLTE1MDMsNyAr
MTUwNCw4IEBAIG1hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2MKICAgICBj
b2RlQmxvY2tHZXR0ZXIodDEpCiAgICAgY29kZUJsb2NrU2V0dGVyKHQxKQogICAgIGlmIG5vdCAo
Q19MT09QIG9yIENfTE9PUF9XSU4pCi0gICAgICAgIGJhZGRpcyA1LCBDb2RlQmxvY2s6Om1fbGxp
bnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3Qx
XSwgLmNvbnRpbnVlCisgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3Vu
dGVyW3QxXSwgdDAKKyAgICAgICAgYmFkZGlzIDUsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6
bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgICAgIGlmIEpTVkFMVUU2NAogICAgICAgICAg
ICAgbW92ZSBjZnIsIGEwCiAgICAgICAgICAgICBtb3ZlIFBDLCBhMQpAQCAtMTYxNywxNCArMTYx
OSwxNCBAQCBtYWNybyBmdW5jdGlvbkluaXRpYWxpemF0aW9uKHByb2ZpbGVBcmdTCiAgICAgIyBv
cHRpbWFsIHdheSBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgbW9yZSB0aGFuIGZpdmUgcmVn
aXN0ZXJzIGF2YWlsYWJsZQogICAgICMgZm9yIGFyYml0cmFyeSB1c2UgaW4gdGhlIGludGVycHJl
dGVyLgogICAgIGxvYWRpIENvZGVCbG9jazo6bV9udW1QYXJhbWV0ZXJzW3QxXSwgdDAKLSAgICBh
ZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAgIyBVc2UgYWRkaSBiZWNhdXNlIHRoYXQncyB3aGF0IGhh
cyB0aGUgcGVlcGhvbGUKKyAgICBhZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAKICAgICBhc3NlcnQo
bWFjcm8gKG9rKSBicGd0ZXEgdDAsIDAsIG9rIGVuZCkKICAgICBidHB6IHQwLCAuYXJndW1lbnRQ
cm9maWxlRG9uZQogICAgIGxvYWRwIENvZGVCbG9jazo6bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMg
KyBGaXhlZFZlY3Rvcjo6bV9zdG9yYWdlICsgUmVmQ291bnRlZEFycmF5OjptX2RhdGFbdDFdLCB0
MwogICAgIGJ0cHogdDMsIC5hcmd1bWVudFByb2ZpbGVEb25lICMgV2hlbiB3ZSBjYW4ndCBKSVQs
IHdlIGRvbid0IGFsbG9jYXRlIGFueSBhcmd1bWVudCB2YWx1ZSBwcm9maWxlcy4KICAgICBtdWxw
IHNpemVvZiBWYWx1ZVByb2ZpbGUsIHQwLCB0MiAjIEFhYWFhaGhoaCEgTmVlZCBzdHJlbmd0aCBy
ZWR1Y3Rpb24hCiAgICAgbHNoaWZ0cCAzLCB0MCAjIG9mZnNldCBvZiBsYXN0IEpTVmFsdWUgYXJn
dW1lbnRzIG9uIHRoZSBzdGFjay4KLSAgICBhZGRwIHQyLCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9m
IFZhbHVlUHJvZmlsZSBhcnJheSBpbiBDb2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVz
LgorICAgIGFkZHAgdDIsIHQzICMgcG9pbnRlciB0byBlbmQgb2YgVmFsdWVQcm9maWxlIGFycmF5
IGluIHRoZSB2YWx1ZSBwcm9maWxlIGFycmF5LgogLmFyZ3VtZW50UHJvZmlsZUxvb3A6CiAgICAg
aWYgSlNWQUxVRTY0CiAgICAgICAgIGxvYWRxIFRoaXNBcmd1bWVudE9mZnNldCAtIDggKyBwcm9m
aWxlQXJnU2tpcCAqIDhbY2ZyLCB0MF0sIHQyCkBAIC0yNTYzLDYgKzI1NjUsMTcgQEAgbWFjcm8g
bm90U3VwcG9ydGVkKCkKICAgICBlbmQKIGVuZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJpdGhQ
cm9maWxlKG9wY29kZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAg
ICBvcmggdHlwZSwgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKK21hY3Jv
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0
ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVb
bWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRz
W3RlbXBdCitlbmQKKwogLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0X1dJ
TiBjb25kaXRpb24gaGVyZSwgc2luY2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUgZmFs
c2Ugb24gV2luZG93cwogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwMzcxNgogaWYgV0VCQVNTRU1CTFkgYW5kIG5vdCBYODZfNjRfV0lOCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFi
bGVJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDEwIEBAIHB1YmxpYzoK
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyKCkgPSBkZWZhdWx0OwogCiAgICAgc3RhdGljIGlubGlu
ZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21DZWxsKEpTQ2VsbCogaWRlbnRpZmllcik7
Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAg
c3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqLCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2Nr
VHlwZSosIGNvbnN0IElkZW50aWZpZXImKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJs
b2NrVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBVbmlxdWVkU3RyaW5n
SW1wbCopOwogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21SYXdCaXRzKHVpbnRwdHJfdCByYXdC
aXRzKSB7IHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHJhd0JpdHMpOyB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRl
bnRpZmllcklubGluZXMuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsMTIgKzM1LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlm
aWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCiB7CiAg
ICAgcmV0dXJuIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhjb2RlQmxvY2ss
IGkuaW1wbCgpKTsKIH0KIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayog
Y29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQordGVtcGxhdGUgPHR5cGVuYW1lIENv
ZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSog
Y29kZUJsb2NrLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIEFTU0VSVF9VTlVTRUQo
Y29kZUJsb2NrLCBjb2RlQmxvY2stPmhhc0lkZW50aWZpZXIodWlkKSk7CiAgICAgcmV0dXJuIENh
Y2hlYWJsZUlkZW50aWZpZXIodWlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlZFR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgi
CiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCdWlsdGluTmFtZXMu
aCIKICNpbmNsdWRlICJCeXRlY29kZUNhY2hlRXJyb3IuaCIKICNpbmNsdWRlICJCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuaCIKQEAgLTE5MTgsNiArMTkxOSw4IEBAIHB1YmxpYzoKIAogICAgIHVu
c2lnbmVkIG51bVZhbHVlUHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bVZhbHVlUHJvZmls
ZXM7IH0KICAgICB1bnNpZ25lZCBudW1BcnJheVByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9u
dW1BcnJheVByb2ZpbGVzOyB9CisgICAgdW5zaWduZWQgbnVtQmluYXJ5QXJpdGhQcm9maWxlcygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtQmluYXJ5QXJpdGhQcm9maWxlczsgfQorICAgIHVuc2lnbmVk
IG51bVVuYXJ5QXJpdGhQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVW5hcnlBcml0aFBy
b2ZpbGVzOyB9CiAKIHByaXZhdGU6CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1fdGhpc1JlZ2lzdGVy
OwpAQCAtMTk1Miw2ICsxOTU1LDggQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fbnVtVmFs
dWVQcm9maWxlczsKICAgICB1bnNpZ25lZCBtX251bUFycmF5UHJvZmlsZXM7CisgICAgdW5zaWdu
ZWQgbV9udW1CaW5hcnlBcml0aFByb2ZpbGVzOworICAgIHVuc2lnbmVkIG1fbnVtVW5hcnlBcml0
aFByb2ZpbGVzOwogCiAgICAgQ2FjaGVkTWV0YWRhdGFUYWJsZSBtX21ldGFkYXRhOwogCkBAIC0y
MTYwLDYgKzIxNjUsOCBAQCBBTFdBWVNfSU5MSU5FIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtl
CiAgICAgLCBtX3JhcmVEYXRhKGNhY2hlZENvZGVCbG9jay5yYXJlRGF0YShkZWNvZGVyKSkKICAg
ICAsIG1fdmFsdWVQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVtVmFsdWVQcm9maWxlcygpKQog
ICAgICwgbV9hcnJheVByb2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1BcnJheVByb2ZpbGVzKCkp
CisgICAgLCBtX2JpbmFyeUFyaXRoUHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bUJpbmFyeUFy
aXRoUHJvZmlsZXMoKSkKKyAgICAsIG1fdW5hcnlBcml0aFByb2ZpbGVzKGNhY2hlZENvZGVCbG9j
ay5udW1VbmFyeUFyaXRoUHJvZmlsZXMoKSkKIHsKIH0KIApAQCAtMjMzNyw2ICsyMzQ0LDggQEAg
QUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVCbG9jazxDb2RlQgogICAgIG1faGFzQ2hlY2tw
b2ludHMgPSBjb2RlQmxvY2subV9oYXNDaGVja3BvaW50czsKICAgICBtX251bVZhbHVlUHJvZmls
ZXMgPSBjb2RlQmxvY2subV92YWx1ZVByb2ZpbGVzLnNpemUoKTsKICAgICBtX251bUFycmF5UHJv
ZmlsZXMgPSBjb2RlQmxvY2subV9hcnJheVByb2ZpbGVzLnNpemUoKTsKKyAgICBtX251bUJpbmFy
eUFyaXRoUHJvZmlsZXMgPSBjb2RlQmxvY2subV9iaW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsK
KyAgICBtX251bVVuYXJ5QXJpdGhQcm9maWxlcyA9IGNvZGVCbG9jay5tX3VuYXJ5QXJpdGhQcm9m
aWxlcy5zaXplKCk7CiAKICAgICBtX21ldGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2su
bV9tZXRhZGF0YS5nZXQoKSk7CiAgICAgbV9yYXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJs
b2NrLm1fcmFyZURhdGEuZ2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00ODAsNyArNDgwLDcgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3df
cGF0aF90bwogI2lmIEVOQUJMRShKSVQpCiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFByb2ZpbGVG
b3JVbmFyeUFyaXRoT3AoT3BOZWdhdGU6Ok1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZSByZXN1
bHQsIEpTVmFsdWUgb3BlcmFuZCkKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9
IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOworICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxl
ID0gKm1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOwogICAgIHByb2ZpbGUub2JzZXJ2ZUFyZyhvcGVy
YW5kKTsKICAgICBBU1NFUlQocmVzdWx0LmlzTnVtYmVyKCkgfHwgcmVzdWx0LmlzQmlnSW50KCkp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
bkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsy
ODksOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZlJh
cmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9y
YXJlRGF0YSk7IH0KICAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFzU3RyaW5n
SW5SYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihSYXJlRGF0YSwgbV9hc1N0cmlu
Zyk7IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNh
bGwoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVC
bG9ja0ZvckNhbGwpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVj
dXRhYmxlLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7IH0KIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw4ICs0MzQsNiBA
QCB2b2lkIE9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoCiAgICAgT3B0aW9uczo6
dXNlQ29uY3VycmVudEdDKCkgPSBmYWxzZTsKICNlbmRpZgogCi0gICAgaWYgKCFpc0FSTTY0KCkp
Ci0gICAgICAgIE9wdGlvbnM6OnVzZURhdGFJQygpID0gZmFsc2U7CiAgICAgaWYgKCFPcHRpb25z
Ojp1c2VEYXRhSUMoKSkKICAgICAgICAgT3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklU
KCkgPSBmYWxzZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDYgQEAgYm9v
bCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEludDMyLCBldmFsVGhyZXNo
b2xkTXVsdGlwbGllciwgMTAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1h
eGltdW1FdmFsQ2FjaGVhYmxlU291cmNlTGVuZ3RoLCAyNTYsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIFwKLSAgICB2KEJvb2wsIHJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3Bv
aW50cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVj
dXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JCYXNlbGluZSwgMTAwMCwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihJbnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVj
a3BvaW50c0ZvclVwcGVyVGllcnMsIDUwMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkBA
IC01MzIsNiArNTMxLDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAg
ICB2KEJvb2wsIHVzZURhdGFJQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9v
bCwgdXNlRGF0YUlDSW5PcHRpbWl6aW5nSklULCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihCb29sLCB1c2VEYXRhSUNTaGFyaW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisg
ICAgdihCb29sLCB1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICBcCiAgICAgLyogRmVhdHVyZSBGbGFncyAqL1wKICAgICBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0
RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NiwxMCArMzk2LDE5IEBAIHZvaWQg
U2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGkKICAgICBpZiAoT3B0aW9uczo6dmFs
aWRhdGVCeXRlY29kZSgpKQogICAgICAgICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7CiAKLSAgICBp
ZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKLSAgICAgICAgc2V0dXBMTEludChjb2RlQmxvY2spOwot
ICAgIGVsc2UKLSAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CisgICAgYm9vbCBpbnN0
YWxsZWRVbmxpbmtlZEJhc2VsaW5lQ29kZSA9IGZhbHNlOworI2lmIEVOQUJMRShKSVQpCisgICAg
aWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxp
bmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlKSB7CisgICAgICAgIGNvZGVC
bG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgICAgIGluc3RhbGxlZFVubGlua2VkQmFzZWxpbmVDb2RlID0gdHJ1ZTsK
KyAgICB9CisjZW5kaWYKKyAgICBpZiAoIWluc3RhbGxlZFVubGlua2VkQmFzZWxpbmVDb2RlKSB7
CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQorICAgICAgICAgICAgc2V0dXBMTElu
dChjb2RlQmxvY2spOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXR1cEpJVCh2bSwgY29k
ZUJsb2NrKTsKKyAgICB9CiAKICAgICBpbnN0YWxsQ29kZSh2bSwgY29kZUJsb2NrLCBjb2RlQmxv
Y2stPmNvZGVUeXBlKCksIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENv
dW50ZXIuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUxMSW50VGllclVwQ291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgIHsKICAgICAgICAg
aWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSwg
bnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xk
Rm9yQkJRT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
c2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJt
VXAoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhy
ZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNo
ZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKQEAgLTY1LDkgKzY1LDkgQEAgcHVi
bGljOgogICAgIHZvaWQgb3B0aW1pemVTb29uKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25z
Ojp3YXNtTExJbnRUaWVyc1VwVG9CQlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChP
cHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAg
ICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29u
KCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6
dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0
TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAg
ICB9CiAKICAgICBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewog
CiBUaWVyVXBDb3VudDo6VGllclVwQ291bnQoKQogewotICAgIHNldE5ld1RocmVzaG9sZChPcHRp
b25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAg
IHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2Fy
bVVwKCkpOwogfQogCiBUaWVyVXBDb3VudDo6flRpZXJVcENvdW50KCkgPSBkZWZhdWx0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3Vu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG9w
dGltaXplQWZ0ZXJXYXJtVXAodWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01H
LW9wdGltaXppbmcgYWZ0ZXIgd2FybS11cC4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9w
dGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7Cisg
ICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFm
dGVyV2FybVVwKCkpOwogICAgIH0KIAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVz
aG9sZFJlYWNoZWQoKQpAQCAtOTAsMTQgKzkwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGlt
aXplTmV4dEludm9jYXRpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01H
LW9wdGltaXppbmcgbmV4dCBpbnZvY2F0aW9uLiIpOwotICAgICAgICBzZXROZXdUaHJlc2hvbGQo
MCwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9sZCgwKTsKICAgICB9CiAKICAgICB2
b2lkIG9wdGltaXplU29vbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAg
ZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUct
b3B0aW1pemluZyBzb29uLiIpOwogICAgICAgICAvLyBGSVhNRTogTmVlZCBhZGp1c3RtZW50IG9u
Y2Ugd2UgZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2FzbSBmdW5jdGlvbnMuCi0gICAgICAg
IHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwg
bnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JP
TUdPcHRpbWl6ZVNvb24oKSk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJl
c2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQodWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29t
cGlsYXRpb25SZXN1bHQgcmVzdWx0KQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDkt
MjQgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgQnVpbGQgYW4g
dW5saW5rZWQgYmFzZWxpbmUgSklUCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjkyMjMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzgyMzIxNzcyPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0Jh
Zy5oOgorICAgICAgICAqIHd0Zi9QYWNrZWQuaDoKKyAgICAgICAgKFdURjo6UGFja2VkQWxpZ25l
ZFB0cjo6b3BlcmF0b3IqIGNvbnN0KToKKwogMjAyMS0wOS0yNCAgRGV2aW4gUm91c3NvICA8ZHJv
dXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHR5cGVjaGVja2luZyBgaXNgIG92ZXJsb2Fk
cyBmb3IgYHN0ZDo6dW5pcXVlX3B0cmAsIGBXVEY6OlVuaXF1ZVJlZmAsIGFuZCBgV1RGOjpXZWFr
UHRyYApJbmRleDogU291cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvQmFnLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG90aGVyLm1f
aGVhZCA9IG51bGxwdHI7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBC
YWcmIG9wZXJhdG9yPShCYWc8VCwgVT4mJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh1bndy
YXBwZWRIZWFkKCkgPT0gb3RoZXIudW53cmFwcGVkSGVhZCgpKQorICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworCisgICAgICAgIEJhZyBkZXN0cm95OworICAgICAgICBkZXN0cm95Lm1faGVhZCA9
IHVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgp
OworICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOworCisgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICB9CisKICAgICB+QmFnKCkKICAgICB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYWNr
ZWQuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL1dURi93dGYvUGFja2VkLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE4Niw3ICsxODYsMTAgQEAgcHVibGljOgogICAgIH0KIAogICAgIFQqIG9w
ZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQotICAgIFQmIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuICpnZXQoKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUgPSBUPgor
ICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3ZvaWRfdjxVPiwgVSY+Ojp0eXBl
IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQorCiAgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdCB7IHJldHVybiAhZ2V0KCk7IH0KIAogICAgIC8vIFRoaXMgY29udmVyc2lvbiBv
cGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3Ro
ZXIgaW50ZWdlciB0eXBlcy4K
</data>
<flag name="commit-queue"
          id="462810"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439207</attachid>
            <date>2021-09-24 16:37:19 -0700</date>
            <delta_ts>2021-09-24 16:52:20 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>647856</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzOCBA
QAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhZGRzIGFuICJ1bmxpbmtlZCIgYmFzZWxpbmUgSklUIHRvIEpTVkFMVUU2
NCBwbGF0Zm9ybXMuIFRoZSBKSVQKKyAgICAgICAgY29kZSBwcm9kdWNlZCBieSB0aGlzIGJhc2Vs
aW5lIEpJVCBjYW4gYmUgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3MgdGhhdAorICAgICAg
ICBzaGFyZSBhbiBVbmxpbmtlZENvZGVCbG9jay4gVGhlIGJlbmVmaXQgb2YgdGhpcyBpcywgaWYg
d2UncmUgY3JlYXRpbmcgYSBDb2RlQmxvY2sKKyAgICAgICAgZnJvbSBhbiBVbmxpbmtlZENvZGVC
bG9jayB0aGF0IGFscmVhZHkgY29tcGlsZWQgYW4gdW5saW5rZWQgYmFzZWxpbmUgSklUCisgICAg
ICAgIGluc3RhbmNlLCB0aGlzIG5ldyBDb2RlQmxvY2sganVzdCBzdGFydHMgb2ZmIGV4ZWN1dGlu
ZyBpbiB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgICJmb3IgZnJlZSIuCisgICAgICAgIAorICAg
ICAgICBUbyBtYWtlIHRoaXMgd29yaywgdGhlIGNvZGUgd2UgZW1pdCBub3cgbmVlZHMgdG8gYmUg
aW5kZXBlbmRlbnQgb2YgYSBzcGVjaWZpYworICAgICAgICBDb2RlQmxvY2sgaW5zdGFuY2UuIFdl
IHVzZSBhIENvZGVCbG9jayBpbnN0YW5jZSBmb3IgbWluaW1hbCBwcm9maWxpbmcgaW5mb3JtYXRp
b24KKyAgICAgICAgd2hlbiBjb21waWxpbmcsIGJ1dCBvdGhlcndpc2UsIHRoZSBjb2RlIGlzIHRp
ZWQgdG8gdGhlIFVubGlua2VkQ29kZUJsb2NrLiBXaGVuCisgICAgICAgIHdlIG5lZWQgQ29kZUJs
b2NrIHNwZWNpZmljIGluZm9ybWF0aW9uLCB3ZSBsb2FkIGl0LiBUaGlzIHVzdWFsbHkgbWVhbnMg
dGhpbmdzCisgICAgICAgIGxpa2Ugd2UnbGwgbG9hZCB0aGluZ3MgZnJvbSB0aGUgTWV0YWRhdGEg
ZHluYW1pY2FsbHkuIFRoaXMgcGF0Y2ggYWxzbyBhZGRzIGEKKyAgICAgICAgImxpbmtlZCBjb25z
dGFudCBwb29sIiBjb25jZXB0LCBhbmQgYW55dGltZSB3ZSBpbnN0YW50aWF0ZSBzdWNoIGEgQ29k
ZUJsb2NrLAorICAgICAgICB3ZSBhbHNvIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcyAibGlua2Vk
IGNvbnN0YW50IHBvb2wiLiBUaGlzIGNvbnRhaW5zIHRoaW5ncworICAgICAgICBsaWtlIG91ciBp
bmxpbmUgY2FjaGUgZGF0YSBzdHJ1Y3R1cmVzIChTdHJ1Y3R1cmVTdHViSW5mbyopLCBKU0dsb2Jh
bE9iamVjdCosCisgICAgICAgIGV0Yy4KKyAgICAgICAgCisgICAgICAgIFVubGlua2VkIGJhc2Vs
aW5lIEpJVCBhbHdheXMgcnVucyBJQ3MgaW4gdGhlICJkYXRhIiBtb2RlLiBUbyBtYWtlIHRoaXMg
d29yaywgSQorICAgICAgICBtYWRlIGRhdGEgSUNzIHdvcmsgb24geDg2XzY0LiBUbyBkbyB0aGlz
LCB3ZSBubyBsb25nZXIgY2FsbC9yZXQgdG8gdGhlIElDLgorICAgICAgICBJbnN0ZWFkLCB3ZSBq
dW1wIHRvIHRoZSBJQywgYW5kIHRoZSBJQyBqdW1wcyBiYWNrIGJ5IGxvYWRpbmcgdGhlICJkb25l
IiBsb2NhdGlvbgorICAgICAgICBmcm9tIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBkeW5hbWljYWxs
eS4gVGhpcyBzaW1wbGlmaWVzIHRoZSBkZXNpZ24gdG8gbm90IGJlCisgICAgICAgIGJhc2VkIG9u
IHRoZSBhcm02NCBjYWxsaW5nIGNvbnZlbnRpb24sIGFuZCBrZWVwcyB0aGUgc2FtZSBwZXJmb3Jt
YW5jZSBjaGFyYWN0ZXJpc3RpY3MuIAorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNv
IGFkZHMgYSBuZXcgdmVyc2lvbiBvZiBJbmxpbmVBY2Nlc3MgdGhhdCBpcyBvbmx5IHVzZWQgaW4g
YmFzZWxpbmUKKyAgICAgICAgSklUIChmb3Igbm93KS4gSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIG1h
a2UgdGhlIERGRy9GVEwgYWxzbyB1c2UgdGhpcyBmb3IgRGF0YQorICAgICAgICBJQ3MuIEJ1dCB3
ZSBkb24ndCBuZWVkIHRvIGRvIHRoYXQgeWV0IHNpbmNlIHRob3NlIHRpZXJzIGRvbid0IHVzZSBk
YXRhIElDcyBieQorICAgICAgICBkZWZhdWx0LiBUaGUgYmFzZWxpbmUgSklUIG5vdyBoYXMgYSBw
dXJlIGRhdGEgSUMgYXBwcm9hY2ggdG8gSW5saW5lQWNjZXNzLiBTbworICAgICAgICBpbnN0ZWFk
IG9mIHJlcGF0Y2hpbmcgY29kZSwgd2UgcmVwYXRjaCBmaWVsZHMgd2UgbG9hZCBkeW5hbWljYWxs
eS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgYSBmZXcgdGhp
bmdzIGluIE9TUiBleGl0LCB3aGVyZSBib3RoIERGRy9GVEwgd2VyZQorICAgICAgICBzdG9yaW5n
IGNhbGxlZSBzYXZlcyB0byB0aGUgY2FsbGVlIHNhdmVzIGJ1ZmZlciBpbiBhIHdlaXJkIHBsYWNl
LCBhbmQgc2VwYXJhdGUKKyAgICAgICAgZnJvbSBvbmUgYW5vdGhlci4gSSBub3RpY2VkIHRoaXMg
Y29kZSBjYW4gYmUgc2ltcGxpZmllZCBpZiB3ZSBqdXN0IHN0b3JlCisgICAgICAgIGNhbGxlZSBz
YXZlcyBhdCB0aGUgZW5kIG9mIHRoZSBPU1IgZXhpdCBoYW5kbGVyLCBhbmQgZnJvbSBjb21tb24g
SklUIGVtaXNzaW9uCisgICAgICAgIGNvZGUuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNo
IGFsc28gZml4ZXMgYSBidWcgd2hlcmUgd2UgY291bGQgZW5kIHVwIHdpdGggdGhlIHdyb25nIChh
bmQgYWx3YXlzCisgICAgICAgIG1vcmUgbmVnYXRpdmUpIFNQIGluIHRoZSBiYXNlbGluZSBKSVQu
IFRoaXMgY291bGQgaGFwcGVuIHdoZW4gd2UgT1NSIGV4aXQKKyAgICAgICAgZnJvbSBhbiBpbmxp
bmVkIGdldHRlci9zZXR0ZXIuIFRoZSBPU1IgZXhpdCBjb2RlIHB1dHMgdGhlIHJldHVybiBQQyB3
aGVuCisgICAgICAgIHJldHVybmluZyB0byB0aGUgY2FsbCBzaXRlIG9mIHRoZSBnZXR0ZXIvc2V0
dGVyIHRvIGJlIHRoZSBpbmxpbmUgY2FjaGUncworICAgICAgICAiZG9uZSBsb2NhdGlvbiIuIEhv
d2V2ZXIsIHRoaXMgImRvbmUgbG9jYXRpb24iIGRpZG4ndCB1c2VkIHRvIHJlc3RvcmUgU1AuCisg
ICAgICAgIFRoaXMgcGF0Y2ggY29uc2VydmF0aXZlbHkgbWFrZXMgaXQgc28gdGhhdCB3ZSByZXN0
b3JlIHRoZSBTUCBhdCB0aGVzZSBzaXRlcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbWVh
c3VyZWQgYXMgYSAxJSBzcGVlZHVwIG9uIFNwZWVkb21ldGVyMi4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlT3Bl
cmFuZHNGb3JDaGVja3BvaW50Lmg6CisgICAgICAgIChKU0M6OnZhbHVlUHJvZmlsZU9mZnNldEZv
cik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjplbWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RmFz
dFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKToKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgpOgorICAgICAgICAo
SlNDOjpDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMpOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNsb3dT
dHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjphZGRyZXNzT2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZSk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6ZnJhbWVSZWdpc3RlckNvdW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiaW5hcnlB
cml0aFByb2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5hcnlBcml0aFBy
b2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluZFBDKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpqaXRTb29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRO
ZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRBZGRJQyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUTXVsSUMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVFN1YklDKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRKSVROZWdJQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6aml0QWZ0ZXJXYXJtVXApOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29u
c3RhbnRQb29sKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFzZWxpbmVKSVRDb25zdGFudFBvb2wpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpkb250SklUQW55dGltZVNvb24pOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duQ2VsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6YWRkTWF0aElDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzZXRKSVRDb2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRD
b2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzd2l0Y2hKdW1wVGFi
bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJh
c2VsaW5lU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNlbGlu
ZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZGZnU3dp
dGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdTdHJpbmdTd2l0Y2hK
dW1wVGFibGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uu
aDoKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjpzZXRUaHJlc2hvbGQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0
aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJ
ZE1ldGFkYXRhLmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0
aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpHZXRCeUlkTW9kZU1ldGFk
YXRhOjpvZmZzZXRPZk1vZGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcDoK
KyAgICAgICAgKEpTQzo6R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0
U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEdl
dHRlcik6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6
OkluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToK
KyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5s
aW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UpOgorICAgICAgICAoSlND
OjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChK
U0M6OklubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OklubGlu
ZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyk6CisgICAgICAgIChKU0M6OklubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2Vzcyk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmg6
CisgICAgICAgICogYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmg6CisgICAgICAgIChK
U0M6Okl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMpOgorICAgICAgICAq
IGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6CisgICAgICAgIChKU0M6OkxMSW50Q2FsbExp
bmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSk6CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2Rl
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAo
SlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OmNhbGN1bGF0ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0
aW9uSGFuZGxpbmcpOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNl
cnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMpOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgICogYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0
YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5jcHA6CisgICAgICAg
IChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OmluaXRHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0UHV0QnlJZFJlcGxhY2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5p
dEluQnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNz
Q2FzZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZE
b25lTG9jYXRpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHA6CisgICAg
ICAgIChKU0M6OnByaW50U3VwZXJTYW1wbGVyU3RhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0lk
ZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dGhyZXNob2xkRm9y
SklUKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJv
ZmlsZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6Omluc3RydWN0aW9uQXQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmJpbmFyeUFyaXRoUHJvZmlsZSk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp1bmFyeUFyaXRoUHJvZmlsZSk6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpsbGludEV4ZWN1dGVDb3VudGVyKToKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaDoKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRNZXRhZGF0YVRhYmxlOjpvZmZzZXRJbk1ldGFkYXRhVGFibGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNl
OjpWYWx1ZVByb2ZpbGVCYXNlKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQmFzZTo6Y2xl
YXJCdWNrZXRzKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVj
a2V0KToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb2RlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAqIGRmZy9E
RkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxpbmsp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJl
cGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmhhbmRsZUV4aXRDb3VudHMp
OgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRK
dW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRQcml2YXRlTmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVWYWx1ZVN1Yik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dTaGFkb3dDaGlja2VuVGFpbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExKSVRDb2Rl
Lmg6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Omxpbmsp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjphZGRNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlVW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpjb21waWxlQmluYXJ5TWF0aElDKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVB1dFByaXZhdGVOYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAg
ICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29t
cGlsZVN0dWIpOgorICAgICAgICAqIGdlbmVyYXRvci9NZXRhZGF0YS5yYjoKKyAgICAgICAgKiBq
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpz
dG9yZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVh
bENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMu
aDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6CisgICAgICAgICogaml0L0Jhc2VsaW5lSklUQ29kZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKToKKyAg
ICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZGRKSVRNdWxJQyk6CisgICAgICAgIChKU0M6Ok1h
dGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMpOgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFk
ZEpJVE5lZ0lDKToKKyAgICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MpOgor
ICAgICAgICAoSlNDOjpCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAg
IChKU0M6OkJhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAgICogaml0
L0Jhc2VsaW5lSklUQ29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SklUQ29uc3RhbnRQb29s
OjphZGQpOgorICAgICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OnNpemUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OmF0IGNvbnN0KToKKyAgICAgICAgKiBqaXQvQmFz
ZWxpbmVKSVRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6QmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6
ZSk6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkNDYWxs
SGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKToKKyAgICAgICAgKEpTQzo6
Q0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldCk6CisgICAgICAgICogaml0
L0NDYWxsSGVscGVycy5oOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHA6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oOgorICAgICAgICAq
IGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpDYWxsRnJhbWVTaHVmZmxlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpwcmVwYXJlRm9yVGFpbENhbGwpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5o
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c25hcHNob3QgY29uc3QpOgorICAg
ICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OkpJVCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRWYXJS
ZWFkT25seUNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc2V0U1ApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5k
Q29uc3RhbnRQb29sUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpm
aW5hbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcik6CisgICAgICAgIChK
U0M6OkpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKToKKyAgICAgICAgKiBqaXQvSklULmg6Cisg
ICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVnYXRlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2FkZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tdWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3ViKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2Fs
bEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2l0ZXJhdG9yX25leHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX25leHQpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxl
U2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dD
YXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpT
Qzo6SklUQ29kZTo6dXNlRGF0YUlDKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6cGNUb0NvZGVP
cmlnaW5NYXApOgorICAgICAgICAqIGppdC9KSVRDb21waWxhdGlvbktleS5jcHA6CisgICAgICAg
IChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklU
Q29tcGlsYXRpb25LZXkuaDoKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OkpJVENv
bXBpbGF0aW9uS2V5KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJhdG9y
ISBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpvcGVy
YXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Omhhc2ggY29u
c3QpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6cHJvZmlsZWRCbG9jayBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXpl
KToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJ
VEdldEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUdldEJ5SWRJbmxpbmVB
Y2Nlc3MpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJ
VFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkpJVERlbEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklURGVsQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAg
IChKU0M6OkpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAo
SlNDOjpKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpKSVRHZXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXRoKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0
YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudEludCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6aXNLbm93bkNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdldENv
bnN0YW50T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6
bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmFkdmFuY2VUb05l
eHRDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdExvYWREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkpJVDo6anVtcFRhcmdldCk6CisgICAgICAgIChKU0M6OkpJVDo6
bG9hZFB0ckZyb21NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZDMyRnJvbU1ldGFk
YXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkOEZyb21NZXRhZGF0YSk6CisgICAgICAgIChK
U0M6OkpJVDo6c3RvcmU4VG9NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6c3RvcmUzMlRv
TWV0YWRhdGEpOgorICAgICAgICAoSlNDOjpKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
SklUOjpsb2FkR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29kZUJsb2Nr
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEdldFB1dEluZm8pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZSk6IERlbGV0ZWQuCisgICAg
ICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9u
dWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzVHJ1dGh5
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dp
dGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVj
a190cmFwcyk6CisgICAgICAgIChKU0M6OkpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5l
d0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYXJndW1lbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9v
Zik6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdHlwZW9mX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SklUX09QRVJBVElPTik6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBqaXQvSklUUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmtleSk6CisgICAgICAg
ICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6c2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9k
ZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
aW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQcml2YXRlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SGFzUHJpdmF0ZVNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19w
cml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRl
X2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmspOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29w
ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKToKKyAgICAg
ICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF90
b19zY29wZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1
cmVWYXIpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9wcml2YXRlX2Jy
YW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9pbnRl
cm5hbF9maWVsZCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUdldEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeSk6CisgICAgICAgIChK
U0M6OnRyeUNhY2hlSW5CeSk6CisgICAgICAgIChKU0M6OnVubGlua0NhbGwpOgorICAgICAgICAq
IGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpoYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxl
RXhjZXB0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6Cisg
ICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6
aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRf
U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayk6CisgICAgICAgICogcnVudGltZS9DYWNoZWRU
eXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtQmluYXJ5QXJpdGhQ
cm9maWxlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtVW5hcnlB
cml0aFByb2ZpbGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9j
a1R5cGU+OjplbmNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoK
KyAgICAgICAgKEpTQzo6dXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKToKKyAgICAg
ICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlv
bnMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1l
L1NjcmlwdEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpw
cmVwYXJlRm9yRXhlY3V0aW9uSW1wbCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRUaWVyVXBD
b3VudGVyLmg6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6b3B0aW1p
emVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6
b3B0aW1pemVTb29uKToKKyAgICAgICAgKiB3YXNtL1dhc21UaWVyVXBDb3VudC5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50OjpUaWVyVXBDb3VudCk6CisgICAgICAgICogd2Fz
bS9XYXNtVGllclVwQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6Om9w
dGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6b3B0
aW1pemVOZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50Ojpv
cHRpbWl6ZVNvb24pOgorCiAyMDIxLTA5LTIzICBQaGlsaXAgQ2hpbWVudG8gIDxwY2hpbWVudG9A
aWdhbGlhLmNvbT4KIAogICAgICAgICBWYXJpb3VzIHR3ZWFrcyBpbiBwcmVwYXJhdGlvbiBmb3Ig
VGVtcG9yYWwuSW5zdGFudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC02MTEsNiArNjExLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCiAgICAgYnVp
bHRpbnMvQnVpbHRpblV0aWxzLmgKIAorICAgIGJ5dGVjb2RlL0FyaXRoUHJvZmlsZS5oCiAgICAg
Ynl0ZWNvZGUvQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvQXJyYXlQcm9m
aWxlLmgKICAgICBieXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25zLmgKQEAgLTgzNyw2ICs4Mzgs
NyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAKICAgICBqaXQv
QXNzZW1ibHlIZWxwZXJzLmgKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaAorICAg
IGppdC9CYXNlbGluZUpJVENvZGUuaAogICAgIGppdC9DQ2FsbEhlbHBlcnMuaAogICAgIGppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmgKICAgICBqaXQvRXhlY3V0YWJsZU1lbW9yeUhhbmRsZS5oCkBA
IC04NzUsNiArODc3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QQogICAgIHBhcnNlci9QYXJzZXJFcnJvci5oCiAgICAgcGFyc2VyL1BhcnNlck1vZGVzLmgKICAg
ICBwYXJzZXIvUGFyc2VyVG9rZW5zLmgKKyAgICBwYXJzZXIvUmVzdWx0VHlwZS5oCiAgICAgcGFy
c2VyL1NvdXJjZUNvZGUuaAogICAgIHBhcnNlci9Tb3VyY2VQcm92aWRlci5oCiAgICAgcGFyc2Vy
L1NvdXJjZVByb3ZpZGVyQ2FjaGUuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC02MTksNiArNjE5LDcgQEAgaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tl
bi5jcHAKIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKIAogaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAKK2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCiBqaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAog
aml0L0JpbmFyeVN3aXRjaC5jcHAKIGppdC9DQ2FsbEhlbHBlcnMuY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTkwMCw2ICs5MDAsNyBAQAogCQk1MkNEMEY1RDIyNDJGNTY5MDA0QTE4QTUgLyog
Rm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFt
ZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0MkY1NjkwMDRBMThBNSAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNEMEY2NzIyNDJGNzFD
MDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87IH07CisJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkVF
RDc5NDI0OTJCODcwMDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRUVENzkzMjQ5MkI4NjgwMDhGNEM5
MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovOyB9OwogCQk1MkY2QzM1RTFFNzFFQjA4MDA4MUY0
Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyB9OwogCQk1MzBBNjZCOTFGQTNFNzhCMDAyNkE1
NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCMTFGQTNFNzdBMDAyNkE1NDUgLyogVW5pZmllZFNvdXJj
ZTMtbW0ubW0gKi87IH07CkBAIC0xMjIwLDcgKzEyMjEsNyBAQAogCQk3OTg3MkM0ODIyMUJCQUYz
MDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODcyQzQ3MjIxQkJBRUQwMDhDNjk2OSAvKiBKU0Jhc2VJbnRl
cm5hbC5oICovOyB9OwogCQk3OTlFRjdDNDFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2lu
TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTlF
RjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4
ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3OUEyMjgzNjFE
MzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQ
cm9maWxlLmggKi87IH07CisJCTc5QTIyODM2MUQzNUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFByb2Zp
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTIy
ODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUFCQjE3RTFFNUNDQjU3MDA0NUI5QTYg
LyogQWlyRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUFCQjE3QzFFNUNDQjU3MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQzMw
RkYxRjk5NTM2NDAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBQzMwRkUxRjk5
NTM2MzAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oICovOyB9Owog
CQk3OUFGMEJFNDFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFGMEJFMzFEM0VG
RDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM2NzQsNiArMzY3NSw4IEBACiAJCTUy
Q0QwRjY0MjI0MkY1NjkwMDRBMThBNSAvKiB0ZXN0ZGZnICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBp
bmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0ZGZnOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwogCQk1MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0ZGZnLmNwcDsgcGF0aCA9
IGRmZy90ZXN0ZGZnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJEMTMwOEYy
MjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgcGF0aCA9IGZvby5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJERDAwMDYy
NkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNl
bGluZUpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJERDAwMDcyNkUw
MzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBC
YXNlbGluZUpJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkVFRDc5
MjI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzYsNiArNjI3OSw4IEBACiAJCQkJ
NkI3NjdFN0EyNjc5MUYyNzAwMTdGOEQxIC8qIEFzc2VtYmx5SGVscGVyc1Nwb29sZXJzLmggKi8s
CiAJCQkJNzIzOTk4RjYyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5jcHAgKi8s
CiAJCQkJNzIzOTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5oICovLAor
CQkJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovLAor
CQkJCTUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLywKIAkJ
CQkwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNwcCAqLywKIAkJCQkw
RjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi8sCiAJCQkJNjVCODM5
MkQxQkFDQTlEMzAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmNwcCAqLywKQEAgLTk3MzAsNiAr
OTczNSw3IEBACiAJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1OTUwIC8qIERGR0Zsb3dNYXAuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVk
QXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdG
bHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJERDAwMDgyNkUwMzlCOTAwNTRFNDA4
IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTUxQUIzRDhC
RTAwQkJCOEU4IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY5Q0M4
OTE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzODZGRDdFMjZFODY3QjgwMEU0QzI4QiAvKiBUZW1wb3JhbFBsYWluVGltZS5oIGluIEhlYWRl
cnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxNSArMjAyLDE1IEBAIFJl
ZlB0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9tU3RydWMKICAgICBzd2l0Y2ggKHN0dWJJ
bmZvLmNhY2hlVHlwZSgpKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAg
ICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgTG9hZCwg
aWRlbnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBQcm94eWFibGVBY2Nl
c3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBMb2FkLCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlk
U2VsZk9mZnNldCwgc3R1YkluZm8uaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAg
ICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgogICAgICAgICBSRUxFQVNFX0FTU0VS
VChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICByZXR1cm4gQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmllciwgc3R1YkluZm8udS5i
eUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQo
KSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBSZXBsYWNl
LCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8uaW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7
Ci0gICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBJbkhpdCwgaWRl
bnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIG93bmVyLCBJbkhpdCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uaGFz
Q29uc3RhbnRJZGVudGlmaWVyKTsKQEAgLTE5ODUsMTQgKzE5ODUsMTAgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAvLyBTdHVmZiBmb3IgY3VzdG9t
IGdldHRlcnMvc2V0dGVycy4KICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNh
bGw7CiAKKwogICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNhbGN1bGF0
aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAgICAgICAvLyBleGNlcHRpb24gaGFu
ZGxpbmcgY2FsbCBzaXRlLgotICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkKLSAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdpc3Rl
cnM6OmxyKTsKLSNlbmRpZgotICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3Rh
dGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
KGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9T
dGFja0ZvckNhbGwoKTsKIAogICAgICAgICBhdXRvIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0
YWNrRm9yQ2FsbCA9IFsmXShBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUmIHNwaWxs
U3RhdGUsIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlKSB7CiAgICAgICAgICAgICBSZWdpc3RlclNl
dCBkb250UmVzdG9yZTsKQEAgLTIwNzksOCArMjA3NSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIEFTU0VSVCghKG51bWJlck9mUmVnc0Zv
ckNhbGwgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSk7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVn
aXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwogCi0gICAgICAgICAgICB1bnNpZ25l
ZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQotICAgICAgICAgICAgV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwp
OworICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0gV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRl
c0ZvckNhbGwpOwogCiAgICAgICAgICAgICBqaXQuc3ViUHRyKAogICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCkBA
IC0yMTM4LDYgKzIxMzMsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NH
ZW5lCiAKICAgICAgICAgICAgIGludCBzdGFja1BvaW50ZXJPZmZzZXQgPSAoY29kZUJsb2NrLT5z
dGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpIC0gc3RhdGUucHJlc2VydmVk
UmV1c2VkUmVnaXN0ZXJTdGF0ZS5udW1iZXJPZkJ5dGVzUHJlc2VydmVkIC0gc3BpbGxTdGF0ZS5u
dW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb247CiAgICAgICAgICAg
ICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKwogICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUgPSBpc0dl
dHRlcigpOwogICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxs
KHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7CiAKQEAgLTIyNjQsMTIgKzIyNjAsNyBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAKICAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJn
ZXRPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgICAgICBSZWdpc3RlclNldCBleHRy
YVJlZ2lzdGVyc1RvUHJlc2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAgaWYgKGNv
ZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1By
ZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCi0gICAgICAgICAgICBhdXRv
IHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdp
dGhvdXRFeGNlcHRpb25zKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAgICAgICBh
dXRvIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2Fs
bFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+KENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cigmdm0pLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGppdC5wcmVwYXJlQ2Fs
bE9wZXJhdGlvbih2bSk7CkBAIC0yMzY0LDEwICsyMzU1LDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmUuc2V0KGJhc2VHUFIpOwogICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZS5zZXQodmFsdWVSZWdzKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgICAgICAgICAgICAgaWYg
KGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0
ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgogICAgICAgICAg
ICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3Rh
dGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3RlcnNUb1By
ZXNlcnZlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBAIG9wX2dyb3Vw
IDpQcm9maWxlZEJpbmFyeU9wLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRUeXBlcywK
ICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJp
dGhQcm9maWxlCisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAg
ICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTMsNyArMzUzLDcg
QEAgb3BfZ3JvdXAgOlVuYXJ5SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgICAgIHNyY0RzdDogVmly
dHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9m
aWxlOiBVbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQ
cm9maWxlLioKICAgICB9CiAKIG9wIDp0b19vYmplY3QsCkBAIC0zODYsNyArMzg2LDcgQEAgb3Ag
Om5lZ2F0ZSwKICAgICAgICAgcmVzdWx0VHlwZTogUmVzdWx0VHlwZSwKICAgICB9LAogICAgIG1l
dGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUsCisgICAg
ICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3AgOm5vdCwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9y
Q2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9p
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjggQEAgVmFsdWVQcm9maWxlKiB2YWx1
ZVByb2ZpbGVGb3JJbXBsKEJ5dGVjbwogICAgICAgICByZXR1cm4gJm1ldGFkYXRhLm1fcHJvZmls
ZTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgordWludHB0cl90IHZhbHVlUHJv
ZmlsZU9mZnNldEZvcih1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCit7CisgICAgVU5VU0VEX1BB
UkFNKGNoZWNrcG9pbnRJbmRleCk7CisgICAgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2Rl
SUQgPT0gb3BfaXRlcmF0b3Jfb3BlbikgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRl
eCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1cm4gQnl0
ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOworICAgICAgICBjYXNl
IE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZk5leHRQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKEJ5dGVjb2Rl
OjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2tw
b2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0OiBy
ZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRSZXN1bHRQcm9maWxlKCk7Cisg
ICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJldHVybiBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mRG9uZVByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4
dDo6Z2V0VmFsdWU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mVmFsdWVQcm9m
aWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mUHJvZmlsZSgpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZU1ldGFk
YXRhPgogYm9vbCBoYXNWYWx1ZVByb2ZpbGVGb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEs
IHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDExICsxMTQsNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2
bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7CiB9CiAKLUNvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCi17Ci0g
ICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPihtX2Zh
c3RQYXRoU3RhcnQpOwotfQotCiBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBD
YWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0Rh
dGFJQygpKTsKQEAgLTIyNSw2ICsyMjAsMTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldE1heEFy
Z3VtZW50Q291bnRJbgogICAgIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSB2YWx1
ZTsKIH0KIAorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZv
OjpmYXN0UGF0aFN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVjdCgpICYmIGlz
VGFpbENhbGwoKSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVy
bmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQpOworfQorCiB2b2lkIENhbGxMaW5r
SW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRvIGhhbmRsZVNwZWNpZmljQ2FsbGVl
ID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKQEAgLTI5OCwyMyArMjk5LDExIEBAIHZvaWQg
Q2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGMKICAgICBtX2ZyYW1lU2h1ZmZsZURh
dGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewotICAgIHNldFVzZXNEYXRhSUNzKHVz
ZURhdGFJQyk7Ci0gICAgaWYgKGlzRGF0YUlDKCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsK
LSAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7Ci0g
ICAgfQotCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQ
YXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBh
dGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRo
OwogCi0gICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICBpZiAodXNlRGF0YUlDID09IFVzZURhdGFJ
Qzo6WWVzKSB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hSZWdpc3Rl
cigpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJ
bmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7IAogICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKQEAgLTMyMyw3ICszMTIsNyBAQCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAgICAgICBnb1BvbHltb3JwaGlj
ID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5bW9ycGhpY0NhbGxlZU1hc2spKTsKICAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc1Rh
aWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBh
cmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgZ29Qb2x5bW9ycGhpYy5saW5rKCZqaXQpOyAv
LyBQb2x5bW9ycGhpYyBzdHViIGhhbmRsZXMgdGFpbCBjYWxsIHN0YWNrIHByZXAuCiAgICAgICAg
ICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBv
ZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKQEAg
LTMzNiwxNCArMzI1LDE2IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmUKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2goQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG51bGxwdHIpKSk7CiAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNh
bGw7Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwp
IHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgY2FsbCA9
IGppdC5uZWFyVGFpbENhbGwoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsK
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAgICAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbGVlQ2hlY2spOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2Nh
bGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2NhbGxlZUxv
Y2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNo
ZWNrKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNTMsMTMgKzM0NCwzNCBAQCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgbnVsbHB0
cik7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKworICAgIGlmIChpc0RhdGFJQygp
KSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6Oklu
dmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJ
bmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywg
aXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENh
bGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVG
b3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwotICAgIHJl
dHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVz
ZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKKyAgICBzZXRVc2VzRGF0YUlD
cyhVc2VEYXRhSUM6Ok5vKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQs
IGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgVXNlRGF0YUlDOjpObywgaXNUYWlsQ2FsbCgpLCBX
VEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0
RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQ
YXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKIH0KIAogdm9pZCBD
YWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0KQpAQCAt
MzY5LDE3ICszODEsMzIgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0s
IAogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zm
c2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKK3Zv
aWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmIGpp
dCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBqaXQubW92ZShjYWxsTGlua0luZm9H
UFIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50
cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyhWTSYg
dm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSUmVnIGNh
bGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBtX2NvZGVPcmlnaW4gPSBD
b2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIHNldFVw
Q2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2FsbGVlR1BSKTsKKyAgICBtX2Rv
bmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBpZiAo
dW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkgeworICAgICAgICAvLyBGSVhN
RTogSXQnZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBzdHJ1Y3R1cmUu
CisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZs
ZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsKKyAgICB9Cisg
ICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlDLm1fY2FsbExp
bmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdn
ZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERp
cmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFp
c1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CiAKLSAg
ICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsK
LSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1p
dERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwo
KTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQp
OwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwgdGhpcyBpcyBh
IGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JU
YWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZhc3RQYXRo
KENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAg
ICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBzdGF0aWMgdm9p
ZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wgaXNEYXRh
SUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9
PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoKICAgICAgICAg
bV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsyNDksNiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAotICAgIEpJVFN0
dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zbG93U3R1Yi5n
ZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAgICAgIHJldHVy
biBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsKICAgICB9CiAK
LSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX21heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJfdCBtYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVibGljOgogICAg
IH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBt
X2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlvblR5cGUgewpA
QCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25OZWFy
Q2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxvY2F0aW9uOwog
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9zbG93UGF0
aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
bV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAKQEAgLTQyNCw2
ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaQogICAg
IHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3QgVW5saW5rZWRD
YWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsgLy8gQ3VycmVu
dGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxseSBwcm9kdWNl
IGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOworICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZsZURhdGE7Cit9
OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3OSw4ICsyNzksNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhW
TSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkK
ICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9oYXNCZWVuQ29t
cGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNlKQotICAg
ICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUoZmFsc2UpCiAgICAgLCBtX251bUNhbGxl
ZUxvY2FscyhvdGhlci5tX251bUNhbGxlZUxvY2FscykKICAgICAsIG1fbnVtVmFycyhvdGhlci5t
X251bVZhcnMpCiAgICAgLCBtX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKG90aGVyLm1fbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXApCkBAIC0zMDgsNiArMzA2LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxv
Y2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkp
OwogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKKworICAgIG1f
bGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxpbnRFeGVjdXRlQ291bnRl
cigpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQpAQCAt
MzE4LDcgKzMxOCw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEMK
ICAgICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVw
KCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKIAogICAgIGlmIChvdGhlci5tX3JhcmVEYXRhKSB7
CiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTMzNiw4ICszMzUsNiBA
QCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2RpZEZh
aWxKSVRDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZh
bHNlKQogICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9oYXNM
aW5rZWRPU1JFeGl0KGZhbHNlKQotICAgICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUo
ZmFsc2UpIAogICAgICwgbV9udW1DYWxsZWVMb2NhbHModW5saW5rZWRDb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpKQogICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1WYXJz
KCkpCiAgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQpAQCAtMzU5LDcgKzM1Niw5
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAgIEFTU0VS
VChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9sbGludEV4ZWN1dGVDb3Vu
dGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CisKICAgICB2bS5o
ZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcwLDcgKzM2OSw4IEBAIENv
ZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIC8vIHdlIGNhbid0IGdlbmVy
YXRlIGR1cmluZyB1bmxpbmtlZCBieXRlY29kZSBnZW5lcmF0aW9uLiBUaGlzIHByb2Nlc3MgaXMg
bm90IGFsbG93ZWQgdG8gZ2VuZXJhdGUgY29udHJvbAogLy8gZmxvdyBvciBpbnRyb2R1Y2UgbmV3
IGxvY2Fscy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB3ZSByZWx5IG9uIGxpdmVuZXNzIGFuYWx5
c2lzIHRvIGJlIHRoZSBzYW1lIGZvcgogLy8gYWxsIHRoZSBDb2RlQmxvY2tzIG9mIGFuIFVubGlu
a2VkQ29kZUJsb2NrLiBXZSByZWx5IG9uIHRoaXMgZmFjdCBieSBjYWNoaW5nIHRoZSBsaXZlbmVz
cyBhbmFseXNpcwotLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLgorLy8gaW5zaWRlIFVubGlu
a2VkQ29kZUJsb2NrLiBBbHNvLCBCYXNlbGluZSBKSVQgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiBh
bGwgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jaywKKy8vIHNvIHRoZSBieXRlY29k
ZSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBiZXR3ZWVuIENvZGVCbG9ja3Mgc2hhcmluZyBhbiBVbmxp
bmtlZENvZGVCbG9jay4KIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlu
a2VkQ29kZUJsb2NrLAogICAgIEpTU2NvcGUqIHNjb3BlKQogewpAQCAtNDcxLDYgKzQ3MSwyMSBA
QCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFr
OyBcCiAgICAgfQogCisgICAgdW5zaWduZWQgYmluYXJ5UHJvZmlsZUluZGV4ID0gMDsKKyAgICB1
bnNpZ25lZCB1bmFyeVByb2ZpbGVJbmRleCA9IDA7CisjZGVmaW5lIExJTktfV0lUSF9CSU5BUllf
QVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJ
QUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9
ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJpbmFyeVByb2ZpbGVJbmRleCsr
KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19XSVRIX1VOQVJZX0FS
SVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFM
SVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAm
bV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKHVuYXJ5UHJvZmlsZUluZGV4KyspOyBc
CisgICAgICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
IGluc3RydWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRv
JiBpbnN0cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9w
Y29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMsMTQgKzU0OCwxNCBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BD
cmVhdGVQcm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAg
IExJTksoT3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0g
ICAgICAgIExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElO
SyhPcEluYykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9B
UklUSF9QUk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJ
TEUoT3BNdWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikK
KyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAg
IExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJ
VEhfVU5BUllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FS
SVRIX1BST0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2OSw3
ICs3ODQsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAg
Ly8gcmVseSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1p
dHRlZCB0byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1v
cmUgYWNjdXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0
ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgLy8gSWYgdGhlIGNvbmN1
cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4gY29tcHV0
ZSBpdCBoZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAgLTc5Myw2ICs4MDcsNzggQEAgdm9p
ZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3duZXJFZGdlLnNl
dCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZtLCB0aGlzKSk7
CiB9CiAKKyNpZiBFTkFCTEUoSklUKQordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2Vk
QmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7CisgICAgc2V0SklU
Q29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8mIGpp
dENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAgICAgICAgIEhh
bmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAgaGFuZGxlci5u
YXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQp
KS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9CisgICAgfQor
CisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAg
ICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOworICAgICAg
ICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGppdENvZGUt
Pm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8g
ZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAgICAgIHN3aXRj
aCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6
Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29s
W2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7CisgICAg
ICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvID0g
KnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9hZC5nZXQoKSk7
CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXREYXRhLm1f
Y2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29k
ZUluZGV4KSk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFsaXplRGF0YUlD
KHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVn
VDIpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBjYWxs
TGlua0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKKyAg
ICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZv
ID0gKnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRyeS5wYXlsb2Fk
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBq
aXREYXRhLm1fc3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUsIENvZGVP
cmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAg
c3R1YkluZm8tPmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyh0aGlzLCB1
bmxpbmtlZFN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQ
b29sW2ldID0gc3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsOiB7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpGdW5jdGlvbkV4cHI6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAg
IGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5kZXgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBHbG9iYWxD
b2RlOgorICAgIGNhc2UgTW9kdWxlQ29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgorICAgICAgICBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZ1bmN0aW9uQ29kZToKKyAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0
byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgorICAgICAg
ICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBtX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYmIERGRzo6bWln
aHRJbmxpbmVGdW5jdGlvbih0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYg
KGppdENvZGUtPm1faXNTaGFyZWFibGUgJiYgIXVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5r
ZWRCYXNlbGluZUNvZGUgJiYgT3B0aW9uczo6dXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZygpKQor
ICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlID0gV1RG
TW92ZShqaXRDb2RlKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCiBDb2RlQmxvY2s6On5D
b2RlQmxvY2soKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtODczLDYgKzk1OSwyNyBAQCBD
b2RlQmxvY2s6On5Db2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKK2Jvb2wg
Q29kZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZpcnR1YWxSZWdp
c3RlciByZWcpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBuZWVkcyB0byBjb3JyZXNwb25kIHRvIHdo
YXQgd2UgZG8gaW5zaWRlIHNldENvbnN0YW50UmVnaXN0ZXJzLgorICAgIHN3aXRjaCAodW5saW5r
ZWRDb2RlQmxvY2soKS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKSkgewor
ICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgIGNhc2UgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcjogeworICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gdW5saW5rZWRDb2RlQmxvY2soKS0+Z2V0Q29uc3RhbnQocmVnKTsKKyAgICAgICAg
aWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlmIChjZWxs
LT5pbmhlcml0czxTeW1ib2xUYWJsZT4odm0oKSkgfHwgY2VsbC0+aW5oZXJpdHM8SlNUZW1wbGF0
ZU9iamVjdERlc2NyaXB0b3I+KHZtKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkxpbmtUaW1lQ29uc3RhbnQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
IFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBG
aXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IEZpeGVk
VmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbikKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTg5Miw2ICs5OTksNyBAQCBW
ZWN0b3I8dW5zaWduZWQ+IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSCiAgICAgICAgIHN3aXRjaCAo
cmVwcmVzZW50YXRpb24pIHsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
OkxpbmtUaW1lQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb25zdGFudCA9IGdsb2JhbE9iamVjdC0+
bGlua1RpbWVDb25zdGFudChzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50Pihjb25zdGFudC5h
c0ludDMyQXNBbnlJbnQoKSkpOworICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50LmlzQ2VsbCgp
KTsgLy8gVW5saW5rZWQgQmFzZWxpbmUgSklUIHJlcXVpcmVzIHRoaXMuCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOgogICAg
ICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKQEAgLTE1MTQsNyAr
MTYyMiw3IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJsb2NrOjplbnN1cmVKSVQKICAgICBy
ZXR1cm4gKm1faml0RGF0YTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVK
SVRJbmxpbmVDYWNoZXMoKQordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVz
KCkKIHsKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewogICAgICAg
ICBmb3IgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0lu
Zm9zKQpAQCAtMTUyNSw2ICsxNjMzLDIwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJhc2Vs
aW5lSklUSW5saW4KICAgICAgICAgICAgIHN0dWJJbmZvLT52aXNpdFdlYWtSZWZlcmVuY2VzKGxv
Y2tlciwgdGhpcyk7CiAgICAgICAgIH0KICAgICB9CisKKworI2lmIEFTU0VSVF9FTkFCTEVECisg
ICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICAvLyBW
ZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3JlIHZpcnR1
YWwgY2FsbHMuCisgICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBzdGF0
aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxDYWxsTGlu
a0luZm9zKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7
CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtdIChKU0Nl
bGwqKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgfQorI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTUzNCw0
NiArMTY1NiwxMiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAK
ICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29s
IGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdy
YWRlOwotICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8g
SWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJl
cGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUg
SklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAg
ICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQo
KS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBv
cHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAgICAgICAg
ICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJbnQ6OnNl
dEVudHJ5cG9pbnQodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2Vw
dGlvbkhhbmRsZXJzKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5s
aW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2Vw
dGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFu
ZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtl
ZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIu
aW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2Rl
KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHVubGlu
a0luY29taW5nQ2FsbHMoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8g
Y2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBh
bGwgY29tcGlsZXIgdGhyZWFkcwotICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50
ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNv
ZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlz
IHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9z
LgotICAgICAgICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUg
PSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYKLSAgICAK
ICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAgICAgICAg
IGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYg
KCEhaml0Q29kZSgpKQotICAgICAgICBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7
CisgICAgICAgIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShERkdfSklUKQpAQCAtMTU5NCw3ICsxNjgyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KAogICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
azoKLSAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7Cisg
ICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y291bnQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAg
ICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CkBAIC0xNjc1LDMwICsx
NzYzLDYgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgogICAgIHJl
dHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUsIGNv
ZGVPcmlnaW4pOwogfQogCi1KSVRBZGRJQyogQ29kZUJsb2NrOjphZGRKSVRBZGRJQyhCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2FkZElDcy5h
ZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklUTXVsSUMo
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9t
dWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJ
VFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2Nr
ZXIpLm1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVROZWdJQyogQ29kZUJsb2Nr
OjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0
YShsb2NrZXIpLm1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCiBTdHJ1Y3R1cmVTdHVi
SW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewog
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKQEAgLTMxMzMsNyArMzE5Nyw3
IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lmIEVOQUJM
RShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0dXJuIEpJ
VDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklUOjpmcmFt
ZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzM0OSwxMyArMzQxMywxMyBA
QCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAgc3dpdGNo
IChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1cm4gJnBj
LT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0
dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBj
YXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhp
cykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAgIHJldHVy
biAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAg
ICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwog
ICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERpdj4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKICAgICB9CkBAIC0zMzY3LDExICszNDMxLDExIEBAIFVuYXJ5QXJpdGhQcm9maWxlKiBDb2Rl
QmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAgICAg
Y2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTmVnYXRl
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5jOgotICAg
ICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEZWM+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8
T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzQ3MiwyMiArMzUzNiwxNiBAQCB2b2lkIENvZGVCbG9j
azo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBD
b2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9y
aWdpbk1hcD4mJiBtYXApIAoteyAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7Ci0gICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZN
b3ZlKG1hcCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW5k
UEModm9pZCogcGMpCiB7CisgICAgaWYgKGF1dG8qIHBjVG9Db2RlT3JpZ2luTWFwID0gbV9qaXRD
b2RlLT5wY1RvQ29kZU9yaWdpbk1hcCgpKSB7CisgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENv
ZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBwY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBjKSkKKyAg
ICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAgIH0KKwogICAgIHsKICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBpZiAoYXV0byogaml0RGF0
YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICAgICAgaWYgKGppdERhdGEtPm1fcGNUb0Nv
ZGVPcmlnaW5NYXApIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxDb2RlT3Jp
Z2luPiBjb2RlT3JpZ2luID0gaml0RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBj
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47Ci0gICAgICAgICAgICB9
Ci0KICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDogaml0RGF0
YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnRhaW5z
UEMocGMpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxDb2RlT3Jp
Z2luPihzdHViSW5mby0+Y29kZU9yaWdpbik7CkBAIC0zNTIxLDI4ICszNTc5LDE0IEBAIHN0ZDo6
b3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0ZWNvZGVJ
bmRleDsKIH0KIAotaW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRo
cmVzaG9sZCkKLXsKLSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXpl
KCkpIHsKLSAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICByZXR1cm4g
dGhyZXNob2xkOwotICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1cm4gdGhy
ZXNob2xkICogNDsKLSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1cm4gdGhy
ZXNob2xkIC8gMjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IHRocmVzaG9sZDsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkKK3ZvaWQg
Q29kZUJsb2NrOjpqaXRTb29uKCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3
VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldh
cm1VcCgpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hv
bGQodW5saW5rZWRDb2RlQmxvY2soKS0+dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9s
ZEZvckpJVFNvb24oKSksIHRoaXMpOwogfQogCi12b2lkIENvZGVCbG9jazo6aml0U29vbigpCit2
b2lkIENvZGVCbG9jazo6aml0TmV4dEludm9jYXRpb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRl
Q291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9s
ZEZvckpJVFNvb24oKSksIHRoaXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+c2V0TmV3
VGhyZXNob2xkKDAsIHRoaXMpOwogfQogCiBib29sIENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1U
cmFwQnJlYWtwb2ludHMoKSBjb25zdApAQCAtMzU4OCwyOCArMzYzMiw4IEBAIHZvaWQgQ29kZUJs
b2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRvdWJsZSBudW1TdWJzID0gMC4wOwogICAgIGRv
dWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKLSAgICBhdXRvIGNvdW50SUNzID0gWyZdIChDb2Rl
QmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IGNvZGVCbG9j
ay0+bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKEpJVEFkZElDKiBhZGRJQyA6
IGppdERhdGEtPm1fYWRkSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtQWRkcysrOwotICAgICAg
ICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMgOiBqaXREYXRhLT5tX211bElD
cykgewotICAgICAgICAgICAgICAgIG51bU11bHMrKzsKLSAgICAgICAgICAgICAgICB0b3RhbE11
bFNpemUgKz0gbXVsSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZvciAoSklUTmVnSUMqIG5lZ0lDIDogaml0RGF0YS0+bV9uZWdJQ3MpIHsKLSAgICAgICAgICAg
ICAgICBudW1OZWdzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxOZWdTaXplICs9IG5lZ0lDLT5j
b2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJVFN1YklDKiBz
dWJJQyA6IGppdERhdGEtPm1fc3ViSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtU3VicysrOwot
ICAgICAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJQy0+Y29kZVNpemUoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVCbG9jayop
IHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmUtaW1wbGVtZW50IHRoaXMgdXNpbmcg
SklUQ29kZS4KICAgICB9OwogICAgIGhlYXAoKS0+Zm9yRWFjaENvZGVCbG9jayhjb3VudElDcyk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCBjbGFzcyBKU01vZHVsZUVudmly
b25tZW50OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTExJbnRQcm90b3R5
cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OwogY2xhc3MgTWV0YWRhdGFUYWJsZTsK
LWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBj
bGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAogREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEpOwogCkBA
IC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBu
dW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRl
OgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6
CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAg
ICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXND
aGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBh
ZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2Nr
KiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1f
YWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoKICAgICBi
b29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0
YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZp
cnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRk
aW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBp
cyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXND
b25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7
Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAg
ICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAg
LTI2OCwyMyArMjU5LDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUKQogICAgIHN0cnVjdCBK
SVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJhZzxTdHJ1
Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAgICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJ
Q3M7Ci0gICAgICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Ci0gICAgICAgIEJhZzxKSVROZWdJ
Qz4gbV9uZWdJQ3M7Ci0gICAgICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7CiAgICAgICAgIEJh
ZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxMaW5rZWRM
aXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1f
aW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3JwaGljQ2Fs
bE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNv
bWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJs
ZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFi
bGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBD
VG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29sIG1faGFz
Q2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRM
aXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2ppdENvZGVN
YXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29sOworICAg
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAgIH07CiAK
KyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENv
ZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkpCkBAIC0y
OTMsMjIgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0
YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAKLSAgICBKSVRBZGRJQyogYWRkSklU
QWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJp
bmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRo
UHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUq
KTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9y
Pjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9m
aWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQotCi0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5
cGU+Ci0gICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUp
IHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNf
c2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRO
ZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRK
SVROZWdJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9y
LCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUU3ViSUMqIGFkZE1hdGhJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2Zp
bGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdERhdGEpOyB9CiAKICAgICBTdHJ1Y3R1cmVT
dHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSwgQ29kZU9yaWdpbik7CiAKQEAgLTMyMiwx
OCArMjk2LDggQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFw
IHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0luZm8q
IGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0g
ICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAgIHsKLSAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBlbnN1cmVK
SVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKLSAgICB9
Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0gICAgewotICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBjb25zdCBKSVRDb2RlTWFwJiBq
aXRDb2RlTWFwKCk7CiAKLSAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVl
X3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2lu
PiBmaW5kUEModm9pZCogcGMpOwogCiAgICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJl
Z2lzdGVyU2V0KTsKQEAgLTQ3Miw2ICs0MzYsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgbmFt
ZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9CiAgICAgdW5zaWduZWQgbnVtYmVy
T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fYXJndW1l
bnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9udW1QYXJh
bWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNlSklUKCkpOwpAQCAtNTY5LDggKzUzNCwxMCBAQCBwdWJs
aWM6CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVn
aXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgp
OyB9CisgICAgYm9vbCBpc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZpcnR1YWxS
ZWdpc3RlcikgY29uc3Q7CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJlZykg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKHJlZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
biBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KGluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JC
dWZmZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0YW50UmVn
aXN0ZXJzKSArIGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5T2Zmc2V0
KCk7IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkg
eyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJP
ZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC01
OTUsMjIgKzU2MiwyMiBAQCBwdWJsaWM6CiAgICAgLy8gSnVtcCBUYWJsZXMKIAogI2lmIEVOQUJM
RShKSVQpCi0gICAgU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5k
ZXgpCisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFi
bGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBU
YWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFudFBvb2wo
KQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAgICAgcmV0
dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wuZGF0YSgp
OwogICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRh
YmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3dp
dGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIAotI2lmIEVOQUJM
RShKSVQpCi0gICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwotICAg
ICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07Ci0gICAgfQorI2lmIEVOQUJMRShERkdfSklUKQorICAgIFN0cmluZ0p1bXBUYWJsZSYgZGZn
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFi
bGUmIGRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CiAjZW5kaWYKKwogICAgIHNp
emVfdCBudW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0
dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
cygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIApAQCAtNjMyLDIx
ICs1OTksMjAgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xkUmVhY2hl
ZCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNoZWNrSWZU
aHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOworICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1
dGVDb3VudGVyLT5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKICAgICB9CiAK
ICAgICB2b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCiAgICAgewotICAgICAgICBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICAgICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyLT5kZWZlckluZGVmaW5pdGVseSgpOwogICAgIH0KIAotICAgIGludDMyX3QgdGhyZXNo
b2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2FybVVwKCk7
CiAgICAgdm9pZCBqaXRTb29uKCk7CisgICAgdm9pZCBqaXROZXh0SW52b2NhdGlvbigpOwogCiAg
ICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAg
ICAgIHJldHVybiAqbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIH0KIAogICAgIHR5cGVkZWYg
SGFzaE1hcDxzdGQ6OnR1cGxlPFN0cnVjdHVyZUlELCB1bnNpZ25lZD4sIEZpeGVkVmVjdG9yPExM
SW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVjdHVyZVdh
dGNocG9pbnRNYXA7CkBAIC03OTcsNiArNzYzLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNE
ZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CiAg
ICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1Z2dlclJl
cXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVxdWVzdHMp
OyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpOwog
ICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykKQEAgLTgz
OCw2ICs4MDUsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2NrIG1fbG9j
azsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJpdGZpZWxk
IGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBFTkFCTEUo
SklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBERkc6OkNh
cGFiaWxpdHlMZXZlbApAQCAtODQ3LDggKzgxNSw2IEBAIHB1YmxpYzoKICAgICBib29sIG1fZGlk
RmFpbEZUTENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZU
TCA6IDE7CiAKLSAgICBib29sIG1faGFzTGlua2VkT1NSRXhpdCA6IDE7Ci0gICAgYm9vbCBtX2lz
RWxpZ2libGVGb3JMTEludERvd25ncmFkZSA6IDE7CiAgICAgYm9vbCBtX3Zpc2l0Q2hpbGRyZW5T
a2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAgLy8gSW50ZXJuYWwgbWV0aG9kcyBm
b3IgdXNlIGJ5IHZhbGlkYXRpb24gY29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBpdCB3YXNu
J3QKQEAgLTkwNywxNiArODczLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mTWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fbWV0YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9u
c1Jhd1BvaW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3Ry
dWN0aW9uc1Jhd1BvaW50ZXIpOyB9CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9y
RnV6emluZ0Vhcmx5UmV0dXJuKCkKLSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJl
IHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0gICAgICAg
IHJldHVybiAhbV91bmxpbmtlZENvZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAgfQorICAg
IGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7IHJldHVy
biBtX3VubGlua2VkQ29kZS0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1
cm4oKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVz
KCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVD
YWNoZXMoKTsKKyAgICB2b2lkIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKQEAg
LTEwMTAsNyArOTcyLDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1f
bGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2Rl
OwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+
IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAv
LyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0
aGUgcHJvZmlsZWQgY29kZSBibG9jawpAQCAtMTAyOSw3ICs5OTMsNyBAQCBwcml2YXRlOgogCiAg
ICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAgICBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9OwogCiAg
ICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAgICAgdWlu
dDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsOCArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCYXNl
bGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRN
ZXRhZGF0YVRhYmxlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkgKzQyLDcg
QEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlmIChtX21l
dGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9y
RWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9wcm9maWxl
LCBmYWxzZSk7IH0pOwotCiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJ
TEUoVklTSVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8
T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1Nyw2IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwzOCBAQCB2
b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQogCisjaWYg
RU5BQkxFKEpJVCkKK0FMV0FZU19JTkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJsb2NrOjpq
aXRDb2RlTWFwKCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2Rl
LmdldCgpKS0+bV9qaXRDb2RlTWFwOworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJs
ZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sK
KyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBU
YWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgp
KS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxv
Y2s6OmRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0
VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6
SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBl
KCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRD
b2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3
MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3Jh
cChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQogICAgIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAg
Ym9vbCBFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9j
ayA/IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQpOworICAg
IHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAgICBtX2Nv
dW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRo
aXMsIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxz
ZS4KICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwog
ICAgIGJvb2wgaGFzQ3Jvc3NlZFRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlciA+
PSAwOyB9Ci0gICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVC
bG9jayopOworICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2Rl
QmxvY2sqID0gbnVsbHB0cik7CiAgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwogICAgIGRv
dWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENv
dW50KSArIG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpA
QCAtODYsMTMgKzg2LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVCB0aHJlc2hvbGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChU
IHRocmVzaG9sZCkKICAgICB7Ci0gICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwotICAgICAg
ICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
KCkgJiYgZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2Jq
ZWN0LT53ZWFrUmFuZG9tSW50ZWdlcigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5D
aGVja3BvaW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBt
YXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAgIGludDMy
X3QgbWF4VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50
cygpOwogICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAgICAgICAg
dGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xkOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEu
aAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBH
ZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1v
ZGVNZXRhZGF0YVVuc2V0KSA9PSAxMik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJy
YXlMZW5ndGggeworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBh
cnJheVByb2ZpbGUpOyB9CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07CiBzdGF0
aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsK
QEAgLTg4LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdl
dEJ5SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7
IC8vIFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFk
YXRhRGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5z
ZXRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1v
ZGU7CkBAIC0xMTcsNiArMTE5LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGEgewogICAg
ICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhUHJvdG9Mb2FkIHByb3RvTG9hZE1vZGU7CiAgICAgfTsK
ICAgICBHZXRCeUlkTW9kZSBtb2RlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2Rl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9
CiAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsKIH07CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3Rh
dHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIEdldEJ5U3RhdHVzIEdl
dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE5v
SW5mb3JtYXRpb24pOwogICAgICAgICAKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6
IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0
dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZtKCkpOwog
ICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0
eSgpKQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
ID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQg
R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEcKIAogICAgIC8vIExldCdzIHN0b3Jl
IHRoZSByZXVzZWQgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4gQWZ0ZXIgdGhhdCwgd2UgY2FuIHVz
ZSBhbGxvY2F0ZWQgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgYWxsb2NhdG9yLnByZXNl
cnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
OjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOworICAgICAgICBhbGxvY2F0b3IucHJl
c2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CiAKICAgICBpZiAoR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coImJhc2VH
UFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsKQEAgLTIyNSwxMiArMjI1LDkgQEAgdm9pZCBHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9y
Q0NhbGwuc2V0KHJlZyk7CiAgICAgZm9yIChGUFJSZWcgcmVnIDogZnBTY3JhdGNoKQogICAgICAg
ICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CisgICAgaWYgKGppdC5jb2RlQmxv
Y2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQo
c3R1YkluZm8ubV9zdHViSW5mb0dQUik7CiAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLmV4
Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckNDYWxsKCkpOwotI2lmIENQ
VShBUk02NCkKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKLSAg
ICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZv
ckNDYWxsLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCiAKICAgICBBY2Nlc3NDYXNl
U25pcHBldFBhcmFtcyBwYXJhbXMoc3RhdGUubV92bSwgV1RGTW92ZShyZWdzKSwgV1RGTW92ZShn
cFNjcmF0Y2gpLCBXVEZNb3ZlKGZwU2NyYXRjaCkpOwogICAgIHNuaXBwZXQtPmdlbmVyYXRvcigp
LT5ydW4oaml0LCBwYXJhbXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyAr
MTM5LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgogICAgICAg
ICByZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBl
OjpJbkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8t
Pm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSk7CiAgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkp
CiAgICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsMTYgQEAgQUxX
QVlTX0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vz
cyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1
YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWlj
IHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0
byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKICAgICAKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0yMzMsMjMg
KzIzOCwzMSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3RlCiAgICAg
cmV0dXJuIGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJlZzsKIH0K
IAotYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5s
aW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0K
IAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNl
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkp
OworICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBz
dHViSW5mbywgb2Zmc2V0KSk7CisKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewor
ICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJl
U3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQogCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIApAQCAtMjc5LDIyICsyOTIsMjUgQEAgYm9vbCBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UgogICAgIHJldHVybiBsaW5rZWRDb2Rl
SW5saW5lOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVB
Y2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgQVNTRVJUKGFy
cmF5LT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXND
b25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgaWYgKCFoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWhhc0FueUFycmF5U3RvcmFnZShhcnJheS0+aW5k
ZXhpbmdUeXBlKCkpICYmIGFycmF5LT5pbmRleGluZ1R5cGUoKSAhPSBBcnJheUNsYXNzOwogfQog
Ci1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
QXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgQVNTRVJUKGlzQ2FjaGVhYmxlQXJyYXlMZW5n
dGgoc3R1YkluZm8sIGFycmF5KSk7CisgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGlzQ2Fj
aGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywgYXJyYXkpKTsKIAogICAgIGlm
ICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0zMTksMTcgKzMzNSwyMCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxl
bmd0aChTCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLWJvb2wgSW5saW5lQWNj
ZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Citib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICBpZiAoIXN0dWJJ
bmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAg
aWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsK
IH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0
aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewot
ICAgIEFTU0VSVChpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChzdHViSW5mbykpOworICAgIEFTU0VS
VF9VTlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0
dWJJbmZvKSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzYzLDEzICszODIsMTggQEAgYm9vbCBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKAogfQogCiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIXN0dWJJbmZv
Lmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYg
KGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gVGhlc2UgZHluYW1pYyBzbG90
cyBnZXQgZmlsbGVkIGluIGJ5IFN0cnVjdHVyZVN0dWJJbmZvLiBOb3RoaW5nIGVsc2UgdG8gZG8u
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIEdQUlJlZyBiYXNlID0gc3R1Yklu
Zm8uYmFzZUdQUjsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVncygp
OwogCkBAIC00MDYsMTMgKzQzMCwxMyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjCiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgLy8g
SWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQg
KGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGly
ZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2Rl
UHRyLgotICAgICAgICBpZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAg
ICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBz
dHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29k
ZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMg
bWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAg
ICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNv
ZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgog
ICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09
IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1YkluZm8uc3Rh
cnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxI
ZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnN0dWJJbmZvKSwgc3R1YkluZm8u
bV9zdHViSW5mb0dQUik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGlu
ZVB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1wKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gc3R1YkluZm8uZG9uZUxvY2F0
aW9uOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKQEAgLTQyMSw3ICs0NDUsOSBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nlc3M6IGxp
bmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBz
dHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2Rl
LgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzQsOCArNDYwLDE0IEBAIHZvaWQgSW5s
aW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICB9KSwgIklubGluZUFjY2Vzczog
bGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpyZXNldFN0
dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit2b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKKyAgICBpZiAoY29kZUJs
b2NrLT51c2VEYXRhSUMoKSAmJiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCkgeworICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSBzdHViSW5mby5zbG93UGF0
aFN0YXJ0TG9jYXRpb247CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLgorICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1Yklu
Zm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQo
Q0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAvLyBXZSBk
b24ndCBuZWVkIGEgbm9wIHNsZWQgaGVyZSBiZWNhdXNlIG5vYm9keSBzaG91bGQgYmUganVtcGlu
ZyBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCiAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1w
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vz
cy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDE0ICs5OSwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBzdGQ6Om1heChzaXplLCBzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7
CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoU3Ry
dWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGlj
IGJvb2wgY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwg
UHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5UmVw
bGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAg
ICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiwg
SlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKFN0cnVj
dHVyZVN0dWJJbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1
Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJ
bkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBib29s
IGdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGljIGJv
b2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgY2FuR2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwg
UHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5UmVw
bGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5
T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGlzQ2Fj
aGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAg
c3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJbkFjY2VzcyhD
b2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBi
b29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7
CiAKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGlu
ZUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CiAgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1YkFzSnVt
cEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0
YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBPVkVSTE9BRF9CSVRXSVNF
X09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJdGVyYXRpb25Nb2RlTWV0YWRhdGEg
ewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSXRlcmF0aW9uTW9kZU1l
dGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBl
KHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRpb25Nb2RlKSk7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50
Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExM
SW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KIAogcHJpdmF0ZToKICAgICB1aW50
cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgeyB1bmxpbmtlZEJpdCB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDE3IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
Yml0V2lkdGhGb3JNYXgKICAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAogICAgIG1hY3JvKE9w
SXRlcmF0b3JOZXh0KSBcCiAKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQklOQVJZX0FS
SVRIX1BST0ZJTEUobWFjcm8pIFwKKyAgICBtYWNybyhPcEFkZCkgXAorICAgIG1hY3JvKE9wTXVs
KSBcCisgICAgbWFjcm8oT3BEaXYpIFwKKyAgICBtYWNybyhPcFN1YikgXAorCisjZGVmaW5lIEZP
Ul9FQUNIX09QQ09ERV9XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKKyAgICBtYWNy
byhPcEluYykgXAorICAgIG1hY3JvKE9wRGVjKSBcCisgICAgbWFjcm8oT3BOZWdhdGUpIFwKKwog
CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInR5cGUtbGltaXRzIikKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlOjpzdWNjZWVkKCkKIHsKICAgICByZXN0b3JlU2NyYXRjaCgpOwog
ICAgIGlmIChqaXQtPmNvZGVCbG9jaygpLT51c2VEYXRhSUMoKSkKLSAgICAgICAgaml0LT5yZXQo
KTsKKyAgICAgICAgaml0LT5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby0+
bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mRG9uZUxvY2F0aW9uKCkp
LCBKU0ludGVybmFsUHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKGpp
dC0+anVtcCgpKTsKIH0KQEAgLTExMCw2ICsxMTAsOCBAQCBjb25zdCBSZWdpc3RlclNldCYgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7CiAKICAgICAgICAg
bV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1fbGl2ZVJlZ2lzdGVyc1RvUHJl
c2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9jYXRvci0+dXNlZFJlZ2lzdGVy
cygpKTsKKyAgICAgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQorICAgICAg
ICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5hZGQoc3R1YkluZm8tPm1fc3R1YkluZm9HUFIp
OwogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGw7CkBAIC0x
MjgsMTEgKzEzMCwxMiBAQCBhdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2VydmVMaXZl
CiAgICAgfTsKIH0KIAotYXV0byBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZlTGl2ZVJl
Z2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29uc3QgUmVnaXN0ZXJTZXQm
IGV4dHJhKSAtPiBTcGlsbFN0YXRlCithdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2Vy
dmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucygpIC0+IFNwaWxs
U3RhdGUKIHsKICAgICBSZWdpc3RlclNldCBsaXZlUmVnaXN0ZXJzID0gYWxsb2NhdG9yLT51c2Vk
UmVnaXN0ZXJzKCk7CisgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQorICAg
ICAgICBsaXZlUmVnaXN0ZXJzLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7CiAgICAgbGl2
ZVJlZ2lzdGVycy5leGNsdWRlKGNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgbGl2ZVJlZ2lz
dGVycy5tZXJnZShleHRyYSk7CiAKICAgICBjb25zdGV4cHIgdW5zaWduZWQgZXh0cmFTdGFja1Bh
ZGRpbmcgPSAwOwogICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3Rl
clByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3Rl
cnNUb1N0YWNrRm9yQ2FsbCgqaml0LCBsaXZlUmVnaXN0ZXJzLCBleHRyYVN0YWNrUGFkZGluZyk7
CkBAIC01OTYsMTYgKzU5OSwxMSBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGlj
QWNjZXNzCiAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAgIHN0YXRlLmppdCA9
ICZqaXQ7CiAKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewotICAgICAgICBpZiAo
c3RhdGUubV9kb2VzSlNHZXR0ZXJTZXR0ZXJDYWxscykgewotICAgICAgICAgICAgLy8gV2UgaGF2
ZSBubyBndWFyYW50ZWUgdGhhdCBzdGFjay1wb2ludGVyIGlzIHRoZSBleHBlY3RlZCBvbmUuIFRo
aXMgaXMgbm90IGEgcHJvYmxlbSBpZiB3ZSBkbyBub3QgaGF2ZSBKUyBnZXR0ZXIgLyBzZXR0ZXIg
Y2FsbHMgc2luY2Ugc3RhY2stcG9pbnRlciBpcwotICAgICAgICAgICAgLy8gYSBjYWxsZWUtc2F2
ZSByZWdpc3RlciBpbiB0aGUgQyBjYWxsaW5nIGNvbnZlbnNpb24uIEhvd2V2ZXIsIG91ciBKUyBl
eGVjdXRhYmxlIGNhbGwgZG9lcyBub3Qgc2F2ZSBzdGFjay1wb2ludGVyLiBTbyB3ZSBhcmUgYWRq
dXN0aW5nIHN0YWNrLXBvaW50ZXIgYWZ0ZXIKLSAgICAgICAgICAgIC8vIEpTIGdldHRlciAvIHNl
dHRlciBjYWxscy4gQnV0IHRoaXMgY291bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlIGluaXRpYWwg
c3RhY2stcG9pbnRlciwgYW5kIG1ha2VzIFBBQyB0YWdnaW5nIGJyb2tlbi4KLSAgICAgICAgICAg
IC8vIFRvIGVuc3VyZSBQQUMtdGFnZ2luZyB3b3JrLCB3ZSBmaXJzdCBhZGp1c3Qgc3RhY2stcG9p
bnRlciB0byB0aGUgYXBwcm9wcmlhdGUgb25lLgotICAgICAgICAgICAgaml0LmFkZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGppdC50YWdSZXR1cm5BZGRy
ZXNzKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKKyAgICBpZiAoIWNhbkJlU2hhcmVkICYmIEFTU0VSVF9FTkFCTEVEKSB7CisgICAgICAgIGpp
dC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1BvaW50
ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgYXV0byBvayA9IGppdC5icmFuY2hQ
dHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAg
ICAgICAgb2subGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0ZS5wcmVzZXJ2ZWRSZXVzZWRS
ZWdpc3RlclN0YXRlID0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUxLDcgKzI1MSw3IEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewogICAgIGNv
bnN0IFJlZ2lzdGVyU2V0JiBjYWxjdWxhdGVMaXZlUmVnaXN0ZXJzRm9yQ2FsbEFuZEV4Y2VwdGlv
bkhhbmRsaW5nKCk7CiAKICAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3Rh
Y2tGb3JDYWxsKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7Ci0gICAgU3BpbGxTdGF0
ZSBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKGNv
bnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7CisgICAgU3BpbGxTdGF0ZSBwcmVzZXJ2ZUxp
dmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAgICB2b2lk
IHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRpb24o
Y29uc3QgU3BpbGxTdGF0ZSYpOwogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3Rh
Y2tGb3JDYWxsKGNvbnN0IFNwaWxsU3RhdGUmLCBjb25zdCBSZWdpc3RlclNldCYgZG9udFJlc3Rv
cmUgPSB7IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3Rh
dHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTAgKzE4MCwx
MCBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7CiAg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOwogICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh1aWQpOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQot
ICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KHVpZCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8t
PmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7CisgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7
CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4g
UHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0dWJJbmZvLT5tX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICByZXR1
cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0cnVjdHVyZSwg
b2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSksICpzdHViSW5mbyk7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5l
cy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiUG9s
eW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTY1LDkgKzY2LDkg
QEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKAogICAgIEFTU0VSVCho
YXNDb25zdGFudElkZW50aWZpZXIpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlw
ZTo6R2V0QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53
cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsK
KyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5m
bzo6aW5pdEFycmF5TGVuZ3RoKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlcikK
QEAgLTg3LDkgKzg4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRSZXBs
YQogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KTsKICAgICBzZXRD
YWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlKTsKICAgICBtX2lkZW50
aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7
CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAg
dS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7
CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBDYWNo
ZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC05Nyw5ICs5OCw5IEBAIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGMKICAgICBBU1NFUlQobV9jYWNoZVR5cGUgPT0g
Q2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpJ
bkJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVC
YXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAg
YnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRl
cmVmKCkKQEAgLTIzNiw3ICsyMzcsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0cnVjdHVy
ZVN0dWJJbmZvCiAgICAgICAgIC8vIHdlJ3JlIGJ1ZmZlcmVkIGlzIGJlY2F1c2Ugd2UgcmVseSBv
biBpdCB0byByZXNldCBkdXJpbmcgR0MgaWYgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlCiAg
ICAgICAgIC8vIGlzIGNvbGxlY3RlZC4KICAgICAgICAgbV9pZGVudGlmaWVyID0gbnVsbHB0cjsK
LSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3
ZSBnZW5lcmF0ZWQgc29tZSBjb2RlIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBhdHRlbXB0IHRvIHJl
cGF0Y2ggaW4gdGhlIGZ1dHVyZSB1bnRpbCB3ZQogICAgICAgICAvLyBnYXRoZXIgZW5vdWdoIGNh
c2VzLgpAQCAtMjUxLDcgKzI1Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNv
bnN0IENvbmMKIHsKICAgICBjbGVhckJ1ZmZlcmVkU3RydWN0dXJlcygpOwogICAgIG1faWRlbnRp
ZmllciA9IG51bGxwdHI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7
CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKIAogICAgIGlmIChtX2NhY2hl
VHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CkBAIC0yODUsNiArMjg2
LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgICAgICBy
ZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQ
dXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJ
bkJ5SWQ6CkBAIC0zNjAsOCArMzYyLDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRX
ZWFrUmVmZXJlbgogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0gICAgaWYgKG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgaXNWYWxpZCAmPSB2bS5oZWFwLmlz
TWFya2VkKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgaWYgKFN0cnVj
dHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpCisgICAgICAg
IGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpOwogICAgIGlmIChtX2NhY2hl
VHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIGlzVmFsaWQgJj0gdS5zdHViLT52aXNp
dFdlYWsodm0pOwogCkBAIC0zNzUsOCArMzc3LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRXZWFrUmVmZXJlbgogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0g
ICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgbV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpCisg
ICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAKICAgICBpZiAobV9jYWNo
ZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICB1LnN0dWItPnByb3BhZ2F0ZVRyYW5z
aXRpb25zKHZpc2l0b3IpOwpAQCAtNDMwLDYgKzQzMiwyMDkgQEAgQUxXQVlTX0lOTElORSB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVUeXBlOwog
fQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5r
ZWRTdHViSW5mbykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGFjY2Vzc1R5cGUgPSB1bmxp
bmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0
YXJ0OworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9uOwor
ICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhTdGFy
dExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNldCgpKSk7CisgICAgY29kZU9y
aWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBt
X2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICB1c2VkUmVnaXN0ZXJzID0g
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIGlmIChhY2Nlc3NU
eXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwgd2UgY2Fu
J3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVyUmVnaXN0ZXIiIHJlZ2lzdGVyIGVpdGhlci4KKyAg
ICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xv
YmJlclJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9m
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdl
dEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1p
emU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlz
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0
aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJy
YW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5k
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0
ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFt
ZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6
CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNh
c2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8u
ZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0Ogor
ICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAg
ICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVm
aW5lOgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmlu
ZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZv
LnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAg
ICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZv
LmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxkUHV0S2lu
ZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6
ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVy
ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVs
ZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAg
YmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5w
cm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVE
ZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6
CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1
ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIGhhc0NvbnN0
YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBwcm90b3R5cGVJc0tub3duT2JqZWN0ID0g
ZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZh
bHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVz
dWx0OworICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Oklu
QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVn
cy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5C
eUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0
cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIGhhc0NvbnN0YW50
SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnRoaXNHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0
YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJS
ZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAg
ICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVy
ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6UHV0
QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6
CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICB2YWx1ZUdQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odW5saW5rZWRTdHViSW5mbyk7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJS
b3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPcHRpb25z
LmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCkBAIC01Niw2ICs1
Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlWYWwsCiAg
ICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAgICBJbkJ5
SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzgwLDggQEAg
ZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAor
c3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJ
bmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFs
aXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAv
LyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElm
IGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTMyNSwxMyArMzMxLDE5IEBAIHBy
aXZhdGU6CiAKIHB1YmxpYzoKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CisgICAgUHJvcGVy
dHlPZmZzZXQgYnlJZFNlbGZPZmZzZXQ7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJ5
SWRTZWxmT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZv
LCBieUlkU2VsZk9mZnNldCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVT
dHViSW5mbywgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsgfQogICAgIHVuaW9uIHsKLSAg
ICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAg
ICAgfSBieUlkU2VsZjsKICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAgICAgfSB1
OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZTsKKyAgICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoVk0mIHZtKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX2lubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIH0KKyAgICBTdHJ1Y3R1cmVJRCBtX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAwIH07CiBwcml2YXRlOgogICAgIENhY2hlYWJsZUlkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOwogICAgIC8vIFJlcHJlc2VudHMgdGhvc2Ugc3RydWN0dXJlcyB0aGF0
IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nlc3NDYXNlcyBpbiB0aGUgUG9seW1vcnBoaWNBY2Nl
c3MuCkBAIC0zNTIsNiArMzY0LDcgQEAgcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2RlUHRyOwogCiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkNvZGVQdHIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1
YkluZm8sIG1fY29kZVB0cik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRG9uZUxv
Y2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBkb25l
TG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRoU3RhcnRM
b2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgc2xv
d1BhdGhTdGFydExvY2F0aW9uKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBt
X3Nsb3dPcGVyYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvdW50ZG93
bigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgY291bnRkb3du
KTsgfQpAQCAtNDQ3LDYgKzQ2MCwxNyBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNH
ZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7
CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQ
cml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRL
aW5kOjpub25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpzbG9wcHko
KSB9OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBz
dGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBv
ZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisK
ICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJTdGF0ZSgp
CiAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsKICAgICBp
ZiAocGVyY2VudGFnZSAhPSBwZXJjZW50YWdlKQogICAgICAgICBwZXJjZW50YWdlID0gMC4wOwot
ICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBw
ZXJjZW50YWdlLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVy
IHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIiVcbiIpOwogfQogCiB2b2lkIGVuYWJsZVN1
cGVyU2FtcGxlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAK
KyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDbGFz
c0luZm8uaCIKQEAgLTc4LDYgKzc5LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29k
ZUJsb2NrKFZNJgogICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tlcik7CiAg
ICAgICAgIG1fcmFyZURhdGEtPm1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAgfQorCisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQo
T3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgpAQCAtMzE2LDYgKzMxOSw0OCBAQCBpbnQgVW5saW5rZWRDb2RlQmxv
Y2s6Om91dE9mTGluZUp1bXBPZmZzCiAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMu
Z2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECitib29sIFVubGlu
a2VkQ29kZUJsb2NrOjpoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7Cisg
ICAgaWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSA+IDEwMCkgeworICAgICAgICBpZiAobnVtYmVy
T2ZJZGVudGlmaWVycygpICE9IG1fY2FjaGVkSWRlbnRpZmllclVpZHMuc2l6ZSgpKSB7CisgICAg
ICAgICAgICBMb2NrZXIgbG9ja2VyKG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrKTsKKyAgICAg
ICAgICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBjYWNoZWRJZGVudGlmaWVyVWlkczsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJz
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIg
PSB0aGlzLT5pZGVudGlmaWVyKGkpOworICAgICAgICAgICAgICAgIGNhY2hlZElkZW50aWZpZXJV
aWRzLmFkZChpZGVudGlmaWVyLmltcGwoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAgICBtX2NhY2hlZElkZW50aWZpZXJV
aWRzID0gV1RGTW92ZShjYWNoZWRJZGVudGlmaWVyVWlkcyk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5jb250YWlucyh1aWQpOworICAgIH0KKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkg
eworICAgICAgICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitpbnQz
Ml90IFVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQp
Cit7CisgICAgc3dpdGNoIChkaWRPcHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0ZTo6SW5k
ZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIFRyaVN0YXRl
OjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcmlTdGF0
ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwogdm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcygpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fbWV0YWRhdGEtPmlzRmluYWxpemVkKCkpOwpAQCAtMzM3LDE1ICszODIsMjUgQEAg
dm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcgogICAgIGlmIChtX21ldGFk
YXRhLT5oYXNNZXRhZGF0YSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJyYXlQcm9m
aWxlcyA9IDA7CiAKLSNkZWZpbmUgQ09VTlQoX19vcCkgXAotICAgICAgICBudW1iZXJPZkFycmF5
UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOworI2RlZmluZSBDT1VO
VChfX29wKSBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxf
X29wPigpOwogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENPVU5U
KQogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhDT1VO
VCkKICN1bmRlZiBDT1VOVAogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRh
ZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICAgICAgbnVtYmVyT2ZBcnJh
eVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BHZXRCeUlkPigpOwotCiAgICAg
ICAgIG1fYXJyYXlQcm9maWxlcyA9IEZpeGVkVmVjdG9yPFVubGlua2VkQXJyYXlQcm9maWxlPihu
dW1iZXJPZkFycmF5UHJvZmlsZXMpOworCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQmluYXJ5
QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQmluYXJ5QXJp
dGhQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CisgICAgICAgIEZP
Ul9FQUNIX09QQ09ERV9XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKENPVU5UKQorI3VuZGVmIENP
VU5UCisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcyA9IEZpeGVkVmVjdG9yPEJpbmFyeUFy
aXRoUHJvZmlsZT4obnVtYmVyT2ZCaW5hcnlBcml0aFByb2ZpbGVzKTsKKworICAgICAgICB1bnNp
Z25lZCBudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5UKF9fb3Ap
IG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19v
cD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShD
T1VOVCkKKyN1bmRlZiBDT1VOVAorICAgICAgICBtX3VuYXJ5QXJpdGhQcm9maWxlcyA9IEZpeGVk
VmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPihudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyk7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDEwICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5o
IgogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlv
bnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgi
CisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5n
ZUluZm8uaCIKICNpbmNsdWRlICJIYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIu
aCIKQEAgLTY0LDYgKzY2LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiBjbGFzcyBVbmxp
bmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7
CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEJhc2VsaW5lSklUQ29k
ZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKIGVudW0gY2xhc3MgTGlua1RpbWVDb25zdGFudCA6
IGludDMyX3Q7CiAKQEAgLTE3NSw2ICsxNzgsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGaXhl
ZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAg
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0u
Z2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+
JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBAIC0yMDcsNiArMjExLDE1IEBAIHB1Ymxp
YzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogCiAgICAgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0OworICAgIGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIoKTsgfQorICAgIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAg
IGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQoMCkucHRy
KCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1
Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rpb24gPCBp
bnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0cnVjdGlv
bnNCZWdpbjsKKyAgICB9CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25zU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIGluc3RydWN0aW9ucygpLnNpemUoKTsgfQogCiAgICAgdW5zaWduZWQgbnVtQ2FsbGVl
TG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KICAgICB1bnNpZ25l
ZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CkBAIC0zMzQsMTAgKzM0Nywy
MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpOwog
ICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1
cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3
YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFpc0J1aWx0
aW5GdW5jdGlvbigpOworICAgIH0KICAgICB2b2lkIGFsbG9jYXRlU2hhcmVkUHJvZmlsZXMoKTsK
ICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSYgdW5saW5rZWRWYWx1ZVByb2ZpbGUodW5zaWduZWQg
aW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlc1tpbmRleF07IH0KICAgICBVbmxpbmtlZEFy
cmF5UHJvZmlsZSYgdW5saW5rZWRBcnJheVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJu
IG1fYXJyYXlQcm9maWxlc1tpbmRleF07IH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgYm9v
bCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CisjZW5kaWYKKworICAgIGludDMy
X3QgdGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKKwogcHJvdGVjdGVkOgogICAg
IFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwogCkBAIC0zOTcsNiAr
NDIxLDkgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xleGljYWxTY29wZUZlYXR1cmVzIDog
NDsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKKyNpZiBFTkFCTEUoSklU
KQorICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1fdW5saW5rZWRCYXNlbGluZUNvZGU7Cisj
ZW5kaWYKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAg
U291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEzLDcgKzQ0MCw2IEBAIHByaXZhdGU6
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNz
OwogCi0KICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFBy
b2ZpbGU7CiAjZW5kaWYKQEAgLTQ1OCw2ICs0ODQsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAg
IH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zm
c2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQpOworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxl
KHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVu
YXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBt
X3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVy
JiBsbGludEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOyB9
CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPElu
c3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjUsOCArNTAxLDE2IEBAIHByaXZh
dGU6CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4ZWRWZWN0b3I8
RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNlbGluZUV4ZWN1
dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIEZpeGVkVmVjdG9yPFVubGlu
a2VkVmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5r
ZWRBcnJheVByb2ZpbGU+IG1fYXJyYXlQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxCaW5hcnlB
cml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxVbmFy
eUFyaXRoUHJvZmlsZT4gbV91bmFyeUFyaXRoUHJvZmlsZXM7CisKKyNpZiBBU1NFUlRfRU5BQkxF
RAorICAgIExvY2sgbV9jYWNoZWRJZGVudGlmaWVyVWlkc0xvY2s7CisgICAgSGFzaFNldDxVbmlx
dWVkU3RyaW5nSW1wbCo+IG1fY2FjaGVkSWRlbnRpZmllclVpZHM7CisjZW5kaWYKIAogcHJvdGVj
dGVkOgogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRN
ZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxlKTsKICAg
ICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZz
ZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBB
U1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9
IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRh
YmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgYmFzZVR5cGVPZmZzZXQgPSByb3Vu
ZFVwVG9NdWx0aXBsZU9mKGFsaWdub2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSksIGJhc2VU
eXBlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKHR5cGVu
YW1lIE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9CisKICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAgdW5zaWduZWQgbnVtRW50cmllcygp
OwogCkBAIC0xMDcsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0
MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90Owog
ICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDUsMTMgKzQ1LDExIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKIAogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRz
QXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNwZWNGYWls
QnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRleE1h
c2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
dG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNGYWls
QnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKICAgICB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQotICAgICAg
ICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAg
IGNsZWFyQnVja2V0cygpOwogICAgIH0KICAgICAKICAgICBFbmNvZGVkSlNWYWx1ZSogc3BlY0Zh
aWxCdWNrZXQodW5zaWduZWQgaSkKQEAgLTU5LDYgKzU3LDEyIEBAIHN0cnVjdCBWYWx1ZVByb2Zp
bGVCYXNlIHsKICAgICAgICAgQVNTRVJUKG51bWJlck9mQnVja2V0cyArIGkgPCB0b3RhbE51bWJl
ck9mQnVja2V0cyk7CiAgICAgICAgIHJldHVybiBtX2J1Y2tldHMgKyBudW1iZXJPZkJ1Y2tldHMg
KyBpOwogICAgIH0KKworICAgIHZvaWQgY2xlYXJCdWNrZXRzKCkKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQorICAgICAg
ICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgfQog
ICAgIAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tldCkgY29u
c3QKICAgICB7CkBAIC0xMjMsOCArMTI3LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ugewog
ICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5k
IHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAg
ICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBj
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsg
KytpKSB7CkBAIC0xMzksNyArMTQxLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAgICBF
bmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAgU3Bl
Y3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE2MSw2ICsxNjMsNyBA
QCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBWYWx1
ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPiB7
CiAgICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRz
PDA+KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQogfTsK
IAogc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVBy
b2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
a0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5oIgpAQCAtMzQsNyArMzUsOSBAQAogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNl
bWVudC5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZy
YW1lU2V0LmgiCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSlNDYXN0LmgiCisj
aW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0
aW9uLmgiCiAjaW5jbHVkZSAiUmVjb3JkZWRTdGF0dXNlcy5oIgogI2luY2x1ZGUgPHd0Zi9CYWcu
aD4KQEAgLTcwLDcgKzczLDcgQEAgc3RydWN0IFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uIHsKICAg
ICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX3RvOwogfTsKICAgICAgICAgCi1jbGFzcyBDb21tb25E
YXRhIHsKK2NsYXNzIENvbW1vbkRhdGEgOiBwdWJsaWMgTWF0aElDSG9sZGVyIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDb21tb25EYXRhKTsKIHB1YmxpYzoKICAgICBDb21tb25EYXRhKCkK
QEAgLTExNiw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8Q29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50PiBtX3dhdGNocG9pbnRzOwogICAgIEZpeGVkVmVjdG9yPEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzOwog
ICAgIEZpeGVkVmVjdG9yPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4g
bV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKICAgICBSZWNv
cmRlZFN0YXR1c2VzIHJlY29yZGVkU3RhdHVzZXM7CiAgICAgVmVjdG9yPEp1bXBSZXBsYWNlbWVu
dD4gbV9qdW1wUmVwbGFjZW1lbnRzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBA
CiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENv
ZGUuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IFRyYWNrZWRSZWZlcmVuY2VzOwogCitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0
cmluZ0p1bXBUYWJsZTsKKwogbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEpJVENvbXBpbGVyOwpA
QCAtMTAxLDYgKzEwNCw4IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+
IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgZmluYWw7CiAKICAgICB1c2luZyBEaXJlY3RK
SVRDb2RlOjppbml0aWFsaXplQ29kZVJlZkZvckRGRzsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFw
KiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2Rl
T3JpZ2luTWFwLmdldCgpOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRD
b21waWxlcjsgLy8gQWxsb3cgSklUQ29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCkuCkBAIC0x
MTAsNiArMTE1LDggQEAgcHVibGljOgogICAgIEZpeGVkVmVjdG9yPERGRzo6T1NSRW50cnlEYXRh
PiBtX29zckVudHJ5OwogICAgIEZpeGVkVmVjdG9yPERGRzo6T1NSRXhpdD4gbV9vc3JFeGl0Owog
ICAgIEZpeGVkVmVjdG9yPERGRzo6U3BlY3VsYXRpb25SZWNvdmVyeT4gbV9zcGVjdWxhdGlvblJl
Y292ZXJ5OworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFi
bGVzOworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzOwogICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVhbSB2YXJpYWJsZUV2ZW50U3RyZWFt
OwogICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5pZmllZERGRzsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODUsMTMgKzE4NSwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtC
dWZmZXImIGxpbmtCCiAgICAgCiAgICAgbV9ncmFwaC5yZWdpc3RlckZyb3plblZhbHVlcygpOwog
Ci0gICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkgfHwg
IW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgewotICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAoIW1f
Z3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
ID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7Ci0gICAgICAgIGlm
ICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZN
b3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKLSAgICB9CisgICAgQVNTRVJUKG1faml0
Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1f
aml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgaWYgKCFtX2dyYXBo
Lm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIAorICAgICAgICBtX2ppdENvZGUt
Pm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMpOworICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0
eSgpKQorICAgICAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9n
cmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwogCiAgICAgZm9yIChCYWc8U3dpdGNoRGF0YT46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fc3dpdGNoRGF0YS5iZWdpbigpOyAhIWl0ZXI7ICsraXRl
cikgewogICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKippdGVyOwpAQCAtMTk5LDEyICsxOTgs
MTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBj
YXNlIFN3aXRjaENoYXI6CiAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CiAgICAgICAgICAgICBp
ZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KS5pc0VtcHR5KCkp
OworICAgICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tk
YXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShk
YXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUlu
ZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENv
ZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAg
ICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dp
dGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXpl
KCkgPT0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpKTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCk7IGotLTsp
CkBAIC0yMTksMTIgKzIxOCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXIm
IGxpbmtCCiAKICAgICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6IHsKICAgICAgICAgICAgIGlmICgh
ZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxv
Y2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHko
KSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJs
ZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dp
dGNoVGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdo
LmJsb2NrLT5pbmRleF0pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua2VkVGFibGUu
bV9jdGlPZmZzZXRzLnNpemUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUuc2l6ZSgp
ICsgMSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbGlua2VkVGFibGUubV9jdGlP
ZmZzZXRzKQpAQCAtMzMzLDcgKzMzMiw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIu
ZGlkQnVpbGRNYXBwaW5nKCkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdp
bk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcikpOworICAgICAgICBtX2ppdENvZGUtPmNvbW1vbi5t
X3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92
ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpOwogfQogCiBzdGF0aWMg
dm9pZCBlbWl0U3RhY2tPdmVyZmxvd0NoZWNrKEpJVENvbXBpbGVyJiBqaXQsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYgc3RhY2tPdmVyZmxvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcs
NiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqCiAgICAgQVNTRVJU
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFT
U0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNT
RVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0
Q29kZSgpLT5kZmdDb21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIAogICAgIGlmICghT3B0aW9uczo6
dXNlT1NSRW50cnlUb0RGRygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzIsOSArNzcyLDYgQEAgdm9pZCBP
U1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIAogICAgIC8vIFRoZSB0YWcgcmVnaXN0
ZXJzIGFyZSBuZWVkZWQgdG8gbWF0ZXJpYWxpemUgcmVjb3ZlcmllcyBiZWxvdy4KICAgICBqaXQu
ZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKIAotICAgIGlmIChleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKQotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7Ci0KICAgICBpZiAoaW5saW5lU3Rh
Y2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQpIHsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIHRt
cFNjcmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CiAgICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25NYXRlcmlhbGl6ZU9TUkV4aXRTaWRlU3Rh
dGUpPigmdm0sICZleGl0LCB0bXBTY3JhdGNoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9u
IDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZH
SklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIK
QEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxs
SGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2ggKGppdC5jb2RlQmxv
Y2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAgICAgIGNs
aXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChq
aXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNs
aXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0
YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgot
ICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVk
VGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsK
KyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBl
ZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDIsMTEgKzE0Myw4IEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clQKIHsKICAgICBjYWxsZXJJ
c0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKIAot
ICAgIGlmIChjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpIHsKLSAgICAgICAgaWYgKCFj
YWxsZXJJc0xMSW50KQotICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1f
aGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CisgICAgaWYgKGNhbGxCeXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSkKICAgICAgICAgcmV0dXJuIExMSW50OjpjaGVja3BvaW50T1NSRXhpdEZyb21Jbmxp
bmVkQ2FsbFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKLSAgICB9CiAKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganVtcFRhcmdldDsKIApAQCAtMTk4LDggKzE5Niw2
IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clQKICN1bmRlZiBMTElO
VF9SRVRVUk5fTE9DQVRJT04KIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyLT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwotCiAgICAgICAgIHN3aXRj
aCAodHJ1ZUNhbGxlckNhbGxLaW5kKSB7CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpD
YWxsOgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OgpAQCAtMzEzLDYg
KzMwOSwxMCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAg
ICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1l
dGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVD
b2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpKTsKICAgICAgICAg
ICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGNhbGxlZVNhdmVTbG90
KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6OnBi
R1BSKSk7CisgICAgICAgIH0gZWxzZSBpZiAodHJ1ZUNhbGxlcikgeworICAgICAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9j
a0ZvcigqdHJ1ZUNhbGxlcik7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxl
KCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBK
SVQ6OnNfbWV0YWRhdGFHUFIpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmJhc2VsaW5lSklU
Q29uc3RhbnRQb29sKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5l
Q29kZUJsb2NrLCBKSVQ6OnNfY29uc3RhbnRzR1BSKSk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCkBAIC00MDQsNyArNDA0LDggQEAgdm9p
ZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6
OlJlZ2lzdGVyczo6cGNHUFIpOwogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0
YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGNvZGVCbG9ja0ZvckV4aXQtPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7Cisg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JF
eGl0LT5tZXRhZGF0YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRhdGFHUFIpOworICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxp
bmVKSVRDb25zdGFudFBvb2woKSksIEpJVDo6c19jb25zdGFudHNHUFIpOwogCiAgICAgICAgIEJ5
dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
OwogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRp
b247CkBAIC00MjAsMTIgKzQyMSwxNiBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYg
dm0sIENDYWxsCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JF
eGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCi0gICAgaml0LmFkZFB0
cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZv
cihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKKyAgICAgICAgQVNTRVJUKCFSZWdpc3Rl
clNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29udGFpbnMoTExJbnQ6OlJlZ2lzdGVyczo6
cGNHUFIpKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUsIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRj
aEdQUihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikpOworCiAgICAgICAgIC8vIFNpbmNlIHdlJ3Jl
IGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgog
ICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZtLmFkZHJl
c3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOwogICAgIH0KLSAgICAKKworICAgIGppdC5hZGRQdHIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Y29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCiAgICAg
aml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJ
bmZvOjpyZWdUMik7CiAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJU
YWcpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
Q2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMu
aCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAj
aW5jbHVkZSAiREZHSklUQ29kZS5oIgpAQCAtMjg2OSw3ICsyODcwLDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkZpbmRTdwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBj
b25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5kZmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5pc0RvdWJsZSgpKTsKICAgICBkb3Vi
bGUgYXNEb3VibGUgPSB2YWx1ZS5hc0RvdWJsZSgpOwpAQCAtMjg5MCw3ICsyODkxLDcgQEAgSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogCiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N0
cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICByZXR1cm4gbGlua2VkVGFibGUu
Y3RpRm9yVmFsdWUoKnVubGlua2VkVGFibGUsIHN0ckltcGwpLmV4ZWN1dGFibGVBZGRyZXNzPGNo
YXIqPigpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTczMCw2ICs3MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2Rl
KiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5Ojpp
blBhaXIoY2FsbGVlVGFnR1BSLCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIHNodWZm
bGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZs
ZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxl
RGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsK
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsr
aSkgewogICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgaSArIDEpOwpAQCAtODg5LDcgKzg5MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xv
d0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0g
aW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7
CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAg
ICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxD
YWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyOCw2ICs4
MjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVHUFIs
IERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1B
bGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBu
dW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1f
aml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAg
ICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IGkgKyAxKTsKQEAgLTk3OSw3ICs5ODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0gewogICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRh
aWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5ODUsNyArMzk4
NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmEKICAgICBSZWdp
c3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwogCiAgICAgSklU
UHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlw
ZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIHVz
ZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQs
IGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgdXNlZFJl
Z2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VHUFIpLCBKU1Zh
bHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIEludmFsaWRHUFJS
ZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9
IHRydWU7CiAKQEAgLTQ5MDUsNyArNDkwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZUFkZChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQu
Z3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRl
Y29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNl
bGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29k
ZUluZGV4KTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklU
QWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5qaXRDb2Rl
KCktPmNvbW1vbi5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGlu
Z0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0
Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkOwogICAgIApAQCAtNDk4OSw3ICs0OTg5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5vZAogICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0
aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVFN1YklDKiBz
dWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAg
IEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVFN1YklDKGFy
aXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1
ZVN1Yk9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
VmFsdWVTdWI7CiAKQEAgLTU1NzEsNyArNTU3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVWYWx1ZU5lZ2F0ZSgKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9q
aXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwog
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5i
eXRlY29kZUluZGV4KCk7CiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJh
c2VsaW5lQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJ
VE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuaml0Q29k
ZSgpLT5jb21tb24uYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hp
bmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemU7CiAgICAgYXV0byBub25S
ZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZTsKICAgICBjb21waWxlTWF0
aElDKG5vZGUsIG5lZ0lDLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlv
bik7CkBAIC01ODE1LDcgKzU4MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFs
dWVNdWwoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBo
KCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVD
b2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE11bElD
KGFyaXRoUHJvZmlsZSk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuaml0Q29kZSgpLT5j
b21tb24uYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5j
dGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5n
RnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bDsKIApAQCAtMTQ3NzAsNyArMTQ3NzAsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBzY29wZVJl
ZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
c2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIG1faml0LmNvZGVCbG9jaygpLCBj
YWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFk
b3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CiAgICAgbm9SZXN1bHQobm9k
ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgY29tcGlsZShTdGF0
ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKIAogICAgIGlmICh2bS5zaG91bGRCdWlsZGVyUENUb0Nv
ZGVPcmlnaW5NYXBwaW5nKCkpIHsKICAgICAgICAgQjM6OlBDVG9PcmlnaW5NYXAgb3JpZ2luTWFw
ID0gc3RhdGUucHJvYy0+cmVsZWFzZVBDVG9PcmlnaW5NYXAoKTsKLSAgICAgICAgY29kZUJsb2Nr
LT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQQ1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5h
bGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpKTsKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+Y29tbW9u
Lm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQQ1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5h
bGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpOwogICAgIH0KIAogICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+IGxhYmVsID0gc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVy
LT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHN0YXRlLnByb2MtPmNvZGUoKS5lbnRyeXBvaW50
TGFiZWwoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHB1YmxpYzoKICAgICBERkc6OkNvbW1v
bkRhdGEqIGRmZ0NvbW1vbigpIG92ZXJyaWRlOwogICAgIHN0YXRpYyBwdHJkaWZmX3QgY29tbW9u
RGF0YU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKSVRDb2RlLCBjb21tb24pOyB9
CiAgICAgdm9pZCBzaHJpbmtUb0ZpdChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKSBvdmVycmlk
ZTsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRl
IHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CiAgICAgCiAgICAg
REZHOjpDb21tb25EYXRhIGNvbW1vbjsKICAgICBWZWN0b3I8T1NSRXhpdD4gbV9vc3JFeGl0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MiwxNCArNTIsNiBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogCiAgICAgZ3JhcGgu
cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsKIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcy5pc0VtcHR5KCkpOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5lbnN1cmVK
SVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7Ci0gICAgfQotI2Vu
ZGlmCi0KICAgICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuIE5vdGUgdGhhdCB3ZSB1c2UgdGhp
cyBlbnRyeXBvaW50IHRvdGFsbHkgZGlmZmVyZW50bHkKICAgICAvLyBkZXBlbmRpbmcgb24gd2hl
dGhlciB3ZSdyZSBkb2luZyBPU1IgZW50cnkgb3Igbm90LgogICAgIENDYWxsSGVscGVycyBqaXQo
Y29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsNyBAQAog
I2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2lu
Y2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgi
CiAjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAj
aW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCkBAIC0yMzIwLDYgKzIzMjEsMTgg
QEAgcHJpdmF0ZToKICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+
KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24p
OwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRBZGRJQyogYWRkTWF0aElDKERG
Rzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0
dXJuIGNvbW1vbi5hZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3Rh
dGljIEpJVE11bElDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFy
aXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVE11bElDKHByb2ZpbGUp
OyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRv
cj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUTmVnSUMqIGFkZE1hdGhJQyhERkc6OkNv
bW1vbkRhdGEmIGNvbW1vbiwgVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNv
bW1vbi5hZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8
R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJ
VFN1YklDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJv
ZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisK
ICAgICB2b2lkIGNvbXBpbGVWYWx1ZU11bCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50
aWMpOwpAQCAtMjM5MSw3ICsyNDA0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAg
ICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0g
Qm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJ
VFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0
aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgICAgICBKSVRVbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0
Q29kZS0+Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9n
ZW5lcmF0b3IgPSBHZW5lcmF0b3IoSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwgSlNWYWx1
ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CiAKICAgICAgICAg
ICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKQEAgLTI1MDAsNyArMjUx
Myw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgICAgICAgICAgICAgIEJveDxNYXRoSUNHZW5l
cmF0aW9uU3RhdGU+IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9u
U3RhdGU+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBKSVRCaW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRoSUM8R2VuZXJhdG9yPihhcml0
aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBt
YXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0
aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0
b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigp
KSwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgSlNW
YWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwgcGFyYW1zLmZwU2NyYXRjaCgwKSwKICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zLmZwU2NyYXRjaCgxKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CkBA
IC00MzE3LDcgKzQzMzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgR1BSUmVnIHN0dWJJbmZv
R1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBwYXJhbXMuZ3BTY3Jh
dGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBC
b3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgaml0LmNv
ZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJ
bmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9j
aygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwg
QWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9H
UFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1i
b2wgPSB0cnVlOwpAQCAtMTAyODUsNiArMTAyOTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxsb2NhdGVk
QXJnczsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBl
bmQoVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSkpOwogICAgICAgICAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1
cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0
LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50aWNOb2RlT3JpZ2luKTsKQEAgLTEw
NDQzLDEzICsxMDQ1NywxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzaHVmZmxl
RGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgpKTsKIAog
ICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1BcmdzOworICAg
ICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCkt
Pm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKIAogICAg
ICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygp
LT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwog
Ci0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGgg
PSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAs
IFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxl
RGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgICAg
IH0pOwpAQCAtMTA3OTIsNyArMTA4MDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAg
ICAgICAgICAgICAgICAgfSk7CkBAIC0xMTA3Myw3ICsxMTA4OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWls
Q2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpy
ZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxs
U2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEzLDI4ICs0MTMsMTYgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIo
Vk0mIHZtLCB1bnNpZ25lZAogCiAgICAgUmVnaXN0ZXJTZXQgYWxsRlRMQ2FsbGVlU2F2ZXMgPSBS
ZWdpc3RlclNldDo6ZnRsQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIGNvbnN0IFJlZ2lzdGVy
QXRPZmZzZXRMaXN0KiBiYXNlbGluZUNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNh
bGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogdm1DYWxsZWVT
YXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKLSAgICBS
ZWdpc3RlclNldCB2bUNhbGxlZVNhdmVzVG9Ta2lwID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0
ZXJzKCk7Ci0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgaml0
LmxvYWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZl
UmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgfQogCiAgICAg
Zm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJl
Zy5uZXh0KCkpIHsKICAgICAgICAgaWYgKCFhbGxGVExDYWxsZWVTYXZlcy5nZXQocmVnKSkgewot
ICAgICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIXZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKSk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCB1bndpbmRJbmRleCA9IGNv
ZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5pbmRleE9mKHJlZyk7CiAgICAgICAgIGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPSBiYXNlbGluZUNh
bGxlZVNhdmVzLT5maW5kKHJlZyk7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIHZtQ2FsbGVl
U2F2ZSA9IG51bGxwdHI7IAotICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkK
LSAgICAgICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKTsKIAog
ICAgICAgICBpZiAocmVnLmlzR1BSKCkpIHsKICAgICAgICAgICAgIEdQUlJlZyByZWdUb0xvYWQg
PSBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8gR1BSSW5mbzo6cmVnVDAgOiByZWcuZ3ByKCk7Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWdUb0xvYWQgIT0gR1BSSW5mbzo6cmVnVDEpOwog
CiAgICAgICAgICAgICBpZiAodW53aW5kSW5kZXggPT0gVUlOVF9NQVgpIHsKICAgICAgICAgICAg
ICAgICAvLyBUaGUgRlRMIGNvbXBpbGF0aW9uIGRpZG4ndCBwcmVzZXJ2ZSB0aGlzIHJlZ2lzdGVy
LiBUaGlzIG1lYW5zIHRoYXQgaXQgYWxzbwpAQCAtNDUyLDggKzQ0MCw2IEBAIHN0YXRpYyB2b2lk
IGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAogICAgICAgICAgICAgaWYgKGJhc2VsaW5l
UmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQocmVnVG9Mb2FkLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0
ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQtPm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAo
dm1DYWxsZWVTYXZlICYmICF2bUNhbGxlZVNhdmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNhdmUtPnJl
ZygpKSkKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBGUFJSZWcgZnBSZWdUb0xvYWQgPSBiYXNlbGlu
ZVJlZ2lzdGVyT2Zmc2V0ID8gRlBSSW5mbzo6ZnBSZWdUMCA6IHJlZy5mcHIoKTsKIApAQCAtNDY0
LDE5ICs0NTAsOSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkCiAK
ICAgICAgICAgICAgIGlmIChiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQogICAgICAgICAgICAgICAg
IGppdC5zdG9yZURvdWJsZShmcFJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFj
cm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0
LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKHZtQ2FsbGVlU2F2ZSAmJiAhdm1DYWxsZWVT
YXZlc1RvU2tpcC5nZXQodm1DYWxsZWVTYXZlLT5yZWcoKSkpCi0gICAgICAgICAgICAgICAgaml0
LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldCogdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChHUFJJbmZvOjpudW1iZXJU
YWdSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lz
dGVyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZl
LT5vZmZzZXQoKSkpOwotCi0gICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZp
bmQoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQ
UkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7Ci0gICAgfQotCiAgICAgc2l6ZV90
IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxv
Y2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogCiAgICAgaWYgKGV4aXQu
bV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5y
Ygkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAg
ZGVmIHN0cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBj
b252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRP
ZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVzLm1h
cCBkbyB8ZmllbGROYW1lfAorICAgICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLi0xXX0oKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAg
ICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisgICAgICAgIGVuZAorCisgICAgICAgIGRlZiBjb252
ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBmaWVsZE5hbWVzKQogICAgICAgICAgICAgZmllbGRz
Lm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBI
YXNoCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVs
ZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAgICAg
ICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywg
dHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZpeH19OyIKICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkLnRvX3N9
OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmllbGQudG9fcworICAgICAgICAg
ICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2goZmllbGROYW1lKQorICAgICAgICAgICAgICAgICAg
ICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZE5hbWV9OyIKICAgICAgICAgICAgICAg
ICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVuZAogCi0gICAgICAg
IGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcykKKyAgICAgICAgZmll
bGROYW1lcyA9IFtdCisgICAgICAgIHByZWZpeCA9ICIgICAgICAgICIKKyAgICAgICAgZmllbGRz
ID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBmaWVsZHMsIGZpZWxkTmFtZXMpCisgICAgICAgIGZp
ZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwg
ZmllbGROYW1lcykKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBpZiBAaW5pdGlhbGl6
ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2Nyw2ICszNjcsMjggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRQcm9wZXJ0
eShHUFJSZQogICAgICAgICByZXN1bHQpOwogfQogCit2b2lkIEFzc2VtYmx5SGVscGVyczo6c3Rv
cmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNl
dCwgR1BSUmVnIHNjcmF0Y2gpCit7CisgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NU
aGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgIAor
ICAgIGxvYWRQdHIoQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2gpOworICAgIG5lZzMyKG9mZnNldCk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zm
c2V0LCBvZmZzZXQpOworICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CisgICAgCisgICAgaXNJbmxp
bmUubGluayh0aGlzKTsKKyAgICBhZGRQdHIoCisgICAgICAgIFRydXN0ZWRJbW0zMigKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihKU09iamVjdCkpIC0KKyAgICAgICAg
ICAgIChzdGF0aWNfY2FzdDxpbnQzMl90PihmaXJzdE91dE9mTGluZU9mZnNldCkgLSAyKSAqIHN0
YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSwKKyAgICAgICAgb2Jq
ZWN0LCBzY3JhdGNoKTsKKyAgICAKKyAgICByZWFkeS5saW5rKHRoaXMpOworICAgIAorICAgIHN0
b3JlVmFsdWUodmFsdWUsCisgICAgICAgIEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkpOworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdExvYWRTdHJ1Y3R1cmUoVk0mIHZt
LCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gp
CiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY5OCw4ICs3MjAsMTMgQEAgdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExp
bmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6
cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpy
ZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwg
aW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0
TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9
IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNCw4ICsyMzQsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAg
Ly8gTm90ZSB0aGF0IHRoaXMgY2xvYmJlcnMgb2Zmc2V0LgorICAgIC8vIE5vdGUgdGhhdCB0aGVz
ZSBjbG9iYmVyIG9mZnNldC4KICAgICB2b2lkIGxvYWRQcm9wZXJ0eShHUFJSZWcgb2JqZWN0LCBH
UFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpOworICAgIHZvaWQgc3RvcmVQcm9wZXJ0
eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNldCwgR1BSUmVn
IHNjcmF0Y2gpOwogCiAgICAgdm9pZCBtb3ZlVmFsdWVSZWdzKEpTVmFsdWVSZWdzIHNyY1JlZ3Ms
IEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAgIHsKQEAgLTM3OSwxNSArMzgwLDI2IEBAIHB1Ymxp
YzoKICNlbmRpZgogICAgIH0KIAorICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUsIEdQUlJlZyBzY3Jh
dGNoKQorICAgIHsKKyNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKKyAg
ICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwgc2NyYXRjaCk7CisgICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChzY3JhdGNoKTsKKyNlbHNl
CisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKHNjcmF0Y2gpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlGcmFtZSkK
ICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAg
IGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH07CiAgICAgICAgIEdQUlJlZyB0ZW1wMSA9IHVzZWRS
ZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwg
dGVtcDEpOwotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlckltcGwodGVtcDEpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CiAjZWxzZQogICAgICAgICBVTlVT
RURfUEFSQU0odG9wRW50cnlGcmFtZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZy
YW1lKTsKICNlbmRpZgogICAgIH0KICAgICAKQEAgLTE3MjAsNiArMTczMiw3IEBAIHB1YmxpYzoK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVj
dCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmlu
Z0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOwogICAgIAogICAgIHZvaWQgbWFrZVNw
YWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0Nh
bGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29k
ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGlu
ZUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1
ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgorI2luY2x1ZGUgIlN0cnVj
dHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKSVRBZGRJQyogTWF0aElDSG9s
ZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1
cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE11bElDKiBNYXRoSUNIb2xkZXI6
OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBt
X211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUU3ViSUMqIE1hdGhJQ0hvbGRlcjo6YWRk
SklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3Vi
SUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVROZWdJQyogTWF0aElDSG9sZGVyOjphZGRKSVRO
ZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5h
ZGQoYXJpdGhQcm9maWxlKTsgfQorCit2b2lkIE1hdGhJQ0hvbGRlcjo6YWRvcHRNYXRoSUNzKE1h
dGhJQ0hvbGRlciYgb3RoZXIpCit7CisgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRk
SUNzKTsKKyAgICBtX211bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAgIG1fbmVn
SUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90
aGVyLm1fc3ViSUNzKTsKK30KKworQmFzZWxpbmVKSVRDb2RlOjpCYXNlbGluZUpJVENvZGUoQ29k
ZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0
eUNoZWNrKQorICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVj
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgLCBNYXRoSUNIb2xkZXIoKQoreyB9CisKK0Jh
c2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiSklUQ29k
ZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKKworI2lmIEVOQUJMRShKSVQpCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBCaW5hcnlBcml0aFByb2ZpbGU7CitjbGFzcyBVbmFyeUFyaXRo
UHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFNpbXBs
ZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKK2NsYXNzIE1hdGhJQ0hvbGRl
ciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcik7
CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJ
VE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRTdWJJQyog
YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTmVnSUMqIGFkZEpJVE5l
Z0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CisKK3ByaXZhdGU6CisgICAgQmFnPEpJVEFkZElDPiBt
X2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4g
bV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKK307CisKK2NsYXNzIEpJVENv
bnN0YW50UG9vbCB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29uc3RhbnQgPSB1bnNpZ25lZDsKKwor
ICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBHbG9iYWxPYmplY3QsCisg
ICAgICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8sCisgICAgICAg
IEZ1bmN0aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rpb25FeHByLAorICAgIH07CisKKyAgICBzdHJ1
Y3QgVmFsdWUgeworICAgICAgICBUeXBlIHR5cGU7CisgICAgICAgIFBhY2tlZFB0cjx2b2lkPiBw
YXlsb2FkOworICAgIH07CisKKyAgICBKSVRDb25zdGFudFBvb2woKSA9IGRlZmF1bHQ7CisgICAg
SklUQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisgICAgSklUQ29u
c3RhbnRQb29sJiBvcGVyYXRvcj0oSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKworICAg
IENvbnN0YW50IGFkZChUeXBlIHR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxscHRyKQorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudHMuc2l6ZSgpOworICAgICAgICBt
X2NvbnN0YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBlLCBwYXlsb2FkIH0pOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9j
b25zdGFudHMuc2l6ZSgpOyB9CisgICAgVmFsdWUgYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRzW2ldOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0
YW50czsKK307CisKKworY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENv
ZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIEJhc2VsaW5lSklUQ29kZShD
b2RlUmVmPEpTRW50cnlQdHJUYWc+LCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNo
ZWNrKTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisgICAgUENUb0NvZGVPcmln
aW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1RvQ29kZU9y
aWdpbk1hcC5nZXQoKTsgfQorCisgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlu
a2VkQ2FsbHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAg
ICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAg
ICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBG
aXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAg
ICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFu
dFBvb2w7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2Rl
T3JpZ2luTWFwOworICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6
ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUo
KQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWlu
VGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVP
bk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2Fz
ZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVC
bG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93
Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9p
ZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxl
ZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0
b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihj
b2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0No
aWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNh
bGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRP
RihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0Nh
bGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRv
d1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAg
ICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAg
LTcyLDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEK
ICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikpOwogfQog
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6
OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1Zh
bHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFj
a2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Cisg
ICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9yZVB0cihz
Y29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9j
aykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3Ms
IEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93
UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisK
K3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hh
ZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29k
ZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxv
Y2ssIGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVP
dmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVk
TGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlw
dGlvbikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQw
LDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0
aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Ag
b2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxv
Z1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcg
c2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BS
UmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQ
UlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRy
dXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworICAg
IHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVy
IHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2
b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBH
UFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxGcmFt
ZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBjYWxs
ZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07
Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9
IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJl
Z2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0
YS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMyBAQCBwdWJs
aWM6CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWduZWQgbnVtTG9j
YWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsgVUlOVF9NQVgg
fTsKKyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8gT24gb3VyIG1h
Y2hpbmUgZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1hcDxWYWx1ZVJl
Y292ZXJ5PiByZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVyIHsgSW52YWxp
ZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2Nr
Kik7CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwogfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENhbGxGcmFtZVNo
dWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkKICAgICAsIG1f
b2xkRnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3Rl
cnMsIG51bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25lZE9sZEZy
YW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAgICAgICArIHJvdW5k
QXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSkpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnMgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5udW1QYXJhbWV0
ZXJzKSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJ
blJlZ2lzdGVycwogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRh
LmFyZ3Muc2l6ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUg
LSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3Rl
clNldDo6YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNz
ZWRBcmdzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykKIHsKICAg
ICAvLyBXZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAgIGZvciAo
dW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3
ICs0MjEsNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhCiAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFt
ZUJhc2UpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9CiAgICAg
ICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fbmV3RnJh
bWVCYXNlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5j
b2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAgIG1faml0LmFkZDMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBt
X2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudFJl
Z2lzdGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVCYXNlLCBtX25l
d0ZyYW1lQmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlci5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAgICAgIGRh
dGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2VkQXJncyA9
IG1fbnVtUGFzc2VkQXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9udW1QYXJh
bWV0ZXJzOwogICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBD
YWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5y
ZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291
bnQoKTsgKytpKQpAQCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwZXJmb3Jt
U2FmZVdyaXRlcygpOwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7IFVJTlRf
TUFYIH07CisgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Qnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJbnRlcmZh
Y2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51bGxwdHIp
CiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29k
ZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwgbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGlu
ZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAgIG1fcHJv
ZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9jayA9IGNv
ZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTkwLDgg
KzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNraXBPcHRp
bWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhl
Y3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lwT3B0aW1p
emUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1
dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21G
cmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5
RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMjAgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShX
YXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRl
QWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0
KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1Nl
dCkKIHsKKyAgICBhdXRvIG9rID0gYnJhbmNoVGVzdFB0cihaZXJvLCBwb2ludGVyVG9TZXQpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBX
YXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpKTsKKyAgICBvay5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5
Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCit2b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5
Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAg
IGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFyUmVhZE9u
bHlXYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBl
ID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIs
IE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJSZWFkT25seVdhdGNocG9pbnQp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJl
c3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQ
b2ludGVyT2Zmc2V0KCkKQEAgLTEyOSwxMiArMTM3LDE4IEBAIHZvaWQgSklUOjphc3NlcnRTdGFj
a1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Qw
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKK3Zv
aWQgSklUOjpyZXNldFNQKCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7Cit9CisKICNkZWZpbmUgTkVYVF9PUENPREUobmFtZSkgXAogICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpICsg
Y3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyBcCiAgICAgYnJlYWs7CkBAIC0xODEsNjEgKzE5
NSw0NCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjCiAgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1l
SW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JS
YXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBicmFuY2hUZXN0
UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgcmVz
dWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYgKG1fdW5saW5rZWRD
b2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3Vs
dCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpKSwg
cmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCByZXN1bHQpOworCisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6b2Zm
c2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICB9KTsKKyNlbmRpZgorfQorCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBk
YXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgZGF0YUxv
ZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4iKTsKICAgICAKICAgICBq
aXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCk7
CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAKICAgICBtX2NhbGxM
aW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJsb2NrLT52bSgpOwogICAg
IEJ5dGVjb2RlSW5kZXggc3RhcnRCeXRlY29kZUluZGV4KDApOwotICAgIGlmIChtX2xvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1fY29kZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJs
b2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmluaGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+
KHZtKSkpIHsKLSAgICAgICAgLy8gV2UgY2FuIG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVj
YXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2RlQmxvY2sncyBleGFjdGx5IG9uY2UuCi0gICAgICAg
IC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxkIGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRo
ZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRzIHRvCi0gICAgICAgIC8vIGRvIE9TUiBlbnRyeSBp
bnRvIHRoZSBiYXNlbGluZSBKSVQgaW4gYSBsb29wLCBpdCB3aWxsIHBhc3MgaW4gdGhlIGJ5dGVj
b2RlIG9mZnNldCBpdAotICAgICAgICAvLyB3YXMgZXhlY3V0aW5nIGF0IHdoZW4gaXQga2lja2Vk
IG9mZiBvdXIgY29tcGlsYXRpb24uIFdlIG9ubHkgbmVlZCB0byBjb21waWxlIGNvZGUgZm9yCi0g
ICAgICAgIC8vIGFueXRoaW5nIHJlYWNoYWJsZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0Lgot
Ci0gICAgICAgIC8vIFdlIG9ubHkgYm90aGVyIGJ1aWxkaW5nIHRoZSBieXRlY29kZSBncmFwaCBp
ZiBpdCBjb3VsZCBzYXZlIHRpbWUgYW5kIGV4ZWN1dGFibGUKLSAgICAgICAgLy8gbWVtb3J5LiBX
ZSBwaWNrIGFuIGFyYml0cmFyeSBvZmZzZXQgd2hlcmUgd2UgZGVlbSB0aGlzIGlzIHByb2ZpdGFi
bGUuCi0gICAgICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0g
MjAwKSB7Ci0gICAgICAgICAgICAvLyBBcyBhIHNpbXBsaWZpY2F0aW9uLCB3ZSBkb24ndCBmaW5k
IGFsbCBieXRlY29kZSByYW5nZXMgdGhhdCBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAv
LyBJbnN0ZWFkLCB3ZSBqdXN0IGZpbmQgdGhlIG1pbmltdW0gYnl0ZWNvZGUgb2Zmc2V0IHRoYXQg
aXMgcmVhY2hhYmxlLCBhbmQKLSAgICAgICAgICAgIC8vIGNvbXBpbGUgY29kZSBmcm9tIHRoYXQg
Ynl0ZWNvZGUgb2Zmc2V0IG9ud2FyZHMuCi0KLSAgICAgICAgICAgIEJ5dGVjb2RlR3JhcGggZ3Jh
cGgobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAgICAgICAg
ICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRl
Y29kZU9mZnNldChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2spOwotCi0gICAgICAgICAgICBHcmFwaE5vZGVXb3Jr
bGlzdDxCeXRlY29kZUJhc2ljQmxvY2sqPiB3b3JrbGlzdDsKLSAgICAgICAgICAgIHN0YXJ0Qnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHdvcmtsaXN0LnB1c2go
YmxvY2spOwotCi0gICAgICAgICAgICB3aGlsZSAoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9
IHdvcmtsaXN0LnBvcCgpKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRCeXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleChzdGQ6Om1pbihzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGJsb2Nr
LT5sZWFkZXJPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vz
c29ySW5kZXggOiBibG9jay0+c3VjY2Vzc29ycygpKQotICAgICAgICAgICAgICAgICAgICB3b3Jr
bGlzdC5wdXNoKCZncmFwaFtzdWNjZXNzb3JJbmRleF0pOwotCi0gICAgICAgICAgICAgICAgLy8g
QWxzbyBhZGQgY2F0Y2ggYmxvY2tzIGZvciBieXRlY29kZXMgdGhhdCB0aHJvdy4KLSAgICAgICAg
ICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgewot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2st
PmxlYWRlck9mZnNldCgpOyBieXRlY29kZU9mZnNldCA8IGJsb2NrLT5sZWFkZXJPZmZzZXQoKSAr
IGJsb2NrLT50b3RhbExlbmd0aCgpOykgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBp
bnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZU9mZnNldCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYXV0byogaGFuZGxlciA9IG1fY29kZUJsb2NrLT5oYW5kbGVyRm9y
Qnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChncmFwaC5maW5kQmFzaWNCbG9ja1dpdGhM
ZWFkZXJPZmZzZXQoaGFuZGxlci0+dGFyZ2V0KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGJ5dGVjb2RlT2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CiAgICAgZm9yIChtX2J5
dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkg
PCBpbnN0cnVjdGlvbkNvdW50OyApIHsKQEAgLTI3OCwxMiArMjc1LDE1IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAo
UHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bj
b2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChvcGNvZGVJRCAhPSBv
cF9jYXRjaCkKKyAgICAgICAgICAgIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOworCiAgICAg
ICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKICAg
ICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQpAQCAtNTI3LDcgKzUyNyw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJz
dFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29k
ZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJ
bmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUg
Zm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQo
KSk7CkBAIC01NDUsOCArNTQ1LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2Vz
KCkKIAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1
dGlvbigpKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
Y29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBj
dHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxs
RnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBb
IiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNm
ciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQpAQCAtNjAzLDcgKzYwMyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfdmFs
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X2lkKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3Bfc3ViKQotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2Zy
b21fc2NvcGUpCiAjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3B1dF90b19z
Y29wZSkKQEAgLTY3NCw1NSArNjc0LDU1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAjZW5kaWYKIH0KIAordm9pZCBKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5k
Q29uc3RhbnRQb29sUmVnaXN0ZXJzKCkKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
Q29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHNfbWV0YWRhdGFHUFIpOworICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJl
Z1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zm
c2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKQoreworICAgIEJhc2U6OmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6Q2FwYWJpbGl0eUxl
dmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOworICAgIERGRzo6Q2Fw
YWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVs
KCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgog
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFs
c2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2Ug
REZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1
ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1f
c2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7Ci0gICAg
Y2FzZSBHbG9iYWxDb2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToKLSAgICBjYXNlIEV2YWxDb2Rl
OgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAgIC8vIFdlIGNv
dWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1
bmlubGluZWFibGUgY2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZh
dGlvbi4KLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNh
bklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29kZUJsb2NrKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8
U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBU
YWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5n
SnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
d2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1f
c3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV91bmxpbmtl
ZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgICAg
IGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRW
ZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
ciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKQotICAgICAg
ICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX2NvZGVCbG9j
ayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3Zt
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZv
clByb2ZpbGVyKCkpKSkgeworICAgICAgICAvLyBGSVhNRTogYnVpbGQgYSBkaXNhc3NlbWJsZXIg
b2ZmIG9mIFVubGlua2VkQ29kZUJsb2NrLgorICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VV
bmlxdWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICB9CiAgICAg
aWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpIHsKKyAgICAgICAgLy8g
RklYTUU6IGJ1aWxkIHByb2ZpbGVyIGRpc2Fzc2VtYmxlciBvZmYgVW5saW5rZWRDb2RlQmxvY2su
CiAgICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAgICAgICAgIG5ldyBQcm9m
aWxlcjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAorICAgICAgICAgICAgICAg
IG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fcHJvZmls
ZWRDb2RlQmxvY2spLAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpCYXNlbGluZSkpOwotICAg
ICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFBy
b2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fcHJvZmlsZWRD
b2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5h
cHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwpAQCAtNzQy
LDExICs3NDIsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgog
ICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
OworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKCk7CiAKICAgICBM
YWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAgaW50
IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUgPSAtZnJh
bWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9mZnNldCksIGNh
bGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxvdzsKQEAg
LTc1NywxNiArNzU4LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6
aW4KICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsKKyAgICBl
bWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdp
c3RlcnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lz
dGVycygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkgeworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9u
Q29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChz
aG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1l
bnQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAmJiAoIW1fdW5saW5rZWRD
b2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMo
KSArIEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIp
OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBt
X3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAg
ICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBw
dXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBrZWVw
IHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQg
dGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25z
dHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArNzgyLDEyIEBA
IHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZz
ZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3Mu
dGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVn
VDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNl
dE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlw
ZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQogICAg
ICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2Vy
KSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MDQsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7
CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxs
RnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9y
LCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2Ug
bmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9
IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2RlQmxvY2st
PmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgeworICAg
IGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0g
RnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hl
Y2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxv
Y2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1l
SW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJl
c3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkpOwog
CiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJl
Z1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhi
ZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwg
VHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtU
byhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29k
ZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkK
ICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29k
ZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDog
b3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3Io
KSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVj
aywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMy
KFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04Mzks
NyArODQ3LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAg
ICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6
dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ss
IExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBtX2xpbmtC
dWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMs
IG1fdW5saW5rZWRDb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBl
ZmZvcnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4NjYsOCBAQCB2b2lkIEpJVDo6
bGluaygpCiAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAgICAgICAgY2FzZSBTd2l0
Y2hSZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rl
cjogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2st
PnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAg
ICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVs
dE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2Vk
VGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEs
OCArODc5LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBT
d2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBj
dGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJl
bHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAg
Zm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMo
KSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNo
T2Zmc2V0OwpAQCAtOTA2LDYgKzkxNCwyNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCByZWNvcmQuY2FsbGVlKTsKICAgICB9CiAK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGF1dG8gZmluYWxpemVJQ3MgPSBbJl0gKGF1dG8mIGdl
bmVyYXRvcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5lcmF0b3JzKSB7CisgICAg
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsKKyAgICAgICAgICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1fZG9uZSk7CisgICAgICAgICAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zbG93UGF0aEJlZ2luKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX2dldEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkc1dpdGhUaGlzKTsKKyAg
ICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5VmFscyk7
CisgICAgZmluYWxpemVJQ3MobV9kZWxCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeVZh
bHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5
VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9mcyk7CisgICAgZmluYWxpemVJQ3Mo
bV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7CisjZWxzZQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVz
KG1fZ2V0QnlJZHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dl
dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJ
ZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIpOwpAQCAtOTE3LDIxICs5NDYsMjUgQEAgdm9pZCBKSVQ6
OmxpbmsoKQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeVZhbHMsIHBhdGNoQnVmZmVy
KTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNlT2ZzLCBwYXRjaEJ1ZmZlcik7
CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgcGF0Y2hC
dWZmZXIpOworI2VuZGlmCiAKICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2Fs
bENvbXBpbGF0aW9uSW5mbykgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIFVubGlua2Vk
Q2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxpbmtlZENhbGxMaW5rSW5m
bzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pOworI2Vsc2UKICAg
ICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87
CiAgICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKICAgICAgICAgICAgIHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQYXRoU3Rh
cnQpLAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
Pihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CisjZW5kaWYKKwogICAgIH0KIAotICAg
IHsKLSAgICAgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFi
ZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgewotICAgICAgICAgICAgaWYgKG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGppdENvZGVNYXBCdWls
ZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKLSAgICAg
ICAgfQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChqaXRDb2RlTWFwQnVpbGRl
ci5maW5hbGl6ZSgpKTsKKyAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsK
KyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBt
X2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKKyAgICAgICAgaWYgKG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQorICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIu
YXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwogICAgIH0KIAog
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkpIHsKQEAgLTk0MCwy
NiArOTczLDQyIEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFko
bV9jb21waWxhdGlvbikpIHsKKyAgICAgICAgLy8gRklYTUU6IHNob3VsZCB3ZSBtYWtlIHRoZSBi
eXRlY29kZSBwcm9maWxlciBrbm93IGFib3V0IFVubGlua2VkQ29kZUJsb2NrPwogICAgICAgICBp
ZiAoT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpCiAgICAgICAgICAg
ICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9uLmdldCgpLCBw
YXRjaEJ1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29t
cGlsYXRpb24obV9jb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAgICAgICAgbV92bS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2ZpbGVkQ29kZUJsb2NrLCAq
bV9jb21waWxhdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyLmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFr
ZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlciksIHBhdGNoQnVmZmVyKTsKICAgICAKKyAgICAvLyBGSVhNRTogTWFrZSBhIHZlcnNpb24g
b2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBVbmxpbmtlZENvZGVCbG9j
ay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUoCiAg
ICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgSklU
IGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJCYXNlbGluZSBKSVQg
Y29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wcm9maWxlZENv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2ppdENv
ZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IEJh
c2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENvZGUt
Pm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2ppdENv
ZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOwor
ICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1vdmUobV91bmxpbmtlZFN0
dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1f
c3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5t
X2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOworICAgIG1faml0Q29k
ZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2RlLT5tX2NvbnN0YW50UG9v
bCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgbV9q
aXRDb2RlLT5tX2lzU2hhcmVhYmxlID0gbV9pc1NoYXJlYWJsZTsKKyNlbHNlCisgICAgbV9qaXRD
b2RlLT5tX2lzU2hhcmVhYmxlID0gZmFsc2U7CisjZW5kaWYKIAogICAgIGlmIChKSVRJbnRlcm5h
bDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAg
YXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+
c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51
bnRhZ2dlZFB0cigpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3Ig
JXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2VkQ29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJs
ZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5
KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OmZp
bmFsaXplT25NYWluVGhyZWFkKCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1h
aW5UaHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlz
Q29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTk2OCwyNSArMTAxNywxNCBAQCBDb21waWxhdGlv
blJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyCiAKICAgICBtX2xpbmtCdWZmZXItPnJ1bk1h
aW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCi0gICAgewotICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBtX2NvZGVCbG9j
ay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmsp
OwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJl
ck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7Ci0gICAgICAgIEhhbmRsZXJJbmZvJiBoYW5k
bGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgIC8vIEZJWE1F
OiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgotICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUg
PSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRh
cmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7Ci0gICAgfQotCiAgICAg
aWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29k
ZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKKyAgICAgICAgbV9qaXRD
b2RlLT5tX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKTsK
IAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJ
VC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgpKSAv
Ci0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1Np
emUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2st
Pmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUobV9q
aXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5r
ZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJu
IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTAzNiwxMSBAQCBzaXplX3Qg
SklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZlci0+c2l6ZSgpOwog
fQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9u
RWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBk
b01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhy
ZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVCbG9jayk7CiB9CiAK
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKQEAgLTEwNDIsMTgg
KzEwODAsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwogICAg
ICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQ
cmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZy
YW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7
CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJPZmZz
ZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZv
cihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVSZWdpc3RlckNvdW50
Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2ludCBKSVQ6OnN0YWNr
UG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJs
b2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9pbnRlck9mZnNldEZv
cihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNoTWFwPENTdHJpbmcs
IFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3RyaW5n
LCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9u
IDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWws
IGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBP
ZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNf
Y2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAorI2luY2x1
ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUg
IkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgpAQCAtNDQs
NiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hp
ZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgorI2luY2x1ZGUgIkxM
SW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiVW51
c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTE0OSwxNCArMTUx
LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0
aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0Owog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5m
bzsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFu
dDsKKyNlbHNlCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0Owog
ICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyNlbmRpZgogICAgIH07CiAKICAg
ICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNz
IEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAg
Y2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewog
ICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xh
c3MgSklUU3R1YkNhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEs
NiArMTc4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhl
IGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9m
ZnNldC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9m
ZnNldCA9IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAg
ICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29k
ZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAg
ICAgICAgIH5KSVQoKTsKQEAgLTE3OCwyOCArMTg3LDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAg
ICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZv
cnQpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOwor
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sq
KTsKICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01h
aW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0
YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9m
ZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBK
SVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7
CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5w
cml2YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAorICAgICAgICBz
dGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7
CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2Nr
Kik7CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29k
ZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVC
bG9jayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJp
bmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21waWxlVGltZSgpOwogCisgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0
YVRhYmxlR1BSOworICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX2NvbnN0YW50c0dQ
UiA9IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVM
aW5rUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAg
ICAgIHZvaWQgbGluaygpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGls
ZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZh
dGVDb21waWxlKENvZGVCbG9jayosIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAv
LyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVj
ay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gZnVuY3Rpb24pCkBAIC0yMjMsNiArMjM3LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
ICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
ICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlw
ZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVn
LCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVi
bGljOgorICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBH
UFJSZWcpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJS
ZWcpOworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIs
IEdQUlJlZyk7CisKKyAgICAgICAgdm9pZCBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9n
dWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1QwKTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNr
KEp1bXAganVtcFRvSGFuZGxlcikKICAgICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25D
aGVja3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpAQCAtMjU0LDYgKzI5NCwxOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgorICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAorICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9
IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MK
KyAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBP
cDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCisgICAgICAgICwg
dm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KKyAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKKyAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9
PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdz
CisgICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
T3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cworICAgICAgICAs
IHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CisjZWxzZQogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNv
ZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92
YXJhcmdzCkBAIC0yNjUsOSArMzE4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
T3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29u
c3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzCiAgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlu
a0luZm8qKTsKKyNlbmRpZgogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAg
ICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3Qg
T3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yODcsMTQgKzM0MSwxMyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBl
bWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3Jp
dGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcik7CiAKICAg
ICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVn
VDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShW
YWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVn
KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29k
ZSYsIEdQUlJlZyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1ZhbHVlUmVncyk7CiAjZWxz
ZQogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNW
YWx1ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOwpAQCAtMzA1LDggKzM1
OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2
YWx1ZSwgdm9pZD4KICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNv
ZGUoT3AgYnl0ZWNvZGUpOwogCi0gICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVn
aXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJl
Z2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BS
LCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01OTMsNyArNjQ4LDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29w
X2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwpAQCAtNjExLDcgKzY2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICNlbmRpZgogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNywxNCArNjgxLDE0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAog
ICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBl
KTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwg
QWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdp
c3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHks
IEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlD
aGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgZW1pdFZh
clJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICAgICAgICAg
dm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7
CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQpA
QCAtNjQ2LDcgKzcwMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQg
ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFu
ZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAg
ICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZv
aWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAg
ICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NSw2ICs3MDksNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdp
c3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxS
ZWdpc3Rlcik7CkBAIC02NzYsMTMgKzczMSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlz
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcihWTSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0
X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5l
cmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZN
Jik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdl
bmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJf
aGFuZGxlckdlbmVyYXRvcihWTSYpOwpAQCAtNjk2LDMyICs3NDksMTYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZh
cik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRP
UihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3Io
Vk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0K
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9w
R2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0K
LSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2Nv
cGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1v
ZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4g
dXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3
ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAgICAgICAg
ICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVU
eXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JFU09MVkVf
U0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlw
ZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJF
X1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9H
RU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKTsKLQogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3Io
Vk0mKTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCisgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGVHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJik7
CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdl
bmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+
LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mLCBz
dGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKwogICAg
ICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207CkBAIC03NjAs
MTAgKzc5NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAg
dm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChBZGRyZXNz
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIEFk
ZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBCeXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYs
IGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNv
bnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAg
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBB
cmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5
cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIxLDIwICs4NTgsMjAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJh
dGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAg
ICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1
bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAg
ICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShi
eXRlY29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lLi4u
IEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1l
IEJ5dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1
bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0gICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgdGFyZ2V0
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgdGFyZ2V0
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5cGU+KHRhcmdl
dCwgYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRkcmVzcyhHUFJJbmZv
Ojpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxl
KGJ5dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCBy
ZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9u
VHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOSwyNSArOTU2LDIyIEBAIG5hbWVzcGFjZSBK
U0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQo
KSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAg
ICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2Zp
bGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBm
YWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRp
ZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFs
bCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygp
IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGVtaXRNYXRlcmlhbGl6
ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgdm9pZCBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGls
ZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUg
bWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNpc3Rl
bnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRo
aXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVl
IHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJ
bmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgot
ICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsK
KworICAgICAgICB2b2lkIHJlc2V0U1AoKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRl
cnByZXRlcjsKIApAQCAtOTY0LDkgKzk5OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hS
ZWNvcmQ+IG1fc3dpdGNoZXM7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+
IG1fY29waWVkR2V0UHV0SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEJpbmFyeUFy
aXRoUHJvZmlsZT4gbV9jb3BpZWRBcml0aFByb2ZpbGVzOwotCiAgICAgICAgIEp1bXBMaXN0IG1f
ZXhjZXB0aW9uQ2hlY2tzOwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhD
YWxsRnJhbWVSb2xsYmFjazsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMDAw
LDExICsxMDMxLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoTWFwPGNvbnN0IElu
c3RydWN0aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6
ZWQ7Ci0gICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9v
bCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NS
RW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgICAgIFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2pp
dENvZGU7CisgICAgICAgIENvZGVCbG9jayogbV9wcm9maWxlZENvZGVCbG9jayB7IG51bGxwdHIg
fTsKKyAgICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fdW5saW5rZWRDb2RlQmxvY2sgeyBudWxs
cHRyIH07CisKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRy
PEJhc2VsaW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50UG9vbCBt
X2NvbnN0YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2Jh
bE9iamVjdENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07
CisgICAgICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAg
ICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgICAgICBCYWc8
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICAgICAg
Rml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAg
IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwor
CisgICAgICAgIHN0cnVjdCBOb3RBQ29kZUJsb2NrIHsgfSBtX2NvZGVCbG9jazsKKworICAgICAg
ICBib29sIG1faXNTaGFyZWFibGUgeyB0cnVlIH07CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENo
YXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewogICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBh
cmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1l
bnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
CiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEp
OwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52
ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOwor
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBl
bWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91
YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRh
KG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVROZWdJ
QyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBt
X2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOwog
ICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25W
YWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
bkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5
MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQg
SklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwot
ICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2Zp
bGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3MuYWRkSklUQWRkSUMoYXJp
dGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7
CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5h
cnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0
ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRl
ZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRj
aEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBz
cmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncywgYXJp
dGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hH
UFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUsMTAgKzEwMjEsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgICAgICBlbHNlIGlmIChy
aWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChz
Y3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNo
R1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxl
ZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
bm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJp
Z2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwxMyArMTA2MiwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1p
dFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxk
U2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVk
SW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVn
VDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAg
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3Ms
IGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0
PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywg
VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAg
IGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwxMyArMTEyOCwxNCBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAjZW5kaWYKIAogICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNo
b3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nh
c3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2Zp
bGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9u
X0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dK
Sk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFU
UykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExNjYsNyArMTE3NSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBTbmlwcGV0T3BlcmFu
ZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlw
cGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkp
OwpAQCAtMTIxMSw4ICsxMjIwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3Ry
dWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
TXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNz
LmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFk
ZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4o
bXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgSklUU3ViSUMq
IHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0
cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0
TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2
b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApKTsKICAgICBlbWl0U3RvcmUoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMSwgcmVnVDApOwogfQog
CkBAIC0xNTcsNyArMTU3LDcgQEAgc3RkOjplbmFibGVfaWZfdDwKIEpJVDo6Y29tcGlsZVNldHVw
RnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQogewogICAgIHVuc2lnbmVk
IGNoZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgaW50IGFy
Z0NvdW50ID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9p
bnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0YWNrT2Zm
c2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKQEAgLTE5Miw3
ICsxOTIsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAg
ICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRz
OwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZv
clZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIC1maXJzdEZyZWVSZWdp
c3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlv
biwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0
VmFyYXJnc0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7
CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDYgKiBzaXplb2Yo
dm9pZCopKSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMjAyLDcgKzIwMiw3
IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0
dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBl
bHNlCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7
Ci0gICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0KSwgZmlyc3RWYXJBcmdPZmZz
ZXQsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdU
NCksIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
cmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCkBAIC0yMzIsMTAg
KzIzMiwxMCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBzdG9yZVB0
cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFt
ZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
cmVnVDEsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKIAogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKIApAQCAtMjQ5LDcgKzI0OSw3IEBAIHZv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxF
dmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlu
a0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGlu
Zm8gPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBy
ZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAt
MjU4LDggKzI1OCw4IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAK
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVy
KSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7Ci0g
ICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGlu
Zm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2Rl
KTsKQEAgLTI4NiwxMSArMjg2LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IElu
c3RydWN0aW8KICAgICAqLwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CiAgICAg
aWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2Nr
LT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAg
aW5mbyA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCkpOwogICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsK
ICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyks
IHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KICAgICAKLSAgICBhdXRvIGJ5dGVjb2Rl
SW5kZXggPSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7CisgICAgYXV0
byBieXRlY29kZUluZGV4ID0gbV9wcm9maWxlZENvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0
cnVjdGlvbik7CiAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRl
Y29kZUluZGV4KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRz
KSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAg
ICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOyAvLyByZWdUMSwgcmVnVDAgaG9sZHMg
Y2FsbGVlLgpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKIAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM0MSwxMiArMzQxLDEx
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9w
cm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CiAgICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0
aCgqbV92bSwgKnRoaXMpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKQEAgLTM1NCw3ICszNTMsNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3Vu
bGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpAQCAtMzk1LDcg
KzM5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBK
U1ZhbHVlUmVncyBuZXh0UmVncyA9IEpTVmFsdWVSZWdzKHRhZ05leHRHUFIsIHBheWxvYWROZXh0
R1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywKICAgICAgICAgSklUVHlwZTo6QmFzZWxp
bmVKSVQsCiAgICAgICAgIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgQ2Fs
bFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLApAQCAt
NDEwLDcgKzQwOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4K
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgbmV4dFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIG5leHRSZWdzKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgbmV4dFJlZ3MpOwogCiAgICAgZmFz
dENhc2UubGluayh0aGlzKTsKQEAgLTQ0MCwxMCArNDM5LDEwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSgKLSAgICAgICAg
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAgICAgICBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgLy8gbWV0YWRhdGEKICAgICAgICAg
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCAvLyBvcGVyYXRpb24KICAgICAgICAgbmV4dFZSZWcs
IC8vIHJlc3VsdAotICAgICAgICBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIC8vIGFyZzEKKyAgICAgICAgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKICAgICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFy
ZzIKICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnSXRlcmF0b3JHUFIsIHBheWxvYWRJdGVyYXRvckdQ
UiksIC8vIGFyZzMKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsgLy8gYXJnNApAQCAtNDUyLDcgKzQ1MSw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICBhdXRvIGRv
bmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwog
fQpAQCAtNDYwLDcgKzQ1OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVu
KGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
dGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsK
ICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5h
cnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNTA2LDcgKzUw
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAg
cHJlc2VydmVkUmVncy5hZGQodGFnVmFsdWVHUFIpOwogICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFk
ZChwYXlsb2FkVmFsdWVHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgICAgIG1fY29kZUJsb2NrLAorICAgICAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywK
ICAgICAgICAgICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAogICAgICAgICAgICAgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICAgICAgQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLApAQCAtNTMzLDEwICs1MzIsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUNjsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDc7CiAgICAgICAg
IGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7Ci0g
ICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1Zh
bHVlUmVncyh0YWdEb25lR1BSLCBwYXlsb2FkRG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwg
ZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25l
ID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModGFnRG9uZUdQUiwgcGF5bG9hZERv
bmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpOwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssCisgICAgICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLAogICAgICAgICAgICAg
SklUVHlwZTo6QmFzZWxpbmVKSVQsCiAgICAgICAgICAgICBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksCiAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSksCkBAIC01ODgsMTAgKzU4NywxMCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSgK
LSAgICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgLy8gbWV0YWRhdGEK
KyAgICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCAvLyBt
ZXRhZGF0YQogICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCAvLyBvcGVyYXRp
b24KICAgICAgICAgICAgIGRvbmVWUmVnLCAvLyByZXN1bHQKLSAgICAgICAgICAgIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICAgICAg
VHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFy
ZzEKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLCAvLyBhcmcyCiAgICAgICAgICAgICBKU1Zh
bHVlUmVncyh0YWdJdGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFyZzMK
ICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKQEAgLTYwMiw3ICs2MDEsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIGVtaXRKdW1wU2xv
d1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRo
aXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJ
c05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RP
YmplY3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
KTsKICAgICB9CiAKICAgICB7ICAgCkBAIC02MTgsMTAgKzYxNywxMCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZSgKLSAgICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgLy8gbWV0YWRh
dGEKKyAgICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCAv
LyBtZXRhZGF0YQogICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCAvLyBvcGVy
YXRpb24KICAgICAgICAgICAgIHZhbHVlVlJlZywgLy8gcmVzdWx0Ci0gICAgICAgICAgICBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKKyAgICAgICAg
ICAgIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAv
LyBhcmcxCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKSwgLy8gYXJnMgogICAgICAgICAgICAg
SlNWYWx1ZVJlZ3ModGFnSXRlclJlc3VsdEdQUiwgcGF5bG9hZEl0ZXJSZXN1bHRHUFIpLCAvLyBh
cmczCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOyAvLyBhcmc0CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRo
Q2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC00NCw3ICs0NSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENh
bGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkp
LnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDE4ICs1NCwxOCBAQCBzdGQ6
OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6
Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9
IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
IGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQg
Y2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50
SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBj
aGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50Pihz
dGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCisK
ICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lz
dGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCBy
ZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAg
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0YSwg
Y2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3Rv
cmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxl
KCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyArNzksNyBAQCBzdGQ6OmVuYWJs
ZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29k
ZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVj
b2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFu
dCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFs
dWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRz
OwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRl
Y29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJk
QXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNp
emVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVl
UmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0
RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
LWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRo
aXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSksIHJlZ1Qx
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEwMywxNiBAQCBKSVQ6OmNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0g
b3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAgICBz
ZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVy
YXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24s
IHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92
ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQg
Y291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAr
IFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3Qg
PSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZv
LT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2FkQ29u
c3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1Qz
LCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZv
OjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RCaWdn
ZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0xMjcs
MTYgKzEzMSwxNSBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRlbXBs
YXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNv
ZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsK
LSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1l
OjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBh
cmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKGFy
Z3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCByZWdUMSwgcmVnVDIpOworICAgIHJlc2V0U1AoKTsKIAotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkocmVnVDApKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2Vj
bWFNb2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KHJldHVyblZhbHVlR1BSKSk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRl
Y29kZSk7CiAKQEAgLTE0OCw3ICsxNTEsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8q
IGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5h
ZGQoQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2Fs
bExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0
ZWNvZGUubV9hcmd2OwpAQCAtMTU2LDQzICsxNTksNDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZz
ZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNz
KHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXRWaXJ0
dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qo
Km1fdm0sIGluZm8pOworICAgIHJlc2V0U1AoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5
dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRh
aWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCitib29sIEpJVDo6Y29t
cGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRl
bXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0
ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiti
b29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxp
bmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0gICAgQ2FsbEZy
YW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJn
cyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9
IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9
CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9
IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZsZURhdGEtPm51
bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhcmFt
ZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CisgICAgc2h1ZmZs
ZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Cisg
ICAgc2h1ZmZsZURhdGEtPm51bUxvY2FscyA9CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURh
dGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICBzaHVmZmxlRGF0YS0+YXJncy5y
ZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0
ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAg
ICAgIHNodWZmbGVEYXRhLT5hcmdzW2ldID0KICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluSlNTdGFjaygKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAg
RGF0YUZvcm1hdEpTKTsKICAgICB9Ci0gICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAg
VmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURh
dGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0g
VmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAgc2h1ZmZsZURh
dGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhz
ID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
KnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3Rh
bnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMg
PSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwg
cmVnVDIsIFsmXSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURh
dGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQ
YXRocyk7CisKKyAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFt
ZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2Nh
dGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0yMTgsMTQgKzIyNSwy
NSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0g
Q2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVy
IHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLwotICAgIENh
bGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxf
ZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwg
aW5mbyk7CisKKyAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBp
ZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKSB7CisgICAgICAgIGluZm8gPSBtX3VubGlua2Vk
Q2FsbHMuYWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihv
cGNvZGVJRCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZvKTsKKworICAgICAgICBBU1NF
UlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Cisg
ICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygp
KTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS51bmxp
bmtlZENhbGxMaW5rSW5mbyA9IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3RhbnQ7Cisg
ICAgfQorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQpOwogCiAg
ICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3
aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRlY29kZUluZGV4ID0g
bV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQzMl90IGxv
Y2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOworICAgIHVp
bnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRz
KCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVzcyhjYWxs
RnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBj
YWxsZWUuCkBAIC0yMzQsMTYgKzI1MiwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25z
dCBJbnN0cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNh
bGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxs
VHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAgaWYgKGNvbXBpbGVU
YWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQorICAgIGlmIChjb21w
aWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3Rh
bnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCBy
ZWdUMik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAgICBhdXRvIHNs
b3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1Bh
dGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVn
VDAsIHJlZ1QyLCBbJl0gewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
ICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CiAgICAgICAgIH0pOwpA
QCAtMjUzLDE0ICsyNjcsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3RpbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBzbG93UGF0aHMgPSBpbmZv
LT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Olllcyk7CisgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXREYXRhSUNG
YXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyKTsKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxh
YmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwog
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICByZXNldFNQ
KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CkBAIC0yNzMsMjEgKzI4
NiwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOwogCiAgICAgaWYgKG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJn
cyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92bSwg
KnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKCptX3ZtLCAqdGhp
cywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZy
b21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIHJlc2V0U1AoKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0
ZWNvZGUpOwpAQCAtMzk1LDE3ICs0MDcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jf
b3Blbihjb25zdCBJbgogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9w
ZXJ0eU5hbWVzLT5uZXh0OwogICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBtb3ZlKHJlZ1Qw
LCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5
SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVl
ZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX25leHQpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlc3VsdEdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25l
eHQsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsK
IH0KQEAgLTQxNiwxMCArNDQyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1
Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9I
b3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgaXRlcmF0b3JH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgSnVtcExpc3Qgbm90T2Jq
ZWN0OwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9yR1BSKSk7
CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckdQUikpOwpA
QCAtNDMyLDE5ICs0NTYsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29ucwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2Fs
bCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJhdG9y
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50KS5yYXdCaXRzKCkpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBtb3ZlKGl0
ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBl
KG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogCiAgICAg
YXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVy
YXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogCiAgICAgZG9uZS5saW5rKHRo
aXMpOwogfQpAQCAtNDUyLDcgKzQ3NCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9uID0gKFsmXSAoKSB7
CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKICAgICAgICAgY2FzZSBO
YXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25hcnJvdzsKQEAgLTQ3MCw1MCAr
NDkxLDc5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBK
dW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
MiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRpb25Nb2RlOjpHZW5l
cmljKSkpOwogCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBvcjgoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgQWJzb2x1
dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2l0ZXJhdGlvbk1ldGFkYXRhLnNlZW5Nb2RlcykpOworICAg
IGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9m
ZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0
T2ZTZWVuTW9kZXMoKSwgcmVnVDApOworICAgIG9yMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgcmVnVDApOworICAgIHN0b3JlOFRv
TWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNl
dE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZT
ZWVuTW9kZXMoKSk7CiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rp
b24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQo
KTsKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2JqZWN0KSBpbiByZWdU
MAogCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGl0ZXJSZXN1bHRH
UFIgPSByZWdUMjsKLSAgICBHUFJSZWcgZG9uZUdQUiA9IHJlZ1QxOwotICAgIC8vIGl0ZXJSZXN1
bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0IGJ5IGlkIGJlbG93LgotICAg
IG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgaXRlckNhbGxS
ZXN1bHRHUFIpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoaXRlclJlc3VsdEdQUik7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChyZXR1cm5WYWx1ZUdQUiA9PSBiYXNlR1BSKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVn
cyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJl
c2VydmVkUmVncy5hZGQodmFsdWVHUFIpOworICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZChpdGVy
Q2FsbFJlc3VsdEdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25l
LmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BS
KSwgcmVnVDMsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9u
ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHN0
dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICAgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJl
LCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IGRvbmVH
UFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBk
b25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CiAKLQog
ICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7Ci0gICAgICAgIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzKGRvbmVH
UFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
IHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
MSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAg
ICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7
CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBK
U1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1Qx
LCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbEdQUik7CisKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBiYXNl
R1BSKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5w
cm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFs
dWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQg
dG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0
R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3
LDU5ICs1NzcsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwog
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVj
a3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyOworCiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7
CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAg
ICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90
T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUu
aW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21f
Z2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChp
dGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmpl
Y3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRH
UFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAg
ICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUp
PihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBu
b3RPYmplY3QubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJv
d0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RP
YmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0
ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAog
ICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZh
bHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlk
c1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNz
KEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShp
dGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwg
QWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihp
ZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCAr
MzIsMTEgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJS
ZWdpc3RlclNldC5oIgogCisKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBQQ1RvQ29kZU9yaWdp
bk1hcDsKKwogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBDb21tb25EYXRhOwogY2xhc3MgSklUQ29k
ZTsKQEAgLTE1OSwxMCArMTYyLDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIHVzZURh
dGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgewotICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURh
dGFJQygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAg
IH0KIApAQCAtMjIzLDYgKzIyNiw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTaGFyZWQoKSBj
b25zdCB7IHJldHVybiBtX3NoYXJlQXR0cmlidXRlID09IFNoYXJlQXR0cmlidXRlOjpTaGFyZWQ7
IH0KIAorICAgIHZpcnR1YWwgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkg
eyByZXR1cm4gbnVsbHB0cjsgfQorCiBwcml2YXRlOgogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwog
ICAgIFNoYXJlQXR0cmlidXRlIG1fc2hhcmVBdHRyaWJ1dGU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAkocmV2aXNpb24gMjgzMDUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgdm9pZCBKSVRDb21waWxhdGlvbktleTo6ZHVt
cChQcmludFN0cmVhbQogICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBvdXQucHJpbnQoIihDb21waWxlIG9mICIsICptX3Byb2ZpbGVkQmxv
Y2ssICIgd2l0aCAiLCBtX21vZGUsICIpIik7CisgICAgb3V0LnByaW50KCIoQ29tcGlsZSBvZiAi
LCBSYXdQb2ludGVyKG1fY29kZUJsb2NrKSwgIiB3aXRoICIsIG1fbW9kZSwgIikiKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENv
bXBpbGF0aW9uS2V5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb21waWxhdGlvbktleS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDU3ICsz
MCw1NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgQ29k
ZUJsb2NrU2V0OworY2xhc3MgSlNDZWxsOwogCiBjbGFzcyBKSVRDb21waWxhdGlvbktleSB7CiBw
dWJsaWM6CiAgICAgSklUQ29tcGlsYXRpb25LZXkoKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9j
ayhudWxscHRyKQorICAgICAgICA6IG1fY29kZUJsb2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9t
b2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uKQogICAgIHsKICAgICB9
CiAgICAgCiAgICAgSklUQ29tcGlsYXRpb25LZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVU
eXBlKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhudWxscHRyKQorICAgICAgICA6IG1fY29k
ZUJsb2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9tb2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6REZH
KQogICAgIHsKICAgICB9CiAgICAgCi0gICAgSklUQ29tcGlsYXRpb25LZXkoQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSkKLSAgICAgICAgOiBtX3Byb2Zp
bGVkQmxvY2socHJvZmlsZWRCbG9jaykKKyAgICBKSVRDb21waWxhdGlvbktleShKU0NlbGwqIHBy
b2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQorICAgICAgICA6IG1fY29kZUJs
b2NrKHByb2ZpbGVkQmxvY2spCiAgICAgICAgICwgbV9tb2RlKG1vZGUpCiAgICAgewogICAgIH0K
ICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
IW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgPT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlk
Q29tcGlsYXRpb247CisgICAgICAgIHJldHVybiAhbV9jb2RlQmxvY2sgJiYgbV9tb2RlID09IEpJ
VENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOwogICAgIH0KICAgICAKICAgICBi
b29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSAhPSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFs
aWRDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuICFtX2NvZGVCbG9jayAmJiBtX21vZGUgIT0g
SklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CiAgICAgfQogICAgIAotICAg
IENvZGVCbG9jayogcHJvZmlsZWRCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZmlsZWRCbG9j
azsgfQogICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
OyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEpJVENvbXBpbGF0aW9uS2V5JiBv
dGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3Byb2ZpbGVkQmxvY2sgPT0gb3Ro
ZXIubV9wcm9maWxlZEJsb2NrCisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jayA9PSBvdGhlci5t
X2NvZGVCbG9jawogICAgICAgICAgICAgJiYgbV9tb2RlID09IG90aGVyLm1fbW9kZTsKICAgICB9
CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
V1RGOjpwYWlySW50SGFzaChXVEY6OlB0ckhhc2g8Q29kZUJsb2NrKj46Omhhc2gobV9wcm9maWxl
ZEJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8SklUQ29tcGlsYXRpb25N
b2RlPjo6dHlwZT4obV9tb2RlKSk7CisgICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKFdU
Rjo6UHRySGFzaDxKU0NlbGwqPjo6aGFzaChtX2NvZGVCbG9jayksIHN0YXRpY19jYXN0PHN0ZDo6
dW5kZXJseWluZ190eXBlPEpJVENvbXBpbGF0aW9uTW9kZT46OnR5cGU+KG1fbW9kZSkpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToK
LSAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKKyAgICAvLyBFaXRoZXIgQ29kZUJsb2Nr
KiBvciBVbmxpbmtlZENvZGVCbG9jayogZm9yIGJhc2xlbGluZSBKSVQuCisgICAgSlNDZWxsKiBt
X2NvZGVCbG9jazsKICAgICBKSVRDb21waWxhdGlvbk1vZGUgbV9tb2RlOwogfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKICNpbmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKKyNpbmNsdWRlICJKSVQuaCIK
ICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIK
IApAQCAtNDYsMTAgKzQ3LDkgQEAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBnYXJiYWdlU3R1
YkluZgogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKAog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAog
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQotICAgIDogbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQotICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCisgICAgOiBtX2ppdFR5cGUoaml0
VHlwZSkKIHsKLSAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRk
U3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKKyAg
ICBtX3N0dWJJbmZvID0gY29kZUJsb2NrID8gY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NU
eXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNh
bGxTaXRlSW5kZXggPSBjYWxsU2l0ZTsKIAogICAgIG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMg
PSB1c2VkUmVnaXN0ZXJzOwpAQCAtNTksNyArNTksNiBAQCB2b2lkIEpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYg
c2xvd1BhdGgsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCkK
IHsKICAgICBtX3N0dWJJbmZvLT5zdGFydCA9IHN0YXJ0OwotCiAgICAgbV9zdHViSW5mby0+ZG9u
ZUxvY2F0aW9uID0gZmFzdFBhdGgubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihtX2RvbmUp
OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkKQEAgLTY3LDYgKzY2
LDE1IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIG1fc3R1
YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9uT2Y8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KG1fc2xvd1BhdGhCZWdpbik7CiB9CiAKK3ZvaWQgSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5z
aWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBtX3N0YXJ0ID0gaml0
LmxhYmVsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlw
ZSkpOworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBq
aXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICBt
X2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVy
YXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNz
VHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3Mg
YmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTExMCw3ICsx
MTgsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cywKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlKQogICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVP
cmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwg
c3R1YkluZm9HUFIpCi0gICAgLCBtX2lzTGVuZ3RoQWNjZXNzKHByb3BlcnR5TmFtZS51aWQoKSA9
PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAgICAsIG1f
aXNMZW5ndGhBY2Nlc3MoY29kZUJsb2NrICYmIHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxv
Y2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVChiYXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9CkBAIC0xMjAsNiAr
MTI4LDM3IEBAIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGEKICAgICBn
ZW5lcmF0ZUZhc3RDb21tb24oaml0LCBtX2lzTGVuZ3RoQWNjZXNzID8gSW5saW5lQWNjZXNzOjpz
aXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2Vz
cygpKTsKIH0KIAorCisjaWYgVVNFKEpTVkFMVUU2NCkKK3N0YXRpYyB2b2lkIGdlbmVyYXRlR2V0
QnlJZElubGluZUFjY2VzcyhKSVQmIGppdCwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgYmFz
ZSwgR1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyByZXN1bHQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lw
SW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0
Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmxvYWQzMihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQubG9hZFByb3BlcnR5KGJh
c2UsIHNjcmF0Y2gsIEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOworICAgIGF1dG8gZmluaXNoZWQg
PSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGpp
dC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAg
ZmluaXNoZWQubGluaygmaml0KTsKK30KKwordm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBH
UFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0
YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0
LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGdlbmVyYXRlR2V0QnlJ
ZElubGluZUFjY2VzcyhqaXQsIHN0dWJJbmZvR1BSLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2UsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisjZW5k
aWYKKwogSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNl
dCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyB2
YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzdHVi
SW5mb0dQUikKQEAgLTEzOCw2ICsxNzcsMjAgQEAgdm9pZCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I6OmdlbmVyYQogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6
c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKK3ZvaWQg
SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAg
bV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywg
c3R1YkluZm9HUFIpOworICAgIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhqaXQsIHN0dWJJ
bmZvR1BSLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVH
ZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnNjcmF0Y2gsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlz
UmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisjZW5k
aWYKKwogSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcigKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdz
IHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCAKQEAgLTE0OSw2ICsy
MDIsMzYgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcgogICAgIG1f
c3R1YkluZm8tPnVzZWRSZWdpc3RlcnMuY2xlYXIoc2NyYXRjaCk7CiB9CiAKKyNpZiBVU0UoSlNW
QUxVRTY0KQordm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOwor
CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHVi
SW5mbywgc3R1YkluZm9HUFIpOworCisgICAgR1BSUmVnIGJhc2UgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnNjcmF0Y2g7CisgICAgR1BSUmVnIHNjcmF0Y2gyID0gQmFzZWxpbmVQdXRCeUlkUmVn
aXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBHUFJSZWcgdmFsdWUgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnZhbHVlOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAg
aml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJy
YW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNz
QmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkp
LCBzY3JhdGNoKTsKKyAgICBqaXQuc3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB7IHZhbHVlIH0s
IGJhc2UsIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKKyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAo
KTsKKworICAgIHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsKKyAgICBqaXQuZmFySnVtcChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxp
bmsoJmppdCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisjZW5kaWYKKwogdm9pZCBK
SVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQp
CiB7CiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJv
cGVydHlSZXBsYWNlKCkpOwpAQCAtMjAwLDcgKzI4Myw3IEBAIHZvaWQgSklURGVsQnlWYWxHZW5l
cmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5m
b0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZv
LT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBK
SVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6
QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBq
aXQubGFiZWwoKTsKQEAgLTIzNiw3ICszMTksNyBAQCB2b2lkIEpJVERlbEJ5SWRHZW5lcmF0b3I6
OmdlbmVyYXRlRmFzdFBhCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIp
OwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9z
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1
YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
Q29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBt
X3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0Lmxh
YmVsKCk7CkBAIC0yNzAsNyArMzUzLDcgQEAgdm9pZCBKSVRJbkJ5VmFsR2VuZXJhdG9yOjpnZW5l
cmF0ZUZhc3RQYQogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAg
ICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0
aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1f
c3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQ
dHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93
UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgp
OwpAQCAtMzAwLDYgKzM4MywzNCBAQCB2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVG
YXN0UGF0CiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9y
UHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBKSVRJbkJ5
SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5z
aWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0Lmxh
YmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisK
KyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIEdQ
UlJlZyByZXN1bHQgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIEdQUlJl
ZyBzY3JhdGNoID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAg
ICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBq
aXQuYm94Qm9vbGVhbih0cnVlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdCB9KTsKKyAgICBhdXRvIGZp
bmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsK
KyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsK
KworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9
CisjZW5kaWYKKwogSklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6SklUSW5zdGFuY2VPZkdlbmVyYXRv
cigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwKICAgICBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHZhbHVlLCBHUFJS
ZWcgcHJvdG90eXBlLCBHUFJSZWcgc3R1YkluZm9HUFIsCkBAIC0zMzIsNyArNDQzLDcgQEAgdm9p
ZCBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpnZW5lcmF0ZUZhcwogICAgIG1fc3RhcnQgPSBqaXQu
bGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1
bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsK
ICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgp
OwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtMzY4LDcgKzQ3OSw3IEBAIHZvaWQgSklU
R2V0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVs
KCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZD
b2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKEND
YWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAg
fSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAg
ICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTQwNSw3ICs1MTYsNyBAQCB2b2lkIEpJVFB1dEJ5
VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwog
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1f
c3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9z
dHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0
cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxz
ZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9k
b25lID0gaml0LmxhYmVsKCk7CkBAIC00NDAsNyArNTUxLDcgQEAgdm9pZCBKSVRQcml2YXRlQnJh
bmRBY2Nlc3NHZW5lcmF0b3I6OmdlbgogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJ
bmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1Yklu
Zm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSks
IEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAg
ICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9
IGppdC5sYWJlbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkNvZGVPcmln
aW4uaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklU
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJQdXRLaW5k
LmgiCkBAIC0zOCwxMSArMzksMTIwIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxl
SWRlbnRpZmllcjsKIGNsYXNzIENhbGxTaXRlSW5kZXg7CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFz
cyBKSVQ7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNz
IEpJVFR5cGUgOiB1aW50OF90OwogCisjaWYgVVNFKEpTVkFMVUU2NCkKK3N0cnVjdCBCYXNlbGlu
ZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUklu
Zm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZv
OjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkg
PSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQ
UkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJ
bmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAg
ICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0aWFs
aXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgorICAgIHN0YXRpY19hc3Nl
cnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsK
KyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpy
ZXN1bHQpOworICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MiA9IEdQUkluZm86OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gz
ID0gR1BSSW5mbzo6cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50
R1BSMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86
OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQ
UkluZm86Om5vbkFyZ0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIg
PSBHUFJJbmZvOjpub25BcmdHUFIxOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7Cisg
ICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2Up
OworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BS
SW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUklu
Zm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGRvbnRDbG9iYmVyUmVnaXN0ZXIgPSBHUFJJbmZvOjpyZWdUMzsKK307CisK
K3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5C
eUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBiYXNlID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpzY3JhdGNoOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0
cnVjdCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2
YWx1ZSA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb2Zp
bGUgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
byA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3RydWN0IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmQgPSBHUFJJbmZvOjpyZWdUMTsK
KyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZSk7CisgICAgc3RhdGljX2Fzc2VydChicmFuZCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMjsKK307CisjZW5kaWYKKwogY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Ig
ewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9CkBAIC02Miwx
MiArMTcyLDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKAogICAgICAgICBMaW5rQnVm
ZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlciwK
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsK
LSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVu
c2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CisKKyAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2VkU3R1YkluZm8geyBudWxscHRyIH07Cisg
ICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBwcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2Nr
KiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0VHlwZTsKICAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgorICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBt
X3Nsb3dQYXRoQ2FsbDsKQEAgLTk4LDcgKzIxNCw3IEBAIHByb3RlY3RlZDoKICAgICBKU1ZhbHVl
UmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBtX3N0YXJ0OworcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1f
c2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTExLDYgKzIyNyw3IEBAIHB1YmxpYzoKICAgICAgICAg
SlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwg
QWNjZXNzVHlwZSk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1i
bGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5z
aWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIAogcHJpdmF0ZToK
ICAgICBib29sIG1faXNMZW5ndGhBY2Nlc3M7CkBAIC0xMjQsNiArMjQxLDcgQEAgcHVibGljOgog
ICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAg
ICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHRo
aXNSZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0
dWJJbmZvR1BSKTsKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
IH07CiAKQEAgLTEzMiwxMCArMjUwLDExIEBAIHB1YmxpYzoKICAgICBKSVRQdXRCeUlkR2VuZXJh
dG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29k
ZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJh
c2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJl
ZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CisgICAgICAgIENvZGVCbG9jayosIEpJVFR5
cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBK
U1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNN
QU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fz
c2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYs
IHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAgICAgCiAg
ICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0aW9uKCk7CiAKQEAgLTE2Mywx
MSArMjgyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFs
dWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTE5MSw4ICszMDgsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9z
dGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsK
IH07CiAKQEAgLTIxNiw4ICszMzEsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFz
dFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQ
YXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNTQsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdl
bmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVt
cCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI1NSw2ICszNjYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9H
UFIpOwogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAg
dm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1Yklu
Zm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIH07CiAKIGNsYXNzIEpJVEluc3RhbmNl
T2ZHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewpAQCAt
Mjc3LDggKzM4OSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYg
ZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOwogCi1w
cml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzAyLDExICs0
MTIsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFs
dWVSZWdzIG1fcmVzdWx0OwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBA
IC0zMzAsOCArNDM4LDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0
aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhK
dW1wOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdp
c3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKK30KKworQUxXQVlTX0lOTElORSBib29s
IEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBp
ZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9
PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigp
OworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25z
dGFudCkgeworICAgICAgICAvLyBBbGwgbGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0
YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25z
dGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAg
UkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29u
c3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMp
OwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFk
ZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xNTYsMzYgKzE4
MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4CiAjZW5kaWYK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklU
OjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxl
KGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFs
dWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVy
blZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5W
YWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2FsbDsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwg
QWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BS
MiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1p
dFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKIH0K
IAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsK
LSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93
bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMDUsNyAr
MjMwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5l
IHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0
ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkp
OwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJl
c3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsK
QEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3Bv
aW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1w
IGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlz
IG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJh
dGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkp
OworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNv
ZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZCht
X2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgsMjkgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlz
Q29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3Ry
aW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKKyAg
ICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3Jj
KSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJp
bmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0
aCgpID09IDE7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogaW5saW5lIHZvaWQgSklUOjpl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVl
UmVncyB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKIAotICAg
IC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28g
d2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vs
c2UKICAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0
PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKICAgICBz
dG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsK
ICAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0j
ZW5kaWYKIH0KKyNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSks
IFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJ
ZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
Z1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxz
ZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzIzLDQxICszNDgs
MzcgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCisj
aWYgVVNFKEpTVkFMVUU2NCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZv
cihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKLX0KIAot
I2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyByZXN1bHRSZWcpCi17Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJl
ZykpOworICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVPZmZzZXRG
b3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpICsgVmFsdWVQcm9maWxl
OjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7CisgICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgQWRkcmVz
cyhzX21ldGFkYXRhR1BSLCBvZmZzZXQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRh
dGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1l
dGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Citp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5
dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQg
Y2VsbEdQUiwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgc2NyYXRjaEdQ
UikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlm
Zl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQg
c2NyYXRjaEdQUikKIHsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAg
IGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBh
cnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0
b3JlMzJUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmls
ZSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBS
ZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Citpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29k
ZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQog
ewotICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgbG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYXJyYXlQ
cm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKSk7
Ci0gICAgfQorICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgQnl0
ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpv
ZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2VsbEdQUiwgc2NyYXRjaEdQUik7CiB9CiAK
IEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFs
UmVnaXN0ZXIgc3JjKQpAQCAtMzgwLDcgKzQwMSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVh
bFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wg
PSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOworICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29u
c3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJl
c3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcgKzUxNyw3IEBAIGlubGluZSB2b2lkIEpJVDo6
ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJs
b2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAg
ICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVt
cCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcgKzUyNyw3IEBAIGlubGluZSB2b2lkIEpJVDo6
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0g
ICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93
bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNCwxMSArNTM1LDYgQEAg
aW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogICAgIH0KIH0KIAotQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVy
IHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJh
bmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBW
aXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0LDExICs1NjAsMTEgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgp
OyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBh
dGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAgaWYg
KHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsK
LSAgICAgICAgZWxzZQorICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFu
dE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAg
IG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgZHN0KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtNTY2LDExICs1ODIsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBk
c3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQo
VmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0
ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTU5
NSw3ICs2MDYsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAK
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdp
c3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9j
ay0+aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTYzNywzMCArNjQ4
LDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewogICAgIGlm
ICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2Nr
LT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKLX0KLQotQUxXQVlTX0lOTElORSBH
ZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNvZGUpCi17
Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsgLy8gSGFzaE1h
cCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdl
dFB1dEluZm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJ
bmZvcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsK
LSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9nZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0
SW5mby5vcGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJbmZvOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6
Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2NF90IGtl
eSA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEpIDw8IDMy
IHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0
byBpdGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0
ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0
ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1fY29waWVk
QXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBhcml0aFBy
b2ZpbGU7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZz
ZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY4MSw2ICs2
NjksNjAgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAogICAgIHJl
dHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxv
YWRQdHIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
Ojpsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zm
c2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQzMihBZGRyZXNzKHNfbWV0YWRhdGFHUFIs
IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5
dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBs
b2FkOChBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUgdmFsdWUsIGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTgodmFs
dWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlMzJU
b01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qg
b2Zmc2V0KQoreworICAgIHN0b3JlMzIodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91
bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNv
ZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBC
eXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNl
dEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBzX21ldGFkYXRhR1BSLCByZXN1
bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29uc3RhbnQoSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxv
YWRQdHIoQWRkcmVzcyhzX2NvbnN0YW50c0dQUiwgc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb25z
dGFudEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
b2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZENvbnN0YW50KG1fZ2xv
YmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIEdQUlJlZyBy
ZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKKyAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRz
VmVjdG9yQnVmZmVyKCkpLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIGNv
bnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKHZvaWQqKSksIHJlc3VsdCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29u
c3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAg
ICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUo
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwg
YWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKQEAg
LTExMCw3ICsxMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJ
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRh
dGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUp
OwpAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UKICAgICBlbWl0TG9hZFBheWxvYWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogICAg
IC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3Vs
ZCBkby4KICAgICBKdW1wIGhhc0luc3RhbmNlVmFsdWVOb3RDZWxsID0gZW1pdEp1bXBJZk5vdEpT
Q2VsbChoYXNJbnN0YW5jZVZhbHVlKTsKLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUg
PSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkp
OworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkt
PmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAogICAgIC8vIFdl
IGtub3cgdGhhdCBjb25zdHJ1Y3RvciBpcyBhbiBvYmplY3QgZnJvbSB0aGUgd2F5IGJ5dGVjb2Rl
IGlzIGVtaXR0ZWQgZm9yIGluc3RhbmNlb2YgZXhwcmVzc2lvbnMuCiAgICAgZW1pdExvYWRQYXls
b2FkKGNvbnN0cnVjdG9yLCByZWdUMCk7CkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChwcm90byk7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgIG1fcHJv
ZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICByZWdUMCwgLy8gcmVz
dWx0CiAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQpAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKICAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOwogICAgIGVtaXRMb2Fk
VGFnKHByb3RvLCByZWdUMyk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbnN0YW5jZU9mT3B0aW1pemUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBn
ZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDAsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QxKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0
YW5jZU9mT3B0aW1pemUsIGRzdCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMCwgcmVnVDIpLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDEpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwogfQogCkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKAogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAg
IGVtaXRMb2FkUGF5bG9hZChjb25zdHJ1Y3RvciwgcmVnVDIpOwogICAgIGVtaXRMb2FkKGhhc0lu
c3RhbmNlVmFsdWUsIHJlZ1Q0LCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25J
bnN0YW5jZU9mQ3VzdG9tLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCByZWdUMiwgSlNW
YWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSk7CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KICAgICAKQEAgLTI0OCw3ICsyNDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9m
aWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAg
IGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM3OCw3ICszNzgs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zCiAgICAgVmlydHVh
bFJlZ2lzdGVyIG5hbWUgPSBieXRlY29kZS5tX25hbWU7CiAgICAgZW1pdExvYWRQYXlsb2FkKGZ1
bmMsIHJlZ1QxKTsKICAgICBlbWl0TG9hZChuYW1lLCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC00MDgsNyArNDA4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0
aQogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJl
Z1QzOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsK
LSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5j
aElmRmFsc2V5KHZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDIyLDcgKzQyMiw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICAgICBKU1ZhbHVl
UmVncyB2YWx1ZShyZWdUMSwgcmVnVDApOwogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwog
ICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHko
dm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgdmFsdWUsIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzcsNyArNDM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVx
X251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdl
dCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsK
IApAQCAtNDYzLDcgKzQ2Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJ
bnN0cnUKIAogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGFkZEp1
bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRl
ID0ganVtcCgpOwogCkBAIC01MDQsNyArNTA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRl
ZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29u
c3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwogICAgIEFTU0VSVChzcGVj
aWFsUG9pbnRlci5pc0NlbGwoKSk7CkBAIC01NTIsMTMgKzU1MiwxMyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5j
aElmTm90U3RyaW5nKHJlZ1QyKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCByZWdUMCwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmluZ0VxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1Qy
KTsKICAgICBzdG9yZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2Fz
ZS4KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVz
CiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwog
CiAgICAgc3RvcmVSZXN1bHQubGluayh0aGlzKTsKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwpAQCAtNTkxLDE0ICs1OTEsMTQgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcEVx
SnVtcFNsb3coVmVjdG9yPFNsbwogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0
cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVn
VDAsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwg
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpF
cSA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwogICAgIGRv
bmUuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBHZW5lcmljIGNhc2UuCiAgICAgZ2VuZXJpY0Nh
c2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91YmxlcwogICAgIGdlbmVyaWNDYXNl
LmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVybyA6
IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdldCk7CiAKICAgICBkb25lLmxpbmsodGhp
cyk7CkBAIC02NDMsMTMgKzY0MywxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0
IEluc3RydWN0CiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1Qy
KSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKICAgICBzdG9yZVJlc3Vs
dC5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2Fz
ZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2Uu
bGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogCiAgICAgc3RvcmVSZXN1bHQu
bGluayh0aGlzKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmV0dXJuVmFsdWVHUFIp
OwpAQCAtNzYyLDcgKzc2Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29u
c3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0
cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTc3Miw3ICs3NzIsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KIApAQCAtNzkxLDcgKzc5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3Qg
SW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoRXF1YWws
IHJlZ1QwLCByZWdUMiwgcmVnVDEpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgp
OwpAQCAtODIzLDcgKzgyMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IElu
c3RydWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoTm90RXF1YWws
IHJlZ1QwLCByZWdUMiwgcmVnVDEpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgp
OwpAQCAtODQ2LDcgKzg0Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3Ry
dWN0aW8KICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwogICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7
CiAgICAgZW1pdExvYWQoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgbV9wcm9maWxlZENvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGp1bXBUb0V4
Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiB9CiAKQEAgLTg2Miw3ICs4NjIsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsK
ICAgICBpc0ludDMyLmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAgaWYgKHNyYyAhPSBk
c3QpCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CkBAIC04ODQsNyAr
ODg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGFyZ3VtZW50VmFsdWVSZWdzLCByZWdUMikpOwog
ICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAgaWYgKHNyYyAhPSBk
c3QpCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CkBAIC05MTUsNyAr
OTE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydQogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAgaWYgKHNyYyAhPSBkc3Qp
CiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CkBAIC05MzEsNyArOTMx
LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJh
bWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVz
cyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBXaGVuIHRoZSBMTEludCB0aHJvd3MgYW4gZXhjZXB0aW9u
LCB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlJ3ZlIGFscmVhZHkgdGllcmVkIHVwCisgICAgLy8g
dGhlIHNhbWUgQ29kZUJsb2NrIHRvIGJhc2VsaW5lLCBhbmQgd2UnbGwgY2F0Y2ggdGhlIGV4Y2Vw
dGlvbiBpbiB0aGUgYmFzZWxpbmUgSklUIChiZWNhdXNlCisgICAgLy8gd2UgdXBkYXRlZCB0aGUg
ZXhjZXB0aW9uIGhhbmRsZXJzIHRvIHBvaW50IGhlcmUpLiBCZWNhdXNlIHRoZSBMTEludCB1c2Vz
IGEgZGlmZmVyZW50IHZhbHVlCisgICAgLy8gaW5zaWRlIHNfY29uc3RhbnRzR1BSLCB0aGUgY2Fs
bGVlIHNhdmVzIHdlIHJlc3RvcmUgYWJvdmUgbWF5IG5vdCBjb250YWluIHRoZSBjb3JyZWN0IHJl
Z2lzdGVyLgorICAgIC8vIFNvIHdlIHJlcGxlbmlzaCBpdCBoZXJlLgorICAgIHsKKyAgICAgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgp
KSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklU
RGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKKyAgICB9
CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFu
ZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxl
RXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTk1
NCw3ICs5NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAg
ICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIs
IGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1
OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jayk7CiAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIg
PSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmls
aW5nKCkpCiAgICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRy
eU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC05
OTYsOCArMTAwNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAK
ICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sg
dGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxl
JiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxl
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9wcm9maWxlZENvZGVCbG9jay0+dW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFw
cGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zm
c2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNU
SVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDIzLDEzICsxMDM0LDEzIEBAIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2Ny
dXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJs
ZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50Lgot
ICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV9wcm9maWxlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJ
bmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJh
Y3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwog
CiAgICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4LCB1bmxp
bmtlZFRhYmxlLm1fbWluKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJX
aXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWlu
KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKQEAgLTEwNDEs
MTMgKzEwNTIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgog
ICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAog
ICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0
aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5
dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAg
bGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKICAgICBlbWl0TG9h
ZChzY3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
d2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJs
ZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKQEAg
LTEwNjgsNyArMTA3OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0
aW8KICAgICAvLyBFdmVuIHRob3VnaCBKSVQgY29kZSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0
aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRl
cnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZl
dGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBmb3IgKGludCBpID0gQ29kZUJs
b2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkg
PCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCisgICAgZm9yIChpbnQgaSA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBpIDwg
bV9wcm9maWxlZENvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCiAgICAgICAgIGVtaXRTdG9yZSh2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwganNVbmRlZmluZWQoKSk7CiAKICAgICBKSVRTbG93
UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRo
X2VudGVyKTsKQEAgLTEwODcsNyArMTA5OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29w
ZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxs
PiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0
ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKQEAgLTExMjIsNyArMTEzMyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFN0cnVjdHVy
ZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwog
ICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIgPSBieXRlY29kZS5tX3NyY0RzdDsKIApA
QCAtMTE0NSw3ICsxMTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IElu
c3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlw
ZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAg
LTEyMzksNyArMTI1MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90
YWkKICAgICBlbWl0TG9hZFRhZyhieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDEpOwogICAgIEpT
VmFsdWVSZWdzIHRoaXNSZWdzKHJlZ1QxLCByZWdUMik7CiAgICAgZW1pdExvYWRQYXlsb2FkKGJ5
dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChz
aGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hh
ZG93UGFja2V0UmVnLCB0aGlzUmVncywgcmVnVDMsIG1fcHJvZmlsZWRDb2RlQmxvY2ssIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODMw
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NCwxMSArNTQsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IElu
c3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAog
ICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigp
KQotICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KSksIGFkZHJlc3NGb3IoZHN0KSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgaWYgKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soc3JjKSkgewor
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0
YW50KHNyYyk7CiAgICAgICAgICAgICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9h
ZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdU
MCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTg3LDM3ICs5MCwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1
Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0
YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxv
Y2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5v
blZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXpl
LCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklE
IHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7
CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1
Y3R1cmVSZWcgPSByZWdUMzsKIAotICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOwotICAgIGVsc2UgewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0g
ICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFs
bG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJm
bHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAg
IG11dGF0b3JGZW5jZSgqbV92bSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0g
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9m
ZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
OjpvZmZzZXRPZkFsbG9jYXRvcigpLCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0
dXJlKCksIHN0cnVjdHVyZVJlZyk7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0
byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcs
IHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxv
YWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0
KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0
UmVnLCBzY3JhdGNoUmVnKTsKKyAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2VzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJ
RCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1
Y3R1cmVSZWcpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAK
QEAgLTEzMSw3ICsxMzIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3Rh
bmNlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7
CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFu
Y2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBi
cmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNHbG9iYWxPYmplY3QsIG1fZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24p
KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CiAK
QEAgLTE1NCwzMCArMTU2LDM4IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3Qg
SW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8g
TG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5
KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ug
d2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBm
b3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnByb3RvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm90bywgcHJvdG9HUFIpOwogICAgIAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJl
IGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBn
ZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIHByb3RvKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIs
IHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3Rv
KTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFs
dWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1Q1LAotICAgICAgICByZWdU
MywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFk
ZFNsb3dDYXNlKCk7CisgICAgICAgIHJlc3VsdEdQUiwKKyAgICAgICAgdmFsdWVHUFIsCisgICAg
ICAgIHByb3RvR1BSLAorICAgICAgICBzdHViSW5mb0dQUiwKKyAgICAgICAgQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMSwgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpz
Y3JhdGNoMik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpJbnN0YW5jZU9mOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5zdGFuY2VP
ZnMuYXBwZW5kKGdlbik7Ci0gICAgCisKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKQEAgLTE5MiwxNCArMjAyLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5j
ZW9mKGNvbnN0IEkKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKEdQUkluZm86
Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMiwgcmVnVDEpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdp
c3RlcnM6OnN0dWJJbmZvID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlID09IGFyZ3VtZW50R1BSMik7CisgICAgc3Rh
dGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvID09IGFyZ3VtZW50
R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+
KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0
b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMjQwLDcgKzI0OSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwg
cmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwog
ICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwogCkBAIC0zODMsOSAr
MzkyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogfQogCiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9y
KFZNJikKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAg
aml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgaml0LmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKQEAgLTQxMSw3ICs0MjAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19w
cmltaXRpdmUoY29uc3QgSW5zCiAKICAgICBpZiAoZHN0ICE9IHNyYykKICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3Bl
cnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM0LDkg
KzQ0MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiB2b2lk
IEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5j
dGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rp
b24sIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25hbWUsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NjUsOCArNDc0
LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGkKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJl
Z1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFu
Y2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwg
ZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
Z2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFs
dWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7
CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzRmFs
c2V5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTQ4MCw3ICs0OTEsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMg
YXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUg
ZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBm
dW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3Qg
bWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVn
VDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNTE5LDcgKzUz
MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICAvLyBG
aXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
Yml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFy
Z2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgp
OwogCkBAIC01NDMsNyArNTU0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0
IEluc3RydQogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBhZGRKdW1wKGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKICAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0
YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCkBAIC01ODIsMTUg
KzU5MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5l
cVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBK
U1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3Bl
Y2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOwotICAgIHN0b3Jl
OChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7CisgICAgbG9hZENvZGVC
bG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QxKTsKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSk7Cisg
ICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVjb2RlLCBPcEpuZXFQdHI6
Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFy
Z2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwogfQpAQCAtNjI1LDggKzYzNCwxMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHko
dm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1
ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc1RydXRoeUdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDAsNyArNjUxLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25z
IGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJl
bG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAg
Ly8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTY5NSw3ICs3MDYsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMSwgcmVnVDApOwogICAgIGp1
bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CkBAIC03MTEsNyArNzIzLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9w
X3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhyb3duVmFsdWVHUFIg
PSBhcmd1bWVudEdQUjE7CkBAIC03MjAsNyArNzMyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogCiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RF
UlMgPiAwCiAgICAgaml0LmxvYWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIGFyZ3VtZW50R1BSMCk7
Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1w
bChhcmd1bWVudEdQUjApOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcihhcmd1bWVudEdQUjApOwogI2VuZGlmCiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKQEAgLTkwOCw3ICs5MjAsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0K
IApAQCAtOTE4LDcgKzkzMSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNv
bnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5z
dHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCBy
ZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTMxLDcgKzk0NSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE51bWJlcihyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk1MSw3ICs5NjUsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RyCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7
CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk3OCw3ICs5OTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
b19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAg
IGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0VlJlZyk7CiB9CkBAIC05OTMsNyArMTAwNywxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRj
aChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJh
bWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRj
aE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gV2hlbiB0
aGUgTExJbnQgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSd2
ZSBhbHJlYWR5IHRpZXJlZCB1cAorICAgIC8vIHRoZSBzYW1lIENvZGVCbG9jayB0byBiYXNlbGlu
ZSwgYW5kIHdlJ2xsIGNhdGNoIHRoZSBleGNlcHRpb24gaW4gdGhlIGJhc2VsaW5lIEpJVCAoYmVj
YXVzZQorICAgIC8vIHdlIHVwZGF0ZWQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVycyB0byBwb2ludCBo
ZXJlKS4gQmVjYXVzZSB0aGUgTExJbnQgdXNlcyBhIGRpZmZlcmVudCB2YWx1ZQorICAgIC8vIGlu
c2lkZSBzX2NvbnN0YW50c0dQUiwgdGhlIGNhbGxlZSBzYXZlcyB3ZSByZXN0b3JlIGFib3ZlIG1h
eSBub3QgY29udGFpbiB0aGUgY29ycmVjdCByZWdpc3Rlci4KKyAgICAvLyBTbyB3ZSByZXBsZW5p
c2ggaXQgaGVyZS4KKyAgICB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
Q29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29uc3RhbnRQb29s
KCkpLCBzX2NvbnN0YW50c0dQUik7CisgICAgfQogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAm
dm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25a
ZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMDExLDIzICsxMDM2LDExIEBAIHZvaWQgSklUOjpl
bWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0eXBlIHByb29m
cywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKLSAgICBpZiAo
YnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxPcGVyYXRpb25O
b0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0
ZWNvZGVJbmRleC5hc0JpdHMoKSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUs
ICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwg
JnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBza2lwT1NSRW50cnkg
PSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxl
clB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYgKGJ1ZmZlciAm
JiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAo
VmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0gICAgICAgICAgICBK
U1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSwgcmVncyk7Ci0gICAg
ICAgIH0pOwotICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIApAQCAtMTA1Myw4
ICsxMDY2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAg
IFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAg
IC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlz
IHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5z
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5k
KFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQs
IFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFi
bGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwODEsMTMgKzEwOTQsMTQgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGlu
ZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZv
ciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAg
Y29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4
LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVy
KSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCwgdW5saW5r
ZWRUYWJsZS5tX21pbik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFy
Z3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOwog
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIApAQCAtMTA5
OSwyMCArMTExMywyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IElu
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwog
CiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNr
IHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9j
b2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBV
bmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmlu
Z0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJ
bmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1f
Ynl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAg
ICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRj
aFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRh
YmxlSW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERlYnVnPigpOwotICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0Fk
ZHJlc3MoKSwgcmVnVDApOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2Vy
UmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdI
b29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwpAQCAtMTEzMyw3
ICsxMTQ5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAg
ICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJl
Z1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTQ4
LDcgKzExNjQsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAK
ICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE2Niw3ICsxMTgx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1Qy
LCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTg4LDEy
ICsxMjAzLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAg
ICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIg
Y29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9p
ZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGlu
Y3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51
bVZhcnMoKTsKKyAgICBzaXplX3QgY291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1WYXJz
KCk7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGZvciAoc2l6ZV90IGogPSBD
b2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMo
KTsgaiA8IGNvdW50OyArK2opCiAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaikpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7Cisg
ICAgCisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QwKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwKTsKIAogICAgIGVtaXRFbnRlck9wdGlt
aXphdGlvbkNoZWNrKCk7CiAjZWxzZQpAQCAtMTIxMiw3ICsxMjI5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2hh
bmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6
ZWJwKTsKQEAgLTEzMTAsMjMgKzEzMjcsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3Bl
KGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJ
RCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMSk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVn
VDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVn
VDIpOworICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRh
OjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwotICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxs
PiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0
ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVn
VDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKQEAgLTEzNDIsNyArMTM1NSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkUHRy
KEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6
b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgYWxsb2NhdG9y
UmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6
Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVE
YXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKIAotICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNh
Y2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcENy
ZWF0ZVRoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZENhbGxlZSgpLCBjYWNoZWRGdW5jdGlv
blJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFs
LCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNh
bGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgY2Fs
bGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMu
bGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM4NSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9l
cShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVy
blZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qs
IHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIsNyArMTM5Niw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIs
IHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAg
ICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BS
IH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZh
bHVlR1BSKTsKQEAgLTEzOTQsNyArMTQwOSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEo
Y29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzE0MjAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0MzUsMTEgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1
Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0lu
c3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5z
dGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VP
ZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0
b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlciho
YXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAg
ICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQ
UiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
fQpAQCAtMTQzMCw3ICsxNDQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uKQogewotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZy
b21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVF
bGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fdW5saW5r
ZWRDb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkp
KSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNv
dW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkUHRyKHB0ciwgcmVnVDApOwogICAgICAg
ICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaFB0cihCZWxvdywgcmVnVDAsIFRydXN0ZWRJ
bW1QdHIoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAg
LTE0NDAsNyArMTQ1OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnUKICNlbHNlCiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKLSAgICAgICAgbW92
ZVZhbHVlKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVzdWx0UmVncyk7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3QocmVzdWx0UmVncy5ncHIoKSk7CiAgICAgICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAg
ICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTE0NTMsOCArMTQ3MSw5IEBAIHZvaWQg
SklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKIAogICAgIC8vIEVtaXQgdGhlIEpJ
VCBvcHRpbWl6YXRpb24gY2hlY2s6IAogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7CisgICAg
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7
CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZlT3JaZXJvLCBUcnVzdGVk
SW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCi0gICAg
ICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVD
b3VudGVyKCkpKSk7CisgICAgICAgICAgICBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNl
dE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9CiB9CiAKQEAgLTE1MDksNyArMTUyOCw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFyZ3VtZW50R1BSMCk7
CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVu
dEdQUjM7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CkBAIC0xNTIyLDcgKzE1NDIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tf
dHJhcHMoY29uc3QgCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVy
YXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAt
MTU2NCwzNCArMTU4NCwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IElu
c3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdl
eHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4
cCkpKTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRHUFIwOworICAgIGxvYWRHbG9i
YWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4
cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29u
c3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9u
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSnVtcCBsYXp5
SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1l
bnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIx
KTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9j
ay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0
YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25E
ZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUu
bV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQ
UjIpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9w
Y29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9m
dW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9u
LCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMp
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7
CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2Vu
ZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAtMTYyMSwyMyAr
MTY0MywyNCBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vs
c2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVt
aXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCiAK
LSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9u
RXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwciwgYml0d2lz
ZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25E
ZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhw
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBk
c3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhw
KQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwg
JnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dl
bmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5
bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjY0
LDI5ICsxNjg3LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19nZW5lcmF0b3JfZnUK
IHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTmV3QXJyYXk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBp
bnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVl
c1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBy
ZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAg
Jm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMik7CisgICAgbWF0ZXJpYWxpemVQb2lu
dGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0YTo6b2Zmc2V0T2ZB
cnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBzaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJ
bmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0
YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFs
bG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzaXplSW5kZXgsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFu
ZFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7
CiAjZWxzZQorICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BO
ZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxl
KCksIHJlZ1QyKTsKICAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRh
ZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJlZ1QyLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQogCkBAIC0xNjk0LDggKzE3MTgsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKKyAgICBtX2lzU2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9u
KiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdp
c3RlcjsKIApAQCAtMTc3NywyMCArMTgwMywyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hh
ZG93X2NoaWNrZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYm
IG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0
cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9n
U2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1Qw
OwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBh
IG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsK
LSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2Ny
YXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMVJl
ZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4K
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVuc3VyZVNoYWRv
d0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRj
aDJSZWcpOworICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhp
c1ZhbHVlLCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0
UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNo
YWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIG1faXNTaGFyZWFibGUgPSBmYWxzZTsKKwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZUNvbnRy
b2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24g
PSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsKQEAgLTE4NjAsNyAr
MTg5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBt
b3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdz
KTsKIH0KIApAQCAtMTg4Niw3ICsxOTE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3Rv
dHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXls
b2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CiAgICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQXJy
YXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRo
c0lubGluZXMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJERkdPU1JFbnRy
eS5oIgpAQCAtMjg1NSw3ICsyODU2LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkp
OwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAot
ICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
ICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRhYmxlLm1fY3RpRGVm
YXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwogCkBAIC0yODgwLDcgKzI4ODEsNyBAQCBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxs
RnJhbWUtPmNvZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0
IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0
OwogICAgIGlmIChrZXkuaXNJbnQzMigpKQpAQCAtMjkwMyw3ICsyOTA0LDcgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0
cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gY29kZUJsb2NrLT5iYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
IAogICAgIGlmIChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9
IGFzU3RyaW5nKGtleSktPnZhbHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpAQCAtMjkxOSw3ICsy
OTIwLDYgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCi0jaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2
ZVNjb3BlRm9yQmFzZWxpbmUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CkBAIC0yOTcxLDcgKzI5NzEsNiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uUmVzb2x2CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc29sdmVk
U2NvcGUpOwogfQotI2VuZGlmCiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25H
ZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5
MCw3IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHIKIEpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwg
Y2hhciosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxl
SW5kZXgsIGludDMyX3QgbWluKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgY2hhciosIChWTSosIEVuY29kZWRKU1ZhbHVl
IGtleSwgc2l6ZV90IHRhYmxlSW5kZXgsIGludDMyX3QgbWluKSk7CiBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgY2hhcios
IChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgp
KTsKLSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUsIEVuY29kZWRKU1ZhbHVlLCAoSlNH
bG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwotI2VuZGlmCiBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldEZyb21TY29wZSwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBDKSk7
CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFRvU2NvcGUsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBDKSk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODcsNyArODcsMTIgQEAgYXV0byBKSVRQbGFuOjp0aWVyKCkgY29uc3QgLT4gVGllcgogCiBKSVRD
b21waWxhdGlvbktleSBKSVRQbGFuOjprZXkoKQogewotICAgIHJldHVybiBKSVRDb21waWxhdGlv
bktleShtX2NvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLCBtX21vZGUpOworICAgIEpT
Q2VsbCogY29kZUJsb2NrOworICAgIGlmIChtX21vZGUgPT0gSklUQ29tcGlsYXRpb25Nb2RlOjpC
YXNlbGluZSkKKyAgICAgICAgY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPnVubGlua2VkQ29kZUJs
b2NrKCk7CisgICAgZWxzZQorICAgICAgICBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+YmFzZWxp
bmVBbHRlcm5hdGl2ZSgpOworICAgIHJldHVybiBKSVRDb21waWxhdGlvbktleShjb2RlQmxvY2ss
IG1fbW9kZSk7CiB9CiAKIGJvb2wgSklUUGxhbjo6aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdAogCiAgICAgZW1p
dExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCBy
ZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9w
ZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJCeUlkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVn
VDEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0
aW9ucywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03Miw3ICs3Miw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKIAogICAgIGVtaXRMb2FkUGF5
bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDMpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgcmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlJZCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg3LDcgKzg3LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGVtaXRMb2FkUGF5bG9h
ZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwogICAg
IGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1Q0KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlclNldHRlciwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwg
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlcywgcmVn
VDMsIHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwg
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZXMsIHJlZ1QzLCBy
ZWdUNCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRMb2FkUGF5bG9hZChi
YXNlLCByZWdUMik7CiAgICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QxLCByZWdUMCk7CiAgICAg
ZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyQnlWYWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJpYnV0ZXMs
IHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdExvYWRQYXlsb2Fk
KGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEsIHJlZ1QwKTsKICAg
ICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeVZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRl
cywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KTsKQEAgLTEzMSw4ICsxMzEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3Qg
SW5zdHJ1CiAgICAgZW1pdExvYWQoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBh
eWxvYWRHUFIoKSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJhc2VS
ZWdzLnRhZ0dQUigpKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCisgICAg
ICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENv
ZGVCbG9jaywgKmlkZW50KSwKICAgICAgICAgYmFzZVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRH
UFJSZWcsIHJlZ1Q0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eVJlZ3MudGFnR1BSKCkpOwogCiAgICAgSklURGVs
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBiYXNlUmVncywgcHJv
cGVydHlSZWdzLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7CiAKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC0yMDIsNyArMjAyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiAgICAgZW1pdExvYWQyKGJhc2UsIGJhc2VS
ZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCksIHByb3BlcnR5LCBwcm9wZXJ0eVJl
Z3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5wYXlsb2FkR1BSKCkpOwogCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVl
UmVncyhiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKSwgVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0
cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBK
U1ZhbHVlUmVncyhiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigp
KSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKICAgICBib3hCb29sZWFu
KHJlZ1QwLCByZXN1bHRSZWdzKTsKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKQEAg
LTIyNyw3ICsyMjcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IElu
CiAKICAgICBlbWl0TG9hZChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9h
ZEdQUigpKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRl
QnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVk
SW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGJhc2VSZWdzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRy
dXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCiAgICAgYm94Qm9vbGVhbihyZWdU
MCwgcmVzdWx0UmVncyk7CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2RlbF9ieV9pZChjb25zdCBJbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFs
KGNvbnN0IEluc3RyCiAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MSk7CiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmls
ZSwgcmVnVDQpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlv
bkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAgICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDQpOwpAQCAtMjU3
LDcgKzI1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAg
ICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIG1fcHJv
ZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0
QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAg
ICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMiksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOwogICAgICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNJbnQzMiA9IHRydWU7CkBAIC0yNjUsNyArMjY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0U3RvcmUoZHN0
LCByZWdUMSwgcmVnVDApOwogICAgIH0KIH0KQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSkgewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5VmFsPigpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spOwogICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgICAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwor
ICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKICAgICB9CiB9CkBAIC0zMDUsMTMgKzMwNSwxMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAog
ICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGJhc2VHUFIs
IHByb3BlcnR5R1BSLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
ICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2sp
LCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCBy
ZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAKICAgICBhdXRvIGJhc2VHUFIgPSBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIGF1dG8gcHJvcGVydHlHUFIgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgSW52YWxpZEdQUlJlZywgSW52YWxp
ZEdQUlJlZyk7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgSlNWYWx1ZVJlZ3MgdmFs
dWVSZWdzKHJlZ1Q1LCByZWdUNCk7CiAKICAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNE
ZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBv
cGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHZhbHVlUmVncywgZ2VuLnN0dWJJ
bmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBnZW4uc3R1Yklu
Zm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtMzk1LDcgKzM5NSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5k
QWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIGJhc2VSZWdzLCBi
cmFuZFJlZ3MsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNDE4LDcgKzQxOCw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBKSVRQcml2
YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9w
cml2YXRlQnJhbmRBY2Nlc3NJbmRleF07CiAgICAgKyttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4
OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdz
LCBicmFuZFJlZ3MpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0
UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7CiAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIApAQCAt
NDM1LDcgKzQzNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY28K
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkp
OwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2
YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAogICAgICAgICBiYXNlUmVncywgYnJhbmRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKQEAgLTQ1Miw3ICs0NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hl
Y2tfcHJpdmF0ZV9icmFuCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4g
PSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXhdOwogICAg
ICsrbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlUmVncywgYnJhbmRSZWdzKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC00NjUsNyArNDY1LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBA
IC00NzgsNyArNDc4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0
cgogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDYsIHJlZ1Q3
KTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhy
ZWdUNSwgcmVnVDQpLCByZWdUNiwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC01
MDQsNyArNTA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQog
ICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBKSVQ6OmVjbWFNb2RlKGJ5dGVj
b2RlKTsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jayk7CiAgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAgICAgfTsKIApAQCAtNTI0LDcgKzUyNCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDIsIHJlZ1QxLCBwcm9w
ZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsK
IAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0
KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlKTsK
IAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBA
IC01MzQsNyArNTM0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJ
bgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJ
ZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCBy
ZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7CkBAIC01NDIsMTMgKzU0MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lk
KGNvbnN0IEluCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vz
c1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpw
YXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6
OlRyeUdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7
CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRT
dG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsK
IH0KIApAQCAtNTU4LDEzICs1NTgsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRf
YnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBn
ZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNTc1LDcgKzU3NSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNTgzLDEzICs1ODMsMTMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDAp
LCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsK
KyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2Zp
bGVkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBy
ZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKICAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3Mu
dGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtNTk5LDEzICs1OTks
MTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNjE0
LDEwICs2MTQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRD
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVt
aXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTYzMCwxMyArNjMwLDEzIEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxp
ZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBl
bWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIo
KSk7CiB9CiAKQEAgLTY0NiwxMyArNjQ2LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWQoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dl
dEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
ICAgICAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVn
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAgICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKIH0KQEAgLTY2Myw3ICs2NjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRM
b2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQodGhpc1ZSZWcsIHJlZ1Q0LCBy
ZWdUMyk7CkBAIC02NzMsMTMgKzY3MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDQsIHJlZ1QzKSwgSW52YWxpZEdQUlJlZyk7CisgICAgICAgIG1fcHJvZmlsZWRDb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwg
cmVzdWx0UmVncywgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDQsIHJlZ1QzKSwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRC
eUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3Vs
dFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtNjg5LDEzICs2ODksMTMgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhp
c0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5k
ZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZS
ZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogfQpAQCAtNzEwLDE1ICs3MTAsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAgICAgCiAgICAg
ZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgdmFsdWUsIHJlZ1QzLCByZWdUMik7CiAgICAg
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLAogICAg
ICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpLCBJbnZhbGlkR1BSUmVnLAogICAgICAgICByZWdUMSwgYnl0ZWNvZGUubV9mbGFncy5l
Y21hTW9kZSgpLCBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Qp
OwogICAgIApAQCAtNzM4LDcgKzczOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlf
aWQoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAKQEAgLTc0OCw3ICs3NDgsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgSklUUHV0QnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAotICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigp
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgbV9w
cm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03NTgsMTQgKzc1OCwxNCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUSW5CeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOworICAgICAgICBtX3Byb2ZpbGVk
Q29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVu
dCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1faW5CeUlkcy5hcHBl
bmQoZ2VuKTsKQEAgLTc3OSwxMyArNzc5LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9i
eV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJ
ZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZv
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwogfQpAQCAtNzk2LDcgKzc5Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5
X3ZhbChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIGVtaXRM
b2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwpAQCAtODA0
LDcgKzgwNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnUKICAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1Q0KTsK
IAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5
bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTgxOSwxNCAr
ODE5LDE0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFs
R2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMikpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIH0KQEAgLTgzNyw3ICs4MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmly
dHVhbFJlZ2lzdGVyCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1Qx
KTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZhbGlkR1BSUmVn
KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKQEAgLTg1Myw3ICs4NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdEhhc1By
aXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9p
bkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVy
YXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25I
YXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CiB9CkBAIC04OTAsNyArODkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rp
b25DaGVjayhib29sIG5lZQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAg
ICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50
KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVz
c09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCkBA
IC05MDYsNyArOTA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVn
aQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2Nv
cGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBl
OwpAQCAtOTE2LDExICs5MTYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShj
b25zdCBJbgogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6
Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOworICAg
ICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVG
b3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAg
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdU
MSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVB
ZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNh
bEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7
CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEp
OwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7
CiAgICAgICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwpAQCAtOTMxLDcgKzkz
MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAg
Y2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiAKICAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwor
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7CkBA
IC0xMDM5LDcgKzEwMzksNyBAQCB2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJl
Z2lzCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1f
c2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dElu
Zm8ucmVzb2x2ZVR5cGUoKTsKQEAgLTExNDYsNyArMTE0Niw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZh
bHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBlbWl0U3RvcmUo
ZHN0LCByZWdUMSwgcmVnVDApOwogfQogCkBAIC0xMTU2LDcgKzExNTYsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3Qs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdhdGNocG9pbnRTZXQqIHNldCkKQEAgLTExOTAsNyArMTE5MCw3IEBAIHZvaWQgSklUOjplbWl0
UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8g
PSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKQEAgLTEyMDIsNyArMTIwMiw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgc3dpdGNoIChyZXNv
bHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAg
ICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBlbWl0TG9h
ZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgICAgIApAQCAtMTIxNyw3ICsxMjE3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICBjYXNl
IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNv
bnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKKyAgICAg
ICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9y
Q29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7CkBAIC0xMzE4LDcgKzEzMTgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0CiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlf
cHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAg
IH0gZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xMzMzLDcgKzEzMzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVu
dHMoY29uCiAgICAgZW1pdExvYWRQYXlsb2FkKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBUYWdPZmZzZXQpLCByZXN1dGxSZWdz
LnRhZ0dQUigpKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpz
dG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsg
UGF5bG9hZE9mZnNldCksIHJlc3V0bFJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdXRsUmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKSwgcmVzdXRsUmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVzdXRsUmVncy50
YWdHUFIoKSwgcmVzdXRsUmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC0xMzU1LDcgKzEzNTUs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0CiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAg
ICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MzA1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw5MiArNDksMTEyIEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJ
bmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBpZiAo
bWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNN
YXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRC
eVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CisgICAgICAgIGF1dG8gbm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90Q2Vs
bC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFz
ZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnJlc3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdz
LCByZWdUMik7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKICAgICAgICAgaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5w
cm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
ICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgICAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAg
Z2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwg
c3R1YkluZm9HUFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhl
cmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKworICAgICAgICBhZGRT
bG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3Vs
dFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgfQotCiB9
CiAKKyNpZiAhT1MoV0lORE9XUykKK3N0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZpYWJsZUFyZ3Vt
ZW50R1BSNCA9IEdQUkluZm86OmFyZ3VtZW50R1BSNDsKK3N0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHZpYWJsZUFyZ3VtZW50R1BSNSA9IEdQUkluZm86OmFyZ3VtZW50R1BSNTsKKyNlbHNlCitzdGF0
aWMgY29uc3RleHByIEdQUlJlZyB2aWFibGVBcmd1bWVudEdQUjQgPSBHUFJJbmZvOjpub25BcmdH
UFIwOworc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmlhYmxlQXJndW1lbnRHUFI1ID0gR1BSSW5m
bzo6bm9uQXJnR1BSMTsKKyNlbmRpZgorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgog
dm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRl
Y29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBpZiAo
aGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKKyAgICBpZiAoIWhhc0FueVNsb3dDYXNlcyhpdGVyKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
Ci0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNb
bV9nZXRCeVZhbEluZGV4KytdOworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CiAKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5LCB2aWFibGVBcmd1bWVudEdQUjQpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVBy
b2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVj
bHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3Vt
ZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMs
IHZpYWJsZUFyZ3VtZW50R1BSNCk7CiAjZWxzZQotICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwotICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKLSAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1f
Ynl0ZWNvZGVJbmRleCk7CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0
ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKIAotICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0OwotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFI0
OworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdU
MTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQ
UjEpOwotCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BS
KTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKTsKLSAgICAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgorICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gcmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAh
aXNBUk02NCgpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BS
MSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlID09
IHJlZ1QwKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5ID09IHJlZ1QxKTsKKworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIHByb2ZpbGVHUFIpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ5LDcgKzE2OSw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE2MCw4ICsxODAsOCBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgY29uc3RleHBy
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjU7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1
bWVudEdQUjEpOwogCkBAIC0xODcsMzQgKzIwNyw0MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsK
KwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpH
ZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBy
ZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNs
b3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVn
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2
YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBBU1NFUlQoaGFzQW55U2xvd0Nh
c2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yMjMsOSArMjQ5LDExIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJh
c2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVj
bHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVu
dEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMjM1LDI2ICsyNjMs
MjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJl
YWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
cHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQpAQCAtMjY0LDcgKzI4Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91
dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdp
bmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTMwMCwyMSArMzIyLDI4IEBA
IHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5k
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6c3R1YkluZm87CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsK
LQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAg
IEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVC
cmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFw
cGVuZChnZW4pOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUg
ZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpA
QCAtMzI0LDE3ICszNTMsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQo
Y29ucwogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKKyAgICBV
TlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKKwogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJp
dmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleCsrXTsKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOwor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJy
YW5kPigpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BS
Mik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVu
dEdQUjMpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJy
YW5kT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
QEAgLTM0NCwyNCArMzc4LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9i
cmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRl
QnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9
PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGlt
aXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdl
dFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFBy
aXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAsMzMgKzM5OCw0NyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0g
Ynl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJlZ1QxKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRS
ZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJh
bmQsIGJyYW5kR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwog
CiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRl
QnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpDaGVja1By
aXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vz
c2VzLmFwcGVuZChnZW4pOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0
ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrUHJpdmF0ZUJyYW5k
PigpOworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZSk7CisKICAgICBKSVRQcml2YXRlQnJhbmRB
Y2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJh
bmRBY2Nlc3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGlt
aXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShv
cGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC00MDYsMjQgKzQ0OCwxOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRp
Y19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRp
b25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJh
aXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRU
eXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGlt
aXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzUsMzAgKzQ3MSw0MyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0g
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHJlZ1QzKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1
YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJlZ1Q0KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9maWxlR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSwgcHJvZmlsZUdQUik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiks
IHJlZ1QzLCByZWdUNCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBwcm9maWxlR1BSLCBzdHViSW5mb0dQUik7
CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICBnZW4u
c3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOworICAgIHN0dWJJbmZvLT5wdXRLaW5k
ID0gc3RkOjppc19zYW1lX3Y8T3AsIE9wUHV0QnlWYWxEaXJlY3Q+ID8gUHV0S2luZDo6RGlyZWN0
IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2Rl
KGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBz
byB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcg
U3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTQ3
NCwxNSArNTIzLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
OwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmljdCgpOwotICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBi
eXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgICAgICBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFNb2RlOwotICAgICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAg
cHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCiAgICAgaWYgKGlz
RGlyZWN0KQpAQCAtNDk4LDcgKzU0NCwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgLy8gVGhl
eSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSwgcmVnVDIsIGdlbi5zdHViSW5mbygpLCByZWdUMyk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1
bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGFyZ3VtZW50R1BS
Myk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCB2aWFibGVBcmd1bWVudEdQUjQpOworICAgIGlmIChpc0RpcmVjdCkKKyAgICAgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZh
bERpcmVjdD4oKSwgT3BQdXRCeVZhbERpcmVjdDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9m
aWxlKCksIHZpYWJsZUFyZ3VtZW50R1BSNSk7CisgICAgZWxzZQorICAgICAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigp
LCBPcFB1dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgdmlhYmxlQXJn
dW1lbnRHUFI1KTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFs
U3RyaWN0T3B0aW1pemUpPihBZGRyZXNzKHZpYWJsZUFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCB2aWFibGVBcmd1bWVudEdQUjQsIHZpYWJs
ZUFyZ3VtZW50R1BSNSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC01MTIs
NyArNTY3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKICAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIENhbGwgY2FsbDsKICAgICBh
dXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKTsK
QEAgLTUyMyw3ICs1NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25z
dCBJCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC01MzMsMTggKzU4OCwy
NCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQg
bWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFp
bGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlu
bGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1h
eSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q1OwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSByZWdUNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBy
ZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpwcm9maWxlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSByZWdUNTsKKyAgICB7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWQoQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHks
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpwcm9maWxlKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q0KSk7Cisg
ICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlucyhyZWdUNSkpOworICAgIH0KKwogCiAgICAgaml0
LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKQEAgLTU3MCwyMCArNjMxLDMx
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
IAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwgSW52YWxpZEdQUlJlZywg
cmVnVDQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1
dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpT
VmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0UHJpdmF0
ZU5hbWU7CisgICAgc3R1YkluZm8tPnByaXZhdGVGaWVsZFB1dEtpbmQgPSBieXRlY29kZS5tX3B1
dEtpbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7
CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJp
ZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC01OTQsOCArNjY2LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3By
aXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgUHJpdmF0ZUZp
ZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIFVOVVNFRF9QQVJB
TShjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9
IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJbmRleCsrXTsKIApAQCAtNjAzLDEzICs2NzQsMTUgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNE
ZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBv
cGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBh
dGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGdlbi5zdHViSW5mbygpLCBUcnVzdGVk
SW1tUHRyKG51bGxwdHIpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dFByaXZhdGVOYW1lPigpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCB2aWFibGVBcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRp
b248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSk+
KEFkZHJlc3ModmlhYmxlQXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBhcmd1bWVudEdQUjMsIHZpYWJsZUFyZ3VtZW50R1BSNCwgVHJ1c3RlZEltbVB0cihudWxscHRy
KSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02MjIsMTggKzY5NSwxMiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2Fs
bCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwot
ICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0MywxNCArNzEwLDE0IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9u
cyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAog
ICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3NDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdl
dHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNjg5LDcgKzc1Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc2OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVy
LCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwg
cmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVn
VDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2VkQ29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRl
LCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzA5LDcgKzc3OSw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90
IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5
VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzkwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Nl
dHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Is
IHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0
cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc5OSwzMyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0g
QmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAg
ICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1Qy
KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsKKyAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQ
YXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91
dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0
IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVy
IGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODQxLDE3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRl
eCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9w
dGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNzgxLDI0ICs4NjUsMTkgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9
IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGJhc2VHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVH
UFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlf
aWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25EZWxldGVCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2Fs
bChvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1Zh
bHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC04MDgsNyArODg3LDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1h
a2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxh
YmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxp
bmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkg
bm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZt
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpA
QCAtODQ1LDIyICs5MjQsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJ
bnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3Bl
cnR5KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3Vs
dEdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0
dWJJbmZvR1BSLCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFs
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJl
c3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVt
aXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJp
ZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJl
IHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5NzMs
MTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRp
b25EZWxldGVCeVZhbE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
ODk5LDI0ICs5OTEsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3Qg
SQogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV92YWxfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZh
bE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
RGVsZXRlQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTkyNiw3ICsxMDEzLDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtOTYxLDIy
ICsxMDQ4LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2VWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1
bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBB
Y2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2LDE0ICsxMDgyLDE3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXpl
LCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk+KEFk
ZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0
aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTAwMywyNiArMTEwMiwyMCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJv
cGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJh
dGlvblRyeUdldEJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBh
cHBlbmRDYWxsKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywg
cmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTEwMzAsMjIgKzExMjMsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
RGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
cmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJ
ZERpcmVjdDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsK
KyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9J
bmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4p
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9
CiAKQEAgLTEwNTQsMTYgKzExNTYsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJh
dGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0
eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFy
Z3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
cmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTEwNzMsODMgKzExNzcsNjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zm
c2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdU
MDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BS
MzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0
KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9H
UFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERp
cmVjdE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lk
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAg
Q2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
R2V0QnlJZERpcmVjdE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJu
VmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZh
bHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZh
bHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRj
aDsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgSnVtcCBub3RBcnJh
eUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRh
Lm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4o
R2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwocmVnVDAsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1v
ZGUuYXJyYXlQcm9maWxlLCByZWdUMSk7CisgICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJ
ZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlKCksIHNjcmF0Y2hHUFIpOworICAgICAgICBKdW1w
IG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIE9wR2V0
QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFk
YXRhQXJyYXlMZW5ndGg6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGJhc2VHUFIsIHNjcmF0Y2hH
UFIpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJl
Z3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93
aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKIAotICAg
IEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwotICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQ
KCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZl
bHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdl
bik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
IH0KIApAQCAtMTE1OCwxNiArMTI0MSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKQEAgLTExNzcsMjYgKzEyNjIsNTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3Vt
ZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwor
fQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZS
ZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0
ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlk
V2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRo
aXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJl
Zyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsK
KworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0
UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBzdHViSW5m
b0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4
aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNs
b3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQpAQCAtMTIwNiw3ICsxMzIzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0MSwxNiArMTM1OCwxOSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRo
VGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0
QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk+KGJ5dGVjb2Rl
LCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTI2MCwyOCArMTM4
MCwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFs
cmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJz
Ojp0aGlzVmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50
R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FS
TTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodGhpc0dQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJv
cGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRC
eUlkV2l0aFRoaXNPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJu
VmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZh
bHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZh
bHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCkBAIC0xMjkxLDcgKzE0MDUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAg
ICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMzI5LDIzICsxNDQzLDM4IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
VlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2Zs
YWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKICAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGgg
dGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRl
ciwKICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBp
bnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKICAgICAv
LyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1l
IGRpc3RhbmNlIGZyb20gdGhpcy4KIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VW
UmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6c2NyYXRjaDsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCBiYXNl
R1BSLCB2YWx1ZVZSZWcsIHZhbHVlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVn
VDMsIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0
Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0ID8gUHV0S2luZDo6RGly
ZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5SWQ7CisgICAgc3R1
YkluZm8tPnB1dEtpbmQgPSBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3RE
aXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29u
c2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlJZHMu
YXBwZW5kKGdlbik7CiAgICAgCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0
aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMTM1OSwxNCArMTQ4OCwx
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAgICAg
CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRl
eCsrXTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlw
ZShvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtMTM3NiwyNSArMTUwOSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRl
Y29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJn
dW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJz
Ojp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3Vt
ZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFp
c0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xvd1BhdGhGdW5jdGlv
bigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVu
Y3Rpb24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xNDA0LDcg
KzE1MzEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRy
ZXNzKCk7CkBAIC0xNDQxLDIwICsxNTY4LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lk
KGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7
CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIp
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6
SW5CeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0x
NDYzLDE0ICsxNjAxLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJ
bnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91
bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAg
ICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwog
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5
SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50
R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTQ4MCwyOCArMTYyMSwyMiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
SW5CeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJv
cGVydHlHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9y
IHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9p
bnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVy
ZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0
aW9uSW5CeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6
dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25JbkJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxs
KG9wZXJhdGlvbkluQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQ
Uik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5f
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEwLDI1
ICsxNjQ1LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnUKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUs
IGJhc2VHUFIsIEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CiAKICAgICBKSVRJ
bkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJ
bkJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4Owor
ICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5m
byk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0lu
ZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7
CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNTM3LDE1ICsxNjgw
LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRv
ciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFy
Z3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5LCB2aWFibGVBcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUo
b3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCB2aWFibGVBcmd1bWVudEdQ
UjQpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTU1Niw1OSArMTcwMiw3
MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9
PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmls
ZUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5
dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9m
aWxlR1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Ig
d2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2lu
dCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJl
bnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRp
b25JbkJ5VmFsT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKT46
OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0
X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
IAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRD
YWxsKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRl
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eU9yQnJhbmQsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZv
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcHJvcGVydHlHUFIpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEluQnlW
YWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBl
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IHR5cGU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0
dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBl
bmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKLXZvaWQg
SklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgQWNjZXNzVHlwZSB0
eXBlKQordm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBl
IHR5cGUpCiB7Ci0gICAgQVNTRVJUKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUg
fHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIFVOVVNFRF9QQVJB
TShiYXNlKTsKKyAgICBVTlVTRURfUEFSQU0ocHJvcGVydHkpOworICAgIEFTU0VSVF9VTlVTRUQo
dHlwZSwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9w
ZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFy
Z3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2
YXRlTmFtZU9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTE2MTgsMjcgKzE3NzUsMjEgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRl
U2xvdyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IHJlZ1QxOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50
R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5T3JCcmFuZEdQ
UiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpLCBkZWNsdHlw
ZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gdHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX25hbWUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NTIsNyArMTgwMyw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKGMKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUu
bV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAgICBlbWl0SGFzUHJpdmF0ZVNs
b3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNvZGUubV9wcm9wZXJ0eSwg
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
cHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTY2NiwyMTUgKzE4MTcsMTI3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9i
cmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhh
c1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQp
OworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNl
LCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rp
b25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0
cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92
YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi12b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNv
bHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwotICAgIHVuc2lnbmVkIGRl
cHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7Ci0KLSAgICBhdXRvIGVtaXRDb2RlID0g
WyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewotICAgICAgICBzd2l0Y2ggKHJlc29sdmVU
eXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRT
Y29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
bG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsK
LSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwot
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25z
dGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1
cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0
aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0
KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlc29s
dmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVt
cExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUs
IHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENv
ZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0K
LSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0KIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJl
c29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNv
bHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBt
X2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdCht
X2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJvZmlsZSBj
ZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdp
bGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5t
X2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50
KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0
ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgICAg
ICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgUkVTT0xWRV9T
Q09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlw
ZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJh
dG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVfU0NP
UEVfR0VORVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0m
IHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFy
Iik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAg
ICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZN
JiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9y
ZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7CisgICAgICAg
IH07CisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0gW10gKFZN
JiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmlj
Iik7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9
IHJlZ1QyOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlw
ZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xv
c3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICBjb2RlID0g
dm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNS
ZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBj
b25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25h
bDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAg
ICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3
aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCisgICAgY29uc3Rl
eHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1QyOyAvLyBpbmNvbWluZworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7IC8vIGluY29taW5nIC0gcGFzcyB0aHJ1IHRv
IHNsb3cgcGF0aC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0
OwogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZU9mZnNldEdQUik7Ci0gICAgUkVMRUFTRV9BU1NF
UlQodGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFn
UmV0dXJuQWRkcmVzcygpOworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSks
IHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBqaXQubG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgp
KSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKIAogICAgIEp1
bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0g
KGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJ
bnZhbGlkR1BSUmVnKSB7CisgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxp
ZEdQUlJlZykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJS
ZWcpIHsKICAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwotICAgICAgICAgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgfQotICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFy
SW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRl
KCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwg
bV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZz
ZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogCiAg
ICAgYXV0byBlbWl0UmVzb2x2ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpIHsKLSAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBsb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2xvY2FsU2Nv
cGVEZXB0aCkpLCByZWdUMSk7Ci0KLSAgICAgICAgTGFiZWwgbG9vcCA9IGxhYmVsKCk7Ci0gICAg
ICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZWdUMCk7Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAg
ICAgICAgICAgIGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzY29wZUdQUiA9PSByZWdUMCk7
CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mTG9jYWxTY29wZURlcHRoKCkpLCByZWdUMSk7CisKKyAgICAgICAgTGFiZWwgbG9vcCA9IGpp
dC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QxKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0
T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJl
Z1QxKTsKKyAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CisgICAgICAgIGRv
bmUubGluaygmaml0KTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKQEAgLTE4ODIsMTIgKzE5NDUsMTEgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewog
ICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRz
IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkuCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9i
YWxPYmplY3RHUFIpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAg
ICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEs
IG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBK
U0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdU
MSkpOwotICAgICAgICAgICAgbW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNHbG9i
YWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEgKzE5NTksMTEgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBK
U1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4
aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBD
b2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFs
T2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAg
ICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0Ojpv
ZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsx
OTcxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAg
ICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZl
ZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMTk4MSw0
NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0K
ICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1Qw
KTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVz
b2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAg
bm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
eworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0g
ZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkp
LCByZWdUMCk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRh
dGE6Om9mZnNldE9mUmVzb2x2ZVR5cGUoKSksIHJlZ1QxKTsKIAotICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5Lmxp
bmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBh
dXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAgICAgICAg
ICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZElt
bTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Cisg
ICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgbm90
Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
dW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9i
YWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOworICAgICAg
ICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1p
dENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1p
dENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0
Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGlu
aygmaml0KTsKICAgICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlBy
b2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1
YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGlu
ayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29s
dmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsK
IH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUp
IFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZl
X3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAg
ICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlw
ZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwK
LSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5
cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9
Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQot
I3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9y
KFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24g
Y2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRo
IGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAt
MjAzNCw3ICsyMDU4LDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVs
KGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfcmVz
b2x2ZV9zY29wZSIpOwogfQotI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiB2
b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
LCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQogewpAQCAtMjA2MiwyNzYgKzIwODUsMTMzIEBA
IHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsg
b3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7CiB9CiAKLSNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRl
Y29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9
IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKKyAg
ICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKLSAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5q
ZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0
aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVj
a2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJl
Z1QwOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgR1BS
UmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsK
LQotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkg
LT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKLSAgICAgICAgICAg
IH0pKTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRlY29kZUluZGV4
KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIEFTU0VSVChtX3VubGlu
a2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudElu
c3RydWN0aW9uKTsKIAotICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQpOwot
ICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBp
c091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVk
SW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBhYm9ydFdpdGhS
ZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAgICAgICAgIGlzT3V0T2ZM
aW5lLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAg
ICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0
LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQs
IFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksIHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJh
bmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRH
ZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8
IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAv
LyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShy
ZWdUMCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJl
c29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICB9CisgICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2
bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0s
IENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOwog
ICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAg
ICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUs
IGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlz
Tm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
Ci0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAg
IGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJv
cGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVz
b2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwot
fQotCi0jZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21T
Y29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGF1
dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZt
KSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwg
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21f
c2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CiAKLSAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwot
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwot
ICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5k
ZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgYXV0byBnZW5lcmljR2V0RnJvbVNjb3Bl
R2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9w
R2V0RnJvbVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9nZXRfZnJv
bV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRh
dGFHUFIgPSByZWdUNzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0g
ICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNl
dEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNl
dCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5
cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAg
c3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAg
IEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAg
IH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0
YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0
YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAg
ICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNl
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJ
U3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJD
YWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUs
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlv
bmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewog
ICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3Jr
IHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgdXNpbmcgTWV0YWRhdGEg
PSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAg
ICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBl
KSk7Ci0KLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7Ci0KLSAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBh
ZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOwogCi0g
ICAgSnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAgIGF1dG8g
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJf
dCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCkgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAgICBtb3Zl
KHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRy
KFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDEpKTsKLSAgICB9OworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0
YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BS
KTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICBhdXRvIGRv
VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsK
ICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9p
bnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRk
cmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9i
amVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0
OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9
OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90IG9w
ZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQot
ICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3Bl
cmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0g
ICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcg
b3BlcmFuZEdQUikgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVn
aXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsK
LSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxl
cygpKSwgcmVnVDApOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgYXV0
byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAg
ICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIsIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV9zdHJ1Y3R1cmUpKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5q
ZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0
aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVj
a2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0KLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBy
ZWdUMDsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAg
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKLQotICAgICAgICAgICAg
aml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAg
ICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAgICAgICAgICAvLyBTdHJ1Y3R1
cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0
dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVz
b2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICAgICAg
aml0LmxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MSkpOworCisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQp
PihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVxdWFsLCBz
Y29wZUdQUiwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5k
KSksIG9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMSk7CisKICAgICAgICAgICAgIGlm
IChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBi
cmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNl
dElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMp
OworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRl
clRoYW5PckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7
CisgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9m
TGluZSk7CisgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluaygmaml0KTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAg
ICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBs
b2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0Lm5lZzMyKHJlZ1QxKTsKKyAgICAg
ICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICAgICAg
aml0LmxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZWdUMCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAg
ICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEds
b2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2lu
dGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZz
ZXRPZk9wZXJhbmQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKHJlZ1QwLCBy
ZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykg
Ly8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hJZkVt
cHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJ
ZkVtcHR5KHJlZ1QwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9zdXJl
VmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIHJlZ1QzKTsKLSAgICAgICAgICAg
IGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CisgICAgICAgICAgICBkb1Zhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNl
dE9mT3BlcmFuZCgpKSwgcmVnVDMpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMg
PT0gc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDMpLCByZWdUMyk7CisgICAgICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCByZWdUMyk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBKU0xleGljYWxFbnZpcm9u
bWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKKwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1w
KCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNl
IE1vZHVsZVZhcjoKQEAgLTIzNDEsODYgKzIyMjEsNjMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZElt
bTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGlu
dG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29k
ZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0
Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotCi0g
ICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9
PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpy
ZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIo
R2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBU
MAorICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZz
ZXRPZkdldFB1dEluZm8oKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LmFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRv
IFQwCiAKLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAg
ICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
UHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90
R2xvYmFsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluaygmaml0KTsK
KworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBqaXQuYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgaXNH
bG9iYWxQcm9wZXJ0eSA9IGppdC5icmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGlzR2xvYmFsUHJv
cGVydHkubGluaygmaml0KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOworICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywg
dHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsoJmppdCk7CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGp1bXAoKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwog
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAogICAg
IHN0YXRpY19hc3NlcnQoVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0gMSk7Ci0gICAg
c3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRh
dGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0
T2ZGaXJzdEJ1Y2tldCgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05h
bWUpOwogfQogCi0jZGVmaW5lIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2
ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9n
ZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBc
Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVz
b2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQo
dm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHJl
c29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsg
XAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VO
RVJBVE9SKQotI3VuZGVmIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhp
cyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJl
Y2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShY
ODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjQyOSw3ICsyMjg2
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogI2VuZGlmCiAK
ICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgY29uc3RleHByIEdQUlJlZyBt
ZXRhZGF0YUdQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSByZWdUNTsKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKQEAgLTI0NDksNyAr
MjMwNiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBD
YWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgSnVtcCBleGNl
cHRpb25DaGVjayA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0pOwogCi0g
ICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIs
IE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0
KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBNZXRhZGF0YTo6b2Zm
c2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwog
ICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpu
dW1iZXJUYWdSZWdpc3Rlcik7CiAKICNpZiBDUFUoWDg2XzY0KQpAQCAtMjQ2OSw4OCArMjMyNiw3
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgcGF0Y2hC
dWZmZXIubGluayhqdW1wVG9IYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX2dldF9mcm9tX3Njb3BlIik7
CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0KLXZvaWQgSklUOjplbWl0
UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1Qw
LCBvcGVyYW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChK
U1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwg
cmVnVDEpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNz
T2ZPcGVyYW5kLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0g
ICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1f
c2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAg
ICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAg
ICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgp
OwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAg
IFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8g
ZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAg
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3Ry
dWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0
cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHks
IHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisg
ICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ug
d2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmpl
Y3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBj
aGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVy
ZSgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBy
ZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1Qx
KSk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QxKSk7CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qy
KTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0g
KCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAg
ICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Cisg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7CiAgICAg
ICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJ
bmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMSwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRT
Y29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNr
KHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJ
bmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpIHsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRWYXJSZWFk
T25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFu
ZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihieXRlY29k
ZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBU
RFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVt
aXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9p
bnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRH
bG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90
KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDEpOwor
ICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIHN0
b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBj
YXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNj
b3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwg
cmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAgICAgICAg
IGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNl
dE9mVmFyaWFibGVzKCkpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIE1vZHVsZVZhcjoKQEAgLTI1NjQsNTggKzI0MTAsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAg
ICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAv
LyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwot
ICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwot
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlm
IHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBi
aW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQ
cm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2Up
OwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2Nr
IHNlZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4g
d2UgY2FuIGNvbXBpbGUgdGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tz
LCBzaW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdy
ZSBhIENsb3N1cmVWYXIsCisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFy
LiBJZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlz
IENsb3N1cmVWYXIKKyAgICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0
IGZpcmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0
IGRvZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAg
ICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29k
ZShDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29s
dmVkQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAg
ICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7CisgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1
dEluZm8oKSwgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6
dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAg
IEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFBy
b3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxz
ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENv
ZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAg
ICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsK
KwogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
ICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwg
ZmFsc2UpOwotICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTggKzI0NjQsMjEg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3Bp
ZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29s
dmVUeXBlKCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7Cisg
ICAgICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBh
bGwgbGlua2VkIENvZGVCbG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBz
ZWUgTW9kdWxlVmFyLgogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5
X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAg
ICB9IGVsc2UgewogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRU
b1Njb3BlLCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVj
dGlvbik7CisgICAgICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0
KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAg
LTI2NTIsNyArMjQ5NSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZf
NjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjcwMSw3ICsyNTQ0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJl
c3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3NTksNyArMjYwMiw2IEBAIHZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9m
aWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwpAQCAtMjc2Nyw3ICsyNjA5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2lu
dGVybmFsX2ZpZWxkKGNvbgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEp
OwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+
OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKQEAgLTI4MjMsNyArMjY2NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm9wZXJ0eV9l
bnVtZXJhdG8KIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVj
b2RlLm1fbW9kZTsKQEAgLTI4MzksMTEgKzI2ODAsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAv
LyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3Bl
Y2lhbCBjYXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRh
ZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93
blN0cnVjdHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jaykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpPd25TdHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVn
VDM7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAgICAgICAgIG9wZXJh
dGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhlbnVtZXJhdG9y
R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpICYgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgIGxvYWQ4RnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVt
ZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBPcEVudW1l
cmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CisKICAg
ICAgICAgbG9hZDMyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSwgaW5kZXhHUFIpOwogICAgICAgICBvcGVy
YXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpKTsKIApAQCAtMjg4MSw3OCArMjcy
OCw4OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9u
ZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGlu
ZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3Jh
dGNoMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9y
R2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVz
cygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1l
cmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoMik7CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIp
OworICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JH
ZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBl
bmNvZGVkIHZhbHVlLgotICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsK
KyAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBz
Y3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBD
aGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVN
aXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAK
ICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bmRleCwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gy
KTsKICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQg
aW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRP
ZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1Qy
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
KTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsK
LQorICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3Jh
dGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIs
IHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1l
c0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwog
ICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91
dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAg
c3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWdu
RXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRy
ZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25F
eHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CiAgICAgY29uc3RleHByIGludHB0cl90
IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsK
LSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIs
IHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIp
OwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNo
LmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRh
dGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZElt
bTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1
Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6
Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVN
b2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVy
bywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRN
b2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRj
aDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7
CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsK
KyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNj
cmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBX
ZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0
IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAog
ICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTYxLDEwICsyODE4LDkgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVyKTsK
IH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVu
Y3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5
dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6
ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9u
VHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0yOTcz
LDcgKzI4MjksOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltCiAg
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2Rl
LCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51
bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgcmVnVDEpOworICAg
IG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1QxLCBieXRlY29k
ZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAog
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwogCkBAIC0z
MDYyLDYgKzI5MjAsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
cgogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIAordm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQoreworICAgIEp1bXAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNlbGVjdFNjcmF0
Y2hHUFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDkgKzIzNiw5IEBAIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZUNl
bGwpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hl
VHlwZTo6VW5zZXQKICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJh
c2VDZWxsCi0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVB
cnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKIAotICAg
ICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwp
KTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxK
U0FycmF5Kj4oYmFzZUNlbGwpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENv
ZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihr
aW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0QXJyYXlMZW5ndGgo
bG9ja2VyKTsKQEAgLTI0OSw4ICsyNDksOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCwgcHJvcGVydHlOYW1lKTsK
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlQ2VsbCkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAg
ICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3Ro
KHN0dWJJbmZvKSkgewotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxp
bmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKTsKKyAgICAg
ICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChj
b2RlQmxvY2ssIHN0dWJJbmZvKSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRl
ZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9j
aywgc3R1YkluZm8pOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGlu
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRTdHJpbmdMZW5ndGgobG9ja2Vy
KTsKQEAgLTMwNCw3ICszMDQsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVH
ZXRCeShKCiAgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCiAgICAgICAg
ICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAg
ICAgICAgICAgICAgICAgJiYgIWxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAgICAgICAgICAg
ICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlBy
b3BlcnR5QWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJl
LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29k
ZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5U2Vs
ZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBw
cm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFj
ZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTczMSwxMSArNzMxLDExIEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5KEoKICAgICAgICAgICAgICAgICBv
bGRTdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2Fj
aGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxp
bmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgc2xvdC5j
YWNoZWRPZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5H
ZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgc2xvdC5jYWNo
ZWRPZmZzZXQoKSkKICAgICAgICAgICAgICAgICAgICAgJiYgIW9sZFN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAgICAgICAgICAgICAgICAgICAgICYmICFpc1Byb3h5
KSB7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVy
YXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFj
ZShzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2xkU3RydWN0dXJl
LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRl
ZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6
UHV0QnlTZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJh
c2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlG
dW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKQEAgLTExMzIsNyArMTEzMiw3IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnkoCiAgICAgICAgICAgICAgICAg
JiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2UKICAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRj
aHBvaW50U2V0KCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJ
bmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKHN0dWJJbmZvLCBzdHJ1
Y3R1cmUpOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0
dXJlKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAg
ICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwogICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50
cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBAIC0xNTUyLDcgKzE1NTIsNyBAQCBzdGF0aWMg
dm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAKIHZvaWQgdW5saW5rQ2FsbChWTSYg
dm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZv
LmZhc3RQYXRoU3RhcnQoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlua0lu
Zm8pKTsKICAgICAKICAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0
dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywyNCArNDMsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYg
dm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdDsKLQotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKLQotICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwotICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7Ci0KLSAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKLQotICAg
IGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJ
VGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKTsKLSAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNl
cHRpb24iKTsKLX0KLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5k
bGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tHZW5lcmF0b3IoVk0mIHZtKQogewogICAg
IENDYWxsSGVscGVycyBqaXQ7CkBAIC03NywyNCArNTksNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGhhCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNr
Iik7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtT
dGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCi17Ci0gICAg
Q0NhbGxIZWxwZXJzIGppdDsKLQotI2lmIENQVShYODZfNjQpCi0gICAgaml0LmFkZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lz
dGVyczo6ZXNwKTsKLSNlbGlmIENQVShBUk02NCkKLSAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBl
cnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7Ci0j
ZW5kaWYKLQotICAgIENDYWxsSGVscGVyczo6SnVtcCBjb250aW51YXRpb24gPSBqaXQuanVtcCgp
OwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlu
a0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgYXV0byBoYW5kbGVyID0gdm0u
Z2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoY29udGludWF0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgInBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsK
LX0KLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKQEAgLTEzNyw2ICsx
MDEsNDIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaAogCiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OworCisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOworCisgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
aml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKworICAgIENDYWxsSGVscGVyczo6Q2FsbCBv
cGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworCisgICAgaml0Lmp1bXBUb0V4
Y2VwdGlvbkhhbmRsZXIodm0pOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOworICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbiIpOworfQor
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVz
ZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVs
cGVycyBqaXQ7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVz
cCk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxwZXJzOjpmcmFt
ZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisK
KyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29udGludWF0aW9uID0gaml0Lmp1bXAoKTsKKworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIGF1dG8gaGFuZGxlciA9IHZtLmdldENUSVN0
dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNvbnRp
bnVhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJU
YWcsICJwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uIik7Cit9CisKIHRl
bXBsYXRlPHR5cGVuYW1lIFRhZ1R5cGU+CiBpbmxpbmUgdm9pZCBlbWl0UG9pbnRlclZhbGlkYXRp
b24oQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwb2ludGVyR1BSLCBUYWdUeXBlIHRhZykKIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDEyIEBAIGNsYXNzIFZNOwogCiAjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFj
a0dlbmVyYXRvcihWTSYpOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBw
b3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0Fu
ZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihW
TSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oIgogI2luY2x1ZGUgIkNhbGxG
cmFtZS5oIgogI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCisjaW5jbHVk
ZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMu
aCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5oIgpA
QCAtMzcwLDEzICszNzEsMjIgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3Rp
Y3MoVgogICAgIAogICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlv
bnMoKTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkgeworICAgICAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gYmFzZWxpbmVSZWYg
PSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUp
IHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUo
YmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOworICAgICAgICAgICAgY29k
ZUJsb2NrLT5qaXROZXh0SW52b2NhdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9s
ZFJlYWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRl
bGF5SklUQ29tcGlsZSIsICgidGhyZXNob2xkIG5vdCByZWFjaGVkLCBjb3VudGVyID0gIiwgY29k
ZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0
aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJlIGxpZnRlZC4i
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBKSVRXb3JrbGlzdDo6
U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgp
LmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBKSVRDb21waWxhdGlvbktleShjb2RlQmxv
Y2ssIEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpKTsKKyAgICBKSVRXb3JrbGlzdDo6U3Rh
dGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgpLmNv
bXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBKSVRDb21waWxhdGlvbktleShjb2RlQmxvY2st
PnVubGlua2VkQ29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpKTsKIAog
ICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgewog
ICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgQ29kZSB3YXMg
YWxyZWFkeSBjb21waWxlZC4iKTsKQEAgLTQ2Niw4ICs0NzYsMTAgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0wobG9vcF9vc3IpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJv
bUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGln
aWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9
IHZtLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihwYyk7CiAgICAgICAgICpwdHIgKz0gY29k
ZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkubV9hY3RpdmVUaHJlc2hvbGQ7Ci0gICAgICAg
IGlmICgqcHRyID49IE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgp
KQorICAgICAgICBpZiAoKnB0ciA+PSBPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxv
b3BzTGltaXQoKSkgeworICAgICAgICAgICAgY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKENvbmN1
cnJlbnRKU0xvY2tlcihjb2RlQmxvY2stPm1fbG9jaykpOyAvLyBXZSdyZSByZXR1cm5pbmcgdG8g
dGhlIE9TUiBlbnRyeSBjb2RlIGhlcmUsIHdoaWNoIGV4cGVjdHMgdGhhdCBtX2ppdERhdGEgaXMg
bm90IG51bGwuCiAgICAgICAgICAgICBMTElOVF9SRVRVUk5fVFdPKExMSW50OjpmdXp6ZXJSZXR1
cm5FYXJseUZyb21Mb29wSGludEVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgY2FsbEZyYW1lLT50b3BPZkZyYW1lKCkpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3Rl
cSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVn
ZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9w
Y29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4p
Ci0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3Jo
IHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFy
aXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0
MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGJpbmVxIFRhZ09mZnNl
dFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBAIC0xMDIzLDcgKzEwMTksNyBAQCBtYWNy
byBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgICMgTWV0YWRhdGEg
aW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQyLCAuc2xvdykK
ICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCi0gICAgICAgIHVw
ZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAgICAg
IGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4OSwyMiArMTA4NSwxOCBAQCBlbmQpCiAK
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAKLSAgICBtYWNybyB1cGRhdGVBcml0aFBy
b2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgIGVuZAotCiAgICAg
bWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5lcSB0MSwgSW50MzJUYWcsIC5v
cE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cK
ICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAg
ICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0NSwg
dDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdhdGVTcmNOb3RJbnQ6CiAgICAg
YmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JpIDB4ODAwMDAwMDAsIHQx
Ci0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVV
bmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0NSwgdDMpCiAg
ICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExMTUsMTAgKzExMDcsNiBA
QCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3Bjb2RlU3Ry
dWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9wZXJhdGlvbikKICAgICBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gYXJpdGhQ
cm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFk
YXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAg
ICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCiAgICAgICAgIGdldChtX3Jocywg
dDIpCiAgICAgICAgIGdldChtX2xocywgdDApCkBAIC0xMTI2LDcgKzExMTQsNyBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCBJbnQzMlRh
ZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5vcDJOb3RJbnQKLSAg
ICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmlu
YXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIp
CiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRTdG9y
ZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKQEAgLTExMzYsMTIg
KzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAg
ICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAgICAgICAgYmliIHQzLCBMb3dlc3RUYWcs
IC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAuc2xvdwot
ICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAgICB1cGRh
dGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJbnQs
IHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgICAgICBqbXAgLm9wMU5vdEludFJl
YWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEK
LSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVy
TnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9kc3Qs
IHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1Myw3ICsxMTQxLDcgQEAgbWFj
cm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0IG9w
ZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgb3BlcmFuZCBpcyBkZWZpbml0
ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYmlhIHQzLCBMb3dlc3RU
YWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisg
ICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmls
ZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGZpaTJk
IHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJhdGlvbihmdDEsIGZ0MCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNDQxLDggKzQ0MSwx
MyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgICAgICAgICBtb3ZlIFBD
LCBhMQogICAgICAgICAgICAgY0NhbGwyKF9sbGludF9sb29wX29zcikKICAgICAgICAgICAgIGJ0
cHogcjAsIC5yZWNvdmVyCi0KICAgICAgICAgICAgIG1vdmUgcjEsIHNwCisKKyAgICAgICAgICAg
ICMgQmFzZWxpbmUgdXNlcyBMTEludCdzIFBCIHJlZ2lzdGVyIGZvciBpdHMgSklUIGNvbnN0YW50
IHBvb2wuCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKKyAgICAgICAgICAg
IGxvYWRwIENvZGVCbG9jazo6bV9qaXREYXRhW1BCXSwgUEIKKyAgICAgICAgICAgIGxvYWRwIENv
ZGVCbG9jazo6SklURGF0YTo6bV9qaXRDb25zdGFudFBvb2xbUEJdLCBQQgorCiAgICAgICAgICAg
ICBpZiBBUk02NEUKICAgICAgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBK
U0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6bG9vcE9TUkVu
dHJ5KSAqIFB0clNpemUsIGEyCiAgICAgICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRvSklU
R2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKQEAgLTEwNTYsMTAgKzEwNjEsNiBAQCBzdHJpY3RF
cXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5h
bWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFk
YXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxl
KHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDJdCi0gICAgICAgIGVu
ZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGxvYWRxIFtjZnIsIHQwLCA4
XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpAQCAtMTA2OSw3ICsxMDcwLDcgQEAgbWFj
cm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICBpbnRlZ2VyT3Bl
cmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51bWJlclRhZywgdDEKICAgICAgICAgc3Rv
cmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJv
ZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBB
cml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNsb3c6
CkBAIC0xMTM0LDExICsxMTM1LDYgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
bmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBy
ZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3Jo
IHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJv
ZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCiAgICAgbWV0YWRhdGEodDEsIHQy
KQpAQCAtMTE0NiwxMiArMTE0MiwxMiBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwg
T3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5l
Z2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0
aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRo
UHJvZmlsZUludCwgdDEsIHQyKQogICAgIHJldHVybih0MykKIC5vcE5lZ2F0ZU5vdEludDoKICAg
ICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JxIDB4ODAwMDAwMDAw
MDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQor
ICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIs
IHQxLCB0MikKICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTY0LDEwICsx
MTYwLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgIGxs
aW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChz
aXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0YSh0
NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5
cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fcmhzLCB0
MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZShzaXplLCB0MCwgdDEpCkBAIC0xMTc3LDcgKzExNjksNyBAQCBtYWNybyBiaW5hcnlPcEN1c3Rv
bVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGlu
dGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5zbG93LCB0MikKIAotICAgICAgICBwcm9m
aWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxl
KG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGRpc3Bh
dGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTg3LDEwICsxMTc5LDEwIEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYnRxeiB0MSwgbnVtYmVy
VGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwg
ZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1
cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJO
dW1iZXIsIHQ1LCB0MikKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJ
bnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAg
ICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1i
ZXJJbnQsIHQ1LCB0MikKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgIC5vcDFOb3RJbnRSZWFk
eToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEyMDQsOSArMTE5Niw5IEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKIAogICAgIC5vcDJOb3RJbnQ6CiAgICAg
ICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBpcyBk
ZWZpbml0ZWx5IG5vdC4KLSAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYnRxeiB0MSwg
bnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikK
KyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9m
aWxlSW50TnVtYmVyLCB0NSwgdDIpCisgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGNp
MmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEs
IGZ0MQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIw
LDcgKzE0MjAsOCBAQCBlbmQKIAogbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFj
dGlvbikKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBiYWRkaXMgaW5jcmVtZW50
LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291
bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2xs
aW50RXhlY3V0ZUNvdW50ZXJbdDBdLCB0MAorICAgIGJhZGRpcyBpbmNyZW1lbnQsIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgYWN0aW9uKCkK
ICAgICAuY29udGludWU6CiBlbmQKQEAgLTE1MDMsNyArMTUwNCw4IEBAIG1hY3JvIHByb2xvZ3Vl
KGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2MKICAgICBjb2RlQmxvY2tHZXR0ZXIodDEpCiAgICAg
Y29kZUJsb2NrU2V0dGVyKHQxKQogICAgIGlmIG5vdCAoQ19MT09QIG9yIENfTE9PUF9XSU4pCi0g
ICAgICAgIGJhZGRpcyA1LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QxXSwgLmNvbnRpbnVlCisgICAgICAgIGxv
YWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyW3QxXSwgdDAKKyAgICAgICAgYmFk
ZGlzIDUsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVl
CiAgICAgICAgIGlmIEpTVkFMVUU2NAogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAgICAg
ICAgICBtb3ZlIFBDLCBhMQpAQCAtMTYxNywxNCArMTYxOSwxNCBAQCBtYWNybyBmdW5jdGlvbklu
aXRpYWxpemF0aW9uKHByb2ZpbGVBcmdTCiAgICAgIyBvcHRpbWFsIHdheSBmb3IgYXJjaGl0ZWN0
dXJlcyB0aGF0IGhhdmUgbW9yZSB0aGFuIGZpdmUgcmVnaXN0ZXJzIGF2YWlsYWJsZQogICAgICMg
Zm9yIGFyYml0cmFyeSB1c2UgaW4gdGhlIGludGVycHJldGVyLgogICAgIGxvYWRpIENvZGVCbG9j
azo6bV9udW1QYXJhbWV0ZXJzW3QxXSwgdDAKLSAgICBhZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAg
IyBVc2UgYWRkaSBiZWNhdXNlIHRoYXQncyB3aGF0IGhhcyB0aGUgcGVlcGhvbGUKKyAgICBhZGRw
IC1wcm9maWxlQXJnU2tpcCwgdDAKICAgICBhc3NlcnQobWFjcm8gKG9rKSBicGd0ZXEgdDAsIDAs
IG9rIGVuZCkKICAgICBidHB6IHQwLCAuYXJndW1lbnRQcm9maWxlRG9uZQogICAgIGxvYWRwIENv
ZGVCbG9jazo6bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMgKyBGaXhlZFZlY3Rvcjo6bV9zdG9yYWdl
ICsgUmVmQ291bnRlZEFycmF5OjptX2RhdGFbdDFdLCB0MwogICAgIGJ0cHogdDMsIC5hcmd1bWVu
dFByb2ZpbGVEb25lICMgV2hlbiB3ZSBjYW4ndCBKSVQsIHdlIGRvbid0IGFsbG9jYXRlIGFueSBh
cmd1bWVudCB2YWx1ZSBwcm9maWxlcy4KICAgICBtdWxwIHNpemVvZiBWYWx1ZVByb2ZpbGUsIHQw
LCB0MiAjIEFhYWFhaGhoaCEgTmVlZCBzdHJlbmd0aCByZWR1Y3Rpb24hCiAgICAgbHNoaWZ0cCAz
LCB0MCAjIG9mZnNldCBvZiBsYXN0IEpTVmFsdWUgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4KLSAg
ICBhZGRwIHQyLCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBpbiBD
b2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLgorICAgIGFkZHAgdDIsIHQzICMgcG9p
bnRlciB0byBlbmQgb2YgVmFsdWVQcm9maWxlIGFycmF5IGluIHRoZSB2YWx1ZSBwcm9maWxlIGFy
cmF5LgogLmFyZ3VtZW50UHJvZmlsZUxvb3A6CiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIGxv
YWRxIFRoaXNBcmd1bWVudE9mZnNldCAtIDggKyBwcm9maWxlQXJnU2tpcCAqIDhbY2ZyLCB0MF0s
IHQyCkBAIC0yNTYzLDYgKzI1NjUsMTcgQEAgbWFjcm8gbm90U3VwcG9ydGVkKCkKICAgICBlbmQK
IGVuZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgdHlw
ZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjpt
X2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgVW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVT
dHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3Jo
IHR5cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKwogLy8gRklYTUU6
IFdlIHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0X1dJTiBjb25kaXRpb24gaGVyZSwgc2luY2Ug
V0VCQVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUgZmFsc2Ugb24gV2luZG93cwogLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNgogaWYgV0VCQVNTRU1CTFkg
YW5kIG5vdCBYODZfNjRfV0lOCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDggKzQ4LDEwIEBAIHB1YmxpYzoKICAgICBDYWNoZWFibGVJZGVudGlmaWVy
KCkgPSBkZWZhdWx0OwogCiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNy
ZWF0ZUZyb21DZWxsKEpTQ2VsbCogaWRlbnRpZmllcik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNo
ZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2Rl
QmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJ
ZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sq
LCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIGNvbnN0IElkZW50aWZpZXIm
KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMgaW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKENvZGVCbG9ja1R5cGUqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBpbmxp
bmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKFVuaXF1
ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBDYWNoZWFibGVJZGVudGlmaWVy
IGNyZWF0ZUZyb21SYXdCaXRzKHVpbnRwdHJfdCByYXdCaXRzKSB7IHJldHVybiBDYWNoZWFibGVJ
ZGVudGlmaWVyKHJhd0JpdHMpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRl
bnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE0IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJs
b2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2Rl
QmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhjb2RlQmxvY2ssIGkuaW1wbCgpKTsKIH0KIAotaW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxvY2stPmhh
c0lkZW50aWZpZXIodWlkKSk7CiAgICAgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIodWlkKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
ZFR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJ
VENvZGUuaCIKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUNh
Y2hlRXJyb3IuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKQEAgLTE5
MTgsNiArMTkxOSw4IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bVZhbHVlUHJvZmlsZXMo
KSBjb25zdCB7IHJldHVybiBtX251bVZhbHVlUHJvZmlsZXM7IH0KICAgICB1bnNpZ25lZCBudW1B
cnJheVByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1BcnJheVByb2ZpbGVzOyB9CisgICAg
dW5zaWduZWQgbnVtQmluYXJ5QXJpdGhQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQmlu
YXJ5QXJpdGhQcm9maWxlczsgfQorICAgIHVuc2lnbmVkIG51bVVuYXJ5QXJpdGhQcm9maWxlcygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtVW5hcnlBcml0aFByb2ZpbGVzOyB9CiAKIHByaXZhdGU6CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG1fdGhpc1JlZ2lzdGVyOwpAQCAtMTk1Miw2ICsxOTU1LDggQEAg
cHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVQcm9maWxlczsKICAgICB1bnNpZ25l
ZCBtX251bUFycmF5UHJvZmlsZXM7CisgICAgdW5zaWduZWQgbV9udW1CaW5hcnlBcml0aFByb2Zp
bGVzOworICAgIHVuc2lnbmVkIG1fbnVtVW5hcnlBcml0aFByb2ZpbGVzOwogCiAgICAgQ2FjaGVk
TWV0YWRhdGFUYWJsZSBtX21ldGFkYXRhOwogCkBAIC0yMTYwLDYgKzIxNjUsOCBAQCBBTFdBWVNf
SU5MSU5FIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlCiAgICAgLCBtX3JhcmVEYXRhKGNhY2hl
ZENvZGVCbG9jay5yYXJlRGF0YShkZWNvZGVyKSkKICAgICAsIG1fdmFsdWVQcm9maWxlcyhjYWNo
ZWRDb2RlQmxvY2subnVtVmFsdWVQcm9maWxlcygpKQogICAgICwgbV9hcnJheVByb2ZpbGVzKGNh
Y2hlZENvZGVCbG9jay5udW1BcnJheVByb2ZpbGVzKCkpCisgICAgLCBtX2JpbmFyeUFyaXRoUHJv
ZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bUJpbmFyeUFyaXRoUHJvZmlsZXMoKSkKKyAgICAsIG1f
dW5hcnlBcml0aFByb2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1VbmFyeUFyaXRoUHJvZmlsZXMo
KSkKIHsKIH0KIApAQCAtMjMzNyw2ICsyMzQ0LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIENhY2hl
ZENvZGVCbG9jazxDb2RlQgogICAgIG1faGFzQ2hlY2twb2ludHMgPSBjb2RlQmxvY2subV9oYXND
aGVja3BvaW50czsKICAgICBtX251bVZhbHVlUHJvZmlsZXMgPSBjb2RlQmxvY2subV92YWx1ZVBy
b2ZpbGVzLnNpemUoKTsKICAgICBtX251bUFycmF5UHJvZmlsZXMgPSBjb2RlQmxvY2subV9hcnJh
eVByb2ZpbGVzLnNpemUoKTsKKyAgICBtX251bUJpbmFyeUFyaXRoUHJvZmlsZXMgPSBjb2RlQmxv
Y2subV9iaW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICBtX251bVVuYXJ5QXJpdGhQcm9m
aWxlcyA9IGNvZGVCbG9jay5tX3VuYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CiAKICAgICBtX21l
dGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9tZXRhZGF0YS5nZXQoKSk7CiAgICAg
bV9yYXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcmFyZURhdGEuZ2V0KCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODAsNyArNDgwLDcgQEAg
SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90bwogI2lmIEVOQUJMRShKSVQp
CiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3AoT3BOZWdhdGU6
Ok1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZSByZXN1bHQsIEpTVmFsdWUgb3BlcmFuZCkKIHsK
LSAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxl
OworICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gKm1ldGFkYXRhLm1fYXJpdGhQcm9m
aWxlOwogICAgIHByb2ZpbGUub2JzZXJ2ZUFyZyhvcGVyYW5kKTsKICAgICBBU1NFUlQocmVzdWx0
LmlzTnVtYmVyKCkgfHwgcmVzdWx0LmlzQmlnSW50KCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsyODksOCBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZlJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9yYXJlRGF0YSk7IH0KICAgICBzdGF0aWMg
aW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFzU3RyaW5nSW5SYXJlRGF0YSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihSYXJlRGF0YSwgbV9hc1N0cmluZyk7IH0KKyAgICBzdGF0aWMgaW5saW5l
IHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9ja0ZvckNhbGwpOyB9CisgICAgc3Rh
dGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdCk7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzNCw4ICs0MzQsNiBAQCB2b2lkIE9wdGlvbnM6OnJlY29tcHV0
ZURlcGVuZGVudE9wdGlvbnMoCiAgICAgT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkgPSBmYWxz
ZTsKICNlbmRpZgogCi0gICAgaWYgKCFpc0FSTTY0KCkpCi0gICAgICAgIE9wdGlvbnM6OnVzZURh
dGFJQygpID0gZmFsc2U7CiAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKICAgICAgICAg
T3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCkgPSBmYWxzZTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyODMw
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDYgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RN
ZW1vcnkoKTsKICAgICB2KEludDMyLCBldmFsVGhyZXNob2xkTXVsdGlwbGllciwgMTAsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1heGltdW1FdmFsQ2FjaGVhYmxlU291cmNl
TGVuZ3RoLCAyNTYsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKLSAgICB2KEJvb2wsIHJhbmRv
bWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2tw
b2ludHNGb3JCYXNlbGluZSwgMTAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJbnQzMiwg
bWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvclVwcGVyVGllcnMsIDUw
MDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkBAIC01MzIsNiArNTMxLDcgQEAgYm9vbCBj
YW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZURhdGFJQywgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDSW5PcHRpbWl6aW5n
SklULCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNTaGFy
aW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB1c2VCYXNlbGluZUpJ
VENvZGVTaGFyaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgLyogRmVh
dHVyZSBGbGFncyAqL1wKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5NiwxMCArMzk2LDE5IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFy
ZUZvckV4ZWN1dGkKICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVCeXRlY29kZSgpKQogICAgICAg
ICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7CiAKLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkK
LSAgICAgICAgc2V0dXBMTEludChjb2RlQmxvY2spOwotICAgIGVsc2UKLSAgICAgICAgc2V0dXBK
SVQodm0sIGNvZGVCbG9jayk7CisgICAgYm9vbCBpbnN0YWxsZWRVbmxpbmtlZEJhc2VsaW5lQ29k
ZSA9IGZhbHNlOworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJVENv
ZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlu
a2VkQmFzZWxpbmVDb2RlKSB7CisgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRC
YXNlbGluZUNvZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGluc3Rh
bGxlZFVubGlua2VkQmFzZWxpbmVDb2RlID0gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAo
IWluc3RhbGxlZFVubGlua2VkQmFzZWxpbmVDb2RlKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp1
c2VMTEludCgpKQorICAgICAgICAgICAgc2V0dXBMTEludChjb2RlQmxvY2spOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrKTsKKyAgICB9CiAKICAgICBp
bnN0YWxsQ29kZSh2bSwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmNvZGVUeXBlKCksIGNvZGVCbG9j
ay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkocmV2aXNpb24gMjgzMDUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGlt
aXplQWZ0ZXJXYXJtVXAoKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRp
ZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBz
ZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldhcm1V
cCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAg
ICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRl
cldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hv
bGRSZWFjaGVkKCkKQEAgLTY1LDkgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVT
b29uKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9CQlEo
KSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFP
cHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0
aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29uKCkpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVT
b29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRo
cmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICBzdHJ1Y3QgT1NSRW50
cnlEYXRhIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3Vu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJV
cENvdW50LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRpZXJVcENvdW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBUaWVyVXBDb3VudDo6VGllclVwQ291
bnQoKQogewotICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRp
bWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25z
Ojp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogfQogCiBUaWVyVXBDb3Vu
dDo6flRpZXJVcENvdW50KCkgPSBkZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVRpZXJVcENvdW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAodWludDMy
X3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgYWZ0ZXIgd2FybS11
cC4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09w
dGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9sZChP
cHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0KIAog
ICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtOTAsMTQg
KzkwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24odWludDMy
X3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgbmV4dCBpbnZvY2F0
aW9uLiIpOwotICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCwgbnVsbHB0cik7CisgICAgICAgIHNl
dE5ld1RocmVzaG9sZCgwKTsKICAgICB9CiAKICAgICB2b2lkIG9wdGltaXplU29vbih1aW50MzJf
dCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVy
Ym9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBzb29uLiIpOwogICAg
ICAgICAvLyBGSVhNRTogTmVlZCBhZGp1c3RtZW50IG9uY2Ugd2UgZ2V0IG1vcmUgaW5mb3JtYXRp
b24gYWJvdXQgd2FzbSBmdW5jdGlvbnMuCi0gICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25z
Ojp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5l
d1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAgICAg
fQogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25S
ZXN1bHQodWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQpJ
bmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDktMjQgIFNhYW0gQmFyYXRpICA8c2JhcmF0
aUBhcHBsZS5jb20+CisKKyAgICAgICAgQnVpbGQgYW4gdW5saW5rZWQgYmFzZWxpbmUgSklUCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjkyMjMKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzgyMzIxNzcyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0JhZy5oOgorICAgICAgICAqIHd0Zi9QYWNr
ZWQuaDoKKyAgICAgICAgKFdURjo6UGFja2VkQWxpZ25lZFB0cjo6b3BlcmF0b3IqIGNvbnN0KToK
KwogMjAyMS0wOS0yNCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIHR5cGVjaGVja2luZyBgaXNgIG92ZXJsb2FkcyBmb3IgYHN0ZDo6dW5pcXVlX3B0cmAs
IGBXVEY6OlVuaXF1ZVJlZmAsIGFuZCBgV1RGOjpXZWFrUHRyYApJbmRleDogU291cmNlL1dURi93
dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2
NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CiAgICAgfQog
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBCYWcmIG9wZXJhdG9yPShCYWc8VCwgVT4m
JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh1bndyYXBwZWRIZWFkKCkgPT0gb3RoZXIudW53
cmFwcGVkSGVhZCgpKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgICAgIEJhZyBk
ZXN0cm95OworICAgICAgICBkZXN0cm95Lm1faGVhZCA9IHVud3JhcHBlZEhlYWQoKTsKKyAgICAg
ICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgpOworICAgICAgICBvdGhlci5tX2hlYWQg
PSBudWxscHRyOworCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICB+QmFnKCkK
ICAgICB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL1dURi93dGYvUGFja2VkLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYs
MTAgQEAgcHVibGljOgogICAgIH0KIAogICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biBnZXQoKTsgfQotICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUgPSBUPgorICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPCFzdGQ6OmlzX3ZvaWRfdjxVPiwgVSY+Ojp0eXBlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuICpnZXQoKTsgfQorCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhZ2V0
KCk7IH0KIAogICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQg
Y29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4K
</data>
<flag name="commit-queue"
          id="462812"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439211</attachid>
            <date>2021-09-24 16:52:20 -0700</date>
            <delta_ts>2021-09-24 19:40:23 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>647897</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzOCBA
QAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhZGRzIGFuICJ1bmxpbmtlZCIgYmFzZWxpbmUgSklUIHRvIEpTVkFMVUU2
NCBwbGF0Zm9ybXMuIFRoZSBKSVQKKyAgICAgICAgY29kZSBwcm9kdWNlZCBieSB0aGlzIGJhc2Vs
aW5lIEpJVCBjYW4gYmUgc2hhcmVkIGJldHdlZW4gYWxsIENvZGVCbG9ja3MgdGhhdAorICAgICAg
ICBzaGFyZSBhbiBVbmxpbmtlZENvZGVCbG9jay4gVGhlIGJlbmVmaXQgb2YgdGhpcyBpcywgaWYg
d2UncmUgY3JlYXRpbmcgYSBDb2RlQmxvY2sKKyAgICAgICAgZnJvbSBhbiBVbmxpbmtlZENvZGVC
bG9jayB0aGF0IGFscmVhZHkgY29tcGlsZWQgYW4gdW5saW5rZWQgYmFzZWxpbmUgSklUCisgICAg
ICAgIGluc3RhbmNlLCB0aGlzIG5ldyBDb2RlQmxvY2sganVzdCBzdGFydHMgb2ZmIGV4ZWN1dGlu
ZyBpbiB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgICJmb3IgZnJlZSIuCisgICAgICAgIAorICAg
ICAgICBUbyBtYWtlIHRoaXMgd29yaywgdGhlIGNvZGUgd2UgZW1pdCBub3cgbmVlZHMgdG8gYmUg
aW5kZXBlbmRlbnQgb2YgYSBzcGVjaWZpYworICAgICAgICBDb2RlQmxvY2sgaW5zdGFuY2UuIFdl
IHVzZSBhIENvZGVCbG9jayBpbnN0YW5jZSBmb3IgbWluaW1hbCBwcm9maWxpbmcgaW5mb3JtYXRp
b24KKyAgICAgICAgd2hlbiBjb21waWxpbmcsIGJ1dCBvdGhlcndpc2UsIHRoZSBjb2RlIGlzIHRp
ZWQgdG8gdGhlIFVubGlua2VkQ29kZUJsb2NrLiBXaGVuCisgICAgICAgIHdlIG5lZWQgQ29kZUJs
b2NrIHNwZWNpZmljIGluZm9ybWF0aW9uLCB3ZSBsb2FkIGl0LiBUaGlzIHVzdWFsbHkgbWVhbnMg
dGhpbmdzCisgICAgICAgIGxpa2Ugd2UnbGwgbG9hZCB0aGluZ3MgZnJvbSB0aGUgTWV0YWRhdGEg
ZHluYW1pY2FsbHkuIFRoaXMgcGF0Y2ggYWxzbyBhZGRzIGEKKyAgICAgICAgImxpbmtlZCBjb25z
dGFudCBwb29sIiBjb25jZXB0LCBhbmQgYW55dGltZSB3ZSBpbnN0YW50aWF0ZSBzdWNoIGEgQ29k
ZUJsb2NrLAorICAgICAgICB3ZSBhbHNvIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcyAibGlua2Vk
IGNvbnN0YW50IHBvb2wiLiBUaGlzIGNvbnRhaW5zIHRoaW5ncworICAgICAgICBsaWtlIG91ciBp
bmxpbmUgY2FjaGUgZGF0YSBzdHJ1Y3R1cmVzIChTdHJ1Y3R1cmVTdHViSW5mbyopLCBKU0dsb2Jh
bE9iamVjdCosCisgICAgICAgIGV0Yy4KKyAgICAgICAgCisgICAgICAgIFVubGlua2VkIGJhc2Vs
aW5lIEpJVCBhbHdheXMgcnVucyBJQ3MgaW4gdGhlICJkYXRhIiBtb2RlLiBUbyBtYWtlIHRoaXMg
d29yaywgSQorICAgICAgICBtYWRlIGRhdGEgSUNzIHdvcmsgb24geDg2XzY0LiBUbyBkbyB0aGlz
LCB3ZSBubyBsb25nZXIgY2FsbC9yZXQgdG8gdGhlIElDLgorICAgICAgICBJbnN0ZWFkLCB3ZSBq
dW1wIHRvIHRoZSBJQywgYW5kIHRoZSBJQyBqdW1wcyBiYWNrIGJ5IGxvYWRpbmcgdGhlICJkb25l
IiBsb2NhdGlvbgorICAgICAgICBmcm9tIHRoZSBTdHJ1Y3R1cmVTdHViSW5mbyBkeW5hbWljYWxs
eS4gVGhpcyBzaW1wbGlmaWVzIHRoZSBkZXNpZ24gdG8gbm90IGJlCisgICAgICAgIGJhc2VkIG9u
IHRoZSBhcm02NCBjYWxsaW5nIGNvbnZlbnRpb24sIGFuZCBrZWVwcyB0aGUgc2FtZSBwZXJmb3Jt
YW5jZSBjaGFyYWN0ZXJpc3RpY3MuIAorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNv
IGFkZHMgYSBuZXcgdmVyc2lvbiBvZiBJbmxpbmVBY2Nlc3MgdGhhdCBpcyBvbmx5IHVzZWQgaW4g
YmFzZWxpbmUKKyAgICAgICAgSklUIChmb3Igbm93KS4gSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIG1h
a2UgdGhlIERGRy9GVEwgYWxzbyB1c2UgdGhpcyBmb3IgRGF0YQorICAgICAgICBJQ3MuIEJ1dCB3
ZSBkb24ndCBuZWVkIHRvIGRvIHRoYXQgeWV0IHNpbmNlIHRob3NlIHRpZXJzIGRvbid0IHVzZSBk
YXRhIElDcyBieQorICAgICAgICBkZWZhdWx0LiBUaGUgYmFzZWxpbmUgSklUIG5vdyBoYXMgYSBw
dXJlIGRhdGEgSUMgYXBwcm9hY2ggdG8gSW5saW5lQWNjZXNzLiBTbworICAgICAgICBpbnN0ZWFk
IG9mIHJlcGF0Y2hpbmcgY29kZSwgd2UgcmVwYXRjaCBmaWVsZHMgd2UgbG9hZCBkeW5hbWljYWxs
eS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgYSBmZXcgdGhp
bmdzIGluIE9TUiBleGl0LCB3aGVyZSBib3RoIERGRy9GVEwgd2VyZQorICAgICAgICBzdG9yaW5n
IGNhbGxlZSBzYXZlcyB0byB0aGUgY2FsbGVlIHNhdmVzIGJ1ZmZlciBpbiBhIHdlaXJkIHBsYWNl
LCBhbmQgc2VwYXJhdGUKKyAgICAgICAgZnJvbSBvbmUgYW5vdGhlci4gSSBub3RpY2VkIHRoaXMg
Y29kZSBjYW4gYmUgc2ltcGxpZmllZCBpZiB3ZSBqdXN0IHN0b3JlCisgICAgICAgIGNhbGxlZSBz
YXZlcyBhdCB0aGUgZW5kIG9mIHRoZSBPU1IgZXhpdCBoYW5kbGVyLCBhbmQgZnJvbSBjb21tb24g
SklUIGVtaXNzaW9uCisgICAgICAgIGNvZGUuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNo
IGFsc28gZml4ZXMgYSBidWcgd2hlcmUgd2UgY291bGQgZW5kIHVwIHdpdGggdGhlIHdyb25nIChh
bmQgYWx3YXlzCisgICAgICAgIG1vcmUgbmVnYXRpdmUpIFNQIGluIHRoZSBiYXNlbGluZSBKSVQu
IFRoaXMgY291bGQgaGFwcGVuIHdoZW4gd2UgT1NSIGV4aXQKKyAgICAgICAgZnJvbSBhbiBpbmxp
bmVkIGdldHRlci9zZXR0ZXIuIFRoZSBPU1IgZXhpdCBjb2RlIHB1dHMgdGhlIHJldHVybiBQQyB3
aGVuCisgICAgICAgIHJldHVybmluZyB0byB0aGUgY2FsbCBzaXRlIG9mIHRoZSBnZXR0ZXIvc2V0
dGVyIHRvIGJlIHRoZSBpbmxpbmUgY2FjaGUncworICAgICAgICAiZG9uZSBsb2NhdGlvbiIuIEhv
d2V2ZXIsIHRoaXMgImRvbmUgbG9jYXRpb24iIGRpZG4ndCB1c2VkIHRvIHJlc3RvcmUgU1AuCisg
ICAgICAgIFRoaXMgcGF0Y2ggY29uc2VydmF0aXZlbHkgbWFrZXMgaXQgc28gdGhhdCB3ZSByZXN0
b3JlIHRoZSBTUCBhdCB0aGVzZSBzaXRlcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbWVh
c3VyZWQgYXMgYSAxJSBzcGVlZHVwIG9uIFNwZWVkb21ldGVyMi4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5m
byk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlT3Bl
cmFuZHNGb3JDaGVja3BvaW50Lmg6CisgICAgICAgIChKU0M6OnZhbHVlUHJvZmlsZU9mZnNldEZv
cik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjplbWl0RmFzdFBhdGhJbXBsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RmFz
dFBhdGgpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKToKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgpOgorICAgICAgICAo
SlNDOjpDYWxsTGlua0luZm86OmluaXRpYWxpemVEYXRhSUMpOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OmVtaXREaXJlY3RGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNsb3dT
dHViKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjphZGRyZXNzT2ZNYXhB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZSk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6ZnJhbWVSZWdpc3RlckNvdW50KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiaW5hcnlB
cml0aFByb2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5hcnlBcml0aFBy
b2ZpbGVGb3JQQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluZFBDKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpqaXRTb29uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRO
ZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRBZGRJQyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUTXVsSUMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVFN1YklDKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRKSVROZWdJQyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6aml0QWZ0ZXJXYXJtVXApOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29u
c3RhbnRQb29sKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFzZWxpbmVKSVRDb25zdGFudFBvb2wpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpkb250SklUQW55dGltZVNvb24pOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjphZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjppc0tub3duQ2VsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6YWRkTWF0aElDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzZXRKSVRDb2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRD
b2RlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzd2l0Y2hKdW1wVGFi
bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJh
c2VsaW5lU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNlbGlu
ZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZGZnU3dp
dGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdTdHJpbmdTd2l0Y2hK
dW1wVGFibGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2Uu
aDoKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6RXhlY3V0aW9uQ291bnRlcjxjb3VudGluZ1ZhcmlhbnQ+OjpzZXRUaHJlc2hvbGQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0
aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJ
ZE1ldGFkYXRhLmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0
aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpHZXRCeUlkTW9kZU1ldGFk
YXRhOjpvZmZzZXRPZk1vZGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcDoK
KyAgICAgICAgKEpTQzo6R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0
U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEdl
dHRlcik6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6
OkluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToK
KyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5s
aW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UpOgorICAgICAgICAoSlND
OjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChK
U0M6OklubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OklubGlu
ZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyk6CisgICAgICAgIChKU0M6OklubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2Vzcyk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmg6
CisgICAgICAgICogYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmg6CisgICAgICAgIChK
U0M6Okl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZTZWVuTW9kZXMpOgorICAgICAgICAq
IGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6CisgICAgICAgIChKU0M6OkxMSW50Q2FsbExp
bmtJbmZvOjpvZmZzZXRPZkFycmF5UHJvZmlsZSk6CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2Rl
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAo
SlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQpOgorICAgICAgICAoSlNDOjpBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OmNhbGN1bGF0ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0
aW9uSGFuZGxpbmcpOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNl
cnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMpOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5lcmF0ZSk6CisgICAgICAgICogYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0
YXRlOjpwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeVN0YXR1cy5jcHA6CisgICAgICAg
IChKU0M6OlB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OmluaXRHZXRCeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpp
bml0UHV0QnlJZFJlcGxhY2UpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5p
dEluQnlJZFNlbGYpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNz
Q2FzZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuY2VzKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZE
b25lTG9jYXRpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHA6CisgICAg
ICAgIChKU0M6OnByaW50U3VwZXJTYW1wbGVyU3RhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Omhhc0lk
ZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dGhyZXNob2xkRm9y
SklUKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFsbG9jYXRlU2hhcmVkUHJv
ZmlsZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdGFudFJlZ2lzdGVyKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2s6Omluc3RydWN0aW9uQXQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmJpbmFyeUFyaXRoUHJvZmlsZSk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp1bmFyeUFyaXRoUHJvZmlsZSk6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpsbGludEV4ZWN1dGVDb3VudGVyKToKKyAg
ICAgICAgKiBieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaDoKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRNZXRhZGF0YVRhYmxlOjpvZmZzZXRJbk1ldGFkYXRhVGFibGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNl
OjpWYWx1ZVByb2ZpbGVCYXNlKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQmFzZTo6Y2xl
YXJCdWNrZXRzKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVj
a2V0KToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb2RlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAgICAgICAqIGRmZy9E
RkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxpbmsp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJl
cGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRXhpdDo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OmhhbmRsZUV4aXRDb3VudHMp
OgorICAgICAgICAoSlNDOjpERkc6OmNhbGxlclJldHVyblBDKToKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRK
dW1wVG9UYXJnZXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRQcml2YXRlTmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVWYWx1ZVN1Yik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZU11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dTaGFkb3dDaGlja2VuVGFpbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExKSVRDb2Rl
Lmg6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Omxpbmsp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjphZGRNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlVW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpjb21waWxlQmluYXJ5TWF0aElDKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVB1dFByaXZhdGVOYW1lKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAg
ICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29t
cGlsZVN0dWIpOgorICAgICAgICAqIGdlbmVyYXRvci9NZXRhZGF0YS5yYjoKKyAgICAgICAgKiBq
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpz
dG9yZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVh
bENhbGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdp
dGhvdXRNb3ZpbmdHbG9iYWxPYmplY3QpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMu
aDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcik6CisgICAgICAgICogaml0L0Jhc2VsaW5lSklUQ29kZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkZEpJVEFkZElDKToKKyAg
ICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZGRKSVRNdWxJQyk6CisgICAgICAgIChKU0M6Ok1h
dGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMpOgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFk
ZEpJVE5lZ0lDKToKKyAgICAgICAgKEpTQzo6TWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MpOgor
ICAgICAgICAoSlNDOjpCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAg
IChKU0M6OkJhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSk6CisgICAgICAgICogaml0
L0Jhc2VsaW5lSklUQ29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SklUQ29uc3RhbnRQb29s
OjphZGQpOgorICAgICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OnNpemUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6OmF0IGNvbnN0KToKKyAgICAgICAgKiBqaXQvQmFz
ZWxpbmVKSVRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6QmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6
ZSk6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkNDYWxs
SGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKToKKyAgICAgICAgKEpTQzo6
Q0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldCk6CisgICAgICAgICogaml0
L0NDYWxsSGVscGVycy5oOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHA6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oOgorICAgICAgICAq
IGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpDYWxsRnJhbWVTaHVmZmxlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVy
OjpwcmVwYXJlRm9yVGFpbENhbGwpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5o
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c25hcHNob3QgY29uc3QpOgorICAg
ICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OkpJVCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRWYXJS
ZWFkT25seUNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc2V0U1ApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5k
Q29uc3RhbnRQb29sUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpm
aW5hbGl6ZU9uTWFpblRocmVhZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcik6CisgICAgICAgIChK
U0M6OkpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKToKKyAgICAgICAgKiBqaXQvSklULmg6Cisg
ICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVnYXRlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2FkZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2Rpdik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tdWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3ViKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2Fs
bEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2l0ZXJhdG9yX25leHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX25leHQpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxl
U2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dD
YXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpT
Qzo6SklUQ29kZTo6dXNlRGF0YUlDKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6cGNUb0NvZGVP
cmlnaW5NYXApOgorICAgICAgICAqIGppdC9KSVRDb21waWxhdGlvbktleS5jcHA6CisgICAgICAg
IChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBqaXQvSklU
Q29tcGlsYXRpb25LZXkuaDoKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OkpJVENv
bXBpbGF0aW9uS2V5KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJhdG9y
ISBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5OjpvcGVy
YXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Omhhc2ggY29u
c3QpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6cHJvZmlsZWRCbG9jayBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXpl
KToKKyAgICAgICAgKEpTQzo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJ
VEdldEJ5SWRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUdldEJ5SWRJbmxpbmVB
Y2Nlc3MpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJ
VFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkpJVERlbEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklURGVsQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAg
IChKU0M6OkpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAgICAo
SlNDOjpKSVRJbkJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpKSVRHZXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVFB1dEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXRoKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0
YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6SklUOjppc09wZXJhbmRDb25zdGFudEludCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6aXNLbm93bkNlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdldENv
bnN0YW50T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6
bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmFkdmFuY2VUb05l
eHRDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNo
ZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdExvYWREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkpJVDo6anVtcFRhcmdldCk6CisgICAgICAgIChKU0M6OkpJVDo6
bG9hZFB0ckZyb21NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZDMyRnJvbU1ldGFk
YXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkOEZyb21NZXRhZGF0YSk6CisgICAgICAgIChK
U0M6OkpJVDo6c3RvcmU4VG9NZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6c3RvcmUzMlRv
TWV0YWRhdGEpOgorICAgICAgICAoSlNDOjpKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
SklUOjpsb2FkR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29kZUJsb2Nr
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEdldFB1dEluZm8pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZSk6IERlbGV0ZWQuCisgICAg
ICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9u
dWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzVHJ1dGh5
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dp
dGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVj
a190cmFwcyk6CisgICAgICAgIChKU0M6OkpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5l
d0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYXJndW1lbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9v
Zik6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdHlwZW9mX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVf
SklUX09QRVJBVElPTik6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBqaXQvSklUUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkpJVFBsYW46OmtleSk6CisgICAgICAg
ICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6c2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9k
ZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9n
ZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
aW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQcml2YXRlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SGFzUHJpdmF0ZVNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19w
cml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRl
X2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmspOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29w
ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6
CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKToKKyAgICAg
ICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF90
b19zY29wZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1
cmVWYXIpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9wcml2YXRlX2Jy
YW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5f
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9pbnRl
cm5hbF9maWVsZCk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0
cnlDYWNoZUdldEJ5KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeSk6CisgICAgICAgIChK
U0M6OnRyeUNhY2hlSW5CeSk6CisgICAgICAgIChKU0M6OnVubGlua0NhbGwpOgorICAgICAgICAq
IGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpoYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxl
RXhjZXB0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6Cisg
ICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6
aml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRf
U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0Nh
Y2hlYWJsZUlkZW50aWZpZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayk6CisgICAgICAgICogcnVudGltZS9DYWNoZWRU
eXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtQmluYXJ5QXJpdGhQ
cm9maWxlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkNhY2hlZENvZGVCbG9jazo6bnVtVW5hcnlB
cml0aFByb2ZpbGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVu
bGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrPENvZGVCbG9j
a1R5cGU+OjplbmNvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoK
KyAgICAgICAgKEpTQzo6dXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKToKKyAgICAg
ICAgKiBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1bnRpbWUvT3B0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlv
bnMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1l
L1NjcmlwdEV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpw
cmVwYXJlRm9yRXhlY3V0aW9uSW1wbCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRUaWVyVXBD
b3VudGVyLmg6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6b3B0aW1p
emVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50VGllclVwQ291bnRlcjo6
b3B0aW1pemVTb29uKToKKyAgICAgICAgKiB3YXNtL1dhc21UaWVyVXBDb3VudC5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50OjpUaWVyVXBDb3VudCk6CisgICAgICAgICogd2Fz
bS9XYXNtVGllclVwQ291bnQuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6Om9w
dGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6b3B0
aW1pemVOZXh0SW52b2NhdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50Ojpv
cHRpbWl6ZVNvb24pOgorCiAyMDIxLTA5LTIzICBQaGlsaXAgQ2hpbWVudG8gIDxwY2hpbWVudG9A
aWdhbGlhLmNvbT4KIAogICAgICAgICBWYXJpb3VzIHR3ZWFrcyBpbiBwcmVwYXJhdGlvbiBmb3Ig
VGVtcG9yYWwuSW5zdGFudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC02MTEsNiArNjExLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCiAgICAgYnVp
bHRpbnMvQnVpbHRpblV0aWxzLmgKIAorICAgIGJ5dGVjb2RlL0FyaXRoUHJvZmlsZS5oCiAgICAg
Ynl0ZWNvZGUvQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvQXJyYXlQcm9m
aWxlLmgKICAgICBieXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25zLmgKQEAgLTgzNyw2ICs4Mzgs
NyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAKICAgICBqaXQv
QXNzZW1ibHlIZWxwZXJzLmgKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaAorICAg
IGppdC9CYXNlbGluZUpJVENvZGUuaAogICAgIGppdC9DQ2FsbEhlbHBlcnMuaAogICAgIGppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmgKICAgICBqaXQvRXhlY3V0YWJsZU1lbW9yeUhhbmRsZS5oCkBA
IC04NzUsNiArODc3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QQogICAgIHBhcnNlci9QYXJzZXJFcnJvci5oCiAgICAgcGFyc2VyL1BhcnNlck1vZGVzLmgKICAg
ICBwYXJzZXIvUGFyc2VyVG9rZW5zLmgKKyAgICBwYXJzZXIvUmVzdWx0VHlwZS5oCiAgICAgcGFy
c2VyL1NvdXJjZUNvZGUuaAogICAgIHBhcnNlci9Tb3VyY2VQcm92aWRlci5oCiAgICAgcGFyc2Vy
L1NvdXJjZVByb3ZpZGVyQ2FjaGUuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC02MTksNiArNjE5LDcgQEAgaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tl
bi5jcHAKIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKIAogaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAKK2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCiBqaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAog
aml0L0JpbmFyeVN3aXRjaC5jcHAKIGppdC9DQ2FsbEhlbHBlcnMuY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTkwMCw2ICs5MDAsNyBAQAogCQk1MkNEMEY1RDIyNDJGNTY5MDA0QTE4QTUgLyog
Rm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFt
ZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0MkY1NjkwMDRBMThBNSAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNEMEY2NzIyNDJGNzFD
MDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87IH07CisJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkVF
RDc5NDI0OTJCODcwMDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRUVENzkzMjQ5MkI4NjgwMDhGNEM5
MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovOyB9OwogCQk1MkY2QzM1RTFFNzFFQjA4MDA4MUY0
Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyB9OwogCQk1MzBBNjZCOTFGQTNFNzhCMDAyNkE1
NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCMTFGQTNFNzdBMDAyNkE1NDUgLyogVW5pZmllZFNvdXJj
ZTMtbW0ubW0gKi87IH07CkBAIC0xMjIwLDcgKzEyMjEsNyBAQAogCQk3OTg3MkM0ODIyMUJCQUYz
MDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODcyQzQ3MjIxQkJBRUQwMDhDNjk2OSAvKiBKU0Jhc2VJbnRl
cm5hbC5oICovOyB9OwogCQk3OTlFRjdDNDFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2lu
TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTlF
RjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4
ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3OUEyMjgzNjFE
MzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQ
cm9maWxlLmggKi87IH07CisJCTc5QTIyODM2MUQzNUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFByb2Zp
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTIy
ODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUFCQjE3RTFFNUNDQjU3MDA0NUI5QTYg
LyogQWlyRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUFCQjE3QzFFNUNDQjU3MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQzMw
RkYxRjk5NTM2NDAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBQzMwRkUxRjk5
NTM2MzAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oICovOyB9Owog
CQk3OUFGMEJFNDFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFGMEJFMzFEM0VG
RDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM2NzQsNiArMzY3NSw4IEBACiAJCTUy
Q0QwRjY0MjI0MkY1NjkwMDRBMThBNSAvKiB0ZXN0ZGZnICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBp
bmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0ZGZnOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwogCQk1MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0ZGZnLmNwcDsgcGF0aCA9
IGRmZy90ZXN0ZGZnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJEMTMwOEYy
MjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgcGF0aCA9IGZvby5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJERDAwMDYy
NkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNl
bGluZUpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJERDAwMDcyNkUw
MzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBC
YXNlbGluZUpJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkVFRDc5
MjI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzYsNiArNjI3OSw4IEBACiAJCQkJ
NkI3NjdFN0EyNjc5MUYyNzAwMTdGOEQxIC8qIEFzc2VtYmx5SGVscGVyc1Nwb29sZXJzLmggKi8s
CiAJCQkJNzIzOTk4RjYyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5jcHAgKi8s
CiAJCQkJNzIzOTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5oICovLAor
CQkJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovLAor
CQkJCTUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLywKIAkJ
CQkwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNwcCAqLywKIAkJCQkw
RjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi8sCiAJCQkJNjVCODM5
MkQxQkFDQTlEMzAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmNwcCAqLywKQEAgLTk3MzAsNiAr
OTczNSw3IEBACiAJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1OTUwIC8qIERGR0Zsb3dNYXAuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVk
QXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdG
bHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJERDAwMDgyNkUwMzlCOTAwNTRFNDA4
IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTUxQUIzRDhC
RTAwQkJCOEU4IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY5Q0M4
OTE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzODZGRDdFMjZFODY3QjgwMEU0QzI4QiAvKiBUZW1wb3JhbFBsYWluVGltZS5oIGluIEhlYWRl
cnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxNSArMjAyLDE1IEBAIFJl
ZlB0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9tU3RydWMKICAgICBzd2l0Y2ggKHN0dWJJ
bmZvLmNhY2hlVHlwZSgpKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAg
ICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgTG9hZCwg
aWRlbnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBQcm94eWFibGVBY2Nl
c3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBMb2FkLCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlk
U2VsZk9mZnNldCwgc3R1YkluZm8uaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAg
ICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgogICAgICAgICBSRUxFQVNFX0FTU0VS
VChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICByZXR1cm4gQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmllciwgc3R1YkluZm8udS5i
eUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQo
KSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBSZXBsYWNl
LCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8uaW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7
Ci0gICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBJbkhpdCwgaWRl
bnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIG93bmVyLCBJbkhpdCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uaGFz
Q29uc3RhbnRJZGVudGlmaWVyKTsKQEAgLTE5ODUsMTQgKzE5ODUsMTAgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAvLyBTdHVmZiBmb3IgY3VzdG9t
IGdldHRlcnMvc2V0dGVycy4KICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNh
bGw7CiAKKwogICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNhbGN1bGF0
aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAgICAgICAvLyBleGNlcHRpb24gaGFu
ZGxpbmcgY2FsbCBzaXRlLgotICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkKLSAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdpc3Rl
cnM6OmxyKTsKLSNlbmRpZgotICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3Rh
dGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
KGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9T
dGFja0ZvckNhbGwoKTsKIAogICAgICAgICBhdXRvIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0
YWNrRm9yQ2FsbCA9IFsmXShBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUmIHNwaWxs
U3RhdGUsIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlKSB7CiAgICAgICAgICAgICBSZWdpc3RlclNl
dCBkb250UmVzdG9yZTsKQEAgLTIwNzksOCArMjA3NSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIEFTU0VSVCghKG51bWJlck9mUmVnc0Zv
ckNhbGwgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSk7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVn
aXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwogCi0gICAgICAgICAgICB1bnNpZ25l
ZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQotICAgICAgICAgICAgV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwp
OworICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0gV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRl
c0ZvckNhbGwpOwogCiAgICAgICAgICAgICBqaXQuc3ViUHRyKAogICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCkBA
IC0yMTM4LDYgKzIxMzMsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NH
ZW5lCiAKICAgICAgICAgICAgIGludCBzdGFja1BvaW50ZXJPZmZzZXQgPSAoY29kZUJsb2NrLT5z
dGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpIC0gc3RhdGUucHJlc2VydmVk
UmV1c2VkUmVnaXN0ZXJTdGF0ZS5udW1iZXJPZkJ5dGVzUHJlc2VydmVkIC0gc3BpbGxTdGF0ZS5u
dW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb247CiAgICAgICAgICAg
ICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKwogICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUgPSBpc0dl
dHRlcigpOwogICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxs
KHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7CiAKQEAgLTIyNjQsMTIgKzIyNjAsNyBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAKICAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJn
ZXRPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgICAgICBSZWdpc3RlclNldCBleHRy
YVJlZ2lzdGVyc1RvUHJlc2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAgaWYgKGNv
ZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1By
ZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCi0gICAgICAgICAgICBhdXRv
IHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdp
dGhvdXRFeGNlcHRpb25zKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAgICAgICBh
dXRvIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2Fs
bFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+KENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cigmdm0pLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGppdC5wcmVwYXJlQ2Fs
bE9wZXJhdGlvbih2bSk7CkBAIC0yMzY0LDEwICsyMzU1LDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmUuc2V0KGJhc2VHUFIpOwogICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZS5zZXQodmFsdWVSZWdzKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgICAgICAgICAgICAgaWYg
KGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0
ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgogICAgICAgICAg
ICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3Rh
dGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3RlcnNUb1By
ZXNlcnZlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBAIG9wX2dyb3Vw
IDpQcm9maWxlZEJpbmFyeU9wLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRUeXBlcywK
ICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJp
dGhQcm9maWxlCisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAg
ICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTMsNyArMzUzLDcg
QEAgb3BfZ3JvdXAgOlVuYXJ5SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgICAgIHNyY0RzdDogVmly
dHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9m
aWxlOiBVbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQ
cm9maWxlLioKICAgICB9CiAKIG9wIDp0b19vYmplY3QsCkBAIC0zODYsNyArMzg2LDcgQEAgb3Ag
Om5lZ2F0ZSwKICAgICAgICAgcmVzdWx0VHlwZTogUmVzdWx0VHlwZSwKICAgICB9LAogICAgIG1l
dGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUsCisgICAg
ICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3AgOm5vdCwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9y
Q2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9p
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjggQEAgVmFsdWVQcm9maWxlKiB2YWx1
ZVByb2ZpbGVGb3JJbXBsKEJ5dGVjbwogICAgICAgICByZXR1cm4gJm1ldGFkYXRhLm1fcHJvZmls
ZTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgordWludHB0cl90IHZhbHVlUHJv
ZmlsZU9mZnNldEZvcih1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCit7CisgICAgVU5VU0VEX1BB
UkFNKGNoZWNrcG9pbnRJbmRleCk7CisgICAgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2Rl
SUQgPT0gb3BfaXRlcmF0b3Jfb3BlbikgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRl
eCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1cm4gQnl0
ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOworICAgICAgICBjYXNl
IE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZk5leHRQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKEJ5dGVjb2Rl
OjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2tw
b2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0OiBy
ZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRSZXN1bHRQcm9maWxlKCk7Cisg
ICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJldHVybiBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mRG9uZVByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4
dDo6Z2V0VmFsdWU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mVmFsdWVQcm9m
aWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mUHJvZmlsZSgpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZU1ldGFk
YXRhPgogYm9vbCBoYXNWYWx1ZVByb2ZpbGVGb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEs
IHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDExICsxMTQsNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2
bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7CiB9CiAKLUNvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCi17Ci0g
ICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPihtX2Zh
c3RQYXRoU3RhcnQpOwotfQotCiBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBD
YWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0Rh
dGFJQygpKTsKQEAgLTIyNSw2ICsyMjAsMTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldE1heEFy
Z3VtZW50Q291bnRJbgogICAgIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSB2YWx1
ZTsKIH0KIAorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZv
OjpmYXN0UGF0aFN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVjdCgpICYmIGlz
VGFpbENhbGwoKSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVy
bmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQpOworfQorCiB2b2lkIENhbGxMaW5r
SW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRvIGhhbmRsZVNwZWNpZmljQ2FsbGVl
ID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKQEAgLTI5OCwyMyArMjk5LDExIEBAIHZvaWQg
Q2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGMKICAgICBtX2ZyYW1lU2h1ZmZsZURh
dGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewotICAgIHNldFVzZXNEYXRhSUNzKHVz
ZURhdGFJQyk7Ci0gICAgaWYgKGlzRGF0YUlDKCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsK
LSAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7Ci0g
ICAgfQotCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQ
YXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBh
dGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRo
OwogCi0gICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICBpZiAodXNlRGF0YUlDID09IFVzZURhdGFJ
Qzo6WWVzKSB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hSZWdpc3Rl
cigpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJ
bmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7IAogICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKQEAgLTMyMyw3ICszMTIsNyBAQCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAgICAgICBnb1BvbHltb3JwaGlj
ID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5bW9ycGhpY0NhbGxlZU1hc2spKTsKICAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc1Rh
aWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBh
cmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgZ29Qb2x5bW9ycGhpYy5saW5rKCZqaXQpOyAv
LyBQb2x5bW9ycGhpYyBzdHViIGhhbmRsZXMgdGFpbCBjYWxsIHN0YWNrIHByZXAuCiAgICAgICAg
ICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBv
ZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKQEAg
LTMzNiwxNCArMzI1LDE2IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmUKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2goQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG51bGxwdHIpKSk7CiAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNh
bGw7Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwp
IHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgY2FsbCA9
IGppdC5uZWFyVGFpbENhbGwoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsK
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAgICAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbGVlQ2hlY2spOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2Nh
bGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2NhbGxlZUxv
Y2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNo
ZWNrKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNTMsMTMgKzM0NCwzNCBAQCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgbnVsbHB0
cik7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKworICAgIGlmIChpc0RhdGFJQygp
KSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6Oklu
dmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJ
bmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywg
aXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENh
bGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVG
b3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwotICAgIHJl
dHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVz
ZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKKyAgICBzZXRVc2VzRGF0YUlD
cyhVc2VEYXRhSUM6Ok5vKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQs
IGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgVXNlRGF0YUlDOjpObywgaXNUYWlsQ2FsbCgpLCBX
VEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0
RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQ
YXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKIH0KIAogdm9pZCBD
YWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0KQpAQCAt
MzY5LDE3ICszODEsMzIgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0s
IAogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zm
c2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKK3Zv
aWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmIGpp
dCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBqaXQubW92ZShjYWxsTGlua0luZm9H
UFIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50
cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyhWTSYg
dm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSUmVnIGNh
bGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBtX2NvZGVPcmlnaW4gPSBD
b2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIHNldFVw
Q2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2FsbGVlR1BSKTsKKyAgICBtX2Rv
bmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBpZiAo
dW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkgeworICAgICAgICAvLyBGSVhN
RTogSXQnZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBzdHJ1Y3R1cmUu
CisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZs
ZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsKKyAgICB9Cisg
ICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlDLm1fY2FsbExp
bmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdn
ZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERp
cmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFp
c1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CiAKLSAg
ICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsK
LSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1p
dERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwo
KTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQp
OwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwgdGhpcyBpcyBh
IGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JU
YWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZhc3RQYXRo
KENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAg
ICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBzdGF0aWMgdm9p
ZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wgaXNEYXRh
SUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9
PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoKICAgICAgICAg
bV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsyNDksNiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAotICAgIEpJVFN0
dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zbG93U3R1Yi5n
ZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAgICAgIHJldHVy
biBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsKICAgICB9CiAK
LSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX21heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJfdCBtYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVibGljOgogICAg
IH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBt
X2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlvblR5cGUgewpA
QCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25OZWFy
Q2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxvY2F0aW9uOwog
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9zbG93UGF0
aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
bV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAKQEAgLTQyNCw2
ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaQogICAg
IHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3QgVW5saW5rZWRD
YWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsgLy8gQ3VycmVu
dGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxseSBwcm9kdWNl
IGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOworICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZsZURhdGE7Cit9
OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3OSw4ICsyNzksNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhW
TSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkK
ICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9oYXNCZWVuQ29t
cGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNlKQotICAg
ICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUoZmFsc2UpCiAgICAgLCBtX251bUNhbGxl
ZUxvY2FscyhvdGhlci5tX251bUNhbGxlZUxvY2FscykKICAgICAsIG1fbnVtVmFycyhvdGhlci5t
X251bVZhcnMpCiAgICAgLCBtX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKG90aGVyLm1fbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXApCkBAIC0zMDgsNiArMzA2LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxv
Y2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkp
OwogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKKworICAgIG1f
bGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxpbnRFeGVjdXRlQ291bnRl
cigpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQpAQCAt
MzE4LDcgKzMxOCw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEMK
ICAgICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVw
KCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKIAogICAgIGlmIChvdGhlci5tX3JhcmVEYXRhKSB7
CiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTMzNiw4ICszMzUsNiBA
QCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2RpZEZh
aWxKSVRDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZh
bHNlKQogICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9oYXNM
aW5rZWRPU1JFeGl0KGZhbHNlKQotICAgICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUo
ZmFsc2UpIAogICAgICwgbV9udW1DYWxsZWVMb2NhbHModW5saW5rZWRDb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpKQogICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1WYXJz
KCkpCiAgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQpAQCAtMzU5LDcgKzM1Niw5
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAgIEFTU0VS
VChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9sbGludEV4ZWN1dGVDb3Vu
dGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CisKICAgICB2bS5o
ZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcwLDcgKzM2OSw4IEBAIENv
ZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIC8vIHdlIGNhbid0IGdlbmVy
YXRlIGR1cmluZyB1bmxpbmtlZCBieXRlY29kZSBnZW5lcmF0aW9uLiBUaGlzIHByb2Nlc3MgaXMg
bm90IGFsbG93ZWQgdG8gZ2VuZXJhdGUgY29udHJvbAogLy8gZmxvdyBvciBpbnRyb2R1Y2UgbmV3
IGxvY2Fscy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB3ZSByZWx5IG9uIGxpdmVuZXNzIGFuYWx5
c2lzIHRvIGJlIHRoZSBzYW1lIGZvcgogLy8gYWxsIHRoZSBDb2RlQmxvY2tzIG9mIGFuIFVubGlu
a2VkQ29kZUJsb2NrLiBXZSByZWx5IG9uIHRoaXMgZmFjdCBieSBjYWNoaW5nIHRoZSBsaXZlbmVz
cyBhbmFseXNpcwotLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLgorLy8gaW5zaWRlIFVubGlu
a2VkQ29kZUJsb2NrLiBBbHNvLCBCYXNlbGluZSBKSVQgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiBh
bGwgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jaywKKy8vIHNvIHRoZSBieXRlY29k
ZSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBiZXR3ZWVuIENvZGVCbG9ja3Mgc2hhcmluZyBhbiBVbmxp
bmtlZENvZGVCbG9jay4KIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlu
a2VkQ29kZUJsb2NrLAogICAgIEpTU2NvcGUqIHNjb3BlKQogewpAQCAtNDcxLDYgKzQ3MSwyMSBA
QCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFr
OyBcCiAgICAgfQogCisgICAgdW5zaWduZWQgYmluYXJ5UHJvZmlsZUluZGV4ID0gMDsKKyAgICB1
bnNpZ25lZCB1bmFyeVByb2ZpbGVJbmRleCA9IDA7CisjZGVmaW5lIExJTktfV0lUSF9CSU5BUllf
QVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJ
QUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9
ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJpbmFyeVByb2ZpbGVJbmRleCsr
KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19XSVRIX1VOQVJZX0FS
SVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFM
SVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAm
bV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKHVuYXJ5UHJvZmlsZUluZGV4KyspOyBc
CisgICAgICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
IGluc3RydWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRv
JiBpbnN0cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9w
Y29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMsMTQgKzU0OCwxNCBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BD
cmVhdGVQcm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAg
IExJTksoT3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0g
ICAgICAgIExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElO
SyhPcEluYykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9B
UklUSF9QUk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJ
TEUoT3BNdWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikK
KyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAg
IExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJ
VEhfVU5BUllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FS
SVRIX1BST0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2OSw3
ICs3ODQsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAg
Ly8gcmVseSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1p
dHRlZCB0byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1v
cmUgYWNjdXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0
ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgLy8gSWYgdGhlIGNvbmN1
cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4gY29tcHV0
ZSBpdCBoZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAgLTc5Myw2ICs4MDcsNzggQEAgdm9p
ZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3duZXJFZGdlLnNl
dCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZtLCB0aGlzKSk7
CiB9CiAKKyNpZiBFTkFCTEUoSklUKQordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2Vk
QmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7CisgICAgc2V0SklU
Q29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8mIGpp
dENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAgICAgICAgIEhh
bmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAgaGFuZGxlci5u
YXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQp
KS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9CisgICAgfQor
CisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAg
ICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOworICAgICAg
ICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGppdENvZGUt
Pm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8g
ZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAgICAgIHN3aXRj
aCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6
Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29s
W2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7CisgICAg
ICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvID0g
KnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9hZC5nZXQoKSk7
CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXREYXRhLm1f
Y2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29k
ZUluZGV4KSk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFsaXplRGF0YUlD
KHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVn
VDIpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBjYWxs
TGlua0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKKyAg
ICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZv
ID0gKnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRyeS5wYXlsb2Fk
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBq
aXREYXRhLm1fc3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUsIENvZGVP
cmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAg
c3R1YkluZm8tPmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyh0aGlzLCB1
bmxpbmtlZFN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQ
b29sW2ldID0gc3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsOiB7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpGdW5jdGlvbkV4cHI6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAg
IGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5kZXgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBHbG9iYWxD
b2RlOgorICAgIGNhc2UgTW9kdWxlQ29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgorICAgICAgICBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZ1bmN0aW9uQ29kZToKKyAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0
byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgorICAgICAg
ICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBtX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYmIERGRzo6bWln
aHRJbmxpbmVGdW5jdGlvbih0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYg
KGppdENvZGUtPm1faXNTaGFyZWFibGUgJiYgIXVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5r
ZWRCYXNlbGluZUNvZGUgJiYgT3B0aW9uczo6dXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZygpKQor
ICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlID0gV1RG
TW92ZShqaXRDb2RlKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCiBDb2RlQmxvY2s6On5D
b2RlQmxvY2soKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtODczLDYgKzk1OSwyNyBAQCBD
b2RlQmxvY2s6On5Db2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKK2Jvb2wg
Q29kZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZpcnR1YWxSZWdp
c3RlciByZWcpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBuZWVkcyB0byBjb3JyZXNwb25kIHRvIHdo
YXQgd2UgZG8gaW5zaWRlIHNldENvbnN0YW50UmVnaXN0ZXJzLgorICAgIHN3aXRjaCAodW5saW5r
ZWRDb2RlQmxvY2soKS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKSkgewor
ICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgIGNhc2UgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcjogeworICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gdW5saW5rZWRDb2RlQmxvY2soKS0+Z2V0Q29uc3RhbnQocmVnKTsKKyAgICAgICAg
aWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlmIChjZWxs
LT5pbmhlcml0czxTeW1ib2xUYWJsZT4odm0oKSkgfHwgY2VsbC0+aW5oZXJpdHM8SlNUZW1wbGF0
ZU9iamVjdERlc2NyaXB0b3I+KHZtKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkxpbmtUaW1lQ29uc3RhbnQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
IFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBG
aXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IEZpeGVk
VmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbikKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTg5Miw2ICs5OTksNyBAQCBW
ZWN0b3I8dW5zaWduZWQ+IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSCiAgICAgICAgIHN3aXRjaCAo
cmVwcmVzZW50YXRpb24pIHsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
OkxpbmtUaW1lQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb25zdGFudCA9IGdsb2JhbE9iamVjdC0+
bGlua1RpbWVDb25zdGFudChzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50Pihjb25zdGFudC5h
c0ludDMyQXNBbnlJbnQoKSkpOworICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50LmlzQ2VsbCgp
KTsgLy8gVW5saW5rZWQgQmFzZWxpbmUgSklUIHJlcXVpcmVzIHRoaXMuCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOgogICAg
ICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKQEAgLTE1MTQsNyAr
MTYyMiw3IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJsb2NrOjplbnN1cmVKSVQKICAgICBy
ZXR1cm4gKm1faml0RGF0YTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVK
SVRJbmxpbmVDYWNoZXMoKQordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVz
KCkKIHsKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewogICAgICAg
ICBmb3IgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0lu
Zm9zKQpAQCAtMTUyNSw2ICsxNjMzLDIwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJhc2Vs
aW5lSklUSW5saW4KICAgICAgICAgICAgIHN0dWJJbmZvLT52aXNpdFdlYWtSZWZlcmVuY2VzKGxv
Y2tlciwgdGhpcyk7CiAgICAgICAgIH0KICAgICB9CisKKworI2lmIEFTU0VSVF9FTkFCTEVECisg
ICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICAvLyBW
ZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3JlIHZpcnR1
YWwgY2FsbHMuCisgICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBzdGF0
aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxDYWxsTGlu
a0luZm9zKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7
CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtdIChKU0Nl
bGwqKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgfQorI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTUzNCw0
NiArMTY1NiwxMiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAK
ICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29s
IGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdy
YWRlOwotICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8g
SWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJl
cGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUg
SklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAg
ICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQo
KS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBv
cHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAgICAgICAg
ICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJbnQ6OnNl
dEVudHJ5cG9pbnQodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2Vw
dGlvbkhhbmRsZXJzKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5s
aW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2Vw
dGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFu
ZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtl
ZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIu
aW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2Rl
KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHVubGlu
a0luY29taW5nQ2FsbHMoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8g
Y2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBh
bGwgY29tcGlsZXIgdGhyZWFkcwotICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50
ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNv
ZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlz
IHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9z
LgotICAgICAgICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUg
PSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYKLSAgICAK
ICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAgICAgICAg
IGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYg
KCEhaml0Q29kZSgpKQotICAgICAgICBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7
CisgICAgICAgIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShERkdfSklUKQpAQCAtMTU5NCw3ICsxNjgyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KAogICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
azoKLSAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7Cisg
ICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y291bnQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAg
ICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CkBAIC0xNjc1LDMwICsx
NzYzLDYgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgogICAgIHJl
dHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUsIGNv
ZGVPcmlnaW4pOwogfQogCi1KSVRBZGRJQyogQ29kZUJsb2NrOjphZGRKSVRBZGRJQyhCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2FkZElDcy5h
ZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklUTXVsSUMo
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9t
dWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJ
VFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2Nr
ZXIpLm1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVROZWdJQyogQ29kZUJsb2Nr
OjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0
YShsb2NrZXIpLm1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCiBTdHJ1Y3R1cmVTdHVi
SW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewog
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKQEAgLTMxMzMsNyArMzE5Nyw3
IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lmIEVOQUJM
RShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0dXJuIEpJ
VDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklUOjpmcmFt
ZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzM0OSwxMyArMzQxMywxMyBA
QCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAgc3dpdGNo
IChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1cm4gJnBj
LT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0
dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBj
YXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhp
cykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAgIHJldHVy
biAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAg
ICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwog
ICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERpdj4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKICAgICB9CkBAIC0zMzY3LDExICszNDMxLDExIEBAIFVuYXJ5QXJpdGhQcm9maWxlKiBDb2Rl
QmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAgICAg
Y2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTmVnYXRl
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5jOgotICAg
ICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEZWM+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8
T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzQ3MiwyMiArMzUzNiwxNiBAQCB2b2lkIENvZGVCbG9j
azo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBD
b2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9y
aWdpbk1hcD4mJiBtYXApIAoteyAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7Ci0gICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZN
b3ZlKG1hcCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW5k
UEModm9pZCogcGMpCiB7CisgICAgaWYgKGF1dG8qIHBjVG9Db2RlT3JpZ2luTWFwID0gbV9qaXRD
b2RlLT5wY1RvQ29kZU9yaWdpbk1hcCgpKSB7CisgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENv
ZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBwY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBjKSkKKyAg
ICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAgIH0KKwogICAgIHsKICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBpZiAoYXV0byogaml0RGF0
YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICAgICAgaWYgKGppdERhdGEtPm1fcGNUb0Nv
ZGVPcmlnaW5NYXApIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxDb2RlT3Jp
Z2luPiBjb2RlT3JpZ2luID0gaml0RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBj
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47Ci0gICAgICAgICAgICB9
Ci0KICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDogaml0RGF0
YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnRhaW5z
UEMocGMpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxDb2RlT3Jp
Z2luPihzdHViSW5mby0+Y29kZU9yaWdpbik7CkBAIC0zNTIxLDI4ICszNTc5LDE0IEBAIHN0ZDo6
b3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0ZWNvZGVJ
bmRleDsKIH0KIAotaW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRo
cmVzaG9sZCkKLXsKLSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXpl
KCkpIHsKLSAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICByZXR1cm4g
dGhyZXNob2xkOwotICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1cm4gdGhy
ZXNob2xkICogNDsKLSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1cm4gdGhy
ZXNob2xkIC8gMjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IHRocmVzaG9sZDsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkKK3ZvaWQg
Q29kZUJsb2NrOjpqaXRTb29uKCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3
VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldh
cm1VcCgpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hv
bGQodW5saW5rZWRDb2RlQmxvY2soKS0+dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9s
ZEZvckpJVFNvb24oKSksIHRoaXMpOwogfQogCi12b2lkIENvZGVCbG9jazo6aml0U29vbigpCit2
b2lkIENvZGVCbG9jazo6aml0TmV4dEludm9jYXRpb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRl
Q291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9s
ZEZvckpJVFNvb24oKSksIHRoaXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+c2V0TmV3
VGhyZXNob2xkKDAsIHRoaXMpOwogfQogCiBib29sIENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1U
cmFwQnJlYWtwb2ludHMoKSBjb25zdApAQCAtMzU4OCwyOCArMzYzMiw4IEBAIHZvaWQgQ29kZUJs
b2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRvdWJsZSBudW1TdWJzID0gMC4wOwogICAgIGRv
dWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKLSAgICBhdXRvIGNvdW50SUNzID0gWyZdIChDb2Rl
QmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IGNvZGVCbG9j
ay0+bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKEpJVEFkZElDKiBhZGRJQyA6
IGppdERhdGEtPm1fYWRkSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtQWRkcysrOwotICAgICAg
ICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMgOiBqaXREYXRhLT5tX211bElD
cykgewotICAgICAgICAgICAgICAgIG51bU11bHMrKzsKLSAgICAgICAgICAgICAgICB0b3RhbE11
bFNpemUgKz0gbXVsSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZvciAoSklUTmVnSUMqIG5lZ0lDIDogaml0RGF0YS0+bV9uZWdJQ3MpIHsKLSAgICAgICAgICAg
ICAgICBudW1OZWdzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxOZWdTaXplICs9IG5lZ0lDLT5j
b2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJVFN1YklDKiBz
dWJJQyA6IGppdERhdGEtPm1fc3ViSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtU3VicysrOwot
ICAgICAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJQy0+Y29kZVNpemUoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVCbG9jayop
IHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmUtaW1wbGVtZW50IHRoaXMgdXNpbmcg
SklUQ29kZS4KICAgICB9OwogICAgIGhlYXAoKS0+Zm9yRWFjaENvZGVCbG9jayhjb3VudElDcyk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCBjbGFzcyBKU01vZHVsZUVudmly
b25tZW50OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTExJbnRQcm90b3R5
cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OwogY2xhc3MgTWV0YWRhdGFUYWJsZTsK
LWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBj
bGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAogREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEpOwogCkBA
IC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBu
dW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRl
OgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6
CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAg
ICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXND
aGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBh
ZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2Nr
KiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1f
YWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoKICAgICBi
b29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0
YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZp
cnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRk
aW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBp
cyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXND
b25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7
Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAg
ICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAg
LTI2OCwyMyArMjU5LDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUKQogICAgIHN0cnVjdCBK
SVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJhZzxTdHJ1
Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAgICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJ
Q3M7Ci0gICAgICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Ci0gICAgICAgIEJhZzxKSVROZWdJ
Qz4gbV9uZWdJQ3M7Ci0gICAgICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7CiAgICAgICAgIEJh
ZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxMaW5rZWRM
aXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1f
aW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3JwaGljQ2Fs
bE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNv
bWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJs
ZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFi
bGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBD
VG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29sIG1faGFz
Q2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRM
aXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2ppdENvZGVN
YXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29sOworICAg
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAgIH07CiAK
KyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENv
ZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkpCkBAIC0y
OTMsMjIgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0
YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAKLSAgICBKSVRBZGRJQyogYWRkSklU
QWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJp
bmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRo
UHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUq
KTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9y
Pjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9m
aWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQotCi0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5
cGU+Ci0gICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUp
IHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNf
c2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRO
ZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRK
SVROZWdJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9y
LCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUU3ViSUMqIGFkZE1hdGhJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2Zp
bGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdERhdGEpOyB9CiAKICAgICBTdHJ1Y3R1cmVT
dHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSwgQ29kZU9yaWdpbik7CiAKQEAgLTMyMiwx
OCArMjk2LDggQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFw
IHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0luZm8q
IGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0g
ICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAgIHsKLSAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBlbnN1cmVK
SVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKLSAgICB9
Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0gICAgewotICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBjb25zdCBKSVRDb2RlTWFwJiBq
aXRDb2RlTWFwKCk7CiAKLSAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVl
X3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2lu
PiBmaW5kUEModm9pZCogcGMpOwogCiAgICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJl
Z2lzdGVyU2V0KTsKQEAgLTQ3Miw2ICs0MzYsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgbmFt
ZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9CiAgICAgdW5zaWduZWQgbnVtYmVy
T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fYXJndW1l
bnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9udW1QYXJh
bWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNlSklUKCkpOwpAQCAtNTY5LDggKzUzNCwxMCBAQCBwdWJs
aWM6CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVn
aXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgp
OyB9CisgICAgYm9vbCBpc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZpcnR1YWxS
ZWdpc3RlcikgY29uc3Q7CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJlZykg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKHJlZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
biBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KGluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JC
dWZmZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0YW50UmVn
aXN0ZXJzKSArIGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5T2Zmc2V0
KCk7IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkg
eyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJP
ZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC01
OTUsMjIgKzU2MiwyMiBAQCBwdWJsaWM6CiAgICAgLy8gSnVtcCBUYWJsZXMKIAogI2lmIEVOQUJM
RShKSVQpCi0gICAgU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5k
ZXgpCisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFi
bGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBU
YWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFudFBvb2wo
KQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAgICAgcmV0
dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wuZGF0YSgp
OwogICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRh
YmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3dp
dGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIAotI2lmIEVOQUJM
RShKSVQpCi0gICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwotICAg
ICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07Ci0gICAgfQorI2lmIEVOQUJMRShERkdfSklUKQorICAgIFN0cmluZ0p1bXBUYWJsZSYgZGZn
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFi
bGUmIGRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CiAjZW5kaWYKKwogICAgIHNp
emVfdCBudW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0
dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
cygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIApAQCAtNjMyLDIx
ICs1OTksMjAgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xkUmVhY2hl
ZCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNoZWNrSWZU
aHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOworICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1
dGVDb3VudGVyLT5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKICAgICB9CiAK
ICAgICB2b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCiAgICAgewotICAgICAgICBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICAgICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyLT5kZWZlckluZGVmaW5pdGVseSgpOwogICAgIH0KIAotICAgIGludDMyX3QgdGhyZXNo
b2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2FybVVwKCk7
CiAgICAgdm9pZCBqaXRTb29uKCk7CisgICAgdm9pZCBqaXROZXh0SW52b2NhdGlvbigpOwogCiAg
ICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAg
ICAgIHJldHVybiAqbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIH0KIAogICAgIHR5cGVkZWYg
SGFzaE1hcDxzdGQ6OnR1cGxlPFN0cnVjdHVyZUlELCB1bnNpZ25lZD4sIEZpeGVkVmVjdG9yPExM
SW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVjdHVyZVdh
dGNocG9pbnRNYXA7CkBAIC03OTcsNiArNzYzLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNE
ZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CiAg
ICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1Z2dlclJl
cXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVxdWVzdHMp
OyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpOwog
ICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykKQEAgLTgz
OCw2ICs4MDUsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2NrIG1fbG9j
azsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJpdGZpZWxk
IGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBFTkFCTEUo
SklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBERkc6OkNh
cGFiaWxpdHlMZXZlbApAQCAtODQ3LDggKzgxNSw2IEBAIHB1YmxpYzoKICAgICBib29sIG1fZGlk
RmFpbEZUTENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZU
TCA6IDE7CiAKLSAgICBib29sIG1faGFzTGlua2VkT1NSRXhpdCA6IDE7Ci0gICAgYm9vbCBtX2lz
RWxpZ2libGVGb3JMTEludERvd25ncmFkZSA6IDE7CiAgICAgYm9vbCBtX3Zpc2l0Q2hpbGRyZW5T
a2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAgLy8gSW50ZXJuYWwgbWV0aG9kcyBm
b3IgdXNlIGJ5IHZhbGlkYXRpb24gY29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBpdCB3YXNu
J3QKQEAgLTkwNywxNiArODczLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mTWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fbWV0YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9u
c1Jhd1BvaW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3Ry
dWN0aW9uc1Jhd1BvaW50ZXIpOyB9CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9y
RnV6emluZ0Vhcmx5UmV0dXJuKCkKLSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJl
IHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0gICAgICAg
IHJldHVybiAhbV91bmxpbmtlZENvZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAgfQorICAg
IGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7IHJldHVy
biBtX3VubGlua2VkQ29kZS0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1
cm4oKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVz
KCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVD
YWNoZXMoKTsKKyAgICB2b2lkIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKQEAg
LTEwMTAsNyArOTcyLDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1f
bGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2Rl
OwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+
IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAv
LyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0
aGUgcHJvZmlsZWQgY29kZSBibG9jawpAQCAtMTAyOSw3ICs5OTMsNyBAQCBwcml2YXRlOgogCiAg
ICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAgICBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9OwogCiAg
ICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAgICAgdWlu
dDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsOCArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCYXNl
bGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRN
ZXRhZGF0YVRhYmxlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkgKzQyLDcg
QEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlmIChtX21l
dGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9y
RWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9wcm9maWxl
LCBmYWxzZSk7IH0pOwotCiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJ
TEUoVklTSVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8
T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1Nyw2IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwzOCBAQCB2
b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQogCisjaWYg
RU5BQkxFKEpJVCkKK0FMV0FZU19JTkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJsb2NrOjpq
aXRDb2RlTWFwKCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2Rl
LmdldCgpKS0+bV9qaXRDb2RlTWFwOworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJs
ZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sK
KyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBU
YWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgp
KS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxv
Y2s6OmRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0
VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6
SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBl
KCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRD
b2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3
MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3Jh
cChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQogICAgIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAg
Ym9vbCBFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9j
ayA/IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQpOworICAg
IHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAgICBtX2Nv
dW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRo
aXMsIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxz
ZS4KICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwog
ICAgIGJvb2wgaGFzQ3Jvc3NlZFRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlciA+
PSAwOyB9Ci0gICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVC
bG9jayopOworICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2Rl
QmxvY2sqID0gbnVsbHB0cik7CiAgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwogICAgIGRv
dWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENv
dW50KSArIG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpA
QCAtODYsMTMgKzg2LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVCB0aHJlc2hvbGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChU
IHRocmVzaG9sZCkKICAgICB7Ci0gICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwotICAgICAg
ICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
KCkgJiYgZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2Jq
ZWN0LT53ZWFrUmFuZG9tSW50ZWdlcigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5D
aGVja3BvaW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBt
YXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAgIGludDMy
X3QgbWF4VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50
cygpOwogICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAgICAgICAg
dGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xkOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEu
aAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBH
ZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1v
ZGVNZXRhZGF0YVVuc2V0KSA9PSAxMik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJy
YXlMZW5ndGggeworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBh
cnJheVByb2ZpbGUpOyB9CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07CiBzdGF0
aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsK
QEAgLTg4LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdl
dEJ5SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7
IC8vIFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFk
YXRhRGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5z
ZXRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1v
ZGU7CkBAIC0xMTcsNiArMTE5LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGEgewogICAg
ICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhUHJvdG9Mb2FkIHByb3RvTG9hZE1vZGU7CiAgICAgfTsK
ICAgICBHZXRCeUlkTW9kZSBtb2RlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2Rl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9
CiAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsKIH07CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3Rh
dHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIEdldEJ5U3RhdHVzIEdl
dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE5v
SW5mb3JtYXRpb24pOwogICAgICAgICAKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6
IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0
dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZtKCkpOwog
ICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0
eSgpKQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
ID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQg
R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEcKIAogICAgIC8vIExldCdzIHN0b3Jl
IHRoZSByZXVzZWQgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4gQWZ0ZXIgdGhhdCwgd2UgY2FuIHVz
ZSBhbGxvY2F0ZWQgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgYWxsb2NhdG9yLnByZXNl
cnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
OjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOworICAgICAgICBhbGxvY2F0b3IucHJl
c2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CiAKICAgICBpZiAoR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coImJhc2VH
UFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsKQEAgLTIyNSwxMiArMjI1LDkgQEAgdm9pZCBHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9y
Q0NhbGwuc2V0KHJlZyk7CiAgICAgZm9yIChGUFJSZWcgcmVnIDogZnBTY3JhdGNoKQogICAgICAg
ICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CisgICAgaWYgKGppdC5jb2RlQmxv
Y2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQo
c3R1YkluZm8ubV9zdHViSW5mb0dQUik7CiAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLmV4
Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckNDYWxsKCkpOwotI2lmIENQ
VShBUk02NCkKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKLSAg
ICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZv
ckNDYWxsLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCiAKICAgICBBY2Nlc3NDYXNl
U25pcHBldFBhcmFtcyBwYXJhbXMoc3RhdGUubV92bSwgV1RGTW92ZShyZWdzKSwgV1RGTW92ZShn
cFNjcmF0Y2gpLCBXVEZNb3ZlKGZwU2NyYXRjaCkpOwogICAgIHNuaXBwZXQtPmdlbmVyYXRvcigp
LT5ydW4oaml0LCBwYXJhbXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyAr
MTM5LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgogICAgICAg
ICByZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBl
OjpJbkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8t
Pm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSk7CiAgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkp
CiAgICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsMTYgQEAgQUxX
QVlTX0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vz
cyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1
YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWlj
IHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0
byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKICAgICAKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0yMzMsMjMg
KzIzOCwzMSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3RlCiAgICAg
cmV0dXJuIGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJlZzsKIH0K
IAotYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5s
aW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0K
IAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNl
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkp
OworICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBz
dHViSW5mbywgb2Zmc2V0KSk7CisKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewor
ICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJl
U3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQogCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIApAQCAtMjc5LDIyICsyOTIsMjUgQEAgYm9vbCBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UgogICAgIHJldHVybiBsaW5rZWRDb2Rl
SW5saW5lOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVB
Y2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgQVNTRVJUKGFy
cmF5LT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXND
b25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgaWYgKCFoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWhhc0FueUFycmF5U3RvcmFnZShhcnJheS0+aW5k
ZXhpbmdUeXBlKCkpICYmIGFycmF5LT5pbmRleGluZ1R5cGUoKSAhPSBBcnJheUNsYXNzOwogfQog
Ci1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
QXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgQVNTRVJUKGlzQ2FjaGVhYmxlQXJyYXlMZW5n
dGgoc3R1YkluZm8sIGFycmF5KSk7CisgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGlzQ2Fj
aGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywgYXJyYXkpKTsKIAogICAgIGlm
ICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0zMTksMTcgKzMzNSwyMCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxl
bmd0aChTCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLWJvb2wgSW5saW5lQWNj
ZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Citib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICBpZiAoIXN0dWJJ
bmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAg
aWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsK
IH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0
aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewot
ICAgIEFTU0VSVChpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChzdHViSW5mbykpOworICAgIEFTU0VS
VF9VTlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0
dWJJbmZvKSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzYzLDEzICszODIsMTggQEAgYm9vbCBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKAogfQogCiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIXN0dWJJbmZv
Lmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYg
KGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gVGhlc2UgZHluYW1pYyBzbG90
cyBnZXQgZmlsbGVkIGluIGJ5IFN0cnVjdHVyZVN0dWJJbmZvLiBOb3RoaW5nIGVsc2UgdG8gZG8u
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIEdQUlJlZyBiYXNlID0gc3R1Yklu
Zm8uYmFzZUdQUjsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVncygp
OwogCkBAIC00MDYsMTMgKzQzMCwxMyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjCiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgLy8g
SWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQg
KGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGly
ZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2Rl
UHRyLgotICAgICAgICBpZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAg
ICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBz
dHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29k
ZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMg
bWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAg
ICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNv
ZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgog
ICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09
IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1YkluZm8uc3Rh
cnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxI
ZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnN0dWJJbmZvKSwgc3R1YkluZm8u
bV9zdHViSW5mb0dQUik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGlu
ZVB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1wKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gc3R1YkluZm8uZG9uZUxvY2F0
aW9uOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKQEAgLTQyMSw3ICs0NDUsOSBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nlc3M6IGxp
bmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBz
dHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2Rl
LgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzQsOCArNDYwLDE0IEBAIHZvaWQgSW5s
aW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICB9KSwgIklubGluZUFjY2Vzczog
bGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpyZXNldFN0
dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit2b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKKyAgICBpZiAoY29kZUJs
b2NrLT51c2VEYXRhSUMoKSAmJiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCkgeworICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSBzdHViSW5mby5zbG93UGF0
aFN0YXJ0TG9jYXRpb247CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLgorICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1Yklu
Zm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQo
Q0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAvLyBXZSBk
b24ndCBuZWVkIGEgbm9wIHNsZWQgaGVyZSBiZWNhdXNlIG5vYm9keSBzaG91bGQgYmUganVtcGlu
ZyBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCiAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1w
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vz
cy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDE0ICs5OSwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBzdGQ6Om1heChzaXplLCBzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7
CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoU3Ry
dWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGlj
IGJvb2wgY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwg
UHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5UmVw
bGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAg
ICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiwg
SlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKFN0cnVj
dHVyZVN0dWJJbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1
Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJ
bkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBib29s
IGdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGljIGJv
b2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgY2FuR2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwg
UHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5UmVw
bGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5
T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGlzQ2Fj
aGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAg
c3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJbkFjY2VzcyhD
b2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBi
b29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7
CiAKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGlu
ZUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CiAgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1YkFzSnVt
cEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0
YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBPVkVSTE9BRF9CSVRXSVNF
X09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJdGVyYXRpb25Nb2RlTWV0YWRhdGEg
ewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSXRlcmF0aW9uTW9kZU1l
dGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBl
KHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRpb25Nb2RlKSk7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50
Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExM
SW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KIAogcHJpdmF0ZToKICAgICB1aW50
cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgeyB1bmxpbmtlZEJpdCB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDE3IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
Yml0V2lkdGhGb3JNYXgKICAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAogICAgIG1hY3JvKE9w
SXRlcmF0b3JOZXh0KSBcCiAKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQklOQVJZX0FS
SVRIX1BST0ZJTEUobWFjcm8pIFwKKyAgICBtYWNybyhPcEFkZCkgXAorICAgIG1hY3JvKE9wTXVs
KSBcCisgICAgbWFjcm8oT3BEaXYpIFwKKyAgICBtYWNybyhPcFN1YikgXAorCisjZGVmaW5lIEZP
Ul9FQUNIX09QQ09ERV9XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKKyAgICBtYWNy
byhPcEluYykgXAorICAgIG1hY3JvKE9wRGVjKSBcCisgICAgbWFjcm8oT3BOZWdhdGUpIFwKKwog
CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInR5cGUtbGltaXRzIikKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlOjpzdWNjZWVkKCkKIHsKICAgICByZXN0b3JlU2NyYXRjaCgpOwog
ICAgIGlmIChqaXQtPmNvZGVCbG9jaygpLT51c2VEYXRhSUMoKSkKLSAgICAgICAgaml0LT5yZXQo
KTsKKyAgICAgICAgaml0LT5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby0+
bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mRG9uZUxvY2F0aW9uKCkp
LCBKU0ludGVybmFsUHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKGpp
dC0+anVtcCgpKTsKIH0KQEAgLTExMCw2ICsxMTAsOCBAQCBjb25zdCBSZWdpc3RlclNldCYgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7CiAKICAgICAgICAg
bV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1fbGl2ZVJlZ2lzdGVyc1RvUHJl
c2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9jYXRvci0+dXNlZFJlZ2lzdGVy
cygpKTsKKyAgICAgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQorICAgICAg
ICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5hZGQoc3R1YkluZm8tPm1fc3R1YkluZm9HUFIp
OwogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGw7CkBAIC0x
MjgsMTEgKzEzMCwxMiBAQCBhdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2VydmVMaXZl
CiAgICAgfTsKIH0KIAotYXV0byBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZlTGl2ZVJl
Z2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29uc3QgUmVnaXN0ZXJTZXQm
IGV4dHJhKSAtPiBTcGlsbFN0YXRlCithdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2Vy
dmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucygpIC0+IFNwaWxs
U3RhdGUKIHsKICAgICBSZWdpc3RlclNldCBsaXZlUmVnaXN0ZXJzID0gYWxsb2NhdG9yLT51c2Vk
UmVnaXN0ZXJzKCk7CisgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQorICAg
ICAgICBsaXZlUmVnaXN0ZXJzLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7CiAgICAgbGl2
ZVJlZ2lzdGVycy5leGNsdWRlKGNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgbGl2ZVJlZ2lz
dGVycy5tZXJnZShleHRyYSk7CiAKICAgICBjb25zdGV4cHIgdW5zaWduZWQgZXh0cmFTdGFja1Bh
ZGRpbmcgPSAwOwogICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3Rl
clByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3Rl
cnNUb1N0YWNrRm9yQ2FsbCgqaml0LCBsaXZlUmVnaXN0ZXJzLCBleHRyYVN0YWNrUGFkZGluZyk7
CkBAIC01OTYsMTYgKzU5OSwxMSBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGlj
QWNjZXNzCiAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAgIHN0YXRlLmppdCA9
ICZqaXQ7CiAKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewotICAgICAgICBpZiAo
c3RhdGUubV9kb2VzSlNHZXR0ZXJTZXR0ZXJDYWxscykgewotICAgICAgICAgICAgLy8gV2UgaGF2
ZSBubyBndWFyYW50ZWUgdGhhdCBzdGFjay1wb2ludGVyIGlzIHRoZSBleHBlY3RlZCBvbmUuIFRo
aXMgaXMgbm90IGEgcHJvYmxlbSBpZiB3ZSBkbyBub3QgaGF2ZSBKUyBnZXR0ZXIgLyBzZXR0ZXIg
Y2FsbHMgc2luY2Ugc3RhY2stcG9pbnRlciBpcwotICAgICAgICAgICAgLy8gYSBjYWxsZWUtc2F2
ZSByZWdpc3RlciBpbiB0aGUgQyBjYWxsaW5nIGNvbnZlbnNpb24uIEhvd2V2ZXIsIG91ciBKUyBl
eGVjdXRhYmxlIGNhbGwgZG9lcyBub3Qgc2F2ZSBzdGFjay1wb2ludGVyLiBTbyB3ZSBhcmUgYWRq
dXN0aW5nIHN0YWNrLXBvaW50ZXIgYWZ0ZXIKLSAgICAgICAgICAgIC8vIEpTIGdldHRlciAvIHNl
dHRlciBjYWxscy4gQnV0IHRoaXMgY291bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlIGluaXRpYWwg
c3RhY2stcG9pbnRlciwgYW5kIG1ha2VzIFBBQyB0YWdnaW5nIGJyb2tlbi4KLSAgICAgICAgICAg
IC8vIFRvIGVuc3VyZSBQQUMtdGFnZ2luZyB3b3JrLCB3ZSBmaXJzdCBhZGp1c3Qgc3RhY2stcG9p
bnRlciB0byB0aGUgYXBwcm9wcmlhdGUgb25lLgotICAgICAgICAgICAgaml0LmFkZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGppdC50YWdSZXR1cm5BZGRy
ZXNzKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKKyAgICBpZiAoIWNhbkJlU2hhcmVkICYmIEFTU0VSVF9FTkFCTEVEKSB7CisgICAgICAgIGpp
dC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1BvaW50
ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgYXV0byBvayA9IGppdC5icmFuY2hQ
dHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAg
ICAgICAgb2subGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0ZS5wcmVzZXJ2ZWRSZXVzZWRS
ZWdpc3RlclN0YXRlID0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUxLDcgKzI1MSw3IEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewogICAgIGNv
bnN0IFJlZ2lzdGVyU2V0JiBjYWxjdWxhdGVMaXZlUmVnaXN0ZXJzRm9yQ2FsbEFuZEV4Y2VwdGlv
bkhhbmRsaW5nKCk7CiAKICAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3Rh
Y2tGb3JDYWxsKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7Ci0gICAgU3BpbGxTdGF0
ZSBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKGNv
bnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7CisgICAgU3BpbGxTdGF0ZSBwcmVzZXJ2ZUxp
dmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAgICB2b2lk
IHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRpb24o
Y29uc3QgU3BpbGxTdGF0ZSYpOwogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3Rh
Y2tGb3JDYWxsKGNvbnN0IFNwaWxsU3RhdGUmLCBjb25zdCBSZWdpc3RlclNldCYgZG9udFJlc3Rv
cmUgPSB7IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3Rh
dHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTAgKzE4MCwx
MCBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7CiAg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOwogICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh1aWQpOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQot
ICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KHVpZCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8t
PmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7CisgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7
CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4g
UHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0dWJJbmZvLT5tX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICByZXR1
cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0cnVjdHVyZSwg
b2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSksICpzdHViSW5mbyk7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5l
cy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiUG9s
eW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTY1LDkgKzY2LDkg
QEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKAogICAgIEFTU0VSVCho
YXNDb25zdGFudElkZW50aWZpZXIpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlw
ZTo6R2V0QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53
cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsK
KyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5m
bzo6aW5pdEFycmF5TGVuZ3RoKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlcikK
QEAgLTg3LDkgKzg4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRSZXBs
YQogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KTsKICAgICBzZXRD
YWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlKTsKICAgICBtX2lkZW50
aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7
CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAg
dS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7
CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBDYWNo
ZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC05Nyw5ICs5OCw5IEBAIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGMKICAgICBBU1NFUlQobV9jYWNoZVR5cGUgPT0g
Q2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpJ
bkJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVC
YXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAg
YnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRl
cmVmKCkKQEAgLTIzNiw3ICsyMzcsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0cnVjdHVy
ZVN0dWJJbmZvCiAgICAgICAgIC8vIHdlJ3JlIGJ1ZmZlcmVkIGlzIGJlY2F1c2Ugd2UgcmVseSBv
biBpdCB0byByZXNldCBkdXJpbmcgR0MgaWYgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlCiAg
ICAgICAgIC8vIGlzIGNvbGxlY3RlZC4KICAgICAgICAgbV9pZGVudGlmaWVyID0gbnVsbHB0cjsK
LSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3
ZSBnZW5lcmF0ZWQgc29tZSBjb2RlIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBhdHRlbXB0IHRvIHJl
cGF0Y2ggaW4gdGhlIGZ1dHVyZSB1bnRpbCB3ZQogICAgICAgICAvLyBnYXRoZXIgZW5vdWdoIGNh
c2VzLgpAQCAtMjUxLDcgKzI1Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNv
bnN0IENvbmMKIHsKICAgICBjbGVhckJ1ZmZlcmVkU3RydWN0dXJlcygpOwogICAgIG1faWRlbnRp
ZmllciA9IG51bGxwdHI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7
CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKIAogICAgIGlmIChtX2NhY2hl
VHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CkBAIC0yODUsNiArMjg2
LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgICAgICBy
ZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQ
dXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJ
bkJ5SWQ6CkBAIC0zNjAsOCArMzYyLDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRX
ZWFrUmVmZXJlbgogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0gICAgaWYgKG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgaXNWYWxpZCAmPSB2bS5oZWFwLmlz
TWFya2VkKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgaWYgKFN0cnVj
dHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpCisgICAgICAg
IGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpOwogICAgIGlmIChtX2NhY2hl
VHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIGlzVmFsaWQgJj0gdS5zdHViLT52aXNp
dFdlYWsodm0pOwogCkBAIC0zNzUsOCArMzc3LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRXZWFrUmVmZXJlbgogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0g
ICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgbV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpCisg
ICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAKICAgICBpZiAobV9jYWNo
ZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICB1LnN0dWItPnByb3BhZ2F0ZVRyYW5z
aXRpb25zKHZpc2l0b3IpOwpAQCAtNDMwLDYgKzQzMiwyMDkgQEAgQUxXQVlTX0lOTElORSB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVUeXBlOwog
fQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5r
ZWRTdHViSW5mbykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGFjY2Vzc1R5cGUgPSB1bmxp
bmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0
YXJ0OworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9uOwor
ICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhTdGFy
dExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNldCgpKSk7CisgICAgY29kZU9y
aWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBt
X2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICB1c2VkUmVnaXN0ZXJzID0g
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIGlmIChhY2Nlc3NU
eXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwgd2UgY2Fu
J3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVyUmVnaXN0ZXIiIHJlZ2lzdGVyIGVpdGhlci4KKyAg
ICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xv
YmJlclJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9m
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdl
dEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1p
emU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlz
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0
aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJy
YW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5k
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0
ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFt
ZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6
CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNh
c2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8u
ZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0Ogor
ICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAg
ICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVm
aW5lOgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmlu
ZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZv
LnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAg
ICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZv
LmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxkUHV0S2lu
ZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6
ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVy
ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVs
ZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAg
YmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5w
cm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVE
ZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6
CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1
ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIGhhc0NvbnN0
YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBwcm90b3R5cGVJc0tub3duT2JqZWN0ID0g
ZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZh
bHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVz
dWx0OworICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Oklu
QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVn
cy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5C
eUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0
cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIGhhc0NvbnN0YW50
SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnRoaXNHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0
YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJS
ZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAg
ICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVy
ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6UHV0
QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6
CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICB2YWx1ZUdQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odW5saW5rZWRTdHViSW5mbyk7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJS
b3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPcHRpb25z
LmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCkBAIC01Niw2ICs1
Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlWYWwsCiAg
ICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAgICBJbkJ5
SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzgwLDggQEAg
ZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAor
c3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJ
bmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFs
aXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAv
LyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElm
IGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTMyNSwxMyArMzMxLDE5IEBAIHBy
aXZhdGU6CiAKIHB1YmxpYzoKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CisgICAgUHJvcGVy
dHlPZmZzZXQgYnlJZFNlbGZPZmZzZXQ7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJ5
SWRTZWxmT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZv
LCBieUlkU2VsZk9mZnNldCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVT
dHViSW5mbywgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsgfQogICAgIHVuaW9uIHsKLSAg
ICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAg
ICAgfSBieUlkU2VsZjsKICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAgICAgfSB1
OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZTsKKyAgICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoVk0mIHZtKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX2lubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIH0KKyAgICBTdHJ1Y3R1cmVJRCBtX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAwIH07CiBwcml2YXRlOgogICAgIENhY2hlYWJsZUlkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOwogICAgIC8vIFJlcHJlc2VudHMgdGhvc2Ugc3RydWN0dXJlcyB0aGF0
IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nlc3NDYXNlcyBpbiB0aGUgUG9seW1vcnBoaWNBY2Nl
c3MuCkBAIC0zNTIsNiArMzY0LDcgQEAgcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2RlUHRyOwogCiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkNvZGVQdHIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1
YkluZm8sIG1fY29kZVB0cik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRG9uZUxv
Y2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBkb25l
TG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRoU3RhcnRM
b2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgc2xv
d1BhdGhTdGFydExvY2F0aW9uKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBt
X3Nsb3dPcGVyYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvdW50ZG93
bigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgY291bnRkb3du
KTsgfQpAQCAtNDQ3LDYgKzQ2MCwxNyBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNH
ZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7
CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQ
cml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRL
aW5kOjpub25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpzbG9wcHko
KSB9OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBz
dGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBv
ZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisK
ICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJTdGF0ZSgp
CiAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsKICAgICBp
ZiAocGVyY2VudGFnZSAhPSBwZXJjZW50YWdlKQogICAgICAgICBwZXJjZW50YWdlID0gMC4wOwot
ICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBw
ZXJjZW50YWdlLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVy
IHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIiVcbiIpOwogfQogCiB2b2lkIGVuYWJsZVN1
cGVyU2FtcGxlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAK
KyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDbGFz
c0luZm8uaCIKQEAgLTc4LDYgKzc5LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29k
ZUJsb2NrKFZNJgogICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tlcik7CiAg
ICAgICAgIG1fcmFyZURhdGEtPm1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAgfQorCisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQo
T3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgpAQCAtMzE2LDYgKzMxOSw0OCBAQCBpbnQgVW5saW5rZWRDb2RlQmxv
Y2s6Om91dE9mTGluZUp1bXBPZmZzCiAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMu
Z2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECitib29sIFVubGlu
a2VkQ29kZUJsb2NrOjpoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7Cisg
ICAgaWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSA+IDEwMCkgeworICAgICAgICBpZiAobnVtYmVy
T2ZJZGVudGlmaWVycygpICE9IG1fY2FjaGVkSWRlbnRpZmllclVpZHMuc2l6ZSgpKSB7CisgICAg
ICAgICAgICBMb2NrZXIgbG9ja2VyKG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrKTsKKyAgICAg
ICAgICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBjYWNoZWRJZGVudGlmaWVyVWlkczsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJz
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIg
PSB0aGlzLT5pZGVudGlmaWVyKGkpOworICAgICAgICAgICAgICAgIGNhY2hlZElkZW50aWZpZXJV
aWRzLmFkZChpZGVudGlmaWVyLmltcGwoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAgICBtX2NhY2hlZElkZW50aWZpZXJV
aWRzID0gV1RGTW92ZShjYWNoZWRJZGVudGlmaWVyVWlkcyk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5jb250YWlucyh1aWQpOworICAgIH0KKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkg
eworICAgICAgICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitpbnQz
Ml90IFVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQp
Cit7CisgICAgc3dpdGNoIChkaWRPcHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0ZTo6SW5k
ZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIFRyaVN0YXRl
OjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcmlTdGF0
ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwogdm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcygpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fbWV0YWRhdGEtPmlzRmluYWxpemVkKCkpOwpAQCAtMzM3LDE1ICszODIsMjUgQEAg
dm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcgogICAgIGlmIChtX21ldGFk
YXRhLT5oYXNNZXRhZGF0YSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJyYXlQcm9m
aWxlcyA9IDA7CiAKLSNkZWZpbmUgQ09VTlQoX19vcCkgXAotICAgICAgICBudW1iZXJPZkFycmF5
UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOworI2RlZmluZSBDT1VO
VChfX29wKSBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxf
X29wPigpOwogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENPVU5U
KQogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhDT1VO
VCkKICN1bmRlZiBDT1VOVAogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRh
ZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICAgICAgbnVtYmVyT2ZBcnJh
eVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BHZXRCeUlkPigpOwotCiAgICAg
ICAgIG1fYXJyYXlQcm9maWxlcyA9IEZpeGVkVmVjdG9yPFVubGlua2VkQXJyYXlQcm9maWxlPihu
dW1iZXJPZkFycmF5UHJvZmlsZXMpOworCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQmluYXJ5
QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQmluYXJ5QXJp
dGhQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CisgICAgICAgIEZP
Ul9FQUNIX09QQ09ERV9XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKENPVU5UKQorI3VuZGVmIENP
VU5UCisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcyA9IEZpeGVkVmVjdG9yPEJpbmFyeUFy
aXRoUHJvZmlsZT4obnVtYmVyT2ZCaW5hcnlBcml0aFByb2ZpbGVzKTsKKworICAgICAgICB1bnNp
Z25lZCBudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5UKF9fb3Ap
IG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19v
cD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShD
T1VOVCkKKyN1bmRlZiBDT1VOVAorICAgICAgICBtX3VuYXJ5QXJpdGhQcm9maWxlcyA9IEZpeGVk
VmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPihudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyk7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDEwICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5o
IgogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlv
bnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgi
CisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5n
ZUluZm8uaCIKICNpbmNsdWRlICJIYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIu
aCIKQEAgLTY0LDYgKzY2LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiBjbGFzcyBVbmxp
bmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7
CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEJhc2VsaW5lSklUQ29k
ZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKIGVudW0gY2xhc3MgTGlua1RpbWVDb25zdGFudCA6
IGludDMyX3Q7CiAKQEAgLTE3NSw2ICsxNzgsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGaXhl
ZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAg
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0u
Z2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+
JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBAIC0yMDcsNiArMjExLDE1IEBAIHB1Ymxp
YzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogCiAgICAgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0OworICAgIGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIoKTsgfQorICAgIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAg
IGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQoMCkucHRy
KCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1
Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rpb24gPCBp
bnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0cnVjdGlv
bnNCZWdpbjsKKyAgICB9CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25zU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIGluc3RydWN0aW9ucygpLnNpemUoKTsgfQogCiAgICAgdW5zaWduZWQgbnVtQ2FsbGVl
TG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KICAgICB1bnNpZ25l
ZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CkBAIC0zMzQsMTAgKzM0Nywy
MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpOwog
ICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1
cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3
YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFpc0J1aWx0
aW5GdW5jdGlvbigpOworICAgIH0KICAgICB2b2lkIGFsbG9jYXRlU2hhcmVkUHJvZmlsZXMoKTsK
ICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSYgdW5saW5rZWRWYWx1ZVByb2ZpbGUodW5zaWduZWQg
aW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlc1tpbmRleF07IH0KICAgICBVbmxpbmtlZEFy
cmF5UHJvZmlsZSYgdW5saW5rZWRBcnJheVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJu
IG1fYXJyYXlQcm9maWxlc1tpbmRleF07IH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgYm9v
bCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CisjZW5kaWYKKworICAgIGludDMy
X3QgdGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKKwogcHJvdGVjdGVkOgogICAg
IFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwogCkBAIC0zOTcsNiAr
NDIxLDkgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xleGljYWxTY29wZUZlYXR1cmVzIDog
NDsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKKyNpZiBFTkFCTEUoSklU
KQorICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1fdW5saW5rZWRCYXNlbGluZUNvZGU7Cisj
ZW5kaWYKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAg
U291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEzLDcgKzQ0MCw2IEBAIHByaXZhdGU6
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNz
OwogCi0KICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFBy
b2ZpbGU7CiAjZW5kaWYKQEAgLTQ1OCw2ICs0ODQsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAg
IH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zm
c2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQpOworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxl
KHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVu
YXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBt
X3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVy
JiBsbGludEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOyB9
CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPElu
c3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjUsOCArNTAxLDE2IEBAIHByaXZh
dGU6CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4ZWRWZWN0b3I8
RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNlbGluZUV4ZWN1
dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIEZpeGVkVmVjdG9yPFVubGlu
a2VkVmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5r
ZWRBcnJheVByb2ZpbGU+IG1fYXJyYXlQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxCaW5hcnlB
cml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxVbmFy
eUFyaXRoUHJvZmlsZT4gbV91bmFyeUFyaXRoUHJvZmlsZXM7CisKKyNpZiBBU1NFUlRfRU5BQkxF
RAorICAgIExvY2sgbV9jYWNoZWRJZGVudGlmaWVyVWlkc0xvY2s7CisgICAgSGFzaFNldDxVbmlx
dWVkU3RyaW5nSW1wbCo+IG1fY2FjaGVkSWRlbnRpZmllclVpZHM7CisjZW5kaWYKIAogcHJvdGVj
dGVkOgogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRN
ZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxlKTsKICAg
ICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZz
ZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBB
U1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9
IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRh
YmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgYmFzZVR5cGVPZmZzZXQgPSByb3Vu
ZFVwVG9NdWx0aXBsZU9mKGFsaWdub2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSksIGJhc2VU
eXBlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKHR5cGVu
YW1lIE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9CisKICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAgdW5zaWduZWQgbnVtRW50cmllcygp
OwogCkBAIC0xMDcsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0
MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90Owog
ICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDUsMTMgKzQ1LDExIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKIAogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRz
QXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNwZWNGYWls
QnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRleE1h
c2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
dG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNGYWls
QnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKICAgICB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQotICAgICAg
ICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAg
IGNsZWFyQnVja2V0cygpOwogICAgIH0KICAgICAKICAgICBFbmNvZGVkSlNWYWx1ZSogc3BlY0Zh
aWxCdWNrZXQodW5zaWduZWQgaSkKQEAgLTU5LDYgKzU3LDEyIEBAIHN0cnVjdCBWYWx1ZVByb2Zp
bGVCYXNlIHsKICAgICAgICAgQVNTRVJUKG51bWJlck9mQnVja2V0cyArIGkgPCB0b3RhbE51bWJl
ck9mQnVja2V0cyk7CiAgICAgICAgIHJldHVybiBtX2J1Y2tldHMgKyBudW1iZXJPZkJ1Y2tldHMg
KyBpOwogICAgIH0KKworICAgIHZvaWQgY2xlYXJCdWNrZXRzKCkKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQorICAgICAg
ICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgfQog
ICAgIAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tldCkgY29u
c3QKICAgICB7CkBAIC0xMjMsOCArMTI3LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ugewog
ICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5k
IHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAg
ICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBj
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsg
KytpKSB7CkBAIC0xMzksNyArMTQxLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAgICBF
bmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAgU3Bl
Y3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE2MSw2ICsxNjMsNyBA
QCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBWYWx1
ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPiB7
CiAgICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRz
PDA+KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQogfTsK
IAogc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVBy
b2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
a0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5oIgpAQCAtMzQsNyArMzUsOSBAQAogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNl
bWVudC5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZy
YW1lU2V0LmgiCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSlNDYXN0LmgiCisj
aW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0
aW9uLmgiCiAjaW5jbHVkZSAiUmVjb3JkZWRTdGF0dXNlcy5oIgogI2luY2x1ZGUgPHd0Zi9CYWcu
aD4KQEAgLTcwLDcgKzczLDcgQEAgc3RydWN0IFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uIHsKICAg
ICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX3RvOwogfTsKICAgICAgICAgCi1jbGFzcyBDb21tb25E
YXRhIHsKK2NsYXNzIENvbW1vbkRhdGEgOiBwdWJsaWMgTWF0aElDSG9sZGVyIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDb21tb25EYXRhKTsKIHB1YmxpYzoKICAgICBDb21tb25EYXRhKCkK
QEAgLTExNiw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8Q29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50PiBtX3dhdGNocG9pbnRzOwogICAgIEZpeGVkVmVjdG9yPEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzOwog
ICAgIEZpeGVkVmVjdG9yPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4g
bV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKICAgICBSZWNv
cmRlZFN0YXR1c2VzIHJlY29yZGVkU3RhdHVzZXM7CiAgICAgVmVjdG9yPEp1bXBSZXBsYWNlbWVu
dD4gbV9qdW1wUmVwbGFjZW1lbnRzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBA
CiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENv
ZGUuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IFRyYWNrZWRSZWZlcmVuY2VzOwogCitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0
cmluZ0p1bXBUYWJsZTsKKwogbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEpJVENvbXBpbGVyOwpA
QCAtMTAxLDYgKzEwNCw4IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+
IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgZmluYWw7CiAKICAgICB1c2luZyBEaXJlY3RK
SVRDb2RlOjppbml0aWFsaXplQ29kZVJlZkZvckRGRzsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFw
KiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2Rl
T3JpZ2luTWFwLmdldCgpOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRD
b21waWxlcjsgLy8gQWxsb3cgSklUQ29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCkuCkBAIC0x
MTAsNiArMTE1LDggQEAgcHVibGljOgogICAgIEZpeGVkVmVjdG9yPERGRzo6T1NSRW50cnlEYXRh
PiBtX29zckVudHJ5OwogICAgIEZpeGVkVmVjdG9yPERGRzo6T1NSRXhpdD4gbV9vc3JFeGl0Owog
ICAgIEZpeGVkVmVjdG9yPERGRzo6U3BlY3VsYXRpb25SZWNvdmVyeT4gbV9zcGVjdWxhdGlvblJl
Y292ZXJ5OworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFi
bGVzOworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzOwogICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVhbSB2YXJpYWJsZUV2ZW50U3RyZWFt
OwogICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5pZmllZERGRzsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODUsMTMgKzE4NSwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtC
dWZmZXImIGxpbmtCCiAgICAgCiAgICAgbV9ncmFwaC5yZWdpc3RlckZyb3plblZhbHVlcygpOwog
Ci0gICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkgfHwg
IW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgewotICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAoIW1f
Z3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
ID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7Ci0gICAgICAgIGlm
ICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZN
b3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKLSAgICB9CisgICAgQVNTRVJUKG1faml0
Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1f
aml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgaWYgKCFtX2dyYXBo
Lm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIAorICAgICAgICBtX2ppdENvZGUt
Pm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMpOworICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0
eSgpKQorICAgICAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9n
cmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwogCiAgICAgZm9yIChCYWc8U3dpdGNoRGF0YT46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fc3dpdGNoRGF0YS5iZWdpbigpOyAhIWl0ZXI7ICsraXRl
cikgewogICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKippdGVyOwpAQCAtMTk5LDEyICsxOTgs
MTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBj
YXNlIFN3aXRjaENoYXI6CiAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CiAgICAgICAgICAgICBp
ZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KS5pc0VtcHR5KCkp
OworICAgICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tk
YXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShk
YXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUlu
ZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENv
ZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAg
ICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dp
dGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXpl
KCkgPT0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpKTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCk7IGotLTsp
CkBAIC0yMTksMTIgKzIxOCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXIm
IGxpbmtCCiAKICAgICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6IHsKICAgICAgICAgICAgIGlmICgh
ZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxv
Y2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHko
KSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJs
ZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dp
dGNoVGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdo
LmJsb2NrLT5pbmRleF0pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua2VkVGFibGUu
bV9jdGlPZmZzZXRzLnNpemUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUuc2l6ZSgp
ICsgMSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbGlua2VkVGFibGUubV9jdGlP
ZmZzZXRzKQpAQCAtMzMzLDcgKzMzMiw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIu
ZGlkQnVpbGRNYXBwaW5nKCkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdp
bk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcikpOworICAgICAgICBtX2ppdENvZGUtPmNvbW1vbi5t
X3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92
ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpOwogfQogCiBzdGF0aWMg
dm9pZCBlbWl0U3RhY2tPdmVyZmxvd0NoZWNrKEpJVENvbXBpbGVyJiBqaXQsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYgc3RhY2tPdmVyZmxvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcs
NiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqCiAgICAgQVNTRVJU
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFT
U0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNT
RVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0
Q29kZSgpLT5kZmdDb21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIAogICAgIGlmICghT3B0aW9uczo6
dXNlT1NSRW50cnlUb0RGRygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzIsOSArNzcyLDYgQEAgdm9pZCBP
U1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIAogICAgIC8vIFRoZSB0YWcgcmVnaXN0
ZXJzIGFyZSBuZWVkZWQgdG8gbWF0ZXJpYWxpemUgcmVjb3ZlcmllcyBiZWxvdy4KICAgICBqaXQu
ZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKIAotICAgIGlmIChleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKQotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7Ci0KICAgICBpZiAoaW5saW5lU3Rh
Y2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQpIHsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIHRt
cFNjcmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CiAgICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25NYXRlcmlhbGl6ZU9TUkV4aXRTaWRlU3Rh
dGUpPigmdm0sICZleGl0LCB0bXBTY3JhdGNoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9u
IDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZH
SklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIK
QEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxs
SGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2ggKGppdC5jb2RlQmxv
Y2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAgICAgIGNs
aXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChq
aXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNs
aXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0
YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgot
ICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVk
VGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsK
KyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBl
ZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDIsMTEgKzE0Myw4IEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clQKIHsKICAgICBjYWxsZXJJ
c0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKIAot
ICAgIGlmIChjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpIHsKLSAgICAgICAgaWYgKCFj
YWxsZXJJc0xMSW50KQotICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1f
aGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CisgICAgaWYgKGNhbGxCeXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSkKICAgICAgICAgcmV0dXJuIExMSW50OjpjaGVja3BvaW50T1NSRXhpdEZyb21Jbmxp
bmVkQ2FsbFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKLSAgICB9CiAKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganVtcFRhcmdldDsKIApAQCAtMTk4LDggKzE5Niw2
IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clQKICN1bmRlZiBMTElO
VF9SRVRVUk5fTE9DQVRJT04KIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyLT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwotCiAgICAgICAgIHN3aXRj
aCAodHJ1ZUNhbGxlckNhbGxLaW5kKSB7CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpD
YWxsOgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OgpAQCAtMzEzLDYg
KzMwOSwxMCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAg
ICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1l
dGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVD
b2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpKTsKICAgICAgICAg
ICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGNhbGxlZVNhdmVTbG90
KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6OnBi
R1BSKSk7CisgICAgICAgIH0gZWxzZSBpZiAodHJ1ZUNhbGxlcikgeworICAgICAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9j
a0ZvcigqdHJ1ZUNhbGxlcik7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxl
KCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBK
SVQ6OnNfbWV0YWRhdGFHUFIpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmJhc2VsaW5lSklU
Q29uc3RhbnRQb29sKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5l
Q29kZUJsb2NrLCBKSVQ6OnNfY29uc3RhbnRzR1BSKSk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCkBAIC00MDQsNyArNDA0LDggQEAgdm9p
ZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6
OlJlZ2lzdGVyczo6cGNHUFIpOwogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0
YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGNvZGVCbG9ja0ZvckV4aXQtPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7Cisg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JF
eGl0LT5tZXRhZGF0YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRhdGFHUFIpOworICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxp
bmVKSVRDb25zdGFudFBvb2woKSksIEpJVDo6c19jb25zdGFudHNHUFIpOwogCiAgICAgICAgIEJ5
dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
OwogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRp
b247CkBAIC00MjAsMTIgKzQyMSwxNiBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYg
dm0sIENDYWxsCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JF
eGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCi0gICAgaml0LmFkZFB0
cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZv
cihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKKyAgICAgICAgQVNTRVJUKCFSZWdpc3Rl
clNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29udGFpbnMoTExJbnQ6OlJlZ2lzdGVyczo6
cGNHUFIpKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUsIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRj
aEdQUihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikpOworCiAgICAgICAgIC8vIFNpbmNlIHdlJ3Jl
IGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgog
ICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZtLmFkZHJl
c3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOwogICAgIH0KLSAgICAKKworICAgIGppdC5hZGRQdHIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Y29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCiAgICAg
aml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJ
bmZvOjpyZWdUMik7CiAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJU
YWcpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
Q2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMu
aCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAj
aW5jbHVkZSAiREZHSklUQ29kZS5oIgpAQCAtMjg2OSw3ICsyODcwLDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkZpbmRTdwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBj
b25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5kZmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5pc0RvdWJsZSgpKTsKICAgICBkb3Vi
bGUgYXNEb3VibGUgPSB2YWx1ZS5hc0RvdWJsZSgpOwpAQCAtMjg5MCw3ICsyODkxLDcgQEAgSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogCiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N0
cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICByZXR1cm4gbGlua2VkVGFibGUu
Y3RpRm9yVmFsdWUoKnVubGlua2VkVGFibGUsIHN0ckltcGwpLmV4ZWN1dGFibGVBZGRyZXNzPGNo
YXIqPigpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTczMCw2ICs3MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2Rl
KiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5Ojpp
blBhaXIoY2FsbGVlVGFnR1BSLCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIHNodWZm
bGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZs
ZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxl
RGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsK
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsr
aSkgewogICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgaSArIDEpOwpAQCAtODg5LDcgKzg5MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xv
d0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0g
aW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7
CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAg
ICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxD
YWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyOCw2ICs4
MjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVHUFIs
IERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1B
bGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBu
dW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1f
aml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAg
ICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IGkgKyAxKTsKQEAgLTk3OSw3ICs5ODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0gewogICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRh
aWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5ODUsNyArMzk4
NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmEKICAgICBSZWdp
c3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwogCiAgICAgSklU
UHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlw
ZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIHVz
ZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQs
IGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgdXNlZFJl
Z2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VHUFIpLCBKU1Zh
bHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIEludmFsaWRHUFJS
ZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9
IHRydWU7CiAKQEAgLTQ5MDUsNyArNDkwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZUFkZChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQu
Z3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRl
Y29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNl
bGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29k
ZUluZGV4KTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklU
QWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5qaXRDb2Rl
KCktPmNvbW1vbi5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGlu
Z0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0
Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkOwogICAgIApAQCAtNDk4OSw3ICs0OTg5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5vZAogICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0
aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVFN1YklDKiBz
dWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAg
IEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVFN1YklDKGFy
aXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1
ZVN1Yk9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
VmFsdWVTdWI7CiAKQEAgLTU1NzEsNyArNTU3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVWYWx1ZU5lZ2F0ZSgKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9q
aXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwog
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5i
eXRlY29kZUluZGV4KCk7CiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJh
c2VsaW5lQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJ
VE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuaml0Q29k
ZSgpLT5jb21tb24uYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hp
bmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemU7CiAgICAgYXV0byBub25S
ZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZTsKICAgICBjb21waWxlTWF0
aElDKG5vZGUsIG5lZ0lDLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlv
bik7CkBAIC01ODE1LDcgKzU4MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFs
dWVNdWwoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBo
KCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVD
b2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE11bElD
KGFyaXRoUHJvZmlsZSk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuaml0Q29kZSgpLT5j
b21tb24uYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5j
dGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5n
RnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bDsKIApAQCAtMTQ3NzAsNyArMTQ3NzAsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBzY29wZVJl
ZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
c2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIG1faml0LmNvZGVCbG9jaygpLCBj
YWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFk
b3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CiAgICAgbm9SZXN1bHQobm9k
ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgY29tcGlsZShTdGF0
ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKIAogICAgIGlmICh2bS5zaG91bGRCdWlsZGVyUENUb0Nv
ZGVPcmlnaW5NYXBwaW5nKCkpIHsKICAgICAgICAgQjM6OlBDVG9PcmlnaW5NYXAgb3JpZ2luTWFw
ID0gc3RhdGUucHJvYy0+cmVsZWFzZVBDVG9PcmlnaW5NYXAoKTsKLSAgICAgICAgY29kZUJsb2Nr
LT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQQ1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5h
bGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpKTsKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+Y29tbW9u
Lm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQQ1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5h
bGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpOwogICAgIH0KIAogICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+IGxhYmVsID0gc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVy
LT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHN0YXRlLnByb2MtPmNvZGUoKS5lbnRyeXBvaW50
TGFiZWwoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHB1YmxpYzoKICAgICBERkc6OkNvbW1v
bkRhdGEqIGRmZ0NvbW1vbigpIG92ZXJyaWRlOwogICAgIHN0YXRpYyBwdHJkaWZmX3QgY29tbW9u
RGF0YU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKSVRDb2RlLCBjb21tb24pOyB9
CiAgICAgdm9pZCBzaHJpbmtUb0ZpdChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKSBvdmVycmlk
ZTsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRl
IHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CiAgICAgCiAgICAg
REZHOjpDb21tb25EYXRhIGNvbW1vbjsKICAgICBWZWN0b3I8T1NSRXhpdD4gbV9vc3JFeGl0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MiwxNCArNTIsNiBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogCiAgICAgZ3JhcGgu
cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsKIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcy5pc0VtcHR5KCkpOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5lbnN1cmVK
SVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7Ci0gICAgfQotI2Vu
ZGlmCi0KICAgICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuIE5vdGUgdGhhdCB3ZSB1c2UgdGhp
cyBlbnRyeXBvaW50IHRvdGFsbHkgZGlmZmVyZW50bHkKICAgICAvLyBkZXBlbmRpbmcgb24gd2hl
dGhlciB3ZSdyZSBkb2luZyBPU1IgZW50cnkgb3Igbm90LgogICAgIENDYWxsSGVscGVycyBqaXQo
Y29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsNyBAQAog
I2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2lu
Y2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgi
CiAjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAj
aW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCkBAIC0yMzIwLDYgKzIzMjEsMTgg
QEAgcHJpdmF0ZToKICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+
KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24p
OwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRBZGRJQyogYWRkTWF0aElDKERG
Rzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0
dXJuIGNvbW1vbi5hZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3Rh
dGljIEpJVE11bElDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFy
aXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVE11bElDKHByb2ZpbGUp
OyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRv
cj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUTmVnSUMqIGFkZE1hdGhJQyhERkc6OkNv
bW1vbkRhdGEmIGNvbW1vbiwgVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNv
bW1vbi5hZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8
R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJ
VFN1YklDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJv
ZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisK
ICAgICB2b2lkIGNvbXBpbGVWYWx1ZU11bCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50
aWMpOwpAQCAtMjM5MSw3ICsyNDA0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAg
ICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0g
Qm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJ
VFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0
aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgICAgICBKSVRVbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0
Q29kZS0+Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9n
ZW5lcmF0b3IgPSBHZW5lcmF0b3IoSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwgSlNWYWx1
ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CiAKICAgICAgICAg
ICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKQEAgLTI1MDAsNyArMjUx
Myw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgICAgICAgICAgICAgIEJveDxNYXRoSUNHZW5l
cmF0aW9uU3RhdGU+IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9u
U3RhdGU+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBKSVRCaW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRoSUM8R2VuZXJhdG9yPihhcml0
aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBt
YXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0
aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0
b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigp
KSwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgSlNW
YWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwgcGFyYW1zLmZwU2NyYXRjaCgwKSwKICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zLmZwU2NyYXRjaCgxKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CkBA
IC00MzE3LDcgKzQzMzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgR1BSUmVnIHN0dWJJbmZv
R1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBwYXJhbXMuZ3BTY3Jh
dGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBC
b3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgaml0LmNv
ZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJ
bmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9j
aygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwg
QWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9H
UFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1i
b2wgPSB0cnVlOwpAQCAtMTAyODUsNiArMTAyOTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxsb2NhdGVk
QXJnczsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBl
bmQoVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSkpOwogICAgICAgICAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1
cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0
LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50aWNOb2RlT3JpZ2luKTsKQEAgLTEw
NDQzLDEzICsxMDQ1NywxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzaHVmZmxl
RGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgpKTsKIAog
ICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1BcmdzOworICAg
ICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCkt
Pm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKIAogICAg
ICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygp
LT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwog
Ci0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGgg
PSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAs
IFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxl
RGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgICAg
IH0pOwpAQCAtMTA3OTIsNyArMTA4MDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAg
ICAgICAgICAgICAgICAgfSk7CkBAIC0xMTA3Myw3ICsxMTA4OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWls
Q2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpy
ZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxs
U2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEzLDI4ICs0MTMsMTYgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIo
Vk0mIHZtLCB1bnNpZ25lZAogCiAgICAgUmVnaXN0ZXJTZXQgYWxsRlRMQ2FsbGVlU2F2ZXMgPSBS
ZWdpc3RlclNldDo6ZnRsQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIGNvbnN0IFJlZ2lzdGVy
QXRPZmZzZXRMaXN0KiBiYXNlbGluZUNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNh
bGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogdm1DYWxsZWVT
YXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKLSAgICBS
ZWdpc3RlclNldCB2bUNhbGxlZVNhdmVzVG9Ta2lwID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0
ZXJzKCk7Ci0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgaml0
LmxvYWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZl
UmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgfQogCiAgICAg
Zm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJl
Zy5uZXh0KCkpIHsKICAgICAgICAgaWYgKCFhbGxGVExDYWxsZWVTYXZlcy5nZXQocmVnKSkgewot
ICAgICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIXZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKSk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCB1bndpbmRJbmRleCA9IGNv
ZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5pbmRleE9mKHJlZyk7CiAgICAgICAgIGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPSBiYXNlbGluZUNh
bGxlZVNhdmVzLT5maW5kKHJlZyk7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIHZtQ2FsbGVl
U2F2ZSA9IG51bGxwdHI7IAotICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkK
LSAgICAgICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKTsKIAog
ICAgICAgICBpZiAocmVnLmlzR1BSKCkpIHsKICAgICAgICAgICAgIEdQUlJlZyByZWdUb0xvYWQg
PSBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8gR1BSSW5mbzo6cmVnVDAgOiByZWcuZ3ByKCk7Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWdUb0xvYWQgIT0gR1BSSW5mbzo6cmVnVDEpOwog
CiAgICAgICAgICAgICBpZiAodW53aW5kSW5kZXggPT0gVUlOVF9NQVgpIHsKICAgICAgICAgICAg
ICAgICAvLyBUaGUgRlRMIGNvbXBpbGF0aW9uIGRpZG4ndCBwcmVzZXJ2ZSB0aGlzIHJlZ2lzdGVy
LiBUaGlzIG1lYW5zIHRoYXQgaXQgYWxzbwpAQCAtNDUyLDggKzQ0MCw2IEBAIHN0YXRpYyB2b2lk
IGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAogICAgICAgICAgICAgaWYgKGJhc2VsaW5l
UmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQocmVnVG9Mb2FkLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0
ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQtPm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAo
dm1DYWxsZWVTYXZlICYmICF2bUNhbGxlZVNhdmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNhdmUtPnJl
ZygpKSkKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBGUFJSZWcgZnBSZWdUb0xvYWQgPSBiYXNlbGlu
ZVJlZ2lzdGVyT2Zmc2V0ID8gRlBSSW5mbzo6ZnBSZWdUMCA6IHJlZy5mcHIoKTsKIApAQCAtNDY0
LDE5ICs0NTAsOSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkCiAK
ICAgICAgICAgICAgIGlmIChiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQogICAgICAgICAgICAgICAg
IGppdC5zdG9yZURvdWJsZShmcFJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFj
cm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0
LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKHZtQ2FsbGVlU2F2ZSAmJiAhdm1DYWxsZWVT
YXZlc1RvU2tpcC5nZXQodm1DYWxsZWVTYXZlLT5yZWcoKSkpCi0gICAgICAgICAgICAgICAgaml0
LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldCogdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChHUFJJbmZvOjpudW1iZXJU
YWdSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lz
dGVyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZl
LT5vZmZzZXQoKSkpOwotCi0gICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZp
bmQoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQ
UkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7Ci0gICAgfQotCiAgICAgc2l6ZV90
IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxv
Y2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogCiAgICAgaWYgKGV4aXQu
bV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5y
Ygkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAg
ZGVmIHN0cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBj
b252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRP
ZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVzLm1h
cCBkbyB8ZmllbGROYW1lfAorICAgICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLi0xXX0oKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAg
ICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisgICAgICAgIGVuZAorCisgICAgICAgIGRlZiBjb252
ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBmaWVsZE5hbWVzKQogICAgICAgICAgICAgZmllbGRz
Lm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBI
YXNoCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVs
ZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAgICAg
ICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywg
dHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZpeH19OyIKICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkLnRvX3N9
OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmllbGQudG9fcworICAgICAgICAg
ICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2goZmllbGROYW1lKQorICAgICAgICAgICAgICAgICAg
ICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZE5hbWV9OyIKICAgICAgICAgICAgICAg
ICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVuZAogCi0gICAgICAg
IGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcykKKyAgICAgICAgZmll
bGROYW1lcyA9IFtdCisgICAgICAgIHByZWZpeCA9ICIgICAgICAgICIKKyAgICAgICAgZmllbGRz
ID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBmaWVsZHMsIGZpZWxkTmFtZXMpCisgICAgICAgIGZp
ZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwg
ZmllbGROYW1lcykKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBpZiBAaW5pdGlhbGl6
ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2Nyw2ICszNjcsMjggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRQcm9wZXJ0
eShHUFJSZQogICAgICAgICByZXN1bHQpOwogfQogCit2b2lkIEFzc2VtYmx5SGVscGVyczo6c3Rv
cmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNl
dCwgR1BSUmVnIHNjcmF0Y2gpCit7CisgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NU
aGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgIAor
ICAgIGxvYWRQdHIoQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2gpOworICAgIG5lZzMyKG9mZnNldCk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zm
c2V0LCBvZmZzZXQpOworICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CisgICAgCisgICAgaXNJbmxp
bmUubGluayh0aGlzKTsKKyAgICBhZGRQdHIoCisgICAgICAgIFRydXN0ZWRJbW0zMigKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihKU09iamVjdCkpIC0KKyAgICAgICAg
ICAgIChzdGF0aWNfY2FzdDxpbnQzMl90PihmaXJzdE91dE9mTGluZU9mZnNldCkgLSAyKSAqIHN0
YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSwKKyAgICAgICAgb2Jq
ZWN0LCBzY3JhdGNoKTsKKyAgICAKKyAgICByZWFkeS5saW5rKHRoaXMpOworICAgIAorICAgIHN0
b3JlVmFsdWUodmFsdWUsCisgICAgICAgIEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkpOworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdExvYWRTdHJ1Y3R1cmUoVk0mIHZt
LCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gp
CiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY5OCw4ICs3MjAsMTMgQEAgdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExp
bmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6
cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpy
ZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwg
aW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0
TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9
IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNCw4ICsyMzQsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAg
Ly8gTm90ZSB0aGF0IHRoaXMgY2xvYmJlcnMgb2Zmc2V0LgorICAgIC8vIE5vdGUgdGhhdCB0aGVz
ZSBjbG9iYmVyIG9mZnNldC4KICAgICB2b2lkIGxvYWRQcm9wZXJ0eShHUFJSZWcgb2JqZWN0LCBH
UFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpOworICAgIHZvaWQgc3RvcmVQcm9wZXJ0
eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNldCwgR1BSUmVn
IHNjcmF0Y2gpOwogCiAgICAgdm9pZCBtb3ZlVmFsdWVSZWdzKEpTVmFsdWVSZWdzIHNyY1JlZ3Ms
IEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAgIHsKQEAgLTM3OSwxNSArMzgwLDI2IEBAIHB1Ymxp
YzoKICNlbmRpZgogICAgIH0KIAorICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUsIEdQUlJlZyBzY3Jh
dGNoKQorICAgIHsKKyNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKKyAg
ICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwgc2NyYXRjaCk7CisgICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChzY3JhdGNoKTsKKyNlbHNl
CisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKHNjcmF0Y2gpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlGcmFtZSkK
ICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAg
IGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH07CiAgICAgICAgIEdQUlJlZyB0ZW1wMSA9IHVzZWRS
ZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwg
dGVtcDEpOwotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlckltcGwodGVtcDEpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CiAjZWxzZQogICAgICAgICBVTlVT
RURfUEFSQU0odG9wRW50cnlGcmFtZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZy
YW1lKTsKICNlbmRpZgogICAgIH0KICAgICAKQEAgLTE3MjAsNiArMTczMiw3IEBAIHB1YmxpYzoK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVj
dCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmlu
Z0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOwogICAgIAogICAgIHZvaWQgbWFrZVNw
YWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0Nh
bGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29k
ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGlu
ZUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1
ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgorI2luY2x1ZGUgIlN0cnVj
dHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKSVRBZGRJQyogTWF0aElDSG9s
ZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1
cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE11bElDKiBNYXRoSUNIb2xkZXI6
OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBt
X211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUU3ViSUMqIE1hdGhJQ0hvbGRlcjo6YWRk
SklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3Vi
SUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVROZWdJQyogTWF0aElDSG9sZGVyOjphZGRKSVRO
ZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5h
ZGQoYXJpdGhQcm9maWxlKTsgfQorCit2b2lkIE1hdGhJQ0hvbGRlcjo6YWRvcHRNYXRoSUNzKE1h
dGhJQ0hvbGRlciYgb3RoZXIpCit7CisgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRk
SUNzKTsKKyAgICBtX211bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAgIG1fbmVn
SUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90
aGVyLm1fc3ViSUNzKTsKK30KKworQmFzZWxpbmVKSVRDb2RlOjpCYXNlbGluZUpJVENvZGUoQ29k
ZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0
eUNoZWNrKQorICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVj
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgLCBNYXRoSUNIb2xkZXIoKQoreyB9CisKK0Jh
c2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiSklUQ29k
ZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKKworI2lmIEVOQUJMRShKSVQpCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBCaW5hcnlBcml0aFByb2ZpbGU7CitjbGFzcyBVbmFyeUFyaXRo
UHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFNpbXBs
ZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKK2NsYXNzIE1hdGhJQ0hvbGRl
ciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcik7
CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJ
VE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRTdWJJQyog
YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTmVnSUMqIGFkZEpJVE5l
Z0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CisKK3ByaXZhdGU6CisgICAgQmFnPEpJVEFkZElDPiBt
X2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4g
bV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKK307CisKK2NsYXNzIEpJVENv
bnN0YW50UG9vbCB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29uc3RhbnQgPSB1bnNpZ25lZDsKKwor
ICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBHbG9iYWxPYmplY3QsCisg
ICAgICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8sCisgICAgICAg
IEZ1bmN0aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rpb25FeHByLAorICAgIH07CisKKyAgICBzdHJ1
Y3QgVmFsdWUgeworICAgICAgICBUeXBlIHR5cGU7CisgICAgICAgIFBhY2tlZFB0cjx2b2lkPiBw
YXlsb2FkOworICAgIH07CisKKyAgICBKSVRDb25zdGFudFBvb2woKSA9IGRlZmF1bHQ7CisgICAg
SklUQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisgICAgSklUQ29u
c3RhbnRQb29sJiBvcGVyYXRvcj0oSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKworICAg
IENvbnN0YW50IGFkZChUeXBlIHR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxscHRyKQorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudHMuc2l6ZSgpOworICAgICAgICBt
X2NvbnN0YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBlLCBwYXlsb2FkIH0pOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9j
b25zdGFudHMuc2l6ZSgpOyB9CisgICAgVmFsdWUgYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRzW2ldOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0
YW50czsKK307CisKKworY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENv
ZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIEJhc2VsaW5lSklUQ29kZShD
b2RlUmVmPEpTRW50cnlQdHJUYWc+LCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNo
ZWNrKTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisgICAgUENUb0NvZGVPcmln
aW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1RvQ29kZU9y
aWdpbk1hcC5nZXQoKTsgfQorCisgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlu
a2VkQ2FsbHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAg
ICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAg
ICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBG
aXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAg
ICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFu
dFBvb2w7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2Rl
T3JpZ2luTWFwOworICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6
ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUo
KQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWlu
VGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVP
bk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2Fz
ZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVC
bG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93
Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9p
ZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxl
ZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0
b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihj
b2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0No
aWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNh
bGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRP
RihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0Nh
bGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRv
d1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAg
ICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAg
LTcyLDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEK
ICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikpOwogfQog
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6
OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1Zh
bHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFj
a2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Cisg
ICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9yZVB0cihz
Y29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9j
aykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3Ms
IEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93
UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisK
K3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hh
ZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29k
ZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxv
Y2ssIGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVP
dmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVk
TGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlw
dGlvbikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQw
LDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0
aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Ag
b2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxv
Z1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcg
c2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BS
UmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQ
UlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRy
dXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworICAg
IHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVy
IHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2
b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBH
UFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxGcmFt
ZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBjYWxs
ZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07
Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9
IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJl
Z2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0
YS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMyBAQCBwdWJs
aWM6CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWduZWQgbnVtTG9j
YWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsgVUlOVF9NQVgg
fTsKKyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8gT24gb3VyIG1h
Y2hpbmUgZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1hcDxWYWx1ZVJl
Y292ZXJ5PiByZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVyIHsgSW52YWxp
ZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2Nr
Kik7CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwogfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENhbGxGcmFtZVNo
dWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkKICAgICAsIG1f
b2xkRnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3Rl
cnMsIG51bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25lZE9sZEZy
YW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAgICAgICArIHJvdW5k
QXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSkpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnMgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5udW1QYXJhbWV0
ZXJzKSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJ
blJlZ2lzdGVycwogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRh
LmFyZ3Muc2l6ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUg
LSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3Rl
clNldDo6YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNz
ZWRBcmdzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykKIHsKICAg
ICAvLyBXZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAgIGZvciAo
dW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3
ICs0MjEsNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhCiAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFt
ZUJhc2UpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9CiAgICAg
ICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fbmV3RnJh
bWVCYXNlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5j
b2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAgIG1faml0LmFkZDMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBt
X2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudFJl
Z2lzdGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVCYXNlLCBtX25l
d0ZyYW1lQmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlci5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAgICAgIGRh
dGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2VkQXJncyA9
IG1fbnVtUGFzc2VkQXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9udW1QYXJh
bWV0ZXJzOwogICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBD
YWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5y
ZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291
bnQoKTsgKytpKQpAQCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwZXJmb3Jt
U2FmZVdyaXRlcygpOwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7IFVJTlRf
TUFYIH07CisgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Qnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJbnRlcmZh
Y2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51bGxwdHIp
CiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29k
ZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwgbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGlu
ZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAgIG1fcHJv
ZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9jayA9IGNv
ZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTkwLDgg
KzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNraXBPcHRp
bWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhl
Y3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lwT3B0aW1p
emUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1
dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21G
cmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5
RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMjAgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShX
YXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRl
QWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0
KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1Nl
dCkKIHsKKyAgICBhdXRvIG9rID0gYnJhbmNoVGVzdFB0cihaZXJvLCBwb2ludGVyVG9TZXQpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBX
YXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpKTsKKyAgICBvay5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5
Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCit2b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5
Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAg
IGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFyUmVhZE9u
bHlXYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBl
ID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIs
IE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJSZWFkT25seVdhdGNocG9pbnQp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJl
c3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQ
b2ludGVyT2Zmc2V0KCkKQEAgLTEyOSwxMiArMTM3LDE4IEBAIHZvaWQgSklUOjphc3NlcnRTdGFj
a1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Qw
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKK3Zv
aWQgSklUOjpyZXNldFNQKCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7Cit9CisKICNkZWZpbmUgTkVYVF9PUENPREUobmFtZSkgXAogICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpICsg
Y3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyBcCiAgICAgYnJlYWs7CkBAIC0xODEsNjEgKzE5
NSw0NCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjCiAgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1l
SW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JS
YXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBicmFuY2hUZXN0
UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgcmVz
dWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYgKG1fdW5saW5rZWRD
b2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3Vs
dCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpKSwg
cmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCByZXN1bHQpOworCisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6b2Zm
c2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICB9KTsKKyNlbmRpZgorfQorCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBk
YXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgZGF0YUxv
ZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4iKTsKICAgICAKICAgICBq
aXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCk7
CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAKICAgICBtX2NhbGxM
aW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJsb2NrLT52bSgpOwogICAg
IEJ5dGVjb2RlSW5kZXggc3RhcnRCeXRlY29kZUluZGV4KDApOwotICAgIGlmIChtX2xvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1fY29kZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJs
b2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmluaGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+
KHZtKSkpIHsKLSAgICAgICAgLy8gV2UgY2FuIG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVj
YXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2RlQmxvY2sncyBleGFjdGx5IG9uY2UuCi0gICAgICAg
IC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxkIGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRo
ZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRzIHRvCi0gICAgICAgIC8vIGRvIE9TUiBlbnRyeSBp
bnRvIHRoZSBiYXNlbGluZSBKSVQgaW4gYSBsb29wLCBpdCB3aWxsIHBhc3MgaW4gdGhlIGJ5dGVj
b2RlIG9mZnNldCBpdAotICAgICAgICAvLyB3YXMgZXhlY3V0aW5nIGF0IHdoZW4gaXQga2lja2Vk
IG9mZiBvdXIgY29tcGlsYXRpb24uIFdlIG9ubHkgbmVlZCB0byBjb21waWxlIGNvZGUgZm9yCi0g
ICAgICAgIC8vIGFueXRoaW5nIHJlYWNoYWJsZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0Lgot
Ci0gICAgICAgIC8vIFdlIG9ubHkgYm90aGVyIGJ1aWxkaW5nIHRoZSBieXRlY29kZSBncmFwaCBp
ZiBpdCBjb3VsZCBzYXZlIHRpbWUgYW5kIGV4ZWN1dGFibGUKLSAgICAgICAgLy8gbWVtb3J5LiBX
ZSBwaWNrIGFuIGFyYml0cmFyeSBvZmZzZXQgd2hlcmUgd2UgZGVlbSB0aGlzIGlzIHByb2ZpdGFi
bGUuCi0gICAgICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0g
MjAwKSB7Ci0gICAgICAgICAgICAvLyBBcyBhIHNpbXBsaWZpY2F0aW9uLCB3ZSBkb24ndCBmaW5k
IGFsbCBieXRlY29kZSByYW5nZXMgdGhhdCBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAv
LyBJbnN0ZWFkLCB3ZSBqdXN0IGZpbmQgdGhlIG1pbmltdW0gYnl0ZWNvZGUgb2Zmc2V0IHRoYXQg
aXMgcmVhY2hhYmxlLCBhbmQKLSAgICAgICAgICAgIC8vIGNvbXBpbGUgY29kZSBmcm9tIHRoYXQg
Ynl0ZWNvZGUgb2Zmc2V0IG9ud2FyZHMuCi0KLSAgICAgICAgICAgIEJ5dGVjb2RlR3JhcGggZ3Jh
cGgobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAgICAgICAg
ICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRl
Y29kZU9mZnNldChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2spOwotCi0gICAgICAgICAgICBHcmFwaE5vZGVXb3Jr
bGlzdDxCeXRlY29kZUJhc2ljQmxvY2sqPiB3b3JrbGlzdDsKLSAgICAgICAgICAgIHN0YXJ0Qnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHdvcmtsaXN0LnB1c2go
YmxvY2spOwotCi0gICAgICAgICAgICB3aGlsZSAoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9
IHdvcmtsaXN0LnBvcCgpKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRCeXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleChzdGQ6Om1pbihzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGJsb2Nr
LT5sZWFkZXJPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vz
c29ySW5kZXggOiBibG9jay0+c3VjY2Vzc29ycygpKQotICAgICAgICAgICAgICAgICAgICB3b3Jr
bGlzdC5wdXNoKCZncmFwaFtzdWNjZXNzb3JJbmRleF0pOwotCi0gICAgICAgICAgICAgICAgLy8g
QWxzbyBhZGQgY2F0Y2ggYmxvY2tzIGZvciBieXRlY29kZXMgdGhhdCB0aHJvdy4KLSAgICAgICAg
ICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgewot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2st
PmxlYWRlck9mZnNldCgpOyBieXRlY29kZU9mZnNldCA8IGJsb2NrLT5sZWFkZXJPZmZzZXQoKSAr
IGJsb2NrLT50b3RhbExlbmd0aCgpOykgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBp
bnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZU9mZnNldCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYXV0byogaGFuZGxlciA9IG1fY29kZUJsb2NrLT5oYW5kbGVyRm9y
Qnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChncmFwaC5maW5kQmFzaWNCbG9ja1dpdGhM
ZWFkZXJPZmZzZXQoaGFuZGxlci0+dGFyZ2V0KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGJ5dGVjb2RlT2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CiAgICAgZm9yIChtX2J5
dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkg
PCBpbnN0cnVjdGlvbkNvdW50OyApIHsKQEAgLTI3OCwxMiArMjc1LDE1IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAo
UHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bj
b2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChvcGNvZGVJRCAhPSBv
cF9jYXRjaCkKKyAgICAgICAgICAgIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOworCiAgICAg
ICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKICAg
ICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQpAQCAtNTI3LDcgKzUyNyw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJz
dFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29k
ZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJ
bmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUg
Zm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQo
KSk7CkBAIC01NDUsOCArNTQ1LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2Vz
KCkKIAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1
dGlvbigpKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
Y29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBj
dHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxs
RnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBb
IiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNm
ciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQpAQCAtNjAzLDcgKzYwMyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfdmFs
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X2lkKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3Bfc3ViKQotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2Zy
b21fc2NvcGUpCiAjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3B1dF90b19z
Y29wZSkKQEAgLTY3NCw1NSArNjc0LDU1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAjZW5kaWYKIH0KIAordm9pZCBKSVQ6OmVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5k
Q29uc3RhbnRQb29sUmVnaXN0ZXJzKCkKK3sKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
Q29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHNfbWV0YWRhdGFHUFIpOworICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJl
Z1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zm
c2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKQoreworICAgIEJhc2U6OmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpKTsKK30KKwogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIERGRzo6Q2FwYWJpbGl0eUxl
dmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOworICAgIERGRzo6Q2Fw
YWJpbGl0eUxldmVsIGxldmVsID0gbV9wcm9maWxlZENvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVs
KCk7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgog
ICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gZmFsc2U7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQgPSBmYWxzZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFs
c2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgogICAgIGNhc2Ug
REZHOjpDYW5Db21waWxlQW5kSW5saW5lOgogICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0gdHJ1
ZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IHRydWU7CiAgICAgICAgIG1f
c2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7Ci0gICAg
Y2FzZSBHbG9iYWxDb2RlOgotICAgIGNhc2UgTW9kdWxlQ29kZToKLSAgICBjYXNlIEV2YWxDb2Rl
OgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGdW5jdGlvbkNvZGU6Ci0gICAgICAgIC8vIFdlIGNv
dWxkIGhhdmUgYWxyZWFkeSBzZXQgaXQgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkZXRlY3RlZCBhbiB1
bmlubGluZWFibGUgY2FsbC4KLSAgICAgICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgdGhhdCBvYnNlcnZh
dGlvbi4KLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkICY9IGNh
bklubGluZShsZXZlbCkgJiYgREZHOjptaWdodElubGluZUZ1bmN0aW9uKG1fY29kZUJsb2NrKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2Nr
LT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8
U2ltcGxlSnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBU
YWJsZXMoKSk7Ci0gICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U3RyaW5n
SnVtcFRhYmxlPihtX2NvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBU
YWJsZXMoKSk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
d2l0Y2hKdW1wVGFibGVzKCkgfHwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgeworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1f
c3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV91bmxpbmtl
ZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgICAg
IGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpKQorICAgICAgICAgICAgbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRW
ZWN0b3I8U3RyaW5nSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
ciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKQotICAgICAg
ICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VVbmlxdWU8SklURGlzYXNzZW1ibGVyPihtX2NvZGVCbG9j
ayk7CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3Zt
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZv
clByb2ZpbGVyKCkpKSkgeworICAgICAgICAvLyBGSVhNRTogYnVpbGQgYSBkaXNhc3NlbWJsZXIg
b2ZmIG9mIFVubGlua2VkQ29kZUJsb2NrLgorICAgICAgICBtX2Rpc2Fzc2VtYmxlciA9IG1ha2VV
bmlxdWU8SklURGlzYXNzZW1ibGVyPihtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICB9CiAgICAg
aWYgKFVOTElLRUxZKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpIHsKKyAgICAgICAgLy8g
RklYTUU6IGJ1aWxkIHByb2ZpbGVyIGRpc2Fzc2VtYmxlciBvZmYgVW5saW5rZWRDb2RlQmxvY2su
CiAgICAgICAgIG1fY29tcGlsYXRpb24gPSBhZG9wdFJlZigKICAgICAgICAgICAgIG5ldyBQcm9m
aWxlcjo6Q29tcGlsYXRpb24oCi0gICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLAorICAgICAgICAgICAgICAg
IG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fcHJvZmls
ZWRDb2RlQmxvY2spLAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpCYXNlbGluZSkpOwotICAg
ICAgICBtX2NvbXBpbGF0aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jayk7CisgICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFBy
b2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fcHJvZmlsZWRD
b2RlQmxvY2spOwogICAgIH0KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5h
cHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkpOwpAQCAtNzQy
LDExICs3NDIsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgog
ICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
OworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKCk7CiAKICAgICBM
YWJlbCBiZWdpbkxhYmVsKHRoaXMpOwogCi0gICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAgaW50
IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUgPSAtZnJh
bWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihmcmFtZVRvcE9mZnNldCksIGNh
bGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CiAgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxvdzsKQEAg
LTc1NywxNiArNzU4LDIwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6
aW4KICAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKTsKKyAgICBl
bWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdp
c3RlcnMoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lz
dGVycygpOwogCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkgeworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9u
Q29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChz
aG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1l
bnQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSAmJiAoIW1fdW5saW5rZWRD
b2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCkgPiAxKSkgeworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMik7CisgICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMo
KSArIEZpeGVkVmVjdG9yPFZhbHVlUHJvZmlsZT46Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVnVDIp
OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBt
X3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAg
ICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBw
dXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KICAgICAgICAgICAgICAgICAvLyBrZWVw
IHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQg
dGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25z
dHJ1Y3RvcigpICYmICFhcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJn
dW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTc3NywxMiArNzgyLDEyIEBA
IHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZz
ZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3Mu
dGFnR1BSKCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtX2NvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJndW1lbnQpLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHJlc3VsdFJlZ3MsIEFkZHJlc3MocmVn
VDIsIGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNl
dE9mRmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlw
ZSgpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQogICAg
ICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2Vy
KSwgKnRoaXMpOwpAQCAtNzk5LDI0ICs4MDQsMjcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbgogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7
CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yLCBtX2NvZGVCbG9jayk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxs
RnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9y
LCByZWdUMCk7CiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2Ug
bmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KLSAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9
IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKLSAgICBpZiAobV9jb2RlQmxvY2st
PmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgeworICAg
IGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpICE9IDE7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0g
RnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hl
Y2sgPSBsYWJlbCgpOwotICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxv
Y2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKKwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZSgpOwotICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1l
SW5Qcm9sb2d1ZShyZWdUMCk7CisgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJl
c3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkpOwog
CiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSwgcmVnVDEpOwotICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJl
Z1QxLCBUcnVzdGVkSW1tMzIobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycykpLmxpbmtUbyhi
ZWdpbkxhYmVsLCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwg
VHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLmxpbmtU
byhiZWdpbkxhYmVsLCB0aGlzKTsKIAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29k
ZUluZGV4KDApOwogCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkK
ICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG1fY29k
ZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDog
b3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJh
bWVSb2xsYmFja09uRXhjZXB0aW9uKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3Io
KSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVj
aywgYXJndW1lbnRHUFIwKTsKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMy
KFplcm8sIHJldHVyblZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CkBAIC04Mzks
NyArODQ3LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAg
ICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwogICAgIG1fcGNUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAotICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6
dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ss
IExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBlZmZvcnQpKTsKKyAgICBtX2xpbmtC
dWZmZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMs
IG1fdW5saW5rZWRDb2RlQmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OkJhc2VsaW5lSklULCBl
ZmZvcnQpKTsKICAgICBsaW5rKCk7CiB9CiAKQEAgLTg1OCw4ICs4NjYsOCBAQCB2b2lkIEpJVDo6
bGluaygpCiAgICAgICAgIHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKICAgICAgICAgY2FzZSBTd2l0
Y2hSZWNvcmQ6OkltbWVkaWF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rl
cjogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2st
PnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAg
ICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVs
dE9mZnNldF0pOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHVubGlua2Vk
VGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHNbal07CkBAIC04NzEs
OCArODc5LDggQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBT
d2l0Y2hSZWNvcmQ6OlN0cmluZzogewotICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgICAgICAgICAgYXV0byBj
dGlEZWZhdWx0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9sYWJl
bHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwogICAgICAgICAgICAg
Zm9yIChhdXRvJiBsb2NhdGlvbiA6IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS52YWx1ZXMo
KSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxvY2F0aW9uLm1fYnJhbmNo
T2Zmc2V0OwpAQCAtOTA2LDYgKzkxNCwyNyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgICAg
ICBwYXRjaEJ1ZmZlci5saW5rKHJlY29yZC5mcm9tLCByZWNvcmQuY2FsbGVlKTsKICAgICB9CiAK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGF1dG8gZmluYWxpemVJQ3MgPSBbJl0gKGF1dG8mIGdl
bmVyYXRvcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBnZW4gOiBnZW5lcmF0b3JzKSB7CisgICAg
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5zdGFydCA9IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3N0YXJ0KTsKKyAgICAgICAgICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8tPmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SlNJbnRlcm5hbFB0clRhZz4oZ2VuLm1fZG9uZSk7CisgICAgICAgICAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zbG93UGF0aEJlZ2luKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX2dldEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkc1dpdGhUaGlzKTsKKyAg
ICBmaW5hbGl6ZUlDcyhtX3B1dEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3B1dEJ5VmFscyk7
CisgICAgZmluYWxpemVJQ3MobV9kZWxCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9kZWxCeVZh
bHMpOworICAgIGZpbmFsaXplSUNzKG1faW5CeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5
VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbnN0YW5jZU9mcyk7CisgICAgZmluYWxpemVJQ3Mo
bV9wcml2YXRlQnJhbmRBY2Nlc3Nlcyk7CisjZWxzZQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVz
KG1fZ2V0QnlJZHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2dl
dEJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlJ
ZHNXaXRoVGhpcywgcGF0Y2hCdWZmZXIpOwpAQCAtOTE3LDIxICs5NDYsMjUgQEAgdm9pZCBKSVQ6
OmxpbmsoKQogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5CeVZhbHMsIHBhdGNoQnVmZmVy
KTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luc3RhbmNlT2ZzLCBwYXRjaEJ1ZmZlcik7
CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9wcml2YXRlQnJhbmRBY2Nlc3NlcywgcGF0Y2hC
dWZmZXIpOworI2VuZGlmCiAKICAgICBmb3IgKGF1dG8mIGNvbXBpbGF0aW9uSW5mbyA6IG1fY2Fs
bENvbXBpbGF0aW9uSW5mbykgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIFVubGlua2Vk
Q2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby51bmxpbmtlZENhbGxMaW5rSW5m
bzsKKyAgICAgICAgaW5mby5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpT
SW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pOworI2Vsc2UKICAg
ICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87
CiAgICAgICAgIGluZm8uc2V0Q29kZUxvY2F0aW9ucygKICAgICAgICAgICAgIHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLnNsb3dQYXRoU3Rh
cnQpLAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
Pihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKSk7CisjZW5kaWYKKwogICAgIH0KIAotICAg
IHsKLSAgICAgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1hcEJ1aWxkZXI7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFi
ZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgewotICAgICAgICAgICAgaWYgKG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQotICAgICAgICAgICAgICAgIGppdENvZGVNYXBCdWls
ZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsKLSAgICAg
ICAgfQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChqaXRDb2RlTWFwQnVpbGRl
ci5maW5hbGl6ZSgpKTsKKyAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsK
KyAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBt
X2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKKyAgICAgICAgaWYgKG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0XS5pc1NldCgpKQorICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIu
YXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwogICAgIH0KIAog
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkpIHsKQEAgLTk0MCwy
NiArOTczLDQyIEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFko
bV9jb21waWxhdGlvbikpIHsKKyAgICAgICAgLy8gRklYTUU6IHNob3VsZCB3ZSBtYWtlIHRoZSBi
eXRlY29kZSBwcm9maWxlciBrbm93IGFib3V0IFVubGlua2VkQ29kZUJsb2NrPwogICAgICAgICBp
ZiAoT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkpCiAgICAgICAgICAg
ICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2NvbXBpbGF0aW9uLmdldCgpLCBw
YXRjaEJ1ZmZlcik7Ci0gICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29t
cGlsYXRpb24obV9jb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKKyAgICAgICAgbV92bS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3Byb2ZpbGVkQ29kZUJsb2NrLCAq
bV9jb21waWxhdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyLmRpZEJ1aWxkTWFwcGluZygpKQogICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFr
ZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlciksIHBhdGNoQnVmZmVyKTsKICAgICAKKyAgICAvLyBGSVhNRTogTWFrZSBhIHZlcnNpb24g
b2YgQ29kZUJsb2NrV2l0aEpJVFR5cGUgdGhhdCBrbm93cyBhYm91dCBVbmxpbmtlZENvZGVCbG9j
ay4KICAgICBDb2RlUmVmPEpTRW50cnlQdHJUYWc+IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUoCiAg
ICAgICAgIHBhdGNoQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgSklU
IGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CisgICAgICAgICJCYXNlbGluZSBKSVQg
Y29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wcm9maWxlZENv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOwogICAgIAogICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9hcml0eUNoZWNrKTsKLSAgICBtX2ppdENv
ZGUgPSBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQpKTsKKyAgICBtX2ppdENvZGUgPSBhZG9wdFJlZigqbmV3IEJh
c2VsaW5lSklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrKSk7CisKKyAgICBtX2ppdENvZGUt
Pm1fdW5saW5rZWRDYWxscyA9IFdURk1vdmUobV91bmxpbmtlZENhbGxzKTsKKyAgICBtX2ppdENv
ZGUtPm1fZXZhbENhbGxMaW5rSW5mb3MgPSBXVEZNb3ZlKG1fZXZhbENhbGxMaW5rSW5mb3MpOwor
ICAgIG1faml0Q29kZS0+bV91bmxpbmtlZFN0dWJJbmZvcyA9IFdURk1vdmUobV91bmxpbmtlZFN0
dWJJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1f
c3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMgPSBXVEZNb3ZlKG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7CisgICAgbV9qaXRDb2RlLT5t
X2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOworICAgIG1faml0Q29k
ZS0+YWRvcHRNYXRoSUNzKG1fbWF0aElDcyk7CisgICAgbV9qaXRDb2RlLT5tX2NvbnN0YW50UG9v
bCA9IFdURk1vdmUobV9jb25zdGFudFBvb2wpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgbV9q
aXRDb2RlLT5tX2lzU2hhcmVhYmxlID0gbV9pc1NoYXJlYWJsZTsKKyNlbHNlCisgICAgbV9qaXRD
b2RlLT5tX2lzU2hhcmVhYmxlID0gZmFsc2U7CisjZW5kaWYKIAogICAgIGlmIChKSVRJbnRlcm5h
bDo6dmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAg
YXQgWyVwLCAlcCkuXG4iLCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+
c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKS51
bnRhZ2dlZFB0cigpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3Ig
JXAgYXQgWyVwLCAlcCkuXG4iLCBtX3VubGlua2VkQ29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJs
ZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5
KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OmZp
bmFsaXplT25NYWluVGhyZWFkKCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1h
aW5UaHJlYWQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlz
Q29tcGlsYXRpb25UaHJlYWQoKSk7CiAKQEAgLTk2OCwyNSArMTAxNywxNCBAQCBDb21waWxhdGlv
blJlc3VsdCBKSVQ6OmZpbmFsaXplT25NYWluVGhyCiAKICAgICBtX2xpbmtCdWZmZXItPnJ1bk1h
aW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrcygpOwogCi0gICAgewotICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBtX2NvZGVCbG9j
ay0+c2hyaW5rVG9GaXQobG9ja2VyLCBDb2RlQmxvY2s6OlNocmlua01vZGU6OkxhdGVTaHJpbmsp
OwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJl
ck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgKytpKSB7Ci0gICAgICAgIEhhbmRsZXJJbmZvJiBoYW5k
bGVyID0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgIC8vIEZJWE1F
OiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgotICAgICAgICBoYW5kbGVyLm5hdGl2ZUNvZGUg
PSBtX2NvZGVCbG9jay0+aml0Q29kZU1hcCgpLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRh
cmdldCkpLnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7Ci0gICAgfQotCiAgICAg
aWYgKG1fcGNUb0NvZGVPcmlnaW5NYXApCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29k
ZU9yaWdpbk1hcChXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApKTsKKyAgICAgICAgbV9qaXRD
b2RlLT5tX3BjVG9Db2RlT3JpZ2luTWFwID0gV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKTsK
IAogICAgIG1fdm0tPm1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJ
VC0+YWRkKAogICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1faml0Q29kZS0+c2l6ZSgpKSAv
Ci0gICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb2RlQmxvY2stPmluc3RydWN0aW9uc1Np
emUoKSkpOworICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdW5saW5rZWRDb2RlQmxvY2st
Pmluc3RydWN0aW9uc1NpemUoKSkpOwogCi0gICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUobV9q
aXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5r
ZWRCYXNlbGluZUNvZGUobV9qaXRDb2RlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJu
IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KQEAgLTk5OCwxMSArMTAzNiwxMSBAQCBzaXplX3Qg
SklUOjpjb2RlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlua0J1ZmZlci0+c2l6ZSgpOwog
fQogCi1Db21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9u
RWZmb3J0IGVmZm9ydCkKK0NvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBk
b01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICBjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW5nKGVmZm9ydCk7Ci0gICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhy
ZWFkKCk7CisgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKGNvZGVCbG9jayk7CiB9CiAK
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKQEAgLTEwNDIsMTgg
KzEwODAsMjggQEAgdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQwogICAg
ICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoKm1fdm0sICJQ
cmVwYXJpbmcgZm9yIEpJVCBjb21waWxhdGlvbi4iX3MpOwogfQogCi11bnNpZ25lZCBKSVQ6OmZy
YW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6
ZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpKSA9PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpKSk7
CiAKICAgICByZXR1cm4gcm91bmRMb2NhbFJlZ2lzdGVyQ291bnRGb3JGcmFtZVBvaW50ZXJPZmZz
ZXQoY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsSW5SZWdpc3RlcnMpOwogfQogCi1pbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNpZ25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZv
cihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gZnJhbWVSZWdpc3RlckNvdW50
Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKK2ludCBKSVQ6OnN0YWNr
UG9pbnRlck9mZnNldEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJl
dHVybiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJs
b2NrKSAtIDEpLm9mZnNldCgpOwogfQogCitpbnQgSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIHN0YWNrUG9pbnRlck9mZnNldEZv
cihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCiBIYXNoTWFwPENTdHJpbmcs
IFNlY29uZHM+IEpJVDo6Y29tcGlsZVRpbWVTdGF0cygpCiB7CiAgICAgSGFzaE1hcDxDU3RyaW5n
LCBTZWNvbmRzPiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9u
IDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWws
IGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBP
ZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNf
Y2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAorI2luY2x1
ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUg
IkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkpJVERpc2Fzc2VtYmxlci5oIgpAQCAtNDQs
NiArNDUsNyBAQAogI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hp
ZnRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgorI2luY2x1ZGUgIkxM
SW50RGF0YS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiVW51
c2VkUG9pbnRlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KQEAgLTE0OSwxNCArMTUx
LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgQ2FsbENvbXBpbGF0
aW9uSW5mbyB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0Owog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgZG9uZUxvY2F0aW9uOworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiB1bmxpbmtlZENhbGxMaW5rSW5m
bzsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFu
dDsKKyNlbHNlCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzbG93UGF0aFN0YXJ0Owog
ICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyNlbmRpZgogICAgIH07CiAKICAg
ICB2b2lkIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyLCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKIAotICAgIGNsYXNz
IEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHJpdmF0ZSBKU0ludGVyZmFjZUpJVCB7CisgICAg
Y2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewog
ICAgICAgICBmcmllbmQgY2xhc3MgSklUU2xvd1BhdGhDYWxsOwogICAgICAgICBmcmllbmQgY2xh
c3MgSklUU3R1YkNhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRUaHVua3M7CkBAIC0xNzEs
NiArMTc4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhl
IGRpc3BsYWNlbWVudCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSBwYXRjaGVkIG9m
ZnNldC4KICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcGF0Y2hQdXRCeUlkRGVmYXVsdE9m
ZnNldCA9IDI1NjsKIAorICAgICAgICB1c2luZyBCYXNlID0gSlNJbnRlcmZhY2VKSVQ7CisKICAg
ICBwdWJsaWM6CiAgICAgICAgIEpJVChWTSYsIENvZGVCbG9jayogPSBudWxscHRyLCBCeXRlY29k
ZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSk7CiAg
ICAgICAgIH5KSVQoKTsKQEAgLTE3OCwyOCArMTg3LDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBWTSYgdm0oKSB7IHJldHVybiAqSlNJbnRlcmZhY2VKSVQ6OnZtKCk7IH0KIAogICAgICAg
ICB2b2lkIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZv
cnQpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOwor
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sq
KTsKICAgICAgICAgc2l6ZV90IGNvZGVTaXplKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBkb01h
aW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHN0
YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCwgQnl0ZWNvZGVJbmRleCBieXRlY29kZU9m
ZnNldCA9IEJ5dGVjb2RlSW5kZXgoMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBK
SVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGVmZm9ydCk7
CisgICAgICAgICAgICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5w
cml2YXRlQ29tcGlsZShjb2RlQmxvY2ssIGVmZm9ydCk7CiAgICAgICAgIH0KIAorICAgICAgICBz
dGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKFVubGlua2VkQ29kZUJsb2NrKik7
CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2Nr
Kik7CisgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29k
ZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVC
bG9jayopOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBIYXNoTWFwPENTdHJp
bmcsIFNlY29uZHM+IGNvbXBpbGVUaW1lU3RhdHMoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFNlY29uZHMgdG90YWxDb21waWxlVGltZSgpOwogCisgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNfbWV0YWRhdGFHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjptZXRhZGF0
YVRhYmxlR1BSOworICAgICAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX2NvbnN0YW50c0dQ
UiA9IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVM
aW5rUGFzcygpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CiAgICAg
ICAgIHZvaWQgbGluaygpOwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCBwcml2YXRlQ29tcGls
ZShKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZh
dGVDb21waWxlKENvZGVCbG9jayosIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgICAgICAv
LyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVj
ay4KICAgICAgICAgQ2FsbCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0
clRhZz4gZnVuY3Rpb24pCkBAIC0yMjMsNiArMjM3LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAjZW5kaWYKIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgbG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
ICAgICAgICB2b2lkIGxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
ICAgICAgICB2b2lkIGxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlw
ZSwgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVn
LCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgcHVi
bGljOgorICAgICAgICB2b2lkIGxvYWRDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudEluZGV4LCBH
UFJSZWcpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgbG9hZEdsb2JhbE9iamVjdChHUFJS
ZWcpOworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIs
IEdQUlJlZyk7CisKKyAgICAgICAgdm9pZCBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9n
dWUoR1BSUmVnIHJlc3VsdCA9IHJlZ1QwKTsKKwogICAgICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNr
KEp1bXAganVtcFRvSGFuZGxlcikKICAgICAgICAgewogICAgICAgICAgICAgbV9leGNlcHRpb25D
aGVja3MuYXBwZW5kKGp1bXBUb0hhbmRsZXIpOwpAQCAtMjU0LDYgKzI5NCwxOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWduZWQgY2FsbExpbmtJbmZv
SW5kZXgpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgorICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAorICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9
IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MK
KyAgICAgICAgICAgICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBP
cDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCisgICAgICAgICwg
dm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KKyAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKKyAgICAgICAgICAgIE9wOjpvcGNvZGVJRCA9
PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdz
CisgICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
T3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cworICAgICAgICAs
IHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQb29sOjpDb25z
dGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CisjZWxzZQogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKICAgICAgICAgICAgIE9wOjpvcGNv
ZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92
YXJhcmdzCkBAIC0yNjUsOSArMzE4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
T3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29u
c3RydWN0X3ZhcmFyZ3MKICAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzCiAgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBDYWxsTGlu
a0luZm8qKTsKKyNlbmRpZgogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAg
ICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3Qg
T3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4LCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIGJvb2wgY29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJik7CiAgICAgICAgIHZvaWQg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0yODcsMTQgKzM0MSwxMyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBl
bWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3Jp
dGVCYXJyaWVyTW9kZSk7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyKTsKKyAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcik7CiAKICAg
ICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVn
VDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShW
YWx1ZVByb2ZpbGUmLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJiwgSlNWYWx1ZVJlZ3MpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgR1BSUmVn
KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29k
ZSYsIEdQUlJlZyk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1ZhbHVlUmVncyk7CiAjZWxz
ZQogICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgSlNW
YWx1ZVJlZ3MpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOwpAQCAtMzA1LDggKzM1
OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6Omlz
X3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2
YWx1ZSwgdm9pZD4KICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNv
ZGUoT3AgYnl0ZWNvZGUpOwogCi0gICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgQXJyYXlQcm9maWxlKiwgUmVnaXN0ZXJJRCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVn
aXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJvZmlsZUdQUiwgUmVnaXN0ZXJJRCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJl
Z2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIHB0cmRpZmZfdCwgUmVnaXN0ZXJJRCBjZWxsR1BS
LCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICBFQ01BTW9kZSBlY21hTW9kZShPcCk7CkBAIC01OTMsNyArNjQ4LDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29w
X2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwpAQCAtNjExLDcgKzY2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICNlbmRpZgogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNywxNCArNjgxLDE0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAog
ICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBl
KTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwg
QWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdp
c3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHks
IEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlD
aGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgZW1pdFZh
clJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICAgICAgICAg
dm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7
CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQpA
QCAtNjQ2LDcgKzcwMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQg
ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFu
ZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAg
ICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZv
aWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAg
ICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NSw2ICs3MDksNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdp
c3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxS
ZWdpc3Rlcik7CkBAIC02NzYsMTMgKzczMSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlz
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcihWTSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0
X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5l
cmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZN
Jik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdl
bmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJf
aGFuZGxlckdlbmVyYXRvcihWTSYpOwpAQCAtNjk2LDMyICs3NDksMTYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZh
cik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRP
UihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3Io
Vk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0K
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9w
R2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0K
LSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2Nv
cGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1v
ZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4g
dXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3
ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAgICAgICAg
ICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVU
eXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JFU09MVkVf
U0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlw
ZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJF
X1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9H
RU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKTsKLQogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3Io
Vk0mKTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCisgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGVHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJik7
CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdl
bmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+
LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mLCBz
dGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKwogICAg
ICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBpdGVyKystPmZyb207CkBAIC03NjAs
MTAgKzc5NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAg
dm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChBZGRyZXNz
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGE+Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIEFk
ZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBCeXRlY29kZT4KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYs
IGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNv
bnN0IEJ5dGVjb2RlJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CiAgICAgICAg
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBB
cmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5
cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgpAQCAtODIxLDIwICs4NTgsMjAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIE9wZXJh
dGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAg
ICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1
bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBPcGVyYXRpb25UeXBlIG9wZXJhdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAgICAgICAg
ICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKLSAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShi
eXRlY29kZSwgb3BlcmF0aW9uLCByZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lLi4u
IEFyZ3M+CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1l
IEJ5dGVjb2RlLCB0eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1
bmN0aW9uVHJhaXRzPE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIHZvaWQ+Ci0gICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIEFkZHJlc3MgdGFyZ2V0
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgdGFyZ2V0
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHNldHVwQXJndW1lbnRzRm9ySW5kaXJlY3RDYWxsPE9wZXJhdGlvblR5cGU+KHRhcmdl
dCwgYXJncy4uLik7Ci0gICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgQWRkcmVzcyhHUFJJbmZv
Ojpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxl
KGJ5dGVjb2RlLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCBy
ZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9u
VHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KQEAgLTkxOSwyNSArOTU2LDIyIEBAIG5hbWVzcGFjZSBK
U0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQo
KSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6
ZWRPcklubGluZWQoKSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOyB9CiAgICAg
ICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2Zp
bGluZzsgfQogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWRPcklubGluZWQoKSB7IHJldHVybiBm
YWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRp
ZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLAogICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGFs
bCBjb2RlIGdldHMgcHJvZmlsZWQuCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygp
IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAorICAgICAgICB2b2lkIGVtaXRNYXRlcmlhbGl6
ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgdm9pZCBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICAgICAgc3RhdGljIGJvb2wgcmVwb3J0Q29tcGls
ZVRpbWVzKCk7CiAgICAgICAgIHN0YXRpYyBib29sIGNvbXB1dGVDb21waWxlVGltZXMoKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUg
bWV0YWRhdGEgdGFibGUgYW5kIHlvdSBuZWVkIGl0IHRvCi0gICAgICAgIC8vIGJlIGNvbnNpc3Rl
bnQgYWNyb3NzIHRoZSBmYXN0IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRo
aXMuCi0gICAgICAgIC8vIEl0IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVl
IHJlYWQgYnkgdGhlIGZhc3QgcGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJ
bmZvKE9wUHV0VG9TY29wZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgot
ICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsK
KworICAgICAgICB2b2lkIHJlc2V0U1AoKTsKIAogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRl
cnByZXRlcjsKIApAQCAtOTY0LDkgKzk5OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT4gbV9zbG93Q2FzZXM7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hS
ZWNvcmQ+IG1fc3dpdGNoZXM7CiAKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+
IG1fY29waWVkR2V0UHV0SW5mb3M7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEJpbmFyeUFy
aXRoUHJvZmlsZT4gbV9jb3BpZWRBcml0aFByb2ZpbGVzOwotCiAgICAgICAgIEp1bXBMaXN0IG1f
ZXhjZXB0aW9uQ2hlY2tzOwogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhD
YWxsRnJhbWVSb2xsYmFjazsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMDAw
LDExICsxMDMxLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoTWFwPGNvbnN0IElu
c3RydWN0aW9uKiwgVW5pcXVlUmVmPE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4+IG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZTsKIAogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6
ZWQ7Ci0gICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZDsKICAgICAgICAgYm9v
bCBtX3Nob3VsZEVtaXRQcm9maWxpbmc7CiAgICAgICAgIEJ5dGVjb2RlSW5kZXggbV9sb29wT1NS
RW50cnlCeXRlY29kZUluZGV4OwogCi0gICAgICAgIFJlZlB0cjxEaXJlY3RKSVRDb2RlPiBtX2pp
dENvZGU7CisgICAgICAgIENvZGVCbG9jayogbV9wcm9maWxlZENvZGVCbG9jayB7IG51bGxwdHIg
fTsKKyAgICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fdW5saW5rZWRDb2RlQmxvY2sgeyBudWxs
cHRyIH07CisKKyAgICAgICAgTWF0aElDSG9sZGVyIG1fbWF0aElDczsKKyAgICAgICAgUmVmUHRy
PEJhc2VsaW5lSklUQ29kZT4gbV9qaXRDb2RlOworCisgICAgICAgIEpJVENvbnN0YW50UG9vbCBt
X2NvbnN0YW50UG9vbDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBtX2dsb2Jh
bE9iamVjdENvbnN0YW50IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07
CisgICAgICAgIEJhZzxVbmxpbmtlZENhbGxMaW5rSW5mbz4gbV91bmxpbmtlZENhbGxzOworICAg
ICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAgICAgICBCYWc8
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICAgICAg
Rml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAg
IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwor
CisgICAgICAgIHN0cnVjdCBOb3RBQ29kZUJsb2NrIHsgfSBtX2NvZGVCbG9jazsKKworICAgICAg
ICBib29sIG1faXNTaGFyZWFibGUgeyB0cnVlIH07CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw5ICsyOTIsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENo
YXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewogICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBh
cmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1l
bnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTMyMCw3ICszMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZp
CiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEp
OwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52
ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTM0Niw3ICszNDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgICAgIH0KIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgcmVnVDIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMiwgcmVnVDEpOwor
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIHJlZ1QzLCByZWdUMiwgcmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICszNzUsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgfQogCiAgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KIApAQCAtNTczLDcgKzU3Nyw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCAKIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICBl
bWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKIH0KIApAQCAtNzE3LDggKzcyMiw4IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91
YmxlT3AoY29uc3QgSW5zdHIKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRh
KG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBVbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVROZWdJ
QyogbmVnYXRlSUMgPSBtX21hdGhJQ3MuYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBt
X2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOwog
ICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCB0aG9zZSBvcGVyYXRpb25W
YWx1ZU5lZ2F0ZSwgc2luY2UgdGhlIG9wZXJhbmQgY2FuIGJlIGEgQmlnSW50CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlv
bkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKQEAgLTg5OSw4ICs5
MDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0CiAKIHZvaWQg
SklUOjplbWl0X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwot
ICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2Zp
bGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX21hdGhJQ3MuYWRkSklUQWRkSUMoYXJp
dGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRkPihhZGRJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7
CiB9CkBAIC05NDUsMTAgKzk1MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5h
cnlNYXRoSUM8CiAgICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0
ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRl
ZElubGluZUNvZGUpIHsKICAgICAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRj
aEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBz
cmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncywgYXJp
dGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hH
UFIsIHNyY1JlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwMTUsMTAgKzEwMjEsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgICAgICBlbHNlIGlmIChy
aWdodE9wZXJhbmQuaXNDb25zdCgpKQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJpZ2h0UmVncyk7CiAgICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChz
Y3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNo
R1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxl
ZnRSZWdzLCByaWdodFJlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
bm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJp
Z2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NSwxMyArMTA2MiwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAjZW5kaWYKIAogICAgIFVuYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1p
dFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxk
U2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBUcnVzdGVk
SW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVn
VDQsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAg
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIHNyY1JlZ3Ms
IGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0
PEpfSklUT3BlcmF0aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0dKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywg
VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAg
IGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTEyMCwxMyArMTEyOCwxNCBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAjZW5kaWYKIAogICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNo
b3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nh
c3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2Zp
bGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9u
X0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dK
Sk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFU
UykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExNjYsNyArMTE3NSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAgICBpZiAoc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5h
czxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBTbmlwcGV0T3BlcmFu
ZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlw
cGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkp
OwpAQCAtMTIxMSw4ICsxMjIwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3Ry
dWN0aW9uKgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
TXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9tYXRoSUNz
LmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFk
ZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE11bD4o
bXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3Bl
cmF0aW9uVmFsdWVNdWwpOwogfQpAQCAtMTIyNyw4ICsxMjM2LDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX211bChjb25zdCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFk
YXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CisgICAgSklUU3ViSUMq
IHN1YklDID0gbV9tYXRoSUNzLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0
cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0
TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFs
dWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2
b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApKTsKICAgICBlbWl0U3RvcmUoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpLnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMSwgcmVnVDApOwogfQog
CkBAIC0xNTcsNyArMTU3LDcgQEAgc3RkOjplbmFibGVfaWZfdDwKIEpJVDo6Y29tcGlsZVNldHVw
RnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQogewogICAgIHVuc2lnbmVk
IGNoZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgaW50IGFy
Z0NvdW50ID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9p
bnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0YWNrT2Zm
c2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKQEAgLTE5Miw3
ICsxOTIsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAg
ICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRz
OwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZv
clZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIC1maXJzdEZyZWVSZWdp
c3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlv
biwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1v
dmUoVHJ1c3RlZEltbTMyKC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0
VmFyYXJnc0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7
CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDYgKiBzaXplb2Yo
dm9pZCopKSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMjAyLDcgKzIwMiw3
IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0
dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBl
bHNlCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7
Ci0gICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0KSwgZmlyc3RWYXJBcmdPZmZz
ZXQsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdU
NCksIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
cmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCkBAIC0yMzIsMTAg
KzIzMiwxMCBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2CiAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBzdG9yZVB0
cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFt
ZU9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVnVDIpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
cmVnVDEsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKIAogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKIApAQCAtMjQ5LDcgKzI0OSw3IEBAIHZv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxF
dmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlu
a0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGlu
Zm8gPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBy
ZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUubV9hcmd2OwpAQCAt
MjU4LDggKzI1OCw4IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAK
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVy
KSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7Ci0g
ICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGlu
Zm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2Rl
KTsKQEAgLTI4NiwxMSArMjg2LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IElu
c3RydWN0aW8KICAgICAqLwogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CiAgICAg
aWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2Nr
LT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAg
aW5mbyA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCkpOwogICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsK
ICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyks
IHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KICAgICAKLSAgICBhdXRvIGJ5dGVjb2Rl
SW5kZXggPSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7CisgICAgYXV0
byBieXRlY29kZUluZGV4ID0gbV9wcm9maWxlZENvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0
cnVjdGlvbik7CiAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRl
Y29kZUluZGV4KS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRz
KSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAg
ICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOyAvLyByZWdUMSwgcmVnVDAgaG9sZHMg
Y2FsbGVlLgpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKIAot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
dW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM0MSwxMiArMzQxLDEx
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICB9CiAKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAKICAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9w
cm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CiAgICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0
aCgqbV92bSwgKnRoaXMpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKQEAgLTM1NCw3ICszNTMsNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3Vu
bGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwpAQCAtMzk1LDcg
KzM5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KICAgICBK
U1ZhbHVlUmVncyBuZXh0UmVncyA9IEpTVmFsdWVSZWdzKHRhZ05leHRHUFIsIHBheWxvYWROZXh0
R1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywKICAgICAgICAgSklUVHlwZTo6QmFzZWxp
bmVKSVQsCiAgICAgICAgIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgQ2Fs
bFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLApAQCAt
NDEwLDcgKzQwOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW4K
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgbmV4dFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIG5leHRSZWdzKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgbmV4dFJlZ3MpOwogCiAgICAgZmFz
dENhc2UubGluayh0aGlzKTsKQEAgLTQ0MCwxMCArNDM5LDEwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKIAogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSgKLSAgICAgICAg
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAgICAgICBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgLy8gbWV0YWRhdGEKICAgICAgICAg
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCAvLyBvcGVyYXRpb24KICAgICAgICAgbmV4dFZSZWcs
IC8vIHJlc3VsdAotICAgICAgICBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIC8vIGFyZzEKKyAgICAgICAgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKICAgICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFy
ZzIKICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnSXRlcmF0b3JHUFIsIHBheWxvYWRJdGVyYXRvckdQ
UiksIC8vIGFyZzMKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsgLy8gYXJnNApAQCAtNDUyLDcgKzQ1MSw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnMKICAgICBhdXRvIGRv
bmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwog
fQpAQCAtNDYwLDcgKzQ1OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVu
KGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJ
dGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsK
ICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5h
cnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNTA2LDcgKzUw
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAg
cHJlc2VydmVkUmVncy5hZGQodGFnVmFsdWVHUFIpOwogICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFk
ZChwYXlsb2FkVmFsdWVHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgICAgIG1fY29kZUJsb2NrLAorICAgICAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywK
ICAgICAgICAgICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAogICAgICAgICAgICAgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICAgICAgQ2FsbFNpdGVJbmRleChCeXRlY29kZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLApAQCAtNTMzLDEwICs1MzIsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUNjsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDc7CiAgICAgICAg
IGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7Ci0g
ICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1Zh
bHVlUmVncyh0YWdEb25lR1BSLCBwYXlsb2FkRG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwg
ZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25l
ID0gYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModGFnRG9uZUdQUiwgcGF5bG9hZERv
bmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpOwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssCisgICAgICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLAogICAgICAgICAgICAg
SklUVHlwZTo6QmFzZWxpbmVKSVQsCiAgICAgICAgICAgICBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksCiAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpKSksCkBAIC01ODgsMTAgKzU4NywxMCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSgK
LSAgICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgLy8gbWV0YWRhdGEK
KyAgICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCAvLyBt
ZXRhZGF0YQogICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCAvLyBvcGVyYXRp
b24KICAgICAgICAgICAgIGRvbmVWUmVnLCAvLyByZXN1bHQKLSAgICAgICAgICAgIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICAgICAg
VHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFy
ZzEKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLCAvLyBhcmcyCiAgICAgICAgICAgICBKU1Zh
bHVlUmVncyh0YWdJdGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFyZzMK
ICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKQEAgLTYwMiw3ICs2MDEsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIGVtaXRKdW1wU2xv
d1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRo
aXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJ
c05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RP
YmplY3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
KTsKICAgICB9CiAKICAgICB7ICAgCkBAIC02MTgsMTAgKzYxNywxMCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZSgKLSAgICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgLy8gbWV0YWRh
dGEKKyAgICAgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCAv
LyBtZXRhZGF0YQogICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCAvLyBvcGVy
YXRpb24KICAgICAgICAgICAgIHZhbHVlVlJlZywgLy8gcmVzdWx0Ci0gICAgICAgICAgICBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKKyAgICAgICAg
ICAgIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAv
LyBhcmcxCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKSwgLy8gYXJnMgogICAgICAgICAgICAg
SlNWYWx1ZVJlZ3ModGFnSXRlclJlc3VsdEdQUiwgcGF5bG9hZEl0ZXJSZXN1bHRHUFIpLCAvLyBh
cmczCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOyAvLyBhcmc0CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRo
Q2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCkBAIC00NCw3ICs0NSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENh
bGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZGVzdGluYXRpb25Gb3IoYnl0ZWNvZGUsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkp
LnZpcnR1YWxSZWdpc3RlcigpLCByZWdUMCk7CiB9CiAKQEAgLTUzLDE4ICs1NCwxOCBAQCBzdGQ6
OmVuYWJsZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6
Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgJiYgT3A6Om9wY29kZUlEICE9
IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
IGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgdW5zaWduZWQg
Y2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgaW50IGFyZ0NvdW50
SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBj
aGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50Pihz
dGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwogCisK
ICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKHJlZ2lz
dGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpLCBy
ZWdUMCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAg
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIGFycmF5UHJvZmlsZUZvcihtZXRhZGF0YSwg
Y2hlY2twb2ludCkuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3Rv
cmUzMlRvTWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcENhbGw6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkNhbGxMaW5rSW5mbygpICsgTExJbnRDYWxsTGlua0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxl
KCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtNzgsNyArNzksNyBAQCBzdGQ6OmVuYWJs
ZV9pZl90PAogICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29k
ZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMKICwgdm9pZD4KLUpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVj
b2RlLCBDYWxsTGlua0luZm8qIGluZm8pCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFu
dCkKIHsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFs
dWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRz
OwpAQCAtOTEsNyArOTIsOCBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRl
Y29kCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJk
QXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNp
emVGcmFtZUZvclZhcmFyZ3M7Ci0gICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCAtZmlyc3RGcmVl
UmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIHJlZ1QwLCByZWdUMSwgLWZpcnN0
RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
LWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRo
aXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpKSksIHJlZ1Qx
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDEsMTQgKzEwMywxNiBAQCBKSVQ6OmNvbXBp
bGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0g
b3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAgICBz
ZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwotICAgIGNhbGxPcGVy
YXRpb24oc2V0dXBPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24s
IHJlZ1QzLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgbW92
ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwogCiAgICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQg
Y291bnQuCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAr
IFBheWxvYWRPZmZzZXQpLCByZWdUMik7Ci0gICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3Qg
PSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZv
LT5hZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsKKyAgICBsb2FkQ29u
c3RhbnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMCwgQ2FsbExpbmtJbmZvOjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkpLCByZWdUMyk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1Qz
LCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgQ2FsbExpbmtJbmZv
OjpvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpKTsKICAgICBub3RCaWdn
ZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCkBAIC0xMjcs
MTYgKzEzMSwxNSBAQCBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wJikKIHRlbXBs
YXRlPD4KIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXZhbCYgYnl0ZWNv
ZGUpCiB7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsK
LSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1l
OjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBh
cmd1bWVudEdQUjEpOworICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKGFy
Z3VtZW50R1BSMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCByZWdUMSwgcmVnVDIpOworICAgIHJlc2V0U1AoKTsKIAotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkocmVnVDApKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2Vj
bWFNb2RlLnZhbHVlKCkpLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KHJldHVyblZhbHVlR1BSKSk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRl
Y29kZSk7CiAKQEAgLTE0OCw3ICsxNTEsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8q
IGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSk7CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9ldmFsQ2FsbExpbmtJbmZvcy5h
ZGQoQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2Fs
bExpbmtJbmZvOjpDYWxsLCByZWdUMCk7CiAKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0
ZWNvZGUubV9hcmd2OwpAQCAtMTU2LDQzICsxNTksNDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxs
RXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZz
ZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGxvYWQ2NChBZGRyZXNz
KHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDApOwotICAgIGVtaXRWaXJ0
dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDMpOworICAgIGVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRNb3ZpbmdHbG9iYWxPYmplY3Qo
Km1fdm0sIGluZm8pOworICAgIHJlc2V0U1AoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5
dGVjb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci1ib29sIEpJVDo6Y29tcGlsZVRh
aWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQpCitib29sIEpJVDo6Y29t
cGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCwg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHRl
bXBsYXRlPD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0
ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiti
b29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENhbGwmIGJ5dGVjb2RlLCBVbmxp
bmtlZENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpCiB7Ci0gICAgQ2FsbEZy
YW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJn
cyA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBzaHVmZmxlRGF0YS5udW1iZXJUYWdSZWdpc3RlciA9
IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOwotICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9
CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxGcmFtZVNodWZmbGVEYXRhPiBzaHVmZmxlRGF0YSA9
IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCk7CisgICAgc2h1ZmZsZURhdGEtPm51
bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgc2h1ZmZsZURhdGEtPm51bVBhcmFt
ZXRlcnMgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CisgICAgc2h1ZmZs
ZURhdGEtPm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Cisg
ICAgc2h1ZmZsZURhdGEtPm51bUxvY2FscyA9CiAgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7Ci0gICAgc2h1ZmZsZURh
dGEuYXJncy5yZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKKyAgICBzaHVmZmxlRGF0YS0+YXJncy5y
ZXNpemUoYnl0ZWNvZGUubV9hcmdjKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0
ZWNvZGUubV9hcmdjOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CisgICAg
ICAgIHNodWZmbGVEYXRhLT5hcmdzW2ldID0KICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluSlNTdGFjaygKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudEluY2x1ZGluZ1RoaXMoaSkgLSBieXRlY29kZS5tX2FyZ3YsCiAgICAgICAgICAgICAgICAg
RGF0YUZvcm1hdEpTKTsKICAgICB9Ci0gICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KLSAgICAgICAg
VmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0gICAgc2h1ZmZsZURh
dGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAgICBpbmZvLT5zZXRG
cmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICBzaHVmZmxlRGF0YS0+Y2FsbGVlID0g
VmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAgc2h1ZmZsZURh
dGEtPnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycygmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogCi0gICAgSnVtcExpc3Qgc2xvd1BhdGhz
ID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
KnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICBsb2FkQ29uc3Rh
bnQoY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKKyAgICBKdW1wTGlzdCBzbG93UGF0aHMg
PSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwg
cmVnVDIsIFsmXSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCAqc2h1ZmZsZURh
dGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgIH0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQ
YXRocyk7CisKKyAgICBzaHVmZmxlRGF0YS0+c2hyaW5rVG9GaXQoKTsKKyAgICBpbmZvLT5mcmFt
ZVNodWZmbGVEYXRhID0gV1RGTW92ZShzaHVmZmxlRGF0YSk7CisKICAgICBhdXRvIGRvbmVMb2Nh
dGlvbiA9IGxhYmVsKCk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAgICAgCkBAIC0yMTgsMTQgKzIyNSwy
NSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIC0g
Q2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVy
IHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KICAgICAqLwotICAgIENh
bGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxf
ZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKLSAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwg
aW5mbyk7CisKKyAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBpbmZvQ29uc3RhbnQgPSBVSU5UX01BWDsKKyAgICBp
ZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKSB7CisgICAgICAgIGluZm8gPSBtX3VubGlua2Vk
Q2FsbHMuYWRkKCk7CisgICAgICAgIGluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgICAgIGluZm8tPmNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihv
cGNvZGVJRCk7CisKKyAgICAgICAgaW5mb0NvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvLCBpbmZvKTsKKworICAgICAgICBBU1NF
UlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Cisg
ICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygp
KTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS51bmxp
bmtlZENhbGxMaW5rSW5mbyA9IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQgPSBpbmZvQ29uc3RhbnQ7Cisg
ICAgfQorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvQ29uc3RhbnQpOwogCiAg
ICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3
aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgYXV0byBieXRlY29kZUluZGV4ID0g
bV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQzMl90IGxv
Y2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOworICAgIHVp
bnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KS5iaXRz
KCk7CiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQWRkcmVzcyhjYWxs
RnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBj
YWxsZWUuCkBAIC0yMzQsMTYgKzI1MiwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25z
dCBJbnN0cnVjdGlvCiAgICAgaWYgKGNvbXBpbGVDYWxsRXZhbChieXRlY29kZSkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNh
bGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxs
VHlwZUZvcihvcGNvZGVJRCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAgaWYgKGNvbXBpbGVU
YWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgpKQorICAgIGlmIChjb21w
aWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4LCBpbmZvQ29uc3Rh
bnQpKQogICAgICAgICByZXR1cm47CiAKKyAgICBsb2FkQ29uc3RhbnQoaW5mb0NvbnN0YW50LCBy
ZWdUMik7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAgICBhdXRvIHNs
b3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7CisgICAgICAgIGF1dG8gc2xvd1Bh
dGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhpcywgcmVn
VDAsIHJlZ1QyLCBbJl0gewogICAgICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwog
ICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdyhyZWdUMik7CiAgICAgICAgIH0pOwpA
QCAtMjUzLDE0ICsyNjcsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3RpbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBzbG93UGF0aHMgPSBpbmZv
LT5lbWl0RmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRh
SUM6Olllcyk7CisgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXREYXRhSUNG
YXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyKTsKICAgICBhdXRvIGRvbmVMb2NhdGlvbiA9IGxh
YmVsKCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKIAogICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwog
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICByZXNldFNQ
KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CkBAIC0yNzMsMjEgKzI4
NiwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QzKTsKKyAgICBsb2FkQ29uc3RhbnQobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOwogCiAgICAgaWYgKG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJn
cyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8tPmVtaXRTbG93UGF0aCgqbV92bSwg
KnRoaXMpOworICAgIENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ1Nsb3dQYXRoKCptX3ZtLCAqdGhp
cywgcmVnVDIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMpIHsKICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZy
b21UYWlsQ2FsbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVj
a1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIHJlc2V0U1AoKTsKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0
ZWNvZGUpOwpAQCAtMzk1LDE3ICs0MDcsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jf
b3Blbihjb25zdCBJbgogCiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmdm0oKS5wcm9w
ZXJ0eU5hbWVzLT5uZXh0OwogICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVH
ZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBtb3ZlKHJlZ1Qw
LCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUik7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5
SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAg
SklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wu
YWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9H
UFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVl
ZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX25leHQpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlc3VsdEdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25l
eHQsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgZmFzdENhc2UubGluayh0aGlzKTsK
IH0KQEAgLTQxNiwxMCArNDQyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29w
ZW4oY29ucwogICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yT3Blbj4oaW5zdHJ1
Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9I
b3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKLQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBHUFJSZWcgaXRlcmF0b3JHUFIgPSByZWdUMDsKKyAgICBHUFJSZWcgaXRlcmF0b3JH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgSnVtcExpc3Qgbm90T2Jq
ZWN0OwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9yR1BSKSk7
CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckdQUikpOwpA
QCAtNDMyLDE5ICs0NTYsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29ucwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2Fs
bCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8o
KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJhdG9y
R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50KS5yYXdCaXRzKCkpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBtb3ZlKGl0
ZXJhdG9yR1BSLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBl
KG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogCiAgICAg
YXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVy
YXRvclJlc3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogCiAgICAgZG9uZS5saW5rKHRo
aXMpOwogfQpAQCAtNDUyLDcgKzQ3NCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9vcGVuKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BJdGVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9uID0gKFsmXSAoKSB7
CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKICAgICAgICAgY2FzZSBO
YXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25hcnJvdzsKQEAgLTQ3MCw1MCAr
NDkxLDc5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICBK
dW1wIGZhc3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
MiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihJdGVyYXRpb25Nb2RlOjpHZW5l
cmljKSkpOwogCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBvcjgoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgQWJzb2x1
dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2l0ZXJhdGlvbk1ldGFkYXRhLnNlZW5Nb2RlcykpOworICAg
IGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9m
ZnNldE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0
T2ZTZWVuTW9kZXMoKSwgcmVnVDApOworICAgIG9yMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSwgcmVnVDApOworICAgIHN0b3JlOFRv
TWV0YWRhdGEocmVnVDAsIGJ5dGVjb2RlLCBPcEl0ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNl
dE9mSXRlcmF0aW9uTWV0YWRhdGEoKSArIEl0ZXJhdGlvbk1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZT
ZWVuTW9kZXMoKSk7CiAgICAgY29tcGlsZU9wQ2FsbDxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rp
b24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQo
KTsKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2JqZWN0KSBpbiByZWdU
MAogCi0gICAgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGl0ZXJSZXN1bHRH
UFIgPSByZWdUMjsKLSAgICBHUFJSZWcgZG9uZUdQUiA9IHJlZ1QxOwotICAgIC8vIGl0ZXJSZXN1
bHRHUFIgd2lsbCBnZXQgdHJhc2hlZCBieSB0aGUgZmlyc3QgZ2V0IGJ5IGlkIGJlbG93LgotICAg
IG1vdmUodmFsdWVHUFIsIGl0ZXJSZXN1bHRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgaXRlckNhbGxS
ZXN1bHRHUFIpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CiAgICAgewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoaXRlclJlc3VsdEdQUik7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChyZXR1cm5WYWx1ZUdQUiA9PSBiYXNlR1BSKTsKKworICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUik7CiAKICAgICAgICAgUmVnaXN0ZXJTZXQgcHJlc2VydmVkUmVn
cyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAgICAgcHJl
c2VydmVkUmVncy5hZGQodmFsdWVHUFIpOworICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZChpdGVy
Q2FsbFJlc3VsdEdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKLSAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25l
LmltcGwoKSksIEpTVmFsdWVSZWdzKGl0ZXJSZXN1bHRHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BS
KSwgcmVnVDMsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+ZG9u
ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHN0
dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENv
bnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChK
SVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAg
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICAgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJl
LCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyBkb25lR1BSIH0pOworICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IGRvbmVH
UFIgfSk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kb25lLCBk
b25lR1BSKTsKICAgICAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICB9CiAKLQog
ICAgIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7Ci0gICAgICAgIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1QzOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzKGRvbmVH
UFIsIGl0ZXJDYWxsUmVzdWx0R1BSKTsKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
IHNjcmF0Y2hBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNo
MSA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAg
ICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7
CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBK
U1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1Qx
LCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbEdQUik7CisKKyAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBiYXNl
R1BSKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
KSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5w
cm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEpTVmFs
dWVSZWdzKHZhbHVlR1BSKSwgcmVnVDQsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
bW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZS5pbXBsKCkpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFj
Y2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQg
dG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IHZhbHVlR1BSIH0pOwotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlR1BSKTsKKyAgICAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHRHUFIgfSk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0
R1BSKTsKIAogICAgICAgICBpdGVyYXRpb25Eb25lLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtNTI3
LDU5ICs1NzcsNTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwog
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcEl0ZXJhdG9yTmV4dD4oaW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVj
a3BvaW50KGp1bXAoKSk7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyOworCiAgICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICB7
CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkb25lVlJlZyA9IGJ5dGVjb2RlLm1fZG9uZTsKLSAg
ICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMjsKIAogICAgICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogICAgICAgICBKdW1wTGlzdCBub3RPYmplY3Q7Ci0gICAgICAgIG5vdE9i
amVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90
T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAogICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUu
aW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21f
Z2V0QnlJZEluZGV4KytdOwogICAgICAgICAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChp
dGVyUmVzdWx0R1BSKSk7CisgICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmpl
Y3QoaXRlckNhbGxSZXN1bHRHUFIpKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRH
UFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7Ci0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
Ci0KLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgcmVnVDEpOwotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAg
ICAgICAgbW92ZShpdGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUp
PihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIGRvbmVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworCisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihkb25lVlJlZywgZG9uZUdQUik7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRHUFIpOwogICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBu
b3RPYmplY3QubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJv
d0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RP
YmplY3QsIGFyZ3VtZW50R1BSMCk7CiAgICAgfQogCiAgICAgeyAgIAogICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0
ZWNvZGUubV92YWx1ZTsKLSAgICAgICAgR1BSUmVnIGl0ZXJSZXN1bHRHUFIgPSByZWdUMDsKIAog
ICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnQgPSB2bSgpLnByb3BlcnR5TmFtZXMtPnZh
bHVlLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlk
c1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBBZGRyZXNz
KEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUsIHZhbHVlVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICAgICAgbW92ZShp
dGVyQ2FsbFJlc3VsdEdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwg
QWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVy
YXRpb24oKSksIHZhbHVlVlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihp
ZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogICAgIH0KLQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCAr
MzIsMTEgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJS
ZWdpc3RlclNldC5oIgogCisKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBQQ1RvQ29kZU9yaWdp
bk1hcDsKKwogbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBDb21tb25EYXRhOwogY2xhc3MgSklUQ29k
ZTsKQEAgLTE1OSwxMCArMTYyLDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIHVzZURh
dGFJQyhKSVRUeXBlIGppdFR5cGUpCiAgICAgewotICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURh
dGFJQygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpOwogICAg
IH0KIApAQCAtMjIzLDYgKzIyNiw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTaGFyZWQoKSBj
b25zdCB7IHJldHVybiBtX3NoYXJlQXR0cmlidXRlID09IFNoYXJlQXR0cmlidXRlOjpTaGFyZWQ7
IH0KIAorICAgIHZpcnR1YWwgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkg
eyByZXR1cm4gbnVsbHB0cjsgfQorCiBwcml2YXRlOgogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwog
ICAgIFNoYXJlQXR0cmlidXRlIG1fc2hhcmVBdHRyaWJ1dGU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAkocmV2aXNpb24gMjgzMDUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgdm9pZCBKSVRDb21waWxhdGlvbktleTo6ZHVt
cChQcmludFN0cmVhbQogICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBvdXQucHJpbnQoIihDb21waWxlIG9mICIsICptX3Byb2ZpbGVkQmxv
Y2ssICIgd2l0aCAiLCBtX21vZGUsICIpIik7CisgICAgb3V0LnByaW50KCIoQ29tcGlsZSBvZiAi
LCBSYXdQb2ludGVyKG1fY29kZUJsb2NrKSwgIiB3aXRoICIsIG1fbW9kZSwgIikiKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENv
bXBpbGF0aW9uS2V5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb21waWxhdGlvbktleS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDU3ICsz
MCw1NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgQ29kZUJsb2NrOwotY2xhc3MgQ29k
ZUJsb2NrU2V0OworY2xhc3MgSlNDZWxsOwogCiBjbGFzcyBKSVRDb21waWxhdGlvbktleSB7CiBw
dWJsaWM6CiAgICAgSklUQ29tcGlsYXRpb25LZXkoKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9j
ayhudWxscHRyKQorICAgICAgICA6IG1fY29kZUJsb2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9t
b2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uKQogICAgIHsKICAgICB9
CiAgICAgCiAgICAgSklUQ29tcGlsYXRpb25LZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVU
eXBlKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhudWxscHRyKQorICAgICAgICA6IG1fY29k
ZUJsb2NrKG51bGxwdHIpCiAgICAgICAgICwgbV9tb2RlKEpJVENvbXBpbGF0aW9uTW9kZTo6REZH
KQogICAgIHsKICAgICB9CiAgICAgCi0gICAgSklUQ29tcGlsYXRpb25LZXkoQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSkKLSAgICAgICAgOiBtX3Byb2Zp
bGVkQmxvY2socHJvZmlsZWRCbG9jaykKKyAgICBKSVRDb21waWxhdGlvbktleShKU0NlbGwqIHBy
b2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQorICAgICAgICA6IG1fY29kZUJs
b2NrKHByb2ZpbGVkQmxvY2spCiAgICAgICAgICwgbV9tb2RlKG1vZGUpCiAgICAgewogICAgIH0K
ICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
IW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgPT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlk
Q29tcGlsYXRpb247CisgICAgICAgIHJldHVybiAhbV9jb2RlQmxvY2sgJiYgbV9tb2RlID09IEpJ
VENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOwogICAgIH0KICAgICAKICAgICBi
b29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSAhPSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFs
aWRDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuICFtX2NvZGVCbG9jayAmJiBtX21vZGUgIT0g
SklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CiAgICAgfQogICAgIAotICAg
IENvZGVCbG9jayogcHJvZmlsZWRCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZmlsZWRCbG9j
azsgfQogICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
OyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEpJVENvbXBpbGF0aW9uS2V5JiBv
dGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3Byb2ZpbGVkQmxvY2sgPT0gb3Ro
ZXIubV9wcm9maWxlZEJsb2NrCisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jayA9PSBvdGhlci5t
X2NvZGVCbG9jawogICAgICAgICAgICAgJiYgbV9tb2RlID09IG90aGVyLm1fbW9kZTsKICAgICB9
CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
V1RGOjpwYWlySW50SGFzaChXVEY6OlB0ckhhc2g8Q29kZUJsb2NrKj46Omhhc2gobV9wcm9maWxl
ZEJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8SklUQ29tcGlsYXRpb25N
b2RlPjo6dHlwZT4obV9tb2RlKSk7CisgICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKFdU
Rjo6UHRySGFzaDxKU0NlbGwqPjo6aGFzaChtX2NvZGVCbG9jayksIHN0YXRpY19jYXN0PHN0ZDo6
dW5kZXJseWluZ190eXBlPEpJVENvbXBpbGF0aW9uTW9kZT46OnR5cGU+KG1fbW9kZSkpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToK
LSAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKKyAgICAvLyBFaXRoZXIgQ29kZUJsb2Nr
KiBvciBVbmxpbmtlZENvZGVCbG9jayogZm9yIGJhc2xlbGluZSBKSVQuCisgICAgSlNDZWxsKiBt
X2NvZGVCbG9jazsKICAgICBKSVRDb21waWxhdGlvbk1vZGUgbV9tb2RlOwogfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKICNpbmNsdWRlICJJbmxpbmVBY2Nlc3MuaCIKKyNpbmNsdWRlICJKSVQuaCIK
ICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIK
IApAQCAtNDYsMTAgKzQ3LDkgQEAgc3RhdGljIFN0cnVjdHVyZVN0dWJJbmZvKiBnYXJiYWdlU3R1
YkluZgogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OkpJVElubGluZUNhY2hlR2VuZXJhdG9yKAog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAog
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQotICAgIDogbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQotICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCisgICAgOiBtX2ppdFR5cGUoaml0
VHlwZSkKIHsKLSAgICBtX3N0dWJJbmZvID0gbV9jb2RlQmxvY2sgPyBtX2NvZGVCbG9jay0+YWRk
U3R1YkluZm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKKyAg
ICBtX3N0dWJJbmZvID0gY29kZUJsb2NrID8gY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NU
eXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOwogICAgIG1fc3R1YkluZm8tPmNh
bGxTaXRlSW5kZXggPSBjYWxsU2l0ZTsKIAogICAgIG1fc3R1YkluZm8tPnVzZWRSZWdpc3RlcnMg
PSB1c2VkUmVnaXN0ZXJzOwpAQCAtNTksNyArNTksNiBAQCB2b2lkIEpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yOjpmaW5hbGl6ZSgKICAgICBMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYg
c2xvd1BhdGgsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydCkK
IHsKICAgICBtX3N0dWJJbmZvLT5zdGFydCA9IHN0YXJ0OwotCiAgICAgbV9zdHViSW5mby0+ZG9u
ZUxvY2F0aW9uID0gZmFzdFBhdGgubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihtX2RvbmUp
OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkKQEAgLTY3LDYgKzY2
LDE1IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIG1fc3R1
YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHNsb3dQYXRoLmxvY2F0aW9uT2Y8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KG1fc2xvd1BhdGhCZWdpbik7CiB9CiAKK3ZvaWQgSklUSW5saW5lQ2Fj
aGVHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5z
aWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBtX3N0YXJ0ID0gaml0
LmxhYmVsKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlw
ZSkpOworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBq
aXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICBt
X2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKwogSklUQnlJZEdlbmVyYXRvcjo6SklUQnlJZEdlbmVy
YXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNjZXNz
VHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3Mg
YmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUikKQEAgLTExMCw3ICsx
MTgsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpKSVRHZXRCeUlkR2VuZXJhdG9yCiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cywKICAgICBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlKQogICAgIDogSklUQnlJZEdlbmVyYXRvcihjb2RlQmxvY2ssIGppdFR5cGUsIGNvZGVP
cmlnaW4sIGNhbGxTaXRlLCBhY2Nlc3NUeXBlLCB1c2VkUmVnaXN0ZXJzLCBiYXNlLCB2YWx1ZSwg
c3R1YkluZm9HUFIpCi0gICAgLCBtX2lzTGVuZ3RoQWNjZXNzKHByb3BlcnR5TmFtZS51aWQoKSA9
PSBjb2RlQmxvY2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKKyAgICAsIG1f
aXNMZW5ndGhBY2Nlc3MoY29kZUJsb2NrICYmIHByb3BlcnR5TmFtZS51aWQoKSA9PSBjb2RlQmxv
Y2stPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoLmltcGwoKSkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVChiYXNlLnBheWxvYWRHUFIoKSAhPSB2YWx1ZS50YWdHUFIoKSk7CiB9CkBAIC0xMjAsNiAr
MTI4LDM3IEBAIHZvaWQgSklUR2V0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGEKICAgICBn
ZW5lcmF0ZUZhc3RDb21tb24oaml0LCBtX2lzTGVuZ3RoQWNjZXNzID8gSW5saW5lQWNjZXNzOjpz
aXplRm9yTGVuZ3RoQWNjZXNzKCkgOiBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2Vz
cygpKTsKIH0KIAorCisjaWYgVVNFKEpTVkFMVUU2NCkKK3N0YXRpYyB2b2lkIGdlbmVyYXRlR2V0
QnlJZElubGluZUFjY2VzcyhKSVQmIGppdCwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgYmFz
ZSwgR1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyByZXN1bHQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lw
SW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0
Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmxvYWQzMihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkJ5SWRTZWxmT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQubG9hZFByb3BlcnR5KGJh
c2UsIHNjcmF0Y2gsIEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOworICAgIGF1dG8gZmluaXNoZWQg
PSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGpp
dC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAg
ZmluaXNoZWQubGluaygmaml0KTsKK30KKwordm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBH
UFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0
YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0
LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGdlbmVyYXRlR2V0QnlJ
ZElubGluZUFjY2VzcyhqaXQsIHN0dWJJbmZvR1BSLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2UsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisjZW5k
aWYKKwogSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNl
dCYgdXNlZFJlZ2lzdGVycywKICAgICBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1ZhbHVlUmVncyB2
YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzdHVi
SW5mb0dQUikKQEAgLTEzOCw2ICsxNzcsMjAgQEAgdm9pZCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3I6OmdlbmVyYQogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6
c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKK3ZvaWQg
SklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAg
bV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywg
c3R1YkluZm9HUFIpOworICAgIGdlbmVyYXRlR2V0QnlJZElubGluZUFjY2VzcyhqaXQsIHN0dWJJ
bmZvR1BSLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVH
ZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnNjcmF0Y2gsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlz
UmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisjZW5k
aWYKKwogSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcigKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdz
IHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCAKQEAgLTE0OSw2ICsy
MDIsMzYgQEAgSklUUHV0QnlJZEdlbmVyYXRvcjo6SklUUHV0QnlJZEdlbmVyYXRvcgogICAgIG1f
c3R1YkluZm8tPnVzZWRSZWdpc3RlcnMuY2xlYXIoc2NyYXRjaCk7CiB9CiAKKyNpZiBVU0UoSlNW
QUxVRTY0KQordm9pZCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoSklUJiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOwor
CisgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHVi
SW5mbywgc3R1YkluZm9HUFIpOworCisgICAgR1BSUmVnIGJhc2UgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnNjcmF0Y2g7CisgICAgR1BSUmVnIHNjcmF0Y2gyID0gQmFzZWxpbmVQdXRCeUlkUmVn
aXN0ZXJzOjpzY3JhdGNoMjsKKyAgICBHUFJSZWcgdmFsdWUgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnZhbHVlOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAg
aml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJy
YW5jaDMyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNz
QmFzZVN0cnVjdHVyZSgpKSk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkp
LCBzY3JhdGNoKTsKKyAgICBqaXQuc3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB7IHZhbHVlIH0s
IGJhc2UsIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKKyAgICBhdXRvIGZpbmlzaGVkID0gaml0Lmp1bXAo
KTsKKworICAgIHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsKKyAgICBqaXQuZmFySnVtcChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKworICAgIGZpbmlzaGVkLmxp
bmsoJmppdCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisjZW5kaWYKKwogdm9pZCBK
SVRQdXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJiBqaXQp
CiB7CiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJv
cGVydHlSZXBsYWNlKCkpOwpAQCAtMjAwLDcgKzI4Myw3IEBAIHZvaWQgSklURGVsQnlWYWxHZW5l
cmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5m
b0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZv
LT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBK
SVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6
QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBq
aXQubGFiZWwoKTsKQEAgLTIzNiw3ICszMTksNyBAQCB2b2lkIEpJVERlbEJ5SWRHZW5lcmF0b3I6
OmdlbmVyYXRlRmFzdFBhCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIp
OwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9z
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1
YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
Q29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBt
X3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0Lmxh
YmVsKCk7CkBAIC0yNzAsNyArMzUzLDcgQEAgdm9pZCBKSVRJbkJ5VmFsR2VuZXJhdG9yOjpnZW5l
cmF0ZUZhc3RQYQogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAg
ICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0
aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1f
c3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQ
dHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93
UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgp
OwpAQCAtMzAwLDYgKzM4MywzNCBAQCB2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVG
YXN0UGF0CiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9y
UHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBKSVRJbkJ5
SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5z
aWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0Lmxh
YmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisK
KyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIEdQ
UlJlZyByZXN1bHQgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIEdQUlJl
ZyBzY3JhdGNoID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAg
ICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBq
aXQuYm94Qm9vbGVhbih0cnVlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdCB9KTsKKyAgICBhdXRvIGZp
bmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0KTsK
KyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsK
KworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9
CisjZW5kaWYKKwogSklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6SklUSW5zdGFuY2VPZkdlbmVyYXRv
cigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwKICAgICBjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIHZhbHVlLCBHUFJS
ZWcgcHJvdG90eXBlLCBHUFJSZWcgc3R1YkluZm9HUFIsCkBAIC0zMzIsNyArNDQzLDcgQEAgdm9p
ZCBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpnZW5lcmF0ZUZhcwogICAgIG1fc3RhcnQgPSBqaXQu
bGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1
bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsK
ICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgp
OwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtMzY4LDcgKzQ3OSw3IEBAIHZvaWQgSklU
R2V0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVs
KCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZD
b2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKEND
YWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAg
fSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAg
ICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTQwNSw3ICs1MTYsNyBAQCB2b2lkIEpJVFB1dEJ5
VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwog
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1f
c3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9z
dHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0
cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxz
ZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9k
b25lID0gaml0LmxhYmVsKCk7CkBAIC00NDAsNyArNTUxLDcgQEAgdm9pZCBKSVRQcml2YXRlQnJh
bmRBY2Nlc3NHZW5lcmF0b3I6OmdlbgogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJ
bmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1Yklu
Zm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSks
IEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAg
ICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9
IGppdC5sYWJlbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkNvZGVPcmln
aW4uaCIKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklU
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJQdXRLaW5k
LmgiCkBAIC0zOCwxMSArMzksMTIwIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2FjaGVhYmxl
SWRlbnRpZmllcjsKIGNsYXNzIENhbGxTaXRlSW5kZXg7CiBjbGFzcyBDb2RlQmxvY2s7CitjbGFz
cyBKSVQ7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvOwogCiBlbnVtIGNsYXNzIEFjY2Vzc1R5cGUgOiBpbnQ4X3Q7CiBlbnVtIGNsYXNz
IEpJVFR5cGUgOiB1aW50OF90OwogCisjaWYgVVNFKEpTVkFMVUU2NCkKK3N0cnVjdCBCYXNlbGlu
ZURlbEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUklu
Zm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZv
OjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnMgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKK307CisKK3N0cnVjdCBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkg
PSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQ
UkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJ
bmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAg
ICAvLyBXZSByZWx5IG9uIHRoaXMgd2hlbiBsaW5raW5nIGEgQ29kZUJsb2NrIGFuZCBpbml0aWFs
aXppbmcgcmVnaXN0ZXJzIGZvciBhIEdldEJ5VmFsIFN0dWJJbmZvLgorICAgIHN0YXRpY19hc3Nl
cnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsK
KyAgICBzdGF0aWNfYXNzZXJ0KHJlc3VsdCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpy
ZXN1bHQpOworICAgIHN0YXRpY19hc3NlcnQoc3R1YkluZm8gPT0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm8pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDEgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MiA9IEdQUkluZm86OnJlZ1Q0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gz
ID0gR1BSSW5mbzo6cmVnVDU7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50
R1BSMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm90byA9IEdQUkluZm86OmFyZ3Vt
ZW50R1BSMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86
OmFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQ
UkluZm86Om5vbkFyZ0dQUjA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIg
PSBHUFJJbmZvOjpub25BcmdHUFIxOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7Cisg
ICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2Up
OworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BS
SW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUklu
Zm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVycyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGRvbnRDbG9iYmVyUmVnaXN0ZXIgPSBHUFJJbmZvOjpyZWdUMzsKK307CisK
K3N0cnVjdCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHRoaXNWYWx1ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lSW5C
eUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBiYXNlID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpzY3JhdGNoOworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0
cnVjdCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2
YWx1ZSA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb2Zp
bGUgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
byA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3RydWN0IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVn
VDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmQgPSBHUFJJbmZvOjpyZWdUMTsK
KyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFz
ZSk7CisgICAgc3RhdGljX2Fzc2VydChicmFuZCA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMjsKK307CisjZW5kaWYKKwogY2xhc3MgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3Ig
ewogcHJvdGVjdGVkOgogICAgIEpJVElubGluZUNhY2hlR2VuZXJhdG9yKCkgeyB9CkBAIC02Miwx
MiArMTcyLDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbmFsaXplKAogICAgICAgICBMaW5rQnVm
ZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlciwK
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KTsK
LSAgICAKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVu
c2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CisKKyAgICBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBtX3VubGlua2VkU3R1YkluZm8geyBudWxscHRyIH07Cisg
ICAgdW5zaWduZWQgbV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCB7IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworCiBwcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2Nr
KiBtX2NvZGVCbG9jazsKICAgICBKSVRUeXBlIG1faml0VHlwZTsKICAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogbV9zdHViSW5mbzsKIAorcHVibGljOgorICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2RvbmU7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIG1fc2xvd1BhdGhCZWdpbjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBt
X3Nsb3dQYXRoQ2FsbDsKQEAgLTk4LDcgKzIxNCw3IEBAIHByb3RlY3RlZDoKICAgICBKU1ZhbHVl
UmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBtX3N0YXJ0OworcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1f
c2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTExLDYgKzIyNyw3IEBAIHB1YmxpYzoKICAgICAgICAg
SlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwg
QWNjZXNzVHlwZSk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1i
bGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5z
aWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIAogcHJpdmF0ZToK
ICAgICBib29sIG1faXNMZW5ndGhBY2Nlc3M7CkBAIC0xMjQsNiArMjQxLDcgQEAgcHVibGljOgog
ICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAg
ICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHRo
aXNSZWdzLCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0
dWJJbmZvR1BSKTsKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
IH07CiAKQEAgLTEzMiwxMCArMjUwLDExIEBAIHB1YmxpYzoKICAgICBKSVRQdXRCeUlkR2VuZXJh
dG9yKCkgPSBkZWZhdWx0OwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvcigKLSAgICAgICAgQ29k
ZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIGJh
c2UsCi0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJl
ZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CisgICAgICAgIENvZGVCbG9jayosIEpJVFR5
cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAorICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBK
U1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNN
QU1vZGUsIFB1dEtpbmQpOwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fz
c2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYs
IHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAgICAgCiAg
ICAgVl9KSVRPcGVyYXRpb25fR1NzaUpKQyBzbG93UGF0aEZ1bmN0aW9uKCk7CiAKQEAgLTE2Mywx
MSArMjgyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFs
dWVSZWdzIG1fdmFsdWU7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTE5MSw4ICszMDgsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFj
cm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9z
dGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsK
IH07CiAKQEAgLTIxNiw4ICszMzEsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFz
dFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQ
YXRoSnVtcDsKIH07CiAKQEAgLTI0MSw4ICszNTQsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdl
bmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVt
cCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTI1NSw2ICszNjYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9H
UFIpOwogCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAg
dm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1Yklu
Zm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIH07CiAKIGNsYXNzIEpJVEluc3RhbmNl
T2ZHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IgewpAQCAt
Mjc3LDggKzM4OSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmluYWxpemUoTGlua0J1ZmZlciYg
ZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExpbmtCdWZmZXIpOwogCi1w
cml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMzAyLDExICs0
MTIsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJik7CiAKLXByaXZhdGU6CiAgICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFs
dWVSZWdzIG1fcmVzdWx0OwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBA
IC0zMzAsOCArNDM4LDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0
aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhK
dW1wOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMzggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdp
c3RlciBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNEb3VibGUoKTsKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKK30KKworQUxXQVlTX0lOTElORSBib29s
IEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBp
ZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9
PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigp
OworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25z
dGFudCkgeworICAgICAgICAvLyBBbGwgbGluayB0aW1lIGNvbnN0YW50cyBhcmUgY2VsbHMuCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5k
KHNyYykuaXNDZWxsKCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0
YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25z
dGFudCgpKTsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAg
UkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29u
c3RhbnQpOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMp
OwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFk
ZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xNTYsMzYgKzE4
MSwzNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4CiAjZW5kaWYK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklU
OjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxl
KGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiAjZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFs
dWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVy
blZhbHVlR1BSKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5W
YWx1ZUdQUik7CiAjZW5kaWYKICAgICByZXR1cm4gY2FsbDsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgTWV0YWRhdGE+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwg
QWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BS
MiwgcmV0dXJuVmFsdWVHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CiAgICAgZW1p
dFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKIH0K
IAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsK
LSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKQorICAgIGlmICghaXNLbm93
bkNlbGwocmVnKSkKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogfQogCkBAIC0yMDUsNyAr
MjMwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aGFzQW55U2xvd0Nhc2VzKAogaW5saW5l
IHZvaWQgSklUOjphZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpCiB7CiAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0
ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOworICAgIEFTU0VSVChtX3VubGlua2VkQ29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkp
OwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpICsgMSk7CiAKICAgICBhdXRvIHJl
c3VsdCA9IG1fY2hlY2twb2ludExhYmVscy5hZGQobV9ieXRlY29kZUluZGV4LCBsYWJlbCgpKTsK
QEAgLTIxNSw3ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3Bv
aW50CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1w
IGp1bXApCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2J5dGVjb2RlSW5kZXgsICJUaGlz
IG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJh
dGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Iik7Ci0gICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkp
OworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNv
ZGVJbmRleCktPmhhc0NoZWNrcG9pbnRzKCkpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBtX2J5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpICsgMSk7CiAKICAgICBhdXRvIGl0ZXIgPSBtX2NoZWNrcG9pbnRMYWJlbHMuZmluZCht
X2J5dGVjb2RlSW5kZXgpOwpAQCAtMjkzLDI5ICszMTgsMjkgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdENvdW50KEFic3RyYQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJh
bmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlz
Q29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3Ry
aW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKKyAg
ICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3Jj
KSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJp
bmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0
aCgpID09IDE7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogaW5saW5lIHZvaWQgSklUOjpl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBKU1ZhbHVl
UmVncyB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2hvdWxkRW1pdFByb2ZpbGluZygpKTsKIAotICAg
IC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1Y2tldCwgc28g
d2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKLSAgICAvLyBzdG9yZS4KLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIHN0b3JlNjQodmFsdWUuZ3ByKCksIHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwotI2Vs
c2UKICAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYml0d2lzZV9jYXN0
PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPih2YWx1ZVByb2ZpbGUubV9idWNrZXRzKTsKICAgICBz
dG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsK
ICAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnRhZyk7Ci0j
ZW5kaWYKIH0KKyNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSks
IFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJ
ZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
Z1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAjZWxz
ZQogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgpAQCAtMzIzLDQxICszNDgs
MzcgQEAgaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlYwogCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCisj
aWYgVVNFKEpTVkFMVUU2NCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZUZv
cihtZXRhZGF0YSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSksIHZhbHVlKTsKLX0KIAot
I2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEdQUlJlZyByZXN1bHRSZWcpCi17Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJl
ZykpOworICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVPZmZzZXRG
b3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpICsgVmFsdWVQcm9maWxl
OjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7CisgICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgQWRkcmVz
cyhzX21ldGFkYXRhR1BSLCBvZmZzZXQpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRh
dGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1l
dGFkYXRhLCBHUFJSZWcgcmVzdWx0UmVnKQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Citp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5
dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQogewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwogfQogI2VuZGlmCiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQg
Y2VsbEdQUiwgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgc2NyYXRjaEdQ
UikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlm
Zl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQg
c2NyYXRjaEdQUikKIHsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAg
IGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBh
cnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0
b3JlMzJUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBvZmZzZXRPZkFycmF5UHJvZmls
ZSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBS
ZWdpc3RlcklEIHNjcmF0Y2hHUFIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Citpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29k
ZSYgYnl0ZWNvZGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQog
ewotICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgbG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYXJyYXlQ
cm9maWxlR1BSLCBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKSk7
Ci0gICAgfQorICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgQnl0
ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpv
ZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSwgY2VsbEdQUiwgc2NyYXRjaEdQUik7CiB9CiAK
IEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFs
UmVnaXN0ZXIgc3JjKQpAQCAtMzgwLDcgKzQwMSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRJbml0UmVnaXN0ZXIKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVh
bFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wg
PSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihyZWcpOworICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcihyZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29u
c3RhbnRQb29sKSwgdmFsdWUpOwogICAgIH0gZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJl
c3NGb3IocmVnKSwgdmFsdWUpOwpAQCAtNDk2LDcgKzUxNyw3IEBAIGlubGluZSB2b2lkIEpJVDo6
ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3QKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJs
b2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAg
ICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVt
cCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTA2LDcgKzUyNyw3IEBAIGlubGluZSB2b2lkIEpJVDo6
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKIAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCiB7Ci0g
ICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93
bkNlbGwocmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUxNCwxMSArNTM1LDYgQEAg
aW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogICAgIH0KIH0KIAotQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVy
IHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJh
bmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBW
aXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSkgewpAQCAtNTQ0LDExICs1NjAsMTEgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgp
OyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBh
dGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAgaWYg
KHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsK
LSAgICAgICAgZWxzZQorICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFu
dE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAg
IG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgZHN0KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtNTY2LDExICs1ODIsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBk
c3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQo
VmlydHVhbFJlZ2lzdGVyIHNyYykKLXsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0
ZXJJRCBmcm9tKQogewogICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKQEAgLTU5
NSw3ICs2MDYsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAK
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdp
c3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9j
ay0+aXNLbm93bkNlbGwodlJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7CiB9CiAKQEAgLTYzNywzMCArNjQ4
LDcgQEAgQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IAogewogICAgIGlm
ICh0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2Nr
LT5vdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKLX0KLQotQUxXQVlTX0lOTElORSBH
ZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0ZWNvZGUpCi17
Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0YUlEICsgMTsgLy8gSGFzaE1h
cCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtleQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEdl
dFB1dEluZm9zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRHZXRQdXRJ
bmZvcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIEdldFB1dEluZm8oaXRlcmF0b3ItPnZhbHVlKTsK
LSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9nZXRQdXRJbmZvOwotICAgIG1fY29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0
SW5mby5vcGVyYW5kKCkpOwotICAgIHJldHVybiBnZXRQdXRJbmZvOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBCaW5hcnlPcD4KLUFMV0FZU19JTkxJTkUgQmluYXJ5QXJpdGhQcm9maWxlIEpJVDo6
Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQotewotICAgIHVpbnQ2NF90IGtl
eSA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQmluYXJ5T3A6Om9wY29kZUlEKSArIDEpIDw8IDMy
IHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7Ci0gICAgYXV0
byBpdGVyYXRvciA9IG1fY29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0
ZXJhdG9yICE9IG1fY29waWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0
ZXJhdG9yLT52YWx1ZTsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIG1fY29waWVk
QXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwotICAgIHJldHVybiBhcml0aFBy
b2ZpbGU7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZz
ZXQoaW5zdHJ1Y3Rpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY4MSw2ICs2
NjksNjAgQEAgQUxXQVlTX0lOTElORSBFQ01BTW9kZSBKSVQ6OmVjbWFNb2RlPE9wUAogICAgIHJl
dHVybiBFQ01BTW9kZTo6c3RyaWN0KCk7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxv
YWRQdHIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
Ojpsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zm
c2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQzMihBZGRyZXNzKHNfbWV0YWRhdGFHUFIs
IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5
dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBs
b2FkOChBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmU4VG9NZXRhZGF0YShWYWx1ZVR5cGUgdmFsdWUsIGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTgodmFs
dWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlMzJU
b01ldGFkYXRhKEdQUlJlZyB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qg
b2Zmc2V0KQoreworICAgIHN0b3JlMzIodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91
bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNv
ZGUpICsgb2Zmc2V0KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6Om1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBC
eXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNl
dEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBzX21ldGFkYXRhR1BSLCByZXN1
bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29uc3RhbnQoSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBjb25zdGFudEluZGV4LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxv
YWRQdHIoQWRkcmVzcyhzX2NvbnN0YW50c0dQUiwgc3RhdGljX2Nhc3Q8dWludHB0cl90Pihjb25z
dGFudEluZGV4KSAqIDgpLCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
b2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZENvbnN0YW50KG1fZ2xv
YmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIEdQUlJlZyBy
ZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKKyAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRz
VmVjdG9yQnVmZmVyKCkpLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIGNv
bnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKHZvaWQqKSksIHJlc3VsdCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29u
c3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAg
ICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUo
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwg
YWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKQEAg
LTExMCw3ICsxMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJ
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRh
dGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUp
OwpAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UKICAgICBlbWl0TG9hZFBheWxvYWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogICAg
IC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3Vs
ZCBkby4KICAgICBKdW1wIGhhc0luc3RhbmNlVmFsdWVOb3RDZWxsID0gZW1pdEp1bXBJZk5vdEpT
Q2VsbChoYXNJbnN0YW5jZVZhbHVlKTsKLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUg
PSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkp
OworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkt
PmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKIAogICAgIC8vIFdl
IGtub3cgdGhhdCBjb25zdHJ1Y3RvciBpcyBhbiBvYmplY3QgZnJvbSB0aGUgd2F5IGJ5dGVjb2Rl
IGlzIGVtaXR0ZWQgZm9yIGluc3RhbmNlb2YgZXhwcmVzc2lvbnMuCiAgICAgZW1pdExvYWRQYXls
b2FkKGNvbnN0cnVjdG9yLCByZWdUMCk7CkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChwcm90byk7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgIG1fcHJv
ZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICByZWdUMCwgLy8gcmVz
dWx0CiAgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQpAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKICAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOwogICAgIGVtaXRMb2Fk
VGFnKHByb3RvLCByZWdUMyk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbnN0YW5jZU9mT3B0aW1pemUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBn
ZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDAsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QxKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0
YW5jZU9mT3B0aW1pemUsIGRzdCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMCwgcmVnVDIpLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDEpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwogfQogCkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKAogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAg
IGVtaXRMb2FkUGF5bG9hZChjb25zdHJ1Y3RvciwgcmVnVDIpOwogICAgIGVtaXRMb2FkKGhhc0lu
c3RhbmNlVmFsdWUsIHJlZ1Q0LCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25J
bnN0YW5jZU9mQ3VzdG9tLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCByZWdUMiwgSlNW
YWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSk7CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KICAgICAKQEAgLTI0OCw3ICsyNDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAgICAgCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9m
aWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAg
IGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM3OCw3ICszNzgs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zCiAgICAgVmlydHVh
bFJlZ2lzdGVyIG5hbWUgPSBieXRlY29kZS5tX25hbWU7CiAgICAgZW1pdExvYWRQYXlsb2FkKGZ1
bmMsIHJlZ1QxKTsKICAgICBlbWl0TG9hZChuYW1lLCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC00MDgsNyArNDA4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0
aQogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwogICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJl
Z1QzOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsK
LSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5j
aElmRmFsc2V5KHZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDIyLDcgKzQyMiw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICAgICBKU1ZhbHVl
UmVncyB2YWx1ZShyZWdUMSwgcmVnVDApOwogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwog
ICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHko
dm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgdmFsdWUsIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzcsNyArNDM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVx
X251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdl
dCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsK
IApAQCAtNDYzLDcgKzQ2Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJ
bnN0cnUKIAogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpLCB0YXJnZXQpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGFkZEp1
bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRl
ID0ganVtcCgpOwogCkBAIC01MDQsNyArNTA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRl
ZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29u
c3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwogICAgIEFTU0VSVChzcGVj
aWFsUG9pbnRlci5pc0NlbGwoKSk7CkBAIC01NTIsMTMgKzU1MiwxMyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5j
aElmTm90U3RyaW5nKHJlZ1QyKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCByZWdUMCwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmluZ0VxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1Qy
KTsKICAgICBzdG9yZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2Fz
ZS4KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVz
CiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwog
CiAgICAgc3RvcmVSZXN1bHQubGluayh0aGlzKTsKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwpAQCAtNTkxLDE0ICs1OTEsMTQgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcEVx
SnVtcFNsb3coVmVjdG9yPFNsbwogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0
cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVn
VDAsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwg
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpF
cSA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwogICAgIGRv
bmUuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBHZW5lcmljIGNhc2UuCiAgICAgZ2VuZXJpY0Nh
c2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91YmxlcwogICAgIGdlbmVyaWNDYXNl
LmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVybyA6
IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdldCk7CiAKICAgICBkb25lLmxpbmsodGhp
cyk7CkBAIC02NDMsMTMgKzY0MywxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0
IEluc3RydWN0CiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1Qy
KSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKICAgICBzdG9yZVJlc3Vs
dC5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2Fz
ZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2Uu
bGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogCiAgICAgc3RvcmVSZXN1bHQu
bGluayh0aGlzKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmV0dXJuVmFsdWVHUFIp
OwpAQCAtNzYyLDcgKzc2Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29u
c3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0
cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTc3Miw3ICs3NzIsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KIApAQCAtNzkxLDcgKzc5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3Qg
SW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoRXF1YWws
IHJlZ1QwLCByZWdUMiwgcmVnVDEpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgp
OwpAQCAtODIzLDcgKzgyMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IElu
c3RydWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoTm90RXF1YWws
IHJlZ1QwLCByZWdUMiwgcmVnVDEpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgp
OwpAQCAtODQ2LDcgKzg0Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3Ry
dWN0aW8KICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwogICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7
CiAgICAgZW1pdExvYWQoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgbV9wcm9maWxlZENvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGp1bXBUb0V4
Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiB9CiAKQEAgLTg2Miw3ICs4NjIsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsK
ICAgICBpc0ludDMyLmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAgaWYgKHNyYyAhPSBk
c3QpCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CkBAIC04ODQsNyAr
ODg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKGFyZ3VtZW50VmFsdWVSZWdzLCByZWdUMikpOwog
ICAgIGlzQmlnSW50LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAgaWYgKHNyYyAhPSBk
c3QpCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CkBAIC05MTUsNyAr
OTE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydQogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAgaWYgKHNyYyAhPSBkc3Qp
CiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CkBAIC05MzEsNyArOTMx
LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJh
bWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVz
cyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBXaGVuIHRoZSBMTEludCB0aHJvd3MgYW4gZXhjZXB0aW9u
LCB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlJ3ZlIGFscmVhZHkgdGllcmVkIHVwCisgICAgLy8g
dGhlIHNhbWUgQ29kZUJsb2NrIHRvIGJhc2VsaW5lLCBhbmQgd2UnbGwgY2F0Y2ggdGhlIGV4Y2Vw
dGlvbiBpbiB0aGUgYmFzZWxpbmUgSklUIChiZWNhdXNlCisgICAgLy8gd2UgdXBkYXRlZCB0aGUg
ZXhjZXB0aW9uIGhhbmRsZXJzIHRvIHBvaW50IGhlcmUpLiBCZWNhdXNlIHRoZSBMTEludCB1c2Vz
IGEgZGlmZmVyZW50IHZhbHVlCisgICAgLy8gaW5zaWRlIHNfY29uc3RhbnRzR1BSLCB0aGUgY2Fs
bGVlIHNhdmVzIHdlIHJlc3RvcmUgYWJvdmUgbWF5IG5vdCBjb250YWluIHRoZSBjb3JyZWN0IHJl
Z2lzdGVyLgorICAgIC8vIFNvIHdlIHJlcGxlbmlzaCBpdCBoZXJlLgorICAgIHsKKyAgICAgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgp
KSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklU
RGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKKyAgICB9
CiAKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFu
ZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxl
RXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTk1
NCw3ICs5NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAg
ICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIs
IGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1
OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jayk7CiAgICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIg
PSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmls
aW5nKCkpCiAgICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRy
eU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CkBAIC05
OTYsOCArMTAwNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAK
ICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sg
dGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxl
JiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9j
ay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxl
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9wcm9maWxlZENvZGVCbG9jay0+dW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFw
cGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zm
c2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNU
SVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDIzLDEzICsxMDM0LDEzIEBAIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2Ny
dXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJs
ZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50Lgot
ICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV9wcm9maWxlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJ
bmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJh
Y3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwog
CiAgICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4LCB1bmxp
bmtlZFRhYmxlLm1fbWluKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJX
aXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWlu
KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKQEAgLTEwNDEs
MTMgKzEwNTIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgog
ICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAog
ICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0
aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5
dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAg
bGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKICAgICBlbWl0TG9h
ZChzY3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
d2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJs
ZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKQEAg
LTEwNjgsNyArMTA3OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0
aW8KICAgICAvLyBFdmVuIHRob3VnaCBKSVQgY29kZSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0
aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRl
cnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZl
dGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBmb3IgKGludCBpID0gQ29kZUJs
b2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkg
PCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCisgICAgZm9yIChpbnQgaSA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBpIDwg
bV9wcm9maWxlZENvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCiAgICAgICAgIGVtaXRTdG9yZSh2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwganNVbmRlZmluZWQoKSk7CiAKICAgICBKSVRTbG93
UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRo
X2VudGVyKTsKQEAgLTEwODcsNyArMTA5OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29w
ZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxs
PiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0
ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKQEAgLTExMjIsNyArMTEzMyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFN0cnVjdHVy
ZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwog
ICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIgPSBieXRlY29kZS5tX3NyY0RzdDsKIApA
QCAtMTE0NSw3ICsxMTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IElu
c3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlw
ZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAg
LTEyMzksNyArMTI1MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90
YWkKICAgICBlbWl0TG9hZFRhZyhieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDEpOwogICAgIEpT
VmFsdWVSZWdzIHRoaXNSZWdzKHJlZ1QxLCByZWdUMik7CiAgICAgZW1pdExvYWRQYXlsb2FkKGJ5
dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChz
aGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hh
ZG93UGFja2V0UmVnLCB0aGlzUmVncywgcmVnVDMsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENv
ZGVCbG9jayksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMSArNTQsMTQgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX3NyYzsKIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2
YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7Ci0gICAgICAgIGVsc2UKKyAgICAg
ICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2Rl
QmxvY2soc3JjKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBzdG9yZTY0KEltbTY0KEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDApOworICAgICAgICAg
ICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgfQorCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICs5MCwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwot
ICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXpl
KHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9
IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0s
IGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAK
ICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxsb2Nh
dG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAg
UmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKIAotICAgIGlmICghYWxsb2NhdG9yKQot
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVsc2UgewotICAgICAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxs
cHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0
b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRJ
bml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNp
dHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7Ci0gICAgICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVj
dDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpLCBhbGxvY2F0b3JSZWcpOworICAg
IGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6
Om9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJlZyk7CisKKyAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAg
IGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgp
LCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93
Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBlbWl0SW5pdGlhbGl6ZUlubGlu
ZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKKyAgICBtdXRhdG9yRmVuY2UoKm1fdm0p
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmpl
Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKKwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1l
dGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0
dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmpl
Y3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiB9CiAKQEAgLTEzMSw3ICsxMzIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVy
cmlkZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5j
ZVZhbHVlLCByZWdUMCk7CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBT
eW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZh
bHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9u
KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBKdW1wIGN1c3RvbWhhc0lu
c3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNl
U3ltYm9sRnVuY3Rpb24pKSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVj
dG9yLCByZWdUMCk7CiAKQEAgLTE1NCwzMCArMTU2LDM4IEBAIHZvaWQgSklUOjplbWl0X29wX2lu
c3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90
eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFs
dWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9y
IGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNh
biB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdp
c3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9HUFIgPSBCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BS
ID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9HUFIpOwogICAgIAogICAgIC8vIENoZWNr
IHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBj
aGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAg
ICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1Q1
LAotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHJlc3VsdEdQUiwKKyAgICAgICAg
dmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAgICAgICBzdHViSW5mb0dQUiwKKyAgICAg
ICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMSwgQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFj
Y2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOworICAgIHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQg
c3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6
OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCisKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCArMjAyLDEzIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOwotICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihB
ZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9w
dGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOwotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3Rh
dGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlID09IGFyZ3VtZW50
R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnBy
b3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3Rh
bmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMjQwLDcgKzI0OSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KIAogICAgIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCks
IHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDAp
OwogCkBAIC0zODMsOSArMzkyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3Ry
dWN0aW9uKgogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0m
IHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9o
YW5kbGVyR2VuZXJhdG9yKFZNJikKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgaml0
LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAgLTQxMSw3ICs0MjAsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAKICAgICBpZiAoZHN0ICE9IHNyYykK
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNDM0LDkgKzQ0MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9r
ZXkoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZnVuY3Rpb24sIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX25hbWUsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25O
YW1lLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC00NjUsOCArNDc0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0
cnVjdGkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdU
MjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNv
bnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0g
ICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFs
c2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1Qw
LCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVj
dEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJ
U3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
ICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTQ4
MCw3ICs0OTEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAg
ICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBi
ZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9G
VEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMs
IHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAg
IEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qx
OwpAQCAtNTE5LDcgKzUzMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IElu
c3RydWMKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVtcCBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdU
MSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5j
aFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQo
KSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNG
b3JlaWduID0ganVtcCgpOwogCkBAIC01NDMsNyArNTU0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
am5lcV9udWxsKGNvbnN0IEluc3RydQogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2Vz
IC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAg
ICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwg
dGFyZ2V0KTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1Qx
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgp
OwogCkBAIC01ODIsMTUgKzU5MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9v
cl9udWxsKGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV92YWx1ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5k
KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5p
c0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJh
bmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwo
KSkpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1bXBlZCk7
CisgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJl
Z1QxKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJl
Z1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVj
b2RlLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwogfQpAQCAtNjI1LDgg
KzYzNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEg
PSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29u
c3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAo
YnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBK
U1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJn
ZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJ
c1RydXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1w
KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDAsNyArNjUxLDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1h
a2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxh
YmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxp
bmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkg
bm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZt
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9
IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKQEAgLTY5NSw3
ICs3MDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOwor
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMSwg
cmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxzZQogICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CkBAIC03MTEs
NyArNzIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lm
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
dGhyb3duVmFsdWVHUFIgPSBhcmd1bWVudEdQUjE7CkBAIC03MjAsNyArNzMyLDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogCiAjaWYgTlVNQkVSX09GX0NBTExF
RV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgaml0LmxvYWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUs
IGFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVySW1wbChhcmd1bWVudEdQUjApOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihhcmd1bWVudEdQUjApOwogI2VuZGlmCiAKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKQEAgLTkw
OCw3ICs5MjAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4o
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKIH0KIApAQCAtOTE4LDcgKzkzMSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9qbnN0cmljdGVxKGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
cmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTMxLDcgKzk0NSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKICAgICAKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0g
ZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAg
LTk1MSw3ICs5NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3Ry
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKICAgICBpc0JpZ0lu
dC5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk3OCw3ICs5OTIsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3Qo
cmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05OTMsNyArMTAwNywxOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDY0KEFkZHJlc3MocmVn
VDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwog
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpj
YWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
CisgICAgLy8gV2hlbiB0aGUgTExJbnQgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlcmUgaXMgYSBj
aGFuY2UgdGhhdCB3ZSd2ZSBhbHJlYWR5IHRpZXJlZCB1cAorICAgIC8vIHRoZSBzYW1lIENvZGVC
bG9jayB0byBiYXNlbGluZSwgYW5kIHdlJ2xsIGNhdGNoIHRoZSBleGNlcHRpb24gaW4gdGhlIGJh
c2VsaW5lIEpJVCAoYmVjYXVzZQorICAgIC8vIHdlIHVwZGF0ZWQgdGhlIGV4Y2VwdGlvbiBoYW5k
bGVycyB0byBwb2ludCBoZXJlKS4gQmVjYXVzZSB0aGUgTExJbnQgdXNlcyBhIGRpZmZlcmVudCB2
YWx1ZQorICAgIC8vIGluc2lkZSBzX2NvbnN0YW50c0dQUiwgdGhlIGNhbGxlZSBzYXZlcyB3ZSBy
ZXN0b3JlIGFib3ZlIG1heSBub3QgY29udGFpbiB0aGUgY29ycmVjdCByZWdpc3Rlci4KKyAgICAv
LyBTbyB3ZSByZXBsZW5pc2ggaXQgaGVyZS4KKyAgICB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJlZ1QwKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9m
SklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7CisgICAgfQogCiAgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlv
bklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMDExLDIzICsxMDM2LDEx
IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1
bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1
ZmZlcjsKLSAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRj
aCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7Ci0gICAgZWxzZQotICAgICAgICBj
YWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hB
bmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFu
ZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0
byBza2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAg
ICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
RXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0g
ICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVy
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7
Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxl
KSwgcmVncyk7Ci0gICAgICAgIH0pOwotICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
IH0KIApAQCAtMTA1Myw4ICsxMDY2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShj
b25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3Nj
cnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRp
b25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1w
bGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1f
c3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgs
IGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFi
bGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwODEsMTMgKzEwOTQsMTQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxS
ZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0
ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBz
dGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0g
ICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJl
Y29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJl
Y29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5r
ZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlw
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFi
bGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3du
S2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgsIHVubGlua2Vk
VGFibGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFn
KTsKIH0KIApAQCAtMTA5OSwyMCArMTExMywyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
c3RyaW5nKGNvbnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2Rl
Lm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0
aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtl
ZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0
cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3Jk
KHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3Jk
OjpTdHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxl
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5k
ZXgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIHRhYmxlSW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpT
U3dpdGNoUHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOwotICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVi
dWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVn
VDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkpLCByZWdUMCk7CiAgICAg
SnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5
dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRo
aXMpOwpAQCAtMTEzMyw3ICsxMTQ5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25z
dCBJbnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihF
cXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBq
dW1wKCk7CkBAIC0xMTQ4LDcgKzExNjQsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNv
bnN0IEluc3RydWN0CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTE2Niw3ICsxMTgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5z
dHJ1YwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVh
bCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CkBAIC0xMTg4LDEyICsxMjAzLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0
IEluc3RydWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2Ug
aW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBv
aW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3Qg
bGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgc2l6ZV90IGNvdW50ID0g
bV9jb2RlQmxvY2stPm51bVZhcnMoKTsKKyAgICBzaXplX3QgY291bnQgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1WYXJzKCk7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGZv
ciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1Zp
cnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCiAgICAgICAgIGVtaXRJbml0UmVnaXN0
ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCi0gICAgZW1pdFdyaXRlQmFycmllciht
X2NvZGVCbG9jayk7CisgICAgCisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwKTsKIAogICAg
IGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAjZWxzZQpAQCAtMTIxMiw3ICsxMjI5LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNo
KFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTEzMTAsMjMgKzEzMjcsMTkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZUlEKiBj
YWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRT
dHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BU
b1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1QyKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3Jl
YXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwotICAgIFdyaXRlQmFy
cmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxs
ZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJh
cmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKQEAg
LTEzNDIsNyArMTM1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IElu
c3QKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9m
ZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
V2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRh
VGFnKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1
bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpT
RnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKIAotICAgIGxvYWRQdHIoY2Fj
aGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcENyZWF0ZVRoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZENhbGxlZSgp
LCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0g
YnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6
OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0
cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1NlZW5N
dWx0aXBsZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzNzIsNyArMTM4NSw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4o
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBy
ZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1Zh
bHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzODIsNyArMTM5Niw4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4
MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEzOTQsNyArMTQwOSw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVn
VDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDA0LDcgKzE0MjAsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJl
Z1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMiha
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MTgsMTAgKzE0MzUsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1YWxS
ZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwogfQpAQCAtMTQzMCw3ICsxNDQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAgIGlmIChVTkxJS0VMWShPcHRpb25z
OjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2Nr
LT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgIGlm
IChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emlu
ZygpICYmIG1fdW5saW5rZWRDb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emlu
Z0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0oKS5nZXRMb29w
SGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkUHRyKHB0ciwg
cmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaFB0cihCZWxvdywg
cmVnVDAsIFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29w
c0xpbWl0KCkpKTsKQEAgLTE0NDAsNyArMTQ1OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3Bf
aGludChjb25zdCBJbnN0cnUKICNlbHNlCiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAjZW5k
aWYKLSAgICAgICAgbW92ZVZhbHVlKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVzdWx0
UmVncyk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVzdWx0UmVncy5ncHIoKSk7CiAgICAg
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgICAgIGVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTE0NTMsOCAr
MTQ3MSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKIAogICAg
IC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAogICAgIGlmIChjYW5CZU9wdGlt
aXplZCgpKSB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZl
T3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZv
ckxvb3AoKSksCi0gICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJl
c3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAgICAgICBBZGRyZXNzKHJlZ1QwLCBD
b2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9CiB9CiAKQEAg
LTE1MDksNyArMTUyOCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25z
dCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMs
IGFyZ3VtZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZz
ZXRHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTIyLDcgKzE1NDIsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfY2hlY2tfdHJh
cHNfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0
ZXJzOjplYnApOwpAQCAtMTU2NCwzNCArMTU4NCwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
cmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRHUFIw
OworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVt
aXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVj
b2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29w
ZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4
ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsK
KyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0
YW50LCBhcmd1bWVudEdQUjIpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2Rl
SUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3Bf
bmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dl
bmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3Bf
bmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBv
cF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhl
Yyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5j
dGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0K
IApAQCAtMTYyMSwyMyArMTY0MywyNCBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9u
KGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1
bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
cmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQ
UjEpOwogI2VuZGlmCiAKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2Rl
QmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBj
b25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0
aW9uRXhwciwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVj
b2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1l
bnRHUFIyKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlm
IChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2Vu
ZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3
X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5j
RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0g
b3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAg
fQogfQogCkBAIC0xNjY0LDI5ICsxNjg3LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hc3lu
Y19nZW5lcmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2Rl
Lm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAs
IHNpemUpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMik7CisgICAg
bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5OjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBzaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5
X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6
ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFk
YXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMik7CiAjZWxzZQorICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0
YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFs
bG9jYXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKICAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1Qx
LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5k
UHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
Ci0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMs
IHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQogCkBAIC0xNjk0
LDggKzE3MTgsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKKyAgICBtX2lzU2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAg
ICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2Nh
dGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3Rh
cmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTc3NywyMCArMTgwMywyNSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdH
UFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxl
bXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1Bh
Y2tldFJlZyA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8v
IFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRj
aDJSZWcgPSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRv
d1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1
bWVudCByZWdpc3Rlci4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAg
ICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3Jh
dGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNr
ZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9j
aywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNr
ZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywg
cmVnVDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBV
U0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIG1faXNTaGFyZWFi
bGUgPSBmYWxzZTsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNp
Y0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlz
KTsKQEAgLTE4NjAsNyArMTg5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChj
b25zdCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg4Niw3ICsxOTE3LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCks
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNl
cyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgi
CiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50
aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUg
IkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNs
dWRlICJERkdPU1JFbnRyeS5oIgpAQCAtMjg1NSw3ICsyODU2LDcgQEAgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBj
b2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtl
ZFRhYmxlLm1fY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwogCkBAIC0yODgwLDcgKzI4
ODEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNW
YWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2st
PmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxv
Y2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAg
ICAgdm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJbnQzMigpKQpAQCAtMjkwMyw3ICsyOTA0
LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdm9pZCogcmVzdWx0
OwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0
cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBTdHJp
bmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZhbHVlKGdsb2JhbE9iamVjdCkuaW1wbCgp
OwpAQCAtMjkxOSw3ICsyOTIwLDYgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blN3aXRjaAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQog
Ci0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0yOTcxLDcgKzI5NzEsNiBAQCBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc29sdmVkU2NvcGUpOwogfQotI2VuZGlmCiAKIEpTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkKIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyODMwNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjkwLDkgKzI5MCw3IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
R2V0UHIKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhV
bmtub3duS2V5VHlwZSwgY2hhciosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGtl
eSwgc2l6ZV90IHRhYmxlSW5kZXgsIGludDMyX3QgbWluKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgY2hhciosIChWTSos
IEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgsIGludDMyX3QgbWluKSk7CiBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3du
S2V5VHlwZSwgY2hhciosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6
ZV90IHRhYmxlSW5kZXgpKTsKLSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIEpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUsIEVuY29k
ZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQ
QykpOwotI2VuZGlmCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldEZyb21T
Y29wZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9u
KiBieXRlY29kZVBDKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFRv
U2NvcGUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29k
ZVBDKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODcsNyArODcsMTIgQEAgYXV0byBKSVRQbGFuOjp0aWVyKCkgY29uc3Qg
LT4gVGllcgogCiBKSVRDb21waWxhdGlvbktleSBKSVRQbGFuOjprZXkoKQogewotICAgIHJldHVy
biBKSVRDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLCBt
X21vZGUpOworICAgIEpTQ2VsbCogY29kZUJsb2NrOworICAgIGlmIChtX21vZGUgPT0gSklUQ29t
cGlsYXRpb25Nb2RlOjpCYXNlbGluZSkKKyAgICAgICAgY29kZUJsb2NrID0gbV9jb2RlQmxvY2st
PnVubGlua2VkQ29kZUJsb2NrKCk7CisgICAgZWxzZQorICAgICAgICBjb2RlQmxvY2sgPSBtX2Nv
ZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIHJldHVybiBKSVRDb21waWxhdGlv
bktleShjb2RlQmxvY2ssIG1fbW9kZSk7CiB9CiAKIGJvb2wgSklUUGxhbjo6aXNLbm93blRvQmVM
aXZlQWZ0ZXJHQygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChj
b25zdAogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBh
eWxvYWQoZ2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJCeUlkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
c2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03
Miw3ICs3Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKIAog
ICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKHNl
dHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlZ1QxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBs
KCksIG9wdGlvbnMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9z
ZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg3
LDcgKzg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAg
IGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGdldHRl
ciwgcmVnVDMpOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1Q0KTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwg
YXR0cmlidXRlcywgcmVnVDMsIHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dEdldHRlclNldHRlciwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1Qx
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIGF0dHJp
YnV0ZXMsIHJlZ1QzLCByZWdUNCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDEsNyAr
MTAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVt
aXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMik7CiAgICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1Qx
LCByZWdUMCk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1Qz
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNSw3
ICsxMTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAg
ZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVn
VDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVn
VDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyMyw3ICsxMjMs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKQEAgLTEzMSw4ICsxMzEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdExvYWQoYmFzZSwgYmFzZVJlZ3MudGFnR1BS
KCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksCisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwKICAgICAgICAgYmFzZVJlZ3MsIHJlc3Vs
dFJlZ3MsIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTE2Niw3ICsx
NjYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eVJlZ3MudGFnR1BSKCkp
OwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAg
ICBiYXNlUmVncywgcHJvcGVydHlSZWdzLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCByZWdU
NCk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC0yMDIsNyArMjAyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiAgICAgZW1pdExv
YWQyKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCksIHByb3Bl
cnR5LCBwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5wYXlsb2FkR1BSKCkpOwog
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGlt
aXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBKU1ZhbHVlUmVncyhiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQ
UigpKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5
bG9hZEdQUigpKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdl
bi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5
bG9hZEdQUigpKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJl
Z3MucGF5bG9hZEdQUigpKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAK
ICAgICBib3hCb29sZWFuKHJlZ1QwLCByZXN1bHRSZWdzKTsKQEAgLTIxNiw3ICsyMTYsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKTsKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X2lkKGNvbnN0IEluCiAKICAgICBlbWl0TG9hZChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSwg
YmFzZVJlZ3MucGF5bG9hZEdQUigpKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9w
dGltaXplLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCiAgICAg
Ym94Qm9vbGVhbihyZWdUMCwgcmVzdWx0UmVncyk7CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMSk7CiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChyZWdUMCwgcHJvZmlsZSwgcmVnVDQpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7
CiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwg
cmVnVDQpOwpAQCAtMjU3LDcgKzI1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHIKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKICAgICAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMiksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOwogICAgICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CkBAIC0yNjUsNyArMjY1LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgICAg
ICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogICAgIH0KIH0KQEAgLTI3NSw3ICsyNzUs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgaWYgKGhh
c0FueVNsb3dDYXNlcyhpdGVyKSkgewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgICAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CkBAIC0yODQsNyArMjg0
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOworICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKICAgICB9CiB9CkBAIC0zMDUsMTMgKzMw
NSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBtX3By
b2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6Okdl
dFByaXZhdGVOYW1lLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRS
ZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTMzMCw3ICsz
MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAKICAgICBh
dXRvIGJhc2VHUFIgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIGF1dG8gcHJvcGVy
dHlHUFIgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC0zNDgsNyArMzQ4LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgSW52YWxp
ZEdQUlJlZywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNT
eW1ib2wgPSB0cnVlOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTM3Nyw3
ICszNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAg
SlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCk7CiAKICAgICBhdXRvIG9wZXJhdGlv
biA9IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZp
ZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHZhbHVl
UmVncywgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVS
ZWdzLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAKICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtMzk1LDcgKzM5
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkpOwogCiAgICAg
SklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmls
ZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJp
dmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAg
ICAgIGJhc2VSZWdzLCBicmFuZFJlZ3MsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpA
QCAtNDE4LDcgKzQxOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFu
ZCgKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJy
YW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleF07CiAgICAgKyttX3ByaXZhdGVC
cmFuZEFjY2Vzc0luZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9m
aWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3Ms
IGJyYW5kUmVncyk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIH0KIApAQCAtNDM1LDcgKzQzNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3By
aXZhdGVfYnJhbmQoY28KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgYmFz
ZVJlZ3MudGFnR1BSKCkpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBiYXNlUmVncywgYnJhbmRSZWdzLCBJbnZh
bGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTQ1Miw3ICs0NTIsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNz
R2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNj
ZXNzSW5kZXhdOwogICAgICsrbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleDsKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3Mp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJh
bmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgYnJhbmRSZWdzKTsKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC00NjUsNyArNDY1
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7CkBAIC00NzgsNyArNDc4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cgogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdU
MCwgcmVnVDYsIHJlZ1Q3KTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0
QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
bV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAg
ICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
LCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCByZWdUNiwgSW52YWxpZEdQUlJlZyk7CiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CkBAIC01MDQsNyArNTA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSQogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAg
ICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBKSVQ6
OmVjbWFNb2RlKGJ5dGVjb2RlKTsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIApAQCAtNTI0LDcgKzUyNCw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVn
VDIsIHJlZ1QxLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwg
cmVnVDUsIHJlZ1Q0KTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3Qg
PyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0
aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21h
TW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJh
dGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGdlbi5zdHViSW5mbygp
LCBwcm9maWxlKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVj
bWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXpl
IDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUu
aXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25Q
dXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGdlbi5zdHViSW5m
bygpLCBwcm9maWxlKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CiB9CkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dl
dF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9m
aWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBl
bWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlLCByZWdUMSk7CkBAIC01NDIsMTMgKzU0MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFs
aWRHUFJSZWcsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJS
ZWcsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpKTsKIH0KIApAQCAtNTU4LDEzICs1NTgsMTMgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdl
dEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBn
ZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNTc1LDcgKzU3
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJl
Z1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAt
NTgzLDEzICs1ODMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25z
dAogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5
bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9h
ZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRC
eUlkRGlyZWN0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShk
c3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApA
QCAtNTk5LDEzICs1OTksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJl
Y3QoYwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJ
ZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVn
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQpAQCAtNjE0LDEwICs2MTQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZF9kaXJlY3QoYwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogICAgIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTYzMCwxMyArNjMwLDEzIEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVz
dWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIG1f
cHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9j
aywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywg
SW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTY0NiwxMyArNjQ2LDEzIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKICAgICAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJ
bmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2Vu
LnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTY2Myw3ICs2NjMsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
ICAgIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQodGhp
c1ZSZWcsIHJlZ1Q0LCByZWdUMyk7CkBAIC02NzMsMTMgKzY3MywxMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgSW52YWxpZEdQUlJlZyk7CisgICAgICAg
IG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVC
bG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CiAgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3Mp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3Mu
dGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtNjg5LDEzICs2ODks
MTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJ
VEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0
QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAgICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0
aW1pemUsIHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJ
bmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdU
MyksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzEwLDE1ICs3MTAsMTUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGly
ZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAgICAgCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgdmFsdWUsIHJlZ1Qz
LCByZWdUMik7CiAgICAgCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJl
Z1QxKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgbV9w
cm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2Nr
LCAqaWRlbnQpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpLCBJbnZhbGlkR1BSUmVnLAogICAgICAgICByZWdUMSwgYnl0
ZWNvZGUubV9mbGFncy5lY21hTW9kZSgpLCBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRL
aW5kOjpOb3REaXJlY3QpOwogICAgIApAQCAtNzM4LDcgKzczOCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAKQEAgLTc0
OCw3ICs3NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAg
ICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsr
XTsKICAgICAKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAotICAgICAgICBnZW4uc2xv
d1BhdGhGdW5jdGlvbigpLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5m
bygpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnNsb3dQYXRo
RnVuY3Rpb24oKSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHVi
SW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03NTgs
MTQgKzc1OCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJl
Z1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAg
ICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25s
eShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOworICAg
ICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRD
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAg
IG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKQEAgLTc3OSwxMyArNzc5LDEzIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
aW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9w
dGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHVi
SW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJ
ZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzk2LDcgKzc5Niw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spOwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywg
cmVnVDIpOwpAQCAtODA0LDcgKzgwNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChj
b25zdCBJbnN0cnUKICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHBy
b2ZpbGUsIHJlZ1Q0KTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJv
ZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5C
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBK
U1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKQEAgLTgxOSwxNCArODE5LDE0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwo
Y29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5CeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsK
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAK
ICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4
KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9m
aWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTgzNyw3ICs4MzcsNyBAQCB2b2lkIEpJVDo6ZW1p
dEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTg1Myw3ICs4NTMsNyBAQCB2b2lk
IEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgSklUSW5CeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24odHlw
ZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
T3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5h
bWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0
ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC04OTAsNyArODkwLDcgQEAgdm9pZCBKSVQ6
OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZQogewogICAgIGlmICghbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmpl
Y3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3MobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNo
cG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5z
aWduZWQgZGVwdGgpCkBAIC05MDYsNyArOTA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xv
c3VyZShWaXJ0dWFsUmVnaQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9
IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0
YS5tX3Jlc29sdmVUeXBlOwpAQCAtOTE2LDExICs5MTYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNj
b3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9j
b2RlQmxvY2spOworICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6
OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxv
Y2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKICAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVz
c09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBv
Y2goKSksIHJlZ1QxKSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSwgcmVnVDEpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50
U2NvcGUpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDAp
OwpAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29u
c3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiAKICAg
ICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFu
dFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwg
bV9jb2RlQmxvY2spOworICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2Nv
cGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fcHJvZmlsZWRDb2Rl
QmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpLCByZWdUMSk7CkBAIC0xMDM5LDcgKzEwMzksNyBAQCB2b2lkIEpJVDo6ZW1pdEdldENsb3N1
cmVWYXIoVmlydHVhbFJlZ2lzCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRh
ZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKQEAgLTExNDYsNyArMTE0Niw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
ICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCkBAIC0xMTU2LDcgKzExNTYs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKQEAgLTExOTAsNyArMTE5MCw3IEBA
IHZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29w
ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBHZXRQdXRJ
bmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKQEAgLTEyMDIsNyAr
MTIwMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAg
ICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5Ogog
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1f
cHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVj
dHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24uCiAgICAg
ICAgICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgICAgIApAQCAt
MTIxNyw3ICsxMjE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
cwogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAg
IGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29w
ZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29k
ZUJsb2NrKTsKKyAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpj
b25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2ZpbGVkQ29kZUJsb2Nr
KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7CkBAIC0xMzE4LDcgKzEzMTgsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93
UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0
X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENh
bGwuY2FsbCgpOwogICAgIH0gZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFRvU2NvcGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzMzLDcgKzEzMzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgZW1pdExvYWRQYXlsb2FkKGFyZ3VtZW50cywgcmVn
VDApOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VP
ZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBUYWdPZmZz
ZXQpLCByZXN1dGxSZWdzLnRhZ0dQUigpKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGly
ZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pICsgUGF5bG9hZE9mZnNldCksIHJlc3V0bFJlZ3MucGF5bG9hZEdQUigpKTsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdXRsUmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgcmVzdXRsUmVncyk7CiAgICAgZW1pdFN0b3JlKGRz
dCwgcmVzdXRsUmVncy50YWdHUFIoKSwgcmVzdXRsUmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBA
IC0xMzU1LDcgKzEzNTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNv
bnN0CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5MiArNDksMTEyIEBAIG5hbWVzcGFj
ZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0
Y2g7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CiAKLSAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlv
bnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBu
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgaWYgKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkg
PiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CisgICAgICAg
IGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwg
ZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwg
c2NyYXRjaEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQ
Uik7CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCByZXN1bHRSZWdzLCByZWdUMik7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKICAg
ICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisKKyAgICAg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okdl
dEJ5VmFsOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1p
Z2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AK
KworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2Vu
KTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CiAgICAgfQotCiB9CiAKKyNpZiAhT1MoV0lORE9XUykKK3N0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHZpYWJsZUFyZ3VtZW50R1BSNCA9IEdQUkluZm86OmFyZ3VtZW50R1BSNDsKK3N0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHZpYWJsZUFyZ3VtZW50R1BSNSA9IEdQUkluZm86OmFyZ3VtZW50R1BS
NTsKKyNlbHNlCitzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2aWFibGVBcmd1bWVudEdQUjQgPSBH
UFJJbmZvOjpub25BcmdHUFIwOworc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmlhYmxlQXJndW1l
bnRHUFI1ID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKKyNlbmRpZgorCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGNvZGVUeXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBP
cGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAgICBpZiAoIWhhc0FueVNsb3dDYXNl
cyhpdGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOworICAgIEpJVEdldEJ5VmFsR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CiAKLSAgICAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIG1vdmUoQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBtb3ZlKEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCB2aWFibGVBcmd1bWVudEdQUjQpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+KGJ5dGVjb2Rl
LCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBhcmd1bWVudEdQUjMsIHZpYWJsZUFyZ3VtZW50R1BSNCk7CiAjZWxzZQotICAgICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwotICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
KyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
KyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUlu
ZGV4KTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJn
dW1lbnRHUFI0OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gYXJndW1lbnRHUFI0OworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3Vt
ZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQ
UiA9PSBhcmd1bWVudEdQUjEpOwotCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1
YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2Zp
bGUpLCBwcm9maWxlR1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7Ci0KLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFk
eSB1c2VkLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFy
Z3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BS
ID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlID09IHJlZ1QwKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5ID09IHJlZ1QxKTsKKworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6
Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOworICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5W
YWx1ZUdQUik7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVH
UFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICB9CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ5LDcgKzE2OSw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtl
cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJs
ZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5l
IGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5v
dCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAg
LTE2MCw4ICsxODAsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjU7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9w
ZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCkBAIC0xODcsMzQgKzIwNyw0MCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cmVzdWx0KTsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwog
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3Mo
cHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIpOworCisgICAg
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9z
LmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0UHJpdmF0
ZU5hbWU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBBU1NF
UlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldFByaXZhdGVOYW1lPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yMjMs
OSArMjQ5LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGlt
aXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KGJ5
dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMjM1LDI2ICsyNjMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25h
bWUoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1
bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKLSAgICBl
bHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMjY0LDcgKzI4Niw3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTMw
MCwyMSArMzIyLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVC
cmFuZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwotICAgIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7CisKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRS
ZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJh
bmQsIGJyYW5kR1BSKTsKLQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNl
dFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCByZWdU
Mik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
ICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJp
dmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZv
R1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OlNldFByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVC
cmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUt
YmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJl
cnMgcmVnaXN0ZXJzLgpAQCAtMzI0LDE3ICszNTMsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0
X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmls
dGVyQmFzZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKKwogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0
b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRl
eCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQ
UiwgYnJhbmRHUFIpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wU2V0UHJpdmF0ZUJyYW5kPigpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0
aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKQEAgLTM0NCwyNCArMzc4LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9zZXRfcHJpdmF0ZV9icmFuZCgKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVC
cmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2Vy
dChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNldFBy
aXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0
eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZh
bHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3By
aXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2
YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zNzAs
MzMgKzM5OCw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnJhbmQsIHJl
Z1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnJhbmQsIGJyYW5kR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVj
a1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHVi
SW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3By
aXZhdGVCcmFuZEFjY2Vzc2VzLmFwcGVuZChnZW4pOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJp
dmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENo
ZWNrUHJpdmF0ZUJyYW5kPigpOworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZSk7CisKICAgICBK
SVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNz
ZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJyYW5kR1BS
ID0gcmVnVDE7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJh
dGlvbjxkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT4oQWRkcmVz
cyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24o
KSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BS
Myk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC00MDYsMjQgKzQ0OCwxOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkg
dXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFu
ZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0
KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxk
ZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlw
ZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJ
bmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1p
emU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxf
ZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MzUsMzAg
KzQ3MSw0MyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWU7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJv
ZmlsZSksIHJlZ1QzKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJv
ZmlsZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDMsIHJlZ1Q0KTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBwcm9maWxlR1BSKTsKKyAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1Zh
bHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUNCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBwcm9maWxlR1BS
LCBzdHViSW5mb0dQUik7CisKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkp
KQogICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOworICAgIHN0
dWJJbmZvLT5wdXRLaW5kID0gc3RkOjppc19zYW1lX3Y8T3AsIE9wUHV0QnlWYWxEaXJlY3Q+ID8g
UHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21h
TW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBP
U1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElD
IGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2Ug
aXMgY2VsbC4KQEAgLTQ3NCwxNSArNTIzLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
YnlfdmFsKGNvbnN0IEkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlOwogICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gRUNNQU1vZGU6OnN0cmlj
dCgpOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IG51bGxwdHI7CiAKICAgICBhdXRvIGxv
YWQgPSBbJl0oYXV0byBieXRlY29kZSkgewogICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBieXRlY29kZS5tX2VjbWFN
b2RlOwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICB9
OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNDk4LDcgKzU0NCwxNiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAgICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3Qg
Y2xvYmJlcmVkLgotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGdlbi5zdHViSW5mbygpLCByZWdUMyk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCB2aWFibGVBcmd1bWVudEdQUjQpOworICAgIGlmIChpc0RpcmVjdCkK
KyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSwgT3BQdXRCeVZhbERpcmVjdDo6TWV0YWRhdGE6Om9m
ZnNldE9mQXJyYXlQcm9maWxlKCksIHZpYWJsZUFyZ3VtZW50R1BSNSk7CisgICAgZWxzZQorICAg
ICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dEJ5VmFsPigpLCBPcFB1dEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2Zp
bGUoKSwgdmlhYmxlQXJndW1lbnRHUFI1KTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpPihBZGRyZXNzKHZpYWJsZUFyZ3VtZW50R1BS
NCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCB2aWFibGVBcmd1
bWVudEdQUjQsIHZpYWJsZUFyZ3VtZW50R1BSNSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CkBAIC01MTIsNyArNTY3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfdmFs
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIENh
bGwgY2FsbDsKICAgICBhdXRvIG9wZXJhdGlvbiA9IGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/
IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0
cmljdE9wdGltaXplKTsKQEAgLTUyMyw3ICs1NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBA
IC01MzMsMTggKzU4OCwyNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdS
ZXR1cm5BZGRyZXNzKCk7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9
IHJlZ1Q1OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
dXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUNDsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHByb2ZpbGVHUFIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICB7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVz
ZWQoQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHksIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlLCBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRh
aW5zKHJlZ1Q0KSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlucyhyZWdUNSkpOworICAg
IH0KKwogCiAgICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZ2xvYmFsT2JqZWN0R1BSKTsKQEAg
LTU3MCwyMCArNjMxLDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29u
c3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwg
SW52YWxpZEdQUlJlZywgcmVnVDQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBh
ZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1Yklu
Zm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6UHV0UHJpdmF0ZU5hbWU7CisgICAgc3R1YkluZm8tPnByaXZhdGVGaWVsZFB1dEtpbmQg
PSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZh
bHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRo
b3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC01OTQsOCArNjY2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogCiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7
Ci0gICAgUHJpdmF0ZUZpZWxkUHV0S2luZCBwdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOwor
ICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgSklUUHV0QnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJbmRleCsrXTsKIApAQCAtNjAz
LDEzICs2NzQsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwog
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBhdXRvIG9wZXJhdGlv
biA9IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZp
ZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVk
IGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJl
Z1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgdmFsdWVHUFIsIGdlbi5zdHVi
SW5mbygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOworCisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCB2aWFibGVBcmd1bWVudEdQUjQpOwor
ICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRl
RmllbGRPcHRpbWl6ZSk+KEFkZHJlc3ModmlhYmxlQXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIHZpYWJsZUFyZ3VtZW50R1BSNCwgVHJ1c3Rl
ZEltbVB0cihudWxscHRyKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02
MjIsMTggKzY5NSwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShj
CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRf
cHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTY0MywxNCArNzEw
LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
R1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRC
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJl
ZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdUMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAgLTY4MCw3ICs3NDcsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Fj
Y2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlk
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMs
IHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1Qx
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjg5LDcgKzc1Nyw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk5LDcgKzc2OCw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0
ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1Qw
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmlt
cGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNzA5LDcgKzc3OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNv
bnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1Qx
KTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1Qy
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdU
Mik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTksNyArNzkwLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNl
dHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCBy
ZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03Mjcs
MjMgKzc5OSwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFz
ZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxC
eUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xv
d0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQ
UiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBT
dHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8v
IFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5j
ZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTc1OSwxNSArODQxLDE3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlk
c1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248
ZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQ
UjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNzgxLDI0ICs4NjUsMTkg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9w
ZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1
ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9
PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBA
IC04MDgsNyArODg3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmpl
Y3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBE
RkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmpl
Y3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
LSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0
dXJuQWRkcmVzcygpOwpAQCAtODQ1LDIyICs5MjQsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVs
X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5R1BSLCBwcm9wZXJ0eSk7CisKICAgICBK
SVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzY3Jh
dGNoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5
cGU6OkRlbGV0ZUJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29k
ZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBz
dHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKwor
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlWYWxzLmFw
cGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAg
ICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAg
Ly8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNp
bmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0
ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4K
QEAgLTg4Myw5ICs5NzMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29u
c3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxk
ZWNsdHlwZShvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQ
UjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtODk5LDI0ICs5OTEsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Rl
bF9ieV92YWwoY29uc3QgSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1
bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BS
NDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgs
IHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIp
OwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9k
ZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9i
eV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAK
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25EZWxldGVCeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVu
ZENhbGwob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTkyNiw3ICsx
MDEzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8v
IGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcg
YXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1h
eSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGlj
aCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQg
aml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVz
cygpOwpAQCAtOTYxLDIyICsxMDQ4LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlf
aWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJl
ZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3Ms
IHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2LDE0
ICsxMDgyLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5
R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5
SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTAwMywyNiArMTEwMiwy
MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbW92ZShK
SVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1l
PGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMzAsMjIgKzExMjMsMzEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
VlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotCi0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5
SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYgKzExNTYsMTggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJl
Y3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
bWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk+KGJ5dGVj
b2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwNzMsODMgKzExNzcsNjIgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlkZW50ID09IG1fdm0t
PnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAg
ICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0
YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCByZWdUMSk7CisgICAgICAgIGxvYWQ4RnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRh
ZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlKCksIHNjcmF0Y2hHUFIp
OworICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3Ro
KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
Ynl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBH
ZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGg6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGJh
c2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlz
KTsKICAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOwotCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1Qx
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHRoaXNWUmVnKTsKLQotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpH
ZXRCeUlkKTsKIAotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBy
ZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlk
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQg
dG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0
QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTE1OCwxNiArMTI0MSwxOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAg
ICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
bWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYgKzEyNjIsNTggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FS
TTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
LCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVy
IHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlk
V2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0g
QmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNl
bGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNH
UFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRo
aXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8g
V2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNl
dCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChn
ZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTIwNiw3ICsxMzIzLDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTI0MSwxNiArMTM1OCwx
OSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0
YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1
bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMTI2MCwyOCArMTM4MCwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIyOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IHJlZ1QxOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodGhpc0dQUiA9PSBhcmd1
bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9p
ZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjkxLDcgKzE0MDUsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMzI5LDIz
ICsxNDQzLDM4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3Qg
PSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxl
IHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBz
dG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2
ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVy
YXRlIGNvZGUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3
YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZh
bHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJhc2VWUmVnLCBiYXNlR1BSLCB2YWx1ZVZSZWcsIHZhbHVlR1BSKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUUHV0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QxKSwgcmVnVDMsIHJlZ1QyLCBlY21hTW9kZShieXRlY29kZSksCisgICAgICAgIG51
bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwK
KyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc3R1
YkluZm9HUFIsIHNjcmF0Y2hHUFIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0
ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0
dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1
dEJ5SWQ7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3Qg
OiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUo
Ynl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNv
IHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwog
ICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5l
dyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAt
MTM1OSwxNCArMTQ4OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0
IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4odGhpcyk7CiAgICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlk
c1ttX3B1dEJ5SWRJbmRleCsrXTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9w
ZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpPihBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBW
TSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3NiwyNSArMTUwOSwxOSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0g
YXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSks
IHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVy
dHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4u
c2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
Z2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCkBAIC0xNDA0LDcgKzE1MzEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgog
ICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGds
b2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGpp
dC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQxLDIwICsxNTY4LDMxIEBAIHZvaWQgSklUOjpl
bWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1Qw
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
R1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBl
ID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlk
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNjAxLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2lu
QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRp
b25JbkJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTQ4MCwyOCAr
MTYyMSwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBh
cmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28s
IHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBn
aXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8
ZGVjbHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVn
LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xNTEwLDI1ICsxNjQ1LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChj
b25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
LSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1Qy
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c2NyYXRj
aCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZh
bHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBA
IC0xNTM3LDE1ICsxNjgwLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29u
c3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5C
eVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSklU
SW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZh
bE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50
ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJy
YXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCB2aWFibGVBcmd1bWVudEdQUjQpOworICAgIGNhbGxPcGVy
YXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCB2
aWFibGVBcmd1bWVudEdQUjQpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAt
MTU1Niw1OSArMTcwMiw3MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0
IEluCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2Vy
dChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihw
cm9maWxlKSwgcHJvZmlsZUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVy
SW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKICAgICAvLyBzbG93X29wX2dldF9ieV92YWxfcHJlcGFy
ZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywg
dGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdp
dmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxk
ZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRC
eVZhbE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNl
LCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNl
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcHJvcGVy
dHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
IAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiks
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IHR5cGU7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CiB9CiAKLXZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRz
dCwgQWNjZXNzVHlwZSB0eXBlKQordm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5LCBBY2Nlc3NUeXBlIHR5cGUpCiB7Ci0gICAgQVNTRVJUKHR5cGUgPT0gQWNjZXNzVHlwZTo6
SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwor
ICAgIFVOVVNFRF9QQVJBTShiYXNlKTsKKyAgICBVTlVTRURfUEFSQU0ocHJvcGVydHkpOworICAg
IEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8
fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiAKICAgICBKSVRJbkJ5VmFs
R2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQ
cml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25I
YXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShv
cGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1f
Ynl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE2MTgsMjcgKzE3NzUsMjEgQEAgdm9pZCBKSVQ6
OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IHJl
Z1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5T3JCcmFuZEdQUiA9IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHBy
b3BlcnR5T3JCcmFuZEdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0
aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVl
KTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQ
cml2YXRlQnJhbmRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlv
bkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6
ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKHR5cGUgPT0gQWNjZXNzVHlw
ZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3Bl
cmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIp
OwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19w
cml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2
NTIsNyArMTgwMyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKGMK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKLSAgICBlbWl0SGFzUHJpdmF0
ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKKyAgICBl
bWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgYnl0ZWNv
ZGUubV9wcm9wZXJ0eSwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtMTY2NiwyMTUgKzE4MTcsMTI5IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+
KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwg
Ynl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
QnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNoR1BSKQogewogICAgIGlmICgh
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQ
Uik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0ds
b2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2lu
dFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmly
dHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25l
ZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZl
VHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fcmVzb2x2ZVR5
cGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwotICAgIHVuc2lnbmVkIGRlcHRoID0g
bWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7Ci0KLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewotICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFu
dFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwg
bV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxM
ZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6
Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNj
b3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0
LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCBy
ZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlc29sdmVkQ2xv
c3VyZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qg
c2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1Qw
KTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVz
b2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAg
bm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
ewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
bV9yZXNvbHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLQot
ICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotfQotI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0KLXZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
LSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVj
b2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7Cisg
ICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUlu
ZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRh
ZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8g
SWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxs
IGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAot
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4
aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90
IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0
YWRhdGEpOworICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNk
ZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2Nv
cGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAgICBhdXRvIGNsb3N1cmVWYXJHZW5l
cmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9z
Y29wZSBDbG9zdXJlVmFyIik7CiAgICAgICAgIH07Ci0jdW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5F
UkFUT1IKKworICAgICAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2Vu
ZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywg
IkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzIik7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2Vu
ZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2
ZV9zY29wZSBnZW5lcmljIik7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBtZXRhZGF0YUdQUiA9IHJlZ1QyOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BS
ID0gcmVnVDA7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUNTsKIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7
CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BS
KTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJh
dG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAo
cHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZt
LmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2Zp
bGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAg
ICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrc0dlbmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRD
VElTdHViKGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2
bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24g
Y2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6
Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8g
aW5jb21pbmcKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29t
aW5nCisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1QyOyAvLyBpbmNvbWlu
ZworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsgLy8gaW5jb21pbmcKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7IC8vIGluY29taW5n
IC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IHJlZ1Q0OwogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZU9mZnNldEdQUik7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlw
ZSkpOwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIGppdC50YWdSZXR1cm5BZGRyZXNz
KCk7CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1l
dGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsK
KyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9m
TWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRh
R1BSKTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9i
YWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgYXV0byBkb1ZhckluamVjdGlvbkNo
ZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gSW52YWxpZEdQUlJlZykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BS
ID09IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0
OwotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgfQotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9i
YWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNs
b3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0
OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRj
aHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
KTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0UmVzb2x2ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7Ci0KLSAgICAgICAgTGFiZWwgbG9vcCA9
IGxhYmVsKCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6
b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIo
MSksIHJlZ1QxKTsKLSAgICAgICAgICAgIGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb1ZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyNpZiAhT1MoV0lORE9XUykKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzY29wZUdQUiA9PSByZWdUMCk7CisjZW5kaWYKKyAgICAgICAgaml0Lmxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZMb2NhbFNjb3BlRGVw
dGgoKSksIHJlZ1QxKTsKKworICAgICAgICBMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7CisgICAg
ICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOworICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qw
KTsKKyAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICBq
aXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwog
ICAgIH07CiAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSkgewpAQCAtMTg4MiwxMiArMTk0NywxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBK
U1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS4KLSAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7Ci0g
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAgICAgbG9hZDMyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFu
Y2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0Ojpv
ZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAg
ICBtb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgaml0Lmxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoKCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0
LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0
T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIApAQCAtMTg5NywxMSArMTk2MSwxMSBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50
U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZvciBH
bG9iYWxWYXIqLAogICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KLSAgICAg
ICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsK
ICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9m
R2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4
aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0xOTA5LDcgKzE5NzMsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgICAgICBlbWl0UmVzb2x2
ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAg
ICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0xOTE5LDgzICsxOTgzLDQ1IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBz
d2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNl
IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlz
dCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0
eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEds
b2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29s
dmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJl
VmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7
CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKKyAgICAg
ICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNv
bHZlVHlwZSgpKSwgcmVnVDEpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLQotICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAg
ICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIGF1dG8gZW1pdENhc2UgPSBb
Jl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAgICAgICBKdW1wIG5vdENhc2Ug
PSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUp
KTsKKyAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKKyAgICAgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgICAgICBub3RDYXNlLmxpbmsoJmppdCk7
CisgICAgICAgIH07CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIGVt
aXRDYXNlKEdsb2JhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKKyAg
ICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIGVtaXRDYXNlKEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
KTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0K
IAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwot
ICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2
ZV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxv
Y2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2Rl
TG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERF
RklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZl
VHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIg
KCF0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAg
ICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4g
aml0LmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBv
cF9yZXNvbHZlX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09M
VkVfVFlQRShERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX1JF
U09MVkVfU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAg
IC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdp
dGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIC8vIFRoZSBmYXN0IHBhdGggYWxyZWFkeSBwdXNoZWQg
dGhlIHJldHVybiBhZGRyZXNzLgogI2lmIENQVShYODZfNjQpCkBAIC0yMDM0LDcgKzIwNjAsNiBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgcGF0Y2hCdWZm
ZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNvbHZlX3Njb3BlIik7CiB9
Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklUOjplbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0
cnVjdHVyZVNsb3QpCiB7CkBAIC0yMDYyLDI3NiArMjA4NywxMzMgQEAgdm9pZCBKSVQ6OmVtaXRH
ZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9m
KFJlZ2lzdGVyKSksIHJlZ1QwKTsKIH0KIAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0g
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1
Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOworICAgIFJlc29sdmVUeXBlIHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0g
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsK
LSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
ewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVy
ZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2Ug
ZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3Qu
IEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFy
IGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAg
ICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVn
VDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAgICBq
aXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwotICAgICAgICAgICAgfSkpOworICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQp
ID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmlu
c3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0g
ICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAo
QVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJh
bmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9m
TGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJ
c05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNl
dCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAg
ICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFy
OgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAg
IGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGlu
ZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRp
cmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAg
ICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAg
ICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFy
OgotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0K
KyAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJl
dHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJh
c2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CiAgICAgfTsKIAotICAgIHN3
aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1Qw
KTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVn
VDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xv
YmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNv
bHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0
eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEds
b2JhbExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dElu
Zm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1w
IGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0
eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2Up
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRh
dGEsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLSNlbHNlIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0
YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgYXV0byBjbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0
dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFy
Iik7CisgICAgfTsKIAotICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgQVNTRVJUKEJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAo
Vk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVu
ayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMi
KTsKKyAgICB9OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3Owot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9
IHJlZ1QyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsK
IAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsKLSAgICAgICAgdWludHB0cl90
KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1f
b3BlcmFuZCk7Ci0gICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdHJk
aWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KCZtZXRhZGF0YSk7CisgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0j
ZGVmaW5lIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfZ2V0X2Zyb21f
c2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1
bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xW
RV9UWVBFKEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSAgICAgICAgfTsKLSN1bmRlZiBHRVRf
RlJPTV9TQ09QRV9HRU5FUkFUT1IKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBz
Y29wZUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRh
dGFHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3Bl
R1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRh
dGFHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihn
ZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICB9
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgIGlm
IChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGNvZGUgPSB2bS5n
ZXRDVElTdHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGNv
ZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJh
dG9yKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNHZXRG
cm9tU2NvcGVHZW5lcmF0b3IpOworCisgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVy
YXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+
IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5r
IGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQg
LyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3Bl
OjpNZXRhZGF0YTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJU
KHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKLQotICAgIHRhZ1Jl
dHVybkFkZHJlc3MoKTsKLQotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0
YWRhdGFHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7CiAKLSAgICBKdW1wTGlzdCBzbG93
Q2FzZTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0gICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFkYXRhU3RydWN0
dXJlT2Zmc2V0KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgbWV0YWRh
dGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1Qw
KTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsK
LSAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwot
ICAgIH07CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBy
ZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwogCi0gICAgYXV0byBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3Mp
IHsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZTsKKworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVj
ayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3Qo
KSksIHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0g
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRj
aHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
KTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVj
dGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJy
YW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0
byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJl
ZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcp
OwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0
VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVn
KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7
Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRHZXRD
bG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAg
ICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIo
c2NvcGVHUFIsIG9wZXJhbmRHUFIpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQ
UiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7Ci0g
ICAgfTsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
LCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZd
IChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVj
dHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2Ug
ZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3Qu
IEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFy
IGluamVjdGlvbi4KLQotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7
Ci0gICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAgICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVk
TGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1
YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMg
dmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGlu
ZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRs
ZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZlN0cnVjdHVyZSgpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5i
cmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2Nv
cGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisKKyAgICAgICAg
ICAgIGppdC5qaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1w
IHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCByZWdUMyk7
CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0
YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZz
ZXRPZk9wZXJhbmQoKSksIHJlZ1QxKTsKKwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVE
KSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJU
aGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsK
LSAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUp
OwotICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CisgICAgICAgICAgICAg
ICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJl
Z1QxLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAg
ICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAg
ICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRl
bmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgo
c2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworCisgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
MCk7CisgICAgICAgICAgICBqaXQubmVnMzIocmVnVDEpOworICAgICAgICAgICAgaml0LnNpZ25F
eHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgICAgICAgICBqaXQubG9hZDY0KEJhc2VJ
bmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoK
ICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0g
ICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0
YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwg
cmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAg
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0g
ICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAg
ICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX29wZXJhbmQpKSwgcmVnVDMpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVW
YXIoc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBy
ZWdUMyk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0
ZXIpKTsKKyAgICAgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHJlZ1QzKTsK
KyAgICAgICAgICAgIGppdC5hZGRQdHIoc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZh
cmlhYmxlcygpKSwgcmVnVDApOworCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBE
eW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAt
MjM0MSw4NiArMjIyMyw2MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1
dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6
dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAg
IEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBm
YWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05v
dEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5k
LmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJl
c29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAg
ICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5m
bykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGppdC5s
b2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygp
KSwgcmVnVDApOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBK
dW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2Up
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRy
dWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2Jh
bExleGljYWxWYXIubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBqaXQu
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1
bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAg
bm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0g
aml0LmJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5i
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKCZqaXQp
OworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXIubGluaygmaml0KTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkp
OworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluaygmaml0
KTsKIAotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQorICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKKyAg
ICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChW
YWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkp
KTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6
Om9mZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkp
KTsKIAotICAgIHJldCgpOworICAgIGppdC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmsp
OwotICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENv
ZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
KTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwg
Q29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZp
bmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMj
cmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29u
c3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAg
ICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAg
cmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNl
bGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VB
Q0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYg
REVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYg
dm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBv
bmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0
IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZh
aWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBp
bmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBt
YXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQu
cHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNDI5LDcgKzIyODgsNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAjZW5kaWYKIAogICAgIHVzaW5nIE1ldGFk
YXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0
YWRhdGFHUFIgPSByZWdUNzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVn
VDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAg
IGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIApAQCAtMjQ0OSw3ICsyMzA4LDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIENhbGwgb3BlcmF0aW9uID0g
aml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0
LmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAgICBqaXQuc3RvcmU2NChy
ZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3Mo
R1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSAr
IFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgaml0Lm1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVy
KTsKIAogI2lmIENQVShYODZfNjQpCkBAIC0yNDY5LDg4ICsyMzI4LDc3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1ZmZlci5saW5rKGp1bXBU
b0hhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRy
VGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0KLSNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJs
ZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
IHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAg
ZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQot
dm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNz
T2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVj
dFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1p
dE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1Qx
KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENs
b3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdU
MSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVz
KCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0
UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0
cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90
KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1f
b3BlcmFuZCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJv
ZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2sp
Lm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292
ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55
dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBo
YW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0
cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBz
dHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAg
IC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUg
dmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAg
ICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAg
ICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwor
ICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihy
ZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdU
MSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIHN0
b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RP
dXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAg
ICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNl
IEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBK
U1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9j
ayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUpOwot
ICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRp
b25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2
ZVR5cGUsIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKKwor
ICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5p
bml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIg
fHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJl
Y2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0
YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0g
ICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0
TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5k
aXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFk
YXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90
KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisKKyAg
ICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0
YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0
Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQWRk
cmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoK
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xv
dCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdU
MCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9T
Y29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7CisgICAgICAg
ICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRl
V2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBy
ZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1Qy
LCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkp
OworCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpA
QCAtMjU2NCw1OCArMjQxMiw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewot
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5
cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNH
bG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBw
dXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAgICAg
ICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJlVmFy
LyBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGlsZSB0
aGluZ3MKKyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3ZlIHBy
b3ZlbiB0aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZhciwK
KyAgICAvLyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgorICAg
IC8vIGlmIHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0IGlz
IGZpcmVkLCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAgIC8v
IG1hdHRlciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxlZFJl
c29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIpOwor
ICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyKQor
ICAgICAgICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2Zp
bGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAg
ICAgIGVtaXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbHNl
IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7
CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1Qw
KTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHkpKTsKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAgZW1p
dENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsK
IAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOwor
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5s
aW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAg
bm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
ciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGlu
ayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAKICAg
ICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAg
IGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjYyNCwxOCArMjQ2NiwyMSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29w
ZT4oKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0
ZWNvZGUpLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikg
eworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYgYW55
IGxpbmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29kZUJs
b2NrcyBhcmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIuCiAg
ICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0
aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVf
ZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Y3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3VtZW50
R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwogICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkg
PT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAg
QVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4
KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3ICsyNDk3LDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1h
a2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxh
YmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxp
bmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkg
bm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZt
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVz
aChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNzAxLDcgKzI1NDYsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0
QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IApAQCAtMjc1OSw3ICsyNjA0LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkBAIC0y
NzY3LDcgKzI2MTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29u
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJu
YWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVn
VDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjgyMyw3ICsy
NjY3LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0bwogdm9pZCBK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwpAQCAt
MjgzOSwxMSArMjY4MiwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29u
c3QgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMgdGhlIG1v
c3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2UgaXQgaWYg
d2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51bWVyYXRv
ck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkg
eworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2VudW1l
cmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1v
ZGUpIHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihl
bnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5k
KGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigofkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgJiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spKSk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wRW51bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3Jl
OFRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1ldGFk
YXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKKwogICAgICAgICBsb2FkMzIoQWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpLCBpbmRleEdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVu
ZChicmFuY2gzMihOb3RFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwogCkBAIC0yODgxLDc4ICsyNzMwLDg4IEBAIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRv
ckdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBi
eXRlY29kZS5tX3Byb3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9
IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CiAKLSAgICBh
dXRvIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0g
QmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVFbnVtZXJh
dG9yR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5
VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0g
QmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVy
czo6c2NyYXRjaDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCBz
Y3JhdGNoMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHByb3Bl
cnR5R1BSKTsKIAotICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2Vu
dW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEVu
dW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCks
IHNjcmF0Y2gyKTsKKyAgICBvcjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7CisgICAgc3RvcmU4VG9N
ZXRhZGF0YShzY3JhdGNoMiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFz
ZUdQUikpOwogICAgIC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQgdmFsdWUuCi0g
ICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmVn
VDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgIEp1bXAgaXNOb3RP
d25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHNjcmF0Y2gzLCBUcnVzdGVk
SW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKIAogICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1
cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDMp
OwotICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMs
IEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJl
SURPZmZzZXQoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgc2Ny
YXRjaDEpOworICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNo
MzIoTm90RXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKIAogICAgIC8vIENvbXB1dGUg
dGhlIG9mZnNldC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMyk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgc2NyYXRjaDIpOwogICAgIC8vIElmIGlu
ZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwg
dGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwot
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7Ci0gICAgbG9hZDY0KEJhc2VJbmRl
eChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwotCisgICAgSnVtcCBvdXRP
ZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNj
cmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zm
c2V0KCkpKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOworICAg
IGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFw
cGVuZChqdW1wKCkpOwogCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKICAgICBv
dXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJl
Z1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0
KCkpLCByZWdUMyk7Ci0gICAgbmVnMzIocmVnVDMpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJl
Z1QzLCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIGJhc2VHUFIpOworICAgIHN1YjMyKEFkZHJlc3Moc2NyYXRjaDEsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNj
cmF0Y2gyKTsKKyAgICBuZWczMihzY3JhdGNoMik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2Ny
YXRjaDIsIHNjcmF0Y2gyKTsKICAgICBjb25zdGV4cHIgaW50cHRyX3Qgb2Zmc2V0T2ZGaXJzdFBy
b3BlcnR5ID0gb2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpICogc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCBy
ZXN1bHRHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVz
RWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2Vz
LmFwcGVuZChqdW1wKCkpOwogCiAgICAgc3RydWN0dXJlTWlzbWF0Y2gubGluayh0aGlzKTsKLSAg
ICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93
blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2VudW1lcmF0b3JN
ZXRhZGF0YSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwg
Ynl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJh
dG9yTWV0YWRhdGEoKSk7CiAKICAgICBpc05vdE93blN0cnVjdHVyZU1vZGUubGluayh0aGlzKTsK
LSAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3Rl
ZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKKyAgICBKdW1w
IGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKICAgICAvLyBSZXBsYWNl
IHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bmRleCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHByb3BlcnR5
R1BSKTsKIAogICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaDEpOwogCiAgICAg
SklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVnVDIpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0
dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFj
Y2Vzc1R5cGU6OkdldEJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0
IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgZG9uZUNhc2VzLmxp
bmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKQEAgLTI5NjEsMTAgKzI4MjAsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVy
YXRvcl9nZXRfYnlfCiAgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0ZXIpOwogfQogCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Ci12b2lk
IEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQYXRo
RnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlLCB0
eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2VudW1lcmF0b3Jf
aGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNl
KQogewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51
bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKQEAgLTI5NzMsNyArMjgzMSw5IEBAIHZv
aWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW0KICAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QwKTsKLSAgICBv
cjgocmVnVDAsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEp
KTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCByZWdUMSk7CisgICAgb3IzMihyZWdUMCwgcmVn
VDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDEsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAKQEAgLTMwNjIsNiArMjkyMiwxMyBA
QCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiAgICAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFy
cmllcihHUFJSZWcgb3duZXIpCit7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
ID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2VsZWN0U2NyYXRjaEdQUihvd25lcikpOwor
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNs
b3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
ayh0aGlzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyODMw
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzYsOSArMjM2LDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
R2V0QnkoSgogICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlQ2VsbCkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAogICAg
ICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwKLSAgICAgICAg
ICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0dWJJ
bmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
JiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgewogCi0gICAgICAgICAgICAgICAgICAg
IGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxl
bmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOworICAgICAgICAgICAg
ICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
QXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2Vs
bCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aChsb2NrZXIpOwpAQCAtMjQ5
LDggKzI0OSw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAg
ICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ss
IEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgfSBl
bHNlIGlmIChpc0pTU3RyaW5nKGJhc2VDZWxsKSkgewogICAgICAgICAgICAgICAgIGlmIChzdHVi
SW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAg
ICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pOworICAgICAgICAgICAgICAgICAgICAm
JiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1Yklu
Zm8pKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbyk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFw
cHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgc3R1YkluZm8uaW5pdFN0cmluZ0xlbmd0aChsb2NrZXIpOwpAQCAtMzA0LDcgKzMw
NCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAg
ICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKICAgICAgICAgICAgICAgICAmJiAhc3Ry
dWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICAgICAm
JiAhbG9hZFRhcmdldEZyb21Qcm94eSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVk
Q29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3Moc3R1
YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAg
Ym9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9w
ZXJ0eUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCkpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAg
ICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gsIHN0cnVjdHVy
ZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQo
KSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOwpAQCAtNzMxLDExICs3MzEsMTEgQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlUHV0QnkoSgogICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZS0+ZGlk
Q2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNo
ZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQor
ICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3Bl
cnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQogICAg
ICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KCkKICAgICAgICAgICAgICAgICAgICAgJiYgIWlzUHJveHkpIHsKICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvbGRT
dHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBib29s
IGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5
UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNlbGZQYXRjaCwg
b2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1
ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKHNsb3QsIHB1
dEJ5S2luZCwgcHV0S2luZCkpOwpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNl
KCkgPT0gYmFzZQogICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQogICAg
ICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
KSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSk7CisgICAgICAg
ICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVNlbGZJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwogICAgICAgICAg
ICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRl
bnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKQEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwo
Vk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgp
KTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2lu
ZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAg
IHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDI0ICs0Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2Fs
bEhlbHBlcnMgaml0OwotCi0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwotCi0gICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0
LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLQotICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVy
YXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwotCi0gICAgaml0Lmp1bXBUb0V4Y2Vw
dGlvbkhhbmRsZXIodm0pOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3Bl
cmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbiIpOwotfQotCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbldpdGhD
YWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKQEAgLTc3LDI0ICs1OSw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gaGEKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJU
YWcsICJoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2siKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5k
SGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0
OwotCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjplc3ApOwotI2Vs
aWYgQ1BVKEFSTTY0KQotICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVy
UmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKLSNlbmRpZgotCi0gICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7Ci0KLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpFeHRyYUNUSVRodW5rKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKGhhbmRs
ZUV4Y2VwdGlvbkdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjb250aW51YXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7Ci0g
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAicG9w
VGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOwotfQotCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2
bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpAQCAtMTM3LDYgKzEwMSw0MiBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoCiAKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBo
YW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7
CisKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0udG9wRW50cnlGcmFtZSk7CisKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQucHJlcGFyZUNhbGxP
cGVyYXRpb24odm0pOworCisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbiA9IGppdC5j
YWxsKE9wZXJhdGlvblB0clRhZyk7CisKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2
bSk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBF
eGNlcHRpb25IYW5kbGVyKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uIik7Cit9CisKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4
Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworI2lm
IENQVShYODZfNjQpCisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigy
ICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKKyNlbGlmIENQVShB
Uk02NCkKKyAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVy
LCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIENDYWxsSGVscGVy
czo6SnVtcCBjb250aW51YXRpb24gPSBqaXQuanVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFD
VElUaHVuayk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRp
b25HZW5lcmF0b3IpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY29udGludWF0aW9uLCBDb2RlTG9j
YXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInBvcFRodW5rU3Rh
Y2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUg
VGFnVHlwZT4KIGlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2FsbEhlbHBlcnMm
IGppdCwgR1BSUmVnIHBvaW50ZXJHUFIsIFRhZ1R5cGUgdGFnKQogewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAyODMwNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNywxMiArMzcsMTIgQEAgY2xhc3MgVk07CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVF
eGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKFZNJik7
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVz
ZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIAogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9u
R2VuZXJhdG9yKFZNJik7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNJik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2Rl
T3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVk
ZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkVy
cm9yLmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCkBAIC0zNzAsMTMgKzM3MSwy
MiBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAgICAgCiAgICAg
Y29kZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwogCisgICAgaWYg
KGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAg
IGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5s
aW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICAgICAg
Y29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGluZVJlZi5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkt
Pmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmppdE5leHRJ
bnZvY2F0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KwogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAg
ICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlKSVRDb21waWxlIiwg
KCJ0aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2RlQmxvY2stPmxsaW50RXhl
Y3V0ZUNvdW50ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NS
KCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0
YXRlID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFk
eVBsYW5zRm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25Nb2RlOjpCYXNlbGluZSkpOworICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRl
ID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxSZWFkeVBs
YW5zRm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxv
Y2soKSwgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkpOwogCiAgICAgaWYgKGNvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CiAgICAgICAgIGRhdGFMb2dM
bklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBpbGVk
LiIpOwpAQCAtNDY2LDggKzQ3NiwxMCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikK
ICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0Zv
ckZ1enppbmcoKSAmJiBjb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vh
cmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0uZ2V0TG9vcEhpbnRF
eGVjdXRpb25Db3VudGVyKHBjKTsKICAgICAgICAgKnB0ciArPSBjb2RlQmxvY2stPmxsaW50RXhl
Y3V0ZUNvdW50ZXIoKS5tX2FjdGl2ZVRocmVzaG9sZDsKLSAgICAgICAgaWYgKCpwdHIgPj0gT3B0
aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpCisgICAgICAgIGlmICgq
cHRyID49IE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSB7Cisg
ICAgICAgICAgICBjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEoQ29uY3VycmVudEpTTG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKSk7IC8vIFdlJ3JlIHJldHVybmluZyB0byB0aGUgT1NSIGVudHJ5IGNv
ZGUgaGVyZSwgd2hpY2ggZXhwZWN0cyB0aGF0IG1faml0RGF0YSBpcyBub3QgbnVsbC4KICAgICAg
ICAgICAgIExMSU5UX1JFVFVSTl9UV08oTExJbnQ6OmZ1enplclJldHVybkVhcmx5RnJvbUxvb3BI
aW50RW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBjYWxsRnJhbWUtPnRv
cE9mRnJhbWUoKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbQkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMTIsMTAg
KzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1h
Y3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAg
ICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNy
byAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8g
dXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0
cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2Jp
dHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAgICAg
Z2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBJ
bnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5h
bWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwgc3JjRHN0IGlu
IHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAgICAgICBzdG9yZWkg
dDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxl
KEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAg
ICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0
YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAg
ICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5
QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0YSh0NSwgdDAp
CiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXpl
LCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90SW50
CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDIKLSAg
ICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJp
dGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAgICByZXR1cm4g
KEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEsIExvd2VzdFRh
ZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1cGRhdGVBcml0
aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxl
KE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1cm4odDEsIHQy
KQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkKIAogbWFjcm8g
YmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVy
YXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkKLSAg
ICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9m
aWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAg
ICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAgICAgICAgZ2V0
KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3Rv
cmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2l6
ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAub3AxTm90SW50CiAg
ICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAgICBhcml0aFByb2Zp
bGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUo
b3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZ2V0KG1f
ZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0MSwgdDAsIC5z
bG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwxMiBAQCBtYWNy
byBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJpYSB0MiwgTG93
ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5vdEludE9wMkRv
dWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJv
ZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0KQogICAgICAg
ICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90
SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAgICBhcml0aFBy
b2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0
aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIsIHQ1LCB0NCkK
ICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAgICAgICAgIGZp
aTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3Rv
bVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0
ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90LgogICAgICAg
ICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cKLSAgICAg
ICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAgdXBkYXRlQmlu
YXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVtYmVyLCB0NSwg
dDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKICAg
ICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9u
IDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEzIEBAIG1hY3JvIGNoZWNr
U3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMsIGExCiAgICAgICAgICAg
ICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRweiByMCwgLnJlY292ZXIK
LQogICAgICAgICAgICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAgIyBCYXNlbGluZSB1c2Vz
IExMSW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQgcG9vbC4KKyAgICAgICAg
ICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2Nr
OjptX2ppdERhdGFbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjpKSVREYXRh
OjptX2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAgIGlmIEFSTTY0RQogICAg
ICAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0ND
b25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50cnkpICogUHRyU2l6ZSwg
YTIKICAgICAgICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRyVGFnICMgSlNF
bnRyeVB0clRhZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpu
c3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0
LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5h
bWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
cmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAg
ICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsg
VW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0
KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQogICAgICAgICBt
ZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNybyBwcmVPcChvcGNvZGVO
YW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDEsIC5zbG93
KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEgdDEsIFtjZnIsIHQw
LCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAg
ICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwg
dDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTExMzQsMTEgKzEx
MzUsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRl
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLQotICAgIG1h
Y3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6
Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDFd
Ci0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0xMTQ2LDEyICsx
MTQyLDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwKICAgICBi
dGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MwogICAgIG9ycSBu
dW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAg
ICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0MSwg
dDIpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0cXogdDMsIG51bWJl
clRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAwLCB0MwotICAg
IHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlB
cml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEsIHQyKQogICAgIHJl
dHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNjAsNiBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAotICAgICAg
ICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVj
dCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRz
W3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQogICAgICAgICBnZXQo
bV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkK
QEAgLTExNzcsNyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFt
ZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFu
ZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxl
SW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBB
cml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLm9w
MU5vdEludDoKQEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9y
ZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93CiAgICAg
ICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKLSAgICAgICAgcHJv
ZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQyKQog
ICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkludDoKLSAgICAg
ICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQyKQog
ICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQo
bV9kc3QsIHQyKQpAQCAtMTIwNCw5ICsxMTk2LDkgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9y
ZShvcGNvZGVOYW1lLCBvcAogCiAgICAgLm9wMk5vdEludDoKICAgICAgICAgIyBGaXJzdCBvcGVy
YW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIGlzIGRlZmluaXRlbHkgbm90Lgot
ICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5zbG93
Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVC
aW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1
LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAg
ICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE0MjAsNyArMTQyMCw4IEBAIGVu
ZAogCiBtYWNybyBjaGVja1N3aXRjaFRvSklUKGluY3JlbWVudCwgYWN0aW9uKQogICAgIGxvYWRw
IENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGJhZGRpcyBpbmNyZW1lbnQsIENvZGVCbG9jazo6bV9s
bGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJb
dDBdLCAuY29udGludWUKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRl
clt0MF0sIHQwCisgICAgYmFkZGlzIGluY3JlbWVudCwgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVy
OjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICBhY3Rpb24oKQogICAgIC5jb250aW51ZToK
IGVuZApAQCAtMTUwMyw3ICsxNTA0LDggQEAgbWFjcm8gcHJvbG9ndWUoY29kZUJsb2NrR2V0dGVy
LCBjb2RlQmxvYwogICAgIGNvZGVCbG9ja0dldHRlcih0MSkKICAgICBjb2RlQmxvY2tTZXR0ZXIo
dDEpCiAgICAgaWYgbm90IChDX0xPT1Agb3IgQ19MT09QX1dJTikKLSAgICAgICAgYmFkZGlzIDUs
IENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3Vu
dGVyOjptX2NvdW50ZXJbdDFdLCAuY29udGludWUKKyAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjpt
X2xsaW50RXhlY3V0ZUNvdW50ZXJbdDFdLCB0MAorICAgICAgICBiYWRkaXMgNSwgQmFzZWxpbmVF
eGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICAgICAgaWYgSlNW
QUxVRTY0CiAgICAgICAgICAgICBtb3ZlIGNmciwgYTAKICAgICAgICAgICAgIG1vdmUgUEMsIGEx
CkBAIC0xNjE3LDE0ICsxNjE5LDE0IEBAIG1hY3JvIGZ1bmN0aW9uSW5pdGlhbGl6YXRpb24ocHJv
ZmlsZUFyZ1MKICAgICAjIG9wdGltYWwgd2F5IGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBt
b3JlIHRoYW4gZml2ZSByZWdpc3RlcnMgYXZhaWxhYmxlCiAgICAgIyBmb3IgYXJiaXRyYXJ5IHVz
ZSBpbiB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgbG9hZGkgQ29kZUJsb2NrOjptX251bVBhcmFtZXRl
cnNbdDFdLCB0MAotICAgIGFkZHAgLXByb2ZpbGVBcmdTa2lwLCB0MCAjIFVzZSBhZGRpIGJlY2F1
c2UgdGhhdCdzIHdoYXQgaGFzIHRoZSBwZWVwaG9sZQorICAgIGFkZHAgLXByb2ZpbGVBcmdTa2lw
LCB0MAogICAgIGFzc2VydChtYWNybyAob2spIGJwZ3RlcSB0MCwgMCwgb2sgZW5kKQogICAgIGJ0
cHogdDAsIC5hcmd1bWVudFByb2ZpbGVEb25lCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcyArIEZpeGVkVmVjdG9yOjptX3N0b3JhZ2UgKyBSZWZDb3VudGVkQXJy
YXk6Om1fZGF0YVt0MV0sIHQzCiAgICAgYnRweiB0MywgLmFyZ3VtZW50UHJvZmlsZURvbmUgIyBX
aGVuIHdlIGNhbid0IEpJVCwgd2UgZG9uJ3QgYWxsb2NhdGUgYW55IGFyZ3VtZW50IHZhbHVlIHBy
b2ZpbGVzLgogICAgIG11bHAgc2l6ZW9mIFZhbHVlUHJvZmlsZSwgdDAsIHQyICMgQWFhYWFoaGho
ISBOZWVkIHN0cmVuZ3RoIHJlZHVjdGlvbiEKICAgICBsc2hpZnRwIDMsIHQwICMgb2Zmc2V0IG9m
IGxhc3QgSlNWYWx1ZSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLgotICAgIGFkZHAgdDIsIHQzICMg
cG9pbnRlciB0byBlbmQgb2YgVmFsdWVQcm9maWxlIGFycmF5IGluIENvZGVCbG9jazo6bV9hcmd1
bWVudFZhbHVlUHJvZmlsZXMuCisgICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBvZiBW
YWx1ZVByb2ZpbGUgYXJyYXkgaW4gdGhlIHZhbHVlIHByb2ZpbGUgYXJyYXkuCiAuYXJndW1lbnRQ
cm9maWxlTG9vcDoKICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgbG9hZHEgVGhpc0FyZ3VtZW50
T2Zmc2V0IC0gOCArIHByb2ZpbGVBcmdTa2lwICogOFtjZnIsIHQwXSwgdDIKQEAgLTI1NjMsNiAr
MjU2NSwxNyBAQCBtYWNybyBub3RTdXBwb3J0ZWQoKQogICAgIGVuZAogZW5kCiAKKworbWFjcm8g
dXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVt
cCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21l
dGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Rl
bXBdCitlbmQKKworbWFjcm8gdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
dHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgQmluYXJ5QXJp
dGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCiAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBu
ZWVkIHRoZSBYODZfNjRfV0lOIGNvbmRpdGlvbiBoZXJlLCBzaW5jZSBXRUJBU1NFTUJMWSBzaG91
bGQgYWxyZWFkeSBiZSBmYWxzZSBvbiBXaW5kb3dzCiAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNzE2CiBpZiBXRUJBU1NFTUJMWSBhbmQgbm90IFg4Nl82NF9X
SU4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFi
bGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCAr
NDgsMTAgQEAgcHVibGljOgogICAgIENhY2hlYWJsZUlkZW50aWZpZXIoKSA9IGRlZmF1bHQ7CiAK
ICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUNlbGwoSlND
ZWxsKiBpZGVudGlmaWVyKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayosIGNvbnN0IElk
ZW50aWZpZXImKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayosIFVuaXF1ZWRTdHJpbmdJ
bXBsKik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGlj
IGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgY29uc3QgSWRlbnRpZmllciYpOworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRl
bnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlw
ZSosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVu
dGlmaWVyIGNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsK
ICAgICBzdGF0aWMgY29uc3RleHByIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbVJhd0Jp
dHModWludHB0cl90IHJhd0JpdHMpIHsgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIocmF3Qml0
cyk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRl
bnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3Qg
SWRlbnRpZmllciYgaSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5l
IENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSWRl
bnRpZmllciYgaSkKIHsKICAgICByZXR1cm4gY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKGNvZGVCbG9jaywgaS5pbXBsKCkpOwogfQogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRp
ZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVy
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAg
ICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGNvZGVCbG9jay0+aGFzSWRlbnRpZmllcih1aWQp
KTsKICAgICByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcih1aWQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkocmV2aXNpb24gMjgzMDUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiQ2FjaGVkVHlwZXMuaCIKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1
ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ2FjaGVFcnJvci5oIgogI2lu
Y2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgpAQCAtMTkxOCw2ICsxOTE5LDggQEAg
cHVibGljOgogCiAgICAgdW5zaWduZWQgbnVtVmFsdWVQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtVmFsdWVQcm9maWxlczsgfQogICAgIHVuc2lnbmVkIG51bUFycmF5UHJvZmlsZXMoKSBj
b25zdCB7IHJldHVybiBtX251bUFycmF5UHJvZmlsZXM7IH0KKyAgICB1bnNpZ25lZCBudW1CaW5h
cnlBcml0aFByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1CaW5hcnlBcml0aFByb2ZpbGVz
OyB9CisgICAgdW5zaWduZWQgbnVtVW5hcnlBcml0aFByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4g
bV9udW1VbmFyeUFyaXRoUHJvZmlsZXM7IH0KIAogcHJpdmF0ZToKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV90aGlzUmVnaXN0ZXI7CkBAIC0xOTUyLDYgKzE5NTUsOCBAQCBwcml2YXRlOgogCiAgICAg
dW5zaWduZWQgbV9udW1WYWx1ZVByb2ZpbGVzOwogICAgIHVuc2lnbmVkIG1fbnVtQXJyYXlQcm9m
aWxlczsKKyAgICB1bnNpZ25lZCBtX251bUJpbmFyeUFyaXRoUHJvZmlsZXM7CisgICAgdW5zaWdu
ZWQgbV9udW1VbmFyeUFyaXRoUHJvZmlsZXM7CiAKICAgICBDYWNoZWRNZXRhZGF0YVRhYmxlIG1f
bWV0YWRhdGE7CiAKQEAgLTIxNjAsNiArMjE2NSw4IEBAIEFMV0FZU19JTkxJTkUgVW5saW5rZWRD
b2RlQmxvY2s6OlVubGlua2UKICAgICAsIG1fcmFyZURhdGEoY2FjaGVkQ29kZUJsb2NrLnJhcmVE
YXRhKGRlY29kZXIpKQogICAgICwgbV92YWx1ZVByb2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1W
YWx1ZVByb2ZpbGVzKCkpCiAgICAgLCBtX2FycmF5UHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51
bUFycmF5UHJvZmlsZXMoKSkKKyAgICAsIG1fYmluYXJ5QXJpdGhQcm9maWxlcyhjYWNoZWRDb2Rl
QmxvY2subnVtQmluYXJ5QXJpdGhQcm9maWxlcygpKQorICAgICwgbV91bmFyeUFyaXRoUHJvZmls
ZXMoY2FjaGVkQ29kZUJsb2NrLm51bVVuYXJ5QXJpdGhQcm9maWxlcygpKQogewogfQogCkBAIC0y
MzM3LDYgKzIzNDQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29kZUJsb2NrPENvZGVC
CiAgICAgbV9oYXNDaGVja3BvaW50cyA9IGNvZGVCbG9jay5tX2hhc0NoZWNrcG9pbnRzOwogICAg
IG1fbnVtVmFsdWVQcm9maWxlcyA9IGNvZGVCbG9jay5tX3ZhbHVlUHJvZmlsZXMuc2l6ZSgpOwog
ICAgIG1fbnVtQXJyYXlQcm9maWxlcyA9IGNvZGVCbG9jay5tX2FycmF5UHJvZmlsZXMuc2l6ZSgp
OworICAgIG1fbnVtQmluYXJ5QXJpdGhQcm9maWxlcyA9IGNvZGVCbG9jay5tX2JpbmFyeUFyaXRo
UHJvZmlsZXMuc2l6ZSgpOworICAgIG1fbnVtVW5hcnlBcml0aFByb2ZpbGVzID0gY29kZUJsb2Nr
Lm1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKIAogICAgIG1fbWV0YWRhdGEuZW5jb2RlKGVu
Y29kZXIsIGNvZGVCbG9jay5tX21ldGFkYXRhLmdldCgpKTsKICAgICBtX3JhcmVEYXRhLmVuY29k
ZShlbmNvZGVyLCBjb2RlQmxvY2subV9yYXJlRGF0YS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9u
IDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVGSU5FX0NPTU1P
Tl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyB2b2lkIHVw
ZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRhdGEmIG1ldGFk
YXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVuYXJ5QXJpdGhQ
cm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAgVW5hcnlBcml0
aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAgICAgcHJvZmls
ZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSB8fCBy
ZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBpbmxpbmUgcHRy
ZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rp
b25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90
IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFJh
cmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNl
dE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4
ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0aWMgaW5saW5lIHB0cmRp
ZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsgfQogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDM0LDggKzQzNCw2IEBAIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9u
cygKICAgICBPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSA9IGZhbHNlOwogI2VuZGlmCiAKLSAg
ICBpZiAoIWlzQVJNNjQoKSkKLSAgICAgICAgT3B0aW9uczo6dXNlRGF0YUlDKCkgPSBmYWxzZTsK
ICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQogICAgICAgICBPcHRpb25zOjp1c2VEYXRh
SUNJbk9wdGltaXppbmdKSVQoKSA9IGZhbHNlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
OSw3ICszMDksNiBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYo
SW50MzIsIGV2YWxUaHJlc2hvbGRNdWx0aXBsaWVyLCAxMCwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihVbnNpZ25lZCwgbWF4aW11bUV2YWxDYWNoZWFibGVTb3VyY2VMZW5ndGgsIDI1NiwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgXAotICAgIHYoQm9vbCwgcmFuZG9taXplRXhlY3V0aW9uQ291
bnRzQmV0d2VlbkNoZWNrcG9pbnRzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJ
bnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvckJhc2VsaW5l
LCAxMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9u
Q291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yVXBwZXJUaWVycywgNTAwMDAsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIFwKQEAgLTUzMiw2ICs1MzEsNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5
RmFzdE1lbW9yeSgpOwogICAgIHYoQm9vbCwgdXNlRGF0YUlDLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ1NoYXJpbmcsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIHVzZUJhc2VsaW5lSklUQ29kZVNoYXJpbmcsIHRy
dWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICAvKiBGZWF0dXJlIEZsYWdzICovXAog
ICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njcmlw
dEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDEw
ICszOTYsMTkgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aQogICAg
IGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCiAgICAgICAgIGNvZGVCbG9jay0+dmFs
aWRhdGUoKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQotICAgICAgICBzZXR1cExM
SW50KGNvZGVCbG9jayk7Ci0gICAgZWxzZQotICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2Nr
KTsKKyAgICBib29sIGluc3RhbGxlZFVubGlua2VkQmFzZWxpbmVDb2RlID0gZmFsc2U7CisjaWYg
RU5BQkxFKEpJVCkKKyAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gYmFzZWxpbmVSZWYg
PSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUp
IHsKKyAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNl
bGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgaW5zdGFsbGVkVW5saW5rZWRCYXNl
bGluZUNvZGUgPSB0cnVlOworICAgIH0KKyNlbmRpZgorICAgIGlmICghaW5zdGFsbGVkVW5saW5r
ZWRCYXNlbGluZUNvZGUpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpCisgICAg
ICAgICAgICBzZXR1cExMSW50KGNvZGVCbG9jayk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHNldHVwSklUKHZtLCBjb2RlQmxvY2spOworICAgIH0KIAogICAgIGluc3RhbGxDb2RlKHZtLCBj
b2RlQmxvY2ssIGNvZGVCbG9jay0+Y29kZVR5cGUoKSwgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlv
bktpbmQoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRU
aWVyVXBDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUxMSW50VGllclVwQ291bnRlci5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDkgKzUyLDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCgp
CiAgICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0g
ICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1p
emVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChP
cHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01H
T3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVz
aG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAg
IH0KIAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAt
NjUsOSArNjUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQogICAgIHsKICAg
ICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAg
c2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpLCBu
dWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRG
b3JCQlFPcHRpbWl6ZVNvb24oKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1Ro
cmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7
CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0
aW1pemVTb29uKCkpOwogICAgIH0KIAogICAgIHN0cnVjdCBPU1JFbnRyeURhdGEgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CiAKIFRpZXJVcENvdW50OjpUaWVyVXBDb3VudCgpCiB7Ci0gICAgc2V0
TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAo
KSwgbnVsbHB0cik7CisgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9N
R09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiB9CiAKIFRpZXJVcENvdW50Ojp+VGllclVwQ291bnQo
KSA9IGRlZmF1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVw
Q291bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGll
clVwQ291bnQuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRpZXJVcENvdW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCh1aW50MzJfdCBmdW5jdGlvbkluZGV4
KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5j
dGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBhZnRlciB3YXJtLXVwLiIpOwotICAgICAgICBz
ZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1V
cCgpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9s
ZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lm
T3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCkBAIC05MCwxNCArOTAsMTQgQEAgcHVibGlj
OgogICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4
KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCBmdW5j
dGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uIik7Ci0gICAgICAg
IHNldE5ld1RocmVzaG9sZCgwLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKDAp
OwogICAgIH0KIAogICAgIHZvaWQgb3B0aW1pemVTb29uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgp
CiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0
aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIHNvb24uIik7CiAgICAgICAgIC8vIEZJWE1FOiBO
ZWVkIGFkanVzdG1lbnQgb25jZSB3ZSBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3YXNtIGZ1
bmN0aW9ucy4KLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9N
R09wdGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlv
bnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICB2b2lkIHNl
dE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCh1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCkluZGV4OiBTb3VyY2UvV1RG
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNSBAQAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKwor
ICAgICAgICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3By
b2JsZW0vODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiB3dGYvQmFnLmg6CisgICAgICAgICogd3RmL1BhY2tlZC5oOgorICAgICAgICAo
V1RGOjpQYWNrZWRBbGlnbmVkUHRyOjpvcGVyYXRvciogY29uc3QpOgorCiAyMDIxLTA5LTI0ICBE
ZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgdHlwZWNoZWNr
aW5nIGBpc2Agb3ZlcmxvYWRzIGZvciBgc3RkOjp1bmlxdWVfcHRyYCwgYFdURjo6VW5pcXVlUmVm
YCwgYW5kIGBXVEY6OldlYWtQdHJgCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDIwIEBAIHB1YmxpYzoK
ICAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgorICAgIEJhZyYgb3BlcmF0b3I9KEJhZzxULCBVPiYmIG90aGVyKQorICAgIHsK
KyAgICAgICAgaWYgKHVud3JhcHBlZEhlYWQoKSA9PSBvdGhlci51bndyYXBwZWRIZWFkKCkpCisg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAgQmFnIGRlc3Ryb3k7CisgICAgICAg
IGRlc3Ryb3kubV9oZWFkID0gdW53cmFwcGVkSGVhZCgpOworICAgICAgICBtX2hlYWQgPSBvdGhl
ci51bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CisKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwogICAgIH5CYWcoKQogICAgIHsKICAgICAgICAg
Y2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1BhY2tlZC5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvV1RGL3d0
Zi9QYWNrZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4NiwxMCBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9Ci0gICAg
VCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVSA9IFQ+CisgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfdm9p
ZF92PFU+LCBVJj46OnR5cGUgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisK
ICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFnZXQoKTsgfQogCiAgICAgLy8g
VGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJv
b2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgo=
</data>
<flag name="commit-queue"
          id="462816"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439230</attachid>
            <date>2021-09-24 19:40:23 -0700</date>
            <delta_ts>2021-09-24 23:02:11 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>649225</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzOCBA
QAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGFkZHMgYW4gInVubGlua2VkIiBiYXNlbGluZSBKSVQgdG8gSlNWQUxVRTY0
IHBsYXRmb3Jtcy4gVGhlIEpJVAorICAgICAgICBjb2RlIHByb2R1Y2VkIGJ5IHRoaXMgYmFzZWxp
bmUgSklUIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBhbGwgQ29kZUJsb2NrcyB0aGF0CisgICAgICAg
IHNoYXJlIGFuIFVubGlua2VkQ29kZUJsb2NrLiBUaGUgYmVuZWZpdCBvZiB0aGlzIGlzLCBpZiB3
ZSdyZSBjcmVhdGluZyBhIENvZGVCbG9jaworICAgICAgICBmcm9tIGFuIFVubGlua2VkQ29kZUJs
b2NrIHRoYXQgYWxyZWFkeSBjb21waWxlZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAg
ICAgaW5zdGFuY2UsIHRoaXMgbmV3IENvZGVCbG9jayBqdXN0IHN0YXJ0cyBvZmYgZXhlY3V0aW5n
IGluIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgImZvciBmcmVlIi4KKyAgICAgICAgCisgICAg
ICAgIFRvIG1ha2UgdGhpcyB3b3JrLCB0aGUgY29kZSB3ZSBlbWl0IG5vdyBuZWVkcyB0byBiZSBp
bmRlcGVuZGVudCBvZiBhIHNwZWNpZmljCisgICAgICAgIENvZGVCbG9jayBpbnN0YW5jZS4gV2Ug
dXNlIGEgQ29kZUJsb2NrIGluc3RhbmNlIGZvciBtaW5pbWFsIHByb2ZpbGluZyBpbmZvcm1hdGlv
bgorICAgICAgICB3aGVuIGNvbXBpbGluZywgYnV0IG90aGVyd2lzZSwgdGhlIGNvZGUgaXMgdGll
ZCB0byB0aGUgVW5saW5rZWRDb2RlQmxvY2suIFdoZW4KKyAgICAgICAgd2UgbmVlZCBDb2RlQmxv
Y2sgc3BlY2lmaWMgaW5mb3JtYXRpb24sIHdlIGxvYWQgaXQuIFRoaXMgdXN1YWxseSBtZWFucyB0
aGluZ3MKKyAgICAgICAgbGlrZSB3ZSdsbCBsb2FkIHRoaW5ncyBmcm9tIHRoZSBNZXRhZGF0YSBk
eW5hbWljYWxseS4gVGhpcyBwYXRjaCBhbHNvIGFkZHMgYQorICAgICAgICAibGlua2VkIGNvbnN0
YW50IHBvb2wiIGNvbmNlcHQsIGFuZCBhbnl0aW1lIHdlIGluc3RhbnRpYXRlIHN1Y2ggYSBDb2Rl
QmxvY2ssCisgICAgICAgIHdlIGFsc28gbmVlZCB0byBpbnN0YW50aWF0ZSB0aGlzICJsaW5rZWQg
Y29uc3RhbnQgcG9vbCIuIFRoaXMgY29udGFpbnMgdGhpbmdzCisgICAgICAgIGxpa2Ugb3VyIGlu
bGluZSBjYWNoZSBkYXRhIHN0cnVjdHVyZXMgKFN0cnVjdHVyZVN0dWJJbmZvKiksIEpTR2xvYmFs
T2JqZWN0KiwKKyAgICAgICAgZXRjLgorICAgICAgICAKKyAgICAgICAgVW5saW5rZWQgYmFzZWxp
bmUgSklUIGFsd2F5cyBydW5zIElDcyBpbiB0aGUgImRhdGEiIG1vZGUuIFRvIG1ha2UgdGhpcyB3
b3JrLCBJCisgICAgICAgIG1hZGUgZGF0YSBJQ3Mgd29yayBvbiB4ODZfNjQuIFRvIGRvIHRoaXMs
IHdlIG5vIGxvbmdlciBjYWxsL3JldCB0byB0aGUgSUMuCisgICAgICAgIEluc3RlYWQsIHdlIGp1
bXAgdG8gdGhlIElDLCBhbmQgdGhlIElDIGp1bXBzIGJhY2sgYnkgbG9hZGluZyB0aGUgImRvbmUi
IGxvY2F0aW9uCisgICAgICAgIGZyb20gdGhlIFN0cnVjdHVyZVN0dWJJbmZvIGR5bmFtaWNhbGx5
LiBUaGlzIHNpbXBsaWZpZXMgdGhlIGRlc2lnbiB0byBub3QgYmUKKyAgICAgICAgYmFzZWQgb24g
dGhlIGFybTY0IGNhbGxpbmcgY29udmVudGlvbiwgYW5kIGtlZXBzIHRoZSBzYW1lIHBlcmZvcm1h
bmNlIGNoYXJhY3RlcmlzdGljcy4gCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsc28g
YWRkcyBhIG5ldyB2ZXJzaW9uIG9mIElubGluZUFjY2VzcyB0aGF0IGlzIG9ubHkgdXNlZCBpbiBi
YXNlbGluZQorICAgICAgICBKSVQgKGZvciBub3cpLiBJbiB0aGUgZnV0dXJlLCB3ZSBjYW4gbWFr
ZSB0aGUgREZHL0ZUTCBhbHNvIHVzZSB0aGlzIGZvciBEYXRhCisgICAgICAgIElDcy4gQnV0IHdl
IGRvbid0IG5lZWQgdG8gZG8gdGhhdCB5ZXQgc2luY2UgdGhvc2UgdGllcnMgZG9uJ3QgdXNlIGRh
dGEgSUNzIGJ5CisgICAgICAgIGRlZmF1bHQuIFRoZSBiYXNlbGluZSBKSVQgbm93IGhhcyBhIHB1
cmUgZGF0YSBJQyBhcHByb2FjaCB0byBJbmxpbmVBY2Nlc3MuIFNvCisgICAgICAgIGluc3RlYWQg
b2YgcmVwYXRjaGluZyBjb2RlLCB3ZSByZXBhdGNoIGZpZWxkcyB3ZSBsb2FkIGR5bmFtaWNhbGx5
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGNsZWFucyB1cCBhIGZldyB0aGlu
Z3MgaW4gT1NSIGV4aXQsIHdoZXJlIGJvdGggREZHL0ZUTCB3ZXJlCisgICAgICAgIHN0b3Jpbmcg
Y2FsbGVlIHNhdmVzIHRvIHRoZSBjYWxsZWUgc2F2ZXMgYnVmZmVyIGluIGEgd2VpcmQgcGxhY2Us
IGFuZCBzZXBhcmF0ZQorICAgICAgICBmcm9tIG9uZSBhbm90aGVyLiBJIG5vdGljZWQgdGhpcyBj
b2RlIGNhbiBiZSBzaW1wbGlmaWVkIGlmIHdlIGp1c3Qgc3RvcmUKKyAgICAgICAgY2FsbGVlIHNh
dmVzIGF0IHRoZSBlbmQgb2YgdGhlIE9TUiBleGl0IGhhbmRsZXIsIGFuZCBmcm9tIGNvbW1vbiBK
SVQgZW1pc3Npb24KKyAgICAgICAgY29kZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBmaXhlcyBhIGJ1ZyB3aGVyZSB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGUgd3JvbmcgKGFu
ZCBhbHdheXMKKyAgICAgICAgbW9yZSBuZWdhdGl2ZSkgU1AgaW4gdGhlIGJhc2VsaW5lIEpJVC4g
VGhpcyBjb3VsZCBoYXBwZW4gd2hlbiB3ZSBPU1IgZXhpdAorICAgICAgICBmcm9tIGFuIGlubGlu
ZWQgZ2V0dGVyL3NldHRlci4gVGhlIE9TUiBleGl0IGNvZGUgcHV0cyB0aGUgcmV0dXJuIFBDIHdo
ZW4KKyAgICAgICAgcmV0dXJuaW5nIHRvIHRoZSBjYWxsIHNpdGUgb2YgdGhlIGdldHRlci9zZXR0
ZXIgdG8gYmUgdGhlIGlubGluZSBjYWNoZSdzCisgICAgICAgICJkb25lIGxvY2F0aW9uIi4gSG93
ZXZlciwgdGhpcyAiZG9uZSBsb2NhdGlvbiIgZGlkbid0IHVzZWQgdG8gcmVzdG9yZSBTUC4KKyAg
ICAgICAgVGhpcyBwYXRjaCBjb25zZXJ2YXRpdmVseSBtYWtlcyBpdCBzbyB0aGF0IHdlIHJlc3Rv
cmUgdGhlIFNQIGF0IHRoZXNlIHNpdGVzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBtZWFz
dXJlZCBhcyBhIDElIHNwZWVkdXAgb24gU3BlZWRvbWV0ZXIyLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVPcGVy
YW5kc0ZvckNoZWNrcG9pbnQuaDoKKyAgICAgICAgKEpTQzo6dmFsdWVQcm9maWxlT2Zmc2V0Rm9y
KToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpD
YWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86
OmVtaXRGYXN0UGF0aEltcGwpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCk6CisgICAgICAgIChK
U0M6OkNhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyk6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmg6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c2xvd1N0
dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmFkZHJlc3NPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpmcmFtZVJlZ2lzdGVyQ291bnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJpbmFyeUFy
aXRoUHJvZmlsZUZvclBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmFyeUFyaXRoUHJv
ZmlsZUZvclBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kUEMpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdFNvb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdE5l
eHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNo
ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVEFkZElDKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRNdWxJQyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUU3ViSUMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpqaXRBZnRlcldhcm1VcCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25z
dGFudFBvb2wpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNlbGluZUpJVENvbnN0YW50UG9vbCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmRvbnRKSVRBbnl0aW1lU29vbik6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6bGxpbnRFeGVjdXRlQ291bnRlciBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZHJlc3NPZk51bVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmlzS25vd25DZWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjphZGRNYXRoSUMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldEpJVENvZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdENv
ZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN3aXRjaEp1bXBUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3RyaW5nU3dpdGNoSnVtcFRh
YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6aml0Q29kZU1hcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFz
ZWxpbmVTd2l0Y2hKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJhc2VsaW5l
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdTd2l0
Y2hKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRmZ1N0cmluZ1N3aXRjaEp1
bXBUYWJsZSk6CisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwOgorICAgICAgICAoSlND
OjpFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OnNldFRocmVzaG9sZCk6CisgICAg
ICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRp
b25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlk
TWV0YWRhdGEuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3Ro
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRh
dGE6Om9mZnNldE9mTW9kZSk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRT
aXRlRmVlZGJhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0
dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
SW5CeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2spOgor
ICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OklubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoSlNDOjpJbmxp
bmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKToKKyAgICAgICAgKEpT
Qzo6SW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5saW5l
QWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aCk6CisgICAgICAgIChKU0M6OklubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZkluQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2Nlc3MpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnJlc2V0
U3R1YkFzSnVtcEluQWNjZXNzKToKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuaDoK
KyAgICAgICAgKiBieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaDoKKyAgICAgICAgKEpT
Qzo6SXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rlcyk6CisgICAgICAgICog
Ynl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6TExJbnRDYWxsTGlu
a0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKToKKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUu
aDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6c3VjY2VlZCk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0dlbmVyYXRpb25TdGF0ZTo6Y2FsY3VsYXRlTGl2ZVJlZ2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRp
b25IYW5kbGluZyk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2Vy
dmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucyk6CisgICAgICAg
IChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDoKKyAgICAgICAg
KEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5m
bzo6aW5pdEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Omlu
aXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0
SW5CeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3ND
YXNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJlc2V0KToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkRv
bmVMb2NhdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6cHJpbnRTdXBlclNhbXBsZXJTdGF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRl
bnRpZmllcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JK
SVQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9m
aWxlcyk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25BdCBjb25zdCk6CisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjppbnN0cnVjdGlvbnNTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6Omxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJu
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzZXQp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YmluYXJ5QXJpdGhQcm9maWxlKToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnVuYXJ5QXJpdGhQcm9maWxlKToKKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZE1ldGFkYXRhVGFibGU6Om9mZnNldEluTWV0YWRhdGFUYWJsZSk6CisgICAgICAgICog
Ynl0ZWNvZGUvVmFsdWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUJhc2U6
OlZhbHVlUHJvZmlsZUJhc2UpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNlOjpjbGVh
ckJ1Y2tldHMpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNr
ZXQpOgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmg6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmg6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6
CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVw
YXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6aGFuZGxlRXhpdENvdW50cyk6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMpOgorICAgICAgICAoSlNDOjpERkc6
OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1
bXBUb1RhcmdldCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dFByaXZhdGVOYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlQWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlU3ViKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlTmVnYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlTXVsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
Z1NoYWRvd0NoaWNrZW5UYWlsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEpJVENvZGUu
aDoKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmFkZE1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVVbmFyeU1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVCaW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUHV0UHJpdmF0ZU5hbWUpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAg
ICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21w
aWxlU3R1Yik6CisgICAgICAgICogZ2VuZXJhdG9yL01ldGFkYXRhLnJiOgorICAgICAgICAqIGpp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0
b3JlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFs
Q2FsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0
aG91dE1vdmluZ0dsb2JhbE9iamVjdCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5o
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hdGhJQ0hvbGRlcjo6YWRkSklUQWRkSUMpOgorICAg
ICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKToKKyAgICAgICAgKEpTQzo6TWF0
aElDSG9sZGVyOjphZGRKSVRTdWJJQyk6CisgICAgICAgIChKU0M6Ok1hdGhJQ0hvbGRlcjo6YWRk
SklUTmVnSUMpOgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyk6Cisg
ICAgICAgIChKU0M6OkJhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKToKKyAgICAgICAg
KEpTQzo6QmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKToKKyAgICAgICAgKiBqaXQv
QmFzZWxpbmVKSVRDb2RlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6
OmFkZCk6CisgICAgICAgIChKU0M6OkpJVENvbnN0YW50UG9vbDo6c2l6ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpJVENvbnN0YW50UG9vbDo6YXQgY29uc3QpOgorICAgICAgICAqIGppdC9CYXNl
bGluZUpJVFBsYW4uY3BwOgorICAgICAgICAoSlNDOjpCYXNlbGluZUpJVFBsYW46OmZpbmFsaXpl
KToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Q0NhbGxI
ZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwpOgorICAgICAgICAoSlNDOjpD
Q2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KToKKyAgICAgICAgKiBqaXQv
Q0NhbGxIZWxwZXJzLmg6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmg6CisgICAgICAgICog
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZs
ZXI6OkNhbGxGcmFtZVNodWZmbGVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OnByZXBhcmVGb3JUYWlsQ2FsbCk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVyLmg6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzbmFwc2hvdCBjb25zdCk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhclJl
YWRPbmx5Q2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNl
dCk6CisgICAgICAgIChKU0M6OkpJVDo6cmVzZXRTUCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRD
b25zdGFudFBvb2xSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAoSlNDOjpKSVQ6OmZp
bmFsaXplT25NYWluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKToKKyAgICAgICAgKEpT
Qzo6SklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAg
ICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZWdhdGUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfYWRkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElD
RmFzdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZGl2KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX211bCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zdWIpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2FsbFJlc3VsdCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxs
RXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlND
OjpKSVRDb2RlOjp1c2VEYXRhSUMpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpwY1RvQ29kZU9y
aWdpbk1hcCk6CisgICAgICAgICogaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9KSVRD
b21waWxhdGlvbktleS5oOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6SklUQ29t
cGlsYXRpb25LZXkpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6b3BlcmF0b3Ih
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJh
dG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6aGFzaCBjb25z
dCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojpwcm9maWxlZEJsb2NrIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUp
OgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6SklU
R2V0QnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmdlbmVyYXRlR2V0QnlJZElubGluZUFj
Y2Vzcyk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
UHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklURGVsQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAg
ICAoSlNDOjpKSVREZWxCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAgICAg
KEpTQzo6SklUSW5CeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAgIChK
U0M6OkpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVEdldEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgor
ICAgICAgICAoSlNDOjpKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhdGgpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KToKKyAg
ICAgICAgKEpTQzo6SklUOjppc0tub3duQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0Q29u
c3RhbnRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKToKKyAgICAgICAgKEpTQzo6SklUOjps
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6YWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6SklUOjpqdW1wVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6SklUOjps
b2FkUHRyRnJvbU1ldGFkYXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkMzJGcm9tTWV0YWRh
dGEpOgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKToKKyAgICAgICAgKEpT
Qzo6SklUOjpzdG9yZThUb01ldGFkYXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpzdG9yZTMyVG9N
ZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmxvYWRHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29waWVkR2V0UHV0SW5mbyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpJVDo6Y29waWVkQXJpdGhQcm9maWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3Yp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lu
c3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZCk6CisgICAgICAg
IChKU0M6OkpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9m
dW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6dmFsdWVJc0ZhbHNleUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnZhbHVlSXNUcnV0aHlH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAo
SlNDOjpKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAo
SlNDOjpKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfamVx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbmVxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19yZWdleHApOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3
RnVuY0V4cHJDb21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9hcmd1bWVudCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29m
KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25l
d19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0
YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90eXBlb2ZfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9m
dW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251bGwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BFcUp1bXBTbG93KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1lcmljKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3N3aXRjaF9jaGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRj
aF9zdHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdG9fdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAq
IGppdC9KSVRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6SklUUGxhbjo6a2V5KToKKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAg
IChKU0M6OkpJVDo6c2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1l
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAg
ICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3B1dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjpzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2Rl
bF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
bl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRIYXNQcml2YXRlU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX3By
aXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVf
YnJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmspOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3Rv
X3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX2Fy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFs
VmFyaWFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xvc3Vy
ZVZhcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9wcml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9w
cml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJh
bmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9pbl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQcml2YXRlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZVNsb3cpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfZnJvbV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVy
bmFsX2ZpZWxkKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRy
eUNhY2hlR2V0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5KToKKyAgICAgICAgKEpT
Qzo6dHJ5Q2FjaGVJbkJ5KToKKyAgICAgICAgKEpTQzo6dW5saW5rQ2FsbCk6CisgICAgICAgICog
aml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmhhbmRsZUV4Y2VwdGlvbkdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OnBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVF
eGNlcHRpb25HZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuaDoKKyAg
ICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50Ojpq
aXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9T
TE9XX1BBVEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5
cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpudW1CaW5hcnlBcml0aFBy
b2ZpbGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpudW1VbmFyeUFy
aXRoUHJvZmlsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2Nr
VHlwZT46OmVuY29kZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgor
ICAgICAgICAoSlNDOjp1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3ApOgorICAgICAg
ICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICogcnVudGltZS9PcHRp
b25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9u
cyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
U2NyaXB0RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnBy
ZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludFRpZXJVcENv
dW50ZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpvcHRpbWl6
ZUFmdGVyV2FybVVwKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpv
cHRpbWl6ZVNvb24pOgorICAgICAgICAqIHdhc20vV2FzbVRpZXJVcENvdW50LmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6OlRpZXJVcENvdW50KToKKyAgICAgICAgKiB3YXNt
L1dhc21UaWVyVXBDb3VudC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6b3B0
aW1pemVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50OjpvcHRp
bWl6ZU5leHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6Om9w
dGltaXplU29vbik6CisKIDIwMjEtMDktMjMgIFBoaWxpcCBDaGltZW50byAgPHBjaGltZW50b0Bp
Z2FsaWEuY29tPgogCiAgICAgICAgIFZhcmlvdXMgdHdlYWtzIGluIHByZXBhcmF0aW9uIGZvciBU
ZW1wb3JhbC5JbnN0YW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTYxMSw2ICs2MTEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBCiAgICAgYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKICAgICBidWls
dGlucy9CdWlsdGluVXRpbHMuaAogCisgICAgYnl0ZWNvZGUvQXJpdGhQcm9maWxlLmgKICAgICBi
eXRlY29kZS9BcnJheUFsbG9jYXRpb25Qcm9maWxlLmgKICAgICBieXRlY29kZS9BcnJheVByb2Zp
bGUuaAogICAgIGJ5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMuaApAQCAtODM3LDYgKzgzOCw3
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKIAogICAgIGppdC9B
c3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oCisgICAg
aml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVycy5oCiAgICAgaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVtb3J5SGFuZGxlLmgKQEAg
LTg3NSw2ICs4NzcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
CiAgICAgcGFyc2VyL1BhcnNlckVycm9yLmgKICAgICBwYXJzZXIvUGFyc2VyTW9kZXMuaAogICAg
IHBhcnNlci9QYXJzZXJUb2tlbnMuaAorICAgIHBhcnNlci9SZXN1bHRUeXBlLmgKICAgICBwYXJz
ZXIvU291cmNlQ29kZS5oCiAgICAgcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgKICAgICBwYXJzZXIv
U291cmNlUHJvdmlkZXJDYWNoZS5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTYxOSw2ICs2MTksNyBAQCBpbnRlcnByZXRlci9TaGFkb3dDaGlja2Vu
LmNwcAogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAogCiBqaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAoraml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKIGppdC9CYXNlbGluZUpJVFBsYW4uY3BwCiBq
aXQvQmluYXJ5U3dpdGNoLmNwcAogaml0L0NDYWxsSGVscGVycy5jcHAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtOTAwLDYgKzkwMCw3IEBACiAJCTUyQ0QwRjVEMjI0MkY1NjkwMDRBMThBNSAvKiBG
b3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1l
d29yayAqLzsgfTsKIAkJNTJDRDBGNUUyMjQyRjU2OTAwNEExOEE1IC8qIEphdmFTY3JpcHRDb3Jl
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsg
Ki87IH07CiAJCTUyQ0QwRjY4MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0QwRjY3MjI0MkY3MUMw
MDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLzsgfTsKKwkJNTJERDAwMDgyNkUwMzlCOTAwNTRFNDA4
IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyRUVE
Nzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFRUQ3OTMyNDkyQjg2ODAwOEY0Qzkz
IC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRD
QyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIwMDI2QTU0
NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNl
My1tbS5tbSAqLzsgfTsKQEAgLTEyMjAsNyArMTIyMSw3IEBACiAJCTc5ODcyQzQ4MjIxQkJBRjMw
MDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFzZUludGVy
bmFsLmggKi87IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5N
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVG
N0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTc5QTIyODM2MUQz
NUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFBy
b2ZpbGUuaCAqLzsgfTsKKwkJNzlBMjI4MzYxRDM1RDcxRjAwRDhFMDY3IC8qIEFyaXRoUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMjI4
MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUJCMTdFMUU1Q0NCNTcwMDQ1QjlBNiAv
KiBBaXJEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QUJCMTdDMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUFDMzBG
RjFGOTk1MzY0MDA0ODRGRDcgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFDMzBGRTFGOTk1
MzYzMDA0ODRGRDcgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmggKi87IH07CiAJ
CTc5QUYwQkU0MUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUYwQkUzMUQzRUZE
NEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzY3NCw2ICszNjc1LDggQEAKIAkJNTJD
RDBGNjQyMjQyRjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBwYXRoID0g
ZGZnL3Rlc3RkZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQxMzA4RjIy
MUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNjI2
RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2Vs
aW5lSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNzI2RTAz
OUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJh
c2VsaW5lSklUQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzky
MjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGdW5jdGlvbkFsbG93bGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyRUVENzkzMjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGdW5jdGlvbkFsbG93bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI3Niw2ICs2Mjc5LDggQEAKIAkJCQk2
Qjc2N0U3QTI2NzkxRjI3MDAxN0Y4RDEgLyogQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaCAqLywK
IAkJCQk3MjM5OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLywK
IAkJCQk3MjM5OThGNTI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8sCisJ
CQkJNTJERDAwMDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8sCisJ
CQkJNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovLAogCQkJ
CTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBG
NjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4Mzky
RDFCQUNBOUQzMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApAQCAtOTczMCw2ICs5
NzM1LDcgQEAKIAkJCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRB
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Zs
dXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDgg
LyogQmFzZWxpbmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJF
MDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlDQzg5
MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTM4NkZEN0UyNkU4NjdCODAwRTRDMjhCIC8qIFRlbXBvcmFsUGxhaW5UaW1lLmggaW4gSGVhZGVy
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDE1ICsyMDIsMTUgQEAgUmVm
UHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmZyb21TdHJ1YwogICAgIHN3aXRjaCAoc3R1Yklu
Zm8uY2FjaGVUeXBlKCkpIHsKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7Ci0gICAg
ICAgIHJldHVybiBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBMb2FkLCBp
ZGVudGlmaWVyLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIFByb3h5YWJsZUFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRT
ZWxmT2Zmc2V0LCBzdHViSW5mby5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAg
ICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7Ci0gICAgICAgIHJldHVybiBBY2Nlc3ND
YXNlOjpjcmVhdGUodm0sIG93bmVyLCBSZXBsYWNlLCBpZGVudGlmaWVyLCBzdHViSW5mby51LmJ5
SWRTZWxmLm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIFJlcGxhY2Us
IGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsK
LSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIEluSGl0LCBpZGVu
dGlmaWVyLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIEluSGl0LCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNldCwg
c3R1YkluZm8uaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBDYWNo
ZVR5cGU6OkFycmF5TGVuZ3RoOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXND
b25zdGFudElkZW50aWZpZXIpOwpAQCAtMTk4NSwxNCArMTk4NSwxMCBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20g
Z2V0dGVycy9zZXR0ZXJzLgogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2Fs
bDsKIAorCiAgICAgICAgIC8vIFRoaXMgYWxzbyBkb2VzIHRoZSBuZWNlc3NhcnkgY2FsY3VsYXRp
b25zIG9mIHdoZXRoZXIgb3Igbm90IHdlJ3JlIGFuCiAgICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5k
bGluZyBjYWxsIHNpdGUuCi0gICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygp
KQotICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lzdGVy
czo6bHIpOwotI2VuZGlmCi0gICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0
ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwo
ZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsKKyAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRl
OjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0
YWNrRm9yQ2FsbCgpOwogCiAgICAgICAgIGF1dG8gcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3Rh
Y2tGb3JDYWxsID0gWyZdKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSYgc3BpbGxT
dGF0ZSwgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUpIHsKICAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IGRvbnRSZXN0b3JlOwpAQCAtMjA3OSw4ICsyMDc1LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgQVNTRVJUKCEobnVtYmVyT2ZSZWdzRm9y
Q2FsbCAlIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpKTsKICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mQnl0ZXNGb3JDYWxsID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdp
c3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CiAKLSAgICAgICAgICAgIHVuc2lnbmVk
IGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0gICAgICAgICAgICBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7
CisgICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPSBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVz
Rm9yQ2FsbCk7CiAKICAgICAgICAgICAgIGppdC5zdWJQdHIoCiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKQEAg
LTIxMzgsNiArMjEzMyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dl
bmUKIAogICAgICAgICAgICAgaW50IHN0YWNrUG9pbnRlck9mZnNldCA9IChjb2RlQmxvY2stPnN0
YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzdGF0ZS5wcmVzZXJ2ZWRS
ZXVzZWRSZWdpc3RlclN0YXRlLm51bWJlck9mQnl0ZXNQcmVzZXJ2ZWQgLSBzcGlsbFN0YXRlLm51
bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbjsKICAgICAgICAgICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworCiAgICAgICAgICAgICBib29sIGNhbGxIYXNSZXR1cm5WYWx1ZSA9IGlzR2V0
dGVyKCk7CiAgICAgICAgICAgICByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwo
c3BpbGxTdGF0ZSwgY2FsbEhhc1JldHVyblZhbHVlKTsKIApAQCAtMjI2NCwxMiArMjI2MCw3IEBA
IHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKIAogICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdl
dE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgICAgICAgICBpZiAoY29k
ZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmUuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0jZW5kaWYKLSAgICAgICAgICAgIGF1dG8g
c3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0
aG91dEV4Y2VwdGlvbnMoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsKKyAgICAgICAgICAgIGF1
dG8gc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
V2l0aG91dEV4Y2VwdGlvbnMoKTsKIAogICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRl
Y2x0eXBlKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKT4oQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKCZ2bSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgaml0LnByZXBhcmVDYWxs
T3BlcmF0aW9uKHZtKTsKQEAgLTIzNjQsMTAgKzIzNTUsNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFS
ZWdpc3RlcnNUb1ByZXNlcnZlOwogICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZS5zZXQoYmFzZUdQUik7CiAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNl
cnZlLnNldCh2YWx1ZVJlZ3MpOwotI2lmIENQVShBUk02NCkKLSAgICAgICAgICAgICAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3Rl
cnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCiAgICAgICAgICAg
ICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0
ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmUpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJi
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsNyArMjkyLDcgQEAgb3BfZ3JvdXAg
OlByb2ZpbGVkQmluYXJ5T3AsCiAgICAgICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVzLAog
ICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0
aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAg
IH0KIAogb3BfZ3JvdXAgOlZhbHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1Myw3ICszNTMsNyBA
QCBvcF9ncm91cCA6VW5hcnlJblBsYWNlUHJvZmlsZWRPcCwKICAgICAgICAgc3JjRHN0OiBWaXJ0
dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2Zp
bGU6IFVuYXJ5QXJpdGhQcm9maWxlCisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFBy
b2ZpbGUuKgogICAgIH0KIAogb3AgOnRvX29iamVjdCwKQEAgLTM4Niw3ICszODYsNyBAQCBvcCA6
bmVnYXRlLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLAogICAgIH0sCiAgICAgbWV0
YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAg
ICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JD
aGVja3BvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2lu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3MywyOCBAQCBWYWx1ZVByb2ZpbGUqIHZhbHVl
UHJvZmlsZUZvckltcGwoQnl0ZWNvCiAgICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9maWxl
OwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQcm9m
aWxlT2Zmc2V0Rm9yKHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURfUEFS
QU0oY2hlY2twb2ludEluZGV4KTsKKyAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJ
RCA9PSBvcF9pdGVyYXRvcl9vcGVuKSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4
KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRl
Y29kZTo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2Ug
T3BJdGVyYXRvck9wZW46OmdldE5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNl
dE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6
Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3Bv
aW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJl
dHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKKyAg
ICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZEb25lUHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0
OjpnZXRWYWx1ZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2Zp
bGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSAKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRh
dGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwg
dW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZt
KQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsKIH0KIAotQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKLXsKLSAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KG1fZmFz
dFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENh
bGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGF0
YUlDKCkpOwpAQCAtMjI1LDYgKzIyMCwxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0TWF4QXJn
dW1lbnRDb3VudEluCiAgICAgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZhbHVl
OwogfQogCitDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86
OmZhc3RQYXRoU3RhcnQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkgJiYgaXNU
YWlsQ2FsbCgpKTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJu
YWxQdHJUYWc+KHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCk7Cit9CisKIHZvaWQgQ2FsbExpbmtJ
bmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogewogICAgIGF1dG8gaGFuZGxlU3BlY2lmaWNDYWxsZWUg
PSBbJl0gKEpTRnVuY3Rpb24qIGNhbGxlZSkgewpAQCAtMjk4LDIzICsyOTksMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMxMiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMjUsMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzQ0LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM4MSwzMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5mb0dQ
UiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRy
eVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2
bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9IENv
ZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgc2V0VXBD
YWxsKHVubGlua2VkQ2FsbExpbmtJbmZvLmNhbGxUeXBlLCBjYWxsZWVHUFIpOworICAgIG1fZG9u
ZUxvY2F0aW9uID0gdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uOworICAgIGlmICh1
bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKSB7CisgICAgICAgIC8vIEZJWE1F
OiBJdCdkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIGEgcmVmY291bnRlZCBkYXRhIHN0cnVjdHVyZS4K
KyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxl
RGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpOworICAgIH0KKyAg
ICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgdS5kYXRhSUMubV9jYWxsTGlu
a0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRp
b24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dl
ZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGly
ZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlz
VGFpbENhbGwoKSk7CiAKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKIAotICAg
IGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwot
ICAgIH0pOwotCiAgICAgYXV0byBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICB1LmNvZGVJQy5t
X2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQ
dHJUYWc+KGNhbGwpOwpAQCAtMzk3LDcgKzQyNCw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0
RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgp
OwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGZhc3RQYXRoU3RhcnQpOworICAgICAgICB1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
CiAgICAgfSk7CiAKICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEg
anVtcCB0byB0aGUgc2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5
ICs0MywxMSBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwog
c3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0lu
Zm87CisKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8
Q2FsbExpbmtJbmZvPiB7CiBwdWJsaWM6Ci0gICAgZW51bSBDYWxsVHlwZSB7CisgICAgZW51bSBD
YWxsVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25lLAogICAgICAgICBDYWxsLAogICAgICAg
ICBDYWxsVmFyYXJncywKQEAgLTE2NSw2ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2Fs
bGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhW
TSYsIFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUik7CisKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsZWVHUFI7IH0KICAgICAKICAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgewpA
QCAtMTczLDEzICsxNzcsMTYgQEAgcHVibGljOgogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47Cisg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxM
aW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CisgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9V
TlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRh
aWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWls
Q2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBl
bWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRh
aWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJik7CiAgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKICAg
ICB2b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOworICAgIHN0YXRpYyB2b2lk
IGVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIpOwogICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJ
QygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09
IFVzZURhdGFJQzo6WWVzOyB9CkBAIC0yMDMsNyArMjEwLDYgQEAgcHVibGljOgogICAgICAgICBt
X2FsbG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwogCkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1
YmxpYzoKICAgICAgICAgbV9zbG93U3R1YiA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgSklUU3R1
YlJvdXRpbmUqIHNsb3dTdHViKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Nsb3dTdHViLmdl
dCgpOwotICAgIH0KLQogICAgIGJvb2wgc2Vlbk9uY2UoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IG1faGFzU2VlblNob3VsZFJlcGF0Y2g7CkBAIC0zMDgsOSArMzA5LDkgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUpOwogICAgIH0KIAot
ICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIH0KIAogICAgIHVpbnQzMl90IG1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTM4MSw3ICszODIsOSBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1f
ZmFzdFBhdGhTdGFydDsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IGZhc3RQYXRoU3RhcnQoKTsKKwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBA
IC0zOTcsNiArNDAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247CiAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRo
U3RhcnQ7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBt
X2Zhc3RQYXRoU3RhcnQ7CiAgICAgICAgIH0gY29kZUlDOwogICAgIH0gdTsKIApAQCAtNDI0LDYg
KzQyOCwxMyBAQCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpCiAgICAg
cmV0dXJuIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCk7CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENh
bGxMaW5rSW5mbyB7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OyAvLyBDdXJyZW50
bHksIG9ubHkgdXNlZCBieSBiYXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5IHByb2R1Y2Ug
YSBDb2RlT3JpZ2luLgorICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307
CisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjc5LDggKzI3OSw2IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZN
JiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQog
ICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5Db21w
aWxlZFdpdGhGVEwoZmFsc2UpCi0gICAgLCBtX2hhc0xpbmtlZE9TUkV4aXQoZmFsc2UpCi0gICAg
LCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZShmYWxzZSkKICAgICAsIG1fbnVtQ2FsbGVl
TG9jYWxzKG90aGVyLm1fbnVtQ2FsbGVlTG9jYWxzKQogICAgICwgbV9udW1WYXJzKG90aGVyLm1f
bnVtVmFycykKICAgICAsIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAob3RoZXIubV9udW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCkKQEAgLTMwOCw2ICszMDYsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlkZXIoKSk7
CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisgICAgbV9s
bGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVy
KCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9CkBAIC0z
MTgsNyArMzE4LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQwog
ICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIAogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAo
KTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgaWYgKG90aGVyLm1fcmFyZURhdGEpIHsK
ICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwpAQCAtMzM2LDggKzMzNSw2IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fZGlkRmFp
bEpJVENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFs
c2UpCiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCi0gICAgLCBtX2hhc0xp
bmtlZE9TUkV4aXQoZmFsc2UpCi0gICAgLCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZShm
YWxzZSkgCiAgICAgLCBtX251bUNhbGxlZUxvY2Fscyh1bmxpbmtlZENvZGVCbG9jay0+bnVtQ2Fs
bGVlTG9jYWxzKCkpCiAgICAgLCBtX251bVZhcnModW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMo
KSkKICAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCkBAIC0zNTksNyArMzU2LDkg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJU
KHNvdXJjZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSk7Ci0gICAgCisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50
ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKKwogICAgIHZtLmhl
YXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQogCkBAIC0zNzAsNyArMzY5LDggQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2FuJ3QgZ2VuZXJh
dGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJvY2VzcyBpcyBu
b3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJvZHVjZSBuZXcg
bG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5lc3MgYW5hbHlz
aXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5r
ZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhlIGxpdmVuZXNz
IGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNpZGUgVW5saW5r
ZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBiZXR3ZWVuIGFs
bCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhlIGJ5dGVjb2Rl
IG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5nIGFuIFVubGlu
a2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2Ny
aXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5r
ZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CkBAIC00NzEsNiArNDcxLDIxIEBA
IGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgYnJlYWs7
IFwKICAgICB9CiAKKyAgICB1bnNpZ25lZCBiaW5hcnlQcm9maWxlSW5kZXggPSAwOworICAgIHVu
c2lnbmVkIHVuYXJ5UHJvZmlsZUluZGV4ID0gMDsKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9B
UklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElB
TElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0g
Jm1fdW5saW5rZWRDb2RlLT5iaW5hcnlBcml0aFByb2ZpbGUoYmluYXJ5UHJvZmlsZUluZGV4Kysp
OyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorI2RlZmluZSBMSU5LX1dJVEhfVU5BUllfQVJJ
VEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJ
WkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZt
X3VubGlua2VkQ29kZS0+dW5hcnlBcml0aFByb2ZpbGUodW5hcnlQcm9maWxlSW5kZXgrKyk7IFwK
KyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYg
aW5zdHJ1Y3Rpb25TdHJlYW0gPSBpbnN0cnVjdGlvbnMoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8m
IGluc3RydWN0aW9uIDogaW5zdHJ1Y3Rpb25TdHJlYW0pIHsKICAgICAgICAgT3Bjb2RlSUQgb3Bj
b2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKQEAgLTUzMywxNCArNTQ4LDE0IEBAIGJv
b2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgTElOSyhPcENy
ZWF0ZVByb21pc2UpCiAgICAgICAgIExJTksoT3BDcmVhdGVHZW5lcmF0b3IpCiAKLSAgICAgICAg
TElOSyhPcEFkZCkKLSAgICAgICAgTElOSyhPcE11bCkKLSAgICAgICAgTElOSyhPcERpdikKLSAg
ICAgICAgTElOSyhPcFN1YikKLQotICAgICAgICBMSU5LKE9wTmVnYXRlKQotICAgICAgICBMSU5L
KE9wSW5jKQotICAgICAgICBMSU5LKE9wRGVjKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FS
SVRIX1BST0ZJTEUoT3BBZGQpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklM
RShPcE11bCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wRGl2KQor
ICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BTdWIpCisKKyAgICAgICAg
TElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BOZWdhdGUpCisgICAgICAgIExJTktfV0lU
SF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wSW5jKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJ
VEhfUFJPRklMRShPcERlYykKIAogICAgICAgICBMSU5LKE9wSm5lcVB0cikKIApAQCAtNzY5LDcg
Kzc4NCw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAv
LyByZWx5IG9uIHRoZSBpbnN0cnVjdGlvbiBjb3VudCAoYW5kIGFyZSBpbiB0aGVvcnkgcGVybWl0
dGVkIHRvIGFsc28gaW5zcGVjdCB0aGUKICAgICAvLyBpbnN0cnVjdGlvbiBzdHJlYW0gdG8gbW9y
ZSBhY2N1cmF0ZSBhc3Nlc3MgdGhlIGNvc3Qgb2YgdGllci11cCkuCiAgICAgb3B0aW1pemVBZnRl
cldhcm1VcCgpOwotICAgIGppdEFmdGVyV2FybVVwKCk7CiAKICAgICAvLyBJZiB0aGUgY29uY3Vy
cmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2RlIGJsb2NrJ3MgaGFzaCwgdGhlbiBjb21wdXRl
IGl0IGhlcmUKICAgICAvLyBzeW5jaHJvbm91c2x5LgpAQCAtNzkzLDYgKzgwNyw3OCBAQCB2b2lk
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb25Db21tb24oVk0mCiAgICAgbV9vd25lckVkZ2Uuc2V0
KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpjcmVhdGUodm0sIHRoaXMpKTsK
IH0KIAorI2lmIEVOQUJMRShKSVQpCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRC
YXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRD
b2RlKGppdENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0
Q29kZU1hcCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFu
ZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8g
RklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5h
dGl2ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkp
LnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAg
ICAgYXV0byYgaml0RGF0YSA9IGVuc3VyZUpJVERhdGEobG9ja2VyKTsKKworICAgICAgICBSRUxF
QVNFX0FTU0VSVChqaXREYXRhLm1faml0Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CisgICAgICAg
IGppdERhdGEubV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+
bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBq
aXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBl
bnRyeSA9IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOworICAgICAgICAgICAgc3dpdGNo
IChlbnRyeS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
R2xvYmFsT2JqZWN0OgorICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xb
aV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAg
ICAgICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8gPSAq
c3RhdGljX2Nhc3Q8VW5saW5rZWRDYWxsTGlua0luZm8qPihlbnRyeS5wYXlsb2FkLmdldCgpKTsK
KyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9j
YWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2Rl
SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmluaXRpYWxpemVEYXRhSUMo
dm0oKSwgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGNhbGxM
aW5rSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbzogeworICAg
ICAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8g
PSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyo+KGVudHJ5LnBheWxvYWQu
Z2V0KCkpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGpp
dERhdGEubV9zdHViSW5mb3MuYWRkKHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZSwgQ29kZU9y
aWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBz
dHViSW5mby0+aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKHRoaXMsIHVu
bGlua2VkU3R1YkluZm8pOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBv
b2xbaV0gPSBzdHViSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6IHsK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25z
dGFudFBvb2xbaV0gPSBmdW5jdGlvbkRlY2woaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6
OkZ1bmN0aW9uRXhwcjogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAg
aml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIEdsb2JhbENv
ZGU6CisgICAgY2FzZSBNb2R1bGVDb2RlOgorICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAgIG1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RnVuY3Rpb25Db2RlOgorICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRv
IGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCisgICAgICAg
IC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRpb24uCisgICAgICAgIG1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwoKSkgJiYgREZHOjptaWdo
dElubGluZUZ1bmN0aW9uKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAo
aml0Q29kZS0+bV9pc1NoYXJlYWJsZSAmJiAhdW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtl
ZEJhc2VsaW5lQ29kZSAmJiBPcHRpb25zOjp1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nKCkpCisg
ICAgICAgIHVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUgPSBXVEZN
b3ZlKGppdENvZGUpOworfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKIENvZGVCbG9jazo6fkNv
ZGVCbG9jaygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC04NzMsNiArOTU5LDI3IEBAIENv
ZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAorYm9vbCBD
b2RlQmxvY2s6OmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QKK3sKKyAgICAvLyBUaGlzIG5lZWRzIHRvIGNvcnJlc3BvbmQgdG8gd2hh
dCB3ZSBkbyBpbnNpZGUgc2V0Q29uc3RhbnRSZWdpc3RlcnMuCisgICAgc3dpdGNoICh1bmxpbmtl
ZENvZGVCbG9jaygpLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihyZWcpKSB7Cisg
ICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6CisgICAgY2FzZSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOiB7CisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSB1bmxpbmtlZENvZGVCbG9jaygpLT5nZXRDb25zdGFudChyZWcpOworICAgICAgICBp
ZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKGNlbGwt
PmluaGVyaXRzPFN5bWJvbFRhYmxlPih2bSgpKSB8fCBjZWxsLT5pbmhlcml0czxKU1RlbXBsYXRl
T2JqZWN0RGVzY3JpcHRvcj4odm0oKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjo6TGlua1RpbWVDb25zdGFudDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwog
VmVjdG9yPHVuc2lnbmVkPiBDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IEZp
eGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgRml4ZWRW
ZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtODkyLDYgKzk5OSw3IEBAIFZl
Y3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFIKICAgICAgICAgc3dpdGNoIChy
ZXByZXNlbnRhdGlvbikgewogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudDoKICAgICAgICAgICAgIGNvbnN0YW50ID0gZ2xvYmFsT2JqZWN0LT5s
aW5rVGltZUNvbnN0YW50KHN0YXRpY19jYXN0PExpbmtUaW1lQ29uc3RhbnQ+KGNvbnN0YW50LmFz
SW50MzJBc0FueUludCgpKSk7CisgICAgICAgICAgICBBU1NFUlQoY29uc3RhbnQuaXNDZWxsKCkp
OyAvLyBVbmxpbmtlZCBCYXNlbGluZSBKSVQgcmVxdWlyZXMgdGhpcy4KICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI6CiAgICAg
ICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgpAQCAtMTUxNCw3ICsx
NjIyLDcgQEAgQ29kZUJsb2NrOjpKSVREYXRhJiBDb2RlQmxvY2s6OmVuc3VyZUpJVAogICAgIHJl
dHVybiAqbV9qaXREYXRhOwogfQogCi12b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJ
VElubGluZUNhY2hlcygpCit2b2lkIENvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMo
KQogewogICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAg
IGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5m
b3MpCkBAIC0xNTI1LDYgKzE2MzMsMjAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxp
bmVKSVRJbmxpbgogICAgICAgICAgICAgc3R1YkluZm8tPnZpc2l0V2Vha1JlZmVyZW5jZXMobG9j
a2VyLCB0aGlzKTsKICAgICAgICAgfQogICAgIH0KKworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAg
ICBpZiAoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIC8vIFZl
cmlmeSB3ZSBkb24ndCBuZWVkIHRvIGZpbmFsaXplIHRoZXNlIHNpbmNlIHRoZXkncmUgdmlydHVh
bCBjYWxscy4KKyAgICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA6IHN0YXRp
Y19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fZXZhbENhbGxMaW5r
SW5mb3MpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsK
KyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+Zm9yRWFjaERlcGVuZGVudENlbGwoW10gKEpTQ2Vs
bCopIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisKKyAgICB9CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC0xNTM0LDQ2
ICsxNjU2LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAog
ICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIGJvb2wg
aXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3Jh
ZGU7Ci0gICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBmYWxzZTsKLSAgICAvLyBJ
ZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVw
bGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0Ci0gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGluZSBK
SVQgY29kZSBhbmQgcmVpbnN0YWxsIExMSW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5LgotICAg
IGlmIChPcHRpb25zOjp1c2VMTEludCgpICYmICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1NldCgp
LmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpKSB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIG9w
dGltaXplZENvZGVCbG9jayA9IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKLSAgICAgICAgICAg
IGlmICghb3B0aW1pemVkQ29kZUJsb2NrLT5tX29zckV4aXRDb3VudGVyKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSkgewotICAgICAgICAgICAgICAg
ICAgICBtX2ppdENvZGUgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBMTEludDo6c2V0
RW50cnlwb2ludCh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0
VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOwotCi0gICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxpbmtlZENvZGUtPm51bWJlck9mRXhjZXB0
aW9uSGFuZGxlcnMoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmxp
bmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlua2VkQ29kZS0+ZXhjZXB0
aW9uSGFuZGxlcihpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5k
bGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9ucygpLmF0KHVubGlua2Vk
SGFuZGxlci50YXJnZXQpLnB0cigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5p
bml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZUNhdGNoKGluc3RydWN0aW9uLndpZHRoKCkpLmNvZGUo
KSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdW5saW5r
SW5jb21pbmdDYWxscygpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBj
bGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGluIGZpbmFsaXplVW5jb25kaXRpb25hbGx5IGFs
bCBjb21waWxlciB0aHJlYWRzCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBzYWZlcG9pbnRl
ZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5pbmcgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBieXRlY29k
ZSBwYXJzZXIsIGFuZCBieXRlY29kZQotICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXIgaXMg
dGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5mb3Mu
Ci0gICAgICAgICAgICAgICAgICAgIHJlc2V0SklURGF0YSgpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNlbmRpZgotICAgIAog
ICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKICAgICAgICAg
ZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAo
ISFqaXRDb2RlKCkpCi0gICAgICAgIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsK
KyAgICAgICAgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KERGR19KSVQpCkBAIC0xNTk0LDcgKzE2ODIsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoCiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OgotICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKKyAg
ICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jb3VudCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAg
ICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKQEAgLTE2NzUsMzAgKzE3
NjMsNiBAQCBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mCiAgICAgcmV0
dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSwgY29k
ZU9yaWdpbik7CiB9CiAKLUpJVEFkZElDKiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fYWRkSUNzLmFk
ZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVRNdWxJQyogQ29kZUJsb2NrOjphZGRKSVRNdWxJQyhC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX211
bElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUU3ViSUMqIENvZGVCbG9jazo6YWRkSklU
U3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVE5lZ0lDKiBDb2RlQmxvY2s6
OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRh
KGxvY2tlcikubV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KIFN0cnVjdHVyZVN0dWJJ
bmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwpAQCAtMzEzMyw3ICszMTk3LDcg
QEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1l
UmVnaXN0ZXJDb3VudEZvcih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMzQ5LDEzICszNDEzLDEzIEBA
IEJpbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2gg
KHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNh
c2Ugb3BfbXVsOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJu
ICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTMzNjcsMTEgKzM0MzEsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6dW5hcnlBcml0aAogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGNhc2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0zNDcyLDIyICszNTM2LDE2IEBAIHZvaWQgQ29kZUJsb2Nr
OjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmkKIH0KIAogI2lmIEVOQUJMRShKSVQpCi12b2lkIENv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3Jp
Z2luTWFwPiYmIG1hcCkgCi17IAotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
KTsKLSAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1v
dmUobWFwKTsKLX0KLQogc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQ
Qyh2b2lkKiBwYykKIHsKKyAgICBpZiAoYXV0byogcGNUb0NvZGVPcmlnaW5NYXAgPSBtX2ppdENv
ZGUtPnBjVG9Db2RlT3JpZ2luTWFwKCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Q29k
ZU9yaWdpbj4gY29kZU9yaWdpbiA9IHBjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQorICAg
ICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CisgICAgfQorCiAgICAgewogICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIGlmIChhdXRvKiBqaXREYXRh
ID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBpZiAoaml0RGF0YS0+bV9wY1RvQ29k
ZU9yaWdpbk1hcCkgewotICAgICAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+IGNvZGVPcmlnaW4gPSBqaXREYXRhLT5tX3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKLSAgICAgICAgICAgIH0K
LQogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRh
LT5tX3N0dWJJbmZvcykgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29udGFpbnNQ
QyhwYykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+KHN0dWJJbmZvLT5jb2RlT3JpZ2luKTsKQEAgLTM1MjEsMjggKzM1NzksMTQgQEAgc3RkOjpv
cHRpb25hbDxCeXRlY29kZUluZGV4PiBDb2RlQmxvY2s6OgogICAgIHJldHVybiBieXRlY29kZUlu
ZGV4OwogfQogCi1pbnQzMl90IENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhy
ZXNob2xkKQotewotICAgIHN3aXRjaCAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUo
KSkgewotICAgIGNhc2UgVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU6Ci0gICAgICAgIHJldHVybiB0
aHJlc2hvbGQ7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6RmFsc2U6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgKiA0OwotICAgIGNhc2UgVHJpU3RhdGU6OlRydWU6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgLyAyOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
dGhyZXNob2xkOwotfQotCi12b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBD
b2RlQmxvY2s6OmppdFNvb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdU
aHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2Fy
bVVwKCkpLCB0aGlzKTsKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9s
ZCh1bmxpbmtlZENvZGVCbG9jaygpLT50aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3Zv
aWQgQ29kZUJsb2NrOjpqaXROZXh0SW52b2NhdGlvbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdU
aHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAKIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRy
YXBCcmVha3BvaW50cygpIGNvbnN0CkBAIC0zNTg4LDI4ICszNjMyLDggQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBNYXRoSUNTdGF0cygpCiAgICAgZG91YmxlIG51bVN1YnMgPSAwLjA7CiAgICAgZG91
YmxlIHRvdGFsU3ViU2l6ZSA9IDAuMDsKIAotICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVC
bG9jayogY29kZUJsb2NrKSB7Ci0gICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gY29kZUJsb2Nr
LT5tX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgICAgIGZvciAoSklUQWRkSUMqIGFkZElDIDog
aml0RGF0YS0+bV9hZGRJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1BZGRzKys7Ci0gICAgICAg
ICAgICAgICAgdG90YWxBZGRTaXplICs9IGFkZElDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKEpJVE11bElDKiBtdWxJQyA6IGppdERhdGEtPm1fbXVsSUNz
KSB7Ci0gICAgICAgICAgICAgICAgbnVtTXVscysrOwotICAgICAgICAgICAgICAgIHRvdGFsTXVs
U2l6ZSArPSBtdWxJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Zm9yIChKSVROZWdJQyogbmVnSUMgOiBqaXREYXRhLT5tX25lZ0lDcykgewotICAgICAgICAgICAg
ICAgIG51bU5lZ3MrKzsKLSAgICAgICAgICAgICAgICB0b3RhbE5lZ1NpemUgKz0gbmVnSUMtPmNv
ZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUU3ViSUMqIHN1
YklDIDogaml0RGF0YS0+bV9zdWJJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1TdWJzKys7Ci0g
ICAgICAgICAgICAgICAgdG90YWxTdWJTaXplICs9IHN1YklDLT5jb2RlU2l6ZSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgYXV0byBjb3VudElDcyA9IFsmXSAoQ29kZUJsb2NrKikg
eworICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byByZS1pbXBsZW1lbnQgdGhpcyB1c2luZyBK
SVRDb2RlLgogICAgIH07CiAgICAgaGVhcCgpLT5mb3JFYWNoQ29kZUJsb2NrKGNvdW50SUNzKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw5IEBAIGNsYXNzIEpTTW9kdWxlRW52aXJv
bm1lbnQ7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ7CiBjbGFzcyBNZXRhZGF0YVRhYmxlOwot
Y2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKIGNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogCiBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihDb2RlQmxvY2tSYXJlRGF0YSk7CiAKQEAg
LTE1OCw3ICsxNTgsOSBAQCBwdWJsaWM6CiAgICAgTWV0YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIG51
bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6
CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKHVuc2lnbmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoK
IAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkgY29uc3QgeyByZXR1cm4g
bV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgfQogCkBAIC0xNjcsNyArMTY5LDYgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KICAg
ICB1bnNpZ25lZCBudW1UbXBzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0No
ZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50VG1wczsgfQogCi0gICAgdW5zaWduZWQqIGFk
ZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CiAKICAgICBDb2RlQmxvY2sq
IGFsdGVybmF0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9h
bHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAgLTIzMiwxNiArMjMzLDYgQEAgcHVibGljOgogICAgIGJv
b2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3Rh
bGxWTVRyYXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmly
dHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRp
bmcgYmFjayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlz
IGB0aGlzYCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0Nv
bnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsK
LQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29s
IGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAg
IHJldHVybiByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAt
MjY4LDIzICsyNTksMjEgQEAgcHVibGljOgogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RydWN0IEpJ
VERhdGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICAgICAgQmFnPFN0cnVj
dHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAgICAgICAgQmFnPEpJVEFkZElDPiBtX2FkZElD
czsKLSAgICAgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKLSAgICAgICAgQmFnPEpJVE5lZ0lD
PiBtX25lZ0lDczsKLSAgICAgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKICAgICAgICAgQmFn
PENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgICAgICBTZW50aW5lbExpbmtlZExp
c3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9p
bmNvbWluZ0NhbGxzOwogICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBoaWNDYWxs
Tm9kZSwgUGFja2VkUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29t
aW5nUG9seW1vcnBoaWNDYWxsczsKLSAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxl
PiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJs
ZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENU
b0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXND
YWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1h
cDsKKworICAgICAgICBGaXhlZFZlY3Rvcjx2b2lkKj4gbV9qaXRDb25zdGFudFBvb2w7CisgICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwgbV9qaXRDb25zdGFudFBvb2wpOyB9CiAgICAgfTsKIAor
ICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29k
ZT4pOworCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkKQEAgLTI5
MywyMiArMjgyLDcgQEAgcHVibGljOgogICAgIH0KICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRh
U2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAotICAgIEpJVEFkZElDKiBhZGRKSVRB
ZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLSAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQ
cm9maWxlKik7Ci0gICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSop
OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+
Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2Zp
bGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlw
ZT4KLSAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkg
eyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
YW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVE5l
Z0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJ
VE5lZ0lDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3Is
IEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRTdWJJQyogYWRkTWF0aElD
KEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmls
ZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURGF0YSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RGF0YSk7IH0KIAogICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlLCBDb2RlT3JpZ2luKTsKIApAQCAtMzIyLDE4
ICsyOTYsOCBAQCBwdWJsaWM6CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAg
dG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgogICAgIENhbGxMaW5rSW5mbyog
Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICAKLSAg
ICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29kZU1hcCYmIGppdENvZGVNYXApCi0gICAgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOwotICAgIH0K
LSAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCkKLSAgICB7Ci0gICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX2ppdENvZGVNYXA7Ci0gICAgfQorICAgIGNvbnN0IEpJVENvZGVNYXAmIGpp
dENvZGVNYXAoKTsKIAotICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVf
cHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+
IGZpbmRQQyh2b2lkKiBwYyk7CiAKICAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVn
aXN0ZXJTZXQpOwpAQCAtNDcyLDYgKzQzNiw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1l
Rm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29k
ZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJP
ZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVu
dFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFt
ZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01NjksOCArNTM0LDEwIEBAIHB1Ymxp
YzoKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdp
c3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7
IH0KKyAgICBib29sIGlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soVmlydHVhbFJl
Z2lzdGVyKSBjb25zdDsKICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
biBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
IGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
aW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1
ZmZlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdp
c3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQo
KTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7
IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9m
RnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTU5
NSwyMiArNTYyLDIyIEBAIHB1YmxpYzoKICAgICAvLyBKdW1wIFRhYmxlcwogCiAjaWYgRU5BQkxF
KEpJVCkKLSAgICBTaW1wbGVKdW1wVGFibGUmIHN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCkKKyAgICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJs
ZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KTsKKyAgICB2b2lkKiBiYXNlbGluZUpJVENvbnN0YW50UG9vbCgp
CiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwotICAgICAgICByZXR1
cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1faml0RGF0YSAmJiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpOworICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbC5kYXRhKCk7
CiAgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTd2l0
Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQogCi0jaWYgRU5BQkxF
KEpJVCkKLSAgICBTdHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFi
bGVJbmRleCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7Ci0gICAg
ICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKLSAgICB9CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgU3RyaW5nSnVtcFRhYmxlJiBkZmdT
dHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJs
ZSYgZGZnU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKICNlbmRpZgorCiAgICAgc2l6
ZV90IG51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1
cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVz
KCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQogCkBAIC02MzIsMjEg
KzU5OSwyMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVk
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRo
cmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0
ZUNvdW50ZXItPmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOwogICAgIH0KIAog
ICAgIHZvaWQgZG9udEpJVEFueXRpbWVTb29uKCkKICAgICB7Ci0gICAgICAgIG1fbGxpbnRFeGVj
dXRlQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgpOworICAgICAgICBtX2xsaW50RXhlY3V0ZUNv
dW50ZXItPmRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgfQogCi0gICAgaW50MzJfdCB0aHJlc2hv
bGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOwotICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKTsK
ICAgICB2b2lkIGppdFNvb24oKTsKKyAgICB2b2lkIGppdE5leHRJbnZvY2F0aW9uKCk7CiAKICAg
ICBjb25zdCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICAg
ICAgcmV0dXJuICptX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgfQogCiAgICAgdHlwZWRlZiBI
YXNoTWFwPHN0ZDo6dHVwbGU8U3RydWN0dXJlSUQsIHVuc2lnbmVkPiwgRml4ZWRWZWN0b3I8TExJ
bnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0
Y2hwb2ludE1hcDsKQEAgLTc5Nyw2ICs3NjMsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0Rl
YnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAg
ICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVx
dWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7
IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAg
ICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQpAQCAtODM4
LDYgKzgwNSw3IEBAIHB1YmxpYzoKICAgICBtdXRhYmxlIENvbmN1cnJlbnRKU0xvY2sgbV9sb2Nr
OwogCiAgICAgYm9vbCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQg
YmVjYXVzZSB0aGUgSklUIHdhbnRzIHRvIHN0b3JlIHRvIGl0LgorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7IH0KIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgdW5zaWduZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2Fw
YWJpbGl0eUxldmVsCkBAIC04NDcsOCArODE1LDYgQEAgcHVibGljOgogICAgIGJvb2wgbV9kaWRG
YWlsRlRMQ29tcGlsYXRpb24gOiAxOwogICAgIGJvb2wgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRM
IDogMTsKIAotICAgIGJvb2wgbV9oYXNMaW5rZWRPU1JFeGl0IDogMTsKLSAgICBib29sIG1faXNF
bGlnaWJsZUZvckxMSW50RG93bmdyYWRlIDogMTsKICAgICBib29sIG1fdmlzaXRDaGlsZHJlblNr
aXBwZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAKICAgICAvLyBJbnRlcm5hbCBtZXRob2RzIGZv
ciB1c2UgYnkgdmFsaWRhdGlvbiBjb2RlLiBJdCB3b3VsZCBiZSBwcml2YXRlIGlmIGl0IHdhc24n
dApAQCAtOTA3LDE2ICs4NzMsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywg
bV9tZXRhZGF0YSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JG
dXp6aW5nRWFybHlSZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUg
cmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAg
cmV0dXJuICFtX3VubGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAg
Ym9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bigpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMo
KTsKICNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJVElubGluZUNh
Y2hlcygpOworICAgIHZvaWQgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogI2lm
IEVOQUJMRShERkdfSklUKQogICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwpAQCAt
MTAxMCw3ICs5NzIsOSBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9s
bGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7
CiAjaWYgRU5BQkxFKEpJVCkKK3B1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SklURGF0YT4g
bV9qaXREYXRhOworcHJpdmF0ZToKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8v
IFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRo
ZSBwcm9maWxlZCBjb2RlIGJsb2NrCkBAIC0xMDI5LDcgKzk5Myw3IEBAIHByaXZhdGU6CiAKICAg
ICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOwogICAgIAotICAgIEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAgQmFzZWxpbmVF
eGVjdXRpb25Db3VudGVyKiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgeyBudWxscHRyIH07CiAKICAg
ICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9qaXRFeGVjdXRlQ291bnRlcjsKICAgICB1aW50
MzJfdCBtX29zckV4aXRDb3VudGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw4ICsyNSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJhc2Vs
aW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJVbmxpbmtlZE1l
dGFkYXRhVGFibGVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDAsOSArNDIsNyBA
QCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgaWYgKG1fbWV0
YWRhdGEpIHsKICNkZWZpbmUgVklTSVQoX19vcCkgXAogICAgICAgICBtX21ldGFkYXRhLT5mb3JF
YWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgZnVuYyhtZXRhZGF0YS5tX3Byb2ZpbGUs
IGZhbHNlKTsgfSk7Ci0KICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVkFMVUVfUFJPRklM
RShWSVNJVCkKLQogI3VuZGVmIFZJU0lUCiAKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxP
cEl0ZXJhdG9yT3Blbj4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyAKQEAgLTU3LDcgKzU3LDYgQEAg
dm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVu
YyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAg
Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KQEAgLTk5LDQgKzk4LDM4IEBAIHZv
aWQgQ29kZUJsb2NrOjpmb3JFYWNoTExJbnRDYWxsTGlua0luZm8KICAgICB9CiB9CiAKKyNpZiBF
TkFCTEUoSklUKQorQUxXQVlTX0lOTElORSBjb25zdCBKSVRDb2RlTWFwJiBDb2RlQmxvY2s6Ompp
dENvZGVNYXAoKQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUu
Z2V0KCkpLT5tX2ppdENvZGVNYXA7Cit9CisKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxl
JiBDb2RlQmxvY2s6OmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorewor
ICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRj
aEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisKK0FMV0FZU19JTkxJTkUgU3RyaW5nSnVtcFRh
YmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUlu
ZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkp
LT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisjZW5kaWYKKworI2lm
IEVOQUJMRShERkdfSklUKQorQUxXQVlTX0lOTElORSBTaW1wbGVKdW1wVGFibGUmIENvZGVCbG9j
azo6ZGZnU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRU
eXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpK
SVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpkZmdTdHJp
bmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUo
KSA9PSBKSVRUeXBlOjpERkdKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxERkc6OkpJVENv
ZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcw
LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFw
KENvZGVCbG9jayogY29kZUJsb2NrKTsKICAgICAKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZSogd3JhcEFuZEFjdGl2YXRlKENvZGVCbG9jayogY29kZUJsb2NrKTsKKworICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSwgbV9jb2RlQmxvY2spOyB9CiAgICAgCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhlY3V0aW9uQ291bnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCBi
b29sIEV4ZWN1dGlvbkNvdW50ZXI8Y291bnRpbmdWYXJpYW50Pjo6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2Nr
ID8gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSA6IG51bGxwdHIsIHRocmVzaG9sZCk7CisgICAg
dGhyZXNob2xkID0gY2xpcHBlZFRocmVzaG9sZCh0aHJlc2hvbGQpOwogICAgIAogICAgIG1fY291
bnRlciA9IHN0YXRpY19jYXN0PGludDMyX3Q+KC10aHJlc2hvbGQpOwogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIu
aAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGlvbkNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBmb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7IC8vIElmIHlvdSB1c2UgdGhp
cywgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoKSBtYXkgc3RpbGwgcmV0dXJuIGZhbHNl
LgogICAgIGJvb2wgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoQ29kZUJsb2NrKik7CiAg
ICAgYm9vbCBoYXNDcm9zc2VkVGhyZXNob2xkKCkgY29uc3QgeyByZXR1cm4gbV9jb3VudGVyID49
IDA7IH0KLSAgICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJs
b2NrKik7CisgICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVC
bG9jayogPSBudWxscHRyKTsKICAgICB2b2lkIGRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgZG91
YmxlIGNvdW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291
bnQpICsgbV9jb3VudGVyOyB9CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkBA
IC04NiwxMyArODYsOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci0gICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBUIHRocmVzaG9sZCkKKyAgICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKFQg
dGhyZXNob2xkKQogICAgIHsKLSAgICAgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQ7Ci0gICAgICAg
IGlmIChPcHRpb25zOjpyYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMo
KSAmJiBnbG9iYWxPYmplY3QpCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBnbG9iYWxPYmpl
Y3QtPndlYWtSYW5kb21JbnRlZ2VyKCkgJSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNo
ZWNrcG9pbnRzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1heFRocmVzaG9sZCA9IG1h
eGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKTsKKyAgICAgICAgaW50MzJf
dCBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
KCk7CiAgICAgICAgIGlmICh0aHJlc2hvbGQgPiBtYXhUaHJlc2hvbGQpCiAgICAgICAgICAgICB0
aHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7CiAgICAgICAgIHJldHVybiB0aHJlc2hvbGQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5o
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZE1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgc3RydWN0IEdl
dEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB7CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9k
ZU1ldGFkYXRhVW5zZXQpID09IDEyKTsKIAogc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJh
eUxlbmd0aCB7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFy
cmF5UHJvZmlsZSk7IH0KICAgICBBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlOwogfTsKIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCkgPT0gMTIpOwpA
QCAtODgsNiArODksNyBAQCB1bmlvbiBHZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAgR2V0
QnlJZE1vZGUgbW9kZTsKICAgICAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsg
Ly8gVGhpcyBtdXN0IGJlIHplcm8gd2hlbiB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhLCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0YWRh
dGFEZWZhdWx0IGRlZmF1bHRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNl
dE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9k
ZTsKQEAgLTExNyw2ICsxMTksNyBAQCBzdHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAg
ICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFQcm90b0xvYWQgcHJvdG9Mb2FkTW9kZTsKICAgICB9Owog
ICAgIEdldEJ5SWRNb2RlIG1vZGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0K
ICAgICB1aW50OF90IGhpdENvdW50Rm9yTExJbnRDYWNoaW5nOwogfTsKICNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0
dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgR2V0QnlTdGF0dXMgR2V0
QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoTm9J
bmZvcm1hdGlvbik7CiAgICAgICAgIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjog
ewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1
YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7CiAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5
KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSwgc3R1YkluZm8pOwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIg
PSBzdHViSW5mby0+aWRlbnRpZmllcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRl
ckFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogCiAgICAgLy8gTGV0J3Mgc3RvcmUg
dGhlIHJldXNlZCByZWdpc3RlcnMgdG8gdGhlIHN0YWNrLiBBZnRlciB0aGF0LCB3ZSBjYW4gdXNl
IGFsbG9jYXRlZCBzY3JhdGNoIHJlZ2lzdGVycy4KICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KLSAgICBhbGxvY2F0b3IucHJlc2Vy
dmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6
OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CisgICAgICAgIGFsbG9jYXRvci5wcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKIAogICAgIGlmIChHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKICAgICAgICAgZGF0YUxvZygiYmFzZUdQ
UiA9ICIsIGJhc2VHUFIsICJcbiIpOwpAQCAtMjI1LDEyICsyMjUsOSBAQCB2b2lkIEdldHRlclNl
dHRlckFjY2Vzc0Nhc2U6OmVtaXRET01KSVRHCiAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JD
Q2FsbC5zZXQocmVnKTsKICAgICBmb3IgKEZQUlJlZyByZWcgOiBmcFNjcmF0Y2gpCiAgICAgICAg
IHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnKTsKKyAgICBpZiAoaml0LmNvZGVCbG9j
aygpLT51c2VEYXRhSUMoKSkKKyAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChz
dHViSW5mby5tX3N0dWJJbmZvR1BSKTsKICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuZXhj
bHVkZShSZWdpc3RlclNldDo6cmVnaXN0ZXJzVG9Ob3RTYXZlRm9yQ0NhbGwoKSk7Ci0jaWYgQ1BV
KEFSTTY0KQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOwotICAg
IGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9y
Q0NhbGwuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0jZW5kaWYKIAogICAgIEFjY2Vzc0Nhc2VT
bmlwcGV0UGFyYW1zIHBhcmFtcyhzdGF0ZS5tX3ZtLCBXVEZNb3ZlKHJlZ3MpLCBXVEZNb3ZlKGdw
U2NyYXRjaCksIFdURk1vdmUoZnBTY3JhdGNoKSk7CiAgICAgc25pcHBldC0+Z2VuZXJhdG9yKCkt
PnJ1bihqaXQsIHBhcmFtcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5CeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luQnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsx
MzksNyBAQCBJbkJ5U3RhdHVzIEluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mCiAgICAgICAg
IHJldHVybiBJbkJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6
OkluQnlJZFNlbGY6IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKTsKICAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkK
ICAgICAgICAgICAgIHJldHVybiBJbkJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5j
cHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTEgKzE3NiwxNiBAQCBBTFdB
WVNfSU5MSU5FIHN0YXRpYyBib29sIGxpbmtDb2RlSW5saW5lCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNz
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
IGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIFRoZXNlIGR5bmFtaWMg
c2xvdHMgZ2V0IGZpbGxlZCBpbiBieSBTdHJ1Y3R1cmVTdHViSW5mby4gTm90aGluZyBlbHNlIHRv
IGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnMgaml0
OwogICAgIAogICAgIEdQUlJlZyBiYXNlID0gc3R1YkluZm8uYmFzZUdQUjsKQEAgLTIzMywyMyAr
MjM4LDMxIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaGFzRnJlZVJlZ2lzdGUKICAgICBy
ZXR1cm4gZ2V0U2NyYXRjaFJlZ2lzdGVyKHN0dWJJbmZvKSAhPSBJbnZhbGlkR1BSUmVnOwogfQog
Ci1ib29sIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxp
bmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwogfQog
Ci1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoIXN0dWJJ
bmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
QVNTRVJUKGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2Zmc2V0KSk7
CisgICAgQVNTRVJUKGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0
dWJJbmZvLCBvZmZzZXQpKTsKKworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7Cisg
ICAgICAgIC8vIFRoZXNlIGR5bmFtaWMgc2xvdHMgZ2V0IGZpbGxlZCBpbiBieSBTdHJ1Y3R1cmVT
dHViSW5mby4gTm90aGluZyBlbHNlIHRvIGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CiAKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCkBAIC0yNzksMjIgKzI5MiwyNSBAQCBib29sIElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJ
bmxpbmU7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFj
Y2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKIHsKICAgICBBU1NFUlQoYXJy
YXktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0Nv
bnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKICAgICBpZiAoIWhhc0ZyZWVSZWdpc3RlcihzdHViSW5mbykpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhaGFzQW55QXJyYXlTdG9yYWdlKGFycmF5LT5pbmRl
eGluZ1R5cGUoKSkgJiYgYXJyYXktPmluZGV4aW5nVHlwZSgpICE9IEFycmF5Q2xhc3M7CiB9CiAK
LWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVB
cnJheUxlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBBU1NFUlQoaXNDYWNoZWFibGVBcnJheUxlbmd0
aChzdHViSW5mbywgYXJyYXkpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNo
ZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcnJheSkpOwogCiAgICAgaWYg
KCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTMxOSwxNyArMzM1LDIwIEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVu
Z3RoKFMKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nl
c3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K2Jvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAgIGlmICghc3R1Yklu
Zm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBp
ZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiBoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwog
fQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3Ro
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0g
ICAgQVNTRVJUKGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKSk7CisgICAgQVNTRVJU
X1VOVVNFRChjb2RlQmxvY2ssIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1
YkluZm8pKTsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNjMsMTMgKzM4MiwxOCBAQCBib29sIElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoCiB9CiAKIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU2VsZkluQWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3Rz
IGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5m
by5iYXNlR1BSOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7
CiAKQEAgLTQwNiwxMyArNDMwLDEzIEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNK
dW1wSW5BY2MKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewogICAgICAgICAvLyBJ
ZiBpdCBpcyBub3QgR2V0QnlJZC1saWtlLXRoaW5nLCB3ZSBkbyBub3QgZW1pdCBub3Agc2xlZCAo
ZS5nLiBHZXRCeVZhbCkuCiAgICAgICAgIC8vIFRoZSBjb2RlIGlzIGFscmVhZHkgYW4gaW5kaXJl
Y3QganVtcCwgYW5kIG9ubHkgdGhpbmcgd2Ugc2hvdWxkIGRvIGlzIHJlcGxhY2luZyBtX2NvZGVQ
dHIuCi0gICAgICAgIGlmIChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKKyAgICAg
ICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHN0
dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikgewogICAgICAgICAgICAgLy8gSWYgbV9jb2Rl
UHRyIGlzIHBvaW50aW5nIHRvIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbiwgdGhpcyBt
ZWFucyB0aGF0IElubGluZUFjY2VzcyBjb2RlIGlzIG5vdCBhIHN0dWIgb25lLgogICAgICAgICAg
ICAgLy8gV2UgcmV3cml0ZSB0aGlzIHdpdGggdGhlIHN0dWItYmFzZWQgZGlzcGF0Y2hpbmcgY29k
ZSBvbmNlLCBhbmQgY29udGludWUgdXNpbmcgaXQgdW50aWwgd2UgcmVzZXQgdGhlIGNvZGUuCiAg
ICAgICAgICAgICBpZiAoc3R1YkluZm8ubV9jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0g
c3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpIHsKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5mby5zdGFy
dC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhl
bHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgICAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmc3R1YkluZm8pLCBzdHViSW5mby5t
X3N0dWJJbmZvR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5l
UHRyVGFnKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKICAg
ICAgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBzdHViSW5mby5kb25lTG9jYXRp
b247CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0oTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewpAQCAtNDIxLDcgKzQ0NSw5IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2MKICAgICAgICAgICAgICAgICB9KSwgIklubGluZUFjY2VzczogbGlu
a2luZyBzdHViIGNhbGwiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHN0
dWJJbmZvLm1fY29kZVB0ciA9IHRhcmdldDsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUu
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCw4ICs0NjAsMTQgQEAgdm9pZCBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgIH0pLCAiSW5saW5lQWNjZXNzOiBs
aW5raW5nIGNvbnN0YW50IGp1bXAiKTsKIH0KIAotdm9pZCBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1
YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K3ZvaWQgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogeworICAgIGlmIChjb2RlQmxv
Y2stPnVzZURhdGFJQygpICYmIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSB7CisgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHN0dWJJbmZvLnNsb3dQYXRo
U3RhcnRMb2NhdGlvbjsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5m
by5zdGFydC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChD
Q2FsbEhlbHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgIC8vIFdlIGRv
bid0IG5lZWQgYSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1waW5n
IGludG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4KICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNz
LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTksMTQgKzk5LDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KHNpemUsIHNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhTdHJ1
Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMg
Ym9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBQ
cm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwotICAg
IHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBK
U0FycmF5Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0
dXJlU3R1YkluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0cnVj
dHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZklu
QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIGJvb2wg
Z2VuZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgYm9v
bCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBjYW5HZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBQ
cm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlP
ZmZzZXQpOworICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2Nr
KiwgU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgaXNDYWNo
ZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBz
dGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNjZXNzKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIGJv
b2wgZ2VuZXJhdGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsK
IAogICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5l
QWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1w
SW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRh
ZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0Vf
T1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7
CiAgICAgdWludDhfdCBzZWVuTW9kZXMgeyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZlNlZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0
YWRhdGEsIHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUo
c2Vlbk1vZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRD
YWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJ
bnRDYWxsTGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQogCiBwcml2YXRlOgogICAgIHVpbnRw
dHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0IH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMTcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBi
aXRXaWR0aEZvck1heAogICAgIG1hY3JvKE9wSXRlcmF0b3JPcGVuKSBcCiAgICAgbWFjcm8oT3BJ
dGVyYXRvck5leHQpIFwKIAorI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllfQVJJ
VEhfUFJPRklMRShtYWNybykgXAorICAgIG1hY3JvKE9wQWRkKSBcCisgICAgbWFjcm8oT3BNdWwp
IFwKKyAgICBtYWNybyhPcERpdikgXAorICAgIG1hY3JvKE9wU3ViKSBcCisKKyNkZWZpbmUgRk9S
X0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAorICAgIG1hY3Jv
KE9wSW5jKSBcCisgICAgbWFjcm8oT3BEZWMpIFwKKyAgICBtYWNybyhPcE5lZ2F0ZSkgXAorCiAK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidHlwZS1saW1pdHMiKQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQoKQogewogICAgIHJlc3RvcmVTY3JhdGNoKCk7CiAg
ICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQotICAgICAgICBqaXQtPnJldCgp
OworICAgICAgICBqaXQtPmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLT5t
X3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZEb25lTG9jYXRpb24oKSks
IEpTSW50ZXJuYWxQdHJUYWcpOwogICAgIGVsc2UKICAgICAgICAgc3VjY2Vzcy5hcHBlbmQoaml0
LT5qdW1wKCkpOwogfQpAQCAtMTEwLDYgKzExMCw4IEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGUKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKIAogICAgICAgICBt
X2xpdmVSZWdpc3RlcnNGb3JDYWxsID0gUmVnaXN0ZXJTZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSwgYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJz
KCkpOworICAgICAgICBpZiAoaml0LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAg
ICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7
CiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhjbHVkZShjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOwogICAgIH0KICAgICByZXR1cm4gbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbDsKQEAgLTEy
OCwxMSArMTMwLDEyIEBAIGF1dG8gQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmUK
ICAgICB9OwogfQogCi1hdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2VydmVMaXZlUmVn
aXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucyhjb25zdCBSZWdpc3RlclNldCYg
ZXh0cmEpIC0+IFNwaWxsU3RhdGUKK2F1dG8gQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2
ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCkgLT4gU3BpbGxT
dGF0ZQogewogICAgIFJlZ2lzdGVyU2V0IGxpdmVSZWdpc3RlcnMgPSBhbGxvY2F0b3ItPnVzZWRS
ZWdpc3RlcnMoKTsKKyAgICBpZiAoaml0LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAg
ICAgIGxpdmVSZWdpc3RlcnMuYWRkKHN0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKICAgICBsaXZl
UmVnaXN0ZXJzLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICBsaXZlUmVnaXN0
ZXJzLm1lcmdlKGV4dHJhKTsKIAogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBleHRyYVN0YWNrUGFk
ZGluZyA9IDA7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVy
UHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsKCpqaXQsIGxpdmVSZWdpc3RlcnMsIGV4dHJhU3RhY2tQYWRkaW5nKTsK
QEAgLTU5NiwxNiArNTk5LDExIEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNB
Y2Nlc3MKICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CiAgICAgc3RhdGUuaml0ID0g
JmppdDsKIAotICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7Ci0gICAgICAgIGlmIChz
dGF0ZS5tX2RvZXNKU0dldHRlclNldHRlckNhbGxzKSB7Ci0gICAgICAgICAgICAvLyBXZSBoYXZl
IG5vIGd1YXJhbnRlZSB0aGF0IHN0YWNrLXBvaW50ZXIgaXMgdGhlIGV4cGVjdGVkIG9uZS4gVGhp
cyBpcyBub3QgYSBwcm9ibGVtIGlmIHdlIGRvIG5vdCBoYXZlIEpTIGdldHRlciAvIHNldHRlciBj
YWxscyBzaW5jZSBzdGFjay1wb2ludGVyIGlzCi0gICAgICAgICAgICAvLyBhIGNhbGxlZS1zYXZl
IHJlZ2lzdGVyIGluIHRoZSBDIGNhbGxpbmcgY29udmVuc2lvbi4gSG93ZXZlciwgb3VyIEpTIGV4
ZWN1dGFibGUgY2FsbCBkb2VzIG5vdCBzYXZlIHN0YWNrLXBvaW50ZXIuIFNvIHdlIGFyZSBhZGp1
c3Rpbmcgc3RhY2stcG9pbnRlciBhZnRlcgotICAgICAgICAgICAgLy8gSlMgZ2V0dGVyIC8gc2V0
dGVyIGNhbGxzLiBCdXQgdGhpcyBjb3VsZCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5pdGlhbCBz
dGFjay1wb2ludGVyLCBhbmQgbWFrZXMgUEFDIHRhZ2dpbmcgYnJva2VuLgotICAgICAgICAgICAg
Ly8gVG8gZW5zdXJlIFBBQy10YWdnaW5nIHdvcmssIHdlIGZpcnN0IGFkanVzdCBzdGFjay1wb2lu
dGVyIHRvIHRoZSBhcHByb3ByaWF0ZSBvbmUuCi0gICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OworICAgIGlmICghY2FuQmVTaGFyZWQgJiYgQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRl
ck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBqaXQuc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICBhdXRvIG9rID0gaml0LmJyYW5jaFB0
cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBqaXQuc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAg
ICAgICBvay5saW5rKCZqaXQpOwogICAgIH0KIAogICAgIHN0YXRlLnByZXNlcnZlZFJldXNlZFJl
Z2lzdGVyU3RhdGUgPQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTEsNyArMjUxLDcgQEAgc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7CiAgICAgY29u
c3QgUmVnaXN0ZXJTZXQmIGNhbGN1bGF0ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9u
SGFuZGxpbmcoKTsKIAogICAgIFNwaWxsU3RhdGUgcHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFj
a0ZvckNhbGwoY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhID0geyB9KTsKLSAgICBTcGlsbFN0YXRl
IHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29u
c3QgUmVnaXN0ZXJTZXQmIGV4dHJhID0geyB9KTsKKyAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2
ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoKTsKIAogICAgIHZvaWQg
cmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsV2l0aFRocm93bkV4Y2VwdGlvbihj
b25zdCBTcGlsbFN0YXRlJik7CiAgICAgdm9pZCByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFj
a0ZvckNhbGwoY29uc3QgU3BpbGxTdGF0ZSYsIGNvbnN0IFJlZ2lzdGVyU2V0JiBkb250UmVzdG9y
ZSA9IHsgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0
dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eVN0YXR1cy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCwxMCArMTgwLDEw
IEBAIFB1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKICAg
ICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHVpZCk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0g
ICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkodWlkKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShwcm9maWxlZEJsb2NrLT52bSgpKTsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsK
ICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQ
dXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3R1YkluZm8tPm1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVy
biBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3RydWN0dXJlLCBv
ZmZzZXQpOwogICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSwgKnN0dWJJbmZvKTsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKIAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJQb2x5
bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKIApAQCAtNjUsOSArNjYsOSBA
QCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYoCiAgICAgQVNTRVJUKGhh
c0NvbnN0YW50SWRlbnRpZmllcik7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBl
OjpHZXRCeUlkU2VsZik7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndy
aXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0Owor
ICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojppbml0QXJyYXlMZW5ndGgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyKQpA
QCAtODcsOSArODgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJlcGxh
CiAgICAgQVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENh
Y2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2UpOwogICAgIG1faWRlbnRp
ZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsK
ICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1
LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsK
IH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEluQnlJZFNlbGYoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
KiBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTk3LDkgKzk4LDkgQEAgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6aW5pdEluQnlJZFNlbGYoYwogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBD
YWNoZVR5cGU6OlVuc2V0KTsKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6Oklu
QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBi
eUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVy
ZWYoKQpAQCAtMjM2LDcgKzIzNyw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJl
U3R1YkluZm8KICAgICAgICAgLy8gd2UncmUgYnVmZmVyZWQgaXMgYmVjYXVzZSB3ZSByZWx5IG9u
IGl0IHRvIHJlc2V0IGR1cmluZyBHQyBpZiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUKICAg
ICAgICAgLy8gaXMgY29sbGVjdGVkLgogICAgICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwot
ICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdl
IGdlbmVyYXRlZCBzb21lIGNvZGUgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGF0dGVtcHQgdG8gcmVw
YXRjaCBpbiB0aGUgZnV0dXJlIHVudGlsIHdlCiAgICAgICAgIC8vIGdhdGhlciBlbm91Z2ggY2Fz
ZXMuCkBAIC0yNTEsNyArMjUyLDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29u
c3QgQ29uYwogewogICAgIGNsZWFyQnVmZmVyZWRTdHJ1Y3R1cmVzKCk7CiAgICAgbV9pZGVudGlm
aWVyID0gbnVsbHB0cjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsK
KyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOwogCiAgICAgaWYgKG1fY2FjaGVU
eXBlID09IENhY2hlVHlwZTo6VW5zZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTI4NSw2ICsyODYs
NyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgICAgIHJl
c2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OlB1dFByaXZhdGVOYW1lOgogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1
dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6Oklu
QnlJZDoKQEAgLTM2MCw4ICszNjIsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdl
YWtSZWZlcmVuCiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKLSAgICBpZiAobV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQotICAgICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNN
YXJrZWQobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICBpZiAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSkKKyAgICAgICAg
aXNWYWxpZCAmPSB2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZSk7CiAgICAgaWYgKG1fY2FjaGVU
eXBlID09IENhY2hlVHlwZTo6U3R1YikKICAgICAgICAgaXNWYWxpZCAmPSB1LnN0dWItPnZpc2l0
V2Vhayh2bSk7CiAKQEAgLTM3NSw4ICszNzcsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2
aXNpdFdlYWtSZWZlcmVuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKLSAg
ICBpZiAobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQotICAgICAgICBtX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIGlmIChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodmlzaXRvci52bSgpKSkKKyAg
ICAgICAgc3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIAogICAgIGlmIChtX2NhY2hl
VHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNp
dGlvbnModmlzaXRvcik7CkBAIC00MzAsNiArNDMyLDIwOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9
CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtl
ZFN0dWJJbmZvKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgYWNjZXNzVHlwZSA9IHVubGlu
a2VkU3R1YkluZm8uYWNjZXNzVHlwZTsKKyAgICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8uc3Rh
cnQ7CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5kb25lTG9jYXRpb247Cisg
ICAgc2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5zbG93UGF0aFN0YXJ0
TG9jYXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKTsKKyAgICBjb2RlT3Jp
Z2luID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIG1f
Y29kZVB0ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKworICAgIHVzZWRSZWdpc3RlcnMgPSBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgaWYgKGFjY2Vzc1R5
cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZvciBpdGVyYXRvcl9uZXh0LCB3ZSBjYW4n
dCBjbG9iYmVyIHRoZSAiZG9udENsb2JiZXJSZWdpc3RlciIgcmVnaXN0ZXIgZWl0aGVyLgorICAg
ICAgICB1c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9i
YmVyUmVnaXN0ZXIpOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNh
c2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0
QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGlt
aXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1l
OiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJh
bmQ6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1l
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoK
KyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5l
Y21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Cisg
ICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAg
ICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZp
bmU6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5l
UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8u
cHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAg
IGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8u
ZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gdW5saW5rZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRLaW5k
LmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXpl
IDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxl
dGVCeUlEOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBi
YXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnBy
b3BlcnR5R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURl
bEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
RGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBm
YWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFs
dWU7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgICAgIHJlZ3MucHJvdG90eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjpwcm90bzsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRp
ZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5C
eUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdz
LnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5
SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpU
cnlHZXRCeUlkOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRy
dWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhU
aGlzUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9H
UFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJl
ZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgICAg
ICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgICAgICBpZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCkKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvZmlsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpT
ZXRQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVlR1BS
ID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRl
QnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICB9Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTSh1bmxpbmtlZFN0dWJJbmZvKTsKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OmNoZWNrQ29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSklUU3R1YlJv
dXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wdGlvbnMu
aCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKQEAgLTU2LDYgKzU3
LDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRCeVZhbCwKICAg
ICBQdXRCeUlkLAogICAgIFB1dEJ5VmFsLAorICAgIFB1dFByaXZhdGVOYW1lLAogICAgIEluQnlJ
ZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtNzgsNiArODAsOCBAQCBl
bnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CiAgICAgU3RyaW5nTGVuZ3RoCiB9OwogCitz
dHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKKwogY2xhc3MgU3RydWN0dXJlU3R1Yklu
Zm8gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZvKTsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTk4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKKyAgICB2b2lkIGluaXRpYWxp
emVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvJik7CisKICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8v
IENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYg
aXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLApAQCAtMzI1LDEzICszMzEsMTkgQEAgcHJp
dmF0ZToKIAogcHVibGljOgogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKKyAgICBQcm9wZXJ0
eU9mZnNldCBieUlkU2VsZk9mZnNldDsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQnlJ
ZFNlbGZPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8s
IGJ5SWRTZWxmT2Zmc2V0KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0
dWJJbmZvLCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOyB9CiAgICAgdW5pb24gewotICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgICAg
ICB9IGJ5SWRTZWxmOwogICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsKICAgICB9IHU7
Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
OworICAgIFN0cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShWTSYgdm0pCisgICAg
eworICAgICAgICBpZiAoIW1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gdm0uZ2V0U3RydWN0dXJlKG1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgfQorICAgIFN0cnVjdHVyZUlEIG1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSB7IDAgfTsKIHByaXZhdGU6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
ciBtX2lkZW50aWZpZXI7CiAgICAgLy8gUmVwcmVzZW50cyB0aG9zZSBzdHJ1Y3R1cmVzIHRoYXQg
YWxyZWFkeSBoYXZlIGJ1ZmZlcmVkIEFjY2Vzc0Nhc2VzIGluIHRoZSBQb2x5bW9ycGhpY0FjY2Vz
cy4KQEAgLTM1Miw2ICszNjQsNyBAQCBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBtX2NvZGVQdHI7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQ29kZVB0cigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHVi
SW5mbywgbV9jb2RlUHRyKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEb25lTG9j
YXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIGRvbmVM
b2NhdGlvbik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2xvd1BhdGhTdGFydExv
Y2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBzbG93
UGF0aFN0YXJ0TG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1f
c2xvd09wZXJhdGlvbik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ291bnRkb3du
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBjb3VudGRvd24p
OyB9CkBAIC00NDcsNiArNDYwLDE3IEBAIGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dl
dEJ5SWRGdW4KICAgICB9CiB9CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsK
KyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFBy
aXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtp
bmQ6Om5vbmUoKSB9OworICAgIEVDTUFNb2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgp
IH07CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0
YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNhY2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9m
IHBhdGNoYWJsZSBqdW1wIGZvciAnaW5zdGFuY2VvZicgY2FjaGVzLgorICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xvd1BhdGhTdGFydExvY2F0aW9uOworfTsKKwog
I2Vsc2UKIAogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBwcmludFN1cGVyU2FtcGxlclN0YXRlKCkK
ICAgICBkb3VibGUgcGVyY2VudGFnZSA9IDEwMC4wICogaW4gLyAoaW4gKyBvdXQpOwogICAgIGlm
IChwZXJjZW50YWdlICE9IHBlcmNlbnRhZ2UpCiAgICAgICAgIHBlcmNlbnRhZ2UgPSAwLjA7Ci0g
ICAgZGF0YUxvZygiUGVyY2VudCB0aW1lIGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBl
cmNlbnRhZ2UsICJcbiIpOworICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIg
c2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiJVxuIik7CiB9CiAKIHZvaWQgZW5hYmxlU3Vw
ZXJTYW1wbGVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKIAor
I2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNsYXNz
SW5mby5oIgpAQCAtNzgsNiArNzksOCBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2Rl
QmxvY2soVk0mCiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkobG9ja2VyKTsKICAg
ICAgICAgbV9yYXJlRGF0YS0+bV9wcml2YXRlQnJhbmRSZXF1aXJlbWVudCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcml2YXRlQnJhbmRSZXF1aXJlbWVudDo6TmVlZGVkKTsKICAgICB9CisKKyAg
ICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChP
cHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CkBAIC0zMTYsNiArMzE5LDQ4IEBAIGludCBVbmxpbmtlZENvZGVCbG9j
azo6b3V0T2ZMaW5lSnVtcE9mZnMKICAgICByZXR1cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5n
ZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKK2Jvb2wgVW5saW5r
ZWRDb2RlQmxvY2s6Omhhc0lkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAg
ICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpID4gMTAwKSB7CisgICAgICAgIGlmIChudW1iZXJP
ZklkZW50aWZpZXJzKCkgIT0gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5zaXplKCkpIHsKKyAgICAg
ICAgICAgIExvY2tlciBsb2NrZXIobV9jYWNoZWRJZGVudGlmaWVyVWlkc0xvY2spOworICAgICAg
ICAgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IGNhY2hlZElkZW50aWZpZXJVaWRzOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciA9
IHRoaXMtPmlkZW50aWZpZXIoaSk7CisgICAgICAgICAgICAgICAgY2FjaGVkSWRlbnRpZmllclVp
ZHMuYWRkKGlkZW50aWZpZXIuaW1wbCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgIG1fY2FjaGVkSWRlbnRpZmllclVp
ZHMgPSBXVEZNb3ZlKGNhY2hlZElkZW50aWZpZXJVaWRzKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBtX2NhY2hlZElkZW50aWZpZXJVaWRzLmNvbnRhaW5zKHVpZCk7CisgICAgfQorCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7
CisgICAgICAgIGlmIChpZGVudGlmaWVyKGkpLmltcGwoKSA9PSB1aWQpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK2ludDMy
X3QgVW5saW5rZWRDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkK
K3sKKyAgICBzd2l0Y2ggKGRpZE9wdGltaXplKCkpIHsKKyAgICBjYXNlIFRyaVN0YXRlOjpJbmRl
dGVybWluYXRlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkOworICAgIGNhc2UgVHJpU3RhdGU6
OkZhbHNlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkICogNDsKKyAgICBjYXNlIFRyaVN0YXRl
OjpUcnVlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8gMjsKKyAgICB9CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRocmVzaG9sZDsKK30KKworCiB2b2lkIFVubGlu
a2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCghbV9tZXRhZGF0YS0+aXNGaW5hbGl6ZWQoKSk7CkBAIC0zMzcsMTUgKzM4MiwyNSBAQCB2
b2lkIFVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByCiAgICAgaWYgKG1fbWV0YWRh
dGEtPmhhc01ldGFkYXRhKCkpIHsKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheVByb2Zp
bGVzID0gMDsKIAotI2RlZmluZSBDT1VOVChfX29wKSBcCi0gICAgICAgIG51bWJlck9mQXJyYXlQ
cm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CisjZGVmaW5lIENPVU5U
KF9fb3ApIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9f
b3A+KCk7CiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ09VTlQp
CiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENPVU5U
KQogI3VuZGVmIENPVU5UCiAgICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFk
YXRhLT5udW1FbnRyaWVzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgICAgICBudW1iZXJPZkFycmF5
UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEdldEJ5SWQ+KCk7Ci0KICAgICAg
ICAgbV9hcnJheVByb2ZpbGVzID0gRml4ZWRWZWN0b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+KG51
bWJlck9mQXJyYXlQcm9maWxlcyk7CisKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCaW5hcnlB
cml0aFByb2ZpbGVzID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZCaW5hcnlBcml0
aFByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgRk9S
X0VBQ0hfT1BDT0RFX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoQ09VTlQpCisjdW5kZWYgQ09V
TlQKKyAgICAgICAgbV9iaW5hcnlBcml0aFByb2ZpbGVzID0gRml4ZWRWZWN0b3I8QmluYXJ5QXJp
dGhQcm9maWxlPihudW1iZXJPZkJpbmFyeUFyaXRoUHJvZmlsZXMpOworCisgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkg
bnVtYmVyT2ZVbmFyeUFyaXRoUHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29w
PigpOworICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKENP
VU5UKQorI3VuZGVmIENPVU5UCisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzID0gRml4ZWRW
ZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+KG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
MTAgKzI1LDEyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgi
CiAjaW5jbHVkZSAiQXJyYXlQcm9maWxlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9u
cy5oIgogI2luY2x1ZGUgIkNvZGVUeXBlLmgiCiAjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIK
KyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdl
SW5mby5oIgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5o
IgpAQCAtNjQsNiArNjYsNyBAQCBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKIGNsYXNzIFVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsK
IGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworY2xhc3MgQmFzZWxpbmVKSVRDb2Rl
Owogc3RydWN0IEV4ZWN1dGFibGVJbmZvOwogZW51bSBjbGFzcyBMaW5rVGltZUNvbnN0YW50IDog
aW50MzJfdDsKIApAQCAtMTc1LDYgKzE3OCw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZpeGVk
VmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1
cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3du
PiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBy
ZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5n
ZXQoKTsgfQogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4m
IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKQEAgLTIwNyw2ICsyMTEsMTUgQEAgcHVibGlj
OgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1vZGUpOyB9CiAKICAgICBjb25z
dCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3Q7CisgICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uQXQoQnl0ZWNvZGVJbmRleCBpbmRleCkgY29uc3QgeyByZXR1
cm4gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5kZXgpLnB0cigpOyB9CisgICAgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAg
Y29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5hdCgwKS5wdHIo
KTsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zRW5kID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbnN0cnVj
dGlvbnNCZWdpbikgKyBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChpbnN0cnVjdGlvbiA+PSBpbnN0cnVjdGlvbnNCZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGlu
c3RydWN0aW9uc0VuZCk7CisgICAgICAgIHJldHVybiBpbnN0cnVjdGlvbiAtIGluc3RydWN0aW9u
c0JlZ2luOworICAgIH0KKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbnNTaXplKCkgY29uc3QgeyBy
ZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1DYWxsZWVM
b2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogICAgIHVuc2lnbmVk
IG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KQEAgLTMzNCwxMCArMzQ3LDIx
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWV0YWRhdGEtPnNpemVJbkJ5dGVzKCk7CiAg
ICAgfQogCisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bigpCisgICAgeworICAgICAgICAvLyBTb21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdh
eXMgY29tcGxldGUgdGhlIGxvb3BzIHRoZXkgcnVuLgorICAgICAgICByZXR1cm4gIWlzQnVpbHRp
bkZ1bmN0aW9uKCk7CisgICAgfQogICAgIHZvaWQgYWxsb2NhdGVTaGFyZWRQcm9maWxlcygpOwog
ICAgIFVubGlua2VkVmFsdWVQcm9maWxlJiB1bmxpbmtlZFZhbHVlUHJvZmlsZSh1bnNpZ25lZCBp
bmRleCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVzW2luZGV4XTsgfQogICAgIFVubGlua2VkQXJy
YXlQcm9maWxlJiB1bmxpbmtlZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4g
bV9hcnJheVByb2ZpbGVzW2luZGV4XTsgfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29s
IGhhc0lkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyNlbmRpZgorCisgICAgaW50MzJf
dCB0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOworCiBwcm90ZWN0ZWQ6CiAgICAg
VW5saW5rZWRDb2RlQmxvY2soVk0mLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0
YWJsZUluZm8mLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPik7CiAKQEAgLTM5Nyw2ICs0
MjEsOSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGV4aWNhbFNjb3BlRmVhdHVyZXMgOiA0
OwogcHVibGljOgogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOworI2lmIEVOQUJMRShKSVQp
CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKKyNl
bmRpZgogcHJpdmF0ZToKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlcyB7IDAgfTsKICAgICBT
b3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC00MTMsNyArNDQwLDYgQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3M7
CiAKLQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJv
ZmlsZTsKICNlbmRpZgpAQCAtNDU4LDYgKzQ4NCwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAg
fQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZz
ZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNl
dCk7CisgICAgfQorCisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUo
dW5zaWduZWQgaSkgeyByZXR1cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5h
cnlBcml0aFByb2ZpbGUmIHVuYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1f
dW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIm
IGxsaW50RXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7IH0K
IAogcHJpdmF0ZToKICAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PjsKQEAgLTQ2NSw4ICs1MDEsMTYgQEAgcHJpdmF0
ZToKICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZlY3RvcjxF
eHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5lRXhlY3V0
aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5r
ZWRWYWx1ZVByb2ZpbGU+IG1fdmFsdWVQcm9maWxlczsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtl
ZEFycmF5UHJvZmlsZT4gbV9hcnJheVByb2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPEJpbmFyeUFy
aXRoUHJvZmlsZT4gbV9iaW5hcnlBcml0aFByb2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPFVuYXJ5
QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKKworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgTG9jayBtX2NhY2hlZElkZW50aWZpZXJVaWRzTG9jazsKKyAgICBIYXNoU2V0PFVuaXF1
ZWRTdHJpbmdJbXBsKj4gbV9jYWNoZWRJZGVudGlmaWVyVWlkczsKKyNlbmRpZgogCiBwcm90ZWN0
ZWQ6CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1l
dGFkYXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTUgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUpOwogICAg
IH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNl
dEluTWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0g
bV9pczMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFi
bGUxNigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAgICBiYXNlVHlwZU9mZnNldCA9IHJvdW5k
VXBUb011bHRpcGxlT2YoYWxpZ25vZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSwgYmFzZVR5
cGVPZmZzZXQpOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YodHlwZW5h
bWUgT3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KICAgICB1bnNpZ25lZCBudW1FbnRyaWVzKCk7
CiAKQEAgLTEwNyw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc19vZmZzZXQx
NlRhYmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAg
ICAgdXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSwxMyArNDUsMTEgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogCiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNB
cmd1bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxC
dWNrZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFz
ayA9IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0
b3RhbE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxC
dWNrZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQogICAgIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCi0gICAgICAg
ICAgICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAg
Y2xlYXJCdWNrZXRzKCk7CiAgICAgfQogICAgIAogICAgIEVuY29kZWRKU1ZhbHVlKiBzcGVjRmFp
bEJ1Y2tldCh1bnNpZ25lZCBpKQpAQCAtNTksNiArNTcsMTIgQEAgc3RydWN0IFZhbHVlUHJvZmls
ZUJhc2UgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZCdWNrZXRzICsgaSA8IHRvdGFsTnVtYmVy
T2ZCdWNrZXRzKTsKICAgICAgICAgcmV0dXJuIG1fYnVja2V0cyArIG51bWJlck9mQnVja2V0cyAr
IGk7CiAgICAgfQorCisgICAgdm9pZCBjbGVhckJ1Y2tldHMoKQorICAgIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCisgICAgICAg
ICAgICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICB9CiAg
ICAgCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8odW5zaWduZWQgYnVja2V0KSBjb25z
dAogICAgIHsKQEAgLTEyMyw4ICsxMjcsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQg
cmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAg
IC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyAr
K2kpIHsKQEAgLTEzOSw3ICsxNDEsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAg
ICAgIAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVu
Y29kZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVj
dWxhdGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTYxLDYgKzE2Myw3IEBA
IHN0cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVl
UHJvZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsK
ICAgICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8
MD4oKSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9Owog
CiBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJv
ZmlsZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShERkdf
SklUKQogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmgiCkBAIC0zNCw3ICszNSw5IEBACiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2Vt
ZW50LmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJh
bWVTZXQuaCIKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJKU0Nhc3QuaCIKKyNp
bmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGlsYXRp
b24uaCIKICNpbmNsdWRlICJSZWNvcmRlZFN0YXR1c2VzLmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5o
PgpAQCAtNzAsNyArNzMsNyBAQCBzdHJ1Y3QgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24gewogICAg
IFdyaXRlQmFycmllcjxKU0NlbGw+IG1fdG87CiB9OwogICAgICAgICAKLWNsYXNzIENvbW1vbkRh
dGEgeworY2xhc3MgQ29tbW9uRGF0YSA6IHB1YmxpYyBNYXRoSUNIb2xkZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENvbW1vbkRhdGEpOwogcHVibGljOgogICAgIENvbW1vbkRhdGEoKQpA
QCAtMTE2LDYgKzExOSw3IEBAIHB1YmxpYzoKICAgICBGaXhlZFZlY3RvcjxDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQ+IG1fd2F0Y2hwb2ludHM7CiAgICAgRml4ZWRWZWN0b3I8QWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CiAg
ICAgRml4ZWRWZWN0b3I8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBt
X2FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgIFJlY29y
ZGVkU3RhdHVzZXMgcmVjb3JkZWRTdGF0dXNlczsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50
PiBtX2p1bXBSZXBsYWNlbWVudHM7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29kZS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAK
IAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29k
ZS5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
VHJhY2tlZFJlZmVyZW5jZXM7CiAKK3N0cnVjdCBTaW1wbGVKdW1wVGFibGU7CitzdHJ1Y3QgU3Ry
aW5nSnVtcFRhYmxlOworCiBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSklUQ29tcGlsZXI7CkBA
IC0xMDEsNiArMTA0LDggQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4g
ZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSBmaW5hbDsKIAogICAgIHVzaW5nIERpcmVjdEpJ
VENvZGU6OmluaXRpYWxpemVDb2RlUmVmRm9yREZHOworCisgICAgUENUb0NvZGVPcmlnaW5NYXAq
IHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gY29tbW9uLm1fcGNUb0NvZGVP
cmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENv
bXBpbGVyOyAvLyBBbGxvdyBKSVRDb21waWxlciB0byBjYWxsIHNldENvZGVSZWYoKS4KQEAgLTEx
MCw2ICsxMTUsOCBAQCBwdWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+
IG1fb3NyRW50cnk7CiAgICAgRml4ZWRWZWN0b3I8REZHOjpPU1JFeGl0PiBtX29zckV4aXQ7CiAg
ICAgRml4ZWRWZWN0b3I8REZHOjpTcGVjdWxhdGlvblJlY292ZXJ5PiBtX3NwZWN1bGF0aW9uUmVj
b3Zlcnk7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJs
ZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXM7CiAgICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07
CiAgICAgREZHOjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4NSwxMyArMTg1LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICAKICAgICBtX2dyYXBoLnJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7CiAK
LSAgICBpZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSB8fCAh
bV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmICghbV9n
cmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMg
PSBXVEZNb3ZlKG1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKLSAgICAgICAgaWYg
KCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2Nv
ZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1v
dmUobV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwotICAgIH0KKyAgICBBU1NFUlQobV9qaXRD
b2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9q
aXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKKyAgICBpZiAoIW1fZ3JhcGgu
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgCisgICAgICAgIG1faml0Q29kZS0+
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcyk7CisgICAgaWYgKCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5
KCkpCisgICAgICAgIG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dy
YXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7CiAKICAgICBmb3IgKEJhZzxTd2l0Y2hEYXRhPjo6aXRl
cmF0b3IgaXRlciA9IG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVy
KSB7CiAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqKml0ZXI7CkBAIC0xOTksMTIgKzE5OCwx
MiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIGNh
c2UgU3dpdGNoQ2hhcjoKICAgICAgICAgY2FzZSBTd2l0Y2hJbW06IHsKICAgICAgICAgICAgIGlm
ICghZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHkoKSk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2Rh
dGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGRh
dGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5k
ZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1faml0Q29k
ZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF07CiAgICAgICAgICAg
ICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0
Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0pOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUo
KSA9PSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCkpOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gbGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKTsgai0tOykK
QEAgLTIxOSwxMiArMjE4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYg
bGlua0IKIAogICAgICAgICBjYXNlIFN3aXRjaFN0cmluZzogewogICAgICAgICAgICAgaWYgKCFk
YXRhLmRpZFVzZUp1bXBUYWJsZSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCkuaXNFbXB0eSgp
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxl
KGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0
Y2hUYWJsZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8gY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2gu
YmxvY2stPmluZGV4XSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJsZS5t
X2N0aU9mZnNldHMuc2l6ZSgpID09IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS5zaXplKCkg
KyAxKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBsaW5rZWRUYWJsZS5tX2N0aU9m
ZnNldHMpCkBAIC0zMzMsNyArMzMyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVm
ZmVyJiBsaW5rQgogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5k
aWRCdWlsZE1hcHBpbmcoKSkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2lu
TWFwKG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIpLCBsaW5rQnVmZmVyKSk7CisgICAgICAgIG1faml0Q29kZS0+Y29tbW9uLm1f
cGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3Zl
KG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcik7CiB9CiAKIHN0YXRpYyB2
b2lkIGVtaXRTdGFja092ZXJmbG93Q2hlY2soSklUQ29tcGlsZXImIGppdCwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0JiBzdGFja092ZXJmbG93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw2
IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSoKICAgICBBU1NFUlQo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNT
RVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBBU1NF
UlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRD
b2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCiAgICAgaWYgKCFPcHRpb25zOjp1
c2VPU1JFbnRyeVRvREZHKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3Miw5ICs3NzIsNiBAQCB2b2lkIE9T
UkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgCiAgICAgLy8gVGhlIHRhZyByZWdpc3Rl
cnMgYXJlIG5lZWRlZCB0byBtYXRlcmlhbGl6ZSByZWNvdmVyaWVzIGJlbG93LgogICAgIGppdC5l
bWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCi0gICAgaWYgKGV4aXQuaXNFeGNl
cHRpb25IYW5kbGVyKCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKLQogICAgIGlmIChpbmxpbmVTdGFj
a0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCkgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogdG1w
U2NyYXRjaCA9IHNjcmF0Y2ggKyBvcGVyYW5kcy50bXBJbmRleCgwKTsKICAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbk1hdGVyaWFsaXplT1NSRXhpdFNpZGVTdGF0
ZSk+KCZ2bSwgJmV4aXQsIHRtcFNjcmF0Y2gpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKIAorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJERkdK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpJVC5oIgpA
QCAtMTE5LDEwICsxMjAsMTAgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKFZNJiB2bSwgQ0NhbGxI
ZWxwZQogICAgIGludDMyX3QgY2xpcHBlZFZhbHVlOwogICAgIHN3aXRjaCAoaml0LmNvZGVCbG9j
aygpLT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAgY2xp
cHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGpp
dC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xp
cHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKHRh
cmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6Ci0g
ICAgICAgIGNsaXBwZWRWYWx1ZSA9IFVwcGVyVGllckV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRU
aHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKSwgdGFyZ2V0VmFsdWUpOwor
ICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVk
VGhyZXNob2xkKHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE0MiwxMSArMTQzLDggQEAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVAogewogICAgIGNhbGxlcklz
TExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXItPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogCi0g
ICAgaWYgKGNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgewotICAgICAgICBpZiAoIWNh
bGxlcklzTExJbnQpCi0gICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bV9o
YXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKKyAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpKQogICAgICAgICByZXR1cm4gTExJbnQ6OmNoZWNrcG9pbnRPU1JFeGl0RnJvbUlubGlu
ZWRDYWxsVHJhbXBvbGluZVRodW5rKCkuY29kZSgpOwotICAgIH0KIAogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0OwogCkBAIC0xOTgsOCArMTk2LDYg
QEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVAogI3VuZGVmIExMSU5U
X1JFVFVSTl9MT0NBVElPTgogCiAgICAgfSBlbHNlIHsKLSAgICAgICAgYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXItPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7Ci0KICAgICAgICAgc3dpdGNo
ICh0cnVlQ2FsbGVyQ2FsbEtpbmQpIHsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNh
bGw6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CkBAIC0zMTMsNiAr
MzA5LDEwIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAg
ICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxp
bmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0
YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNv
ZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAgICAg
ICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVC
bG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNsb3Qo
aW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJH
UFIpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUo
KSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJ
VDo6c19tZXRhZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVKSVRD
b25zdGFudFBvb2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVD
b2RlQmxvY2ssIEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw3ICs0MDQsOCBAQCB2b2lk
IGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6
UmVnaXN0ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRh
Z2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgY29kZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKKyAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4
aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGlu
ZUpJVENvbnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CiAKICAgICAgICAgQnl0
ZWNvZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlv
bjsKQEAgLTQyMCwxMiArNDIxLDE2IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2
bSwgQ0NhbGwKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4
aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKLSAgICBqaXQuYWRkUHRy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KGNvZGVCbG9ja0ZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBp
ZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgeworICAgICAgICBBU1NFUlQoIVJlZ2lzdGVy
U2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhMTEludDo6UmVnaXN0ZXJzOjpw
Y0dQUikpOworICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSwgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNo
R1BSKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSk7CisKICAgICAgICAgLy8gU2luY2Ugd2UncmUg
anVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCiAg
ICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgdm0uYWRkcmVz
c09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSk7CiAgICAgfQotICAgIAorCisgICAgaml0LmFkZFB0cihB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihj
b2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKICAgICBq
aXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUklu
Zm86OnJlZ1QyKTsKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0clRh
Zyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJD
YWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIK
ICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNp
bmNsdWRlICJERkdKSVRDb2RlLmgiCkBAIC0yODY5LDcgKzI4NzAsNyBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uRmluZFN3CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNv
bnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzRG91YmxlKCkpOwogICAgIGRvdWJs
ZSBhc0RvdWJsZSA9IHZhbHVlLmFzRG91YmxlKCk7CkBAIC0yODkwLDcgKzI4OTEsNyBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIHJldHVybiBsaW5rZWRUYWJsZS5j
dGlGb3JWYWx1ZSgqdW5saW5rZWRUYWJsZSwgc3RySW1wbCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hh
cio+KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzMwLDYgKzczMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6Omlu
UGFpcihjYWxsZWVUYWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1ZmZs
ZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxl
RGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVE
YXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwog
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytp
KSB7CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCBpICsgMSk7CkBAIC04ODksNyArODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBp
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAg
ICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAg
ICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI4LDYgKzgy
OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwg
RGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFs
bG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51
bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9q
aXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAg
ICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
aSArIDEpOwpAQCAtOTc5LDcgKzk4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsK
ICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICszOTg1
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBKSVRQ
dXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBl
OjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNl
ZFJlZ2lzdGVycywKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwg
Y29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2VkUmVn
aXN0ZXJzLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpTVmFs
dWVSZWdzOjpwYXlsb2FkT25seShwcm9wZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQUlJl
Zywgc3R1YkluZm9HUFIpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0g
dHJ1ZTsKIApAQCAtNDkwNSw3ICs0OTA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlQWRkKE5vZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5n
cmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVj
b2RlSW5kZXgoKTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2Vs
aW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
SW5kZXgpOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRB
ZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmppdENvZGUo
KS0+Y29tbW9uLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5n
RnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRj
aGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGQ7CiAgICAgCkBAIC00OTg5LDcgKzQ5ODks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVTdWIoTm9kCiAgICAgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRo
UHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUU3ViSUMqIHN1
YklDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAg
SklUU3ViSUMqIHN1YklDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUU3ViSUMoYXJp
dGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVl
U3ViT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25W
YWx1ZVN1YjsKIApAQCAtNTU3MSw3ICs1NTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlTmVnYXRlKAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2pp
dC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5
dGVjb2RlSW5kZXgoKTsKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFz
ZWxpbmVDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29k
ZUluZGV4KTsKLSAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklU
TmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5qaXRDb2Rl
KCktPmNvbW1vbi5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGlu
Z0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlOwogICAgIGNvbXBpbGVNYXRo
SUMobm9kZSwgbmVnSUMsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
KTsKQEAgLTU4MTUsNyArNTgxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1
ZU11bChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgo
KS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUlu
ZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNv
ZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4
KTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTXVsSUMo
YXJpdGhQcm9maWxlKTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNv
bW1vbi5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0
aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwogCkBAIC0xNDc3MCw3ICsxNDc3MCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3BlUmVn
ID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChz
aGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCksIGNh
bGxTaXRlSW5kZXgpOworICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRv
d1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChub2Rl
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBjb21waWxlKFN0YXRl
JiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogCiAgICAgaWYgKHZtLnNob3VsZEJ1aWxkZXJQQ1RvQ29k
ZU9yaWdpbk1hcHBpbmcoKSkgewogICAgICAgICBCMzo6UENUb09yaWdpbk1hcCBvcmlnaW5NYXAg
PSBzdGF0ZS5wcm9jLT5yZWxlYXNlUENUb09yaWdpbk1hcCgpOwotICAgICAgICBjb2RlQmxvY2st
PnNldFBDVG9Db2RlT3JpZ2luTWFwKG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFs
aXplci0+YjNDb2RlTGlua0J1ZmZlcikpOworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24u
bV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFs
aXplci0+YjNDb2RlTGlua0J1ZmZlcik7CiAgICAgfQogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNFbnRyeVB0clRhZz4gbGFiZWwgPSBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIt
PmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oc3RhdGUucHJvYy0+Y29kZSgpLmVudHJ5cG9pbnRM
YWJlbCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDggQEAgcHVibGljOgogICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uKCkgb3ZlcnJpZGU7CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjb21tb25E
YXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVENvZGUsIGNvbW1vbik7IH0K
ICAgICB2b2lkIHNocmlua1RvRml0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIG92ZXJyaWRl
OworCisgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUg
eyByZXR1cm4gY29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKICAgICBE
Rkc6OkNvbW1vbkRhdGEgY29tbW9uOwogICAgIFZlY3RvcjxPU1JFeGl0PiBtX29zckV4aXQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDE0ICs1Miw2IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICBncmFwaC5y
ZWdpc3RlckZyb3plblZhbHVlcygpOwogCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB7Ci0gICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAg
ICBBU1NFUlQoY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKLSAgICB9Ci0jZW5k
aWYKLQogICAgIC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlz
IGVudHJ5cG9pbnQgdG90YWxseSBkaWZmZXJlbnRseQogICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0
aGVyIHdlJ3JlIGRvaW5nIE9TUiBlbnRyeSBvciBub3QuCiAgICAgQ0NhbGxIZWxwZXJzIGppdChj
b2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBACiAj
aW5jbHVkZSAiSlNTZXRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5j
bHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIK
ICNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNp
bmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKQEAgLTIzMjAsNiArMjMyMSwxOCBA
QCBwcml2YXRlOgogICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVFN1YkdlbmVyYXRvcj4o
YXJpdGhQcm9maWxlLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7
CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5l
cmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVEFkZElDKiBhZGRNYXRoSUMoREZH
OjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1
cm4gY29tbW9uLmFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNf
c2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0
aWMgSklUTXVsSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUTXVsSUMocHJvZmlsZSk7
IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9y
Pjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVROZWdJQyogYWRkTWF0aElDKERGRzo6Q29t
bW9uRGF0YSYgY29tbW9uLCBVbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29t
bW9uLmFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxH
ZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklU
U3ViSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9m
aWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKwog
ICAgIHZvaWQgY29tcGlsZVZhbHVlTXVsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRp
Yyk7CkBAIC0yMzkxLDcgKzI0MDQsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAgICAgICAg
ICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBC
b3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgSklU
VW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRo
SUM8R2VuZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVFVuYXJ5TWF0
aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRD
b2RlLT5jb21tb24sIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dl
bmVyYXRvciA9IEdlbmVyYXRvcihKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLCBKU1ZhbHVl
UmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKIAogICAgICAgICAg
ICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwpAQCAtMjUwMCw3ICsyNTEz
LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVy
YXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25T
dGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRo
UHJvZmlsZSk7CisgICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRDb2RlLT5jb21tb24sIGFyaXRo
UHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRv
cihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkp
LAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBKU1Zh
bHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkpLCBwYXJhbXMuZnBTY3JhdGNoKDApLAogICAgICAgICAg
ICAgICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKQEAg
LTQzMTcsNyArNDMzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9H
UFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0
Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJv
eDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29k
ZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUlu
ZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2Nr
KCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBB
Y2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQ
Uik7CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJv
bCA9IHRydWU7CkBAIC0xMDI4NSw2ICsxMDI5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1BbGxvY2F0ZWRB
cmdzOyArK2kpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVu
ZChWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAg
ICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygp
LT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVw
Q2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQu
Y29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhzZW1hbnRpY05vZGVPcmlnaW4pOwpAQCAtMTA0
NDMsMTMgKzEwNDU3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVE
YXRhLmFyZ3MuYXBwZW5kKHBhcmFtc1sxICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOwogCiAg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bUFyZ3M7CisgICAg
ICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNodWZm
bGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogCiAgICAg
ICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCkt
PmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAK
LSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwg
WyZdIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVE
YXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
aml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICAgICAg
fSk7CkBAIC0xMDc5Miw3ICsxMDgwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VE
YXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5r
SW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAg
ICAgICAgICAgICAgICB9KTsKQEAgLTExMDczLDcgKzExMDg4LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQ
YXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJl
Z1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxT
bG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTMsMjggKzQxMywxNiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihW
TSYgdm0sIHVuc2lnbmVkCiAKICAgICBSZWdpc3RlclNldCBhbGxGVExDYWxsZWVTYXZlcyA9IFJl
Z2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAgICAgY29uc3QgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiB2bUNhbGxlZVNh
dmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJl
Z2lzdGVyU2V0IHZtQ2FsbGVlU2F2ZXNUb1NraXAgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3Rl
cnMoKTsKLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICBqaXQu
bG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBqaXQu
YWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVS
ZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICB9CiAKICAgICBm
b3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVn
Lm5leHQoKSkgewogICAgICAgICBpZiAoIWFsbEZUTENhbGxlZVNhdmVzLmdldChyZWcpKSB7Ci0g
ICAgICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghdm1DYWxsZWVTYXZlcy0+ZmluZChyZWcpKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVkIHVud2luZEluZGV4ID0gY29k
ZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCktPmluZGV4T2YocmVnKTsKICAgICAgICAgY29u
c3QgUmVnaXN0ZXJBdE9mZnNldCogYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA9IGJhc2VsaW5lQ2Fs
bGVlU2F2ZXMtPmZpbmQocmVnKTsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCogdm1DYWxsZWVT
YXZlID0gbnVsbHB0cjsgCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQot
ICAgICAgICAgICAgdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChyZWcpOwogCiAg
ICAgICAgIGlmIChyZWcuaXNHUFIoKSkgewogICAgICAgICAgICAgR1BSUmVnIHJlZ1RvTG9hZCA9
IGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPyBHUFJJbmZvOjpyZWdUMCA6IHJlZy5ncHIoKTsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1RvTG9hZCAhPSBHUFJJbmZvOjpyZWdUMSk7CiAK
ICAgICAgICAgICAgIGlmICh1bndpbmRJbmRleCA9PSBVSU5UX01BWCkgewogICAgICAgICAgICAg
ICAgIC8vIFRoZSBGVEwgY29tcGlsYXRpb24gZGlkbid0IHByZXNlcnZlIHRoaXMgcmVnaXN0ZXIu
IFRoaXMgbWVhbnMgdGhhdCBpdCBhbHNvCkBAIC00NTIsOCArNDQwLDYgQEAgc3RhdGljIHZvaWQg
Y29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAogCiAgICAgICAgICAgICBpZiAoYmFzZWxpbmVS
ZWdpc3Rlck9mZnNldCkKICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rl
ciwgYmFzZWxpbmVSZWdpc3Rlck9mZnNldC0+b2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmICh2
bUNhbGxlZVNhdmUgJiYgIXZtQ2FsbGVlU2F2ZXNUb1NraXAuZ2V0KHZtQ2FsbGVlU2F2ZS0+cmVn
KCkpKQotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEZQUlJlZyBmcFJlZ1RvTG9hZCA9IGJhc2VsaW5l
UmVnaXN0ZXJPZmZzZXQgPyBGUFJJbmZvOjpmcFJlZ1QwIDogcmVnLmZwcigpOwogCkBAIC00NjQs
MTkgKzQ1MCw5IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAog
ICAgICAgICAgICAgaWYgKGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAgICAg
aml0LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNy
b0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQt
Pm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAodm1DYWxsZWVTYXZlICYmICF2bUNhbGxlZVNh
dmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNhdmUtPnJlZygpKSkKLSAgICAgICAgICAgICAgICBqaXQu
c3RvcmVEb3VibGUoZnBSZWdUb0xvYWQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICBSZWdpc3RlckF0T2Zm
c2V0KiB2bUNhbGxlZVNhdmUgPSB2bUNhbGxlZVNhdmVzLT5maW5kKEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0
ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUt
Pm9mZnNldCgpKSk7Ci0KLSAgICAgICAgdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+Zmlu
ZChHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BS
SW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKLSAgICB9Ci0KICAgICBzaXplX3Qg
YmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9j
ay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAKICAgICBpZiAoZXhpdC5t
X2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJi
CSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjggQEAgY2xhc3MgTWV0YWRhdGEKICAgICBk
ZWYgc3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNv
bnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBnZW5lcmF0ZU9mZnNldE9m
RnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKKyAgICAgICAgICAgIGZpZWxkTmFtZXMubWFw
IGRvIHxmaWVsZE5hbWV8CisgICAgICAgICAgICAgICAgIiN7cHJlZml4fXN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uLTFdfSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAg
ICAgICAgICAgZW5kLmpvaW4oIlxuIikKKyAgICAgICAgZW5kCisKKyAgICAgICAgZGVmIGNvbnZl
cnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGZpZWxkTmFtZXMpCiAgICAgICAgICAgICBmaWVsZHMu
bWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhh
c2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxk
cyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCisgICAgICAgICAgICAgICAg
ICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0
eXBlLCBmaWVsZE5hbWVzKX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307
IgorICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAg
ICAgICAgICAgIGZpZWxkTmFtZXMucHVzaChmaWVsZE5hbWUpCisgICAgICAgICAgICAgICAgICAg
ICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgogICAgICAgICAgICAgICAg
IGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAg
ZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVs
ZE5hbWVzID0gW10KKyAgICAgICAgcHJlZml4ID0gIiAgICAgICAgIgorICAgICAgICBmaWVsZHMg
PSBjb252ZXJ0RmllbGRzKHByZWZpeCwgQGZpZWxkcywgZmllbGROYW1lcykKKyAgICAgICAgZmll
bGRzID0gZmllbGRzICsgIlxuIiArIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBm
aWVsZE5hbWVzKQogCiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXpl
cnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzY3LDYgKzM2NywyOCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6bG9hZFByb3BlcnR5
KEdQUlJlCiAgICAgICAgIHJlc3VsdCk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9y
ZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0
LCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBKdW1wIGlzSW5saW5lID0gYnJhbmNoMzIoTGVzc1Ro
YW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgCisg
ICAgbG9hZFB0cihBZGRyZXNzKG9iamVjdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaCk7CisgICAgbmVnMzIob2Zmc2V0KTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZz
ZXQsIG9mZnNldCk7CisgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKKyAgICAKKyAgICBpc0lubGlu
ZS5saW5rKHRoaXMpOworICAgIGFkZFB0cigKKyAgICAgICAgVHJ1c3RlZEltbTMyKAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEpTT2JqZWN0KSkgLQorICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PGludDMyX3Q+KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDIpICogc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpLAorICAgICAgICBvYmpl
Y3QsIHNjcmF0Y2gpOworICAgIAorICAgIHJlYWR5LmxpbmsodGhpcyk7CisgICAgCisgICAgc3Rv
cmVWYWx1ZSh2YWx1ZSwKKyAgICAgICAgQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNF
aWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSk7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVyZShWTSYgdm0s
IFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkK
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjk4LDggKzcyMCwxMyBAQCB2b2lkIEFzc2VtYmx5
SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzCiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0
VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlu
a0luZm8qIGluZm8pCiB7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpy
ZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJl
Z1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBp
bmZvKTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCit7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0g
bmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjgzMDUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjM0LDggKzIzNCw5IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKLSAgICAv
LyBOb3RlIHRoYXQgdGhpcyBjbG9iYmVycyBvZmZzZXQuCisgICAgLy8gTm90ZSB0aGF0IHRoZXNl
IGNsb2JiZXIgb2Zmc2V0LgogICAgIHZvaWQgbG9hZFByb3BlcnR5KEdQUlJlZyBvYmplY3QsIEdQ
UlJlZyBvZmZzZXQsIEpTVmFsdWVSZWdzIHJlc3VsdCk7CisgICAgdm9pZCBzdG9yZVByb3BlcnR5
KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBHUFJSZWcg
c2NyYXRjaCk7CiAKICAgICB2b2lkIG1vdmVWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3Mgc3JjUmVncywg
SlNWYWx1ZVJlZ3MgZGVzdFJlZ3MpCiAgICAgewpAQCAtMzc5LDE1ICszODAsMjYgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgfQogCisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlGcmFtZSwgR1BSUmVnIHNjcmF0
Y2gpCisgICAgeworI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorICAg
ICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCBzY3JhdGNoKTsKKyAgICAgICAgY29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHNjcmF0Y2gpOworI2Vsc2UK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOworICAgICAgICBVTlVTRURfUEFS
QU0oc2NyYXRjaCk7CisjZW5kaWYKKyAgICB9CisKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lKQog
ICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICAgICAg
Y29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfTsKICAgICAgICAgR1BSUmVnIHRlbXAxID0gdXNlZFJl
Z2lzdGVycy5nZXRGcmVlR1BSKDApOwotICAgICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCB0
ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVySW1wbCh0ZW1wMSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKICNlbHNlCiAgICAgICAgIFVOVVNF
RF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJh
bWUpOwogI2VuZGlmCiAgICAgfQogICAgIApAQCAtMTcyMCw2ICsxNzMyLDcgQEAgcHVibGljOgog
ICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5n
R2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3Bh
Y2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2Fs
bCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2Rl
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5l
SklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVk
ZSAiSklUTWF0aElDLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCisjaW5jbHVkZSAiU3RydWN0
dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVEFkZElDKiBNYXRoSUNIb2xk
ZXI6OmFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVy
biBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUTXVsSUMqIE1hdGhJQ0hvbGRlcjo6
YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1f
bXVsSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRTdWJJQyogTWF0aElDSG9sZGVyOjphZGRK
SVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJ
Q3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE5lZ0lDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE5l
Z0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFk
ZChhcml0aFByb2ZpbGUpOyB9CisKK3ZvaWQgTWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MoTWF0
aElDSG9sZGVyJiBvdGhlcikKK3sKKyAgICBtX2FkZElDcyA9IFdURk1vdmUob3RoZXIubV9hZGRJ
Q3MpOworICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhlci5tX211bElDcyk7CisgICAgbV9uZWdJ
Q3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICBtX3N1YklDcyA9IFdURk1vdmUob3Ro
ZXIubV9zdWJJQ3MpOworfQorCitCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZShDb2Rl
UmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5
Q2hlY2spCisgICAgOiBEaXJlY3RKSVRDb2RlKFdURk1vdmUoY29kZSksIHdpdGhBcml0eUNoZWNr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAsIE1hdGhJQ0hvbGRlcigpCit7IH0KKworQmFz
ZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9CYXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJKSVRDb2Rl
LmgiCisjaW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVuYXJ5QXJpdGhQ
cm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgU2ltcGxl
SnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3MgTWF0aElDSG9sZGVy
IHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKTsK
KyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklU
TXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1YklDKiBh
ZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklUTmVn
SUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+IG1f
YWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBt
X25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKworY2xhc3MgSklUQ29u
c3RhbnRQb29sIHsKK3B1YmxpYzoKKyAgICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisg
ICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIEdsb2JhbE9iamVjdCwKKyAg
ICAgICAgQ2FsbExpbmtJbmZvLAorICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAg
RnVuY3Rpb25EZWNsLAorICAgICAgICBGdW5jdGlvbkV4cHIsCisgICAgfTsKKworICAgIHN0cnVj
dCBWYWx1ZSB7CisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgUGFja2VkUHRyPHZvaWQ+IHBh
eWxvYWQ7CisgICAgfTsKKworICAgIEpJVENvbnN0YW50UG9vbCgpID0gZGVmYXVsdDsKKyAgICBK
SVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAgICBKSVRDb25z
dGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworCisgICAg
Q29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXplKCk7CisgICAgICAgIG1f
Y29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1ZSBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fY29uc3Rh
bnRzOworfTsKKworCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29k
ZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2RlKENv
ZGVSZWY8SlNFbnRyeVB0clRhZz4sIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hl
Y2spOworICAgIH5CYXNlbGluZUpJVENvZGUoKSBvdmVycmlkZTsKKyAgICBQQ1RvQ29kZU9yaWdp
bk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBtX3BjVG9Db2RlT3Jp
Z2luTWFwLmdldCgpOyB9CisKKyAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5r
ZWRDYWxsczsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAg
IEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAg
IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZp
eGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAg
IEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50
UG9vbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVP
cmlnaW5NYXA7CisgICAgYm9vbCBtX2lzU2hhcmVhYmxlIHsgdHJ1ZSB9OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHNpemVfdCBCYXNlbGluZUpJVFBsYW46OmNvZGVTaXpl
KCkgY29uc3QKIAogQ29tcGlsYXRpb25SZXN1bHQgQmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6ZSgp
CiB7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5U
aHJlYWQoKTsKKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9u
TWFpblRocmVhZChtX2NvZGVCbG9jayk7CiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNl
IENvbXBpbGF0aW9uRmFpbGVkOgogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJs
b2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODMw
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dD
aGlja2VuUHJvbG8KICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12b2lk
IENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVl
KSkpOwotICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAgc3Rv
cmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNv
ZGVCbG9jayksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2Fs
bFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBDQ2Fs
bEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hhZG93
UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAg
ICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpAQCAt
NzIsNiArNjIsMjggQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQog
ICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9CiAK
KwordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cit2b2lkIENDYWxsSGVscGVyczo6
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFs
dWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKKyAg
ICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOworICAgIHN0b3JlUHRyKHNj
b3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgc2NvcGUpKSk7CisgICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRv
d1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2Nr
KSkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IGNhbGxTaXRlSW5kZXgpKSk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywg
R1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQ
YWNrZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwor
dm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFk
b3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9j
aywgY2FsbFNpdGVJbmRleCk7Cit9CisKIHZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92
ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRM
YW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0
aW9uKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4NDAs
MTQgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9sYXRp
bGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRvcCBv
ZgogICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQgbG9n
U2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBz
Y3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2Nv
cGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJS
ZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXgpOworcHVibGljOgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BS
UmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1
c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisgICAg
dm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1Zh
bHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIg
dG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZv
aWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQ
UlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogdm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0
ZXJzKENvZGVCbG9jayogY29kZUJsb2NrKQogeworICAgIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVy
cyhjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1l
U2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zKQorewogICAgIFJlZ2lzdGVyU2V0IGNhbGxl
ZVNhdmVSZWdpc3RlcnMgeyBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkgfTsK
LSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zID0g
Y29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVn
aXN0ZXJBdE9mZnNldCBlbnRyeSB7IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZy
YW1lU2h1ZmZsZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDEzIEBAIHB1Ymxp
YzoKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJnczsKICAgICB1bnNpZ25lZCBudW1Mb2Nh
bHMgeyBVSU5UX01BWCB9OwogICAgIHVuc2lnbmVkIG51bVBhc3NlZEFyZ3MgeyBVSU5UX01BWCB9
OworICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OyAvLyBPbiBvdXIgbWFj
aGluZSBmcmFtZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVyTWFwPFZhbHVlUmVj
b3Zlcnk+IHJlZ2lzdGVyczsKICAgICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZhbGlk
R1BSUmVnIH07CiAKICAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sq
KTsKKyAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zm
c2V0TGlzdCopOwogI2VuZGlmCiAgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgQ2FsbEZyYW1lU2h1
ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYQogICAgIDogbV9qaXQoaml0KQogICAgICwgbV9v
bGRGcmFtZShkYXRhLm51bUxvY2FscyArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVy
cywgbnVsbHB0cikKICAgICAsIG1fbmV3RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQotICAgICwgbV9hbGlnbmVkT2xkRnJh
bWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCi0gICAgICAgICsgcm91bmRB
cmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
KSkKKyAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVycyArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLm51bVBhcmFtZXRl
cnMpKQogICAgICwgbV9hbGlnbmVkTmV3RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUlu
UmVnaXN0ZXJzCiAgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEu
YXJncy5zaXplKCkpKQogICAgICwgbV9mcmFtZURlbHRhKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSAt
IG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSkKICAgICAsIG1fbG9ja2VkUmVnaXN0ZXJzKFJlZ2lzdGVy
U2V0OjphbGxSZWdpc3RlcnMoKSkKICAgICAsIG1fbnVtUGFzc2VkQXJncyhkYXRhLm51bVBhc3Nl
ZEFyZ3MpCisgICAgLCBtX251bVBhcmFtZXRlcnMoZGF0YS5udW1QYXJhbWV0ZXJzKQogewogICAg
IC8vIFdlIGFyZSBhbGxvd2VkIGFsbCB0aGUgdXN1YWwgcmVnaXN0ZXJzLi4uCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsgKQpAQCAtNDIxLDcg
KzQyMSw3IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCBtX25ld0ZyYW1l
QmFzZSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYXJndW1lbnRDb3VudE9LID0KICAgICAg
ICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbV9uZXdGcmFt
ZUJhc2UsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1faml0LmNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIobV9udW1QYXJhbWV0ZXJzKSk7CiAgICAgbV9qaXQuYWRkMzIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSArIENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1f
aml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50UmVn
aXN0ZXJzKCkpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1fbmV3
RnJhbWVCYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVyLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3IEBA
IHB1YmxpYzoKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgZGF0YTsKICAgICAgICAgZGF0
YS5udW1Mb2NhbHMgPSBudW1Mb2NhbHMoKTsKICAgICAgICAgZGF0YS5udW1QYXNzZWRBcmdzID0g
bV9udW1QYXNzZWRBcmdzOworICAgICAgICBkYXRhLm51bVBhcmFtZXRlcnMgPSBtX251bVBhcmFt
ZXRlcnM7CiAgICAgICAgIGRhdGEuY2FsbGVlID0gZ2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7IENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSB9KS0+cmVjb3ZlcnkoKTsKICAgICAgICAgZGF0YS5hcmdzLnJl
c2l6ZShhcmdDb3VudCgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3Vu
dCgpOyArK2kpCkBAIC03OTgsNiArNzk5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBlcmZvcm1T
YWZlV3JpdGVzKCk7CiAgICAgCiAgICAgdW5zaWduZWQgbV9udW1QYXNzZWRBcmdzIHsgVUlOVF9N
QVggfTsKKyAgICB1bnNpZ25lZCBtX251bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgOiBKU0ludGVyZmFj
ZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgbnVsbHB0cikK
ICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2Rl
QmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCiAgICAgLCBtX3Bj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAgLTc3LDYgKzc3LDkgQEAgSklUOjpKSVQoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5n
KGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25zdGFudCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7CisgICAgbV9wcm9m
aWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrID0gY29k
ZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtOTAsOCAr
OTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0gICAgCi0gICAgc2tpcE9wdGlt
aXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVj
dXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVC
bG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIHNraXBPcHRpbWl6
ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0
aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZy
YW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlG
cmFtZSk7CkBAIC0xMTMsMTUgKzExNiwyMCBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdh
dGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVB
ZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVk
KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQp
Cit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0
KQogeworICAgIGF1dG8gb2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9TZXQsIFdh
dGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVk
KSkpOworICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlD
aGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlD
aGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAg
aWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJSZWFkT25s
eVdhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUg
PT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwg
T0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2ludCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVz
cyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1t
MzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1Bv
aW50ZXJPZmZzZXQoKQpAQCAtMTI5LDEyICsxMzcsMTggQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNr
UG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDAp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5r
ZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdU
MCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsKIH0KIAordm9p
ZCBKSVQ6OnJlc2V0U1AoKQoreworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKK30KKwogI2RlZmluZSBORVhUX09QQ09ERShuYW1lKSBcCiAgICAgbV9i
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgKyBj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IFwKICAgICBicmVhazsKQEAgLTE4MSw2MSArMTk1
LDQ0IEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWMKICAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJ
blByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtl
ZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOworICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVzdWx0KTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJh
cmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGJyYW5jaFRlc3RQ
dHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpy
YXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uUmFyZURh
dGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCByZXN1
bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0
LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkpLCBy
ZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rp
b25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSksIHJlc3VsdCk7CisKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpvZmZz
ZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
cmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworCisjaWYgQVNTRVJUX0VOQUJMRUQK
KyAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpOworICAgIH0pOworI2VuZGlmCit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKIHsKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgICAgICBkYXRhTG9n
KCJDb21waWxpbmcgIiwgKm1fcHJvZmlsZWRDb2RlQmxvY2ssICJcbiIpOwogICAgIAogICAgIGpp
dEFzc2VydFRhZ3NJblBsYWNlKCk7CiAgICAgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsK
ICAgICAKLSAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5zaXplKCk7CisgICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCk7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2FsbExp
bmtJbmZvSW5kZXggPSAwOwogCi0gICAgVk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAg
Qnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7Ci0gICAgaWYgKG1fbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxv
Y2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4o
dm0pKSkgewotICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNh
dXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KLSAgICAgICAg
Ly8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhl
IExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8KLSAgICAgICAgLy8gZG8gT1NSIGVudHJ5IGlu
dG8gdGhlIGJhc2VsaW5lIEpJVCBpbiBhIGxvb3AsIGl0IHdpbGwgcGFzcyBpbiB0aGUgYnl0ZWNv
ZGUgb2Zmc2V0IGl0Ci0gICAgICAgIC8vIHdhcyBleGVjdXRpbmcgYXQgd2hlbiBpdCBraWNrZWQg
b2ZmIG91ciBjb21waWxhdGlvbi4gV2Ugb25seSBuZWVkIHRvIGNvbXBpbGUgY29kZSBmb3IKLSAg
ICAgICAgLy8gYW55dGhpbmcgcmVhY2hhYmxlIGZyb20gdGhhdCBieXRlY29kZSBvZmZzZXQuCi0K
LSAgICAgICAgLy8gV2Ugb25seSBib3RoZXIgYnVpbGRpbmcgdGhlIGJ5dGVjb2RlIGdyYXBoIGlm
IGl0IGNvdWxkIHNhdmUgdGltZSBhbmQgZXhlY3V0YWJsZQotICAgICAgICAvLyBtZW1vcnkuIFdl
IHBpY2sgYW4gYXJiaXRyYXJ5IG9mZnNldCB3aGVyZSB3ZSBkZWVtIHRoaXMgaXMgcHJvZml0YWJs
ZS4KLSAgICAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAy
MDApIHsKLSAgICAgICAgICAgIC8vIEFzIGEgc2ltcGxpZmljYXRpb24sIHdlIGRvbid0IGZpbmQg
YWxsIGJ5dGVjb2RlIHJhbmdlcyB0aGF0IGFyZSB1bnJlYWNoYWJsZS4KLSAgICAgICAgICAgIC8v
IEluc3RlYWQsIHdlIGp1c3QgZmluZCB0aGUgbWluaW11bSBieXRlY29kZSBvZmZzZXQgdGhhdCBp
cyByZWFjaGFibGUsIGFuZAotICAgICAgICAgICAgLy8gY29tcGlsZSBjb2RlIGZyb20gdGhhdCBi
eXRlY29kZSBvZmZzZXQgb253YXJkcy4KLQotICAgICAgICAgICAgQnl0ZWNvZGVHcmFwaCBncmFw
aChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKLSAgICAgICAgICAg
IEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVj
b2RlT2Zmc2V0KG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChibG9jayk7Ci0KLSAgICAgICAgICAgIEdyYXBoTm9kZVdvcmts
aXN0PEJ5dGVjb2RlQmFzaWNCbG9jayo+IHdvcmtsaXN0OwotICAgICAgICAgICAgc3RhcnRCeXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgd29ya2xpc3QucHVzaChi
bG9jayk7Ci0KLSAgICAgICAgICAgIHdoaWxlIChCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0g
d29ya2xpc3QucG9wKCkpIHsKLSAgICAgICAgICAgICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KHN0ZDo6bWluKHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgYmxvY2st
PmxlYWRlck9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNz
b3JJbmRleCA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpCi0gICAgICAgICAgICAgICAgICAgIHdvcmts
aXN0LnB1c2goJmdyYXBoW3N1Y2Nlc3NvckluZGV4XSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBB
bHNvIGFkZCBjYXRjaCBibG9ja3MgZm9yIGJ5dGVjb2RlcyB0aGF0IHRocm93LgotICAgICAgICAg
ICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+
bGVhZGVyT2Zmc2V0KCk7IGJ5dGVjb2RlT2Zmc2V0IDwgYmxvY2stPmxlYWRlck9mZnNldCgpICsg
YmxvY2stPnRvdGFsTGVuZ3RoKCk7KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGlu
c3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChhdXRvKiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmhhbmRsZXJGb3JC
eXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGdyYXBoLmZpbmRCYXNpY0Jsb2NrV2l0aExl
YWRlck9mZnNldChoYW5kbGVyLT50YXJnZXQpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ynl0ZWNvZGVPZmZzZXQgKz0gaW5zdHJ1Y3Rpb24tPnNpemUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
IAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8
IGluc3RydWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4LDEyICsyNzUsMTUgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9u
czo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewotICAgICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQ
cm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNv
ZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG9wY29kZUlEICE9IG9w
X2NhdGNoKQorICAgICAgICAgICAgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CisKICAgICAg
ICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzKQogICAg
ICAgICBERUZJTkVfU0xPV19PUChsZXNzZXEpCkBAIC01MjcsNyArNTI3LDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0
VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2Rl
SW5kZXgpLnB0cigpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkK
ICAgICAgICAgICAgIGRhdGFMb2dMbigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBm
b3IgIiwgbV9ieXRlY29kZUluZGV4LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgp
KTsKQEAgLTU0NSw4ICs1NDUsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQogCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0
aW9uKCkpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9j
b2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0
eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxG
cmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsi
LCBieXRlY29kZU9mZnNldCwgIl0gU0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2Zy
ICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9CkBAIC02MDMsNyArNjAzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV92YWwp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfaWQpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9zdWIpCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZnJv
bV9zY29wZSkKICNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcHV0X3RvX3Nj
b3BlKQpAQCAtNjc0LDU1ICs2NzQsNTUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCkKICNlbmRpZgogfQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRD
b25zdGFudFBvb2xSZWdpc3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBD
b2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVn
VDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZz
ZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVT
YXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVn
aXN0ZXJzKCkpOworfQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemlu
ZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2
ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgREZHOjpDYXBh
YmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwo
KTsKICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAg
ICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXpl
ZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxz
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBE
Rkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVl
OwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9z
aG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIAotICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKLSAgICBj
YXNlIEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1bGVDb2RlOgotICAgIGNhc2UgRXZhbENvZGU6
Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAgICAgICAgLy8gV2UgY291
bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVu
aW5saW5lYWJsZSBjYWxsLgotICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0
aW9uLgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2Fu
SW5saW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwot
ICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
dHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2st
PmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxT
aW1wbGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRh
YmxlcygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdK
dW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRh
YmxlcygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3
aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJs
b2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9z
d2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2Vk
Q29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZl
Y3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5r
ZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShP
cHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
ICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAg
IG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2Nr
KTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9y
UHJvZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBv
ZmYgb2YgVW5saW5rZWRDb2RlQmxvY2suCisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVu
aXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KICAgICBp
ZiAoVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBG
SVhNRTogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiBVbmxpbmtlZENvZGVCbG9jay4K
ICAgICAgICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3IFByb2Zp
bGVyOjpDb21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9jayksCisgICAgICAgICAgICAgICAg
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxl
ZENvZGVCbG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAg
ICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJv
ZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENv
ZGVCbG9jayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFw
cGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CkBAIC03NDIs
MTEgKzc0MiwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAg
ICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7
CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
KQorICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExh
YmVsIGJlZ2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQg
ZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFt
ZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAt
NzU3LDE2ICs3NTgsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bgogICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVt
aXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lz
dGVycygpOworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0
ZXJzKCk7CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
KSB7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVu
dCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVu
dCkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV91bmxpbmtlZENv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygp
ICsgRml4ZWRWZWN0b3I8VmFsdWVQcm9maWxlPjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7
CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1f
dW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAg
ICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1
dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwogICAgICAgICAgICAgICAgIC8vIGtlZXAg
dGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0
aGUgZHVtbXkgdmFsdWUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0
cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQorICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNzc3LDEyICs3ODIsMTIgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAg
IGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
CiAgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNl
dCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50
YWdHUFIoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJl
Z3MpOworICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdU
MiwgYXJndW1lbnQgKiBzaXplb2YoVmFsdWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0
T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBl
KCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVC
bG9jay0+aml0VHlwZSgpKSk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAg
ICAgIG1fdm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIp
LCAqdGhpcyk7CkBAIC03OTksMjQgKzgwNCwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtX
aXRob3V0RmluYWxpemluCiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsK
ICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJy
b3IsIG1fY29kZUJsb2NrKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxG
cmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3Is
IHJlZ1QwKTsKIAogICAgIC8vIElmIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBu
ZXZlciByZXF1aXJlIGFyaXR5IGZpeHVwLgotICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0g
bV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAhPSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+
Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAg
Ym9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkgIT0gMTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBG
dW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVj
ayA9IGxhYmVsKCk7Ci0gICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9j
ay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQpOworCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xv
Z3VlKCk7Ci0gICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJ
blByb2xvZ3VlKHJlZ1QwKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVz
cyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAK
ICAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpLCByZWdUMSk7Ci0gICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVn
VDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJl
Z2luTGFiZWwsIHRoaXMpOworICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBU
cnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1Rv
KGJlZ2luTGFiZWwsIHRoaXMpOwogCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgoMCk7CiAKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQog
ICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2Rl
QmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBv
cGVyYXRpb25DYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpb24obV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3Rvcigp
ID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNr
LCBhcmd1bWVudEdQUjApOwogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIo
WmVybywgcmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTgzOSw3
ICs4NDcsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAg
ICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1
bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1
ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywg
bV91bmxpbmtlZENvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVm
Zm9ydCkpOwogICAgIGxpbmsoKTsKIH0KIApAQCAtODU4LDggKzg2Niw4IEBAIHZvaWQgSklUOjps
aW5rKCkKICAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewogICAgICAgICBjYXNlIFN3aXRj
aFJlY29yZDo6SW1tZWRpYXRlOgogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVy
OiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
LSAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRT
aW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAg
ICAgICAgICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
PEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0
T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRU
YWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBvZmZzZXQgPSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3MSw4
ICs4NzksOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3
aXRjaFJlY29yZDo6U3RyaW5nOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFi
bGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0
aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVs
c1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBm
b3IgKGF1dG8mIGxvY2F0aW9uIDogdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygp
KSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hP
ZmZzZXQ7CkBAIC05MDYsNiArOTE0LDI3IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIHJlY29yZC5jYWxsZWUpOwogICAgIH0KIAor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2Vu
ZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAg
ICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAgICAgICB9
CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFsaXplSUNz
KG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMpOworICAg
IGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlWYWxzKTsK
KyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFs
cyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlW
YWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKKyNlbHNlCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0
QnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlk
c1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7CkBAIC05MTcsMjEgKzk0NiwyNSBAQCB2b2lkIEpJVDo6
bGluaygpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIp
OwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsK
ICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1
ZmZlcik7CisjZW5kaWYKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxs
Q29tcGlsYXRpb25JbmZvKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgVW5saW5rZWRD
YWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZv
OworICAgICAgICBpbmZvLmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJ
bnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbik7CisjZWxzZQogICAg
ICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsK
ICAgICAgICAgaW5mby5zZXRDb2RlTG9jYXRpb25zKAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFy
dCksCiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pKTsKKyNlbmRpZgorCiAgICAgfQogCi0gICAg
ewotICAgICAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJl
bHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxk
ZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAg
ICB9Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVy
LmZpbmFsaXplKCkpOworICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwor
ICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1f
bGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5h
cHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDI2
ICs5NzMsNDIgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWSht
X2NvbXBpbGF0aW9uKSkgeworICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIG1ha2UgdGhlIGJ5
dGVjb2RlIHByb2ZpbGVyIGtub3cgYWJvdXQgVW5saW5rZWRDb2RlQmxvY2s/CiAgICAgICAgIGlm
IChPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkKICAgICAgICAgICAg
IG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fY29tcGlsYXRpb24uZ2V0KCksIHBh
dGNoQnVmZmVyKTsKLSAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21w
aWxhdGlvbihtX2NvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOworICAgICAgICBtX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcHJvZmlsZWRDb2RlQmxvY2ssICpt
X2NvbXBpbGF0aW9uKTsKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIuZGlkQnVpbGRNYXBwaW5nKCkpCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtl
VW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyKSwgcGF0Y2hCdWZmZXIpOwogICAgIAorICAgIC8vIEZJWE1FOiBNYWtlIGEgdmVyc2lvbiBv
ZiBDb2RlQmxvY2tXaXRoSklUVHlwZSB0aGF0IGtub3dzIGFib3V0IFVubGlua2VkQ29kZUJsb2Nr
LgogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAg
ICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQg
Y29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBj
b2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3Byb2ZpbGVkQ29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29k
ZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgQmFz
ZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2spKTsKKworICAgIG1faml0Q29kZS0+
bV91bmxpbmtlZENhbGxzID0gV1RGTW92ZShtX3VubGlua2VkQ2FsbHMpOworICAgIG1faml0Q29k
ZS0+bV9ldmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7Cisg
ICAgbV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0gV1RGTW92ZShtX3VubGlua2VkU3R1
YkluZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9z
d2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
cyA9IFdURk1vdmUobV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1f
aml0Q29kZU1hcCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCk7CisgICAgbV9qaXRDb2Rl
LT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNzKTsKKyAgICBtX2ppdENvZGUtPm1fY29uc3RhbnRQb29s
ID0gV1RGTW92ZShtX2NvbnN0YW50UG9vbCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtX2pp
dENvZGUtPm1faXNTaGFyZWFibGUgPSBtX2lzU2hhcmVhYmxlOworI2Vsc2UKKyAgICBtX2ppdENv
ZGUtPm1faXNTaGFyZWFibGUgPSBmYWxzZTsKKyNlbmRpZgogCiAgICAgaWYgKEpJVEludGVybmFs
Ojp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBh
dCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5z
dGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVu
dGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAl
cCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxl
TWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnko
KS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6Zmlu
YWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFp
blRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXND
b21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICsxMDE3LDE0IEBAIENvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFp
blRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2Nr
LT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7
Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVy
T2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8mIGhhbmRs
ZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8gRklYTUU6
IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9
IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFy
Z2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9Ci0KICAgICBp
ZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2Rl
T3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX2ppdENv
ZGUtPm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApOwog
CiAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklU
LT5hZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8K
LSAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6
ZSgpKSk7CisgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CiAKLSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2pp
dENvZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtl
ZEJhc2VsaW5lQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4g
Q29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQpAQCAtOTk4LDExICsxMDM2LDExIEBAIHNpemVfdCBK
SVQ6OmNvZGVTaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9
CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0KQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGRv
TWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbmcoZWZmb3J0KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJl
YWQoKTsKKyAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxOCAr
MTA4MCwyOCBAQCB2b2lkIEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAg
ICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlBy
ZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJh
bWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpm
cmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxz
KCkpID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsK
IAogICAgIHJldHVybiByb3VuZExvY2FsUmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNl
dChjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGxJblJlZ2lzdGVycyk7CiB9CiAKLWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihD
b2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9y
KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBmcmFtZVJlZ2lzdGVyQ291bnRG
b3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKworaW50IEpJVDo6c3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxv
Y2spIC0gMSkub2Zmc2V0KCk7CiB9CiAKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihD
b2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKIEhhc2hNYXA8Q1N0cmluZywg
U2Vjb25kcz4gSklUOjpjb21waWxlVGltZVN0YXRzKCkKIHsKICAgICBIYXNoTWFwPENTdHJpbmcs
IFNlY29uZHM+IHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsNyBAQAogCiAjZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwg
ZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9m
ZnNldCBcIiVzXCIgc2hvdWxkIGJlICVkLCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19j
YXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCisjaW5jbHVk
ZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
Q29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCkBAIC00NCw2
ICs0NSw3IEBACiAjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlm
dEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCisjaW5jbHVkZSAiTExJ
bnREYXRhLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVz
ZWRQb2ludGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsxNTEs
MTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRp
b25JbmZvIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZv
OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50
OworI2Vsc2UKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAg
ICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOworI2VuZGlmCiAgICAgfTsKIAogICAg
IHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCi0gICAgY2xhc3Mg
SklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICBj
bGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBKSVRTdHViQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFRodW5rczsKQEAgLTE3MSw2
ICsxNzgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUg
ZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zm
c2V0LgogICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zm
c2V0ID0gMjU2OwogCisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAg
IHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2Rl
SW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAg
ICAgICAgfkpJVCgpOwpAQCAtMTc4LDI4ICsxODcsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6dm0oKTsgfQogCiAgICAgICAg
IHZvaWQgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9y
dCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFkKCk7Cisg
ICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayop
OwogICAgICAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGRvTWFp
blRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgICAgICAKICAgICAgICAgc3Rh
dGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zm
c2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJ
VCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsK
KyAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnBy
aXZhdGVDb21waWxlKGNvZGVCbG9jaywgZWZmb3J0KTsKICAgICAgICAgfQogCisgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsK
ICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sq
KTsKKyAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2Rl
QmxvY2sqKTsKICAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJs
b2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmlu
ZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBpbGVUaW1lKCk7CiAKKyAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0YUdQUiA9IExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRh
VGFibGVHUFI7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfY29uc3RhbnRzR1BS
ID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFI7CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lk
IHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxp
bmtQYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKICAgICAg
ICAgdm9pZCBsaW5rKCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxl
KEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0
ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCiAgICAgICAgIC8v
IEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNr
LgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2ICsyMzcsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIH0KICNlbmRpZgogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAg
ICAgICAgdm9pZCBsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zm
c2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5
cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBl
LCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcs
IGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICBwdWJs
aWM6CisgICAgICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQ
UlJlZyk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJl
Zyk7CisgICAgICAgIHZvaWQgbG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3Rlciwg
R1BSUmVnKTsKKworICAgICAgICB2b2lkIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1
ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOworCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2so
SnVtcCBqdW1wVG9IYW5kbGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNo
ZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7CkBAIC0yNTQsNiArMjk0LDE5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9J
bmRleCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CisgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0g
b3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwor
ICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9w
OjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKKyAgICAgICAgLCB2
b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgorICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAorICAgICAgICAgICAgT3A6Om9wY29kZUlEID09
IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MK
KyAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBP
cDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCisgICAgICAgICwg
dm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKKyNlbHNlCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29k
ZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3Zh
cmFyZ3MKQEAgLTI2NSw5ICszMTgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25z
dHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMKICAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5r
SW5mbyopOworI2VuZGlmCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAg
IGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4NywxNCArMzQxLDEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVt
aXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3du
ZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAogICAg
ICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdU
MCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2Rl
JiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNl
CiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1Zh
bHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBAIC0zMDUsOCArMzU4
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
c2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZh
bHVlLCB2b2lkPgogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29k
ZShPcCBieXRlY29kZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0
Y2hHUFIpOwotICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdp
c3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNj
cmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAg
IHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVn
aXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgcHRyZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIs
IFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAgLTU5Myw3ICs2NDgsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3Bf
aGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CkBAIC02MTEsNyArNjY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjI3LDE0ICs2ODEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAg
ICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUp
OwotICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBB
Y2Nlc3NUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwg
QWNjZXNzVHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZv
aWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0
IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNo
ZWNrKFJlc29sdmVUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBlbWl0VmFy
UmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwogICAgICAgICB2
b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsK
ICAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBA
IC02NDYsNyArNzAwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBl
bWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
KTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOwotICAgICAg
ICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9p
ZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAg
ICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJl
VmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpAQCAtNjU1LDYgKzcwOSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lz
dGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgICAgICBib29sIGlzS25vd25DZWxs
KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZp
cnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJl
Z2lzdGVyKTsKQEAgLTY3NiwxMyArNzMxLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNf
cHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mKTsKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRf
cHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X2J5X2lkX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0m
KTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
c2xvd19vcF9wdXRfdG9fc2NvcGVHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2Vu
ZXJhdG9yKFZNJik7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gb3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9o
YW5kbGVyR2VuZXJhdG9yKFZNJik7CkBAIC02OTYsMzIgKzc0OSwxNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNv
bHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFy
KTsKICAgICAgICAgfQogCi0jZGVmaW5lIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9S
KHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihW
TSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9HRVRfRlJPTV9TQ09Q
RV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQot
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKLQot
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29w
ZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gTW9k
dWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gZW1pdCBpbmxpbmUgdGhhbiB1
c2UgYSB0aHVuay4KLSAgICAgICAgICAgIC8vIFJlc29sdmVkQ2xvc3VyZVZhciBiZWNhdXNlIHdl
IGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9wX3Jlc29sdmVfc2NvcGUuCi0gICAgICAgICAg
ICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAgICAgfQotCi0jZGVmaW5lIERFQ0xBUkVfUkVTT0xWRV9T
Q09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBl
IyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVf
UkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVu
a05hbWUpOwotCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1RydXRoeUdlbmVyYXRvcihW
TSYpOwogCiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKKyAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJv
bV9zY29wZUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsK
KyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2Vu
ZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4s
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYsIHN0
ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworCiAgICAg
ICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKQEAgLTc2MCwx
MCArNzk3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2
b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3Ms
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgQWRk
cmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwg
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29u
c3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAg
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlw
ZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjEsMjAgKzg1OCwyMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7CiAgICAgICAg
IH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0
aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0
ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3Vs
dCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5
dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4g
QXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUg
Qnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVu
Y3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQs
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyB0YXJnZXQs
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAg
ICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0
LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRyZXNzKEdQUkluZm86
Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
Ynl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJl
c3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25U
eXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE5LDI1ICs5NTYsMjIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgp
IHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXpl
ZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAg
ICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmls
aW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGll
cmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxs
IGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkg
eyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgZW1pdE1hdGVyaWFsaXpl
TWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAgICAgICB2b2lkIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxl
VGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAg
ICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBt
ZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVu
dCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhp
cy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUg
cmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dElu
Zm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0g
ICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwor
CisgICAgICAgIHZvaWQgcmVzZXRTUCgpOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVy
cHJldGVyOwogCkBAIC05NjQsOSArOTk4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJl
Y29yZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4g
bV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJp
dGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9l
eGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENh
bGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEwMDAs
MTEgKzEwMzEsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5z
dHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlv
blRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXpl
ZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29s
IG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0
Q29kZTsKKyAgICAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9
OworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxw
dHIgfTsKKworICAgICAgICBNYXRoSUNIb2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8
QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENvZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1f
Y29uc3RhbnRQb29sOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFs
T2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsK
KyAgICAgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAg
ICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAgICBG
aXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAg
Rml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisK
KyAgICAgICAgc3RydWN0IE5vdEFDb2RlQmxvY2sgeyB9IG1fY29kZUJsb2NrOworCisgICAgICAg
IGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hh
cihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFy
Z3VtZW50R1BSMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVu
dEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MzIwLDcgKzMyMSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkK
ICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJl
Z1QwLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZl
cnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogfQogCkBAIC01NzMsNyArNTc3LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KGNvbnN0IAogCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVt
aXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIyLDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3Vi
bGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJVE5lZ0lD
KiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJQyk7CiAg
ICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZh
bHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0
aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
QXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAtODk5LDggKzkw
NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0g
ICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmls
ZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0
aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0
aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsK
IH0KQEAgLTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFy
eU1hdGhJQzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRl
SW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVk
SW5saW5lQ29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
bWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNo
R1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNy
Y1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0
aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQ
Uiwgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAxNSwxMCArMTAyMSwxMSBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNj
cmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hH
UFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVm
dFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChu
b25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmln
aHRSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEzICsxMDYyLDE0IEBAIHZvaWQgSklU
OjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0
UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRT
bG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdU
NCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywg
YXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZElt
bVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRp
b25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBU
cnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAg
YXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIwLDEzICsxMTI4LDE0IEBAIHZvaWQg
SklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hv
dWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdz
LCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmls
ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25f
R0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pK
TWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRT
KQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsxMTc1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAg
YXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAgIFNuaXBwZXRPcGVyYW5k
IGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBw
ZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7
CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1
Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRN
dWxJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3Mu
YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRk
KGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPiht
dWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZU11bCk7CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbXVsKGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRTdWJJQyog
c3ViSUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCkpOwogICAgIGVtaXRTdG9yZShkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QxLCByZWdUMCk7CiB9CiAK
QEAgLTE1Nyw3ICsxNTcsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogSklUOjpjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiB7CiAgICAgdW5zaWduZWQg
Y2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBpbnQgYXJn
Q291bnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2lu
dCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oc3RhY2tPZmZz
ZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpKTsKIApAQCAtMTkyLDcg
KzE5Miw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAg
ICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7
CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9y
VmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgLWZpcnN0RnJlZVJlZ2lz
dGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9u
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRW
YXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsK
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNiAqIHNpemVvZih2
b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0yMDIsNyArMjAyLDcg
QEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1
cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVs
c2UKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsK
LSAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDQpLCBmaXJzdFZhckFyZ09mZnNl
dCwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0
KSwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KQEAgLTIzMiwxMCAr
MjMyLDEwIEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwogICAgIHN0b3JlUHRy
KGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1l
T2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBy
ZWdUMSwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwogCiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2
YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5r
SW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5m
byA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJl
Z1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBAIC0y
NTgsOCArMjU4LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAog
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKIAogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKLSAg
ICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5m
byk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUp
OwpAQCAtMjg2LDExICsyODYsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5z
dHJ1Y3RpbwogICAgICovCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKICAgICBp
ZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2st
PmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgICAgICBp
bmZvID0gbV9wcm9maWxlZENvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSk7CiAgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOwog
ICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwg
d2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgogICAgIAotICAgIGF1dG8gYnl0ZWNvZGVJ
bmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKKyAgICBhdXRv
IGJ5dGVjb2RlSW5kZXggPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3Ry
dWN0aW9uKTsKICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVj
b2RlSW5kZXgpLmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMp
LCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAg
ICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7IC8vIHJlZ1QxLCByZWdUMCBob2xkcyBj
YWxsZWUuCkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91
bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDEyICszNDEsMTEg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKICAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRo
KCptX3ZtLCAqdGhpcyk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cykgewpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsNyAr
Mzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIEpT
VmFsdWVSZWdzIG5leHRSZWdzID0gSlNWYWx1ZVJlZ3ModGFnTmV4dEdQUiwgcGF5bG9hZE5leHRH
UFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LAorICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLAogICAgICAgICBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwKICAgICAgICAgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCkBAIC00
MTAsNyArNDA5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBuZXh0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgbmV4dFJlZ3MpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBuZXh0UmVncyk7CiAKICAgICBmYXN0
Q2FzZS5saW5rKHRoaXMpOwpAQCAtNDQwLDEwICs0MzksMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIC8vIG1ldGFkYXRhCisgICAgICAgIGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCAvLyBtZXRhZGF0YQogICAgICAgICBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgogICAgICAgICBuZXh0VlJlZywg
Ly8gcmVzdWx0Ci0gICAgICAgIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgLy8gYXJnMQorICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQogICAgICAgICBnZW4uc3R1YkluZm8oKSwgLy8gYXJn
MgogICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVyYXRvckdQUiwgcGF5bG9hZEl0ZXJhdG9yR1BS
KSwgLy8gYXJnMwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOyAvLyBhcmc0CkBAIC00NTIsNyArNDUxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIGF1dG8gZG9u
ZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9
CkBAIC00NjAsNyArNDU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewog
ICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNhc2UgTmFy
cm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC01MDYsNyArNTA1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBw
cmVzZXJ2ZWRSZWdzLmFkZCh0YWdWYWx1ZUdQUik7CiAgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRk
KHBheWxvYWRWYWx1ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssCisgICAgICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLAog
ICAgICAgICAgICAgSklUVHlwZTo6QmFzZWxpbmVKSVQsCiAgICAgICAgICAgICBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCkBAIC01MzMsMTAgKzUzMiwxMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMSA9IHJlZ1Q2OwogICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUNzsKICAgICAgICAg
Y29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAg
ICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFs
dWVSZWdzKHRhZ0RvbmVHUFIsIHBheWxvYWREb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUg
PSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh0YWdEb25lR1BSLCBwYXlsb2FkRG9u
ZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSk7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2Nv
ZGVCbG9jaywKKyAgICAgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssCiAgICAgICAgICAgICBK
SVRUeXBlOjpCYXNlbGluZUpJVCwKICAgICAgICAgICAgIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwKICAgICAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpKSwKQEAgLTU4OCwxMCArNTg3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAot
ICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQor
ICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIC8vIG1l
dGFkYXRhCiAgICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlv
bgogICAgICAgICAgICAgZG9uZVZSZWcsIC8vIHJlc3VsdAotICAgICAgICAgICAgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCisgICAgICAgICAgICBU
cnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJn
MQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKICAgICAgICAgICAgIEpTVmFs
dWVSZWdzKHRhZ0l0ZXJSZXN1bHRHUFIsIHBheWxvYWRJdGVyUmVzdWx0R1BSKSwgLy8gYXJnMwog
ICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudCkucmF3Qml0cygpKTsgLy8gYXJnNApAQCAtNjAyLDcgKzYwMSw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0LmxpbmsodGhp
cyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElz
Tm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9i
amVjdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkp
OwogICAgIH0KIAogICAgIHsgICAKQEAgLTYxOCwxMCArNjE3LDEwIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KAotICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0
YQorICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIC8v
IG1ldGFkYXRhCiAgICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJh
dGlvbgogICAgICAgICAgICAgdmFsdWVWUmVnLCAvLyByZXN1bHQKLSAgICAgICAgICAgIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICAg
ICAgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8v
IGFyZzEKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLCAvLyBhcmcyCiAgICAgICAgICAgICBK
U1ZhbHVlUmVncyh0YWdJdGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFy
ZzMKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhD
YWxsLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2Fs
bFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSku
dmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4IEBAIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBj
aGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJ
bmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNo
ZWNrcG9pbnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0
YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKKwog
ICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0
ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJl
Z1QwKTsKICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QwKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBj
aGVja3BvaW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9y
ZTMyVG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9m
Q2FsbExpbmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0ZDo6ZW5hYmxl
X2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZGUsIENhbGxMaW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
IGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50
KQogewogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7
CkBAIC05MSw3ICs5Miw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVj
b2QKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRB
cmd1bWVudHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6
ZUZyYW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVS
ZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDAp
OworICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RG
cmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigt
Zmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhp
cywgcmV0dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJVDo6Y29tcGls
ZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBv
cGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNl
dHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJh
dGlvbihzZXR1cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwg
cmVnVDMsIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBj
b3VudC4KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsg
UGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9
IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8t
PmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25z
dGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
KSksIHJlZ1QzKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMs
IHJlZ1QyKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86
Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dl
c3QubGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywx
NiArMTMxLDE1IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxh
dGU8PgogYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29k
ZSkKIHsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwot
ICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6
OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFy
Z3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlZ1QxLCByZWdUMik7CisgICAgcmVzZXRTUCgpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVj
b2RlKTsKIApAQCAtMTQ4LDcgKzE1MSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyog
aW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFk
ZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxs
TGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRl
Y29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE1OSw0NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNl
dCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1
YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgq
bV92bSwgaW5mbyk7CisgICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0
ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFp
bENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKK2Jvb2wgSklUOjpjb21w
aWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVt
cGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRl
Y29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK2Jv
b2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlu
a2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxsRnJh
bWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdz
ID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0g
R1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0K
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0g
bWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVt
UGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFyYW1l
dGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICBzaHVmZmxl
RGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAg
ICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0
YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5hcmdzLnJl
c2l6ZShieXRlY29kZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRl
Y29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAg
ICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlz
cGxhY2VkSW5KU1N0YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAgICAgICBE
YXRhRm9ybWF0SlMpOwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAgICAgICBW
YWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVmZmxlRGF0
YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8tPnNldEZy
YW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBW
YWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0
YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMg
PSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigq
dGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRDb25zdGFu
dChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9
IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCBy
ZWdUMiwgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0
YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1Bh
dGhzKTsKKworICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8tPmZyYW1l
U2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9uZUxvY2F0
aW9uID0gbGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIxOCwxNCArMjI1LDI1
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBD
YWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIg
cmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0gICAgQ2Fs
bExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9l
dmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBp
bmZvKTsKKworICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOworICAgIGlm
IChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgaW5mbyA9IG1fdW5saW5rZWRD
YWxscy5hZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9w
Y29kZUlEKTsKKworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOworCisgICAgICAgIEFTU0VS
VChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAg
ICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkp
OworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnVubGlu
a2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFudDsKKyAg
ICB9CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7CiAKICAg
ICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdp
dGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBt
X2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7Ci0gICAgdWludDMyX3QgbG9j
YXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7CisgICAgdWlu
dDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLmJpdHMo
KTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBZGRyZXNzKGNhbGxG
cmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQpKTsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNh
bGxlZS4KQEAgLTIzNCwxNiArMjUyLDEyIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2Fs
bExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxU
eXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBl
bmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAgICBpZiAoY29tcGlsZVRh
aWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCisgICAgaWYgKGNvbXBp
bGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgsIGluZm9Db25zdGFu
dCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGxvYWRDb25zdGFudChpbmZvQ29uc3RhbnQsIHJl
Z1QyKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGF1dG8gc2xv
d1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAgICAgYXV0byBzbG93UGF0
aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdU
MCwgcmVnVDIsIFsmXSB7CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAg
ICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKICAgICAgICAgfSk7CkBA
IC0yNTMsMTQgKzI2NywxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVj
dGlvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8t
PmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJ
Qzo6WWVzKTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFi
ZWwoKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIHJlc2V0U1Ao
KTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KQEAgLTI3MywyMSArMjg2
LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdz
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAq
dGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlz
LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJv
bVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgcmVzZXRTUCgpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRl
Y29kZSk7CkBAIC0zOTUsMTcgKzQwNywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3Bl
cnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAs
IGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJ
ZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVk
IHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4
dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwog
fQpAQCAtNDE2LDEwICs0NDIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmpl
Y3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsK
ICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBA
IC00MzIsMTkgKzQ1NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
IHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JH
UFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRl
cmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBh
dXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJh
dG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhp
cyk7CiB9CkBAIC00NTIsNyArNDc0LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsK
ICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5h
cnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0
OTEsNzkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1
bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIy
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVy
aWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0
ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAg
bG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRP
ZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9N
ZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0
T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNl
ZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlv
biwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgp
OwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1Qw
CiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQ
UiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3Vs
dEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAg
bW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3Rl
eHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
ZG9udENsb2JiZXJSZWdpc3RlcjsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJl
c3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdz
ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVz
ZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJD
YWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUu
aW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIp
LCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25l
LmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1
YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUs
IHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICAgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgZG9uZUdQ
UiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRv
bmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAg
ICAgewotICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKLSAgICAgICAgR1BSUmVnIHNj
cmF0Y2gyID0gcmVnVDM7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9uZUdQ
UiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Ig
c2NyYXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
ID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAg
ICAgR1BSUmVnIGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRo
eSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1Qw
LCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsK
KyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpT
VmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsKKworICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGJhc2VH
UFIpOwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnBy
b3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCByZWdUNCwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0
byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRH
UFIpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01Mjcs
NTkgKzU3Nyw1NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNr
cG9pbnQoanVtcCgpKTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisKICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgIHsK
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAg
ICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCiAgICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2Jq
ZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RP
YmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCiAgICAg
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5p
bXBsKCk7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107CiAgICAgICAgIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0
ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVj
dChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJ
bmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxk
ZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygp
KTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
LQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCByZWdUMSk7Ci0gICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOworICAg
ICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+
KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
ZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBkb25lR1BSKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5v
dE9iamVjdC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93
SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9i
amVjdCwgYXJndW1lbnRHUFIwKTsKICAgICB9CiAKICAgICB7ICAgCiAgICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRl
Y29kZS5tX3ZhbHVlOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCiAg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFs
dWUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
W21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsK
LSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3Mo
R1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgICAgICBtb3ZlKGl0
ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgdmFsdWVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50KS5yYXdCaXRzKCkpOworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICsz
MiwxMSBAQAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJl
Z2lzdGVyU2V0LmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIFBDVG9Db2RlT3JpZ2lu
TWFwOworCiBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIENvbW1vbkRhdGE7CiBjbGFzcyBKSVRDb2Rl
OwpAQCAtMTU5LDEwICsxNjIsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0
YUlDKEpJVFR5cGUgaml0VHlwZSkKICAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0
YUlDKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjpp
c0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAg
fQogCkBAIC0yMjMsNiArMjI2LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1NoYXJlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2hhcmVBdHRyaWJ1dGUgPT0gU2hhcmVBdHRyaWJ1dGU6OlNoYXJlZDsg
fQogCisgICAgdmlydHVhbCBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSB7
IHJldHVybiBudWxscHRyOyB9CisKIHByaXZhdGU6CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAg
ICAgU2hhcmVBdHRyaWJ1dGUgbV9zaGFyZUF0dHJpYnV0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCB2b2lkIEpJVENvbXBpbGF0aW9uS2V5OjpkdW1w
KFByaW50U3RyZWFtCiAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIG91dC5wcmludCgiKENvbXBpbGUgb2YgIiwgKm1fcHJvZmlsZWRCbG9j
aywgIiB3aXRoICIsIG1fbW9kZSwgIikiKTsKKyAgICBvdXQucHJpbnQoIihDb21waWxlIG9mICIs
IFJhd1BvaW50ZXIobV9jb2RlQmxvY2spLCAiIHdpdGggIiwgbV9tb2RlLCAiKSIpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29t
cGlsYXRpb25LZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvbXBpbGF0aW9uS2V5LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNTcgKzMw
LDU2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBDb2Rl
QmxvY2tTZXQ7CitjbGFzcyBKU0NlbGw7CiAKIGNsYXNzIEpJVENvbXBpbGF0aW9uS2V5IHsKIHB1
YmxpYzoKICAgICBKSVRDb21waWxhdGlvbktleSgpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2Nr
KG51bGxwdHIpCisgICAgICAgIDogbV9jb2RlQmxvY2sobnVsbHB0cikKICAgICAgICAgLCBtX21v
ZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb24pCiAgICAgewogICAgIH0K
ICAgICAKICAgICBKSVRDb21waWxhdGlvbktleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIpCisgICAgICAgIDogbV9jb2Rl
QmxvY2sobnVsbHB0cikKICAgICAgICAgLCBtX21vZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpERkcp
CiAgICAgewogICAgIH0KICAgICAKLSAgICBKSVRDb21waWxhdGlvbktleShDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQotICAgICAgICA6IG1fcHJvZmls
ZWRCbG9jayhwcm9maWxlZEJsb2NrKQorICAgIEpJVENvbXBpbGF0aW9uS2V5KEpTQ2VsbCogcHJv
ZmlsZWRCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUpCisgICAgICAgIDogbV9jb2RlQmxv
Y2socHJvZmlsZWRCbG9jaykKICAgICAgICAgLCBtX21vZGUobW9kZSkKICAgICB7CiAgICAgfQog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAh
bV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRD
b21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuICFtX2NvZGVCbG9jayAmJiBtX21vZGUgPT0gSklU
Q29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CiAgICAgfQogICAgIAogICAgIGJv
b2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
ICFtX3Byb2ZpbGVkQmxvY2sgJiYgbV9tb2RlICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxp
ZENvbXBpbGF0aW9uOworICAgICAgICByZXR1cm4gIW1fY29kZUJsb2NrICYmIG1fbW9kZSAhPSBK
SVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKICAgICB9CiAgICAgCi0gICAg
Q29kZUJsb2NrKiBwcm9maWxlZEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9wcm9maWxlZEJsb2Nr
OyB9CiAgICAgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7
IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSklUQ29tcGlsYXRpb25LZXkmIG90
aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJvZmlsZWRCbG9jayA9PSBvdGhl
ci5tX3Byb2ZpbGVkQmxvY2sKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrID09IG90aGVyLm1f
Y29kZUJsb2NrCiAgICAgICAgICAgICAmJiBtX21vZGUgPT0gb3RoZXIubV9tb2RlOwogICAgIH0K
ICAgICAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBX
VEY6OnBhaXJJbnRIYXNoKFdURjo6UHRySGFzaDxDb2RlQmxvY2sqPjo6aGFzaChtX3Byb2ZpbGVk
QmxvY2spLCBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxKSVRDb21waWxhdGlvbk1v
ZGU+Ojp0eXBlPihtX21vZGUpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goV1RG
OjpQdHJIYXNoPEpTQ2VsbCo+OjpoYXNoKG1fY29kZUJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1
bmRlcmx5aW5nX3R5cGU8SklUQ29tcGlsYXRpb25Nb2RlPjo6dHlwZT4obV9tb2RlKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgot
ICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOworICAgIC8vIEVpdGhlciBDb2RlQmxvY2sq
IG9yIFVubGlua2VkQ29kZUJsb2NrKiBmb3IgYmFzbGVsaW5lIEpJVC4KKyAgICBKU0NlbGwqIG1f
Y29kZUJsb2NrOwogICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtX21vZGU7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgog
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgog
CkBAIC00NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHVi
SW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAg
ICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhj
b2RlQmxvY2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRU
eXBlKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRT
dHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAg
IG1fc3R1YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5
cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2Fs
bFNpdGVJbmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9
IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3I6OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBz
bG93UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQog
ewogICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25l
TG9jYXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYs
MTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHVi
SW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHVi
Um91dGluZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNp
Z25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIG1fc3RhcnQgPSBqaXQu
bGFiZWwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBl
KSk7CisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGpp
dC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIG1f
ZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJh
dG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTEwLDcgKzEx
OCw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyBiYXNl
LCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUpCiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9y
aWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBz
dHViSW5mb0dQUikKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lLnVpZCgpID09
IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAgICwgbV9p
c0xlbmd0aEFjY2Vzcyhjb2RlQmxvY2sgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9j
ay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAgLTEyMCw2ICsx
MjgsMzcgQEAgdm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIGdl
bmVyYXRlRmFzdENvbW1vbihqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNp
emVGb3JMZW5ndGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNz
KCkpOwogfQogCisKKyNpZiBVU0UoSlNWQUxVRTY0KQorc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRC
eUlkSW5saW5lQWNjZXNzKEpJVCYgaml0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBiYXNl
LCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNl
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJ
bmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRj
aCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHJvcGVydHkoYmFz
ZSwgc2NyYXRjaCwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9
IGppdC5qdW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0
LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBm
aW5pc2hlZC5saW5rKCZqaXQpOworfQorCit2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQ
UlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQu
bG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlk
SW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
YmFzZSwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRp
ZgorCiBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIHZh
bHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJ
bmZvR1BSKQpAQCAtMTM4LDYgKzE3NywyMCBAQCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcjo6Z2VuZXJhCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpz
aXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBt
X3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBz
dHViSW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1Yklu
Zm9HUFIsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRp
ZgorCiBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVC
bG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIApAQCAtMTQ5LDYgKzIw
MiwzNiBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yCiAgICAgbV9z
dHViSW5mby0+dXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNoKTsKIH0KIAorI2lmIFVTRShKU1ZB
TFVFNjQpCit2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisK
KyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJ
bmZvLCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lz
dGVyczo6c2NyYXRjaDsKKyAgICBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnNjcmF0Y2gyOworICAgIEdQUlJlZyB2YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lz
dGVyczo6dmFsdWU7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhz
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSks
IHNjcmF0Y2gpOworICAgIGppdC5zdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwg
YmFzZSwgc2NyYXRjaCwgc2NyYXRjaDIpOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgp
OworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGlu
aygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRpZgorCiB2b2lkIEpJ
VFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkK
IHsKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9w
ZXJ0eVJlcGxhY2UoKSk7CkBAIC0yMDAsNyArMjgzLDcgQEAgdm9pZCBKSVREZWxCeVZhbEdlbmVy
YXRvcjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZv
R1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8t
Pm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJ
VFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAg
ICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGpp
dC5sYWJlbCgpOwpAQCAtMjM2LDcgKzMxOSw3IEBAIHZvaWQgSklURGVsQnlJZEdlbmVyYXRvcjo6
Z2VuZXJhdGVGYXN0UGEKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7
Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHVi
Um91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVz
cyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZD
b2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1f
c2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFi
ZWwoKTsKQEAgLTI3MCw3ICszNTMsNyBAQCB2b2lkIEpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVy
YXRlRmFzdFBhCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAg
ICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRp
bmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9z
dHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0
cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQ
YXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7
CkBAIC0zMDAsNiArMzgzLDM0IEBAIHZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXQKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQ
cm9wZXJ0eUFjY2VzcygpKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCit2b2lkIEpJVEluQnlJ
ZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNp
Z25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFi
ZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKwor
ICAgIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BS
UmVnIHJlc3VsdCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgR1BSUmVn
IHNjcmF0Y2ggPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAg
IGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGpp
dC5ib3hCb29sZWFuKHRydWUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOworICAgIGF1dG8gZmlu
aXNoZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOwor
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwor
CisgICAgZmluaXNoZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30K
KyNlbmRpZgorCiBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpKSVRJbnN0YW5jZU9mR2VuZXJhdG9y
KAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LAogICAgIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIEdQUlJl
ZyBwcm90b3R5cGUsIEdQUlJlZyBzdHViSW5mb0dQUiwKQEAgLTMzMiw3ICs0NDMsNyBAQCB2b2lk
IEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzCiAgICAgbV9zdGFydCA9IGppdC5s
YWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1
YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVt
cChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwog
ICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7
CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0zNjgsNyArNDc5LDcgQEAgdm9pZCBKSVRH
ZXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwo
KTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZv
LT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNv
ZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9
IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAg
IG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtNDA1LDcgKzUxNiw3IEBAIHZvaWQgSklUUHV0QnlW
YWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAg
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9z
dHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRy
KCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNl
CiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2Rv
bmUgPSBqaXQubGFiZWwoKTsKQEAgLTQ0MCw3ICs1NTEsNyBAQCB2b2lkIEpJVFByaXZhdGVCcmFu
ZEFjY2Vzc0dlbmVyYXRvcjo6Z2VuCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwg
SklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0g
aml0LmxhYmVsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdp
bi5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvblZhbGlkYXRpb24uaCIKICNpbmNsdWRlICJKSVRP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQu
aCIKQEAgLTM4LDExICszOSwxMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJ
ZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNz
IEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVudW0gY2xhc3Mg
SklUVHlwZSA6IHVpbnQ4X3Q7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorc3RydWN0IEJhc2VsaW5l
RGVsQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBH
UFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5m
bzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86
OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2Ug
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9
IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BS
SW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUklu
Zm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAg
IC8vIFdlIHJlbHkgb24gdGhpcyB3aGVuIGxpbmtpbmcgYSBDb2RlQmxvY2sgYW5kIGluaXRpYWxp
emluZyByZWdpc3RlcnMgZm9yIGEgR2V0QnlWYWwgU3R1YkluZm8uCisgICAgc3RhdGljX2Fzc2Vy
dChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19h
c3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOwor
ICAgIHN0YXRpY19hc3NlcnQocmVzdWx0ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJl
c3VsdCk7CisgICAgc3RhdGljX2Fzc2VydChzdHViSW5mbyA9PSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mbyk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gy
ID0gR1BSSW5mbzo6cmVnVDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMg
PSBHUFJJbmZvOjpyZWdUNTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6YXJndW1lbnRH
UFIyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3RvID0gR1BSSW5mbzo6YXJndW1l
bnRHUFIzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6
YXJndW1lbnRHUFIxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BS
SW5mbzo6bm9uQXJnR1BSMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9
IEdQUkluZm86Om5vbkFyZ0dQUjE7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7
CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5m
bzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgZG9udENsb2JiZXJSZWdpc3RlciA9IEdQUkluZm86OnJlZ1QzOworfTsKKwor
c3RydWN0IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgdGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5
SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnNjcmF0Y2g7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJz
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3Ry
dWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmls
ZSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOwor
ICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUklu
Zm86OnJlZ1QyOworfTsKKyNlbmRpZgorCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7
CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDEy
ICsxNzIsMTggQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZm
ZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAog
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwot
ICAgIAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5z
aWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIgfTsKKyAg
ICB1bnNpZ25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2sq
IG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBtX3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
c3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1f
c2xvd1BhdGhDYWxsOwpAQCAtOTgsNyArMjE0LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTVmFsdWVS
ZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fc3RhcnQ7CitwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9z
bG93UGF0aEp1bXA7CiB9OwogCkBAIC0xMTEsNiArMjI3LDcgQEAgcHVibGljOgogICAgICAgICBK
U1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBB
Y2Nlc3NUeXBlKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImKTsKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNp
Z25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiBwcml2YXRlOgog
ICAgIGJvb2wgbV9pc0xlbmd0aEFjY2VzczsKQEAgLTEyNCw2ICsyNDEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAg
ICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1
YkluZm9HUFIpOwogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwog
fTsKIApAQCAtMTMyLDEwICsyNTAsMTEgQEAgcHVibGljOgogICAgIEpJVFB1dEJ5SWRHZW5lcmF0
b3IoKSA9IGRlZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAotICAgICAgICBDb2Rl
QmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFz
ZSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVn
IHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlw
ZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdp
c3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpT
VmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01B
TW9kZSwgUHV0S2luZCk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwg
dW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICAKICAg
ICBWX0pJVE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsKIApAQCAtMTYzLDEx
ICsyODIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3Nl
bWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1
ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAg
IE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAt
MTkxLDggKzMwOCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNy
b0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0
YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwog
fTsKIApAQCAtMjE2LDggKzMzMSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0
UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1Bh
dGhKdW1wOwogfTsKIApAQCAtMjQxLDggKzM1NCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2Vu
ZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1w
IG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjU1LDYgKzM2Niw3IEBAIHB1YmxpYzoKICAgICAg
ICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQ
Uik7CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2
b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5m
b0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogfTsKIAogY2xhc3MgSklUSW5zdGFuY2VP
ZkdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CkBAIC0y
NzcsOCArMzg5LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBm
YXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CiAKLXBy
aXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMDIsMTEgKzQx
Miw5IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3Nl
bWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1
ZVJlZ3MgbV9yZXN1bHQ7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTMzMCw4ICs0MzgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRo
KE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1
bXA7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwzOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lz
dGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlm
ICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7
Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0
YW50KSB7CisgICAgICAgIC8vIEFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3Rh
bnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0
YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25z
dGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7
CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiArMTgx
LDM2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRpZgog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6
OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1
cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1
ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJu
VmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZh
bHVlR1BSKTsKICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBB
ZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUg
Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIy
LCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0
U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogfQog
CiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewot
ICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3du
Q2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsy
MzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUg
dm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRl
eCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRl
Y29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7
CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVz
dWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpA
QCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9p
bnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAg
anVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7
CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29k
ZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3Bv
aW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1f
Ynl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwyOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXND
b25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJp
bmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworICAg
IGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICht
X3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMp
ID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmlu
ZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3Ro
KCkgPT0gMTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVS
ZWdzIHZhbHVlKQogewogICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwogCi0gICAg
Ly8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3
ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxz
ZQogICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8
RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwogICAgIHN0
b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwog
ICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNl
bmRpZgogfQorI2VuZGlmCiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5h
YmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwg
VmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlm
UHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVn
VDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNl
CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsNDEgKzM0OCwz
NyBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKyNp
ZiBVU0UoSlNWQUxVRTY0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBK
U1ZhbHVlUmVncyB2YWx1ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9y
KG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOwotfQogCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVn
KSk7CisgICAgcHRyZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZv
cjxCeXRlY29kZT4obV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6
Om9mZnNldE9mRmlyc3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNz
KHNfbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0
YWRhdGEsIEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CiB9CiAjZW5kaWYKIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BS
KQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZm
X3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBz
Y3JhdGNoR1BSKQogewogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIGFy
cmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3Rv
cmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxl
KTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJl
Z2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCiB7
Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBsb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhcnJheVBy
b2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpKTsK
LSAgICB9CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRl
Y29kZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9m
ZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3JhdGNoR1BSKTsKIH0KIAog
QUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxS
ZWdpc3RlciBzcmMpCkBAIC0zODAsNyArNDAxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9
IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25z
dGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVz
c0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTE3LDcgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAg
ICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTI3LDcgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3du
Q2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0LDExICs1MzUsNiBAQCBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAgICAgfQogfQogCi1BTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZp
cnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU2MCwxMSBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7
IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKICAgICBpZiAo
c3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwot
ICAgICAgICBlbHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50
T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAg
bW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3QpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC01NjYsMTEgKzU4Miw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRz
dDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3Rl
cklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNTk1
LDcgKzYwNiw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKIAog
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lz
dGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2Nr
LT5pc0tub3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHZSZWcpKQogICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAtNjM3LDMwICs2NDgs
NyBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7CiAgICAgaWYg
KHRhcmdldCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2st
Pm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1BTFdBWVNfSU5MSU5FIEdl
dFB1dEluZm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSBieXRlY29kZSkKLXsK
LSAgICB1bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQgKyAxOyAvLyBIYXNoTWFw
IGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkR2V0
UHV0SW5mb3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdldFB1dElu
Zm9zLmVuZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFsdWUpOwot
ICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2dldFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBnZXRQdXRJ
bmZvLm9wZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0aFByb2ZpbGUgSklUOjpj
b3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0gICAgdWludDY0X3Qga2V5
ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpICsgMSkgPDwgMzIg
fCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0YUlEKTsKLSAgICBhdXRv
IGl0ZXJhdG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRl
cmF0b3IgIT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRl
cmF0b3ItPnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0aFByb2ZpbGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgbV9jb3BpZWRB
cml0aFByb2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJuIGFyaXRoUHJv
ZmlsZTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNl
dChpbnN0cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjgxLDYgKzY2
OSw2MCBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0
dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZz
ZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwg
bV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0
ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxv
YWQ4KEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSB2YWx1ZSwgY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlOCh2YWx1
ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgp
Lm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmUzMlRv
TWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBv
ZmZzZXQpCit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29k
ZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHNfbWV0YWRhdGFHUFIsIHJlc3Vs
dCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvbnN0
YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxv
YWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9nbG9i
YWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BSUmVnIHJl
c3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOworICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFudHNW
ZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgY29u
c3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2Yodm9pZCopKSwgcmVzdWx0KTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25z
dCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAg
ICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBh
bGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBh
bGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwpAQCAt
MTEwLDcgKzExMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEkK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0
YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7
CkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0
YW5jZQogICAgIGVtaXRMb2FkUGF5bG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAgICAg
Ly8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxk
IGRvLgogICAgIEp1bXAgaGFzSW5zdGFuY2VWYWx1ZU5vdENlbGwgPSBlbWl0SnVtcElmTm90SlND
ZWxsKGhhc0luc3RhbmNlVmFsdWUpOwotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9
IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7
CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCiAgICAgLy8gV2Ug
a25vdyB0aGF0IGNvbnN0cnVjdG9yIGlzIGFuIG9iamVjdCBmcm9tIHRoZSB3YXkgYnl0ZWNvZGUg
aXMgZW1pdHRlZCBmb3IgaW5zdGFuY2VvZiBleHByZXNzaW9ucy4KICAgICBlbWl0TG9hZFBheWxv
YWQoY29uc3RydWN0b3IsIHJlZ1QwKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHByb3RvKTsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbV9wcm9m
aWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIHJlZ1QwLCAvLyByZXN1
bHQKICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdExvYWRU
YWcocHJvdG8sIHJlZ1QzKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluc3RhbmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdl
bi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMCwgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDEpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3Rh
bmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
Z2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QwLCByZWdUMiksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CiB9CiAKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20oCiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CiAgICAg
ZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMik7CiAgICAgZW1pdExvYWQoaGFzSW5z
dGFuY2VWYWx1ZSwgcmVnVDQsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2ZDdXN0b20sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMykpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgbV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBKU1Zh
bHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogfQogICAgIApAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5
cGVvZl9pc191bmRlZmluZWQoY28KICAgICAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAg
Y29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzc4LDcgKzM3OCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnMKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbmFtZSA9IGJ5dGVjb2RlLm1fbmFtZTsKICAgICBlbWl0TG9hZFBheWxvYWQoZnVu
YywgcmVnVDEpOwogICAgIGVtaXRMb2FkKG5hbWUsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQwOCw3ICs0MDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rp
CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDM7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwot
ICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJhbmNo
SWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdU
MSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MjIsNyArNDIyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogICAgIEpTVmFsdWVS
ZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAg
ICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCB2YWx1ZSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTQzNyw3ICs0MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFf
bnVsbChjb25zdCBJbnN0cnVjCiAKICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qy
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwog
CkBAIC00NjMsNyArNDYzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IElu
c3RydQogCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSksIHRhcmdldCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRkSnVt
cChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUg
PSBqdW1wKCk7CiAKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVm
aW5lZF9vcl9udWxsKGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25z
dGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7CiAgICAgQVNTRVJUKHNwZWNp
YWxQb2ludGVyLmlzQ2VsbCgpKTsKQEAgLTU1MiwxMyArNTUyLDEzIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNo
SWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlZ1QwLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aW5nRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIp
OwogICAgIHN0b3JlUmVzdWx0LmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNl
LgogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMK
ICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAK
ICAgICBzdG9yZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXR1
cm5WYWx1ZUdQUik7CkBAIC01OTEsMTQgKzU5MSwxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wRXFK
dW1wU2xvdyhWZWN0b3I8U2xvCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3Ry
aW5nKHJlZ1QyKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdU
MCwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBt
X3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVx
ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdldCk7CiAgICAgZG9u
ZS5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2Fz
ZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2Uu
bGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBpbGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDog
WmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFyZ2V0KTsKIAogICAgIGRvbmUubGluayh0aGlz
KTsKQEAgLTY0MywxMyArNjQzLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3QKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIp
KTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZVN0cmluZ0VxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwogICAgIHN0b3JlUmVzdWx0
LmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNl
LmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5s
aW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9yZVJlc3VsdC5s
aW5rKHRoaXMpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZXR1cm5WYWx1ZUdQUik7
CkBAIC03NjIsNyArNzYyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3Ry
aWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzcyLDcgKzc3Miw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCkBAIC03OTEsNyArNzkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJ
bnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CkBAIC04MjMsNyArODIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5z
dHJ1YwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihOb3RFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CkBAIC04NDYsNyArODQ2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1
Y3RpbwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7CiAgICAgY29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsK
ICAgICBlbWl0TG9hZChieXRlY29kZS5tX3ZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAganVtcFRvRXhj
ZXB0aW9uSGFuZGxlcih2bSgpKTsKIH0KIApAQCAtODYyLDcgKzg2Miw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwog
ICAgIGlzSW50MzIubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRz
dCkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTg4NCw3ICs4
ODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RyCiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoYXJndW1lbnRWYWx1ZVJlZ3MsIHJlZ1QyKSk7CiAg
ICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRz
dCkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTkxNSw3ICs5
MTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2Rl
QmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkK
ICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTkzMSw3ICs5MzEs
MTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNz
KHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKworICAgIC8vIFdoZW4gdGhlIExMSW50IHRocm93cyBhbiBleGNlcHRpb24s
IHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFkeSB0aWVyZWQgdXAKKyAgICAvLyB0
aGUgc2FtZSBDb2RlQmxvY2sgdG8gYmFzZWxpbmUsIGFuZCB3ZSdsbCBjYXRjaCB0aGUgZXhjZXB0
aW9uIGluIHRoZSBiYXNlbGluZSBKSVQgKGJlY2F1c2UKKyAgICAvLyB3ZSB1cGRhdGVkIHRoZSBl
eGNlcHRpb24gaGFuZGxlcnMgdG8gcG9pbnQgaGVyZSkuIEJlY2F1c2UgdGhlIExMSW50IHVzZXMg
YSBkaWZmZXJlbnQgdmFsdWUKKyAgICAvLyBpbnNpZGUgc19jb25zdGFudHNHUFIsIHRoZSBjYWxs
ZWUgc2F2ZXMgd2UgcmVzdG9yZSBhYm92ZSBtYXkgbm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgcmVn
aXN0ZXIuCisgICAgLy8gU28gd2UgcmVwbGVuaXNoIGl0IGhlcmUuCisgICAgeworICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkp
LCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVRE
YXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworICAgIH0K
IAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5k
Q2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVF
eGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTU0
LDcgKzk2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAg
ICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwg
ZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5
OAogCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKTsKICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9
IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxp
bmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5
T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTk5
Niw4ICsxMDA3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgog
ICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAog
ICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0
aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBw
ZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZz
ZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJ
VGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwMjMsMTMgKzEwMzQsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1
dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxl
IGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0g
ICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUg
PSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVz
W3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUlu
ZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFj
dGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAK
ICAgICBlbWl0TG9hZChzY3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgsIHVubGlu
a2VkVGFibGUubV9taW4pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldp
dGhVbmtub3duS2V5VHlwZSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4p
OwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIApAQCAtMTA0MSwx
MyArMTA1MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAg
ICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRo
aXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxp
bmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRDb2RlQmxvY2st
PnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBs
aW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAogICAgIGVtaXRMb2Fk
KHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4KTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgbV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxl
SW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIApAQCAt
MTA2OCw3ICsxMDc5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIC8vIEV2ZW4gdGhvdWdoIEpJVCBjb2RlIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRp
YWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVy
cywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0
aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIGZvciAoaW50IGkgPSBDb2RlQmxv
Y2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaSA8
IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7ICsraSkKKyAgICBmb3IgKGludCBpID0gQ29kZUJsb2Nr
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkgPCBt
X3Byb2ZpbGVkQ29kZUJsb2NrLT5udW1WYXJzKCk7ICsraSkKICAgICAgICAgZW1pdFN0b3JlKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
ZW50ZXIpOwpAQCAtMTA4Nyw3ICsxMDk4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3Bl
KGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+
KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3Rl
cklEIGNhbGxlZVJlZyA9IHJlZ1QwOwpAQCAtMTEyMiw3ICsxMTMzLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgU3RydWN0dXJl
SUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlciA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCkBA
IC0xMTQ1LDcgKzExNTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5z
dHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBl
TG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAt
MTIzOSw3ICsxMjUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Rh
aQogICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMSk7CiAgICAgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MocmVnVDEsIHJlZ1QyKTsKICAgICBlbWl0TG9hZFBheWxvYWQoYnl0
ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNo
YWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFk
b3dQYWNrZXRSZWcsIHRoaXNSZWdzLCByZWdUMywgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29k
ZUJsb2NrKSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDExICs1NCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fc3JjOwogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZh
bHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKLSAgICAgICAgZWxzZQorICAgICAg
ICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVC
bG9jayhzcmMpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7CisgICAgICAgICAg
ICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICB9CisKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtODcsMzcgKzkwLDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2pt
cChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0g
ICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUo
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwg
YWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAog
ICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0
b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBS
ZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxw
dHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRv
cjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdElu
aXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZz
ZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6
b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCks
IGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dD
YXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
KyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0
YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1
cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVj
dCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzEzMiw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJy
aWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNl
VmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5
bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFs
dWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24o
KSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5z
dGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9C
SkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VT
eW1ib2xGdW5jdGlvbikpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0
b3IsIHJlZ1QwKTsKIApAQCAtMTU0LDMwICsxNTYsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5
cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1
ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3Ig
YmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2Fu
IHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7
CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm90b0dQUiA9IEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIg
PSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBwcm90b0dQUik7CiAgICAgCiAgICAgLy8gQ2hlY2sg
dGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNo
ZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChw
cm90b0dQUiwgcHJvdG8pOwogCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAg
IHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDUs
Ci0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgcmVzdWx0R1BSLAorICAgICAgICB2
YWx1ZUdQUiwKKyAgICAgICAgcHJvdG9HUFIsCisgICAgICAgIHN0dWJJbmZvR1BSLAorICAgICAg
ICBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxLCBCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnNjcmF0Y2gyKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKKwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMTkyLDE0ICsyMDIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFk
ZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCByZWdUMiwgcmVnVDEpOwotICAgIH0g
ZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5l
SW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm8gPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWUgPT0gYXJndW1lbnRH
UFIyKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJv
dG8gPT0gYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFu
Y2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0yNDAsNyArMjQ5LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogCiAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
cmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7
CiAKQEAgLTM4Myw5ICszOTIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1
Y3Rpb24qCiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYg
dm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hh
bmRsZXJHZW5lcmF0b3IoVk0mKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQu
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQyMCw2IEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQog
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC00MzQsOSArNDQyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tl
eShjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9mdW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5h
bWUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTQ2NSw4ICs0NzQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3Ry
dWN0aQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Qy
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29u
c3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAg
ICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxz
ZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0
R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElT
dHViKHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAg
ICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgw
LDcgKzQ5MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZU
TCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywg
d2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
CkBAIC01MTksNyArNTMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5z
dHJ1YwogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1Qx
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNo
UHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24gPSBqdW1wKCk7CiAKQEAgLTU0Myw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmVxX251bGwoY29uc3QgSW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMg
LSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAg
IGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0
YXJnZXQpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQ
dHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CiAKQEAgLTU4MiwxNSArNTkzLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29y
X251bGwoY28KIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X3ZhbHVlOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQo
Ynl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlz
Q2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFu
Y2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgp
KSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsK
KyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVn
VDEpOworICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNv
ZGUsIE9wSm5lcVB0cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1
bXAoanVtcCgpLCB0YXJnZXQpOwogICAgIGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC02MjUsOCAr
NjM0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29s
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpT
VmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdl
dCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlz
VHJ1dGh5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAo
YnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTY0MCw3ICs2NTEsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0g
cmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNjk1LDcg
KzcwNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7Cisg
ICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCBy
ZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTcxMSw3
ICs3MjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6b3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB0
aHJvd25WYWx1ZUdQUiA9IGFyZ3VtZW50R1BSMTsKQEAgLTcyMCw3ICs3MzIsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAKICNpZiBOVU1CRVJfT0ZfQ0FMTEVF
X1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICBqaXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwg
YXJndW1lbnRHUFIwKTsKLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXJJbXBsKGFyZ3VtZW50R1BSMCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwpAQCAtOTA4
LDcgKzkyMCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCkBAIC05MTgsNyArOTMxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBy
ZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MzEsNyArOTQ1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydQogICAgIAogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBk
c3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAt
OTUxLDcgKzk2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50
LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTc4LDcgKzk5Miw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChy
ZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk5Myw3ICsxMDA3LDE4IEBAIHZvaWQgSklU
OjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdU
MywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNh
bGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisK
KyAgICAvLyBXaGVuIHRoZSBMTEludCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGVyZSBpcyBhIGNo
YW5jZSB0aGF0IHdlJ3ZlIGFscmVhZHkgdGllcmVkIHVwCisgICAgLy8gdGhlIHNhbWUgQ29kZUJs
b2NrIHRvIGJhc2VsaW5lLCBhbmQgd2UnbGwgY2F0Y2ggdGhlIGV4Y2VwdGlvbiBpbiB0aGUgYmFz
ZWxpbmUgSklUIChiZWNhdXNlCisgICAgLy8gd2UgdXBkYXRlZCB0aGUgZXhjZXB0aW9uIGhhbmRs
ZXJzIHRvIHBvaW50IGhlcmUpLiBCZWNhdXNlIHRoZSBMTEludCB1c2VzIGEgZGlmZmVyZW50IHZh
bHVlCisgICAgLy8gaW5zaWRlIHNfY29uc3RhbnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdlIHJl
c3RvcmUgYWJvdmUgbWF5IG5vdCBjb250YWluIHRoZSBjb3JyZWN0IHJlZ2lzdGVyLgorICAgIC8v
IFNvIHdlIHJlcGxlbmlzaCBpdCBoZXJlLgorICAgIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZK
SVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKKyAgICB9CiAKICAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9u
SWZDYXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzYsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3Vt
ZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVm
ZmVyOwotICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNo
LCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFu
ZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5k
VmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRv
IHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBF
eGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAg
ICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXIt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsK
LSAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUp
LCByZWdzKTsKLSAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQog
fQogCkBAIC0xMDUzLDggKzEwNjYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNv
bnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2Ny
dXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlv
bnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2st
PnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJs
ZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5NCwxNCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRj
aEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVj
b3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVj
b3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtl
ZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBl
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJs
ZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25L
ZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRU
YWJsZS5tX21pbik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcp
OwogfQogCkBAIC0xMDk5LDIwICsxMTEzLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9z
dHJpbmcoY29uc3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUu
bV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3Rp
bmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91
bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
dGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6
OlN0cmluZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRl
eCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1
Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBK
dW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0
ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhp
cyk7CkBAIC0xMTMzLDcgKzExNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0
IEluc3RydWN0CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKQEAgLTExNDgsNyArMTE2NCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29u
c3QgSW5zdHJ1Y3QKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xMTY2LDcgKzExODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0
cnVjCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFs
LCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAo
KTsKQEAgLTExODgsMTIgKzEyMDMsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBp
bml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9p
bnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBs
aWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBt
X2NvZGVCbG9jay0+bnVtVmFycygpOworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPm51bVZhcnMoKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9y
IChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rl
cih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1f
Y29kZUJsb2NrKTsKKyAgICAKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAg
ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCkBAIC0xMjEyLDcgKzEyMjksNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2go
WDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMTMxMCwyMyArMTMyNywxOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNh
Y2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0
cnVjdHVyZUlELCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRv
VGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVh
dGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJy
aWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxl
ZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFy
ZURhdGFSZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAt
MTM0Miw3ICsxMzU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5z
dAogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVX
aXRoUHJvdG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFU
YWcpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVu
Y3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNo
ZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wQ3JlYXRlVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkQ2FsbGVlKCks
IGNhY2hlZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBi
cmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6
c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRy
KE5vdEVxdWFsLCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11
bHRpcGxlQ2FsbGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzg1LDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJl
Z1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFs
dWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzk2LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgx
KSwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDA5LDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQyMCw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVn
VDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzNSwxMSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihjb25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIzKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CiB9CkBAIC0xNDMwLDcgKzE0NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2st
Pmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5n
KCkgJiYgbV91bmxpbmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5n
RWFybHlSZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BI
aW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCBy
ZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3Bz
TGltaXQoKSkpOwpAQCAtMTQ0MCw3ICsxNDU4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9o
aW50KGNvbnN0IEluc3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZgotICAgICAgICBtb3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsx
NDcxLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAg
Ly8gRW1pdCB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1p
emVkKCkpIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVP
clplcm8sIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9y
TG9vcCgpKSwKLSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVz
c09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAt
MTUwOSw3ICsxNTI4LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0
IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywg
YXJndW1lbnRHUFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1MjIsNyArMTU0Miw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9jaGVja190cmFw
c19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3Rl
cnM6OmVicCk7CkBAIC0xNTY0LDM0ICsxNTg0LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19y
ZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQocmVnZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBhcmd1bWVudEdQUjA7
CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29k
ZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJl
dHVyblZhbHVlR1BSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1p
dE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBKdW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
LCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhl
YyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwor
ICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpGdW5jdGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3Rh
bnQsIGFyZ3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJ
RDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9w
X25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVj
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0
aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQog
CkBAIC0xNjIxLDIzICsxNjQzLDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24o
Y29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3Vt
ZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBy
ZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BS
MSk7CiAjZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVC
bG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNv
bnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rp
b25FeHByLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNv
ZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVu
dEdQUjIpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYg
KG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5l
cmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdf
YXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBv
cF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9
CiB9CiAKQEAgLTE2NjQsMjkgKzE2ODcsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5j
X2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUu
bV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwg
c2l6ZSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIyKTsKKyAgICBt
YXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFk
YXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlf
d2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXpl
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRh
dGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2lu
dGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRh
KGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxs
b2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEs
IHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQ
cm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwK
LSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywg
cmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTQs
OCArMTcxOCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAK
IHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIG1faXNTaGFyZWFibGUgPSBmYWxzZTsKKwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAg
ICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0
aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFy
Z2V0VmlydHVhbFJlZ2lzdGVyOwogCkBAIC0xNzc3LDIwICsxODAzLDI1IEBAIHZvaWQgSklUOjpl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQ
UjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVt
cyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFj
a2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8g
VGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNo
MlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93
UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3Vt
ZW50IHJlZ2lzdGVyLgorICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAg
ICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0
Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2Nr
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBy
ZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVT
RShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgbV9pc1NoYXJlYWJs
ZSA9IGZhbHNlOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQcm9maWxlQ29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2lj
QmxvY2tMb2NhdGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMp
OwpAQCAtMTg2MCw3ICsxODkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNv
bnN0IElucwogICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAogICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlc3VsdFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE5MTcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwg
dmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2Vz
KTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIK
ICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRp
ZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
Q29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1
ZGUgIkRGR09TUkVudHJ5LmgiCkBAIC0yODU1LDcgKzI4NTYsNyBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0ID0gbGlua2Vk
VGFibGUubV9jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKQEAgLTI4ODAsNyArMjg4
MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1Zh
bHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9j
ay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAg
ICB2b2lkKiByZXN1bHQ7CiAgICAgaWYgKGtleS5pc0ludDMyKCkpCkBAIC0yOTAzLDcgKzI5MDQs
NyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7
Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwogCiAgICAgaWYgKGtleS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmlu
Z0ltcGwqIHZhbHVlID0gYXNTdHJpbmcoa2V5KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7
CkBAIC0yOTE5LDcgKzI5MjAsNiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
U3dpdGNoCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAK
LSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25SZXNvbHZlU2NvcGVGb3JCYXNlbGluZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0cnVjdGlvbiogcGMpKQogewogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTI5NzEsNyArMjk3MSw2IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25SZXNvbHYKIAogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzb2x2ZWRTY29wZSk7CiB9Ci0jZW5kaWYKIAogSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkdldEZyb21TY29wZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0cnVjdGlvbiogcGMpKQogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTAsOSArMjkwLDcgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25H
ZXRQcgogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVu
a25vd25LZXlUeXBlLCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUga2V5
LCBzaXplX3QgdGFibGVJbmRleCwgaW50MzJfdCBtaW4pKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKFZNKiwg
RW5jb2RlZEpTVmFsdWUga2V5LCBzaXplX3QgdGFibGVJbmRleCwgaW50MzJfdCBtaW4pKTsKIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25L
ZXlUeXBlLCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUga2V5LCBzaXpl
X3QgdGFibGVJbmRleCkpOwotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25SZXNvbHZlU2NvcGVGb3JCYXNlbGluZSwgRW5jb2Rl
ZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBD
KSk7Ci0jZW5kaWYKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNj
b3BlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24q
IGJ5dGVjb2RlUEMpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0VG9T
Y29wZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2Rl
UEMpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Nyw3ICs4NywxMiBAQCBhdXRvIEpJVFBsYW46OnRpZXIoKSBjb25zdCAt
PiBUaWVyCiAKIEpJVENvbXBpbGF0aW9uS2V5IEpJVFBsYW46OmtleSgpCiB7Ci0gICAgcmV0dXJu
IEpJVENvbXBpbGF0aW9uS2V5KG1fY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksIG1f
bW9kZSk7CisgICAgSlNDZWxsKiBjb2RlQmxvY2s7CisgICAgaWYgKG1fbW9kZSA9PSBKSVRDb21w
aWxhdGlvbk1vZGU6OkJhc2VsaW5lKQorICAgICAgICBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+
dW5saW5rZWRDb2RlQmxvY2soKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGVCbG9jayA9IG1fY29k
ZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgcmV0dXJuIEpJVENvbXBpbGF0aW9u
S2V5KGNvZGVCbG9jaywgbV9tb2RlKTsKIH0KIAogYm9vbCBKSVRQbGFuOjppc0tub3duVG9CZUxp
dmVBZnRlckdDKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTksNyArNTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNv
bnN0CiAKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5
bG9hZChnZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
ckJ5SWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0
eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcy
LDcgKzcyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdAogCiAg
ICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxvYWQoc2V0
dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgcmVnVDEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwo
KSwgb3B0aW9ucywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3Nl
dHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODcs
NyArODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAg
ZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVy
LCByZWdUMyk7CiAgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDQpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBh
dHRyaWJ1dGVzLCByZWdUMywgcmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyU2V0dGVyLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgYXR0cmli
dXRlcywgcmVnVDMsIHJlZ1Q0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMSw3ICsx
MDEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1p
dExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEs
IHJlZ1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgYXR0cmlidXRlcywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE1LDcg
KzExNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBl
bWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdU
MSwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdU
Myk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgbV9wcm9maWxl
ZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIzLDcgKzEyMyw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwpAQCAtMTMxLDggKzEzMSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0TG9hZChiYXNlLCBiYXNlUmVncy50YWdHUFIo
KSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLAogICAgICAgICBiYXNlUmVncywgcmVzdWx0
UmVncywgSW52YWxpZEdQUlJlZywgcmVnVDQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtMTY2LDcgKzE2
Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHksIHByb3BlcnR5UmVncy50YWdHUFIoKSk7
CiAKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAg
IGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIHJlZ1Q0
KTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTIwMiw3ICsyMDIsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKICAgICBlbWl0TG9h
ZDIoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSwgcHJvcGVy
dHksIHByb3BlcnR5UmVncy50YWdHUFIoKSwgcHJvcGVydHlSZWdzLnBheWxvYWRHUFIoKSk7CiAK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIEpTVmFsdWVSZWdzKGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BS
KCkpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5wYXls
b2FkR1BSKCkpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7Cisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXpl
LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXls
b2FkR1BSKCkpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVn
cy5wYXlsb2FkR1BSKCkpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgp
KSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAog
ICAgIGJveEJvb2xlYW4ocmVnVDAsIHJlc3VsdFJlZ3MpOwpAQCAtMjE2LDcgKzIxNiw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxf
YnlfaWQoY29uc3QgSW4KIAogICAgIGVtaXRMb2FkKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBi
YXNlUmVncy5wYXlsb2FkR1BSKCkpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgp
KSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKICAgICBi
b3hCb29sZWFuKHJlZ1QwLCByZXN1bHRSZWdzKTsKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwpAQCAtMjQ5LDcgKzI0OSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QxKTsKICAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCBwcm9maWxlLCByZWdUNCk7CiAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsK
ICAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCBy
ZWdUNCk7CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJbnN0cgogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAogICAgICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgICAg
IGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAgfQogfQpAQCAtMjc1LDcgKzI3NSw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICBpZiAoaGFz
QW55U2xvd0Nhc2VzKGl0ZXIpKSB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKQEAgLTI4NCw3ICsyODQs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CisgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KIH0KQEAgLTMwNSwxMyArMzA1
LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJ
VEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIG1fcHJv
ZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0
UHJpdmF0ZU5hbWUsCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOwog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJl
Z3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtMzMwLDcgKzMz
MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKIAogICAgIGF1
dG8gYmFzZUdQUiA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgYXV0byBwcm9wZXJ0
eUdQUiA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTM0OCw3ICszNDgsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlk
R1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtMzc3LDcg
KzM3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBK
U1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KTsKIAogICAgIGF1dG8gb3BlcmF0aW9u
ID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmll
bGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVS
ZWdzLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlUmVncywgcHJvcGVydHlSZWdzLCB2YWx1ZVJl
Z3MsIGdlbi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKIAogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC0zOTUsNyArMzk1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSk7CiAKICAgICBK
SVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxl
ZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2
YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAg
ICAgYmFzZVJlZ3MsIGJyYW5kUmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBA
IC00MTgsNyArNDE4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5k
KAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJh
bmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4XTsKICAgICArK21fcHJpdmF0ZUJy
YW5kQWNjZXNzSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywg
YnJhbmRSZWdzKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQogCkBAIC00MzUsNyArNDM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJp
dmF0ZV9icmFuZChjbwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNl
UmVncy50YWdHUFIoKSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIGJhc2VSZWdzLCBicmFuZFJlZ3MsIEludmFs
aWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNDUyLDcgKzQ1Miw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NH
ZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nl
c3NJbmRleF07CiAgICAgKyttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4OwogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFu
ZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTQ2NSw3ICs0NjUs
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKQEAgLTQ3OCw3ICs0NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCByZWdUNiwgcmVnVDcpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBt
X3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiks
IEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIHJlZ1Q2LCBJbnZhbGlkR1BSUmVnKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJCiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAg
ICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IEpJVDo6
ZWNtYU1vZGUoYnl0ZWNvZGUpOwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCkBAIC01MjQsNyArNTI0LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXRMb2FkMihiYXNlLCByZWdU
MiwgcmVnVDEsIHByb3BlcnR5LCByZWdUMywgcmVnVDApOwogICAgIGVtaXRMb2FkKHZhbHVlLCBy
ZWdUNSwgcmVnVDQpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/
IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFN
b2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCks
IHByb2ZpbGUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZv
KCksIHByb2ZpbGUpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKIH0KQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVt
aXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTU0MiwxMyArNTQyLDEzIEBAIHZvaWQgSklUOjplbWl0X29w
X3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxp
ZEdQUlJlZywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIG1fcHJvZmlsZWRDb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJl
ZywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgcmVzdWx0UmVn
cyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOwogfQogCkBAIC01NTgsMTMgKzU1OCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0
QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdl
bi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC01NzUsNyArNTc1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVn
VDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC01
ODMsMTMgKzU4MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXls
b2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWREaXJlY3QpOworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2Fk
T25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRz
dCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBA
IC01OTksMTMgKzU5OSwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiB9CkBAIC02MTQsMTAgKzYxNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAgICAgCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNjMwLDEzICs2MzAsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1
bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9w
cm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJ
bnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3Vs
dFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtNjQ2LDEzICs2NDYsMTMgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1Yklu
Zm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4u
c3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNjYzLDcgKzY2Myw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAg
ICAgCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh0aGlz
VlJlZywgcmVnVDQsIHJlZ1QzKTsKQEAgLTY3MywxMyArNjczLDEzIEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAg
bV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJs
b2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50
YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC02ODksMTMgKzY4OSwx
MyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklU
R2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRC
eUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKICAgICAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1Yklu
Zm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1Qz
KSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9m
aWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03MTAsMTUgKzcxMCwxNSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJl
Y3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKICAgICAKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCB2YWx1ZSwgcmVnVDMs
IHJlZ1QyKTsKICAgICAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVn
VDEpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBtX3By
b2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ss
ICppZGVudCksCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMiksIEludmFsaWRHUFJSZWcsCiAgICAgICAgIHJlZ1QxLCBieXRl
Y29kZS5tX2ZsYWdzLmVjbWFNb2RlKCksIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtp
bmQ6Ok5vdERpcmVjdCk7CiAgICAgCkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKIApAQCAtNzQ4
LDcgKzc0OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAg
ICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4Kytd
OwogICAgIAogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCi0gICAgICAgIGdlbi5zbG93
UGF0aEZ1bmN0aW9uKCksIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZv
KCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgICAgICBnZW4uc2xvd1BhdGhG
dW5jdGlvbigpLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJ
bmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgCiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTc1OCwx
NCArNzU4LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVn
VDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAg
ICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CisgICAg
ICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9pbkJ5SWRzLmFwcGVuZChnZW4pOwpAQCAtNzc5LDEzICs3NzksMTMgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9p
bkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJ
bmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03OTYsNyArNzk2LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCBy
ZWdUMik7CkBAIC04MDQsNyArODA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNv
bnN0IEluc3RydQogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJv
ZmlsZSwgcmVnVDQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWws
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9m
aWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpT
VmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwpAQCAtODE5LDE0ICs4MTksMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChj
b25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
bkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwog
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAog
ICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtODM3LDcgKzgzNyw3IEBAIHZvaWQgSklUOjplbWl0
SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtODUzLDcgKzg1Myw3IEBAIHZvaWQg
SklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2kKICAgICBKSVRJbkJ5VmFsR2VuZXJh
dG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBl
ID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRl
QnJhbmRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lkIEpJVDo6
ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVj
dGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1
YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVj
dGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVz
cyhtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hw
b2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNp
Z25lZCBkZXB0aCkKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9z
dXJlKFZpcnR1YWxSZWdpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0g
Ynl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRh
Lm1fcmVzb2x2ZVR5cGU7CkBAIC05MTYsMTEgKzkxNiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6
Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5k
aW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNz
T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCgpKSwgcmVnVDEpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCByZWdUMSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRT
Y29wZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7
CkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25z
dCBJbgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IAogICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBt
X2NvZGVCbG9jayk7CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZENvZGVC
bG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIHJlZ1QxKTsKQEAgLTEwMzksNyArMTAzOSw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXMKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFk
YXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShy
ZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwog
ICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKQEAgLTExNTYsNyArMTE1Niw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRG
cm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQpAQCAtMTE5MCw3ICsxMTkwLDcgQEAg
dm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3Bl
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEdldFB1dElu
Zm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwpAQCAtMTIwMiw3ICsx
MjAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAg
ICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9w
cm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0
dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbi4KICAgICAg
ICAgICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgICAgICAgICAgCkBAIC0x
MjE3LDcgKzEyMTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3Bl
ID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2Rl
QmxvY2spOworICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNv
bnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2sp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKQEAgLTEzMTgsNyArMTMxOCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3Rf
bW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAgICAgICAgIHNsb3dQYXRoQ2Fs
bC5jYWxsKCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
VG9TY29wZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTEzMzMsNyArMTMzMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBlbWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdU
MCk7CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9m
ZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNl
dCksIHJlc3V0bFJlZ3MudGFnR1BSKCkpOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgKyBQYXlsb2FkT2Zmc2V0KSwgcmVzdXRsUmVncy5wYXlsb2FkR1BSKCkpOwot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1dGxSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCByZXN1dGxSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0
LCByZXN1dGxSZWdzLnRhZ0dQUigpLCByZXN1dGxSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAg
LTEzNTUsNyArMTM1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29u
c3QKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwxMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRj
aDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9u
czo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+
IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAg
YXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwog
ICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBz
Y3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BS
KTsKIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKwogICAg
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgICAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlWYWw7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIHJlc2V0U1AoKTsgLy8gV2UgbWln
aHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAor
CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4p
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKICAgICB9Ci0KIH0KIAorI2lmICFPUyhXSU5ET1dTKQorc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdmlhYmxlQXJndW1lbnRHUFI0ID0gR1BSSW5mbzo6YXJndW1lbnRHUFI0Oworc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgdmlhYmxlQXJndW1lbnRHUFI1ID0gR1BSSW5mbzo6YXJndW1lbnRHUFI1
OworI2Vsc2UKK3N0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZpYWJsZUFyZ3VtZW50R1BSNCA9IEdQ
UkluZm86Om5vbkFyZ0dQUjA7CitzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2aWFibGVBcmd1bWVu
dEdQUjUgPSBHUFJJbmZvOjpub25BcmdHUFIxOworI2VuZGlmCisKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wY29kZVR5cGU+CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9w
Y29kZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2Vz
KGl0ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIHZpYWJsZUFyZ3VtZW50R1BSNCk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKT4oYnl0ZWNvZGUs
IEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0KTsKICNlbHNlCi0gICAgICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29k
ZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwor
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwor
ICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5k
ZXgpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1
bWVudEdQUjQ7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSBhcmd1bWVudEdQUjQ7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICAgICAgY29u
c3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BS
ID09IGFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmls
ZSksIHByb2ZpbGVHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLQotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemUpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5
IHVzZWQuCisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIg
PT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OmJhc2UgPT0gcmVnVDApOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHkgPT0gcmVnVDEpOworCisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZh
bHVlR1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDksNyArMTY5LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAt
MTYwLDggKzE4MCw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSNTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKQEAgLTE4NywzNCArMjA3LDQwIEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAgICAgICAgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIEFTU0VS
VChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKQEAgLTIyMyw5
ICsyNDksMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT4oYnl0
ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0yMzUsMjYgKzI2MywyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIy
OyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yNjQsNyArMjg2LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAw
LDIxICszMjIsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJy
YW5kPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFu
ZCwgYnJhbmRHUFIpOwotCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0
UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1Qy
KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2
YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9H
UFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6U2V0UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJy
YW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1i
YXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVy
cyByZWdpc3RlcnMuCkBAIC0zMjQsMTcgKzM1MywyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRf
cHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0
ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogeworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRv
ciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4
KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBicmFuZEdQUik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRp
b25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtMzQ0LDI0ICszNzgsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3NldF9wcml2YXRlX2JyYW5kKAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJp
dmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5
cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFs
dWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJp
dmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZgogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZh
dGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM3MCwz
MyArMzk4LDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY28KICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgcmVn
VDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNr
UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJ
bmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJp
dmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2
YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hl
Y2tQcml2YXRlQnJhbmQ+KCk7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlKTsKKwogICAgIEpJ
VFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nl
c1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIg
PSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0
aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTQwNiwyNCArNDQ4LDE4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1
c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5k
OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRl
Y2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBl
cywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6
ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9k
aXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNSwzMCAr
NDcxLDQzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9m
aWxlKSwgcmVnVDMpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9m
aWxlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHByb2ZpbGVHUFIpOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIs
IHN0dWJJbmZvR1BSKTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkp
CiAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1
YkluZm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQ
dXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFN
b2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9T
UiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMg
Y2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBp
cyBjZWxsLgpAQCAtNDc0LDE1ICs1MjMsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0
KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9h
ZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1v
ZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07
CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTQ0LDE2IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBj
bG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21h
TW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlz
U3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHZpYWJsZUFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQor
ICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSwgdmlhYmxlQXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAg
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpLCB2aWFibGVBcmd1bWVudEdQUjUpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3ModmlhYmxlQXJndW1lbnRHUFI0
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIHZpYWJsZUFyZ3Vt
ZW50R1BSNCwgdmlhYmxlQXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTUxMiw3ICs1NjcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2Fs
bCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJp
Y3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU3OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAg
LTUzMywxOCArNTg4LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
cmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFp
bnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAg
fQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpAQCAt
NTcwLDIwICs2MzEsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25z
dAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJ
bnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFk
ZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5m
b0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9
IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2NjYsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsK
LSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7Cisg
ICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZhbEdl
bmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02MDMs
MTMgKzY3NCwxNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0aW9u
ID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmll
bGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQg
aW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJ
bmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHZpYWJsZUFyZ3VtZW50R1BSNCk7Cisg
ICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVG
aWVsZE9wdGltaXplKT4oQWRkcmVzcyh2aWFibGVBcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0LCBUcnVzdGVk
SW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYy
MiwxOCArNjk1LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9w
cml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb247Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRp
b24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNjQzLDE0ICs3MTAs
MTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0
IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZh
aWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBp
bmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBt
YXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVH
UFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIApAQCAtNjgwLDcgKzc0Nyw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02ODksNyArNzU3LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02OTksNyArNzY4LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGludDMyX3QgYXR0cmlidXRl
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
YXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAs
IG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1w
bCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC03MDksNyArNzc5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29u
cwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEp
OwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1Qy
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcxOSw3ICs3OTAsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Myk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJl
Z1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyNywy
MyArNzk5LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNl
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8g
V2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNl
IHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNzU5LDE1ICs4NDEsMTcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRz
W21fZGVsQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxk
ZWNsdHlwZShvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgp
KSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC03ODEsMjQgKzg2NSwxOSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3Bl
cnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09
IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAg
LTgwOCw3ICs4ODcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVj
dCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERG
Ry9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVj
dHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1
cm5BZGRyZXNzKCk7CkBAIC04NDUsMjIgKzkyNCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgcHJvcGVydHkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKwogICAgIEpJ
VERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAg
ICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0
Y2gpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6RGVsZXRlQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0
dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeVZhbHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAv
LyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2lu
Y2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRl
IG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpA
QCAtODgzLDkgKzk3MywxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25z
dCBJCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRl
Y2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC04OTksMjQgKzk5MSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3Vt
ZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
c3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2Rl
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5
X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5k
Q2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEw
MTMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNz
KCk7CkBAIC05NjEsMjIgKzEwNDgsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVn
LCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQg
KzEwODIsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwog
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlH
ZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJ
ZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDAzLDI2ICsxMTAyLDIw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKICAgICBtb3ZlKEpJ
VDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8
ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAzMCwyMiArMTEyMywzMSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJl
ZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vz
c1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiArMTE1NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVj
dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSht
ZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKT4oYnl0ZWNv
ZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTA3Myw4MyArMTE3Nyw2MiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHBy
b3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVy
YXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzY3JhdGNoOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+
cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAg
ICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRk
cmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRh
LmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDhGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFk
YXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhOjpvZmZzZXRPZk1vZGUoKSwgc2NyYXRjaEdQUik7
CisgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoMzIoTm90RXF1YWwsIFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChi
eXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdl
dEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFz
ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMp
OwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VW
UmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOwotCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJl
c3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZv
cy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0
byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2ICsxMjQxLDE4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAg
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSht
ZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3NywyNiArMTI2Miw1OCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQ
UiwgdGhpc1ZSZWcpOworCisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhp
c0dQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBX
ZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0
IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdl
bik7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjA2LDcgKzEzMjMsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJv
dXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25n
aW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMjQxLDE2ICsxMzU4LDE5
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRh
LCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xMjYwLDI4ICsxMzgwLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGkKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0
aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyOTEsNyArMTQwNSw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9u
cyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAog
ICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTEzMjksMjMg
KzE0NDMsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9
IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUg
dG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0
b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZl
IGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJh
dGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdh
eXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFs
dWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFz
ZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
YmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzdHVi
SW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3Qg
PyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0
QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6
IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShi
eXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28g
d2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0x
MzU5LDE0ICsxNDg4LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3Qg
SW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
bih0aGlzKTsKICAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRz
W21fcHV0QnlJZEluZGV4KytdOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3Bl
cmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMzc2LDI1ICsxNTA5LDE5IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBh
cmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IGdlbi5z
bG93UGF0aEZ1bmN0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChn
ZW4uc2xvd1BhdGhGdW5jdGlvbigpKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKQEAgLTE0MDQsNyArMTUzMSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlm
ICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0
LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE0NDEsMjAgKzE1NjgsMzEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDAp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKQEAgLTE0NjMsMTQgKzE2MDEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5C
eUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlv
bkluQnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsx
NjIxLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFy
ZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywg
dGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdp
dmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxk
ZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcs
IHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE1MTAsMjUgKzE2NDUsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNv
bnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwot
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNo
KTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAg
LTE1MzcsMTUgKzE2ODAsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25z
dCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5
VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJ
bkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fcHJvcGVydHksIHZpYWJsZUFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJh
dGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50
R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIHZp
YWJsZUFyZ3VtZW50R1BSNCk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0x
NTU2LDU5ICsxNzAyLDcwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3Qg
SW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHBy
b2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJl
Q2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0
aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2
ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRl
Y2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2Us
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0
eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwog
CiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlwZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGJhc2UpOworICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7CisgICAg
QVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8
IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIAogICAgIEpJVEluQnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhh
c1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9w
ZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc3NSwyMSBAQCB2b2lkIEpJVDo6
ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVn
VDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VH
UFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJv
cGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUp
OwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1By
aXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9u
SGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXpl
OwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVy
YXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3By
aXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1
Miw3ICsxODAzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRl
U2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVt
aXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29k
ZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNjY2LDIxNSArMTgxNywxMjkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVCcmFuZD4o
KTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBi
eXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVC
cmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYgKCFu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BS
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xv
YmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50
U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVk
IGRlcHRoKQogewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyk7CisgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQogICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVU
eXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlw
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBt
ZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
LSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBt
X2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExl
eGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoK
LSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3Qs
IHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9z
dXJlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDAp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X3Jlc29sdmVUeXBlLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci19Ci0jZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LQotdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwot
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAg
ICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFk
YXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2Owot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJ
ZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwg
bGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0g
ICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlm
IChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhp
Y2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3Qg
bWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRh
ZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2Rl
ZmluZSBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29w
ZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dl
bmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZ
UEUoUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCisgICAgICAgIGF1dG8gY2xvc3VyZVZhckdlbmVy
YXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BS
ZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9yZXNvbHZlX3Nj
b3BlIENsb3N1cmVWYXIiKTsKICAgICAgICAgfTsKLSN1bmRlZiBSRVNPTFZFX1NDT1BFX0dFTkVS
QVRPUgorCisgICAgICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5l
cmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAi
QmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MiKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5l
cmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9w
UmVzb2x2ZVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5lOiBvcF9yZXNvbHZl
X3Njb3BlIGdlbmVyaWMiKTsKKyAgICAgICAgfTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDI7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUMDsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJl
Z1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsK
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIp
OwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0
b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgICAgIGlmIChw
cm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAgICBjb2RlID0gdm0u
Z2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZSBpZiAocHJvZmls
ZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAg
ICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENU
SVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAgIGVtaXROYWtlZE5l
YXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZt
LCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBj
YW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcFJlc29sdmVTY29wZTo6
TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OyAvLyBp
bmNvbWluZwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsgLy8gaW5jb21p
bmcKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDI7IC8vIGluY29taW5n
CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOyAvLyBpbmNvbWluZwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcg
LSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gcmVnVDQ7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBl
KSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0
YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwor
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZN
ZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFH
UFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rp
b25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2Jh
bE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hl
Y2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIg
PT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7
Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2Jh
bE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6
Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpT
R2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNo
cG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0g
ICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKLQotICAgICAgICBMYWJlbCBsb29wID0g
bGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsK
LSAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKLSAgICAg
ICAgfQotICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworI2lmICFPUyhXSU5ET1dTKQorICAgICAgICBz
dGF0aWNfYXNzZXJ0KHNjb3BlR1BSID09IHJlZ1QwKTsKKyNlbmRpZgorICAgICAgICBqaXQubG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkxvY2FsU2NvcGVEZXB0
aCgpKSwgcmVnVDEpOworCisgICAgICAgIExhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAg
ICAgSnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CisgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDAp
OworICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAgICAgIGpp
dC5qdW1wKCkubGlua1RvKGxvb3AsICZqaXQpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAg
ICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
KSB7CkBAIC0xODgyLDEyICsxOTQ3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxC
aW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9m
ZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAg
IG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdsb2JhbExleGljYWxC
aW5kaW5nRXBvY2goKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRP
Zkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCkBAIC0xODk3LDExICsxOTYxLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRT
Y29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEds
b2JhbFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAg
ICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwog
ICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZH
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTE5MDksNyArMTk3Myw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgICAgIGVtaXRSZXNvbHZl
Q2xvc3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTE5MTksODMgKzE5ODMsNDUgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3
aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xv
YmFsTGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2
ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVW
YXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOworICAgICAg
ICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29s
dmVUeXBlKCkpLCByZWdUMSk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgYXV0byBlbWl0Q2FzZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9
IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkp
OworICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOworICAgICAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgIG5vdENhc2UubGluaygmaml0KTsK
KyAgICAgICAgfTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
c2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgZW1p
dENhc2UoR2xvYmFsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHkpOworICAg
ICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUp
OwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQog
Ci0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0g
ICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZl
X3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9j
YXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVM
b2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVG
SU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVU
eXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAo
IXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAg
ICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBq
aXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9w
X3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xW
RV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfUkVT
T0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAg
Ly8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0
aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0
aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwMzQsNyArMjA2MCw2IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX3Jlc29sdmVfc2NvcGUiKTsKIH0K
LSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogdm9pZCBKSVQ6OmVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCkKIHsKQEAgLTIwNjIsMjc2ICsyMDg3LDEzMyBAQCB2b2lkIEpJVDo6ZW1pdEdl
dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgcmVnVDApOwogfQogCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZl
VHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVj
dHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CisgICAgUmVzb2x2ZVR5cGUgcHJv
ZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2sp
Lm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewot
ICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHk6Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJl
U2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBk
b24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4g
QWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIg
aW5qZWN0aW9uLgotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAgICAgICAgICAg
IEdQUlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZzZXQgPSByZWdU
MTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7Ci0KLSAgICAgICAgICAgIGpp
dEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7Ci0gICAgICAgICAgICB9KSk7CisgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkg
PT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAg
ICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChB
U1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFu
Y2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElz
Tm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0
KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAg
ICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmly
c3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHbG9iYWxWYXI6
Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5k
aXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAg
IGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6
Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQor
ICAgIGF1dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0
dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFz
ZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKICAgICB9OwogCi0gICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qg
c2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDAp
OwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29s
dmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xv
YmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJp
dHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4
aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOwotfQotCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0
YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotI2Vsc2UgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0KLXZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRh
ZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBhdXRvIGNsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1
cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIi
KTsKKyAgICB9OwogCi0gICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICB1aW50MzJfdCBieXRl
Y29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKLSAgICBBU1NFUlQoQnl0ZWNv
ZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQo
bV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5z
dHJ1Y3Rpb24pOworICAgIGF1dG8gZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvciA9IFtdIChW
TSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5r
KHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgZ2VuZXJpYyIp
OworICAgIH07CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0g
cmVnVDI7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1Owog
Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRyX3Qq
IG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9v
cGVyYW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRp
ZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Jm1ldGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNk
ZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9z
Y29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZF
X1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNj
b3BlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0
YUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVH
UFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0
YUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdl
bmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0K
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYg
KHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdl
dENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgY29k
ZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0
b3IpOworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZy
b21TY29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdl
dEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVu
a05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJh
dGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4g
cmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsg
Z2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAv
IEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6
Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
dGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwotCi0gICAgdGFnUmV0
dXJuQWRkcmVzcygpOwotCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRh
ZGF0YUdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKIAotICAgIEp1bXBMaXN0IHNsb3dD
YXNlOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1
cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0
YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDAp
OwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Ci0g
ICAgfTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJl
Z1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKLSAgICBhdXRvIGVt
aXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykg
eworICAgIEp1bXBMaXN0IHNsb3dDYXNlOworCisgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNr
ID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGlmICghbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRP
RihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNo
cG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OworICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0
aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJh
bmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKICAgICAKLSAgICBhdXRv
IGVtaXRHZXRWYXJGcm9tUG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVn
KSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7
Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRHZXRW
YXJGcm9tSW5kaXJlY3RQb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcp
IHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsK
LSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldENs
b3N1cmVWYXIgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIG9wZXJhbmRHUFIpIHsKLSAg
ICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAg
IGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGFkZFB0cihz
Y29wZUdQUiwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BS
LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKLSAg
ICB9OwotCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUs
IGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0g
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0
dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBk
b24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4g
QWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIg
aW5qZWN0aW9uLgotCi0gICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSByZWdUMDsK
LSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7Ci0KLSAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRM
YW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVh
bCwgYmFzZSwgcmVnVDMpOworICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2
YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5n
IGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxl
cyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
U3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJy
YW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVz
cyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29w
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKworICAgICAgICAg
ICAgaml0LmppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAg
eworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaml0LmJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIHJlZ1QzKTsK
ICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mT3BlcmFuZCgpKSwgcmVnVDEpOworCiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQp
IHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRo
YW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwot
ICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7
Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAg
ICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVn
VDEsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAg
IGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAg
ICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVu
ZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChz
Y3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGppdC5uZWczMihyZWdUMSk7CisgICAgICAgICAgICBqaXQuc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgog
ICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBy
ZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAg
ICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAg
ICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAg
ICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fb3BlcmFuZCkpLCByZWdUMyk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZh
cihzY29wZUdQUiwgcmVnVDMpOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJl
Z1QzKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3Rl
cikpOworICAgICAgICAgICAgaml0LmxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgcmVnVDMpOwor
ICAgICAgICAgICAgaml0LmFkZFB0cihzY29wZUdQUiwgcmVnVDMpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFy
aWFibGVzKCkpLCByZWdUMCk7CisKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5
bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0y
MzQxLDg2ICsyMjIzLDYzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0
SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAg
SnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZh
bHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90
R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQu
bGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAg
IH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZv
KSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAgaml0Lmxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkp
LCByZWdUMCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1
bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3Bl
cnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1
ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5i
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAg
ICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVt
cCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAg
ICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBq
aXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
ci5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7
CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQp
OwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9
CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOworICAg
ICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZh
bHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAsIEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkp
OworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6
b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkp
OwogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7
Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9nZXRf
ZnJvbV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29k
ZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBD
b2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmlu
ZSBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVfIyNy
ZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25z
dGV4cHIgKCF0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAg
ICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICBy
ZXR1cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2Vs
aW5lOiBvcF9nZXRfZnJvbV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFD
SF9SRVNPTFZFX1RZUEUoREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBE
RUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2
bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9u
bHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQg
bWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFp
bGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlu
bGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1h
eSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQo
dm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5w
dXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTI0MjksNyArMjI4OCw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICNlbmRpZgogCiAgICAgdXNpbmcgTWV0YWRh
dGEgPSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRh
ZGF0YUdQUiA9IHJlZ1Q3OworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdU
NDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAgICAg
aml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogCkBAIC0yNDQ5LDcgKzIzMDgsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgQ2FsbCBvcGVyYXRpb24gPSBq
aXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBqaXQu
ZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKIAotICAgIGppdC5zdG9yZTY0KHJl
Z1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhH
UFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsg
VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICBqaXQubW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIp
OwogCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTI0NjksODggKzIzMjgsNzcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIHBhdGNoQnVmZmVyLmxpbmsoanVtcFRv
SGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJU
YWcsICJCYXNlbGluZTogc2xvd19vcF9nZXRfZnJvbV9zY29wZSIpOwogfQotI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxl
KEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCog
c2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBl
bWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12
b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NP
Zk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0
V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0
Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEp
OwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xv
c3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci19CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgR2V0UHV0SW5mbyBnZXRQ
dXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3Qq
IG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9v
cGVyYW5kKTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9m
aWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayku
bV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3Zl
cnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0
aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhh
bmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgLy8gU3Ry
dWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0
cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LgorICAgICAgICAgICAg
Ly8gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2
YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOworICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QxKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworCiAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAKICAgICAgICAgICAg
IGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAg
ICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOworICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Cisg
ICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwogICAgICAgICAgICAgbmVnUHRyKHJl
Z1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1Qx
LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgc3Rv
cmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91
dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAg
ICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2Ug
R2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2Nr
KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7Ci0gICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSk7Ci0g
ICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CisgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZl
VHlwZSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDApOworCisg
ICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLmlu
aXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
IHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVj
YXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3Rh
dGljYWxseS4KLSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAg
ICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9j
YXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCksIHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJlZ1QxKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRh
dGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBl
bWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3Qp
LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKworICAg
ICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRO
b3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDEpOworCisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QwKSk7CisKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgog
ICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90
LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1Qw
KTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QwKTsKKyAgICAgICAg
ICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6
Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVX
YXRjaHBvaW50KHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJl
Z1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJbmRleChyZWdUMCwgcmVnVDIs
IFRpbWVzRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSk7
CisKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBA
IC0yNTY0LDU4ICsyNDEyLDUyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnMKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0g
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlw
ZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0ds
b2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1
dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAgICAg
ICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRv
RW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKKyAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzZWVzIENsb3N1cmVWYXIv
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0aGVuIHdlIGNhbiBjb21waWxlIHRo
aW5ncworICAgIC8vIHRoYXQgd2F5IGZvciBhbGwgQ29kZUJsb2Nrcywgc2luY2Ugd2UndmUgcHJv
dmVuIHRoYXQgaXMgdGhlIHR5cGUgd2Ugd2lsbCBiZS4gSWYgd2UncmUgYSBDbG9zdXJlVmFyLAor
ICAgIC8vIGFsbCBDb2RlQmxvY2tzIHdpbGwgYmUgQ2xvc3VyZVZhci4gSWYgd2UncmUgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHdlJ3JlIGFsd2F5cyBDbG9zdXJlVmFyCisgICAg
Ly8gaWYgdGhlIHZhciBpbmplY3Rpb24gd2F0Y2hwb2ludCBpc24ndCBmaXJlZC4gSWYgaXQgaXMg
ZmlyZWQsIHRoZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRoLCBzbyBpdCBkb2Vzbid0CisgICAgLy8g
bWF0dGVyIHdoYXQgdHlwZSB3ZSBhcmUgZHluYW1pY2FsbHkuCisgICAgaWYgKHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcik7Cisg
ICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIpCisg
ICAgICAgIGVtaXRDb2RlKFJlc29sdmVkQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmls
ZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAg
ICAgZW1pdENvZGUoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVsc2Ug
ewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
bV9nZXRQdXRJbmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1QwKTsK
ICAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDAp
OyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eSkpOwogICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBlbWl0
Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
ICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwog
CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7Cisg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxp
bmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBu
b3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhpcyk7CisKICAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
LCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5r
KHRoaXMpOwogCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7CiAKICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIAogICAg
ICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
ZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAg
YnJlYWs7CiAgICAgfQogfQogCkBAIC0yNjI0LDE4ICsyNDY2LDIxIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3Bl
PigpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRl
Y29kZSkucmVzb2x2ZVR5cGUoKTsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7
CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGlm
IChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgICAgICAvLyBJZiBhbnkg
bGlua2VkIENvZGVCbG9jayBzYXcgYSBNb2R1bGVWYXIsIHRoZW4gYWxsIGxpbmtlZCBDb2RlQmxv
Y2tzIGFyZSBndWFyYW50ZWVkCisgICAgICAgIC8vIHRvIGFsc28gc2VlIE1vZHVsZVZhci4KICAg
ICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9l
cnJvcik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAgICAgfSBlbHNlIHsKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0VG9TY29wZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBj
dXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgYXJndW1lbnRH
UFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAgICAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CiAgICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9
PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBB
U1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgp
ID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CkBAIC0yNjUyLDcgKzI0OTcsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNo
KFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTI3MDEsNyArMjU0Niw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RB
cmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQog
CkBAIC0yNzU5LDcgKzI2MDQsNiBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKQEAgLTI3
NjcsNyArMjYxMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb24K
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5h
bEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdU
MCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yODIzLDcgKzI2
NjcsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVudW1lcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CkBAIC0y
ODM5LDExICsyNjgyLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25z
dCAKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgbW9z
dCBjb21tb24gbW9kZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3
ZSBwcm9maWxlIGl0IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9y
TWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7
CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZW51bWVy
YXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9k
ZSkgewogICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVu
dW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQo
YnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKCh+SlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSAmIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCBiYXNlR1BSKTsKKworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BFbnVtZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCks
IHNjcmF0Y2hHUFIpOworICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3RvcmU4
VG9NZXRhZGF0YShzY3JhdGNoR1BSLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yTmV4dDo6TWV0YWRh
dGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOworCiAgICAgICAgIGxvYWQzMihBZGRy
ZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSksIGluZGV4R1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5k
KGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpKSk7CiAKQEAgLTI4ODEsNzggKzI3MzAsODggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
R2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHlOYW1lOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0g
Ynl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKIAotICAgIGF1
dG8gcmVzdWx0R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBC
YXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUVudW1lcmF0
b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlW
YWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSBC
YXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJz
OjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHNj
cmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcHJvcGVy
dHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51
bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wRW51
bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwg
c2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZThUb01l
dGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChiYXNl
R1BSKSk7CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KLSAg
ICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdU
MiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgSnVtcCBpc05vdE93
blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgc2NyYXRjaDMsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVy
ZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7
Ci0gICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywg
QWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBzY3Jh
dGNoMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgc2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gz
MihOb3RFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwogCiAgICAgLy8gQ29tcHV0ZSB0
aGUgb2Zmc2V0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QzKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNoMik7CiAgICAgLy8gSWYgaW5k
ZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0
aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0g
ICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4
KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7Ci0KKyAgICBKdW1wIG91dE9m
TGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2Ny
YXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSkpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CisgICAg
bG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMuYXBw
ZW5kKGp1bXAoKSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91
dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVn
VDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSksIHJlZ1QzKTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVn
VDMsIHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRkcmVzcyhzY3JhdGNoMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2Ny
YXRjaDIpOworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3Jh
dGNoMiwgc2NyYXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJfdCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkgPSBvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkgKiBzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0gICAgbG9hZDY0KEJhc2VJ
bmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJl
c3VsdEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGltZXNF
aWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKICAgICBkb25lQ2FzZXMu
YXBwZW5kKGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOwotICAg
IHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3du
U3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1l
dGFkYXRhKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCBi
eXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0
b3JNZXRhZGF0YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0dXJlTW9kZS5saW5rKHRoaXMpOwot
ICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVk
SW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIEp1bXAg
aXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOwogICAgIC8vIFJlcGxhY2Ug
dGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
ZGV4LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcHJvcGVydHlH
UFIpOwogCiAgICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoMSk7CiAKICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7Ci0gICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1
YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQg
aGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICBkb25lQ2FzZXMubGlu
ayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIApAQCAtMjk2MSwxMCArMjgyMCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJh
dG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7CiB9CiAKLXRlbXBsYXRlIDx0
eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KLXZvaWQg
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhG
dW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5
cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9o
YXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2Up
CiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVt
ZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjk3Myw3ICsyODMxLDkgQEAgdm9p
ZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQogICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwotICAgIG9y
OChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkp
OworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9m
ZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QwLCByZWdU
MSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNvZGUsIEJ5dGVjb2RlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAtMzA2Miw2ICsyOTIyLDEzIEBA
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKICAgICBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4g
PSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3JhdGNoR1BSKG93bmVyKSk7Cisg
ICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xv
d1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5r
KHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI4MzA1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNiw5ICsyMzYsOSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVH
ZXRCeShKCiAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KGJhc2VDZWxsKSkgewogICAgICAgICAg
ICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CiAgICAg
ICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlQ2VsbAotICAgICAgICAg
ICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1Yklu
Zm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgeworICAgICAgICAgICAgICAgICAgICAm
JiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5m
bywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7CiAKLSAgICAgICAgICAgICAgICAgICAg
Ym9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVu
Z3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CisgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVB
cnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxs
KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3RoKGxvY2tlcik7CkBAIC0yNDks
OCArMjQ5LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAg
ICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywg
QWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICB9IGVs
c2UgaWYgKGlzSlNTdHJpbmcoYmFzZUNlbGwpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJ
bmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAg
JiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChzdHViSW5mbykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgICAgICYm
IElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5m
bykpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5s
aW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBw
cm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHViSW5mby5pbml0U3RyaW5nTGVuZ3RoKGxvY2tlcik7CkBAIC0zMDQsNyArMzA0
LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAg
ICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1
Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAgICAgICYm
ICFsb2FkVGFyZ2V0RnJvbVByb3h5KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRD
b2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhzdHVi
SW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBi
b29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3Bl
cnR5QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAg
ICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVNlbGZQYXRjaCwgc3RydWN0dXJl
LT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgp
KSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5j
YWNoZWRPZmZzZXQoKSk7CkBAIC03MzEsMTEgKzczMSwxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVQdXRCeShKCiAgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlLT5kaWRD
YWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hl
VHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5HZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCisg
ICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVy
dHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpCiAgICAg
ICAgICAgICAgICAgICAgICYmICFvbGRTdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoKQogICAgICAgICAgICAgICAgICAgICAmJiAhaXNQcm94eSkgewogICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0g
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9sZFN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wg
Z2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5U2VsZlBhdGNoLCBv
bGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVl
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9j
aywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0
QnlLaW5kLCBwdXRLaW5kKSk7CkBAIC0xMTMyLDcgKzExMzIsNyBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAogICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2Uo
KSA9PSBiYXNlCiAgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCiAgICAg
ICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgp
KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlKTsKKyAgICAgICAg
ICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
U2VsZkluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSk7CiAgICAgICAgICAg
ICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgTE9H
X0lDKChJQ0V2ZW50OjpJbkJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVu
dCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0
dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOwpAQCAtMTU1Miw3ICsxNTUyLDcgQEAgc3RhdGljIHZvaWQgcmV2ZXJ0Q2FsbChW
TSYgdm0sIENhbGxMaW5rSQogCiB2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1i
bHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5mby5mYXN0UGF0aFN0YXJ0KCkp
OworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5n
IENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJbmZvKSk7CiAgICAgCiAgICAg
cmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9u
IDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMsMjQgKzQzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQotewotICAgIENDYWxs
SGVscGVycyBqaXQ7Ci0KLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7Ci0KLSAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQu
cHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwotCi0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJh
dGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7Ci0KLSAgICBqaXQuanVtcFRvRXhjZXB0
aW9uSGFuZGxlcih2bSk7Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uIik7Ci19Ci0KIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0
OwpAQCAtNzcsMjQgKzU5LDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBoYQogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgImhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFjayIpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRI
YW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQotewotICAgIENDYWxsSGVscGVycyBqaXQ7
Ci0KLSNpZiBDUFUoWDg2XzY0KQotICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVzcCk7Ci0jZWxp
ZiBDUFUoQVJNNjQpCi0gICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJS
ZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIpOwotI2VuZGlmCi0KLSAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgY29udGludWF0aW9uID0gaml0Lmp1bXAoKTsKLQotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6
OkV4dHJhQ1RJVGh1bmspOwotICAgIGF1dG8gaGFuZGxlciA9IHZtLmdldENUSVN0dWIoaGFuZGxl
RXhjZXB0aW9uR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNvbnRpbnVhdGlvbiwg
Q29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKLSAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJwb3BU
aHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uIik7Ci19Ci0KIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZt
KQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkBAIC0xMzcsNiArMTAxLDQyIEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2gKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhh
bmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
KworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bS50b3BFbnRyeUZyYW1lKTsKKworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cigmdm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGppdC5wcmVwYXJlQ2FsbE9w
ZXJhdGlvbih2bSk7CisKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uID0gaml0LmNh
bGwoT3BlcmF0aW9uUHRyVGFnKTsKKworICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZt
KTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmso
b3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXIpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRpb24iKTsKK30KKworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhj
ZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisjaWYg
Q1BVKFg4Nl82NCkKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIg
KiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjplc3ApOworI2VsaWYgQ1BVKEFS
TTY0KQorICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIs
IENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNU
SVRodW5rKTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlv
bkdlbmVyYXRvcik7CisgICAgcGF0Y2hCdWZmZXIubGluayhjb250aW51YXRpb24sIENvZGVMb2Nh
dGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAicG9wVGh1bmtTdGFj
a1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
YWdUeXBlPgogaW5saW5lIHZvaWQgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgcG9pbnRlckdQUiwgVGFnVHlwZSB0YWcpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDEyICszNywxMiBAQCBjbGFzcyBWTTsKIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4
Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tHZW5lcmF0b3IoVk0mKTsK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNl
cnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogCiAjZW5kaWYgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IoVk0mKTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0mKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVP
cGVyYW5kc0ZvckNoZWNrcG9pbnQuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRl
ICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGlu
ZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRXJy
b3IuaCIKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKQEAgLTM3MCwxMyArMzcxLDIy
IEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYKICAgICAKICAgICBj
b2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAKKyAgICBpZiAo
Y29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAg
aWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxp
bmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlKSB7CisgICAgICAgICAgICBj
b2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVh
c2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+
aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+aml0TmV4dElu
dm9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
CiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKICAg
ICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJVENvbXBpbGUiLCAo
InRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9jay0+bGxpbnRFeGVj
dXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgSklUV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3Rh
dGUgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbFJlYWR5
UGxhbnNGb3JWTSh2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bk1vZGU6OkJhc2VsaW5lKSk7CisgICAgSklUV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGUg
PSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0ZUFsbFJlYWR5UGxh
bnNGb3JWTSh2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9j
aygpLCBKSVRDb21waWxhdGlvbk1vZGU6OkJhc2VsaW5lKSk7CiAKICAgICBpZiAoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKICAgICAgICAgZGF0YUxvZ0xu
SWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIENvZGUgd2FzIGFscmVhZHkgY29tcGlsZWQu
Iik7CkBAIC00NjYsOCArNDc2LDEwIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQog
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9y
RnV6emluZygpICYmIGNvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bS5nZXRMb29wSGludEV4
ZWN1dGlvbkNvdW50ZXIocGMpOwogICAgICAgICAqcHRyICs9IGNvZGVCbG9jay0+bGxpbnRFeGVj
dXRlQ291bnRlcigpLm1fYWN0aXZlVGhyZXNob2xkOwotICAgICAgICBpZiAoKnB0ciA+PSBPcHRp
b25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkKKyAgICAgICAgaWYgKCpw
dHIgPj0gT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpIHsKKyAg
ICAgICAgICAgIGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShDb25jdXJyZW50SlNMb2NrZXIoY29k
ZUJsb2NrLT5tX2xvY2spKTsgLy8gV2UncmUgcmV0dXJuaW5nIHRvIHRoZSBPU1IgZW50cnkgY29k
ZSBoZXJlLCB3aGljaCBleHBlY3RzIHRoYXQgbV9qaXREYXRhIGlzIG5vdCBudWxsLgogICAgICAg
ICAgICAgTExJTlRfUkVUVVJOX1RXTyhMTEludDo6ZnV6emVyUmV0dXJuRWFybHlGcm9tTG9vcEhp
bnRFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIGNhbGxGcmFtZS0+dG9w
T2ZGcmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTAxMiwxMCAr
MTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFj
cm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAg
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1
cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3Ry
dWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0
c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEsIHQyKQogICAgICAgICBn
ZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0sIElu
dDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8gcHJlT3Aob3Bjb2RlTmFt
ZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGluIHQxLCBzcmNEc3QgaW4g
dDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAgICAgICAgIHN0b3JlaSB0
MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUo
QXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVT
dHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAg
ICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBsbGludE9wV2l0aE1ldGFk
YXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRh
ZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAg
ICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1ldGFkYXRhKHQ1LCB0MCkK
ICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUs
IHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BOZWdhdGVTcmNOb3RJbnQK
ICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MgotICAg
IHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0
aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQzKQogICAgIHJldHVybiAo
SW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJpYSB0MSwgTG93ZXN0VGFn
LCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQotICAgIHVwZGF0ZUFyaXRo
UHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUo
T3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAgIHJldHVybih0MSwgdDIp
CiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAgZW5kKQogCiBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJh
dGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJvZmlsZSh0eXBlKQotICAg
ICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2Zp
bGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAg
ICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMsIHQyKQogICAgICAgICBnZXQo
bV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9y
ZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyhzaXpl
LCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcsIC5vcDFOb3RJbnQKICAg
ICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0gICAgICAgIGFyaXRoUHJvZmls
ZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShv
cGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBnZXQobV9k
c3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDMsIHQxLCB0MCwgLnNs
b3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsxMTI0LDEyIEBAIG1hY3Jv
IGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYmlhIHQyLCBMb3dl
c3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAub3AxTm90SW50T3AyRG91
YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAgICAgICAgYXJpdGhQcm9m
aWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9m
aWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDQpCiAgICAgICAg
IGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFOb3RJ
bnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0gICAgICAgIGFyaXRoUHJv
ZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRo
UHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwgdDUsIHQ0KQog
ICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAgICAgZmlp
MmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9t
U3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRl
bHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBub3QuCiAgICAgICAg
IGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFnLCAuc2xvdwotICAgICAg
ICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAgICB1cGRhdGVCaW5h
cnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnROdW1iZXIsIHQ1LCB0
NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQogICAg
ICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEsMTMgQEAgbWFjcm8gY2hlY2tT
d2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSBQQywgYTEKICAgICAgICAgICAg
IGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBidHB6IHIwLCAucmVjb3Zlcgot
CiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisgICAgICAgICAgICAjIEJhc2VsaW5lIHVzZXMg
TExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFudCBwb29sLgorICAgICAgICAg
ICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6
Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6OkpJVERhdGE6
Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwogICAgICAgICAgICAgaWYgQVJNNjRFCiAgICAg
ICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0Nv
bmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6Omxvb3BPU1JFbnRyeSkgKiBQdHJTaXplLCBh
MgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0Vu
dHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5z
dHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3Qs
IGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFt
ZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBy
ZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAg
ICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBV
bmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQo
bV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQxCiAgICAgICAgIG1l
dGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3MCw3IEBAIG1hY3JvIHByZU9wKG9wY29kZU5h
bWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MSwgLnNsb3cp
CiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3JlcSB0MSwgW2NmciwgdDAs
IDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAg
IHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0
MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTEzNCwxMSArMTEz
NSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUs
IG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotCi0gICAgbWFj
cm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6
TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0MV0K
LSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikKQEAgLTExNDYsMTIgKzEx
NDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLAogICAgIGJ0
aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQzCiAgICAgb3JxIG51
bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAg
IHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0
MikKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAgYnRxeiB0MywgbnVtYmVy
VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAwMDAwMDAsIHQzCi0gICAg
dXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRhdGVVbmFyeUFy
aXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0MSwgdDIpCiAgICAgcmV0
dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE2MCw2IEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGludE9wV2l0aE1ldGFkYXRh
KG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRj
aCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQogCi0gICAgICAg
IG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNb
dDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3JocywgdDApCiAgICAgICAgIGdldCht
X2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQpA
QCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1l
LCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5k
U3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJ
bnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFy
aXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAub3Ax
Tm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3Jl
KG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cKICAgICAg
ICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQotICAgICAgICBwcm9m
aWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQ
cm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDIpCiAg
ICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3AySW50OgotICAgICAg
ICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJp
dGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwgdDIpCiAg
ICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldCht
X2RzdCwgdDIpCkBAIC0xMjA0LDkgKzExOTYsOSBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3Jl
KG9wY29kZU5hbWUsIG9wCiAKICAgICAub3AyTm90SW50OgogICAgICAgICAjIEZpcnN0IG9wZXJh
bmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5pdGVseSBub3QuCi0g
ICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywgLnNsb3cK
LSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUs
IHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAg
ICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20J
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTQyMCw3ICsxNDIwLDggQEAgZW5k
CiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5jcmVtZW50LCBhY3Rpb24pCiAgICAgbG9hZHAg
Q29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgYmFkZGlzIGluY3JlbWVudCwgQ29kZUJsb2NrOjptX2xs
aW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0
MF0sIC5jb250aW51ZQorICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVy
W3QwXSwgdDAKKyAgICBiYWRkaXMgaW5jcmVtZW50LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6
Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgIGFjdGlvbigpCiAgICAgLmNvbnRpbnVlOgog
ZW5kCkBAIC0xNTAzLDcgKzE1MDQsOCBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIs
IGNvZGVCbG9jCiAgICAgY29kZUJsb2NrR2V0dGVyKHQxKQogICAgIGNvZGVCbG9ja1NldHRlcih0
MSkKICAgICBpZiBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQotICAgICAgICBiYWRkaXMgNSwg
Q29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50
ZXI6Om1fY291bnRlclt0MV0sIC5jb250aW51ZQorICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1f
bGxpbnRFeGVjdXRlQ291bnRlclt0MV0sIHQwCisgICAgICAgIGJhZGRpcyA1LCBCYXNlbGluZUV4
ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgICAgICBpZiBKU1ZB
TFVFNjQKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAgICAgICAgbW92ZSBQQywgYTEK
QEAgLTE2MTcsMTQgKzE2MTksMTQgQEAgbWFjcm8gZnVuY3Rpb25Jbml0aWFsaXphdGlvbihwcm9m
aWxlQXJnUwogICAgICMgb3B0aW1hbCB3YXkgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIG1v
cmUgdGhhbiBmaXZlIHJlZ2lzdGVycyBhdmFpbGFibGUKICAgICAjIGZvciBhcmJpdHJhcnkgdXNl
IGluIHRoZSBpbnRlcnByZXRlci4KICAgICBsb2FkaSBDb2RlQmxvY2s6Om1fbnVtUGFyYW1ldGVy
c1t0MV0sIHQwCi0gICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQwICMgVXNlIGFkZGkgYmVjYXVz
ZSB0aGF0J3Mgd2hhdCBoYXMgdGhlIHBlZXBob2xlCisgICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAs
IHQwCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnBndGVxIHQwLCAwLCBvayBlbmQpCiAgICAgYnRw
eiB0MCwgLmFyZ3VtZW50UHJvZmlsZURvbmUKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fYXJndW1l
bnRWYWx1ZVByb2ZpbGVzICsgRml4ZWRWZWN0b3I6Om1fc3RvcmFnZSArIFJlZkNvdW50ZWRBcnJh
eTo6bV9kYXRhW3QxXSwgdDMKICAgICBidHB6IHQzLCAuYXJndW1lbnRQcm9maWxlRG9uZSAjIFdo
ZW4gd2UgY2FuJ3QgSklULCB3ZSBkb24ndCBhbGxvY2F0ZSBhbnkgYXJndW1lbnQgdmFsdWUgcHJv
ZmlsZXMuCiAgICAgbXVscCBzaXplb2YgVmFsdWVQcm9maWxlLCB0MCwgdDIgIyBBYWFhYWhoaGgh
IE5lZWQgc3RyZW5ndGggcmVkdWN0aW9uIQogICAgIGxzaGlmdHAgMywgdDAgIyBvZmZzZXQgb2Yg
bGFzdCBKU1ZhbHVlIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCi0gICAgYWRkcCB0MiwgdDMgIyBw
b2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gQ29kZUJsb2NrOjptX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcy4KKyAgICBhZGRwIHQyLCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9mIFZh
bHVlUHJvZmlsZSBhcnJheSBpbiB0aGUgdmFsdWUgcHJvZmlsZSBhcnJheS4KIC5hcmd1bWVudFBy
b2ZpbGVMb29wOgogICAgIGlmIEpTVkFMVUU2NAogICAgICAgICBsb2FkcSBUaGlzQXJndW1lbnRP
ZmZzZXQgLSA4ICsgcHJvZmlsZUFyZ1NraXAgKiA4W2NmciwgdDBdLCB0MgpAQCAtMjU2Myw2ICsy
NTY1LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQKIAorCittYWNybyB1
cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1w
KQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0
YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVt
cF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0
eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6
Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBCaW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5l
ZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFTU0VNQkxZIHNob3Vs
ZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBub3QgWDg2XzY0X1dJ
TgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmll
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJs
ZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0
OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0gZGVmYXVsdDsKIAog
ICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tQ2VsbChKU0Nl
bGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgY29uc3QgSWRl
bnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5pcXVlZFN0cmluZ0lt
cGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMg
aW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVu
dGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBl
KiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50
aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3RyaW5nSW1wbCopOwog
ICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tUmF3Qml0
cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcihyYXdCaXRz
KTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVu
dGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
aW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJ
ZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUg
Q2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJZGVu
dGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlm
aWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3RlbXBs
YXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKICAg
ICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVudGlmaWVyKHVpZCkp
OwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJDYWNoZWRUeXBlcy5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVk
ZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDYWNoZUVycm9yLmgiCiAjaW5j
bHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCkBAIC0xOTE4LDYgKzE5MTksOCBAQCBw
dWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1WYWx1ZVByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4g
bV9udW1WYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5zaWduZWQgbnVtQXJyYXlQcm9maWxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtQXJyYXlQcm9maWxlczsgfQorICAgIHVuc2lnbmVkIG51bUJpbmFy
eUFyaXRoUHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bUJpbmFyeUFyaXRoUHJvZmlsZXM7
IH0KKyAgICB1bnNpZ25lZCBudW1VbmFyeUFyaXRoUHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBt
X251bVVuYXJ5QXJpdGhQcm9maWxlczsgfQogCiBwcml2YXRlOgogICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX3RoaXNSZWdpc3RlcjsKQEAgLTE5NTIsNiArMTk1NSw4IEBAIHByaXZhdGU6CiAKICAgICB1
bnNpZ25lZCBtX251bVZhbHVlUHJvZmlsZXM7CiAgICAgdW5zaWduZWQgbV9udW1BcnJheVByb2Zp
bGVzOworICAgIHVuc2lnbmVkIG1fbnVtQmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICB1bnNpZ25l
ZCBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsKIAogICAgIENhY2hlZE1ldGFkYXRhVGFibGUgbV9t
ZXRhZGF0YTsKIApAQCAtMjE2MCw2ICsyMTY1LDggQEAgQUxXQVlTX0lOTElORSBVbmxpbmtlZENv
ZGVCbG9jazo6VW5saW5rZQogICAgICwgbV9yYXJlRGF0YShjYWNoZWRDb2RlQmxvY2sucmFyZURh
dGEoZGVjb2RlcikpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bVZh
bHVlUHJvZmlsZXMoKSkKICAgICAsIG1fYXJyYXlQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVt
QXJyYXlQcm9maWxlcygpKQorICAgICwgbV9iaW5hcnlBcml0aFByb2ZpbGVzKGNhY2hlZENvZGVC
bG9jay5udW1CaW5hcnlBcml0aFByb2ZpbGVzKCkpCisgICAgLCBtX3VuYXJ5QXJpdGhQcm9maWxl
cyhjYWNoZWRDb2RlQmxvY2subnVtVW5hcnlBcml0aFByb2ZpbGVzKCkpCiB7CiB9CiAKQEAgLTIz
MzcsNiArMjM0NCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2RlQmxvY2s8Q29kZUIK
ICAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29kZUJsb2NrLm1faGFzQ2hlY2twb2ludHM7CiAgICAg
bV9udW1WYWx1ZVByb2ZpbGVzID0gY29kZUJsb2NrLm1fdmFsdWVQcm9maWxlcy5zaXplKCk7CiAg
ICAgbV9udW1BcnJheVByb2ZpbGVzID0gY29kZUJsb2NrLm1fYXJyYXlQcm9maWxlcy5zaXplKCk7
CisgICAgbV9udW1CaW5hcnlBcml0aFByb2ZpbGVzID0gY29kZUJsb2NrLm1fYmluYXJ5QXJpdGhQ
cm9maWxlcy5zaXplKCk7CisgICAgbV9udW1VbmFyeUFyaXRoUHJvZmlsZXMgPSBjb2RlQmxvY2su
bV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOwogCiAgICAgbV9tZXRhZGF0YS5lbmNvZGUoZW5j
b2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEuZ2V0KCkpOwogICAgIG1fcmFyZURhdGEuZW5jb2Rl
KGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVEYXRhLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19ERUZJTkVfQ09NTU9O
X1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQgdXBk
YXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0YWRh
dGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgVW5hcnlBcml0aFBy
b2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAgICBVbmFyeUFyaXRo
UHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKICAgICBwcm9maWxl
Lm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpIHx8IHJl
c3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGlubGluZSBwdHJk
aWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlv
bkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9CiAgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qg
b2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUmFy
ZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0
T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhl
Y3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlm
Zl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOyB9CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzQsOCArNDM0LDYgQEAgdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25z
KAogICAgIE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpID0gZmFsc2U7CiAjZW5kaWYKIAotICAg
IGlmICghaXNBUk02NCgpKQotICAgICAgICBPcHRpb25zOjp1c2VEYXRhSUMoKSA9IGZhbHNlOwog
ICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCiAgICAgICAgIE9wdGlvbnM6OnVzZURhdGFJ
Q0luT3B0aW1pemluZ0pJVCgpID0gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzA5
LDcgKzMwOSw2IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihJ
bnQzMiwgZXZhbFRocmVzaG9sZE11bHRpcGxpZXIsIDEwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KFVuc2lnbmVkLCBtYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0aCwgMjU2LCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICBcCi0gICAgdihCb29sLCByYW5kb21pemVFeGVjdXRpb25Db3Vu
dHNCZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KElu
dDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yQmFzZWxpbmUs
IDEwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25D
b3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JVcHBlclRpZXJzLCA1MDAwMCwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgXApAQCAtNTMyLDYgKzUzMSw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlG
YXN0TWVtb3J5KCk7CiAgICAgdihCb29sLCB1c2VEYXRhSUMsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCwgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDU2hhcmluZywgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgdXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZywgdHJ1
ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIC8qIEZlYXR1cmUgRmxhZ3MgKi9cCiAg
ICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0
RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsMTAg
KzM5NiwxOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpCiAgICAg
aWYgKE9wdGlvbnM6OnZhbGlkYXRlQnl0ZWNvZGUoKSkKICAgICAgICAgY29kZUJsb2NrLT52YWxp
ZGF0ZSgpOwogCi0gICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpCi0gICAgICAgIHNldHVwTExJ
bnQoY29kZUJsb2NrKTsKLSAgICBlbHNlCi0gICAgICAgIHNldHVwSklUKHZtLCBjb2RlQmxvY2sp
OworICAgIGJvb2wgaW5zdGFsbGVkVW5saW5rZWRCYXNlbGluZUNvZGUgPSBmYWxzZTsKKyNpZiBF
TkFCTEUoSklUKQorICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9
IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkg
eworICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2Vs
aW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBpbnN0YWxsZWRVbmxpbmtlZEJhc2Vs
aW5lQ29kZSA9IHRydWU7CisgICAgfQorI2VuZGlmCisgICAgaWYgKCFpbnN0YWxsZWRVbmxpbmtl
ZEJhc2VsaW5lQ29kZSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSkKKyAgICAg
ICAgICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
c2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CisgICAgfQogCiAgICAgaW5zdGFsbENvZGUodm0sIGNv
ZGVCbG9jaywgY29kZUJsb2NrLT5jb2RlVHlwZSgpLCBjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9u
S2luZCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRp
ZXJVcENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNTIsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKCkK
ICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9CQlEoKSkKLSAg
ICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6
ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9w
dGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdP
cHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNo
b2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAg
fQogCiAgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCkBAIC02
NSw5ICs2NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplU29vbigpCiAgICAgewogICAg
ICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0gICAgICAgICAgICBz
ZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29uKCksIG51
bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZv
ckJCUU9wdGltaXplU29vbigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0TmV3VGhy
ZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRp
bWl6ZVNvb24oKSk7CiAgICAgfQogCiAgICAgc3RydWN0IE9TUkVudHJ5RGF0YSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5jcHAJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3Vu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKIAogVGllclVwQ291bnQ6OlRpZXJVcENvdW50KCkKIHsKLSAgICBzZXRO
ZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgp
LCBudWxscHRyKTsKKyAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01H
T3B0aW1pemVBZnRlcldhcm1VcCgpKTsKIH0KIAogVGllclVwQ291bnQ6On5UaWVyVXBDb3VudCgp
ID0gZGVmYXVsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBD
b3VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVy
VXBDb3VudC5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGllclVwQ291bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgp
CiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0
aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuIik7Ci0gICAgICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVw
KCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xk
Rm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNoZWNrSWZP
cHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKQEAgLTkwLDE0ICs5MCwxNCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgp
CiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksIGZ1bmN0
aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi4iKTsKLSAgICAgICAg
c2V0TmV3VGhyZXNob2xkKDAsIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCk7
CiAgICAgfQogCiAgICAgdm9pZCBvcHRpbWl6ZVNvb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkK
ICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgZnVuY3Rp
b25JbmRleCwgIjogT01HLW9wdGltaXppbmcgc29vbi4iKTsKICAgICAgICAgLy8gRklYTUU6IE5l
ZWQgYWRqdXN0bWVudCBvbmNlIHdlIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdhc20gZnVu
Y3Rpb25zLgotICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01H
T3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9u
czo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAogICAgIHZvaWQgc2V0
T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE1IEBACisyMDIxLTA5LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisg
ICAgICAgIEJ1aWxkIGFuIHVubGlua2VkIGJhc2VsaW5lIEpJVAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjIzCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS84MjMyMTc3Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisg
ICAgICAgICogd3RmL0JhZy5oOgorICAgICAgICAqIHd0Zi9QYWNrZWQuaDoKKyAgICAgICAgKFdU
Rjo6UGFja2VkQWxpZ25lZFB0cjo6b3BlcmF0b3IqIGNvbnN0KToKKwogMjAyMS0wOS0yNCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHR5cGVjaGVja2lu
ZyBgaXNgIG92ZXJsb2FkcyBmb3IgYHN0ZDo6dW5pcXVlX3B0cmAsIGBXVEY6OlVuaXF1ZVJlZmAs
IGFuZCBgV1RGOjpXZWFrUHRyYApJbmRleDogU291cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9X
VEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwyMCBAQCBwdWJsaWM6CiAg
ICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KKyAgICBCYWcmIG9wZXJhdG9yPShCYWc8VCwgVT4mJiBvdGhlcikKKyAgICB7Cisg
ICAgICAgIGlmICh1bndyYXBwZWRIZWFkKCkgPT0gb3RoZXIudW53cmFwcGVkSGVhZCgpKQorICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgICAgIEJhZyBkZXN0cm95OworICAgICAgICBk
ZXN0cm95Lm1faGVhZCA9IHVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgbV9oZWFkID0gb3RoZXIu
dW53cmFwcGVkSGVhZCgpOworICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOworCisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICB+QmFnKCkKICAgICB7CiAgICAgICAgIGNs
ZWFyKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9QYWNrZWQuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL1dURi93dGYv
UGFja2VkLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYsMTAgQEAgcHVibGljOgogICAg
IH0KIAogICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQotICAgIFQm
IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQorCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFUgPSBUPgorICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3ZvaWRf
djxVPiwgVSY+Ojp0eXBlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQorCiAg
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhZ2V0KCk7IH0KIAogICAgIC8vIFRo
aXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29s
IGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVu
LWpzYy1zdHJlc3MtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cwkocmV2aXNpb24gMjgzMDUzKQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtODYzLDcgKzg2Myw3IEBAIGRlZiBydW5GVExO
b0NKSVROb0FjY2Vzc0lubGluaW5nKCpvcHRpb24KIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUU21h
bGxQb29sKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJmdGwtbm8tY2pp
dC1zbWFsbC1wb29sIiwgIi0taml0TWVtb3J5UmVzZXJ2YXRpb25TaXplPTEwMjQwMCIsICooRlRM
X09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMp
KQorICAgIHJ1bigiZnRsLW5vLWNqaXQtc21hbGwtcG9vbCIsICItLWppdE1lbW9yeVJlc2VydmF0
aW9uU2l6ZT0yMDI0MDAiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuTm9DSklUKCpvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpCkBAIC0xMTcxLDcgKzExNzEsNyBAQCBkZWYgZGVmYXVsdFJ1bk1v
ZHVsZXMobm9MTEludDogdHJ1ZSkKICAgICBydW4oImZ0bC1uby1jaml0LW5vLWlubGluZS12YWxp
ZGF0ZS1tb2R1bGVzIiwgIi1tIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0tbWF4aW11bUlu
bGluaW5nRGVwdGg9MSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQogICAgIHJ1
bigiZnRsLWVhZ2VyLW1vZHVsZXMiLCAiLW0iLCAqKEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9O
UykpCiAgICAgcnVuKCJmdGwtZWFnZXItbm8tY2ppdC1tb2R1bGVzIiwgIi1tIiwgIi0tdmFsaWRh
dGVHcmFwaD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIEVBR0VSX09Q
VElPTlMpKQotICAgIHJ1bigiZnRsLW5vLWNqaXQtc21hbGwtcG9vbC1tb2R1bGVzIiwgIi1tIiwg
Ii0taml0TWVtb3J5UmVzZXJ2YXRpb25TaXplPTEwMjQwMCIsICooRlRMX09QVElPTlMgKyBOT19D
SklUX09QVElPTlMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtc21hbGwtcG9vbC1tb2R1bGVzIiwg
Ii1tIiwgIi0taml0TWVtb3J5UmVzZXJ2YXRpb25TaXplPTIwMjQwMCIsICooRlRMX09QVElPTlMg
KyBOT19DSklUX09QVElPTlMpKQogZW5kCiAKIGRlZiBub05vTExJbnRSdW5Nb2R1bGVzCg==
</data>
<flag name="commit-queue"
          id="462837"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439237</attachid>
            <date>2021-09-24 23:02:11 -0700</date>
            <delta_ts>2021-09-24 23:29:39 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>652199</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzOCBA
QAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGFkZHMgYW4gInVubGlua2VkIiBiYXNlbGluZSBKSVQgdG8gSlNWQUxVRTY0
IHBsYXRmb3Jtcy4gVGhlIEpJVAorICAgICAgICBjb2RlIHByb2R1Y2VkIGJ5IHRoaXMgYmFzZWxp
bmUgSklUIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBhbGwgQ29kZUJsb2NrcyB0aGF0CisgICAgICAg
IHNoYXJlIGFuIFVubGlua2VkQ29kZUJsb2NrLiBUaGUgYmVuZWZpdCBvZiB0aGlzIGlzLCBpZiB3
ZSdyZSBjcmVhdGluZyBhIENvZGVCbG9jaworICAgICAgICBmcm9tIGFuIFVubGlua2VkQ29kZUJs
b2NrIHRoYXQgYWxyZWFkeSBjb21waWxlZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAg
ICAgaW5zdGFuY2UsIHRoaXMgbmV3IENvZGVCbG9jayBqdXN0IHN0YXJ0cyBvZmYgZXhlY3V0aW5n
IGluIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgImZvciBmcmVlIi4KKyAgICAgICAgCisgICAg
ICAgIFRvIG1ha2UgdGhpcyB3b3JrLCB0aGUgY29kZSB3ZSBlbWl0IG5vdyBuZWVkcyB0byBiZSBp
bmRlcGVuZGVudCBvZiBhIHNwZWNpZmljCisgICAgICAgIENvZGVCbG9jayBpbnN0YW5jZS4gV2Ug
dXNlIGEgQ29kZUJsb2NrIGluc3RhbmNlIGZvciBtaW5pbWFsIHByb2ZpbGluZyBpbmZvcm1hdGlv
bgorICAgICAgICB3aGVuIGNvbXBpbGluZywgYnV0IG90aGVyd2lzZSwgdGhlIGNvZGUgaXMgdGll
ZCB0byB0aGUgVW5saW5rZWRDb2RlQmxvY2suIFdoZW4KKyAgICAgICAgd2UgbmVlZCBDb2RlQmxv
Y2sgc3BlY2lmaWMgaW5mb3JtYXRpb24sIHdlIGxvYWQgaXQuIFRoaXMgdXN1YWxseSBtZWFucyB0
aGluZ3MKKyAgICAgICAgbGlrZSB3ZSdsbCBsb2FkIHRoaW5ncyBmcm9tIHRoZSBNZXRhZGF0YSBk
eW5hbWljYWxseS4gVGhpcyBwYXRjaCBhbHNvIGFkZHMgYQorICAgICAgICAibGlua2VkIGNvbnN0
YW50IHBvb2wiIGNvbmNlcHQsIGFuZCBhbnl0aW1lIHdlIGluc3RhbnRpYXRlIHN1Y2ggYSBDb2Rl
QmxvY2ssCisgICAgICAgIHdlIGFsc28gbmVlZCB0byBpbnN0YW50aWF0ZSB0aGlzICJsaW5rZWQg
Y29uc3RhbnQgcG9vbCIuIFRoaXMgY29udGFpbnMgdGhpbmdzCisgICAgICAgIGxpa2Ugb3VyIGlu
bGluZSBjYWNoZSBkYXRhIHN0cnVjdHVyZXMgKFN0cnVjdHVyZVN0dWJJbmZvKiksIEpTR2xvYmFs
T2JqZWN0KiwKKyAgICAgICAgZXRjLgorICAgICAgICAKKyAgICAgICAgVW5saW5rZWQgYmFzZWxp
bmUgSklUIGFsd2F5cyBydW5zIElDcyBpbiB0aGUgImRhdGEiIG1vZGUuIFRvIG1ha2UgdGhpcyB3
b3JrLCBJCisgICAgICAgIG1hZGUgZGF0YSBJQ3Mgd29yayBvbiB4ODZfNjQuIFRvIGRvIHRoaXMs
IHdlIG5vIGxvbmdlciBjYWxsL3JldCB0byB0aGUgSUMuCisgICAgICAgIEluc3RlYWQsIHdlIGp1
bXAgdG8gdGhlIElDLCBhbmQgdGhlIElDIGp1bXBzIGJhY2sgYnkgbG9hZGluZyB0aGUgImRvbmUi
IGxvY2F0aW9uCisgICAgICAgIGZyb20gdGhlIFN0cnVjdHVyZVN0dWJJbmZvIGR5bmFtaWNhbGx5
LiBUaGlzIHNpbXBsaWZpZXMgdGhlIGRlc2lnbiB0byBub3QgYmUKKyAgICAgICAgYmFzZWQgb24g
dGhlIGFybTY0IGNhbGxpbmcgY29udmVudGlvbiwgYW5kIGtlZXBzIHRoZSBzYW1lIHBlcmZvcm1h
bmNlIGNoYXJhY3RlcmlzdGljcy4gCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsc28g
YWRkcyBhIG5ldyB2ZXJzaW9uIG9mIElubGluZUFjY2VzcyB0aGF0IGlzIG9ubHkgdXNlZCBpbiBi
YXNlbGluZQorICAgICAgICBKSVQgKGZvciBub3cpLiBJbiB0aGUgZnV0dXJlLCB3ZSBjYW4gbWFr
ZSB0aGUgREZHL0ZUTCBhbHNvIHVzZSB0aGlzIGZvciBEYXRhCisgICAgICAgIElDcy4gQnV0IHdl
IGRvbid0IG5lZWQgdG8gZG8gdGhhdCB5ZXQgc2luY2UgdGhvc2UgdGllcnMgZG9uJ3QgdXNlIGRh
dGEgSUNzIGJ5CisgICAgICAgIGRlZmF1bHQuIFRoZSBiYXNlbGluZSBKSVQgbm93IGhhcyBhIHB1
cmUgZGF0YSBJQyBhcHByb2FjaCB0byBJbmxpbmVBY2Nlc3MuIFNvCisgICAgICAgIGluc3RlYWQg
b2YgcmVwYXRjaGluZyBjb2RlLCB3ZSByZXBhdGNoIGZpZWxkcyB3ZSBsb2FkIGR5bmFtaWNhbGx5
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGNsZWFucyB1cCBhIGZldyB0aGlu
Z3MgaW4gT1NSIGV4aXQsIHdoZXJlIGJvdGggREZHL0ZUTCB3ZXJlCisgICAgICAgIHN0b3Jpbmcg
Y2FsbGVlIHNhdmVzIHRvIHRoZSBjYWxsZWUgc2F2ZXMgYnVmZmVyIGluIGEgd2VpcmQgcGxhY2Us
IGFuZCBzZXBhcmF0ZQorICAgICAgICBmcm9tIG9uZSBhbm90aGVyLiBJIG5vdGljZWQgdGhpcyBj
b2RlIGNhbiBiZSBzaW1wbGlmaWVkIGlmIHdlIGp1c3Qgc3RvcmUKKyAgICAgICAgY2FsbGVlIHNh
dmVzIGF0IHRoZSBlbmQgb2YgdGhlIE9TUiBleGl0IGhhbmRsZXIsIGFuZCBmcm9tIGNvbW1vbiBK
SVQgZW1pc3Npb24KKyAgICAgICAgY29kZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBmaXhlcyBhIGJ1ZyB3aGVyZSB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGUgd3JvbmcgKGFu
ZCBhbHdheXMKKyAgICAgICAgbW9yZSBuZWdhdGl2ZSkgU1AgaW4gdGhlIGJhc2VsaW5lIEpJVC4g
VGhpcyBjb3VsZCBoYXBwZW4gd2hlbiB3ZSBPU1IgZXhpdAorICAgICAgICBmcm9tIGFuIGlubGlu
ZWQgZ2V0dGVyL3NldHRlci4gVGhlIE9TUiBleGl0IGNvZGUgcHV0cyB0aGUgcmV0dXJuIFBDIHdo
ZW4KKyAgICAgICAgcmV0dXJuaW5nIHRvIHRoZSBjYWxsIHNpdGUgb2YgdGhlIGdldHRlci9zZXR0
ZXIgdG8gYmUgdGhlIGlubGluZSBjYWNoZSdzCisgICAgICAgICJkb25lIGxvY2F0aW9uIi4gSG93
ZXZlciwgdGhpcyAiZG9uZSBsb2NhdGlvbiIgZGlkbid0IHVzZWQgdG8gcmVzdG9yZSBTUC4KKyAg
ICAgICAgVGhpcyBwYXRjaCBjb25zZXJ2YXRpdmVseSBtYWtlcyBpdCBzbyB0aGF0IHdlIHJlc3Rv
cmUgdGhlIFNQIGF0IHRoZXNlIHNpdGVzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBtZWFz
dXJlZCBhcyBhIDElIHNwZWVkdXAgb24gU3BlZWRvbWV0ZXIyLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVPcGVy
YW5kc0ZvckNoZWNrcG9pbnQuaDoKKyAgICAgICAgKEpTQzo6dmFsdWVQcm9maWxlT2Zmc2V0Rm9y
KToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpD
YWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86
OmVtaXRGYXN0UGF0aEltcGwpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCk6CisgICAgICAgIChK
U0M6OkNhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyk6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmg6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c2xvd1N0
dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmFkZHJlc3NPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpmcmFtZVJlZ2lzdGVyQ291bnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJpbmFyeUFy
aXRoUHJvZmlsZUZvclBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmFyeUFyaXRoUHJv
ZmlsZUZvclBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kUEMpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdFNvb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdE5l
eHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNo
ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVEFkZElDKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRNdWxJQyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUU3ViSUMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpqaXRBZnRlcldhcm1VcCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25z
dGFudFBvb2wpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNlbGluZUpJVENvbnN0YW50UG9vbCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmRvbnRKSVRBbnl0aW1lU29vbik6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6bGxpbnRFeGVjdXRlQ291bnRlciBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZHJlc3NPZk51bVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmlzS25vd25DZWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjphZGRNYXRoSUMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldEpJVENvZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdENv
ZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN3aXRjaEp1bXBUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3RyaW5nU3dpdGNoSnVtcFRh
YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6aml0Q29kZU1hcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFz
ZWxpbmVTd2l0Y2hKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJhc2VsaW5l
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdTd2l0
Y2hKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRmZ1N0cmluZ1N3aXRjaEp1
bXBUYWJsZSk6CisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwOgorICAgICAgICAoSlND
OjpFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OnNldFRocmVzaG9sZCk6CisgICAg
ICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRp
b25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlk
TWV0YWRhdGEuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3Ro
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRh
dGE6Om9mZnNldE9mTW9kZSk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRT
aXRlRmVlZGJhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0
dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
SW5CeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2spOgor
ICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OklubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoSlNDOjpJbmxp
bmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKToKKyAgICAgICAgKEpT
Qzo6SW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5saW5l
QWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aCk6CisgICAgICAgIChKU0M6OklubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZkluQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2Nlc3MpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnJlc2V0
U3R1YkFzSnVtcEluQWNjZXNzKToKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuaDoK
KyAgICAgICAgKiBieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaDoKKyAgICAgICAgKEpT
Qzo6SXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rlcyk6CisgICAgICAgICog
Ynl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6TExJbnRDYWxsTGlu
a0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKToKKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUu
aDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6c3VjY2VlZCk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0dlbmVyYXRpb25TdGF0ZTo6Y2FsY3VsYXRlTGl2ZVJlZ2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRp
b25IYW5kbGluZyk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2Vy
dmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucyk6CisgICAgICAg
IChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDoKKyAgICAgICAg
KEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5m
bzo6aW5pdEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Omlu
aXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0
SW5CeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3ND
YXNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJlc2V0KToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkRv
bmVMb2NhdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6cHJpbnRTdXBlclNhbXBsZXJTdGF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRl
bnRpZmllcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JK
SVQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9m
aWxlcyk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25BdCBjb25zdCk6CisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjppbnN0cnVjdGlvbnNTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6Omxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJu
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzZXQp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YmluYXJ5QXJpdGhQcm9maWxlKToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnVuYXJ5QXJpdGhQcm9maWxlKToKKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZE1ldGFkYXRhVGFibGU6Om9mZnNldEluTWV0YWRhdGFUYWJsZSk6CisgICAgICAgICog
Ynl0ZWNvZGUvVmFsdWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUJhc2U6
OlZhbHVlUHJvZmlsZUJhc2UpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNlOjpjbGVh
ckJ1Y2tldHMpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNr
ZXQpOgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmg6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmg6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6
CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVw
YXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6aGFuZGxlRXhpdENvdW50cyk6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMpOgorICAgICAgICAoSlNDOjpERkc6
OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1
bXBUb1RhcmdldCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dFByaXZhdGVOYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlQWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlU3ViKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlTmVnYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlTXVsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
Z1NoYWRvd0NoaWNrZW5UYWlsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEpJVENvZGUu
aDoKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmFkZE1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVVbmFyeU1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVCaW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUHV0UHJpdmF0ZU5hbWUpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAg
ICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21w
aWxlU3R1Yik6CisgICAgICAgICogZ2VuZXJhdG9yL01ldGFkYXRhLnJiOgorICAgICAgICAqIGpp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0
b3JlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFs
Q2FsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0
aG91dE1vdmluZ0dsb2JhbE9iamVjdCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5o
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hdGhJQ0hvbGRlcjo6YWRkSklUQWRkSUMpOgorICAg
ICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKToKKyAgICAgICAgKEpTQzo6TWF0
aElDSG9sZGVyOjphZGRKSVRTdWJJQyk6CisgICAgICAgIChKU0M6Ok1hdGhJQ0hvbGRlcjo6YWRk
SklUTmVnSUMpOgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyk6Cisg
ICAgICAgIChKU0M6OkJhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKToKKyAgICAgICAg
KEpTQzo6QmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKToKKyAgICAgICAgKiBqaXQv
QmFzZWxpbmVKSVRDb2RlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6
OmFkZCk6CisgICAgICAgIChKU0M6OkpJVENvbnN0YW50UG9vbDo6c2l6ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpJVENvbnN0YW50UG9vbDo6YXQgY29uc3QpOgorICAgICAgICAqIGppdC9CYXNl
bGluZUpJVFBsYW4uY3BwOgorICAgICAgICAoSlNDOjpCYXNlbGluZUpJVFBsYW46OmZpbmFsaXpl
KToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Q0NhbGxI
ZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwpOgorICAgICAgICAoSlNDOjpD
Q2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KToKKyAgICAgICAgKiBqaXQv
Q0NhbGxIZWxwZXJzLmg6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmg6CisgICAgICAgICog
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZs
ZXI6OkNhbGxGcmFtZVNodWZmbGVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OnByZXBhcmVGb3JUYWlsQ2FsbCk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVyLmg6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzbmFwc2hvdCBjb25zdCk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhclJl
YWRPbmx5Q2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNl
dCk6CisgICAgICAgIChKU0M6OkpJVDo6cmVzZXRTUCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRD
b25zdGFudFBvb2xSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAoSlNDOjpKSVQ6OmZp
bmFsaXplT25NYWluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKToKKyAgICAgICAgKEpT
Qzo6SklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAg
ICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZWdhdGUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfYWRkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElD
RmFzdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZGl2KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX211bCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zdWIpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2FsbFJlc3VsdCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxs
RXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlND
OjpKSVRDb2RlOjp1c2VEYXRhSUMpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpwY1RvQ29kZU9y
aWdpbk1hcCk6CisgICAgICAgICogaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9KSVRD
b21waWxhdGlvbktleS5oOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6SklUQ29t
cGlsYXRpb25LZXkpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6b3BlcmF0b3Ih
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJh
dG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6aGFzaCBjb25z
dCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojpwcm9maWxlZEJsb2NrIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUp
OgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6SklU
R2V0QnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmdlbmVyYXRlR2V0QnlJZElubGluZUFj
Y2Vzcyk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
UHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklURGVsQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAg
ICAoSlNDOjpKSVREZWxCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAgICAg
KEpTQzo6SklUSW5CeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAgIChK
U0M6OkpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVEdldEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgor
ICAgICAgICAoSlNDOjpKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhdGgpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KToKKyAg
ICAgICAgKEpTQzo6SklUOjppc0tub3duQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0Q29u
c3RhbnRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKToKKyAgICAgICAgKEpTQzo6SklUOjps
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6YWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6SklUOjpqdW1wVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6SklUOjps
b2FkUHRyRnJvbU1ldGFkYXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkMzJGcm9tTWV0YWRh
dGEpOgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKToKKyAgICAgICAgKEpT
Qzo6SklUOjpzdG9yZThUb01ldGFkYXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpzdG9yZTMyVG9N
ZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmxvYWRHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29waWVkR2V0UHV0SW5mbyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpJVDo6Y29waWVkQXJpdGhQcm9maWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3Yp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lu
c3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZCk6CisgICAgICAg
IChKU0M6OkpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9m
dW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6dmFsdWVJc0ZhbHNleUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnZhbHVlSXNUcnV0aHlH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAo
SlNDOjpKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAo
SlNDOjpKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfamVx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbmVxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19yZWdleHApOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3
RnVuY0V4cHJDb21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9hcmd1bWVudCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29m
KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25l
d19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0
YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90eXBlb2ZfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9m
dW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251bGwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BFcUp1bXBTbG93KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1lcmljKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3N3aXRjaF9jaGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRj
aF9zdHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdG9fdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAq
IGppdC9KSVRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6SklUUGxhbjo6a2V5KToKKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAg
IChKU0M6OkpJVDo6c2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1l
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAg
ICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3B1dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjpzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2Rl
bF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
bl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRIYXNQcml2YXRlU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX3By
aXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVf
YnJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmspOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3Rv
X3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX2Fy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFs
VmFyaWFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xvc3Vy
ZVZhcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9wcml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9w
cml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJh
bmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9pbl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQcml2YXRlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZVNsb3cpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfZnJvbV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVy
bmFsX2ZpZWxkKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRy
eUNhY2hlR2V0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5KToKKyAgICAgICAgKEpT
Qzo6dHJ5Q2FjaGVJbkJ5KToKKyAgICAgICAgKEpTQzo6dW5saW5rQ2FsbCk6CisgICAgICAgICog
aml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmhhbmRsZUV4Y2VwdGlvbkdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OnBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVF
eGNlcHRpb25HZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuaDoKKyAg
ICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50Ojpq
aXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9T
TE9XX1BBVEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5
cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpudW1CaW5hcnlBcml0aFBy
b2ZpbGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpudW1VbmFyeUFy
aXRoUHJvZmlsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2Nr
VHlwZT46OmVuY29kZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgor
ICAgICAgICAoSlNDOjp1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3ApOgorICAgICAg
ICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICogcnVudGltZS9PcHRp
b25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9u
cyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
U2NyaXB0RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnBy
ZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludFRpZXJVcENv
dW50ZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpvcHRpbWl6
ZUFmdGVyV2FybVVwKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpv
cHRpbWl6ZVNvb24pOgorICAgICAgICAqIHdhc20vV2FzbVRpZXJVcENvdW50LmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6OlRpZXJVcENvdW50KToKKyAgICAgICAgKiB3YXNt
L1dhc21UaWVyVXBDb3VudC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6b3B0
aW1pemVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50OjpvcHRp
bWl6ZU5leHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6Om9w
dGltaXplU29vbik6CisKIDIwMjEtMDktMjMgIFBoaWxpcCBDaGltZW50byAgPHBjaGltZW50b0Bp
Z2FsaWEuY29tPgogCiAgICAgICAgIFZhcmlvdXMgdHdlYWtzIGluIHByZXBhcmF0aW9uIGZvciBU
ZW1wb3JhbC5JbnN0YW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTYxMSw2ICs2MTEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBCiAgICAgYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKICAgICBidWls
dGlucy9CdWlsdGluVXRpbHMuaAogCisgICAgYnl0ZWNvZGUvQXJpdGhQcm9maWxlLmgKICAgICBi
eXRlY29kZS9BcnJheUFsbG9jYXRpb25Qcm9maWxlLmgKICAgICBieXRlY29kZS9BcnJheVByb2Zp
bGUuaAogICAgIGJ5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMuaApAQCAtODM3LDYgKzgzOCw3
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKIAogICAgIGppdC9B
c3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oCisgICAg
aml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVycy5oCiAgICAgaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVtb3J5SGFuZGxlLmgKQEAg
LTg3NSw2ICs4NzcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
CiAgICAgcGFyc2VyL1BhcnNlckVycm9yLmgKICAgICBwYXJzZXIvUGFyc2VyTW9kZXMuaAogICAg
IHBhcnNlci9QYXJzZXJUb2tlbnMuaAorICAgIHBhcnNlci9SZXN1bHRUeXBlLmgKICAgICBwYXJz
ZXIvU291cmNlQ29kZS5oCiAgICAgcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgKICAgICBwYXJzZXIv
U291cmNlUHJvdmlkZXJDYWNoZS5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTYxOSw2ICs2MTksNyBAQCBpbnRlcnByZXRlci9TaGFkb3dDaGlja2Vu
LmNwcAogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAogCiBqaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAoraml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKIGppdC9CYXNlbGluZUpJVFBsYW4uY3BwCiBq
aXQvQmluYXJ5U3dpdGNoLmNwcAogaml0L0NDYWxsSGVscGVycy5jcHAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtOTAwLDYgKzkwMCw3IEBACiAJCTUyQ0QwRjVEMjI0MkY1NjkwMDRBMThBNSAvKiBG
b3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1l
d29yayAqLzsgfTsKIAkJNTJDRDBGNUUyMjQyRjU2OTAwNEExOEE1IC8qIEphdmFTY3JpcHRDb3Jl
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsg
Ki87IH07CiAJCTUyQ0QwRjY4MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0QwRjY3MjI0MkY3MUMw
MDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLzsgfTsKKwkJNTJERDAwMDgyNkUwMzlCOTAwNTRFNDA4
IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyRUVE
Nzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFRUQ3OTMyNDkyQjg2ODAwOEY0Qzkz
IC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRD
QyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIwMDI2QTU0
NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNl
My1tbS5tbSAqLzsgfTsKQEAgLTEyMjAsNyArMTIyMSw3IEBACiAJCTc5ODcyQzQ4MjIxQkJBRjMw
MDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFzZUludGVy
bmFsLmggKi87IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5N
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVG
N0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTc5QTIyODM2MUQz
NUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFBy
b2ZpbGUuaCAqLzsgfTsKKwkJNzlBMjI4MzYxRDM1RDcxRjAwRDhFMDY3IC8qIEFyaXRoUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMjI4
MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUJCMTdFMUU1Q0NCNTcwMDQ1QjlBNiAv
KiBBaXJEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QUJCMTdDMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUFDMzBG
RjFGOTk1MzY0MDA0ODRGRDcgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFDMzBGRTFGOTk1
MzYzMDA0ODRGRDcgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmggKi87IH07CiAJ
CTc5QUYwQkU0MUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUYwQkUzMUQzRUZE
NEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzY3NCw2ICszNjc1LDggQEAKIAkJNTJD
RDBGNjQyMjQyRjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBwYXRoID0g
ZGZnL3Rlc3RkZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQxMzA4RjIy
MUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNjI2
RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2Vs
aW5lSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNzI2RTAz
OUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJh
c2VsaW5lSklUQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzky
MjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGdW5jdGlvbkFsbG93bGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyRUVENzkzMjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGdW5jdGlvbkFsbG93bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI3Niw2ICs2Mjc5LDggQEAKIAkJCQk2
Qjc2N0U3QTI2NzkxRjI3MDAxN0Y4RDEgLyogQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaCAqLywK
IAkJCQk3MjM5OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLywK
IAkJCQk3MjM5OThGNTI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8sCisJ
CQkJNTJERDAwMDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8sCisJ
CQkJNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovLAogCQkJ
CTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBG
NjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4Mzky
RDFCQUNBOUQzMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApAQCAtOTczMCw2ICs5
NzM1LDcgQEAKIAkJCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRB
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Zs
dXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDgg
LyogQmFzZWxpbmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJF
MDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlDQzg5
MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTM4NkZEN0UyNkU4NjdCODAwRTRDMjhCIC8qIFRlbXBvcmFsUGxhaW5UaW1lLmggaW4gSGVhZGVy
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDE1ICsyMDIsMTUgQEAgUmVm
UHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmZyb21TdHJ1YwogICAgIHN3aXRjaCAoc3R1Yklu
Zm8uY2FjaGVUeXBlKCkpIHsKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7Ci0gICAg
ICAgIHJldHVybiBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBMb2FkLCBp
ZGVudGlmaWVyLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIFByb3h5YWJsZUFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRT
ZWxmT2Zmc2V0LCBzdHViSW5mby5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAg
ICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7Ci0gICAgICAgIHJldHVybiBBY2Nlc3ND
YXNlOjpjcmVhdGUodm0sIG93bmVyLCBSZXBsYWNlLCBpZGVudGlmaWVyLCBzdHViSW5mby51LmJ5
SWRTZWxmLm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIFJlcGxhY2Us
IGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsK
LSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIEluSGl0LCBpZGVu
dGlmaWVyLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIEluSGl0LCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNldCwg
c3R1YkluZm8uaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBDYWNo
ZVR5cGU6OkFycmF5TGVuZ3RoOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXND
b25zdGFudElkZW50aWZpZXIpOwpAQCAtMTk4NSwxNCArMTk4NSwxMCBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20g
Z2V0dGVycy9zZXR0ZXJzLgogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2Fs
bDsKIAorCiAgICAgICAgIC8vIFRoaXMgYWxzbyBkb2VzIHRoZSBuZWNlc3NhcnkgY2FsY3VsYXRp
b25zIG9mIHdoZXRoZXIgb3Igbm90IHdlJ3JlIGFuCiAgICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5k
bGluZyBjYWxsIHNpdGUuCi0gICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygp
KQotICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lzdGVy
czo6bHIpOwotI2VuZGlmCi0gICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0
ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwo
ZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsKKyAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRl
OjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0
YWNrRm9yQ2FsbCgpOwogCiAgICAgICAgIGF1dG8gcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3Rh
Y2tGb3JDYWxsID0gWyZdKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSYgc3BpbGxT
dGF0ZSwgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUpIHsKICAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IGRvbnRSZXN0b3JlOwpAQCAtMjA3OSw4ICsyMDc1LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgQVNTRVJUKCEobnVtYmVyT2ZSZWdzRm9y
Q2FsbCAlIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpKTsKICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mQnl0ZXNGb3JDYWxsID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdp
c3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CiAKLSAgICAgICAgICAgIHVuc2lnbmVk
IGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0gICAgICAgICAgICBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7
CisgICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPSBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVz
Rm9yQ2FsbCk7CiAKICAgICAgICAgICAgIGppdC5zdWJQdHIoCiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKQEAg
LTIxMzgsNiArMjEzMyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dl
bmUKIAogICAgICAgICAgICAgaW50IHN0YWNrUG9pbnRlck9mZnNldCA9IChjb2RlQmxvY2stPnN0
YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzdGF0ZS5wcmVzZXJ2ZWRS
ZXVzZWRSZWdpc3RlclN0YXRlLm51bWJlck9mQnl0ZXNQcmVzZXJ2ZWQgLSBzcGlsbFN0YXRlLm51
bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbjsKICAgICAgICAgICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworCiAgICAgICAgICAgICBib29sIGNhbGxIYXNSZXR1cm5WYWx1ZSA9IGlzR2V0
dGVyKCk7CiAgICAgICAgICAgICByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwo
c3BpbGxTdGF0ZSwgY2FsbEhhc1JldHVyblZhbHVlKTsKIApAQCAtMjI2NCwxMiArMjI2MCw3IEBA
IHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKIAogICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdl
dE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgICAgICAgICBpZiAoY29k
ZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmUuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0jZW5kaWYKLSAgICAgICAgICAgIGF1dG8g
c3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0
aG91dEV4Y2VwdGlvbnMoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsKKyAgICAgICAgICAgIGF1
dG8gc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
V2l0aG91dEV4Y2VwdGlvbnMoKTsKIAogICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRl
Y2x0eXBlKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKT4oQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKCZ2bSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgaml0LnByZXBhcmVDYWxs
T3BlcmF0aW9uKHZtKTsKQEAgLTIzNjQsMTAgKzIzNTUsNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFS
ZWdpc3RlcnNUb1ByZXNlcnZlOwogICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZS5zZXQoYmFzZUdQUik7CiAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNl
cnZlLnNldCh2YWx1ZVJlZ3MpOwotI2lmIENQVShBUk02NCkKLSAgICAgICAgICAgICAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3Rl
cnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCiAgICAgICAgICAg
ICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0
ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmUpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJi
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsNyArMjkyLDcgQEAgb3BfZ3JvdXAg
OlByb2ZpbGVkQmluYXJ5T3AsCiAgICAgICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVzLAog
ICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0
aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAg
IH0KIAogb3BfZ3JvdXAgOlZhbHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1Myw3ICszNTMsNyBA
QCBvcF9ncm91cCA6VW5hcnlJblBsYWNlUHJvZmlsZWRPcCwKICAgICAgICAgc3JjRHN0OiBWaXJ0
dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2Zp
bGU6IFVuYXJ5QXJpdGhQcm9maWxlCisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFBy
b2ZpbGUuKgogICAgIH0KIAogb3AgOnRvX29iamVjdCwKQEAgLTM4Niw3ICszODYsNyBAQCBvcCA6
bmVnYXRlLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLAogICAgIH0sCiAgICAgbWV0
YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAg
ICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JD
aGVja3BvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2lu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3MywyOCBAQCBWYWx1ZVByb2ZpbGUqIHZhbHVl
UHJvZmlsZUZvckltcGwoQnl0ZWNvCiAgICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9maWxl
OwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQcm9m
aWxlT2Zmc2V0Rm9yKHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURfUEFS
QU0oY2hlY2twb2ludEluZGV4KTsKKyAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJ
RCA9PSBvcF9pdGVyYXRvcl9vcGVuKSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4
KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRl
Y29kZTo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2Ug
T3BJdGVyYXRvck9wZW46OmdldE5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNl
dE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6
Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3Bv
aW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJl
dHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKKyAg
ICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZEb25lUHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0
OjpnZXRWYWx1ZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2Zp
bGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSAKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRh
dGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwg
dW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZt
KQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsKIH0KIAotQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKLXsKLSAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KG1fZmFz
dFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENh
bGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGF0
YUlDKCkpOwpAQCAtMjI1LDYgKzIyMCwxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0TWF4QXJn
dW1lbnRDb3VudEluCiAgICAgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZhbHVl
OwogfQogCitDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86
OmZhc3RQYXRoU3RhcnQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkgJiYgaXNU
YWlsQ2FsbCgpKTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJu
YWxQdHJUYWc+KHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCk7Cit9CisKIHZvaWQgQ2FsbExpbmtJ
bmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogewogICAgIGF1dG8gaGFuZGxlU3BlY2lmaWNDYWxsZWUg
PSBbJl0gKEpTRnVuY3Rpb24qIGNhbGxlZSkgewpAQCAtMjk4LDIzICsyOTksMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMxMiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMjUsMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzQ0LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM4MSwzMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5mb0dQ
UiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRy
eVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2
bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9IENv
ZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgc2V0VXBD
YWxsKHVubGlua2VkQ2FsbExpbmtJbmZvLmNhbGxUeXBlLCBjYWxsZWVHUFIpOworICAgIG1fZG9u
ZUxvY2F0aW9uID0gdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uOworICAgIGlmICh1
bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKSB7CisgICAgICAgIC8vIEZJWE1F
OiBJdCdkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIGEgcmVmY291bnRlZCBkYXRhIHN0cnVjdHVyZS4K
KyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxl
RGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpOworICAgIH0KKyAg
ICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgdS5kYXRhSUMubV9jYWxsTGlu
a0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRp
b24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dl
ZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGly
ZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlz
VGFpbENhbGwoKSk7CiAKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKIAotICAg
IGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwot
ICAgIH0pOwotCiAgICAgYXV0byBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICB1LmNvZGVJQy5t
X2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQ
dHJUYWc+KGNhbGwpOwpAQCAtMzk3LDcgKzQyNCw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0
RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgp
OwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGZhc3RQYXRoU3RhcnQpOworICAgICAgICB1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
CiAgICAgfSk7CiAKICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEg
anVtcCB0byB0aGUgc2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5
ICs0MywxMSBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwog
c3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0lu
Zm87CisKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8
Q2FsbExpbmtJbmZvPiB7CiBwdWJsaWM6Ci0gICAgZW51bSBDYWxsVHlwZSB7CisgICAgZW51bSBD
YWxsVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25lLAogICAgICAgICBDYWxsLAogICAgICAg
ICBDYWxsVmFyYXJncywKQEAgLTE2NSw2ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2Fs
bGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhW
TSYsIFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUik7CisKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsZWVHUFI7IH0KICAgICAKICAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgewpA
QCAtMTczLDEzICsxNzcsMTYgQEAgcHVibGljOgogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47Cisg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxM
aW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CisgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9V
TlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRh
aWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWls
Q2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBl
bWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRh
aWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJik7CiAgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKICAg
ICB2b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOworICAgIHN0YXRpYyB2b2lk
IGVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIpOwogICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJ
QygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09
IFVzZURhdGFJQzo6WWVzOyB9CkBAIC0yMDMsNyArMjEwLDYgQEAgcHVibGljOgogICAgICAgICBt
X2FsbG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwogCkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1
YmxpYzoKICAgICAgICAgbV9zbG93U3R1YiA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgSklUU3R1
YlJvdXRpbmUqIHNsb3dTdHViKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Nsb3dTdHViLmdl
dCgpOwotICAgIH0KLQogICAgIGJvb2wgc2Vlbk9uY2UoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IG1faGFzU2VlblNob3VsZFJlcGF0Y2g7CkBAIC0zMDgsOSArMzA5LDkgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUpOwogICAgIH0KIAot
ICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIH0KIAogICAgIHVpbnQzMl90IG1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTM4MSw3ICszODIsOSBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1f
ZmFzdFBhdGhTdGFydDsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IGZhc3RQYXRoU3RhcnQoKTsKKwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBA
IC0zOTcsNiArNDAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247CiAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRo
U3RhcnQ7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBt
X2Zhc3RQYXRoU3RhcnQ7CiAgICAgICAgIH0gY29kZUlDOwogICAgIH0gdTsKIApAQCAtNDI0LDYg
KzQyOCwxMyBAQCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpCiAgICAg
cmV0dXJuIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCk7CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENh
bGxMaW5rSW5mbyB7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OyAvLyBDdXJyZW50
bHksIG9ubHkgdXNlZCBieSBiYXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5IHByb2R1Y2Ug
YSBDb2RlT3JpZ2luLgorICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307
CisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjc5LDggKzI3OSw2IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZN
JiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQog
ICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5Db21w
aWxlZFdpdGhGVEwoZmFsc2UpCi0gICAgLCBtX2hhc0xpbmtlZE9TUkV4aXQoZmFsc2UpCi0gICAg
LCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZShmYWxzZSkKICAgICAsIG1fbnVtQ2FsbGVl
TG9jYWxzKG90aGVyLm1fbnVtQ2FsbGVlTG9jYWxzKQogICAgICwgbV9udW1WYXJzKG90aGVyLm1f
bnVtVmFycykKICAgICAsIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAob3RoZXIubV9udW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCkKQEAgLTMwOCw2ICszMDYsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlkZXIoKSk7
CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisgICAgbV9s
bGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVy
KCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9CkBAIC0z
MTgsNyArMzE4LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQwog
ICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIAogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAo
KTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgaWYgKG90aGVyLm1fcmFyZURhdGEpIHsK
ICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwpAQCAtMzM2LDggKzMzNSw2IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fZGlkRmFp
bEpJVENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFs
c2UpCiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCi0gICAgLCBtX2hhc0xp
bmtlZE9TUkV4aXQoZmFsc2UpCi0gICAgLCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZShm
YWxzZSkgCiAgICAgLCBtX251bUNhbGxlZUxvY2Fscyh1bmxpbmtlZENvZGVCbG9jay0+bnVtQ2Fs
bGVlTG9jYWxzKCkpCiAgICAgLCBtX251bVZhcnModW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMo
KSkKICAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCkBAIC0zNTksNyArMzU2LDkg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJU
KHNvdXJjZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSk7Ci0gICAgCisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50
ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKKwogICAgIHZtLmhl
YXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQogCkBAIC0zNzAsNyArMzY5LDggQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2FuJ3QgZ2VuZXJh
dGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJvY2VzcyBpcyBu
b3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJvZHVjZSBuZXcg
bG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5lc3MgYW5hbHlz
aXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5r
ZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhlIGxpdmVuZXNz
IGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNpZGUgVW5saW5r
ZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBiZXR3ZWVuIGFs
bCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhlIGJ5dGVjb2Rl
IG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5nIGFuIFVubGlu
a2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2Ny
aXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5r
ZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CkBAIC00NzEsNiArNDcxLDIxIEBA
IGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgYnJlYWs7
IFwKICAgICB9CiAKKyAgICB1bnNpZ25lZCBiaW5hcnlQcm9maWxlSW5kZXggPSAwOworICAgIHVu
c2lnbmVkIHVuYXJ5UHJvZmlsZUluZGV4ID0gMDsKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9B
UklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElB
TElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0g
Jm1fdW5saW5rZWRDb2RlLT5iaW5hcnlBcml0aFByb2ZpbGUoYmluYXJ5UHJvZmlsZUluZGV4Kysp
OyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorI2RlZmluZSBMSU5LX1dJVEhfVU5BUllfQVJJ
VEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJ
WkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZt
X3VubGlua2VkQ29kZS0+dW5hcnlBcml0aFByb2ZpbGUodW5hcnlQcm9maWxlSW5kZXgrKyk7IFwK
KyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYg
aW5zdHJ1Y3Rpb25TdHJlYW0gPSBpbnN0cnVjdGlvbnMoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8m
IGluc3RydWN0aW9uIDogaW5zdHJ1Y3Rpb25TdHJlYW0pIHsKICAgICAgICAgT3Bjb2RlSUQgb3Bj
b2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKQEAgLTUzMywxNCArNTQ4LDE0IEBAIGJv
b2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgTElOSyhPcENy
ZWF0ZVByb21pc2UpCiAgICAgICAgIExJTksoT3BDcmVhdGVHZW5lcmF0b3IpCiAKLSAgICAgICAg
TElOSyhPcEFkZCkKLSAgICAgICAgTElOSyhPcE11bCkKLSAgICAgICAgTElOSyhPcERpdikKLSAg
ICAgICAgTElOSyhPcFN1YikKLQotICAgICAgICBMSU5LKE9wTmVnYXRlKQotICAgICAgICBMSU5L
KE9wSW5jKQotICAgICAgICBMSU5LKE9wRGVjKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FS
SVRIX1BST0ZJTEUoT3BBZGQpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklM
RShPcE11bCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wRGl2KQor
ICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BTdWIpCisKKyAgICAgICAg
TElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BOZWdhdGUpCisgICAgICAgIExJTktfV0lU
SF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wSW5jKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJ
VEhfUFJPRklMRShPcERlYykKIAogICAgICAgICBMSU5LKE9wSm5lcVB0cikKIApAQCAtNzY5LDcg
Kzc4NCw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAv
LyByZWx5IG9uIHRoZSBpbnN0cnVjdGlvbiBjb3VudCAoYW5kIGFyZSBpbiB0aGVvcnkgcGVybWl0
dGVkIHRvIGFsc28gaW5zcGVjdCB0aGUKICAgICAvLyBpbnN0cnVjdGlvbiBzdHJlYW0gdG8gbW9y
ZSBhY2N1cmF0ZSBhc3Nlc3MgdGhlIGNvc3Qgb2YgdGllci11cCkuCiAgICAgb3B0aW1pemVBZnRl
cldhcm1VcCgpOwotICAgIGppdEFmdGVyV2FybVVwKCk7CiAKICAgICAvLyBJZiB0aGUgY29uY3Vy
cmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2RlIGJsb2NrJ3MgaGFzaCwgdGhlbiBjb21wdXRl
IGl0IGhlcmUKICAgICAvLyBzeW5jaHJvbm91c2x5LgpAQCAtNzkzLDYgKzgwNyw3OCBAQCB2b2lk
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb25Db21tb24oVk0mCiAgICAgbV9vd25lckVkZ2Uuc2V0
KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpjcmVhdGUodm0sIHRoaXMpKTsK
IH0KIAorI2lmIEVOQUJMRShKSVQpCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRC
YXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRD
b2RlKGppdENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0
Q29kZU1hcCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFu
ZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8g
RklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5h
dGl2ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkp
LnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAg
ICAgYXV0byYgaml0RGF0YSA9IGVuc3VyZUpJVERhdGEobG9ja2VyKTsKKworICAgICAgICBSRUxF
QVNFX0FTU0VSVChqaXREYXRhLm1faml0Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CisgICAgICAg
IGppdERhdGEubV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+
bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBq
aXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBl
bnRyeSA9IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOworICAgICAgICAgICAgc3dpdGNo
IChlbnRyeS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
R2xvYmFsT2JqZWN0OgorICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xb
aV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAg
ICAgICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8gPSAq
c3RhdGljX2Nhc3Q8VW5saW5rZWRDYWxsTGlua0luZm8qPihlbnRyeS5wYXlsb2FkLmdldCgpKTsK
KyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9j
YWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2Rl
SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmluaXRpYWxpemVEYXRhSUMo
dm0oKSwgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGNhbGxM
aW5rSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbzogeworICAg
ICAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8g
PSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyo+KGVudHJ5LnBheWxvYWQu
Z2V0KCkpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGpp
dERhdGEubV9zdHViSW5mb3MuYWRkKHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZSwgQ29kZU9y
aWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBz
dHViSW5mby0+aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKHRoaXMsIHVu
bGlua2VkU3R1YkluZm8pOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBv
b2xbaV0gPSBzdHViSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6IHsK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25z
dGFudFBvb2xbaV0gPSBmdW5jdGlvbkRlY2woaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6
OkZ1bmN0aW9uRXhwcjogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAg
aml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIEdsb2JhbENv
ZGU6CisgICAgY2FzZSBNb2R1bGVDb2RlOgorICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAgIG1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RnVuY3Rpb25Db2RlOgorICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRv
IGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCisgICAgICAg
IC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRpb24uCisgICAgICAgIG1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwoKSkgJiYgREZHOjptaWdo
dElubGluZUZ1bmN0aW9uKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAo
aml0Q29kZS0+bV9pc1NoYXJlYWJsZSAmJiAhdW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtl
ZEJhc2VsaW5lQ29kZSAmJiBPcHRpb25zOjp1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nKCkpCisg
ICAgICAgIHVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUgPSBXVEZN
b3ZlKGppdENvZGUpOworfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKIENvZGVCbG9jazo6fkNv
ZGVCbG9jaygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC04NzMsNiArOTU5LDI3IEBAIENv
ZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAorYm9vbCBD
b2RlQmxvY2s6OmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QKK3sKKyAgICAvLyBUaGlzIG5lZWRzIHRvIGNvcnJlc3BvbmQgdG8gd2hh
dCB3ZSBkbyBpbnNpZGUgc2V0Q29uc3RhbnRSZWdpc3RlcnMuCisgICAgc3dpdGNoICh1bmxpbmtl
ZENvZGVCbG9jaygpLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihyZWcpKSB7Cisg
ICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6CisgICAgY2FzZSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOiB7CisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSB1bmxpbmtlZENvZGVCbG9jaygpLT5nZXRDb25zdGFudChyZWcpOworICAgICAgICBp
ZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKGNlbGwt
PmluaGVyaXRzPFN5bWJvbFRhYmxlPih2bSgpKSB8fCBjZWxsLT5pbmhlcml0czxKU1RlbXBsYXRl
T2JqZWN0RGVzY3JpcHRvcj4odm0oKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjo6TGlua1RpbWVDb25zdGFudDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwog
VmVjdG9yPHVuc2lnbmVkPiBDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IEZp
eGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgRml4ZWRW
ZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtODkyLDYgKzk5OSw3IEBAIFZl
Y3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFIKICAgICAgICAgc3dpdGNoIChy
ZXByZXNlbnRhdGlvbikgewogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudDoKICAgICAgICAgICAgIGNvbnN0YW50ID0gZ2xvYmFsT2JqZWN0LT5s
aW5rVGltZUNvbnN0YW50KHN0YXRpY19jYXN0PExpbmtUaW1lQ29uc3RhbnQ+KGNvbnN0YW50LmFz
SW50MzJBc0FueUludCgpKSk7CisgICAgICAgICAgICBBU1NFUlQoY29uc3RhbnQuaXNDZWxsKCkp
OyAvLyBVbmxpbmtlZCBCYXNlbGluZSBKSVQgcmVxdWlyZXMgdGhpcy4KICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI6CiAgICAg
ICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgpAQCAtMTUxNCw3ICsx
NjIyLDcgQEAgQ29kZUJsb2NrOjpKSVREYXRhJiBDb2RlQmxvY2s6OmVuc3VyZUpJVAogICAgIHJl
dHVybiAqbV9qaXREYXRhOwogfQogCi12b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJ
VElubGluZUNhY2hlcygpCit2b2lkIENvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMo
KQogewogICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAg
IGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5m
b3MpCkBAIC0xNTI1LDYgKzE2MzMsMjAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxp
bmVKSVRJbmxpbgogICAgICAgICAgICAgc3R1YkluZm8tPnZpc2l0V2Vha1JlZmVyZW5jZXMobG9j
a2VyLCB0aGlzKTsKICAgICAgICAgfQogICAgIH0KKworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAg
ICBpZiAoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIC8vIFZl
cmlmeSB3ZSBkb24ndCBuZWVkIHRvIGZpbmFsaXplIHRoZXNlIHNpbmNlIHRoZXkncmUgdmlydHVh
bCBjYWxscy4KKyAgICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA6IHN0YXRp
Y19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fZXZhbENhbGxMaW5r
SW5mb3MpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsK
KyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+Zm9yRWFjaERlcGVuZGVudENlbGwoW10gKEpTQ2Vs
bCopIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisKKyAgICB9CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC0xNTM0LDQ2
ICsxNjU2LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAog
ICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIGJvb2wg
aXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3Jh
ZGU7Ci0gICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBmYWxzZTsKLSAgICAvLyBJ
ZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVw
bGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0Ci0gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGluZSBK
SVQgY29kZSBhbmQgcmVpbnN0YWxsIExMSW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5LgotICAg
IGlmIChPcHRpb25zOjp1c2VMTEludCgpICYmICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1NldCgp
LmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpKSB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIG9w
dGltaXplZENvZGVCbG9jayA9IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKLSAgICAgICAgICAg
IGlmICghb3B0aW1pemVkQ29kZUJsb2NrLT5tX29zckV4aXRDb3VudGVyKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSkgewotICAgICAgICAgICAgICAg
ICAgICBtX2ppdENvZGUgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBMTEludDo6c2V0
RW50cnlwb2ludCh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0
VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOwotCi0gICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxpbmtlZENvZGUtPm51bWJlck9mRXhjZXB0
aW9uSGFuZGxlcnMoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmxp
bmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlua2VkQ29kZS0+ZXhjZXB0
aW9uSGFuZGxlcihpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5k
bGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9ucygpLmF0KHVubGlua2Vk
SGFuZGxlci50YXJnZXQpLnB0cigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5p
bml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZUNhdGNoKGluc3RydWN0aW9uLndpZHRoKCkpLmNvZGUo
KSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdW5saW5r
SW5jb21pbmdDYWxscygpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBj
bGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGluIGZpbmFsaXplVW5jb25kaXRpb25hbGx5IGFs
bCBjb21waWxlciB0aHJlYWRzCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBzYWZlcG9pbnRl
ZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5pbmcgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBieXRlY29k
ZSBwYXJzZXIsIGFuZCBieXRlY29kZQotICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXIgaXMg
dGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5mb3Mu
Ci0gICAgICAgICAgICAgICAgICAgIHJlc2V0SklURGF0YSgpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNlbmRpZgotICAgIAog
ICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKICAgICAgICAg
ZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAo
ISFqaXRDb2RlKCkpCi0gICAgICAgIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsK
KyAgICAgICAgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KERGR19KSVQpCkBAIC0xNTk0LDcgKzE2ODIsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoCiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OgotICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKKyAg
ICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jb3VudCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAg
ICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKQEAgLTE2NzUsMzAgKzE3
NjMsNiBAQCBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mCiAgICAgcmV0
dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSwgY29k
ZU9yaWdpbik7CiB9CiAKLUpJVEFkZElDKiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fYWRkSUNzLmFk
ZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVRNdWxJQyogQ29kZUJsb2NrOjphZGRKSVRNdWxJQyhC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX211
bElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUU3ViSUMqIENvZGVCbG9jazo6YWRkSklU
U3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVE5lZ0lDKiBDb2RlQmxvY2s6
OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRh
KGxvY2tlcikubV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KIFN0cnVjdHVyZVN0dWJJ
bmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwpAQCAtMzEzMyw3ICszMTk3LDcg
QEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1l
UmVnaXN0ZXJDb3VudEZvcih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMzQ5LDEzICszNDEzLDEzIEBA
IEJpbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2gg
KHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNh
c2Ugb3BfbXVsOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJu
ICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTMzNjcsMTEgKzM0MzEsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6dW5hcnlBcml0aAogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGNhc2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0zNDcyLDIyICszNTM2LDE2IEBAIHZvaWQgQ29kZUJsb2Nr
OjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmkKIH0KIAogI2lmIEVOQUJMRShKSVQpCi12b2lkIENv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3Jp
Z2luTWFwPiYmIG1hcCkgCi17IAotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
KTsKLSAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1v
dmUobWFwKTsKLX0KLQogc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQ
Qyh2b2lkKiBwYykKIHsKKyAgICBpZiAoYXV0byogcGNUb0NvZGVPcmlnaW5NYXAgPSBtX2ppdENv
ZGUtPnBjVG9Db2RlT3JpZ2luTWFwKCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Q29k
ZU9yaWdpbj4gY29kZU9yaWdpbiA9IHBjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQorICAg
ICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CisgICAgfQorCiAgICAgewogICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIGlmIChhdXRvKiBqaXREYXRh
ID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBpZiAoaml0RGF0YS0+bV9wY1RvQ29k
ZU9yaWdpbk1hcCkgewotICAgICAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+IGNvZGVPcmlnaW4gPSBqaXREYXRhLT5tX3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKLSAgICAgICAgICAgIH0K
LQogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRh
LT5tX3N0dWJJbmZvcykgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29udGFpbnNQ
QyhwYykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+KHN0dWJJbmZvLT5jb2RlT3JpZ2luKTsKQEAgLTM1MjEsMjggKzM1NzksMTQgQEAgc3RkOjpv
cHRpb25hbDxCeXRlY29kZUluZGV4PiBDb2RlQmxvY2s6OgogICAgIHJldHVybiBieXRlY29kZUlu
ZGV4OwogfQogCi1pbnQzMl90IENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhy
ZXNob2xkKQotewotICAgIHN3aXRjaCAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUo
KSkgewotICAgIGNhc2UgVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU6Ci0gICAgICAgIHJldHVybiB0
aHJlc2hvbGQ7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6RmFsc2U6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgKiA0OwotICAgIGNhc2UgVHJpU3RhdGU6OlRydWU6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgLyAyOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
dGhyZXNob2xkOwotfQotCi12b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBD
b2RlQmxvY2s6OmppdFNvb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdU
aHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2Fy
bVVwKCkpLCB0aGlzKTsKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9s
ZCh1bmxpbmtlZENvZGVCbG9jaygpLT50aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3Zv
aWQgQ29kZUJsb2NrOjpqaXROZXh0SW52b2NhdGlvbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdU
aHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAKIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRy
YXBCcmVha3BvaW50cygpIGNvbnN0CkBAIC0zNTg4LDI4ICszNjMyLDggQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBNYXRoSUNTdGF0cygpCiAgICAgZG91YmxlIG51bVN1YnMgPSAwLjA7CiAgICAgZG91
YmxlIHRvdGFsU3ViU2l6ZSA9IDAuMDsKIAotICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVC
bG9jayogY29kZUJsb2NrKSB7Ci0gICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gY29kZUJsb2Nr
LT5tX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgICAgIGZvciAoSklUQWRkSUMqIGFkZElDIDog
aml0RGF0YS0+bV9hZGRJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1BZGRzKys7Ci0gICAgICAg
ICAgICAgICAgdG90YWxBZGRTaXplICs9IGFkZElDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKEpJVE11bElDKiBtdWxJQyA6IGppdERhdGEtPm1fbXVsSUNz
KSB7Ci0gICAgICAgICAgICAgICAgbnVtTXVscysrOwotICAgICAgICAgICAgICAgIHRvdGFsTXVs
U2l6ZSArPSBtdWxJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Zm9yIChKSVROZWdJQyogbmVnSUMgOiBqaXREYXRhLT5tX25lZ0lDcykgewotICAgICAgICAgICAg
ICAgIG51bU5lZ3MrKzsKLSAgICAgICAgICAgICAgICB0b3RhbE5lZ1NpemUgKz0gbmVnSUMtPmNv
ZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUU3ViSUMqIHN1
YklDIDogaml0RGF0YS0+bV9zdWJJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1TdWJzKys7Ci0g
ICAgICAgICAgICAgICAgdG90YWxTdWJTaXplICs9IHN1YklDLT5jb2RlU2l6ZSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgYXV0byBjb3VudElDcyA9IFsmXSAoQ29kZUJsb2NrKikg
eworICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byByZS1pbXBsZW1lbnQgdGhpcyB1c2luZyBK
SVRDb2RlLgogICAgIH07CiAgICAgaGVhcCgpLT5mb3JFYWNoQ29kZUJsb2NrKGNvdW50SUNzKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw5IEBAIGNsYXNzIEpTTW9kdWxlRW52aXJv
bm1lbnQ7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ7CiBjbGFzcyBNZXRhZGF0YVRhYmxlOwot
Y2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKIGNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogCiBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihDb2RlQmxvY2tSYXJlRGF0YSk7CiAKQEAg
LTE1OCw3ICsxNTgsOSBAQCBwdWJsaWM6CiAgICAgTWV0YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIG51
bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6
CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKHVuc2lnbmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoK
IAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkgY29uc3QgeyByZXR1cm4g
bV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgfQogCkBAIC0xNjcsNyArMTY5LDYgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KICAg
ICB1bnNpZ25lZCBudW1UbXBzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0No
ZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50VG1wczsgfQogCi0gICAgdW5zaWduZWQqIGFk
ZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CiAKICAgICBDb2RlQmxvY2sq
IGFsdGVybmF0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9h
bHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAgLTIzMiwxNiArMjMzLDYgQEAgcHVibGljOgogICAgIGJv
b2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3Rh
bGxWTVRyYXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmly
dHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRp
bmcgYmFjayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlz
IGB0aGlzYCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0Nv
bnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsK
LQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29s
IGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAg
IHJldHVybiByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAt
MjY4LDIzICsyNTksMjEgQEAgcHVibGljOgogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RydWN0IEpJ
VERhdGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICAgICAgQmFnPFN0cnVj
dHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAgICAgICAgQmFnPEpJVEFkZElDPiBtX2FkZElD
czsKLSAgICAgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKLSAgICAgICAgQmFnPEpJVE5lZ0lD
PiBtX25lZ0lDczsKLSAgICAgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKICAgICAgICAgQmFn
PENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgICAgICBTZW50aW5lbExpbmtlZExp
c3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9p
bmNvbWluZ0NhbGxzOwogICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBoaWNDYWxs
Tm9kZSwgUGFja2VkUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29t
aW5nUG9seW1vcnBoaWNDYWxsczsKLSAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxl
PiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJs
ZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENU
b0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXND
YWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1h
cDsKKworICAgICAgICBGaXhlZFZlY3Rvcjx2b2lkKj4gbV9qaXRDb25zdGFudFBvb2w7CisgICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwgbV9qaXRDb25zdGFudFBvb2wpOyB9CiAgICAgfTsKIAor
ICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29k
ZT4pOworCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkKQEAgLTI5
MywyMiArMjgyLDcgQEAgcHVibGljOgogICAgIH0KICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRh
U2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAotICAgIEpJVEFkZElDKiBhZGRKSVRB
ZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLSAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQ
cm9maWxlKik7Ci0gICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSop
OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+
Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2Zp
bGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlw
ZT4KLSAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkg
eyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
YW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVE5l
Z0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJ
VE5lZ0lDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3Is
IEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRTdWJJQyogYWRkTWF0aElD
KEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmls
ZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURGF0YSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RGF0YSk7IH0KIAogICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlLCBDb2RlT3JpZ2luKTsKIApAQCAtMzIyLDE4
ICsyOTYsOCBAQCBwdWJsaWM6CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAg
dG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgogICAgIENhbGxMaW5rSW5mbyog
Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICAKLSAg
ICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29kZU1hcCYmIGppdENvZGVNYXApCi0gICAgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOwotICAgIH0K
LSAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCkKLSAgICB7Ci0gICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX2ppdENvZGVNYXA7Ci0gICAgfQorICAgIGNvbnN0IEpJVENvZGVNYXAmIGpp
dENvZGVNYXAoKTsKIAotICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVf
cHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+
IGZpbmRQQyh2b2lkKiBwYyk7CiAKICAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVn
aXN0ZXJTZXQpOwpAQCAtNDcyLDYgKzQzNiw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1l
Rm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29k
ZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJP
ZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVu
dFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFt
ZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01NjksOCArNTM0LDEwIEBAIHB1Ymxp
YzoKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdp
c3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7
IH0KKyAgICBib29sIGlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soVmlydHVhbFJl
Z2lzdGVyKSBjb25zdDsKICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
biBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
IGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
aW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1
ZmZlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdp
c3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQo
KTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7
IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9m
RnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTU5
NSwyMiArNTYyLDIyIEBAIHB1YmxpYzoKICAgICAvLyBKdW1wIFRhYmxlcwogCiAjaWYgRU5BQkxF
KEpJVCkKLSAgICBTaW1wbGVKdW1wVGFibGUmIHN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCkKKyAgICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJs
ZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KTsKKyAgICB2b2lkKiBiYXNlbGluZUpJVENvbnN0YW50UG9vbCgp
CiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwotICAgICAgICByZXR1
cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1faml0RGF0YSAmJiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpOworICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbC5kYXRhKCk7
CiAgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTd2l0
Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQogCi0jaWYgRU5BQkxF
KEpJVCkKLSAgICBTdHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFi
bGVJbmRleCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7Ci0gICAg
ICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKLSAgICB9CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgU3RyaW5nSnVtcFRhYmxlJiBkZmdT
dHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJs
ZSYgZGZnU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKICNlbmRpZgorCiAgICAgc2l6
ZV90IG51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1
cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVz
KCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQogCkBAIC02MzIsMjEg
KzU5OSwyMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVk
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRo
cmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0
ZUNvdW50ZXItPmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOwogICAgIH0KIAog
ICAgIHZvaWQgZG9udEpJVEFueXRpbWVTb29uKCkKICAgICB7Ci0gICAgICAgIG1fbGxpbnRFeGVj
dXRlQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgpOworICAgICAgICBtX2xsaW50RXhlY3V0ZUNv
dW50ZXItPmRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgfQogCi0gICAgaW50MzJfdCB0aHJlc2hv
bGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOwotICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKTsK
ICAgICB2b2lkIGppdFNvb24oKTsKKyAgICB2b2lkIGppdE5leHRJbnZvY2F0aW9uKCk7CiAKICAg
ICBjb25zdCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICAg
ICAgcmV0dXJuICptX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgfQogCiAgICAgdHlwZWRlZiBI
YXNoTWFwPHN0ZDo6dHVwbGU8U3RydWN0dXJlSUQsIHVuc2lnbmVkPiwgRml4ZWRWZWN0b3I8TExJ
bnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0
Y2hwb2ludE1hcDsKQEAgLTc5Nyw2ICs3NjMsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0Rl
YnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAg
ICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVx
dWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7
IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAg
ICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQpAQCAtODM4
LDYgKzgwNSw3IEBAIHB1YmxpYzoKICAgICBtdXRhYmxlIENvbmN1cnJlbnRKU0xvY2sgbV9sb2Nr
OwogCiAgICAgYm9vbCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQg
YmVjYXVzZSB0aGUgSklUIHdhbnRzIHRvIHN0b3JlIHRvIGl0LgorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7IH0KIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgdW5zaWduZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2Fw
YWJpbGl0eUxldmVsCkBAIC04NDcsOCArODE1LDYgQEAgcHVibGljOgogICAgIGJvb2wgbV9kaWRG
YWlsRlRMQ29tcGlsYXRpb24gOiAxOwogICAgIGJvb2wgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRM
IDogMTsKIAotICAgIGJvb2wgbV9oYXNMaW5rZWRPU1JFeGl0IDogMTsKLSAgICBib29sIG1faXNF
bGlnaWJsZUZvckxMSW50RG93bmdyYWRlIDogMTsKICAgICBib29sIG1fdmlzaXRDaGlsZHJlblNr
aXBwZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAKICAgICAvLyBJbnRlcm5hbCBtZXRob2RzIGZv
ciB1c2UgYnkgdmFsaWRhdGlvbiBjb2RlLiBJdCB3b3VsZCBiZSBwcml2YXRlIGlmIGl0IHdhc24n
dApAQCAtOTA3LDE2ICs4NzMsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywg
bV9tZXRhZGF0YSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JG
dXp6aW5nRWFybHlSZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUg
cmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAg
cmV0dXJuICFtX3VubGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAg
Ym9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bigpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMo
KTsKICNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJVElubGluZUNh
Y2hlcygpOworICAgIHZvaWQgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogI2lm
IEVOQUJMRShERkdfSklUKQogICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwpAQCAt
MTAxMCw3ICs5NzIsOSBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9s
bGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7
CiAjaWYgRU5BQkxFKEpJVCkKK3B1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SklURGF0YT4g
bV9qaXREYXRhOworcHJpdmF0ZToKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8v
IFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRo
ZSBwcm9maWxlZCBjb2RlIGJsb2NrCkBAIC0xMDI5LDcgKzk5Myw3IEBAIHByaXZhdGU6CiAKICAg
ICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOwogICAgIAotICAgIEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAgQmFzZWxpbmVF
eGVjdXRpb25Db3VudGVyKiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgeyBudWxscHRyIH07CiAKICAg
ICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9qaXRFeGVjdXRlQ291bnRlcjsKICAgICB1aW50
MzJfdCBtX29zckV4aXRDb3VudGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw4ICsyNSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJhc2Vs
aW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJVbmxpbmtlZE1l
dGFkYXRhVGFibGVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDAsOSArNDIsNyBA
QCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgaWYgKG1fbWV0
YWRhdGEpIHsKICNkZWZpbmUgVklTSVQoX19vcCkgXAogICAgICAgICBtX21ldGFkYXRhLT5mb3JF
YWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgZnVuYyhtZXRhZGF0YS5tX3Byb2ZpbGUs
IGZhbHNlKTsgfSk7Ci0KICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVkFMVUVfUFJPRklM
RShWSVNJVCkKLQogI3VuZGVmIFZJU0lUCiAKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxP
cEl0ZXJhdG9yT3Blbj4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyAKQEAgLTU3LDcgKzU3LDYgQEAg
dm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVu
YyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAg
Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KQEAgLTk5LDQgKzk4LDM4IEBAIHZv
aWQgQ29kZUJsb2NrOjpmb3JFYWNoTExJbnRDYWxsTGlua0luZm8KICAgICB9CiB9CiAKKyNpZiBF
TkFCTEUoSklUKQorQUxXQVlTX0lOTElORSBjb25zdCBKSVRDb2RlTWFwJiBDb2RlQmxvY2s6Ompp
dENvZGVNYXAoKQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUu
Z2V0KCkpLT5tX2ppdENvZGVNYXA7Cit9CisKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxl
JiBDb2RlQmxvY2s6OmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorewor
ICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRj
aEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisKK0FMV0FZU19JTkxJTkUgU3RyaW5nSnVtcFRh
YmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUlu
ZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkp
LT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisjZW5kaWYKKworI2lm
IEVOQUJMRShERkdfSklUKQorQUxXQVlTX0lOTElORSBTaW1wbGVKdW1wVGFibGUmIENvZGVCbG9j
azo6ZGZnU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRU
eXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpK
SVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpkZmdTdHJp
bmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUo
KSA9PSBKSVRUeXBlOjpERkdKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxERkc6OkpJVENv
ZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcw
LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFw
KENvZGVCbG9jayogY29kZUJsb2NrKTsKICAgICAKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZSogd3JhcEFuZEFjdGl2YXRlKENvZGVCbG9jayogY29kZUJsb2NrKTsKKworICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSwgbV9jb2RlQmxvY2spOyB9CiAgICAgCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhlY3V0aW9uQ291bnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCBi
b29sIEV4ZWN1dGlvbkNvdW50ZXI8Y291bnRpbmdWYXJpYW50Pjo6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2Nr
ID8gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSA6IG51bGxwdHIsIHRocmVzaG9sZCk7CisgICAg
dGhyZXNob2xkID0gY2xpcHBlZFRocmVzaG9sZCh0aHJlc2hvbGQpOwogICAgIAogICAgIG1fY291
bnRlciA9IHN0YXRpY19jYXN0PGludDMyX3Q+KC10aHJlc2hvbGQpOwogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIu
aAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGlvbkNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBmb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7IC8vIElmIHlvdSB1c2UgdGhp
cywgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoKSBtYXkgc3RpbGwgcmV0dXJuIGZhbHNl
LgogICAgIGJvb2wgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoQ29kZUJsb2NrKik7CiAg
ICAgYm9vbCBoYXNDcm9zc2VkVGhyZXNob2xkKCkgY29uc3QgeyByZXR1cm4gbV9jb3VudGVyID49
IDA7IH0KLSAgICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJs
b2NrKik7CisgICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVC
bG9jayogPSBudWxscHRyKTsKICAgICB2b2lkIGRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgZG91
YmxlIGNvdW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291
bnQpICsgbV9jb3VudGVyOyB9CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkBA
IC04NiwxMyArODYsOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci0gICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBUIHRocmVzaG9sZCkKKyAgICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKFQg
dGhyZXNob2xkKQogICAgIHsKLSAgICAgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQ7Ci0gICAgICAg
IGlmIChPcHRpb25zOjpyYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMo
KSAmJiBnbG9iYWxPYmplY3QpCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBnbG9iYWxPYmpl
Y3QtPndlYWtSYW5kb21JbnRlZ2VyKCkgJSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNo
ZWNrcG9pbnRzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1heFRocmVzaG9sZCA9IG1h
eGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKTsKKyAgICAgICAgaW50MzJf
dCBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
KCk7CiAgICAgICAgIGlmICh0aHJlc2hvbGQgPiBtYXhUaHJlc2hvbGQpCiAgICAgICAgICAgICB0
aHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7CiAgICAgICAgIHJldHVybiB0aHJlc2hvbGQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5o
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZE1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgc3RydWN0IEdl
dEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB7CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9k
ZU1ldGFkYXRhVW5zZXQpID09IDEyKTsKIAogc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJh
eUxlbmd0aCB7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFy
cmF5UHJvZmlsZSk7IH0KICAgICBBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlOwogfTsKIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCkgPT0gMTIpOwpA
QCAtODgsNiArODksNyBAQCB1bmlvbiBHZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAgR2V0
QnlJZE1vZGUgbW9kZTsKICAgICAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsg
Ly8gVGhpcyBtdXN0IGJlIHplcm8gd2hlbiB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhLCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0YWRh
dGFEZWZhdWx0IGRlZmF1bHRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNl
dE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9k
ZTsKQEAgLTExNyw2ICsxMTksNyBAQCBzdHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAg
ICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFQcm90b0xvYWQgcHJvdG9Mb2FkTW9kZTsKICAgICB9Owog
ICAgIEdldEJ5SWRNb2RlIG1vZGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0K
ICAgICB1aW50OF90IGhpdENvdW50Rm9yTExJbnRDYWNoaW5nOwogfTsKICNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0
dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgR2V0QnlTdGF0dXMgR2V0
QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoTm9J
bmZvcm1hdGlvbik7CiAgICAgICAgIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjog
ewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1
YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7CiAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5
KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSwgc3R1YkluZm8pOwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIg
PSBzdHViSW5mby0+aWRlbnRpZmllcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRl
ckFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogCiAgICAgLy8gTGV0J3Mgc3RvcmUg
dGhlIHJldXNlZCByZWdpc3RlcnMgdG8gdGhlIHN0YWNrLiBBZnRlciB0aGF0LCB3ZSBjYW4gdXNl
IGFsbG9jYXRlZCBzY3JhdGNoIHJlZ2lzdGVycy4KICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KLSAgICBhbGxvY2F0b3IucHJlc2Vy
dmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6
OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CisgICAgICAgIGFsbG9jYXRvci5wcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKIAogICAgIGlmIChHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKICAgICAgICAgZGF0YUxvZygiYmFzZUdQ
UiA9ICIsIGJhc2VHUFIsICJcbiIpOwpAQCAtMjI1LDEyICsyMjUsOSBAQCB2b2lkIEdldHRlclNl
dHRlckFjY2Vzc0Nhc2U6OmVtaXRET01KSVRHCiAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JD
Q2FsbC5zZXQocmVnKTsKICAgICBmb3IgKEZQUlJlZyByZWcgOiBmcFNjcmF0Y2gpCiAgICAgICAg
IHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnKTsKKyAgICBpZiAoaml0LmNvZGVCbG9j
aygpLT51c2VEYXRhSUMoKSkKKyAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChz
dHViSW5mby5tX3N0dWJJbmZvR1BSKTsKICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuZXhj
bHVkZShSZWdpc3RlclNldDo6cmVnaXN0ZXJzVG9Ob3RTYXZlRm9yQ0NhbGwoKSk7Ci0jaWYgQ1BV
KEFSTTY0KQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOwotICAg
IGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9y
Q0NhbGwuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0jZW5kaWYKIAogICAgIEFjY2Vzc0Nhc2VT
bmlwcGV0UGFyYW1zIHBhcmFtcyhzdGF0ZS5tX3ZtLCBXVEZNb3ZlKHJlZ3MpLCBXVEZNb3ZlKGdw
U2NyYXRjaCksIFdURk1vdmUoZnBTY3JhdGNoKSk7CiAgICAgc25pcHBldC0+Z2VuZXJhdG9yKCkt
PnJ1bihqaXQsIHBhcmFtcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5CeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luQnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsx
MzksNyBAQCBJbkJ5U3RhdHVzIEluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mCiAgICAgICAg
IHJldHVybiBJbkJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6
OkluQnlJZFNlbGY6IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKTsKICAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkK
ICAgICAgICAgICAgIHJldHVybiBJbkJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5j
cHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTEgKzE3NiwxNiBAQCBBTFdB
WVNfSU5MSU5FIHN0YXRpYyBib29sIGxpbmtDb2RlSW5saW5lCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNz
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
IGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIFRoZXNlIGR5bmFtaWMg
c2xvdHMgZ2V0IGZpbGxlZCBpbiBieSBTdHJ1Y3R1cmVTdHViSW5mby4gTm90aGluZyBlbHNlIHRv
IGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnMgaml0
OwogICAgIAogICAgIEdQUlJlZyBiYXNlID0gc3R1YkluZm8uYmFzZUdQUjsKQEAgLTIzMywyMyAr
MjM4LDMxIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaGFzRnJlZVJlZ2lzdGUKICAgICBy
ZXR1cm4gZ2V0U2NyYXRjaFJlZ2lzdGVyKHN0dWJJbmZvKSAhPSBJbnZhbGlkR1BSUmVnOwogfQog
Ci1ib29sIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxp
bmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwogfQog
Ci1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoIXN0dWJJ
bmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
QVNTRVJUKGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2Zmc2V0KSk7
CisgICAgQVNTRVJUKGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0
dWJJbmZvLCBvZmZzZXQpKTsKKworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7Cisg
ICAgICAgIC8vIFRoZXNlIGR5bmFtaWMgc2xvdHMgZ2V0IGZpbGxlZCBpbiBieSBTdHJ1Y3R1cmVT
dHViSW5mby4gTm90aGluZyBlbHNlIHRvIGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CiAKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCkBAIC0yNzksMjIgKzI5MiwyNSBAQCBib29sIElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJ
bmxpbmU7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFj
Y2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKIHsKICAgICBBU1NFUlQoYXJy
YXktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0Nv
bnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKICAgICBpZiAoIWhhc0ZyZWVSZWdpc3RlcihzdHViSW5mbykpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhaGFzQW55QXJyYXlTdG9yYWdlKGFycmF5LT5pbmRl
eGluZ1R5cGUoKSkgJiYgYXJyYXktPmluZGV4aW5nVHlwZSgpICE9IEFycmF5Q2xhc3M7CiB9CiAK
LWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVB
cnJheUxlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBBU1NFUlQoaXNDYWNoZWFibGVBcnJheUxlbmd0
aChzdHViSW5mbywgYXJyYXkpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNo
ZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcnJheSkpOwogCiAgICAgaWYg
KCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTMxOSwxNyArMzM1LDIwIEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVu
Z3RoKFMKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nl
c3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K2Jvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAgIGlmICghc3R1Yklu
Zm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBp
ZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiBoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwog
fQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3Ro
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0g
ICAgQVNTRVJUKGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKSk7CisgICAgQVNTRVJU
X1VOVVNFRChjb2RlQmxvY2ssIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1
YkluZm8pKTsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNjMsMTMgKzM4MiwxOCBAQCBib29sIElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoCiB9CiAKIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU2VsZkluQWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3Rz
IGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5m
by5iYXNlR1BSOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7
CiAKQEAgLTQwNiwxMyArNDMwLDEzIEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNK
dW1wSW5BY2MKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewogICAgICAgICAvLyBJ
ZiBpdCBpcyBub3QgR2V0QnlJZC1saWtlLXRoaW5nLCB3ZSBkbyBub3QgZW1pdCBub3Agc2xlZCAo
ZS5nLiBHZXRCeVZhbCkuCiAgICAgICAgIC8vIFRoZSBjb2RlIGlzIGFscmVhZHkgYW4gaW5kaXJl
Y3QganVtcCwgYW5kIG9ubHkgdGhpbmcgd2Ugc2hvdWxkIGRvIGlzIHJlcGxhY2luZyBtX2NvZGVQ
dHIuCi0gICAgICAgIGlmIChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKKyAgICAg
ICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHN0
dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikgewogICAgICAgICAgICAgLy8gSWYgbV9jb2Rl
UHRyIGlzIHBvaW50aW5nIHRvIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbiwgdGhpcyBt
ZWFucyB0aGF0IElubGluZUFjY2VzcyBjb2RlIGlzIG5vdCBhIHN0dWIgb25lLgogICAgICAgICAg
ICAgLy8gV2UgcmV3cml0ZSB0aGlzIHdpdGggdGhlIHN0dWItYmFzZWQgZGlzcGF0Y2hpbmcgY29k
ZSBvbmNlLCBhbmQgY29udGludWUgdXNpbmcgaXQgdW50aWwgd2UgcmVzZXQgdGhlIGNvZGUuCiAg
ICAgICAgICAgICBpZiAoc3R1YkluZm8ubV9jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0g
c3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpIHsKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5mby5zdGFy
dC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhl
bHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgICAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmc3R1YkluZm8pLCBzdHViSW5mby5t
X3N0dWJJbmZvR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5l
UHRyVGFnKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKICAg
ICAgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBzdHViSW5mby5kb25lTG9jYXRp
b247CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0oTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewpAQCAtNDIxLDcgKzQ0NSw5IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2MKICAgICAgICAgICAgICAgICB9KSwgIklubGluZUFjY2VzczogbGlu
a2luZyBzdHViIGNhbGwiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHN0
dWJJbmZvLm1fY29kZVB0ciA9IHRhcmdldDsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUu
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCw4ICs0NjAsMTQgQEAgdm9pZCBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgIH0pLCAiSW5saW5lQWNjZXNzOiBs
aW5raW5nIGNvbnN0YW50IGp1bXAiKTsKIH0KIAotdm9pZCBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1
YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K3ZvaWQgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogeworICAgIGlmIChjb2RlQmxv
Y2stPnVzZURhdGFJQygpICYmIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSB7CisgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHN0dWJJbmZvLnNsb3dQYXRo
U3RhcnRMb2NhdGlvbjsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5m
by5zdGFydC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChD
Q2FsbEhlbHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgIC8vIFdlIGRv
bid0IG5lZWQgYSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1waW5n
IGludG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4KICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNz
LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTksMTQgKzk5LDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KHNpemUsIHNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhTdHJ1
Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMg
Ym9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBQ
cm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwotICAg
IHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBK
U0FycmF5Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0
dXJlU3R1YkluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0cnVj
dHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZklu
QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIGJvb2wg
Z2VuZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgYm9v
bCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBjYW5HZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBQ
cm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlP
ZmZzZXQpOworICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2Nr
KiwgU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgaXNDYWNo
ZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBz
dGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNjZXNzKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIGJv
b2wgZ2VuZXJhdGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsK
IAogICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5l
QWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1w
SW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRh
ZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0Vf
T1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7
CiAgICAgdWludDhfdCBzZWVuTW9kZXMgeyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZlNlZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0
YWRhdGEsIHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUo
c2Vlbk1vZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRD
YWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJ
bnRDYWxsTGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQogCiBwcml2YXRlOgogICAgIHVpbnRw
dHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0IH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMTcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBi
aXRXaWR0aEZvck1heAogICAgIG1hY3JvKE9wSXRlcmF0b3JPcGVuKSBcCiAgICAgbWFjcm8oT3BJ
dGVyYXRvck5leHQpIFwKIAorI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllfQVJJ
VEhfUFJPRklMRShtYWNybykgXAorICAgIG1hY3JvKE9wQWRkKSBcCisgICAgbWFjcm8oT3BNdWwp
IFwKKyAgICBtYWNybyhPcERpdikgXAorICAgIG1hY3JvKE9wU3ViKSBcCisKKyNkZWZpbmUgRk9S
X0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAorICAgIG1hY3Jv
KE9wSW5jKSBcCisgICAgbWFjcm8oT3BEZWMpIFwKKyAgICBtYWNybyhPcE5lZ2F0ZSkgXAorCiAK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidHlwZS1saW1pdHMiKQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQoKQogewogICAgIHJlc3RvcmVTY3JhdGNoKCk7CiAg
ICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQotICAgICAgICBqaXQtPnJldCgp
OworICAgICAgICBqaXQtPmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLT5t
X3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZEb25lTG9jYXRpb24oKSks
IEpTSW50ZXJuYWxQdHJUYWcpOwogICAgIGVsc2UKICAgICAgICAgc3VjY2Vzcy5hcHBlbmQoaml0
LT5qdW1wKCkpOwogfQpAQCAtMTEwLDYgKzExMCw4IEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGUKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKIAogICAgICAgICBt
X2xpdmVSZWdpc3RlcnNGb3JDYWxsID0gUmVnaXN0ZXJTZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSwgYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJz
KCkpOworICAgICAgICBpZiAoaml0LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAg
ICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7
CiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhjbHVkZShjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOwogICAgIH0KICAgICByZXR1cm4gbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbDsKQEAgLTEy
OCwxMSArMTMwLDEyIEBAIGF1dG8gQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmUK
ICAgICB9OwogfQogCi1hdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2VydmVMaXZlUmVn
aXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucyhjb25zdCBSZWdpc3RlclNldCYg
ZXh0cmEpIC0+IFNwaWxsU3RhdGUKK2F1dG8gQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2
ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCkgLT4gU3BpbGxT
dGF0ZQogewogICAgIFJlZ2lzdGVyU2V0IGxpdmVSZWdpc3RlcnMgPSBhbGxvY2F0b3ItPnVzZWRS
ZWdpc3RlcnMoKTsKKyAgICBpZiAoaml0LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAg
ICAgIGxpdmVSZWdpc3RlcnMuYWRkKHN0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKICAgICBsaXZl
UmVnaXN0ZXJzLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICBsaXZlUmVnaXN0
ZXJzLm1lcmdlKGV4dHJhKTsKIAogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBleHRyYVN0YWNrUGFk
ZGluZyA9IDA7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVy
UHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsKCpqaXQsIGxpdmVSZWdpc3RlcnMsIGV4dHJhU3RhY2tQYWRkaW5nKTsK
QEAgLTU5NiwxNiArNTk5LDExIEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNB
Y2Nlc3MKICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CiAgICAgc3RhdGUuaml0ID0g
JmppdDsKIAotICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7Ci0gICAgICAgIGlmIChz
dGF0ZS5tX2RvZXNKU0dldHRlclNldHRlckNhbGxzKSB7Ci0gICAgICAgICAgICAvLyBXZSBoYXZl
IG5vIGd1YXJhbnRlZSB0aGF0IHN0YWNrLXBvaW50ZXIgaXMgdGhlIGV4cGVjdGVkIG9uZS4gVGhp
cyBpcyBub3QgYSBwcm9ibGVtIGlmIHdlIGRvIG5vdCBoYXZlIEpTIGdldHRlciAvIHNldHRlciBj
YWxscyBzaW5jZSBzdGFjay1wb2ludGVyIGlzCi0gICAgICAgICAgICAvLyBhIGNhbGxlZS1zYXZl
IHJlZ2lzdGVyIGluIHRoZSBDIGNhbGxpbmcgY29udmVuc2lvbi4gSG93ZXZlciwgb3VyIEpTIGV4
ZWN1dGFibGUgY2FsbCBkb2VzIG5vdCBzYXZlIHN0YWNrLXBvaW50ZXIuIFNvIHdlIGFyZSBhZGp1
c3Rpbmcgc3RhY2stcG9pbnRlciBhZnRlcgotICAgICAgICAgICAgLy8gSlMgZ2V0dGVyIC8gc2V0
dGVyIGNhbGxzLiBCdXQgdGhpcyBjb3VsZCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5pdGlhbCBz
dGFjay1wb2ludGVyLCBhbmQgbWFrZXMgUEFDIHRhZ2dpbmcgYnJva2VuLgotICAgICAgICAgICAg
Ly8gVG8gZW5zdXJlIFBBQy10YWdnaW5nIHdvcmssIHdlIGZpcnN0IGFkanVzdCBzdGFjay1wb2lu
dGVyIHRvIHRoZSBhcHByb3ByaWF0ZSBvbmUuCi0gICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OworICAgIGlmICghY2FuQmVTaGFyZWQgJiYgQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRl
ck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBqaXQuc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICBhdXRvIG9rID0gaml0LmJyYW5jaFB0
cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBqaXQuc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAg
ICAgICBvay5saW5rKCZqaXQpOwogICAgIH0KIAogICAgIHN0YXRlLnByZXNlcnZlZFJldXNlZFJl
Z2lzdGVyU3RhdGUgPQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTEsNyArMjUxLDcgQEAgc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7CiAgICAgY29u
c3QgUmVnaXN0ZXJTZXQmIGNhbGN1bGF0ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9u
SGFuZGxpbmcoKTsKIAogICAgIFNwaWxsU3RhdGUgcHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFj
a0ZvckNhbGwoY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhID0geyB9KTsKLSAgICBTcGlsbFN0YXRl
IHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29u
c3QgUmVnaXN0ZXJTZXQmIGV4dHJhID0geyB9KTsKKyAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2
ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoKTsKIAogICAgIHZvaWQg
cmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsV2l0aFRocm93bkV4Y2VwdGlvbihj
b25zdCBTcGlsbFN0YXRlJik7CiAgICAgdm9pZCByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFj
a0ZvckNhbGwoY29uc3QgU3BpbGxTdGF0ZSYsIGNvbnN0IFJlZ2lzdGVyU2V0JiBkb250UmVzdG9y
ZSA9IHsgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0
dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eVN0YXR1cy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCwxMCArMTgwLDEw
IEBAIFB1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKICAg
ICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHVpZCk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0g
ICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkodWlkKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShwcm9maWxlZEJsb2NrLT52bSgpKTsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsK
ICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQ
dXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3R1YkluZm8tPm1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVy
biBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3RydWN0dXJlLCBv
ZmZzZXQpOwogICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSwgKnN0dWJJbmZvKTsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKIAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJQb2x5
bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKIApAQCAtNjUsOSArNjYsOSBA
QCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYoCiAgICAgQVNTRVJUKGhh
c0NvbnN0YW50SWRlbnRpZmllcik7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBl
OjpHZXRCeUlkU2VsZik7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndy
aXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0Owor
ICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojppbml0QXJyYXlMZW5ndGgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyKQpA
QCAtODcsOSArODgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJlcGxh
CiAgICAgQVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENh
Y2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2UpOwogICAgIG1faWRlbnRp
ZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsK
ICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1
LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsK
IH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEluQnlJZFNlbGYoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
KiBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTk3LDkgKzk4LDkgQEAgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6aW5pdEluQnlJZFNlbGYoYwogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBD
YWNoZVR5cGU6OlVuc2V0KTsKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6Oklu
QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBi
eUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVy
ZWYoKQpAQCAtMjM2LDcgKzIzNyw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJl
U3R1YkluZm8KICAgICAgICAgLy8gd2UncmUgYnVmZmVyZWQgaXMgYmVjYXVzZSB3ZSByZWx5IG9u
IGl0IHRvIHJlc2V0IGR1cmluZyBHQyBpZiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUKICAg
ICAgICAgLy8gaXMgY29sbGVjdGVkLgogICAgICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwot
ICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdl
IGdlbmVyYXRlZCBzb21lIGNvZGUgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGF0dGVtcHQgdG8gcmVw
YXRjaCBpbiB0aGUgZnV0dXJlIHVudGlsIHdlCiAgICAgICAgIC8vIGdhdGhlciBlbm91Z2ggY2Fz
ZXMuCkBAIC0yNTEsNyArMjUyLDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29u
c3QgQ29uYwogewogICAgIGNsZWFyQnVmZmVyZWRTdHJ1Y3R1cmVzKCk7CiAgICAgbV9pZGVudGlm
aWVyID0gbnVsbHB0cjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsK
KyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOwogCiAgICAgaWYgKG1fY2FjaGVU
eXBlID09IENhY2hlVHlwZTo6VW5zZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTI4NSw2ICsyODYs
NyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgICAgIHJl
c2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OlB1dFByaXZhdGVOYW1lOgogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1
dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6Oklu
QnlJZDoKQEAgLTM2MCw4ICszNjIsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdl
YWtSZWZlcmVuCiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKLSAgICBpZiAobV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQotICAgICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNN
YXJrZWQobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICBpZiAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSkKKyAgICAgICAg
aXNWYWxpZCAmPSB2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZSk7CiAgICAgaWYgKG1fY2FjaGVU
eXBlID09IENhY2hlVHlwZTo6U3R1YikKICAgICAgICAgaXNWYWxpZCAmPSB1LnN0dWItPnZpc2l0
V2Vhayh2bSk7CiAKQEAgLTM3NSw4ICszNzcsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2
aXNpdFdlYWtSZWZlcmVuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKLSAg
ICBpZiAobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQotICAgICAgICBtX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIGlmIChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodmlzaXRvci52bSgpKSkKKyAg
ICAgICAgc3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIAogICAgIGlmIChtX2NhY2hl
VHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNp
dGlvbnModmlzaXRvcik7CkBAIC00MzAsNiArNDMyLDIwOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9
CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtl
ZFN0dWJJbmZvKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgYWNjZXNzVHlwZSA9IHVubGlu
a2VkU3R1YkluZm8uYWNjZXNzVHlwZTsKKyAgICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8uc3Rh
cnQ7CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5kb25lTG9jYXRpb247Cisg
ICAgc2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5zbG93UGF0aFN0YXJ0
TG9jYXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKTsKKyAgICBjb2RlT3Jp
Z2luID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIG1f
Y29kZVB0ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKworICAgIHVzZWRSZWdpc3RlcnMgPSBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgaWYgKGFjY2Vzc1R5
cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZvciBpdGVyYXRvcl9uZXh0LCB3ZSBjYW4n
dCBjbG9iYmVyIHRoZSAiZG9udENsb2JiZXJSZWdpc3RlciIgcmVnaXN0ZXIgZWl0aGVyLgorICAg
ICAgICB1c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9i
YmVyUmVnaXN0ZXIpOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNh
c2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0
QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGlt
aXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1l
OiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJh
bmQ6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1l
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoK
KyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5l
Y21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Cisg
ICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAg
ICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZp
bmU6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5l
UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8u
cHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAg
IGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8u
ZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gdW5saW5rZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRLaW5k
LmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXpl
IDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxl
dGVCeUlEOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBi
YXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnBy
b3BlcnR5R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURl
bEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
RGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBm
YWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFs
dWU7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgICAgIHJlZ3MucHJvdG90eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjpwcm90bzsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRp
ZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5C
eUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdz
LnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5
SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpU
cnlHZXRCeUlkOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRy
dWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhU
aGlzUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9H
UFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJl
ZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgICAg
ICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgICAgICBpZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCkKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvZmlsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpT
ZXRQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVlR1BS
ID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRl
QnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICB9Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTSh1bmxpbmtlZFN0dWJJbmZvKTsKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OmNoZWNrQ29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSklUU3R1YlJv
dXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wdGlvbnMu
aCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKQEAgLTU2LDYgKzU3
LDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRCeVZhbCwKICAg
ICBQdXRCeUlkLAogICAgIFB1dEJ5VmFsLAorICAgIFB1dFByaXZhdGVOYW1lLAogICAgIEluQnlJ
ZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtNzgsNiArODAsOCBAQCBl
bnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CiAgICAgU3RyaW5nTGVuZ3RoCiB9OwogCitz
dHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKKwogY2xhc3MgU3RydWN0dXJlU3R1Yklu
Zm8gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZvKTsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTk4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKKyAgICB2b2lkIGluaXRpYWxp
emVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvJik7CisKICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8v
IENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYg
aXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLApAQCAtMzI1LDEzICszMzEsMTkgQEAgcHJp
dmF0ZToKIAogcHVibGljOgogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKKyAgICBQcm9wZXJ0
eU9mZnNldCBieUlkU2VsZk9mZnNldDsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQnlJ
ZFNlbGZPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8s
IGJ5SWRTZWxmT2Zmc2V0KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0
dWJJbmZvLCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOyB9CiAgICAgdW5pb24gewotICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgICAg
ICB9IGJ5SWRTZWxmOwogICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsKICAgICB9IHU7
Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
OworICAgIFN0cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShWTSYgdm0pCisgICAg
eworICAgICAgICBpZiAoIW1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gdm0uZ2V0U3RydWN0dXJlKG1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgfQorICAgIFN0cnVjdHVyZUlEIG1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSB7IDAgfTsKIHByaXZhdGU6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
ciBtX2lkZW50aWZpZXI7CiAgICAgLy8gUmVwcmVzZW50cyB0aG9zZSBzdHJ1Y3R1cmVzIHRoYXQg
YWxyZWFkeSBoYXZlIGJ1ZmZlcmVkIEFjY2Vzc0Nhc2VzIGluIHRoZSBQb2x5bW9ycGhpY0FjY2Vz
cy4KQEAgLTM1Miw2ICszNjQsNyBAQCBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBtX2NvZGVQdHI7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQ29kZVB0cigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHVi
SW5mbywgbV9jb2RlUHRyKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEb25lTG9j
YXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIGRvbmVM
b2NhdGlvbik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2xvd1BhdGhTdGFydExv
Y2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBzbG93
UGF0aFN0YXJ0TG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1f
c2xvd09wZXJhdGlvbik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ291bnRkb3du
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBjb3VudGRvd24p
OyB9CkBAIC00NDcsNiArNDYwLDE3IEBAIGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dl
dEJ5SWRGdW4KICAgICB9CiB9CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsK
KyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFBy
aXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtp
bmQ6Om5vbmUoKSB9OworICAgIEVDTUFNb2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgp
IH07CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0
YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNhY2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9m
IHBhdGNoYWJsZSBqdW1wIGZvciAnaW5zdGFuY2VvZicgY2FjaGVzLgorICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xvd1BhdGhTdGFydExvY2F0aW9uOworfTsKKwog
I2Vsc2UKIAogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBwcmludFN1cGVyU2FtcGxlclN0YXRlKCkK
ICAgICBkb3VibGUgcGVyY2VudGFnZSA9IDEwMC4wICogaW4gLyAoaW4gKyBvdXQpOwogICAgIGlm
IChwZXJjZW50YWdlICE9IHBlcmNlbnRhZ2UpCiAgICAgICAgIHBlcmNlbnRhZ2UgPSAwLjA7Ci0g
ICAgZGF0YUxvZygiUGVyY2VudCB0aW1lIGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBl
cmNlbnRhZ2UsICJcbiIpOworICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIg
c2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiJVxuIik7CiB9CiAKIHZvaWQgZW5hYmxlU3Vw
ZXJTYW1wbGVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKIAor
I2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNsYXNz
SW5mby5oIgpAQCAtNzgsNiArNzksOCBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2Rl
QmxvY2soVk0mCiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkobG9ja2VyKTsKICAg
ICAgICAgbV9yYXJlRGF0YS0+bV9wcml2YXRlQnJhbmRSZXF1aXJlbWVudCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcml2YXRlQnJhbmRSZXF1aXJlbWVudDo6TmVlZGVkKTsKICAgICB9CisKKyAg
ICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChP
cHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CkBAIC0zMTYsNiArMzE5LDQ4IEBAIGludCBVbmxpbmtlZENvZGVCbG9j
azo6b3V0T2ZMaW5lSnVtcE9mZnMKICAgICByZXR1cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5n
ZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKK2Jvb2wgVW5saW5r
ZWRDb2RlQmxvY2s6Omhhc0lkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAg
ICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpID4gMTAwKSB7CisgICAgICAgIGlmIChudW1iZXJP
ZklkZW50aWZpZXJzKCkgIT0gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5zaXplKCkpIHsKKyAgICAg
ICAgICAgIExvY2tlciBsb2NrZXIobV9jYWNoZWRJZGVudGlmaWVyVWlkc0xvY2spOworICAgICAg
ICAgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IGNhY2hlZElkZW50aWZpZXJVaWRzOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciA9
IHRoaXMtPmlkZW50aWZpZXIoaSk7CisgICAgICAgICAgICAgICAgY2FjaGVkSWRlbnRpZmllclVp
ZHMuYWRkKGlkZW50aWZpZXIuaW1wbCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgIG1fY2FjaGVkSWRlbnRpZmllclVp
ZHMgPSBXVEZNb3ZlKGNhY2hlZElkZW50aWZpZXJVaWRzKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBtX2NhY2hlZElkZW50aWZpZXJVaWRzLmNvbnRhaW5zKHVpZCk7CisgICAgfQorCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7
CisgICAgICAgIGlmIChpZGVudGlmaWVyKGkpLmltcGwoKSA9PSB1aWQpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK2ludDMy
X3QgVW5saW5rZWRDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkK
K3sKKyAgICBzd2l0Y2ggKGRpZE9wdGltaXplKCkpIHsKKyAgICBjYXNlIFRyaVN0YXRlOjpJbmRl
dGVybWluYXRlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkOworICAgIGNhc2UgVHJpU3RhdGU6
OkZhbHNlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkICogNDsKKyAgICBjYXNlIFRyaVN0YXRl
OjpUcnVlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8gMjsKKyAgICB9CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRocmVzaG9sZDsKK30KKworCiB2b2lkIFVubGlu
a2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCghbV9tZXRhZGF0YS0+aXNGaW5hbGl6ZWQoKSk7CkBAIC0zMzcsMTUgKzM4MiwyNSBAQCB2
b2lkIFVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByCiAgICAgaWYgKG1fbWV0YWRh
dGEtPmhhc01ldGFkYXRhKCkpIHsKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheVByb2Zp
bGVzID0gMDsKIAotI2RlZmluZSBDT1VOVChfX29wKSBcCi0gICAgICAgIG51bWJlck9mQXJyYXlQ
cm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CisjZGVmaW5lIENPVU5U
KF9fb3ApIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9f
b3A+KCk7CiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ09VTlQp
CiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENPVU5U
KQogI3VuZGVmIENPVU5UCiAgICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFk
YXRhLT5udW1FbnRyaWVzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgICAgICBudW1iZXJPZkFycmF5
UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEdldEJ5SWQ+KCk7Ci0KICAgICAg
ICAgbV9hcnJheVByb2ZpbGVzID0gRml4ZWRWZWN0b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+KG51
bWJlck9mQXJyYXlQcm9maWxlcyk7CisKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCaW5hcnlB
cml0aFByb2ZpbGVzID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZCaW5hcnlBcml0
aFByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgRk9S
X0VBQ0hfT1BDT0RFX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoQ09VTlQpCisjdW5kZWYgQ09V
TlQKKyAgICAgICAgbV9iaW5hcnlBcml0aFByb2ZpbGVzID0gRml4ZWRWZWN0b3I8QmluYXJ5QXJp
dGhQcm9maWxlPihudW1iZXJPZkJpbmFyeUFyaXRoUHJvZmlsZXMpOworCisgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkg
bnVtYmVyT2ZVbmFyeUFyaXRoUHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29w
PigpOworICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKENP
VU5UKQorI3VuZGVmIENPVU5UCisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzID0gRml4ZWRW
ZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+KG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
MTAgKzI1LDEyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgi
CiAjaW5jbHVkZSAiQXJyYXlQcm9maWxlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9u
cy5oIgogI2luY2x1ZGUgIkNvZGVUeXBlLmgiCiAjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIK
KyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdl
SW5mby5oIgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5o
IgpAQCAtNjQsNiArNjYsNyBAQCBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKIGNsYXNzIFVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsK
IGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworY2xhc3MgQmFzZWxpbmVKSVRDb2Rl
Owogc3RydWN0IEV4ZWN1dGFibGVJbmZvOwogZW51bSBjbGFzcyBMaW5rVGltZUNvbnN0YW50IDog
aW50MzJfdDsKIApAQCAtMTc1LDYgKzE3OCw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZpeGVk
VmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1
cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3du
PiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBy
ZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5n
ZXQoKTsgfQogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4m
IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKQEAgLTIwNyw2ICsyMTEsMTUgQEAgcHVibGlj
OgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1vZGUpOyB9CiAKICAgICBjb25z
dCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3Q7CisgICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uQXQoQnl0ZWNvZGVJbmRleCBpbmRleCkgY29uc3QgeyByZXR1
cm4gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5kZXgpLnB0cigpOyB9CisgICAgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAg
Y29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5hdCgwKS5wdHIo
KTsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zRW5kID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbnN0cnVj
dGlvbnNCZWdpbikgKyBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChpbnN0cnVjdGlvbiA+PSBpbnN0cnVjdGlvbnNCZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGlu
c3RydWN0aW9uc0VuZCk7CisgICAgICAgIHJldHVybiBpbnN0cnVjdGlvbiAtIGluc3RydWN0aW9u
c0JlZ2luOworICAgIH0KKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbnNTaXplKCkgY29uc3QgeyBy
ZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1DYWxsZWVM
b2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogICAgIHVuc2lnbmVk
IG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KQEAgLTMzNCwxMCArMzQ3LDIx
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWV0YWRhdGEtPnNpemVJbkJ5dGVzKCk7CiAg
ICAgfQogCisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bigpCisgICAgeworICAgICAgICAvLyBTb21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdh
eXMgY29tcGxldGUgdGhlIGxvb3BzIHRoZXkgcnVuLgorICAgICAgICByZXR1cm4gIWlzQnVpbHRp
bkZ1bmN0aW9uKCk7CisgICAgfQogICAgIHZvaWQgYWxsb2NhdGVTaGFyZWRQcm9maWxlcygpOwog
ICAgIFVubGlua2VkVmFsdWVQcm9maWxlJiB1bmxpbmtlZFZhbHVlUHJvZmlsZSh1bnNpZ25lZCBp
bmRleCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVzW2luZGV4XTsgfQogICAgIFVubGlua2VkQXJy
YXlQcm9maWxlJiB1bmxpbmtlZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4g
bV9hcnJheVByb2ZpbGVzW2luZGV4XTsgfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29s
IGhhc0lkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyNlbmRpZgorCisgICAgaW50MzJf
dCB0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOworCiBwcm90ZWN0ZWQ6CiAgICAg
VW5saW5rZWRDb2RlQmxvY2soVk0mLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0
YWJsZUluZm8mLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPik7CiAKQEAgLTM5Nyw2ICs0
MjEsOSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGV4aWNhbFNjb3BlRmVhdHVyZXMgOiA0
OwogcHVibGljOgogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOworI2lmIEVOQUJMRShKSVQp
CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKKyNl
bmRpZgogcHJpdmF0ZToKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlcyB7IDAgfTsKICAgICBT
b3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC00MTMsNyArNDQwLDYgQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3M7
CiAKLQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJv
ZmlsZTsKICNlbmRpZgpAQCAtNDU4LDYgKzQ4NCwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAg
fQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZz
ZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNl
dCk7CisgICAgfQorCisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUo
dW5zaWduZWQgaSkgeyByZXR1cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5h
cnlBcml0aFByb2ZpbGUmIHVuYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1f
dW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIm
IGxsaW50RXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7IH0K
IAogcHJpdmF0ZToKICAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PjsKQEAgLTQ2NSw4ICs1MDEsMTYgQEAgcHJpdmF0
ZToKICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZlY3RvcjxF
eHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5lRXhlY3V0
aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5r
ZWRWYWx1ZVByb2ZpbGU+IG1fdmFsdWVQcm9maWxlczsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtl
ZEFycmF5UHJvZmlsZT4gbV9hcnJheVByb2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPEJpbmFyeUFy
aXRoUHJvZmlsZT4gbV9iaW5hcnlBcml0aFByb2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPFVuYXJ5
QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKKworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgTG9jayBtX2NhY2hlZElkZW50aWZpZXJVaWRzTG9jazsKKyAgICBIYXNoU2V0PFVuaXF1
ZWRTdHJpbmdJbXBsKj4gbV9jYWNoZWRJZGVudGlmaWVyVWlkczsKKyNlbmRpZgogCiBwcm90ZWN0
ZWQ6CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1l
dGFkYXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTUgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUpOwogICAg
IH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNl
dEluTWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0g
bV9pczMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFi
bGUxNigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAgICBiYXNlVHlwZU9mZnNldCA9IHJvdW5k
VXBUb011bHRpcGxlT2YoYWxpZ25vZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSwgYmFzZVR5
cGVPZmZzZXQpOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YodHlwZW5h
bWUgT3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KICAgICB1bnNpZ25lZCBudW1FbnRyaWVzKCk7
CiAKQEAgLTEwNyw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc19vZmZzZXQx
NlRhYmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAg
ICAgdXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSwxMyArNDUsMTEgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogCiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNB
cmd1bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxC
dWNrZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFz
ayA9IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0
b3RhbE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxC
dWNrZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQogICAgIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCi0gICAgICAg
ICAgICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAg
Y2xlYXJCdWNrZXRzKCk7CiAgICAgfQogICAgIAogICAgIEVuY29kZWRKU1ZhbHVlKiBzcGVjRmFp
bEJ1Y2tldCh1bnNpZ25lZCBpKQpAQCAtNTksNiArNTcsMTIgQEAgc3RydWN0IFZhbHVlUHJvZmls
ZUJhc2UgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZCdWNrZXRzICsgaSA8IHRvdGFsTnVtYmVy
T2ZCdWNrZXRzKTsKICAgICAgICAgcmV0dXJuIG1fYnVja2V0cyArIG51bWJlck9mQnVja2V0cyAr
IGk7CiAgICAgfQorCisgICAgdm9pZCBjbGVhckJ1Y2tldHMoKQorICAgIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCisgICAgICAg
ICAgICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICB9CiAg
ICAgCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8odW5zaWduZWQgYnVja2V0KSBjb25z
dAogICAgIHsKQEAgLTEyMyw4ICsxMjcsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQg
cmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAg
IC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyAr
K2kpIHsKQEAgLTEzOSw3ICsxNDEsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAg
ICAgIAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVu
Y29kZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVj
dWxhdGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTYxLDYgKzE2Myw3IEBA
IHN0cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVl
UHJvZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsK
ICAgICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8
MD4oKSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9Owog
CiBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJv
ZmlsZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShERkdf
SklUKQogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmgiCkBAIC0zNCw3ICszNSw5IEBACiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2Vt
ZW50LmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJh
bWVTZXQuaCIKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJKU0Nhc3QuaCIKKyNp
bmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGlsYXRp
b24uaCIKICNpbmNsdWRlICJSZWNvcmRlZFN0YXR1c2VzLmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5o
PgpAQCAtNzAsNyArNzMsNyBAQCBzdHJ1Y3QgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24gewogICAg
IFdyaXRlQmFycmllcjxKU0NlbGw+IG1fdG87CiB9OwogICAgICAgICAKLWNsYXNzIENvbW1vbkRh
dGEgeworY2xhc3MgQ29tbW9uRGF0YSA6IHB1YmxpYyBNYXRoSUNIb2xkZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENvbW1vbkRhdGEpOwogcHVibGljOgogICAgIENvbW1vbkRhdGEoKQpA
QCAtMTE2LDYgKzExOSw3IEBAIHB1YmxpYzoKICAgICBGaXhlZFZlY3RvcjxDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQ+IG1fd2F0Y2hwb2ludHM7CiAgICAgRml4ZWRWZWN0b3I8QWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CiAg
ICAgRml4ZWRWZWN0b3I8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBt
X2FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgIFJlY29y
ZGVkU3RhdHVzZXMgcmVjb3JkZWRTdGF0dXNlczsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50
PiBtX2p1bXBSZXBsYWNlbWVudHM7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29kZS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAK
IAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29k
ZS5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
VHJhY2tlZFJlZmVyZW5jZXM7CiAKK3N0cnVjdCBTaW1wbGVKdW1wVGFibGU7CitzdHJ1Y3QgU3Ry
aW5nSnVtcFRhYmxlOworCiBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSklUQ29tcGlsZXI7CkBA
IC0xMDEsNiArMTA0LDggQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4g
ZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSBmaW5hbDsKIAogICAgIHVzaW5nIERpcmVjdEpJ
VENvZGU6OmluaXRpYWxpemVDb2RlUmVmRm9yREZHOworCisgICAgUENUb0NvZGVPcmlnaW5NYXAq
IHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gY29tbW9uLm1fcGNUb0NvZGVP
cmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENv
bXBpbGVyOyAvLyBBbGxvdyBKSVRDb21waWxlciB0byBjYWxsIHNldENvZGVSZWYoKS4KQEAgLTEx
MCw2ICsxMTUsOCBAQCBwdWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+
IG1fb3NyRW50cnk7CiAgICAgRml4ZWRWZWN0b3I8REZHOjpPU1JFeGl0PiBtX29zckV4aXQ7CiAg
ICAgRml4ZWRWZWN0b3I8REZHOjpTcGVjdWxhdGlvblJlY292ZXJ5PiBtX3NwZWN1bGF0aW9uUmVj
b3Zlcnk7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJs
ZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXM7CiAgICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07
CiAgICAgREZHOjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4NSwxMyArMTg1LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICAKICAgICBtX2dyYXBoLnJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7CiAK
LSAgICBpZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSB8fCAh
bV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmICghbV9n
cmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMg
PSBXVEZNb3ZlKG1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKLSAgICAgICAgaWYg
KCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2Nv
ZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1v
dmUobV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwotICAgIH0KKyAgICBBU1NFUlQobV9qaXRD
b2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9q
aXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKKyAgICBpZiAoIW1fZ3JhcGgu
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgCisgICAgICAgIG1faml0Q29kZS0+
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcyk7CisgICAgaWYgKCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5
KCkpCisgICAgICAgIG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dy
YXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7CiAKICAgICBmb3IgKEJhZzxTd2l0Y2hEYXRhPjo6aXRl
cmF0b3IgaXRlciA9IG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVy
KSB7CiAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqKml0ZXI7CkBAIC0xOTksMTIgKzE5OCwx
MiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIGNh
c2UgU3dpdGNoQ2hhcjoKICAgICAgICAgY2FzZSBTd2l0Y2hJbW06IHsKICAgICAgICAgICAgIGlm
ICghZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHkoKSk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2Rh
dGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGRh
dGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5k
ZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1faml0Q29k
ZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF07CiAgICAgICAgICAg
ICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0
Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0pOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUo
KSA9PSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCkpOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gbGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKTsgai0tOykK
QEAgLTIxOSwxMiArMjE4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYg
bGlua0IKIAogICAgICAgICBjYXNlIFN3aXRjaFN0cmluZzogewogICAgICAgICAgICAgaWYgKCFk
YXRhLmRpZFVzZUp1bXBUYWJsZSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCkuaXNFbXB0eSgp
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxl
KGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0
Y2hUYWJsZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8gY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2gu
YmxvY2stPmluZGV4XSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJsZS5t
X2N0aU9mZnNldHMuc2l6ZSgpID09IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS5zaXplKCkg
KyAxKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBsaW5rZWRUYWJsZS5tX2N0aU9m
ZnNldHMpCkBAIC0zMzMsNyArMzMyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVm
ZmVyJiBsaW5rQgogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5k
aWRCdWlsZE1hcHBpbmcoKSkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2lu
TWFwKG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIpLCBsaW5rQnVmZmVyKSk7CisgICAgICAgIG1faml0Q29kZS0+Y29tbW9uLm1f
cGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3Zl
KG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcik7CiB9CiAKIHN0YXRpYyB2
b2lkIGVtaXRTdGFja092ZXJmbG93Q2hlY2soSklUQ29tcGlsZXImIGppdCwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0JiBzdGFja092ZXJmbG93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw2
IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSoKICAgICBBU1NFUlQo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNT
RVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBBU1NF
UlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRD
b2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCiAgICAgaWYgKCFPcHRpb25zOjp1
c2VPU1JFbnRyeVRvREZHKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3Miw5ICs3NzIsNiBAQCB2b2lkIE9T
UkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgCiAgICAgLy8gVGhlIHRhZyByZWdpc3Rl
cnMgYXJlIG5lZWRlZCB0byBtYXRlcmlhbGl6ZSByZWNvdmVyaWVzIGJlbG93LgogICAgIGppdC5l
bWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCi0gICAgaWYgKGV4aXQuaXNFeGNl
cHRpb25IYW5kbGVyKCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKLQogICAgIGlmIChpbmxpbmVTdGFj
a0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCkgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogdG1w
U2NyYXRjaCA9IHNjcmF0Y2ggKyBvcGVyYW5kcy50bXBJbmRleCgwKTsKICAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbk1hdGVyaWFsaXplT1NSRXhpdFNpZGVTdGF0
ZSk+KCZ2bSwgJmV4aXQsIHRtcFNjcmF0Y2gpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKIAorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJERkdK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpJVC5oIgpA
QCAtMTE5LDEwICsxMjAsMTAgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKFZNJiB2bSwgQ0NhbGxI
ZWxwZQogICAgIGludDMyX3QgY2xpcHBlZFZhbHVlOwogICAgIHN3aXRjaCAoaml0LmNvZGVCbG9j
aygpLT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAgY2xp
cHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGpp
dC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xp
cHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKHRh
cmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6Ci0g
ICAgICAgIGNsaXBwZWRWYWx1ZSA9IFVwcGVyVGllckV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRU
aHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKSwgdGFyZ2V0VmFsdWUpOwor
ICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVk
VGhyZXNob2xkKHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE0MiwxMSArMTQzLDggQEAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVAogewogICAgIGNhbGxlcklz
TExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXItPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogCi0g
ICAgaWYgKGNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgewotICAgICAgICBpZiAoIWNh
bGxlcklzTExJbnQpCi0gICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bV9o
YXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKKyAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpKQogICAgICAgICByZXR1cm4gTExJbnQ6OmNoZWNrcG9pbnRPU1JFeGl0RnJvbUlubGlu
ZWRDYWxsVHJhbXBvbGluZVRodW5rKCkuY29kZSgpOwotICAgIH0KIAogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0OwogCkBAIC0xOTgsOCArMTk2LDYg
QEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVAogI3VuZGVmIExMSU5U
X1JFVFVSTl9MT0NBVElPTgogCiAgICAgfSBlbHNlIHsKLSAgICAgICAgYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXItPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7Ci0KICAgICAgICAgc3dpdGNo
ICh0cnVlQ2FsbGVyQ2FsbEtpbmQpIHsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNh
bGw6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CkBAIC0zMTMsNiAr
MzA5LDEwIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAg
ICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxp
bmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0
YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNv
ZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAgICAg
ICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVC
bG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNsb3Qo
aW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJH
UFIpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUo
KSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJ
VDo6c19tZXRhZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVKSVRD
b25zdGFudFBvb2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVD
b2RlQmxvY2ssIEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw3ICs0MDQsOCBAQCB2b2lk
IGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6
UmVnaXN0ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRh
Z2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgY29kZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKKyAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4
aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGlu
ZUpJVENvbnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CiAKICAgICAgICAgQnl0
ZWNvZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlv
bjsKQEAgLTQyMCwxMiArNDIxLDE2IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2
bSwgQ0NhbGwKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4
aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKLSAgICBqaXQuYWRkUHRy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KGNvZGVCbG9ja0ZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBp
ZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgeworICAgICAgICBBU1NFUlQoIVJlZ2lzdGVy
U2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhMTEludDo6UmVnaXN0ZXJzOjpw
Y0dQUikpOworICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSwgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNo
R1BSKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSk7CisKICAgICAgICAgLy8gU2luY2Ugd2UncmUg
anVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCiAg
ICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgdm0uYWRkcmVz
c09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSk7CiAgICAgfQotICAgIAorCisgICAgaml0LmFkZFB0cihB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihj
b2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKICAgICBq
aXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUklu
Zm86OnJlZ1QyKTsKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0clRh
Zyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJD
YWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIK
ICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNp
bmNsdWRlICJERkdKSVRDb2RlLmgiCkBAIC0yODY5LDcgKzI4NzAsNyBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uRmluZFN3CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNv
bnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzRG91YmxlKCkpOwogICAgIGRvdWJs
ZSBhc0RvdWJsZSA9IHZhbHVlLmFzRG91YmxlKCk7CkBAIC0yODkwLDcgKzI4OTEsNyBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIHJldHVybiBsaW5rZWRUYWJsZS5j
dGlGb3JWYWx1ZSgqdW5saW5rZWRUYWJsZSwgc3RySW1wbCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hh
cio+KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzMwLDYgKzczMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6Omlu
UGFpcihjYWxsZWVUYWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1ZmZs
ZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxl
RGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVE
YXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwog
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytp
KSB7CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCBpICsgMSk7CkBAIC04ODksNyArODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBp
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAg
ICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAg
ICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI4LDYgKzgy
OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwg
RGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFs
bG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51
bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9q
aXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAg
ICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
aSArIDEpOwpAQCAtOTc5LDcgKzk4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsK
ICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICszOTg1
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBKSVRQ
dXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBl
OjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNl
ZFJlZ2lzdGVycywKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwg
Y29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2VkUmVn
aXN0ZXJzLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpTVmFs
dWVSZWdzOjpwYXlsb2FkT25seShwcm9wZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQUlJl
Zywgc3R1YkluZm9HUFIpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0g
dHJ1ZTsKIApAQCAtNDkwNSw3ICs0OTA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlQWRkKE5vZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5n
cmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVj
b2RlSW5kZXgoKTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2Vs
aW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
SW5kZXgpOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRB
ZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmppdENvZGUo
KS0+Y29tbW9uLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5n
RnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRj
aGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGQ7CiAgICAgCkBAIC00OTg5LDcgKzQ5ODks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVTdWIoTm9kCiAgICAgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRo
UHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUU3ViSUMqIHN1
YklDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAg
SklUU3ViSUMqIHN1YklDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUU3ViSUMoYXJp
dGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVl
U3ViT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25W
YWx1ZVN1YjsKIApAQCAtNTU3MSw3ICs1NTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlTmVnYXRlKAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2pp
dC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5
dGVjb2RlSW5kZXgoKTsKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFz
ZWxpbmVDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29k
ZUluZGV4KTsKLSAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklU
TmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5qaXRDb2Rl
KCktPmNvbW1vbi5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGlu
Z0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlOwogICAgIGNvbXBpbGVNYXRo
SUMobm9kZSwgbmVnSUMsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
KTsKQEAgLTU4MTUsNyArNTgxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1
ZU11bChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgo
KS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUlu
ZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNv
ZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4
KTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTXVsSUMo
YXJpdGhQcm9maWxlKTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNv
bW1vbi5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0
aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwogCkBAIC0xNDc3MCw3ICsxNDc3MCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3BlUmVn
ID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChz
aGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCksIGNh
bGxTaXRlSW5kZXgpOworICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRv
d1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChub2Rl
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBjb21waWxlKFN0YXRl
JiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogCiAgICAgaWYgKHZtLnNob3VsZEJ1aWxkZXJQQ1RvQ29k
ZU9yaWdpbk1hcHBpbmcoKSkgewogICAgICAgICBCMzo6UENUb09yaWdpbk1hcCBvcmlnaW5NYXAg
PSBzdGF0ZS5wcm9jLT5yZWxlYXNlUENUb09yaWdpbk1hcCgpOwotICAgICAgICBjb2RlQmxvY2st
PnNldFBDVG9Db2RlT3JpZ2luTWFwKG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFs
aXplci0+YjNDb2RlTGlua0J1ZmZlcikpOworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24u
bV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFs
aXplci0+YjNDb2RlTGlua0J1ZmZlcik7CiAgICAgfQogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNFbnRyeVB0clRhZz4gbGFiZWwgPSBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIt
PmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oc3RhdGUucHJvYy0+Y29kZSgpLmVudHJ5cG9pbnRM
YWJlbCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDggQEAgcHVibGljOgogICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uKCkgb3ZlcnJpZGU7CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjb21tb25E
YXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVENvZGUsIGNvbW1vbik7IH0K
ICAgICB2b2lkIHNocmlua1RvRml0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIG92ZXJyaWRl
OworCisgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUg
eyByZXR1cm4gY29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKICAgICBE
Rkc6OkNvbW1vbkRhdGEgY29tbW9uOwogICAgIFZlY3RvcjxPU1JFeGl0PiBtX29zckV4aXQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDE0ICs1Miw2IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICBncmFwaC5y
ZWdpc3RlckZyb3plblZhbHVlcygpOwogCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB7Ci0gICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAg
ICBBU1NFUlQoY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKLSAgICB9Ci0jZW5k
aWYKLQogICAgIC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlz
IGVudHJ5cG9pbnQgdG90YWxseSBkaWZmZXJlbnRseQogICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0
aGVyIHdlJ3JlIGRvaW5nIE9TUiBlbnRyeSBvciBub3QuCiAgICAgQ0NhbGxIZWxwZXJzIGppdChj
b2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBACiAj
aW5jbHVkZSAiSlNTZXRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5j
bHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIK
ICNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNp
bmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKQEAgLTIzMjAsNiArMjMyMSwxOCBA
QCBwcml2YXRlOgogICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVFN1YkdlbmVyYXRvcj4o
YXJpdGhQcm9maWxlLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7
CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5l
cmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVEFkZElDKiBhZGRNYXRoSUMoREZH
OjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1
cm4gY29tbW9uLmFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNf
c2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0
aWMgSklUTXVsSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUTXVsSUMocHJvZmlsZSk7
IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9y
Pjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVROZWdJQyogYWRkTWF0aElDKERGRzo6Q29t
bW9uRGF0YSYgY29tbW9uLCBVbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29t
bW9uLmFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxH
ZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklU
U3ViSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9m
aWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKwog
ICAgIHZvaWQgY29tcGlsZVZhbHVlTXVsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRp
Yyk7CkBAIC0yMzkxLDcgKzI0MDQsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAgICAgICAg
ICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBC
b3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgSklU
VW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRo
SUM8R2VuZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVFVuYXJ5TWF0
aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRD
b2RlLT5jb21tb24sIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dl
bmVyYXRvciA9IEdlbmVyYXRvcihKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLCBKU1ZhbHVl
UmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKIAogICAgICAgICAg
ICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwpAQCAtMjUwMCw3ICsyNTEz
LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVy
YXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25T
dGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRo
UHJvZmlsZSk7CisgICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRDb2RlLT5jb21tb24sIGFyaXRo
UHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRv
cihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkp
LAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBKU1Zh
bHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkpLCBwYXJhbXMuZnBTY3JhdGNoKDApLAogICAgICAgICAg
ICAgICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKQEAg
LTQzMTcsNyArNDMzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9H
UFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0
Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJv
eDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29k
ZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUlu
ZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2Nr
KCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBB
Y2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQ
Uik7CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJv
bCA9IHRydWU7CkBAIC0xMDI4NSw2ICsxMDI5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1BbGxvY2F0ZWRB
cmdzOyArK2kpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVu
ZChWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAg
ICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygp
LT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVw
Q2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQu
Y29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhzZW1hbnRpY05vZGVPcmlnaW4pOwpAQCAtMTA0
NDMsMTMgKzEwNDU3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVE
YXRhLmFyZ3MuYXBwZW5kKHBhcmFtc1sxICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOwogCiAg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bUFyZ3M7CisgICAg
ICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNodWZm
bGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogCiAgICAg
ICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCkt
PmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAK
LSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwg
WyZdIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVE
YXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
aml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICAgICAg
fSk7CkBAIC0xMDc5Miw3ICsxMDgwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VE
YXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5r
SW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAg
ICAgICAgICAgICAgICB9KTsKQEAgLTExMDczLDcgKzExMDg4LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQ
YXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJl
Z1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxT
bG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTMsMjggKzQxMywxNiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihW
TSYgdm0sIHVuc2lnbmVkCiAKICAgICBSZWdpc3RlclNldCBhbGxGVExDYWxsZWVTYXZlcyA9IFJl
Z2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAgICAgY29uc3QgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiB2bUNhbGxlZVNh
dmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJl
Z2lzdGVyU2V0IHZtQ2FsbGVlU2F2ZXNUb1NraXAgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3Rl
cnMoKTsKLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICBqaXQu
bG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBqaXQu
YWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVS
ZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICB9CiAKICAgICBm
b3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVn
Lm5leHQoKSkgewogICAgICAgICBpZiAoIWFsbEZUTENhbGxlZVNhdmVzLmdldChyZWcpKSB7Ci0g
ICAgICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghdm1DYWxsZWVTYXZlcy0+ZmluZChyZWcpKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVkIHVud2luZEluZGV4ID0gY29k
ZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCktPmluZGV4T2YocmVnKTsKICAgICAgICAgY29u
c3QgUmVnaXN0ZXJBdE9mZnNldCogYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA9IGJhc2VsaW5lQ2Fs
bGVlU2F2ZXMtPmZpbmQocmVnKTsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCogdm1DYWxsZWVT
YXZlID0gbnVsbHB0cjsgCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQot
ICAgICAgICAgICAgdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChyZWcpOwogCiAg
ICAgICAgIGlmIChyZWcuaXNHUFIoKSkgewogICAgICAgICAgICAgR1BSUmVnIHJlZ1RvTG9hZCA9
IGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPyBHUFJJbmZvOjpyZWdUMCA6IHJlZy5ncHIoKTsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1RvTG9hZCAhPSBHUFJJbmZvOjpyZWdUMSk7CiAK
ICAgICAgICAgICAgIGlmICh1bndpbmRJbmRleCA9PSBVSU5UX01BWCkgewogICAgICAgICAgICAg
ICAgIC8vIFRoZSBGVEwgY29tcGlsYXRpb24gZGlkbid0IHByZXNlcnZlIHRoaXMgcmVnaXN0ZXIu
IFRoaXMgbWVhbnMgdGhhdCBpdCBhbHNvCkBAIC00NTIsOCArNDQwLDYgQEAgc3RhdGljIHZvaWQg
Y29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAogCiAgICAgICAgICAgICBpZiAoYmFzZWxpbmVS
ZWdpc3Rlck9mZnNldCkKICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rl
ciwgYmFzZWxpbmVSZWdpc3Rlck9mZnNldC0+b2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmICh2
bUNhbGxlZVNhdmUgJiYgIXZtQ2FsbGVlU2F2ZXNUb1NraXAuZ2V0KHZtQ2FsbGVlU2F2ZS0+cmVn
KCkpKQotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEZQUlJlZyBmcFJlZ1RvTG9hZCA9IGJhc2VsaW5l
UmVnaXN0ZXJPZmZzZXQgPyBGUFJJbmZvOjpmcFJlZ1QwIDogcmVnLmZwcigpOwogCkBAIC00NjQs
MTkgKzQ1MCw5IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAog
ICAgICAgICAgICAgaWYgKGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAgICAg
aml0LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNy
b0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQt
Pm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAodm1DYWxsZWVTYXZlICYmICF2bUNhbGxlZVNh
dmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNhdmUtPnJlZygpKSkKLSAgICAgICAgICAgICAgICBqaXQu
c3RvcmVEb3VibGUoZnBSZWdUb0xvYWQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICBSZWdpc3RlckF0T2Zm
c2V0KiB2bUNhbGxlZVNhdmUgPSB2bUNhbGxlZVNhdmVzLT5maW5kKEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0
ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUt
Pm9mZnNldCgpKSk7Ci0KLSAgICAgICAgdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+Zmlu
ZChHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BS
SW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKLSAgICB9Ci0KICAgICBzaXplX3Qg
YmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9j
ay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAKICAgICBpZiAoZXhpdC5t
X2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJi
CSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjggQEAgY2xhc3MgTWV0YWRhdGEKICAgICBk
ZWYgc3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNv
bnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBnZW5lcmF0ZU9mZnNldE9m
RnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKKyAgICAgICAgICAgIGZpZWxkTmFtZXMubWFw
IGRvIHxmaWVsZE5hbWV8CisgICAgICAgICAgICAgICAgIiN7cHJlZml4fXN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uLTFdfSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAg
ICAgICAgICAgZW5kLmpvaW4oIlxuIikKKyAgICAgICAgZW5kCisKKyAgICAgICAgZGVmIGNvbnZl
cnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGZpZWxkTmFtZXMpCiAgICAgICAgICAgICBmaWVsZHMu
bWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhh
c2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxk
cyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCisgICAgICAgICAgICAgICAg
ICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0
eXBlLCBmaWVsZE5hbWVzKX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307
IgorICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAg
ICAgICAgICAgIGZpZWxkTmFtZXMucHVzaChmaWVsZE5hbWUpCisgICAgICAgICAgICAgICAgICAg
ICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgogICAgICAgICAgICAgICAg
IGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAg
ZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVs
ZE5hbWVzID0gW10KKyAgICAgICAgcHJlZml4ID0gIiAgICAgICAgIgorICAgICAgICBmaWVsZHMg
PSBjb252ZXJ0RmllbGRzKHByZWZpeCwgQGZpZWxkcywgZmllbGROYW1lcykKKyAgICAgICAgZmll
bGRzID0gZmllbGRzICsgIlxuIiArIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBm
aWVsZE5hbWVzKQogCiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXpl
cnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzY3LDYgKzM2NywyOCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6bG9hZFByb3BlcnR5
KEdQUlJlCiAgICAgICAgIHJlc3VsdCk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9y
ZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0
LCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBKdW1wIGlzSW5saW5lID0gYnJhbmNoMzIoTGVzc1Ro
YW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgCisg
ICAgbG9hZFB0cihBZGRyZXNzKG9iamVjdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaCk7CisgICAgbmVnMzIob2Zmc2V0KTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZz
ZXQsIG9mZnNldCk7CisgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKKyAgICAKKyAgICBpc0lubGlu
ZS5saW5rKHRoaXMpOworICAgIGFkZFB0cigKKyAgICAgICAgVHJ1c3RlZEltbTMyKAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEpTT2JqZWN0KSkgLQorICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PGludDMyX3Q+KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDIpICogc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpLAorICAgICAgICBvYmpl
Y3QsIHNjcmF0Y2gpOworICAgIAorICAgIHJlYWR5LmxpbmsodGhpcyk7CisgICAgCisgICAgc3Rv
cmVWYWx1ZSh2YWx1ZSwKKyAgICAgICAgQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNF
aWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSk7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVyZShWTSYgdm0s
IFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkK
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjk4LDggKzcyMCwxMyBAQCB2b2lkIEFzc2VtYmx5
SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzCiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0
VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlu
a0luZm8qIGluZm8pCiB7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpy
ZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJl
Z1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBp
bmZvKTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCit7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0g
bmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjgzMDUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjM0LDggKzIzNCw5IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKLSAgICAv
LyBOb3RlIHRoYXQgdGhpcyBjbG9iYmVycyBvZmZzZXQuCisgICAgLy8gTm90ZSB0aGF0IHRoZXNl
IGNsb2JiZXIgb2Zmc2V0LgogICAgIHZvaWQgbG9hZFByb3BlcnR5KEdQUlJlZyBvYmplY3QsIEdQ
UlJlZyBvZmZzZXQsIEpTVmFsdWVSZWdzIHJlc3VsdCk7CisgICAgdm9pZCBzdG9yZVByb3BlcnR5
KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBHUFJSZWcg
c2NyYXRjaCk7CiAKICAgICB2b2lkIG1vdmVWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3Mgc3JjUmVncywg
SlNWYWx1ZVJlZ3MgZGVzdFJlZ3MpCiAgICAgewpAQCAtMzc5LDE1ICszODAsMjYgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgfQogCisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlGcmFtZSwgR1BSUmVnIHNjcmF0
Y2gpCisgICAgeworI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorICAg
ICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCBzY3JhdGNoKTsKKyAgICAgICAgY29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHNjcmF0Y2gpOworI2Vsc2UK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOworICAgICAgICBVTlVTRURfUEFS
QU0oc2NyYXRjaCk7CisjZW5kaWYKKyAgICB9CisKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lKQog
ICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICAgICAg
Y29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfTsKICAgICAgICAgR1BSUmVnIHRlbXAxID0gdXNlZFJl
Z2lzdGVycy5nZXRGcmVlR1BSKDApOwotICAgICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCB0
ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVySW1wbCh0ZW1wMSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKICNlbHNlCiAgICAgICAgIFVOVVNF
RF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJh
bWUpOwogI2VuZGlmCiAgICAgfQogICAgIApAQCAtMTcyMCw2ICsxNzMyLDcgQEAgcHVibGljOgog
ICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5n
R2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3Bh
Y2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2Fs
bCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2Rl
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5l
SklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVk
ZSAiSklUTWF0aElDLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCisjaW5jbHVkZSAiU3RydWN0
dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVEFkZElDKiBNYXRoSUNIb2xk
ZXI6OmFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVy
biBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUTXVsSUMqIE1hdGhJQ0hvbGRlcjo6
YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1f
bXVsSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRTdWJJQyogTWF0aElDSG9sZGVyOjphZGRK
SVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJ
Q3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE5lZ0lDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE5l
Z0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFk
ZChhcml0aFByb2ZpbGUpOyB9CisKK3ZvaWQgTWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MoTWF0
aElDSG9sZGVyJiBvdGhlcikKK3sKKyAgICBtX2FkZElDcyA9IFdURk1vdmUob3RoZXIubV9hZGRJ
Q3MpOworICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhlci5tX211bElDcyk7CisgICAgbV9uZWdJ
Q3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICBtX3N1YklDcyA9IFdURk1vdmUob3Ro
ZXIubV9zdWJJQ3MpOworfQorCitCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZShDb2Rl
UmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5
Q2hlY2spCisgICAgOiBEaXJlY3RKSVRDb2RlKFdURk1vdmUoY29kZSksIHdpdGhBcml0eUNoZWNr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAsIE1hdGhJQ0hvbGRlcigpCit7IH0KKworQmFz
ZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9CYXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJKSVRDb2Rl
LmgiCisjaW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVuYXJ5QXJpdGhQ
cm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgU2ltcGxl
SnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3MgTWF0aElDSG9sZGVy
IHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKTsK
KyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklU
TXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1YklDKiBh
ZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklUTmVn
SUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+IG1f
YWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBt
X25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKworY2xhc3MgSklUQ29u
c3RhbnRQb29sIHsKK3B1YmxpYzoKKyAgICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisg
ICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIEdsb2JhbE9iamVjdCwKKyAg
ICAgICAgQ2FsbExpbmtJbmZvLAorICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAg
RnVuY3Rpb25EZWNsLAorICAgICAgICBGdW5jdGlvbkV4cHIsCisgICAgfTsKKworICAgIHN0cnVj
dCBWYWx1ZSB7CisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgUGFja2VkUHRyPHZvaWQ+IHBh
eWxvYWQ7CisgICAgfTsKKworICAgIEpJVENvbnN0YW50UG9vbCgpID0gZGVmYXVsdDsKKyAgICBK
SVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAgICBKSVRDb25z
dGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworCisgICAg
Q29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXplKCk7CisgICAgICAgIG1f
Y29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1ZSBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fY29uc3Rh
bnRzOworfTsKKworCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29k
ZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2RlKENv
ZGVSZWY8SlNFbnRyeVB0clRhZz4sIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hl
Y2spOworICAgIH5CYXNlbGluZUpJVENvZGUoKSBvdmVycmlkZTsKKyAgICBQQ1RvQ29kZU9yaWdp
bk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBtX3BjVG9Db2RlT3Jp
Z2luTWFwLmdldCgpOyB9CisKKyAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5r
ZWRDYWxsczsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAg
IEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAg
IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZp
eGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAg
IEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50
UG9vbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVP
cmlnaW5NYXA7CisgICAgYm9vbCBtX2lzU2hhcmVhYmxlIHsgdHJ1ZSB9OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHNpemVfdCBCYXNlbGluZUpJVFBsYW46OmNvZGVTaXpl
KCkgY29uc3QKIAogQ29tcGlsYXRpb25SZXN1bHQgQmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6ZSgp
CiB7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5U
aHJlYWQoKTsKKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9u
TWFpblRocmVhZChtX2NvZGVCbG9jayk7CiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNl
IENvbXBpbGF0aW9uRmFpbGVkOgogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJs
b2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODMw
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dD
aGlja2VuUHJvbG8KICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12b2lk
IENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVl
KSkpOwotICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAgc3Rv
cmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNv
ZGVCbG9jayksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2Fs
bFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBDQ2Fs
bEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hhZG93
UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAg
ICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpAQCAt
NzIsNiArNjIsMjggQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQog
ICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9CiAK
KwordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cit2b2lkIENDYWxsSGVscGVyczo6
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFs
dWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKKyAg
ICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOworICAgIHN0b3JlUHRyKHNj
b3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgc2NvcGUpKSk7CisgICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRv
d1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2Nr
KSkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IGNhbGxTaXRlSW5kZXgpKSk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywg
R1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQ
YWNrZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwor
dm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFk
b3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9j
aywgY2FsbFNpdGVJbmRleCk7Cit9CisKIHZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92
ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRM
YW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0
aW9uKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4NDAs
MTQgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9sYXRp
bGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRvcCBv
ZgogICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQgbG9n
U2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBz
Y3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2Nv
cGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJS
ZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXgpOworcHVibGljOgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BS
UmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1
c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisgICAg
dm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1Zh
bHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIg
dG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZv
aWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQ
UlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogdm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0
ZXJzKENvZGVCbG9jayogY29kZUJsb2NrKQogeworICAgIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVy
cyhjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1l
U2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zKQorewogICAgIFJlZ2lzdGVyU2V0IGNhbGxl
ZVNhdmVSZWdpc3RlcnMgeyBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkgfTsK
LSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zID0g
Y29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVn
aXN0ZXJBdE9mZnNldCBlbnRyeSB7IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZy
YW1lU2h1ZmZsZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDEzIEBAIHB1Ymxp
YzoKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJnczsKICAgICB1bnNpZ25lZCBudW1Mb2Nh
bHMgeyBVSU5UX01BWCB9OwogICAgIHVuc2lnbmVkIG51bVBhc3NlZEFyZ3MgeyBVSU5UX01BWCB9
OworICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OyAvLyBPbiBvdXIgbWFj
aGluZSBmcmFtZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVyTWFwPFZhbHVlUmVj
b3Zlcnk+IHJlZ2lzdGVyczsKICAgICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZhbGlk
R1BSUmVnIH07CiAKICAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sq
KTsKKyAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zm
c2V0TGlzdCopOwogI2VuZGlmCiAgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgQ2FsbEZyYW1lU2h1
ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYQogICAgIDogbV9qaXQoaml0KQogICAgICwgbV9v
bGRGcmFtZShkYXRhLm51bUxvY2FscyArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVy
cywgbnVsbHB0cikKICAgICAsIG1fbmV3RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQotICAgICwgbV9hbGlnbmVkT2xkRnJh
bWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCi0gICAgICAgICsgcm91bmRB
cmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
KSkKKyAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVycyArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLm51bVBhcmFtZXRl
cnMpKQogICAgICwgbV9hbGlnbmVkTmV3RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUlu
UmVnaXN0ZXJzCiAgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEu
YXJncy5zaXplKCkpKQogICAgICwgbV9mcmFtZURlbHRhKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSAt
IG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSkKICAgICAsIG1fbG9ja2VkUmVnaXN0ZXJzKFJlZ2lzdGVy
U2V0OjphbGxSZWdpc3RlcnMoKSkKICAgICAsIG1fbnVtUGFzc2VkQXJncyhkYXRhLm51bVBhc3Nl
ZEFyZ3MpCisgICAgLCBtX251bVBhcmFtZXRlcnMoZGF0YS5udW1QYXJhbWV0ZXJzKQogewogICAg
IC8vIFdlIGFyZSBhbGxvd2VkIGFsbCB0aGUgdXN1YWwgcmVnaXN0ZXJzLi4uCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsgKQpAQCAtNDIxLDcg
KzQyMSw3IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCBtX25ld0ZyYW1l
QmFzZSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYXJndW1lbnRDb3VudE9LID0KICAgICAg
ICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbV9uZXdGcmFt
ZUJhc2UsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1faml0LmNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIobV9udW1QYXJhbWV0ZXJzKSk7CiAgICAgbV9qaXQuYWRkMzIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSArIENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1f
aml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50UmVn
aXN0ZXJzKCkpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1fbmV3
RnJhbWVCYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVyLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3IEBA
IHB1YmxpYzoKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgZGF0YTsKICAgICAgICAgZGF0
YS5udW1Mb2NhbHMgPSBudW1Mb2NhbHMoKTsKICAgICAgICAgZGF0YS5udW1QYXNzZWRBcmdzID0g
bV9udW1QYXNzZWRBcmdzOworICAgICAgICBkYXRhLm51bVBhcmFtZXRlcnMgPSBtX251bVBhcmFt
ZXRlcnM7CiAgICAgICAgIGRhdGEuY2FsbGVlID0gZ2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7IENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSB9KS0+cmVjb3ZlcnkoKTsKICAgICAgICAgZGF0YS5hcmdzLnJl
c2l6ZShhcmdDb3VudCgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3Vu
dCgpOyArK2kpCkBAIC03OTgsNiArNzk5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBlcmZvcm1T
YWZlV3JpdGVzKCk7CiAgICAgCiAgICAgdW5zaWduZWQgbV9udW1QYXNzZWRBcmdzIHsgVUlOVF9N
QVggfTsKKyAgICB1bnNpZ25lZCBtX251bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgOiBKU0ludGVyZmFj
ZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgbnVsbHB0cikK
ICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2Rl
QmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCiAgICAgLCBtX3Bj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAgLTc3LDYgKzc3LDkgQEAgSklUOjpKSVQoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5n
KGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25zdGFudCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7CisgICAgbV9wcm9m
aWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrID0gY29k
ZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtOTAsOCAr
OTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0gICAgCi0gICAgc2tpcE9wdGlt
aXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVj
dXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVC
bG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIHNraXBPcHRpbWl6
ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0
aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZy
YW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlG
cmFtZSk7CkBAIC0xMTMsMTUgKzExNiwyMCBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdh
dGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVB
ZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVk
KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQp
Cit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0
KQogeworICAgIGF1dG8gb2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9TZXQsIFdh
dGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVk
KSkpOworICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlD
aGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlD
aGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAg
aWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJSZWFkT25s
eVdhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUg
PT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwg
T0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2ludCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVz
cyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1t
MzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1Bv
aW50ZXJPZmZzZXQoKQpAQCAtMTI5LDEyICsxMzcsMTggQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNr
UG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDAp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5r
ZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdU
MCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsKIH0KIAordm9p
ZCBKSVQ6OnJlc2V0U1AoKQoreworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKK30KKwogI2RlZmluZSBORVhUX09QQ09ERShuYW1lKSBcCiAgICAgbV9i
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgKyBj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IFwKICAgICBicmVhazsKQEAgLTE4MSw2MSArMTk1
LDQ0IEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWMKICAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJ
blByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtl
ZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOworICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVzdWx0KTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJh
cmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGJyYW5jaFRlc3RQ
dHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpy
YXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uUmFyZURh
dGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCByZXN1
bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0
LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkpLCBy
ZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rp
b25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSksIHJlc3VsdCk7CisKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpvZmZz
ZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
cmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworCisjaWYgQVNTRVJUX0VOQUJMRUQK
KyAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpOworICAgIH0pOworI2VuZGlmCit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKIHsKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgICAgICBkYXRhTG9n
KCJDb21waWxpbmcgIiwgKm1fcHJvZmlsZWRDb2RlQmxvY2ssICJcbiIpOwogICAgIAogICAgIGpp
dEFzc2VydFRhZ3NJblBsYWNlKCk7CiAgICAgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsK
ICAgICAKLSAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5zaXplKCk7CisgICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCk7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2FsbExp
bmtJbmZvSW5kZXggPSAwOwogCi0gICAgVk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAg
Qnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7Ci0gICAgaWYgKG1fbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxv
Y2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4o
dm0pKSkgewotICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNh
dXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KLSAgICAgICAg
Ly8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhl
IExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8KLSAgICAgICAgLy8gZG8gT1NSIGVudHJ5IGlu
dG8gdGhlIGJhc2VsaW5lIEpJVCBpbiBhIGxvb3AsIGl0IHdpbGwgcGFzcyBpbiB0aGUgYnl0ZWNv
ZGUgb2Zmc2V0IGl0Ci0gICAgICAgIC8vIHdhcyBleGVjdXRpbmcgYXQgd2hlbiBpdCBraWNrZWQg
b2ZmIG91ciBjb21waWxhdGlvbi4gV2Ugb25seSBuZWVkIHRvIGNvbXBpbGUgY29kZSBmb3IKLSAg
ICAgICAgLy8gYW55dGhpbmcgcmVhY2hhYmxlIGZyb20gdGhhdCBieXRlY29kZSBvZmZzZXQuCi0K
LSAgICAgICAgLy8gV2Ugb25seSBib3RoZXIgYnVpbGRpbmcgdGhlIGJ5dGVjb2RlIGdyYXBoIGlm
IGl0IGNvdWxkIHNhdmUgdGltZSBhbmQgZXhlY3V0YWJsZQotICAgICAgICAvLyBtZW1vcnkuIFdl
IHBpY2sgYW4gYXJiaXRyYXJ5IG9mZnNldCB3aGVyZSB3ZSBkZWVtIHRoaXMgaXMgcHJvZml0YWJs
ZS4KLSAgICAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAy
MDApIHsKLSAgICAgICAgICAgIC8vIEFzIGEgc2ltcGxpZmljYXRpb24sIHdlIGRvbid0IGZpbmQg
YWxsIGJ5dGVjb2RlIHJhbmdlcyB0aGF0IGFyZSB1bnJlYWNoYWJsZS4KLSAgICAgICAgICAgIC8v
IEluc3RlYWQsIHdlIGp1c3QgZmluZCB0aGUgbWluaW11bSBieXRlY29kZSBvZmZzZXQgdGhhdCBp
cyByZWFjaGFibGUsIGFuZAotICAgICAgICAgICAgLy8gY29tcGlsZSBjb2RlIGZyb20gdGhhdCBi
eXRlY29kZSBvZmZzZXQgb253YXJkcy4KLQotICAgICAgICAgICAgQnl0ZWNvZGVHcmFwaCBncmFw
aChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKLSAgICAgICAgICAg
IEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVj
b2RlT2Zmc2V0KG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChibG9jayk7Ci0KLSAgICAgICAgICAgIEdyYXBoTm9kZVdvcmts
aXN0PEJ5dGVjb2RlQmFzaWNCbG9jayo+IHdvcmtsaXN0OwotICAgICAgICAgICAgc3RhcnRCeXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgd29ya2xpc3QucHVzaChi
bG9jayk7Ci0KLSAgICAgICAgICAgIHdoaWxlIChCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0g
d29ya2xpc3QucG9wKCkpIHsKLSAgICAgICAgICAgICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KHN0ZDo6bWluKHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgYmxvY2st
PmxlYWRlck9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNz
b3JJbmRleCA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpCi0gICAgICAgICAgICAgICAgICAgIHdvcmts
aXN0LnB1c2goJmdyYXBoW3N1Y2Nlc3NvckluZGV4XSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBB
bHNvIGFkZCBjYXRjaCBibG9ja3MgZm9yIGJ5dGVjb2RlcyB0aGF0IHRocm93LgotICAgICAgICAg
ICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+
bGVhZGVyT2Zmc2V0KCk7IGJ5dGVjb2RlT2Zmc2V0IDwgYmxvY2stPmxlYWRlck9mZnNldCgpICsg
YmxvY2stPnRvdGFsTGVuZ3RoKCk7KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGlu
c3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChhdXRvKiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmhhbmRsZXJGb3JC
eXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGdyYXBoLmZpbmRCYXNpY0Jsb2NrV2l0aExl
YWRlck9mZnNldChoYW5kbGVyLT50YXJnZXQpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ynl0ZWNvZGVPZmZzZXQgKz0gaW5zdHJ1Y3Rpb24tPnNpemUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
IAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8
IGluc3RydWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4LDEyICsyNzUsMTUgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9u
czo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewotICAgICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQ
cm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNv
ZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG9wY29kZUlEICE9IG9w
X2NhdGNoKQorICAgICAgICAgICAgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CisKICAgICAg
ICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzKQogICAg
ICAgICBERUZJTkVfU0xPV19PUChsZXNzZXEpCkBAIC01MjcsNyArNTI3LDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0
VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2Rl
SW5kZXgpLnB0cigpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkK
ICAgICAgICAgICAgIGRhdGFMb2dMbigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBm
b3IgIiwgbV9ieXRlY29kZUluZGV4LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgp
KTsKQEAgLTU0NSw4ICs1NDUsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQogCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0
aW9uKCkpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9j
b2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0
eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxG
cmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsi
LCBieXRlY29kZU9mZnNldCwgIl0gU0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2Zy
ICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9CkBAIC02MDMsNyArNjAzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV92YWwp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfaWQpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9zdWIpCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZnJv
bV9zY29wZSkKICNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcHV0X3RvX3Nj
b3BlKQpAQCAtNjc0LDU1ICs2NzQsNTUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCkKICNlbmRpZgogfQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRD
b25zdGFudFBvb2xSZWdpc3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBD
b2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVn
VDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZz
ZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVT
YXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVn
aXN0ZXJzKCkpOworfQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemlu
ZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2
ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgREZHOjpDYXBh
YmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwo
KTsKICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAg
ICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXpl
ZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxz
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBE
Rkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVl
OwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9z
aG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIAotICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKLSAgICBj
YXNlIEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1bGVDb2RlOgotICAgIGNhc2UgRXZhbENvZGU6
Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAgICAgICAgLy8gV2UgY291
bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVu
aW5saW5lYWJsZSBjYWxsLgotICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0
aW9uLgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2Fu
SW5saW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwot
ICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
dHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2st
PmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxT
aW1wbGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRh
YmxlcygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdK
dW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRh
YmxlcygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3
aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJs
b2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9z
d2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2Vk
Q29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZl
Y3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5r
ZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShP
cHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
ICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAg
IG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2Nr
KTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9y
UHJvZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBv
ZmYgb2YgVW5saW5rZWRDb2RlQmxvY2suCisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVu
aXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KICAgICBp
ZiAoVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBG
SVhNRTogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiBVbmxpbmtlZENvZGVCbG9jay4K
ICAgICAgICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3IFByb2Zp
bGVyOjpDb21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9jayksCisgICAgICAgICAgICAgICAg
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxl
ZENvZGVCbG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAg
ICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJv
ZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENv
ZGVCbG9jayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFw
cGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CkBAIC03NDIs
MTEgKzc0MiwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAg
ICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7
CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
KQorICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExh
YmVsIGJlZ2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQg
ZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFt
ZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAt
NzU3LDE2ICs3NTgsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bgogICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVt
aXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lz
dGVycygpOworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0
ZXJzKCk7CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
KSB7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVu
dCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVu
dCkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV91bmxpbmtlZENv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygp
ICsgRml4ZWRWZWN0b3I8VmFsdWVQcm9maWxlPjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7
CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1f
dW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAg
ICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1
dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwogICAgICAgICAgICAgICAgIC8vIGtlZXAg
dGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0
aGUgZHVtbXkgdmFsdWUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0
cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQorICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNzc3LDEyICs3ODIsMTIgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAg
IGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
CiAgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNl
dCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50
YWdHUFIoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJl
Z3MpOworICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdU
MiwgYXJndW1lbnQgKiBzaXplb2YoVmFsdWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0
T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBl
KCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVC
bG9jay0+aml0VHlwZSgpKSk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAg
ICAgIG1fdm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIp
LCAqdGhpcyk7CkBAIC03OTksMjQgKzgwNCwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtX
aXRob3V0RmluYWxpemluCiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsK
ICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJy
b3IsIG1fY29kZUJsb2NrKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxG
cmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3Is
IHJlZ1QwKTsKIAogICAgIC8vIElmIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBu
ZXZlciByZXF1aXJlIGFyaXR5IGZpeHVwLgotICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0g
bV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAhPSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+
Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAg
Ym9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkgIT0gMTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBG
dW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVj
ayA9IGxhYmVsKCk7Ci0gICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9j
ay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQpOworCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xv
Z3VlKCk7Ci0gICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJ
blByb2xvZ3VlKHJlZ1QwKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVz
cyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAK
ICAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpLCByZWdUMSk7Ci0gICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVn
VDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJl
Z2luTGFiZWwsIHRoaXMpOworICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBU
cnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1Rv
KGJlZ2luTGFiZWwsIHRoaXMpOwogCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgoMCk7CiAKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQog
ICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2Rl
QmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBv
cGVyYXRpb25DYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpb24obV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3Rvcigp
ID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNr
LCBhcmd1bWVudEdQUjApOwogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIo
WmVybywgcmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTgzOSw3
ICs4NDcsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAg
ICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1
bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1
ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywg
bV91bmxpbmtlZENvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVm
Zm9ydCkpOwogICAgIGxpbmsoKTsKIH0KIApAQCAtODU4LDggKzg2Niw4IEBAIHZvaWQgSklUOjps
aW5rKCkKICAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewogICAgICAgICBjYXNlIFN3aXRj
aFJlY29yZDo6SW1tZWRpYXRlOgogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVy
OiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
LSAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRT
aW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAg
ICAgICAgICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
PEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0
T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRU
YWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBvZmZzZXQgPSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3MSw4
ICs4NzksOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3
aXRjaFJlY29yZDo6U3RyaW5nOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFi
bGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0
aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVs
c1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBm
b3IgKGF1dG8mIGxvY2F0aW9uIDogdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygp
KSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hP
ZmZzZXQ7CkBAIC05MDYsNiArOTE0LDI3IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIHJlY29yZC5jYWxsZWUpOwogICAgIH0KIAor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2Vu
ZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAg
ICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAgICAgICB9
CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFsaXplSUNz
KG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMpOworICAg
IGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlWYWxzKTsK
KyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFs
cyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlW
YWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKKyNlbHNlCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0
QnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlk
c1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7CkBAIC05MTcsMjEgKzk0NiwyNSBAQCB2b2lkIEpJVDo6
bGluaygpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIp
OwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsK
ICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1
ZmZlcik7CisjZW5kaWYKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxs
Q29tcGlsYXRpb25JbmZvKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgVW5saW5rZWRD
YWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZv
OworICAgICAgICBpbmZvLmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJ
bnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbik7CisjZWxzZQogICAg
ICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsK
ICAgICAgICAgaW5mby5zZXRDb2RlTG9jYXRpb25zKAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFy
dCksCiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pKTsKKyNlbmRpZgorCiAgICAgfQogCi0gICAg
ewotICAgICAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJl
bHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxk
ZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAg
ICB9Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVy
LmZpbmFsaXplKCkpOworICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwor
ICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1f
bGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5h
cHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDI2
ICs5NzMsNDIgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWSht
X2NvbXBpbGF0aW9uKSkgeworICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIG1ha2UgdGhlIGJ5
dGVjb2RlIHByb2ZpbGVyIGtub3cgYWJvdXQgVW5saW5rZWRDb2RlQmxvY2s/CiAgICAgICAgIGlm
IChPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkKICAgICAgICAgICAg
IG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fY29tcGlsYXRpb24uZ2V0KCksIHBh
dGNoQnVmZmVyKTsKLSAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21w
aWxhdGlvbihtX2NvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOworICAgICAgICBtX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcHJvZmlsZWRDb2RlQmxvY2ssICpt
X2NvbXBpbGF0aW9uKTsKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIuZGlkQnVpbGRNYXBwaW5nKCkpCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtl
VW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyKSwgcGF0Y2hCdWZmZXIpOwogICAgIAorICAgIC8vIEZJWE1FOiBNYWtlIGEgdmVyc2lvbiBv
ZiBDb2RlQmxvY2tXaXRoSklUVHlwZSB0aGF0IGtub3dzIGFib3V0IFVubGlua2VkQ29kZUJsb2Nr
LgogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAg
ICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQg
Y29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBj
b2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3Byb2ZpbGVkQ29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29k
ZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgQmFz
ZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2spKTsKKworICAgIG1faml0Q29kZS0+
bV91bmxpbmtlZENhbGxzID0gV1RGTW92ZShtX3VubGlua2VkQ2FsbHMpOworICAgIG1faml0Q29k
ZS0+bV9ldmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7Cisg
ICAgbV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0gV1RGTW92ZShtX3VubGlua2VkU3R1
YkluZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9z
d2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
cyA9IFdURk1vdmUobV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1f
aml0Q29kZU1hcCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCk7CisgICAgbV9qaXRDb2Rl
LT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNzKTsKKyAgICBtX2ppdENvZGUtPm1fY29uc3RhbnRQb29s
ID0gV1RGTW92ZShtX2NvbnN0YW50UG9vbCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtX2pp
dENvZGUtPm1faXNTaGFyZWFibGUgPSBtX2lzU2hhcmVhYmxlOworI2Vsc2UKKyAgICBtX2ppdENv
ZGUtPm1faXNTaGFyZWFibGUgPSBmYWxzZTsKKyNlbmRpZgogCiAgICAgaWYgKEpJVEludGVybmFs
Ojp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBh
dCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5z
dGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVu
dGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAl
cCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxl
TWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnko
KS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6Zmlu
YWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFp
blRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXND
b21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICsxMDE3LDE0IEBAIENvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFp
blRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2Nr
LT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7
Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVy
T2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8mIGhhbmRs
ZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8gRklYTUU6
IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9
IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFy
Z2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9Ci0KICAgICBp
ZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2Rl
T3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX2ppdENv
ZGUtPm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApOwog
CiAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklU
LT5hZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8K
LSAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6
ZSgpKSk7CisgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CiAKLSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2pp
dENvZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtl
ZEJhc2VsaW5lQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4g
Q29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQpAQCAtOTk4LDExICsxMDM2LDExIEBAIHNpemVfdCBK
SVQ6OmNvZGVTaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9
CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0KQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGRv
TWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbmcoZWZmb3J0KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJl
YWQoKTsKKyAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxOCAr
MTA4MCwyOCBAQCB2b2lkIEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAg
ICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlBy
ZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJh
bWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpm
cmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxz
KCkpID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsK
IAogICAgIHJldHVybiByb3VuZExvY2FsUmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNl
dChjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGxJblJlZ2lzdGVycyk7CiB9CiAKLWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihD
b2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9y
KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBmcmFtZVJlZ2lzdGVyQ291bnRG
b3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKworaW50IEpJVDo6c3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxv
Y2spIC0gMSkub2Zmc2V0KCk7CiB9CiAKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihD
b2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKIEhhc2hNYXA8Q1N0cmluZywg
U2Vjb25kcz4gSklUOjpjb21waWxlVGltZVN0YXRzKCkKIHsKICAgICBIYXNoTWFwPENTdHJpbmcs
IFNlY29uZHM+IHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsNyBAQAogCiAjZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwg
ZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9m
ZnNldCBcIiVzXCIgc2hvdWxkIGJlICVkLCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19j
YXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCisjaW5jbHVk
ZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
Q29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCkBAIC00NCw2
ICs0NSw3IEBACiAjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlm
dEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCisjaW5jbHVkZSAiTExJ
bnREYXRhLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVz
ZWRQb2ludGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsxNTEs
MTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRp
b25JbmZvIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZv
OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50
OworI2Vsc2UKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAg
ICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOworI2VuZGlmCiAgICAgfTsKIAogICAg
IHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCi0gICAgY2xhc3Mg
SklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICBj
bGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBKSVRTdHViQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFRodW5rczsKQEAgLTE3MSw2
ICsxNzgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUg
ZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zm
c2V0LgogICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zm
c2V0ID0gMjU2OwogCisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAg
IHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2Rl
SW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAg
ICAgICAgfkpJVCgpOwpAQCAtMTc4LDI4ICsxODcsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6dm0oKTsgfQogCiAgICAgICAg
IHZvaWQgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9y
dCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFkKCk7Cisg
ICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayop
OwogICAgICAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGRvTWFp
blRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgICAgICAKICAgICAgICAgc3Rh
dGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zm
c2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJ
VCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsK
KyAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnBy
aXZhdGVDb21waWxlKGNvZGVCbG9jaywgZWZmb3J0KTsKICAgICAgICAgfQogCisgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsK
ICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sq
KTsKKyAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2Rl
QmxvY2sqKTsKICAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJs
b2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmlu
ZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBpbGVUaW1lKCk7CiAKKyAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0YUdQUiA9IExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRh
VGFibGVHUFI7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfY29uc3RhbnRzR1BS
ID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFI7CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lk
IHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxp
bmtQYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKICAgICAg
ICAgdm9pZCBsaW5rKCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxl
KEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0
ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCiAgICAgICAgIC8v
IEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNr
LgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2ICsyMzcsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIH0KICNlbmRpZgogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAg
ICAgICAgdm9pZCBsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zm
c2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5
cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBl
LCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcs
IGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICBwdWJs
aWM6CisgICAgICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQ
UlJlZyk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJl
Zyk7CisgICAgICAgIHZvaWQgbG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3Rlciwg
R1BSUmVnKTsKKworICAgICAgICB2b2lkIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1
ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOworCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2so
SnVtcCBqdW1wVG9IYW5kbGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNo
ZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7CkBAIC0yNTQsNiArMjk0LDE5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9J
bmRleCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CisgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0g
b3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwor
ICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9w
OjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKKyAgICAgICAgLCB2
b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgorICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAorICAgICAgICAgICAgT3A6Om9wY29kZUlEID09
IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MK
KyAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBP
cDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCisgICAgICAgICwg
dm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKKyNlbHNlCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29k
ZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3Zh
cmFyZ3MKQEAgLTI2NSw5ICszMTgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25z
dHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMKICAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5r
SW5mbyopOworI2VuZGlmCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAg
IGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4NywxNCArMzQxLDEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVt
aXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3du
ZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAogICAg
ICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdU
MCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2Rl
JiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNl
CiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1Zh
bHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBAIC0zMDUsOCArMzU4
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
c2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZh
bHVlLCB2b2lkPgogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29k
ZShPcCBieXRlY29kZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0
Y2hHUFIpOwotICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdp
c3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNj
cmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAg
IHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVn
aXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgcHRyZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIs
IFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAgLTU5Myw3ICs2NDgsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3Bf
aGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CkBAIC02MTEsNyArNjY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjI3LDE0ICs2ODEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAg
ICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUp
OwotICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBB
Y2Nlc3NUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwg
QWNjZXNzVHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZv
aWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0
IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNo
ZWNrKFJlc29sdmVUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBlbWl0VmFy
UmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwogICAgICAgICB2
b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsK
ICAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBA
IC02NDYsNyArNzAwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBl
bWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
KTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOwotICAgICAg
ICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9p
ZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAg
ICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJl
VmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpAQCAtNjU1LDYgKzcwOSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lz
dGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgICAgICBib29sIGlzS25vd25DZWxs
KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZp
cnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJl
Z2lzdGVyKTsKQEAgLTY3NiwxMyArNzMxLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNf
cHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mKTsKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRf
cHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X2J5X2lkX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0m
KTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
c2xvd19vcF9wdXRfdG9fc2NvcGVHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2Vu
ZXJhdG9yKFZNJik7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gb3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9o
YW5kbGVyR2VuZXJhdG9yKFZNJik7CkBAIC02OTYsMzIgKzc0OSwxNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNv
bHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFy
KTsKICAgICAgICAgfQogCi0jZGVmaW5lIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9S
KHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihW
TSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9HRVRfRlJPTV9TQ09Q
RV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQot
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKLQot
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29w
ZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gTW9k
dWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gZW1pdCBpbmxpbmUgdGhhbiB1
c2UgYSB0aHVuay4KLSAgICAgICAgICAgIC8vIFJlc29sdmVkQ2xvc3VyZVZhciBiZWNhdXNlIHdl
IGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9wX3Jlc29sdmVfc2NvcGUuCi0gICAgICAgICAg
ICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAgICAgfQotCi0jZGVmaW5lIERFQ0xBUkVfUkVTT0xWRV9T
Q09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBl
IyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVf
UkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVu
a05hbWUpOwotCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1RydXRoeUdlbmVyYXRvcihW
TSYpOwogCiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKKyAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJv
bV9zY29wZUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsK
KyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2Vu
ZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4s
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYsIHN0
ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworCiAgICAg
ICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKQEAgLTc2MCwx
MCArNzk3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2
b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3Ms
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgQWRk
cmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwg
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29u
c3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAg
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlw
ZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjEsMjAgKzg1OCwyMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7CiAgICAgICAg
IH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0
aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0
ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3Vs
dCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5
dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4g
QXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUg
Qnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVu
Y3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQs
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyB0YXJnZXQs
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAg
ICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0
LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRyZXNzKEdQUkluZm86
Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
Ynl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJl
c3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25U
eXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE5LDI1ICs5NTYsMjIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgp
IHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXpl
ZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAg
ICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmls
aW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGll
cmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxs
IGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkg
eyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgZW1pdE1hdGVyaWFsaXpl
TWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAgICAgICB2b2lkIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxl
VGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAg
ICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBt
ZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVu
dCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhp
cy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUg
cmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dElu
Zm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0g
ICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwor
CisgICAgICAgIHZvaWQgcmVzZXRTUCgpOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVy
cHJldGVyOwogCkBAIC05NjQsOSArOTk4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJl
Y29yZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4g
bV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJp
dGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9l
eGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENh
bGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEwMDAs
MTEgKzEwMzEsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5z
dHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlv
blRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXpl
ZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29s
IG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0
Q29kZTsKKyAgICAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9
OworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxw
dHIgfTsKKworICAgICAgICBNYXRoSUNIb2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8
QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENvZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1f
Y29uc3RhbnRQb29sOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFs
T2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsK
KyAgICAgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAg
ICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAgICBG
aXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAg
Rml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisK
KyAgICAgICAgc3RydWN0IE5vdEFDb2RlQmxvY2sgeyB9IG1fY29kZUJsb2NrOworCisgICAgICAg
IGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hh
cihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFy
Z3VtZW50R1BSMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVu
dEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MzIwLDcgKzMyMSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkK
ICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJl
Z1QwLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZl
cnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogfQogCkBAIC01NzMsNyArNTc3LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KGNvbnN0IAogCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVt
aXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIyLDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3Vi
bGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJVE5lZ0lD
KiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJQyk7CiAg
ICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZh
bHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0
aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
QXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAtODk5LDggKzkw
NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0g
ICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmls
ZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0
aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0
aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsK
IH0KQEAgLTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFy
eU1hdGhJQzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRl
SW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVk
SW5saW5lQ29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
bWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNo
R1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNy
Y1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0
aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQ
Uiwgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAxNSwxMCArMTAyMSwxMSBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNj
cmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hH
UFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVm
dFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChu
b25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmln
aHRSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEzICsxMDYyLDE0IEBAIHZvaWQgSklU
OjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0
UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRT
bG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdU
NCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywg
YXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZElt
bVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRp
b25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBU
cnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAg
YXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIwLDEzICsxMTI4LDE0IEBAIHZvaWQg
SklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hv
dWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdz
LCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmls
ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25f
R0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pK
TWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRT
KQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsxMTc1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAg
YXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAgIFNuaXBwZXRPcGVyYW5k
IGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBw
ZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7
CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1
Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRN
dWxJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3Mu
YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRk
KGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPiht
dWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZU11bCk7CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbXVsKGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRTdWJJQyog
c3ViSUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCkpOwogICAgIGVtaXRTdG9yZShkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QxLCByZWdUMCk7CiB9CiAK
QEAgLTE1Nyw3ICsxNTcsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogSklUOjpjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiB7CiAgICAgdW5zaWduZWQg
Y2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBpbnQgYXJn
Q291bnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2lu
dCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oc3RhY2tPZmZz
ZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpKTsKIApAQCAtMTkyLDcg
KzE5Miw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAg
ICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7
CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9y
VmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgLWZpcnN0RnJlZVJlZ2lz
dGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9u
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRW
YXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsK
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNiAqIHNpemVvZih2
b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0yMDIsNyArMjAyLDcg
QEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1
cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVs
c2UKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsK
LSAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDQpLCBmaXJzdFZhckFyZ09mZnNl
dCwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0
KSwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KQEAgLTIzMiwxMCAr
MjMyLDEwIEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwogICAgIHN0b3JlUHRy
KGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1l
T2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBy
ZWdUMSwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwogCiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2
YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5r
SW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5m
byA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJl
Z1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBAIC0y
NTgsOCArMjU4LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAog
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKIAogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKLSAg
ICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5m
byk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUp
OwpAQCAtMjg2LDExICsyODYsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5z
dHJ1Y3RpbwogICAgICovCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKICAgICBp
ZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2st
PmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgICAgICBp
bmZvID0gbV9wcm9maWxlZENvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSk7CiAgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOwog
ICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwg
d2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgogICAgIAotICAgIGF1dG8gYnl0ZWNvZGVJ
bmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKKyAgICBhdXRv
IGJ5dGVjb2RlSW5kZXggPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3Ry
dWN0aW9uKTsKICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVj
b2RlSW5kZXgpLmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMp
LCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAg
ICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7IC8vIHJlZ1QxLCByZWdUMCBob2xkcyBj
YWxsZWUuCkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91
bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDEyICszNDEsMTEg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKICAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRo
KCptX3ZtLCAqdGhpcyk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cykgewpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsNyAr
Mzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIEpT
VmFsdWVSZWdzIG5leHRSZWdzID0gSlNWYWx1ZVJlZ3ModGFnTmV4dEdQUiwgcGF5bG9hZE5leHRH
UFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LAorICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLAogICAgICAgICBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwKICAgICAgICAgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCkBAIC00
MTAsNyArNDA5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBuZXh0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgbmV4dFJlZ3MpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBuZXh0UmVncyk7CiAKICAgICBmYXN0
Q2FzZS5saW5rKHRoaXMpOwpAQCAtNDQwLDEwICs0MzksMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIC8vIG1ldGFkYXRhCisgICAgICAgIGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCAvLyBtZXRhZGF0YQogICAgICAgICBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgogICAgICAgICBuZXh0VlJlZywg
Ly8gcmVzdWx0Ci0gICAgICAgIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgLy8gYXJnMQorICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQogICAgICAgICBnZW4uc3R1YkluZm8oKSwgLy8gYXJn
MgogICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVyYXRvckdQUiwgcGF5bG9hZEl0ZXJhdG9yR1BS
KSwgLy8gYXJnMwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOyAvLyBhcmc0CkBAIC00NTIsNyArNDUxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIGF1dG8gZG9u
ZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9
CkBAIC00NjAsNyArNDU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewog
ICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNhc2UgTmFy
cm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC01MDYsNyArNTA1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBw
cmVzZXJ2ZWRSZWdzLmFkZCh0YWdWYWx1ZUdQUik7CiAgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRk
KHBheWxvYWRWYWx1ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssCisgICAgICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLAog
ICAgICAgICAgICAgSklUVHlwZTo6QmFzZWxpbmVKSVQsCiAgICAgICAgICAgICBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCkBAIC01MzMsMTAgKzUzMiwxMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMSA9IHJlZ1Q2OwogICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUNzsKICAgICAgICAg
Y29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAg
ICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFs
dWVSZWdzKHRhZ0RvbmVHUFIsIHBheWxvYWREb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUg
PSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh0YWdEb25lR1BSLCBwYXlsb2FkRG9u
ZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSk7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2Nv
ZGVCbG9jaywKKyAgICAgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssCiAgICAgICAgICAgICBK
SVRUeXBlOjpCYXNlbGluZUpJVCwKICAgICAgICAgICAgIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwKICAgICAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpKSwKQEAgLTU4OCwxMCArNTg3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAot
ICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQor
ICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIC8vIG1l
dGFkYXRhCiAgICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlv
bgogICAgICAgICAgICAgZG9uZVZSZWcsIC8vIHJlc3VsdAotICAgICAgICAgICAgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCisgICAgICAgICAgICBU
cnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJn
MQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKICAgICAgICAgICAgIEpTVmFs
dWVSZWdzKHRhZ0l0ZXJSZXN1bHRHUFIsIHBheWxvYWRJdGVyUmVzdWx0R1BSKSwgLy8gYXJnMwog
ICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudCkucmF3Qml0cygpKTsgLy8gYXJnNApAQCAtNjAyLDcgKzYwMSw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0LmxpbmsodGhp
cyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElz
Tm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9i
amVjdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkp
OwogICAgIH0KIAogICAgIHsgICAKQEAgLTYxOCwxMCArNjE3LDEwIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KAotICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0
YQorICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIC8v
IG1ldGFkYXRhCiAgICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJh
dGlvbgogICAgICAgICAgICAgdmFsdWVWUmVnLCAvLyByZXN1bHQKLSAgICAgICAgICAgIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICAg
ICAgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8v
IGFyZzEKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLCAvLyBhcmcyCiAgICAgICAgICAgICBK
U1ZhbHVlUmVncyh0YWdJdGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFy
ZzMKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhD
YWxsLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2Fs
bFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSku
dmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4IEBAIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBj
aGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJ
bmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNo
ZWNrcG9pbnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0
YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKKwog
ICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0
ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJl
Z1QwKTsKICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QwKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBj
aGVja3BvaW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9y
ZTMyVG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9m
Q2FsbExpbmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0ZDo6ZW5hYmxl
X2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZGUsIENhbGxMaW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
IGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50
KQogewogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7
CkBAIC05MSw3ICs5Miw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVj
b2QKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRB
cmd1bWVudHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6
ZUZyYW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVS
ZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDAp
OworICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RG
cmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigt
Zmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhp
cywgcmV0dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJVDo6Y29tcGls
ZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBv
cGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNl
dHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJh
dGlvbihzZXR1cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwg
cmVnVDMsIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBj
b3VudC4KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsg
UGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9
IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8t
PmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25z
dGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
KSksIHJlZ1QzKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMs
IHJlZ1QyKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86
Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dl
c3QubGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywx
NiArMTMxLDE1IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxh
dGU8PgogYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29k
ZSkKIHsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwot
ICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6
OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFy
Z3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlZ1QxLCByZWdUMik7CisgICAgcmVzZXRTUCgpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVj
b2RlKTsKIApAQCAtMTQ4LDcgKzE1MSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyog
aW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFk
ZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxs
TGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRl
Y29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE1OSw0NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNl
dCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1
YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgq
bV92bSwgaW5mbyk7CisgICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0
ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFp
bENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKK2Jvb2wgSklUOjpjb21w
aWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVt
cGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRl
Y29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK2Jv
b2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlu
a2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxsRnJh
bWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdz
ID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0g
R1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0K
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0g
bWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVt
UGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFyYW1l
dGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICBzaHVmZmxl
RGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAg
ICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0
YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5hcmdzLnJl
c2l6ZShieXRlY29kZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRl
Y29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAg
ICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlz
cGxhY2VkSW5KU1N0YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAgICAgICBE
YXRhRm9ybWF0SlMpOwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAgICAgICBW
YWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVmZmxlRGF0
YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8tPnNldEZy
YW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBW
YWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0
YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMg
PSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigq
dGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRDb25zdGFu
dChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9
IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCBy
ZWdUMiwgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0
YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1Bh
dGhzKTsKKworICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8tPmZyYW1l
U2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9uZUxvY2F0
aW9uID0gbGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIxOCwxNCArMjI1LDI1
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBD
YWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIg
cmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0gICAgQ2Fs
bExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9l
dmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBp
bmZvKTsKKworICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOworICAgIGlm
IChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgaW5mbyA9IG1fdW5saW5rZWRD
YWxscy5hZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9w
Y29kZUlEKTsKKworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOworCisgICAgICAgIEFTU0VS
VChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAg
ICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkp
OworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnVubGlu
a2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFudDsKKyAg
ICB9CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7CiAKICAg
ICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdp
dGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBt
X2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7Ci0gICAgdWludDMyX3QgbG9j
YXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7CisgICAgdWlu
dDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLmJpdHMo
KTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBZGRyZXNzKGNhbGxG
cmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQpKTsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNh
bGxlZS4KQEAgLTIzNCwxNiArMjUyLDEyIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2Fs
bExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxU
eXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBl
bmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAgICBpZiAoY29tcGlsZVRh
aWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCisgICAgaWYgKGNvbXBp
bGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgsIGluZm9Db25zdGFu
dCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGxvYWRDb25zdGFudChpbmZvQ29uc3RhbnQsIHJl
Z1QyKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGF1dG8gc2xv
d1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAgICAgYXV0byBzbG93UGF0
aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdU
MCwgcmVnVDIsIFsmXSB7CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAg
ICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKICAgICAgICAgfSk7CkBA
IC0yNTMsMTQgKzI2NywxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVj
dGlvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8t
PmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJ
Qzo6WWVzKTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFi
ZWwoKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIHJlc2V0U1Ao
KTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KQEAgLTI3MywyMSArMjg2
LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdz
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAq
dGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlz
LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJv
bVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgcmVzZXRTUCgpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRl
Y29kZSk7CkBAIC0zOTUsMTcgKzQwNywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3Bl
cnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAs
IGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJ
ZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVk
IHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4
dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwog
fQpAQCAtNDE2LDEwICs0NDIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmpl
Y3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsK
ICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBA
IC00MzIsMTkgKzQ1NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
IHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JH
UFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRl
cmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBh
dXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJh
dG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhp
cyk7CiB9CkBAIC00NTIsNyArNDc0LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsK
ICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5h
cnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0
OTEsNzkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1
bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIy
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVy
aWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0
ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAg
bG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRP
ZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9N
ZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0
T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNl
ZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlv
biwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgp
OwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1Qw
CiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQ
UiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3Vs
dEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAg
bW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3Rl
eHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
ZG9udENsb2JiZXJSZWdpc3RlcjsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJl
c3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdz
ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVz
ZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJD
YWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUu
aW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIp
LCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25l
LmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1
YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUs
IHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICAgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgZG9uZUdQ
UiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRv
bmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAg
ICAgewotICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKLSAgICAgICAgR1BSUmVnIHNj
cmF0Y2gyID0gcmVnVDM7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9uZUdQ
UiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Ig
c2NyYXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
ID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAg
ICAgR1BSUmVnIGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRo
eSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1Qw
LCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsK
KyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpT
VmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsKKworICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGJhc2VH
UFIpOwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnBy
b3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCByZWdUNCwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0
byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRH
UFIpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01Mjcs
NTkgKzU3Nyw1NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNr
cG9pbnQoanVtcCgpKTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisKICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgIHsK
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAg
ICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCiAgICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2Jq
ZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RP
YmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCiAgICAg
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5p
bXBsKCk7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107CiAgICAgICAgIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0
ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVj
dChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJ
bmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxk
ZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygp
KTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
LQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCByZWdUMSk7Ci0gICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOworICAg
ICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+
KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
ZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBkb25lR1BSKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5v
dE9iamVjdC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93
SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9i
amVjdCwgYXJndW1lbnRHUFIwKTsKICAgICB9CiAKICAgICB7ICAgCiAgICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRl
Y29kZS5tX3ZhbHVlOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCiAg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFs
dWUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
W21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsK
LSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3Mo
R1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgICAgICBtb3ZlKGl0
ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgdmFsdWVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50KS5yYXdCaXRzKCkpOworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICsz
MiwxMSBAQAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJl
Z2lzdGVyU2V0LmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIFBDVG9Db2RlT3JpZ2lu
TWFwOworCiBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIENvbW1vbkRhdGE7CiBjbGFzcyBKSVRDb2Rl
OwpAQCAtMTU5LDEwICsxNjIsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0
YUlDKEpJVFR5cGUgaml0VHlwZSkKICAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0
YUlDKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjpp
c0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAg
fQogCkBAIC0yMjMsNiArMjI2LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1NoYXJlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2hhcmVBdHRyaWJ1dGUgPT0gU2hhcmVBdHRyaWJ1dGU6OlNoYXJlZDsg
fQogCisgICAgdmlydHVhbCBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSB7
IHJldHVybiBudWxscHRyOyB9CisKIHByaXZhdGU6CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAg
ICAgU2hhcmVBdHRyaWJ1dGUgbV9zaGFyZUF0dHJpYnV0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCB2b2lkIEpJVENvbXBpbGF0aW9uS2V5OjpkdW1w
KFByaW50U3RyZWFtCiAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIG91dC5wcmludCgiKENvbXBpbGUgb2YgIiwgKm1fcHJvZmlsZWRCbG9j
aywgIiB3aXRoICIsIG1fbW9kZSwgIikiKTsKKyAgICBvdXQucHJpbnQoIihDb21waWxlIG9mICIs
IFJhd1BvaW50ZXIobV9jb2RlQmxvY2spLCAiIHdpdGggIiwgbV9tb2RlLCAiKSIpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29t
cGlsYXRpb25LZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvbXBpbGF0aW9uS2V5LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNTcgKzMw
LDU2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBDb2Rl
QmxvY2tTZXQ7CitjbGFzcyBKU0NlbGw7CiAKIGNsYXNzIEpJVENvbXBpbGF0aW9uS2V5IHsKIHB1
YmxpYzoKICAgICBKSVRDb21waWxhdGlvbktleSgpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2Nr
KG51bGxwdHIpCisgICAgICAgIDogbV9jb2RlQmxvY2sobnVsbHB0cikKICAgICAgICAgLCBtX21v
ZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb24pCiAgICAgewogICAgIH0K
ICAgICAKICAgICBKSVRDb21waWxhdGlvbktleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIpCisgICAgICAgIDogbV9jb2Rl
QmxvY2sobnVsbHB0cikKICAgICAgICAgLCBtX21vZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpERkcp
CiAgICAgewogICAgIH0KICAgICAKLSAgICBKSVRDb21waWxhdGlvbktleShDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQotICAgICAgICA6IG1fcHJvZmls
ZWRCbG9jayhwcm9maWxlZEJsb2NrKQorICAgIEpJVENvbXBpbGF0aW9uS2V5KEpTQ2VsbCogcHJv
ZmlsZWRCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUpCisgICAgICAgIDogbV9jb2RlQmxv
Y2socHJvZmlsZWRCbG9jaykKICAgICAgICAgLCBtX21vZGUobW9kZSkKICAgICB7CiAgICAgfQog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAh
bV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRD
b21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuICFtX2NvZGVCbG9jayAmJiBtX21vZGUgPT0gSklU
Q29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CiAgICAgfQogICAgIAogICAgIGJv
b2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
ICFtX3Byb2ZpbGVkQmxvY2sgJiYgbV9tb2RlICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxp
ZENvbXBpbGF0aW9uOworICAgICAgICByZXR1cm4gIW1fY29kZUJsb2NrICYmIG1fbW9kZSAhPSBK
SVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKICAgICB9CiAgICAgCi0gICAg
Q29kZUJsb2NrKiBwcm9maWxlZEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9wcm9maWxlZEJsb2Nr
OyB9CiAgICAgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7
IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSklUQ29tcGlsYXRpb25LZXkmIG90
aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJvZmlsZWRCbG9jayA9PSBvdGhl
ci5tX3Byb2ZpbGVkQmxvY2sKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrID09IG90aGVyLm1f
Y29kZUJsb2NrCiAgICAgICAgICAgICAmJiBtX21vZGUgPT0gb3RoZXIubV9tb2RlOwogICAgIH0K
ICAgICAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBX
VEY6OnBhaXJJbnRIYXNoKFdURjo6UHRySGFzaDxDb2RlQmxvY2sqPjo6aGFzaChtX3Byb2ZpbGVk
QmxvY2spLCBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxKSVRDb21waWxhdGlvbk1v
ZGU+Ojp0eXBlPihtX21vZGUpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goV1RG
OjpQdHJIYXNoPEpTQ2VsbCo+OjpoYXNoKG1fY29kZUJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1
bmRlcmx5aW5nX3R5cGU8SklUQ29tcGlsYXRpb25Nb2RlPjo6dHlwZT4obV9tb2RlKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgot
ICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOworICAgIC8vIEVpdGhlciBDb2RlQmxvY2sq
IG9yIFVubGlua2VkQ29kZUJsb2NrKiBmb3IgYmFzbGVsaW5lIEpJVC4KKyAgICBKU0NlbGwqIG1f
Y29kZUJsb2NrOwogICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtX21vZGU7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgog
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgog
CkBAIC00NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHVi
SW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAg
ICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhj
b2RlQmxvY2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRU
eXBlKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRT
dHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAg
IG1fc3R1YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5
cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2Fs
bFNpdGVJbmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9
IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3I6OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBz
bG93UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQog
ewogICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25l
TG9jYXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYs
MTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHVi
SW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHVi
Um91dGluZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNp
Z25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIG1fc3RhcnQgPSBqaXQu
bGFiZWwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBl
KSk7CisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGpp
dC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIG1f
ZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJh
dG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTEwLDcgKzEx
OCw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyBiYXNl
LCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUpCiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9y
aWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBz
dHViSW5mb0dQUikKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lLnVpZCgpID09
IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAgICwgbV9p
c0xlbmd0aEFjY2Vzcyhjb2RlQmxvY2sgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9j
ay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAgLTEyMCw2ICsx
MjgsMzcgQEAgdm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIGdl
bmVyYXRlRmFzdENvbW1vbihqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNp
emVGb3JMZW5ndGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNz
KCkpOwogfQogCisKKyNpZiBVU0UoSlNWQUxVRTY0KQorc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRC
eUlkSW5saW5lQWNjZXNzKEpJVCYgaml0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBiYXNl
LCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNl
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJ
bmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRj
aCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHJvcGVydHkoYmFz
ZSwgc2NyYXRjaCwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9
IGppdC5qdW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0
LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBm
aW5pc2hlZC5saW5rKCZqaXQpOworfQorCit2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQ
UlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQu
bG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlk
SW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
YmFzZSwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRp
ZgorCiBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIHZh
bHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJ
bmZvR1BSKQpAQCAtMTM4LDYgKzE3NywyMCBAQCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcjo6Z2VuZXJhCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpz
aXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBt
X3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBz
dHViSW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1Yklu
Zm9HUFIsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRp
ZgorCiBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVC
bG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIApAQCAtMTQ5LDYgKzIw
MiwzNiBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yCiAgICAgbV9z
dHViSW5mby0+dXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNoKTsKIH0KIAorI2lmIFVTRShKU1ZB
TFVFNjQpCit2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisK
KyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJ
bmZvLCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lz
dGVyczo6c2NyYXRjaDsKKyAgICBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnNjcmF0Y2gyOworICAgIEdQUlJlZyB2YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lz
dGVyczo6dmFsdWU7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhz
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSks
IHNjcmF0Y2gpOworICAgIGppdC5zdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwg
YmFzZSwgc2NyYXRjaCwgc2NyYXRjaDIpOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgp
OworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGlu
aygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRpZgorCiB2b2lkIEpJ
VFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkK
IHsKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9w
ZXJ0eVJlcGxhY2UoKSk7CkBAIC0yMDAsNyArMjgzLDcgQEAgdm9pZCBKSVREZWxCeVZhbEdlbmVy
YXRvcjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZv
R1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8t
Pm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJ
VFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAg
ICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGpp
dC5sYWJlbCgpOwpAQCAtMjM2LDcgKzMxOSw3IEBAIHZvaWQgSklURGVsQnlJZEdlbmVyYXRvcjo6
Z2VuZXJhdGVGYXN0UGEKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7
Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHVi
Um91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVz
cyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZD
b2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1f
c2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFi
ZWwoKTsKQEAgLTI3MCw3ICszNTMsNyBAQCB2b2lkIEpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVy
YXRlRmFzdFBhCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAg
ICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRp
bmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9z
dHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0
cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQ
YXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7
CkBAIC0zMDAsNiArMzgzLDM0IEBAIHZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXQKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQ
cm9wZXJ0eUFjY2VzcygpKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCit2b2lkIEpJVEluQnlJ
ZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNp
Z25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFi
ZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKwor
ICAgIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BS
UmVnIHJlc3VsdCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgR1BSUmVn
IHNjcmF0Y2ggPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAg
IGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGpp
dC5ib3hCb29sZWFuKHRydWUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOworICAgIGF1dG8gZmlu
aXNoZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOwor
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwor
CisgICAgZmluaXNoZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30K
KyNlbmRpZgorCiBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpKSVRJbnN0YW5jZU9mR2VuZXJhdG9y
KAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LAogICAgIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIEdQUlJl
ZyBwcm90b3R5cGUsIEdQUlJlZyBzdHViSW5mb0dQUiwKQEAgLTMzMiw3ICs0NDMsNyBAQCB2b2lk
IEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzCiAgICAgbV9zdGFydCA9IGppdC5s
YWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1
YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVt
cChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwog
ICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7
CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0zNjgsNyArNDc5LDcgQEAgdm9pZCBKSVRH
ZXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwo
KTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZv
LT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNv
ZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9
IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAg
IG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtNDA1LDcgKzUxNiw3IEBAIHZvaWQgSklUUHV0QnlW
YWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAg
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9z
dHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRy
KCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNl
CiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2Rv
bmUgPSBqaXQubGFiZWwoKTsKQEAgLTQ0MCw3ICs1NTEsNyBAQCB2b2lkIEpJVFByaXZhdGVCcmFu
ZEFjY2Vzc0dlbmVyYXRvcjo6Z2VuCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwg
SklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0g
aml0LmxhYmVsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdp
bi5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvblZhbGlkYXRpb24uaCIKICNpbmNsdWRlICJKSVRP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQu
aCIKQEAgLTM4LDExICszOSwxMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJ
ZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNz
IEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVudW0gY2xhc3Mg
SklUVHlwZSA6IHVpbnQ4X3Q7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorc3RydWN0IEJhc2VsaW5l
RGVsQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBH
UFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5m
bzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86
OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2Ug
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9
IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BS
SW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUklu
Zm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAg
IC8vIFdlIHJlbHkgb24gdGhpcyB3aGVuIGxpbmtpbmcgYSBDb2RlQmxvY2sgYW5kIGluaXRpYWxp
emluZyByZWdpc3RlcnMgZm9yIGEgR2V0QnlWYWwgU3R1YkluZm8uCisgICAgc3RhdGljX2Fzc2Vy
dChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19h
c3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOwor
ICAgIHN0YXRpY19hc3NlcnQocmVzdWx0ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJl
c3VsdCk7CisgICAgc3RhdGljX2Fzc2VydChzdHViSW5mbyA9PSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mbyk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gy
ID0gR1BSSW5mbzo6cmVnVDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMg
PSBHUFJJbmZvOjpyZWdUNTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6YXJndW1lbnRH
UFIyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3RvID0gR1BSSW5mbzo6YXJndW1l
bnRHUFIzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6
YXJndW1lbnRHUFIxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BS
SW5mbzo6bm9uQXJnR1BSMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9
IEdQUkluZm86Om5vbkFyZ0dQUjE7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7
CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5m
bzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgZG9udENsb2JiZXJSZWdpc3RlciA9IEdQUkluZm86OnJlZ1QzOworfTsKKwor
c3RydWN0IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgdGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5
SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnNjcmF0Y2g7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJz
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3Ry
dWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmls
ZSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOwor
ICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUklu
Zm86OnJlZ1QyOworfTsKKyNlbmRpZgorCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7
CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDEy
ICsxNzIsMTggQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZm
ZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAog
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwot
ICAgIAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5z
aWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIgfTsKKyAg
ICB1bnNpZ25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2sq
IG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBtX3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
c3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1f
c2xvd1BhdGhDYWxsOwpAQCAtOTgsNyArMjE0LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTVmFsdWVS
ZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fc3RhcnQ7CitwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9z
bG93UGF0aEp1bXA7CiB9OwogCkBAIC0xMTEsNiArMjI3LDcgQEAgcHVibGljOgogICAgICAgICBK
U1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBB
Y2Nlc3NUeXBlKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImKTsKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNp
Z25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiBwcml2YXRlOgog
ICAgIGJvb2wgbV9pc0xlbmd0aEFjY2VzczsKQEAgLTEyNCw2ICsyNDEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAg
ICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1
YkluZm9HUFIpOwogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwog
fTsKIApAQCAtMTMyLDEwICsyNTAsMTEgQEAgcHVibGljOgogICAgIEpJVFB1dEJ5SWRHZW5lcmF0
b3IoKSA9IGRlZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAotICAgICAgICBDb2Rl
QmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFz
ZSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVn
IHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlw
ZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdp
c3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpT
VmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01B
TW9kZSwgUHV0S2luZCk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwg
dW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICAKICAg
ICBWX0pJVE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsKIApAQCAtMTYzLDEx
ICsyODIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3Nl
bWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1
ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAg
IE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAt
MTkxLDggKzMwOCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNy
b0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0
YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwog
fTsKIApAQCAtMjE2LDggKzMzMSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0
UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1Bh
dGhKdW1wOwogfTsKIApAQCAtMjQxLDggKzM1NCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2Vu
ZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1w
IG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjU1LDYgKzM2Niw3IEBAIHB1YmxpYzoKICAgICAg
ICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQ
Uik7CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2
b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5m
b0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogfTsKIAogY2xhc3MgSklUSW5zdGFuY2VP
ZkdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CkBAIC0y
NzcsOCArMzg5LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBm
YXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CiAKLXBy
aXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMDIsMTEgKzQx
Miw5IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3Nl
bWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1
ZVJlZ3MgbV9yZXN1bHQ7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTMzMCw4ICs0MzgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRo
KE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1
bXA7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwzOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lz
dGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlm
ICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7
Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0
YW50KSB7CisgICAgICAgIC8vIEFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3Rh
bnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0
YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25z
dGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7
CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiArMTgx
LDM2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRpZgog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6
OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1
cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1
ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJu
VmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZh
bHVlR1BSKTsKICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBB
ZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUg
Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIy
LCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0
U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogfQog
CiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewot
ICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3du
Q2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsy
MzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUg
dm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRl
eCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRl
Y29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7
CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVz
dWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpA
QCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9p
bnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAg
anVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7
CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29k
ZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3Bv
aW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1f
Ynl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwyOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXND
b25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJp
bmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworICAg
IGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICht
X3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMp
ID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmlu
ZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3Ro
KCkgPT0gMTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVS
ZWdzIHZhbHVlKQogewogICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwogCi0gICAg
Ly8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3
ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxz
ZQogICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8
RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwogICAgIHN0
b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwog
ICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNl
bmRpZgogfQorI2VuZGlmCiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5h
YmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwg
VmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlm
UHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVn
VDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNl
CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsNDEgKzM0OCwz
NyBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKyNp
ZiBVU0UoSlNWQUxVRTY0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBK
U1ZhbHVlUmVncyB2YWx1ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9y
KG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOwotfQogCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVn
KSk7CisgICAgcHRyZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZv
cjxCeXRlY29kZT4obV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6
Om9mZnNldE9mRmlyc3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNz
KHNfbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0
YWRhdGEsIEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CiB9CiAjZW5kaWYKIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BS
KQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZm
X3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBz
Y3JhdGNoR1BSKQogewogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIGFy
cmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3Rv
cmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxl
KTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJl
Z2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCiB7
Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBsb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhcnJheVBy
b2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpKTsK
LSAgICB9CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRl
Y29kZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9m
ZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3JhdGNoR1BSKTsKIH0KIAog
QUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxS
ZWdpc3RlciBzcmMpCkBAIC0zODAsNyArNDAxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9
IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25z
dGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVz
c0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTE3LDcgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAg
ICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTI3LDcgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3du
Q2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0LDExICs1MzUsNiBAQCBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAgICAgfQogfQogCi1BTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZp
cnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU2MCwxMSBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7
IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKICAgICBpZiAo
c3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwot
ICAgICAgICBlbHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50
T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAg
bW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3QpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC01NjYsMTEgKzU4Miw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRz
dDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3Rl
cklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNTk1
LDcgKzYwNiw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKIAog
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lz
dGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2Nr
LT5pc0tub3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHZSZWcpKQogICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAtNjM3LDMwICs2NDgs
NyBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7CiAgICAgaWYg
KHRhcmdldCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2st
Pm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1BTFdBWVNfSU5MSU5FIEdl
dFB1dEluZm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSBieXRlY29kZSkKLXsK
LSAgICB1bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQgKyAxOyAvLyBIYXNoTWFw
IGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkR2V0
UHV0SW5mb3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdldFB1dElu
Zm9zLmVuZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFsdWUpOwot
ICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2dldFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBnZXRQdXRJ
bmZvLm9wZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0aFByb2ZpbGUgSklUOjpj
b3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0gICAgdWludDY0X3Qga2V5
ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpICsgMSkgPDwgMzIg
fCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0YUlEKTsKLSAgICBhdXRv
IGl0ZXJhdG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRl
cmF0b3IgIT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRl
cmF0b3ItPnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0aFByb2ZpbGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgbV9jb3BpZWRB
cml0aFByb2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJuIGFyaXRoUHJv
ZmlsZTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNl
dChpbnN0cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjgxLDYgKzY2
OSw2MCBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0
dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZz
ZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwg
bV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0
ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxv
YWQ4KEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSB2YWx1ZSwgY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlOCh2YWx1
ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgp
Lm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmUzMlRv
TWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBv
ZmZzZXQpCit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29k
ZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHNfbWV0YWRhdGFHUFIsIHJlc3Vs
dCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvbnN0
YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxv
YWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9nbG9i
YWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BSUmVnIHJl
c3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOworICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFudHNW
ZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgY29u
c3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2Yodm9pZCopKSwgcmVzdWx0KTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25z
dCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAg
ICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBh
bGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBh
bGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwpAQCAt
MTEwLDcgKzExMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEkK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0
YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7
CkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0
YW5jZQogICAgIGVtaXRMb2FkUGF5bG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAgICAg
Ly8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxk
IGRvLgogICAgIEp1bXAgaGFzSW5zdGFuY2VWYWx1ZU5vdENlbGwgPSBlbWl0SnVtcElmTm90SlND
ZWxsKGhhc0luc3RhbmNlVmFsdWUpOwotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9
IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7
CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCiAgICAgLy8gV2Ug
a25vdyB0aGF0IGNvbnN0cnVjdG9yIGlzIGFuIG9iamVjdCBmcm9tIHRoZSB3YXkgYnl0ZWNvZGUg
aXMgZW1pdHRlZCBmb3IgaW5zdGFuY2VvZiBleHByZXNzaW9ucy4KICAgICBlbWl0TG9hZFBheWxv
YWQoY29uc3RydWN0b3IsIHJlZ1QwKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHByb3RvKTsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbV9wcm9m
aWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIHJlZ1QwLCAvLyByZXN1
bHQKICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdExvYWRU
YWcocHJvdG8sIHJlZ1QzKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluc3RhbmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdl
bi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMCwgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDEpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3Rh
bmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
Z2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QwLCByZWdUMiksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CiB9CiAKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20oCiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CiAgICAg
ZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMik7CiAgICAgZW1pdExvYWQoaGFzSW5z
dGFuY2VWYWx1ZSwgcmVnVDQsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2ZDdXN0b20sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMykpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgbV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBKU1Zh
bHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogfQogICAgIApAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5
cGVvZl9pc191bmRlZmluZWQoY28KICAgICAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAg
Y29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzc4LDcgKzM3OCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnMKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbmFtZSA9IGJ5dGVjb2RlLm1fbmFtZTsKICAgICBlbWl0TG9hZFBheWxvYWQoZnVu
YywgcmVnVDEpOwogICAgIGVtaXRMb2FkKG5hbWUsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQwOCw3ICs0MDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rp
CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDM7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwot
ICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJhbmNo
SWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdU
MSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MjIsNyArNDIyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogICAgIEpTVmFsdWVS
ZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAg
ICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCB2YWx1ZSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTQzNyw3ICs0MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFf
bnVsbChjb25zdCBJbnN0cnVjCiAKICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qy
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwog
CkBAIC00NjMsNyArNDYzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IElu
c3RydQogCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSksIHRhcmdldCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRkSnVt
cChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUg
PSBqdW1wKCk7CiAKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVm
aW5lZF9vcl9udWxsKGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25z
dGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7CiAgICAgQVNTRVJUKHNwZWNp
YWxQb2ludGVyLmlzQ2VsbCgpKTsKQEAgLTU1MiwxMyArNTUyLDEzIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNo
SWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlZ1QwLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aW5nRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIp
OwogICAgIHN0b3JlUmVzdWx0LmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNl
LgogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMK
ICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAK
ICAgICBzdG9yZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXR1
cm5WYWx1ZUdQUik7CkBAIC01OTEsMTQgKzU5MSwxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wRXFK
dW1wU2xvdyhWZWN0b3I8U2xvCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3Ry
aW5nKHJlZ1QyKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdU
MCwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBt
X3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVx
ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdldCk7CiAgICAgZG9u
ZS5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2Fz
ZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2Uu
bGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBpbGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDog
WmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFyZ2V0KTsKIAogICAgIGRvbmUubGluayh0aGlz
KTsKQEAgLTY0MywxMyArNjQzLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3QKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIp
KTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZVN0cmluZ0VxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwogICAgIHN0b3JlUmVzdWx0
LmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNl
LmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5s
aW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9yZVJlc3VsdC5s
aW5rKHRoaXMpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZXR1cm5WYWx1ZUdQUik7
CkBAIC03NjIsNyArNzYyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3Ry
aWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzcyLDcgKzc3Miw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCkBAIC03OTEsNyArNzkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJ
bnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CkBAIC04MjMsNyArODIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5z
dHJ1YwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihOb3RFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CkBAIC04NDYsNyArODQ2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1
Y3RpbwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7CiAgICAgY29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsK
ICAgICBlbWl0TG9hZChieXRlY29kZS5tX3ZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAganVtcFRvRXhj
ZXB0aW9uSGFuZGxlcih2bSgpKTsKIH0KIApAQCAtODYyLDcgKzg2Miw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwog
ICAgIGlzSW50MzIubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRz
dCkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTg4NCw3ICs4
ODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RyCiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoYXJndW1lbnRWYWx1ZVJlZ3MsIHJlZ1QyKSk7CiAg
ICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRz
dCkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTkxNSw3ICs5
MTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2Rl
QmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkK
ICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTkzMSw3ICs5MzEs
MTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNz
KHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKworICAgIC8vIFdoZW4gdGhlIExMSW50IHRocm93cyBhbiBleGNlcHRpb24s
IHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFkeSB0aWVyZWQgdXAKKyAgICAvLyB0
aGUgc2FtZSBDb2RlQmxvY2sgdG8gYmFzZWxpbmUsIGFuZCB3ZSdsbCBjYXRjaCB0aGUgZXhjZXB0
aW9uIGluIHRoZSBiYXNlbGluZSBKSVQgKGJlY2F1c2UKKyAgICAvLyB3ZSB1cGRhdGVkIHRoZSBl
eGNlcHRpb24gaGFuZGxlcnMgdG8gcG9pbnQgaGVyZSkuIEJlY2F1c2UgdGhlIExMSW50IHVzZXMg
YSBkaWZmZXJlbnQgdmFsdWUKKyAgICAvLyBpbnNpZGUgc19jb25zdGFudHNHUFIsIHRoZSBjYWxs
ZWUgc2F2ZXMgd2UgcmVzdG9yZSBhYm92ZSBtYXkgbm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgcmVn
aXN0ZXIuCisgICAgLy8gU28gd2UgcmVwbGVuaXNoIGl0IGhlcmUuCisgICAgeworICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkp
LCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVRE
YXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworICAgIH0K
IAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5k
Q2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVF
eGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTU0
LDcgKzk2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAg
ICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwg
ZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5
OAogCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKTsKICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9
IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxp
bmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5
T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTk5
Niw4ICsxMDA3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgog
ICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAog
ICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0
aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBw
ZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZz
ZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJ
VGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwMjMsMTMgKzEwMzQsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1
dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxl
IGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0g
ICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUg
PSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVz
W3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUlu
ZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFj
dGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAK
ICAgICBlbWl0TG9hZChzY3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgsIHVubGlu
a2VkVGFibGUubV9taW4pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldp
dGhVbmtub3duS2V5VHlwZSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4p
OwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIApAQCAtMTA0MSwx
MyArMTA1MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAg
ICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRo
aXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxp
bmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRDb2RlQmxvY2st
PnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBs
aW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAogICAgIGVtaXRMb2Fk
KHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4KTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgbV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxl
SW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIApAQCAt
MTA2OCw3ICsxMDc5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIC8vIEV2ZW4gdGhvdWdoIEpJVCBjb2RlIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRp
YWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVy
cywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0
aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIGZvciAoaW50IGkgPSBDb2RlQmxv
Y2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaSA8
IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7ICsraSkKKyAgICBmb3IgKGludCBpID0gQ29kZUJsb2Nr
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkgPCBt
X3Byb2ZpbGVkQ29kZUJsb2NrLT5udW1WYXJzKCk7ICsraSkKICAgICAgICAgZW1pdFN0b3JlKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
ZW50ZXIpOwpAQCAtMTA4Nyw3ICsxMDk4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3Bl
KGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+
KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3Rl
cklEIGNhbGxlZVJlZyA9IHJlZ1QwOwpAQCAtMTEyMiw3ICsxMTMzLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgU3RydWN0dXJl
SUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlciA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCkBA
IC0xMTQ1LDcgKzExNTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5z
dHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBl
TG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAt
MTIzOSw3ICsxMjUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Rh
aQogICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMSk7CiAgICAgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MocmVnVDEsIHJlZ1QyKTsKICAgICBlbWl0TG9hZFBheWxvYWQoYnl0
ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNo
YWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFk
b3dQYWNrZXRSZWcsIHRoaXNSZWdzLCByZWdUMywgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29k
ZUJsb2NrKSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDExICs1NCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fc3JjOwogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZh
bHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKLSAgICAgICAgZWxzZQorICAgICAg
ICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVC
bG9jayhzcmMpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7CisgICAgICAgICAg
ICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICB9CisKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtODcsMzcgKzkwLDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2pt
cChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0g
ICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUo
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwg
YWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAog
ICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0
b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBS
ZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxw
dHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRv
cjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdElu
aXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZz
ZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6
b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCks
IGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dD
YXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
KyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0
YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1
cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVj
dCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzEzMiw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJy
aWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNl
VmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5
bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFs
dWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24o
KSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5z
dGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9C
SkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VT
eW1ib2xGdW5jdGlvbikpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0
b3IsIHJlZ1QwKTsKIApAQCAtMTU0LDMwICsxNTYsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5
cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1
ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3Ig
YmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2Fu
IHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7
CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm90b0dQUiA9IEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIg
PSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBwcm90b0dQUik7CiAgICAgCiAgICAgLy8gQ2hlY2sg
dGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNo
ZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChw
cm90b0dQUiwgcHJvdG8pOwogCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAg
IHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDUs
Ci0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgcmVzdWx0R1BSLAorICAgICAgICB2
YWx1ZUdQUiwKKyAgICAgICAgcHJvdG9HUFIsCisgICAgICAgIHN0dWJJbmZvR1BSLAorICAgICAg
ICBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxLCBCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnNjcmF0Y2gyKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKKwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMTkyLDE0ICsyMDIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFk
ZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCByZWdUMiwgcmVnVDEpOwotICAgIH0g
ZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5l
SW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm8gPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWUgPT0gYXJndW1lbnRH
UFIyKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJv
dG8gPT0gYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFu
Y2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0yNDAsNyArMjQ5LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogCiAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
cmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7
CiAKQEAgLTM4Myw5ICszOTIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1
Y3Rpb24qCiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYg
dm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hh
bmRsZXJHZW5lcmF0b3IoVk0mKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQu
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQyMCw2IEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQog
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC00MzQsOSArNDQyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tl
eShjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9mdW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5h
bWUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTQ2NSw4ICs0NzQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3Ry
dWN0aQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Qy
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29u
c3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAg
ICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxz
ZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0
R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElT
dHViKHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAg
ICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgw
LDcgKzQ5MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZU
TCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywg
d2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
CkBAIC01MTksNyArNTMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5z
dHJ1YwogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1Qx
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNo
UHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24gPSBqdW1wKCk7CiAKQEAgLTU0Myw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmVxX251bGwoY29uc3QgSW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMg
LSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAg
IGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0
YXJnZXQpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQ
dHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CiAKQEAgLTU4MiwxNSArNTkzLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29y
X251bGwoY28KIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X3ZhbHVlOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQo
Ynl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlz
Q2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFu
Y2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgp
KSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsK
KyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVn
VDEpOworICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNv
ZGUsIE9wSm5lcVB0cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1
bXAoanVtcCgpLCB0YXJnZXQpOwogICAgIGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC02MjUsOCAr
NjM0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29s
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpT
VmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdl
dCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlz
VHJ1dGh5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAo
YnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTY0MCw3ICs2NTEsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0g
cmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNjk1LDcg
KzcwNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7Cisg
ICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCBy
ZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTcxMSw3
ICs3MjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6b3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB0
aHJvd25WYWx1ZUdQUiA9IGFyZ3VtZW50R1BSMTsKQEAgLTcyMCw3ICs3MzIsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAKICNpZiBOVU1CRVJfT0ZfQ0FMTEVF
X1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICBqaXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwg
YXJndW1lbnRHUFIwKTsKLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXJJbXBsKGFyZ3VtZW50R1BSMCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwpAQCAtOTA4
LDcgKzkyMCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCkBAIC05MTgsNyArOTMxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBy
ZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MzEsNyArOTQ1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydQogICAgIAogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBk
c3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAt
OTUxLDcgKzk2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50
LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTc4LDcgKzk5Miw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChy
ZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk5Myw3ICsxMDA3LDE4IEBAIHZvaWQgSklU
OjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdU
MywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNh
bGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisK
KyAgICAvLyBXaGVuIHRoZSBMTEludCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGVyZSBpcyBhIGNo
YW5jZSB0aGF0IHdlJ3ZlIGFscmVhZHkgdGllcmVkIHVwCisgICAgLy8gdGhlIHNhbWUgQ29kZUJs
b2NrIHRvIGJhc2VsaW5lLCBhbmQgd2UnbGwgY2F0Y2ggdGhlIGV4Y2VwdGlvbiBpbiB0aGUgYmFz
ZWxpbmUgSklUIChiZWNhdXNlCisgICAgLy8gd2UgdXBkYXRlZCB0aGUgZXhjZXB0aW9uIGhhbmRs
ZXJzIHRvIHBvaW50IGhlcmUpLiBCZWNhdXNlIHRoZSBMTEludCB1c2VzIGEgZGlmZmVyZW50IHZh
bHVlCisgICAgLy8gaW5zaWRlIHNfY29uc3RhbnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdlIHJl
c3RvcmUgYWJvdmUgbWF5IG5vdCBjb250YWluIHRoZSBjb3JyZWN0IHJlZ2lzdGVyLgorICAgIC8v
IFNvIHdlIHJlcGxlbmlzaCBpdCBoZXJlLgorICAgIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZK
SVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKKyAgICB9CiAKICAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9u
SWZDYXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzYsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3Vt
ZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVm
ZmVyOwotICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNo
LCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFu
ZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5k
VmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRv
IHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBF
eGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAg
ICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXIt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsK
LSAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUp
LCByZWdzKTsKLSAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQog
fQogCkBAIC0xMDUzLDggKzEwNjYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNv
bnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2Ny
dXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlv
bnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2st
PnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJs
ZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5NCwxNCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRj
aEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVj
b3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVj
b3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtl
ZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBl
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJs
ZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25L
ZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRU
YWJsZS5tX21pbik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcp
OwogfQogCkBAIC0xMDk5LDIwICsxMTEzLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9z
dHJpbmcoY29uc3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUu
bV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3Rp
bmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91
bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
dGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6
OlN0cmluZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRl
eCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1
Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBK
dW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0
ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhp
cyk7CkBAIC0xMTMzLDcgKzExNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0
IEluc3RydWN0CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKQEAgLTExNDgsNyArMTE2NCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29u
c3QgSW5zdHJ1Y3QKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xMTY2LDcgKzExODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0
cnVjCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFs
LCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAo
KTsKQEAgLTExODgsMTIgKzEyMDMsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBp
bml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9p
bnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBs
aWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBt
X2NvZGVCbG9jay0+bnVtVmFycygpOworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPm51bVZhcnMoKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9y
IChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rl
cih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1f
Y29kZUJsb2NrKTsKKyAgICAKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAg
ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCkBAIC0xMjEyLDcgKzEyMjksNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2go
WDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMTMxMCwyMyArMTMyNywxOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNh
Y2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0
cnVjdHVyZUlELCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRv
VGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVh
dGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJy
aWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxl
ZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFy
ZURhdGFSZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAt
MTM0Miw3ICsxMzU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5z
dAogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVX
aXRoUHJvdG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFU
YWcpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVu
Y3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNo
ZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wQ3JlYXRlVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkQ2FsbGVlKCks
IGNhY2hlZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBi
cmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6
c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRy
KE5vdEVxdWFsLCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11
bHRpcGxlQ2FsbGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzg1LDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJl
Z1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFs
dWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzk2LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgx
KSwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDA5LDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQyMCw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVn
VDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzNSwxMSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihjb25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIzKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CiB9CkBAIC0xNDMwLDcgKzE0NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2st
Pmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5n
KCkgJiYgbV91bmxpbmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5n
RWFybHlSZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BI
aW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCBy
ZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3Bz
TGltaXQoKSkpOwpAQCAtMTQ0MCw3ICsxNDU4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9o
aW50KGNvbnN0IEluc3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZgotICAgICAgICBtb3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsx
NDcxLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAg
Ly8gRW1pdCB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1p
emVkKCkpIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVP
clplcm8sIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9y
TG9vcCgpKSwKLSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVz
c09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAt
MTUwOSw3ICsxNTI4LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0
IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywg
YXJndW1lbnRHUFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1MjIsNyArMTU0Miw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9jaGVja190cmFw
c19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3Rl
cnM6OmVicCk7CkBAIC0xNTY0LDM0ICsxNTg0LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19y
ZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQocmVnZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBhcmd1bWVudEdQUjA7
CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29k
ZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJl
dHVyblZhbHVlR1BSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1p
dE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBKdW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
LCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhl
YyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwor
ICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpGdW5jdGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3Rh
bnQsIGFyZ3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJ
RDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9w
X25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVj
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0
aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQog
CkBAIC0xNjIxLDIzICsxNjQzLDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24o
Y29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3Vt
ZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBy
ZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BS
MSk7CiAjZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVC
bG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNv
bnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rp
b25FeHByLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNv
ZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVu
dEdQUjIpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYg
KG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5l
cmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdf
YXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBv
cF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9
CiB9CiAKQEAgLTE2NjQsMjkgKzE2ODcsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5j
X2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUu
bV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwg
c2l6ZSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIyKTsKKyAgICBt
YXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFk
YXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlf
d2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXpl
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRh
dGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2lu
dGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRh
KGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxs
b2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEs
IHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQ
cm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwK
LSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywg
cmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTQs
OCArMTcxOCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAK
IHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIG1faXNTaGFyZWFibGUgPSBmYWxzZTsKKwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAg
ICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0
aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFy
Z2V0VmlydHVhbFJlZ2lzdGVyOwogCkBAIC0xNzc3LDIwICsxODAzLDI1IEBAIHZvaWQgSklUOjpl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQ
UjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVt
cyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFj
a2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8g
VGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNo
MlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93
UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3Vt
ZW50IHJlZ2lzdGVyLgorICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAg
ICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0
Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2Nr
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBy
ZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVT
RShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgbV9pc1NoYXJlYWJs
ZSA9IGZhbHNlOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQcm9maWxlQ29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2lj
QmxvY2tMb2NhdGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMp
OwpAQCAtMTg2MCw3ICsxODkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNv
bnN0IElucwogICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAogICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlc3VsdFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE5MTcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwg
dmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2Vz
KTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIK
ICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRp
ZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
Q29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1
ZGUgIkRGR09TUkVudHJ5LmgiCkBAIC0yODU1LDcgKzI4NTYsNyBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0ID0gbGlua2Vk
VGFibGUubV9jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKQEAgLTI4ODAsNyArMjg4
MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1Zh
bHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9j
ay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAg
ICB2b2lkKiByZXN1bHQ7CiAgICAgaWYgKGtleS5pc0ludDMyKCkpCkBAIC0yOTAzLDcgKzI5MDQs
NyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7
Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwogCiAgICAgaWYgKGtleS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmlu
Z0ltcGwqIHZhbHVlID0gYXNTdHJpbmcoa2V5KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7
CkBAIC0yOTE5LDcgKzI5MjAsNiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
U3dpdGNoCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAK
LSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25SZXNvbHZlU2NvcGVGb3JCYXNlbGluZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0cnVjdGlvbiogcGMpKQogewogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTI5NzEsNyArMjk3MSw2IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25SZXNvbHYKIAogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzb2x2ZWRTY29wZSk7CiB9Ci0jZW5kaWYKIAogSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkdldEZyb21TY29wZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0cnVjdGlvbiogcGMpKQogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTAsOSArMjkwLDcgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25H
ZXRQcgogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVu
a25vd25LZXlUeXBlLCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUga2V5
LCBzaXplX3QgdGFibGVJbmRleCwgaW50MzJfdCBtaW4pKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKFZNKiwg
RW5jb2RlZEpTVmFsdWUga2V5LCBzaXplX3QgdGFibGVJbmRleCwgaW50MzJfdCBtaW4pKTsKIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25L
ZXlUeXBlLCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUga2V5LCBzaXpl
X3QgdGFibGVJbmRleCkpOwotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25SZXNvbHZlU2NvcGVGb3JCYXNlbGluZSwgRW5jb2Rl
ZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBD
KSk7Ci0jZW5kaWYKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNj
b3BlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24q
IGJ5dGVjb2RlUEMpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0VG9T
Y29wZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2Rl
UEMpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Nyw3ICs4NywxMiBAQCBhdXRvIEpJVFBsYW46OnRpZXIoKSBjb25zdCAt
PiBUaWVyCiAKIEpJVENvbXBpbGF0aW9uS2V5IEpJVFBsYW46OmtleSgpCiB7Ci0gICAgcmV0dXJu
IEpJVENvbXBpbGF0aW9uS2V5KG1fY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksIG1f
bW9kZSk7CisgICAgSlNDZWxsKiBjb2RlQmxvY2s7CisgICAgaWYgKG1fbW9kZSA9PSBKSVRDb21w
aWxhdGlvbk1vZGU6OkJhc2VsaW5lKQorICAgICAgICBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+
dW5saW5rZWRDb2RlQmxvY2soKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGVCbG9jayA9IG1fY29k
ZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgcmV0dXJuIEpJVENvbXBpbGF0aW9u
S2V5KGNvZGVCbG9jaywgbV9tb2RlKTsKIH0KIAogYm9vbCBKSVRQbGFuOjppc0tub3duVG9CZUxp
dmVBZnRlckdDKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTksNyArNTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNv
bnN0CiAKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5
bG9hZChnZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
ckJ5SWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0
eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcy
LDcgKzcyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdAogCiAg
ICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxvYWQoc2V0
dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgcmVnVDEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwo
KSwgb3B0aW9ucywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3Nl
dHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODcs
NyArODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAg
ZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVy
LCByZWdUMyk7CiAgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDQpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBh
dHRyaWJ1dGVzLCByZWdUMywgcmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyU2V0dGVyLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgYXR0cmli
dXRlcywgcmVnVDMsIHJlZ1Q0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMSw3ICsx
MDEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1p
dExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEs
IHJlZ1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgYXR0cmlidXRlcywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE1LDcg
KzExNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBl
bWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdU
MSwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdU
Myk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgbV9wcm9maWxl
ZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIzLDcgKzEyMyw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwpAQCAtMTMxLDggKzEzMSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0TG9hZChiYXNlLCBiYXNlUmVncy50YWdHUFIo
KSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLAogICAgICAgICBiYXNlUmVncywgcmVzdWx0
UmVncywgSW52YWxpZEdQUlJlZywgcmVnVDQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtMTY2LDcgKzE2
Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHksIHByb3BlcnR5UmVncy50YWdHUFIoKSk7
CiAKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAg
IGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIHJlZ1Q0
KTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTIwMiw3ICsyMDIsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKICAgICBlbWl0TG9h
ZDIoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSwgcHJvcGVy
dHksIHByb3BlcnR5UmVncy50YWdHUFIoKSwgcHJvcGVydHlSZWdzLnBheWxvYWRHUFIoKSk7CiAK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIEpTVmFsdWVSZWdzKGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BS
KCkpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5wYXls
b2FkR1BSKCkpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7Cisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXpl
LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXls
b2FkR1BSKCkpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVn
cy5wYXlsb2FkR1BSKCkpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgp
KSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAog
ICAgIGJveEJvb2xlYW4ocmVnVDAsIHJlc3VsdFJlZ3MpOwpAQCAtMjE2LDcgKzIxNiw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxf
YnlfaWQoY29uc3QgSW4KIAogICAgIGVtaXRMb2FkKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBi
YXNlUmVncy5wYXlsb2FkR1BSKCkpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgp
KSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKICAgICBi
b3hCb29sZWFuKHJlZ1QwLCByZXN1bHRSZWdzKTsKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwpAQCAtMjQ5LDcgKzI0OSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QxKTsKICAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCBwcm9maWxlLCByZWdUNCk7CiAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsK
ICAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCBy
ZWdUNCk7CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJbnN0cgogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAogICAgICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgICAg
IGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAgfQogfQpAQCAtMjc1LDcgKzI3NSw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICBpZiAoaGFz
QW55U2xvd0Nhc2VzKGl0ZXIpKSB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKQEAgLTI4NCw3ICsyODQs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CisgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KIH0KQEAgLTMwNSwxMyArMzA1
LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJ
VEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIG1fcHJv
ZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0
UHJpdmF0ZU5hbWUsCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOwog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJl
Z3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtMzMwLDcgKzMz
MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKIAogICAgIGF1
dG8gYmFzZUdQUiA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgYXV0byBwcm9wZXJ0
eUdQUiA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTM0OCw3ICszNDgsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlk
R1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtMzc3LDcg
KzM3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBK
U1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KTsKIAogICAgIGF1dG8gb3BlcmF0aW9u
ID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmll
bGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVS
ZWdzLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlUmVncywgcHJvcGVydHlSZWdzLCB2YWx1ZVJl
Z3MsIGdlbi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKIAogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC0zOTUsNyArMzk1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSk7CiAKICAgICBK
SVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxl
ZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2
YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAg
ICAgYmFzZVJlZ3MsIGJyYW5kUmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBA
IC00MTgsNyArNDE4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5k
KAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJh
bmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4XTsKICAgICArK21fcHJpdmF0ZUJy
YW5kQWNjZXNzSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywg
YnJhbmRSZWdzKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQogCkBAIC00MzUsNyArNDM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJp
dmF0ZV9icmFuZChjbwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNl
UmVncy50YWdHUFIoKSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIGJhc2VSZWdzLCBicmFuZFJlZ3MsIEludmFs
aWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNDUyLDcgKzQ1Miw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NH
ZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nl
c3NJbmRleF07CiAgICAgKyttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4OwogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFu
ZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTQ2NSw3ICs0NjUs
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKQEAgLTQ3OCw3ICs0NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCByZWdUNiwgcmVnVDcpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBt
X3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiks
IEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIHJlZ1Q2LCBJbnZhbGlkR1BSUmVnKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJCiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAg
ICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IEpJVDo6
ZWNtYU1vZGUoYnl0ZWNvZGUpOwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCkBAIC01MjQsNyArNTI0LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXRMb2FkMihiYXNlLCByZWdU
MiwgcmVnVDEsIHByb3BlcnR5LCByZWdUMywgcmVnVDApOwogICAgIGVtaXRMb2FkKHZhbHVlLCBy
ZWdUNSwgcmVnVDQpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/
IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFN
b2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCks
IHByb2ZpbGUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZv
KCksIHByb2ZpbGUpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKIH0KQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVt
aXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTU0MiwxMyArNTQyLDEzIEBAIHZvaWQgSklUOjplbWl0X29w
X3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxp
ZEdQUlJlZywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIG1fcHJvZmlsZWRDb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJl
ZywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgcmVzdWx0UmVn
cyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOwogfQogCkBAIC01NTgsMTMgKzU1OCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0
QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdl
bi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC01NzUsNyArNTc1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVn
VDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC01
ODMsMTMgKzU4MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXls
b2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWREaXJlY3QpOworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2Fk
T25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRz
dCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBA
IC01OTksMTMgKzU5OSwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiB9CkBAIC02MTQsMTAgKzYxNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAgICAgCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNjMwLDEzICs2MzAsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1
bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9w
cm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJ
bnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3Vs
dFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtNjQ2LDEzICs2NDYsMTMgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1Yklu
Zm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4u
c3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNjYzLDcgKzY2Myw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAg
ICAgCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh0aGlz
VlJlZywgcmVnVDQsIHJlZ1QzKTsKQEAgLTY3MywxMyArNjczLDEzIEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAg
bV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJs
b2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50
YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC02ODksMTMgKzY4OSwx
MyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklU
R2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRC
eUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKICAgICAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1Yklu
Zm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1Qz
KSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9m
aWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03MTAsMTUgKzcxMCwxNSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJl
Y3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKICAgICAKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCB2YWx1ZSwgcmVnVDMs
IHJlZ1QyKTsKICAgICAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVn
VDEpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBtX3By
b2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ss
ICppZGVudCksCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMiksIEludmFsaWRHUFJSZWcsCiAgICAgICAgIHJlZ1QxLCBieXRl
Y29kZS5tX2ZsYWdzLmVjbWFNb2RlKCksIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtp
bmQ6Ok5vdERpcmVjdCk7CiAgICAgCkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKIApAQCAtNzQ4
LDcgKzc0OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAg
ICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4Kytd
OwogICAgIAogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCi0gICAgICAgIGdlbi5zbG93
UGF0aEZ1bmN0aW9uKCksIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZv
KCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgICAgICBnZW4uc2xvd1BhdGhG
dW5jdGlvbigpLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJ
bmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgCiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTc1OCwx
NCArNzU4LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVn
VDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAg
ICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CisgICAg
ICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9pbkJ5SWRzLmFwcGVuZChnZW4pOwpAQCAtNzc5LDEzICs3NzksMTMgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9p
bkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJ
bmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03OTYsNyArNzk2LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCBy
ZWdUMik7CkBAIC04MDQsNyArODA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNv
bnN0IEluc3RydQogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJv
ZmlsZSwgcmVnVDQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWws
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9m
aWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpT
VmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwpAQCAtODE5LDE0ICs4MTksMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChj
b25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
bkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwog
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAog
ICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtODM3LDcgKzgzNyw3IEBAIHZvaWQgSklUOjplbWl0
SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtODUzLDcgKzg1Myw3IEBAIHZvaWQg
SklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2kKICAgICBKSVRJbkJ5VmFsR2VuZXJh
dG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBl
ID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRl
QnJhbmRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lkIEpJVDo6
ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVj
dGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1
YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVj
dGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVz
cyhtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hw
b2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNp
Z25lZCBkZXB0aCkKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9z
dXJlKFZpcnR1YWxSZWdpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0g
Ynl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRh
Lm1fcmVzb2x2ZVR5cGU7CkBAIC05MTYsMTEgKzkxNiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6
Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5k
aW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNz
T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCgpKSwgcmVnVDEpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCByZWdUMSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRT
Y29wZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7
CkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25z
dCBJbgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IAogICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBt
X2NvZGVCbG9jayk7CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZENvZGVC
bG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIHJlZ1QxKTsKQEAgLTEwMzksNyArMTAzOSw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXMKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFk
YXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShy
ZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwog
ICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKQEAgLTExNTYsNyArMTE1Niw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRG
cm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQpAQCAtMTE5MCw3ICsxMTkwLDcgQEAg
dm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3Bl
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEdldFB1dElu
Zm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwpAQCAtMTIwMiw3ICsx
MjAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAg
ICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9w
cm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0
dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbi4KICAgICAg
ICAgICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgICAgICAgICAgCkBAIC0x
MjE3LDcgKzEyMTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3Bl
ID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2Rl
QmxvY2spOworICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNv
bnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2sp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKQEAgLTEzMTgsNyArMTMxOCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3Rf
bW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAgICAgICAgIHNsb3dQYXRoQ2Fs
bC5jYWxsKCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
VG9TY29wZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTEzMzMsNyArMTMzMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBlbWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdU
MCk7CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9m
ZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNl
dCksIHJlc3V0bFJlZ3MudGFnR1BSKCkpOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgKyBQYXlsb2FkT2Zmc2V0KSwgcmVzdXRsUmVncy5wYXlsb2FkR1BSKCkpOwot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1dGxSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCByZXN1dGxSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0
LCByZXN1dGxSZWdzLnRhZ0dQUigpLCByZXN1dGxSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAg
LTEzNTUsNyArMTM1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29u
c3QKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwxMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRj
aDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9u
czo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+
IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAg
YXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwog
ICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBz
Y3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BS
KTsKIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKwogICAg
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgICAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlWYWw7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIHJlc2V0U1AoKTsgLy8gV2UgbWln
aHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAor
CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4p
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKICAgICB9Ci0KIH0KIAorI2lmICFPUyhXSU5ET1dTKQorc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdmlhYmxlQXJndW1lbnRHUFI0ID0gR1BSSW5mbzo6YXJndW1lbnRHUFI0Oworc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgdmlhYmxlQXJndW1lbnRHUFI1ID0gR1BSSW5mbzo6YXJndW1lbnRHUFI1
OworI2Vsc2UKK3N0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZpYWJsZUFyZ3VtZW50R1BSNCA9IEdQ
UkluZm86Om5vbkFyZ0dQUjA7CitzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2aWFibGVBcmd1bWVu
dEdQUjUgPSBHUFJJbmZvOjpub25BcmdHUFIxOworI2VuZGlmCisKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wY29kZVR5cGU+CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9w
Y29kZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2Vz
KGl0ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIHZpYWJsZUFyZ3VtZW50R1BSNCk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKT4oYnl0ZWNvZGUs
IEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0KTsKICNlbHNlCi0gICAgICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29k
ZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwor
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwor
ICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5k
ZXgpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1
bWVudEdQUjQ7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSBhcmd1bWVudEdQUjQ7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICAgICAgY29u
c3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BS
ID09IGFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmls
ZSksIHByb2ZpbGVHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLQotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemUpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5
IHVzZWQuCisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIg
PT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OmJhc2UgPT0gcmVnVDApOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHkgPT0gcmVnVDEpOworCisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZh
bHVlR1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDksNyArMTY5LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAt
MTYwLDggKzE4MCw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSNTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKQEAgLTE4NywzNCArMjA3LDQwIEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAgICAgICAgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIEFTU0VS
VChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKQEAgLTIyMyw5
ICsyNDksMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT4oYnl0
ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0yMzUsMjYgKzI2MywyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIy
OyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yNjQsNyArMjg2LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAw
LDIxICszMjIsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJy
YW5kPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFu
ZCwgYnJhbmRHUFIpOwotCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0
UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1Qy
KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2
YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9H
UFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6U2V0UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJy
YW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1i
YXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVy
cyByZWdpc3RlcnMuCkBAIC0zMjQsMTcgKzM1MywyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRf
cHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0
ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogeworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRv
ciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4
KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBicmFuZEdQUik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRp
b25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtMzQ0LDI0ICszNzgsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3NldF9wcml2YXRlX2JyYW5kKAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJp
dmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5
cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFs
dWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJp
dmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZgogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZh
dGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM3MCwz
MyArMzk4LDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY28KICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgcmVn
VDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNr
UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJ
bmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJp
dmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2
YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hl
Y2tQcml2YXRlQnJhbmQ+KCk7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlKTsKKwogICAgIEpJ
VFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nl
c1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIg
PSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0
aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTQwNiwyNCArNDQ4LDE4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1
c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5k
OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRl
Y2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBl
cywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6
ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9k
aXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNSwzMCAr
NDcxLDQzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9m
aWxlKSwgcmVnVDMpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9m
aWxlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHByb2ZpbGVHUFIpOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIs
IHN0dWJJbmZvR1BSKTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkp
CiAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1
YkluZm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQ
dXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFN
b2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9T
UiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMg
Y2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBp
cyBjZWxsLgpAQCAtNDc0LDE1ICs1MjMsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0
KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9h
ZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1v
ZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07
CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTQ0LDE2IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBj
bG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21h
TW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlz
U3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHZpYWJsZUFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQor
ICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSwgdmlhYmxlQXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAg
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpLCB2aWFibGVBcmd1bWVudEdQUjUpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3ModmlhYmxlQXJndW1lbnRHUFI0
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIHZpYWJsZUFyZ3Vt
ZW50R1BSNCwgdmlhYmxlQXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTUxMiw3ICs1NjcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2Fs
bCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJp
Y3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU3OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAg
LTUzMywxOCArNTg4LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
cmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFp
bnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAg
fQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpAQCAt
NTcwLDIwICs2MzEsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25z
dAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJ
bnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFk
ZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5m
b0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9
IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2NjYsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsK
LSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7Cisg
ICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZhbEdl
bmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02MDMs
MTMgKzY3NCwxNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0aW9u
ID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmll
bGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQg
aW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJ
bmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHZpYWJsZUFyZ3VtZW50R1BSNCk7Cisg
ICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVG
aWVsZE9wdGltaXplKT4oQWRkcmVzcyh2aWFibGVBcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0LCBUcnVzdGVk
SW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYy
MiwxOCArNjk1LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9w
cml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb247Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRp
b24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNjQzLDE0ICs3MTAs
MTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0
IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZh
aWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBp
bmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBt
YXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVH
UFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIApAQCAtNjgwLDcgKzc0Nyw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02ODksNyArNzU3LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02OTksNyArNzY4LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGludDMyX3QgYXR0cmlidXRl
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
YXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAs
IG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1w
bCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC03MDksNyArNzc5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29u
cwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEp
OwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1Qy
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcxOSw3ICs3OTAsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Myk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJl
Z1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyNywy
MyArNzk5LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNl
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8g
V2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNl
IHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNzU5LDE1ICs4NDEsMTcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRz
W21fZGVsQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxk
ZWNsdHlwZShvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgp
KSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC03ODEsMjQgKzg2NSwxOSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3Bl
cnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09
IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAg
LTgwOCw3ICs4ODcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVj
dCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERG
Ry9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVj
dHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1
cm5BZGRyZXNzKCk7CkBAIC04NDUsMjIgKzkyNCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgcHJvcGVydHkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKwogICAgIEpJ
VERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAg
ICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0
Y2gpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6RGVsZXRlQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0
dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeVZhbHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAv
LyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2lu
Y2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRl
IG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpA
QCAtODgzLDkgKzk3MywxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25z
dCBJCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRl
Y2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC04OTksMjQgKzk5MSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3Vt
ZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
c3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2Rl
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5
X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5k
Q2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEw
MTMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNz
KCk7CkBAIC05NjEsMjIgKzEwNDgsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVn
LCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQg
KzEwODIsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwog
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlH
ZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJ
ZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDAzLDI2ICsxMTAyLDIw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKICAgICBtb3ZlKEpJ
VDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8
ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAzMCwyMiArMTEyMywzMSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJl
ZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vz
c1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiArMTE1NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVj
dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSht
ZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKT4oYnl0ZWNv
ZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTA3Myw4MyArMTE3Nyw2MiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHBy
b3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVy
YXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzY3JhdGNoOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+
cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAg
ICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRk
cmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRh
LmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDhGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFk
YXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhOjpvZmZzZXRPZk1vZGUoKSwgc2NyYXRjaEdQUik7
CisgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoMzIoTm90RXF1YWwsIFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChi
eXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdl
dEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFz
ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMp
OwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VW
UmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOwotCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJl
c3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZv
cy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0
byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2ICsxMjQxLDE4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAg
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSht
ZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3NywyNiArMTI2Miw1OCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQ
UiwgdGhpc1ZSZWcpOworCisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhp
c0dQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBX
ZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0
IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdl
bik7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjA2LDcgKzEzMjMsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJv
dXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25n
aW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMjQxLDE2ICsxMzU4LDE5
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRh
LCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xMjYwLDI4ICsxMzgwLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGkKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0
aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyOTEsNyArMTQwNSw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9u
cyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAog
ICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTEzMjksMjMg
KzE0NDMsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9
IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUg
dG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0
b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZl
IGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJh
dGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdh
eXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFs
dWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFz
ZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
YmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzdHVi
SW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3Qg
PyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0
QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6
IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShi
eXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28g
d2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0x
MzU5LDE0ICsxNDg4LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3Qg
SW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
bih0aGlzKTsKICAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRz
W21fcHV0QnlJZEluZGV4KytdOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3Bl
cmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMzc2LDI1ICsxNTA5LDE5IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBh
cmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IGdlbi5z
bG93UGF0aEZ1bmN0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChn
ZW4uc2xvd1BhdGhGdW5jdGlvbigpKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKQEAgLTE0MDQsNyArMTUzMSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlm
ICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0
LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE0NDEsMjAgKzE1NjgsMzEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDAp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKQEAgLTE0NjMsMTQgKzE2MDEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5C
eUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlv
bkluQnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsx
NjIxLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFy
ZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywg
dGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdp
dmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxk
ZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcs
IHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE1MTAsMjUgKzE2NDUsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNv
bnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwot
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNo
KTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAg
LTE1MzcsMTUgKzE2ODAsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25z
dCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5
VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJ
bkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fcHJvcGVydHksIHZpYWJsZUFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJh
dGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50
R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIHZp
YWJsZUFyZ3VtZW50R1BSNCk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0x
NTU2LDU5ICsxNzAyLDcwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3Qg
SW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHBy
b2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJl
Q2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0
aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2
ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRl
Y2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2Us
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0
eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwog
CiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlwZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGJhc2UpOworICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7CisgICAg
QVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8
IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIAogICAgIEpJVEluQnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhh
c1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9w
ZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc3NSwyMSBAQCB2b2lkIEpJVDo6
ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVn
VDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VH
UFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJv
cGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUp
OwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1By
aXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9u
SGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXpl
OwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVy
YXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3By
aXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1
Miw3ICsxODAzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRl
U2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVt
aXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29k
ZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNjY2LDIxNSArMTgxNywxMjkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVCcmFuZD4o
KTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBi
eXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVC
cmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYgKCFu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BS
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xv
YmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50
U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVk
IGRlcHRoKQogewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyk7CisgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQogICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVU
eXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlw
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBt
ZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
LSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBt
X2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExl
eGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoK
LSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3Qs
IHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9z
dXJlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDAp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X3Jlc29sdmVUeXBlLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci19Ci0jZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LQotdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwot
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAg
ICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFk
YXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2Owot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJ
ZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwg
bGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0g
ICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlm
IChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhp
Y2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3Qg
bWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRh
ZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKKworICAg
ICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAg
ICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIs
ICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgICAgIH07CisK
KyAgICAgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9
IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZl
U2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGlu
ZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyIpOwor
ICAgICAgICB9OwogCi0jZGVmaW5lIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBl
KSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3Rh
dGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZP
Ul9FQUNIX1JFU09MVkVfVFlQRShSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyAgICAgICAgYXV0
byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAg
ICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBzdGQ6Om51bGxv
cHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7CiAgICAgICAgIH07Ci0j
dW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDI7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUMDsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJl
Z1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsK
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIp
OwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0
b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgICAgIGlmIChw
cm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAgICBjb2RlID0gdm0u
Z2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZSBpZiAocHJvZmls
ZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAg
ICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENU
SVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAgIGVtaXROYWtlZE5l
YXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZt
LCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBj
YW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcFJlc29sdmVTY29wZTo6
TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OyAvLyBp
bmNvbWluZwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsgLy8gaW5jb21p
bmcKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDI7IC8vIGluY29taW5n
CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOyAvLyBpbmNvbWluZwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcg
LSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gcmVnVDQ7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBl
KSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0
YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwor
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZN
ZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFH
UFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rp
b25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2Jh
bE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hl
Y2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIg
PT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7
Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2Jh
bE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6
Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpT
R2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNo
cG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0g
ICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKLQotICAgICAgICBMYWJlbCBsb29wID0g
bGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsK
LSAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKLSAgICAg
ICAgfQotICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworI2lmICFPUyhXSU5ET1dTKQorICAgICAgICBz
dGF0aWNfYXNzZXJ0KHNjb3BlR1BSID09IHJlZ1QwKTsKKyNlbmRpZgorICAgICAgICBqaXQubG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkxvY2FsU2NvcGVEZXB0
aCgpKSwgcmVnVDEpOworCisgICAgICAgIExhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAg
ICAgSnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CisgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDAp
OworICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAgICAgIGpp
dC5qdW1wKCkubGlua1RvKGxvb3AsICZqaXQpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAg
ICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
KSB7CkBAIC0xODgyLDEyICsxOTQ3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxC
aW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9m
ZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAg
IG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdsb2JhbExleGljYWxC
aW5kaW5nRXBvY2goKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRP
Zkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCkBAIC0xODk3LDExICsxOTYxLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRT
Y29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEds
b2JhbFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAg
ICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwog
ICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZH
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTE5MDksNyArMTk3Myw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgICAgIGVtaXRSZXNvbHZl
Q2xvc3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTE5MTksODMgKzE5ODMsNDUgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3
aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xv
YmFsTGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2
ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVW
YXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsUHJvcGVydHkubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7
CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mUmVzb2x2ZVR5cGUoKSksIHJlZ1QxKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgYXV0byBlbWl0Q2FzZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9
IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkp
OworICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOworICAgICAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgIG5vdENhc2UubGluaygmaml0KTsK
KyAgICAgICAgfTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
c2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgZW1p
dENhc2UoR2xvYmFsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHkpOworICAg
ICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUp
OwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQog
Ci0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0g
ICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZl
X3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9j
YXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVM
b2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVG
SU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVU
eXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAo
IXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAg
ICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBq
aXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9w
X3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xW
RV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfUkVT
T0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAg
Ly8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0
aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0
aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwMDQsMTcgKzIwMzAsMzAg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGppdC5wdXNo
UGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKICNlbmRpZgogCi0gICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwotICAgIGppdC5zdG9y
ZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGluY29taW5nQnl0ZWNvZGVP
ZmZzZXRHUFIgPSByZWdUNTsKKyAgICBqaXQuc3RvcmUzMihpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0
R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRHUFIzOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgaW5zdHJ1Y3Rpb25HUFIgPSBhcmd1bWVudEdQUjE7CiAKKyNpZiBPUyhX
SU5ET1dTKQorICAgIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHNlbGVjdFNjcmF0Y2hHUFIo
Y29kZUJsb2NrR1BSLCBnbG9iYWxPYmplY3RHUFIsIGluc3RydWN0aW9uR1BSKTsKKyAgICBtb3Zl
KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIsIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyNlbHNlCisg
ICAgc3RhdGljX2Fzc2VydChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGNvZGVCbG9ja0dQ
Uik7CisgICAgc3RhdGljX2Fzc2VydChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGdsb2Jh
bE9iamVjdEdQUik7CisgICAgc3RhdGljX2Fzc2VydChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BS
ICE9IGluc3RydWN0aW9uR1BSKTsKKyNlbmRpZgorCiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOwogICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoY29kZUJsb2Nr
R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgaW5zdHJ1
Y3Rpb25HUFIpOworI2lmIE9TKFdJTkRPV1MpCiAgICAgaml0LmFkZFB0cihieXRlY29kZU9mZnNl
dEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOworI2Vsc2UKKyAgICBqaXQuYWRkUHRyKGluY29taW5nQnl0
ZWNvZGVPZmZzZXRHUFIsIGluc3RydWN0aW9uR1BSKTsKKyNlbmRpZgogCiAgICAgaml0LnNldHVw
QXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lKT4oZ2xv
YmFsT2JqZWN0R1BSLCBpbnN0cnVjdGlvbkdQUik7CiAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0
aW9uKHZtKTsKQEAgLTIwMzQsNyArMjA3Myw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2Rl
TG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5l
OiBzbG93X29wX3Jlc29sdmVfc2NvcGUiKTsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAogdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKIHsKQEAgLTIwNjIsMjc2
ICsyMTAwLDEzMyBAQCB2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzCiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwogfQogCi0j
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9
IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0
cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90
KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1f
b3BlcmFuZCk7Ci0KLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7Ci0gICAgICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRM
b2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJl
IGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVy
ZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29s
dmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAg
ICAgICBHUFJSZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJl
Z1QwOwotICAgICAgICAgICAgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2ggPSByZWdUMjsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBl
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJl
c29sdmVUeXBlKCk7CiAKLSAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2
b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIo
RXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
Ci0gICAgICAgICAgICB9KSk7CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQo
Qnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBB
U1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgp
ID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xv
dCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAg
ICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9m
ZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAg
ICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAg
ICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0
Y2gpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQz
MlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2Ny
YXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgotICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3Bl
cmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkocmVnVDApKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENs
b3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAq
b3BlcmFuZFNsb3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRHluYW1pYzoK
LSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgot
ICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQorICAgIGF1dG8gY2xvc3VyZVZhckdlbmVyYXRv
ciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21T
Y29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIENs
b3N1cmVWYXIiKTsKICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAg
ICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihU
cnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2
ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1
bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OwotCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxp
bmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShtZXRhZGF0YSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9t
U2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudElu
c3RydWN0aW9uKTsKLX0KLQotI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0KLXZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5
cGUoKTsKKyAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9y
ID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNj
b3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6
IG9wX2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OwogCi0gICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKLSAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKLSAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0g
bV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGF1dG8gZ2VuZXJp
Y0dldEZyb21TY29wZUdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJ
VDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGlu
ZTogb3BfZ2V0X2Zyb21fc2NvcGUgZ2VuZXJpYyIpOworICAgIH07CiAKLSAgICBjb25zdGV4cHIg
R1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQ
UiA9IHJlZ1Q2OworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IEds
b2JhbFZhcikgewotICAgICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKLSAgICAgICAgZW1pdEdldFZh
ckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDAp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29k
ZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICBwdHJkaWZmX3Qg
bWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldElu
TWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJB
VE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0
b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7
Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJB
VE9SKQotICAgICAgICB9OwotI3VuZGVmIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgorICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xv
c3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRv
cik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IpOworICAgIGVsc2UKKyAgICAgICAgY29k
ZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvcik7CisKKyAgICBl
bWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2
bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24g
Y2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIHVz
aW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BS
ID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29w
ZShyZXNvbHZlVHlwZSkpOwotCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOwotCi0gICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBy
ZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgY29uc3RleHByIEdQ
UlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUMjsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2Nv
cGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsK
LSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
YnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Ci0gICAgfTsKKyAgICBqaXQudGFnUmV0dXJuQWRk
cmVzcygpOworCisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1Qz
LCBtZXRhZGF0YUdQUik7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1p
dFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7
CisgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29k
ZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmpl
Y3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwg
cmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Cisg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywg
V2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CiAgICAgfTsKICAgICAKLSAgICBhdXRvIGVtaXRHZXRWYXJGcm9tUG9pbnRlciA9IFsm
XSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcp
OwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyID0gWyZd
IChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7
Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldENsb3N1cmVWYXIgPSBbJl0gKEdQUlJlZyBzY29w
ZUdQUiwgR1BSUmVnIG9wZXJhbmRHUFIpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMg
PT0gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwg
b3BlcmFuZEdQUik7Ci0gICAgICAgIGFkZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQUik7Ci0gICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zm
c2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0Q29kZSA9
IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFu
ZCkgeworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7
CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBj
b3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBh
bnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3Bl
IGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotCi0gICAgICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG9mZnNldCA9
IHJlZ1QxOwotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7Ci0K
LSAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+
IEp1bXAgewotICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgcmVnVDMpOworICAgICAgICAg
ICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0
IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRp
dGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmpl
Y3Rpb24uCisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPcEdl
dEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAg
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsK
KyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5i
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDEpKTsKKworICAgICAgICAgICAgaml0LmppdEFzc2VydChzY29wZWRMYW1i
ZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgeworICAgICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaml0LmJyYW5j
aFB0cihFcXVhbCwgc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDEpOworCiAg
ICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlz
T3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJ
bW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJl
YXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxp
bmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJy
YW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9m
TGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zm
c2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmpp
dCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihv
ZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwot
ICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQs
IChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJl
c3VsdCk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5uZWczMihy
ZWdUMSk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsK
KyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdo
dCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwg
cmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9i
YWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAg
ICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBp
ZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAg
ICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBN
ZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCByZWdUMyk7
Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZUdQUiwgcmVnVDMpOworICAgICAg
ICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1l
dGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIHN0YXRpY19h
c3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOworICAgICAgICAgICAgaml0LmxzaGlm
dDY0KFRydXN0ZWRJbW0zMigzKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmFkZFB0cihzY29w
ZUdQUiwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CisKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoK
ICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQxLDg2ICsyMjM2LDYzIEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAg
ICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBj
YXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChyZXNv
bHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkp
OwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwgcmVnVDApOworICAgICAgICBqaXQu
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5Lmxpbmso
dGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4
aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNU
X09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVz
b2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5j
aDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAg
IEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworICAg
ICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFy
LmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
ID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7
CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluaygmaml0KTsKKworICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAg
ICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFBy
b3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgp
KTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKCZqaXQpOwogCi0gICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
LCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsK
ICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRz
ID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVBy
b2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogCi0gICAgcmV0KCk7CisgICAgaml0LnJl
dCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIg
PSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcik7Ci0gICAg
cGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5k
bGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAg
ICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VO
RVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2
bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wR2V0
RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAg
ICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9t
U2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZV8iICNy
ZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX0dFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJB
VE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29w
X2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2Vu
ZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJh
c2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAg
LTI0MjksMTggKzIzMDEsMzMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogI2VuZGlmCiAKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRh
ZGF0YTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwotICAgIGppdC5zdG9yZTMy
KGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7
CisgICAgY29uc3RleHByIEdQUlJlZyBpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7
CisgICAgaml0LnN0b3JlMzIoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIGNvZGVCbG9ja0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGlu
c3RydWN0aW9uR1BSID0gYXJndW1lbnRHUFIxOworI2lmIE9TKFdJTkRPV1MpCisgICAgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gc2VsZWN0U2NyYXRjaEdQUihtZXRhZGF0YUdQUiwgY29kZUJs
b2NrR1BSLCBnbG9iYWxPYmplY3RHUFIsIGluc3RydWN0aW9uR1BSKTsKKyAgICBtb3ZlKGluY29t
aW5nQnl0ZWNvZGVPZmZzZXRHUFIsIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyNlbHNlCisgICAgc3Rh
dGljX2Fzc2VydChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGNvZGVCbG9ja0dQUik7Cisg
ICAgc3RhdGljX2Fzc2VydChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGdsb2JhbE9iamVj
dEdQUik7CisgICAgc3RhdGljX2Fzc2VydChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGlu
c3RydWN0aW9uR1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG1ldGFkYXRhR1BSICE9IGNvZGVCbG9j
a0dQUik7CisgICAgc3RhdGljX2Fzc2VydChtZXRhZGF0YUdQUiAhPSBnbG9iYWxPYmplY3RHUFIp
OworICAgIHN0YXRpY19hc3NlcnQobWV0YWRhdGFHUFIgIT0gaW5zdHJ1Y3Rpb25HUFIpOworI2Vu
ZGlmCiAKICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIGNvZGVCbG9ja0dQUik7CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZJ
bnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBpbnN0cnVjdGlvbkdQUik7CisjaWYgT1MoV0lORE9X
UykKICAgICBqaXQuYWRkUHRyKGJ5dGVjb2RlT2Zmc2V0R1BSLCBpbnN0cnVjdGlvbkdQUik7Cisj
ZWxzZQorICAgIGppdC5hZGRQdHIoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiwgaW5zdHJ1Y3Rp
b25HUFIpOworI2VuZGlmCiAKICAgICBBU1NFUlQoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdp
c3RlcnMoKS5jb250YWlucyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcikpOwogICAgIGppdC5t
b3ZlKG1ldGFkYXRhR1BSLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7IC8vIFByZXNlcnZl
IG1ldGFkYXRhIGluIGEgY2FsbGVlIHNhdmVkIHJlZ2lzdGVyLgpAQCAtMjQ0OSw3ICsyMzM2LDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIENhbGwgb3Bl
cmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2VwdGlvbkNo
ZWNrID0gaml0LmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAgICBqaXQu
c3RvcmU2NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgT0JKRUNU
X09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAs
IEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE1ldGFkYXRhOjpvZmZzZXRPZlBy
b2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgaml0
Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyKTsKIAogI2lmIENQVShYODZfNjQpCkBAIC0yNDY5LDg4ICsyMzU2LDc3IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGp1bXBUb0hhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJ
VFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0KLSNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9i
YWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJh
bmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUq
KiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
KiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7
Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJh
bmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6
ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9y
ZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1
dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAg
dWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1l
dGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2
ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29k
ZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNv
bHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUg
Y2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJl
cyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2
ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAg
ICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24n
dCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAg
ICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJl
Z1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAg
ICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsK
KwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAg
ICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBK
dW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAg
IG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJl
Z1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAg
ICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0
LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsK
KyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2Jh
bFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBt
X2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2
ZVR5cGUpOwotICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5p
dGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8
IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkg
eworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hl
Y2socmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJl
Z1QwKTsKKworICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0
UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVj
ayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFog
Y2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZh
cmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1
ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9w
ZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9T
Y29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAg
ICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChy
ZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNj
b3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xv
c3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpv
cGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7
CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdE5v
dGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVn
VDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSkpOworCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9k
dWxlVmFyOgpAQCAtMjU2NCw1OCArMjQ0MCw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAg
IEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0
ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcu
Ci0KLSAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBD
bG9zdXJlVmFyLyBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4g
Y29tcGlsZSB0aGluZ3MKKyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNl
IHdlJ3ZlIHByb3ZlbiB0aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xv
c3VyZVZhciwKKyAgICAvLyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdl
J3JlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3Vy
ZVZhcgorICAgIC8vIGlmIHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQu
IElmIGl0IGlzIGZpcmVkLCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24n
dAorICAgIC8vIG1hdHRlciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChw
cm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1
cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9z
dXJlVmFyKQorICAgICAgICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2Ug
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygp
LCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0
cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBp
c0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHku
bGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKIAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEds
b2JhbFZhci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
KyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwog
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXIubGluayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7
Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjYyNCwxOCArMjQ5NCwyMSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9TY29wZT4oKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1
dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1v
ZHVsZVZhcikgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAg
Ly8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5r
ZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1
bGVWYXIuCiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVy
dHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxz
ZSB7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUs
IGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29k
ZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICAgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRl
Y29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3
ICsyNTI1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAg
ICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNzAxLDcgKzI1NzQsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdU
MCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyNjMyLDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CkBAIC0yNzY3LDcgKzI2MzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxf
ZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNl
dE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAt
MjgyMyw3ICsyNjk1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0
bwogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9t
b2RlOwpAQCAtMjgzOSwxMSArMjcxMCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X25leHQoY29uc3QgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMg
aXMgdGhlIG1vc3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNh
c2UgaXQgaWYgd2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1f
ZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0
dXJlTW9kZSkgeworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0
cnVjdHVyZU1vZGUpIHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2Fz
ZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigofkpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgJiBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spKSk7CiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JN
ZXRhZGF0YSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5l
eHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKKwogICAgICAgICBs
b2FkMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpLCBpbmRleEdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNh
c2VzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwogCkBAIC0yODgxLDc4ICsyNzU4LDg4IEBA
IHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0
X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvckdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51
bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7
CiAKLSAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5lRW51bWVy
YXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gyID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gyOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZh
bFJlZ2lzdGVyczo6c2NyYXRjaDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihtb2RlLCBzY3JhdGNoMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5h
bWUsIHByb3BlcnR5R1BSKTsKIAotICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRh
ZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1l
dGFkYXRhKCksIHNjcmF0Y2gyKTsKKyAgICBvcjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7CisgICAg
c3RvcmU4VG9NZXRhZGF0YShzY3JhdGNoMiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFs
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwoYmFzZUdQUikpOwogICAgIC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQg
dmFsdWUuCi0gICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9u
WmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4
ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgIEp1
bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHNjcmF0Y2gz
LCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKIAogICAgIC8vIENoZWNrIHRo
ZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1Qy
KTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDMpOwotICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
U3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgc2NyYXRjaDEpOworICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNo
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKIAogICAgIC8v
IENvbXB1dGUgdGhlIG9mZnNldC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBy
ZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgc2NyYXRjaDIpOwogICAg
IC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUg
c3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFj
Y2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwg
cmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7Ci0gICAgbG9hZDY0
KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwotCisgICAg
SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBB
ZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNh
cGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRj
aDIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQs
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgZG9u
ZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxp
bmUKICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbmVnMzIocmVnVDMpOwotICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QzLCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2VHUFIpOworICAgIHN1YjMyKEFkZHJlc3Moc2Ny
YXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBuZWczMihzY3JhdGNoMik7CisgICAgc2lnbkV4dGVuZDMy
VG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKICAgICBjb25zdGV4cHIgaW50cHRyX3Qgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5ID0gb2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
ICogc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgIGxv
YWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkpLCByZXN1bHRHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRj
aDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CiAgICAg
ZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgc3RydWN0dXJlTWlzbWF0Y2gubGluayh0
aGlzKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2Vu
dW1lcmF0b3JNZXRhZGF0YSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1p
c21hdGNoKSwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBpc05vdE93blN0cnVjdHVyZU1vZGUubGlu
ayh0aGlzKTsKLSAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsK
KyAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBzY3JhdGNoMywgVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKICAgICAv
LyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgs
IHByb3BlcnR5R1BSKTsKIAogICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOwotICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaDEp
OwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVnVDIpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBz
dHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0
IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgZG9u
ZUNhc2VzLmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKQEAgLTI5NjEsMTAgKzI4NDgsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZW51bWVyYXRvcl9nZXRfYnlfCiAgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0ZXIpOwogfQogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5
cGU+Ci12b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUs
IFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5
dGVjb2RlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2Vu
dW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdl
bmVyYWxDYXNlKQogewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKQEAgLTI5NzMsNyArMjg1
OSw5IEBAIHZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW0KICAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1Qw
KTsKLSAgICBvcjgocmVnVDAsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9y
TWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1l
dGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCByZWdUMSk7CisgICAgb3IzMihy
ZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDEsIGJ5dGVjb2RlLCBCeXRl
Y29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAKQEAgLTMwNjIsNiAr
Mjk1MCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyCiAgICAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCit2b2lkIEpJVDo6ZW1p
dFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpCit7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJl
ZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2VsZWN0U2NyYXRjaEdQUihv
d25lcikpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRl
QmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW4ubGluayh0aGlzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzYsOSArMjM2LDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlQ2VsbCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpV
bnNldAogICAgICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwK
LSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVu
Z3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9j
aywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgewogCi0gICAgICAgICAg
ICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJh
dGVBcnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOworICAg
ICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkq
PihiYXNlQ2VsbCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGlu
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aChsb2NrZXIp
OwpAQCAtMjQ5LDggKzI0OSw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdl
dEJ5KEoKICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBj
b2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICAgICAgfSBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VDZWxsKSkgewogICAgICAgICAgICAgICAg
IGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAg
ICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoc3R1Yklu
Zm8pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pOworICAgICAgICAgICAg
ICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9j
aywgc3R1YkluZm8pKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlu
bGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHVi
SW5mbyk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFN0cmluZ0xlbmd0aChsb2NrZXIpOwpAQCAt
MzA0LDcgKzMwNCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoK
ICAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKICAgICAgICAgICAgICAg
ICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAg
ICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94eSkgewotICAgICAgICAgICAgICAgIGJvb2wg
Z2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlB
Y2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAg
ICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZVNlbGZQcm9wZXJ0eUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5l
KSB7CiAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gs
IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5
TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMo
dm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpAQCAtNzMxLDExICs3MzEsMTEgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnkoSgogICAgICAgICAgICAgICAgIG9sZFN0cnVj
dHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUo
KSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vz
czo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzbG90LmNhY2hlZE9m
ZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRl
U2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNl
dCgpKQogICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICAgICAgICAgJiYgIWlzUHJveHkpIHsKICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29k
ZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJ
bmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAg
ICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlu
bGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNl
bGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09
IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9u
KHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOwpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgc3RhdGlj
IElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAgICAgICAmJiBzbG90
LnNsb3RCYXNlKCkgPT0gYmFzZQogICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRT
ZXQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9
IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSk7
CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBz
bG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0YXRpYyB2b2lkIHJl
dmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBh
dGhTdGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwg
IlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwog
ICAgIAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDI0ICs0Myw2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsK
LSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0gICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwotCi0gICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
Ci0gICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLQotICAgIENDYWxsSGVscGVyczo6
Q2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwotCi0gICAgaml0Lmp1
bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOwotICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbiIp
OwotfQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2Vw
dGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKQEAgLTc3LDI0ICs1OSw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gaGEKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2siKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJl
c2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhl
bHBlcnMgaml0OwotCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjpl
c3ApOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJh
bWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKLSNlbmRpZgot
Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7Ci0KLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElT
dHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjb250
aW51YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKSk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRy
VGFnLCAicG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOwotfQotCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpAQCAtMTM3LDYgKzEwMSw0MiBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoCiAKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVs
cGVycyBqaXQ7CisKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQucHJl
cGFyZUNhbGxPcGVyYXRpb24odm0pOworCisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlv
biA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9u
SGFuZGxlcih2bSk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1
ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uIik7Cit9CisKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0Fu
ZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKKworI2lmIENQVShYODZfNjQpCisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKKyNl
bGlmIENQVShBUk02NCkKKyAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRl
clJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIEND
YWxsSGVscGVyczo6SnVtcCBjb250aW51YXRpb24gPSBqaXQuanVtcCgpOworCisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6RXh0cmFDVElUaHVuayk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1YihoYW5k
bGVFeGNlcHRpb25HZW5lcmF0b3IpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY29udGludWF0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwor
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInBv
cFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsKK30KKwogdGVtcGxhdGU8
dHlwZW5hbWUgVGFnVHlwZT4KIGlubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2Fs
bEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIsIFRhZ1R5cGUgdGFnKQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsMTIgQEAgY2xhc3MgVk07CiAKICNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJh
dG9yKFZNJik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5r
U3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIAogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxl
RXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNJik7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkJ5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgi
CiAjaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKKyNpbmNsdWRlICJDb2Rl
QmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Njb3BlLmgiCkBAIC0zNzAs
MTMgKzM3MSwyMiBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhWCiAg
ICAgCiAgICAgY29kZUJsb2NrLT51cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucygpOwog
CisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7
CisgICAgICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBiYXNlbGluZVJlZiA9IGNvZGVC
bG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAg
ICAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShiYXNlbGlu
ZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CisgICAgICAgICAgICBjb2RlQmxvY2st
PmppdE5leHRJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKwogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hl
ZCgpKSB7CiAgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGVsYXlKSVRD
b21waWxlIiwgKCJ0aHJlc2hvbGQgbm90IHJlYWNoZWQsIGNvdW50ZXIgPSAiLCBjb2RlQmxvY2st
PmxsaW50RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksICIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUgbGlmdGVkLiIpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3
b3JrbGlzdFN0YXRlID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxl
dGVBbGxSZWFkeVBsYW5zRm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jaywgSklU
Q29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkpOworICAgIEpJVFdvcmtsaXN0OjpTdGF0ZSB3b3Jr
bGlzdFN0YXRlID0gSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVB
bGxSZWFkeVBsYW5zRm9yVk0odm0sIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+dW5saW5r
ZWRDb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkpOwogCiAgICAgaWYg
KGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CiAgICAgICAg
IGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBDb2RlIHdhcyBhbHJlYWR5
IGNvbXBpbGVkLiIpOwpAQCAtNDY2LDggKzQ3NiwxMCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChs
b29wX29zcikKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5p
dGVMb29wc0ZvckZ1enppbmcoKSAmJiBjb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9y
RnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0uZ2V0
TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKHBjKTsKICAgICAgICAgKnB0ciArPSBjb2RlQmxvY2st
PmxsaW50RXhlY3V0ZUNvdW50ZXIoKS5tX2FjdGl2ZVRocmVzaG9sZDsKLSAgICAgICAgaWYgKCpw
dHIgPj0gT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpCisgICAg
ICAgIGlmICgqcHRyID49IE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1p
dCgpKSB7CisgICAgICAgICAgICBjb2RlQmxvY2stPmVuc3VyZUpJVERhdGEoQ29uY3VycmVudEpT
TG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKSk7IC8vIFdlJ3JlIHJldHVybmluZyB0byB0aGUgT1NS
IGVudHJ5IGNvZGUgaGVyZSwgd2hpY2ggZXhwZWN0cyB0aGF0IG1faml0RGF0YSBpcyBub3QgbnVs
bC4KICAgICAgICAgICAgIExMSU5UX1JFVFVSTl9UV08oTExJbnQ6OmZ1enplclJldHVybkVhcmx5
RnJvbUxvb3BIaW50RW50cnlwb2ludCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBjYWxs
RnJhbWUtPnRvcE9mRnJhbWUoKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAg
LTEwMTIsMTAgKzEwMTIsNiBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpu
c3RyCiAKIG1hY3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJh
dGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3Ry
dWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAg
ICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwg
JW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdDFdCi0gICAgICAgIGVuZAotCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikK
ICAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgYmluZXEgVGFnT2Zmc2V0W2Nmciwg
dDAsIDhdLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEwMjMsNyArMTAxOSw3IEBAIG1hY3JvIHByZU9w
KG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgIyBNZXRhZGF0YSBpbiB0MSwg
c3JjRHN0IGluIHQyCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24odDIsIC5zbG93KQogICAgICAg
ICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJp
dGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICAgICAgZGlzcGF0
Y2goKQogCiAgICAgLnNsb3c6CkBAIC0xMDg5LDIyICsxMDg1LDE4IEBAIGVuZCkKIAogbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0
eXBlKQotICAgICAgICBvcmggdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmls
ZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgZW5kCi0KICAgICBtZXRhZGF0
YSh0NSwgdDApCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRl
U3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5l
Z2kgdDIKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgIHVwZGF0
ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVJbnQsIHQ1LCB0MykKICAg
ICByZXR1cm4gKEludDMyVGFnLCB0MikKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEs
IExvd2VzdFRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICB1
cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyKQorICAgIHVwZGF0ZVVuYXJ5QXJp
dGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1iZXIsIHQ1LCB0MykKICAgICByZXR1
cm4odDEsIHQyKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTExNSwxMCArMTEwNyw2IEBAIGVuZCkK
IAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGlu
dGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyBhcml0aFByb2ZpbGUo
dHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1f
YXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVu
ZAotCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgZ2V0KG1fcmhzLCB0MikKICAg
ICAgICAgZ2V0KG1fbGhzLCB0MCkKQEAgLTExMjYsNyArMTExNCw3IEBAIG1hY3JvIGJpbmFyeU9w
Q3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMyVGFnLCAub3Ax
Tm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAotICAgICAgICBh
cml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0
aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAg
ICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlKHQzLCB0
MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTEzNiwxMiArMTEyNCwx
MiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJp
YSB0MiwgTG93ZXN0VGFnLCAuc2xvdwogICAgICAgICBiaWIgdDMsIExvd2VzdFRhZywgLm9wMU5v
dEludE9wMkRvdWJsZQogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5zbG93Ci0gICAgICAg
IGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFy
eUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwgdDUsIHQ0
KQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAg
ICAub3AxTm90SW50T3AyRG91YmxlOgogICAgICAgICBmaWkyZCB0MSwgdDMsIGZ0MQotICAgICAg
ICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAgICB1cGRhdGVC
aW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIs
IHQ1LCB0NCkKICAgICAub3AxTm90SW50UmVhZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDEpCiAg
ICAgICAgIGZpaTJkIHQwLCB0MiwgZnQwCkBAIC0xMTUzLDcgKzExNDEsNyBAQCBtYWNybyBiaW5h
cnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBp
cyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgbm90
LgogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNs
b3cKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50TnVt
YmVyLCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQwLCBmdDAKICAgICAgICAgZmlpMmQgdDEsIHQz
LCBmdDEKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20J
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsOCArNDQxLDEzIEBAIG1h
Y3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKICAgICAgICAgICAgIG1vdmUgUEMsIGExCiAg
ICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQogICAgICAgICAgICAgYnRweiByMCwg
LnJlY292ZXIKLQogICAgICAgICAgICAgbW92ZSByMSwgc3AKKworICAgICAgICAgICAgIyBCYXNl
bGluZSB1c2VzIExMSW50J3MgUEIgcmVnaXN0ZXIgZm9yIGl0cyBKSVQgY29uc3RhbnQgcG9vbC4K
KyAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAgICAgICAgICAgbG9hZHAg
Q29kZUJsb2NrOjptX2ppdERhdGFbUEJdLCBQQgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2Nr
OjpKSVREYXRhOjptX2ppdENvbnN0YW50UG9vbFtQQl0sIFBCCisKICAgICAgICAgICAgIGlmIEFS
TTY0RQogICAgICAgICAgICAgICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zm
c2V0T2ZKU0NDb25maWdHYXRlTWFwICsgKGNvbnN0ZXhwciBHYXRlOjpsb29wT1NSRW50cnkpICog
UHRyU2l6ZSwgYTIKICAgICAgICAgICAgICAgICBqbXAgW2EyXSwgTmF0aXZlVG9KSVRHYXRlUHRy
VGFnICMgSlNFbnRyeVB0clRhZwpAQCAtMTA1NiwxMCArMTA2MSw2IEBAIHN0cmljdEVxdWFsaXR5
SnVtcE9wKGpuc3RyaWN0ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bj
b2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
JW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBt
ZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkK
LSAgICAgICAgICAgIG9yaCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0Ml0KLSAgICAgICAgZW5kCi0KICAg
ICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQog
ICAgICAgICBtZXRhZGF0YSh0MiwgdDMpCkBAIC0xMDY5LDcgKzEwNzAsNyBAQCBtYWNybyBwcmVP
cChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgIGludGVnZXJPcGVyYXRpb24o
dDEsIC5zbG93KQogICAgICAgICBvcnEgbnVtYmVyVGFnLCB0MQogICAgICAgICBzdG9yZXEgdDEs
IFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50
KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZUludCwgdDIsIHQzKQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEx
MzQsMTEgKzExMzUsNiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUs
IE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikK
LQotICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICBvcmggdHlwZSwg
T3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjpt
X2JpdHNbdDFdCi0gICAgZW5kCi0KICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MykKICAgICBtZXRhZGF0YSh0MSwgdDIpCkBAIC0x
MTQ2LDEyICsxMTQyLDEyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0
ZSwKICAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0Mwog
ICAgIG9ycSBudW1iZXJUYWcsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmls
ZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxl
SW50LCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogLm9wTmVnYXRlTm90SW50OgogICAgIGJ0cXog
dDMsIG51bWJlclRhZywgLm9wTmVnYXRlU2xvdwogICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAwMDAw
LCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBk
YXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDEsIHQy
KQogICAgIHJldHVybih0MykKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExNjQsMTAgKzExNjAsNiBA
QCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkK
IAotICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmls
ZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBnZXQobV9yaHMsIHQwKQogICAg
ICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUs
IHQwLCB0MSkKQEAgLTExNzcsNyArMTE2OSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUo
b3Bjb2RlTmFtZSwgb3AKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9w
ZXJhdGlvbkFuZFN0b3JlKHQxLCB0MCwgLnNsb3csIHQyKQogCi0gICAgICAgIHByb2ZpbGUoQXJp
dGhQcm9maWxlSW50SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2Rl
U3RydWN0LCBBcml0aFByb2ZpbGVJbnRJbnQsIHQ1LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQog
CiAgICAgLm9wMU5vdEludDoKQEAgLTExODcsMTAgKzExNzksMTAgQEAgbWFjcm8gYmluYXJ5T3BD
dXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBidHF6IHQxLCBudW1iZXJUYWcsIC5z
bG93CiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEKLSAg
ICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJlciwg
dDUsIHQyKQogICAgICAgICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMklu
dDoKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJJbnQpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlckludCwg
dDUsIHQyKQogICAgICAgICBjaTJkcyB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAg
ICAgICBnZXQobV9kc3QsIHQyKQpAQCAtMTIwNCw5ICsxMTk2LDkgQEAgbWFjcm8gYmluYXJ5T3BD
dXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogCiAgICAgLm9wMk5vdEludDoKICAgICAgICAgIyBG
aXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIGlzIGRlZmluaXRl
bHkgbm90LgotICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBidHF6IHQxLCBudW1iZXJU
YWcsIC5zbG93Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAg
ICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRO
dW1iZXIsIHQ1LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgY2kyZHMgdDAs
IGZ0MAogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0MSwgZnQxCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE0MjAsNyArMTQy
MCw4IEBAIGVuZAogCiBtYWNybyBjaGVja1N3aXRjaFRvSklUKGluY3JlbWVudCwgYWN0aW9uKQog
ICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGJhZGRpcyBpbmNyZW1lbnQsIENvZGVC
bG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpt
X2NvdW50ZXJbdDBdLCAuY29udGludWUKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVj
dXRlQ291bnRlclt0MF0sIHQwCisgICAgYmFkZGlzIGluY3JlbWVudCwgQmFzZWxpbmVFeGVjdXRp
b25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICBhY3Rpb24oKQogICAgIC5j
b250aW51ZToKIGVuZApAQCAtMTUwMyw3ICsxNTA0LDggQEAgbWFjcm8gcHJvbG9ndWUoY29kZUJs
b2NrR2V0dGVyLCBjb2RlQmxvYwogICAgIGNvZGVCbG9ja0dldHRlcih0MSkKICAgICBjb2RlQmxv
Y2tTZXR0ZXIodDEpCiAgICAgaWYgbm90IChDX0xPT1Agb3IgQ19MT09QX1dJTikKLSAgICAgICAg
YmFkZGlzIDUsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVj
dXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDFdLCAuY29udGludWUKKyAgICAgICAgbG9hZHAgQ29k
ZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXJbdDFdLCB0MAorICAgICAgICBiYWRkaXMgNSwg
QmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKICAgICAg
ICAgaWYgSlNWQUxVRTY0CiAgICAgICAgICAgICBtb3ZlIGNmciwgYTAKICAgICAgICAgICAgIG1v
dmUgUEMsIGExCkBAIC0xNjE3LDE0ICsxNjE5LDE0IEBAIG1hY3JvIGZ1bmN0aW9uSW5pdGlhbGl6
YXRpb24ocHJvZmlsZUFyZ1MKICAgICAjIG9wdGltYWwgd2F5IGZvciBhcmNoaXRlY3R1cmVzIHRo
YXQgaGF2ZSBtb3JlIHRoYW4gZml2ZSByZWdpc3RlcnMgYXZhaWxhYmxlCiAgICAgIyBmb3IgYXJi
aXRyYXJ5IHVzZSBpbiB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgbG9hZGkgQ29kZUJsb2NrOjptX251
bVBhcmFtZXRlcnNbdDFdLCB0MAotICAgIGFkZHAgLXByb2ZpbGVBcmdTa2lwLCB0MCAjIFVzZSBh
ZGRpIGJlY2F1c2UgdGhhdCdzIHdoYXQgaGFzIHRoZSBwZWVwaG9sZQorICAgIGFkZHAgLXByb2Zp
bGVBcmdTa2lwLCB0MAogICAgIGFzc2VydChtYWNybyAob2spIGJwZ3RlcSB0MCwgMCwgb2sgZW5k
KQogICAgIGJ0cHogdDAsIC5hcmd1bWVudFByb2ZpbGVEb25lCiAgICAgbG9hZHAgQ29kZUJsb2Nr
OjptX2FyZ3VtZW50VmFsdWVQcm9maWxlcyArIEZpeGVkVmVjdG9yOjptX3N0b3JhZ2UgKyBSZWZD
b3VudGVkQXJyYXk6Om1fZGF0YVt0MV0sIHQzCiAgICAgYnRweiB0MywgLmFyZ3VtZW50UHJvZmls
ZURvbmUgIyBXaGVuIHdlIGNhbid0IEpJVCwgd2UgZG9uJ3QgYWxsb2NhdGUgYW55IGFyZ3VtZW50
IHZhbHVlIHByb2ZpbGVzLgogICAgIG11bHAgc2l6ZW9mIFZhbHVlUHJvZmlsZSwgdDAsIHQyICMg
QWFhYWFoaGhoISBOZWVkIHN0cmVuZ3RoIHJlZHVjdGlvbiEKICAgICBsc2hpZnRwIDMsIHQwICMg
b2Zmc2V0IG9mIGxhc3QgSlNWYWx1ZSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLgotICAgIGFkZHAg
dDIsIHQzICMgcG9pbnRlciB0byBlbmQgb2YgVmFsdWVQcm9maWxlIGFycmF5IGluIENvZGVCbG9j
azo6bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuCisgICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRv
IGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gdGhlIHZhbHVlIHByb2ZpbGUgYXJyYXkuCiAu
YXJndW1lbnRQcm9maWxlTG9vcDoKICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgbG9hZHEgVGhp
c0FyZ3VtZW50T2Zmc2V0IC0gOCArIHByb2ZpbGVBcmdTa2lwICogOFtjZnIsIHQwXSwgdDIKQEAg
LTI1NjMsNiArMjU2NSwxNyBAQCBtYWNybyBub3RTdXBwb3J0ZWQoKQogICAgIGVuZAogZW5kCiAK
KworbWFjcm8gdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRh
ZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBlLCBVbmFyeUFyaXRoUHJvZmlsZTo6
bV9iaXRzW3RlbXBdCitlbmQKKworbWFjcm8gdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29k
ZVN0cnVjdCwgdHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6
Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwg
QmluYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCiAvLyBGSVhNRTogV2Ugc2hv
dWxkIG5vdCBuZWVkIHRoZSBYODZfNjRfV0lOIGNvbmRpdGlvbiBoZXJlLCBzaW5jZSBXRUJBU1NF
TUJMWSBzaG91bGQgYWxyZWFkeSBiZSBmYWxzZSBvbiBXaW5kb3dzCiAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNzE2CiBpZiBXRUJBU1NFTUJMWSBhbmQgbm90
IFg4Nl82NF9XSU4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJs
ZUlkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDgsOCArNDgsMTAgQEAgcHVibGljOgogICAgIENhY2hlYWJsZUlkZW50aWZpZXIoKSA9IGRl
ZmF1bHQ7CiAKICAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJv
bUNlbGwoSlNDZWxsKiBpZGVudGlmaWVyKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlk
ZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayos
IGNvbnN0IElkZW50aWZpZXImKTsKLSAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZp
ZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayosIFVuaXF1
ZWRTdHJpbmdJbXBsKik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cisg
ICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiwgY29uc3QgSWRlbnRpZmllciYpOworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29k
ZUJsb2NrVHlwZSosIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGlubGluZSBDYWNo
ZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoVW5pcXVlZFN0cmlu
Z0ltcGwqKTsKICAgICBzdGF0aWMgY29uc3RleHByIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRl
RnJvbVJhd0JpdHModWludHB0cl90IHJhd0JpdHMpIHsgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZp
ZXIocmF3Qml0cyk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCShyZXZpc2lvbiAyODMw
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTQgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWlubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgSWRlbnRpZmllciYgaSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
PgoraW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywg
Y29uc3QgSWRlbnRpZmllciYgaSkKIHsKICAgICByZXR1cm4gY3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKGNvZGVCbG9jaywgaS5pbXBsKCkpOwogfQogCi1pbmxpbmUgQ2FjaGVh
YmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJ
ZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGNvZGVCbG9jay0+aGFzSWRlbnRp
Zmllcih1aWQpKTsKICAgICByZXR1cm4gQ2FjaGVhYmxlSWRlbnRpZmllcih1aWQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiQ2FjaGVkVHlwZXMuaCIKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5o
IgogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ2FjaGVFcnJv
ci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgpAQCAtMTkxOCw2ICsx
OTE5LDggQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgbnVtVmFsdWVQcm9maWxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fbnVtVmFsdWVQcm9maWxlczsgfQogICAgIHVuc2lnbmVkIG51bUFycmF5UHJv
ZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bUFycmF5UHJvZmlsZXM7IH0KKyAgICB1bnNpZ25l
ZCBudW1CaW5hcnlBcml0aFByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1CaW5hcnlBcml0
aFByb2ZpbGVzOyB9CisgICAgdW5zaWduZWQgbnVtVW5hcnlBcml0aFByb2ZpbGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1VbmFyeUFyaXRoUHJvZmlsZXM7IH0KIAogcHJpdmF0ZToKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV90aGlzUmVnaXN0ZXI7CkBAIC0xOTUyLDYgKzE5NTUsOCBAQCBwcml2YXRl
OgogCiAgICAgdW5zaWduZWQgbV9udW1WYWx1ZVByb2ZpbGVzOwogICAgIHVuc2lnbmVkIG1fbnVt
QXJyYXlQcm9maWxlczsKKyAgICB1bnNpZ25lZCBtX251bUJpbmFyeUFyaXRoUHJvZmlsZXM7Cisg
ICAgdW5zaWduZWQgbV9udW1VbmFyeUFyaXRoUHJvZmlsZXM7CiAKICAgICBDYWNoZWRNZXRhZGF0
YVRhYmxlIG1fbWV0YWRhdGE7CiAKQEAgLTIxNjAsNiArMjE2NSw4IEBAIEFMV0FZU19JTkxJTkUg
VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2UKICAgICAsIG1fcmFyZURhdGEoY2FjaGVkQ29kZUJs
b2NrLnJhcmVEYXRhKGRlY29kZXIpKQogICAgICwgbV92YWx1ZVByb2ZpbGVzKGNhY2hlZENvZGVC
bG9jay5udW1WYWx1ZVByb2ZpbGVzKCkpCiAgICAgLCBtX2FycmF5UHJvZmlsZXMoY2FjaGVkQ29k
ZUJsb2NrLm51bUFycmF5UHJvZmlsZXMoKSkKKyAgICAsIG1fYmluYXJ5QXJpdGhQcm9maWxlcyhj
YWNoZWRDb2RlQmxvY2subnVtQmluYXJ5QXJpdGhQcm9maWxlcygpKQorICAgICwgbV91bmFyeUFy
aXRoUHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bVVuYXJ5QXJpdGhQcm9maWxlcygpKQogewog
fQogCkBAIC0yMzM3LDYgKzIzNDQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgQ2FjaGVkQ29kZUJs
b2NrPENvZGVCCiAgICAgbV9oYXNDaGVja3BvaW50cyA9IGNvZGVCbG9jay5tX2hhc0NoZWNrcG9p
bnRzOwogICAgIG1fbnVtVmFsdWVQcm9maWxlcyA9IGNvZGVCbG9jay5tX3ZhbHVlUHJvZmlsZXMu
c2l6ZSgpOwogICAgIG1fbnVtQXJyYXlQcm9maWxlcyA9IGNvZGVCbG9jay5tX2FycmF5UHJvZmls
ZXMuc2l6ZSgpOworICAgIG1fbnVtQmluYXJ5QXJpdGhQcm9maWxlcyA9IGNvZGVCbG9jay5tX2Jp
bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOworICAgIG1fbnVtVW5hcnlBcml0aFByb2ZpbGVzID0g
Y29kZUJsb2NrLm1fdW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKIAogICAgIG1fbWV0YWRhdGEu
ZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX21ldGFkYXRhLmdldCgpKTsKICAgICBtX3JhcmVE
YXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9yYXJlRGF0YS5nZXQoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBKU0NfREVG
SU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRp
YyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChPcE5lZ2F0ZTo6TWV0YWRh
dGEmIG1ldGFkYXRhLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBvcGVyYW5kKQogewotICAgIFVu
YXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CisgICAg
VW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqbWV0YWRhdGEubV9hcml0aFByb2ZpbGU7CiAg
ICAgcHJvZmlsZS5vYnNlcnZlQXJnKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1bHQuaXNOdW1i
ZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX3JhcmVEYXRhKTsgfQogICAgIHN0YXRpYyBpbmxpbmUg
cHRyZGlmZl90IG9mZnNldE9mQXNTdHJpbmdJblJhcmVEYXRhKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFJhcmVEYXRhLCBtX2FzU3RyaW5nKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlm
Zl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ2FsbCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihG
dW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ2FsbCk7IH0KKyAgICBzdGF0aWMgaW5s
aW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0
KTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyODMw
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDM0LDggKzQzNCw2IEBAIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5k
ZW50T3B0aW9ucygKICAgICBPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSA9IGZhbHNlOwogI2Vu
ZGlmCiAKLSAgICBpZiAoIWlzQVJNNjQoKSkKLSAgICAgICAgT3B0aW9uczo6dXNlRGF0YUlDKCkg
PSBmYWxzZTsKICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQogICAgICAgICBPcHRpb25z
Ojp1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQoKSA9IGZhbHNlOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwOSw3ICszMDksNiBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgp
OwogICAgIHYoSW50MzIsIGV2YWxUaHJlc2hvbGRNdWx0aXBsaWVyLCAxMCwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihVbnNpZ25lZCwgbWF4aW11bUV2YWxDYWNoZWFibGVTb3VyY2VMZW5ndGgs
IDI1NiwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAotICAgIHYoQm9vbCwgcmFuZG9taXplRXhl
Y3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihJbnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0Zv
ckJhc2VsaW5lLCAxMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEludDMyLCBtYXhpbXVt
RXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzRm9yVXBwZXJUaWVycywgNTAwMDAsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIFwKQEAgLTUzMiw2ICs1MzEsNyBAQCBib29sIGNhblVzZVdl
YkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIHYoQm9vbCwgdXNlRGF0YUlDLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ1NoYXJpbmcsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIHVzZUJhc2VsaW5lSklUQ29kZVNo
YXJpbmcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICAvKiBGZWF0dXJlIEZs
YWdzICovXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njcmlw
dEV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzk2LDEwICszOTYsMTkgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhl
Y3V0aQogICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCiAgICAgICAgIGNvZGVC
bG9jay0+dmFsaWRhdGUoKTsKIAotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQotICAgICAg
ICBzZXR1cExMSW50KGNvZGVCbG9jayk7Ci0gICAgZWxzZQotICAgICAgICBzZXR1cEpJVCh2bSwg
Y29kZUJsb2NrKTsKKyAgICBib29sIGluc3RhbGxlZFVubGlua2VkQmFzZWxpbmVDb2RlID0gZmFs
c2U7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gYmFz
ZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNl
bGluZUNvZGUpIHsKKyAgICAgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5l
Q29kZShiYXNlbGluZVJlZi5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgaW5zdGFsbGVkVW5s
aW5rZWRCYXNlbGluZUNvZGUgPSB0cnVlOworICAgIH0KKyNlbmRpZgorICAgIGlmICghaW5zdGFs
bGVkVW5saW5rZWRCYXNlbGluZUNvZGUpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50
KCkpCisgICAgICAgICAgICBzZXR1cExMSW50KGNvZGVCbG9jayk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHNldHVwSklUKHZtLCBjb2RlQmxvY2spOworICAgIH0KIAogICAgIGluc3RhbGxD
b2RlKHZtLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+Y29kZVR5cGUoKSwgY29kZUJsb2NrLT5zcGVj
aWFsaXphdGlvbktpbmQoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTExJbnRUaWVyVXBDb3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRl
cldhcm1VcCgpCiAgICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRv
QkJRKCkpCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9y
QkJRT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1Ro
cmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNo
b2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVw
KCkpOwogICAgIH0KIAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNo
ZWQoKQpAQCAtNjUsOSArNjUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQog
ICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTEludFRpZXJzVXBUb0JCUSgpKQotICAg
ICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXpl
U29vbigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0
aHJlc2hvbGRGb3JCQlFPcHRpbWl6ZVNvb24oKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwg
bnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xk
Rm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAogICAgIHN0cnVjdCBPU1JFbnRyeURhdGEg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGllclVwQ291bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIFRpZXJVcENvdW50OjpUaWVyVXBDb3VudCgpCiB7
Ci0gICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0
ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiB9CiAKIFRpZXJVcENvdW50Ojp+VGll
clVwQ291bnQoKSA9IGRlZmF1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVGllclVwQ291bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGllclVwQ291bnQuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzcz
LDcgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCh1aW50MzJfdCBmdW5j
dGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBhZnRlciB3YXJtLXVwLiIpOwot
ICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVB
ZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9v
bCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpCkBAIC05MCwxNCArOTAsMTQg
QEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbih1aW50MzJfdCBmdW5j
dGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9T
UigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uIik7
Ci0gICAgICAgIHNldE5ld1RocmVzaG9sZCgwLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhy
ZXNob2xkKDApOwogICAgIH0KIAogICAgIHZvaWQgb3B0aW1pemVTb29uKHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NS
KCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIHNvb24uIik7CiAgICAgICAgIC8v
IEZJWE1FOiBOZWVkIGFkanVzdG1lbnQgb25jZSB3ZSBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91
dCB3YXNtIGZ1bmN0aW9ucy4KLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVz
aG9sZEZvck9NR09wdGltaXplU29vbigpLCBudWxscHRyKTsKKyAgICAgICAgc2V0TmV3VGhyZXNo
b2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAg
ICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCh1
aW50MzJfdCBmdW5jdGlvbkluZGV4LCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCkluZGV4OiBT
b3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNSBAQAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KKworICAgICAgICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1
enVraS4KKworICAgICAgICAqIHd0Zi9CYWcuaDoKKyAgICAgICAgKiB3dGYvUGFja2VkLmg6Cisg
ICAgICAgIChXVEY6OlBhY2tlZEFsaWduZWRQdHI6Om9wZXJhdG9yKiBjb25zdCk6CisKIDIwMjEt
MDktMjQgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCB0
eXBlY2hlY2tpbmcgYGlzYCBvdmVybG9hZHMgZm9yIGBzdGQ6OnVuaXF1ZV9wdHJgLCBgV1RGOjpV
bmlxdWVSZWZgLCBhbmQgYFdURjo6V2Vha1B0cmAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JhZy5oCShyZXZpc2lvbiAyODMwNTMpCisr
KyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMjAgQEAg
cHVibGljOgogICAgICAgICBvdGhlci5tX2hlYWQgPSBudWxscHRyOwogICAgIH0KIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQmFnJiBvcGVyYXRvcj0oQmFnPFQsIFU+JiYgb3RoZXIp
CisgICAgeworICAgICAgICBpZiAodW53cmFwcGVkSGVhZCgpID09IG90aGVyLnVud3JhcHBlZEhl
YWQoKSkKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKworICAgICAgICBCYWcgZGVzdHJveTsK
KyAgICAgICAgZGVzdHJveS5tX2hlYWQgPSB1bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG1faGVh
ZCA9IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKKyAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0
cjsKKworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCiAgICAgfkJhZygpCiAgICAgewog
ICAgICAgICBjbGVhcigpOwpJbmRleDogU291cmNlL1dURi93dGYvUGFja2VkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvUGFja2VkLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9XVEYvd3RmL1BhY2tlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDEwIEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7
IH0KLSAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBVID0gVD4KKyAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3Rk
Ojppc192b2lkX3Y8VT4sIFUmPjo6dHlwZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0
KCk7IH0KKwogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWdldCgpOyB9CiAK
ICAgICAvLyBUaGlzIGNvbnZlcnNpb24gb3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNp
b24gdG8gYm9vbCBidXQgbm90IHRvIG90aGVyIGludGVnZXIgdHlwZXMuCkluZGV4OiBUb29scy9T
Y3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
cnVuLWpzYy1zdHJlc3MtdGVzdHMJKHJldmlzaW9uIDI4MzA1MykKKysrIFRvb2xzL1NjcmlwdHMv
cnVuLWpzYy1zdHJlc3MtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTg2Myw3ICs4NjMsNyBAQCBk
ZWYgcnVuRlRMTm9DSklUTm9BY2Nlc3NJbmxpbmluZygqb3B0aW9uCiBlbmQKIAogZGVmIHJ1bkZU
TE5vQ0pJVFNtYWxsUG9vbCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigi
ZnRsLW5vLWNqaXQtc21hbGwtcG9vbCIsICItLWppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZT0xMDI0
MDAiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lm
aWNPcHRpb25zKSkKKyAgICBydW4oImZ0bC1uby1jaml0LXNtYWxsLXBvb2wiLCAiLS1qaXRNZW1v
cnlSZXNlcnZhdGlvblNpemU9MjAyNDAwIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bk5vQ0pJVCgq
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpAQCAtMTE3MSw3ICsxMTcxLDcgQEAgZGVmIGRl
ZmF1bHRSdW5Nb2R1bGVzKG5vTExJbnQ6IHRydWUpCiAgICAgcnVuKCJmdGwtbm8tY2ppdC1uby1p
bmxpbmUtdmFsaWRhdGUtbW9kdWxlcyIsICItbSIsICItLXZhbGlkYXRlR3JhcGg9dHJ1ZSIsICIt
LW1heGltdW1JbmxpbmluZ0RlcHRoPTEiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05T
KSkKICAgICBydW4oImZ0bC1lYWdlci1tb2R1bGVzIiwgIi1tIiwgKihGVExfT1BUSU9OUyArIEVB
R0VSX09QVElPTlMpKQogICAgIHJ1bigiZnRsLWVhZ2VyLW5vLWNqaXQtbW9kdWxlcyIsICItbSIs
ICItLXZhbGlkYXRlR3JhcGg9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMg
KyBFQUdFUl9PUFRJT05TKSkKLSAgICBydW4oImZ0bC1uby1jaml0LXNtYWxsLXBvb2wtbW9kdWxl
cyIsICItbSIsICItLWppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZT0xMDI0MDAiLCAqKEZUTF9PUFRJ
T05TICsgTk9fQ0pJVF9PUFRJT05TKSkKKyAgICBydW4oImZ0bC1uby1jaml0LXNtYWxsLXBvb2wt
bW9kdWxlcyIsICItbSIsICItLWppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZT0yMDI0MDAiLCAqKEZU
TF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TKSkKIGVuZAogCiBkZWYgbm9Ob0xMSW50UnVuTW9k
dWxlcwo=
</data>
<flag name="commit-queue"
          id="462847"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439240</attachid>
            <date>2021-09-24 23:29:39 -0700</date>
            <delta_ts>2021-09-25 11:46:46 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>652207</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzOCBA
QAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGFkZHMgYW4gInVubGlua2VkIiBiYXNlbGluZSBKSVQgdG8gSlNWQUxVRTY0
IHBsYXRmb3Jtcy4gVGhlIEpJVAorICAgICAgICBjb2RlIHByb2R1Y2VkIGJ5IHRoaXMgYmFzZWxp
bmUgSklUIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBhbGwgQ29kZUJsb2NrcyB0aGF0CisgICAgICAg
IHNoYXJlIGFuIFVubGlua2VkQ29kZUJsb2NrLiBUaGUgYmVuZWZpdCBvZiB0aGlzIGlzLCBpZiB3
ZSdyZSBjcmVhdGluZyBhIENvZGVCbG9jaworICAgICAgICBmcm9tIGFuIFVubGlua2VkQ29kZUJs
b2NrIHRoYXQgYWxyZWFkeSBjb21waWxlZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAg
ICAgaW5zdGFuY2UsIHRoaXMgbmV3IENvZGVCbG9jayBqdXN0IHN0YXJ0cyBvZmYgZXhlY3V0aW5n
IGluIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgImZvciBmcmVlIi4KKyAgICAgICAgCisgICAg
ICAgIFRvIG1ha2UgdGhpcyB3b3JrLCB0aGUgY29kZSB3ZSBlbWl0IG5vdyBuZWVkcyB0byBiZSBp
bmRlcGVuZGVudCBvZiBhIHNwZWNpZmljCisgICAgICAgIENvZGVCbG9jayBpbnN0YW5jZS4gV2Ug
dXNlIGEgQ29kZUJsb2NrIGluc3RhbmNlIGZvciBtaW5pbWFsIHByb2ZpbGluZyBpbmZvcm1hdGlv
bgorICAgICAgICB3aGVuIGNvbXBpbGluZywgYnV0IG90aGVyd2lzZSwgdGhlIGNvZGUgaXMgdGll
ZCB0byB0aGUgVW5saW5rZWRDb2RlQmxvY2suIFdoZW4KKyAgICAgICAgd2UgbmVlZCBDb2RlQmxv
Y2sgc3BlY2lmaWMgaW5mb3JtYXRpb24sIHdlIGxvYWQgaXQuIFRoaXMgdXN1YWxseSBtZWFucyB0
aGluZ3MKKyAgICAgICAgbGlrZSB3ZSdsbCBsb2FkIHRoaW5ncyBmcm9tIHRoZSBNZXRhZGF0YSBk
eW5hbWljYWxseS4gVGhpcyBwYXRjaCBhbHNvIGFkZHMgYQorICAgICAgICAibGlua2VkIGNvbnN0
YW50IHBvb2wiIGNvbmNlcHQsIGFuZCBhbnl0aW1lIHdlIGluc3RhbnRpYXRlIHN1Y2ggYSBDb2Rl
QmxvY2ssCisgICAgICAgIHdlIGFsc28gbmVlZCB0byBpbnN0YW50aWF0ZSB0aGlzICJsaW5rZWQg
Y29uc3RhbnQgcG9vbCIuIFRoaXMgY29udGFpbnMgdGhpbmdzCisgICAgICAgIGxpa2Ugb3VyIGlu
bGluZSBjYWNoZSBkYXRhIHN0cnVjdHVyZXMgKFN0cnVjdHVyZVN0dWJJbmZvKiksIEpTR2xvYmFs
T2JqZWN0KiwKKyAgICAgICAgZXRjLgorICAgICAgICAKKyAgICAgICAgVW5saW5rZWQgYmFzZWxp
bmUgSklUIGFsd2F5cyBydW5zIElDcyBpbiB0aGUgImRhdGEiIG1vZGUuIFRvIG1ha2UgdGhpcyB3
b3JrLCBJCisgICAgICAgIG1hZGUgZGF0YSBJQ3Mgd29yayBvbiB4ODZfNjQuIFRvIGRvIHRoaXMs
IHdlIG5vIGxvbmdlciBjYWxsL3JldCB0byB0aGUgSUMuCisgICAgICAgIEluc3RlYWQsIHdlIGp1
bXAgdG8gdGhlIElDLCBhbmQgdGhlIElDIGp1bXBzIGJhY2sgYnkgbG9hZGluZyB0aGUgImRvbmUi
IGxvY2F0aW9uCisgICAgICAgIGZyb20gdGhlIFN0cnVjdHVyZVN0dWJJbmZvIGR5bmFtaWNhbGx5
LiBUaGlzIHNpbXBsaWZpZXMgdGhlIGRlc2lnbiB0byBub3QgYmUKKyAgICAgICAgYmFzZWQgb24g
dGhlIGFybTY0IGNhbGxpbmcgY29udmVudGlvbiwgYW5kIGtlZXBzIHRoZSBzYW1lIHBlcmZvcm1h
bmNlIGNoYXJhY3RlcmlzdGljcy4gCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsc28g
YWRkcyBhIG5ldyB2ZXJzaW9uIG9mIElubGluZUFjY2VzcyB0aGF0IGlzIG9ubHkgdXNlZCBpbiBi
YXNlbGluZQorICAgICAgICBKSVQgKGZvciBub3cpLiBJbiB0aGUgZnV0dXJlLCB3ZSBjYW4gbWFr
ZSB0aGUgREZHL0ZUTCBhbHNvIHVzZSB0aGlzIGZvciBEYXRhCisgICAgICAgIElDcy4gQnV0IHdl
IGRvbid0IG5lZWQgdG8gZG8gdGhhdCB5ZXQgc2luY2UgdGhvc2UgdGllcnMgZG9uJ3QgdXNlIGRh
dGEgSUNzIGJ5CisgICAgICAgIGRlZmF1bHQuIFRoZSBiYXNlbGluZSBKSVQgbm93IGhhcyBhIHB1
cmUgZGF0YSBJQyBhcHByb2FjaCB0byBJbmxpbmVBY2Nlc3MuIFNvCisgICAgICAgIGluc3RlYWQg
b2YgcmVwYXRjaGluZyBjb2RlLCB3ZSByZXBhdGNoIGZpZWxkcyB3ZSBsb2FkIGR5bmFtaWNhbGx5
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGNsZWFucyB1cCBhIGZldyB0aGlu
Z3MgaW4gT1NSIGV4aXQsIHdoZXJlIGJvdGggREZHL0ZUTCB3ZXJlCisgICAgICAgIHN0b3Jpbmcg
Y2FsbGVlIHNhdmVzIHRvIHRoZSBjYWxsZWUgc2F2ZXMgYnVmZmVyIGluIGEgd2VpcmQgcGxhY2Us
IGFuZCBzZXBhcmF0ZQorICAgICAgICBmcm9tIG9uZSBhbm90aGVyLiBJIG5vdGljZWQgdGhpcyBj
b2RlIGNhbiBiZSBzaW1wbGlmaWVkIGlmIHdlIGp1c3Qgc3RvcmUKKyAgICAgICAgY2FsbGVlIHNh
dmVzIGF0IHRoZSBlbmQgb2YgdGhlIE9TUiBleGl0IGhhbmRsZXIsIGFuZCBmcm9tIGNvbW1vbiBK
SVQgZW1pc3Npb24KKyAgICAgICAgY29kZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBmaXhlcyBhIGJ1ZyB3aGVyZSB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGUgd3JvbmcgKGFu
ZCBhbHdheXMKKyAgICAgICAgbW9yZSBuZWdhdGl2ZSkgU1AgaW4gdGhlIGJhc2VsaW5lIEpJVC4g
VGhpcyBjb3VsZCBoYXBwZW4gd2hlbiB3ZSBPU1IgZXhpdAorICAgICAgICBmcm9tIGFuIGlubGlu
ZWQgZ2V0dGVyL3NldHRlci4gVGhlIE9TUiBleGl0IGNvZGUgcHV0cyB0aGUgcmV0dXJuIFBDIHdo
ZW4KKyAgICAgICAgcmV0dXJuaW5nIHRvIHRoZSBjYWxsIHNpdGUgb2YgdGhlIGdldHRlci9zZXR0
ZXIgdG8gYmUgdGhlIGlubGluZSBjYWNoZSdzCisgICAgICAgICJkb25lIGxvY2F0aW9uIi4gSG93
ZXZlciwgdGhpcyAiZG9uZSBsb2NhdGlvbiIgZGlkbid0IHVzZWQgdG8gcmVzdG9yZSBTUC4KKyAg
ICAgICAgVGhpcyBwYXRjaCBjb25zZXJ2YXRpdmVseSBtYWtlcyBpdCBzbyB0aGF0IHdlIHJlc3Rv
cmUgdGhlIFNQIGF0IHRoZXNlIHNpdGVzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBtZWFz
dXJlZCBhcyBhIDElIHNwZWVkdXAgb24gU3BlZWRvbWV0ZXIyLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVPcGVy
YW5kc0ZvckNoZWNrcG9pbnQuaDoKKyAgICAgICAgKEpTQzo6dmFsdWVQcm9maWxlT2Zmc2V0Rm9y
KToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpD
YWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86
OmVtaXRGYXN0UGF0aEltcGwpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCk6CisgICAgICAgIChK
U0M6OkNhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyk6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmg6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c2xvd1N0
dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmFkZHJlc3NPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpmcmFtZVJlZ2lzdGVyQ291bnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJpbmFyeUFy
aXRoUHJvZmlsZUZvclBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmFyeUFyaXRoUHJv
ZmlsZUZvclBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kUEMpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdFNvb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdE5l
eHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNo
ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVEFkZElDKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRNdWxJQyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUU3ViSUMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpqaXRBZnRlcldhcm1VcCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25z
dGFudFBvb2wpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNlbGluZUpJVENvbnN0YW50UG9vbCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmRvbnRKSVRBbnl0aW1lU29vbik6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6bGxpbnRFeGVjdXRlQ291bnRlciBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZHJlc3NPZk51bVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmlzS25vd25DZWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjphZGRNYXRoSUMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldEpJVENvZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdENv
ZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN3aXRjaEp1bXBUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3RyaW5nU3dpdGNoSnVtcFRh
YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6aml0Q29kZU1hcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFz
ZWxpbmVTd2l0Y2hKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJhc2VsaW5l
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdTd2l0
Y2hKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRmZ1N0cmluZ1N3aXRjaEp1
bXBUYWJsZSk6CisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwOgorICAgICAgICAoSlND
OjpFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OnNldFRocmVzaG9sZCk6CisgICAg
ICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRp
b25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlk
TWV0YWRhdGEuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3Ro
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRh
dGE6Om9mZnNldE9mTW9kZSk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRT
aXRlRmVlZGJhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0
dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
SW5CeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2spOgor
ICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OklubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoSlNDOjpJbmxp
bmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKToKKyAgICAgICAgKEpT
Qzo6SW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5saW5l
QWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aCk6CisgICAgICAgIChKU0M6OklubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZkluQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2Nlc3MpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnJlc2V0
U3R1YkFzSnVtcEluQWNjZXNzKToKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuaDoK
KyAgICAgICAgKiBieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaDoKKyAgICAgICAgKEpT
Qzo6SXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rlcyk6CisgICAgICAgICog
Ynl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6TExJbnRDYWxsTGlu
a0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKToKKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUu
aDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6c3VjY2VlZCk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0dlbmVyYXRpb25TdGF0ZTo6Y2FsY3VsYXRlTGl2ZVJlZ2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRp
b25IYW5kbGluZyk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2Vy
dmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucyk6CisgICAgICAg
IChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDoKKyAgICAgICAg
KEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5m
bzo6aW5pdEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Omlu
aXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0
SW5CeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3ND
YXNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJlc2V0KToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkRv
bmVMb2NhdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6cHJpbnRTdXBlclNhbXBsZXJTdGF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRl
bnRpZmllcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JK
SVQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9m
aWxlcyk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25BdCBjb25zdCk6CisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjppbnN0cnVjdGlvbnNTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6Omxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJu
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzZXQp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YmluYXJ5QXJpdGhQcm9maWxlKToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnVuYXJ5QXJpdGhQcm9maWxlKToKKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZE1ldGFkYXRhVGFibGU6Om9mZnNldEluTWV0YWRhdGFUYWJsZSk6CisgICAgICAgICog
Ynl0ZWNvZGUvVmFsdWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUJhc2U6
OlZhbHVlUHJvZmlsZUJhc2UpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNlOjpjbGVh
ckJ1Y2tldHMpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNr
ZXQpOgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmg6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmg6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6
CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVw
YXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6aGFuZGxlRXhpdENvdW50cyk6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMpOgorICAgICAgICAoSlNDOjpERkc6
OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1
bXBUb1RhcmdldCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dFByaXZhdGVOYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlQWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlU3ViKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlTmVnYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlTXVsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
Z1NoYWRvd0NoaWNrZW5UYWlsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEpJVENvZGUu
aDoKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmFkZE1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVVbmFyeU1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVCaW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUHV0UHJpdmF0ZU5hbWUpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAg
ICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21w
aWxlU3R1Yik6CisgICAgICAgICogZ2VuZXJhdG9yL01ldGFkYXRhLnJiOgorICAgICAgICAqIGpp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0
b3JlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFs
Q2FsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0
aG91dE1vdmluZ0dsb2JhbE9iamVjdCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5o
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hdGhJQ0hvbGRlcjo6YWRkSklUQWRkSUMpOgorICAg
ICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKToKKyAgICAgICAgKEpTQzo6TWF0
aElDSG9sZGVyOjphZGRKSVRTdWJJQyk6CisgICAgICAgIChKU0M6Ok1hdGhJQ0hvbGRlcjo6YWRk
SklUTmVnSUMpOgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyk6Cisg
ICAgICAgIChKU0M6OkJhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKToKKyAgICAgICAg
KEpTQzo6QmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKToKKyAgICAgICAgKiBqaXQv
QmFzZWxpbmVKSVRDb2RlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6
OmFkZCk6CisgICAgICAgIChKU0M6OkpJVENvbnN0YW50UG9vbDo6c2l6ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpJVENvbnN0YW50UG9vbDo6YXQgY29uc3QpOgorICAgICAgICAqIGppdC9CYXNl
bGluZUpJVFBsYW4uY3BwOgorICAgICAgICAoSlNDOjpCYXNlbGluZUpJVFBsYW46OmZpbmFsaXpl
KToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Q0NhbGxI
ZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwpOgorICAgICAgICAoSlNDOjpD
Q2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KToKKyAgICAgICAgKiBqaXQv
Q0NhbGxIZWxwZXJzLmg6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmg6CisgICAgICAgICog
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZs
ZXI6OkNhbGxGcmFtZVNodWZmbGVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OnByZXBhcmVGb3JUYWlsQ2FsbCk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVyLmg6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzbmFwc2hvdCBjb25zdCk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhclJl
YWRPbmx5Q2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNl
dCk6CisgICAgICAgIChKU0M6OkpJVDo6cmVzZXRTUCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRD
b25zdGFudFBvb2xSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAoSlNDOjpKSVQ6OmZp
bmFsaXplT25NYWluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKToKKyAgICAgICAgKEpT
Qzo6SklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAg
ICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZWdhdGUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfYWRkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElD
RmFzdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZGl2KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX211bCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zdWIpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2FsbFJlc3VsdCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxs
RXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlND
OjpKSVRDb2RlOjp1c2VEYXRhSUMpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpwY1RvQ29kZU9y
aWdpbk1hcCk6CisgICAgICAgICogaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9KSVRD
b21waWxhdGlvbktleS5oOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6SklUQ29t
cGlsYXRpb25LZXkpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6b3BlcmF0b3Ih
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJh
dG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6aGFzaCBjb25z
dCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojpwcm9maWxlZEJsb2NrIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUp
OgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6SklU
R2V0QnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmdlbmVyYXRlR2V0QnlJZElubGluZUFj
Y2Vzcyk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
UHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklURGVsQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAg
ICAoSlNDOjpKSVREZWxCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAgICAg
KEpTQzo6SklUSW5CeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAgIChK
U0M6OkpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVEdldEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgor
ICAgICAgICAoSlNDOjpKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhdGgpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KToKKyAg
ICAgICAgKEpTQzo6SklUOjppc0tub3duQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0Q29u
c3RhbnRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKToKKyAgICAgICAgKEpTQzo6SklUOjps
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6YWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6SklUOjpqdW1wVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6SklUOjps
b2FkUHRyRnJvbU1ldGFkYXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkMzJGcm9tTWV0YWRh
dGEpOgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKToKKyAgICAgICAgKEpT
Qzo6SklUOjpzdG9yZThUb01ldGFkYXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpzdG9yZTMyVG9N
ZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmxvYWRHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29waWVkR2V0UHV0SW5mbyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpJVDo6Y29waWVkQXJpdGhQcm9maWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3Yp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lu
c3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZCk6CisgICAgICAg
IChKU0M6OkpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9m
dW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6dmFsdWVJc0ZhbHNleUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnZhbHVlSXNUcnV0aHlH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAo
SlNDOjpKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAo
SlNDOjpKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfamVx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbmVxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19yZWdleHApOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3
RnVuY0V4cHJDb21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9hcmd1bWVudCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29m
KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25l
d19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0
YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90eXBlb2ZfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9m
dW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251bGwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BFcUp1bXBTbG93KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1lcmljKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3N3aXRjaF9jaGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRj
aF9zdHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdG9fdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAq
IGppdC9KSVRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6SklUUGxhbjo6a2V5KToKKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAg
IChKU0M6OkpJVDo6c2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1l
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAg
ICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3B1dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjpzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2Rl
bF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
bl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRIYXNQcml2YXRlU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX3By
aXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVf
YnJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmspOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3Rv
X3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX2Fy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFs
VmFyaWFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xvc3Vy
ZVZhcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9wcml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9w
cml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJh
bmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9pbl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQcml2YXRlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZVNsb3cpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfZnJvbV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVy
bmFsX2ZpZWxkKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRy
eUNhY2hlR2V0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5KToKKyAgICAgICAgKEpT
Qzo6dHJ5Q2FjaGVJbkJ5KToKKyAgICAgICAgKEpTQzo6dW5saW5rQ2FsbCk6CisgICAgICAgICog
aml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmhhbmRsZUV4Y2VwdGlvbkdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OnBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVF
eGNlcHRpb25HZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuaDoKKyAg
ICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50Ojpq
aXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9T
TE9XX1BBVEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5
cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpudW1CaW5hcnlBcml0aFBy
b2ZpbGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpudW1VbmFyeUFy
aXRoUHJvZmlsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2Nr
VHlwZT46OmVuY29kZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgor
ICAgICAgICAoSlNDOjp1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3ApOgorICAgICAg
ICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICogcnVudGltZS9PcHRp
b25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9u
cyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
U2NyaXB0RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnBy
ZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludFRpZXJVcENv
dW50ZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpvcHRpbWl6
ZUFmdGVyV2FybVVwKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpv
cHRpbWl6ZVNvb24pOgorICAgICAgICAqIHdhc20vV2FzbVRpZXJVcENvdW50LmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6OlRpZXJVcENvdW50KToKKyAgICAgICAgKiB3YXNt
L1dhc21UaWVyVXBDb3VudC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6b3B0
aW1pemVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50OjpvcHRp
bWl6ZU5leHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6Om9w
dGltaXplU29vbik6CisKIDIwMjEtMDktMjMgIFBoaWxpcCBDaGltZW50byAgPHBjaGltZW50b0Bp
Z2FsaWEuY29tPgogCiAgICAgICAgIFZhcmlvdXMgdHdlYWtzIGluIHByZXBhcmF0aW9uIGZvciBU
ZW1wb3JhbC5JbnN0YW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTYxMSw2ICs2MTEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBCiAgICAgYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKICAgICBidWls
dGlucy9CdWlsdGluVXRpbHMuaAogCisgICAgYnl0ZWNvZGUvQXJpdGhQcm9maWxlLmgKICAgICBi
eXRlY29kZS9BcnJheUFsbG9jYXRpb25Qcm9maWxlLmgKICAgICBieXRlY29kZS9BcnJheVByb2Zp
bGUuaAogICAgIGJ5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMuaApAQCAtODM3LDYgKzgzOCw3
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKIAogICAgIGppdC9B
c3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oCisgICAg
aml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVycy5oCiAgICAgaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVtb3J5SGFuZGxlLmgKQEAg
LTg3NSw2ICs4NzcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
CiAgICAgcGFyc2VyL1BhcnNlckVycm9yLmgKICAgICBwYXJzZXIvUGFyc2VyTW9kZXMuaAogICAg
IHBhcnNlci9QYXJzZXJUb2tlbnMuaAorICAgIHBhcnNlci9SZXN1bHRUeXBlLmgKICAgICBwYXJz
ZXIvU291cmNlQ29kZS5oCiAgICAgcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgKICAgICBwYXJzZXIv
U291cmNlUHJvdmlkZXJDYWNoZS5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTYxOSw2ICs2MTksNyBAQCBpbnRlcnByZXRlci9TaGFkb3dDaGlja2Vu
LmNwcAogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAogCiBqaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAoraml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKIGppdC9CYXNlbGluZUpJVFBsYW4uY3BwCiBq
aXQvQmluYXJ5U3dpdGNoLmNwcAogaml0L0NDYWxsSGVscGVycy5jcHAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtOTAwLDYgKzkwMCw3IEBACiAJCTUyQ0QwRjVEMjI0MkY1NjkwMDRBMThBNSAvKiBG
b3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1l
d29yayAqLzsgfTsKIAkJNTJDRDBGNUUyMjQyRjU2OTAwNEExOEE1IC8qIEphdmFTY3JpcHRDb3Jl
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsg
Ki87IH07CiAJCTUyQ0QwRjY4MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0QwRjY3MjI0MkY3MUMw
MDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLzsgfTsKKwkJNTJERDAwMDgyNkUwMzlCOTAwNTRFNDA4
IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyRUVE
Nzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFRUQ3OTMyNDkyQjg2ODAwOEY0Qzkz
IC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRD
QyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIwMDI2QTU0
NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNl
My1tbS5tbSAqLzsgfTsKQEAgLTEyMjAsNyArMTIyMSw3IEBACiAJCTc5ODcyQzQ4MjIxQkJBRjMw
MDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFzZUludGVy
bmFsLmggKi87IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5N
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVG
N0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTc5QTIyODM2MUQz
NUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFBy
b2ZpbGUuaCAqLzsgfTsKKwkJNzlBMjI4MzYxRDM1RDcxRjAwRDhFMDY3IC8qIEFyaXRoUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMjI4
MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUJCMTdFMUU1Q0NCNTcwMDQ1QjlBNiAv
KiBBaXJEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QUJCMTdDMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUFDMzBG
RjFGOTk1MzY0MDA0ODRGRDcgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFDMzBGRTFGOTk1
MzYzMDA0ODRGRDcgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmggKi87IH07CiAJ
CTc5QUYwQkU0MUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUYwQkUzMUQzRUZE
NEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzY3NCw2ICszNjc1LDggQEAKIAkJNTJD
RDBGNjQyMjQyRjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBwYXRoID0g
ZGZnL3Rlc3RkZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQxMzA4RjIy
MUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNjI2
RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2Vs
aW5lSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNzI2RTAz
OUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJh
c2VsaW5lSklUQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzky
MjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGdW5jdGlvbkFsbG93bGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyRUVENzkzMjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGdW5jdGlvbkFsbG93bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI3Niw2ICs2Mjc5LDggQEAKIAkJCQk2
Qjc2N0U3QTI2NzkxRjI3MDAxN0Y4RDEgLyogQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaCAqLywK
IAkJCQk3MjM5OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLywK
IAkJCQk3MjM5OThGNTI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8sCisJ
CQkJNTJERDAwMDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8sCisJ
CQkJNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovLAogCQkJ
CTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBG
NjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4Mzky
RDFCQUNBOUQzMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApAQCAtOTczMCw2ICs5
NzM1LDcgQEAKIAkJCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRB
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Zs
dXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDgg
LyogQmFzZWxpbmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJF
MDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlDQzg5
MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTM4NkZEN0UyNkU4NjdCODAwRTRDMjhCIC8qIFRlbXBvcmFsUGxhaW5UaW1lLmggaW4gSGVhZGVy
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDE1ICsyMDIsMTUgQEAgUmVm
UHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmZyb21TdHJ1YwogICAgIHN3aXRjaCAoc3R1Yklu
Zm8uY2FjaGVUeXBlKCkpIHsKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7Ci0gICAg
ICAgIHJldHVybiBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBMb2FkLCBp
ZGVudGlmaWVyLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIFByb3h5YWJsZUFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRT
ZWxmT2Zmc2V0LCBzdHViSW5mby5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAg
ICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7Ci0gICAgICAgIHJldHVybiBBY2Nlc3ND
YXNlOjpjcmVhdGUodm0sIG93bmVyLCBSZXBsYWNlLCBpZGVudGlmaWVyLCBzdHViSW5mby51LmJ5
SWRTZWxmLm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIFJlcGxhY2Us
IGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsK
LSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIEluSGl0LCBpZGVu
dGlmaWVyLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIEluSGl0LCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNldCwg
c3R1YkluZm8uaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBDYWNo
ZVR5cGU6OkFycmF5TGVuZ3RoOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXND
b25zdGFudElkZW50aWZpZXIpOwpAQCAtMTk4NSwxNCArMTk4NSwxMCBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20g
Z2V0dGVycy9zZXR0ZXJzLgogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2Fs
bDsKIAorCiAgICAgICAgIC8vIFRoaXMgYWxzbyBkb2VzIHRoZSBuZWNlc3NhcnkgY2FsY3VsYXRp
b25zIG9mIHdoZXRoZXIgb3Igbm90IHdlJ3JlIGFuCiAgICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5k
bGluZyBjYWxsIHNpdGUuCi0gICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygp
KQotICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lzdGVy
czo6bHIpOwotI2VuZGlmCi0gICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0
ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwo
ZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsKKyAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRl
OjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0
YWNrRm9yQ2FsbCgpOwogCiAgICAgICAgIGF1dG8gcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3Rh
Y2tGb3JDYWxsID0gWyZdKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSYgc3BpbGxT
dGF0ZSwgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUpIHsKICAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IGRvbnRSZXN0b3JlOwpAQCAtMjA3OSw4ICsyMDc1LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgQVNTRVJUKCEobnVtYmVyT2ZSZWdzRm9y
Q2FsbCAlIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpKTsKICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mQnl0ZXNGb3JDYWxsID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdp
c3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CiAKLSAgICAgICAgICAgIHVuc2lnbmVk
IGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0gICAgICAgICAgICBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7
CisgICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPSBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVz
Rm9yQ2FsbCk7CiAKICAgICAgICAgICAgIGppdC5zdWJQdHIoCiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKQEAg
LTIxMzgsNiArMjEzMyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dl
bmUKIAogICAgICAgICAgICAgaW50IHN0YWNrUG9pbnRlck9mZnNldCA9IChjb2RlQmxvY2stPnN0
YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzdGF0ZS5wcmVzZXJ2ZWRS
ZXVzZWRSZWdpc3RlclN0YXRlLm51bWJlck9mQnl0ZXNQcmVzZXJ2ZWQgLSBzcGlsbFN0YXRlLm51
bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbjsKICAgICAgICAgICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworCiAgICAgICAgICAgICBib29sIGNhbGxIYXNSZXR1cm5WYWx1ZSA9IGlzR2V0
dGVyKCk7CiAgICAgICAgICAgICByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwo
c3BpbGxTdGF0ZSwgY2FsbEhhc1JldHVyblZhbHVlKTsKIApAQCAtMjI2NCwxMiArMjI2MCw3IEBA
IHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKIAogICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdl
dE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgICAgICAgICBpZiAoY29k
ZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmUuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0jZW5kaWYKLSAgICAgICAgICAgIGF1dG8g
c3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0
aG91dEV4Y2VwdGlvbnMoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsKKyAgICAgICAgICAgIGF1
dG8gc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
V2l0aG91dEV4Y2VwdGlvbnMoKTsKIAogICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRl
Y2x0eXBlKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKT4oQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKCZ2bSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgaml0LnByZXBhcmVDYWxs
T3BlcmF0aW9uKHZtKTsKQEAgLTIzNjQsMTAgKzIzNTUsNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFS
ZWdpc3RlcnNUb1ByZXNlcnZlOwogICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZS5zZXQoYmFzZUdQUik7CiAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNl
cnZlLnNldCh2YWx1ZVJlZ3MpOwotI2lmIENQVShBUk02NCkKLSAgICAgICAgICAgICAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3Rl
cnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCiAgICAgICAgICAg
ICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0
ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmUpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJi
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsNyArMjkyLDcgQEAgb3BfZ3JvdXAg
OlByb2ZpbGVkQmluYXJ5T3AsCiAgICAgICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVzLAog
ICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0
aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAg
IH0KIAogb3BfZ3JvdXAgOlZhbHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1Myw3ICszNTMsNyBA
QCBvcF9ncm91cCA6VW5hcnlJblBsYWNlUHJvZmlsZWRPcCwKICAgICAgICAgc3JjRHN0OiBWaXJ0
dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2Zp
bGU6IFVuYXJ5QXJpdGhQcm9maWxlCisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFBy
b2ZpbGUuKgogICAgIH0KIAogb3AgOnRvX29iamVjdCwKQEAgLTM4Niw3ICszODYsNyBAQCBvcCA6
bmVnYXRlLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLAogICAgIH0sCiAgICAgbWV0
YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAg
ICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JD
aGVja3BvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2lu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3MywyOCBAQCBWYWx1ZVByb2ZpbGUqIHZhbHVl
UHJvZmlsZUZvckltcGwoQnl0ZWNvCiAgICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9maWxl
OwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQcm9m
aWxlT2Zmc2V0Rm9yKHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURfUEFS
QU0oY2hlY2twb2ludEluZGV4KTsKKyAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJ
RCA9PSBvcF9pdGVyYXRvcl9vcGVuKSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4
KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRl
Y29kZTo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2Ug
T3BJdGVyYXRvck9wZW46OmdldE5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNl
dE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6
Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3Bv
aW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJl
dHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKKyAg
ICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZEb25lUHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0
OjpnZXRWYWx1ZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2Zp
bGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSAKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRh
dGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwg
dW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZt
KQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsKIH0KIAotQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKLXsKLSAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KG1fZmFz
dFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENh
bGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGF0
YUlDKCkpOwpAQCAtMjI1LDYgKzIyMCwxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0TWF4QXJn
dW1lbnRDb3VudEluCiAgICAgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZhbHVl
OwogfQogCitDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86
OmZhc3RQYXRoU3RhcnQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkgJiYgaXNU
YWlsQ2FsbCgpKTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJu
YWxQdHJUYWc+KHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCk7Cit9CisKIHZvaWQgQ2FsbExpbmtJ
bmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogewogICAgIGF1dG8gaGFuZGxlU3BlY2lmaWNDYWxsZWUg
PSBbJl0gKEpTRnVuY3Rpb24qIGNhbGxlZSkgewpAQCAtMjk4LDIzICsyOTksMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMxMiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMjUsMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzQ0LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM4MSwzMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5mb0dQ
UiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRy
eVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2
bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9IENv
ZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgc2V0VXBD
YWxsKHVubGlua2VkQ2FsbExpbmtJbmZvLmNhbGxUeXBlLCBjYWxsZWVHUFIpOworICAgIG1fZG9u
ZUxvY2F0aW9uID0gdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uOworICAgIGlmICh1
bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKSB7CisgICAgICAgIC8vIEZJWE1F
OiBJdCdkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIGEgcmVmY291bnRlZCBkYXRhIHN0cnVjdHVyZS4K
KyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxl
RGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpOworICAgIH0KKyAg
ICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgdS5kYXRhSUMubV9jYWxsTGlu
a0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRp
b24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dl
ZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGly
ZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlz
VGFpbENhbGwoKSk7CiAKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKIAotICAg
IGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwot
ICAgIH0pOwotCiAgICAgYXV0byBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICB1LmNvZGVJQy5t
X2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQ
dHJUYWc+KGNhbGwpOwpAQCAtMzk3LDcgKzQyNCw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0
RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgp
OwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGZhc3RQYXRoU3RhcnQpOworICAgICAgICB1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
CiAgICAgfSk7CiAKICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEg
anVtcCB0byB0aGUgc2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5
ICs0MywxMSBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwog
c3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0lu
Zm87CisKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8
Q2FsbExpbmtJbmZvPiB7CiBwdWJsaWM6Ci0gICAgZW51bSBDYWxsVHlwZSB7CisgICAgZW51bSBD
YWxsVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25lLAogICAgICAgICBDYWxsLAogICAgICAg
ICBDYWxsVmFyYXJncywKQEAgLTE2NSw2ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2Fs
bGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhW
TSYsIFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUik7CisKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsZWVHUFI7IH0KICAgICAKICAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgewpA
QCAtMTczLDEzICsxNzcsMTYgQEAgcHVibGljOgogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47Cisg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxM
aW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CisgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9V
TlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRh
aWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWls
Q2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBl
bWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRh
aWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJik7CiAgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKICAg
ICB2b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOworICAgIHN0YXRpYyB2b2lk
IGVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIpOwogICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJ
QygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09
IFVzZURhdGFJQzo6WWVzOyB9CkBAIC0yMDMsNyArMjEwLDYgQEAgcHVibGljOgogICAgICAgICBt
X2FsbG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwogCkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1
YmxpYzoKICAgICAgICAgbV9zbG93U3R1YiA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgSklUU3R1
YlJvdXRpbmUqIHNsb3dTdHViKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Nsb3dTdHViLmdl
dCgpOwotICAgIH0KLQogICAgIGJvb2wgc2Vlbk9uY2UoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IG1faGFzU2VlblNob3VsZFJlcGF0Y2g7CkBAIC0zMDgsOSArMzA5LDkgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUpOwogICAgIH0KIAot
ICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIH0KIAogICAgIHVpbnQzMl90IG1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTM4MSw3ICszODIsOSBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1f
ZmFzdFBhdGhTdGFydDsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IGZhc3RQYXRoU3RhcnQoKTsKKwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBA
IC0zOTcsNiArNDAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247CiAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRo
U3RhcnQ7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBt
X2Zhc3RQYXRoU3RhcnQ7CiAgICAgICAgIH0gY29kZUlDOwogICAgIH0gdTsKIApAQCAtNDI0LDYg
KzQyOCwxMyBAQCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpCiAgICAg
cmV0dXJuIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCk7CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENh
bGxMaW5rSW5mbyB7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OyAvLyBDdXJyZW50
bHksIG9ubHkgdXNlZCBieSBiYXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5IHByb2R1Y2Ug
YSBDb2RlT3JpZ2luLgorICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307
CisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjc5LDggKzI3OSw2IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZN
JiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQog
ICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5Db21w
aWxlZFdpdGhGVEwoZmFsc2UpCi0gICAgLCBtX2hhc0xpbmtlZE9TUkV4aXQoZmFsc2UpCi0gICAg
LCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZShmYWxzZSkKICAgICAsIG1fbnVtQ2FsbGVl
TG9jYWxzKG90aGVyLm1fbnVtQ2FsbGVlTG9jYWxzKQogICAgICwgbV9udW1WYXJzKG90aGVyLm1f
bnVtVmFycykKICAgICAsIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAob3RoZXIubV9udW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCkKQEAgLTMwOCw2ICszMDYsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlkZXIoKSk7
CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisgICAgbV9s
bGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVy
KCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9CkBAIC0z
MTgsNyArMzE4LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQwog
ICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIAogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAo
KTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgaWYgKG90aGVyLm1fcmFyZURhdGEpIHsK
ICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwpAQCAtMzM2LDggKzMzNSw2IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fZGlkRmFp
bEpJVENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFs
c2UpCiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCi0gICAgLCBtX2hhc0xp
bmtlZE9TUkV4aXQoZmFsc2UpCi0gICAgLCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZShm
YWxzZSkgCiAgICAgLCBtX251bUNhbGxlZUxvY2Fscyh1bmxpbmtlZENvZGVCbG9jay0+bnVtQ2Fs
bGVlTG9jYWxzKCkpCiAgICAgLCBtX251bVZhcnModW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMo
KSkKICAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCkBAIC0zNTksNyArMzU2LDkg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJU
KHNvdXJjZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSk7Ci0gICAgCisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50
ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKKwogICAgIHZtLmhl
YXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQogCkBAIC0zNzAsNyArMzY5LDggQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2FuJ3QgZ2VuZXJh
dGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJvY2VzcyBpcyBu
b3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJvZHVjZSBuZXcg
bG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5lc3MgYW5hbHlz
aXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5r
ZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhlIGxpdmVuZXNz
IGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNpZGUgVW5saW5r
ZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBiZXR3ZWVuIGFs
bCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhlIGJ5dGVjb2Rl
IG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5nIGFuIFVubGlu
a2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2Ny
aXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5r
ZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CkBAIC00NzEsNiArNDcxLDIxIEBA
IGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgYnJlYWs7
IFwKICAgICB9CiAKKyAgICB1bnNpZ25lZCBiaW5hcnlQcm9maWxlSW5kZXggPSAwOworICAgIHVu
c2lnbmVkIHVuYXJ5UHJvZmlsZUluZGV4ID0gMDsKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9B
UklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElB
TElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0g
Jm1fdW5saW5rZWRDb2RlLT5iaW5hcnlBcml0aFByb2ZpbGUoYmluYXJ5UHJvZmlsZUluZGV4Kysp
OyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorI2RlZmluZSBMSU5LX1dJVEhfVU5BUllfQVJJ
VEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJ
WkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZt
X3VubGlua2VkQ29kZS0+dW5hcnlBcml0aFByb2ZpbGUodW5hcnlQcm9maWxlSW5kZXgrKyk7IFwK
KyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYg
aW5zdHJ1Y3Rpb25TdHJlYW0gPSBpbnN0cnVjdGlvbnMoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8m
IGluc3RydWN0aW9uIDogaW5zdHJ1Y3Rpb25TdHJlYW0pIHsKICAgICAgICAgT3Bjb2RlSUQgb3Bj
b2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKQEAgLTUzMywxNCArNTQ4LDE0IEBAIGJv
b2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgTElOSyhPcENy
ZWF0ZVByb21pc2UpCiAgICAgICAgIExJTksoT3BDcmVhdGVHZW5lcmF0b3IpCiAKLSAgICAgICAg
TElOSyhPcEFkZCkKLSAgICAgICAgTElOSyhPcE11bCkKLSAgICAgICAgTElOSyhPcERpdikKLSAg
ICAgICAgTElOSyhPcFN1YikKLQotICAgICAgICBMSU5LKE9wTmVnYXRlKQotICAgICAgICBMSU5L
KE9wSW5jKQotICAgICAgICBMSU5LKE9wRGVjKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FS
SVRIX1BST0ZJTEUoT3BBZGQpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklM
RShPcE11bCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wRGl2KQor
ICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BTdWIpCisKKyAgICAgICAg
TElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BOZWdhdGUpCisgICAgICAgIExJTktfV0lU
SF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wSW5jKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJ
VEhfUFJPRklMRShPcERlYykKIAogICAgICAgICBMSU5LKE9wSm5lcVB0cikKIApAQCAtNzY5LDcg
Kzc4NCw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAv
LyByZWx5IG9uIHRoZSBpbnN0cnVjdGlvbiBjb3VudCAoYW5kIGFyZSBpbiB0aGVvcnkgcGVybWl0
dGVkIHRvIGFsc28gaW5zcGVjdCB0aGUKICAgICAvLyBpbnN0cnVjdGlvbiBzdHJlYW0gdG8gbW9y
ZSBhY2N1cmF0ZSBhc3Nlc3MgdGhlIGNvc3Qgb2YgdGllci11cCkuCiAgICAgb3B0aW1pemVBZnRl
cldhcm1VcCgpOwotICAgIGppdEFmdGVyV2FybVVwKCk7CiAKICAgICAvLyBJZiB0aGUgY29uY3Vy
cmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2RlIGJsb2NrJ3MgaGFzaCwgdGhlbiBjb21wdXRl
IGl0IGhlcmUKICAgICAvLyBzeW5jaHJvbm91c2x5LgpAQCAtNzkzLDYgKzgwNyw3OCBAQCB2b2lk
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb25Db21tb24oVk0mCiAgICAgbV9vd25lckVkZ2Uuc2V0
KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpjcmVhdGUodm0sIHRoaXMpKTsK
IH0KIAorI2lmIEVOQUJMRShKSVQpCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRC
YXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRD
b2RlKGppdENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0
Q29kZU1hcCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFu
ZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8g
RklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5h
dGl2ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkp
LnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAg
ICAgYXV0byYgaml0RGF0YSA9IGVuc3VyZUpJVERhdGEobG9ja2VyKTsKKworICAgICAgICBSRUxF
QVNFX0FTU0VSVChqaXREYXRhLm1faml0Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CisgICAgICAg
IGppdERhdGEubV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+
bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBq
aXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBl
bnRyeSA9IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOworICAgICAgICAgICAgc3dpdGNo
IChlbnRyeS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
R2xvYmFsT2JqZWN0OgorICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xb
aV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAg
ICAgICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8gPSAq
c3RhdGljX2Nhc3Q8VW5saW5rZWRDYWxsTGlua0luZm8qPihlbnRyeS5wYXlsb2FkLmdldCgpKTsK
KyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9j
YWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2Rl
SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmluaXRpYWxpemVEYXRhSUMo
dm0oKSwgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGNhbGxM
aW5rSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbzogeworICAg
ICAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8g
PSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyo+KGVudHJ5LnBheWxvYWQu
Z2V0KCkpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGpp
dERhdGEubV9zdHViSW5mb3MuYWRkKHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZSwgQ29kZU9y
aWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBz
dHViSW5mby0+aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKHRoaXMsIHVu
bGlua2VkU3R1YkluZm8pOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBv
b2xbaV0gPSBzdHViSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6IHsK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25z
dGFudFBvb2xbaV0gPSBmdW5jdGlvbkRlY2woaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6
OkZ1bmN0aW9uRXhwcjogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAg
aml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIEdsb2JhbENv
ZGU6CisgICAgY2FzZSBNb2R1bGVDb2RlOgorICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAgIG1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RnVuY3Rpb25Db2RlOgorICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRv
IGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCisgICAgICAg
IC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRpb24uCisgICAgICAgIG1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwoKSkgJiYgREZHOjptaWdo
dElubGluZUZ1bmN0aW9uKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAo
aml0Q29kZS0+bV9pc1NoYXJlYWJsZSAmJiAhdW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtl
ZEJhc2VsaW5lQ29kZSAmJiBPcHRpb25zOjp1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nKCkpCisg
ICAgICAgIHVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUgPSBXVEZN
b3ZlKGppdENvZGUpOworfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKIENvZGVCbG9jazo6fkNv
ZGVCbG9jaygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC04NzMsNiArOTU5LDI3IEBAIENv
ZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAorYm9vbCBD
b2RlQmxvY2s6OmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QKK3sKKyAgICAvLyBUaGlzIG5lZWRzIHRvIGNvcnJlc3BvbmQgdG8gd2hh
dCB3ZSBkbyBpbnNpZGUgc2V0Q29uc3RhbnRSZWdpc3RlcnMuCisgICAgc3dpdGNoICh1bmxpbmtl
ZENvZGVCbG9jaygpLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihyZWcpKSB7Cisg
ICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6CisgICAgY2FzZSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOiB7CisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSB1bmxpbmtlZENvZGVCbG9jaygpLT5nZXRDb25zdGFudChyZWcpOworICAgICAgICBp
ZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKGNlbGwt
PmluaGVyaXRzPFN5bWJvbFRhYmxlPih2bSgpKSB8fCBjZWxsLT5pbmhlcml0czxKU1RlbXBsYXRl
T2JqZWN0RGVzY3JpcHRvcj4odm0oKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjo6TGlua1RpbWVDb25zdGFudDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwog
VmVjdG9yPHVuc2lnbmVkPiBDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IEZp
eGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgRml4ZWRW
ZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtODkyLDYgKzk5OSw3IEBAIFZl
Y3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFIKICAgICAgICAgc3dpdGNoIChy
ZXByZXNlbnRhdGlvbikgewogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudDoKICAgICAgICAgICAgIGNvbnN0YW50ID0gZ2xvYmFsT2JqZWN0LT5s
aW5rVGltZUNvbnN0YW50KHN0YXRpY19jYXN0PExpbmtUaW1lQ29uc3RhbnQ+KGNvbnN0YW50LmFz
SW50MzJBc0FueUludCgpKSk7CisgICAgICAgICAgICBBU1NFUlQoY29uc3RhbnQuaXNDZWxsKCkp
OyAvLyBVbmxpbmtlZCBCYXNlbGluZSBKSVQgcmVxdWlyZXMgdGhpcy4KICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI6CiAgICAg
ICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgpAQCAtMTUxNCw3ICsx
NjIyLDcgQEAgQ29kZUJsb2NrOjpKSVREYXRhJiBDb2RlQmxvY2s6OmVuc3VyZUpJVAogICAgIHJl
dHVybiAqbV9qaXREYXRhOwogfQogCi12b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJ
VElubGluZUNhY2hlcygpCit2b2lkIENvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMo
KQogewogICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAg
IGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5m
b3MpCkBAIC0xNTI1LDYgKzE2MzMsMjAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxp
bmVKSVRJbmxpbgogICAgICAgICAgICAgc3R1YkluZm8tPnZpc2l0V2Vha1JlZmVyZW5jZXMobG9j
a2VyLCB0aGlzKTsKICAgICAgICAgfQogICAgIH0KKworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAg
ICBpZiAoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIC8vIFZl
cmlmeSB3ZSBkb24ndCBuZWVkIHRvIGZpbmFsaXplIHRoZXNlIHNpbmNlIHRoZXkncmUgdmlydHVh
bCBjYWxscy4KKyAgICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA6IHN0YXRp
Y19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fZXZhbENhbGxMaW5r
SW5mb3MpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsK
KyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+Zm9yRWFjaERlcGVuZGVudENlbGwoW10gKEpTQ2Vs
bCopIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisKKyAgICB9CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC0xNTM0LDQ2
ICsxNjU2LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAog
ICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIGJvb2wg
aXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3Jh
ZGU7Ci0gICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBmYWxzZTsKLSAgICAvLyBJ
ZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVw
bGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0Ci0gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGluZSBK
SVQgY29kZSBhbmQgcmVpbnN0YWxsIExMSW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5LgotICAg
IGlmIChPcHRpb25zOjp1c2VMTEludCgpICYmICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1NldCgp
LmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpKSB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIG9w
dGltaXplZENvZGVCbG9jayA9IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKLSAgICAgICAgICAg
IGlmICghb3B0aW1pemVkQ29kZUJsb2NrLT5tX29zckV4aXRDb3VudGVyKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSkgewotICAgICAgICAgICAgICAg
ICAgICBtX2ppdENvZGUgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBMTEludDo6c2V0
RW50cnlwb2ludCh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0
VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOwotCi0gICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxpbmtlZENvZGUtPm51bWJlck9mRXhjZXB0
aW9uSGFuZGxlcnMoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmxp
bmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlua2VkQ29kZS0+ZXhjZXB0
aW9uSGFuZGxlcihpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5k
bGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9ucygpLmF0KHVubGlua2Vk
SGFuZGxlci50YXJnZXQpLnB0cigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5p
bml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZUNhdGNoKGluc3RydWN0aW9uLndpZHRoKCkpLmNvZGUo
KSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdW5saW5r
SW5jb21pbmdDYWxscygpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBj
bGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGluIGZpbmFsaXplVW5jb25kaXRpb25hbGx5IGFs
bCBjb21waWxlciB0aHJlYWRzCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBzYWZlcG9pbnRl
ZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5pbmcgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBieXRlY29k
ZSBwYXJzZXIsIGFuZCBieXRlY29kZQotICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXIgaXMg
dGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5mb3Mu
Ci0gICAgICAgICAgICAgICAgICAgIHJlc2V0SklURGF0YSgpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNlbmRpZgotICAgIAog
ICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKICAgICAgICAg
ZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAo
ISFqaXRDb2RlKCkpCi0gICAgICAgIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsK
KyAgICAgICAgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KERGR19KSVQpCkBAIC0xNTk0LDcgKzE2ODIsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoCiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OgotICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKKyAg
ICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jb3VudCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAg
ICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKQEAgLTE2NzUsMzAgKzE3
NjMsNiBAQCBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mCiAgICAgcmV0
dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSwgY29k
ZU9yaWdpbik7CiB9CiAKLUpJVEFkZElDKiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fYWRkSUNzLmFk
ZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVRNdWxJQyogQ29kZUJsb2NrOjphZGRKSVRNdWxJQyhC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX211
bElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUU3ViSUMqIENvZGVCbG9jazo6YWRkSklU
U3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVE5lZ0lDKiBDb2RlQmxvY2s6
OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRh
KGxvY2tlcikubV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KIFN0cnVjdHVyZVN0dWJJ
bmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwpAQCAtMzEzMyw3ICszMTk3LDcg
QEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1l
UmVnaXN0ZXJDb3VudEZvcih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMzQ5LDEzICszNDEzLDEzIEBA
IEJpbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2gg
KHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNh
c2Ugb3BfbXVsOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJu
ICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTMzNjcsMTEgKzM0MzEsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6dW5hcnlBcml0aAogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGNhc2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0zNDcyLDIyICszNTM2LDE2IEBAIHZvaWQgQ29kZUJsb2Nr
OjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmkKIH0KIAogI2lmIEVOQUJMRShKSVQpCi12b2lkIENv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3Jp
Z2luTWFwPiYmIG1hcCkgCi17IAotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
KTsKLSAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1v
dmUobWFwKTsKLX0KLQogc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQ
Qyh2b2lkKiBwYykKIHsKKyAgICBpZiAoYXV0byogcGNUb0NvZGVPcmlnaW5NYXAgPSBtX2ppdENv
ZGUtPnBjVG9Db2RlT3JpZ2luTWFwKCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Q29k
ZU9yaWdpbj4gY29kZU9yaWdpbiA9IHBjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQorICAg
ICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CisgICAgfQorCiAgICAgewogICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIGlmIChhdXRvKiBqaXREYXRh
ID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBpZiAoaml0RGF0YS0+bV9wY1RvQ29k
ZU9yaWdpbk1hcCkgewotICAgICAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+IGNvZGVPcmlnaW4gPSBqaXREYXRhLT5tX3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKLSAgICAgICAgICAgIH0K
LQogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRh
LT5tX3N0dWJJbmZvcykgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29udGFpbnNQ
QyhwYykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+KHN0dWJJbmZvLT5jb2RlT3JpZ2luKTsKQEAgLTM1MjEsMjggKzM1NzksMTQgQEAgc3RkOjpv
cHRpb25hbDxCeXRlY29kZUluZGV4PiBDb2RlQmxvY2s6OgogICAgIHJldHVybiBieXRlY29kZUlu
ZGV4OwogfQogCi1pbnQzMl90IENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhy
ZXNob2xkKQotewotICAgIHN3aXRjaCAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUo
KSkgewotICAgIGNhc2UgVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU6Ci0gICAgICAgIHJldHVybiB0
aHJlc2hvbGQ7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6RmFsc2U6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgKiA0OwotICAgIGNhc2UgVHJpU3RhdGU6OlRydWU6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgLyAyOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
dGhyZXNob2xkOwotfQotCi12b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBD
b2RlQmxvY2s6OmppdFNvb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdU
aHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2Fy
bVVwKCkpLCB0aGlzKTsKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9s
ZCh1bmxpbmtlZENvZGVCbG9jaygpLT50aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3Zv
aWQgQ29kZUJsb2NrOjpqaXROZXh0SW52b2NhdGlvbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdU
aHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAKIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRy
YXBCcmVha3BvaW50cygpIGNvbnN0CkBAIC0zNTg4LDI4ICszNjMyLDggQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBNYXRoSUNTdGF0cygpCiAgICAgZG91YmxlIG51bVN1YnMgPSAwLjA7CiAgICAgZG91
YmxlIHRvdGFsU3ViU2l6ZSA9IDAuMDsKIAotICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVC
bG9jayogY29kZUJsb2NrKSB7Ci0gICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gY29kZUJsb2Nr
LT5tX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgICAgIGZvciAoSklUQWRkSUMqIGFkZElDIDog
aml0RGF0YS0+bV9hZGRJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1BZGRzKys7Ci0gICAgICAg
ICAgICAgICAgdG90YWxBZGRTaXplICs9IGFkZElDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKEpJVE11bElDKiBtdWxJQyA6IGppdERhdGEtPm1fbXVsSUNz
KSB7Ci0gICAgICAgICAgICAgICAgbnVtTXVscysrOwotICAgICAgICAgICAgICAgIHRvdGFsTXVs
U2l6ZSArPSBtdWxJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Zm9yIChKSVROZWdJQyogbmVnSUMgOiBqaXREYXRhLT5tX25lZ0lDcykgewotICAgICAgICAgICAg
ICAgIG51bU5lZ3MrKzsKLSAgICAgICAgICAgICAgICB0b3RhbE5lZ1NpemUgKz0gbmVnSUMtPmNv
ZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUU3ViSUMqIHN1
YklDIDogaml0RGF0YS0+bV9zdWJJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1TdWJzKys7Ci0g
ICAgICAgICAgICAgICAgdG90YWxTdWJTaXplICs9IHN1YklDLT5jb2RlU2l6ZSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgYXV0byBjb3VudElDcyA9IFsmXSAoQ29kZUJsb2NrKikg
eworICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byByZS1pbXBsZW1lbnQgdGhpcyB1c2luZyBK
SVRDb2RlLgogICAgIH07CiAgICAgaGVhcCgpLT5mb3JFYWNoQ29kZUJsb2NrKGNvdW50SUNzKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw5IEBAIGNsYXNzIEpTTW9kdWxlRW52aXJv
bm1lbnQ7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ7CiBjbGFzcyBNZXRhZGF0YVRhYmxlOwot
Y2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKIGNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogCiBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihDb2RlQmxvY2tSYXJlRGF0YSk7CiAKQEAg
LTE1OCw3ICsxNTgsOSBAQCBwdWJsaWM6CiAgICAgTWV0YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIG51
bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6
CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKHVuc2lnbmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoK
IAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkgY29uc3QgeyByZXR1cm4g
bV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgfQogCkBAIC0xNjcsNyArMTY5LDYgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KICAg
ICB1bnNpZ25lZCBudW1UbXBzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0No
ZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50VG1wczsgfQogCi0gICAgdW5zaWduZWQqIGFk
ZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CiAKICAgICBDb2RlQmxvY2sq
IGFsdGVybmF0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9h
bHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAgLTIzMiwxNiArMjMzLDYgQEAgcHVibGljOgogICAgIGJv
b2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3Rh
bGxWTVRyYXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmly
dHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRp
bmcgYmFjayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlz
IGB0aGlzYCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0Nv
bnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsK
LQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29s
IGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAg
IHJldHVybiByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAt
MjY4LDIzICsyNTksMjEgQEAgcHVibGljOgogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RydWN0IEpJ
VERhdGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICAgICAgQmFnPFN0cnVj
dHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAgICAgICAgQmFnPEpJVEFkZElDPiBtX2FkZElD
czsKLSAgICAgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKLSAgICAgICAgQmFnPEpJVE5lZ0lD
PiBtX25lZ0lDczsKLSAgICAgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKICAgICAgICAgQmFn
PENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgICAgICBTZW50aW5lbExpbmtlZExp
c3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9p
bmNvbWluZ0NhbGxzOwogICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBoaWNDYWxs
Tm9kZSwgUGFja2VkUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29t
aW5nUG9seW1vcnBoaWNDYWxsczsKLSAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxl
PiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJs
ZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENU
b0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXND
YWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1h
cDsKKworICAgICAgICBGaXhlZFZlY3Rvcjx2b2lkKj4gbV9qaXRDb25zdGFudFBvb2w7CisgICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwgbV9qaXRDb25zdGFudFBvb2wpOyB9CiAgICAgfTsKIAor
ICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29k
ZT4pOworCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkKQEAgLTI5
MywyMiArMjgyLDcgQEAgcHVibGljOgogICAgIH0KICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRh
U2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAotICAgIEpJVEFkZElDKiBhZGRKSVRB
ZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLSAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQ
cm9maWxlKik7Ci0gICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSop
OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+
Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2Zp
bGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlw
ZT4KLSAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkg
eyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
YW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVE5l
Z0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJ
VE5lZ0lDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3Is
IEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRTdWJJQyogYWRkTWF0aElD
KEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmls
ZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURGF0YSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RGF0YSk7IH0KIAogICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlLCBDb2RlT3JpZ2luKTsKIApAQCAtMzIyLDE4
ICsyOTYsOCBAQCBwdWJsaWM6CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAg
dG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgogICAgIENhbGxMaW5rSW5mbyog
Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICAKLSAg
ICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29kZU1hcCYmIGppdENvZGVNYXApCi0gICAgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOwotICAgIH0K
LSAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCkKLSAgICB7Ci0gICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX2ppdENvZGVNYXA7Ci0gICAgfQorICAgIGNvbnN0IEpJVENvZGVNYXAmIGpp
dENvZGVNYXAoKTsKIAotICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVf
cHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+
IGZpbmRQQyh2b2lkKiBwYyk7CiAKICAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVn
aXN0ZXJTZXQpOwpAQCAtNDcyLDYgKzQzNiw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1l
Rm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29k
ZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJP
ZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVu
dFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFt
ZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01NjksOCArNTM0LDEwIEBAIHB1Ymxp
YzoKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdp
c3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7
IH0KKyAgICBib29sIGlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soVmlydHVhbFJl
Z2lzdGVyKSBjb25zdDsKICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
biBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
IGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
aW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1
ZmZlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdp
c3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQo
KTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7
IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9m
RnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTU5
NSwyMiArNTYyLDIyIEBAIHB1YmxpYzoKICAgICAvLyBKdW1wIFRhYmxlcwogCiAjaWYgRU5BQkxF
KEpJVCkKLSAgICBTaW1wbGVKdW1wVGFibGUmIHN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCkKKyAgICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJs
ZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KTsKKyAgICB2b2lkKiBiYXNlbGluZUpJVENvbnN0YW50UG9vbCgp
CiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwotICAgICAgICByZXR1
cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1faml0RGF0YSAmJiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpOworICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbC5kYXRhKCk7
CiAgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTd2l0
Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQogCi0jaWYgRU5BQkxF
KEpJVCkKLSAgICBTdHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFi
bGVJbmRleCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7Ci0gICAg
ICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKLSAgICB9CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgU3RyaW5nSnVtcFRhYmxlJiBkZmdT
dHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJs
ZSYgZGZnU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKICNlbmRpZgorCiAgICAgc2l6
ZV90IG51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1
cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVz
KCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQogCkBAIC02MzIsMjEg
KzU5OSwyMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVk
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRo
cmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0
ZUNvdW50ZXItPmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOwogICAgIH0KIAog
ICAgIHZvaWQgZG9udEpJVEFueXRpbWVTb29uKCkKICAgICB7Ci0gICAgICAgIG1fbGxpbnRFeGVj
dXRlQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgpOworICAgICAgICBtX2xsaW50RXhlY3V0ZUNv
dW50ZXItPmRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgfQogCi0gICAgaW50MzJfdCB0aHJlc2hv
bGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOwotICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKTsK
ICAgICB2b2lkIGppdFNvb24oKTsKKyAgICB2b2lkIGppdE5leHRJbnZvY2F0aW9uKCk7CiAKICAg
ICBjb25zdCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICAg
ICAgcmV0dXJuICptX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgfQogCiAgICAgdHlwZWRlZiBI
YXNoTWFwPHN0ZDo6dHVwbGU8U3RydWN0dXJlSUQsIHVuc2lnbmVkPiwgRml4ZWRWZWN0b3I8TExJ
bnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0
Y2hwb2ludE1hcDsKQEAgLTc5Nyw2ICs3NjMsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0Rl
YnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAg
ICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVx
dWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7
IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAg
ICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQpAQCAtODM4
LDYgKzgwNSw3IEBAIHB1YmxpYzoKICAgICBtdXRhYmxlIENvbmN1cnJlbnRKU0xvY2sgbV9sb2Nr
OwogCiAgICAgYm9vbCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQg
YmVjYXVzZSB0aGUgSklUIHdhbnRzIHRvIHN0b3JlIHRvIGl0LgorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7IH0KIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgdW5zaWduZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2Fw
YWJpbGl0eUxldmVsCkBAIC04NDcsOCArODE1LDYgQEAgcHVibGljOgogICAgIGJvb2wgbV9kaWRG
YWlsRlRMQ29tcGlsYXRpb24gOiAxOwogICAgIGJvb2wgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRM
IDogMTsKIAotICAgIGJvb2wgbV9oYXNMaW5rZWRPU1JFeGl0IDogMTsKLSAgICBib29sIG1faXNF
bGlnaWJsZUZvckxMSW50RG93bmdyYWRlIDogMTsKICAgICBib29sIG1fdmlzaXRDaGlsZHJlblNr
aXBwZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAKICAgICAvLyBJbnRlcm5hbCBtZXRob2RzIGZv
ciB1c2UgYnkgdmFsaWRhdGlvbiBjb2RlLiBJdCB3b3VsZCBiZSBwcml2YXRlIGlmIGl0IHdhc24n
dApAQCAtOTA3LDE2ICs4NzMsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywg
bV9tZXRhZGF0YSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JG
dXp6aW5nRWFybHlSZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUg
cmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAg
cmV0dXJuICFtX3VubGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAg
Ym9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bigpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMo
KTsKICNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJVElubGluZUNh
Y2hlcygpOworICAgIHZvaWQgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogI2lm
IEVOQUJMRShERkdfSklUKQogICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwpAQCAt
MTAxMCw3ICs5NzIsOSBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9s
bGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7
CiAjaWYgRU5BQkxFKEpJVCkKK3B1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SklURGF0YT4g
bV9qaXREYXRhOworcHJpdmF0ZToKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8v
IFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRo
ZSBwcm9maWxlZCBjb2RlIGJsb2NrCkBAIC0xMDI5LDcgKzk5Myw3IEBAIHByaXZhdGU6CiAKICAg
ICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOwogICAgIAotICAgIEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAgQmFzZWxpbmVF
eGVjdXRpb25Db3VudGVyKiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgeyBudWxscHRyIH07CiAKICAg
ICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9qaXRFeGVjdXRlQ291bnRlcjsKICAgICB1aW50
MzJfdCBtX29zckV4aXRDb3VudGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw4ICsyNSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJhc2Vs
aW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJVbmxpbmtlZE1l
dGFkYXRhVGFibGVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDAsOSArNDIsNyBA
QCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgaWYgKG1fbWV0
YWRhdGEpIHsKICNkZWZpbmUgVklTSVQoX19vcCkgXAogICAgICAgICBtX21ldGFkYXRhLT5mb3JF
YWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgZnVuYyhtZXRhZGF0YS5tX3Byb2ZpbGUs
IGZhbHNlKTsgfSk7Ci0KICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVkFMVUVfUFJPRklM
RShWSVNJVCkKLQogI3VuZGVmIFZJU0lUCiAKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxP
cEl0ZXJhdG9yT3Blbj4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyAKQEAgLTU3LDcgKzU3LDYgQEAg
dm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVu
YyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAg
Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KQEAgLTk5LDQgKzk4LDM4IEBAIHZv
aWQgQ29kZUJsb2NrOjpmb3JFYWNoTExJbnRDYWxsTGlua0luZm8KICAgICB9CiB9CiAKKyNpZiBF
TkFCTEUoSklUKQorQUxXQVlTX0lOTElORSBjb25zdCBKSVRDb2RlTWFwJiBDb2RlQmxvY2s6Ompp
dENvZGVNYXAoKQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUu
Z2V0KCkpLT5tX2ppdENvZGVNYXA7Cit9CisKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxl
JiBDb2RlQmxvY2s6OmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorewor
ICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRj
aEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisKK0FMV0FZU19JTkxJTkUgU3RyaW5nSnVtcFRh
YmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUlu
ZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkp
LT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisjZW5kaWYKKworI2lm
IEVOQUJMRShERkdfSklUKQorQUxXQVlTX0lOTElORSBTaW1wbGVKdW1wVGFibGUmIENvZGVCbG9j
azo6ZGZnU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRU
eXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpK
SVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpkZmdTdHJp
bmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUo
KSA9PSBKSVRUeXBlOjpERkdKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxERkc6OkpJVENv
ZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcw
LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFw
KENvZGVCbG9jayogY29kZUJsb2NrKTsKICAgICAKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZSogd3JhcEFuZEFjdGl2YXRlKENvZGVCbG9jayogY29kZUJsb2NrKTsKKworICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSwgbV9jb2RlQmxvY2spOyB9CiAgICAgCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhlY3V0aW9uQ291bnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCBi
b29sIEV4ZWN1dGlvbkNvdW50ZXI8Y291bnRpbmdWYXJpYW50Pjo6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2Nr
ID8gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSA6IG51bGxwdHIsIHRocmVzaG9sZCk7CisgICAg
dGhyZXNob2xkID0gY2xpcHBlZFRocmVzaG9sZCh0aHJlc2hvbGQpOwogICAgIAogICAgIG1fY291
bnRlciA9IHN0YXRpY19jYXN0PGludDMyX3Q+KC10aHJlc2hvbGQpOwogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIu
aAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGlvbkNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBmb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7IC8vIElmIHlvdSB1c2UgdGhp
cywgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoKSBtYXkgc3RpbGwgcmV0dXJuIGZhbHNl
LgogICAgIGJvb2wgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoQ29kZUJsb2NrKik7CiAg
ICAgYm9vbCBoYXNDcm9zc2VkVGhyZXNob2xkKCkgY29uc3QgeyByZXR1cm4gbV9jb3VudGVyID49
IDA7IH0KLSAgICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJs
b2NrKik7CisgICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVC
bG9jayogPSBudWxscHRyKTsKICAgICB2b2lkIGRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgZG91
YmxlIGNvdW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291
bnQpICsgbV9jb3VudGVyOyB9CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkBA
IC04NiwxMyArODYsOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci0gICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBUIHRocmVzaG9sZCkKKyAgICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKFQg
dGhyZXNob2xkKQogICAgIHsKLSAgICAgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQ7Ci0gICAgICAg
IGlmIChPcHRpb25zOjpyYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMo
KSAmJiBnbG9iYWxPYmplY3QpCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBnbG9iYWxPYmpl
Y3QtPndlYWtSYW5kb21JbnRlZ2VyKCkgJSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNo
ZWNrcG9pbnRzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1heFRocmVzaG9sZCA9IG1h
eGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKTsKKyAgICAgICAgaW50MzJf
dCBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
KCk7CiAgICAgICAgIGlmICh0aHJlc2hvbGQgPiBtYXhUaHJlc2hvbGQpCiAgICAgICAgICAgICB0
aHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7CiAgICAgICAgIHJldHVybiB0aHJlc2hvbGQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5o
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZE1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgc3RydWN0IEdl
dEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB7CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9k
ZU1ldGFkYXRhVW5zZXQpID09IDEyKTsKIAogc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJh
eUxlbmd0aCB7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFy
cmF5UHJvZmlsZSk7IH0KICAgICBBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlOwogfTsKIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCkgPT0gMTIpOwpA
QCAtODgsNiArODksNyBAQCB1bmlvbiBHZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAgR2V0
QnlJZE1vZGUgbW9kZTsKICAgICAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsg
Ly8gVGhpcyBtdXN0IGJlIHplcm8gd2hlbiB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhLCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0YWRh
dGFEZWZhdWx0IGRlZmF1bHRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNl
dE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9k
ZTsKQEAgLTExNyw2ICsxMTksNyBAQCBzdHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAg
ICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFQcm90b0xvYWQgcHJvdG9Mb2FkTW9kZTsKICAgICB9Owog
ICAgIEdldEJ5SWRNb2RlIG1vZGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0K
ICAgICB1aW50OF90IGhpdENvdW50Rm9yTExJbnRDYWNoaW5nOwogfTsKICNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0
dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgR2V0QnlTdGF0dXMgR2V0
QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoTm9J
bmZvcm1hdGlvbik7CiAgICAgICAgIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjog
ewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1
YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7CiAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5
KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSwgc3R1YkluZm8pOwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIg
PSBzdHViSW5mby0+aWRlbnRpZmllcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRl
ckFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogCiAgICAgLy8gTGV0J3Mgc3RvcmUg
dGhlIHJldXNlZCByZWdpc3RlcnMgdG8gdGhlIHN0YWNrLiBBZnRlciB0aGF0LCB3ZSBjYW4gdXNl
IGFsbG9jYXRlZCBzY3JhdGNoIHJlZ2lzdGVycy4KICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KLSAgICBhbGxvY2F0b3IucHJlc2Vy
dmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6
OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CisgICAgICAgIGFsbG9jYXRvci5wcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKIAogICAgIGlmIChHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKICAgICAgICAgZGF0YUxvZygiYmFzZUdQ
UiA9ICIsIGJhc2VHUFIsICJcbiIpOwpAQCAtMjI1LDEyICsyMjUsOSBAQCB2b2lkIEdldHRlclNl
dHRlckFjY2Vzc0Nhc2U6OmVtaXRET01KSVRHCiAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JD
Q2FsbC5zZXQocmVnKTsKICAgICBmb3IgKEZQUlJlZyByZWcgOiBmcFNjcmF0Y2gpCiAgICAgICAg
IHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnKTsKKyAgICBpZiAoaml0LmNvZGVCbG9j
aygpLT51c2VEYXRhSUMoKSkKKyAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChz
dHViSW5mby5tX3N0dWJJbmZvR1BSKTsKICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuZXhj
bHVkZShSZWdpc3RlclNldDo6cmVnaXN0ZXJzVG9Ob3RTYXZlRm9yQ0NhbGwoKSk7Ci0jaWYgQ1BV
KEFSTTY0KQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOwotICAg
IGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9y
Q0NhbGwuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0jZW5kaWYKIAogICAgIEFjY2Vzc0Nhc2VT
bmlwcGV0UGFyYW1zIHBhcmFtcyhzdGF0ZS5tX3ZtLCBXVEZNb3ZlKHJlZ3MpLCBXVEZNb3ZlKGdw
U2NyYXRjaCksIFdURk1vdmUoZnBTY3JhdGNoKSk7CiAgICAgc25pcHBldC0+Z2VuZXJhdG9yKCkt
PnJ1bihqaXQsIHBhcmFtcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5CeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luQnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsx
MzksNyBAQCBJbkJ5U3RhdHVzIEluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mCiAgICAgICAg
IHJldHVybiBJbkJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6
OkluQnlJZFNlbGY6IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKTsKICAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkK
ICAgICAgICAgICAgIHJldHVybiBJbkJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5j
cHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTEgKzE3NiwxNiBAQCBBTFdB
WVNfSU5MSU5FIHN0YXRpYyBib29sIGxpbmtDb2RlSW5saW5lCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNz
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
IGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIFRoZXNlIGR5bmFtaWMg
c2xvdHMgZ2V0IGZpbGxlZCBpbiBieSBTdHJ1Y3R1cmVTdHViSW5mby4gTm90aGluZyBlbHNlIHRv
IGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnMgaml0
OwogICAgIAogICAgIEdQUlJlZyBiYXNlID0gc3R1YkluZm8uYmFzZUdQUjsKQEAgLTIzMywyMyAr
MjM4LDMxIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaGFzRnJlZVJlZ2lzdGUKICAgICBy
ZXR1cm4gZ2V0U2NyYXRjaFJlZ2lzdGVyKHN0dWJJbmZvKSAhPSBJbnZhbGlkR1BSUmVnOwogfQog
Ci1ib29sIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxp
bmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwogfQog
Ci1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoIXN0dWJJ
bmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
QVNTRVJUKGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2Zmc2V0KSk7
CisgICAgQVNTRVJUKGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0
dWJJbmZvLCBvZmZzZXQpKTsKKworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7Cisg
ICAgICAgIC8vIFRoZXNlIGR5bmFtaWMgc2xvdHMgZ2V0IGZpbGxlZCBpbiBieSBTdHJ1Y3R1cmVT
dHViSW5mby4gTm90aGluZyBlbHNlIHRvIGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CiAKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCkBAIC0yNzksMjIgKzI5MiwyNSBAQCBib29sIElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJ
bmxpbmU7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFj
Y2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKIHsKICAgICBBU1NFUlQoYXJy
YXktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0Nv
bnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKICAgICBpZiAoIWhhc0ZyZWVSZWdpc3RlcihzdHViSW5mbykpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhaGFzQW55QXJyYXlTdG9yYWdlKGFycmF5LT5pbmRl
eGluZ1R5cGUoKSkgJiYgYXJyYXktPmluZGV4aW5nVHlwZSgpICE9IEFycmF5Q2xhc3M7CiB9CiAK
LWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVB
cnJheUxlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBBU1NFUlQoaXNDYWNoZWFibGVBcnJheUxlbmd0
aChzdHViSW5mbywgYXJyYXkpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNo
ZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcnJheSkpOwogCiAgICAgaWYg
KCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTMxOSwxNyArMzM1LDIwIEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVu
Z3RoKFMKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nl
c3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K2Jvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAgIGlmICghc3R1Yklu
Zm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBp
ZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiBoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwog
fQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3Ro
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0g
ICAgQVNTRVJUKGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKSk7CisgICAgQVNTRVJU
X1VOVVNFRChjb2RlQmxvY2ssIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1
YkluZm8pKTsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNjMsMTMgKzM4MiwxOCBAQCBib29sIElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoCiB9CiAKIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU2VsZkluQWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3Rz
IGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5m
by5iYXNlR1BSOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7
CiAKQEAgLTQwNiwxMyArNDMwLDEzIEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNK
dW1wSW5BY2MKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewogICAgICAgICAvLyBJ
ZiBpdCBpcyBub3QgR2V0QnlJZC1saWtlLXRoaW5nLCB3ZSBkbyBub3QgZW1pdCBub3Agc2xlZCAo
ZS5nLiBHZXRCeVZhbCkuCiAgICAgICAgIC8vIFRoZSBjb2RlIGlzIGFscmVhZHkgYW4gaW5kaXJl
Y3QganVtcCwgYW5kIG9ubHkgdGhpbmcgd2Ugc2hvdWxkIGRvIGlzIHJlcGxhY2luZyBtX2NvZGVQ
dHIuCi0gICAgICAgIGlmIChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKKyAgICAg
ICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHN0
dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikgewogICAgICAgICAgICAgLy8gSWYgbV9jb2Rl
UHRyIGlzIHBvaW50aW5nIHRvIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbiwgdGhpcyBt
ZWFucyB0aGF0IElubGluZUFjY2VzcyBjb2RlIGlzIG5vdCBhIHN0dWIgb25lLgogICAgICAgICAg
ICAgLy8gV2UgcmV3cml0ZSB0aGlzIHdpdGggdGhlIHN0dWItYmFzZWQgZGlzcGF0Y2hpbmcgY29k
ZSBvbmNlLCBhbmQgY29udGludWUgdXNpbmcgaXQgdW50aWwgd2UgcmVzZXQgdGhlIGNvZGUuCiAg
ICAgICAgICAgICBpZiAoc3R1YkluZm8ubV9jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0g
c3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpIHsKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5mby5zdGFy
dC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhl
bHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgICAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmc3R1YkluZm8pLCBzdHViSW5mby5t
X3N0dWJJbmZvR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5l
UHRyVGFnKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKICAg
ICAgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBzdHViSW5mby5kb25lTG9jYXRp
b247CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0oTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewpAQCAtNDIxLDcgKzQ0NSw5IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2MKICAgICAgICAgICAgICAgICB9KSwgIklubGluZUFjY2VzczogbGlu
a2luZyBzdHViIGNhbGwiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHN0
dWJJbmZvLm1fY29kZVB0ciA9IHRhcmdldDsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUu
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCw4ICs0NjAsMTQgQEAgdm9pZCBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgIH0pLCAiSW5saW5lQWNjZXNzOiBs
aW5raW5nIGNvbnN0YW50IGp1bXAiKTsKIH0KIAotdm9pZCBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1
YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K3ZvaWQgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogeworICAgIGlmIChjb2RlQmxv
Y2stPnVzZURhdGFJQygpICYmIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSB7CisgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHN0dWJJbmZvLnNsb3dQYXRo
U3RhcnRMb2NhdGlvbjsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5m
by5zdGFydC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChD
Q2FsbEhlbHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgIC8vIFdlIGRv
bid0IG5lZWQgYSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1waW5n
IGludG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4KICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNz
LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTksMTQgKzk5LDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KHNpemUsIHNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhTdHJ1
Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMg
Ym9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBQ
cm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwotICAg
IHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBK
U0FycmF5Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0
dXJlU3R1YkluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0cnVj
dHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZklu
QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIGJvb2wg
Z2VuZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgYm9v
bCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBjYW5HZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBQ
cm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlP
ZmZzZXQpOworICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2Nr
KiwgU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgaXNDYWNo
ZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBz
dGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNjZXNzKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIGJv
b2wgZ2VuZXJhdGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsK
IAogICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5l
QWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1w
SW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRh
ZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0Vf
T1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7
CiAgICAgdWludDhfdCBzZWVuTW9kZXMgeyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZlNlZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0
YWRhdGEsIHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUo
c2Vlbk1vZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRD
YWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJ
bnRDYWxsTGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQogCiBwcml2YXRlOgogICAgIHVpbnRw
dHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0IH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMTcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBi
aXRXaWR0aEZvck1heAogICAgIG1hY3JvKE9wSXRlcmF0b3JPcGVuKSBcCiAgICAgbWFjcm8oT3BJ
dGVyYXRvck5leHQpIFwKIAorI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllfQVJJ
VEhfUFJPRklMRShtYWNybykgXAorICAgIG1hY3JvKE9wQWRkKSBcCisgICAgbWFjcm8oT3BNdWwp
IFwKKyAgICBtYWNybyhPcERpdikgXAorICAgIG1hY3JvKE9wU3ViKSBcCisKKyNkZWZpbmUgRk9S
X0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAorICAgIG1hY3Jv
KE9wSW5jKSBcCisgICAgbWFjcm8oT3BEZWMpIFwKKyAgICBtYWNybyhPcE5lZ2F0ZSkgXAorCiAK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidHlwZS1saW1pdHMiKQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQoKQogewogICAgIHJlc3RvcmVTY3JhdGNoKCk7CiAg
ICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQotICAgICAgICBqaXQtPnJldCgp
OworICAgICAgICBqaXQtPmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLT5t
X3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZEb25lTG9jYXRpb24oKSks
IEpTSW50ZXJuYWxQdHJUYWcpOwogICAgIGVsc2UKICAgICAgICAgc3VjY2Vzcy5hcHBlbmQoaml0
LT5qdW1wKCkpOwogfQpAQCAtMTEwLDYgKzExMCw4IEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGUKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKIAogICAgICAgICBt
X2xpdmVSZWdpc3RlcnNGb3JDYWxsID0gUmVnaXN0ZXJTZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSwgYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJz
KCkpOworICAgICAgICBpZiAoaml0LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAg
ICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7
CiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhjbHVkZShjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOwogICAgIH0KICAgICByZXR1cm4gbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbDsKQEAgLTEy
OCwxMSArMTMwLDEyIEBAIGF1dG8gQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmUK
ICAgICB9OwogfQogCi1hdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2VydmVMaXZlUmVn
aXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucyhjb25zdCBSZWdpc3RlclNldCYg
ZXh0cmEpIC0+IFNwaWxsU3RhdGUKK2F1dG8gQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2
ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCkgLT4gU3BpbGxT
dGF0ZQogewogICAgIFJlZ2lzdGVyU2V0IGxpdmVSZWdpc3RlcnMgPSBhbGxvY2F0b3ItPnVzZWRS
ZWdpc3RlcnMoKTsKKyAgICBpZiAoaml0LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAg
ICAgIGxpdmVSZWdpc3RlcnMuYWRkKHN0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKICAgICBsaXZl
UmVnaXN0ZXJzLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICBsaXZlUmVnaXN0
ZXJzLm1lcmdlKGV4dHJhKTsKIAogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBleHRyYVN0YWNrUGFk
ZGluZyA9IDA7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVy
UHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsKCpqaXQsIGxpdmVSZWdpc3RlcnMsIGV4dHJhU3RhY2tQYWRkaW5nKTsK
QEAgLTU5NiwxNiArNTk5LDExIEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNB
Y2Nlc3MKICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CiAgICAgc3RhdGUuaml0ID0g
JmppdDsKIAotICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7Ci0gICAgICAgIGlmIChz
dGF0ZS5tX2RvZXNKU0dldHRlclNldHRlckNhbGxzKSB7Ci0gICAgICAgICAgICAvLyBXZSBoYXZl
IG5vIGd1YXJhbnRlZSB0aGF0IHN0YWNrLXBvaW50ZXIgaXMgdGhlIGV4cGVjdGVkIG9uZS4gVGhp
cyBpcyBub3QgYSBwcm9ibGVtIGlmIHdlIGRvIG5vdCBoYXZlIEpTIGdldHRlciAvIHNldHRlciBj
YWxscyBzaW5jZSBzdGFjay1wb2ludGVyIGlzCi0gICAgICAgICAgICAvLyBhIGNhbGxlZS1zYXZl
IHJlZ2lzdGVyIGluIHRoZSBDIGNhbGxpbmcgY29udmVuc2lvbi4gSG93ZXZlciwgb3VyIEpTIGV4
ZWN1dGFibGUgY2FsbCBkb2VzIG5vdCBzYXZlIHN0YWNrLXBvaW50ZXIuIFNvIHdlIGFyZSBhZGp1
c3Rpbmcgc3RhY2stcG9pbnRlciBhZnRlcgotICAgICAgICAgICAgLy8gSlMgZ2V0dGVyIC8gc2V0
dGVyIGNhbGxzLiBCdXQgdGhpcyBjb3VsZCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5pdGlhbCBz
dGFjay1wb2ludGVyLCBhbmQgbWFrZXMgUEFDIHRhZ2dpbmcgYnJva2VuLgotICAgICAgICAgICAg
Ly8gVG8gZW5zdXJlIFBBQy10YWdnaW5nIHdvcmssIHdlIGZpcnN0IGFkanVzdCBzdGFjay1wb2lu
dGVyIHRvIHRoZSBhcHByb3ByaWF0ZSBvbmUuCi0gICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OworICAgIGlmICghY2FuQmVTaGFyZWQgJiYgQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRl
ck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBqaXQuc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICBhdXRvIG9rID0gaml0LmJyYW5jaFB0
cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBqaXQuc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAg
ICAgICBvay5saW5rKCZqaXQpOwogICAgIH0KIAogICAgIHN0YXRlLnByZXNlcnZlZFJldXNlZFJl
Z2lzdGVyU3RhdGUgPQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTEsNyArMjUxLDcgQEAgc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7CiAgICAgY29u
c3QgUmVnaXN0ZXJTZXQmIGNhbGN1bGF0ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9u
SGFuZGxpbmcoKTsKIAogICAgIFNwaWxsU3RhdGUgcHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFj
a0ZvckNhbGwoY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhID0geyB9KTsKLSAgICBTcGlsbFN0YXRl
IHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29u
c3QgUmVnaXN0ZXJTZXQmIGV4dHJhID0geyB9KTsKKyAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2
ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoKTsKIAogICAgIHZvaWQg
cmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsV2l0aFRocm93bkV4Y2VwdGlvbihj
b25zdCBTcGlsbFN0YXRlJik7CiAgICAgdm9pZCByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFj
a0ZvckNhbGwoY29uc3QgU3BpbGxTdGF0ZSYsIGNvbnN0IFJlZ2lzdGVyU2V0JiBkb250UmVzdG9y
ZSA9IHsgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0
dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eVN0YXR1cy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCwxMCArMTgwLDEw
IEBAIFB1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKICAg
ICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHVpZCk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0g
ICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkodWlkKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShwcm9maWxlZEJsb2NrLT52bSgpKTsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsK
ICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQ
dXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3R1YkluZm8tPm1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVy
biBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3RydWN0dXJlLCBv
ZmZzZXQpOwogICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSwgKnN0dWJJbmZvKTsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKIAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJQb2x5
bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKIApAQCAtNjUsOSArNjYsOSBA
QCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYoCiAgICAgQVNTRVJUKGhh
c0NvbnN0YW50SWRlbnRpZmllcik7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBl
OjpHZXRCeUlkU2VsZik7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndy
aXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0Owor
ICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojppbml0QXJyYXlMZW5ndGgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyKQpA
QCAtODcsOSArODgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJlcGxh
CiAgICAgQVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENh
Y2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2UpOwogICAgIG1faWRlbnRp
ZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsK
ICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1
LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsK
IH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEluQnlJZFNlbGYoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
KiBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTk3LDkgKzk4LDkgQEAgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6aW5pdEluQnlJZFNlbGYoYwogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBD
YWNoZVR5cGU6OlVuc2V0KTsKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6Oklu
QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBi
eUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVy
ZWYoKQpAQCAtMjM2LDcgKzIzNyw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJl
U3R1YkluZm8KICAgICAgICAgLy8gd2UncmUgYnVmZmVyZWQgaXMgYmVjYXVzZSB3ZSByZWx5IG9u
IGl0IHRvIHJlc2V0IGR1cmluZyBHQyBpZiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUKICAg
ICAgICAgLy8gaXMgY29sbGVjdGVkLgogICAgICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwot
ICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdl
IGdlbmVyYXRlZCBzb21lIGNvZGUgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGF0dGVtcHQgdG8gcmVw
YXRjaCBpbiB0aGUgZnV0dXJlIHVudGlsIHdlCiAgICAgICAgIC8vIGdhdGhlciBlbm91Z2ggY2Fz
ZXMuCkBAIC0yNTEsNyArMjUyLDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29u
c3QgQ29uYwogewogICAgIGNsZWFyQnVmZmVyZWRTdHJ1Y3R1cmVzKCk7CiAgICAgbV9pZGVudGlm
aWVyID0gbnVsbHB0cjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsK
KyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOwogCiAgICAgaWYgKG1fY2FjaGVU
eXBlID09IENhY2hlVHlwZTo6VW5zZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTI4NSw2ICsyODYs
NyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgICAgIHJl
c2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OlB1dFByaXZhdGVOYW1lOgogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1
dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6Oklu
QnlJZDoKQEAgLTM2MCw4ICszNjIsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdl
YWtSZWZlcmVuCiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKLSAgICBpZiAobV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQotICAgICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNN
YXJrZWQobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICBpZiAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSkKKyAgICAgICAg
aXNWYWxpZCAmPSB2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZSk7CiAgICAgaWYgKG1fY2FjaGVU
eXBlID09IENhY2hlVHlwZTo6U3R1YikKICAgICAgICAgaXNWYWxpZCAmPSB1LnN0dWItPnZpc2l0
V2Vhayh2bSk7CiAKQEAgLTM3NSw4ICszNzcsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2
aXNpdFdlYWtSZWZlcmVuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKLSAg
ICBpZiAobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQotICAgICAgICBtX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIGlmIChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodmlzaXRvci52bSgpKSkKKyAg
ICAgICAgc3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIAogICAgIGlmIChtX2NhY2hl
VHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNp
dGlvbnModmlzaXRvcik7CkBAIC00MzAsNiArNDMyLDIwOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9
CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtl
ZFN0dWJJbmZvKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgYWNjZXNzVHlwZSA9IHVubGlu
a2VkU3R1YkluZm8uYWNjZXNzVHlwZTsKKyAgICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8uc3Rh
cnQ7CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5kb25lTG9jYXRpb247Cisg
ICAgc2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5zbG93UGF0aFN0YXJ0
TG9jYXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKTsKKyAgICBjb2RlT3Jp
Z2luID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIG1f
Y29kZVB0ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKworICAgIHVzZWRSZWdpc3RlcnMgPSBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgaWYgKGFjY2Vzc1R5
cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZvciBpdGVyYXRvcl9uZXh0LCB3ZSBjYW4n
dCBjbG9iYmVyIHRoZSAiZG9udENsb2JiZXJSZWdpc3RlciIgcmVnaXN0ZXIgZWl0aGVyLgorICAg
ICAgICB1c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9i
YmVyUmVnaXN0ZXIpOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNh
c2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0
QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGlt
aXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1l
OiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJh
bmQ6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1l
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoK
KyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5l
Y21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Cisg
ICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAg
ICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZp
bmU6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5l
UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8u
cHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAg
IGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8u
ZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gdW5saW5rZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRLaW5k
LmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXpl
IDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxl
dGVCeUlEOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBi
YXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnBy
b3BlcnR5R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURl
bEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
RGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBm
YWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFs
dWU7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgICAgIHJlZ3MucHJvdG90eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjpwcm90bzsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRp
ZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5C
eUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdz
LnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5
SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpU
cnlHZXRCeUlkOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRy
dWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhU
aGlzUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9H
UFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJl
ZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgICAg
ICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgICAgICBpZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCkKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvZmlsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpT
ZXRQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVlR1BS
ID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRl
QnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICB9Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTSh1bmxpbmtlZFN0dWJJbmZvKTsKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OmNoZWNrQ29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSklUU3R1YlJv
dXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wdGlvbnMu
aCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKQEAgLTU2LDYgKzU3
LDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRCeVZhbCwKICAg
ICBQdXRCeUlkLAogICAgIFB1dEJ5VmFsLAorICAgIFB1dFByaXZhdGVOYW1lLAogICAgIEluQnlJ
ZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtNzgsNiArODAsOCBAQCBl
bnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CiAgICAgU3RyaW5nTGVuZ3RoCiB9OwogCitz
dHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKKwogY2xhc3MgU3RydWN0dXJlU3R1Yklu
Zm8gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZvKTsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTk4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKKyAgICB2b2lkIGluaXRpYWxp
emVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvJik7CisKICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8v
IENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYg
aXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLApAQCAtMzI1LDEzICszMzEsMTkgQEAgcHJp
dmF0ZToKIAogcHVibGljOgogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKKyAgICBQcm9wZXJ0
eU9mZnNldCBieUlkU2VsZk9mZnNldDsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQnlJ
ZFNlbGZPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8s
IGJ5SWRTZWxmT2Zmc2V0KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0
dWJJbmZvLCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOyB9CiAgICAgdW5pb24gewotICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgICAg
ICB9IGJ5SWRTZWxmOwogICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsKICAgICB9IHU7
Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
OworICAgIFN0cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShWTSYgdm0pCisgICAg
eworICAgICAgICBpZiAoIW1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gdm0uZ2V0U3RydWN0dXJlKG1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgfQorICAgIFN0cnVjdHVyZUlEIG1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSB7IDAgfTsKIHByaXZhdGU6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
ciBtX2lkZW50aWZpZXI7CiAgICAgLy8gUmVwcmVzZW50cyB0aG9zZSBzdHJ1Y3R1cmVzIHRoYXQg
YWxyZWFkeSBoYXZlIGJ1ZmZlcmVkIEFjY2Vzc0Nhc2VzIGluIHRoZSBQb2x5bW9ycGhpY0FjY2Vz
cy4KQEAgLTM1Miw2ICszNjQsNyBAQCBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBtX2NvZGVQdHI7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQ29kZVB0cigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHVi
SW5mbywgbV9jb2RlUHRyKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEb25lTG9j
YXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIGRvbmVM
b2NhdGlvbik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2xvd1BhdGhTdGFydExv
Y2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBzbG93
UGF0aFN0YXJ0TG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1f
c2xvd09wZXJhdGlvbik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ291bnRkb3du
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBjb3VudGRvd24p
OyB9CkBAIC00NDcsNiArNDYwLDE3IEBAIGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dl
dEJ5SWRGdW4KICAgICB9CiB9CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsK
KyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFBy
aXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtp
bmQ6Om5vbmUoKSB9OworICAgIEVDTUFNb2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgp
IH07CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0
YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNhY2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9m
IHBhdGNoYWJsZSBqdW1wIGZvciAnaW5zdGFuY2VvZicgY2FjaGVzLgorICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xvd1BhdGhTdGFydExvY2F0aW9uOworfTsKKwog
I2Vsc2UKIAogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBwcmludFN1cGVyU2FtcGxlclN0YXRlKCkK
ICAgICBkb3VibGUgcGVyY2VudGFnZSA9IDEwMC4wICogaW4gLyAoaW4gKyBvdXQpOwogICAgIGlm
IChwZXJjZW50YWdlICE9IHBlcmNlbnRhZ2UpCiAgICAgICAgIHBlcmNlbnRhZ2UgPSAwLjA7Ci0g
ICAgZGF0YUxvZygiUGVyY2VudCB0aW1lIGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBl
cmNlbnRhZ2UsICJcbiIpOworICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIg
c2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiJVxuIik7CiB9CiAKIHZvaWQgZW5hYmxlU3Vw
ZXJTYW1wbGVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKIAor
I2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNsYXNz
SW5mby5oIgpAQCAtNzgsNiArNzksOCBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2Rl
QmxvY2soVk0mCiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkobG9ja2VyKTsKICAg
ICAgICAgbV9yYXJlRGF0YS0+bV9wcml2YXRlQnJhbmRSZXF1aXJlbWVudCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcml2YXRlQnJhbmRSZXF1aXJlbWVudDo6TmVlZGVkKTsKICAgICB9CisKKyAg
ICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChP
cHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CkBAIC0zMTYsNiArMzE5LDQ4IEBAIGludCBVbmxpbmtlZENvZGVCbG9j
azo6b3V0T2ZMaW5lSnVtcE9mZnMKICAgICByZXR1cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5n
ZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKK2Jvb2wgVW5saW5r
ZWRDb2RlQmxvY2s6Omhhc0lkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAg
ICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpID4gMTAwKSB7CisgICAgICAgIGlmIChudW1iZXJP
ZklkZW50aWZpZXJzKCkgIT0gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5zaXplKCkpIHsKKyAgICAg
ICAgICAgIExvY2tlciBsb2NrZXIobV9jYWNoZWRJZGVudGlmaWVyVWlkc0xvY2spOworICAgICAg
ICAgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IGNhY2hlZElkZW50aWZpZXJVaWRzOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciA9
IHRoaXMtPmlkZW50aWZpZXIoaSk7CisgICAgICAgICAgICAgICAgY2FjaGVkSWRlbnRpZmllclVp
ZHMuYWRkKGlkZW50aWZpZXIuaW1wbCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgIG1fY2FjaGVkSWRlbnRpZmllclVp
ZHMgPSBXVEZNb3ZlKGNhY2hlZElkZW50aWZpZXJVaWRzKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBtX2NhY2hlZElkZW50aWZpZXJVaWRzLmNvbnRhaW5zKHVpZCk7CisgICAgfQorCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7
CisgICAgICAgIGlmIChpZGVudGlmaWVyKGkpLmltcGwoKSA9PSB1aWQpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK2ludDMy
X3QgVW5saW5rZWRDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkK
K3sKKyAgICBzd2l0Y2ggKGRpZE9wdGltaXplKCkpIHsKKyAgICBjYXNlIFRyaVN0YXRlOjpJbmRl
dGVybWluYXRlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkOworICAgIGNhc2UgVHJpU3RhdGU6
OkZhbHNlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkICogNDsKKyAgICBjYXNlIFRyaVN0YXRl
OjpUcnVlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8gMjsKKyAgICB9CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRocmVzaG9sZDsKK30KKworCiB2b2lkIFVubGlu
a2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCghbV9tZXRhZGF0YS0+aXNGaW5hbGl6ZWQoKSk7CkBAIC0zMzcsMTUgKzM4MiwyNSBAQCB2
b2lkIFVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByCiAgICAgaWYgKG1fbWV0YWRh
dGEtPmhhc01ldGFkYXRhKCkpIHsKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheVByb2Zp
bGVzID0gMDsKIAotI2RlZmluZSBDT1VOVChfX29wKSBcCi0gICAgICAgIG51bWJlck9mQXJyYXlQ
cm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CisjZGVmaW5lIENPVU5U
KF9fb3ApIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9f
b3A+KCk7CiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ09VTlQp
CiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENPVU5U
KQogI3VuZGVmIENPVU5UCiAgICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFk
YXRhLT5udW1FbnRyaWVzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgICAgICBudW1iZXJPZkFycmF5
UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEdldEJ5SWQ+KCk7Ci0KICAgICAg
ICAgbV9hcnJheVByb2ZpbGVzID0gRml4ZWRWZWN0b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+KG51
bWJlck9mQXJyYXlQcm9maWxlcyk7CisKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCaW5hcnlB
cml0aFByb2ZpbGVzID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZCaW5hcnlBcml0
aFByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgRk9S
X0VBQ0hfT1BDT0RFX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoQ09VTlQpCisjdW5kZWYgQ09V
TlQKKyAgICAgICAgbV9iaW5hcnlBcml0aFByb2ZpbGVzID0gRml4ZWRWZWN0b3I8QmluYXJ5QXJp
dGhQcm9maWxlPihudW1iZXJPZkJpbmFyeUFyaXRoUHJvZmlsZXMpOworCisgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkg
bnVtYmVyT2ZVbmFyeUFyaXRoUHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29w
PigpOworICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKENP
VU5UKQorI3VuZGVmIENPVU5UCisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzID0gRml4ZWRW
ZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+KG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
MTAgKzI1LDEyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgi
CiAjaW5jbHVkZSAiQXJyYXlQcm9maWxlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9u
cy5oIgogI2luY2x1ZGUgIkNvZGVUeXBlLmgiCiAjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIK
KyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdl
SW5mby5oIgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5o
IgpAQCAtNjQsNiArNjYsNyBAQCBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKIGNsYXNzIFVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsK
IGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworY2xhc3MgQmFzZWxpbmVKSVRDb2Rl
Owogc3RydWN0IEV4ZWN1dGFibGVJbmZvOwogZW51bSBjbGFzcyBMaW5rVGltZUNvbnN0YW50IDog
aW50MzJfdDsKIApAQCAtMTc1LDYgKzE3OCw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZpeGVk
VmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1
cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3du
PiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBy
ZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5n
ZXQoKTsgfQogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4m
IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKQEAgLTIwNyw2ICsyMTEsMTUgQEAgcHVibGlj
OgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1vZGUpOyB9CiAKICAgICBjb25z
dCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3Q7CisgICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uQXQoQnl0ZWNvZGVJbmRleCBpbmRleCkgY29uc3QgeyByZXR1
cm4gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5kZXgpLnB0cigpOyB9CisgICAgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAg
Y29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5hdCgwKS5wdHIo
KTsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zRW5kID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbnN0cnVj
dGlvbnNCZWdpbikgKyBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChpbnN0cnVjdGlvbiA+PSBpbnN0cnVjdGlvbnNCZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGlu
c3RydWN0aW9uc0VuZCk7CisgICAgICAgIHJldHVybiBpbnN0cnVjdGlvbiAtIGluc3RydWN0aW9u
c0JlZ2luOworICAgIH0KKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbnNTaXplKCkgY29uc3QgeyBy
ZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1DYWxsZWVM
b2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogICAgIHVuc2lnbmVk
IG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KQEAgLTMzNCwxMCArMzQ3LDIx
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWV0YWRhdGEtPnNpemVJbkJ5dGVzKCk7CiAg
ICAgfQogCisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bigpCisgICAgeworICAgICAgICAvLyBTb21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdh
eXMgY29tcGxldGUgdGhlIGxvb3BzIHRoZXkgcnVuLgorICAgICAgICByZXR1cm4gIWlzQnVpbHRp
bkZ1bmN0aW9uKCk7CisgICAgfQogICAgIHZvaWQgYWxsb2NhdGVTaGFyZWRQcm9maWxlcygpOwog
ICAgIFVubGlua2VkVmFsdWVQcm9maWxlJiB1bmxpbmtlZFZhbHVlUHJvZmlsZSh1bnNpZ25lZCBp
bmRleCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVzW2luZGV4XTsgfQogICAgIFVubGlua2VkQXJy
YXlQcm9maWxlJiB1bmxpbmtlZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4g
bV9hcnJheVByb2ZpbGVzW2luZGV4XTsgfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29s
IGhhc0lkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyNlbmRpZgorCisgICAgaW50MzJf
dCB0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOworCiBwcm90ZWN0ZWQ6CiAgICAg
VW5saW5rZWRDb2RlQmxvY2soVk0mLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0
YWJsZUluZm8mLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPik7CiAKQEAgLTM5Nyw2ICs0
MjEsOSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGV4aWNhbFNjb3BlRmVhdHVyZXMgOiA0
OwogcHVibGljOgogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOworI2lmIEVOQUJMRShKSVQp
CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKKyNl
bmRpZgogcHJpdmF0ZToKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlcyB7IDAgfTsKICAgICBT
b3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC00MTMsNyArNDQwLDYgQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3M7
CiAKLQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJv
ZmlsZTsKICNlbmRpZgpAQCAtNDU4LDYgKzQ4NCwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAg
fQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZz
ZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNl
dCk7CisgICAgfQorCisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUo
dW5zaWduZWQgaSkgeyByZXR1cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5h
cnlBcml0aFByb2ZpbGUmIHVuYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1f
dW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIm
IGxsaW50RXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7IH0K
IAogcHJpdmF0ZToKICAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PjsKQEAgLTQ2NSw4ICs1MDEsMTYgQEAgcHJpdmF0
ZToKICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZlY3RvcjxF
eHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5lRXhlY3V0
aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5r
ZWRWYWx1ZVByb2ZpbGU+IG1fdmFsdWVQcm9maWxlczsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtl
ZEFycmF5UHJvZmlsZT4gbV9hcnJheVByb2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPEJpbmFyeUFy
aXRoUHJvZmlsZT4gbV9iaW5hcnlBcml0aFByb2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPFVuYXJ5
QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKKworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgTG9jayBtX2NhY2hlZElkZW50aWZpZXJVaWRzTG9jazsKKyAgICBIYXNoU2V0PFVuaXF1
ZWRTdHJpbmdJbXBsKj4gbV9jYWNoZWRJZGVudGlmaWVyVWlkczsKKyNlbmRpZgogCiBwcm90ZWN0
ZWQ6CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1l
dGFkYXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTUgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUpOwogICAg
IH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNl
dEluTWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0g
bV9pczMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFi
bGUxNigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAgICBiYXNlVHlwZU9mZnNldCA9IHJvdW5k
VXBUb011bHRpcGxlT2YoYWxpZ25vZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSwgYmFzZVR5
cGVPZmZzZXQpOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YodHlwZW5h
bWUgT3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KICAgICB1bnNpZ25lZCBudW1FbnRyaWVzKCk7
CiAKQEAgLTEwNyw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc19vZmZzZXQx
NlRhYmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAg
ICAgdXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSwxMyArNDUsMTEgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogCiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNB
cmd1bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxC
dWNrZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFz
ayA9IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0
b3RhbE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxC
dWNrZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQogICAgIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCi0gICAgICAg
ICAgICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAg
Y2xlYXJCdWNrZXRzKCk7CiAgICAgfQogICAgIAogICAgIEVuY29kZWRKU1ZhbHVlKiBzcGVjRmFp
bEJ1Y2tldCh1bnNpZ25lZCBpKQpAQCAtNTksNiArNTcsMTIgQEAgc3RydWN0IFZhbHVlUHJvZmls
ZUJhc2UgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZCdWNrZXRzICsgaSA8IHRvdGFsTnVtYmVy
T2ZCdWNrZXRzKTsKICAgICAgICAgcmV0dXJuIG1fYnVja2V0cyArIG51bWJlck9mQnVja2V0cyAr
IGk7CiAgICAgfQorCisgICAgdm9pZCBjbGVhckJ1Y2tldHMoKQorICAgIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCisgICAgICAg
ICAgICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICB9CiAg
ICAgCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8odW5zaWduZWQgYnVja2V0KSBjb25z
dAogICAgIHsKQEAgLTEyMyw4ICsxMjcsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQg
cmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAg
IC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyAr
K2kpIHsKQEAgLTEzOSw3ICsxNDEsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAg
ICAgIAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVu
Y29kZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVj
dWxhdGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTYxLDYgKzE2Myw3IEBA
IHN0cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVl
UHJvZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsK
ICAgICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8
MD4oKSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9Owog
CiBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJv
ZmlsZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShERkdf
SklUKQogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmgiCkBAIC0zNCw3ICszNSw5IEBACiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2Vt
ZW50LmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJh
bWVTZXQuaCIKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJKU0Nhc3QuaCIKKyNp
bmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGlsYXRp
b24uaCIKICNpbmNsdWRlICJSZWNvcmRlZFN0YXR1c2VzLmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5o
PgpAQCAtNzAsNyArNzMsNyBAQCBzdHJ1Y3QgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24gewogICAg
IFdyaXRlQmFycmllcjxKU0NlbGw+IG1fdG87CiB9OwogICAgICAgICAKLWNsYXNzIENvbW1vbkRh
dGEgeworY2xhc3MgQ29tbW9uRGF0YSA6IHB1YmxpYyBNYXRoSUNIb2xkZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENvbW1vbkRhdGEpOwogcHVibGljOgogICAgIENvbW1vbkRhdGEoKQpA
QCAtMTE2LDYgKzExOSw3IEBAIHB1YmxpYzoKICAgICBGaXhlZFZlY3RvcjxDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQ+IG1fd2F0Y2hwb2ludHM7CiAgICAgRml4ZWRWZWN0b3I8QWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CiAg
ICAgRml4ZWRWZWN0b3I8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBt
X2FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgIFJlY29y
ZGVkU3RhdHVzZXMgcmVjb3JkZWRTdGF0dXNlczsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50
PiBtX2p1bXBSZXBsYWNlbWVudHM7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29kZS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAK
IAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29k
ZS5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
VHJhY2tlZFJlZmVyZW5jZXM7CiAKK3N0cnVjdCBTaW1wbGVKdW1wVGFibGU7CitzdHJ1Y3QgU3Ry
aW5nSnVtcFRhYmxlOworCiBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSklUQ29tcGlsZXI7CkBA
IC0xMDEsNiArMTA0LDggQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4g
ZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSBmaW5hbDsKIAogICAgIHVzaW5nIERpcmVjdEpJ
VENvZGU6OmluaXRpYWxpemVDb2RlUmVmRm9yREZHOworCisgICAgUENUb0NvZGVPcmlnaW5NYXAq
IHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gY29tbW9uLm1fcGNUb0NvZGVP
cmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENv
bXBpbGVyOyAvLyBBbGxvdyBKSVRDb21waWxlciB0byBjYWxsIHNldENvZGVSZWYoKS4KQEAgLTEx
MCw2ICsxMTUsOCBAQCBwdWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+
IG1fb3NyRW50cnk7CiAgICAgRml4ZWRWZWN0b3I8REZHOjpPU1JFeGl0PiBtX29zckV4aXQ7CiAg
ICAgRml4ZWRWZWN0b3I8REZHOjpTcGVjdWxhdGlvblJlY292ZXJ5PiBtX3NwZWN1bGF0aW9uUmVj
b3Zlcnk7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJs
ZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXM7CiAgICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07
CiAgICAgREZHOjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4NSwxMyArMTg1LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICAKICAgICBtX2dyYXBoLnJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7CiAK
LSAgICBpZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSB8fCAh
bV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmICghbV9n
cmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMg
PSBXVEZNb3ZlKG1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKLSAgICAgICAgaWYg
KCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2Nv
ZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1v
dmUobV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwotICAgIH0KKyAgICBBU1NFUlQobV9qaXRD
b2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9q
aXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKKyAgICBpZiAoIW1fZ3JhcGgu
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgCisgICAgICAgIG1faml0Q29kZS0+
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcyk7CisgICAgaWYgKCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5
KCkpCisgICAgICAgIG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dy
YXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7CiAKICAgICBmb3IgKEJhZzxTd2l0Y2hEYXRhPjo6aXRl
cmF0b3IgaXRlciA9IG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVy
KSB7CiAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqKml0ZXI7CkBAIC0xOTksMTIgKzE5OCwx
MiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIGNh
c2UgU3dpdGNoQ2hhcjoKICAgICAgICAgY2FzZSBTd2l0Y2hJbW06IHsKICAgICAgICAgICAgIGlm
ICghZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHkoKSk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2Rh
dGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGRh
dGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5k
ZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1faml0Q29k
ZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF07CiAgICAgICAgICAg
ICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0
Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0pOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUo
KSA9PSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCkpOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gbGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKTsgai0tOykK
QEAgLTIxOSwxMiArMjE4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYg
bGlua0IKIAogICAgICAgICBjYXNlIFN3aXRjaFN0cmluZzogewogICAgICAgICAgICAgaWYgKCFk
YXRhLmRpZFVzZUp1bXBUYWJsZSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCkuaXNFbXB0eSgp
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxl
KGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0
Y2hUYWJsZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8gY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2gu
YmxvY2stPmluZGV4XSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJsZS5t
X2N0aU9mZnNldHMuc2l6ZSgpID09IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS5zaXplKCkg
KyAxKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBsaW5rZWRUYWJsZS5tX2N0aU9m
ZnNldHMpCkBAIC0zMzMsNyArMzMyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVm
ZmVyJiBsaW5rQgogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5k
aWRCdWlsZE1hcHBpbmcoKSkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2lu
TWFwKG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIpLCBsaW5rQnVmZmVyKSk7CisgICAgICAgIG1faml0Q29kZS0+Y29tbW9uLm1f
cGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3Zl
KG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcik7CiB9CiAKIHN0YXRpYyB2
b2lkIGVtaXRTdGFja092ZXJmbG93Q2hlY2soSklUQ29tcGlsZXImIGppdCwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0JiBzdGFja092ZXJmbG93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw2
IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSoKICAgICBBU1NFUlQo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNT
RVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBBU1NF
UlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRD
b2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCiAgICAgaWYgKCFPcHRpb25zOjp1
c2VPU1JFbnRyeVRvREZHKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3Miw5ICs3NzIsNiBAQCB2b2lkIE9T
UkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgCiAgICAgLy8gVGhlIHRhZyByZWdpc3Rl
cnMgYXJlIG5lZWRlZCB0byBtYXRlcmlhbGl6ZSByZWNvdmVyaWVzIGJlbG93LgogICAgIGppdC5l
bWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCi0gICAgaWYgKGV4aXQuaXNFeGNl
cHRpb25IYW5kbGVyKCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKLQogICAgIGlmIChpbmxpbmVTdGFj
a0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCkgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogdG1w
U2NyYXRjaCA9IHNjcmF0Y2ggKyBvcGVyYW5kcy50bXBJbmRleCgwKTsKICAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbk1hdGVyaWFsaXplT1NSRXhpdFNpZGVTdGF0
ZSk+KCZ2bSwgJmV4aXQsIHRtcFNjcmF0Y2gpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKIAorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJERkdK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpJVC5oIgpA
QCAtMTE5LDEwICsxMjAsMTAgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKFZNJiB2bSwgQ0NhbGxI
ZWxwZQogICAgIGludDMyX3QgY2xpcHBlZFZhbHVlOwogICAgIHN3aXRjaCAoaml0LmNvZGVCbG9j
aygpLT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAgY2xp
cHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGpp
dC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xp
cHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKHRh
cmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6Ci0g
ICAgICAgIGNsaXBwZWRWYWx1ZSA9IFVwcGVyVGllckV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRU
aHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKSwgdGFyZ2V0VmFsdWUpOwor
ICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVk
VGhyZXNob2xkKHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE0MiwxMSArMTQzLDggQEAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVAogewogICAgIGNhbGxlcklz
TExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXItPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogCi0g
ICAgaWYgKGNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgewotICAgICAgICBpZiAoIWNh
bGxlcklzTExJbnQpCi0gICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bV9o
YXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKKyAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpKQogICAgICAgICByZXR1cm4gTExJbnQ6OmNoZWNrcG9pbnRPU1JFeGl0RnJvbUlubGlu
ZWRDYWxsVHJhbXBvbGluZVRodW5rKCkuY29kZSgpOwotICAgIH0KIAogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0OwogCkBAIC0xOTgsOCArMTk2LDYg
QEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVAogI3VuZGVmIExMSU5U
X1JFVFVSTl9MT0NBVElPTgogCiAgICAgfSBlbHNlIHsKLSAgICAgICAgYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXItPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7Ci0KICAgICAgICAgc3dpdGNo
ICh0cnVlQ2FsbGVyQ2FsbEtpbmQpIHsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNh
bGw6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CkBAIC0zMTMsNiAr
MzA5LDEwIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAg
ICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxp
bmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0
YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNv
ZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAgICAg
ICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVC
bG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNsb3Qo
aW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJH
UFIpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUo
KSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJ
VDo6c19tZXRhZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVKSVRD
b25zdGFudFBvb2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVD
b2RlQmxvY2ssIEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw3ICs0MDQsOCBAQCB2b2lk
IGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6
UmVnaXN0ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRh
Z2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgY29kZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKKyAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4
aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGlu
ZUpJVENvbnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CiAKICAgICAgICAgQnl0
ZWNvZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlv
bjsKQEAgLTQyMCwxMiArNDIxLDE2IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2
bSwgQ0NhbGwKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4
aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKLSAgICBqaXQuYWRkUHRy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KGNvZGVCbG9ja0ZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBp
ZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgeworICAgICAgICBBU1NFUlQoIVJlZ2lzdGVy
U2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhMTEludDo6UmVnaXN0ZXJzOjpw
Y0dQUikpOworICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSwgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNo
R1BSKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSk7CisKICAgICAgICAgLy8gU2luY2Ugd2UncmUg
anVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCiAg
ICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgdm0uYWRkcmVz
c09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSk7CiAgICAgfQotICAgIAorCisgICAgaml0LmFkZFB0cihB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihj
b2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKICAgICBq
aXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUklu
Zm86OnJlZ1QyKTsKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0clRh
Zyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJD
YWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIK
ICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNp
bmNsdWRlICJERkdKSVRDb2RlLmgiCkBAIC0yODY5LDcgKzI4NzAsNyBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uRmluZFN3CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNv
bnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzRG91YmxlKCkpOwogICAgIGRvdWJs
ZSBhc0RvdWJsZSA9IHZhbHVlLmFzRG91YmxlKCk7CkBAIC0yODkwLDcgKzI4OTEsNyBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIHJldHVybiBsaW5rZWRUYWJsZS5j
dGlGb3JWYWx1ZSgqdW5saW5rZWRUYWJsZSwgc3RySW1wbCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hh
cio+KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzMwLDYgKzczMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6Omlu
UGFpcihjYWxsZWVUYWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1ZmZs
ZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxl
RGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVE
YXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwog
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytp
KSB7CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCBpICsgMSk7CkBAIC04ODksNyArODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBp
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAg
ICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAg
ICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI4LDYgKzgy
OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwg
RGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFs
bG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51
bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9q
aXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAg
ICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
aSArIDEpOwpAQCAtOTc5LDcgKzk4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsK
ICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICszOTg1
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBKSVRQ
dXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBl
OjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNl
ZFJlZ2lzdGVycywKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwg
Y29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2VkUmVn
aXN0ZXJzLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpTVmFs
dWVSZWdzOjpwYXlsb2FkT25seShwcm9wZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQUlJl
Zywgc3R1YkluZm9HUFIpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0g
dHJ1ZTsKIApAQCAtNDkwNSw3ICs0OTA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlQWRkKE5vZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5n
cmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVj
b2RlSW5kZXgoKTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2Vs
aW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
SW5kZXgpOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRB
ZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmppdENvZGUo
KS0+Y29tbW9uLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5n
RnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRj
aGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGQ7CiAgICAgCkBAIC00OTg5LDcgKzQ5ODks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVTdWIoTm9kCiAgICAgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRo
UHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUU3ViSUMqIHN1
YklDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAg
SklUU3ViSUMqIHN1YklDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUU3ViSUMoYXJp
dGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVl
U3ViT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25W
YWx1ZVN1YjsKIApAQCAtNTU3MSw3ICs1NTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlTmVnYXRlKAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2pp
dC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5
dGVjb2RlSW5kZXgoKTsKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFz
ZWxpbmVDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29k
ZUluZGV4KTsKLSAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklU
TmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5qaXRDb2Rl
KCktPmNvbW1vbi5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGlu
Z0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlOwogICAgIGNvbXBpbGVNYXRo
SUMobm9kZSwgbmVnSUMsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
KTsKQEAgLTU4MTUsNyArNTgxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1
ZU11bChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgo
KS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUlu
ZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNv
ZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4
KTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTXVsSUMo
YXJpdGhQcm9maWxlKTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNv
bW1vbi5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0
aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwogCkBAIC0xNDc3MCw3ICsxNDc3MCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3BlUmVn
ID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChz
aGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCksIGNh
bGxTaXRlSW5kZXgpOworICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRv
d1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChub2Rl
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBjb21waWxlKFN0YXRl
JiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogCiAgICAgaWYgKHZtLnNob3VsZEJ1aWxkZXJQQ1RvQ29k
ZU9yaWdpbk1hcHBpbmcoKSkgewogICAgICAgICBCMzo6UENUb09yaWdpbk1hcCBvcmlnaW5NYXAg
PSBzdGF0ZS5wcm9jLT5yZWxlYXNlUENUb09yaWdpbk1hcCgpOwotICAgICAgICBjb2RlQmxvY2st
PnNldFBDVG9Db2RlT3JpZ2luTWFwKG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFs
aXplci0+YjNDb2RlTGlua0J1ZmZlcikpOworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24u
bV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFs
aXplci0+YjNDb2RlTGlua0J1ZmZlcik7CiAgICAgfQogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNFbnRyeVB0clRhZz4gbGFiZWwgPSBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIt
PmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oc3RhdGUucHJvYy0+Y29kZSgpLmVudHJ5cG9pbnRM
YWJlbCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDggQEAgcHVibGljOgogICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uKCkgb3ZlcnJpZGU7CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjb21tb25E
YXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVENvZGUsIGNvbW1vbik7IH0K
ICAgICB2b2lkIHNocmlua1RvRml0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIG92ZXJyaWRl
OworCisgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUg
eyByZXR1cm4gY29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKICAgICBE
Rkc6OkNvbW1vbkRhdGEgY29tbW9uOwogICAgIFZlY3RvcjxPU1JFeGl0PiBtX29zckV4aXQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDE0ICs1Miw2IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICBncmFwaC5y
ZWdpc3RlckZyb3plblZhbHVlcygpOwogCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB7Ci0gICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAg
ICBBU1NFUlQoY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKLSAgICB9Ci0jZW5k
aWYKLQogICAgIC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlz
IGVudHJ5cG9pbnQgdG90YWxseSBkaWZmZXJlbnRseQogICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0
aGVyIHdlJ3JlIGRvaW5nIE9TUiBlbnRyeSBvciBub3QuCiAgICAgQ0NhbGxIZWxwZXJzIGppdChj
b2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBACiAj
aW5jbHVkZSAiSlNTZXRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5j
bHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIK
ICNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNp
bmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKQEAgLTIzMjAsNiArMjMyMSwxOCBA
QCBwcml2YXRlOgogICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVFN1YkdlbmVyYXRvcj4o
YXJpdGhQcm9maWxlLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7
CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5l
cmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVEFkZElDKiBhZGRNYXRoSUMoREZH
OjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1
cm4gY29tbW9uLmFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNf
c2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0
aWMgSklUTXVsSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUTXVsSUMocHJvZmlsZSk7
IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9y
Pjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVROZWdJQyogYWRkTWF0aElDKERGRzo6Q29t
bW9uRGF0YSYgY29tbW9uLCBVbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29t
bW9uLmFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxH
ZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklU
U3ViSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9m
aWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKwog
ICAgIHZvaWQgY29tcGlsZVZhbHVlTXVsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRp
Yyk7CkBAIC0yMzkxLDcgKzI0MDQsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAgICAgICAg
ICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBC
b3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgSklU
VW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRo
SUM8R2VuZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVFVuYXJ5TWF0
aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRD
b2RlLT5jb21tb24sIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dl
bmVyYXRvciA9IEdlbmVyYXRvcihKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLCBKU1ZhbHVl
UmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKIAogICAgICAgICAg
ICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwpAQCAtMjUwMCw3ICsyNTEz
LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVy
YXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25T
dGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRo
UHJvZmlsZSk7CisgICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRDb2RlLT5jb21tb24sIGFyaXRo
UHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRv
cihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkp
LAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBKU1Zh
bHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkpLCBwYXJhbXMuZnBTY3JhdGNoKDApLAogICAgICAgICAg
ICAgICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKQEAg
LTQzMTcsNyArNDMzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9H
UFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0
Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJv
eDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29k
ZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUlu
ZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2Nr
KCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBB
Y2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQ
Uik7CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJv
bCA9IHRydWU7CkBAIC0xMDI4NSw2ICsxMDI5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1BbGxvY2F0ZWRB
cmdzOyArK2kpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVu
ZChWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAg
ICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygp
LT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVw
Q2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQu
Y29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhzZW1hbnRpY05vZGVPcmlnaW4pOwpAQCAtMTA0
NDMsMTMgKzEwNDU3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVE
YXRhLmFyZ3MuYXBwZW5kKHBhcmFtc1sxICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOwogCiAg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bUFyZ3M7CisgICAg
ICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNodWZm
bGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogCiAgICAg
ICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCkt
PmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAK
LSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwg
WyZdIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVE
YXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
aml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICAgICAg
fSk7CkBAIC0xMDc5Miw3ICsxMDgwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VE
YXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5r
SW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAg
ICAgICAgICAgICAgICB9KTsKQEAgLTExMDczLDcgKzExMDg4LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQ
YXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJl
Z1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxT
bG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTMsMjggKzQxMywxNiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihW
TSYgdm0sIHVuc2lnbmVkCiAKICAgICBSZWdpc3RlclNldCBhbGxGVExDYWxsZWVTYXZlcyA9IFJl
Z2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAgICAgY29uc3QgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiB2bUNhbGxlZVNh
dmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJl
Z2lzdGVyU2V0IHZtQ2FsbGVlU2F2ZXNUb1NraXAgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3Rl
cnMoKTsKLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICBqaXQu
bG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBqaXQu
YWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVS
ZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICB9CiAKICAgICBm
b3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVn
Lm5leHQoKSkgewogICAgICAgICBpZiAoIWFsbEZUTENhbGxlZVNhdmVzLmdldChyZWcpKSB7Ci0g
ICAgICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghdm1DYWxsZWVTYXZlcy0+ZmluZChyZWcpKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVkIHVud2luZEluZGV4ID0gY29k
ZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCktPmluZGV4T2YocmVnKTsKICAgICAgICAgY29u
c3QgUmVnaXN0ZXJBdE9mZnNldCogYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA9IGJhc2VsaW5lQ2Fs
bGVlU2F2ZXMtPmZpbmQocmVnKTsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCogdm1DYWxsZWVT
YXZlID0gbnVsbHB0cjsgCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQot
ICAgICAgICAgICAgdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChyZWcpOwogCiAg
ICAgICAgIGlmIChyZWcuaXNHUFIoKSkgewogICAgICAgICAgICAgR1BSUmVnIHJlZ1RvTG9hZCA9
IGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPyBHUFJJbmZvOjpyZWdUMCA6IHJlZy5ncHIoKTsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1RvTG9hZCAhPSBHUFJJbmZvOjpyZWdUMSk7CiAK
ICAgICAgICAgICAgIGlmICh1bndpbmRJbmRleCA9PSBVSU5UX01BWCkgewogICAgICAgICAgICAg
ICAgIC8vIFRoZSBGVEwgY29tcGlsYXRpb24gZGlkbid0IHByZXNlcnZlIHRoaXMgcmVnaXN0ZXIu
IFRoaXMgbWVhbnMgdGhhdCBpdCBhbHNvCkBAIC00NTIsOCArNDQwLDYgQEAgc3RhdGljIHZvaWQg
Y29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAogCiAgICAgICAgICAgICBpZiAoYmFzZWxpbmVS
ZWdpc3Rlck9mZnNldCkKICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rl
ciwgYmFzZWxpbmVSZWdpc3Rlck9mZnNldC0+b2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmICh2
bUNhbGxlZVNhdmUgJiYgIXZtQ2FsbGVlU2F2ZXNUb1NraXAuZ2V0KHZtQ2FsbGVlU2F2ZS0+cmVn
KCkpKQotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEZQUlJlZyBmcFJlZ1RvTG9hZCA9IGJhc2VsaW5l
UmVnaXN0ZXJPZmZzZXQgPyBGUFJJbmZvOjpmcFJlZ1QwIDogcmVnLmZwcigpOwogCkBAIC00NjQs
MTkgKzQ1MCw5IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAog
ICAgICAgICAgICAgaWYgKGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAgICAg
aml0LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNy
b0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQt
Pm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAodm1DYWxsZWVTYXZlICYmICF2bUNhbGxlZVNh
dmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNhdmUtPnJlZygpKSkKLSAgICAgICAgICAgICAgICBqaXQu
c3RvcmVEb3VibGUoZnBSZWdUb0xvYWQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICBSZWdpc3RlckF0T2Zm
c2V0KiB2bUNhbGxlZVNhdmUgPSB2bUNhbGxlZVNhdmVzLT5maW5kKEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0
ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUt
Pm9mZnNldCgpKSk7Ci0KLSAgICAgICAgdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+Zmlu
ZChHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BS
SW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKLSAgICB9Ci0KICAgICBzaXplX3Qg
YmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9j
ay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAKICAgICBpZiAoZXhpdC5t
X2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJi
CSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjggQEAgY2xhc3MgTWV0YWRhdGEKICAgICBk
ZWYgc3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNv
bnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBnZW5lcmF0ZU9mZnNldE9m
RnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKKyAgICAgICAgICAgIGZpZWxkTmFtZXMubWFw
IGRvIHxmaWVsZE5hbWV8CisgICAgICAgICAgICAgICAgIiN7cHJlZml4fXN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uLTFdfSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAg
ICAgICAgICAgZW5kLmpvaW4oIlxuIikKKyAgICAgICAgZW5kCisKKyAgICAgICAgZGVmIGNvbnZl
cnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGZpZWxkTmFtZXMpCiAgICAgICAgICAgICBmaWVsZHMu
bWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhh
c2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxk
cyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCisgICAgICAgICAgICAgICAg
ICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0
eXBlLCBmaWVsZE5hbWVzKX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307
IgorICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAg
ICAgICAgICAgIGZpZWxkTmFtZXMucHVzaChmaWVsZE5hbWUpCisgICAgICAgICAgICAgICAgICAg
ICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgogICAgICAgICAgICAgICAg
IGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAg
ZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVs
ZE5hbWVzID0gW10KKyAgICAgICAgcHJlZml4ID0gIiAgICAgICAgIgorICAgICAgICBmaWVsZHMg
PSBjb252ZXJ0RmllbGRzKHByZWZpeCwgQGZpZWxkcywgZmllbGROYW1lcykKKyAgICAgICAgZmll
bGRzID0gZmllbGRzICsgIlxuIiArIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBm
aWVsZE5hbWVzKQogCiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXpl
cnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzY3LDYgKzM2NywyOCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6bG9hZFByb3BlcnR5
KEdQUlJlCiAgICAgICAgIHJlc3VsdCk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9y
ZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0
LCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBKdW1wIGlzSW5saW5lID0gYnJhbmNoMzIoTGVzc1Ro
YW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgCisg
ICAgbG9hZFB0cihBZGRyZXNzKG9iamVjdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaCk7CisgICAgbmVnMzIob2Zmc2V0KTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZz
ZXQsIG9mZnNldCk7CisgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKKyAgICAKKyAgICBpc0lubGlu
ZS5saW5rKHRoaXMpOworICAgIGFkZFB0cigKKyAgICAgICAgVHJ1c3RlZEltbTMyKAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEpTT2JqZWN0KSkgLQorICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PGludDMyX3Q+KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDIpICogc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpLAorICAgICAgICBvYmpl
Y3QsIHNjcmF0Y2gpOworICAgIAorICAgIHJlYWR5LmxpbmsodGhpcyk7CisgICAgCisgICAgc3Rv
cmVWYWx1ZSh2YWx1ZSwKKyAgICAgICAgQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNF
aWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSk7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVyZShWTSYgdm0s
IFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkK
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjk4LDggKzcyMCwxMyBAQCB2b2lkIEFzc2VtYmx5
SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzCiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0
VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlu
a0luZm8qIGluZm8pCiB7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpy
ZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJl
Z1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBp
bmZvKTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCit7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0g
bmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjgzMDUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjM0LDggKzIzNCw5IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKLSAgICAv
LyBOb3RlIHRoYXQgdGhpcyBjbG9iYmVycyBvZmZzZXQuCisgICAgLy8gTm90ZSB0aGF0IHRoZXNl
IGNsb2JiZXIgb2Zmc2V0LgogICAgIHZvaWQgbG9hZFByb3BlcnR5KEdQUlJlZyBvYmplY3QsIEdQ
UlJlZyBvZmZzZXQsIEpTVmFsdWVSZWdzIHJlc3VsdCk7CisgICAgdm9pZCBzdG9yZVByb3BlcnR5
KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBHUFJSZWcg
c2NyYXRjaCk7CiAKICAgICB2b2lkIG1vdmVWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3Mgc3JjUmVncywg
SlNWYWx1ZVJlZ3MgZGVzdFJlZ3MpCiAgICAgewpAQCAtMzc5LDE1ICszODAsMjYgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgfQogCisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlGcmFtZSwgR1BSUmVnIHNjcmF0
Y2gpCisgICAgeworI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorICAg
ICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCBzY3JhdGNoKTsKKyAgICAgICAgY29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHNjcmF0Y2gpOworI2Vsc2UK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOworICAgICAgICBVTlVTRURfUEFS
QU0oc2NyYXRjaCk7CisjZW5kaWYKKyAgICB9CisKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lKQog
ICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICAgICAg
Y29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfTsKICAgICAgICAgR1BSUmVnIHRlbXAxID0gdXNlZFJl
Z2lzdGVycy5nZXRGcmVlR1BSKDApOwotICAgICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCB0
ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVySW1wbCh0ZW1wMSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKICNlbHNlCiAgICAgICAgIFVOVVNF
RF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJh
bWUpOwogI2VuZGlmCiAgICAgfQogICAgIApAQCAtMTcyMCw2ICsxNzMyLDcgQEAgcHVibGljOgog
ICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5n
R2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3Bh
Y2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2Fs
bCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2Rl
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5l
SklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVk
ZSAiSklUTWF0aElDLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCisjaW5jbHVkZSAiU3RydWN0
dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVEFkZElDKiBNYXRoSUNIb2xk
ZXI6OmFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVy
biBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUTXVsSUMqIE1hdGhJQ0hvbGRlcjo6
YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1f
bXVsSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRTdWJJQyogTWF0aElDSG9sZGVyOjphZGRK
SVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJ
Q3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE5lZ0lDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE5l
Z0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFk
ZChhcml0aFByb2ZpbGUpOyB9CisKK3ZvaWQgTWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MoTWF0
aElDSG9sZGVyJiBvdGhlcikKK3sKKyAgICBtX2FkZElDcyA9IFdURk1vdmUob3RoZXIubV9hZGRJ
Q3MpOworICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhlci5tX211bElDcyk7CisgICAgbV9uZWdJ
Q3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICBtX3N1YklDcyA9IFdURk1vdmUob3Ro
ZXIubV9zdWJJQ3MpOworfQorCitCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZShDb2Rl
UmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5
Q2hlY2spCisgICAgOiBEaXJlY3RKSVRDb2RlKFdURk1vdmUoY29kZSksIHdpdGhBcml0eUNoZWNr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAsIE1hdGhJQ0hvbGRlcigpCit7IH0KKworQmFz
ZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9CYXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJKSVRDb2Rl
LmgiCisjaW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVuYXJ5QXJpdGhQ
cm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgU2ltcGxl
SnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3MgTWF0aElDSG9sZGVy
IHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKTsK
KyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklU
TXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1YklDKiBh
ZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklUTmVn
SUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+IG1f
YWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBt
X25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKworY2xhc3MgSklUQ29u
c3RhbnRQb29sIHsKK3B1YmxpYzoKKyAgICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisg
ICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIEdsb2JhbE9iamVjdCwKKyAg
ICAgICAgQ2FsbExpbmtJbmZvLAorICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAg
RnVuY3Rpb25EZWNsLAorICAgICAgICBGdW5jdGlvbkV4cHIsCisgICAgfTsKKworICAgIHN0cnVj
dCBWYWx1ZSB7CisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgUGFja2VkUHRyPHZvaWQ+IHBh
eWxvYWQ7CisgICAgfTsKKworICAgIEpJVENvbnN0YW50UG9vbCgpID0gZGVmYXVsdDsKKyAgICBK
SVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAgICBKSVRDb25z
dGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworCisgICAg
Q29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXplKCk7CisgICAgICAgIG1f
Y29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1ZSBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fY29uc3Rh
bnRzOworfTsKKworCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29k
ZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2RlKENv
ZGVSZWY8SlNFbnRyeVB0clRhZz4sIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hl
Y2spOworICAgIH5CYXNlbGluZUpJVENvZGUoKSBvdmVycmlkZTsKKyAgICBQQ1RvQ29kZU9yaWdp
bk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBtX3BjVG9Db2RlT3Jp
Z2luTWFwLmdldCgpOyB9CisKKyAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5r
ZWRDYWxsczsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAg
IEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAg
IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZp
eGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAg
IEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50
UG9vbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVP
cmlnaW5NYXA7CisgICAgYm9vbCBtX2lzU2hhcmVhYmxlIHsgdHJ1ZSB9OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHNpemVfdCBCYXNlbGluZUpJVFBsYW46OmNvZGVTaXpl
KCkgY29uc3QKIAogQ29tcGlsYXRpb25SZXN1bHQgQmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6ZSgp
CiB7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5U
aHJlYWQoKTsKKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9u
TWFpblRocmVhZChtX2NvZGVCbG9jayk7CiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNl
IENvbXBpbGF0aW9uRmFpbGVkOgogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJs
b2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODMw
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dD
aGlja2VuUHJvbG8KICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12b2lk
IENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVl
KSkpOwotICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAgc3Rv
cmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNv
ZGVCbG9jayksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2Fs
bFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBDQ2Fs
bEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hhZG93
UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAg
ICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpAQCAt
NzIsNiArNjIsMjggQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQog
ICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9CiAK
KwordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cit2b2lkIENDYWxsSGVscGVyczo6
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFs
dWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKKyAg
ICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOworICAgIHN0b3JlUHRyKHNj
b3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgc2NvcGUpKSk7CisgICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRv
d1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2Nr
KSkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IGNhbGxTaXRlSW5kZXgpKSk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywg
R1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQ
YWNrZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwor
dm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFk
b3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9j
aywgY2FsbFNpdGVJbmRleCk7Cit9CisKIHZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92
ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRM
YW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0
aW9uKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4NDAs
MTQgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9sYXRp
bGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRvcCBv
ZgogICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQgbG9n
U2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBz
Y3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2Nv
cGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJS
ZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXgpOworcHVibGljOgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BS
UmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1
c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisgICAg
dm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1Zh
bHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIg
dG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZv
aWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQ
UlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogdm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0
ZXJzKENvZGVCbG9jayogY29kZUJsb2NrKQogeworICAgIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVy
cyhjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1l
U2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zKQorewogICAgIFJlZ2lzdGVyU2V0IGNhbGxl
ZVNhdmVSZWdpc3RlcnMgeyBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkgfTsK
LSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zID0g
Y29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVn
aXN0ZXJBdE9mZnNldCBlbnRyeSB7IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZy
YW1lU2h1ZmZsZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDEzIEBAIHB1Ymxp
YzoKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJnczsKICAgICB1bnNpZ25lZCBudW1Mb2Nh
bHMgeyBVSU5UX01BWCB9OwogICAgIHVuc2lnbmVkIG51bVBhc3NlZEFyZ3MgeyBVSU5UX01BWCB9
OworICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OyAvLyBPbiBvdXIgbWFj
aGluZSBmcmFtZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVyTWFwPFZhbHVlUmVj
b3Zlcnk+IHJlZ2lzdGVyczsKICAgICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZhbGlk
R1BSUmVnIH07CiAKICAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sq
KTsKKyAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zm
c2V0TGlzdCopOwogI2VuZGlmCiAgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgQ2FsbEZyYW1lU2h1
ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYQogICAgIDogbV9qaXQoaml0KQogICAgICwgbV9v
bGRGcmFtZShkYXRhLm51bUxvY2FscyArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVy
cywgbnVsbHB0cikKICAgICAsIG1fbmV3RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQotICAgICwgbV9hbGlnbmVkT2xkRnJh
bWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCi0gICAgICAgICsgcm91bmRB
cmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
KSkKKyAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVycyArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLm51bVBhcmFtZXRl
cnMpKQogICAgICwgbV9hbGlnbmVkTmV3RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUlu
UmVnaXN0ZXJzCiAgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEu
YXJncy5zaXplKCkpKQogICAgICwgbV9mcmFtZURlbHRhKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSAt
IG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSkKICAgICAsIG1fbG9ja2VkUmVnaXN0ZXJzKFJlZ2lzdGVy
U2V0OjphbGxSZWdpc3RlcnMoKSkKICAgICAsIG1fbnVtUGFzc2VkQXJncyhkYXRhLm51bVBhc3Nl
ZEFyZ3MpCisgICAgLCBtX251bVBhcmFtZXRlcnMoZGF0YS5udW1QYXJhbWV0ZXJzKQogewogICAg
IC8vIFdlIGFyZSBhbGxvd2VkIGFsbCB0aGUgdXN1YWwgcmVnaXN0ZXJzLi4uCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsgKQpAQCAtNDIxLDcg
KzQyMSw3IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCBtX25ld0ZyYW1l
QmFzZSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYXJndW1lbnRDb3VudE9LID0KICAgICAg
ICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbV9uZXdGcmFt
ZUJhc2UsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1faml0LmNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIobV9udW1QYXJhbWV0ZXJzKSk7CiAgICAgbV9qaXQuYWRkMzIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSArIENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1f
aml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50UmVn
aXN0ZXJzKCkpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1fbmV3
RnJhbWVCYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVyLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3IEBA
IHB1YmxpYzoKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgZGF0YTsKICAgICAgICAgZGF0
YS5udW1Mb2NhbHMgPSBudW1Mb2NhbHMoKTsKICAgICAgICAgZGF0YS5udW1QYXNzZWRBcmdzID0g
bV9udW1QYXNzZWRBcmdzOworICAgICAgICBkYXRhLm51bVBhcmFtZXRlcnMgPSBtX251bVBhcmFt
ZXRlcnM7CiAgICAgICAgIGRhdGEuY2FsbGVlID0gZ2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7IENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSB9KS0+cmVjb3ZlcnkoKTsKICAgICAgICAgZGF0YS5hcmdzLnJl
c2l6ZShhcmdDb3VudCgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3Vu
dCgpOyArK2kpCkBAIC03OTgsNiArNzk5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBlcmZvcm1T
YWZlV3JpdGVzKCk7CiAgICAgCiAgICAgdW5zaWduZWQgbV9udW1QYXNzZWRBcmdzIHsgVUlOVF9N
QVggfTsKKyAgICB1bnNpZ25lZCBtX251bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgOiBKU0ludGVyZmFj
ZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgbnVsbHB0cikK
ICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2Rl
QmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCiAgICAgLCBtX3Bj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAgLTc3LDYgKzc3LDkgQEAgSklUOjpKSVQoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5n
KGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25zdGFudCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7CisgICAgbV9wcm9m
aWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrID0gY29k
ZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtOTAsOCAr
OTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0gICAgCi0gICAgc2tpcE9wdGlt
aXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVj
dXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVC
bG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIHNraXBPcHRpbWl6
ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0
aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZy
YW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlG
cmFtZSk7CkBAIC0xMTMsMTUgKzExNiwyMCBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdh
dGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVB
ZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVk
KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQp
Cit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0
KQogeworICAgIGF1dG8gb2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9TZXQsIFdh
dGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVk
KSkpOworICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlD
aGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlD
aGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAg
aWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJSZWFkT25s
eVdhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUg
PT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwg
T0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2ludCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVz
cyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1t
MzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1Bv
aW50ZXJPZmZzZXQoKQpAQCAtMTI5LDEyICsxMzcsMTggQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNr
UG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDAp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5r
ZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdU
MCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsKIH0KIAordm9p
ZCBKSVQ6OnJlc2V0U1AoKQoreworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKK30KKwogI2RlZmluZSBORVhUX09QQ09ERShuYW1lKSBcCiAgICAgbV9i
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgKyBj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IFwKICAgICBicmVhazsKQEAgLTE4MSw2MSArMTk1
LDQ0IEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWMKICAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJ
blByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtl
ZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOworICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVzdWx0KTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJh
cmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGJyYW5jaFRlc3RQ
dHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpy
YXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uUmFyZURh
dGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCByZXN1
bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0
LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkpLCBy
ZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rp
b25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSksIHJlc3VsdCk7CisKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpvZmZz
ZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
cmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworCisjaWYgQVNTRVJUX0VOQUJMRUQK
KyAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpOworICAgIH0pOworI2VuZGlmCit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKIHsKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgICAgICBkYXRhTG9n
KCJDb21waWxpbmcgIiwgKm1fcHJvZmlsZWRDb2RlQmxvY2ssICJcbiIpOwogICAgIAogICAgIGpp
dEFzc2VydFRhZ3NJblBsYWNlKCk7CiAgICAgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsK
ICAgICAKLSAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5zaXplKCk7CisgICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCk7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2FsbExp
bmtJbmZvSW5kZXggPSAwOwogCi0gICAgVk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAg
Qnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7Ci0gICAgaWYgKG1fbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxv
Y2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4o
dm0pKSkgewotICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNh
dXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KLSAgICAgICAg
Ly8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhl
IExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8KLSAgICAgICAgLy8gZG8gT1NSIGVudHJ5IGlu
dG8gdGhlIGJhc2VsaW5lIEpJVCBpbiBhIGxvb3AsIGl0IHdpbGwgcGFzcyBpbiB0aGUgYnl0ZWNv
ZGUgb2Zmc2V0IGl0Ci0gICAgICAgIC8vIHdhcyBleGVjdXRpbmcgYXQgd2hlbiBpdCBraWNrZWQg
b2ZmIG91ciBjb21waWxhdGlvbi4gV2Ugb25seSBuZWVkIHRvIGNvbXBpbGUgY29kZSBmb3IKLSAg
ICAgICAgLy8gYW55dGhpbmcgcmVhY2hhYmxlIGZyb20gdGhhdCBieXRlY29kZSBvZmZzZXQuCi0K
LSAgICAgICAgLy8gV2Ugb25seSBib3RoZXIgYnVpbGRpbmcgdGhlIGJ5dGVjb2RlIGdyYXBoIGlm
IGl0IGNvdWxkIHNhdmUgdGltZSBhbmQgZXhlY3V0YWJsZQotICAgICAgICAvLyBtZW1vcnkuIFdl
IHBpY2sgYW4gYXJiaXRyYXJ5IG9mZnNldCB3aGVyZSB3ZSBkZWVtIHRoaXMgaXMgcHJvZml0YWJs
ZS4KLSAgICAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAy
MDApIHsKLSAgICAgICAgICAgIC8vIEFzIGEgc2ltcGxpZmljYXRpb24sIHdlIGRvbid0IGZpbmQg
YWxsIGJ5dGVjb2RlIHJhbmdlcyB0aGF0IGFyZSB1bnJlYWNoYWJsZS4KLSAgICAgICAgICAgIC8v
IEluc3RlYWQsIHdlIGp1c3QgZmluZCB0aGUgbWluaW11bSBieXRlY29kZSBvZmZzZXQgdGhhdCBp
cyByZWFjaGFibGUsIGFuZAotICAgICAgICAgICAgLy8gY29tcGlsZSBjb2RlIGZyb20gdGhhdCBi
eXRlY29kZSBvZmZzZXQgb253YXJkcy4KLQotICAgICAgICAgICAgQnl0ZWNvZGVHcmFwaCBncmFw
aChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKLSAgICAgICAgICAg
IEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVj
b2RlT2Zmc2V0KG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChibG9jayk7Ci0KLSAgICAgICAgICAgIEdyYXBoTm9kZVdvcmts
aXN0PEJ5dGVjb2RlQmFzaWNCbG9jayo+IHdvcmtsaXN0OwotICAgICAgICAgICAgc3RhcnRCeXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgd29ya2xpc3QucHVzaChi
bG9jayk7Ci0KLSAgICAgICAgICAgIHdoaWxlIChCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0g
d29ya2xpc3QucG9wKCkpIHsKLSAgICAgICAgICAgICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KHN0ZDo6bWluKHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgYmxvY2st
PmxlYWRlck9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNz
b3JJbmRleCA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpCi0gICAgICAgICAgICAgICAgICAgIHdvcmts
aXN0LnB1c2goJmdyYXBoW3N1Y2Nlc3NvckluZGV4XSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBB
bHNvIGFkZCBjYXRjaCBibG9ja3MgZm9yIGJ5dGVjb2RlcyB0aGF0IHRocm93LgotICAgICAgICAg
ICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+
bGVhZGVyT2Zmc2V0KCk7IGJ5dGVjb2RlT2Zmc2V0IDwgYmxvY2stPmxlYWRlck9mZnNldCgpICsg
YmxvY2stPnRvdGFsTGVuZ3RoKCk7KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGlu
c3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChhdXRvKiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmhhbmRsZXJGb3JC
eXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGdyYXBoLmZpbmRCYXNpY0Jsb2NrV2l0aExl
YWRlck9mZnNldChoYW5kbGVyLT50YXJnZXQpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ynl0ZWNvZGVPZmZzZXQgKz0gaW5zdHJ1Y3Rpb24tPnNpemUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
IAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8
IGluc3RydWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4LDEyICsyNzUsMTUgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9u
czo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewotICAgICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQ
cm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNv
ZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG9wY29kZUlEICE9IG9w
X2NhdGNoKQorICAgICAgICAgICAgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CisKICAgICAg
ICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzKQogICAg
ICAgICBERUZJTkVfU0xPV19PUChsZXNzZXEpCkBAIC01MjcsNyArNTI3LDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0
VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2Rl
SW5kZXgpLnB0cigpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkK
ICAgICAgICAgICAgIGRhdGFMb2dMbigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBm
b3IgIiwgbV9ieXRlY29kZUluZGV4LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgp
KTsKQEAgLTU0NSw4ICs1NDUsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQogCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0
aW9uKCkpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9j
b2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0
eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxG
cmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsi
LCBieXRlY29kZU9mZnNldCwgIl0gU0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2Zy
ICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9CkBAIC02MDMsNyArNjAzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV92YWwp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfaWQpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9zdWIpCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZnJv
bV9zY29wZSkKICNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcHV0X3RvX3Nj
b3BlKQpAQCAtNjc0LDU1ICs2NzQsNTUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCkKICNlbmRpZgogfQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRD
b25zdGFudFBvb2xSZWdpc3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBD
b2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVn
VDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZz
ZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVT
YXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVn
aXN0ZXJzKCkpOworfQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemlu
ZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2
ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgREZHOjpDYXBh
YmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwo
KTsKICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAg
ICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXpl
ZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxz
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBE
Rkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVl
OwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9z
aG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIAotICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKLSAgICBj
YXNlIEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1bGVDb2RlOgotICAgIGNhc2UgRXZhbENvZGU6
Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAgICAgICAgLy8gV2UgY291
bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVu
aW5saW5lYWJsZSBjYWxsLgotICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0
aW9uLgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2Fu
SW5saW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwot
ICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
dHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2st
PmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxT
aW1wbGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRh
YmxlcygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdK
dW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRh
YmxlcygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3
aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJs
b2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9z
d2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2Vk
Q29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZl
Y3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5r
ZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShP
cHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
ICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAg
IG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2Nr
KTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9y
UHJvZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBv
ZmYgb2YgVW5saW5rZWRDb2RlQmxvY2suCisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVu
aXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KICAgICBp
ZiAoVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBG
SVhNRTogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiBVbmxpbmtlZENvZGVCbG9jay4K
ICAgICAgICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3IFByb2Zp
bGVyOjpDb21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9jayksCisgICAgICAgICAgICAgICAg
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxl
ZENvZGVCbG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAg
ICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJv
ZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENv
ZGVCbG9jayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFw
cGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CkBAIC03NDIs
MTEgKzc0MiwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAg
ICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7
CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
KQorICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExh
YmVsIGJlZ2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQg
ZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFt
ZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAt
NzU3LDE2ICs3NTgsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bgogICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVt
aXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lz
dGVycygpOworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0
ZXJzKCk7CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
KSB7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVu
dCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVu
dCkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV91bmxpbmtlZENv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygp
ICsgRml4ZWRWZWN0b3I8VmFsdWVQcm9maWxlPjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7
CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1f
dW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAg
ICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1
dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwogICAgICAgICAgICAgICAgIC8vIGtlZXAg
dGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0
aGUgZHVtbXkgdmFsdWUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0
cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQorICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNzc3LDEyICs3ODIsMTIgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAg
IGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
CiAgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNl
dCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50
YWdHUFIoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJl
Z3MpOworICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdU
MiwgYXJndW1lbnQgKiBzaXplb2YoVmFsdWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0
T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBl
KCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVC
bG9jay0+aml0VHlwZSgpKSk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAg
ICAgIG1fdm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIp
LCAqdGhpcyk7CkBAIC03OTksMjQgKzgwNCwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtX
aXRob3V0RmluYWxpemluCiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsK
ICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJy
b3IsIG1fY29kZUJsb2NrKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxG
cmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3Is
IHJlZ1QwKTsKIAogICAgIC8vIElmIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBu
ZXZlciByZXF1aXJlIGFyaXR5IGZpeHVwLgotICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0g
bV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAhPSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+
Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAg
Ym9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkgIT0gMTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBG
dW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVj
ayA9IGxhYmVsKCk7Ci0gICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9j
ay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQpOworCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xv
Z3VlKCk7Ci0gICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJ
blByb2xvZ3VlKHJlZ1QwKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVz
cyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAK
ICAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpLCByZWdUMSk7Ci0gICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVn
VDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJl
Z2luTGFiZWwsIHRoaXMpOworICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBU
cnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1Rv
KGJlZ2luTGFiZWwsIHRoaXMpOwogCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgoMCk7CiAKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQog
ICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2Rl
QmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBv
cGVyYXRpb25DYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpb24obV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3Rvcigp
ID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNr
LCBhcmd1bWVudEdQUjApOwogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIo
WmVybywgcmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTgzOSw3
ICs4NDcsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAg
ICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1
bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1
ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywg
bV91bmxpbmtlZENvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVm
Zm9ydCkpOwogICAgIGxpbmsoKTsKIH0KIApAQCAtODU4LDggKzg2Niw4IEBAIHZvaWQgSklUOjps
aW5rKCkKICAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewogICAgICAgICBjYXNlIFN3aXRj
aFJlY29yZDo6SW1tZWRpYXRlOgogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVy
OiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
LSAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRT
aW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAg
ICAgICAgICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
PEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0
T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRU
YWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBvZmZzZXQgPSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3MSw4
ICs4NzksOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3
aXRjaFJlY29yZDo6U3RyaW5nOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFi
bGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0
aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVs
c1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBm
b3IgKGF1dG8mIGxvY2F0aW9uIDogdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygp
KSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hP
ZmZzZXQ7CkBAIC05MDYsNiArOTE0LDI3IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIHJlY29yZC5jYWxsZWUpOwogICAgIH0KIAor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2Vu
ZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAg
ICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAgICAgICB9
CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFsaXplSUNz
KG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMpOworICAg
IGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlWYWxzKTsK
KyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFs
cyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlW
YWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKKyNlbHNlCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMo
bV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0
QnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlk
c1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7CkBAIC05MTcsMjEgKzk0NiwyNSBAQCB2b2lkIEpJVDo6
bGluaygpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIp
OwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsK
ICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1
ZmZlcik7CisjZW5kaWYKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxs
Q29tcGlsYXRpb25JbmZvKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgVW5saW5rZWRD
YWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZv
OworICAgICAgICBpbmZvLmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJ
bnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbik7CisjZWxzZQogICAg
ICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsK
ICAgICAgICAgaW5mby5zZXRDb2RlTG9jYXRpb25zKAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFy
dCksCiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+
KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pKTsKKyNlbmRpZgorCiAgICAgfQogCi0gICAg
ewotICAgICAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJl
bHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxk
ZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAg
ICB9Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVy
LmZpbmFsaXplKCkpOworICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOwor
ICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1f
bGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5h
cHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDI2
ICs5NzMsNDIgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWSht
X2NvbXBpbGF0aW9uKSkgeworICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIG1ha2UgdGhlIGJ5
dGVjb2RlIHByb2ZpbGVyIGtub3cgYWJvdXQgVW5saW5rZWRDb2RlQmxvY2s/CiAgICAgICAgIGlm
IChPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkKICAgICAgICAgICAg
IG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fY29tcGlsYXRpb24uZ2V0KCksIHBh
dGNoQnVmZmVyKTsKLSAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21w
aWxhdGlvbihtX2NvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOworICAgICAgICBtX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcHJvZmlsZWRDb2RlQmxvY2ssICpt
X2NvbXBpbGF0aW9uKTsKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIuZGlkQnVpbGRNYXBwaW5nKCkpCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtl
VW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyKSwgcGF0Y2hCdWZmZXIpOwogICAgIAorICAgIC8vIEZJWE1FOiBNYWtlIGEgdmVyc2lvbiBv
ZiBDb2RlQmxvY2tXaXRoSklUVHlwZSB0aGF0IGtub3dzIGFib3V0IFVubGlua2VkQ29kZUJsb2Nr
LgogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAg
ICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQg
Y29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBj
b2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3Byb2ZpbGVkQ29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29k
ZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgQmFz
ZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2spKTsKKworICAgIG1faml0Q29kZS0+
bV91bmxpbmtlZENhbGxzID0gV1RGTW92ZShtX3VubGlua2VkQ2FsbHMpOworICAgIG1faml0Q29k
ZS0+bV9ldmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7Cisg
ICAgbV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0gV1RGTW92ZShtX3VubGlua2VkU3R1
YkluZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9z
d2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
cyA9IFdURk1vdmUobV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1f
aml0Q29kZU1hcCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCk7CisgICAgbV9qaXRDb2Rl
LT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNzKTsKKyAgICBtX2ppdENvZGUtPm1fY29uc3RhbnRQb29s
ID0gV1RGTW92ZShtX2NvbnN0YW50UG9vbCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtX2pp
dENvZGUtPm1faXNTaGFyZWFibGUgPSBtX2lzU2hhcmVhYmxlOworI2Vsc2UKKyAgICBtX2ppdENv
ZGUtPm1faXNTaGFyZWFibGUgPSBmYWxzZTsKKyNlbmRpZgogCiAgICAgaWYgKEpJVEludGVybmFs
Ojp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBh
dCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5z
dGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVu
dGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAl
cCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxl
TWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnko
KS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6Zmlu
YWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFp
blRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXND
b21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICsxMDE3LDE0IEBAIENvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFp
blRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2Nr
LT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7
Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVy
T2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8mIGhhbmRs
ZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8gRklYTUU6
IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9
IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFy
Z2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9Ci0KICAgICBp
ZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2Rl
T3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX2ppdENv
ZGUtPm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApOwog
CiAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklU
LT5hZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8K
LSAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6
ZSgpKSk7CisgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CiAKLSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2pp
dENvZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtl
ZEJhc2VsaW5lQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4g
Q29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQpAQCAtOTk4LDExICsxMDM2LDExIEBAIHNpemVfdCBK
SVQ6OmNvZGVTaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9
CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0KQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGRv
TWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbmcoZWZmb3J0KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJl
YWQoKTsKKyAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxOCAr
MTA4MCwyOCBAQCB2b2lkIEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAg
ICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlBy
ZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJh
bWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpm
cmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxz
KCkpID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsK
IAogICAgIHJldHVybiByb3VuZExvY2FsUmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNl
dChjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGxJblJlZ2lzdGVycyk7CiB9CiAKLWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihD
b2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9y
KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBmcmFtZVJlZ2lzdGVyQ291bnRG
b3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKworaW50IEpJVDo6c3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0
dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxv
Y2spIC0gMSkub2Zmc2V0KCk7CiB9CiAKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihD
b2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKIEhhc2hNYXA8Q1N0cmluZywg
U2Vjb25kcz4gSklUOjpjb21waWxlVGltZVN0YXRzKCkKIHsKICAgICBIYXNoTWFwPENTdHJpbmcs
IFNlY29uZHM+IHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsNyBAQAogCiAjZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwg
ZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9m
ZnNldCBcIiVzXCIgc2hvdWxkIGJlICVkLCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19j
YXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCisjaW5jbHVk
ZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
Q29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCkBAIC00NCw2
ICs0NSw3IEBACiAjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlm
dEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCisjaW5jbHVkZSAiTExJ
bnREYXRhLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVz
ZWRQb2ludGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsxNTEs
MTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRp
b25JbmZvIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZv
OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50
OworI2Vsc2UKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAg
ICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOworI2VuZGlmCiAgICAgfTsKIAogICAg
IHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCi0gICAgY2xhc3Mg
SklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICBj
bGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBKSVRTdHViQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFRodW5rczsKQEAgLTE3MSw2
ICsxNzgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUg
ZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zm
c2V0LgogICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zm
c2V0ID0gMjU2OwogCisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAg
IHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2Rl
SW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAg
ICAgICAgfkpJVCgpOwpAQCAtMTc4LDI4ICsxODcsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6dm0oKTsgfQogCiAgICAgICAg
IHZvaWQgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9y
dCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFkKCk7Cisg
ICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayop
OwogICAgICAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGRvTWFp
blRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgICAgICAKICAgICAgICAgc3Rh
dGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zm
c2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJ
VCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsK
KyAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnBy
aXZhdGVDb21waWxlKGNvZGVCbG9jaywgZWZmb3J0KTsKICAgICAgICAgfQogCisgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsK
ICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sq
KTsKKyAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2Rl
QmxvY2sqKTsKICAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJs
b2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmlu
ZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBpbGVUaW1lKCk7CiAKKyAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0YUdQUiA9IExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRh
VGFibGVHUFI7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfY29uc3RhbnRzR1BS
ID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFI7CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lk
IHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxp
bmtQYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKICAgICAg
ICAgdm9pZCBsaW5rKCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxl
KEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0
ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCiAgICAgICAgIC8v
IEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNr
LgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2ICsyMzcsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIH0KICNlbmRpZgogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAg
ICAgICAgdm9pZCBsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9m
ZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zm
c2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5
cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBl
LCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcs
IGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICBwdWJs
aWM6CisgICAgICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQ
UlJlZyk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJl
Zyk7CisgICAgICAgIHZvaWQgbG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3Rlciwg
R1BSUmVnKTsKKworICAgICAgICB2b2lkIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1
ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOworCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2so
SnVtcCBqdW1wVG9IYW5kbGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNo
ZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7CkBAIC0yNTQsNiArMjk0LDE5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9J
bmRleCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CisgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0g
b3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwor
ICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9w
OjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKKyAgICAgICAgLCB2
b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
PgorICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAorICAgICAgICAgICAgT3A6Om9wY29kZUlEID09
IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MK
KyAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBP
cDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCisgICAgICAgICwg
dm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKKyNlbHNlCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29k
ZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3Zh
cmFyZ3MKQEAgLTI2NSw5ICszMTgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25z
dHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMKICAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5r
SW5mbyopOworI2VuZGlmCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAg
IGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBP
cCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
ICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4NywxNCArMzQxLDEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVt
aXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3du
ZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAogICAg
ICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdU
MCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZh
bHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2Rl
JiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNl
CiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1Zh
bHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBAIC0zMDUsOCArMzU4
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
c2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZh
bHVlLCB2b2lkPgogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29k
ZShPcCBieXRlY29kZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0
Y2hHUFIpOwotICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdp
c3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNj
cmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAg
IHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVn
aXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgcHRyZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIs
IFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAgLTU5Myw3ICs2NDgsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3Bf
aGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CkBAIC02MTEsNyArNjY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwotI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogI2VuZGlmCiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjI3LDE0ICs2ODEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCiAg
ICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUp
OwotICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBB
Y2Nlc3NUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lz
dGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwg
QWNjZXNzVHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZv
aWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0
IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNo
ZWNrKFJlc29sdmVUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBlbWl0VmFy
UmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwogICAgICAgICB2
b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsK
ICAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBA
IC02NDYsNyArNzAwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgdm9pZCBl
bWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
KTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOwotICAgICAg
ICB2b2lkIGVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KTsKKyAgICAgICAgdm9p
ZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogICAgICAg
ICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwogICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJl
VmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwpAQCAtNjU1LDYgKzcwOSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lz
dGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgICAgICBib29sIGlzS25vd25DZWxs
KFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKFZp
cnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJl
Z2lzdGVyKTsKQEAgLTY3NiwxMyArNzMxLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNf
cHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mKTsKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRf
cHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X2J5X2lkX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0m
KTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
c2xvd19vcF9wdXRfdG9fc2NvcGVHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2Vu
ZXJhdG9yKFZNJik7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gb3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9o
YW5kbGVyR2VuZXJhdG9yKFZNJik7CkBAIC02OTYsMzIgKzc0OSwxNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNv
bHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFy
KTsKICAgICAgICAgfQogCi0jZGVmaW5lIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9S
KHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihW
TSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9HRVRfRlJPTV9TQ09Q
RV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQot
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKLQot
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29w
ZShSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gTW9k
dWxlVmFyIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gZW1pdCBpbmxpbmUgdGhhbiB1
c2UgYSB0aHVuay4KLSAgICAgICAgICAgIC8vIFJlc29sdmVkQ2xvc3VyZVZhciBiZWNhdXNlIHdl
IGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9wX3Jlc29sdmVfc2NvcGUuCi0gICAgICAgICAg
ICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBSZXNvbHZlZENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gTW9kdWxlVmFyKTsKLSAgICAgICAgfQotCi0jZGVmaW5lIERFQ0xBUkVfUkVTT0xWRV9T
Q09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBl
IyNHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVf
UkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVu
a05hbWUpOwotCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1RydXRoeUdlbmVyYXRvcihW
TSYpOwogCiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKKyAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJv
bV9zY29wZUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsK
KyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2Vu
ZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4s
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYsIHN0
ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworCiAgICAg
ICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGl0ZXIrKy0+ZnJvbTsKQEAgLTc2MCwx
MCArNzk3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2
b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3Ms
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgQWRk
cmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwg
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29u
c3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAg
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlw
ZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjEsMjAgKzg1OCwyMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7CiAgICAgICAg
IH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0
aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0
ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3Vs
dCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFBy
b2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5
dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4g
QXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUg
Qnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVu
Y3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQs
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyB0YXJnZXQs
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAg
ICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0
LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRyZXNzKEdQUkluZm86
Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
Ynl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJl
c3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25U
eXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTE5LDI1ICs5NTYsMjIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgp
IHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXpl
ZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAg
ICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmls
aW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGll
cmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxs
IGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkg
eyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgZW1pdE1hdGVyaWFsaXpl
TWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAgICAgICB2b2lkIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxl
VGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAg
ICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBt
ZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVu
dCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhp
cy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUg
cmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dElu
Zm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0g
ICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOwor
CisgICAgICAgIHZvaWQgcmVzZXRTUCgpOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVy
cHJldGVyOwogCkBAIC05NjQsOSArOTk4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJl
Y29yZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4g
bV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJp
dGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9l
eGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENh
bGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEwMDAs
MTEgKzEwMzEsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5z
dHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlv
blRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXpl
ZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29s
IG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0
Q29kZTsKKyAgICAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9
OworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxw
dHIgfTsKKworICAgICAgICBNYXRoSUNIb2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8
QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENvZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1f
Y29uc3RhbnRQb29sOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFs
T2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsK
KyAgICAgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAg
ICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAgICBG
aXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAg
Rml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisK
KyAgICAgICAgc3RydWN0IE5vdEFDb2RlQmxvY2sgeyB9IG1fY29kZUJsb2NrOworCisgICAgICAg
IGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hh
cihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFy
Z3VtZW50R1BSMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVu
dEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MzIwLDcgKzMyMSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkK
ICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJl
Z1QwLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZl
cnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogfQogCkBAIC01NzMsNyArNTc3LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KGNvbnN0IAogCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVt
aXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0
YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIyLDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3Vi
bGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJVE5lZ0lD
KiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJQyk7CiAg
ICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZh
bHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0
aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9u
QXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAtODk5LDggKzkw
NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0g
ICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmls
ZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0
aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0
aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsK
IH0KQEAgLTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFy
eU1hdGhJQzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRl
SW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVk
SW5saW5lQ29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
bWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNo
R1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNy
Y1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0
aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQ
Uiwgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAxNSwxMCArMTAyMSwxMSBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJp
Z2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNj
cmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hH
UFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVm
dFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChu
b25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmln
aHRSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEzICsxMDYyLDE0IEBAIHZvaWQgSklU
OjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0
UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRT
bG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdU
NCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywg
YXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZElt
bVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRp
b25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBU
cnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAg
YXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIwLDEzICsxMTI4LDE0IEBAIHZvaWQg
SklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hv
dWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdz
LCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5j
dGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmls
ZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25f
R0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pK
TWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRT
KQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsxMTc1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAg
YXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAgIFNuaXBwZXRPcGVyYW5k
IGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBw
ZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7
CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1
Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
JmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1f
YXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRN
dWxJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3Mu
YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRk
KGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPiht
dWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVy
YXRpb25WYWx1ZU11bCk7CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbXVsKGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRh
dGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1f
Y29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRTdWJJQyog
c3ViSUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCkpOwogICAgIGVtaXRTdG9yZShkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QxLCByZWdUMCk7CiB9CiAK
QEAgLTE1Nyw3ICsxNTcsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogSklUOjpjb21waWxlU2V0dXBG
cmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiB7CiAgICAgdW5zaWduZWQg
Y2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBpbnQgYXJn
Q291bnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2lu
dCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oc3RhY2tPZmZz
ZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpKTsKIApAQCAtMTkyLDcg
KzE5Miw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAg
ICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7
CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9y
VmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgLWZpcnN0RnJlZVJlZ2lz
dGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9u
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRW
YXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsK
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNiAqIHNpemVvZih2
b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0yMDIsNyArMjAyLDcg
QEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1
cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVs
c2UKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsK
LSAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDQpLCBmaXJzdFZhckFyZ09mZnNl
dCwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0
KSwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KQEAgLTIzMiwxMCAr
MjMyLDEwIEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwogICAgIHN0b3JlUHRy
KGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1l
T2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBy
ZWdUMSwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwogCiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2
YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5r
SW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5m
byA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJl
Z1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBAIC0y
NTgsOCArMjU4LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAog
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKIAogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKLSAg
ICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5m
byk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUp
OwpAQCAtMjg2LDExICsyODYsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5z
dHJ1Y3RpbwogICAgICovCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKICAgICBp
ZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2st
PmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgICAgICBp
bmZvID0gbV9wcm9maWxlZENvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSk7CiAgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOwog
ICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwg
d2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgogICAgIAotICAgIGF1dG8gYnl0ZWNvZGVJ
bmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKKyAgICBhdXRv
IGJ5dGVjb2RlSW5kZXggPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3Ry
dWN0aW9uKTsKICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVj
b2RlSW5kZXgpLmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMp
LCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAg
ICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7IC8vIHJlZ1QxLCByZWdUMCBob2xkcyBj
YWxsZWUuCkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91
bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDEyICszNDEsMTEg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKICAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRo
KCptX3ZtLCAqdGhpcyk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cykgewpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5s
aW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsNyAr
Mzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIEpT
VmFsdWVSZWdzIG5leHRSZWdzID0gSlNWYWx1ZVJlZ3ModGFnTmV4dEdQUiwgcGF5bG9hZE5leHRH
UFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LAorICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLAogICAgICAgICBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwKICAgICAgICAgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCkBAIC00
MTAsNyArNDA5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBuZXh0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgbmV4dFJlZ3MpOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBuZXh0UmVncyk7CiAKICAgICBmYXN0
Q2FzZS5saW5rKHRoaXMpOwpAQCAtNDQwLDEwICs0MzksMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIC8vIG1ldGFkYXRhCisgICAgICAgIGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCAvLyBtZXRhZGF0YQogICAgICAgICBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgogICAgICAgICBuZXh0VlJlZywg
Ly8gcmVzdWx0Ci0gICAgICAgIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgLy8gYXJnMQorICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQogICAgICAgICBnZW4uc3R1YkluZm8oKSwgLy8gYXJn
MgogICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVyYXRvckdQUiwgcGF5bG9hZEl0ZXJhdG9yR1BS
KSwgLy8gYXJnMwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOyAvLyBhcmc0CkBAIC00NTIsNyArNDUxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIGF1dG8gZG9u
ZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9
CkBAIC00NjAsNyArNDU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4o
Y29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewog
ICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNhc2UgTmFy
cm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC01MDYsNyArNTA1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBw
cmVzZXJ2ZWRSZWdzLmFkZCh0YWdWYWx1ZUdQUik7CiAgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRk
KHBheWxvYWRWYWx1ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssCisgICAgICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLAog
ICAgICAgICAgICAgSklUVHlwZTo6QmFzZWxpbmVKSVQsCiAgICAgICAgICAgICBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCkBAIC01MzMsMTAgKzUzMiwxMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoMSA9IHJlZ1Q2OwogICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUNzsKICAgICAgICAg
Y29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAg
ICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFs
dWVSZWdzKHRhZ0RvbmVHUFIsIHBheWxvYWREb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUg
PSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh0YWdEb25lR1BSLCBwYXlsb2FkRG9u
ZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSk7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2Nv
ZGVCbG9jaywKKyAgICAgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssCiAgICAgICAgICAgICBK
SVRUeXBlOjpCYXNlbGluZUpJVCwKICAgICAgICAgICAgIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwKICAgICAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpKSwKQEAgLTU4OCwxMCArNTg3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAot
ICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQor
ICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIC8vIG1l
dGFkYXRhCiAgICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlv
bgogICAgICAgICAgICAgZG9uZVZSZWcsIC8vIHJlc3VsdAotICAgICAgICAgICAgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCisgICAgICAgICAgICBU
cnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJn
MQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKICAgICAgICAgICAgIEpTVmFs
dWVSZWdzKHRhZ0l0ZXJSZXN1bHRHUFIsIHBheWxvYWRJdGVyUmVzdWx0R1BSKSwgLy8gYXJnMwog
ICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
ZmllcihpZGVudCkucmF3Qml0cygpKTsgLy8gYXJnNApAQCAtNjAyLDcgKzYwMSw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0LmxpbmsodGhp
cyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElz
Tm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9i
amVjdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkp
OwogICAgIH0KIAogICAgIHsgICAKQEAgLTYxOCwxMCArNjE3LDEwIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KAotICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0
YQorICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIC8v
IG1ldGFkYXRhCiAgICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJh
dGlvbgogICAgICAgICAgICAgdmFsdWVWUmVnLCAvLyByZXN1bHQKLSAgICAgICAgICAgIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICAg
ICAgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8v
IGFyZzEKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLCAvLyBhcmcyCiAgICAgICAgICAgICBK
U1ZhbHVlUmVncyh0YWdJdGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFy
ZzMKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhD
YWxsLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2Fs
bFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSku
dmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4IEBAIHN0ZDo6
ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBj
aGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJ
bmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNo
ZWNrcG9pbnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0
YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKKwog
ICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0
ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJl
Z1QwKTsKICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QwKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBj
aGVja3BvaW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9y
ZTMyVG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9m
Q2FsbExpbmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUo
KSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0ZDo6ZW5hYmxl
X2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNv
ZGUsIENhbGxMaW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3Am
IGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50
KQogewogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7
CkBAIC05MSw3ICs5Miw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVj
b2QKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRB
cmd1bWVudHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6
ZUZyYW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVS
ZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDAp
OworICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RG
cmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigt
Zmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhp
cywgcmV0dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJVDo6Y29tcGls
ZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBv
cGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNl
dHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJh
dGlvbihzZXR1cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwg
cmVnVDMsIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBj
b3VudC4KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsg
UGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9
IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8t
PmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25z
dGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
KSksIHJlZ1QzKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMs
IHJlZ1QyKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86
Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dl
c3QubGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywx
NiArMTMxLDE1IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxh
dGU8PgogYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29k
ZSkKIHsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwot
ICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6
OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFy
Z3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlZ1QxLCByZWdUMik7CisgICAgcmVzZXRTUCgpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVj
b2RlKTsKIApAQCAtMTQ4LDcgKzE1MSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyog
aW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFk
ZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxs
TGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRl
Y29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE1OSw0NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNl
dCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1
YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgq
bV92bSwgaW5mbyk7CisgICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0
ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFp
bENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKK2Jvb2wgSklUOjpjb21w
aWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVt
cGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRl
Y29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK2Jv
b2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlu
a2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxsRnJh
bWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdz
ID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0g
R1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0K
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0g
bWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVt
UGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFyYW1l
dGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICBzaHVmZmxl
RGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAg
ICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0
YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5hcmdzLnJl
c2l6ZShieXRlY29kZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRl
Y29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAg
ICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlz
cGxhY2VkSW5KU1N0YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAgICAgICBE
YXRhRm9ybWF0SlMpOwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAgICAgICBW
YWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVmZmxlRGF0
YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8tPnNldEZy
YW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBW
YWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0
YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMg
PSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlu
a0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigq
dGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRDb25zdGFu
dChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9
IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCBy
ZWdUMiwgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0
YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1Bh
dGhzKTsKKworICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8tPmZyYW1l
U2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9uZUxvY2F0
aW9uID0gbGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIxOCwxNCArMjI1LDI1
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBD
YWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIg
cmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0gICAgQ2Fs
bExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9l
dmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBp
bmZvKTsKKworICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOworICAgIGlm
IChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgaW5mbyA9IG1fdW5saW5rZWRD
YWxscy5hZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9w
Y29kZUlEKTsKKworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOworCisgICAgICAgIEFTU0VS
VChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAg
ICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkp
OworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnVubGlu
a2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFudDsKKyAg
ICB9CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7CiAKICAg
ICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdp
dGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBt
X2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7Ci0gICAgdWludDMyX3QgbG9j
YXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7CisgICAgdWlu
dDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLmJpdHMo
KTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBZGRyZXNzKGNhbGxG
cmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQpKTsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNh
bGxlZS4KQEAgLTIzNCwxNiArMjUyLDEyIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2Fs
bExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxU
eXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBl
bmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAgICBpZiAoY29tcGlsZVRh
aWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCisgICAgaWYgKGNvbXBp
bGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgsIGluZm9Db25zdGFu
dCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGxvYWRDb25zdGFudChpbmZvQ29uc3RhbnQsIHJl
Z1QyKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGF1dG8gc2xv
d1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAgICAgYXV0byBzbG93UGF0
aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdU
MCwgcmVnVDIsIFsmXSB7CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAg
ICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKICAgICAgICAgfSk7CkBA
IC0yNTMsMTQgKzI2NywxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVj
dGlvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8t
PmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJ
Qzo6WWVzKTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFi
ZWwoKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIHJlc2V0U1Ao
KTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KQEAgLTI3MywyMSArMjg2
LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdz
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAq
dGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlz
LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJv
bVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgcmVzZXRTUCgpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRl
Y29kZSk7CkBAIC0zOTUsMTcgKzQwNywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9v
cGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3Bl
cnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAs
IGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0
YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJ
ZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5h
ZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOwor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsK
KyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVk
IHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4
dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwog
fQpAQCAtNDE2LDEwICs0NDIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQ
UiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmpl
Y3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsK
ICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBA
IC00MzIsMTkgKzQ1NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihj
b25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
IHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JH
UFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRl
bnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRl
cmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBh
dXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJh
dG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhp
cyk7CiB9CkBAIC00NTIsNyArNDc0LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9y
X29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsK
ICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5h
cnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0
OTEsNzkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1
bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIy
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVy
aWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0
ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAg
bG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRP
ZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9N
ZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0
T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNl
ZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlv
biwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgp
OwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1Qw
CiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQ
UiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3Vs
dEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAg
bW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3Rl
eHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
ZG9udENsb2JiZXJSZWdpc3RlcjsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJl
c3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdz
ID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVz
ZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJD
YWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUu
aW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIp
LCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAg
ICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25l
LmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1
YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAg
ICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUs
IHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICAgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgZG9uZUdQ
UiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRv
bmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAg
ICAgewotICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKLSAgICAgICAgR1BSUmVnIHNj
cmF0Y2gyID0gcmVnVDM7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9uZUdQ
UiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Ig
c2NyYXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
ID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAg
ICAgR1BSUmVnIGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRo
eSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1Qw
LCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsK
KyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpT
VmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsKKworICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGJhc2VH
UFIpOwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnBy
b3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCByZWdUNCwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0
byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRH
UFIpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01Mjcs
NTkgKzU3Nyw1NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNr
cG9pbnQoanVtcCgpKTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisKICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgIHsK
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAg
ICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCiAgICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2Jq
ZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RP
YmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCiAgICAg
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5p
bXBsKCk7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107CiAgICAgICAgIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0
ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVj
dChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJ
bmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxk
ZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygp
KTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
LQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCByZWdUMSk7Ci0gICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOworICAg
ICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+
KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
ZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBkb25lR1BSKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5v
dE9iamVjdC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93
SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9i
amVjdCwgYXJndW1lbnRHUFIwKTsKICAgICB9CiAKICAgICB7ICAgCiAgICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRl
Y29kZS5tX3ZhbHVlOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCiAg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFs
dWUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
W21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsK
LSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3Mo
R1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgICAgICBtb3ZlKGl0
ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBB
ZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgdmFsdWVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50KS5yYXdCaXRzKCkpOworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICsz
MiwxMSBAQAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJl
Z2lzdGVyU2V0LmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIFBDVG9Db2RlT3JpZ2lu
TWFwOworCiBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIENvbW1vbkRhdGE7CiBjbGFzcyBKSVRDb2Rl
OwpAQCAtMTU5LDEwICsxNjIsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0
YUlDKEpJVFR5cGUgaml0VHlwZSkKICAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0
YUlDKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjpp
c0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAg
fQogCkBAIC0yMjMsNiArMjI2LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1NoYXJlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2hhcmVBdHRyaWJ1dGUgPT0gU2hhcmVBdHRyaWJ1dGU6OlNoYXJlZDsg
fQogCisgICAgdmlydHVhbCBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSB7
IHJldHVybiBudWxscHRyOyB9CisKIHByaXZhdGU6CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAg
ICAgU2hhcmVBdHRyaWJ1dGUgbV9zaGFyZUF0dHJpYnV0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCShyZXZpc2lvbiAyODMwNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCB2b2lkIEpJVENvbXBpbGF0aW9uS2V5OjpkdW1w
KFByaW50U3RyZWFtCiAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIG91dC5wcmludCgiKENvbXBpbGUgb2YgIiwgKm1fcHJvZmlsZWRCbG9j
aywgIiB3aXRoICIsIG1fbW9kZSwgIikiKTsKKyAgICBvdXQucHJpbnQoIihDb21waWxlIG9mICIs
IFJhd1BvaW50ZXIobV9jb2RlQmxvY2spLCAiIHdpdGggIiwgbV9tb2RlLCAiKSIpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29t
cGlsYXRpb25LZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvbXBpbGF0aW9uS2V5LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNTcgKzMw
LDU2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBDb2Rl
QmxvY2tTZXQ7CitjbGFzcyBKU0NlbGw7CiAKIGNsYXNzIEpJVENvbXBpbGF0aW9uS2V5IHsKIHB1
YmxpYzoKICAgICBKSVRDb21waWxhdGlvbktleSgpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2Nr
KG51bGxwdHIpCisgICAgICAgIDogbV9jb2RlQmxvY2sobnVsbHB0cikKICAgICAgICAgLCBtX21v
ZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb24pCiAgICAgewogICAgIH0K
ICAgICAKICAgICBKSVRDb21waWxhdGlvbktleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIpCisgICAgICAgIDogbV9jb2Rl
QmxvY2sobnVsbHB0cikKICAgICAgICAgLCBtX21vZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpERkcp
CiAgICAgewogICAgIH0KICAgICAKLSAgICBKSVRDb21waWxhdGlvbktleShDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQotICAgICAgICA6IG1fcHJvZmls
ZWRCbG9jayhwcm9maWxlZEJsb2NrKQorICAgIEpJVENvbXBpbGF0aW9uS2V5KEpTQ2VsbCogcHJv
ZmlsZWRCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUpCisgICAgICAgIDogbV9jb2RlQmxv
Y2socHJvZmlsZWRCbG9jaykKICAgICAgICAgLCBtX21vZGUobW9kZSkKICAgICB7CiAgICAgfQog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAh
bV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRD
b21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuICFtX2NvZGVCbG9jayAmJiBtX21vZGUgPT0gSklU
Q29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CiAgICAgfQogICAgIAogICAgIGJv
b2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
ICFtX3Byb2ZpbGVkQmxvY2sgJiYgbV9tb2RlICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxp
ZENvbXBpbGF0aW9uOworICAgICAgICByZXR1cm4gIW1fY29kZUJsb2NrICYmIG1fbW9kZSAhPSBK
SVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKICAgICB9CiAgICAgCi0gICAg
Q29kZUJsb2NrKiBwcm9maWxlZEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9wcm9maWxlZEJsb2Nr
OyB9CiAgICAgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7
IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSklUQ29tcGlsYXRpb25LZXkmIG90
aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJvZmlsZWRCbG9jayA9PSBvdGhl
ci5tX3Byb2ZpbGVkQmxvY2sKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrID09IG90aGVyLm1f
Y29kZUJsb2NrCiAgICAgICAgICAgICAmJiBtX21vZGUgPT0gb3RoZXIubV9tb2RlOwogICAgIH0K
ICAgICAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBX
VEY6OnBhaXJJbnRIYXNoKFdURjo6UHRySGFzaDxDb2RlQmxvY2sqPjo6aGFzaChtX3Byb2ZpbGVk
QmxvY2spLCBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxKSVRDb21waWxhdGlvbk1v
ZGU+Ojp0eXBlPihtX21vZGUpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goV1RG
OjpQdHJIYXNoPEpTQ2VsbCo+OjpoYXNoKG1fY29kZUJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1
bmRlcmx5aW5nX3R5cGU8SklUQ29tcGlsYXRpb25Nb2RlPjo6dHlwZT4obV9tb2RlKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgot
ICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOworICAgIC8vIEVpdGhlciBDb2RlQmxvY2sq
IG9yIFVubGlua2VkQ29kZUJsb2NrKiBmb3IgYmFzbGVsaW5lIEpJVC4KKyAgICBKU0NlbGwqIG1f
Y29kZUJsb2NrOwogICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtX21vZGU7CiB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgog
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgog
CkBAIC00NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHVi
SW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAg
ICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhj
b2RlQmxvY2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRU
eXBlKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRT
dHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAg
IG1fc3R1YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5
cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2Fs
bFNpdGVJbmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9
IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3I6OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBz
bG93UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQog
ewogICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25l
TG9jYXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYs
MTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHVi
SW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHVi
Um91dGluZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNp
Z25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIG1fc3RhcnQgPSBqaXQu
bGFiZWwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBl
KSk7CisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGpp
dC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIG1f
ZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJh
dG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NU
eXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTEwLDcgKzEx
OCw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyBiYXNl
LCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUpCiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9y
aWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBz
dHViSW5mb0dQUikKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lLnVpZCgpID09
IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAgICwgbV9p
c0xlbmd0aEFjY2Vzcyhjb2RlQmxvY2sgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9j
ay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAgLTEyMCw2ICsx
MjgsMzcgQEAgdm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIGdl
bmVyYXRlRmFzdENvbW1vbihqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNp
emVGb3JMZW5ndGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNz
KCkpOwogfQogCisKKyNpZiBVU0UoSlNWQUxVRTY0KQorc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRC
eUlkSW5saW5lQWNjZXNzKEpJVCYgaml0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBiYXNl
LCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNl
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJ
bmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRj
aCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHJvcGVydHkoYmFz
ZSwgc2NyYXRjaCwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9
IGppdC5qdW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0
LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBm
aW5pc2hlZC5saW5rKCZqaXQpOworfQorCit2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQ
UlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQu
bG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlk
SW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
YmFzZSwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRp
ZgorCiBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIHZh
bHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJ
bmZvR1BSKQpAQCAtMTM4LDYgKzE3NywyMCBAQCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcjo6Z2VuZXJhCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpz
aXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBK
SVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBt
X3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBz
dHViSW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1Yklu
Zm9HUFIsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZUdl
dEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNS
ZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRp
ZgorCiBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVC
bG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMs
IENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3Mg
dmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIApAQCAtMTQ5LDYgKzIw
MiwzNiBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yCiAgICAgbV9z
dHViSW5mby0+dXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNoKTsKIH0KIAorI2lmIFVTRShKU1ZB
TFVFNjQpCit2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisK
KyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJ
bmZvLCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lz
dGVyczo6c2NyYXRjaDsKKyAgICBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRSZWdp
c3RlcnM6OnNjcmF0Y2gyOworICAgIEdQUlJlZyB2YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lz
dGVyczo6dmFsdWU7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJh
bmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhz
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSks
IHNjcmF0Y2gpOworICAgIGppdC5zdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwg
YmFzZSwgc2NyYXRjaCwgc2NyYXRjaDIpOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgp
OworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKEND
YWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGlu
aygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRpZgorCiB2b2lkIEpJ
VFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkK
IHsKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9w
ZXJ0eVJlcGxhY2UoKSk7CkBAIC0yMDAsNyArMjgzLDcgQEAgdm9pZCBKSVREZWxCeVZhbEdlbmVy
YXRvcjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZv
R1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8t
Pm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJ
VFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAg
ICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGpp
dC5sYWJlbCgpOwpAQCAtMjM2LDcgKzMxOSw3IEBAIHZvaWQgSklURGVsQnlJZEdlbmVyYXRvcjo6
Z2VuZXJhdGVGYXN0UGEKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7
Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHVi
Um91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVz
cyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZD
b2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1f
c2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFi
ZWwoKTsKQEAgLTI3MCw3ICszNTMsNyBAQCB2b2lkIEpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVy
YXRlRmFzdFBhCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAg
ICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRp
bmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9z
dHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0
cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQ
YXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7
CkBAIC0zMDAsNiArMzgzLDM0IEBAIHZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXQKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQ
cm9wZXJ0eUFjY2VzcygpKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCit2b2lkIEpJVEluQnlJ
ZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNp
Z25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFi
ZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKwor
ICAgIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BS
UmVnIHJlc3VsdCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgR1BSUmVn
IHNjcmF0Y2ggPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAg
IGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGpp
dC5ib3hCb29sZWFuKHRydWUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOworICAgIGF1dG8gZmlu
aXNoZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOwor
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwor
CisgICAgZmluaXNoZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30K
KyNlbmRpZgorCiBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpKSVRJbnN0YW5jZU9mR2VuZXJhdG9y
KAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LAogICAgIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIEdQUlJl
ZyBwcm90b3R5cGUsIEdQUlJlZyBzdHViSW5mb0dQUiwKQEAgLTMzMiw3ICs0NDMsNyBAQCB2b2lk
IEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzCiAgICAgbV9zdGFydCA9IGppdC5s
YWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1
YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVt
cChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwog
ICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7
CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0zNjgsNyArNDc5LDcgQEAgdm9pZCBKSVRH
ZXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwo
KTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZv
LT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNv
ZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9
IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAg
IG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtNDA1LDcgKzUxNiw3IEBAIHZvaWQgSklUUHV0QnlW
YWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAg
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9z
dHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRy
KCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNl
CiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2Rv
bmUgPSBqaXQubGFiZWwoKTsKQEAgLTQ0MCw3ICs1NTEsNyBAQCB2b2lkIEpJVFByaXZhdGVCcmFu
ZEFjY2Vzc0dlbmVyYXRvcjo6Z2VuCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwg
SklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0g
aml0LmxhYmVsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdp
bi5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvblZhbGlkYXRpb24uaCIKICNpbmNsdWRlICJKSVRP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQu
aCIKQEAgLTM4LDExICszOSwxMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJ
ZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNz
IEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVudW0gY2xhc3Mg
SklUVHlwZSA6IHVpbnQ4X3Q7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorc3RydWN0IEJhc2VsaW5l
RGVsQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBH
UFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUklu
Zm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5m
bzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86
OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVycyB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2Vs
aW5lR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2Ug
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9
IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BS
SW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUklu
Zm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsK
KyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAg
IC8vIFdlIHJlbHkgb24gdGhpcyB3aGVuIGxpbmtpbmcgYSBDb2RlQmxvY2sgYW5kIGluaXRpYWxp
emluZyByZWdpc3RlcnMgZm9yIGEgR2V0QnlWYWwgU3R1YkluZm8uCisgICAgc3RhdGljX2Fzc2Vy
dChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19h
c3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOwor
ICAgIHN0YXRpY19hc3NlcnQocmVzdWx0ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJl
c3VsdCk7CisgICAgc3RhdGljX2Fzc2VydChzdHViSW5mbyA9PSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mbyk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gy
ID0gR1BSSW5mbzo6cmVnVDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMg
PSBHUFJJbmZvOjpyZWdUNTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6YXJndW1lbnRH
UFIyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3RvID0gR1BSSW5mbzo6YXJndW1l
bnRHUFIzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6
YXJndW1lbnRHUFIxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BS
SW5mbzo6bm9uQXJnR1BSMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9
IEdQUkluZm86Om5vbkFyZ0dQUjE7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7
CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJ
bmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5m
bzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgZG9udENsb2JiZXJSZWdpc3RlciA9IEdQUkluZm86OnJlZ1QzOworfTsKKwor
c3RydWN0IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgdGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5
SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnNjcmF0Y2g7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJz
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3Ry
dWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZh
bHVlID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmls
ZSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOwor
ICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNl
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUklu
Zm86OnJlZ1QyOworfTsKKyNlbmRpZgorCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7
CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDEy
ICsxNzIsMTggQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZm
ZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAog
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwot
ICAgIAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5z
aWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIgfTsKKyAg
ICB1bnNpZ25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2sq
IG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVyZVN0dWJJ
bmZvKiBtX3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
c3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1f
c2xvd1BhdGhDYWxsOwpAQCAtOTgsNyArMjE0LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTVmFsdWVS
ZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fc3RhcnQ7CitwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9z
bG93UGF0aEp1bXA7CiB9OwogCkBAIC0xMTEsNiArMjI3LDcgQEAgcHVibGljOgogICAgICAgICBK
U1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBB
Y2Nlc3NUeXBlKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImKTsKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNp
Z25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiBwcml2YXRlOgog
ICAgIGJvb2wgbV9pc0xlbmd0aEFjY2VzczsKQEAgLTEyNCw2ICsyNDEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAg
ICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhp
c1JlZ3MsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1
YkluZm9HUFIpOwogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwog
fTsKIApAQCAtMTMyLDEwICsyNTAsMTEgQEAgcHVibGljOgogICAgIEpJVFB1dEJ5SWRHZW5lcmF0
b3IoKSA9IGRlZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAotICAgICAgICBDb2Rl
QmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFz
ZSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVn
IHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlw
ZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdp
c3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpT
VmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01B
TW9kZSwgUHV0S2luZCk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwg
dW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICAKICAg
ICBWX0pJVE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsKIApAQCAtMTYzLDEx
ICsyODIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3Nl
bWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1
ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAg
IE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAt
MTkxLDggKzMwOCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNy
b0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0
YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwog
fTsKIApAQCAtMjE2LDggKzMzMSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0
UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1Bh
dGhKdW1wOwogfTsKIApAQCAtMjQxLDggKzM1NCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2Vu
ZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1w
IG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjU1LDYgKzM2Niw3IEBAIHB1YmxpYzoKICAgICAg
ICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQ
Uik7CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2
b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5m
b0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogfTsKIAogY2xhc3MgSklUSW5zdGFuY2VP
ZkdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CkBAIC0y
NzcsOCArMzg5LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBm
YXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CiAKLXBy
aXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMDIsMTEgKzQx
Miw5IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3Nl
bWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1
ZVJlZ3MgbV9yZXN1bHQ7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTMzMCw4ICs0MzgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRo
KE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1
bXA7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwzOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQUxX
QVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lz
dGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlm
ICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09
IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7
Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0
YW50KSB7CisgICAgICAgIC8vIEFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3Rh
bnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0
YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25z
dGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7
CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiArMTgx
LDM2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRpZgog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6
OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUo
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJU
YWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1
cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1
ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJu
VmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZh
bHVlR1BSKTsKICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBB
ZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUg
Qnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIy
LCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0
U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogfQog
CiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewot
ICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3du
Q2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsy
MzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUg
dm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRl
eCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRl
Y29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7
CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVz
dWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpA
QCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9p
bnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAg
anVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7
CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29k
ZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3Bv
aW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1f
Ynl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwyOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXND
b25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJp
bmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworICAg
IGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICht
X3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMp
ID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmlu
ZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3Ro
KCkgPT0gMTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVS
ZWdzIHZhbHVlKQogewogICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwogCi0gICAg
Ly8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3
ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxz
ZQogICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8
RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwogICAgIHN0
b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwog
ICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNl
bmRpZgogfQorI2VuZGlmCiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5h
YmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwg
VmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlm
UHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVn
VDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNl
CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsNDEgKzM0OCwz
NyBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKyNp
ZiBVU0UoSlNWQUxVRTY0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBK
U1ZhbHVlUmVncyB2YWx1ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9y
KG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOwotfQogCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVn
KSk7CisgICAgcHRyZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZv
cjxCeXRlY29kZT4obV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6
Om9mZnNldE9mRmlyc3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNz
KHNfbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0
YWRhdGEsIEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CiB9CiAjZW5kaWYKIAotaW5s
aW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BS
KQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZm
X3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBz
Y3JhdGNoR1BSKQogewogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIGFy
cmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3Rv
cmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxl
KTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJl
Z2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2Rl
JiBieXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCiB7
Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBsb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhcnJheVBy
b2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpKTsK
LSAgICB9CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRl
Y29kZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9m
ZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3JhdGNoR1BSKTsKIH0KIAog
QUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxS
ZWdpc3RlciBzcmMpCkBAIC0zODAsNyArNDAxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9
IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25z
dGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVz
c0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTE3LDcgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxv
Y2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAg
ICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTI3LDcgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3du
Q2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0LDExICs1MzUsNiBAQCBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAgICAgfQogfQogCi1BTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZp
cnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU2MCwxMSBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7
IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0
aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKICAgICBpZiAo
c3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwot
ICAgICAgICBlbHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50
T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAg
bW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3QpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC01NjYsMTEgKzU4Miw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRz
dDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3Rl
cklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNTk1
LDcgKzYwNiw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKIAog
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lz
dGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2Nr
LT5pc0tub3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHZSZWcpKQogICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAtNjM3LDMwICs2NDgs
NyBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7CiAgICAgaWYg
KHRhcmdldCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2st
Pm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1BTFdBWVNfSU5MSU5FIEdl
dFB1dEluZm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSBieXRlY29kZSkKLXsK
LSAgICB1bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQgKyAxOyAvLyBIYXNoTWFw
IGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkR2V0
UHV0SW5mb3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdldFB1dElu
Zm9zLmVuZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFsdWUpOwot
ICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5tX2dldFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBnZXRQdXRJ
bmZvLm9wZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0aFByb2ZpbGUgSklUOjpj
b3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0gICAgdWludDY0X3Qga2V5
ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpICsgMSkgPDwgMzIg
fCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0YUlEKTsKLSAgICBhdXRv
IGl0ZXJhdG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRl
cmF0b3IgIT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRl
cmF0b3ItPnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0aFByb2ZpbGUgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgbV9jb3BpZWRB
cml0aFByb2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJuIGFyaXRoUHJv
ZmlsZTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNl
dChpbnN0cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjgxLDYgKzY2
OSw2MCBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0
dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRl
Y29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRh
KCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZz
ZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwg
bV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0
ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxv
YWQ4KEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSB2YWx1ZSwgY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlOCh2YWx1
ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgp
Lm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmUzMlRv
TWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBv
ZmZzZXQpCit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29k
ZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHNfbWV0YWRhdGFHUFIsIHJlc3Vs
dCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvbnN0
YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6Omxv
YWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9nbG9i
YWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BSUmVnIHJl
c3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOworICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFudHNW
ZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgY29u
c3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2Yodm9pZCopKSwgcmVzdWx0KTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25z
dCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAg
ICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBh
bGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBh
bGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwpAQCAt
MTEwLDcgKzExMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEkK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0
YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7
CkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0
YW5jZQogICAgIGVtaXRMb2FkUGF5bG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAgICAg
Ly8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxk
IGRvLgogICAgIEp1bXAgaGFzSW5zdGFuY2VWYWx1ZU5vdENlbGwgPSBlbWl0SnVtcElmTm90SlND
ZWxsKGhhc0luc3RhbmNlVmFsdWUpOwotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9
IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7
CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCiAgICAgLy8gV2Ug
a25vdyB0aGF0IGNvbnN0cnVjdG9yIGlzIGFuIG9iamVjdCBmcm9tIHRoZSB3YXkgYnl0ZWNvZGUg
aXMgZW1pdHRlZCBmb3IgaW5zdGFuY2VvZiBleHByZXNzaW9ucy4KICAgICBlbWl0TG9hZFBheWxv
YWQoY29uc3RydWN0b3IsIHJlZ1QwKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHByb3RvKTsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbV9wcm9m
aWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIHJlZ1QwLCAvLyByZXN1
bHQKICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdExvYWRU
YWcocHJvdG8sIHJlZ1QzKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluc3RhbmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdl
bi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMCwgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDEpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3Rh
bmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
Z2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QwLCByZWdUMiksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CiB9CiAKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20oCiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CiAgICAg
ZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMik7CiAgICAgZW1pdExvYWQoaGFzSW5z
dGFuY2VWYWx1ZSwgcmVnVDQsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2ZDdXN0b20sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMykpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgbV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBKU1Zh
bHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogfQogICAgIApAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5
cGVvZl9pc191bmRlZmluZWQoY28KICAgICAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAg
Y29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzc4LDcgKzM3OCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnMKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbmFtZSA9IGJ5dGVjb2RlLm1fbmFtZTsKICAgICBlbWl0TG9hZFBheWxvYWQoZnVu
YywgcmVnVDEpOwogICAgIGVtaXRMb2FkKG5hbWUsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTQwOCw3ICs0MDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rp
CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDM7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwot
ICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJhbmNo
SWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdU
MSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MjIsNyArNDIyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogICAgIEpTVmFsdWVS
ZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAg
ICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCB2YWx1ZSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTQzNyw3ICs0MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFf
bnVsbChjb25zdCBJbnN0cnVjCiAKICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qy
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwog
CkBAIC00NjMsNyArNDYzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IElu
c3RydQogCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSksIHRhcmdldCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRkSnVt
cChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUg
PSBqdW1wKCk7CiAKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVm
aW5lZF9vcl9udWxsKGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25z
dGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7CiAgICAgQVNTRVJUKHNwZWNp
YWxQb2ludGVyLmlzQ2VsbCgpKTsKQEAgLTU1MiwxMyArNTUyLDEzIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNo
SWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlZ1QwLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aW5nRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIp
OwogICAgIHN0b3JlUmVzdWx0LmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNl
LgogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMK
ICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAK
ICAgICBzdG9yZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXR1
cm5WYWx1ZUdQUik7CkBAIC01OTEsMTQgKzU5MSwxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wRXFK
dW1wU2xvdyhWZWN0b3I8U2xvCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3Ry
aW5nKHJlZ1QyKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdU
MCwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBt
X3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVx
ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdldCk7CiAgICAgZG9u
ZS5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2Fz
ZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2Uu
bGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBpbGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDog
WmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFyZ2V0KTsKIAogICAgIGRvbmUubGluayh0aGlz
KTsKQEAgLTY0MywxMyArNjQzLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3QKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIp
KTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZVN0cmluZ0VxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwogICAgIHN0b3JlUmVzdWx0
LmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNl
LmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5s
aW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9yZVJlc3VsdC5s
aW5rKHRoaXMpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZXR1cm5WYWx1ZUdQUik7
CkBAIC03NjIsNyArNzYyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3Ry
aWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzcyLDcgKzc3Miw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCkBAIC03OTEsNyArNzkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJ
bnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CkBAIC04MjMsNyArODIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5z
dHJ1YwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihOb3RFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CkBAIC04NDYsNyArODQ2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1
Y3RpbwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7CiAgICAgY29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsK
ICAgICBlbWl0TG9hZChieXRlY29kZS5tX3ZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAganVtcFRvRXhj
ZXB0aW9uSGFuZGxlcih2bSgpKTsKIH0KIApAQCAtODYyLDcgKzg2Miw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwog
ICAgIGlzSW50MzIubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRz
dCkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTg4NCw3ICs4
ODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RyCiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoYXJndW1lbnRWYWx1ZVJlZ3MsIHJlZ1QyKSk7CiAg
ICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRz
dCkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTkxNSw3ICs5
MTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2Rl
QmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkK
ICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTkzMSw3ICs5MzEs
MTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNz
KHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKworICAgIC8vIFdoZW4gdGhlIExMSW50IHRocm93cyBhbiBleGNlcHRpb24s
IHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFkeSB0aWVyZWQgdXAKKyAgICAvLyB0
aGUgc2FtZSBDb2RlQmxvY2sgdG8gYmFzZWxpbmUsIGFuZCB3ZSdsbCBjYXRjaCB0aGUgZXhjZXB0
aW9uIGluIHRoZSBiYXNlbGluZSBKSVQgKGJlY2F1c2UKKyAgICAvLyB3ZSB1cGRhdGVkIHRoZSBl
eGNlcHRpb24gaGFuZGxlcnMgdG8gcG9pbnQgaGVyZSkuIEJlY2F1c2UgdGhlIExMSW50IHVzZXMg
YSBkaWZmZXJlbnQgdmFsdWUKKyAgICAvLyBpbnNpZGUgc19jb25zdGFudHNHUFIsIHRoZSBjYWxs
ZWUgc2F2ZXMgd2UgcmVzdG9yZSBhYm92ZSBtYXkgbm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgcmVn
aXN0ZXIuCisgICAgLy8gU28gd2UgcmVwbGVuaXNoIGl0IGhlcmUuCisgICAgeworICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkp
LCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVRE
YXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworICAgIH0K
IAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5k
Q2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVF
eGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTU0
LDcgKzk2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAg
ICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwg
ZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5
OAogCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKTsKICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9
IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxp
bmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5
T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTk5
Niw4ICsxMDA3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgog
ICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAog
ICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0
aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT51bmxpbmtlZFN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBw
ZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZz
ZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJ
VGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwMjMsMTMgKzEwMzQsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1
dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxl
IGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0g
ICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUg
PSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVz
W3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUlu
ZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFj
dGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAK
ICAgICBlbWl0TG9hZChzY3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgsIHVubGlu
a2VkVGFibGUubV9taW4pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldp
dGhVbmtub3duS2V5VHlwZSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4p
OwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIApAQCAtMTA0MSwx
MyArMTA1MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAg
ICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRo
aXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxp
bmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRDb2RlQmxvY2st
PnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0
ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBs
aW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAogICAgIGVtaXRMb2Fk
KHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4KTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgbV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxl
SW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIApAQCAt
MTA2OCw3ICsxMDc5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIC8vIEV2ZW4gdGhvdWdoIEpJVCBjb2RlIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRp
YWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVy
cywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0
aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIGZvciAoaW50IGkgPSBDb2RlQmxv
Y2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaSA8
IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7ICsraSkKKyAgICBmb3IgKGludCBpID0gQ29kZUJsb2Nr
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkgPCBt
X3Byb2ZpbGVkQ29kZUJsb2NrLT5udW1WYXJzKCk7ICsraSkKICAgICAgICAgZW1pdFN0b3JlKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
ZW50ZXIpOwpAQCAtMTA4Nyw3ICsxMDk4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3Bl
KGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+
KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3Rl
cklEIGNhbGxlZVJlZyA9IHJlZ1QwOwpAQCAtMTEyMiw3ICsxMTMzLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgU3RydWN0dXJl
SUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlciA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCkBA
IC0xMTQ1LDcgKzExNTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5z
dHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBl
TG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAt
MTIzOSw3ICsxMjUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Rh
aQogICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMSk7CiAgICAgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MocmVnVDEsIHJlZ1QyKTsKICAgICBlbWl0TG9hZFBheWxvYWQoYnl0
ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNo
YWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFk
b3dQYWNrZXRSZWcsIHRoaXNSZWdzLCByZWdUMywgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29k
ZUJsb2NrKSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDExICs1NCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fc3JjOwogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZh
bHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKLSAgICAgICAgZWxzZQorICAgICAg
ICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVC
bG9jayhzcmMpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7CisgICAgICAgICAg
ICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICB9CisKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtODcsMzcgKzkwLDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2pt
cChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0g
ICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUo
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0g
YWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwg
YWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAog
ICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0
b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBS
ZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxw
dHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRv
cjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdElu
aXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKLSAgICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7Ci0gICAgfQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZz
ZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6
b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCks
IGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dD
YXNlcyk7CisgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
KyAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0
YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1
cmUpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVj
dCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZh
bHVlR1BSKTsKIH0KIApAQCAtMTMxLDcgKzEzMiw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJy
aWRlc19oYXNfaW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNl
VmFsdWUsIHJlZ1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5
bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFs
dWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24o
KSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5z
dGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9C
SkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VT
eW1ib2xGdW5jdGlvbikpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0
b3IsIHJlZ1QwKTsKIApAQCAtMTU0LDMwICsxNTYsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZihjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5
cGU7CiAKLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1
ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3Ig
YmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2Fu
IHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7
CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm90b0dQUiA9IEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIg
PSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCBwcm90b0dQUik7CiAgICAgCiAgICAgLy8gQ2hlY2sg
dGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNo
ZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8pOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCh2YWx1ZUdQUiwgdmFsdWUpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChw
cm90b0dQUiwgcHJvdG8pOwogCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgIG51bGxw
dHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAg
IHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDUs
Ci0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVs
c2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgcmVzdWx0R1BSLAorICAgICAgICB2
YWx1ZUdQUiwKKyAgICAgICAgcHJvdG9HUFIsCisgICAgICAgIHN0dWJJbmZvR1BSLAorICAgICAg
ICBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxLCBCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnNjcmF0Y2gyKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKKwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMTkyLDE0ICsyMDIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFk
ZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCByZWdUMiwgcmVnVDEpOwotICAgIH0g
ZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5l
SW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm8gPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWUgPT0gYXJndW1lbnRH
UFIyKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJv
dG8gPT0gYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFu
Y2VPZk9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9p
bnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0yNDAsNyArMjQ5LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogCiAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
cmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7
CiAKQEAgLTM4Myw5ICszOTIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1
Y3Rpb24qCiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYg
dm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hh
bmRsZXJHZW5lcmF0b3IoVk0mKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQu
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQyMCw2IEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQog
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC00MzQsOSArNDQyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tl
eShjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9mdW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5h
bWUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTQ2NSw4ICs0NzQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3Ry
dWN0aQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Qy
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29u
c3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAg
ICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxz
ZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0
R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElT
dHViKHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAg
ICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgw
LDcgKzQ5MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZU
TCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywg
d2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
CkBAIC01MTksNyArNTMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5z
dHJ1YwogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1Qx
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNo
UHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24gPSBqdW1wKCk7CiAKQEAgLTU0Myw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmVxX251bGwoY29uc3QgSW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMg
LSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAg
IGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0
YXJnZXQpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQ
dHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CiAKQEAgLTU4MiwxNSArNTkzLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29y
X251bGwoY28KIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X3ZhbHVlOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQo
Ynl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlz
Q2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFu
Y2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgp
KSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsK
KyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVn
VDEpOworICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNv
ZGUsIE9wSm5lcVB0cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1
bXAoanVtcCgpLCB0YXJnZXQpOwogICAgIGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC02MjUsOCAr
NjM0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29s
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpT
VmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdl
dCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlz
VHJ1dGh5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAo
YnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTY0MCw3ICs2NTEsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0g
cmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNjk1LDcg
KzcwNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7Cisg
ICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCBy
ZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTcxMSw3
ICs3MjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6b3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB0
aHJvd25WYWx1ZUdQUiA9IGFyZ3VtZW50R1BSMTsKQEAgLTcyMCw3ICs3MzIsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAKICNpZiBOVU1CRVJfT0ZfQ0FMTEVF
X1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICBqaXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwg
YXJndW1lbnRHUFIwKTsKLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXJJbXBsKGFyZ3VtZW50R1BSMCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKGFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwpAQCAtOTA4
LDcgKzkyMCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCkBAIC05MTgsNyArOTMxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBy
ZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MzEsNyArOTQ1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydQogICAgIAogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBk
c3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAt
OTUxLDcgKzk2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50
LmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTc4LDcgKzk5Miw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChy
ZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk5Myw3ICsxMDA3LDE4IEBAIHZvaWQgSklU
OjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdU
MywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNh
bGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisK
KyAgICAvLyBXaGVuIHRoZSBMTEludCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGVyZSBpcyBhIGNo
YW5jZSB0aGF0IHdlJ3ZlIGFscmVhZHkgdGllcmVkIHVwCisgICAgLy8gdGhlIHNhbWUgQ29kZUJs
b2NrIHRvIGJhc2VsaW5lLCBhbmQgd2UnbGwgY2F0Y2ggdGhlIGV4Y2VwdGlvbiBpbiB0aGUgYmFz
ZWxpbmUgSklUIChiZWNhdXNlCisgICAgLy8gd2UgdXBkYXRlZCB0aGUgZXhjZXB0aW9uIGhhbmRs
ZXJzIHRvIHBvaW50IGhlcmUpLiBCZWNhdXNlIHRoZSBMTEludCB1c2VzIGEgZGlmZmVyZW50IHZh
bHVlCisgICAgLy8gaW5zaWRlIHNfY29uc3RhbnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdlIHJl
c3RvcmUgYWJvdmUgbWF5IG5vdCBjb250YWluIHRoZSBjb3JyZWN0IHJlZ2lzdGVyLgorICAgIC8v
IFNvIHdlIHJlcGxlbmlzaCBpdCBoZXJlLgorICAgIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZK
SVRDb25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKKyAgICB9CiAKICAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9u
SWZDYXRjaGFibGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJh
bmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzYsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3Vt
ZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1
ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVm
ZmVyOwotICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNo
LCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFu
ZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5k
VmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRv
IHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBF
eGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAg
ICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXIt
PmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsK
LSAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUp
LCByZWdzKTsKLSAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQog
fQogCkBAIC0xMDUzLDggKzEwNjYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNv
bnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2Ny
dXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlv
bnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2st
PnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJs
ZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5NCwxNCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRj
aEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVj
b3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVj
b3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtl
ZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBl
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJs
ZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25L
ZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRU
YWJsZS5tX21pbik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcp
OwogfQogCkBAIC0xMDk5LDIwICsxMTEzLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9z
dHJpbmcoY29uc3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUu
bV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3Rp
bmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OworICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91
bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
dGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6
OlN0cmluZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRl
eCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1
Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBK
dW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0
ZWNvZGUubV9kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhp
cyk7CkBAIC0xMTMzLDcgKzExNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0
IEluc3RydWN0CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKQEAgLTExNDgsNyArMTE2NCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29u
c3QgSW5zdHJ1Y3QKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xMTY2LDcgKzExODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0
cnVjCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFs
LCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAo
KTsKQEAgLTExODgsMTIgKzEyMDMsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBp
bml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9p
bnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBs
aWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBt
X2NvZGVCbG9jay0+bnVtVmFycygpOworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPm51bVZhcnMoKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9y
IChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rl
cih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1f
Y29kZUJsb2NrKTsKKyAgICAKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAg
ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCkBAIC0xMjEyLDcgKzEyMjksNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2go
WDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMTMxMCwyMyArMTMyNywxOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNh
Y2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0
cnVjdHVyZUlELCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRv
VGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVh
dGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJy
aWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxl
ZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFy
ZURhdGFSZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAt
MTM0Miw3ICsxMzU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5z
dAogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVX
aXRoUHJvdG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFU
YWcpLCBhbGxvY2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVu
Y3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNo
ZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wQ3JlYXRlVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkQ2FsbGVlKCks
IGNhY2hlZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBi
cmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6
c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRy
KE5vdEVxdWFsLCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11
bHRpcGxlQ2FsbGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzg1LDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJl
Z1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFs
dWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzk2LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgx
KSwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDA5LDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQyMCw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVn
VDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzNSwxMSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihjb25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIzKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CiB9CkBAIC0xNDMwLDcgKzE0NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2st
Pmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5n
KCkgJiYgbV91bmxpbmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5n
RWFybHlSZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BI
aW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCBy
ZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3Bz
TGltaXQoKSkpOwpAQCAtMTQ0MCw3ICsxNDU4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9o
aW50KGNvbnN0IEluc3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZgotICAgICAgICBtb3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsx
NDcxLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAg
Ly8gRW1pdCB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1p
emVkKCkpIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVP
clplcm8sIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9y
TG9vcCgpKSwKLSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVz
c09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAt
MTUwOSw3ICsxNTI4LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0
IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywg
YXJndW1lbnRHUFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1MjIsNyArMTU0Miw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9jaGVja190cmFw
c19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3Rl
cnM6OmVicCk7CkBAIC0xNTY0LDM0ICsxNTg0LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19y
ZWdleHAoY29uc3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5ld1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQocmVnZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBhcmd1bWVudEdQUjA7
CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29k
ZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJl
dHVyblZhbHVlR1BSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1p
dE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBKdW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
LCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhl
YyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwor
ICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpGdW5jdGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3Rh
bnQsIGFyZ3VtZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJ
RDsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9u
ZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9w
X25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVj
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0
aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQog
CkBAIC0xNjIxLDIzICsxNjQzLDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24o
Y29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3Vt
ZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBy
ZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BS
MSk7CiAjZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVC
bG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNv
bnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rp
b25FeHByLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNv
ZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVu
dEdQUjIpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYg
KG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5l
cmF0b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJh
dG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdf
YXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBv
cF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVu
Y3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9
CiB9CiAKQEAgLTE2NjQsMjkgKzE2ODcsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5j
X2dlbmVyYXRvcl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUu
bV9hcmd2OwogICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5
V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwg
c2l6ZSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIyKTsKKyAgICBt
YXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFk
YXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlf
d2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXpl
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRh
dGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2lu
dGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRh
KGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxs
b2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEs
IHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQ
cm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwK
LSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywg
cmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTQs
OCArMTcxOCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAK
IHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogeworICAgIG1faXNTaGFyZWFibGUgPSBmYWxzZTsKKwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAg
ICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0
aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFy
Z2V0VmlydHVhbFJlZ2lzdGVyOwogCkBAIC0xNzc3LDIwICsxODAzLDI1IEBAIHZvaWQgSklUOjpl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQ
UjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVt
cyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFj
a2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8g
VGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNo
MlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93
UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3Vt
ZW50IHJlZ2lzdGVyLgorICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAg
ICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0
Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2Nr
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBy
ZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVT
RShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgbV9pc1NoYXJlYWJs
ZSA9IGZhbHNlOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQcm9maWxlQ29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2lj
QmxvY2tMb2NhdGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMp
OwpAQCAtMTg2MCw3ICsxODkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNv
bnN0IElucwogICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAogICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlc3VsdFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE5MTcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwg
dmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2Vz
KTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIK
ICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRp
ZmllcklubGluZXMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
Q29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1
ZGUgIkRGR09TUkVudHJ5LmgiCkBAIC0yODU1LDcgKzI4NTYsNyBAQCBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNv
ZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0ID0gbGlua2Vk
VGFibGUubV9jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKQEAgLTI4ODAsNyArMjg4
MSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1Zh
bHVlIGtleSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1w
VGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
YmFzZWxpbmVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9j
ay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAg
ICB2b2lkKiByZXN1bHQ7CiAgICAgaWYgKGtleS5pc0ludDMyKCkpCkBAIC0yOTAzLDcgKzI5MDQs
NyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7
Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwogCiAgICAgaWYgKGtleS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmlu
Z0ltcGwqIHZhbHVlID0gYXNTdHJpbmcoa2V5KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7
CkBAIC0yOTE5LDcgKzI5MjAsNiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
U3dpdGNoCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAK
LSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25SZXNvbHZlU2NvcGVGb3JCYXNlbGluZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0cnVjdGlvbiogcGMpKQogewogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTI5NzEsNyArMjk3MSw2IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25SZXNvbHYKIAogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzb2x2ZWRTY29wZSk7CiB9Ci0jZW5kaWYKIAogSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkdldEZyb21TY29wZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0cnVjdGlvbiogcGMpKQogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTAsOSArMjkwLDcgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25H
ZXRQcgogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVu
a25vd25LZXlUeXBlLCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUga2V5
LCBzaXplX3QgdGFibGVJbmRleCwgaW50MzJfdCBtaW4pKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKFZNKiwg
RW5jb2RlZEpTVmFsdWUga2V5LCBzaXplX3QgdGFibGVJbmRleCwgaW50MzJfdCBtaW4pKTsKIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25L
ZXlUeXBlLCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUga2V5LCBzaXpl
X3QgdGFibGVJbmRleCkpOwotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25SZXNvbHZlU2NvcGVGb3JCYXNlbGluZSwgRW5jb2Rl
ZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBD
KSk7Ci0jZW5kaWYKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNj
b3BlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24q
IGJ5dGVjb2RlUEMpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0VG9T
Y29wZSwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2Rl
UEMpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Nyw3ICs4NywxMiBAQCBhdXRvIEpJVFBsYW46OnRpZXIoKSBjb25zdCAt
PiBUaWVyCiAKIEpJVENvbXBpbGF0aW9uS2V5IEpJVFBsYW46OmtleSgpCiB7Ci0gICAgcmV0dXJu
IEpJVENvbXBpbGF0aW9uS2V5KG1fY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksIG1f
bW9kZSk7CisgICAgSlNDZWxsKiBjb2RlQmxvY2s7CisgICAgaWYgKG1fbW9kZSA9PSBKSVRDb21w
aWxhdGlvbk1vZGU6OkJhc2VsaW5lKQorICAgICAgICBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+
dW5saW5rZWRDb2RlQmxvY2soKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGVCbG9jayA9IG1fY29k
ZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgcmV0dXJuIEpJVENvbXBpbGF0aW9u
S2V5KGNvZGVCbG9jaywgbV9tb2RlKTsKIH0KIAogYm9vbCBKSVRQbGFuOjppc0tub3duVG9CZUxp
dmVBZnRlckdDKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTksNyArNTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNv
bnN0CiAKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5
bG9hZChnZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
ckJ5SWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0
eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcy
LDcgKzcyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdAogCiAg
ICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxvYWQoc2V0
dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBt
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgcmVnVDEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwo
KSwgb3B0aW9ucywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3Nl
dHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODcs
NyArODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAg
ZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVy
LCByZWdUMyk7CiAgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDQpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBh
dHRyaWJ1dGVzLCByZWdUMywgcmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyU2V0dGVyLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgYXR0cmli
dXRlcywgcmVnVDMsIHJlZ1Q0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMSw3ICsx
MDEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1p
dExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEs
IHJlZ1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgYXR0cmlidXRlcywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE1LDcg
KzExNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBl
bWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdU
MSwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdU
Myk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgbV9wcm9maWxl
ZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIzLDcgKzEyMyw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwpAQCAtMTMxLDggKzEzMSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBlbWl0TG9hZChiYXNlLCBiYXNlUmVncy50YWdHUFIo
KSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLAogICAgICAgICBiYXNlUmVncywgcmVzdWx0
UmVncywgSW52YWxpZEdQUlJlZywgcmVnVDQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtMTY2LDcgKzE2
Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHksIHByb3BlcnR5UmVncy50YWdHUFIoKSk7
CiAKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAg
IGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIHJlZ1Q0
KTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTIwMiw3ICsyMDIsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKICAgICBlbWl0TG9h
ZDIoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSwgcHJvcGVy
dHksIHByb3BlcnR5UmVncy50YWdHUFIoKSwgcHJvcGVydHlSZWdzLnBheWxvYWRHUFIoKSk7CiAK
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1p
emUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJ
bmZvKCksIEpTVmFsdWVSZWdzKGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BS
KCkpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5wYXls
b2FkR1BSKCkpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7Cisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXpl
LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXls
b2FkR1BSKCkpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVn
cy5wYXlsb2FkR1BSKCkpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgp
KSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAog
ICAgIGJveEJvb2xlYW4ocmVnVDAsIHJlc3VsdFJlZ3MpOwpAQCAtMjE2LDcgKzIxNiw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxf
YnlfaWQoY29uc3QgSW4KIAogICAgIGVtaXRMb2FkKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBi
YXNlUmVncy5wYXlsb2FkR1BSKCkpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgp
KSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKICAgICBi
b3hCb29sZWFuKHJlZ1QwLCByZXN1bHRSZWdzKTsKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwpAQCAtMjQ5LDcgKzI0OSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QxKTsKICAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCBwcm9maWxlLCByZWdUNCk7CiAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsK
ICAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCBy
ZWdUNCk7CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJbnN0cgogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAogICAgICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1
YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgICAg
IGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAgfQogfQpAQCAtMjc1LDcgKzI3NSw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICBpZiAoaGFz
QW55U2xvd0Nhc2VzKGl0ZXIpKSB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKQEAgLTI4NCw3ICsyODQs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7Ci0gICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CisgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KIH0KQEAgLTMwNSwxMyArMzA1
LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJ
VEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIG1fcHJv
ZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0
UHJpdmF0ZU5hbWUsCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOwog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJl
Z3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtMzMwLDcgKzMz
MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKIAogICAgIGF1
dG8gYmFzZUdQUiA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgYXV0byBwcm9wZXJ0
eUdQUiA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTM0OCw3ICszNDgsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlk
R1BSUmVnLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtMzc3LDcg
KzM3Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBK
U1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KTsKIAogICAgIGF1dG8gb3BlcmF0aW9u
ID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmll
bGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVS
ZWdzLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlUmVncywgcHJvcGVydHlSZWdzLCB2YWx1ZVJl
Z3MsIGdlbi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKIAogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC0zOTUsNyArMzk1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSk7CiAKICAgICBK
SVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxl
ZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2
YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAg
ICAgYmFzZVJlZ3MsIGJyYW5kUmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBA
IC00MTgsNyArNDE4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5k
KAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJh
bmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4XTsKICAgICArK21fcHJpdmF0ZUJy
YW5kQWNjZXNzSW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6
ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywg
YnJhbmRSZWdzKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogfQogCkBAIC00MzUsNyArNDM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJp
dmF0ZV9icmFuZChjbwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNl
UmVncy50YWdHUFIoKSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIGJhc2VSZWdzLCBicmFuZFJlZ3MsIEludmFs
aWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNDUyLDcgKzQ1Miw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NH
ZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nl
c3NJbmRleF07CiAgICAgKyttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4OwogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFu
ZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOwogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTQ2NSw3ICs0NjUs
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKQEAgLTQ3OCw3ICs0NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
dmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCByZWdUNiwgcmVnVDcpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBt
X3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6
OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiks
IEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIHJlZ1Q2LCBJbnZhbGlkR1BSUmVnKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJCiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAg
ICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IEpJVDo6
ZWNtYU1vZGUoYnl0ZWNvZGUpOwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKICAgICB9OwogCkBAIC01MjQsNyArNTI0LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXRMb2FkMihiYXNlLCByZWdU
MiwgcmVnVDEsIHByb3BlcnR5LCByZWdUMywgcmVnVDApOwogICAgIGVtaXRMb2FkKHZhbHVlLCBy
ZWdUNSwgcmVnVDQpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/
IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFN
b2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCks
IHByb2ZpbGUpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZv
KCksIHByb2ZpbGUpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKIH0KQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0
X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVt
aXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTU0MiwxMyArNTQyLDEzIEBAIHZvaWQgSklUOjplbWl0X29w
X3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxp
ZEdQUlJlZywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIG1fcHJvZmlsZWRDb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwg
SlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJl
ZywgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgcmVzdWx0UmVn
cyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOwogfQogCkBAIC01NTgsMTMgKzU1OCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0
QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdl
bi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC01NzUsNyArNTc1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVn
VDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC01
ODMsMTMgKzU4MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXls
b2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWREaXJlY3QpOworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2Fk
T25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3QpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRz
dCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBA
IC01OTksMTMgKzU5OSwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiB9CkBAIC02MTQsMTAgKzYxNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAgICAgCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNjMwLDEzICs2MzAsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1
bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9w
cm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJ
bnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3Vs
dFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtNjQ2LDEzICs2NDYsMTMgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1Yklu
Zm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4u
c3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNjYzLDcgKzY2Myw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAg
ICAgCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh0aGlz
VlJlZywgcmVnVDQsIHJlZ1QzKTsKQEAgLTY3MywxMyArNjczLDEzIEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAg
bV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJs
b2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKICAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50
YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC02ODksMTMgKzY4OSwx
MyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklU
R2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRC
eUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKICAgICAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1Yklu
Zm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1Qz
KSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9m
aWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03MTAsMTUgKzcxMCwxNSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJl
Y3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKICAgICAKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCB2YWx1ZSwgcmVnVDMs
IHJlZ1QyKTsKICAgICAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVn
VDEpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBtX3By
b2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ss
ICppZGVudCksCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMiksIEludmFsaWRHUFJSZWcsCiAgICAgICAgIHJlZ1QxLCBieXRl
Y29kZS5tX2ZsYWdzLmVjbWFNb2RlKCksIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtp
bmQ6Ok5vdERpcmVjdCk7CiAgICAgCkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKIApAQCAtNzQ4
LDcgKzc0OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAg
ICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4Kytd
OwogICAgIAogICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCi0gICAgICAgIGdlbi5zbG93
UGF0aEZ1bmN0aW9uKCksIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZv
KCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgICAgICBnZW4uc2xvd1BhdGhG
dW5jdGlvbigpLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJ
bmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgCiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTc1OCwx
NCArNzU4LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVn
VDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAg
ICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CisgICAg
ICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9pbkJ5SWRzLmFwcGVuZChnZW4pOwpAQCAtNzc5LDEzICs3NzksMTMgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9p
bkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0
aW1pemUsIHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJ
bmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03OTYsNyArNzk2LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwogCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCBy
ZWdUMik7CkBAIC04MDQsNyArODA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNv
bnN0IEluc3RydQogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJv
ZmlsZSwgcmVnVDQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWws
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9m
aWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5
VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpT
VmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwpAQCAtODE5LDE0ICs4MTksMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChj
b25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
bkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwog
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAog
ICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgr
K107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXpl
LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtODM3LDcgKzgzNyw3IEBAIHZvaWQgSklUOjplbWl0
SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtODUzLDcgKzg1Myw3IEBAIHZvaWQg
SklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2kKICAgICBKSVRJbkJ5VmFsR2VuZXJh
dG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBl
ID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRl
QnJhbmRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lkIEpJVDo6
ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVj
dGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1
YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVj
dGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVz
cyhtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hw
b2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNp
Z25lZCBkZXB0aCkKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9z
dXJlKFZpcnR1YWxSZWdpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0g
Ynl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRh
Lm1fcmVzb2x2ZVR5cGU7CkBAIC05MTYsMTEgKzkxNiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2Nv
ZGVCbG9jayk7CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6
Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOwogICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5k
aW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNz
T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCgpKSwgcmVnVDEpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCByZWdUMSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRT
Y29wZSksIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7
CkBAIC05MzEsNyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25z
dCBJbgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IAogICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBt
X2NvZGVCbG9jayk7CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZENvZGVC
bG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIHJlZ1QxKTsKQEAgLTEwMzksNyArMTAzOSw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXMKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFk
YXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShy
ZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwog
ICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKQEAgLTExNTYsNyArMTE1Niw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRG
cm9tU2NvcGUsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQpAQCAtMTE5MCw3ICsxMTkwLDcgQEAg
dm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3Bl
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEdldFB1dElu
Zm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwpAQCAtMTIwMiw3ICsx
MjAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAg
ICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9w
cm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0
dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbi4KICAgICAg
ICAgICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgICAgICAgICAgCkBAIC0x
MjE3LDcgKzEyMTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3Bl
ID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2Rl
QmxvY2spOworICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNv
bnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2sp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKQEAgLTEzMTgsNyArMTMxOCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3Rf
bW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAgICAgICAgIHNsb3dQYXRoQ2Fs
bC5jYWxsKCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
VG9TY29wZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTEzMzMsNyArMTMzMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICBlbWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdU
MCk7CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9m
ZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNl
dCksIHJlc3V0bFJlZ3MudGFnR1BSKCkpOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJl
Y3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgKyBQYXlsb2FkT2Zmc2V0KSwgcmVzdXRsUmVncy5wYXlsb2FkR1BSKCkpOwot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1dGxSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCByZXN1dGxSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0
LCByZXN1dGxSZWdzLnRhZ0dQUigpLCByZXN1dGxSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAg
LTEzNTUsNyArMTM1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29u
c3QKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwxMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRj
aDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BS
KTsKIAotICAgIGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9u
czo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+
IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAg
YXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwog
ICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBz
Y3JhdGNoR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BS
KTsKIAotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDAp
OworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKwogICAg
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2Vu
LnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgICAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0
QnlWYWw7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIHJlc2V0U1AoKTsgLy8gV2UgbWln
aHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAor
CisgICAgICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4p
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKICAgICB9Ci0KIH0KIAorI2lmICFPUyhXSU5ET1dTKQorc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdmlhYmxlQXJndW1lbnRHUFI0ID0gR1BSSW5mbzo6YXJndW1lbnRHUFI0Oworc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgdmlhYmxlQXJndW1lbnRHUFI1ID0gR1BSSW5mbzo6YXJndW1lbnRHUFI1
OworI2Vsc2UKK3N0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZpYWJsZUFyZ3VtZW50R1BSNCA9IEdQ
UkluZm86Om5vbkFyZ0dQUjA7CitzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2aWFibGVBcmd1bWVu
dEdQUjUgPSBHUFJJbmZvOjpub25BcmdHUFIxOworI2VuZGlmCisKIHRlbXBsYXRlPHR5cGVuYW1l
IE9wY29kZVR5cGU+CiB2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9w
Y29kZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewotICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworICAgIGlmICghaGFzQW55U2xvd0Nhc2Vz
KGl0ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CisgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKIAotICAgICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJlZ1QwLCByZWdUMSk7CisgICAgbW92ZShCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBhcmd1bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHksIHZpYWJsZUFyZ3VtZW50R1BSNCk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlh
bGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKT4oYnl0ZWNvZGUs
IEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0KTsKICNlbHNlCi0gICAgICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29k
ZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwor
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwor
ICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5k
ZXgpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1
bWVudEdQUjQ7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSBhcmd1bWVudEdQUjQ7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBi
eXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICAgICAgY29u
c3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHJlZ1QxOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1l
bnRHUFIwIHx8ICFpc0FSTTY0KCkpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BS
ID09IGFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmls
ZSksIHByb2ZpbGVHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLQotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemUpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5
IHVzZWQuCisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJn
dW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIg
PT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OmJhc2UgPT0gcmVnVDApOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHkgPT0gcmVnVDEpOworCisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZh
bHVlR1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNl
bmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDksNyArMTY5LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAt
MTYwLDggKzE4MCw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSNTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKQEAgLTE4NywzNCArMjA3LDQwIEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFz
ZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAgICAgICAgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIEFTU0VS
VChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKQEAgLTIyMyw5
ICsyNDksMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT4oYnl0
ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0yMzUsMjYgKzI2MywyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIy
OyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVs
c2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yNjQsNyArMjg2LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAw
LDIxICszMjIsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJy
YW5kPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJl
Z2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFu
ZCwgYnJhbmRHUFIpOwotCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0
UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1Qy
KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2
YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9H
UFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6U2V0UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJy
YW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1i
YXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVy
cyByZWdpc3RlcnMuCkBAIC0zMjQsMTcgKzM1MywyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRf
cHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0
ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogeworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRv
ciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4
KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BS
LCBicmFuZEdQUik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRp
b25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtMzQ0LDI0ICszNzgsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3NldF9wcml2YXRlX2JyYW5kKAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJy
YW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJp
dmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5
cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFs
dWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJp
dmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZgogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZh
dGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM3MCwz
MyArMzk4LDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY28KICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgcmVn
VDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNr
UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJ
bmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJp
dmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2
YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hl
Y2tQcml2YXRlQnJhbmQ+KCk7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlKTsKKwogICAgIEpJ
VFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nl
c1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIg
PSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0
aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIz
KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTQwNiwyNCArNDQ4LDE4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1
c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5k
OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQo
KSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRl
Y2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBl
cywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6
ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9k
aXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNSwzMCAr
NDcxLDQzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9m
aWxlKSwgcmVnVDMpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9m
aWxlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMywgcmVnVDQpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHByb2ZpbGVHUFIpOworICAgIG1hdGVy
aWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFs
dWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIs
IHN0dWJJbmZvR1BSKTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkp
CiAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1
YkluZm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQ
dXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFN
b2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0g
bV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0
dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9T
UiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMg
Y2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBp
cyBjZWxsLgpAQCAtNDc0LDE1ICs1MjMsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0
KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9h
ZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1v
ZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07
CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTQ0LDE2IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBj
bG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21h
TW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlz
U3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHZpYWJsZUFyZ3VtZW50R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQor
ICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSwgdmlhYmxlQXJndW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAg
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmls
ZSgpLCB2aWFibGVBcmd1bWVudEdQUjUpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3Bl
cmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3ModmlhYmxlQXJndW1lbnRHUFI0
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIHZpYWJsZUFyZ3Vt
ZW50R1BSNCwgdmlhYmxlQXJndW1lbnRHUFI1KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTUxMiw3ICs1NjcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2Fs
bCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJp
Y3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8g
b3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU3OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAg
LTUzMywxOCArNTg4LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
cmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWUsIEJhc2VsaW5l
UHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFp
bnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAg
fQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOwpAQCAt
NTcwLDIwICs2MzEsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25z
dAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxp
bmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJ
bnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFk
ZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5m
b0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9
IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhv
dXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5NCw4ICs2NjYsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAKIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsK
LSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7Cisg
ICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBKSVRQdXRCeVZhbEdl
bmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4KytdOwogCkBAIC02MDMs
MTMgKzY3NCwxNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0aW9u
ID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmll
bGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQg
aW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJ
bmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHZpYWJsZUFyZ3VtZW50R1BSNCk7Cisg
ICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVG
aWVsZE9wdGltaXplKT4oQWRkcmVzcyh2aWFibGVBcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0LCBUcnVzdGVk
SW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYy
MiwxOCArNjk1LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9w
cml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb247Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRp
b24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2Fs
bCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNjQzLDE0ICs3MTAs
MTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0
IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZh
aWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBp
bmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBt
YXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0
KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVH
UFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIApAQCAtNjgwLDcgKzc0Nyw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywg
cmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02ODksNyArNzU3LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02OTksNyArNzY4LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGludDMyX3QgYXR0cmlidXRl
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwg
YXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAs
IG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1w
bCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC03MDksNyArNzc5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29u
cwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEp
OwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1Qy
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcxOSw3ICs3OTAsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Myk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJl
Z1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyNywy
MyArNzk5LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNl
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3Rl
cnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5
SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93
Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeUlEOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BS
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0
cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8g
V2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNl
IHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0ZXJzLgpAQCAtNzU5LDE1ICs4NDEsMTcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRz
W21fZGVsQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxk
ZWNsdHlwZShvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgp
KSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC03ODEsMjQgKzg2NSwxOSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3Bl
cnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJh
dGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09
IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAg
LTgwOCw3ICs4ODcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVj
dCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERG
Ry9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVj
dHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1
cm5BZGRyZXNzKCk7CkBAIC04NDUsMjIgKzkyNCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxf
YnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgcHJvcGVydHkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVydHlHUFIsIHByb3BlcnR5KTsKKwogICAgIEpJ
VERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAg
ICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0
Y2gpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6RGVsZXRlQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9j
b25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8s
IHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0
dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeVZhbHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAg
IGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAv
LyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2lu
Y2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRl
IG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpA
QCAtODgzLDkgKzk3MywxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25z
dCBJCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRl
Y2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BS
MSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CkBAIC04OTksMjQgKzk5MSwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3Vt
ZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
c3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2Rl
R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5
X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5k
Q2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
SlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEw
MTMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNz
KCk7CkBAIC05NjEsMjIgKzEwNDgsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVn
LCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVn
cyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQg
KzEwODIsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxp
bmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwog
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlH
ZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJ
ZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDAzLDI2ICsxMTAyLDIw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKICAgICBtb3ZlKEpJ
VDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8
ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAzMCwyMiArMTEyMywzMSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJl
ZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vz
c1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
LSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJ
ZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiArMTE1NiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVj
dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSht
ZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKT4oYnl0ZWNv
ZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vs
c2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTA3Myw4MyArMTE3Nyw2MiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQ
UjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHBy
b3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVy
YXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRp
b24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBj
YWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlu
a2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzY3JhdGNoOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogICAgIAogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+
cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAg
ICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRk
cmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRh
LmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUsIHJlZ1QxKTsKKyAgICAgICAgbG9hZDhGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFk
YXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhOjpvZmZzZXRPZk1vZGUoKSwgc2NyYXRjaEdQUik7
CisgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoMzIoTm90RXF1YWwsIFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChi
eXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdl
dEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFz
ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMp
OwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VW
UmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOwotCi0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOwogCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJl
c3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZv
cy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0
byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2ICsxMjQxLDE4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAg
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZSht
ZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3NywyNiArMTI2Miw1OCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSks
IHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
dGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQ
UiwgdGhpc1ZSZWcpOworCisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAq
aWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhp
c0dQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBX
ZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0
IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdl
bik7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjA2LDcgKzEzMjMsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJv
dXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25n
aW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVy
cyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xMjQxLDE2ICsxMzU4LDE5
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0g
bV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRh
LCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAs
IHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xMjYwLDI4ICsxMzgwLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0
aF90aGkKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0
aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVu
dEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3Vt
ZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHVi
SW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BS
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyOTEsNyArMTQwNSw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9u
cyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAog
ICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTEzMjksMjMg
KzE0NDMsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9
IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUg
dG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0
b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZl
IGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJh
dGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdh
eXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFs
dWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFz
ZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
YmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywgdmFsdWVHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFNb2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzdHVi
SW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAogICAgICAgICBkaXJlY3Qg
PyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0
QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6
IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShi
eXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7
CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2Vu
LmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28g
d2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3
IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0x
MzU5LDE0ICsxNDg4LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3Qg
SW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
bih0aGlzKTsKICAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRz
W21fcHV0QnlJZEluZGV4KytdOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3Bl
cmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMs
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMzc2LDI1ICsxNTA5LDE5IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1
bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBh
cmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwg
c3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0
eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQot
ICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IGdlbi5z
bG93UGF0aEZ1bmN0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChn
ZW4uc2xvd1BhdGhGdW5jdGlvbigpKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKQEAgLTE0MDQsNyArMTUzMSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xv
YmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAg
ICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xv
YmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlm
ICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0
LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE0NDEsMjAgKzE1NjgsMzEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDAp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
OjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRS
ZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFz
ZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKQEAgLTE0NjMsMTQgKzE2MDEsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5C
eUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQ
UjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlv
bkluQnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3Qg
Ynl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsx
NjIxLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIg
PT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFy
ZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywg
dGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBhIGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdp
dmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxk
ZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcs
IHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTE1MTAsMjUgKzE2NDUsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNv
bnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwot
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNo
KTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0
ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiks
IHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4
ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1
YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZv
OworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAg
LTE1MzcsMTUgKzE2ODAsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25z
dCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5
VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJ
bkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogCiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJh
eVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fcHJvcGVydHksIHZpYWJsZUFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJh
dGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50
R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIHZp
YWJsZUFyZ3VtZW50R1BSNCk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0x
NTU2LDU5ICsxNzAyLDcwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3Qg
SW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Z2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHBy
b2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAgIC8vIHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJl
Q2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0
aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2
ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRl
Y2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2Us
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0
eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwog
CiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwg
SlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlwZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBt
X2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBBU1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGJhc2UpOworICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7CisgICAg
QVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8
IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIAogICAgIEpJVEluQnlWYWxH
ZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhh
c1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9w
ZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyArMTc3NSwyMSBAQCB2b2lkIEpJVDo6
ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVn
VDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VH
UFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJv
cGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRp
bWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUp
OwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1By
aXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9u
SGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXpl
OwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBl
OjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVy
YXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3By
aXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1
Miw3ICsxODAzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX25hbWUoYwog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRl
U2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVt
aXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29k
ZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xNjY2LDIxNSArMTgxNywxMjkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVCcmFuZD4o
KTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBi
eXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVC
cmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYgKCFu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSkpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BS
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xv
YmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50
U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVk
IGRlcHRoKQogewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyk7CisgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQogICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVU
eXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlw
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNv
bHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBt
ZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
LSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBt
X2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExl
eGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoK
LSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3Qs
IHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9z
dXJlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDAp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X3Jlc29sdmVUeXBlLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci19Ci0jZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LQotdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwot
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAg
ICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFk
YXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2Owot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAvLyBJ
ZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwg
bGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gcmVzb2x2ZSB0eXBlLgogCi0g
ICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKLSAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOworICAgIGlm
IChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhp
Y2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwogICAgIGVsc2UgewotICAgICAgICBwdHJkaWZmX3Qg
bWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRh
ZGF0YSk7CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKKworICAg
ICAgICBhdXRvIGNsb3N1cmVWYXJHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAg
ICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIs
ICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgICAgIH07CisK
KyAgICAgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9
IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZl
U2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGlu
ZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyIpOwor
ICAgICAgICB9OwogCi0jZGVmaW5lIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBl
KSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3Rh
dGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZP
Ul9FQUNIX1JFU09MVkVfVFlQRShSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyAgICAgICAgYXV0
byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAg
ICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBzdGQ6Om51bGxv
cHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7CiAgICAgICAgIH07Ci0j
dW5kZWYgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDI7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUMDsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJl
Z1Q1OwogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsK
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIp
OwogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKLSAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0
b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgICAgIGlmIChw
cm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgICAgICBjb2RlID0gdm0u
Z2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZSBpZiAocHJvZmls
ZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAg
ICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzR2VuZXJhdG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENU
SVN0dWIoZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvcik7CisgICAgICAgIGVtaXROYWtlZE5l
YXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZt
LCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBj
YW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OworCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcFJlc29sdmVTY29wZTo6
TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OyAvLyBp
bmNvbWluZwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsgLy8gaW5jb21p
bmcKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDI7IC8vIGluY29taW5n
CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOyAvLyBpbmNvbWluZwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcg
LSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gcmVnVDQ7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBl
KSk7CiAKLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKIAotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0
YWRhdGFUYWJsZSgpKSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOwor
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZN
ZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihyZWdUMywgbWV0YWRhdGFH
UFIpOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRvIGVtaXRWYXJJbmplY3Rp
b25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2Jh
bE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hl
Y2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIg
PT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7
Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2Jh
bE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6
Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpT
R2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNo
cG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0g
ICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fbG9jYWxTY29wZURlcHRoKSksIHJlZ1QxKTsKLQotICAgICAgICBMYWJlbCBsb29wID0g
bGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsK
LSAgICAgICAgewotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVnVDEpOwotICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKLSAgICAg
ICAgfQotICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworI2lmICFPUyhXSU5ET1dTKQorICAgICAgICBz
dGF0aWNfYXNzZXJ0KHNjb3BlR1BSID09IHJlZ1QwKTsKKyNlbmRpZgorICAgICAgICBqaXQubG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkxvY2FsU2NvcGVEZXB0
aCgpKSwgcmVnVDEpOworCisgICAgICAgIExhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAg
ICAgSnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CisgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDAp
OworICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAgICAgIGpp
dC5qdW1wKCkubGlua1RvKGxvb3AsICZqaXQpOworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAg
ICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
KSB7CkBAIC0xODgyLDEyICsxOTQ3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxC
aW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9m
ZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAg
IG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9h
ZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdsb2JhbExleGljYWxC
aW5kaW5nRXBvY2goKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRP
Zkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCkBAIC0xODk3LDExICsxOTYxLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRT
Y29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEds
b2JhbFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAg
ICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwog
ICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZH
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTE5MDksNyArMTk3Myw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgICAgIGVtaXRSZXNvbHZl
Q2xvc3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTE5MTksODMgKzE5ODMsNDUgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3
aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xv
YmFsTGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAocmVzb2x2
ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENsb3N1cmVW
YXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOwotCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsUHJvcGVydHkubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7
CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mUmVzb2x2ZVR5cGUoKSksIHJlZ1QxKTsKIAotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgYXV0byBlbWl0Q2FzZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9
IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkp
OworICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOworICAgICAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgIG5vdENhc2UubGluaygmaml0KTsK
KyAgICAgICAgfTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
c2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgZW1p
dENhc2UoR2xvYmFsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHkpOworICAg
ICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUp
OwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmppdCk7CiAgICAgfQog
Ci0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0g
ICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZl
X3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9j
YXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVM
b2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVG
SU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVU
eXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAo
IXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAg
ICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBq
aXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9w
X3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xW
RV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJTkVfUkVT
T0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAg
Ly8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0
aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0
aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTIwMDQsMTcgKzIwMzAsMzAg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGppdC5wdXNo
UGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKICNlbmRpZgogCi0gICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwotICAgIGppdC5zdG9y
ZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGluY29taW5nQnl0ZWNvZGVP
ZmZzZXRHUFIgPSByZWdUNTsKKyAgICBqaXQuc3RvcmUzMihpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0
R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRHUFIzOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgaW5zdHJ1Y3Rpb25HUFIgPSBhcmd1bWVudEdQUjE7CiAKKyNpZiBPUyhX
SU5ET1dTKQorICAgIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHNlbGVjdFNjcmF0Y2hHUFIo
Y29kZUJsb2NrR1BSLCBnbG9iYWxPYmplY3RHUFIsIGluc3RydWN0aW9uR1BSKTsKKyAgICBqaXQu
bW92ZShpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCBieXRlY29kZU9mZnNldEdQUik7CisjZWxz
ZQorICAgIHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiAhPSBjb2RlQmxv
Y2tHUFIpOworICAgIHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiAhPSBn
bG9iYWxPYmplY3RHUFIpOworICAgIHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9mZnNl
dEdQUiAhPSBpbnN0cnVjdGlvbkdQUik7CisjZW5kaWYKKwogICAgIGppdC5sb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVC
bG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGlu
c3RydWN0aW9uR1BSKTsKKyNpZiBPUyhXSU5ET1dTKQogICAgIGppdC5hZGRQdHIoYnl0ZWNvZGVP
ZmZzZXRHUFIsIGluc3RydWN0aW9uR1BSKTsKKyNlbHNlCisgICAgaml0LmFkZFB0cihpbmNvbWlu
Z0J5dGVjb2RlT2Zmc2V0R1BSLCBpbnN0cnVjdGlvbkdQUik7CisjZW5kaWYKIAogICAgIGppdC5z
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25SZXNvbHZlU2NvcGVGb3JCYXNlbGluZSk+
KGdsb2JhbE9iamVjdEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOwogICAgIGppdC5wcmVwYXJlQ2FsbE9w
ZXJhdGlvbih2bSk7CkBAIC0yMDM0LDcgKzIwNzMsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywg
Q29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNl
bGluZTogc2xvd19vcF9yZXNvbHZlX3Njb3BlIik7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAKIHZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCiB7CkBAIC0yMDYy
LDI3NiArMjEwMCwxMzMgQEAgdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdp
cwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNl
dE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKIH0K
IAotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUq
KiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRw
dHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0
YS5tX29wZXJhbmQpOwotCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewotICAgICAgICBzd2l0Y2gg
KHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVj
dHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1
Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCBy
ZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAg
ICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHQg
PSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZl
VHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpOwogCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1
bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSkpOwotICAgICAgICAgICAgfSkpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNT
RVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Cisg
ICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUlu
ZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgICAgICAgICBsb2FkMzIob3BlcmFu
ZFNsb3QsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAg
ICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFs
LCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAg
ICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAg
ICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0
ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4
KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoK
LSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0g
ICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
Km9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29w
ZSwgKm9wZXJhbmRTbG90KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFt
aWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIE1vZHVsZVZh
cjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KKyAgICBhdXRvIGNsb3N1cmVWYXJHZW5l
cmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRG
cm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29w
ZSBDbG9zdXJlVmFyIik7CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9h
ZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBl
IGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0
Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBl
bWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwot
Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5k
MzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJl
c29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAg
ICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotCi0gICAgICAgIHNraXBUb0Vu
ZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAg
ICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEZyb21TY29w
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJl
bnRJbnN0cnVjdGlvbik7Ci19Ci0KLSNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwot
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29s
dmVUeXBlKCk7CisgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVy
YXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZy
b21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2Vs
aW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7CisgICAgfTsKIAotICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7Ci0gICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7Ci0gICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQp
ID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBhdXRvIGdl
bmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVy
biBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFz
ZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OwogCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Nv
cGVHUFIgPSByZWdUNjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7
CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAotICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxWYXIpIHsKLSAgICAgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0gICAgICAgIGVtaXRH
ZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJl
Z1QwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBt
X2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisgICAgcHRyZGlm
Zl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZz
ZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0jZGVmaW5lIEdFVF9GUk9NX1NDT1BFX0dF
TkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2Vu
ZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1td
ID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKEdFVF9GUk9NX1NDT1BFX0dF
TkVSQVRPUikKLSAgICAgICAgfTsKLSN1bmRlZiBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCi0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLSAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOwotICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09
IENsb3N1cmVWYXIpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1cmVWYXJHZW5l
cmF0b3IpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yKTsKKyAgICBlbHNlCisgICAgICAg
IGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IpOworCisg
ICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhW
TSYgdm0sIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFy
KiB0aHVua05hbWUpCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0
aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQog
ICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3Qg
YmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcv
RlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3Rz
LCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29w
ZUdQUiA9IHJlZ1Q2OwotICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BHZXRGcm9t
U2NvcGUocmVzb2x2ZVR5cGUpKTsKLQotICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKLQotICAgIGxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgp
KSwgcmVnVDMpOwotICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3Bl
R1BSID0gcmVnVDI7CiAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCi0gICAgYXV0byBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVn
IHNjb3BlR1BSLCBpbnQzMl90IG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSB7Ci0gICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdU
MSk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwotICAgIH07CisgICAgaml0LnRhZ1JldHVy
bkFkZHJlc3MoKTsKKworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgaml0LmFkZFB0cihy
ZWdUMywgbWV0YWRhdGFHUFIpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CiAKLSAgICBhdXRv
IGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFy
SW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRl
KCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3Qo
KSksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09G
RlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMp
OworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVn
VDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOwogICAgIH07CiAgICAgCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIg
PSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywg
cmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9
IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCBy
ZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcg
c2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoMSA8
PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIo
MyksIG9wZXJhbmRHUFIpOwotICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOwot
ICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdENv
ZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpIHsKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hl
Y2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBm
b3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9z
Y29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLQotICAgICAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZz
ZXQgPSByZWdUMTsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1Qy
OwotCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAo
KSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAg
ICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBk
b24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4g
QWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIg
aW5qZWN0aW9uLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgcmVnVDEpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1Qx
KSk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChq
aXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QxKSk7CisKKyAgICAgICAgICAgIGppdC5qaXRBc3NlcnQoc2NvcGVk
TGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAg
ICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGppdC5i
cmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QxKTsK
KwogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVt
cCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVz
dGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBhYm9ydFdp
dGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAgICAgICAgIGlzT3V0
T2ZMaW5lLmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGpp
dC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJ
VE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5r
KCZqaXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVn
MzIob2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0
KTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0Vp
Z2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
LCByZXN1bHQpOworCisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubmVn
MzIocmVnVDEpOworICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdU
MSk7CisgICAgICAgICAgICBqaXQubG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
R2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21JbmRpcmVjdFBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQp
LCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZy
b21Qb2ludGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOwor
ICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0
LmxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgcmVn
VDMpOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1QzKTsKKyAg
ICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
ICBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMyk7CisgICAgICAgICAgICBzdGF0
aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIGppdC5s
c2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5hZGRQdHIo
c2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMs
IEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOworCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjM0MSw4NiArMjIzNiw2MyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0g
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICBpZiAo
cmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29sdmVUeXBlID09IENs
b3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9IGVsc2UgewogICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRh
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7Ci0g
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSksIHJlZ1QwKTsKKyAgICAgICAg
aml0LmFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8g
TG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2Jh
bExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsK
KyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7
CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2Jh
bFZhci5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbiA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1w
KCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsoJmppdCk7CisK
KyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gaml0LmJyYW5jaDMyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAg
ICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKCZqaXQpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlz
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1
bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluaygmaml0KTsKIAotICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAg
ICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluaygmaml0KTsKIAotICAgICAgICBza2lwVG9FbmQu
bGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZl
VHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsoJmpp
dCk7CiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVj
a2V0cyA9PSAxKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdU
MCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFs
dWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKIAotICAgIHJldCgpOworICAgIGpp
dC5yZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVO
S19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gc2xvd0Nhc2VIYW5k
bGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOwot
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNl
SGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1
bmtQdHJUYWcsIHRodW5rTmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BF
X0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihW
TSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JP
cEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwK
LSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0
RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVf
IiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9H
RVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0jdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dF
TkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xv
d19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5r
IGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQg
LyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0
IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2lu
ZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7
CkBAIC0yNDI5LDE4ICsyMzAxLDMzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICNlbmRpZgogCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6
TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKLSAgICBqaXQuc3Rv
cmUzMihieXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJl
Z1Q0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiA9IHJl
Z1Q1OworICAgIGppdC5zdG9yZTMyKGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBpbnN0cnVjdGlvbkdQUiA9IGFyZ3VtZW50R1BSMTsKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHNlbGVjdFNjcmF0Y2hHUFIobWV0YWRhdGFHUFIsIGNv
ZGVCbG9ja0dQUiwgZ2xvYmFsT2JqZWN0R1BSLCBpbnN0cnVjdGlvbkdQUik7CisgICAgaml0Lm1v
dmUoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiwgYnl0ZWNvZGVPZmZzZXRHUFIpOworI2Vsc2UK
KyAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0gY29kZUJsb2Nr
R1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0gZ2xv
YmFsT2JqZWN0R1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRH
UFIgIT0gaW5zdHJ1Y3Rpb25HUFIpOworICAgIHN0YXRpY19hc3NlcnQobWV0YWRhdGFHUFIgIT0g
Y29kZUJsb2NrR1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG1ldGFkYXRhR1BSICE9IGdsb2JhbE9i
amVjdEdQUik7CisgICAgc3RhdGljX2Fzc2VydChtZXRhZGF0YUdQUiAhPSBpbnN0cnVjdGlvbkdQ
Uik7CisjZW5kaWYKIAogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVC
bG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0
R1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGluc3RydWN0aW9uR1BSKTsKKyNpZiBP
UyhXSU5ET1dTKQogICAgIGppdC5hZGRQdHIoYnl0ZWNvZGVPZmZzZXRHUFIsIGluc3RydWN0aW9u
R1BSKTsKKyNlbHNlCisgICAgaml0LmFkZFB0cihpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCBp
bnN0cnVjdGlvbkdQUik7CisjZW5kaWYKIAogICAgIEFTU0VSVChSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpLmNvbnRhaW5zKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSk7CiAg
ICAgaml0Lm1vdmUobWV0YWRhdGFHUFIsIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsgLy8g
UHJlc2VydmUgbWV0YWRhdGEgaW4gYSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXIuCkBAIC0yNDQ5LDcg
KzIzMzYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
Q2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIEp1bXAgZXhj
ZXB0aW9uQ2hlY2sgPSBqaXQuZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKIAot
ICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVy
LCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2
NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgTWV0YWRhdGE6Om9m
ZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsK
ICAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6
bnVtYmVyVGFnUmVnaXN0ZXIpOwogCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTI0NjksODggKzIzNTYs
NzcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIHBhdGNo
QnVmZmVyLmxpbmsoanVtcFRvSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9nZXRfZnJvbV9zY29wZSIp
OwogfQotI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCi12b2lkIEpJVDo6ZW1p
dFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdU
MCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3Qo
SlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQs
IHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVz
c09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwot
ICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6
b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci19CiAK
IHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5t
X3Njb3BlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0g
ICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7Ci0g
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0g
ICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3Qo
KTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAg
ICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisKKyAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAg
ICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0
cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBz
dHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5
LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgor
ICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNl
IHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2Jq
ZWN0LgorICAgICAgICAgICAgLy8gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMg
Y2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1
cmUoKSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
cmVnVDApOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdU
MSkpOworICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSkpOworCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
Mik7CiAKICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZd
ICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAg
ICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVy
biBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMyk7CiAgICAgICAgICAgICB9KSk7CiAKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwor
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCByZWdUMyk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwogICAg
ICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNl
SW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAy
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJp
ZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OworICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSog
Y29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2
ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50
U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVj
ayhyZXNvbHZlVHlwZSk7Ci0gICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0
SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKSB7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBlbWl0VmFyUmVh
ZE9ubHlDaGVjayhyZXNvbHZlVHlwZSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJh
bmQoKSwgcmVnVDApOworCisgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNv
ZGUubV9nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEg
VERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBl
bWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KLSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVj
dFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCksIHJlZ1QxKTsKKyAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0
R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xv
dCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFs
dWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsK
KyAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDEpOworCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBz
dG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwKSk7CisKKyAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihz
Y29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKKyAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSksIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShi
eXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCks
IHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0
VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CisgICAgICAgICAg
ICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJ
bmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZz
ZXRPZlZhcmlhYmxlcygpKSk7CisKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBNb2R1bGVWYXI6CkBAIC0yNTY0LDU4ICsyNDQwLDUyIEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2gg
KHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0g
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsK
LSAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpKTsK
LSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1pYywgaXQgY2FuIGhhcHBlbiBp
ZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHktaW5pdGlhbGl6ZWQgY29uc3Qg
YmluZGluZy4KLQotICAgICAgICBpc0dsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLSAgICAg
ICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVl
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzR2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNl
KTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9j
ayBzZWVzIENsb3N1cmVWYXIvIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0aGVu
IHdlIGNhbiBjb21waWxlIHRoaW5ncworICAgIC8vIHRoYXQgd2F5IGZvciBhbGwgQ29kZUJsb2Nr
cywgc2luY2Ugd2UndmUgcHJvdmVuIHRoYXQgaXMgdGhlIHR5cGUgd2Ugd2lsbCBiZS4gSWYgd2Un
cmUgYSBDbG9zdXJlVmFyLAorICAgIC8vIGFsbCBDb2RlQmxvY2tzIHdpbGwgYmUgQ2xvc3VyZVZh
ci4gSWYgd2UncmUgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHdlJ3JlIGFsd2F5
cyBDbG9zdXJlVmFyCisgICAgLy8gaWYgdGhlIHZhciBpbmplY3Rpb24gd2F0Y2hwb2ludCBpc24n
dCBmaXJlZC4gSWYgaXQgaXMgZmlyZWQsIHRoZW4gd2UgdGFrZSB0aGUgc2xvdyBwYXRoLCBzbyBp
dCBkb2Vzbid0CisgICAgLy8gbWF0dGVyIHdoYXQgdHlwZSB3ZSBhcmUgZHluYW1pY2FsbHkuCisg
ICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENv
ZGUoQ2xvc3VyZVZhcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBSZXNv
bHZlZENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKFJlc29sdmVkQ2xvc3VyZVZhcik7Cisg
ICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykKKyAgICAgICAgZW1pdENvZGUoQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMkZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQ
dXRJbmZvKCksIHJlZ1QwKTsKICAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAg
ICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQ
cm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFs
c2UpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOwogCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7CisgICAgICAgIGVtaXRD
b2RlKEdsb2JhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAg
ICAgbm90R2xvYmFsVmFyLmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhpcyk7
CisKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwor
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7
CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKICAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpKTsKIAogICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUs
IGZhbHNlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCkBAIC0yNjI0LDE4ICsyNDk0LDIx
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gY29w
aWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5cGUoKTsKLSAgICBpZiAocmVzb2x2ZVR5
cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpOworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewor
ICAgICAgICAvLyBJZiBhbnkgbGlua2VkIENvZGVCbG9jayBzYXcgYSBNb2R1bGVWYXIsIHRoZW4g
YWxsIGxpbmtlZCBDb2RlQmxvY2tzIGFyZSBndWFyYW50ZWVkCisgICAgICAgIC8vIHRvIGFsc28g
c2VlIE1vZHVsZVZhci4KICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25s
eV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiAg
ICAgfSBlbHNlIHsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
VG9TY29wZSwgYXJndW1lbnRHUFIwLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogI2Vsc2UKICAgICAg
ICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4
KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQobV9j
b2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1
Y3Rpb24pOworICAgICAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICAgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CkBA
IC0yNjUyLDcgKzI1MjUsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2
XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTI3MDEsNyArMjU3NCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KICAgICAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQ2NChBZGRy
ZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yNzU5LDcgKzI2MzIsNiBAQCB2b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcihKU0NlbGwqIG93bmVyCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxf
ZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKQEAgLTI3NjcsNyArMjYzOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9p
bnRlcm5hbF9maWVsZChjb24KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qx
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8
Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCkBAIC0yODIzLDcgKzI2OTUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRl
Y29kZS5tX21vZGU7CkBAIC0yODM5LDExICsyNzEwLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfbmV4dChjb25zdCAKICAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QyOwogCiAgICAg
Ly8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gbW9kZSBzZXQgd2UgdGVuZCB0byBzZWUsIHNvIHNw
ZWNpYWwgY2FzZSBpdCBpZiB3ZSBwcm9maWxlIGl0IGluIHRoZSBMTEludC4KLSAgICBpZiAobWV0
YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpP
d25TdHJ1Y3R1cmVNb2RlKSB7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6T3duU3RydWN0dXJlTW9kZSkgewogICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJl
Z1QzOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOwogICAgICAgICBvcGVy
YXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKCh+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSAmIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKworICAgICAgICBsb2FkOEZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BFbnVtZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mRW51
bWVyYXRvck1ldGFkYXRhKCksIHNjcmF0Y2hHUFIpOworICAgICAgICBvcjMyKFRydXN0ZWRJbW0z
MihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgc3RvcmU4VG9NZXRhZGF0YShzY3JhdGNoR1BSLCBieXRlY29kZSwgT3BFbnVt
ZXJhdG9yTmV4dDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOworCiAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSksIGluZGV4R1BSKTsKICAgICAgICAgb3Bl
cmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRleEdQUiwgQWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CiAKQEAgLTI4ODEsNzggKzI3
NTgsODggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IAogdm9pZCBK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2Rl
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lOwogICAgIFZpcnR1YWxSZWdp
c3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IGRv
bmVDYXNlczsKIAotICAgIGF1dG8gcmVzdWx0R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQ
UlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdl
dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIg
PSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gQmFzZWxp
bmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gxOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2Ny
YXRjaDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMyA9IEJhc2VsaW5lRW51bWVyYXRv
ckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG1vZGUsIHNjcmF0Y2gzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5TmFtZSwgcHJvcGVydHlHUFIpOwogCi0gICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJl
c3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVt
ZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaDIpOworICAgIG9yMzIoc2NyYXRjaDMsIHNjcmF0Y2gy
KTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0Y2gyLCBieXRlY29kZSwgT3BFbnVtZXJhdG9y
R2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIg
ZW5jb2RlZCB2YWx1ZS4KLSAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7
CisgICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywg
c2NyYXRjaDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRN
b2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwogCiAgICAgLy8g
Q2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCBzY3JhdGNoMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIEp1bXAgc3RydWN0dXJl
TWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwog
CiAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBzY3JhdGNo
Mik7CiAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVk
IGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0
T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdU
MiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9y
YWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAg
ICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7
Ci0KKyAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgc2Ny
YXRjaDIsIEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gy
LCBzY3JhdGNoMik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoMiwgVGlt
ZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsK
ICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBPdGhlcndpc2UgaXQncyBv
dXQgb2YgbGluZQogICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAg
IHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBuZWczMihyZWdUMyk7Ci0gICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFzZUdQUik7CisgICAgc3ViMzIoQWRk
cmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBzaWdu
RXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOwogICAgIGNvbnN0ZXhwciBpbnRwdHJf
dCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGlu
ZU9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7
Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQsIG9mZnNldE9m
Rmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgbG9hZDY0KEJhc2VJbmRleChiYXNlR1BS
LCBzY3JhdGNoMiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BS
KTsKICAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICBzdHJ1Y3R1cmVNaXNtYXRj
aC5saW5rKHRoaXMpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFk
YXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3Ry
dWN0dXJlTWlzbWF0Y2gpLCBieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRh
OjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIGlzTm90T3duU3RydWN0dXJl
TW9kZS5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVk
TW9kZSkpOworICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHNjcmF0
Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkp
OwogICAgIC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4KLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbmRleCwgcHJvcGVydHlHUFIpOwogCiAgICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7
CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBz
Y3JhdGNoMSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBy
ZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7Cisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0
QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8g
V2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNl
dCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAK
ICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjk2MSwxMCArMjg0OCw5IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV8KICAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nh
c2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7
CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1
bmN0aW9uVHlwZT4KLXZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBi
eXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6
OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlv
blR5cGUgZ2VuZXJhbENhc2UpCiB7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZp
cnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwpAQCAtMjk3
Myw3ICsyODU5LDkgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbQog
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9k
ZSwgcmVnVDApOwotICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2Vu
dW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBCeXRl
Y29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHJlZ1QxKTsKKyAg
ICBvcjMyKHJlZ1QwLCByZWdUMSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMSwgYnl0ZWNv
ZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAK
ICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKIApAQCAt
MzA2Miw2ICsyOTUwLDEzIEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3du
ZXIKICAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQg
SklUOjplbWl0V3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lcikKK3sKKyAgICBKdW1wIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIG93bmVyLCBzZWxlY3RTY3Jh
dGNoR1BSKG93bmVyKSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBvd25lcik7CisgICAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw5ICsyMzYsOSBAQCBzdGF0aWMgSW5saW5lQ2Fj
aGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KGJhc2VD
ZWxsKSkgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNo
ZVR5cGU6OlVuc2V0CiAgICAgICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBi
YXNlQ2VsbAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxl
QXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgeworICAg
ICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgo
Y29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7CiAKLSAg
ICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxs
KSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8
SlNBcnJheSo+KGJhc2VDZWxsKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRD
b2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24o
a2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3Ro
KGxvY2tlcik7CkBAIC0yNDksOCArMjQ5LDggQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgsIHByb3BlcnR5TmFtZSk7
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSlNTdHJpbmcoYmFzZUNlbGwpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAg
ICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0
aChzdHViSW5mbykpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5s
aW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChzdHViSW5mbyk7CisgICAg
ICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgo
Y29kZUJsb2NrLCBzdHViSW5mbykpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0
ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChjb2RlQmxv
Y2ssIHN0dWJJbmZvKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxp
bmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0U3RyaW5nTGVuZ3RoKGxvY2tl
cik7CkBAIC0zMDQsNyArMzA0LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
R2V0QnkoSgogICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQogICAgICAg
ICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQog
ICAgICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJvbVByb3h5KSB7Ci0gICAgICAgICAgICAg
ICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQ
cm9wZXJ0eUFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsK
KyAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVy
ZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENv
ZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeVNl
bGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwg
cHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxh
Y2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBAIC03MzEsMTEgKzczMSwxMSBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeShKCiAgICAgICAgICAgICAgICAg
b2xkU3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNh
Y2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5s
aW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2Fu
R2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgICAgICYmICFvbGRTdHJ1Y3R1cmUtPm5lZWRJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQogICAgICAgICAgICAgICAgICAgICAmJiAhaXNQcm94
eSkgewogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5l
cmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxh
Y2Uoc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIG9sZFN0cnVjdHVy
ZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5i
YXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xv
d1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5
RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7CkBAIC0xMTMyLDcgKzExMzIsNyBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAogICAgICAgICAgICAgICAg
ICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlCiAgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0
Y2hwb2ludFNldCgpCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2Rl
SW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhzdHViSW5mbywgc3Ry
dWN0dXJlKTsKKyAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVj
dHVyZSk7CiAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKICAgICAg
ICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVu
dHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpAQCAtMTU1Miw3ICsxNTUyLDcgQEAgc3RhdGlj
IHZvaWQgcmV2ZXJ0Q2FsbChWTSYgdm0sIENhbGxMaW5rSQogCiB2b2lkIHVubGlua0NhbGwoVk0m
IHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKLSAgICBkYXRhTG9nTG5JZihPcHRp
b25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBjYWxsIGF0ICIsIGNhbGxMaW5rSW5m
by5mYXN0UGF0aFN0YXJ0KCkpOworICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1bXBEaXNhc3Nl
bWJseSgpLCAiVW5saW5raW5nIENhbGxMaW5rSW5mbzogIiwgUmF3UG9pbnRlcigmY2FsbExpbmtJ
bmZvKSk7CiAgICAgCiAgICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExpbmtJbmZvLCB2bS5nZXRDVElT
dHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PigpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMjQgKzQzLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0m
IHZtKQotewotICAgIENDYWxsSGVscGVycyBqaXQ7Ci0KLSAgICBqaXQuY29weUNhbGxlZVNhdmVz
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7Ci0KLSAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKLSAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwotCi0gICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7Ci0KLSAg
ICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7Ci0KLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNU
SVRodW5rKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7Ci0gICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhj
ZXB0aW9uIik7Ci19Ci0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFu
ZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAg
ICBDQ2FsbEhlbHBlcnMgaml0OwpAQCAtNzcsMjQgKzU5LDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBoYQogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFj
ayIpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5r
U3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQotewotICAg
IENDYWxsSGVscGVycyBqaXQ7Ci0KLSNpZiBDUFUoWDg2XzY0KQotICAgIGppdC5hZGRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdp
c3RlcnM6OmVzcCk7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxw
ZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIpOwot
I2VuZGlmCi0KLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29udGludWF0aW9uID0gaml0Lmp1bXAo
KTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIGF1dG8gaGFuZGxlciA9IHZt
LmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKGNvbnRpbnVhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsICJwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uIik7
Ci19Ci0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IoVk0mIHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkBAIC0xMzcsNiAr
MTAxLDQyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2gKIAogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCit7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKKworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKKworICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAg
IGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
b3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKworICAgIGppdC5qdW1wVG9F
eGNlcHRpb25IYW5kbGVyKHZtKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAg
IHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKTsKKyAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRpb24iKTsKK30K
KworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJl
c2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjpl
c3ApOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJh
bWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKKyNlbmRpZgor
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7CisKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElT
dHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7CisgICAgcGF0Y2hCdWZmZXIubGluayhjb250
aW51YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRy
VGFnLCAicG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOworfQorCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUYWdUeXBlPgogaW5saW5lIHZvaWQgZW1pdFBvaW50ZXJWYWxpZGF0
aW9uKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcG9pbnRlckdQUiwgVGFnVHlwZSB0YWcpCiB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEyICszNywxMiBAQCBjbGFzcyBWTTsKIAogI2lm
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJh
Y2tHZW5lcmF0b3IoVk0mKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
cG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwog
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNB
bmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Io
Vk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaCIKICNpbmNsdWRlICJDYWxs
RnJhbWUuaCIKICNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgorI2luY2x1
ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIK
QEAgLTM3MCwxMyArMzcxLDIyIEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0
aWNzKFYKICAgICAKICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rp
b25zKCk7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxp
bmVKSVQpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVm
ID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2Rl
KSB7CisgICAgICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2Rl
KGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGNv
ZGVCbG9jay0+aml0TmV4dEludm9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hv
bGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJk
ZWxheUpJVENvbXBpbGUiLCAoInRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNv
ZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQu
Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgSklUV29ya2xpc3Q6
OlN0YXRlIHdvcmtsaXN0U3RhdGUgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3Qo
KS5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbk1vZGU6OkJhc2VsaW5lKSk7CisgICAgSklUV29ya2xpc3Q6OlN0
YXRlIHdvcmtsaXN0U3RhdGUgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5j
b21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2Nr
LT51bmxpbmtlZENvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbk1vZGU6OkJhc2VsaW5lKSk7CiAK
ICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsK
ICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIENvZGUgd2Fz
IGFscmVhZHkgY29tcGlsZWQuIik7CkBAIC00NjYsOCArNDc2LDEwIEBAIExMSU5UX1NMT1dfUEFU
SF9ERUNMKGxvb3Bfb3NyKQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZy
b21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIGNvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxp
Z2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIg
PSB2bS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIocGMpOwogICAgICAgICAqcHRyICs9IGNv
ZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLm1fYWN0aXZlVGhyZXNob2xkOwotICAgICAg
ICBpZiAoKnB0ciA+PSBPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQo
KSkKKyAgICAgICAgaWYgKCpwdHIgPj0gT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVM
b29wc0xpbWl0KCkpIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShDb25j
dXJyZW50SlNMb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spKTsgLy8gV2UncmUgcmV0dXJuaW5nIHRv
IHRoZSBPU1IgZW50cnkgY29kZSBoZXJlLCB3aGljaCBleHBlY3RzIHRoYXQgbV9qaXREYXRhIGlz
IG5vdCBudWxsLgogICAgICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhMTEludDo6ZnV6emVyUmV0
dXJuRWFybHlGcm9tTG9vcEhpbnRFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCksIGNhbGxGcmFtZS0+dG9wT2ZGcmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBj
b3B5KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0
ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRl
Z2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBv
cGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9y
aCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEo
dDEsIHQyKQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZz
ZXRbY2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFj
cm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRh
IGluIHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cp
CiAgICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1
cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAg
ICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQog
CiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQ
cm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJp
dGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAg
IG1ldGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAu
b3BOZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93
CiAgICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisg
ICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUs
IHQzKQogICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAg
IGJpYSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0
MQotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRl
VW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQog
ICAgIHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYg
QEAgZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0
cnVjdCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRo
UHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRh
ZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAg
ICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMs
IHQyKQogICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8g
YmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJU
YWcsIC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0g
ICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQy
KQogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3Rv
cmUodDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEy
ICsxMTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAg
ICAgICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFn
LCAub3AxTm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cK
LSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50
LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRS
ZWFkeQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQx
Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJl
ck51bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0
LCB0MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBv
cGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5p
dGVseSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0
VGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQor
ICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2Zp
bGVJbnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWky
ZCB0MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEs
MTMgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSBQ
QywgYTEKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBi
dHB6IHIwLCAucmVjb3ZlcgotCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisgICAgICAgICAg
ICAjIEJhc2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFu
dCBwb29sLgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgICAgICAg
ICBsb2FkcCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAgICBsb2FkcCBD
b2RlQmxvY2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwogICAgICAgICAg
ICAgaWYgQVJNNjRFCiAgICAgICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIg
SlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6Omxvb3BPU1JF
bnRyeSkgKiBQdHJTaXplLCBhMgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJ
VEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0
RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVO
YW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBl
bmQKLQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwg
OF0sIHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3MCw3IEBAIG1h
Y3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9w
ZXJhdGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0
b3JlcSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFBy
b2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
QXJpdGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93
OgpAQCAtMTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9w
X25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
cmV0dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9y
aCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0
MikKQEAgLTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUs
IE9wTmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBu
ZWdpIHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJp
dGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0
aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAg
ICAgYnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAw
MDAwMDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikK
KyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVy
LCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCAr
MTE2MCw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBs
bGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEo
dDUsIHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0
eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJp
dGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3Jocywg
dDApCiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUoc2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0
b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBp
bnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJv
ZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBkaXNw
YXRjaCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJl
clRhZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEs
IGZ0MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVy
TnVtYmVyLCB0NSwgdDIpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90
SW50T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAg
ICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVt
YmVySW50LCB0NSwgdDIpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVh
ZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA0LDkgKzExOTYsOSBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAKICAgICAub3AyTm90SW50OgogICAg
ICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMg
ZGVmaW5pdGVseSBub3QuCi0gICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEs
IG51bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIp
CisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZUludE51bWJlciwgdDUsIHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBj
aTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQx
LCBmdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTQy
MCw3ICsxNDIwLDggQEAgZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5jcmVtZW50LCBh
Y3Rpb24pCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgYmFkZGlzIGluY3JlbWVu
dCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNv
dW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQorICAgIGxvYWRwIENvZGVCbG9jazo6bV9s
bGludEV4ZWN1dGVDb3VudGVyW3QwXSwgdDAKKyAgICBiYWRkaXMgaW5jcmVtZW50LCBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgIGFjdGlvbigp
CiAgICAgLmNvbnRpbnVlOgogZW5kCkBAIC0xNTAzLDcgKzE1MDQsOCBAQCBtYWNybyBwcm9sb2d1
ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgY29kZUJsb2NrR2V0dGVyKHQxKQogICAg
IGNvZGVCbG9ja1NldHRlcih0MSkKICAgICBpZiBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQot
ICAgICAgICBiYWRkaXMgNSwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MV0sIC5jb250aW51ZQorICAgICAgICBs
b2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MV0sIHQwCisgICAgICAgIGJh
ZGRpcyA1LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51
ZQogICAgICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAg
ICAgICAgbW92ZSBQQywgYTEKQEAgLTE2MTcsMTQgKzE2MTksMTQgQEAgbWFjcm8gZnVuY3Rpb25J
bml0aWFsaXphdGlvbihwcm9maWxlQXJnUwogICAgICMgb3B0aW1hbCB3YXkgZm9yIGFyY2hpdGVj
dHVyZXMgdGhhdCBoYXZlIG1vcmUgdGhhbiBmaXZlIHJlZ2lzdGVycyBhdmFpbGFibGUKICAgICAj
IGZvciBhcmJpdHJhcnkgdXNlIGluIHRoZSBpbnRlcnByZXRlci4KICAgICBsb2FkaSBDb2RlQmxv
Y2s6Om1fbnVtUGFyYW1ldGVyc1t0MV0sIHQwCi0gICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQw
ICMgVXNlIGFkZGkgYmVjYXVzZSB0aGF0J3Mgd2hhdCBoYXMgdGhlIHBlZXBob2xlCisgICAgYWRk
cCAtcHJvZmlsZUFyZ1NraXAsIHQwCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnBndGVxIHQwLCAw
LCBvayBlbmQpCiAgICAgYnRweiB0MCwgLmFyZ3VtZW50UHJvZmlsZURvbmUKICAgICBsb2FkcCBD
b2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzICsgRml4ZWRWZWN0b3I6Om1fc3RvcmFn
ZSArIFJlZkNvdW50ZWRBcnJheTo6bV9kYXRhW3QxXSwgdDMKICAgICBidHB6IHQzLCAuYXJndW1l
bnRQcm9maWxlRG9uZSAjIFdoZW4gd2UgY2FuJ3QgSklULCB3ZSBkb24ndCBhbGxvY2F0ZSBhbnkg
YXJndW1lbnQgdmFsdWUgcHJvZmlsZXMuCiAgICAgbXVscCBzaXplb2YgVmFsdWVQcm9maWxlLCB0
MCwgdDIgIyBBYWFhYWhoaGghIE5lZWQgc3RyZW5ndGggcmVkdWN0aW9uIQogICAgIGxzaGlmdHAg
MywgdDAgIyBvZmZzZXQgb2YgbGFzdCBKU1ZhbHVlIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCi0g
ICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4g
Q29kZUJsb2NrOjptX2FyZ3VtZW50VmFsdWVQcm9maWxlcy4KKyAgICBhZGRwIHQyLCB0MyAjIHBv
aW50ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBpbiB0aGUgdmFsdWUgcHJvZmlsZSBh
cnJheS4KIC5hcmd1bWVudFByb2ZpbGVMb29wOgogICAgIGlmIEpTVkFMVUU2NAogICAgICAgICBs
b2FkcSBUaGlzQXJndW1lbnRPZmZzZXQgLSA4ICsgcHJvZmlsZUFyZ1NraXAgKiA4W2NmciwgdDBd
LCB0MgpAQCAtMjU2Myw2ICsyNTY1LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5k
CiBlbmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5
cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9y
aCB0eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1F
OiBXZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNl
IFdFQkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZ
IGFuZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cigpID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBj
cmVhdGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29k
ZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2Nr
KiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVy
Jik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlu
bGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlx
dWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmll
ciBjcmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxl
SWRlbnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlk
ZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayog
Y29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29k
ZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGlu
ZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENh
Y2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5o
YXNJZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3Bw
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJDYWNoZWRUeXBlcy5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVD
YWNoZUVycm9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCkBAIC0x
OTE4LDYgKzE5MTksOCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1WYWx1ZVByb2ZpbGVz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1WYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5zaWduZWQgbnVt
QXJyYXlQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJyYXlQcm9maWxlczsgfQorICAg
IHVuc2lnbmVkIG51bUJpbmFyeUFyaXRoUHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bUJp
bmFyeUFyaXRoUHJvZmlsZXM7IH0KKyAgICB1bnNpZ25lZCBudW1VbmFyeUFyaXRoUHJvZmlsZXMo
KSBjb25zdCB7IHJldHVybiBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsgfQogCiBwcml2YXRlOgog
ICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKQEAgLTE5NTIsNiArMTk1NSw4IEBA
IHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX251bVZhbHVlUHJvZmlsZXM7CiAgICAgdW5zaWdu
ZWQgbV9udW1BcnJheVByb2ZpbGVzOworICAgIHVuc2lnbmVkIG1fbnVtQmluYXJ5QXJpdGhQcm9m
aWxlczsKKyAgICB1bnNpZ25lZCBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsKIAogICAgIENhY2hl
ZE1ldGFkYXRhVGFibGUgbV9tZXRhZGF0YTsKIApAQCAtMjE2MCw2ICsyMTY1LDggQEAgQUxXQVlT
X0lOTElORSBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZQogICAgICwgbV9yYXJlRGF0YShjYWNo
ZWRDb2RlQmxvY2sucmFyZURhdGEoZGVjb2RlcikpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZXMoY2Fj
aGVkQ29kZUJsb2NrLm51bVZhbHVlUHJvZmlsZXMoKSkKICAgICAsIG1fYXJyYXlQcm9maWxlcyhj
YWNoZWRDb2RlQmxvY2subnVtQXJyYXlQcm9maWxlcygpKQorICAgICwgbV9iaW5hcnlBcml0aFBy
b2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1CaW5hcnlBcml0aFByb2ZpbGVzKCkpCisgICAgLCBt
X3VuYXJ5QXJpdGhQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVtVW5hcnlBcml0aFByb2ZpbGVz
KCkpCiB7CiB9CiAKQEAgLTIzMzcsNiArMjM0NCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDYWNo
ZWRDb2RlQmxvY2s8Q29kZUIKICAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29kZUJsb2NrLm1faGFz
Q2hlY2twb2ludHM7CiAgICAgbV9udW1WYWx1ZVByb2ZpbGVzID0gY29kZUJsb2NrLm1fdmFsdWVQ
cm9maWxlcy5zaXplKCk7CiAgICAgbV9udW1BcnJheVByb2ZpbGVzID0gY29kZUJsb2NrLm1fYXJy
YXlQcm9maWxlcy5zaXplKCk7CisgICAgbV9udW1CaW5hcnlBcml0aFByb2ZpbGVzID0gY29kZUJs
b2NrLm1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgbV9udW1VbmFyeUFyaXRoUHJv
ZmlsZXMgPSBjb2RlQmxvY2subV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOwogCiAgICAgbV9t
ZXRhZGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEuZ2V0KCkpOwogICAg
IG1fcmFyZURhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVEYXRhLmdldCgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBA
IEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklU
KQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRl
OjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7
Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmls
ZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJv
ZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3Vs
dC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9u
IDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVibGljOgogCiAgICAg
c3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9CiAgICAgc3RhdGlj
IGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAgc3RhdGljIGlubGlu
ZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsgfQorICAgIHN0
YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MzQsOCArNDM0LDYgQEAgdm9pZCBPcHRpb25zOjpyZWNvbXB1
dGVEZXBlbmRlbnRPcHRpb25zKAogICAgIE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpID0gZmFs
c2U7CiAjZW5kaWYKIAotICAgIGlmICghaXNBUk02NCgpKQotICAgICAgICBPcHRpb25zOjp1c2VE
YXRhSUMoKSA9IGZhbHNlOwogICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCiAgICAgICAg
IE9wdGlvbnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpID0gZmFsc2U7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw2IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0
TWVtb3J5KCk7CiAgICAgdihJbnQzMiwgZXZhbFRocmVzaG9sZE11bHRpcGxpZXIsIDEwLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBtYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJj
ZUxlbmd0aCwgMjU2LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCi0gICAgdihCb29sLCByYW5k
b21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNr
cG9pbnRzRm9yQmFzZWxpbmUsIDEwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIs
IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JVcHBlclRpZXJzLCA1
MDAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXApAQCAtNTMyLDYgKzUzMSw3IEBAIGJvb2wg
Y2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihCb29sLCB1c2VEYXRhSUMsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ0luT3B0aW1pemlu
Z0pJVCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDU2hh
cmluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgdXNlQmFzZWxpbmVK
SVRDb2RlU2hhcmluZywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIC8qIEZl
YXR1cmUgRmxhZ3MgKi9cCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOTYsMTAgKzM5NiwxOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBh
cmVGb3JFeGVjdXRpCiAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlQnl0ZWNvZGUoKSkKICAgICAg
ICAgY29kZUJsb2NrLT52YWxpZGF0ZSgpOwogCi0gICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkp
Ci0gICAgICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKLSAgICBlbHNlCi0gICAgICAgIHNldHVw
SklUKHZtLCBjb2RlQmxvY2spOworICAgIGJvb2wgaW5zdGFsbGVkVW5saW5rZWRCYXNlbGluZUNv
ZGUgPSBmYWxzZTsKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRD
b2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxp
bmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2Vk
QmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBpbnN0
YWxsZWRVbmxpbmtlZEJhc2VsaW5lQ29kZSA9IHRydWU7CisgICAgfQorI2VuZGlmCisgICAgaWYg
KCFpbnN0YWxsZWRVbmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICBpZiAoT3B0aW9uczo6
dXNlTExJbnQoKSkKKyAgICAgICAgICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CisgICAgfQogCiAgICAg
aW5zdGFsbENvZGUodm0sIGNvZGVCbG9jaywgY29kZUJsb2NrLT5jb2RlVHlwZSgpLCBjb2RlQmxv
Y2stPnNwZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHJldmlzaW9uIDI4MzA1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRp
bWl6ZUFmdGVyV2FybVVwKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRU
aWVyc1VwVG9CQlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJl
c2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAg
c2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJt
VXAoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25z
Ojp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAg
ICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0
ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNo
b2xkUmVhY2hlZCgpCkBAIC02NSw5ICs2NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXpl
U29vbigpCiAgICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJR
KCkpCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJR
T3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9w
dGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXpl
U29vbigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0
aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAgICAgfQogCiAgICAgc3RydWN0IE9TUkVu
dHJ5RGF0YSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVy
VXBDb3VudC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21UaWVyVXBDb3VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogVGllclVwQ291bnQ6OlRpZXJVcENv
dW50KCkKIHsKLSAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0
aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9u
czo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKIH0KIAogVGllclVwQ291
bnQ6On5UaWVyVXBDb3VudCgpID0gZGVmYXVsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIGFmdGVyIHdhcm0t
dXAuIik7Ci0gICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdP
cHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQo
T3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAK
ICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKQEAgLTkwLDE0
ICs5MCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIG5leHQgaW52b2Nh
dGlvbi4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKDAsIG51bGxwdHIpOworICAgICAgICBz
ZXROZXdUaHJlc2hvbGQoMCk7CiAgICAgfQogCiAgICAgdm9pZCBvcHRpbWl6ZVNvb24odWludDMy
X3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgc29vbi4iKTsKICAg
ICAgICAgLy8gRklYTUU6IE5lZWQgYWRqdXN0bWVudCBvbmNlIHdlIGdldCBtb3JlIGluZm9ybWF0
aW9uIGFib3V0IHdhc20gZnVuY3Rpb25zLgotICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9u
czo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICBzZXRO
ZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkpOwogICAg
IH0KIAogICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9u
UmVzdWx0KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkK
SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA5LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJh
dGlAYXBwbGUuY29tPgorCisgICAgICAgIEJ1aWxkIGFuIHVubGlua2VkIGJhc2VsaW5lIEpJVAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjIzCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS84MjMyMTc3Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBZ
dXN1a2UgU3V6dWtpLgorCisgICAgICAgICogd3RmL0JhZy5oOgorICAgICAgICAqIHd0Zi9QYWNr
ZWQuaDoKKyAgICAgICAgKFdURjo6UGFja2VkQWxpZ25lZFB0cjo6b3BlcmF0b3IqIGNvbnN0KToK
KwogMjAyMS0wOS0yNCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIHR5cGVjaGVja2luZyBgaXNgIG92ZXJsb2FkcyBmb3IgYHN0ZDo6dW5pcXVlX3B0cmAs
IGBXVEY6OlVuaXF1ZVJlZmAsIGFuZCBgV1RGOjpXZWFrUHRyYApJbmRleDogU291cmNlL1dURi93
dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2
NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CiAgICAgfQog
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBCYWcmIG9wZXJhdG9yPShCYWc8VCwgVT4m
JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh1bndyYXBwZWRIZWFkKCkgPT0gb3RoZXIudW53
cmFwcGVkSGVhZCgpKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgICAgIEJhZyBk
ZXN0cm95OworICAgICAgICBkZXN0cm95Lm1faGVhZCA9IHVud3JhcHBlZEhlYWQoKTsKKyAgICAg
ICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgpOworICAgICAgICBvdGhlci5tX2hlYWQg
PSBudWxscHRyOworCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICB+QmFnKCkK
ICAgICB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL1dURi93dGYvUGFja2VkLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYs
MTAgQEAgcHVibGljOgogICAgIH0KIAogICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biBnZXQoKTsgfQotICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUgPSBUPgorICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPCFzdGQ6OmlzX3ZvaWRfdjxVPiwgVSY+Ojp0eXBlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuICpnZXQoKTsgfQorCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhZ2V0
KCk7IH0KIAogICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQg
Y29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KSW5kZXg6
IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkocmV2aXNpb24gMjgzMDUzKQorKysgVG9vbHMv
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtODYzLDcgKzg2
Myw3IEBAIGRlZiBydW5GVExOb0NKSVROb0FjY2Vzc0lubGluaW5nKCpvcHRpb24KIGVuZAogCiBk
ZWYgcnVuRlRMTm9DSklUU21hbGxQb29sKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0g
ICAgcnVuKCJmdGwtbm8tY2ppdC1zbWFsbC1wb29sIiwgIi0taml0TWVtb3J5UmVzZXJ2YXRpb25T
aXplPTEwMjQwMCIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtc21hbGwtcG9vbCIsICIt
LWppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZT0yMDI0MDAiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJ
VF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVu
Tm9DSklUKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC0xMTcxLDcgKzExNzEsNyBA
QCBkZWYgZGVmYXVsdFJ1bk1vZHVsZXMobm9MTEludDogdHJ1ZSkKICAgICBydW4oImZ0bC1uby1j
aml0LW5vLWlubGluZS12YWxpZGF0ZS1tb2R1bGVzIiwgIi1tIiwgIi0tdmFsaWRhdGVHcmFwaD10
cnVlIiwgIi0tbWF4aW11bUlubGluaW5nRGVwdGg9MSIsICooRlRMX09QVElPTlMgKyBOT19DSklU
X09QVElPTlMpKQogICAgIHJ1bigiZnRsLWVhZ2VyLW1vZHVsZXMiLCAiLW0iLCAqKEZUTF9PUFRJ
T05TICsgRUFHRVJfT1BUSU9OUykpCiAgICAgcnVuKCJmdGwtZWFnZXItbm8tY2ppdC1tb2R1bGVz
IiwgIi1tIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRf
T1BUSU9OUyArIEVBR0VSX09QVElPTlMpKQotICAgIHJ1bigiZnRsLW5vLWNqaXQtc21hbGwtcG9v
bC1tb2R1bGVzIiwgIi1tIiwgIi0taml0TWVtb3J5UmVzZXJ2YXRpb25TaXplPTEwMjQwMCIsICoo
RlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtc21h
bGwtcG9vbC1tb2R1bGVzIiwgIi1tIiwgIi0taml0TWVtb3J5UmVzZXJ2YXRpb25TaXplPTIwMjQw
MCIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQogZW5kCiAKIGRlZiBub05vTExJ
bnRSdW5Nb2R1bGVzCg==
</data>
<flag name="commit-queue"
          id="462848"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439266</attachid>
            <date>2021-09-25 11:46:46 -0700</date>
            <delta_ts>2021-09-26 21:29:05 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>653575</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzOCBA
QAorMjAyMS0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGFkZHMgYW4gInVubGlua2VkIiBiYXNlbGluZSBKSVQgdG8gSlNWQUxVRTY0
IHBsYXRmb3Jtcy4gVGhlIEpJVAorICAgICAgICBjb2RlIHByb2R1Y2VkIGJ5IHRoaXMgYmFzZWxp
bmUgSklUIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBhbGwgQ29kZUJsb2NrcyB0aGF0CisgICAgICAg
IHNoYXJlIGFuIFVubGlua2VkQ29kZUJsb2NrLiBUaGUgYmVuZWZpdCBvZiB0aGlzIGlzLCBpZiB3
ZSdyZSBjcmVhdGluZyBhIENvZGVCbG9jaworICAgICAgICBmcm9tIGFuIFVubGlua2VkQ29kZUJs
b2NrIHRoYXQgYWxyZWFkeSBjb21waWxlZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAg
ICAgaW5zdGFuY2UsIHRoaXMgbmV3IENvZGVCbG9jayBqdXN0IHN0YXJ0cyBvZmYgZXhlY3V0aW5n
IGluIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgImZvciBmcmVlIi4KKyAgICAgICAgCisgICAg
ICAgIFRvIG1ha2UgdGhpcyB3b3JrLCB0aGUgY29kZSB3ZSBlbWl0IG5vdyBuZWVkcyB0byBiZSBp
bmRlcGVuZGVudCBvZiBhIHNwZWNpZmljCisgICAgICAgIENvZGVCbG9jayBpbnN0YW5jZS4gV2Ug
dXNlIGEgQ29kZUJsb2NrIGluc3RhbmNlIGZvciBtaW5pbWFsIHByb2ZpbGluZyBpbmZvcm1hdGlv
bgorICAgICAgICB3aGVuIGNvbXBpbGluZywgYnV0IG90aGVyd2lzZSwgdGhlIGNvZGUgaXMgdGll
ZCB0byB0aGUgVW5saW5rZWRDb2RlQmxvY2suIFdoZW4KKyAgICAgICAgd2UgbmVlZCBDb2RlQmxv
Y2sgc3BlY2lmaWMgaW5mb3JtYXRpb24sIHdlIGxvYWQgaXQuIFRoaXMgdXN1YWxseSBtZWFucyB0
aGluZ3MKKyAgICAgICAgbGlrZSB3ZSdsbCBsb2FkIHRoaW5ncyBmcm9tIHRoZSBNZXRhZGF0YSBk
eW5hbWljYWxseS4gVGhpcyBwYXRjaCBhbHNvIGFkZHMgYQorICAgICAgICAibGlua2VkIGNvbnN0
YW50IHBvb2wiIGNvbmNlcHQsIGFuZCBhbnl0aW1lIHdlIGluc3RhbnRpYXRlIHN1Y2ggYSBDb2Rl
QmxvY2ssCisgICAgICAgIHdlIGFsc28gbmVlZCB0byBpbnN0YW50aWF0ZSB0aGlzICJsaW5rZWQg
Y29uc3RhbnQgcG9vbCIuIFRoaXMgY29udGFpbnMgdGhpbmdzCisgICAgICAgIGxpa2Ugb3VyIGlu
bGluZSBjYWNoZSBkYXRhIHN0cnVjdHVyZXMgKFN0cnVjdHVyZVN0dWJJbmZvKiksIEpTR2xvYmFs
T2JqZWN0KiwKKyAgICAgICAgZXRjLgorICAgICAgICAKKyAgICAgICAgVW5saW5rZWQgYmFzZWxp
bmUgSklUIGFsd2F5cyBydW5zIElDcyBpbiB0aGUgImRhdGEiIG1vZGUuIFRvIG1ha2UgdGhpcyB3
b3JrLCBJCisgICAgICAgIG1hZGUgZGF0YSBJQ3Mgd29yayBvbiB4ODZfNjQuIFRvIGRvIHRoaXMs
IHdlIG5vIGxvbmdlciBjYWxsL3JldCB0byB0aGUgSUMuCisgICAgICAgIEluc3RlYWQsIHdlIGp1
bXAgdG8gdGhlIElDLCBhbmQgdGhlIElDIGp1bXBzIGJhY2sgYnkgbG9hZGluZyB0aGUgImRvbmUi
IGxvY2F0aW9uCisgICAgICAgIGZyb20gdGhlIFN0cnVjdHVyZVN0dWJJbmZvIGR5bmFtaWNhbGx5
LiBUaGlzIHNpbXBsaWZpZXMgdGhlIGRlc2lnbiB0byBub3QgYmUKKyAgICAgICAgYmFzZWQgb24g
dGhlIGFybTY0IGNhbGxpbmcgY29udmVudGlvbiwgYW5kIGtlZXBzIHRoZSBzYW1lIHBlcmZvcm1h
bmNlIGNoYXJhY3RlcmlzdGljcy4gCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsc28g
YWRkcyBhIG5ldyB2ZXJzaW9uIG9mIElubGluZUFjY2VzcyB0aGF0IGlzIG9ubHkgdXNlZCBpbiBi
YXNlbGluZQorICAgICAgICBKSVQgKGZvciBub3cpLiBJbiB0aGUgZnV0dXJlLCB3ZSBjYW4gbWFr
ZSB0aGUgREZHL0ZUTCBhbHNvIHVzZSB0aGlzIGZvciBEYXRhCisgICAgICAgIElDcy4gQnV0IHdl
IGRvbid0IG5lZWQgdG8gZG8gdGhhdCB5ZXQgc2luY2UgdGhvc2UgdGllcnMgZG9uJ3QgdXNlIGRh
dGEgSUNzIGJ5CisgICAgICAgIGRlZmF1bHQuIFRoZSBiYXNlbGluZSBKSVQgbm93IGhhcyBhIHB1
cmUgZGF0YSBJQyBhcHByb2FjaCB0byBJbmxpbmVBY2Nlc3MuIFNvCisgICAgICAgIGluc3RlYWQg
b2YgcmVwYXRjaGluZyBjb2RlLCB3ZSByZXBhdGNoIGZpZWxkcyB3ZSBsb2FkIGR5bmFtaWNhbGx5
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGNsZWFucyB1cCBhIGZldyB0aGlu
Z3MgaW4gT1NSIGV4aXQsIHdoZXJlIGJvdGggREZHL0ZUTCB3ZXJlCisgICAgICAgIHN0b3Jpbmcg
Y2FsbGVlIHNhdmVzIHRvIHRoZSBjYWxsZWUgc2F2ZXMgYnVmZmVyIGluIGEgd2VpcmQgcGxhY2Us
IGFuZCBzZXBhcmF0ZQorICAgICAgICBmcm9tIG9uZSBhbm90aGVyLiBJIG5vdGljZWQgdGhpcyBj
b2RlIGNhbiBiZSBzaW1wbGlmaWVkIGlmIHdlIGp1c3Qgc3RvcmUKKyAgICAgICAgY2FsbGVlIHNh
dmVzIGF0IHRoZSBlbmQgb2YgdGhlIE9TUiBleGl0IGhhbmRsZXIsIGFuZCBmcm9tIGNvbW1vbiBK
SVQgZW1pc3Npb24KKyAgICAgICAgY29kZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBmaXhlcyBhIGJ1ZyB3aGVyZSB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGUgd3JvbmcgKGFu
ZCBhbHdheXMKKyAgICAgICAgbW9yZSBuZWdhdGl2ZSkgU1AgaW4gdGhlIGJhc2VsaW5lIEpJVC4g
VGhpcyBjb3VsZCBoYXBwZW4gd2hlbiB3ZSBPU1IgZXhpdAorICAgICAgICBmcm9tIGFuIGlubGlu
ZWQgZ2V0dGVyL3NldHRlci4gVGhlIE9TUiBleGl0IGNvZGUgcHV0cyB0aGUgcmV0dXJuIFBDIHdo
ZW4KKyAgICAgICAgcmV0dXJuaW5nIHRvIHRoZSBjYWxsIHNpdGUgb2YgdGhlIGdldHRlci9zZXR0
ZXIgdG8gYmUgdGhlIGlubGluZSBjYWNoZSdzCisgICAgICAgICJkb25lIGxvY2F0aW9uIi4gSG93
ZXZlciwgdGhpcyAiZG9uZSBsb2NhdGlvbiIgZGlkbid0IHVzZWQgdG8gcmVzdG9yZSBTUC4KKyAg
ICAgICAgVGhpcyBwYXRjaCBjb25zZXJ2YXRpdmVseSBtYWtlcyBpdCBzbyB0aGF0IHdlIHJlc3Rv
cmUgdGhlIFNQIGF0IHRoZXNlIHNpdGVzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBtZWFz
dXJlZCBhcyBhIDElIHNwZWVkdXAgb24gU3BlZWRvbWV0ZXIyLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVPcGVy
YW5kc0ZvckNoZWNrcG9pbnQuaDoKKyAgICAgICAgKEpTQzo6dmFsdWVQcm9maWxlT2Zmc2V0Rm9y
KToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpD
YWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86
OmVtaXRGYXN0UGF0aEltcGwpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCk6CisgICAgICAgIChK
U0M6OkNhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyk6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmg6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c2xvd1N0
dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmFkZHJlc3NPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpmcmFtZVJlZ2lzdGVyQ291bnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJpbmFyeUFy
aXRoUHJvZmlsZUZvclBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmFyeUFyaXRoUHJv
ZmlsZUZvclBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kUEMpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdFNvb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdE5l
eHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNo
ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVEFkZElDKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRNdWxJQyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUU3ViSUMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpqaXRBZnRlcldhcm1VcCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25z
dGFudFBvb2wpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNlbGluZUpJVENvbnN0YW50UG9vbCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmRvbnRKSVRBbnl0aW1lU29vbik6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6bGxpbnRFeGVjdXRlQ291bnRlciBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZHJlc3NPZk51bVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmlzS25vd25DZWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjphZGRNYXRoSUMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldEpJVENvZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdENv
ZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN3aXRjaEp1bXBUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3RyaW5nU3dpdGNoSnVtcFRh
YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6aml0Q29kZU1hcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFz
ZWxpbmVTd2l0Y2hKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJhc2VsaW5l
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdTd2l0
Y2hKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRmZ1N0cmluZ1N3aXRjaEp1
bXBUYWJsZSk6CisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwOgorICAgICAgICAoSlND
OjpFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OnNldFRocmVzaG9sZCk6CisgICAg
ICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRp
b25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlk
TWV0YWRhdGEuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3Ro
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRh
dGE6Om9mZnNldE9mTW9kZSk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRT
aXRlRmVlZGJhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0
dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
SW5CeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2spOgor
ICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OklubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoSlNDOjpJbmxp
bmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKToKKyAgICAgICAgKEpT
Qzo6SW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5saW5l
QWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aCk6CisgICAgICAgIChKU0M6OklubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZkluQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2Nlc3MpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnJlc2V0
U3R1YkFzSnVtcEluQWNjZXNzKToKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuaDoK
KyAgICAgICAgKiBieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaDoKKyAgICAgICAgKEpT
Qzo6SXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rlcyk6CisgICAgICAgICog
Ynl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6TExJbnRDYWxsTGlu
a0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKToKKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUu
aDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6c3VjY2VlZCk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0dlbmVyYXRpb25TdGF0ZTo6Y2FsY3VsYXRlTGl2ZVJlZ2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRp
b25IYW5kbGluZyk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2Vy
dmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucyk6CisgICAgICAg
IChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDoKKyAgICAgICAg
KEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5m
bzo6aW5pdEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Omlu
aXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0
SW5CeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3ND
YXNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJlc2V0KToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkRv
bmVMb2NhdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6cHJpbnRTdXBlclNhbXBsZXJTdGF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRl
bnRpZmllcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JK
SVQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9m
aWxlcyk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25BdCBjb25zdCk6CisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjppbnN0cnVjdGlvbnNTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6Omxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJu
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzZXQp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YmluYXJ5QXJpdGhQcm9maWxlKToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnVuYXJ5QXJpdGhQcm9maWxlKToKKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZE1ldGFkYXRhVGFibGU6Om9mZnNldEluTWV0YWRhdGFUYWJsZSk6CisgICAgICAgICog
Ynl0ZWNvZGUvVmFsdWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUJhc2U6
OlZhbHVlUHJvZmlsZUJhc2UpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNlOjpjbGVh
ckJ1Y2tldHMpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNr
ZXQpOgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmg6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmg6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6
CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVw
YXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6aGFuZGxlRXhpdENvdW50cyk6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMpOgorICAgICAgICAoSlNDOjpERkc6
OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1
bXBUb1RhcmdldCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dFByaXZhdGVOYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlQWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlU3ViKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlTmVnYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlTXVsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
Z1NoYWRvd0NoaWNrZW5UYWlsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEpJVENvZGUu
aDoKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmFkZE1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVVbmFyeU1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVCaW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUHV0UHJpdmF0ZU5hbWUpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAg
ICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21w
aWxlU3R1Yik6CisgICAgICAgICogZ2VuZXJhdG9yL01ldGFkYXRhLnJiOgorICAgICAgICAqIGpp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0
b3JlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFs
Q2FsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0
aG91dE1vdmluZ0dsb2JhbE9iamVjdCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5o
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hdGhJQ0hvbGRlcjo6YWRkSklUQWRkSUMpOgorICAg
ICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKToKKyAgICAgICAgKEpTQzo6TWF0
aElDSG9sZGVyOjphZGRKSVRTdWJJQyk6CisgICAgICAgIChKU0M6Ok1hdGhJQ0hvbGRlcjo6YWRk
SklUTmVnSUMpOgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyk6Cisg
ICAgICAgIChKU0M6OkJhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKToKKyAgICAgICAg
KEpTQzo6QmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKToKKyAgICAgICAgKiBqaXQv
QmFzZWxpbmVKSVRDb2RlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6
OmFkZCk6CisgICAgICAgIChKU0M6OkpJVENvbnN0YW50UG9vbDo6c2l6ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpJVENvbnN0YW50UG9vbDo6YXQgY29uc3QpOgorICAgICAgICAqIGppdC9CYXNl
bGluZUpJVFBsYW4uY3BwOgorICAgICAgICAoSlNDOjpCYXNlbGluZUpJVFBsYW46OmZpbmFsaXpl
KToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Q0NhbGxI
ZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwpOgorICAgICAgICAoSlNDOjpD
Q2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KToKKyAgICAgICAgKiBqaXQv
Q0NhbGxIZWxwZXJzLmg6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmg6CisgICAgICAgICog
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZs
ZXI6OkNhbGxGcmFtZVNodWZmbGVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OnByZXBhcmVGb3JUYWlsQ2FsbCk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVyLmg6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzbmFwc2hvdCBjb25zdCk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhclJl
YWRPbmx5Q2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNl
dCk6CisgICAgICAgIChKU0M6OkpJVDo6cmVzZXRTUCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRD
b25zdGFudFBvb2xSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAoSlNDOjpKSVQ6OmZp
bmFsaXplT25NYWluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKToKKyAgICAgICAgKEpT
Qzo6SklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAg
ICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZWdhdGUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfYWRkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElD
RmFzdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZGl2KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX211bCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zdWIpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2FsbFJlc3VsdCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxs
RXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlND
OjpKSVRDb2RlOjp1c2VEYXRhSUMpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpwY1RvQ29kZU9y
aWdpbk1hcCk6CisgICAgICAgICogaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9KSVRD
b21waWxhdGlvbktleS5oOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6SklUQ29t
cGlsYXRpb25LZXkpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6b3BlcmF0b3Ih
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJh
dG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6aGFzaCBjb25z
dCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojpwcm9maWxlZEJsb2NrIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUp
OgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6SklU
R2V0QnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmdlbmVyYXRlR2V0QnlJZElubGluZUFj
Y2Vzcyk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
UHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklURGVsQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAg
ICAoSlNDOjpKSVREZWxCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAgICAg
KEpTQzo6SklUSW5CeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAgIChK
U0M6OkpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVEdldEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgor
ICAgICAgICAoSlNDOjpKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhdGgpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KToKKyAg
ICAgICAgKEpTQzo6SklUOjppc0tub3duQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0Q29u
c3RhbnRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKToKKyAgICAgICAgKEpTQzo6SklUOjps
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6YWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6SklUOjpqdW1wVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6SklUOjps
b2FkUHRyRnJvbU1ldGFkYXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkMzJGcm9tTWV0YWRh
dGEpOgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKToKKyAgICAgICAgKEpT
Qzo6SklUOjpzdG9yZThUb01ldGFkYXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpzdG9yZTMyVG9N
ZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmxvYWRHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29waWVkR2V0UHV0SW5mbyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpJVDo6Y29waWVkQXJpdGhQcm9maWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3Yp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lu
c3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZCk6CisgICAgICAg
IChKU0M6OkpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9m
dW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6dmFsdWVJc0ZhbHNleUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnZhbHVlSXNUcnV0aHlH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAo
SlNDOjpKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAo
SlNDOjpKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfamVx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbmVxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19yZWdleHApOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3
RnVuY0V4cHJDb21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9hcmd1bWVudCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29m
KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25l
d19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0
YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90eXBlb2ZfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9m
dW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251bGwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BFcUp1bXBTbG93KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1lcmljKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3N3aXRjaF9jaGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRj
aF9zdHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdG9fdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAq
IGppdC9KSVRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6SklUUGxhbjo6a2V5KToKKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAg
IChKU0M6OkpJVDo6c2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1l
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAg
ICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3B1dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjpzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2Rl
bF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
bl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRIYXNQcml2YXRlU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX3By
aXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVf
YnJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmspOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3Rv
X3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX2Fy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFs
VmFyaWFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xvc3Vy
ZVZhcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9wcml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9w
cml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJh
bmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9pbl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQcml2YXRlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZVNsb3cpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfZnJvbV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVy
bmFsX2ZpZWxkKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRy
eUNhY2hlR2V0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5KToKKyAgICAgICAgKEpT
Qzo6dHJ5Q2FjaGVJbkJ5KToKKyAgICAgICAgKEpTQzo6dW5saW5rQ2FsbCk6CisgICAgICAgICog
aml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmhhbmRsZUV4Y2VwdGlvbkdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OnBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVF
eGNlcHRpb25HZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuaDoKKyAg
ICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50Ojpq
aXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9T
TE9XX1BBVEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5
cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpudW1CaW5hcnlBcml0aFBy
b2ZpbGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpudW1VbmFyeUFy
aXRoUHJvZmlsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2Nr
VHlwZT46OmVuY29kZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgor
ICAgICAgICAoSlNDOjp1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3ApOgorICAgICAg
ICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICogcnVudGltZS9PcHRp
b25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9u
cyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
U2NyaXB0RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnBy
ZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludFRpZXJVcENv
dW50ZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpvcHRpbWl6
ZUFmdGVyV2FybVVwKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpv
cHRpbWl6ZVNvb24pOgorICAgICAgICAqIHdhc20vV2FzbVRpZXJVcENvdW50LmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6OlRpZXJVcENvdW50KToKKyAgICAgICAgKiB3YXNt
L1dhc21UaWVyVXBDb3VudC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6b3B0
aW1pemVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50OjpvcHRp
bWl6ZU5leHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6Om9w
dGltaXplU29vbik6CisKIDIwMjEtMDktMjMgIFBoaWxpcCBDaGltZW50byAgPHBjaGltZW50b0Bp
Z2FsaWEuY29tPgogCiAgICAgICAgIFZhcmlvdXMgdHdlYWtzIGluIHByZXBhcmF0aW9uIGZvciBU
ZW1wb3JhbC5JbnN0YW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTYxMSw2ICs2MTEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBCiAgICAgYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKICAgICBidWls
dGlucy9CdWlsdGluVXRpbHMuaAogCisgICAgYnl0ZWNvZGUvQXJpdGhQcm9maWxlLmgKICAgICBi
eXRlY29kZS9BcnJheUFsbG9jYXRpb25Qcm9maWxlLmgKICAgICBieXRlY29kZS9BcnJheVByb2Zp
bGUuaAogICAgIGJ5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMuaApAQCAtODM3LDYgKzgzOCw3
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKIAogICAgIGppdC9B
c3NlbWJseUhlbHBlcnMuaAogICAgIGppdC9Bc3NlbWJseUhlbHBlcnNTcG9vbGVycy5oCisgICAg
aml0L0Jhc2VsaW5lSklUQ29kZS5oCiAgICAgaml0L0NDYWxsSGVscGVycy5oCiAgICAgaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaAogICAgIGppdC9FeGVjdXRhYmxlTWVtb3J5SGFuZGxlLmgKQEAg
LTg3NSw2ICs4NzcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
CiAgICAgcGFyc2VyL1BhcnNlckVycm9yLmgKICAgICBwYXJzZXIvUGFyc2VyTW9kZXMuaAogICAg
IHBhcnNlci9QYXJzZXJUb2tlbnMuaAorICAgIHBhcnNlci9SZXN1bHRUeXBlLmgKICAgICBwYXJz
ZXIvU291cmNlQ29kZS5oCiAgICAgcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgKICAgICBwYXJzZXIv
U291cmNlUHJvdmlkZXJDYWNoZS5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTYxOSw2ICs2MTksNyBAQCBpbnRlcnByZXRlci9TaGFkb3dDaGlja2Vu
LmNwcAogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAogCiBqaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAoraml0L0Jhc2VsaW5lSklUQ29kZS5jcHAKIGppdC9CYXNlbGluZUpJVFBsYW4uY3BwCiBq
aXQvQmluYXJ5U3dpdGNoLmNwcAogaml0L0NDYWxsSGVscGVycy5jcHAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtOTAwLDYgKzkwMCw3IEBACiAJCTUyQ0QwRjVEMjI0MkY1NjkwMDRBMThBNSAvKiBG
b3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1l
d29yayAqLzsgfTsKIAkJNTJDRDBGNUUyMjQyRjU2OTAwNEExOEE1IC8qIEphdmFTY3JpcHRDb3Jl
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsg
Ki87IH07CiAJCTUyQ0QwRjY4MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQ0QwRjY3MjI0MkY3MUMw
MDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAqLzsgfTsKKwkJNTJERDAwMDgyNkUwMzlCOTAwNTRFNDA4
IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyRUVE
Nzk0MjQ5MkI4NzAwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFRUQ3OTMyNDkyQjg2ODAwOEY0Qzkz
IC8qIEZ1bmN0aW9uQWxsb3dsaXN0LmggKi87IH07CiAJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRD
QyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEE2NkI5MUZBM0U3OEIwMDI2QTU0
NSAvKiBVbmlmaWVkU291cmNlMy1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzMEE2NkIxMUZBM0U3N0EwMDI2QTU0NSAvKiBVbmlmaWVkU291cmNl
My1tbS5tbSAqLzsgfTsKQEAgLTEyMjAsNyArMTIyMSw3IEBACiAJCTc5ODcyQzQ4MjIxQkJBRjMw
MDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzk4NzJDNDcyMjFCQkFFRDAwOEM2OTY5IC8qIEpTQmFzZUludGVy
bmFsLmggKi87IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5N
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVG
N0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTc5QTIyODM2MUQz
NUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFBy
b2ZpbGUuaCAqLzsgfTsKKwkJNzlBMjI4MzYxRDM1RDcxRjAwRDhFMDY3IC8qIEFyaXRoUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMjI4
MzQxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QUJCMTdFMUU1Q0NCNTcwMDQ1QjlBNiAv
KiBBaXJEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QUJCMTdDMUU1Q0NCNTcwMDQ1QjlBNiAvKiBBaXJEaXNhc3NlbWJsZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUFDMzBG
RjFGOTk1MzY0MDA0ODRGRDcgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFDMzBGRTFGOTk1
MzYzMDA0ODRGRDcgLyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmggKi87IH07CiAJ
CTc5QUYwQkU0MUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUYwQkUzMUQzRUZE
NEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzY3NCw2ICszNjc1LDggQEAKIAkJNTJD
RDBGNjQyMjQyRjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CiAJCTUyQ0QwRjY3MjI0MkY3MUMwMDRBMThBNSAvKiB0ZXN0ZGZnLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RkZmcuY3BwOyBwYXRoID0g
ZGZnL3Rlc3RkZmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQxMzA4RjIy
MUNFMDNBMDA5QzgzNkMgLyogZm9vLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBwYXRoID0gZm9vLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNjI2
RTAzOUIzMDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2Vs
aW5lSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkREMDAwNzI2RTAz
OUI0MDA1NEU0MDggLyogQmFzZWxpbmVKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJh
c2VsaW5lSklUQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRUVENzky
MjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGdW5jdGlvbkFsbG93bGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyRUVENzkzMjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGdW5jdGlvbkFsbG93bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI3Niw2ICs2Mjc5LDggQEAKIAkJCQk2
Qjc2N0U3QTI2NzkxRjI3MDAxN0Y4RDEgLyogQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaCAqLywK
IAkJCQk3MjM5OThGNjI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmNwcCAqLywK
IAkJCQk3MjM5OThGNTI2NURCQ0RCMDA1Nzg2N0YgLyogQmFzZWxpbmVKSVRQbGFuLmggKi8sCisJ
CQkJNTJERDAwMDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8sCisJ
CQkJNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovLAogCQkJ
CTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBG
NjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQk2NUI4Mzky
RDFCQUNBOUQzMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwICovLApAQCAtOTczMCw2ICs5
NzM1LDcgQEAKIAkJCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRB
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Zs
dXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkREMDAwODI2RTAzOUI5MDA1NEU0MDgg
LyogQmFzZWxpbmVKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJF
MDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlDQzg5
MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTM4NkZEN0UyNkU4NjdCODAwRTRDMjhCIC8qIFRlbXBvcmFsUGxhaW5UaW1lLmggaW4gSGVhZGVy
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDE1ICsyMDIsMTUgQEAgUmVm
UHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmZyb21TdHJ1YwogICAgIHN3aXRjaCAoc3R1Yklu
Zm8uY2FjaGVUeXBlKCkpIHsKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7Ci0gICAg
ICAgIHJldHVybiBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBMb2FkLCBp
ZGVudGlmaWVyLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIFByb3h5YWJsZUFjY2Vz
c0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIExvYWQsIGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRT
ZWxmT2Zmc2V0LCBzdHViSW5mby5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAg
ICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7Ci0gICAgICAgIHJldHVybiBBY2Nlc3ND
YXNlOjpjcmVhdGUodm0sIG93bmVyLCBSZXBsYWNlLCBpZGVudGlmaWVyLCBzdHViSW5mby51LmJ5
SWRTZWxmLm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIFJlcGxhY2Us
IGlkZW50aWZpZXIsIHN0dWJJbmZvLmJ5SWRTZWxmT2Zmc2V0LCBzdHViSW5mby5pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlKHZtKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsK
LSAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgb3duZXIsIEluSGl0LCBpZGVu
dGlmaWVyLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwgc3R1YkluZm8ubV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgb3duZXIsIEluSGl0LCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNldCwg
c3R1YkluZm8uaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBDYWNo
ZVR5cGU6OkFycmF5TGVuZ3RoOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXND
b25zdGFudElkZW50aWZpZXIpOwpAQCAtMTk4NSwxNCArMTk4NSwxMCBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgIC8vIFN0dWZmIGZvciBjdXN0b20g
Z2V0dGVycy9zZXR0ZXJzLgogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uQ2Fs
bDsKIAorCiAgICAgICAgIC8vIFRoaXMgYWxzbyBkb2VzIHRoZSBuZWNlc3NhcnkgY2FsY3VsYXRp
b25zIG9mIHdoZXRoZXIgb3Igbm90IHdlJ3JlIGFuCiAgICAgICAgIC8vIGV4Y2VwdGlvbiBoYW5k
bGluZyBjYWxsIHNpdGUuCi0gICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygp
KQotICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lzdGVy
czo6bHIpOwotI2VuZGlmCi0gICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0
ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwo
ZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsKKyAgICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRl
OjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0
YWNrRm9yQ2FsbCgpOwogCiAgICAgICAgIGF1dG8gcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3Rh
Y2tGb3JDYWxsID0gWyZdKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSYgc3BpbGxT
dGF0ZSwgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUpIHsKICAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IGRvbnRSZXN0b3JlOwpAQCAtMjA3OSw4ICsyMDc1LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgQVNTRVJUKCEobnVtYmVyT2ZSZWdzRm9y
Q2FsbCAlIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpKTsKICAgICAgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mQnl0ZXNGb3JDYWxsID0gbnVtYmVyT2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdp
c3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CiAKLSAgICAgICAgICAgIHVuc2lnbmVk
IGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCA9Ci0gICAgICAgICAgICBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7
CisgICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPSBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVz
Rm9yQ2FsbCk7CiAKICAgICAgICAgICAgIGppdC5zdWJQdHIoCiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKQEAg
LTIxMzgsNiArMjEzMyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dl
bmUKIAogICAgICAgICAgICAgaW50IHN0YWNrUG9pbnRlck9mZnNldCA9IChjb2RlQmxvY2stPnN0
YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzdGF0ZS5wcmVzZXJ2ZWRS
ZXVzZWRSZWdpc3RlclN0YXRlLm51bWJlck9mQnl0ZXNQcmVzZXJ2ZWQgLSBzcGlsbFN0YXRlLm51
bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbjsKICAgICAgICAgICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworCiAgICAgICAgICAgICBib29sIGNhbGxIYXNSZXR1cm5WYWx1ZSA9IGlzR2V0
dGVyKCk7CiAgICAgICAgICAgICByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwo
c3BpbGxTdGF0ZSwgY2FsbEhhc1JldHVyblZhbHVlKTsKIApAQCAtMjI2NCwxMiArMjI2MCw3IEBA
IHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKIAogICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdl
dE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgICAgICAgICBpZiAoY29k
ZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmUuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0jZW5kaWYKLSAgICAgICAgICAgIGF1dG8g
c3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0
aG91dEV4Y2VwdGlvbnMoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsKKyAgICAgICAgICAgIGF1
dG8gc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
V2l0aG91dEV4Y2VwdGlvbnMoKTsKIAogICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRl
Y2x0eXBlKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKT4oQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKCZ2bSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgaml0LnByZXBhcmVDYWxs
T3BlcmF0aW9uKHZtKTsKQEAgLTIzNjQsMTAgKzIzNTUsNiBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgZXh0cmFS
ZWdpc3RlcnNUb1ByZXNlcnZlOwogICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZS5zZXQoYmFzZUdQUik7CiAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNl
cnZlLnNldCh2YWx1ZVJlZ3MpOwotI2lmIENQVShBUk02NCkKLSAgICAgICAgICAgICAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWdpc3Rl
cnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCiAgICAgICAgICAg
ICAgICAgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpTcGlsbFN0YXRlIHNwaWxsU3RhdGUgPSBzdGF0
ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmUpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJi
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsNyArMjkyLDcgQEAgb3BfZ3JvdXAg
OlByb2ZpbGVkQmluYXJ5T3AsCiAgICAgICAgIG9wZXJhbmRUeXBlczogT3BlcmFuZFR5cGVzLAog
ICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0
aFByb2ZpbGUKKyAgICAgICAgYXJpdGhQcm9maWxlOiBCaW5hcnlBcml0aFByb2ZpbGUuKgogICAg
IH0KIAogb3BfZ3JvdXAgOlZhbHVlUHJvZmlsZWRCaW5hcnlPcCwKQEAgLTM1Myw3ICszNTMsNyBA
QCBvcF9ncm91cCA6VW5hcnlJblBsYWNlUHJvZmlsZWRPcCwKICAgICAgICAgc3JjRHN0OiBWaXJ0
dWFsUmVnaXN0ZXIsCiAgICAgfSwKICAgICBtZXRhZGF0YTogewotICAgICAgICBhcml0aFByb2Zp
bGU6IFVuYXJ5QXJpdGhQcm9maWxlCisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFBy
b2ZpbGUuKgogICAgIH0KIAogb3AgOnRvX29iamVjdCwKQEAgLTM4Niw3ICszODYsNyBAQCBvcCA6
bmVnYXRlLAogICAgICAgICByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLAogICAgIH0sCiAgICAgbWV0
YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZSwKKyAgICAg
ICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZS4qCiAgICAgfQogCiBvcCA6bm90LApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlT3BlcmFuZHNGb3JD
aGVja3BvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlT3BlcmFuZHNGb3JDaGVja3BvaW50LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2lu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3MywyOCBAQCBWYWx1ZVByb2ZpbGUqIHZhbHVl
UHJvZmlsZUZvckltcGwoQnl0ZWNvCiAgICAgICAgIHJldHVybiAmbWV0YWRhdGEubV9wcm9maWxl
OwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cit1aW50cHRyX3QgdmFsdWVQcm9m
aWxlT2Zmc2V0Rm9yKHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKK3sKKyAgICBVTlVTRURfUEFS
QU0oY2hlY2twb2ludEluZGV4KTsKKyAgICBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJ
RCA9PSBvcF9pdGVyYXRvcl9vcGVuKSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4
KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGw6IHJldHVybiBCeXRl
Y29kZTo6TWV0YWRhdGE6Om9mZnNldE9mSXRlcmF0b3JQcm9maWxlKCk7CisgICAgICAgIGNhc2Ug
T3BJdGVyYXRvck9wZW46OmdldE5leHQ6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNl
dE9mTmV4dFByb2ZpbGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoQnl0ZWNvZGU6
Om9wY29kZUlEID09IG9wX2l0ZXJhdG9yX25leHQpIHsKKyAgICAgICAgc3dpdGNoIChjaGVja3Bv
aW50SW5kZXgpIHsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Y29tcHV0ZU5leHQ6IHJl
dHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mTmV4dFJlc3VsdFByb2ZpbGUoKTsKKyAg
ICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZEb25lUHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JOZXh0
OjpnZXRWYWx1ZTogcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZWYWx1ZVByb2Zp
bGUoKTsKKyAgICAgICAgZGVmYXVsdDogUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSAKKyAgICAgICAgcmV0dXJuIEJ5dGVjb2RlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZQcm9maWxlKCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlTWV0YWRh
dGE+CiBib29sIGhhc1ZhbHVlUHJvZmlsZUZvcihCeXRlY29kZU1ldGFkYXRhJiBtZXRhZGF0YSwg
dW5zaWduZWQgY2hlY2twb2ludEluZGV4KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTQsMTEgKzExNCw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoVk0mIHZt
KQogICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsKIH0KIAotQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKLXsKLSAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+KG1fZmFz
dFBhdGhTdGFydCk7Ci19Ci0KIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENh
bGxMaW5rSW5mbzo6c2xvd1BhdGhTdGFydCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlzRGF0
YUlDKCkpOwpAQCAtMjI1LDYgKzIyMCwxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6c2V0TWF4QXJn
dW1lbnRDb3VudEluCiAgICAgbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHZhbHVl
OwogfQogCitDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86
OmZhc3RQYXRoU3RhcnQoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzRGlyZWN0KCkgJiYgaXNU
YWlsQ2FsbCgpKTsKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJu
YWxQdHJUYWc+KHUuY29kZUlDLm1fZmFzdFBhdGhTdGFydCk7Cit9CisKIHZvaWQgQ2FsbExpbmtJ
bmZvOjp2aXNpdFdlYWsoVk0mIHZtKQogewogICAgIGF1dG8gaGFuZGxlU3BlY2lmaWNDYWxsZWUg
PSBbJl0gKEpTRnVuY3Rpb24qIGNhbGxlZSkgewpAQCAtMjk4LDIzICsyOTksMTEgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEoYwogICAgIG1fZnJhbWVTaHVmZmxlRGF0
YS0+c2hyaW5rVG9GaXQoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5r
SW5mbzo6ZW1pdEZhc3RQYXRoSW1wbChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQ
UiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8sIENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDLCBib29sIGlzVGFpbENhbGwsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCiB7Ci0gICAgc2V0VXNlc0RhdGFJQ3ModXNl
RGF0YUlDKTsKLSAgICBpZiAoaXNEYXRhSUMoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm9HUFIgIT0gR1BSUmVnOjpJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBjYWxsTGlua0luZm9HUFIpOwot
ICAgICAgICB1LmRhdGFJQy5tX2NhbGxMaW5rSW5mb0dQUiA9IGNhbGxMaW5rSW5mb0dQUjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBh
dGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0
aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKLSAgICBpZiAoaXNEYXRhSUMoKSkgeworICAgIGlmICh1c2VEYXRhSUMgPT0gVXNlRGF0YUlD
OjpZZXMpIHsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVy
KCk7CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0lu
Zm9HUFIsIG9mZnNldE9mQ2FsbGVlKCkpLCBzY3JhdGNoR1BSKTsgCiAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnb1BvbHltb3JwaGljOwpAQCAtMzIzLDcgKzMxMiw3IEBAIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgICAgIGdvUG9seW1vcnBoaWMg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHBvbHltb3JwaGljQ2FsbGVlTWFzaykpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgY2FsbGVlR1BSKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzVGFp
bENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgcHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBnb1BvbHltb3JwaGljLmxpbmsoJmppdCk7IC8v
IFBvbHltb3JwaGljIHN0dWIgaGFuZGxlcyB0YWlsIGNhbGwgc3RhY2sgcHJlcC4KICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsTGlua0luZm9HUFIsIG9m
ZnNldE9mTW9ub21vcnBoaWNDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOwpAQCAt
MzM2LDE0ICszMjUsMTYgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6
ZQogICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cldpdGhQYXRjaChDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIGNhbGxlZUNoZWNrLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobnVsbHB0cikpKTsKIAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKGlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoaXNUYWlsQ2FsbCkg
ewogICAgICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJUYWlsQ2FsbCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwog
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICB1LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOwotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsZWVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFn
PihjYWxsZWVDaGVjayk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2Fs
bExvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbCk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnUuY29kZUlDLm1fY2FsbGVlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hl
Y2spOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTM1MywxMyArMzQ0LDM0IEBAIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
Q2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzVGFpbENhbGwoKSk7Ci0gICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBudWxscHRy
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyh1c2VEYXRhSUMpOworCisgICAgaWYgKGlzRGF0YUlDKCkp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52
YWxpZEdQUlJlZyk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKKyAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0lu
Zm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgfQorCisgICAgcmV0dXJuIGVtaXRGYXN0UGF0
aEltcGwodGhpcywgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNlRGF0YUlDLCBp
c1RhaWxDYWxsKCksIG51bGxwdHIpOwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKK01hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlzVGFpbENhbGwoKSk7Ci0gICAgcmV0
dXJuIGVtaXRGYXN0UGF0aEltcGwoaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgdXNl
RGF0YUlDLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworICAgIHNldFVzZXNEYXRhSUNz
KFVzZURhdGFJQzo6Tm8pOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwg
Y2FsbGVlR1BSLCBJbnZhbGlkR1BSUmVnLCBVc2VEYXRhSUM6Ok5vLCBpc1RhaWxDYWxsKCksIFdU
Rk1vdmUocHJlcGFyZUZvclRhaWxDYWxsKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjYWxsTGlua0luZm9HUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgcmV0dXJuIGVtaXRG
YXN0UGF0aEltcGwobnVsbHB0ciwgaml0LCBjYWxsZWVHUFIsIGNhbGxMaW5rSW5mb0dQUiwgVXNl
RGF0YUlDOjpZZXMsIGZhbHNlLCBudWxscHRyKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
Qzo6WWVzLCB0cnVlLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOwogfQogCiB2b2lkIENh
bGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwgQ0NhbGxIZWxwZXJzJiBqaXQpCkBAIC0z
NjksMTcgKzM4MSwzMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdFNsb3dQYXRoKFZNJiB2bSwg
CiAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBvZmZz
ZXRPZlNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKIH0KIAordm9p
ZCBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYgaml0
LCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIGppdC5tb3ZlKGNhbGxMaW5rSW5mb0dQ
UiwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRy
eVB0clRhZyk7Cit9CisKK3ZvaWQgQ2FsbExpbmtJbmZvOjppbml0aWFsaXplRGF0YUlDKFZNJiB2
bSwgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKQoreworICAgIG1fY29kZU9yaWdpbiA9IENv
ZGVPcmlnaW4odW5saW5rZWRDYWxsTGlua0luZm8uYnl0ZWNvZGVJbmRleCk7CisgICAgc2V0VXBD
YWxsKHVubGlua2VkQ2FsbExpbmtJbmZvLmNhbGxUeXBlLCBjYWxsZWVHUFIpOworICAgIG1fZG9u
ZUxvY2F0aW9uID0gdW5saW5rZWRDYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uOworICAgIGlmICh1
bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKSB7CisgICAgICAgIC8vIEZJWE1F
OiBJdCdkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIGEgcmVmY291bnRlZCBkYXRhIHN0cnVjdHVyZS4K
KyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxl
RGF0YT4oKnVubGlua2VkQ2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEpOworICAgIH0KKyAg
ICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Olllcyk7CisgICAgdS5kYXRhSUMubV9jYWxsTGlu
a0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7CisgICAgc2V0U2xvd1BhdGhDYWxsRGVzdGluYXRp
b24odm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS50ZW1wbGF0ZSByZXRhZ2dl
ZENvZGU8SlNFbnRyeVB0clRhZz4oKSk7Cit9CisKIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGly
ZWN0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWlz
VGFpbENhbGwoKSk7CiAKICAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKIAotICAg
IGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgpOwotICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwot
ICAgIH0pOwotCiAgICAgYXV0byBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewogICAgICAgICB1LmNvZGVJQy5t
X2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQ
dHJUYWc+KGNhbGwpOwpAQCAtMzk3LDcgKzQyNCw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjplbWl0
RGlyZWN0VGFpbENhbGxGYXMKIAogICAgIGF1dG8gZmFzdFBhdGhTdGFydCA9IGppdC5sYWJlbCgp
OwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgbV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGZhc3RQYXRoU3RhcnQpOworICAgICAgICB1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7
CiAgICAgfSk7CiAKICAgICAvLyAtIElmIHdlJ3JlIG5vdCB5ZXQgbGlua2VkLCB0aGlzIGlzIGEg
anVtcCB0byB0aGUgc2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5
ICs0MywxMSBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwog
c3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhOwogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0lu
Zm87CisKIGNsYXNzIENhbGxMaW5rSW5mbyA6IHB1YmxpYyBQYWNrZWRSYXdTZW50aW5lbE5vZGU8
Q2FsbExpbmtJbmZvPiB7CiBwdWJsaWM6Ci0gICAgZW51bSBDYWxsVHlwZSB7CisgICAgZW51bSBD
YWxsVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBOb25lLAogICAgICAgICBDYWxsLAogICAgICAg
ICBDYWxsVmFyYXJncywKQEAgLTE2NSw2ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2Fs
bGVlR1BSID0gY2FsbGVlR1BSOwogICAgIH0KIAorICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFJQyhW
TSYsIFVubGlua2VkQ2FsbExpbmtJbmZvJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUik7CisKICAgICBHUFJSZWcgY2FsbGVlR1BSKCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsZWVHUFI7IH0KICAgICAKICAgICBlbnVtIGNsYXNzIFVzZURhdGFJQyA6IHVpbnQ4X3QgewpA
QCAtMTczLDEzICsxNzcsMTYgQEAgcHVibGljOgogICAgIH07CiAKIHByaXZhdGU6Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiwgR1BS
UmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47Cisg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENhbGxM
aW5rSW5mbyosIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlu
a0luZm9HUFIsIFVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4gcHJlcGFyZUZvclRhaWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiBwdWJsaWM6CisgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxI
ZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikgV0FSTl9V
TlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRh
aWxDYWxsRGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BS
UmVnIGNhbGxMaW5rSW5mb0dQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWls
Q2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBl
bWl0RmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUiwgVXNlRGF0YUlDKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRh
aWxDYWxsKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBlbWl0RGlyZWN0RmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJik7CiAgICAgdm9pZCBlbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aChDQ2Fs
bEhlbHBlcnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKTsKICAg
ICB2b2lkIGVtaXRTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYpOworICAgIHN0YXRpYyB2b2lk
IGVtaXREYXRhSUNTbG93UGF0aChWTSYsIENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIpOwogICAgIHZvaWQgcmV2ZXJ0Q2FsbFRvU3R1YigpOwogCiAgICAgYm9vbCBpc0RhdGFJ
QygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVzZURhdGFJQz4obV91c2VEYXRhSUMpID09
IFVzZURhdGFJQzo6WWVzOyB9CkBAIC0yMDMsNyArMjEwLDYgQEAgcHVibGljOgogICAgICAgICBt
X2FsbG93U3R1YnMgPSBmYWxzZTsKICAgICB9CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0lu
dGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gc2xvd1BhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbigpOwogCkBAIC0yNDMsMTEgKzI0OSw2IEBAIHB1
YmxpYzoKICAgICAgICAgbV9zbG93U3R1YiA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgSklUU3R1
YlJvdXRpbmUqIHNsb3dTdHViKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Nsb3dTdHViLmdl
dCgpOwotICAgIH0KLQogICAgIGJvb2wgc2Vlbk9uY2UoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IG1faGFzU2VlblNob3VsZFJlcGF0Y2g7CkBAIC0zMDgsOSArMzA5LDkgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FsbFR5cGU+KG1fY2FsbFR5cGUpOwogICAgIH0KIAot
ICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiAmbV9tYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
czsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsTGlua0luZm8sIG1fbWF4QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIH0KIAogICAgIHVpbnQzMl90IG1heEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKQEAgLTM4MSw3ICszODIsOSBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IG1f
ZmFzdFBhdGhTdGFydDsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IGZhc3RQYXRoU3RhcnQoKTsKKwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJU
YWc+IG1fZG9uZUxvY2F0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBtX3Nsb3dQYXRoQ2FsbERlc3RpbmF0aW9uOwogICAgIHVuaW9uIFVuaW9uVHlwZSB7CkBA
IC0zOTcsNiArNDAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJD
YWxsPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbExvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyPEpTSW50ZXJuYWxQdHJUYWc+IG1fY2FsbGVlTG9jYXRpb247CiAg
ICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX3Nsb3dQYXRo
U3RhcnQ7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBt
X2Zhc3RQYXRoU3RhcnQ7CiAgICAgICAgIH0gY29kZUlDOwogICAgIH0gdTsKIApAQCAtNDI0LDYg
KzQyOCwxMyBAQCBpbmxpbmUgQ29kZU9yaWdpbiBnZXRDYWxsTGlua0luZm9Db2RlT3JpCiAgICAg
cmV0dXJuIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCk7CiB9CiAKK3N0cnVjdCBVbmxpbmtlZENh
bGxMaW5rSW5mbyB7CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OyAvLyBDdXJyZW50
bHksIG9ubHkgdXNlZCBieSBiYXNlbGluZSwgc28gdGhpcyBjYW4gdHJpdmlhbGx5IHByb2R1Y2Ug
YSBDb2RlT3JpZ2luLgorICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CisgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZG9uZUxvY2F0aW9uOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gZnJhbWVTaHVmZmxlRGF0YTsKK307
CisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjc5LDggKzI3OSw2IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZN
JiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fZGlkRmFpbEpJVENvbXBpbGF0aW9uKGZhbHNlKQog
ICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2hhc0JlZW5Db21w
aWxlZFdpdGhGVEwoZmFsc2UpCi0gICAgLCBtX2hhc0xpbmtlZE9TUkV4aXQoZmFsc2UpCi0gICAg
LCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZShmYWxzZSkKICAgICAsIG1fbnVtQ2FsbGVl
TG9jYWxzKG90aGVyLm1fbnVtQ2FsbGVlTG9jYWxzKQogICAgICwgbV9udW1WYXJzKG90aGVyLm1f
bnVtVmFycykKICAgICAsIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAob3RoZXIubV9udW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCkKQEAgLTMwOCw2ICszMDYsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhWTSYgdm0sIFN0cnVjdHVyZSogCiAKICAgICBBU1NFUlQoc291cmNlKCkucHJvdmlkZXIoKSk7
CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworCisgICAgbV9s
bGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVy
KCk7CiAgICAgCiAgICAgdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5hZGQodGhpcyk7CiB9CkBAIC0z
MTgsNyArMzE4LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQwog
ICAgIGZpbmlzaENyZWF0aW9uQ29tbW9uKHZtKTsKIAogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAo
KTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgaWYgKG90aGVyLm1fcmFyZURhdGEpIHsK
ICAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwpAQCAtMzM2LDggKzMzNSw2IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAsIG1fZGlkRmFp
bEpJVENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFs
c2UpCiAgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCi0gICAgLCBtX2hhc0xp
bmtlZE9TUkV4aXQoZmFsc2UpCi0gICAgLCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZShm
YWxzZSkgCiAgICAgLCBtX251bUNhbGxlZUxvY2Fscyh1bmxpbmtlZENvZGVCbG9jay0+bnVtQ2Fs
bGVlTG9jYWxzKCkpCiAgICAgLCBtX251bVZhcnModW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMo
KSkKICAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCkBAIC0zNTksNyArMzU2LDkg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJU
KHNvdXJjZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSk7Ci0gICAgCisKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50
ZXIgPSAmbV91bmxpbmtlZENvZGUtPmxsaW50RXhlY3V0ZUNvdW50ZXIoKTsKKwogICAgIHZtLmhl
YXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQogCkBAIC0zNzAsNyArMzY5LDggQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogLy8gd2UgY2FuJ3QgZ2VuZXJh
dGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJvY2VzcyBpcyBu
b3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCiAvLyBmbG93IG9yIGludHJvZHVjZSBuZXcg
bG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5lc3MgYW5hbHlz
aXMgdG8gYmUgdGhlIHNhbWUgZm9yCiAvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2YgYW4gVW5saW5r
ZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhlIGxpdmVuZXNz
IGFuYWx5c2lzCi0vLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCisvLyBpbnNpZGUgVW5saW5r
ZWRDb2RlQmxvY2suIEFsc28sIEJhc2VsaW5lIEpJVCBjb2RlIGlzIHNoYXJlZCBiZXR3ZWVuIGFs
bCBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLAorLy8gc28gdGhlIGJ5dGVjb2Rl
IG11c3QgcmVtYWluIHRoZSBzYW1lIGJldHdlZW4gQ29kZUJsb2NrcyBzaGFyaW5nIGFuIFVubGlu
a2VkQ29kZUJsb2NrLgogYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2Ny
aXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5r
ZWRDb2RlQmxvY2ssCiAgICAgSlNTY29wZSogc2NvcGUpCiB7CkBAIC00NzEsNiArNDcxLDIxIEBA
IGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgYnJlYWs7
IFwKICAgICB9CiAKKyAgICB1bnNpZ25lZCBiaW5hcnlQcm9maWxlSW5kZXggPSAwOworICAgIHVu
c2lnbmVkIHVuYXJ5UHJvZmlsZUluZGV4ID0gMDsKKyNkZWZpbmUgTElOS19XSVRIX0JJTkFSWV9B
UklUSF9QUk9GSUxFKF9fb3ApIFwKKyAgICBDQVNFKF9fb3ApOiB7IFwKKyAgICAgICAgSU5JVElB
TElaRV9NRVRBREFUQShfX29wKSBcCisgICAgICAgIG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlID0g
Jm1fdW5saW5rZWRDb2RlLT5iaW5hcnlBcml0aFByb2ZpbGUoYmluYXJ5UHJvZmlsZUluZGV4Kysp
OyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorI2RlZmluZSBMSU5LX1dJVEhfVU5BUllfQVJJ
VEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJ
WkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZt
X3VubGlua2VkQ29kZS0+dW5hcnlBcml0aFByb2ZpbGUodW5hcnlQcm9maWxlSW5kZXgrKyk7IFwK
KyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYg
aW5zdHJ1Y3Rpb25TdHJlYW0gPSBpbnN0cnVjdGlvbnMoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8m
IGluc3RydWN0aW9uIDogaW5zdHJ1Y3Rpb25TdHJlYW0pIHsKICAgICAgICAgT3Bjb2RlSUQgb3Bj
b2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKQEAgLTUzMywxNCArNTQ4LDE0IEBAIGJv
b2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgTElOSyhPcENy
ZWF0ZVByb21pc2UpCiAgICAgICAgIExJTksoT3BDcmVhdGVHZW5lcmF0b3IpCiAKLSAgICAgICAg
TElOSyhPcEFkZCkKLSAgICAgICAgTElOSyhPcE11bCkKLSAgICAgICAgTElOSyhPcERpdikKLSAg
ICAgICAgTElOSyhPcFN1YikKLQotICAgICAgICBMSU5LKE9wTmVnYXRlKQotICAgICAgICBMSU5L
KE9wSW5jKQotICAgICAgICBMSU5LKE9wRGVjKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FS
SVRIX1BST0ZJTEUoT3BBZGQpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklM
RShPcE11bCkKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wRGl2KQor
ICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BTdWIpCisKKyAgICAgICAg
TElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BOZWdhdGUpCisgICAgICAgIExJTktfV0lU
SF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wSW5jKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJ
VEhfUFJPRklMRShPcERlYykKIAogICAgICAgICBMSU5LKE9wSm5lcVB0cikKIApAQCAtNzY5LDcg
Kzc4NCw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAv
LyByZWx5IG9uIHRoZSBpbnN0cnVjdGlvbiBjb3VudCAoYW5kIGFyZSBpbiB0aGVvcnkgcGVybWl0
dGVkIHRvIGFsc28gaW5zcGVjdCB0aGUKICAgICAvLyBpbnN0cnVjdGlvbiBzdHJlYW0gdG8gbW9y
ZSBhY2N1cmF0ZSBhc3Nlc3MgdGhlIGNvc3Qgb2YgdGllci11cCkuCiAgICAgb3B0aW1pemVBZnRl
cldhcm1VcCgpOwotICAgIGppdEFmdGVyV2FybVVwKCk7CiAKICAgICAvLyBJZiB0aGUgY29uY3Vy
cmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2RlIGJsb2NrJ3MgaGFzaCwgdGhlbiBjb21wdXRl
IGl0IGhlcmUKICAgICAvLyBzeW5jaHJvbm91c2x5LgpAQCAtNzkzLDYgKzgwNyw3OCBAQCB2b2lk
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb25Db21tb24oVk0mCiAgICAgbV9vd25lckVkZ2Uuc2V0
KHZtLCB0aGlzLCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpjcmVhdGUodm0sIHRoaXMpKTsK
IH0KIAorI2lmIEVOQUJMRShKSVQpCit2b2lkIENvZGVCbG9jazo6c2V0dXBXaXRoVW5saW5rZWRC
YXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29kZT4gaml0Q29kZSkKK3sKKyAgICBzZXRKSVRD
b2RlKGppdENvZGUuY29weVJlZigpKTsKKworICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgaml0
Q29kZU1hcCA9IHRoaXMtPmppdENvZGVNYXAoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgeworICAgICAgICAgICAgSGFu
ZGxlckluZm8mIGhhbmRsZXIgPSBleGNlcHRpb25IYW5kbGVyKGkpOworICAgICAgICAgICAgLy8g
RklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCisgICAgICAgICAgICBoYW5kbGVyLm5h
dGl2ZUNvZGUgPSBqaXRDb2RlTWFwLmZpbmQoQnl0ZWNvZGVJbmRleChoYW5kbGVyLnRhcmdldCkp
LnJldGFnZ2VkPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAg
ICAgYXV0byYgaml0RGF0YSA9IGVuc3VyZUpJVERhdGEobG9ja2VyKTsKKworICAgICAgICBSRUxF
QVNFX0FTU0VSVChqaXREYXRhLm1faml0Q29uc3RhbnRQb29sLmlzRW1wdHkoKSk7CisgICAgICAg
IGppdERhdGEubV9qaXRDb25zdGFudFBvb2wgPSBGaXhlZFZlY3Rvcjx2b2lkKj4oaml0Q29kZS0+
bV9jb25zdGFudFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBq
aXRDb2RlLT5tX2NvbnN0YW50UG9vbC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBl
bnRyeSA9IGppdENvZGUtPm1fY29uc3RhbnRQb29sLmF0KGkpOworICAgICAgICAgICAgc3dpdGNo
IChlbnRyeS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
R2xvYmFsT2JqZWN0OgorICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xb
aV0gPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm86IHsKKyAgICAg
ICAgICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgdW5saW5rZWRDYWxsTGlua0luZm8gPSAq
c3RhdGljX2Nhc3Q8VW5saW5rZWRDYWxsTGlua0luZm8qPihlbnRyeS5wYXlsb2FkLmdldCgpKTsK
KyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdERhdGEubV9j
YWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2Rl
SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmluaXRpYWxpemVEYXRhSUMo
dm0oKSwgdW5saW5rZWRDYWxsTGlua0luZm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgICAgICAgICAgICAgaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGNhbGxM
aW5rSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbzogeworICAg
ICAgICAgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8g
PSAqc3RhdGljX2Nhc3Q8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyo+KGVudHJ5LnBheWxvYWQu
Z2V0KCkpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IGpp
dERhdGEubV9zdHViSW5mb3MuYWRkKHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZSwgQ29kZU9y
aWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBz
dHViSW5mby0+aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKHRoaXMsIHVu
bGlua2VkU3R1YkluZm8pOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBv
b2xbaV0gPSBzdHViSW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2w6IHsK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25z
dGFudFBvb2xbaV0gPSBmdW5jdGlvbkRlY2woaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6
OkZ1bmN0aW9uRXhwcjogeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oZW50cnkucGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAg
aml0RGF0YS5tX2ppdENvbnN0YW50UG9vbFtpXSA9IGZ1bmN0aW9uRXhwcihpbmRleCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICBjYXNlIEdsb2JhbENv
ZGU6CisgICAgY2FzZSBNb2R1bGVDb2RlOgorICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAgIG1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RnVuY3Rpb25Db2RlOgorICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRv
IGZhbHNlIGJlY2F1c2Ugd2UgZGV0ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCisgICAgICAg
IC8vIERvbid0IG92ZXJyaWRlIHRoYXQgb2JzZXJ2YXRpb24uCisgICAgICAgIG1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkICY9IGNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwoKSkgJiYgREZHOjptaWdo
dElubGluZUZ1bmN0aW9uKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAo
aml0Q29kZS0+bV9pc1NoYXJlYWJsZSAmJiAhdW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtl
ZEJhc2VsaW5lQ29kZSAmJiBPcHRpb25zOjp1c2VCYXNlbGluZUpJVENvZGVTaGFyaW5nKCkpCisg
ICAgICAgIHVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUgPSBXVEZN
b3ZlKGppdENvZGUpOworfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKIENvZGVCbG9jazo6fkNv
ZGVCbG9jaygpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07CkBAIC04NzMsNiArOTU5LDI3IEBAIENv
ZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAorYm9vbCBD
b2RlQmxvY2s6OmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QKK3sKKyAgICAvLyBUaGlzIG5lZWRzIHRvIGNvcnJlc3BvbmQgdG8gd2hh
dCB3ZSBkbyBpbnNpZGUgc2V0Q29uc3RhbnRSZWdpc3RlcnMuCisgICAgc3dpdGNoICh1bmxpbmtl
ZENvZGVCbG9jaygpLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihyZWcpKSB7Cisg
ICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkludGVnZXI6CisgICAgY2FzZSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkRvdWJsZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOiB7CisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSB1bmxpbmtlZENvZGVCbG9jaygpLT5nZXRDb25zdGFudChyZWcpOworICAgICAgICBp
ZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgaWYgKGNlbGwt
PmluaGVyaXRzPFN5bWJvbFRhYmxlPih2bSgpKSB8fCBjZWxsLT5pbmhlcml0czxKU1RlbXBsYXRl
T2JqZWN0RGVzY3JpcHRvcj4odm0oKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjo6TGlua1RpbWVDb25zdGFudDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwog
VmVjdG9yPHVuc2lnbmVkPiBDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IEZp
eGVkVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgRml4ZWRW
ZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtODkyLDYgKzk5OSw3IEBAIFZl
Y3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFIKICAgICAgICAgc3dpdGNoIChy
ZXByZXNlbnRhdGlvbikgewogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudDoKICAgICAgICAgICAgIGNvbnN0YW50ID0gZ2xvYmFsT2JqZWN0LT5s
aW5rVGltZUNvbnN0YW50KHN0YXRpY19jYXN0PExpbmtUaW1lQ29uc3RhbnQ+KGNvbnN0YW50LmFz
SW50MzJBc0FueUludCgpKSk7CisgICAgICAgICAgICBBU1NFUlQoY29uc3RhbnQuaXNDZWxsKCkp
OyAvLyBVbmxpbmtlZCBCYXNlbGluZSBKSVQgcmVxdWlyZXMgdGhpcy4KICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXI6CiAgICAg
ICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgpAQCAtMTUxNCw3ICsx
NjIyLDcgQEAgQ29kZUJsb2NrOjpKSVREYXRhJiBDb2RlQmxvY2s6OmVuc3VyZUpJVAogICAgIHJl
dHVybiAqbV9qaXREYXRhOwogfQogCi12b2lkIENvZGVCbG9jazo6ZmluYWxpemVCYXNlbGluZUpJ
VElubGluZUNhY2hlcygpCit2b2lkIENvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMo
KQogewogICAgIGlmIChhdXRvKiBqaXREYXRhID0gbV9qaXREYXRhLmdldCgpKSB7CiAgICAgICAg
IGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBqaXREYXRhLT5tX2NhbGxMaW5rSW5m
b3MpCkBAIC0xNTI1LDYgKzE2MzMsMjAgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxp
bmVKSVRJbmxpbgogICAgICAgICAgICAgc3R1YkluZm8tPnZpc2l0V2Vha1JlZmVyZW5jZXMobG9j
a2VyLCB0aGlzKTsKICAgICAgICAgfQogICAgIH0KKworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAg
ICBpZiAoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKSB7CisgICAgICAgIC8vIFZl
cmlmeSB3ZSBkb24ndCBuZWVkIHRvIGZpbmFsaXplIHRoZXNlIHNpbmNlIHRoZXkncmUgdmlydHVh
bCBjYWxscy4KKyAgICAgICAgZm9yIChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA6IHN0YXRp
Y19jYXN0PEJhc2VsaW5lSklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fZXZhbENhbGxMaW5r
SW5mb3MpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsK
KyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+Zm9yRWFjaERlcGVuZGVudENlbGwoW10gKEpTQ2Vs
bCopIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisKKyAgICB9CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC0xNTM0LDQ2
ICsxNjU2LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAog
ICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIGJvb2wg
aXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3Jh
ZGU7Ci0gICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSBmYWxzZTsKLSAgICAvLyBJ
ZiBCYXNlbGluZUpJVCBjb2RlIGlzIG5vdCBleGVjdXRpbmcsIGFuZCBhbiBvcHRpbWl6ZWQgcmVw
bGFjZW1lbnQgZXhpc3RzLCB3ZSBhdHRlbXB0Ci0gICAgLy8gdG8gZGlzY2FyZCBiYXNlbGluZSBK
SVQgY29kZSBhbmQgcmVpbnN0YWxsIExMSW50IGNvZGUgdG8gc2F2ZSBKSVQgbWVtb3J5LgotICAg
IGlmIChPcHRpb25zOjp1c2VMTEludCgpICYmICFtX2hhc0xpbmtlZE9TUkV4aXQgJiYgaml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmICFtX3ZtLT5oZWFwLmNvZGVCbG9ja1NldCgp
LmlzQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpKSB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIG9w
dGltaXplZENvZGVCbG9jayA9IG9wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKLSAgICAgICAgICAg
IGlmICghb3B0aW1pemVkQ29kZUJsb2NrLT5tX29zckV4aXRDb3VudGVyKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSkgewotICAgICAgICAgICAgICAg
ICAgICBtX2ppdENvZGUgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBMTEludDo6c2V0
RW50cnlwb2ludCh0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0
VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1bmspOwotCi0gICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91bmxpbmtlZENvZGUtPm51bWJlck9mRXhjZXB0
aW9uSGFuZGxlcnMoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmxp
bmtlZEhhbmRsZXJJbmZvJiB1bmxpbmtlZEhhbmRsZXIgPSBtX3VubGlua2VkQ29kZS0+ZXhjZXB0
aW9uSGFuZGxlcihpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5k
bGVyID0gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9ucygpLmF0KHVubGlua2Vk
SGFuZGxlci50YXJnZXQpLnB0cigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5p
bml0aWFsaXplKHVubGlua2VkSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFu
ZGxlclB0clRhZz4oTExJbnQ6OmhhbmRsZUNhdGNoKGluc3RydWN0aW9uLndpZHRoKCkpLmNvZGUo
KSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdW5saW5r
SW5jb21pbmdDYWxscygpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBj
bGVhciB0aGVzZSBvdXQgaGVyZSBiZWNhdXNlIGluIGZpbmFsaXplVW5jb25kaXRpb25hbGx5IGFs
bCBjb21waWxlciB0aHJlYWRzCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBzYWZlcG9pbnRl
ZCwgbWVhbmluZyB0aGV5J3JlIHJ1bm5pbmcgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBieXRlY29k
ZSBwYXJzZXIsIGFuZCBieXRlY29kZQotICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXIgaXMg
dGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRpbmcgaW50byB0aGUgdmFyaW91cyAqaW5mb3Mu
Ci0gICAgICAgICAgICAgICAgICAgIHJlc2V0SklURGF0YSgpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNlbmRpZgotICAgIAog
ICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSkKICAgICAgICAg
ZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAo
ISFqaXRDb2RlKCkpCi0gICAgICAgIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsK
KyAgICAgICAgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KERGR19KSVQpCkBAIC0xNTk0LDcgKzE2ODIsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoCiAgICAgICAgIGNhc2UgSklUVHlwZTo6SG9zdENhbGxUaHVuazoKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
OgotICAgICAgICAgICAgY291bnQgPSBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKKyAg
ICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jb3VudCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSklUVHlwZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAg
ICAgICBjb3VudCA9IG1faml0RXhlY3V0ZUNvdW50ZXIuY291bnQoKTsKQEAgLTE2NzUsMzAgKzE3
NjMsNiBAQCBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mCiAgICAgcmV0
dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSwgY29k
ZU9yaWdpbik7CiB9CiAKLUpJVEFkZElDKiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fYWRkSUNzLmFk
ZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVRNdWxJQyogQ29kZUJsb2NrOjphZGRKSVRNdWxJQyhC
aW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX211
bElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUU3ViSUMqIENvZGVCbG9jazo6YWRkSklU
U3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tl
cikubV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVE5lZ0lDKiBDb2RlQmxvY2s6
OmFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRh
KGxvY2tlcikubV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KIFN0cnVjdHVyZVN0dWJJ
bmZvKiBDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CiAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwpAQCAtMzEzMyw3ICszMTk3LDcg
QEAgdW5zaWduZWQgQ29kZUJsb2NrOjpmcmFtZVJlZ2lzdGVyQ291bnQoKQogCiAjaWYgRU5BQkxF
KEpJVCkKICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgotICAgICAgICByZXR1cm4gSklU
OjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcyk7CisgICAgICAgIHJldHVybiBKSVQ6OmZyYW1l
UmVnaXN0ZXJDb3VudEZvcih0aGlzLT51bmxpbmtlZENvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC0zMzQ5LDEzICszNDEzLDEzIEBA
IEJpbmFyeUFyaXRoUHJvZmlsZSogQ29kZUJsb2NrOjpiaW5hcnlBcmkKIHsKICAgICBzd2l0Y2gg
KHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9hZGQ6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1
cm4gcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNh
c2Ugb3BfbXVsOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlz
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcE11bD4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJu
ICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAg
IHJldHVybiBwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAg
ICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wRGl2PigpLm1ldGFkYXRh
KHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wRGl2PigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTMzNjcsMTEgKzM0MzEsMTEgQEAgVW5hcnlBcml0aFByb2ZpbGUqIENvZGVC
bG9jazo6dW5hcnlBcml0aAogewogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBj
YXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BOZWdhdGU+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9pbmM6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gcGMtPmFzPE9wSW5jPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQ
cm9maWxlOwogICAgIGNhc2Ugb3BfZGVjOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERlYz4o
KS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxP
cERlYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0zNDcyLDIyICszNTM2LDE2IEBAIHZvaWQgQ29kZUJsb2Nr
OjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmkKIH0KIAogI2lmIEVOQUJMRShKSVQpCi12b2lkIENv
ZGVCbG9jazo6c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3Jp
Z2luTWFwPiYmIG1hcCkgCi17IAotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
KTsKLSAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1v
dmUobWFwKTsKLX0KLQogc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBDb2RlQmxvY2s6OmZpbmRQ
Qyh2b2lkKiBwYykKIHsKKyAgICBpZiAoYXV0byogcGNUb0NvZGVPcmlnaW5NYXAgPSBtX2ppdENv
ZGUtPnBjVG9Db2RlT3JpZ2luTWFwKCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Q29k
ZU9yaWdpbj4gY29kZU9yaWdpbiA9IHBjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMpKQorICAg
ICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47CisgICAgfQorCiAgICAgewogICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIGlmIChhdXRvKiBqaXREYXRh
ID0gbV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBpZiAoaml0RGF0YS0+bV9wY1RvQ29k
ZU9yaWdpbk1hcCkgewotICAgICAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+IGNvZGVPcmlnaW4gPSBqaXREYXRhLT5tX3BjVG9Db2RlT3JpZ2luTWFwLT5maW5kUEMocGMp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKLSAgICAgICAgICAgIH0K
LQogICAgICAgICAgICAgZm9yIChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gOiBqaXREYXRh
LT5tX3N0dWJJbmZvcykgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby0+Y29udGFpbnNQ
QyhwYykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPENvZGVPcmln
aW4+KHN0dWJJbmZvLT5jb2RlT3JpZ2luKTsKQEAgLTM1MjEsMjggKzM1NzksMTQgQEAgc3RkOjpv
cHRpb25hbDxCeXRlY29kZUluZGV4PiBDb2RlQmxvY2s6OgogICAgIHJldHVybiBieXRlY29kZUlu
ZGV4OwogfQogCi1pbnQzMl90IENvZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhy
ZXNob2xkKQotewotICAgIHN3aXRjaCAodW5saW5rZWRDb2RlQmxvY2soKS0+ZGlkT3B0aW1pemUo
KSkgewotICAgIGNhc2UgVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGU6Ci0gICAgICAgIHJldHVybiB0
aHJlc2hvbGQ7Ci0gICAgY2FzZSBUcmlTdGF0ZTo6RmFsc2U6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgKiA0OwotICAgIGNhc2UgVHJpU3RhdGU6OlRydWU6Ci0gICAgICAgIHJldHVybiB0aHJl
c2hvbGQgLyAyOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
dGhyZXNob2xkOwotfQotCi12b2lkIENvZGVCbG9jazo6aml0QWZ0ZXJXYXJtVXAoKQordm9pZCBD
b2RlQmxvY2s6OmppdFNvb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdU
aHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2Fy
bVVwKCkpLCB0aGlzKTsKKyAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXItPnNldE5ld1RocmVzaG9s
ZCh1bmxpbmtlZENvZGVCbG9jaygpLT50aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKK3Zv
aWQgQ29kZUJsb2NrOjpqaXROZXh0SW52b2NhdGlvbigpCiB7Ci0gICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xk
Rm9ySklUU29vbigpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdU
aHJlc2hvbGQoMCwgdGhpcyk7CiB9CiAKIGJvb2wgQ29kZUJsb2NrOjpoYXNJbnN0YWxsZWRWTVRy
YXBCcmVha3BvaW50cygpIGNvbnN0CkBAIC0zNTg4LDI4ICszNjMyLDggQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBNYXRoSUNTdGF0cygpCiAgICAgZG91YmxlIG51bVN1YnMgPSAwLjA7CiAgICAgZG91
YmxlIHRvdGFsU3ViU2l6ZSA9IDAuMDsKIAotICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVC
bG9jayogY29kZUJsb2NrKSB7Ci0gICAgICAgIGlmIChhdXRvKiBqaXREYXRhID0gY29kZUJsb2Nr
LT5tX2ppdERhdGEuZ2V0KCkpIHsKLSAgICAgICAgICAgIGZvciAoSklUQWRkSUMqIGFkZElDIDog
aml0RGF0YS0+bV9hZGRJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1BZGRzKys7Ci0gICAgICAg
ICAgICAgICAgdG90YWxBZGRTaXplICs9IGFkZElDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKEpJVE11bElDKiBtdWxJQyA6IGppdERhdGEtPm1fbXVsSUNz
KSB7Ci0gICAgICAgICAgICAgICAgbnVtTXVscysrOwotICAgICAgICAgICAgICAgIHRvdGFsTXVs
U2l6ZSArPSBtdWxJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Zm9yIChKSVROZWdJQyogbmVnSUMgOiBqaXREYXRhLT5tX25lZ0lDcykgewotICAgICAgICAgICAg
ICAgIG51bU5lZ3MrKzsKLSAgICAgICAgICAgICAgICB0b3RhbE5lZ1NpemUgKz0gbmVnSUMtPmNv
ZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUU3ViSUMqIHN1
YklDIDogaml0RGF0YS0+bV9zdWJJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1TdWJzKys7Ci0g
ICAgICAgICAgICAgICAgdG90YWxTdWJTaXplICs9IHN1YklDLT5jb2RlU2l6ZSgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgYXV0byBjb3VudElDcyA9IFsmXSAoQ29kZUJsb2NrKikg
eworICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byByZS1pbXBsZW1lbnQgdGhpcyB1c2luZyBK
SVRDb2RlLgogICAgIH07CiAgICAgaGVhcCgpLT5mb3JFYWNoQ29kZUJsb2NrKGNvdW50SUNzKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw5IEBAIGNsYXNzIEpTTW9kdWxlRW52aXJv
bm1lbnQ7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ7CiBjbGFzcyBNZXRhZGF0YVRhYmxlOwot
Y2xhc3MgUENUb0NvZGVPcmlnaW5NYXA7CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKIGNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvOworY2xhc3MgQmFzZWxpbmVKSVRDb2RlOwogCiBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihDb2RlQmxvY2tSYXJlRGF0YSk7CiAKQEAg
LTE1OCw3ICsxNTgsOSBAQCBwdWJsaWM6CiAgICAgTWV0YWRhdGFUYWJsZSogbWV0YWRhdGFUYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuZ2V0KCk7IH0KIAogICAgIHVuc2lnbmVkIG51
bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnM7IH0KK3ByaXZhdGU6
CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKHVuc2lnbmVkIG5ld1ZhbHVlKTsKK3B1YmxpYzoK
IAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkgY29uc3QgeyByZXR1cm4g
bV9udW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsgfQogCkBAIC0xNjcsNyArMTY5LDYgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KICAg
ICB1bnNpZ25lZCBudW1UbXBzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0No
ZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50VG1wczsgfQogCi0gICAgdW5zaWduZWQqIGFk
ZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CiAKICAgICBDb2RlQmxvY2sq
IGFsdGVybmF0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9h
bHRlcm5hdGl2ZS5nZXQoKSk7IH0KQEAgLTIzMiwxNiArMjMzLDYgQEAgcHVibGljOgogICAgIGJv
b2wgaGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdDsKICAgICBib29sIGluc3Rh
bGxWTVRyYXBCcmVha3BvaW50cygpOwogCi0gICAgaW5saW5lIGJvb2wgaXNLbm93bkNlbGwoVmly
dHVhbFJlZ2lzdGVyIHJlZykKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBhZGRp
bmcgYmFjayB0aGUgb3B0aW1pemF0aW9uIHdoZXJlIHdlIHJldHVybiB0cnVlIGlmIGByZWdgIGlz
IGB0aGlzYCBhbmQgd2UncmUgaW4gc2xvcHB5IG1vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAxNDUKLSAgICAgICAgaWYgKHJlZy5pc0Nv
bnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RhbnQocmVnKS5pc0NlbGwoKTsK
LQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBib29s
IGlzVGVtcG9yYXJ5UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykKICAgICB7CiAgICAgICAg
IHJldHVybiByZWcub2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihtX251bVZhcnMpOwpAQCAt
MjY4LDIzICsyNTksMjEgQEAgcHVibGljOgogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RydWN0IEpJ
VERhdGEgewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICAgICAgQmFnPFN0cnVj
dHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKLSAgICAgICAgQmFnPEpJVEFkZElDPiBtX2FkZElD
czsKLSAgICAgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKLSAgICAgICAgQmFnPEpJVE5lZ0lD
PiBtX25lZ0lDczsKLSAgICAgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKICAgICAgICAgQmFn
PENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgICAgICBTZW50aW5lbExpbmtlZExp
c3Q8Q2FsbExpbmtJbmZvLCBQYWNrZWRSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9p
bmNvbWluZ0NhbGxzOwogICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBoaWNDYWxs
Tm9kZSwgUGFja2VkUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29t
aW5nUG9seW1vcnBoaWNDYWxsczsKLSAgICAgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxl
PiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJs
ZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UENU
b0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVPcmlnaW5NYXA7CiAgICAgICAgIGJvb2wgbV9oYXND
YWxsZWVTYXZlUmVnaXN0ZXJzIHsgZmFsc2UgfTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwotICAgICAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1h
cDsKKworICAgICAgICBGaXhlZFZlY3Rvcjx2b2lkKj4gbV9qaXRDb25zdGFudFBvb2w7CisgICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSklURGF0YSwgbV9qaXRDb25zdGFudFBvb2wpOyB9CiAgICAgfTsKIAor
ICAgIHZvaWQgc2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNvZGUoUmVmPEJhc2VsaW5lSklUQ29k
ZT4pOworCiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YShjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImIGxvY2tlcikKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkobV9qaXREYXRhKSkKQEAgLTI5
MywyMiArMjgyLDcgQEAgcHVibGljOgogICAgIH0KICAgICBKSVREYXRhJiBlbnN1cmVKSVREYXRh
U2xvdyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKTsKIAotICAgIEpJVEFkZElDKiBhZGRKSVRB
ZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLSAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQmlu
YXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQ
cm9maWxlKik7Ci0gICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSop
OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5lcmF0b3I+
Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUQWRkSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2Zp
bGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlw
ZT4KLSAgICBKSVRNdWxJQyogYWRkTWF0aElDKEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkg
eyByZXR1cm4gYWRkSklUTXVsSUMocHJvZmlsZSk7IH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
YW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVE5l
Z0lDKiBhZGRNYXRoSUMoVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJ
VE5lZ0lDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3Is
IEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRTdWJJQyogYWRkTWF0aElD
KEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmls
ZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURGF0YSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RGF0YSk7IH0KIAogICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlLCBDb2RlT3JpZ2luKTsKIApAQCAtMzIyLDE4
ICsyOTYsOCBAQCBwdWJsaWM6CiAgICAgLy8gbG9va2luZyBmb3IgYSBDYWxsTGlua0luZm9NYXAg
dG8gYW1vcnRpemUgdGhlIGNvc3Qgb2YgY2FsbGluZyB0aGlzLgogICAgIENhbGxMaW5rSW5mbyog
Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICAKLSAg
ICB2b2lkIHNldEpJVENvZGVNYXAoSklUQ29kZU1hcCYmIGppdENvZGVNYXApCi0gICAgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX2ppdENvZGVNYXAgPSBXVEZNb3ZlKGppdENvZGVNYXApOwotICAgIH0K
LSAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCkKLSAgICB7Ci0gICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX2ppdENvZGVNYXA7Ci0gICAgfQorICAgIGNvbnN0IEpJVENvZGVNYXAmIGpp
dENvZGVNYXAoKTsKIAotICAgIHZvaWQgc2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjp1bmlxdWVf
cHRyPFBDVG9Db2RlT3JpZ2luTWFwPiYmKTsKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+
IGZpbmRQQyh2b2lkKiBwYyk7CiAKICAgICB2b2lkIHNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVn
aXN0ZXJTZXQpOwpAQCAtNDcyLDYgKzQzNiw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1l
Rm9yUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29k
ZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJP
ZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVu
dFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFt
ZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VKSVQoKSk7CkBAIC01NjksOCArNTM0LDEwIEBAIHB1Ymxp
YzoKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdp
c3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7
IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7
IH0KKyAgICBib29sIGlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soVmlydHVhbFJl
Z2lzdGVyKSBjb25zdDsKICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
biBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24ocmVnKTsgfQogICAgIEFMV0FZU19JTkxJTkUgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
IGNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
aW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1
ZmZlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fY29uc3RhbnRSZWdp
c3RlcnMpICsgZGVjbHR5cGUobV9jb25zdGFudFJlZ2lzdGVycyk6OmRhdGFNZW1vcnlPZmZzZXQo
KTsgfQogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7
IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgaW50IG51bWJlck9m
RnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KQEAgLTU5
NSwyMiArNTYyLDIyIEBAIHB1YmxpYzoKICAgICAvLyBKdW1wIFRhYmxlcwogCiAjaWYgRU5BQkxF
KEpJVCkKLSAgICBTaW1wbGVKdW1wVGFibGUmIHN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCkKKyAgICBTaW1wbGVKdW1wVGFibGUmIGJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJs
ZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KTsKKyAgICB2b2lkKiBiYXNlbGluZUpJVENvbnN0YW50UG9vbCgp
CiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwotICAgICAgICByZXR1
cm4gbV9qaXREYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1faml0RGF0YSAmJiBqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpOworICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX2ppdENvbnN0YW50UG9vbC5kYXRhKCk7
CiAgICAgfQogI2VuZGlmCiAgICAgc2l6ZV90IG51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTd2l0
Y2hKdW1wVGFibGVzKCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRD
b2RlLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQogCi0jaWYgRU5BQkxF
KEpJVCkKLSAgICBTdHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFi
bGVJbmRleCkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faml0RGF0YSk7Ci0gICAg
ICAgIHJldHVybiBtX2ppdERhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKLSAgICB9CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgU3RyaW5nSnVtcFRhYmxlJiBkZmdT
dHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJs
ZSYgZGZnU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKICNlbmRpZgorCiAgICAgc2l6
ZV90IG51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1
cm4gbV91bmxpbmtlZENvZGUtPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVz
KCk7IH0KICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT51
bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsgfQogCkBAIC02MzIsMjEg
KzU5OSwyMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVk
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuY2hlY2tJZlRo
cmVzaG9sZENyb3NzZWRBbmRTZXQodGhpcyk7CisgICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0
ZUNvdW50ZXItPmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOwogICAgIH0KIAog
ICAgIHZvaWQgZG9udEpJVEFueXRpbWVTb29uKCkKICAgICB7Ci0gICAgICAgIG1fbGxpbnRFeGVj
dXRlQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgpOworICAgICAgICBtX2xsaW50RXhlY3V0ZUNv
dW50ZXItPmRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgfQogCi0gICAgaW50MzJfdCB0aHJlc2hv
bGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOwotICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKTsK
ICAgICB2b2lkIGppdFNvb24oKTsKKyAgICB2b2lkIGppdE5leHRJbnZvY2F0aW9uKCk7CiAKICAg
ICBjb25zdCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlcjsKKyAgICAg
ICAgcmV0dXJuICptX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgfQogCiAgICAgdHlwZWRlZiBI
YXNoTWFwPHN0ZDo6dHVwbGU8U3RydWN0dXJlSUQsIHVuc2lnbmVkPiwgRml4ZWRWZWN0b3I8TExJ
bnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Pj4gU3RydWN0dXJlV2F0
Y2hwb2ludE1hcDsKQEAgLTc5Nyw2ICs3NjMsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0Rl
YnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KICAg
ICB2b2lkKiBkZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpIHsgcmV0dXJuICZtX2RlYnVnZ2VyUmVx
dWVzdHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fZGVidWdnZXJSZXF1ZXN0cyk7
IH0KIAogICAgIHZvaWQgYWRkQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cyk7CiAg
ICAgdm9pZCByZW1vdmVCcmVha3BvaW50KHVuc2lnbmVkIG51bUJyZWFrcG9pbnRzKQpAQCAtODM4
LDYgKzgwNSw3IEBAIHB1YmxpYzoKICAgICBtdXRhYmxlIENvbmN1cnJlbnRKU0xvY2sgbV9sb2Nr
OwogCiAgICAgYm9vbCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZDsgLy8gTm90IGEgYml0ZmllbGQg
YmVjYXVzZSB0aGUgSklUIHdhbnRzIHRvIHN0b3JlIHRvIGl0LgorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7IH0KIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgdW5zaWduZWQgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA6IDI7IC8vIERGRzo6Q2Fw
YWJpbGl0eUxldmVsCkBAIC04NDcsOCArODE1LDYgQEAgcHVibGljOgogICAgIGJvb2wgbV9kaWRG
YWlsRlRMQ29tcGlsYXRpb24gOiAxOwogICAgIGJvb2wgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRM
IDogMTsKIAotICAgIGJvb2wgbV9oYXNMaW5rZWRPU1JFeGl0IDogMTsKLSAgICBib29sIG1faXNF
bGlnaWJsZUZvckxMSW50RG93bmdyYWRlIDogMTsKICAgICBib29sIG1fdmlzaXRDaGlsZHJlblNr
aXBwZWREdWVUb09sZEFnZSB7IGZhbHNlIH07CiAKICAgICAvLyBJbnRlcm5hbCBtZXRob2RzIGZv
ciB1c2UgYnkgdmFsaWRhdGlvbiBjb2RlLiBJdCB3b3VsZCBiZSBwcml2YXRlIGlmIGl0IHdhc24n
dApAQCAtOTA3LDE2ICs4NzMsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywg
bV9tZXRhZGF0YSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcik7IH0KIAotICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JG
dXp6aW5nRWFybHlSZXR1cm4oKQotICAgIHsKLSAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUg
cmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KLSAgICAgICAg
cmV0dXJuICFtX3VubGlua2VkQ29kZS0+aXNCdWlsdGluRnVuY3Rpb24oKTsKLSAgICB9CisgICAg
Ym9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpIHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bigpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMo
KTsKICNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJVElubGluZUNh
Y2hlcygpOworICAgIHZvaWQgZmluYWxpemVKSVRJbmxpbmVDYWNoZXMoKTsKICNlbmRpZgogI2lm
IEVOQUJMRShERkdfSklUKQogICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwpAQCAt
MTAxMCw3ICs5NzIsOSBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZVdhdGNocG9pbnRNYXAgbV9s
bGludEdldEJ5SWRXYXRjaHBvaW50TWFwOwogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7
CiAjaWYgRU5BQkxFKEpJVCkKK3B1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SklURGF0YT4g
bV9qaXREYXRhOworcHJpdmF0ZToKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8v
IFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRo
ZSBwcm9maWxlZCBjb2RlIGJsb2NrCkBAIC0xMDI5LDcgKzk5Myw3IEBAIHByaXZhdGU6CiAKICAg
ICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOwogICAgIAotICAgIEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAgQmFzZWxpbmVF
eGVjdXRpb25Db3VudGVyKiBtX2xsaW50RXhlY3V0ZUNvdW50ZXIgeyBudWxscHRyIH07CiAKICAg
ICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9qaXRFeGVjdXRlQ291bnRlcjsKICAgICB1aW50
MzJfdCBtX29zckV4aXRDb3VudGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw4ICsyNSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJhc2Vs
aW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJVbmxpbmtlZE1l
dGFkYXRhVGFibGVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDAsOSArNDIsNyBA
QCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZShjb25zCiAgICAgaWYgKG1fbWV0
YWRhdGEpIHsKICNkZWZpbmUgVklTSVQoX19vcCkgXAogICAgICAgICBtX21ldGFkYXRhLT5mb3JF
YWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgZnVuYyhtZXRhZGF0YS5tX3Byb2ZpbGUs
IGZhbHNlKTsgfSk7Ci0KICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVkFMVUVfUFJPRklM
RShWSVNJVCkKLQogI3VuZGVmIFZJU0lUCiAKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxP
cEl0ZXJhdG9yT3Blbj4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyAKQEAgLTU3LDcgKzU3LDYgQEAg
dm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgICAgICAgICAgZnVu
YyhtZXRhZGF0YS5tX3ZhbHVlUHJvZmlsZSwgZmFsc2UpOwogICAgICAgICB9KTsKICAgICB9ICAg
Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KQEAgLTk5LDQgKzk4LDM4IEBAIHZv
aWQgQ29kZUJsb2NrOjpmb3JFYWNoTExJbnRDYWxsTGlua0luZm8KICAgICB9CiB9CiAKKyNpZiBF
TkFCTEUoSklUKQorQUxXQVlTX0lOTElORSBjb25zdCBKSVRDb2RlTWFwJiBDb2RlQmxvY2s6Ompp
dENvZGVNYXAoKQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVK
SVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUu
Z2V0KCkpLT5tX2ppdENvZGVNYXA7Cit9CisKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxl
JiBDb2RlQmxvY2s6OmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQorewor
ICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N3aXRj
aEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisKK0FMV0FZU19JTkxJTkUgU3RyaW5nSnVtcFRh
YmxlJiBDb2RlQmxvY2s6OmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUlu
ZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkp
LT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Cit9CisjZW5kaWYKKworI2lm
IEVOQUJMRShERkdfSklUKQorQUxXQVlTX0lOTElORSBTaW1wbGVKdW1wVGFibGUmIENvZGVCbG9j
azo6ZGZnU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRU
eXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpK
SVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhd
OworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpkZmdTdHJp
bmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCit7CisgICAgQVNTRVJUKGppdFR5cGUo
KSA9PSBKSVRUeXBlOjpERkdKSVQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxERkc6OkpJVENv
ZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tF
ZGdlLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcw
LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlKiB3cmFw
KENvZGVCbG9jayogY29kZUJsb2NrKTsKICAgICAKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29k
ZUJsb2NrRWRnZSogd3JhcEFuZEFjdGl2YXRlKENvZGVCbG9jayogY29kZUJsb2NrKTsKKworICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2soKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSwgbV9jb2RlQmxvY2spOyB9CiAgICAgCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIu
Y3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhlY3V0aW9uQ291bnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCBi
b29sIEV4ZWN1dGlvbkNvdW50ZXI8Y291bnRpbmdWYXJpYW50Pjo6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2Nr
ID8gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSA6IG51bGxwdHIsIHRocmVzaG9sZCk7CisgICAg
dGhyZXNob2xkID0gY2xpcHBlZFRocmVzaG9sZCh0aHJlc2hvbGQpOwogICAgIAogICAgIG1fY291
bnRlciA9IHN0YXRpY19jYXN0PGludDMyX3Q+KC10aHJlc2hvbGQpOwogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIu
aAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGlvbkNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBmb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7IC8vIElmIHlvdSB1c2UgdGhp
cywgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoKSBtYXkgc3RpbGwgcmV0dXJuIGZhbHNl
LgogICAgIGJvb2wgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoQ29kZUJsb2NrKik7CiAg
ICAgYm9vbCBoYXNDcm9zc2VkVGhyZXNob2xkKCkgY29uc3QgeyByZXR1cm4gbV9jb3VudGVyID49
IDA7IH0KLSAgICB2b2lkIHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJs
b2NrKik7CisgICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVC
bG9jayogPSBudWxscHRyKTsKICAgICB2b2lkIGRlZmVySW5kZWZpbml0ZWx5KCk7CiAgICAgZG91
YmxlIGNvdW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291
bnQpICsgbV9jb3VudGVyOyB9CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CkBA
IC04NiwxMyArODYsOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci0gICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBUIHRocmVzaG9sZCkKKyAgICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKFQg
dGhyZXNob2xkKQogICAgIHsKLSAgICAgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQ7Ci0gICAgICAg
IGlmIChPcHRpb25zOjpyYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMo
KSAmJiBnbG9iYWxPYmplY3QpCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBnbG9iYWxPYmpl
Y3QtPndlYWtSYW5kb21JbnRlZ2VyKCkgJSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNo
ZWNrcG9pbnRzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1heFRocmVzaG9sZCA9IG1h
eGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMoKTsKKyAgICAgICAgaW50MzJf
dCBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
KCk7CiAgICAgICAgIGlmICh0aHJlc2hvbGQgPiBtYXhUaHJlc2hvbGQpCiAgICAgICAgICAgICB0
aHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7CiAgICAgICAgIHJldHVybiB0aHJlc2hvbGQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZE1ldGFkYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5o
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZE1ldGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgc3RydWN0IEdl
dEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB7CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9k
ZU1ldGFkYXRhVW5zZXQpID09IDEyKTsKIAogc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJh
eUxlbmd0aCB7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgsIGFy
cmF5UHJvZmlsZSk7IH0KICAgICBBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlOwogfTsKIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCkgPT0gMTIpOwpA
QCAtODgsNiArODksNyBAQCB1bmlvbiBHZXRCeUlkTW9kZU1ldGFkYXRhIHsKICAgICAgICAgR2V0
QnlJZE1vZGUgbW9kZTsKICAgICAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsg
Ly8gVGhpcyBtdXN0IGJlIHplcm8gd2hlbiB3ZSB1c2UgUHJvdG9Mb2FkIG1vZGUuCiAgICAgfTsK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihHZXRCeUlkTW9kZU1ldGFkYXRhLCBtb2RlKTsgfQogICAgIEdldEJ5SWRNb2RlTWV0YWRh
dGFEZWZhdWx0IGRlZmF1bHRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFVbnNldCB1bnNl
dE1vZGU7CiAgICAgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoIGFycmF5TGVuZ3RoTW9k
ZTsKQEAgLTExNyw2ICsxMTksNyBAQCBzdHJ1Y3QgR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAg
ICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFQcm90b0xvYWQgcHJvdG9Mb2FkTW9kZTsKICAgICB9Owog
ICAgIEdldEJ5SWRNb2RlIG1vZGU7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0K
ICAgICB1aW50OF90IGhpdENvdW50Rm9yTExJbnRDYWNoaW5nOwogfTsKICNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0
dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgR2V0QnlTdGF0dXMgR2V0
QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSQogICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoTm9J
bmZvcm1hdGlvbik7CiAgICAgICAgIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjog
ewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5tX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1
YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7CiAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5
KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSwgc3R1YkluZm8pOwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIg
PSBzdHViSW5mby0+aWRlbnRpZmllcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkocmV2aXNp
b24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldHRlclNldHRl
ckFjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogCiAgICAgLy8gTGV0J3Mgc3RvcmUg
dGhlIHJldXNlZCByZWdpc3RlcnMgdG8gdGhlIHN0YWNrLiBBZnRlciB0aGF0LCB3ZSBjYW4gdXNl
IGFsbG9jYXRlZCBzY3JhdGNoIHJlZ2lzdGVycy4KICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KLSAgICBhbGxvY2F0b3IucHJlc2Vy
dmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6
OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CisgICAgICAgIGFsbG9jYXRvci5wcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKIAogICAgIGlmIChHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKICAgICAgICAgZGF0YUxvZygiYmFzZUdQ
UiA9ICIsIGJhc2VHUFIsICJcbiIpOwpAQCAtMjI1LDEyICsyMjUsOSBAQCB2b2lkIEdldHRlclNl
dHRlckFjY2Vzc0Nhc2U6OmVtaXRET01KSVRHCiAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JD
Q2FsbC5zZXQocmVnKTsKICAgICBmb3IgKEZQUlJlZyByZWcgOiBmcFNjcmF0Y2gpCiAgICAgICAg
IHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQocmVnKTsKKyAgICBpZiAoaml0LmNvZGVCbG9j
aygpLT51c2VEYXRhSUMoKSkKKyAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChz
dHViSW5mby5tX3N0dWJJbmZvR1BSKTsKICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuZXhj
bHVkZShSZWdpc3RlclNldDo6cmVnaXN0ZXJzVG9Ob3RTYXZlRm9yQ0NhbGwoKSk7Ci0jaWYgQ1BV
KEFSTTY0KQotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOwotICAg
IGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQotICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9y
Q0NhbGwuc2V0KEFSTTY0UmVnaXN0ZXJzOjpscik7Ci0jZW5kaWYKIAogICAgIEFjY2Vzc0Nhc2VT
bmlwcGV0UGFyYW1zIHBhcmFtcyhzdGF0ZS5tX3ZtLCBXVEZNb3ZlKHJlZ3MpLCBXVEZNb3ZlKGdw
U2NyYXRjaCksIFdURk1vdmUoZnBTY3JhdGNoKSk7CiAgICAgc25pcHBldC0+Z2VuZXJhdG9yKCkt
PnJ1bihqaXQsIHBhcmFtcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5CeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luQnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5CeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsx
MzksNyBAQCBJbkJ5U3RhdHVzIEluQnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mCiAgICAgICAg
IHJldHVybiBJbkJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6
OkluQnlJZFNlbGY6IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKTsKICAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkK
ICAgICAgICAgICAgIHJldHVybiBJbkJ5U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5j
cHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTEgKzE3NiwxNiBAQCBBTFdB
WVNfSU5MSU5FIHN0YXRpYyBib29sIGxpbmtDb2RlSW5saW5lCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNz
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
IGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAgIC8vIFRoZXNlIGR5bmFtaWMg
c2xvdHMgZ2V0IGZpbGxlZCBpbiBieSBTdHJ1Y3R1cmVTdHViSW5mby4gTm90aGluZyBlbHNlIHRv
IGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnMgaml0
OwogICAgIAogICAgIEdQUlJlZyBiYXNlID0gc3R1YkluZm8uYmFzZUdQUjsKQEAgLTIzMywyMyAr
MjM4LDMxIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaGFzRnJlZVJlZ2lzdGUKICAgICBy
ZXR1cm4gZ2V0U2NyYXRjaFJlZ2lzdGVyKHN0dWJJbmZvKSAhPSBJbnZhbGlkR1BSUmVnOwogfQog
Ci1ib29sIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorYm9vbCBJbmxp
bmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwogfQog
Ci1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoIXN0dWJJ
bmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
QVNTRVJUKGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgb2Zmc2V0KSk7
CisgICAgQVNTRVJUKGNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0
dWJJbmZvLCBvZmZzZXQpKTsKKworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7Cisg
ICAgICAgIC8vIFRoZXNlIGR5bmFtaWMgc2xvdHMgZ2V0IGZpbGxlZCBpbiBieSBTdHJ1Y3R1cmVT
dHViSW5mby4gTm90aGluZyBlbHNlIHRvIGRvLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CiAKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCkBAIC0yNzksMjIgKzI5MiwyNSBAQCBib29sIElu
bGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJ
bmxpbmU7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFj
Y2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBKU0FycmF5KiBhcnJheSkKIHsKICAgICBBU1NFUlQoYXJy
YXktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0Nv
bnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVC
bG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKICAgICBpZiAoIWhhc0ZyZWVSZWdpc3RlcihzdHViSW5mbykpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhaGFzQW55QXJyYXlTdG9yYWdlKGFycmF5LT5pbmRl
eGluZ1R5cGUoKSkgJiYgYXJyYXktPmluZGV4aW5nVHlwZSgpICE9IEFycmF5Q2xhc3M7CiB9CiAK
LWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVB
cnJheUxlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICBBU1NFUlQoaXNDYWNoZWFibGVBcnJheUxlbmd0
aChzdHViSW5mbywgYXJyYXkpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgaXNDYWNo
ZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcnJheSkpOwogCiAgICAgaWYg
KCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTMxOSwxNyArMzM1LDIwIEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVu
Z3RoKFMKICAgICByZXR1cm4gbGlua2VkQ29kZUlubGluZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nl
c3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K2Jvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAgIGlmICghc3R1Yklu
Zm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBp
ZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiBoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pOwog
fQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3Ro
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0g
ICAgQVNTRVJUKGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKSk7CisgICAgQVNTRVJU
X1VOVVNFRChjb2RlQmxvY2ssIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1
YkluZm8pKTsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNjMsMTMgKzM4MiwxOCBAQCBib29sIElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoCiB9CiAKIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU2VsZkluQWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghc3R1YkluZm8u
aGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3Rz
IGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgR1BSUmVnIGJhc2UgPSBzdHViSW5m
by5iYXNlR1BSOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7
CiAKQEAgLTQwNiwxMyArNDMwLDEzIEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNK
dW1wSW5BY2MKICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewogICAgICAgICAvLyBJ
ZiBpdCBpcyBub3QgR2V0QnlJZC1saWtlLXRoaW5nLCB3ZSBkbyBub3QgZW1pdCBub3Agc2xlZCAo
ZS5nLiBHZXRCeVZhbCkuCiAgICAgICAgIC8vIFRoZSBjb2RlIGlzIGFscmVhZHkgYW4gaW5kaXJl
Y3QganVtcCwgYW5kIG9ubHkgdGhpbmcgd2Ugc2hvdWxkIGRvIGlzIHJlcGxhY2luZyBtX2NvZGVQ
dHIuCi0gICAgICAgIGlmIChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKKyAgICAg
ICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVFR5cGU6OkJhc2VsaW5lSklUICYmIHN0
dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikgewogICAgICAgICAgICAgLy8gSWYgbV9jb2Rl
UHRyIGlzIHBvaW50aW5nIHRvIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbiwgdGhpcyBt
ZWFucyB0aGF0IElubGluZUFjY2VzcyBjb2RlIGlzIG5vdCBhIHN0dWIgb25lLgogICAgICAgICAg
ICAgLy8gV2UgcmV3cml0ZSB0aGlzIHdpdGggdGhlIHN0dWItYmFzZWQgZGlzcGF0Y2hpbmcgY29k
ZSBvbmNlLCBhbmQgY29udGludWUgdXNpbmcgaXQgdW50aWwgd2UgcmVzZXQgdGhlIGNvZGUuCiAg
ICAgICAgICAgICBpZiAoc3R1YkluZm8ubV9jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0g
c3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpIHsKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5mby5zdGFy
dC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhl
bHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgICAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmc3R1YkluZm8pLCBzdHViSW5mby5t
X3N0dWJJbmZvR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLm1fc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5l
UHRyVGFnKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKICAg
ICAgICAgICAgICAgICAgICAgYXV0byBkb25lTG9jYXRpb24gPSBzdHViSW5mby5kb25lTG9jYXRp
b247CiAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0oTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewpAQCAtNDIxLDcgKzQ0NSw5IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2MKICAgICAgICAgICAgICAgICB9KSwgIklubGluZUFjY2VzczogbGlu
a2luZyBzdHViIGNhbGwiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHN0
dWJJbmZvLm1fY29kZVB0ciA9IHRhcmdldDsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUu
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCw4ICs0NjAsMTQgQEAgdm9pZCBJbmxp
bmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjYwogICAgIH0pLCAiSW5saW5lQWNjZXNzOiBs
aW5raW5nIGNvbnN0YW50IGp1bXAiKTsKIH0KIAotdm9pZCBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1
YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykK
K3ZvaWQgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogeworICAgIGlmIChjb2RlQmxv
Y2stPnVzZURhdGFJQygpICYmIGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSB7CisgICAgICAgIHN0dWJJbmZvLm1fY29kZVB0ciA9IHN0dWJJbmZvLnNsb3dQYXRo
U3RhcnRMb2NhdGlvbjsKKyAgICAgICAgc3R1YkluZm8ubV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlID0gMDsgLy8gQ2xlYXIgb3V0IHRoZSBpbmxpbmUgYWNjZXNzIGNvZGUuCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBDQ2FsbEhlbHBlcnM6OmVtaXRKSVRDb2RlT3ZlcihzdHViSW5m
by5zdGFydC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpLCBzY29wZWRMYW1iZGE8dm9pZChD
Q2FsbEhlbHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgIC8vIFdlIGRv
bid0IG5lZWQgYSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ugbm9ib2R5IHNob3VsZCBiZSBqdW1waW5n
IGludG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4KICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNz
LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTksMTQgKzk5LDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KHNpemUsIHNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhTdHJ1
Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMg
Ym9vbCBjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoU3RydWN0dXJlU3R1YkluZm8mLCBQ
cm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwotICAg
IHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mLCBK
U0FycmF5Kik7Ci0gICAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoU3RydWN0
dXJlU3R1YkluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKFN0cnVj
dHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZklu
QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIGJvb2wg
Z2VuZXJhdGVTdHJpbmdMZW5ndGgoU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgYm9v
bCBnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBjYW5HZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBQ
cm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKiwgUHJvcGVydHlP
ZmZzZXQpOworICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2Nr
KiwgU3RydWN0dXJlU3R1YkluZm8mLCBKU0FycmF5Kik7CisgICAgc3RhdGljIGJvb2wgaXNDYWNo
ZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBz
dGF0aWMgYm9vbCBnZW5lcmF0ZUFycmF5TGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZkluQWNjZXNzKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIGJv
b2wgZ2VuZXJhdGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsK
IAogICAgIHN0YXRpYyB2b2lkIHJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5l
QWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1w
SW5BY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0l0ZXJhdGlvbk1vZGVNZXRh
ZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIE9WRVJMT0FEX0JJVFdJU0Vf
T1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVMKIAogc3RydWN0IEl0ZXJhdGlvbk1vZGVNZXRhZGF0YSB7
CiAgICAgdWludDhfdCBzZWVuTW9kZXMgeyAwIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZlNlZW5Nb2RlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJdGVyYXRpb25Nb2RlTWV0
YWRhdGEsIHNlZW5Nb2Rlcyk7IH0gCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUo
c2Vlbk1vZGVzKSkgPT0gc2l6ZW9mKEl0ZXJhdGlvbk1vZGUpKTsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRD
YWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgQXJyYXlQcm9maWxlIG1fYXJyYXlQcm9maWxlOworICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTExJ
bnRDYWxsTGlua0luZm8sIG1fYXJyYXlQcm9maWxlKTsgfQogCiBwcml2YXRlOgogICAgIHVpbnRw
dHJfdCBtX2NhbGxlZU9yTGFzdFNlZW5DYWxsZWVXaXRoTGlua0JpdCB7IHVubGlua2VkQml0IH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lvbiAy
ODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMTcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBi
aXRXaWR0aEZvck1heAogICAgIG1hY3JvKE9wSXRlcmF0b3JPcGVuKSBcCiAgICAgbWFjcm8oT3BJ
dGVyYXRvck5leHQpIFwKIAorI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9CSU5BUllfQVJJ
VEhfUFJPRklMRShtYWNybykgXAorICAgIG1hY3JvKE9wQWRkKSBcCisgICAgbWFjcm8oT3BNdWwp
IFwKKyAgICBtYWNybyhPcERpdikgXAorICAgIG1hY3JvKE9wU3ViKSBcCisKKyNkZWZpbmUgRk9S
X0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShtYWNybykgXAorICAgIG1hY3Jv
KE9wSW5jKSBcCisgICAgbWFjcm8oT3BEZWMpIFwKKyAgICBtYWNybyhPcE5lZ2F0ZSkgXAorCiAK
IElHTk9SRV9XQVJOSU5HU19CRUdJTigidHlwZS1saW1pdHMiKQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OnN1Y2NlZWQoKQogewogICAgIHJlc3RvcmVTY3JhdGNoKCk7CiAg
ICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQotICAgICAgICBqaXQtPnJldCgp
OworICAgICAgICBqaXQtPmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvLT5t
X3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZEb25lTG9jYXRpb24oKSks
IEpTSW50ZXJuYWxQdHJUYWcpOwogICAgIGVsc2UKICAgICAgICAgc3VjY2Vzcy5hcHBlbmQoaml0
LT5qdW1wKCkpOwogfQpAQCAtMTEwLDYgKzExMCw4IEBAIGNvbnN0IFJlZ2lzdGVyU2V0JiBBY2Nl
c3NHZW5lcmF0aW9uU3RhdGUKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChqaXQtPmNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKIAogICAgICAgICBt
X2xpdmVSZWdpc3RlcnNGb3JDYWxsID0gUmVnaXN0ZXJTZXQobV9saXZlUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZSwgYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJz
KCkpOworICAgICAgICBpZiAoaml0LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAg
ICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7
CiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhjbHVkZShjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOwogICAgIH0KICAgICByZXR1cm4gbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbDsKQEAgLTEy
OCwxMSArMTMwLDEyIEBAIGF1dG8gQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2ZUxpdmUK
ICAgICB9OwogfQogCi1hdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2VydmVMaXZlUmVn
aXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucyhjb25zdCBSZWdpc3RlclNldCYg
ZXh0cmEpIC0+IFNwaWxsU3RhdGUKK2F1dG8gQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpwcmVzZXJ2
ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCkgLT4gU3BpbGxT
dGF0ZQogewogICAgIFJlZ2lzdGVyU2V0IGxpdmVSZWdpc3RlcnMgPSBhbGxvY2F0b3ItPnVzZWRS
ZWdpc3RlcnMoKTsKKyAgICBpZiAoaml0LT5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAg
ICAgIGxpdmVSZWdpc3RlcnMuYWRkKHN0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKICAgICBsaXZl
UmVnaXN0ZXJzLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICBsaXZlUmVnaXN0
ZXJzLm1lcmdlKGV4dHJhKTsKIAogICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBleHRyYVN0YWNrUGFk
ZGluZyA9IDA7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZTdGFja0J5dGVzVXNlZEZvclJlZ2lzdGVy
UHJlc2VydmF0aW9uID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsKCpqaXQsIGxpdmVSZWdpc3RlcnMsIGV4dHJhU3RhY2tQYWRkaW5nKTsK
QEAgLTU5NiwxNiArNTk5LDExIEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNB
Y2Nlc3MKICAgICBDQ2FsbEhlbHBlcnMgaml0KGNvZGVCbG9jayk7CiAgICAgc3RhdGUuaml0ID0g
JmppdDsKIAotICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7Ci0gICAgICAgIGlmIChz
dGF0ZS5tX2RvZXNKU0dldHRlclNldHRlckNhbGxzKSB7Ci0gICAgICAgICAgICAvLyBXZSBoYXZl
IG5vIGd1YXJhbnRlZSB0aGF0IHN0YWNrLXBvaW50ZXIgaXMgdGhlIGV4cGVjdGVkIG9uZS4gVGhp
cyBpcyBub3QgYSBwcm9ibGVtIGlmIHdlIGRvIG5vdCBoYXZlIEpTIGdldHRlciAvIHNldHRlciBj
YWxscyBzaW5jZSBzdGFjay1wb2ludGVyIGlzCi0gICAgICAgICAgICAvLyBhIGNhbGxlZS1zYXZl
IHJlZ2lzdGVyIGluIHRoZSBDIGNhbGxpbmcgY29udmVuc2lvbi4gSG93ZXZlciwgb3VyIEpTIGV4
ZWN1dGFibGUgY2FsbCBkb2VzIG5vdCBzYXZlIHN0YWNrLXBvaW50ZXIuIFNvIHdlIGFyZSBhZGp1
c3Rpbmcgc3RhY2stcG9pbnRlciBhZnRlcgotICAgICAgICAgICAgLy8gSlMgZ2V0dGVyIC8gc2V0
dGVyIGNhbGxzLiBCdXQgdGhpcyBjb3VsZCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5pdGlhbCBz
dGFjay1wb2ludGVyLCBhbmQgbWFrZXMgUEFDIHRhZ2dpbmcgYnJva2VuLgotICAgICAgICAgICAg
Ly8gVG8gZW5zdXJlIFBBQy10YWdnaW5nIHdvcmssIHdlIGZpcnN0IGFkanVzdCBzdGFjay1wb2lu
dGVyIHRvIHRoZSBhcHByb3ByaWF0ZSBvbmUuCi0gICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OworICAgIGlmICghY2FuQmVTaGFyZWQgJiYgQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRl
ck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBqaXQuc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICBhdXRvIG9rID0gaml0LmJyYW5jaFB0
cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBqaXQuc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAg
ICAgICBvay5saW5rKCZqaXQpOwogICAgIH0KIAogICAgIHN0YXRlLnByZXNlcnZlZFJldXNlZFJl
Z2lzdGVyU3RhdGUgPQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlt
b3JwaGljQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTEsNyArMjUxLDcgQEAgc3RydWN0IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSB7CiAgICAgY29u
c3QgUmVnaXN0ZXJTZXQmIGNhbGN1bGF0ZUxpdmVSZWdpc3RlcnNGb3JDYWxsQW5kRXhjZXB0aW9u
SGFuZGxpbmcoKTsKIAogICAgIFNwaWxsU3RhdGUgcHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFj
a0ZvckNhbGwoY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhID0geyB9KTsKLSAgICBTcGlsbFN0YXRl
IHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29u
c3QgUmVnaXN0ZXJTZXQmIGV4dHJhID0geyB9KTsKKyAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2
ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoKTsKIAogICAgIHZvaWQg
cmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsV2l0aFRocm93bkV4Y2VwdGlvbihj
b25zdCBTcGlsbFN0YXRlJik7CiAgICAgdm9pZCByZXN0b3JlTGl2ZVJlZ2lzdGVyc0Zyb21TdGFj
a0ZvckNhbGwoY29uc3QgU3BpbGxTdGF0ZSYsIGNvbnN0IFJlZ2lzdGVyU2V0JiBkb250UmVzdG9y
ZSA9IHsgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0
dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eVN0YXR1cy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeVN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCwxMCArMTgwLDEw
IEBAIFB1dEJ5U3RhdHVzIFB1dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKICAg
ICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHVpZCk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9Ci0g
ICAgICAgICAgICBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkodWlkKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShwcm9maWxlZEJsb2NrLT52bSgpKTsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkKTsK
ICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQ
dXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3R1YkluZm8tPm1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVy
biBQdXRCeVZhcmlhbnQ6OnJlcGxhY2UoV1RGTW92ZShpZGVudGlmaWVyKSwgc3RydWN0dXJlLCBv
ZmZzZXQpOwogICAgICAgICByZXR1cm4gUHV0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1t
YXJ5KSwgKnN0dWJJbmZvKTsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKIAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJQb2x5
bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKIApAQCAtNjUsOSArNjYsOSBA
QCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0R2V0QnlJZFNlbGYoCiAgICAgQVNTRVJUKGhh
c0NvbnN0YW50SWRlbnRpZmllcik7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBl
OjpHZXRCeUlkU2VsZik7CiAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBtX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuc2V0V2l0aG91dFdyaXRlQmFycmllcihpbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlKTsKKyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSBpbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5pZCgpOwogICAgIGNvZGVCbG9jay0+dm0oKS5oZWFwLndy
aXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIHUuYnlJZFNlbGYub2Zmc2V0ID0gb2Zmc2V0Owor
ICAgIGJ5SWRTZWxmT2Zmc2V0ID0gb2Zmc2V0OwogfQogCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZv
Ojppbml0QXJyYXlMZW5ndGgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyKQpA
QCAtODcsOSArODgsOSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0UHV0QnlJZFJlcGxh
CiAgICAgQVNTRVJUKG1fY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQpOwogICAgIHNldENh
Y2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2UpOwogICAgIG1faWRlbnRp
ZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxp
bmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsK
ICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1
LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsK
IH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEluQnlJZFNlbGYoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyQmFzZSYgbG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
KiBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTk3LDkgKzk4LDkgQEAgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6aW5pdEluQnlJZFNlbGYoYwogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBD
YWNoZVR5cGU6OlVuc2V0KTsKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6Oklu
QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBi
eUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVy
ZWYoKQpAQCAtMjM2LDcgKzIzNyw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgU3RydWN0dXJl
U3R1YkluZm8KICAgICAgICAgLy8gd2UncmUgYnVmZmVyZWQgaXMgYmVjYXVzZSB3ZSByZWx5IG9u
IGl0IHRvIHJlc2V0IGR1cmluZyBHQyBpZiBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUKICAg
ICAgICAgLy8gaXMgY29sbGVjdGVkLgogICAgICAgICBtX2lkZW50aWZpZXIgPSBudWxscHRyOwot
ICAgICAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdl
IGdlbmVyYXRlZCBzb21lIGNvZGUgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGF0dGVtcHQgdG8gcmVw
YXRjaCBpbiB0aGUgZnV0dXJlIHVudGlsIHdlCiAgICAgICAgIC8vIGdhdGhlciBlbm91Z2ggY2Fz
ZXMuCkBAIC0yNTEsNyArMjUyLDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29u
c3QgQ29uYwogewogICAgIGNsZWFyQnVmZmVyZWRTdHJ1Y3R1cmVzKCk7CiAgICAgbV9pZGVudGlm
aWVyID0gbnVsbHB0cjsKLSAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuY2xlYXIoKTsK
KyAgICBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgPSAwOwogCiAgICAgaWYgKG1fY2FjaGVU
eXBlID09IENhY2hlVHlwZTo6VW5zZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTI4NSw2ICsyODYs
NyBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChjb25zdCBDb25jCiAgICAgICAgIHJl
c2V0UHV0QnkoY29kZUJsb2NrLCAqdGhpcywgUHV0QnlLaW5kOjpCeUlkKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OlB1dFByaXZhdGVOYW1lOgogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1
dEJ5S2luZDo6QnlWYWwpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjY2Vzc1R5cGU6Oklu
QnlJZDoKQEAgLTM2MCw4ICszNjIsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdl
YWtSZWZlcmVuCiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKLSAgICBpZiAobV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQotICAgICAgICBpc1ZhbGlkICY9IHZtLmhlYXAuaXNN
YXJrZWQobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpKTsKKyAgICBpZiAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZtKSkKKyAgICAgICAg
aXNWYWxpZCAmPSB2bS5oZWFwLmlzTWFya2VkKHN0cnVjdHVyZSk7CiAgICAgaWYgKG1fY2FjaGVU
eXBlID09IENhY2hlVHlwZTo6U3R1YikKICAgICAgICAgaXNWYWxpZCAmPSB1LnN0dWItPnZpc2l0
V2Vhayh2bSk7CiAKQEAgLTM3NSw4ICszNzcsOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjp2
aXNpdFdlYWtSZWZlcmVuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgogdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoVmlzaXRvciYgdmlzaXRvcikKIHsKLSAg
ICBpZiAobV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKQotICAgICAgICBtX2lubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUtPm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIGlmIChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodmlzaXRvci52bSgpKSkKKyAg
ICAgICAgc3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIAogICAgIGlmIChtX2NhY2hl
VHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIHUuc3R1Yi0+cHJvcGFnYXRlVHJhbnNp
dGlvbnModmlzaXRvcik7CkBAIC00MzAsNiArNDMyLDIwOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OnNlCiAgICAgbV9jYWNoZVR5cGUgPSBuZXdDYWNoZVR5cGU7CiB9
CiAKK3ZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtl
ZFN0dWJJbmZvKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgYWNjZXNzVHlwZSA9IHVubGlu
a2VkU3R1YkluZm8uYWNjZXNzVHlwZTsKKyAgICBzdGFydCA9IHVubGlua2VkU3R1YkluZm8uc3Rh
cnQ7CisgICAgZG9uZUxvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5kb25lTG9jYXRpb247Cisg
ICAgc2xvd1BhdGhTdGFydExvY2F0aW9uID0gdW5saW5rZWRTdHViSW5mby5zbG93UGF0aFN0YXJ0
TG9jYXRpb247CisgICAgY2FsbFNpdGVJbmRleCA9IENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eCh1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKTsKKyAgICBjb2RlT3Jp
Z2luID0gQ29kZU9yaWdpbih1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIG1f
Y29kZVB0ciA9IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKKworICAgIHVzZWRSZWdpc3RlcnMgPSBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgaWYgKGFjY2Vzc1R5
cGUgPT0gQWNjZXNzVHlwZTo6R2V0QnlJZCAmJiB1bmxpbmtlZFN0dWJJbmZvLmJ5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpKSB7CisgICAgICAgIC8vIEZvciBpdGVyYXRvcl9uZXh0LCB3ZSBjYW4n
dCBjbG9iYmVyIHRoZSAiZG9udENsb2JiZXJSZWdpc3RlciIgcmVnaXN0ZXIgZWl0aGVyLgorICAg
ICAgICB1c2VkUmVnaXN0ZXJzLmFkZChCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9i
YmVyUmVnaXN0ZXIpOworICAgIH0KKworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNh
c2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkdldEJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0
QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGlt
aXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1l
OiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJh
bmQ6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1l
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoK
KyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5l
Y21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1p
emU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Cisg
ICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAg
ICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZp
bmU6CisgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5l
UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6CisgICAgICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHVubGlua2VkU3R1YkluZm8u
cHV0S2luZCkgeworICAgICAgICBjYXNlIFB1dEtpbmQ6Ok5vdERpcmVjdDoKKyAgICAgICAgICAg
IGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8u
ZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gdW5saW5rZWRTdHViSW5mby5wcml2YXRlRmllbGRQdXRLaW5k
LmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXpl
IDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ6CisgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgorICAgICAgICBt
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxl
dGVCeUlEOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICBi
YXNlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnBy
b3BlcnR5R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZURl
bEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
RGVsQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6R2V0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZToK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVl
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJ
bmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBm
YWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFs
dWU7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgICAgIHJlZ3MucHJvdG90eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjpwcm90bzsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
SW5CeVZhbDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lOiAKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZDogCisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRp
ZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5C
eUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdz
LnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5
SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpU
cnlHZXRCeUlkOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDoKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkdldEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRy
dWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRoVGhpczoKKyAgICAgICAgaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhU
aGlzUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEJhc2VsaW5l
R2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9H
UFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJl
ZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgICAg
ICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIg
PSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJh
c2U7CisgICAgICAgIHJlZ3MucHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJz
Ojp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgICAgICBpZiAoYWNjZXNzVHlwZSA9PSBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCkKKyAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6cHJvZmlsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpT
ZXRQcml2YXRlQnJhbmQ6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoK
KyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIHZhbHVlR1BS
ID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLmJyYW5kR1BSID0gQmFzZWxpbmVQcml2YXRl
QnJhbmRSZWdpc3RlcnM6OmJyYW5kOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICB9Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTSh1bmxpbmtlZFN0dWJJbmZvKTsKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OmNoZWNrQ29uc2lzdGVuY3koKQogewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSklUU3R1YlJv
dXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wdGlvbnMu
aCIKKyNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKQEAgLTU2LDYgKzU3
LDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90IHsKICAgICBHZXRCeVZhbCwKICAg
ICBQdXRCeUlkLAogICAgIFB1dEJ5VmFsLAorICAgIFB1dFByaXZhdGVOYW1lLAogICAgIEluQnlJ
ZCwKICAgICBJbkJ5VmFsLAogICAgIEhhc1ByaXZhdGVOYW1lLApAQCAtNzgsNiArODAsOCBAQCBl
bnVtIGNsYXNzIENhY2hlVHlwZSA6IGludDhfdCB7CiAgICAgU3RyaW5nTGVuZ3RoCiB9OwogCitz
dHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbzsKKwogY2xhc3MgU3RydWN0dXJlU3R1Yklu
Zm8gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cnVjdHVyZVN0dWJJbmZvKTsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTk4LDYgKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKKyAgICB2b2lkIGluaXRpYWxp
emVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhDb2RlQmxvY2sqLCBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvJik7CisKICAgICBERUNMQVJFX1ZJU0lUX0FHR1JFR0FURTsKIAogICAgIC8v
IENoZWNrIGlmIHRoZSBzdHViIGhhcyB3ZWFrIHJlZmVyZW5jZXMgdGhhdCBhcmUgZGVhZC4gSWYg
aXQgZG9lcywgdGhlbiBpdCByZXNldHMgaXRzZWxmLApAQCAtMzI1LDEzICszMzEsMTkgQEAgcHJp
dmF0ZToKIAogcHVibGljOgogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKKyAgICBQcm9wZXJ0
eU9mZnNldCBieUlkU2VsZk9mZnNldDsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQnlJ
ZFNlbGZPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8s
IGJ5SWRTZWxmT2Zmc2V0KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0
dWJJbmZvLCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOyB9CiAgICAgdW5pb24gewotICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgICAg
ICB9IGJ5SWRTZWxmOwogICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcyogc3R1YjsKICAgICB9IHU7
Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
OworICAgIFN0cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZShWTSYgdm0pCisgICAg
eworICAgICAgICBpZiAoIW1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gdm0uZ2V0U3RydWN0dXJlKG1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgfQorICAgIFN0cnVjdHVyZUlEIG1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSB7IDAgfTsKIHByaXZhdGU6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
ciBtX2lkZW50aWZpZXI7CiAgICAgLy8gUmVwcmVzZW50cyB0aG9zZSBzdHJ1Y3R1cmVzIHRoYXQg
YWxyZWFkeSBoYXZlIGJ1ZmZlcmVkIEFjY2Vzc0Nhc2VzIGluIHRoZSBQb2x5bW9ycGhpY0FjY2Vz
cy4KQEAgLTM1Miw2ICszNjQsNyBAQCBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBtX2NvZGVQdHI7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQ29kZVB0cigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHVi
SW5mbywgbV9jb2RlUHRyKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEb25lTG9j
YXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIGRvbmVM
b2NhdGlvbik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2xvd1BhdGhTdGFydExv
Y2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBzbG93
UGF0aFN0YXJ0TG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1f
c2xvd09wZXJhdGlvbik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ291bnRkb3du
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBjb3VudGRvd24p
OyB9CkBAIC00NDcsNiArNDYwLDE3IEBAIGlubGluZSBhdXRvIGFwcHJvcHJpYXRlR2VuZXJpY0dl
dEJ5SWRGdW4KICAgICB9CiB9CiAKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsK
KyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgUHV0S2luZCBwdXRLaW5kOworICAgIFBy
aXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZCB7IFByaXZhdGVGaWVsZFB1dEtp
bmQ6Om5vbmUoKSB9OworICAgIEVDTUFNb2RlIGVjbWFNb2RlIHsgRUNNQU1vZGU6OnNsb3BweSgp
IH07CisgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OworICAgIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiBzdGFydDsgLy8gVGhpcyBpcyBlaXRoZXIgdGhlIHN0
YXJ0IG9mIHRoZSBpbmxpbmUgSUMgZm9yICpieUlkIGNhY2hlcy4gb3IgdGhlIGxvY2F0aW9uIG9m
IHBhdGNoYWJsZSBqdW1wIGZvciAnaW5zdGFuY2VvZicgY2FjaGVzLgorICAgIENvZGVMb2NhdGlv
bkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xvd1BhdGhTdGFydExvY2F0aW9uOworfTsKKwog
I2Vsc2UKIAogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBwcmludFN1cGVyU2FtcGxlclN0YXRlKCkK
ICAgICBkb3VibGUgcGVyY2VudGFnZSA9IDEwMC4wICogaW4gLyAoaW4gKyBvdXQpOwogICAgIGlm
IChwZXJjZW50YWdlICE9IHBlcmNlbnRhZ2UpCiAgICAgICAgIHBlcmNlbnRhZ2UgPSAwLjA7Ci0g
ICAgZGF0YUxvZygiUGVyY2VudCB0aW1lIGJlaGluZCBzdXBlciBzYW1wbGVyIGZsYWc6ICIsIHBl
cmNlbnRhZ2UsICJcbiIpOworICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIg
c2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiJVxuIik7CiB9CiAKIHZvaWQgZW5hYmxlU3Vw
ZXJTYW1wbGVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKIAor
I2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNsYXNz
SW5mby5oIgpAQCAtNzgsNiArNzksOCBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2Rl
QmxvY2soVk0mCiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkobG9ja2VyKTsKICAg
ICAgICAgbV9yYXJlRGF0YS0+bV9wcml2YXRlQnJhbmRSZXF1aXJlbWVudCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihQcml2YXRlQnJhbmRSZXF1aXJlbWVudDo6TmVlZGVkKTsKICAgICB9CisKKyAg
ICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChP
cHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFZpc2l0b3I+CkBAIC0zMTYsNiArMzE5LDQ4IEBAIGludCBVbmxpbmtlZENvZGVCbG9j
azo6b3V0T2ZMaW5lSnVtcE9mZnMKICAgICByZXR1cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5n
ZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKK2Jvb2wgVW5saW5r
ZWRDb2RlQmxvY2s6Omhhc0lkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAg
ICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpID4gMTAwKSB7CisgICAgICAgIGlmIChudW1iZXJP
ZklkZW50aWZpZXJzKCkgIT0gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5zaXplKCkpIHsKKyAgICAg
ICAgICAgIExvY2tlciBsb2NrZXIobV9jYWNoZWRJZGVudGlmaWVyVWlkc0xvY2spOworICAgICAg
ICAgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IGNhY2hlZElkZW50aWZpZXJVaWRzOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciA9
IHRoaXMtPmlkZW50aWZpZXIoaSk7CisgICAgICAgICAgICAgICAgY2FjaGVkSWRlbnRpZmllclVp
ZHMuYWRkKGlkZW50aWZpZXIuaW1wbCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgIG1fY2FjaGVkSWRlbnRpZmllclVp
ZHMgPSBXVEZNb3ZlKGNhY2hlZElkZW50aWZpZXJVaWRzKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBtX2NhY2hlZElkZW50aWZpZXJVaWRzLmNvbnRhaW5zKHVpZCk7CisgICAgfQorCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKSB7
CisgICAgICAgIGlmIChpZGVudGlmaWVyKGkpLmltcGwoKSA9PSB1aWQpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK2ludDMy
X3QgVW5saW5rZWRDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkK
K3sKKyAgICBzd2l0Y2ggKGRpZE9wdGltaXplKCkpIHsKKyAgICBjYXNlIFRyaVN0YXRlOjpJbmRl
dGVybWluYXRlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkOworICAgIGNhc2UgVHJpU3RhdGU6
OkZhbHNlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkICogNDsKKyAgICBjYXNlIFRyaVN0YXRl
OjpUcnVlOgorICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8gMjsKKyAgICB9CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRocmVzaG9sZDsKK30KKworCiB2b2lkIFVubGlu
a2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByb2ZpbGVzKCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCghbV9tZXRhZGF0YS0+aXNGaW5hbGl6ZWQoKSk7CkBAIC0zMzcsMTUgKzM4MiwyNSBAQCB2
b2lkIFVubGlua2VkQ29kZUJsb2NrOjphbGxvY2F0ZVNoYXJlZFByCiAgICAgaWYgKG1fbWV0YWRh
dGEtPmhhc01ldGFkYXRhKCkpIHsKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheVByb2Zp
bGVzID0gMDsKIAotI2RlZmluZSBDT1VOVChfX29wKSBcCi0gICAgICAgIG51bWJlck9mQXJyYXlQ
cm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CisjZGVmaW5lIENPVU5U
KF9fb3ApIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9f
b3A+KCk7CiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoQ09VTlQp
CiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0xMSU5UX0NBTExfTElOS19JTkZPKENPVU5U
KQogI3VuZGVmIENPVU5UCiAgICAgICAgIG51bWJlck9mQXJyYXlQcm9maWxlcyArPSBtX21ldGFk
YXRhLT5udW1FbnRyaWVzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgICAgICBudW1iZXJPZkFycmF5
UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEdldEJ5SWQ+KCk7Ci0KICAgICAg
ICAgbV9hcnJheVByb2ZpbGVzID0gRml4ZWRWZWN0b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+KG51
bWJlck9mQXJyYXlQcm9maWxlcyk7CisKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZCaW5hcnlB
cml0aFByb2ZpbGVzID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkgbnVtYmVyT2ZCaW5hcnlBcml0
aFByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgRk9S
X0VBQ0hfT1BDT0RFX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoQ09VTlQpCisjdW5kZWYgQ09V
TlQKKyAgICAgICAgbV9iaW5hcnlBcml0aFByb2ZpbGVzID0gRml4ZWRWZWN0b3I8QmluYXJ5QXJp
dGhQcm9maWxlPihudW1iZXJPZkJpbmFyeUFyaXRoUHJvZmlsZXMpOworCisgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzID0gMDsKKyNkZWZpbmUgQ09VTlQoX19vcCkg
bnVtYmVyT2ZVbmFyeUFyaXRoUHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29w
PigpOworICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKENP
VU5UKQorI3VuZGVmIENPVU5UCisgICAgICAgIG1fdW5hcnlBcml0aFByb2ZpbGVzID0gRml4ZWRW
ZWN0b3I8VW5hcnlBcml0aFByb2ZpbGU+KG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
MTAgKzI1LDEyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgi
CiAjaW5jbHVkZSAiQXJyYXlQcm9maWxlLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDb252ZW50aW9u
cy5oIgogI2luY2x1ZGUgIkNvZGVUeXBlLmgiCiAjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIK
KyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdl
SW5mby5oIgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5o
IgpAQCAtNjQsNiArNjYsNyBAQCBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKIGNsYXNzIFVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazsK
IGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOworY2xhc3MgQmFzZWxpbmVKSVRDb2Rl
Owogc3RydWN0IEV4ZWN1dGFibGVJbmZvOwogZW51bSBjbGFzcyBMaW5rVGltZUNvbnN0YW50IDog
aW50MzJfdDsKIApAQCAtMTc1LDYgKzE3OCw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZpeGVk
VmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1
cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3du
PiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgeyBy
ZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5n
ZXQoKTsgfQogICAgIGNvbnN0IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4m
IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKQEAgLTIwNyw2ICsyMTEsMTUgQEAgcHVibGlj
OgogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1vZGUpOyB9CiAKICAgICBjb25z
dCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3Q7CisgICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uQXQoQnl0ZWNvZGVJbmRleCBpbmRleCkgY29uc3QgeyByZXR1
cm4gaW5zdHJ1Y3Rpb25zKCkuYXQoaW5kZXgpLnB0cigpOyB9CisgICAgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAg
Y29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5hdCgwKS5wdHIo
KTsKKyAgICAgICAgY29uc3QgYXV0byogaW5zdHJ1Y3Rpb25zRW5kID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbnN0cnVj
dGlvbnNCZWdpbikgKyBpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChpbnN0cnVjdGlvbiA+PSBpbnN0cnVjdGlvbnNCZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGlu
c3RydWN0aW9uc0VuZCk7CisgICAgICAgIHJldHVybiBpbnN0cnVjdGlvbiAtIGluc3RydWN0aW9u
c0JlZ2luOworICAgIH0KKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbnNTaXplKCkgY29uc3QgeyBy
ZXR1cm4gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1DYWxsZWVM
b2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQogICAgIHVuc2lnbmVk
IG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX251bVZhcnM7IH0KQEAgLTMzNCwxMCArMzQ3LDIx
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbWV0YWRhdGEtPnNpemVJbkJ5dGVzKCk7CiAg
ICAgfQogCisgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bigpCisgICAgeworICAgICAgICAvLyBTb21lIGJ1aWx0aW5zIGFyZSByZXF1aXJlZCB0byBhbHdh
eXMgY29tcGxldGUgdGhlIGxvb3BzIHRoZXkgcnVuLgorICAgICAgICByZXR1cm4gIWlzQnVpbHRp
bkZ1bmN0aW9uKCk7CisgICAgfQogICAgIHZvaWQgYWxsb2NhdGVTaGFyZWRQcm9maWxlcygpOwog
ICAgIFVubGlua2VkVmFsdWVQcm9maWxlJiB1bmxpbmtlZFZhbHVlUHJvZmlsZSh1bnNpZ25lZCBp
bmRleCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVzW2luZGV4XTsgfQogICAgIFVubGlua2VkQXJy
YXlQcm9maWxlJiB1bmxpbmtlZEFycmF5UHJvZmlsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4g
bV9hcnJheVByb2ZpbGVzW2luZGV4XTsgfQogCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29s
IGhhc0lkZW50aWZpZXIoVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyNlbmRpZgorCisgICAgaW50MzJf
dCB0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpOworCiBwcm90ZWN0ZWQ6CiAgICAg
VW5saW5rZWRDb2RlQmxvY2soVk0mLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0
YWJsZUluZm8mLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPik7CiAKQEAgLTM5Nyw2ICs0
MjEsOSBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGV4aWNhbFNjb3BlRmVhdHVyZXMgOiA0
OwogcHVibGljOgogICAgIENvbmN1cnJlbnRKU0xvY2sgbV9sb2NrOworI2lmIEVOQUJMRShKSVQp
CisgICAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gbV91bmxpbmtlZEJhc2VsaW5lQ29kZTsKKyNl
bmRpZgogcHJpdmF0ZToKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlcyB7IDAgfTsKICAgICBT
b3VyY2VQYXJzZU1vZGUgbV9wYXJzZU1vZGU7CkBAIC00MTMsNyArNDQwLDYgQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3M7
CiAKLQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIERGRzo6RXhpdFByb2ZpbGUgbV9leGl0UHJv
ZmlsZTsKICNlbmRpZgpAQCAtNDU4LDYgKzQ4NCwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CiAgICAg
fQorICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBwYykKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gdGhpcy0+Ynl0ZWNvZGVPZmZz
ZXQocGMpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChieXRlY29kZU9mZnNl
dCk7CisgICAgfQorCisgICAgQmluYXJ5QXJpdGhQcm9maWxlJiBiaW5hcnlBcml0aFByb2ZpbGUo
dW5zaWduZWQgaSkgeyByZXR1cm4gbV9iaW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisgICAgVW5h
cnlBcml0aFByb2ZpbGUmIHVuYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1f
dW5hcnlBcml0aFByb2ZpbGVzW2ldOyB9CisKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIm
IGxsaW50RXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7IH0K
IAogcHJpdmF0ZToKICAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PjsKQEAgLTQ2NSw4ICs1MDEsMTYgQEAgcHJpdmF0
ZToKICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBtX291dE9mTGluZUp1bXBUYXJnZXRzOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICBGaXhlZFZlY3RvcjxF
eHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIEJhc2VsaW5lRXhlY3V0
aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5r
ZWRWYWx1ZVByb2ZpbGU+IG1fdmFsdWVQcm9maWxlczsKICAgICBGaXhlZFZlY3RvcjxVbmxpbmtl
ZEFycmF5UHJvZmlsZT4gbV9hcnJheVByb2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPEJpbmFyeUFy
aXRoUHJvZmlsZT4gbV9iaW5hcnlBcml0aFByb2ZpbGVzOworICAgIEZpeGVkVmVjdG9yPFVuYXJ5
QXJpdGhQcm9maWxlPiBtX3VuYXJ5QXJpdGhQcm9maWxlczsKKworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgTG9jayBtX2NhY2hlZElkZW50aWZpZXJVaWRzTG9jazsKKyAgICBIYXNoU2V0PFVuaXF1
ZWRTdHJpbmdJbXBsKj4gbV9jYWNoZWRJZGVudGlmaWVyVWlkczsKKyNlbmRpZgogCiBwcm90ZWN0
ZWQ6CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1ldGFkYXRhVGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZE1l
dGFkYXRhVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTUgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmxpbmtlZE1ldGFkYXRhVGFibGUpOwogICAg
IH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGU+CisgICAgdWludHB0cl90IG9mZnNl
dEluTWV0YWRhdGFUYWJsZShjb25zdCBPcGNvZGUmIG9wY29kZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX2lzRmluYWxpemVkKTsKKyAgICAgICAgdWludHB0cl90IGJhc2VUeXBlT2Zmc2V0ID0g
bV9pczMyQml0ID8gb2Zmc2V0VGFibGUzMigpW09wY29kZTo6b3Bjb2RlSURdIDogb2Zmc2V0VGFi
bGUxNigpW09wY29kZTo6b3Bjb2RlSURdOworICAgICAgICBiYXNlVHlwZU9mZnNldCA9IHJvdW5k
VXBUb011bHRpcGxlT2YoYWxpZ25vZih0eXBlbmFtZSBPcGNvZGU6Ok1ldGFkYXRhKSwgYmFzZVR5
cGVPZmZzZXQpOworICAgICAgICByZXR1cm4gYmFzZVR5cGVPZmZzZXQgKyBzaXplb2YodHlwZW5h
bWUgT3Bjb2RlOjpNZXRhZGF0YSkgKiBvcGNvZGUubV9tZXRhZGF0YUlEOworICAgIH0KKwogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KICAgICB1bnNpZ25lZCBudW1FbnRyaWVzKCk7
CiAKQEAgLTEwNyw2ICsxMTYsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc19vZmZzZXQx
NlRhYmxlU2l6ZTsKICAgICB9CiAKKwogICAgIHVzaW5nIE9mZnNldDMyID0gdWludDMyX3Q7CiAg
ICAgdXNpbmcgT2Zmc2V0MTYgPSB1aW50MTZfdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSwxMyArNDUsMTEgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogCiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHNB
cmd1bWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mU3BlY0ZhaWxC
dWNrZXRzID0gMTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJ1Y2tldEluZGV4TWFz
ayA9IG51bWJlck9mQnVja2V0cyAtIDE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB0
b3RhbE51bWJlck9mQnVja2V0cyA9IG51bWJlck9mQnVja2V0cyArIG51bWJlck9mU3BlY0ZhaWxC
dWNrZXRzOwogICAgIAogICAgIFZhbHVlUHJvZmlsZUJhc2UoKQogICAgIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCi0gICAgICAg
ICAgICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAg
Y2xlYXJCdWNrZXRzKCk7CiAgICAgfQogICAgIAogICAgIEVuY29kZWRKU1ZhbHVlKiBzcGVjRmFp
bEJ1Y2tldCh1bnNpZ25lZCBpKQpAQCAtNTksNiArNTcsMTIgQEAgc3RydWN0IFZhbHVlUHJvZmls
ZUJhc2UgewogICAgICAgICBBU1NFUlQobnVtYmVyT2ZCdWNrZXRzICsgaSA8IHRvdGFsTnVtYmVy
T2ZCdWNrZXRzKTsKICAgICAgICAgcmV0dXJuIG1fYnVja2V0cyArIG51bWJlck9mQnVja2V0cyAr
IGk7CiAgICAgfQorCisgICAgdm9pZCBjbGVhckJ1Y2tldHMoKQorICAgIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpCisgICAgICAg
ICAgICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICB9CiAg
ICAgCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8odW5zaWduZWQgYnVja2V0KSBjb25z
dAogICAgIHsKQEAgLTEyMyw4ICsxMjcsNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQg
cmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAotICAg
IC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgogICAgIFNwZWN1bGF0ZWRUeXBlIGNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKQogICAgIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyAr
K2kpIHsKQEAgLTEzOSw3ICsxNDEsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAg
ICAgIAogICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIEVu
Y29kZWRKU1ZhbHVlIG1fYnVja2V0c1t0b3RhbE51bWJlck9mQnVja2V0c107CiAKICAgICBTcGVj
dWxhdGVkVHlwZSBtX3ByZWRpY3Rpb24geyBTcGVjTm9uZSB9OwpAQCAtMTYxLDYgKzE2Myw3IEBA
IHN0cnVjdCBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXQKIAogc3RydWN0IFZhbHVl
UHJvZmlsZSA6IHB1YmxpYyBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+IHsK
ICAgICBWYWx1ZVByb2ZpbGUoKSA6IFZhbHVlUHJvZmlsZVdpdGhMb2dOdW1iZXJPZkJ1Y2tldHM8
MD4oKSB7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmlyc3RCdWNrZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHNbMF0pOyB9CiB9Owog
CiBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJv
ZmlsZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShERkdf
SklUKQogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiREZHQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmgiCkBAIC0zNCw3ICszNSw5IEBACiAjaW5jbHVkZSAiREZHSnVtcFJlcGxhY2Vt
ZW50LmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJh
bWVTZXQuaCIKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJKU0Nhc3QuaCIKKyNp
bmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGlsYXRp
b24uaCIKICNpbmNsdWRlICJSZWNvcmRlZFN0YXR1c2VzLmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5o
PgpAQCAtNzAsNyArNzMsNyBAQCBzdHJ1Y3QgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24gewogICAg
IFdyaXRlQmFycmllcjxKU0NlbGw+IG1fdG87CiB9OwogICAgICAgICAKLWNsYXNzIENvbW1vbkRh
dGEgeworY2xhc3MgQ29tbW9uRGF0YSA6IHB1YmxpYyBNYXRoSUNIb2xkZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENvbW1vbkRhdGEpOwogcHVibGljOgogICAgIENvbW1vbkRhdGEoKQpA
QCAtMTE2LDYgKzExOSw3IEBAIHB1YmxpYzoKICAgICBGaXhlZFZlY3RvcjxDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQ+IG1fd2F0Y2hwb2ludHM7CiAgICAgRml4ZWRWZWN0b3I8QWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50PiBtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CiAg
ICAgRml4ZWRWZWN0b3I8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBt
X2FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgIFJlY29y
ZGVkU3RhdHVzZXMgcmVjb3JkZWRTdGF0dXNlczsKICAgICBWZWN0b3I8SnVtcFJlcGxhY2VtZW50
PiBtX2p1bXBSZXBsYWNlbWVudHM7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29kZS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAK
IAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29k
ZS5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
VHJhY2tlZFJlZmVyZW5jZXM7CiAKK3N0cnVjdCBTaW1wbGVKdW1wVGFibGU7CitzdHJ1Y3QgU3Ry
aW5nSnVtcFRhYmxlOworCiBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgSklUQ29tcGlsZXI7CkBA
IC0xMDEsNiArMTA0LDggQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4g
ZmluZFBDKENvZGVCbG9jayosIHZvaWQqIHBjKSBmaW5hbDsKIAogICAgIHVzaW5nIERpcmVjdEpJ
VENvZGU6OmluaXRpYWxpemVDb2RlUmVmRm9yREZHOworCisgICAgUENUb0NvZGVPcmlnaW5NYXAq
IHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gY29tbW9uLm1fcGNUb0NvZGVP
cmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENv
bXBpbGVyOyAvLyBBbGxvdyBKSVRDb21waWxlciB0byBjYWxsIHNldENvZGVSZWYoKS4KQEAgLTEx
MCw2ICsxMTUsOCBAQCBwdWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+
IG1fb3NyRW50cnk7CiAgICAgRml4ZWRWZWN0b3I8REZHOjpPU1JFeGl0PiBtX29zckV4aXQ7CiAg
ICAgRml4ZWRWZWN0b3I8REZHOjpTcGVjdWxhdGlvblJlY292ZXJ5PiBtX3NwZWN1bGF0aW9uUmVj
b3Zlcnk7CisgICAgRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJs
ZXM7CisgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXM7CiAgICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07
CiAgICAgREZHOjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4NSwxMyArMTg1LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICAKICAgICBtX2dyYXBoLnJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7CiAK
LSAgICBpZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSB8fCAh
bV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIGlmICghbV9n
cmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMg
PSBXVEZNb3ZlKG1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKLSAgICAgICAgaWYg
KCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2Nv
ZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1v
dmUobV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwotICAgIH0KKyAgICBBU1NFUlQobV9qaXRD
b2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9q
aXRDb2RlLT5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKKyAgICBpZiAoIW1fZ3JhcGgu
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgCisgICAgICAgIG1faml0Q29kZS0+
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcyk7CisgICAgaWYgKCFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5
KCkpCisgICAgICAgIG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dy
YXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7CiAKICAgICBmb3IgKEJhZzxTd2l0Y2hEYXRhPjo6aXRl
cmF0b3IgaXRlciA9IG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVy
KSB7CiAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqKml0ZXI7CkBAIC0xOTksMTIgKzE5OCwx
MiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIGNh
c2UgU3dpdGNoQ2hhcjoKICAgICAgICAgY2FzZSBTd2l0Y2hJbW06IHsKICAgICAgICAgICAgIGlm
ICghZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHkoKSk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2Rh
dGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGRh
dGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5k
ZXgpOworICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1faml0Q29k
ZS0+bV9zd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF07CiAgICAgICAgICAg
ICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0
Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0pOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUo
KSA9PSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCkpOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gbGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKTsgai0tOykK
QEAgLTIxOSwxMiArMjE4LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYg
bGlua0IKIAogICAgICAgICBjYXNlIFN3aXRjaFN0cmluZzogewogICAgICAgICAgICAgaWYgKCFk
YXRhLmRpZFVzZUp1bXBUYWJsZSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCkuaXNFbXB0eSgp
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBU
YWJsZXNbZGF0YS5zd2l0Y2hUYWJsZUluZGV4XS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxl
KGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9qaXRDb2RlLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbZGF0YS5zd2l0
Y2hUYWJsZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8gY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2gu
YmxvY2stPmluZGV4XSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJsZS5t
X2N0aU9mZnNldHMuc2l6ZSgpID09IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS5zaXplKCkg
KyAxKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBsaW5rZWRUYWJsZS5tX2N0aU9m
ZnNldHMpCkBAIC0zMzMsNyArMzMyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVm
ZmVyJiBsaW5rQgogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5k
aWRCdWlsZE1hcHBpbmcoKSkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2lu
TWFwKG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIpLCBsaW5rQnVmZmVyKSk7CisgICAgICAgIG1faml0Q29kZS0+Y29tbW9uLm1f
cGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3Zl
KG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcik7CiB9CiAKIHN0YXRpYyB2
b2lkIGVtaXRTdGFja092ZXJmbG93Q2hlY2soSklUQ29tcGlsZXImIGppdCwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0JiBzdGFja092ZXJmbG93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw2
IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShWTSYgdm0sIENhbGxGcmFtZSoKICAgICBBU1NFUlQo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgQVNT
RVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBBU1NF
UlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRD
b2RlKCktPmRmZ0NvbW1vbigpLT5pc1N0aWxsVmFsaWQpOwogCiAgICAgaWYgKCFPcHRpb25zOjp1
c2VPU1JFbnRyeVRvREZHKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3Miw5ICs3NzIsNiBAQCB2b2lkIE9T
UkV4aXQ6OmNvbXBpbGVFeGl0KENDYWxsSGVscGVycyYgCiAgICAgLy8gVGhlIHRhZyByZWdpc3Rl
cnMgYXJlIG5lZWRlZCB0byBtYXRlcmlhbGl6ZSByZWNvdmVyaWVzIGJlbG93LgogICAgIGppdC5l
bWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCi0gICAgaWYgKGV4aXQuaXNFeGNl
cHRpb25IYW5kbGVyKCkpCi0gICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKLQogICAgIGlmIChpbmxpbmVTdGFj
a0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCkgewogICAgICAgICBFbmNvZGVkSlNWYWx1ZSogdG1w
U2NyYXRjaCA9IHNjcmF0Y2ggKyBvcGVyYW5kcy50bXBJbmRleCgwKTsKICAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbk1hdGVyaWFsaXplT1NSRXhpdFNpZGVTdGF0
ZSk+KCZ2bSwgJmV4aXQsIHRtcFNjcmF0Y2gpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKIAorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJERkdK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpJVC5oIgpA
QCAtMTE5LDEwICsxMjAsMTAgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKFZNJiB2bSwgQ0NhbGxI
ZWxwZQogICAgIGludDMyX3QgY2xpcHBlZFZhbHVlOwogICAgIHN3aXRjaCAoaml0LmNvZGVCbG9j
aygpLT5qaXRUeXBlKCkpIHsKICAgICBjYXNlIEpJVFR5cGU6OkRGR0pJVDoKLSAgICAgICAgY2xp
cHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGpp
dC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xp
cHBlZFZhbHVlID0gQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKHRh
cmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRUeXBlOjpGVExKSVQ6Ci0g
ICAgICAgIGNsaXBwZWRWYWx1ZSA9IFVwcGVyVGllckV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRU
aHJlc2hvbGQoaml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKSwgdGFyZ2V0VmFsdWUpOwor
ICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVk
VGhyZXNob2xkKHRhcmdldFZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE0MiwxMSArMTQzLDggQEAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVAogewogICAgIGNhbGxlcklz
TExJbnQgPSBPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXItPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rOwogCi0g
ICAgaWYgKGNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgewotICAgICAgICBpZiAoIWNh
bGxlcklzTExJbnQpCi0gICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bV9o
YXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKKyAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2tw
b2ludCgpKQogICAgICAgICByZXR1cm4gTExJbnQ6OmNoZWNrcG9pbnRPU1JFeGl0RnJvbUlubGlu
ZWRDYWxsVHJhbXBvbGluZVRodW5rKCkuY29kZSgpOwotICAgIH0KIAogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0OwogCkBAIC0xOTgsOCArMTk2LDYg
QEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVAogI3VuZGVmIExMSU5U
X1JFVFVSTl9MT0NBVElPTgogCiAgICAgfSBlbHNlIHsKLSAgICAgICAgYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXItPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7Ci0KICAgICAgICAgc3dpdGNo
ICh0cnVlQ2FsbGVyQ2FsbEtpbmQpIHsKICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNh
bGw6CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CkBAIC0zMTMsNiAr
MzA5LDEwIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAg
ICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxp
bmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+bWV0
YWRhdGFUYWJsZSgpKSwgY2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNv
ZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikpOwogICAgICAgICAg
ICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVC
bG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgY2FsbGVlU2F2ZVNsb3Qo
aW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6OlJlZ2lzdGVyczo6cGJH
UFIpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUo
KSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIEpJ
VDo6c19tZXRhZGF0YUdQUikpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+YmFzZWxpbmVKSVRD
b25zdGFudFBvb2woKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVD
b2RlQmxvY2ssIEpJVDo6c19jb25zdGFudHNHUFIpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTQwNCw3ICs0MDQsOCBAQCB2b2lk
IGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpLCBMTEludDo6
UmVnaXN0ZXJzOjpwY0dQUik7CiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRh
Z2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgY29kZUJsb2NrRm9yRXhpdC0+bV9oYXNMaW5rZWRPU1JFeGl0ID0gdHJ1ZTsKKyAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNvZGVCbG9ja0ZvckV4
aXQtPm1ldGFkYXRhVGFibGUoKSksIEpJVDo6c19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5iYXNlbGlu
ZUpJVENvbnN0YW50UG9vbCgpKSwgSklUOjpzX2NvbnN0YW50c0dQUik7CiAKICAgICAgICAgQnl0
ZWNvZGVJbmRleCBleGl0SW5kZXggPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlv
bjsKQEAgLTQyMCwxMiArNDIxLDE2IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFZNJiB2
bSwgQ0NhbGwKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4
aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKLSAgICBqaXQuYWRkUHRy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KGNvZGVCbG9ja0ZvckV4aXQpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBp
ZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgeworICAgICAgICBBU1NFUlQoIVJlZ2lzdGVy
U2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhMTEludDo6UmVnaXN0ZXJzOjpw
Y0dQUikpOworICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSwgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNo
R1BSKExMSW50OjpSZWdpc3RlcnM6OnBjR1BSKSk7CisKICAgICAgICAgLy8gU2luY2Ugd2UncmUg
anVtcGluZyB0byBvcF9jYXRjaCwgd2UgbmVlZCB0byBzZXQgY2FsbEZyYW1lRm9yQ2F0Y2guCiAg
ICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgdm0uYWRkcmVz
c09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSk7CiAgICAgfQotICAgIAorCisgICAgaml0LmFkZFB0cihB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihj
b2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKICAgICBq
aXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUklu
Zm86OnJlZ1QyKTsKICAgICBqaXQuZmFySnVtcChHUFJJbmZvOjpyZWdUMiwgT1NSRXhpdFB0clRh
Zyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJD
YWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIK
ICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNp
bmNsdWRlICJERkdKSVRDb2RlLmgiCkBAIC0yODY5LDcgKzI4NzAsNyBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uRmluZFN3CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNv
bnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzRG91YmxlKCkpOwogICAgIGRvdWJs
ZSBhc0RvdWJsZSA9IHZhbHVlLmFzRG91YmxlKCk7CkBAIC0yODkwLDcgKzI4OTEsNyBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+ZGZnU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIHJldHVybiBsaW5rZWRUYWJsZS5j
dGlGb3JWYWx1ZSgqdW5saW5rZWRUYWJsZSwgc3RySW1wbCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hh
cio+KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzMwLDYgKzczMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6Omlu
UGFpcihjYWxsZWVUYWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgc2h1ZmZs
ZURhdGEuYXJncy5yZXNpemUobnVtQWxsb2NhdGVkQXJncyk7CiAgICAgICAgICAgICBzaHVmZmxl
RGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgIHNodWZmbGVE
YXRhLm51bVBhcmFtZXRlcnMgPSBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwog
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytp
KSB7CiAgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCBpICsgMSk7CkBAIC04ODksNyArODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBpbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgSW52YWxpZEdQUlJlZywg
Q2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBp
bmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlUGF5bG9hZEdQUiwgWyZdIHsK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CiAgICAgICAgICAgICAg
ICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAg
ICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI4LDYgKzgy
OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwg
RGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFs
bG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51
bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9q
aXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAg
ICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
aSArIDEpOwpAQCAtOTc5LDcgKzk4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlczsK
ICAgICBpZiAoaXNUYWlsKSB7Ci0gICAgICAgIHNsb3dDYXNlcyA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgQ2FsbExp
bmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIFsmXSB7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFp
bENhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NSw3ICszOTg1
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dFByaXZhdGVOYQogICAgIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CiAKICAgICBKSVRQ
dXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBl
OjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgdXNl
ZFJlZ2lzdGVycywKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwg
Y29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCB1c2VkUmVn
aXN0ZXJzLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZUdQUiksIEpTVmFs
dWVSZWdzOjpwYXlsb2FkT25seShwcm9wZXJ0eUdQUiksIHZhbHVlUmVncywgSW52YWxpZEdQUlJl
Zywgc3R1YkluZm9HUFIpOwogICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0g
dHJ1ZTsKIApAQCAtNDkwNSw3ICs0OTA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlQWRkKE5vZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5n
cmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAg
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVj
b2RlSW5kZXgoKTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2Vs
aW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
SW5kZXgpOwotICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRB
ZGRJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1faml0LmppdENvZGUo
KS0+Y29tbW9uLmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5n
RnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRj
aGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGQ7CiAgICAgCkBAIC00OTg5LDcgKzQ5ODks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVTdWIoTm9kCiAgICAgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRo
UHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUU3ViSUMqIHN1
YklDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAg
SklUU3ViSUMqIHN1YklDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUU3ViSUMoYXJp
dGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVl
U3ViT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25W
YWx1ZVN1YjsKIApAQCAtNTU3MSw3ICs1NTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlTmVnYXRlKAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2pp
dC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5
dGVjb2RlSW5kZXgoKTsKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFz
ZWxpbmVDb2RlQmxvY2stPnVuYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29k
ZUluZGV4KTsKLSAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklU
TmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5qaXRDb2Rl
KCktPmNvbW1vbi5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGlu
Z0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlOwogICAgIGNvbXBpbGVNYXRo
SUMobm9kZSwgbmVnSUMsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
KTsKQEAgLTU4MTUsNyArNTgxNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1
ZU11bChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgo
KS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUlu
ZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNv
ZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4
KTsKLSAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUTXVsSUMo
YXJpdGhQcm9maWxlKTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNv
bW1vbi5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0
aW9uID0gb3BlcmF0aW9uVmFsdWVNdWxPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwogCkBAIC0xNDc3MCw3ICsxNDc3MCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dTaGFkb3dDaGkKICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIHNjb3BlUmVn
ID0gc2NvcGUuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChz
aGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgbV9qaXQuY29kZUJsb2NrKCksIGNh
bGxTaXRlSW5kZXgpOworICAgIG1faml0LmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRv
d1BhY2tldFJlZywgdGhpc1JlZ3MsIHNjb3BlUmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuY29kZUJsb2NrKCkpLCBjYWxsU2l0ZUluZGV4KTsKICAgICBub1Jlc3VsdChub2Rl
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBjb21waWxlKFN0YXRl
JiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogCiAgICAgaWYgKHZtLnNob3VsZEJ1aWxkZXJQQ1RvQ29k
ZU9yaWdpbk1hcHBpbmcoKSkgewogICAgICAgICBCMzo6UENUb09yaWdpbk1hcCBvcmlnaW5NYXAg
PSBzdGF0ZS5wcm9jLT5yZWxlYXNlUENUb09yaWdpbk1hcCgpOwotICAgICAgICBjb2RlQmxvY2st
PnNldFBDVG9Db2RlT3JpZ2luTWFwKG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFs
aXplci0+YjNDb2RlTGlua0J1ZmZlcikpOworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24u
bV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFs
aXplci0+YjNDb2RlTGlua0J1ZmZlcik7CiAgICAgfQogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8
SlNFbnRyeVB0clRhZz4gbGFiZWwgPSBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIt
PmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oc3RhdGUucHJvYy0+Y29kZSgpLmVudHJ5cG9pbnRM
YWJlbCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2
aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDggQEAgcHVibGljOgogICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uKCkgb3ZlcnJpZGU7CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjb21tb25E
YXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVENvZGUsIGNvbW1vbik7IH0K
ICAgICB2b2lkIHNocmlua1RvRml0KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYpIG92ZXJyaWRl
OworCisgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUg
eyByZXR1cm4gY29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAuZ2V0KCk7IH0KICAgICAKICAgICBE
Rkc6OkNvbW1vbkRhdGEgY29tbW9uOwogICAgIFZlY3RvcjxPU1JFeGl0PiBtX29zckV4aXQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDI4MzA1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDE0ICs1Miw2IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICBncmFwaC5y
ZWdpc3RlckZyb3plblZhbHVlcygpOwogCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB7Ci0gICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAg
ICBBU1NFUlQoY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKTsKLSAgICB9Ci0jZW5k
aWYKLQogICAgIC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlz
IGVudHJ5cG9pbnQgdG90YWxseSBkaWZmZXJlbnRseQogICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0
aGVyIHdlJ3JlIGRvaW5nIE9TUiBlbnRyeSBvciBub3QuCiAgICAgQ0NhbGxIZWxwZXJzIGppdChj
b2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBACiAj
aW5jbHVkZSAiSlNTZXRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5j
bHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIK
ICNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNp
bmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKQEAgLTIzMjAsNiArMjMyMSwxOCBA
QCBwcml2YXRlOgogICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVFN1YkdlbmVyYXRvcj4o
YXJpdGhQcm9maWxlLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7
CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRBZGRHZW5l
cmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVEFkZElDKiBhZGRNYXRoSUMoREZH
OjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1
cm4gY29tbW9uLmFkZEpJVEFkZElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNf
c2FtZTxHZW5lcmF0b3IsIEpJVE11bEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0
aWMgSklUTXVsSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJp
dGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUTXVsSUMocHJvZmlsZSk7
IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUTmVnR2VuZXJhdG9y
Pjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVROZWdJQyogYWRkTWF0aElDKERGRzo6Q29t
bW9uRGF0YSYgY29tbW9uLCBVbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29t
bW9uLmFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxH
ZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklU
U3ViSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgQmluYXJ5QXJpdGhQcm9m
aWxlKiBwcm9maWxlKSB7IHJldHVybiBjb21tb24uYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKwog
ICAgIHZvaWQgY29tcGlsZVZhbHVlTXVsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRp
Yyk7CkBAIC0yMzkxLDcgKzI0MDQsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAgICAgICAg
ICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBC
b3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgSklU
VW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRo
SUM8R2VuZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVFVuYXJ5TWF0
aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRD
b2RlLT5jb21tb24sIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dl
bmVyYXRvciA9IEdlbmVyYXRvcihKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLCBKU1ZhbHVl
UmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKIAogICAgICAgICAg
ICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwpAQCAtMjUwMCw3ICsyNTEz
LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVy
YXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25T
dGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRo
UHJvZmlsZSk7CisgICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQyA9IGFkZE1hdGhJQzxHZW5lcmF0b3I+KHN0YXRlLT5qaXRDb2RlLT5jb21tb24sIGFyaXRo
UHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRv
cihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkp
LAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBKU1Zh
bHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkpLCBwYXJhbXMuZnBTY3JhdGNoKDApLAogICAgICAgICAg
ICAgICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDApKTsKQEAg
LTQzMTcsNyArNDMzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9H
UFIgPSBKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6RlRMSklUKSA/IHBhcmFtcy5ncFNjcmF0
Y2goMCkgOiBJbnZhbGlkR1BSUmVnOwogCiAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJv
eDxKSVRQdXRCeVZhbEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBqaXQuY29k
ZUJsb2NrKCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUlu
ZGV4LCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwKKyAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2Nr
KCksIEpJVFR5cGU6OkZUTEpJVCwgbm9kZVNlbWFudGljT3JpZ2luLCBjYWxsU2l0ZUluZGV4LCBB
Y2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwKICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQ
Uik7CiAKICAgICAgICAgICAgIGdlbmVyYXRvci0+c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJv
bCA9IHRydWU7CkBAIC0xMDI4NSw2ICsxMDI5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVBhc3NlZEFyZ3M7IGkgPCBudW1BbGxvY2F0ZWRB
cmdzOyArK2kpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVu
ZChWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAg
ICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gaml0LmNvZGVCbG9jaygp
LT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVw
Q2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQu
Y29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbyhzZW1hbnRpY05vZGVPcmlnaW4pOwpAQCAtMTA0
NDMsMTMgKzEwNDU3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNodWZmbGVE
YXRhLmFyZ3MuYXBwZW5kKHBhcmFtc1sxICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOwogCiAg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bUFyZ3M7CisgICAg
ICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNodWZm
bGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwogCiAgICAg
ICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCkt
PmFkZENhbGxMaW5rSW5mbyhjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBHUFJJbmZvOjpyZWdUMCk7CiAK
LSAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENh
bGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9
IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwg
WyZdIHsKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVE
YXRhKHNodWZmbGVEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIo
aml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgICAgICAgICAgICAg
fSk7CkBAIC0xMDc5Miw3ICsxMDgwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBh
dGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VE
YXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5r
SW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAg
ICAgICAgICAgICAgICB9KTsKQEAgLTExMDczLDcgKzExMDg4LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOwogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxD
YWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gY2FsbExpbmtJbmZvLT5lbWl0
VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJlZ1QwLCBJbnZhbGlkR1BSUmVnLCBDYWxs
TGlua0luZm86OlVzZURhdGFJQzo6Tm8sIFsmXSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQ
YXRoID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChqaXQsIEdQUkluZm86OnJl
Z1QwLCBbJl0gewogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxT
bG93KCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTMsMjggKzQxMywxNiBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihW
TSYgdm0sIHVuc2lnbmVkCiAKICAgICBSZWdpc3RlclNldCBhbGxGVExDYWxsZWVTYXZlcyA9IFJl
Z2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAgICAgY29uc3QgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiB2bUNhbGxlZVNh
dmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgIFJl
Z2lzdGVyU2V0IHZtQ2FsbGVlU2F2ZXNUb1NraXAgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3Rl
cnMoKTsKLSAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICBqaXQu
bG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBqaXQu
YWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEVudHJ5RnJhbWU6OmNhbGxlZVNhdmVS
ZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICB9CiAKICAgICBm
b3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVn
Lm5leHQoKSkgewogICAgICAgICBpZiAoIWFsbEZUTENhbGxlZVNhdmVzLmdldChyZWcpKSB7Ci0g
ICAgICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghdm1DYWxsZWVTYXZlcy0+ZmluZChyZWcpKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVkIHVud2luZEluZGV4ID0gY29k
ZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCktPmluZGV4T2YocmVnKTsKICAgICAgICAgY29u
c3QgUmVnaXN0ZXJBdE9mZnNldCogYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA9IGJhc2VsaW5lQ2Fs
bGVlU2F2ZXMtPmZpbmQocmVnKTsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCogdm1DYWxsZWVT
YXZlID0gbnVsbHB0cjsgCi0gICAgICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQot
ICAgICAgICAgICAgdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChyZWcpOwogCiAg
ICAgICAgIGlmIChyZWcuaXNHUFIoKSkgewogICAgICAgICAgICAgR1BSUmVnIHJlZ1RvTG9hZCA9
IGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPyBHUFJJbmZvOjpyZWdUMCA6IHJlZy5ncHIoKTsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZ1RvTG9hZCAhPSBHUFJJbmZvOjpyZWdUMSk7CiAK
ICAgICAgICAgICAgIGlmICh1bndpbmRJbmRleCA9PSBVSU5UX01BWCkgewogICAgICAgICAgICAg
ICAgIC8vIFRoZSBGVEwgY29tcGlsYXRpb24gZGlkbid0IHByZXNlcnZlIHRoaXMgcmVnaXN0ZXIu
IFRoaXMgbWVhbnMgdGhhdCBpdCBhbHNvCkBAIC00NTIsOCArNDQwLDYgQEAgc3RhdGljIHZvaWQg
Y29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAogCiAgICAgICAgICAgICBpZiAoYmFzZWxpbmVS
ZWdpc3Rlck9mZnNldCkKICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rl
ciwgYmFzZWxpbmVSZWdpc3Rlck9mZnNldC0+b2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmICh2
bUNhbGxlZVNhdmUgJiYgIXZtQ2FsbGVlU2F2ZXNUb1NraXAuZ2V0KHZtQ2FsbGVlU2F2ZS0+cmVn
KCkpKQotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEZQUlJlZyBmcFJlZ1RvTG9hZCA9IGJhc2VsaW5l
UmVnaXN0ZXJPZmZzZXQgPyBGUFJJbmZvOjpmcFJlZ1QwIDogcmVnLmZwcigpOwogCkBAIC00NjQs
MTkgKzQ1MCw5IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAog
ICAgICAgICAgICAgaWYgKGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAgICAg
aml0LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNy
b0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQt
Pm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAodm1DYWxsZWVTYXZlICYmICF2bUNhbGxlZVNh
dmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNhdmUtPnJlZygpKSkKLSAgICAgICAgICAgICAgICBqaXQu
c3RvcmVEb3VibGUoZnBSZWdUb0xvYWQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkgewotICAgICAgICBSZWdpc3RlckF0T2Zm
c2V0KiB2bUNhbGxlZVNhdmUgPSB2bUNhbGxlZVNhdmVzLT5maW5kKEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0
ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUt
Pm9mZnNldCgpKSk7Ci0KLSAgICAgICAgdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+Zmlu
ZChHUFJJbmZvOjpub3RDZWxsTWFza1JlZ2lzdGVyKTsKLSAgICAgICAgaml0LnN0b3JlNjQoR1BS
SW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDEsIHZtQ2FsbGVlU2F2ZS0+b2Zmc2V0KCkpKTsKLSAgICB9Ci0KICAgICBzaXplX3Qg
YmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9j
ay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAKICAgICBpZiAoZXhpdC5t
X2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lv
biAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJi
CSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNyArNDIsMjggQEAgY2xhc3MgTWV0YWRhdGEKICAgICBk
ZWYgc3RydWN0KG9wKQogICAgICAgICByZXR1cm4gaWYgZW1wdHk/CiAKLSAgICAgICAgZGVmIGNv
bnZlcnRGaWVsZHMocHJlZml4LCBmaWVsZHMpCisgICAgICAgIGRlZiBnZW5lcmF0ZU9mZnNldE9m
RnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKKyAgICAgICAgICAgIGZpZWxkTmFtZXMubWFw
IGRvIHxmaWVsZE5hbWV8CisgICAgICAgICAgICAgICAgIiN7cHJlZml4fXN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2Yje2ZpZWxkTmFtZVswXS51cGNhc2V9I3tmaWVsZE5hbWVbMS4uLTFdfSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV8je2ZpZWxkTmFtZX0pOyB9IgorICAg
ICAgICAgICAgZW5kLmpvaW4oIlxuIikKKyAgICAgICAgZW5kCisKKyAgICAgICAgZGVmIGNvbnZl
cnRGaWVsZHMocHJlZml4LCBmaWVsZHMsIGZpZWxkTmFtZXMpCiAgICAgICAgICAgICBmaWVsZHMu
bWFwIGRvIHxmaWVsZCwgdHlwZXwKICAgICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/IEhh
c2gKLSAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZpZWxk
cyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCisgICAgICAgICAgICAgICAg
ICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0
eXBlLCBmaWVsZE5hbWVzKX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307
IgorICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZC50b19zCisgICAgICAgICAg
ICAgICAgICAgIGZpZWxkTmFtZXMucHVzaChmaWVsZE5hbWUpCisgICAgICAgICAgICAgICAgICAg
ICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkTmFtZX07IgogICAgICAgICAgICAgICAg
IGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAgICAgZW5kCiAKLSAgICAgICAg
ZmllbGRzID0gY29udmVydEZpZWxkcygiICAgICAgICAiLCBAZmllbGRzKQorICAgICAgICBmaWVs
ZE5hbWVzID0gW10KKyAgICAgICAgcHJlZml4ID0gIiAgICAgICAgIgorICAgICAgICBmaWVsZHMg
PSBjb252ZXJ0RmllbGRzKHByZWZpeCwgQGZpZWxkcywgZmllbGROYW1lcykKKyAgICAgICAgZmll
bGRzID0gZmllbGRzICsgIlxuIiArIGdlbmVyYXRlT2Zmc2V0T2ZGdW5jdGlvbnMocHJlZml4LCBm
aWVsZE5hbWVzKQogCiAgICAgICAgIGluaXRzID0gbmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXpl
cnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJzLmVtcHR5PykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzY3LDYgKzM2NywyOCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6bG9hZFByb3BlcnR5
KEdQUlJlCiAgICAgICAgIHJlc3VsdCk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzdG9y
ZVByb3BlcnR5KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0
LCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBKdW1wIGlzSW5saW5lID0gYnJhbmNoMzIoTGVzc1Ro
YW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgCisg
ICAgbG9hZFB0cihBZGRyZXNzKG9iamVjdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaCk7CisgICAgbmVnMzIob2Zmc2V0KTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZz
ZXQsIG9mZnNldCk7CisgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKKyAgICAKKyAgICBpc0lubGlu
ZS5saW5rKHRoaXMpOworICAgIGFkZFB0cigKKyAgICAgICAgVHJ1c3RlZEltbTMyKAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEpTT2JqZWN0KSkgLQorICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PGludDMyX3Q+KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDIpICogc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpLAorICAgICAgICBvYmpl
Y3QsIHNjcmF0Y2gpOworICAgIAorICAgIHJlYWR5LmxpbmsodGhpcyk7CisgICAgCisgICAgc3Rv
cmVWYWx1ZSh2YWx1ZSwKKyAgICAgICAgQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNF
aWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSk7Cit9CisKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVyZShWTSYgdm0s
IFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkK
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjk4LDggKzcyMCwxMyBAQCB2b2lkIEFzc2VtYmx5
SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzCiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0
VmlydHVhbENhbGwoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsTGlu
a0luZm8qIGluZm8pCiB7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpy
ZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJl
Z1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KHZtLCBp
bmZvKTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFsQ2FsbFdpdGhvdXRN
b3ZpbmdHbG9iYWxPYmplY3QoVk0mIHZtLCBDYWxsTGlua0luZm8qIGluZm8pCit7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgQ2FsbCBjYWxsID0g
bmVhckNhbGwoKTsKICAgICBhZGRMaW5rVGFzayhbPSwgJnZtXSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgewogICAgICAgICBhdXRvIGNhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsPEpJVENvbXBpbGF0aW9uUHRyVGFnPihjYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjgzMDUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjM0LDggKzIzNCw5IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKLSAgICAv
LyBOb3RlIHRoYXQgdGhpcyBjbG9iYmVycyBvZmZzZXQuCisgICAgLy8gTm90ZSB0aGF0IHRoZXNl
IGNsb2JiZXIgb2Zmc2V0LgogICAgIHZvaWQgbG9hZFByb3BlcnR5KEdQUlJlZyBvYmplY3QsIEdQ
UlJlZyBvZmZzZXQsIEpTVmFsdWVSZWdzIHJlc3VsdCk7CisgICAgdm9pZCBzdG9yZVByb3BlcnR5
KEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBHUFJSZWcg
c2NyYXRjaCk7CiAKICAgICB2b2lkIG1vdmVWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3Mgc3JjUmVncywg
SlNWYWx1ZVJlZ3MgZGVzdFJlZ3MpCiAgICAgewpAQCAtMzc5LDE1ICszODAsMjYgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgfQogCisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlGcmFtZSwgR1BSUmVnIHNjcmF0
Y2gpCisgICAgeworI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorICAg
ICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCBzY3JhdGNoKTsKKyAgICAgICAgY29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHNjcmF0Y2gpOworI2Vsc2UK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJhbWUpOworICAgICAgICBVTlVTRURfUEFS
QU0oc2NyYXRjaCk7CisjZW5kaWYKKyAgICB9CisKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEVudHJ5RnJhbWUqJiB0b3BFbnRyeUZyYW1lKQog
ICAgIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICAgICAg
Y29uc3QgVGVtcFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkgfTsKICAgICAgICAgR1BSUmVnIHRlbXAxID0gdXNlZFJl
Z2lzdGVycy5nZXRGcmVlR1BSKDApOwotICAgICAgICBsb2FkUHRyKCZ0b3BFbnRyeUZyYW1lLCB0
ZW1wMSk7Ci0gICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVySW1wbCh0ZW1wMSk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHRvcEVudHJ5RnJhbWUsIHRlbXAxKTsKICNlbHNlCiAgICAgICAgIFVOVVNF
RF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRvcEVudHJ5RnJh
bWUpOwogI2VuZGlmCiAgICAgfQogICAgIApAQCAtMTcyMCw2ICsxNzMyLDcgQEAgcHVibGljOgog
ICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRWaXJ0dWFsQ2FsbChWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgQ2FsbExpbmtJbmZvKik7CisgICAgdm9pZCBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5n
R2xvYmFsT2JqZWN0KFZNJiwgQ2FsbExpbmtJbmZvKik7CiAgICAgCiAgICAgdm9pZCBtYWtlU3Bh
Y2VPblN0YWNrRm9yQ0NhbGwoKTsKICAgICB2b2lkIHJlY2xhaW1TcGFjZU9uU3RhY2tGb3JDQ2Fs
bCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2Rl
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5l
SklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVk
ZSAiSklUTWF0aElDLmgiCisjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCisjaW5jbHVkZSAiU3RydWN0
dXJlU3R1YkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVEFkZElDKiBNYXRoSUNIb2xk
ZXI6OmFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVy
biBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUTXVsSUMqIE1hdGhJQ0hvbGRlcjo6
YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1f
bXVsSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVRTdWJJQyogTWF0aElDSG9sZGVyOjphZGRK
SVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9zdWJJ
Q3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE5lZ0lDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE5l
Z0lDKFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fbmVnSUNzLmFk
ZChhcml0aFByb2ZpbGUpOyB9CisKK3ZvaWQgTWF0aElDSG9sZGVyOjphZG9wdE1hdGhJQ3MoTWF0
aElDSG9sZGVyJiBvdGhlcikKK3sKKyAgICBtX2FkZElDcyA9IFdURk1vdmUob3RoZXIubV9hZGRJ
Q3MpOworICAgIG1fbXVsSUNzID0gV1RGTW92ZShvdGhlci5tX211bElDcyk7CisgICAgbV9uZWdJ
Q3MgPSBXVEZNb3ZlKG90aGVyLm1fbmVnSUNzKTsKKyAgICBtX3N1YklDcyA9IFdURk1vdmUob3Ro
ZXIubV9zdWJJQ3MpOworfQorCitCYXNlbGluZUpJVENvZGU6OkJhc2VsaW5lSklUQ29kZShDb2Rl
UmVmPEpTRW50cnlQdHJUYWc+IGNvZGUsIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5
Q2hlY2spCisgICAgOiBEaXJlY3RKSVRDb2RlKFdURk1vdmUoY29kZSksIHdpdGhBcml0eUNoZWNr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAsIE1hdGhJQ0hvbGRlcigpCit7IH0KKworQmFz
ZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9CYXNlbGluZUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJKSVRDb2Rl
LmgiCisjaW5jbHVkZSAiSklUQ29kZU1hcC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEJpbmFyeUFyaXRoUHJvZmlsZTsKK2NsYXNzIFVuYXJ5QXJpdGhQ
cm9maWxlOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgU2ltcGxl
SnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKworY2xhc3MgTWF0aElDSG9sZGVy
IHsKK3B1YmxpYzoKKyAgICB2b2lkIGFkb3B0TWF0aElDcyhNYXRoSUNIb2xkZXImIG90aGVyKTsK
KyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklU
TXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVFN1YklDKiBh
ZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVROZWdJQyogYWRkSklUTmVn
SUMoVW5hcnlBcml0aFByb2ZpbGUqKTsKKworcHJpdmF0ZToKKyAgICBCYWc8SklUQWRkSUM+IG1f
YWRkSUNzOworICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7CisgICAgQmFnPEpJVE5lZ0lDPiBt
X25lZ0lDczsKKyAgICBCYWc8SklUU3ViSUM+IG1fc3ViSUNzOworfTsKKworY2xhc3MgSklUQ29u
c3RhbnRQb29sIHsKK3B1YmxpYzoKKyAgICB1c2luZyBDb25zdGFudCA9IHVuc2lnbmVkOworCisg
ICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIEdsb2JhbE9iamVjdCwKKyAg
ICAgICAgQ2FsbExpbmtJbmZvLAorICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbywKKyAgICAgICAg
RnVuY3Rpb25EZWNsLAorICAgICAgICBGdW5jdGlvbkV4cHIsCisgICAgfTsKKworICAgIHN0cnVj
dCBWYWx1ZSB7CisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgUGFja2VkUHRyPHZvaWQ+IHBh
eWxvYWQ7CisgICAgfTsKKworICAgIEpJVENvbnN0YW50UG9vbCgpID0gZGVmYXVsdDsKKyAgICBK
SVRDb25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKyAgICBKSVRDb25z
dGFudFBvb2wmIG9wZXJhdG9yPShKSVRDb25zdGFudFBvb2wmJikgPSBkZWZhdWx0OworCisgICAg
Q29uc3RhbnQgYWRkKFR5cGUgdHlwZSwgdm9pZCogcGF5bG9hZCA9IG51bGxwdHIpCisgICAgewor
ICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50cy5zaXplKCk7CisgICAgICAgIG1f
Y29uc3RhbnRzLmFwcGVuZChWYWx1ZSB7IHR5cGUsIHBheWxvYWQgfSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnN0YW50cy5zaXplKCk7IH0KKyAgICBWYWx1ZSBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudHNbaV07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fY29uc3Rh
bnRzOworfTsKKworCitjbGFzcyBCYXNlbGluZUpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29k
ZSwgcHVibGljIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgQmFzZWxpbmVKSVRDb2RlKENv
ZGVSZWY8SlNFbnRyeVB0clRhZz4sIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hl
Y2spOworICAgIH5CYXNlbGluZUpJVENvZGUoKSBvdmVycmlkZTsKKyAgICBQQ1RvQ29kZU9yaWdp
bk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSBvdmVycmlkZSB7IHJldHVybiBtX3BjVG9Db2RlT3Jp
Z2luTWFwLmdldCgpOyB9CisKKyAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5r
ZWRDYWxsczsKKyAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2V2YWxDYWxsTGlua0luZm9zOworICAg
IEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAg
IEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZp
eGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAg
IEpJVENvZGVNYXAgbV9qaXRDb2RlTWFwOworICAgIEpJVENvbnN0YW50UG9vbCBtX2NvbnN0YW50
UG9vbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG1fcGNUb0NvZGVP
cmlnaW5NYXA7CisgICAgYm9vbCBtX2lzU2hhcmVhYmxlIHsgdHJ1ZSB9OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFBsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHNpemVfdCBCYXNlbGluZUpJVFBsYW46OmNvZGVTaXpl
KCkgY29uc3QKIAogQ29tcGlsYXRpb25SZXN1bHQgQmFzZWxpbmVKSVRQbGFuOjpmaW5hbGl6ZSgp
CiB7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5U
aHJlYWQoKTsKKyAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBtX2ppdC5maW5hbGl6ZU9u
TWFpblRocmVhZChtX2NvZGVCbG9jayk7CiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNl
IENvbXBpbGF0aW9uRmFpbGVkOgogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJs
b2NrLCAiZGVsYXlKSVRDb21waWxlIiwgKCJjb21waWxhdGlvbiBmYWlsZWQiKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODMw
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dD
aGlja2VuUHJvbG8KICAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9C
SkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwogfQogCi12b2lk
IENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1Bh
Y2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKLXsKLSAgICBzdG9yZVB0cihHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGZyYW1lKSkpOwotICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIoU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0YWlsTWFya2VyKCkpLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbGVl
KSkpOwotICAgIHN0b3JlVmFsdWUodGhpc1JlZ3MsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpF
Q1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCB0aGlzVmFsdWUpKSk7Ci0gICAgc3Rv
cmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNv
ZGVCbG9jayksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hp
Y2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoY2Fs
bFNpdGVJbmRleC5iaXRzKCkpLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9G
KFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpKTsKLX0KLQogdm9pZCBDQ2Fs
bEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mIHZtLCBHUFJSZWcgc2hhZG93
UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAg
ICBTaGFkb3dDaGlja2VuKiBzaGFkb3dDaGlja2VuID0gdm0uc2hhZG93Q2hpY2tlbigpOwpAQCAt
NzIsNiArNjIsMjggQEAgdm9pZCBDQ2FsbEhlbHBlcnM6OmVuc3VyZVNoYWRvd0NoaWNrZW5QYQog
ICAgIHN0b3JlUHRyKHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSk7CiB9CiAK
KwordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Cit2b2lkIENDYWxsSGVscGVyczo6
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFs
dWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNr
ZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKKyAg
ICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNF
VE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOworICAgIHN0b3JlUHRyKHNj
b3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgc2NvcGUpKSk7CisgICAgc3RvcmVQdHIoY29kZUJsb2NrLCBBZGRyZXNzKHNoYWRv
d1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2Nr
KSkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRk
cmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQs
IGNhbGxTaXRlSW5kZXgpKSk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywg
R1BSUmVnIHNjb3BlLCBUcnVzdGVkSW1tUHRyIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4KQoreworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChzaGFkb3dQ
YWNrZXQsIHRoaXNSZWdzLCBzY29wZSwgY29kZUJsb2NrLCBjYWxsU2l0ZUluZGV4KTsKK30KKwor
dm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFk
b3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIEdQUlJlZyBjb2Rl
QmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9j
aywgY2FsbFNpdGVJbmRleCk7Cit9CisKIHZvaWQgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92
ZXIoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTSW50ZXJuYWxQdHJUYWc+IHdoZXJlLCBTY29wZWRM
YW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4gZW1pdENvZGUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0
aW9uKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0MCw3ICs4NDAs
MTQgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgY2xvYmJlciBhbGwgdm9sYXRp
bGUgcmVnaXN0ZXJzLiBUaGV5IGFzc3VtZSB0aGF0IHRoZXJlIGlzIHJvb20gb24gdGhlIHRvcCBv
ZgogICAgIC8vIHN0YWNrIHRvIG1hcnNoYWxsIGNhbGwgYXJndW1lbnRzLgogICAgIHZvaWQgbG9n
U2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQUlJlZyBz
Y3JhdGNoMSwgR1BSUmVnIHNjb3BlKTsKLSAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFj
a2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2Nv
cGUsIENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQ
YWNrZXRJbXBsKEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJS
ZWcgc2NvcGUsIENvZGVCbG9ja1R5cGUgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXgpOworcHVibGljOgorICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BS
UmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1
c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCk7CisgICAg
dm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1Zh
bHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworCiAgICAgLy8gTGVhdmVzIGJlaGluZCBhIHBvaW50ZXIg
dG8gdGhlIFBhY2tldCB3ZSBzaG91bGQgd3JpdGUgdG8gaW4gc2hhZG93UGFja2V0LgogICAgIHZv
aWQgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldChWTSYsIEdQUlJlZyBzaGFkb3dQYWNrZXQsIEdQ
UlJlZyBzY3JhdGNoMU5vbkFyZ0dQUiwgR1BSUmVnIHNjcmF0Y2gyKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywxMiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogdm9pZCBDYWxsRnJhbWVTaHVmZmxlRGF0YTo6c2V0dXBDYWxsZWVTYXZlUmVnaXN0
ZXJzKENvZGVCbG9jayogY29kZUJsb2NrKQogeworICAgIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVy
cyhjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1l
U2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zKQorewogICAgIFJlZ2lzdGVyU2V0IGNhbGxl
ZVNhdmVSZWdpc3RlcnMgeyBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkgfTsK
LSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVnaXN0ZXJTYXZlTG9jYXRpb25zID0g
Y29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVn
aXN0ZXJBdE9mZnNldCBlbnRyeSB7IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+YXQoaSkgfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRh
LmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZy
YW1lU2h1ZmZsZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDEzIEBAIHB1Ymxp
YzoKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeT4gYXJnczsKICAgICB1bnNpZ25lZCBudW1Mb2Nh
bHMgeyBVSU5UX01BWCB9OwogICAgIHVuc2lnbmVkIG51bVBhc3NlZEFyZ3MgeyBVSU5UX01BWCB9
OworICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OyAvLyBPbiBvdXIgbWFj
aGluZSBmcmFtZS4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVyTWFwPFZhbHVlUmVj
b3Zlcnk+IHJlZ2lzdGVyczsKICAgICBHUFJSZWcgbnVtYmVyVGFnUmVnaXN0ZXIgeyBJbnZhbGlk
R1BSUmVnIH07CiAKICAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sq
KTsKKyAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhjb25zdCBSZWdpc3RlckF0T2Zm
c2V0TGlzdCopOwogI2VuZGlmCiAgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAJKHJl
dmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgQ2FsbEZyYW1lU2h1
ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVyKENDYQogICAgIDogbV9qaXQoaml0KQogICAgICwgbV9v
bGRGcmFtZShkYXRhLm51bUxvY2FscyArIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVy
cywgbnVsbHB0cikKICAgICAsIG1fbmV3RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzLCBudWxscHRyKQotICAgICwgbV9hbGlnbmVkT2xkRnJh
bWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzCi0gICAgICAgICsgcm91bmRB
cmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
KSkKKyAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVycyArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLm51bVBhcmFtZXRl
cnMpKQogICAgICwgbV9hbGlnbmVkTmV3RnJhbWVTaXplKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUlu
UmVnaXN0ZXJzCiAgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEu
YXJncy5zaXplKCkpKQogICAgICwgbV9mcmFtZURlbHRhKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSAt
IG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSkKICAgICAsIG1fbG9ja2VkUmVnaXN0ZXJzKFJlZ2lzdGVy
U2V0OjphbGxSZWdpc3RlcnMoKSkKICAgICAsIG1fbnVtUGFzc2VkQXJncyhkYXRhLm51bVBhc3Nl
ZEFyZ3MpCisgICAgLCBtX251bVBhcmFtZXRlcnMoZGF0YS5udW1QYXJhbWV0ZXJzKQogewogICAg
IC8vIFdlIGFyZSBhbGxvd2VkIGFsbCB0aGUgdXN1YWwgcmVnaXN0ZXJzLi4uCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsgKQpAQCAtNDIxLDcg
KzQyMSw3IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCBtX25ld0ZyYW1l
QmFzZSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYXJndW1lbnRDb3VudE9LID0KICAgICAg
ICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbV9uZXdGcmFt
ZUJhc2UsCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1faml0LmNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIobV9udW1QYXJhbWV0ZXJzKSk7CiAgICAgbV9qaXQuYWRkMzIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpIC0gMSArIENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1f
aml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50UmVn
aXN0ZXJzKCkpLCBtX25ld0ZyYW1lQmFzZSk7CiAgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1fbmV3
RnJhbWVCYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVyLmgJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3IEBA
IHB1YmxpYzoKICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgZGF0YTsKICAgICAgICAgZGF0
YS5udW1Mb2NhbHMgPSBudW1Mb2NhbHMoKTsKICAgICAgICAgZGF0YS5udW1QYXNzZWRBcmdzID0g
bV9udW1QYXNzZWRBcmdzOworICAgICAgICBkYXRhLm51bVBhcmFtZXRlcnMgPSBtX251bVBhcmFt
ZXRlcnM7CiAgICAgICAgIGRhdGEuY2FsbGVlID0gZ2V0TmV3KFZpcnR1YWxSZWdpc3RlciB7IENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSB9KS0+cmVjb3ZlcnkoKTsKICAgICAgICAgZGF0YS5hcmdzLnJl
c2l6ZShhcmdDb3VudCgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3Vu
dCgpOyArK2kpCkBAIC03OTgsNiArNzk5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBlcmZvcm1T
YWZlV3JpdGVzKCk7CiAgICAgCiAgICAgdW5zaWduZWQgbV9udW1QYXNzZWRBcmdzIHsgVUlOVF9N
QVggfTsKKyAgICB1bnNpZ25lZCBtX251bVBhcmFtZXRlcnMgeyBVSU5UX01BWCB9OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJl
c3MoUmV0dXJuQQogfQogCiBKSVQ6OkpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBC
eXRlY29kZUluZGV4IGxvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgOiBKU0ludGVyZmFj
ZUpJVCgmdm0sIGNvZGVCbG9jaykKKyAgICA6IEpTSW50ZXJmYWNlSklUKCZ2bSwgbnVsbHB0cikK
ICAgICAsIG1faW50ZXJwcmV0ZXIodm0uaW50ZXJwcmV0ZXIpCiAgICAgLCBtX2xhYmVscyhjb2Rl
QmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA6IDApCiAgICAgLCBtX3Bj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSkKQEAgLTc3LDYgKzc3LDkgQEAgSklUOjpKSVQoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQgogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5n
KGZhbHNlKQogICAgICwgbV9sb29wT1NSRW50cnlCeXRlY29kZUluZGV4KGxvb3BPU1JFbnRyeUJ5
dGVjb2RlSW5kZXgpCiB7CisgICAgbV9nbG9iYWxPYmplY3RDb25zdGFudCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdCk7CisgICAgbV9wcm9m
aWxlZENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICBtX3VubGlua2VkQ29kZUJsb2NrID0gY29k
ZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOwogfQogCiBKSVQ6On5KSVQoKQpAQCAtOTAsOCAr
OTMsOCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7Ci0gICAgCi0gICAgc2tpcE9wdGlt
aXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVj
dXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVC
bG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIHNraXBPcHRpbWl6
ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0
aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSk7CiAKICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZy
YW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlG
cmFtZSk7CkBAIC0xMTMsMTUgKzExNiwyMCBAQCB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdh
dGNocG9pbnRTZXQqCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVB
ZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVk
KSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQp
Cit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0
KQogeworICAgIGF1dG8gb2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhwb2ludGVyVG9TZXQsIFdh
dGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVk
KSkpOworICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlD
aGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkKK3ZvaWQgSklUOjplbWl0VmFyUmVhZE9ubHlD
aGVjayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7Ci0gICAg
aWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJSZWFkT25s
eVdhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUg
PT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KHNjcmF0Y2hHUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwg
T0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhclJlYWRPbmx5V2F0Y2hwb2ludCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVz
cyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1t
MzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjphc3NlcnRTdGFja1Bv
aW50ZXJPZmZzZXQoKQpAQCAtMTI5LDEyICsxMzcsMTggQEAgdm9pZCBKSVQ6OmFzc2VydFN0YWNr
UG9pbnRlck9mZnNldCgpCiAgICAgaWYgKCFBU1NFUlRfRU5BQkxFRCkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDAp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5r
ZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdU
MCk7CiAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgb2subGluayh0aGlzKTsKIH0KIAordm9p
ZCBKSVQ6OnJlc2V0U1AoKQoreworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKK30KKwogI2RlZmluZSBORVhUX09QQ09ERShuYW1lKSBcCiAgICAgbV9i
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgKyBj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IFwKICAgICBicmVhazsKQEAgLTE4MSw2MSArMTk1
LDQ0IEBAIHZvaWQgSklUOjplbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWMKICAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJ
blByb2xvZ3VlKEdQUlJlZyByZXN1bHQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtl
ZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOworICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVzdWx0KTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJh
cmVEYXRhKCkpLCByZXN1bHQpOworICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGJyYW5jaFRlc3RQ
dHIoWmVybywgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpy
YXJlRGF0YVRhZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uUmFyZURh
dGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCByZXN1
bHQpOworICAgIGhhc0V4ZWN1dGFibGUubGluayh0aGlzKTsKKyAgICBpZiAobV91bmxpbmtlZENv
ZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0
LCBGdW5jdGlvbkV4ZWN1dGFibGU6Om9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkpLCBy
ZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rp
b25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSksIHJlc3VsdCk7CisKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBFeGVjdXRhYmxlVG9Db2RlQmxvY2tFZGdlOjpvZmZz
ZXRPZkNvZGVCbG9jaygpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
cmVzdWx0LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworCisjaWYgQVNTRVJUX0VOQUJMRUQK
KyAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFz
ZWxpbmVKSVQpOworICAgIH0pOworI2VuZGlmCit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKIHsKICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2coIkNvbXBpbGluZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOworICAgICAgICBkYXRhTG9n
KCJDb21waWxpbmcgIiwgKm1fcHJvZmlsZWRDb2RlQmxvY2ssICJcbiIpOwogICAgIAogICAgIGpp
dEFzc2VydFRhZ3NJblBsYWNlKCk7CiAgICAgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsK
ICAgICAKLSAgICBhdXRvJiBpbnN0cnVjdGlvbnMgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5zaXplKCk7CisgICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCk7CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKIAogICAgIG1fY2FsbExp
bmtJbmZvSW5kZXggPSAwOwogCi0gICAgVk0mIHZtID0gbV9jb2RlQmxvY2stPnZtKCk7CiAgICAg
Qnl0ZWNvZGVJbmRleCBzdGFydEJ5dGVjb2RlSW5kZXgoMCk7Ci0gICAgaWYgKG1fbG9vcE9TUkVu
dHJ5Qnl0ZWNvZGVJbmRleCAmJiAobV9jb2RlQmxvY2stPmluaGVyaXRzPFByb2dyYW1Db2RlQmxv
Y2s+KHZtKSB8fCBtX2NvZGVCbG9jay0+aW5oZXJpdHM8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4o
dm0pKSkgewotICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9wdGltaXphdGlvbiBiZWNh
dXNlIHdlIGV4ZWN1dGUgUHJvZ3JhbUNvZGVCbG9jaydzIGV4YWN0bHkgb25jZS4KLSAgICAgICAg
Ly8gVGhpcyBvcHRpbWl6YXRpb24gd291bGQgYmUgaW52YWxpZCBvdGhlcndpc2UuIFdoZW4gdGhl
IExMSW50IGRldGVybWluZXMgaXQgd2FudHMgdG8KLSAgICAgICAgLy8gZG8gT1NSIGVudHJ5IGlu
dG8gdGhlIGJhc2VsaW5lIEpJVCBpbiBhIGxvb3AsIGl0IHdpbGwgcGFzcyBpbiB0aGUgYnl0ZWNv
ZGUgb2Zmc2V0IGl0Ci0gICAgICAgIC8vIHdhcyBleGVjdXRpbmcgYXQgd2hlbiBpdCBraWNrZWQg
b2ZmIG91ciBjb21waWxhdGlvbi4gV2Ugb25seSBuZWVkIHRvIGNvbXBpbGUgY29kZSBmb3IKLSAg
ICAgICAgLy8gYW55dGhpbmcgcmVhY2hhYmxlIGZyb20gdGhhdCBieXRlY29kZSBvZmZzZXQuCi0K
LSAgICAgICAgLy8gV2Ugb25seSBib3RoZXIgYnVpbGRpbmcgdGhlIGJ5dGVjb2RlIGdyYXBoIGlm
IGl0IGNvdWxkIHNhdmUgdGltZSBhbmQgZXhlY3V0YWJsZQotICAgICAgICAvLyBtZW1vcnkuIFdl
IHBpY2sgYW4gYXJiaXRyYXJ5IG9mZnNldCB3aGVyZSB3ZSBkZWVtIHRoaXMgaXMgcHJvZml0YWJs
ZS4KLSAgICAgICAgaWYgKG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA+PSAy
MDApIHsKLSAgICAgICAgICAgIC8vIEFzIGEgc2ltcGxpZmljYXRpb24sIHdlIGRvbid0IGZpbmQg
YWxsIGJ5dGVjb2RlIHJhbmdlcyB0aGF0IGFyZSB1bnJlYWNoYWJsZS4KLSAgICAgICAgICAgIC8v
IEluc3RlYWQsIHdlIGp1c3QgZmluZCB0aGUgbWluaW11bSBieXRlY29kZSBvZmZzZXQgdGhhdCBp
cyByZWFjaGFibGUsIGFuZAotICAgICAgICAgICAgLy8gY29tcGlsZSBjb2RlIGZyb20gdGhhdCBi
eXRlY29kZSBvZmZzZXQgb253YXJkcy4KLQotICAgICAgICAgICAgQnl0ZWNvZGVHcmFwaCBncmFw
aChtX2NvZGVCbG9jaywgbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpKTsKLSAgICAgICAgICAg
IEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVj
b2RlT2Zmc2V0KG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSk7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChibG9jayk7Ci0KLSAgICAgICAgICAgIEdyYXBoTm9kZVdvcmts
aXN0PEJ5dGVjb2RlQmFzaWNCbG9jayo+IHdvcmtsaXN0OwotICAgICAgICAgICAgc3RhcnRCeXRl
Y29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOwotICAgICAgICAgICAgd29ya2xpc3QucHVzaChi
bG9jayk7Ci0KLSAgICAgICAgICAgIHdoaWxlIChCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0g
d29ya2xpc3QucG9wKCkpIHsKLSAgICAgICAgICAgICAgICBzdGFydEJ5dGVjb2RlSW5kZXggPSBC
eXRlY29kZUluZGV4KHN0ZDo6bWluKHN0YXJ0Qnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgYmxvY2st
PmxlYWRlck9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNz
b3JJbmRleCA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpCi0gICAgICAgICAgICAgICAgICAgIHdvcmts
aXN0LnB1c2goJmdyYXBoW3N1Y2Nlc3NvckluZGV4XSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBB
bHNvIGFkZCBjYXRjaCBibG9ja3MgZm9yIGJ5dGVjb2RlcyB0aGF0IHRocm93LgotICAgICAgICAg
ICAgICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+
bGVhZGVyT2Zmc2V0KCk7IGJ5dGVjb2RlT2Zmc2V0IDwgYmxvY2stPmxlYWRlck9mZnNldCgpICsg
YmxvY2stPnRvdGFsTGVuZ3RoKCk7KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGlu
c3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zLmF0KGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChhdXRvKiBoYW5kbGVyID0gbV9jb2RlQmxvY2stPmhhbmRsZXJGb3JC
eXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGdyYXBoLmZpbmRCYXNpY0Jsb2NrV2l0aExl
YWRlck9mZnNldChoYW5kbGVyLT50YXJnZXQpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ynl0ZWNvZGVPZmZzZXQgKz0gaW5zdHJ1Y3Rpb24tPnNpemUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
IAogICAgIG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID0gMDsKICAgICBmb3IgKG1fYnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSA8
IGluc3RydWN0aW9uQ291bnQ7ICkgewpAQCAtMjc4LDEyICsyNzUsMTUgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9u
czo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewotICAgICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQ
cm9iZTo6Q29udGV4dCYgY3R4KSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJKSVQgWyIsIGJ5dGVjb2RlT2Zmc2V0LCAiXSAiLCBvcGNvZGVOYW1lc1tvcGNv
ZGVJRF0sICIgY2ZyICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG9wY29kZUlEICE9IG9w
X2NhdGNoKQorICAgICAgICAgICAgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CisKICAgICAg
ICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgICAgICBERUZJTkVfU0xPV19PUChsZXNzKQogICAg
ICAgICBERUZJTkVfU0xPV19PUChsZXNzZXEpCkBAIC01MjcsNyArNTI3LDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBCeXRlY29kZUluZGV4IGZpcnN0
VG8gPSBtX2J5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChtX2J5dGVjb2Rl
SW5kZXgpLnB0cigpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uID0gbV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkK
ICAgICAgICAgICAgIGRhdGFMb2dMbigiQmFzZWxpbmUgSklUIGVtaXR0aW5nIHNsb3cgY29kZSBm
b3IgIiwgbV9ieXRlY29kZUluZGV4LCAiIGF0IG9mZnNldCAiLCAobG9uZylkZWJ1Z09mZnNldCgp
KTsKQEAgLTU0NSw4ICs1NDUsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQogCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhlY3V0
aW9uKCkpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9j
b2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0
eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxG
cmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsi
LCBieXRlY29kZU9mZnNldCwgIl0gU0xPVyAiLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0sICIgY2Zy
ICIsIFJhd1BvaW50ZXIoY3R4LmZwKCkpLCAiIEAgIiwgY29kZUJsb2NrKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9CkBAIC02NzQsNTUgKzY3NCw1NSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKK3ZvaWQgSklUOjplbWl0TWF0ZXJpYWxpemVN
ZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpCit7CisgICAgbG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21ldGFkYXRh
R1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRE
YXRhKCkpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJ
VERhdGE6Om9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7Cit9CisK
K3ZvaWQgSklUOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCkKK3sKKyAgICBCYXNlOjplbWl0UmVz
dG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhv
dXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKLSAgICBERkc6OkNh
cGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKKyAg
ICBERkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmNhcGFi
aWxpdHlMZXZlbCgpOwogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIERGRzo6Q2Fubm90
Q29tcGlsZToKICAgICAgICAgbV9jYW5CZU9wdGltaXplZCA9IGZhbHNlOwotICAgICAgICBtX2Nh
bkJlT3B0aW1pemVkT3JJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIG1fc2hvdWxkRW1pdFByb2Zp
bGluZyA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZToK
ICAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZUFuZElubGluZToKICAgICAgICAgbV9jYW5CZU9wdGlt
aXplZCA9IHRydWU7Ci0gICAgICAgIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQgPSB0cnVlOwog
ICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0cnVlOwogICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChtX2NvZGVCbG9jay0+Y29kZVR5cGUo
KSkgewotICAgIGNhc2UgR2xvYmFsQ29kZToKLSAgICBjYXNlIE1vZHVsZUNvZGU6Ci0gICAgY2Fz
ZSBFdmFsQ29kZToKLSAgICAgICAgbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
ID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRnVuY3Rpb25Db2RlOgotICAgICAg
ICAvLyBXZSBjb3VsZCBoYXZlIGFscmVhZHkgc2V0IGl0IHRvIGZhbHNlIGJlY2F1c2Ugd2UgZGV0
ZWN0ZWQgYW4gdW5pbmxpbmVhYmxlIGNhbGwuCi0gICAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRo
YXQgb2JzZXJ2YXRpb24uCi0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5s
aW5lZCAmPSBjYW5JbmxpbmUobGV2ZWwpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbihtX2Nv
ZGVCbG9jayk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICAgIGlmIChtX2NvZGVCbG9jay0+
bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX2NvZGVCbG9jay0+bnVtYmVy
T2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSkgewotICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAobV9jb2Rl
QmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBt
X2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3dpdGNoSnVtcFRhYmxlcyA9IEZp
eGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRT
d2l0Y2hKdW1wVGFibGVzKCkpOwotICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5s
aW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+
ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IEZpeGVkVmVj
dG9yPFN0cmluZ0p1bXBUYWJsZT4obV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGVzKCkpOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJP
ZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJl
ck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKKyAgICAgICAgaWYgKG1fdW5s
aW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAg
ICAgICAgICBtX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+
KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkp
OworICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMoKSkKKyAgICAgICAgICAgIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
cyA9IEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+bnVt
YmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7CiAgICAgfQogCi0gICAgaWYg
KFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpIHx8IChtX3ZtLT5tX3BlckJ5dGVj
b2RlUHJvZmlsZXIgJiYgT3B0aW9uczo6ZGlzYXNzZW1ibGVCYXNlbGluZUZvclByb2ZpbGVyKCkp
KSkKLSAgICAgICAgbV9kaXNhc3NlbWJsZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4o
bV9jb2RlQmxvY2spOworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHko
KSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxl
QmFzZWxpbmVGb3JQcm9maWxlcigpKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IGJ1aWxkIGEgZGlz
YXNzZW1ibGVyIG9mZiBvZiBVbmxpbmtlZENvZGVCbG9jay4KKyAgICAgICAgbV9kaXNhc3NlbWJs
ZXIgPSBtYWtlVW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9wcm9maWxlZENvZGVCbG9jayk7Cisg
ICAgfQogICAgIGlmIChVTkxJS0VMWShtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpKSB7Cisg
ICAgICAgIC8vIEZJWE1FOiBidWlsZCBwcm9maWxlciBkaXNhc3NlbWJsZXIgb2ZmIFVubGlua2Vk
Q29kZUJsb2NrLgogICAgICAgICBtX2NvbXBpbGF0aW9uID0gYWRvcHRSZWYoCiAgICAgICAgICAg
ICBuZXcgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKAotICAgICAgICAgICAgICAgIG1fdm0tPm1fcGVy
Qnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKG1fY29kZUJsb2NrKSwKKyAgICAg
ICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zv
cihtX3Byb2ZpbGVkQ29kZUJsb2NrKSwKICAgICAgICAgICAgICAgICBQcm9maWxlcjo6QmFzZWxp
bmUpKTsKLSAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2spOworICAgICAgICBtX2NvbXBpbGF0
aW9uLT5hZGRQcm9maWxlZEJ5dGVjb2RlcygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBt
X3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgbV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgoMCkp
KTsKQEAgLTc0MiwxMSArNzQyLDEyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRG
aW5hbGl6aW4KICAgICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwot
ICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBG
dW5jdGlvbkNvZGUpCisgICAgICAgIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZSgp
OwogCiAgICAgTGFiZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAotICAgIGludCBmcmFtZVRvcE9mZnNl
dCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
OworICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVT
aXplID0gLWZyYW1lVG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVUb3BP
ZmZzZXQpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOwogICAgIEp1bXBMaXN0IHN0YWNrT3Zl
cmZsb3c7CkBAIC03NTcsMTYgKzc1OCwyMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRo
b3V0RmluYWxpemluCiAgICAgbW92ZShyZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBlbWl0U2F2ZUNhbGxlZVNhdmVz
KCk7CisgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6Omxs
aW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgIGVtaXRNYXRlcmlhbGl6ZVRh
Z0NoZWNrUmVnaXN0ZXJzKCk7CisgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFu
dFBvb2xSZWdpc3RlcnMoKTsKIAotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBG
dW5jdGlvbkNvZGUpIHsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9
PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwotICAg
ICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
OyArK2FyZ3VtZW50KSB7CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkgJiYgKCFt
X3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgfHwgbV91bmxpbmtlZENvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpID4gMSkpIHsKKyAgICAgICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZy
YW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDIpOworICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1
ZVByb2ZpbGVzKCkgKyBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+OjpvZmZzZXRPZlN0b3JhZ2Uo
KSksIHJlZ1QyKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFy
Z3VtZW50IDwgbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50
KSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdl
IHdhbnQgdG8gcHV0IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCiAgICAgICAgICAgICAg
ICAgLy8ga2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQg
dG8gcmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCisgICAgICAgICAgICAgICAgaWYgKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxs
RnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC03NzcsMTIg
Kzc4MiwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAg
ICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKTsKICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdp
c3Rlciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBy
ZXN1bHRSZWdzLnRhZ0dQUigpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUobV9jb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZ3VtZW50
KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdzLCBB
ZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpICsgVmFsdWVQcm9m
aWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2RlQmxv
Y2stPmppdFR5cGUoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX3By
b2ZpbGVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXplTWFy
a2VyKSkKICAgICAgICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92ZSgq
c2l6ZU1hcmtlciksICp0aGlzKTsKQEAgLTc5OSwyNCArODA0LDI3IEBAIHZvaWQgSklUOjpjb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29k
ZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNhbGxPcGVy
YXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNr
T3ZlcmZsb3dFcnJvciwgbV9jb2RlQmxvY2spOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaywgcmVnVDApOworICAgIGNhbGxPcGVyYXRp
b25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3Zl
cmZsb3dFcnJvciwgcmVnVDApOwogCiAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJz
IGlzIDEsIHdlIG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCi0gICAgYm9vbCByZXF1aXJlc0Fy
aXR5Rml4dXAgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7Ci0gICAgaWYgKG1f
Y29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4
dXApIHsKKyAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fdW5saW5rZWRDb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSAhPSAxOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb2Rl
VHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKICAgICAgICAg
bV9hcml0eUNoZWNrID0gbGFiZWwoKTsKLSAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwg
Jm1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7CisKICAgICAgICAgZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29k
ZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOworICAgICAgICBlbWl0UHV0Q29kZUJs
b2NrVG9GcmFtZUluUHJvbG9ndWUocmVnVDApOworICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMy
KDApLCBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxp
bmVkKCkpKTsKIAogICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QxKTsKLSAgICAgICAgYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMp
KS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CisgICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCkpKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CiAKICAgICAgICAgbV9ieXRlY29kZUluZGV4
ID0gQnl0ZWNvZGVJbmRleCgwKTsKIAogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxp
bnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2Vw
dGlvbihtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJp
dHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihtX3VubGlua2VkQ29kZUJsb2NrLT5pc0Nv
bnN0cnVjdG9yKCkgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2Fs
bEFyaXR5Q2hlY2ssIGFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbCkKICAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJy
YW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMp
OwpAQCAtODM5LDcgKzg0Nyw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW4KICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKICAg
ICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKLSAgICBtX2xpbmtCdWZm
ZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4obmV3IExpbmtCdWZmZXIoKnRoaXMsIG1f
Y29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNlbGluZUpJVCwgZWZmb3J0KSk7Cisg
ICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVm
ZmVyKCp0aGlzLCBtX3VubGlua2VkQ29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpCYXNl
bGluZUpJVCwgZWZmb3J0KSk7CiAgICAgbGluaygpOwogfQogCkBAIC04NTgsOCArODY2LDggQEAg
dm9pZCBKSVQ6OmxpbmsoKQogICAgICAgICBzd2l0Y2ggKHJlY29yZC50eXBlKSB7CiAgICAgICAg
IGNhc2UgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgU3dpdGNoUmVjb3Jk
OjpDaGFyYWN0ZXI6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxl
JiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25z
dCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUlu
ZGV4XTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVj
b3JkLmRlZmF1bHRPZmZzZXRdKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGog
PCB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewogICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzW2pd
OwpAQCAtODcxLDggKzg3OSw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2UgU3dpdGNoUmVjb3JkOjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbnN0IFVubGlu
a2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU3RyaW5nSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICAgICAg
ICAgIGF1dG8gY3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJU
YWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKICAg
ICAgICAgICAgIGZvciAoYXV0byYgbG9jYXRpb24gOiB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFi
bGUudmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsb2NhdGlv
bi5tX2JyYW5jaE9mZnNldDsKQEAgLTkwNiw2ICs5MTQsMjcgQEAgdm9pZCBKSVQ6OmxpbmsoKQog
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhyZWNvcmQuZnJvbSwgcmVjb3JkLmNhbGxlZSk7
CiAgICAgfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBhdXRvIGZpbmFsaXplSUNzID0gWyZd
IChhdXRvJiBnZW5lcmF0b3JzKSB7CisgICAgICAgIGZvciAoYXV0byYgZ2VuIDogZ2VuZXJhdG9y
cykgeworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+c3RhcnQgPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihnZW4ubV9zdGFydCk7CisgICAg
ICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGdlbi5tX2RvbmUpOworICAgICAgICAgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc2xvd1BhdGhCZWdpbik7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkcyk7CisgICAg
ZmluYWxpemVJQ3MobV9nZXRCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHNXaXRo
VGhpcyk7CisgICAgZmluYWxpemVJQ3MobV9wdXRCeUlkcyk7CisgICAgZmluYWxpemVJQ3MobV9w
dXRCeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1fZGVsQnlJZHMpOworICAgIGZpbmFsaXplSUNz
KG1fZGVsQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlJZHMpOworICAgIGZpbmFsaXpl
SUNzKG1faW5CeVZhbHMpOworICAgIGZpbmFsaXplSUNzKG1faW5zdGFuY2VPZnMpOworICAgIGZp
bmFsaXplSUNzKG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMpOworI2Vsc2UKICAgICBmaW5hbGl6ZUlu
bGluZUNhY2hlcyhtX2dldEJ5SWRzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVD
YWNoZXMobV9nZXRCeVZhbHMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX2dldEJ5SWRzV2l0aFRoaXMsIHBhdGNoQnVmZmVyKTsKQEAgLTkxNywyMSArOTQ2LDI1IEBA
IHZvaWQgSklUOjpsaW5rKCkKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX2luQnlWYWxzLCBw
YXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbnN0YW5jZU9mcywgcGF0
Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fcHJpdmF0ZUJyYW5kQWNjZXNz
ZXMsIHBhdGNoQnVmZmVyKTsKKyNlbmRpZgogCiAgICAgZm9yIChhdXRvJiBjb21waWxhdGlvbklu
Zm8gOiBtX2NhbGxDb21waWxhdGlvbkluZm8pIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICBVbmxpbmtlZENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8udW5saW5rZWRD
YWxsTGlua0luZm87CisgICAgICAgIGluZm8uZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uZG9uZUxvY2F0aW9uKTsK
KyNlbHNlCiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9ICpjb21waWxhdGlvbkluZm8uY2Fs
bExpbmtJbmZvOwogICAgICAgICBpbmZvLnNldENvZGVMb2NhdGlvbnMoCiAgICAgICAgICAgICBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5z
bG93UGF0aFN0YXJ0KSwKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRl
cm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbikpOworI2VuZGlmCisKICAg
ICB9CiAKLSAgICB7Ci0gICAgICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVy
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZz
ZXQgPCBtX2xhYmVscy5zaXplKCk7ICsrYnl0ZWNvZGVPZmZzZXQpIHsKLSAgICAgICAgICAgIGlm
IChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBqaXRD
b2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRd
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAoaml0Q29k
ZU1hcEJ1aWxkZXIuZmluYWxpemUoKSk7CisgICAgSklUQ29kZU1hcEJ1aWxkZXIgaml0Q29kZU1h
cEJ1aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2Rl
T2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgIGlm
IChtX2xhYmVsc1tieXRlY29kZU9mZnNldF0uaXNTZXQoKSkKKyAgICAgICAgICAgIGppdENvZGVN
YXBCdWlsZGVyLmFwcGVuZChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSwgcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldF0pKTsK
ICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkpKSB7
CkBAIC05NDAsMjYgKzk3Myw0MiBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgfQogCiAgICAgaWYg
KFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7CisgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgd2Ug
bWFrZSB0aGUgYnl0ZWNvZGUgcHJvZmlsZXIga25vdyBhYm91dCBVbmxpbmtlZENvZGVCbG9jaz8K
ICAgICAgICAgaWYgKE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKQog
ICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnJlcG9ydFRvUHJvZmlsZXIobV9jb21waWxhdGlv
bi5nZXQoKSwgcGF0Y2hCdWZmZXIpOwotICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmls
ZXItPmFkZENvbXBpbGF0aW9uKG1fY29kZUJsb2NrLCAqbV9jb21waWxhdGlvbik7CisgICAgICAg
IG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+YWRkQ29tcGlsYXRpb24obV9wcm9maWxlZENv
ZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOwogICAgIH0KIAogICAgIGlmIChtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlci5kaWRCdWlsZE1hcHBpbmcoKSkKICAgICAgICAgbV9wY1RvQ29kZU9yaWdp
bk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFdURk1vdmUobV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIpLCBwYXRjaEJ1ZmZlcik7CiAgICAgCisgICAgLy8gRklYTUU6IE1ha2Ug
YSB2ZXJzaW9uIG9mIENvZGVCbG9ja1dpdGhKSVRUeXBlIHRoYXQga25vd3MgYWJvdXQgVW5saW5r
ZWRDb2RlQmxvY2suCiAgICAgQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiByZXN1bHQgPSBGSU5BTEla
RV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAgICAgICAgIkJh
c2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZSht
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpKS5kYXRhKCkpOworICAgICAgICAiQmFz
ZWxpbmUgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1f
cHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKICAgICAK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gd2l0aEFyaXR5Q2hlY2sg
PSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fYXJpdHlDaGVjayk7Ci0g
ICAgbV9qaXRDb2RlID0gYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFy
aXR5Q2hlY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSk7CisgICAgbV9qaXRDb2RlID0gYWRvcHRS
ZWYoKm5ldyBCYXNlbGluZUpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaykpOworCisgICAg
bV9qaXRDb2RlLT5tX3VubGlua2VkQ2FsbHMgPSBXVEZNb3ZlKG1fdW5saW5rZWRDYWxscyk7Cisg
ICAgbV9qaXRDb2RlLT5tX2V2YWxDYWxsTGlua0luZm9zID0gV1RGTW92ZShtX2V2YWxDYWxsTGlu
a0luZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fdW5saW5rZWRTdHViSW5mb3MgPSBXVEZNb3ZlKG1f
dW5saW5rZWRTdHViSW5mb3MpOworICAgIG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzID0g
V1RGTW92ZShtX3N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1faml0Q29kZS0+bV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAgIG1f
aml0Q29kZS0+bV9qaXRDb2RlTWFwID0gaml0Q29kZU1hcEJ1aWxkZXIuZmluYWxpemUoKTsKKyAg
ICBtX2ppdENvZGUtPmFkb3B0TWF0aElDcyhtX21hdGhJQ3MpOworICAgIG1faml0Q29kZS0+bV9j
b25zdGFudFBvb2wgPSBXVEZNb3ZlKG1fY29uc3RhbnRQb29sKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIG1faml0Q29kZS0+bV9pc1NoYXJlYWJsZSA9IG1faXNTaGFyZWFibGU7CisjZWxzZQor
ICAgIG1faml0Q29kZS0+bV9pc1NoYXJlYWJsZSA9IGZhbHNlOworI2VuZGlmCiAKICAgICBpZiAo
SklUSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNv
ZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxl
TWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnko
KS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CisgICAgICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVk
IGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV91bmxpbmtlZENvZGVCbG9jaywgcmVzdWx0
LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZXN1bHQuZXhlY3V0
YWJsZU1lbW9yeSgpLT5lbmQoKS51bnRhZ2dlZFB0cigpKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1
bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZCgpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OmZp
bmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogCkBAIC05NjgsMjUgKzEwMTcsMTQgQEAg
Q29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocgogCiAgICAgbV9saW5rQnVm
ZmVyLT5ydW5NYWluVGhyZWFkRmluYWxpemF0aW9uVGFza3MoKTsKIAotICAgIHsKLSAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAg
bV9jb2RlQmxvY2stPnNocmlua1RvRml0KGxvY2tlciwgQ29kZUJsb2NrOjpTaHJpbmtNb2RlOjpM
YXRlU2hyaW5rKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29kZUJs
b2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7ICsraSkgewotICAgICAgICBIYW5kbGVy
SW5mbyYgaGFuZGxlciA9IG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyKGkpOwotICAgICAg
ICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzM5NDMzMzE4Pi4KLSAgICAgICAgaGFuZGxlci5u
YXRpdmVDb2RlID0gbV9jb2RlQmxvY2stPmppdENvZGVNYXAoKS5maW5kKEJ5dGVjb2RlSW5kZXgo
aGFuZGxlci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOwotICAg
IH0KLQogICAgIGlmIChtX3BjVG9Db2RlT3JpZ2luTWFwKQotICAgICAgICBtX2NvZGVCbG9jay0+
c2V0UENUb0NvZGVPcmlnaW5NYXAoV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwKSk7CisgICAg
ICAgIG1faml0Q29kZS0+bV9wY1RvQ29kZU9yaWdpbk1hcCA9IFdURk1vdmUobV9wY1RvQ29kZU9y
aWdpbk1hcCk7CiAKICAgICBtX3ZtLT5tYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9y
QmFzZWxpbmVKSVQtPmFkZCgKICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2ppdENvZGUt
PnNpemUoKSkgLwotICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnNTaXplKCkpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnNTaXplKCkpKTsKIAotICAgIG1fY29kZUJsb2NrLT5zZXRK
SVRDb2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBjb2RlQmxvY2stPnNldHVw
V2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAog
ICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CkBAIC05OTgsMTEgKzEwMzYsMTEg
QEAgc2l6ZV90IEpJVDo6Y29kZVNpemUoKSBjb25zdAogICAgIHJldHVybiBtX2xpbmtCdWZmZXIt
PnNpemUoKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSVRD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVD
b21waWxlKENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiB7CiAgICAgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgY29t
cGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhlZmZvcnQpOwotICAgIHJldHVybiBmaW5hbGl6
ZU9uTWFpblRocmVhZCgpOworICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZChjb2RlQmxv
Y2spOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCkBA
IC0xMDQyLDE4ICsxMDgwLDI4IEBAIHZvaWQgSklUOjpkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJl
Zm9yZUMKICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVz
KCptX3ZtLCAiUHJlcGFyaW5nIGZvciBKSVQgY29tcGlsYXRpb24uIl9zKTsKIH0KIAotdW5zaWdu
ZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit1bnNp
Z25lZCBKSVQ6OmZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENvZGVCbG9jayogY29kZUJs
b2NrKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1D
YWxsZWVMb2NhbHMoKSkgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bUNhbGxlZUxv
Y2FscygpKSkpOwogCiAgICAgcmV0dXJuIHJvdW5kTG9jYWxSZWdpc3RlckNvdW50Rm9yRnJhbWVQ
b2ludGVyT2Zmc2V0KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkgKyBtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKTsKIH0KIAotaW50IEpJVDo6c3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lz
dGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGZyYW1lUmVn
aXN0ZXJDb3VudEZvcihjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworfQorCitpbnQg
SklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoZnJhbWVSZWdpc3RlckNvdW50
Rm9yKGNvZGVCbG9jaykgLSAxKS5vZmZzZXQoKTsKIH0KIAoraW50IEpJVDo6c3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBzdGFja1BvaW50
ZXJPZmZzZXRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKwogSGFzaE1h
cDxDU3RyaW5nLCBTZWNvbmRzPiBKSVQ6OmNvbXBpbGVUaW1lU3RhdHMoKQogewogICAgIEhhc2hN
YXA8Q1N0cmluZywgU2Vjb25kcz4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAKICNkZWZpbmUgQVNTRVJUX0pJVF9PRkZT
RVQoYWN0dWFsLCBleHBlY3RlZCkgQVNTRVJUX1dJVEhfTUVTU0FHRShhY3R1YWwgPT0gZXhwZWN0
ZWQsICJKSVQgT2Zmc2V0IFwiJXNcIiBzaG91bGQgYmUgJWQsIG5vdCAlZC5cbiIsICNleHBlY3Rl
ZCwgc3RhdGljX2Nhc3Q8aW50PihleHBlY3RlZCksIHN0YXRpY19jYXN0PGludD4oYWN0dWFsKSk7
CiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIK
ICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJKSVREaXNhc3NlbWJsZXIu
aCIKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJK
SVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKKyNp
bmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2lu
Y2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CkBAIC0x
NDksMTQgKzE1MSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgc3RydWN0IENh
bGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1Bh
dGhTdGFydDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGRvbmVMb2NhdGlvbjsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBVbmxpbmtlZENhbGxMaW5rSW5mbyogdW5saW5rZWRD
YWxsTGlua0luZm87CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJ
bmZvQ29uc3RhbnQ7CisjZWxzZQorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc2xvd1Bh
dGhTdGFydDsKICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CisjZW5kaWYKICAg
ICB9OwogCiAgICAgdm9pZCBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVz
c1B0ciwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7CiAK
LSAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHByaXZhdGUgSlNJbnRlcmZhY2VK
SVQgeworICAgIGNsYXNzIEpJVF9DTEFTU19BTElHTk1FTlQgSklUIDogcHVibGljIEpTSW50ZXJm
YWNlSklUIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFNsb3dQYXRoQ2FsbDsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEpJVFN0dWJDYWxsOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUVGh1bmtz
OwpAQCAtMTcxLDYgKzE3OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyB3aWxsIGNv
bXByZXNzIHRoZSBkaXNwbGFjZW1lbnQsIGFuZCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGEg
cGF0Y2hlZCBvZmZzZXQuCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHBhdGNoUHV0QnlJ
ZERlZmF1bHRPZmZzZXQgPSAyNTY7CiAKKyAgICAgICAgdXNpbmcgQmFzZSA9IEpTSW50ZXJmYWNl
SklUOworCiAgICAgcHVibGljOgogICAgICAgICBKSVQoVk0mLCBDb2RlQmxvY2sqID0gbnVsbHB0
ciwgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCA9IEJ5dGVjb2RlSW5k
ZXgoMCkpOwogICAgICAgICB+SklUKCk7CkBAIC0xNzgsMjggKzE4NywzMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgVk0mIHZtKCkgeyByZXR1cm4gKkpTSW50ZXJmYWNlSklUOjp2bSgpOyB9
CiAKICAgICAgICAgdm9pZCBjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBp
bGF0aW9uRWZmb3J0KTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemVPbk1haW5U
aHJlYWQoKTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemVPbk1haW5UaHJlYWQo
Q29kZUJsb2NrKik7CiAgICAgICAgIHNpemVfdCBjb2RlU2l6ZSgpIGNvbnN0OwogCiAgICAgICAg
IHZvaWQgZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCk7CiAgICAgICAgIAog
ICAgICAgICBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsIEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gSklUKHZtLCBjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KS5wcml2YXRlQ29tcGls
ZShlZmZvcnQpOworICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29k
ZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoY29kZUJsb2NrLCBlZmZvcnQpOwogICAgICAgICB9CiAK
KyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihVbmxpbmtlZENv
ZGVCbG9jayopOwogICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9y
KENvZGVCbG9jayopOworICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNldEZvcihV
bmxpbmtlZENvZGVCbG9jayopOwogICAgICAgICBzdGF0aWMgaW50IHN0YWNrUG9pbnRlck9mZnNl
dEZvcihDb2RlQmxvY2sqKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSGFz
aE1hcDxDU3RyaW5nLCBTZWNvbmRzPiBjb21waWxlVGltZVN0YXRzKCk7CiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBTZWNvbmRzIHRvdGFsQ29tcGlsZVRpbWUoKTsKIAorICAgICAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzX21ldGFkYXRhR1BSID0gTExJbnQ6OlJlZ2lzdGVy
czo6bWV0YWRhdGFUYWJsZUdQUjsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19j
b25zdGFudHNHUFIgPSBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUjsKKwogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpOwogICAgICAgICB2b2lkIHByaXZh
dGVDb21waWxlTGlua1Bhc3MoKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVNsb3dDYXNl
cygpOwogICAgICAgICB2b2lkIGxpbmsoKTsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJp
dmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQpOworICAgICAgICBDb21waWxhdGlvblJl
c3VsdCBwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqLCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAK
ICAgICAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNl
cHRpb24gY2hlY2suCiAgICAgICAgIENhbGwgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uKQpAQCAtMjIzLDYgKzIzNywzMiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5
dGVjb2RlPgorICAgICAgICB2b2lkIGxvYWRQdHJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUm
LCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkMzJGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUm
LCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkOEZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYs
IHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZh
bHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgc3RvcmU4VG9NZXRhZGF0
YShWYWx1ZVR5cGUsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlMzJUb01ldGFk
YXRhKEdQUlJlZywgY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0KTsKKworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbWF0ZXJpYWxpemVQb2lu
dGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsK
KworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBsb2FkQ29uc3RhbnQodW5zaWduZWQgY29uc3Rh
bnRJbmRleCwgR1BSUmVnKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGxvYWRHbG9iYWxP
YmplY3QoR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVh
bFJlZ2lzdGVyLCBHUFJSZWcpOworCisgICAgICAgIHZvaWQgZW1pdFB1dENvZGVCbG9ja1RvRnJh
bWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdUMCk7CisKICAgICAgICAgdm9pZCBleGNl
cHRpb25DaGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1f
ZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9IYW5kbGVyKTsKQEAgLTI1NCw2ICsyOTQsMTkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChjb25zdCBJbnN0
cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNh
bGxMaW5rSW5mb0luZGV4KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KKyAgICAgICAgc3RkOjplbmFibGVfaWZfdDwKKyAgICAgICAgICAgIE9wOjpv
cGNvZGVJRCAhPSBvcF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVj
dF92YXJhcmdzCisgICAgICAgICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwor
ICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiwgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCk7CisKKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CisgICAgICAgICAgICBPcDo6
b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1
Y3RfdmFyYXJncworICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMK
KyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworI2Vsc2UKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgICAgICAg
ICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9j
b25zdHJ1Y3RfdmFyYXJncwpAQCAtMjY1LDkgKzMxOCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlE
ID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCiAgICAgICAgICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3
YXJkX2FyZ3VtZW50cwogICAgICAgICAsIHZvaWQ+IGNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9w
JiwgQ2FsbExpbmtJbmZvKik7CisjZW5kaWYKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KLSAgICAgICAgYm9vbCBjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8q
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisgICAgICAgIGJvb2wgY29tcGlsZVRhaWxD
YWxsKGNvbnN0IE9wJiwgVW5saW5rZWRDYWxsTGlua0luZm8qLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCk7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgogICAgICAgICBib29sIGNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpOwogICAg
ICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtMjg3LDE0ICszNDEsMTMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0
ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CiAgICAg
ICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIo
SlNDZWxsKiBvd25lcik7CisgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3du
ZXIpOwogCiAgICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZSB0byBwcm9maWxl
IGlzIGluIHJlZ1QwIGFuZCB0aGF0IHJlZ1QzIGlzIGF2YWlsYWJsZSBmb3IKICAgICAgICAgLy8g
c2NyYXRjaC4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB2b2lkIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoVmFsdWVQcm9maWxlJiwgR1BSUmVnKTsKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEpTVmFsdWVSZWdzKTsKLSAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0
YSYsIEdQUlJlZyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CisgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29u
c3QgQnl0ZWNvZGUmLCBHUFJSZWcpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29k
ZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgSlNWYWx1ZVJl
Z3MpOwogI2Vsc2UKICAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJv
ZmlsZSYsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+
IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYsIEpTVmFsdWVSZWdzKTsKQEAg
LTMwNSw4ICszNTgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQ
cm9maWxlPjo6dmFsdWUsIHZvaWQ+CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlBy
b2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsKIAotICAgICAgICB2b2lkIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZSosIFJlZ2lz
dGVySUQgc2NyYXRjaEdQUik7Ci0gICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJl
Z2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29k
ZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0
ZWNvZGUmLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmLCBwdHJkaWZmX3QsIFJlZ2lzdGVy
SUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3ApOwpAQCAtNTkzLDcgKzY0
OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0
IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYyNywxNCArNjgxLDE0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKIAog
ICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBl
KTsKLSAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwg
QWNjZXNzVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdp
c3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHks
IEFjY2Vzc1R5cGUpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlD
aGVjayhSZXNvbHZlVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CisgICAgICAgIHZvaWQgZW1pdFZh
clJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKTsKICAgICAgICAg
dm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7
CiAgICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKICNpZiBVU0UoSlNWQUxVRTY0KQpA
QCAtNjQ2LDcgKzcwMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIHZvaWQg
ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFu
ZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKLSAgICAg
ICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoR1BSUmVnIHBvaW50ZXJUb1NldCk7CisgICAgICAgIHZv
aWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKICAgICAg
ICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKQEAgLTY1NSw2ICs3MDksNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdp
c3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICAgICAgYm9vbCBpc0tub3duQ2Vs
bChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZChW
aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3Rlcik7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxS
ZWdpc3Rlcik7CkBAIC02NzYsMTMgKzczMSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRf
YnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlz
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcihWTSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0
X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV9pZF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5l
cmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZN
Jik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdl
bmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJf
aGFuZGxlckdlbmVyYXRvcihWTSYpOwpAQCAtNjk2LDMwICs3NDksMTMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICByZXR1cm4gIShyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZh
cik7CiAgICAgICAgIH0KIAotI2RlZmluZSBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRP
UihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3Io
Vk0mKTsKLSAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFQ0xBUkVfR0VUX0ZST01fU0NP
UEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0K
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9w
R2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0K
LSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2Nv
cGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1v
ZHVsZVZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4g
dXNlIGEgdGh1bmsuCi0gICAgICAgICAgICAvLyBSZXNvbHZlZENsb3N1cmVWYXIgYmVjYXVzZSB3
ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9yZXNvbHZlX3Njb3BlLgotICAgICAgICAg
ICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyIHx8IHJlc29sdmVU
eXBlID09IE1vZHVsZVZhcik7Ci0gICAgICAgIH0KLQotI2RlZmluZSBERUNMQVJFX1JFU09MVkVf
U0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlw
ZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJF
X1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFQ0xBUkVfUkVTT0xWRV9TQ09QRV9H
RU5FUkFUT1IKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1
bmtOYW1lKTsKLQogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3Io
Vk0mKTsKIAorICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcmVzb2x2ZV9z
Y29wZUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mLCBzdGQ6Om9w
dGlvbmFsPFJlc29sdmVUeXBlPiwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKyAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29s
dmVTY29wZVRodW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIq
IHRodW5rTmFtZSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICAg
ICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQpAQCAtNzYwLDEwICs3OTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihj
b25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29u
c3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7
CiAgICAgICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1
bHQoQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7Ci0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwg
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotICAgICAgICB2b2lkIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0
YWRhdGEmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3Qg
Qnl0ZWNvZGUmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAg
ICAgIHZvaWQgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRo
UHJvZmlsZShjb25zdCBCeXRlY29kZSYsIEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQp
OwogICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlw
ZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxP
cGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KQEAgLTgyMSwy
MCArODU3LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQp
KTsKICAgICAgICAgfQogCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBl
bmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJn
cz4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBl
Pjo6aGFzUmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbD4KLSAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgT3BlcmF0aW9uVHlwZSBvcGVyYXRpb24s
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgT3BlcmF0aW9uVHlwZSBv
cGVyYXRpb24sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAg
ewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7Ci0g
ICAgICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZXN1bHRXaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICAgICAgfQogCi0gICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lIE1ldGFkYXRhLCB0
eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBl
LCB0eXBlbmFtZSBCeXRlY29kZSwgdHlwZW5hbWUuLi4gQXJncz4KICAgICAgICAgc3RkOjplbmFi
bGVfaWZfdDxGdW5jdGlvblRyYWl0czxPcGVyYXRpb25UeXBlPjo6aGFzUmVzdWx0LCB2b2lkPgot
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRy
ZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBBZGRy
ZXNzIHRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAg
ICB7CiAgICAgICAgICAgICBzZXR1cEFyZ3VtZW50c0ZvckluZGlyZWN0Q2FsbDxPcGVyYXRpb25U
eXBlPih0YXJnZXQsIGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIEFkZHJl
c3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CisgICAgICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShieXRlY29kZSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQu
b2Zmc2V0KSwgcmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CkBAIC05MTksMjUgKzk1NSwyMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBib29sIGNhbkJl
T3B0aW1pemVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZDsgfQotICAgICAgICBib29sIGNh
bkJlT3B0aW1pemVkT3JJbmxpbmVkKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZE9ySW5saW5l
ZDsgfQogICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcoKSB7IHJldHVybiBtX3Nob3Vs
ZEVtaXRQcm9maWxpbmc7IH0KICNlbHNlCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7
IHJldHVybiBmYWxzZTsgfQotICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkg
eyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgLy8gRW5hYmxlcyB1c2Ugb2YgdmFsdWUgcHJvZmls
ZXIgd2l0aCB0aWVyZWQgY29tcGlsYXRpb24gdHVybmVkIG9mZiwKICAgICAgICAgLy8gaW4gd2hp
Y2ggY2FzZSBhbGwgY29kZSBnZXRzIHByb2ZpbGVkLgogICAgICAgICBib29sIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBlbWl0
TWF0ZXJpYWxpemVNZXRhZGF0YUFuZENvbnN0YW50UG9vbFJlZ2lzdGVycygpOworCisgICAgICAg
IHZvaWQgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworCiAgICAgICAgIHN0YXRpYyBib29sIHJl
cG9ydENvbXBpbGVUaW1lcygpOwogICAgICAgICBzdGF0aWMgYm9vbCBjb21wdXRlQ29tcGlsZVRp
bWVzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB5b3UgbmVlZCB0byBjaGVjayBhIHZhbHVl
IGZyb20gdGhlIG1ldGFkYXRhIHRhYmxlIGFuZCB5b3UgbmVlZCBpdCB0bwotICAgICAgICAvLyBi
ZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFzdCBhbmQgc2xvdyBwYXRoLCB0aGVuIHlvdSB3YW50
IHRvIHVzZSB0aGlzLgotICAgICAgICAvLyBJdCB3aWxsIGdpdmUgdGhlIHNsb3cgcGF0aCB0aGUg
c2FtZSB2YWx1ZSByZWFkIGJ5IHRoZSBmYXN0IHBhdGguCi0gICAgICAgIEdldFB1dEluZm8gY29w
aWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBC
aW5hcnlPcD4KLSAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlIGNvcGllZEFyaXRoUHJvZmlsZShC
aW5hcnlPcCk7CisKKyAgICAgICAgdm9pZCByZXNldFNQKCk7CiAKICAgICAgICAgSW50ZXJwcmV0
ZXIqIG1faW50ZXJwcmV0ZXI7CiAKQEAgLTk2NCw5ICs5OTcsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgVmVjdG9yPFNsb3dDYXNlRW50cnk+IG1fc2xvd0Nhc2VzOwogICAgICAgICBWZWN0
b3I8U3dpdGNoUmVjb3JkPiBtX3N3aXRjaGVzOwogCi0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQs
IHVuc2lnbmVkPiBtX2NvcGllZEdldFB1dEluZm9zOwotICAgICAgICBIYXNoTWFwPHVpbnQ2NF90
LCBCaW5hcnlBcml0aFByb2ZpbGU+IG1fY29waWVkQXJpdGhQcm9maWxlczsKLQogICAgICAgICBK
dW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25D
aGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQpAQCAtMTAwMCwxMSArMTAzMCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGFzaE1h
cDxjb25zdCBJbnN0cnVjdGlvbiosIFVuaXF1ZVJlZjxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+PiBt
X2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGU7CiAKICAgICAgICAgYm9vbCBtX2Nh
bkJlT3B0aW1pemVkOwotICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7CiAg
ICAgICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogICAgICAgICBCeXRlY29kZUluZGV4
IG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleDsKIAotICAgICAgICBSZWZQdHI8RGlyZWN0SklU
Q29kZT4gbV9qaXRDb2RlOworICAgICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRDb2RlQmxvY2sg
eyBudWxscHRyIH07CisgICAgICAgIFVubGlua2VkQ29kZUJsb2NrKiBtX3VubGlua2VkQ29kZUJs
b2NrIHsgbnVsbHB0ciB9OworCisgICAgICAgIE1hdGhJQ0hvbGRlciBtX21hdGhJQ3M7CisgICAg
ICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1faml0Q29kZTsKKworICAgICAgICBKSVRDb25z
dGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgbV9nbG9iYWxPYmplY3RDb25zdGFudCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSB9OworICAgICAgICBCYWc8VW5saW5rZWRDYWxsTGlua0luZm8+IG1fdW5saW5rZWRD
YWxsczsKKyAgICAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAg
ICAgICAgQmFnPFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8+IG1fdW5saW5rZWRTdHViSW5mb3M7
CisgICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVz
OworICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlczsKKworICAgICAgICBzdHJ1Y3QgTm90QUNvZGVCbG9jayB7IH0gbV9jb2RlQmxvY2s7
CisKKyAgICAgICAgYm9vbCBtX2lzU2hhcmVhYmxlIHsgdHJ1ZSB9OwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOSArMjkyLDEwIEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50
R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjIp
OworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFpl
cm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0zMjAsNyArMzIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJlZ1QxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
LCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNDYsNyArMzQ4LDggQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgICAgICB9CiAKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDIs
IHJlZ1QxKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKICAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzc1
LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaQogICAgIH0KIAog
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCi0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTU3Myw3ICs1NzcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3coY29uc3QgCiAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdU
MCk7CiAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTcxNyw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6ZW1p
dEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RyCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIFVuYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4o
KS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTmVnSUMqIG5l
Z2F0ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgVW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZWdhdGU+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Cisg
ICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9tYXRoSUNzLmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmls
ZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG5l
Z2F0ZUlDKTsKICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgYmV0dGVyIHRvIGNhbGwgdGhvc2Ug
b3BlcmF0aW9uVmFsdWVOZWdhdGUsIHNpbmNlIHRoZSBvcGVyYW5kIGNhbiBiZSBhIEJpZ0ludAog
ICAgIGVtaXRNYXRoSUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CkBA
IC04OTksOCArOTA0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVj
dAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRo
UHJvZmlsZTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMo
YXJpdGhQcm9maWxlKTsKKyAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9tYXRoSUNzLmFkZEpJ
VEFkZElDKGFyaXRoUHJvZmlsZSk7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9u
VmFsdWVBZGQpOwogfQpAQCAtOTQ1LDEwICs5NTAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNG
YXN0KEpJVFVuYXJ5TWF0aElDPAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJ
Qy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYg
KCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CiAgICAgICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNy
Y1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncyk7CisgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCBzY3JhdGNoR1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2Uo
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDE1LDEwICsxMDIx
LDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUMKICAgICAgICAg
ZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGxvYWRHbG9i
YWxPYmplY3Qoc2NyYXRjaEdQUik7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRG
dW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxl
ZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAgICBhZGRTbG93Q2FzZShtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAgLTEwNTUsMTMgKzEwNjIsMTQg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPAogI2VuZGlmCiAKICAg
ICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUo
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0
YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdzLCBhcml0aFByb2Zp
bGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHJlZ1Q0
LCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRl
cnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBzcmNSZWdz
LCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxK
X0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQs
IHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExMjAsMTMgKzExMjgs
MTQgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQwogI2VuZGlmCiAK
ICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9m
aWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmls
ZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9j
YXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRS
ZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
Yml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rp
b24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
YXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJ
VE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
VHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1B
VEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTY2LDcg
KzExNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAg
ICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgaWYgKHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxl
OworICAgICAgICBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2Pigp
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwogCiAgICAgU25p
cHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuZmlyc3QoKSk7
CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVz
LnNlY29uZCgpKTsKQEAgLTEyMTEsOCArMTIyMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihj
b25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxv
Y2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJVE11bElDKiBtdWxJQyA9
IG1fbWF0aElDcy5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25U
b01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zh
c3Q8T3BNdWw+KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KQEAgLTEyMjcsOCArMTIzNiw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
c3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1
Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUU3ViSUMq
IHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CisgICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U3ViPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAg
IEpJVFN1YklDKiBzdWJJQyA9IG1fbWF0aElDcy5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOwog
ICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7
CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BTdWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDI4MzA1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkK
IHsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSk7CiAgICAgZW1pdFN0b3JlKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBt
X2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDEsIHJl
Z1QwKTsKIH0KIApAQCAtMTU3LDcgKzE1Nyw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiBKSVQ6OmNv
bXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKIHsKICAg
ICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwog
ICAgIGludCBhcmdDb3VudCA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2Rl
LCBjaGVja3BvaW50KTsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50
PihzdGFja09mZnNldEluUmVnaXN0ZXJzRm9yQ2FsbChieXRlY29kZSwgY2hlY2twb2ludCkpOwog
CkBAIC0xOTIsNyArMTkyLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0
ZWNvZAogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2Fy
ZEFyZ3VtZW50czsKICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25T
aXplRnJhbWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCAtZmly
c3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICBjYWxsT3BlcmF0aW9uKHNp
emVPcGVyYXRpb24sIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0
KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7CiAg
ICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdU
MSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA2
ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTIw
Miw3ICsyMDIsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kCiAg
ICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJh
bWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFy
YXJnc0ZyYW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUNCksIGZpcnN0
VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwg
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhy
ZWdUMiwgcmVnVDQpLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgIG1vdmUocmV0dXJu
VmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50LgpA
QCAtMjMyLDEwICsyMzIsMTAgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENh
bGxFdgogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CiAg
ICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6
Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxs
RXZhbCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7
CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CiAKQEAgLTI0OSw3ICsy
NDksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BDYWxsRXZhbD4oKTsKLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CisgICAgQ2FsbExp
bmtJbmZvKiBpbmZvID0gbV9wcm9maWxlZENvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5m
bzo6Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1f
YXJndjsKQEAgLTI1OCw4ICsyNTgsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVv
ZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwg
cmVnVDApOwotICAgIGVtaXRWaXJ0dWFsQ2FsbCgqbV92bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCBpbmZvKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3Vs
dChieXRlY29kZSk7CkBAIC0yODYsMTEgKzI4NiwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChjb25zdCBJbnN0cnVjdGlvCiAgICAgKi8KICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxs
cHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBt
X2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7
CisgICAgICAgIGluZm8gPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKICAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29k
ZSwgaW5mbyk7CiAgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCiAgICAgCi0gICAgYXV0
byBieXRlY29kZUluZGV4ID0gbV9jb2RlQmxvY2stPmJ5dGVjb2RlSW5kZXgoaW5zdHJ1Y3Rpb24p
OworICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmJ5dGVjb2Rl
SW5kZXgoaW5zdHJ1Y3Rpb24pOwogICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRl
SW5kZXgoYnl0ZWNvZGVJbmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxv
Y2F0aW9uQml0cyksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpOwogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsgLy8gcmVnVDEsIHJl
Z1QwIGhvbGRzIGNhbGxlZS4KQEAgLTMyNCw3ICszMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKICAgICBt
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGxh
YmVsKCk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CiAKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zNDEs
MTIgKzM0MSwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluCiAg
ICAgfQogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAg
aWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAg
ICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwogICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5l
bWl0U2xvd1BhdGgoKm1fdm0sICp0aGlzKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7CkBAIC0zNTQsNyArMzUzLDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsK
QEAgLTM5NSw3ICszOTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0
IEluCiAgICAgSlNWYWx1ZVJlZ3MgbmV4dFJlZ3MgPSBKU1ZhbHVlUmVncyh0YWdOZXh0R1BSLCBw
YXlsb2FkTmV4dEdQUik7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssCisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssCiAgICAgICAgIEpJVFR5
cGU6OkJhc2VsaW5lSklULAogICAgICAgICBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksCiAg
ICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpKSwKQEAgLTQxMCw3ICs0MDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG5leHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBuZXh0UmVncyk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25leHQsIG5leHRSZWdzKTsK
IAogICAgIGZhc3RDYXNlLmxpbmsodGhpcyk7CkBAIC00NDAsMTAgKzQzOSwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ci0gICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgLy8gbWV0YWRhdGEKKyAg
ICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIC8vIG1ldGFkYXRh
CiAgICAgICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgLy8gb3BlcmF0aW9uCiAgICAgICAg
IG5leHRWUmVnLCAvLyByZXN1bHQKLSAgICAgICAgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCisgICAgICAgIFRydXN0ZWRJbW1QdHIobV9wcm9maWxl
ZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCiAgICAgICAgIGdlbi5zdHViSW5m
bygpLCAvLyBhcmcyCiAgICAgICAgIEpTVmFsdWVSZWdzKHRhZ0l0ZXJhdG9yR1BSLCBwYXlsb2Fk
SXRlcmF0b3JHUFIpLCAvLyBhcmczCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKQEAgLTQ1
Miw3ICs0NTEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAg
ICAgYXV0byBkb25lID0ganVtcCgpOwogCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1Q
dHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKIAogICAgIGRvbmUubGlu
ayh0aGlzKTsKIH0KQEAgLTQ2MCw3ICs0NTksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3Jfb3Blbihjb25zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgYXV0byogdHJ5RmFzdEZ1bmN0aW9uID0g
KFsmXSAoKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPndpZHRoKCkpIHsKICAgICAg
ICAgY2FzZSBOYXJyb3c6IHJldHVybiBpdGVyYXRvcl9uZXh0X3RyeV9mYXN0X25hcnJvdzsKQEAg
LTUwNiw3ICs1MDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
CiAgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHRhZ1ZhbHVlR1BSKTsKICAgICAgICAgcHJlc2Vy
dmVkUmVncy5hZGQocGF5bG9hZFZhbHVlR1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywKKyAgICAgICAgICAgIG1fcHJvZmlsZWRD
b2RlQmxvY2ssCiAgICAgICAgICAgICBKSVRUeXBlOjpCYXNlbGluZUpJVCwKICAgICAgICAgICAg
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgICAgIENhbGxTaXRlSW5kZXgo
Qnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwKQEAgLTUzMywxMCArNTMy
LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW4KICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDY7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Q3
OwogICAgICAgICBjb25zdCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGZhbHNlOwotICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0aHko
dm0oKSwgSlNWYWx1ZVJlZ3ModGFnRG9uZUdQUiwgcGF5bG9hZERvbmVHUFIpLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgSnVtcExpc3QgaXRl
cmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHRhZ0RvbmVHUFIs
IHBheWxvYWREb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgICAgIG1fY29kZUJsb2NrLAorICAgICAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywKICAg
ICAgICAgICAgIEpJVFR5cGU6OkJhc2VsaW5lSklULAogICAgICAgICAgICAgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLAogICAgICAgICAgICAgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4
KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLApAQCAtNTg4LDEwICs1ODcsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKIAogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoCi0gICAgICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIC8v
IG1ldGFkYXRhCisgICAgICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKSwgLy8gbWV0YWRhdGEKICAgICAgICAgICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
Ly8gb3BlcmF0aW9uCiAgICAgICAgICAgICBkb25lVlJlZywgLy8gcmVzdWx0Ci0gICAgICAgICAg
ICBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKKyAg
ICAgICAgICAgIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCAvLyBhcmcxCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKSwgLy8gYXJnMgogICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3ModGFnSXRlclJlc3VsdEdQUiwgcGF5bG9hZEl0ZXJSZXN1bHRHUFIp
LCAvLyBhcmczCiAgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOyAvLyBhcmc0CkBAIC02MDIsNyArNjAx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAogICAgICAgICBub3RPYmpl
Y3QubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJh
dG9yUmVzdWx0SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJl
c3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSk7CiAgICAgfQogCiAgICAgeyAgIApAQCAtNjE4LDEwICs2MTcsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29ucwogICAgICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoCi0gICAgICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IC8vIG1ldGFkYXRhCisgICAgICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKSwgLy8gbWV0YWRhdGEKICAgICAgICAgICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSwgLy8gb3BlcmF0aW9uCiAgICAgICAgICAgICB2YWx1ZVZSZWcsIC8vIHJlc3VsdAotICAgICAg
ICAgICAgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcx
CisgICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgLy8gYXJnMQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKHRhZ0l0ZXJSZXN1bHRHUFIsIHBheWxvYWRJdGVyUmVzdWx0
R1BSKSwgLy8gYXJnMwogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsgLy8gYXJnNApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRl
ICJTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgpAQCAtNDQsNyAr
NDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2J5dGVjb2RlSW5kZXguY2hl
Y2twb2ludCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSwgcmVnVDApOwogfQogCkBAIC01MywxOCArNTQs
MTggQEAgc3RkOjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJh
cmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICYmIE9wOjpv
cGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKK0pJVDo6Y29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAg
IHVuc2lnbmVkIGNoZWNrcG9pbnQgPSBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGlu
dCBhcmdDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0Zvcihi
eXRlY29kZSwgY2hlY2twb2ludCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19j
YXN0PGludD4oc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9p
bnQpKTsKIAorCiAgICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdU
aGlzKDApKSwgcmVnVDApOwogICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDApOwotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBhcnJheVByb2ZpbGVGb3Io
bWV0YWRhdGEsIGNoZWNrcG9pbnQpLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7Cisg
ICAgICAgIHN0b3JlMzJUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BDYWxsOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSArIExMSW50Q2FsbExpbmtJbmZvOjpvZmZzZXRPZkFy
cmF5UHJvZmlsZSgpICsgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0dXJlSUQo
KSk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTc4LDcgKzc5LDcgQEAg
c3RkOjplbmFibGVfaWZfdDwKICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8
IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzCiAsIHZvaWQ+Ci1KSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQorSklUOjpjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJ
bmZvQ29uc3RhbnQpCiB7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWYWx1ZSA9IGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5t
X2FyZ3VtZW50czsKQEAgLTkxLDcgKzkyLDggQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYgYnl0ZWNvZAogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1l
Rm9yRm9yd2FyZEFyZ3VtZW50czsKICAgICBlbHNlCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBv
cGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJh
dGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwg
LWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCByZWdUMCwgcmVn
VDEsIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKICAgICBlbWl0U2V0VmFyYXJn
c0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7CiAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCop
KSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTAxLDE0ICsxMDMsMTYgQEAg
SklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9w
ZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UK
ICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAg
ICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1Qw
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVw
T3BlcmF0aW9uLCByZWdUMywgcmVnVDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDAp
OwogICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlZ1QxKTsKIAogICAgIC8vIFByb2ZpbGUgdGhl
IGFyZ3VtZW50IGNvdW50LgogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRy
ZXNzT2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpLCByZWdUMCk7Ci0gICAgSnVtcCBu
b3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmUzMihy
ZWdUMiwgaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7Cisg
ICAgbG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMCk7CisgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpKSwgcmVnVDMpOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFi
b3ZlLCByZWdUMywgcmVnVDIpOworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIENh
bGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSk7CiAg
ICAgbm90QmlnZ2VzdC5saW5rKHRoaXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMn
LgpAQCAtMTI3LDE2ICsxMzEsMTUgQEAgYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBP
cCYpCiB0ZW1wbGF0ZTw+CiBib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2
YWwmIGJ5dGVjb2RlKQogewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCByZWdUMSk7Ci0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEs
IENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwotCi0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNf
Y2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJS
ZWdpc3RlciwgYXJndW1lbnRHUFIxKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3Rlciwg
QWRkcmVzcyhhcmd1bWVudEdQUjEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwog
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgcmVn
VDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgcmVnVDEsIHJlZ1QyKTsKKyAgICByZXNldFNQKCk7CiAKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZh
bCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZXR1cm5WYWx1ZUdQUikpOwogCiAgICAgZW1pdFB1dENhbGxS
ZXN1bHQoYnl0ZWNvZGUpOwogCkBAIC0xNDgsNyArMTUxLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2Fs
bExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fZXZhbENhbGxM
aW5rSW5mb3MuYWRkKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgaW5mby0+c2V0
VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgcmVnVDApOwogCiAgICAgaW50IHJlZ2lzdGVyT2Zm
c2V0ID0gLWJ5dGVjb2RlLm1fYXJndjsKQEAgLTE1Niw0MyArMTU5LDQ3IEBAIHZvaWQgSklUOjpj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJl
Z2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBsb2Fk
NjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKLSAg
ICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5m
byk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBlbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xv
YmFsT2JqZWN0KCptX3ZtLCBpbmZvKTsKKyAgICByZXNldFNQKCk7CiAKICAgICBlbWl0UHV0Q2Fs
bFJlc3VsdChieXRlY29kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotYm9vbCBKSVQ6
OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIENhbGxMaW5rSW5mbyosIHVuc2lnbmVkKQorYm9v
bCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwg
dW5zaWduZWQsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpCiB7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCiB0ZW1wbGF0ZTw+Ci1ib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFp
bENhbGwmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KQorYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRl
Y29kZSwgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0lu
ZGV4LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewot
ICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHNodWZmbGVEYXRhLm51
bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAgc2h1ZmZsZURhdGEubnVtYmVyVGFn
UmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKLSAgICBzaHVmZmxlRGF0YS5u
dW1Mb2NhbHMgPQorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gc2h1
ZmZsZURhdGEgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPigpOworICAgIHNodWZm
bGVEYXRhLT5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOworICAgIHNodWZmbGVEYXRh
LT5udW1QYXJhbWV0ZXJzID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOwor
ICAgIHNodWZmbGVEYXRhLT5udW1iZXJUYWdSZWdpc3RlciA9IEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyOworICAgIHNodWZmbGVEYXRhLT5udW1Mb2NhbHMgPQogICAgICAgICBieXRlY29kZS5t
X2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAg
IHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAgc2h1ZmZsZURh
dGEtPmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3Nb
aV0gPQorICAgICAgICBzaHVmZmxlRGF0YS0+YXJnc1tpXSA9CiAgICAgICAgICAgICBWYWx1ZVJl
Y292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAg
ICAgICAgICAgIERhdGFGb3JtYXRKUyk7CiAgICAgfQotICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9
Ci0gICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotICAg
IHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7Ci0gICAg
aW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgc2h1ZmZsZURhdGEt
PmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAg
IHNodWZmbGVEYXRhLT5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoJlJlZ2lzdGVyQXRPZmZzZXRM
aXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKIAotICAgIEp1bXBMaXN0
IHNsb3dQYXRocyA9IGluZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVn
VDIsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpZZXMsIFsmXSB7Ci0gICAgICAgIENhbGxGcmFt
ZVNodWZmbGVyKCp0aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAg
bG9hZENvbnN0YW50KGNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CisgICAgSnVtcExpc3Qg
c2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxEYXRhSUNGYXN0UGF0aCgqdGhp
cywgcmVnVDAsIHJlZ1QyLCBbJl0geworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywg
KnNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKICAgICB9KTsKICAgICBhZGRTbG93
Q2FzZShzbG93UGF0aHMpOworCisgICAgc2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CisgICAg
aW5mby0+ZnJhbWVTaHVmZmxlRGF0YSA9IFdURk1vdmUoc2h1ZmZsZURhdGEpOworCiAgICAgYXV0
byBkb25lTG9jYXRpb24gPSBsYWJlbCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uZG9uZUxvY2F0aW9uID0gZG9uZUxvY2F0aW9uOwogICAgIApAQCAtMjE4
LDE0ICsyMjUsMjUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAg
ICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAg
Ki8KLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNvZGVJRCAh
PSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJ
bmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7Ci0gICAgY29tcGlsZVNldHVwRnJhbWUo
Ynl0ZWNvZGUsIGluZm8pOworCisgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIGluZm8gPSBudWxs
cHRyOworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgaW5mb0NvbnN0YW50ID0gVUlOVF9N
QVg7CisgICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZhbCkgeworICAgICAgICBpbmZvID0g
bV91bmxpbmtlZENhbGxzLmFkZCgpOworICAgICAgICBpbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgICAgICBpbmZvLT5jYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Y2Fs
bFR5cGVGb3Iob3Bjb2RlSUQpOworCisgICAgICAgIGluZm9Db25zdGFudCA9IG1fY29uc3RhbnRQ
b29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkNhbGxMaW5rSW5mbywgaW5mbyk7CisKKyAg
ICAgICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZv
SW5kZXgpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxh
dGlvbkluZm8oKSk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0udW5saW5rZWRDYWxsTGlua0luZm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50ID0gaW5mb0Nv
bnN0YW50OworICAgIH0KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mb0NvbnN0
YW50KTsKIAogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgotICAgIGF1dG8gYnl0ZWNv
ZGVJbmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKLSAgICB1
aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMo
KTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCkuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFk
ZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRhZ09mZnNl
dCkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVn
VDAgaG9sZHMgY2FsbGVlLgpAQCAtMjM0LDE2ICsyNTIsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGlmIChjb21waWxlQ2FsbEV2YWwoYnl0ZWNvZGUp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNp
emUoKSA9PSBjYWxsTGlua0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5r
SW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2RlSUQpLCByZWdUMCk7Ci0gICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlm
IChjb21waWxlVGFpbENhbGwoYnl0ZWNvZGUsIGluZm8sIGNhbGxMaW5rSW5mb0luZGV4KSkKKyAg
ICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCwg
aW5mb0NvbnN0YW50KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbG9hZENvbnN0YW50KGluZm9D
b25zdGFudCwgcmVnVDIpOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJn
cyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAg
ICAgYXV0byBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVn
VDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0geworICAgICAgICBh
dXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgo
KnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKICAgICAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbFNsb3cocmVnVDIpOwogICAg
ICAgICB9KTsKQEAgLTI1MywxNCArMjY3LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNv
bnN0IEluc3RydWN0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gc2xvd1Bh
dGhzID0gaW5mby0+ZW1pdEZhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIENhbGxMaW5rSW5m
bzo6VXNlRGF0YUlDOjpZZXMpOworICAgIGF1dG8gc2xvd1BhdGhzID0gQ2FsbExpbmtJbmZvOjpl
bWl0RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMik7CiAgICAgYXV0byBkb25lTG9j
YXRpb24gPSBsYWJlbCgpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAKICAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVM
b2NhdGlvbjsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Cisg
ICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQpAQCAt
MjczLDIxICsyODYsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bgogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgbG9hZENvbnN0YW50KG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvQ29uc3RhbnQsIHJlZ1QyKTsKIAog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvLT5lbWl0U2xvd1Bh
dGgoKm1fdm0sICp0aGlzKTsKKyAgICBDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCgq
bV92bSwgKnRoaXMsIHJlZ1QyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7CiAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRE
aWRSZXR1cm5Gcm9tVGFpbENhbGwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICByZXNldFNQKCk7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGVtaXRQdXRDYWxs
UmVzdWx0KGJ5dGVjb2RlKTsKQEAgLTM5NSwxNyArNDA3LDMxIEBAIHZvaWQgSklUOjplbWl0X29w
X2l0ZXJhdG9yX29wZW4oY29uc3QgSW4KIAogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dDsKICAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAg
bW92ZShyZWdUMCwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2VHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudC0+aW1wbCgpKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QxLCBBY2Nlc3NUeXBl
OjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0
QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5s
aW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NU
eXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUs
IHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRHUFIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9uZXh0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIGZhc3RDYXNlLmxp
bmsodGhpcyk7CiB9CkBAIC00MTYsMTAgKzQ0Miw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9vcGVuKGNvbnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck9w
ZW4+KGluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCi0KICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgR1BSUmVn
IGl0ZXJhdG9yR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIEp1bXBM
aXN0IG5vdE9iamVjdDsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVy
YXRvckdQUikpOwogICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0
b3JHUFIpKTsKQEAgLTQzMiwxOSArNDU2LDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9vcGVuKGNvbnMKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkgewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIw
LCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJhdG9yR1BSLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRz
KCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgbW92ZShpdGVyYXRvckdQUiwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IG5leHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdC
aXRzKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIAogICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2Jq
ZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKIAogICAgIGRv
bmUubGluayh0aGlzKTsKIH0KQEAgLTQ1Miw3ICs0NzQsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3Jfb3Blbihjb25zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9
IChbJl0gKCkgewogICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAg
ICAgIGNhc2UgTmFycm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBA
IC00NzAsNTAgKzQ5MSw3OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0
IEluCiAgICAgSnVtcCBmYXN0Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSXRlcmF0aW9u
TW9kZTo6R2VuZXJpYykpKTsKIAogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgb3I4
KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmlj
KSksIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9pdGVyYXRpb25NZXRhZGF0YS5zZWVuTW9k
ZXMpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1l
dGFkYXRhOjpvZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRh
dGE6Om9mZnNldE9mU2Vlbk1vZGVzKCksIHJlZ1QwKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDx1aW50OF90PihJdGVyYXRpb25Nb2RlOjpHZW5lcmljKSksIHJlZ1QwKTsKKyAg
ICBzdG9yZThUb01ldGFkYXRhKHJlZ1QwLCBieXRlY29kZSwgT3BJdGVyYXRvck5leHQ6Ok1ldGFk
YXRhOjpvZmZzZXRPZkl0ZXJhdGlvbk1ldGFkYXRhKCkgKyBJdGVyYXRpb25Nb2RlTWV0YWRhdGE6
Om9mZnNldE9mU2Vlbk1vZGVzKCkpOwogICAgIGNvbXBpbGVPcENhbGw8T3BJdGVyYXRvck5leHQ+
KGluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGFkdmFuY2VUb05leHRD
aGVja3BvaW50KCk7CiAgICAgLy8gY2FsbCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVj
dCkgaW4gcmVnVDAKIAotICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBp
dGVyUmVzdWx0R1BSID0gcmVnVDI7Ci0gICAgR1BSUmVnIGRvbmVHUFIgPSByZWdUMTsKLSAgICAv
LyBpdGVyUmVzdWx0R1BSIHdpbGwgZ2V0IHRyYXNoZWQgYnkgdGhlIGZpcnN0IGdldCBieSBpZCBi
ZWxvdy4KLSAgICBtb3ZlKHZhbHVlR1BSLCBpdGVyUmVzdWx0R1BSKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJDYWxsUmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyOworICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IGl0ZXJDYWxsUmVzdWx0R1BSKTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OwogICAgIHsKLSAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGl0ZXJSZXN1bHRHUFIpOworICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHN0
YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gYmFzZUdQUik7CisKKyAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIpOwogCiAgICAgICAgIFJlZ2lzdGVyU2V0IHBy
ZXNlcnZlZFJlZ3MgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7Ci0g
ICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHZhbHVlR1BSKTsKKyAgICAgICAgcHJlc2VydmVkUmVn
cy5hZGQoaXRlckNhbGxSZXN1bHRHUFIpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpKSksIHByZXNlcnZlZFJlZ3MsCi0gICAgICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlO
YW1lcy0+ZG9uZS5pbXBsKCkpLCBKU1ZhbHVlUmVncyhpdGVyUmVzdWx0R1BSKSwgSlNWYWx1ZVJl
Z3MoZG9uZUdQUiksIHJlZ1QzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKLSAgICAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAorICAgICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5
TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGRv
bmVHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7
CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
ICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1Yklu
Zm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJ
bmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKwor
ICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NS
IGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgICAg
ICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgZG9uZUdQ
UiB9KTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJl
Z3MgeyBkb25lR1BSIH0pOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZG9uZSwgZG9uZUdQUik7CiAgICAgICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAg
ICAgfQogCi0KICAgICB7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgICAg
ICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lz
dGVycyhkb25lR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CisgICAgICAgIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaDEgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAg
ICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0
ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJy
YW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxHUFIpOworICAgICAgICBKdW1wTGlzdCBpdGVyYXRpb25Eb25lID0gYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3MoZG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxHUFIp
OworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJl
Z2lzdGVyczo6YmFzZTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbW92ZShpdGVyQ2FsbFJlc3Vs
dEdQUiwgYmFzZUdQUik7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHJlZ1Q0LCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsK
LSAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1w
bCgpKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJ
bmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKworICAgICAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICAgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5n
ZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJ
bmZvR1BSKTsKKyAgICAgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBz
byB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgICAgIGFkZFNsb3dDYXNl
KCk7CiAgICAgICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MgeyB2YWx1ZUdQUiB9KTsKLSAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUdQUik7Cisg
ICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgcmVz
dWx0R1BSIH0pOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUsIHJlc3VsdEdQUik7CiAKICAgICAgICAgaXRlcmF0aW9uRG9uZS5saW5rKHRoaXMpOwogICAg
IH0KQEAgLTUyNyw1OSArNTc3LDU1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9u
ZXh0KGNvbnMKICAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BJdGVyYXRvck5leHQ+KGluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2Fs
bFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdpc3Rl
cjsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck5leHQ+
KCk7CiAgICAgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZG9uZVZSZWcgPSBieXRlY29kZS5t
X2RvbmU7Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0gcmVnVDI7CiAKICAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAgICAgSnVtcExpc3Qgbm90T2JqZWN0OwotICAg
ICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyUmVzdWx0R1BSKSk7Cisg
ICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJDYWxsUmVzdWx0R1BS
KSk7CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5h
bWVzLT5kb25lLmltcGwoKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAgICAgCiAgICAgICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZO
b3RPYmplY3QoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5j
aElmTm90T2JqZWN0KGl0ZXJDYWxsUmVzdWx0R1BSKSk7CiAKLSAgICAgICAgQ2FsbCBjYWxsOwot
ICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewot
ICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkb25lVlJlZywgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCBp
dGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVu
dGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRvbmVWUmVnLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BS
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50
KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwotCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIHJl
Z1QxKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBy
ZWdUMCk7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7Cisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkb25lVlJlZywgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKworICAgICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CisKKyAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBkb25lR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZG9uZVZSZWcsIGRvbmVHUFIpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGl0ZXJDYWxsUmVzdWx0
R1BSKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAK
ICAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJl
c3VsdElzTm90T2JqZWN0LCBhcmd1bWVudEdQUjApOwogICAgIH0KIAogICAgIHsgICAKICAgICAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
VlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgICAgIEdQUlJlZyBpdGVyUmVzdWx0R1BSID0g
cmVnVDA7CiAKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0
eU5hbWVzLT52YWx1ZS5pbXBsKCk7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKLSAgICAgICAgQ2FsbCBjYWxsOwotICAgICAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5v
bkFyZ0dQUjApOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBl
KG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplLCB2YWx1ZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0g
ICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
ICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4o
Ynl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZTbG93T3BlcmF0aW9uKCkpLCB2YWx1ZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKICAgICB9Ci0KIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMjgzMDUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDggKzMyLDExIEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAj
aW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKIAorCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgUENU
b0NvZGVPcmlnaW5NYXA7CisKIG5hbWVzcGFjZSBERkcgewogY2xhc3MgQ29tbW9uRGF0YTsKIGNs
YXNzIEpJVENvZGU7CkBAIC0xNTksMTAgKzE2MiwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
Ym9vbCB1c2VEYXRhSUMoSklUVHlwZSBqaXRUeXBlKQogICAgIHsKLSAgICAgICAgaWYgKCFPcHRp
b25zOjp1c2VEYXRhSUMoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYg
KEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBPcHRpb25zOjp1c2VEYXRhSUNJbk9wdGltaXppbmdK
SVQoKTsKICAgICB9CiAKQEAgLTIyMyw2ICsyMjYsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
U2hhcmVkKCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZUF0dHJpYnV0ZSA9PSBTaGFyZUF0dHJpYnV0
ZTo6U2hhcmVkOyB9CiAKKyAgICB2aXJ0dWFsIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9y
aWdpbk1hcCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKwogcHJpdmF0ZToKICAgICBKSVRUeXBlIG1f
aml0VHlwZTsKICAgICBTaGFyZUF0dHJpYnV0ZSBtX3NoYXJlQXR0cmlidXRlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5jcHAJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25L
ZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHZvaWQgSklUQ29tcGlsYXRp
b25LZXk6OmR1bXAoUHJpbnRTdHJlYW0KICAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgb3V0LnByaW50KCIoQ29tcGlsZSBvZiAiLCAqbV9w
cm9maWxlZEJsb2NrLCAiIHdpdGggIiwgbV9tb2RlLCAiKSIpOworICAgIG91dC5wcmludCgiKENv
bXBpbGUgb2YgIiwgUmF3UG9pbnRlcihtX2NvZGVCbG9jayksICIgd2l0aCAiLCBtX21vZGUsICIp
Iik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb21waWxhdGlvbktleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbktleS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw1NyArMzAsNTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIENvZGVCbG9jazsK
LWNsYXNzIENvZGVCbG9ja1NldDsKK2NsYXNzIEpTQ2VsbDsKIAogY2xhc3MgSklUQ29tcGlsYXRp
b25LZXkgewogcHVibGljOgogICAgIEpJVENvbXBpbGF0aW9uS2V5KCkKLSAgICAgICAgOiBtX3By
b2ZpbGVkQmxvY2sobnVsbHB0cikKKyAgICAgICAgOiBtX2NvZGVCbG9jayhudWxscHRyKQogICAg
ICAgICAsIG1fbW9kZShKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbikKICAg
ICB7CiAgICAgfQogICAgIAogICAgIEpJVENvbXBpbGF0aW9uS2V5KFdURjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlVHlwZSkKLSAgICAgICAgOiBtX3Byb2ZpbGVkQmxvY2sobnVsbHB0cikKKyAgICAg
ICAgOiBtX2NvZGVCbG9jayhudWxscHRyKQogICAgICAgICAsIG1fbW9kZShKSVRDb21waWxhdGlv
bk1vZGU6OkRGRykKICAgICB7CiAgICAgfQogICAgIAotICAgIEpJVENvbXBpbGF0aW9uS2V5KENv
ZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUpCi0gICAgICAg
IDogbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVkQmxvY2spCisgICAgSklUQ29tcGlsYXRpb25LZXko
SlNDZWxsKiBwcm9maWxlZEJsb2NrLCBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSkKKyAgICAgICAg
OiBtX2NvZGVCbG9jayhwcm9maWxlZEJsb2NrKQogICAgICAgICAsIG1fbW9kZShtb2RlKQogICAg
IHsKICAgICB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuICFtX3Byb2ZpbGVkQmxvY2sgJiYgbV9tb2RlID09IEpJVENvbXBpbGF0aW9uTW9k
ZTo6SW52YWxpZENvbXBpbGF0aW9uOworICAgICAgICByZXR1cm4gIW1fY29kZUJsb2NrICYmIG1f
bW9kZSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKICAgICB9CiAg
ICAgCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gIW1fcHJvZmlsZWRCbG9jayAmJiBtX21vZGUgIT0gSklUQ29tcGlsYXRpb25N
b2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CisgICAgICAgIHJldHVybiAhbV9jb2RlQmxvY2sgJiYg
bV9tb2RlICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOwogICAgIH0K
ICAgICAKLSAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2soKSBjb25zdCB7IHJldHVybiBtX3By
b2ZpbGVkQmxvY2s7IH0KICAgICBKSVRDb21waWxhdGlvbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kZTsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBKSVRDb21waWxh
dGlvbktleSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9wcm9maWxlZEJs
b2NrID09IG90aGVyLm1fcHJvZmlsZWRCbG9jaworICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2sg
PT0gb3RoZXIubV9jb2RlQmxvY2sKICAgICAgICAgICAgICYmIG1fbW9kZSA9PSBvdGhlci5tX21v
ZGU7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goV1RGOjpQdHJIYXNoPENvZGVCbG9jayo+OjpoYXNo
KG1fcHJvZmlsZWRCbG9jayksIHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPEpJVENv
bXBpbGF0aW9uTW9kZT46OnR5cGU+KG1fbW9kZSkpOworICAgICAgICByZXR1cm4gV1RGOjpwYWly
SW50SGFzaChXVEY6OlB0ckhhc2g8SlNDZWxsKj46Omhhc2gobV9jb2RlQmxvY2spLCBzdGF0aWNf
Y2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxKSVRDb21waWxhdGlvbk1vZGU+Ojp0eXBlPihtX21v
ZGUpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAK
IHByaXZhdGU6Ci0gICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CisgICAgLy8gRWl0aGVy
IENvZGVCbG9jayogb3IgVW5saW5rZWRDb2RlQmxvY2sqIGZvciBiYXNsZWxpbmUgSklULgorICAg
IEpTQ2VsbCogbV9jb2RlQmxvY2s7CiAgICAgSklUQ29tcGlsYXRpb25Nb2RlIG1fbW9kZTsKIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSW5saW5lQWNjZXNzLmgiCisjaW5jbHVk
ZSAiSklULmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJJbmZvLmgiCiAKQEAgLTQ2LDEwICs0Nyw5IEBAIHN0YXRpYyBTdHJ1Y3R1cmVTdHViSW5mbyog
Z2FyYmFnZVN0dWJJbmYKIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpKSVRJbmxpbmVDYWNoZUdl
bmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIEFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZSwKICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKLSAgICA6IG1f
Y29kZUJsb2NrKGNvZGVCbG9jaykKLSAgICAsIG1faml0VHlwZShqaXRUeXBlKQorICAgIDogbV9q
aXRUeXBlKGppdFR5cGUpCiB7Ci0gICAgbV9zdHViSW5mbyA9IG1fY29kZUJsb2NrID8gbV9jb2Rl
QmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJ
bmZvKCk7CisgICAgbV9zdHViSW5mbyA9IGNvZGVCbG9jayA/IGNvZGVCbG9jay0+YWRkU3R1Yklu
Zm8oYWNjZXNzVHlwZSwgY29kZU9yaWdpbikgOiBnYXJiYWdlU3R1YkluZm8oKTsKICAgICBtX3N0
dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGU7CiAKICAgICBtX3N0dWJJbmZvLT51c2Vk
UmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyczsKQEAgLTU5LDcgKzU5LDYgQEAgdm9pZCBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGgsIExp
bmtCdWZmZXImIHNsb3dQYXRoLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4gc3RhcnQpCiB7CiAgICAgbV9zdHViSW5mby0+c3RhcnQgPSBzdGFydDsKLQogICAgIG1fc3R1
YkluZm8tPmRvbmVMb2NhdGlvbiA9IGZhc3RQYXRoLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4obV9kb25lKTsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpCkBA
IC02Nyw2ICs2NiwxNSBAQCB2b2lkIEpJVElubGluZUNhY2hlR2VuZXJhdG9yOjpmaW5hbGl6ZSgK
ICAgICBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBzbG93UGF0aC5sb2NhdGlv
bk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3Nsb3dQYXRoQmVnaW4pOwogfQogCit2b2lkIEpJ
VElubGluZUNhY2hlR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklU
JiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgbV9z
dGFydCA9IGppdC5sYWJlbCgpOworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJ
QyhtX2ppdFR5cGUpKTsKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQ
Uik7CisgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7CisgICAgbV9kb25lID0gaml0LmxhYmVsKCk7Cit9CisKIEpJVEJ5SWRHZW5lcmF0b3I6OkpJ
VEJ5SWRHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlw
ZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEpT
VmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBA
IC0xMTAsNyArMTE4LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvcjo6SklUR2V0QnlJZEdlbmVyYXRv
cgogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsCiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSkKICAgICA6IEpJVEJ5SWRHZW5lcmF0b3IoY29kZUJsb2NrLCBqaXRU
eXBlLCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgYWNjZXNzVHlwZSwgdXNlZFJlZ2lzdGVycywgYmFz
ZSwgdmFsdWUsIHN0dWJJbmZvR1BSKQotICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhwcm9wZXJ0eU5h
bWUudWlkKCkgPT0gY29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkp
CisgICAgLCBtX2lzTGVuZ3RoQWNjZXNzKGNvZGVCbG9jayAmJiBwcm9wZXJ0eU5hbWUudWlkKCkg
PT0gY29kZUJsb2NrLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aC5pbXBsKCkpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoYmFzZS5wYXlsb2FkR1BSKCkgIT0gdmFsdWUudGFnR1BSKCkpOwogfQpA
QCAtMTIwLDYgKzEyOCwzNyBAQCB2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgbV9pc0xlbmd0aEFjY2VzcyA/IElubGlu
ZUFjY2Vzczo6c2l6ZUZvckxlbmd0aEFjY2VzcygpIDogSW5saW5lQWNjZXNzOjpzaXplRm9yUHJv
cGVydHlBY2Nlc3MoKSk7CiB9CiAKKworI2lmIFVTRShKU1ZBTFVFNjQpCitzdGF0aWMgdm9pZCBn
ZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3MoSklUJiBqaXQsIEdQUlJlZyBzdHViSW5mb0dQUiwg
R1BSUmVnIGJhc2UsIEdQUlJlZyBzY3JhdGNoLCBHUFJSZWcgcmVzdWx0KQoreworICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAg
IGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGpp
dC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWRQ
cm9wZXJ0eShiYXNlLCBzY3JhdGNoLCBKU1ZhbHVlUmVncyB7IHJlc3VsdCB9KTsKKyAgICBhdXRv
IGZpbmlzaGVkID0gaml0Lmp1bXAoKTsKKworICAgIHNraXBJbmxpbmVBY2Nlc3MubGluaygmaml0
KTsKKyAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFn
KTsKKworICAgIGZpbmlzaGVkLmxpbmsoJmppdCk7Cit9CisKK3ZvaWQgSklUR2V0QnlJZEdlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBz
dHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENv
ZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsK
KworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBnZW5l
cmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3Moaml0LCBzdHViSW5mb0dQUiwgQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gsIEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgp
OworfQorI2VuZGlmCisKIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6SklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5
cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3Qg
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsCiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNW
YWx1ZVJlZ3MgdmFsdWUsIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBH
UFJSZWcgc3R1YkluZm9HUFIpCkBAIC0xMzgsNiArMTc3LDIwIEBAIHZvaWQgSklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yOjpnZW5lcmEKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxp
bmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVF
NjQpCit2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZv
R1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUp
KTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQo
c3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKyAgICBnZW5lcmF0ZUdldEJ5SWRJbmxpbmVBY2Nlc3Mo
aml0LCBzdHViSW5mb0dQUiwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2Us
IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5
SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgp
OworfQorI2VuZGlmCisKIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0b3Io
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKICAgICBKU1ZhbHVlUmVncyBiYXNlLCBK
U1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBHUFJSZWcgc2NyYXRjaCwgCkBA
IC0xNDksNiArMjAyLDM2IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OkpJVFB1dEJ5SWRHZW5lcmF0
b3IKICAgICBtX3N0dWJJbmZvLT51c2VkUmVnaXN0ZXJzLmNsZWFyKHNjcmF0Y2gpOwogfQogCisj
aWYgVVNFKEpTVkFMVUU2NCkKK3ZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0
dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2pp
dFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29u
c3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKworICAgIEdQUlJlZyBiYXNlID0gQmFzZWxp
bmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIEdQUlJlZyBzY3JhdGNoID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEdQUlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDI7CisgICAgR1BSUmVnIHZhbHVlID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9u
ZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGF1dG8gc2tpcElubGluZUFjY2Vz
cyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2Vs
Zk9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0LnN0b3JlUHJvcGVydHkoSlNWYWx1ZVJlZ3Mg
eyB2YWx1ZSB9LCBiYXNlLCBzY3JhdGNoLCBzY3JhdGNoMik7CisgICAgYXV0byBmaW5pc2hlZCA9
IGppdC5qdW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0
LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBm
aW5pc2hlZC5saW5rKCZqaXQpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorI2VuZGlm
CisKIHZvaWQgSklUUHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2Vt
YmxlciYgaml0KQogewogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vzczo6
c2l6ZUZvclByb3BlcnR5UmVwbGFjZSgpKTsKQEAgLTIwMCw3ICsyODMsNyBAQCB2b2lkIEpJVERl
bEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgp
OwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8t
Pm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
bV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29k
ZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0g
ZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAg
bV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0yMzYsNyArMzE5LDcgQEAgdm9pZCBKSVREZWxCeUlk
R2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0
dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1
YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIo
KSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UK
ICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9u
ZSA9IGppdC5sYWJlbCgpOwpAQCAtMjcwLDcgKzM1Myw3IEBAIHZvaWQgSklUSW5CeVZhbEdlbmVy
YXRvcjo6Z2VuZXJhdGVGYXN0UGEKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5m
b0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZv
LT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBK
SVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6
QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBq
aXQubGFiZWwoKTsKQEAgLTMwMCw2ICszODMsMzQgQEAgdm9pZCBKSVRJbkJ5SWRHZW5lcmF0b3I6
OmdlbmVyYXRlRmFzdFBhdAogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIElubGluZUFjY2Vz
czo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKK3Zv
aWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklU
JiBqaXQsIHVuc2lnbmVkIHN0dWJJbmZvLCBHUFJSZWcgc3R1YkluZm9HUFIpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpOworCisgICAgbV9zdGFy
dCA9IGppdC5sYWJlbCgpOworCisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1Yklu
Zm9HUFIpOworCisgICAgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBHUFJSZWcgcmVzdWx0ID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsK
KyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOwor
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworCisgICAgaml0LmxvYWQzMihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2Ny
YXRjaCk7CisgICAgYXV0byBza2lwSW5saW5lQWNjZXNzID0gaml0LmJyYW5jaDMyKENDYWxsSGVs
cGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQ
UiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgp
KSk7CisgICAgaml0LmJveEJvb2xlYW4odHJ1ZSwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7Cisg
ICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxp
bmsoJmppdCk7CisgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGlu
ZVB0clRhZyk7CisKKyAgICBmaW5pc2hlZC5saW5rKCZqaXQpOworICAgIG1fZG9uZSA9IGppdC5s
YWJlbCgpOworfQorI2VuZGlmCisKIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OkpJVEluc3RhbmNl
T2ZHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsCiAgICAg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEdQUlJlZyByZXN1bHQsIEdQUlJlZyB2
YWx1ZSwgR1BSUmVnIHByb3RvdHlwZSwgR1BSUmVnIHN0dWJJbmZvR1BSLApAQCAtMzMyLDcgKzQ0
Myw3IEBAIHZvaWQgSklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6Z2VuZXJhdGVGYXMKICAgICBtX3N0
YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUp
KSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJ
bmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxs
SGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAg
IGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGlu
ZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNo
YWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTM2OCw3ICs0NzksNyBA
QCB2b2lkIEpJVEdldEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQCiAgICAgbV9zdGFydCA9
IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewog
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyks
IG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQu
ZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJU
YWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVK
dW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC00MDUsNyArNTE2LDcgQEAgdm9p
ZCBKSVRQdXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQu
bGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1
bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVj
dHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsK
ICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgp
OwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtNDQwLDcgKzU1MSw3IEBAIHZvaWQgSklU
UHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpnZW4KICAgICBtX3N0YXJ0ID0gaml0LmxhYmVs
KCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZD
b2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKEND
YWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAg
fSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAg
ICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4MzA1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2lu
Y2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVk
ZSAiUHV0S2luZC5oIgpAQCAtMzgsMTEgKzM5LDEyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNz
IENhY2hlYWJsZUlkZW50aWZpZXI7CiBjbGFzcyBDYWxsU2l0ZUluZGV4OwogY2xhc3MgQ29kZUJs
b2NrOworY2xhc3MgSklUOwogY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CitzdHJ1Y3QgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbzsKIAogZW51bSBjbGFzcyBBY2Nlc3NUeXBlIDogaW50OF90Owog
ZW51bSBjbGFzcyBKSVRUeXBlIDogdWludDhfdDsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCitzdHJ1
Y3QgQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
ID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJz
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDE7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMzsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7Cit9OworCitz
dHJ1Y3QgQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVFbnVtZXJhdG9yR2V0
QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJ
bmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUklu
Zm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86
OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6
cmVnVDI7CisgICAgLy8gV2UgcmVseSBvbiB0aGlzIHdoZW4gbGlua2luZyBhIENvZGVCbG9jayBh
bmQgaW5pdGlhbGl6aW5nIHJlZ2lzdGVycyBmb3IgYSBHZXRCeVZhbCBTdHViSW5mby4KKyAgICBz
dGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7Cisg
ICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eSk7CisgICAgc3RhdGljX2Fzc2VydChyZXN1bHQgPT0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cmVzdWx0KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0dWJJbmZvID09IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMyA9IEdQUkluZm86OnJlZ1Q1OworfTsKKworc3RydWN0IEJhc2VsaW5lSW5zdGFu
Y2VvZlJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG8gPSBHUFJJ
bmZvOjphcmd1bWVudEdQUjM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDEgPSBHUFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gyID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKK307CisKK3N0cnVjdCBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5ID09IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QxOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBkb250Q2xvYmJlclJlZ2lzdGVyID0gR1BSSW5mbzo6cmVn
VDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnMgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyB0aGlzVmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMzsKK307CisKK3N0cnVjdCBC
YXNlbGluZUluQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcmVz
dWx0ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6c3R1YkluZm87CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKK307CisKK3N0cnVjdCBCYXNlbGluZVB1dEJ5
SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OnJl
Z1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1Qy
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7
Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5ID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBwcm9maWxlID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUNDsKK307CisKK3N0cnVjdCBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJyYW5kID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdp
c3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQoYnJhbmQgPT0gQmFzZWxpbmVHZXRCeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvID0gR1BSSW5mbzo6cmVnVDI7Cit9OworI2VuZGlmCisKIGNsYXNzIEpJVElubGluZUNhY2hl
R2VuZXJhdG9yIHsKIHByb3RlY3RlZDoKICAgICBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcigpIHsg
fQpAQCAtNjIsMTIgKzE3MiwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaW5hbGl6ZSgKICAgICAg
ICAgTGlua0J1ZmZlciYgZmFzdFBhdGhMaW5rQnVmZmVyLCBMaW5rQnVmZmVyJiBzbG93UGF0aExp
bmtCdWZmZXIsCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PiBzdGFydCk7Ci0gICAgCisKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogbV91bmxpbmtlZFN0dWJJbmZvIHsgbnVs
bHB0ciB9OworICAgIHVuc2lnbmVkIG1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggeyBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKwogcHJvdGVjdGVkOgotICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAgICAgU3Ry
dWN0dXJlU3R1YkluZm8qIG1fc3R1YkluZm87CiAKK3B1YmxpYzoKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9kb25lOwogICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3Nsb3dQYXRoQmVnaW47CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgbV9zbG93UGF0aENhbGw7CkBAIC05OCw3ICsyMTQsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgSlNWYWx1ZVJlZ3MgbV9iYXNlOwogICAgIEpTVmFsdWVSZWdzIG1fdmFsdWU7CiAKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKK3B1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTExMSw2ICsyMjcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1
YkluZm9HUFIsIEFjY2Vzc1R5cGUpOwogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChN
YWNyb0Fzc2VtYmxlciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAK
IHByaXZhdGU6CiAgICAgYm9vbCBtX2lzTGVuZ3RoQWNjZXNzOwpAQCAtMTI0LDYgKzI0MSw3IEBA
IHB1YmxpYzoKICAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNp
dGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50
aWZpZXIsCiAgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BSKTsKIAorICAgIHZvaWQgZ2VuZXJh
dGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2lnbmVkIHN0dWJJbmZvQ29uc3RhbnQs
IEdQUlJlZyBzdHViSW5mb0dQUik7CiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJik7CiB9OwogCkBAIC0xMzIsMTAgKzI1MCwxMSBAQCBwdWJsaWM6CiAgICAgSklUUHV0
QnlJZEdlbmVyYXRvcigpID0gZGVmYXVsdDsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoCi0g
ICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLCBKU1Zh
bHVlUmVncyBiYXNlLAotICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZv
R1BSLCBHUFJSZWcgc2NyYXRjaCwgRUNNQU1vZGUsIFB1dEtpbmQpOworICAgICAgICBDb2RlQmxv
Y2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNl
dCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNj
cmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIp
OwogICAgIAogICAgIFZfSklUT3BlcmF0aW9uX0dTc2lKSkMgc2xvd1BhdGhGdW5jdGlvbigpOwog
CkBAIC0xNjMsMTEgKzI4Miw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0
aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsK
ICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
c3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7
CiB9OwogCkBAIC0xOTEsOCArMzA4LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnZW5lcmF0ZUZh
c3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93
UGF0aEp1bXA7CiB9OwogCkBAIC0yMTYsOCArMzMxLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBn
ZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1
bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yNDEsOCArMzU0LDYgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBh
dGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0yNTUsNiArMzY2LDcgQEAgcHVi
bGljOgogICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVn
IHN0dWJJbmZvR1BSKTsKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxl
ciYpOworICAgIHZvaWQgZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYsIHVuc2ln
bmVkIHN0dWJJbmZvQ29uc3RhbnQsIEdQUlJlZyBzdHViSW5mb0dQUik7CiB9OwogCiBjbGFzcyBK
SVRJbnN0YW5jZU9mR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIEpJVElubGluZUNhY2hlR2VuZXJh
dG9yIHsKQEAgLTI3Nyw4ICszODksNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplKExp
bmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVm
ZmVyKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAg
LTMwMiwxMSArNDEyLDkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0
aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsK
ICAgICBKU1ZhbHVlUmVncyBtX3Jlc3VsdDsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1w
OwogfTsKIApAQCAtMzMwLDggKzQzOCw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVy
YXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBt
X3Nsb3dQYXRoSnVtcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDM4IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudERvdWJsZShW
aXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgaWYgKCFzcmMuaXNDb25zdGFu
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2st
PmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7Cit9CisKK0FMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMp
Cit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzSW50MzIoKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmly
dHVhbFJlZ2lzdGVyIHNyYykKK3sKKyAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSA9PSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Okxp
bmtUaW1lQ29uc3RhbnQpIHsKKyAgICAgICAgLy8gQWxsIGxpbmsgdGltZSBjb25zdGFudHMgYXJl
IGNlbGxzLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmlzQ2VsbCgpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklU
OjpnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICBBU1NFUlQo
c3JjLmlzQ29uc3RhbnQoKSk7Ci0gICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChz
cmMpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpM
aW5rVGltZUNvbnN0YW50KTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoc3JjKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2Fs
bEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQpAQCAt
MTU2LDM2ICsxODEsMzYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhF
eAogI2VuZGlmCiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElO
RSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQor
dGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVu
Y3Rpb24pOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOwogI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFk
YXRhLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVH
UFIyLCByZXR1cm5WYWx1ZUdQUikpOwogICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BS
MiwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmCiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhPgotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYg
bWV0YWRhdGEsIEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewog
ICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVH
UFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BS
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2Vs
c2UKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXR1
cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikp
OwogICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwog
I2VuZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlND
ZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3Rl
ciByZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkKKyAgICBp
ZiAoIWlzS25vd25DZWxsKHJlZykpCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApA
QCAtMjA1LDcgKzIzMCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omhhc0FueVNsb3dDYXNl
cygKIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKQogewogICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUluZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91
bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVj
a3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAg
ICAgYXV0byByZXN1bHQgPSBtX2NoZWNrcG9pbnRMYWJlbHMuYWRkKG1fYnl0ZWNvZGVJbmRleCwg
bGFiZWwoKSk7CkBAIC0yMTUsNyArMjQwLDcgQEAgaW5saW5lIHZvaWQgSklUOjphZHZhbmNlVG9O
ZXh0Q2hlY2twb2ludAogaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNr
cG9pbnQoSnVtcCBqdW1wKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ieXRlY29kZUlu
ZGV4LCAiVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBw
YXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldCIpOwotICAgIEFT
U0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVj
a3BvaW50cygpKTsKKyAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25B
dChtX2J5dGVjb2RlSW5kZXgpLT5oYXNDaGVja3BvaW50cygpKTsKICAgICBtX2J5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbV9ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSArIDEpOwogCiAgICAgYXV0byBpdGVyID0gbV9jaGVja3BvaW50TGFi
ZWxzLmZpbmQobV9ieXRlY29kZUluZGV4KTsKQEAgLTI5MywyOSArMzE4LDI5IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRDb3VudChBYnN0cmEKIAogQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7Ci0gICAgcmV0
dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmco
KSAmJiBhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgp
ID09IDE7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxs
KCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKIGlubGluZSB2
b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmls
ZSwgSlNWYWx1ZVJlZ3MgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHNob3VsZEVtaXRQcm9maWxpbmco
KSk7CiAKLSAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBi
dWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0Ci0gICAgLy8gc3RvcmUuCi0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCB2YWx1ZVByb2ZpbGUubV9idWNr
ZXRzKTsKLSNlbHNlCiAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJp
dHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLm1fYnVja2V0
cyk7CiAgICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMu
cGF5bG9hZCk7CiAgICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgJmRlc2NyaXB0b3ItPmFzQml0
cy50YWcpOwotI2VuZGlmCiB9CisjZW5kaWYKIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBpbmxp
bmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjpt
X3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4gSklUOjplbWl0VmFsdWVQcm9m
aWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSkKIHsKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVn
VDApOwogI2Vsc2UKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKQEAgLTMy
Myw0MSArMzQ4LDM3IEBAIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWMK
IAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29k
ZSguLi4pIHsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWVSZWdz
IHZhbHVlKQorI2lmIFVTRShKU1ZBTFVFNjQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4K
K2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYg
Ynl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2Zp
bGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSh2YWx1
ZVByb2ZpbGVGb3IobWV0YWRhdGEsIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpLCB2YWx1
ZSk7Ci19CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlLCBHUFJSZWcgcmVzdWx0UmVn
KQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlLCBKU1ZhbHVlUmVn
cyhyZXN1bHRSZWcpKTsKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9j
ay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9m
aWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZh
bHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOworICAgIHN0b3JlNjQodmFsdWUuZ3By
KCksIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPgotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1l
dGFkYXRhJiBtZXRhZGF0YSwgR1BSUmVnIHJlc3VsdFJlZykKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgR1BSUmVnIHJlc3VsdFJlZykKIHsKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRSZWcpKTsKIH0KICNl
bmRpZgogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChS
ZWdpc3RlcklEIGNlbGxHUFIsIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlLCBSZWdpc3RlcklE
IHNjcmF0Y2hHUFIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIHB0cmRpZmZfdCBvZmZzZXRPZkFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBS
ZWdpc3RlcklEIHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
ewogICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2Ny
YXRjaEdQUiwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwor
ICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YShzY3JhdGNoR1BSLCBieXRlY29kZSwgb2Zmc2V0T2ZB
cnJheVByb2ZpbGUpOwogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIGFycmF5UHJv
ZmlsZUdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2Ny
YXRjaEdQUikKIHsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRy
ZXNzKGFycmF5UHJvZmlsZUdQUiwgQXJyYXlQcm9maWxlOjpvZmZzZXRPZkxhc3RTZWVuU3RydWN0
dXJlSUQoKSkpOwotICAgIH0KKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0
ZWNvZGUsIEJ5dGVjb2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5
UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCksIGNlbGxHUFIsIHNjcmF0Y2hH
UFIpOwogfQogCiBBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKQEAgLTM4MCw3ICs0MDEsNyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91
YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAo
cmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29u
c3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKKyAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1t
UHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZERv
dWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKQEAgLTQ5Niw3ICs1MTcsNyBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCiB7Ci0gICAgaWYg
KCFtX2NvZGVCbG9jay0+aXNLbm93bkNlbGwocmVnKSkgeworICAgIGlmICghaXNLbm93bkNlbGwo
cmVnKSkgewogICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7CiAgICAgICAgIGVsc2UKQEAgLTUwNiw3ICs1MjcsNyBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQg
dGFnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBp
ZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MTQsMTEg
KzUzNSw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlMKICAgICB9
CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklU
OjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCiB7CiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKQEAgLTU0NCwxMSArNTYwLDExIEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBBU1NFUlQobV9ieXRl
Y29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBo
b3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4K
IAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBt
X2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJl
cigpKQotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KSksIGRzdCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2st
PmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soc3JjKSkgeworICAgICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAg
ICAgICAgICAgICBtb3ZlKEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU2NiwxMSArNTgyLDYgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMiwgZHN0Mik7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENv
bnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCi17Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0
YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOwotfQotCiBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0
KSk7CkBAIC01OTUsNyArNjA2LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBT
bG93Q2FzZQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoUmVnaXN0ZXJJRCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQogewotICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHZSZWcpKQorICAgIGlmICghaXNLbm93bkNlbGwodlJl
ZykpCiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCkBAIC02
MzcsMzAgKzY0OCw3IEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAK
IHsKICAgICBpZiAodGFyZ2V0KQogICAgICAgICByZXR1cm4gdGFyZ2V0OwotICAgIHJldHVybiBt
X2NvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgR2V0UHV0SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5
dGVjb2RlKQotewotICAgIHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCArIDE7
IC8vIEhhc2hNYXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKLSAgICBhdXRvIGl0ZXJhdG9yID0g
bV9jb3BpZWRHZXRQdXRJbmZvcy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fY29w
aWVkR2V0UHV0SW5mb3MuZW5kKCkpCi0gICAgICAgIHJldHVybiBHZXRQdXRJbmZvKGl0ZXJhdG9y
LT52YWx1ZSk7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAgICBtX2NvcGllZEdldFB1dEluZm9zLmFkZChr
ZXksIGdldFB1dEluZm8ub3BlcmFuZCgpKTsKLSAgICByZXR1cm4gZ2V0UHV0SW5mbzsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci1BTFdBWVNfSU5MSU5FIEJpbmFyeUFyaXRoUHJv
ZmlsZSBKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlPcCBieXRlY29kZSkKLXsKLSAgICB1
aW50NjRfdCBrZXkgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJpbmFyeU9wOjpvcGNvZGVJRCkg
KyAxKSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29kZS5tX21ldGFkYXRhSUQp
OwotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZmluZChrZXkpOwot
ICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMuZW5kKCkpCi0gICAgICAg
IHJldHVybiBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlIGFyaXRoUHJv
ZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKLSAg
ICBtX2NvcGllZEFyaXRoUHJvZmlsZXMuYWRkKGtleSwgYXJpdGhQcm9maWxlKTsKLSAgICByZXR1
cm4gYXJpdGhQcm9maWxlOworICAgIHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5vdXRPZkxp
bmVKdW1wT2Zmc2V0KGluc3RydWN0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBA
IC02ODEsNiArNjY5LDYwIEBAIEFMV0FZU19JTkxJTkUgRUNNQU1vZGUgSklUOjplY21hTW9kZTxP
cFAKICAgICByZXR1cm4gRUNNQU1vZGU6OnN0cmljdCgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkUHRyRnJvbU1ldGFkYXRh
KGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkK
K3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9j
ay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwg
cmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwg
c2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkMzIoQWRkcmVzcyhzX21l
dGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRh
dGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCByZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkOEZyb21NZXRhZGF0
YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQp
Cit7CisgICAgbG9hZDgoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2Nr
LT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpLCBy
ZXN1bHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBCeXRl
Y29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBl
IHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAg
c3RvcmU4KHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2st
Pm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjpzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcgdmFsdWUsIGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzdG9yZTMyKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRh
dGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRh
YmxlKGJ5dGVjb2RlKSArIG9mZnNldCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjptYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRh
dGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0
KQoreworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRh
dGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgc19tZXRhZGF0
YUdQUiwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvbnN0YW50
KEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY29uc3RhbnRJbmRleCwgR1BSUmVnIHJlc3VsdCkK
K3sKKyAgICBsb2FkUHRyKEFkZHJlc3Moc19jb25zdGFudHNHUFIsIHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oY29uc3RhbnRJbmRleCkgKiA4KSwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6bG9hZEdsb2JhbE9iamVjdChHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWRDb25z
dGFudChtX2dsb2JhbE9iamVjdENvbnN0YW50LCByZXN1bHQpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50
LCBHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3Rh
bnQoKSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVzdWx0LCBjb25zdGFudC50b0NvbnN0YW50SW5kZXgoKSAqIHNpemVvZih2b2lkKikpLCByZXN1
bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShy
ZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVj
dHVyZSgpOwogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9j
YXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFs
bG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVj
dD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmpl
Y3QoY29uc3QgSQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwg
c3RydWN0dXJlKTsKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlk
ZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdExvYWRQYXlsb2FkKGhhc0luc3RhbmNlVmFsdWUsIHJl
Z1QwKTsKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5z
dGFuY2Ugd291bGQgZG8uCiAgICAgSnVtcCBoYXNJbnN0YW5jZVZhbHVlTm90Q2VsbCA9IGVtaXRK
dW1wSWZOb3RKU0NlbGwoaGFzSW5zdGFuY2VWYWx1ZSk7Ci0gICAgSnVtcCBjdXN0b21oYXNJbnN0
YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1
bmN0aW9uKCkpKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CiAK
ICAgICAvLyBXZSBrbm93IHRoYXQgY29uc3RydWN0b3IgaXMgYW4gb2JqZWN0IGZyb20gdGhlIHdh
eSBieXRlY29kZSBpcyBlbWl0dGVkIGZvciBpbnN0YW5jZW9mIGV4cHJlc3Npb25zLgogICAgIGVt
aXRMb2FkUGF5bG9hZChjb25zdHJ1Y3RvciwgcmVnVDApOwpAQCAtMTYyLDcgKzE2Miw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocHJvdG8pOwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAg
ICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAg
ICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgcmVn
VDAsIC8vIHJlc3VsdAogICAgICAgICByZWdUMiwgLy8gdmFsdWUKQEAgLTE5Niw3ICsxOTYsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKICAg
ICBlbWl0TG9hZFRhZyhwcm90bywgcmVnVDMpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QwLCByZWdUMiksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMSkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCBkc3QsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDAsIHJlZ1QyKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QxKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKIH0KIApAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJl
Z1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoY29uc3RydWN0b3IsIHJlZ1QyKTsKICAgICBlbWl0
TG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUNCwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1Qz
KSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
cmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMykpOwogICAgIGVtaXRTdG9yZUJvb2woZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAgICAgCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogICAgIAogICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJl
Z1QxKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwogCkBAIC0z
NzgsNyArMzc4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29ucwog
ICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lID0gYnl0ZWNvZGUubV9uYW1lOwogICAgIGVtaXRMb2Fk
UGF5bG9hZChmdW5jLCByZWdUMSk7CiAgICAgZW1pdExvYWQobmFtZSwgcmVnVDMsIHJlZ1QyKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtNDA4LDcgKzQwOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25z
dCBJbnN0cnVjdGkKICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKICAgICBHUFJSZWcgc2Ny
YXRjaDIgPSByZWdUMzsKICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCB2YWx1ZSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgYWRk
SnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQy
Miw3ICs0MjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWUocmVnVDEsIHJlZ1QwKTsKICAgICBHUFJSZWcgc2NyYXRjaDEg
PSByZWdUMjsKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKLSAgICBhZGRKdW1wKGJyYW5j
aElmVHJ1dGh5KHZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIHZh
bHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM3LDcgKzQzNyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKIAogICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVx
dWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVn
VDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24g
PSBqdW1wKCk7CiAKQEAgLTQ2Myw3ICs0NjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251
bGwoY29uc3QgSW5zdHJ1CiAKICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
ICAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05v
dEltbWVkaWF0ZSA9IGp1bXAoKTsKIApAQCAtNTA0LDcgKzUwNCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2pudW5kZWZpbmVkX29yX251bGwoY28KIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRl
ciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKICAgICBB
U1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwpAQCAtNTUyLDEzICs1NTIsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGdlbmVyaWNDYXNlLmFw
cGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVTdHJpbmdFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJl
Z1QwLCByZWdUMik7CiAgICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBH
ZW5lcmljIGNhc2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsg
Ly8gZG91YmxlcwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpKTsKIAogICAgIHN0b3JlUmVzdWx0LmxpbmsodGhpcyk7CiAgICAgZW1pdFN0b3JlQm9v
bChkc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTU5MSwxNCArNTkxLDE0IEBAIHZvaWQgSklUOjpj
b21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG8KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJh
bmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QwLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaW5nRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVn
VDIpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBpbGVP
cEVxVHlwZTo6RXEgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFyZ2V0
KTsKICAgICBkb25lLmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAg
IGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBn
ZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpFcSA/
IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwogCiAgICAgZG9u
ZS5saW5rKHRoaXMpOwpAQCAtNjQzLDEzICs2NDMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X25lcShjb25zdCBJbnN0cnVjdAogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0
cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVn
VDAsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwg
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CiAgICAg
c3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBHZW5lcmljIGNhc2UuCiAgICAg
Z2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91YmxlcwogICAgIGdl
bmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIHN0
b3JlUmVzdWx0LmxpbmsodGhpcyk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJldHVy
blZhbHVlR1BSKTsKQEAgLTc2Miw3ICs3NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03NzIsNyArNzcy
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwog
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiks
IHRhcmdldCk7CiB9CiAKQEAgLTc5MSw3ICs3OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9u
dWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFy
ZTMyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0
ZSA9IGp1bXAoKTsKQEAgLTgyMyw3ICs4MjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVs
bChjb25zdCBJbnN0cnVjCiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZTMy
KE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0
ZSA9IGp1bXAoKTsKQEAgLTg0Niw3ICs4NDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhj
b25zdCBJbnN0cnVjdGlvCiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKICAg
ICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVu
dHJ5RnJhbWUpOwogICAgIGVtaXRMb2FkKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QxLCByZWdUMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAg
ICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogfQogCkBAIC04NjIsNyArODYyLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydQogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dl
c3RUYWcpKSk7CiAgICAgaXNJbnQzMi5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGlm
IChzcmMgIT0gZHN0KQogICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQpA
QCAtODg0LDcgKzg4NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5z
dHIKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihhcmd1bWVudFZhbHVlUmVncywg
cmVnVDIpKTsKICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGlm
IChzcmMgIT0gZHN0KQogICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQpA
QCAtOTE1LDcgKzkxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0
cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGlmIChz
cmMgIT0gZHN0KQogICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQpAQCAt
OTMxLDcgKzkzMSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlv
CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0
ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3Vu
bGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gV2hlbiB0aGUgTExJbnQgdGhyb3dzIGFu
IGV4Y2VwdGlvbiwgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSd2ZSBhbHJlYWR5IHRpZXJlZCB1
cAorICAgIC8vIHRoZSBzYW1lIENvZGVCbG9jayB0byBiYXNlbGluZSwgYW5kIHdlJ2xsIGNhdGNo
IHRoZSBleGNlcHRpb24gaW4gdGhlIGJhc2VsaW5lIEpJVCAoYmVjYXVzZQorICAgIC8vIHdlIHVw
ZGF0ZWQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVycyB0byBwb2ludCBoZXJlKS4gQmVjYXVzZSB0aGUg
TExJbnQgdXNlcyBhIGRpZmZlcmVudCB2YWx1ZQorICAgIC8vIGluc2lkZSBzX2NvbnN0YW50c0dQ
UiwgdGhlIGNhbGxlZSBzYXZlcyB3ZSByZXN0b3JlIGFib3ZlIG1heSBub3QgY29udGFpbiB0aGUg
Y29ycmVjdCByZWdpc3Rlci4KKyAgICAvLyBTbyB3ZSByZXBsZW5pc2ggaXQgaGVyZS4KKyAgICB7
CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkpJVERhdGEoKSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2Rl
QmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQ
Uik7CisgICAgfQogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
UmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBp
c0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
Uik7CkBAIC05NTQsNyArOTY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5z
dHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0
aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spOwogICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
ciogYnVmZmVyID0gbWV0YWRhdGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxk
RW1pdFByb2ZpbGluZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRz
KCkpOwpAQCAtOTk2LDggKzEwMDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNv
bnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2Ny
dXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlv
bnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRDb2RlQmxvY2st
PnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJs
ZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTAyMywxMyArMTAzNCwxMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5s
aW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRj
aEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVj
b3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVj
b3JkOjpDaGFyYWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtl
ZFRhYmxlKTsKIAogICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJ
bmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
d2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCwgdW5saW5rZWRU
YWJsZS5tX21pbik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogfQog
CkBAIC0xMDQxLDEzICsxMDUyLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmco
Y29uc3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1
dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
IGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9wcm9maWxl
ZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJ
bmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmlu
ZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCiAg
ICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBt
X3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcp
OwogfQogCkBAIC0xMDY4LDcgKzEwNzksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25z
dCBJbnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggSklUIGNvZGUgZG9lc24ndCB1c2UgdGhl
bSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0
YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBv
YmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgZm9yIChpbnQg
aSA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpOyBpIDwgbV9jb2RlQmxvY2stPm51bVZhcnMoKTsgKytpKQorICAgIGZvciAoaW50IGkg
PSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKTsgaSA8IG1fcHJvZmlsZWRDb2RlQmxvY2stPm51bVZhcnMoKTsgKytpKQogICAgICAgICBl
bWl0U3RvcmUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF9lbnRlcik7CkBAIC0xMDg3LDcgKzEwOTgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1
YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKICAgICBXcml0ZUJhcnJpZXJC
YXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwog
ICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CkBAIC0xMTIyLDcgKzExMzMsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiB2b2lkIEpJVDo6ZW1pdF9v
cF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAg
ICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1
Y3R1cmVJRDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyID0gYnl0ZWNvZGUubV9z
cmNEc3Q7CiAKQEAgLTExNDUsNyArMTE1Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rk
eihjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBUeXBlTG9jYXRpb24q
IGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lz
dGVyOwogCkBAIC0xMjM5LDcgKzEyNTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fdGFpCiAgICAgZW1pdExvYWRUYWcoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1Qx
KTsKICAgICBKU1ZhbHVlUmVncyB0aGlzUmVncyhyZWdUMSwgcmVnVDIpOwogICAgIGVtaXRMb2Fk
UGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgcmVnVDMsIG1fY29kZUJsb2NrLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3MsIHJlZ1QzLCBUcnVzdGVkSW1tUHRyKG1f
cHJvZmlsZWRDb2RlQmxvY2spLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTEgKzU0LDE0IEBAIHZvaWQg
SklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbioKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAg
ICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwotICAgICAgICBl
bHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50T3duZWRCeVVu
bGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAgc3RvcmU2NChJ
bW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIHJlZ1QwKTsK
KyAgICAgICAgICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgIH0K
KwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04NywzNyArOTAsMzUgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1
Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxv
Y2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFsbG9jYXRvciBh
bGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmpl
Y3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZF
eGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKICAgICBSZWdpc3Rl
cklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJl
Z1QyOworICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CiAKLSAgICBpZiAoIWFs
bG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJ
bW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywg
SklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAg
ICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlu
bGluZUNhcGFjaXR5KCkpOwotICAgICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwotICAgICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKLSAgICB9CisgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkg
KyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSwgYWxsb2NhdG9y
UmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0
YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmVSZWcpOworCisgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxs
cHRyKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6
dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRj
aFJlZywgc2xvd0Nhc2VzKTsKKyAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0
dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgZW1pdEluaXRp
YWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CisgICAgbXV0YXRvckZl
bmNlKCptX3ZtKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsK
KworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAorICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDM7CisKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwot
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZt
KCksIHN0cnVjdHVyZSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKICAgICBlbWl0U3RvcmVDZWxsKGRz
dCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCkBAIC0xMzEsNyArMTMyLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogCiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBr
bm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFz
SW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1i
b2xGdW5jdGlvbigpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgSnVtcCBj
dXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVz
cyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2Z1bmN0aW9uUHJvdG9I
YXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjb25zdHJ1Y3RvciwgcmVnVDApOwogCkBAIC0xNTQsMzAgKzE1NiwzOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29k
ZS5tX3Byb3RvdHlwZTsKIAotICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90
bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNl
IHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3Qs
IGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
dG8sIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3RvR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90bzsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6
OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BSKTsKICAgICAKICAg
ICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAt
IHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2Uu
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHZhbHVlR1BSLCB2YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHByb3RvR1BSLCBwcm90byk7CiAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1
bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAg
ICAgICByZWdUNSwKLSAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICByZXN1bHRHUFIs
CisgICAgICAgIHZhbHVlR1BSLAorICAgICAgICBwcm90b0dQUiwKKyAgICAgICAgc3R1YkluZm9H
UFIsCisgICAgICAgIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDEsIEJhc2Vs
aW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKKyAgICBzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6
OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxp
bmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAorCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0xOTIsMTQgKzIwMiwxMyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZTsKLSAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BS
MCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9w
dGltaXplKT4oQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIHJlZ1QyLCByZWdU
MSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIHN0YXRpY19hc3Nl
cnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEp
OworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9
PSBhcmd1bWVudEdQUjIpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjpwcm90byA9PSBhcmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVy
YXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKQEAgLTI0MCw3
ICsyNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvCiAKICAg
ICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVn
VDEsIHJlZ1QwKTsKIApAQCAtMzgzLDkgKzM5Miw5IEBAIHZvaWQgSklUOjplbWl0X29wX3JldChj
b25zdCBJbnN0cnVjdGlvbioKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2Vu
ZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OwogICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlz
dDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CkBAIC00MTEsNyArNDIwLDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogCiAgICAgaWYgKGRz
dCAhPSBzcmMpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTQzNCw5ICs0NDIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
cHJvcGVydHlfa2V5KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQUjIpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNl
dEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNDY1LDggKzQ3NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2Uo
Y29uc3QgSW5zdHJ1Y3RpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdU
MzsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgYWRkSnVtcChi
cmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBn
bG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdl
dCk7CkBAIC00ODAsNyArNDkxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDEgPSByZWdUMTsKQEAgLTUxOSw3ICs1MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVs
bChjb25zdCBJbnN0cnVjCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVj
ayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIEp1bXAg
aXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCBy
ZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRk
SnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2Jq
ZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2Jh
bE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIApAQCAtNTQzLDcgKzU1NCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnUKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpT
Q2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1
Y3R1cmUuCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKSksIHRhcmdldCk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRK
dW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0
ZSA9IGp1bXAoKTsKIApAQCAtNTgyLDE1ICs1OTMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51
bmRlZmluZWRfb3JfbnVsbChjbwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0
YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lh
bFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBl
cXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50
ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9o
YXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQ
b2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRy
KEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMy
KDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7
CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0K
QEAgLTYyNSw4ICs2MzQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1
Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Qy
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29u
c3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAg
ICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0
aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAs
IGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0
R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElT
dHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAg
ICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjQw
LDcgKzY1MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZU
TCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywg
d2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
CkBAIC02OTUsNyArNzA2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1
Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJv
dywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vs
c2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIy
OwpAQCAtNzExLDcgKzcyMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3Ry
dWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkK
IHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtNzIwLDcgKzczMiw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIAogI2lmIE5VTUJF
Ul9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIGppdC5sb2FkUHRyKCZ2bS50b3BF
bnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRHUFIwKTsKKyAgICBqaXQuY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYXJndW1lbnRHUFIwKTsKICNl
bmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQ
UjA7CkBAIC05MDgsNyArOTIwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShj
b25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
c3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwg
cmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkxOCw3ICs5MzEsOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkzMSw3
ICs5NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAg
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChz
cmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJl
Zyk7CiB9CkBAIC05NTEsNyArOTY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhj
b25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAg
ICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NzgsNyArOTky
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydQogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTkzLDcgKzEwMDcsMTgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQ2NChB
ZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJl
Z1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKworICAgIC8vIFdoZW4gdGhlIExMSW50IHRocm93cyBhbiBleGNlcHRpb24sIHRo
ZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFkeSB0aWVyZWQgdXAKKyAgICAvLyB0aGUg
c2FtZSBDb2RlQmxvY2sgdG8gYmFzZWxpbmUsIGFuZCB3ZSdsbCBjYXRjaCB0aGUgZXhjZXB0aW9u
IGluIHRoZSBiYXNlbGluZSBKSVQgKGJlY2F1c2UKKyAgICAvLyB3ZSB1cGRhdGVkIHRoZSBleGNl
cHRpb24gaGFuZGxlcnMgdG8gcG9pbnQgaGVyZSkuIEJlY2F1c2UgdGhlIExMSW50IHVzZXMgYSBk
aWZmZXJlbnQgdmFsdWUKKyAgICAvLyBpbnNpZGUgc19jb25zdGFudHNHUFIsIHRoZSBjYWxsZWUg
c2F2ZXMgd2UgcmVzdG9yZSBhYm92ZSBtYXkgbm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgcmVnaXN0
ZXIuCisgICAgLy8gU28gd2UgcmVwbGVuaXNoIGl0IGhlcmUuCisgICAgeworICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCBy
ZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRh
OjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworICAgIH0KIAog
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xl
YXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNl
cHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtMTAxMSwy
MyArMTAzNiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAg
ICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIs
IGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1
OTgKIAotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZlciogYnVmZmVyID0gbWV0
YWRhdGEubV9idWZmZXI7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygp
KQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JF
bnRlckF0Q2F0Y2gsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50
ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygp
KTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRl
ckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkp
OwogICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGZhckp1bXAocmV0dXJu
VmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5r
KHRoaXMpOwotICAgIGlmIChidWZmZXIgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAg
ICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYg
cHJvZmlsZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAg
ICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxl
Jj4ocHJvZmlsZSksIHJlZ3MpOwotICAgICAgICB9KTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiB9CiAKQEAgLTEwNTMsOCArMTA2Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0
ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNo
IGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAg
IGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRl
Y29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAg
IGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDgxLDEz
ICsxMDk0LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAg
ICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhp
cyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJs
ZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVu
ZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0
LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRh
YmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJX
aXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4
LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEwOTksMjAgKzExMTMsMjIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUg
PSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBz
d2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29u
c3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3
aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3
aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5s
aW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVn
VDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25L
ZXlUeXBlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCB0YWJsZUluZGV4KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJn
dW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKTsKLSAgICBsb2FkMzIoY29kZUJs
b2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRGVidWdnZXJSZXF1ZXN0cygpKSwgcmVn
VDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCAmdm0oKSwgc3RhdGljX2Nh
c3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVxdWVz
dHMubGluayh0aGlzKTsKQEAgLTExMzMsNyArMTE0OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Vx
X251bGwoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KHRoaXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNv
bXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1t
ZWRpYXRlID0ganVtcCgpOwpAQCAtMTE0OCw3ICsxMTY0LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTExNjYsNyArMTE4MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxs
KGNvbnN0IEluc3RydWMKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQ
dHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90SW1tZWRp
YXRlID0ganVtcCgpOwpAQCAtMTE4OCwxMiArMTIwMywxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNl
IHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHph
cCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAg
Ly8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVf
dCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gbV91
bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0
SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopKTsKIAotICAgIGVtaXRXcml0
ZUJhcnJpZXIobV9jb2RlQmxvY2spOworICAgIAorICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFdyaXRlQmFycmllcihyZWdU
MCk7CiAKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vsc2UKQEAgLTEyMTIs
NyArMTIyOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAg
ICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0xMzEwLDIzICsxMzI3LDE5IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29w
X3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1
Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJ
RDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7
CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2Fk
MzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKKyAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1cmVJRCgpLCBy
ZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVU
aGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAg
ICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1f
Y2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVn
aXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0g
cmVnVDA7CkBAIC0xMzQyLDcgKzEzNTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhjb25zdCBJbnN0CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJh
cmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9u
OjpyYXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVE
YXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxl
KCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0
dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7CiAKLSAgICBs
b2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CisgICAgbG9hZFB0ckZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BDcmVhdGVUaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNo
ZWRDYWxsZWUoKSwgY2FjaGVkRnVuY3Rpb25SZWcpOwogICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxl
Q2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1Q
dHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKICAg
ICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CkBAIC0xMzcyLDcgKzEzODUsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1
ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMzgyLDcg
KzEzOTYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIHhvcjMyKFRydXN0
ZWRJbW0zMigweDEpLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNW
YWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMzk0LDcgKzE0MDksOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
cmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQwNCw3ICsxNDIw
LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1YwogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE4LDEw
ICsxNDM1LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0
YW5jZVZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjphcmd1
bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjMpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTE0MzAsNyArMTQ0OCw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9v
cF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBpZiAoVU5MSUtF
TFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1enppbmcoKSAmJiBt
X2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkp
IHsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29w
c0ZvckZ1enppbmcoKSAmJiBtX3VubGlua2VkQ29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJs
ZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAgICAgICB1aW50cHRyX3QqIHB0ciA9IHZt
KCkuZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9h
ZFB0cihwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2hQ
dHIoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUlu
ZmluaXRlTG9vcHNMaW1pdCgpKSk7CkBAIC0xNDQwLDcgKzE0NTgsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAjZWxzZQogICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOwogI2VuZGlmCi0gICAgICAgIG1vdmVWYWx1ZShtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHJlc3VsdFJlZ3MpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3By
KCkpOwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBA
IC0xNDUzLDggKzE0NzEsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1CiAKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKICAgICBpZiAo
Y2FuQmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQz
MihQb3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJ
bmNyZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJs
b2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVz
cyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAg
fQogfQogCkBAIC0xNTA5LDcgKzE1MjgsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tf
dHJhcHMoY29uc3QgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBz
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhh
bmRsZVRyYXBzLCBhcmd1bWVudEdQUjApOwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zm
c2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTUyMiw3ICsxNTQyLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9w
X2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNo
KFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTE1NjQsMzQgKzE1ODQsMzYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0cgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNvZGUu
bV9yZWdleHA7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwganNDYXN0PFJlZ0V4cCo+KG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CisgICAgR1BSUmVnIGdsb2JhbEdQUiA9IGFy
Z3VtZW50R1BSMDsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQUik7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIGdsb2JhbEdQUiwganNDYXN0PFJlZ0V4cCo+KG1f
dW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKICAgICBlbWl0U3RvcmVD
ZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZv
aWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5
bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVj
b2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5kaWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0
aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbCwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25z
dGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKIAogICAgIE9wY29kZUlEIG9wY29kZUlEID0g
T3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1
bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29k
ZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0
LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29k
ZUlEID09IG9wX25ld19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bj
b2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsK
ICAgICB9CiB9CiAKQEAgLTE2MjEsMjMgKzE2NDMsMjQgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5j
RXhwckNvbW1vbihjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2Rl
Lm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
YXJndW1lbnRHUFIxKTsKICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
biA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwor
ICAgIGF1dG8gY29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3Rh
bnQsIGFyZ3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7
CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24p
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0g
b3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlE
ID09IG9wX25ld19hc3luY19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9w
Y29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHApOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5
bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOwogICAgIH0KIH0KIApAQCAtMTY2NCwyOSArMTY4NywzMCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1CiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5PigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVzU3RhcnQg
PSBieXRlY29kZS5tX2FyZ3Y7CiAgICAgaW50IHNpemUgPSBieXRlY29kZS5tX2FyZ2M7Ci0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2Zp
bGUsIHJlZ1QwLCBzaXplKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9m
ZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQ
UjIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdB
cnJheTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVu
dEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0Fy
cmF5V2l0aFNpemU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdU
MCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmls
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAg
ICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICBtYXRl
cmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmd1bWVudEdQUjIpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogI2Vsc2UKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJ
bnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNl
dE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMik7CiAgICAgZW1pdExvYWQoc2l6ZUlu
ZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBk
c3QsIHJlZ1QzLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0K
IApAQCAtMTY5NCw4ICsxNzE4LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRo
X3NpemUoY28KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgbV9pc1NoYXJlYWJsZSA9IGZhbHNlOwor
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlw
ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2Rl
QmxvY2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEu
bV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0
ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTE3NzcsMjAgKzE4MDMsMjUgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIHN0YXRpY19hc3Nl
cnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBo
YXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJl
ZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25B
cmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BS
UmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2
bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgewor
ICAgICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUg
YSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJl
Z1QyOworICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tl
dFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB9CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNr
ZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywg
bV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QxKTsKKyAgICBsb2dT
aGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1Qy
KSwgcmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCiAj
ZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250
cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBt
X2lzU2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEJhc2ljQmxvY2tMb2Nh
dGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb247
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRl
Q29kZSgqdGhpcyk7CkBAIC0xODYwLDcgKzE4OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YXJndW1lbnQoY29uc3QgSW5zCiAgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJl
Z3MpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKQEAgLTE4ODYsNyArMTkxNyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QKICAgICBlbWl0TG9hZFByb3Rv
dHlwZSh2bSgpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BS
LCBzbG93Q2FzZXMpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVn
cyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAko
cmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFyaXRo
UHJvZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJDYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIK
ICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVy
LmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKQEAgLTI4NTUsNyArMjg1Niw3IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29u
c3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiByZXN1
bHQgPSBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIApAQCAt
Mjg4MCw3ICsyODgxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRj
aAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0
IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
Y29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NF
UlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9
PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoa2V5LmlzSW50MzIoKSkKQEAgLTI5
MDMsNyArMjkwNCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHZv
aWQqIHJlc3VsdDsKLSAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29k
ZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgU3Ry
aW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVTdHJpbmdTd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAKICAgICBpZiAoa2V5LmlzU3RyaW5nKCkpIHsKICAg
ICAgICAgU3RyaW5nSW1wbCogdmFsdWUgPSBhc1N0cmluZyhrZXkpLT52YWx1ZShnbG9iYWxPYmpl
Y3QpLmltcGwoKTsKQEAgLTI5MTksNyArMjkyMCw2IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25Td2l0Y2gKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVz
dWx0KTsKIH0KIAotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1
ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RydWN0aW9uKiBwYykp
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMjk3MSw3ICsyOTcxLDYg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdgogCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXNvbHZlZFNjb3BlKTsKIH0KLSNlbmRpZgogCiBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBFbmNvZGVkSlNWYWx1ZSwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RydWN0aW9uKiBwYykpCiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24g
MjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5MCw5ICsyOTAsNyBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkdldFByCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRj
aENoYXJXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVk
SlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIGNo
YXIqLCAoVk0qLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90
IG1pbikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hTdHJpbmdX
aXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4KSk7Ci0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2Vs
aW5lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24q
IGJ5dGVjb2RlUEMpKTsKLSNlbmRpZgogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJ
bnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25QdXRUb1Njb3BlLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlv
biogYnl0ZWNvZGVQQykpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBs
YW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5j
cHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxh
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDEyIEBAIGF1dG8gSklUUGxhbjo6dGll
cigpIGNvbnN0IC0+IFRpZXIKIAogSklUQ29tcGlsYXRpb25LZXkgSklUUGxhbjo6a2V5KCkKIHsK
LSAgICByZXR1cm4gSklUQ29tcGlsYXRpb25LZXkobV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJu
YXRpdmUoKSwgbV9tb2RlKTsKKyAgICBKU0NlbGwqIGNvZGVCbG9jazsKKyAgICBpZiAobV9tb2Rl
ID09IEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpCisgICAgICAgIGNvZGVCbG9jayA9IG1f
Y29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgIGVsc2UKKyAgICAgICAgY29kZUJs
b2NrID0gbV9jb2RlQmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICByZXR1cm4gSklU
Q29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBtX21vZGUpOwogfQogCiBib29sIEpJVFBsYW46Omlz
S25vd25Ub0JlTGl2ZUFmdGVyR0MoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAyODMwNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0
ZXJfYnlfaWQoY29uc3QKIAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAg
ZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyQnlJZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgbV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lk
KGNvbnN0CiAKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2Fk
UGF5bG9hZChzZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNl
dHRlckJ5SWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihwcm9w
ZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVy
X2J5X2kKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5
bG9hZChnZXR0ZXIsIHJlZ1QzKTsKICAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUNCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5
KS5pbXBsKCksIGF0dHJpYnV0ZXMsIHJlZ1QzLCByZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCByZWdUMSwgbV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1w
bCgpLCBhdHRyaWJ1dGVzLCByZWdUMywgcmVnVDQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNv
bnMKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHByb3Bl
cnR5LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1
dGVzLCByZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwg
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwo
Y29ucwogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMik7CiAgICAgZW1pdExvYWQocHJv
cGVydHksIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDMp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJp
YnV0ZXMsIHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFs
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
MjMsNyArMTIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CkBAIC0xMzEsOCArMTMxLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGVtaXRMb2FkKGJhc2UsIGJhc2VS
ZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkpOwogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSk7CiAgICAgSklURGVsQnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCksCiAgICAgICAgIGJhc2VS
ZWdzLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBA
IC0xNjYsNyArMTY2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0
cgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eSwgcHJvcGVydHlSZWdz
LnRhZ0dQUigpKTsKIAogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKICAgICAgICAgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgcmVzdWx0UmVncywgSW52YWxpZEdQ
UlJlZywgcmVnVDQpOwogCiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtMjAy
LDcgKzIwMiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKIAog
ICAgIGVtaXRMb2FkMihiYXNlLCBiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQ
UigpLCBwcm9wZXJ0eSwgcHJvcGVydHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5bG9h
ZEdQUigpKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRl
QnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdz
LnBheWxvYWRHUFIoKSksIEpTVmFsdWVSZWdzKHByb3BlcnR5UmVncy50YWdHUFIoKSwgcHJvcGVy
dHlSZWdzLnBheWxvYWRHUFIoKSksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZh
bHVlKCkpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5
VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MoYmFzZVJlZ3MudGFnR1BSKCksIGJh
c2VSZWdzLnBheWxvYWRHUFIoKSksIEpTVmFsdWVSZWdzKHByb3BlcnR5UmVncy50YWdHUFIoKSwg
cHJvcGVydHlSZWdzLnBheWxvYWRHUFIoKSksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgcmVzdWx0UmVncyk7CkBAIC0yMTYsNyAr
MjE2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogCiAgICAgZW1pdExvYWQoYmFzZSwgYmFzZVJlZ3Mu
dGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRl
bGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52
YWx1ZSgpKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIHJlc3VsdFJlZ3MpOwpAQCAtMjM3LDcgKzIzNyw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFs
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CkBAIC0yNDksNyArMjQ5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgICAgICBhdXRvIG5vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwogICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1Q0KTsKICAgICAgICAgbm90Q2VsbC5saW5r
KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKICAgICB9IGVsc2UgewogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZSwgcmVnVDEpOwogICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAs
IHByb2ZpbGUsIHJlZ1Q0KTsKQEAgLTI1Nyw3ICsyNTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCiAgICAgICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVn
KTsKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAg
ICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwpAQCAtMjY1LDcgKzI2
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICAgICAgbV9nZXRCeVZhbHMuYXBw
ZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKICAgICB9CiB9CkBAIC0y
NzUsNyArMjc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQog
ICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKICAgICAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICAgICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgICAgIEpJVEdl
dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXhdOwpAQCAt
Mjg0LDcgKzI4NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkK
ICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKLSAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgfQogfQpAQCAt
MzA1LDEzICszMDUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25z
dAogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAg
ICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUiwgcmVzdWx0UmVncywgSW52YWxp
ZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRz
dCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBA
IC0zMzAsNyArMzMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUo
YwogCiAgICAgYXV0byBiYXNlR1BSID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBh
dXRvIHByb3BlcnR5R1BSID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHBy
b3BlcnR5R1BSKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIApAQCAtMzQ4
LDcgKzM0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklUUHV0
QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdU
NCksIEludmFsaWRHUFJSZWcsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5zdHViSW5mbygpLT5w
cm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25h
bWUoYwogICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUNSwgcmVnVDQpOwogCiAgICAgYXV0
byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmlu
ZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRP
cHRpbWl6ZTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBiYXNlUmVncywgcHJvcGVydHlS
ZWdzLCB2YWx1ZVJlZ3MsIGdlbi5zdHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0ciht
X3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VSZWdzLCBwcm9wZXJ0eVJl
Z3MsIHZhbHVlUmVncywgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwog
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAg
LTM5NSw3ICszOTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25z
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigp
KTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZh
dGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAogICAgICAgICBiYXNlUmVncywgYnJhbmRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKQEAgLTQxOCw3ICs0MTgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3By
aXZhdGVfYnJhbmQoCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBt
X3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXhdOwogICAgICsr
bV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVC
cmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgYnJhbmRSZWdzKTsKKyAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1t
UHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGJhc2VSZWdzLCBicmFuZFJlZ3MpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTQzNSw3ICs0MzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jaGVja19wcml2YXRlX2JyYW5kKGNvCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgYmFzZVJlZ3MsIGJyYW5k
UmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC00NTIsNyArNDUyLDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAgIEpJVFByaXZhdGVC
cmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZh
dGVCcmFuZEFjY2Vzc0luZGV4XTsKICAgICArK21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXg7CiAg
ICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywg
YnJhbmRSZWdzKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNr
UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7CiAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIApAQCAt
NDY1LDcgKzQ2NSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwpAQCAtNDc4LDcgKzQ3OCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwocmVnVDAsIHJlZ1Q2LCByZWdUNyk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgcmVnVDYsIEludmFsaWRHUFJS
ZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNTA0LDcgKzUwNCw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFN
b2RlID0gSklUOjplY21hTW9kZShieXRlY29kZSk7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgICAgICBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKQEAgLTUyNCw3ICs1MjQsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgZW1pdExvYWQy
KGJhc2UsIHJlZ1QyLCByZWdUMSwgcHJvcGVydHksIHJlZ1QzLCByZWdUMCk7CiAgICAgZW1pdExv
YWQodmFsdWUsIHJlZ1Q1LCByZWdUNCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDEpLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBnZW4u
c3R1YkluZm8oKSwgcHJvZmlsZSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0Rp
cmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJp
Y3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDog
KGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDog
b3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9wcm9m
aWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDEp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBn
ZW4uc3R1YkluZm8oKSwgcHJvZmlsZSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNTQyLDEzICs1NDIsMTMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRS
ZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKKyAgICAgICAgbV9w
cm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJ
bnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2sp
LCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCBy
ZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTU1OCwxMyArNTU4LDEzIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQ
YXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAg
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAg
LTU3NSw3ICs1NzUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGly
ZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRMb2FkKGJhc2Us
IHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJl
Z1QxKTsKQEAgLTU4MywxMyArNTgzLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9k
aXJlY3QoY29uc3QKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNj
ZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNz
VHlwZTo6R2V0QnlJZERpcmVjdCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwog
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBl
bWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIo
KSk7CiB9CiAKQEAgLTU5OSwxMyArNTk5LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfZGlyZWN0KGMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlk
c1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1
bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHVi
SW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTYxNCwxMCArNjE0LDEwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKICAgICAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC02MzAsMTMgKzYz
MCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAKICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShy
ZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwor
ICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmls
ZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJl
c3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIo
KSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC02NDYsMTMgKzY0NiwxMyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9m
aWxlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC02NjMsNyArNjYzLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5t
X3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKICAgICAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVt
aXRMb2FkKHRoaXNWUmVnLCByZWdUNCwgcmVnVDMpOwpAQCAtNjczLDEzICs2NzMsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjbwogICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzOjpwYXls
b2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIEludmFsaWRHUFJSZWcp
OworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJv
ZmlsZWRDb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzOjpwYXlsb2Fk
T25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIEludmFsaWRHUFJSZWcpOwog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCBy
ZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTY4
OSwxMyArNjg5LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdp
dGhUaGlzPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRo
VGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRX
aXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUNCwgcmVnVDMpLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRW
UmVnLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgCiAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTcxMCwxNSArNzEw
LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9m
bGFncy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHZh
bHVlLCByZWdUMywgcmVnVDIpOwogICAgIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCisg
ICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxl
ZENvZGVCbG9jaywgKmlkZW50KSwKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSW52YWxpZEdQUlJlZywKICAgICAgICAg
cmVnVDEsIGJ5dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUoKSwgZGlyZWN0ID8gUHV0S2luZDo6RGly
ZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0KTsKICAgICAKQEAgLTczOCw3ICs3MzgsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMp
OwogCkBAIC03NDgsNyArNzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChj
b25zdCBJbgogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRC
eUlkSW5kZXgrK107CiAgICAgCiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigKLSAgICAg
ICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBn
ZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgICAgIGdl
bi5zbG93UGF0aEZ1bmN0aW9uKCksIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
fQpAQCAtNzU4LDE0ICs3NTgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3Qg
SW5zdHJ1YwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5C
eUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRMb2FkKGJhc2Us
IHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJl
Z1QxKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6
cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZhbGlkR1BS
UmVnKTsKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CkBAIC03NzksMTMgKzc3OSwxMyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogCiAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTc5Niw3ICs3OTYsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQ29kZUJsb2NrKTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7CiAKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0
eSwgcmVnVDMsIHJlZ1QyKTsKQEAgLTgwNCw3ICs4MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
bl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCBwcm9maWxlLCByZWdUNCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
ICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CiAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CkBAIC04MTksMTQgKzgxOSwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jayk7CiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2lu
QnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5
VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC04MzcsNyArODM3LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlcgogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3Byb2Zp
bGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxv
YWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC04NTMsNyArODUz
LDcgQEAgdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaQogICAgIEpJVElu
QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQ
cml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlv
bkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtODkwLDcgKzg5MCw3IEBA
IHZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWUKIHsKICAgICBpZiAoIW5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmpl
Y3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MsIHVuc2lnbmVkIGRlcHRoKQpAQCAtOTA2LDcgKzkwNiw3IEBAIHZvaWQgSklUOjplbWl0
UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
ID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKQEAgLTkxNiwxMSArOTE2LDExIEBAIHZvaWQgSklU
OjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSog
Y29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2
ZVR5cGUsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUg
PSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2Zp
bGVkQ29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUp
OwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFs
TGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1f
cHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwogICAgICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVn
VDEsIHJlZ1QwKTsKQEAgLTkzMSw3ICs5MzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczogCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29w
ZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVz
b2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2Nv
cGUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwgcmVnVDEpOwpAQCAtMTAzOSw3ICsxMDM5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CkBAIC0xMTQ2LDcgKzEx
NDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAgICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIApAQCAtMTE1
Niw3ICsxMTU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2Nv
cGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9w
ZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRz
dCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlv
bik7CiB9CiAKIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFu
ZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCkBAIC0xMTkwLDcg
KzExOTAsNyBAQCB2b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5t
X3Njb3BlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7CkBA
IC0xMjAyLDcgKzEyMDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zCiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNj
b3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0
aW9uLgogICAgICAgICAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7CiAgICAgICAg
ICAgICAKQEAgLTEyMTcsNyArMTIxNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnMKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNv
bnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVU
eXBlLCBtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0g
SlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxl
ZENvZGVCbG9jayk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsK
ICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwpAQCAtMTMxOCw3ICsxMzE4LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgICAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Ro
cm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRUb1Njb3BlLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwg
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTMzMyw3ICsxMzMzLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIGVtaXRMb2FkUGF5bG9hZChhcmd1
bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRz
OjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
ICsgVGFnT2Zmc2V0KSwgcmVzdXRsUmVncy50YWdHUFIoKSk7CiAgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSArIFBheWxvYWRPZmZzZXQpLCByZXN1dGxSZWdzLnBheWxv
YWRHUFIoKSk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIHJlc3V0bFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3V0bFJlZ3MpOwogICAgIGVt
aXRTdG9yZShkc3QsIHJlc3V0bFJlZ3MudGFnR1BSKCksIHJlc3V0bFJlZ3MucGF5bG9hZEdQUigp
KTsKIH0KIApAQCAtMTM1NSw3ICsxMzU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2Fy
Z3VtZW50cyhjb25zdAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOTIgKzQ5LDExMyBA
QCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpzY3JhdGNoOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwg
cHJvcGVydHlHUFIpOwogCi0gICAgaWYgKG1ldGFkYXRhLm1fc2VlbklkZW50aWZpZXJzLmNvdW50
KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7Ci0gICAg
ICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGlm
IChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3NlZW5JZGVudGlmaWVy
cy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkg
eworICAgICAgICBhdXRvIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoYmFzZUdQUik7CisgICAg
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2Ny
YXRjaEdQUik7CiAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEJ5
VmFsLCBkc3QsIHNjcmF0Y2hHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAg
ICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1Qy
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwor
ICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIs
IHNjcmF0Y2hHUFIpOwogCi0gICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOwogCiAgICAgICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgcmVzdWx0UmVncywgcmVnVDIpOworICAgICAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9H
UFIpOworCiAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRTbG93Q2FzZSgp
OworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxp
bmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpHZXRCeVZhbDsKKyAgICAgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5
dGVjb2RlSW5kZXg7CisgICAgICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9J
bmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVy
ZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICAgICAgcmVzZXRTUCgp
OyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5
IHJlc2V0IFNQCisKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeVZhbHMu
YXBwZW5kKGdlbik7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwogICAgIH0KLQogfQogCisjaWYgIU9TKFdJTkRPV1MpCitzdGF0aWMgY29u
c3RleHByIEdQUlJlZyB2aWFibGVBcmd1bWVudEdQUjQgPSBHUFJJbmZvOjphcmd1bWVudEdQUjQ7
CitzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2aWFibGVBcmd1bWVudEdQUjUgPSBHUFJJbmZvOjph
cmd1bWVudEdQUjU7CisjZWxzZQorc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmlhYmxlQXJndW1l
bnRHUFI0ID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKK3N0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZp
YWJsZUFyZ3VtZW50R1BSNSA9IEdQUkluZm86Om5vbkFyZ0dQUjE7CisjZW5kaWYKKwogdGVtcGxh
dGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nh
c2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisgICAgaWYgKCFoYXNB
bnlTbG93Q2FzZXMoaXRlcikpCisgICAgICAgIHJldHVybjsKKworICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOwogCi0g
ICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlv
bkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KGFyZ3VtZW50R1BSMyAhPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eSk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBhcmd1
bWVudEdQUjMpOworICAgIG1vdmUoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHks
IHZpYWJsZUFyZ3VtZW50R1BSNCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwg
YXJndW1lbnRHUFIxKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVu
dEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25H
ZXRCeVZhbE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRH
UFI0KTsKICNlbHNlCi0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwotICAgICAgICBB
U1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsK
KyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVj
b2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogCi0gICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0gICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgbW92ZShUcnVz
dGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKLSAgICAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhcmcx
IGFscmVhZHkgdXNlZC4KLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJn
dW1lbnRHUFIyOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7Ci0KLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOwotICAgICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgICAgICBDYWxsIGNh
bGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGwgPSBhcHBl
bmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpOwotICAgICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVu
dEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQuCisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9maWxlR1BSID0gYXJndW1lbnRHUFIyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAg
IHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UgPT0gcmVnVDApOworICAgIHN0
YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkgPT0gcmVnVDEp
OworCisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVj
b2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmls
ZUdQUik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisK
KyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwotICAgIH0KKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCkBAIC0xNDksNyArMTcwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBn
bG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
ICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBn
bG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAg
aWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTYwLDggKzE4MSw4IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IGFyZ3VtZW50R1BSNTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3Vt
ZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKQEAg
LTE4NywzNCArMjA4LDQwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29u
c3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVy
dHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQpOworCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2UpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAot
ICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHJlZ1Qy
KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAg
ICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2
YXRlTmFtZSwKKyAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRS
ZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJl
Z3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewogICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKQEAgLTIyMyw5ICsyNTAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9wcml2YXRlX25hbWUoYwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdU
MTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9w
ZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlH
UFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVu
dEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25H
ZXRQcml2YXRlTmFtZU9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUsMjYgKzI2NCwyMCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fz
c2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNf
YXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQ
cml2YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwo
b3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCkBAIC0yNjQsNyArMjg3LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQu
dGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAwLDIxICszMjMsMjggQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVj
b2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgYnJh
bmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRH
UFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwotCiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5k
QWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQp
KQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAKICAg
ICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ug
c2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC0zMjQsMTcgKzM1NCwy
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgZW1pdFdy
aXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJp
dmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIFVOVVNFRF9QQVJBTShjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIEpJ
VFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nl
c1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIg
PSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldFByaXZh
dGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFuZEdQUik7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQsIGFyZ3VtZW50R1BSMyk7CisgICAgY2Fs
bE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+KEFk
ZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0
aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVu
dEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5
dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMzQ0LDI0ICszNzks
MTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJl
YWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6
YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFp
dHM8ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRU
eXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRp
bWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1p
emU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25TZXRQcml2
YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRp
ZgogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM3MCwzMyArMzk5LDQ3IEBAIHZvaWQgSklUOjplbWl0X29w
X2NoZWNrX3ByaXZhdGVfYnJhbmQoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYnJhbmQgPSBieXRlY29kZS5tX2JyYW5k
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihicmFuZCwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7
CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJhbmRHUFIpOwog
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRl
QnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBz
dHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tQcml2YXRlQnJhbmQ+KCk7CisgICAgVU5VU0VE
X1BBUkFNKGJ5dGVjb2RlKTsKKwogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYg
Z2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4Kytd
OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIs
IGJyYW5kR1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJn
dW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJp
dmF0ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTQwNiwyNCArNDQ5LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19w
cml2YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9
PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0
eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJy
YW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9u
YW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBh
cHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTQzNSwzMCArNDcyLDQzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcmVnVDMpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFs
UmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNl
bGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBy
ZWdUMywgcmVnVDQpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBi
YXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VH
UFIsIHByb2ZpbGVHUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRl
Y29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsK
IAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0KTsK
KyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQ
dXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAg
ICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVl
UmVncyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIsIHN0dWJJbmZvR1BSKTsKKwogICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRT
bG93Q2FzZSgpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNj
ZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8tPnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVf
djxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3RE
aXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29u
c2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxz
LmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91
dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNDc0LDE1ICs1MjQsMTIgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUg
ZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7CiAgICAg
ICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBl
Y21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgICAgICBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBAIC00OTgs
NyArNTQ1LDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIAog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAvLyBUaGV5IGFyZSBjb25maWd1cmVk
IGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVyZWQuCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3Ry
aWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0
cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdU
MiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBhcmd1bWVudEdQUjEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHZpYWJsZUFyZ3VtZW50
R1BSNCk7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1
dEJ5VmFsRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgdmlhYmxlQXJn
dW1lbnRHUFI1KTsKKyAgICBlbHNlCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRh
ZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWw6Ok1l
dGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCB2aWFibGVBcmd1bWVudEdQUjUpOworICAg
IGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk+
KEFkZHJlc3ModmlhYmxlQXJndW1lbnRHUFI0LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBhcmd1bWVudEdQUjMsIHZpYWJsZUFyZ3VtZW50R1BSNCwgdmlhYmxlQXJndW1lbnRHUFI1KTsK
ICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9m
ZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUxMiw3ICs1NjgsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZz
ZXRHUFIgPSByZWdUNTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkp
LCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0g
aXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
U3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXpl
KSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU3OSw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTUzMywxOCArNTg5LDI0IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBi
ZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAg
IC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJl
Z1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2Zp
bGU7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAg
IHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlLCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZh
bFJlZ2lzdGVyczo6dmFsdWUsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOwor
ICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1
c2VkLmNvbnRhaW5zKHJlZ1Q1KSk7CisgICAgfQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29k
ZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSk7CiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCBnbG9iYWxPYmplY3RHUFIpOwpAQCAtNTcwLDIwICs2MzIsMzEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJv
cGVydHlHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsK
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlW
YWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHVi
SW5mby0+cHJpdmF0ZUZpZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNh
biB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMg
Y2VsbC4KQEAgLTU5NCw4ICs2NjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9u
YW1lKGNvbnN0CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKLSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtp
bmQgPSBieXRlY29kZS5tX3B1dEtpbmQ7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVj
dGlvbik7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9w
dXRCeVZhbEluZGV4KytdOwogCkBAIC02MDMsMTMgKzY3NSwxNSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0
aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFs
U2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
ICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2Ji
ZXJlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZUdQUiA9IHJlZ1QyOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3Bl
cnR5R1BSLCB2YWx1ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikp
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0
ZU5hbWU+KCk7CisKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJndW1lbnRH
UFIzKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHZpYWJsZUFyZ3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVy
YXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplKT4oQWRkcmVzcyh2aWFibGVB
cmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywg
dmlhYmxlQXJndW1lbnRHUFI0LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTYyMiwxOCArNjk2LDEyIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gcmVnVDQ7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgZWxzZQotICAgICAg
ICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQpAQCAtNjQzLDE0ICs3MTEsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0Owog
CiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAg
ICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Qz
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIApAQCAt
NjgwLDcgKzc0OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAg
IGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDIs
IHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
c2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02
ODksNyArNzU4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAg
aW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMiwg
cmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
ZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC02OTksNyArNzY5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJf
YnlfaQogICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyU2V0dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MDksNyArNzgwLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
ckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
LCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdU
MCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTcxOSw3ICs3OTEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25z
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7
CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyNywyMyArODAwLDMzIEBAIHZvaWQgSklUOjplbWl0X29w
X2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
dW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpzdHVi
SW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZURlbEJ5SWRS
ZWdpc3RlcnM6OnNjcmF0Y2g7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJh
c2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsK
ICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwg
c2NyYXRjaEdQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpEZWxldGVCeUlEOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlJ
ZHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdU
MCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkp
OworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAK
ICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIg
aWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmllciBh
dCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVnaXN0
ZXJzLgpAQCAtNzU5LDE1ICs4NDIsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9p
ZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVREZWxCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRzW21fZGVsQnlJZEluZGV4KytdOwogCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUu
bV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBh
cmd1bWVudEdQUjIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpLCBUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CkBAIC03ODEsMjQgKzg2NiwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5
X2lkKGNvbnN0IEluCiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50
R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0Owog
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBw
cm9wZXJ0eUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRp
bWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0
ZUJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0
aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1Qw
KSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7
Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTgwOCw3ICs4ODgsNyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVs
cGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC04NDUsMjIgKzkyNSwz
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwg
YmFzZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDApOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgcHJvcGVydHkpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVE
ZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvcGVy
dHlHUFIsIHByb3BlcnR5KTsKKwogICAgIEpJVERlbEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMywgcmVnVDIpOwotICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEJhc2Vs
aW5lRGVsQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWw7CisgICAgc3R1YkluZm8t
PmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dD
YXNlKCk7CiAgICAgbV9kZWxCeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGJveEJvb2xlYW4ocmVzdWx0R1BSLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVy
IGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdp
c3RlcnMuCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1i
YXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtODgzLDkgKzk3NCwxMSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIGFy
Z3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0
aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRHUFIzLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgp
KSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC04OTksMjQgKzk5MiwxOSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVn
IGVjbWFNb2RlR1BSID0gYXJndW1lbnRHUFI0OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemU7Ci0gICAg
ZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxldGVCeVZhbE9wdGlt
aXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQo
cmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQpAQCAtOTI2LDcgKzEwMTQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAg
ICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC05NjEsMjIgKzEwNDksMzEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdl
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsK
IAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotCi0g
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBB
Y2Nlc3NUeXBlOjpUcnlHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdl
dEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6VHJ5R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0g
c3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFw
cGVuZChnZW4pOwogICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOwogfQogCkBAIC05ODYsMTQgKzEwODMsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb248
ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQ
UjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZS
ZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMt
PnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCk7CkBAIC0xMDAzLDI2ICsxMTAzLDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlf
Z2V0X2J5X2lkKGNvbnMKICAgICBtb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uVHJ5R2V0QnlJZE9w
dGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uVHJ5R2V0
QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uVHJ5R2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAz
MCwyMiArMTEyNCwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGly
ZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHVi
SW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVn
cyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTA1NCwxNiAr
MTE1NywxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZERpcmVj
dE9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJh
d0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRH
UFIyKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0
QnlJZERpcmVjdE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwog
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpA
QCAtMTA3Myw4MyArMTE3OCw2MiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRH
UFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUpLCBk
ZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRC
eUlkRGlyZWN0T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJl
ZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcs
IHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogICAg
IAogICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJy
YW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEu
bW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJy
YXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdU
MCwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUs
IHJlZ1QxKTsKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6
TWV0YWRhdGE6Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhOjpv
ZmZzZXRPZk1vZGUoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhN
b2RlID0gYnJhbmNoMzIoTm90RXF1YWwsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50OF90
PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aDo6
b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG5v
dEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0KICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vz
c1R5cGU6OkdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBh
ZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdl
bik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJl
ZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Ci0KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWdUMSwgdGhpc1ZSZWcpOwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlu
a2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywg
c3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogCi0gICAgSklUR2V0QnlJZFdpdGhU
aGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlk
c1dpdGhUaGlzLmFwcGVuZChnZW4pOworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQg
T1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAg
IGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMTU4LDE2
ICsxMjQyLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFu
dChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsK
KyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTE3NywyNiAr
MTI2Myw1OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVHUFIpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1
ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVy
czo6dGhpc1ZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpy
ZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgdGhpc0dQUik7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc0dQUiwgdGhpc1ZSZWcpOworCisgICAgSklUR2V0QnlJ
ZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAg
ICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3ModGhpc0dQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWRXaXRo
VGhpczsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRl
eDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2Vu
ZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5m
b0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBu
ZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBt
X2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xMjA2LDcg
KzEzMjQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRy
ZXNzKCk7CkBAIC0xMjQxLDE2ICsxMzU5LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5
SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdp
dGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVu
dEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUs
IGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9w
ZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1l
bnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1
bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVu
dEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMjYwLDI4ICsxMzgxLDIyIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSBpbiB1c2UuCi0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyB0aGlzR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB0
aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnRoaXNWYWx1ZTsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0YXRp
Y19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3Rh
dGljX2Fzc2VydCh0aGlzR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5m
b0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJ
ZFdpdGhUaGlzT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAg
LTEyOTEsNyArMTQwNiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKQEAgLTEzMjksMjMgKzE0NDQsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUu
bV92YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBh
bmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1
c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdo
b3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUg
U3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0
aGlzLgogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1
ZVZSZWcsIHJlZ1QxKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1
dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNo
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZSZWcsIGJhc2VHUFIsIHZhbHVlVlJlZywg
dmFsdWVHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNl
VlJlZyk7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksCi0gICAgICAgIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMywgcmVnVDIsIGVjbWFN
b2RlKGJ5dGVjb2RlKSwKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzdHViSW5mb0dQUiwgc2NyYXRjaEdQUiwgZWNtYU1vZGUo
Ynl0ZWNvZGUpLAogICAgICAgICBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpO
b3REaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlJZDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9
IGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHVi
SW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8g
V2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNl
dCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAg
ICAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJp
ZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC0xMzU5LDE0ICsxNDg5LDE4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlk
PigpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKICAgICAKICAgICBKSVRQdXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2Vu
LnNsb3dQYXRoRnVuY3Rpb24oKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwg
YXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMzc2LDI1
ICsxNTEwLDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFy
ZzEgYWxyZWFkeSBpbiB1c2UuCi0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1Qx
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFI0OwogICAgIHN0
YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAg
c3RhdGljX2Fzc2VydCh2YWx1ZUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1
YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX3B1dF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IGdlbi5zbG93UGF0aEZ1bmN0aW9uKCk7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChnZW4uc2xvd1BhdGhGdW5jdGlvbigpKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTE0MDQsNyArMTUzMiw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTE0NDEs
MjAgKzE1NjksMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Ywog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZv
OwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEluQnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgcmVnVDEpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5SWQ7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0NjMsMTQgKzE2MDIsMTcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVy
YXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxs
T3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1
bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJl
c3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Vu
bGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CkBAIC0xNDgwLDI4ICsxNjIyLDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6
OmJhc2U7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsK
ICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygp
KSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAg
Ly8gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Igd2lsbCBkbyBleGFjdGx5
IHdoYXQgd2UgbmVlZC4KICAgICAvLyBTbywgdGhlcmUncyBubyBwb2ludCBpbiBjcmVhdGluZyBh
IGR1cGxpY2F0ZSB0aHVuayBqdXN0IHRvIGdpdmUgaXQgYSBkaWZmZXJlbnQgbmFtZS4KICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkluQnlJZE9wdGlt
aXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE1MTAsMjUgKzE2NDYsMzMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxS
ZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQ
Uik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0g
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRk
U2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlWYWw7CisgICAgc3R1
YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFk
ZFNsb3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE1MzcsMTUgKzE2ODEsMTggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlW
YWxzW21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5
VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgYXJndW1lbnRHUFIyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIzKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHZpYWJsZUFy
Z3VtZW50R1BSNCk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbkJ5VmFs
T3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIHZpYWJsZUFyZ3VtZW50R1BSNCk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTU2LDU5ICsxNzAzLDcwIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BS
ID0gYXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNB
Uk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7
CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZh
bDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAgIC8v
IHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkg
d2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEg
ZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6
ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9w
dGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5C
eVZhbE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJh
bmQsIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxp
bmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIp
OwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAg
ICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1Yklu
Zm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlwZTsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQcml2
YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJVDo6
ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBi
YXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBB
U1NFUlQodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgVU5VU0VEX1BBUkFNKGJhc2UpOworICAgIFVO
VVNFRF9QQVJBTShwcm9wZXJ0eSk7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZUJyYW5kKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9p
bkJ5VmFsSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bih0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0
ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAg
ICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUp
PihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
LCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYx
OCwyNyArMTc3NiwyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdp
CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQ
Uik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0
KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BS
MSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUo
b3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFBy
aXZhdGVOYW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUo
b3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6
Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJh
dGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFw
cGVuZENhbGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhh
c1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxODA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVO
YW1lPigpOwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlw
ZTo6SGFzUHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2Rz
dCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQ
cml2YXRlTmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDQ2ICsxODE4LDc0
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVj
b2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2
YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5k
LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhcklu
amVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1p
dFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBz
Y3JhdGNoR1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAg
IHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Mo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFk
ZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxv
YWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hH
UFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBv
aW50KSksIHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJl
c3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7
ICsraSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5l
eHQoKSksIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKKwog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBS
ZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5
cGU7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKKwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKworICAgIEp1bXBMaXN0IHNs
b3dDYXNlOworCisgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJl
ZykgeworICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcpIHsK
KyAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OworICAgICAgICAgICAgbG9hZEds
b2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgICAgICB9CisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwg
bV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH07CisKKyAgICBh
dXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykgeworICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mTG9jYWxTY29wZURlcHRoKCksIHJlZ1QxKTsKKworICAgICAgICBB
U1NFUlQoc2NvcGVHUFIgPT0gcmVnVDApOworICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsK
KyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
KyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAgICAgIGp1bXAoKS5s
aW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9OwogCiAg
ICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAg
ICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5Ogog
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAg
ICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVG
b3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwotICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5n
RXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3Rh
bnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBs
b2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgorICAgICAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZDMyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2xv
YmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0Ojpv
ZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCkBAIC0xNzEzLDE2OCArMTg5MywxNjUgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAg
ICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAg
ICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVG
b3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0
YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZv
ciBHbG9iYWxWYXIqLAorICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KKyAg
ICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsK
KyAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9m
R2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1
cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0
aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0
KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0g
ICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENs
b3N1cmVWYXI6CisgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eToKICAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwot
ICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIp
OworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxv
YWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOworICAgIGVsc2UgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgIGlmIChwcm9m
aWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgcHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgIGVtaXRDb2RlKHBy
b2ZpbGVkUmVzb2x2ZVR5cGUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKworICAgICAgICAgICAgSnVtcExpc3Qg
c2tpcFRvRW5kOworICAgICAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJl
c29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mUmVzb2x2ZVR5cGUoKSwgcmVnVDEpOworCisg
ICAgICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkg
eworICAgICAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MSwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUpOworICAgICAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
KyAgICAgICAgICAgICAgICBub3RDYXNlLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICAgICAgZW1pdENhc2UoR2xv
YmFsUHJvcGVydHkpOworICAgICAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcik7Cisg
ICAgICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAg
ICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7
CisgICAgICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKIAotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkp
KTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0K
LSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAg
ICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
bm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICB9CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOwogCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQotI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKKyNlbHNlCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgUmVzb2x2ZVR5cGUgcHJv
ZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2sp
Lm1fcmVzb2x2ZVR5cGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNl
dCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEFTU0VS
VChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0g
Y3VycmVudEluc3RydWN0aW9uKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIg
PSByZWdUNzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIC8vIElmIHdlIHBy
b2ZpbGUgY2VydGFpbiByZXNvbHZlIHR5cGVzLCB3ZSdyZSBnYXVyYW50ZWVkIGFsbCBsaW5rZWQg
Y29kZSB3aWxsIGhhdmUgdGhlIHNhbWUKKyAgICAvLyByZXNvbHZlIHR5cGUuCiAKLSAgICBpZiAo
cmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0
YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgaWYgKHByb2Zp
bGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKKyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZp
cm9ubWVudCgpLCByZWdUMCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0
YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsK
KyAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+
bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOworCisgICAgICAgIGF1
dG8gY2xvc3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVy
biBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2Vs
aW5lOiBvcF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICAgICAgfTsKIAotI2RlZmlu
ZSBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfcmVzb2x2ZV9zY29wZV8j
I3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVy
YXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUo
UkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IpCisgICAgICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1
cm4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MiKTsKICAgICAgICAgfTsKLSN1bmRlZiBSRVNPTFZFX1NDT1BF
X0dFTkVSQVRPUgorCisgICAgICAgIGF1dG8gZ2VuZXJpY1Jlc29sdmVTY29wZUdlbmVyYXRvciA9
IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZl
U2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUg
Z2VuZXJpYyIpOworICAgICAgICB9OworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRh
dGFHUFIgPSByZWdUMjsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Qw
OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAK
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwogICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CiAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVz
b2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICAgICAgaWYgKHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElT
dHViKGNsb3N1cmVWYXJHZW5lcmF0b3IpOworICAgICAgICBlbHNlIGlmIChwcm9maWxlZFJlc29s
dmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAg
Y29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5l
cmF0b3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1Yihn
ZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwo
Y29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIH0KIAogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6
b3B0aW9uYWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUp
CiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5
IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1h
a2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxh
YmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxp
bmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkg
bm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKworICAgIENDYWxsSGVs
cGVycyBqaXQ7CisKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0
YTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7IC8vIGluY29taW5n
Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OyAvLyBpbmNvbWluZworICAg
IGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUMjsgLy8gaW5jb21pbmcKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7IC8vIGluY29taW5nCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3Mg
dGhydSB0byBzbG93IHBhdGguCi0gICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIg
PSByZWdUNDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVB
U0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAot
ICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0g
ICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRh
YmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Cisg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRh
VGFibGUoKSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAK
ICAgICBKdW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNr
ID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0
R1BSID0gSW52YWxpZEdQUlJlZykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsm
XSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9
IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZh
bGlkR1BSUmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAgICAg
ICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxP
YmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNl
dDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAg
fTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAg
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9s
b2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOwotCi0gICAgICAgIExhYmVsIGxvb3AgPSBsYWJlbCgp
OwotICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOwotICAgICAg
ICB7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9m
TmV4dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdU
MSk7Ci0gICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3AsIHRoaXMpOwotICAgICAgICB9Ci0g
ICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2NvcGVHUFIgPT0g
cmVnVDApOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRh
OjpvZmZzZXRPZkxvY2FsU2NvcGVEZXB0aCgpKSwgcmVnVDEpOworCisgICAgICAgIExhYmVsIGxv
b3AgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgSnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3QzMiha
ZXJvLCByZWdUMSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6
Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMSk7CisgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGxvb3AsICZqaXQpOworICAg
ICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0g
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEyICsyMDU5LDExIEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2so
KSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0g
ICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1l
dGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVj
dEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgp
KSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdU
MCk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRh
OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJl
Z1QxKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xODk3LDExICsyMDcz
LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAg
ICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEds
b2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1Qw
KTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9i
amVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTE5
MDksNyArMjA4NSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoK
LSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
UmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTE5MTksODMg
KzIwOTUsNDUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkp
LCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0g
ICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRv
RW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
KnJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsK
KyAgICB9IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2
ZVR5cGUpKSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAg
ICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKKyAgICAgICAg
aml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZl
VHlwZSgpKSwgcmVnVDEpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAg
ICAgICAgYXV0byBlbWl0Q2FzZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKKyAg
ICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5
cGUpOworICAgICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAg
ICAgIG5vdENhc2UubGluaygmaml0KTsKKyAgICAgICAgfTsKIAotICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyKTsKKyAgICAgICAgZW1pdENh
c2UoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsK
KyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAg
ICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAg
ICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRv
RW5kLmxpbmsoJmppdCk7CiAgICAgfQogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdl
dENUSVN0dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5r
TmFtZSk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29s
dmVUeXBlKSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3Bf
cmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBc
Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVz
b2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQo
dm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJl
c29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBc
Ci0gICAgfQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVS
QVRPUikKLSN1bmRlZiBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdl
bmVyYXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1
bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVz
ZQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmpl
Y3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBE
RkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmpl
Y3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4K
LSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZh
c3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82
NCkKQEAgLTIwMDQsMTcgKzIxNDIsMjEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1Jl
Z2lzdGVyKTsKICNlbmRpZgogCi0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IHJlZ1Q1OwotICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICBqaXQuc3RvcmUz
MihpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2Nr
R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BS
ID0gYXJndW1lbnRHUFIwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5zdHJ1Y3Rpb25HUFIgPSBh
cmd1bWVudEdQUjE7CiAKKyAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRH
UFIgIT0gY29kZUJsb2NrR1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVP
ZmZzZXRHUFIgIT0gZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5n
Qnl0ZWNvZGVPZmZzZXRHUFIgIT0gaW5zdHJ1Y3Rpb25HUFIpOworCiAgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOwogICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
Y29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigp
KSwgaW5zdHJ1Y3Rpb25HUFIpOwotICAgIGppdC5hZGRQdHIoYnl0ZWNvZGVPZmZzZXRHUFIsIGlu
c3RydWN0aW9uR1BSKTsKKyAgICBqaXQuYWRkUHRyKGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIs
IGluc3RydWN0aW9uR1BSKTsKIAogICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVy
YXRpb25SZXNvbHZlU2NvcGVGb3JCYXNlbGluZSk+KGdsb2JhbE9iamVjdEdQUiwgaW5zdHJ1Y3Rp
b25HUFIpOwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CkBAIC0yMDM0LDcgKzIx
NzYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgcGF0
Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNvbHZlX3Njb3Bl
Iik7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisjZW5kaWYgLy8gIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogCiB2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQog
ewpAQCAtMjA2Niw1OCArMjIwOCw3NSBAQCB2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmly
dHVhbFJlZ2lzCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5t
X3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJ
bmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFk
YXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKKyAgICBSZXNv
bHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgc2NvcGVHUFIpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIEp1bXBMaXN0IHNs
b3dDYXNlOworCisgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMp
OworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2Jh
bE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6
Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH07
CisgICAgCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUp
IHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVj
dHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ug
d2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmpl
Y3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUg
dmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAg
ICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0g
cmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAgICAgICAgICAg
Ly8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNh
Y2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlv
bmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rp
b24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEZyb21T
Y29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwog
CiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAt
PiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAg
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aFB0cihFcXVhbCwgc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAg
ICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQpOworICAgICAgICAgICAgbG9hZFB0ckZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9w
ZXJhbmQoKSwgcmVnVDEpOworCiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAg
ICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAg
ICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKICAgICAgICAgICAg
ICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwogICAgICAgICAg
ICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVu
ZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChz
Y3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwor
ICAgICAgICAgICAgbmVnMzIocmVnVDEpOworICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIo
cmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1Qx
LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJh
bmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRH
ZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0
Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAg
ICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QzKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQo
MSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOworICAgICAgICAgICAgbHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDMpLCByZWdUMyk7CisgICAgICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIHJlZ1QzKTsK
KyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CisKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpA
QCAtMjEyNywyMTEgKzIyODYsMTg5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogeworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1
cmVWYXIgfHwgcHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykKKyAgICAgICAgZW1pdENvZGUocHJvZmlsZWRSZXNvbHZlVHlwZSk7CisgICAgZWxz
ZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdU
MCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJl
Z1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc05vdEds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVz
b2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKICAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluayh0aGlz
KTsKIAotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVt
aXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0K
LSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVz
b2x2ZVR5cGUgaW50byBUMAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKIAogICAgICAgICBK
dW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2Up
OworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOwogCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAg
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkp
OwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwot
ICAgICAgICBicmVhazsKLSAgICB9CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOworCisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBy
ZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQogCi0j
ZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVy
YXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBpbnN0cnVjdGlvbik7Cit9CiAK
KyNlbHNlCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Nj
b3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZv
LnJlc29sdmVUeXBlKCk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZl
VHlwZSgpOwogCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJ
bmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQobV9j
b2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1
Y3Rpb24pOworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1f
Ynl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKworICAgIGF1dG8gY2xvc3Vy
ZVZhckdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJh
dGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX2dldF9m
cm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBt
ZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdU
NjsKKyAgICBhdXRvIGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0g
W10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3Bl
VGh1bmsodm0sIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAiQmFzZWxpbmU6IG9w
X2dldF9mcm9tX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0byBnZW5lcmlj
R2V0RnJvbVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklU
OjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5l
OiBvcF9nZXRfZnJvbV9zY29wZSBnZW5lcmljIik7CisgICAgfTsKKworICAgIGNvbnN0ZXhwciBH
UFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BS
ID0gcmVnVDI7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1
OwogCi0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRy
X3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEu
bV9vcGVyYW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0
cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFi
bGUoJm1ldGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAK
LSNkZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJv
bV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBU
aHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNP
TFZFX1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdF
VF9GUk9NX1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHNjb3BlR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRh
ZGF0YUdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2Nv
cGVHUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRh
ZGF0YUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAg
IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAg
aWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZt
LmdldENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRS
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAg
Y29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5l
cmF0b3IpOworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dl
dEZyb21TY29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0
aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2Vu
ZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlw
ZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1
bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTElu
dCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJv
dXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25n
aW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2Nv
cGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NF
UlQodGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwotCi0gICAgdGFn
UmV0dXJuQWRkcmVzcygpOwotCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBt
ZXRhZGF0YUdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKIAotICAgIEp1bXBMaXN0IHNs
b3dDYXNlOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1
Y3R1cmVPZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRh
ZGF0YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVn
VDApOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkp
OwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDEpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7
Ci0gICAgfTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSks
IHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKLSAgICBhdXRv
IGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykgeworICAgIEp1bXBMaXN0IHNsb3dDYXNlOworCisgICAgYXV0byBkb1ZhckluamVjdGlvbkNo
ZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGlmICgh
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgcmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZT
RVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsK
LSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdh
dGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVk
KSkpOworICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5q
ZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
YnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0
ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKICAgICAKLSAgICBh
dXRvIGVtaXRHZXRWYXJGcm9tUG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcg
cmVnKSB7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJl
Zyk7Ci0gICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyBy
ZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVn
KTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdl
dENsb3N1cmVWYXIgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIG9wZXJhbmRHUFIpIHsK
LSAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAg
ICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGFkZFB0
cihzY29wZUdQUiwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhvcGVyYW5k
R1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsK
LSAgICB9OwotCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8gZW1pdENvZGUgPSBb
Jl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5
cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3Ry
dWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3
ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVj
dC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2
YXIgaW5qZWN0aW9uLgotCi0gICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSByZWdU
MDsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7Ci0KLSAgICAgICAgICAgIGppdEFzc2VydChzY29w
ZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAg
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihF
cXVhbCwgYmFzZSwgcmVnVDMpOworICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVy
cyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRo
aW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFu
ZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNl
dE9mU3RydWN0dXJlKCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0
LmJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRk
cmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhz
Y29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKworICAgICAg
ICAgICAgaml0LmppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1
bXAgeworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaml0LmJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIHJlZ1Qz
KTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFk
YXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9m
ZnNldE9mT3BlcmFuZCgpKSwgcmVnVDEpOworCiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJM
RUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRl
clRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkp
OwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGlu
ZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAgICAg
ICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwg
cmVnVDEsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAg
ICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAg
ICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4
dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRl
eChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGppdC5uZWczMihyZWdUMSk7CisgICAgICAgICAgICBqaXQuc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
OgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgot
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkK
LSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkp
LCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAg
ICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUg
PT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4K
LSAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwor
ICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fb3BlcmFuZCkpLCByZWdUMyk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3Vy
ZVZhcihzY29wZUdQUiwgcmVnVDMpOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSks
IHJlZ1QzKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdp
c3RlcikpOworICAgICAgICAgICAgaml0LmxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgcmVnVDMp
OworICAgICAgICAgICAgaml0LmFkZFB0cihzY29wZUdQUiwgcmVnVDMpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkpLCByZWdUMCk7CisKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBA
IC0yMzQxLDg2ICsyNDc4LDYzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSkkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0g
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0
UHV0SW5mbykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAg
ICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUs
IGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlz
Tm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgq
cmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOwor
ICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJ
bmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBK
dW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9w
ZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2Up
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdU
MCk7CisgICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMp
LCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwg
dHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGpp
dC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQu
anVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkg
PSBqaXQuYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkp
KTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0
LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmpp
dCk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXIgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhci5saW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAo
KSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZq
aXQpOwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICB9CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwor
ICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0
KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAs
IEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxl
KSkpOworICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0
YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQo
KSkpOwogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVu
ayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfZnJvbV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwg
Q29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNl
LCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2Rl
ZmluZSBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVf
IyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBj
b25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAot
ICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAg
ICByZXR1cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJh
c2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1Jf
RUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRl
ZiBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZN
JiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2Fu
IG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGpp
dC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTI0MjksMTggKzI1NDMsMjQgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogI2VuZGlmCiAKICAgICB1c2luZyBN
ZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IHJlZ1Q1OwotICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBpbmNv
bWluZ0J5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgaml0LnN0b3JlMzIoaW5jb21pbmdC
eXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSk7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IGFyZ3Vt
ZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50
R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGluc3RydWN0aW9uR1BSID0gYXJndW1lbnRHUFIx
OworICAgIHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiAhPSBjb2RlQmxv
Y2tHUFIpOworICAgIHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiAhPSBn
bG9iYWxPYmplY3RHUFIpOworICAgIHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9mZnNl
dEdQUiAhPSBpbnN0cnVjdGlvbkdQUik7CisgICAgc3RhdGljX2Fzc2VydChtZXRhZGF0YUdQUiAh
PSBjb2RlQmxvY2tHUFIpOworICAgIHN0YXRpY19hc3NlcnQobWV0YWRhdGFHUFIgIT0gZ2xvYmFs
T2JqZWN0R1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG1ldGFkYXRhR1BSICE9IGluc3RydWN0aW9u
R1BSKTsKIAogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgY29kZUJsb2NrR1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQ
UiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsK
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRP
Zkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGluc3RydWN0aW9uR1BSKTsKLSAgICBqaXQuYWRk
UHRyKGJ5dGVjb2RlT2Zmc2V0R1BSLCBpbnN0cnVjdGlvbkdQUik7CisgICAgaml0LmFkZFB0cihp
bmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCBpbnN0cnVjdGlvbkdQUik7CiAKICAgICBBU1NFUlQo
UmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3RlcikpOwogICAgIGppdC5tb3ZlKG1ldGFkYXRhR1BSLCBHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3Rlcik7IC8vIFByZXNlcnZlIG1ldGFkYXRhIGluIGEgY2FsbGVlIHNhdmVkIHJl
Z2lzdGVyLgpAQCAtMjQ0OSw3ICsyNTY5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIENhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9uUHRy
VGFnKTsKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0LmVtaXROb25QYXRjaGFibGVFeGNl
cHRpb25DaGVjayh2bSk7CiAKLSAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZv
OjpudW1iZXJUYWdSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUp
KSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0
T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51
bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKIAogI2lmIENQVShYODZfNjQp
CkBAIC0yNDY5LDg4ICsyNTg5LDc4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSkkKICAgICBwYXRjaEJ1ZmZlci5saW5rKGp1bXBUb0hhbmRsZXIsIENvZGVMb2NhdGlv
bkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3df
b3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7
Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9i
YWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5k
aXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsK
LSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdU
MCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRj
aHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0
Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9m
KFJlZ2lzdGVyKSkpOwotfQorI2VuZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1f
c2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAg
ICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAg
ICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgp
OwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAg
IFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8g
ZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAg
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3Ry
dWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0
cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHks
IHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisg
ICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ug
d2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmpl
Y3QuCisgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBj
aGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVy
ZSgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBy
ZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1Qx
KSk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QxKSk7CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qy
KTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0g
KCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAg
ICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Cisg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7CiAgICAg
ICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJ
bmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMSwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRT
Y29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNr
KHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJ
bmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpIHsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRWYXJSZWFk
T25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFu
ZCgpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihieXRlY29k
ZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBU
RFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVt
aXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0
UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9p
bnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRH
bG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90
KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDEpOwor
ICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIHN0
b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBj
YXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNj
b3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwg
cmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAgICAgICAg
IGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNl
dE9mVmFyaWFibGVzKCkpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIE1vZHVsZVZhcjoKQEAgLTI1NjQsNTggKzI2NzQsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAg
ICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAv
LyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwot
ICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwot
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlm
IHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBi
aW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQ
cm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2Up
OwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2Nr
IHNlZXMgQ2xvc3VyZVZhci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4g
d2UgY2FuIGNvbXBpbGUgdGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tz
LCBzaW5jZSB3ZSd2ZSBwcm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdy
ZSBhIENsb3N1cmVWYXIsCisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFy
LiBJZiB3ZSdyZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlz
IENsb3N1cmVWYXIKKyAgICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0
IGZpcmVkLiBJZiBpdCBpcyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0
IGRvZXNuJ3QKKyAgICAvLyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAg
ICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29k
ZShDbG9zdXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29s
dmVkQ2xvc3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAg
ICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7CisgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1
dEluZm8oKSwgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6
dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAg
IEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFBy
b3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxz
ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENv
ZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAg
ICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsK
KwogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyKTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
ICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwg
ZmFsc2UpOwotICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTggKzI3MjgsMjEg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3Bp
ZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBNb2R1bGVWYXIpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29s
dmVUeXBlKCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7Cisg
ICAgICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBh
bGwgbGlua2VkIENvZGVCbG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBz
ZWUgTW9kdWxlVmFyLgogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5
X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAg
ICB9IGVsc2UgewogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRU
b1Njb3BlLCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVj
dGlvbik7CisgICAgICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0
KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAg
LTI2NTIsNyArMjc1OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZf
NjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjcwMSw3ICsyODA4LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJl
c3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI3NTksNyArMjg2Niw2IEBAIHZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9m
aWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwpAQCAtMjc2Nyw3ICsyODczLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2lu
dGVybmFsX2ZpZWxkKGNvbgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEp
OwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+
OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKQEAgLTI4MjMsNyArMjkyOSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm9wZXJ0eV9l
bnVtZXJhdG8KIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVj
b2RlLm1fbW9kZTsKQEAgLTI4MzksMTEgKzI5NDQsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAv
LyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3Bl
Y2lhbCBjYXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRh
ZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93
blN0cnVjdHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jaykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpPd25TdHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVn
VDM7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAgICAgICAgIG9wZXJh
dGlvbkNhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhlbnVtZXJhdG9y
R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpICYgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwogICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgIGxvYWQ4RnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVt
ZXJhdG9yTWV0YWRhdGEoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBPcEVudW1l
cmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CisKICAg
ICAgICAgbG9hZDMyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSwgaW5kZXhHUFIpOwogICAgICAgICBvcGVy
YXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpKTsKIApAQCAtMjg4MSw3OCArMjk5
Miw4OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9u
ZUNhc2VzOwogCi0gICAgYXV0byByZXN1bHRHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGlu
ZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3Jh
dGNoMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9y
R2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobW9kZSwgc2NyYXRjaDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHlOYW1lLCBwcm9wZXJ0eUdQUik7CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVz
cygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1l
cmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoMik7CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIp
OworICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JH
ZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBl
bmNvZGVkIHZhbHVlLgotICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsK
KyAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBz
Y3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBD
aGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHNjcmF0Y2gxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVN
aXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAK
ICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bmRleCwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gy
KTsKICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQg
aW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRP
ZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1Qy
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
KTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsK
LQorICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3Jh
dGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIs
IHNjcmF0Y2gyKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1l
c0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwog
ICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91
dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAg
c3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWdu
RXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRy
ZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25F
eHRlbmQzMlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CiAgICAgY29uc3RleHByIGludHB0cl90
IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsK
LSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIs
IHNjcmF0Y2gyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIp
OwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNo
LmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRh
dGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZElt
bTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1
Y3R1cmVNaXNtYXRjaCksIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6
Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVN
b2RlLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVy
bywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRN
b2RlKSk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRj
aDMsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7
CiAgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCBwcm9wZXJ0eUdQUik7CiAKICAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsK
KyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNj
cmF0Y2gxKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJl
Z1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAg
ICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBX
ZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0
IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAog
ICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSht
ZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCkBAIC0yOTYxLDEwICszMDgyLDkgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVyKTsK
IH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVu
Y3Rpb25UeXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5
dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCeXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6
ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9u
VHlwZSBnZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0yOTcz
LDcgKzMwOTMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltCiAg
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2Rl
LCByZWdUMCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51
bWVyYXRvck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVj
b2RlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgcmVnVDEpOworICAg
IG9yMzIocmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1QxLCBieXRlY29k
ZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAog
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwogCkBAIC0z
MDYyLDYgKzMxODQsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
cgogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIAordm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQoreworICAgIEp1bXAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNlbGVjdFNjcmF0
Y2hHUFIob3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDkgKzIzNiw5IEBAIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZUNl
bGwpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hl
VHlwZTo6VW5zZXQKICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJh
c2VDZWxsCi0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVB
cnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKIAotICAg
ICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwp
KTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxK
U0FycmF5Kj4oYmFzZUNlbGwpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENv
ZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihr
aW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0QXJyYXlMZW5ndGgo
bG9ja2VyKTsKQEAgLTI0OSw4ICsyNDksOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVHZXRCeShKCiAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCwgcHJvcGVydHlOYW1lKTsK
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlQ2VsbCkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAg
ICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3Ro
KHN0dWJJbmZvKSkgewotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxp
bmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKTsKKyAgICAg
ICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChj
b2RlQmxvY2ssIHN0dWJJbmZvKSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRl
ZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9j
aywgc3R1YkluZm8pOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGlu
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRTdHJpbmdMZW5ndGgobG9ja2Vy
KTsKQEAgLTMwNCw3ICszMDQsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVH
ZXRCeShKCiAgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCiAgICAgICAg
ICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAg
ICAgICAgICAgICAgICAgJiYgIWxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAgICAgICAgICAg
ICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlBy
b3BlcnR5QWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJl
LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29k
ZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5U2Vs
ZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBw
cm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFj
ZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTczMSwxMSArNzMxLDExIEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5KEoKICAgICAgICAgICAgICAgICBv
bGRTdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2Fj
aGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxp
bmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgc2xvdC5j
YWNoZWRPZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5H
ZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgc2xvdC5jYWNo
ZWRPZmZzZXQoKSkKICAgICAgICAgICAgICAgICAgICAgJiYgIW9sZFN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAgICAgICAgICAgICAgICAgICAgICYmICFpc1Byb3h5
KSB7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVy
YXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFj
ZShzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2xkU3RydWN0dXJl
LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRl
ZENvZGVJbmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6
UHV0QnlTZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJh
c2UoKSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlG
dW5jdGlvbihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKQEAgLTExMzIsNyArMTEzMiw3IEBA
IHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnkoCiAgICAgICAgICAgICAgICAg
JiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2UKICAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRj
aHBvaW50U2V0KCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJ
bmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKHN0dWJJbmZvLCBzdHJ1
Y3R1cmUpOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0
dXJlKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAg
ICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwogICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50
cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBAIC0xNTUyLDcgKzE1NTIsNyBAQCBzdGF0aWMg
dm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAKIHZvaWQgdW5saW5rQ2FsbChWTSYg
dm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIGRhdGFMb2dMbklmKE9wdGlv
bnM6OmR1bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZv
LmZhc3RQYXRoU3RhcnQoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2Vt
Ymx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlua0lu
Zm8pKTsKICAgICAKICAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0
dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaCIKICNpbmNsdWRlICJDYWxs
RnJhbWUuaCIKICNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgorI2luY2x1
ZGUgIkNvZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIK
QEAgLTM3MCwxMyArMzcxLDIyIEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0
aWNzKFYKICAgICAKICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rp
b25zKCk7CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxp
bmVKSVQpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVm
ID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2Rl
KSB7CisgICAgICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2Rl
KGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGNv
ZGVCbG9jay0+aml0TmV4dEludm9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hv
bGRSZWFjaGVkKCkpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJk
ZWxheUpJVENvbXBpbGUiLCAoInRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNv
ZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQu
Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgSklUV29ya2xpc3Q6
OlN0YXRlIHdvcmtsaXN0U3RhdGUgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3Qo
KS5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbk1vZGU6OkJhc2VsaW5lKSk7CisgICAgSklUV29ya2xpc3Q6OlN0
YXRlIHdvcmtsaXN0U3RhdGUgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5j
b21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2Nr
LT51bmxpbmtlZENvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbk1vZGU6OkJhc2VsaW5lKSk7CiAK
ICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsK
ICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIENvZGUgd2Fz
IGFscmVhZHkgY29tcGlsZWQuIik7CkBAIC00NjYsOCArNDc2LDEwIEBAIExMSU5UX1NMT1dfUEFU
SF9ERUNMKGxvb3Bfb3NyKQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZy
b21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIGNvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxp
Z2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIg
PSB2bS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIocGMpOwogICAgICAgICAqcHRyICs9IGNv
ZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLm1fYWN0aXZlVGhyZXNob2xkOwotICAgICAg
ICBpZiAoKnB0ciA+PSBPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQo
KSkKKyAgICAgICAgaWYgKCpwdHIgPj0gT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVM
b29wc0xpbWl0KCkpIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShDb25j
dXJyZW50SlNMb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spKTsgLy8gV2UncmUgcmV0dXJuaW5nIHRv
IHRoZSBPU1IgZW50cnkgY29kZSBoZXJlLCB3aGljaCBleHBlY3RzIHRoYXQgbV9qaXREYXRhIGlz
IG5vdCBudWxsLgogICAgICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhMTEludDo6ZnV6emVyUmV0
dXJuRWFybHlGcm9tTG9vcEhpbnRFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCksIGNhbGxGcmFtZS0+dG9wT2ZGcmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBj
b3B5KQpAQCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0
ZXEsIE9wSm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRl
Z2VyT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBv
cGNvZGVTdHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQotICAgICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9y
aCB0eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEo
dDEsIHQyKQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZz
ZXRbY2ZyLCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFj
cm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRh
IGluIHQxLCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cp
CiAgICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1
cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAg
ICBkaXNwYXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQog
CiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQ
cm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJp
dGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAg
IG1ldGFkYXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAu
b3BOZWdhdGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93
CiAgICAgbmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisg
ICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUs
IHQzKQogICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAg
IGJpYSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0
MQotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRl
VW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQog
ICAgIHJldHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYg
QEAgZW5kKQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0
cnVjdCwgaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxp
bnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRo
UHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRh
ZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAg
ICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMs
IHQyKQogICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8g
YmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJU
YWcsIC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0g
ICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJp
bmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQy
KQogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3Rv
cmUodDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEy
ICsxMTI0LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAg
ICAgICAgYmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFn
LCAub3AxTm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cK
LSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50
LCB0NSwgdDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRS
ZWFkeQogICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQx
Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAg
IHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJl
ck51bWJlciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0
LCB0MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBv
cGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5p
dGVseSBub3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0
VGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQor
ICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2Zp
bGVJbnROdW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWky
ZCB0MSwgdDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEs
MTMgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSBQ
QywgYTEKICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBi
dHB6IHIwLCAucmVjb3ZlcgotCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisgICAgICAgICAg
ICAjIEJhc2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFu
dCBwb29sLgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgICAgICAg
ICBsb2FkcCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAgICBsb2FkcCBD
b2RlQmxvY2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwogICAgICAgICAg
ICAgaWYgQVJNNjRFCiAgICAgICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIg
SlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6Omxvb3BPU1JF
bnRyeSkgKiBQdHJTaXplLCBhMgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJ
VEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0
RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVO
YW1lLCBvcGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBl
bmQKLQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwg
OF0sIHQxCiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3MCw3IEBAIG1h
Y3JvIHByZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9w
ZXJhdGlvbih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0
b3JlcSB0MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFBy
b2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
QXJpdGhQcm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93
OgpAQCAtMTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9w
X25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
cmV0dXJuKQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9y
aCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0
MikKQEAgLTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUs
IE9wTmVnYXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBu
ZWdpIHQzCiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJp
dGhQcm9maWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0
aFByb2ZpbGVJbnQsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAg
ICAgYnRxeiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAw
MDAwMDAwMDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikK
KyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVy
LCB0MSwgdDIpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCAr
MTE2MCw2IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBs
bGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEo
dDUsIHQwKQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0
eXBlLCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJp
dGhQcm9maWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3Jocywg
dDApCiAgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUoc2l6ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0
b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBp
bnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJv
ZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmls
ZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBkaXNw
YXRjaCgpCiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJl
clRhZywgLnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEs
IGZ0MQotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAg
dXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVy
TnVtYmVyLCB0NSwgdDIpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90
SW50T3AySW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAg
ICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVt
YmVySW50LCB0NSwgdDIpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVh
ZHk6CiAgICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA0LDkgKzExOTYsOSBAQCBtYWNybyBi
aW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAKICAgICAub3AyTm90SW50OgogICAg
ICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMg
ZGVmaW5pdGVseSBub3QuCi0gICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEs
IG51bWJlclRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIp
CisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZUludE51bWJlciwgdDUsIHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBj
aTJkcyB0MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQx
LCBmdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTQy
MCw3ICsxNDIwLDggQEAgZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5jcmVtZW50LCBh
Y3Rpb24pCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgYmFkZGlzIGluY3JlbWVu
dCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNv
dW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQorICAgIGxvYWRwIENvZGVCbG9jazo6bV9s
bGludEV4ZWN1dGVDb3VudGVyW3QwXSwgdDAKKyAgICBiYWRkaXMgaW5jcmVtZW50LCBCYXNlbGlu
ZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgIGFjdGlvbigp
CiAgICAgLmNvbnRpbnVlOgogZW5kCkBAIC0xNTAzLDcgKzE1MDQsOCBAQCBtYWNybyBwcm9sb2d1
ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgY29kZUJsb2NrR2V0dGVyKHQxKQogICAg
IGNvZGVCbG9ja1NldHRlcih0MSkKICAgICBpZiBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQot
ICAgICAgICBiYWRkaXMgNSwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MV0sIC5jb250aW51ZQorICAgICAgICBs
b2FkcCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MV0sIHQwCisgICAgICAgIGJh
ZGRpcyA1LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51
ZQogICAgICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAg
ICAgICAgbW92ZSBQQywgYTEKQEAgLTE2MTcsMTQgKzE2MTksMTQgQEAgbWFjcm8gZnVuY3Rpb25J
bml0aWFsaXphdGlvbihwcm9maWxlQXJnUwogICAgICMgb3B0aW1hbCB3YXkgZm9yIGFyY2hpdGVj
dHVyZXMgdGhhdCBoYXZlIG1vcmUgdGhhbiBmaXZlIHJlZ2lzdGVycyBhdmFpbGFibGUKICAgICAj
IGZvciBhcmJpdHJhcnkgdXNlIGluIHRoZSBpbnRlcnByZXRlci4KICAgICBsb2FkaSBDb2RlQmxv
Y2s6Om1fbnVtUGFyYW1ldGVyc1t0MV0sIHQwCi0gICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQw
ICMgVXNlIGFkZGkgYmVjYXVzZSB0aGF0J3Mgd2hhdCBoYXMgdGhlIHBlZXBob2xlCisgICAgYWRk
cCAtcHJvZmlsZUFyZ1NraXAsIHQwCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnBndGVxIHQwLCAw
LCBvayBlbmQpCiAgICAgYnRweiB0MCwgLmFyZ3VtZW50UHJvZmlsZURvbmUKICAgICBsb2FkcCBD
b2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzICsgRml4ZWRWZWN0b3I6Om1fc3RvcmFn
ZSArIFJlZkNvdW50ZWRBcnJheTo6bV9kYXRhW3QxXSwgdDMKICAgICBidHB6IHQzLCAuYXJndW1l
bnRQcm9maWxlRG9uZSAjIFdoZW4gd2UgY2FuJ3QgSklULCB3ZSBkb24ndCBhbGxvY2F0ZSBhbnkg
YXJndW1lbnQgdmFsdWUgcHJvZmlsZXMuCiAgICAgbXVscCBzaXplb2YgVmFsdWVQcm9maWxlLCB0
MCwgdDIgIyBBYWFhYWhoaGghIE5lZWQgc3RyZW5ndGggcmVkdWN0aW9uIQogICAgIGxzaGlmdHAg
MywgdDAgIyBvZmZzZXQgb2YgbGFzdCBKU1ZhbHVlIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCi0g
ICAgYWRkcCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4g
Q29kZUJsb2NrOjptX2FyZ3VtZW50VmFsdWVQcm9maWxlcy4KKyAgICBhZGRwIHQyLCB0MyAjIHBv
aW50ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBpbiB0aGUgdmFsdWUgcHJvZmlsZSBh
cnJheS4KIC5hcmd1bWVudFByb2ZpbGVMb29wOgogICAgIGlmIEpTVkFMVUU2NAogICAgICAgICBs
b2FkcSBUaGlzQXJndW1lbnRPZmZzZXQgLSA4ICsgcHJvZmlsZUFyZ1NraXAgKiA4W2NmciwgdDBd
LCB0MgpAQCAtMjU2Myw2ICsyNTY1LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5k
CiBlbmQKIAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5
cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQ
cm9maWxlOjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2Zp
bGUob3Bjb2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2Rl
U3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9y
aCB0eXBlLCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1F
OiBXZSBzaG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNl
IFdFQkFTU0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZ
IGFuZCBub3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVhYmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgzMDUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cigpID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBj
cmVhdGVGcm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2Fj
aGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29k
ZUJsb2NrKiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2Nr
KiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVy
Jik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlu
bGluZSBDYWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhDb2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlx
dWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmll
ciBjcmVhdGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxl
SWRlbnRpZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlk
ZW50aWZpZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayog
Y29kZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29k
ZUJsb2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGlu
ZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENh
Y2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5o
YXNJZGVudGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3Bw
CShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJDYWNoZWRUeXBlcy5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVD
YWNoZUVycm9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCkBAIC0x
OTE4LDYgKzE5MTksOCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1WYWx1ZVByb2ZpbGVz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1WYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5zaWduZWQgbnVt
QXJyYXlQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJyYXlQcm9maWxlczsgfQorICAg
IHVuc2lnbmVkIG51bUJpbmFyeUFyaXRoUHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bUJp
bmFyeUFyaXRoUHJvZmlsZXM7IH0KKyAgICB1bnNpZ25lZCBudW1VbmFyeUFyaXRoUHJvZmlsZXMo
KSBjb25zdCB7IHJldHVybiBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsgfQogCiBwcml2YXRlOgog
ICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKQEAgLTE5NTIsNiArMTk1NSw4IEBA
IHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX251bVZhbHVlUHJvZmlsZXM7CiAgICAgdW5zaWdu
ZWQgbV9udW1BcnJheVByb2ZpbGVzOworICAgIHVuc2lnbmVkIG1fbnVtQmluYXJ5QXJpdGhQcm9m
aWxlczsKKyAgICB1bnNpZ25lZCBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsKIAogICAgIENhY2hl
ZE1ldGFkYXRhVGFibGUgbV9tZXRhZGF0YTsKIApAQCAtMjE2MCw2ICsyMTY1LDggQEAgQUxXQVlT
X0lOTElORSBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZQogICAgICwgbV9yYXJlRGF0YShjYWNo
ZWRDb2RlQmxvY2sucmFyZURhdGEoZGVjb2RlcikpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZXMoY2Fj
aGVkQ29kZUJsb2NrLm51bVZhbHVlUHJvZmlsZXMoKSkKICAgICAsIG1fYXJyYXlQcm9maWxlcyhj
YWNoZWRDb2RlQmxvY2subnVtQXJyYXlQcm9maWxlcygpKQorICAgICwgbV9iaW5hcnlBcml0aFBy
b2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1CaW5hcnlBcml0aFByb2ZpbGVzKCkpCisgICAgLCBt
X3VuYXJ5QXJpdGhQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVtVW5hcnlBcml0aFByb2ZpbGVz
KCkpCiB7CiB9CiAKQEAgLTIzMzcsNiArMjM0NCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDYWNo
ZWRDb2RlQmxvY2s8Q29kZUIKICAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29kZUJsb2NrLm1faGFz
Q2hlY2twb2ludHM7CiAgICAgbV9udW1WYWx1ZVByb2ZpbGVzID0gY29kZUJsb2NrLm1fdmFsdWVQ
cm9maWxlcy5zaXplKCk7CiAgICAgbV9udW1BcnJheVByb2ZpbGVzID0gY29kZUJsb2NrLm1fYXJy
YXlQcm9maWxlcy5zaXplKCk7CisgICAgbV9udW1CaW5hcnlBcml0aFByb2ZpbGVzID0gY29kZUJs
b2NrLm1fYmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgbV9udW1VbmFyeUFyaXRoUHJv
ZmlsZXMgPSBjb2RlQmxvY2subV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOwogCiAgICAgbV9t
ZXRhZGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEuZ2V0KCkpOwogICAg
IG1fcmFyZURhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVEYXRhLmdldCgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcAkocmV2aXNpb24gMjgzMDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBA
IEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklU
KQogc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRl
OjpNZXRhZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7
Ci0gICAgVW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmls
ZTsKKyAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJv
ZmlsZTsKICAgICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3Vs
dC5pc051bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9u
IDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVibGljOgogCiAgICAg
c3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9CiAgICAgc3RhdGlj
IGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAgc3RhdGljIGlubGlu
ZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsgfQorICAgIHN0
YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlz
aW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MzQsOCArNDM0LDYgQEAgdm9pZCBPcHRpb25zOjpyZWNvbXB1
dGVEZXBlbmRlbnRPcHRpb25zKAogICAgIE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpID0gZmFs
c2U7CiAjZW5kaWYKIAotICAgIGlmICghaXNBUk02NCgpKQotICAgICAgICBPcHRpb25zOjp1c2VE
YXRhSUMoKSA9IGZhbHNlOwogICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCiAgICAgICAg
IE9wdGlvbnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpID0gZmFsc2U7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjgz
MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw2IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0
TWVtb3J5KCk7CiAgICAgdihJbnQzMiwgZXZhbFRocmVzaG9sZE11bHRpcGxpZXIsIDEwLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBtYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJj
ZUxlbmd0aCwgMjU2LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCi0gICAgdihCb29sLCByYW5k
b21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNr
cG9pbnRzRm9yQmFzZWxpbmUsIDEwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIs
IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JVcHBlclRpZXJzLCA1
MDAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXApAQCAtNTMyLDYgKzUzMSw3IEBAIGJvb2wg
Y2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihCb29sLCB1c2VEYXRhSUMsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ0luT3B0aW1pemlu
Z0pJVCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDU2hh
cmluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgdXNlQmFzZWxpbmVK
SVRDb2RlU2hhcmluZywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIC8qIEZl
YXR1cmUgRmxhZ3MgKi9cCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOTYsMTAgKzM5NiwxOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBh
cmVGb3JFeGVjdXRpCiAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlQnl0ZWNvZGUoKSkKICAgICAg
ICAgY29kZUJsb2NrLT52YWxpZGF0ZSgpOwogCi0gICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkp
Ci0gICAgICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKLSAgICBlbHNlCi0gICAgICAgIHNldHVw
SklUKHZtLCBjb2RlQmxvY2spOworICAgIGJvb2wgaW5zdGFsbGVkVW5saW5rZWRCYXNlbGluZUNv
ZGUgPSBmYWxzZTsKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRD
b2RlPiBiYXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxp
bmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2Vk
QmFzZWxpbmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBpbnN0
YWxsZWRVbmxpbmtlZEJhc2VsaW5lQ29kZSA9IHRydWU7CisgICAgfQorI2VuZGlmCisgICAgaWYg
KCFpbnN0YWxsZWRVbmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICBpZiAoT3B0aW9uczo6
dXNlTExJbnQoKSkKKyAgICAgICAgICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CisgICAgfQogCiAgICAg
aW5zdGFsbENvZGUodm0sIGNvZGVCbG9jaywgY29kZUJsb2NrLT5jb2RlVHlwZSgpLCBjb2RlQmxv
Y2stPnNwZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHJldmlzaW9uIDI4MzA1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRp
bWl6ZUFmdGVyV2FybVVwKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRU
aWVyc1VwVG9CQlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJl
c2hvbGRGb3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAg
c2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJt
VXAoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25z
Ojp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAg
ICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0
ZXJXYXJtVXAoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNo
b2xkUmVhY2hlZCgpCkBAIC02NSw5ICs2NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXpl
U29vbigpCiAgICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJR
KCkpCi0gICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJR
T3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9w
dGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXpl
U29vbigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0
aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAgICAgfQogCiAgICAgc3RydWN0IE9TUkVu
dHJ5RGF0YSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVy
VXBDb3VudC5jcHAJKHJldmlzaW9uIDI4MzA1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21UaWVyVXBDb3VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogVGllclVwQ291bnQ6OlRpZXJVcENv
dW50KCkKIHsKLSAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0
aW1pemVBZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9u
czo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKIH0KIAogVGllclVwQ291
bnQ6On5UaWVyVXBDb3VudCgpID0gZGVmYXVsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIGFmdGVyIHdhcm0t
dXAuIik7Ci0gICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdP
cHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQo
T3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAK
ICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKQEAgLTkwLDE0
ICs5MCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2
ZXJib3NlT1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIG5leHQgaW52b2Nh
dGlvbi4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKDAsIG51bGxwdHIpOworICAgICAgICBz
ZXROZXdUaHJlc2hvbGQoMCk7CiAgICAgfQogCiAgICAgdm9pZCBvcHRpbWl6ZVNvb24odWludDMy
X3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgc29vbi4iKTsKICAg
ICAgICAgLy8gRklYTUU6IE5lZWQgYWRqdXN0bWVudCBvbmNlIHdlIGdldCBtb3JlIGluZm9ybWF0
aW9uIGFib3V0IHdhc20gZnVuY3Rpb25zLgotICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9u
czo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICBzZXRO
ZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkpOwogICAg
IH0KIAogICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9u
UmVzdWx0KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkK
SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyODMwNTMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA5LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJh
dGlAYXBwbGUuY29tPgorCisgICAgICAgIEJ1aWxkIGFuIHVubGlua2VkIGJhc2VsaW5lIEpJVAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjIzCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS84MjMyMTc3Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBZ
dXN1a2UgU3V6dWtpLgorCisgICAgICAgICogd3RmL0JhZy5oOgorICAgICAgICAqIHd0Zi9QYWNr
ZWQuaDoKKyAgICAgICAgKFdURjo6UGFja2VkQWxpZ25lZFB0cjo6b3BlcmF0b3IqIGNvbnN0KToK
KwogMjAyMS0wOS0yNCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIHR5cGVjaGVja2luZyBgaXNgIG92ZXJsb2FkcyBmb3IgYHN0ZDo6dW5pcXVlX3B0cmAs
IGBXVEY6OlVuaXF1ZVJlZmAsIGFuZCBgV1RGOjpXZWFrUHRyYApJbmRleDogU291cmNlL1dURi93
dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJKHJldmlzaW9uIDI4
MzA1MykKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2
NiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CiAgICAgfQog
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBCYWcmIG9wZXJhdG9yPShCYWc8VCwgVT4m
JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh1bndyYXBwZWRIZWFkKCkgPT0gb3RoZXIudW53
cmFwcGVkSGVhZCgpKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgICAgIEJhZyBk
ZXN0cm95OworICAgICAgICBkZXN0cm95Lm1faGVhZCA9IHVud3JhcHBlZEhlYWQoKTsKKyAgICAg
ICAgbV9oZWFkID0gb3RoZXIudW53cmFwcGVkSGVhZCgpOworICAgICAgICBvdGhlci5tX2hlYWQg
PSBudWxscHRyOworCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICB+QmFnKCkK
ICAgICB7CiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAkocmV2aXNpb24gMjgzMDUzKQor
KysgU291cmNlL1dURi93dGYvUGFja2VkLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYs
MTAgQEAgcHVibGljOgogICAgIH0KIAogICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biBnZXQoKTsgfQotICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUgPSBUPgorICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPCFzdGQ6OmlzX3ZvaWRfdjxVPiwgVSY+Ojp0eXBlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuICpnZXQoKTsgfQorCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhZ2V0
KCk7IH0KIAogICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQg
Y29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KSW5kZXg6
IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkocmV2aXNpb24gMjgzMDUzKQorKysgVG9vbHMv
U2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtODYzLDcgKzg2
Myw3IEBAIGRlZiBydW5GVExOb0NKSVROb0FjY2Vzc0lubGluaW5nKCpvcHRpb24KIGVuZAogCiBk
ZWYgcnVuRlRMTm9DSklUU21hbGxQb29sKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0g
ICAgcnVuKCJmdGwtbm8tY2ppdC1zbWFsbC1wb29sIiwgIi0taml0TWVtb3J5UmVzZXJ2YXRpb25T
aXplPTEwMjQwMCIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtc21hbGwtcG9vbCIsICIt
LWppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZT0yMDI0MDAiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJ
VF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVu
Tm9DSklUKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC0xMTcxLDcgKzExNzEsNyBA
QCBkZWYgZGVmYXVsdFJ1bk1vZHVsZXMobm9MTEludDogdHJ1ZSkKICAgICBydW4oImZ0bC1uby1j
aml0LW5vLWlubGluZS12YWxpZGF0ZS1tb2R1bGVzIiwgIi1tIiwgIi0tdmFsaWRhdGVHcmFwaD10
cnVlIiwgIi0tbWF4aW11bUlubGluaW5nRGVwdGg9MSIsICooRlRMX09QVElPTlMgKyBOT19DSklU
X09QVElPTlMpKQogICAgIHJ1bigiZnRsLWVhZ2VyLW1vZHVsZXMiLCAiLW0iLCAqKEZUTF9PUFRJ
T05TICsgRUFHRVJfT1BUSU9OUykpCiAgICAgcnVuKCJmdGwtZWFnZXItbm8tY2ppdC1tb2R1bGVz
IiwgIi1tIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRf
T1BUSU9OUyArIEVBR0VSX09QVElPTlMpKQotICAgIHJ1bigiZnRsLW5vLWNqaXQtc21hbGwtcG9v
bC1tb2R1bGVzIiwgIi1tIiwgIi0taml0TWVtb3J5UmVzZXJ2YXRpb25TaXplPTEwMjQwMCIsICoo
RlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtc21h
bGwtcG9vbC1tb2R1bGVzIiwgIi1tIiwgIi0taml0TWVtb3J5UmVzZXJ2YXRpb25TaXplPTIwMjQw
MCIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQogZW5kCiAKIGRlZiBub05vTExJ
bnRSdW5Nb2R1bGVzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439312</attachid>
            <date>2021-09-26 21:29:05 -0700</date>
            <delta_ts>2021-09-27 00:44:00 -0700</delta_ts>
            <desc>test windows</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>653982</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMDk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzOCBA
QAorMjAyMS0wOS0yNiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGFkZHMgYW4gInVubGlua2VkIiBiYXNlbGluZSBKSVQgdG8gSlNWQUxVRTY0
IHBsYXRmb3Jtcy4gVGhlIEpJVAorICAgICAgICBjb2RlIHByb2R1Y2VkIGJ5IHRoaXMgYmFzZWxp
bmUgSklUIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBhbGwgQ29kZUJsb2NrcyB0aGF0CisgICAgICAg
IHNoYXJlIGFuIFVubGlua2VkQ29kZUJsb2NrLiBUaGUgYmVuZWZpdCBvZiB0aGlzIGlzLCBpZiB3
ZSdyZSBjcmVhdGluZyBhIENvZGVCbG9jaworICAgICAgICBmcm9tIGFuIFVubGlua2VkQ29kZUJs
b2NrIHRoYXQgYWxyZWFkeSBjb21waWxlZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAg
ICAgaW5zdGFuY2UsIHRoaXMgbmV3IENvZGVCbG9jayBqdXN0IHN0YXJ0cyBvZmYgZXhlY3V0aW5n
IGluIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgImZvciBmcmVlIi4KKyAgICAgICAgCisgICAg
ICAgIFRvIG1ha2UgdGhpcyB3b3JrLCB0aGUgY29kZSB3ZSBlbWl0IG5vdyBuZWVkcyB0byBiZSBp
bmRlcGVuZGVudCBvZiBhIHNwZWNpZmljCisgICAgICAgIENvZGVCbG9jayBpbnN0YW5jZS4gV2Ug
dXNlIGEgQ29kZUJsb2NrIGluc3RhbmNlIGZvciBtaW5pbWFsIHByb2ZpbGluZyBpbmZvcm1hdGlv
bgorICAgICAgICB3aGVuIGNvbXBpbGluZywgYnV0IG90aGVyd2lzZSwgdGhlIGNvZGUgaXMgdGll
ZCB0byB0aGUgVW5saW5rZWRDb2RlQmxvY2suIFdoZW4KKyAgICAgICAgd2UgbmVlZCBDb2RlQmxv
Y2sgc3BlY2lmaWMgaW5mb3JtYXRpb24sIHdlIGxvYWQgaXQuIFRoaXMgdXN1YWxseSBtZWFucyB0
aGluZ3MKKyAgICAgICAgbGlrZSB3ZSdsbCBsb2FkIHRoaW5ncyBmcm9tIHRoZSBNZXRhZGF0YSBk
eW5hbWljYWxseS4gVGhpcyBwYXRjaCBhbHNvIGFkZHMgYQorICAgICAgICAibGlua2VkIGNvbnN0
YW50IHBvb2wiIGNvbmNlcHQsIGFuZCBhbnl0aW1lIHdlIGluc3RhbnRpYXRlIHN1Y2ggYSBDb2Rl
QmxvY2ssCisgICAgICAgIHdlIGFsc28gbmVlZCB0byBpbnN0YW50aWF0ZSB0aGlzICJsaW5rZWQg
Y29uc3RhbnQgcG9vbCIuIFRoaXMgY29udGFpbnMgdGhpbmdzCisgICAgICAgIGxpa2Ugb3VyIGlu
bGluZSBjYWNoZSBkYXRhIHN0cnVjdHVyZXMgKFN0cnVjdHVyZVN0dWJJbmZvKiksIEpTR2xvYmFs
T2JqZWN0KiwKKyAgICAgICAgZXRjLgorICAgICAgICAKKyAgICAgICAgVW5saW5rZWQgYmFzZWxp
bmUgSklUIGFsd2F5cyBydW5zIElDcyBpbiB0aGUgImRhdGEiIG1vZGUuIFRvIG1ha2UgdGhpcyB3
b3JrLCBJCisgICAgICAgIG1hZGUgZGF0YSBJQ3Mgd29yayBvbiB4ODZfNjQuIFRvIGRvIHRoaXMs
IHdlIG5vIGxvbmdlciBjYWxsL3JldCB0byB0aGUgSUMuCisgICAgICAgIEluc3RlYWQsIHdlIGp1
bXAgdG8gdGhlIElDLCBhbmQgdGhlIElDIGp1bXBzIGJhY2sgYnkgbG9hZGluZyB0aGUgImRvbmUi
IGxvY2F0aW9uCisgICAgICAgIGZyb20gdGhlIFN0cnVjdHVyZVN0dWJJbmZvIGR5bmFtaWNhbGx5
LiBUaGlzIHNpbXBsaWZpZXMgdGhlIGRlc2lnbiB0byBub3QgYmUKKyAgICAgICAgYmFzZWQgb24g
dGhlIGFybTY0IGNhbGxpbmcgY29udmVudGlvbiwgYW5kIGtlZXBzIHRoZSBzYW1lIHBlcmZvcm1h
bmNlIGNoYXJhY3RlcmlzdGljcy4gCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsc28g
YWRkcyBhIG5ldyB2ZXJzaW9uIG9mIElubGluZUFjY2VzcyB0aGF0IGlzIG9ubHkgdXNlZCBpbiBi
YXNlbGluZQorICAgICAgICBKSVQgKGZvciBub3cpLiBJbiB0aGUgZnV0dXJlLCB3ZSBjYW4gbWFr
ZSB0aGUgREZHL0ZUTCBhbHNvIHVzZSB0aGlzIGZvciBEYXRhCisgICAgICAgIElDcy4gQnV0IHdl
IGRvbid0IG5lZWQgdG8gZG8gdGhhdCB5ZXQgc2luY2UgdGhvc2UgdGllcnMgZG9uJ3QgdXNlIGRh
dGEgSUNzIGJ5CisgICAgICAgIGRlZmF1bHQuIFRoZSBiYXNlbGluZSBKSVQgbm93IGhhcyBhIHB1
cmUgZGF0YSBJQyBhcHByb2FjaCB0byBJbmxpbmVBY2Nlc3MuIFNvCisgICAgICAgIGluc3RlYWQg
b2YgcmVwYXRjaGluZyBjb2RlLCB3ZSByZXBhdGNoIGZpZWxkcyB3ZSBsb2FkIGR5bmFtaWNhbGx5
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGNsZWFucyB1cCBhIGZldyB0aGlu
Z3MgaW4gT1NSIGV4aXQsIHdoZXJlIGJvdGggREZHL0ZUTCB3ZXJlCisgICAgICAgIHN0b3Jpbmcg
Y2FsbGVlIHNhdmVzIHRvIHRoZSBjYWxsZWUgc2F2ZXMgYnVmZmVyIGluIGEgd2VpcmQgcGxhY2Us
IGFuZCBzZXBhcmF0ZQorICAgICAgICBmcm9tIG9uZSBhbm90aGVyLiBJIG5vdGljZWQgdGhpcyBj
b2RlIGNhbiBiZSBzaW1wbGlmaWVkIGlmIHdlIGp1c3Qgc3RvcmUKKyAgICAgICAgY2FsbGVlIHNh
dmVzIGF0IHRoZSBlbmQgb2YgdGhlIE9TUiBleGl0IGhhbmRsZXIsIGFuZCBmcm9tIGNvbW1vbiBK
SVQgZW1pc3Npb24KKyAgICAgICAgY29kZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBmaXhlcyBhIGJ1ZyB3aGVyZSB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGUgd3JvbmcgKGFu
ZCBhbHdheXMKKyAgICAgICAgbW9yZSBuZWdhdGl2ZSkgU1AgaW4gdGhlIGJhc2VsaW5lIEpJVC4g
VGhpcyBjb3VsZCBoYXBwZW4gd2hlbiB3ZSBPU1IgZXhpdAorICAgICAgICBmcm9tIGFuIGlubGlu
ZWQgZ2V0dGVyL3NldHRlci4gVGhlIE9TUiBleGl0IGNvZGUgcHV0cyB0aGUgcmV0dXJuIFBDIHdo
ZW4KKyAgICAgICAgcmV0dXJuaW5nIHRvIHRoZSBjYWxsIHNpdGUgb2YgdGhlIGdldHRlci9zZXR0
ZXIgdG8gYmUgdGhlIGlubGluZSBjYWNoZSdzCisgICAgICAgICJkb25lIGxvY2F0aW9uIi4gSG93
ZXZlciwgdGhpcyAiZG9uZSBsb2NhdGlvbiIgZGlkbid0IHVzZWQgdG8gcmVzdG9yZSBTUC4KKyAg
ICAgICAgVGhpcyBwYXRjaCBjb25zZXJ2YXRpdmVseSBtYWtlcyBpdCBzbyB0aGF0IHdlIHJlc3Rv
cmUgdGhlIFNQIGF0IHRoZXNlIHNpdGVzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBtZWFz
dXJlZCBhcyBhIDElIHNwZWVkdXAgb24gU3BlZWRvbWV0ZXIyLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVPcGVy
YW5kc0ZvckNoZWNrcG9pbnQuaDoKKyAgICAgICAgKEpTQzo6dmFsdWVQcm9maWxlT2Zmc2V0Rm9y
KToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpD
YWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86
OmVtaXRGYXN0UGF0aEltcGwpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCk6CisgICAgICAgIChK
U0M6OkNhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyk6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmg6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c2xvd1N0
dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmFkZHJlc3NPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpmcmFtZVJlZ2lzdGVyQ291bnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJpbmFyeUFy
aXRoUHJvZmlsZUZvclBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmFyeUFyaXRoUHJv
ZmlsZUZvclBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kUEMpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdFNvb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdE5l
eHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNo
ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVEFkZElDKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRNdWxJQyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUU3ViSUMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpqaXRBZnRlcldhcm1VcCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25z
dGFudFBvb2wpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNlbGluZUpJVENvbnN0YW50UG9vbCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmRvbnRKSVRBbnl0aW1lU29vbik6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6bGxpbnRFeGVjdXRlQ291bnRlciBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZHJlc3NPZk51bVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmlzS25vd25DZWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjphZGRNYXRoSUMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldEpJVENvZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdENv
ZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN3aXRjaEp1bXBUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3RyaW5nU3dpdGNoSnVtcFRh
YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6aml0Q29kZU1hcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFz
ZWxpbmVTd2l0Y2hKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJhc2VsaW5l
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdTd2l0
Y2hKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRmZ1N0cmluZ1N3aXRjaEp1
bXBUYWJsZSk6CisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwOgorICAgICAgICAoSlND
OjpFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OnNldFRocmVzaG9sZCk6CisgICAg
ICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRp
b25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlk
TWV0YWRhdGEuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3Ro
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRh
dGE6Om9mZnNldE9mTW9kZSk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRT
aXRlRmVlZGJhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0
dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
SW5CeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2spOgor
ICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OklubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoSlNDOjpJbmxp
bmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKToKKyAgICAgICAgKEpT
Qzo6SW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5saW5l
QWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aCk6CisgICAgICAgIChKU0M6OklubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZkluQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2Nlc3MpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnJlc2V0
U3R1YkFzSnVtcEluQWNjZXNzKToKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuaDoK
KyAgICAgICAgKiBieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaDoKKyAgICAgICAgKEpT
Qzo6SXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rlcyk6CisgICAgICAgICog
Ynl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6TExJbnRDYWxsTGlu
a0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKToKKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUu
aDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6c3VjY2VlZCk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0dlbmVyYXRpb25TdGF0ZTo6Y2FsY3VsYXRlTGl2ZVJlZ2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRp
b25IYW5kbGluZyk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2Vy
dmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucyk6CisgICAgICAg
IChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDoKKyAgICAgICAg
KEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5m
bzo6aW5pdEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Omlu
aXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0
SW5CeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3ND
YXNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJlc2V0KToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkRv
bmVMb2NhdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6cHJpbnRTdXBlclNhbXBsZXJTdGF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRl
bnRpZmllcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JK
SVQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9m
aWxlcyk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25BdCBjb25zdCk6CisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjppbnN0cnVjdGlvbnNTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6Omxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJu
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzZXQp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YmluYXJ5QXJpdGhQcm9maWxlKToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnVuYXJ5QXJpdGhQcm9maWxlKToKKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZE1ldGFkYXRhVGFibGU6Om9mZnNldEluTWV0YWRhdGFUYWJsZSk6CisgICAgICAgICog
Ynl0ZWNvZGUvVmFsdWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUJhc2U6
OlZhbHVlUHJvZmlsZUJhc2UpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNlOjpjbGVh
ckJ1Y2tldHMpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNr
ZXQpOgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmg6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmg6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6
CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVw
YXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6aGFuZGxlRXhpdENvdW50cyk6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMpOgorICAgICAgICAoSlNDOjpERkc6
OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1
bXBUb1RhcmdldCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dFByaXZhdGVOYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlQWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlU3ViKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlTmVnYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlTXVsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
Z1NoYWRvd0NoaWNrZW5UYWlsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEpJVENvZGUu
aDoKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmFkZE1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVVbmFyeU1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVCaW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUHV0UHJpdmF0ZU5hbWUpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAg
ICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21w
aWxlU3R1Yik6CisgICAgICAgICogZ2VuZXJhdG9yL01ldGFkYXRhLnJiOgorICAgICAgICAqIGpp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0
b3JlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFs
Q2FsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0
aG91dE1vdmluZ0dsb2JhbE9iamVjdCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5o
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hdGhJQ0hvbGRlcjo6YWRkSklUQWRkSUMpOgorICAg
ICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKToKKyAgICAgICAgKEpTQzo6TWF0
aElDSG9sZGVyOjphZGRKSVRTdWJJQyk6CisgICAgICAgIChKU0M6Ok1hdGhJQ0hvbGRlcjo6YWRk
SklUTmVnSUMpOgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyk6Cisg
ICAgICAgIChKU0M6OkJhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKToKKyAgICAgICAg
KEpTQzo6QmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKToKKyAgICAgICAgKiBqaXQv
QmFzZWxpbmVKSVRDb2RlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6
OmFkZCk6CisgICAgICAgIChKU0M6OkpJVENvbnN0YW50UG9vbDo6c2l6ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpJVENvbnN0YW50UG9vbDo6YXQgY29uc3QpOgorICAgICAgICAqIGppdC9CYXNl
bGluZUpJVFBsYW4uY3BwOgorICAgICAgICAoSlNDOjpCYXNlbGluZUpJVFBsYW46OmZpbmFsaXpl
KToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Q0NhbGxI
ZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwpOgorICAgICAgICAoSlNDOjpD
Q2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KToKKyAgICAgICAgKiBqaXQv
Q0NhbGxIZWxwZXJzLmg6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmg6CisgICAgICAgICog
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZs
ZXI6OkNhbGxGcmFtZVNodWZmbGVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OnByZXBhcmVGb3JUYWlsQ2FsbCk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVyLmg6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzbmFwc2hvdCBjb25zdCk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhclJl
YWRPbmx5Q2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNl
dCk6CisgICAgICAgIChKU0M6OkpJVDo6cmVzZXRTUCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRD
b25zdGFudFBvb2xSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAoSlNDOjpKSVQ6OmZp
bmFsaXplT25NYWluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKToKKyAgICAgICAgKEpT
Qzo6SklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAg
ICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZWdhdGUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfYWRkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElD
RmFzdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZGl2KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX211bCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zdWIpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2FsbFJlc3VsdCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxs
RXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlND
OjpKSVRDb2RlOjp1c2VEYXRhSUMpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpwY1RvQ29kZU9y
aWdpbk1hcCk6CisgICAgICAgICogaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9KSVRD
b21waWxhdGlvbktleS5oOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6SklUQ29t
cGlsYXRpb25LZXkpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6b3BlcmF0b3Ih
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJh
dG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6aGFzaCBjb25z
dCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojpwcm9maWxlZEJsb2NrIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUp
OgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6SklU
R2V0QnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmdlbmVyYXRlR2V0QnlJZElubGluZUFj
Y2Vzcyk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
UHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklURGVsQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAg
ICAoSlNDOjpKSVREZWxCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAgICAg
KEpTQzo6SklUSW5CeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAgIChK
U0M6OkpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVEdldEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgor
ICAgICAgICAoSlNDOjpKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhdGgpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KToKKyAg
ICAgICAgKEpTQzo6SklUOjppc0tub3duQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0Q29u
c3RhbnRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKToKKyAgICAgICAgKEpTQzo6SklUOjps
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6YWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6SklUOjpqdW1wVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6SklUOjps
b2FkUHRyRnJvbU1ldGFkYXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkMzJGcm9tTWV0YWRh
dGEpOgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKToKKyAgICAgICAgKEpT
Qzo6SklUOjpzdG9yZThUb01ldGFkYXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpzdG9yZTMyVG9N
ZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmxvYWRHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29waWVkR2V0UHV0SW5mbyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpJVDo6Y29waWVkQXJpdGhQcm9maWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3Yp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lu
c3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZCk6CisgICAgICAg
IChKU0M6OkpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9m
dW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6dmFsdWVJc0ZhbHNleUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnZhbHVlSXNUcnV0aHlH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAo
SlNDOjpKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAo
SlNDOjpKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfamVx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbmVxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3RyYXBzKToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19yZWdleHApOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmV3
RnVuY0V4cHJDb21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9hcmd1bWVudCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29m
KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25l
d19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0
YW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90eXBlb2ZfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9m
dW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251bGwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BFcUp1bXBTbG93KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1lcmljKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3N3aXRjaF9jaGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRj
aF9zdHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdG9fdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAq
IGppdC9KSVRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6SklUUGxhbjo6a2V5KToKKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAg
IChKU0M6OkpJVDo6c2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1l
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKToKKyAg
ICAgICAgKEpTQzo6SklUOjpzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3B1dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjpzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2Rl
bF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dl
dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
bl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRIYXNQcml2YXRlU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX3By
aXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVf
YnJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmspOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3Rv
X3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX2Fy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFs
VmFyaWFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xvc3Vy
ZVZhcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9kZWxfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9wcml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9w
cml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJh
bmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9pbl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQcml2YXRlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0SGFzUHJpdmF0ZVNsb3cpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfZnJvbV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVy
bmFsX2ZpZWxkKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRy
eUNhY2hlR2V0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5KToKKyAgICAgICAgKEpT
Qzo6dHJ5Q2FjaGVJbkJ5KToKKyAgICAgICAgKEpTQzo6dW5saW5rQ2FsbCk6CisgICAgICAgICog
aml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmhhbmRsZUV4Y2VwdGlvbkdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OnBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVF
eGNlcHRpb25HZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuaDoKKyAg
ICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50Ojpq
aXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9T
TE9XX1BBVEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ2Fj
aGVhYmxlSWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5
cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpudW1CaW5hcnlBcml0aFBy
b2ZpbGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJsb2NrOjpudW1VbmFyeUFy
aXRoUHJvZmlsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNoZWRDb2RlQmxvY2s8Q29kZUJsb2Nr
VHlwZT46OmVuY29kZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgor
ICAgICAgICAoSlNDOjp1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3ApOgorICAgICAg
ICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICogcnVudGltZS9PcHRp
b25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9u
cyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
U2NyaXB0RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnBy
ZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludFRpZXJVcENv
dW50ZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpvcHRpbWl6
ZUFmdGVyV2FybVVwKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRUaWVyVXBDb3VudGVyOjpv
cHRpbWl6ZVNvb24pOgorICAgICAgICAqIHdhc20vV2FzbVRpZXJVcENvdW50LmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6OlRpZXJVcENvdW50KToKKyAgICAgICAgKiB3YXNt
L1dhc21UaWVyVXBDb3VudC5oOgorICAgICAgICAoSlNDOjpXYXNtOjpUaWVyVXBDb3VudDo6b3B0
aW1pemVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6Oldhc206OlRpZXJVcENvdW50OjpvcHRp
bWl6ZU5leHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6Om9w
dGltaXplU29vbik6CisKIDIwMjEtMDktMjYgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjgzMDk1LgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjgzMDk2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02
MTEsNiArNjExLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQQog
ICAgIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCiAgICAgYnVpbHRpbnMvQnVpbHRpblV0aWxzLmgK
IAorICAgIGJ5dGVjb2RlL0FyaXRoUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKICAgICBieXRlY29kZS9C
eXRlY29kZUNvbnZlbnRpb25zLmgKQEAgLTgzNyw2ICs4MzgsNyBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzLmgKICAg
ICBqaXQvQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaAorICAgIGppdC9CYXNlbGluZUpJVENvZGUu
aAogICAgIGppdC9DQ2FsbEhlbHBlcnMuaAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgK
ICAgICBqaXQvRXhlY3V0YWJsZU1lbW9yeUhhbmRsZS5oCkBAIC04NzUsNiArODc3LDcgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIHBhcnNlci9QYXJzZXJF
cnJvci5oCiAgICAgcGFyc2VyL1BhcnNlck1vZGVzLmgKICAgICBwYXJzZXIvUGFyc2VyVG9rZW5z
LmgKKyAgICBwYXJzZXIvUmVzdWx0VHlwZS5oCiAgICAgcGFyc2VyL1NvdXJjZUNvZGUuaAogICAg
IHBhcnNlci9Tb3VyY2VQcm92aWRlci5oCiAgICAgcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGUu
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjgzMDk2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02MTks
NiArNjE5LDcgQEAgaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAKIGludGVycHJldGVyL1N0
YWNrVmlzaXRvci5jcHAKIAogaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKK2ppdC9CYXNlbGluZUpJ
VENvZGUuY3BwCiBqaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAogaml0L0JpbmFyeVN3aXRjaC5jcHAK
IGppdC9DQ2FsbEhlbHBlcnMuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjgzMDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTkwMCw2ICs5MDAs
NyBAQAogCQk1MkNEMEY1RDIyNDJGNTY5MDA0QTE4QTUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsg
aW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2
MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0Qw
RjVFMjI0MkY1NjkwMDRBMThBNSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3
b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3
MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwogCQk1MkNEMEY2ODIy
NDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5j
cHAgKi87IH07CisJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyREQwMDA2
MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkVFRDc5NDI0OTJCODcwMDA4RjRDOTMg
LyogRnVuY3Rpb25BbGxvd2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyRUVENzkzMjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlz
dC5oICovOyB9OwogCQk1MkY2QzM1RTFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5oICovOyB9OwogCQk1MzBBNjZCOTFGQTNFNzhCMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMt
bW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBB
NjZCMTFGQTNFNzdBMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gKi87IH07CkBAIC0x
MjIwLDcgKzEyMjEsNyBAQAogCQk3OTg3MkM0ODIyMUJCQUYzMDA4QzY5NjkgLyogSlNCYXNlSW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
ODcyQzQ3MjIxQkJBRUQwMDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oICovOyB9OwogCQk3OTlF
RjdDNDFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQg
LyogQjNQQ1RvT3JpZ2luTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFE
NzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJp
dGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IH07CisJCTc5
QTIyODM2MUQzNUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAv
KiBBcml0aFByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3OUFCQjE3RTFFNUNDQjU3MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFCQjE3QzFF
NUNDQjU3MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQzMwRkYxRjk5NTM2NDAwNDg0RkQ3IC8q
IE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBQzMwRkUxRjk5NTM2MzAwNDg0RkQ3IC8qIE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oICovOyB9OwogCQk3OUFGMEJFNDFEM0VGRDRDMDBF
OTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFGMEJFMzFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0
aElDSW5saW5lUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTM2NzQsNiArMzY3NSw4IEBACiAJCTUyQ0QwRjY0MjI0MkY1NjkwMDRBMThB
NSAvKiB0ZXN0ZGZnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBh
dGggPSB0ZXN0ZGZnOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MkNE
MEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSB0ZXN0ZGZnLmNwcDsgcGF0aCA9IGRmZy90ZXN0ZGZnLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJEMTMwOEYyMjFDRTAzQTAwOUM4MzZDIC8qIGZv
by5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IGZvby5qczsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJh
c2VsaW5lSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlbGluZUpJVENvZGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJERDAwMDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2Vs
aW5lSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCYXNlbGluZUpJVENvZGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkVFRDc5MjI0OTJCODY4MDA4RjRDOTMgLyog
RnVuY3Rpb25BbGxvd2xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25BbGxvd2xp
c3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkVFRDc5MzI0OTJCODY4MDA4
RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25BbGxv
d2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGNkMzNUIxRTcxRUIwODAw
ODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgcGF0
aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTYyNzYsNiArNjI3OSw4IEBACiAJCQkJNkI3NjdFN0EyNjc5MUYyNzAwMTdG
OEQxIC8qIEFzc2VtYmx5SGVscGVyc1Nwb29sZXJzLmggKi8sCiAJCQkJNzIzOTk4RjYyNjVEQkNE
QjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5jcHAgKi8sCiAJCQkJNzIzOTk4RjUyNjVEQkNE
QjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5oICovLAorCQkJCTUyREQwMDA3MjZFMDM5QjQw
MDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovLAorCQkJCTUyREQwMDA2MjZFMDM5QjMw
MDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLywKIAkJCQkwRjY0QjI2RjFBNzg0QkFGMDA2
RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNwcCAqLywKIAkJCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRF
NjYgLyogQmluYXJ5U3dpdGNoLmggKi8sCiAJCQkJNjVCODM5MkQxQkFDQTlEMzAwNDRFODI0IC8q
IENhY2hlZFJlY292ZXJ5LmNwcCAqLywKQEAgLTk3MzAsNiArOTczNSw3IEBACiAJCQkJMEYyMDE3
ODIxRENBREQ0MjAwRUE1OTUwIC8qIERGR0Zsb3dNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTJERDAwMDgyNkUwMzlCOTAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTUxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0ZvckFs
bEtpbGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY5Q0M4OTE5M0FDNjBBMDA0NTc1OUUgLyog
REZHRnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzODZGRDdFMjZFODY3QjgwMEU0
QzI4QiAvKiBUZW1wb3JhbFBsYWluVGltZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyODMw
OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwMiwxNSArMjAyLDE1IEBAIFJlZlB0cjxBY2Nlc3NDYXNlPiBBY2Nl
c3NDYXNlOjpmcm9tU3RydWMKICAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hlVHlwZSgpKSB7CiAg
ICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICByZXR1cm4gUHJveHlhYmxl
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8u
dS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5n
ZXQoKSk7CisgICAgICAgIHJldHVybiBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93
bmVyLCBMb2FkLCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8u
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OlB1
dEJ5SWRSZXBsYWNlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFu
dElkZW50aWZpZXIpOwotICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25l
ciwgUmVwbGFjZSwgaWRlbnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJ
bmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBB
Y2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBSZXBsYWNlLCBpZGVudGlmaWVyLCBzdHViSW5m
by5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8uaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkp
OwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7Ci0gICAgICAgIHJldHVybiBBY2Nl
c3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBJbkhpdCwgaWRlbnRpZmllciwgc3R1YkluZm8udS5i
eUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQo
KSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBJbkhpdCwg
aWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsK
QEAgLTE5ODUsMTQgKzE5ODUsMTAgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNj
ZXNzR2VuZQogICAgICAgICAvLyBTdHVmZiBmb3IgY3VzdG9tIGdldHRlcnMvc2V0dGVycy4KICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGw7CiAKKwogICAgICAgICAvLyBU
aGlzIGFsc28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNhbGN1bGF0aW9ucyBvZiB3aGV0aGVyIG9yIG5v
dCB3ZSdyZSBhbgogICAgICAgICAvLyBleGNlcHRpb24gaGFuZGxpbmcgY2FsbCBzaXRlLgotICAg
ICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmU7Ci0jaWYgQ1BVKEFSTTY0
KQotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgICAgIGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgotICAg
ICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRl
LnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZSk7CisgICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0
YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKTsKIAogICAg
ICAgICBhdXRvIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCA9IFsmXShBY2Nl
c3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUmIHNwaWxsU3RhdGUsIGJvb2wgY2FsbEhhc1Jl
dHVyblZhbHVlKSB7CiAgICAgICAgICAgICBSZWdpc3RlclNldCBkb250UmVzdG9yZTsKQEAgLTIw
NzksOCArMjA3NSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUK
ICAgICAgICAgICAgIEFTU0VSVCghKG51bWJlck9mUmVnc0ZvckNhbGwgJSBzdGFja0FsaWdubWVu
dFJlZ2lzdGVycygpKSk7CiAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2Fs
bCA9IG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpOwogCi0gICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRl
c0ZvckNhbGwgPQotICAgICAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxp
Z25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOworICAgICAgICAgICAgdW5zaWdu
ZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOwogCiAgICAgICAg
ICAgICBqaXQuc3ViUHRyKAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCkBAIC0yMTM4LDYgKzIxMzMsNyBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAKICAgICAgICAgICAgIGlu
dCBzdGFja1BvaW50ZXJPZmZzZXQgPSAoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAq
IHNpemVvZihSZWdpc3RlcikpIC0gc3RhdGUucHJlc2VydmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZS5u
dW1iZXJPZkJ5dGVzUHJlc2VydmVkIC0gc3BpbGxTdGF0ZS5udW1iZXJPZlN0YWNrQnl0ZXNVc2Vk
Rm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb247CiAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldCksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKwogICAgICAg
ICAgICAgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUgPSBpc0dldHRlcigpOwogICAgICAgICAgICAg
cmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUsIGNhbGxIYXNS
ZXR1cm5WYWx1ZSk7CiAKQEAgLTIyNjQsMTIgKzIyNjAsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAKICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOwogCi0gICAgICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmU7
Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkp
Ci0gICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lz
dGVyczo6bHIpOwotI2VuZGlmCi0gICAgICAgICAgICBhdXRvIHNwaWxsU3RhdGUgPSBzdGF0ZS5w
cmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAgICAgICBhdXRvIHNwaWxsU3RhdGUgPSBzdGF0
ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCk7
CiAKICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Xcml0
ZUJhcnJpZXJTbG93UGF0aCk+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CkBAIC0y
MzY0LDEwICsyMzU1LDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2Vu
ZQogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZTsK
ICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KGJhc2VHUFIpOwog
ICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQodmFsdWVSZWdzKTsK
LSNpZiBDUFUoQVJNNjQpCi0gICAgICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlD
KCkpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJN
NjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0
ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgkocmV2aXNpb24gMjgzMDk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgkod29ya2lu
ZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBAIG9wX2dyb3VwIDpQcm9maWxlZEJpbmFyeU9wLAog
ICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRUeXBlcywKICAgICB9LAogICAgIG1ldGFkYXRh
OiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlCisgICAgICAgIGFy
aXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wX2dyb3VwIDpWYWx1
ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTMsNyArMzUzLDcgQEAgb3BfZ3JvdXAgOlVuYXJ5SW5Q
bGFjZVByb2ZpbGVkT3AsCiAgICAgICAgIHNyY0RzdDogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0s
CiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmls
ZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9w
IDp0b19vYmplY3QsCkBAIC0zODYsNyArMzg2LDcgQEAgb3AgOm5lZ2F0ZSwKICAgICAgICAgcmVz
dWx0VHlwZTogUmVzdWx0VHlwZSwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFy
aXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUsCisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5h
cnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3AgOm5vdCwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9y
Q2hlY2twb2ludC5oCShyZXZpc2lvbiAyODMwOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNzMsNiArNzMsMjggQEAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JJbXBsKEJ5dGVj
bwogICAgICAgICByZXR1cm4gJm1ldGFkYXRhLm1fcHJvZmlsZTsKIH0KIAordGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgordWludHB0cl90IHZhbHVlUHJvZmlsZU9mZnNldEZvcih1bnNpZ25l
ZCBjaGVja3BvaW50SW5kZXgpCit7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRleCk7
CisgICAgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3Jfb3Bl
bikgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9w
SXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXRO
ZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRQcm9maWxlKCk7Cisg
ICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KworICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVy
YXRvcl9uZXh0KSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAgICAg
IGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZk5leHRSZXN1bHRQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck5leHQ6OmdldERvbmU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRG9uZVBy
b2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiBC
eXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1
bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
CisgICAgICAgIHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpOwor
fQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZU1ldGFkYXRhPgogYm9vbCBoYXNWYWx1ZVBy
b2ZpbGVGb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9pbnRJ
bmRleCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uY3BwCShyZXZpc2lvbiAyODMwOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDExICsxMTQs
NiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICBSRUxFQVNFX0FTU0VS
VCghaXNPbkxpc3QoKSk7CiB9CiAKLUNvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCi17Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlv
bkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwotfQotCiBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRo
U3RhcnQoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RhdGFJQygpKTsKQEAgLTIyNSw2ICsy
MjAsMTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldE1heEFyZ3VtZW50Q291bnRJbgogICAgIG1f
bWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSB2YWx1ZTsKIH0KIAorQ29kZUxvY2F0aW9u
TGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVjdCgpICYmIGlzVGFpbENhbGwoKSk7CisgICAgcmV0
dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPih1LmNvZGVJQy5t
X2Zhc3RQYXRoU3RhcnQpOworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2
bSkKIHsKICAgICBhdXRvIGhhbmRsZVNwZWNpZmljQ2FsbGVlID0gWyZdIChKU0Z1bmN0aW9uKiBj
YWxsZWUpIHsKQEAgLTI5OCwyMyArMjk5LDExIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFt
ZVNodWZmbGVEYXRhKGMKICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aElt
cGwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0lu
Zm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJl
Rm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0
RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGpp
dCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVz
ZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZv
clRhaWxDYWxsKQogewotICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7Ci0gICAgaWYgKGlz
RGF0YUlDKCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQ
UlJlZzo6SW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsKLSAgICAgICAgdS5kYXRhSUMubV9j
YWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7Ci0gICAgfQotCi0gICAgYXV0byBmYXN0
UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0K
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogCi0gICAgaWYgKGlzRGF0YUlD
KCkpIHsKKyAgICBpZiAodXNlRGF0YUlDID09IFVzZURhdGFJQzo6WWVzKSB7CiAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hSZWdpc3RlcigpOwogICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZkNhbGxl
ZSgpKSwgc2NyYXRjaEdQUik7IAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5bW9y
cGhpYzsKQEAgLTMyMyw3ICszMTIsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExp
bmtJbmZvOjplCiAgICAgICAgICAgICBnb1BvbHltb3JwaGljID0gaml0LmJyYW5jaFRlc3RQdHIo
Q0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihwb2x5bW9ycGhpY0NhbGxlZU1hc2spKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNhbGxl
ZUdQUikpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAg
aWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAg
ICAgICAgICAgZ29Qb2x5bW9ycGhpYy5saW5rKCZqaXQpOyAvLyBQb2x5bW9ycGhpYyBzdHViIGhh
bmRsZXMgdGFpbCBjYWxsIHN0YWNrIHByZXAuCiAgICAgICAgICAgICBqaXQuZmFySnVtcChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1vbm9tb3JwaGljQ2Fs
bERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKQEAgLTMzNiwxNCArMzI1LDE2IEBAIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2Fs
bGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIp
KSk7CiAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChpc1Rh
aWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBh
cmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihjYWxsKTsKLSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgICAgICAg
ICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKICAgICAgICAgfSk7CiAg
ICAgfQogCkBAIC0zNTMsMTMgKzM0NCwzNCBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2Fs
bExpbmtJbmZvOjplCiBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZh
c3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFp
c1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BS
LCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgbnVsbHB0cik7CisgICAgc2V0VXNlc0RhdGFJ
Q3ModXNlRGF0YUlDKTsKKworICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOworICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5m
b0dQUik7CisgICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZv
R1BSOworICAgIH0KKworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2Fs
bGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRy
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxD
YWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBj
YWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJ
bmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxl
ZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBS
RUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBs
KGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgV1RGTW92ZShwcmVw
YXJlRm9yVGFpbENhbGwpKTsKKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKyAg
ICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQ
UlJlZywgVXNlRGF0YUlDOjpObywgaXNUYWlsQ2FsbCgpLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWls
Q2FsbCkpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0
RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BS
ICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIs
IGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwg
bnVsbHB0cik7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVt
aXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVl
R1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFy
ZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJ
bnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQs
IGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92
ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKIH0KIAogdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93
UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0KQpAQCAtMzY5LDE3ICszODEsMzIgQEAgdm9p
ZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIAogICAgIGppdC5jYWxsKENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0
aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0
RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5m
b0dQUikKK3sKKyAgICBqaXQubW92ZShjYWxsTGlua0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsK
KyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNl
dE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworfQorCit2b2lk
IENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJ
bmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxM
aW5rSW5mb0dQUikKK3sKKyAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkQ2Fs
bExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIHNldFVwQ2FsbCh1bmxpbmtlZENhbGxMaW5r
SW5mby5jYWxsVHlwZSwgY2FsbGVlR1BSKTsKKyAgICBtX2RvbmVMb2NhdGlvbiA9IHVubGlua2Vk
Q2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBpZiAodW5saW5rZWRDYWxsTGlua0luZm8u
ZnJhbWVTaHVmZmxlRGF0YSkgeworICAgICAgICAvLyBGSVhNRTogSXQnZCBiZSBuaWNlIGlmIHRo
aXMgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBzdHJ1Y3R1cmUuCisgICAgICAgIG1fZnJhbWVTaHVm
ZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxM
aW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsKKyAgICB9CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNl
RGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJ
bmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+
KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVs
cGVycyYgaml0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAg
c2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQg
PSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8g
Y2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5
Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAK
ICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rh
c2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFy
dCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0
KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8g
LSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwgdGhpcyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0
aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZv
LmgJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNG
dW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVm
ZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlu
a0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVi
bGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsK
ICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0x
NjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsK
ICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5r
SW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAg
R1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAg
ICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBA
IHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJl
ZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBh
cmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMs
IGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2Fs
bCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxs
ZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRo
KENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVs
cGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
QykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0
VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcg
Y2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJl
Rm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQ
UiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURf
UkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYpOwogICAg
IHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgo
Vk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBzdGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgo
Vk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJl
dmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpA
QCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7
CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBh
dGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQ
YXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25l
TG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsyNDksNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xv
d1N0dWIgPSBudWxscHRyOwogICAgIH0KIAotICAgIEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1Yigp
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zbG93U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBi
b29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBh
dGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsKICAgICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVz
c09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICBy
ZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKTsKICAgICB9CiAKICAgICB1aW50MzJfdCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBD
b2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisK
ICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxE
ZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlvblR5cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFn
PiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxK
U0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9zbG93UGF0aFN0YXJ0OworICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAg
ICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAKQEAgLTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENv
ZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaQogICAgIHJldHVybiBjYWxsTGlua0luZm8u
Y29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5
dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsgLy8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFz
ZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxseSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBD
YWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZy
YW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZsZURhdGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjgzMDk2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
OSw4ICsyNzksNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAg
ICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fZGlkRmFpbEZUTENv
bXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQot
ICAgICwgbV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNlKQotICAgICwgbV9pc0VsaWdpYmxlRm9yTExJ
bnREb3duZ3JhZGUoZmFsc2UpCiAgICAgLCBtX251bUNhbGxlZUxvY2FscyhvdGhlci5tX251bUNh
bGxlZUxvY2FscykKICAgICAsIG1fbnVtVmFycyhvdGhlci5tX251bVZhcnMpCiAgICAgLCBtX251
bWJlck9mQXJndW1lbnRzVG9Ta2lwKG90aGVyLm1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCkBA
IC0zMDgsNiArMzA2LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUq
IAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRl
cnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9
ICZtX3VubGlua2VkQ29kZS0+bGxpbnRFeGVjdXRlQ291bnRlcigpOwogICAgIAogICAgIHZtLmhl
YXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQpAQCAtMzE4LDcgKzMxOCw2IEBAIHZvaWQg
Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEMKICAgICBmaW5pc2hDcmVhdGlvbkNv
bW1vbih2bSk7CiAKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJt
VXAoKTsKIAogICAgIGlmIChvdGhlci5tX3JhcmVEYXRhKSB7CiAgICAgICAgIGNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkoKTsKQEAgLTMzNiw4ICszMzUsNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxz
ZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9oYXNCZWVu
Q29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNlKQot
ICAgICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUoZmFsc2UpIAogICAgICwgbV9udW1D
YWxsZWVMb2NhbHModW5saW5rZWRDb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKQogICAgICwg
bV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1WYXJzKCkpCiAgICAgLCBtX2hhc0RlYnVn
Z2VyU3RhdGVtZW50KGZhbHNlKQpAQCAtMzU5LDcgKzM1Niw5IEBAIENvZGVCbG9jazo6Q29kZUJs
b2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigp
KTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCkpOwotICAgIAorCisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2Rl
LT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CisKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFk
ZCh0aGlzKTsKIH0KIApAQCAtMzcwLDcgKzM2OSw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZN
JiB2bSwgU3RydWN0dXJlKiAKIC8vIHdlIGNhbid0IGdlbmVyYXRlIGR1cmluZyB1bmxpbmtlZCBi
eXRlY29kZSBnZW5lcmF0aW9uLiBUaGlzIHByb2Nlc3MgaXMgbm90IGFsbG93ZWQgdG8gZ2VuZXJh
dGUgY29udHJvbAogLy8gZmxvdyBvciBpbnRyb2R1Y2UgbmV3IGxvY2Fscy4gVGhlIHJlYXNvbiBm
b3IgdGhpcyBpcyB3ZSByZWx5IG9uIGxpdmVuZXNzIGFuYWx5c2lzIHRvIGJlIHRoZSBzYW1lIGZv
cgogLy8gYWxsIHRoZSBDb2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLiBXZSByZWx5
IG9uIHRoaXMgZmFjdCBieSBjYWNoaW5nIHRoZSBsaXZlbmVzcyBhbmFseXNpcwotLy8gaW5zaWRl
IFVubGlua2VkQ29kZUJsb2NrLgorLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLiBBbHNvLCBC
YXNlbGluZSBKSVQgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgQ29kZUJsb2NrcyBvZiBhbiBV
bmxpbmtlZENvZGVCbG9jaywKKy8vIHNvIHRoZSBieXRlY29kZSBtdXN0IHJlbWFpbiB0aGUgc2Ft
ZSBiZXR3ZWVuIENvZGVCbG9ja3Mgc2hhcmluZyBhbiBVbmxpbmtlZENvZGVCbG9jay4KIGJvb2wg
Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVy
RXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAogICAgIEpT
U2NvcGUqIHNjb3BlKQogewpAQCAtNDcxLDYgKzQ3MSwyMSBAQCBib29sIENvZGVCbG9jazo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCisgICAgdW5z
aWduZWQgYmluYXJ5UHJvZmlsZUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCB1bmFyeVByb2ZpbGVJ
bmRleCA9IDA7CisjZGVmaW5lIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBc
CisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkg
XAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+Ymlu
YXJ5QXJpdGhQcm9maWxlKGJpbmFyeVByb2ZpbGVJbmRleCsrKTsgXAorICAgICAgICBicmVhazsg
XAorICAgIH0KKyNkZWZpbmUgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAor
ICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwK
KyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5
QXJpdGhQcm9maWxlKHVuYXJ5UHJvZmlsZUluZGV4KyspOyBcCisgICAgICAgIGJyZWFrOyBcCisg
ICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9uU3RyZWFtID0g
aW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0cnVjdGlvbiA6IGluc3Ry
dWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24t
Pm9wY29kZUlEKCk7CkBAIC01MzMsMTQgKzU0OCwxNCBAQCBib29sIENvZGVCbG9jazo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQcm9taXNlKQogICAgICAg
ICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAgIExJTksoT3BBZGQpCi0gICAgICAg
IExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0gICAgICAgIExJTksoT3BTdWIpCi0K
LSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcEluYykKLSAgICAgICAgTElO
SyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wQWRkKQor
ICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BNdWwpCisgICAgICAgIExJ
TktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikKKyAgICAgICAgTElOS19XSVRIX0JJ
TkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklU
SF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklM
RShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BEZWMpCiAK
ICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2OSw3ICs3ODQsNiBAQCBib29sIENvZGVC
bG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgLy8gcmVseSBvbiB0aGUgaW5zdHJ1
Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRlZCB0byBhbHNvIGluc3BlY3Qg
dGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUgYWNjdXJhdGUgYXNzZXNzIHRo
ZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRB
ZnRlcldhcm1VcCgpOwogCiAgICAgLy8gSWYgdGhlIGNvbmN1cnJlbnQgdGhyZWFkIHdpbGwgd2Fu
dCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4gY29tcHV0ZSBpdCBoZXJlCiAgICAgLy8gc3lu
Y2hyb25vdXNseS4KQEAgLTc5Myw2ICs4MDcsNzggQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3duZXJFZGdlLnNldCh2bSwgdGhpcywgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZtLCB0aGlzKSk7CiB9CiAKKyNpZiBFTkFCTEUoSklU
KQordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNl
bGluZUpJVENvZGU+IGppdENvZGUpCit7CisgICAgc2V0SklUQ29kZShqaXRDb2RlLmNvcHlSZWYo
KSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8mIGppdENvZGVNYXAgPSB0aGlzLT5qaXRD
b2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZFeGNlcHRp
b25IYW5kbGVycygpOyArK2kpIHsKKyAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0g
ZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2Js
ZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gaml0Q29kZU1h
cC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPigpOworICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIGF1dG8mIGppdERhdGEgPSBl
bnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5t
X2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOworICAgICAgICBqaXREYXRhLm1faml0Q29uc3Rh
bnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUo
KSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBv
b2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2Nv
bnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAgICAgIHN3aXRjaCAoZW50cnkudHlwZSkgeworICAg
ICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdDoKKyAgICAg
ICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gbV9nbG9iYWxPYmplY3Qu
Z2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0
YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRD
YWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2Vk
Q2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXREYXRhLm1fY2FsbExpbmtJbmZvcy5hZGQoQ29k
ZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFsaXplRGF0YUlDKHZtKCksIHVubGlua2VkQ2FsbExp
bmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAg
IGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBjYWxsTGlua0luZm87CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZvID0gKnN0YXRpY19jYXN0PFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBqaXREYXRhLm1fc3R1YkluZm9zLmFk
ZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUsIENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5m
by5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8tPmluaXRpYWxpemVG
cm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyh0aGlzLCB1bmxpbmtlZFN0dWJJbmZvKTsKKyAg
ICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gc3R1YkluZm87Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsOiB7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wYXlsb2FkLmdldCgp
KTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rp
b25EZWNsKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHI6IHsKKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVu
dHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFu
dFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3dp
dGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBHbG9iYWxDb2RlOgorICAgIGNhc2UgTW9kdWxl
Q29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZ1bmN0aW9uQ29kZToKKyAgICAg
ICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRl
dGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgorICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0
aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5J
bmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlz
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGppdENvZGUtPm1faXNTaGFyZWFi
bGUgJiYgIXVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUgJiYgT3B0
aW9uczo6dXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZygpKQorICAgICAgICB1bmxpbmtlZENvZGVC
bG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlID0gV1RGTW92ZShqaXRDb2RlKTsKK30KKyNl
bmRpZiAvLyBFTkFCTEUoSklUKQorCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogewogICAgIFZN
JiB2bSA9ICptX3ZtOwpAQCAtODczLDYgKzk1OSwyNyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2so
KQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKK2Jvb2wgQ29kZUJsb2NrOjppc0NvbnN0YW50
T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0Cit7Cisg
ICAgLy8gVGhpcyBuZWVkcyB0byBjb3JyZXNwb25kIHRvIHdoYXQgd2UgZG8gaW5zaWRlIHNldENv
bnN0YW50UmVnaXN0ZXJzLgorICAgIHN3aXRjaCAodW5saW5rZWRDb2RlQmxvY2soKS0+Y29uc3Rh
bnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKSkgeworICAgIGNhc2UgU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpEb3VibGU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpPdGhlcjogeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdW5saW5rZWRDb2Rl
QmxvY2soKS0+Z2V0Q29uc3RhbnQocmVnKTsKKyAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUu
aXNDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgSlNDZWxsKiBjZWxs
ID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlmIChjZWxsLT5pbmhlcml0czxTeW1ib2xUYWJs
ZT4odm0oKSkgfHwgY2VsbC0+aW5oZXJpdHM8SlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KHZt
KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIFZlY3Rvcjx1bnNpZ25lZD4gQ29k
ZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKIHsKICAgICBW
TSYgdm0gPSAqbV92bTsKQEAgLTg5Miw2ICs5OTksNyBAQCBWZWN0b3I8dW5zaWduZWQ+IENvZGVC
bG9jazo6c2V0Q29uc3RhbnRSCiAgICAgICAgIHN3aXRjaCAocmVwcmVzZW50YXRpb24pIHsKICAg
ICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CiAg
ICAgICAgICAgICBjb25zdGFudCA9IGdsb2JhbE9iamVjdC0+bGlua1RpbWVDb25zdGFudChzdGF0
aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50Pihjb25zdGFudC5hc0ludDMyQXNBbnlJbnQoKSkpOwor
ICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50LmlzQ2VsbCgpKTsgLy8gVW5saW5rZWQgQmFzZWxp
bmUgSklUIHJlcXVpcmVzIHRoaXMuCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOgogICAgICAgICBjYXNlIFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKQEAgLTE1MTQsNyArMTYyMiw3IEBAIENvZGVCbG9jazo6
SklURGF0YSYgQ29kZUJsb2NrOjplbnN1cmVKSVQKICAgICByZXR1cm4gKm1faml0RGF0YTsKIH0K
IAotdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQordm9p
ZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCkKIHsKICAgICBpZiAoYXV0byog
aml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewogICAgICAgICBmb3IgKENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0luZm9zKQpAQCAtMTUyNSw2ICsxNjMz
LDIwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW4KICAgICAgICAg
ICAgIHN0dWJJbmZvLT52aXNpdFdlYWtSZWZlcmVuY2VzKGxvY2tlciwgdGhpcyk7CiAgICAgICAg
IH0KICAgICB9CisKKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgaWYgKGppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICAvLyBWZXJpZnkgd2UgZG9uJ3QgbmVlZCB0
byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3JlIHZpcnR1YWwgY2FsbHMuCisgICAgICAgIGZv
ciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENv
ZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxDYWxsTGlua0luZm9zKSB7CisgICAgICAgICAg
ICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7CisgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtdIChKU0NlbGwqKSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisg
ICAgfQorI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTUzNCw0NiArMTY1NiwxMiBAQCB2b2lkIENv
ZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0
aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29sIGlzRWxpZ2libGVGb3JMTEludERv
d25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwotICAgIG1faXNFbGlnaWJs
ZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBp
cyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2Ug
YXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFs
bCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAgICBpZiAoT3B0aW9uczo6dXNlTExJ
bnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGlu
Zyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBv
cHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wdGltaXplZENvZGVC
bG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxl
Rm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVs
bHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJ
bnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5s
aW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1f
ZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0
cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhh
bmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50Ojpo
YW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKLQot
ICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUg
YmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwot
ICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBy
dW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNv
ZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0
dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9zLgotICAgICAgICAgICAgICAgICAg
ICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYKLSAgICAKICAgICBpZiAoSklUQ29kZTo6Y291
bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVD
YWNoZXMoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQotICAgICAg
ICBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7CisgICAgICAgIGZpbmFsaXplSklU
SW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTU5NCw3
ICsxNjgyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAg
ICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAgICAgICAgICAgIGNvdW50
ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CisgICAgICAgICAgICBjb3VudCA9IG1f
bGxpbnRFeGVjdXRlQ291bnRlci0+Y291bnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4
ZWN1dGVDb3VudGVyLmNvdW50KCk7CkBAIC0xNjc1LDMwICsxNzYzLDYgQEAgU3RydWN0dXJlU3R1
YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgogICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxv
Y2tlcikubV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pOwogfQogCi1KSVRB
ZGRJQyogQ29kZUJsb2NrOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0
dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0K
LQotSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwot
ICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmls
ZSk7Ci19Ci0KLUpJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9s
b2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3ViSUNzLmFkZChhcml0
aFByb2ZpbGUpOwotfQotCi1KSVROZWdJQyogQ29kZUJsb2NrOjphZGRKSVROZWdJQyhVbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fbmVnSUNzLmFk
ZChhcml0aFByb2ZpbGUpOwotfQotCiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5k
U3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9sb2NrKTsKQEAgLTMxMzMsNyArMzE5Nyw3IEBAIHVuc2lnbmVkIENvZGVCbG9j
azo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRU
eXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50
Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhp
cy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVO
QUJMRShERkdfSklUKQpAQCAtMzM0OSwxMyArMzQxMywxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUq
IENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewog
ICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX211bDoKLSAgICAgICAg
cmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7Cisg
ICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1l
dGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3Vi
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAg
ICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMzY3LDEx
ICszNDMxLDExIEBAIFVuYXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsK
ICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAg
ICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9m
aWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1f
YXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5jOgotICAgICAgICByZXR1cm4gJnBjLT5hczxP
cEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBj
LT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9w
X2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhp
cykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpA
QCAtMzQ3MiwyMiArMzUzNiwxNiBAQCB2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0Jv
dW5kYXJpCiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6OnNldFBDVG9Db2Rl
T3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJiBtYXApIAoteyAK
LSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgZW5zdXJlSklURGF0
YShsb2NrZXIpLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1hcCk7Ci19Ci0KIHN0ZDo6
b3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW5kUEModm9pZCogcGMpCiB7CisgICAg
aWYgKGF1dG8qIHBjVG9Db2RlT3JpZ2luTWFwID0gbV9qaXRDb2RlLT5wY1RvQ29kZU9yaWdpbk1h
cCgpKSB7CisgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4g
PSBwY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBjKSkKKyAgICAgICAgICAgIHJldHVybiBjb2Rl
T3JpZ2luOworICAgIH0KKwogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2xvY2spOwogICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkg
ewotICAgICAgICAgICAgaWYgKGppdERhdGEtPm1fcGNUb0NvZGVPcmlnaW5NYXApIHsKLSAgICAg
ICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gaml0
RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBjKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNvZGVPcmlnaW47Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGZvciAo
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpIHsKICAg
ICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnRhaW5zUEMocGMpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPihzdHViSW5mby0+Y29kZU9y
aWdpbik7CkBAIC0zNTIxLDI4ICszNTc5LDE0IEBAIHN0ZDo6b3B0aW9uYWw8Qnl0ZWNvZGVJbmRl
eD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKIH0KIAotaW50MzJfdCBD
b2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKLXsKLSAgICBzd2l0
Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXplKCkpIHsKLSAgICBjYXNlIFRyaVN0
YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkOwotICAgIGNhc2Ug
VHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkICogNDsKLSAgICBjYXNl
IFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8gMjsKLSAgICB9Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRocmVzaG9sZDsKLX0KLQotdm9p
ZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkK
IHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZv
ckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSwgdGhpcyk7CisgICAg
bV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hvbGQodW5saW5rZWRDb2RlQmxvY2so
KS0+dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMp
OwogfQogCi12b2lkIENvZGVCbG9jazo6aml0U29vbigpCit2b2lkIENvZGVCbG9jazo6aml0TmV4
dEludm9jYXRpb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hv
bGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMp
OworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwog
fQogCiBib29sIENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25z
dApAQCAtMzU4OCwyOCArMzYzMiw4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMo
KQogICAgIGRvdWJsZSBudW1TdWJzID0gMC4wOwogICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAw
LjA7CiAKLSAgICBhdXRvIGNvdW50SUNzID0gWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewot
ICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IGNvZGVCbG9jay0+bV9qaXREYXRhLmdldCgpKSB7
Ci0gICAgICAgICAgICBmb3IgKEpJVEFkZElDKiBhZGRJQyA6IGppdERhdGEtPm1fYWRkSUNzKSB7
Ci0gICAgICAgICAgICAgICAgbnVtQWRkcysrOwotICAgICAgICAgICAgICAgIHRvdGFsQWRkU2l6
ZSArPSBhZGRJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9y
IChKSVRNdWxJQyogbXVsSUMgOiBqaXREYXRhLT5tX211bElDcykgewotICAgICAgICAgICAgICAg
IG51bU11bHMrKzsKLSAgICAgICAgICAgICAgICB0b3RhbE11bFNpemUgKz0gbXVsSUMtPmNvZGVT
aXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lD
IDogaml0RGF0YS0+bV9uZWdJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1OZWdzKys7Ci0gICAg
ICAgICAgICAgICAgdG90YWxOZWdTaXplICs9IG5lZ0lDLT5jb2RlU2l6ZSgpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJVFN1YklDKiBzdWJJQyA6IGppdERhdGEtPm1fc3Vi
SUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtU3VicysrOwotICAgICAgICAgICAgICAgIHRvdGFs
U3ViU2l6ZSArPSBzdWJJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQor
ICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVCbG9jayopIHsKKyAgICAgICAgLy8gRklYTUU6
IFdlIG5lZWQgdG8gcmUtaW1wbGVtZW50IHRoaXMgdXNpbmcgSklUQ29kZS4KICAgICB9OwogICAg
IGhlYXAoKS0+Zm9yRWFjaENvZGVCbG9jayhjb3VudElDcyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MzA5NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtOTQsOSArOTQsOSBAQCBjbGFzcyBKU01vZHVsZUVudmlyb25tZW50OwogY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50OwogY2xhc3MgTWV0YWRhdGFUYWJsZTsKLWNsYXNzIFBDVG9Db2RlT3JpZ2lu
TWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5m
bzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEpOwogCkBAIC0xNTgsNyArMTU4LDkgQEAgcHVi
bGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBt
X21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFy
YW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1W
YXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygp
IGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNDaGVja3BvaW50cygpICogbWF4TnVt
Q2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJz
KCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywg
bV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9
CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJh
cEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMo
KTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0g
ICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXph
dGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGlu
IHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgp
ID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAgLTI2OCwyMyArMjU5LDIxIEBAIHB1
YmxpYzoKICNpZiBFTkFCTEUoSklUKQogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RG
X01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHVi
SW5mb3M7Ci0gICAgICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7Ci0gICAgICAgIEJhZzxKSVRN
dWxJQz4gbV9tdWxJQ3M7Ci0gICAgICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7Ci0gICAgICAg
IEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7CiAgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2Fs
bExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFj
a2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICAg
ICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIFBhY2tlZFJhd1NlbnRp
bmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7
Ci0gICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVz
OwotICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlczsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3Bj
VG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7
IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lz
dGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRW
ZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERh
dGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVu
bGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEm
IGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewog
ICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkpCkBAIC0yOTMsMjIgKzI4Miw3IEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJik7CiAKLSAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9m
aWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwot
ICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVFN1
YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLQotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3Rk
Ojppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAg
IEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVy
biBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2Vu
ZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUTXVsSUMqIGFk
ZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElD
KHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFt
ZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5l
Z0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5
QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQot
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2
YWx1ZT46OnR5cGU+Ci0gICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUq
IHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX2ppdERhdGEpOyB9CiAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8o
QWNjZXNzVHlwZSwgQ29kZU9yaWdpbik7CiAKQEAgLTMyMiwxOCArMjk2LDggQEAgcHVibGljOgog
ICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0
IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5
dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFw
KEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRD
b2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1h
cCYgaml0Q29kZU1hcCgpCi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2Rl
TWFwOwotICAgIH0KKyAgICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKLSAgICB2
b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1h
cD4mJik7CiAgICAgc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwog
CiAgICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0KTsKQEAgLTQ3Miw2
ICs0MzYsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgbmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3Rlcik7CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJndW1lbnRWYWx1ZVBy
b2ZpbGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9hcmd1bWVudFZh
bHVlUHJvZmlsZXMpOyB9CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmls
ZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUo
KSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9udW1QYXJhbWV0ZXJzKSB8fCAhT3B0aW9uczo6
dXNlSklUKCkpOwpAQCAtNTY5LDggKzUzNCwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9y
PFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9j
b25zdGFudFJlZ2lzdGVyczsgfQogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJz
W3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0
Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJl
Z2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CisgICAgYm9vbCBpc0NvbnN0
YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZpcnR1YWxSZWdpc3RlcikgY29uc3Q7CiAgICAg
QUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV91bmxp
bmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHJlZyk7IH0KICAgICBB
TFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENv
ZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKGluZGV4KTsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0YW50UmVnaXN0ZXJzKSArIGRlY2x0eXBlKG1f
Y29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5T2Zmc2V0KCk7IH0KIAogICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRl
Y2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJl
dHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC01OTUsMjIgKzU2MiwyMiBAQCBwdWJs
aWM6CiAgICAgLy8gSnVtcCBUYWJsZXMKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgU2ltcGxlSnVt
cFRhYmxlJiBzd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCisgICAgU2ltcGxlSnVtcFRh
YmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgU3RyaW5n
SnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7
CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFudFBvb2woKQogICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERh
dGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJu
IG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wuZGF0YSgpOwogICAgIH0KICNlbmRpZgogICAg
IHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAg
ICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkU3dpdGNoSnVtcFRhYmxl
KGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dW5saW5rZWRTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7IH0KIAotI2lmIEVOQUJMRShKSVQpCi0gICAgU3RyaW5nSnVt
cFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCi0gICAgewotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwotICAgICAgICByZXR1cm4gbV9qaXREYXRh
LT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Ci0gICAgfQorI2lmIEVOQUJM
RShERkdfSklUKQorICAgIFN0cmluZ0p1bXBUYWJsZSYgZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KGludCB0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGRmZ1N3aXRjaEp1bXBUYWJs
ZShpbnQgdGFibGVJbmRleCk7CiAjZW5kaWYKKwogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5u
dW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0
YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dW5saW5rZWRTdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7IH0KIApAQCAtNjMyLDIxICs1OTksMjAgQEAgcHVibGljOgog
CiAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0
KHRoaXMpOworICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jaGVja0lmVGhy
ZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKICAgICB9CiAKICAgICB2b2lkIGRvbnRKSVRBbnl0
aW1lU29vbigpCiAgICAgewotICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRl
ZmluaXRlbHkoKTsKKyAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5kZWZlckluZGVmaW5p
dGVseSgpOwogICAgIH0KIAotICAgIGludDMyX3QgdGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhy
ZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2FybVVwKCk7CiAgICAgdm9pZCBqaXRTb29uKCk7
CisgICAgdm9pZCBqaXROZXh0SW52b2NhdGlvbigpOwogCiAgICAgY29uc3QgQmFzZWxpbmVFeGVj
dXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAgICAgIHJldHVybiAqbV9sbGludEV4
ZWN1dGVDb3VudGVyOwogICAgIH0KIAogICAgIHR5cGVkZWYgSGFzaE1hcDxzdGQ6OnR1cGxlPFN0
cnVjdHVyZUlELCB1bnNpZ25lZD4sIEZpeGVkVmVjdG9yPExMSW50UHJvdG90eXBlTG9hZEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVjdHVyZVdhdGNocG9pbnRNYXA7CkBAIC03OTcs
NiArNzYzLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29u
c3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CiAgICAgdm9pZCogZGVidWdnZXJSZXF1
ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVxdWVzdHMpOyB9CiAKICAgICB2b2lkIGFkZEJy
ZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpOwogICAgIHZvaWQgcmVtb3ZlQnJlYWtw
b2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykKQEAgLTgzOCw2ICs4MDUsNyBAQCBwdWJsaWM6
CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKIAogICAgIGJvb2wgbV9zaG91
bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJpdGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3YW50
cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2hvdWxkQWx3
YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zaG91
bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBFTkFCTEUoSklUKQogICAgIHVuc2lnbmVkIG1f
Y2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBERkc6OkNhcGFiaWxpdHlMZXZlbApAQCAtODQ3
LDggKzgxNSw2IEBAIHB1YmxpYzoKICAgICBib29sIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uIDog
MTsKICAgICBib29sIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA6IDE7CiAKLSAgICBib29sIG1f
aGFzTGlua2VkT1NSRXhpdCA6IDE7Ci0gICAgYm9vbCBtX2lzRWxpZ2libGVGb3JMTEludERvd25n
cmFkZSA6IDE7CiAgICAgYm9vbCBtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgeyBm
YWxzZSB9OwogCiAgICAgLy8gSW50ZXJuYWwgbWV0aG9kcyBmb3IgdXNlIGJ5IHZhbGlkYXRpb24g
Y29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBpdCB3YXNuJ3QKQEAgLTkwNywxNiArODczLDEy
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0YWRhdGFUYWJsZSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpOyB9
CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkK
LSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBj
b21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0gICAgICAgIHJldHVybiAhbV91bmxpbmtlZENv
ZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAgfQorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxp
Z2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bG9v
cEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKTsgfQogCiBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CiAjaWYgRU5BQkxFKEpJVCkK
LSAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKKyAgICB2b2lkIGZp
bmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKQEAgLTEwMTAsNyArOTcyLDkgQEAgcHJp
dmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2lu
dE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitw
dWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6
CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRv
IG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9j
awpAQCAtMTAyOSw3ICs5OTMsNyBAQCBwcml2YXRlOgogCiAgICAgV3JpdGVCYXJyaWVyPENvZGVC
bG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIg
bV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciogbV9s
bGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9OwogCiAgICAgQmFzZWxpbmVFeGVjdXRpb25D
b3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAgICAgdWludDMyX3QgbV9vc3JFeGl0Q291bnRl
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
a0lubGluZXMuaAkocmV2aXNpb24gMjgzMDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTAg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNs
dWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRl
ICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkgKzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZv
ckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJ
U0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8m
IG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9wcm9maWxlLCBmYWxzZSk7IH0pOwotCiAgICAg
ICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJTEUoVklTSVQpCi0KICN1bmRlZiBW
SVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck9wZW4+KFsmXSAo
YXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1Nyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JF
YWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVBy
b2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwzOCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFj
aExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZU19J
TkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJsb2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAgICBB
U1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFw
OworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGlu
ZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxp
bmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNl
bGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQo
aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK0FM
V0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmRmZ1N3aXRjaEp1bXBUYWJs
ZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkRG
R0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6SklUQ29kZSo+KG1faml0Q29kZS5n
ZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKworQUxXQVlTX0lOTElO
RSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGlu
dCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklU
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgp
KS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODMw
OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJs
b2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9j
ayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRB
Y3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMjgzMDk2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAgYm9vbCBFeGVjdXRpb25Db3VudGVy
PGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB0
aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQpOworICAgIHRocmVzaG9sZCA9IGNsaXBwZWRU
aHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAgICBtX2NvdW50ZXIgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHJldmlzaW9uIDI4MzA5NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9yY2VTbG93
UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRoaXMsIGNoZWNrSWZUaHJlc2hvbGRD
cm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxzZS4KICAgICBib29sIGNoZWNrSWZU
aHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwogICAgIGJvb2wgaGFzQ3Jvc3NlZFRo
cmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlciA+PSAwOyB9Ci0gICAgdm9pZCBzZXRO
ZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayopOworICAgIHZvaWQgc2V0
TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2RlQmxvY2sqID0gbnVsbHB0cik7CiAg
ICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwogICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENvdW50KSArIG1fY291bnRlcjsgfQog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpAQCAtODYsMTMgKzg2LDkgQEAgcHVi
bGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBU
IGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVCB0aHJlc2hv
bGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChUIHRocmVzaG9sZCkKICAgICB7Ci0g
ICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwotICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9t
aXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCkgJiYgZ2xvYmFsT2JqZWN0KQot
ICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2JqZWN0LT53ZWFrUmFuZG9tSW50ZWdl
cigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRz
QmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkID0gbWF4
aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwogICAgICAgICBpZiAodGhy
ZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAgICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNo
b2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEuaAkocmV2aXNpb24gMjgzMDk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhVW5z
ZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0KSA9PSAx
Mik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggeworICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBhcnJheVByb2ZpbGUpOyB9CiAgICAg
QXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRC
eUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsKQEAgLTg4LDYgKzg5LDcgQEAgdW5p
b24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRNb2RlIG1vZGU7CiAgICAg
ICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7IC8vIFRoaXMgbXVzdCBiZSB6ZXJv
IHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRh
ZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhRGVmYXVsdCBkZWZhdWx0TW9k
ZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5zZXRNb2RlOwogICAgIEdldEJ5SWRN
b2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1vZGU7CkBAIC0xMTcsNiArMTE5LDcg
QEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGEgewogICAgICAgICBHZXRCeUlkTW9kZU1ldGFk
YXRhUHJvdG9Mb2FkIHByb3RvTG9hZE1vZGU7CiAgICAgfTsKICAgICBHZXRCeUlkTW9kZSBtb2Rl
OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9CiAgICAgdWludDhfdCBoaXRDb3Vu
dEZvckxMSW50Q2FjaGluZzsKIH07CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgzMDk2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjE1LDcgKzIxNSw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9y
U3R1YkkKICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAg
ICAKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6IHsKLSAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgp
OworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZtKCkpOwogICAgICAgICBpZiAoc3RydWN0dXJl
LT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0
dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksIHN0dWJJbmZvKTsKICAg
ICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZp
ZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJB
Y2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2Fz
ZTo6ZW1pdERPTUpJVEcKIAogICAgIC8vIExldCdzIHN0b3JlIHRoZSByZXVzZWQgcmVnaXN0ZXJz
IHRvIHRoZSBzdGFjay4gQWZ0ZXIgdGhhdCwgd2UgY2FuIHVzZSBhbGxvY2F0ZWQgc2NyYXRjaCBy
ZWdpc3RlcnMuCiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBw
cmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQ
dXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNw
YWNlRm9yQ0NhbGwpOworICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNC
eVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6
U3BhY2VGb3JDQ2FsbCk7CiAKICAgICBpZiAoR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZUludGVybmFs
Ojp2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coImJhc2VHUFIgPSAiLCBiYXNlR1BSLCAiXG4i
KTsKQEAgLTIyNSwxMiArMjI1LDkgQEAgdm9pZCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0
RE9NSklURwogICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CiAgICAg
Zm9yIChGUFJSZWcgcmVnIDogZnBTY3JhdGNoKQogICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9y
Q0NhbGwuc2V0KHJlZyk7CisgICAgaWYgKGppdC5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisg
ICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQoc3R1YkluZm8ubV9zdHViSW5mb0dQ
Uik7CiAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJl
Z2lzdGVyc1RvTm90U2F2ZUZvckNDYWxsKCkpOwotI2lmIENQVShBUk02NCkKLSAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKLSAgICBpZiAoY29kZUJsb2NrLT51c2VE
YXRhSUMoKSkKLSAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChBUk02NFJlZ2lz
dGVyczo6bHIpOwotI2VuZGlmCiAKICAgICBBY2Nlc3NDYXNlU25pcHBldFBhcmFtcyBwYXJhbXMo
c3RhdGUubV92bSwgV1RGTW92ZShyZWdzKSwgV1RGTW92ZShncFNjcmF0Y2gpLCBXVEZNb3ZlKGZw
U2NyYXRjaCkpOwogICAgIHNuaXBwZXQtPmdlbmVyYXRvcigpLT5ydW4oaml0LCBwYXJhbXMpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAko
cmV2aXNpb24gMjgzMDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlT
dGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAgSW5CeVN0YXR1cyBJ
bkJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgogICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhO
b0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOiB7Ci0gICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRh
a2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4g
SW5CeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBp
ZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODMwOTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsMTYgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9v
bCBsaW5rQ29kZUlubGluZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5s
aW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVu
dGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VE
YXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4g
YnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAKICAgICBHUFJSZWcg
YmFzZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0yMzMsMjMgKzIzOCwzMSBAQCBBTFdBWVNfSU5M
SU5FIHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3RlCiAgICAgcmV0dXJuIGdldFNjcmF0Y2hSZWdp
c3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJlZzsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6
OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0
ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1Yklu
Zm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBp
ZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBp
ZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBy
ZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCitib29sIElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50
aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkpOworICAgIEFTU0VSVChjYW5HZW5l
cmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2Zmc2V0KSk7CisK
KyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBkeW5h
bWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxz
ZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIApAQCAtMjc5LDIyICsyOTIsMjUgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
U2VsZlByb3BlcnR5UgogICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCi1ib29sIElu
bGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJy
YXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgQVNTRVJUKGFycmF5LT5pbmRleGluZ1R5cGUoKSAm
IElzQXJyYXkpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFo
YXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBy
ZXR1cm4gIWhhc0FueUFycmF5U3RvcmFnZShhcnJheS0+aW5kZXhpbmdUeXBlKCkpICYmIGFycmF5
LT5pbmRleGluZ1R5cGUoKSAhPSBBcnJheUNsYXNzOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6
Z2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkq
IGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkp
CiB7Ci0gICAgQVNTRVJUKGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGFycmF5KSk7
CisgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoY29k
ZUJsb2NrLCBzdHViSW5mbywgYXJyYXkpKTsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3Rh
bnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTksMTcgKzMzNSwyMCBA
QCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTCiAgICAgcmV0dXJuIGxp
bmtlZENvZGVJbmxpbmU7CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmlu
Z0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitib29sIElubGluZUFjY2Vzczo6
aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRp
ZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAg
ICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK2Jv
b2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewotICAgIEFTU0VSVChpc0NhY2hlYWJs
ZVN0cmluZ0xlbmd0aChzdHViSW5mbykpOworICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBp
c0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKSk7CiAKICAgICBpZiAo
IXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMzYzLDEzICszODIsMTggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVu
Z3RoKAogfQogCiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorYm9vbCBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmll
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlD
KCkpIHsKKyAgICAgICAgLy8gVGhlc2UgZHluYW1pYyBzbG90cyBnZXQgZmlsbGVkIGluIGJ5IFN0
cnVjdHVyZVN0dWJJbmZvLiBOb3RoaW5nIGVsc2UgdG8gZG8uCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKwogICAgIEdQUlJlZyBiYXNlID0gc3R1YkluZm8uYmFzZUdQUjsKICAgICBKU1Zh
bHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVncygpOwogCkBAIC00MDYsMTMgKzQzMCwx
MyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgaWYgKGNv
ZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgLy8gSWYgaXQgaXMgbm90IEdldEJ5SWQt
bGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQgKGUuZy4gR2V0QnlWYWwpLgogICAg
ICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGlyZWN0IGp1bXAsIGFuZCBvbmx5IHRo
aW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2RlUHRyLgotICAgICAgICBpZiAoc3R1
YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmpp
dFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBzdHViSW5mby5oYXNDb25zdGFudElk
ZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29kZVB0ciBpcyBwb2ludGluZyB0byBz
dHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMgbWVhbnMgdGhhdCBJbmxpbmVBY2Nl
c3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAgICAgIC8vIFdlIHJld3JpdGUgdGhp
cyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNvZGUgb25jZSwgYW5kIGNvbnRpbnVl
IHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgogICAgICAgICAgICAgaWYgKHN0dWJJ
bmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09IHN0dWJJbmZvLnNsb3dQYXRoU3Rh
cnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CiAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1YkluZm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5h
bFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhl
bHBlcnMmIGppdCkgewogICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoJnN0dWJJbmZvKSwgc3R1YkluZm8ubV9zdHViSW5mb0dQUik7Ci0gICAg
ICAgICAgICAgICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5t
X3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRT
dHViUm91dGluZVB0clRhZyk7CisgICAgICAgICAgICAgICAgICAgIGppdC5mYXJKdW1wKENDYWxs
SGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgICAgICAg
ICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgICAgIGF1
dG8gZG9uZUxvY2F0aW9uID0gc3R1YkluZm8uZG9uZUxvY2F0aW9uOwogICAgICAgICAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soWz1dKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKQEAgLTQy
MSw3ICs0NDUsOSBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAg
ICAgICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nlc3M6IGxpbmtpbmcgc3R1YiBjYWxsIik7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSB0
YXJnZXQ7CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7
IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLgogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC00MzQsOCArNDYwLDE0IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHVi
QXNKdW1wSW5BY2MKICAgICB9KSwgIklubGluZUFjY2VzczogbGlua2luZyBjb25zdGFudCBqdW1w
Iik7CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2Rl
QmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIElubGluZUFjY2Vzczo6
cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKIHsKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSAmJiBj
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICBz
dHViSW5mby5tX2NvZGVQdHIgPSBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAg
ICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91
dCB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLgorICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
Q0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1YkluZm8uc3RhcnQucmV0YWdnZWQ8SlNJ
bnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+KFsmXShD
Q2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAvLyBXZSBkb24ndCBuZWVkIGEgbm9wIHNsZWQg
aGVyZSBiZWNhdXNlIG5vYm9keSBzaG91bGQgYmUganVtcGluZyBpbnRvIHRoZSBtaWRkbGUgb2Yg
YW4gSUMuCiAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCShyZXZpc2lvbiAyODMwOTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTk5LDE0ICs5OSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGQ6
Om1heChzaXplLCBzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1
Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgY2FuR2VuZXJhdGVTZWxm
UHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwgUHJvcGVydHlPZmZzZXQpOwotICAg
IHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5m
byYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMgYm9vbCBpc0NhY2hl
YWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRp
YyBib29sIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAg
c3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJy
YXkqKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHVi
SW5mbyYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU3RyaW5nTGVuZ3Ro
KFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVy
dHlBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9w
ZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHJvcGVydHlPZmZzZXQpOworICAg
IHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMg
Ym9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZv
JiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKENv
ZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVB
cnJheUxlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKKyAg
ICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU3RyaW5nTGVu
Z3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7CiAKICAgICBzdGF0aWMgdm9pZCBy
ZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2VzcyhDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
Pik7CiAgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJU
YWc+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2Rl
TWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsNyBAQCBPVkVSTE9BRF9CSVRXSVNFX09QRVJBVE9SU19GT1JfRU5VTV9D
TEFTCiAKIHN0cnVjdCBJdGVyYXRpb25Nb2RlTWV0YWRhdGEgewogICAgIHVpbnQ4X3Qgc2Vlbk1v
ZGVzIHsgMCB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTZWVuTW9kZXMoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSXRlcmF0aW9uTW9kZU1ldGFkYXRhLCBzZWVuTW9kZXMpOyB9
IAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHNlZW5Nb2RlcykpID09IHNpemVv
ZihJdGVyYXRpb25Nb2RlKSk7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgzMDk2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEFycmF5UHJv
ZmlsZSBtX2FycmF5UHJvZmlsZTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQ
cm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExMSW50Q2FsbExpbmtJbmZvLCBtX2Fy
cmF5UHJvZmlsZSk7IH0KIAogcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9jYWxsZWVPckxhc3RT
ZWVuQ2FsbGVlV2l0aExpbmtCaXQgeyB1bmxpbmtlZEJpdCB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2aXNpb24gMjgzMDk2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNiAr
MTU2LDE3IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXgKICAgICBt
YWNybyhPcEl0ZXJhdG9yT3BlbikgXAogICAgIG1hY3JvKE9wSXRlcmF0b3JOZXh0KSBcCiAKKyNk
ZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwK
KyAgICBtYWNybyhPcEFkZCkgXAorICAgIG1hY3JvKE9wTXVsKSBcCisgICAgbWFjcm8oT3BEaXYp
IFwKKyAgICBtYWNybyhPcFN1YikgXAorCisjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX1VO
QVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKKyAgICBtYWNybyhPcEluYykgXAorICAgIG1hY3Jv
KE9wRGVjKSBcCisgICAgbWFjcm8oT3BOZWdhdGUpIFwKKwogCiBJR05PUkVfV0FSTklOR1NfQkVH
SU4oInR5cGUtbGltaXRzIikKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODMwOTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpz
dWNjZWVkKCkKIHsKICAgICByZXN0b3JlU2NyYXRjaCgpOwogICAgIGlmIChqaXQtPmNvZGVCbG9j
aygpLT51c2VEYXRhSUMoKSkKLSAgICAgICAgaml0LT5yZXQoKTsKKyAgICAgICAgaml0LT5mYXJK
dW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mRG9uZUxvY2F0aW9uKCkpLCBKU0ludGVybmFsUHRyVGFnKTsK
ICAgICBlbHNlCiAgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKGppdC0+anVtcCgpKTsKIH0KQEAgLTEx
MCw2ICsxMTAsOCBAQCBjb25zdCBSZWdpc3RlclNldCYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0LT5j
b2RlQmxvY2soKS0+aml0VHlwZSgpKSk7CiAKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2Fs
bCA9IFJlZ2lzdGVyU2V0KG1fbGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRs
aW5nQ2FsbFNpdGUsIGFsbG9jYXRvci0+dXNlZFJlZ2lzdGVycygpKTsKKyAgICAgICAgaWYgKGpp
dC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQorICAgICAgICAgICAgbV9saXZlUmVnaXN0ZXJz
Rm9yQ2FsbC5hZGQoc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwogICAgICAgICBtX2xpdmVSZWdp
c3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICB9CiAgICAg
cmV0dXJuIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGw7CkBAIC0xMjgsMTEgKzEzMCwxMiBAQCBhdXRv
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2VydmVMaXZlCiAgICAgfTsKIH0KIAotYXV0byBB
Y2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
V2l0aG91dEV4Y2VwdGlvbnMoY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhKSAtPiBTcGlsbFN0YXRl
CithdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFj
a0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucygpIC0+IFNwaWxsU3RhdGUKIHsKICAgICBSZWdpc3Rl
clNldCBsaXZlUmVnaXN0ZXJzID0gYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJzKCk7CisgICAgaWYg
KGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQorICAgICAgICBsaXZlUmVnaXN0ZXJzLmFk
ZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7CiAgICAgbGl2ZVJlZ2lzdGVycy5leGNsdWRlKGNh
bGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgbGl2ZVJlZ2lzdGVycy5tZXJnZShleHRyYSk7CiAK
ICAgICBjb25zdGV4cHIgdW5zaWduZWQgZXh0cmFTdGFja1BhZGRpbmcgPSAwOwogICAgIHVuc2ln
bmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqaml0
LCBsaXZlUmVnaXN0ZXJzLCBleHRyYVN0YWNrUGFkZGluZyk7CkBAIC01OTYsMTYgKzU5OSwxMSBA
QCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzCiAgICAgQ0NhbGxIZWxw
ZXJzIGppdChjb2RlQmxvY2spOwogICAgIHN0YXRlLmppdCA9ICZqaXQ7CiAKLSAgICBpZiAoY29k
ZUJsb2NrLT51c2VEYXRhSUMoKSkgewotICAgICAgICBpZiAoc3RhdGUubV9kb2VzSlNHZXR0ZXJT
ZXR0ZXJDYWxscykgewotICAgICAgICAgICAgLy8gV2UgaGF2ZSBubyBndWFyYW50ZWUgdGhhdCBz
dGFjay1wb2ludGVyIGlzIHRoZSBleHBlY3RlZCBvbmUuIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBp
ZiB3ZSBkbyBub3QgaGF2ZSBKUyBnZXR0ZXIgLyBzZXR0ZXIgY2FsbHMgc2luY2Ugc3RhY2stcG9p
bnRlciBpcwotICAgICAgICAgICAgLy8gYSBjYWxsZWUtc2F2ZSByZWdpc3RlciBpbiB0aGUgQyBj
YWxsaW5nIGNvbnZlbnNpb24uIEhvd2V2ZXIsIG91ciBKUyBleGVjdXRhYmxlIGNhbGwgZG9lcyBu
b3Qgc2F2ZSBzdGFjay1wb2ludGVyLiBTbyB3ZSBhcmUgYWRqdXN0aW5nIHN0YWNrLXBvaW50ZXIg
YWZ0ZXIKLSAgICAgICAgICAgIC8vIEpTIGdldHRlciAvIHNldHRlciBjYWxscy4gQnV0IHRoaXMg
Y291bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlIGluaXRpYWwgc3RhY2stcG9pbnRlciwgYW5kIG1h
a2VzIFBBQyB0YWdnaW5nIGJyb2tlbi4KLSAgICAgICAgICAgIC8vIFRvIGVuc3VyZSBQQUMtdGFn
Z2luZyB3b3JrLCB3ZSBmaXJzdCBhZGp1c3Qgc3RhY2stcG9pbnRlciB0byB0aGUgYXBwcm9wcmlh
dGUgb25lLgotICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
Mihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKLSAgICAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBpZiAoIWNhbkJlU2hh
cmVkICYmIEFTU0VSVF9FTkFCTEVEKSB7CisgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgaml0LnNjcmF0Y2hSZWdpc3Rl
cigpKTsKKyAgICAgICAgYXV0byBvayA9IGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpFcXVh
bCwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgaml0LnNjcmF0Y2hSZWdpc3Rl
cigpKTsKKyAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgb2subGluaygmaml0KTsK
ICAgICB9CiAKICAgICBzdGF0ZS5wcmVzZXJ2ZWRSZXVzZWRSZWdpc3RlclN0YXRlID0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vz
cy5oCShyZXZpc2lvbiAyODMwOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0
cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjYWxj
dWxhdGVMaXZlUmVnaXN0ZXJzRm9yQ2FsbEFuZEV4Y2VwdGlvbkhhbmRsaW5nKCk7CiAKICAgICBT
cGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGNvbnN0IFJlZ2lz
dGVyU2V0JiBleHRyYSA9IHsgfSk7Ci0gICAgU3BpbGxTdGF0ZSBwcmVzZXJ2ZUxpdmVSZWdpc3Rl
cnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRy
YSA9IHsgfSk7CisgICAgU3BpbGxTdGF0ZSBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9y
Q2FsbFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAgICB2b2lkIHJlc3RvcmVMaXZlUmVnaXN0ZXJz
RnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRpb24oY29uc3QgU3BpbGxTdGF0ZSYpOwog
ICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKGNvbnN0IFNwaWxs
U3RhdGUmLCBjb25zdCBSZWdpc3RlclNldCYgZG9udFJlc3RvcmUgPSB7IH0pOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCShyZXZpc2lv
biAyODMwOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTAgKzE4MCwxMCBAQCBQdXRCeVN0YXR1cyBQdXRC
eVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRl
bnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCh1aWQp
OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAgICAgc3R1YkluZm8t
Pm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNl
KFdURk1vdmUoaWRlbnRpZmllciksIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1
cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBs
YWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0cnVjdHVyZSwgb2Zmc2V0KTsKICAgICAgICAgcmV0
dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAg
ICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMjgzMDk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAK
ICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkpJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNp
bmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTY1LDkgKzY2LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6aW5pdEdldEJ5SWRTZWxmKAogICAgIEFTU0VSVChoYXNDb25zdGFudElkZW50aWZpZXIp
OwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlwZTo6R2V0QnlJZFNlbGYpOwogICAg
IG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7Cisg
ICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2Nr
KTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9
IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEFycmF5TGVuZ3RoKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlcikKQEAgLTg3LDkgKzg4LDkgQEAgdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRSZXBsYQogICAgIEFTU0VSVChtX2NhY2hl
VHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KTsKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNo
ZVR5cGU6OlB1dEJ5SWRSZXBsYWNlKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwot
ICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgp
LmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBv
ZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJl
U3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxv
Y2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50
aWZpZXIpCkBAIC05Nyw5ICs5OCw5IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5
SWRTZWxmKGMKICAgICBBU1NFUlQobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCk7CiAg
ICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmKTsKICAgICBtX2lk
ZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlk
KCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0g
ICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZz
ZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRlcmVmKCkKQEAgLTIzNiw3ICsyMzcs
NyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgIC8v
IHdlJ3JlIGJ1ZmZlcmVkIGlzIGJlY2F1c2Ugd2UgcmVseSBvbiBpdCB0byByZXNldCBkdXJpbmcg
R0MgaWYgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlCiAgICAgICAgIC8vIGlzIGNvbGxlY3Rl
ZC4KICAgICAgICAgbV9pZGVudGlmaWVyID0gbnVsbHB0cjsKLSAgICAgICAgbV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSA9IDA7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBnZW5lcmF0ZWQgc29tZSBjb2Rl
IHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBhdHRlbXB0IHRvIHJlcGF0Y2ggaW4gdGhlIGZ1dHVyZSB1
bnRpbCB3ZQogICAgICAgICAvLyBnYXRoZXIgZW5vdWdoIGNhc2VzLgpAQCAtMjUxLDcgKzI1Miw3
IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKIHsKICAgICBjbGVh
ckJ1ZmZlcmVkU3RydWN0dXJlcygpOwogICAgIG1faWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAg
bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgbV9pbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlID0gMDsKIAogICAgIGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVu
c2V0KQogICAgICAgICByZXR1cm47CkBAIC0yODUsNiArMjg2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVT
dHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywg
KnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNz
VHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAg
ICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CkBAIC0zNjAsOCArMzYy
LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIH0KIAog
ICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0gICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSkKLSAgICAgICAgaXNWYWxpZCAmPSB2bS5oZWFwLmlzTWFya2VkKG1faW5saW5lQWNjZXNz
QmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpCisgICAgICAgIGlzVmFsaWQgJj0gdm0uaGVhcC5p
c01hcmtlZChzdHJ1Y3R1cmUpOwogICAgIGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0
dWIpCiAgICAgICAgIGlzVmFsaWQgJj0gdS5zdHViLT52aXNpdFdlYWsodm0pOwogCkBAIC0zNzUs
OCArMzc3LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogdGVt
cGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0
ZVRyYW5zaXRpb25zKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgaWYgKG1faW5saW5lQWNjZXNz
QmFzZVN0cnVjdHVyZSkKLSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5tYXJr
SWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpCisgICAgICAgIHN0cnVjdHVyZS0+bWFy
a0lmQ2hlYXAodmlzaXRvcik7CiAKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpT
dHViKQogICAgICAgICB1LnN0dWItPnByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwpAQCAt
NDMwLDYgKzQzMiwyMDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpz
ZQogICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVUeXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0
dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2Nr
KiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3sKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIGFjY2Vzc1R5cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5
cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0YXJ0OworICAgIGRvbmVMb2NhdGlv
biA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2Nh
dGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgIGNhbGxT
aXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5saW5rZWRTdHViSW5mby5i
eXRlY29kZUluZGV4Lm9mZnNldCgpKSk7CisgICAgY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5s
aW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBtX2NvZGVQdHIgPSBzbG93UGF0aFN0
YXJ0TG9jYXRpb247CisKKyAgICB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpOworICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6Okdl
dEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgewor
ICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0aGUgImRvbnRD
bG9iYmVyUmVnaXN0ZXIiIHJlZ2lzdGVyIGVpdGhlci4KKyAgICAgICAgdXNlZFJlZ2lzdGVycy5h
ZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyKTsKKyAgICB9
CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0
ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6
CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uSW5CeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5
cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0
aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBtX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09w
ZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIHN3aXRjaCAodW5s
aW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0
OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkK
KyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlu
a2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9w
dGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0
UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZh
bDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAg
Y2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5m
by5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RP
cHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVj
dDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkp
CisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9
IHVubGlua2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0
aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFs
U2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVC
eVZhbDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJh
c2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnBy
b3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAg
IHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBt
X3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgaGFz
Q29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVs
QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEludmFsaWRH
UFJSZWc7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1
bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50
SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNl
OworICAgICAgICBwcm90b3R5cGVJc0tub3duT2JqZWN0ID0gZmFsc2U7CisgICAgICAgIGJhc2VH
UFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICB2YWx1ZUdQ
UiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnBy
b3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgICAg
IG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2
YXRlQnJhbmQ6IAorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAg
ICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVn
cy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAg
ICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAg
IG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgaGFzQ29u
c3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOwor
ICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAg
ICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlk
OgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRo
aXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpH
ZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7Cisg
ICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsK
KyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVz
dWx0OworICAgICAgICByZWdzLnRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lz
dGVyczo6dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlk
V2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7
CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFz
ZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJh
c2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRl
TmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJh
c2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnBy
b3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAg
IHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1f
c3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAg
ICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBt
X2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAg
IGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50
SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICB2YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7Cisg
ICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFu
ZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJz
OjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0odW5saW5rZWRTdHViSW5mbyk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYK
K30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVja0Nv
bnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAyODMwOTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHV0S2lu
ZC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCkBAIC01Niw2ICs1Nyw3IEBAIGVudW0gY2xhc3MgQWNj
ZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlWYWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRC
eVZhbCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAg
ICBIYXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzgwLDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUg
OiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CkBAIC05OCw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZv
aWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAg
ICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBo
YXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVz
ZXRzIGl0c2VsZiwKQEAgLTMyNSwxMyArMzMxLDE5IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAg
ICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CisgICAgUHJvcGVydHlPZmZzZXQgYnlJZFNlbGZPZmZz
ZXQ7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBieUlkU2VsZk9mZnNldCk7IH0K
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgbV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlKTsgfQogICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgfSBieUlkU2VsZjsKICAgICAg
ICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAgICAgfSB1OwotICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIGlu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUp
OworICAgIH0KKyAgICBTdHJ1Y3R1cmVJRCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAw
IH07CiBwcml2YXRlOgogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAg
IC8vIFJlcHJlc2VudHMgdGhvc2Ugc3RydWN0dXJlcyB0aGF0IGFscmVhZHkgaGF2ZSBidWZmZXJl
ZCBBY2Nlc3NDYXNlcyBpbiB0aGUgUG9seW1vcnBoaWNBY2Nlc3MuCkBAIC0zNTIsNiArMzY0LDcg
QEAgcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRh
Zz4gbV9jb2RlUHRyOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVQdHIoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1fY29kZVB0cik7IH0K
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRG9uZUxvY2F0aW9uKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBkb25lTG9jYXRpb24pOyB9CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRoU3RhcnRMb2NhdGlvbigpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgc2xvd1BhdGhTdGFydExvY2F0aW9uKTsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBtX3Nsb3dPcGVyYXRpb24pOyB9CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvdW50ZG93bigpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgY291bnRkb3duKTsgfQpAQCAtNDQ3LDYgKzQ2MCwx
NyBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQog
CitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nl
c3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHBy
aXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkgfTsKKyAgICBF
Q01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpzbG9wcHkoKSB9OworICAgIEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElD
IGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3Ig
J2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQ
dHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVj
dHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVy
U2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N1cGVyU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4
NCw3IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJTdGF0ZSgpCiAgICAgZG91YmxlIHBlcmNlbnRh
Z2UgPSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsKICAgICBpZiAocGVyY2VudGFnZSAhPSBwZXJj
ZW50YWdlKQogICAgICAgICBwZXJjZW50YWdlID0gMC4wOwotICAgIGRhdGFMb2coIlBlcmNlbnQg
dGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiXG4iKTsKKyAg
ICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVy
Y2VudGFnZSwgIiVcbiIpOwogfQogCiB2b2lkIGVuYWJsZVN1cGVyU2FtcGxlcigpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
IAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJ
VENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKICNpbmNsdWRl
ICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKQEAgLTc4LDYgKzc5
LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgICAgICBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tlcik7CiAgICAgICAgIG1fcmFyZURhdGEtPm1f
cHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJpdmF0ZUJy
YW5kUmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAgfQorCisgICAgbV9sbGludEV4ZWN1dGVDb3Vu
dGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9y
SklUQWZ0ZXJXYXJtVXAoKSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpAQCAt
MzE2LDYgKzMxOSw0OCBAQCBpbnQgVW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZz
CiAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsK
IH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECitib29sIFVubGlua2VkQ29kZUJsb2NrOjpoYXNJZGVu
dGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgaWYgKG51bWJlck9mSWRlbnRp
ZmllcnMoKSA+IDEwMCkgeworICAgICAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpICE9IG1f
Y2FjaGVkSWRlbnRpZmllclVpZHMuc2l6ZSgpKSB7CisgICAgICAgICAgICBMb2NrZXIgbG9ja2Vy
KG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrKTsKKyAgICAgICAgICAgIEhhc2hTZXQ8VW5pcXVl
ZFN0cmluZ0ltcGwqPiBjYWNoZWRJZGVudGlmaWVyVWlkczsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSB0aGlzLT5pZGVudGlmaWVyKGkp
OworICAgICAgICAgICAgICAgIGNhY2hlZElkZW50aWZpZXJVaWRzLmFkZChpZGVudGlmaWVyLmlt
cGwoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgICAgICAgICBtX2NhY2hlZElkZW50aWZpZXJVaWRzID0gV1RGTW92ZShjYWNoZWRJ
ZGVudGlmaWVyVWlkcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9jYWNoZWRJZGVu
dGlmaWVyVWlkcy5jb250YWlucyh1aWQpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRp
ZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitpbnQzMl90IFVubGlua2VkQ29kZUJsb2Nr
Ojp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRP
cHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAg
cmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0
dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0
dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2Nh
dGVTaGFyZWRQcm9maWxlcygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWV0YWRhdGEtPmlz
RmluYWxpemVkKCkpOwpAQCAtMzM3LDE1ICszODIsMjUgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9j
azo6YWxsb2NhdGVTaGFyZWRQcgogICAgIGlmIChtX21ldGFkYXRhLT5oYXNNZXRhZGF0YSgpKSB7
CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJyYXlQcm9maWxlcyA9IDA7CiAKLSNkZWZpbmUg
Q09VTlQoX19vcCkgXAotICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0
YS0+bnVtRW50cmllczxfX29wPigpOworI2RlZmluZSBDT1VOVChfX29wKSBudW1iZXJPZkFycmF5
UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOwogICAgICAgICBGT1Jf
RUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENPVU5UKQogICAgICAgICBGT1JfRUFDSF9P
UENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhDT1VOVCkKICN1bmRlZiBDT1VOVAogICAg
ICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEl0
ZXJhdG9yTmV4dD4oKTsKICAgICAgICAgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRh
dGEtPm51bUVudHJpZXM8T3BHZXRCeUlkPigpOwotCiAgICAgICAgIG1fYXJyYXlQcm9maWxlcyA9
IEZpeGVkVmVjdG9yPFVubGlua2VkQXJyYXlQcm9maWxlPihudW1iZXJPZkFycmF5UHJvZmlsZXMp
OworCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQmluYXJ5QXJpdGhQcm9maWxlcyA9IDA7Cisj
ZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQmluYXJ5QXJpdGhQcm9maWxlcyArPSBtX21ldGFk
YXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CisgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0JJ
TkFSWV9BUklUSF9QUk9GSUxFKENPVU5UKQorI3VuZGVmIENPVU5UCisgICAgICAgIG1fYmluYXJ5
QXJpdGhQcm9maWxlcyA9IEZpeGVkVmVjdG9yPEJpbmFyeUFyaXRoUHJvZmlsZT4obnVtYmVyT2ZC
aW5hcnlBcml0aFByb2ZpbGVzKTsKKworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlVuYXJ5QXJp
dGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mVW5hcnlBcml0aFBy
b2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgRk9SX0VB
Q0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShDT1VOVCkKKyN1bmRlZiBDT1VOVAor
ICAgICAgICBtX3VuYXJ5QXJpdGhQcm9maWxlcyA9IEZpeGVkVmVjdG9yPFVuYXJ5QXJpdGhQcm9m
aWxlPihudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyk7CiAgICAgfQogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAko
cmV2aXNpb24gMjgzMDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxMiBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5UHJv
ZmlsZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDb2Rl
VHlwZS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCisjaW5jbHVkZSAiRXhlY3V0aW9u
Q291bnRlci5oIgogI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5nZUluZm8uaCIKICNpbmNsdWRlICJI
YW5kbGVySW5mby5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKQEAgLTY0LDYgKzY2LDcgQEAg
Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
cjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIHN0cnVjdCBFeGVjdXRhYmxl
SW5mbzsKIGVudW0gY2xhc3MgTGlua1RpbWVDb25zdGFudCA6IGludDMyX3Q7CiAKQEAgLTE3NSw2
ICsxNzgsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8
VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3Rl
cnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1ty
ZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25z
dGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdp
c3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0
YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBjb25zdCBG
aXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbjsgfQogCkBAIC0yMDcsNiArMjExLDE1IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlw
dE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2VyU2Ny
aXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
IGluc3RydWN0aW9ucygpIGNvbnN0OworICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
bkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLmF0
KGluZGV4KS5wdHIoKTsgfQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0
aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgICAgIGNvbnN0IGF1
dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24q
PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24gPj0g
aW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNFbmQpOworICAg
ICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CisgICAg
dW5zaWduZWQgaW5zdHJ1Y3Rpb25zU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygp
LnNpemUoKTsgfQogCiAgICAgdW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1
cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1WYXJzOyB9CkBAIC0zMzQsMTAgKzM0NywyMSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpOwogICAgIH0KIAorICAgIGJvb2wgbG9v
cEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAg
Ly8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29w
cyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFpc0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0K
ICAgICB2b2lkIGFsbG9jYXRlU2hhcmVkUHJvZmlsZXMoKTsKICAgICBVbmxpbmtlZFZhbHVlUHJv
ZmlsZSYgdW5saW5rZWRWYWx1ZVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFs
dWVQcm9maWxlc1tpbmRleF07IH0KICAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSYgdW5saW5rZWRB
cnJheVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlc1tpbmRl
eF07IH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgYm9vbCBoYXNJZGVudGlmaWVyKFVuaXF1
ZWRTdHJpbmdJbXBsKik7CisjZW5kaWYKKworICAgIGludDMyX3QgdGhyZXNob2xkRm9ySklUKGlu
dDMyX3QgdGhyZXNob2xkKTsKKwogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZN
JiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0
PENvZGVHZW5lcmF0aW9uTW9kZT4pOwogCkBAIC0zOTcsNiArNDIxLDkgQEAgcHJpdmF0ZToKICAg
ICB1bnNpZ25lZCBtX2xleGljYWxTY29wZUZlYXR1cmVzIDogNDsKIHB1YmxpYzoKICAgICBDb25j
dXJyZW50SlNMb2NrIG1fbG9jazsKKyNpZiBFTkFCTEUoSklUKQorICAgIFJlZlB0cjxCYXNlbGlu
ZUpJVENvZGU+IG1fdW5saW5rZWRCYXNlbGluZUNvZGU7CisjZW5kaWYKIHByaXZhdGU6CiAgICAg
Q29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFy
c2VNb2RlOwpAQCAtNDEzLDcgKzQ0MCw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCi0KICNpZiBFTkFCTEUoREZH
X0pJVCkKICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CiAjZW5kaWYKQEAgLTQ1
OCw2ICs0ODQsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1
bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5l
SnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCisgICAgeworICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0
dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIH0KKworICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJu
IG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFy
eUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tp
XTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVy
KCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOyB9CiAKIHByaXZhdGU6CiAgICAgdXNp
bmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZz
ZXQsIGludD47CkBAIC00NjUsOCArNTAxLDE2IEBAIHByaXZhdGU6CiAgICAgT3V0T2ZMaW5lSnVt
cFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFy
ZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4ZWRWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4g
bV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4
ZWN1dGVDb3VudGVyOwogICAgIEZpeGVkVmVjdG9yPFVubGlua2VkVmFsdWVQcm9maWxlPiBtX3Zh
bHVlUHJvZmlsZXM7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+IG1fYXJy
YXlQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5
QXJpdGhQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4gbV91bmFy
eUFyaXRoUHJvZmlsZXM7CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIExvY2sgbV9jYWNoZWRJ
ZGVudGlmaWVyVWlkc0xvY2s7CisgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IG1fY2Fj
aGVkSWRlbnRpZmllclVpZHM7CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIERFQ0xBUkVfVklT
SVRfQ0hJTERSRU47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZpc2lvbiAyODMwOTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDYgKzY0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxlKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZzZXRJbk1ldGFkYXRhVGFibGUoY29u
c3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9pc0ZpbmFsaXplZCk7
CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9IG1faXMzMkJpdCA/IG9mZnNldFRh
YmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9wY29k
ZUlEXTsKKyAgICAgICAgYmFzZVR5cGVPZmZzZXQgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdu
b2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSksIGJhc2VUeXBlT2Zmc2V0KTsKKyAgICAgICAg
cmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKHR5cGVuYW1lIE9wY29kZTo6TWV0YWRhdGEp
ICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Qnl0ZWNvZGU+CiAgICAgdW5zaWduZWQgbnVtRW50cmllcygpOwogCkBAIC0xMDcsNiArMTE2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQog
CisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0g
dWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVBy
b2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTMgKzQ1LDExIEBA
IHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMg
LSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMg
PSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAgICBW
YWx1ZVByb2ZpbGVCYXNlKCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQotICAgICAgICAgICAgbV9idWNrZXRzW2ldID0g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgIGNsZWFyQnVja2V0cygpOwogICAg
IH0KICAgICAKICAgICBFbmNvZGVkSlNWYWx1ZSogc3BlY0ZhaWxCdWNrZXQodW5zaWduZWQgaSkK
QEAgLTU5LDYgKzU3LDEyIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgQVNT
RVJUKG51bWJlck9mQnVja2V0cyArIGkgPCB0b3RhbE51bWJlck9mQnVja2V0cyk7CiAgICAgICAg
IHJldHVybiBtX2J1Y2tldHMgKyBudW1iZXJPZkJ1Y2tldHMgKyBpOwogICAgIH0KKworICAgIHZv
aWQgY2xlYXJCdWNrZXRzKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQorICAgICAgICAgICAgbV9idWNrZXRzW2ldID0g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgfQogICAgIAogICAgIGNvbnN0IENsYXNz
SW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tldCkgY29uc3QKICAgICB7CkBAIC0xMjMsOCAr
MTI3LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUu
IE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1
dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkBAIC0xMzksNyArMTQx
LDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICAKICAgICAgICAgcmV0dXJu
IG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAgICBFbmNvZGVkSlNWYWx1ZSBtX2J1Y2tl
dHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0
aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE2MSw2ICsxNjMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxl
V2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFs
dWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPiB7CiAgICAgVmFsdWVQcm9maWxlKCkg
OiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+KCkgeyB9CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQogfTsKIAogc3RydWN0IFZhbHVlUHJvZmls
ZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDI4MzA5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkJh
c2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgpAQCAtMzQs
NyArMzUsOSBAQAogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgogI2luY2x1ZGUgIkRG
R09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCisjaW5jbHVkZSAi
SklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSlNDYXN0LmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmln
aW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiUmVj
b3JkZWRTdGF0dXNlcy5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KQEAgLTcwLDcgKzczLDcgQEAg
c3RydWN0IFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uIHsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxs
PiBtX3RvOwogfTsKICAgICAgICAgCi1jbGFzcyBDb21tb25EYXRhIHsKK2NsYXNzIENvbW1vbkRh
dGEgOiBwdWJsaWMgTWF0aElDSG9sZGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21t
b25EYXRhKTsKIHB1YmxpYzoKICAgICBDb21tb25EYXRhKCkKQEAgLTExNiw2ICsxMTksNyBAQCBw
dWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PiBt
X3dhdGNocG9pbnRzOwogICAgIEZpeGVkVmVjdG9yPEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dD4gbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzOwogICAgIEZpeGVkVmVjdG9yPEFkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gbV9hZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnRzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdp
bk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKICAgICBSZWNvcmRlZFN0YXR1c2VzIHJlY29yZGVk
U3RhdHVzZXM7CiAgICAgVmVjdG9yPEp1bXBSZXBsYWNlbWVudD4gbV9qdW1wUmVwbGFjZW1lbnRz
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCShy
ZXZpc2lvbiAyODMwOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKKyNpbmNsdWRlICJKdW1w
VGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2aXNpb24gMjgzMDk2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDYgKzQyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOwog
CitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKwogbmFt
ZXNwYWNlIERGRyB7CiAKIGNsYXNzIEpJVENvbXBpbGVyOwpAQCAtMTAxLDYgKzEwNCw4IEBAIHB1
YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sqLCB2
b2lkKiBwYykgZmluYWw7CiAKICAgICB1c2luZyBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29k
ZVJlZkZvckRGRzsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgp
IG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CiAg
ICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxsb3cgSklU
Q29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCkuCkBAIC0xMTAsNiArMTE1LDggQEAgcHVibGlj
OgogICAgIEZpeGVkVmVjdG9yPERGRzo6T1NSRW50cnlEYXRhPiBtX29zckVudHJ5OwogICAgIEZp
eGVkVmVjdG9yPERGRzo6T1NSRXhpdD4gbV9vc3JFeGl0OwogICAgIEZpeGVkVmVjdG9yPERGRzo6
U3BlY3VsYXRpb25SZWNvdmVyeT4gbV9zcGVjdWxhdGlvblJlY292ZXJ5OworICAgIEZpeGVkVmVj
dG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZpeGVkVmVjdG9y
PFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwogICAgIERGRzo6VmFy
aWFibGVFdmVudFN0cmVhbSB2YXJpYWJsZUV2ZW50U3RyZWFtOwogICAgIERGRzo6TWluaWZpZWRH
cmFwaCBtaW5pZmllZERGRzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsMTMgKzE4
NSwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgCiAg
ICAgbV9ncmFwaC5yZWdpc3RlckZyb3plblZhbHVlcygpOwogCi0gICAgaWYgKCFtX2dyYXBoLm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkgfHwgIW1fZ3JhcGgubV9zd2l0Y2hKdW1w
VGFibGVzLmlzRW1wdHkoKSkgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1f
Y29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1
bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zd2l0Y2hK
dW1wVGFibGVzKTsKLSAgICB9CisgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zd2l0Y2hKdW1w
VGFibGVzLmlzRW1wdHkoKSk7CisgICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlcy5pc0VtcHR5KCkpIAorICAgICAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRh
YmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAgIGlm
ICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQorICAgICAgICBtX2ppdENv
ZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJs
ZXMpOwogCiAgICAgZm9yIChCYWc8U3dpdGNoRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBo
Lm1fc3dpdGNoRGF0YS5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewogICAgICAgICBTd2l0Y2hE
YXRhJiBkYXRhID0gKippdGVyOwpAQCAtMTk5LDEyICsxOTgsMTIgQEAgdm9pZCBKSVRDb21waWxl
cjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBjYXNlIFN3aXRjaENoYXI6CiAgICAg
ICAgIGNhc2UgU3dpdGNoSW1tOiB7CiAgICAgICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRh
YmxlKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFi
bGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIEFT
U0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhd
LmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV9ncmFwaC51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgp
OwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNp
bXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxl
c1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlE
ZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVh
ZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCkgPT0gdW5saW5rZWRUYWJsZS5t
X2JyYW5jaE9mZnNldHMuc2l6ZSgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGxp
bmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCk7IGotLTspCkBAIC0yMTksMTIgKzIxOCwxMiBA
QCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAKICAgICAgICAgY2Fz
ZSBTd2l0Y2hTdHJpbmc6IHsKICAgICAgICAgICAgIGlmICghZGF0YS5kaWRVc2VKdW1wVGFibGUp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAg
QVNTRVJUKG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFi
bGVJbmRleF0uaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dp
dGNoVGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxl
ID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5k
ZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1faml0Q29k
ZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF07CiAgICAg
ICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQ
dHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0pOwogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKSA9
PSB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUuc2l6ZSgpICsgMSk7CiAgICAgICAgICAgICBm
b3IgKGF1dG8mIGVudHJ5IDogbGlua2VkVGFibGUubV9jdGlPZmZzZXRzKQpAQCAtMzMzLDcgKzMz
Miw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICB9CiAK
ICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCi0g
ICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBDVG9D
b2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgbGlua0J1
ZmZlcikpOworICAgICAgICBtX2ppdENvZGUtPmNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwID0g
bWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFw
QnVpbGRlciksIGxpbmtCdWZmZXIpOwogfQogCiBzdGF0aWMgdm9pZCBlbWl0U3RhY2tPdmVyZmxv
d0NoZWNrKEpJVENvbXBpbGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc3RhY2tP
dmVyZmxvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3Bw
CShyZXZpc2lvbiAyODMwOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNiBAQCB2b2lkKiBwcmVwYXJlT1NS
RW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqCiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUo
KSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENv
ZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+
aXNTdGlsbFZhbGlkKTsKIAogICAgIGlmICghT3B0aW9uczo6dXNlT1NSRW50cnlUb0RGRygpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAy
ODMwOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NzIsOSArNzcyLDYgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChD
Q2FsbEhlbHBlcnMmIAogICAgIC8vIFRoZSB0YWcgcmVnaXN0ZXJzIGFyZSBuZWVkZWQgdG8gbWF0
ZXJpYWxpemUgcmVjb3ZlcmllcyBiZWxvdy4KICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hl
Y2tSZWdpc3RlcnMoKTsKIAotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAg
ICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0u
dG9wRW50cnlGcmFtZSk7Ci0KICAgICBpZiAoaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNr
cG9pbnQpIHsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsg
b3BlcmFuZHMudG1wSW5kZXgoMCk7CiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlw
ZShvcGVyYXRpb25NYXRlcmlhbGl6ZU9TUkV4aXRTaWRlU3RhdGUpPigmdm0sICZleGl0LCB0bXBT
Y3JhdGNoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRl
ICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUg
IkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIKQEAgLTExOSwxMCArMTIwLDEwIEBA
IHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxsSGVscGUKICAgICBpbnQzMl90IGNs
aXBwZWRWYWx1ZTsKICAgICBzd2l0Y2ggKGppdC5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CiAg
ICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChqaXQuY29kZUJsb2NrKCktPmdsb2Jh
bE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgotICAgICAgICBjbGlwcGVkVmFsdWUg
PSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxv
Y2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVl
ID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkBAIC0xNDIsMTEgKzE0Myw4IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clQKIHsKICAgICBjYWxsZXJJc0xMSW50ID0gT3B0aW9uczo6Zm9y
Y2VPU1JFeGl0VG9MTEludCgpIHx8IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5qaXRUeXBl
KCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKIAotICAgIGlmIChjYWxsQnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkpIHsKLSAgICAgICAgaWYgKCFjYWxsZXJJc0xMSW50KQotICAgICAg
ICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1faGFzTGlua2VkT1NSRXhpdCA9IHRy
dWU7CisgICAgaWYgKGNhbGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKICAgICAgICAgcmV0
dXJuIExMSW50OjpjaGVja3BvaW50T1NSRXhpdEZyb21JbmxpbmVkQ2FsbFRyYW1wb2xpbmVUaHVu
aygpLmNvZGUoKTsKLSAgICB9CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4ganVtcFRhcmdldDsKIApAQCAtMTk4LDggKzE5Niw2IEBAIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clQKICN1bmRlZiBMTElOVF9SRVRVUk5fTE9DQVRJT04KIAog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tX2hhc0xp
bmtlZE9TUkV4aXQgPSB0cnVlOwotCiAgICAgICAgIHN3aXRjaCAodHJ1ZUNhbGxlckNhbGxLaW5k
KSB7CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsOgogICAgICAgICBjYXNlIElu
bGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OgpAQCAtMzEzLDYgKzMwOSwxMCBAQCB2b2lkIHJlaWZ5
SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVl
Q2FsbGVyKTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxl
ZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdp
c3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpKTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmluc3Ry
dWN0aW9uc1Jhd1BvaW50ZXIoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFz
ZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAodHJ1ZUNhbGxlcikgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7Cisg
ICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2Vs
aW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChp
bmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBKSVQ6OnNfbWV0YWRhdGFHUFIpKTsK
KyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFz
ZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkpLCBjYWxs
ZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBKSVQ6OnNfY29u
c3RhbnRzR1BSKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+
aXNWYXJhcmdzKCkpCkBAIC00MDQsNyArNDA0LDggQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJn
ZXQoVk0mIHZtLCBDQ2FsbAogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOwog
ICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4o
KS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvZGVCbG9ja0Zv
ckV4aXQtPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CisgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkp
LCBKSVQ6OnNfbWV0YWRhdGFHUFIpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVKSVRDb25zdGFudFBvb2woKSks
IEpJVDo6c19jb25zdGFudHNHUFIpOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4
ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRpb247CkBAIC00MjAsMTIgKzQyMSwx
NiBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGp1
bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CiAgICAgfQogCi0gICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAq
IHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlI
ZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25I
YW5kbGVyKCkpIHsKKyAgICAgICAgQVNTRVJUKCFSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVn
aXN0ZXJzKCkuY29udGFpbnMoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpKTsKKyAgICAgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5
RnJhbWUsIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihMTEludDo6UmVnaXN0ZXJz
OjpwY0dQUikpOworCiAgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGp1bXBpbmcgdG8gb3BfY2F0Y2gs
IHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgogICAgICAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZtLmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNo
KCkpOwogICAgIH0KLSAgICAKKworICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrRm9yRXhpdCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5SGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCiAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0
LmZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODMwOTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklu
bGluZXMuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xv
d1BhdGhzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5o
IgpAQCAtMjg2OSw3ICsyODcwLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkZpbmRTdwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOwotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2st
PnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5kZmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IEFTU0VSVCh2YWx1ZS5pc0RvdWJsZSgpKTsKICAgICBkb3VibGUgYXNEb3VibGUgPSB2YWx1ZS5h
c0RvdWJsZSgpOwpAQCAtMjg5MCw3ICsyODkxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblN3aXRjaAogCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBu
dWxscHRyKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKICAgICByZXR1cm4gbGlua2VkVGFibGUuY3RpRm9yVmFsdWUoKnVubGlua2Vk
VGFibGUsIHN0ckltcGwpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczMCw2ICs3MzAsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBz
aHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlVGFnR1BSLCBj
YWxsZWVQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51
bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9
IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0g
bV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKIAogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAgICAgICAgICAg
IEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwpA
QCAtODg5LDcgKzg5MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1Rh
aWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9q
aXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0
YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1
ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDI4MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyOCw2ICs4MjgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxs
ZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVHUFIsIERhdGFGb3JtYXRKUyk7CiAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAg
ICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAg
ICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1Q
YXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIGFyZ0Vk
Z2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTk3OSw3ICs5
ODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewot
ICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1f
aml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpO
bywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxG
YXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1l
U2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNp
b24gMjgzMDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5ODUsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmEKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
ID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2lu
LCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAg
IG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRl
LCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNW
YWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VHUFIpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHko
cHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAKQEAgLTQ5MDUsNyAr
NDkwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVC
bG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5
QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRBZGRJ
QyogYWRkSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsK
KyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRBZGRJ
Qyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
VmFsdWVBZGRPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJh
dGlvblZhbHVlQWRkOwogICAgIApAQCAtNDk4OSw3ICs0OTg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5vZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNl
bWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmNvZGVCbG9j
aygpLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1f
aml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0
byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplOwogICAgIGF1
dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWI7CiAKQEAgLTU1NzEs
NyArNTU3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU5lZ2F0ZSgKICAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNv
ZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAg
VW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT51bmFy
eUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUTmVn
SUMqIG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7
CisgICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUTmVn
SUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlv
bkFyaXRoTmVnYXRlT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBv
cGVyYXRpb25Bcml0aE5lZ2F0ZTsKICAgICBjb21waWxlTWF0aElDKG5vZGUsIG5lZ0lDLCByZXBh
dGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CkBAIC01ODE1LDcgKzU4MTUs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVNdWwoTm9kCiAgICAgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5k
ZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRo
UHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUTXVsSUMqIG11
bElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAg
SklUTXVsSUMqIG11bElDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUTXVsSUMoYXJp
dGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVl
TXVsT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25W
YWx1ZU11bDsKIApAQCAtMTQ3NzAsNyArMTQ3NzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTG9nU2hhZG93Q2hpCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywg
bm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBzY29wZVJlZyA9IHNjb3BlLmdwcigpOwogCi0g
ICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlz
UmVncywgc2NvcGVSZWcsIG1faml0LmNvZGVCbG9jaygpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBt
X2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdz
LCBzY29wZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygp
KSwgY2FsbFNpdGVJbmRleCk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjgzMDk2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6
UmUKIAogICAgIGlmICh2bS5zaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpIHsK
ICAgICAgICAgQjM6OlBDVG9PcmlnaW5NYXAgb3JpZ2luTWFwID0gc3RhdGUucHJvYy0+cmVsZWFz
ZVBDVG9PcmlnaW5NYXAoKTsKLSAgICAgICAgY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1h
cChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIo
dm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZm
ZXIpKTsKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+Y29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAg
PSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIo
dm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZm
ZXIpOwogICAgIH0KIAogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGxhYmVs
ID0gc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mPEpTRW50cnlQ
dHJUYWc+KHN0YXRlLnByb2MtPmNvZGUoKS5lbnRyeXBvaW50TGFiZWwoMCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJldmlzaW9uIDI4MzA5NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OCw2ICs2OCw4IEBAIHB1YmxpYzoKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpIG92
ZXJyaWRlOwogICAgIHN0YXRpYyBwdHJkaWZmX3QgY29tbW9uRGF0YU9mZnNldCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKSVRDb2RlLCBjb21tb24pOyB9CiAgICAgdm9pZCBzaHJpbmtUb0Zp
dChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKSBvdmVycmlkZTsKKworICAgIFBDVG9Db2RlT3Jp
Z2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3Bj
VG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhIGNvbW1v
bjsKICAgICBWZWN0b3I8T1NSRXhpdD4gbV9vc3JFeGl0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAyODMwOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxNCArNTIsNiBAQCB2
b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogCiAgICAgZ3JhcGgucmVnaXN0ZXJGcm96ZW5WYWx1ZXMo
KTsKIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+
ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkp
OwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0
Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7Ci0gICAgfQotI2VuZGlmCi0KICAgICAvLyBDcmVhdGUg
dGhlIGVudHJ5cG9pbnQuIE5vdGUgdGhhdCB3ZSB1c2UgdGhpcyBlbnRyeXBvaW50IHRvdGFsbHkg
ZGlmZmVyZW50bHkKICAgICAvLyBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSdyZSBkb2luZyBPU1Ig
ZW50cnkgb3Igbm90LgogICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9u
IDI4MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsNyBAQAogI2luY2x1ZGUgIkpTU2V0SXRlcmF0
b3IuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5l
cy5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiUHJvYmVDb250
ZXh0LmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmgiCkBAIC0yMzIwLDYgKzIzMjEsMTggQEAgcHJpdmF0ZToKICAgICAgICAg
Y29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVwYXRj
aGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwogICAgIH0KIAorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBl
PgorICAgIHN0YXRpYyBKSVRBZGRJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29tbW9u
LCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRBZGRJ
Qyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRN
dWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVE11bElDKiBhZGRNYXRo
SUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkg
eyByZXR1cm4gY29tbW9uLmFkZEpJVE11bElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAg
ICBzdGF0aWMgSklUTmVnSUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgVW5h
cnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVROZWdJQyhwcm9m
aWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5l
cmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVFN1YklDKiBhZGRNYXRoSUMoREZH
OjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1
cm4gY29tbW9uLmFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisKICAgICB2b2lkIGNvbXBpbGVWYWx1
ZU11bCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwpAQCAtMjM5MSw3ICsyNDA0
LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVy
YXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25T
dGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRv
cj4qIG1hdGhJQyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQ
cm9maWxlKTsKKyAgICAgICAgICAgICAgICBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRo
SUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0aFBy
b2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3Io
SlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigp
KSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CiAKICAgICAgICAgICAgICAgICBib29sIHNob3VsZEVt
aXRQcm9maWxpbmcgPSBmYWxzZTsKQEAgLTI1MDAsNyArMjUxMyw3IEBAIHByaXZhdGU6CiAjZW5k
aWYKIAogICAgICAgICAgICAgICAgIEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+OjpjcmVhdGUoKTsKLSAg
ICAgICAgICAgICAgICBKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNv
ZGVCbG9jaygpLT5hZGRNYXRoSUM8R2VuZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAgICAg
ICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8R2Vu
ZXJhdG9yPihzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAgICAgICAg
ICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0
T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwKICAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJdLmdw
cigpKSwgcGFyYW1zLmZwU2NyYXRjaCgwKSwKICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmZw
U2NyYXRjaCgxKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CkBAIC00MzE3LDcgKzQzMzAsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogSW52YWxpZEdQUlJl
ZzsKIAogICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0
b3I+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpG
VExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0
QnlWYWwsCisgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQs
IG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0
ZU5hbWUsCiAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdz
KHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwogCiAgICAgICAgICAgICBn
ZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwpAQCAtMTAyODUs
NiArMTAyOTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxsb2NhdGVkQXJnczsgKytpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQoVmFsdWVSZWNvdmVyeTo6Y29u
c3RhbnQoanNVbmRlZmluZWQoKSkpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5u
dW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZs
ZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwog
ICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMo
aml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxs
TGlua0luZm8oc2VtYW50aWNOb2RlT3JpZ2luKTsKQEAgLTEwNDQzLDEzICsxMDQ1NywxNCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChwYXJh
bXNbMSArIGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgpKTsKIAogICAgICAgICAgICAgICAgIHNodWZm
bGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1BcmdzOworICAgICAgICAgICAgICAgIHNodWZmbGVE
YXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNh
dmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKIAogICAgICAgICAgICAgICAgIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oY29k
ZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExp
bmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgYXV0
byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJ
bmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBb
Jl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRU
YWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAg
ICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAg
ICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnBy
ZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA3OTIsNyArMTA4
MDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAg
ICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVn
VDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAg
ICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZh
c3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBA
IC0xMTA3Myw3ICsxMTA4OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0
LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6
Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+
ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAg
ICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENv
bXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEzLDI4
ICs0MTMsMTYgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAogCiAg
ICAgUmVnaXN0ZXJTZXQgYWxsRlRMQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6ZnRsQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpOwogICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBiYXNlbGlu
ZUNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsK
LSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogdm1DYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2
bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKLSAgICBSZWdpc3RlclNldCB2bUNhbGxlZVNh
dmVzVG9Ta2lwID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgaWYgKGV4aXQu
aXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgaml0LmxvYWRQdHIoJnZtLnRvcEVudHJ5
RnJhbWUsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0
KCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgfQogCiAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpm
aXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKICAgICAgICAg
aWYgKCFhbGxGVExDYWxsZWVTYXZlcy5nZXQocmVnKSkgewotICAgICAgICAgICAgaWYgKGV4aXQu
aXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZt
Q2FsbGVlU2F2ZXMtPmZpbmQocmVnKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogICAgICAgICB1bnNpZ25lZCB1bndpbmRJbmRleCA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpLT5pbmRleE9mKHJlZyk7CiAgICAgICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQq
IGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPSBiYXNlbGluZUNhbGxlZVNhdmVzLT5maW5kKHJlZyk7
Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIHZtQ2FsbGVlU2F2ZSA9IG51bGxwdHI7IAotICAg
ICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgICAgIHZtQ2FsbGVl
U2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKTsKIAogICAgICAgICBpZiAocmVnLmlzR1BS
KCkpIHsKICAgICAgICAgICAgIEdQUlJlZyByZWdUb0xvYWQgPSBiYXNlbGluZVJlZ2lzdGVyT2Zm
c2V0ID8gR1BSSW5mbzo6cmVnVDAgOiByZWcuZ3ByKCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZWdUb0xvYWQgIT0gR1BSSW5mbzo6cmVnVDEpOwogCiAgICAgICAgICAgICBpZiAodW53
aW5kSW5kZXggPT0gVUlOVF9NQVgpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgRlRMIGNvbXBp
bGF0aW9uIGRpZG4ndCBwcmVzZXJ2ZSB0aGlzIHJlZ2lzdGVyLiBUaGlzIG1lYW5zIHRoYXQgaXQg
YWxzbwpAQCAtNDUyLDggKzQ0MCw2IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwg
dW5zaWduZWQKIAogICAgICAgICAgICAgaWYgKGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpCiAgICAg
ICAgICAgICAgICAgaml0LnN0b3JlNjQocmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0ZXJP
ZmZzZXQtPm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAodm1DYWxsZWVTYXZlICYmICF2bUNh
bGxlZVNhdmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNhdmUtPnJlZygpKSkKLSAgICAgICAgICAgICAg
ICBqaXQuc3RvcmU2NChyZWdUb0xvYWQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBGUFJSZWcgZnBSZWdUb0xvYWQgPSBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8gRlBS
SW5mbzo6ZnBSZWdUMCA6IHJlZy5mcHIoKTsKIApAQCAtNDY0LDE5ICs0NTAsOSBAQCBzdGF0aWMg
dm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkCiAKICAgICAgICAgICAgIGlmIChiYXNl
bGluZVJlZ2lzdGVyT2Zmc2V0KQogICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShmcFJl
Z1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9p
bnRlclJlZ2lzdGVyLCBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0LT5vZmZzZXQoKSkpOwotICAgICAg
ICAgICAgaWYgKHZtQ2FsbGVlU2F2ZSAmJiAhdm1DYWxsZWVTYXZlc1RvU2tpcC5nZXQodm1DYWxs
ZWVTYXZlLT5yZWcoKSkpCi0gICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKGZwUmVnVG9M
b2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZl
LT5vZmZzZXQoKSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGV4aXQuaXNFeGNlcHRp
b25IYW5kbGVyKCkpIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCogdm1DYWxsZWVTYXZlID0g
dm1DYWxsZWVTYXZlcy0+ZmluZChHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7Ci0gICAgICAg
IGppdC5zdG9yZTY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwotCi0gICAg
ICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZpbmQoR1BSSW5mbzo6bm90Q2VsbE1h
c2tSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om5vdENlbGxNYXNrUmVn
aXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNh
dmUtPm9mZnNldCgpKSk7Ci0gICAgfQotCiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lz
dGVyc0ZvckNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFz
VmlydHVhbFJlZ2lzdGVycygpOwogCiAgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0
YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjgzMDk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpAQCAt
NDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkKICAgICAg
ICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwg
ZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZp
ZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVzLm1hcCBkbyB8ZmllbGROYW1lfAorICAg
ICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5h
bWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLi0xXX0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAgICAgICAgICAgIGVuZC5qb2luKCJc
biIpCisgICAgICAgIGVuZAorCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmll
bGRzLCBmaWVsZE5hbWVzKQogICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8
CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAgICAgICAgICAgICAg
ICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0
eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24g
e1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywgdHlwZSwgZmllbGROYW1lcyl9XG4j
e3ByZWZpeH19OyIKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIj
e3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAg
ICAgZmllbGROYW1lID0gZmllbGQudG9fcworICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWVz
LnB1c2goZmllbGROYW1lKQorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRv
X3N9IG1fI3tmaWVsZE5hbWV9OyIKICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgIGVu
ZC5qb2luKCJcbiIpCiAgICAgICAgIGVuZAogCi0gICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVs
ZHMoIiAgICAgICAgIiwgQGZpZWxkcykKKyAgICAgICAgZmllbGROYW1lcyA9IFtdCisgICAgICAg
IHByZWZpeCA9ICIgICAgICAgICIKKyAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcyhwcmVm
aXgsIEBmaWVsZHMsIGZpZWxkTmFtZXMpCisgICAgICAgIGZpZWxkcyA9IGZpZWxkcyArICJcbiIg
KyBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKIAogICAgICAg
ICBpbml0cyA9IG5pbAogICAgICAgICBpZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxp
emVycy5lbXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODMwOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Nyw2ICszNjcsMjgg
QEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRQcm9wZXJ0eShHUFJSZQogICAgICAgICByZXN1
bHQpOwogfQogCit2b2lkIEFzc2VtYmx5SGVscGVyczo6c3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVn
cyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNldCwgR1BSUmVnIHNjcmF0Y2gpCit7
CisgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJ
bW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhv
YmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIG5lZzMy
KG9mZnNldCk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgIEp1
bXAgcmVhZHkgPSBqdW1wKCk7CisgICAgCisgICAgaXNJbmxpbmUubGluayh0aGlzKTsKKyAgICBh
ZGRQdHIoCisgICAgICAgIFRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KHNpemVvZihKU09iamVjdCkpIC0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDxpbnQz
Ml90PihmaXJzdE91dE9mTGluZU9mZnNldCkgLSAyKSAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpKSwKKyAgICAgICAgb2JqZWN0LCBzY3JhdGNoKTsKKyAgICAK
KyAgICByZWFkeS5saW5rKHRoaXMpOworICAgIAorICAgIHN0b3JlVmFsdWUodmFsdWUsCisgICAg
ICAgIEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGlu
ZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworfQorCiB2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6ZW1pdExvYWRTdHJ1Y3R1cmUoVk0mIHZtLCBSZWdpc3RlcklEIHNvdXJjZSwg
UmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKQEAgLTY5OCw4ICs3MjAsMTMgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxs
ZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgZW1pdFZpcnR1
YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwgaW5mbyk7Cit9CisKK3ZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZN
JiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZv
KSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRk
TGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0
byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxh
dGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw4ICsyMzQsOSBA
QCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgY2xv
YmJlcnMgb2Zmc2V0LgorICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBjbG9iYmVyIG9mZnNldC4KICAg
ICB2b2lkIGxvYWRQcm9wZXJ0eShHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBKU1ZhbHVl
UmVncyByZXN1bHQpOworICAgIHZvaWQgc3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwg
R1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNldCwgR1BSUmVnIHNjcmF0Y2gpOwogCiAgICAgdm9p
ZCBtb3ZlVmFsdWVSZWdzKEpTVmFsdWVSZWdzIHNyY1JlZ3MsIEpTVmFsdWVSZWdzIGRlc3RSZWdz
KQogICAgIHsKQEAgLTM3OSwxNSArMzgwLDI2IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAor
ICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50
cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUsIEdQUlJlZyBzY3JhdGNoKQorICAgIHsKKyNpZiBOVU1C
RVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKKyAgICAgICAgbG9hZFB0cigmdG9wRW50
cnlGcmFtZSwgc2NyYXRjaCk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVySW1wbChzY3JhdGNoKTsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJB
TSh0b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOworI2VuZGlm
CisgICAgfQorCiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlGcmFtZSkKICAgICB7CiAjaWYgTlVNQkVSX09G
X0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAgIGNvbnN0IFRlbXBSZWdpc3RlclNl
dCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpIH07CiAgICAgICAgIEdQUlJlZyB0ZW1wMSA9IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigw
KTsKLSAgICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwgdGVtcDEpOwotICAgICAgICBjb3B5
Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwodGVtcDEpOworICAg
ICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih0b3BFbnRy
eUZyYW1lLCB0ZW1wMSk7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFt
ZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKICNlbmRpZgogICAgIH0K
ICAgICAKQEAgLTE3MjAsNiArMTczMiw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBlbWl0VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOwor
ICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENh
bGxMaW5rSW5mbyopOwogICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7
CiAgICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhc2VsaW5lSklU
Q29kZS5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgorI2lu
Y2x1ZGUgIkp1bXBUYWJsZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitKSVRBZGRJQyogTWF0aElDSG9sZGVyOjphZGRKSVRBZGRJQyhCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRo
UHJvZmlsZSk7IH0KK0pJVE11bElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9m
aWxlKTsgfQorSklUU3ViSUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUp
OyB9CitKSVROZWdJQyogTWF0aElDSG9sZGVyOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQor
Cit2b2lkIE1hdGhJQ0hvbGRlcjo6YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCit7
CisgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICBtX211bElDcyA9
IFdURk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5t
X25lZ0lDcyk7CisgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKK30KKwor
QmFzZWxpbmVKSVRDb2RlOjpCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBj
b2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgIDogRGlyZWN0
SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQpCisgICAgLCBNYXRoSUNIb2xkZXIoKQoreyB9CisKK0Jhc2VsaW5lSklUQ29kZTo6fkJhc2Vs
aW5lSklUQ29kZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENv
ZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5l
SklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVENv
ZGVNYXAuaCIKKworI2lmIEVOQUJMRShKSVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBC
aW5hcnlBcml0aFByb2ZpbGU7CitjbGFzcyBVbmFyeUFyaXRoUHJvZmlsZTsKK3N0cnVjdCBVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFNpbXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBT
dHJpbmdKdW1wVGFibGU7CisKK2NsYXNzIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9p
ZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcik7CisgICAgSklUQWRkSUMqIGFkZEpJ
VEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhC
aW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJp
dGhQcm9maWxlKik7CisgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxl
Kik7CisKK3ByaXZhdGU6CisgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklU
TXVsSUM+IG1fbXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFnPEpJ
VFN1YklDPiBtX3N1YklDczsKK307CisKK2NsYXNzIEpJVENvbnN0YW50UG9vbCB7CitwdWJsaWM6
CisgICAgdXNpbmcgQ29uc3RhbnQgPSB1bnNpZ25lZDsKKworICAgIGVudW0gY2xhc3MgVHlwZSA6
IHVpbnQ4X3QgeworICAgICAgICBHbG9iYWxPYmplY3QsCisgICAgICAgIENhbGxMaW5rSW5mbywK
KyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8sCisgICAgICAgIEZ1bmN0aW9uRGVjbCwKKyAgICAg
ICAgRnVuY3Rpb25FeHByLAorICAgIH07CisKKyAgICBzdHJ1Y3QgVmFsdWUgeworICAgICAgICBU
eXBlIHR5cGU7CisgICAgICAgIFBhY2tlZFB0cjx2b2lkPiBwYXlsb2FkOworICAgIH07CisKKyAg
ICBKSVRDb25zdGFudFBvb2woKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQb29sKEpJVENv
bnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQb29sJiBvcGVyYXRvcj0o
SklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKworICAgIENvbnN0YW50IGFkZChUeXBlIHR5
cGUsIHZvaWQqIHBheWxvYWQgPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVz
dWx0ID0gbV9jb25zdGFudHMuc2l6ZSgpOworICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoVmFs
dWUgeyB0eXBlLCBwYXlsb2FkIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHMuc2l6ZSgpOyB9Cisg
ICAgVmFsdWUgYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW2ldOyB9CisK
K3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50czsKK307CisKKworY2xhc3Mg
QmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1YmxpYyBNYXRoSUNIb2xk
ZXIgeworcHVibGljOgorICAgIEJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+
LCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKTsKKyAgICB+QmFzZWxpbmVK
SVRDb2RlKCkgb3ZlcnJpZGU7CisgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2lu
TWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQorCisg
ICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgQmFnPENh
bGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVK
dW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1w
VGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAgICBKSVRDb2RlTWFwIG1faml0Q29k
ZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOworICAgIGJvb2wg
bV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxp
bmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jh
c2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAs
NyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNvbnN0CiAKIENvbXBpbGF0
aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUoKQogewotICAgIENvbXBpbGF0aW9u
UmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgQ29tcGls
YXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQobV9jb2RlQmxv
Y2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoK
ICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGls
ZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgzMDk2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiAr
NDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblByb2xvCiAgICAgc3Rv
cmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93
Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRo
aXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6
UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNr
ZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9yZVZhbHVl
KHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0No
aWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNz
KHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2Nv
cGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2spLCBBZGRyZXNzKHNo
YWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJs
b2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwg
QWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFk
b3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0
Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93Q2hpY2tlbiogc2hh
ZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAgLTcyLDYgKzYyLDI4IEBAIHZvaWQg
Q0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEKICAgICBzdG9yZVB0cihzY3JhdGNo
MiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikpOwogfQogCisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BS
UmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRy
ZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwg
ZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNr
ZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7CisgICAgc3RvcmVWYWx1ZSh0aGlzUmVn
cywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQ
YWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOwor
ICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOwor
fQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVn
IHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3Rl
ZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBs
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2Nv
cGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjps
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVn
cyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNo
YWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOwor
fQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxw
ZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKIHsKICAgICBDQ2FsbEhl
bHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5o
CShyZXZpc2lvbiAyODMwOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVs
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQwLDE0IEBAIHB1YmxpYzoKICAgICAv
LyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJlZ2lzdGVycy4gVGhleSBh
c3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Agb2YKICAgICAvLyBzdGFjayB0byBt
YXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1
ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY29w
ZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFj
a2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxs
U2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hh
ZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tU
eXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKK3B1YmxpYzoKKyAg
ICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpT
VmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2Nr
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tl
blRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQ
UlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hv
dWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNr
ZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdH
UFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCShyZXZpc2lvbiAyODMwOTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgQ2FsbEZy
YW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29kZUJsb2NrLT5jYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENh
bGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2
ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVn
aXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07Ci0gICAgY29uc3QgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlclNhdmVM
b2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkg
eyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCShyZXZpc2lvbiAyODMwOTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFZhbHVl
UmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWduZWQgbnVtTG9jYWxzIHsgVUlOVF9NQVggfTsKICAg
ICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBudW1Q
YXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8gT24gb3VyIG1hY2hpbmUgZnJhbWUuCiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1hcDxWYWx1ZVJlY292ZXJ5PiByZWdpc3RlcnM7CiAg
ICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVyIHsgSW52YWxpZEdQUlJlZyB9OwogCiAgICAgdm9p
ZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXR1cENh
bGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqKTsKICNlbmRpZgog
ICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShyZXZpc2lvbiAyODMwOTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENhbGxGcmFtZVNodWZmbGVyOjpDYWxsRnJhbWVTaHVm
ZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkKICAgICAsIG1fb2xkRnJhbWUoZGF0YS5udW1Mb2Nh
bHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCiAgICAgLCBt
X25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lz
dGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6Omhl
YWRlclNpemVJblJlZ2lzdGVycwotICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25G
cmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpCisgICAgLCBtX2FsaWduZWRP
bGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyByb3VuZEFyZ3Vt
ZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5udW1QYXJhbWV0ZXJzKSkKICAgICAsIG1fYWxpZ25l
ZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwogICAgICAgICAr
IHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Muc2l6ZSgpKSkKICAgICAs
IG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUgLSBtX2FsaWduZWRPbGRGcmFtZVNp
emUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCkp
CiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNzZWRBcmdzKQorICAgICwgbV9udW1Q
YXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykKIHsKICAgICAvLyBXZSBhcmUgYWxsb3dlZCBh
bGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIENhbGxG
cmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhCiAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9CiAgICAgICAgIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fbmV3RnJhbWVCYXNlLAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1l
dGVycygpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1fbnVt
UGFyYW1ldGVycykpOwogICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJ
blJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5hbmQzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSwgbV9uZXdGcmFt
ZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6
ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVCYXNlLCBtX25ld0ZyYW1lQmFzZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCShyZXZpc2lv
biAyODMwOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIENh
bGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAgICAgIGRhdGEubnVtTG9jYWxzID0gbnVtTG9j
YWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2VkQXJncyA9IG1fbnVtUGFzc2VkQXJnczsKKyAg
ICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9udW1QYXJhbWV0ZXJzOwogICAgICAgICBkYXRh
LmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxsZWUg
fSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJnQ291bnQoKSk7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytpKQpAQCAtNzk4LDYg
Kzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwZXJmb3JtU2FmZVdyaXRlcygpOwogICAgIAog
ICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQg
bV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjgzMDk2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2
OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKIH0KIAogSklU
OjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NS
RW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2sp
CisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51bGxwdHIpCiAgICAgLCBtX2ludGVycHJldGVy
KHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAg
IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAgIG1fcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2Rl
QmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2Rl
QmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTkwLDggKzkzLDggQEAgdm9pZCBKSVQ6OmVt
aXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSnVtcExp
c3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRk
MzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVu
dEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4
ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMy
KFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRG
b3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVD
b3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogCiAg
ICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtMTEzLDE1ICsx
MTYsMjAgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0KgogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NP
ZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0KQordm9pZCBKSVQ6OmVtaXROb3Rp
ZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCkKIHsKKyAgICBhdXRvIG9rID0g
YnJhbmNoVGVzdFB0cihaZXJvLCBwb2ludGVyVG9TZXQpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDgoTm90RXF1YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRP
ZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBvay5saW5rKHRo
aXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUpCit2b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBH
bG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFyUmVhZE9ubHlXYXRjaHBvaW50KCktPmFkZHJl
c3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsK
KyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0ds
b2JhbE9iamVjdCwgbV92YXJSZWFkT25seVdhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hw
b2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
CisgICAgfQogfQogCiB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKQEAgLTEy
OSwxMiArMTM3LDE4IEBAIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAg
IGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBi
cmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtw
b2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjpyZXNldFNQKCkKK3sK
KyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2Vk
Q29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Cit9CisK
ICNkZWZpbmUgTkVYVF9PUENPREUobmFtZSkgXAogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVj
b2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCkpOyBcCiAgICAgYnJlYWs7CkBAIC0xODEsNjEgKzE5NSw0NCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0K
IAordm9pZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVz
dWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihD
YWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3Vs
dCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsK
KyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFi
bGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgcmVzdWx0KTsKKyAgICBoYXNFeGVjdXRh
YmxlLmxpbmsodGhpcyk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0
b3IoKSkKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxl
OjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBlbHNlCisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0
T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCByZXN1bHQpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJl
c3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJl
c3VsdCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKTsKKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgcHJvYmVEZWJ1ZyhbPV0g
KFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBj
dHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICB9KTsK
KyNlbmRpZgorfQorCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAg
aWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwg
Km1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3By
b2ZpbGVkQ29kZUJsb2NrLCAiXG4iKTsKICAgICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgp
OwogICAgIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5z
dHJ1Y3Rpb25zID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGlu
c3RydWN0aW9uQ291bnQgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAg
IGF1dG8mIGluc3RydWN0aW9ucyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygp
OworICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5zaXplKCk7CiAKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAot
ICAgIFZNJiB2bSA9IG1fY29kZUJsb2NrLT52bSgpOwogICAgIEJ5dGVjb2RlSW5kZXggc3RhcnRC
eXRlY29kZUluZGV4KDApOwotICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggJiYg
KG1fY29kZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJsb2NrPih2bSkgfHwgbV9jb2RlQmxv
Y2stPmluaGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtKSkpIHsKLSAgICAgICAgLy8g
V2UgY2FuIG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBleGVjdXRlIFByb2dy
YW1Db2RlQmxvY2sncyBleGFjdGx5IG9uY2UuCi0gICAgICAgIC8vIFRoaXMgb3B0aW1pemF0aW9u
IHdvdWxkIGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRoZSBMTEludCBkZXRlcm1pbmVzIGl0
IHdhbnRzIHRvCi0gICAgICAgIC8vIGRvIE9TUiBlbnRyeSBpbnRvIHRoZSBiYXNlbGluZSBKSVQg
aW4gYSBsb29wLCBpdCB3aWxsIHBhc3MgaW4gdGhlIGJ5dGVjb2RlIG9mZnNldCBpdAotICAgICAg
ICAvLyB3YXMgZXhlY3V0aW5nIGF0IHdoZW4gaXQga2lja2VkIG9mZiBvdXIgY29tcGlsYXRpb24u
IFdlIG9ubHkgbmVlZCB0byBjb21waWxlIGNvZGUgZm9yCi0gICAgICAgIC8vIGFueXRoaW5nIHJl
YWNoYWJsZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0LgotCi0gICAgICAgIC8vIFdlIG9ubHkg
Ym90aGVyIGJ1aWxkaW5nIHRoZSBieXRlY29kZSBncmFwaCBpZiBpdCBjb3VsZCBzYXZlIHRpbWUg
YW5kIGV4ZWN1dGFibGUKLSAgICAgICAgLy8gbWVtb3J5LiBXZSBwaWNrIGFuIGFyYml0cmFyeSBv
ZmZzZXQgd2hlcmUgd2UgZGVlbSB0aGlzIGlzIHByb2ZpdGFibGUuCi0gICAgICAgIGlmIChtX2xv
b3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0gMjAwKSB7Ci0gICAgICAgICAgICAv
LyBBcyBhIHNpbXBsaWZpY2F0aW9uLCB3ZSBkb24ndCBmaW5kIGFsbCBieXRlY29kZSByYW5nZXMg
dGhhdCBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGZp
bmQgdGhlIG1pbmltdW0gYnl0ZWNvZGUgb2Zmc2V0IHRoYXQgaXMgcmVhY2hhYmxlLCBhbmQKLSAg
ICAgICAgICAgIC8vIGNvbXBpbGUgY29kZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0IG9ud2Fy
ZHMuCi0KLSAgICAgICAgICAgIEJ5dGVjb2RlR3JhcGggZ3JhcGgobV9jb2RlQmxvY2ssIG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sq
IGJsb2NrID0gZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChtX2xvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
YmxvY2spOwotCi0gICAgICAgICAgICBHcmFwaE5vZGVXb3JrbGlzdDxCeXRlY29kZUJhc2ljQmxv
Y2sqPiB3b3JrbGlzdDsKLSAgICAgICAgICAgIHN0YXJ0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgoKTsKLSAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goYmxvY2spOwotCi0gICAgICAgICAg
ICB3aGlsZSAoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7Ci0g
ICAgICAgICAgICAgICAgc3RhcnRCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChzdGQ6Om1p
bihzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGJsb2NrLT5sZWFkZXJPZmZzZXQoKSkpOwot
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggOiBibG9jay0+c3Vj
Y2Vzc29ycygpKQotICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKCZncmFwaFtzdWNj
ZXNzb3JJbmRleF0pOwotCi0gICAgICAgICAgICAgICAgLy8gQWxzbyBhZGQgY2F0Y2ggYmxvY2tz
IGZvciBieXRlY29kZXMgdGhhdCB0aHJvdy4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxv
Y2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgewotICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmxlYWRlck9mZnNldCgpOyBieXRl
Y29kZU9mZnNldCA8IGJsb2NrLT5sZWFkZXJPZmZzZXQoKSArIGJsb2NrLT50b3RhbExlbmd0aCgp
OykgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0
aW9ucy5hdChieXRlY29kZU9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0
byogaGFuZGxlciA9IG1fY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29k
ZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29y
a2xpc3QucHVzaChncmFwaC5maW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoaGFuZGxlci0+
dGFyZ2V0KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IGlu
c3RydWN0aW9uLT5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291
bnRIYXZpbmdTbG93Q2FzZSA9IDA7CiAgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29k
ZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyAp
IHsKQEAgLTI3OCwxMiArMjc1LDE1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRF
eGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2Rl
QmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkg
eworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFt
ZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBi
eXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQ
b2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfQogCisgICAgICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYXRjaCkKKyAgICAgICAgICAg
IGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOworCiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQp
IHsKICAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKICAgICAgICAgREVGSU5FX1NMT1dfT1Ao
bGVzc2VxKQpAQCAtNTI3LDcgKzUyNyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4
OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAg
ICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAg
IAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9n
TG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUgZm9yICIsIG1fYnl0ZWNvZGVJbmRl
eCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CkBAIC01NDUsOCArNTQ1LDgg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBpZiAoVU5M
SUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewogICAgICAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0g
ICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAg
ICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2so
KTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJd
IFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5m
cCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAt
Njc0LDU1ICs2NzQsNTUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNl
bmRpZgogfQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBv
b2xSZWdpc3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6
Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENv
bnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0Zvcigm
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
OworfQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21w
aWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwg
PSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgREZHOjpDYXBhYmlsaXR5TGV2
ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBz
d2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAgICAgIG1f
Y2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5l
ZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNhbkNv
bXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwotICAgICAg
ICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91bGRFbWl0
UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
IAotICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNlIEdsb2Jh
bENvZGU6Ci0gICAgY2FzZSBNb2R1bGVDb2RlOgotICAgIGNhc2UgRXZhbENvZGU6Ci0gICAgICAg
IG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBh
bHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJs
ZSBjYWxsLgotICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgotICAg
ICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGxl
dmVsKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwotICAgICAgICBi
cmVhazsKLSAgICB9CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0
Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0
Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2Nv
ZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJ
VERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1w
VGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsK
LSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2Vy
KS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+
KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsK
KyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBU
YWJsZXMoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zd2l0Y2hKdW1w
VGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2Nr
LT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYgKG1fdW5s
aW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkp
CisgICAgICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJp
bmdKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGVzKCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpk
dW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlv
bnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1fZGlzYXNz
ZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsKKyAgICBp
ZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0
ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIo
KSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBvZmYgb2YgVW5s
aW5rZWRDb2RlQmxvY2suCisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVRE
aXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KICAgICBpZiAoVU5MSUtF
TFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBGSVhNRTogYnVp
bGQgcHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiBVbmxpbmtlZENvZGVCbG9jay4KICAgICAgICAg
bV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpDb21w
aWxhdGlvbigKLSAgICAgICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVu
c3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9jayksCisgICAgICAgICAgICAgICAgbV92bS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVCbG9j
ayksCiAgICAgICAgICAgICAgICAgUHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1fY29t
cGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmls
ZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRl
Y29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9jayk7
CiAgICAgfQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0o
bGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDApKSk7CkBAIC03NDIsMTEgKzc0Miwx
MiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG5v
cCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgaWYg
KG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAgICAg
ICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJlZ2lu
TGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BP
ZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNl
dDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzU3LDE2ICs3
NTgsMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1v
dmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZlQ2Fs
bGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwor
ICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAK
LSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAg
ICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFy
Z3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgeworICAg
ICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICghbV91bmxpbmtlZENvZGVCbG9jay0+
aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA+
IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4ZWRW
ZWN0b3I8VmFsdWVQcm9maWxlPjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fdW5saW5rZWRD
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAg
IC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1
bW15IHByb2ZpbGluZyBzaXRlICh0bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNv
bnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkg
dmFsdWUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkg
JiYgIWFyZ3VtZW50KQorICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5p
c0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNl
dEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNzc3LDEyICs3ODIsMTIgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQzMihB
ZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgICAg
ICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7
CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fY29kZUJs
b2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3MpOworICAg
ICAgICAgICAgICAgIHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwgYXJndW1l
bnQgKiBzaXplb2YoVmFsdWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1
Y2tldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUkVM
RUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVCbG9jay0+aml0
VHlwZSgpKSk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAgICAgIG1fdm0t
PmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhpcyk7
CkBAIC03OTksMjQgKzgwNCwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0Rmlu
YWxpemluCiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAo
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSks
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJv
bGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29k
ZUJsb2NrKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2ssIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIHJlZ1QwKTsK
IAogICAgIC8vIElmIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciByZXF1
aXJlIGFyaXR5IGZpeHVwLgotICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2RlQmxv
Y2stPm1fbnVtUGFyYW1ldGVycyAhPSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUo
KSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAgYm9vbCByZXF1
aXJlc0FyaXR5Rml4dXAgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgIT0g
MTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxhYmVs
KCk7Ci0gICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9zaG91
bGRBbHdheXNCZUlubGluZWQpOworCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0g
ICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKTsKKyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3Vl
KHJlZ1QwKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMCwg
Q29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAKICAgICAgICAg
bG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpLCByZWdUMSk7Ci0gICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0
ZWRJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJlZ2luTGFiZWws
IHRoaXMpOworICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1t
MzIobV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGJlZ2luTGFi
ZWwsIHRoaXMpOwogCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7
CiAKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2RlQmxvY2stPmlz
Q29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25D
YWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBh
cmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNr
T25FeGNlcHRpb24obV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0
aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBhcmd1bWVu
dEdQUjApOwogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAg
ICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywgcmV0
dXJuVmFsdWVHUFIpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTgzOSw3ICs4NDcsNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1fZGlz
YXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRl
ZmF1bHRDb2RlT3JpZ2luKCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRy
PExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9IHN0
ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV91bmxpbmtl
ZENvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOwog
ICAgIGxpbmsoKTsKIH0KIApAQCAtODU4LDggKzg2Niw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAg
ICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6
SW1tZWRpYXRlOgogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyOiB7Ci0gICAg
ICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
Y29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAg
ICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBs
aW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNo
UHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRUYWJsZS5tX2Jy
YW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZz
ZXQgPSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3MSw4ICs4NzksOCBA
QCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3aXRjaFJlY29y
ZDo6U3RyaW5nOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYg
dW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAg
ICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KTsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQg
PSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29k
ZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8m
IGxvY2F0aW9uIDogdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hPZmZzZXQ7CkBA
IC05MDYsNiArOTE0LDI3IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsocmVjb3JkLmZyb20sIHJlY29yZC5jYWxsZWUpOwogICAgIH0KIAorI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2VuZXJhdG9ycykg
eworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAgICAgICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRT
dHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAgICAgICB9CisgICAgfTsK
KworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlW
YWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMpOworICAgIGZpbmFsaXpl
SUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlWYWxzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFscyk7CisgICAg
ZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlWYWxzKTsKKyAg
ICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3ByaXZhdGVC
cmFuZEFjY2Vzc2VzKTsKKyNlbHNlCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlk
cywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBw
YXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlz
LCBwYXRjaEJ1ZmZlcik7CkBAIC05MTcsMjEgKzk0NiwyNSBAQCB2b2lkIEpJVDo6bGluaygpCiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZp
bmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5h
bGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7Cisj
ZW5kaWYKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRp
b25JbmZvKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0lu
Zm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAg
ICBpbmZvLmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0
clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbik7CisjZWxzZQogICAgICAgICBDYWxs
TGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKICAgICAgICAg
aW5mby5zZXRDb2RlTG9jYXRpb25zKAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCiAgICAg
ICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0
aW9uSW5mby5kb25lTG9jYXRpb24pKTsKKyNlbmRpZgorCiAgICAgfQogCi0gICAgewotICAgICAg
ICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgp
OyArK2J5dGVjb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVP
ZmZzZXRdLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5k
KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpT
RW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAgICB9Ci0gICAg
ICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXpl
KCkpOworICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOworICAgIGZvciAo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNp
emUoKTsgKytieXRlY29kZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVP
ZmZzZXRdLmlzU2V0KCkpCisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0
ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRy
eVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQwLDI2ICs5NzMsNDIg
QEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShtX2NvbXBpbGF0
aW9uKSkgeworICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIG1ha2UgdGhlIGJ5dGVjb2RlIHBy
b2ZpbGVyIGtub3cgYWJvdXQgVW5saW5rZWRDb2RlQmxvY2s/CiAgICAgICAgIGlmIChPcHRpb25z
OjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkKICAgICAgICAgICAgIG1fZGlzYXNz
ZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fY29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVmZmVy
KTsKLSAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbiht
X2NvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOworICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcHJvZmlsZWRDb2RlQmxvY2ssICptX2NvbXBpbGF0
aW9uKTsKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVp
bGRNYXBwaW5nKCkpCiAgICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBD
VG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0
Y2hCdWZmZXIpOwogICAgIAorICAgIC8vIEZJWE1FOiBNYWtlIGEgdmVyc2lvbiBvZiBDb2RlQmxv
Y2tXaXRoSklUVHlwZSB0aGF0IGtub3dzIGFib3V0IFVubGlua2VkQ29kZUJsb2NrLgogICAgIENv
ZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0
Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3Ig
JXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAl
cyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3Byb2ZpbGVkQ29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29kZSA9IGFkb3B0
UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCkpOworICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgQmFzZWxpbmVKSVRD
b2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2spKTsKKworICAgIG1faml0Q29kZS0+bV91bmxpbmtl
ZENhbGxzID0gV1RGTW92ZShtX3VubGlua2VkQ2FsbHMpOworICAgIG1faml0Q29kZS0+bV9ldmFs
Q2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7CisgICAgbV9qaXRD
b2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0gV1RGTW92ZShtX3VubGlua2VkU3R1YkluZm9zKTsK
KyAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zd2l0Y2hKdW1w
VGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1v
dmUobV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1faml0Q29kZU1h
cCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCk7CisgICAgbV9qaXRDb2RlLT5hZG9wdE1h
dGhJQ3MobV9tYXRoSUNzKTsKKyAgICBtX2ppdENvZGUtPm1fY29uc3RhbnRQb29sID0gV1RGTW92
ZShtX2NvbnN0YW50UG9vbCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtX2ppdENvZGUtPm1f
aXNTaGFyZWFibGUgPSBtX2lzU2hhcmVhYmxlOworI2Vsc2UKKyAgICBtX2ppdENvZGUtPm1faXNT
aGFyZWFibGUgPSBmYWxzZTsKKyNlbmRpZgogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3Nl
KQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVw
KS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVu
dGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRy
KCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAs
ICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCkt
PnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCku
dW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1h
aW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZChD
b2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNDb21waWxhdGlv
blRocmVhZCgpKTsKIApAQCAtOTY4LDI1ICsxMDE3LDE0IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJ
VDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZp
bmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtU
b0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7Ci0gICAgfQot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRp
b25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2Nv
ZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8v
cHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IG1fY29kZUJs
b2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0
YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAgICB9Ci0KICAgICBpZiAobV9wY1Rv
Q29kZU9yaWdpbk1hcCkKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFw
KFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX2ppdENvZGUtPm1fcGNU
b0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApOwogCiAgICAgbV92
bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAg
ICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAgICAgICAg
c3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7Cisg
ICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zU2l6ZSgpKSk7CiAKLSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5l
Q29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4gQ29tcGlsYXRp
b25TdWNjZXNzZnVsOwogfQpAQCAtOTk4LDExICsxMDM2LDExIEBAIHNpemVfdCBKSVQ6OmNvZGVT
aXplKCkgY29uc3QKICAgICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAKLUNvbXBp
bGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGRvTWFpblRocmVh
ZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZp
bmFsaXppbmcoZWZmb3J0KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAg
ICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MiwxOCArMTA4MCwyOCBA
QCB2b2lkIEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAgIG1fdm0t
PnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBhcmluZyBm
b3IgSklUIGNvbXBpbGF0aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3Rl
ckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lz
dGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpID09IFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAogICAgIHJl
dHVybiByb3VuZExvY2FsUmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChjb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJl
Z2lzdGVycyk7CiB9CiAKLWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sq
IGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9j
ayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJs
b2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKworaW50IEpJVDo6c3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIHZpcnR1
YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2spIC0gMSku
b2Zmc2V0KCk7CiB9CiAKK2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sq
IGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9j
ay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4g
SklUOjpjb21waWxlVGltZVN0YXRzKCkKIHsKICAgICBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+
IHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjgzMDk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NiArMzcsNyBAQAogCiAjZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwgZXhwZWN0ZWQp
IEFTU0VSVF9XSVRIX01FU1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9mZnNldCBcIiVz
XCIgc2hvdWxkIGJlICVkLCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19jYXN0PGludD4o
ZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCisjaW5jbHVkZSAiQmFzZWxp
bmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xv
d1BhdGhzLmgiCiAjaW5jbHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCkBAIC00NCw2ICs0NSw3IEBA
CiAjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRv
ci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgi
CiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVy
LmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsxNTEsMTkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25JbmZvIHsK
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OworI2Vsc2UK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAgICAgIENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOworI2VuZGlmCiAgICAgfTsKIAogICAgIHZvaWQgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNT
X0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICBjbGFzcyBKSVRf
Q0xBU1NfQUxJR05NRU5UIEpJVCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHVi
Q2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFRodW5rczsKQEAgLTE3MSw2ICsxNzgsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2Vt
ZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgogICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2
OwogCisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgIHB1YmxpYzoK
ICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9v
cE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJ
VCgpOwpAQCAtMTc4LDI4ICsxODcsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZNJiB2
bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6dm0oKTsgfQogCiAgICAgICAgIHZvaWQgY29t
cGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCk7Ci0gICAg
ICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIENv
bXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayopOwogICAgICAg
ICBzaXplX3QgY29kZVNpemUoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGRvTWFpblRocmVhZFBy
ZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIENvbXBp
bGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0
ZWNvZGVJbmRleCgwKSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29k
ZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKKyAgICAgICAg
ICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21w
aWxlKGNvZGVCbG9jaywgZWZmb3J0KTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAg
c3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqKTsKKyAgICAg
ICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsK
ICAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKik7CiAK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25k
cz4gY29tcGlsZVRpbWVTdGF0cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
U2Vjb25kcyB0b3RhbENvbXBpbGVUaW1lKCk7CiAKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc19tZXRhZGF0YUdQUiA9IExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFI7
CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNfY29uc3RhbnRzR1BSID0gTExJbnQ6
OlJlZ2lzdGVyczo6cGJHUFI7CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHByaXZhdGVD
b21waWxlTWFpblBhc3MoKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7
CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKICAgICAgICAgdm9pZCBs
aW5rKCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBp
bGF0aW9uRWZmb3J0KTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUo
Q29kZUJsb2NrKiwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCiAgICAgICAgIC8vIEFkZCBhIGNh
bGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAg
ICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5j
dGlvbikKQEAgLTIyMyw2ICsyMzcsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNl
bmRpZgogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9p
ZCBsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BS
UmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZv
aWQgbG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BS
UmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZv
aWQgbG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJS
ZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5
dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlLCBjb25zdCBC
eXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5
dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5
dGVjb2RlPgorICAgICAgICB2b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25z
dCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICBwdWJsaWM6CisgICAg
ICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7CisgICAg
ICAgIHZvaWQgbG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsK
KworICAgICAgICB2b2lkIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcg
cmVzdWx0ID0gcmVnVDApOworCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1w
VG9IYW5kbGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBl
bmQoanVtcFRvSGFuZGxlcik7CkBAIC0yNTQsNiArMjk0LDE5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAg
ICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CisgICAgICAg
IHN0ZDo6ZW5hYmxlX2lmX3Q8CisgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92
YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncworICAgICAgICAg
ICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJ
RCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKKyAgICAgICAgLCB2b2lkPiBjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExp
bmtJbmZvQ29uc3RhbnQpOworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAgICAg
ICBzdGQ6OmVuYWJsZV9pZl90PAorICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxf
dmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKKyAgICAgICAg
ICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCisgICAgICAgICwgdm9pZD4gY29t
cGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxM
aW5rSW5mb0NvbnN0YW50KTsKKyNlbHNlCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
ICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9w
X2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAg
LTI2NSw5ICszMTgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBPcDo6b3Bjb2Rl
SUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFy
YXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdz
IHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICAgICAg
ICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOwor
I2VuZGlmCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29t
cGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJ
bmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlu
a2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
Ym9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2Fs
bEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKQEAgLTI4NywxNCArMzQxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJN
b2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOworICAg
ICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAogICAgICAgICAvLyBU
aGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhh
dCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmls
ZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcpOwotICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRl
Y29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVn
KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAg
IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBAIC0zMDUsOCArMzU4LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNs
dHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lk
PgogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRl
Y29kZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVn
aXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwot
ICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNl
bGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIp
OworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KGNvbnN0IEJ5dGVjb2RlJiwgcHRyZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVy
SUQgc2NyYXRjaEdQUik7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAgLTU5Myw3ICs2NDgsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9t
b2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CkBAIC02MjcsMTQgKzY4MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0
UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdm9pZCBlbWl0SGFz
UHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSk7Ci0gICAgICAgIHZvaWQgZW1p
dEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUpOworICAgICAg
ICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlKTsKIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1v
bihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAg
ICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAg
ICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUpOwor
ICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCBHUFJSZWcpOworICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29s
dmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9z
dXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwogICAgICAgICB2b2lkIGVtaXRM
b2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiog
c3RydWN0dXJlU2xvdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY0Niw3ICs3MDAsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZp
cnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVt
aXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdy
aXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpOworICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdh
dGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCopOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpT
VmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0Kik7CkBAIC02NTUsNiArNzA5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
dm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFs
UmVnaXN0ZXIpOwogCisgICAgICAgIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsK
ICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAg
ICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAg
ICBib29sIGlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjc2LDEz
ICs3MzEsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRv
cihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKLSAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9n
ZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Io
Vk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0
X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF90b19zY29w
ZUdlbmVyYXRvcihWTSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKIAogICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVj
a190cmFwc19oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0m
KTsKQEAgLTY5NiwzMCArNzQ5LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0
dXJuICEocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVk
Q2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNk
ZWZpbmUgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0
X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9F
QUNIX1JFU09MVkVfVFlQRShERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRl
ZiBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJl
c29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBp
cyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAg
ICAgICAgLy8gUmVzb2x2ZWRDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5
cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29wZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVU
eXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwot
ICAgICAgICB9Ci0KLSNkZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNv
bHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwot
ICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVS
QVRPUikKLSN1bmRlZiBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNj
b3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNl
eUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CiAKKyAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJv
bV9zY29wZUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsK
KyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2Vu
ZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4s
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYsIHN0
ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2Uo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTc2MCwxMCArNzk2LDEw
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRD
YWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2b2lkIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgQWRkcmVzcywgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2Rl
PgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNv
ZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgCiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jl
c3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjEsMjAgKzg1NywyMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVz
cyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7CiAgICAgICAgIH0KIAotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwg
dHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5
cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5h
YmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9B
c3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0
YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVw
QXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0
YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4gQXJncz4KKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGUs
IHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFp
dHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0
dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0LCBhcmdzLi4u
KTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUs
IEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CiAg
ICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBl
bmFtZS4uLiBBcmdzPgpAQCAtOTE5LDI1ICs5NTUsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJu
IG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5l
ZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAgICAgYm9vbCBz
aG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9CiAj
ZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGllcmVkIGNvbXBp
bGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0
cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4g
ZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFB
bmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAgICAgICB2b2lkIGVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsK
ICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAgICAgICAKLSAg
ICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRhZGF0YSB0
YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jvc3Mg
dGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KLSAgICAg
ICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0
aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQdXRU
b1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOworCisgICAgICAg
IHZvaWQgcmVzZXRTUCgpOwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwog
CkBAIC05NjQsOSArOTk3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93
Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9z
d2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRH
ZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxl
PiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25D
aGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJv
bGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEwMDAsMTEgKzEwMzAs
MjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24q
LCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElD
R2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAg
ICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxk
RW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAg
ICAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgICAg
ICBVbmxpbmtlZENvZGVCbG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKwor
ICAgICAgICBNYXRoSUNIb2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8QmFzZWxpbmVK
SVRDb2RlPiBtX2ppdENvZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQ
b29sOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29u
c3RhbnQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAg
QmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgICAgIEJhZzxD
YWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxVbmxpbmtlZFN0
cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAgICBGaXhlZFZlY3Rv
cjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgRml4ZWRWZWN0
b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAg
c3RydWN0IE5vdEFDb2RlQmxvY2sgeyB9IG1fY29kZUJsb2NrOworCisgICAgICAgIGJvb2wgbV9p
c1NoYXJlYWJsZSB7IHRydWUgfTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24g
MjgzMDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8
IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BS
MCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzIwLDcgKzMy
MSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAg
fQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdU
MSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJv
IDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xv
d0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCByZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
cmVnVDMsIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQog
CkBAIC01NzMsNyArNTc3LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNv
bnN0IAogCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9w
MiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCkBAIC03MTcsOCArNzIyLDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25z
dCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEobV9jb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJVE5lZ0lDKiBuZWdhdGVJ
QyA9IG1fbWF0aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJQyk7CiAgICAgLy8gRklY
TUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRl
LCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0aElDRmFzdDxP
cE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdh
dGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAtODk5LDggKzkwNCw4IEBAIHZv
aWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRf
b3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmlu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRk
SUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAg
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQWRkPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwor
ICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUp
OwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJ
Qyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTk0
NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwK
ICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0
aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29k
ZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5h
cml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAg
ICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFy
aXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Q
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVn
cyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAxNSwxMCArMTAyMSwxMSBAQCB2b2lkIEpJVDo6ZW1p
dE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmln
aHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRo
SUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIp
OwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRS
ZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJp
Z2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsK
ICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEzICsxMDYyLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0
aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5n
KCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJl
cGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9H
Sk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0
aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9H
Sk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9m
aWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVy
YXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRo
SUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+
KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1t
UHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93
UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIwLDEzICsxMTI4LDE0IEBAIHZvaWQgSklUOjplbWl0
TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2Zp
bGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1Bh
dGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9H
SkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVn
VDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJl
Z3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xv
d1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVz
dWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAg
fSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihy
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElD
KSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBh
dGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1
c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1
dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkp
Ci0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2Pigp
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQcm9m
aWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVy
YW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5k
IHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjEx
LDggKzEyMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAK
IHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0
aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRkSklUTXVs
SUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3Vy
cmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1
ZU11bCk7CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVs
KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2Rl
QmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBt
X21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9N
YXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0
PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2Zp
bGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODMwOTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpl
bWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAg
IGVtaXRTdG9yZShkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QxLCByZWdUMCk7CiB9CiAKQEAgLTE1Nyw3
ICsxNTcsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2lu
dCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnQgPSBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2ludCk7CiAgICAg
aW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oc3RhY2tPZmZzZXRJblJlZ2lz
dGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpKTsKIApAQCAtMTkyLDcgKzE5Miw3IEBA
IEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2l6ZU9w
ZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7CiAgICAgZWxz
ZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJnczsK
LSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJz
dFZhckFyZ09mZnNldCk7CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
LWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJh
bWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNiAqIHNpemVvZih2b2lkKikpKSks
IHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0yMDIsNyArMjAyLDcgQEAgSklUOjpj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9wZXJhdGlv
biA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UKICAgICAg
ICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxs
T3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJl
Z1QxLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDQpLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDAp
OworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0KSwgZmlyc3RW
YXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMSk7CiAK
ICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KQEAgLTIzMiwxMCArMjMyLDEwIEBA
IGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkp
KTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVn
VDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOwogCiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZWdUMSkpOwogCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0g
ICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAog
ICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBAIC0yNTgsOCArMjU4
LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKIAogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0Vmly
dHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICog
c2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjg2
LDExICsyODYsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgICovCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKICAgICBpZiAob3Bjb2Rl
SUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxM
aW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgICAgICBpbmZvID0gbV9w
cm9maWxlZENvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSk7CiAgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOwogICAgIC8vIFNQ
IGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1
bWVudENvdW50IGluaXRpYWxpemVkLgogICAgIAotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1f
Y29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
SW5kZXggPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsK
ICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgp
LmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBlbWl0TG9h
ZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7IC8vIHJlZ1QxLCByZWdUMCBob2xkcyBjYWxsZWUuCkBA
IC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAg
ZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDEyICszNDEsMTEgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNh
bGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDMpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAq
dGhpcyk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cykgewpAQCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2Rl
QmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsNyArMzk0LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIEpTVmFsdWVSZWdz
IG5leHRSZWdzID0gSlNWYWx1ZVJlZ3ModGFnTmV4dEdQUiwgcGF5bG9hZE5leHRHUFIpOwogCiAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLAorICAgICAg
ICBtX3Byb2ZpbGVkQ29kZUJsb2NrLAogICAgICAgICBKSVRUeXBlOjpCYXNlbGluZUpJVCwKICAg
ICAgICAgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCkBAIC00MTAsNyArNDA5
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBuZXh0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgbmV4dFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBuZXh0UmVncyk7CiAKICAgICBmYXN0Q2FzZS5saW5r
KHRoaXMpOwpAQCAtNDQwLDEwICs0MzksMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJh
dG9yX29wZW4oY29ucwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIC8vIG1ldGFkYXRhCisgICAgICAgIGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCAvLyBtZXRhZGF0YQogICAgICAgICBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgogICAgICAgICBuZXh0VlJlZywgLy8gcmVzdWx0
Ci0gICAgICAgIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8g
YXJnMQorICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgLy8gYXJnMQogICAgICAgICBnZW4uc3R1YkluZm8oKSwgLy8gYXJnMgogICAgICAg
ICBKU1ZhbHVlUmVncyh0YWdJdGVyYXRvckdQUiwgcGF5bG9hZEl0ZXJhdG9yR1BSKSwgLy8gYXJn
MwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKGlkZW50KS5yYXdCaXRzKCkpOyAvLyBhcmc0CkBAIC00NTIsNyArNDUxLDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIGF1dG8gZG9uZSA9IGp1bXAo
KTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJ
dGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00NjAs
NyArNDU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4
dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2Rl
QmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewogICAgICAgICBz
d2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNhc2UgTmFycm93OiByZXR1
cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBAIC01MDYsNyArNTA1LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBwcmVzZXJ2ZWRS
ZWdzLmFkZCh0YWdWYWx1ZUdQUik7CiAgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHBheWxvYWRW
YWx1ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAg
bV9jb2RlQmxvY2ssCisgICAgICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLAogICAgICAgICAg
ICAgSklUVHlwZTo6QmFzZWxpbmVKSVQsCiAgICAgICAgICAgICBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksCiAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpKSksCkBAIC01MzMsMTAgKzUzMiwxMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJl
Z1Q2OwogICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUNzsKICAgICAgICAgY29uc3QgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVt
cExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHRh
Z0RvbmVHUFIsIHBheWxvYWREb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSk7CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJ
ZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh0YWdEb25lR1BSLCBwYXlsb2FkRG9uZUdQUiksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CiAKICAg
ICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywK
KyAgICAgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssCiAgICAgICAgICAgICBKSVRUeXBlOjpC
YXNlbGluZUpJVCwKICAgICAgICAgICAgIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwKICAg
ICAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkpKSwKQEAgLTU4OCwxMCArNTg3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVy
YXRvcl9uZXh0KGNvbnMKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAK
ICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICAg
ICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAgICAgICAg
ICAgYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIC8vIG1ldGFkYXRhCiAg
ICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgogICAgICAg
ICAgICAgZG9uZVZSZWcsIC8vIHJlc3VsdAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCisgICAgICAgICAgICBUcnVzdGVkSW1t
UHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQogICAgICAg
ICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHRh
Z0l0ZXJSZXN1bHRHUFIsIHBheWxvYWRJdGVyUmVzdWx0R1BSKSwgLy8gYXJnMwogICAgICAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsgLy8gYXJnNApAQCAtNjAyLDcgKzYwMSw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JD
aGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1
c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgIH0K
IAogICAgIHsgICAKQEAgLTYxOCwxMCArNjE3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
dGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAg
ICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAgICAg
ICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIC8vIG1ldGFkYXRh
CiAgICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgogICAg
ICAgICAgICAgdmFsdWVWUmVnLCAvLyByZXN1bHQKLSAgICAgICAgICAgIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICAgICAgVHJ1c3Rl
ZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKICAg
ICAgICAgICAgIGdlbi5zdHViSW5mbygpLCAvLyBhcmcyCiAgICAgICAgICAgICBKU1ZhbHVlUmVn
cyh0YWdJdGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFyZzMKICAgICAg
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
aWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAkocmV2aXNpb24gMjgzMDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
IkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
SklUSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2lu
Y2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAj
aW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChj
b25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5h
dGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJl
Z2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0LDE4IEBAIHN0ZDo6ZW5hYmxlX2lm
X3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQg
IT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9j
YWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUs
IENhbGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29k
ZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50
ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJbmNsdWRpbmdU
aGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnQp
OwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0YWNrT2Zmc2V0
SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKKwogICAgIGlmIChP
cDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQg
KyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKICAg
ICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAg
ICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVja3BvaW50
KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9NZXRh
ZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJ
bmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5
UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBkb25lLmxp
bmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAg
ICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwog
LCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxM
aW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2Rl
LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewogICAg
IFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC05MSw3
ICs5Miw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAg
ICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7
CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9y
VmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3Rlciwg
Zmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOworICAgIGNh
bGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0
ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVl
UmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJu
VmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
LShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25T
ZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNldHVwT3BlcmF0
aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJhdGlvbihzZXR1
cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVnVDMsIHJl
Z1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9m
ZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMy
KEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFkZHJlc3NP
Zk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25zdGFudChjYWxs
TGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDYWxs
TGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJlZ1Qz
KTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1QyKTsK
KyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9m
TWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dlc3QubGluayh0
aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywxNiArMTMxLDE1
IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxhdGU8PgogYm9v
bCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkKIHsKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAgIHN0b3Jl
UHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZy
YW1lT2Zmc2V0KCkpKTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFyZ3VtZW50R1BS
MSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1Qx
LCByZWdUMik7CisgICAgcmVzZXRTUCgpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0
eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFs
dWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHko
cmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIApA
QCAtMTQ4LDcgKzE1MSw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25z
dCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1f
Y29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsK
KyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFkZChDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86
OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2Fy
Z3Y7CkBAIC0xNTYsNDMgKzE1OSw0NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nh
c2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVv
ZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUgLSBz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxDYWxsKCpt
X3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7
CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5m
byk7CisgICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29u
c3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENh
bGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50KQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8Pgot
Ym9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgQ2Fs
bExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK2Jvb2wgSklUOjpj
b21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExp
bmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxsRnJhbWVTaHVmZmxl
RGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNv
ZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6
bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0gbWFrZVVuaXF1
ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFzc2VkQXJn
cyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFyYW1ldGVycyA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVt
YmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICBzaHVmZmxl
RGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS5hcmdzLnJl
c2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShieXRl
Y29kZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2Fy
Z2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgc2h1ZmZs
ZURhdGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5K
U1N0YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVk
aW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0
SlMpOwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAgICAgICBWYWx1ZVJlY292
ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVmZmxlRGF0YS5zZXR1cENh
bGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAgIGluZm8tPnNldEZyYW1lU2h1ZmZs
ZURhdGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292
ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0YS0+c2V0dXBD
YWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5l
bWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVz
ZURhdGFJQzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgc2h1
ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlu
a0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5r
SW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZd
IHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0YSkucHJlcGFy
ZUZvclRhaWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKwor
ICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8tPmZyYW1lU2h1ZmZsZURh
dGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFi
ZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVM
b2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIxOCwxNCArMjI1LDI1IEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5p
dGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMg
Y2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0gICAgQ2FsbExpbmtJbmZv
KiBpbmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAg
ICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKKwor
ICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOworICAgIGlmIChvcGNvZGVJ
RCAhPSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgaW5mbyA9IG1fdW5saW5rZWRDYWxscy5hZGQo
KTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsK
KworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQ
b29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOworCisgICAgICAgIEFTU0VSVChtX2NhbGxD
b21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgbV9j
YWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOworICAgICAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnVubGlua2VkQ2FsbExp
bmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9Db25zdGFudDsKKyAgICB9CisgICAg
Y29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7CiAKICAgICAvLyBTUCBo
b2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1l
bnRDb3VudCBpbml0aWFsaXplZC4KLSAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBtX2NvZGVCbG9j
ay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7Ci0gICAgdWludDMyX3QgbG9jYXRpb25CaXRz
ID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRzKCk7CisgICAgdWludDMyX3QgbG9j
YXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lz
dGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQpKTsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNhbGxlZS4KQEAg
LTIzNCwxNiArMjUyLDEyIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0
aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZv
SW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9w
Y29kZUlEKSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENv
bXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5
dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCisgICAgaWYgKGNvbXBpbGVUYWlsQ2Fs
bChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgsIGluZm9Db25zdGFudCkpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIGxvYWRDb25zdGFudChpbmZvQ29uc3RhbnQsIHJlZ1QyKTsKICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhzID0g
aW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxs
TGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIs
IFsmXSB7CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAg
ICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKICAgICAgICAgfSk7CkBAIC0yNTMsMTQg
KzI2NywxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRGYXN0
UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzKTsK
KyAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAg
ICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
LSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIHJlc2V0U1AoKTsKIAogICAg
IGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KQEAgLTI3MywyMSArMjg2LDIwIEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMp
OworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7Cisg
ICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlzLCByZWdUMik7
CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxs
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CisgICAgcmVzZXRTUCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBA
IC0zOTUsMTcgKzQwNywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0
IEluCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMt
Pm5leHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdp
c3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29k
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlm
aWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
cmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNl
cnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFw
cGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0
R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQpAQCAtNDE2
LDEwICs0NDIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNr
cG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEdQ
UlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAg
bm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsKICAgICBub3RP
YmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBAIC00MzIsMTkg
KzQ1NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAg
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JHUFIsIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0Jp
dHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRlcmF0b3JHUFIs
IGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBhdXRvIGRvbmUg
PSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3Vt
ZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0
SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CkBA
IC00NTIsNyArNDc0LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29u
cwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJh
dG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKICAgICAgICAg
c3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5hcnJvdzogcmV0
dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0OTEsNzkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1bXAgZmFzdENh
c2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAK
ICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0ZUFkZHJlc3Mo
Jm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAgbG9hZDhGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVy
YXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rl
cygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4o
SXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShy
ZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRp
b25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rlcygp
KTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIC8v
IGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAgICBH
UFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1Qy
OwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3aWxs
IGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2YWx1
ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJl
ZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2Ji
ZXJSZWdpc3RlcjsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7
CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChp
dGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZh
bHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdz
LmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0
R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkp
LCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwg
SlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSks
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIs
IEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29s
OjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5l
ZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAgICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwog
ICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAgICAgewotICAg
ICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0g
cmVnVDM7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9uZUdQUiwgaXRlckNh
bGxSZXN1bHRHUFIpOworICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRjaEFs
bG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRj
aEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gy
ID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVn
IGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAg
ICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7
Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBK
U1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1Qx
LCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICAgICAg
SnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdz
KGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsKKworICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGJhc2VHUFIpOwogCiAg
ICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFt
ZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCByZWdUNCwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6
R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJ
Q0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIHJl
c2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2
YXRpdmVseSByZXNldCBTUAorICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5
SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRHUFIpOwogCiAg
ICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01MjcsNTkgKzU3Nyw1
NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVt
cCgpKTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisKICAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgIHsKICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAgICAgICBHUFJS
ZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2JqZWN0LmFwcGVu
ZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBw
ZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCiAgICAgICAgIFVuaXF1
ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCk7CiAg
ICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5k
ZXgrK107CiAgICAgICAgIAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRH
UFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyQ2Fs
bFJlc3VsdEdQUikpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0
cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLQotICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCByZWdUMSk7Ci0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOworICAgICAgICBtb3Zl
KGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2Rl
LCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgZG9uZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIo
aWRlbnQpLnJhd0JpdHMoKSk7CisKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGRvbmVWUmVnLCBkb25lR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5s
aW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JS
ZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJn
dW1lbnRHUFIwKTsKICAgICB9CiAKICAgICB7ICAgCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3Zh
bHVlOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCiAgICAgICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgp
OwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJ
ZEluZGV4KytdOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0g
ICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVy
YXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6
bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
dmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQ
UkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgdmFsdWVW
UmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1t
b3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVz
dWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
PGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFy
Z3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwg
dmFsdWVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdC
aXRzKCkpOworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiwxMSBAQAog
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0
LmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOworCiBu
YW1lc3BhY2UgREZHIHsKIGNsYXNzIENvbW1vbkRhdGE7CiBjbGFzcyBKSVRDb2RlOwpAQCAtMTU5
LDEwICsxNjIsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5
cGUgaml0VHlwZSkKICAgICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5l
Q29kZShqaXRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9w
dGlvbnM6OnVzZURhdGFJQygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBy
ZXR1cm4gT3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkBAIC0y
MjMsNiArMjI2LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2hhcmVBdHRyaWJ1dGUgPT0gU2hhcmVBdHRyaWJ1dGU6OlNoYXJlZDsgfQogCisgICAg
dmlydHVhbCBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSB7IHJldHVybiBu
dWxscHRyOyB9CisKIHByaXZhdGU6CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAgICAgU2hhcmVB
dHRyaWJ1dGUgbV9zaGFyZUF0dHJpYnV0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCShyZXZpc2lvbiAyODMwOTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsNyBAQCB2b2lkIEpJVENvbXBpbGF0aW9uS2V5OjpkdW1wKFByaW50U3Ry
ZWFtCiAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIG91dC5wcmludCgiKENvbXBpbGUgb2YgIiwgKm1fcHJvZmlsZWRCbG9jaywgIiB3aXRo
ICIsIG1fbW9kZSwgIikiKTsKKyAgICBvdXQucHJpbnQoIihDb21waWxlIG9mICIsIFJhd1BvaW50
ZXIobV9jb2RlQmxvY2spLCAiIHdpdGggIiwgbV9tb2RlLCAiKSIpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25L
ZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0
aW9uS2V5LmgJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29tcGlsYXRpb25LZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNTcgKzMwLDU2IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBDb2RlQmxvY2tTZXQ7
CitjbGFzcyBKU0NlbGw7CiAKIGNsYXNzIEpJVENvbXBpbGF0aW9uS2V5IHsKIHB1YmxpYzoKICAg
ICBKSVRDb21waWxhdGlvbktleSgpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIp
CisgICAgICAgIDogbV9jb2RlQmxvY2sobnVsbHB0cikKICAgICAgICAgLCBtX21vZGUoSklUQ29t
cGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb24pCiAgICAgewogICAgIH0KICAgICAKICAg
ICBKSVRDb21waWxhdGlvbktleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAg
ICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIpCisgICAgICAgIDogbV9jb2RlQmxvY2sobnVs
bHB0cikKICAgICAgICAgLCBtX21vZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpERkcpCiAgICAgewog
ICAgIH0KICAgICAKLSAgICBKSVRDb21waWxhdGlvbktleShDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhw
cm9maWxlZEJsb2NrKQorICAgIEpJVENvbXBpbGF0aW9uS2V5KEpTQ2VsbCogcHJvZmlsZWRCbG9j
aywgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUpCisgICAgICAgIDogbV9jb2RlQmxvY2socHJvZmls
ZWRCbG9jaykKICAgICAgICAgLCBtX21vZGUobW9kZSkKICAgICB7CiAgICAgfQogICAgIAogICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9wcm9maWxl
ZEJsb2NrICYmIG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlv
bjsKKyAgICAgICAgcmV0dXJuICFtX2NvZGVCbG9jayAmJiBtX21vZGUgPT0gSklUQ29tcGlsYXRp
b25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3Byb2Zp
bGVkQmxvY2sgJiYgbV9tb2RlICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0
aW9uOworICAgICAgICByZXR1cm4gIW1fY29kZUJsb2NrICYmIG1fbW9kZSAhPSBKSVRDb21waWxh
dGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKICAgICB9CiAgICAgCi0gICAgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9wcm9maWxlZEJsb2NrOyB9CiAgICAg
SklUQ29tcGlsYXRpb25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICAK
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSklUQ29tcGlsYXRpb25LZXkmIG90aGVyKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJvZmlsZWRCbG9jayA9PSBvdGhlci5tX3Byb2Zp
bGVkQmxvY2sKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrID09IG90aGVyLm1fY29kZUJsb2Nr
CiAgICAgICAgICAgICAmJiBtX21vZGUgPT0gb3RoZXIubV9tb2RlOwogICAgIH0KICAgICAKICAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnBhaXJJ
bnRIYXNoKFdURjo6UHRySGFzaDxDb2RlQmxvY2sqPjo6aGFzaChtX3Byb2ZpbGVkQmxvY2spLCBz
dGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxKSVRDb21waWxhdGlvbk1vZGU+Ojp0eXBl
PihtX21vZGUpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goV1RGOjpQdHJIYXNo
PEpTQ2VsbCo+OjpoYXNoKG1fY29kZUJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5n
X3R5cGU8SklUQ29tcGlsYXRpb25Nb2RlPjo6dHlwZT4obV9tb2RlKSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIENvZGVC
bG9jayogbV9wcm9maWxlZEJsb2NrOworICAgIC8vIEVpdGhlciBDb2RlQmxvY2sqIG9yIFVubGlu
a2VkQ29kZUJsb2NrKiBmb3IgYmFzbGVsaW5lIEpJVC4KKyAgICBKU0NlbGwqIG1fY29kZUJsb2Nr
OwogICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtX21vZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gMjgzMDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUg
IkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00Niwx
MCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3Qg
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2sp
Ci0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewot
ICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhh
Y2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1Yklu
Zm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVP
cmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRl
eCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdp
c3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZp
bmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1f
c3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24g
PSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9p
ZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xv
d1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0
clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
cjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHVi
SW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisgICAg
aml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGppdC5mYXJKdW1w
KENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIG1fZG9uZSA9IGpp
dC5sYWJlbCgpOworfQorCiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKAogICAg
IENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAg
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTEwLDcgKzExOCw3IEBAIEpJ
VEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRl
SW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVl
UmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiAg
ICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2Fs
bFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQ
UikKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9j
ay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAgICwgbV9pc0xlbmd0aEFj
Y2Vzcyhjb2RlQmxvY2sgJiYgcHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9jay0+dm0oKS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2Uu
cGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAgLTEyMCw2ICsxMjgsMzcgQEAg
dm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIGdlbmVyYXRlRmFz
dENvbW1vbihqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNpemVGb3JMZW5n
dGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQog
CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkSW5saW5l
QWNjZXNzKEpJVCYgaml0LCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBiYXNlLCBHUFJSZWcg
c2NyYXRjaCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRv
bmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nl
c3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJ
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNl
bGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHJvcGVydHkoYmFzZSwgc2NyYXRj
aCwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1w
KCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmZhckp1bXAo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hlZC5s
aW5rKCZqaXQpOworfQorCit2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHVi
SW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRU
eXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0
YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNj
ZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZSwgQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRpZgorCiBKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcigKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIHZhbHVlLCBKU1Zh
bHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BSKQpA
QCAtMTM4LDYgKzE3NywyMCBAQCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2Vu
ZXJhCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJv
cGVydHlBY2Nlc3MoKSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBKSVRHZXRCeUlk
V2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGpp
dCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0g
aml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQ
Uik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJh
c2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6
OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRpZgorCiBKSVRQ
dXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJs
ZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQ
UlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIApAQCAtMTQ5LDYgKzIwMiwzNiBAQCBK
SVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yCiAgICAgbV9zdHViSW5mby0+
dXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNoKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCit2
b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChK
SVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0
YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHVi
SW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2Ny
YXRjaDsKKyAgICBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNj
cmF0Y2gyOworICAgIEdQUlJlZyB2YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFs
dWU7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJ
bmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQ
UiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gp
OworICAgIGppdC5zdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgYmFzZSwgc2Ny
YXRjaCwgc2NyYXRjaDIpOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisgICAg
c2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0
cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0KTsK
KyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRpZgorCiB2b2lkIEpJVFB1dEJ5SWRH
ZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKIHsKICAgICBn
ZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eVJlcGxh
Y2UoKSk7CkBAIC0yMDAsNyArMjgzLDcgQEAgdm9pZCBKSVREZWxCeVZhbEdlbmVyYXRvcjo6Z2Vu
ZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6
dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAg
ICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0
aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1f
c3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQ
dHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93
UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgp
OwpAQCAtMjM2LDcgKzMxOSw3IEBAIHZvaWQgSklURGVsQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVG
YXN0UGEKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAg
IGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BS
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0
clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJ
bmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkp
LCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhK
dW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAg
LTI3MCw3ICszNTMsNyBAQCB2b2lkIEpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBh
CiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
bV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQu
Y2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcp
OworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+
bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklU
U3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9
IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0zMDAs
NiArMzgzLDM0IEBAIHZvaWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXQKICAg
ICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFj
Y2VzcygpKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCit2b2lkIEpJVEluQnlJZEdlbmVyYXRv
cjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHVi
SW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6
OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKwor
ICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKworICAgIEdQUlJl
ZyBiYXNlID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHJlc3Vs
dCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgR1BSUmVnIHNjcmF0Y2gg
PSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJh
c2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGF1dG8gc2tp
cElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3Jh
dGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5ib3hCb29s
ZWFuKHRydWUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOworICAgIGF1dG8gZmluaXNoZWQgPSBq
aXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5m
YXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmlu
aXNoZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRpZgor
CiBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpKSVRJbnN0YW5jZU9mR2VuZXJhdG9yKAogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBwcm90b3R5
cGUsIEdQUlJlZyBzdHViSW5mb0dQUiwKQEAgLTMzMiw3ICs0NDMsNyBAQCB2b2lkIEpJVEluc3Rh
bmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwog
ICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1f
c3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9z
dHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0
cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxz
ZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9k
b25lID0gaml0LmxhYmVsKCk7CkBAIC0zNjgsNyArNDc5LDcgQEAgdm9pZCBKSVRHZXRCeVZhbEdl
bmVyYXRvcjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJ
bmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1Yklu
Zm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSks
IEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAg
ICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9
IGppdC5sYWJlbCgpOwpAQCAtNDA1LDcgKzUxNiw3IEBAIHZvaWQgSklUUHV0QnlWYWxHZW5lcmF0
b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQ
Uik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5t
X3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRT
dHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRk
cmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0
T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAg
IG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQu
bGFiZWwoKTsKQEAgLTQ0MCw3ICs1NTEsNyBAQCB2b2lkIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dl
bmVyYXRvcjo6Z2VuCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwot
ICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJv
dXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
bV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29k
ZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Ns
b3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVs
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODMwOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2lu
Y2x1ZGUgIkpJVE9wZXJhdGlvblZhbGlkYXRpb24uaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25z
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKQEAgLTM4
LDExICszOSwxMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVy
OwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNs
YXNzIFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87
CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsKIGVudW0gY2xhc3MgSklUVHlwZSA6
IHVpbnQ4X3Q7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorc3RydWN0IEJhc2VsaW5lRGVsQnlWYWxS
ZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpy
ZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1Qw
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOwor
fTsKKworc3RydWN0IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86
OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJl
Z1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVn
VDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1Qz
OworfTsKKworc3RydWN0IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIC8vIFdlIHJl
bHkgb24gdGhpcyB3aGVuIGxpbmtpbmcgYSBDb2RlQmxvY2sgYW5kIGluaXRpYWxpemluZyByZWdp
c3RlcnMgZm9yIGEgR2V0QnlWYWwgU3R1YkluZm8uCisgICAgc3RhdGljX2Fzc2VydChiYXNlID09
IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJv
cGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRp
Y19hc3NlcnQocmVzdWx0ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7Cisg
ICAgc3RhdGljX2Fzc2VydChzdHViSW5mbyA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpz
dHViSW5mbyk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUklu
Zm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5m
bzo6cmVnVDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBHUFJJbmZv
OjpyZWdUNTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnMgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6YXJndW1lbnRHUFIyOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3RvID0gR1BSSW5mbzo6YXJndW1lbnRHUFIzOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6YXJndW1lbnRH
UFIxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6bm9u
QXJnR1BSMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86
Om5vbkFyZ0dQUjE7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNf
YXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3Rh
dGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0
eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdU
MjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7
Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgZG9udENsb2JiZXJSZWdpc3RlciA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJh
c2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdGhp
c1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5SWRSZWdpc3Rl
cnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm8gPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6
OnNjcmF0Y2g7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3RydWN0IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2Ug
PSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9
IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BS
SW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUklu
Zm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5m
bzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRp
Y19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KGJyYW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5
KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1Qy
OworfTsKKyNlbmRpZgorCiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90ZWN0
ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDEyICsxNzIsMTgg
QEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZmZXImIGZhc3RQ
YXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAogICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwotICAgIAorCisg
ICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1
YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25l
ZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsgc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJs
b2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0
dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9zbG93UGF0aEJlZ2luOwogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhD
YWxsOwpAQCAtOTgsNyArMjE0LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTVmFsdWVSZWdzIG1fYmFz
ZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fc3RhcnQ7CitwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0aEp1
bXA7CiB9OwogCkBAIC0xMTEsNiArMjI3LDcgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVlUmVn
cyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBl
KTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAg
ICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHVi
SW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogCiBwcml2YXRlOgogICAgIGJvb2wg
bV9pc0xlbmd0aEFjY2VzczsKQEAgLTEyNCw2ICsyNDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIENv
ZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgICAgICBKU1Zh
bHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQ
UlJlZyBzdHViSW5mb0dQUik7CiAKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0
UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIp
OwogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogfTsKIApAQCAt
MTMyLDEwICsyNTAsMTEgQEAgcHVibGljOgogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSA9IGRl
ZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAotICAgICAgICBDb2RlQmxvY2sqLCBK
SVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFzZSwKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gs
IEVDTUFNb2RlLCBQdXRLaW5kKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9y
aWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENh
Y2hlYWJsZUlkZW50aWZpZXIsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdz
IHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0
S2luZCk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7
CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQg
c3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICAKICAgICBWX0pJVE9w
ZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsKIApAQCAtMTYzLDExICsyODIsOSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
IAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92
YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTkxLDggKzMw
OCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxl
ciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAg
IE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAt
MjE2LDggKzMzMSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNy
b0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0
YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwog
fTsKIApAQCAtMjQxLDggKzM1NCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0
UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1Bh
dGhKdW1wOwogfTsKIApAQCAtMjU1LDYgKzM2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNWYWx1
ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKICAg
ICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50
LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogfTsKIAogY2xhc3MgSklUSW5zdGFuY2VPZkdlbmVyYXRv
ciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CkBAIC0yNzcsOCArMzg5
LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExp
bmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CiAKLXByaXZhdGU6Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBh
dGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMDIsMTEgKzQxMiw5IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsK
IAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV9y
ZXN1bHQ7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMzMCw4ICs0
MzgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNz
ZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjgz
MDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDEzICszNSwzOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykK
IHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVD
b25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9w
ZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09w
ZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Cit9CisKK0FM
V0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciBzcmMpCit7
CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KSB7Cisg
ICAgICAgIC8vIEFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0Nl
bGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwot
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7Cisg
ICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiArMTgxLDM2IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRpZgogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5
dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0
ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0
aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNl
bHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0
dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIp
KTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0
YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNzIGZ1
bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVz
cyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5W
YWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVS
ZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0
LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogfQogCiBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICgh
bV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcp
KQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6
OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1f
Ynl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQi
KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4
KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmlu
c3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9i
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1f
Ynl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9j
aGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcg
KzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsK
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0
aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlu
c3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNT
RVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+
aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAx
KTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJ
bmRleCk7CkBAIC0yOTMsMjkgKzMxOCwyOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgp
ICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworICAgIGlmICghc3Jj
LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2Vk
Q29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFz
U3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsK
IH0KIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVl
KQogewogICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwogCi0gICAgLy8gV2UncmUg
aW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVz
dCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3Rv
cmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQogICAgIEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZh
bHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwogICAgIHN0b3JlMzIodmFs
dWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwogICAgIHN0b3Jl
MzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgogfQor
I2VuZGlmCiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8
c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9m
aWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRP
cGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsNDEgKzM0OCwzNyBAQCBpbmxp
bmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKyNpZiBVU0UoSlNW
QUxVRTY0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVlUmVn
cyB2YWx1ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRh
LCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOwotfQogCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAg
cHRyZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29k
ZT4obV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9m
Rmlyc3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRh
dGFHUFIsIG9mZnNldCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGlu
ZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEdQ
UlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lk
IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEdQ
UlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
SlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CiB9CiAjZW5kaWYKIAotaW5saW5lIHZvaWQg
SklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBB
cnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQordGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZmX3Qgb2Zmc2V0
T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BS
KQogewogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgbG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIGFycmF5UHJvZmls
ZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0
YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKICAgICB9
CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJl
Z2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQg
c2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJ
VDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29k
ZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYg
KHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhcnJheVByb2ZpbGVHUFIs
IEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpKTsKLSAgICB9Cisg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFz
dFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3JhdGNoR1BSKTsKIH0KIAogQUxXQVlTX0lO
TElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBz
cmMpCkBAIC0zODAsNyArNDAxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRS
ZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIg
cmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsK
LSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVy
KHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wp
LCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcp
LCB2YWx1ZSk7CkBAIC00OTYsNyArNTE3LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUo
VmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25v
d25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYg
KHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAg
ICAgICBlbHNlCkBAIC01MDYsNyArNTI3LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNs
b3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAoIW1f
Y29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcp
KSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0LDExICs1MzUsNiBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewot
ICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
SW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50
SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdp
c3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU2MCwxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0
aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKICAgICBpZiAoc3JjLmlzQ29u
c3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwotICAgICAgICBl
bHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50T3duZWRCeVVu
bGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAgbW92ZShJbW02
NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3QpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC01NjYsMTEgKzU4Miw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRH
ZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20p
CiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNTk1LDcgKzYwNiw3
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKIAogQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVn
LCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3du
Q2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHZSZWcpKQogICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAtNjM3LDMwICs2NDgsNyBAQCBBTFdB
WVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7CiAgICAgaWYgKHRhcmdldCkK
ICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPm91dE9mTGlu
ZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1BTFdBWVNfSU5MSU5FIEdldFB1dEluZm8g
SklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSBieXRlY29kZSkKLXsKLSAgICB1bnNp
Z25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQgKyAxOyAvLyBIYXNoTWFwIGRvZXNuJ3Qg
bGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkR2V0UHV0SW5mb3Mu
ZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdldFB1dEluZm9zLmVuZCgp
KQotICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFsdWUpOwotICAgIEdldFB1
dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2dldFB1
dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBnZXRQdXRJbmZvLm9wZXJh
bmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEJp
bmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0aFByb2ZpbGUgSklUOjpjb3BpZWRBcml0
aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0gICAgdWludDY0X3Qga2V5ID0gKHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpICsgMSkgPDwgMzIgfCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0YUlEKTsKLSAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0g
bV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZh
bHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgbV9jb3BpZWRBcml0aFByb2Zp
bGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJuIGFyaXRoUHJvZmlsZTsKKyAg
ICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVj
dGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjgxLDYgKzY2OSw2MCBAQCBB
TFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0dXJuIEVDTUFN
b2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihBZGRy
ZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0
SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQzMkZy
b21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJl
ZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtl
ZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsg
b2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5
dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQ4KEFkZHJl
c3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJ
bk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlwZSB2YWx1ZSwgY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlOCh2YWx1ZSwgQWRkcmVz
cyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldElu
TWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmUzMlRvTWV0YWRhdGEo
R1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7
CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29k
ZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZz
ZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0
YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHNfbWV0YWRhdGFHUFIsIHJlc3VsdCk7Cit9CisK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihBZGRy
ZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvbnN0YW50SW5kZXgp
ICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRHbG9iYWxP
YmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9nbG9iYWxPYmplY3RD
b25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvZGVC
bG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BSUmVnIHJlc3VsdCkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOworICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZm
ZXIoKSksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgY29uc3RhbnQudG9D
b25zdGFudEluZGV4KCkgKiBzaXplb2Yodm9pZCopKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDk2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVj
dGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0
YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBzaXplX3Qg
YWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUt
PmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JG
b3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwpAQCAtMTEwLDcgKzEx
MCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEkKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVj
dEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CkBAIC0xMjcs
NyArMTI3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAg
IGVtaXRMb2FkUGF5bG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAgICAgLy8gV2UgZG9u
J3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgogICAg
IEp1bXAgaGFzSW5zdGFuY2VWYWx1ZU5vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKGhhc0lu
c3RhbmNlVmFsdWUpOwotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0
cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVt
cCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Q
cm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwogCiAgICAgLy8gV2Uga25vdyB0aGF0
IGNvbnN0cnVjdG9yIGlzIGFuIG9iamVjdCBmcm9tIHRoZSB3YXkgYnl0ZWNvZGUgaXMgZW1pdHRl
ZCBmb3IgaW5zdGFuY2VvZiBleHByZXNzaW9ucy4KICAgICBlbWl0TG9hZFBheWxvYWQoY29uc3Ry
dWN0b3IsIHJlZ1QwKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0
YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Rv
KTsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKICAgICAg
ICAgcmVnVDIsIC8vIHZhbHVlCkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdExvYWRUYWcocHJvdG8s
IHJlZ1QzKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNl
T2ZPcHRpbWl6ZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5m
bygpLCBKU1ZhbHVlUmVncyhyZWdUMCwgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDEp
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRp
bWl6ZSwgZHN0LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJ
bmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QwLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9
CiAKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9j
dXN0b20oCiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWRQ
YXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMik7CiAgICAgZW1pdExvYWQoaGFzSW5zdGFuY2VWYWx1
ZSwgcmVnVDQsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZD
dXN0b20sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMykpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhy
ZWdUNCwgcmVnVDMpKTsKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
fQogICAgIApAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191
bmRlZmluZWQoY28KICAgICAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZTMy
KEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzc4LDcgKzM3OCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bmFtZSA9IGJ5dGVjb2RlLm1fbmFtZTsKICAgICBlbWl0TG9hZFBheWxvYWQoZnVuYywgcmVnVDEp
OwogICAgIGVtaXRMb2FkKG5hbWUsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVn
VDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU2V0RnVuY3Rpb25OYW1lLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
cmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQwOCw3ICs0
MDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAgICAgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CiAgICAg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1
bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXko
dm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00MjIsNyArNDIyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogICAgIEpTVmFsdWVSZWdzIHZhbHVl
KHJlZ1QxLCByZWdUMCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgR1BSUmVn
IHNjcmF0Y2gyID0gcmVnVDM7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCB2YWx1
ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7
CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTQzNyw3ICs0MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25z
dCBJbnN0cnVjCiAKICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBK
dW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwogCkBAIC00NjMs
NyArNDYzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydQogCiAg
ICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSks
IHRhcmdldCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxl
ZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQ
dHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CiAKQEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9u
dWxsKGNvCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJh
bmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7CiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVy
LmlzQ2VsbCgpKTsKQEAgLTU1MiwxMyArNTUyLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9l
cShjb25zdCBJbnN0cnVjdGkKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJp
bmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1Qw
LCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1f
cHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwogICAgIHN0
b3JlUmVzdWx0LmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdl
bmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5l
cmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9y
ZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CkBAIC01OTEsMTQgKzU5MSwxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyhW
ZWN0b3I8U2xvCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1Qy
KSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVy
byA6IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdldCk7CiAgICAgZG9uZS5hcHBlbmQo
anVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQo
Z2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlz
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9m
aWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMih0eXBlID09IENvbXBpbGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDogWmVybywgcmV0
dXJuVmFsdWVHUFIpLCBqdW1wVGFyZ2V0KTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKQEAgLTY0
MywxMyArNjQzLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QK
ICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAg
IC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlu
Z0VxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwogICAgIHN0b3JlUmVzdWx0LmFwcGVuZChq
dW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChn
ZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9yZVJlc3VsdC5saW5rKHRoaXMp
OwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZXR1cm5WYWx1ZUdQUik7CkBAIC03NjIs
NyArNzYyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzcyLDcgKzc3Miw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03
OTEsNyArNzkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAog
CiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJl
Z1QyLCByZWdUMSk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC04MjMs
NyArODIzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1YwogCiAg
ICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDAsIHJl
Z1QyLCByZWdUMSk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC04NDYs
NyArODQ2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogICAg
IEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7CiAgICAgY29weUNhbGxlZVNhdmVzVG9F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0
TG9hZChieXRlY29kZS5tX3ZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25O
b0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFu
ZGxlcih2bSgpKTsKIH0KIApAQCAtODYyLDcgKzg2Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X251bWJlcihjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwogICAgIGlzSW50
MzIubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2sp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkKICAgICAg
ICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTg4NCw3ICs4ODQsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RyCiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3ROdW1iZXIoYXJndW1lbnRWYWx1ZVJlZ3MsIHJlZ1QyKSk7CiAgICAgaXNCaWdJ
bnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2sp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkKICAgICAg
ICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTkxNSw3ICs5MTUsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmpl
Y3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkKICAgICAgICAg
ZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTkzMSw3ICs5MzEsMTggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVy
KTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBW
TTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKworICAgIC8vIFdoZW4gdGhlIExMSW50IHRocm93cyBhbiBleGNlcHRpb24sIHRoZXJlIGlz
IGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFkeSB0aWVyZWQgdXAKKyAgICAvLyB0aGUgc2FtZSBD
b2RlQmxvY2sgdG8gYmFzZWxpbmUsIGFuZCB3ZSdsbCBjYXRjaCB0aGUgZXhjZXB0aW9uIGluIHRo
ZSBiYXNlbGluZSBKSVQgKGJlY2F1c2UKKyAgICAvLyB3ZSB1cGRhdGVkIHRoZSBleGNlcHRpb24g
aGFuZGxlcnMgdG8gcG9pbnQgaGVyZSkuIEJlY2F1c2UgdGhlIExMSW50IHVzZXMgYSBkaWZmZXJl
bnQgdmFsdWUKKyAgICAvLyBpbnNpZGUgc19jb25zdGFudHNHUFIsIHRoZSBjYWxsZWUgc2F2ZXMg
d2UgcmVzdG9yZSBhYm92ZSBtYXkgbm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgcmVnaXN0ZXIuCisg
ICAgLy8gU28gd2UgcmVwbGVuaXNoIGl0IGhlcmUuCisgICAgeworICAgICAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZz
ZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworICAgIH0KIAogICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNl
cHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24g
PSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTU0LDcgKzk2NSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1
bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAg
ICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRh
Lm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAg
ICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJB
dENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTk5Niw4ICsxMDA3
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIFZpcnR1
YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNy
ZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRj
aCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9z
d2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRj
aFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRj
aFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5s
aW5rZWRUYWJsZSk7CiAKQEAgLTEwMjMsMTMgKzEwMzQsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBi
eXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0
Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3Qg
VW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5s
aW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2Zp
bGVkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBT
aW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5
dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAg
ICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKICAgICBlbWl0
TG9hZChzY3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUu
bV9taW4pOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3du
S2V5VHlwZSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOwogICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIApAQCAtMTA0MSwxMyArMTA1Miwx
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3Jl
YXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNo
IHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0
cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFN0cmlu
Z0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPnVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAg
bV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRl
eCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRUYWJs
ZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAogICAgIGVtaXRMb2FkKHNjcnV0aW5l
ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmlu
Z1dpdGhVbmtub3duS2V5VHlwZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgbV9wcm9maWxlZENvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgpOwog
ICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIApAQCAtMTA2OCw3ICsx
MDc5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8v
IEV2ZW4gdGhvdWdoIEpJVCBjb2RlIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3Vy
IGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZv
aWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBp
bmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIGZvciAoaW50IGkgPSBDb2RlQmxvY2s6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaSA8IG1fY29kZUJs
b2NrLT5udW1WYXJzKCk7ICsraSkKKyAgICBmb3IgKGludCBpID0gQ29kZUJsb2NrOjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkgPCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5udW1WYXJzKCk7ICsraSkKICAgICAgICAgZW1pdFN0b3JlKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGkpLCBqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpJVFNsb3dQYXRoQ2FsbCBz
bG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW50ZXIpOwpA
QCAtMTA4Nyw3ICsxMDk4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IElu
c3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0g
Ynl0ZWNvZGUubV9jYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRG
dW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxl
ZVJlZyA9IHJlZ1QwOwpAQCAtMTEyMiw3ICsxMTMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3Jl
YXRlX3RoaXMoY29uc3QgSW5zdAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgU3RydWN0dXJlSUQqIGNhY2hl
ZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHRoaXNSZWdpc3RlciA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCkBAIC0xMTQ1LDcg
KzExNTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1CiB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24g
PSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1By
b2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTIzOSw3ICsx
MjUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIGVt
aXRMb2FkVGFnKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMSk7CiAgICAgSlNWYWx1ZVJlZ3Mg
dGhpc1JlZ3MocmVnVDEsIHJlZ1QyKTsKICAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tl
dFJlZywgdGhpc1JlZ3MsIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRS
ZWcsIHRoaXNSZWdzLCByZWdUMywgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrKSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9u
IDI4MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDExICs1NCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29u
c3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3Jj
OwogCiAgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBpZiAoIXZhbHVlLmlzTnVt
YmVyKCkpCi0gICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
dmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobV9w
cm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMp
KSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoc3JjKTsKICAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0
KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtODcsMzcgKzkwLDM1IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJ
bnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1l
dGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90
IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJl
LT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9y
Rm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlv
blNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIAogICAgIFJlZ2lz
dGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSBy
ZWdUMTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKyAgICBSZWdpc3RlcklE
IHN0cnVjdHVyZVJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3Rh
bnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1
dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxpemVJ
bmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAg
ICAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2Vz
KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Ci0gICAg
fQorICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0
YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0ckZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BOZXdPYmplY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZk9iamVj
dEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZT
dHJ1Y3R1cmUoKSwgc3RydWN0dXJlUmVnKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAg
ICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRv
clJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Cisg
ICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShy
ZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisKKyAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBSZWdp
c3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QzOworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9v
YmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOworICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCks
IHN0cnVjdHVyZVJlZyk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsK
IH0KIApAQCAtMTMxLDcgKzEzMiw4IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNf
aW5zdGFuY2UKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIHJl
Z1QwKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJ
bnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFu
Y2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1
ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZT
RVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5j
dGlvbikpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1Qw
KTsKIApAQCAtMTU0LDMwICsxNTYsMzggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihj
b25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CiAKLSAg
ICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0
aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBz
aW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNl
IGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3RvLCByZWdUMSk7CisgICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFs
dWU7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm90b0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6cHJvdG87CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3RvLCBwcm90b0dQUik7CiAgICAgCiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90
byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkg
dGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSwgcHJvdG8pOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1
ZUdQUiwgdmFsdWUpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90b0dQUiwg
cHJvdG8pOwogCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVzdWx0Ci0gICAgICAgIHJlZ1QyLCAv
LyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAgICAgICAgcmVnVDUsCi0gICAgICAg
IHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgcmVzdWx0R1BSLAorICAgICAgICB2YWx1ZUdQUiwK
KyAgICAgICAgcHJvdG9HUFIsCisgICAgICAgIHN0dWJJbmZvR1BSLAorICAgICAgICBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxLCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnNjcmF0Y2gyKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
ID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBt
X2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0lu
ZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJl
U3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJ
bmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9pbnN0
YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKKwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKIH0KIApAQCAtMTkyLDE0ICsyMDIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2YoY29uc3QgSQogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24g
PSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnZW4uc3R1YkluZm8oKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwLCByZWdUMiwgcmVnVDEpOwotICAgIH0gZWxzZQotICAg
ICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJl
c3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2Vv
ZlJlZ2lzdGVyczo6c3R1YkluZm8gPT0gYXJndW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWUgPT0gYXJndW1lbnRHUFIyKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG8gPT0gYXJn
dW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9h
ZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQ
UjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGlt
aXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9m
X2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0yNDAsNyArMjQ5LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjbwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJl
Z1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
MSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM4
Myw5ICszOTIsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qCiB9
CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5l
cmF0b3IoVk0mKQogewotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
ICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBqaXQuZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOwpAQCAtNDExLDcgKzQyMCw2IEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKIAogICAgIGlmIChkc3QgIT0gc3JjKQogICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
cHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00
MzQsOSArNDQyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCAK
IHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Z1bmN0aW9uLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX25hbWUsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNl
dEZ1bmN0aW9uTmFtZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9m
dW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3Vt
ZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQ2NSw4
ICs0NzQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gx
ID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJv
b2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1w
KGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwg
SlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFy
Z2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVl
SXNGYWxzZXlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVt
cChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDgwLDcgKzQ5MSw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2
bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUg
PSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC01MTks
NyArNTMwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1YwogICAg
IC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsK
ICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFs
LCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDAp
LCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBq
dW1wKCk7CiAKQEAgLTU0Myw3ICs1NTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwo
Y29uc3QgSW5zdHJ1CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGFkZEp1bXAo
YnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwog
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdU
MCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTU4
MiwxNSArNTkzLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY28K
IHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbmVxUHRyPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwot
ICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUu
bV9zcGVjaWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Ci0gICAg
c3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLm1faGFzSnVtcGVkKTsKKyAgICBsb2Fk
Q29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAg
IENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNvZGUsIE9wSm5l
cVB0cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVtcCgp
LCB0YXJnZXQpOwogICAgIGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC02MjUsOCArNjM0LDEwIEBA
IHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRy
dXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFs
T2JqZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxz
ZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTY0MCw3ICs2NTEsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
ICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIEND
YWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNjk1LDcgKzcwNiw4IEBA
IHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CiAg
ICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTcxMSw3ICs3MjMsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6b3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB0aHJvd25WYWx1
ZUdQUiA9IGFyZ3VtZW50R1BSMTsKQEAgLTcyMCw3ICs3MzIsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JF
R0lTVEVSUyA+IDAKICAgICBqaXQubG9hZFB0cigmdm0udG9wRW50cnlGcmFtZSwgYXJndW1lbnRH
UFIwKTsKLSAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXJJbXBsKGFyZ3VtZW50R1BSMCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKGFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwpAQCAtOTA4LDcgKzkyMCw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW4KIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogfQogCkBAIC05MTgsNyArOTMxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0
ZXEoY29uc3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMiwgcmVn
VDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC05MzEsNyArOTQ1LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydQogICAgIAogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQog
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTUxLDcgKzk2
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHIKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwogICAgIGlzQmlnSW50LmxpbmsodGhp
cyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
Z1QwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQogICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdFZSZWcpOwogfQpAQCAtOTc4LDcgKzk5Miw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3RvX29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7
CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3RWUmVnKTsKIH0KQEAgLTk5Myw3ICsxMDA3LDE4IEBAIHZvaWQgSklUOjplbWl0X29w
X2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNh
bGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZv
ckNhdGNoT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVy
T2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBX
aGVuIHRoZSBMTEludCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0
IHdlJ3ZlIGFscmVhZHkgdGllcmVkIHVwCisgICAgLy8gdGhlIHNhbWUgQ29kZUJsb2NrIHRvIGJh
c2VsaW5lLCBhbmQgd2UnbGwgY2F0Y2ggdGhlIGV4Y2VwdGlvbiBpbiB0aGUgYmFzZWxpbmUgSklU
IChiZWNhdXNlCisgICAgLy8gd2UgdXBkYXRlZCB0aGUgZXhjZXB0aW9uIGhhbmRsZXJzIHRvIHBv
aW50IGhlcmUpLiBCZWNhdXNlIHRoZSBMTEludCB1c2VzIGEgZGlmZmVyZW50IHZhbHVlCisgICAg
Ly8gaW5zaWRlIHNfY29uc3RhbnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdlIHJlc3RvcmUgYWJv
dmUgbWF5IG5vdCBjb250YWluIHRoZSBjb3JyZWN0IHJlZ2lzdGVyLgorICAgIC8vIFNvIHdlIHJl
cGxlbmlzaCBpdCBoZXJlLgorICAgIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFu
dFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKKyAgICB9CiAKICAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFi
bGUsICZ2bSgpKTsKICAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKQEAgLTEwMTEsMjMgKzEwMzYsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGFyZ3VtZW50IHR5cGUg
cHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwotICAg
IGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJv
ZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CisgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9m
aWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKICAgICBhdXRvIHNraXBPU1JF
bnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25I
YW5kbGVyUHRyVGFnKTsKICAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVm
ZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2go
WyZdIChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKLSAgICAgICAg
ICAgIEpTVmFsdWVSZWdzIHJlZ3MocmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpLCByZWdzKTsK
LSAgICAgICAgfSk7Ci0gICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCkBAIC0x
MDUzLDggKzEwNjYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3Ry
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwog
CiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNr
IHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxv
Y2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5h
cHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9m
ZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVD
VElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIApAQCAtMTA4MSwxMyArMTA5NCwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNj
cnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFi
bGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4K
LSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxl
SW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFy
YWN0ZXIpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCB0YWJsZUluZGV4LCB1
bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBh
cmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21p
bik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCkBA
IC0xMDk5LDIwICsxMTEzLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29u
c3QgSW4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGlu
ZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNv
bnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
U3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0
YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRl
eCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykp
OwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgdGFibGVJbmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJU
YWcpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRGVidWc+KCk7Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVl
c3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSksIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVi
dWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25EZWJ1ZywgJnZtKCksIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9k
ZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CkBAIC0x
MTMzLDcgKzExNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0
CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdU
MCwgcmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAg
LTExNDgsNyArMTE2NCw2IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1
Y3QKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX25l
cV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTY2LDcg
KzExODEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAg
ICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBlbWl0TG9hZFN0cnVj
dHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwg
cmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKQEAgLTEx
ODgsMTIgKzEyMDMsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXpl
IG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRv
IGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBh
bmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9j
ay0+bnVtVmFycygpOworICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51
bVZhcnMoKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZm9yIChzaXplX3Qg
aiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpOyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChqKSk7CiAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2Nr
KTsKKyAgICAKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDApOworICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDApOwogCiAgICAgZW1pdEVudGVy
T3B0aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCkBAIC0xMjEyLDcgKzEyMjksNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50
ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0
ZXJzOjplYnApOwpAQCAtMTMxMCwyMyArMTMyNywxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
c2NvcGUoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVj
dHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOwogCiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlw
ZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlE
LCByZWdUMik7CisgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRvVGhpczo6TWV0
YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxK
U0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAgICBS
ZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcg
PSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAtMTM0Miw3ICsx
MzU1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxv
YWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90
eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBhbGxv
Y2F0b3JSZWcpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJl
RGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwogCi0gICAgbG9hZFB0cihjYWNoZWRGdW5jdGlv
biwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wQ3JlYXRlVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkQ2FsbGVlKCksIGNhY2hlZEZ1
bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIo
RXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRp
cGxlQ2FsbGVlT2JqZWN0cygpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFs
LCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CiAgICAgaGFzU2Vlbk11bHRpcGxlQ2Fs
bGVlcy5saW5rKHRoaXMpOwpAQCAtMTM3Miw3ICsxMzg1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsg
cmV0dXJuVmFsdWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTM4Miw3ICsxMzk2LDggQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4o
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBy
ZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDAp
OwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFs
dWVHUFIgfSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmV0
dXJuVmFsdWVHUFIpOwpAQCAtMTM5NCw3ICsxNDA5LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2plcShjb25zdCBJbnN0cnVjdAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEp
OwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MDQsNyArMTQyMCw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1Qw
LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtMTQxOCwxMCArMTQzNSwxMSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNv
bnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
aGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlciho
YXNJbnN0YW5jZVZhbHVlLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0
YW5jZU9mQ3VzdG9tLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25z
dHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEds
b2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIz
KTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZh
bHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiB9CkBAIC0xNDMwLDcgKzE0NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oCiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVh
cmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50
c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV91
bmxpbmtlZENvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1
cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0
aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWRQdHIocHRyLCByZWdUMCk7CiAg
ICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCByZWdUMCwgVHJ1
c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkp
OwpAQCAtMTQ0MCw3ICsxNDU4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0
IEluc3RydQogI2Vsc2UKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICNlbmRpZgotICAgICAg
ICBtb3ZlVmFsdWUobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZXN1bHRSZWdzKTsKKyAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdzLmdwcigpKTsKICAgICAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTQ1Myw4ICsxNDcxLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogCiAgICAgLy8gRW1pdCB0
aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsK
KyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8sIFRy
dXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwK
LSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhl
Y3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIApAQCAtMTUwOSw3ICsx
NTI4LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcywgYXJndW1lbnRH
UFIwKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFy
Z3VtZW50R1BSMzsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTE1MjIsNyArMTU0Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9j
aGVja190cmFwcyhjb25zdCAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9jaGVja190cmFwc19oYW5kbGVy
R2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMg
aml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7
CkBAIC0xNTY0LDM0ICsxNTg0LDM2IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29u
c3QgSW5zdHIKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d1JlZ2V4cD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZ2V4cCA9IGJ5dGVjb2RlLm1fcmVnZXhwOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
cmVnZXhwKSkpOworICAgIEdQUlJlZyBnbG9iYWxHUFIgPSBhcmd1bWVudEdQUjA7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChnbG9iYWxHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
UmVnZXhwLCBnbG9iYWxHUFIsIGpzQ2FzdDxSZWdFeHAqPihtX3VubGlua2VkQ29kZUJsb2NrLT5n
ZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVl
R1BSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmND
b21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKdW1w
IGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3Bl
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBh
cmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29w
ZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVu
dEdQUjEpOwogI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9IG1fY29k
ZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOworICAgIGF1dG8g
Y29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5j
dGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRl
Y29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKKyAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3Vt
ZW50R1BSMik7CiAKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJh
dG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNf
ZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBk
c3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX25ld19hc3lu
Y19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5
bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3Qs
ICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjIx
LDIzICsxNjQzLDI0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW4K
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7
CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7Cisg
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAjZW5k
aWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVu
Y3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByLCBi
aXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5j
dGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwog
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAgaWYgKG9wY29kZUlE
ID09IG9wX25ld19mdW5jX2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdG
dW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVu
Y19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5
bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24s
IGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICB9CiB9CiAKQEAg
LTE2NjQsMjkgKzE2ODcsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRv
cl9mdQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUubV9hcmd2Owog
ICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
dmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2Zp
bGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAg
ICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7Cisg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIyKTsKKyAgICBtYXRlcmlhbGl6
ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXk6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXpl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLAotICAgICAgICAmbWV0YWRhdGEubV9hcnJh
eUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01l
dGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFy
cmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNpemVJbmRleCwgYXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRH
UFIyKTsKICNlbHNlCisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2Rl
LCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblBy
b2ZpbGUoKSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVnVDEsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAg
Jm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywgcmVnVDIsIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTQsOCArMTcxOCwx
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiAKIHZvaWQgSklU
OjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogeworICAgIG1faXNTaGFyZWFibGUgPSBmYWxzZTsKKwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBUeXBlTG9j
YXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVh
bFJlZ2lzdGVyOwogCkBAIC0xNzc3LDIwICsxODAzLDI1IEBAIHZvaWQgSklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVn
VDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlz
IGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0g
cmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0
IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJl
Z1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVn
LCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIHsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lz
dGVyLgorICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICAgICAgZW5zdXJl
U2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBz
Y3JhdGNoMlJlZyk7CisgICAgfQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV90aGlzVmFsdWUsIHJlZ1QyKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQ
YWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNr
ZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUMSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVF
NjQpCiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisgICAgbV9pc1NoYXJlYWJsZSA9IGZhbHNl
OworCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxl
Q29udHJvbEZsb3c+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2Nh
dGlvbiA9IG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgYmFzaWNCbG9ja0xvY2F0aW9uLT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMpOwpAQCAtMTg2
MCw3ICsxODkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElucwog
ICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCByZXN1bHRSZWdzKTsKIAogICAgIGRvbmUubGlu
ayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dFJlZ3MpOwogfQogCkBAIC0xODg2LDcgKzE5MTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cHJvdG90eXBlX29mKGNvbnN0CiAgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdz
LnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3MpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI4MzA5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRl
ICJBcnJheUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGlu
ZXMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xv
d1BhdGhzSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR09T
UkVudHJ5LmgiCkBAIC0yODU1LDcgKzI4NTYsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+
c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0ID0gbGlua2VkVGFibGUubV9j
dGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKQEAgLTI4ODAsNyArMjg4MSw3IEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2gKICAgICBKU1ZhbHVlIGtleSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkS2V5KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAKLSAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAg
Y29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkubV9taW4gPT0gbWluKTsKICAgICB2b2lkKiBy
ZXN1bHQ7CiAgICAgaWYgKGtleS5pc0ludDMyKCkpCkBAIC0yOTAzLDcgKzI5MDQsNyBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB2b2lkKiByZXN1bHQ7Ci0gICAgY29u
c3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwogCiAgICAgaWYgKGtleS5pc1N0cmluZygpKSB7CiAgICAgICAgIFN0cmluZ0ltcGwqIHZh
bHVlID0gYXNTdHJpbmcoa2V5KS0+dmFsdWUoZ2xvYmFsT2JqZWN0KS5pbXBsKCk7CkBAIC0yOTE5
LDcgKzI5MjAsNiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKLSNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25S
ZXNvbHZlU2NvcGVGb3JCYXNlbGluZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0cnVjdGlvbiogcGMpKQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKQEAgLTI5NzEsNyArMjk3MSw2IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25SZXNvbHYKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
b2x2ZWRTY29wZSk7CiB9Ci0jZW5kaWYKIAogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkdldEZyb21TY29wZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBJbnN0cnVjdGlvbiogcGMpKQogewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAs
OSArMjkwLDcgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRQcgogSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlU
eXBlLCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUga2V5LCBzaXplX3Qg
dGFibGVJbmRleCwgaW50MzJfdCBtaW4pKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKFZNKiwgRW5jb2RlZEpT
VmFsdWUga2V5LCBzaXplX3QgdGFibGVJbmRleCwgaW50MzJfdCBtaW4pKTsKIEpTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBj
aGFyKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUga2V5LCBzaXplX3QgdGFibGVJ
bmRleCkpOwotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25SZXNvbHZlU2NvcGVGb3JCYXNlbGluZSwgRW5jb2RlZEpTVmFsdWUs
IChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBDKSk7Ci0jZW5k
aWYKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBFbmNv
ZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2Rl
UEMpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUHV0VG9TY29wZSwgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCShyZXZpc2lvbiAyODMwOTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBsYW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw3ICs4NywxMiBAQCBhdXRvIEpJVFBsYW46OnRpZXIoKSBjb25zdCAtPiBUaWVyCiAK
IEpJVENvbXBpbGF0aW9uS2V5IEpJVFBsYW46OmtleSgpCiB7Ci0gICAgcmV0dXJuIEpJVENvbXBp
bGF0aW9uS2V5KG1fY29kZUJsb2NrLT5iYXNlbGluZUFsdGVybmF0aXZlKCksIG1fbW9kZSk7Cisg
ICAgSlNDZWxsKiBjb2RlQmxvY2s7CisgICAgaWYgKG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1v
ZGU6OkJhc2VsaW5lKQorICAgICAgICBjb2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRD
b2RlQmxvY2soKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrLT5i
YXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgcmV0dXJuIEpJVENvbXBpbGF0aW9uS2V5KGNvZGVC
bG9jaywgbV9tb2RlKTsKIH0KIAogYm9vbCBKSVRQbGFuOjppc0tub3duVG9CZUxpdmVBZnRlckdD
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjgzMDk2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTks
NyArNTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0CiAKICAg
ICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0
ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dEdldHRlckJ5SWQsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCByZWdUMSwgbV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgp
LCBvcHRpb25zLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcyLDcgKzcyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdAogCiAgICAgZW1pdExv
YWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdU
Myk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0
eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeUlkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9u
cywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODcsNyArODcsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAgZW1pdExvYWRQ
YXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCByZWdUMyk7
CiAgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDQpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJl
Z1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGVz
LCByZWdUMywgcmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0
dGVyLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmls
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlcywgcmVn
VDMsIHJlZ1Q0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEwMSw3ICsxMDEsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdExvYWRQYXls
b2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEsIHJlZ1QwKTsK
ICAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdU
MiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmli
dXRlcywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE1LDcgKzExNSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0TG9hZFBh
eWxvYWQoYmFzZSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMSwgcmVnVDAp
OwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJl
Z1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgbV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRy
aWJ1dGVzLCByZWdUMyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOwpAQCAtMTMxLDggKzEzMSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChj
b25zdCBJbnN0cnUKICAgICBlbWl0TG9hZChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJl
Z3MucGF5bG9hZEdQUigpKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwg
YmFzZVJlZ3MudGFnR1BSKCkpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwK
KyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2Zp
bGVkQ29kZUJsb2NrLCAqaWRlbnQpLAogICAgICAgICBiYXNlUmVncywgcmVzdWx0UmVncywgSW52
YWxpZEdQUlJlZywgcmVnVDQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtMTY2LDcgKzE2Niw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwocHJvcGVydHksIHByb3BlcnR5UmVncy50YWdHUFIoKSk7CiAKICAgICBK
SVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIGJhc2VSZWdz
LCBwcm9wZXJ0eVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKIAogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTIwMiw3ICsyMDIsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X3ZhbChjb25zdCBJCiAKICAgICBlbWl0TG9hZDIoYmFzZSwg
YmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSwgcHJvcGVydHksIHByb3Bl
cnR5UmVncy50YWdHUFIoKSwgcHJvcGVydHlSZWdzLnBheWxvYWRHUFIoKSk7CiAKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIEpT
VmFsdWVSZWdzKGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkpLCBKU1Zh
bHVlUmVncyhwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5wYXlsb2FkR1BSKCkp
LCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVk
SW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIEpTVmFsdWVSZWdzKGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCkp
LCBKU1ZhbHVlUmVncyhwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5wYXlsb2Fk
R1BSKCkpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIAogICAgIGJveEJv
b2xlYW4ocmVnVDAsIHJlc3VsdFJlZ3MpOwpAQCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OwpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29u
c3QgSW4KIAogICAgIGVtaXRMb2FkKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5w
YXlsb2FkR1BSKCkpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
ZWxldGVCeUlkT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpLCBUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUsIFRy
dXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgYmFzZVJlZ3MsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKICAgICBib3hCb29sZWFu
KHJlZ1QwLCByZXN1bHRSZWdzKTsKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwpAQCAtMjQ5LDcgKzI0OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV92YWwoY29uc3QgSW5zdHIKICAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QxKTsKICAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBw
cm9maWxlLCByZWdUNCk7CiAgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKICAgICAgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUNCk7CkBA
IC0yNTcsNyArMjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cgogICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAg
bV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBl
OjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRTdG9y
ZShkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAgfQogfQpAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEkKICAgICBpZiAoaGFzQW55U2xvd0Nh
c2VzKGl0ZXIpKSB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlWYWw+KCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jayk7CiAgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4XTsKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0g
ICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJv
ZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSk7CisgICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIH0KIH0KQEAgLTMwNSwxMyArMzA1LDEzIEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJVEdldEJ5VmFs
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCisgICAgICAgIG1fcHJvZmlsZWRDb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5h
bWUsCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgYmFz
ZUdQUiwgcHJvcGVydHlHUFIsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BS
KCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtMzMwLDcgKzMzMCw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKIAogICAgIGF1dG8gYmFzZUdQ
UiA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgYXV0byBwcm9wZXJ0eUdQUiA9IEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTM0OCw3ICszNDgsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCBJbnZhbGlkR1BSUmVnLCBJ
bnZhbGlkR1BSUmVnKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRy
dWU7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwpAQCAtMzc3LDcgKzM3Nyw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKICAgICBKU1ZhbHVlUmVn
cyB2YWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KTsKIAogICAgIGF1dG8gb3BlcmF0aW9uID0gcHV0S2lu
ZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6
ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7Ci0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBnZW4u
c3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBiYXNlUmVncywgcHJvcGVydHlSZWdzLCB2YWx1ZVJlZ3MsIGdlbi5z
dHViSW5mbygpLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC0zOTUsNyArMzk1LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSk7CiAKICAgICBKSVRQcml2YXRl
QnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQs
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgYmFzZVJl
Z3MsIGJyYW5kUmVncywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC00MTgsNyAr
NDE4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKAogICAgIEpJ
VFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nl
c1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4XTsKICAgICArK21fcHJpdmF0ZUJyYW5kQWNjZXNz
SW5kZXg7CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFz
ZVJlZ3MsIGJyYW5kUmVncyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgYnJhbmRSZWdz
KTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQog
CkBAIC00MzUsNyArNDM1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFu
ZChjbwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCBiYXNlUmVncy50YWdH
UFIoKSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVj
a1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFj
Y2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCiAgICAgICAgIGJhc2VSZWdzLCBicmFuZFJlZ3MsIEludmFsaWRHUFJSZWcp
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwpAQCAtNDUyLDcgKzQ1Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9jaGVja19wcml2YXRlX2JyYW4KICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3Im
IGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleF07
CiAgICAgKyttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hl
Y2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7CisgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXpl
LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTQ2NSw3ICs0NjUsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKQEAgLTQ3OCw3ICs0NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RyCiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUNiwg
cmVnVDcpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBtX3Byb2ZpbGVk
Q29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVS
ZWdzKHJlZ1Q1LCByZWdUNCksIHJlZ1Q2LCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
QEAgLTUwNCw3ICs1MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25z
dCBJCiAgICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IEpJVDo6ZWNtYU1vZGUo
Ynl0ZWNvZGUpOwotICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICAgICAgcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKICAgICB9OwogCkBAIC01MjQsNyArNTI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMiwgcmVnVDEs
IHByb3BlcnR5LCByZWdUMywgcmVnVDApOwogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUNSwgcmVn
VDQpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9k
ZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlW
YWxOb25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNT
dHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgp
ID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9u
U3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgZ2VuLnN0dWJJbmZvKCksIHByb2Zp
bGUpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
IH0KQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNv
bnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlH
ZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRMb2FkKGJh
c2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2Us
IHJlZ1QxKTsKQEAgLTU0MiwxMyArNTQyLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRf
YnlfaWQoY29uc3QgSW4KICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywg
QWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJl
Z3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNz
VHlwZTo6VHJ5R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQo
Z2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAg
ZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BS
KCkpOwogfQogCkBAIC01NTgsMTMgKzU1OCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5
X2dldF9ieV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNb
bV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5m
bygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5
SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC01NzUsNyArNTc1LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC01ODMsMTMgKzU4
MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0CiAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShy
ZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJl
Y3QpOworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
cHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdU
MCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Qp
OwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0
UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC01OTksMTMg
KzU5OSwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3By
b2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107
CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
IAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBA
IC02MTQsMTAgKzYxNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9m
aWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAgICAgCiAg
ICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNjMwLDEzICs2MzAsMTMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJ
bnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKKyAgICAgICAgbV9wcm9maWxlZENv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQp
LCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BS
UmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwog
ICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpKTsKIH0KIApAQCAtNjQ2LDEzICs2NDYsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
W21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3Vs
dFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8o
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogfQpAQCAtNjYzLDcgKzY2Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9pZF93aXRoX3RoaXMoY28KICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7Ci0gICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAgICAgCiAgICAg
ZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh0aGlzVlJlZywgcmVn
VDQsIHJlZ1QzKTsKQEAgLTY3MywxMyArNjczLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZF93aXRoX3RoaXMoY28KICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAq
aWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUNCwgcmVnVDMpLCBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbV9wcm9maWxl
ZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRl
bnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUNCwgcmVnVDMpLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBt
X2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwg
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC02ODksMTMgKzY4OSwxMyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdp
dGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRo
aXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAg
ICAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03MTAsMTUgKzcxMCwxNSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3By
b2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKICAgICAK
ICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCB2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsK
ICAgICAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAg
ICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCks
CiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMiksIEludmFsaWRHUFJSZWcsCiAgICAgICAgIHJlZ1QxLCBieXRlY29kZS5tX2Zs
YWdzLmVjbWFNb2RlKCksIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERp
cmVjdCk7CiAgICAgCkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbih0aGlzKTsKIApAQCAtNzQ4LDcgKzc0OCw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBKSVRQdXRC
eUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZEluZGV4KytdOwogICAgIAog
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCi0gICAgICAgIGdlbi5zbG93UGF0aEZ1bmN0
aW9uKCksIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigp
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3By
b2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgCiAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTc1OCwxNCArNzU4LDE0
IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRJbkJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CisgICAgICAgIG1fcHJv
ZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywg
KmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9pbkJ5SWRz
LmFwcGVuZChnZW4pOwpAQCAtNzc5LDEzICs3NzksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luX2J5X2lkKGNvbnN0IElucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21f
aW5CeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJl
c3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkp
OworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1
YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03OTYsNyArNzk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5fYnlfdmFsKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAg
ZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CkBA
IC04MDQsNyArODA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEluc3Ry
dQogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVn
VDQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdz
OjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtODE5
LDE0ICs4MTksMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEpJVElu
QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwogfQpAQCAtODM3LDcgKzgzNyw3IEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0
ZShWaXJ0dWFsUmVnaXN0ZXIKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwg
cmVnVDEpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRH
UFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtODUzLDcgKzg1Myw3IEBAIHZvaWQgSklUOjplbWl0
SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2kKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4g
PSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBlID09IEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6
IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJh
dGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRp
bWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lkIEpJVDo6ZW1pdFZhcklu
amVjdGlvbkNoZWNrKGJvb2wgbmVlCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykKICAgICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNo
cG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5h
ZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZv
aWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0
aCkKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1
YWxSZWdpCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUu
bV9zY29wZTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2
ZVR5cGU7CkBAIC05MTYsMTEgKzkxNiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluCiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7
CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRT
Y29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwog
ICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gs
IHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNv
bHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxM
ZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVn
VDEpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBy
ZWdUMSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJl
Z1QwKTsKICAgICAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CkBAIC05MzEs
NyArOTMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAg
ICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IAogICAgICAgICBjYXNl
IEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBK
U1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9j
ayk7CisgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZENvZGVCbG9jayk7CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKICAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1Qx
KTsKQEAgLTEwMzksNyArMTAzOSw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0
dWFsUmVnaXMKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNv
ZGUubV9zY29wZTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpOwpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSwgZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGVtaXRT
dG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKQEAgLTExNTYsNyArMTE1Niw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb24KIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUs
IGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQpAQCAtMTE5MCw3ICsxMTkwLDcgQEAgdm9pZCBKSVQ6
OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEdldFB1dEluZm8gZ2V0UHV0
SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwpAQCAtMTIwMiw3ICsxMjAyLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICBzd2l0Y2gg
KHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAg
ICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7
IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbi4KICAgICAgICAgICAgIGVt
aXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgICAgICAgICAgCkBAIC0xMjE3LDcgKzEy
MTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAg
IGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwor
ICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKQEAgLTEzMTgsNyArMTMxOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfdG9fc2NvcGUoY29uc3QKICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFk
b25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
CiAgICAgfSBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTEzMzMsNyArMTMzMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2Fy
Z3VtZW50cyhjb24KICAgICBlbWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdUMCk7CiAgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsg
aW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNldCksIHJlc3V0
bFJlZ3MudGFnR1BSKCkpOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVu
dHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikgKyBQYXlsb2FkT2Zmc2V0KSwgcmVzdXRsUmVncy5wYXlsb2FkR1BSKCkpOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1dGxS
ZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spLCByZXN1dGxSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1dGxS
ZWdzLnRhZ0dQUigpLCByZXN1dGxSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTEzNTUsNyAr
MTM1NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QKIHZvaWQg
SklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24g
MjgzMDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDkyICs0OSwxMDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAg
IGlmIChtZXRhZGF0YS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4gT3B0aW9uczo6Z2V0QnlW
YWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkgewotICAgICAgICBhdXRvIG5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jaykubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6
OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKKyAgICAgICAgYXV0byBub3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBu
b3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBzY3JhdGNoR1BS
LCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICAgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKIAotICAg
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeVZhbFJl
Z2lzdGVyczo6cmVzdWx0KTsKIAogICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlc3Vs
dFJlZ3MsIHJlZ1QyKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKwogICAgICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKworICAgICAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlWYWw7Cisg
ICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAg
ICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9v
bC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8p
OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZv
SW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
ICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0lu
ZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4
aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorCisgICAgICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAg
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCByZXN1bHRSZWdzKTsKKyAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVzdWx0UmVncyk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICB9
Ci0KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4KIHZvaWQgSklUOjpnZW5lcmF0
ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgaWYgKGhhc0FueVNsb3dDYXNlcyhp
dGVyKSkgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CisgICAgaWYgKCFoYXNBbnlTbG93Q2FzZXMoaXRlcikpCisgICAgICAgIHJldHVybjsKIAotICAg
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAg
SklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsr
XTsKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZh
bEluZGV4KytdOwogCi0gICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0
YWRhdGEsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcHJvZmlsZSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICBzZXR1cEFyZ3VtZW50KDMsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgQVNT
RVJUKGRlc3RHUFIgIT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOyBtb3Zl
KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIGRlc3RHUFIpOyB9KTsKKyAgICBzZXR1
cEFyZ3VtZW50KDQsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgbW92ZShCYXNlbGluZUdldEJ5VmFs
UmVnaXN0ZXJzOjpwcm9wZXJ0eSwgZGVzdEdQUik7IH0pOworICAgIHNldHVwQXJndW1lbnQoMCwg
WyZdIChHUFJSZWcgZGVzdEdQUikgeyBsb2FkR2xvYmFsT2JqZWN0KGRlc3RHUFIpOyB9KTsKKyAg
ICBzZXR1cEFyZ3VtZW50KDEsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBkZXN0R1BSKTsgfSk7CisgICAgc2V0
dXBBcmd1bWVudCgyLCBbJl0gKEdQUlJlZyBkZXN0R1BSKSB7IG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQ
cm9maWxlKCksIGRlc3RHUFIpOyB9KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXgsIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpKTsKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7Ci0gICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwotICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNl
dCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFT
U0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwog
Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQ
UjQ7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1
bWVudEdQUjQ7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHJlZ1QxOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIw
IHx8ICFpc0FSTTY0KCkpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFy
Z3VtZW50R1BSMSk7Ci0KLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygp
KSwgc3R1YkluZm9HUFIpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHBy
b2ZpbGVHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3df
b3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKLQotICAgICAgICBDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemU7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUp
OwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7IC8vIGFyZzEgYXJnMSBhbHJlYWR5IHVzZWQu
CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRH
UFIwIHx8ICFpc0FSTTY0KCkpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJn
dW1lbnRHUFIxKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OmJhc2UgPT0gcmVnVDApOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHkgPT0gcmVnVDEpOworCisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbWF0ZXJpYWxpemVQ
b2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcGNvZGVUeXBlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BS
KTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotICAgIH0KKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDksNyArMTY0LDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTYwLDgg
KzE3NSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBj
b25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSNTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZUdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFy
Z3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BS
ID09IGFyZ3VtZW50R1BSMSk7CiAKQEAgLTE4NywzNCArMjAyLDQwIEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAg
ICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpy
ZXN1bHQpOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OkdldFByaXZhdGVOYW1lLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0
eUdQUiksIHJlc3VsdFJlZ3MsIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZSwKKyAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZTsK
KyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRD
b25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQo
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVC
YXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBy
ZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIEFTU0VSVChoYXNB
bnlTbG93Q2FzZXMoaXRlcikpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKQEAgLTIyMyw5ICsyNDQs
MTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoYwogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Byb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT4oYnl0ZWNvZGUs
IEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIs
IGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0yMzUs
MjYgKzI1OCwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBh
cmcxIGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHk7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAh
aXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BS
MSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOwotICAgIGVsc2UKLSAg
ICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk7
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0yNjQsNyArMjgxLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRp
b25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2Fs
bEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25z
IGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAg
ICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMzAwLDIxICsz
MTcsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29ucwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7Ci0gICAgR1BSUmVnIGJhc2VHUFIg
PSByZWdUMDsKLSAgICBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKKworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVy
czo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHJp
dmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgYmFzZUdQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgYnJh
bmRHUFIpOwotCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2Up
OwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0
ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHJlZ1QyKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJh
bmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOwor
CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6U2V0
UHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29u
c3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBz
dHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAg
IGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJyYW5kQWNj
ZXNzZXMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVy
IGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdp
c3RlcnMuCkBAIC0zMjQsMTcgKzM0OCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0
ZV9icmFuZChjb25zCiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCBTaG91bGRGaWx0ZXJCYXNl
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
eworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOworCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2Vu
ID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdUMTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBicmFu
ZEdQUik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQ
cml2YXRlQnJhbmQ+KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJn
dW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYnJhbmQs
IGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25TZXRQ
cml2YXRlQnJhbmRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMzQ0LDI0ICszNzMsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9w
cml2YXRlX2JyYW5kKAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1Qx
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVn
aXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGlu
ZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3Bl
cnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uU2V0UHJpdmF0ZUJy
YW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzPjo6dmFsdWUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9u
YW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBw
ZW5kQ2FsbChvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZgogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJh
bmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM3MCwzMyArMzkz
LDQ3IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY28KICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YnJhbmQgPSBieXRlY29kZS5tX2JyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihicmFuZCwgcmVnVDEpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSBCYXNlbGluZVByaXZh
dGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihicmFuZCwgYnJhbmRHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVj
a1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBu
dWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0
ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhicmFuZEdQUiksIHN0dWJJbmZvR1BS
KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtl
ZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6
OkNoZWNrUHJpdmF0ZUJyYW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJy
YW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVj
a19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2Jy
YW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAorICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tQcml2
YXRlQnJhbmQ+KCk7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlKTsKKwogICAgIEpJVFByaXZh
dGVCcmFuZEFjY2Vzc0dlbmVyYXRvciYgZ2VuID0gbV9wcml2YXRlQnJhbmRBY2Nlc3Nlc1ttX3By
aXZhdGVCcmFuZEFjY2Vzc0luZGV4KytdOwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnJhbmRHUFIgPSByZWdU
MTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJy
YW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRl
Y2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPihBZGRyZXNzKGFyZ3Vt
ZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTQwNiwyNCArNDQzLDE4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9jaGVja19wcml2YXRlX2JyYW4KICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb3BlcnR5R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJyYW5kOwogICAg
IHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAg
ICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBl
KG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgRnVu
Y3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+OjpB
cmd1bWVudFR5cGVzPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJy
YW5kT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbF9kaXJlY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNSwzMCArNDY2LDQz
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwg
cmVnVDMpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFs
dWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHByb2ZpbGVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9maWxlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMywg
cmVnVDQpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKKworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHByb2ZpbGVHUFIpOworICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlw
ZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdz
KHJlZ1QyKSwgcmVnVDMsIHJlZ1Q0KTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJl
Z3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHByb2ZpbGVHUFIsIHN0dWJJ
bmZvR1BSKTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAg
ICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0
dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6UHV0QnlWYWw7CisgICAgc3R1YkluZm8t
PnB1dEtpbmQgPSBzdGQ6OmlzX3NhbWVfdjxPcCwgT3BQdXRCeVZhbERpcmVjdD4gPyBQdXRLaW5k
OjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1YkluZm8tPmVjbWFNb2RlID0g
ZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9
IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJ
bmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgg
PSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsK
KworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZv
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0
IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdy
aXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxs
LgpAQCAtNDc0LDE1ICs1MTgsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWU7CiAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBFQ01BTW9kZTo6c3RyaWN0KCk7Ci0g
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gbnVsbHB0cjsKIAogICAgIGF1dG8gbG9hZCA9IFsm
XShhdXRvIGJ5dGVjb2RlKSB7CiAgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAg
ICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICAgICAgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgICAgICBlY21hTW9kZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7Ci0g
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgICAgICBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAgIH07CiAKICAg
ICBpZiAoaXNEaXJlY3QpCkBAIC00OTgsNyArNTM5LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAg
ICAvLyBUaGV5IGFyZSBjb25maWd1cmVkIGluIHRoZSBmYXN0IHBhdGggYW5kIG5vdCBjbG9iYmVy
ZWQuCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0
KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZSksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QzKTsKKyAgICBz
ZXR1cEFyZ3VtZW50KDAsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgbG9hZEdsb2JhbE9iamVjdChk
ZXN0R1BSKTsgfSk7CisgICAgc2V0dXBBcmd1bWVudCgxLCBbJl0gKEdQUlJlZyBkZXN0R1BSKSB7
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgZGVzdEdQUik7IH0pOworICAgIHNldHVwQXJn
dW1lbnQoMiwgWyZdIChHUFJSZWcgZGVzdEdQUikgeyBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCBkZXN0R1BSKTsgfSk7CisgICAgc2V0dXBBcmd1bWVudCgzLCBbJl0gKEdQUlJlZyBk
ZXN0R1BSKSB7IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGRlc3RHUFIpOyB9KTsKKyAg
ICBzZXR1cEFyZ3VtZW50KDQsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBkZXN0R1BSKTsgfSk7CisgICAgc2V0
dXBBcmd1bWVudCg1LCBbJl0gKEdQUlJlZyBkZXN0R1BSKSB7IAorICAgICAgICBpZiAoaXNEaXJl
Y3QpCisgICAgICAgICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBPcFB1dEJ5VmFsRGlyZWN0OjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgZGVzdEdQUik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlWYWw+KCksIE9wUHV0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5
UHJvZmlsZSgpLCBkZXN0R1BSKTsKKyAgICB9KTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTUxMiw3ICs1NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdU
NTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAgICAgQ2FsbCBjYWxsOwogICAgIGF1dG8gb3BlcmF0aW9uID0gaXNEaXJlY3QgPyAo
ZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9k
ZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlv
blB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpOwpAQCAtNTIzLDcgKzU3Niw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKQEAgLTUzMywxOCArNTg2LDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAg
ICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gcmVnVDU7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
dmFsdWU7CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHJlZ1Q0OwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CiAgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJTZXQgdXNlZChCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
dmFsdWUsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGUpOworICAgICAgICBBU1NF
UlQoIXVzZWQuY29udGFpbnMocmVnVDQpKTsKKyAgICAgICAgQVNTRVJUKCF1c2VkLmNvbnRhaW5z
KHJlZ1Q1KSk7CisgICAgfQorCiAKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwg
dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxP
YmplY3RHUFIpOwpAQCAtNTcwLDIwICs2MjksMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3By
aXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3Bl
cnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlR1BSKTsKIAotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1
ZVJlZ3MocmVnVDIpLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBJbnZhbGlk
R1BSUmVnLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZTsKKyAgICBzdHViSW5mby0+cHJpdmF0
ZUZpZWxkUHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsK
ICAgICBtX3B1dEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcg
U3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTU5
NCw4ICs2NjQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQ
cml2YXRlTmFtZT4oKTsKLSAgICBQcml2YXRlRmllbGRQdXRLaW5kIHB1dEtpbmQgPSBieXRlY29k
ZS5tX3B1dEtpbmQ7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAg
ICBKSVRQdXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeVZhbHNbbV9wdXRCeVZhbEluZGV4
KytdOwogCkBAIC02MDMsMTMgKzY3MiwxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3By
aXZhdGVfbmFtZShjCiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAg
IGF1dG8gb3BlcmF0aW9uID0gcHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxE
ZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZp
ZWxkT3B0aW1pemU7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIC8vIFRoZXkg
YXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1Qy
OwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCB2YWx1
ZUdQUiwgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0UHJpdmF0ZU5hbWU+KCk7CisK
KyAgICBzZXR1cEFyZ3VtZW50KDAsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgbG9hZEdsb2JhbE9i
amVjdChkZXN0R1BSKTsgfSk7CisgICAgc2V0dXBBcmd1bWVudCgxLCBbJl0gKEdQUlJlZyBkZXN0
R1BSKSB7IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBkZXN0R1BSKTsg
fSk7CisgICAgc2V0dXBBcmd1bWVudCgyLCBbJl0gKEdQUlJlZyBkZXN0R1BSKSB7IGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgZGVzdEdQUik7IH0pOworICAgIHNl
dHVwQXJndW1lbnQoMywgWyZdIChHUFJSZWcgZGVzdEdQUikgeyBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGRlc3RHUFIpOyB9KTsKKyAgICBzZXR1cEFyZ3VtZW50KDQs
IFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBkZXN0R1BSKTsgfSk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSk7CiAjZWxzZQogICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC02MjIsMTggKzY5NCwxMiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IHJlZ1Q0OwogCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHVi
SW5mbygpKSwgc3R1YkluZm9HUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4u
c3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIGVsc2UKLSAgICAg
ICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKQEAgLTY0MywxNCArNzA5LDE0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAg
ICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJv
cGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSByZWdU
MzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDQ7CiAKQEAg
LTY4MCw3ICs3NDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAg
ICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1Qy
LCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
Njg5LDcgKzc1Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAg
IGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIs
IHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNjk5LDcgKzc2Nyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVy
X2J5X2kKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzA5LDcgKzc3OCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVn
VDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC03MTksNyArNzg5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29u
cwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEp
OwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1Qy
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MjcsMjMgKzc5OCwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgYmFzZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gQmFzZWxpbmVEZWxCeUlk
UmVnaXN0ZXJzOjpzY3JhdGNoOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBi
YXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLAorICAgICAgICBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIs
IHNjcmF0Y2hHUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0g
QWNjZXNzVHlwZTo6RGVsZXRlQnlJRDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5k
ZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVT
dHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1Yklu
Zm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHVi
SW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5
SWRzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDAp
KTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwog
CiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVy
IGlmIGEgYmFzZSBpcyBjZWxsLgogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIg
YXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lz
dGVycy4KQEAgLTc1OSwxNSArODQwLDE3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlf
aWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlbEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklURGVsQnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeUlkc1ttX2RlbEJ5SWRJbmRleCsrXTsKIAogICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
Lm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YXJndW1lbnRHUFIyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlJZE9w
dGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMy
KGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtNzgxLDI0ICs4NjQsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV9pZChjb25zdCBJbgogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVu
dEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNDsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwg
cHJvcGVydHlHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1t
MzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeUlkT3B0
aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25EZWxl
dGVCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3Rh
dGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdU
MCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkp
OwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC04MDgsNyArODg2LDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25z
IGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJl
bG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAg
Ly8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhl
bHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtODQ1LDIyICs5MjMs
MzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cgogICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEs
IGJhc2UpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIHByb3BlcnR5KTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0
ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5l
RGVsQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3Bl
cnR5R1BSLCBwcm9wZXJ0eSk7CisKICAgICBKSVREZWxCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDMsIHJlZ1QyKTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVn
cyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBCYXNl
bGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoKTsKKworICAgIFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHVi
SW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOworICAgIHN0dWJJbmZv
LT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlu
a2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlD
RmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93
Q2FzZSgpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBib3hCb29sZWFuKHJlc3VsdEdQUiwgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUikpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGVtaXQgd3JpdGUtYmFycmll
ciBhdCB0aGUgZW5kIG9mIHNlcXVlbmNlIHNpbmNlIHdyaXRlLWJhcnJpZXIgY2xvYmJlcnMgcmVn
aXN0ZXJzLgogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUt
YmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTg4Myw5ICs5NzIsMTEgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkRlbGV0ZUJ5VmFsT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgVHJ1c3RlZEltbTMyKGJ5dGVj
b2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBh
cmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25EZWxldGVCeVZhbE9w
dGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIsIGFyZ3VtZW50R1BSMywgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUo
KSkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtODk5LDI0ICs5OTAsMTkg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBlY21hTW9kZUdQUiA9IGFyZ3VtZW50R1BSNDsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHByb3BlcnR5R1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5t
X2VjbWFNb2RlLnZhbHVlKCkpLCBlY21hTW9kZUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOwotICAg
IGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRp
bWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlv
bkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBzdGF0aWNfYXNzZXJ0
KHJldHVyblZhbHVlR1BSID09IHJlZ1QwKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKQEAgLTkyNiw3ICsxMDEyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRo
ZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0
byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQog
ICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtOTYxLDIyICsxMDQ3LDMxIEBAIHZv
aWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2VWUmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKIAot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwg
QWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpUcnlH
ZXRCeUlkKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91
bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6OlRyeUdldEJ5SWQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVj
b2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0g
bV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1Yklu
Zm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9
IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwor
CisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9J
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5h
cHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKIH0KIApAQCAtOTg2LDE0ICsxMDgxLDE3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0
dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBjYWxsT3BlcmF0aW9u
PGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRH
UFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRW
UmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtl
ZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9m
ZnNldCgpOwpAQCAtMTAwMywyNiArMTEwMSwyMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5
X2dldF9ieV9pZChjb25zCiAgICAgbW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNl
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJz
OjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7
CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRP
cHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdl
dEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJh
dGlvblRyeUdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
IAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIp
OwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEw
MzAsMjIgKzExMjIsMzEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25z
dAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERp
cmVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
cmVnVDApOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNl
R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcp
OwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBK
SVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdU
MCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKLSAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2Vk
Q29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0UmVncywgc3R1
YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3QpOworCisgICAgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAg
IHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdDsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJl
Z3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEwNTQsMTYg
KzExNTUsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWREaXJl
Y3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BS
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50
R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdl
dEJ5SWREaXJlY3RPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsK
ICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsK
QEAgLTEwNzMsODMgKzExNzYsNjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9k
aXJlY3QoYwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50
R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBzdGF0aWNf
YXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlH
UFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplKSwg
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9w
dGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0
QnlJZERpcmVjdE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZS
ZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVn
LCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlVlJlZyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpy
ZXN1bHQpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKICAg
ICAKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBi
cmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRh
Lm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFy
cmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVn
VDAsICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxl
LCByZWdUMSk7CisgICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6
Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YTo6
b2Zmc2V0T2ZNb2RlKCksIHNjcmF0Y2hHUFIpOworICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3Ro
TW9kZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhf
dD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIE9wR2V0QnlJZDo6TWV0YWRhdGE6
Om9mZnNldE9mTW9kZU1ldGFkYXRhKCkgKyBHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGg6
Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGJhc2VHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBu
b3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotCiAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJs
b2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlc3VsdFJlZ3MsIHJlZ1QxLCBBY2Nl
c3NUeXBlOjpHZXRCeUlkKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1ZS
ZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwotCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIHRoaXNWUmVnKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgcmVzdWx0
UmVncywgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOwogCi0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQotICAgIEpJVEdldEJ5SWRXaXRo
VGhpc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCByZXN1bHRSZWdzLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJ
ZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1Yklu
Zm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVj
dHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBz
dHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMs
IHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0
IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAg
ICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0
UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKIH0KIApAQCAtMTE1OCwx
NiArMTI0MCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7
CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTExNzcsMjYg
KzEyNjEsNTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwog
CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VH
UFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
dHVyblZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJl
dHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkV2l0aFRoaXM+KCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5t
X2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFs
dWU7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworCisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyB0aGlzR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OnRoaXNWYWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHRoaXNHUFIpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNHUFIsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5
SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHRoaXNHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0
aFRoaXM7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2Ug
bmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
bV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTIwNiw3
ICsxMzIyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRk
cmVzcygpOwpAQCAtMTI0MSwxNiArMTM1NywxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRC
eUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRX
aXRoVGhpc0luZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0
aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRH
UFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1l
bnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3Vt
ZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVz
dWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1l
bnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTI2MCwyOCArMTM3OSwyMiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpCiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgaW4gdXNlLgot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgdGhpc0dQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
dGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0
YXRpY19hc3NlcnQodGhpc0dQUiA9PSBhcmd1bWVudEdQUjEpOwogCi0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5
SWRXaXRoVGhpc09wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBA
IC0xMjkxLDcgKzE0MDQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdS
ZXR1cm5BZGRyZXNzKCk7CkBAIC0xMzI5LDIzICsxNDQyLDM4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBi
eXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVlJlZyA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwg
YW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBq
dXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAn
aG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKICAgICAvLyBzdWNoIHRoYXQgdGhl
IFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20g
dGhpcy4KIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFs
dWVWUmVnLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
dXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBC
YXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRj
aDsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCBiYXNlR1BSLCB2YWx1ZVZSZWcs
IHZhbHVlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZVZSZWcpOwogCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLAotICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDMsIHJlZ1QyLCBlY21h
TW9kZShieXRlY29kZSksCisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgc3R1YkluZm9HUFIsIHNjcmF0Y2hHUFIsIGVjbWFNb2Rl
KGJ5dGVjb2RlKSwKICAgICAgICAgZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6
Tm90RGlyZWN0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dEJ5SWQ7CisgICAgc3R1YkluZm8tPnB1dEtpbmQg
PSBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3Q7CisgICAgc3R1
YkluZm8tPmVjbWFNb2RlID0gZWNtYU1vZGUoYnl0ZWNvZGUpOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8v
IFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVz
ZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiAg
ICAgCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJy
aWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtMTM1OSwxNCArMTQ4NywxOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJ
ZD4oKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAgICAgCiAgICAgSklUUHV0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdl
bi5zbG93UGF0aEZ1bmN0aW9uKCksIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIGFy
Z3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IGFyZ3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1Yklu
Zm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTM3Niwy
NSArMTUwOCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBh
cmcxIGFscmVhZHkgaW4gdXNlLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSByZWdU
MTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7
CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSNDsKICAgICBz
dGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAg
IHN0YXRpY19hc3NlcnQodmFsdWVHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBnZW4uc2xvd1BhdGhGdW5jdGlvbigpOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwoZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC0xNDA0LDcgKzE1MzAsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJv
bSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5j
dGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0
Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNDQx
LDIwICsxNTY3LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWMK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdEdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMCksIHJlZ1QxKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgp
OworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeUlkOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNDYzLDE0ICsxNjAwLDE3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSwgcmVz
dWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2Fs
bE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJn
dW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBy
ZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91
bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogI2Vsc2UKICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUlu
ZGV4Lm9mZnNldCgpOwpAQCAtMTQ4MCwyOCArMTYyMCwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5fYnlfaWQoY29uc3QgSW5zCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZz
ZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJz
OjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7
CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAg
IC8vIHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3Rs
eSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcg
YSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1p
emUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNh
bGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7
Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAg
ICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5SWRPcHRp
bWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkluQnlJ
ZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNTEwLDI1ICsxNjQ0LDMzIEBAIHZv
aWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAg
Y29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFs
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
YmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKKyAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIEJhc2Vs
aW5lSW5CeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFk
ZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7
CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOworICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25z
dGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5l
RGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0xNTM3LDE1ICsxNjc5LDIwIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5
VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIHJl
Z1QwLCByZWdUMSk7CisgICAgc2V0dXBBcmd1bWVudCgwLCBbJl0gKEdQUlJlZyBkZXN0R1BSKSB7
IGxvYWRHbG9iYWxPYmplY3QoZGVzdEdQUik7IH0pOworICAgIHNldHVwQXJndW1lbnQoMSwgWyZd
IChHUFJSZWcgZGVzdEdQUikgeyBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXgsIGRlc3RHUFIpOyB9KTsKKyAgICBzZXR1cEFyZ3VtZW50KDIsIFsmXSAoR1BS
UmVnIGRlc3RHUFIpIHsgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBP
cEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBkZXN0R1BSKTsgfSk7
CisgICAgc2V0dXBBcmd1bWVudCgzLCBbJl0gKEdQUlJlZyBkZXN0R1BSKSB7IGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBkZXN0R1BSKTsgfSk7CisgICAgc2V0dXBBcmd1
bWVudCg0LCBbJl0gKEdQUlJlZyBkZXN0R1BSKSB7IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSwgZGVzdEdQUik7IH0pOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSkpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZWxzZQogICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC0xNTU2LDU5ICsxNzAzLDcwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9H
UFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJn
dW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgp
KTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCBwcm9maWxlR1BSKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSW5CeVZhbDo6TWV0
YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogICAgIC8vIHNsb3df
b3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3
ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGlj
YXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSksIGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXpl
OwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uSW5CeVZhbE9w
dGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0
aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU9yQnJhbmQsIEFj
Y2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5T3JCcmFuZCwgcmVnVDEpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHlPckJyYW5kLCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2VHUFIsIGJhc2UpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIHR5cGUsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFs
dWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIp
OworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2Vk
U3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gdHlwZTsKKyAgICBz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAg
YWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlU2xv
dyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBBY2Nlc3NUeXBlIHR5cGUpCit2b2lkIEpJVDo6ZW1pdEhh
c1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHksIEFjY2Vzc1R5cGUgdHlwZSkKIHsKLSAgICBBU1NFUlQo
dHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6
Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgVU5VU0VEX1BBUkFNKGJhc2UpOworICAgIFVOVVNFRF9Q
QVJBTShwcm9wZXJ0eSk7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5k
KTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFs
SW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih0eXBl
ID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVP
cHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxs
T3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpPihBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1
bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90
IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtMTYxOCwyNyAr
MTc3NiwyMSBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlPckJyYW5kR1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlPckJyYW5kR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAg
ICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwog
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlPckJyYW5kR1BSID09IGFyZ3VtZW50R1BSMSk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHVi
SW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0
aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRl
Y2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0
aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1By
aXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhh
c1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENh
bGwodHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZh
dGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTY1Miw3ICsxODA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2hhc19wcml2YXRlX25hbWUoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZhdGVOYW1lPigp
OwotICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgQWNjZXNzVHlwZTo6SGFz
UHJpdmF0ZU5hbWUpOworICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0
ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3BlcnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRl
TmFtZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjY2LDQ2ICsxODE4LDc0IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCgKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BIYXNQcml2YXRlQnJhbmQ+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1f
ZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworICAgIGVtaXRIYXNQcml2YXRlU2xv
dyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhckluamVjdGlv
bkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit2b2lkIEpJVDo6ZW1pdFZhcklu
amVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBzY3JhdGNo
R1BSKQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVy
bjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NP
ZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKworICAgIGxvYWRHbG9i
YWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9C
SkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSks
IHNjcmF0Y2hHUFIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2Ny
YXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElz
SW52YWxpZGF0ZWQpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKIHsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHJlZ1QwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkK
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSks
IHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKKwogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZl
VHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
LSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7Ci0g
ICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKKworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNl
OworCisgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgewor
ICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAg
ICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OworICAgICAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChnbG9iYWxPYmplY3RHUFIpOworICAgICAgICB9CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJ
bmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH07CisKKyAgICBhdXRvIGVt
aXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewor
ICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAg
ICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mTG9jYWxTY29wZURlcHRoKCksIHJlZ1QxKTsKKworICAgICAgICBBU1NFUlQo
c2NvcGVHUFIgPT0gcmVnVDApOworICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKKyAgICAg
ICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICAg
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAgICAgIGp1bXAoKS5saW5rVG8o
bG9vcCwgdGhpcyk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9OwogCiAgICAgYXV0
byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAg
ICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2Rl
QmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwotICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2go
KSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29w
ZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgorICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZDMyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2xvYmFsTGV4
aWNhbEJpbmRpbmdFcG9jaCgpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRP
Zkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCkBAIC0xNzEzLDE2OCArMTg5MywxNjUgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAg
ICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2Rl
QmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZvciBHbG9i
YWxWYXIqLAorICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbExleGljYWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KKyAgICAgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFs
TGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0
LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCBy
ZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAg
ICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVW
YXI6CisgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eToKICAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
fQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
ewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
bV9yZXNvbHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwot
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAg
ICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOworICAg
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCisgICAgICAgIGxvYWRQdHJG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZM
ZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOworICAgIGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgIGlmIChwcm9maWxlZFJl
c29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgcHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgIGVtaXRDb2RlKHByb2ZpbGVk
UmVzb2x2ZVR5cGUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKworICAgICAgICAgICAgSnVtcExpc3Qgc2tpcFRv
RW5kOworICAgICAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVT
Y29wZTo6TWV0YWRhdGE6Om9mZnNldE9mUmVzb2x2ZVR5cGUoKSwgcmVnVDEpOworCisgICAgICAg
ICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAg
ICAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUpOworICAgICAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAg
ICAgICAgICAgICBub3RDYXNlLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJv
cGVydHkpOworICAgICAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAg
ICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAg
ICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAg
ICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7
CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKIAotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToK
LSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVz
b2x2ZVR5cGUsIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0KLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsK
IAotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwogfQotI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKKyNlbHNlCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRS
ZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fcmVz
b2x2ZVR5cGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwogCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0g
bV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEFTU0VSVChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVu
dEluc3RydWN0aW9uKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdU
NzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIC8vIElmIHdlIHByb2ZpbGUg
Y2VydGFpbiByZXNvbHZlIHR5cGVzLCB3ZSdyZSBnYXVyYW50ZWVkIGFsbCBsaW5rZWQgY29kZSB3
aWxsIGhhdmUgdGhlIHNhbWUKKyAgICAvLyByZXNvbHZlIHR5cGUuCiAKLSAgICBpZiAocmVzb2x2
ZVR5cGUgPT0gTW9kdWxlVmFyKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEu
bV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgaWYgKHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKKyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVu
dCgpLCByZWdUMCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNl
dCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKKyAgICAg
ICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRh
dGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOworCisgICAgICAgIGF1dG8gY2xv
c3VyZVZhckdlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6
OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhciwgIkJhc2VsaW5lOiBv
cF9yZXNvbHZlX3Njb3BlIENsb3N1cmVWYXIiKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRv
IGNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzR2VuZXJhdG9yID0gW10gKFZNJiB2bSkg
eworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZt
LCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9yZXNvbHZl
X3Njb3BlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIik7CisgICAgICAgIH07CiAK
LSNkZWZpbmUgUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVf
c2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAotICAgICAgICBzdGF0aWMgY29uc3QgVGh1
bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0gewotICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xW
RV9UWVBFKFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKQorICAgICAgICBhdXRvIGdlbmVyaWNSZXNv
bHZlU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgICAgICByZXR1cm4gSklU
OjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsodm0sIHN0ZDo6bnVsbG9wdCwgIkJhc2VsaW5l
OiBvcF9yZXNvbHZlX3Njb3BlIGdlbmVyaWMiKTsKICAgICAgICAgfTsKLSN1bmRlZiBSRVNPTFZF
X1NDT1BFX0dFTkVSQVRPUgorCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIg
PSByZWdUMjsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwogICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7CiAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAg
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5
cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGNs
b3N1cmVWYXJHZW5lcmF0b3IpOworICAgICAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBl
ID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgY29kZSA9
IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3Ip
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmlj
UmVzb2x2ZVNjb3BlR2VuZXJhdG9yKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIH0KIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwg
Y29uc3QgY2hhciogdGh1bmtOYW1lKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYgdm0sIHN0ZDo6b3B0aW9u
YWw8UmVzb2x2ZVR5cGU+IHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7CiAg
ICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsg
d2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAgIC8vIGl0IG1ha2VzIGFz
c3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZy
b20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVu
Y3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1h
dGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKworICAgIENDYWxsSGVscGVycyBq
aXQ7CisKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7IC8vIGluY29taW5nCi0gICAg
Y29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OyAvLyBpbmNvbWluZworICAgIGNvbnN0
ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUMjsgLy8gaW5jb21pbmcKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0
byBzbG93IHBhdGguCi0gICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdU
NDsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIFJFTEVBU0VfQVNT
RVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKTsKIAotICAgIHRh
Z1JldHVybkFkZHJlc3MoKTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgbG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkp
LCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisgICAgaml0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUo
KSksIHJlZ1QzKTsKKyAgICBqaXQuYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CiAKICAgICBK
dW1wTGlzdCBzbG93Q2FzZTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZd
IChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
SW52YWxpZEdQUlJlZykgeworICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFs
aWRHUFJSZWcpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BS
UmVnKSB7CiAgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zh
ckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
YnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0
ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3Qs
IG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zm
c2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAog
ICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKSB7Ci0gICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyk7Ci0gICAgICAgIG1vdmUoc2NvcGVHUFIsIHJlZ1QwKTsKLSAgICAgICAgbG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNj
b3BlRGVwdGgpKSwgcmVnVDEpOwotCi0gICAgICAgIExhYmVsIGxvb3AgPSBsYWJlbCgpOwotICAg
ICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOwotICAgICAgICB7Ci0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgp
KSwgcmVnVDApOwotICAgICAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0g
ICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3AsIHRoaXMpOwotICAgICAgICB9Ci0gICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2NvcGVHUFIgPT0gcmVnVDAp
OworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZz
ZXRPZkxvY2FsU2NvcGVEZXB0aCgpKSwgcmVnVDEpOworCisgICAgICAgIExhYmVsIGxvb3AgPSBq
aXQubGFiZWwoKTsKKyAgICAgICAgSnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3QzMihaZXJvLCBy
ZWdUMSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNl
dE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMSk7CisgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGxvb3AsICZqaXQpOworICAgICAgICBk
b25lLmxpbmsoJmppdCk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0xODgyLDEyICsyMDU5LDExIEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
ICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2Fk
cyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xv
YmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwg
SlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVn
VDEpKTsKLSAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0R1BSLCByZWdUMCk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Cisg
ICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZz
ZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTR2xv
YmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xODk3LDExICsyMDczLDExIEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAgICAgY2FzZSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8g
SlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExl
eGljYWxWYXIqLgotICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAg
ICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpCi0gICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2Jh
bE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAg
ICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6
b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTE5MDksNyAr
MjA4NSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAg
ICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2
ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTE5MTksODMgKzIwOTUs
NDUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9
CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdU
MCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJl
c29sdmVUeXBlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxp
bmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKKyAgICBpZiAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoKnJlc29s
dmVUeXBlID09IENsb3N1cmVWYXIgfHwgKnJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENvZGUoKnJlc29sdmVUeXBlKTsKKyAgICB9
IGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUp
KSwgcmVnVDApOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFk
YXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdUMSk7CiAKLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAg
YXV0byBlbWl0Q2FzZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKKyAgICAgICAg
ICAgIEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJ
bW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwor
ICAgICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgIG5v
dENhc2UubGluaygmaml0KTsKKyAgICAgICAgfTsKIAotICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KKyAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyKTsKKyAgICAgICAgZW1pdENhc2UoR2xv
YmFsUHJvcGVydHkpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAg
ICAgZW1pdENhc2UoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVt
aXRDYXNlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVt
aXRDYXNlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKKyAgICAgICAgc2tpcFRvRW5kLmxp
bmsoJmppdCk7CiAgICAgfQogCi0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQ
cm9maWxlOjpUaHVuayk7Ci0gICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0
dWIoc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5r
KHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9yZXNv
bHZlX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7
CiB9CiAKLSNkZWZpbmUgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBl
KSBcCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVzb2x2
ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAg
ICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5
cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBc
Ci0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVU
eXBlLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCi0gICAg
fQotRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikK
LSN1bmRlZiBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRv
cihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9u
IGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQogICAg
IC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVp
bmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRM
IG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3
aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBK
SVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgLy8gVGhlIGZhc3QgcGF0
aCBhbHJlYWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKQEAg
LTIwMDQsMTcgKzIxNDIsMjEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVy
KTsKICNlbmRpZgogCi0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJl
Z1Q1OwotICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICBqaXQuc3RvcmUzMihpbmNv
bWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0g
YXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJn
dW1lbnRHUFIwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5zdHJ1Y3Rpb25HUFIgPSBhcmd1bWVu
dEdQUjE7CiAKKyAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0g
Y29kZUJsb2NrR1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRH
UFIgIT0gZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNv
ZGVPZmZzZXRHUFIgIT0gaW5zdHJ1Y3Rpb25HUFIpOworCiAgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOwogICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoY29kZUJs
b2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgaW5z
dHJ1Y3Rpb25HUFIpOwotICAgIGppdC5hZGRQdHIoYnl0ZWNvZGVPZmZzZXRHUFIsIGluc3RydWN0
aW9uR1BSKTsKKyAgICBqaXQuYWRkUHRyKGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIsIGluc3Ry
dWN0aW9uR1BSKTsKIAogICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25S
ZXNvbHZlU2NvcGVGb3JCYXNlbGluZSk+KGdsb2JhbE9iamVjdEdQUiwgaW5zdHJ1Y3Rpb25HUFIp
OwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CkBAIC0yMDM0LDcgKzIxNzYsNyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgcGF0Y2hCdWZm
ZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNvbHZlX3Njb3BlIik7CiB9
Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisjZW5kaWYgLy8gIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCiB2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQogewpAQCAt
MjA2Niw1OCArMjIwOCw3NSBAQCB2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJl
Z2lzCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3Bl
OwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJl
c29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1f
c3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKKyAgICBSZXNvbHZlVHlw
ZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHNjb3BlR1BSID0gcmVnVDI7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2Nv
cGVHUFIpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIEp1bXBMaXN0IHNsb3dDYXNl
OworCisgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVj
dCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNl
dE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH07CisgICAg
CisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAg
ICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNs
b3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0gICAgICAgICAgICBH
UFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7
Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAgICAgICAgICAgLy8gU3Ry
dWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0
cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHks
IHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisg
ICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEZyb21TY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7CisgICAgICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEp
OworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNz
KHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwogCiAgICAg
ICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1w
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIGxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAg
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihF
cXVhbCwgc2NvcGVHUFIsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAg
bG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQo
KSwgcmVnVDEpOworCiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAg
ICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBv
ZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAg
ICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBh
Ym9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwogICAgICAgICAgICAgICAg
IGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7
Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9Q
dHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNo
LCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAg
ICAgICAgbmVnMzIocmVnVDEpOworICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEs
IHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1l
c0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRW
YXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90
KSwgcmVnVDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
KyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGxvYWRQdHIocmVnVDAsIHJlZ1QwKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3Vy
ZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGxv
YWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZPcGVyYW5kKCksIHJlZ1QzKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAz
ID09IHNpemVvZihSZWdpc3RlcikpOworICAgICAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMy
KDMpLCByZWdUMyk7CisgICAgICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNl
dE9mVmFyaWFibGVzKCkpLCByZWdUMCk7CisKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjEy
NywyMTEgKzIyODYsMTg5IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogeworICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIg
fHwgcHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykKKyAgICAgICAgZW1pdENvZGUocHJvZmlsZWRSZXNvbHZlVHlwZSk7CisgICAgZWxzZSB7CiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7CiAg
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKKyAgICAgICAgSnVt
cCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKICAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsKIAot
ICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2Rl
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0KLSAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5
cGUgaW50byBUMAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKIAogICAgICAgICBKdW1wIGlz
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eSkpOwogICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKICAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAg
ICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOwogCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0
cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwogCiAg
ICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKICAgICB9CiAKLSAg
ICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOworCisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1l
dGFkYXRhLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQogCi0jZWxzZSAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25H
ZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBpbnN0cnVjdGlvbik7Cit9CiAKKyNlbHNl
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwot
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29s
dmVUeXBlKCk7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgp
OwogCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChi
eXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICBBU1NFUlQobV9jb2RlQmxv
Y2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNv
ZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKworICAgIGF1dG8gY2xvc3VyZVZhckdl
bmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdl
dEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Nj
b3BlIENsb3N1cmVWYXIiKTsKKyAgICB9OworCisgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgcmV0dXJuIEpJ
VDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcywgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZSBDbG9zdXJlVmFyIik7Cisg
ICAgfTsKKworICAgIGF1dG8gZ2VuZXJpY0dldEZyb21TY29wZUdlbmVyYXRvciA9IFtdIChWTSYg
dm0pIHsKKyAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHZt
LCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgZ2VuZXJpYyIpOwor
ICAgIH07CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
bWV0YWRhdGFHUFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVn
VDI7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogCi0g
ICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhcikgewotICAgICAgICB1aW50cHRyX3QqIG9w
ZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVy
YW5kKTsKLSAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0cmRpZmZf
dCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2NrLT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1l
dGFkYXRhKTsKKyAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSNkZWZp
bmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9nZXRfZnJvbV9zY29w
ZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCi0gICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dl
bmVyYXRvciBnZW5lcmF0b3JzW10gPSB7Ci0gICAgICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZ
UEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotICAgICAgICB9OwotI3VuZGVmIEdFVF9GUk9N
X1NDT1BFX0dFTkVSQVRPUgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3Bl
R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQ
Uik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIp
OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQ
Uik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwotICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVy
YXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIH0KKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CisgICAgaWYgKHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgY29kZSA9IHZtLmdldENU
SVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgZWxzZSBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgY29kZSA9
IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3Ip
OworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJpY0dldEZyb21T
Y29wZUdlbmVyYXRvcik7CisKKyAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZy
b21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05h
bWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVz
b2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2Vu
ZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJh
c2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhl
IHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRv
IG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1l
dGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1
bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpOwotCi0gICAgdGFnUmV0dXJu
QWRkcmVzcygpOwotCi0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zm
c2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7Ci0gICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0
YUdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKIAotICAgIEp1bXBMaXN0IHNsb3dDYXNl
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVP
ZmZzZXQpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0
cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwot
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDEpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Ci0gICAg
fTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCi0gICAgYXV0byBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICBqaXQu
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFU
YWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKwor
ICAgIEp1bXBMaXN0IHNsb3dDYXNlOworCisgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0g
WyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGlmICghbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwg
cmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9p
bnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwor
ICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9u
V2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNo
OChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwg
VHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKICAgICAKLSAgICBhdXRvIGVt
aXRHZXRWYXJGcm9tUG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7Ci0g
ICAgICAgIGxvYWRQdHIocmVnLCByZWcpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRHZXRWYXJG
cm9tSW5kaXJlY3RQb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAg
ICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldENsb3N1
cmVWYXIgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIG9wZXJhbmRHUFIpIHsKLSAgICAg
ICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgIGxz
aGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGFkZFB0cihzY29w
ZUdQUiwgb3BlcmFuZEdQUik7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhvcGVyYW5kR1BSLCBK
U0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKLSAgICB9
OwotCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJv
b2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fc3RydWN0dXJl
KSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24n
dCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRk
aXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5q
ZWN0aW9uLgotCi0gICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAg
ICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoID0gcmVnVDI7Ci0KLSAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1i
ZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwg
YmFzZSwgcmVnVDMpOworICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIg
aW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1
dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBj
aGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3Ry
dWN0dXJlKCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhy
ZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKworICAgICAgICAgICAg
aml0LmppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewor
ICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaml0LmJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIHJlZ1QzKTsKICAg
ICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9m
T3BlcmFuZCgpKSwgcmVnVDEpOworCiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsK
LSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5P
ckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAg
ICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0g
ICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBK
dW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDEs
IFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGpp
dC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAg
ICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRj
aCk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMy
VG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChzY3Jh
dGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsK
KyAgICAgICAgICAgIGppdC5uZWczMihyZWdUMSk7CisgICAgICAgICAgICBqaXQuc2lnbkV4dGVu
ZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUluZGV4
KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0Yo
TWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdU
MCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihyZWdUMCwgcmVnVDApOwogICAgICAgICAgICAg
aWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAg
ICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAg
ICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fb3BlcmFuZCkpLCByZWdUMyk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihz
Y29wZUdQUiwgcmVnVDMpOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1Qz
KTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3Rlcikp
OworICAgICAgICAgICAgaml0LmxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgcmVnVDMpOworICAg
ICAgICAgICAgaml0LmFkZFB0cihzY29wZUdQUiwgcmVnVDMpOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFi
bGVzKCkpLCByZWdUMCk7CisKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFt
aWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMzQx
LDg2ICsyNDc4LDYzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5m
bykpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVt
cCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNl
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIGlzTm90R2xv
YmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
eworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0g
ZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSks
IHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlz
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7Cisg
ICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4
aWNhbFZhci5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGppdC5icmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgp
KTsKKyAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsoJmppdCk7CisKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAg
ZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb24ubGluaygmaml0KTsKKworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBqaXQu
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gaml0LmJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsoJmppdCk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cy5saW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5s
aW5rKCZqaXQpOwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGppdC5icmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7Cisg
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKCZqaXQpOwog
Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Cisg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICBza2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVl
UHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOwor
ICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zm
c2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwog
Ci0gICAgcmV0KCk7CisgICAgaml0LnJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0g
ICAgYXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJv
bV9zY29wZUdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxv
Y2F0aW9uTGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2Rl
TG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBE
RUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNv
bHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAotICAgIHsgXAotICAgICAgICBpZiBjb25zdGV4
cHIgKCF0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAotICAgICAg
ICAgICAgcmV0dXJuIHsgfTsgXAotICAgICAgICBKSVQgaml0KHZtKTsgXAotICAgICAgICByZXR1
cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5l
OiBvcF9nZXRfZnJvbV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9S
RVNPTFZFX1RZUEUoREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUZJ
TkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCi0KIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkK
IHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkg
d29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNo
KFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTI0MjksMTggKzI1NDMsMjQgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogI2VuZGlmCiAKICAgICB1c2luZyBNZXRhZGF0
YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFk
YXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9
IHJlZ1Q1OwotICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBpbmNvbWluZ0J5
dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgaml0LnN0b3JlMzIoaW5jb21pbmdCeXRlY29k
ZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSk7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IGFyZ3VtZW50R1BS
MzsKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGluc3RydWN0aW9uR1BSID0gYXJndW1lbnRHUFIxOworICAg
IHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiAhPSBjb2RlQmxvY2tHUFIp
OworICAgIHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiAhPSBnbG9iYWxP
YmplY3RHUFIpOworICAgIHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiAh
PSBpbnN0cnVjdGlvbkdQUik7CisgICAgc3RhdGljX2Fzc2VydChtZXRhZGF0YUdQUiAhPSBjb2Rl
QmxvY2tHUFIpOworICAgIHN0YXRpY19hc3NlcnQobWV0YWRhdGFHUFIgIT0gZ2xvYmFsT2JqZWN0
R1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG1ldGFkYXRhR1BSICE9IGluc3RydWN0aW9uR1BSKTsK
IAogICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
Y29kZUJsb2NrR1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkluc3Ry
dWN0aW9uc1Jhd1BvaW50ZXIoKSksIGluc3RydWN0aW9uR1BSKTsKLSAgICBqaXQuYWRkUHRyKGJ5
dGVjb2RlT2Zmc2V0R1BSLCBpbnN0cnVjdGlvbkdQUik7CisgICAgaml0LmFkZFB0cihpbmNvbWlu
Z0J5dGVjb2RlT2Zmc2V0R1BSLCBpbnN0cnVjdGlvbkdQUik7CiAKICAgICBBU1NFUlQoUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhHUFJJbmZvOjpudW1iZXJUYWdS
ZWdpc3RlcikpOwogICAgIGppdC5tb3ZlKG1ldGFkYXRhR1BSLCBHUFJJbmZvOjpudW1iZXJUYWdS
ZWdpc3Rlcik7IC8vIFByZXNlcnZlIG1ldGFkYXRhIGluIGEgY2FsbGVlIHNhdmVkIHJlZ2lzdGVy
LgpAQCAtMjQ0OSw3ICsyNTY5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIENhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsK
ICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0LmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25D
aGVjayh2bSk7CiAKLSAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7Cisg
ICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIs
IE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJz
dEJ1Y2tldCgpKSk7CiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRh
ZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKIAogI2lmIENQVShYODZfNjQpCkBAIC0y
NDY5LDg4ICsyNTg5LDc4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICBwYXRjaEJ1ZmZlci5saW5rKGp1bXBUb0hhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVs
KGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUiKTsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQot
dm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAg
c3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RX
YXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBs
b2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgcmVn
VDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5
V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOwotfQorI2VuZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQ
dXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKLSAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1
Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAg
IHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZt
ZXRhZGF0YS5tX29wZXJhbmQpOwogCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgIFJlc29s
dmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGF1dG8gZW1pdENv
ZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRM
b2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJl
IGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVy
ZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29s
dmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAg
ICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCisg
ICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2lu
ZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCBy
ZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Cisg
ICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7
CisKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKIAog
ICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4g
SnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QzKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CisgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0
VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7CiAgICAgICAgICAg
ICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChy
ZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAg
ICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMSwgVGltZXNFaWdo
dCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7
CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9i
YWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAg
ICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFu
dFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwg
bV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29s
dmVUeXBlKTsKLSAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmlu
aXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
IHsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNo
ZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCBy
ZWdUMCk7CisKKyAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihieXRlY29kZS5tX2dl
dFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hl
Y2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERa
IGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JP
cGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRl
cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOworICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxW
YXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFs
dWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpv
cGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDEpOworICAgICAg
ICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKKyAgICAgICAgICAgIHN0b3JlNjQo
cmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihz
Y29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENs
b3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAq
b3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOworICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgcmVnVDApOworCisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDAp
OworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3Bl
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXRO
b3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJl
Z1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFy
aWFibGVzKCkpKTsKKwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1v
ZHVsZVZhcjoKQEAgLTI1NjQsNTggKzI2NzQsNTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IElucwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2
ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAg
ICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0
dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5n
LgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0
Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0
eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAg
ICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogeworICAgIC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNlZXMg
Q2xvc3VyZVZhci8gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRoZW4gd2UgY2Fu
IGNvbXBpbGUgdGhpbmdzCisgICAgLy8gdGhhdCB3YXkgZm9yIGFsbCBDb2RlQmxvY2tzLCBzaW5j
ZSB3ZSd2ZSBwcm92ZW4gdGhhdCBpcyB0aGUgdHlwZSB3ZSB3aWxsIGJlLiBJZiB3ZSdyZSBhIENs
b3N1cmVWYXIsCisgICAgLy8gYWxsIENvZGVCbG9ja3Mgd2lsbCBiZSBDbG9zdXJlVmFyLiBJZiB3
ZSdyZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgd2UncmUgYWx3YXlzIENsb3N1
cmVWYXIKKyAgICAvLyBpZiB0aGUgdmFyIGluamVjdGlvbiB3YXRjaHBvaW50IGlzbid0IGZpcmVk
LiBJZiBpdCBpcyBmaXJlZCwgdGhlbiB3ZSB0YWtlIHRoZSBzbG93IHBhdGgsIHNvIGl0IGRvZXNu
J3QKKyAgICAvLyBtYXR0ZXIgd2hhdCB0eXBlIHdlIGFyZSBkeW5hbWljYWxseS4KKyAgICBpZiAo
cHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShDbG9z
dXJlVmFyKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xv
c3VyZVZhcikKKyAgICAgICAgZW1pdENvZGUoUmVzb2x2ZWRDbG9zdXJlVmFyKTsKKyAgICBlbHNl
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKQorICAgICAgICBlbWl0Q29kZShDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7
CisgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMy
KCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8o
KSwgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJp
dHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxp
bmsodGhpcyk7CiAKKyAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xv
YmFsVmFyKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RH
bG9iYWxWYXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CisgICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKKwogICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXIsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsK
ICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyLmxpbmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAogICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwogCiAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2Up
OwotICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTI2MjQsMTggKzI3MjgsMjEgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdAogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dFRvU2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQ
dXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBN
b2R1bGVWYXIpIHsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBl
KCk7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAg
IC8vIElmIGFueSBsaW5rZWQgQ29kZUJsb2NrIHNhdyBhIE1vZHVsZVZhciwgdGhlbiBhbGwgbGlu
a2VkIENvZGVCbG9ja3MgYXJlIGd1YXJhbnRlZWQKKyAgICAgICAgLy8gdG8gYWxzbyBzZWUgTW9k
dWxlVmFyLgogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3Bl
cnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKICAgICB9IGVs
c2UgewogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRUb1Njb3BlLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
YXJndW1lbnRHUFIwKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3Bl
LCBhcmd1bWVudEdQUjAsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAjZWxzZQogICAgICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7
CisgICAgICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0
ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwogICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKQEAgLTI2NTIs
NyArMjc1OSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJl
aW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZU
TCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywg
d2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAg
SklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAg
ICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjcwMSw3ICsyODA4LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogICAgIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVn
VDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKQEAgLTI3NTksNyArMjg2Niw2IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKEpTQ2VsbCogb3duZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwpAQCAtMjc2Nyw3ICsyODczLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFs
X2ZpZWxkKGNvbgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZz
ZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShtZXRhZGF0YSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAg
LTI4MjMsNyArMjkyOSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJh
dG8KIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1f
bW9kZTsKQEAgLTI4MzksMTEgKzI5NDQsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9uZXh0KGNvbnN0IAogICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7CiAKICAgICAvLyBUaGlz
IGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNlZSwgc28gc3BlY2lhbCBj
YXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgotICAgIGlmIChtZXRhZGF0YS5t
X2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVj
dHVyZU1vZGUpIHsKKyAgICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
aykubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25T
dHJ1Y3R1cmVNb2RlKSB7CiAgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gcmVnVDM7Cisg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoZW51bWVyYXRvciwgZW51bWVyYXRvckdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNh
c2VzLmFwcGVuZChicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoKH5K
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpICYgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwogICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworCisgICAgICAgIGxvYWQ4RnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9y
TWV0YWRhdGEoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICBzdG9yZThUb01ldGFkYXRhKHNjcmF0Y2hHUFIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JO
ZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CisKICAgICAgICAg
bG9hZDMyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSwgaW5kZXhHUFIpOwogICAgICAgICBvcGVyYXRpb25D
YXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpKTsKIApAQCAtMjg4MSw3OCArMjk5Miw4OCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiB2b2lkIEpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3QgZG9uZUNhc2Vz
OwogCi0gICAgYXV0byByZXN1bHRHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdEdQUiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxS
ZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2Vs
aW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBCYXNlbGluZUVudW1l
cmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDE7CisgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMiA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMjsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gzID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlW
YWxSZWdpc3RlcnM6OnNjcmF0Y2gzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIobW9kZSwgc2NyYXRjaDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlO
YW1lLCBwcm9wZXJ0eUdQUik7CiAKLSAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0
YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JN
ZXRhZGF0YSgpLCBzY3JhdGNoMik7CisgICAgb3IzMihzY3JhdGNoMywgc2NyYXRjaDIpOworICAg
IHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaDIsIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZh
bDo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKGJhc2VHUFIpKTsKICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVk
IHZhbHVlLgotICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRl
eGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICBK
dW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzY3JhdGNo
MywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CiAKICAgICAvLyBDaGVjayB0
aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdU
Mik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QzKTsKLSAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1l
cmF0b3IsIHNjcmF0Y2gxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMik7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRj
aCA9IGJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAKICAgICAv
LyBDb21wdXRlIHRoZSBvZmZzZXQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwg
cmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHNjcmF0Y2gyKTsKICAg
ICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5l
IHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVB
Y2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSks
IHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMywgcmVnVDMpOwotICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQorICAg
IEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBzY3JhdGNoMiwg
QWRkcmVzcyhzY3JhdGNoMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0
Y2gyKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0
LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgIGRv
bmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBs
aW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIo
QWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSwgcmVnVDMpOwotICAgIG5lZzMyKHJlZ1QzKTsKLSAgICBzaWduRXh0ZW5k
MzJUb1B0cihyZWdUMywgcmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlR1BSKTsKKyAgICBzdWIzMihBZGRyZXNzKHNj
cmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zm
c2V0KCkpLCBzY3JhdGNoMik7CisgICAgbmVnMzIoc2NyYXRjaDIpOworICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHNjcmF0Y2gyLCBzY3JhdGNoMik7CiAgICAgY29uc3RleHByIGludHB0cl90IG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSA9IG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSAqIHN0YXRpY19jYXN0PGludHB0cl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKLSAgICBs
b2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMywgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFBy
b3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0
Y2gyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOwogICAg
IGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmso
dGhpcyk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Okhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9l
bnVtZXJhdG9yTWV0YWRhdGEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVN
aXNtYXRjaCksIGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNl
dE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxp
bmsodGhpcyk7Ci0gICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVn
VDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7
CisgICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaDMsIFRy
dXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CiAgICAg
Ly8gUmVwbGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4
LCBwcm9wZXJ0eUdQUik7CiAKICAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKLSAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1QyKTsKKyAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoYnl0ZWNvZGUsIGJhc2VHUFIsIHNjcmF0Y2gx
KTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsK
LSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAg
bnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRl
eCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJ
bmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1
Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0g
c3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdo
dCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIGRv
bmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQogCkBAIC0yOTYxLDEwICszMDgyLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2VudW1lcmF0b3JfZ2V0X2J5XwogICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVyKTsKIH0KIAot
dGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25U
eXBlPgotdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2Rl
LCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9l
bnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBn
ZW5lcmFsQ2FzZSkKIHsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CkBAIC0yOTczLDcgKzMw
OTMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltCiAgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdU
MCk7Ci0gICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRv
ck1ldGFkYXRhKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIEJ5dGVjb2RlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSwgcmVnVDEpOworICAgIG9yMzIo
cmVnVDAsIHJlZ1QxKTsKKyAgICBzdG9yZThUb01ldGFkYXRhKHJlZ1QxLCBieXRlY29kZSwgQnl0
ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKIAogICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOwogCkBAIC0zMDYyLDYg
KzMxODQsMTMgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogICAg
IG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6OmVt
aXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKQoreworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgb3duZXIsIHNlbGVjdFNjcmF0Y2hHUFIo
b3duZXIpKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Xcml0
ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIG93bmVyKTsKKyAgICBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuLmxpbmsodGhpcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2
aXNpb24gMjgzMDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjM2LDkgKzIzNiw5IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZUNlbGwpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6
VW5zZXQKICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VDZWxs
Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxl
bmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKIAotICAgICAgICAg
ICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5
Kj4oYmFzZUNlbGwpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxp
bmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJs
b2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0QXJyYXlMZW5ndGgobG9ja2Vy
KTsKQEAgLTI0OSw4ICsyNDksOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVH
ZXRCeShKCiAgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwg
Y29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0aCwgcHJvcGVydHlOYW1lKTsKICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlQ2VsbCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAg
ICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKHN0dWJJ
bmZvKSkgewotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKHN0dWJJbmZvKTsKKyAgICAgICAgICAg
ICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxv
Y2ssIHN0dWJJbmZvKSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJ
bmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1
YkluZm8pOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRTdHJpbmdMZW5ndGgobG9ja2VyKTsKQEAg
LTMwNCw3ICszMDQsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeShK
CiAgICAgICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCiAgICAgICAgICAgICAg
ICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCiAgICAgICAg
ICAgICAgICAgJiYgIWxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAgICAgICAgICAgICBib29s
IGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5
QWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAg
ICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTZWxmUHJvcGVydHlBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90
LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGlu
ZSkgewogICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5U2VsZlBhdGNo
LCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0
eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CiAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRz
KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTczMSwxMSArNzMxLDExIEBAIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5KEoKICAgICAgICAgICAgICAgICBvbGRTdHJ1
Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBl
KCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nl
c3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgc2xvdC5jYWNoZWRP
ZmZzZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0
ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgc2xvdC5jYWNoZWRPZmZz
ZXQoKSkKICAgICAgICAgICAgICAgICAgICAgJiYgIW9sZFN0cnVjdHVyZS0+bmVlZEltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgpCiAgICAgICAgICAgICAgICAgICAgICYmICFpc1Byb3h5KSB7CiAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENv
ZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHVi
SW5mbywgb2xkU3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNl
bGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2xkU3RydWN0dXJlLCBzbG90
LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJ
bmxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlT
ZWxmUGF0Y2gsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LmJhc2UoKSA9
PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENh
bGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlv
bihzbG90LCBwdXRCeUtpbmQsIHB1dEtpbmQpKTsKQEAgLTExMzIsNyArMTEzMiw3IEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUluQnkoCiAgICAgICAgICAgICAgICAgJiYgc2xv
dC5zbG90QmFzZSgpID09IGJhc2UKICAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50
U2V0KCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUg
PSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKHN0dWJJbmZvLCBzdHJ1Y3R1cmUp
OworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlKTsK
ICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAg
ICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwogICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwg
c2xvdC5jYWNoZWRPZmZzZXQoKSk7CkBAIC0xNTUyLDcgKzE1NTIsNyBAQCBzdGF0aWMgdm9pZCBy
ZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJCiAKIHZvaWQgdW5saW5rQ2FsbChWTSYgdm0sIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewotICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpLCAiVW5saW5raW5nIGNhbGwgYXQgIiwgY2FsbExpbmtJbmZvLmZhc3RQ
YXRoU3RhcnQoKSk7CisgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCks
ICJVbmxpbmtpbmcgQ2FsbExpbmtJbmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlua0luZm8pKTsK
ICAgICAKICAgICByZXZlcnRDYWxsKHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCShyZXZpc2lvbiAyODMwOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUu
aCIKICNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgorI2luY2x1ZGUgIkNv
ZGVCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHNJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckhhbmRsaW5nU2NvcGUuaCIKQEAgLTM3
MCwxMyArMzcxLDIyIEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKFYK
ICAgICAKICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7
CiAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUVHlwZTo6QmFzZWxpbmVKSVQp
IHsKKyAgICAgICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IGJhc2VsaW5lUmVmID0gY29k
ZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlKSB7Cisg
ICAgICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKGJhc2Vs
aW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGNvZGVCbG9j
ay0+aml0TmV4dEludm9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgfQorCiAgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFj
aGVkKCkpIHsKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJkZWxheUpJ
VENvbXBpbGUiLCAoInRocmVzaG9sZCBub3QgcmVhY2hlZCwgY291bnRlciA9ICIsIGNvZGVCbG9j
ay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKSk7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgIiAgICBKSVQgdGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuIik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgSklUV29ya2xpc3Q6OlN0YXRl
IHdvcmtsaXN0U3RhdGUgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21w
bGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLCBK
SVRDb21waWxhdGlvbk1vZGU6OkJhc2VsaW5lKSk7CisgICAgSklUV29ya2xpc3Q6OlN0YXRlIHdv
cmtsaXN0U3RhdGUgPSBKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21wbGV0
ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSwgSklUQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT51bmxp
bmtlZENvZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbk1vZGU6OkJhc2VsaW5lKSk7CiAKICAgICBp
ZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6QmFzZWxpbmVKSVQpIHsKICAgICAg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIENvZGUgd2FzIGFscmVh
ZHkgY29tcGlsZWQuIik7CkBAIC00NjYsOCArNDc2LDEwIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KGxvb3Bfb3NyKQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZp
bml0ZUxvb3BzRm9yRnV6emluZygpICYmIGNvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVG
b3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKICAgICAgICAgdWludHB0cl90KiBwdHIgPSB2bS5n
ZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIocGMpOwogICAgICAgICAqcHRyICs9IGNvZGVCbG9j
ay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLm1fYWN0aXZlVGhyZXNob2xkOwotICAgICAgICBpZiAo
KnB0ciA+PSBPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkKKyAg
ICAgICAgaWYgKCpwdHIgPj0gT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xp
bWl0KCkpIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShDb25jdXJyZW50
SlNMb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spKTsgLy8gV2UncmUgcmV0dXJuaW5nIHRvIHRoZSBP
U1IgZW50cnkgY29kZSBoZXJlLCB3aGljaCBleHBlY3RzIHRoYXQgbV9qaXREYXRhIGlzIG5vdCBu
dWxsLgogICAgICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhMTEludDo6ZnV6emVyUmV0dXJuRWFy
bHlGcm9tTG9vcEhpbnRFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIGNh
bGxGcmFtZS0+dG9wT2ZGcmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyODMwOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpA
QCAtMTAxMiwxMCArMTAxMiw2IEBAIHN0cmljdEVxdWFsaXR5SnVtcE9wKGpuc3RyaWN0ZXEsIE9w
Sm5zdHIKIAogbWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3Bl
cmF0aW9uKQogICAgIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVT
dHJ1Y3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAg
ICAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBl
LCAlb3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFBy
b2ZpbGU6Om1fYml0c1t0MV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDEsIHQy
KQogICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRbY2Zy
LCB0MCwgOF0sIEludDMyVGFnLCAuc2xvdwpAQCAtMTAyMyw3ICsxMDE5LDcgQEAgbWFjcm8gcHJl
T3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICAjIE1ldGFkYXRhIGluIHQx
LCBzcmNEc3QgaW4gdDIKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbih0MiwgLnNsb3cpCiAgICAg
ICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgICAgICB1cGRhdGVB
cml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50KQorICAgICAgICB1cGRhdGVVbmFyeUFyaXRoUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgICAgICBkaXNw
YXRjaCgpCiAKICAgICAuc2xvdzoKQEAgLTEwODksMjIgKzEwODUsMTggQEAgZW5kKQogCiBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRp
c3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxl
KHR5cGUpCi0gICAgICAgIG9yaCB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9m
aWxlICsgVW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICBlbmQKLQogICAgIG1ldGFk
YXRhKHQ1LCB0MCkKICAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BOZWdh
dGVTcmNOb3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAg
bmVnaSB0MgotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgdXBk
YXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZUludCwgdDUsIHQzKQog
ICAgIHJldHVybiAoSW50MzJUYWcsIHQyKQogLm9wTmVnYXRlU3JjTm90SW50OgogICAgIGJpYSB0
MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9yaSAweDgwMDAwMDAwLCB0MQotICAg
IHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXIpCisgICAgdXBkYXRlVW5hcnlB
cml0aFByb2ZpbGUoT3BOZWdhdGUsIEFyaXRoUHJvZmlsZU51bWJlciwgdDUsIHQzKQogICAgIHJl
dHVybih0MSwgdDIpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTE1LDEwICsxMTA3LDYgQEAgZW5k
KQogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwg
aW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIGFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6
bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAg
ZW5kCi0KICAgICAgICAgbWV0YWRhdGEodDUsIHQyKQogICAgICAgICBnZXQobV9yaHMsIHQyKQog
ICAgICAgICBnZXQobV9saHMsIHQwKQpAQCAtMTEyNiw3ICsxMTE0LDcgQEAgbWFjcm8gYmluYXJ5
T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQogICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcsIC5v
cDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAub3AyTm90SW50Ci0gICAgICAg
IGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFy
aXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAg
ICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDMs
IHQxLCB0MCwgLnNsb3csIHQyKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xMTM2LDEyICsxMTI0
LDEyIEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAg
YmlhIHQyLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGJpYiB0MywgTG93ZXN0VGFnLCAub3Ax
Tm90SW50T3AyRG91YmxlCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKLSAgICAg
ICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBkYXRlQmlu
YXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50LCB0NSwg
dDQpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQog
ICAgIC5vcDFOb3RJbnRPcDJEb3VibGU6CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCi0gICAg
ICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVOdW1iZXJOdW1iZXIpCisgICAgICAgIHVwZGF0
ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZU51bWJlck51bWJl
ciwgdDUsIHQ0KQogICAgIC5vcDFOb3RJbnRSZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MSkK
ICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAKQEAgLTExNTMsNyArMTE0MSw3IEBAIG1hY3JvIGJp
bmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgIyBGaXJzdCBvcGVyYW5k
IGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBu
b3QuCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJpYSB0MywgTG93ZXN0VGFnLCAu
c2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQorICAgICAg
ICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVJbnRO
dW1iZXIsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDAsIGZ0MAogICAgICAgICBmaWkyZCB0MSwg
dDMsIGZ0MQogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDApCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQkocmV2aXNpb24gMjgzMDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw4ICs0NDEsMTMgQEAg
bWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSBQQywgYTEK
ICAgICAgICAgICAgIGNDYWxsMihfbGxpbnRfbG9vcF9vc3IpCiAgICAgICAgICAgICBidHB6IHIw
LCAucmVjb3ZlcgotCiAgICAgICAgICAgICBtb3ZlIHIxLCBzcAorCisgICAgICAgICAgICAjIEJh
c2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25zdGFudCBwb29s
LgorICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCisgICAgICAgICAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1faml0RGF0YVtQQl0sIFBCCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxv
Y2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwgUEIKKwogICAgICAgICAgICAgaWYg
QVJNNjRFCiAgICAgICAgICAgICAgICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpv
ZmZzZXRPZkpTQ0NvbmZpZ0dhdGVNYXAgKyAoY29uc3RleHByIEdhdGU6Omxvb3BPU1JFbnRyeSkg
KiBQdHJTaXplLCBhMgogICAgICAgICAgICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQ
dHJUYWcgIyBKU0VudHJ5UHRyVGFnCkBAIC0xMDU2LDEwICsxMDYxLDYgQEAgc3RyaWN0RXF1YWxp
dHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBv
cGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBl
KQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQKLQog
ICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQx
CiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA3MCw3IEBAIG1hY3JvIHBy
ZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJhdGlv
bih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3JlcSB0
MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJ
bnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQ
cm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAt
MTEzNCwxMSArMTEzNSw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0
ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBl
LCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6
Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikKQEAg
LTExNDYsMTIgKzExNDIsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVn
YXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQz
CiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9m
aWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2Zp
bGVJbnQsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAgYnRx
eiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAwMDAw
MDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1
cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0MSwg
dDIpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE2MCw2
IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGludE9w
V2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQw
KQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAl
b3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3JocywgdDApCiAg
ICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6
ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9y
ZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2Vy
T3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmlsZShB
cml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBkaXNwYXRjaCgp
CiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE3OSwxMCBAQCBtYWNybyBiaW5hcnlP
cEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywg
LnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQot
ICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVy
LCB0NSwgdDIpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3Ay
SW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50
LCB0NSwgdDIpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6CiAg
ICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA0LDkgKzExOTYsOSBAQCBtYWNybyBiaW5hcnlP
cEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAKICAgICAub3AyTm90SW50OgogICAgICAgICAj
IEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5p
dGVseSBub3QuCi0gICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJl
clRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAg
ICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUlu
dE51bWJlciwgdDUsIHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBjaTJkcyB0
MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20JKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTQyMCw3ICsx
NDIwLDggQEAgZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5jcmVtZW50LCBhY3Rpb24p
CiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgYmFkZGlzIGluY3JlbWVudCwgQ29k
ZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6
Om1fY291bnRlclt0MF0sIC5jb250aW51ZQorICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4
ZWN1dGVDb3VudGVyW3QwXSwgdDAKKyAgICBiYWRkaXMgaW5jcmVtZW50LCBCYXNlbGluZUV4ZWN1
dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgIGFjdGlvbigpCiAgICAg
LmNvbnRpbnVlOgogZW5kCkBAIC0xNTAzLDcgKzE1MDQsOCBAQCBtYWNybyBwcm9sb2d1ZShjb2Rl
QmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgY29kZUJsb2NrR2V0dGVyKHQxKQogICAgIGNvZGVC
bG9ja1NldHRlcih0MSkKICAgICBpZiBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQotICAgICAg
ICBiYWRkaXMgNSwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4
ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MV0sIC5jb250aW51ZQorICAgICAgICBsb2FkcCBD
b2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MV0sIHQwCisgICAgICAgIGJhZGRpcyA1
LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAg
ICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAgICAgICAg
bW92ZSBQQywgYTEKQEAgLTE2MTcsMTQgKzE2MTksMTQgQEAgbWFjcm8gZnVuY3Rpb25Jbml0aWFs
aXphdGlvbihwcm9maWxlQXJnUwogICAgICMgb3B0aW1hbCB3YXkgZm9yIGFyY2hpdGVjdHVyZXMg
dGhhdCBoYXZlIG1vcmUgdGhhbiBmaXZlIHJlZ2lzdGVycyBhdmFpbGFibGUKICAgICAjIGZvciBh
cmJpdHJhcnkgdXNlIGluIHRoZSBpbnRlcnByZXRlci4KICAgICBsb2FkaSBDb2RlQmxvY2s6Om1f
bnVtUGFyYW1ldGVyc1t0MV0sIHQwCi0gICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQwICMgVXNl
IGFkZGkgYmVjYXVzZSB0aGF0J3Mgd2hhdCBoYXMgdGhlIHBlZXBob2xlCisgICAgYWRkcCAtcHJv
ZmlsZUFyZ1NraXAsIHQwCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnBndGVxIHQwLCAwLCBvayBl
bmQpCiAgICAgYnRweiB0MCwgLmFyZ3VtZW50UHJvZmlsZURvbmUKICAgICBsb2FkcCBDb2RlQmxv
Y2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzICsgRml4ZWRWZWN0b3I6Om1fc3RvcmFnZSArIFJl
ZkNvdW50ZWRBcnJheTo6bV9kYXRhW3QxXSwgdDMKICAgICBidHB6IHQzLCAuYXJndW1lbnRQcm9m
aWxlRG9uZSAjIFdoZW4gd2UgY2FuJ3QgSklULCB3ZSBkb24ndCBhbGxvY2F0ZSBhbnkgYXJndW1l
bnQgdmFsdWUgcHJvZmlsZXMuCiAgICAgbXVscCBzaXplb2YgVmFsdWVQcm9maWxlLCB0MCwgdDIg
IyBBYWFhYWhoaGghIE5lZWQgc3RyZW5ndGggcmVkdWN0aW9uIQogICAgIGxzaGlmdHAgMywgdDAg
IyBvZmZzZXQgb2YgbGFzdCBKU1ZhbHVlIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCi0gICAgYWRk
cCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gQ29kZUJs
b2NrOjptX2FyZ3VtZW50VmFsdWVQcm9maWxlcy4KKyAgICBhZGRwIHQyLCB0MyAjIHBvaW50ZXIg
dG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBpbiB0aGUgdmFsdWUgcHJvZmlsZSBhcnJheS4K
IC5hcmd1bWVudFByb2ZpbGVMb29wOgogICAgIGlmIEpTVkFMVUU2NAogICAgICAgICBsb2FkcSBU
aGlzQXJndW1lbnRPZmZzZXQgLSA4ICsgcHJvZmlsZUFyZ1NraXAgKiA4W2NmciwgdDBdLCB0MgpA
QCAtMjU2Myw2ICsyNTY1LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQK
IAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1l
dGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxl
OjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bj
b2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBl
LCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBz
aG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFT
U0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBu
b3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVh
YmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgzMDk2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0g
ZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVG
cm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2Nr
KiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRp
ZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5p
cXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4K
KyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7Cisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBD
YWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhD
b2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENh
Y2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3Ry
aW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRp
ZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4
MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJs
b2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5
cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2Nr
LCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNo
ZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJs
ZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVu
dGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCShyZXZp
c2lvbiAyODMwOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJDYWNoZWRUeXBlcy5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2Rl
LmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDYWNoZUVy
cm9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCkBAIC0xOTE4LDYg
KzE5MTksOCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1WYWx1ZVByb2ZpbGVzKCkgY29u
c3QgeyByZXR1cm4gbV9udW1WYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5zaWduZWQgbnVtQXJyYXlQ
cm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJyYXlQcm9maWxlczsgfQorICAgIHVuc2ln
bmVkIG51bUJpbmFyeUFyaXRoUHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bUJpbmFyeUFy
aXRoUHJvZmlsZXM7IH0KKyAgICB1bnNpZ25lZCBudW1VbmFyeUFyaXRoUHJvZmlsZXMoKSBjb25z
dCB7IHJldHVybiBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsgfQogCiBwcml2YXRlOgogICAgIFZp
cnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKQEAgLTE5NTIsNiArMTk1NSw4IEBAIHByaXZh
dGU6CiAKICAgICB1bnNpZ25lZCBtX251bVZhbHVlUHJvZmlsZXM7CiAgICAgdW5zaWduZWQgbV9u
dW1BcnJheVByb2ZpbGVzOworICAgIHVuc2lnbmVkIG1fbnVtQmluYXJ5QXJpdGhQcm9maWxlczsK
KyAgICB1bnNpZ25lZCBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsKIAogICAgIENhY2hlZE1ldGFk
YXRhVGFibGUgbV9tZXRhZGF0YTsKIApAQCAtMjE2MCw2ICsyMTY1LDggQEAgQUxXQVlTX0lOTElO
RSBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZQogICAgICwgbV9yYXJlRGF0YShjYWNoZWRDb2Rl
QmxvY2sucmFyZURhdGEoZGVjb2RlcikpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZXMoY2FjaGVkQ29k
ZUJsb2NrLm51bVZhbHVlUHJvZmlsZXMoKSkKICAgICAsIG1fYXJyYXlQcm9maWxlcyhjYWNoZWRD
b2RlQmxvY2subnVtQXJyYXlQcm9maWxlcygpKQorICAgICwgbV9iaW5hcnlBcml0aFByb2ZpbGVz
KGNhY2hlZENvZGVCbG9jay5udW1CaW5hcnlBcml0aFByb2ZpbGVzKCkpCisgICAgLCBtX3VuYXJ5
QXJpdGhQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVtVW5hcnlBcml0aFByb2ZpbGVzKCkpCiB7
CiB9CiAKQEAgLTIzMzcsNiArMjM0NCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2Rl
QmxvY2s8Q29kZUIKICAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29kZUJsb2NrLm1faGFzQ2hlY2tw
b2ludHM7CiAgICAgbV9udW1WYWx1ZVByb2ZpbGVzID0gY29kZUJsb2NrLm1fdmFsdWVQcm9maWxl
cy5zaXplKCk7CiAgICAgbV9udW1BcnJheVByb2ZpbGVzID0gY29kZUJsb2NrLm1fYXJyYXlQcm9m
aWxlcy5zaXplKCk7CisgICAgbV9udW1CaW5hcnlBcml0aFByb2ZpbGVzID0gY29kZUJsb2NrLm1f
YmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgbV9udW1VbmFyeUFyaXRoUHJvZmlsZXMg
PSBjb2RlQmxvY2subV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOwogCiAgICAgbV9tZXRhZGF0
YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEuZ2V0KCkpOwogICAgIG1fcmFy
ZURhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVEYXRhLmdldCgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cAkocmV2aXNpb24gMjgzMDk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19E
RUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3Rh
dGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRh
ZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAg
VW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051
bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4MzA5
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9CiAgICAgc3RhdGljIGlubGlu
ZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJk
aWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsgfQorICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI4
MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MzQsOCArNDM0LDYgQEAgdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBl
bmRlbnRPcHRpb25zKAogICAgIE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpID0gZmFsc2U7CiAj
ZW5kaWYKIAotICAgIGlmICghaXNBUk02NCgpKQotICAgICAgICBPcHRpb25zOjp1c2VEYXRhSUMo
KSA9IGZhbHNlOwogICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCiAgICAgICAgIE9wdGlv
bnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpID0gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjgzMDk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzA5LDcgKzMwOSw2IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5
KCk7CiAgICAgdihJbnQzMiwgZXZhbFRocmVzaG9sZE11bHRpcGxpZXIsIDEwLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBtYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0
aCwgMjU2LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCi0gICAgdihCb29sLCByYW5kb21pemVF
eGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
Rm9yQmFzZWxpbmUsIDEwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGlt
dW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JVcHBlclRpZXJzLCA1MDAwMCwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgXApAQCAtNTMyLDYgKzUzMSw3IEBAIGJvb2wgY2FuVXNl
V2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihCb29sLCB1c2VEYXRhSUMsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCwg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDU2hhcmluZywg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgdXNlQmFzZWxpbmVKSVRDb2Rl
U2hhcmluZywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIC8qIEZlYXR1cmUg
RmxhZ3MgKi9cCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ny
aXB0RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOTYsMTAgKzM5NiwxOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JF
eGVjdXRpCiAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlQnl0ZWNvZGUoKSkKICAgICAgICAgY29k
ZUJsb2NrLT52YWxpZGF0ZSgpOwogCi0gICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpCi0gICAg
ICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKLSAgICBlbHNlCi0gICAgICAgIHNldHVwSklUKHZt
LCBjb2RlQmxvY2spOworICAgIGJvb2wgaW5zdGFsbGVkVW5saW5rZWRCYXNlbGluZUNvZGUgPSBm
YWxzZTsKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBi
YXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJh
c2VsaW5lQ29kZSkgeworICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxp
bmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBpbnN0YWxsZWRV
bmxpbmtlZEJhc2VsaW5lQ29kZSA9IHRydWU7CisgICAgfQorI2VuZGlmCisgICAgaWYgKCFpbnN0
YWxsZWRVbmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dXNlTExJ
bnQoKSkKKyAgICAgICAgICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CisgICAgfQogCiAgICAgaW5zdGFs
bENvZGUodm0sIGNvZGVCbG9jaywgY29kZUJsb2NrLT5jb2RlVHlwZSgpLCBjb2RlQmxvY2stPnNw
ZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21MTEludFRpZXJVcENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHJldmlzaW9uIDI4MzA5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFm
dGVyV2FybVVwKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1Vw
VG9CQlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRG
b3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJl
c2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAg
c2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJt
VXAoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVh
Y2hlZCgpCkBAIC02NSw5ICs2NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplU29vbigp
CiAgICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0g
ICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1p
emVTb29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigp
LCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hv
bGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAgICAgfQogCiAgICAgc3RydWN0IE9TUkVudHJ5RGF0
YSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3Vu
dC5jcHAJKHJldmlzaW9uIDI4MzA5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UaWVyVXBDb3VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogVGllclVwQ291bnQ6OlRpZXJVcENvdW50KCkK
IHsKLSAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVB
ZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhy
ZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKIH0KIAogVGllclVwQ291bnQ6On5U
aWVyVXBDb3VudCgpID0gZGVmYXVsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UaWVyVXBDb3VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21UaWVyVXBDb3VudC5oCShyZXZpc2lvbiAyODMwOTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyAr
NzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuIik7
Ci0gICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6
ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9u
czo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBi
b29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKQEAgLTkwLDE0ICs5MCwx
NCBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi4i
KTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKDAsIG51bGxwdHIpOworICAgICAgICBzZXROZXdU
aHJlc2hvbGQoMCk7CiAgICAgfQogCiAgICAgdm9pZCBvcHRpbWl6ZVNvb24odWludDMyX3QgZnVu
Y3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgc29vbi4iKTsKICAgICAgICAg
Ly8gRklYTUU6IE5lZWQgYWRqdXN0bWVudCBvbmNlIHdlIGdldCBtb3JlIGluZm9ybWF0aW9uIGFi
b3V0IHdhc20gZnVuY3Rpb25zLgotICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhy
ZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJl
c2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAog
ICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0
KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKSW5kZXg6
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODMwOTYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA5LTI2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBw
bGUuY29tPgorCisgICAgICAgIEJ1aWxkIGFuIHVubGlua2VkIGJhc2VsaW5lIEpJVAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjIzCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS84MjMyMTc3Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2Ug
U3V6dWtpLgorCisgICAgICAgICogd3RmL0JhZy5oOgorICAgICAgICAqIHd0Zi9QYWNrZWQuaDoK
KyAgICAgICAgKFdURjo6UGFja2VkQWxpZ25lZFB0cjo6b3BlcmF0b3IqIGNvbnN0KToKKwogMjAy
MS0wOS0yNiAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyODMwODMgYW5kIHIyODMwODguCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2
aXNpb24gMjgzMDk2KQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDYgKzY2LDIwIEBAIHB1YmxpYzoKICAgICAgICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsK
ICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEJhZyYgb3BlcmF0b3I9KEJh
ZzxULCBVPiYmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHVud3JhcHBlZEhlYWQoKSA9PSBv
dGhlci51bndyYXBwZWRIZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAg
ICAgQmFnIGRlc3Ryb3k7CisgICAgICAgIGRlc3Ryb3kubV9oZWFkID0gdW53cmFwcGVkSGVhZCgp
OworICAgICAgICBtX2hlYWQgPSBvdGhlci51bndyYXBwZWRIZWFkKCk7CisgICAgICAgIG90aGVy
Lm1faGVhZCA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwogICAg
IH5CYWcoKQogICAgIHsKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Bh
Y2tlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCShyZXZpc2lvbiAy
ODMwOTYpCisrKyBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMTg2
LDcgKzE4NiwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuIGdldCgpOyB9Ci0gICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKmdl
dCgpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSA9IFQ+CisgICAgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8IXN0ZDo6aXNfdm9pZF92PFU+LCBVJj46OnR5cGUgb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gKmdldCgpOyB9CisKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuICFnZXQoKTsgfQogCiAgICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBp
bXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVz
LgpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCShyZXZpc2lvbiAyODMwOTYpCisr
KyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC04
NjMsNyArODYzLDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVE5vQWNjZXNzSW5saW5pbmcoKm9wdGlvbgog
ZW5kCiAKIGRlZiBydW5GVExOb0NKSVRTbWFsbFBvb2woKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0
aW9ucykKLSAgICBydW4oImZ0bC1uby1jaml0LXNtYWxsLXBvb2wiLCAiLS1qaXRNZW1vcnlSZXNl
cnZhdGlvblNpemU9MTAyNDAwIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIG9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJmdGwtbm8tY2ppdC1zbWFsbC1w
b29sIiwgIi0taml0TWVtb3J5UmVzZXJ2YXRpb25TaXplPTIwMjQwMCIsICooRlRMX09QVElPTlMg
KyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAK
IGRlZiBydW5Ob0NKSVQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTExNzEsNyAr
MTE3MSw3IEBAIGRlZiBkZWZhdWx0UnVuTW9kdWxlcyhub0xMSW50OiB0cnVlKQogICAgIHJ1bigi
ZnRsLW5vLWNqaXQtbm8taW5saW5lLXZhbGlkYXRlLW1vZHVsZXMiLCAiLW0iLCAiLS12YWxpZGF0
ZUdyYXBoPXRydWUiLCAiLS1tYXhpbXVtSW5saW5pbmdEZXB0aD0xIiwgKihGVExfT1BUSU9OUyAr
IE5PX0NKSVRfT1BUSU9OUykpCiAgICAgcnVuKCJmdGwtZWFnZXItbW9kdWxlcyIsICItbSIsICoo
RlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TKSkKICAgICBydW4oImZ0bC1lYWdlci1uby1jaml0
LW1vZHVsZXMiLCAiLW0iLCAiLS12YWxpZGF0ZUdyYXBoPXRydWUiLCAqKEZUTF9PUFRJT05TICsg
Tk9fQ0pJVF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUykpCi0gICAgcnVuKCJmdGwtbm8tY2ppdC1z
bWFsbC1wb29sLW1vZHVsZXMiLCAiLW0iLCAiLS1qaXRNZW1vcnlSZXNlcnZhdGlvblNpemU9MTAy
NDAwIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUykpCisgICAgcnVuKCJmdGwtbm8t
Y2ppdC1zbWFsbC1wb29sLW1vZHVsZXMiLCAiLW0iLCAiLS1qaXRNZW1vcnlSZXNlcnZhdGlvblNp
emU9MjAyNDAwIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUykpCiBlbmQKIAogZGVm
IG5vTm9MTEludFJ1bk1vZHVsZXMK
</data>
<flag name="commit-queue"
          id="462934"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439326</attachid>
            <date>2021-09-27 00:44:00 -0700</date>
            <delta_ts>2021-09-27 13:24:02 -0700</delta_ts>
            <desc>[fast-cq] patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>654483</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMTAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzNSBA
QAorMjAyMS0wOS0yNyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGFkZHMgYW4gInVubGlua2VkIiBiYXNlbGluZSBKSVQgdG8gSlNWQUxVRTY0
IHBsYXRmb3Jtcy4gVGhlIEpJVAorICAgICAgICBjb2RlIHByb2R1Y2VkIGJ5IHRoaXMgYmFzZWxp
bmUgSklUIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBhbGwgQ29kZUJsb2NrcyB0aGF0CisgICAgICAg
IHNoYXJlIGFuIFVubGlua2VkQ29kZUJsb2NrLiBUaGUgYmVuZWZpdCBvZiB0aGlzIGlzLCBpZiB3
ZSdyZSBjcmVhdGluZyBhIENvZGVCbG9jaworICAgICAgICBmcm9tIGFuIFVubGlua2VkQ29kZUJs
b2NrIHRoYXQgYWxyZWFkeSBjb21waWxlZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAg
ICAgaW5zdGFuY2UsIHRoaXMgbmV3IENvZGVCbG9jayBqdXN0IHN0YXJ0cyBvZmYgZXhlY3V0aW5n
IGluIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgImZvciBmcmVlIi4KKyAgICAgICAgCisgICAg
ICAgIFRvIG1ha2UgdGhpcyB3b3JrLCB0aGUgY29kZSB3ZSBlbWl0IG5vdyBuZWVkcyB0byBiZSBp
bmRlcGVuZGVudCBvZiBhIHNwZWNpZmljCisgICAgICAgIENvZGVCbG9jayBpbnN0YW5jZS4gV2Ug
dXNlIGEgQ29kZUJsb2NrIGluc3RhbmNlIGZvciBtaW5pbWFsIHByb2ZpbGluZyBpbmZvcm1hdGlv
bgorICAgICAgICB3aGVuIGNvbXBpbGluZywgYnV0IG90aGVyd2lzZSwgdGhlIGNvZGUgaXMgdGll
ZCB0byB0aGUgVW5saW5rZWRDb2RlQmxvY2suIFdoZW4KKyAgICAgICAgd2UgbmVlZCBDb2RlQmxv
Y2sgc3BlY2lmaWMgaW5mb3JtYXRpb24sIHdlIGxvYWQgaXQuIFRoaXMgdXN1YWxseSBtZWFucyB0
aGluZ3MKKyAgICAgICAgbGlrZSB3ZSdsbCBsb2FkIHRoaW5ncyBmcm9tIHRoZSBNZXRhZGF0YSBk
eW5hbWljYWxseS4gVGhpcyBwYXRjaCBhbHNvIGFkZHMgYQorICAgICAgICAibGlua2VkIGNvbnN0
YW50IHBvb2wiIGNvbmNlcHQsIGFuZCBhbnl0aW1lIHdlIGluc3RhbnRpYXRlIHN1Y2ggYSBDb2Rl
QmxvY2ssCisgICAgICAgIHdlIGFsc28gbmVlZCB0byBpbnN0YW50aWF0ZSB0aGlzICJsaW5rZWQg
Y29uc3RhbnQgcG9vbCIuIFRoaXMgY29udGFpbnMgdGhpbmdzCisgICAgICAgIGxpa2Ugb3VyIGlu
bGluZSBjYWNoZSBkYXRhIHN0cnVjdHVyZXMgKFN0cnVjdHVyZVN0dWJJbmZvKiksIEpTR2xvYmFs
T2JqZWN0KiwKKyAgICAgICAgZXRjLgorICAgICAgICAKKyAgICAgICAgVW5saW5rZWQgYmFzZWxp
bmUgSklUIGFsd2F5cyBydW5zIElDcyBpbiB0aGUgImRhdGEiIG1vZGUuIFRvIG1ha2UgdGhpcyB3
b3JrLCBJCisgICAgICAgIG1hZGUgZGF0YSBJQ3Mgd29yayBvbiB4ODZfNjQuIFRvIGRvIHRoaXMs
IHdlIG5vIGxvbmdlciBjYWxsL3JldCB0byB0aGUgSUMuCisgICAgICAgIEluc3RlYWQsIHdlIGp1
bXAgdG8gdGhlIElDLCBhbmQgdGhlIElDIGp1bXBzIGJhY2sgYnkgbG9hZGluZyB0aGUgImRvbmUi
IGxvY2F0aW9uCisgICAgICAgIGZyb20gdGhlIFN0cnVjdHVyZVN0dWJJbmZvIGR5bmFtaWNhbGx5
LiBUaGlzIHNpbXBsaWZpZXMgdGhlIGRlc2lnbiB0byBub3QgYmUKKyAgICAgICAgYmFzZWQgb24g
dGhlIGFybTY0IGNhbGxpbmcgY29udmVudGlvbiwgYW5kIGtlZXBzIHRoZSBzYW1lIHBlcmZvcm1h
bmNlIGNoYXJhY3RlcmlzdGljcy4gCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsc28g
YWRkcyBhIG5ldyB2ZXJzaW9uIG9mIElubGluZUFjY2VzcyB0aGF0IGlzIG9ubHkgdXNlZCBpbiBi
YXNlbGluZQorICAgICAgICBKSVQgKGZvciBub3cpLiBJbiB0aGUgZnV0dXJlLCB3ZSBjYW4gbWFr
ZSB0aGUgREZHL0ZUTCBhbHNvIHVzZSB0aGlzIGZvciBEYXRhCisgICAgICAgIElDcy4gQnV0IHdl
IGRvbid0IG5lZWQgdG8gZG8gdGhhdCB5ZXQgc2luY2UgdGhvc2UgdGllcnMgZG9uJ3QgdXNlIGRh
dGEgSUNzIGJ5CisgICAgICAgIGRlZmF1bHQuIFRoZSBiYXNlbGluZSBKSVQgbm93IGhhcyBhIHB1
cmUgZGF0YSBJQyBhcHByb2FjaCB0byBJbmxpbmVBY2Nlc3MuIFNvCisgICAgICAgIGluc3RlYWQg
b2YgcmVwYXRjaGluZyBjb2RlLCB3ZSByZXBhdGNoIGZpZWxkcyB3ZSBsb2FkIGR5bmFtaWNhbGx5
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGNsZWFucyB1cCBhIGZldyB0aGlu
Z3MgaW4gT1NSIGV4aXQsIHdoZXJlIGJvdGggREZHL0ZUTCB3ZXJlCisgICAgICAgIHN0b3Jpbmcg
Y2FsbGVlIHNhdmVzIHRvIHRoZSBjYWxsZWUgc2F2ZXMgYnVmZmVyIGluIGEgd2VpcmQgcGxhY2Us
IGFuZCBzZXBhcmF0ZQorICAgICAgICBmcm9tIG9uZSBhbm90aGVyLiBJIG5vdGljZWQgdGhpcyBj
b2RlIGNhbiBiZSBzaW1wbGlmaWVkIGlmIHdlIGp1c3Qgc3RvcmUKKyAgICAgICAgY2FsbGVlIHNh
dmVzIGF0IHRoZSBlbmQgb2YgdGhlIE9TUiBleGl0IGhhbmRsZXIsIGFuZCBmcm9tIGNvbW1vbiBK
SVQgZW1pc3Npb24KKyAgICAgICAgY29kZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBmaXhlcyBhIGJ1ZyB3aGVyZSB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGUgd3JvbmcgKGFu
ZCBhbHdheXMKKyAgICAgICAgbW9yZSBuZWdhdGl2ZSkgU1AgaW4gdGhlIGJhc2VsaW5lIEpJVC4g
VGhpcyBjb3VsZCBoYXBwZW4gd2hlbiB3ZSBPU1IgZXhpdAorICAgICAgICBmcm9tIGFuIGlubGlu
ZWQgZ2V0dGVyL3NldHRlci4gVGhlIE9TUiBleGl0IGNvZGUgcHV0cyB0aGUgcmV0dXJuIFBDIHdo
ZW4KKyAgICAgICAgcmV0dXJuaW5nIHRvIHRoZSBjYWxsIHNpdGUgb2YgdGhlIGdldHRlci9zZXR0
ZXIgdG8gYmUgdGhlIGlubGluZSBjYWNoZSdzCisgICAgICAgICJkb25lIGxvY2F0aW9uIi4gSG93
ZXZlciwgdGhpcyAiZG9uZSBsb2NhdGlvbiIgZGlkbid0IHVzZWQgdG8gcmVzdG9yZSBTUC4KKyAg
ICAgICAgVGhpcyBwYXRjaCBjb25zZXJ2YXRpdmVseSBtYWtlcyBpdCBzbyB0aGF0IHdlIHJlc3Rv
cmUgdGhlIFNQIGF0IHRoZXNlIHNpdGVzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBtZWFz
dXJlZCBhcyBhIDElIHNwZWVkdXAgb24gU3BlZWRvbWV0ZXIyLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVPcGVy
YW5kc0ZvckNoZWNrcG9pbnQuaDoKKyAgICAgICAgKEpTQzo6dmFsdWVQcm9maWxlT2Zmc2V0Rm9y
KToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpD
YWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86
OmVtaXRGYXN0UGF0aEltcGwpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCk6CisgICAgICAgIChK
U0M6OkNhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyk6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmg6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c2xvd1N0
dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmFkZHJlc3NPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpmcmFtZVJlZ2lzdGVyQ291bnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJpbmFyeUFy
aXRoUHJvZmlsZUZvclBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmFyeUFyaXRoUHJv
ZmlsZUZvclBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kUEMpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdFNvb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdE5l
eHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNo
ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVEFkZElDKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRNdWxJQyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUU3ViSUMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpqaXRBZnRlcldhcm1VcCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25z
dGFudFBvb2wpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNlbGluZUpJVENvbnN0YW50UG9vbCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmRvbnRKSVRBbnl0aW1lU29vbik6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6bGxpbnRFeGVjdXRlQ291bnRlciBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZHJlc3NPZk51bVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmlzS25vd25DZWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjphZGRNYXRoSUMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldEpJVENvZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdENv
ZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN3aXRjaEp1bXBUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3RyaW5nU3dpdGNoSnVtcFRh
YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6aml0Q29kZU1hcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFz
ZWxpbmVTd2l0Y2hKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJhc2VsaW5l
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdTd2l0
Y2hKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRmZ1N0cmluZ1N3aXRjaEp1
bXBUYWJsZSk6CisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwOgorICAgICAgICAoSlND
OjpFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OnNldFRocmVzaG9sZCk6CisgICAg
ICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRp
b25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlk
TWV0YWRhdGEuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3Ro
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRh
dGE6Om9mZnNldE9mTW9kZSk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRT
aXRlRmVlZGJhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0
dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
SW5CeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2spOgor
ICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OklubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoSlNDOjpJbmxp
bmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKToKKyAgICAgICAgKEpT
Qzo6SW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5saW5l
QWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aCk6CisgICAgICAgIChKU0M6OklubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZkluQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2Nlc3MpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnJlc2V0
U3R1YkFzSnVtcEluQWNjZXNzKToKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuaDoK
KyAgICAgICAgKiBieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaDoKKyAgICAgICAgKEpT
Qzo6SXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rlcyk6CisgICAgICAgICog
Ynl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6TExJbnRDYWxsTGlu
a0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKToKKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUu
aDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6c3VjY2VlZCk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0dlbmVyYXRpb25TdGF0ZTo6Y2FsY3VsYXRlTGl2ZVJlZ2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRp
b25IYW5kbGluZyk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2Vy
dmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucyk6CisgICAgICAg
IChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDoKKyAgICAgICAg
KEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5m
bzo6aW5pdEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Omlu
aXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0
SW5CeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3ND
YXNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJlc2V0KToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkRv
bmVMb2NhdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6cHJpbnRTdXBlclNhbXBsZXJTdGF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRl
bnRpZmllcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JK
SVQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9m
aWxlcyk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25BdCBjb25zdCk6CisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjppbnN0cnVjdGlvbnNTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6Omxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJu
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzZXQp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YmluYXJ5QXJpdGhQcm9maWxlKToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnVuYXJ5QXJpdGhQcm9maWxlKToKKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZE1ldGFkYXRhVGFibGU6Om9mZnNldEluTWV0YWRhdGFUYWJsZSk6CisgICAgICAgICog
Ynl0ZWNvZGUvVmFsdWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUJhc2U6
OlZhbHVlUHJvZmlsZUJhc2UpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNlOjpjbGVh
ckJ1Y2tldHMpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNr
ZXQpOgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmg6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmg6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6
CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVw
YXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6aGFuZGxlRXhpdENvdW50cyk6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMpOgorICAgICAgICAoSlNDOjpERkc6
OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1
bXBUb1RhcmdldCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dFByaXZhdGVOYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlQWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlU3ViKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlTmVnYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlTXVsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
Z1NoYWRvd0NoaWNrZW5UYWlsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEpJVENvZGUu
aDoKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmFkZE1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVVbmFyeU1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVCaW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUHV0UHJpdmF0ZU5hbWUpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAg
ICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21w
aWxlU3R1Yik6CisgICAgICAgICogZ2VuZXJhdG9yL01ldGFkYXRhLnJiOgorICAgICAgICAqIGpp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0
b3JlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFs
Q2FsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0
aG91dE1vdmluZ0dsb2JhbE9iamVjdCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5o
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hdGhJQ0hvbGRlcjo6YWRkSklUQWRkSUMpOgorICAg
ICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKToKKyAgICAgICAgKEpTQzo6TWF0
aElDSG9sZGVyOjphZGRKSVRTdWJJQyk6CisgICAgICAgIChKU0M6Ok1hdGhJQ0hvbGRlcjo6YWRk
SklUTmVnSUMpOgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyk6Cisg
ICAgICAgIChKU0M6OkJhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKToKKyAgICAgICAg
KEpTQzo6QmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKToKKyAgICAgICAgKiBqaXQv
QmFzZWxpbmVKSVRDb2RlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6
OmFkZCk6CisgICAgICAgIChKU0M6OkpJVENvbnN0YW50UG9vbDo6c2l6ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpJVENvbnN0YW50UG9vbDo6YXQgY29uc3QpOgorICAgICAgICAqIGppdC9CYXNl
bGluZUpJVFBsYW4uY3BwOgorICAgICAgICAoSlNDOjpCYXNlbGluZUpJVFBsYW46OmZpbmFsaXpl
KToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Q0NhbGxI
ZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwpOgorICAgICAgICAoSlNDOjpD
Q2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KToKKyAgICAgICAgKiBqaXQv
Q0NhbGxIZWxwZXJzLmg6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmg6CisgICAgICAgICog
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZs
ZXI6OkNhbGxGcmFtZVNodWZmbGVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OnByZXBhcmVGb3JUYWlsQ2FsbCk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVyLmg6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzbmFwc2hvdCBjb25zdCk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhclJl
YWRPbmx5Q2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNl
dCk6CisgICAgICAgIChKU0M6OkpJVDo6cmVzZXRTUCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRD
b25zdGFudFBvb2xSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAoSlNDOjpKSVQ6OmZp
bmFsaXplT25NYWluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKToKKyAgICAgICAgKEpT
Qzo6SklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAg
ICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZWdhdGUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfYWRkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElD
RmFzdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZGl2KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX211bCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zdWIpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2FsbFJlc3VsdCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxs
RXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlND
OjpKSVRDb2RlOjp1c2VEYXRhSUMpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpwY1RvQ29kZU9y
aWdpbk1hcCk6CisgICAgICAgICogaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9KSVRD
b21waWxhdGlvbktleS5oOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6SklUQ29t
cGlsYXRpb25LZXkpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6b3BlcmF0b3Ih
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJh
dG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6aGFzaCBjb25z
dCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojpwcm9maWxlZEJsb2NrIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUp
OgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6SklU
R2V0QnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmdlbmVyYXRlR2V0QnlJZElubGluZUFj
Y2Vzcyk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
UHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklURGVsQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAg
ICAoSlNDOjpKSVREZWxCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAgICAg
KEpTQzo6SklUSW5CeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAgIChK
U0M6OkpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVEdldEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgor
ICAgICAgICAoSlNDOjpKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhdGgpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KToKKyAg
ICAgICAgKEpTQzo6SklUOjppc0tub3duQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0Q29u
c3RhbnRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKToKKyAgICAgICAgKEpTQzo6SklUOjps
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6YWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6SklUOjpqdW1wVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6SklUOjps
b2FkUHRyRnJvbU1ldGFkYXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkMzJGcm9tTWV0YWRh
dGEpOgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKToKKyAgICAgICAgKEpT
Qzo6SklUOjpzdG9yZThUb01ldGFkYXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpzdG9yZTMyVG9N
ZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmxvYWRHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29waWVkR2V0UHV0SW5mbyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpJVDo6Y29waWVkQXJpdGhQcm9maWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3Yp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lu
c3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZCk6CisgICAgICAg
IChKU0M6OkpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9m
dW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6dmFsdWVJc0ZhbHNleUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX3B0cik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6dmFsdWVJc1RydXRoeUdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6b3BfdGhyb3df
aGFuZGxlckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfanN0cmlj
dGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90b19udW1lcmljKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9j
aGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVidWcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
ZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6b3BfZW50ZXJf
aGFuZGxlckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX2puZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvb3BfaGludCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMpOgorICAgICAgICAo
SlNDOjpKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1
bmNDb21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19j
aGlja2VuX3RhaWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9s
X2Zsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YpOgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVj
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmlu
ZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfanN0cmlj
dGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfbmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2No
YXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9j
cmVhdGVfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgICogaml0L0pJVE9wZXJh
dGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFBsYW4uY3BwOgor
ICAgICAgICAoSlNDOjpKSVRQbGFuOjprZXkpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpK
SVQ6OnNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29w
X2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3NldF9wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2No
ZWNrX3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6c2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNs
b3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92
YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3df
b3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2RlbF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAg
ICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
c2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SGFzUHJpdmF0ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
UmVzb2x2ZUNsb3N1cmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29w
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKToKKyAg
ICAgICAgKEpTQzo6SklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0
ZU9wR2V0RnJvbVNjb3BlVGh1bmspOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9uZXh0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19w
cm9wZXJ0eUltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKTogRGVsZXRlZC4KKyAgICAgICAgKiBq
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2RlbF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcml2YXRl
X25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Y2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfY2hl
Y2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV92
YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQ
cml2YXRlU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90
b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQpOgorICAgICAgICAqIGppdC9S
ZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeSk6CisgICAgICAgIChKU0M6
OnRyeUNhY2hlUHV0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUluQnkpOgorICAgICAgICAo
SlNDOjp1bmxpbmtDYWxsKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyk6CisgICAgICAg
IChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgor
ICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKToKKyAgICAg
ICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJs
b2NrOjpudW1CaW5hcnlBcml0aFByb2ZpbGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
Q29kZUJsb2NrOjpudW1VbmFyeUFyaXRoUHJvZmlsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNo
ZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46OmVuY29kZSk6CisgICAgICAgICogcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjp1cGRhdGVBcml0aFByb2ZpbGVGb3JV
bmFyeUFyaXRoT3ApOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmg6Cisg
ICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6cmVj
b21wdXRlRGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6
OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKiB3
YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRU
aWVyVXBDb3VudGVyOjpvcHRpbWl6ZUFmdGVyV2FybVVwKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRUaWVyVXBDb3VudGVyOjpvcHRpbWl6ZVNvb24pOgorICAgICAgICAqIHdhc20vV2FzbVRp
ZXJVcENvdW50LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6OlRpZXJVcENv
dW50KToKKyAgICAgICAgKiB3YXNtL1dhc21UaWVyVXBDb3VudC5oOgorICAgICAgICAoSlNDOjpX
YXNtOjpUaWVyVXBDb3VudDo6b3B0aW1pemVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6Oldh
c206OlRpZXJVcENvdW50OjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VGllclVwQ291bnQ6Om9wdGltaXplU29vbik6CisKIDIwMjEtMDktMjYgIFl1c3VrZSBT
dXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBPcHRpbWl6ZSBQdXRC
eVZhbCB3aXRoIGZvci1pbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC02MTEsNiArNjExLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCiAgICAgYnVp
bHRpbnMvQnVpbHRpblV0aWxzLmgKIAorICAgIGJ5dGVjb2RlL0FyaXRoUHJvZmlsZS5oCiAgICAg
Ynl0ZWNvZGUvQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvQXJyYXlQcm9m
aWxlLmgKICAgICBieXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25zLmgKQEAgLTgzNyw2ICs4Mzgs
NyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAKICAgICBqaXQv
QXNzZW1ibHlIZWxwZXJzLmgKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMuaAorICAg
IGppdC9CYXNlbGluZUpJVENvZGUuaAogICAgIGppdC9DQ2FsbEhlbHBlcnMuaAogICAgIGppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmgKICAgICBqaXQvRXhlY3V0YWJsZU1lbW9yeUhhbmRsZS5oCkBA
IC04NzUsNiArODc3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QQogICAgIHBhcnNlci9QYXJzZXJFcnJvci5oCiAgICAgcGFyc2VyL1BhcnNlck1vZGVzLmgKICAg
ICBwYXJzZXIvUGFyc2VyVG9rZW5zLmgKKyAgICBwYXJzZXIvUmVzdWx0VHlwZS5oCiAgICAgcGFy
c2VyL1NvdXJjZUNvZGUuaAogICAgIHBhcnNlci9Tb3VyY2VQcm92aWRlci5oCiAgICAgcGFyc2Vy
L1NvdXJjZVByb3ZpZGVyQ2FjaGUuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAko
cmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC02MTksNiArNjE5LDcgQEAgaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tl
bi5jcHAKIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKIAogaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAKK2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCiBqaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAog
aml0L0JpbmFyeVN3aXRjaC5jcHAKIGppdC9DQ2FsbEhlbHBlcnMuY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTkwMCw2ICs5MDAsNyBAQAogCQk1MkNEMEY1RDIyNDJGNTY5MDA0QTE4QTUgLyog
Rm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFt
ZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0MkY1NjkwMDRBMThBNSAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNEMEY2NzIyNDJGNzFD
MDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87IH07CisJCTUyREQwMDA4MjZFMDM5QjkwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkVF
RDc5NDI0OTJCODcwMDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRUVENzkzMjQ5MkI4NjgwMDhGNEM5
MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovOyB9OwogCQk1MkY2QzM1RTFFNzFFQjA4MDA4MUY0
Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyB9OwogCQk1MzBBNjZCOTFGQTNFNzhCMDAyNkE1
NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCMTFGQTNFNzdBMDAyNkE1NDUgLyogVW5pZmllZFNvdXJj
ZTMtbW0ubW0gKi87IH07CkBAIC0xMjIwLDcgKzEyMjEsNyBAQAogCQk3OTg3MkM0ODIyMUJCQUYz
MDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODcyQzQ3MjIxQkJBRUQwMDhDNjk2OSAvKiBKU0Jhc2VJbnRl
cm5hbC5oICovOyB9OwogCQk3OTlFRjdDNDFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2lu
TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTlF
RjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4
ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3OUEyMjgzNjFE
MzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQ
cm9maWxlLmggKi87IH07CisJCTc5QTIyODM2MUQzNUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFByb2Zp
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTIy
ODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUFCQjE3RTFFNUNDQjU3MDA0NUI5QTYg
LyogQWlyRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUFCQjE3QzFFNUNDQjU3MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlBQzMw
RkYxRjk5NTM2NDAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBQzMwRkUxRjk5
NTM2MzAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oICovOyB9Owog
CQk3OUFGMEJFNDFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFGMEJFMzFEM0VG
RDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM2NzQsNiArMzY3NSw4IEBACiAJCTUy
Q0QwRjY0MjI0MkY1NjkwMDRBMThBNSAvKiB0ZXN0ZGZnICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBp
bmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0ZGZnOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwogCQk1MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0ZGZnLmNwcDsgcGF0aCA9
IGRmZy90ZXN0ZGZnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJEMTMwOEYy
MjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgcGF0aCA9IGZvby5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJERDAwMDYy
NkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNl
bGluZUpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJERDAwMDcyNkUw
MzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBC
YXNlbGluZUpJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkVFRDc5
MjI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzYsNiArNjI3OSw4IEBACiAJCQkJ
NkI3NjdFN0EyNjc5MUYyNzAwMTdGOEQxIC8qIEFzc2VtYmx5SGVscGVyc1Nwb29sZXJzLmggKi8s
CiAJCQkJNzIzOTk4RjYyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5jcHAgKi8s
CiAJCQkJNzIzOTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJhc2VsaW5lSklUUGxhbi5oICovLAor
CQkJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuY3BwICovLAor
CQkJCTUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLywKIAkJ
CQkwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNwcCAqLywKIAkJCQkw
RjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi8sCiAJCQkJNjVCODM5
MkQxQkFDQTlEMzAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmNwcCAqLywKQEAgLTk3MzAsNiAr
OTczNSw3IEBACiAJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1OTUwIC8qIERGR0Zsb3dNYXAuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVk
QXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdG
bHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJERDAwMDgyNkUwMzlCOTAwNTRFNDA4
IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTUxQUIzRDhC
RTAwQkJCOEU4IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY5Q0M4
OTE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzODZGRDdFMjZFODY3QjgwMEU0QzI4QiAvKiBUZW1wb3JhbFBsYWluVGltZS5oIGluIEhlYWRl
cnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiwxNSArMjAyLDE1IEBAIFJl
ZlB0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9tU3RydWMKICAgICBzd2l0Y2ggKHN0dWJJ
bmZvLmNhY2hlVHlwZSgpKSB7CiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAg
ICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgTG9hZCwg
aWRlbnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBQcm94eWFibGVBY2Nl
c3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBMb2FkLCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlk
U2VsZk9mZnNldCwgc3R1YkluZm8uaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAg
ICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgogICAgICAgICBSRUxFQVNFX0FTU0VS
VChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwotICAgICAgICByZXR1cm4gQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRlbnRpZmllciwgc3R1YkluZm8udS5i
eUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQo
KSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBSZXBsYWNl
LCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8uaW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcik7
Ci0gICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBJbkhpdCwgaWRl
bnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIG93bmVyLCBJbkhpdCwgaWRlbnRpZmllciwgc3R1YkluZm8uYnlJZFNlbGZPZmZzZXQs
IHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUodm0pKTsKIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uaGFz
Q29uc3RhbnRJZGVudGlmaWVyKTsKQEAgLTE5ODUsMTQgKzE5ODUsMTAgQEAgdm9pZCBBY2Nlc3ND
YXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAvLyBTdHVmZiBmb3IgY3VzdG9t
IGdldHRlcnMvc2V0dGVycy4KICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNh
bGw7CiAKKwogICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0aGUgbmVjZXNzYXJ5IGNhbGN1bGF0
aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAgICAgICAvLyBleGNlcHRpb24gaGFu
ZGxpbmcgY2FsbCBzaXRlLgotICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMo
KSkKLSAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdpc3Rl
cnM6OmxyKTsKLSNlbmRpZgotICAgICAgICBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3Rh
dGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxs
KGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0
ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9T
dGFja0ZvckNhbGwoKTsKIAogICAgICAgICBhdXRvIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0
YWNrRm9yQ2FsbCA9IFsmXShBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUmIHNwaWxs
U3RhdGUsIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlKSB7CiAgICAgICAgICAgICBSZWdpc3RlclNl
dCBkb250UmVzdG9yZTsKQEAgLTIwNzksOCArMjA3NSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIEFTU0VSVCghKG51bWJlck9mUmVnc0Zv
ckNhbGwgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSk7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IG51bWJlck9mUmVnc0ZvckNhbGwgKiBzaXplb2YoUmVn
aXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwogCi0gICAgICAgICAgICB1bnNpZ25l
ZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQotICAgICAgICAgICAgV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwp
OworICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0gV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRl
c0ZvckNhbGwpOwogCiAgICAgICAgICAgICBqaXQuc3ViUHRyKAogICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1iZXJPZkJ5dGVzRm9yQ2FsbCksCkBA
IC0yMTM4LDYgKzIxMzMsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NH
ZW5lCiAKICAgICAgICAgICAgIGludCBzdGFja1BvaW50ZXJPZmZzZXQgPSAoY29kZUJsb2NrLT5z
dGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpIC0gc3RhdGUucHJlc2VydmVk
UmV1c2VkUmVnaXN0ZXJTdGF0ZS5udW1iZXJPZkJ5dGVzUHJlc2VydmVkIC0gc3BpbGxTdGF0ZS5u
dW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVzZXJ2YXRpb247CiAgICAgICAgICAg
ICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNl
dCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKwogICAgICAgICAgICAgYm9vbCBjYWxsSGFzUmV0dXJuVmFsdWUgPSBpc0dl
dHRlcigpOwogICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxs
KHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7CiAKQEAgLTIyNjQsMTIgKzIyNjAsNyBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAKICAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJn
ZXRPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogCi0gICAgICAgICAgICBSZWdpc3RlclNldCBleHRy
YVJlZ2lzdGVyc1RvUHJlc2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICAgICAgaWYgKGNv
ZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAgICAgZXh0cmFSZWdpc3RlcnNUb1By
ZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCi0gICAgICAgICAgICBhdXRv
IHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdp
dGhvdXRFeGNlcHRpb25zKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAgICAgICBh
dXRvIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2Fs
bFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+KENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cigmdm0pLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGppdC5wcmVwYXJlQ2Fs
bE9wZXJhdGlvbih2bSk7CkBAIC0yMzY0LDEwICsyMzU1LDYgQEAgdm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKICAgICAgICAgICAgICAgICBleHRyYVJlZ2lzdGVyc1RvUHJl
c2VydmUuc2V0KGJhc2VHUFIpOwogICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZS5zZXQodmFsdWVSZWdzKTsKLSNpZiBDUFUoQVJNNjQpCi0gICAgICAgICAgICAgICAgaWYg
KGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJhUmVnaXN0
ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgogICAgICAgICAg
ICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3Rh
dGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoZXh0cmFSZWdpc3RlcnNUb1By
ZXNlcnZlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgkocmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBAIG9wX2dyb3Vw
IDpQcm9maWxlZEJpbmFyeU9wLAogICAgICAgICBvcGVyYW5kVHlwZXM6IE9wZXJhbmRUeXBlcywK
ICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJp
dGhQcm9maWxlCisgICAgICAgIGFyaXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlLioKICAg
ICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5T3AsCkBAIC0zNTMsNyArMzUzLDcg
QEAgb3BfZ3JvdXAgOlVuYXJ5SW5QbGFjZVByb2ZpbGVkT3AsCiAgICAgICAgIHNyY0RzdDogVmly
dHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKLSAgICAgICAgYXJpdGhQcm9m
aWxlOiBVbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0aFByb2ZpbGU6IFVuYXJ5QXJpdGhQ
cm9maWxlLioKICAgICB9CiAKIG9wIDp0b19vYmplY3QsCkBAIC0zODYsNyArMzg2LDcgQEAgb3Ag
Om5lZ2F0ZSwKICAgICAgICAgcmVzdWx0VHlwZTogUmVzdWx0VHlwZSwKICAgICB9LAogICAgIG1l
dGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUsCisgICAg
ICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUuKgogICAgIH0KIAogb3AgOm5vdCwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9y
Q2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShyZXZpc2lvbiAyODMxMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVPcGVyYW5kc0ZvckNoZWNrcG9p
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjggQEAgVmFsdWVQcm9maWxlKiB2YWx1
ZVByb2ZpbGVGb3JJbXBsKEJ5dGVjbwogICAgICAgICByZXR1cm4gJm1ldGFkYXRhLm1fcHJvZmls
ZTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgordWludHB0cl90IHZhbHVlUHJv
ZmlsZU9mZnNldEZvcih1bnNpZ25lZCBjaGVja3BvaW50SW5kZXgpCit7CisgICAgVU5VU0VEX1BB
UkFNKGNoZWNrcG9pbnRJbmRleCk7CisgICAgaWYgY29uc3RleHByIChCeXRlY29kZTo6b3Bjb2Rl
SUQgPT0gb3BfaXRlcmF0b3Jfb3BlbikgeworICAgICAgICBzd2l0Y2ggKGNoZWNrcG9pbnRJbmRl
eCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpzeW1ib2xDYWxsOiByZXR1cm4gQnl0
ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdG9yUHJvZmlsZSgpOworICAgICAgICBjYXNl
IE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZk5leHRQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKEJ5dGVjb2Rl
OjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7CisgICAgICAgIHN3aXRjaCAoY2hlY2tw
b2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmNvbXB1dGVOZXh0OiBy
ZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRSZXN1bHRQcm9maWxlKCk7Cisg
ICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldERvbmU6IHJldHVybiBCeXRlY29kZTo6TWV0
YWRhdGE6Om9mZnNldE9mRG9uZVByb2ZpbGUoKTsKKyAgICAgICAgY2FzZSBPcEl0ZXJhdG9yTmV4
dDo6Z2V0VmFsdWU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mVmFsdWVQcm9m
aWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6
Om9mZnNldE9mUHJvZmlsZSgpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZU1ldGFk
YXRhPgogYm9vbCBoYXNWYWx1ZVByb2ZpbGVGb3IoQnl0ZWNvZGVNZXRhZGF0YSYgbWV0YWRhdGEs
IHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAyODMxMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDExICsxMTQsNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2
bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7CiB9CiAKLUNvZGVMb2NhdGlvbkxh
YmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6ZmFzdFBhdGhTdGFydCgpCi17Ci0g
ICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPihtX2Zh
c3RQYXRoU3RhcnQpOwotfQotCiBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBD
YWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc0Rh
dGFJQygpKTsKQEAgLTIyNSw2ICsyMjAsMTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnNldE1heEFy
Z3VtZW50Q291bnRJbgogICAgIG1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSB2YWx1
ZTsKIH0KIAorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gQ2FsbExpbmtJbmZv
OjpmYXN0UGF0aFN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc0RpcmVjdCgpICYmIGlz
VGFpbENhbGwoKSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVy
bmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQpOworfQorCiB2b2lkIENhbGxMaW5r
SW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRvIGhhbmRsZVNwZWNpZmljQ2FsbGVl
ID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKQEAgLTI5OCwyMyArMjk5LDExIEBAIHZvaWQg
Q2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGMKICAgICBtX2ZyYW1lU2h1ZmZsZURh
dGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlu
a0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVH
UFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5r
SW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBpc1RhaWxDYWxsLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewotICAgIHNldFVzZXNEYXRhSUNzKHVz
ZURhdGFJQyk7Ci0gICAgaWYgKGlzRGF0YUlDKCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgY2FsbExpbmtJbmZvR1BSKTsK
LSAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIgPSBjYWxsTGlua0luZm9HUFI7Ci0g
ICAgfQotCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBtX2Zhc3RQ
YXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oZmFzdFBh
dGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRo
OwogCi0gICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICBpZiAodXNlRGF0YUlDID09IFVzZURhdGFJ
Qzo6WWVzKSB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gaml0LnNjcmF0Y2hSZWdpc3Rl
cigpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJ
bmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7IAogICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKQEAgLTMyMyw3ICszMTIsNyBAQCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAgICAgICAgICBnb1BvbHltb3JwaGlj
ID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5bW9ycGhpY0NhbGxlZU1hc2spKTsKICAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc1Rh
aWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBh
cmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgZ29Qb2x5bW9ycGhpYy5saW5rKCZqaXQpOyAv
LyBQb2x5bW9ycGhpYyBzdHViIGhhbmRsZXMgdGFpbCBjYWxsIHN0YWNrIHByZXAuCiAgICAgICAg
ICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBv
ZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkpLCBKU0VudHJ5UHRyVGFnKTsKQEAg
LTMzNiwxNCArMzI1LDE2IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86
OmUKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHJXaXRoUGF0Y2goQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVDaGVjaywgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKG51bGxwdHIpKSk7CiAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNh
bGw7Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwp
IHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgY2FsbCA9
IGppdC5uZWFyVGFpbENhbGwoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBjYWxsID0g
aml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsK
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKLSAgICAgICAgICAgIHUuY29kZUlD
Lm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRh
Zz4oY2FsbGVlQ2hlY2spOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2Nh
bGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPEpTSW50ZXJuYWxQdHJU
YWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT51LmNvZGVJQy5tX2NhbGxlZUxv
Y2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGxlZUNo
ZWNrKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNTMsMTMgKzM0NCwzNCBAQCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMgdXNlRGF0YUlDKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgbnVsbHB0
cik7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsKKworICAgIGlmIChpc0RhdGFJQygp
KSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBHUFJSZWc6Oklu
dmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJ
bmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKworICAgIHJldHVybiBlbWl0RmFzdFBh
dGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywg
aXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENh
bGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJl
ZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQyB1c2VEYXRhSUMs
IFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVG
b3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1RhaWxDYWxsKCkpOwotICAgIHJl
dHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIHVz
ZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKKyAgICBzZXRVc2VzRGF0YUlD
cyhVc2VEYXRhSUM6Ok5vKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbCh0aGlzLCBqaXQs
IGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgVXNlRGF0YUlDOjpObywgaXNUYWlsQ2FsbCgpLCBX
VEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIHJldHVybiBlbWl0
RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9HUFIsIFVz
ZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVy
cyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICByZXR1cm4gZW1pdEZhc3RQ
YXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRh
SUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwpKTsKIH0KIAogdm9pZCBD
YWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIENDYWxsSGVscGVycyYgaml0KQpAQCAt
MzY5LDE3ICszODEsMzIgQEAgdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0s
IAogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgb2Zm
c2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNFbnRyeVB0clRhZyk7CiB9CiAKK3Zv
aWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmIGpp
dCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBqaXQubW92ZShjYWxsTGlua0luZm9H
UFIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxsRGVzdGluYXRpb24oKSksIEpTRW50
cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyhWTSYg
dm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENhbGxMaW5rSW5mbywgR1BSUmVnIGNh
bGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBtX2NvZGVPcmlnaW4gPSBD
b2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVjb2RlSW5kZXgpOworICAgIHNldFVw
Q2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwgY2FsbGVlR1BSKTsKKyAgICBtX2Rv
bmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBpZiAo
dW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0YSkgeworICAgICAgICAvLyBGSVhN
RTogSXQnZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhIHJlZmNvdW50ZWQgZGF0YSBzdHJ1Y3R1cmUu
CisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VVbmlxdWU8Q2FsbEZyYW1lU2h1ZmZs
ZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKTsKKyAgICB9Cisg
ICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOworICAgIHUuZGF0YUlDLm1fY2FsbExp
bmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNldFNsb3dQYXRoQ2FsbERlc3RpbmF0
aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikudGVtcGxhdGUgcmV0YWdn
ZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERp
cmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFp
c1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpObyk7CiAKLSAg
ICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsK
LSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgdS5jb2RlSUMu
bV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFs
UHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6ZW1p
dERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwo
KTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFs
UHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5jb2RlSUMubV9mYXN0UGF0aFN0YXJ0
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGZhc3RQYXRoU3RhcnQp
OwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3QgeWV0IGxpbmtlZCwgdGhpcyBpcyBh
IGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4MzEwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0gT3Bjb2RlSUQgOiB1bnNpZ25lZDsK
IHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3RydWN0IFVubGlua2VkQ2FsbExpbmtJ
bmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMgUGFja2VkUmF3U2VudGluZWxOb2Rl
PENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0gQ2FsbFR5cGUgeworICAgIGVudW0g
Q2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ2FsbCwKICAgICAg
ICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAgcHVibGljOgogICAgICAgICBtX2Nh
bGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2b2lkIGluaXRpYWxpemVEYXRhSUMo
Vk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQUigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBVc2VEYXRhSUMgOiB1aW50OF90IHsK
QEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJbXBsKENDYWxsSGVscGVycyYsIEdQ
UlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQywgV1RGOjpG
dW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoSW1wbChDYWxs
TGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExp
bmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2FsbCwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogcHVibGljOgorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdERhdGFJQ0Zhc3RQYXRoKENDYWxs
SGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQ
UlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxs
TGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxw
ZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JU
YWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZvaWQgZW1pdERpcmVjdEZhc3RQYXRo
KENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVjdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCk7CiAg
ICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICBzdGF0aWMgdm9p
ZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbExpbmtJ
bmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIoKTsKIAogICAgIGJvb2wgaXNEYXRh
SUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VEYXRhSUM+KG1fdXNlRGF0YUlDKSA9
PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2IEBAIHB1YmxpYzoKICAgICAgICAg
bV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJ
bnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpT
SW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbDxK
U0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApAQCAtMjQzLDExICsyNDksNiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRyOwogICAgIH0KIAotICAgIEpJVFN0
dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zbG93U3R1Yi5n
ZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkKICAgICB7CiAgICAgICAgIHJldHVy
biBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkgKzMwOSw5IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPihtX2NhbGxUeXBlKTsKICAgICB9CiAK
LSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ2FsbExpbmtJbmZvLCBtX21heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAKICAgICB1aW50MzJfdCBtYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyArMzgyLDkgQEAgcHVibGljOgogICAg
IH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBt
X2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRy
VGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAgICB1bmlvbiBVbmlvblR5cGUgewpA
QCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25OZWFy
Q2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlvbjsKICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxlZUxvY2F0aW9uOwog
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9zbG93UGF0
aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4g
bV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsKICAgICB9IHU7CiAKQEAgLTQyNCw2
ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2FsbExpbmtJbmZvQ29kZU9yaQogICAg
IHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwogfQogCitzdHJ1Y3QgVW5saW5rZWRD
YWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsgLy8gQ3VycmVu
dGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMgY2FuIHRyaXZpYWxseSBwcm9kdWNl
IGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOworICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IGZyYW1lU2h1ZmZsZURhdGE7Cit9
OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24g
MjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3OSw4ICsyNzksNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhW
TSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkK
ICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9oYXNCZWVuQ29t
cGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNlKQotICAg
ICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUoZmFsc2UpCiAgICAgLCBtX251bUNhbGxl
ZUxvY2FscyhvdGhlci5tX251bUNhbGxlZUxvY2FscykKICAgICAsIG1fbnVtVmFycyhvdGhlci5t
X251bVZhcnMpCiAgICAgLCBtX251bWJlck9mQXJndW1lbnRzVG9Ta2lwKG90aGVyLm1fbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXApCkBAIC0zMDgsNiArMzA2LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxv
Y2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJUKHNvdXJjZSgpLnByb3ZpZGVyKCkp
OwogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKKworICAgIG1f
bGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29kZS0+bGxpbnRFeGVjdXRlQ291bnRl
cigpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuYWRkKHRoaXMpOwogfQpAQCAt
MzE4LDcgKzMxOCw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEMK
ICAgICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVw
KCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKIAogICAgIGlmIChvdGhlci5tX3JhcmVEYXRhKSB7
CiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTMzNiw4ICszMzUsNiBA
QCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2RpZEZh
aWxKSVRDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZh
bHNlKQogICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9oYXNM
aW5rZWRPU1JFeGl0KGZhbHNlKQotICAgICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUo
ZmFsc2UpIAogICAgICwgbV9udW1DYWxsZWVMb2NhbHModW5saW5rZWRDb2RlQmxvY2stPm51bUNh
bGxlZUxvY2FscygpKQogICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1WYXJz
KCkpCiAgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQpAQCAtMzU5LDcgKzM1Niw5
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIAogICAgIEFTU0VS
VChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2VkQ29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisgICAgbV9sbGludEV4ZWN1dGVDb3Vu
dGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVDb3VudGVyKCk7CisKICAgICB2bS5o
ZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApAQCAtMzcwLDcgKzM2OSw4IEBAIENv
ZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiAKIC8vIHdlIGNhbid0IGdlbmVy
YXRlIGR1cmluZyB1bmxpbmtlZCBieXRlY29kZSBnZW5lcmF0aW9uLiBUaGlzIHByb2Nlc3MgaXMg
bm90IGFsbG93ZWQgdG8gZ2VuZXJhdGUgY29udHJvbAogLy8gZmxvdyBvciBpbnRyb2R1Y2UgbmV3
IGxvY2Fscy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB3ZSByZWx5IG9uIGxpdmVuZXNzIGFuYWx5
c2lzIHRvIGJlIHRoZSBzYW1lIGZvcgogLy8gYWxsIHRoZSBDb2RlQmxvY2tzIG9mIGFuIFVubGlu
a2VkQ29kZUJsb2NrLiBXZSByZWx5IG9uIHRoaXMgZmFjdCBieSBjYWNoaW5nIHRoZSBsaXZlbmVz
cyBhbmFseXNpcwotLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLgorLy8gaW5zaWRlIFVubGlu
a2VkQ29kZUJsb2NrLiBBbHNvLCBCYXNlbGluZSBKSVQgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiBh
bGwgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jaywKKy8vIHNvIHRoZSBieXRlY29k
ZSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBiZXR3ZWVuIENvZGVCbG9ja3Mgc2hhcmluZyBhbiBVbmxp
bmtlZENvZGVCbG9jay4KIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlu
a2VkQ29kZUJsb2NrLAogICAgIEpTU2NvcGUqIHNjb3BlKQogewpAQCAtNDcxLDYgKzQ3MSwyMSBA
QCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIGJyZWFr
OyBcCiAgICAgfQogCisgICAgdW5zaWduZWQgYmluYXJ5UHJvZmlsZUluZGV4ID0gMDsKKyAgICB1
bnNpZ25lZCB1bmFyeVByb2ZpbGVJbmRleCA9IDA7CisjZGVmaW5lIExJTktfV0lUSF9CSU5BUllf
QVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29wKTogeyBcCisgICAgICAgIElOSVRJ
QUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSA9
ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxlKGJpbmFyeVByb2ZpbGVJbmRleCsr
KTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZpbmUgTElOS19XSVRIX1VOQVJZX0FS
SVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6IHsgXAorICAgICAgICBJTklUSUFM
SVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRhdGEubV9hcml0aFByb2ZpbGUgPSAm
bV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKHVuYXJ5UHJvZmlsZUluZGV4KyspOyBc
CisgICAgICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
IGluc3RydWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7CiAgICAgZm9yIChjb25zdCBhdXRv
JiBpbnN0cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7CiAgICAgICAgIE9wY29kZUlEIG9w
Y29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBAIC01MzMsMTQgKzU0OCwxNCBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgIExJTksoT3BD
cmVhdGVQcm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRlR2VuZXJhdG9yKQogCi0gICAgICAg
IExJTksoT3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0gICAgICAgIExJTksoT3BEaXYpCi0g
ICAgICAgIExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhPcE5lZ2F0ZSkKLSAgICAgICAgTElO
SyhPcEluYykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9B
UklUSF9QUk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJ
TEUoT3BNdWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShPcERpdikK
KyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wU3ViKQorCisgICAgICAg
IExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVnYXRlKQorICAgICAgICBMSU5LX1dJ
VEhfVU5BUllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAgICAgTElOS19XSVRIX1VOQVJZX0FS
SVRIX1BST0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhPcEpuZXFQdHIpCiAKQEAgLTc2OSw3
ICs3ODQsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAg
Ly8gcmVseSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFuZCBhcmUgaW4gdGhlb3J5IHBlcm1p
dHRlZCB0byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5zdHJ1Y3Rpb24gc3RyZWFtIHRvIG1v
cmUgYWNjdXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXItdXApLgogICAgIG9wdGltaXplQWZ0
ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwogCiAgICAgLy8gSWYgdGhlIGNvbmN1
cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9jaydzIGhhc2gsIHRoZW4gY29tcHV0
ZSBpdCBoZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAgLTc5Myw2ICs4MDcsNzggQEAgdm9p
ZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZNJgogICAgIG1fb3duZXJFZGdlLnNl
dCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6Y3JlYXRlKHZtLCB0aGlzKSk7
CiB9CiAKKyNpZiBFTkFCTEUoSklUKQordm9pZCBDb2RlQmxvY2s6OnNldHVwV2l0aFVubGlua2Vk
QmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGppdENvZGUpCit7CisgICAgc2V0SklU
Q29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8mIGpp
dENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKKyAgICAgICAgICAgIEhh
bmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxlcihpKTsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+LgorICAgICAgICAgICAgaGFuZGxlci5u
YXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2RlSW5kZXgoaGFuZGxlci50YXJnZXQp
KS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigpOworICAgICAgICB9CisgICAgfQor
CisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAg
ICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxvY2tlcik7CisKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9vbC5pc0VtcHR5KCkpOworICAgICAg
ICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRWZWN0b3I8dm9pZCo+KGppdENvZGUt
Pm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8g
ZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChpKTsKKyAgICAgICAgICAgIHN3aXRj
aCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBKSVRDb25zdGFudFBvb2w6OlR5cGU6
Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29s
W2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6Q2FsbExpbmtJbmZvOiB7CisgICAg
ICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVubGlua2VkQ2FsbExpbmtJbmZvID0g
KnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4oZW50cnkucGF5bG9hZC5nZXQoKSk7
CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXREYXRhLm1f
Y2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtlZENhbGxMaW5rSW5mby5ieXRlY29k
ZUluZGV4KSk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5pbml0aWFsaXplRGF0YUlD
KHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVn
VDIpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBjYWxs
TGlua0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm86IHsKKyAg
ICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvJiB1bmxpbmtlZFN0dWJJbmZv
ID0gKnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihlbnRyeS5wYXlsb2Fk
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBq
aXREYXRhLm1fc3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGUsIENvZGVP
cmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAg
c3R1YkluZm8tPmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyh0aGlzLCB1
bmxpbmtlZFN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQ
b29sW2ldID0gc3R1YkluZm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsOiB7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBqaXREYXRhLm1faml0Q29u
c3RhbnRQb29sW2ldID0gZnVuY3Rpb25EZWNsKGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpGdW5jdGlvbkV4cHI6IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0KCkpOworICAgICAgICAgICAgICAg
IGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5jdGlvbkV4cHIoaW5kZXgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgY2FzZSBHbG9iYWxD
b2RlOgorICAgIGNhc2UgTW9kdWxlQ29kZToKKyAgICBjYXNlIEV2YWxDb2RlOgorICAgICAgICBt
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZ1bmN0aW9uQ29kZToKKyAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0
byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgorICAgICAg
ICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgorICAgICAgICBtX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKCkpICYmIERGRzo6bWln
aHRJbmxpbmVGdW5jdGlvbih0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYg
KGppdENvZGUtPm1faXNTaGFyZWFibGUgJiYgIXVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5r
ZWRCYXNlbGluZUNvZGUgJiYgT3B0aW9uczo6dXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZygpKQor
ICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlua2VkQmFzZWxpbmVDb2RlID0gV1RG
TW92ZShqaXRDb2RlKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCiBDb2RlQmxvY2s6On5D
b2RlQmxvY2soKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpAQCAtODczLDYgKzk1OSwyNyBAQCBD
b2RlQmxvY2s6On5Db2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKK2Jvb2wg
Q29kZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZpcnR1YWxSZWdp
c3RlciByZWcpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBuZWVkcyB0byBjb3JyZXNwb25kIHRvIHdo
YXQgd2UgZG8gaW5zaWRlIHNldENvbnN0YW50UmVnaXN0ZXJzLgorICAgIHN3aXRjaCAodW5saW5r
ZWRDb2RlQmxvY2soKS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ocmVnKSkgewor
ICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJbnRlZ2VyOgorICAgIGNhc2UgU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcjogeworICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gdW5saW5rZWRDb2RlQmxvY2soKS0+Z2V0Q29uc3RhbnQocmVnKTsKKyAgICAgICAg
aWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIGlmIChjZWxs
LT5pbmhlcml0czxTeW1ib2xUYWJsZT4odm0oKSkgfHwgY2VsbC0+aW5oZXJpdHM8SlNUZW1wbGF0
ZU9iamVjdERlc2NyaXB0b3I+KHZtKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246OkxpbmtUaW1lQ29uc3RhbnQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
IFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBG
aXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IEZpeGVk
VmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbikKIHsKICAgICBWTSYgdm0gPSAqbV92bTsKQEAgLTg5Miw2ICs5OTksNyBAQCBW
ZWN0b3I8dW5zaWduZWQ+IENvZGVCbG9jazo6c2V0Q29uc3RhbnRSCiAgICAgICAgIHN3aXRjaCAo
cmVwcmVzZW50YXRpb24pIHsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
OkxpbmtUaW1lQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb25zdGFudCA9IGdsb2JhbE9iamVjdC0+
bGlua1RpbWVDb25zdGFudChzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50Pihjb25zdGFudC5h
c0ludDMyQXNBbnlJbnQoKSkpOworICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50LmlzQ2VsbCgp
KTsgLy8gVW5saW5rZWQgQmFzZWxpbmUgSklUIHJlcXVpcmVzIHRoaXMuCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyOgogICAg
ICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6SW50ZWdlcjoKQEAgLTE1MTQsNyAr
MTYyMiw3IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJsb2NrOjplbnN1cmVKSVQKICAgICBy
ZXR1cm4gKm1faml0RGF0YTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVK
SVRJbmxpbmVDYWNoZXMoKQordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplSklUSW5saW5lQ2FjaGVz
KCkKIHsKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewogICAgICAg
ICBmb3IgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDogaml0RGF0YS0+bV9jYWxsTGlua0lu
Zm9zKQpAQCAtMTUyNSw2ICsxNjMzLDIwIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJhc2Vs
aW5lSklUSW5saW4KICAgICAgICAgICAgIHN0dWJJbmZvLT52aXNpdFdlYWtSZWZlcmVuY2VzKGxv
Y2tlciwgdGhpcyk7CiAgICAgICAgIH0KICAgICB9CisKKworI2lmIEFTU0VSVF9FTkFCTEVECisg
ICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICAvLyBW
ZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBmaW5hbGl6ZSB0aGVzZSBzaW5jZSB0aGV5J3JlIHZpcnR1
YWwgY2FsbHMuCisgICAgICAgIGZvciAoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gOiBzdGF0
aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUuZ2V0KCkpLT5tX2V2YWxDYWxsTGlu
a0luZm9zKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7
CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmZvckVhY2hEZXBlbmRlbnRDZWxsKFtdIChKU0Nl
bGwqKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgfQorI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTUzNCw0
NiArMTY1NiwxMiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAK
ICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBib29s
IGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdy
YWRlOwotICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdyYWRlID0gZmFsc2U7Ci0gICAgLy8g
SWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhlY3V0aW5nLCBhbmQgYW4gb3B0aW1pemVkIHJl
cGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAotICAgIC8vIHRvIGRpc2NhcmQgYmFzZWxpbmUg
SklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRvIHNhdmUgSklUIG1lbW9yeS4KLSAg
ICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNMaW5rZWRPU1JFeGl0ICYmIGppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92bS0+aGVhcC5jb2RlQmxvY2tTZXQo
KS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkgewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBv
cHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0Q291bnRlcikgewotICAgICAgICAg
ICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTExJbnQ6OnNl
dEVudHJ5cG9pbnQodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5rKTsKLQotICAgICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZkV4Y2Vw
dGlvbkhhbmRsZXJzKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5s
aW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0gbV91bmxpbmtlZENvZGUtPmV4Y2Vw
dGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyYgaGFu
ZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvbnMoKS5hdCh1bmxpbmtl
ZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIu
aW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhh
bmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0cnVjdGlvbi53aWR0aCgpKS5jb2Rl
KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHVubGlu
a0luY29taW5nQ2FsbHMoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8g
Y2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSBh
bGwgY29tcGlsZXIgdGhyZWFkcwotICAgICAgICAgICAgICAgICAgICAvLyBhcmUgc2FmZXBvaW50
ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNv
ZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VyIGlz
IHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50aW5nIGludG8gdGhlIHZhcmlvdXMgKmluZm9z
LgotICAgICAgICAgICAgICAgICAgICByZXNldEpJVERhdGEoKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUg
PSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYKLSAgICAK
ICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGppdFR5cGUoKSkpCiAgICAgICAg
IGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYg
KCEhaml0Q29kZSgpKQotICAgICAgICBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2FjaGVzKCk7
CisgICAgICAgIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShERkdfSklUKQpAQCAtMTU5NCw3ICsxNjgyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KAogICAgICAgICBjYXNlIEpJVFR5cGU6Okhvc3RDYWxsVGh1bms6CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVu
azoKLSAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7Cisg
ICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291bnRlci0+Y291bnQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6OkJhc2VsaW5lSklUOgogICAgICAg
ICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNvdW50KCk7CkBAIC0xNjc1LDMwICsx
NzYzLDYgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgogICAgIHJl
dHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUsIGNv
ZGVPcmlnaW4pOwogfQogCi1KSVRBZGRJQyogQ29kZUJsb2NrOjphZGRKSVRBZGRJQyhCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERhdGEobG9ja2VyKS5tX2FkZElDcy5h
ZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklUTXVsSUMo
QmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17Ci0gICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9t
dWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJ
VFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0YShsb2Nr
ZXIpLm1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCi1KSVROZWdJQyogQ29kZUJsb2Nr
OjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotewotICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZW5zdXJlSklURGF0
YShsb2NrZXIpLm1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQotCiBTdHJ1Y3R1cmVTdHVi
SW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewog
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKQEAgLTMxMzMsNyArMzE5Nyw3
IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIAogI2lmIEVOQUJM
RShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJVDoKLSAgICAgICAgcmV0dXJuIEpJ
VDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAgICAgICByZXR1cm4gSklUOjpmcmFt
ZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2RlQmxvY2soKSk7CiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMzM0OSwxMyArMzQxMywxMyBA
QCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6YmluYXJ5QXJpCiB7CiAgICAgc3dpdGNo
IChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRkOgotICAgICAgICByZXR1cm4gJnBj
LT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0
dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBj
YXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhp
cykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8T3BNdWw+KCkubWV0YWRh
dGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9zdWI6Ci0gICAgICAgIHJldHVy
biAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAg
ICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwog
ICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcERpdj4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKICAgICB9CkBAIC0zMzY3LDExICszNDMxLDExIEBAIFVuYXJ5QXJpdGhQcm9maWxlKiBDb2Rl
QmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7CiAgICAg
Y2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFk
YXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wTmVnYXRl
PigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfaW5jOgotICAg
ICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmls
ZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEZWM+
KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBwYy0+YXM8
T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzQ3MiwyMiArMzUzNiwxNiBAQCB2b2lkIENvZGVCbG9j
azo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiB9CiAKICNpZiBFTkFCTEUoSklUKQotdm9pZCBD
b2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9y
aWdpbk1hcD4mJiBtYXApIAoteyAKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7Ci0gICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZN
b3ZlKG1hcCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4gQ29kZUJsb2NrOjpmaW5k
UEModm9pZCogcGMpCiB7CisgICAgaWYgKGF1dG8qIHBjVG9Db2RlT3JpZ2luTWFwID0gbV9qaXRD
b2RlLT5wY1RvQ29kZU9yaWdpbk1hcCgpKSB7CisgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENv
ZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBwY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBjKSkKKyAg
ICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAgIH0KKwogICAgIHsKICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBpZiAoYXV0byogaml0RGF0
YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICAgICAgaWYgKGppdERhdGEtPm1fcGNUb0Nv
ZGVPcmlnaW5NYXApIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxDb2RlT3Jp
Z2luPiBjb2RlT3JpZ2luID0gaml0RGF0YS0+bV9wY1RvQ29kZU9yaWdpbk1hcC0+ZmluZFBDKHBj
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47Ci0gICAgICAgICAgICB9
Ci0KICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDogaml0RGF0
YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8tPmNvbnRhaW5z
UEMocGMpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxDb2RlT3Jp
Z2luPihzdHViSW5mby0+Y29kZU9yaWdpbik7CkBAIC0zNTIxLDI4ICszNTc5LDE0IEBAIHN0ZDo6
b3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoKICAgICByZXR1cm4gYnl0ZWNvZGVJ
bmRleDsKIH0KIAotaW50MzJfdCBDb2RlQmxvY2s6OnRocmVzaG9sZEZvckpJVChpbnQzMl90IHRo
cmVzaG9sZCkKLXsKLSAgICBzd2l0Y2ggKHVubGlua2VkQ29kZUJsb2NrKCktPmRpZE9wdGltaXpl
KCkpIHsKLSAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgotICAgICAgICByZXR1cm4g
dGhyZXNob2xkOwotICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAgICByZXR1cm4gdGhy
ZXNob2xkICogNDsKLSAgICBjYXNlIFRyaVN0YXRlOjpUcnVlOgotICAgICAgICByZXR1cm4gdGhy
ZXNob2xkIC8gMjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IHRocmVzaG9sZDsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OmppdEFmdGVyV2FybVVwKCkKK3ZvaWQg
Q29kZUJsb2NrOjpqaXRTb29uKCkKIHsKLSAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3
VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldh
cm1VcCgpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5zZXROZXdUaHJlc2hv
bGQodW5saW5rZWRDb2RlQmxvY2soKS0+dGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9s
ZEZvckpJVFNvb24oKSksIHRoaXMpOwogfQogCi12b2lkIENvZGVCbG9jazo6aml0U29vbigpCit2
b2lkIENvZGVCbG9jazo6aml0TmV4dEludm9jYXRpb24oKQogewotICAgIG1fbGxpbnRFeGVjdXRl
Q291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9ySklUKE9wdGlvbnM6OnRocmVzaG9s
ZEZvckpJVFNvb24oKSksIHRoaXMpOworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci0+c2V0TmV3
VGhyZXNob2xkKDAsIHRoaXMpOwogfQogCiBib29sIENvZGVCbG9jazo6aGFzSW5zdGFsbGVkVk1U
cmFwQnJlYWtwb2ludHMoKSBjb25zdApAQCAtMzU4OCwyOCArMzYzMiw4IEBAIHZvaWQgQ29kZUJs
b2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRvdWJsZSBudW1TdWJzID0gMC4wOwogICAgIGRv
dWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKLSAgICBhdXRvIGNvdW50SUNzID0gWyZdIChDb2Rl
QmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICBpZiAoYXV0byogaml0RGF0YSA9IGNvZGVCbG9j
ay0+bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBmb3IgKEpJVEFkZElDKiBhZGRJQyA6
IGppdERhdGEtPm1fYWRkSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtQWRkcysrOwotICAgICAg
ICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZm9yIChKSVRNdWxJQyogbXVsSUMgOiBqaXREYXRhLT5tX211bElD
cykgewotICAgICAgICAgICAgICAgIG51bU11bHMrKzsKLSAgICAgICAgICAgICAgICB0b3RhbE11
bFNpemUgKz0gbXVsSUMtPmNvZGVTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZvciAoSklUTmVnSUMqIG5lZ0lDIDogaml0RGF0YS0+bV9uZWdJQ3MpIHsKLSAgICAgICAgICAg
ICAgICBudW1OZWdzKys7Ci0gICAgICAgICAgICAgICAgdG90YWxOZWdTaXplICs9IG5lZ0lDLT5j
b2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEpJVFN1YklDKiBz
dWJJQyA6IGppdERhdGEtPm1fc3ViSUNzKSB7Ci0gICAgICAgICAgICAgICAgbnVtU3VicysrOwot
ICAgICAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJQy0+Y29kZVNpemUoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8gY291bnRJQ3MgPSBbJl0gKENvZGVCbG9jayop
IHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmUtaW1wbGVtZW50IHRoaXMgdXNpbmcg
SklUQ29kZS4KICAgICB9OwogICAgIGhlYXAoKS0+Zm9yRWFjaENvZGVCbG9jayhjb3VudElDcyk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDI4MzEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBAQCBjbGFzcyBKU01vZHVsZUVudmly
b25tZW50OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTExJbnRQcm90b3R5
cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OwogY2xhc3MgTWV0YWRhdGFUYWJsZTsK
LWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7CiBj
bGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIAogREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29kZUJsb2NrUmFyZURhdGEpOwogCkBA
IC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAKICAgICB1bnNpZ25lZCBu
dW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9Citwcml2YXRl
OgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25lZCBuZXdWYWx1ZSk7CitwdWJsaWM6
CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAtMTY3LDcgKzE2OSw2IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CiAg
ICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXND
aGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAotICAgIHVuc2lnbmVkKiBh
ZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCiAgICAgQ29kZUJsb2Nr
KiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1f
YWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIzMyw2IEBAIHB1YmxpYzoKICAgICBi
b29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBpbnN0
YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGluZSBib29sIGlzS25vd25DZWxsKFZp
cnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYWRk
aW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSByZXR1cm4gdHJ1ZSBpZiBgcmVnYCBp
cyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1Ci0gICAgICAgIGlmIChyZWcuaXND
b25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7
Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgYm9v
bCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpCiAgICAgewogICAgICAg
ICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0PGludD4obV9udW1WYXJzKTsKQEAg
LTI2OCwyMyArMjU5LDIxIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUKQogICAgIHN0cnVjdCBK
SVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgICAgIEJhZzxTdHJ1
Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAgICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJ
Q3M7Ci0gICAgICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7Ci0gICAgICAgIEJhZzxKSVROZWdJ
Qz4gbV9uZWdJQ3M7Ci0gICAgICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7CiAgICAgICAgIEJh
ZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICAgICAgU2VudGluZWxMaW5rZWRM
aXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4+IG1f
aW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3JwaGljQ2Fs
bE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNv
bWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAgICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJs
ZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFi
bGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBD
VG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOwogICAgICAgICBib29sIG1faGFz
Q2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRM
aXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAgSklUQ29kZU1hcCBtX2ppdENvZGVN
YXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1faml0Q29uc3RhbnRQb29sOworICAg
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3RhbnRQb29sKTsgfQogICAgIH07CiAK
KyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENv
ZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEoY29uc3QgQ29uY3VycmVudEpTTG9j
a2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKG1faml0RGF0YSkpCkBAIC0y
OTMsMjIgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgSklURGF0YSYgZW5zdXJlSklURGF0
YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAKLSAgICBKSVRBZGRJQyogYWRkSklU
QWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEJp
bmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhVbmFyeUFyaXRo
UHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhCaW5hcnlBcml0aFByb2ZpbGUq
KTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9y
Pjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQmluYXJ5QXJpdGhQcm9m
aWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQotCi0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5
cGU+Ci0gICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUp
IHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNf
c2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRO
ZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRK
SVROZWdJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9y
LCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUU3ViSUMqIGFkZE1hdGhJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2Zp
bGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVERhdGEoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdERhdGEpOyB9CiAKICAgICBTdHJ1Y3R1cmVT
dHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSwgQ29kZU9yaWdpbik7CiAKQEAgLTMyMiwx
OCArMjk2LDggQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcgZm9yIGEgQ2FsbExpbmtJbmZvTWFw
IHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhpcy4KICAgICBDYWxsTGlua0luZm8q
IGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCk7CiAgICAgCi0g
ICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBqaXRDb2RlTWFwKQotICAgIHsKLSAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICBlbnN1cmVK
SVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92ZShqaXRDb2RlTWFwKTsKLSAgICB9
Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgpCi0gICAgewotICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVKSVRE
YXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0KKyAgICBjb25zdCBKSVRDb2RlTWFwJiBq
aXRDb2RlTWFwKCk7CiAKLSAgICB2b2lkIHNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6dW5pcXVl
X3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAgc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2lu
PiBmaW5kUEModm9pZCogcGMpOwogCiAgICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJl
Z2lzdGVyU2V0KTsKQEAgLTQ3Miw2ICs0MzYsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgbmFt
ZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9CiAgICAgdW5zaWduZWQgbnVtYmVy
T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fYXJndW1l
bnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9udW1QYXJh
bWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNlSklUKCkpOwpAQCAtNTY5LDggKzUzNCwxMCBAQCBwdWJs
aWM6CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVn
aXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQogICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3Qg
eyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgp
OyB9CisgICAgYm9vbCBpc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKFZpcnR1YWxS
ZWdpc3RlcikgY29uc3Q7CiAgICAgQUxXQVlTX0lOTElORSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oVmlydHVhbFJlZ2lzdGVyIHJlZykg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKHJlZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
biBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KGluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JC
dWZmZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2NvbnN0YW50UmVn
aXN0ZXJzKSArIGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3RlcnMpOjpkYXRhTWVtb3J5T2Zmc2V0
KCk7IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25EZWNsKGludCBpbmRleCkg
eyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQogICAgIGludCBudW1iZXJP
ZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyB9CkBAIC01
OTUsMjIgKzU2MiwyMiBAQCBwdWJsaWM6CiAgICAgLy8gSnVtcCBUYWJsZXMKIAogI2lmIEVOQUJM
RShKSVQpCi0gICAgU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5k
ZXgpCisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFi
bGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBU
YWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgdm9pZCogYmFzZWxpbmVKSVRDb25zdGFudFBvb2wo
KQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9qaXREYXRhKTsKLSAgICAgICAgcmV0
dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9qaXRDb25zdGFudFBvb2wuZGF0YSgp
OwogICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRh
YmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3dp
dGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIAotI2lmIEVOQUJM
RShKSVQpCi0gICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRh
YmxlSW5kZXgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEpOwotICAg
ICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRl
eF07Ci0gICAgfQorI2lmIEVOQUJMRShERkdfSklUKQorICAgIFN0cmluZ0p1bXBUYWJsZSYgZGZn
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFi
bGUmIGRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CiAjZW5kaWYKKwogICAgIHNp
emVfdCBudW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0
dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
cygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7IH0KIApAQCAtNjMyLDIx
ICs1OTksMjAgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVja0lmSklUVGhyZXNob2xkUmVhY2hl
ZCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLmNoZWNrSWZU
aHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOworICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1
dGVDb3VudGVyLT5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldCh0aGlzKTsKICAgICB9CiAK
ICAgICB2b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCiAgICAgewotICAgICAgICBtX2xsaW50RXhl
Y3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICAgICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyLT5kZWZlckluZGVmaW5pdGVseSgpOwogICAgIH0KIAotICAgIGludDMyX3QgdGhyZXNo
b2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2b2lkIGppdEFmdGVyV2FybVVwKCk7
CiAgICAgdm9pZCBqaXRTb29uKCk7CisgICAgdm9pZCBqaXROZXh0SW52b2NhdGlvbigpOwogCiAg
ICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CisgICAg
ICAgIHJldHVybiAqbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIH0KIAogICAgIHR5cGVkZWYg
SGFzaE1hcDxzdGQ6OnR1cGxlPFN0cnVjdHVyZUlELCB1bnNpZ25lZD4sIEZpeGVkVmVjdG9yPExM
SW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4+IFN0cnVjdHVyZVdh
dGNocG9pbnRNYXA7CkBAIC03OTcsNiArNzYzLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNE
ZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CiAg
ICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7IHJldHVybiAmbV9kZWJ1Z2dlclJl
cXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkRlYnVnZ2VyUmVxdWVzdHMo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2RlYnVnZ2VyUmVxdWVzdHMp
OyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWduZWQgbnVtQnJlYWtwb2ludHMpOwog
ICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBudW1CcmVha3BvaW50cykKQEAgLTgz
OCw2ICs4MDUsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SlNMb2NrIG1fbG9j
azsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7IC8vIE5vdCBhIGJpdGZpZWxk
IGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBpdC4KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICNpZiBFTkFCTEUo
SklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgOiAyOyAvLyBERkc6OkNh
cGFiaWxpdHlMZXZlbApAQCAtODQ3LDggKzgxNSw2IEBAIHB1YmxpYzoKICAgICBib29sIG1fZGlk
RmFpbEZUTENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZU
TCA6IDE7CiAKLSAgICBib29sIG1faGFzTGlua2VkT1NSRXhpdCA6IDE7Ci0gICAgYm9vbCBtX2lz
RWxpZ2libGVGb3JMTEludERvd25ncmFkZSA6IDE7CiAgICAgYm9vbCBtX3Zpc2l0Q2hpbGRyZW5T
a2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAgLy8gSW50ZXJuYWwgbWV0aG9kcyBm
b3IgdXNlIGJ5IHZhbGlkYXRpb24gY29kZS4gSXQgd291bGQgYmUgcHJpdmF0ZSBpZiBpdCB3YXNu
J3QKQEAgLTkwNywxNiArODczLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mTWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fbWV0YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9u
c1Jhd1BvaW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3Ry
dWN0aW9uc1Jhd1BvaW50ZXIpOyB9CiAKLSAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9y
RnV6emluZ0Vhcmx5UmV0dXJuKCkKLSAgICB7Ci0gICAgICAgIC8vIFNvbWUgYnVpbHRpbnMgYXJl
IHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9vcHMgdGhleSBydW4uCi0gICAgICAg
IHJldHVybiAhbV91bmxpbmtlZENvZGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7Ci0gICAgfQorICAg
IGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKSB7IHJldHVy
biBtX3VubGlua2VkQ29kZS0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1
cm4oKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVz
KCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVD
YWNoZXMoKTsKKyAgICB2b2lkIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKQEAg
LTEwMTAsNyArOTcyLDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50TWFwIG1f
bGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2Rl
OwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpJVERhdGE+
IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAv
LyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0
aGUgcHJvZmlsZWQgY29kZSBibG9jawpAQCAtMTAyOSw3ICs5OTMsNyBAQCBwcml2YXRlOgogCiAg
ICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKICAgICAKLSAgICBCYXNl
bGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOworICAgIEJhc2VsaW5l
RXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3VudGVyIHsgbnVsbHB0ciB9OwogCiAg
ICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhlY3V0ZUNvdW50ZXI7CiAgICAgdWlu
dDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjgzMTAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsOCArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCYXNl
bGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRN
ZXRhZGF0YVRhYmxlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDkgKzQyLDcg
QEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUoY29ucwogICAgIGlmIChtX21l
dGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9y
RWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9wcm9maWxl
LCBmYWxzZSk7IH0pOwotCiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJ
TEUoVklTSVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8
T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgCkBAIC01Nyw3ICs1Nyw2IEBA
IHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKICAgICAgICAgICAgIGZ1
bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsKICAgICAgICAgfSk7CiAgICAgfSAg
IAotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CkBAIC05OSw0ICs5OCwzOCBAQCB2
b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJbmZvCiAgICAgfQogfQogCisjaWYg
RU5BQkxFKEpJVCkKK0FMV0FZU19JTkxJTkUgY29uc3QgSklUQ29kZU1hcCYgQ29kZUJsb2NrOjpq
aXRDb2RlTWFwKCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5l
SklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2Rl
LmdldCgpKS0+bV9qaXRDb2RlTWFwOworfQorCitBTFdBWVNfSU5MSU5FIFNpbXBsZUp1bXBUYWJs
ZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sK
KyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdBWVNfSU5MSU5FIFN0cmluZ0p1bXBU
YWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgp
KS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKK0FMV0FZU19JTkxJTkUgU2ltcGxlSnVtcFRhYmxlJiBDb2RlQmxv
Y2s6OmRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0
VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERGRzo6
SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4
XTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmdKdW1wVGFibGUmIENvZGVCbG9jazo6ZGZnU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQoreworICAgIEFTU0VSVChqaXRUeXBl
KCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8REZHOjpKSVRD
b2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2Nr
RWRnZS5oCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3
MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZSogd3Jh
cChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAgc3RhdGljIEV4ZWN1dGFibGVUb0Nv
ZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jayk7CisKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1fY29kZUJsb2NrKTsgfQogICAgIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmNwcAkocmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4ZWN1dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAg
Ym9vbCBFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICB0aHJlc2hvbGQgPSBjbGlwcGVkVGhyZXNob2xkKGNvZGVCbG9j
ayA/IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgOiBudWxscHRyLCB0aHJlc2hvbGQpOworICAg
IHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQodGhyZXNob2xkKTsKICAgICAKICAgICBtX2Nv
dW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmgJKHJldmlzaW9uIDI4MzEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRseSgpOyAvLyBJZiB5b3UgdXNlIHRo
aXMsIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkgbWF5IHN0aWxsIHJldHVybiBmYWxz
ZS4KICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwog
ICAgIGJvb2wgaGFzQ3Jvc3NlZFRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRlciA+
PSAwOyB9Ci0gICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVC
bG9jayopOworICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2Rl
QmxvY2sqID0gbnVsbHB0cik7CiAgICAgdm9pZCBkZWZlckluZGVmaW5pdGVseSgpOwogICAgIGRv
dWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENv
dW50KSArIG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpA
QCAtODYsMTMgKzg2LDkgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hvbGQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVCB0aHJlc2hvbGQpCisgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChU
IHRocmVzaG9sZCkKICAgICB7Ci0gICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwotICAgICAg
ICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
KCkgJiYgZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2Jq
ZWN0LT53ZWFrUmFuZG9tSW50ZWdlcigpICUgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5D
aGVja3BvaW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBt
YXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CisgICAgICAgIGludDMy
X3QgbWF4VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50
cygpOwogICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQogICAgICAgICAgICAg
dGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICByZXR1cm4gdGhyZXNob2xkOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkTWV0YWRhdGEu
aAkocmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBH
ZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgewogc3RhdGljX2Fzc2VydChzaXplb2YoR2V0QnlJZE1v
ZGVNZXRhZGF0YVVuc2V0KSA9PSAxMik7CiAKIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhQXJy
YXlMZW5ndGggeworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoLCBh
cnJheVByb2ZpbGUpOyB9CiAgICAgQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZTsKIH07CiBzdGF0
aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGgpID09IDEyKTsK
QEAgLTg4LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVNZXRhZGF0YSB7CiAgICAgICAgIEdl
dEJ5SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0Q291bnRGb3JMTEludENhY2hpbmc7
IC8vIFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFByb3RvTG9hZCBtb2RlLgogICAgIH07
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0KICAgICBHZXRCeUlkTW9kZU1ldGFk
YXRhRGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgdW5z
ZXRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJheUxlbmd0aCBhcnJheUxlbmd0aE1v
ZGU7CkBAIC0xMTcsNiArMTE5LDcgQEAgc3RydWN0IEdldEJ5SWRNb2RlTWV0YWRhdGEgewogICAg
ICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhUHJvdG9Mb2FkIHByb3RvTG9hZE1vZGU7CiAgICAgfTsK
ICAgICBHZXRCeUlkTW9kZSBtb2RlOworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2Rl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRNb2RlTWV0YWRhdGEsIG1vZGUpOyB9
CiAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGluZzsKIH07CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkocmV2
aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3Rh
dHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIEdldEJ5U3RhdHVzIEdl
dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKE5v
SW5mb3JtYXRpb24pOwogICAgICAgICAKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6
IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0
dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHByb2ZpbGVkQmxvY2stPnZtKCkpOwog
ICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0
eSgpKQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVy
ID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAJKHJldmlz
aW9uIDI4MzEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQg
R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEcKIAogICAgIC8vIExldCdzIHN0b3Jl
IHRoZSByZXVzZWQgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4gQWZ0ZXIgdGhhdCwgd2UgY2FuIHVz
ZSBhbGxvY2F0ZWQgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgYWxsb2NhdG9yLnByZXNl
cnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
OjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOworICAgICAgICBhbGxvY2F0b3IucHJl
c2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CiAKICAgICBpZiAoR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coImJhc2VH
UFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsKQEAgLTIyNSwxMiArMjI1LDkgQEAgdm9pZCBHZXR0ZXJT
ZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9y
Q0NhbGwuc2V0KHJlZyk7CiAgICAgZm9yIChGUFJSZWcgcmVnIDogZnBTY3JhdGNoKQogICAgICAg
ICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CisgICAgaWYgKGppdC5jb2RlQmxv
Y2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGxGb3JDQ2FsbC5zZXQo
c3R1YkluZm8ubV9zdHViSW5mb0dQUik7CiAgICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLmV4
Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckNDYWxsKCkpOwotI2lmIENQ
VShBUk02NCkKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKLSAg
ICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbEZv
ckNDYWxsLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2VuZGlmCiAKICAgICBBY2Nlc3NDYXNl
U25pcHBldFBhcmFtcyBwYXJhbXMoc3RhdGUubV92bSwgV1RGTW92ZShyZWdzKSwgV1RGTW92ZShn
cFNjcmF0Y2gpLCBXVEZNb3ZlKGZwU2NyYXRjaCkpOwogICAgIHNuaXBwZXQtPmdlbmVyYXRvcigp
LT5ydW4oaml0LCBwYXJhbXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyAr
MTM5LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZgogICAgICAg
ICByZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBl
OjpJbkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8t
Pm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSk7CiAgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkp
CiAgICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsMTYgQEAgQUxX
QVlTX0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGluZQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vz
cyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1
YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWlj
IHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0
byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKICAgICAKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZvLmJhc2VHUFI7CkBAIC0yMzMsMjMg
KzIzOCwzMSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGhhc0ZyZWVSZWdpc3RlCiAgICAg
cmV0dXJuIGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykgIT0gSW52YWxpZEdQUlJlZzsKIH0K
IAotYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5s
aW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0K
IAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNl
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFzdHVi
SW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2Uoc3R1YkluZm8sIG9mZnNldCkp
OworICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBz
dHViSW5mbywgb2Zmc2V0KSk7CisKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewor
ICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJl
U3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQogCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIApAQCAtMjc5LDIyICsyOTIsMjUgQEAgYm9vbCBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UgogICAgIHJldHVybiBsaW5rZWRDb2Rl
SW5saW5lOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVBcnJheUxlbmd0aChT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVB
Y2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7CiAgICAgQVNTRVJUKGFy
cmF5LT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogCiAgICAgaWYgKCFzdHViSW5mby5oYXND
b25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChjb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgaWYgKCFoYXNGcmVlUmVnaXN0ZXIoc3R1YkluZm8pKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWhhc0FueUFycmF5U3RvcmFnZShhcnJheS0+aW5k
ZXhpbmdUeXBlKCkpICYmIGFycmF5LT5pbmRleGluZ1R5cGUoKSAhPSBBcnJheUNsYXNzOwogfQog
Ci1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRl
QXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgQVNTRVJUKGlzQ2FjaGVhYmxlQXJyYXlMZW5n
dGgoc3R1YkluZm8sIGFycmF5KSk7CisgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGlzQ2Fj
aGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywgYXJyYXkpKTsKIAogICAgIGlm
ICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0zMTksMTcgKzMzNSwyMCBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxl
bmd0aChTCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7CiB9CiAKLWJvb2wgSW5saW5lQWNj
ZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Citib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICBpZiAoIXN0dWJJ
bmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAg
aWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gaGFzRnJlZVJlZ2lzdGVyKHN0dWJJbmZvKTsK
IH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0
aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewot
ICAgIEFTU0VSVChpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChzdHViSW5mbykpOworICAgIEFTU0VS
VF9VTlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0
dWJJbmZvKSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzYzLDEzICszODIsMTggQEAgYm9vbCBJbmxpbmVBY2Nl
c3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKAogfQogCiAKLWJvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIXN0dWJJbmZv
Lmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYg
KGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAgLy8gVGhlc2UgZHluYW1pYyBzbG90
cyBnZXQgZmlsbGVkIGluIGJ5IFN0cnVjdHVyZVN0dWJJbmZvLiBOb3RoaW5nIGVsc2UgdG8gZG8u
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIEdQUlJlZyBiYXNlID0gc3R1Yklu
Zm8uYmFzZUdQUjsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVncygp
OwogCkBAIC00MDYsMTMgKzQzMCwxMyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFz
SnVtcEluQWNjCiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKICAgICAgICAgLy8g
SWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10aGluZywgd2UgZG8gbm90IGVtaXQgbm9wIHNsZWQg
KGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAvLyBUaGUgY29kZSBpcyBhbHJlYWR5IGFuIGluZGly
ZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdlIHNob3VsZCBkbyBpcyByZXBsYWNpbmcgbV9jb2Rl
UHRyLgotICAgICAgICBpZiAoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKSB7CisgICAg
ICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiBz
dHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIC8vIElmIG1fY29k
ZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24sIHRoaXMg
bWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29kZSBpcyBub3QgYSBzdHViIG9uZS4KICAgICAgICAg
ICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRoIHRoZSBzdHViLWJhc2VkIGRpc3BhdGNoaW5nIGNv
ZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5nIGl0IHVudGlsIHdlIHJlc2V0IHRoZSBjb2RlLgog
ICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1fY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpID09
IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSB7CiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1YkluZm8uc3Rh
cnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxI
ZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnN0dWJJbmZvKSwgc3R1YkluZm8u
bV9zdHViSW5mb0dQUik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgICAgICAgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGlu
ZVB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1wKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gc3R1YkluZm8uZG9uZUxvY2F0
aW9uOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKQEAgLTQyMSw3ICs0NDUsOSBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAgfSksICJJbmxpbmVBY2Nlc3M6IGxp
bmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBz
dHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2Rl
LgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzQsOCArNDYwLDE0IEBAIHZvaWQgSW5s
aW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAgICB9KSwgIklubGluZUFjY2Vzczog
bGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKLXZvaWQgSW5saW5lQWNjZXNzOjpyZXNldFN0
dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
Cit2b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKKyAgICBpZiAoY29kZUJs
b2NrLT51c2VEYXRhSUMoKSAmJiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNl
bGluZUpJVCkgeworICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSBzdHViSW5mby5zbG93UGF0
aFN0YXJ0TG9jYXRpb247CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVj
dHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBjb2RlLgorICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklUQ29kZU92ZXIoc3R1Yklu
Zm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2NvcGVkTGFtYmRhPHZvaWQo
Q0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewogICAgICAgICAvLyBXZSBk
b24ndCBuZWVkIGEgbm9wIHNsZWQgaGVyZSBiZWNhdXNlIG5vYm9keSBzaG91bGQgYmUganVtcGlu
ZyBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCiAgICAgICAgIGF1dG8ganVtcCA9IGppdC5qdW1w
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vz
cy5oCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDE0ICs5OSwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBzdGQ6Om1heChzaXplLCBzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7
CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoU3Ry
dWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgc3RhdGlj
IGJvb2wgY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKFN0cnVjdHVyZVN0dWJJbmZvJiwg
UHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5UmVw
bGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKLSAg
ICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiwg
SlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKFN0cnVj
dHVyZVN0dWJJbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChTdHJ1
Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJ
bkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBib29s
IGdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGljIGJv
b2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1Yklu
Zm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgc3RhdGljIGJvb2wgY2FuR2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwg
UHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU2VsZlByb3BlcnR5UmVw
bGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSosIFByb3BlcnR5
T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3RoKENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOworICAgIHN0YXRpYyBib29sIGlzQ2Fj
aGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7CisgICAg
c3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgYm9vbCBnZW5lcmF0ZVNlbGZJbkFjY2VzcyhD
b2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBi
b29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7
CiAKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGlu
ZUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CiAgICAgc3RhdGljIHZvaWQgcmV3aXJlU3R1YkFzSnVt
cEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgJKHJldmlzaW9uIDI4
MzEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0
YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBPVkVSTE9BRF9CSVRXSVNF
X09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJdGVyYXRpb25Nb2RlTWV0YWRhdGEg
ewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSXRlcmF0aW9uTW9kZU1l
dGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBl
KHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRpb25Nb2RlKSk7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAko
cmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50
Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJvZmlsZTsKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExM
SW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0KIAogcHJpdmF0ZToKICAgICB1aW50
cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExpbmtCaXQgeyB1bmxpbmtlZEJpdCB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2aXNpb24g
MjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDE3IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
Yml0V2lkdGhGb3JNYXgKICAgICBtYWNybyhPcEl0ZXJhdG9yT3BlbikgXAogICAgIG1hY3JvKE9w
SXRlcmF0b3JOZXh0KSBcCiAKKyNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQklOQVJZX0FS
SVRIX1BST0ZJTEUobWFjcm8pIFwKKyAgICBtYWNybyhPcEFkZCkgXAorICAgIG1hY3JvKE9wTXVs
KSBcCisgICAgbWFjcm8oT3BEaXYpIFwKKyAgICBtYWNybyhPcFN1YikgXAorCisjZGVmaW5lIEZP
Ul9FQUNIX09QQ09ERV9XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKKyAgICBtYWNy
byhPcEluYykgXAorICAgIG1hY3JvKE9wRGVjKSBcCisgICAgbWFjcm8oT3BOZWdhdGUpIFwKKwog
CiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInR5cGUtbGltaXRzIikKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlOjpzdWNjZWVkKCkKIHsKICAgICByZXN0b3JlU2NyYXRjaCgpOwog
ICAgIGlmIChqaXQtPmNvZGVCbG9jaygpLT51c2VEYXRhSUMoKSkKLSAgICAgICAgaml0LT5yZXQo
KTsKKyAgICAgICAgaml0LT5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby0+
bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mRG9uZUxvY2F0aW9uKCkp
LCBKU0ludGVybmFsUHRyVGFnKTsKICAgICBlbHNlCiAgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKGpp
dC0+anVtcCgpKTsKIH0KQEAgLTExMCw2ICsxMTAsOCBAQCBjb25zdCBSZWdpc3RlclNldCYgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0LT5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSk7CiAKICAgICAgICAg
bV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0KG1fbGl2ZVJlZ2lzdGVyc1RvUHJl
c2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFsbG9jYXRvci0+dXNlZFJlZ2lzdGVy
cygpKTsKKyAgICAgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQorICAgICAg
ICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5hZGQoc3R1YkluZm8tPm1fc3R1YkluZm9HUFIp
OwogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGw7CkBAIC0x
MjgsMTEgKzEzMCwxMiBAQCBhdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2VydmVMaXZl
CiAgICAgfTsKIH0KIAotYXV0byBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OnByZXNlcnZlTGl2ZVJl
Z2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMoY29uc3QgUmVnaXN0ZXJTZXQm
IGV4dHJhKSAtPiBTcGlsbFN0YXRlCithdXRvIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2Vy
dmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucygpIC0+IFNwaWxs
U3RhdGUKIHsKICAgICBSZWdpc3RlclNldCBsaXZlUmVnaXN0ZXJzID0gYWxsb2NhdG9yLT51c2Vk
UmVnaXN0ZXJzKCk7CisgICAgaWYgKGppdC0+Y29kZUJsb2NrKCktPnVzZURhdGFJQygpKQorICAg
ICAgICBsaXZlUmVnaXN0ZXJzLmFkZChzdHViSW5mby0+bV9zdHViSW5mb0dQUik7CiAgICAgbGl2
ZVJlZ2lzdGVycy5leGNsdWRlKGNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgbGl2ZVJlZ2lz
dGVycy5tZXJnZShleHRyYSk7CiAKICAgICBjb25zdGV4cHIgdW5zaWduZWQgZXh0cmFTdGFja1Bh
ZGRpbmcgPSAwOwogICAgIHVuc2lnbmVkIG51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3Rl
clByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3Rl
cnNUb1N0YWNrRm9yQ2FsbCgqaml0LCBsaXZlUmVnaXN0ZXJzLCBleHRyYVN0YWNrUGFkZGluZyk7
CkBAIC01OTYsMTYgKzU5OSwxMSBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGlj
QWNjZXNzCiAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxvY2spOwogICAgIHN0YXRlLmppdCA9
ICZqaXQ7CiAKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewotICAgICAgICBpZiAo
c3RhdGUubV9kb2VzSlNHZXR0ZXJTZXR0ZXJDYWxscykgewotICAgICAgICAgICAgLy8gV2UgaGF2
ZSBubyBndWFyYW50ZWUgdGhhdCBzdGFjay1wb2ludGVyIGlzIHRoZSBleHBlY3RlZCBvbmUuIFRo
aXMgaXMgbm90IGEgcHJvYmxlbSBpZiB3ZSBkbyBub3QgaGF2ZSBKUyBnZXR0ZXIgLyBzZXR0ZXIg
Y2FsbHMgc2luY2Ugc3RhY2stcG9pbnRlciBpcwotICAgICAgICAgICAgLy8gYSBjYWxsZWUtc2F2
ZSByZWdpc3RlciBpbiB0aGUgQyBjYWxsaW5nIGNvbnZlbnNpb24uIEhvd2V2ZXIsIG91ciBKUyBl
eGVjdXRhYmxlIGNhbGwgZG9lcyBub3Qgc2F2ZSBzdGFjay1wb2ludGVyLiBTbyB3ZSBhcmUgYWRq
dXN0aW5nIHN0YWNrLXBvaW50ZXIgYWZ0ZXIKLSAgICAgICAgICAgIC8vIEpTIGdldHRlciAvIHNl
dHRlciBjYWxscy4gQnV0IHRoaXMgY291bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlIGluaXRpYWwg
c3RhY2stcG9pbnRlciwgYW5kIG1ha2VzIFBBQyB0YWdnaW5nIGJyb2tlbi4KLSAgICAgICAgICAg
IC8vIFRvIGVuc3VyZSBQQUMtdGFnZ2luZyB3b3JrLCB3ZSBmaXJzdCBhZGp1c3Qgc3RhY2stcG9p
bnRlciB0byB0aGUgYXBwcm9wcmlhdGUgb25lLgotICAgICAgICAgICAgaml0LmFkZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0YWNrUG9pbnRlck9mZnNldCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGppdC50YWdSZXR1cm5BZGRy
ZXNzKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKKyAgICBpZiAoIWNhbkJlU2hhcmVkICYmIEFTU0VSVF9FTkFCTEVEKSB7CisgICAgICAgIGpp
dC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5zdGFja1BvaW50
ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgYXV0byBvayA9IGppdC5icmFuY2hQ
dHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAg
ICAgICAgb2subGluaygmaml0KTsKICAgICB9CiAKICAgICBzdGF0ZS5wcmVzZXJ2ZWRSZXVzZWRS
ZWdpc3RlclN0YXRlID0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUxLDcgKzI1MSw3IEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewogICAgIGNv
bnN0IFJlZ2lzdGVyU2V0JiBjYWxjdWxhdGVMaXZlUmVnaXN0ZXJzRm9yQ2FsbEFuZEV4Y2VwdGlv
bkhhbmRsaW5nKCk7CiAKICAgICBTcGlsbFN0YXRlIHByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3Rh
Y2tGb3JDYWxsKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7Ci0gICAgU3BpbGxTdGF0
ZSBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKGNv
bnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7CisgICAgU3BpbGxTdGF0ZSBwcmVzZXJ2ZUxp
dmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAgICB2b2lk
IHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbFdpdGhUaHJvd25FeGNlcHRpb24o
Y29uc3QgU3BpbGxTdGF0ZSYpOwogICAgIHZvaWQgcmVzdG9yZUxpdmVSZWdpc3RlcnNGcm9tU3Rh
Y2tGb3JDYWxsKGNvbnN0IFNwaWxsU3RhdGUmLCBjb25zdCBSZWdpc3RlclNldCYgZG9udFJlc3Rv
cmUgPSB7IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5U3Rh
dHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTAgKzE4MCwx
MCBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJCiAgICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJbmZvLT5pZGVudGlmaWVyKCk7CiAg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVudGlmaWVyLnVpZCgpOwogICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh1aWQpOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQot
ICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KHVpZCk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8t
PmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRCbG9jay0+dm0oKSk7CisgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7
CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4g
UHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0dWJJbmZvLT5tX2lu
bGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7CisgICAgICAgICAgICByZXR1
cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRpZmllciksIHN0cnVjdHVyZSwg
b2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSksICpzdHViSW5mbyk7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNp
b24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlN0
cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5l
cy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiUG9s
eW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAKQEAgLTY1LDkgKzY2LDkg
QEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5SWRTZWxmKAogICAgIEFTU0VSVCho
YXNDb25zdGFudElkZW50aWZpZXIpOwogICAgIHNldENhY2hlVHlwZShsb2NrZXIsIENhY2hlVHlw
ZTo6R2V0QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgbV9p
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gaW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBjb2RlQmxvY2stPnZtKCkuaGVhcC53
cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRTZWxmLm9mZnNldCA9IG9mZnNldDsK
KyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTdHViSW5m
bzo6aW5pdEFycmF5TGVuZ3RoKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlcikK
QEAgLTg3LDkgKzg4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdFB1dEJ5SWRSZXBs
YQogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KTsKICAgICBzZXRD
YWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlKTsKICAgICBtX2lkZW50
aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7
CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAg
dS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7
CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVy
ZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBDYWNo
ZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC05Nyw5ICs5OCw5IEBAIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGMKICAgICBBU1NFUlQobV9jYWNoZVR5cGUgPT0g
Q2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBlKGxvY2tlciwgQ2FjaGVUeXBlOjpJ
bkJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jh
c2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVC
YXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAg
YnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmRl
cmVmKCkKQEAgLTIzNiw3ICsyMzcsNyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFN0cnVjdHVy
ZVN0dWJJbmZvCiAgICAgICAgIC8vIHdlJ3JlIGJ1ZmZlcmVkIGlzIGJlY2F1c2Ugd2UgcmVseSBv
biBpdCB0byByZXNldCBkdXJpbmcgR0MgaWYgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlCiAg
ICAgICAgIC8vIGlzIGNvbGxlY3RlZC4KICAgICAgICAgbV9pZGVudGlmaWVyID0gbnVsbHB0cjsK
LSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3
ZSBnZW5lcmF0ZWQgc29tZSBjb2RlIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBhdHRlbXB0IHRvIHJl
cGF0Y2ggaW4gdGhlIGZ1dHVyZSB1bnRpbCB3ZQogICAgICAgICAvLyBnYXRoZXIgZW5vdWdoIGNh
c2VzLgpAQCAtMjUxLDcgKzI1Miw3IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnJlc2V0KGNv
bnN0IENvbmMKIHsKICAgICBjbGVhckJ1ZmZlcmVkU3RydWN0dXJlcygpOwogICAgIG1faWRlbnRp
ZmllciA9IG51bGxwdHI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmNsZWFyKCk7
CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0gMDsKIAogICAgIGlmIChtX2NhY2hl
VHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICByZXR1cm47CkBAIC0yODUsNiArMjg2
LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQoY29uc3QgQ29uYwogICAgICAgICBy
ZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2luZDo6QnlJZCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRCeShjb2RlQmxvY2ssICp0aGlzLCBQ
dXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJ
bkJ5SWQ6CkBAIC0zNjAsOCArMzYyLDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRX
ZWFrUmVmZXJlbgogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0gICAgaWYgKG1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgaXNWYWxpZCAmPSB2bS5oZWFwLmlz
TWFya2VkKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgaWYgKFN0cnVj
dHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpCisgICAgICAg
IGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1cmUpOwogICAgIGlmIChtX2NhY2hl
VHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIGlzVmFsaWQgJj0gdS5zdHViLT52aXNp
dFdlYWsodm0pOwogCkBAIC0zNzUsOCArMzc3LDggQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6
dmlzaXRXZWFrUmVmZXJlbgogdGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0g
ICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAgbV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKKyAgICBpZiAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpCisg
ICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRvcik7CiAKICAgICBpZiAobV9jYWNo
ZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICB1LnN0dWItPnByb3BhZ2F0ZVRyYW5z
aXRpb25zKHZpc2l0b3IpOwpAQCAtNDMwLDYgKzQzMiwyMDkgQEAgQUxXQVlTX0lOTElORSB2b2lk
IFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1fY2FjaGVUeXBlID0gbmV3Q2FjaGVUeXBlOwog
fQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0
dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5r
ZWRTdHViSW5mbykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGFjY2Vzc1R5cGUgPSB1bmxp
bmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQgPSB1bmxpbmtlZFN0dWJJbmZvLnN0
YXJ0OworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uZG9uZUxvY2F0aW9uOwor
ICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2VkU3R1YkluZm8uc2xvd1BhdGhTdGFy
dExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5k
ZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4Lm9mZnNldCgpKSk7CisgICAgY29kZU9y
aWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4KTsKKyAgICBt
X2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisKKyAgICB1c2VkUmVnaXN0ZXJzID0g
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIGlmIChhY2Nlc3NU
eXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwgd2UgY2Fu
J3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVyUmVnaXN0ZXIiIHJlZ2lzdGVyIGVpdGhlci4KKyAg
ICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpkb250Q2xv
YmJlclJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBl
OjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxP
cHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9m
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5CeVZhbDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9wdGltaXplOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlRyeUdl
dEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblRyeUdldEJ5SWRPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1p
emU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlz
OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0
aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJy
YW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5k
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0
ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRQcml2YXRlTmFt
ZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6
CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5wdXRLaW5kKSB7CisgICAgICAgIGNh
c2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8u
ZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0Ogor
ICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAg
ICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVm
aW5lOgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERlZmlu
ZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAgbV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgc3dpdGNoICh1bmxpbmtlZFN0dWJJbmZv
LnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAg
ICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0cmljdCgpKQorICAgICAgICAgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemU7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlmICh1bmxpbmtlZFN0dWJJbmZv
LmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWU6CisgICAg
ICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlua2VkU3R1YkluZm8ucHJpdmF0ZUZpZWxkUHV0S2lu
ZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6
ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgICAgICBtX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZDoKKyAgICAgICAg
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVy
ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVy
czo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6RGVs
ZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAg
YmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5w
cm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVE
ZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFj
Y2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6
CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0
eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgICAgICB2YWx1
ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICAgICAgbV9zdHVi
SW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y6CisgICAgICAgIGhhc0NvbnN0
YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBwcm90b3R5cGVJc0tub3duT2JqZWN0ID0g
ZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZh
bHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVz
dWx0OworICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6
OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAgICAgICBoYXNDb25zdGFudElkZW50
aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVy
czo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lz
dGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0
ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlWYWxSZWdp
c3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Oklu
QnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gdHJ1ZTsKKyAgICAgICAgcmVn
cy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lSW5C
eUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6CisgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSB0
cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBiYXNl
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQUiA9
IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6CisgICAgICAgIGhhc0NvbnN0YW50
SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRo
VGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUdldEJ5SWRX
aXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnRoaXNHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOworICAgICAgICBtX3N0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIGhhc0NvbnN0
YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3MudGhpc0dQUiA9IEludmFsaWRHUFJS
ZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICAg
ICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVy
ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpi
YXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5cGUgPT0gQWNjZXNzVHlwZTo6UHV0
QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxS
ZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ6
CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICB2YWx1ZUdQ
UiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFu
ZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0
ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5l
UHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odW5saW5rZWRTdHViSW5mbyk7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiB2b2lkIFN0cnVj
dHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAy
ODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1Yklu
Zm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJS
b3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPcHRpb25z
LmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCkBAIC01Niw2ICs1
Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdCB7CiAgICAgR2V0QnlWYWwsCiAg
ICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQcml2YXRlTmFtZSwKICAgICBJbkJ5
SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFtZSwKQEAgLTc4LDYgKzgwLDggQEAg
ZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAgIFN0cmluZ0xlbmd0aAogfTsKIAor
c3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisKIGNsYXNzIFN0cnVjdHVyZVN0dWJJ
bmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViSW5mbyk7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgpOwogCisgICAgdm9pZCBpbml0aWFs
aXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJVF9BR0dSRUdBVEU7CiAKICAgICAv
LyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVuY2VzIHRoYXQgYXJlIGRlYWQuIElm
IGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAgLTMyNSwxMyArMzMxLDE5IEBAIHBy
aXZhdGU6CiAKIHB1YmxpYzoKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CisgICAgUHJvcGVy
dHlPZmZzZXQgYnlJZFNlbGZPZmZzZXQ7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJ5
SWRTZWxmT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZv
LCBieUlkU2VsZk9mZnNldCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5l
QWNjZXNzQmFzZVN0cnVjdHVyZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVT
dHViSW5mbywgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKTsgfQogICAgIHVuaW9uIHsKLSAg
ICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICAg
ICAgfSBieUlkU2VsZjsKICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIHN0dWI7CiAgICAgfSB1
OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVy
ZTsKKyAgICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoVk0mIHZtKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHZtLmdldFN0cnVjdHVyZShtX2lubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIH0KKyAgICBTdHJ1Y3R1cmVJRCBtX2lubGluZUFj
Y2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAwIH07CiBwcml2YXRlOgogICAgIENhY2hlYWJsZUlkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOwogICAgIC8vIFJlcHJlc2VudHMgdGhvc2Ugc3RydWN0dXJlcyB0aGF0
IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nlc3NDYXNlcyBpbiB0aGUgUG9seW1vcnBoaWNBY2Nl
c3MuCkBAIC0zNTIsNiArMzY0LDcgQEAgcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2RlUHRyOwogCiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkNvZGVQdHIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlU3R1
YkluZm8sIG1fY29kZVB0cik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRG9uZUxv
Y2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBkb25l
TG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNsb3dQYXRoU3RhcnRM
b2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgc2xv
d1BhdGhTdGFydExvY2F0aW9uKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBt
X3Nsb3dPcGVyYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvdW50ZG93
bigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgY291bnRkb3du
KTsgfQpAQCAtNDQ3LDYgKzQ2MCwxNyBAQCBpbmxpbmUgYXV0byBhcHByb3ByaWF0ZUdlbmVyaWNH
ZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyB7
CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1dEtpbmQgcHV0S2luZDsKKyAgICBQ
cml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQgeyBQcml2YXRlRmllbGRQdXRL
aW5kOjpub25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9kZSB7IEVDTUFNb2RlOjpzbG9wcHko
KSB9OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8vIFRoaXMgaXMgZWl0aGVyIHRoZSBz
dGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNoZXMuIG9yIHRoZSBsb2NhdGlvbiBv
ZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNhY2hlcy4KKyAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb247CisgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKK307CisK
ICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAJKHJldmlzaW9uIDI4MzEwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdXBlclNhbXBsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgcHJpbnRTdXBlclNhbXBsZXJTdGF0ZSgp
CiAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAxMDAuMCAqIGluIC8gKGluICsgb3V0KTsKICAgICBp
ZiAocGVyY2VudGFnZSAhPSBwZXJjZW50YWdlKQogICAgICAgICBwZXJjZW50YWdlID0gMC4wOwot
ICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3VwZXIgc2FtcGxlciBmbGFnOiAiLCBw
ZXJjZW50YWdlLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJQZXJjZW50IHRpbWUgYmVoaW5kIHN1cGVy
IHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIiVcbiIpOwogfQogCiB2b2lkIGVuYWJsZVN1
cGVyU2FtcGxlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI4MzEwMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAK
KyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDbGFz
c0luZm8uaCIKQEAgLTc4LDYgKzc5LDggQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29k
ZUJsb2NrKFZNJgogICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tlcik7CiAg
ICAgICAgIG1fcmFyZURhdGEtPm1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQ6Ok5lZWRlZCk7CiAgICAgfQorCisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZCh0aHJlc2hvbGRGb3JKSVQo
T3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAoKSkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBWaXNpdG9yPgpAQCAtMzE2LDYgKzMxOSw0OCBAQCBpbnQgVW5saW5rZWRDb2RlQmxv
Y2s6Om91dE9mTGluZUp1bXBPZmZzCiAgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMu
Z2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECitib29sIFVubGlu
a2VkQ29kZUJsb2NrOjpoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7Cisg
ICAgaWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSA+IDEwMCkgeworICAgICAgICBpZiAobnVtYmVy
T2ZJZGVudGlmaWVycygpICE9IG1fY2FjaGVkSWRlbnRpZmllclVpZHMuc2l6ZSgpKSB7CisgICAg
ICAgICAgICBMb2NrZXIgbG9ja2VyKG1fY2FjaGVkSWRlbnRpZmllclVpZHNMb2NrKTsKKyAgICAg
ICAgICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBjYWNoZWRJZGVudGlmaWVyVWlkczsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJz
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIg
PSB0aGlzLT5pZGVudGlmaWVyKGkpOworICAgICAgICAgICAgICAgIGNhY2hlZElkZW50aWZpZXJV
aWRzLmFkZChpZGVudGlmaWVyLmltcGwoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAgICBtX2NhY2hlZElkZW50aWZpZXJV
aWRzID0gV1RGTW92ZShjYWNoZWRJZGVudGlmaWVyVWlkcyk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5jb250YWlucyh1aWQpOworICAgIH0KKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkg
eworICAgICAgICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkgPT0gdWlkKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitpbnQz
Ml90IFVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JKSVQoaW50MzJfdCB0aHJlc2hvbGQp
Cit7CisgICAgc3dpdGNoIChkaWRPcHRpbWl6ZSgpKSB7CisgICAgY2FzZSBUcmlTdGF0ZTo6SW5k
ZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZDsKKyAgICBjYXNlIFRyaVN0YXRl
OjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAqIDQ7CisgICAgY2FzZSBUcmlTdGF0
ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAvIDI7CisgICAgfQorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0aHJlc2hvbGQ7Cit9CisKKwogdm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxlcygpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fbWV0YWRhdGEtPmlzRmluYWxpemVkKCkpOwpAQCAtMzM3LDE1ICszODIsMjUgQEAg
dm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcgogICAgIGlmIChtX21ldGFk
YXRhLT5oYXNNZXRhZGF0YSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJyYXlQcm9m
aWxlcyA9IDA7CiAKLSNkZWZpbmUgQ09VTlQoX19vcCkgXAotICAgICAgICBudW1iZXJPZkFycmF5
UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOworI2RlZmluZSBDT1VO
VChfX29wKSBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxf
X29wPigpOwogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENPVU5U
KQogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElOVF9DQUxMX0xJTktfSU5GTyhDT1VO
VCkKICN1bmRlZiBDT1VOVAogICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRh
ZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9yTmV4dD4oKTsKICAgICAgICAgbnVtYmVyT2ZBcnJh
eVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8T3BHZXRCeUlkPigpOwotCiAgICAg
ICAgIG1fYXJyYXlQcm9maWxlcyA9IEZpeGVkVmVjdG9yPFVubGlua2VkQXJyYXlQcm9maWxlPihu
dW1iZXJPZkFycmF5UHJvZmlsZXMpOworCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQmluYXJ5
QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mQmluYXJ5QXJp
dGhQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVzPF9fb3A+KCk7CisgICAgICAgIEZP
Ul9FQUNIX09QQ09ERV9XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKENPVU5UKQorI3VuZGVmIENP
VU5UCisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcyA9IEZpeGVkVmVjdG9yPEJpbmFyeUFy
aXRoUHJvZmlsZT4obnVtYmVyT2ZCaW5hcnlBcml0aFByb2ZpbGVzKTsKKworICAgICAgICB1bnNp
Z25lZCBudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5UKF9fb3Ap
IG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8X19v
cD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShD
T1VOVCkKKyN1bmRlZiBDT1VOVAorICAgICAgICBtX3VuYXJ5QXJpdGhQcm9maWxlcyA9IEZpeGVk
VmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPihudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyk7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDEwICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5o
IgogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlv
bnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgi
CisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5n
ZUluZm8uaCIKICNpbmNsdWRlICJIYW5kbGVySW5mby5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIu
aCIKQEAgLTY0LDYgKzY2LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiBjbGFzcyBVbmxp
bmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7
CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKK2NsYXNzIEJhc2VsaW5lSklUQ29k
ZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKIGVudW0gY2xhc3MgTGlua1RpbWVDb25zdGFudCA6
IGludDMyX3Q7CiAKQEAgLTE3NSw2ICsxNzgsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGaXhl
ZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0
dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4g
bV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAg
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0u
Z2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+
JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBAIC0yMDcsNiArMjExLDE1IEBAIHB1Ymxp
YzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogCiAgICAgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0OworICAgIGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5kZXggaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIoKTsgfQorICAgIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAg
IGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYXQoMCkucHRy
KCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0VuZCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaW5zdHJ1
Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVnaW4gJiYgaW5zdHJ1Y3Rpb24gPCBp
bnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gLSBpbnN0cnVjdGlv
bnNCZWdpbjsKKyAgICB9CisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25zU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIGluc3RydWN0aW9ucygpLnNpemUoKTsgfQogCiAgICAgdW5zaWduZWQgbnVtQ2FsbGVl
TG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KICAgICB1bnNpZ25l
ZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJzOyB9CkBAIC0zMzQsMTAgKzM0Nywy
MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpOwog
ICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1
cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlucyBhcmUgcmVxdWlyZWQgdG8gYWx3
YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAgICAgICAgcmV0dXJuICFpc0J1aWx0
aW5GdW5jdGlvbigpOworICAgIH0KICAgICB2b2lkIGFsbG9jYXRlU2hhcmVkUHJvZmlsZXMoKTsK
ICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSYgdW5saW5rZWRWYWx1ZVByb2ZpbGUodW5zaWduZWQg
aW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlc1tpbmRleF07IH0KICAgICBVbmxpbmtlZEFy
cmF5UHJvZmlsZSYgdW5saW5rZWRBcnJheVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJu
IG1fYXJyYXlQcm9maWxlc1tpbmRleF07IH0KIAorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgYm9v
bCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7CisjZW5kaWYKKworICAgIGludDMy
X3QgdGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKKwogcHJvdGVjdGVkOgogICAg
IFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwgQ29kZVR5cGUsIGNvbnN0IEV4ZWN1
dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4pOwogCkBAIC0zOTcsNiAr
NDIxLDkgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xleGljYWxTY29wZUZlYXR1cmVzIDog
NDsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKKyNpZiBFTkFCTEUoSklU
KQorICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1fdW5saW5rZWRCYXNlbGluZUNvZGU7Cisj
ZW5kaWYKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXMgeyAwIH07CiAgICAg
U291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEzLDcgKzQ0MCw2IEBAIHByaXZhdGU6
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNz
OwogCi0KICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFBy
b2ZpbGU7CiAjZW5kaWYKQEAgLTQ1OCw2ICs0ODQsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwogICAg
IH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvbiogcGMpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IHRoaXMtPmJ5dGVjb2RlT2Zm
c2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQpOworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSYgYmluYXJ5QXJpdGhQcm9maWxl
KHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorICAgIFVu
YXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1bnNpZ25lZCBpKSB7IHJldHVybiBt
X3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorCisgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVy
JiBsbGludEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOyB9
CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBIYXNoTWFwPElu
c3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBAIC00NjUsOCArNTAxLDE2IEBAIHByaXZh
dGU6CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAgICAgRml4ZWRWZWN0b3I8
RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5mbzsKKyAgICBCYXNlbGluZUV4ZWN1
dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgIEZpeGVkVmVjdG9yPFVubGlu
a2VkVmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CiAgICAgRml4ZWRWZWN0b3I8VW5saW5r
ZWRBcnJheVByb2ZpbGU+IG1fYXJyYXlQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxCaW5hcnlB
cml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsKKyAgICBGaXhlZFZlY3RvcjxVbmFy
eUFyaXRoUHJvZmlsZT4gbV91bmFyeUFyaXRoUHJvZmlsZXM7CisKKyNpZiBBU1NFUlRfRU5BQkxF
RAorICAgIExvY2sgbV9jYWNoZWRJZGVudGlmaWVyVWlkc0xvY2s7CisgICAgSGFzaFNldDxVbmlx
dWVkU3RyaW5nSW1wbCo+IG1fY2FjaGVkSWRlbnRpZmllclVpZHM7CisjZW5kaWYKIAogcHJvdGVj
dGVkOgogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oCShyZXZp
c2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRN
ZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVW5saW5rZWRNZXRhZGF0YVRhYmxlKTsKICAg
ICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlPgorICAgIHVpbnRwdHJfdCBvZmZz
ZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNvZGUpCisgICAgeworICAgICAgICBB
U1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRwdHJfdCBiYXNlVHlwZU9mZnNldCA9
IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6Om9wY29kZUlEXSA6IG9mZnNldFRh
YmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAgYmFzZVR5cGVPZmZzZXQgPSByb3Vu
ZFVwVG9NdWx0aXBsZU9mKGFsaWdub2YodHlwZW5hbWUgT3Bjb2RlOjpNZXRhZGF0YSksIGJhc2VU
eXBlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBlT2Zmc2V0ICsgc2l6ZW9mKHR5cGVu
YW1lIE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0YWRhdGFJRDsKKyAgICB9CisKICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAgdW5zaWduZWQgbnVtRW50cmllcygp
OwogCkBAIC0xMDcsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNfb2Zmc2V0
MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2luZyBPZmZzZXQzMiA9IHVpbnQzMl90Owog
ICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDI4MzEwMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDUsMTMgKzQ1LDExIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKIAogICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNrZXRzID0gbnVtYmVyT2ZCdWNrZXRz
QXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZlNwZWNGYWls
QnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBidWNrZXRJbmRleE1h
c2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
dG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tldHMgKyBudW1iZXJPZlNwZWNGYWls
QnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNlKCkKICAgICB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQotICAgICAg
ICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAg
IGNsZWFyQnVja2V0cygpOwogICAgIH0KICAgICAKICAgICBFbmNvZGVkSlNWYWx1ZSogc3BlY0Zh
aWxCdWNrZXQodW5zaWduZWQgaSkKQEAgLTU5LDYgKzU3LDEyIEBAIHN0cnVjdCBWYWx1ZVByb2Zp
bGVCYXNlIHsKICAgICAgICAgQVNTRVJUKG51bWJlck9mQnVja2V0cyArIGkgPCB0b3RhbE51bWJl
ck9mQnVja2V0cyk7CiAgICAgICAgIHJldHVybiBtX2J1Y2tldHMgKyBudW1iZXJPZkJ1Y2tldHMg
KyBpOwogICAgIH0KKworICAgIHZvaWQgY2xlYXJCdWNrZXRzKCkKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsgKytpKQorICAgICAg
ICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgfQog
ICAgIAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tldCkgY29u
c3QKICAgICB7CkBAIC0xMjMsOCArMTI3LDYgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2Ugewog
ICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5k
IHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKLSAg
ICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4KICAgICBTcGVjdWxhdGVkVHlwZSBj
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJikKICAgICB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVja2V0czsg
KytpKSB7CkBAIC0xMzksNyArMTQxLDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKICAgICB9Ci0gICAgCisKICAgICBF
bmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJPZkJ1Y2tldHNdOwogCiAgICAgU3Bl
Y3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUgfTsKQEAgLTE2MSw2ICsxNjMsNyBA
QCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0CiAKIHN0cnVjdCBWYWx1
ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9mQnVja2V0czwwPiB7
CiAgICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVXaXRoTG9nTnVtYmVyT2ZCdWNrZXRz
PDA+KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QnVja2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRzWzBdKTsgfQogfTsK
IAogc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciA6IHB1YmxpYyBWYWx1ZVBy
b2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJ
KHJldmlzaW9uIDI4MzEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9j
a0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRGR0FkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5oIgpAQCAtMzQsNyArMzUsOSBAQAogI2luY2x1ZGUgIkRGR0p1bXBSZXBsYWNl
bWVudC5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZy
YW1lU2V0LmgiCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAiSlNDYXN0LmgiCisj
aW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0
aW9uLmgiCiAjaW5jbHVkZSAiUmVjb3JkZWRTdGF0dXNlcy5oIgogI2luY2x1ZGUgPHd0Zi9CYWcu
aD4KQEAgLTcwLDcgKzczLDcgQEAgc3RydWN0IFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uIHsKICAg
ICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX3RvOwogfTsKICAgICAgICAgCi1jbGFzcyBDb21tb25E
YXRhIHsKK2NsYXNzIENvbW1vbkRhdGEgOiBwdWJsaWMgTWF0aElDSG9sZGVyIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDb21tb25EYXRhKTsKIHB1YmxpYzoKICAgICBDb21tb25EYXRhKCkK
QEAgLTExNiw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgRml4ZWRWZWN0b3I8Q29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50PiBtX3dhdGNocG9pbnRzOwogICAgIEZpeGVkVmVjdG9yPEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzOwog
ICAgIEZpeGVkVmVjdG9yPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4g
bV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29kZU9yaWdpbk1hcDsKICAgICBSZWNv
cmRlZFN0YXR1c2VzIHJlY29yZGVkU3RhdHVzZXM7CiAgICAgVmVjdG9yPEp1bXBSZXBsYWNlbWVu
dD4gbV9qdW1wUmVwbGFjZW1lbnRzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBA
CiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENv
ZGUuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2
aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IFRyYWNrZWRSZWZlcmVuY2VzOwogCitzdHJ1Y3QgU2ltcGxlSnVtcFRhYmxlOworc3RydWN0IFN0
cmluZ0p1bXBUYWJsZTsKKwogbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEpJVENvbXBpbGVyOwpA
QCAtMTAxLDYgKzEwNCw4IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+
IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgZmluYWw7CiAKICAgICB1c2luZyBEaXJlY3RK
SVRDb2RlOjppbml0aWFsaXplQ29kZVJlZkZvckRGRzsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFw
KiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2Rl
T3JpZ2luTWFwLmdldCgpOyB9CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRD
b21waWxlcjsgLy8gQWxsb3cgSklUQ29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCkuCkBAIC0x
MTAsNiArMTE1LDggQEAgcHVibGljOgogICAgIEZpeGVkVmVjdG9yPERGRzo6T1NSRW50cnlEYXRh
PiBtX29zckVudHJ5OwogICAgIEZpeGVkVmVjdG9yPERGRzo6T1NSRXhpdD4gbV9vc3JFeGl0Owog
ICAgIEZpeGVkVmVjdG9yPERGRzo6U3BlY3VsYXRpb25SZWNvdmVyeT4gbV9zcGVjdWxhdGlvblJl
Y292ZXJ5OworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFi
bGVzOworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzOwogICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVhbSB2YXJpYWJsZUV2ZW50U3RyZWFt
OwogICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5pZmllZERGRzsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4MzEwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODUsMTMgKzE4NSwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtC
dWZmZXImIGxpbmtCCiAgICAgCiAgICAgbV9ncmFwaC5yZWdpc3RlckZyb3plblZhbHVlcygpOwog
Ci0gICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkgfHwg
IW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkgewotICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICBpZiAoIW1f
Z3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
ID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyk7Ci0gICAgICAgIGlm
ICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9j
b2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZN
b3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKLSAgICB9CisgICAgQVNTRVJUKG1faml0
Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1f
aml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7CisgICAgaWYgKCFtX2dyYXBo
Lm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIAorICAgICAgICBtX2ppdENvZGUt
Pm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMpOworICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0
eSgpKQorICAgICAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9n
cmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwogCiAgICAgZm9yIChCYWc8U3dpdGNoRGF0YT46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fc3dpdGNoRGF0YS5iZWdpbigpOyAhIWl0ZXI7ICsraXRl
cikgewogICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKippdGVyOwpAQCAtMTk5LDEyICsxOTgs
MTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBj
YXNlIFN3aXRjaENoYXI6CiAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CiAgICAgICAgICAgICBp
ZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KS5pc0VtcHR5KCkp
OworICAgICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tk
YXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShk
YXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUlu
ZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2ppdENv
ZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdOwogICAgICAgICAg
ICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dp
dGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC5ibG9jay0+aW5kZXhdKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXpl
KCkgPT0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpKTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCk7IGotLTsp
CkBAIC0yMTksMTIgKzIxOCwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXIm
IGxpbmtCCiAKICAgICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6IHsKICAgICAgICAgICAgIGlmICgh
ZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxv
Y2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpLmlzRW1wdHko
KSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0eSgpKTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dyYXBoLnVubGlua2VkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgICAgICBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJs
ZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dp
dGNoVGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBsaW5rQnVmZmVy
LmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdo
LmJsb2NrLT5pbmRleF0pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua2VkVGFibGUu
bV9jdGlPZmZzZXRzLnNpemUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUuc2l6ZSgp
ICsgMSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbGlua2VkVGFibGUubV9jdGlP
ZmZzZXRzKQpAQCAtMzMzLDcgKzMzMiw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIu
ZGlkQnVpbGRNYXBwaW5nKCkpCi0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdp
bk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVPcmln
aW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcikpOworICAgICAgICBtX2ppdENvZGUtPmNvbW1vbi5t
X3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oV1RGTW92
ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtCdWZmZXIpOwogfQogCiBzdGF0aWMg
dm9pZCBlbWl0U3RhY2tPdmVyZmxvd0NoZWNrKEpJVENvbXBpbGVyJiBqaXQsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYgc3RhY2tPdmVyZmxvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcs
NiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqCiAgICAgQVNTRVJU
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIEFT
U0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNT
RVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0
Q29kZSgpLT5kZmdDb21tb24oKS0+aXNTdGlsbFZhbGlkKTsKIAogICAgIGlmICghT3B0aW9uczo6
dXNlT1NSRW50cnlUb0RGRygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuY3BwCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzIsOSArNzcyLDYgQEAgdm9pZCBP
U1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIAogICAgIC8vIFRoZSB0YWcgcmVnaXN0
ZXJzIGFyZSBuZWVkZWQgdG8gbWF0ZXJpYWxpemUgcmVjb3ZlcmllcyBiZWxvdy4KICAgICBqaXQu
ZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKIAotICAgIGlmIChleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKQotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7Ci0KICAgICBpZiAoaW5saW5lU3Rh
Y2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQpIHsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIHRt
cFNjcmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7CiAgICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25NYXRlcmlhbGl6ZU9TUkV4aXRTaWRlU3Rh
dGUpPigmdm0sICZleGl0LCB0bXBTY3JhdGNoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9u
IDI4MzEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZH
SklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKSVQuaCIK
QEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhWTSYgdm0sIENDYWxs
SGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAgICBzd2l0Y2ggKGppdC5jb2RlQmxv
Y2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBlOjpERkdKSVQ6Ci0gICAgICAgIGNs
aXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZChq
aXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJnZXRWYWx1ZSk7CisgICAgICAgIGNs
aXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0
YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUVHlwZTo6RlRMSklUOgot
ICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyOjpjbGlwcGVk
VGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHRhcmdldFZhbHVlKTsK
KyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhlY3V0aW9uQ291bnRlcjo6Y2xpcHBl
ZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDIsMTEgKzE0Myw4IEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clQKIHsKICAgICBjYWxsZXJJ
c0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludCgpIHx8IGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKIAot
ICAgIGlmIChjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpIHsKLSAgICAgICAgaWYgKCFj
YWxsZXJJc0xMSW50KQotICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1f
aGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CisgICAgaWYgKGNhbGxCeXRlY29kZUluZGV4LmNoZWNr
cG9pbnQoKSkKICAgICAgICAgcmV0dXJuIExMSW50OjpjaGVja3BvaW50T1NSRXhpdEZyb21Jbmxp
bmVkQ2FsbFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKLSAgICB9CiAKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganVtcFRhcmdldDsKIApAQCAtMTk4LDggKzE5Niw2
IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clQKICN1bmRlZiBMTElO
VF9SRVRVUk5fTE9DQVRJT04KIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyLT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0cnVlOwotCiAgICAgICAgIHN3aXRj
aCAodHJ1ZUNhbGxlckNhbGxLaW5kKSB7CiAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpD
YWxsOgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0OgpAQCAtMzEzLDYg
KzMwOSwxMCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAg
ICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPm1l
dGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVD
b2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFIpKTsKICAgICAgICAg
ICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGNhbGxlZVNhdmVTbG90
KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6OnBi
R1BSKSk7CisgICAgICAgIH0gZWxzZSBpZiAodHJ1ZUNhbGxlcikgeworICAgICAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9j
a0ZvcigqdHJ1ZUNhbGxlcik7CisgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tZXRhZGF0YVRhYmxl
KCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBK
SVQ6OnNfbWV0YWRhdGFHUFIpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmJhc2VsaW5lSklU
Q29uc3RhbnRQb29sKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUsIGJhc2VsaW5l
Q29kZUJsb2NrLCBKSVQ6OnNfY29uc3RhbnRzR1BSKSk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCkBAIC00MDQsNyArNDA0LDggQEAgdm9p
ZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbAogICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUluZGV4Lm9mZnNldCgpKSwgTExJbnQ6
OlJlZ2lzdGVyczo6cGNHUFIpOwogICAgICAgICBqdW1wVGFyZ2V0ID0gZGVzdGluYXRpb24ucmV0
YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGNvZGVCbG9ja0ZvckV4aXQtPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7Cisg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb2RlQmxvY2tGb3JF
eGl0LT5tZXRhZGF0YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRhdGFHUFIpOworICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29kZUJsb2NrRm9yRXhpdC0+YmFzZWxp
bmVKSVRDb25zdGFudFBvb2woKSksIEpJVDo6c19jb25zdGFudHNHUFIpOwogCiAgICAgICAgIEJ5
dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
OwogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZGVzdGluYXRp
b247CkBAIC00MjAsMTIgKzQyMSwxNiBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChWTSYg
dm0sIENDYWxsCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0aW5hdGlvbi5yZXRhZ2dlZDxPU1JF
eGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCi0gICAgaml0LmFkZFB0
cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZv
cihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKKyAgICAgICAgQVNTRVJUKCFSZWdpc3Rl
clNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29udGFpbnMoTExJbnQ6OlJlZ2lzdGVyczo6
cGNHUFIpKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUsIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRj
aEdQUihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikpOworCiAgICAgICAgIC8vIFNpbmNlIHdlJ3Jl
IGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgog
ICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZtLmFkZHJl
c3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOwogICAgIH0KLSAgICAKKworICAgIGppdC5hZGRQdHIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3Io
Y29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCiAgICAg
aml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJ
bmZvOjpyZWdUMik7CiAgICAgaml0LmZhckp1bXAoR1BSSW5mbzo6cmVnVDIsIE9TUkV4aXRQdHJU
YWcpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
Q2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMu
aCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAj
aW5jbHVkZSAiREZHSklUQ29kZS5oIgpAQCAtMjg2OSw3ICsyODcwLDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkZpbmRTdwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBj
b25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5kZmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5pc0RvdWJsZSgpKTsKICAgICBkb3Vi
bGUgYXNEb3VibGUgPSB2YWx1ZS5hc0RvdWJsZSgpOwpAQCAtMjg5MCw3ICsyODkxLDcgQEAgSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogCiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmRmZ1N0
cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICByZXR1cm4gbGlua2VkVGFibGUu
Y3RpRm9yVmFsdWUoKnVubGlua2VkVGFibGUsIHN0ckltcGwpLmV4ZWN1dGFibGVBZGRyZXNzPGNo
YXIqPigpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDI4MzEwMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTczMCw2ICs3MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2Rl
KiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5Ojpp
blBhaXIoY2FsbGVlVGFnR1BSLCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIHNodWZm
bGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3MpOwogICAgICAgICAgICAgc2h1ZmZs
ZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7CisgICAgICAgICAgICBzaHVmZmxl
RGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsK
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsr
aSkgewogICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJn
Q2hpbGQobm9kZSwgaSArIDEpOwpAQCAtODg5LDcgKzg5MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIAogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xv
d0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIEludmFsaWRHUFJSZWcs
IENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0g
aW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxvYWRHUFIsIFsmXSB7
CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewogICAgICAgICAgICAg
ICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxD
YWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MzEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyOCw2ICs4
MjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVHUFIs
IERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1B
bGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBu
dW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IG1f
aml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKICAgICAg
ICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IGkgKyAxKTsKQEAgLTk3OSw3ICs5ODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2FzZXMgPSBjYWxsTGlua0luZm8tPmVt
aXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIsIEludmFsaWRHUFJSZWcsIENhbGxM
aW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgc2xvd0Nhc2VzID0gY2FsbExp
bmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwgY2FsbGVlR1BSLCBbJl0gewogICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKICAgICAgICAgICAgICAgICBj
YWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwogICAgICAgICAg
ICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRh
aWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5ODUsNyArMzk4
NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRQcml2YXRlTmEKICAgICBSZWdp
c3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwogCiAgICAgSklU
UHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlw
ZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsIHVz
ZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQs
IGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgdXNlZFJl
Z2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VHUFIpLCBKU1Zh
bHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2YWx1ZVJlZ3MsIEludmFsaWRHUFJS
ZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9
IHRydWU7CiAKQEAgLTQ5MDUsNyArNDkwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZUFkZChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQu
Z3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAg
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRl
Y29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNl
bGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChieXRlY29k
ZUluZGV4KTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklU
QWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5qaXRDb2Rl
KCktPmNvbW1vbi5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIGF1dG8gcmVwYXRjaGlu
Z0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICBhdXRvIG5vblJlcGF0
Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkOwogICAgIApAQCAtNDk4OSw3ICs0OTg5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5vZAogICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgoKTsKICAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5iaW5hcnlBcml0
aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwotICAgIEpJVFN1YklDKiBz
dWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAg
IEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmppdENvZGUoKS0+Y29tbW9uLmFkZEpJVFN1YklDKGFy
aXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1
ZVN1Yk9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9u
VmFsdWVTdWI7CiAKQEAgLTU1NzEsNyArNTU3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVWYWx1ZU5lZ2F0ZSgKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9q
aXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwog
ICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5i
eXRlY29kZUluZGV4KCk7CiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJh
c2VsaW5lQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJ
VE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuaml0Q29k
ZSgpLT5jb21tb24uYWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hp
bmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemU7CiAgICAgYXV0byBub25S
ZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZTsKICAgICBjb21waWxlTWF0
aElDKG5vZGUsIG5lZ0lDLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlv
bik7CkBAIC01ODE1LDcgKzU4MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFs
dWVNdWwoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBo
KCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVD
b2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE11bElD
KGFyaXRoUHJvZmlsZSk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuaml0Q29kZSgpLT5j
b21tb24uYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5j
dGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5n
RnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bDsKIApAQCAtMTQ3NjcsNyArMTQ3NjcsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93Q2hpCiAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBzY29wZVJl
ZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQo
c2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcsIG1faml0LmNvZGVCbG9jaygpLCBj
YWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFk
b3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRleCk7CiAgICAgbm9SZXN1bHQobm9k
ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAko
cmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgY29tcGlsZShTdGF0
ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKIAogICAgIGlmICh2bS5zaG91bGRCdWlsZGVyUENUb0Nv
ZGVPcmlnaW5NYXBwaW5nKCkpIHsKICAgICAgICAgQjM6OlBDVG9PcmlnaW5NYXAgb3JpZ2luTWFw
ID0gc3RhdGUucHJvYy0+cmVsZWFzZVBDVG9PcmlnaW5NYXAoKTsKLSAgICAgICAgY29kZUJsb2Nr
LT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQQ1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5h
bGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpKTsKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+Y29tbW9u
Lm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQQ1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5h
bGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpOwogICAgIH0KIAogICAgIENvZGVMb2NhdGlvbkxhYmVs
PEpTRW50cnlQdHJUYWc+IGxhYmVsID0gc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVy
LT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHN0YXRlLnByb2MtPmNvZGUoKS5lbnRyeXBvaW50
TGFiZWwoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJl
dmlzaW9uIDI4MzEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHB1YmxpYzoKICAgICBERkc6OkNvbW1v
bkRhdGEqIGRmZ0NvbW1vbigpIG92ZXJyaWRlOwogICAgIHN0YXRpYyBwdHJkaWZmX3QgY29tbW9u
RGF0YU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKSVRDb2RlLCBjb21tb24pOyB9
CiAgICAgdm9pZCBzaHJpbmtUb0ZpdChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImKSBvdmVycmlk
ZTsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRl
IHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CiAgICAgCiAgICAg
REZHOjpDb21tb25EYXRhIGNvbW1vbjsKICAgICBWZWN0b3I8T1NSRXhpdD4gbV9vc3JFeGl0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAyODMxMDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MiwxNCArNTIsNiBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogCiAgICAgZ3JhcGgu
cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsKIAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgewotICAg
ICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNo
SnVtcFRhYmxlcy5pc0VtcHR5KCkpOwotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5lbnN1cmVK
SVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSk7Ci0gICAgfQotI2Vu
ZGlmCi0KICAgICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuIE5vdGUgdGhhdCB3ZSB1c2UgdGhp
cyBlbnRyeXBvaW50IHRvdGFsbHkgZGlmZmVyZW50bHkKICAgICAvLyBkZXBlbmRpbmcgb24gd2hl
dGhlciB3ZSdyZSBkb2luZyBPU1IgZW50cnkgb3Igbm90LgogICAgIENDYWxsSGVscGVycyBqaXQo
Y29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MzEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsNyBAQAog
I2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2lu
Y2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgi
CiAjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAj
aW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCkBAIC0yMzIwLDYgKzIzMjEsMTgg
QEAgcHJpdmF0ZToKICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+
KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24p
OwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2Vu
ZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBKSVRBZGRJQyogYWRkTWF0aElDKERG
Rzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0
dXJuIGNvbW1vbi5hZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6Omlz
X3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3Rh
dGljIEpJVE11bElDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFy
aXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVE11bElDKHByb2ZpbGUp
OyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRv
cj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUTmVnSUMqIGFkZE1hdGhJQyhERkc6OkNv
bW1vbkRhdGEmIGNvbW1vbiwgVW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNv
bW1vbi5hZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdl
bmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8
R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJ
VFN1YklDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJv
ZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisK
ICAgICB2b2lkIGNvbXBpbGVWYWx1ZU11bCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50
aWMpOwpAQCAtMjM5MSw3ICsyNDA0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAg
ICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0g
Qm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJ
VFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0
aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgICAgICBKSVRVbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0
Q29kZS0+Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9n
ZW5lcmF0b3IgPSBHZW5lcmF0b3IoSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwgSlNWYWx1
ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CiAKICAgICAgICAg
ICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKQEAgLTI1MDAsNyArMjUx
Myw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgICAgICAgICAgICAgIEJveDxNYXRoSUNHZW5l
cmF0aW9uU3RhdGU+IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9u
U3RhdGU+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBKSVRCaW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRoSUM8R2VuZXJhdG9yPihhcml0
aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBt
YXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0
aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0
b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigp
KSwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgSlNW
YWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwgcGFyYW1zLmZwU2NyYXRjaCgwKSwKICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zLmZwU2NyYXRjaCgxKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CkBA
IC00MzE3LDcgKzQzMzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgR1BSUmVnIHN0dWJJbmZv
R1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZUTEpJVCkgPyBwYXJhbXMuZ3BTY3Jh
dGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBC
b3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgaml0LmNv
ZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJ
bmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9j
aygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwg
QWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9H
UFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1i
b2wgPSB0cnVlOwpAQCAtMTAyODUsNiArMTAyOTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRBcmdzOyBpIDwgbnVtQWxsb2NhdGVk
QXJnczsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBl
bmQoVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSkpOwogICAgICAgICAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gbnVtUGFzc2VkQXJnczsKKyAgICAg
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1ldGVycyA9IGppdC5jb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1
cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0
LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50aWNOb2RlT3JpZ2luKTsKQEAgLTEw
NDQzLDEzICsxMDQ1NywxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzaHVmZmxl
RGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgpKTsKIAog
ICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBudW1BcmdzOworICAg
ICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRlcnMgPSBqaXQuY29kZUJsb2NrKCkt
Pm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKIAogICAg
ICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygp
LT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgR1BSSW5mbzo6cmVnVDApOwog
Ci0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJ
bmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGgg
PSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAs
IFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxl
RGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgICAg
IH0pOwpAQCAtMTA3OTIsNyArMTA4MDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQ
YXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNl
RGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlu
a0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAg
ICAgICAgICAgICAgICAgfSk7CkBAIC0xMTA3Myw3ICsxMTA4OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAgICAgICAgICAgICBpZiAoaXNUYWls
Q2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1p
dFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52YWxpZEdQUlJlZywgQ2Fs
bExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpy
ZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxs
U2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDI4MzEwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEzLDI4ICs0MTMsMTYgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIo
Vk0mIHZtLCB1bnNpZ25lZAogCiAgICAgUmVnaXN0ZXJTZXQgYWxsRlRMQ2FsbGVlU2F2ZXMgPSBS
ZWdpc3RlclNldDo6ZnRsQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIGNvbnN0IFJlZ2lzdGVy
QXRPZmZzZXRMaXN0KiBiYXNlbGluZUNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNh
bGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogdm1DYWxsZWVT
YXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKLSAgICBS
ZWdpc3RlclNldCB2bUNhbGxlZVNhdmVzVG9Ta2lwID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0
ZXJzKCk7Ci0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgaml0
LmxvYWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihFbnRyeUZyYW1lOjpjYWxsZWVTYXZl
UmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgfQogCiAgICAg
Zm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJl
Zy5uZXh0KCkpIHsKICAgICAgICAgaWYgKCFhbGxGVExDYWxsZWVTYXZlcy5nZXQocmVnKSkgewot
ICAgICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIXZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKSk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCB1bndpbmRJbmRleCA9IGNv
ZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5pbmRleE9mKHJlZyk7CiAgICAgICAgIGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPSBiYXNlbGluZUNh
bGxlZVNhdmVzLT5maW5kKHJlZyk7Ci0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQqIHZtQ2FsbGVl
U2F2ZSA9IG51bGxwdHI7IAotICAgICAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkK
LSAgICAgICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZpbmQocmVnKTsKIAog
ICAgICAgICBpZiAocmVnLmlzR1BSKCkpIHsKICAgICAgICAgICAgIEdQUlJlZyByZWdUb0xvYWQg
PSBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8gR1BSSW5mbzo6cmVnVDAgOiByZWcuZ3ByKCk7Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWdUb0xvYWQgIT0gR1BSSW5mbzo6cmVnVDEpOwog
CiAgICAgICAgICAgICBpZiAodW53aW5kSW5kZXggPT0gVUlOVF9NQVgpIHsKICAgICAgICAgICAg
ICAgICAvLyBUaGUgRlRMIGNvbXBpbGF0aW9uIGRpZG4ndCBwcmVzZXJ2ZSB0aGlzIHJlZ2lzdGVy
LiBUaGlzIG1lYW5zIHRoYXQgaXQgYWxzbwpAQCAtNDUyLDggKzQ0MCw2IEBAIHN0YXRpYyB2b2lk
IGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAogICAgICAgICAgICAgaWYgKGJhc2VsaW5l
UmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQocmVnVG9Mb2FkLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0
ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQtPm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAo
dm1DYWxsZWVTYXZlICYmICF2bUNhbGxlZVNhdmVzVG9Ta2lwLmdldCh2bUNhbGxlZVNhdmUtPnJl
ZygpKSkKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBGUFJSZWcgZnBSZWdUb0xvYWQgPSBiYXNlbGlu
ZVJlZ2lzdGVyT2Zmc2V0ID8gRlBSSW5mbzo6ZnBSZWdUMCA6IHJlZy5mcHIoKTsKIApAQCAtNDY0
LDE5ICs0NTAsOSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkCiAK
ICAgICAgICAgICAgIGlmIChiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQogICAgICAgICAgICAgICAg
IGppdC5zdG9yZURvdWJsZShmcFJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFj
cm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0
LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKHZtQ2FsbGVlU2F2ZSAmJiAhdm1DYWxsZWVT
YXZlc1RvU2tpcC5nZXQodm1DYWxsZWVTYXZlLT5yZWcoKSkpCi0gICAgICAgICAgICAgICAgaml0
LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKLSAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldCogdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+ZmluZChHUFJJbmZvOjpudW1iZXJU
YWdSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om51bWJlclRhZ1JlZ2lz
dGVyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZl
LT5vZmZzZXQoKSkpOwotCi0gICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZp
bmQoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQ
UkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7Ci0gICAgfQotCiAgICAgc2l6ZV90
IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxv
Y2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogCiAgICAgaWYgKGV4aXQu
bV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNp
b24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5y
Ygkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDI4IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAg
ZGVmIHN0cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVtcHR5PwogCi0gICAgICAgIGRlZiBj
b252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAgICBkZWYgZ2VuZXJhdGVPZmZzZXRP
ZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCisgICAgICAgICAgICBmaWVsZE5hbWVzLm1h
cCBkbyB8ZmllbGROYW1lfAorICAgICAgICAgICAgICAgICIje3ByZWZpeH1zdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7ZmllbGROYW1lWzEuLi0xXX0oKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fI3tmaWVsZE5hbWV9KTsgfSIKKyAg
ICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisgICAgICAgIGVuZAorCisgICAgICAgIGRlZiBjb252
ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBmaWVsZE5hbWVzKQogICAgICAgICAgICAgZmllbGRz
Lm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBI
YXNoCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVs
ZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgorICAgICAgICAgICAgICAg
ICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0RmllbGRzKHByZWZpeCArICcgICAgJywg
dHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZpeH19OyIKICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUudG9fc30gbV8je2ZpZWxkLnRvX3N9
OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gZmllbGQudG9fcworICAgICAgICAg
ICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2goZmllbGROYW1lKQorICAgICAgICAgICAgICAgICAg
ICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZE5hbWV9OyIKICAgICAgICAgICAgICAg
ICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAgICAgICAgIGVuZAogCi0gICAgICAg
IGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwgQGZpZWxkcykKKyAgICAgICAgZmll
bGROYW1lcyA9IFtdCisgICAgICAgIHByZWZpeCA9ICIgICAgICAgICIKKyAgICAgICAgZmllbGRz
ID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBmaWVsZHMsIGZpZWxkTmFtZXMpCisgICAgICAgIGZp
ZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5lcmF0ZU9mZnNldE9mRnVuY3Rpb25zKHByZWZpeCwg
ZmllbGROYW1lcykKIAogICAgICAgICBpbml0cyA9IG5pbAogICAgICAgICBpZiBAaW5pdGlhbGl6
ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODMxMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2Nyw2ICszNjcsMjggQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmxvYWRQcm9wZXJ0
eShHUFJSZQogICAgICAgICByZXN1bHQpOwogfQogCit2b2lkIEFzc2VtYmx5SGVscGVyczo6c3Rv
cmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNl
dCwgR1BSUmVnIHNjcmF0Y2gpCit7CisgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NU
aGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgIAor
ICAgIGxvYWRQdHIoQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2gpOworICAgIG5lZzMyKG9mZnNldCk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zm
c2V0LCBvZmZzZXQpOworICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CisgICAgCisgICAgaXNJbmxp
bmUubGluayh0aGlzKTsKKyAgICBhZGRQdHIoCisgICAgICAgIFRydXN0ZWRJbW0zMigKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihKU09iamVjdCkpIC0KKyAgICAgICAg
ICAgIChzdGF0aWNfY2FzdDxpbnQzMl90PihmaXJzdE91dE9mTGluZU9mZnNldCkgLSAyKSAqIHN0
YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSwKKyAgICAgICAgb2Jq
ZWN0LCBzY3JhdGNoKTsKKyAgICAKKyAgICByZWFkeS5saW5rKHRoaXMpOworICAgIAorICAgIHN0
b3JlVmFsdWUodmFsdWUsCisgICAgICAgIEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkpOworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdExvYWRTdHJ1Y3R1cmUoVk0mIHZt
LCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gp
CiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY5OCw4ICs3MjAsMTMgQEAgdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbExp
bmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6
cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpy
ZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCh2bSwg
aW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0VmlydHVhbENhbGxXaXRob3V0
TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJbmZvKiBpbmZvKQoreworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIENhbGwgY2FsbCA9
IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2bV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI4MzEwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNCw4ICsyMzQsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAg
Ly8gTm90ZSB0aGF0IHRoaXMgY2xvYmJlcnMgb2Zmc2V0LgorICAgIC8vIE5vdGUgdGhhdCB0aGVz
ZSBjbG9iYmVyIG9mZnNldC4KICAgICB2b2lkIGxvYWRQcm9wZXJ0eShHUFJSZWcgb2JqZWN0LCBH
UFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpOworICAgIHZvaWQgc3RvcmVQcm9wZXJ0
eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwgR1BSUmVnIG9mZnNldCwgR1BSUmVn
IHNjcmF0Y2gpOwogCiAgICAgdm9pZCBtb3ZlVmFsdWVSZWdzKEpTVmFsdWVSZWdzIHNyY1JlZ3Ms
IEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAgIHsKQEAgLTM3OSwxNSArMzgwLDI2IEBAIHB1Ymxp
YzoKICNlbmRpZgogICAgIH0KIAorICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUsIEdQUlJlZyBzY3Jh
dGNoKQorICAgIHsKKyNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKKyAg
ICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwgc2NyYXRjaCk7CisgICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChzY3JhdGNoKTsKKyNlbHNl
CisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKHNjcmF0Y2gpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZyYW1lKiYgdG9wRW50cnlGcmFtZSkK
ICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAgICAgICAg
IGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH07CiAgICAgICAgIEdQUlJlZyB0ZW1wMSA9IHVzZWRS
ZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwg
dGVtcDEpOwotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlckltcGwodGVtcDEpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7CiAjZWxzZQogICAgICAgICBVTlVT
RURfUEFSQU0odG9wRW50cnlGcmFtZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZy
YW1lKTsKICNlbmRpZgogICAgIH0KICAgICAKQEAgLTE3MjAsNiArMTczMiw3IEBAIHB1YmxpYzoK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENhbGwoVk0mLCBKU0dsb2JhbE9iamVj
dCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmlu
Z0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOwogICAgIAogICAgIHZvaWQgbWFrZVNw
YWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNsYWltU3BhY2VPblN0YWNrRm9yQ0Nh
bGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29k
ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGlu
ZUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1
ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgorI2luY2x1ZGUgIlN0cnVj
dHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKSVRBZGRJQyogTWF0aElDSG9s
ZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkgeyByZXR1
cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJVE11bElDKiBNYXRoSUNIb2xkZXI6
OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBt
X211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUU3ViSUMqIE1hdGhJQ0hvbGRlcjo6YWRk
SklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpIHsgcmV0dXJuIG1fc3Vi
SUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVROZWdJQyogTWF0aElDSG9sZGVyOjphZGRKSVRO
ZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKSB7IHJldHVybiBtX25lZ0lDcy5h
ZGQoYXJpdGhQcm9maWxlKTsgfQorCit2b2lkIE1hdGhJQ0hvbGRlcjo6YWRvcHRNYXRoSUNzKE1h
dGhJQ0hvbGRlciYgb3RoZXIpCit7CisgICAgbV9hZGRJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fYWRk
SUNzKTsKKyAgICBtX211bElDcyA9IFdURk1vdmUob3RoZXIubV9tdWxJQ3MpOworICAgIG1fbmVn
SUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAgbV9zdWJJQ3MgPSBXVEZNb3ZlKG90
aGVyLm1fc3ViSUNzKTsKK30KKworQmFzZWxpbmVKSVRDb2RlOjpCYXNlbGluZUpJVENvZGUoQ29k
ZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0
eUNoZWNrKQorICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3ZlKGNvZGUpLCB3aXRoQXJpdHlDaGVj
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgLCBNYXRoSUNIb2xkZXIoKQoreyB9CisKK0Jh
c2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiSklUQ29k
ZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKKworI2lmIEVOQUJMRShKSVQpCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBCaW5hcnlBcml0aFByb2ZpbGU7CitjbGFzcyBVbmFyeUFyaXRo
UHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFNpbXBs
ZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7CisKK2NsYXNzIE1hdGhJQ0hvbGRl
ciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3MoTWF0aElDSG9sZGVyJiBvdGhlcik7
CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOworICAgIEpJ
VE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKKyAgICBKSVRTdWJJQyog
YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7CisgICAgSklUTmVnSUMqIGFkZEpJVE5l
Z0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CisKK3ByaXZhdGU6CisgICAgQmFnPEpJVEFkZElDPiBt
X2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAgIEJhZzxKSVROZWdJQz4g
bV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKK307CisKK2NsYXNzIEpJVENv
bnN0YW50UG9vbCB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29uc3RhbnQgPSB1bnNpZ25lZDsKKwor
ICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBHbG9iYWxPYmplY3QsCisg
ICAgICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8sCisgICAgICAg
IEZ1bmN0aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rpb25FeHByLAorICAgIH07CisKKyAgICBzdHJ1
Y3QgVmFsdWUgeworICAgICAgICBUeXBlIHR5cGU7CisgICAgICAgIFBhY2tlZFB0cjx2b2lkPiBw
YXlsb2FkOworICAgIH07CisKKyAgICBKSVRDb25zdGFudFBvb2woKSA9IGRlZmF1bHQ7CisgICAg
SklUQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbCYmKSA9IGRlZmF1bHQ7CisgICAgSklUQ29u
c3RhbnRQb29sJiBvcGVyYXRvcj0oSklUQ29uc3RhbnRQb29sJiYpID0gZGVmYXVsdDsKKworICAg
IENvbnN0YW50IGFkZChUeXBlIHR5cGUsIHZvaWQqIHBheWxvYWQgPSBudWxscHRyKQorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudHMuc2l6ZSgpOworICAgICAgICBt
X2NvbnN0YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBlLCBwYXlsb2FkIH0pOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9j
b25zdGFudHMuc2l6ZSgpOyB9CisgICAgVmFsdWUgYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRzW2ldOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX2NvbnN0
YW50czsKK307CisKKworY2xhc3MgQmFzZWxpbmVKSVRDb2RlIDogcHVibGljIERpcmVjdEpJVENv
ZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgeworcHVibGljOgorICAgIEJhc2VsaW5lSklUQ29kZShD
b2RlUmVmPEpTRW50cnlQdHJUYWc+LCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNo
ZWNrKTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJpZGU7CisgICAgUENUb0NvZGVPcmln
aW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9wY1RvQ29kZU9y
aWdpbk1hcC5nZXQoKTsgfQorCisgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlu
a2VkQ2FsbHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9ldmFsQ2FsbExpbmtJbmZvczsKKyAg
ICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91bmxpbmtlZFN0dWJJbmZvczsKKyAg
ICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBG
aXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAg
ICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRDb25zdGFudFBvb2wgbV9jb25zdGFu
dFBvb2w7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2Rl
T3JpZ2luTWFwOworICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5jcHAJKHJldmlzaW9uIDI4MzEwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFzZWxpbmVKSVRQbGFuOjpjb2RlU2l6
ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2VsaW5lSklUUGxhbjo6ZmluYWxpemUo
KQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG1faml0LmZpbmFsaXplT25NYWlu
VGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gbV9qaXQuZmluYWxpemVP
bk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2Fz
ZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChtX2NvZGVC
bG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRpb24gZmFpbGVkIikpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjgz
MTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93
Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBP
QkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBzY29wZSkpKTsKIH0KIAotdm9p
ZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQ
YWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCi17Ci0gICAgc3RvcmVQdHIoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZG
U0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkpKTsKLSAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFpbE1hcmtlcigpKSwgQWRkcmVzcyhz
aGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxl
ZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgdGhpc1ZhbHVlKSkpOwotICAgIHN0
b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihj
b2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0No
aWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNh
bGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRP
RihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5kZXgpKSk7Ci19Ci0KIHZvaWQgQ0Nh
bGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KFZNJiB2bSwgR1BSUmVnIHNoYWRv
d1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAg
ICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAg
LTcyLDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEK
ICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQUikpOwogfQog
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgordm9pZCBDQ2FsbEhlbHBlcnM6
OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1Zh
bHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIHN0b3JlUHRyKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNo
YWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIoKSksIEFkZHJlc3Moc2hhZG93UGFj
a2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsZWUpKSk7Cisg
ICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZT
RVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1ZSkpKTsKKyAgICBzdG9yZVB0cihz
Y29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2Vu
OjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNvZGVCbG9jaywgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNvZGVCbG9j
aykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxsSGVscGVyczo6bG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3Ms
IEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxvY2ssIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwoc2hhZG93
UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywgY2FsbFNpdGVJbmRleCk7Cit9CisK
K3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hh
ZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBHUFJSZWcgY29k
ZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgbG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhpc1JlZ3MsIHNjb3BlLCBjb2RlQmxv
Y2ssIGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxsSGVscGVyczo6ZW1pdEpJVENvZGVP
dmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFsUHRyVGFnPiB3aGVyZSwgU2NvcGVk
TGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2RlLCBjb25zdCBjaGFyKiBkZXNjcmlw
dGlvbikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsNyArODQw
LDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRpb25zIGNsb2JiZXIgYWxsIHZvbGF0
aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVyZSBpcyByb29tIG9uIHRoZSB0b3Ag
b2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFyZ3VtZW50cy4KICAgICB2b2lkIGxv
Z1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcg
c2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBsb2dTaGFkb3dDaGlja2VuVGFpbFBh
Y2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNj
b3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BS
UmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KEdQ
UlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcgc2NvcGUsIFRy
dXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpOworICAg
IHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BSUmVnIGNvZGVCbG9jaywgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExlYXZlcyBiZWhpbmQgYSBwb2ludGVy
IHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGluIHNoYWRvd1BhY2tldC4KICAgICB2
b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBHUFJSZWcgc2hhZG93UGFja2V0LCBH
UFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3JhdGNoMik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwCShy
ZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBzZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCit2b2lkIENhbGxGcmFt
ZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sKICAgICBSZWdpc3RlclNldCBjYWxs
ZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIH07
Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucyA9
IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CiAgICAgICAgIFJl
Z2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0
YS5oCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDExICs0MywxMyBAQCBwdWJs
aWM6CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CiAgICAgdW5zaWduZWQgbnVtTG9j
YWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1QYXNzZWRBcmdzIHsgVUlOVF9NQVgg
fTsKKyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsgLy8gT24gb3VyIG1h
Y2hpbmUgZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rlck1hcDxWYWx1ZVJl
Y292ZXJ5PiByZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51bWJlclRhZ1JlZ2lzdGVyIHsgSW52YWxp
ZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2Nr
Kik7CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOwogfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShy
ZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMgKzM4LDEzIEBAIENhbGxGcmFtZVNo
dWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EKICAgICA6IG1faml0KGppdCkKICAgICAsIG1f
b2xkRnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3Rl
cnMsIG51bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1lKGRhdGEuYXJncy5zaXplKCkgKyBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycywgbnVsbHB0cikKLSAgICAsIG1fYWxpZ25lZE9sZEZy
YW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwotICAgICAgICArIHJvdW5k
QXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSkpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnMgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWduRnJhbWUoZGF0YS5udW1QYXJhbWV0
ZXJzKSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJ
blJlZ2lzdGVycwogICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShkYXRh
LmFyZ3Muc2l6ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0YShtX2FsaWduZWROZXdGcmFtZVNpemUg
LSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCiAgICAgLCBtX2xvY2tlZFJlZ2lzdGVycyhSZWdpc3Rl
clNldDo6YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX251bVBhc3NlZEFyZ3MoZGF0YS5udW1QYXNz
ZWRBcmdzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEubnVtUGFyYW1ldGVycykKIHsKICAg
ICAvLyBXZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgogICAgIGZvciAo
dW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKQEAgLTQyMSw3
ICs0MjEsNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhCiAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgbV9uZXdGcmFt
ZUJhc2UpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFyZ3VtZW50Q291bnRPSyA9CiAgICAg
ICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIG1fbmV3RnJh
bWVCYXNlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2ppdC5j
b2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVycykpOwogICAgIG1faml0LmFkZDMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyksIG1fbmV3RnJhbWVCYXNlKTsKICAgICBt
X2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudFJl
Z2lzdGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1faml0Lm11bDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1fbmV3RnJhbWVCYXNlLCBtX25l
d0ZyYW1lQmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlci5oCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CiAgICAgICAgIGRh
dGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CiAgICAgICAgIGRhdGEubnVtUGFzc2VkQXJncyA9
IG1fbnVtUGFzc2VkQXJnczsKKyAgICAgICAgZGF0YS5udW1QYXJhbWV0ZXJzID0gbV9udW1QYXJh
bWV0ZXJzOwogICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBD
YWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7CiAgICAgICAgIGRhdGEuYXJncy5y
ZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291
bnQoKTsgKytpKQpAQCAtNzk4LDYgKzc5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwZXJmb3Jt
U2FmZVdyaXRlcygpOwogICAgIAogICAgIHVuc2lnbmVkIG1fbnVtUGFzc2VkQXJncyB7IFVJTlRf
TUFYIH07CisgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzIHsgVUlOVF9NQVggfTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2
aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Qnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQotICAgIDogSlNJbnRlcmZh
Y2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVyZmFjZUpJVCgmdm0sIG51bGxwdHIp
CiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVyKQogICAgICwgbV9sYWJlbHMoY29k
ZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgOiAwKQogICAgICwgbV9w
Y1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2ICs3Nyw5IEBAIEpJVDo6SklUKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAsIG1fc2hvdWxkRW1pdFByb2ZpbGlu
ZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNvZGVJbmRleChsb29wT1NSRW50cnlC
eXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9iYWxPYmplY3QpOworICAgIG1fcHJv
ZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91bmxpbmtlZENvZGVCbG9jayA9IGNv
ZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAogSklUOjp+SklUKCkKQEAgLTkwLDgg
KzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwotICAgIAotICAgIHNraXBPcHRp
bWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhl
Y3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBza2lwT3B0aW1p
emUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1
dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21G
cmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5
RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMjAgQEAgdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShX
YXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRl
QWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShHUFJSZWcgcG9pbnRlclRvU2V0
KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1Nl
dCkKIHsKKyAgICBhdXRvIG9rID0gYnJhbmNoVGVzdFB0cihaZXJvLCBwb2ludGVyVG9TZXQpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocG9pbnRlclRvU2V0LCBX
YXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpKTsKKyAgICBvay5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5
Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCit2b2lkIEpJVDo6ZW1pdFZhclJlYWRPbmx5
Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKQogewotICAg
IGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFyUmVhZE9u
bHlXYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBl
ID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIs
IE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJSZWFkT25seVdhdGNocG9pbnQp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFkZHJl
c3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfQogfQogCiB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQ
b2ludGVyT2Zmc2V0KCkKQEAgLTEyOSwxMiArMTM3LDE4IEBAIHZvaWQgSklUOjphc3NlcnRTdGFj
a1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VOQUJMRUQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Qw
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlu
a2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVn
VDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9rLmxpbmsodGhpcyk7CiB9CiAKK3Zv
aWQgSklUOjpyZXNldFNQKCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7Cit9CisKICNkZWZpbmUgTkVYVF9PUENPREUobmFtZSkgXAogICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpICsg
Y3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyBcCiAgICAgYnJlYWs7CkBAIC0xODEsNjEgKzE5
NSw0NCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjCiAgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1l
SW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlc3VsdCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JS
YXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBicmFuY2hUZXN0
UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgcmVz
dWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7CisgICAgaWYgKG1fdW5saW5rZWRD
b2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3Vs
dCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVCbG9ja0ZvckNvbnN0cnVjdCgpKSwg
cmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkpLCByZXN1bHQpOworCisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZTo6b2Zm
c2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICB9KTsKKyNlbmRpZgorfQorCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBk
YXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgZGF0YUxv
ZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2NrLCAiXG4iKTsKICAgICAKICAgICBq
aXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCk7
CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0aW9ucyA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAKICAgICBtX2NhbGxM
aW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1fY29kZUJsb2NrLT52bSgpOwogICAg
IEJ5dGVjb2RlSW5kZXggc3RhcnRCeXRlY29kZUluZGV4KDApOwotICAgIGlmIChtX2xvb3BPU1JF
bnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1fY29kZUJsb2NrLT5pbmhlcml0czxQcm9ncmFtQ29kZUJs
b2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmluaGVyaXRzPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+
KHZtKSkpIHsKLSAgICAgICAgLy8gV2UgY2FuIG9ubHkgZG8gdGhpcyBvcHRpbWl6YXRpb24gYmVj
YXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2RlQmxvY2sncyBleGFjdGx5IG9uY2UuCi0gICAgICAg
IC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxkIGJlIGludmFsaWQgb3RoZXJ3aXNlLiBXaGVuIHRo
ZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRzIHRvCi0gICAgICAgIC8vIGRvIE9TUiBlbnRyeSBp
bnRvIHRoZSBiYXNlbGluZSBKSVQgaW4gYSBsb29wLCBpdCB3aWxsIHBhc3MgaW4gdGhlIGJ5dGVj
b2RlIG9mZnNldCBpdAotICAgICAgICAvLyB3YXMgZXhlY3V0aW5nIGF0IHdoZW4gaXQga2lja2Vk
IG9mZiBvdXIgY29tcGlsYXRpb24uIFdlIG9ubHkgbmVlZCB0byBjb21waWxlIGNvZGUgZm9yCi0g
ICAgICAgIC8vIGFueXRoaW5nIHJlYWNoYWJsZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0Lgot
Ci0gICAgICAgIC8vIFdlIG9ubHkgYm90aGVyIGJ1aWxkaW5nIHRoZSBieXRlY29kZSBncmFwaCBp
ZiBpdCBjb3VsZCBzYXZlIHRpbWUgYW5kIGV4ZWN1dGFibGUKLSAgICAgICAgLy8gbWVtb3J5LiBX
ZSBwaWNrIGFuIGFyYml0cmFyeSBvZmZzZXQgd2hlcmUgd2UgZGVlbSB0aGlzIGlzIHByb2ZpdGFi
bGUuCi0gICAgICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPj0g
MjAwKSB7Ci0gICAgICAgICAgICAvLyBBcyBhIHNpbXBsaWZpY2F0aW9uLCB3ZSBkb24ndCBmaW5k
IGFsbCBieXRlY29kZSByYW5nZXMgdGhhdCBhcmUgdW5yZWFjaGFibGUuCi0gICAgICAgICAgICAv
LyBJbnN0ZWFkLCB3ZSBqdXN0IGZpbmQgdGhlIG1pbmltdW0gYnl0ZWNvZGUgb2Zmc2V0IHRoYXQg
aXMgcmVhY2hhYmxlLCBhbmQKLSAgICAgICAgICAgIC8vIGNvbXBpbGUgY29kZSBmcm9tIHRoYXQg
Ynl0ZWNvZGUgb2Zmc2V0IG9ud2FyZHMuCi0KLSAgICAgICAgICAgIEJ5dGVjb2RlR3JhcGggZ3Jh
cGgobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSk7Ci0gICAgICAgICAg
ICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRl
Y29kZU9mZnNldChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2spOwotCi0gICAgICAgICAgICBHcmFwaE5vZGVXb3Jr
bGlzdDxCeXRlY29kZUJhc2ljQmxvY2sqPiB3b3JrbGlzdDsKLSAgICAgICAgICAgIHN0YXJ0Qnl0
ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsKLSAgICAgICAgICAgIHdvcmtsaXN0LnB1c2go
YmxvY2spOwotCi0gICAgICAgICAgICB3aGlsZSAoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9
IHdvcmtsaXN0LnBvcCgpKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRCeXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleChzdGQ6Om1pbihzdGFydEJ5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGJsb2Nr
LT5sZWFkZXJPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vz
c29ySW5kZXggOiBibG9jay0+c3VjY2Vzc29ycygpKQotICAgICAgICAgICAgICAgICAgICB3b3Jr
bGlzdC5wdXNoKCZncmFwaFtzdWNjZXNzb3JJbmRleF0pOwotCi0gICAgICAgICAgICAgICAgLy8g
QWxzbyBhZGQgY2F0Y2ggYmxvY2tzIGZvciBieXRlY29kZXMgdGhhdCB0aHJvdy4KLSAgICAgICAg
ICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgewot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2st
PmxlYWRlck9mZnNldCgpOyBieXRlY29kZU9mZnNldCA8IGJsb2NrLT5sZWFkZXJPZmZzZXQoKSAr
IGJsb2NrLT50b3RhbExlbmd0aCgpOykgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBp
bnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChieXRlY29kZU9mZnNldCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYXV0byogaGFuZGxlciA9IG1fY29kZUJsb2NrLT5oYW5kbGVyRm9y
Qnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChncmFwaC5maW5kQmFzaWNCbG9ja1dpdGhM
ZWFkZXJPZmZzZXQoaGFuZGxlci0+dGFyZ2V0KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGJ5dGVjb2RlT2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9IDA7CiAgICAgZm9yIChtX2J5
dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkg
PCBpbnN0cnVjdGlvbkNvdW50OyApIHsKQEAgLTI3OCwxMiArMjc1LDE1IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAo
UHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOwogICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwgIl0gIiwgb3Bjb2RlTmFtZXNbb3Bj
b2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChvcGNvZGVJRCAhPSBv
cF9jYXRjaCkKKyAgICAgICAgICAgIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOworCiAgICAg
ICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzcykKICAg
ICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQpAQCAtNTI4LDcgKzUyOCw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAgICAgQnl0ZWNvZGVJbmRleCBmaXJz
dFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobV9ieXRlY29k
ZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVJ
bmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJVCBlbWl0dGluZyBzbG93IGNvZGUg
Zm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQgIiwgKGxvbmcpZGVidWdPZmZzZXQo
KSk7CkBAIC01NDYsOCArNTQ2LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2Vz
KCkKIAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1
dGlvbigpKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1f
Y29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBj
dHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGN0eC5mcDxDYWxs
RnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkpJVCBb
IiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNm
ciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQpAQCAtNjc1LDU1ICs2NzUsNTUgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCit2b2lkIEpJVDo6ZW1pdE1hdGVyaWFsaXpl
TWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKQoreworICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0
YUdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklU
RGF0YSgpKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpK
SVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworfQor
Cit2b2lkIEpJVDo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpCit7CisgICAgQmFzZTo6ZW1pdFJl
c3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRo
b3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgREZHOjpD
YXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7Cisg
ICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5jYXBh
YmlsaXR5TGV2ZWwoKTsKICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBERkc6OkNhbm5v
dENvbXBpbGU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9j
YW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAgICAgICBtX3Nob3VsZEVtaXRQcm9m
aWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGU6
CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6CiAgICAgICAgIG1fY2FuQmVPcHRp
bWl6ZWQgPSB0cnVlOwotICAgICAgICBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkID0gdHJ1ZTsK
ICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQotICAgIAotICAgIHN3aXRjaCAobV9jb2RlQmxvY2stPmNvZGVUeXBl
KCkpIHsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgY2FzZSBNb2R1bGVDb2RlOgotICAgIGNh
c2UgRXZhbENvZGU6Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZ1bmN0aW9uQ29kZToKLSAgICAg
ICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRl
dGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgotICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0
aGF0IG9ic2VydmF0aW9uLgotICAgICAgICBtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlu
bGluZWQgJj0gY2FuSW5saW5lKGxldmVsKSAmJiBERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb24obV9j
b2RlQmxvY2spOwotICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICBpZiAobV9jb2RlQmxvY2st
Pm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkgfHwgbV9jb2RlQmxvY2stPm51bWJl
ck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpIHsKLSAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgaWYgKG1fY29k
ZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAg
bV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3aXRjaEp1bXBUYWJsZXMgPSBG
aXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlcygpKTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVu
bGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2st
PmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZl
Y3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+bnVtYmVy
T2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1i
ZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKSB7CisgICAgICAgIGlmIChtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKQorICAg
ICAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRWZWN0b3I8U2ltcGxlSnVtcFRhYmxl
PihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygp
KTsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBtX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fdW5saW5rZWRDb2RlQmxvY2stPm51
bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAgIH0KIAotICAgIGlm
IChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSB8fCAobV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxlQmFzZWxpbmVGb3JQcm9maWxlcigp
KSkpCi0gICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+
KG1fY29kZUJsb2NrKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5
KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBPcHRpb25zOjpkaXNhc3NlbWJs
ZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBidWlsZCBhIGRp
c2Fzc2VtYmxlciBvZmYgb2YgVW5saW5rZWRDb2RlQmxvY2suCisgICAgICAgIG1fZGlzYXNzZW1i
bGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fcHJvZmlsZWRDb2RlQmxvY2spOwor
ICAgIH0KICAgICBpZiAoVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKSkgewor
ICAgICAgICAvLyBGSVhNRTogYnVpbGQgcHJvZmlsZXIgZGlzYXNzZW1ibGVyIG9mZiBVbmxpbmtl
ZENvZGVCbG9jay4KICAgICAgICAgbV9jb21waWxhdGlvbiA9IGFkb3B0UmVmKAogICAgICAgICAg
ICAgbmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbigKLSAgICAgICAgICAgICAgICBtX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihtX2NvZGVCbG9jayksCisgICAg
ICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNG
b3IobV9wcm9maWxlZENvZGVCbG9jayksCiAgICAgICAgICAgICAgICAgUHJvZmlsZXI6OkJhc2Vs
aW5lKSk7Ci0gICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFByb2ZpbGVkQnl0ZWNvZGVzKCptX3Zt
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9jb21waWxh
dGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciwg
bV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDAp
KSk7CkBAIC03NDMsMTEgKzc0MywxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0
RmluYWxpemluCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsK
LSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayk7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0g
RnVuY3Rpb25Db2RlKQorICAgICAgICBlbWl0UHV0Q29kZUJsb2NrVG9GcmFtZUluUHJvbG9ndWUo
KTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAKLSAgICBpbnQgZnJhbWVUb3BPZmZz
ZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVuc2lnbmVkIG1heEZyYW1l
U2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGZyYW1lVG9w
T2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKICAgICBKdW1wTGlzdCBzdGFja092
ZXJmbG93OwpAQCAtNzU4LDE2ICs3NTksMjAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0
aG91dEZpbmFsaXppbgogICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0gICAgZW1pdFNhdmVDYWxsZWVTYXZl
cygpOworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0Ojps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICBlbWl0TWF0ZXJpYWxpemVU
YWdDaGVja1JlZ2lzdGVycygpOworICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3Rh
bnRQb29sUmVnaXN0ZXJzKCk7CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0g
RnVuY3Rpb25Db2RlKSB7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkg
PT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKLSAg
ICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KTsgKythcmd1bWVudCkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpICYmICgh
bV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpIHx8IG1fdW5saW5rZWRDb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSA+IDEpKSB7CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QyKTsKKyAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFs
dWVQcm9maWxlcygpICsgRml4ZWRWZWN0b3I8VmFsdWVQcm9maWxlPjo6b2Zmc2V0T2ZTdG9yYWdl
KCkpLCByZWdUMik7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBh
cmd1bWVudCA8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVu
dCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3
ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwogICAgICAgICAgICAg
ICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50
IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJs
b2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQorICAgICAgICAgICAgICAgIGlmICht
X3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2Fs
bEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNzc4LDEy
ICs3ODMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAg
ICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSk7CiAgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVn
aXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwg
cmVzdWx0UmVncy50YWdHUFIoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKG1fY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmd1bWVu
dCksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUocmVzdWx0UmVncywg
QWRkcmVzcyhyZWdUMiwgYXJndW1lbnQgKiBzaXplb2YoVmFsdWVQcm9maWxlKSArIFZhbHVlUHJv
ZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fY29kZUJs
b2NrLT5qaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9w
cm9maWxlZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAKICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1h
cmtlcikpCiAgICAgICAgIG1fdm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUo
KnNpemVNYXJrZXIpLCAqdGhpcyk7CkBAIC04MDAsMjQgKzgwNSwyNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNv
ZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAg
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjYWxsT3Bl
cmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFj
a092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2NrKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0
aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092
ZXJmbG93RXJyb3IsIHJlZ1QwKTsKIAogICAgIC8vIElmIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVy
cyBpcyAxLCB3ZSBuZXZlciByZXF1aXJlIGFyaXR5IGZpeHVwLgotICAgIGJvb2wgcmVxdWlyZXNB
cml0eUZpeHVwID0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAhPSAxOwotICAgIGlmICht
X2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZp
eHVwKSB7CisgICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkgIT0gMTsKKyAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+Y29k
ZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CiAgICAgICAg
IG1fYXJpdHlDaGVjayA9IGxhYmVsKCk7Ci0gICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCks
ICZtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQpOworCiAgICAgICAgIGVtaXRG
dW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2Nv
ZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKKyAgICAgICAgZW1pdFB1dENvZGVC
bG9ja1RvRnJhbWVJblByb2xvZ3VlKHJlZ1QwKTsKKyAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0z
MigwKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5s
aW5lZCgpKSk7CiAKICAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMSk7Ci0gICAgICAgIGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJz
KSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOworICAgICAgICBicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwogCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRl
eCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8
aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNl
cHRpb24obV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IG9wZXJhdGlvbkNvbnN0cnVjdEFy
aXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV91bmxpbmtlZENvZGVCbG9jay0+aXND
b25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNh
bGxBcml0eUNoZWNrLCBhcmd1bWVudEdQUjApOwogICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBi
cmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLmxpbmtUbyhiZWdpbkxhYmVsLCB0aGlz
KTsKQEAgLTg0MCw3ICs4NDgsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0Rmlu
YWxpemluCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CiAg
ICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCi0gICAgbV9saW5rQnVm
ZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5ldyBMaW5rQnVmZmVyKCp0aGlzLCBt
X2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOwor
ICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPihuZXcgTGlua0J1
ZmZlcigqdGhpcywgbV91bmxpbmtlZENvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFz
ZWxpbmVKSVQsIGVmZm9ydCkpOwogICAgIGxpbmsoKTsKIH0KIApAQCAtODU5LDggKzg2Nyw4IEBA
IHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgc3dpdGNoIChyZWNvcmQudHlwZSkgewogICAgICAg
ICBjYXNlIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlOgogICAgICAgICBjYXNlIFN3aXRjaFJlY29y
ZDo6Q2hhcmFjdGVyOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJs
ZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29u
c3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAg
IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJ
bmRleF07CiAgICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJl
Y29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBq
IDwgdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNoT2Zmc2V0c1tq
XTsKQEAgLTg3Miw4ICs4ODAsOCBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIFN3aXRjaFJlY29yZDo6U3RyaW5nOiB7Ci0gICAgICAgICAgICBjb25zdCBVbmxp
bmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFN0cmluZ0p1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAg
ICAgICBhdXRvIGN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRy
VGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAg
ICAgICAgICAgICBmb3IgKGF1dG8mIGxvY2F0aW9uIDogdW5saW5rZWRUYWJsZS5tX29mZnNldFRh
YmxlLnZhbHVlcygpKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRp
b24ubV9icmFuY2hPZmZzZXQ7CkBAIC05MDcsNiArOTE1LDI3IEBAIHZvaWQgSklUOjpsaW5rKCkK
ICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsocmVjb3JkLmZyb20sIHJlY29yZC5jYWxsZWUp
OwogICAgIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgYXV0byBmaW5hbGl6ZUlDcyA9IFsm
XSAoYXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3IgKGF1dG8mIGdlbiA6IGdlbmVyYXRv
cnMpIHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnN0YXJ0ID0gcGF0Y2hC
dWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4oZ2VuLm1fc3RhcnQpOworICAg
ICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4ubV9kb25lKTsKKyAgICAgICAgICAg
IGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGdlbi5tX3Nsb3dQYXRoQmVnaW4p
OworICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlJZHMpOworICAg
IGZpbmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2dldEJ5SWRzV2l0
aFRoaXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1f
cHV0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlD
cyhtX2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9pbkJ5SWRzKTsKKyAgICBmaW5hbGl6
ZUlDcyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luc3RhbmNlT2ZzKTsKKyAgICBm
aW5hbGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsKKyNlbHNlCiAgICAgZmluYWxpemVJ
bmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5l
Q2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAgICAgZmluYWxpemVJbmxpbmVDYWNo
ZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7CkBAIC05MTgsMjEgKzk0NywyNSBA
QCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9pbkJ5VmFscywg
cGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1faW5zdGFuY2VPZnMsIHBh
dGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hlcyhtX3ByaXZhdGVCcmFuZEFjY2Vz
c2VzLCBwYXRjaEJ1ZmZlcik7CisjZW5kaWYKIAogICAgIGZvciAoYXV0byYgY29tcGlsYXRpb25J
bmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgVW5saW5rZWRDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLnVubGlua2Vk
Q2FsbExpbmtJbmZvOworICAgICAgICBpbmZvLmRvbmVMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRpb25JbmZvLmRvbmVMb2NhdGlvbik7
CisjZWxzZQogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNh
bGxMaW5rSW5mbzsKICAgICAgICAgaW5mby5zZXRDb2RlTG9jYXRpb25zKAogICAgICAgICAgICAg
cGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihjb21waWxhdGlvbkluZm8u
c2xvd1BhdGhTdGFydCksCiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50
ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9jYXRpb24pKTsKKyNlbmRpZgorCiAg
ICAgfQogCi0gICAgewotICAgICAgICBKSVRDb2RlTWFwQnVpbGRlciBqaXRDb2RlTWFwQnVpbGRl
cjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zm
c2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zmc2V0KSB7Ci0gICAgICAgICAgICBp
ZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgaml0
Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLCBwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0
XSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGppdENv
ZGVNYXBCdWlsZGVyLmZpbmFsaXplKCkpOworICAgIEpJVENvZGVNYXBCdWlsZGVyIGppdENvZGVN
YXBCdWlsZGVyOworICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29k
ZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29kZU9mZnNldCkgeworICAgICAgICBp
ZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkpCisgICAgICAgICAgICBqaXRDb2Rl
TWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCksIHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdKSk7
CiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSkg
ewpAQCAtOTQxLDI2ICs5NzQsNDIgQEAgdm9pZCBKSVQ6OmxpbmsoKQogICAgIH0KIAogICAgIGlm
IChVTkxJS0VMWShtX2NvbXBpbGF0aW9uKSkgeworICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdl
IG1ha2UgdGhlIGJ5dGVjb2RlIHByb2ZpbGVyIGtub3cgYWJvdXQgVW5saW5rZWRDb2RlQmxvY2s/
CiAgICAgICAgIGlmIChPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkK
ICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fY29tcGlsYXRp
b24uZ2V0KCksIHBhdGNoQnVmZmVyKTsKLSAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyLT5hZGRDb21waWxhdGlvbihtX2NvZGVCbG9jaywgKm1fY29tcGlsYXRpb24pOworICAgICAg
ICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcHJvZmlsZWRD
b2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKICAgICB9CiAKICAgICBpZiAobV9wY1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCiAgICAgICAgIG1fcGNUb0NvZGVPcmln
aW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihXVEZNb3ZlKG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpOwogICAgIAorICAgIC8vIEZJWE1FOiBNYWtl
IGEgdmVyc2lvbiBvZiBDb2RlQmxvY2tXaXRoSklUVHlwZSB0aGF0IGtub3dzIGFib3V0IFVubGlu
a2VkQ29kZUJsb2NrLgogICAgIENvZGVSZWY8SlNFbnRyeVB0clRhZz4gcmVzdWx0ID0gRklOQUxJ
WkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAgICAgICJC
YXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUo
bV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSkuZGF0YSgpKTsKKyAgICAgICAgIkJh
c2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZSht
X3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpLmRhdGEoKSk7CiAgICAg
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNr
ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRyVGFnPihtX2FyaXR5Q2hlY2spOwot
ICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhB
cml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpOworICAgIG1faml0Q29kZSA9IGFkb3B0
UmVmKCpuZXcgQmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2spKTsKKworICAg
IG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gV1RGTW92ZShtX3VubGlua2VkQ2FsbHMpOwor
ICAgIG1faml0Q29kZS0+bV9ldmFsQ2FsbExpbmtJbmZvcyA9IFdURk1vdmUobV9ldmFsQ2FsbExp
bmtJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zID0gV1RGTW92ZSht
X3VubGlua2VkU3R1YkluZm9zKTsKKyAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlcyA9
IFdURk1vdmUobV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBt
X2ppdENvZGUtPm1faml0Q29kZU1hcCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCk7Cisg
ICAgbV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNzKTsKKyAgICBtX2ppdENvZGUtPm1f
Y29uc3RhbnRQb29sID0gV1RGTW92ZShtX2NvbnN0YW50UG9vbCk7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBtX2lzU2hhcmVhYmxlOworI2Vsc2UK
KyAgICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBmYWxzZTsKKyNlbmRpZgogCiAgICAgaWYg
KEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBj
b2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJs
ZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5
KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRl
ZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3Vs
dC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1
dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CiB9CiAKLUNvbXBpbGF0aW9uUmVz
dWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpm
aW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBSRUxFQVNF
X0FTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApAQCAtOTY5LDI1ICsxMDE4LDE0IEBA
IENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHIKIAogICAgIG1fbGlua0J1
ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tzKCk7CiAKLSAgICB7Ci0gICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAg
IG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENvZGVCbG9jazo6U2hyaW5rTW9kZTo6
TGF0ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVC
bG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyArK2kpIHsKLSAgICAgICAgSGFuZGxl
ckluZm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKTsKLSAgICAg
ICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMxOD4uCi0gICAgICAgIGhhbmRsZXIu
bmF0aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkuZmluZChCeXRlY29kZUluZGV4
KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4oKTsKLSAg
ICB9Ci0KICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkKLSAgICAgICAgbV9jb2RlQmxvY2st
PnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1RvQ29kZU9yaWdpbk1hcCkpOworICAg
ICAgICBtX2ppdENvZGUtPm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1fcGNUb0NvZGVP
cmlnaW5NYXApOwogCiAgICAgbV92bS0+bWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZv
ckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV9qaXRDb2Rl
LT5zaXplKCkpIC8KLSAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zU2l6ZSgpKSk7CisgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4obV91bmxpbmtl
ZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CiAKLSAgICBtX2NvZGVCbG9jay0+c2V0
SklUQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgY29kZUJsb2NrLT5zZXR1
cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7CiAK
ICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQpAQCAtOTk5LDExICsxMDM3LDEx
IEBAIHNpemVfdCBKSVQ6OmNvZGVTaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9saW5rQnVmZmVy
LT5zaXplKCk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSklU
Q29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRl
Q29tcGlsZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
KQogewogICAgIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgIGNv
bXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoZWZmb3J0KTsKLSAgICByZXR1cm4gZmluYWxp
emVPbk1haW5UaHJlYWQoKTsKKyAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoY29kZUJs
b2NrKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQpA
QCAtMTA0MywxOCArMTA4MSwyOCBAQCB2b2lkIEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25C
ZWZvcmVDCiAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmll
cygqbV92bSwgIlByZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0aW9uLiJfcyk7CiB9CiAKLXVuc2ln
bmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQordW5z
aWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvZGVCbG9jay0+bnVt
Q2FsbGVlTG9jYWxzKCkpID09IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVu
dFJlZ2lzdGVycygpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrLT5udW1DYWxsZWVM
b2NhbHMoKSkpKTsKIAogICAgIHJldHVybiByb3VuZExvY2FsUmVnaXN0ZXJDb3VudEZvckZyYW1l
UG9pbnRlck9mZnNldChjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpICsgbWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9CiAKLWludCBKSVQ6OnN0YWNrUG9pbnRl
ck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vuc2lnbmVkIEpJVDo6ZnJhbWVSZWdp
c3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBmcmFtZVJl
Z2lzdGVyQ291bnRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpKTsKK30KKworaW50
IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7CiAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGZyYW1lUmVnaXN0ZXJDb3Vu
dEZvcihjb2RlQmxvY2spIC0gMSkub2Zmc2V0KCk7CiB9CiAKK2ludCBKSVQ6OnN0YWNrUG9pbnRl
ck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSk7Cit9CisKIEhhc2hN
YXA8Q1N0cmluZywgU2Vjb25kcz4gSklUOjpjb21waWxlVGltZVN0YXRzKCkKIHsKICAgICBIYXNo
TWFwPENTdHJpbmcsIFNlY29uZHM+IHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkocmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogCiAjZGVmaW5lIEFTU0VSVF9KSVRfT0ZG
U0VUKGFjdHVhbCwgZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NBR0UoYWN0dWFsID09IGV4cGVj
dGVkLCAiSklUIE9mZnNldCBcIiVzXCIgc2hvdWxkIGJlICVkLCBub3QgJWQuXG4iLCAjZXhwZWN0
ZWQsIHN0YXRpY19jYXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KGFjdHVhbCkp
OwogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiSklURGlzYXNzZW1ibGVy
LmgiCkBAIC00NCw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAjaW5jbHVkZSAi
SklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCisj
aW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNp
bmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgpAQCAt
MTQ5LDE0ICsxNTEsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBD
YWxsQ29tcGlsYXRpb25JbmZvIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQ
YXRoU3RhcnQ7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBkb25lTG9jYXRpb247Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8qIHVubGlua2Vk
Q2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5r
SW5mb0NvbnN0YW50OworI2Vsc2UKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHNsb3dQ
YXRoU3RhcnQ7CiAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOworI2VuZGlmCiAg
ICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJl
c3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3Q2FsbGVlRnVuY3Rpb24pOwog
Ci0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQgOiBwcml2YXRlIEpTSW50ZXJmYWNl
SklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5UIEpJVCA6IHB1YmxpYyBKU0ludGVy
ZmFjZUpJVCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTbG93UGF0aENhbGw7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFRodW5r
czsKQEAgLTE3MSw2ICsxNzgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gd2lsbCBj
b21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBh
IHBhdGNoZWQgb2Zmc2V0LgogICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBwYXRjaFB1dEJ5
SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCisgICAgICAgIHVzaW5nIEJhc2UgPSBKU0ludGVyZmFj
ZUpJVDsKKwogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZNJiwgQ29kZUJsb2NrKiA9IG51bGxw
dHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQgPSBCeXRlY29kZUlu
ZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMTc4LDI4ICsxODcsMzMgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpKU0ludGVyZmFjZUpJVDo6dm0oKTsg
fQogCiAgICAgICAgIHZvaWQgY29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21w
aWxhdGlvbkVmZm9ydCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWlu
VGhyZWFkKCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFk
KENvZGVCbG9jayopOwogICAgICAgICBzaXplX3QgY29kZVNpemUoKSBjb25zdDsKIAogICAgICAg
ICB2b2lkIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpOwogICAgICAgICAK
ICAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LCBCeXRlY29kZUluZGV4
IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkKICAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCkucHJpdmF0ZUNvbXBp
bGUoZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBKSVQodm0sIGNvZGVCbG9jaywgYnl0ZWNv
ZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGNvZGVCbG9jaywgZWZmb3J0KTsKICAgICAgICAgfQog
CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5saW5rZWRD
b2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZyYW1lUmVnaXN0ZXJDb3VudEZv
cihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3Io
VW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIGludCBzdGFja1BvaW50ZXJPZmZz
ZXRGb3IoQ29kZUJsb2NrKik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEhh
c2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gY29tcGlsZVRpbWVTdGF0cygpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgU2Vjb25kcyB0b3RhbENvbXBpbGVUaW1lKCk7CiAKKyAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0YUdQUiA9IExMSW50OjpSZWdpc3Rl
cnM6Om1ldGFkYXRhVGFibGVHUFI7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNf
Y29uc3RhbnRzR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJHUFI7CisKICAgICBwcml2YXRlOgog
ICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKICAgICAgICAgdm9pZCBwcml2
YXRlQ29tcGlsZUxpbmtQYXNzKCk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMoKTsKICAgICAgICAgdm9pZCBsaW5rKCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHBy
aXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICAgICAgQ29tcGlsYXRpb25S
ZXN1bHQgcHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwog
CiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhj
ZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2ICsyMzcsMzIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkUHRyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2Rl
Jiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDMyRnJvbU1ldGFkYXRhKGNvbnN0IEJ5dGVjb2Rl
Jiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Qnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUm
LCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBW
YWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIHN0b3JlOFRvTWV0YWRh
dGEoVmFsdWVUeXBlLCBjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQpOworCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBzdG9yZTMyVG9NZXRh
ZGF0YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCk7CisKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyk7
CisKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVkIGNvbnN0
YW50SW5kZXgsIEdQUlJlZyk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBsb2FkR2xvYmFs
T2JqZWN0KEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1
YWxSZWdpc3RlciwgR1BSUmVnKTsKKworICAgICAgICB2b2lkIGVtaXRQdXRDb2RlQmxvY2tUb0Zy
YW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOworCiAgICAgICAgIHZvaWQgZXhj
ZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBt
X2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7CkBAIC0yNTQsNiArMjk0LDE5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8CisgICAgICAgICAgICBPcDo6
b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1
Y3RfdmFyYXJncworICAgICAgICAgICAgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF92
YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMK
KyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIEpJVENvbnN0YW50
UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQpOworCisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgorICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAorICAgICAgICAgICAgT3A6
Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MKKyAgICAgICAgICAgIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
CisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmLCBKSVRDb25zdGFu
dFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KTsKKyNlbHNlCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PAogICAgICAgICAg
ICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MKQEAgLTI2NSw5ICszMTgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAgICAgfHwgT3A6Om9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMKICAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShjb25zdCBP
cCYsIENhbGxMaW5rSW5mbyopOworI2VuZGlmCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wJiwgQ2FsbExpbmtJbmZv
KiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAgICAgICBib29sIGNvbXBpbGVUYWls
Q2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJ
bmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQpOwogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKTsKICAg
ICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTI4NywxNCArMzQxLDEzIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lz
dGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAg
ICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVy
KEpTQ2VsbCogb3duZXIpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93
bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmls
ZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFpbGFibGUgZm9yCiAgICAgICAgIC8v
IHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7Ci0gICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRh
dGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNWYWx1ZVJlZ3MpOworICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNv
bnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNv
ZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYsIEpTVmFsdWVS
ZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVBy
b2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBKU1ZhbHVlUmVncyk7CkBA
IC0zMDUsOCArMzU4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVl
UHJvZmlsZT46OnZhbHVlLCB2b2lkPgogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQ
cm9maWxlZE9wY29kZShPcCBieXRlY29kZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9m
aWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqLCBSZWdp
c3RlcklEIHNjcmF0Y2hHUFIpOwotICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
aXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgYXJyYXlQcm9maWxlR1BSLCBS
ZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNv
ZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5
dGVjb2RlJiwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgcHRyZGlmZl90LCBSZWdpc3Rl
cklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7CiAKICAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlKE9wKTsKQEAgLTU5NCw3ICs2
NDksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmVxKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
bnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02MjgsMTQgKzY4MiwxNCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7CiAK
ICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlw
ZSk7Ci0gICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3Qs
IEFjY2Vzc1R5cGUpOworICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlU2xvdyhWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
LCBBY2Nlc3NUeXBlKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
dm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5
Q2hlY2soUmVzb2x2ZVR5cGUpOworICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcpOworICAgICAgICB2b2lkIGVtaXRW
YXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUik7CiAgICAgICAg
IHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdp
c3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgp
OwogICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
QEAgLTY0Nyw3ICs3MDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgICAgICB2b2lk
IGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7Ci0gICAg
ICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpOworICAgICAgICB2
b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCk7CiAgICAg
ICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1
cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CkBAIC02NTYsNiArNzEwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVn
aXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCisgICAgICAgIGJvb2wgaXNLbm93bkNl
bGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudEludChWaXJ0
dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFs
UmVnaXN0ZXIpOwpAQCAtNjc3LDEzICs3MzIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0
X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
c19wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYpOwogICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dl
dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfYnlfaWRf
cHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihW
TSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcihWTSYpOwotICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVH
ZW5lcmF0b3IoVk0mKTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVy
X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKQEAgLTY5NywzMCArNzUwLDEzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJl
c29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVW
YXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFU
T1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9y
KFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX0dFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgot
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwot
Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNj
b3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBN
b2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFu
IHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2ZWRDbG9zdXJlVmFyIGJlY2F1c2Ug
d2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29wZS4KLSAgICAgICAg
ICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCByZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNkZWZpbmUgREVDTEFSRV9SRVNPTFZF
X1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5
cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFS
RV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSk7Ci0KICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9y
KFZNJik7CiAKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3Jlc29sdmVf
c2NvcGVHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiwgc3RkOjpv
cHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVzb2x2ZVR5cGU+LCBjb25zdCBjaGFy
KiB0aHVua05hbWUpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAg
ICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKQEAgLTc2MSwxMCArNzk3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24o
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNv
bnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1bHQp
OwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShNZXRhZGF0YSYs
IGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgdm9pZCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1l
dGFkYXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0
IEJ5dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiwgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAg
ICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8
T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+CkBAIC04MjIs
MjAgKzg1OCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCB0YXJnZXQub2Zmc2V0
KSk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YSwgdHlw
ZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlw
ZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+Ci0gICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9u
LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIE9wZXJhdGlvblR5cGUg
b3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFyZ3MpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJhdGlvblR5cGU+KGFyZ3MuLi4pOwot
ICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YSwg
dHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3BlcmF0aW9uVHlw
ZSwgdHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5h
YmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgdm9pZD4K
LSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgQWRk
cmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRk
cmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAg
ICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJbmRpcmVjdENhbGw8T3BlcmF0aW9u
VHlwZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKG1ldGFkYXRhLCBBZGRy
ZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZzZXQpLCByZXN1bHQpOworICAgICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgdGFyZ2V0
Lm9mZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpAQCAtOTIwLDI1ICs5NTYsMjIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5C
ZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBj
YW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWRPcklubGlu
ZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91
bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgp
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2Zp
bGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCiAgICAgICAgIC8vIGluIHdo
aWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAgICAgICAgYm9vbCBzaG91bGRFbWl0
UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgZW1p
dE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKTsKKworICAgICAg
ICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCBy
ZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGljIGJvb2wgY29tcHV0ZUNvbXBpbGVU
aW1lcygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91IG5lZWQgdG8gY2hlY2sgYSB2YWx1
ZSBmcm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5lZWQgaXQgdG8KLSAgICAgICAgLy8g
YmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNsb3cgcGF0aCwgdGhlbiB5b3Ugd2Fu
dCB0byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBnaXZlIHRoZSBzbG93IHBhdGggdGhl
IHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgotICAgICAgICBHZXRQdXRJbmZvIGNv
cGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
QmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBjb3BpZWRBcml0aFByb2ZpbGUo
QmluYXJ5T3ApOworCisgICAgICAgIHZvaWQgcmVzZXRTUCgpOwogCiAgICAgICAgIEludGVycHJl
dGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjUsOSArOTk4LDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Nsb3dDYXNlczsKICAgICAgICAgVmVj
dG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAotICAgICAgICBIYXNoTWFwPHVuc2lnbmVk
LCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAgICAgICAgSGFzaE1hcDx1aW50NjRf
dCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRoUHJvZmlsZXM7Ci0KICAgICAgICAg
SnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9u
Q2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKQEAgLTEwMDEsMTEgKzEwMzEsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hN
YXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0aElDR2VuZXJhdGlvblN0YXRlPj4g
bV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlOwogCiAgICAgICAgIGJvb2wgbV9j
YW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkT3JJbmxpbmVkOwog
ICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICAgICAgICAgQnl0ZWNvZGVJbmRl
eCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAgICAgICAgUmVmUHRyPERpcmVjdEpJ
VENvZGU+IG1faml0Q29kZTsKKyAgICAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQ29kZUJsb2Nr
IHsgbnVsbHB0ciB9OworICAgICAgICBVbmxpbmtlZENvZGVCbG9jayogbV91bmxpbmtlZENvZGVC
bG9jayB7IG51bGxwdHIgfTsKKworICAgICAgICBNYXRoSUNIb2xkZXIgbV9tYXRoSUNzOworICAg
ICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENvZGU7CisKKyAgICAgICAgSklUQ29u
c3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0
YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkgfTsKKyAgICAgICAgQmFnPFVubGlua2VkQ2FsbExpbmtJbmZvPiBtX3VubGlua2Vk
Q2FsbHM7CisgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fZXZhbENhbGxMaW5rSW5mb3M7Cisg
ICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvPiBtX3VubGlua2VkU3R1YkluZm9z
OworICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxl
czsKKyAgICAgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXM7CisKKyAgICAgICAgc3RydWN0IE5vdEFDb2RlQmxvY2sgeyB9IG1fY29kZUJsb2Nr
OworCisgICAgICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRydWUgfTsKICAgICB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAkocmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDkgKzI5MiwxMCBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CiAgICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCBhcmd1bWVudEdQUjEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjAsIGFy
Z3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmd1bWVu
dEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgYXJndW1lbnRHUFIy
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMzIwLDcgKzMyMSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByZWdUMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcgKzM0OCw4IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qy
LCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCByZWdUMSk7CiAgICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcyLDcgKzM3
NSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICB9CiAK
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC01NzMsNyArNTc3LDggQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IAogCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVn
VDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDQsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03MTcsOCArNzIyLDggQEAgdm9pZCBKSVQ6OmVt
aXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cgogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBVbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+
KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE5lZ0lDKiBu
ZWdhdGVJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIFVu
YXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmVnYXRlPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwor
ICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5hZGRKSVROZWdJQyhhcml0aFByb2Zp
bGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBu
ZWdhdGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIGJldHRlciB0byBjYWxsIHRob3Nl
IG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3BlcmFuZCBjYW4gYmUgYSBCaWdJbnQK
ICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwpA
QCAtODk5LDggKzkwNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1
Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElD
KGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJVEFkZElDKiBhZGRJQyA9IG1fbWF0aElDcy5hZGRK
SVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3Vy
cmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BBZGQ+KGFkZElD
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlv
blZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUwLDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElD
RmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRo
SUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlm
ICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0
UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBz
cmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MpOworICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNl
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTAxNSwxMCArMTAy
MSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDCiAgICAgICAg
IGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAgICAgICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVk
RnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBs
ZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC0xMDU1LDEzICsxMDYyLDE0
IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzwKICNlbmRpZgogCiAg
ICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxl
KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgaWYgKGFyaXRoUHJvZmlsZSAm
JiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRf
Y2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1Jl
Z3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRf
Y2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1
bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVncywgYXJpdGhQcm9m
aWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdU
NCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50
ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgc3JjUmVn
cywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0
LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNf
U1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7CkBAIC0xMTIwLDEzICsxMTI4
LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKICNlbmRpZgog
CiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJv
ZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGlmIChhcml0aFByb2Zp
bGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2Vf
Y2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0
aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1Q
dHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9K
SVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtMTE2Niw3
ICsxMTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiAg
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxscHRyOwogICAgIGlmIChz
aG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmls
ZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERpdj4o
KS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKIAogICAgIFNu
aXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkp
OwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBl
cy5zZWNvbmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYo
Y29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRNdWxJQyogbXVsSUMg
PSBtX21hdGhJQ3MuYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9u
VG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNG
YXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CkBAIC0xMjI3LDggKzEyMzYsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29w
X3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
dWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVFN1YklD
KiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUpOworICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFN1Yj4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICBKSVRTdWJJQyogc3ViSUMgPSBtX21hdGhJQ3MuYWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsK
ICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMp
OwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBv
cGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAyODMx
MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUp
CiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOwogICAgIGVtaXRTdG9yZShkZXN0aW5hdGlvbkZvcihieXRlY29kZSwg
bV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QxLCBy
ZWdUMCk7CiB9CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBzdGQ6OmVuYWJsZV9pZl90PAogSklUOjpj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiB7CiAg
ICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCk7Ci0g
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsK
ICAgICBpbnQgYXJnQ291bnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29k
ZSwgY2hlY2twb2ludCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGlu
dD4oc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpKTsK
IApAQCAtMTkyLDcgKzE5Miw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2QKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndh
cmRBcmd1bWVudHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9u
U2l6ZUZyYW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgLWZp
cnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgY2FsbE9wZXJhdGlvbihz
aXplT3BlcmF0aW9uLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNl
dCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwog
ICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVn
VDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwg
NiAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0y
MDIsNyArMjAyLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZAog
ICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0Zy
YW1lOwogICAgIGVsc2UKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZh
cmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDQpLCBmaXJz
dFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24s
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3Mo
cmVnVDIsIHJlZ1Q0KSwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4K
QEAgLTIzMiwxMCArMjMyLDEwIEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3BD
YWxsRXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwog
ICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6
OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpLCByZWdUMik7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgbV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2Fs
bEV2YWwsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIp
OwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogCkBAIC0yNDksNyAr
MjQ5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2st
PmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgIENhbGxM
aW5rSW5mbyogaW5mbyA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0lu
Zm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5t
X2FyZ3Y7CkBAIC0yNTgsOCArMjU4LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dD
YXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEs
IHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0sIG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZz
ZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
ICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1
bHQoYnl0ZWNvZGUpOwpAQCAtMjg2LDExICsyODYsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICovCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVs
bHB0cjsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBpbmZvID0g
bV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkp
OworICAgICAgICBpbmZvID0gbV9wcm9maWxlZENvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNv
ZGUsIGluZm8pOwogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgogICAgIAotICAgIGF1
dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9u
KTsKKyAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5ieXRlY29k
ZUluZGV4KGluc3RydWN0aW9uKTsKICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0
ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihs
b2NhdGlvbkJpdHMpLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpKTsKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7IC8vIHJlZ1QxLCBy
ZWdUMCBob2xkcyBjYWxsZWUuCkBAIC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dDYXNlKHNsb3dQYXRocyk7CiAgICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBs
YWJlbCgpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMzQx
LDEyICszNDEsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShjb25zdCBJbgog
ICAgIH0KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKIAogICAg
IGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQog
ICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKICAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+
ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewpAQCAtMzU0LDcgKzM1Myw3IEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CkBAIC0zOTUsNyArMzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25z
dCBJbgogICAgIEpTVmFsdWVSZWdzIG5leHRSZWdzID0gSlNWYWx1ZVJlZ3ModGFnTmV4dEdQUiwg
cGF5bG9hZE5leHRHUFIpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLAorICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLAogICAgICAgICBKSVRU
eXBlOjpCYXNlbGluZUpJVCwKICAgICAgICAgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLAog
ICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSksCkBAIC00MTAsNyArNDA5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Bl
bihjb25zdCBJbgogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9n
ZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBuZXh0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgbmV4dFJlZ3Mp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCBuZXh0UmVncyk7
CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwpAQCAtNDQwLDEwICs0MzksMTAgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOwogCiAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KAotICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIC8vIG1ldGFkYXRhCisg
ICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCAvLyBtZXRhZGF0
YQogICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgogICAgICAg
ICBuZXh0VlJlZywgLy8gcmVzdWx0Ci0gICAgICAgIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQogICAgICAgICBnZW4uc3R1Yklu
Zm8oKSwgLy8gYXJnMgogICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVyYXRvckdQUiwgcGF5bG9h
ZEl0ZXJhdG9yR1BSKSwgLy8gYXJnMwogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOyAvLyBhcmc0CkBAIC00
NTIsNyArNDUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwog
ICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1t
UHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAKICAgICBkb25lLmxp
bmsodGhpcyk7CiB9CkBAIC00NjAsNyArNDU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0
ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIGF1dG8qIHRyeUZhc3RGdW5jdGlvbiA9
IChbJl0gKCkgewogICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT53aWR0aCgpKSB7CiAgICAg
ICAgIGNhc2UgTmFycm93OiByZXR1cm4gaXRlcmF0b3JfbmV4dF90cnlfZmFzdF9uYXJyb3c7CkBA
IC01MDYsNyArNTA1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJ
bgogICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh0YWdWYWx1ZUdQUik7CiAgICAgICAgIHByZXNl
cnZlZFJlZ3MuYWRkKHBheWxvYWRWYWx1ZUdQUik7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssCisgICAgICAgICAgICBtX3Byb2ZpbGVk
Q29kZUJsb2NrLAogICAgICAgICAgICAgSklUVHlwZTo6QmFzZWxpbmVKSVQsCiAgICAgICAgICAg
ICBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCkBAIC01MzMsMTAgKzUz
MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluCiAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Q2OwogICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdU
NzsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5
KHZtKCksIEpTVmFsdWVSZWdzKHRhZ0RvbmVHUFIsIHBheWxvYWREb25lR1BSKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIEp1bXBMaXN0IGl0
ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh0YWdEb25lR1BS
LCBwYXlsb2FkRG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSk7CiAKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAg
ICAgICAgICBtX2NvZGVCbG9jaywKKyAgICAgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssCiAg
ICAgICAgICAgICBKSVRUeXBlOjpCYXNlbGluZUpJVCwKICAgICAgICAgICAgIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgICAgIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwKQEAgLTU4OCwxMCArNTg3LDEwIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CiAKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKAotICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCAv
LyBtZXRhZGF0YQorICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jayksIC8vIG1ldGFkYXRhCiAgICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUs
IC8vIG9wZXJhdGlvbgogICAgICAgICAgICAgZG9uZVZSZWcsIC8vIHJlc3VsdAotICAgICAgICAg
ICAgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCAvLyBhcmcxCisg
ICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgLy8gYXJnMQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCksIC8vIGFyZzIKICAgICAg
ICAgICAgIEpTVmFsdWVSZWdzKHRhZ0l0ZXJSZXN1bHRHUFIsIHBheWxvYWRJdGVyUmVzdWx0R1BS
KSwgLy8gYXJnMwogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsgLy8gYXJnNApAQCAtNjAyLDcgKzYw
MSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAg
ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICAgICAgbm90T2Jq
ZWN0LmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVy
YXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSkpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JS
ZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSkpOwogICAgIH0KIAogICAgIHsgICAKQEAgLTYxOCwxMCArNjE3LDEwIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMKICAgICAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICAgICAgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKAotICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCAvLyBtZXRhZGF0YQorICAgICAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jayksIC8vIG1ldGFkYXRhCiAgICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1p
emUsIC8vIG9wZXJhdGlvbgogICAgICAgICAgICAgdmFsdWVWUmVnLCAvLyByZXN1bHQKLSAgICAg
ICAgICAgIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJn
MQorICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIC8vIGFyZzEKICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLCAvLyBhcmcyCiAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVyUmVzdWx0R1BSLCBwYXlsb2FkSXRlclJlc3Vs
dEdQUiksIC8vIGFyZzMKICAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7IC8vIGFyZzQKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjgzMTAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVk
ZSAiU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQ0LDcg
KzQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklU
OjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNo
ZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1QwKTsKIH0KIApAQCAtNTMsMTggKzU0
LDE4IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFy
YXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICAmJiBPcDo6
b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCitKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCkKIHsKICAg
ICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBp
bnQgYXJnQ291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNGb3Io
Ynl0ZWNvZGUsIGNoZWNrcG9pbnQpOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNf
Y2FzdDxpbnQ+KHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JDYWxsKGJ5dGVjb2RlLCBjaGVja3Bv
aW50KSk7CiAKKwogICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0
UHJvZmlsaW5nKCkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5n
VGhpcygwKSksIHJlZ1QwKTsKICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMCwgYXJyYXlQcm9maWxlRm9y
KG1ldGFkYXRhLCBjaGVja3BvaW50KS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwor
ICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wQ2FsbDo6TWV0YWRh
dGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCkgKyBMTEludENhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZB
cnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlE
KCkpOwogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC03OCw3ICs3OSw3IEBA
IHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8
fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKICAgICB8fCBPcDo6b3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25z
dCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbykKK0pJVDo6Y29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5r
SW5mb0NvbnN0YW50KQogewogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUgPSBieXRlY29k
ZS5tX3RoaXNWYWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUu
bV9hcmd1bWVudHM7CkBAIC05MSw3ICs5Miw4IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFt
ZUZvckZvcndhcmRBcmd1bWVudHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0g
b3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVy
YXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDEs
IC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDApOworICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDAsIHJl
Z1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7CiAgICAgZW1pdFNldFZhcmFy
Z3NGcmFtZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEpOwogICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKHZvaWQq
KSkpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMSwxNCArMTAzLDE2IEBA
IEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2V0dXBP
cGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICBlbHNl
CiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0g
ICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdU
MCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1
cE9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1Qw
KTsKICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxlIHRo
ZSBhcmd1bWVudCBjb3VudC4KICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRk
cmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSwgcmVnVDApOwotICAgIEp1bXAg
bm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIo
cmVnVDIsIGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOwor
ICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDApOworICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKSksIHJlZ1QzKTsKKyAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihB
Ym92ZSwgcmVnVDMsIHJlZ1QyKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBD
YWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkpOwog
ICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlz
Jy4KQEAgLTEyNywxNiArMTMxLDE1IEBAIGJvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3Qg
T3AmKQogdGVtcGxhdGU8PgogYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxF
dmFsJiBieXRlY29kZSkKIHsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgcmVnVDEpOwotICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1Qx
LCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKLQotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIGFyZ3VtZW50R1BSMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIs
IEFkZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsK
IAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CisgICAgcmVzZXRTUCgpOwogCi0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2
YWwsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmRW1wdHkocmV0dXJuVmFsdWVHUFIpKTsKIAogICAgIGVtaXRQdXRDYWxs
UmVzdWx0KGJ5dGVjb2RlKTsKIApAQCAtMTQ4LDcgKzE1MSw3IEBAIHZvaWQgSklUOjpjb21waWxl
Q2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAgIENh
bGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2V2YWxDYWxs
TGlua0luZm9zLmFkZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8tPnNl
dFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rlck9m
ZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMgKzE1OSw0NyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihy
ZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgbG9h
ZDY0KEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxs
RnJhbWVTbG90OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0g
ICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGlu
Zm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1vdmluZ0ds
b2JhbE9iamVjdCgqbV92bSwgaW5mbyk7CisgICAgcmVzZXRTUCgpOwogCiAgICAgZW1pdFB1dENh
bGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWJvb2wgSklU
Ojpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlua0luZm8qLCB1bnNpZ25lZCkKK2Jv
b2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBVbmxpbmtlZENhbGxMaW5rSW5mbyos
IHVuc2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50KQogewogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRh
aWxDYWxsJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmRleCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3BUYWlsQ2FsbCYgYnl0
ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9J
bmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZm9Db25zdGFudCkKIHsK
LSAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5u
dW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAgIHNodWZmbGVEYXRhLm51bWJlclRh
Z1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7Ci0gICAgc2h1ZmZsZURhdGEu
bnVtTG9jYWxzID0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+IHNo
dWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlRGF0YT4oKTsKKyAgICBzaHVm
ZmxlRGF0YS0+bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBzaHVmZmxlRGF0
YS0+bnVtUGFyYW1ldGVycyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsK
KyAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIgPSBHUFJJbmZvOjpudW1iZXJUYWdS
ZWdpc3RlcjsKKyAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxzID0KICAgICAgICAgYnl0ZWNvZGUu
bV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAg
ICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIHNodWZmbGVE
YXRhLT5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAgICAgICBzaHVmZmxlRGF0YS5hcmdz
W2ldID0KKyAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVS
ZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAg
ICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwogICAgIH0KLSAgICBzaHVmZmxlRGF0YS5jYWxsZWUg
PQotICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAg
ICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwotICAg
IGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgIHNodWZmbGVEYXRh
LT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAg
ICBzaHVmZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKCZSZWdpc3RlckF0T2Zmc2V0
TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAKLSAgICBKdW1wTGlz
dCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJl
Z1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBbJl0gewotICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAg
IGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwgcmVnVDIpOworICAgIEp1bXBMaXN0
IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMs
ICpzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CiAgICAgfSk7CiAgICAgYWRkU2xv
d0Nhc2Uoc2xvd1BhdGhzKTsKKworICAgIHNodWZmbGVEYXRhLT5zaHJpbmtUb0ZpdCgpOworICAg
IGluZm8tPmZyYW1lU2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNodWZmbGVEYXRhKTsKKwogICAgIGF1
dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVMb2NhdGlvbjsKICAgICAKQEAgLTIx
OCwxNCArMjI1LDI1IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8K
ICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAg
ICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAg
ICovCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQg
IT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5r
SW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwotICAgIGNvbXBpbGVTZXR1cEZyYW1l
KGJ5dGVjb2RlLCBpbmZvKTsKKworICAgIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVs
bHB0cjsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGluZm9Db25zdGFudCA9IFVJTlRf
TUFYOworICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgaW5mbyA9
IG1fdW5saW5rZWRDYWxscy5hZGQoKTsKKyAgICAgICAgaW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgaW5mby0+Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OmNh
bGxUeXBlRm9yKG9wY29kZUlEKTsKKworICAgICAgICBpbmZvQ29uc3RhbnQgPSBtX2NvbnN0YW50
UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxsTGlua0luZm8sIGluZm8pOworCisg
ICAgICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5m
b0luZGV4KTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGls
YXRpb25JbmZvKCkpOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLnVubGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsKKyAgICAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm9Db25zdGFudCA9IGluZm9D
b25zdGFudDsKKyAgICB9CisgICAgY29tcGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm9Db25z
dGFudCk7CiAKICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICBhdXRvIGJ5dGVj
b2RlSW5kZXggPSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRleChpbnN0cnVjdGlvbik7Ci0gICAg
dWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZUluZGV4KS5iaXRz
KCk7CisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBB
ZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZz
ZXQpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJl
Z1QwIGhvbGRzIGNhbGxlZS4KQEAgLTIzNCwxNiArMjUyLDEyIEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2Rl
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5z
aXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlu
a0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDApOwotICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAgICBp
ZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBjYWxsTGlua0luZm9JbmRleCkpCisg
ICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5mbywgY2FsbExpbmtJbmZvSW5kZXgs
IGluZm9Db25zdGFudCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGxvYWRDb25zdGFudChpbmZv
Q29uc3RhbnQsIHJlZ1QyKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFy
Z3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAg
ICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoKnRoaXMsIHJl
Z1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6OlllcywgWyZdIHsKKyAgICAgICAg
YXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CiAgICAgICAgICAgICBlbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KHJlZ1QyKTsKICAg
ICAgICAgfSk7CkBAIC0yNTMsMTQgKzI2NywxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChj
b25zdCBJbnN0cnVjdGlvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHNsb3dQ
YXRocyA9IGluZm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0lu
Zm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICBhdXRvIHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6
ZW1pdERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIpOwogICAgIGF1dG8gZG9uZUxv
Y2F0aW9uID0gbGFiZWwoKTsKICAgICBhZGRTbG93Q2FzZShzbG93UGF0aHMpOwogCiAgICAgbV9j
YWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5kb25lTG9jYXRpb24gPSBkb25l
TG9jYXRpb247CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZv
cihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwor
ICAgIHJlc2V0U1AoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KQEAg
LTI3MywyMSArMjg2LDIwIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3Qg
SW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGxvYWRDb25zdGFudChtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mb0NvbnN0YW50LCByZWdUMik7CiAK
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogCi0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQ
YXRoKCptX3ZtLCAqdGhpcyk7CisgICAgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgo
Km1fdm0sICp0aGlzLCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewogICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklU
RGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgcmVzZXRTUCgpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBlbWl0UHV0Q2Fs
bFJlc3VsdChieXRlY29kZSk7CkBAIC0zOTUsMTcgKzQwNywzMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAgICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIg
PSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAg
IG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQtPmltcGwoKSks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSwgQWNjZXNzVHlw
ZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBsKCkpLCBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3Vu
bGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNz
VHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2Nv
bnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywg
c3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJl
LCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiAKICAgICBmYXN0Q2FzZS5s
aW5rKHRoaXMpOwogfQpAQCAtNDE2LDEwICs0NDIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aXRlcmF0b3Jfb3Blbihjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JP
cGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAotCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQotICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEdQUlJl
ZyBpdGVyYXRvckdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBKdW1w
TGlzdCBub3RPYmplY3Q7CiAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRl
cmF0b3JHUFIpKTsKICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJh
dG9yR1BSKSk7CkBAIC00MzIsMTkgKzQ1NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3Jfb3Blbihjb25zCiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9
IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdl
bi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgbmV4dFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BS
MCwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyYXRvckdQUiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0
cygpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIG1vdmUoaXRlcmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT4oYnl0ZWNvZGUsIEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LCBuZXh0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3
Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7CiAKICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAgICBub3RPYmplY3QubGluayh0aGlz
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9i
amVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFyZ3VtZW50R1BSMCk7CiAKICAgICBk
b25lLmxpbmsodGhpcyk7CiB9CkBAIC00NTIsNyArNDc0LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBhdXRvKiB0cnlGYXN0RnVuY3Rpb24g
PSAoWyZdICgpIHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi0+d2lkdGgoKSkgewogICAg
ICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25leHRfdHJ5X2Zhc3RfbmFycm93OwpA
QCAtNDcwLDUwICs0OTEsNzkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbgogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEl0ZXJhdGlv
bk1vZGU6OkdlbmVyaWMpKSk7CiAKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIG9y
OChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJp
YykpLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRlcmF0aW9uTWV0YWRhdGEuc2Vlbk1v
ZGVzKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFk
YXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpLCByZWdUMCk7CisgICAgb3IzMihUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCByZWdUMCk7Cisg
ICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRh
OjpvZmZzZXRPZlNlZW5Nb2RlcygpKTsKICAgICBjb21waWxlT3BDYWxsPE9wSXRlcmF0b3JOZXh0
PihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBhZHZhbmNlVG9OZXh0
Q2hlY2twb2ludCgpOwogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmpl
Y3QpIGluIHJlZ1QwCiAKLSAgICBHUFJSZWcgdmFsdWVHUFIgPSByZWdUMDsKLSAgICBHUFJSZWcg
aXRlclJlc3VsdEdQUiA9IHJlZ1QyOwotICAgIEdQUlJlZyBkb25lR1BSID0gcmVnVDE7Ci0gICAg
Ly8gaXRlclJlc3VsdEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5IHRoZSBmaXJzdCBnZXQgYnkgaWQg
YmVsb3cuCi0gICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3VsdEdQUik7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm87
CisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3VsdEdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdpc3RlcjsKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BS
LCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAKKyAgICBjb25zdGV4cHIgR1BSUmVnIGRvbmVHUFIgPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAgICB7Ci0gICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsKKyAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICBz
dGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IGJhc2VHUFIpOworCisgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgICAgICBSZWdpc3RlclNldCBw
cmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwot
ICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7CisgICAgICAgIHByZXNlcnZlZFJl
Z3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdzLAotICAgICAgICAgICAgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5
TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRlclJlc3VsdEdQUiksIEpTVmFsdWVS
ZWdzKGRvbmVHUFIpLCByZWdUMywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVncywKKyAgICAgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodm0oKS5wcm9wZXJ0
eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhk
b25lR1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlk
OworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9T
UiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB7IGRvbmVH
UFIgfSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVS
ZWdzIHsgZG9uZUdQUiB9KTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwog
ICAgIH0KIAotCiAgICAgewotICAgICAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKLSAgICAg
ICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdp
c3RlcnMoZG9uZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOworICAgICAgICBTY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3Igc2NyYXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2gxID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKyAgICAgICAgR1BSUmVnIGdsb2JhbEdQUiA9IHNjcmF0Y2hBbGxvY2F0b3IuYWxsb2Nh
dGVTY3JhdGNoR1BSKCk7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
Z2xvYmFsR1BSKTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9uRG9uZSA9IGJyYW5jaElmVHJ1
dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsR1BS
KTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1vdmUoaXRlckNhbGxSZXN1
bHRHUFIsIGJhc2VHUFIpOwogCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAot
ICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
Zmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCByZWdUNCwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmlt
cGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHVi
SW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7CisgICAgICAgIHN0
dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgICAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgICAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgICAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CisgICAgICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwg
c28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgICAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzIHsgdmFsdWVHUFIgfSk7Ci0gICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVHUFIpOwor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB7IHJl
c3VsdEdQUiB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCByZXN1bHRHUFIpOwogCiAgICAgICAgIGl0ZXJhdGlvbkRvbmUubGluayh0aGlzKTsKICAg
ICB9CkBAIC01MjcsNTkgKzU3Nyw1NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
bmV4dChjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wSXRlcmF0b3JOZXh0PihpbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlckNh
bGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmRvbnRDbG9iYmVyUmVnaXN0
ZXI7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JOZXh0
PigpOwogICAgIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRvbmVWUmVnID0gYnl0ZWNvZGUu
bV9kb25lOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwogCiAgICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAgIEp1bXBMaXN0IG5vdE9iamVjdDsKLSAg
ICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENlbGwoaXRlclJlc3VsdEdQUikpOwor
ICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyQ2FsbFJlc3VsdEdQ
UikpOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlO
YW1lcy0+ZG9uZS5pbXBsKCk7CiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgICAgIAogICAgICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElm
Tm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFu
Y2hJZk5vdE9iamVjdChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCi0gICAgICAgIENhbGwgY2FsbDsK
LSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsK
LSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJ
bmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwg
aXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkb25lVlJlZywgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlclJlc3VsdEdQ
UiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVu
dCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKLQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBy
ZWdUMSk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwg
cmVnVDApOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOwor
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9uZVZSZWcsIGFyZ3VtZW50R1BSMCwg
YXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CisKKyAgICAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworCisgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVWUmVnLCBkb25lR1BSKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBpdGVyQ2FsbFJlc3Vs
dEdQUik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChqdW1wKCkpOwog
CiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JS
ZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKICAgICB9CiAKICAgICB7ICAgCiAgICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9
IHJlZ1QwOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVy
dHlOYW1lcy0+dmFsdWUuaW1wbCgpOwogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0g
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpu
b25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQUjAsIGl0ZXJSZXN1bHRHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJh
d0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVzdWx0R1BSLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwot
ICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAg
ICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+
KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNl
dE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAgICAgfQotCiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDI4MzEw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw4ICszMiwxMSBAQAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgog
I2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKKwogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIFBD
VG9Db2RlT3JpZ2luTWFwOworCiBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIENvbW1vbkRhdGE7CiBj
bGFzcyBKSVRDb2RlOwpAQCAtMTU5LDEwICsxNjIsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAgICB7Ci0gICAgICAgIGlmICghT3B0
aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlm
IChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJQygpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gT3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5n
SklUKCk7CiAgICAgfQogCkBAIC0yMjMsNiArMjI2LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBp
c1NoYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVBdHRyaWJ1dGUgPT0gU2hhcmVBdHRyaWJ1
dGU6OlNoYXJlZDsgfQogCisgICAgdmlydHVhbCBQQ1RvQ29kZU9yaWdpbk1hcCogcGNUb0NvZGVP
cmlnaW5NYXAoKSB7IHJldHVybiBudWxscHRyOyB9CisKIHByaXZhdGU6CiAgICAgSklUVHlwZSBt
X2ppdFR5cGU7CiAgICAgU2hhcmVBdHRyaWJ1dGUgbV9zaGFyZUF0dHJpYnV0ZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuY3BwCShyZXZp
c2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9u
S2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCB2b2lkIEpJVENvbXBpbGF0
aW9uS2V5OjpkdW1wKFByaW50U3RyZWFtCiAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG91dC5wcmludCgiKENvbXBpbGUgb2YgIiwgKm1f
cHJvZmlsZWRCbG9jaywgIiB3aXRoICIsIG1fbW9kZSwgIikiKTsKKyAgICBvdXQucHJpbnQoIihD
b21waWxlIG9mICIsIFJhd1BvaW50ZXIobV9jb2RlQmxvY2spLCAiIHdpdGggIiwgbV9tb2RlLCAi
KSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgJKHJldmlzaW9uIDI4MzEwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNTcgKzMwLDU2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBDb2RlQmxvY2s7
Ci1jbGFzcyBDb2RlQmxvY2tTZXQ7CitjbGFzcyBKU0NlbGw7CiAKIGNsYXNzIEpJVENvbXBpbGF0
aW9uS2V5IHsKIHB1YmxpYzoKICAgICBKSVRDb21waWxhdGlvbktleSgpCi0gICAgICAgIDogbV9w
cm9maWxlZEJsb2NrKG51bGxwdHIpCisgICAgICAgIDogbV9jb2RlQmxvY2sobnVsbHB0cikKICAg
ICAgICAgLCBtX21vZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb24pCiAg
ICAgewogICAgIH0KICAgICAKICAgICBKSVRDb21waWxhdGlvbktleShXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIpCisgICAg
ICAgIDogbV9jb2RlQmxvY2sobnVsbHB0cikKICAgICAgICAgLCBtX21vZGUoSklUQ29tcGlsYXRp
b25Nb2RlOjpERkcpCiAgICAgewogICAgIH0KICAgICAKLSAgICBKSVRDb21waWxhdGlvbktleShD
b2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZSBtb2RlKQotICAgICAg
ICA6IG1fcHJvZmlsZWRCbG9jayhwcm9maWxlZEJsb2NrKQorICAgIEpJVENvbXBpbGF0aW9uS2V5
KEpTQ2VsbCogcHJvZmlsZWRCbG9jaywgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUpCisgICAgICAg
IDogbV9jb2RlQmxvY2socHJvZmlsZWRCbG9jaykKICAgICAgICAgLCBtX21vZGUobW9kZSkKICAg
ICB7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9kZSA9PSBKSVRDb21waWxhdGlvbk1v
ZGU6OkludmFsaWRDb21waWxhdGlvbjsKKyAgICAgICAgcmV0dXJuICFtX2NvZGVCbG9jayAmJiBt
X21vZGUgPT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlkQ29tcGlsYXRpb247CiAgICAgfQog
ICAgIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuICFtX3Byb2ZpbGVkQmxvY2sgJiYgbV9tb2RlICE9IEpJVENvbXBpbGF0aW9u
TW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOworICAgICAgICByZXR1cm4gIW1fY29kZUJsb2NrICYm
IG1fbW9kZSAhPSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKICAgICB9
CiAgICAgCi0gICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9w
cm9maWxlZEJsb2NrOyB9CiAgICAgSklUQ29tcGlsYXRpb25Nb2RlIG1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX21vZGU7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSklUQ29tcGls
YXRpb25LZXkmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJvZmlsZWRC
bG9jayA9PSBvdGhlci5tX3Byb2ZpbGVkQmxvY2sKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nr
ID09IG90aGVyLm1fY29kZUJsb2NrCiAgICAgICAgICAgICAmJiBtX21vZGUgPT0gb3RoZXIubV9t
b2RlOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKFdURjo6UHRySGFzaDxDb2RlQmxvY2sqPjo6aGFz
aChtX3Byb2ZpbGVkQmxvY2spLCBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxKSVRD
b21waWxhdGlvbk1vZGU+Ojp0eXBlPihtX21vZGUpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6cGFp
ckludEhhc2goV1RGOjpQdHJIYXNoPEpTQ2VsbCo+OjpoYXNoKG1fY29kZUJsb2NrKSwgc3RhdGlj
X2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8SklUQ29tcGlsYXRpb25Nb2RlPjo6dHlwZT4obV9t
b2RlKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owog
CiBwcml2YXRlOgotICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOworICAgIC8vIEVpdGhl
ciBDb2RlQmxvY2sqIG9yIFVubGlua2VkQ29kZUJsb2NrKiBmb3IgYmFzbGVsaW5lIEpJVC4KKyAg
ICBKU0NlbGwqIG1fY29kZUJsb2NrOwogICAgIEpJVENvbXBpbGF0aW9uTW9kZSBtX21vZGU7CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIklubGluZUFjY2Vzcy5oIgorI2luY2x1
ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVT
dHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBzdGF0aWMgU3RydWN0dXJlU3R1YkluZm8q
IGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVH
ZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVFR5cGUgaml0VHlwZSwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBBY2Nlc3NUeXBlIGFj
Y2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCi0gICAgOiBt
X2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKKyAgICA6IG1f
aml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1YkluZm8gPSBtX2NvZGVCbG9jayA/IG1fY29k
ZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2RlT3JpZ2luKSA6IGdhcmJhZ2VTdHVi
SW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmFkZFN0dWJJ
bmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFnZVN0dWJJbmZvKCk7CiAgICAgbV9z
dHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwogCiAgICAgbV9zdHViSW5mby0+dXNl
ZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIExpbmtCdWZmZXImIGZhc3RQYXRoLCBM
aW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJU
YWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0YXJ0ID0gc3RhcnQ7Ci0KICAgICBtX3N0
dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJU
YWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKQpA
QCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUo
CiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gc2xvd1BhdGgubG9jYXRp
b25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zbG93UGF0aEJlZ2luKTsKIH0KIAordm9pZCBK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJ
VCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIG1f
c3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRh
SUMobV9qaXRUeXBlKSk7CisgICAgaml0LmxvYWRDb25zdGFudChzdHViSW5mbywgc3R1YkluZm9H
UFIpOworICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJU
YWcpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQorCiBKSVRCeUlkR2VuZXJhdG9yOjpK
SVRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5
cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgQWNjZXNz
VHlwZSBhY2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBK
U1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSKQpA
QCAtMTEwLDcgKzExOCw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3I6OkpJVEdldEJ5SWRHZW5lcmF0
b3IKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUpCiAgICAgOiBKSVRCeUlkR2VuZXJhdG9yKGNvZGVCbG9jaywgaml0
VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5cGUsIHVzZWRSZWdpc3RlcnMsIGJh
c2UsIHZhbHVlLCBzdHViSW5mb0dQUikKLSAgICAsIG1faXNMZW5ndGhBY2Nlc3MocHJvcGVydHlO
YW1lLnVpZCgpID09IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgp
KQorICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhjb2RlQmxvY2sgJiYgcHJvcGVydHlOYW1lLnVpZCgp
ID09IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGguaW1wbCgpKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKGJhc2UucGF5bG9hZEdQUigpICE9IHZhbHVlLnRhZ0dQUigpKTsKIH0K
QEAgLTEyMCw2ICsxMjgsMzcgQEAgdm9pZCBKSVRHZXRCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYQogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIG1faXNMZW5ndGhBY2Nlc3MgPyBJbmxp
bmVBY2Nlc3M6OnNpemVGb3JMZW5ndGhBY2Nlc3MoKSA6IElubGluZUFjY2Vzczo6c2l6ZUZvclBy
b3BlcnR5QWNjZXNzKCkpOwogfQogCisKKyNpZiBVU0UoSlNWQUxVRTY0KQorc3RhdGljIHZvaWQg
Z2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKEpJVCYgaml0LCBHUFJSZWcgc3R1YkluZm9HUFIs
IEdQUlJlZyBiYXNlLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAg
ICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2Fk
UHJvcGVydHkoYmFzZSwgc2NyYXRjaCwgSlNWYWx1ZVJlZ3MgeyByZXN1bHQgfSk7CisgICAgYXV0
byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBza2lwSW5saW5lQWNjZXNzLmxpbmsoJmpp
dCk7CisgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7CisKKyAgICBmaW5pc2hlZC5saW5rKCZqaXQpOworfQorCit2b2lkIEpJVEdldEJ5SWRHZW5l
cmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQg
c3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRD
b2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7
CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgZ2Vu
ZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzY3JhdGNoLCBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwo
KTsKK30KKyNlbmRpZgorCiBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OkpJVEdldEJ5SWRX
aXRoVGhpc0dlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlwZSBqaXRU
eXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0
IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZpZXIsIEpT
VmFsdWVSZWdzIHZhbHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB0aGlzUmVncywg
R1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTM4LDYgKzE3NywyMCBAQCB2b2lkIEpJVEdldEJ5SWRX
aXRoVGhpc0dlbmVyYXRvcjo6Z2VuZXJhCiAgICAgZ2VuZXJhdGVGYXN0Q29tbW9uKGppdCwgSW5s
aW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxV
RTY0KQordm9pZCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5m
b0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBl
KSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50
KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNz
KGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNl
LCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6c2NyYXRjaCwgQmFzZWxpbmVHZXRC
eUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwo
KTsKK30KKyNlbmRpZgorCiBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9y
KAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwg
SlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIApA
QCAtMTQ5LDYgKzIwMiwzNiBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yOjpKSVRQdXRCeUlkR2VuZXJh
dG9yCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycy5jbGVhcihzY3JhdGNoKTsKIH0KIAor
I2lmIFVTRShKU1ZBTFVFNjQpCit2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBz
dHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9q
aXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENv
bnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisKKyAgICBHUFJSZWcgYmFzZSA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBHUFJSZWcgc2NyYXRjaDIgPSBCYXNlbGlu
ZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIEdQUlJlZyB2YWx1ZSA9IEJhc2VsaW5l
UHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRv
bmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nl
c3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJ
bmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNl
bGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5zdG9yZVByb3BlcnR5KEpTVmFsdWVSZWdz
IHsgdmFsdWUgfSwgYmFzZSwgc2NyYXRjaCwgc2NyYXRjaDIpOworICAgIGF1dG8gZmluaXNoZWQg
PSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGpp
dC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAg
ZmluaXNoZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRp
ZgorCiB2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3Nl
bWJsZXImIGppdCkKIHsKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nlc3M6
OnNpemVGb3JQcm9wZXJ0eVJlcGxhY2UoKSk7CkBAIC0yMDAsNyArMjgzLDcgQEAgdm9pZCBKSVRE
ZWxCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwo
KTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZv
LT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNv
ZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9
IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAg
IG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtMjM2LDcgKzMxOSw3IEBAIHZvaWQgSklURGVsQnlJ
ZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGEKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAg
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9z
dHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0
dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRy
KCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNl
CiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2Rv
bmUgPSBqaXQubGFiZWwoKTsKQEAgLTI3MCw3ICszNTMsNyBAQCB2b2lkIEpJVEluQnlWYWxHZW5l
cmF0b3I6OmdlbmVyYXRlRmFzdFBhCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1Yklu
Zm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5m
by0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwg
SklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAg
ICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0g
aml0LmxhYmVsKCk7CkBAIC0zMDAsNiArMzgzLDM0IEBAIHZvaWQgSklUSW5CeUlkR2VuZXJhdG9y
OjpnZW5lcmF0ZUZhc3RQYXQKICAgICBnZW5lcmF0ZUZhc3RDb21tb24oaml0LCBJbmxpbmVBY2Nl
c3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCit2
b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKEpJ
VCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0dWJJbmZvR1BSKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKTsKKworICAgIG1fc3Rh
cnQgPSBqaXQubGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29uc3RhbnQoc3R1YkluZm8sIHN0dWJJ
bmZvR1BSKTsKKworICAgIEdQUlJlZyBiYXNlID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJh
c2U7CisgICAgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7
CisgICAgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsK
KworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKworICAgIGppdC5sb2FkMzIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2gpOworICAgIGF1dG8gc2tpcElubGluZUFjY2VzcyA9IGppdC5icmFuY2gzMihDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUo
KSkpOworICAgIGppdC5ib3hCb29sZWFuKHRydWUsIEpTVmFsdWVSZWdzIHsgcmVzdWx0IH0pOwor
ICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vzcy5s
aW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRp
bmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUgPSBqaXQu
bGFiZWwoKTsKK30KKyNlbmRpZgorCiBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpKSVRJbnN0YW5j
ZU9mR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUs
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LAogICAg
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
dmFsdWUsIEdQUlJlZyBwcm90b3R5cGUsIEdQUlJlZyBzdHViSW5mb0dQUiwKQEAgLTMzMiw3ICs0
NDMsNyBAQCB2b2lkIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6OmdlbmVyYXRlRmFzCiAgICAgbV9z
dGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBl
KSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHVi
SW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAg
ICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRp
bmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRj
aGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0zNjgsNyArNDc5LDcg
QEAgdm9pZCBKSVRHZXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UAogICAgIG1fc3RhcnQg
PSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0VHlwZSkpIHsK
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fc3R1YkluZm8p
LCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAgICAgICAgaml0
LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRy
VGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQucGF0Y2hhYmxl
SnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtNDA1LDcgKzUxNiw3IEBAIHZv
aWQgSklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFAKICAgICBtX3N0YXJ0ID0gaml0
LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUpKSB7CiAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJbmZvKSwgbV9z
dHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6
QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAgIGppdC5mYXJK
dW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7
CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAo
KTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTQ0MCw3ICs1NTEsNyBAQCB2b2lkIEpJ
VFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcjo6Z2VuCiAgICAgbV9zdGFydCA9IGppdC5sYWJl
bCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1Yklu
Zm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
Q29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAg
IH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAg
ICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyODMxMDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVk
ZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkpJVE9wZXJhdGlvblZhbGlkYXRpb24uaCIKICNp
bmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1
ZGUgIlB1dEtpbmQuaCIKQEAgLTM4LDExICszOSwxMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFz
cyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNpdGVJbmRleDsKIGNsYXNzIENvZGVC
bG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOworc3RydWN0IFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhfdDsK
IGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorc3Ry
dWN0IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVy
cyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IEdQUkluZm86OnJlZ1QxOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKwor
c3RydWN0IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVn
IHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lRW51bWVyYXRvckdl
dEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BS
SW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJ
bmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZv
OjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86
OnJlZ1QyOworICAgIC8vIFdlIHJlbHkgb24gdGhpcyB3aGVuIGxpbmtpbmcgYSBDb2RlQmxvY2sg
YW5kIGluaXRpYWxpemluZyByZWdpc3RlcnMgZm9yIGEgR2V0QnlWYWwgU3R1YkluZm8uCisgICAg
c3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UpOwor
ICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6
cHJvcGVydHkpOworICAgIHN0YXRpY19hc3NlcnQocmVzdWx0ID09IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgc3RhdGljX2Fzc2VydChzdHViSW5mbyA9PSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbyk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKK307CisKK3N0cnVjdCBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQ
UkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5m
bzo6YXJndW1lbnRHUFIyOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHByb3RvID0gR1BS
SW5mbzo6YXJndW1lbnRHUFIzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
ID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gxID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMiA9IEdQUkluZm86Om5vbkFyZ0dQUjE7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHkgPSBHUFJJbmZv
OjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lz
dGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eSA9PSBCYXNlbGluZUdldEJ5
VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDI7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgZG9udENsb2JiZXJSZWdpc3RlciA9IEdQUkluZm86OnJl
Z1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgdGhpc1ZhbHVlID0gR1BSSW5mbzo6cmVnVDE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3Qg
QmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJl
c3VsdCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBCYXNl
bGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQdXRC
eUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjpy
ZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJl
Z1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZvOjpyZWdU
MjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86OnJlZ1Q0
OworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnMgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BS
UmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVQcml2
YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBicmFuZCA9IEdQUklu
Zm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9PSBCYXNlbGluZUdldEJ5VmFsUmVn
aXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJyYW5kID09IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKyNlbmRpZgorCiBjbGFzcyBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvciB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoKSB7
IH0KQEAgLTYyLDEyICsxNzIsMTggQEAgcHVibGljOgogICAgIHZvaWQgZmluYWxpemUoCiAgICAg
ICAgIExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwgTGlua0J1ZmZlciYgc2xvd1BhdGhM
aW5rQnVmZmVyLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4gc3RhcnQpOwotICAgIAorCisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsK
KworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIG1fdW5saW5rZWRTdHViSW5mbyB7IG51
bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4IHsg
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisKIHByb3RlY3RlZDoKLSAg
ICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogICAgIFN0
cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCitwdWJsaWM6CisgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZG9uZTsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJlZ2luOwogICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOwpAQCAtOTgsNyArMjE0LDcgQEAgcHJvdGVjdGVkOgog
ICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVlUmVncyBtX3ZhbHVlOwogCi0gICAg
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CitwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0xMTEsNiArMjI3LDcgQEAgcHVibGlj
OgogICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHN0
dWJJbmZvR1BSLCBBY2Nlc3NUeXBlKTsKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgo
TWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwog
CiBwcml2YXRlOgogICAgIGJvb2wgbV9pc0xlbmd0aEFjY2VzczsKQEAgLTEyNCw2ICsyNDEsNyBA
QCBwdWJsaWM6CiAgICAgICAgIENvZGVCbG9jayosIEpJVFR5cGUsIENvZGVPcmlnaW4sIENhbGxT
aXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWNoZWFibGVJZGVu
dGlmaWVyLAogICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNW
YWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKKyAgICB2b2lkIGdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50
LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fz
c2VtYmxlciYpOwogfTsKIApAQCAtMTMyLDEwICsyNTAsMTEgQEAgcHVibGljOgogICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CiAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yKAot
ICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4LCBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FjaGVhYmxlSWRlbnRpZmllciwgSlNW
YWx1ZVJlZ3MgYmFzZSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5m
b0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRLaW5kKTsKKyAgICAgICAgQ29kZUJs
b2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCwgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCisgICAgICAgIEpTVmFsdWVS
ZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBz
Y3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQ
YXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwgR1BSUmVnIHN0dWJJbmZvR1BS
KTsKICAgICAKICAgICBWX0pJVE9wZXJhdGlvbl9HU3NpSkpDIHNsb3dQYXRoRnVuY3Rpb24oKTsK
IApAQCAtMTYzLDExICsyODIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7
CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1w
OwogfTsKIApAQCAtMTkxLDggKzMwOCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVG
YXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xv
d1BhdGhKdW1wOwogfTsKIApAQCAtMjE2LDggKzMzMSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
Z2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVK
dW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjQxLDggKzM1NCw2IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRlOgot
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQ
YXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjU1LDYgKzM2Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJl
ZyBzdHViSW5mb0dQUik7CiAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJs
ZXImKTsKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNp
Z25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogfTsKIAogY2xhc3Mg
SklUSW5zdGFuY2VPZkdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvciB7CkBAIC0yNzcsOCArMzg5LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZShM
aW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtCdWZmZXImIHNsb3dQYXRoTGlua0J1
ZmZlcik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBA
IC0zMDIsMTEgKzQxMiw5IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGdlbmVyYXRlRmFzdFBh
dGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKICAgICBKU1ZhbHVlUmVncyBtX2Jhc2U7
CiAgICAgSlNWYWx1ZVJlZ3MgbV9yZXN1bHQ7CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
bV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Nsb3dQYXRoSnVt
cDsKIH07CiAKQEAgLTMzMCw4ICs0MzgsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBnZW5l
cmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAg
bV9zbG93UGF0aEp1bXA7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAkocmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwzOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUo
VmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4gc3JjLmlzQ29uc3RhbnQoKSAmJiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworICAgIGlmICghc3JjLmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2Nr
LT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOworfQorCitBTFdBWVNf
SU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3Jj
KQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5pc0ludDMyKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZp
cnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMuaXNDb25zdGFudCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpM
aW5rVGltZUNvbnN0YW50KSB7CisgICAgICAgIC8vIEFsbCBsaW5rIHRpbWUgY29uc3RhbnRzIGFy
ZSBjZWxscy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc0NlbGwoKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJ
VDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJU
KHNyYy5pc0NvbnN0YW50KCkpOwotICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
c3JjKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudCk7CisgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAg
LTE1NiwzNiArMTgxLDM2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRo
RXgKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJ
TkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkK
K3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1
bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVl
R1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQ
UjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogICAgIHJldHVybiBjYWxsOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQordGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVl
R1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNl
bHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0
dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIp
KTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsK
ICNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0
ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpCisgICAg
aWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiB9CiAK
QEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpoYXNBbnlTbG93Q2Fz
ZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRDaGVja3BvaW50KCkKIHsKICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1f
Ynl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0
aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1f
dW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hl
Y2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAog
ICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxzLmFkZChtX2J5dGVjb2RlSW5kZXgs
IGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGluZSB2b2lkIEpJVDo6YWR2YW5jZVRv
TmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVj
a3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJ
bmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBB
U1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hl
Y2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gaXRlciA9IG1fY2hlY2twb2ludExh
YmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMsMjkgKzMxOCwyOSBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBK
SVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewotICAgIHJl
dHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5n
KCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgo
KSA9PSAxOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQo
c3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChzcmMpLmFzQ2Vs
bCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2Zp
bGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAgIEFTU0VSVChzaG91bGRFbWl0UHJvZmlsaW5n
KCkpOwogCi0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29uZmlndXJhdGlvbjogb25seSBvbmUg
YnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAotICAgIC8vIHN0b3JlLgotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgdmFsdWVQcm9maWxlLm1fYnVj
a2V0cyk7Ci0jZWxzZQogICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBi
aXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS5tX2J1Y2tl
dHMpOwogICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCAmZGVzY3JpcHRvci0+YXNCaXRz
LnBheWxvYWQpOwogICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCksICZkZXNjcmlwdG9yLT5hc0Jp
dHMudGFnKTsKLSNlbmRpZgogfQorI2VuZGlmCiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5s
aW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6
bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
Z1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCkBAIC0z
MjMsNDEgKzM0OCwzNyBAQCBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVj
CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNv
ZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBKU1ZhbHVlUmVn
cyB2YWx1ZSkKKyNpZiBVU0UoSlNWQUxVRTY0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+
CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUm
IGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKIHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9m
aWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUodmFs
dWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSwgdmFs
dWUpOwotfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSwgR1BSUmVnIHJlc3VsdFJl
ZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZhbHVlUHJvZmlsZSwgSlNWYWx1ZVJl
Z3MocmVzdWx0UmVnKSk7CisgICAgcHRyZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJv
ZmlsZU9mZnNldEZvcjxCeXRlY29kZT4obV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBW
YWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKTsKKyAgICBzdG9yZTY0KHZhbHVlLmdw
cigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShN
ZXRhZGF0YSYgbWV0YWRhdGEsIEdQUlJlZyByZXN1bHRSZWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBC
eXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBC
eXRlY29kZSYgYnl0ZWNvZGUsIEdQUlJlZyByZXN1bHRSZWcpCiB7Ci0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CiB9CiAj
ZW5kaWYKIAotaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
UmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSwgUmVnaXN0ZXJJ
RCBzY3JhdGNoR1BSKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgoraW5saW5lIHZvaWQg
SklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUsIFJlZ2lzdGVySUQgY2VsbEdQUiwg
UmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQogewogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKICAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZTMyKHNj
cmF0Y2hHUFIsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsK
KyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIG9mZnNldE9m
QXJyYXlQcm9maWxlKTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBhcnJheVBy
b2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3RlcklEIHNj
cmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICBs
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRk
cmVzcyhhcnJheVByb2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6b2Zmc2V0T2ZMYXN0U2VlblN0cnVj
dHVyZUlEKCkpKTsKLSAgICB9CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5
dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCkgKyBBcnJh
eVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpLCBjZWxsR1BSLCBzY3JhdGNo
R1BSKTsKIH0KIAogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50
SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCkBAIC0zODAsNyArNDAxLDcgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYg
KHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNv
bnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CisgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZElt
bVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxvYWRE
b3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00OTYsNyArNTE3LDcgQEAgaW5saW5l
IHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAogCiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsKKyAgICBpZiAoIWlzS25vd25DZWxs
KHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01MDYsNyArNTI3LDcgQEAgaW5saW5l
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwogCiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklE
IHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbChyZWcpKSB7CisgICAg
aWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQog
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQpAQCAtNTE0LDEx
ICs1MzUsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTCiAgICAg
fQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0
dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMyX3QmIGNvbnN0YW50KQogewogICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBAIC01NDQsMTEgKzU2MCwxMSBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgQVNTRVJUKG1fYnl0
ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcg
aG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQu
CiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdW1i
ZXIoKSkKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSkpLCBkc3QpOwotICAgICAgICBlbHNlCisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5pc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKKyAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwog
ICAgICAgICAgICAgbW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3Qp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01NjYsMTEgKzU4Miw2IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMuaXNDb25z
dGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQogQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
ZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRz
dCkpOwpAQCAtNTk1LDcgKzYwNiw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd0Nhc2UKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0ZXIgdlJlZykKIHsKLSAgICBpZiAo
IW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbCh2UmVnKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKHZS
ZWcpKQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIApAQCAt
NjM3LDMwICs2NDgsNyBAQCBBTFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3Qg
CiB7CiAgICAgaWYgKHRhcmdldCkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICByZXR1cm4g
bV9jb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotfQotCi1BTFdB
WVNfSU5MSU5FIEdldFB1dEluZm8gSklUOjpjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSBi
eXRlY29kZSkKLXsKLSAgICB1bnNpZ25lZCBrZXkgPSBieXRlY29kZS5tX21ldGFkYXRhSUQgKyAx
OyAvLyBIYXNoTWFwIGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5Ci0gICAgYXV0byBpdGVyYXRvciA9
IG1fY29waWVkR2V0UHV0SW5mb3MuZmluZChrZXkpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX2Nv
cGllZEdldFB1dEluZm9zLmVuZCgpKQotICAgICAgICByZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRv
ci0+dmFsdWUpOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKS5tX2dldFB1dEluZm87Ci0gICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQo
a2V5LCBnZXRQdXRJbmZvLm9wZXJhbmQoKSk7Ci0gICAgcmV0dXJuIGdldFB1dEluZm87Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotQUxXQVlTX0lOTElORSBCaW5hcnlBcml0aFBy
b2ZpbGUgSklUOjpjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3AgYnl0ZWNvZGUpCi17Ci0gICAg
dWludDY0X3Qga2V5ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQp
ICsgMSkgPDwgMzIgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZWNvZGUubV9tZXRhZGF0YUlE
KTsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmZpbmQoa2V5KTsK
LSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRBcml0aFByb2ZpbGVzLmVuZCgpKQotICAgICAg
ICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSBhcml0aFBy
b2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0g
ICAgbV9jb3BpZWRBcml0aFByb2ZpbGVzLmFkZChrZXksIGFyaXRoUHJvZmlsZSk7Ci0gICAgcmV0
dXJuIGFyaXRoUHJvZmlsZTsKKyAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+b3V0T2ZM
aW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpA
QCAtNjgxLDYgKzY2OSw2MCBAQCBBTFdBWVNfSU5MSU5FIEVDTUFNb2RlIEpJVDo6ZWNtYU1vZGU8
T3BQCiAgICAgcmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZFB0ckZyb21NZXRhZGF0
YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQp
Cit7CisgICAgbG9hZFB0cihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG1fdW5saW5rZWRDb2RlQmxv
Y2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCks
IHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmxvYWQzMkZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUs
IHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZDMyKEFkZHJlc3Moc19t
ZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFk
YXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZDhGcm9tTWV0YWRh
dGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcgcmVzdWx0
KQoreworICAgIGxvYWQ4KEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9j
ay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwg
cmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQnl0
ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9yZThUb01ldGFkYXRhKFZhbHVlVHlw
ZSB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qgb2Zmc2V0KQoreworICAg
IHN0b3JlOCh2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2Nr
LT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6c3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNv
ZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmUzMih2YWx1ZSwgQWRkcmVzcyhzX21ldGFk
YXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFU
YWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVj
b2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90IG9mZnNldCwgR1BSUmVnIHJlc3Vs
dCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFk
YXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIG9mZnNldCksIHNfbWV0YWRh
dGFHUFIsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb25zdGFu
dChKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50SW5kZXgsIEdQUlJlZyByZXN1bHQp
Cit7CisgICAgbG9hZFB0cihBZGRyZXNzKHNfY29uc3RhbnRzR1BSLCBzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KGNvbnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBsb2FkQ29u
c3RhbnQobV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFu
dCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0
YW50KCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0
T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2Yodm9pZCopKSwgcmVz
dWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAko
cmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1
Y3R1cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxv
Y2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIEFsbG9jYXRvciBh
bGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpTRmluYWxPYmpl
Y3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZF
eGlzdHMpOwpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCks
IHN0cnVjdHVyZSk7CkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJp
ZGVzX2hhc19pbnN0YW5jZQogICAgIGVtaXRMb2FkUGF5bG9hZChoYXNJbnN0YW5jZVZhbHVlLCBy
ZWdUMCk7CiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0lu
c3RhbmNlIHdvdWxkIGRvLgogICAgIEp1bXAgaGFzSW5zdGFuY2VWYWx1ZU5vdENlbGwgPSBlbWl0
SnVtcElmTm90SlNDZWxsKGhhc0luc3RhbmNlVmFsdWUpOwotICAgIEp1bXAgY3VzdG9taGFzSW5z
dGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xG
dW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwog
CiAgICAgLy8gV2Uga25vdyB0aGF0IGNvbnN0cnVjdG9yIGlzIGFuIG9iamVjdCBmcm9tIHRoZSB3
YXkgYnl0ZWNvZGUgaXMgZW1pdHRlZCBmb3IgaW5zdGFuY2VvZiBleHByZXNzaW9ucy4KICAgICBl
bWl0TG9hZFBheWxvYWQoY29uc3RydWN0b3IsIHJlZ1QwKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RyCiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHByb3RvKTsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAg
ICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAogICAg
ICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIHJl
Z1QwLCAvLyByZXN1bHQKICAgICAgICAgcmVnVDIsIC8vIHZhbHVlCkBAIC0xOTYsNyArMTk2LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7CiAg
ICAgZW1pdExvYWRUYWcocHJvdG8sIHJlZ1QzKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMCwgcmVnVDIpLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDEpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QwLCByZWdUMiksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMik7CiAgICAgZW1p
dExvYWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDQsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdU
MykpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgbV9wcm9m
aWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKICAgICBlbWl0U3RvcmVCb29sKGRz
dCwgcmV0dXJuVmFsdWVHUFIpOwogfQogICAgIApAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAgICAKICAgICBpc01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMSk7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAt
Mzc4LDcgKzM3OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnMK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZSA9IGJ5dGVjb2RlLm1fbmFtZTsKICAgICBlbWl0TG9h
ZFBheWxvYWQoZnVuYywgcmVnVDEpOwogICAgIGVtaXRMb2FkKG5hbWUsIHJlZ1QzLCByZWdUMik7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTQwOCw3ICs0MDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29u
c3QgSW5zdHJ1Y3RpCiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgR1BSUmVnIHNj
cmF0Y2gyID0gcmVnVDM7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00
MjIsNyArNDIyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpbwog
ICAgIEpTVmFsdWVSZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gx
ID0gcmVnVDI7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7Ci0gICAgYWRkSnVtcChicmFu
Y2hJZlRydXRoeSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCB2
YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNyw3ICs0MzcsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAgICBKdW1wIGlzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihF
cXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJl
Z1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWdu
ID0ganVtcCgpOwogCkBAIC00NjMsNyArNDYzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9u
dWxsKGNvbnN0IEluc3RydQogCiAgICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNO
b3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTUxOSw3ICs1MTksNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9qZXFfcHRyKGNvbnN0IEluc3RydWN0CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50
ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7CiAgICAg
QVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKQEAgLTU2NywxMyArNTY3LDEzIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBnZW5lcmljQ2FzZS5h
cHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBy
ZWdUMCwgcmVnVDIpOwogICAgIHN0b3JlUmVzdWx0LmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8g
R2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7
IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSk7CiAKICAgICBzdG9yZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIGVtaXRTdG9yZUJv
b2woZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC02MDYsMTQgKzYwNiwxNCBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJy
YW5jaElmTm90U3RyaW5nKHJlZ1QyKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCByZWdUMCwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmluZ0VxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJl
Z1QyKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxl
T3BFcVR5cGU6OkVxID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdl
dCk7CiAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAg
ICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAg
Z2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBpbGVPcEVxVHlwZTo6RXEg
PyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFyZ2V0KTsKIAogICAgIGRv
bmUubGluayh0aGlzKTsKQEAgLTY1OCwxMyArNjU4LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RT
dHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJl
Z1QwLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwogICAg
IHN0b3JlUmVzdWx0LmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAg
IGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBn
ZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBz
dG9yZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZXR1
cm5WYWx1ZUdQUik7CkBAIC03NzcsNyArNzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pz
dHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNzg3LDcgKzc4
Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsK
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIp
LCB0YXJnZXQpOwogfQogCkBAIC04MDYsNyArODA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFf
bnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBh
cmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7CkBAIC04MzgsNyArODM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251
bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmUz
MihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7CkBAIC04NjEsNyArODYxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3co
Y29uc3QgSW5zdHJ1Y3RpbwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7CiAg
ICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BF
bnRyeUZyYW1lKTsKICAgICBlbWl0TG9hZChieXRlY29kZS5tX3ZhbHVlLCByZWdUMSwgcmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAg
ICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKIH0KIApAQCAtODc3LDcgKzg3Nyw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnKSkpOwogICAgIGlzSW50MzIubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBp
ZiAoc3JjICE9IGRzdCkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0K
QEAgLTg5OSw3ICs4OTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IElu
c3RyCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoYXJndW1lbnRWYWx1ZVJlZ3Ms
IHJlZ1QyKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBp
ZiAoc3JjICE9IGRzdCkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0K
QEAgLTkzMCw3ICs5MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5z
dHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBpZiAo
c3JjICE9IGRzdCkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAg
LTk0Niw3ICs5NDYsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rp
bwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQo
KSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxw
dHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKCkp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91
bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFdoZW4gdGhlIExMSW50IHRocm93cyBh
biBleGNlcHRpb24sIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFkeSB0aWVyZWQg
dXAKKyAgICAvLyB0aGUgc2FtZSBDb2RlQmxvY2sgdG8gYmFzZWxpbmUsIGFuZCB3ZSdsbCBjYXRj
aCB0aGUgZXhjZXB0aW9uIGluIHRoZSBiYXNlbGluZSBKSVQgKGJlY2F1c2UKKyAgICAvLyB3ZSB1
cGRhdGVkIHRoZSBleGNlcHRpb24gaGFuZGxlcnMgdG8gcG9pbnQgaGVyZSkuIEJlY2F1c2UgdGhl
IExMSW50IHVzZXMgYSBkaWZmZXJlbnQgdmFsdWUKKyAgICAvLyBpbnNpZGUgc19jb25zdGFudHNH
UFIsIHRoZSBjYWxsZWUgc2F2ZXMgd2UgcmVzdG9yZSBhYm92ZSBtYXkgbm90IGNvbnRhaW4gdGhl
IGNvcnJlY3QgcmVnaXN0ZXIuCisgICAgLy8gU28gd2UgcmVwbGVuaXNoIGl0IGhlcmUuCisgICAg
eworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0
T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29k
ZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNH
UFIpOworICAgIH0KIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
blJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwogICAgIEp1bXAg
aXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVH
UFIpOwpAQCAtOTY5LDcgKzk4MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IElu
c3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8g
dGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZm
ZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0
cygpKTsKQEAgLTEwMTEsOCArMTAyMiw4IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0o
Y29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9z
Y3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0
aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2lt
cGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9wcm9maWxlZENvZGVCbG9j
ay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4
LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRh
YmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCkBAIC0xMDM4LDEzICsxMDQ5LDEz
IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3QKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVh
dGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2gg
c3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwot
ICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1
bmxpbmtlZFRhYmxlID0gbV9wcm9maWxlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hS
ZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hS
ZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlu
a2VkVGFibGUpOwogCiAgICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgbV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJs
ZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4LCB1bmxpbmtl
ZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiB9
CiAKQEAgLTEwNTYsMTMgKzEwNjcsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmlu
Zyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3Nj
cnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRp
b25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJp
bmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRU
YWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2Zp
bGVkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFi
bGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJs
ZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3Ry
aW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAK
ICAgICBlbWl0TG9hZChzY3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRh
Zyk7CiB9CiAKQEAgLTEwODMsNyArMTA5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNv
bnN0IEluc3RydWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBKSVQgY29kZSBkb2Vzbid0IHVzZSB0
aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAg
c3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8v
IG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBmb3IgKGlu
dCBpID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVn
aXN0ZXJzKCk7IGkgPCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCisgICAgZm9yIChpbnQg
aSA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpOyBpIDwgbV9wcm9maWxlZENvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCiAgICAgICAg
IGVtaXRTdG9yZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwganNVbmRlZmluZWQoKSk7CiAK
ICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX2VudGVyKTsKQEAgLTExMDIsNyArMTExMyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwogICAgIFdyaXRlQmFycmll
ckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7
CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKQEAgLTExMzcsNyArMTE0OCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKIHZvaWQgSklUOjplbWl0
X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwog
ICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0
cnVjdHVyZUlEOwogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIgPSBieXRlY29kZS5t
X3NyY0RzdDsKIApAQCAtMTE2MCw3ICsxMTcxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tf
dGR6KGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFR5cGVMb2NhdGlv
biogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVn
aXN0ZXI7CiAKQEAgLTEyNTQsNyArMTI2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFk
b3dfY2hpY2tlbl90YWkKICAgICBlbWl0TG9hZFRhZyhieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVn
VDEpOwogICAgIEpTVmFsdWVSZWdzIHRoaXNSZWdzKHJlZ1QxLCByZWdUMik7CiAgICAgZW1pdExv
YWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCByZWdUMywgbV9jb2RlQmxvY2ss
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgcmVnVDMsIFRydXN0ZWRJbW1QdHIo
bV9wcm9maWxlZENvZGVCbG9jayksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMSArNTQsMTQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKgogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0g
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAg
ICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7Ci0gICAgICAg
IGVsc2UKKyAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5
VW5saW5rZWRDb2RlQmxvY2soc3JjKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1f
dW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiAgICAgICAgICAgICBzdG9yZTY0
KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDAp
OworICAgICAgICAgICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAg
fQorCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg3LDM3ICs5MCwzNSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0
cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFs
bG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxsb2NhdG9y
IGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9i
amVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lz
dGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0g
cmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKIAotICAgIGlmICgh
YWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVsc2UgewotICAg
ICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3Rl
ZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVn
LCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0g
ICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JGZW5jZSgqbV92bSk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUo
KSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpLCBhbGxvY2F0
b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3T2JqZWN0OjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHN0cnVjdHVyZVJlZyk7CisKKyAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51
bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9y
Ojp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBzY3Jh
dGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1
Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBlbWl0SW5p
dGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKKyAgICBtdXRhdG9y
RmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
OworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMzsKKwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7
Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAm
dm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwogICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTEzMSw3ICsxMzIsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdl
IGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBjdXN0b21o
YXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5
bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBKdW1w
IGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRy
ZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fZnVuY3Rpb25Qcm90
b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24pKSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CiAKQEAgLTE1NCwzMCArMTU2LDM4IEBAIHZvaWQgSklU
OjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVj
b2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHBy
b3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1
c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJz
dCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm90bywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9HUFIg
PSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVy
czo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUdQ
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9HUFIpOwogICAgIAog
ICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxs
IC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5j
ZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIsIHZhbHVlKTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8vIHJl
c3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3RvCi0g
ICAgICAgIHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIHJlc3VsdEdQ
UiwKKyAgICAgICAgdmFsdWVHUFIsCisgICAgICAgIHByb3RvR1BSLAorICAgICAgICBzdHViSW5m
b0dQUiwKKyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMSwgQmFz
ZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRT
bG93Q2FzZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCisKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTE5MiwxNCArMjAyLDEzIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAgICAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplOwotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9m
T3B0aW1pemUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgcmVnVDIsIHJl
Z1QxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOwotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgc3RhdGljX2Fz
c2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvID09IGFyZ3VtZW50R1BS
MSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVl
ID09IGFyZ3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9w
ZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCByZXN1bHRWUmVnLCBhcmd1bWVu
dEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQpAQCAtMjQw
LDcgKzI0OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KIAog
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMSwgcmVnVDApOwogCkBAIC0zODMsOSArMzkyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0
KGNvbnN0IEluc3RydWN0aW9uKgogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmV0X2hhbmRsZXJH
ZW5lcmF0b3IoVk0mIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJikKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7CiAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRM
aXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKQEAgLTQxMSw3ICs0MjAs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiAKICAgICBpZiAo
ZHN0ICE9IHNyYykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtNDM0LDkgKzQ0MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
b19wcm9wZXJ0eV9rZXkoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCByZWdUMSk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIGFyZ3VtZW50R1BSMik7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0RnVuY3Rpb25OYW1lLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIy
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC00NjUsOCArNDc0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxz
ZShjb25zdCBJbnN0cnVjdGkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJl
Z1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2
YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJn
ZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBhZGRKdW1w
KGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFy
Z2V0KTsKQEAgLTQ4MCw3ICs0OTEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgog
ICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGds
b2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMSA9IHJlZ1QxOwpAQCAtNTE5LDcgKzUzMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9u
dWxsKGNvbnN0IEluc3RydWMKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgSnVt
cCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAs
IHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBh
ZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xv
YmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwogCkBAIC01NDMsNyArNTU0LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydQogICAgIC8vIEZpcnN0LCBoYW5kbGUg
SlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0
cnVjdHVyZS4KICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKSwgdGFyZ2V0KTsKICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwg
cmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFk
ZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRp
YXRlID0ganVtcCgpOwogCkBAIC01ODMsMjYgKzU5NCwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
ZXFfcHRyKGNvbnN0IEluc3RydWN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXFQdHI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3Bl
cmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50
ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSksIHRhcmdldCk7CisgICAg
bG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QxKTsK
KyAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7
Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29k
ZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKLSAg
ICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOworICAgIGxv
YWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7Cisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVn
VDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BK
bmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KQEAgLTYzNyw4ICs2NDUsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElm
VHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9i
YWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJl
Z3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNl
bHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjUyLDcgKzY2Miw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CkBAIC03MDcsNyArNzE3LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsK
ICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzIzLDcgKzczNCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICNpZiBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIHsKLSAgICBKSVQgaml0KHZt
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHRocm93blZh
bHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtNzMyLDcgKzc0Myw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIAogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNf
UkVHSVNURVJTID4gMAogICAgIGppdC5sb2FkUHRyKCZ2bS50b3BFbnRyeUZyYW1lLCBhcmd1bWVu
dEdQUjApOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlckltcGwoYXJndW1lbnRHUFIwKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYXJndW1lbnRHUFIwKTsKICNlbmRpZgogCiAgICAgY29uc3Rl
eHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CkBAIC05MjAsNyArOTMx
LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBy
ZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiB9CiAKQEAgLTkzMCw3ICs5NDIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Mik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTk0Myw3ICs5NTYsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1CiAgICAgCiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcp
CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05NjMsNyAr
OTc2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cgogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAgICAgaXNCaWdJbnQubGluayh0
aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05OTAsNyArMTAwMyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkp
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdU
MCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTEwMDUsNyArMTAxOCwxOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZN
OjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJh
bWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAg
Ly8gV2hlbiB0aGUgTExJbnQgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlcmUgaXMgYSBjaGFuY2Ug
dGhhdCB3ZSd2ZSBhbHJlYWR5IHRpZXJlZCB1cAorICAgIC8vIHRoZSBzYW1lIENvZGVCbG9jayB0
byBiYXNlbGluZSwgYW5kIHdlJ2xsIGNhdGNoIHRoZSBleGNlcHRpb24gaW4gdGhlIGJhc2VsaW5l
IEpJVCAoYmVjYXVzZQorICAgIC8vIHdlIHVwZGF0ZWQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVycyB0
byBwb2ludCBoZXJlKS4gQmVjYXVzZSB0aGUgTExJbnQgdXNlcyBhIGRpZmZlcmVudCB2YWx1ZQor
ICAgIC8vIGluc2lkZSBzX2NvbnN0YW50c0dQUiwgdGhlIGNhbGxlZSBzYXZlcyB3ZSByZXN0b3Jl
IGFib3ZlIG1heSBub3QgY29udGFpbiB0aGUgY29ycmVjdCByZWdpc3Rlci4KKyAgICAvLyBTbyB3
ZSByZXBsZW5pc2ggaXQgaGVyZS4KKyAgICB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEoKSksIHJlZ1QwKTsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJVERhdGE6Om9mZnNldE9mSklUQ29u
c3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7CisgICAgfQogCiAgICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0
Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0xMDIzLDIzICsxMDQ3LDExIEBAIHZv
aWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0
eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsK
LSAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgJnZt
KCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1
ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOworICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVl
UHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7CiAgICAgYXV0byBza2lw
T1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0
aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYg
KGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7Ci0gICAg
ICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSwgcmVn
cyk7Ci0gICAgICAgIH0pOwotICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIApA
QCAtMTA2NSw4ICsxMDc3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJ
bnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5l
ZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0
cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRT
aW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNo
ZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1
bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5z
dXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEwOTMsMTMgKzExMDUsMTQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1w
IHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1l
bnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2lt
cGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1w
VGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0
YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6
Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJs
ZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgdGFibGVJbmRl
eCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1
dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlw
ZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUu
bV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0K
IApAQCAtMTExMSwyMCArMTEyNCwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5n
KGNvbnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2Ny
dXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlv
bnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmlu
Z0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRh
YmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxl
SW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJp
bmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVu
dEdQUjEsIHRhYmxlSW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNo
UHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlYnVnPigpOwotICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJS
ZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkpLCByZWdUMCk7CiAgICAgSnVtcCBu
b0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2Rl
Lm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwpA
QCAtMTE0NSw3ICsxMTYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0
cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
CkBAIC0xMTYwLDcgKzExNzUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IElu
c3RydWN0CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE3
OCw3ICsxMTkyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Ywog
CiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVn
VDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBA
IC0xMjAwLDEyICsxMjE0LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3Ry
dWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlh
bGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJz
LCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRp
bWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgc2l6ZV90IGNvdW50ID0gbV9jb2Rl
QmxvY2stPm51bVZhcnMoKTsKKyAgICBzaXplX3QgY291bnQgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT5udW1WYXJzKCk7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGZvciAoc2l6
ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxS
ZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCiAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVC
bG9jayk7CisgICAgCisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QwKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwKTsKIAogICAgIGVtaXRF
bnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAjZWxzZQpAQCAtMTIyNCw3ICsxMjQwLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9w
X2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewotICAgIEpJVCBqaXQodm0pOworICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJl
Z2lzdGVyczo6ZWJwKTsKQEAgLTEzMjIsMjMgKzEzMzgsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRT
dHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1
cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BUb1RoaXM6
Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1QyKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlOwotICAgIFdyaXRlQmFycmllckJh
c2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAg
ICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRh
UmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKQEAgLTEzNTQs
NyArMTM2Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKICAg
ICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9m
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFBy
b3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwg
YWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9u
UmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rp
b246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKIAotICAgIGxvYWRQdHIoY2FjaGVkRnVu
Y3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcENyZWF0ZVRoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZENhbGxlZSgpLCBjYWNo
ZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNo
UHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5N
dWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RF
cXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwogICAgIGhhc1NlZW5NdWx0aXBs
ZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzODQsNyArMTM5Niw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwg
cmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVn
cyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEzOTQsNyArMTQwNyw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJl
Z1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVy
blZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qs
IHJldHVyblZhbHVlR1BSKTsKQEAgLTE0MDYsNyArMTQyMCw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJl
Z1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE2LDcgKzE0MzEsOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QyLCBy
ZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0MzAsMTAgKzE0NDYsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOworICAgIGxv
YWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1
cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogfQpAQCAtMTQ0Miw3ICsxNDU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1
cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29w
SGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYm
IG1fdW5saW5rZWRDb2RlQmxvY2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRyID0gdm0oKS5nZXRMb29wSGludEV4
ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBsb2FkUHRyKHB0ciwgcmVnVDAp
OwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaFB0cihCZWxvdywgcmVnVDAs
IFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0
KCkpKTsKQEAgLTE0NTIsNyArMTQ2OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChj
b25zdCBJbnN0cnUKICNlbHNlCiAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYKLSAg
ICAgICAgbW92ZVZhbHVlKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVzdWx0UmVncyk7
CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVzdWx0UmVncy5ncHIoKSk7CiAgICAgICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKQEAgLTE0NjUsOCArMTQ4Miw5
IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKIAogICAgIC8vIEVt
aXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAogICAgIGlmIChjYW5CZU9wdGltaXplZCgp
KSB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZlT3JaZXJv
LCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3Ao
KSksCi0gICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJ
VEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAgICAgICBBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9CiB9CiAKQEAgLTE1MjEs
NyArMTUzOSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1
bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMsIGFyZ3Vt
ZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CkBAIC0xNTM0LDcgKzE1NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2hlY2tfdHJhcHMoY29uc3QgCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfY2hlY2tfdHJhcHNfaGFu
ZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjpl
YnApOwpAQCAtMTU3NiwzNCArMTU5NSwzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhw
KGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cDsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0
YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRHUFIwOworICAg
IGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5W
YWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXROZXdG
dW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
SnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9z
Y29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29w
ZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1f
c2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJn
dW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBt
X2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKKyAgICBh
dXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
Ynl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBh
cmd1bWVudEdQUjIpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dl
bmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRv
ckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVu
dEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Fz
eW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlv
biwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdf
YXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5l
d0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jRXhlYyk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwg
ZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIH0KIH0KIApAQCAt
MTYzMywyMyArMTY1NCwyNCBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0
IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQ
UjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDAp
OworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwog
I2VuZGlmCiAKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2st
PmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CisgICAgYXV0byBjb25zdGFu
dCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhw
ciwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1f
ZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIy
KTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKIAogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZ2VuZXJhdG9y
X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1
bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5j
X2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVuY3Rp
b24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3
X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmN0aW9u
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0
aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgfQogfQog
CkBAIC0xNjc2LDI5ICsxNjk4LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19nZW5l
cmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNTdGFydCA9IGJ5dGVjb2RlLm1fYXJn
djsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsKLSAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJl
Z2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQ
cm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwK
LSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3RhcnQub2Zmc2V0KCkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMik7CisgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5OjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJn
dW1lbnRHUFIyLCBzaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1f
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAgIG1hdGVyaWFsaXplUG9pbnRlcklu
dG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9i
amVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CiAjZWxzZQorICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRl
Y29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRp
b25Qcm9maWxlKCksIHJlZ1QyKTsKICAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdU
MCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmls
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksCi0gICAg
ICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJlZ1Qy
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQogCkBAIC0xNzA2LDggKzE3
MjksMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjbwogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKKyAgICBtX2lzU2hhcmVhYmxlID0gZmFsc2U7CisKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVHlw
ZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZp
cnR1YWxSZWdpc3RlcjsKIApAQCAtMTc4OSwyMCArMTgxNCwyNSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9
IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYg
dGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJl
ZyA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMg
bXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcg
PSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tl
dFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAgICB7CisgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCBy
ZWdpc3Rlci4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CisgICAgICAgIGVu
c3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJl
Zywgc2NyYXRjaDJSZWcpOworICAgIH0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hh
ZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEs
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNW
QUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIG1faXNTaGFyZWFibGUgPSBm
YWxzZTsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJv
ZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2Nr
TG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsKQEAg
LTE4NzIsNyArMTkwMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJ
bnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CiAKICAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg5OCw3ICsxOTI4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVl
UmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CiAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODMxMDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5j
bHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1v
blNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJE
RkdPU1JFbnRyeS5oIgpAQCAtMjg1NSw3ICsyODU2LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxv
Y2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQqIHJlc3VsdCA9IGxpbmtlZFRhYmxl
Lm1fY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwogCkBAIC0yODgwLDcgKzI4ODEsNyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoCiAgICAgSlNWYWx1ZSBr
ZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0gICAgY29uc3QgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwor
ICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPmJhc2Vs
aW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPnVu
bGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1fbWluID09IG1pbik7CiAgICAgdm9p
ZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJbnQzMigpKQpAQCAtMjkwMyw3ICsyOTA0LDcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdm9pZCogcmVzdWx0OwotICAg
IGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxp
bmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNTdHJpbmcoKSkgewogICAgICAgICBTdHJpbmdJbXBs
KiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZhbHVlKGdsb2JhbE9iamVjdCkuaW1wbCgpOwpAQCAt
MjkxOSw3ICsyOTIwLDYgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRj
aAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCi0jaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0yOTcxLDcgKzI5NzEsNiBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc29sdmVkU2NvcGUpOwogfQotI2VuZGlmCiAKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjkwLDkgKzI5MCw3IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHIK
IEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3du
S2V5VHlwZSwgY2hhciosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6
ZV90IHRhYmxlSW5kZXgsIGludDMyX3QgbWluKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgY2hhciosIChWTSosIEVuY29k
ZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgsIGludDMyX3QgbWluKSk7CiBKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlw
ZSwgY2hhciosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRh
YmxlSW5kZXgpKTsKLSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIEpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUsIEVuY29kZWRKU1Zh
bHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwot
I2VuZGlmCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldEZyb21TY29wZSwg
RW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRl
Y29kZVBDKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblB1dFRvU2NvcGUs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBDKSk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUGxhbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAkocmV2aXNpb24gMjgz
MTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQbGFuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODcsNyArODcsMTIgQEAgYXV0byBKSVRQbGFuOjp0aWVyKCkgY29uc3QgLT4gVGll
cgogCiBKSVRDb21waWxhdGlvbktleSBKSVRQbGFuOjprZXkoKQogewotICAgIHJldHVybiBKSVRD
b21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpLCBtX21vZGUp
OworICAgIEpTQ2VsbCogY29kZUJsb2NrOworICAgIGlmIChtX21vZGUgPT0gSklUQ29tcGlsYXRp
b25Nb2RlOjpCYXNlbGluZSkKKyAgICAgICAgY29kZUJsb2NrID0gbV9jb2RlQmxvY2stPnVubGlu
a2VkQ29kZUJsb2NrKCk7CisgICAgZWxzZQorICAgICAgICBjb2RlQmxvY2sgPSBtX2NvZGVCbG9j
ay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIHJldHVybiBKSVRDb21waWxhdGlvbktleShj
b2RlQmxvY2ssIG1fbW9kZSk7CiB9CiAKIGJvb2wgSklUUGxhbjo6aXNLbm93blRvQmVMaXZlQWZ0
ZXJHQygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI4MzEwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDcgKzU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdAog
CiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBheWxvYWQo
Z2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlk
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRp
Zmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgcmVnVDEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03Miw3ICs3
Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QKIAogICAgIGVt
aXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwg
cmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJv
cGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0U2V0dGVyQnlJZCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJl
Z1QxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIG9w
dGlvbnMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTg3LDcgKzg3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaQogICAgIGVtaXRM
b2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVn
VDMpOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1Q0KTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgYXR0cmli
dXRlcywgcmVnVDMsIHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRl
clNldHRlciwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZXMs
IHJlZ1QzLCByZWdUNCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDEsNyArMTAxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogICAgIGVtaXRMb2Fk
UGF5bG9hZChiYXNlLCByZWdUMik7CiAgICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QxLCByZWdU
MCk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
cmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0
dHJpYnV0ZXMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNSw3ICsxMTUs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdExv
YWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEsIHJl
Z1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
YXR0cmlidXRlcywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyMyw3ICsxMjMsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKTsKQEAgLTEzMSw4ICsxMzEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
aWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdExvYWQoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCksIGJh
c2VSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2UsIGJhc2VSZWdzLnRhZ0dQUigpKTsKICAgICBKSVREZWxCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCksCisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9w
cm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwKICAgICAgICAgYmFzZVJlZ3MsIHJlc3VsdFJlZ3Ms
IEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7
CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTE2Niw3ICsxNjYsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5LCBwcm9wZXJ0eVJlZ3MudGFnR1BSKCkpOwogCiAg
ICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBiYXNl
UmVncywgcHJvcGVydHlSZWdzLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCByZWdUNCk7CiAK
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBAIC0yMDIsNyArMjAyLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3QgSQogCiAgICAgZW1pdExvYWQyKGJh
c2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXlsb2FkR1BSKCksIHByb3BlcnR5LCBw
cm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5wYXlsb2FkR1BSKCkpOwogCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBKU1ZhbHVlUmVncyhiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQ
UigpKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCBKU1ZhbHVlUmVncyhiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQ
UigpKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlSZWdzLnRhZ0dQUigpLCBwcm9wZXJ0eVJlZ3MucGF5
bG9hZEdQUigpKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwog
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAKICAgICBi
b3hCb29sZWFuKHJlZ1QwLCByZXN1bHRSZWdzKTsKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lk
KGNvbnN0IEluCiAKICAgICBlbWl0TG9hZChiYXNlLCBiYXNlUmVncy50YWdHUFIoKSwgYmFzZVJl
Z3MucGF5bG9hZEdQUigpKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSkpOwor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXpl
LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VSZWdzLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogCiAgICAgYm94Qm9v
bGVhbihyZWdUMCwgcmVzdWx0UmVncyk7CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMSk7CiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdU
MCwgcHJvZmlsZSwgcmVnVDQpOwogICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRh
ZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgVHJ1c3Rl
ZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAgICAg
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDQp
OwpAQCAtMjU3LDcgKzI1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3Qg
SW5zdHIKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0
QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
ICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMiksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOwogICAgICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CkBAIC0yNjUsNyArMjY1LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0
U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogICAgIH0KIH0KQEAgLTI3NSw3ICsyNzUsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJCiAgICAgaWYgKGhhc0FueVNs
b3dDYXNlcyhpdGVyKSkgewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07CkBAIC0yODQsNyArMjg0LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSQogICAgICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOworICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKICAgICB9CiB9CkBAIC0zMDUsMTMgKzMwNSwxMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAgICBtX3Byb2ZpbGVk
Q29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZh
dGVOYW1lLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
IGJhc2VHUFIsIHByb3BlcnR5R1BSLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKICAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRh
Z0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTMzMCw3ICszMzAsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAKICAgICBhdXRvIGJh
c2VHUFIgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIGF1dG8gcHJvcGVydHlHUFIg
PSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vz
c1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgSW52YWxpZEdQUlJl
ZywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wg
PSB0cnVlOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKQEAgLTM3Nyw3ICszNzcs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjCiAgICAgSlNWYWx1
ZVJlZ3MgdmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCk7CiAKICAgICBhdXRvIG9wZXJhdGlvbiA9IHB1
dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0
aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHZhbHVlUmVncywg
Z2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncywgdmFsdWVSZWdzLCBn
ZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CiAKICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtMzk1LDcgKzM5NSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkpOwogCiAgICAgSklUUHJp
dmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRDb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJy
YW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIGJh
c2VSZWdzLCBicmFuZFJlZ3MsIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwpAQCAtNDE4
LDcgKzQxOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9zZXRfcHJpdmF0ZV9icmFuZCgKICAg
ICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5kQWNj
ZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleF07CiAgICAgKyttX3ByaXZhdGVCcmFuZEFj
Y2Vzc0luZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCks
IGJhc2VSZWdzLCBicmFuZFJlZ3MpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZVJlZ3MsIGJyYW5k
UmVncyk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
IH0KIApAQCAtNDM1LDcgKzQzNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3ByaXZhdGVf
YnJhbmQoY28KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3Mu
dGFnR1BSKCkpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6
Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAogICAgICAgICBiYXNlUmVncywgYnJhbmRSZWdzLCBJbnZhbGlkR1BS
UmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTQ1Miw3ICs0NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJh
dG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5k
ZXhdOwogICAgICsrbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleDsKICAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRp
bWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgYnJhbmRSZWdzKTsKICAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBAIC00NjUsNyArNDY1LDcgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CkBAIC00NzgsNyArNDc4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChj
b25zdCBJbnN0cgogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVn
VDYsIHJlZ1Q3KTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0QnlWYWws
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9m
aWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRC
eVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1Zh
bHVlUmVncyhyZWdUNSwgcmVnVDQpLCByZWdUNiwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CkBAIC01MDQsNyArNTA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwo
Y29uc3QgSQogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgICAg
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAgZWNtYU1vZGUgPSBKSVQ6OmVjbWFN
b2RlKGJ5dGVjb2RlKTsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7CiAgICAgfTsKIApAQCAtNTI0LDcgKzUyNCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDIsIHJl
Z1QxLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUs
IHJlZ1Q0KTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyAoZWNt
YU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUg
OiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSA6IChlY21hTW9kZS5p
c1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvblB1
dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGdlbi5zdHViSW5mbygpLCBwcm9m
aWxlKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2Rl
LmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJp
Y3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZh
bE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGdlbi5zdHViSW5mbygpLCBw
cm9maWxlKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiB9CkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9p
ZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9h
ZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlLCByZWdUMSk7CkBAIC01NDIsMTMgKzU0MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlf
Z2V0X2J5X2lkKGNvbnN0IEluCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJS
ZWcsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFs
dWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFj
Y2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwog
ICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpKTsKIH0KIApAQCAtNTU4LDEzICs1NTgsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1
YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQp
LnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlH
ZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJv
ZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNTc1LDcgKzU3NSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNTgzLDEz
ICs1ODMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdAogICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCiAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBl
OjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4
KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
RGlyZWN0KTsKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHko
cmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGly
ZWN0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9wcm9maWxlZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJl
c3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtNTk5
LDEzICs1OTksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGly
ZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4
KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
fQpAQCAtNjE0LDEwICs2MTQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9k
aXJlY3QoYwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
cHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogICAg
IAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTYzMCwxMyArNjMwLDEzIEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAogICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBS
ZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVn
cywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisgICAgICAgIG1fcHJvZmls
ZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlk
ZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxp
ZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRC
eUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCByZXN1bHRSZWdz
KTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSk7CiB9CiAKQEAgLTY0NiwxMyArNjQ2LDEzIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWQoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKICAgICAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBy
ZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJ
bmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNy
ZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAq
aWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTY2Myw3ICs2NjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogICAgIAog
ICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQodGhpc1ZSZWcs
IHJlZ1Q0LCByZWdUMyk7CkBAIC02NzMsMTMgKzY3MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlk
ZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9j
aywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgSW52YWxpZEdQUlJlZyk7CisgICAgICAgIG1fcHJv
ZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywg
KmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAg
ICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BS
KCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtNjg5LDEzICs2ODksMTMgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5
SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdp
dGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAgICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUs
IHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwg
b3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxv
Y2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzEwLDE1ICs3MTAsMTUgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29kZS5tX2ZsYWdzLmlzRGlyZWN0KCk7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAg
ICAgCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgdmFsdWUsIHJlZ1QzLCByZWdU
Mik7CiAgICAgCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsK
IAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgbV9wcm9maWxl
ZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRl
bnQpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpLCBJbnZhbGlkR1BSUmVnLAogICAgICAgICByZWdUMSwgYnl0ZWNvZGUu
bV9mbGFncy5lY21hTW9kZSgpLCBkaXJlY3QgPyBQdXRLaW5kOjpEaXJlY3QgOiBQdXRLaW5kOjpO
b3REaXJlY3QpOwogICAgIApAQCAtNzM4LDcgKzczOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfaWQoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAKQEAgLTc0OCw3ICs3
NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEluCiAgICAgSklU
UHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKICAg
ICAKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAotICAgICAgICBnZW4uc2xvd1BhdGhG
dW5jdGlvbigpLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9j
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rp
b24oKSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwogICAgIAogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03NTgsMTQgKzc1
OCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwogCiAgICAgSklU
SW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOworICAgICAgICBt
X3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5
dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxv
Y2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1faW5C
eUlkcy5hcHBlbmQoZ2VuKTsKQEAgLTc3OSwxMyArNzc5LDEzIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlk
c1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXpl
LCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGlt
aXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2Vu
LnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzk2LDcgKzc5Niw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnUKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwog
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAog
ICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIp
OwpAQCAtODA0LDcgKzgwNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJ
bnN0cnUKICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHByb2ZpbGUs
IHJlZ1Q0KTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpJbkJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRD
b2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6SW5CeVZhbCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVl
UmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAg
LTgxOSwxNCArODE5LDE0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV92YWwoY29uc3Qg
SW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZh
bD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBK
SVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxzW21faW5CeVZhbEluZGV4KytdOwog
CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0
LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2Vu
LnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTgzNyw3ICs4MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdEhhc1By
aXZhdGUoVmlydHVhbFJlZ2lzdGVyCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2UsIHJlZ1QxKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZh
bGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTg1Myw3ICs4NTMsNyBAQCB2b2lkIEpJVDo6
ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYg
Z2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24odHlwZSA9PSBB
Y2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1p
emUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBv
cGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5k
T3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC04OTAsNyArODkwLDcgQEAgdm9pZCBKSVQ6OmVtaXRW
YXJJbmplY3Rpb25DaGVjayhib29sIG5lZQogewogICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBB
YnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25X
YXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9w
cm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQo
KS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQg
ZGVwdGgpCkBAIC05MDYsNyArOTA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShW
aXJ0dWFsUmVnaQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVj
b2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jl
c29sdmVUeXBlOwpAQCAtOTE2LDExICs5MTYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbgogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0g
SlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxv
Y2spOworICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0
YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKICAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vw
b2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
QWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xv
YmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSks
IHJlZ1QxKSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgcmVnVDEpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUp
LCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwpAQCAt
OTMxLDcgKzkzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4K
ICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiAKICAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3Bl
ID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2Rl
QmxvY2spOworICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNv
bnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2sp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBy
ZWdUMSk7CkBAIC0xMDM5LDcgKzEwMzksNyBAQCB2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIo
VmlydHVhbFJlZ2lzCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5
dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5t
X2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKQEAgLTExNDYsNyArMTE0Niw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBl
bWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCkBAIC0xMTU2LDcgKzExNTYsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNj
b3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9m
aWxlZENvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKQEAgLTExOTAsNyArMTE5MCw3IEBAIHZvaWQg
SklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKIHZvaWQgSklUOjplbWl0X29wX3B1
dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2sp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBHZXRQdXRJbmZvIGdl
dFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKQEAgLTEyMDIsNyArMTIwMiw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBT
aG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
ICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNs
b3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAg
ICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgICAgIApAQCAtMTIxNyw3
ICsxMjE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAg
ICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2Ug
R2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2Nr
KTsKKyAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFu
dFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwogICAgICAgICAgICAgZW1p
dFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7CkBAIC0xMzE4LDcgKzEzMTgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENh
bGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVf
cmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2Fs
bCgpOwogICAgIH0gZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2Nv
cGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC0xMzMzLDcgKzEzMzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9hcmd1bWVudHMoY29uCiAgICAgZW1pdExvYWRQYXlsb2FkKGFyZ3VtZW50cywgcmVnVDApOwog
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQo
KSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBUYWdPZmZzZXQpLCBy
ZXN1dGxSZWdzLnRhZ0dQUigpKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJn
dW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pICsgUGF5bG9hZE9mZnNldCksIHJlc3V0bFJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVz
dXRsUmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKSwgcmVzdXRsUmVncyk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVz
dXRsUmVncy50YWdHUFIoKSwgcmVzdXRsUmVncy5wYXlsb2FkR1BSKCkpOwogfQogCkBAIC0xMzU1
LDcgKzEzNTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0CiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlz
aW9uIDI4MzEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5MiArNDksMTEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5l
R2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2g7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAK
LSAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMuY291bnQoKSA+IE9wdGlvbnM6Omdl
dEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsKLSAgICAgICAgYXV0byBub3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgaWYgKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50aWZpZXJzLmNvdW50KCkgPiBPcHRp
b25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycygpKSB7CisgICAgICAgIGF1dG8g
bm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeVZhbCwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0QnlWYWwsIGRzdCwgc2NyYXRj
aEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaEdQUik7CiAK
LSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OnJlc3VsdCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBy
ZXN1bHRSZWdzLCByZWdUMik7CisgICAgICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUik7CisKICAgICAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgICAgIGdlbi5zdHVi
SW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKCk7CisKKyAgICAgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFs
OworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFu
dFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJ
bmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHVi
SW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisK
KyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1Yklu
Zm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9T
UiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKworICAg
ICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAot
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAg
ICAgfQotCiB9CiAKKyNpZiAhT1MoV0lORE9XUykKK3N0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZp
YWJsZUFyZ3VtZW50R1BSNCA9IEdQUkluZm86OmFyZ3VtZW50R1BSNDsKK3N0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHZpYWJsZUFyZ3VtZW50R1BSNSA9IEdQUkluZm86OmFyZ3VtZW50R1BSNTsKKyNl
bHNlCitzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2aWFibGVBcmd1bWVudEdQUjQgPSBHUFJJbmZv
Ojpub25BcmdHUFIwOworc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdmlhYmxlQXJndW1lbnRHUFI1
ID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKKyNlbmRpZgorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNv
ZGVUeXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVU
eXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
LSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAgICBpZiAoIWhhc0FueVNsb3dDYXNlcyhpdGVy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107CiAKLSAgICAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAgIHN0YXRpY19hc3NlcnQoYXJn
dW1lbnRHUFIzICE9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBt
b3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIGFyZ3VtZW50R1BSMyk7CisgICAg
bW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSwgdmlhYmxlQXJndW1lbnRH
UFI0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0
YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOwor
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3Bjb2RlVHlwZTo6
TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFyZ3VtZW50R1BSMik7CisgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUp
PihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCB2aWFibGVBcmd1bWVudEdQUjQpOwogI2Vsc2UKLSAg
ICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgIEFTU0VSVChCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIFZNJiB2bSA9IHRo
aXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1f
Ynl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29k
ZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcxIGFyZzEgYWxyZWFkeSB1c2VkLgot
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQ
UiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
cHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
LmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6
ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
R2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0
dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBh
cmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1
bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29u
c3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFz
ZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CisgICAgc3RhdGljX2Fzc2VydChw
cm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVH
ZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSByZWdUMSk7CisKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wY29kZVR5cGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0
YSwgcmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgfQorICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTE0OSw3
ICsxNzAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
Ly8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWlu
ZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwg
bWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdo
aWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJ
VCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRy
ZXNzKCk7CkBAIC0xNjAsOCArMTgxLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1l
bnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjM7
CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gYXJndW1lbnRHUFIyOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNz
ZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19h
c3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIApAQCAtMTg3LDM0ICsyMDgsNDAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFtZShjb25zdAogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNl
bGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0
QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3Bl
cnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVEdl
dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWUsCi0gICAgICAgIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpT
VmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywgcmVnVDIpOwotICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAorICAgICAg
ICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BS
KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtl
ZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6
OkdldFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29k
ZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1f
Y29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZv
LCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBz
dHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKwor
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5k
ZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFw
cGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CiB9CiAKIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
CiAgICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRlTmFtZT4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwpAQCAtMjIzLDkgKzI1MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0UHJpdmF0
ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZEds
b2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMyk7CisgICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0
aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTIzNSwyNiArMjY0LDIwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
cHJpdmF0ZV9uYW1lKGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBh
cmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdU
MTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0
ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdl
dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0g
YXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlH
UFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1p
emU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRQcml2
YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTI2NCw3ICsy
ODcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBq
aXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNz
KCk7CkBAIC0zMDAsMjEgKzMyMywyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9i
cmFuZChjb25zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
ZXRQcml2YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0gYnl0ZWNvZGUubV9icmFuZDsKLSAg
ICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwor
CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdp
c3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJp
dmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJyYW5kLCBicmFuZEdQUik7Ci0KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5k
R1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAo
IUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNs
b3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2Fz
ZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MoYnJhbmRHUFIp
LCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIAogICAgIC8vIFdlIHNob3VsZCBl
bWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJy
aWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTMyNCwxNyArMzU0LDIyIEBAIHZvaWQgSklUOjpl
bWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2Us
IFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZh
dGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7
CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNj
ZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5k
QWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFy
Z3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0
eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQ
UjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQog
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBt
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0zNDQsMjQgKzM3OSwxOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcxIGFscmVhZHkgdXNlZC4KLSAgICBj
b25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxp
bmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVy
YXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRy
YWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50
VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93
X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXpl
KTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmCiAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMzcwLDMzICszOTksNDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9i
cmFuZChjbwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1fYnJhbmQ7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJyYW5kLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQ
cml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQ
UiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OnN0dWJJ
bmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7CiAKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlm
ICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dD
YXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNz
VHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKGJyYW5k
R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7
CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BDaGVja1ByaXZhdGVCcmFuZD4oKTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGUp
OworCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVC
cmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQUiwgYnJhbmRHUFIpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5kLCBhcmd1bWVudEdQUjMpOworICAg
IGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6
ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBh
cmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNDA2LDI0
ICs0NDksMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbgogICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwog
CiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJn
MSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpiYXNlOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lz
dGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8
fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHByb3BlcnR5R1BSID09IGFyZ3VtZW50
R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8RnVuY3Rp
b25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpB
cmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRl
TmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAg
IGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25DaGVja1ByaXZhdGVC
cmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0
aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtNDM1LDMwICs0NzIsNDMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0g
QmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnZhbHVl
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVH
UFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAg
ICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QzLCByZWdUNCk7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOworICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwgcHJvZmlsZUdQUik7
CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcDo6TWV0YWRh
dGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVHUFIpOwogCiAgICAgSklUUHV0QnlW
YWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDQpOworICAgICAgICBudWxscHRy
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
cHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KHByb3BlcnR5KSkKICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRy
dWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisKKyAg
ICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5m
b3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeVZh
bDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFs
RGlyZWN0PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdDsKKyAgICBzdHVi
SW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7CisgICAgc3R1YkluZm8tPmJ5dGVj
b2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFu
dCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlw
ZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIHJlc2V0U1AoKTsgLy8g
V2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNl
dCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5kKGdlbik7CiAK
ICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIg
aWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00NzQsMTUgKzUyNCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IEVDTUFN
b2RlOjpzdHJpY3QoKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBudWxscHRyOwogCiAg
ICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKICAgICAgICAgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAg
ICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgICAgIGVjbWFNb2RlID0gYnl0ZWNv
ZGUubV9lY21hTW9kZTsKLSAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTQ5OCw3ICs1NDUsMTYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGZhc3QgcGF0
aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGly
ZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFN0cmlj
dE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSkgOiAo
ZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxp
bmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgdmlhYmxlQXJndW1lbnRHUFI0KTsKKyAgICBpZiAo
aXNEaXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCksIE9wUHV0QnlWYWxEaXJlY3Q6Ok1l
dGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCB2aWFibGVBcmd1bWVudEdQUjUpOworICAg
IGVsc2UKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlQcm9maWxlKCksIHZpYWJsZUFyZ3VtZW50R1BSNSk7CisgICAgY2FsbE9wZXJhdGlvbjxk
ZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKT4oQWRkcmVzcyh2aWFibGVB
cmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywg
dmlhYmxlQXJndW1lbnRHUFI0LCB2aWFibGVBcmd1bWVudEdQUjUpOwogI2Vsc2UKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOwpAQCAtNTEyLDcgKzU2OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
cmVnVDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1Owog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
cHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKICAgICBDYWxsIGNhbGw7CiAgICAgYXV0byBvcGVyYXRpb24gPSBpc0RpcmVjdCA/IChlY21h
TW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSA6
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpIDogKGVjbWFNb2RlLmlz
U3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uUHV0
QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CkBAIC01MjMsNyArNTc5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQpAQCAtNTMzLDE4ICs1ODksMjQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdo
dCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhl
ciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpj
b2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAg
ICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAg
ICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxP
YmplY3RHUFIgPSByZWdUNTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1
ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9m
aWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZTsKICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgeworICAgICAgICBSZWdp
c3RlclNldCB1c2VkKEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2UsIEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1
ZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmlsZSk7CisgICAgICAgIEFTU0VSVCgh
dXNlZC5jb250YWlucyhyZWdUNCkpOworICAgICAgICBBU1NFUlQoIXVzZWQuY29udGFpbnMocmVn
VDUpKTsKKyAgICB9CisKIAogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBqaXQu
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVj
dEdQUik7CkBAIC01NzAsMjAgKzYzMiwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfcHJpdmF0
ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlH
UFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVn
cyhyZWdUMiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVK
SVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNW
YWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIEludmFsaWRHUFJS
ZWcsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5wcml2YXRlRmll
bGRQdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1
YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0
cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0Nv
bnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8g
PSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAg
IG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1
Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFzZSBpcyBjZWxsLgpAQCAtNTk0LDgg
KzY2Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QKIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFByaXZh
dGVOYW1lPigpOwotICAgIFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCA9IGJ5dGVjb2RlLm1f
cHV0S2luZDsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgIEpJ
VFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107
CiAKQEAgLTYwMywxMyArNjc1LDE1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfcHJpdmF0
ZV9uYW1lKGMKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgYXV0
byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBvcGVyYXRpb25QdXRCeVZhbERlZmlu
ZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRP
cHRpbWl6ZTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgLy8gVGhleSBhcmUg
Y29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3QgY2xvYmJlcmVkLgotICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVy
dHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDI7Ci0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BS
LCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRyKSk7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKKworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgdmlhYmxlQXJndW1l
bnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsRGVm
aW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUpPihBZGRyZXNzKHZpYWJsZUFyZ3VtZW50R1BSNCwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCB2aWFibGVBcmd1bWVudEdQ
UjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpOwpAQCAtNjIyLDE4ICs2OTYsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2
YXRlX25hbWUoYwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdU
NDsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRD
YWxsKG9wZXJhdGlvbik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBAIC02
NDMsMTQgKzcxMSwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVj
dCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERG
Ry9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVj
dHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAgIGppdC50YWdSZXR1
cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJh
c2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDM7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0OwogCkBAIC02ODAsNyArNzQ4LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25z
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgp
LCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRp
b25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY4OSw3ICs3NTgsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRT
ZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlv
bnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5OSw3ICs3Njks
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiAgICAgaW50MzJf
dCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJl
Z1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTcwOSw3ICs3ODAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVy
X2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3Bl
cnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1
dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmli
dXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzE5LDcgKzc5MSw4IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnMKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKICAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFs
LCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNzI3LDIzICs4MDAsMzMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVs
QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDEsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lRGVs
QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdEdQUiA9IEJh
c2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6c2NyYXRj
aDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2UpOwogICAgIEpJVERlbEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVl
UmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSKTsKKwor
ICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJ
bmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkRlbGV0
ZUJ5SUQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBv
b2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZv
KTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5k
ZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdl
bmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9kZWxCeUlkcy5hcHBlbmQoZ2VuKTsK
IAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVh
bihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIElDIGNhbiB3
cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMgY2Vs
bC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2Vx
dWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyByZWdpc3RlcnMuCkBAIC03NTksMTUg
Kzg0MiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVl
KCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxs
T3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk+KEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTc4MSwy
NCArODY2LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSW4KICAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0
cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNt
YU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+
bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJu
VmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
CiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQpAQCAtODA4LDcgKzg4OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQg
Z2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIg
Z2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAg
aml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTg0NSwyMiArOTI1LDMzIEBAIHZvaWQgSklUOjpl
bWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBiYXNlKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZURlbEJ5VmFsUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lRGVs
QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwg
YmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcHJvcGVydHlHUFIp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUdQUiwgcHJvcGVydHkp
OworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQmFzZWxpbmVEZWxCeVZhbFJlZ2lz
dGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZv
SW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1
cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2Rl
bEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBz
ZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KICAgICAvLyBJ
QyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNl
IGlzIGNlbGwuCkBAIC04ODMsOSArOTc0LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxf
YnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbE9wdGlt
aXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZh
bHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BSMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIzKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGNhbGxP
cGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZSk+KEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMs
IFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCArOTkyLDE5IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5
R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBh
cmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBz
dHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25z
dGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0
eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGUubV9lY21hTW9kZS52YWx1ZSgp
KSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xv
d19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUdQUiA9
PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCkBA
IC05MjYsNyArMTAxNCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
Ci0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKQEAgLTk2MSwyMiArMTA0OSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90
cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlk
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQpOwogCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVnVDEsIEFjY2Vzc1R5cGU6OlRyeUdl
dEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBy
ZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZCk7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlk
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAg
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
c3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAK
QEAgLTk4NiwxNCArMTA4MywxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9p
ZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRy
eUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRp
b25UcnlHZXRCeUlkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50
MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEwMDMs
MjYgKzExMDMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwog
ICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIx
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpLCBkZWNsdHlw
ZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHVi
SW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7Ci0g
ICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25UcnlHZXRCeUlkT3B0
aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDMwLDIyICsxMTI0LDMxIEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJl
c3VsdCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUdQUik7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVK
SVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
SW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCBy
ZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3MsIHN0dWJJbmZvR1BSLCBBY2Nlc3NU
eXBlOjpHZXRCeUlkRGlyZWN0KTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNz
VHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q7CisgICAgc3R1YkluZm8tPmJ5dGVjb2Rl
SW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBz
dHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
byA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMDU0LDE2ICsxMTU3LDE4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkRGlyZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJ
ZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3Vs
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1p
emUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpv
ZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0Jp
dHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMDczLDgzICsxMTc4
LDYyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
cHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09
IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
ZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
Y29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1f
c2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6ZTsKLSAgICBlbHNl
Ci0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0KTsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAgICAgCiAgICAgaWYgKCppZGVu
dCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwg
QWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5tb2RlKSwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKLSAg
ICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCAmbWV0YWRhdGEubV9t
b2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSwgcmVnVDEpOworICAgICAg
ICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2gzMihO
b3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpB
cnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRPZk1vZGVNZXRh
ZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3RoOjpvZmZzZXRPZkFycmF5UHJv
ZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90QXJyYXlMZW5ndGhNb2Rl
LmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5z
bG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRS
ZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRl
Y29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNWUmVnID0gYnl0ZWNvZGUubV90
aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNW
UmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
VlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7
Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNj
ZXNzVHlwZTo6R2V0QnlJZCk7CiAKLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5k
KGdlbik7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlu
a2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlw
ZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0
YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1
YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1Yklu
Zm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBn
ZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBz
dHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBz
byB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsK
KyAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTExNTgsMTYgKzEyNDIsMTggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5k
ZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVk
QnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29k
ZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxz
ZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQg
PSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMTc3LDI2ICsxMjYzLDU4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IGFyZ3Vt
ZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BS
MCB8fCAhaXNBUk02NCgpKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFIzOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgc3R1
YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpj
cmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCku
cmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9p
ZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlz
PigpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1
YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
dGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjp0aGlzVmFsdWU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlz
UmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1
ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisKKyAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0
b3IgZ2VuKAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1Zh
bHVlUmVncyh0aGlzR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJ
bmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzOworICAgIHN0dWJJ
bmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9v
bDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFu
dFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5s
aW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0
YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNl
dFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0
aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhp
cy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJl
c3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEyMDYsNyArMTMyNCw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTEyNDEs
MTYgKzEzNTksMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsK
ICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVn
LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5m
bygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgYXJndW1lbnRHUFIzKTsK
KyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZFdp
dGhUaGlzT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50
R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5r
ZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhp
cy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKTsKQEAgLTEyNjAsMjggKzEzODEsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSByZWdU
MTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhp
c1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHRoaXNHUFIgPSBCYXNlbGlu
ZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVlOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNlR1BS
ID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHRoaXNH
UFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwg
cHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgp
KTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTI5MSw3ICsxNDA2LDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1h
a2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxh
YmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxp
bmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkg
bm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZt
KTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpA
QCAtMTMyOSwyMyArMTQ0NCwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3Qg
SW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIGJv
b2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVjdCgpOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgLy8gSW4gb3JkZXIg
dG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9m
ZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJn
dW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFu
ZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZz
ZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVn
aXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxp
bmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CiAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVWUmVnLCB2YWx1ZUdQUik7CisgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VWUmVnKTsKIAogICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwgZWNtYU1vZGUoYnl0ZWNvZGUpLAor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21hTW9kZShieXRlY29kZSksCiAgICAg
ICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6Ok5vdERpcmVjdCk7Ci0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1f
dW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRLaW5kID0gZGlyZWN0ID8gUHV0S2lu
ZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAgIHN0dWJJbmZvLT5lY21hTW9kZSA9
IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0
ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXgg
PSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHVi
SW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87
CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhp
dCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAogICAgIC8vIElDIGNh
biB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFycmllciBpZiBhIGJhc2UgaXMg
Y2VsbC4KQEAgLTEzNTksMTQgKzE0ODksMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9i
eV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlv
bigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHVi
SW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1bWVudEdQUjIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOwor
ICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXpl
KT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFy
Z3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEzNzYsMjUgKzE1MTAsMTkgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsgLy8gYXJnMSBhbHJlYWR5IGluIHVz
ZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gcmVnVDE7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9
IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHZh
bHVlR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50
KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAg
bW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0
aW9uID0gZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBh
cHBlbmRDYWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQpAQCAtMTQwNCw3ICsxNTMyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRo
ZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0
byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0
OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQog
ICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTQ0MSwyMCArMTU2OSwzMSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VW
UmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5
SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNl
bGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CiAKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICpp
ZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMSk7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgSlNWYWx1
ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ2MywxNCArMTYwMiwxNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2lu
QnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1Qw
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5
cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1l
bnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAg
ICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAg
LTE0ODAsMjggKzE2MjIsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0
IElucwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BS
MTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6YmFzZTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBz
dHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2Nr
LCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICAvLyBzbG93X29wX2dldF9i
eV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgog
ICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0aW5nIGEgZHVwbGljYXRlIHRodW5r
IGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgogICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9wdGltaXplKSwgZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1YkluZm8o
KS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTUxMCwyNSArMTY0NiwzMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
bl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAg
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9m
aWxlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVJbkJ5
VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
cmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6c3R1Yklu
Zm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OnNjcmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlWYWws
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVn
VDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
ICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkluQnlW
YWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQpAQCAtMTUzNywxNSArMTY4MSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5f
YnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
IAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1faW5CeVZhbHNbbV9pbkJ5VmFsSW5k
ZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1f
dW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgbWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEluQnlWYWw6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjMpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgdmlhYmxlQXJndW1lbnRHUFI0KTsKKyAg
ICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSk+KEFkZHJl
c3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3Vt
ZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0KTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+
dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKTsKQEAgLTE1NTYsNTkgKzE3MDMsNzAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5
X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3Vt
ZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHBy
b3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIG1hdGVyaWFs
aXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAgICAgLy8gc2xvd19vcF9nZXRfYnlf
dmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQuCiAg
ICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1bmsg
anVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwgZGVjbHR5cGUob3Bl
cmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5m
bygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7Ci0gICAgZWxz
ZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25JbkJ5VmFsT3B0aW1pemUpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
KyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAK
IHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5T3JCcmFuZCwgQWNjZXNzVHlwZSB0
eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5kLCByZWdUMSk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7
CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3Rl
cnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVJ
bkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU9yQnJh
bmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQ
UiwgYmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJv
cGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBV
bmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3Mu
YWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0eXBlOworICAgIHN0dWJJbmZvLT5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29u
c3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6
OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRT
dHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFz
dFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2Fz
ZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxS
ZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNs
b3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIEFTU0VSVCh0eXBlID09IEFj
Y2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0
ZUJyYW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAgVU5VU0VEX1BBUkFNKHByb3Bl
cnR5KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJp
dmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogCiAgICAg
SklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDog
b3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRHUFIyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb248
ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1l
bnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3Qs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMyk7
CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVP
ZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNjE4LDI3ICsxNzc2LDIxIEBA
IHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2kKICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eU9yQnJh
bmRHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUlu
QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eU9yQnJh
bmRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OwogICAgIHN0YXRpY19h
c3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7CiAgICAgc3RhdGlj
X2Fzc2VydChwcm9wZXJ0eU9yQnJhbmRHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25IYXNQcml2
YXRlTmFtZU9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6
ZSk+Ojp2YWx1ZSk7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3Bl
cmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2
YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRD
VElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUg
PyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJy
YW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbCh0eXBlID09
IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRp
bWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVy
blZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9oYXNfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xNjUyLDcgKzE4MDQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZh
dGVfbmFtZShjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZU5hbWU+KCk7Ci0gICAgZW1p
dEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFt
ZSk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jh
c2UsIGJ5dGVjb2RlLm1fcHJvcGVydHksIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NjYsNDYgKzE4MTgsNzQgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1ByaXZh
dGVCcmFuZD4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIEFjY2Vz
c1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2Rl
Lm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5cGU6Okhh
c1ByaXZhdGVCcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hl
Y2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIHNjcmF0Y2hHUFIpCiB7CiAg
ICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChz
Y3JhdGNoR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNF
VE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgc2NyYXRjaEdQ
Uik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBX
YXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIg
ZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3Ms
IHVuc2lnbmVkIGRlcHRoKQogewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyk7CisgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVn
VDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQogICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAorCiAjaWYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFJlc29sdmVUeXBlIHByb2Zp
bGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5t
X3Jlc29sdmVUeXBlOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKLSAgICB1bnNpZ25l
ZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOworCisgICAgY29uc3RleHByIEdQ
UlJlZyBzY29wZUdQUiA9IHJlZ1QwOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CisKKyAgICBh
dXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGlm
ICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgZ2xv
YmFsT2JqZWN0R1BSID0gcmVnVDQ7CisgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2Jh
bE9iamVjdEdQUik7CisgICAgICAgIH0KKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9i
amVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldh
dGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVh
bCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3Rl
ZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfTsKKworICAgIGF1dG8gZW1pdFJlc29sdmVD
bG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGRv
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBsb2Fk
MzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZMb2NhbFNjb3BlRGVwdGgoKSwgcmVnVDEpOworCisgICAgICAgIEFTU0VSVChzY29wZUdQUiA9
PSByZWdUMCk7CisgICAgICAgIExhYmVsIGxvb3AgPSBsYWJlbCgpOworICAgICAgICBKdW1wIGRv
bmUgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICBzdWIzMihU
cnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlz
KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH07CiAKICAgICBhdXRvIGVtaXRDb2Rl
ID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29s
dmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3Bl
KiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNv
bHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3Rh
bnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
bV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEp
KTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDAp
OwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAg
Ly8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkuCisgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKKyAg
ICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGlu
Z0Vwb2NoKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4
aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKQEAgLTE3MTMsMTY4ICsxODkzLDE2NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZl
X3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3Bl
KiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNv
bHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3Rh
bnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVC
bG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhciosCisg
ICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNh
bEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgorICAgICAgICAgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMCk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgaWYg
KHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKLSAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIGVtaXRS
ZXNvbHZlQ2xvc3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKKyAgICAg
ICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAg
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgfTsK
IAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5Ogot
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVU
eXBlLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVt
aXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2Rl
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcik7CisgICAgaWYgKHByb2Zp
bGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKKyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZp
cm9ubWVudCgpLCByZWdUMCk7CisgICAgZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PT0gQ2xvc3VyZVZhciB8fCBwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgZW1pdENvZGUocHJvZmlsZWRSZXNvbHZlVHlw
ZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgc2NvcGVHUFIpOworCisgICAgICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7CisgICAg
ICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpLCByZWdUMSk7CisKKyAgICAgICAgICAgIGF1dG8g
ZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAgICAgICAg
ICAgSnVtcCBub3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
cmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Cisg
ICAgICAgICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgICAg
IG5vdENhc2UubGluayh0aGlzKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGVtaXRD
YXNlKEdsb2JhbFZhcik7CisgICAgICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7Cisg
ICAgICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsKKyAgICAgICAgICAgIGVtaXRD
YXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICAgICAgZW1pdENh
c2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgICAgIGVt
aXRDYXNlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwogCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRo
aXMpOwotICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwor
ICAgICAgICB9CiAgICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1w
TGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwg
cmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0
Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
LSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
LSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9Ci0jZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAorI2Vsc2UK
IHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBl
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgp
OwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2Rl
SW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2Rl
SW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rp
b24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5
dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJl
c29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0
aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBN
b2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxF
bnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJl
c29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1Qw
KTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2Rl
QmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgICAgICBwdHJkaWZm
X3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNl
dEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CisKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyR2Vu
ZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVf
c2NvcGUgQ2xvc3VyZVZhciIpOworICAgICAgICB9OwogCi0jZGVmaW5lIFJFU09MVkVfU0NPUEVf
R0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dl
bmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNb
XSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShSRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUikKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dl
bmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRl
T3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Ms
ICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyIpOwogICAgICAgICB9OwotI3VuZGVmIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SCisKKyAg
ICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgewor
ICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBz
dGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBnZW5lcmljIik7CisgICAg
ICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1QyOwor
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CisgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAogICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKICAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBD
bG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoY2xvc3VyZVZhckdl
bmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJ
U3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyaWNSZXNvbHZlU2Nv
cGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJh
dGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBjb25zdCBjaGFy
KiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSwgc3RkOjpvcHRpb25hbDxSZXNvbHZl
VHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKICAgICAvLyBUaGUg
dGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBM
TEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKwogICAg
IHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCisgICAgY29uc3RleHByIEdQUlJl
ZyBtZXRhZGF0YUdQUiA9IHJlZ1QyOyAvLyBpbmNvbWluZworICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NvcGVHUFIgPSByZWdUMDsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gcmVnVDU7IC8vIGluY29taW5nIC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0
aC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwogICAgIFVO
VVNFRF9QQVJBTShieXRlY29kZU9mZnNldEdQUik7Ci0gICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJ
c1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpOwogCi0gICAgdGFnUmV0dXJuQWRk
cmVzcygpOworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsK
LSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMp
OworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKIAogICAgIEp1bXBMaXN0IHNs
b3dDYXNlOwogCi0gICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BS
UmVnKSB7CisgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykg
ewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcpIHsKICAg
ICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwotICAgICAgICAgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xv
YmFsT2JqZWN0R1BSKTsKICAgICAgICAgfQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZ2xvYmFs
T2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9u
V2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVx
dWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhn
bG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmpl
Y3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5i
cmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRl
KCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogCiAgICAgYXV0byBl
bWl0UmVzb2x2ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsK
LSAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsK
LSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyht
ZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkp
LCByZWdUMSk7Ci0KLSAgICAgICAgTGFiZWwgbG9vcCA9IGxhYmVsKCk7Ci0gICAgICAgIEp1bXAg
ZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7
Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICAgICAgICAg
IGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZG9uZS5saW5r
KHRoaXMpOworICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzY29wZUdQUiA9PSByZWdUMCk7CisgICAgICAg
IGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mTG9jYWxT
Y29wZURlcHRoKCkpLCByZWdUMSk7CisKKyAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgp
OworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZWdUMCk7CisgICAgICAgIGppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAg
ICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CisgICAgICAgIGRvbmUubGluaygm
aml0KTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUpIHsKQEAgLTE4ODIsMTIgKzIwNTksMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAg
ICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkuCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RH
UFIpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgICAgIGxvYWQz
MihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2xvYmFs
TGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0dsb2JhbE9i
amVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAg
ICAgICAgICAgbW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAg
IGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2xvYmFs
TGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6
Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEgKzIwNzMsMTEgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpj
b25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciou
Ci0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRv
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBy
ZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykK
LSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0Ojpv
ZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkds
b2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMTkwOSw3ICsyMDg1LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICAgICAgZW1p
dFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkxOSw4MyArMjA5NSw0NSBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0g
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKLQotICAg
ICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgIGlm
IChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgqcmVzb2x2ZVR5cGUgPT0g
Q2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5cGUpOworICAgIH0gZWxzZSB7CiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7
Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCkpLCByZWdUMSk7
CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
LSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBhdXRvIGVtaXRD
YXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAgICAgICAgICAgSnVtcCBu
b3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKHJlc29s
dmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgbm90Q2FzZS5saW5r
KCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAg
ICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0
eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBlbWl0Q2Fz
ZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgZW1pdENhc2UoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBza2lwVG9FbmQubGluaygmaml0KTsK
ICAgICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRo
dW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29w
X3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2Us
IENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2Fz
ZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKIH0KIAotI2Rl
ZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZlX3Njb3BlXyMj
cmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAgICB7IFwKLSAgICAgICAgaWYgY29u
c3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkpIFwKLSAg
ICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklUIGppdCh2bSk7IFwKLSAgICAgICAg
cmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNl
bGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKLSAgICB9Ci1GT1JfRUFD
SF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERF
RklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkK
IHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkg
d29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8gaXQgbWFr
ZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFi
bGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGlu
ZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBu
b3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0p
OworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBUaGUgZmFzdCBwYXRoIGFscmVhZHkg
cHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQpAQCAtMjAwNCwxNyAr
MjE0MiwyMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
aml0LnB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOwogI2VuZGlm
CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7Ci0gICAg
aml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5jb21pbmdC
eXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIGppdC5zdG9yZTMyKGluY29taW5nQnl0ZWNv
ZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSBhcmd1bWVudEdQ
UjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7
CiAgICAgY29uc3RleHByIEdQUlJlZyBpbnN0cnVjdGlvbkdQUiA9IGFyZ3VtZW50R1BSMTsKIAor
ICAgIHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiAhPSBjb2RlQmxvY2tH
UFIpOworICAgIHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiAhPSBnbG9i
YWxPYmplY3RHUFIpOworICAgIHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQ
UiAhPSBpbnN0cnVjdGlvbkdQUik7CisKICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CiAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGds
b2JhbE9iamVjdEdQUik7CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBpbnN0cnVjdGlvbkdQ
Uik7Ci0gICAgaml0LmFkZFB0cihieXRlY29kZU9mZnNldEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOwor
ICAgIGppdC5hZGRQdHIoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiwgaW5zdHJ1Y3Rpb25HUFIp
OwogCiAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblJlc29sdmVTY29w
ZUZvckJhc2VsaW5lKT4oZ2xvYmFsT2JqZWN0R1BSLCBpbnN0cnVjdGlvbkdQUik7CiAgICAgaml0
LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKQEAgLTIwMzQsNyArMjE3Niw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBwYXRjaEJ1ZmZlci5saW5rKGV4
Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVu
a1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX3Jlc29sdmVfc2NvcGUiKTsKIH0KLSNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKIHZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCiB7CkBAIC0yMDY2LDU4ICsy
MjA4LDc1IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMKIHZvaWQg
SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUu
c2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dl
dFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIg
PSByZWdUMjsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CiAK
LSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBp
bmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CisKKyAgICBh
dXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpIHsKKyAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zhcklu
amVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJh
bmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfTsKKyAgICAKKyAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAg
ICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0
cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBz
dHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5
LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgot
ICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1
bHQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKLSAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hl
Y2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBm
b3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9z
Y29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAg
IGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CiAKICAgICAgICAgICAgIGpp
dEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3Qo
KSksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29w
ZUdQUiwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkMzIob3Bl
cmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7
CisKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1
bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1
c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgSnVtcCBp
c091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJ
bW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwogICAgICAgICAgICAgICAgIGFib3J0V2l0aFJl
YXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CiAgICAgICAgICAgICAgICAgaXNPdXRPZkxp
bmUubGluayh0aGlzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAg
ICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQs
IG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwg
VGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSwgcmVzdWx0KTsKKworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBuZWcz
MihyZWdUMSk7CisgICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwor
ICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChm
aXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlZ1Qw
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
OgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAg
IGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKGlu
ZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRp
cmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAg
ICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRGcm9t
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDApOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDApOwogICAgICAgICAgICAgaWYgKHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJl
VmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgbG9h
ZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZk9wZXJhbmQoKSwgcmVnVDMpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMg
PT0gc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIo
MyksIHJlZ1QzKTsKKyAgICAgICAgICAgIGFkZFB0cihzY29wZUdQUiwgcmVnVDMpOworICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKKwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CkBAIC0yMTI3
LDIxMSArMjI4NiwxODkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBj
YXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8
fCBwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KQorICAgICAgICBlbWl0Q29kZShwcm9maWxlZFJlc29sdmVUeXBlKTsKKyAgICBlbHNlIHsKICAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0
UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
R2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1QwKTsKICAg
ICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAv
LyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOworICAgICAgICBKdW1w
IG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKHRoaXMpOwogCi0g
ICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUo
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLQotICAgICAg
ICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlw
ZSBpbnRvIFQwCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOwogCiAgICAgICAgIEp1bXAgaXNH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxp
bmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmso
dGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAg
bm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCiAgICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRy
dWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CiAKICAg
ICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIAotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZSk7CisKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJlZ1QwKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0
YWRhdGEsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19CiAKLSNlbHNlIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdl
dEZyb21TY29wZSwgZHN0LCBhcmd1bWVudEdQUjAsIGluc3RydWN0aW9uKTsKK30KIAorI2Vsc2UK
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0g
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7
CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5
dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7
CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29k
ZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworCisgICAgYXV0byBjbG9zdXJlVmFyR2Vu
ZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1cm4gSklUOjpnZW5lcmF0ZU9wR2V0
RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2Nv
cGUgQ2xvc3VyZVZhciIpOworICAgIH07CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAg
IGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3NHZW5lcmF0b3IgPSBbXSAoVk0m
IHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2
bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfZ2V0X2Zy
b21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAgICBhdXRvIGdlbmVyaWNHZXRGcm9t
U2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVy
YXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxsb3B0LCAiQmFzZWxpbmU6IG9wX2dl
dF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OworCisgICAgY29uc3RleHByIEdQUlJlZyBt
ZXRhZGF0YUdQUiA9IHJlZ1Q0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdU
MjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAKLSAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0gICAgICAgIHVpbnRwdHJfdCogb3Bl
cmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJh
bmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUq
Pigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90
IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0
YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotI2RlZmlu
ZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3Bl
XyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2Vu
ZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQ
RShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAgIH07Ci0jdW5kZWYgR0VUX0ZST01f
U0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVH
UFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BS
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7
Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BS
KTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJh
dG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0gICAgfQorICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY29kZTsKKyAgICBpZiAocHJv
ZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJ
U3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNlIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBjb2RlID0g
dm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvcik7
CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihnZW5lcmljR2V0RnJvbVNj
b3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJv
bVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFt
ZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9w
R2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlvbmFsPFJlc29sdmVUeXBlPiByZXNv
bHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5l
cmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFz
ZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6TWV0
YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAgICBSRUxFQVNFX0FTU0VSVCh0aHVu
a0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSk7Ci0KLSAgICB0YWdSZXR1cm5B
ZGRyZXNzKCk7Ci0KLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRh
R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CisgICAgY29u
c3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOwogCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2U7
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAgIGF1dG8gZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJfdCBtZXRhZGF0YVN0cnVjdHVyZU9m
ZnNldCkgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG1ldGFkYXRhU3Ry
dWN0dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7Ci0g
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAg
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKLSAgICB9
OworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICBqaXQubG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMp
OworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKIAotICAgIGF1dG8gZW1pdFZh
ckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Cisg
ICAgSnVtcExpc3Qgc2xvd0Nhc2U7CisKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBb
Jl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpT
R2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2lu
dFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Cisg
ICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25X
YXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4
KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAotICAgIGF1dG8gZW1p
dEdldFZhckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQUlJlZyByZWcpIHsK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5kKSwgcmVnKTsKLSAg
ICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdEdldFZhckZy
b21JbmRpcmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgewot
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOwotICAg
ICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0R2V0Q2xvc3Vy
ZVZhciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFuZEdQUikgewotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgbHNo
aWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgYWRkUHRyKHNjb3Bl
R1BSLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG9wZXJhbmRHUFIsIEpT
TGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOwotICAgIH07
Ci0KLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9v
bCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewog
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soc2NvcGVHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9zdHJ1Y3R1cmUp
KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0
IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRp
dGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmpl
Y3Rpb24uCi0KLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOwotICAg
ICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2ggPSByZWdUMjsKLQotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJk
YTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmpl
Y3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBi
YXNlLCByZWdUMyk7CisgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBp
bmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0
IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNo
ZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1
Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNo
VGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKHJl
Z1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworCisgICAgICAgICAgICBq
aXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Cisg
ICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdU
MywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICAg
ICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgcmVnVDMpOwogICAg
ICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIG9mZnNldCk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZP
cGVyYW5kKCkpLCByZWdUMSk7CisKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewot
ICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9y
RXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAg
ICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAg
ICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIEp1
bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMSwg
VHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgaml0
LmFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CisgICAgICAgICAgICAg
ICAgaXNPdXRPZkxpbmUubGluaygmaml0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
KTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJU
b1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0
Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKworICAgICAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwor
ICAgICAgICAgICAgaml0Lm5lZzMyKHJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5zaWduRXh0ZW5k
MzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAg
ICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAg
ICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
b3BlcmFuZCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMCk7CiAgICAg
ICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNr
LgotICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QwKSk7
CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHJlZ1Qw
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAg
ICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7
Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRP
RihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIHJlZ1QzKTsKLSAgICAgICAgICAgIGVtaXRHZXRDbG9z
dXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgp
KSwgcmVnVDMpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJl
Z2lzdGVyKSk7CisgICAgICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCByZWdU
Myk7CisgICAgICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCByZWdUMyk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKKwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIE1vZHVsZVZhcjoK
QEAgLTIzNDEsODYgKzI0NzgsNjMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
LSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9n
ZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAg
ICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAg
aXNOb3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotCi0gICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVtaXRDb2RlKCpyZXNvbHZlVHlwZSk7
CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1
dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6
dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAg
IEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFBy
b3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxz
ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworICAgICAgICBqaXQubG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSksIHJl
Z1QwKTsKKyAgICAgICAgaml0LmFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0
cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
LCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0g
aml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOwor
ICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGpp
dC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGluaygmaml0KTsKKworICAgICAgICBK
dW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBqaXQuYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwor
ICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbi5saW5rKCZqaXQpOworCisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGppdC5icmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBq
aXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluaygm
aml0KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOworICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyLmxpbmsoJmppdCk7CiAKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Cisg
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gaml0LmJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVt
cCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmso
JmppdCk7CiAKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAgIH0KIAogICAgIHN0YXRpY19hc3Nl
cnQoVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0gMSk7Ci0gICAgc3RvcmU2NChyZWdU
MCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2Zp
bGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFk
YXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tl
dCgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRo
dW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZtKCkuZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNl
LCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nh
c2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29w
ZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOwogfQogCi0j
ZGVmaW5lIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9nZXRfZnJvbV9zY29w
ZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCi0gICAgeyBcCi0gICAgICAgIGlm
IGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKSBc
Ci0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAgIEpJVCBqaXQodm0pOyBcCi0gICAg
ICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKHJlc29sdmVUeXBlLCAi
QmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlXyIgI3Jlc29sdmVUeXBlKTsgXAotICAgIH0KLUZP
Ul9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQotI3Vu
ZGVmIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKLQogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3Io
Vk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBj
YW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAv
LyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5n
IGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBt
YXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hp
Y2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklU
IGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAg
aml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjQyOSwxOCArMjU0MywyNCBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAjZW5kaWYKIAogICAgIHVzaW5n
IE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gcmVnVDU7Ci0gICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0Zv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGlu
Y29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICBqaXQuc3RvcmUzMihpbmNvbWlu
Z0J5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gYXJn
dW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1l
bnRHUFIwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5zdHJ1Y3Rpb25HUFIgPSBhcmd1bWVudEdQ
UjE7CisgICAgc3RhdGljX2Fzc2VydChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGNvZGVC
bG9ja0dQUik7CisgICAgc3RhdGljX2Fzc2VydChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9
IGdsb2JhbE9iamVjdEdQUik7CisgICAgc3RhdGljX2Fzc2VydChpbmNvbWluZ0J5dGVjb2RlT2Zm
c2V0R1BSICE9IGluc3RydWN0aW9uR1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG1ldGFkYXRhR1BS
ICE9IGNvZGVCbG9ja0dQUik7CisgICAgc3RhdGljX2Fzc2VydChtZXRhZGF0YUdQUiAhPSBnbG9i
YWxPYmplY3RHUFIpOworICAgIHN0YXRpY19hc3NlcnQobWV0YWRhdGFHUFIgIT0gaW5zdHJ1Y3Rp
b25HUFIpOwogCiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCBjb2RlQmxvY2tHUFIpOwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoY29kZUJsb2Nr
R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIp
OwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNl
dE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgaW5zdHJ1Y3Rpb25HUFIpOwotICAgIGppdC5h
ZGRQdHIoYnl0ZWNvZGVPZmZzZXRHUFIsIGluc3RydWN0aW9uR1BSKTsKKyAgICBqaXQuYWRkUHRy
KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIsIGluc3RydWN0aW9uR1BSKTsKIAogICAgIEFTU0VS
VChSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLmNvbnRhaW5zKEdQUkluZm86Om51
bWJlclRhZ1JlZ2lzdGVyKSk7CiAgICAgaml0Lm1vdmUobWV0YWRhdGFHUFIsIEdQUkluZm86Om51
bWJlclRhZ1JlZ2lzdGVyKTsgLy8gUHJlc2VydmUgbWV0YWRhdGEgaW4gYSBjYWxsZWUgc2F2ZWQg
cmVnaXN0ZXIuCkBAIC0yNDQ5LDcgKzI1NjksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgQ2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25Q
dHJUYWcpOwogICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBqaXQuZW1pdE5vblBhdGNoYWJsZUV4
Y2VwdGlvbkNoZWNrKHZtKTsKIAotICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKEdQUklu
Zm86Om51bWJlclRhZ1JlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmls
ZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJUYWdS
ZWdpc3RlciwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZz
ZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOwogCiAjaWYgQ1BVKFg4Nl82
NCkKQEAgLTI0NjksODggKzI1ODksNzggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSQogICAgIHBhdGNoQnVmZmVyLmxpbmsoanVtcFRvSGFuZGxlciwgQ29kZUxvY2F0
aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xv
d19vcF9nZXRfZnJvbV9zY29wZSIpOwogfQotI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0
KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihp
bmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEp
OwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJl
Z1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdh
dGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVt
aXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBK
U0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXpl
b2YoUmVnaXN0ZXIpKSk7Ci19CisjZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUu
bV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwot
ICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwot
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwot
ICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90
KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7Cisg
ICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCisgICAgYXV0
byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAg
ICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUg
c3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxs
eSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4K
KyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5j
ZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9i
amVjdC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVz
IGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0
dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVn
VDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsm
XSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAg
ICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsK
KyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKICAg
ICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBU
aW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpKTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hl
Y2socmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1
dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSkgeworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFZhclJl
YWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKworICAgICAgICAgICAgbG9hZFB0ckZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVy
YW5kKCksIHJlZ1QwKTsKKworICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVj
b2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBh
IFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8g
ZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0
TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJl
Y3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Q
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMSk7CisgICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1
dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNs
b3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0g
ICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7
CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKworICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgICAgICAgICAg
c3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworCisgICAgICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIo
c2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Cisg
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCByZWdUMCk7CisKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgp
LCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1
dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOworICAgICAgICAg
ICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNl
SW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zm
c2V0T2ZWYXJpYWJsZXMoKSkpOworCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgTW9kdWxlVmFyOgpAQCAtMjU2NCw1OCArMjY3NCw1MiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNo
IChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwot
ICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7
IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7
Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4g
aWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0
IGJpbmRpbmcuCi0KLSAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1
ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2Jh
bFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxz
ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxv
Y2sgc2VlcyBDbG9zdXJlVmFyLyBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdGhl
biB3ZSBjYW4gY29tcGlsZSB0aGluZ3MKKyAgICAvLyB0aGF0IHdheSBmb3IgYWxsIENvZGVCbG9j
a3MsIHNpbmNlIHdlJ3ZlIHByb3ZlbiB0aGF0IGlzIHRoZSB0eXBlIHdlIHdpbGwgYmUuIElmIHdl
J3JlIGEgQ2xvc3VyZVZhciwKKyAgICAvLyBhbGwgQ29kZUJsb2NrcyB3aWxsIGJlIENsb3N1cmVW
YXIuIElmIHdlJ3JlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB3ZSdyZSBhbHdh
eXMgQ2xvc3VyZVZhcgorICAgIC8vIGlmIHRoZSB2YXIgaW5qZWN0aW9uIHdhdGNocG9pbnQgaXNu
J3QgZmlyZWQuIElmIGl0IGlzIGZpcmVkLCB0aGVuIHdlIHRha2UgdGhlIHNsb3cgcGF0aCwgc28g
aXQgZG9lc24ndAorICAgIC8vIG1hdHRlciB3aGF0IHR5cGUgd2UgYXJlIGR5bmFtaWNhbGx5Lgor
ICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIGVtaXRD
b2RlKENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gUmVz
b2x2ZWRDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShSZXNvbHZlZENsb3N1cmVWYXIpOwor
ICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKTsKKyAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0
UHV0SW5mbygpLCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAg
ICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CiAgICAgICAgIGlzR2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZh
bHNlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwogICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKIAorICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0
Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgIG5vdEdsb2JhbFZhci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMp
OworCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEds
b2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAogICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwogCiAgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
LCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjYyNCwxOCArMjcyOCwy
MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGNv
cGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVU
eXBlID09IE1vZHVsZVZhcikgeworICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUg
PSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVz
b2x2ZVR5cGUoKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsK
KyAgICAgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2F3IGEgTW9kdWxlVmFyLCB0aGVu
IGFsbCBsaW5rZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFudGVlZAorICAgICAgICAvLyB0byBhbHNv
IHNlZSBNb2R1bGVWYXIuCiAgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhp
cywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9u
bHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwog
ICAgIH0gZWxzZSB7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFRvU2NvcGUsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3RydWN0aW9uKTsKICNlbHNlCiAgICAg
ICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRl
eChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9u
QXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwpA
QCAtMjY1Miw3ICsyNzU5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxP
YmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAv
LyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxP
YmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2so
KS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4
Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CkBAIC0yNzAxLDcgKzI4MDgs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkNjQoQWRk
cmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyODY2LDYgQEAgdm9pZCBKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFs
X2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVj
b2RlLm1faW5kZXg7CkBAIC0yNzY3LDcgKzI4NzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
aW50ZXJuYWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBs
PD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
IH0KIApAQCAtMjgyMyw3ICsyOTI5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5
X2VudW1lcmF0bwogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0
ZWNvZGUubV9tb2RlOwpAQCAtMjgzOSwxMSArMjk0NCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX25leHQoY29uc3QgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKIAogICAg
IC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBz
cGVjaWFsIGNhc2UgaXQgaWYgd2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCi0gICAgaWYgKG1l
dGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
T3duU3RydWN0dXJlTW9kZSkgeworICAgIGlmIChieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBy
ZWdUMzsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJhdG9yR1BSKTsKICAgICAgICAgb3Bl
cmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGVudW1lcmF0
b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMigofkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgJiBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spKSk7CiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisKKyAgICAgICAgbG9hZDhGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVu
dW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgb3IzMihUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRjaEdQUiwgYnl0ZWNvZGUsIE9wRW51
bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpKTsKKwog
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpLCBpbmRleEdQUik7CiAgICAgICAgIG9w
ZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgaW5kZXhHUFIsIEFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwogCkBAIC0yODgxLDc4ICsy
OTkyLDg4IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCAKIHZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9k
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBk
b25lQ2FzZXM7CiAKLSAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUVudW1lcmF0b3JH
ZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BS
ID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEJhc2Vs
aW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3JhdGNoMTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gyID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3RlcnM6OnNj
cmF0Y2gyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBCYXNlbGluZUVudW1lcmF0
b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1Qy
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihtb2RlLCBzY3JhdGNoMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eU5hbWUsIHByb3BlcnR5R1BSKTsKIAotICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRy
ZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIGxvYWQ4RnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6TWV0YWRhdGE6Om9mZnNldE9mRW51
bWVyYXRvck1ldGFkYXRhKCksIHNjcmF0Y2gyKTsKKyAgICBvcjMyKHNjcmF0Y2gzLCBzY3JhdGNo
Mik7CisgICAgc3RvcmU4VG9NZXRhZGF0YShzY3JhdGNoMiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRv
ckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwoYmFzZUdQUikpOwogICAgIC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMy
IGVuY29kZWQgdmFsdWUuCi0gICAgSnVtcCBpc05vdE93blN0cnVjdHVyZU1vZGUgPSBicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkp
OworICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8s
IHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVk
TW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKIAogICAgIC8v
IENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0
b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDMpOwotICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoZW51bWVyYXRvciwgc2NyYXRjaDEpOworICAgIGxvYWQzMihBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBKdW1wIHN0cnVjdHVy
ZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gx
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsK
IAogICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgc2NyYXRj
aDIpOwogICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hl
ZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91
dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVn
VDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7Ci0g
ICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIp
OwotCisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHNj
cmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNo
Miwgc2NyYXRjaDIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRp
bWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7
CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mg
b3V0IG9mIGxpbmUKICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAg
ICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbmVnMzIocmVnVDMpOwotICAgIHNp
Z25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2VHUFIpOworICAgIHN1YjMyKEFk
ZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBuZWczMihzY3JhdGNoMik7CisgICAgc2ln
bkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsKICAgICBjb25zdGV4cHIgaW50cHRy
X3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gb2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxp
bmVPZmZzZXQpICogc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
OwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBUaW1lc0VpZ2h0LCBvZmZzZXRP
ZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgoYmFzZUdQ
Uiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQ
Uik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgc3RydWN0dXJlTWlzbWF0
Y2gubGluayh0aGlzKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRh
ZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVk
SW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0
cnVjdHVyZU1pc21hdGNoKSwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAKICAgICBpc05vdE93blN0cnVjdHVy
ZU1vZGUubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMiha
ZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhl
ZE1vZGUpKTsKKyAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBzY3Jh
dGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUp
KTsKICAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5kZXgsIHByb3BlcnR5R1BSKTsKIAogICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOwot
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDIp
OworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFzZUdQUiwg
c2NyYXRjaDEpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVl
UmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
cmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6Okdl
dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVS
ZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5m
by0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8v
IFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVz
ZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
CiAgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5NjEsMTAgKzMwODIsOSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfCiAgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dD
YXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0ZXIp
OwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhG
dW5jdGlvblR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlwZSYg
Ynl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQordGVtcGxhdGUgPHR5
cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgSklU
OjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rp
b25UeXBlIGdlbmVyYWxDYXNlKQogewotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKQEAgLTI5
NzMsNyArMzA5Myw5IEBAIHZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW0K
ICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1v
ZGUsIHJlZ1QwKTsKLSAgICBvcjgocmVnVDAsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9l
bnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgQnl0
ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCByZWdUMSk7Cisg
ICAgb3IzMihyZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEocmVnVDEsIGJ5dGVj
b2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCkpOwog
CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CiAKQEAg
LTMwNjIsNiArMzE4NCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogfQogCit2b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIpCit7CisgICAgSnVtcCBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBvd25lciwgc2VsZWN0U2Ny
YXRjaEdQUihvd25lcikpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3duZXIpOworICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsOSArMjM2LDkgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAgICAgaWYgKGlzSlNBcnJheShiYXNl
Q2VsbCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2Fj
aGVUeXBlOjpVbnNldAogICAgICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0g
YmFzZUNlbGwKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJs
ZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3Ro
KGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5Kj4oYmFzZUNlbGwpKSkgewogCi0g
ICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vz
czo6Z2VuZXJhdGVBcnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2Vs
bCkpOworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxp
bmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0
PEpTQXJyYXkqPihiYXNlQ2VsbCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVk
Q29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9u
KGtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0
aChsb2NrZXIpOwpAQCAtMjQ5LDggKzI0OSw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoLCBwcm9wZXJ0eU5hbWUp
OwogICAgICAgICAgICAgfSBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VDZWxsKSkgewogICAgICAg
ICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0g
ICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5n
dGgoc3R1YkluZm8pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlu
bGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pOworICAg
ICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3Ro
KGNvZGVCbG9jaywgc3R1YkluZm8pKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJh
dGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgoY29kZUJs
b2NrLCBzdHViSW5mbyk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5s
aW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVC
bG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oa2luZCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFN0cmluZ0xlbmd0aChsb2Nr
ZXIpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZUdldEJ5KEoKICAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKICAgICAg
ICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkK
ICAgICAgICAgICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94eSkgewotICAgICAgICAgICAg
ICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxm
UHJvcGVydHlBY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7
CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1
cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRD
b2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlT
ZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0s
IHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpKTsKICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBs
YWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpAQCAtNzMxLDExICs3MzEsMTEgQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnkoSgogICAgICAgICAgICAgICAg
IG9sZFN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5j
YWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIElu
bGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzbG90
LmNhY2hlZE9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmNh
bkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBzbG90LmNh
Y2hlZE9mZnNldCgpKQogICAgICAgICAgICAgICAgICAgICAmJiAhb2xkU3RydWN0dXJlLT5uZWVk
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICAgICAgICAgJiYgIWlzUHJv
eHkpIHsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2Vu
ZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAg
ICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6Omdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBvbGRTdHJ1Y3R1
cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJh
dGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Qu
YmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNs
b3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRC
eUZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOwpAQCAtMTEzMiw3ICsxMTMyLDcg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKICAgICAgICAgICAgICAg
ICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZQogICAgICAgICAgICAgICAgICYmICFzbG90Lndh
dGNocG9pbnRTZXQoKQogICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29k
ZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3Moc3R1YkluZm8sIHN0
cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5s
aW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAg
ICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5CeVNlbGZQYXRjaCwgc3RydWN0dXJl
LT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1l
bnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0YXRp
YyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kKIAogdm9pZCB1bmxpbmtDYWxsKFZN
JiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7Ci0gICAgZGF0YUxvZ0xuSWYoT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgY2FsbCBhdCAiLCBjYWxsTGlua0lu
Zm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNz
ZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5r
SW5mbykpOwogICAgIAogICAgIHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRh
Zz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MzEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oIgogI2luY2x1ZGUgIkNh
bGxGcmFtZS5oIgogI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCisjaW5j
bHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGlu
ZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9ySGFuZGxpbmdTY29wZS5o
IgpAQCAtMzcwLDEzICszNzEsMjIgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJp
c3RpY3MoVgogICAgIAogICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGlj
dGlvbnMoKTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRUeXBlOjpCYXNl
bGluZUpJVCkgeworICAgICAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gYmFzZWxpbmVS
ZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNv
ZGUpIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5rZWRCYXNlbGluZUNv
ZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOworICAgICAgICAgICAg
Y29kZUJsb2NrLT5qaXROZXh0SW52b2NhdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVz
aG9sZFJlYWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywg
ImRlbGF5SklUQ29tcGlsZSIsICgidGhyZXNob2xkIG5vdCByZWFjaGVkLCBjb3VudGVyID0gIiwg
Y29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICAgICAgZGF0YUxvZ0xuSWYo
T3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQgc2hvdWxkIGJlIGxpZnRl
ZC4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBKSVRXb3JrbGlz
dDo6U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlz
dCgpLmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBKSVRDb21waWxhdGlvbktleShjb2Rl
QmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpKTsKKyAgICBKSVRXb3JrbGlzdDo6
U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdvcmtsaXN0OjplbnN1cmVHbG9iYWxXb3JrbGlzdCgp
LmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBKSVRDb21waWxhdGlvbktleShjb2RlQmxv
Y2stPnVubGlua2VkQ29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpKTsK
IAogICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkg
ewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NSKCksICIgICAgQ29kZSB3
YXMgYWxyZWFkeSBjb21waWxlZC4iKTsKQEAgLTQ2Niw4ICs0NzYsMTAgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVhcmx5
RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgY29kZUJsb2NrLT5sb29wSGludHNBcmVF
bGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAgICAgICB1aW50cHRyX3QqIHB0
ciA9IHZtLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihwYyk7CiAgICAgICAgICpwdHIgKz0g
Y29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkubV9hY3RpdmVUaHJlc2hvbGQ7Ci0gICAg
ICAgIGlmICgqcHRyID49IE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1p
dCgpKQorICAgICAgICBpZiAoKnB0ciA+PSBPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0
ZUxvb3BzTGltaXQoKSkgeworICAgICAgICAgICAgY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKENv
bmN1cnJlbnRKU0xvY2tlcihjb2RlQmxvY2stPm1fbG9jaykpOyAvLyBXZSdyZSByZXR1cm5pbmcg
dG8gdGhlIE9TUiBlbnRyeSBjb2RlIGhlcmUsIHdoaWNoIGV4cGVjdHMgdGhhdCBtX2ppdERhdGEg
aXMgbm90IG51bGwuCiAgICAgICAgICAgICBMTElOVF9SRVRVUk5fVFdPKExMSW50OjpmdXp6ZXJS
ZXR1cm5FYXJseUZyb21Mb29wSGludEVudHJ5cG9pbnQoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSwgY2FsbEZyYW1lLT50b3BPZkZyYW1lKCkpOworICAgICAgICB9CiAgICAgfQogICAgIAog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4MzEwMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJp
Y3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGlu
dGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF8lb3Bjb2RlTmFtZSUs
IG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1
cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAgICAg
b3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFy
eUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0
YSh0MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGJpbmVxIFRhZ09m
ZnNldFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBAIC0xMDIzLDcgKzEwMTksNyBAQCBt
YWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAgICAgICAgICMgTWV0YWRh
dGEgaW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uKHQyLCAuc2xv
dykKICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCi0gICAgICAg
IHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5
QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50LCB0MSwgdDIpCiAgICAg
ICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4OSwyMiArMTA4NSwxOCBAQCBlbmQp
CiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAKLSAgICBtYWNybyB1cGRhdGVBcml0
aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQotICAgIGVuZAotCiAg
ICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5lcSB0MSwgSW50MzJUYWcs
IC5vcE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNs
b3cKICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludCkK
KyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlSW50LCB0
NSwgdDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdhdGVTcmNOb3RJbnQ6CiAg
ICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JpIDB4ODAwMDAwMDAs
IHQxCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1cGRh
dGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0NSwgdDMp
CiAgICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAgLTExMTUsMTAgKzExMDcs
NiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3Bjb2Rl
U3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9wZXJhdGlvbikKICAgICBs
bGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gYXJp
dGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1l
dGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1XQot
ICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCiAgICAgICAgIGdldChtX3Jo
cywgdDIpCiAgICAgICAgIGdldChtX2xocywgdDApCkBAIC0xMTI2LDcgKzExMTQsNyBAQCBtYWNy
byBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCBJbnQz
MlRhZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50MzJUYWcsIC5vcDJOb3RJbnQK
LSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwg
dDIpCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVnZXJPcGVyYXRpb25BbmRT
dG9yZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKQEAgLTExMzYs
MTIgKzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAog
ICAgICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAgICAgICAgYmliIHQzLCBMb3dlc3RU
YWcsIC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAgICAgYmluZXEgdDMsIEludDMyVGFnLCAuc2xv
dwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAgICAgICB1
cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1iZXJJ
bnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgICAgICBqbXAgLm9wMU5vdElu
dFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAgICAgICAgZmlpMmQgdDEsIHQzLCBm
dDEKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAg
ICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVt
YmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJlYWR5OgogICAgICAgICBnZXQobV9k
c3QsIHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1Myw3ICsxMTQxLDcgQEAg
bWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAgICAgICAjIEZpcnN0
IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgb3BlcmFuZCBpcyBkZWZp
bml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYmlhIHQzLCBMb3dl
c3RUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIp
CisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJv
ZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwgZnQwCiAgICAgICAgIGZp
aTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJhdGlvbihmdDEsIGZ0MCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNDQxLDggKzQ0
MSwxMyBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgICAgICAgICBtb3Zl
IFBDLCBhMQogICAgICAgICAgICAgY0NhbGwyKF9sbGludF9sb29wX29zcikKICAgICAgICAgICAg
IGJ0cHogcjAsIC5yZWNvdmVyCi0KICAgICAgICAgICAgIG1vdmUgcjEsIHNwCisKKyAgICAgICAg
ICAgICMgQmFzZWxpbmUgdXNlcyBMTEludCdzIFBCIHJlZ2lzdGVyIGZvciBpdHMgSklUIGNvbnN0
YW50IHBvb2wuCisgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKKyAgICAgICAg
ICAgIGxvYWRwIENvZGVCbG9jazo6bV9qaXREYXRhW1BCXSwgUEIKKyAgICAgICAgICAgIGxvYWRw
IENvZGVCbG9jazo6SklURGF0YTo6bV9qaXRDb25zdGFudFBvb2xbUEJdLCBQQgorCiAgICAgICAg
ICAgICBpZiBBUk02NEUKICAgICAgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhw
ciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6bG9vcE9T
UkVudHJ5KSAqIFB0clNpemUsIGEyCiAgICAgICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRv
SklUR2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKQEAgLTEwNTYsMTAgKzEwNjEsNiBAQCBzdHJp
Y3RFcXVhbGl0eUp1bXBPcChqbnN0cmljdGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG9wY29k
ZU5hbWUsIG9wY29kZVN0cnVjdCwgaW50ZWdlck9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1l
dGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9m
aWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2FyaXRoUHJvZmlsZSArIFVuYXJ5QXJpdGhQcm9maWxlOjptX2JpdHNbdDJdCi0gICAgICAg
IGVuZAotCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGxvYWRxIFtjZnIsIHQw
LCA4XSwgdDEKICAgICAgICAgbWV0YWRhdGEodDIsIHQzKQpAQCAtMTA2OSw3ICsxMDcwLDcgQEAg
bWFjcm8gcHJlT3Aob3Bjb2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbgogICAgICAgICBpbnRlZ2Vy
T3BlcmF0aW9uKHQxLCAuc2xvdykKICAgICAgICAgb3JxIG51bWJlclRhZywgdDEKICAgICAgICAg
c3RvcmVxIHQxLCBbY2ZyLCB0MCwgOF0KLSAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRo
UHJvZmlsZUludCkKKyAgICAgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0
LCBBcml0aFByb2ZpbGVJbnQsIHQyLCB0MykKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnNs
b3c6CkBAIC0xMTM0LDExICsxMTM1LDYgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRh
LCByZXR1cm4pCi0KLSAgICBtYWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAg
b3JoIHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRo
UHJvZmlsZTo6bV9iaXRzW3QxXQotICAgIGVuZAotCiAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCiAgICAgbWV0YWRhdGEodDEs
IHQyKQpAQCAtMTE0NiwxMiArMTE0MiwxMiBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0
ZSwgT3BOZWdhdGUsCiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAg
IG5lZ2kgdDMKICAgICBvcnEgbnVtYmVyVGFnLCB0MwotICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShB
cml0aFByb2ZpbGVJbnQpCisgICAgdXBkYXRlVW5hcnlBcml0aFByb2ZpbGUoT3BOZWdhdGUsIEFy
aXRoUHJvZmlsZUludCwgdDEsIHQyKQogICAgIHJldHVybih0MykKIC5vcE5lZ2F0ZU5vdEludDoK
ICAgICBidHF6IHQzLCBudW1iZXJUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4b3JxIDB4ODAwMDAw
MDAwMDAwMDAwMCwgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVy
KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2ZpbGVOdW1i
ZXIsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC0xMTY0LDEw
ICsxMTYwLDYgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAogICAg
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfJW9wY29kZU5hbWUlLCBvcGNvZGVTdHJ1Y3QsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0
YSh0NSwgdDApCiAKLSAgICAgICAgbWFjcm8gcHJvZmlsZSh0eXBlKQotICAgICAgICAgICAgb3Jo
IHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBCaW5hcnlB
cml0aFByb2ZpbGU6Om1fYml0c1t0NV0KLSAgICAgICAgZW5kCi0KICAgICAgICAgZ2V0KG1fcmhz
LCB0MCkKICAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZShzaXplLCB0MCwgdDEpCkBAIC0xMTc3LDcgKzExNjksNyBAQCBtYWNybyBiaW5hcnlPcEN1
c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAg
IGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSh0MSwgdDAsIC5zbG93LCB0MikKIAotICAgICAgICBw
cm9maWxlKEFyaXRoUHJvZmlsZUludEludCkKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9m
aWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGRp
c3BhdGNoKCkKIAogICAgIC5vcDFOb3RJbnQ6CkBAIC0xMTg3LDEwICsxMTc5LDEwIEBAIG1hY3Jv
IGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICAgICAgYnRxeiB0MSwgbnVt
YmVyVGFnLCAuc2xvdwogICAgICAgICBhZGRxIG51bWJlclRhZywgdDEKICAgICAgICAgZnEyZCB0
MSwgZnQxCi0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyKQorICAgICAg
ICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVOdW1i
ZXJOdW1iZXIsIHQ1LCB0MikKICAgICAgICAgam1wIC5vcDFOb3RJbnRSZWFkeQogICAgIC5vcDFO
b3RJbnRPcDJJbnQ6Ci0gICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVySW50KQorICAg
ICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0aFByb2ZpbGVO
dW1iZXJJbnQsIHQ1LCB0MikKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgIC5vcDFOb3RJbnRS
ZWFkeToKICAgICAgICAgZ2V0KG1fZHN0LCB0MikKQEAgLTEyMDQsOSArMTE5Niw5IEBAIG1hY3Jv
IGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKIAogICAgIC5vcDJOb3RJbnQ6CiAg
ICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBp
cyBkZWZpbml0ZWx5IG5vdC4KLSAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYnRxeiB0
MSwgbnVtYmVyVGFnLCAuc2xvdwotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJl
cikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQ
cm9maWxlSW50TnVtYmVyLCB0NSwgdDIpCisgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAg
IGNpMmRzIHQwLCBmdDAKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQg
dDEsIGZ0MQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDIwLDcgKzE0MjAsOCBAQCBlbmQKIAogbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQs
IGFjdGlvbikKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBiYWRkaXMgaW5jcmVt
ZW50LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9u
Q291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCisgICAgbG9hZHAgQ29kZUJsb2NrOjpt
X2xsaW50RXhlY3V0ZUNvdW50ZXJbdDBdLCB0MAorICAgIGJhZGRpcyBpbmNyZW1lbnQsIEJhc2Vs
aW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCiAgICAgYWN0aW9u
KCkKICAgICAuY29udGludWU6CiBlbmQKQEAgLTE1MDMsNyArMTUwNCw4IEBAIG1hY3JvIHByb2xv
Z3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2MKICAgICBjb2RlQmxvY2tHZXR0ZXIodDEpCiAg
ICAgY29kZUJsb2NrU2V0dGVyKHQxKQogICAgIGlmIG5vdCAoQ19MT09QIG9yIENfTE9PUF9XSU4p
Ci0gICAgICAgIGJhZGRpcyA1LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJh
c2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QxXSwgLmNvbnRpbnVlCisgICAgICAg
IGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyW3QxXSwgdDAKKyAgICAgICAg
YmFkZGlzIDUsIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRp
bnVlCiAgICAgICAgIGlmIEpTVkFMVUU2NAogICAgICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAg
ICAgICAgICBtb3ZlIFBDLCBhMQpAQCAtMTYxNywxNCArMTYxOSwxNCBAQCBtYWNybyBmdW5jdGlv
bkluaXRpYWxpemF0aW9uKHByb2ZpbGVBcmdTCiAgICAgIyBvcHRpbWFsIHdheSBmb3IgYXJjaGl0
ZWN0dXJlcyB0aGF0IGhhdmUgbW9yZSB0aGFuIGZpdmUgcmVnaXN0ZXJzIGF2YWlsYWJsZQogICAg
ICMgZm9yIGFyYml0cmFyeSB1c2UgaW4gdGhlIGludGVycHJldGVyLgogICAgIGxvYWRpIENvZGVC
bG9jazo6bV9udW1QYXJhbWV0ZXJzW3QxXSwgdDAKLSAgICBhZGRwIC1wcm9maWxlQXJnU2tpcCwg
dDAgIyBVc2UgYWRkaSBiZWNhdXNlIHRoYXQncyB3aGF0IGhhcyB0aGUgcGVlcGhvbGUKKyAgICBh
ZGRwIC1wcm9maWxlQXJnU2tpcCwgdDAKICAgICBhc3NlcnQobWFjcm8gKG9rKSBicGd0ZXEgdDAs
IDAsIG9rIGVuZCkKICAgICBidHB6IHQwLCAuYXJndW1lbnRQcm9maWxlRG9uZQogICAgIGxvYWRw
IENvZGVCbG9jazo6bV9hcmd1bWVudFZhbHVlUHJvZmlsZXMgKyBGaXhlZFZlY3Rvcjo6bV9zdG9y
YWdlICsgUmVmQ291bnRlZEFycmF5OjptX2RhdGFbdDFdLCB0MwogICAgIGJ0cHogdDMsIC5hcmd1
bWVudFByb2ZpbGVEb25lICMgV2hlbiB3ZSBjYW4ndCBKSVQsIHdlIGRvbid0IGFsbG9jYXRlIGFu
eSBhcmd1bWVudCB2YWx1ZSBwcm9maWxlcy4KICAgICBtdWxwIHNpemVvZiBWYWx1ZVByb2ZpbGUs
IHQwLCB0MiAjIEFhYWFhaGhoaCEgTmVlZCBzdHJlbmd0aCByZWR1Y3Rpb24hCiAgICAgbHNoaWZ0
cCAzLCB0MCAjIG9mZnNldCBvZiBsYXN0IEpTVmFsdWUgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4K
LSAgICBhZGRwIHQyLCB0MyAjIHBvaW50ZXIgdG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBp
biBDb2RlQmxvY2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLgorICAgIGFkZHAgdDIsIHQzICMg
cG9pbnRlciB0byBlbmQgb2YgVmFsdWVQcm9maWxlIGFycmF5IGluIHRoZSB2YWx1ZSBwcm9maWxl
IGFycmF5LgogLmFyZ3VtZW50UHJvZmlsZUxvb3A6CiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAg
IGxvYWRxIFRoaXNBcmd1bWVudE9mZnNldCAtIDggKyBwcm9maWxlQXJnU2tpcCAqIDhbY2ZyLCB0
MF0sIHQyCkBAIC0yNTYzLDYgKzI1NjUsMTcgQEAgbWFjcm8gbm90U3VwcG9ydGVkKCkKICAgICBl
bmQKIGVuZAogCisKK21hY3JvIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
dHlwZSwgbWV0YWRhdGEsIHRlbXApCisgICAgbG9hZHAgJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2FyaXRoUHJvZmlsZVttZXRhZGF0YV0sIHRlbXAKKyAgICBvcmggdHlwZSwgVW5hcnlBcml0
aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKK21hY3JvIHVwZGF0ZUJpbmFyeUFyaXRoUHJv
ZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1ldGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNv
ZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAg
b3JoIHR5cGUsIEJpbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3RlbXBdCitlbmQKKwogLy8gRklY
TUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGUgWDg2XzY0X1dJTiBjb25kaXRpb24gaGVyZSwgc2lu
Y2UgV0VCQVNTRU1CTFkgc2hvdWxkIGFscmVhZHkgYmUgZmFsc2Ugb24gV2luZG93cwogLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzcxNgogaWYgV0VCQVNTRU1C
TFkgYW5kIG5vdCBYODZfNjRfV0lOCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWFibGVJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCShyZXZpc2lvbiAyODMxMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWFibGVJZGVudGlmaWVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDggKzQ4LDEwIEBAIHB1YmxpYzoKICAgICBDYWNoZWFibGVJZGVudGlm
aWVyKCkgPSBkZWZhdWx0OwogCiAgICAgc3RhdGljIGlubGluZSBDYWNoZWFibGVJZGVudGlmaWVy
IGNyZWF0ZUZyb21DZWxsKEpTQ2VsbCogaWRlbnRpZmllcik7Ci0gICAgc3RhdGljIGlubGluZSBD
YWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhD
b2RlQmxvY2sqLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgc3RhdGljIGlubGluZSBDYWNoZWFi
bGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxv
Y2sqLCBVbmlxdWVkU3RyaW5nSW1wbCopOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSosIGNvbnN0IElkZW50aWZp
ZXImKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICBzdGF0aWMg
aW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29k
ZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgIHN0YXRpYyBp
bmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKFVu
aXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBDYWNoZWFibGVJZGVudGlm
aWVyIGNyZWF0ZUZyb21SYXdCaXRzKHVpbnRwdHJfdCByYXdCaXRzKSB7IHJldHVybiBDYWNoZWFi
bGVJZGVudGlmaWVyKHJhd0JpdHMpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaAkocmV2
aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxl
SWRlbnRpZmllcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE0IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJ
ZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29k
ZUJsb2NrVHlwZT4KK2lubGluZSBDYWNoZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2tUeXBlKiBj
b2RlQmxvY2ssIGNvbnN0IElkZW50aWZpZXImIGkpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUZyb21J
ZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhjb2RlQmxvY2ssIGkuaW1wbCgpKTsKIH0KIAotaW5s
aW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CitpbmxpbmUg
Q2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxvY2st
Pmhhc0lkZW50aWZpZXIodWlkKSk7CiAgICAgcmV0dXJuIENhY2hlYWJsZUlkZW50aWZpZXIodWlk
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5j
cHAJKHJldmlzaW9uIDI4MzEwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlZFR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhY2hlZFR5cGVzLmgiCiAKKyNpbmNsdWRlICJCYXNlbGlu
ZUpJVENvZGUuaCIKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJCeXRlY29k
ZUNhY2hlRXJyb3IuaCIKICNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKQEAg
LTE5MTgsNiArMTkxOSw4IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bVZhbHVlUHJvZmls
ZXMoKSBjb25zdCB7IHJldHVybiBtX251bVZhbHVlUHJvZmlsZXM7IH0KICAgICB1bnNpZ25lZCBu
dW1BcnJheVByb2ZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1BcnJheVByb2ZpbGVzOyB9Cisg
ICAgdW5zaWduZWQgbnVtQmluYXJ5QXJpdGhQcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
QmluYXJ5QXJpdGhQcm9maWxlczsgfQorICAgIHVuc2lnbmVkIG51bVVuYXJ5QXJpdGhQcm9maWxl
cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVW5hcnlBcml0aFByb2ZpbGVzOyB9CiAKIHByaXZhdGU6
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1fdGhpc1JlZ2lzdGVyOwpAQCAtMTk1Miw2ICsxOTU1LDgg
QEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVQcm9maWxlczsKICAgICB1bnNp
Z25lZCBtX251bUFycmF5UHJvZmlsZXM7CisgICAgdW5zaWduZWQgbV9udW1CaW5hcnlBcml0aFBy
b2ZpbGVzOworICAgIHVuc2lnbmVkIG1fbnVtVW5hcnlBcml0aFByb2ZpbGVzOwogCiAgICAgQ2Fj
aGVkTWV0YWRhdGFUYWJsZSBtX21ldGFkYXRhOwogCkBAIC0yMTYwLDYgKzIxNjUsOCBAQCBBTFdB
WVNfSU5MSU5FIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlCiAgICAgLCBtX3JhcmVEYXRhKGNh
Y2hlZENvZGVCbG9jay5yYXJlRGF0YShkZWNvZGVyKSkKICAgICAsIG1fdmFsdWVQcm9maWxlcyhj
YWNoZWRDb2RlQmxvY2subnVtVmFsdWVQcm9maWxlcygpKQogICAgICwgbV9hcnJheVByb2ZpbGVz
KGNhY2hlZENvZGVCbG9jay5udW1BcnJheVByb2ZpbGVzKCkpCisgICAgLCBtX2JpbmFyeUFyaXRo
UHJvZmlsZXMoY2FjaGVkQ29kZUJsb2NrLm51bUJpbmFyeUFyaXRoUHJvZmlsZXMoKSkKKyAgICAs
IG1fdW5hcnlBcml0aFByb2ZpbGVzKGNhY2hlZENvZGVCbG9jay5udW1VbmFyeUFyaXRoUHJvZmls
ZXMoKSkKIHsKIH0KIApAQCAtMjMzNyw2ICsyMzQ0LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIENh
Y2hlZENvZGVCbG9jazxDb2RlQgogICAgIG1faGFzQ2hlY2twb2ludHMgPSBjb2RlQmxvY2subV9o
YXNDaGVja3BvaW50czsKICAgICBtX251bVZhbHVlUHJvZmlsZXMgPSBjb2RlQmxvY2subV92YWx1
ZVByb2ZpbGVzLnNpemUoKTsKICAgICBtX251bUFycmF5UHJvZmlsZXMgPSBjb2RlQmxvY2subV9h
cnJheVByb2ZpbGVzLnNpemUoKTsKKyAgICBtX251bUJpbmFyeUFyaXRoUHJvZmlsZXMgPSBjb2Rl
QmxvY2subV9iaW5hcnlBcml0aFByb2ZpbGVzLnNpemUoKTsKKyAgICBtX251bVVuYXJ5QXJpdGhQ
cm9maWxlcyA9IGNvZGVCbG9jay5tX3VuYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CiAKICAgICBt
X21ldGFkYXRhLmVuY29kZShlbmNvZGVyLCBjb2RlQmxvY2subV9tZXRhZGF0YS5nZXQoKSk7CiAg
ICAgbV9yYXJlRGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fcmFyZURhdGEuZ2V0KCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuY3BwCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODAsNyArNDgwLDcg
QEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90bwogI2lmIEVOQUJMRShK
SVQpCiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3AoT3BOZWdh
dGU6Ok1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZSByZXN1bHQsIEpTVmFsdWUgb3BlcmFuZCkK
IHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9m
aWxlOworICAgIFVuYXJ5QXJpdGhQcm9maWxlJiBwcm9maWxlID0gKm1ldGFkYXRhLm1fYXJpdGhQ
cm9maWxlOwogICAgIHByb2ZpbGUub2JzZXJ2ZUFyZyhvcGVyYW5kKTsKICAgICBBU1NFUlQocmVz
dWx0LmlzTnVtYmVyKCkgfHwgcmVzdWx0LmlzQmlnSW50KCkpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNp
b24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVj
dXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsyODksOCBAQCBwdWJsaWM6CiAKICAg
ICBzdGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZlJhcmVEYXRhKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9yYXJlRGF0YSk7IH0KICAgICBzdGF0
aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFzU3RyaW5nSW5SYXJlRGF0YSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihSYXJlRGF0YSwgbV9hc1N0cmluZyk7IH0KKyAgICBzdGF0aWMgaW5s
aW5lIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVCbG9ja0ZvckNhbGwoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9ja0ZvckNhbGwpOyB9CisgICAg
c3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdCk7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJh
c2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2
aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw4ICs0MzQsNiBAQCB2b2lkIE9wdGlvbnM6OnJlY29t
cHV0ZURlcGVuZGVudE9wdGlvbnMoCiAgICAgT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkgPSBm
YWxzZTsKICNlbmRpZgogCi0gICAgaWYgKCFpc0FSTTY0KCkpCi0gICAgICAgIE9wdGlvbnM6OnVz
ZURhdGFJQygpID0gZmFsc2U7CiAgICAgaWYgKCFPcHRpb25zOjp1c2VEYXRhSUMoKSkKICAgICAg
ICAgT3B0aW9uczo6dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCkgPSBmYWxzZTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAy
ODMxMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDYgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZh
c3RNZW1vcnkoKTsKICAgICB2KEludDMyLCBldmFsVGhyZXNob2xkTXVsdGlwbGllciwgMTAsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG1heGltdW1FdmFsQ2FjaGVhYmxlU291
cmNlTGVuZ3RoLCAyNTYsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKLSAgICB2KEJvb2wsIHJh
bmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hl
Y2twb2ludHNGb3JCYXNlbGluZSwgMTAwMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihJbnQz
MiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50c0ZvclVwcGVyVGllcnMs
IDUwMDAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkBAIC01MzIsNiArNTMxLDcgQEAgYm9v
bCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZURhdGFJQywg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDSW5PcHRpbWl6
aW5nSklULCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VEYXRhSUNT
aGFyaW5nLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB1c2VCYXNlbGlu
ZUpJVENvZGVTaGFyaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgLyog
RmVhdHVyZSBGbGFncyAqL1wKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY3JpcHRFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjgzMTAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5NiwxMCArMzk2LDE5IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6cHJl
cGFyZUZvckV4ZWN1dGkKICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVCeXRlY29kZSgpKQogICAg
ICAgICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7CiAKLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQo
KSkKLSAgICAgICAgc2V0dXBMTEludChjb2RlQmxvY2spOwotICAgIGVsc2UKLSAgICAgICAgc2V0
dXBKSVQodm0sIGNvZGVCbG9jayk7CisgICAgYm9vbCBpbnN0YWxsZWRVbmxpbmtlZEJhc2VsaW5l
Q29kZSA9IGZhbHNlOworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKFJlZlB0cjxCYXNlbGluZUpJ
VENvZGU+IGJhc2VsaW5lUmVmID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX3Vu
bGlua2VkQmFzZWxpbmVDb2RlKSB7CisgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5saW5r
ZWRCYXNlbGluZUNvZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlu
c3RhbGxlZFVubGlua2VkQmFzZWxpbmVDb2RlID0gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKyAgICBp
ZiAoIWluc3RhbGxlZFVubGlua2VkQmFzZWxpbmVDb2RlKSB7CisgICAgICAgIGlmIChPcHRpb25z
Ojp1c2VMTEludCgpKQorICAgICAgICAgICAgc2V0dXBMTEludChjb2RlQmxvY2spOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrKTsKKyAgICB9CiAKICAg
ICBpbnN0YWxsQ29kZSh2bSwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmNvZGVUeXBlKCksIGNvZGVC
bG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkocmV2aXNpb24gMjgz
MTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50VGllclVwQ291bnRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9w
dGltaXplQWZ0ZXJXYXJtVXAoKQogICAgIHsKICAgICAgICAgaWYgKE9wdGlvbnM6Ondhc21MTElu
dFRpZXJzVXBUb0JCUSgpKQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRo
cmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgICAg
ICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVBZnRlcldh
cm1VcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlv
bnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVB
ZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJl
c2hvbGRSZWFjaGVkKCkKQEAgLTY1LDkgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgb3B0aW1p
emVTb29uKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1VwVG9C
QlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JC
QlFPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQo
T3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1pemVTb29uKCkpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1p
emVTb29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigpKTsKICAgICB9CiAKICAgICBzdHJ1Y3QgT1NS
RW50cnlEYXRhIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBD
b3VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRp
ZXJVcENvdW50LmNwcAkocmV2aXNpb24gMjgzMTAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVRpZXJVcENvdW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCiBUaWVyVXBDb3VudDo6VGllclVw
Q291bnQoKQogewotICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdP
cHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgIHNldE5ld1RocmVzaG9sZChPcHRp
b25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogfQogCiBUaWVyVXBD
b3VudDo6flRpZXJVcENvdW50KCkgPSBkZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRpZXJVcENvdW50LmgJKHJldmlzaW9uIDI4MzEwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3VudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAodWlu
dDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgYWZ0ZXIgd2Fy
bS11cC4iKTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9N
R09wdGltaXplQWZ0ZXJXYXJtVXAoKSwgbnVsbHB0cik7CisgICAgICAgIHNldE5ld1RocmVzaG9s
ZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCkpOwogICAgIH0K
IAogICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKQpAQCAtOTAs
MTQgKzkwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24odWlu
dDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgbmV4dCBpbnZv
Y2F0aW9uLiIpOwotICAgICAgICBzZXROZXdUaHJlc2hvbGQoMCwgbnVsbHB0cik7CisgICAgICAg
IHNldE5ld1RocmVzaG9sZCgwKTsKICAgICB9CiAKICAgICB2b2lkIG9wdGltaXplU29vbih1aW50
MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHsKICAgICAgICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6
dmVyYm9zZU9TUigpLCBmdW5jdGlvbkluZGV4LCAiOiBPTUctb3B0aW1pemluZyBzb29uLiIpOwog
ICAgICAgICAvLyBGSVhNRTogTmVlZCBhZGp1c3RtZW50IG9uY2Ugd2UgZ2V0IG1vcmUgaW5mb3Jt
YXRpb24gYWJvdXQgd2FzbSBmdW5jdGlvbnMuCi0gICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRp
b25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSwgbnVsbHB0cik7CisgICAgICAgIHNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAg
ICAgfQogCiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRp
b25SZXN1bHQodWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0
KQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI4MzEwMCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDktMjcgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgQnVpbGQgYW4gdW5saW5rZWQgYmFzZWxpbmUgSklU
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjkyMjMK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzgyMzIxNzcyPgorCisgICAgICAgIFJldmlld2VkIGJ5
IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgKiB3dGYvQmFnLmg6CisgICAgICAgICogd3RmL1Bh
Y2tlZC5oOgorICAgICAgICAoV1RGOjpQYWNrZWRBbGlnbmVkUHRyOjpvcGVyYXRvciogY29uc3Qp
OgorCiAyMDIxLTA5LTI2ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4MzA4MyBhbmQgcjI4MzA4OC4KSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Jh
Zy5oCShyZXZpc2lvbiAyODMxMDApCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNiArNjYsMjAgQEAgcHVibGljOgogICAgICAgICBvdGhlci5tX2hlYWQgPSBu
dWxscHRyOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgQmFnJiBvcGVy
YXRvcj0oQmFnPFQsIFU+JiYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodW53cmFwcGVkSGVh
ZCgpID09IG90aGVyLnVud3JhcHBlZEhlYWQoKSkKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KworICAgICAgICBCYWcgZGVzdHJveTsKKyAgICAgICAgZGVzdHJveS5tX2hlYWQgPSB1bndyYXBw
ZWRIZWFkKCk7CisgICAgICAgIG1faGVhZCA9IG90aGVyLnVud3JhcHBlZEhlYWQoKTsKKyAgICAg
ICAgb3RoZXIubV9oZWFkID0gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
fQorCiAgICAgfkJhZygpCiAgICAgewogICAgICAgICBjbGVhcigpOwpJbmRleDogU291cmNlL1dU
Ri93dGYvUGFja2VkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFja2VkLmgJKHJl
dmlzaW9uIDI4MzEwMCkKKysrIFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODYsNyArMTg2LDEwIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBUKiBvcGVyYXRvci0+
KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KLSAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiAqZ2V0KCk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVID0gVD4KKyAgICB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc192b2lkX3Y8VT4sIFUmPjo6dHlwZSBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KKwogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIWdldCgpOyB9CiAKICAgICAvLyBUaGlzIGNvbnZlcnNpb24gb3BlcmF0b3Ig
YWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90aGVyIGludGVn
ZXIgdHlwZXMuCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyODMxMDApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMyBAQAorMjAyMS0wOS0yNyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFw
cGxlLmNvbT4KKworICAgICAgICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtl
IFN1enVraS4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIw
MjEtMDktMjYgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjgzMDgzIGFuZCByMjgzMDg4LgpJbmRleDogVG9v
bHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCShyZXZpc2lvbiAyODMxMDApCisrKyBUb29scy9TY3Jp
cHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC04NjMsNyArODYzLDcg
QEAgZGVmIHJ1bkZUTE5vQ0pJVE5vQWNjZXNzSW5saW5pbmcoKm9wdGlvbgogZW5kCiAKIGRlZiBy
dW5GVExOb0NKSVRTbWFsbFBvb2woKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKLSAgICBy
dW4oImZ0bC1uby1jaml0LXNtYWxsLXBvb2wiLCAiLS1qaXRNZW1vcnlSZXNlcnZhdGlvblNpemU9
MTAyNDAwIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJmdGwtbm8tY2ppdC1zbWFsbC1wb29sIiwgIi0taml0
TWVtb3J5UmVzZXJ2YXRpb25TaXplPTIwMjQwMCIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09Q
VElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5Ob0NK
SVQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTExNzEsNyArMTE3MSw3IEBAIGRl
ZiBkZWZhdWx0UnVuTW9kdWxlcyhub0xMSW50OiB0cnVlKQogICAgIHJ1bigiZnRsLW5vLWNqaXQt
bm8taW5saW5lLXZhbGlkYXRlLW1vZHVsZXMiLCAiLW0iLCAiLS12YWxpZGF0ZUdyYXBoPXRydWUi
LCAiLS1tYXhpbXVtSW5saW5pbmdEZXB0aD0xIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BU
SU9OUykpCiAgICAgcnVuKCJmdGwtZWFnZXItbW9kdWxlcyIsICItbSIsICooRlRMX09QVElPTlMg
KyBFQUdFUl9PUFRJT05TKSkKICAgICBydW4oImZ0bC1lYWdlci1uby1jaml0LW1vZHVsZXMiLCAi
LW0iLCAiLS12YWxpZGF0ZUdyYXBoPXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJ
T05TICsgRUFHRVJfT1BUSU9OUykpCi0gICAgcnVuKCJmdGwtbm8tY2ppdC1zbWFsbC1wb29sLW1v
ZHVsZXMiLCAiLW0iLCAiLS1qaXRNZW1vcnlSZXNlcnZhdGlvblNpemU9MTAyNDAwIiwgKihGVExf
T1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUykpCisgICAgcnVuKCJmdGwtbm8tY2ppdC1zbWFsbC1w
b29sLW1vZHVsZXMiLCAiLW0iLCAiLS1qaXRNZW1vcnlSZXNlcnZhdGlvblNpemU9MjAyNDAwIiwg
KihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUykpCiBlbmQKIAogZGVmIG5vTm9MTEludFJ1
bk1vZHVsZXMK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439386</attachid>
            <date>2021-09-27 13:24:02 -0700</date>
            <delta_ts>2021-09-27 14:53:53 -0700</delta_ts>
            <desc>[fast-cq] patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>656488</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzNSBA
QAorMjAyMS0wOS0yNyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCdWlsZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTIyMworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODIzMjE3NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGFkZHMgYW4gInVubGlua2VkIiBiYXNlbGluZSBKSVQgdG8gSlNWQUxVRTY0
IHBsYXRmb3Jtcy4gVGhlIEpJVAorICAgICAgICBjb2RlIHByb2R1Y2VkIGJ5IHRoaXMgYmFzZWxp
bmUgSklUIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBhbGwgQ29kZUJsb2NrcyB0aGF0CisgICAgICAg
IHNoYXJlIGFuIFVubGlua2VkQ29kZUJsb2NrLiBUaGUgYmVuZWZpdCBvZiB0aGlzIGlzLCBpZiB3
ZSdyZSBjcmVhdGluZyBhIENvZGVCbG9jaworICAgICAgICBmcm9tIGFuIFVubGlua2VkQ29kZUJs
b2NrIHRoYXQgYWxyZWFkeSBjb21waWxlZCBhbiB1bmxpbmtlZCBiYXNlbGluZSBKSVQKKyAgICAg
ICAgaW5zdGFuY2UsIHRoaXMgbmV3IENvZGVCbG9jayBqdXN0IHN0YXJ0cyBvZmYgZXhlY3V0aW5n
IGluIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgImZvciBmcmVlIi4KKyAgICAgICAgCisgICAg
ICAgIFRvIG1ha2UgdGhpcyB3b3JrLCB0aGUgY29kZSB3ZSBlbWl0IG5vdyBuZWVkcyB0byBiZSBp
bmRlcGVuZGVudCBvZiBhIHNwZWNpZmljCisgICAgICAgIENvZGVCbG9jayBpbnN0YW5jZS4gV2Ug
dXNlIGEgQ29kZUJsb2NrIGluc3RhbmNlIGZvciBtaW5pbWFsIHByb2ZpbGluZyBpbmZvcm1hdGlv
bgorICAgICAgICB3aGVuIGNvbXBpbGluZywgYnV0IG90aGVyd2lzZSwgdGhlIGNvZGUgaXMgdGll
ZCB0byB0aGUgVW5saW5rZWRDb2RlQmxvY2suIFdoZW4KKyAgICAgICAgd2UgbmVlZCBDb2RlQmxv
Y2sgc3BlY2lmaWMgaW5mb3JtYXRpb24sIHdlIGxvYWQgaXQuIFRoaXMgdXN1YWxseSBtZWFucyB0
aGluZ3MKKyAgICAgICAgbGlrZSB3ZSdsbCBsb2FkIHRoaW5ncyBmcm9tIHRoZSBNZXRhZGF0YSBk
eW5hbWljYWxseS4gVGhpcyBwYXRjaCBhbHNvIGFkZHMgYQorICAgICAgICAibGlua2VkIGNvbnN0
YW50IHBvb2wiIGNvbmNlcHQsIGFuZCBhbnl0aW1lIHdlIGluc3RhbnRpYXRlIHN1Y2ggYSBDb2Rl
QmxvY2ssCisgICAgICAgIHdlIGFsc28gbmVlZCB0byBpbnN0YW50aWF0ZSB0aGlzICJsaW5rZWQg
Y29uc3RhbnQgcG9vbCIuIFRoaXMgY29udGFpbnMgdGhpbmdzCisgICAgICAgIGxpa2Ugb3VyIGlu
bGluZSBjYWNoZSBkYXRhIHN0cnVjdHVyZXMgKFN0cnVjdHVyZVN0dWJJbmZvKiksIEpTR2xvYmFs
T2JqZWN0KiwKKyAgICAgICAgZXRjLgorICAgICAgICAKKyAgICAgICAgVW5saW5rZWQgYmFzZWxp
bmUgSklUIGFsd2F5cyBydW5zIElDcyBpbiB0aGUgImRhdGEiIG1vZGUuIFRvIG1ha2UgdGhpcyB3
b3JrLCBJCisgICAgICAgIG1hZGUgZGF0YSBJQ3Mgd29yayBvbiB4ODZfNjQuIFRvIGRvIHRoaXMs
IHdlIG5vIGxvbmdlciBjYWxsL3JldCB0byB0aGUgSUMuCisgICAgICAgIEluc3RlYWQsIHdlIGp1
bXAgdG8gdGhlIElDLCBhbmQgdGhlIElDIGp1bXBzIGJhY2sgYnkgbG9hZGluZyB0aGUgImRvbmUi
IGxvY2F0aW9uCisgICAgICAgIGZyb20gdGhlIFN0cnVjdHVyZVN0dWJJbmZvIGR5bmFtaWNhbGx5
LiBUaGlzIHNpbXBsaWZpZXMgdGhlIGRlc2lnbiB0byBub3QgYmUKKyAgICAgICAgYmFzZWQgb24g
dGhlIGFybTY0IGNhbGxpbmcgY29udmVudGlvbiwgYW5kIGtlZXBzIHRoZSBzYW1lIHBlcmZvcm1h
bmNlIGNoYXJhY3RlcmlzdGljcy4gCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsc28g
YWRkcyBhIG5ldyB2ZXJzaW9uIG9mIElubGluZUFjY2VzcyB0aGF0IGlzIG9ubHkgdXNlZCBpbiBi
YXNlbGluZQorICAgICAgICBKSVQgKGZvciBub3cpLiBJbiB0aGUgZnV0dXJlLCB3ZSBjYW4gbWFr
ZSB0aGUgREZHL0ZUTCBhbHNvIHVzZSB0aGlzIGZvciBEYXRhCisgICAgICAgIElDcy4gQnV0IHdl
IGRvbid0IG5lZWQgdG8gZG8gdGhhdCB5ZXQgc2luY2UgdGhvc2UgdGllcnMgZG9uJ3QgdXNlIGRh
dGEgSUNzIGJ5CisgICAgICAgIGRlZmF1bHQuIFRoZSBiYXNlbGluZSBKSVQgbm93IGhhcyBhIHB1
cmUgZGF0YSBJQyBhcHByb2FjaCB0byBJbmxpbmVBY2Nlc3MuIFNvCisgICAgICAgIGluc3RlYWQg
b2YgcmVwYXRjaGluZyBjb2RlLCB3ZSByZXBhdGNoIGZpZWxkcyB3ZSBsb2FkIGR5bmFtaWNhbGx5
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGNsZWFucyB1cCBhIGZldyB0aGlu
Z3MgaW4gT1NSIGV4aXQsIHdoZXJlIGJvdGggREZHL0ZUTCB3ZXJlCisgICAgICAgIHN0b3Jpbmcg
Y2FsbGVlIHNhdmVzIHRvIHRoZSBjYWxsZWUgc2F2ZXMgYnVmZmVyIGluIGEgd2VpcmQgcGxhY2Us
IGFuZCBzZXBhcmF0ZQorICAgICAgICBmcm9tIG9uZSBhbm90aGVyLiBJIG5vdGljZWQgdGhpcyBj
b2RlIGNhbiBiZSBzaW1wbGlmaWVkIGlmIHdlIGp1c3Qgc3RvcmUKKyAgICAgICAgY2FsbGVlIHNh
dmVzIGF0IHRoZSBlbmQgb2YgdGhlIE9TUiBleGl0IGhhbmRsZXIsIGFuZCBmcm9tIGNvbW1vbiBK
SVQgZW1pc3Npb24KKyAgICAgICAgY29kZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBmaXhlcyBhIGJ1ZyB3aGVyZSB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGUgd3JvbmcgKGFu
ZCBhbHdheXMKKyAgICAgICAgbW9yZSBuZWdhdGl2ZSkgU1AgaW4gdGhlIGJhc2VsaW5lIEpJVC4g
VGhpcyBjb3VsZCBoYXBwZW4gd2hlbiB3ZSBPU1IgZXhpdAorICAgICAgICBmcm9tIGFuIGlubGlu
ZWQgZ2V0dGVyL3NldHRlci4gVGhlIE9TUiBleGl0IGNvZGUgcHV0cyB0aGUgcmV0dXJuIFBDIHdo
ZW4KKyAgICAgICAgcmV0dXJuaW5nIHRvIHRoZSBjYWxsIHNpdGUgb2YgdGhlIGdldHRlci9zZXR0
ZXIgdG8gYmUgdGhlIGlubGluZSBjYWNoZSdzCisgICAgICAgICJkb25lIGxvY2F0aW9uIi4gSG93
ZXZlciwgdGhpcyAiZG9uZSBsb2NhdGlvbiIgZGlkbid0IHVzZWQgdG8gcmVzdG9yZSBTUC4KKyAg
ICAgICAgVGhpcyBwYXRjaCBjb25zZXJ2YXRpdmVseSBtYWtlcyBpdCBzbyB0aGF0IHdlIHJlc3Rv
cmUgdGhlIFNQIGF0IHRoZXNlIHNpdGVzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBtZWFz
dXJlZCBhcyBhIDElIHNwZWVkdXAgb24gU3BlZWRvbWV0ZXIyLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVPcGVy
YW5kc0ZvckNoZWNrcG9pbnQuaDoKKyAgICAgICAgKEpTQzo6dmFsdWVQcm9maWxlT2Zmc2V0Rm9y
KToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpD
YWxsTGlua0luZm86OmZhc3RQYXRoU3RhcnQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86
OmVtaXRGYXN0UGF0aEltcGwpOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXRGYXN0
UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREYXRhSUNGYXN0UGF0aCk6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRGF0YUlDRmFzdFBhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsTGlua0luZm86OmVtaXREYXRhSUNTbG93UGF0aCk6CisgICAgICAgIChK
U0M6OkNhbGxMaW5rSW5mbzo6aW5pdGlhbGl6ZURhdGFJQyk6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZv
OjplbWl0RGlyZWN0VGFpbENhbGxGYXN0UGF0aCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmg6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6b2Zmc2V0T2ZNYXhBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6c2xvd1N0
dWIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmFkZHJlc3NPZk1heEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6ZmluYWxpemVKSVRJbmxpbmVDYWNoZXMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpmcmFtZVJlZ2lzdGVyQ291bnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJpbmFyeUFy
aXRoUHJvZmlsZUZvclBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmFyeUFyaXRoUHJv
ZmlsZUZvclBDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5kUEMpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmppdFNvb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdE5l
eHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNo
ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVEFkZElDKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRNdWxJQyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUU3ViSUMpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpzZXRQQ1RvQ29kZU9yaWdpbk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6dGhyZXNob2xkRm9ySklUKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpqaXRBZnRlcldhcm1VcCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25z
dGFudFBvb2wpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpiYXNlbGluZUpJVENvbnN0YW50UG9vbCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmRvbnRKSVRBbnl0aW1lU29vbik6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6bGxpbnRFeGVjdXRlQ291bnRlciBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4pOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZHJlc3NPZk51bVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmlzS25vd25DZWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjphZGRNYXRoSUMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnNldEpJVENvZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmppdENv
ZGVNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnN3aXRjaEp1bXBUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3RyaW5nU3dpdGNoSnVtcFRh
YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJvZmlsZSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6aml0Q29kZU1hcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YmFz
ZWxpbmVTd2l0Y2hKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJhc2VsaW5l
U3RyaW5nU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdTd2l0
Y2hKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRmZ1N0cmluZ1N3aXRjaEp1
bXBUYWJsZSk6CisgICAgICAgICogYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5o
OgorICAgICAgICAqIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwOgorICAgICAgICAoSlND
OjpFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFudD46OnNldFRocmVzaG9sZCk6CisgICAg
ICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRp
b25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlk
TWV0YWRhdGEuaDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVuZ3Ro
OjpvZmZzZXRPZkFycmF5UHJvZmlsZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRNb2RlTWV0YWRh
dGE6Om9mZnNldE9mTW9kZSk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRT
aXRlRmVlZGJhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklUR2V0
dGVyKToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
SW5CeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2spOgor
ICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OklubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoSlNDOjpJbmxp
bmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZSk6CisgICAgICAgIChKU0M6
OklubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKToKKyAgICAgICAgKEpT
Qzo6SW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5saW5l
QWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aCk6CisgICAgICAgIChKU0M6OklubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6
OmdlbmVyYXRlU2VsZkluQWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpyZXdp
cmVTdHViQXNKdW1wSW5BY2Nlc3MpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnJlc2V0
U3R1YkFzSnVtcEluQWNjZXNzKToKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuaDoK
KyAgICAgICAgKiBieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaDoKKyAgICAgICAgKEpT
Qzo6SXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2Rlcyk6CisgICAgICAgICog
Ynl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaDoKKyAgICAgICAgKEpTQzo6TExJbnRDYWxsTGlu
a0luZm86Om9mZnNldE9mQXJyYXlQcm9maWxlKToKKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUu
aDoKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6c3VjY2VlZCk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0dlbmVyYXRpb25TdGF0ZTo6Y2FsY3VsYXRlTGl2ZVJlZ2lzdGVyc0ZvckNhbGxBbmRFeGNlcHRp
b25IYW5kbGluZyk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6cHJlc2Vy
dmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0RXhjZXB0aW9ucyk6CisgICAgICAg
IChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlvbnMp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcDoKKyAgICAgICAg
KEpTQzo6UHV0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5m
bzo6aW5pdEdldEJ5SWRTZWxmKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86Omlu
aXRQdXRCeUlkUmVwbGFjZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjppbml0
SW5CeUlkU2VsZik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3ND
YXNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJlc2V0KToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6cHJvcGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZCeUlkU2VsZk9mZnNldCk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGluZUFjY2Vzc0Jhc2VTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkRv
bmVMb2NhdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6cHJpbnRTdXBlclNhbXBsZXJTdGF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5s
aW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6aGFzSWRl
bnRpZmllcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JK
SVQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9m
aWxlcyk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0YW50UmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25BdCBjb25zdCk6CisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjppbnN0cnVjdGlvbnNTaXplIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6Omxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJu
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzZXQp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YmluYXJ5QXJpdGhQcm9maWxlKToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnVuYXJ5QXJpdGhQcm9maWxlKToKKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmxsaW50RXhlY3V0ZUNvdW50ZXIpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1VubGlua2VkTWV0YWRhdGFUYWJsZS5oOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZE1ldGFkYXRhVGFibGU6Om9mZnNldEluTWV0YWRhdGFUYWJsZSk6CisgICAgICAgICog
Ynl0ZWNvZGUvVmFsdWVQcm9maWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUJhc2U6
OlZhbHVlUHJvZmlsZUJhc2UpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNlOjpjbGVh
ckJ1Y2tldHMpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNr
ZXQpOgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmg6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGUuY3BwOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmg6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6
CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVw
YXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6aGFuZGxlRXhpdENvdW50cyk6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FsbGVyUmV0dXJuUEMpOgorICAgICAgICAoSlNDOjpERkc6
OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1
bXBUb1RhcmdldCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dFByaXZhdGVOYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlQWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlU3ViKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlTmVnYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlTXVsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
Z1NoYWRvd0NoaWNrZW5UYWlsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEpJVENvZGUu
aDoKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmFkZE1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVVbmFyeU1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVCaW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUHV0UHJpdmF0ZU5hbWUpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAg
ICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21w
aWxlU3R1Yik6CisgICAgICAgICogZ2VuZXJhdG9yL01ldGFkYXRhLnJiOgorICAgICAgICAqIGpp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnN0
b3JlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRWaXJ0dWFs
Q2FsbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsV2l0
aG91dE1vdmluZ0dsb2JhbE9iamVjdCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5o
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKiBqaXQvQmFzZWxpbmVKSVRDb2RlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hdGhJQ0hvbGRlcjo6YWRkSklUQWRkSUMpOgorICAg
ICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKToKKyAgICAgICAgKEpTQzo6TWF0
aElDSG9sZGVyOjphZGRKSVRTdWJJQyk6CisgICAgICAgIChKU0M6Ok1hdGhJQ0hvbGRlcjo6YWRk
SklUTmVnSUMpOgorICAgICAgICAoSlNDOjpNYXRoSUNIb2xkZXI6OmFkb3B0TWF0aElDcyk6Cisg
ICAgICAgIChKU0M6OkJhc2VsaW5lSklUQ29kZTo6QmFzZWxpbmVKSVRDb2RlKToKKyAgICAgICAg
KEpTQzo6QmFzZWxpbmVKSVRDb2RlOjp+QmFzZWxpbmVKSVRDb2RlKToKKyAgICAgICAgKiBqaXQv
QmFzZWxpbmVKSVRDb2RlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRDb25zdGFudFBvb2w6
OmFkZCk6CisgICAgICAgIChKU0M6OkpJVENvbnN0YW50UG9vbDo6c2l6ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpJVENvbnN0YW50UG9vbDo6YXQgY29uc3QpOgorICAgICAgICAqIGppdC9CYXNl
bGluZUpJVFBsYW4uY3BwOgorICAgICAgICAoSlNDOjpCYXNlbGluZUpJVFBsYW46OmZpbmFsaXpl
KToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Q0NhbGxI
ZWxwZXJzOjpsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldEltcGwpOgorICAgICAgICAoSlNDOjpD
Q2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KToKKyAgICAgICAgKiBqaXQv
Q0NhbGxIZWxwZXJzLmg6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lz
dGVycyk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmg6CisgICAgICAgICog
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZs
ZXI6OkNhbGxGcmFtZVNodWZmbGVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OnByZXBhcmVGb3JUYWlsQ2FsbCk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVyLmg6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzbmFwc2hvdCBjb25zdCk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhclJl
YWRPbmx5Q2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNl
dCk6CisgICAgICAgIChKU0M6OkpJVDo6cmVzZXRTUCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRD
b25zdGFudFBvb2xSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFs
aXppbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmxpbmspOgorICAgICAgICAoSlNDOjpKSVQ6OmZp
bmFsaXplT25NYWluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKToKKyAgICAgICAgKEpT
Qzo6SklUOjpzdGFja1BvaW50ZXJPZmZzZXRGb3IpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAg
ICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZWdhdGUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfYWRkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElD
RmFzdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZGl2KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX211bCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zdWIpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2FsbFJlc3VsdCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxs
RXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRl
cmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVT
ZXR1cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9pdGVyYXRvcl9uZXh0KToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAoSlND
OjpKSVRDb2RlOjp1c2VEYXRhSUMpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpwY1RvQ29kZU9y
aWdpbk1hcCk6CisgICAgICAgICogaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGppdC9KSVRD
b21waWxhdGlvbktleS5oOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6SklUQ29t
cGlsYXRpb25LZXkpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6b3BlcmF0b3Ih
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6OmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SklUQ29tcGlsYXRpb25LZXk6Om9wZXJh
dG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpKSVRDb21waWxhdGlvbktleTo6aGFzaCBjb25z
dCk6CisgICAgICAgIChKU0M6OkpJVENvbXBpbGF0aW9uS2V5Ojpwcm9maWxlZEJsb2NrIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6SklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUp
OgorICAgICAgICAoSlNDOjpKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUR2V0QnlJZEdlbmVyYXRvcjo6SklU
R2V0QnlJZEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmdlbmVyYXRlR2V0QnlJZElubGluZUFj
Y2Vzcyk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVy
YXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
UHV0QnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklURGVsQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgorICAgICAg
ICAoSlNDOjpKSVREZWxCeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToKKyAgICAgICAg
KEpTQzo6SklUSW5CeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6CisgICAgICAgIChK
U0M6OkpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUSW5zdGFuY2VPZkdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aCk6
CisgICAgICAgIChKU0M6OkpJVEdldEJ5VmFsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgpOgor
ICAgICAgICAoSlNDOjpKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFBhdGgpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3Rh
bnREb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KToKKyAg
ICAgICAgKEpTQzo6SklUOjppc0tub3duQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Z2V0Q29u
c3RhbnRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKToKKyAgICAgICAgKEpTQzo6SklUOjps
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6YWR2YW5jZVRvTmV4
dENoZWNrcG9pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6SklUOjpqdW1wVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6SklUOjps
b2FkUHRyRnJvbU1ldGFkYXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkMzJGcm9tTWV0YWRh
dGEpOgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWQ4RnJvbU1ldGFkYXRhKToKKyAgICAgICAgKEpT
Qzo6SklUOjpzdG9yZThUb01ldGFkYXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpzdG9yZTMyVG9N
ZXRhZGF0YSk6CisgICAgICAgIChKU0M6OkpJVDo6bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmxvYWRHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29waWVkR2V0UHV0SW5mbyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpJVDo6Y29waWVkQXJpdGhQcm9maWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3Yp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lu
c3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZCk6CisgICAgICAg
IChKU0M6OkpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9m
dW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6dmFsdWVJc0ZhbHNleUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX3B0cik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6dmFsdWVJc1RydXRoeUdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6b3BfdGhyb3df
aGFuZGxlckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfanN0cmlj
dGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90b19udW1lcmljKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9j
aGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVidWcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
ZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6b3BfZW50ZXJf
aGFuZGxlckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX2puZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvb3BfaGludCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMpOgorICAgICAgICAo
SlNDOjpKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1
bmNDb21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19j
aGlja2VuX3RhaWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9s
X2Zsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YpOgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVj
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmlu
ZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfanN0cmlj
dGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfbmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX251bWVyaWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2No
YXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9j
cmVhdGVfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAgICogaml0L0pJVE9wZXJh
dGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFBsYW4uY3BwOgor
ICAgICAgICAoSlNDOjpKSVRQbGFuOjprZXkpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpK
SVQ6OnNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29w
X2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3NldF9wcml2YXRlX2JyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2No
ZWNrX3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NoZWNr
X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6c2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9wcml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnNs
b3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92
YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9kZWxfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3df
b3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2RlbF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2RlbF9i
eV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAg
ICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
c2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SGFzUHJpdmF0ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9uYW1lKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
UmVzb2x2ZUNsb3N1cmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29w
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKToKKyAg
ICAgICAgKEpTQzo6SklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0
ZU9wR2V0RnJvbVNjb3BlVGh1bmspOgorICAgICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9uZXh0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19w
cm9wZXJ0eUltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKTogRGVsZXRlZC4KKyAgICAgICAgKiBq
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2RlbF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcml2YXRl
X25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Y2hlY2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfY2hl
Y2tfcHJpdmF0ZV9icmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lk
X2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1
dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV92
YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEhhc1ByaXZhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRIYXNQ
cml2YXRlU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90
b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQpOgorICAgICAgICAqIGppdC9S
ZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeSk6CisgICAgICAgIChKU0M6
OnRyeUNhY2hlUHV0QnkpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUluQnkpOgorICAgICAgICAo
SlNDOjp1bmxpbmtDYWxsKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyk6CisgICAgICAg
IChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgor
ICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q2FjaGVhYmxl
SWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKToKKyAgICAg
ICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkQ29kZUJs
b2NrOjpudW1CaW5hcnlBcml0aFByb2ZpbGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q2FjaGVk
Q29kZUJsb2NrOjpudW1VbmFyeUFyaXRoUHJvZmlsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDYWNo
ZWRDb2RlQmxvY2s8Q29kZUJsb2NrVHlwZT46OmVuY29kZSk6CisgICAgICAgICogcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjp1cGRhdGVBcml0aFByb2ZpbGVGb3JV
bmFyeUFyaXRoT3ApOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmg6Cisg
ICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6cmVj
b21wdXRlRGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6
OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKiB3
YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRU
aWVyVXBDb3VudGVyOjpvcHRpbWl6ZUFmdGVyV2FybVVwKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRUaWVyVXBDb3VudGVyOjpvcHRpbWl6ZVNvb24pOgorICAgICAgICAqIHdhc20vV2FzbVRp
ZXJVcENvdW50LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VGllclVwQ291bnQ6OlRpZXJVcENv
dW50KToKKyAgICAgICAgKiB3YXNtL1dhc21UaWVyVXBDb3VudC5oOgorICAgICAgICAoSlNDOjpX
YXNtOjpUaWVyVXBDb3VudDo6b3B0aW1pemVBZnRlcldhcm1VcCk6CisgICAgICAgIChKU0M6Oldh
c206OlRpZXJVcENvdW50OjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VGllclVwQ291bnQ6Om9wdGltaXplU29vbik6CisKIDIwMjEtMDktMjcgIENvbW1pdCBR
dWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJl
dmVydGluZyByMjgzMTAyLCByMjgzMTAzIGFuZCByMjgzMTA0LgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02MTEsNiArNjExLDcgQEAg
c2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIGJ1aWx0aW5zL0J1
aWx0aW5OYW1lcy5oCiAgICAgYnVpbHRpbnMvQnVpbHRpblV0aWxzLmgKIAorICAgIGJ5dGVjb2Rl
L0FyaXRoUHJvZmlsZS5oCiAgICAgYnl0ZWNvZGUvQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oCiAg
ICAgYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKICAgICBieXRlY29kZS9CeXRlY29kZUNvbnZlbnRp
b25zLmgKQEAgLTgzNyw2ICs4MzgsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBCiAKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzLmgKICAgICBqaXQvQXNzZW1ibHlI
ZWxwZXJzU3Bvb2xlcnMuaAorICAgIGppdC9CYXNlbGluZUpJVENvZGUuaAogICAgIGppdC9DQ2Fs
bEhlbHBlcnMuaAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKICAgICBqaXQvRXhlY3V0
YWJsZU1lbW9yeUhhbmRsZS5oCkBAIC04NzUsNiArODc3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIHBhcnNlci9QYXJzZXJFcnJvci5oCiAgICAgcGFy
c2VyL1BhcnNlck1vZGVzLmgKICAgICBwYXJzZXIvUGFyc2VyVG9rZW5zLmgKKyAgICBwYXJzZXIv
UmVzdWx0VHlwZS5oCiAgICAgcGFyc2VyL1NvdXJjZUNvZGUuaAogICAgIHBhcnNlci9Tb3VyY2VQ
cm92aWRlci5oCiAgICAgcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGUuaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02MTksNiArNjE5LDcgQEAgaW50
ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAKIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAK
IAogaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKK2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCiBqaXQv
QmFzZWxpbmVKSVRQbGFuLmNwcAogaml0L0JpbmFyeVN3aXRjaC5jcHAKIGppdC9DQ2FsbEhlbHBl
cnMuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjgzMTMx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTkwMCw2ICs5MDAsNyBAQAogCQk1MkNEMEY1
RDIyNDJGNTY5MDA0QTE4QTUgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRG
MUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CiAJCTUyQ0QwRjVFMjI0MkY1NjkwMDRB
MThBNSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2
YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwogCQk1MkNEMEY2ODIyNDJGNzFDMDA0QTE4QTUg
LyogdGVzdGRmZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MkNEMEY2NzIyNDJGNzFDMDA0QTE4QTUgLyogdGVzdGRmZy5jcHAgKi87IH07CisJCTUy
REQwMDA4MjZFMDM5QjkwMDU0RTQwOCAvKiBCYXNlbGluZUpJVENvZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyREQwMDA2MjZFMDM5QjMwMDU0RTQw
OCAvKiBCYXNlbGluZUpJVENvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1MkVFRDc5NDI0OTJCODcwMDA4RjRDOTMgLyogRnVuY3Rpb25BbGxv
d2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUy
RUVENzkzMjQ5MkI4NjgwMDhGNEM5MyAvKiBGdW5jdGlvbkFsbG93bGlzdC5oICovOyB9OwogCQk1
MkY2QzM1RTFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3
MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyB9OwogCQk1
MzBBNjZCOTFGQTNFNzhCMDAyNkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBBNjZCMTFGQTNFNzdBMDAy
NkE1NDUgLyogVW5pZmllZFNvdXJjZTMtbW0ubW0gKi87IH07CkBAIC0xMjIwLDcgKzEyMjEsNyBA
QAogCQk3OTg3MkM0ODIyMUJCQUYzMDA4QzY5NjkgLyogSlNCYXNlSW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODcyQzQ3MjIxQkJBRUQw
MDhDNjk2OSAvKiBKU0Jhc2VJbnRlcm5hbC5oICovOyB9OwogCQk3OTlFRjdDNDFDNTZFRDk2MDAy
QjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2lu
TWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIg
LyogSGFzaE1hcEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVE
NzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87IH07CisJCTc5QTIyODM2MUQzNUQ3MUYw
MEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUFC
QjE3RTFFNUNDQjU3MDA0NUI5QTYgLyogQWlyRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFCQjE3QzFFNUNDQjU3MDA0NUI5QTYg
LyogQWlyRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzlBQzMwRkYxRjk5NTM2NDAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzlBQzMwRkUxRjk5NTM2MzAwNDg0RkQ3IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlSW5saW5lcy5oICovOyB9OwogCQk3OUFGMEJFNDFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0
aElDSW5saW5lUmVzdWx0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OUFGMEJFMzFEM0VGRDRDMDBFOTVGQTUgLyogSklUTWF0aElDSW5saW5lUmVzdWx0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM2
NzQsNiArMzY3NSw4IEBACiAJCTUyQ0QwRjY0MjI0MkY1NjkwMDRBMThBNSAvKiB0ZXN0ZGZnICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQu
bWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0ZGZnOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MkNEMEY2NzIyNDJGNzFDMDA0
QTE4QTUgLyogdGVzdGRmZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSB0ZXN0ZGZnLmNwcDsgcGF0aCA9IGRmZy90ZXN0ZGZnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTJEMTMwOEYyMjFDRTAzQTAwOUM4MzZDIC8qIGZvby5qcyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IGZvby5qczsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTJERDAwMDYyNkUwMzlCMzAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBCYXNlbGluZUpJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTJERDAwMDcyNkUwMzlCNDAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBCYXNlbGluZUpJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MkVFRDc5MjI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rpb25BbGxvd2xp
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MkVFRDc5MzI0OTJCODY4MDA4RjRDOTMgLyogRnVuY3Rp
b25BbGxvd2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25BbGxvd2xpc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGNkMzNUIxRTcxRUIwODAwODFGNENDIC8qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYy
NzYsNiArNjI3OSw4IEBACiAJCQkJNkI3NjdFN0EyNjc5MUYyNzAwMTdGOEQxIC8qIEFzc2VtYmx5
SGVscGVyc1Nwb29sZXJzLmggKi8sCiAJCQkJNzIzOTk4RjYyNjVEQkNEQjAwNTc4NjdGIC8qIEJh
c2VsaW5lSklUUGxhbi5jcHAgKi8sCiAJCQkJNzIzOTk4RjUyNjVEQkNEQjAwNTc4NjdGIC8qIEJh
c2VsaW5lSklUUGxhbi5oICovLAorCQkJCTUyREQwMDA3MjZFMDM5QjQwMDU0RTQwOCAvKiBCYXNl
bGluZUpJVENvZGUuY3BwICovLAorCQkJCTUyREQwMDA2MjZFMDM5QjMwMDU0RTQwOCAvKiBCYXNl
bGluZUpJVENvZGUuaCAqLywKIAkJCQkwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5
U3dpdGNoLmNwcCAqLywKIAkJCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dp
dGNoLmggKi8sCiAJCQkJNjVCODM5MkQxQkFDQTlEMzAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5
LmNwcCAqLywKQEAgLTk3MzAsNiArOTczNSw3IEBACiAJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1
OTUwIC8qIERGR0Zsb3dNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0RTYw
MDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdB
MEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJE
RDAwMDgyNkUwMzlCOTAwNTRFNDA4IC8qIEJhc2VsaW5lSklUQ29kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyREQ4MTUxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjY5Q0M4OTE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUzODZGRDdFMjZFODY3QjgwMEU0QzI4QiAvKiBUZW1wb3Jh
bFBsYWluVGltZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwMiwxNSArMjAyLDE1IEBAIFJlZlB0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpmcm9tU3Ry
dWMKICAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hlVHlwZSgpKSB7CiAgICAgY2FzZSBDYWNoZVR5
cGU6OkdldEJ5SWRTZWxmOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25z
dGFudElkZW50aWZpZXIpOwotICAgICAgICByZXR1cm4gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3Jl
YXRlKHZtLCBvd25lciwgTG9hZCwgaWRlbnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZz
ZXQsIHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAg
IHJldHVybiBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBMb2FkLCBpZGVu
dGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNldCwgc3R1YkluZm8uaW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OlB1dEJ5SWRSZXBsYWNlOgog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpOwot
ICAgICAgICByZXR1cm4gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBvd25lciwgUmVwbGFjZSwgaWRl
bnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsIHN0dWJJbmZvLm1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIG93bmVyLCBSZXBsYWNlLCBpZGVudGlmaWVyLCBzdHViSW5mby5ieUlkU2VsZk9mZnNl
dCwgc3R1YkluZm8uaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSh2bSkpOwogCiAgICAgY2FzZSBD
YWNoZVR5cGU6OkluQnlJZFNlbGY6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvLmhh
c0NvbnN0YW50SWRlbnRpZmllcik7Ci0gICAgICAgIHJldHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUo
dm0sIG93bmVyLCBJbkhpdCwgaWRlbnRpZmllciwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQs
IHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHJl
dHVybiBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIG93bmVyLCBJbkhpdCwgaWRlbnRpZmllciwgc3R1
YkluZm8uYnlJZFNlbGZPZmZzZXQsIHN0dWJJbmZvLmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUo
dm0pKTsKIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpBcnJheUxlbmd0aDoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKTsKQEAgLTE5ODUsMTQgKzE5
ODUsMTAgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAg
ICAvLyBTdHVmZiBmb3IgY3VzdG9tIGdldHRlcnMvc2V0dGVycy4KICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGw7CiAKKwogICAgICAgICAvLyBUaGlzIGFsc28gZG9lcyB0
aGUgbmVjZXNzYXJ5IGNhbGN1bGF0aW9ucyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBhbgogICAg
ICAgICAvLyBleGNlcHRpb24gaGFuZGxpbmcgY2FsbCBzaXRlLgotICAgICAgICBSZWdpc3RlclNl
dCBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmU7Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICBpZiAo
Y29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZS5zZXQoQVJNNjRSZWdpc3RlcnM6OmxyKTsKLSNlbmRpZgotICAgICAgICBBY2Nlc3NHZW5l
cmF0aW9uU3RhdGU6OlNwaWxsU3RhdGUgc3BpbGxTdGF0ZSA9IHN0YXRlLnByZXNlcnZlTGl2ZVJl
Z2lzdGVyc1RvU3RhY2tGb3JDYWxsKGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZSk7CisgICAgICAg
IEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxTdGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJl
c2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoKTsKIAogICAgICAgICBhdXRvIHJlc3Rv
cmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbCA9IFsmXShBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGU6OlNwaWxsU3RhdGUmIHNwaWxsU3RhdGUsIGJvb2wgY2FsbEhhc1JldHVyblZhbHVlKSB7CiAg
ICAgICAgICAgICBSZWdpc3RlclNldCBkb250UmVzdG9yZTsKQEAgLTIwNzksOCArMjA3NSw3IEBA
IHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIEFT
U0VSVCghKG51bWJlck9mUmVnc0ZvckNhbGwgJSBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSk7
CiAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCA9IG51bWJlck9mUmVn
c0ZvckNhbGwgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwog
Ci0gICAgICAgICAgICB1bnNpZ25lZCBhbGlnbmVkTnVtYmVyT2ZCeXRlc0ZvckNhbGwgPQotICAg
ICAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwg
bnVtYmVyT2ZCeXRlc0ZvckNhbGwpOworICAgICAgICAgICAgdW5zaWduZWQgYWxpZ25lZE51bWJl
ck9mQnl0ZXNGb3JDYWxsID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOwogCiAgICAgICAgICAgICBqaXQuc3ViUHRy
KAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFsaWduZWROdW1i
ZXJPZkJ5dGVzRm9yQ2FsbCksCkBAIC0yMTM4LDYgKzIxMzMsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6
OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAKICAgICAgICAgICAgIGludCBzdGFja1BvaW50ZXJP
ZmZzZXQgPSAoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikpIC0gc3RhdGUucHJlc2VydmVkUmV1c2VkUmVnaXN0ZXJTdGF0ZS5udW1iZXJPZkJ5dGVzUHJl
c2VydmVkIC0gc3BpbGxTdGF0ZS5udW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0ZXJQcmVz
ZXJ2YXRpb247CiAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKwogICAgICAgICAgICAgYm9vbCBjYWxs
SGFzUmV0dXJuVmFsdWUgPSBpc0dldHRlcigpOwogICAgICAgICAgICAgcmVzdG9yZUxpdmVSZWdp
c3RlcnNGcm9tU3RhY2tGb3JDYWxsKHNwaWxsU3RhdGUsIGNhbGxIYXNSZXR1cm5WYWx1ZSk7CiAK
QEAgLTIyNjQsMTIgKzIyNjAsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nl
c3NHZW5lCiAKICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogCi0gICAgICAg
ICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmU7Ci0jaWYgQ1BVKEFSTTY0
KQotICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICAg
ICAgZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2Vu
ZGlmCi0gICAgICAgICAgICBhdXRvIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVSZWdp
c3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKGV4dHJhUmVnaXN0ZXJzVG9QcmVz
ZXJ2ZSk7CisgICAgICAgICAgICBhdXRvIHNwaWxsU3RhdGUgPSBzdGF0ZS5wcmVzZXJ2ZUxpdmVS
ZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNlcHRpb25zKCk7CiAKICAgICAgICAgICAg
IGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0
aCk+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CkBAIC0yMzY0LDEwICsyMzU1LDYg
QEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAg
ICAgIFJlZ2lzdGVyU2V0IGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKICAgICAgICAgICAgICAg
ICBleHRyYVJlZ2lzdGVyc1RvUHJlc2VydmUuc2V0KGJhc2VHUFIpOwogICAgICAgICAgICAgICAg
IGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQodmFsdWVSZWdzKTsKLSNpZiBDUFUoQVJNNjQp
Ci0gICAgICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpCi0gICAgICAgICAg
ICAgICAgICAgIGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZS5zZXQoQVJNNjRSZWdpc3RlcnM6Omxy
KTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6U3BpbGxT
dGF0ZSBzcGlsbFN0YXRlID0gc3RhdGUucHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNh
bGwoZXh0cmFSZWdpc3RlcnNUb1ByZXNlcnZlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBqaXQuc3RvcmUzMigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgkod29ya2luZyBjb3B5KQpAQCAtMjky
LDcgKzI5Miw3IEBAIG9wX2dyb3VwIDpQcm9maWxlZEJpbmFyeU9wLAogICAgICAgICBvcGVyYW5k
VHlwZXM6IE9wZXJhbmRUeXBlcywKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFy
aXRoUHJvZmlsZTogQmluYXJ5QXJpdGhQcm9maWxlCisgICAgICAgIGFyaXRoUHJvZmlsZTogQmlu
YXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wX2dyb3VwIDpWYWx1ZVByb2ZpbGVkQmluYXJ5
T3AsCkBAIC0zNTMsNyArMzUzLDcgQEAgb3BfZ3JvdXAgOlVuYXJ5SW5QbGFjZVByb2ZpbGVkT3As
CiAgICAgICAgIHNyY0RzdDogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6
IHsKLSAgICAgICAgYXJpdGhQcm9maWxlOiBVbmFyeUFyaXRoUHJvZmlsZQorICAgICAgICBhcml0
aFByb2ZpbGU6IFVuYXJ5QXJpdGhQcm9maWxlLioKICAgICB9CiAKIG9wIDp0b19vYmplY3QsCkBA
IC0zODYsNyArMzg2LDcgQEAgb3AgOm5lZ2F0ZSwKICAgICAgICAgcmVzdWx0VHlwZTogUmVzdWx0
VHlwZSwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7Ci0gICAgICAgIGFyaXRoUHJvZmlsZTogVW5h
cnlBcml0aFByb2ZpbGUsCisgICAgICAgIGFyaXRoUHJvZmlsZTogVW5hcnlBcml0aFByb2ZpbGUu
KgogICAgIH0KIAogb3AgOm5vdCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5oCShy
ZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVPcGVyYW5kc0ZvckNoZWNrcG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjgg
QEAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JJbXBsKEJ5dGVjbwogICAgICAgICByZXR1
cm4gJm1ldGFkYXRhLm1fcHJvZmlsZTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgordWludHB0cl90IHZhbHVlUHJvZmlsZU9mZnNldEZvcih1bnNpZ25lZCBjaGVja3BvaW50SW5k
ZXgpCit7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNrcG9pbnRJbmRleCk7CisgICAgaWYgY29uc3Rl
eHByIChCeXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfaXRlcmF0b3Jfb3BlbikgeworICAgICAgICBz
d2l0Y2ggKGNoZWNrcG9pbnRJbmRleCkgeworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpz
eW1ib2xDYWxsOiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkl0ZXJhdG9yUHJv
ZmlsZSgpOworICAgICAgICBjYXNlIE9wSXRlcmF0b3JPcGVuOjpnZXROZXh0OiByZXR1cm4gQnl0
ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5leHRQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBp
ZiBjb25zdGV4cHIgKEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9pdGVyYXRvcl9uZXh0KSB7Cisg
ICAgICAgIHN3aXRjaCAoY2hlY2twb2ludEluZGV4KSB7CisgICAgICAgIGNhc2UgT3BJdGVyYXRv
ck5leHQ6OmNvbXB1dGVOZXh0OiByZXR1cm4gQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk5l
eHRSZXN1bHRQcm9maWxlKCk7CisgICAgICAgIGNhc2UgT3BJdGVyYXRvck5leHQ6OmdldERvbmU6
IHJldHVybiBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRG9uZVByb2ZpbGUoKTsKKyAgICAg
ICAgY2FzZSBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWU6IHJldHVybiBCeXRlY29kZTo6TWV0YWRh
dGE6Om9mZnNldE9mVmFsdWVQcm9maWxlKCk7CisgICAgICAgIGRlZmF1bHQ6IFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgCisgICAgICAgIHJldHVy
biBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpOworfQorCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBCeXRlY29kZU1ldGFkYXRhPgogYm9vbCBoYXNWYWx1ZVByb2ZpbGVGb3IoQnl0ZWNv
ZGVNZXRhZGF0YSYgbWV0YWRhdGEsIHVuc2lnbmVkIGNoZWNrcG9pbnRJbmRleCkKIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShy
ZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDExICsxMTQsNiBAQCB2b2lkIENhbGxM
aW5rSW5mbzo6dW5saW5rKFZNJiB2bSkKICAgICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7
CiB9CiAKLUNvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IENhbGxMaW5rSW5mbzo6
ZmFzdFBhdGhTdGFydCgpCi17Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxK
U0ludGVybmFsUHRyVGFnPihtX2Zhc3RQYXRoU3RhcnQpOwotfQotCiBDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPiBDYWxsTGlua0luZm86OnNsb3dQYXRoU3RhcnQoKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKCFpc0RhdGFJQygpKTsKQEAgLTIyNSw2ICsyMjAsMTIgQEAgdm9pZCBD
YWxsTGlua0luZm86OnNldE1heEFyZ3VtZW50Q291bnRJbgogICAgIG1fbWF4QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSB2YWx1ZTsKIH0KIAorQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5h
bFB0clRhZz4gQ2FsbExpbmtJbmZvOjpmYXN0UGF0aFN0YXJ0KCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChpc0RpcmVjdCgpICYmIGlzVGFpbENhbGwoKSk7CisgICAgcmV0dXJuIENvZGVMb2NhdGlv
bkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFnPih1LmNvZGVJQy5tX2Zhc3RQYXRoU3RhcnQp
OworfQorCiB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFZNJiB2bSkKIHsKICAgICBhdXRv
IGhhbmRsZVNwZWNpZmljQ2FsbGVlID0gWyZdIChKU0Z1bmN0aW9uKiBjYWxsZWUpIHsKQEAgLTI5
OCwyMyArMjk5LDExIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjpzZXRGcmFtZVNodWZmbGVEYXRhKGMK
ICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEtPnNocmlua1RvRml0KCk7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJ
QyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpCitN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RmFzdFBhdGhJbXBsKENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxl
ZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUiwgVXNlRGF0YUlDIHVzZURhdGFJQywgYm9vbCBp
c1RhaWxDYWxsLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQogewot
ICAgIHNldFVzZXNEYXRhSUNzKHVzZURhdGFJQyk7Ci0gICAgaWYgKGlzRGF0YUlDKCkpIHsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEdQUlJlZzo6SW52YWxpZEdQ
UlJlZyk7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlz
KSwgY2FsbExpbmtJbmZvR1BSKTsKLSAgICAgICAgdS5kYXRhSUMubV9jYWxsTGlua0luZm9HUFIg
PSBjYWxsTGlua0luZm9HUFI7Ci0gICAgfQotCi0gICAgYXV0byBmYXN0UGF0aFN0YXJ0ID0gaml0
LmxhYmVsKCk7Ci0gICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgewotICAgICAgICBtX2Zhc3RQYXRoU3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNJ
bnRlcm5hbFB0clRhZz4oZmFzdFBhdGhTdGFydCk7Ci0gICAgfSk7Ci0KICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IHNsb3dQYXRoOwogCi0gICAgaWYgKGlzRGF0YUlDKCkpIHsKKyAgICBpZiAo
dXNlRGF0YUlDID09IFVzZURhdGFJQzo6WWVzKSB7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gaml0LnNjcmF0Y2hSZWdpc3RlcigpOwogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQ
Uik7IAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ29Qb2x5bW9ycGhpYzsKQEAgLTMyMyw3
ICszMTIsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiAgICAg
ICAgICAgICBnb1BvbHltb3JwaGljID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpO
b25aZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5bW9ycGhp
Y0NhbGxlZU1hc2spKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRy
KENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAgICAgICAgaWYgKGlzVGFpbENhbGwp
IHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgpOwogICAgICAgICAgICAgZ29Qb2x5
bW9ycGhpYy5saW5rKCZqaXQpOyAvLyBQb2x5bW9ycGhpYyBzdHViIGhhbmRsZXMgdGFpbCBjYWxs
IHN0YWNrIHByZXAuCiAgICAgICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoY2FsbExpbmtJbmZvR1BSLCBvZmZzZXRPZk1vbm9tb3JwaGljQ2FsbERlc3RpbmF0aW9uKCkp
LCBKU0VudHJ5UHRyVGFnKTsKQEAgLTMzNiwxNCArMzI1LDE2IEBAIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBDYWxsTGlua0luZm86OmUKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFu
Y2hQdHJXaXRoUGF0Y2goQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBjYWxsZWVD
aGVjaywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpKSk7CiAKICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGw7Ci0gICAgICAgIGlmIChpc1RhaWxDYWxsKCkpIHsKKyAg
ICAgICAgaWYgKGlzVGFpbENhbGwpIHsKICAgICAgICAgICAgIHByZXBhcmVGb3JUYWlsQ2FsbCgp
OwogICAgICAgICAgICAgY2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsK
LSAgICAgICAgICAgIHUuY29kZUlDLm1fY2FsbGVlTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY2FsbGVlQ2hlY2spOworICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT51LmNvZGVJQy5tX2NhbGxMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsPEpTSW50ZXJuYWxQdHJUYWc+KGNhbGwpOworICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT51LmNvZGVJQy5tX2NhbGxlZUxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50
ZXJuYWxQdHJUYWc+KGNhbGxlZUNoZWNrKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNTMs
MTMgKzM0NCwzNCBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplCiBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdEZhc3RQYXRoKENDYWxsSGVs
cGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VE
YXRhSUMgdXNlRGF0YUlDKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwot
ICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BSLCBjYWxsTGlua0luZm9H
UFIsIHVzZURhdGFJQywgbnVsbHB0cik7CisgICAgc2V0VXNlc0RhdGFJQ3ModXNlRGF0YUlDKTsK
KworICAgIGlmIChpc0RhdGFJQygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5r
SW5mb0dQUiAhPSBHUFJSZWc6OkludmFsaWRHUFJSZWcpOworICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIGNhbGxMaW5rSW5mb0dQUik7CisgICAgICAg
IHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIH0KKwor
ICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKHRoaXMsIGppdCwgY2FsbGVlR1BSLCBjYWxsTGlu
a0luZm9HUFIsIHVzZURhdGFJQywgaXNUYWlsQ2FsbCgpLCBudWxscHRyKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxDYWxsRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIs
IFVzZURhdGFJQyB1c2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFp
bENhbGwpCitNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0VGFpbENh
bGxGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5j
dGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChp
c1RhaWxDYWxsKCkpOwotICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKGppdCwgY2FsbGVlR1BS
LCBjYWxsTGlua0luZm9HUFIsIHVzZURhdGFJQywgV1RGTW92ZShwcmVwYXJlRm9yVGFpbENhbGwp
KTsKKyAgICBzZXRVc2VzRGF0YUlDcyhVc2VEYXRhSUM6Ok5vKTsKKyAgICByZXR1cm4gZW1pdEZh
c3RQYXRoSW1wbCh0aGlzLCBqaXQsIGNhbGxlZUdQUiwgSW52YWxpZEdQUlJlZywgVXNlRGF0YUlD
OjpObywgaXNUYWlsQ2FsbCgpLCBXVEZNb3ZlKHByZXBhcmVGb3JUYWlsQ2FsbCkpOworfQorCitN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgo
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvR1BSICE9IEludmFsaWRHUFJS
ZWcpOworICAgIHJldHVybiBlbWl0RmFzdFBhdGhJbXBsKG51bGxwdHIsIGppdCwgY2FsbGVlR1BS
LCBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQzo6WWVzLCBmYWxzZSwgbnVsbHB0cik7Cit9CisK
K01hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBDYWxsTGlua0luZm86OmVtaXRUYWlsQ2FsbERhdGFJ
Q0Zhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2Fs
bExpbmtJbmZvR1BSLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gcHJlcGFyZUZvclRhaWxDYWxsKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mb0dQUiAhPSBJbnZhbGlkR1BSUmVnKTsK
KyAgICByZXR1cm4gZW1pdEZhc3RQYXRoSW1wbChudWxscHRyLCBqaXQsIGNhbGxlZUdQUiwgY2Fs
bExpbmtJbmZvR1BSLCBVc2VEYXRhSUM6OlllcywgdHJ1ZSwgV1RGTW92ZShwcmVwYXJlRm9yVGFp
bENhbGwpKTsKIH0KIAogdm9pZCBDYWxsTGlua0luZm86OmVtaXRTbG93UGF0aChWTSYgdm0sIEND
YWxsSGVscGVycyYgaml0KQpAQCAtMzY5LDE3ICszODEsMzIgQEAgdm9pZCBDYWxsTGlua0luZm86
OmVtaXRTbG93UGF0aChWTSYgdm0sIAogICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgb2Zmc2V0T2ZTbG93UGF0aENhbGxEZXN0aW5hdGlvbigpKSwgSlNF
bnRyeVB0clRhZyk7CiB9CiAKK3ZvaWQgQ2FsbExpbmtJbmZvOjplbWl0RGF0YUlDU2xvd1BhdGgo
Vk0mLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sKKyAgICBq
aXQubW92ZShjYWxsTGlua0luZm9HUFIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIG9mZnNldE9mU2xvd1BhdGhDYWxs
RGVzdGluYXRpb24oKSksIEpTRW50cnlQdHJUYWcpOworfQorCit2b2lkIENhbGxMaW5rSW5mbzo6
aW5pdGlhbGl6ZURhdGFJQyhWTSYgdm0sIFVubGlua2VkQ2FsbExpbmtJbmZvJiB1bmxpbmtlZENh
bGxMaW5rSW5mbywgR1BSUmVnIGNhbGxlZUdQUiwgR1BSUmVnIGNhbGxMaW5rSW5mb0dQUikKK3sK
KyAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKHVubGlua2VkQ2FsbExpbmtJbmZvLmJ5dGVj
b2RlSW5kZXgpOworICAgIHNldFVwQ2FsbCh1bmxpbmtlZENhbGxMaW5rSW5mby5jYWxsVHlwZSwg
Y2FsbGVlR1BSKTsKKyAgICBtX2RvbmVMb2NhdGlvbiA9IHVubGlua2VkQ2FsbExpbmtJbmZvLmRv
bmVMb2NhdGlvbjsKKyAgICBpZiAodW5saW5rZWRDYWxsTGlua0luZm8uZnJhbWVTaHVmZmxlRGF0
YSkgeworICAgICAgICAvLyBGSVhNRTogSXQnZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhIHJlZmNv
dW50ZWQgZGF0YSBzdHJ1Y3R1cmUuCisgICAgICAgIG1fZnJhbWVTaHVmZmxlRGF0YSA9IG1ha2VV
bmlxdWU8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+KCp1bmxpbmtlZENhbGxMaW5rSW5mby5mcmFtZVNo
dWZmbGVEYXRhKTsKKyAgICB9CisgICAgc2V0VXNlc0RhdGFJQ3MoVXNlRGF0YUlDOjpZZXMpOwor
ICAgIHUuZGF0YUlDLm1fY2FsbExpbmtJbmZvR1BSID0gY2FsbExpbmtJbmZvR1BSOworICAgIHNl
dFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVy
YXRvcikudGVtcGxhdGUgcmV0YWdnZWRDb2RlPEpTRW50cnlQdHJUYWc+KCkpOworfQorCiB2b2lk
IENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0KQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc1RhaWxDYWxsKCkpOwogCiAgICAgc2V0VXNlc0RhdGFJQ3Mo
VXNlRGF0YUlDOjpObyk7CiAKLSAgICBhdXRvIGZhc3RQYXRoU3RhcnQgPSBqaXQubGFiZWwoKTsK
LSAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAg
ICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihmYXN0UGF0aFN0YXJ0KTsKLSAgICB9KTsKLQogICAgIGF1dG8gY2FsbCA9IGppdC5uZWFy
Q2FsbCgpOwogICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKICAgICAgICAgdS5jb2RlSUMubV9jYWxsTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPihjYWxsKTsKQEAgLTM5Nyw3ICs0MjQsNyBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6ZW1pdERpcmVjdFRhaWxDYWxsRmFzCiAKICAgICBhdXRvIGZhc3RQ
YXRoU3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIG1fZmFzdFBhdGhTdGFydCA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihmYXN0UGF0aFN0YXJ0KTsKKyAgICAgICAgdS5j
b2RlSUMubV9mYXN0UGF0aFN0YXJ0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQ
dHJUYWc+KGZhc3RQYXRoU3RhcnQpOwogICAgIH0pOwogCiAgICAgLy8gLSBJZiB3ZSdyZSBub3Qg
eWV0IGxpbmtlZCwgdGhpcyBpcyBhIGp1bXAgdG8gdGhlIHNsb3cgcGF0aC4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDI4
MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAko
d29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsMTEgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGVudW0g
T3Bjb2RlSUQgOiB1bnNpZ25lZDsKIHN0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YTsKIAorc3Ry
dWN0IFVubGlua2VkQ2FsbExpbmtJbmZvOworCiBjbGFzcyBDYWxsTGlua0luZm8gOiBwdWJsaWMg
UGFja2VkUmF3U2VudGluZWxOb2RlPENhbGxMaW5rSW5mbz4gewogcHVibGljOgotICAgIGVudW0g
Q2FsbFR5cGUgeworICAgIGVudW0gQ2FsbFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgTm9uZSwK
ICAgICAgICAgQ2FsbCwKICAgICAgICAgQ2FsbFZhcmFyZ3MsCkBAIC0xNjUsNiArMTY3LDggQEAg
cHVibGljOgogICAgICAgICBtX2NhbGxlZUdQUiA9IGNhbGxlZUdQUjsKICAgICB9CiAKKyAgICB2
b2lkIGluaXRpYWxpemVEYXRhSUMoVk0mLCBVbmxpbmtlZENhbGxMaW5rSW5mbyYsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIpOworCiAgICAgR1BSUmVnIGNhbGxlZUdQ
UigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlR1BSOyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBV
c2VEYXRhSUMgOiB1aW50OF90IHsKQEAgLTE3MywxMyArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB9
OwogCiBwcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0RmFzdFBhdGhJ
bXBsKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9H
UFIsIFVzZURhdGFJQywgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkg
V0FSTl9VTlVTRURfUkVUVVJOOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qLCBDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2Fs
bGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSLCBVc2VEYXRhSUMsIGJvb2wgaXNUYWlsQ2Fs
bCwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURf
UkVUVVJOOwogcHVibGljOgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1p
dERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBj
YWxsTGlua0luZm9HUFIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGVtaXRUYWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKENDYWxsSGVscGVycyYs
IEdQUlJlZyBjYWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFdURjo6RnVuY3Rpb248
dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdEZhc3RQYXRoKENDYWxsSGVscGVycyYsIEdQUlJlZyBj
YWxsZWVHUFIsIEdQUlJlZyBjYWxsTGlua0luZm9HUFIsIFVzZURhdGFJQykgV0FSTl9VTlVTRURf
UkVUVVJOOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBlbWl0VGFpbENhbGxGYXN0UGF0
aChDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgY2FsbGVlR1BSLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BS
LCBVc2VEYXRhSUMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiBwcmVwYXJlRm9yVGFpbENhbGwpIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZW1pdFRhaWxD
YWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIGNhbGxlZUdQUiwgV1RGOjpGdW5jdGlv
bjx2b2lkKCk+IHByZXBhcmVGb3JUYWlsQ2FsbCkgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZv
aWQgZW1pdERpcmVjdEZhc3RQYXRoKENDYWxsSGVscGVycyYpOwogICAgIHZvaWQgZW1pdERpcmVj
dFRhaWxDYWxsRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHBy
ZXBhcmVGb3JUYWlsQ2FsbCk7CiAgICAgdm9pZCBlbWl0U2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBl
cnMmKTsKKyAgICBzdGF0aWMgdm9pZCBlbWl0RGF0YUlDU2xvd1BhdGgoVk0mLCBDQ2FsbEhlbHBl
cnMmLCBHUFJSZWcgY2FsbExpbmtJbmZvR1BSKTsKICAgICB2b2lkIHJldmVydENhbGxUb1N0dWIo
KTsKIAogICAgIGJvb2wgaXNEYXRhSUMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxVc2VE
YXRhSUM+KG1fdXNlRGF0YUlDKSA9PSBVc2VEYXRhSUM6OlllczsgfQpAQCAtMjAzLDcgKzIxMCw2
IEBAIHB1YmxpYzoKICAgICAgICAgbV9hbGxvd1N0dWJzID0gZmFsc2U7CiAgICAgfQogCi0gICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gZmFzdFBhdGhTdGFydCgpOwogICAg
IENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IHNsb3dQYXRoU3RhcnQoKTsKICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRpb24oKTsKIApA
QCAtMjQzLDExICsyNDksNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2xvd1N0dWIgPSBudWxscHRy
OwogICAgIH0KIAotICAgIEpJVFN0dWJSb3V0aW5lKiBzbG93U3R1YigpCi0gICAgewotICAgICAg
ICByZXR1cm4gbV9zbG93U3R1Yi5nZXQoKTsKLSAgICB9Ci0KICAgICBib29sIHNlZW5PbmNlKCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX2hhc1NlZW5TaG91bGRSZXBhdGNoOwpAQCAtMzA4LDkg
KzMwOSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxUeXBlPiht
X2NhbGxUeXBlKTsKICAgICB9CiAKLSAgICB1aW50MzJfdCogYWRkcmVzc09mTWF4QXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNYXhBcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpCiAgICAgewotICAgICAgICByZXR1cm4gJm1fbWF4QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
Q2FsbExpbmtJbmZvLCBtX21heEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICB9CiAK
ICAgICB1aW50MzJfdCBtYXhBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpCkBAIC0zODEsNyAr
MzgyLDkgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBDb2RlTG9jYXRpb25MYWJl
bDxKU0ludGVybmFsUHRyVGFnPiBtX2Zhc3RQYXRoU3RhcnQ7CisKKyAgICBDb2RlTG9jYXRpb25M
YWJlbDxKU0ludGVybmFsUHRyVGFnPiBmYXN0UGF0aFN0YXJ0KCk7CisKICAgICBDb2RlTG9jYXRp
b25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBtX2RvbmVMb2NhdGlvbjsKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gbV9zbG93UGF0aENhbGxEZXN0aW5hdGlvbjsKICAg
ICB1bmlvbiBVbmlvblR5cGUgewpAQCAtMzk3LDYgKzQwMCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbDxKU0ludGVybmFsUHRyVGFnPiBtX2NhbGxMb2NhdGlv
bjsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cjxKU0ludGVybmFsUHRyVGFn
PiBtX2NhbGxlZUxvY2F0aW9uOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRl
cm5hbFB0clRhZz4gbV9zbG93UGF0aFN0YXJ0OworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9mYXN0UGF0aFN0YXJ0OwogICAgICAgICB9IGNvZGVJQzsK
ICAgICB9IHU7CiAKQEAgLTQyNCw2ICs0MjgsMTMgQEAgaW5saW5lIENvZGVPcmlnaW4gZ2V0Q2Fs
bExpbmtJbmZvQ29kZU9yaQogICAgIHJldHVybiBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpOwog
fQogCitzdHJ1Y3QgVW5saW5rZWRDYWxsTGlua0luZm8geworICAgIEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVJbmRleDsgLy8gQ3VycmVudGx5LCBvbmx5IHVzZWQgYnkgYmFzZWxpbmUsIHNvIHRoaXMg
Y2FuIHRyaXZpYWxseSBwcm9kdWNlIGEgQ29kZU9yaWdpbi4KKyAgICBDYWxsTGlua0luZm86OkNh
bGxUeXBlIGNhbGxUeXBlOworICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+
IGRvbmVMb2NhdGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURhdGE+
IGZyYW1lU2h1ZmZsZURhdGE7Cit9OworCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw4ICsyNzksNiBAQCBD
b2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgLCBtX2RpZEZhaWxK
SVRDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNl
KQogICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV9oYXNMaW5r
ZWRPU1JFeGl0KGZhbHNlKQotICAgICwgbV9pc0VsaWdpYmxlRm9yTExJbnREb3duZ3JhZGUoZmFs
c2UpCiAgICAgLCBtX251bUNhbGxlZUxvY2FscyhvdGhlci5tX251bUNhbGxlZUxvY2FscykKICAg
ICAsIG1fbnVtVmFycyhvdGhlci5tX251bVZhcnMpCiAgICAgLCBtX251bWJlck9mQXJndW1lbnRz
VG9Ta2lwKG90aGVyLm1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCkBAIC0zMDgsNiArMzA2LDgg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIAogCiAgICAgQVNTRVJU
KHNvdXJjZSgpLnByb3ZpZGVyKCkpOwogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFy
YW1ldGVycygpKTsKKworICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlciA9ICZtX3VubGlua2VkQ29k
ZS0+bGxpbnRFeGVjdXRlQ291bnRlcigpOwogICAgIAogICAgIHZtLmhlYXAuY29kZUJsb2NrU2V0
KCkuYWRkKHRoaXMpOwogfQpAQCAtMzE4LDcgKzMxOCw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEMKICAgICBmaW5pc2hDcmVhdGlvbkNvbW1vbih2bSk7CiAKICAg
ICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgaml0QWZ0ZXJXYXJtVXAoKTsKIAogICAgIGlm
IChvdGhlci5tX3JhcmVEYXRhKSB7CiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nhcnko
KTsKQEAgLTMzNiw4ICszMzUsNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSYgdm0sIFN0cnVj
dHVyZSogCiAgICAgLCBtX2RpZEZhaWxKSVRDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fZGlk
RmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRM
KGZhbHNlKQotICAgICwgbV9oYXNMaW5rZWRPU1JFeGl0KGZhbHNlKQotICAgICwgbV9pc0VsaWdp
YmxlRm9yTExJbnREb3duZ3JhZGUoZmFsc2UpIAogICAgICwgbV9udW1DYWxsZWVMb2NhbHModW5s
aW5rZWRDb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKQogICAgICwgbV9udW1WYXJzKHVubGlu
a2VkQ29kZUJsb2NrLT5udW1WYXJzKCkpCiAgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZh
bHNlKQpAQCAtMzU5LDcgKzM1Niw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3Ry
dWN0dXJlKiAKIAogICAgIEFTU0VSVChzb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICBzZXROdW1Q
YXJhbWV0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwotICAgIAorCisg
ICAgbV9sbGludEV4ZWN1dGVDb3VudGVyID0gJm1fdW5saW5rZWRDb2RlLT5sbGludEV4ZWN1dGVD
b3VudGVyKCk7CisKICAgICB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmFkZCh0aGlzKTsKIH0KIApA
QCAtMzcwLDcgKzM2OSw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJl
KiAKIC8vIHdlIGNhbid0IGdlbmVyYXRlIGR1cmluZyB1bmxpbmtlZCBieXRlY29kZSBnZW5lcmF0
aW9uLiBUaGlzIHByb2Nlc3MgaXMgbm90IGFsbG93ZWQgdG8gZ2VuZXJhdGUgY29udHJvbAogLy8g
ZmxvdyBvciBpbnRyb2R1Y2UgbmV3IGxvY2Fscy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB3ZSBy
ZWx5IG9uIGxpdmVuZXNzIGFuYWx5c2lzIHRvIGJlIHRoZSBzYW1lIGZvcgogLy8gYWxsIHRoZSBD
b2RlQmxvY2tzIG9mIGFuIFVubGlua2VkQ29kZUJsb2NrLiBXZSByZWx5IG9uIHRoaXMgZmFjdCBi
eSBjYWNoaW5nIHRoZSBsaXZlbmVzcyBhbmFseXNpcwotLy8gaW5zaWRlIFVubGlua2VkQ29kZUJs
b2NrLgorLy8gaW5zaWRlIFVubGlua2VkQ29kZUJsb2NrLiBBbHNvLCBCYXNlbGluZSBKSVQgY29k
ZSBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgQ29kZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9j
aywKKy8vIHNvIHRoZSBieXRlY29kZSBtdXN0IHJlbWFpbiB0aGUgc2FtZSBiZXR3ZWVuIENvZGVC
bG9ja3Mgc2hhcmluZyBhbiBVbmxpbmtlZENvZGVCbG9jay4KIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5s
aW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAogICAgIEpTU2NvcGUqIHNjb3BlKQog
ewpAQCAtNDcxLDYgKzQ3MSwyMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBTCiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCisgICAgdW5zaWduZWQgYmluYXJ5UHJv
ZmlsZUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCB1bmFyeVByb2ZpbGVJbmRleCA9IDA7CisjZGVm
aW5lIExJTktfV0lUSF9CSU5BUllfQVJJVEhfUFJPRklMRShfX29wKSBcCisgICAgQ0FTRShfX29w
KTogeyBcCisgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoX19vcCkgXAorICAgICAgICBtZXRh
ZGF0YS5tX2FyaXRoUHJvZmlsZSA9ICZtX3VubGlua2VkQ29kZS0+YmluYXJ5QXJpdGhQcm9maWxl
KGJpbmFyeVByb2ZpbGVJbmRleCsrKTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKyNkZWZp
bmUgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoX19vcCkgXAorICAgIENBU0UoX19vcCk6
IHsgXAorICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKF9fb3ApIFwKKyAgICAgICAgbWV0YWRh
dGEubV9hcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGUtPnVuYXJ5QXJpdGhQcm9maWxlKHVu
YXJ5UHJvZmlsZUluZGV4KyspOyBcCisgICAgICAgIGJyZWFrOyBcCisgICAgfQorCiAgICAgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9uU3RyZWFtID0gaW5zdHJ1Y3Rpb25zKCk7
CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0cnVjdGlvbiA6IGluc3RydWN0aW9uU3RyZWFtKSB7
CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CkBA
IC01MzMsMTQgKzU0OCwxNCBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBTCiAgICAgICAgIExJTksoT3BDcmVhdGVQcm9taXNlKQogICAgICAgICBMSU5LKE9wQ3JlYXRl
R2VuZXJhdG9yKQogCi0gICAgICAgIExJTksoT3BBZGQpCi0gICAgICAgIExJTksoT3BNdWwpCi0g
ICAgICAgIExJTksoT3BEaXYpCi0gICAgICAgIExJTksoT3BTdWIpCi0KLSAgICAgICAgTElOSyhP
cE5lZ2F0ZSkKLSAgICAgICAgTElOSyhPcEluYykKLSAgICAgICAgTElOSyhPcERlYykKKyAgICAg
ICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9GSUxFKE9wQWRkKQorICAgICAgICBMSU5LX1dJ
VEhfQklOQVJZX0FSSVRIX1BST0ZJTEUoT3BNdWwpCisgICAgICAgIExJTktfV0lUSF9CSU5BUllf
QVJJVEhfUFJPRklMRShPcERpdikKKyAgICAgICAgTElOS19XSVRIX0JJTkFSWV9BUklUSF9QUk9G
SUxFKE9wU3ViKQorCisgICAgICAgIExJTktfV0lUSF9VTkFSWV9BUklUSF9QUk9GSUxFKE9wTmVn
YXRlKQorICAgICAgICBMSU5LX1dJVEhfVU5BUllfQVJJVEhfUFJPRklMRShPcEluYykKKyAgICAg
ICAgTElOS19XSVRIX1VOQVJZX0FSSVRIX1BST0ZJTEUoT3BEZWMpCiAKICAgICAgICAgTElOSyhP
cEpuZXFQdHIpCiAKQEAgLTc2OSw3ICs3ODQsNiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBTCiAgICAgLy8gcmVseSBvbiB0aGUgaW5zdHJ1Y3Rpb24gY291bnQgKGFu
ZCBhcmUgaW4gdGhlb3J5IHBlcm1pdHRlZCB0byBhbHNvIGluc3BlY3QgdGhlCiAgICAgLy8gaW5z
dHJ1Y3Rpb24gc3RyZWFtIHRvIG1vcmUgYWNjdXJhdGUgYXNzZXNzIHRoZSBjb3N0IG9mIHRpZXIt
dXApLgogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICBqaXRBZnRlcldhcm1VcCgpOwog
CiAgICAgLy8gSWYgdGhlIGNvbmN1cnJlbnQgdGhyZWFkIHdpbGwgd2FudCB0aGUgY29kZSBibG9j
aydzIGhhc2gsIHRoZW4gY29tcHV0ZSBpdCBoZXJlCiAgICAgLy8gc3luY2hyb25vdXNseS4KQEAg
LTc5Myw2ICs4MDcsNzggQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uQ29tbW9uKFZN
JgogICAgIG1fb3duZXJFZGdlLnNldCh2bSwgdGhpcywgRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRn
ZTo6Y3JlYXRlKHZtLCB0aGlzKSk7CiB9CiAKKyNpZiBFTkFCTEUoSklUKQordm9pZCBDb2RlQmxv
Y2s6OnNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVDb2RlKFJlZjxCYXNlbGluZUpJVENvZGU+IGpp
dENvZGUpCit7CisgICAgc2V0SklUQ29kZShqaXRDb2RlLmNvcHlSZWYoKSk7CisKKyAgICB7Cisg
ICAgICAgIGNvbnN0IGF1dG8mIGppdENvZGVNYXAgPSB0aGlzLT5qaXRDb2RlTWFwKCk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyAr
K2kpIHsKKyAgICAgICAgICAgIEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gZXhjZXB0aW9uSGFuZGxl
cihpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMzk0MzMzMTg+Lgor
ICAgICAgICAgICAgaGFuZGxlci5uYXRpdmVDb2RlID0gaml0Q29kZU1hcC5maW5kKEJ5dGVjb2Rl
SW5kZXgoaGFuZGxlci50YXJnZXQpKS5yZXRhZ2dlZDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPigp
OworICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CisgICAgICAgIGF1dG8mIGppdERhdGEgPSBlbnN1cmVKSVREYXRhKGxv
Y2tlcik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaml0RGF0YS5tX2ppdENvbnN0YW50UG9v
bC5pc0VtcHR5KCkpOworICAgICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sID0gRml4ZWRW
ZWN0b3I8dm9pZCo+KGppdENvZGUtPm1fY29uc3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgaml0Q29kZS0+bV9jb25zdGFudFBvb2wuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGF1dG8gZW50cnkgPSBqaXRDb2RlLT5tX2NvbnN0YW50UG9vbC5hdChp
KTsKKyAgICAgICAgICAgIHN3aXRjaCAoZW50cnkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBK
SVRDb25zdGFudFBvb2w6OlR5cGU6Okdsb2JhbE9iamVjdDoKKyAgICAgICAgICAgICAgICBqaXRE
YXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6
Q2FsbExpbmtJbmZvOiB7CisgICAgICAgICAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIHVu
bGlua2VkQ2FsbExpbmtJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkQ2FsbExpbmtJbmZvKj4o
ZW50cnkucGF5bG9hZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxs
TGlua0luZm8gPSBqaXREYXRhLm1fY2FsbExpbmtJbmZvcy5hZGQoQ29kZU9yaWdpbih1bmxpbmtl
ZENhbGxMaW5rSW5mby5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgY2FsbExpbmtJ
bmZvLT5pbml0aWFsaXplRGF0YUlDKHZtKCksIHVubGlua2VkQ2FsbExpbmtJbmZvLCBHUFJJbmZv
OjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRD
b25zdGFudFBvb2xbaV0gPSBjYWxsTGlua0luZm87CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm86IHsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvJiB1bmxpbmtlZFN0dWJJbmZvID0gKnN0YXRpY19jYXN0PFVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8qPihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8gPSBqaXREYXRhLm1fc3R1YkluZm9zLmFkZCh1bmxpbmtlZFN0dWJJ
bmZvLmFjY2Vzc1R5cGUsIENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4
KSk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8tPmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyh0aGlzLCB1bmxpbmtlZFN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICBq
aXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gc3R1YkluZm87CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEpJVENvbnN0YW50UG9vbDo6
VHlwZTo6RnVuY3Rpb25EZWNsOiB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbnRyeS5wYXlsb2FkLmdldCgpKTsKKyAgICAgICAgICAg
ICAgICBqaXREYXRhLm1faml0Q29uc3RhbnRQb29sW2ldID0gZnVuY3Rpb25EZWNsKGluZGV4KTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Ug
SklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHI6IHsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbmRleCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVudHJ5LnBheWxvYWQuZ2V0
KCkpOworICAgICAgICAgICAgICAgIGppdERhdGEubV9qaXRDb25zdGFudFBvb2xbaV0gPSBmdW5j
dGlvbkV4cHIoaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChjb2RlVHlwZSgp
KSB7CisgICAgY2FzZSBHbG9iYWxDb2RlOgorICAgIGNhc2UgTW9kdWxlQ29kZToKKyAgICBjYXNl
IEV2YWxDb2RlOgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZ1bmN0aW9uQ29kZToKKyAgICAgICAgLy8gV2UgY291bGQg
aGF2ZSBhbHJlYWR5IHNldCBpdCB0byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5s
aW5lYWJsZSBjYWxsLgorICAgICAgICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9u
LgorICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCAmPSBjYW5JbmxpbmUoY2FwYWJpbGl0
eUxldmVsKCkpICYmIERGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbih0aGlzKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgaWYgKGppdENvZGUtPm1faXNTaGFyZWFibGUgJiYgIXVubGlua2Vk
Q29kZUJsb2NrKCktPm1fdW5saW5rZWRCYXNlbGluZUNvZGUgJiYgT3B0aW9uczo6dXNlQmFzZWxp
bmVKSVRDb2RlU2hhcmluZygpKQorICAgICAgICB1bmxpbmtlZENvZGVCbG9jaygpLT5tX3VubGlu
a2VkQmFzZWxpbmVDb2RlID0gV1RGTW92ZShqaXRDb2RlKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUo
SklUKQorCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpA
QCAtODczLDYgKzk1OSwyNyBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCiB9CiAKK2Jvb2wgQ29kZUJsb2NrOjppc0NvbnN0YW50T3duZWRCeVVubGlua2Vk
Q29kZUJsb2NrKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBuZWVk
cyB0byBjb3JyZXNwb25kIHRvIHdoYXQgd2UgZG8gaW5zaWRlIHNldENvbnN0YW50UmVnaXN0ZXJz
LgorICAgIHN3aXRjaCAodW5saW5rZWRDb2RlQmxvY2soKS0+Y29uc3RhbnRTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24ocmVnKSkgeworICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpJ
bnRlZ2VyOgorICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpEb3VibGU6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhl
cjogeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdW5saW5rZWRDb2RlQmxvY2soKS0+Z2V0Q29u
c3RhbnQocmVnKTsKKyAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxs
KCk7CisgICAgICAgIGlmIChjZWxsLT5pbmhlcml0czxTeW1ib2xUYWJsZT4odm0oKSkgfHwgY2Vs
bC0+aW5oZXJpdHM8SlNUZW1wbGF0ZU9iamVjdERlc2NyaXB0b3I+KHZtKCkpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKIFZlY3Rvcjx1bnNpZ25lZD4gQ29kZUJsb2NrOjpzZXRDb25z
dGFudFJlZ2lzdGVycyhjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBj
b25zdGFudHMsIGNvbnN0IEZpeGVkVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbikKIHsKICAgICBWTSYgdm0gPSAqbV92bTsK
QEAgLTg5Miw2ICs5OTksNyBAQCBWZWN0b3I8dW5zaWduZWQ+IENvZGVCbG9jazo6c2V0Q29uc3Rh
bnRSCiAgICAgICAgIHN3aXRjaCAocmVwcmVzZW50YXRpb24pIHsKICAgICAgICAgY2FzZSBTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb25z
dGFudCA9IGdsb2JhbE9iamVjdC0+bGlua1RpbWVDb25zdGFudChzdGF0aWNfY2FzdDxMaW5rVGlt
ZUNvbnN0YW50Pihjb25zdGFudC5hc0ludDMyQXNBbnlJbnQoKSkpOworICAgICAgICAgICAgQVNT
RVJUKGNvbnN0YW50LmlzQ2VsbCgpKTsgLy8gVW5saW5rZWQgQmFzZWxpbmUgSklUIHJlcXVpcmVz
IHRoaXMuCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246Ok90aGVyOgogICAgICAgICBjYXNlIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
SW50ZWdlcjoKQEAgLTE1MTQsNyArMTYyMiw3IEBAIENvZGVCbG9jazo6SklURGF0YSYgQ29kZUJs
b2NrOjplbnN1cmVKSVQKICAgICByZXR1cm4gKm1faml0RGF0YTsKIH0KIAotdm9pZCBDb2RlQmxv
Y2s6OmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKQordm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplSklUSW5saW5lQ2FjaGVzKCkKIHsKICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0
RGF0YS5nZXQoKSkgewogICAgICAgICBmb3IgKENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvIDog
aml0RGF0YS0+bV9jYWxsTGlua0luZm9zKQpAQCAtMTUyNSw2ICsxNjMzLDIwIEBAIHZvaWQgQ29k
ZUJsb2NrOjpmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW4KICAgICAgICAgICAgIHN0dWJJbmZvLT52
aXNpdFdlYWtSZWZlcmVuY2VzKGxvY2tlciwgdGhpcyk7CiAgICAgICAgIH0KICAgICB9CisKKwor
I2lmIEFTU0VSVF9FTkFCTEVECisgICAgaWYgKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkgeworICAgICAgICAvLyBWZXJpZnkgd2UgZG9uJ3QgbmVlZCB0byBmaW5hbGl6ZSB0aGVz
ZSBzaW5jZSB0aGV5J3JlIHZpcnR1YWwgY2FsbHMuCisgICAgICAgIGZvciAoQ2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8gOiBzdGF0aWNfY2FzdDxCYXNlbGluZUpJVENvZGUqPihtX2ppdENvZGUu
Z2V0KCkpLT5tX2V2YWxDYWxsTGlua0luZm9zKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNhbGxM
aW5rSW5mby0+aXNMaW5rZWQoKSk7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPmZvckVhY2hE
ZXBlbmRlbnRDZWxsKFtdIChKU0NlbGwqKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgfQorI2VuZGlmCiB9
CiAjZW5kaWYKIApAQCAtMTUzNCw0NiArMTY1NiwxMiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoCiAKICAgICB1cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogCi0jaWYg
RU5BQkxFKEpJVCkKLSAgICBib29sIGlzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA9IG1faXNF
bGlnaWJsZUZvckxMSW50RG93bmdyYWRlOwotICAgIG1faXNFbGlnaWJsZUZvckxMSW50RG93bmdy
YWRlID0gZmFsc2U7Ci0gICAgLy8gSWYgQmFzZWxpbmVKSVQgY29kZSBpcyBub3QgZXhlY3V0aW5n
LCBhbmQgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50IGV4aXN0cywgd2UgYXR0ZW1wdAotICAgIC8v
IHRvIGRpc2NhcmQgYmFzZWxpbmUgSklUIGNvZGUgYW5kIHJlaW5zdGFsbCBMTEludCBjb2RlIHRv
IHNhdmUgSklUIG1lbW9yeS4KLSAgICBpZiAoT3B0aW9uczo6dXNlTExJbnQoKSAmJiAhbV9oYXNM
aW5rZWRPU1JFeGl0ICYmIGppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCAmJiAhbV92
bS0+aGVhcC5jb2RlQmxvY2tTZXQoKS5pc0N1cnJlbnRseUV4ZWN1dGluZyh0aGlzKSkgewotICAg
ICAgICBpZiAoQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBvcHRpbWl6ZWRSZXBsYWNl
bWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9wdGltaXplZENvZGVCbG9jay0+bV9vc3JFeGl0
Q291bnRlcikgewotICAgICAgICAgICAgICAgIGlmIChpc0VsaWdpYmxlRm9yTExJbnREb3duZ3Jh
ZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgICAgICAgICAgTExJbnQ6OnNldEVudHJ5cG9pbnQodGhpcyk7Ci0gICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRUeXBlOjpJbnRlcnByZXRlclRodW5r
KTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5saW5r
ZWRDb2RlLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGkrKykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRIYW5kbGVyID0g
bV91bmxpbmtlZENvZGUtPmV4Y2VwdGlvbkhhbmRsZXIoaSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBIYW5kbGVySW5mbyYgaGFuZGxlciA9IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxl
cnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbnN0cnVjdGlvbiA9ICppbnN0
cnVjdGlvbnMoKS5hdCh1bmxpbmtlZEhhbmRsZXIudGFyZ2V0KS5wdHIoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZXIuaW5pdGlhbGl6ZSh1bmxpbmtlZEhhbmRsZXIsIENvZGVMb2Nh
dGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+KExMSW50OjpoYW5kbGVDYXRjaChpbnN0
cnVjdGlvbi53aWR0aCgpKS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIHVubGlua0luY29taW5nQ2FsbHMoKTsKLQotICAgICAgICAgICAgICAg
ICAgICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2Ugb3V0IGhlcmUgYmVjYXVzZSBpbiBmaW5h
bGl6ZVVuY29uZGl0aW9uYWxseSBhbGwgY29tcGlsZXIgdGhyZWFkcwotICAgICAgICAgICAgICAg
ICAgICAvLyBhcmUgc2FmZXBvaW50ZWQsIG1lYW5pbmcgdGhleSdyZSBydW5uaW5nIGVpdGhlciBi
ZWZvcmUgb3IgYWZ0ZXIgYnl0ZWNvZGUgcGFyc2VyLCBhbmQgYnl0ZWNvZGUKLSAgICAgICAgICAg
ICAgICAgICAgLy8gcGFyc2VyIGlzIHRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIHBvaW50aW5nIGlu
dG8gdGhlIHZhcmlvdXMgKmluZm9zLgotICAgICAgICAgICAgICAgICAgICByZXNldEpJVERhdGEo
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9pc0VsaWdp
YmxlRm9yTExJbnREb3duZ3JhZGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0jZW5kaWYKLSAgICAKICAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVk
KGppdFR5cGUoKSkpCiAgICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAogI2lm
IEVOQUJMRShKSVQpCiAgICAgaWYgKCEhaml0Q29kZSgpKQotICAgICAgICBmaW5hbGl6ZUJhc2Vs
aW5lSklUSW5saW5lQ2FjaGVzKCk7CisgICAgICAgIGZpbmFsaXplSklUSW5saW5lQ2FjaGVzKCk7
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTU5NCw3ICsxNjgyLDcgQEAgdm9p
ZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICBjYXNlIEpJVFR5
cGU6Okhvc3RDYWxsVGh1bms6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgSklU
VHlwZTo6SW50ZXJwcmV0ZXJUaHVuazoKLSAgICAgICAgICAgIGNvdW50ID0gbV9sbGludEV4ZWN1
dGVDb3VudGVyLmNvdW50KCk7CisgICAgICAgICAgICBjb3VudCA9IG1fbGxpbnRFeGVjdXRlQ291
bnRlci0+Y291bnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpJVFR5cGU6
OkJhc2VsaW5lSklUOgogICAgICAgICAgICAgY291bnQgPSBtX2ppdEV4ZWN1dGVDb3VudGVyLmNv
dW50KCk7CkBAIC0xNjc1LDMwICsxNzYzLDYgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9j
azo6YWRkU3R1YkluZgogICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9zdHViSW5m
b3MuYWRkKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pOwogfQogCi1KSVRBZGRJQyogQ29kZUJsb2Nr
OjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLXsKLSAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGVuc3VyZUpJVERh
dGEobG9ja2VyKS5tX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlKTsKLX0KLQotSklUTXVsSUMqIENv
ZGVCbG9jazo6YWRkSklUTXVsSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCi17
Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBlbnN1
cmVKSVREYXRhKGxvY2tlcikubV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7Ci19Ci0KLUpJVFN1
YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICByZXR1
cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOwotfQot
Ci1KSVROZWdJQyogQ29kZUJsb2NrOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlKQotewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAg
ICByZXR1cm4gZW5zdXJlSklURGF0YShsb2NrZXIpLm1fbmVnSUNzLmFkZChhcml0aFByb2ZpbGUp
OwotfQotCiBTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKQogewogICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2Nr
KTsKQEAgLTMxMzMsNyArMzE5Nyw3IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6ZnJhbWVSZWdpc3Rl
ckNvdW50KCkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgY2FzZSBKSVRUeXBlOjpCYXNlbGluZUpJ
VDoKLSAgICAgICAgcmV0dXJuIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKHRoaXMpOworICAg
ICAgICByZXR1cm4gSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IodGhpcy0+dW5saW5rZWRDb2Rl
QmxvY2soKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogI2lmIEVOQUJMRShERkdfSklUKQpA
QCAtMzM0OSwxMyArMzQxMywxMyBAQCBCaW5hcnlBcml0aFByb2ZpbGUqIENvZGVCbG9jazo6Ymlu
YXJ5QXJpCiB7CiAgICAgc3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfYWRk
OgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEFkZD4oKS5tZXRhZGF0YSh0aGlzKS5t
X2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX211bDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8
T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CisgICAgICAgIHJldHVybiBw
Yy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBv
cF9zdWI6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLm1f
YXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRo
aXMpLm1fYXJpdGhQcm9maWxlOwogICAgIGNhc2Ugb3BfZGl2OgotICAgICAgICByZXR1cm4gJnBj
LT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0
dXJuIHBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBk
ZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMzY3LDExICszNDMxLDExIEBAIFVu
YXJ5QXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OnVuYXJ5QXJpdGgKIHsKICAgICBzd2l0Y2ggKHBj
LT5vcGNvZGVJRCgpKSB7CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMt
PmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOworICAgICAgICBy
ZXR1cm4gcGMtPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKHRoaXMpLm1fYXJpdGhQcm9maWxlOwog
ICAgIGNhc2Ugb3BfaW5jOgotICAgICAgICByZXR1cm4gJnBjLT5hczxPcEluYz4oKS5tZXRhZGF0
YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIHBjLT5hczxPcEluYz4oKS5t
ZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RlYzoKLSAgICAgICAg
cmV0dXJuICZwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7Cisg
ICAgICAgIHJldHVybiBwYy0+YXM8T3BEZWM+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2Zp
bGU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzQ3MiwyMiArMzUz
NiwxNiBAQCB2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiB9CiAKICNp
ZiBFTkFCTEUoSklUKQotdm9pZCBDb2RlQmxvY2s6OnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6
dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJiBtYXApIAoteyAKLSAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgZW5zdXJlSklURGF0YShsb2NrZXIpLm1fcGNU
b0NvZGVPcmlnaW5NYXAgPSBXVEZNb3ZlKG1hcCk7Ci19Ci0KIHN0ZDo6b3B0aW9uYWw8Q29kZU9y
aWdpbj4gQ29kZUJsb2NrOjpmaW5kUEModm9pZCogcGMpCiB7CisgICAgaWYgKGF1dG8qIHBjVG9D
b2RlT3JpZ2luTWFwID0gbV9qaXRDb2RlLT5wY1RvQ29kZU9yaWdpbk1hcCgpKSB7CisgICAgICAg
IGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+IGNvZGVPcmlnaW4gPSBwY1RvQ29kZU9yaWdp
bk1hcC0+ZmluZFBDKHBjKSkKKyAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAgIH0K
KwogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAg
ICAgICBpZiAoYXV0byogaml0RGF0YSA9IG1faml0RGF0YS5nZXQoKSkgewotICAgICAgICAgICAg
aWYgKGppdERhdGEtPm1fcGNUb0NvZGVPcmlnaW5NYXApIHsKLSAgICAgICAgICAgICAgICBpZiAo
c3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBjb2RlT3JpZ2luID0gaml0RGF0YS0+bV9wY1RvQ29k
ZU9yaWdpbk1hcC0+ZmluZFBDKHBjKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVP
cmlnaW47Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvIDogaml0RGF0YS0+bV9zdHViSW5mb3MpIHsKICAgICAgICAgICAgICAgICBp
ZiAoc3R1YkluZm8tPmNvbnRhaW5zUEMocGMpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPihzdHViSW5mby0+Y29kZU9yaWdpbik7CkBAIC0zNTIx
LDI4ICszNTc5LDE0IEBAIHN0ZDo6b3B0aW9uYWw8Qnl0ZWNvZGVJbmRleD4gQ29kZUJsb2NrOjoK
ICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleDsKIH0KIAotaW50MzJfdCBDb2RlQmxvY2s6OnRocmVz
aG9sZEZvckpJVChpbnQzMl90IHRocmVzaG9sZCkKLXsKLSAgICBzd2l0Y2ggKHVubGlua2VkQ29k
ZUJsb2NrKCktPmRpZE9wdGltaXplKCkpIHsKLSAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWlu
YXRlOgotICAgICAgICByZXR1cm4gdGhyZXNob2xkOwotICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNl
OgotICAgICAgICByZXR1cm4gdGhyZXNob2xkICogNDsKLSAgICBjYXNlIFRyaVN0YXRlOjpUcnVl
OgotICAgICAgICByZXR1cm4gdGhyZXNob2xkIC8gMjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRocmVzaG9sZDsKLX0KLQotdm9pZCBDb2RlQmxvY2s6Ompp
dEFmdGVyV2FybVVwKCkKK3ZvaWQgQ29kZUJsb2NrOjpqaXRTb29uKCkKIHsKLSAgICBtX2xsaW50
RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKHRocmVzaG9sZEZvckpJVChPcHRpb25zOjp0
aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpKSwgdGhpcyk7CisgICAgbV9sbGludEV4ZWN1dGVD
b3VudGVyLT5zZXROZXdUaHJlc2hvbGQodW5saW5rZWRDb2RlQmxvY2soKS0+dGhyZXNob2xkRm9y
SklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOwogfQogCi12b2lkIENv
ZGVCbG9jazo6aml0U29vbigpCit2b2lkIENvZGVCbG9jazo6aml0TmV4dEludm9jYXRpb24oKQog
ewotICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQodGhyZXNob2xkRm9y
SklUKE9wdGlvbnM6OnRocmVzaG9sZEZvckpJVFNvb24oKSksIHRoaXMpOworICAgIG1fbGxpbnRF
eGVjdXRlQ291bnRlci0+c2V0TmV3VGhyZXNob2xkKDAsIHRoaXMpOwogfQogCiBib29sIENvZGVC
bG9jazo6aGFzSW5zdGFsbGVkVk1UcmFwQnJlYWtwb2ludHMoKSBjb25zdApAQCAtMzU4OCwyOCAr
MzYzMiw4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRvdWJsZSBu
dW1TdWJzID0gMC4wOwogICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKLSAgICBhdXRv
IGNvdW50SUNzID0gWyZdIChDb2RlQmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICBpZiAoYXV0
byogaml0RGF0YSA9IGNvZGVCbG9jay0+bV9qaXREYXRhLmdldCgpKSB7Ci0gICAgICAgICAgICBm
b3IgKEpJVEFkZElDKiBhZGRJQyA6IGppdERhdGEtPm1fYWRkSUNzKSB7Ci0gICAgICAgICAgICAg
ICAgbnVtQWRkcysrOwotICAgICAgICAgICAgICAgIHRvdGFsQWRkU2l6ZSArPSBhZGRJQy0+Y29k
ZVNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChKSVRNdWxJQyogbXVs
SUMgOiBqaXREYXRhLT5tX211bElDcykgewotICAgICAgICAgICAgICAgIG51bU11bHMrKzsKLSAg
ICAgICAgICAgICAgICB0b3RhbE11bFNpemUgKz0gbXVsSUMtPmNvZGVTaXplKCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoSklUTmVnSUMqIG5lZ0lDIDogaml0RGF0YS0+bV9u
ZWdJQ3MpIHsKLSAgICAgICAgICAgICAgICBudW1OZWdzKys7Ci0gICAgICAgICAgICAgICAgdG90
YWxOZWdTaXplICs9IG5lZ0lDLT5jb2RlU2l6ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBmb3IgKEpJVFN1YklDKiBzdWJJQyA6IGppdERhdGEtPm1fc3ViSUNzKSB7Ci0gICAgICAg
ICAgICAgICAgbnVtU3VicysrOwotICAgICAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJ
Qy0+Y29kZVNpemUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGF1dG8gY291bnRJ
Q3MgPSBbJl0gKENvZGVCbG9jayopIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmUt
aW1wbGVtZW50IHRoaXMgdXNpbmcgSklUQ29kZS4KICAgICB9OwogICAgIGhlYXAoKS0+Zm9yRWFj
aENvZGVCbG9jayhjb3VudElDcyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsOSBA
QCBjbGFzcyBKU01vZHVsZUVudmlyb25tZW50OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogY2xhc3MgTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Owog
Y2xhc3MgTWV0YWRhdGFUYWJsZTsKLWNsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOwogY2xhc3MgUmVn
aXN0ZXJBdE9mZnNldExpc3Q7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKK2NsYXNzIEJhc2Vs
aW5lSklUQ29kZTsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQ29k
ZUJsb2NrUmFyZURhdGEpOwogCkBAIC0xNTgsNyArMTU4LDkgQEAgcHVibGljOgogICAgIE1ldGFk
YXRhVGFibGUqIG1ldGFkYXRhVGFibGUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmdldCgp
OyB9CiAKICAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Q
YXJhbWV0ZXJzOyB9Citwcml2YXRlOgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyh1bnNpZ25l
ZCBuZXdWYWx1ZSk7CitwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IH0KIApAQCAt
MTY3LDcgKzE2OSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1WYXJzOyB9CiAgICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7
IH0KIAotICAgIHVuc2lnbmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1f
bnVtUGFyYW1ldGVyczsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0
ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJz
KTsgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOyB9CkBAIC0yMzIsMTYgKzIz
Myw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3RhbGxlZFZNVHJhcEJyZWFrcG9pbnRzKCkg
Y29uc3Q7CiAgICAgYm9vbCBpbnN0YWxsVk1UcmFwQnJlYWtwb2ludHMoKTsKIAotICAgIGlubGlu
ZSBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciByZWcpCi0gICAgewotICAgICAgICAv
LyBGSVhNRTogQ29uc2lkZXIgYWRkaW5nIGJhY2sgdGhlIG9wdGltaXphdGlvbiB3aGVyZSB3ZSBy
ZXR1cm4gdHJ1ZSBpZiBgcmVnYCBpcyBgdGhpc2AgYW5kIHdlJ3JlIGluIHNsb3BweSBtb2RlLgot
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTQ1
Ci0gICAgICAgIGlmIChyZWcuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENv
bnN0YW50KHJlZykuaXNDZWxsKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQog
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gcmVnLm9mZnNldCgpID49IHN0YXRpY19jYXN0
PGludD4obV9udW1WYXJzKTsKQEAgLTI2OCwyMyArMjU5LDIxIEBAIHB1YmxpYzoKICNpZiBFTkFC
TEUoSklUKQogICAgIHN0cnVjdCBKSVREYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZB
U1RfQUxMT0NBVEVEOworICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogCiAgICAgICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7Ci0gICAgICAg
IEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7Ci0gICAgICAgIEJhZzxKSVRNdWxJQz4gbV9tdWxJQ3M7
Ci0gICAgICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7Ci0gICAgICAgIEJhZzxKSVRTdWJJQz4g
bV9zdWJJQ3M7CiAgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAg
ICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgUGFja2VkUmF3U2VudGluZWxO
b2RlPENhbGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKICAgICAgICAgU2VudGluZWxMaW5r
ZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIFBhY2tlZFJhd1NlbnRpbmVsTm9kZTxQb2x5bW9y
cGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7Ci0gICAgICAgIEZpeGVk
VmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwotICAgICAgICBGaXhl
ZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKLSAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFw
OwogICAgICAgICBib29sIG1faGFzQ2FsbGVlU2F2ZVJlZ2lzdGVycyB7IGZhbHNlIH07CiAgICAg
ICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKLSAgICAgICAg
SklUQ29kZU1hcCBtX2ppdENvZGVNYXA7CisKKyAgICAgICAgRml4ZWRWZWN0b3I8dm9pZCo+IG1f
aml0Q29uc3RhbnRQb29sOworICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29u
c3RhbnRQb29sKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpJVERhdGEsIG1faml0Q29uc3Rh
bnRQb29sKTsgfQogICAgIH07CiAKKyAgICB2b2lkIHNldHVwV2l0aFVubGlua2VkQmFzZWxpbmVD
b2RlKFJlZjxCYXNlbGluZUpJVENvZGU+KTsKKwogICAgIEpJVERhdGEmIGVuc3VyZUpJVERhdGEo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIpCiAgICAgewogICAgICAgICBpZiAoTElL
RUxZKG1faml0RGF0YSkpCkBAIC0yOTMsMjIgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAg
SklURGF0YSYgZW5zdXJlSklURGF0YVNsb3coY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJik7CiAK
LSAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Ci0gICAgSklU
TXVsSUMqIGFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVE5lZ0lDKiBh
ZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJ
QyhCaW5hcnlBcml0aFByb2ZpbGUqKTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0
b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVy
YXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVEFkZElDKiBhZGRN
YXRoSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhw
cm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUg
PSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxH
ZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUTXVsSUMqIGFkZE1hdGhJQyhCaW5hcnlB
cml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUpOyB9Ci0K
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZh
bHVlPjo6dHlwZT4KLSAgICBKSVROZWdJQyogYWRkTWF0aElDKFVuYXJ5QXJpdGhQcm9maWxlKiBw
cm9maWxlKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxlKTsgfQotCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0g
ICAgSklUU3ViSUMqIGFkZE1hdGhJQyhCaW5hcnlBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0
dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkpJVERhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdERhdGEp
OyB9CiAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSwgQ29k
ZU9yaWdpbik7CiAKQEAgLTMyMiwxOCArMjk2LDggQEAgcHVibGljOgogICAgIC8vIGxvb2tpbmcg
Zm9yIGEgQ2FsbExpbmtJbmZvTWFwIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIGNhbGxpbmcgdGhp
cy4KICAgICBDYWxsTGlua0luZm8qIGdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoQnl0
ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlTWFwKEpJVENvZGVNYXAmJiBq
aXRDb2RlTWFwKQotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xv
Y2spOwotICAgICAgICBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwID0gV1RGTW92
ZShqaXRDb2RlTWFwKTsKLSAgICB9Ci0gICAgY29uc3QgSklUQ29kZU1hcCYgaml0Q29kZU1hcCgp
Ci0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAg
ICAgIHJldHVybiBlbnN1cmVKSVREYXRhKGxvY2tlcikubV9qaXRDb2RlTWFwOwotICAgIH0KKyAg
ICBjb25zdCBKSVRDb2RlTWFwJiBqaXRDb2RlTWFwKCk7CiAKLSAgICB2b2lkIHNldFBDVG9Db2Rl
T3JpZ2luTWFwKHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4mJik7CiAgICAgc3Rk
OjpvcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEModm9pZCogcGMpOwogCiAgICAgdm9pZCBzZXRD
YWxsZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0KTsKQEAgLTQ3Miw2ICs0MzYsNyBAQCBwdWJs
aWM6CiAKICAgICBTdHJpbmcgbmFtZUZvclJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9
CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9udW1QYXJhbWV0ZXJzKSB8fCAhT3B0aW9uczo6dXNlSklUKCkpOwpAQCAt
NTY5LDggKzUzNCwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVy
czsgfQogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVh
bFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9D
b25zdGFudEluZGV4KCldLmdldCgpOyB9CisgICAgYm9vbCBpc0NvbnN0YW50T3duZWRCeVVubGlu
a2VkQ29kZUJsb2NrKFZpcnR1YWxSZWdpc3RlcikgY29uc3Q7CiAgICAgQUxXQVlTX0lOTElORSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24gY29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
VmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0
YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHJlZyk7IH0KICAgICBBTFdBWVNfSU5MSU5FIFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbih1
bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvbnN0YW50U291
cmNlQ29kZVJlcHJlc2VudGF0aW9uKGluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29k
ZUJsb2NrLCBtX2NvbnN0YW50UmVnaXN0ZXJzKSArIGRlY2x0eXBlKG1fY29uc3RhbnRSZWdpc3Rl
cnMpOjpkYXRhTWVtb3J5T2Zmc2V0KCk7IH0KIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25EZWNsKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQo
KTsgfQogICAgIGludCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX2Z1bmN0aW9u
RGVjbHMuc2l6ZSgpOyB9CkBAIC01OTUsMjIgKzU2MiwyMiBAQCBwdWJsaWM6CiAgICAgLy8gSnVt
cCBUYWJsZXMKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hK
dW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCisgICAgU2ltcGxlSnVtcFRhYmxlJiBiYXNlbGluZVN3
aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBiYXNl
bGluZVN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCk7CisgICAgdm9pZCogYmFz
ZWxpbmVKSVRDb25zdGFudFBvb2woKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9q
aXREYXRhKTsKLSAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2ppdERhdGEgJiYgaml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgcmV0dXJuIG1faml0RGF0YS0+bV9q
aXRDb25zdGFudFBvb2wuZGF0YSgpOwogICAgIH0KICNlbmRpZgogICAgIHNpemVfdCBudW1iZXJP
ZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2Rl
LT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4
KSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7IH0KIAotI2lmIEVOQUJMRShKSVQpCi0gICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdT
d2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX2ppdERhdGEpOwotICAgICAgICByZXR1cm4gbV9qaXREYXRhLT5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXNbdGFibGVJbmRleF07Ci0gICAgfQorI2lmIEVOQUJMRShERkdfSklUKQorICAg
IFN0cmluZ0p1bXBUYWJsZSYgZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4
KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCk7CiAjZW5kaWYKKwogICAgIHNpemVfdCBudW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5udW1iZXJPZlVubGlua2Vk
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpOyB9CiAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1w
VGFibGUmIHVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IHJl
dHVybiBtX3VubGlua2VkQ29kZS0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7IH0KIApAQCAtNjMyLDIxICs1OTksMjAgQEAgcHVibGljOgogCiAgICAgYm9vbCBjaGVj
a0lmSklUVGhyZXNob2xkUmVhY2hlZCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9sbGludEV4
ZWN1dGVDb3VudGVyLmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KHRoaXMpOworICAgICAg
ICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLT5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFu
ZFNldCh0aGlzKTsKICAgICB9CiAKICAgICB2b2lkIGRvbnRKSVRBbnl0aW1lU29vbigpCiAgICAg
ewotICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAg
ICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLT5kZWZlckluZGVmaW5pdGVseSgpOwogICAgIH0K
IAotICAgIGludDMyX3QgdGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xkKTsKLSAgICB2
b2lkIGppdEFmdGVyV2FybVVwKCk7CiAgICAgdm9pZCBqaXRTb29uKCk7CisgICAgdm9pZCBqaXRO
ZXh0SW52b2NhdGlvbigpOwogCiAgICAgY29uc3QgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyJiBs
bGludEV4ZWN1dGVDb3VudGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2xsaW50
RXhlY3V0ZUNvdW50ZXI7CisgICAgICAgIHJldHVybiAqbV9sbGludEV4ZWN1dGVDb3VudGVyOwog
ICAgIH0KIAogICAgIHR5cGVkZWYgSGFzaE1hcDxzdGQ6OnR1cGxlPFN0cnVjdHVyZUlELCB1bnNp
Z25lZD4sIEZpeGVkVmVjdG9yPExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludD4+IFN0cnVjdHVyZVdhdGNocG9pbnRNYXA7CkBAIC03OTcsNiArNzYzLDcgQEAgcHVi
bGljOgogCiAgICAgYm9vbCBoYXNEZWJ1Z2dlclJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gbV9k
ZWJ1Z2dlclJlcXVlc3RzOyB9CiAgICAgdm9pZCogZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSB7
IHJldHVybiAmbV9kZWJ1Z2dlclJlcXVlc3RzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkRlYnVnZ2VyUmVxdWVzdHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2Nr
LCBtX2RlYnVnZ2VyUmVxdWVzdHMpOyB9CiAKICAgICB2b2lkIGFkZEJyZWFrcG9pbnQodW5zaWdu
ZWQgbnVtQnJlYWtwb2ludHMpOwogICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludCh1bnNpZ25lZCBu
dW1CcmVha3BvaW50cykKQEAgLTgzOCw2ICs4MDUsNyBAQCBwdWJsaWM6CiAgICAgbXV0YWJsZSBD
b25jdXJyZW50SlNMb2NrIG1fbG9jazsKIAogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGlu
ZWQ7IC8vIE5vdCBhIGJpdGZpZWxkIGJlY2F1c2UgdGhlIEpJVCB3YW50cyB0byBzdG9yZSB0byBp
dC4KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zaG91bGRBbHdheXNCZUlubGlu
ZWQpOyB9CiAKICNpZiBFTkFCTEUoSklUKQogICAgIHVuc2lnbmVkIG1fY2FwYWJpbGl0eUxldmVs
U3RhdGUgOiAyOyAvLyBERkc6OkNhcGFiaWxpdHlMZXZlbApAQCAtODQ3LDggKzgxNSw2IEBAIHB1
YmxpYzoKICAgICBib29sIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uIDogMTsKICAgICBib29sIG1f
aGFzQmVlbkNvbXBpbGVkV2l0aEZUTCA6IDE7CiAKLSAgICBib29sIG1faGFzTGlua2VkT1NSRXhp
dCA6IDE7Ci0gICAgYm9vbCBtX2lzRWxpZ2libGVGb3JMTEludERvd25ncmFkZSA6IDE7CiAgICAg
Ym9vbCBtX3Zpc2l0Q2hpbGRyZW5Ta2lwcGVkRHVlVG9PbGRBZ2UgeyBmYWxzZSB9OwogCiAgICAg
Ly8gSW50ZXJuYWwgbWV0aG9kcyBmb3IgdXNlIGJ5IHZhbGlkYXRpb24gY29kZS4gSXQgd291bGQg
YmUgcHJpdmF0ZSBpZiBpdCB3YXNuJ3QKQEAgLTkwNywxNiArODczLDEyIEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpOyB9CiAKLSAgICBib29sIGxv
b3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKLSAgICB7Ci0gICAgICAg
IC8vIFNvbWUgYnVpbHRpbnMgYXJlIHJlcXVpcmVkIHRvIGFsd2F5cyBjb21wbGV0ZSB0aGUgbG9v
cHMgdGhleSBydW4uCi0gICAgICAgIHJldHVybiAhbV91bmxpbmtlZENvZGUtPmlzQnVpbHRpbkZ1
bmN0aW9uKCk7Ci0gICAgfQorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5n
RWFybHlSZXR1cm4oKSB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+bG9vcEhpbnRzQXJlRWxpZ2li
bGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5h
bGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGZpbmFs
aXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMoKTsKKyAgICB2b2lkIGZpbmFsaXplSklUSW5saW5l
Q2FjaGVzKCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICB2b2lkIHRhbGx5RnJl
cXVlbnRFeGl0U2l0ZXMoKTsKQEAgLTEwMTAsNyArOTcyLDkgQEAgcHJpdmF0ZToKICAgICBTdHJ1
Y3R1cmVXYXRjaHBvaW50TWFwIG1fbGxpbnRHZXRCeUlkV2F0Y2hwb2ludE1hcDsKICAgICBSZWZQ
dHI8SklUQ29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQpCitwdWJsaWM6CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEpJVERhdGE+IG1faml0RGF0YTsKK3ByaXZhdGU6CiAjZW5kaWYKICNpZiBF
TkFCTEUoREZHX0pJVCkKICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBi
bG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jawpAQCAtMTAyOSw3ICs5
OTMsNyBAQCBwcml2YXRlOgogCiAgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9hbHRlcm5h
dGl2ZTsKICAgICAKLSAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVD
b3VudGVyOworICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciogbV9sbGludEV4ZWN1dGVDb3Vu
dGVyIHsgbnVsbHB0ciB9OwogCiAgICAgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyIG1faml0RXhl
Y3V0ZUNvdW50ZXI7CiAgICAgdWludDMyX3QgbV9vc3JFeGl0Q291bnRlcjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2
aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
a0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTAgQEAKIAogI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0
cnVjdHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgi
CiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKQEAgLTQwLDkgKzQyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2Zp
bGUoY29ucwogICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKICAg
ICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1
bmMobWV0YWRhdGEubV9wcm9maWxlLCBmYWxzZSk7IH0pOwotCiAgICAgICAgIEZPUl9FQUNIX09Q
Q09ERV9XSVRIX1ZBTFVFX1BST0ZJTEUoVklTSVQpCi0KICN1bmRlZiBWSVNJVAogCiAgICAgICAg
IG1fbWV0YWRhdGEtPmZvckVhY2g8T3BJdGVyYXRvck9wZW4+KFsmXSAoYXV0byYgbWV0YWRhdGEp
IHsgCkBAIC01Nyw3ICs1Nyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxl
KGNvbnMKICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV92YWx1ZVByb2ZpbGUsIGZhbHNlKTsK
ICAgICAgICAgfSk7CiAgICAgfSAgIAotCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CkBAIC05OSw0ICs5OCwzOCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExpbmtJ
bmZvCiAgICAgfQogfQogCisjaWYgRU5BQkxFKEpJVCkKK0FMV0FZU19JTkxJTkUgY29uc3QgSklU
Q29kZU1hcCYgQ29kZUJsb2NrOjpqaXRDb2RlTWFwKCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgp
ID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxp
bmVKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9qaXRDb2RlTWFwOworfQorCitBTFdBWVNf
SU5MSU5FIFNpbXBsZUp1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN3aXRjaEp1bXBUYWJs
ZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkJh
c2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRDb2RlKj4obV9q
aXRDb2RlLmdldCgpKS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorCitBTFdB
WVNfSU5MSU5FIFN0cmluZ0p1bXBUYWJsZSYgQ29kZUJsb2NrOjpiYXNlbGluZVN0cmluZ1N3aXRj
aEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJ
VFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZWxpbmVKSVRD
b2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK0FMV0FZU19JTkxJTkUgU2lt
cGxlSnVtcFRhYmxlJiBDb2RlQmxvY2s6OmRmZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRl
eCkKK3sKKyAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PERGRzo6SklUQ29kZSo+KG1faml0Q29kZS5nZXQoKSktPm1fc3dpdGNo
SnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKK30KKworQUxXQVlTX0lOTElORSBTdHJpbmdKdW1wVGFi
bGUmIENvZGVCbG9jazo6ZGZnU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KQor
eworICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8REZHOjpKSVRDb2RlKj4obV9qaXRDb2RlLmdldCgpKS0+bV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGFibGVUb0NvZGVC
bG9ja0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZSogd3JhcChDb2RlQmxvY2sqIGNvZGVCbG9jayk7CiAgICAgCiAgICAg
c3RhdGljIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UqIHdyYXBBbmRBY3RpdmF0ZShDb2RlQmxv
Y2sqIGNvZGVCbG9jayk7CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2Nr
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2UsIG1f
Y29kZUJsb2NrKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1
dGlvbkNvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTksNyArMTU5LDcgQEAgYm9vbCBFeGVjdXRpb25Db3VudGVyPGNvdW50aW5nVmFyaWFu
dD46OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB0aHJlc2hvbGQgPSBjbGlw
cGVkVGhyZXNob2xkKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgOiBudWxs
cHRyLCB0aHJlc2hvbGQpOworICAgIHRocmVzaG9sZCA9IGNsaXBwZWRUaHJlc2hvbGQodGhyZXNo
b2xkKTsKICAgICAKICAgICBtX2NvdW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90PigtdGhyZXNo
b2xkKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhl
Y3V0aW9uQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9yY2VTbG93UGF0aENvbmN1cnJlbnRs
eSgpOyAvLyBJZiB5b3UgdXNlIHRoaXMsIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KCkg
bWF5IHN0aWxsIHJldHVybiBmYWxzZS4KICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2Vk
QW5kU2V0KENvZGVCbG9jayopOwogICAgIGJvb2wgaGFzQ3Jvc3NlZFRocmVzaG9sZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY291bnRlciA+PSAwOyB9Ci0gICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50
MzJfdCB0aHJlc2hvbGQsIENvZGVCbG9jayopOworICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGlu
dDMyX3QgdGhyZXNob2xkLCBDb2RlQmxvY2sqID0gbnVsbHB0cik7CiAgICAgdm9pZCBkZWZlcklu
ZGVmaW5pdGVseSgpOwogICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PGRvdWJsZT4obV90b3RhbENvdW50KSArIG1fY291bnRlcjsgfQogICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OwpAQCAtODYsMTMgKzg2LDkgQEAgcHVibGljOgogICAgIH0KICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBUIGNsaXBwZWRUaHJlc2hv
bGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVCB0aHJlc2hvbGQpCisgICAgc3RhdGlj
IFQgY2xpcHBlZFRocmVzaG9sZChUIHRocmVzaG9sZCkKICAgICB7Ci0gICAgICAgIGludDMyX3Qg
bWF4VGhyZXNob2xkOwotICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291
bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCkgJiYgZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgbWF4
VGhyZXNob2xkID0gZ2xvYmFsT2JqZWN0LT53ZWFrUmFuZG9tSW50ZWdlcigpICUgbWF4aW11bUV4
ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cygpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtYXhUaHJlc2hvbGQgPSBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9p
bnRzKCk7CisgICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkID0gbWF4aW11bUV4ZWN1dGlvbkNv
dW50c0JldHdlZW5DaGVja3BvaW50cygpOwogICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhy
ZXNob2xkKQogICAgICAgICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICBy
ZXR1cm4gdGhyZXNob2xkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9HZXRCeUlkTWV0YWRhdGEuaAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRNZXRhZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw2ICs0OSw3IEBAIHN0cnVjdCBHZXRCeUlkTW9kZU1ldGFkYXRhVW5zZXQgewogc3RhdGljX2Fz
c2VydChzaXplb2YoR2V0QnlJZE1vZGVNZXRhZGF0YVVuc2V0KSA9PSAxMik7CiAKIHN0cnVjdCBH
ZXRCeUlkTW9kZU1ldGFkYXRhQXJyYXlMZW5ndGggeworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZBcnJheVByb2ZpbGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVN
ZXRhZGF0YUFycmF5TGVuZ3RoLCBhcnJheVByb2ZpbGUpOyB9CiAgICAgQXJyYXlQcm9maWxlIGFy
cmF5UHJvZmlsZTsKIH07CiBzdGF0aWNfYXNzZXJ0KHNpemVvZihHZXRCeUlkTW9kZU1ldGFkYXRh
QXJyYXlMZW5ndGgpID09IDEyKTsKQEAgLTg4LDYgKzg5LDcgQEAgdW5pb24gR2V0QnlJZE1vZGVN
ZXRhZGF0YSB7CiAgICAgICAgIEdldEJ5SWRNb2RlIG1vZGU7CiAgICAgICAgIHVpbnQ4X3QgaGl0
Q291bnRGb3JMTEludENhY2hpbmc7IC8vIFRoaXMgbXVzdCBiZSB6ZXJvIHdoZW4gd2UgdXNlIFBy
b3RvTG9hZCBtb2RlLgogICAgIH07CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoR2V0QnlJZE1vZGVNZXRhZGF0YSwgbW9kZSk7IH0K
ICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhRGVmYXVsdCBkZWZhdWx0TW9kZTsKICAgICBHZXRCeUlk
TW9kZU1ldGFkYXRhVW5zZXQgdW5zZXRNb2RlOwogICAgIEdldEJ5SWRNb2RlTWV0YWRhdGFBcnJh
eUxlbmd0aCBhcnJheUxlbmd0aE1vZGU7CkBAIC0xMTcsNiArMTE5LDcgQEAgc3RydWN0IEdldEJ5
SWRNb2RlTWV0YWRhdGEgewogICAgICAgICBHZXRCeUlkTW9kZU1ldGFkYXRhUHJvdG9Mb2FkIHBy
b3RvTG9hZE1vZGU7CiAgICAgfTsKICAgICBHZXRCeUlkTW9kZSBtb2RlOworICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEdldEJ5SWRN
b2RlTWV0YWRhdGEsIG1vZGUpOyB9CiAgICAgdWludDhfdCBoaXRDb3VudEZvckxMSW50Q2FjaGlu
ZzsKIH07CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eVN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIx
NSw3IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkkKICAgICAgICAg
cmV0dXJuIEdldEJ5U3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAgICAKICAgICBjYXNlIENh
Y2hlVHlwZTo6R2V0QnlJZFNlbGY6IHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBz
dHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpOworICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT5pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKHBy
b2ZpbGVkQmxvY2stPnZtKCkpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRo
SW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVz
KEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAgQ2FjaGVhYmxl
SWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTkwLDcgKzE5MCw3IEBAIHZvaWQgR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6ZW1pdERPTUpJVEcK
IAogICAgIC8vIExldCdzIHN0b3JlIHRoZSByZXVzZWQgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjay4g
QWZ0ZXIgdGhhdCwgd2UgY2FuIHVzZSBhbGxvY2F0ZWQgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAg
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9
Ci0gICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOwor
ICAgICAgICBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7
CiAKICAgICBpZiAoR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZUludGVybmFsOjp2ZXJib3NlKSB7CiAg
ICAgICAgIGRhdGFMb2coImJhc2VHUFIgPSAiLCBiYXNlR1BSLCAiXG4iKTsKQEAgLTIyNSwxMiAr
MjI1LDkgQEAgdm9pZCBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjplbWl0RE9NSklURwogICAgICAg
ICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7CiAgICAgZm9yIChGUFJSZWcgcmVn
IDogZnBTY3JhdGNoKQogICAgICAgICByZWdpc3RlcnNUb1NwaWxsRm9yQ0NhbGwuc2V0KHJlZyk7
CisgICAgaWYgKGppdC5jb2RlQmxvY2soKS0+dXNlRGF0YUlDKCkpCisgICAgICAgIHJlZ2lzdGVy
c1RvU3BpbGxGb3JDQ2FsbC5zZXQoc3R1YkluZm8ubV9zdHViSW5mb0dQUik7CiAgICAgcmVnaXN0
ZXJzVG9TcGlsbEZvckNDYWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2
ZUZvckNDYWxsKCkpOwotI2lmIENQVShBUk02NCkKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGppdC5jb2RlQmxvY2soKTsKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAg
ICAgcmVnaXN0ZXJzVG9TcGlsbEZvckNDYWxsLnNldChBUk02NFJlZ2lzdGVyczo6bHIpOwotI2Vu
ZGlmCiAKICAgICBBY2Nlc3NDYXNlU25pcHBldFBhcmFtcyBwYXJhbXMoc3RhdGUubV92bSwgV1RG
TW92ZShyZWdzKSwgV1RGTW92ZShncFNjcmF0Y2gpLCBXVEZNb3ZlKGZwU2NyYXRjaCkpOwogICAg
IHNuaXBwZXQtPmdlbmVyYXRvcigpLT5ydW4oaml0LCBwYXJhbXMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5U3RhdHVzLmNwcAkocmV2aXNpb24gMjgzMTMx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAgSW5CeVN0YXR1cyBJbkJ5U3RhdHVzOjpjb21w
dXRlRm9yU3R1YkluZgogICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhOb0luZm9ybWF0aW9uKTsK
IAogICAgIGNhc2UgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmOiB7Ci0gICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5nZXQoKTsK
KyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby0+aW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRG
R0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gSW5CeVN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1
YkluZm8tPmlkZW50aWZpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTc2LDExICsxNzYsMTYgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29kZUlubGlu
ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2Vs
ZlByb3BlcnR5QWNjZXNzKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpnZW5l
cmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAg
ICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBmaWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1
YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAKICAgICBHUFJSZWcgYmFzZSA9IHN0dWJJbmZv
LmJhc2VHUFI7CkBAIC0yMzMsMjMgKzIzOCwzMSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29s
IGhhc0ZyZWVSZWdpc3RlCiAgICAgcmV0dXJuIGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbykg
IT0gSW52YWxpZEdQUlJlZzsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2Vs
ZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKK2Jvb2wgSW5saW5lQWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJl
cGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJ
ZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoY29kZUJsb2NrLT51
c2VEYXRhSUMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gaGFzRnJlZVJl
Z2lzdGVyKHN0dWJJbmZvKTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlBy
b3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCitib29sIElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpCiB7CiAgICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxh
Y2Uoc3R1YkluZm8sIG9mZnNldCkpOworICAgIEFTU0VSVChjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0
eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5mbywgb2Zmc2V0KSk7CisKKyAgICBpZiAoY29kZUJs
b2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICAvLyBUaGVzZSBkeW5hbWljIHNsb3RzIGdldCBm
aWxsZWQgaW4gYnkgU3RydWN0dXJlU3R1YkluZm8uIE5vdGhpbmcgZWxzZSB0byBkby4KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIApAQCAtMjc5
LDIyICsyOTIsMjUgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5Ugog
ICAgIHJldHVybiBsaW5rZWRDb2RlSW5saW5lOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6aXND
YWNoZWFibGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkq
IGFycmF5KQorYm9vbCBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJy
YXkpCiB7CiAgICAgQVNTRVJUKGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogCiAg
ICAgaWYgKCFzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFoYXNGcmVlUmVnaXN0ZXIo
c3R1YkluZm8pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWhhc0FueUFy
cmF5U3RvcmFnZShhcnJheS0+aW5kZXhpbmdUeXBlKCkpICYmIGFycmF5LT5pbmRleGluZ1R5cGUo
KSAhPSBBcnJheUNsYXNzOwogfQogCi1ib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxl
bmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEpTQXJyYXkqIGFycmF5KQorYm9vbCBJ
bmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgSlNBcnJheSogYXJyYXkpCiB7Ci0gICAgQVNTRVJU
KGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGFycmF5KSk7CisgICAgQVNTRVJUX1VO
VVNFRChjb2RlQmxvY2ssIGlzQ2FjaGVhYmxlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5m
bywgYXJyYXkpKTsKIAogICAgIGlmICghc3R1YkluZm8uaGFzQ29uc3RhbnRJZGVudGlmaWVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTksMTcgKzMzNSwyMCBAQCBib29sIElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChTCiAgICAgcmV0dXJuIGxpbmtlZENvZGVJbmxpbmU7
CiB9CiAKLWJvb2wgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCitib29sIElubGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJp
bmdMZW5ndGgoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKIHsKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6
OkJhc2VsaW5lSklUKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gaGFzRnJl
ZVJlZ2lzdGVyKHN0dWJJbmZvKTsKIH0KIAotYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3Ry
aW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK2Jvb2wgSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQogewotICAgIEFTU0VSVChpc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChz
dHViSW5mbykpOworICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBpc0NhY2hlYWJsZVN0cmlu
Z0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKSk7CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0Nv
bnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzYzLDEzICszODIs
MTggQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKAogfQogCiAKLWJv
b2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU2VsZkluQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICAgICBpZiAoIXN0dWJJbmZvLmhhc0NvbnN0YW50SWRlbnRpZmllcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCisgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0YUlDKCkpIHsKKyAgICAgICAg
Ly8gVGhlc2UgZHluYW1pYyBzbG90cyBnZXQgZmlsbGVkIGluIGJ5IFN0cnVjdHVyZVN0dWJJbmZv
LiBOb3RoaW5nIGVsc2UgdG8gZG8uCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAg
IEdQUlJlZyBiYXNlID0gc3R1YkluZm8uYmFzZUdQUjsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9
IHN0dWJJbmZvLnZhbHVlUmVncygpOwogCkBAIC00MDYsMTMgKzQzMCwxMyBAQCB2b2lkIElubGlu
ZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgaWYgKGNvZGVCbG9jay0+dXNlRGF0
YUlDKCkpIHsKICAgICAgICAgLy8gSWYgaXQgaXMgbm90IEdldEJ5SWQtbGlrZS10aGluZywgd2Ug
ZG8gbm90IGVtaXQgbm9wIHNsZWQgKGUuZy4gR2V0QnlWYWwpLgogICAgICAgICAvLyBUaGUgY29k
ZSBpcyBhbHJlYWR5IGFuIGluZGlyZWN0IGp1bXAsIGFuZCBvbmx5IHRoaW5nIHdlIHNob3VsZCBk
byBpcyByZXBsYWNpbmcgbV9jb2RlUHRyLgotICAgICAgICBpZiAoc3R1YkluZm8uaGFzQ29uc3Rh
bnRJZGVudGlmaWVyKSB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRU
eXBlOjpCYXNlbGluZUpJVCAmJiBzdHViSW5mby5oYXNDb25zdGFudElkZW50aWZpZXIpIHsKICAg
ICAgICAgICAgIC8vIElmIG1fY29kZVB0ciBpcyBwb2ludGluZyB0byBzdHViSW5mby5zbG93UGF0
aFN0YXJ0TG9jYXRpb24sIHRoaXMgbWVhbnMgdGhhdCBJbmxpbmVBY2Nlc3MgY29kZSBpcyBub3Qg
YSBzdHViIG9uZS4KICAgICAgICAgICAgIC8vIFdlIHJld3JpdGUgdGhpcyB3aXRoIHRoZSBzdHVi
LWJhc2VkIGRpc3BhdGNoaW5nIGNvZGUgb25jZSwgYW5kIGNvbnRpbnVlIHVzaW5nIGl0IHVudGls
IHdlIHJlc2V0IHRoZSBjb2RlLgogICAgICAgICAgICAgaWYgKHN0dWJJbmZvLm1fY29kZVB0ci5l
eGVjdXRhYmxlQWRkcmVzcygpID09IHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpKSB7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklU
Q29kZU92ZXIoc3R1YkluZm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSwgc2Nv
cGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGppdCkgewog
ICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
JnN0dWJJbmZvKSwgc3R1YkluZm8ubV9zdHViSW5mb0dQUik7Ci0gICAgICAgICAgICAgICAgICAg
IGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7CisgICAgICAgICAgICAgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVz
cyhzdHViSW5mby5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2Rl
UHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8g
anVtcCA9IGppdC5qdW1wKCk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZUxvY2F0aW9u
ID0gc3R1YkluZm8uZG9uZUxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKQEAgLTQyMSw3ICs0NDUsOSBAQCB2
b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjCiAgICAgICAgICAgICAgICAg
fSksICJJbmxpbmVBY2Nlc3M6IGxpbmtpbmcgc3R1YiBjYWxsIik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KKwogICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSB0YXJnZXQ7CisgICAgICAg
IHN0dWJJbmZvLm1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0
aGUgaW5saW5lIGFjY2VzcyBjb2RlLgogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MzQs
OCArNDYwLDE0IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2MKICAg
ICB9KSwgIklubGluZUFjY2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKLXZvaWQg
SW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCit2b2lkIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1w
SW5BY2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKIHsKKyAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSAmJiBjb2RlQmxvY2stPmppdFR5
cGUoKSA9PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICBzdHViSW5mby5tX2NvZGVQ
dHIgPSBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgICAgIHN0dWJJbmZvLm1f
aW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFj
Y2VzcyBjb2RlLgorICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQ0NhbGxIZWxwZXJzOjpl
bWl0SklUQ29kZU92ZXIoc3R1YkluZm8uc3RhcnQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4o
KSwgc2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+KFsmXShDQ2FsbEhlbHBlcnMmIGpp
dCkgewogICAgICAgICAvLyBXZSBkb24ndCBuZWVkIGEgbm9wIHNsZWQgaGVyZSBiZWNhdXNlIG5v
Ym9keSBzaG91bGQgYmUganVtcGluZyBpbnRvIHRoZSBtaWRkbGUgb2YgYW4gSUMuCiAgICAgICAg
IGF1dG8ganVtcCA9IGppdC5qdW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lubGluZUFjY2Vzcy5oCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5
LDE0ICs5OSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGQ6Om1heChzaXplLCBzaXpl
Rm9yUHJvcGVydHlBY2Nlc3MoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVT
ZWxmUHJvcGVydHlBY2Nlc3MoU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0
eU9mZnNldCk7Ci0gICAgc3RhdGljIGJvb2wgY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNl
KFN0cnVjdHVyZVN0dWJJbmZvJiwgUHJvcGVydHlPZmZzZXQpOwotICAgIHN0YXRpYyBib29sIGdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVyZSos
IFByb3BlcnR5T2Zmc2V0KTsKLSAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUFycmF5TGVuZ3Ro
KFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOwotICAgIHN0YXRpYyBib29sIGlzQ2FjaGVh
YmxlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZ2Vu
ZXJhdGVBcnJheUxlbmd0aChTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKLSAgICBzdGF0
aWMgYm9vbCBnZW5lcmF0ZVNlbGZJbkFjY2VzcyhTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVjdHVy
ZSopOwotICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKFN0cnVjdHVyZVN0dWJJ
bmZvJik7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoQ29kZUJs
b2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCk7Cisg
ICAgc3RhdGljIGJvb2wgY2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvJiwgUHJvcGVydHlPZmZzZXQpOworICAgIHN0YXRpYyBib29sIGdl
bmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYs
IFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0NhY2hlYWJs
ZUFycmF5TGVuZ3RoKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSlNBcnJheSopOwor
ICAgIHN0YXRpYyBib29sIGlzQ2FjaGVhYmxlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvJik7CisgICAgc3RhdGljIGJvb2wgZ2VuZXJhdGVBcnJheUxlbmd0aChDb2Rl
QmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEpTQXJyYXkqKTsKKyAgICBzdGF0aWMgYm9vbCBn
ZW5lcmF0ZVNlbGZJbkFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFN0cnVj
dHVyZSopOworICAgIHN0YXRpYyBib29sIGdlbmVyYXRlU3RyaW5nTGVuZ3RoKENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvJik7CiAKICAgICBzdGF0aWMgdm9pZCByZXdpcmVTdHViQXNKdW1w
SW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2VzcyhDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPik7CiAgICAgc3RhdGlj
IHZvaWQgcmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJ
bmZvJiwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSXRlcmF0aW9uTW9kZU1l
dGFkYXRhLmgJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JdGVyYXRpb25Nb2RlTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAs
NyBAQCBPVkVSTE9BRF9CSVRXSVNFX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTCiAKIHN0cnVjdCBJ
dGVyYXRpb25Nb2RlTWV0YWRhdGEgewogICAgIHVpbnQ4X3Qgc2Vlbk1vZGVzIHsgMCB9OworICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTZWVuTW9kZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSXRlcmF0aW9uTW9kZU1ldGFkYXRhLCBzZWVuTW9kZXMpOyB9IAogICAgIHN0YXRpY19h
c3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHNlZW5Nb2RlcykpID09IHNpemVvZihJdGVyYXRpb25Nb2Rl
KSk7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxs
TGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
TExJbnRDYWxsTGlua0luZm8uaAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDYgKzg3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIEFycmF5UHJvZmlsZSBtX2FycmF5UHJv
ZmlsZTsKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKExMSW50Q2FsbExpbmtJbmZvLCBtX2FycmF5UHJvZmlsZSk7IH0K
IAogcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9jYWxsZWVPckxhc3RTZWVuQ2FsbGVlV2l0aExp
bmtCaXQgeyB1bmxpbmtlZEJpdCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGNvZGUuaAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDE3IEBAIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXgKICAgICBtYWNybyhPcEl0ZXJhdG9y
T3BlbikgXAogICAgIG1hY3JvKE9wSXRlcmF0b3JOZXh0KSBcCiAKKyNkZWZpbmUgRk9SX0VBQ0hf
T1BDT0RFX1dJVEhfQklOQVJZX0FSSVRIX1BST0ZJTEUobWFjcm8pIFwKKyAgICBtYWNybyhPcEFk
ZCkgXAorICAgIG1hY3JvKE9wTXVsKSBcCisgICAgbWFjcm8oT3BEaXYpIFwKKyAgICBtYWNybyhP
cFN1YikgXAorCisjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX1VOQVJZX0FSSVRIX1BST0ZJ
TEUobWFjcm8pIFwKKyAgICBtYWNybyhPcEluYykgXAorICAgIG1hY3JvKE9wRGVjKSBcCisgICAg
bWFjcm8oT3BOZWdhdGUpIFwKKwogCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInR5cGUtbGltaXRz
IikKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw3ICs3Myw3IEBAIHZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpzdWNjZWVkKCkKIHsKICAg
ICByZXN0b3JlU2NyYXRjaCgpOwogICAgIGlmIChqaXQtPmNvZGVCbG9jaygpLT51c2VEYXRhSUMo
KSkKLSAgICAgICAgaml0LT5yZXQoKTsKKyAgICAgICAgaml0LT5mYXJKdW1wKENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mRG9uZUxvY2F0aW9uKCkpLCBKU0ludGVybmFsUHRyVGFnKTsKICAgICBlbHNlCiAgICAg
ICAgIHN1Y2Nlc3MuYXBwZW5kKGppdC0+anVtcCgpKTsKIH0KQEAgLTExMCw2ICsxMTAsOCBAQCBj
b25zdCBSZWdpc3RlclNldCYgQWNjZXNzR2VuZXJhdGlvblN0YXRlCiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0LT5jb2RlQmxvY2soKS0+aml0
VHlwZSgpKSk7CiAKICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbCA9IFJlZ2lzdGVyU2V0
KG1fbGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUsIGFs
bG9jYXRvci0+dXNlZFJlZ2lzdGVycygpKTsKKyAgICAgICAgaWYgKGppdC0+Y29kZUJsb2NrKCkt
PnVzZURhdGFJQygpKQorICAgICAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5hZGQoc3R1
YkluZm8tPm1fc3R1YkluZm9HUFIpOwogICAgICAgICBtX2xpdmVSZWdpc3RlcnNGb3JDYWxsLmV4
Y2x1ZGUoY2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fbGl2ZVJl
Z2lzdGVyc0ZvckNhbGw7CkBAIC0xMjgsMTEgKzEzMCwxMiBAQCBhdXRvIEFjY2Vzc0dlbmVyYXRp
b25TdGF0ZTo6cHJlc2VydmVMaXZlCiAgICAgfTsKIH0KIAotYXV0byBBY2Nlc3NHZW5lcmF0aW9u
U3RhdGU6OnByZXNlcnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsV2l0aG91dEV4Y2VwdGlv
bnMoY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhKSAtPiBTcGlsbFN0YXRlCithdXRvIEFjY2Vzc0dl
bmVyYXRpb25TdGF0ZTo6cHJlc2VydmVMaXZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGxXaXRob3V0
RXhjZXB0aW9ucygpIC0+IFNwaWxsU3RhdGUKIHsKICAgICBSZWdpc3RlclNldCBsaXZlUmVnaXN0
ZXJzID0gYWxsb2NhdG9yLT51c2VkUmVnaXN0ZXJzKCk7CisgICAgaWYgKGppdC0+Y29kZUJsb2Nr
KCktPnVzZURhdGFJQygpKQorICAgICAgICBsaXZlUmVnaXN0ZXJzLmFkZChzdHViSW5mby0+bV9z
dHViSW5mb0dQUik7CiAgICAgbGl2ZVJlZ2lzdGVycy5leGNsdWRlKGNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSk7Ci0gICAgbGl2ZVJlZ2lzdGVycy5tZXJnZShleHRyYSk7CiAKICAgICBjb25zdGV4cHIg
dW5zaWduZWQgZXh0cmFTdGFja1BhZGRpbmcgPSAwOwogICAgIHVuc2lnbmVkIG51bWJlck9mU3Rh
Y2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbiA9IFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbCgqaml0LCBsaXZlUmVnaXN0ZXJz
LCBleHRyYVN0YWNrUGFkZGluZyk7CkBAIC01OTYsMTYgKzU5OSwxMSBAQCBBY2Nlc3NHZW5lcmF0
aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzCiAgICAgQ0NhbGxIZWxwZXJzIGppdChjb2RlQmxv
Y2spOwogICAgIHN0YXRlLmppdCA9ICZqaXQ7CiAKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRh
SUMoKSkgewotICAgICAgICBpZiAoc3RhdGUubV9kb2VzSlNHZXR0ZXJTZXR0ZXJDYWxscykgewot
ICAgICAgICAgICAgLy8gV2UgaGF2ZSBubyBndWFyYW50ZWUgdGhhdCBzdGFjay1wb2ludGVyIGlz
IHRoZSBleHBlY3RlZCBvbmUuIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBpZiB3ZSBkbyBub3QgaGF2
ZSBKUyBnZXR0ZXIgLyBzZXR0ZXIgY2FsbHMgc2luY2Ugc3RhY2stcG9pbnRlciBpcwotICAgICAg
ICAgICAgLy8gYSBjYWxsZWUtc2F2ZSByZWdpc3RlciBpbiB0aGUgQyBjYWxsaW5nIGNvbnZlbnNp
b24uIEhvd2V2ZXIsIG91ciBKUyBleGVjdXRhYmxlIGNhbGwgZG9lcyBub3Qgc2F2ZSBzdGFjay1w
b2ludGVyLiBTbyB3ZSBhcmUgYWRqdXN0aW5nIHN0YWNrLXBvaW50ZXIgYWZ0ZXIKLSAgICAgICAg
ICAgIC8vIEpTIGdldHRlciAvIHNldHRlciBjYWxscy4gQnV0IHRoaXMgY291bGQgYmUgZGlmZmVy
ZW50IGZyb20gdGhlIGluaXRpYWwgc3RhY2stcG9pbnRlciwgYW5kIG1ha2VzIFBBQyB0YWdnaW5n
IGJyb2tlbi4KLSAgICAgICAgICAgIC8vIFRvIGVuc3VyZSBQQUMtdGFnZ2luZyB3b3JrLCB3ZSBm
aXJzdCBhZGp1c3Qgc3RhY2stcG9pbnRlciB0byB0aGUgYXBwcm9wcmlhdGUgb25lLgotICAgICAg
ICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPnN0
YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAg
ICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
aml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBpZiAoIWNhbkJlU2hhcmVkICYmIEFTU0VSVF9F
TkFCTEVEKSB7CisgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
Y29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAg
YXV0byBvayA9IGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgQ0NhbGxIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgaml0LnNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAg
aml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgb2subGluaygmaml0KTsKICAgICB9CiAKICAgICBz
dGF0ZS5wcmVzZXJ2ZWRSZXVzZWRSZWdpc3RlclN0YXRlID0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAy
ODMxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nl
c3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIHN0cnVjdCBBY2Nlc3NHZW5l
cmF0aW9uU3RhdGUgewogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjYWxjdWxhdGVMaXZlUmVnaXN0
ZXJzRm9yQ2FsbEFuZEV4Y2VwdGlvbkhhbmRsaW5nKCk7CiAKICAgICBTcGlsbFN0YXRlIHByZXNl
cnZlTGl2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9
IHsgfSk7Ci0gICAgU3BpbGxTdGF0ZSBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2Fs
bFdpdGhvdXRFeGNlcHRpb25zKGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYSA9IHsgfSk7CisgICAg
U3BpbGxTdGF0ZSBwcmVzZXJ2ZUxpdmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbFdpdGhvdXRFeGNl
cHRpb25zKCk7CiAKICAgICB2b2lkIHJlc3RvcmVMaXZlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2Fs
bFdpdGhUaHJvd25FeGNlcHRpb24oY29uc3QgU3BpbGxTdGF0ZSYpOwogICAgIHZvaWQgcmVzdG9y
ZUxpdmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKGNvbnN0IFNwaWxsU3RhdGUmLCBjb25zdCBS
ZWdpc3RlclNldCYgZG9udFJlc3RvcmUgPSB7IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCShyZXZpc2lvbiAyODMxMzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlTdGF0dXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODAsMTAgKzE4MCwxMCBAQCBQdXRCeVN0YXR1cyBQdXRCeVN0YXR1czo6Y29tcHV0
ZUZvclN0dWJJCiAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciA9IHN0dWJJ
bmZvLT5pZGVudGlmaWVyKCk7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBpZGVu
dGlmaWVyLnVpZCgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCh1aWQpOwotICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPQotICAgICAgICAgICAgc3R1YkluZm8tPm1faW5saW5lQWNjZXNz
QmFzZVN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CisgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gc3R1YkluZm8tPmlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUocHJvZmlsZWRC
bG9jay0+dm0oKSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
Ci0gICAgICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRlbnRp
ZmllciksIHN0dWJJbmZvLT5tX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNl
dCk7CisgICAgICAgICAgICByZXR1cm4gUHV0QnlWYXJpYW50OjpyZXBsYWNlKFdURk1vdmUoaWRl
bnRpZmllciksIHN0cnVjdHVyZSwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIFB1dEJ5U3RhdHVz
KEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CiAgICAgfQogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAKICNpbmNsdWRlICJDYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJSZXBhdGNo
LmgiCiAKQEAgLTY1LDkgKzY2LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEdldEJ5
SWRTZWxmKAogICAgIEFTU0VSVChoYXNDb25zdGFudElkZW50aWZpZXIpOwogICAgIHNldENhY2hl
VHlwZShsb2NrZXIsIENhY2hlVHlwZTo6R2V0QnlJZFNlbGYpOwogICAgIG1faWRlbnRpZmllciA9
IGlkZW50aWZpZXI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSk7CisgICAgbV9pbmxpbmVBY2Nl
c3NCYXNlU3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS0+aWQoKTsKICAgICBj
b2RlQmxvY2stPnZtKCkuaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICB1LmJ5SWRT
ZWxmLm9mZnNldCA9IG9mZnNldDsKKyAgICBieUlkU2VsZk9mZnNldCA9IG9mZnNldDsKIH0KIAog
dm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEFycmF5TGVuZ3RoKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlckJhc2UmIGxvY2tlcikKQEAgLTg3LDkgKzg4LDkgQEAgdm9pZCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6aW5pdFB1dEJ5SWRSZXBsYQogICAgIEFTU0VSVChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5
cGU6OlVuc2V0KTsKICAgICBzZXRDYWNoZVR5cGUobG9ja2VyLCBDYWNoZVR5cGU6OlB1dEJ5SWRS
ZXBsYWNlKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG1faW5saW5lQWNj
ZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vz
c0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJsb2NrLT52bSgpLmhlYXAud3JpdGVCYXJy
aWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5vZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJ
ZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJ
bkJ5SWRTZWxmKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlckJhc2UmIGxvY2tlciwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogaW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0LCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC05Nyw5
ICs5OCw5IEBAIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OmluaXRJbkJ5SWRTZWxmKGMKICAgICBB
U1NFUlQobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCk7CiAgICAgc2V0Q2FjaGVUeXBl
KGxvY2tlciwgQ2FjaGVUeXBlOjpJbkJ5SWRTZWxmKTsKICAgICBtX2lkZW50aWZpZXIgPSBpZGVu
dGlmaWVyOwotICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIG1faW5saW5lQWNjZXNzQmFz
ZVN0cnVjdHVyZSA9IGlubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUtPmlkKCk7CiAgICAgY29kZUJs
b2NrLT52bSgpLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgdS5ieUlkU2VsZi5v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgYnlJZFNlbGZPZmZzZXQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQg
U3RydWN0dXJlU3R1YkluZm86OmRlcmVmKCkKQEAgLTIzNiw3ICsyMzcsNyBAQCBBY2Nlc3NHZW5l
cmF0aW9uUmVzdWx0IFN0cnVjdHVyZVN0dWJJbmZvCiAgICAgICAgIC8vIHdlJ3JlIGJ1ZmZlcmVk
IGlzIGJlY2F1c2Ugd2UgcmVseSBvbiBpdCB0byByZXNldCBkdXJpbmcgR0MgaWYgbV9pbmxpbmVB
Y2Nlc3NCYXNlU3RydWN0dXJlCiAgICAgICAgIC8vIGlzIGNvbGxlY3RlZC4KICAgICAgICAgbV9p
ZGVudGlmaWVyID0gbnVsbHB0cjsKLSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
LmNsZWFyKCk7CisgICAgICAgIG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSA9IDA7CiAgICAg
ICAgIAogICAgICAgICAvLyBJZiB3ZSBnZW5lcmF0ZWQgc29tZSBjb2RlIHRoZW4gd2UgZG9uJ3Qg
d2FudCB0byBhdHRlbXB0IHRvIHJlcGF0Y2ggaW4gdGhlIGZ1dHVyZSB1bnRpbCB3ZQogICAgICAg
ICAvLyBnYXRoZXIgZW5vdWdoIGNhc2VzLgpAQCAtMjUxLDcgKzI1Miw3IEBAIHZvaWQgU3RydWN0
dXJlU3R1YkluZm86OnJlc2V0KGNvbnN0IENvbmMKIHsKICAgICBjbGVhckJ1ZmZlcmVkU3RydWN0
dXJlcygpOwogICAgIG1faWRlbnRpZmllciA9IG51bGxwdHI7Ci0gICAgbV9pbmxpbmVBY2Nlc3NC
YXNlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlID0g
MDsKIAogICAgIGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0KQogICAgICAgICBy
ZXR1cm47CkBAIC0yODUsNiArMjg2LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6cmVzZXQo
Y29uc3QgQ29uYwogICAgICAgICByZXNldFB1dEJ5KGNvZGVCbG9jaywgKnRoaXMsIFB1dEJ5S2lu
ZDo6QnlJZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlWYWw6
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKICAgICAgICAgcmVzZXRQdXRC
eShjb2RlQmxvY2ssICp0aGlzLCBQdXRCeUtpbmQ6OkJ5VmFsKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5SWQ6CkBAIC0zNjAsOCArMzYyLDggQEAgdm9pZCBTdHJ1
Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgIH0KIAogICAgIGJvb2wgaXNWYWxp
ZCA9IHRydWU7Ci0gICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkKLSAgICAgICAg
aXNWYWxpZCAmPSB2bS5oZWFwLmlzTWFya2VkKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZS5n
ZXQoKSk7CisgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZSh2bSkpCisgICAgICAgIGlzVmFsaWQgJj0gdm0uaGVhcC5pc01hcmtlZChzdHJ1Y3R1
cmUpOwogICAgIGlmIChtX2NhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlN0dWIpCiAgICAgICAgIGlz
VmFsaWQgJj0gdS5zdHViLT52aXNpdFdlYWsodm0pOwogCkBAIC0zNzUsOCArMzc3LDggQEAgdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogdGVtcGxhdGU8dHlwZW5hbWUg
VmlzaXRvcj4KIHZvaWQgU3RydWN0dXJlU3R1YkluZm86OnByb3BhZ2F0ZVRyYW5zaXRpb25zKFZp
c2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgaWYgKG1faW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSkK
LSAgICAgICAgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLT5tYXJrSWZDaGVhcCh2aXNpdG9y
KTsKKyAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbmxpbmVBY2Nlc3NCYXNlU3RydWN0
dXJlKHZpc2l0b3Iudm0oKSkpCisgICAgICAgIHN0cnVjdHVyZS0+bWFya0lmQ2hlYXAodmlzaXRv
cik7CiAKICAgICBpZiAobV9jYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpTdHViKQogICAgICAgICB1
LnN0dWItPnByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0b3IpOwpAQCAtNDMwLDYgKzQzMiwyMDkg
QEAgQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpzZQogICAgIG1fY2FjaGVU
eXBlID0gbmV3Q2FjaGVUeXBlOwogfQogCit2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFs
aXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saW5rZWRTdHJ1
Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIGFjY2Vzc1R5cGUgPSB1bmxpbmtlZFN0dWJJbmZvLmFjY2Vzc1R5cGU7CisgICAgc3RhcnQg
PSB1bmxpbmtlZFN0dWJJbmZvLnN0YXJ0OworICAgIGRvbmVMb2NhdGlvbiA9IHVubGlua2VkU3R1
YkluZm8uZG9uZUxvY2F0aW9uOworICAgIHNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IHVubGlua2Vk
U3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uOworICAgIGNhbGxTaXRlSW5kZXggPSBDYWxs
U2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgodW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4Lm9m
ZnNldCgpKSk7CisgICAgY29kZU9yaWdpbiA9IENvZGVPcmlnaW4odW5saW5rZWRTdHViSW5mby5i
eXRlY29kZUluZGV4KTsKKyAgICBtX2NvZGVQdHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CisK
KyAgICB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpOworICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5cGU6OkdldEJ5SWQgJiYgdW5saW5r
ZWRTdHViSW5mby5ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgeworICAgICAgICAvLyBGb3Ig
aXRlcmF0b3JfbmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0aGUgImRvbnRDbG9iYmVyUmVnaXN0ZXIi
IHJlZ2lzdGVyIGVpdGhlci4KKyAgICAgICAgdXNlZFJlZ2lzdGVycy5hZGQoQmFzZWxpbmVHZXRC
eUlkUmVnaXN0ZXJzOjpkb250Q2xvYmJlclJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBzd2l0Y2gg
KGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsOgorICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25EZWxldGVCeVZhbE9wdGltaXplOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ6CisgICAgICAgIG1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9u
ID0gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
Y2Nlc3NUeXBlOjpJbnN0YW5jZU9mOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25JbnN0YW5jZU9mT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlw
ZTo6SW5CeVZhbDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeVZhbE9w
dGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAg
ICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlkT3B0aW1pemU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6R2V0QnlJZDoKKyAgICAgICAgbV9zbG93T3Bl
cmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQ6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9w
ZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkRGlyZWN0OgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25HZXRCeUlkRGlyZWN0T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0QnlJZFdpdGhUaGlzOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlTmFtZTogCisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJh
dGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNj
ZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kOiAKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5hbWU6IAorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFjY2Vzc1R5cGU6OlB1dEJ5SWQ6CisgICAgICAgIHN3aXRjaCAodW5saW5rZWRTdHViSW5mby5w
dXRLaW5kKSB7CisgICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgorICAgICAgICAgICAg
aWYgKHVubGlua2VkU3R1YkluZm8uZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAg
ICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUHV0S2luZDo6RGlyZWN0OgorICAgICAgICAgICAgaWYgKHVubGlua2VkU3R1YkluZm8uZWNt
YU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6
RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0g
b3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0
OgorICAgICAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZh
dGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDoKKyAgICAgICAgc3dp
dGNoICh1bmxpbmtlZFN0dWJJbmZvLnB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpO
b3REaXJlY3Q6CisgICAgICAgICAgICBpZiAodW5saW5rZWRTdHViSW5mby5lY21hTW9kZS5pc1N0
cmljdCgpKQorICAgICAgICAgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5
VmFsU3RyaWN0T3B0aW1pemU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9z
bG93T3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAg
IGlmICh1bmxpbmtlZFN0dWJJbmZvLmVjbWFNb2RlLmlzU3RyaWN0KCkpCisgICAgICAgICAgICAg
ICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRpbWl6
ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9wdGltaXplOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
UHV0UHJpdmF0ZU5hbWU6CisgICAgICAgIG1fc2xvd09wZXJhdGlvbiA9IHVubGlua2VkU3R1Yklu
Zm8ucHJpdmF0ZUZpZWxkUHV0S2luZC5pc0RlZmluZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxEZWZp
bmVQcml2YXRlRmllbGRPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxk
T3B0aW1pemU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0
ZUJyYW5kOgorICAgICAgICBtX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJh
bmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpDaGVja1By
aXZhdGVCcmFuZDoKKyAgICAgICAgbV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uQ2hlY2tQcml2
YXRlQnJhbmRPcHRpbWl6ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChh
Y2Nlc3NUeXBlKSB7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDoKKyAgICAgICAg
aGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGlu
ZURlbEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFz
ZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFz
ZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQWNjZXNzVHlwZTo6RGVsZXRlQnlJRDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlm
aWVyID0gdHJ1ZTsKKyAgICAgICAgYmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6
YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAg
IHZhbHVlR1BSID0gQmFzZWxpbmVEZWxCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1f
c3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OkdldEJ5VmFsOgorICAgIGNhc2UgQWNjZXNz
VHlwZTo6R2V0UHJpdmF0ZU5hbWU6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZh
bHNlOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsK
KyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJl
c3VsdDsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okluc3RhbmNl
T2Y6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZhbHNlOworICAgICAgICBwcm90
b3R5cGVJc0tub3duT2JqZWN0ID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICByZWdzLnByb3RvdHlwZUdQUiA9IEJh
c2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG87CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQ
cml2YXRlTmFtZTogCisgICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6IAorICAg
ICAgICBoYXNDb25zdGFudElkZW50aWZpZXIgPSBmYWxzZTsKKyAgICAgICAgYmFzZUdQUiA9IEJh
c2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5wcm9wZXJ0eUdQUiA9
IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0g
QmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9HUFIg
PSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkluQnlJZDoKKyAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVy
ID0gdHJ1ZTsKKyAgICAgICAgcmVncy50aGlzR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAg
YmFzZUdQUiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICB2YWx1ZUdQ
UiA9IEJhc2VsaW5lSW5CeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgICAgIG1fc3R1YkluZm9H
UFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKKyAgICBjYXNlIEFjY2Vzc1R5cGU6Okdl
dEJ5SWREaXJlY3Q6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkOgorICAgICAgICBoYXND
b25zdGFudElkZW50aWZpZXIgPSB0cnVlOworICAgICAgICByZWdzLnRoaXNHUFIgPSBJbnZhbGlk
R1BSUmVnOworICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNl
OworICAgICAgICB2YWx1ZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0Owor
ICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5m
bzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXM6
CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgdmFsdWVH
UFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBy
ZWdzLnRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVl
OworICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OnN0dWJJbmZvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5
SWQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IHRydWU7CisgICAgICAgIHJlZ3Mu
dGhpc0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5
SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVn
aXN0ZXJzOjp2YWx1ZTsKKyAgICAgICAgbV9zdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlJZFJl
Z2lzdGVyczo6c3R1YkluZm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzVHlwZTo6
UHV0QnlWYWw6CisgICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFtZToKKyAgICAgICAg
aGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CisgICAgICAgIGJhc2VHUFIgPSBCYXNlbGlu
ZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgICAgICByZWdzLnByb3BlcnR5R1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgICAgIHZhbHVlR1BSID0gQmFz
ZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6dmFsdWU7CisgICAgICAgIG1fc3R1YkluZm9HUFIgPSBC
YXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICAgICAgaWYgKGFjY2Vzc1R5
cGUgPT0gQWNjZXNzVHlwZTo6UHV0QnlWYWwpCisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZUdQ
UiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kOgorICAgIGNhc2UgQWNjZXNzVHlw
ZTo6Q2hlY2tQcml2YXRlQnJhbmQ6CisgICAgICAgIGhhc0NvbnN0YW50SWRlbnRpZmllciA9IGZh
bHNlOworICAgICAgICB2YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGJhc2VHUFIg
PSBCYXNlbGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YmFzZTsKKyAgICAgICAgcmVncy5icmFu
ZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICAgICAgbV9z
dHViSW5mb0dQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odW5saW5rZWRTdHVi
SW5mbyk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwogI2lmIEFTU0VS
VF9FTkFCTEVECiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpjaGVja0NvbnNpc3RlbmN5KCkKIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIu
aCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUg
IlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0
dXJlU2V0LmgiCkBAIC01Niw2ICs1Nyw3IEBAIGVudW0gY2xhc3MgQWNjZXNzVHlwZSA6IGludDhf
dCB7CiAgICAgR2V0QnlWYWwsCiAgICAgUHV0QnlJZCwKICAgICBQdXRCeVZhbCwKKyAgICBQdXRQ
cml2YXRlTmFtZSwKICAgICBJbkJ5SWQsCiAgICAgSW5CeVZhbCwKICAgICBIYXNQcml2YXRlTmFt
ZSwKQEAgLTc4LDYgKzgwLDggQEAgZW51bSBjbGFzcyBDYWNoZVR5cGUgOiBpbnQ4X3QgewogICAg
IFN0cmluZ0xlbmd0aAogfTsKIAorc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CisK
IGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1
Y3R1cmVTdHViSW5mbyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC05OCw2ICsx
MDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZigpOwogICAgIHZvaWQgYWJvdXRUb0RpZSgp
OwogCisgICAgdm9pZCBpbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29k
ZUJsb2NrKiwgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworCiAgICAgREVDTEFSRV9WSVNJ
VF9BR0dSRUdBVEU7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgc3R1YiBoYXMgd2VhayByZWZlcmVu
Y2VzIHRoYXQgYXJlIGRlYWQuIElmIGl0IGRvZXMsIHRoZW4gaXQgcmVzZXRzIGl0c2VsZiwKQEAg
LTMyNSwxMyArMzMxLDE5IEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW47CisgICAgUHJvcGVydHlPZmZzZXQgYnlJZFNlbGZPZmZzZXQ7CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkJ5SWRTZWxmT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFN0cnVjdHVyZVN0dWJJbmZvLCBieUlkU2VsZk9mZnNldCk7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mSW5saW5lQWNjZXNzQmFzZVN0cnVjdHVyZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihTdHJ1Y3R1cmVTdHViSW5mbywgbV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJl
KTsgfQogICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldDsKLSAgICAgICAgfSBieUlkU2VsZjsKICAgICAgICAgUG9seW1vcnBoaWNB
Y2Nlc3MqIHN0dWI7CiAgICAgfSB1OwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1faW5s
aW5lQWNjZXNzQmFzZVN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIGlubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2lubGluZUFjY2Vzc0Jhc2VT
dHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHZt
LmdldFN0cnVjdHVyZShtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUpOworICAgIH0KKyAgICBT
dHJ1Y3R1cmVJRCBtX2lubGluZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUgeyAwIH07CiBwcml2YXRlOgog
ICAgIENhY2hlYWJsZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIC8vIFJlcHJlc2VudHMg
dGhvc2Ugc3RydWN0dXJlcyB0aGF0IGFscmVhZHkgaGF2ZSBidWZmZXJlZCBBY2Nlc3NDYXNlcyBp
biB0aGUgUG9seW1vcnBoaWNBY2Nlc3MuCkBAIC0zNTIsNiArMzY0LDcgQEAgcHVibGljOgogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRTdHViUm91dGluZVB0clRhZz4gbV9jb2RlUHRyOwog
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNvZGVQdHIoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlU3R1YkluZm8sIG1fY29kZVB0cik7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mRG9uZUxvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
cnVjdHVyZVN0dWJJbmZvLCBkb25lTG9jYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlNsb3dQYXRoU3RhcnRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihT
dHJ1Y3R1cmVTdHViSW5mbywgc2xvd1BhdGhTdGFydExvY2F0aW9uKTsgfQogICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFN0cnVjdHVyZVN0dWJJbmZvLCBtX3Nsb3dPcGVyYXRpb24pOyB9CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkNvdW50ZG93bigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1
cmVTdHViSW5mbywgY291bnRkb3duKTsgfQpAQCAtNDQ3LDYgKzQ2MCwxNyBAQCBpbmxpbmUgYXV0
byBhcHByb3ByaWF0ZUdlbmVyaWNHZXRCeUlkRnVuCiAgICAgfQogfQogCitzdHJ1Y3QgVW5saW5r
ZWRTdHJ1Y3R1cmVTdHViSW5mbyB7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgIFB1
dEtpbmQgcHV0S2luZDsKKyAgICBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtp
bmQgeyBQcml2YXRlRmllbGRQdXRLaW5kOjpub25lKCkgfTsKKyAgICBFQ01BTW9kZSBlY21hTW9k
ZSB7IEVDTUFNb2RlOjpzbG9wcHkoKSB9OworICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRl
eDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQ7IC8v
IFRoaXMgaXMgZWl0aGVyIHRoZSBzdGFydCBvZiB0aGUgaW5saW5lIElDIGZvciAqYnlJZCBjYWNo
ZXMuIG9yIHRoZSBsb2NhdGlvbiBvZiBwYXRjaGFibGUganVtcCBmb3IgJ2luc3RhbmNlb2YnIGNh
Y2hlcy4KKyAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFnPiBkb25lTG9jYXRp
b247CisgICAgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHNsb3dQYXRo
U3RhcnRMb2NhdGlvbjsKK307CisKICNlbHNlCiAKIGNsYXNzIFN0cnVjdHVyZVN0dWJJbmZvOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N1cGVyU2FtcGxlci5j
cHAJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dXBlclNhbXBsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgcHJp
bnRTdXBlclNhbXBsZXJTdGF0ZSgpCiAgICAgZG91YmxlIHBlcmNlbnRhZ2UgPSAxMDAuMCAqIGlu
IC8gKGluICsgb3V0KTsKICAgICBpZiAocGVyY2VudGFnZSAhPSBwZXJjZW50YWdlKQogICAgICAg
ICBwZXJjZW50YWdlID0gMC4wOwotICAgIGRhdGFMb2coIlBlcmNlbnQgdGltZSBiZWhpbmQgc3Vw
ZXIgc2FtcGxlciBmbGFnOiAiLCBwZXJjZW50YWdlLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJQZXJj
ZW50IHRpbWUgYmVoaW5kIHN1cGVyIHNhbXBsZXIgZmxhZzogIiwgcGVyY2VudGFnZSwgIiVcbiIp
OwogfQogCiB2b2lkIGVuYWJsZVN1cGVyU2FtcGxlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlVu
bGlua2VkQ29kZUJsb2NrLmgiCiAKKyNpbmNsdWRlICJCYXNlbGluZUpJVENvZGUuaCIKICNpbmNs
dWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVj
dHMuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKQEAgLTc4LDYgKzc5LDggQEAgVW5saW5rZWRD
b2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNJgogICAgICAgICBjcmVhdGVSYXJlRGF0YUlm
TmVjZXNzYXJ5KGxvY2tlcik7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fcHJpdmF0ZUJyYW5kUmVx
dWlyZW1lbnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQ6
Ok5lZWRlZCk7CiAgICAgfQorCisgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVz
aG9sZCh0aHJlc2hvbGRGb3JKSVQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAo
KSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgpAQCAtMzE2LDYgKzMxOSw0OCBA
QCBpbnQgVW5saW5rZWRDb2RlQmxvY2s6Om91dE9mTGluZUp1bXBPZmZzCiAgICAgcmV0dXJuIG1f
b3V0T2ZMaW5lSnVtcFRhcmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAorI2lmIEFTU0VS
VF9FTkFCTEVECitib29sIFVubGlua2VkQ29kZUJsb2NrOjpoYXNJZGVudGlmaWVyKFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpCit7CisgICAgaWYgKG51bWJlck9mSWRlbnRpZmllcnMoKSA+IDEwMCkg
eworICAgICAgICBpZiAobnVtYmVyT2ZJZGVudGlmaWVycygpICE9IG1fY2FjaGVkSWRlbnRpZmll
clVpZHMuc2l6ZSgpKSB7CisgICAgICAgICAgICBMb2NrZXIgbG9ja2VyKG1fY2FjaGVkSWRlbnRp
ZmllclVpZHNMb2NrKTsKKyAgICAgICAgICAgIEhhc2hTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBj
YWNoZWRJZGVudGlmaWVyVWlkczsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50aWZpZXIgPSB0aGlzLT5pZGVudGlmaWVyKGkpOworICAgICAgICAgICAg
ICAgIGNhY2hlZElkZW50aWZpZXJVaWRzLmFkZChpZGVudGlmaWVyLmltcGwoKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAg
ICBtX2NhY2hlZElkZW50aWZpZXJVaWRzID0gV1RGTW92ZShjYWNoZWRJZGVudGlmaWVyVWlkcyk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9jYWNoZWRJZGVudGlmaWVyVWlkcy5jb250
YWlucyh1aWQpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJP
ZklkZW50aWZpZXJzKCk7ICsraSkgeworICAgICAgICBpZiAoaWRlbnRpZmllcihpKS5pbXBsKCkg
PT0gdWlkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKyNlbmRpZgorCitpbnQzMl90IFVubGlua2VkQ29kZUJsb2NrOjp0aHJlc2hvbGRGb3JK
SVQoaW50MzJfdCB0aHJlc2hvbGQpCit7CisgICAgc3dpdGNoIChkaWRPcHRpbWl6ZSgpKSB7Cisg
ICAgY2FzZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9s
ZDsKKyAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAq
IDQ7CisgICAgY2FzZSBUcmlTdGF0ZTo6VHJ1ZToKKyAgICAgICAgcmV0dXJuIHRocmVzaG9sZCAv
IDI7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0aHJlc2hv
bGQ7Cit9CisKKwogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFyZWRQcm9maWxl
cygpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fbWV0YWRhdGEtPmlzRmluYWxpemVkKCkpOwpA
QCAtMzM3LDE1ICszODIsMjUgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWxsb2NhdGVTaGFy
ZWRQcgogICAgIGlmIChtX21ldGFkYXRhLT5oYXNNZXRhZGF0YSgpKSB7CiAgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mQXJyYXlQcm9maWxlcyA9IDA7CiAKLSNkZWZpbmUgQ09VTlQoX19vcCkgXAot
ICAgICAgICBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxf
X29wPigpOworI2RlZmluZSBDT1VOVChfX29wKSBudW1iZXJPZkFycmF5UHJvZmlsZXMgKz0gbV9t
ZXRhZGF0YS0+bnVtRW50cmllczxfX29wPigpOwogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lU
SF9BUlJBWV9QUk9GSUxFKENPVU5UKQogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9MTElO
VF9DQUxMX0xJTktfSU5GTyhDT1VOVCkKICN1bmRlZiBDT1VOVAogICAgICAgICBudW1iZXJPZkFy
cmF5UHJvZmlsZXMgKz0gbV9tZXRhZGF0YS0+bnVtRW50cmllczxPcEl0ZXJhdG9yTmV4dD4oKTsK
ICAgICAgICAgbnVtYmVyT2ZBcnJheVByb2ZpbGVzICs9IG1fbWV0YWRhdGEtPm51bUVudHJpZXM8
T3BHZXRCeUlkPigpOwotCiAgICAgICAgIG1fYXJyYXlQcm9maWxlcyA9IEZpeGVkVmVjdG9yPFVu
bGlua2VkQXJyYXlQcm9maWxlPihudW1iZXJPZkFycmF5UHJvZmlsZXMpOworCisgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mQmluYXJ5QXJpdGhQcm9maWxlcyA9IDA7CisjZGVmaW5lIENPVU5UKF9f
b3ApIG51bWJlck9mQmluYXJ5QXJpdGhQcm9maWxlcyArPSBtX21ldGFkYXRhLT5udW1FbnRyaWVz
PF9fb3A+KCk7CisgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0JJTkFSWV9BUklUSF9QUk9G
SUxFKENPVU5UKQorI3VuZGVmIENPVU5UCisgICAgICAgIG1fYmluYXJ5QXJpdGhQcm9maWxlcyA9
IEZpeGVkVmVjdG9yPEJpbmFyeUFyaXRoUHJvZmlsZT4obnVtYmVyT2ZCaW5hcnlBcml0aFByb2Zp
bGVzKTsKKworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlVuYXJ5QXJpdGhQcm9maWxlcyA9IDA7
CisjZGVmaW5lIENPVU5UKF9fb3ApIG51bWJlck9mVW5hcnlBcml0aFByb2ZpbGVzICs9IG1fbWV0
YWRhdGEtPm51bUVudHJpZXM8X19vcD4oKTsKKyAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhf
VU5BUllfQVJJVEhfUFJPRklMRShDT1VOVCkKKyN1bmRlZiBDT1VOVAorICAgICAgICBtX3VuYXJ5
QXJpdGhQcm9maWxlcyA9IEZpeGVkVmVjdG9yPFVuYXJ5QXJpdGhQcm9maWxlPihudW1iZXJPZlVu
YXJ5QXJpdGhQcm9maWxlcyk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjgzMTMx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1
ZGUgIkRGR0V4aXRQcm9maWxlLmgiCisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2lu
Y2x1ZGUgIkV4cHJlc3Npb25SYW5nZUluZm8uaCIKICNpbmNsdWRlICJIYW5kbGVySW5mby5oIgog
I2luY2x1ZGUgIklkZW50aWZpZXIuaCIKQEAgLTY0LDYgKzY2LDcgQEAgY2xhc3MgVW5saW5rZWRD
b2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNsYXNzIFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsK
K2NsYXNzIEJhc2VsaW5lSklUQ29kZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKIGVudW0gY2xh
c3MgTGlua1RpbWVDb25zdGFudCA6IGludDMyX3Q7CiAKQEAgLTE3NSw2ICsxNzgsNyBAQCBwdWJs
aWM6CiAKICAgICBjb25zdCBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25z
dGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAgICBjb25z
dCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudElu
ZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29u
c3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3Jl
Zy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KICAgICBjb25zdCBGaXhlZFZlY3RvcjxTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
KSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCkBAIC0y
MDcsNiArMjExLDE1IEBAIHB1YmxpYzoKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2VyU2NyaXB0TW9kZT4obV9zY3Jp
cHRNb2RlKTsgfQogCiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygp
IGNvbnN0OworICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbkF0KEJ5dGVjb2RlSW5k
ZXggaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLmF0KGluZGV4KS5wdHIoKTsg
fQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbikKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9uc0JlZ2luID0gaW5z
dHJ1Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgICAgIGNvbnN0IGF1dG8qIGluc3RydWN0aW9u
c0VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oaW5zdHJ1Y3Rpb25zQmVnaW4pICsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24gPj0gaW5zdHJ1Y3Rpb25zQmVn
aW4gJiYgaW5zdHJ1Y3Rpb24gPCBpbnN0cnVjdGlvbnNFbmQpOworICAgICAgICByZXR1cm4gaW5z
dHJ1Y3Rpb24gLSBpbnN0cnVjdGlvbnNCZWdpbjsKKyAgICB9CisgICAgdW5zaWduZWQgaW5zdHJ1
Y3Rpb25zU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGluc3RydWN0aW9ucygpLnNpemUoKTsgfQogCiAg
ICAgdW5zaWduZWQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVM
b2NhbHM7IH0KICAgICB1bnNpZ25lZCBudW1WYXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1WYXJz
OyB9CkBAIC0zMzQsMTAgKzM0NywyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX21ldGFk
YXRhLT5zaXplSW5CeXRlcygpOwogICAgIH0KIAorICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2li
bGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQorICAgIHsKKyAgICAgICAgLy8gU29tZSBidWlsdGlu
cyBhcmUgcmVxdWlyZWQgdG8gYWx3YXlzIGNvbXBsZXRlIHRoZSBsb29wcyB0aGV5IHJ1bi4KKyAg
ICAgICAgcmV0dXJuICFpc0J1aWx0aW5GdW5jdGlvbigpOworICAgIH0KICAgICB2b2lkIGFsbG9j
YXRlU2hhcmVkUHJvZmlsZXMoKTsKICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSYgdW5saW5rZWRW
YWx1ZVByb2ZpbGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlc1tpbmRl
eF07IH0KICAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSYgdW5saW5rZWRBcnJheVByb2ZpbGUodW5z
aWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fYXJyYXlQcm9maWxlc1tpbmRleF07IH0KIAorI2lmIEFT
U0VSVF9FTkFCTEVECisgICAgYm9vbCBoYXNJZGVudGlmaWVyKFVuaXF1ZWRTdHJpbmdJbXBsKik7
CisjZW5kaWYKKworICAgIGludDMyX3QgdGhyZXNob2xkRm9ySklUKGludDMyX3QgdGhyZXNob2xk
KTsKKwogcHJvdGVjdGVkOgogICAgIFVubGlua2VkQ29kZUJsb2NrKFZNJiwgU3RydWN0dXJlKiwg
Q29kZVR5cGUsIGNvbnN0IEV4ZWN1dGFibGVJbmZvJiwgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9u
TW9kZT4pOwogCkBAIC0zOTcsNiArNDIxLDkgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xl
eGljYWxTY29wZUZlYXR1cmVzIDogNDsKIHB1YmxpYzoKICAgICBDb25jdXJyZW50SlNMb2NrIG1f
bG9jazsKKyNpZiBFTkFCTEUoSklUKQorICAgIFJlZlB0cjxCYXNlbGluZUpJVENvZGU+IG1fdW5s
aW5rZWRCYXNlbGluZUNvZGU7CisjZW5kaWYKIHByaXZhdGU6CiAgICAgQ29kZUZlYXR1cmVzIG1f
ZmVhdHVyZXMgeyAwIH07CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwpAQCAtNDEz
LDcgKzQ0MCw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3Ry
ZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCi0KICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6
OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CiAjZW5kaWYKQEAgLTQ1OCw2ICs0ODQsMTYgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1bXBPZmZzZXQoaW5zdHJ1
Y3Rpb24ub2Zmc2V0KCkpOwogICAgIH0KKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25z
dCBJbnN0cnVjdGlvbiogcGMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IHRoaXMtPmJ5dGVjb2RlT2Zmc2V0KHBjKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUp1
bXBPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOworICAgIH0KKworICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSYgYmluYXJ5QXJpdGhQcm9maWxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmluYXJ5QXJpdGhQ
cm9maWxlc1tpXTsgfQorICAgIFVuYXJ5QXJpdGhQcm9maWxlJiB1bmFyeUFyaXRoUHJvZmlsZSh1
bnNpZ25lZCBpKSB7IHJldHVybiBtX3VuYXJ5QXJpdGhQcm9maWxlc1tpXTsgfQorCisgICAgQmFz
ZWxpbmVFeGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gbV9s
bGludEV4ZWN1dGVDb3VudGVyOyB9CiAKIHByaXZhdGU6CiAgICAgdXNpbmcgT3V0T2ZMaW5lSnVt
cFRhcmdldHMgPSBIYXNoTWFwPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIGludD47CkBAIC00
NjUsOCArNTAxLDE2IEBAIHByaXZhdGU6CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRP
ZkxpbmVKdW1wVGFyZ2V0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURh
dGE7CiAgICAgRml4ZWRWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4gbV9leHByZXNzaW9uSW5m
bzsKKyAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4ZWN1dGVDb3VudGVyOwog
ICAgIEZpeGVkVmVjdG9yPFVubGlua2VkVmFsdWVQcm9maWxlPiBtX3ZhbHVlUHJvZmlsZXM7CiAg
ICAgRml4ZWRWZWN0b3I8VW5saW5rZWRBcnJheVByb2ZpbGU+IG1fYXJyYXlQcm9maWxlczsKKyAg
ICBGaXhlZFZlY3RvcjxCaW5hcnlBcml0aFByb2ZpbGU+IG1fYmluYXJ5QXJpdGhQcm9maWxlczsK
KyAgICBGaXhlZFZlY3RvcjxVbmFyeUFyaXRoUHJvZmlsZT4gbV91bmFyeUFyaXRoUHJvZmlsZXM7
CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIExvY2sgbV9jYWNoZWRJZGVudGlmaWVyVWlkc0xv
Y2s7CisgICAgSGFzaFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IG1fY2FjaGVkSWRlbnRpZmllclVp
ZHM7CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
TWV0YWRhdGFUYWJsZS5oCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDYgKzY0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVW5saW5r
ZWRNZXRhZGF0YVRhYmxlKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2Rl
PgorICAgIHVpbnRwdHJfdCBvZmZzZXRJbk1ldGFkYXRhVGFibGUoY29uc3QgT3Bjb2RlJiBvcGNv
ZGUpCisgICAgeworICAgICAgICBBU1NFUlQobV9pc0ZpbmFsaXplZCk7CisgICAgICAgIHVpbnRw
dHJfdCBiYXNlVHlwZU9mZnNldCA9IG1faXMzMkJpdCA/IG9mZnNldFRhYmxlMzIoKVtPcGNvZGU6
Om9wY29kZUlEXSA6IG9mZnNldFRhYmxlMTYoKVtPcGNvZGU6Om9wY29kZUlEXTsKKyAgICAgICAg
YmFzZVR5cGVPZmZzZXQgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdub2YodHlwZW5hbWUgT3Bj
b2RlOjpNZXRhZGF0YSksIGJhc2VUeXBlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGJhc2VUeXBl
T2Zmc2V0ICsgc2l6ZW9mKHR5cGVuYW1lIE9wY29kZTo6TWV0YWRhdGEpICogb3Bjb2RlLm1fbWV0
YWRhdGFJRDsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAg
dW5zaWduZWQgbnVtRW50cmllcygpOwogCkBAIC0xMDcsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIHNfb2Zmc2V0MTZUYWJsZVNpemU7CiAgICAgfQogCisKICAgICB1c2luZyBP
ZmZzZXQzMiA9IHVpbnQzMl90OwogICAgIHVzaW5nIE9mZnNldDE2ID0gdWludDE2X3Q7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJl
dmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVBy
b2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTMgKzQ1LDExIEBAIHN0cnVjdCBWYWx1ZVBy
b2ZpbGVCYXNlIHsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZCdWNr
ZXRzID0gbnVtYmVyT2ZCdWNrZXRzQXJndW1lbnQ7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBudW1iZXJPZlNwZWNGYWlsQnVja2V0cyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBidWNrZXRJbmRleE1hc2sgPSBudW1iZXJPZkJ1Y2tldHMgLSAxOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgdG90YWxOdW1iZXJPZkJ1Y2tldHMgPSBudW1iZXJPZkJ1Y2tl
dHMgKyBudW1iZXJPZlNwZWNGYWlsQnVja2V0czsKICAgICAKICAgICBWYWx1ZVByb2ZpbGVCYXNl
KCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9m
QnVja2V0czsgKytpKQotICAgICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CisgICAgICAgIGNsZWFyQnVja2V0cygpOwogICAgIH0KICAgICAKICAgICBF
bmNvZGVkSlNWYWx1ZSogc3BlY0ZhaWxCdWNrZXQodW5zaWduZWQgaSkKQEAgLTU5LDYgKzU3LDEy
IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgQVNTRVJUKG51bWJlck9mQnVj
a2V0cyArIGkgPCB0b3RhbE51bWJlck9mQnVja2V0cyk7CiAgICAgICAgIHJldHVybiBtX2J1Y2tl
dHMgKyBudW1iZXJPZkJ1Y2tldHMgKyBpOwogICAgIH0KKworICAgIHZvaWQgY2xlYXJCdWNrZXRz
KCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9m
QnVja2V0czsgKytpKQorICAgICAgICAgICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CisgICAgfQogICAgIAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
KHVuc2lnbmVkIGJ1Y2tldCkgY29uc3QKICAgICB7CkBAIC0xMjMsOCArMTI3LDYgQEAgc3RydWN0
IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0
ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhp
cyBmcm9tIGFueSB0aHJlYWQKLSAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4K
ICAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
b3RhbE51bWJlck9mQnVja2V0czsgKytpKSB7CkBAIC0xMzksNyArMTQxLDcgQEAgc3RydWN0IFZh
bHVlUHJvZmlsZUJhc2UgewogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsK
ICAgICB9Ci0gICAgCisKICAgICBFbmNvZGVkSlNWYWx1ZSBtX2J1Y2tldHNbdG90YWxOdW1iZXJP
ZkJ1Y2tldHNdOwogCiAgICAgU3BlY3VsYXRlZFR5cGUgbV9wcmVkaWN0aW9uIHsgU3BlY05vbmUg
fTsKQEAgLTE2MSw2ICsxNjMsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlV2l0aExvZ051bWJlck9m
QnVja2V0CiAKIHN0cnVjdCBWYWx1ZVByb2ZpbGUgOiBwdWJsaWMgVmFsdWVQcm9maWxlV2l0aExv
Z051bWJlck9mQnVja2V0czwwPiB7CiAgICAgVmFsdWVQcm9maWxlKCkgOiBWYWx1ZVByb2ZpbGVX
aXRoTG9nTnVtYmVyT2ZCdWNrZXRzPDA+KCkgeyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkZpcnN0QnVja2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwg
bV9idWNrZXRzWzBdKTsgfQogfTsKIAogc3RydWN0IFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdp
c3RlciA6IHB1YmxpYyBWYWx1ZVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5o
IgogI2luY2x1ZGUgIkNvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUg
IkRGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUg
IkRGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIgpAQCAtMzQsNyArMzUsOSBAQAogI2lu
Y2x1ZGUgIkRGR0p1bXBSZXBsYWNlbWVudC5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAj
aW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCiAj
aW5jbHVkZSAiSlNDYXN0LmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNs
dWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiUmVjb3JkZWRTdGF0dXNlcy5o
IgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KQEAgLTcwLDcgKzczLDcgQEAgc3RydWN0IFdlYWtSZWZl
cmVuY2VUcmFuc2l0aW9uIHsKICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX3RvOwogfTsKICAg
ICAgICAgCi1jbGFzcyBDb21tb25EYXRhIHsKK2NsYXNzIENvbW1vbkRhdGEgOiBwdWJsaWMgTWF0
aElDSG9sZGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21tb25EYXRhKTsKIHB1Ymxp
YzoKICAgICBDb21tb25EYXRhKCkKQEAgLTExNiw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgRml4
ZWRWZWN0b3I8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PiBtX3dhdGNocG9pbnRzOwog
ICAgIEZpeGVkVmVjdG9yPEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gbV9hZGFwdGl2ZVN0
cnVjdHVyZVdhdGNocG9pbnRzOwogICAgIEZpeGVkVmVjdG9yPEFkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludD4gbV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnRzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQQ1RvQ29kZU9yaWdpbk1hcD4gbV9wY1RvQ29k
ZU9yaWdpbk1hcDsKICAgICBSZWNvcmRlZFN0YXR1c2VzIHJlY29yZGVkU3RhdHVzZXM7CiAgICAg
VmVjdG9yPEp1bXBSZXBsYWNlbWVudD4gbV9qdW1wUmVwbGFjZW1lbnRzOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAyODMxMzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRl
ICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKKyNpbmNsdWRlICJKdW1wVGFibGUuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGUuaAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOwogCitzdHJ1Y3QgU2ltcGxl
SnVtcFRhYmxlOworc3RydWN0IFN0cmluZ0p1bXBUYWJsZTsKKwogbmFtZXNwYWNlIERGRyB7CiAK
IGNsYXNzIEpJVENvbXBpbGVyOwpAQCAtMTAxLDYgKzEwNCw4IEBAIHB1YmxpYzoKICAgICBzdGQ6
Om9wdGlvbmFsPENvZGVPcmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgZmluYWw7
CiAKICAgICB1c2luZyBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZkZvckRGRzsKKwor
ICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29kZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0
dXJuIGNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwLmdldCgpOyB9CiAgICAgCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxsb3cgSklUQ29tcGlsZXIgdG8gY2Fs
bCBzZXRDb2RlUmVmKCkuCkBAIC0xMTAsNiArMTE1LDggQEAgcHVibGljOgogICAgIEZpeGVkVmVj
dG9yPERGRzo6T1NSRW50cnlEYXRhPiBtX29zckVudHJ5OwogICAgIEZpeGVkVmVjdG9yPERGRzo6
T1NSRXhpdD4gbV9vc3JFeGl0OwogICAgIEZpeGVkVmVjdG9yPERGRzo6U3BlY3VsYXRpb25SZWNv
dmVyeT4gbV9zcGVjdWxhdGlvblJlY292ZXJ5OworICAgIEZpeGVkVmVjdG9yPFNpbXBsZUp1bXBU
YWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAgIEZpeGVkVmVjdG9yPFN0cmluZ0p1bXBUYWJs
ZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwogICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVh
bSB2YXJpYWJsZUV2ZW50U3RyZWFtOwogICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5pZmllZERG
RzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsMTMgKzE4NSwxMiBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgCiAgICAgbV9ncmFwaC5yZWdp
c3RlckZyb3plblZhbHVlcygpOwogCi0gICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlcy5pc0VtcHR5KCkgfHwgIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHko
KSkgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xv
Y2spOwotICAgICAgICBpZiAoIW1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVt
cFRhYmxlcyk7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0
eSgpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N3
aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzKTsKLSAg
ICB9CisgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKG1faml0Q29kZS0+bV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHko
KSk7CisgICAgaWYgKCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkp
IAorICAgICAgICBtX2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUo
bV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAgIGlmICghbV9ncmFwaC5tX3N3
aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpKQorICAgICAgICBtX2ppdENvZGUtPm1fc3dpdGNoSnVt
cFRhYmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N3aXRjaEp1bXBUYWJsZXMpOwogCiAgICAgZm9y
IChCYWc8U3dpdGNoRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fc3dpdGNoRGF0YS5i
ZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewogICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKipp
dGVyOwpAQCAtMTk5LDEyICsxOTgsMTIgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVm
ZmVyJiBsaW5rQgogICAgICAgICBjYXNlIFN3aXRjaENoYXI6CiAgICAgICAgIGNhc2UgU3dpdGNo
SW1tOiB7CiAgICAgICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hU
YWJsZUluZGV4KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2ppdENvZGUt
Pm1fc3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRhYmxlSW5kZXhdLmlzRW1wdHkoKSk7CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNv
bnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICAgICAg
U2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFi
bGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBtX2ppdENvZGUtPm1fc3dpdGNoSnVtcFRhYmxlc1tkYXRhLnN3aXRjaFRh
YmxlSW5kZXhdOwogICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhy
b3VnaC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtlZFRh
YmxlLm1fY3RpT2Zmc2V0cy5zaXplKCkgPT0gdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMu
c2l6ZSgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGxpbmtlZFRhYmxlLm1fY3Rp
T2Zmc2V0cy5zaXplKCk7IGotLTspCkBAIC0yMTksMTIgKzIxOCwxMiBAQCB2b2lkIEpJVENvbXBp
bGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAKICAgICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6
IHsKICAgICAgICAgICAgIGlmICghZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRj
aFRhYmxlSW5kZXgpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faml0Q29k
ZS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF0uaXNFbXB0
eSgpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2dy
YXBoLnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7
Ci0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2st
PnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICAg
ICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1faml0Q29kZS0+bV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzW2RhdGEuc3dpdGNoVGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0
aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tI
ZWFkc1tkYXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0pOwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKSA9PSB1bmxpbmtlZFRhYmxl
Lm1fb2Zmc2V0VGFibGUuc2l6ZSgpICsgMSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogbGlua2VkVGFibGUubV9jdGlPZmZzZXRzKQpAQCAtMzMzLDcgKzMzMiw3IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICB9CiAKICAgICBpZiAobV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCi0gICAgICAgIG1fY29kZUJs
b2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihX
VEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgbGlua0J1ZmZlcikpOworICAgICAg
ICBtX2ppdENvZGUtPmNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1Rv
Q29kZU9yaWdpbk1hcD4oV1RGTW92ZShtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlciksIGxpbmtC
dWZmZXIpOwogfQogCiBzdGF0aWMgdm9pZCBlbWl0U3RhY2tPdmVyZmxvd0NoZWNrKEpJVENvbXBp
bGVyJiBqaXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYgc3RhY2tPdmVyZmxvdykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAyODMx
MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTcsNyArOTcsNiBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoVk0mIHZtLCBD
YWxsRnJhbWUqCiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2st
PmppdFR5cGUoKSkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAg
IEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpC
YXNlbGluZUpJVCk7Ci0gICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aXNTdGlsbFZhbGlkKTsK
IAogICAgIGlmICghT3B0aW9uczo6dXNlT1NSRW50cnlUb0RGRygpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NzIsOSArNzcyLDYgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIAog
ICAgIC8vIFRoZSB0YWcgcmVnaXN0ZXJzIGFyZSBuZWVkZWQgdG8gbWF0ZXJpYWxpemUgcmVjb3Zl
cmllcyBiZWxvdy4KICAgICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsK
IAotICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQotICAgICAgICBqaXQuY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7
Ci0KICAgICBpZiAoaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQpIHsKICAgICAg
ICAgRW5jb2RlZEpTVmFsdWUqIHRtcFNjcmF0Y2ggPSBzY3JhdGNoICsgb3BlcmFuZHMudG1wSW5k
ZXgoMCk7CiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25NYXRl
cmlhbGl6ZU9TUkV4aXRTaWRlU3RhdGUpPigmdm0sICZleGl0LCB0bXBTY3JhdGNoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJKSVQuaCIKQEAgLTExOSwxMCArMTIwLDEwIEBAIHZvaWQgaGFuZGxlRXhp
dENvdW50cyhWTSYgdm0sIENDYWxsSGVscGUKICAgICBpbnQzMl90IGNsaXBwZWRWYWx1ZTsKICAg
ICBzd2l0Y2ggKGppdC5jb2RlQmxvY2soKS0+aml0VHlwZSgpKSB7CiAgICAgY2FzZSBKSVRUeXBl
OjpERkdKSVQ6Ci0gICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRl
cjo6Y2xpcHBlZFRocmVzaG9sZChqaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLCB0YXJn
ZXRWYWx1ZSk7CisgICAgICAgIGNsaXBwZWRWYWx1ZSA9IEJhc2VsaW5lRXhlY3V0aW9uQ291bnRl
cjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSklUVHlwZTo6RlRMSklUOgotICAgICAgICBjbGlwcGVkVmFsdWUgPSBVcHBlclRpZXJFeGVj
dXRpb25Db3VudGVyOjpjbGlwcGVkVGhyZXNob2xkKGppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2Jq
ZWN0KCksIHRhcmdldFZhbHVlKTsKKyAgICAgICAgY2xpcHBlZFZhbHVlID0gVXBwZXJUaWVyRXhl
Y3V0aW9uQ291bnRlcjo6Y2xpcHBlZFRocmVzaG9sZCh0YXJnZXRWYWx1ZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC0xNDIsMTEgKzE0Myw4IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clQKIHsKICAgICBjYWxsZXJJc0xMSW50ID0gT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTElu
dCgpIHx8IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6
SW50ZXJwcmV0ZXJUaHVuazsKIAotICAgIGlmIChjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpIHsKLSAgICAgICAgaWYgKCFjYWxsZXJJc0xMSW50KQotICAgICAgICAgICAgYmFzZWxpbmVD
b2RlQmxvY2tGb3JDYWxsZXItPm1faGFzTGlua2VkT1NSRXhpdCA9IHRydWU7CisgICAgaWYgKGNh
bGxCeXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKICAgICAgICAgcmV0dXJuIExMSW50OjpjaGVj
a3BvaW50T1NSRXhpdEZyb21JbmxpbmVkQ2FsbFRyYW1wb2xpbmVUaHVuaygpLmNvZGUoKTsKLSAg
ICB9CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganVtcFRhcmdl
dDsKIApAQCAtMTk4LDggKzE5Niw2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clQKICN1bmRlZiBMTElOVF9SRVRVUk5fTE9DQVRJT04KIAogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5tX2hhc0xpbmtlZE9TUkV4aXQgPSB0
cnVlOwotCiAgICAgICAgIHN3aXRjaCAodHJ1ZUNhbGxlckNhbGxLaW5kKSB7CiAgICAgICAgIGNh
c2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsOgogICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6
Q29uc3RydWN0OgpAQCAtMzEzLDYgKzMwOSwxMCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFt
ZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yQ2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKICAgICAg
ICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVD
b2RlQmxvY2tGb3JDYWxsZXItPm1ldGFkYXRhVGFibGUoKSksIGNhbGxlZVNhdmVTbG90KGlubGlu
ZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ssIExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRh
VGFibGVHUFIpKTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmluc3RydWN0aW9uc1Jhd1BvaW50
ZXIoKSksIGNhbGxlZVNhdmVTbG90KGlubGluZUNhbGxGcmFtZSwgYmFzZWxpbmVDb2RlQmxvY2ss
IExMSW50OjpSZWdpc3RlcnM6OnBiR1BSKSk7CisgICAgICAgIH0gZWxzZSBpZiAodHJ1ZUNhbGxl
cikgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9
IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqdHJ1ZUNhbGxlcik7CisgICAgICAgICAgICBqaXQu
c3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrRm9y
Q2FsbGVyLT5tZXRhZGF0YVRhYmxlKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUs
IGJhc2VsaW5lQ29kZUJsb2NrLCBKSVQ6OnNfbWV0YWRhdGFHUFIpKTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXItPmJhc2VsaW5lSklUQ29uc3RhbnRQb29sKCkpLCBjYWxsZWVTYXZlU2xvdChpbmxp
bmVDYWxsRnJhbWUsIGJhc2VsaW5lQ29kZUJsb2NrLCBKSVQ6OnNfY29uc3RhbnRzR1BSKSk7CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCkBA
IC00MDQsNyArNDA0LDggQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2Fs
bAogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihieXRlY29kZUlu
ZGV4Lm9mZnNldCgpKSwgTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpOwogICAgICAgICBqdW1wVGFy
Z2V0ID0gZGVzdGluYXRpb24ucmV0YWdnZWQ8T1NSRXhpdFB0clRhZz4oKS5leGVjdXRhYmxlQWRk
cmVzcygpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvZGVCbG9ja0ZvckV4aXQtPm1faGFzTGlu
a2VkT1NSRXhpdCA9IHRydWU7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihjb2RlQmxvY2tGb3JFeGl0LT5tZXRhZGF0YVRhYmxlKCkpLCBKSVQ6OnNfbWV0YWRh
dGFHUFIpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY29k
ZUJsb2NrRm9yRXhpdC0+YmFzZWxpbmVKSVRDb25zdGFudFBvb2woKSksIEpJVDo6c19jb25zdGFu
dHNHUFIpOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggZXhpdEluZGV4ID0gZXhpdC5tX2NvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gZGVzdGluYXRpb247CkBAIC00MjAsMTIgKzQyMSwxNiBAQCB2b2lkIGFkanVz
dEFuZEp1bXBUb1RhcmdldChWTSYgdm0sIENDYWxsCiAgICAgICAgIGp1bXBUYXJnZXQgPSBkZXN0
aW5hdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAg
ICAgfQogCi0gICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6
OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3Rl
cikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKKyAg
ICAgICAgQVNTRVJUKCFSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29udGFp
bnMoTExJbnQ6OlJlZ2lzdGVyczo6cGNHUFIpKTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZl
c1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUsIEFzc2VtYmx5
SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikpOworCiAg
ICAgICAgIC8vIFNpbmNlIHdlJ3JlIGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0
IGNhbGxGcmFtZUZvckNhdGNoLgogICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIHZtLmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkpOwogICAgIH0KLSAg
ICAKKworICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpz
dGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrRm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworCiAgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGp1bXBUYXJnZXQpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgaml0LmZhckp1bXAoR1BSSW5m
bzo6cmVnVDIsIE9TUkV4aXRQdHJUYWcpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNs
dWRlICJDbG9uZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRl
ICJDb2RlQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5j
bHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgpAQCAtMjg2OSw3ICsy
ODcwLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkZpbmRTdwogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVy
YXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0
IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
Y29kZUJsb2NrLT5kZmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5p
c0RvdWJsZSgpKTsKICAgICBkb3VibGUgYXNEb3VibGUgPSB2YWx1ZS5hc0RvdWJsZSgpOwpAQCAt
Mjg5MCw3ICsyODkxLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRj
aAogCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3Qg
U3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBjb2RlQmxvY2stPmRmZ1N0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAg
ICByZXR1cm4gbGlua2VkVGFibGUuY3RpRm9yVmFsdWUoKnVubGlua2VkVGFibGUsIHN0ckltcGwp
LmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9u
IDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczMCw2ICs3MzAsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxs
ZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlVGFnR1BSLCBjYWxsZWVQYXlsb2FkR1BS
KTsKICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bUFsbG9jYXRlZEFyZ3Mp
OwogICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IG51bVBhc3NlZEFyZ3M7
CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXJhbWV0ZXJzID0gbV9qaXQuY29kZUJsb2Nr
KCktPm51bVBhcmFtZXRlcnMoKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewogICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9
IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwpAQCAtODg5LDcgKzg5MCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKIAogICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAg
c2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNhbGxlZVBheWxv
YWRHUFIsIEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsK
KyAgICAgICAgc2xvd0Nhc2VzID0gaW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgobV9qaXQsIGNh
bGxlZVBheWxvYWRHUFIsIFsmXSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWls
Q2FsbCkgewogICAgICAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZs
ZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxl
RGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI4MzEzMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgyOCw2ICs4MjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlCiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292
ZXJ5OjppbkdQUihjYWxsZWVHUFIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBzaHVmZmxl
RGF0YS5hcmdzLnJlc2l6ZShudW1BbGxvY2F0ZWRBcmdzKTsKICAgICAgICAgICAgIHNodWZmbGVE
YXRhLm51bVBhc3NlZEFyZ3MgPSBudW1QYXNzZWRBcmdzOworICAgICAgICAgICAgc2h1ZmZsZURh
dGEubnVtUGFyYW1ldGVycyA9IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1QYXNz
ZWRBcmdzOyArK2kpIHsKICAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFw
aCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKQEAgLTk3OSw3ICs5ODAsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgaWYgKGlzVGFpbCkgewotICAgICAgICBzbG93Q2Fz
ZXMgPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKG1faml0LCBjYWxsZWVHUFIs
IEludmFsaWRHUFJSZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAg
ICAgc2xvd0Nhc2VzID0gY2FsbExpbmtJbmZvLT5lbWl0VGFpbENhbGxGYXN0UGF0aChtX2ppdCwg
Y2FsbGVlR1BSLCBbJl0gewogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwp
IHsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1
ZmZsZURhdGEpOwogICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVm
ZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjgzMTMxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5ODUsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRQcml2YXRlTmEKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJl
Z2lzdGVycygpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2pp
dC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNj
ZXNzVHlwZTo6UHV0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgIG1faml0LmNvZGVCbG9j
aygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpQ
dXRQcml2YXRlTmFtZSwgdXNlZFJlZ2lzdGVycywKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxv
YWRPbmx5KGJhc2VHUFIpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocHJvcGVydHlHUFIpLCB2
YWx1ZVJlZ3MsIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKICAgICBnZW4uc3R1YkluZm8o
KS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CiAKQEAgLTQ5MDUsNyArNDkwNSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBDb2RlQmxvY2sqIGJhc2Vs
aW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YmluYXJ5QXJpdGhQcm9maWxlRm9y
Qnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2pp
dC5jb2RlQmxvY2soKS0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRBZGRJQyog
YWRkSUMgPSBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUp
OwogICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6
ZTsKICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkOwog
ICAgIApAQCAtNDk4OSw3ICs0OTg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZh
bHVlU3ViKE5vZAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFw
aCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2Rl
SW5kZXgoKTsKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5l
Q29kZUJsb2NrLT5iaW5hcnlBcml0aFByb2ZpbGVGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5k
ZXgpOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJ
Qyhhcml0aFByb2ZpbGUpOworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmppdENvZGUoKS0+
Y29tbW9uLmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSk7CiAgICAgYXV0byByZXBhdGNoaW5nRnVu
Y3Rpb24gPSBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGlu
Z0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWI7CiAKQEAgLTU1NzEsNyArNTU3MSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZU5lZ2F0ZSgKICAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpOwogICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCA9IG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCk7CiAgICAgVW5hcnlBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT51bmFyeUFyaXRoUHJvZmlsZUZv
ckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUTmVnSUMqIG5lZ0lDID0gbV9q
aXQuY29kZUJsb2NrKCktPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTmVnSUMq
IG5lZ0lDID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUTmVnSUMoYXJpdGhQcm9maWxl
KTsKICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0
aW1pemU7CiAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5l
Z2F0ZTsKICAgICBjb21waWxlTWF0aElDKG5vZGUsIG5lZ0lDLCByZXBhdGNoaW5nRnVuY3Rpb24s
IG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CkBAIC01ODE1LDcgKzU4MTUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVmFsdWVNdWwoTm9kCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBub2RlLT5vcmln
aW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCgpOwogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmJpbmFyeUFyaXRoUHJvZmlsZUZvckJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQuY29k
ZUJsb2NrKCktPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTXVsSUMqIG11bElD
ID0gbV9qaXQuaml0Q29kZSgpLT5jb21tb24uYWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKICAg
ICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7CiAg
ICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZU11bDsKIApAQCAt
MTQ3NjcsNyArMTQ3NjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9nU2hhZG93
Q2hpCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OwogICAgIEdQUlJlZyBzY29wZVJlZyA9IHNjb3BlLmdwcigpOwogCi0gICAgbV9qaXQubG9nU2hh
ZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgc2NvcGVSZWcs
IG1faml0LmNvZGVCbG9jaygpLCBjYWxsU2l0ZUluZGV4KTsKKyAgICBtX2ppdC5sb2dTaGFkb3dD
aGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCBzY29wZVJlZywgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgY2FsbFNpdGVJbmRl
eCk7CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3
IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKIAogICAgIGlmICh2
bS5zaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpIHsKICAgICAgICAgQjM6OlBD
VG9PcmlnaW5NYXAgb3JpZ2luTWFwID0gc3RhdGUucHJvYy0+cmVsZWFzZVBDVG9PcmlnaW5NYXAo
KTsKLSAgICAgICAgY29kZUJsb2NrLT5zZXRQQ1RvQ29kZU9yaWdpbk1hcChtYWtlVW5pcXVlPFBD
VG9Db2RlT3JpZ2luTWFwPihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3Jp
Z2luTWFwKSksICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpKTsKKyAgICAgICAg
c3RhdGUuaml0Q29kZS0+Y29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBD
VG9Db2RlT3JpZ2luTWFwPihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3Jp
Z2luTWFwKSksICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpOwogICAgIH0KIAog
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGxhYmVsID0gc3RhdGUuZmluYWxp
emVyLT5iM0NvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KHN0YXRlLnBy
b2MtPmNvZGUoKS5lbnRyeXBvaW50TGFiZWwoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRDb2RlLmgJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHB1
YmxpYzoKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpIG92ZXJyaWRlOwogICAgIHN0
YXRpYyBwdHJkaWZmX3QgY29tbW9uRGF0YU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKSVRDb2RlLCBjb21tb24pOyB9CiAgICAgdm9pZCBzaHJpbmtUb0ZpdChjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImKSBvdmVycmlkZTsKKworICAgIFBDVG9Db2RlT3JpZ2luTWFwKiBwY1RvQ29k
ZU9yaWdpbk1hcCgpIG92ZXJyaWRlIHsgcmV0dXJuIGNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFw
LmdldCgpOyB9CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhIGNvbW1vbjsKICAgICBWZWN0b3I8
T1NSRXhpdD4gbV9vc3JFeGl0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
aW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsu
Y3BwCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExp
bmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxNCArNTIsNiBAQCB2b2lkIGxpbmsoU3RhdGUm
IHN0YXRlKQogCiAgICAgZ3JhcGgucmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsKIAotI2lmIEFTU0VS
VF9FTkFCTEVECi0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrKTsKLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+ZW5zdXJlSklURGF0YShs
b2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpOwotICAgICAgICBBU1NF
UlQoY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzLmlz
RW1wdHkoKSk7Ci0gICAgfQotI2VuZGlmCi0KICAgICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQu
IE5vdGUgdGhhdCB3ZSB1c2UgdGhpcyBlbnRyeXBvaW50IHRvdGFsbHkgZGlmZmVyZW50bHkKICAg
ICAvLyBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSdyZSBkb2luZyBPU1IgZW50cnkgb3Igbm90Lgog
ICAgIENDYWxsSGVscGVycyBqaXQoY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsNiArODgsNyBAQAogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorI2luY2x1ZGUg
IlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgi
CkBAIC0yMzIwLDYgKzIzMjEsMTggQEAgcHJpdmF0ZToKICAgICAgICAgY29tcGlsZUJpbmFyeU1h
dGhJQzxKSVRTdWJHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBu
b25SZXBhdGNoaW5nRnVuY3Rpb24pOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBH
ZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1l
PEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgorICAgIHN0YXRpYyBK
SVRBZGRJQyogYWRkTWF0aElDKERGRzo6Q29tbW9uRGF0YSYgY29tbW9uLCBCaW5hcnlBcml0aFBy
b2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVRBZGRJQyhwcm9maWxlKTsgfQor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2
YWx1ZT46OnR5cGU+CisgICAgc3RhdGljIEpJVE11bElDKiBhZGRNYXRoSUMoREZHOjpDb21tb25E
YXRhJiBjb21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9u
LmFkZEpJVE11bElDKHByb2ZpbGUpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJh
dG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5l
cmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KKyAgICBzdGF0aWMgSklUTmVn
SUMqIGFkZE1hdGhJQyhERkc6OkNvbW1vbkRhdGEmIGNvbW1vbiwgVW5hcnlBcml0aFByb2ZpbGUq
IHByb2ZpbGUpIHsgcmV0dXJuIGNvbW1vbi5hZGRKSVROZWdJQyhwcm9maWxlKTsgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRTdWJHZW5lcmF0b3I+Ojp2YWx1ZT46
OnR5cGU+CisgICAgc3RhdGljIEpJVFN1YklDKiBhZGRNYXRoSUMoREZHOjpDb21tb25EYXRhJiBj
b21tb24sIEJpbmFyeUFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gY29tbW9uLmFkZEpJ
VFN1YklDKHByb2ZpbGUpOyB9CisKICAgICB2b2lkIGNvbXBpbGVWYWx1ZU11bCgpCiAgICAgewog
ICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwpAQCAtMjM5MSw3ICsyNDA0LDcgQEAgcHJpdmF0ZToK
ICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbWF0
aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgp
OwotICAgICAgICAgICAgICAgIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGpp
dC5jb2RlQmxvY2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAg
ICAgICAgICAgICBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8
R2VuZXJhdG9yPihzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAgICAg
ICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IoSlNWYWx1ZVJlZ3MocGFy
YW1zWzBdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgcGFyYW1zLmdwU2Ny
YXRjaCgwKSk7CiAKICAgICAgICAgICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSBm
YWxzZTsKQEAgLTI1MDAsNyArMjUxMyw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgICAgICAg
ICAgICAgIEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9
IEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBK
SVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9jaygpLT5hZGRN
YXRoSUM8R2VuZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAgIEpJVEJpbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBhZGRNYXRoSUM8R2VuZXJhdG9yPihzdGF0ZS0+
aml0Q29kZS0+Y29tbW9uLCBhcml0aFByb2ZpbGUpOwogICAgICAgICAgICAgICAgIG1hdGhJQy0+
bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1
ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
cGFyYW1zWzFdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwgcGFyYW1zLmZw
U2NyYXRjaCgwKSwKICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmZwU2NyYXRjaCgxKSwgcGFy
YW1zLmdwU2NyYXRjaCgwKSk7CkBAIC00MzE3LDcgKzQzMzAsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkZU
TEpJVCkgPyBwYXJhbXMuZ3BTY3JhdGNoKDApIDogSW52YWxpZEdQUlJlZzsKIAogICAgICAgICAg
ICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8SklUUHV0QnlWYWxHZW5lcmF0b3I+OjpjcmVhdGUoCi0g
ICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1h
bnRpY09yaWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0QnlWYWwsCisgICAgICAg
ICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpGVExKSVQsIG5vZGVTZW1hbnRpY09y
aWdpbiwgY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsCiAgICAgICAg
ICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSW52
YWxpZEdQUlJlZywgc3R1YkluZm9HUFIpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0dWJJ
bmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwpAQCAtMTAyODUsNiArMTAyOTgsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1QYXNzZWRB
cmdzOyBpIDwgbnVtQWxsb2NhdGVkQXJnczsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAg
c2h1ZmZsZURhdGEuYXJncy5hcHBlbmQoVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmlu
ZWQoKSkpOwogICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0g
bnVtUGFzc2VkQXJnczsKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtUGFyYW1l
dGVycyA9IGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICAgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygp
KTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oc2VtYW50
aWNOb2RlT3JpZ2luKTsKQEAgLTEwNDQzLDEzICsxMDQ1NywxNCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSArIGldLnJlY292
ZXJ5Rm9ySlNWYWx1ZSgpKTsKIAogICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhc3Nl
ZEFyZ3MgPSBudW1BcmdzOworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bVBhcmFtZXRl
cnMgPSBqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0
LmNvZGVCbG9jaygpKTsKIAogICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oY29kZU9yaWdpbik7CiAgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2Fs
bCwgR1BSSW5mbzo6cmVnVDApOwogCi0gICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aCA9IGNh
bGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgSW52
YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAgICAgICAg
ICAgICAgIGF1dG8gc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRo
KGppdCwgR1BSSW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5r
SW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CiAgICAgICAgICAgICAgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2Fs
bCgpOwogICAgICAgICAgICAgICAgIH0pOwpAQCAtMTA3OTIsNyArMTA4MDcsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICAgICAgaWYg
KGlzVGFpbENhbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGggPSBjYWxsTGlua0lu
Zm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BSSW5mbzo6cmVnVDAsIEludmFsaWRHUFJS
ZWcsIENhbGxMaW5rSW5mbzo6VXNlRGF0YUlDOjpObywgWyZdIHsKKyAgICAgICAgICAgICAgICAg
ICAgc2xvd1BhdGggPSBjYWxsTGlua0luZm8tPmVtaXRUYWlsQ2FsbEZhc3RQYXRoKGppdCwgR1BS
SW5mbzo6cmVnVDAsIFsmXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JU
YWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CkBAIC0xMTA3Myw3ICsxMTA4
OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBz
bG93UGF0aDsKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKICAgICAg
ICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBzbG93UGF0
aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFzdFBhdGgoaml0LCBHUFJJbmZvOjpyZWdU
MCwgSW52YWxpZEdQUlJlZywgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6Ok5vLCBbJl0geworICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aCA9IGNhbGxMaW5rSW5mby0+ZW1pdFRhaWxDYWxsRmFz
dFBhdGgoaml0LCBHUFJJbmZvOjpyZWdUMCwgWyZdIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBq
aXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICAgICAgICAgICAgICB9KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5j
cHAJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEzLDI4ICs0MTMsMTYgQEAgc3Rh
dGljIHZvaWQgY29tcGlsZVN0dWIoVk0mIHZtLCB1bnNpZ25lZAogCiAgICAgUmVnaXN0ZXJTZXQg
YWxsRlRMQ2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6ZnRsQ2FsbGVlU2F2ZVJlZ2lzdGVycygp
OwogICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBiYXNlbGluZUNhbGxlZVNhdmVzID0g
YmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlckF0
T2Zmc2V0TGlzdCogdm1DYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdp
c3Rlck9mZnNldHMoKTsKLSAgICBSZWdpc3RlclNldCB2bUNhbGxlZVNhdmVzVG9Ta2lwID0gUmVn
aXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7Ci0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5k
bGVyKCkpIHsKLSAgICAgICAgaml0LmxvYWRQdHIoJnZtLnRvcEVudHJ5RnJhbWUsIEdQUkluZm86
OnJlZ1QxKTsKLSAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihF
bnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCBHUFJJbmZvOjpy
ZWdUMSk7Ci0gICAgfQogCiAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0g
UmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKICAgICAgICAgaWYgKCFhbGxGVExDYWxs
ZWVTYXZlcy5nZXQocmVnKSkgewotICAgICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5k
bGVyKCkpCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZtQ2FsbGVlU2F2ZXMtPmZp
bmQocmVnKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICB1bnNp
Z25lZCB1bndpbmRJbmRleCA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5pbmRl
eE9mKHJlZyk7CiAgICAgICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVnaXN0
ZXJPZmZzZXQgPSBiYXNlbGluZUNhbGxlZVNhdmVzLT5maW5kKHJlZyk7Ci0gICAgICAgIFJlZ2lz
dGVyQXRPZmZzZXQqIHZtQ2FsbGVlU2F2ZSA9IG51bGxwdHI7IAotICAgICAgICBpZiAoZXhpdC5p
c0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgICAgIHZtQ2FsbGVlU2F2ZSA9IHZtQ2FsbGVl
U2F2ZXMtPmZpbmQocmVnKTsKIAogICAgICAgICBpZiAocmVnLmlzR1BSKCkpIHsKICAgICAgICAg
ICAgIEdQUlJlZyByZWdUb0xvYWQgPSBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8gR1BSSW5mbzo6
cmVnVDAgOiByZWcuZ3ByKCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWdUb0xvYWQg
IT0gR1BSSW5mbzo6cmVnVDEpOwogCiAgICAgICAgICAgICBpZiAodW53aW5kSW5kZXggPT0gVUlO
VF9NQVgpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgRlRMIGNvbXBpbGF0aW9uIGRpZG4ndCBw
cmVzZXJ2ZSB0aGlzIHJlZ2lzdGVyLiBUaGlzIG1lYW5zIHRoYXQgaXQgYWxzbwpAQCAtNDUyLDgg
KzQ0MCw2IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQKIAogICAg
ICAgICAgICAgaWYgKGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpCiAgICAgICAgICAgICAgICAgaml0
LnN0b3JlNjQocmVnVG9Mb2FkLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxl
cjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQtPm9mZnNldCgp
KSk7Ci0gICAgICAgICAgICBpZiAodm1DYWxsZWVTYXZlICYmICF2bUNhbGxlZVNhdmVzVG9Ta2lw
LmdldCh2bUNhbGxlZVNhdmUtPnJlZygpKSkKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChy
ZWdUb0xvYWQsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxl
ZVNhdmUtPm9mZnNldCgpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBGUFJSZWcg
ZnBSZWdUb0xvYWQgPSBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID8gRlBSSW5mbzo6ZnBSZWdUMCA6
IHJlZy5mcHIoKTsKIApAQCAtNDY0LDE5ICs0NTAsOSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1
YihWTSYgdm0sIHVuc2lnbmVkCiAKICAgICAgICAgICAgIGlmIChiYXNlbGluZVJlZ2lzdGVyT2Zm
c2V0KQogICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShmcFJlZ1RvTG9hZCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBi
YXNlbGluZVJlZ2lzdGVyT2Zmc2V0LT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKHZtQ2Fs
bGVlU2F2ZSAmJiAhdm1DYWxsZWVTYXZlc1RvU2tpcC5nZXQodm1DYWxsZWVTYXZlLT5yZWcoKSkp
Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsK
LSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCogdm1DYWxsZWVTYXZlID0gdm1DYWxsZWVTYXZlcy0+
ZmluZChHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUMSwgdm1DYWxsZWVTYXZlLT5vZmZzZXQoKSkpOwotCi0gICAgICAgIHZtQ2FsbGVlU2F2
ZSA9IHZtQ2FsbGVlU2F2ZXMtPmZpbmQoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3Rlcik7Ci0g
ICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCB2bUNhbGxlZVNhdmUtPm9mZnNldCgpKSk7
Ci0gICAgfQotCiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNh
dmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVy
cygpOwogCiAgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3Rp
dmVDaGVja3BvaW50KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
TWV0YWRhdGEucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRv
ci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDI4IEBA
IGNsYXNzIE1ldGFkYXRhCiAgICAgZGVmIHN0cnVjdChvcCkKICAgICAgICAgcmV0dXJuIGlmIGVt
cHR5PwogCi0gICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzKQorICAgICAg
ICBkZWYgZ2VuZXJhdGVPZmZzZXRPZkZ1bmN0aW9ucyhwcmVmaXgsIGZpZWxkTmFtZXMpCisgICAg
ICAgICAgICBmaWVsZE5hbWVzLm1hcCBkbyB8ZmllbGROYW1lfAorICAgICAgICAgICAgICAgICIj
e3ByZWZpeH1zdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mI3tmaWVsZE5hbWVbMF0udXBjYXNlfSN7
ZmllbGROYW1lWzEuLi0xXX0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1f
I3tmaWVsZE5hbWV9KTsgfSIKKyAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCisgICAgICAgIGVu
ZAorCisgICAgICAgIGRlZiBjb252ZXJ0RmllbGRzKHByZWZpeCwgZmllbGRzLCBmaWVsZE5hbWVz
KQogICAgICAgICAgICAgZmllbGRzLm1hcCBkbyB8ZmllbGQsIHR5cGV8CiAgICAgICAgICAgICAg
ICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH11
bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsgJyAgICAnLCB0eXBlKX1cbiN7cHJlZml4
fX07IgorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9dW5pb24ge1xuI3tjb252ZXJ0Rmll
bGRzKHByZWZpeCArICcgICAgJywgdHlwZSwgZmllbGROYW1lcyl9XG4je3ByZWZpeH19OyIKICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICIje3ByZWZpeH0je3R5cGUu
dG9fc30gbV8je2ZpZWxkLnRvX3N9OyIKKyAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0g
ZmllbGQudG9fcworICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWVzLnB1c2goZmllbGROYW1l
KQorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1fI3tmaWVsZE5h
bWV9OyIKICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiIpCiAg
ICAgICAgIGVuZAogCi0gICAgICAgIGZpZWxkcyA9IGNvbnZlcnRGaWVsZHMoIiAgICAgICAgIiwg
QGZpZWxkcykKKyAgICAgICAgZmllbGROYW1lcyA9IFtdCisgICAgICAgIHByZWZpeCA9ICIgICAg
ICAgICIKKyAgICAgICAgZmllbGRzID0gY29udmVydEZpZWxkcyhwcmVmaXgsIEBmaWVsZHMsIGZp
ZWxkTmFtZXMpCisgICAgICAgIGZpZWxkcyA9IGZpZWxkcyArICJcbiIgKyBnZW5lcmF0ZU9mZnNl
dE9mRnVuY3Rpb25zKHByZWZpeCwgZmllbGROYW1lcykKIAogICAgICAgICBpbml0cyA9IG5pbAog
ICAgICAgICBpZiBAaW5pdGlhbGl6ZXJzICYmIChub3QgQGluaXRpYWxpemVycy5lbXB0eT8pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShy
ZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Nyw2ICszNjcsMjggQEAgdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmxvYWRQcm9wZXJ0eShHUFJSZQogICAgICAgICByZXN1bHQpOwogfQogCit2b2lk
IEFzc2VtYmx5SGVscGVyczo6c3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVn
IG9iamVjdCwgR1BSUmVnIG9mZnNldCwgR1BSUmVnIHNjcmF0Y2gpCit7CisgICAgSnVtcCBpc0lu
bGluZSA9IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9m
TGluZU9mZnNldCkpOworICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIG5lZzMyKG9mZnNldCk7CisgICAg
c2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgIEp1bXAgcmVhZHkgPSBqdW1w
KCk7CisgICAgCisgICAgaXNJbmxpbmUubGluayh0aGlzKTsKKyAgICBhZGRQdHIoCisgICAgICAg
IFRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihK
U09iamVjdCkpIC0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDxpbnQzMl90PihmaXJzdE91dE9m
TGluZU9mZnNldCkgLSAyKSAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpKSwKKyAgICAgICAgb2JqZWN0LCBzY3JhdGNoKTsKKyAgICAKKyAgICByZWFkeS5saW5r
KHRoaXMpOworICAgIAorICAgIHN0b3JlVmFsdWUodmFsdWUsCisgICAgICAgIEJhc2VJbmRleChz
Y3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworfQorCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dExvYWRTdHJ1Y3R1cmUoVk0mIHZtLCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0
LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY5OCw4ICs3
MjAsMTMgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlcwogCiB2b2lk
IEFzc2VtYmx5SGVscGVyczo6ZW1pdFZpcnR1YWxDYWxsKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9i
YWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgZW1pdFZpcnR1YWxDYWxsV2l0aG91dE1v
dmluZ0dsb2JhbE9iamVjdCh2bSwgaW5mbyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpl
bWl0VmlydHVhbENhbGxXaXRob3V0TW92aW5nR2xvYmFsT2JqZWN0KFZNJiB2bSwgQ2FsbExpbmtJ
bmZvKiBpbmZvKQoreworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVn
VDIpOwogICAgIENhbGwgY2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgYWRkTGlua1Rhc2soWz0sICZ2
bV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgYXV0byBjYWxsTG9jYXRpb24g
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxKSVRDb21waWxhdGlvblB0clRhZz4oY2Fs
bCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw4ICsyMzQsOSBAQCBwdWJsaWM6CiAjZW5k
aWYKICAgICB9CiAgICAgCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgY2xvYmJlcnMgb2Zmc2V0Lgor
ICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBjbG9iYmVyIG9mZnNldC4KICAgICB2b2lkIGxvYWRQcm9w
ZXJ0eShHUFJSZWcgb2JqZWN0LCBHUFJSZWcgb2Zmc2V0LCBKU1ZhbHVlUmVncyByZXN1bHQpOwor
ICAgIHZvaWQgc3RvcmVQcm9wZXJ0eShKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwg
R1BSUmVnIG9mZnNldCwgR1BSUmVnIHNjcmF0Y2gpOwogCiAgICAgdm9pZCBtb3ZlVmFsdWVSZWdz
KEpTVmFsdWVSZWdzIHNyY1JlZ3MsIEpTVmFsdWVSZWdzIGRlc3RSZWdzKQogICAgIHsKQEAgLTM3
OSwxNSArMzgwLDI2IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIHZvaWQgY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVu
dHJ5RnJhbWUsIEdQUlJlZyBzY3JhdGNoKQorICAgIHsKKyNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NB
VkVTX1JFR0lTVEVSUyA+IDAKKyAgICAgICAgbG9hZFB0cigmdG9wRW50cnlGcmFtZSwgc2NyYXRj
aCk7CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
SW1wbChzY3JhdGNoKTsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1l
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOworI2VuZGlmCisgICAgfQorCiAgICAg
dm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihFbnRyeUZy
YW1lKiYgdG9wRW50cnlGcmFtZSkKICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19S
RUdJU1RFUlMgPiAwCiAgICAgICAgIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cyA9IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH07CiAgICAgICAg
IEdQUlJlZyB0ZW1wMSA9IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigwKTsKLSAgICAgICAgbG9h
ZFB0cigmdG9wRW50cnlGcmFtZSwgdGVtcDEpOwotICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwodGVtcDEpOworICAgICAgICBjb3B5Q2FsbGVl
U2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih0b3BFbnRyeUZyYW1lLCB0ZW1wMSk7
CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0odG9wRW50cnlGcmFtZSk7CisgICAgICAgIFVO
VVNFRF9QQVJBTSh0b3BFbnRyeUZyYW1lKTsKICNlbmRpZgogICAgIH0KICAgICAKQEAgLTE3MjAs
NiArMTczMiw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0VmlydHVhbENh
bGwoVk0mLCBKU0dsb2JhbE9iamVjdCosIENhbGxMaW5rSW5mbyopOworICAgIHZvaWQgZW1pdFZp
cnR1YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdChWTSYsIENhbGxMaW5rSW5mbyopOwog
ICAgIAogICAgIHZvaWQgbWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgdm9pZCByZWNs
YWltU3BhY2VPblN0YWNrRm9yQ0NhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQmFzZWxpbmVKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Jhc2VsaW5lSklUQ29kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhc2VsaW5lSklUQ29kZS5oIgorCisjaWYg
RU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkp1bXBUYWJs
ZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitKSVRBZGRJQyogTWF0aElDSG9sZGVyOjphZGRKSVRBZGRJQyhCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSkgeyByZXR1cm4gbV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7IH0KK0pJ
VE11bElDKiBNYXRoSUNIb2xkZXI6OmFkZEpJVE11bElDKEJpbmFyeUFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlKSB7IHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorSklUU3Vi
SUMqIE1hdGhJQ0hvbGRlcjo6YWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUpIHsgcmV0dXJuIG1fc3ViSUNzLmFkZChhcml0aFByb2ZpbGUpOyB9CitKSVROZWdJQyog
TWF0aElDSG9sZGVyOjphZGRKSVROZWdJQyhVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
KSB7IHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxlKTsgfQorCit2b2lkIE1hdGhJQ0hv
bGRlcjo6YWRvcHRNYXRoSUNzKE1hdGhJQ0hvbGRlciYgb3RoZXIpCit7CisgICAgbV9hZGRJQ3Mg
PSBXVEZNb3ZlKG90aGVyLm1fYWRkSUNzKTsKKyAgICBtX211bElDcyA9IFdURk1vdmUob3RoZXIu
bV9tdWxJQ3MpOworICAgIG1fbmVnSUNzID0gV1RGTW92ZShvdGhlci5tX25lZ0lDcyk7CisgICAg
bV9zdWJJQ3MgPSBXVEZNb3ZlKG90aGVyLm1fc3ViSUNzKTsKK30KKworQmFzZWxpbmVKSVRDb2Rl
OjpCYXNlbGluZUpJVENvZGUoQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBjb2RlLCBDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKQorICAgIDogRGlyZWN0SklUQ29kZShXVEZNb3Zl
KGNvZGUpLCB3aXRoQXJpdHlDaGVjaywgSklUVHlwZTo6QmFzZWxpbmVKSVQpCisgICAgLCBNYXRo
SUNIb2xkZXIoKQoreyB9CisKK0Jhc2VsaW5lSklUQ29kZTo6fkJhc2VsaW5lSklUQ29kZSgpCit7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRDb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVENvZGUuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZv
LmgiCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVENvZGVNYXAuaCIKKworI2lm
IEVOQUJMRShKSVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCaW5hcnlBcml0aFByb2Zp
bGU7CitjbGFzcyBVbmFyeUFyaXRoUHJvZmlsZTsKK3N0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvOworc3RydWN0IFNpbXBsZUp1bXBUYWJsZTsKK3N0cnVjdCBTdHJpbmdKdW1wVGFibGU7
CisKK2NsYXNzIE1hdGhJQ0hvbGRlciB7CitwdWJsaWM6CisgICAgdm9pZCBhZG9wdE1hdGhJQ3Mo
TWF0aElDSG9sZGVyJiBvdGhlcik7CisgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKEJpbmFyeUFy
aXRoUHJvZmlsZSopOworICAgIEpJVE11bElDKiBhZGRKSVRNdWxJQyhCaW5hcnlBcml0aFByb2Zp
bGUqKTsKKyAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQmluYXJ5QXJpdGhQcm9maWxlKik7Cisg
ICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKFVuYXJ5QXJpdGhQcm9maWxlKik7CisKK3ByaXZhdGU6
CisgICAgQmFnPEpJVEFkZElDPiBtX2FkZElDczsKKyAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNz
OworICAgIEJhZzxKSVROZWdJQz4gbV9uZWdJQ3M7CisgICAgQmFnPEpJVFN1YklDPiBtX3N1YklD
czsKK307CisKK2NsYXNzIEpJVENvbnN0YW50UG9vbCB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29u
c3RhbnQgPSB1bnNpZ25lZDsKKworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAg
ICAgICBHbG9iYWxPYmplY3QsCisgICAgICAgIENhbGxMaW5rSW5mbywKKyAgICAgICAgU3RydWN0
dXJlU3R1YkluZm8sCisgICAgICAgIEZ1bmN0aW9uRGVjbCwKKyAgICAgICAgRnVuY3Rpb25FeHBy
LAorICAgIH07CisKKyAgICBzdHJ1Y3QgVmFsdWUgeworICAgICAgICBUeXBlIHR5cGU7CisgICAg
ICAgIFBhY2tlZFB0cjx2b2lkPiBwYXlsb2FkOworICAgIH07CisKKyAgICBKSVRDb25zdGFudFBv
b2woKSA9IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbCYmKSA9
IGRlZmF1bHQ7CisgICAgSklUQ29uc3RhbnRQb29sJiBvcGVyYXRvcj0oSklUQ29uc3RhbnRQb29s
JiYpID0gZGVmYXVsdDsKKworICAgIENvbnN0YW50IGFkZChUeXBlIHR5cGUsIHZvaWQqIHBheWxv
YWQgPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFu
dHMuc2l6ZSgpOworICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoVmFsdWUgeyB0eXBlLCBwYXls
b2FkIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHNpemVfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHMuc2l6ZSgpOyB9CisgICAgVmFsdWUgYXQoc2l6
ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW2ldOyB9CisKK3ByaXZhdGU6CisgICAg
VmVjdG9yPFZhbHVlPiBtX2NvbnN0YW50czsKK307CisKKworY2xhc3MgQmFzZWxpbmVKSVRDb2Rl
IDogcHVibGljIERpcmVjdEpJVENvZGUsIHB1YmxpYyBNYXRoSUNIb2xkZXIgeworcHVibGljOgor
ICAgIEJhc2VsaW5lSklUQ29kZShDb2RlUmVmPEpTRW50cnlQdHJUYWc+LCBDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IHdpdGhBcml0eUNoZWNrKTsKKyAgICB+QmFzZWxpbmVKSVRDb2RlKCkgb3ZlcnJp
ZGU7CisgICAgUENUb0NvZGVPcmlnaW5NYXAqIHBjVG9Db2RlT3JpZ2luTWFwKCkgb3ZlcnJpZGUg
eyByZXR1cm4gbV9wY1RvQ29kZU9yaWdpbk1hcC5nZXQoKTsgfQorCisgICAgQmFnPFVubGlua2Vk
Q2FsbExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9l
dmFsQ2FsbExpbmtJbmZvczsKKyAgICBCYWc8VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbz4gbV91
bmxpbmtlZFN0dWJJbmZvczsKKyAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+IG1fc3dp
dGNoSnVtcFRhYmxlczsKKyAgICBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlczsKKyAgICBKSVRDb2RlTWFwIG1faml0Q29kZU1hcDsKKyAgICBKSVRD
b25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2Rl
T3JpZ2luTWFwPiBtX3BjVG9Db2RlT3JpZ2luTWFwOworICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7
IHRydWUgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRQbGFuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Jhc2VsaW5lSklUUGxhbi5j
cHAJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxp
bmVKSVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzaXplX3QgQmFz
ZWxpbmVKSVRQbGFuOjpjb2RlU2l6ZSgpIGNvbnN0CiAKIENvbXBpbGF0aW9uUmVzdWx0IEJhc2Vs
aW5lSklUUGxhbjo6ZmluYWxpemUoKQogewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9
IG1faml0LmZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVz
dWx0ID0gbV9qaXQuZmluYWxpemVPbk1haW5UaHJlYWQobV9jb2RlQmxvY2spOwogICAgIHN3aXRj
aCAocmVzdWx0KSB7CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgQ09ERUJM
T0NLX0xPR19FVkVOVChtX2NvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgiY29tcGlsYXRp
b24gZmFpbGVkIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBl
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxw
ZXJzLmNwcAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
Q2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCB2b2lkIEND
YWxsSGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblByb2xvCiAgICAgc3RvcmVQdHIoc2NvcGUsIEFk
ZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0
LCBzY29wZSkpKTsKIH0KIAotdm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWls
UGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNSZWdzLCBHUFJSZWcg
c2NvcGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgp
Ci17Ci0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3Moc2hh
ZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBmcmFtZSkp
KTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGFp
bE1hcmtlcigpKSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dD
aGlja2VuOjpQYWNrZXQsIGNhbGxlZSkpKTsKLSAgICBzdG9yZVZhbHVlKHRoaXNSZWdzLCBBZGRy
ZXNzKHNoYWRvd1BhY2tldCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwg
dGhpc1ZhbHVlKSkpOwotICAgIHN0b3JlUHRyKHNjb3BlLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwg
T0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSk7Ci0gICAgc3Rv
cmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2spLCBBZGRyZXNzKHNoYWRvd1BhY2tldCwgT0JK
RUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgY29kZUJsb2NrKSkpOwotICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwgQWRkcmVzcyhzaGFkb3dQ
YWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIGNhbGxTaXRlSW5k
ZXgpKSk7Ci19Ci0KIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0
KFZNJiB2bSwgR1BSUmVnIHNoYWRvd1BhY2tldCwgR1BSUmVnIHNjcmF0Y2gxTm9uQXJnR1BSLCBH
UFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9IHZt
LnNoYWRvd0NoaWNrZW4oKTsKQEAgLTcyLDYgKzYyLDI4IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjpl
bnN1cmVTaGFkb3dDaGlja2VuUGEKICAgICBzdG9yZVB0cihzY3JhdGNoMiwgQWRkcmVzcyhzY3Jh
dGNoMU5vbkFyZ0dQUikpOwogfQogCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
Pgordm9pZCBDQ2FsbEhlbHBlcnM6OmxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJS
ZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2Rl
QmxvY2tUeXBlIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAg
IHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHNoYWRvd1BhY2tl
dCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgZnJhbWUpKSk7CisgICAg
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cihTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRhaWxNYXJrZXIo
KSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6
UGFja2V0LCBjYWxsZWUpKSk7CisgICAgc3RvcmVWYWx1ZSh0aGlzUmVncywgQWRkcmVzcyhzaGFk
b3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHRoaXNWYWx1
ZSkpKTsKKyAgICBzdG9yZVB0cihzY29wZSwgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9P
RkZTRVRPRihTaGFkb3dDaGlja2VuOjpQYWNrZXQsIHNjb3BlKSkpOworICAgIHN0b3JlUHRyKGNv
ZGVCbG9jaywgQWRkcmVzcyhzaGFkb3dQYWNrZXQsIE9CSkVDVF9PRkZTRVRPRihTaGFkb3dDaGlj
a2VuOjpQYWNrZXQsIGNvZGVCbG9jaykpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihjYWxs
U2l0ZUluZGV4LmJpdHMoKSksIEFkZHJlc3Moc2hhZG93UGFja2V0LCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjYWxsU2l0ZUluZGV4KSkpOworfQorCit2b2lkIENDYWxs
SGVscGVyczo6bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BSUmVnIHNoYWRvd1BhY2tldCwg
SlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgVHJ1c3RlZEltbVB0ciBjb2RlQmxv
Y2ssIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldEltcGwoc2hhZG93UGFja2V0LCB0aGlzUmVncywgc2NvcGUsIGNvZGVCbG9jaywg
Y2FsbFNpdGVJbmRleCk7Cit9CisKK3ZvaWQgQ0NhbGxIZWxwZXJzOjpsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVncyB0aGlzUmVncywgR1BS
UmVnIHNjb3BlLCBHUFJSZWcgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgp
Cit7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXRJbXBsKHNoYWRvd1BhY2tldCwgdGhp
c1JlZ3MsIHNjb3BlLCBjb2RlQmxvY2ssIGNhbGxTaXRlSW5kZXgpOworfQorCiB2b2lkIENDYWxs
SGVscGVyczo6ZW1pdEpJVENvZGVPdmVyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0ludGVybmFs
UHRyVGFnPiB3aGVyZSwgU2NvcGVkTGFtYmRhPHZvaWQoQ0NhbGxIZWxwZXJzJik+IGVtaXRDb2Rl
LCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAyODMx
MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC04NDAsNyArODQwLDE0IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBvcGVyYXRp
b25zIGNsb2JiZXIgYWxsIHZvbGF0aWxlIHJlZ2lzdGVycy4gVGhleSBhc3N1bWUgdGhhdCB0aGVy
ZSBpcyByb29tIG9uIHRoZSB0b3Agb2YKICAgICAvLyBzdGFjayB0byBtYXJzaGFsbCBjYWxsIGFy
Z3VtZW50cy4KICAgICB2b2lkIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChHUFJSZWcg
c2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY29wZSk7Ci0gICAgdm9pZCBs
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1ZhbHVlUmVn
cyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4KTsKKwor
cHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KKyAgICB2b2lk
IGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0SW1wbChHUFJSZWcgc2hhZG93UGFja2V0LCBKU1Zh
bHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHNjb3BlLCBDb2RlQmxvY2tUeXBlIGNvZGVCbG9jaywg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKK3B1YmxpYzoKKyAgICB2b2lkIGxvZ1NoYWRv
d0NoaWNrZW5UYWlsUGFja2V0KEdQUlJlZyBzaGFkb3dQYWNrZXQsIEpTVmFsdWVSZWdzIHRoaXNS
ZWdzLCBHUFJSZWcgc2NvcGUsIFRydXN0ZWRJbW1QdHIgY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlSW5kZXgpOworICAgIHZvaWQgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoR1BS
UmVnIHNoYWRvd1BhY2tldCwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzY29wZSwgR1BS
UmVnIGNvZGVCbG9jaywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KTsKKwogICAgIC8vIExl
YXZlcyBiZWhpbmQgYSBwb2ludGVyIHRvIHRoZSBQYWNrZXQgd2Ugc2hvdWxkIHdyaXRlIHRvIGlu
IHNoYWRvd1BhY2tldC4KICAgICB2b2lkIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoVk0mLCBH
UFJSZWcgc2hhZG93UGFja2V0LCBHUFJSZWcgc2NyYXRjaDFOb25BcmdHUFIsIEdQUlJlZyBzY3Jh
dGNoMik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZy
YW1lU2h1ZmZsZURhdGEuY3BwCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
OCArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6
OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBz
ZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
OworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucykKK3sK
ICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OnZtQ2Fs
bGVlU2F2ZVJlZ2lzdGVycygpIH07Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJl
Z2lzdGVyU2F2ZUxvY2F0aW9ucyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwog
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUo
KTsgKytpKSB7CiAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVM
b2NhdGlvbnMtPmF0KGkpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDExICs0MywxMyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7
CiAgICAgdW5zaWduZWQgbnVtTG9jYWxzIHsgVUlOVF9NQVggfTsKICAgICB1bnNpZ25lZCBudW1Q
YXNzZWRBcmdzIHsgVUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzIHsgVUlO
VF9NQVggfTsgLy8gT24gb3VyIG1hY2hpbmUgZnJhbWUuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBSZWdpc3Rlck1hcDxWYWx1ZVJlY292ZXJ5PiByZWdpc3RlcnM7CiAgICAgR1BSUmVnIG51bWJl
clRhZ1JlZ2lzdGVyIHsgSW52YWxpZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNh
dmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqKTsKICNlbmRpZgogICAgIFZhbHVlUmVjb3Zl
cnkgY2FsbGVlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2Fs
bEZyYW1lU2h1ZmZsZXIuY3BwCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTMg
KzM4LDEzIEBAIENhbGxGcmFtZVNodWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2EKICAgICA6
IG1faml0KGppdCkKICAgICAsIG1fb2xkRnJhbWUoZGF0YS5udW1Mb2NhbHMgKyBDYWxsZXJGcmFt
ZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMsIG51bGxwdHIpCiAgICAgLCBtX25ld0ZyYW1lKGRhdGEu
YXJncy5zaXplKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycywgbnVsbHB0cikK
LSAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lz
dGVycwotICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29kZUJs
b2NrKCktPm51bVBhcmFtZXRlcnMoKSkpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoQ2Fs
bEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyByb3VuZEFyZ3VtZW50Q291bnRUb0FsaWdu
RnJhbWUoZGF0YS5udW1QYXJhbWV0ZXJzKSkKICAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShD
YWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycwogICAgICAgICArIHJvdW5kQXJndW1lbnRD
b3VudFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Muc2l6ZSgpKSkKICAgICAsIG1fZnJhbWVEZWx0YSht
X2FsaWduZWROZXdGcmFtZVNpemUgLSBtX2FsaWduZWRPbGRGcmFtZVNpemUpCiAgICAgLCBtX2xv
Y2tlZFJlZ2lzdGVycyhSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX251bVBh
c3NlZEFyZ3MoZGF0YS5udW1QYXNzZWRBcmdzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKGRhdGEu
bnVtUGFyYW1ldGVycykKIHsKICAgICAvLyBXZSBhcmUgYWxsb3dlZCBhbGwgdGhlIHVzdWFsIHJl
Z2lzdGVycy4uLgogICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzOyBpLS07ICkKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpw
cmVwYXJlRm9yVGFpbENhCiAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXls
b2FkT2Zmc2V0KSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFy
Z3VtZW50Q291bnRPSyA9CiAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpC
ZWxvd09yRXF1YWwsIG1fbmV3RnJhbWVCYXNlLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSk7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG1fbnVtUGFyYW1ldGVycykpOwog
ICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1l
bnRSZWdpc3RlcnMoKSAtIDEgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyksIG1f
bmV3RnJhbWVCYXNlKTsKICAgICBtX2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKC1zdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOwogICAgIG1f
aml0Lm11bDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSks
IG1fbmV3RnJhbWVCYXNlLCBtX25ld0ZyYW1lQmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCShyZXZpc2lvbiAyODMxMzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNCw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVE
YXRhIGRhdGE7CiAgICAgICAgIGRhdGEubnVtTG9jYWxzID0gbnVtTG9jYWxzKCk7CiAgICAgICAg
IGRhdGEubnVtUGFzc2VkQXJncyA9IG1fbnVtUGFzc2VkQXJnczsKKyAgICAgICAgZGF0YS5udW1Q
YXJhbWV0ZXJzID0gbV9udW1QYXJhbWV0ZXJzOwogICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5l
dyhWaXJ0dWFsUmVnaXN0ZXIgeyBDYWxsRnJhbWVTbG90OjpjYWxsZWUgfSktPnJlY292ZXJ5KCk7
CiAgICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJnQ291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytpKQpAQCAtNzk4LDYgKzc5OSw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBwZXJmb3JtU2FmZVdyaXRlcygpOwogICAgIAogICAgIHVuc2lnbmVkIG1f
bnVtUGFzc2VkQXJncyB7IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJz
IHsgVUlOVF9NQVggfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkEKIH0KIAogSklUOjpKSVQoVk0mIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUlu
ZGV4KQotICAgIDogSlNJbnRlcmZhY2VKSVQoJnZtLCBjb2RlQmxvY2spCisgICAgOiBKU0ludGVy
ZmFjZUpJVCgmdm0sIG51bGxwdHIpCiAgICAgLCBtX2ludGVycHJldGVyKHZtLmludGVycHJldGVy
KQogICAgICwgbV9sYWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5z
aXplKCkgOiAwKQogICAgICwgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIodm0pCkBAIC03Nyw2
ICs3Nyw5IEBAIEpJVDo6SklUKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEIKICAgICAs
IG1fc2hvdWxkRW1pdFByb2ZpbGluZyhmYWxzZSkKICAgICAsIG1fbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVJbmRleChsb29wT1NSRW50cnlCeXRlY29kZUluZGV4KQogeworICAgIG1fZ2xvYmFsT2JqZWN0
Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpHbG9i
YWxPYmplY3QpOworICAgIG1fcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV91
bmxpbmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIH0KIAog
SklUOjp+SklUKCkKQEAgLTkwLDggKzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXph
dGlvbkNoZWNrKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXpl
OwotICAgIAotICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVz
dGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBB
YnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkp
KSk7CisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QwKTsKKyAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3Rl
ZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRk
cmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAg
ICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpOwogCiAgICAgY29weUxMSW50QmFz
ZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwpAQCAtMTEzLDE1ICsxMTYsMjAgQEAgdm9pZCBK
SVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0KgogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0
ZShHUFJSZWcgcG9pbnRlclRvU2V0KQordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZVdhdGNocG9p
bnQoR1BSUmVnIHBvaW50ZXJUb1NldCkKIHsKKyAgICBhdXRvIG9rID0gYnJhbmNoVGVzdFB0ciha
ZXJvLCBwb2ludGVyVG9TZXQpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFk
ZHJlc3MocG9pbnRlclRvU2V0LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBvay5saW5rKHRoaXMpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCit2b2lk
IEpJVDo6ZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIEdQUlJl
ZyBzY3JhdGNoR1BSKQogewotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+dmFyUmVhZE9ubHlXYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xv
YmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
IHsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92
YXJSZWFkT25seVdhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfQogfQogCiB2
b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKQEAgLTEyOSwxMiArMTM3LDE4IEBA
IHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogICAgIGlmICghQVNTRVJUX0VO
QUJMRUQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIG9r
LmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklUOjpyZXNldFNQKCkKK3sKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Cit9CisKICNkZWZpbmUgTkVYVF9P
UENPREUobmFtZSkgXAogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOyBcCiAgICAg
YnJlYWs7CkBAIC0xODEsNjEgKzE5NSw0NCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dDYXNlQ2FsbChj
b25zdCBJbnN0cnVjCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVt
aXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0KQoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUsIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6
b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmVzdWx0KTsKKyAgICBhdXRvIGhhc0V4
ZWN1dGFibGUgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVzdWx0LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rp
b246OnJhcmVEYXRhVGFnKSwgcmVzdWx0KTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsodGhpcyk7
CisgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZkNvZGVC
bG9ja0ZvckNvbnN0cnVjdCgpKSwgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZXN1bHQsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZDb2RlQmxvY2tGb3JD
YWxsKCkpLCByZXN1bHQpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgRXhlY3V0YWJs
ZVRvQ29kZUJsb2NrRWRnZTo6b2Zmc2V0T2ZDb2RlQmxvY2soKSksIHJlc3VsdCk7CisgICAgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlc3VsdCwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsK
KworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0
JiBjdHgpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjdHguZnA8Q2FsbEZyYW1l
Kj4oKS0+Y29kZUJsb2NrKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKKyAgICB9KTsKKyNlbmRpZgorfQorCiB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiB7CiAgICAgaWYgKEpJVEludGVybmFs
Ojp2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAi
XG4iKTsKKyAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nICIsICptX3Byb2ZpbGVkQ29kZUJsb2Nr
LCAiXG4iKTsKICAgICAKICAgICBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIGppdEFzc2Vy
dEFyZ3VtZW50Q291bnRTYW5lKCk7CiAgICAgCi0gICAgYXV0byYgaW5zdHJ1Y3Rpb25zID0gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQg
PSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGF1dG8mIGluc3RydWN0
aW9ucyA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpOworICAgIHVuc2lnbmVk
IGluc3RydWN0aW9uQ291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5z
aXplKCk7CiAKICAgICBtX2NhbGxMaW5rSW5mb0luZGV4ID0gMDsKIAotICAgIFZNJiB2bSA9IG1f
Y29kZUJsb2NrLT52bSgpOwogICAgIEJ5dGVjb2RlSW5kZXggc3RhcnRCeXRlY29kZUluZGV4KDAp
OwotICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXggJiYgKG1fY29kZUJsb2NrLT5p
bmhlcml0czxQcm9ncmFtQ29kZUJsb2NrPih2bSkgfHwgbV9jb2RlQmxvY2stPmluaGVyaXRzPE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtKSkpIHsKLSAgICAgICAgLy8gV2UgY2FuIG9ubHkgZG8g
dGhpcyBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBleGVjdXRlIFByb2dyYW1Db2RlQmxvY2sncyBl
eGFjdGx5IG9uY2UuCi0gICAgICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIHdvdWxkIGJlIGludmFs
aWQgb3RoZXJ3aXNlLiBXaGVuIHRoZSBMTEludCBkZXRlcm1pbmVzIGl0IHdhbnRzIHRvCi0gICAg
ICAgIC8vIGRvIE9TUiBlbnRyeSBpbnRvIHRoZSBiYXNlbGluZSBKSVQgaW4gYSBsb29wLCBpdCB3
aWxsIHBhc3MgaW4gdGhlIGJ5dGVjb2RlIG9mZnNldCBpdAotICAgICAgICAvLyB3YXMgZXhlY3V0
aW5nIGF0IHdoZW4gaXQga2lja2VkIG9mZiBvdXIgY29tcGlsYXRpb24uIFdlIG9ubHkgbmVlZCB0
byBjb21waWxlIGNvZGUgZm9yCi0gICAgICAgIC8vIGFueXRoaW5nIHJlYWNoYWJsZSBmcm9tIHRo
YXQgYnl0ZWNvZGUgb2Zmc2V0LgotCi0gICAgICAgIC8vIFdlIG9ubHkgYm90aGVyIGJ1aWxkaW5n
IHRoZSBieXRlY29kZSBncmFwaCBpZiBpdCBjb3VsZCBzYXZlIHRpbWUgYW5kIGV4ZWN1dGFibGUK
LSAgICAgICAgLy8gbWVtb3J5LiBXZSBwaWNrIGFuIGFyYml0cmFyeSBvZmZzZXQgd2hlcmUgd2Ug
ZGVlbSB0aGlzIGlzIHByb2ZpdGFibGUuCi0gICAgICAgIGlmIChtX2xvb3BPU1JFbnRyeUJ5dGVj
b2RlSW5kZXgub2Zmc2V0KCkgPj0gMjAwKSB7Ci0gICAgICAgICAgICAvLyBBcyBhIHNpbXBsaWZp
Y2F0aW9uLCB3ZSBkb24ndCBmaW5kIGFsbCBieXRlY29kZSByYW5nZXMgdGhhdCBhcmUgdW5yZWFj
aGFibGUuCi0gICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGZpbmQgdGhlIG1pbmltdW0g
Ynl0ZWNvZGUgb2Zmc2V0IHRoYXQgaXMgcmVhY2hhYmxlLCBhbmQKLSAgICAgICAgICAgIC8vIGNv
bXBpbGUgY29kZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0IG9ud2FyZHMuCi0KLSAgICAgICAg
ICAgIEJ5dGVjb2RlR3JhcGggZ3JhcGgobV9jb2RlQmxvY2ssIG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKSk7Ci0gICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgu
ZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5k
ZXgub2Zmc2V0KCkpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2spOwotCi0gICAg
ICAgICAgICBHcmFwaE5vZGVXb3JrbGlzdDxCeXRlY29kZUJhc2ljQmxvY2sqPiB3b3JrbGlzdDsK
LSAgICAgICAgICAgIHN0YXJ0Qnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsKLSAgICAg
ICAgICAgIHdvcmtsaXN0LnB1c2goYmxvY2spOwotCi0gICAgICAgICAgICB3aGlsZSAoQnl0ZWNv
ZGVCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7Ci0gICAgICAgICAgICAgICAg
c3RhcnRCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChzdGQ6Om1pbihzdGFydEJ5dGVjb2Rl
SW5kZXgub2Zmc2V0KCksIGJsb2NrLT5sZWFkZXJPZmZzZXQoKSkpOwotICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggOiBibG9jay0+c3VjY2Vzc29ycygpKQotICAg
ICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKCZncmFwaFtzdWNjZXNzb3JJbmRleF0pOwot
Ci0gICAgICAgICAgICAgICAgLy8gQWxzbyBhZGQgY2F0Y2ggYmxvY2tzIGZvciBieXRlY29kZXMg
dGhhdCB0aHJvdy4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mRXhj
ZXB0aW9uSGFuZGxlcnMoKSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmxlYWRlck9mZnNldCgpOyBieXRlY29kZU9mZnNldCA8IGJs
b2NrLT5sZWFkZXJPZmZzZXQoKSArIGJsb2NrLT50b3RhbExlbmd0aCgpOykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucy5hdChieXRlY29k
ZU9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogaGFuZGxlciA9IG1f
Y29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
T2Zmc2V0KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChncmFw
aC5maW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoaGFuZGxlci0+dGFyZ2V0KSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXpl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9CiAKICAgICBtX2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2Fz
ZSA9IDA7CiAgICAgZm9yIChtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOyBtX2J5
dGVjb2RlSW5kZXgub2Zmc2V0KCkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKQEAgLTI3OCwxMiAr
Mjc1LDE1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxpbmVKSVRFeGVjdXRpb24oKSkpIHsK
LSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAg
ICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgeworICAgICAgICAgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY3R4LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9j
aygpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSklUIFsiLCBieXRlY29kZU9mZnNldCwg
Il0gIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgp
KSwgIiBAICIsIGNvZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCisgICAg
ICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYXRjaCkKKyAgICAgICAgICAgIGFzc2VydFN0YWNrUG9p
bnRlck9mZnNldCgpOworCiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICAgICAgREVG
SU5FX1NMT1dfT1AobGVzcykKICAgICAgICAgREVGSU5FX1NMT1dfT1AobGVzc2VxKQpAQCAtNTI4
LDcgKzUyOCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAKICAgICAg
ICAgQnl0ZWNvZGVJbmRleCBmaXJzdFRvID0gbV9ieXRlY29kZUluZGV4OwogCi0gICAgICAgIGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQobV9ieXRlY29kZUluZGV4KS5wdHIoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLmF0KG1fYnl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAo
SklUSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIkJhc2VsaW5lIEpJ
VCBlbWl0dGluZyBzbG93IGNvZGUgZm9yICIsIG1fYnl0ZWNvZGVJbmRleCwgIiBhdCBvZmZzZXQg
IiwgKGxvbmcpZGVidWdPZmZzZXQoKSk7CkBAIC01NDYsOCArNTQ2LDggQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKIAogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6
dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAgICAgICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1Zyhb
PV0gKFByb2JlOjpDb250ZXh0JiBjdHgpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGN0eC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG4oIkpJVCBbIiwgYnl0ZWNvZGVPZmZzZXQsICJdIFNMT1cgIiwgb3Bjb2Rl
TmFtZXNbb3Bjb2RlSURdLCAiIGNmciAiLCBSYXdQb2ludGVyKGN0eC5mcCgpKSwgIiBAICIsIGNv
ZGVCbG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtNjc1LDU1ICs2NzUsNTUg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCit2b2lk
IEpJVDo6ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoKQor
eworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
MCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRh
dGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBD
b2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwg
c19jb25zdGFudHNHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
Cit7CisgICAgQmFzZTo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCiB2b2lkIEpJ
VDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBl
ZmZvcnQpCiB7Ci0gICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+
Y2FwYWJpbGl0eUxldmVsKCk7CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBzd2l0Y2ggKGxldmVsKSB7
CiAgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQg
PSBmYWxzZTsKLSAgICAgICAgbV9jYW5CZU9wdGltaXplZE9ySW5saW5lZCA9IGZhbHNlOwogICAg
ICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBERkc6OkNhbkNvbXBpbGU6CiAgICAgY2FzZSBERkc6OkNhbkNvbXBpbGVBbmRJbmxpbmU6
CiAgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOwotICAgICAgICBtX2NhbkJlT3B0aW1p
emVkT3JJbmxpbmVkID0gdHJ1ZTsKICAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAgIHN3aXRjaCAo
bV9jb2RlQmxvY2stPmNvZGVUeXBlKCkpIHsKLSAgICBjYXNlIEdsb2JhbENvZGU6Ci0gICAgY2Fz
ZSBNb2R1bGVDb2RlOgotICAgIGNhc2UgRXZhbENvZGU6Ci0gICAgICAgIG1fY29kZUJsb2NrLT5t
X3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZ1bmN0aW9uQ29kZToKLSAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbHJlYWR5IHNldCBpdCB0
byBmYWxzZSBiZWNhdXNlIHdlIGRldGVjdGVkIGFuIHVuaW5saW5lYWJsZSBjYWxsLgotICAgICAg
ICAvLyBEb24ndCBvdmVycmlkZSB0aGF0IG9ic2VydmF0aW9uLgotICAgICAgICBtX2NvZGVCbG9j
ay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQgJj0gY2FuSW5saW5lKGxldmVsKSAmJiBERkc6Om1p
Z2h0SW5saW5lRnVuY3Rpb24obV9jb2RlQmxvY2spOwotICAgICAgICBicmVhazsKLSAgICB9CiAK
LSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTd2l0Y2hKdW1wVGFibGVzKCkg
fHwgbV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkp
IHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2Nr
KTsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRh
YmxlcygpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5t
X3N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFibGU+KG1fY29kZUJs
b2NrLT5udW1iZXJPZlVubGlua2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKLSAgICAgICAgaWYgKG1f
Y29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQotICAg
ICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fY29kZUJsb2NrLT5u
dW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICBpZiAobV91bmxp
bmtlZENvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMoKSB8fCBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygp
KSB7CisgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3dp
dGNoSnVtcFRhYmxlcygpKQorICAgICAgICAgICAgbV9zd2l0Y2hKdW1wVGFibGVzID0gRml4ZWRW
ZWN0b3I8U2ltcGxlSnVtcFRhYmxlPihtX3VubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZlVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYgKG1fdW5saW5rZWRDb2RlQmxvY2st
Pm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpCisgICAgICAgICAgICBt
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1f
dW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVz
KCkpOwogICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHko
KSB8fCAobV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIE9wdGlvbnM6OmRpc2Fzc2VtYmxl
QmFzZWxpbmVGb3JQcm9maWxlcigpKSkpCi0gICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVu
aXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkgfHwgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAm
JiBPcHRpb25zOjpkaXNhc3NlbWJsZUJhc2VsaW5lRm9yUHJvZmlsZXIoKSkpKSB7CisgICAgICAg
IC8vIEZJWE1FOiBidWlsZCBhIGRpc2Fzc2VtYmxlciBvZmYgb2YgVW5saW5rZWRDb2RlQmxvY2su
CisgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gbWFrZVVuaXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1f
cHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KICAgICBpZiAoVU5MSUtFTFkobV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyKSkgeworICAgICAgICAvLyBGSVhNRTogYnVpbGQgcHJvZmlsZXIgZGlz
YXNzZW1ibGVyIG9mZiBVbmxpbmtlZENvZGVCbG9jay4KICAgICAgICAgbV9jb21waWxhdGlvbiA9
IGFkb3B0UmVmKAogICAgICAgICAgICAgbmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbigKLSAgICAg
ICAgICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zv
cihtX2NvZGVCbG9jayksCisgICAgICAgICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29kZVByb2Zp
bGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9wcm9maWxlZENvZGVCbG9jayksCiAgICAgICAgICAg
ICAgICAgUHJvZmlsZXI6OkJhc2VsaW5lKSk7Ci0gICAgICAgIG1fY29tcGlsYXRpb24tPmFkZFBy
b2ZpbGVkQnl0ZWNvZGVzKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIsIG1fY29kZUJsb2Nr
KTsKKyAgICAgICAgbV9jb21waWxhdGlvbi0+YWRkUHJvZmlsZWRCeXRlY29kZXMoKm1fdm0tPm1f
cGVyQnl0ZWNvZGVQcm9maWxlciwgbV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAog
ICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9y
aWdpbihCeXRlY29kZUluZGV4KDApKSk7CkBAIC03NDMsMTEgKzc0MywxMiBAQCB2b2lkIEpJVDo6
Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1p
dEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2Rl
QmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CisgICAgaWYgKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAgICAgICBlbWl0UHV0Q29kZUJs
b2NrVG9GcmFtZUluUHJvbG9ndWUoKTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAK
LSAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwog
ICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsK
ICAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OwpAQCAtNzU4LDE2ICs3NTksMjAgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIG1vdmUocmVnVDEsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCi0g
ICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJl
Z2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsK
ICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOworICAgIGVtaXRNYXRlcmlh
bGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKCk7CiAKLSAgICBpZiAobV9jb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAgaWYgKG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCgh
bV9ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgeworICAgICAgICBpZiAoc2hvdWxk
RW1pdFByb2ZpbGluZygpICYmICghbV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3Rvcigp
IHx8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA+IDEpKSB7CisgICAgICAg
ICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2ssIHJlZ1QyKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgRml4ZWRWZWN0b3I8VmFsdWVQcm9m
aWxlPjo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZWdUMik7CisKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMg
YSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBz
aXRlICh0bwogICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3
ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCi0gICAgICAg
ICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQor
ICAgICAgICAgICAgICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkg
JiYgIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMo
YXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQpAQCAtNzc4LDEyICs3ODMsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5
bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgICAgICAgICAgICAgbG9hZDMy
KEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CiAjZW5kaWYKLSAgICAg
ICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1fY29kZUJsb2NrLT52YWx1ZVByb2Zp
bGVGb3JBcmd1bWVudChhcmd1bWVudCksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIHN0
b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwgYXJndW1lbnQgKiBzaXplb2YoVmFs
dWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUkVMRUFTRV9BU1NFUlQoIUpJ
VENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCghSklUQ29kZTo6aXNKSVQobV9wcm9maWxlZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAKICAg
ICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCiAgICAgICAgIG1fdm0tPmppdFNpemVTdGF0aXN0
aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhpcyk7CkBAIC04MDAsMjQgKzgw
NSwyNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgbV9i
eXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0
PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRp
b24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2NrKTsKKyAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2ssIHJl
Z1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24o
b3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIHJlZ1QwKTsKIAogICAgIC8vIElmIHRo
ZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciByZXF1aXJlIGFyaXR5IGZpeHVw
LgotICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1l
dGVycyAhPSAxOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CisgICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgIT0gMTsKKyAgICBpZiAobV91
bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNB
cml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxhYmVsKCk7Ci0gICAgICAgIHN0
b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGlu
ZWQpOworCiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Ci0gICAgICAgIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsK
KyAgICAgICAgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKHJlZ1QwKTsKKyAgICAg
ICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZz
ZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CiAKICAgICAgICAgbG9hZDMyKHBheWxvYWRG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMSk7Ci0g
ICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVC
bG9jay0+bV9udW1QYXJhbWV0ZXJzKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOworICAgICAg
ICBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIobV91bmxpbmtlZENv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOwogCiAg
ICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAKICAgICAgICAgaWYg
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/
IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjApOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24obV91
bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gb3BlcmF0aW9uQ29uc3RydWN0QXJp
dHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrLCBhcmd1bWVudEdQUjApOwogICAgICAg
ICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgICAgICBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLmxp
bmtUbyhiZWdpbkxhYmVsLCB0aGlzKTsKQEAgLTg0MCw3ICs4NDgsNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRF
bmRPZkNvZGUobGFiZWwoKSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5k
SXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2lu
KCkpOwogCi0gICAgbV9saW5rQnVmZmVyID0gc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+KG5l
dyBMaW5rQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6QmFz
ZWxpbmVKSVQsIGVmZm9ydCkpOworICAgIG1fbGlua0J1ZmZlciA9IHN0ZDo6dW5pcXVlX3B0cjxM
aW5rQnVmZmVyPihuZXcgTGlua0J1ZmZlcigqdGhpcywgbV91bmxpbmtlZENvZGVCbG9jaywgTGlu
a0J1ZmZlcjo6UHJvZmlsZTo6QmFzZWxpbmVKSVQsIGVmZm9ydCkpOwogICAgIGxpbmsoKTsKIH0K
IApAQCAtODU5LDggKzg2Nyw4IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgc3dpdGNoIChy
ZWNvcmQudHlwZSkgewogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlOgogICAg
ICAgICBjYXNlIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyOiB7Ci0gICAgICAgICAgICBjb25zdCBV
bmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICAgICAgICAgIFNpbXBsZUp1bXBU
YWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOworICAgICAgICAgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2Vk
VGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3
aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0
aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVs
c1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdW5saW5rZWRUYWJsZS5tX2JyYW5jaE9mZnNldHMuc2l6
ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB1bmxpbmtlZFRh
YmxlLm1fYnJhbmNoT2Zmc2V0c1tqXTsKQEAgLTg3Miw4ICs4ODAsOCBAQCB2b2lkIEpJVDo6bGlu
aygpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN3aXRjaFJlY29yZDo6U3RyaW5nOiB7Ci0g
ICAgICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
LSAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICAgICAgICAg
IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNb
dGFibGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIGN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29y
ZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGxvY2F0aW9uIDogdW5s
aW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAgICAgICAgICAgICAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hPZmZzZXQ7CkBAIC05MDcsNiArOTE1LDI3
IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsocmVjb3Jk
LmZyb20sIHJlY29yZC5jYWxsZWUpOwogICAgIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
YXV0byBmaW5hbGl6ZUlDcyA9IFsmXSAoYXV0byYgZ2VuZXJhdG9ycykgeworICAgICAgICBmb3Ig
KGF1dG8mIGdlbiA6IGdlbmVyYXRvcnMpIHsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8tPnN0YXJ0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRh
Zz4oZ2VuLm1fc3RhcnQpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mby0+ZG9u
ZUxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRyVGFnPihnZW4u
bV9kb25lKTsKKyAgICAgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3Rh
cnRMb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KGdlbi5tX3Nsb3dQYXRoQmVnaW4pOworICAgICAgICB9CisgICAgfTsKKworICAgIGZpbmFsaXpl
SUNzKG1fZ2V0QnlJZHMpOworICAgIGZpbmFsaXplSUNzKG1fZ2V0QnlWYWxzKTsKKyAgICBmaW5h
bGl6ZUlDcyhtX2dldEJ5SWRzV2l0aFRoaXMpOworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlJZHMp
OworICAgIGZpbmFsaXplSUNzKG1fcHV0QnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5
SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2RlbEJ5VmFscyk7CisgICAgZmluYWxpemVJQ3MobV9p
bkJ5SWRzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX2luQnlWYWxzKTsKKyAgICBmaW5hbGl6ZUlDcyht
X2luc3RhbmNlT2ZzKTsKKyAgICBmaW5hbGl6ZUlDcyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzKTsK
KyNlbHNlCiAgICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkcywgcGF0Y2hCdWZmZXIp
OwogICAgIGZpbmFsaXplSW5saW5lQ2FjaGVzKG1fZ2V0QnlWYWxzLCBwYXRjaEJ1ZmZlcik7CiAg
ICAgZmluYWxpemVJbmxpbmVDYWNoZXMobV9nZXRCeUlkc1dpdGhUaGlzLCBwYXRjaEJ1ZmZlcik7
CkBAIC05MTgsMjEgKzk0NywyNSBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgZmluYWxpemVJbmxp
bmVDYWNoZXMobV9pbkJ5VmFscywgcGF0Y2hCdWZmZXIpOwogICAgIGZpbmFsaXplSW5saW5lQ2Fj
aGVzKG1faW5zdGFuY2VPZnMsIHBhdGNoQnVmZmVyKTsKICAgICBmaW5hbGl6ZUlubGluZUNhY2hl
cyhtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLCBwYXRjaEJ1ZmZlcik7CisjZW5kaWYKIAogICAgIGZv
ciAoYXV0byYgY29tcGlsYXRpb25JbmZvIDogbV9jYWxsQ29tcGlsYXRpb25JbmZvKSB7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgVW5saW5rZWRDYWxsTGlua0luZm8mIGluZm8gPSAqY29t
cGlsYXRpb25JbmZvLnVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBpbmZvLmRvbmVMb2Nh
dGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNJbnRlcm5hbFB0clRhZz4oY29tcGlsYXRp
b25JbmZvLmRvbmVMb2NhdGlvbik7CisjZWxzZQogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8g
PSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKICAgICAgICAgaW5mby5zZXRDb2RlTG9j
YXRpb25zKAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0ludGVybmFsUHRy
VGFnPihjb21waWxhdGlvbkluZm8uc2xvd1BhdGhTdGFydCksCiAgICAgICAgICAgICBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KGNvbXBpbGF0aW9uSW5mby5kb25lTG9j
YXRpb24pKTsKKyNlbmRpZgorCiAgICAgfQogCi0gICAgewotICAgICAgICBKSVRDb2RlTWFwQnVp
bGRlciBqaXRDb2RlTWFwQnVpbGRlcjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgbV9sYWJlbHMuc2l6ZSgpOyArK2J5dGVjb2RlT2Zm
c2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkp
Ci0gICAgICAgICAgICAgICAgaml0Q29kZU1hcEJ1aWxkZXIuYXBwZW5kKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTRW50cnlQdHJUYWc+KG1f
bGFiZWxzW2J5dGVjb2RlT2Zmc2V0XSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY29kZUJsb2Nr
LT5zZXRKSVRDb2RlTWFwKGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCkpOworICAgIEpJVENv
ZGVNYXBCdWlsZGVyIGppdENvZGVNYXBCdWlsZGVyOworICAgIGZvciAodW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IG1fbGFiZWxzLnNpemUoKTsgKytieXRlY29k
ZU9mZnNldCkgeworICAgICAgICBpZiAobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXRdLmlzU2V0KCkp
CisgICAgICAgICAgICBqaXRDb2RlTWFwQnVpbGRlci5hcHBlbmQoQnl0ZWNvZGVJbmRleChieXRl
Y29kZU9mZnNldCksIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4obV9sYWJl
bHNbYnl0ZWNvZGVPZmZzZXRdKSk7CiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6
OmR1bXBEaXNhc3NlbWJseSgpKSkgewpAQCAtOTQxLDI2ICs5NzQsNDIgQEAgdm9pZCBKSVQ6Omxp
bmsoKQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShtX2NvbXBpbGF0aW9uKSkgeworICAgICAg
ICAvLyBGSVhNRTogc2hvdWxkIHdlIG1ha2UgdGhlIGJ5dGVjb2RlIHByb2ZpbGVyIGtub3cgYWJv
dXQgVW5saW5rZWRDb2RlQmxvY2s/CiAgICAgICAgIGlmIChPcHRpb25zOjpkaXNhc3NlbWJsZUJh
c2VsaW5lRm9yUHJvZmlsZXIoKSkKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRU
b1Byb2ZpbGVyKG1fY29tcGlsYXRpb24uZ2V0KCksIHBhdGNoQnVmZmVyKTsKLSAgICAgICAgbV92
bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX2NvZGVCbG9jaywgKm1f
Y29tcGlsYXRpb24pOworICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENv
bXBpbGF0aW9uKG1fcHJvZmlsZWRDb2RlQmxvY2ssICptX2NvbXBpbGF0aW9uKTsKICAgICB9CiAK
ICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuZGlkQnVpbGRNYXBwaW5nKCkpCiAg
ICAgICAgIG1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFw
PihXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKSwgcGF0Y2hCdWZmZXIpOwogICAg
IAorICAgIC8vIEZJWE1FOiBNYWtlIGEgdmVyc2lvbiBvZiBDb2RlQmxvY2tXaXRoSklUVHlwZSB0
aGF0IGtub3dzIGFib3V0IFVubGlua2VkQ29kZUJsb2NrLgogICAgIENvZGVSZWY8SlNFbnRyeVB0
clRhZz4gcmVzdWx0ID0gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsIEpTRW50
cnlQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmco
Q29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklUKSku
ZGF0YSgpKTsKKyAgICAgICAgIkJhc2VsaW5lIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhD
b2RlQmxvY2tXaXRoSklUVHlwZShtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpLmRhdGEoKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKU0VudHJ5UHRy
VGFnPihtX2FyaXR5Q2hlY2spOwotICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgRGlyZWN0
SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCkpOwor
ICAgIG1faml0Q29kZSA9IGFkb3B0UmVmKCpuZXcgQmFzZWxpbmVKSVRDb2RlKHJlc3VsdCwgd2l0
aEFyaXR5Q2hlY2spKTsKKworICAgIG1faml0Q29kZS0+bV91bmxpbmtlZENhbGxzID0gV1RGTW92
ZShtX3VubGlua2VkQ2FsbHMpOworICAgIG1faml0Q29kZS0+bV9ldmFsQ2FsbExpbmtJbmZvcyA9
IFdURk1vdmUobV9ldmFsQ2FsbExpbmtJbmZvcyk7CisgICAgbV9qaXRDb2RlLT5tX3VubGlua2Vk
U3R1YkluZm9zID0gV1RGTW92ZShtX3VubGlua2VkU3R1YkluZm9zKTsKKyAgICBtX2ppdENvZGUt
Pm1fc3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zd2l0Y2hKdW1wVGFibGVzKTsKKyAgICBt
X2ppdENvZGUtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzKTsKKyAgICBtX2ppdENvZGUtPm1faml0Q29kZU1hcCA9IGppdENvZGVNYXBC
dWlsZGVyLmZpbmFsaXplKCk7CisgICAgbV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNz
KTsKKyAgICBtX2ppdENvZGUtPm1fY29uc3RhbnRQb29sID0gV1RGTW92ZShtX2NvbnN0YW50UG9v
bCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBt
X2lzU2hhcmVhYmxlOworI2Vsc2UKKyAgICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBmYWxz
ZTsKKyNlbmRpZgogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQotICAgICAgICBkYXRh
TG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJs
b2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJl
c3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRyKCkpOworICAgICAgICBk
YXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5s
aW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdn
ZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7
CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1haW5UaHJlYWQoKQorQ29t
cGlsYXRpb25SZXN1bHQgSklUOjpmaW5hbGl6ZU9uTWFpblRocmVhZChDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKIApA
QCAtOTY5LDI1ICsxMDE4LDE0IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6ZmluYWxpemVPbk1h
aW5UaHIKIAogICAgIG1fbGlua0J1ZmZlci0+cnVuTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2tz
KCk7CiAKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChsb2NrZXIsIENv
ZGVCbG9jazo6U2hyaW5rTW9kZTo6TGF0ZVNocmluayk7Ci0gICAgfQotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpOyAr
K2kpIHsKLSAgICAgICAgSGFuZGxlckluZm8mIGhhbmRsZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0
aW9uSGFuZGxlcihpKTsKLSAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zOTQzMzMx
OD4uCi0gICAgICAgIGhhbmRsZXIubmF0aXZlQ29kZSA9IG1fY29kZUJsb2NrLT5qaXRDb2RlTWFw
KCkuZmluZChCeXRlY29kZUluZGV4KGhhbmRsZXIudGFyZ2V0KSkucmV0YWdnZWQ8RXhjZXB0aW9u
SGFuZGxlclB0clRhZz4oKTsKLSAgICB9Ci0KICAgICBpZiAobV9wY1RvQ29kZU9yaWdpbk1hcCkK
LSAgICAgICAgbV9jb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKFdURk1vdmUobV9wY1Rv
Q29kZU9yaWdpbk1hcCkpOworICAgICAgICBtX2ppdENvZGUtPm1fcGNUb0NvZGVPcmlnaW5NYXAg
PSBXVEZNb3ZlKG1fcGNUb0NvZGVPcmlnaW5NYXApOwogCiAgICAgbV92bS0+bWFjaGluZUNvZGVC
eXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklULT5hZGQoCiAgICAgICAgIHN0YXRpY19j
YXN0PGRvdWJsZT4obV9qaXRDb2RlLT5zaXplKCkpIC8KLSAgICAgICAgc3RhdGljX2Nhc3Q8ZG91
YmxlPihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CisgICAgICAgIHN0YXRpY19j
YXN0PGRvdWJsZT4obV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zU2l6ZSgpKSk7CiAK
LSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgY29kZUJsb2NrLT5zZXR1cFdpdGhVbmxpbmtlZEJhc2VsaW5lQ29kZShtX2ppdENvZGUu
cmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwog
fQpAQCAtOTk5LDExICsxMDM3LDExIEBAIHNpemVfdCBKSVQ6OmNvZGVTaXplKCkgY29uc3QKICAg
ICByZXR1cm4gbV9saW5rQnVmZmVyLT5zaXplKCk7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEpJ
VDo6cHJpdmF0ZUNvbXBpbGUoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVm
b3JlQ29tcGlsZSgpOwogICAgIGNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoZWZmb3J0
KTsKLSAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICByZXR1cm4gZmluYWxp
emVPbk1haW5UaHJlYWQoY29kZUJsb2NrKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
RXhjZXB0aW9uSGFuZGxlcnMoKQpAQCAtMTA0MywxOCArMTA4MSwyOCBAQCB2b2lkIEpJVDo6ZG9N
YWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDCiAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxv
ZygpLT5wcm9jZXNzTG9nRW50cmllcygqbV92bSwgIlByZXBhcmluZyBmb3IgSklUIGNvbXBpbGF0
aW9uLiJfcyk7CiB9CiAKLXVuc2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVC
bG9jayogY29kZUJsb2NrKQordW5zaWduZWQgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRGb3IoVW5s
aW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpID09IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Y29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkpKTsKIAogICAgIHJldHVybiByb3VuZExvY2Fs
UmVnaXN0ZXJDb3VudEZvckZyYW1lUG9pbnRlck9mZnNldChjb2RlQmxvY2stPm51bUNhbGxlZUxv
Y2FscygpICsgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyk7CiB9CiAK
LWludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3Vu
c2lnbmVkIEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQor
eworICAgIHJldHVybiBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrLT51bmxpbmtlZENv
ZGVCbG9jaygpKTsKK30KKworaW50IEpJVDo6c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKFVubGlua2Vk
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGZyYW1lUmVnaXN0ZXJDb3VudEZvcihjb2RlQmxvY2spIC0gMSkub2Zmc2V0KCk7CiB9CiAK
K2ludCBKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sK
KyAgICByZXR1cm4gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jay0+dW5saW5rZWRDb2Rl
QmxvY2soKSk7Cit9CisKIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gSklUOjpjb21waWxlVGlt
ZVN0YXRzKCkKIHsKICAgICBIYXNoTWFwPENTdHJpbmcsIFNlY29uZHM+IHJlc3VsdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogCiAj
ZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwgZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01F
U1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9mZnNldCBcIiVzXCIgc2hvdWxkIGJlICVk
LCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19jYXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0
aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5j
bHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCkBAIC00NCw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSklU
TWF0aElDLmgiCiAjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUg
IkpTSW50ZXJmYWNlSklULmgiCisjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiUENU
b0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJVbnVzZWRQb2ludGVyLmgiCiAjaW5jbHVkZSA8
d3RmL1VuaXF1ZVJlZi5oPgpAQCAtMTQ5LDE0ICsxNTEsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgfTsKIAogICAgIHN0cnVjdCBDYWxsQ29tcGlsYXRpb25JbmZvIHsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBkb25lTG9jYXRpb247CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgVW5saW5rZWRD
YWxsTGlua0luZm8qIHVubGlua2VkQ2FsbExpbmtJbmZvOworICAgICAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50OworI2Vsc2UKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIHNsb3dQYXRoU3RhcnQ7CiAgICAgICAgIENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvOworI2VuZGlmCiAgICAgfTsKIAogICAgIHZvaWQgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIsIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4g
bmV3Q2FsbGVlRnVuY3Rpb24pOwogCi0gICAgY2xhc3MgSklUX0NMQVNTX0FMSUdOTUVOVCBKSVQg
OiBwcml2YXRlIEpTSW50ZXJmYWNlSklUIHsKKyAgICBjbGFzcyBKSVRfQ0xBU1NfQUxJR05NRU5U
IEpJVCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRT
bG93UGF0aENhbGw7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViQ2FsbDsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEpJVFRodW5rczsKQEAgLTE3MSw2ICsxNzgsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gd2lsbCBjb21wcmVzcyB0aGUgZGlzcGxhY2VtZW50LCBhbmQgd2UgbWF5
IG5vdCBiZSBhYmxlIHRvIGZpdCBhIHBhdGNoZWQgb2Zmc2V0LgogICAgICAgICBzdGF0aWMgY29u
c3RleHByIGludCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0ID0gMjU2OwogCisgICAgICAgIHVz
aW5nIEJhc2UgPSBKU0ludGVyZmFjZUpJVDsKKwogICAgIHB1YmxpYzoKICAgICAgICAgSklUKFZN
JiwgQ29kZUJsb2NrKiA9IG51bGxwdHIsIEJ5dGVjb2RlSW5kZXggbG9vcE9TUkVudHJ5Qnl0ZWNv
ZGVPZmZzZXQgPSBCeXRlY29kZUluZGV4KDApKTsKICAgICAgICAgfkpJVCgpOwpAQCAtMTc4LDI4
ICsxODcsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZNJiB2bSgpIHsgcmV0dXJuICpK
U0ludGVyZmFjZUpJVDo6dm0oKTsgfQogCiAgICAgICAgIHZvaWQgY29tcGlsZUFuZExpbmtXaXRo
b3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCk7Ci0gICAgICAgIENvbXBpbGF0aW9u
UmVzdWx0IGZpbmFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0
IGZpbmFsaXplT25NYWluVGhyZWFkKENvZGVCbG9jayopOwogICAgICAgICBzaXplX3QgY29kZVNp
emUoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3Jl
Q29tcGlsZSgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNv
bXBpbGUoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25FZmZvcnQg
ZWZmb3J0LCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gQnl0ZWNvZGVJbmRleCgwKSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVCh2bSwgY29kZUJsb2NrLCBieXRlY29k
ZU9mZnNldCkucHJpdmF0ZUNvbXBpbGUoZWZmb3J0KTsKKyAgICAgICAgICAgIHJldHVybiBKSVQo
dm0sIGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQpLnByaXZhdGVDb21waWxlKGNvZGVCbG9jaywg
ZWZmb3J0KTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lz
dGVyQ291bnRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGZyYW1lUmVnaXN0ZXJDb3VudEZvcihDb2RlQmxvY2sqKTsKKyAgICAgICAgc3RhdGljIGludCBz
dGFja1BvaW50ZXJPZmZzZXRGb3IoVW5saW5rZWRDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGlj
IGludCBzdGFja1BvaW50ZXJPZmZzZXRGb3IoQ29kZUJsb2NrKik7CiAKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIEhhc2hNYXA8Q1N0cmluZywgU2Vjb25kcz4gY29tcGlsZVRpbWVT
dGF0cygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU2Vjb25kcyB0b3RhbENv
bXBpbGVUaW1lKCk7CiAKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc19tZXRhZGF0
YUdQUiA9IExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFibGVHUFI7CisgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNfY29uc3RhbnRzR1BSID0gTExJbnQ6OlJlZ2lzdGVyczo6cGJH
UFI7CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlTWFpblBhc3Mo
KTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7CiAgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKICAgICAgICAgdm9pZCBsaW5rKCk7Ci0gICAgICAg
IENvbXBpbGF0aW9uUmVzdWx0IHByaXZhdGVDb21waWxlKEpJVENvbXBpbGF0aW9uRWZmb3J0KTsK
KyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJpdmF0ZUNvbXBpbGUoQ29kZUJsb2NrKiwgSklU
Q29tcGlsYXRpb25FZmZvcnQpOwogCiAgICAgICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklU
IGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgogICAgICAgICBDYWxsIGFwcGVuZENh
bGwoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbikKQEAgLTIyMyw2
ICsyMzcsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAgICAgdm9pZCBsb2FkUHRyRnJvbU1l
dGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDMyRnJvbU1l
dGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90IG9mZnNldCwgR1BSUmVnKTsKKworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgbG9hZDhGcm9tTWV0
YWRhdGEoY29uc3QgQnl0ZWNvZGUmLCBzaXplX3Qgb2Zmc2V0LCBHUFJSZWcpOworCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIHN0b3JlOFRvTWV0YWRhdGEoVmFsdWVUeXBlLCBjb25zdCBCeXRlY29kZSYsIHNpemVf
dCBvZmZzZXQpOworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KKyAgICAg
ICAgdm9pZCBzdG9yZTMyVG9NZXRhZGF0YShHUFJSZWcsIGNvbnN0IEJ5dGVjb2RlJiwgc2l6ZV90
IG9mZnNldCk7CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAg
ICB2b2lkIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShjb25zdCBCeXRlY29kZSYsIHNp
emVfdCBvZmZzZXQsIEdQUlJlZyk7CisKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgbG9hZENv
bnN0YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CisgICAgcHJpdmF0ZToKKyAg
ICAgICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7CisgICAgICAgIHZvaWQgbG9hZENv
ZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKworICAgICAgICB2b2lk
IGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDAp
OworCiAgICAgICAgIHZvaWQgZXhjZXB0aW9uQ2hlY2soSnVtcCBqdW1wVG9IYW5kbGVyKQogICAg
ICAgICB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxl
cik7CkBAIC0yNTQsNiArMjk0LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNv
bXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGNvbXBpbGVP
cENhbGxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCk7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lm
X3Q8CisgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJhcmdzICYmIE9wOjpv
cGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncworICAgICAgICAgICAgJiYgT3A6Om9wY29k
ZUlEICE9IG9wX3RhaWxfY2FsbF92YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF90YWlsX2Nh
bGxfZm9yd2FyZF9hcmd1bWVudHMKKyAgICAgICAgLCB2b2lkPiBjb21waWxlU2V0dXBGcmFtZShj
b25zdCBPcCYsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmZvQ29uc3RhbnQp
OworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAgICAgICBzdGQ6OmVuYWJsZV9p
Zl90PAorICAgICAgICAgICAgT3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6
b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKKyAgICAgICAgICAgIHx8IE9wOjpvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzCisgICAgICAgICwgdm9pZD4gY29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50
KTsKKyNlbHNlCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBzdGQ6OmVu
YWJsZV9pZl90PAogICAgICAgICAgICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAm
JiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKQEAgLTI2NSw5ICszMTgsMTAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbF92
YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncwogICAgICAgICAg
ICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKICAgICAgICAgLCB2b2lkPiBjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYsIENhbGxMaW5rSW5mbyopOworI2VuZGlmCiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIGJvb2wgY29tcGlsZVRhaWxDYWxsKGNv
bnN0IE9wJiwgQ2FsbExpbmtJbmZvKiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOworICAg
ICAgICBib29sIGNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcCYsIFVubGlua2VkQ2FsbExpbmtJbmZv
KiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQp
OwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgYm9vbCBjb21waWxlQ2Fs
bEV2YWwoY29uc3QgT3AmKTsKICAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAg
LTI4NywxNCArMzQxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0
ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdy
aXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAg
dm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOworICAgICAgICB2b2lkIGVtaXRX
cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAogICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhh
dCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiByZWdUMCBhbmQgdGhhdCByZWdUMyBpcyBhdmFp
bGFibGUgZm9yCiAgICAgICAgIC8vIHNjcmF0Y2guCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKFZhbHVlUHJvZmlsZSYsIEdQUlJlZyk7Ci0g
ICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVl
UmVncyk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmLCBHUFJSZWcpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKE1ldGFkYXRhJiwgSlNW
YWx1ZVJlZ3MpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4gdm9pZCBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVjb2RlJiwgR1BSUmVnKTsKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25z
dCBCeXRlY29kZSYsIEpTVmFsdWVSZWdzKTsKICNlbHNlCiAgICAgICAgIHZvaWQgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyk7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRh
dGEmLCBKU1ZhbHVlUmVncyk7CkBAIC0zMDUsOCArMzU4LDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRh
dGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPgogICAgICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSk7CiAKLSAgICAg
ICAgdm9pZCBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BS
LCBBcnJheVByb2ZpbGUqLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOwotICAgICAgICB2b2lkIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVy
SUQgYXJyYXlQcm9maWxlR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CisgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiwgUmVnaXN0ZXJJRCBjZWxsR1BSLCBSZWdpc3Rl
cklEIHNjcmF0Y2hHUFIpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Cisg
ICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2Rl
JiwgcHRyZGlmZl90LCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUik7
CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIEVDTUFNb2RlIGVjbWFN
b2RlKE9wKTsKQEAgLTU5NCw3ICs2NDksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0
cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02MjgsMTQgKzY4
MiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dD
YXNlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYs
IGJvb2wgaXNVbnNpZ25lZCk7CiAKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZShWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3Bl
cnR5T3JCcmFuZCwgQWNjZXNzVHlwZSk7Ci0gICAgICAgIHZvaWQgZW1pdEhhc1ByaXZhdGVTbG93
KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUpOworICAgICAgICB2b2lkIGVtaXRIYXNQ
cml2YXRlU2xvdyhWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5LCBBY2Nlc3NUeXBlKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgdm9pZCBlbWl0
TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0
VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAg
IHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUpOworICAgICAgICB2b2lkIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcp
OworICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBHUFJSZWcg
c2NyYXRjaEdQUik7CiAgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdp
c3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcywgdW5zaWduZWQgZGVwdGgpOwogICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY0Nyw3ICs3MDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICNlbmRpZgogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBz
Y29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShX
YXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2lu
dGVyVG9TZXQpOworICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVn
IHBvaW50ZXJUb1NldCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFs
dWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogICAg
ICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNz
T2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7CiAgICAg
ICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRy
X3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CkBAIC02
NTYsNiArNzEwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0UHV0SW50
VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCisg
ICAgICAgIGJvb2wgaXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgSlNWYWx1
ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgYm9vbCBpc09w
ZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBib29sIGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwpAQCAtNjc3LDEzICs3MzIsMTEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3df
b3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dl
dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJvbV9zY29wZUdl
bmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3Io
Vk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gc2xvd19vcF9wdXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRf
YnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9w
cmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcihWTSYp
OwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBz
bG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKIAogICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFwc19oYW5kbGVy
R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKQEAgLTY5NywzMCAr
NzUwLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5
cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IFJlc29sdmVkQ2xvc3VyZVZhciB8fCBy
ZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwogICAgICAgICB9CiAKLSNkZWZpbmUgREVDTEFSRV9H
RVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKLSAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNy
ZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQ
RShERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBERUNMQVJFX0dFVF9G
Uk9NX1NDT1BFX0dFTkVSQVRPUgotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpOwotCi0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVu
a0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVu
dCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgotICAgICAgICAgICAgLy8gUmVzb2x2
ZWRDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVz
b2x2ZV9zY29wZS4KLSAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IFJlc29sdmVk
Q2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOwotICAgICAgICB9Ci0KLSNk
ZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAotICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNv
bHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOwotICAgICAgICBGT1JfRUFD
SF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKLSN1bmRlZiBE
RUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCi0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2
ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7Ci0KICAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYp
OwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2
YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CiAKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRv
cihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21T
Y29wZVRodW5rKFZNJiwgc3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4sIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSk7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYsIHN0ZDo6b3B0aW9uYWw8UmVz
b2x2ZVR5cGU+LCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCiAgICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTc2MSwxMCArNzk3LDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aENhbGxGcmFt
ZVJvbGxiYWNrT25FeGNlcHRpb24oY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQpOwogICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQp
OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRX
aXRoUHJvZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4s
IFZpcnR1YWxSZWdpc3RlciByZXN1bHQpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRh
ZGF0YT4KLSAgICAgICAgdm9pZCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRhJiwgQWRkcmVzcywgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCk7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEJ5dGVjb2RlPgorICAgICAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmLCBBZGRyZXNzLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wZXJhdGlvblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxl
X2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGw+CkBAIC04MjIsMjAgKzg1OCwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soQWRkcmVzcyhHUFJJbmZvOjpub25B
cmdHUFIwLCB0YXJnZXQub2Zmc2V0KSk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJn
cz4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lIE9wZXJhdGlv
blR5cGUsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rp
b25UcmFpdHM8T3BlcmF0aW9uVHlwZT46Omhhc1Jlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkNhbGw+
Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShNZXRhZGF0YSYgbWV0YWRhdGEsIE9w
ZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBBcmdzLi4uIGFy
Z3MpCisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBB
cmdzLi4uIGFyZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldHVwQXJndW1lbnRzPE9wZXJh
dGlvblR5cGU+KGFyZ3MuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlv
biwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb24sIHJlc3Vs
dCk7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBl
LCB0eXBlbmFtZSBNZXRhZGF0YSwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3BlcmF0aW9uVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGUsIHR5cGVuYW1lLi4uIEFy
Z3M+CiAgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8RnVuY3Rpb25UcmFpdHM8T3BlcmF0aW9uVHlw
ZT46Omhhc1Jlc3VsdCwgdm9pZD4KLSAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKE1l
dGFkYXRhJiBtZXRhZGF0YSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQs
IEFyZ3MuLi4gYXJncykKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGNvbnN0IEJ5
dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyB0YXJnZXQsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQs
IEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAgICAgc2V0dXBBcmd1bWVudHNGb3JJ
bmRpcmVjdENhbGw8T3BlcmF0aW9uVHlwZT4odGFyZ2V0LCBhcmdzLi4uKTsKLSAgICAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQ
cm9maWxlKG1ldGFkYXRhLCBBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIHRhcmdldC5vZmZz
ZXQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoYnl0ZWNvZGUsIEFkZHJlc3MoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgdGFyZ2V0Lm9mZnNldCksIHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgpA
QCAtOTIwLDI1ICs5NTYsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6
ZWQ7IH0KLSAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIG1f
Y2FuQmVPcHRpbWl6ZWRPcklubGluZWQ7IH0KICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmls
aW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxzZQogICAgICAgICBi
b29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgYm9vbCBjYW5C
ZU9wdGltaXplZE9ySW5saW5lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIEVuYWJs
ZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGggdGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBv
ZmYsCiAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgYWxsIGNvZGUgZ2V0cyBwcm9maWxlZC4KICAg
ICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRp
ZgogCisgICAgICAgIHZvaWQgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xS
ZWdpc3RlcnMoKTsKKworICAgICAgICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKwog
ICAgICAgICBzdGF0aWMgYm9vbCByZXBvcnRDb21waWxlVGltZXMoKTsKICAgICAgICAgc3RhdGlj
IGJvb2wgY29tcHV0ZUNvbXBpbGVUaW1lcygpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgeW91
IG5lZWQgdG8gY2hlY2sgYSB2YWx1ZSBmcm9tIHRoZSBtZXRhZGF0YSB0YWJsZSBhbmQgeW91IG5l
ZWQgaXQgdG8KLSAgICAgICAgLy8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhc3QgYW5kIHNs
b3cgcGF0aCwgdGhlbiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KLSAgICAgICAgLy8gSXQgd2lsbCBn
aXZlIHRoZSBzbG93IHBhdGggdGhlIHNhbWUgdmFsdWUgcmVhZCBieSB0aGUgZmFzdCBwYXRoLgot
ICAgICAgICBHZXRQdXRJbmZvIGNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlKTsKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+Ci0gICAgICAgIEJpbmFyeUFyaXRoUHJvZmls
ZSBjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5T3ApOworCisgICAgICAgIHZvaWQgcmVzZXRTUCgp
OwogCiAgICAgICAgIEludGVycHJldGVyKiBtX2ludGVycHJldGVyOwogCkBAIC05NjUsOSArOTk4
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5PiBtX3Ns
b3dDYXNlczsKICAgICAgICAgVmVjdG9yPFN3aXRjaFJlY29yZD4gbV9zd2l0Y2hlczsKIAotICAg
ICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9jb3BpZWRHZXRQdXRJbmZvczsKLSAg
ICAgICAgSGFzaE1hcDx1aW50NjRfdCwgQmluYXJ5QXJpdGhQcm9maWxlPiBtX2NvcGllZEFyaXRo
UHJvZmlsZXM7Ci0KICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAg
IEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwogI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEwMDEsMTEgKzEwMzEsMjYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgSW5zdHJ1Y3Rpb24qLCBVbmlxdWVSZWY8TWF0
aElDR2VuZXJhdGlvblN0YXRlPj4gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRl
OwogCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKLSAgICAgICAgYm9vbCBtX2NhbkJl
T3B0aW1pemVkT3JJbmxpbmVkOwogICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsK
ICAgICAgICAgQnl0ZWNvZGVJbmRleCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAKLSAg
ICAgICAgUmVmUHRyPERpcmVjdEpJVENvZGU+IG1faml0Q29kZTsKKyAgICAgICAgQ29kZUJsb2Nr
KiBtX3Byb2ZpbGVkQ29kZUJsb2NrIHsgbnVsbHB0ciB9OworICAgICAgICBVbmxpbmtlZENvZGVC
bG9jayogbV91bmxpbmtlZENvZGVCbG9jayB7IG51bGxwdHIgfTsKKworICAgICAgICBNYXRoSUNI
b2xkZXIgbV9tYXRoSUNzOworICAgICAgICBSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBtX2ppdENv
ZGU7CisKKyAgICAgICAgSklUQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOworICAgICAgICBK
SVRDb25zdGFudFBvb2w6OkNvbnN0YW50IG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQgeyBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKKyAgICAgICAgQmFnPFVubGlua2VkQ2Fs
bExpbmtJbmZvPiBtX3VubGlua2VkQ2FsbHM7CisgICAgICAgIEJhZzxDYWxsTGlua0luZm8+IG1f
ZXZhbENhbGxMaW5rSW5mb3M7CisgICAgICAgIEJhZzxVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZv
PiBtX3VubGlua2VkU3R1YkluZm9zOworICAgICAgICBGaXhlZFZlY3RvcjxTaW1wbGVKdW1wVGFi
bGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgRml4ZWRWZWN0b3I8U3RyaW5nSnVtcFRh
YmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisKKyAgICAgICAgc3RydWN0IE5vdEFDb2Rl
QmxvY2sgeyB9IG1fY29kZUJsb2NrOworCisgICAgICAgIGJvb2wgbV9pc1NoYXJlYWJsZSB7IHRy
dWUgfTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjgzMTMxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjkyLDkgKzI5MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBs
KFZpCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0
YW50Q2hhcihvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbiwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgYXJndW1lbnRHUFIyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVu
dEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzIwLDcgKzMyMSw4IEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAgICAgfQogCiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzQ2LDcg
KzM0OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmkKICAgICAg
ICAgfQogCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMik7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QyLCBy
ZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMzcyLDcgKzM3NSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvd0ltcGwoVmkKICAgICB9CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBu
b3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMCwg
cmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJv
IDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC01NzMsNyArNTc3
LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IAogCiAgICAgZW1p
dExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1Qy
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbiwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC03MTcsOCAr
NzIyLDggQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cgogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9m
aWxlOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhh
cml0aFByb2ZpbGUpOworICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fbWF0aElDcy5h
ZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQo
Y3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJQyk7CiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJl
IGJldHRlciB0byBjYWxsIHRob3NlIG9wZXJhdGlvblZhbHVlTmVnYXRlLCBzaW5jZSB0aGUgb3Bl
cmFuZCBjYW4gYmUgYSBCaWdJbnQKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRl
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3Bl
cmF0aW9uQXJpdGhOZWdhdGUpOwpAQCAtODk5LDggKzkwNCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQmluYXJ5QXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0
YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9j
b2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgQmluYXJ5QXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOworICAgIEpJVEFkZElDKiBh
ZGRJQyA9IG1fbWF0aElDcy5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUpOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
QWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTk0NSwxMCArOTUwLDExIEBA
IHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKICAgICBib29sIGdlbmVy
YXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBV
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsK
KyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKICAgICAgICAgaWYgKGFyaXRo
UHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmls
ZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc3JjUmVncyk7CiAgICAgfSBlbHNl
CiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBz
KTsKIApAQCAtMTAxNSwxMCArMTAyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklU
QmluYXJ5TWF0aElDCiAgICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCiAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKICAgICAg
ICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmls
ZSgpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAo
YXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
YXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2Zp
bGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CisgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKICAgICB9IGVsc2UKICAg
ICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwog
CkBAIC0xMDU1LDEzICsxMDYyLDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFy
eU1hdGhJQzwKICNlbmRpZgogCiAgICAgVW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAg
ICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
aWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVs
c2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJl
cGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlv
biksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwog
CiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVs
KCk7CkBAIC0xMTIwLDEzICsxMTI4LDE0IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRC
aW5hcnlNYXRoSUMKICNlbmRpZgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQp
OwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAg
ICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJ
QykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+
KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgcmVnVDQsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmls
ZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgcmVnVDQs
IGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24p
LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3Vs
dChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihyZXBhdGNoRnVuY3Rpb24pLCBy
ZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRo
SUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gc2xvd1BhdGhFbmQg
PSBsYWJlbCgpOwpAQCAtMTE2Niw3ICsxMTc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNv
bnN0IEluc3RydWN0aW9uKgogCiAgICAgQmluYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2Fy
aXRoUHJvZmlsZTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1f
b3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CkBAIC0xMjExLDggKzEyMjAsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0
X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEJp
bmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwotICAgIEpJVE11
bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAg
IEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE11bD4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsK
KyAgICBKSVRNdWxJQyogbXVsSUMgPSBtX21hdGhJQ3MuYWRkSklUTXVsSUMoYXJpdGhQcm9maWxl
KTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVs
SUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudEluc3RydWN0aW9u
LCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CkBAIC0x
MjI3LDggKzEyMzYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0
CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQ
cm9maWxlOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhh
cml0aFByb2ZpbGUpOworICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2Nr
KS5tX2FyaXRoUHJvZmlsZTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX21hdGhJQ3MuYWRkSklU
U3ViSUMoYXJpdGhQcm9maWxlKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJl
bnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywg
Y3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25W
YWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJf
NjQuY3BwCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3Vs
dChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGVtaXRTdG9yZShkZXN0
aW5hdGlvbkZvcihieXRlY29kZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVh
bFJlZ2lzdGVyKCksIHJlZ1QxLCByZWdUMCk7CiB9CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBzdGQ6
OmVuYWJsZV9pZl90PAogSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUs
IENhbGxMaW5rSW5mbyopCiB7CiAgICAgdW5zaWduZWQgY2hlY2twb2ludCA9IG1fYnl0ZWNvZGVJ
bmRleC5jaGVja3BvaW50KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnQgPSBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpc0ZvcihieXRlY29kZSwgY2hlY2twb2ludCk7CiAgICAgaW50IHJlZ2lzdGVyT2Zm
c2V0ID0gLXN0YXRpY19jYXN0PGludD4oc3RhY2tPZmZzZXRJblJlZ2lzdGVyc0ZvckNhbGwoYnl0
ZWNvZGUsIGNoZWNrcG9pbnQpKTsKIApAQCAtMTkyLDcgKzE5Miw3IEBAIEpJVDo6Y29tcGlsZVNl
dHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJh
dGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7CiAgICAgZWxzZQogICAgICAgICBzaXpl
T3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0
aW9uKHNpemVPcGVyYXRpb24sIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7
CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgLWZpcnN0RnJlZVJlZ2lz
dGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJl
ZVJlZ2lzdGVyKSwgcmVnVDEpOwogICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVy
blZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0
YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNiAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CkBAIC0yMDIsNyArMjAyLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFt
ZShjb25zdCBPcCYgYnl0ZWNvZAogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNl
dHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgIGVsc2UKICAgICAgICAgc2V0dXBPcGVyYXRp
b24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0aW9uKHNldHVw
T3BlcmF0aW9uLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVn
cyhyZWdUMiwgcmVnVDQpLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIGNhbGxPcGVy
YXRpb24oc2V0dXBPcGVyYXRpb24sIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0KSwgZmlyc3RWYXJBcmdPZmZzZXQsIHJl
Z1QwKTsKICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMSk7CiAKICAgICAvLyBQcm9maWxl
IHRoZSBhcmd1bWVudCBjb3VudC4KQEAgLTIzMiwxMCArMjMyLDEwIEBAIGJvb2wgSklUOjpjb21w
aWxlQ2FsbEV2YWwoY29uc3QgT3BDYWxsRXYKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50
ZXJSZWdpc3RlciwgcmVnVDEpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRy
ZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRD
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZh
bCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgcmVnVDIpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCByZWdUMSwgcmVnVDIpOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShy
ZWdUMSkpOwogCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNs
b3dDYXNlKGNvbnN0IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7Ci0gICAgQ2FsbExpbmtJbmZv
KiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCkpOworICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fcHJvZmlsZWRDb2RlQmxvY2st
PmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwogICAgIGluZm8t
PnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsKIAogICAgIGludCByZWdpc3Rl
ck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBAIC0yNTgsOCArMjU4LDggQEAgdm9pZCBKSVQ6
OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
cmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIGVt
aXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0VmlydHVhbENhbGwoKm1fdm0s
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgZW1pdFZp
cnR1YWxDYWxsKCptX3ZtLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgaW5m
byk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxp
bmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwog
CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwpAQCAtMjg2LDExICsyODYsMTEgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgICovCiAgICAgQ2Fs
bExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKICAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9l
dmFsKQotICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCkpOworICAgICAgICBpbmZvID0gbV9wcm9maWxlZENvZGVCbG9j
ay0+YWRkQ2FsbExpbmtJbmZvKENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSk7CiAgICAgY29t
cGlsZVNldHVwRnJhbWUoYnl0ZWNvZGUsIGluZm8pOwogICAgIC8vIFNQIGhvbGRzIG5ld0NhbGxG
cmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRp
YWxpemVkLgogICAgIAotICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IG1fY29kZUJsb2NrLT5ieXRl
Y29kZUluZGV4KGluc3RydWN0aW9uKTsKKyAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5ieXRlY29kZUluZGV4KGluc3RydWN0aW9uKTsKICAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1Qx
LCByZWdUMCk7IC8vIHJlZ1QxLCByZWdUMCBob2xkcyBjYWxsZWUuCkBAIC0zMjQsNyArMzI0LDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGFkZFNsb3dD
YXNlKHNsb3dQYXRocyk7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5kb25lTG9jYXRpb24gPSBsYWJlbCgpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
ICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1
bHQoYnl0ZWNvZGUpOwpAQCAtMzQxLDEyICszNDEsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGxTbG93Q2FzZShjb25zdCBJbgogICAgIH0KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5zbG93UGF0aFN0
YXJ0ID0gbGFiZWwoKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDMpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIHJlZ1QzKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmNhbGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CiAKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewpA
QCAtMzU0LDcgKzM1Myw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3Qg
SW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CkBAIC0zOTUsNyArMzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIEpTVmFsdWVSZWdzIG5leHRSZWdzID0gSlNW
YWx1ZVJlZ3ModGFnTmV4dEdQUiwgcGF5bG9hZE5leHRHUFIpOwogCiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLAorICAgICAgICBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLAogICAgICAgICBKSVRUeXBlOjpCYXNlbGluZUpJVCwKICAgICAgICAgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksCkBAIC00MTAsNyArNDA5LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbgogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBuZXh0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKSwgbmV4dFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9uZXh0LCBuZXh0UmVncyk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwpAQCAtNDQw
LDEwICs0MzksMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIC8vIG1ldGFkYXRhCisgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spLCAvLyBtZXRhZGF0YQogICAgICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUs
IC8vIG9wZXJhdGlvbgogICAgICAgICBuZXh0VlJlZywgLy8gcmVzdWx0Ci0gICAgICAgIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICBU
cnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJn
MQogICAgICAgICBnZW4uc3R1YkluZm8oKSwgLy8gYXJnMgogICAgICAgICBKU1ZhbHVlUmVncyh0
YWdJdGVyYXRvckdQUiwgcGF5bG9hZEl0ZXJhdG9yR1BSKSwgLy8gYXJnMwogICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdC
aXRzKCkpOyAvLyBhcmc0CkBAIC00NTIsNyArNDUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2l0ZXJhdG9yX29wZW4oY29ucwogICAgIGF1dG8gZG9uZSA9IGp1bXAoKTsKIAogICAgIG5vdE9i
amVjdC5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRv
clJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSkpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElz
Tm90T2JqZWN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00NjAsNyArNDU5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIGF1
dG8qIHRyeUZhc3RGdW5jdGlvbiA9IChbJl0gKCkgewogICAgICAgICBzd2l0Y2ggKGluc3RydWN0
aW9uLT53aWR0aCgpKSB7CiAgICAgICAgIGNhc2UgTmFycm93OiByZXR1cm4gaXRlcmF0b3JfbmV4
dF90cnlfZmFzdF9uYXJyb3c7CkBAIC01MDYsNyArNTA1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh0YWdWYWx1
ZUdQUik7CiAgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKHBheWxvYWRWYWx1ZUdQUik7CiAgICAg
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssCisg
ICAgICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLAogICAgICAgICAgICAgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsCiAgICAgICAgICAgICBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksCiAgICAg
ICAgICAgICBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNl
dCgpKSksCkBAIC01MzMsMTAgKzUzMiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9u
ZXh0KGNvbnN0IEluCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Q2OwogICAgICAgICBH
UFJSZWcgc2NyYXRjaDIgPSByZWdUNzsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgSnVtcExpc3QgaXRlcmF0aW9u
RG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHRhZ0RvbmVHUFIsIHBheWxv
YWREb25lR1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7
CisgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBK
U1ZhbHVlUmVncyh0YWdEb25lR1BSLCBwYXlsb2FkRG9uZUdQUiksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBt
X3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CiAKICAgICAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywKKyAgICAgICAgICAgIG1f
cHJvZmlsZWRDb2RlQmxvY2ssCiAgICAgICAgICAgICBKSVRUeXBlOjpCYXNlbGluZUpJVCwKICAg
ICAgICAgICAgIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwKICAgICAgICAgICAgIENhbGxT
aXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwKQEAgLTU4
OCwxMCArNTg3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnMK
ICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICAgICAgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICAgICAgYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAgICAgICAgICAgYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIC8vIG1ldGFkYXRhCiAgICAgICAgICAgICBvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgogICAgICAgICAgICAgZG9uZVZSZWcs
IC8vIHJlc3VsdAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCAvLyBhcmcxCisgICAgICAgICAgICBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgLy8gYXJnMQogICAgICAgICAgICAgZ2VuLnN0dWJJ
bmZvKCksIC8vIGFyZzIKICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHRhZ0l0ZXJSZXN1bHRHUFIs
IHBheWxvYWRJdGVyUmVzdWx0R1BSKSwgLy8gYXJnMwogICAgICAgICAgICAgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsg
Ly8gYXJnNApAQCAtNjAyLDcgKzYwMSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRv
cl9uZXh0KGNvbnMKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAo
KSk7CiAKICAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElzTm90T2JqZWN0LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAgIH0KIAogICAgIHsgICAKQEAg
LTYxOCwxMCArNjE3LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNv
bnMKICAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICAgICAgICAgQ2Fs
bCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKAotICAgICAgICAgICAgYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spLCAvLyBtZXRhZGF0YQorICAgICAgICAgICAgYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIC8vIG1ldGFkYXRhCiAgICAgICAgICAgICBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIC8vIG9wZXJhdGlvbgogICAgICAgICAgICAgdmFsdWVW
UmVnLCAvLyByZXN1bHQKLSAgICAgICAgICAgIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgLy8gYXJnMQorICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIC8vIGFyZzEKICAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLCAvLyBhcmcyCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyh0YWdJdGVyUmVzdWx0
R1BSLCBwYXlsb2FkSXRlclJlc3VsdEdQUiksIC8vIGFyZzMKICAgICAgICAgICAgIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7IC8vIGFyZzQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2
aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZm
bGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgor
I2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlNldHVwVmFy
YXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiU3RhY2tB
bGlnbm1lbnQuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNv
ZGUpCiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBy
ZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbkZvcihieXRlY29k
ZSwgbV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkudmlydHVhbFJlZ2lzdGVyKCksIHJlZ1Qw
KTsKIH0KIApAQCAtNTMsMTggKzU0LDE4IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9w
Y29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0
X3ZhcmFyZ3MKICAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYg
T3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgot
SklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyop
CitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQ
b29sOjpDb25zdGFudCkKIHsKICAgICB1bnNpZ25lZCBjaGVja3BvaW50ID0gbV9ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKICAgICBpbnQgYXJnQ291bnRJbmNsdWRpbmdUaGlzID0gYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXNGb3IoYnl0ZWNvZGUsIGNoZWNrcG9pbnQpOwogICAgIGludCByZWdp
c3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KHN0YWNrT2Zmc2V0SW5SZWdpc3RlcnNGb3JD
YWxsKGJ5dGVjb2RlLCBjaGVja3BvaW50KSk7CiAKKwogICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0g
b3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFy
Z3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1QwKTsKICAgICAgICAgSnVtcCBkb25l
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgc3RvcmUzMihy
ZWdUMCwgYXJyYXlQcm9maWxlRm9yKG1ldGFkYXRhLCBjaGVja3BvaW50KS5hZGRyZXNzT2ZMYXN0
U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyVG9NZXRhZGF0YShyZWdUMCwgYnl0
ZWNvZGUsIE9wQ2FsbDo6TWV0YWRhdGE6Om9mZnNldE9mQ2FsbExpbmtJbmZvKCkgKyBMTEludENh
bGxMaW5rSW5mbzo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSArIEFycmF5UHJvZmlsZTo6b2Zmc2V0
T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAg
fQogCkBAIC03OCw3ICs3OSw3IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAgICAgT3A6Om9wY29kZUlE
ID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFy
Z3MKICAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwogLCB2b2lkPgotSklUOjpj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbykK
K0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mb0NvbnN0YW50KQogewogICAgIFZpcnR1YWxSZWdpc3Rl
ciB0aGlzVmFsdWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
YXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CkBAIC05MSw3ICs5Miw4IEBAIEpJVDo6
Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2QKICAgICAgICAgc2l6ZU9wZXJhdGlv
biA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7CiAgICAgZWxzZQogICAg
ICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJnczsKLSAgICBj
YWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZz
ZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOworICAgIGNhbGxPcGVyYXRpb24oc2l6
ZU9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJn
T2Zmc2V0KTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdU
MSk7CiAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIsIGZhbHNl
LCByZWdUMSwgcmVnVDEpOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLShzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRl
cygpLCA1ICogc2l6ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
QEAgLTEwMSwxNCArMTAzLDE2IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5
dGVjb2QKICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1
bWVudHNGcmFtZTsKICAgICBlbHNlCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9u
U2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMSwgcmVnVDIsIGZp
cnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Cisg
ICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVnVDMsIHJlZ1QxLCByZWdUMiwgZmly
c3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMSk7
CiAKICAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KICAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsK
LSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
KSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwg
cmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFkZHJlc3NPZk1heEFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCkpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFu
dCwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNl
dE9mTWF4QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHJlZ1QzKTsKKyAgICBKdW1wIG5v
dEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDMsIHJlZ1QyKTsKKyAgICBzdG9yZTMyKHJl
Z1QyLCBBZGRyZXNzKHJlZ1QwLCBDYWxsTGlua0luZm86Om9mZnNldE9mTWF4QXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoKSkpOwogICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsKICAgICAKICAg
ICAvLyBJbml0aWFsaXplICd0aGlzJy4KQEAgLTEyNywxNiArMTMxLDE1IEBAIGJvb2wgSklUOjpj
b21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQogdGVtcGxhdGU8PgogYm9vbCBKSVQ6OmNvbXBpbGVD
YWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkKIHsKLSAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkp
LCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJl
Z2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsK
LQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGFyZ3VtZW50R1BSMSk7CisgICAgc3RvcmVQ
dHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBDYWxsRnJhbWU6OmNh
bGxlckZyYW1lT2Zmc2V0KCkpKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSksIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNh
bGxFdmFsLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCByZWdUMik7CisgICAg
cmVzZXRTUCgpOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGFyZ3VtZW50
R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ2FsbEV2YWwsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1
bWVudEdQUjIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmV0dXJuVmFsdWVHUFIp
KTsKIAogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIApAQCAtMTQ4LDcgKzE1MSw3
IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cENhbGxFdmFsPigpOwotICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRD
YWxsTGlua0luZm8oQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBDYWxsTGlua0lu
Zm8qIGluZm8gPSBtX2V2YWxDYWxsTGlua0luZm9zLmFkZChDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJ
bmRleCkpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIHJlZ1QwKTsK
IAogICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CkBAIC0xNTYsNDMg
KzE1OSw0NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogCiAgICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNp
emVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdFZpcnR1YWxDYWxsKCptX3ZtLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgZW1pdFZpcnR1
YWxDYWxsV2l0aG91dE1vdmluZ0dsb2JhbE9iamVjdCgqbV92bSwgaW5mbyk7CisgICAgcmVzZXRT
UCgpOwogCiAgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KLWJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBDYWxsTGlu
a0luZm8qLCB1bnNpZ25lZCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29uc3QgT3AmLCBV
bmxpbmtlZENhbGxMaW5rSW5mbyosIHVuc2lnbmVkLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
KQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGU8PgotYm9vbCBKSVQ6OmNvbXBp
bGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZv
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK2Jvb2wgSklUOjpjb21waWxlVGFpbENhbGwo
Y29uc3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIFVubGlua2VkQ2FsbExpbmtJbmZvKiBpbmZvLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxs
TGlua0luZm9Db25zdGFudCkKIHsKLSAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0
YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0ZWNvZGUubV9hcmdjOwotICAg
IHNodWZmbGVEYXRhLm51bWJlclRhZ1JlZ2lzdGVyID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0
ZXI7Ci0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2Fs
bEZyYW1lU2h1ZmZsZURhdGE+IHNodWZmbGVEYXRhID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVm
ZmxlRGF0YT4oKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1f
YXJnYzsKKyAgICBzaHVmZmxlRGF0YS0+bnVtUGFyYW1ldGVycyA9IG1fdW5saW5rZWRDb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICBzaHVmZmxlRGF0YS0+bnVtYmVyVGFnUmVnaXN0ZXIg
PSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICBzaHVmZmxlRGF0YS0+bnVtTG9jYWxz
ID0KICAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpIC8g
c2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRlY29kZS5t
X2FyZ2MpOworICAgIHNodWZmbGVEYXRhLT5hcmdzLnJlc2l6ZShieXRlY29kZS5tX2FyZ2MpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRlY29kZS5tX2FyZ2M7ICsraSkgewotICAg
ICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAgc2h1ZmZsZURhdGEtPmFyZ3NbaV0g
PQogICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKAogICAgICAg
ICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcyhpKSAtIGJ5
dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwogICAgIH0KLSAg
ICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdU
MCwgRGF0YUZvcm1hdEpTKTsKLSAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMobV9jb2RlQmxvY2spOwotICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURh
dGEpOworICAgIHNodWZmbGVEYXRhLT5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWdU
MCwgRGF0YUZvcm1hdEpTKTsKKyAgICBzaHVmZmxlRGF0YS0+c2V0dXBDYWxsZWVTYXZlUmVnaXN0
ZXJzKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSk7CiAKLSAgICBKdW1wTGlzdCBzbG93UGF0aHMgPSBpbmZvLT5lbWl0VGFpbENhbGxGYXN0
UGF0aCgqdGhpcywgcmVnVDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzLCBb
Jl0gewotICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBh
cmVGb3JUYWlsQ2FsbCgpOworICAgIGxvYWRDb25zdGFudChjYWxsTGlua0luZm9Db25zdGFudCwg
cmVnVDIpOworICAgIEp1bXBMaXN0IHNsb3dQYXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdFRhaWxD
YWxsRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgWyZdIHsKKyAgICAgICAgQ2Fs
bEZyYW1lU2h1ZmZsZXIoKnRoaXMsICpzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7
CiAgICAgfSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd1BhdGhzKTsKKworICAgIHNodWZmbGVEYXRh
LT5zaHJpbmtUb0ZpdCgpOworICAgIGluZm8tPmZyYW1lU2h1ZmZsZURhdGEgPSBXVEZNb3ZlKHNo
dWZmbGVEYXRhKTsKKwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmRvbmVMb2NhdGlvbiA9IGRvbmVM
b2NhdGlvbjsKICAgICAKQEAgLTIxOCwxNCArMjI1LDI1IEBAIHZvaWQgSklUOjpjb21waWxlT3BD
YWxsKGNvbnN0IEluc3RydWN0aW8KICAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJu
UEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0
ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0
cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAgICBpbmZvID0gbV9j
b2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbyhDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCkpOwot
ICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKKworICAgIFVubGlua2VkQ2Fs
bExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IGluZm9Db25zdGFudCA9IFVJTlRfTUFYOworICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2
YWwpIHsKKyAgICAgICAgaW5mbyA9IG1fdW5saW5rZWRDYWxscy5hZGQoKTsKKyAgICAgICAgaW5m
by0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgaW5mby0+Y2FsbFR5
cGUgPSBDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKTsKKworICAgICAgICBpbmZv
Q29uc3RhbnQgPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpDYWxs
TGlua0luZm8sIGluZm8pOworCisgICAgICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbkluZm8u
c2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOworICAgICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnVubGlua2VkQ2FsbExpbmtJbmZvID0gaW5mbzsK
KyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlu
a0luZm9Db25zdGFudCA9IGluZm9Db25zdGFudDsKKyAgICB9CisgICAgY29tcGlsZVNldHVwRnJh
bWUoYnl0ZWNvZGUsIGluZm9Db25zdGFudCk7CiAKICAgICAvLyBTUCBob2xkcyBuZXdDYWxsRnJh
bWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFs
aXplZC4KLSAgICBhdXRvIGJ5dGVjb2RlSW5kZXggPSBtX2NvZGVCbG9jay0+Ynl0ZWNvZGVJbmRl
eChpbnN0cnVjdGlvbik7Ci0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRl
eChieXRlY29kZUluZGV4KS5iaXRzKCk7CisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihsb2NhdGlvbkJpdHMpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNhbGxlZS4KQEAgLTIzNCwxNiArMjUyLDEy
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KICAgICBpZiAoY29t
cGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1f
Y2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOwotICAgIGlu
Zm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgcmVnVDAp
OwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygp
KTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5r
SW5mbyA9IGluZm87Ci0KLSAgICBpZiAoY29tcGlsZVRhaWxDYWxsKGJ5dGVjb2RlLCBpbmZvLCBj
YWxsTGlua0luZm9JbmRleCkpCisgICAgaWYgKGNvbXBpbGVUYWlsQ2FsbChieXRlY29kZSwgaW5m
bywgY2FsbExpbmtJbmZvSW5kZXgsIGluZm9Db25zdGFudCkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIGxvYWRDb25zdGFudChpbmZvQ29uc3RhbnQsIHJlZ1QyKTsKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGF1dG8gc2xvd1BhdGhzID0gaW5mby0+ZW1pdFRhaWxD
YWxsRmFzdFBhdGgoKnRoaXMsIHJlZ1QwLCByZWdUMiwgQ2FsbExpbmtJbmZvOjpVc2VEYXRhSUM6
OlllcywgWyZdIHsKKyAgICAgICAgYXV0byBzbG93UGF0aHMgPSBDYWxsTGlua0luZm86OmVtaXRU
YWlsQ2FsbERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVnVDIsIFsmXSB7CiAgICAgICAg
ICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBwcmVwYXJlRm9yVGFp
bENhbGxTbG93KHJlZ1QyKTsKICAgICAgICAgfSk7CkBAIC0yNTMsMTQgKzI2NywxMyBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBhdXRvIHNsb3dQYXRocyA9IGluZm8tPmVtaXRGYXN0UGF0aCgqdGhpcywgcmVn
VDAsIHJlZ1QyLCBDYWxsTGlua0luZm86OlVzZURhdGFJQzo6WWVzKTsKKyAgICBhdXRvIHNsb3dQ
YXRocyA9IENhbGxMaW5rSW5mbzo6ZW1pdERhdGFJQ0Zhc3RQYXRoKCp0aGlzLCByZWdUMCwgcmVn
VDIpOwogICAgIGF1dG8gZG9uZUxvY2F0aW9uID0gbGFiZWwoKTsKICAgICBhZGRTbG93Q2FzZShz
bG93UGF0aHMpOwogCiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4
XS5kb25lTG9jYXRpb24gPSBkb25lTG9jYXRpb247CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOworICAgIHJlc2V0U1AoKTsKIAogICAgIGVtaXRQdXRDYWxsUmVz
dWx0KGJ5dGVjb2RlKTsKIH0KQEAgLTI3MywyMSArMjg2LDIwIEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsU2xvd0Nhc2UoY29uc3QgSW4KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
LSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLnNsb3dQYXRoU3Rh
cnQgPSBsYWJlbCgpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOworICAgIGxvYWRDb25z
dGFudChtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5m
b0NvbnN0YW50LCByZWdUMik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QzKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNh
bGxMaW5rSW5mby0+ZW1pdFNsb3dQYXRoKCptX3ZtLCAqdGhpcyk7CisgICAgQ2FsbExpbmtJbmZv
OjplbWl0RGF0YUlDU2xvd1BhdGgoKm1fdm0sICp0aGlzLCByZWdUMik7CiAKICAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdz
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewogICAgICAg
ICBhYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7
CisgICAgcmVzZXRTUCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cD4oKTsKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CkBAIC0zOTUsMTcgKzQwNywz
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluCiAKICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICZ2bSgpLnByb3BlcnR5TmFtZXMtPm5leHQ7CiAgICAgCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpzdHViSW5mbzsKKworICAgIG1vdmUocmVnVDAsIGJhc2VHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKSkpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50
aWZpZXIoaWRlbnQtPmltcGwoKSksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDApLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50LT5pbXBs
KCkpLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1Yklu
Zm9HUFIsIEFjY2Vzc1R5cGU6OkdldEJ5SWQpOworCisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZv
LT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50
IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBl
OjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBX
ZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0
IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0R1BSKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmV4dCwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CiAKICAgICBmYXN0Q2FzZS5saW5rKHRoaXMpOwogfQpAQCAtNDE2LDEwICs0NDIsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wSXRlcmF0b3JPcGVuPihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsK
IAotCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEdQUlJlZyBpdGVyYXRvckdQ
UiA9IHJlZ1QwOworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6YmFzZTsKICAgICBKdW1wTGlzdCBub3RPYmplY3Q7CiAgICAgbm90T2JqZWN0LmFwcGVu
ZChicmFuY2hJZk5vdENlbGwoaXRlcmF0b3JHUFIpKTsKICAgICBub3RPYmplY3QuYXBwZW5kKGJy
YW5jaElmTm90T2JqZWN0KGl0ZXJhdG9yR1BSKSk7CkBAIC00MzIsMTkgKzQ1NiwxNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zCiAgICAgCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIG5leHRWUmVnLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygp
LCBpdGVyYXRvckdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOworICAgIG1vdmUoaXRlcmF0b3JHUFIsIGFyZ3VtZW50R1BSMik7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
KT4oYnl0ZWNvZGUsIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBuZXh0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAKICAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CiAKICAg
ICBub3RPYmplY3QubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93
SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIGFy
Z3VtZW50R1BSMCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CkBAIC00NTIsNyArNDc0LDYg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29ucwogdm9pZCBKSVQ6OmVt
aXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yTmV4dD4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBh
dXRvKiB0cnlGYXN0RnVuY3Rpb24gPSAoWyZdICgpIHsKICAgICAgICAgc3dpdGNoIChpbnN0cnVj
dGlvbi0+d2lkdGgoKSkgewogICAgICAgICBjYXNlIE5hcnJvdzogcmV0dXJuIGl0ZXJhdG9yX25l
eHRfdHJ5X2Zhc3RfbmFycm93OwpAQCAtNDcwLDUwICs0OTEsNzkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbgogICAgIEp1bXAgZmFzdENhc2UgPSBicmFuY2gzMihO
b3RFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KEl0ZXJhdGlvbk1vZGU6OkdlbmVyaWMpKSk7CiAKICAgICBnZW5lcmljQ2Fz
ZS5saW5rKHRoaXMpOwotICAgIG9yOChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4o
SXRlcmF0aW9uTW9kZTo6R2VuZXJpYykpLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1faXRl
cmF0aW9uTWV0YWRhdGEuc2Vlbk1vZGVzKSk7CisgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgp
ICsgSXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpLCByZWdUMCk7Cisg
ICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSXRlcmF0aW9uTW9kZTo6
R2VuZXJpYykpLCByZWdUMCk7CisgICAgc3RvcmU4VG9NZXRhZGF0YShyZWdUMCwgYnl0ZWNvZGUs
IE9wSXRlcmF0b3JOZXh0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZJdGVyYXRpb25NZXRhZGF0YSgpICsg
SXRlcmF0aW9uTW9kZU1ldGFkYXRhOjpvZmZzZXRPZlNlZW5Nb2RlcygpKTsKICAgICBjb21waWxl
T3BDYWxsPE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgIC8vIGNhbGwgcmVzdWx0ICh7
IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwCiAKLSAgICBHUFJSZWcgdmFsdWVHUFIg
PSByZWdUMDsKLSAgICBHUFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QyOwotICAgIEdQUlJlZyBk
b25lR1BSID0gcmVnVDE7Ci0gICAgLy8gaXRlclJlc3VsdEdQUiB3aWxsIGdldCB0cmFzaGVkIGJ5
IHRoZSBmaXJzdCBnZXQgYnkgaWQgYmVsb3cuCi0gICAgbW92ZSh2YWx1ZUdQUiwgaXRlclJlc3Vs
dEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQUlJlZyBpdGVyQ2FsbFJlc3Vs
dEdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6ZG9udENsb2JiZXJSZWdpc3RlcjsKKyAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGRvbmVHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdDsKICAg
ICB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyUmVzdWx0R1BSKTsK
KyAgICAgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpiYXNlOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlR1BSID09IGJhc2VH
UFIpOworCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSKTsKIAog
ICAgICAgICBSZWdpc3RlclNldCBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICBwcmVzZXJ2ZWRSZWdzLmFkZCh2YWx1ZUdQUik7
CisgICAgICAgIHByZXNlcnZlZFJlZ3MuYWRkKGl0ZXJDYWxsUmVzdWx0R1BSKTsKICAgICAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpLCBwcmVzZXJ2ZWRSZWdz
LAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgpKSwgSlNWYWx1ZVJlZ3MoaXRl
clJlc3VsdEdQUiksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCByZWdUMywgQWNjZXNzVHlwZTo6R2V0
QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgcHJlc2VydmVkUmVn
cywKKyAgICAgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElk
ZW50aWZpZXIodm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lLmltcGwoKSksIEpTVmFsdWVSZWdzKGJh
c2VHUFIpLCBKU1ZhbHVlUmVncyhkb25lR1BSKSwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6Okdl
dEJ5SWQpOworCisgICAgICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0g
bV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICAgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpHZXRCeUlkOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICByZXNl
dFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0
aXZlbHkgcmVzZXQgU1AKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlk
cy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRh
LCBKU1ZhbHVlUmVncyB7IGRvbmVHUFIgfSk7CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHsgZG9uZUdQUiB9KTsKICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RvbmUsIGRvbmVHUFIpOwogICAgICAgICBhZHZhbmNl
VG9OZXh0Q2hlY2twb2ludCgpOwogICAgIH0KIAotCiAgICAgewotICAgICAgICBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMjsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CisgICAgICAg
IFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoZG9uZUdQUiwgaXRlckNhbGxSZXN1bHRHUFIpOwor
ICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRjaEFsbG9jYXRvcih1c2VkUmVn
aXN0ZXJzKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRjaEFsbG9jYXRvci5hbGxv
Y2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaEFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgR1BSUmVnIGdsb2JhbEdQUiA9IHNj
cmF0Y2hBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAgICAgICAgIGNvbnN0IGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgIEp1bXBM
aXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyhkb25l
R1BSKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICAgICAgSnVtcExpc3QgaXRlcmF0
aW9uRG9uZSA9IGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKGRvbmVHUFIpLCBzY3Jh
dGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCwgZ2xvYmFsR1BSKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAg
ICAgIG1vdmUoaXRlckNhbGxSZXN1bHRHUFIsIGJhc2VHUFIpOwogCiAgICAgICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgoQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlLmltcGwo
KSksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCByZWdUNCwg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICAgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkp
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnBy
b3BlcnR5TmFtZXMtPnZhbHVlLmltcGwoKSksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVl
UmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CisKKyAg
ICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1
YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6
OkdldEJ5SWQ7CisgICAgICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUlu
ZGV4OworICAgICAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBt
X2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5m
bywgc3R1YkluZm8pOworICAgICAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRl
eCA9IHN0dWJJbmZvSW5kZXg7CisgICAgICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHVi
SW5mbzsKKworICAgICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlz
LCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgICAgIHJlc2V0U1AoKTsgLy8gV2Ug
bWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBT
UAorICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4p
OwogCi0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdz
IHsgdmFsdWVHUFIgfSk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV92YWx1ZSwgdmFsdWVHUFIpOworICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCBKU1ZhbHVlUmVncyB7IHJlc3VsdEdQUiB9KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXN1bHRHUFIpOwogCiAgICAgICAgIGl0ZXJhdGlv
bkRvbmUubGluayh0aGlzKTsKICAgICB9CkBAIC01MjcsNTkgKzU3Nyw1NSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zCiAgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
PE9wSXRlcmF0b3JOZXh0PihpbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAorICAgIGNv
bnN0ZXhwciBHUFJSZWcgaXRlckNhbGxSZXN1bHRHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3Rl
cnM6OmRvbnRDbG9iYmVyUmVnaXN0ZXI7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wSXRlcmF0b3JOZXh0PigpOwogICAgIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRvbmVWUmVnID0gYnl0ZWNvZGUubV9kb25lOwotICAgICAgICBHUFJSZWcgaXRlclJlc3VsdEdQ
UiA9IHJlZ1QyOwogCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAgIEp1
bXBMaXN0IG5vdE9iamVjdDsKLSAgICAgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdENl
bGwoaXRlclJlc3VsdEdQUikpOworICAgICAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90
Q2VsbChpdGVyQ2FsbFJlc3VsdEdQUikpOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBp
ZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZS5pbXBsKCk7CiAgICAgICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgICAg
IAogICAgICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgICAgICBub3RP
YmplY3QuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGl0ZXJSZXN1bHRHUFIpKTsKKyAgICAgICAg
bm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyQ2FsbFJlc3VsdEdQUikpOwog
Ci0gICAgICAgIENhbGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpPihieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgZG9uZVZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMCwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkb25l
VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1
YkluZm8oKSwgaXRlclJlc3VsdEdQUiwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLSAgICAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLQotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGRvbmVWUmVnLCByZWdUMSk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0
R1BSLCBhcmd1bWVudEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BS
MCk7CisgICAgICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3Vt
ZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgZG9u
ZVZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMo
KSk7CisKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxs
KCkpOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgZG9uZUdQUiA9IEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRvbmVW
UmVnLCBkb25lR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCBpdGVyQ2FsbFJlc3VsdEdQUik7CiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90Rm9y
Q2hlY2twb2ludChqdW1wKCkpOwogCiAgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVj
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRHUFIwKTsKICAg
ICB9CiAKICAgICB7ICAgCiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgICAgICBH
UFJSZWcgaXRlclJlc3VsdEdQUiA9IHJlZ1QwOwogCiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWUuaW1wbCgpOwogICAgICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAg
ICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAgICAgIENhbGwgY2Fs
bDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
IHsKLSAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0
dWJJbmZvKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPihieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjAsIGl0ZXJSZXN1bHRHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRh
bElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgdmFsdWVWUmVnLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBpdGVyUmVz
dWx0R1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOwotICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworICAgICAgICBtb3ZlKGl0ZXJDYWxsUmVzdWx0R1BSLCBhcmd1bWVu
dEdQUjIpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1l
bnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5SWRPcHRpbWl6ZSk+KGJ5dGVjb2RlLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgdmFsdWVWUmVnLCBhcmd1
bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOworICAgICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiAgICAgfQot
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiwxMSBAQAogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKKwogbmFtZXNw
YWNlIEpTQyB7CiAKK2NsYXNzIFBDVG9Db2RlT3JpZ2luTWFwOworCiBuYW1lc3BhY2UgREZHIHsK
IGNsYXNzIENvbW1vbkRhdGE7CiBjbGFzcyBKSVRDb2RlOwpAQCAtMTU5LDEwICsxNjIsMTAgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgdXNlRGF0YUlDKEpJVFR5cGUgaml0VHlwZSkKICAg
ICB7Ci0gICAgICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZURhdGFJ
QygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gT3B0aW9uczo6
dXNlRGF0YUlDSW5PcHRpbWl6aW5nSklUKCk7CiAgICAgfQogCkBAIC0yMjMsNiArMjI2LDggQEAg
cHVibGljOgogCiAgICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVBdHRy
aWJ1dGUgPT0gU2hhcmVBdHRyaWJ1dGU6OlNoYXJlZDsgfQogCisgICAgdmlydHVhbCBQQ1RvQ29k
ZU9yaWdpbk1hcCogcGNUb0NvZGVPcmlnaW5NYXAoKSB7IHJldHVybiBudWxscHRyOyB9CisKIHBy
aXZhdGU6CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiAgICAgU2hhcmVBdHRyaWJ1dGUgbV9zaGFy
ZUF0dHJpYnV0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRp
b25LZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29t
cGlsYXRpb25LZXkuY3BwCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCB2b2lkIEpJVENvbXBpbGF0aW9uS2V5OjpkdW1wKFByaW50U3RyZWFtCiAgICAgICAgIG91
dC5wcmludCgiPGVtcHR5PiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG91dC5wcmlu
dCgiKENvbXBpbGUgb2YgIiwgKm1fcHJvZmlsZWRCbG9jaywgIiB3aXRoICIsIG1fbW9kZSwgIiki
KTsKKyAgICBvdXQucHJpbnQoIihDb21waWxlIG9mICIsIFJhd1BvaW50ZXIobV9jb2RlQmxvY2sp
LCAiIHdpdGggIiwgbV9tb2RlLCAiKSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25LZXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uS2V5LmgJKHJldmlz
aW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25L
ZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNTcgKzMwLDU2IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBDb2RlQmxvY2tTZXQ7CitjbGFzcyBKU0NlbGw7
CiAKIGNsYXNzIEpJVENvbXBpbGF0aW9uS2V5IHsKIHB1YmxpYzoKICAgICBKSVRDb21waWxhdGlv
bktleSgpCi0gICAgICAgIDogbV9wcm9maWxlZEJsb2NrKG51bGxwdHIpCisgICAgICAgIDogbV9j
b2RlQmxvY2sobnVsbHB0cikKICAgICAgICAgLCBtX21vZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpJ
bnZhbGlkQ29tcGlsYXRpb24pCiAgICAgewogICAgIH0KICAgICAKICAgICBKSVRDb21waWxhdGlv
bktleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9wcm9maWxl
ZEJsb2NrKG51bGxwdHIpCisgICAgICAgIDogbV9jb2RlQmxvY2sobnVsbHB0cikKICAgICAgICAg
LCBtX21vZGUoSklUQ29tcGlsYXRpb25Nb2RlOjpERkcpCiAgICAgewogICAgIH0KICAgICAKLSAg
ICBKSVRDb21waWxhdGlvbktleShDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEpJVENvbXBpbGF0
aW9uTW9kZSBtb2RlKQotICAgICAgICA6IG1fcHJvZmlsZWRCbG9jayhwcm9maWxlZEJsb2NrKQor
ICAgIEpJVENvbXBpbGF0aW9uS2V5KEpTQ2VsbCogcHJvZmlsZWRCbG9jaywgSklUQ29tcGlsYXRp
b25Nb2RlIG1vZGUpCisgICAgICAgIDogbV9jb2RlQmxvY2socHJvZmlsZWRCbG9jaykKICAgICAg
ICAgLCBtX21vZGUobW9kZSkKICAgICB7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3Ih
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9wcm9maWxlZEJsb2NrICYmIG1fbW9k
ZSA9PSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFsaWRDb21waWxhdGlvbjsKKyAgICAgICAgcmV0
dXJuICFtX2NvZGVCbG9jayAmJiBtX21vZGUgPT0gSklUQ29tcGlsYXRpb25Nb2RlOjpJbnZhbGlk
Q29tcGlsYXRpb247CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFs
dWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3Byb2ZpbGVkQmxvY2sgJiYgbV9t
b2RlICE9IEpJVENvbXBpbGF0aW9uTW9kZTo6SW52YWxpZENvbXBpbGF0aW9uOworICAgICAgICBy
ZXR1cm4gIW1fY29kZUJsb2NrICYmIG1fbW9kZSAhPSBKSVRDb21waWxhdGlvbk1vZGU6OkludmFs
aWRDb21waWxhdGlvbjsKICAgICB9CiAgICAgCi0gICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9maWxlZEJsb2NrOyB9CiAgICAgSklUQ29tcGlsYXRpb25N
b2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICAKICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgSklUQ29tcGlsYXRpb25LZXkmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fcHJvZmlsZWRCbG9jayA9PSBvdGhlci5tX3Byb2ZpbGVkQmxvY2sKKyAgICAg
ICAgcmV0dXJuIG1fY29kZUJsb2NrID09IG90aGVyLm1fY29kZUJsb2NrCiAgICAgICAgICAgICAm
JiBtX21vZGUgPT0gb3RoZXIubV9tb2RlOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKFdURjo6UHRy
SGFzaDxDb2RlQmxvY2sqPjo6aGFzaChtX3Byb2ZpbGVkQmxvY2spLCBzdGF0aWNfY2FzdDxzdGQ6
OnVuZGVybHlpbmdfdHlwZTxKSVRDb21waWxhdGlvbk1vZGU+Ojp0eXBlPihtX21vZGUpKTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6cGFpckludEhhc2goV1RGOjpQdHJIYXNoPEpTQ2VsbCo+OjpoYXNo
KG1fY29kZUJsb2NrKSwgc3RhdGljX2Nhc3Q8c3RkOjp1bmRlcmx5aW5nX3R5cGU8SklUQ29tcGls
YXRpb25Nb2RlPjo6dHlwZT4obV9tb2RlKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIENvZGVCbG9jayogbV9wcm9maWxl
ZEJsb2NrOworICAgIC8vIEVpdGhlciBDb2RlQmxvY2sqIG9yIFVubGlua2VkQ29kZUJsb2NrKiBm
b3IgYmFzbGVsaW5lIEpJVC4KKyAgICBKU0NlbGwqIG1fY29kZUJsb2NrOwogICAgIEpJVENvbXBp
bGF0aW9uTW9kZSBtX21vZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjgzMTMx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWFibGVJ
ZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIklu
bGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogCkBAIC00NiwxMCArNDcsOSBAQCBzdGF0
aWMgU3RydWN0dXJlU3R1YkluZm8qIGdhcmJhZ2VTdHViSW5mCiBKSVRJbmxpbmVDYWNoZUdlbmVy
YXRvcjo6SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAgLCBtX2ppdFR5
cGUoaml0VHlwZSkKKyAgICA6IG1faml0VHlwZShqaXRUeXBlKQogewotICAgIG1fc3R1YkluZm8g
PSBtX2NvZGVCbG9jayA/IG1fY29kZUJsb2NrLT5hZGRTdHViSW5mbyhhY2Nlc3NUeXBlLCBjb2Rl
T3JpZ2luKSA6IGdhcmJhZ2VTdHViSW5mbygpOworICAgIG1fc3R1YkluZm8gPSBjb2RlQmxvY2sg
PyBjb2RlQmxvY2stPmFkZFN0dWJJbmZvKGFjY2Vzc1R5cGUsIGNvZGVPcmlnaW4pIDogZ2FyYmFn
ZVN0dWJJbmZvKCk7CiAgICAgbV9zdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlOwog
CiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnM7CkBAIC01OSw3
ICs1OSw2IEBAIHZvaWQgSklUSW5saW5lQ2FjaGVHZW5lcmF0b3I6OmZpbmFsaXplKAogICAgIExp
bmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCwgQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHN0YXJ0KQogewogICAgIG1fc3R1YkluZm8tPnN0YXJ0
ID0gc3RhcnQ7Ci0KICAgICBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBmYXN0UGF0aC5sb2Nh
dGlvbk9mPEpTSW50ZXJuYWxQdHJUYWc+KG1fZG9uZSk7CiAKICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhtX2ppdFR5cGUpKQpAQCAtNjcsNiArNjYsMTUgQEAgdm9pZCBKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0
aW9uID0gc2xvd1BhdGgubG9jYXRpb25PZjxKSVRTdHViUm91dGluZVB0clRhZz4obV9zbG93UGF0
aEJlZ2luKTsKIH0KIAordm9pZCBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0
dWJJbmZvR1BSKQoreworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisgICAgaml0LmxvYWRDb25zdGFu
dChzdHViSW5mbywgc3R1YkluZm9HUFIpOworICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigp
KSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOworfQor
CiBKSVRCeUlkR2VuZXJhdG9yOjpKSVRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlLAogICAgIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwg
R1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTEwLDcgKzExOCw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0
b3I6OkpJVEdldEJ5SWRHZW5lcmF0b3IKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUVHlw
ZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGUs
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIENhY2hlYWJsZUlkZW50aWZp
ZXIgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BS
UmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCiAgICAgOiBKSVRCeUlkR2Vu
ZXJhdG9yKGNvZGVCbG9jaywgaml0VHlwZSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIGFjY2Vzc1R5
cGUsIHVzZWRSZWdpc3RlcnMsIGJhc2UsIHZhbHVlLCBzdHViSW5mb0dQUikKLSAgICAsIG1faXNM
ZW5ndGhBY2Nlc3MocHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGguaW1wbCgpKQorICAgICwgbV9pc0xlbmd0aEFjY2Vzcyhjb2RlQmxvY2sg
JiYgcHJvcGVydHlOYW1lLnVpZCgpID09IGNvZGVCbG9jay0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGguaW1wbCgpKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2UucGF5bG9hZEdQUigpICE9
IHZhbHVlLnRhZ0dQUigpKTsKIH0KQEAgLTEyMCw2ICsxMjgsMzcgQEAgdm9pZCBKSVRHZXRCeUlk
R2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYQogICAgIGdlbmVyYXRlRmFzdENvbW1vbihqaXQsIG1f
aXNMZW5ndGhBY2Nlc3MgPyBJbmxpbmVBY2Nlc3M6OnNpemVGb3JMZW5ndGhBY2Nlc3MoKSA6IElu
bGluZUFjY2Vzczo6c2l6ZUZvclByb3BlcnR5QWNjZXNzKCkpOwogfQogCisKKyNpZiBVU0UoSlNW
QUxVRTY0KQorc3RhdGljIHZvaWQgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKEpJVCYgaml0
LCBHUFJSZWcgc3R1YkluZm9HUFIsIEdQUlJlZyBiYXNlLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVn
IHJlc3VsdCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQu
bG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBzY3JhdGNoKTsKKyAgICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNo
MzIoQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNl
U3RydWN0dXJlKCkpKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNj
cmF0Y2gpOworICAgIGppdC5sb2FkUHJvcGVydHkoYmFzZSwgc2NyYXRjaCwgSlNWYWx1ZVJlZ3Mg
eyByZXN1bHQgfSk7CisgICAgYXV0byBmaW5pc2hlZCA9IGppdC5qdW1wKCk7CisKKyAgICBza2lw
SW5saW5lQWNjZXNzLmxpbmsoJmppdCk7CisgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkp
LCBKSVRTdHViUm91dGluZVB0clRhZyk7CisKKyAgICBmaW5pc2hlZC5saW5rKCZqaXQpOworfQor
Cit2b2lkIEpJVEdldEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0
aChKSVQmIGppdCwgdW5zaWduZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBt
X3N0YXJ0ID0gaml0LmxhYmVsKCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBz
dHViSW5mb0dQUik7CisgICAgZ2VuZXJhdGVHZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1Yklu
Zm9HUFIsIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZSwgQmFzZWxpbmVHZXRCeUlkUmVn
aXN0ZXJzOjpzY3JhdGNoLCBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAg
ICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRpZgorCiBKSVRHZXRCeUlkV2l0aFRoaXNH
ZW5lcmF0b3I6OkpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcigKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSklUVHlwZSBqaXRUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRl
SW5kZXggY2FsbFNpdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAogICAgIENh
Y2hlYWJsZUlkZW50aWZpZXIsIEpTVmFsdWVSZWdzIHZhbHVlLCBKU1ZhbHVlUmVncyBiYXNlLCBK
U1ZhbHVlUmVncyB0aGlzUmVncywgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtMTM4LDYgKzE3Nywy
MCBAQCB2b2lkIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvcjo6Z2VuZXJhCiAgICAgZ2VuZXJh
dGVGYXN0Q29tbW9uKGppdCwgSW5saW5lQWNjZXNzOjpzaXplRm9yUHJvcGVydHlBY2Nlc3MoKSk7
CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0
b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWduZWQgc3R1
YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChKSVRDb2Rl
Ojp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CisK
KyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisgICAgZ2VuZXJh
dGVHZXRCeUlkSW5saW5lQWNjZXNzKGppdCwgc3R1YkluZm9HUFIsIEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzOjpiYXNlLCBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6
c2NyYXRjaCwgQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3RlcnM6OnJlc3VsdCk7CisKKyAg
ICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRpZgorCiBKSVRQdXRCeUlkR2VuZXJhdG9y
OjpKSVRQdXRCeUlkR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRUeXBl
IGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZpZXIsCiAg
ICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQ
UiwgR1BSUmVnIHNjcmF0Y2gsIApAQCAtMTQ5LDYgKzIwMiwzNiBAQCBKSVRQdXRCeUlkR2VuZXJh
dG9yOjpKSVRQdXRCeUlkR2VuZXJhdG9yCiAgICAgbV9zdHViSW5mby0+dXNlZFJlZ2lzdGVycy5j
bGVhcihzY3JhdGNoKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCit2b2lkIEpJVFB1dEJ5SWRH
ZW5lcmF0b3I6OmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmIGppdCwgdW5zaWdu
ZWQgc3R1YkluZm8sIEdQUlJlZyBzdHViSW5mb0dQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChK
SVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSk7CisKKyAgICBtX3N0YXJ0ID0gaml0LmxhYmVs
KCk7CisKKyAgICBqaXQubG9hZENvbnN0YW50KHN0dWJJbmZvLCBzdHViSW5mb0dQUik7CisKKyAg
ICBHUFJSZWcgYmFzZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBHUFJS
ZWcgc2NyYXRjaCA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKyAgICBHUFJS
ZWcgc2NyYXRjaDIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIEdQ
UlJlZyB2YWx1ZSA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7CisKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAg
ICBhdXRvIHNraXBJbmxpbmVBY2Nlc3MgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZJbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlKCkpKTsKKyAgICBq
aXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1
YkluZm86Om9mZnNldE9mQnlJZFNlbGZPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5zdG9y
ZVByb3BlcnR5KEpTVmFsdWVSZWdzIHsgdmFsdWUgfSwgYmFzZSwgc2NyYXRjaCwgc2NyYXRjaDIp
OworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisgICAgc2tpcElubGluZUFjY2Vz
cy5saW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJv
dXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0KTsKKyAgICBtX2RvbmUgPSBq
aXQubGFiZWwoKTsKK30KKyNlbmRpZgorCiB2b2lkIEpJVFB1dEJ5SWRHZW5lcmF0b3I6OmdlbmVy
YXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImIGppdCkKIHsKICAgICBnZW5lcmF0ZUZhc3RDb21t
b24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eVJlcGxhY2UoKSk7CkBAIC0yMDAs
NyArMjgzLDcgQEAgdm9pZCBKSVREZWxCeVZhbEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UAogICAg
IG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKG1faml0
VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1f
c3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAgICAgaml0LmNhbGwo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKKyAg
ICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJS
b3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0aEp1bXAgPSBqaXQu
cGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpAQCAtMjM2LDcgKzMx
OSw3IEBAIHZvaWQgSklURGVsQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGEKICAgICBtX3N0
YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhtX2ppdFR5cGUp
KSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX3N0dWJJ
bmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGppdC5jYWxsKENDYWxs
SGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7CisgICAgICAg
IGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZv
R1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGlu
ZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1wID0gaml0LnBhdGNo
YWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTI3MCw3ICszNTMsNyBA
QCB2b2lkIEpJVEluQnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhCiAgICAgbV9zdGFydCA9
IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewog
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyks
IG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworICAgICAgICBqaXQu
ZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJU
YWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVK
dW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkBAIC0zMDAsNiArMzgzLDM0IEBAIHZv
aWQgSklUSW5CeUlkR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXQKICAgICBnZW5lcmF0ZUZhc3RD
b21tb24oaml0LCBJbmxpbmVBY2Nlc3M6OnNpemVGb3JQcm9wZXJ0eUFjY2VzcygpKTsKIH0KIAor
I2lmIFVTRShKU1ZBTFVFNjQpCit2b2lkIEpJVEluQnlJZEdlbmVyYXRvcjo6Z2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKEpJVCYgaml0LCB1bnNpZ25lZCBzdHViSW5mbywgR1BSUmVnIHN0
dWJJbmZvR1BSKQoreworICAgIFJFTEVBU0VfQVNTRVJUKEpJVENvZGU6OnVzZURhdGFJQyhtX2pp
dFR5cGUpKTsKKworICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKKworICAgIGppdC5sb2FkQ29u
c3RhbnQoc3R1YkluZm8sIHN0dWJJbmZvR1BSKTsKKworICAgIEdQUlJlZyBiYXNlID0gQmFzZWxp
bmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lSW5C
eUlkUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUluQnlJ
ZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsK
KworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGF1dG8gc2tpcElubGluZUFjY2VzcyA9
IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZklubGlu
ZUFjY2Vzc0Jhc2VTdHJ1Y3R1cmUoKSkpOworICAgIGppdC5ib3hCb29sZWFuKHRydWUsIEpTVmFs
dWVSZWdzIHsgcmVzdWx0IH0pOworICAgIGF1dG8gZmluaXNoZWQgPSBqaXQuanVtcCgpOworCisg
ICAgc2tpcElubGluZUFjY2Vzcy5saW5rKCZqaXQpOworICAgIGppdC5mYXJKdW1wKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29k
ZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOworCisgICAgZmluaXNoZWQubGluaygmaml0
KTsKKyAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKK30KKyNlbmRpZgorCiBKSVRJbnN0YW5jZU9m
R2VuZXJhdG9yOjpKSVRJbnN0YW5jZU9mR2VuZXJhdG9yKAogICAgIENvZGVCbG9jayogY29kZUJs
b2NrLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4LAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBwcm90b3R5cGUsIEdQUlJlZyBzdHVi
SW5mb0dQUiwKQEAgLTMzMiw3ICs0NDMsNyBAQCB2b2lkIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3I6
OmdlbmVyYXRlRmFzCiAgICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2Rl
Ojp1c2VEYXRhSUMobV9qaXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIobV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwot
ICAgICAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJv
dXRpbmVQdHJUYWcpOworICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
bV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29k
ZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Ns
b3dQYXRoSnVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVs
KCk7CkBAIC0zNjgsNyArNDc5LDcgQEAgdm9pZCBKSVRHZXRCeVZhbEdlbmVyYXRvcjo6Z2VuZXJh
dGVGYXN0UAogICAgIG1fc3RhcnQgPSBqaXQubGFiZWwoKTsKICAgICBpZiAoSklUQ29kZTo6dXNl
RGF0YUlDKG1faml0VHlwZSkpIHsKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKG1fc3R1YkluZm8pLCBtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSKTsKLSAgICAg
ICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIoKSksIEpJVFN0dWJSb3V0aW5l
UHRyVGFnKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1
YkluZm8tPm1fc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkNvZGVQdHIo
KSksIEpJVFN0dWJSb3V0aW5lUHRyVGFnKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zbG93UGF0
aEp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwogICAgIG1fZG9uZSA9IGppdC5sYWJlbCgpOwpA
QCAtNDA1LDcgKzUxNiw3IEBAIHZvaWQgSklUUHV0QnlWYWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFz
dFAKICAgICBtX3N0YXJ0ID0gaml0LmxhYmVsKCk7CiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhtX2ppdFR5cGUpKSB7CiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihtX3N0dWJJbmZvKSwgbV9zdHViSW5mby0+bV9zdHViSW5mb0dQUik7Ci0gICAgICAgIGpp
dC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZvLT5tX3N0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBKSVRTdHViUm91dGluZVB0clRh
Zyk7CisgICAgICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhtX3N0dWJJbmZv
LT5tX3N0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZDb2RlUHRyKCkpLCBK
SVRTdHViUm91dGluZVB0clRhZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2xvd1BhdGhKdW1w
ID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKICAgICBtX2RvbmUgPSBqaXQubGFiZWwoKTsKQEAgLTQ0
MCw3ICs1NTEsNyBAQCB2b2lkIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvcjo6Z2VuCiAg
ICAgbV9zdGFydCA9IGppdC5sYWJlbCgpOwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMobV9q
aXRUeXBlKSkgewogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
bV9zdHViSW5mbyksIG1fc3R1YkluZm8tPm1fc3R1YkluZm9HUFIpOwotICAgICAgICBqaXQuY2Fs
bChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9zdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1YlJvdXRpbmVQdHJUYWcpOwor
ICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+bV9z
dHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mQ29kZVB0cigpKSwgSklUU3R1
YlJvdXRpbmVQdHJUYWcpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Nsb3dQYXRoSnVtcCA9IGpp
dC5wYXRjaGFibGVKdW1wKCk7CiAgICAgbV9kb25lID0gaml0LmxhYmVsKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5o
CShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBF
TkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkpJVE9wZXJh
dGlvblZhbGlkYXRpb24uaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlB1dEtpbmQuaCIKQEAgLTM4LDExICszOSwxMjAgQEAg
bmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDYWNoZWFibGVJZGVudGlmaWVyOwogY2xhc3MgQ2FsbFNp
dGVJbmRleDsKIGNsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVDsKIGNsYXNzIFN0cnVjdHVyZVN0
dWJJbmZvOworc3RydWN0IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm87CiAKIGVudW0gY2xhc3Mg
QWNjZXNzVHlwZSA6IGludDhfdDsKIGVudW0gY2xhc3MgSklUVHlwZSA6IHVpbnQ4X3Q7CiAKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorc3RydWN0IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnMgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJh
c2VsaW5lRGVsQnlJZFJlZ2lzdGVycyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgYmFz
ZSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9
IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0g
R1BSSW5mbzo6cmVnVDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQ
UkluZm86OnJlZ1QyOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnMgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0
YXRpYyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0
IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQ
UlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworICAgIC8vIFdlIHJlbHkgb24gdGhpcyB3aGVu
IGxpbmtpbmcgYSBDb2RlQmxvY2sgYW5kIGluaXRpYWxpemluZyByZWdpc3RlcnMgZm9yIGEgR2V0
QnlWYWwgU3R1YkluZm8uCisgICAgc3RhdGljX2Fzc2VydChiYXNlID09IEJhc2VsaW5lR2V0QnlW
YWxSZWdpc3RlcnM6OmJhc2UpOworICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHkgPT0gQmFzZWxp
bmVHZXRCeVZhbFJlZ2lzdGVyczo6cHJvcGVydHkpOworICAgIHN0YXRpY19hc3NlcnQocmVzdWx0
ID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisgICAgc3RhdGljX2Fzc2Vy
dChzdHViSW5mbyA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbyk7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IEdQUkluZm86OnJlZ1QzOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gR1BSSW5mbzo6cmVnVDQ7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKK307CisK
K3N0cnVjdCBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJlZ1QwOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6YXJndW1lbnRHUFIyOworICAgIHN0YXRpYyBjb25zdGV4
cHIgR1BSUmVnIHByb3RvID0gR1BSSW5mbzo6YXJndW1lbnRHUFIzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKyAgICBz
dGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IEdQUkluZm86Om5vbkFyZ0dQUjE7Cit9
OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHkgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJhc2UgPT0g
QmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSk7CisgICAgc3RhdGljX2Fzc2VydChwcm9w
ZXJ0eSA9PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSk7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6cmVnVDM7Cit9OworCitzdHJ1Y3Qg
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBy
ZXN1bHQgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNl
ID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8g
PSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0g
R1BSSW5mbzo6cmVnVDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgZG9udENsb2JiZXJS
ZWdpc3RlciA9IEdQUkluZm86OnJlZ1QzOworfTsKKworc3RydWN0IEJhc2VsaW5lR2V0QnlJZFdp
dGhUaGlzUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBH
UFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBiYXNlID0gR1BSSW5m
bzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgdGhpc1ZhbHVlID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBHUFJJbmZv
OjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gR1BSSW5mbzo6
cmVnVDM7Cit9OworCitzdHJ1Y3QgQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnMgeworICAgIHN0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVz
dWx0OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OmJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8gPSBC
YXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvOworICAgIHN0YXRpYyBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2ggPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzIHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6cmVnVDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdmFsdWUgPSBHUFJJbmZvOjpyZWdUMTsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBz
dHViSW5mbyA9IEdQUkluZm86OnJlZ1QzOworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2ggPSBHUFJJbmZvOjpyZWdUMjsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMiA9IEdQUkluZm86OnJlZ1Q0OworfTsKKworc3RydWN0IEJhc2VsaW5lUHV0QnlWYWxSZWdp
c3RlcnMgeworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICBzdGF0aWMgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eSA9IEdQUkluZm86OnJlZ1Qx
OworICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6cmVnVDI7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZSA9IEdQUkluZm86OnJlZ1QzOworICAg
IHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvID0gR1BSSW5mbzo6cmVnVDQ7Cit9Owor
CitzdHJ1Y3QgQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnMgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEdQUlJlZyBicmFuZCA9IEdQUkluZm86OnJlZ1QxOworICAgIHN0YXRpY19hc3NlcnQoYmFzZSA9
PSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGJy
YW5kID09IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5KTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mbyA9IEdQUkluZm86OnJlZ1QyOworfTsKKyNlbmRpZgor
CiBjbGFzcyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CiBwcm90ZWN0ZWQ6CiAgICAgSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IoKSB7IH0KQEAgLTYyLDEyICsxNzIsMTggQEAgcHVibGljOgogICAg
IHZvaWQgZmluYWxpemUoCiAgICAgICAgIExpbmtCdWZmZXImIGZhc3RQYXRoTGlua0J1ZmZlciwg
TGlua0J1ZmZlciYgc2xvd1BhdGhMaW5rQnVmZmVyLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bDxKSVRTdHViUm91dGluZVB0clRhZz4gc3RhcnQpOwotICAgIAorCisgICAgdm9pZCBnZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFudCwg
R1BSUmVnIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIG1f
dW5saW5rZWRTdHViSW5mbyB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
IH07CisKIHByb3RlY3RlZDoKLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIEpJVFR5
cGUgbV9qaXRUeXBlOwogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWJJbmZvOwogCitwdWJs
aWM6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fZG9uZTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zbG93UGF0aEJl
Z2luOwogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fc2xvd1BhdGhDYWxsOwpAQCAtOTgsNyAr
MjE0LDcgQEAgcHJvdGVjdGVkOgogICAgIEpTVmFsdWVSZWdzIG1fYmFzZTsKICAgICBKU1ZhbHVl
UmVncyBtX3ZhbHVlOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CitwdWJs
aWM6CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkBAIC0x
MTEsNiArMjI3LDcgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVl
UmVncyB2YWx1ZSwgR1BSUmVnIHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlKTsKICAgICAKICAgICB2
b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBH
UFJSZWcgc3R1YkluZm9HUFIpOwogCiBwcml2YXRlOgogICAgIGJvb2wgbV9pc0xlbmd0aEFjY2Vz
czsKQEAgLTEyNCw2ICsyNDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIENvZGVCbG9jayosIEpJVFR5
cGUsIENvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXgsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLCBDYWNoZWFibGVJZGVudGlmaWVyLAogICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZSwg
SlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MsIEdQUlJlZyBzdHViSW5mb0dQ
Uik7CiAKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aChKSVQmLCB1bnNp
Z25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1YkluZm9HUFIpOwogICAgIHZvaWQgZ2Vu
ZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogfTsKIApAQCAtMTMyLDEwICsyNTAsMTEg
QEAgcHVibGljOgogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CiAKICAgICBK
SVRQdXRCeUlkR2VuZXJhdG9yKAotICAgICAgICBDb2RlQmxvY2sqLCBKSVRUeXBlLCBDb2RlT3Jp
Z2luLCBDYWxsU2l0ZUluZGV4LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgSlNWYWx1ZVJlZ3MgYmFzZSwKLSAgICAgICAgSlNWYWx1ZVJlZ3Mg
dmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUiwgR1BSUmVnIHNjcmF0Y2gsIEVDTUFNb2RlLCBQdXRL
aW5kKTsKKyAgICAgICAgQ29kZUJsb2NrKiwgSklUVHlwZSwgQ29kZU9yaWdpbiwgQ2FsbFNpdGVJ
bmRleCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhY2hlYWJsZUlkZW50aWZp
ZXIsCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcg
c3R1YkluZm9HUFIsIEdQUlJlZyBzY3JhdGNoLCBFQ01BTW9kZSwgUHV0S2luZCk7CiAgICAgCiAg
ICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CisgICAgdm9pZCBnZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoSklUJiwgdW5zaWduZWQgc3R1YkluZm9Db25zdGFu
dCwgR1BSUmVnIHN0dWJJbmZvR1BSKTsKICAgICAKICAgICBWX0pJVE9wZXJhdGlvbl9HU3NpSkpD
IHNsb3dQYXRoRnVuY3Rpb24oKTsKIApAQCAtMTYzLDExICsyODIsOSBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKICAg
ICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV92YWx1ZTsKIAotICAgIE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFi
bGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMTkxLDggKzMwOCw2IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwogCi1wcml2YXRl
OgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3JvQXNzZW1ibGVy
OjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjE2LDggKzMzMSw2IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2VtYmxlciYpOwog
Ci1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0OwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApAQCAtMjQxLDgg
KzM1NCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChNYWNyb0Fzc2Vt
YmxlciYpOwogCi1wcml2YXRlOgotICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3N0YXJ0Owog
ICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fc2xvd1BhdGhKdW1wOwogfTsKIApA
QCAtMjU1LDYgKzM2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNW
YWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzdHViSW5mb0dQUik7CiAKICAgICB2b2lkIGdlbmVyYXRl
RmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKKyAgICB2b2lkIGdlbmVyYXRlQmFzZWxpbmVEYXRh
SUNGYXN0UGF0aChKSVQmLCB1bnNpZ25lZCBzdHViSW5mb0NvbnN0YW50LCBHUFJSZWcgc3R1Yklu
Zm9HUFIpOwogfTsKIAogY2xhc3MgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBmaW5hbCA6IHB1Ymxp
YyBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvciB7CkBAIC0yNzcsOCArMzg5LDYgQEAgcHVibGljOgog
CiAgICAgdm9pZCBmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aExpbmtCdWZmZXIsIExpbmtC
dWZmZXImIHNsb3dQYXRoTGlua0J1ZmZlcik7CiAKLXByaXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9z
bG93UGF0aEp1bXA7CiB9OwogCkBAIC0zMDIsMTEgKzQxMiw5IEBAIHB1YmxpYzoKICAgICAKICAg
ICB2b2lkIGdlbmVyYXRlRmFzdFBhdGgoTWFjcm9Bc3NlbWJsZXImKTsKIAotcHJpdmF0ZToKICAg
ICBKU1ZhbHVlUmVncyBtX2Jhc2U7CiAgICAgSlNWYWx1ZVJlZ3MgbV9yZXN1bHQ7CiAKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9zdGFydDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hh
YmxlSnVtcCBtX3Nsb3dQYXRoSnVtcDsKIH07CiAKQEAgLTMzMCw4ICs0MzgsNiBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUZhc3RQYXRoKE1hY3JvQXNzZW1ibGVyJik7CiAKLXBy
aXZhdGU6Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fc3RhcnQ7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9zbG93UGF0aEp1bXA7CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEz
ICszNSwzOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNP
cGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKLSAgICByZXR1cm4g
c3JjLmlzQ29uc3RhbnQoKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOwor
ICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihz
cmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0Rv
dWJsZSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudElu
dChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQoreworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFu
dFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBn
ZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3RlciBzcmMpCit7CisgICAgaWYgKCFzcmMu
aXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgPT0gU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KSB7CisgICAgICAgIC8vIEFsbCBs
aW5rIHRpbWUgY29uc3RhbnRzIGFyZSBjZWxscy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0NlbGwoKTsKIH0KIAogQUxX
QVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwotICAgIHJldHVybiBtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2Vk
Q29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7CisgICAgcmV0dXJuIG1fdW5s
aW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1
YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE1NiwzNiArMTgxLDM2IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXgKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBN
ZXRhZGF0YT4KLUFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKE1ldGFkYXRh
JiBtZXRhZGF0YSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwg
VmlydHVhbFJlZ2lzdGVyIGRzdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2Rl
LCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCBy
ZXR1cm5WYWx1ZUdQUikpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpT
VmFsdWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3Rv
cmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogICAgIHJl
dHVybiBjYWxsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0
V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0KQordGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdp
dGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmly
dHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1
bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
bWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlR1BSKTsKICNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRh
ZGF0YSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVl
R1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQ
UjIsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlz
S25vd25DZWxsKHJlZykpCisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKQogICAgICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7CiB9CiAKQEAgLTIwNSw3ICsyMzAsNyBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjpoYXNBbnlTbG93Q2FzZXMoCiBpbmxpbmUgdm9pZCBKSVQ6OmFkdmFuY2VUb05leHRD
aGVja3BvaW50KCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwg
IlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBn
ZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQo
bV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2lu
dHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9i
eXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5j
aGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja3BvaW50TGFiZWxz
LmFkZChtX2J5dGVjb2RlSW5kZXgsIGxhYmVsKCkpOwpAQCAtMjE1LDcgKzI0MCw3IEBAIGlubGlu
ZSB2b2lkIEpJVDo6YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQKIGlubGluZSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXAganVtcCkKIHsKICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKG1fYnl0ZWNvZGVJbmRleCwgIlRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJ
bmRleCBpcyBzZXQiKTsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9i
eXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMoKSk7CisgICAgQVNTRVJUKG1fdW5saW5rZWRD
b2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KS0+aGFzQ2hlY2twb2ludHMo
KSk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCksIG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkgKyAxKTsKIAogICAgIGF1dG8g
aXRlciA9IG1fY2hlY2twb2ludExhYmVscy5maW5kKG1fYnl0ZWNvZGVJbmRleCk7CkBAIC0yOTMs
MjkgKzMxOCwyOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0Q291bnQoQWJzdHJhCiAK
IEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50
T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOworICAgIGlmICghc3JjLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25z
dGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpID09IFNvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbjo6TGlua1RpbWVDb25zdGFudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0
YW50T3BlcmFuZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0KIAorI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoVmFs
dWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewogICAgIEFTU0VS
VChzaG91bGRFbWl0UHJvZmlsaW5nKCkpOwogCi0gICAgLy8gV2UncmUgaW4gYSBzaW1wbGUgY29u
ZmlndXJhdGlvbjogb25seSBvbmUgYnVja2V0LCBzbyB3ZSBjYW4ganVzdCBkbyBhIGRpcmVjdAot
ICAgIC8vIHN0b3JlLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIo
KSwgdmFsdWVQcm9maWxlLm1fYnVja2V0cyk7Ci0jZWxzZQogICAgIEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+
KHZhbHVlUHJvZmlsZS5tX2J1Y2tldHMpOwogICAgIHN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigp
LCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQpOwogICAgIHN0b3JlMzIodmFsdWUudGFnR1BS
KCksICZkZXNjcmlwdG9yLT5hc0JpdHMudGFnKTsKLSNlbmRpZgogfQorI2VuZGlmCiAKIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRl
Y2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZv
aWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNv
ZGUpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCkpOwogI2VuZGlmCkBAIC0zMjMsNDEgKzM0OCwzNyBAQCBpbmxpbmUgc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX3NhbWU8ZGVjCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTWV0
YWRhdGE+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEm
IG1ldGFkYXRhLCBKU1ZhbHVlUmVncyB2YWx1ZSkKKyNpZiBVU0UoSlNWQUxVRTY0KQordGVtcGxh
dGU8dHlwZW5hbWUgQnl0ZWNvZGU+CitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2YWx1ZSkKIHsKICAg
ICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUodmFsdWVQcm9maWxlRm9yKG1ldGFkYXRhLCBtX2J5dGVjb2RlSW5k
ZXguY2hlY2twb2ludCgpKSwgdmFsdWUpOwotfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLWlubGlu
ZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShWYWx1ZVByb2ZpbGUmIHZhbHVlUHJv
ZmlsZSwgR1BSUmVnIHJlc3VsdFJlZykKLXsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHZh
bHVlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKSk7CisgICAgcHRyZGlmZl90IG9mZnNl
dCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29kZT4obV9ieXRlY29kZUlu
ZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKTsK
KyAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG9mZnNldCkp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KLWlubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYgbWV0YWRhdGEsIEdQUlJlZyByZXN1bHRSZWcp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEdQUlJlZyByZXN1bHRSZWcp
CiB7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVz
dWx0UmVnKSk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJl
Z3MocmVzdWx0UmVnKSk7CiB9CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsR1BSLCBBcnJheVByb2ZpbGUqIGFy
cmF5UHJvZmlsZSwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5
dGVjb2RlPgoraW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
Y29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcnJheVByb2ZpbGUs
IFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKQogewogICAgIGlmIChz
aG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFz
dFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMlRvTWV0YWRhdGEoc2NyYXRjaEdQ
UiwgYnl0ZWNvZGUsIG9mZnNldE9mQXJyYXlQcm9maWxlKTsKICAgICB9CiB9CiAKLWlubGluZSB2
b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbEdQ
UiwgUmVnaXN0ZXJJRCBhcnJheVByb2ZpbGVHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgUmVnaXN0ZXJJRCBj
ZWxsR1BSLCBSZWdpc3RlcklEIHNjcmF0Y2hHUFIpCiB7Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkgewotICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0
b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhcnJheVByb2ZpbGVHUFIsIEFycmF5UHJvZmlsZTo6
b2Zmc2V0T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpKTsKLSAgICB9CisgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlQcm9maWxlKCkgKyBBcnJheVByb2ZpbGU6Om9mZnNldE9mTGFzdFNlZW5TdHJ1Y3R1cmVJ
RCgpLCBjZWxsR1BSLCBzY3JhdGNoR1BSKTsKIH0KIAogQUxXQVlTX0lOTElORSBpbnQzMl90IEpJ
VDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpCkBAIC0zODAsNyAr
NDAxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogaW5saW5l
IHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVy
SUQgdmFsdWUpCiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJl
Z2lzdGVyKHJlZyk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBv
b2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAg
IGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CkBAIC00
OTYsNyArNTE3LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdAog
CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIgcmVnKQogewotICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25DZWxsKHJlZykpIHsK
KyAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKICAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50
KCkpCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwogICAgICAgICBlbHNlCkBAIC01
MDYsNyArNTI3LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKUwog
CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tu
b3duQ2VsbChyZWcpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChyZWcpKSB7CiAgICAgICAgIGlm
IChyZWcuaXNDb25zdGFudCgpKQogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAg
ICAgICAgZWxzZQpAQCAtNTE0LDExICs1MzUsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09w
ZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewotICAgIHJldHVybiBzcmMu
aXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzSW50MzIoKTsKLX0KLQog
QUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3AsIGludDMy
X3QmIGNvbnN0YW50KQogewogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CkBA
IC01NDQsMTEgKzU2MCwxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVh
bFJlCiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1f
Ynl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewotICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAg
ICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwotICAgICAgICBlbHNlCisgICAgICAgIGlm
IChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2Nr
KHNyYykpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICAgICAgbW92ZShJbW02NChKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpKSwgZHN0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBsb2FkQ29kZUJs
b2NrQ29uc3RhbnQoc3JjLCBkc3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01NjYs
MTEgKzU4Miw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwogfQogCi1BTFdBWVNfSU5MSU5F
IGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQotewot
ICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
SW50MzIoKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2
NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwpAQCAtNTk1LDcgKzYwNiw3IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBWaXJ0dWFsUmVnaXN0
ZXIgdlJlZykKIHsKLSAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duQ2VsbCh2UmVnKSkKKyAg
ICBpZiAoIWlzS25vd25DZWxsKHZSZWcpKQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnKTsKIH0KIApAQCAtNjM3LDMwICs2NDgsNyBAQCBBTFdBWVNfSU5MSU5FIGludCBK
SVQ6Omp1bXBUYXJnZXQoY29uc3QgCiB7CiAgICAgaWYgKHRhcmdldCkKICAgICAgICAgcmV0dXJu
IHRhcmdldDsKLSAgICByZXR1cm4gbV9jb2RlQmxvY2stPm91dE9mTGluZUp1bXBPZmZzZXQoaW5z
dHJ1Y3Rpb24pOwotfQotCi1BTFdBWVNfSU5MSU5FIEdldFB1dEluZm8gSklUOjpjb3BpZWRHZXRQ
dXRJbmZvKE9wUHV0VG9TY29wZSBieXRlY29kZSkKLXsKLSAgICB1bnNpZ25lZCBrZXkgPSBieXRl
Y29kZS5tX21ldGFkYXRhSUQgKyAxOyAvLyBIYXNoTWFwIGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5
Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkR2V0UHV0SW5mb3MuZmluZChrZXkpOwotICAg
IGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdldFB1dEluZm9zLmVuZCgpKQotICAgICAgICByZXR1
cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFsdWUpOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5m
byA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2dldFB1dEluZm87Ci0gICAgbV9j
b3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBnZXRQdXRJbmZvLm9wZXJhbmQoKSk7Ci0gICAgcmV0
dXJuIGdldFB1dEluZm87Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgotQUxXQVlT
X0lOTElORSBCaW5hcnlBcml0aFByb2ZpbGUgSklUOjpjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5
T3AgYnl0ZWNvZGUpCi17Ci0gICAgdWludDY0X3Qga2V5ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90
PihCaW5hcnlPcDo6b3Bjb2RlSUQpICsgMSkgPDwgMzIgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
Ynl0ZWNvZGUubV9tZXRhZGF0YUlEKTsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9jb3BpZWRBcml0
aFByb2ZpbGVzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb3BpZWRBcml0aFBy
b2ZpbGVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwotICAgIEJpbmFy
eUFyaXRoUHJvZmlsZSBhcml0aFByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
aykubV9hcml0aFByb2ZpbGU7Ci0gICAgbV9jb3BpZWRBcml0aFByb2ZpbGVzLmFkZChrZXksIGFy
aXRoUHJvZmlsZSk7Ci0gICAgcmV0dXJuIGFyaXRoUHJvZmlsZTsKKyAgICByZXR1cm4gbV91bmxp
bmtlZENvZGVCbG9jay0+b3V0T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbik7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjgxLDYgKzY2OSw2MCBAQCBBTFdBWVNfSU5MSU5FIEVD
TUFNb2RlIEpJVDo6ZWNtYU1vZGU8T3BQCiAgICAgcmV0dXJuIEVDTUFNb2RlOjpzdHJpY3QoKTsK
IH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bG9hZFB0ckZyb21NZXRhZGF0YShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBv
ZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKHNfbWV0YWRhdGFH
UFIsIG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGJ5dGVjb2RlKSArIG9mZnNldCksIHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBC
eXRlY29kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWQzMkZyb21NZXRhZGF0YShjb25z
dCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQsIEdQUlJlZyByZXN1bHQpCit7Cisg
ICAgbG9hZDMyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0
YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6bG9hZDhGcm9tTWV0YWRhdGEoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBzaXplX3Qg
b2Zmc2V0LCBHUFJSZWcgcmVzdWx0KQoreworICAgIGxvYWQ4KEFkZHJlc3Moc19tZXRhZGF0YUdQ
UiwgbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Ynl0ZWNvZGUpICsgb2Zmc2V0KSwgcmVzdWx0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZh
bHVlVHlwZSwgdHlwZW5hbWUgQnl0ZWNvZGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzdG9y
ZThUb01ldGFkYXRhKFZhbHVlVHlwZSB2YWx1ZSwgY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBz
aXplX3Qgb2Zmc2V0KQoreworICAgIHN0b3JlOCh2YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BS
LCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShi
eXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c3RvcmUzMlRvTWV0YWRhdGEoR1BSUmVnIHZhbHVlLCBj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIHNpemVfdCBvZmZzZXQpCit7CisgICAgc3RvcmUzMih2
YWx1ZSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0
YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyBvZmZzZXQpKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bWF0ZXJp
YWxpemVQb2ludGVySW50b01ldGFkYXRhKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgc2l6ZV90
IG9mZnNldCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fdW5s
aW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2Rl
KSArIG9mZnNldCksIHNfbWV0YWRhdGFHUFIsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmxvYWRDb25zdGFudChKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNvbnN0YW50
SW5kZXgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgbG9hZFB0cihBZGRyZXNzKHNfY29uc3RhbnRz
R1BSLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvbnN0YW50SW5kZXgpICogOCksIHJlc3VsdCk7
Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJl
c3VsdCkKK3sKKyAgICBsb2FkQ29uc3RhbnQobV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZp
cnR1YWxSZWdpc3RlciBjb25zdGFudCwgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHQsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkg
KiBzaXplb2Yodm9pZCopKSwgcmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4
NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklU
OjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09i
amVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RB
bGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUg
PSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkpOwogICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29u
Y3VycmVudGx5PEpTRmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEkKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdP
YmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9m
aWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7CkBAIC0xMjcsNyArMTI3LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZQogICAgIGVtaXRMb2FkUGF5bG9h
ZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBr
bm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgogICAgIEp1bXAgaGFzSW5zdGFu
Y2VWYWx1ZU5vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKGhhc0luc3RhbmNlVmFsdWUpOwot
ICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblBy
b3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgSnVtcCBjdXN0b21oYXNJbnN0
YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNl
U3ltYm9sRnVuY3Rpb24oKSkpOwogCiAgICAgLy8gV2Uga25vdyB0aGF0IGNvbnN0cnVjdG9yIGlz
IGFuIG9iamVjdCBmcm9tIHRoZSB3YXkgYnl0ZWNvZGUgaXMgZW1pdHRlZCBmb3IgaW5zdGFuY2Vv
ZiBleHByZXNzaW9ucy4KICAgICBlbWl0TG9hZFBheWxvYWQoY29uc3RydWN0b3IsIHJlZ1QwKTsK
QEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IElu
c3RyCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3RvKTsKICAgICAKICAgICBK
SVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCiAgICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKICAgICAgICAgcmVnVDIsIC8vIHZh
bHVlCkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSQogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIGVtaXRMb2Fk
VGFnKHZhbHVlLCByZWdUMCk7CiAgICAgZW1pdExvYWRUYWcocHJvdG8sIHJlZ1QzKTsKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgZHN0
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhyZWdUMCwgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDEpKTsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwgZHN0LCBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVS
ZWdzKHJlZ1QwLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMSkpOwogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKQEAgLTIxMyw3ICsy
MTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgZW1p
dExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVj
dG9yLCByZWdUMik7CiAgICAgZW1pdExvYWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDQsIHJlZ1Qz
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgcmVnVDIsIEpT
VmFsdWVSZWdzKHJlZ1Q0LCByZWdUMykpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5z
dGFuY2VPZkN1c3RvbSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpKTsK
ICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogICAgIApAQCAtMjQ4
LDcgKzI0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY28KICAg
ICAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwg
cmVnVDEsIHJlZ1QwKTsKIApAQCAtMzc4LDcgKzM3OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Nl
dF9mdW5jdGlvbl9uYW1lKGNvbnMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZSA9IGJ5dGVjb2Rl
Lm1fbmFtZTsKICAgICBlbWl0TG9hZFBheWxvYWQoZnVuYywgcmVnVDEpOwogICAgIGVtaXRMb2Fk
KG5hbWUsIHJlZ1QzLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5j
dGlvbk5hbWUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25O
YW1lLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQwOCw3ICs0MDgsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiAgICAgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDI7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CiAgICAgYm9vbCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxz
ZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC00MjIsNyArNDIyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRy
dWUoY29uc3QgSW5zdHJ1Y3RpbwogICAgIEpTVmFsdWVSZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7
CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDM7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNj
cmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
amVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQzNyw3
ICs0MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiAKICAg
ICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKICAg
ICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVz
R2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwogCkBAIC00NjMsNyArNDYzLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydQogCiAgICAgYWRkSnVtcChicmFu
Y2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRh
cmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKQEAgLTUxOSw3ICs1
MTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfcHRyKGNvbnN0IEluc3RydWN0CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0
cj4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2Rl
QmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAg
IEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9z
cGVjaWFsUG9pbnRlcik7CiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKQEAg
LTU2NywxMyArNTY3LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVj
dGkKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAog
ICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmluZ0VxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwogICAgIHN0b3JlUmVzdWx0LmFwcGVu
ZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNlLmFwcGVu
ZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5saW5rKHRo
aXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9yZVJlc3VsdC5saW5rKHRo
aXMpOwogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC02MDYsMTQg
KzYwNiwxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvCiAgICAg
Z2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QyKSk7CiAKICAgICAvLyBT
dHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVybyA6IFplcm8sIHJldHVy
blZhbHVlR1BSKSwganVtcFRhcmdldCk7CiAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKIAogICAg
IC8vIEdlbmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRl
cikpOyAvLyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0eXBlID09
IENvbXBpbGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpLCBq
dW1wVGFyZ2V0KTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKQEAgLTY1OCwxMyArNjU4LDEzIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QKICAgICBnZW5lcmljQ2Fz
ZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNl
LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCByZWdUMCwgcmVnVDIpOwogICAgIHN0b3JlUmVzdWx0LmFwcGVuZChqdW1wKCkpOwogCiAgICAg
Ly8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVy
KSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CiAKICAgICBzdG9yZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIHhvcjMyKFRy
dXN0ZWRJbW0zMigweDEpLCByZXR1cm5WYWx1ZUdQUik7CkBAIC03NzcsNyArNzc3LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIApAQCAtNzg3LDcgKzc4Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmlj
dGVxKGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC04MDYsNyArODA2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAg
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC04MzgsNyArODM4LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDIpOwogICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CiAg
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC04NjEsNyArODYxLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3RpbwogICAgIEFTU0VSVChyZWdUMCA9
PSByZXR1cm5WYWx1ZUdQUik7CiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKICAgICBlbWl0TG9hZChieXRlY29kZS5t
X3ZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblRocm93LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvblRocm93LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKIH0K
IApAQCAtODc3LDcgKzg3Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJ
bnN0cnUKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwogICAgIGlzSW50MzIubGluayh0aGlzKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkKICAgICAgICAgZW1pdFN0b3JlKGRz
dCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTg5OSw3ICs4OTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90b19udW1lcmljKGNvbnN0IEluc3RyCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1i
ZXIoYXJndW1lbnRWYWx1ZVJlZ3MsIHJlZ1QyKSk7CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkKICAgICAgICAgZW1pdFN0b3JlKGRz
dCwgcmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTkzMCw3ICs5MzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90b19vYmplY3QoY29uc3QgSW5zdHJ1CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApKTsKICAgICBpZiAoc3JjICE9IGRzdCkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwg
cmVnVDEsIHJlZ1QwKTsKIH0KQEAgLTk0Niw3ICs5NDYsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2Fs
bEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0
cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9y
Q2F0Y2hPZmZzZXQoKSkpOwogCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IoY29kZUJsb2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFdo
ZW4gdGhlIExMSW50IHRocm93cyBhbiBleGNlcHRpb24sIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQg
d2UndmUgYWxyZWFkeSB0aWVyZWQgdXAKKyAgICAvLyB0aGUgc2FtZSBDb2RlQmxvY2sgdG8gYmFz
ZWxpbmUsIGFuZCB3ZSdsbCBjYXRjaCB0aGUgZXhjZXB0aW9uIGluIHRoZSBiYXNlbGluZSBKSVQg
KGJlY2F1c2UKKyAgICAvLyB3ZSB1cGRhdGVkIHRoZSBleGNlcHRpb24gaGFuZGxlcnMgdG8gcG9p
bnQgaGVyZSkuIEJlY2F1c2UgdGhlIExMSW50IHVzZXMgYSBkaWZmZXJlbnQgdmFsdWUKKyAgICAv
LyBpbnNpZGUgc19jb25zdGFudHNHUFIsIHRoZSBjYWxsZWUgc2F2ZXMgd2UgcmVzdG9yZSBhYm92
ZSBtYXkgbm90IGNvbnRhaW4gdGhlIGNvcnJlY3QgcmVnaXN0ZXIuCisgICAgLy8gU28gd2UgcmVw
bGVuaXNoIGl0IGhlcmUuCisgICAgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDApOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7CisgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50
UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOworICAgIH0KIAogICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJs
ZSwgJnZtKCkpOwogICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwpAQCAtOTY5LDcgKzk4MCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBhcmd1bWVudCB0eXBlIHByb29m
cywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCi0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAgICBWYWx1ZVByb2ZpbGVB
bmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAg
IGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCAmdm0oKSwg
bV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTEwMTEsOCArMTAyMiw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2Ny
dXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJs
ZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50Lgot
ICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOworICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV9wcm9maWxlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRl
eCk7CisgICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxl
c1t0YWJsZUluZGV4XTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJ
bmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVk
aWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwog
CkBAIC0xMDM4LDEzICsxMDQ5LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNv
bnN0IEluc3QKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1
dGluZWU7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxl
SnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFVubGlu
a2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9wcm9maWxlZENvZGVCbG9jay0+
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKICAgICBtX3N3
aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBk
ZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxl
LmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCiAgICAgZW1pdExvYWQoc2NydXRpbmVl
LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldp
dGhVbmtub3duS2V5VHlwZSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKQEAgLTEwNTYsMTMgKzEwNjcsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1
dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxl
IGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0g
ICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3Ry
aW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVu
bGlua2VkVGFibGUgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBw
ZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZz
ZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFi
bGUodW5saW5rZWRUYWJsZSk7CiAKICAgICBlbWl0TG9hZChzY3J1dGluZWUsIHJlZ1QxLCByZWdU
MCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktl
eVR5cGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgdGFibGVJbmRleCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJp
bmdXaXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKQEAgLTEwODMsNyArMTA5NCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBK
SVQgY29kZSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAg
IC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJp
bHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBw
cmVzc3VyZS4KLSAgICBmb3IgKGludCBpID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkgPCBtX2NvZGVCbG9jay0+bnVtVmFycygp
OyArK2kpCisgICAgZm9yIChpbnQgaSA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBpIDwgbV9wcm9maWxlZENvZGVCbG9jay0+bnVt
VmFycygpOyArK2kpCiAgICAgICAgIGVtaXRTdG9yZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChp
KSwganNVbmRlZmluZWQoKSk7CiAKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudGVyKTsKQEAgLTExMDIsNyArMTEx
Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnUKIHZvaWQgSklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVh
dGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2Fs
bGVlOwogICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0
YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsK
QEAgLTExMzcsNyArMTE0OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0
IEluc3QKIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9
ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlz
UmVnaXN0ZXIgPSBieXRlY29kZS5tX3NyY0RzdDsKIApAQCAtMTE2MCw3ICsxMTcxLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spOwogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90
eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNv
ZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKQEAgLTEyNTQsNyArMTI2NSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBlbWl0TG9hZFRhZyhieXRl
Y29kZS5tX3RoaXNWYWx1ZSwgcmVnVDEpOwogICAgIEpTVmFsdWVSZWdzIHRoaXNSZWdzKHJlZ1Qx
LCByZWdUMik7CiAgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsK
LSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdz
LCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7Cisg
ICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywg
cmVnVDMsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jayksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyODMxMzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NCwxMSArNTQsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9u
KgogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAogICAgIGlmIChz
cmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAg
ICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJl
c3NGb3IoZHN0KSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soc3JjKSkgeworICAgICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7
CiAgICAgICAgICAgICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRy
ZXNzRm9yKGRzdCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9hZENvZGVCbG9j
a0NvbnN0YW50KHNyYywgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMCwgYWRkcmVz
c0Zvcihkc3QpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg3
LDM3ICs5MCwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVj
dEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6
ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNp
dHkoKSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxD
b25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0
b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJl
ZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVn
aXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcg
PSByZWdUMzsKIAotICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwotICAgIGVsc2UgewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1
dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciks
IGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0
Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShy
ZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG11dGF0b3JG
ZW5jZSgqbV92bSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOwotICAgIH0KKyAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld09iamVjdDo6TWV0YWRhdGE6Om9mZnNldE9mT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZkFsbG9jYXRvcigpLCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0
ZWNvZGUsIE9wTmV3T2JqZWN0OjpNZXRhZGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCksIHN0
cnVjdHVyZVJlZyk7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJm
bHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJl
c3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVy
ZVJlZywgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGxvYWQ4KEFkZHJl
c3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3Jh
dGNoUmVnKTsKKyAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3Jh
dGNoUmVnKTsKKyAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1
cmVSZWcgPSByZWdUMzsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKKyAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcp
OwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKQEAgLTEzMSw3
ICsxMzIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAKICAgICAv
LyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQg
ZG8uCi0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0
aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QxKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIo
Tm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxP
YmplY3QsIG1fZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24pKSk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CiAKQEAgLTE1NCwz
MCArMTU2LDM4IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHIKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwogCi0gICAgLy8gTG9hZCB0aGUg
b3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBhbmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJl
Z2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBi
ZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJl
c3VsdC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvdG9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3Rv
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCB2YWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90
bywgcHJvdG9HUFIpOwogICAgIAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBi
YXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQg
Zm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHBy
b3RvKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKIAogICAg
IEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
LSAgICAgICAgcmVnVDAsIC8vIHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAg
ICAgcmVnVDEsIC8vIHByb3RvCi0gICAgICAgIHJlZ1Q1LAotICAgICAgICByZWdUMywgcmVnVDQp
OyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICgh
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNl
KCk7CisgICAgICAgIHJlc3VsdEdQUiwKKyAgICAgICAgdmFsdWVHUFIsCisgICAgICAgIHByb3Rv
R1BSLAorICAgICAgICBzdHViSW5mb0dQUiwKKyAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjpzY3JhdGNoMSwgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7
CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRT
dHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpJ
bnN0YW5jZU9mOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5k
KGdlbik7Ci0gICAgCisKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAg
LTE5MiwxNCArMjAyLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0
IEkKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkg
ewotICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5z
dGFuY2VPZk9wdGltaXplOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZv
KCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlw
ZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZS
ZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplLCByZXN1bHRWUmVnLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBy
ZWdUMiwgcmVnVDEpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0
dWJJbmZvID09IGFyZ3VtZW50R1BSMSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnZhbHVlID09IGFyZ3VtZW50R1BSMik7CisgICAgc3RhdGljX2Fzc2Vy
dChCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvID09IGFyZ3VtZW50R1BSMyk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRDb25zdGFudChnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIxKTsKKyAgICBjYWxs
T3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk+KEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LCByZXN1bHRWUmVnLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBh
cmd1bWVudEdQUjMpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3Qg
SW5zdHJ1Y3Rpb24qKQpAQCAtMjQwLDcgKzI0OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3R5cGVv
Zl9pc191bmRlZmluZWQoY28KIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwogICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBh
cmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwogCkBAIC0zODMsOSArMzkyLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogfQogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJikKIHsK
LSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaml0LmNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNG
b3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKTsKQEAgLTQxMSw3ICs0MjAsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUo
Y29uc3QgSW5zCiAKICAgICBpZiAoZHN0ICE9IHNyYykKICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwotCiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM0LDkgKzQ0MiwxMCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgCiB2b2lkIEpJVDo6ZW1p
dF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0
RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9m
dW5jdGlvbiwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9u
YW1lLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIGFyZ3Vt
ZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIGFy
Z3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC00NjUsOCArNDc0LDEwIEBAIHZv
aWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGkKICNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNl
eSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2Jq
ZWN0R1BSKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZh
bHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTQ4MCw3ICs0OTEsNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlv
bnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMg
YmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAg
ICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxs
SGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwpAQCAtNTE5LDcgKzUzMCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKICAgICAvLyBGaXJzdCwgaGFu
ZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRo
ZSBzdHJ1Y3R1cmUuCiAgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdU
MiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAg
ICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwogCkBAIC01
NDMsNyArNTU0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydQog
ICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFpl
cm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKICAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwog
ICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCkBAIC01ODMsMjYgKzU5NCwyMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfcHRyKGNvbnN0IEluc3RydWN0CiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXFQdHI+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9p
bnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAg
ICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgYWRkSnVtcChi
cmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2Vs
bCgpKSksIHRhcmdldCk7CisgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3Bl
Y2lhbFBvaW50ZXIsIHJlZ1QxKTsKKyAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgcmVnVDAs
IHJlZ1QxKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENv
bnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3Bl
Y2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVt
cCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBv
aW50ZXIuYXNDZWxsKCkpKTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEu
bV9oYXNKdW1wZWQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNp
YWxQb2ludGVyLCByZWdUMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNo
UHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZElt
bTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQo
KSk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsK
IH0KQEAgLTYzNyw4ICs2NDUsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5z
dHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJl
Z1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CiAgICAg
Y29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsK
LSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoSWZU
cnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2Jq
ZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRD
VElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAt
NjUyLDcgKzY2Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0
IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZH
L0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0
cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0g
ICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVn
VDE7CkBAIC03MDcsNyArNzE3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5z
dHJ1Y3RpbwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2
ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25U
aHJvdywgcmVnVDEsIHJlZ1QwKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwog
I2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRH
UFIyOwpAQCAtNzIzLDcgKzczNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IElu
c3RydWN0aW8KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2
bSkKIHsKLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHRocm93blZhbHVlR1BSID0gYXJndW1lbnRHUFIxOwpAQCAtNzMyLDcgKzc0
Myw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIAogI2lmIE5V
TUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgIGppdC5sb2FkUHRyKCZ2bS50
b3BFbnRyeUZyYW1lLCBhcmd1bWVudEdQUjApOwotICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoYXJndW1lbnRHUFIwKTsKKyAgICBqaXQuY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYXJndW1lbnRHUFIwKTsK
ICNlbmRpZgogCiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVu
dEdQUjA7CkBAIC05MjAsNyArOTMxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3Rl
cShjb25zdCBJbgogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTkzMCw3ICs5NDIsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaWN0RXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTk0
Myw3ICs5NTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1CiAg
ICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdU
MCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlm
IChzcmNWUmVnICE9IGRzdFZSZWcpCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
VlJlZyk7CiB9CkBAIC05NjMsNyArOTc2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJp
Yyhjb25zdCBJbnN0cgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7
CiAgICAgaXNCaWdJbnQubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcp
CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CiB9CkBAIC05OTAsNyAr
MTAwMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnUKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdE9iamVjdChyZWdUMCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKIH0KQEAgLTEwMDUsNyArMTAx
OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbG9h
ZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJl
c3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CiAKLSAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX3VubGlua2VkQ29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworCisgICAgLy8gV2hlbiB0aGUgTExJbnQgdGhyb3dzIGFuIGV4Y2VwdGlv
biwgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSd2ZSBhbHJlYWR5IHRpZXJlZCB1cAorICAgIC8v
IHRoZSBzYW1lIENvZGVCbG9jayB0byBiYXNlbGluZSwgYW5kIHdlJ2xsIGNhdGNoIHRoZSBleGNl
cHRpb24gaW4gdGhlIGJhc2VsaW5lIEpJVCAoYmVjYXVzZQorICAgIC8vIHdlIHVwZGF0ZWQgdGhl
IGV4Y2VwdGlvbiBoYW5kbGVycyB0byBwb2ludCBoZXJlKS4gQmVjYXVzZSB0aGUgTExJbnQgdXNl
cyBhIGRpZmZlcmVudCB2YWx1ZQorICAgIC8vIGluc2lkZSBzX2NvbnN0YW50c0dQUiwgdGhlIGNh
bGxlZSBzYXZlcyB3ZSByZXN0b3JlIGFib3ZlIG1heSBub3QgY29udGFpbiB0aGUgY29ycmVjdCBy
ZWdpc3Rlci4KKyAgICAvLyBTbyB3ZSByZXBsZW5pc2ggaXQgaGVyZS4KKyAgICB7CisgICAgICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVERhdGEo
KSksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6OkpJ
VERhdGE6Om9mZnNldE9mSklUQ29uc3RhbnRQb29sKCkpLCBzX2NvbnN0YW50c0dQUik7CisgICAg
fQogCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUmV0cmlldmVB
bmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCAmdm0oKSk7CiAgICAgSnVtcCBpc0NhdGNoYWJs
ZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CkBAIC0x
MDIzLDIzICsxMDQ3LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0
aW8KICAgICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1
ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NTU5OAogCi0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIg
PSBtZXRhZGF0YS5tX2J1ZmZlcjsKLSAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmls
aW5nKCkpCi0gICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRy
eU9TUkVudGVyQXRDYXRjaCwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0JpdHMoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlP
U1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNC
aXRzKCkpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRyeU9T
UkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgJnZtKCksIG1fYnl0ZWNvZGVJbmRleC5hc0Jp
dHMoKSk7CiAgICAgYXV0byBza2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVy
blZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZmFySnVtcChy
ZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgc2tpcE9TUkVudHJ5
LmxpbmsodGhpcyk7Ci0gICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsK
LSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lz
dGVyJiBwcm9maWxlKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3Mp
OwotICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVBy
b2ZpbGUmPihwcm9maWxlKSwgcmVncyk7Ci0gICAgICAgIH0pOwotICAgIH0KICNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKIH0KIApAQCAtMTA2NSw4ICsxMDc3LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUg
PSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBz
d2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29u
c3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+
dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxl
JiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CisgICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxl
SW5kZXhdOwogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBt
X2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7
CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKQEAgLTEw
OTMsMTMgKzExMDUsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5z
dAogICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsK
IAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFj
ayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJs
b2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgY29uc3QgVW5saW5rZWRTaW1w
bGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT51bmxpbmtl
ZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtl
ZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwogICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJl
Q1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
cnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldp
dGhVbmtub3duS2V5VHlwZSwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
Q2hhcldpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxl
SW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IEpTU3dpdGNoUHRyVGFnKTsKIH0KIApAQCAtMTExMSwyMCArMTEyNCwyMiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0
aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUg
Zm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAg
ICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJs
b2NrLT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJp
bmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5s
aW5rZWRUYWJsZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBt
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CiAgICAgbV9zd2l0Y2hlcy5hcHBl
bmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNl
dCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJs
ZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVl
LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5r
bm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHRhYmxlSW5kZXgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVl
LCBhcmd1bWVudEdQUjEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgpOwogICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVi
dWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigpOwotICAgIGxvYWQzMihj
b2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOworICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CisgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZEZWJ1Z2dlclJlcXVlc3RzKCkp
LCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVy
bywgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsICZ2bSgpLCBzdGF0
aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJS
ZXF1ZXN0cy5saW5rKHRoaXMpOwpAQCAtMTE0NSw3ICsxMTYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAg
ICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNO
b3RJbW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMTYwLDcgKzExNzUsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpAQCAtMTE3OCw3ICsxMTkyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVx
X251bGwoY29uc3QgSW5zdHJ1YwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CiAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29t
cGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RJ
bW1lZGlhdGUgPSBqdW1wKCk7CkBAIC0xMjAwLDEyICsxMjE0LDE0IEBAIHZvaWQgSklUOjplbWl0
X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24n
dCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMg
dG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcK
ICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAg
c2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKKyAgICBzaXplX3QgY291bnQg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1WYXJzKCk7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCiAgICAgICAg
IGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikpOwogCi0gICAgZW1p
dFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CisgICAgCisgICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVy
KHJlZ1QwKTsKIAogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAjZWxzZQpAQCAt
MTIyNCw3ICsxMjQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rp
bwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogewot
ICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0
KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTEzMjIsMjMgKzEzMzgsMTkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVj
dHVyZUlEOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJl
Z1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CiAKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAg
IGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOworICAgIGxvYWQzMkZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlE
KCksIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENy
ZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVl
OwotICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRh
dGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAg
ICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRS
ZWcgPSByZWdUMDsKQEAgLTEzNTQsNyArMTM2Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0
aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVu
Y3Rpb246OnJhcmVEYXRhVGFnKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZT
dHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKIAot
ICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKKyAgICBsb2Fk
UHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcENyZWF0ZVRoaXM6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkNhY2hlZENhbGxlZSgpLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVtcCBoYXNTZWVuTXVs
dGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3Rl
ZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykp
OwogICAgIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMubGluayh0aGlzKTsKQEAgLTEzODQsNyArMTM5
Niw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFcT4oKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBib3hCb29sZWFuKHJldHVy
blZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEz
OTQsNyArMTQwNyw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3QK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIo
VHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BS
LCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTE0MDYsNyArMTQyMCw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3QKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEpOworICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZUVxLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0xNDE2LDcg
KzE0MzEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIHJlZ1QyLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTE0
MzAsMTAgKzE0NDYsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9t
KAogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0
b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hh
c0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjph
cmd1bWVudEdQUjMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CiAgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQ
UiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTQ0Miw3ICsxNDU5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygp
ICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVy
bigpKSkgeworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0
ZUxvb3BzRm9yRnV6emluZygpICYmIG1fdW5saW5rZWRDb2RlQmxvY2stPmxvb3BIaW50c0FyZUVs
aWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CiAgICAgICAgIHVpbnRwdHJfdCogcHRy
ID0gdm0oKS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOwogICAgICAg
ICBsb2FkUHRyKHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJy
YW5jaFB0cihCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFybHlSZXR1cm5G
cm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKQEAgLTE0NTIsNyArMTQ2OSw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICNlbHNlCiAgICAgICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CiAjZW5kaWYKLSAgICAgICAgbW92ZVZhbHVlKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVzdWx0UmVn
cy5ncHIoKSk7CiAgICAgICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
KTsKQEAgLTE0NjUsOCArMTQ4Miw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25z
dCBJbnN0cnUKIAogICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAogICAg
IGlmIChjYW5CZU9wdGltaXplZCgpKSB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aEFkZDMyKFBvc2l0aXZlT3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291
bnRlckluY3JlbWVudEZvckxvb3AoKSksCi0gICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9j
b2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAgICAgICBB
ZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsK
ICAgICB9CiB9CiAKQEAgLTE1MjEsNyArMTUzOSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9j
aGVja190cmFwcyhjb25zdCAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxl
VHJhcHMsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSGFuZGxlVHJhcHMsIGFyZ3VtZW50R1BSMCk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xNTM0LDcgKzE1NTMsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCiB7Ci0gICAgSklUIGpp
dCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0
LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMTU3NiwzNCArMTU5NSwzNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNvbnN0IEluc3RyCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciByZWdleHAgPSBieXRl
Y29kZS5tX3JlZ2V4cDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4o
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4cCkpKTsKKyAgICBHUFJSZWcgZ2xvYmFsR1BS
ID0gYXJndW1lbnRHUFIwOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhw
Kj4obV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSnVtcCBsYXp5SnVtcDsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbHNlCi0gICAgZW1pdExv
YWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQo
Ynl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICNlbmRpZgotICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1f
ZnVuY3Rpb25EZWNsKTsKKyAgICBhdXRvIGNvbnN0YW50ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CisgICAgbG9h
ZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwogCiAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jKQotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdU
MCwgZnVuY0V4ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9u
LCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY0V4
ZWMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9u
LCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAo
b3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0oKSwgcmVnVDAsIGZ1bmNFeGVjKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsICZ2bSgp
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VS
VChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgJnZtKCks
IHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5
bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAmdm0oKSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOwogICAgIH0KIH0KIApAQCAtMTYzMywyMyArMTY1NCwyNCBAQCB2b2lkIEpJVDo6ZW1pdE5l
d0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3Njb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0
ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Nj
b3BlLCBhcmd1bWVudEdQUjEpOwogI2VuZGlmCiAKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1
bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVj
bCk7CisgICAgYXV0byBjb25zdGFudCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBv
b2w6OlR5cGU6OkZ1bmN0aW9uRXhwciwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOworICAgIGxvYWRDb25zdGFudChj
b25zdGFudCwgYXJndW1lbnRHUFIyKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNv
ZGVJRDsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuY19leHApCi0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5j
dGlvbik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24sIGRzdCwg
JnZtKCksIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKICAgICBlbHNlIGlmIChvcGNvZGVJ
RCA9PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCByZWdUMCwgZnVuY3Rpb24p
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uLCBk
c3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAgICAgZWxzZSBpZiAob3Bj
b2RlSUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FzeW5jRnVuY3Rpb24sIGRzdCwgJnZtKCksIHJlZ1QwLCBmdW5jdGlvbik7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCAmdm0o
KSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwogICAgIGVsc2UgewogICAgICAgICBBU1NF
UlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCAm
dm0oKSwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsICZ2bSgpLCBhcmd1bWVudEdQUjEsIGFyZ3Vt
ZW50R1BSMik7CiAgICAgfQogfQogCkBAIC0xNjc2LDI5ICsxNjk4LDMwIEBAIHZvaWQgSklUOjpl
bWl0X29wX25ld19hc3luY19nZW5lcmF0b3JfZnUKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJh
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZXNT
dGFydCA9IGJ5dGVjb2RlLm1fYXJndjsKICAgICBpbnQgc2l6ZSA9IGJ5dGVjb2RlLm1fYXJnYzsK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZhbHVlc1N0YXJ0Lm9mZnNldCgpICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwKLSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzU3Rh
cnQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3Vt
ZW50R1BSMik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBP
cE5ld0FycmF5OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFy
Z3VtZW50R1BSMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyLCBzaXplKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3QXJyYXlXaXRoU2l6ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoOwog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgs
IHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQ
cm9maWxlLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwK
LSAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOworICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhT
aXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50
R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ3VtZW50R1BS
Mik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIw
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAjZWxzZQorICAgIG1hdGVyaWFsaXplUG9p
bnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKICAgICBlbWl0TG9hZChz
aXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksCi0gICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2Zp
bGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2Zp
bGUsIGRzdCwgcmVnVDMsIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRp
ZgogfQogCkBAIC0xNzA2LDggKzE3MjksMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5
X3dpdGhfc2l6ZShjbwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBtX2lzU2hhcmVhYmxlID0gZmFs
c2U7CisKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2Zp
bGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jayk7CiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRh
ZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUg
PSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIApAQCAtMTc4OSwyMCArMTgxNCwy
NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpCiAgICAgc3RhdGlj
X2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3
aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAg
R1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9
IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAg
ICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFj
a2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKyAg
ICB7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVz
dCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVn
ID0gcmVnVDI7CisgICAgICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93
UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIH0KICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93
Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJl
Z1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOworICAg
IGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3Mo
cmVnVDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9
CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxl
X2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewor
ICAgIG1faXNTaGFyZWFibGUgPSBmYWxzZTsKKwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZUNvbnRyb2xGbG93PigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgQmFzaWNCbG9j
a0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2Nh
dGlvbjsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4
ZWN1dGVDb2RlKCp0aGlzKTsKQEAgLTE4NzIsNyArMTkwMiw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9hcmd1bWVudChjb25zdCBJbnMKICAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVz
dWx0UmVncyk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRSZWdzKTsKIH0KIApAQCAtMTg5OCw3ICsxOTI4LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdAogICAgIGVtaXRMb2Fk
UHJvdG90eXBlKHZtKCksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0
Y2hHUFIsIHNsb3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdz
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdz
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
QXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUg
IkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5l
cy5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJERkdE
cml2ZXIuaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgpAQCAtMjg1NSw3ICsyODU2LDcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIEpTVmFsdWUga2V5
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRLZXkpOwogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKIAotICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYg
bGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBjb25zdCBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGlu
ZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT51bmxp
bmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5tX21pbiA9PSBtaW4pOwogICAgIHZvaWQq
IHJlc3VsdCA9IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwog
CkBAIC0yODgwLDcgKzI4ODEsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
U3dpdGNoCiAgICAgSlNWYWx1ZSBrZXkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEtleSk7CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogCi0gICAg
Y29uc3QgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIGNvbnN0IFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFi
bGUgPSBjb2RlQmxvY2stPmJhc2VsaW5lU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAg
IEFTU0VSVChjb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm1f
bWluID09IG1pbik7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlmIChrZXkuaXNJbnQzMigpKQpA
QCAtMjkwMyw3ICsyOTA0LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3
aXRjaAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgdm9pZCogcmVzdWx0OwotICAgIGNvbnN0IFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUg
PSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBjb25z
dCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5iYXNlbGluZVN0cmlu
Z1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKIAogICAgIGlmIChrZXkuaXNTdHJpbmcoKSkg
ewogICAgICAgICBTdHJpbmdJbXBsKiB2YWx1ZSA9IGFzU3RyaW5nKGtleSktPnZhbHVlKGdsb2Jh
bE9iamVjdCkuaW1wbCgpOwpAQCAtMjkxOSw3ICsyOTIwLDYgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
PihyZXN1bHQpOwogfQogCi0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBKU0NfREVGSU5F
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUsIEVuY29kZWRK
U1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24q
IHBjKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0yOTcxLDcgKzI5
NzEsNiBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2CiAKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc29sdmVkU2NvcGUpOwogfQotI2VuZGlmCiAKIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVl
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkK
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZp
c2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCw3IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uR2V0UHIKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
U3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgY2hhciosIChKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgsIGludDMyX3QgbWluKSk7CiBKU0Nf
REVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlw
ZSwgY2hhciosIChWTSosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgsIGlu
dDMyX3QgbWluKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaFN0
cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgY2hhciosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgpKTsKLSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9y
QmFzZWxpbmUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVj
dGlvbiogYnl0ZWNvZGVQQykpOwotI2VuZGlmCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkdldEZyb21TY29wZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIGNv
bnN0IEluc3RydWN0aW9uKiBieXRlY29kZVBDKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblB1dFRvU2NvcGUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3Ry
dWN0aW9uKiBieXRlY29kZVBDKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
bGFuLmNwcAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsMTIgQEAgYXV0byBKSVRQbGFu
Ojp0aWVyKCkgY29uc3QgLT4gVGllcgogCiBKSVRDb21waWxhdGlvbktleSBKSVRQbGFuOjprZXko
KQogewotICAgIHJldHVybiBKSVRDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YmFzZWxpbmVB
bHRlcm5hdGl2ZSgpLCBtX21vZGUpOworICAgIEpTQ2VsbCogY29kZUJsb2NrOworICAgIGlmICht
X21vZGUgPT0gSklUQ29tcGlsYXRpb25Nb2RlOjpCYXNlbGluZSkKKyAgICAgICAgY29kZUJsb2Nr
ID0gbV9jb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CisgICAgZWxzZQorICAgICAgICBj
b2RlQmxvY2sgPSBtX2NvZGVCbG9jay0+YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIHJldHVy
biBKSVRDb21waWxhdGlvbktleShjb2RlQmxvY2ssIG1fbW9kZSk7CiB9CiAKIGJvb2wgSklUUGxh
bjo6aXNLbm93blRvQmVMaXZlQWZ0ZXJHQygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI4MzEz
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9ieV9pZChjb25zdAogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsK
ICAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1Qx
LCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdU
Myk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfaWQoY29uc3QKIAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1p
dExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0U2V0dGVyQnlJZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgbV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9z
ZXR0ZXJfYnlfaQogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExv
YWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJl
Z1Q0KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJv
cGVydHkpLmltcGwoKSwgYXR0cmlidXRlcywgcmVnVDMsIHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHJlZ1QxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5
KS5pbXBsKCksIGF0dHJpYnV0ZXMsIHJlZ1QzLCByZWdUNCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92
YWwoY29ucwogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMik7CiAgICAgZW1pdExvYWQo
cHJvcGVydHksIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVn
VDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0
dHJpYnV0ZXMsIHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5
VmFsLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5
X3ZhbChjb25zCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9h
ZChwcm9wZXJ0eSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCBy
ZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
YXR0cmlidXRlcywgcmVnVDMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVy
QnlWYWwsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5z
dHJ1CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlk
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpTVmFsdWVSZWdzIGJhc2VS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKQEAgLTEzMSw4ICsxMzEsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgZW1pdExvYWQoYmFzZSwg
YmFzZVJlZ3MudGFnR1BSKCksIGJhc2VSZWdzLnBheWxvYWRHUFIoKSk7CiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpKTsKICAgICBKSVREZWxC
eUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAg
ICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9jb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwKICAgICAgICAg
YmFzZVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKICAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0
IEluc3RyCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHByb3BlcnR5LCBwcm9wZXJ0
eVJlZ3MudGFnR1BSKCkpOwogCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29k
ZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJ
VFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAogICAgICAgICBiYXNlUmVncywgcHJvcGVydHlSZWdzLCByZXN1bHRSZWdzLCBJbnZh
bGlkR1BSUmVnLCByZWdUNCk7CiAKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CkBA
IC0yMDIsNyArMjAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV92YWwoY29uc3Qg
SQogCiAgICAgZW1pdExvYWQyKGJhc2UsIGJhc2VSZWdzLnRhZ0dQUigpLCBiYXNlUmVncy5wYXls
b2FkR1BSKCksIHByb3BlcnR5LCBwcm9wZXJ0eVJlZ3MudGFnR1BSKCksIHByb3BlcnR5UmVncy5w
YXlsb2FkR1BSKCkpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
ZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhiYXNlUmVncy50YWdHUFIoKSwgYmFz
ZVJlZ3MucGF5bG9hZEdQUigpKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlSZWdzLnRhZ0dQUigpLCBw
cm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1v
ZGUudmFsdWUoKSkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVs
ZXRlQnlWYWxPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhiYXNlUmVncy50YWdHUFIo
KSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlSZWdzLnRhZ0dQ
UigpLCBwcm9wZXJ0eVJlZ3MucGF5bG9hZEdQUigpKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCByZXN1bHRSZWdzKTsKQEAgLTIx
Niw3ICsyMTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEluCiAKICAgICBlbWl0TG9hZChiYXNlLCBiYXNl
UmVncy50YWdHUFIoKSwgYmFzZVJlZ3MucGF5bG9hZEdQUigpKTsKIAotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSwgVHJ1c3RlZEltbTMyKGJ5dGVjb2RlLm1f
ZWNtYU1vZGUudmFsdWUoKSkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVsZXRlQnlJZE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENv
ZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFN
b2RlLnZhbHVlKCkpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOwogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgcmVzdWx0UmVncyk7CkBAIC0yMzcsNyAr
MjM3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2RlbF9ieV9pZChjb25zdCBJbgogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKQEAgLTI0OSw3ICsyNDksNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RyCiAgICAgICAgIGF1dG8g
bm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CiAgICAgICAgIGVtaXRBcnJheVByb2Zp
bGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwgcmVnVDQpOwogICAgICAgICBub3RDZWxs
LmxpbmsodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5VmFsLCBkc3QsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlWYWwsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlLCByZWdUMSk7CiAgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgcHJvZmlsZSwgcmVnVDQpOwpAQCAtMjU3LDcgKzI1Nyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25s
eShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIHJlc3VsdFJlZ3MsIEludmFsaWRH
UFJSZWcpOwogICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQogICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CkBAIC0yNjUs
NyArMjY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cgogICAg
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgICAgICBtX2dldEJ5VmFs
cy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3Vs
dFJlZ3MpOwogICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogICAgIH0KIH0K
QEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25z
dCBJCiAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewogICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgICAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICAgICAg
SklUR2V0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleF07
CkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29u
c3QgSQogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRC
eVZhbE9wdGltaXplLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgICAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayks
IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKICAgICB9CiB9
CkBAIC0zMDUsMTMgKzMwNSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9uYW1l
KGNvbnN0CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1l
LAorICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lLAogICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSLCByZXN1bHRSZWdzLCBJ
bnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2Vu
KTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3Rv
cmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9
CiAKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVf
bmFtZShjCiAKICAgICBhdXRvIGJhc2VHUFIgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwog
ICAgIGF1dG8gcHJvcGVydHlHUFIgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUsIGRzdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFzZUdQ
UiwgcHJvcGVydHlHUFIpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0UHJp
dmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCkBA
IC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25z
dAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBK
SVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6UHV0UHJpdmF0ZU5hbWUsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDUs
IHJlZ1Q0KSwgSW52YWxpZEdQUlJlZywgSW52YWxpZEdQUlJlZyk7CiAgICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZShjCiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCk7CiAKICAg
ICBhdXRvIG9wZXJhdGlvbiA9IHB1dEtpbmQuaXNEZWZpbmUoKSA/IG9wZXJhdGlvblB1dEJ5VmFs
RGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVG
aWVsZE9wdGltaXplOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGJhc2VSZWdzLCBwcm9w
ZXJ0eVJlZ3MsIHZhbHVlUmVncywgZ2VuLnN0dWJJbmZvKCksIFRydXN0ZWRJbW1QdHIobnVsbHB0
cikpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBUcnVzdGVkSW1t
UHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZVJlZ3MsIHByb3Bl
cnR5UmVncywgdmFsdWVSZWdzLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxscHRy
KSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
fQpAQCAtMzk1LDcgKzM5NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5k
KGNvbnMKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgYmFzZVJlZ3MudGFn
R1BSKCkpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yIGdlbigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6U2V0
UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNj
ZXNzVHlwZTo6U2V0UHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCiAgICAgICAgIGJhc2VSZWdzLCBicmFuZFJlZ3MsIEludmFsaWRHUFJSZWcpOwog
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOwpAQCAtNDE4LDcgKzQxOCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9z
ZXRfcHJpdmF0ZV9icmFuZCgKICAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdl
biA9IG1fcHJpdmF0ZUJyYW5kQWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleF07CiAg
ICAgKyttX3ByaXZhdGVCcmFuZEFjY2Vzc0luZGV4OwogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJp
dmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VSZWdzLCBicmFuZFJlZ3MpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0
ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgYmFzZVJlZ3MsIGJyYW5kUmVncyk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIApAQCAtNDM1LDcgKzQzNSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY28KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZSwgYmFzZVJlZ3MudGFnR1BSKCkpOwogCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNj
ZXNzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklU
VHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpDaGVja1ByaXZhdGVCcmFuZCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBiYXNlUmVncywg
YnJhbmRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTQ1Miw3ICs0NTIs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFuCiAgICAgSklUUHJp
dmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21f
cHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXhdOwogICAgICsrbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRl
eDsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VS
ZWdzLCBicmFuZFJlZ3MpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlUmVncywgYnJhbmRSZWdz
KTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQog
CkBAIC00NjUsNyArNDY1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CkBAIC00NzgsNyArNDc4LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cgogICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChyZWdUMCwgcmVnVDYsIHJlZ1Q3KTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6UHV0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUNSwgcmVnVDQpLCByZWdUNiwgSW52YWxp
ZEdQUlJlZyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CkBAIC01MDQsNyArNTA0LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7CiAgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICAgICAg
ZWNtYU1vZGUgPSBKSVQ6OmVjbWFNb2RlKGJ5dGVjb2RlKTsKLSAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgICAgIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIApAQCAtNTI0LDcgKzUy
NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBlbWl0
TG9hZDIoYmFzZSwgcmVnVDIsIHJlZ1QxLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKICAgICBl
bWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oaXNEaXJlY3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE5vblN0cmljdE9w
dGltaXplKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemUpLCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdU
MSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCks
IGdlbi5zdHViSW5mbygpLCBwcm9maWxlKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1p
emUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwgVHJ1c3RlZEltbVB0ciht
X3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIEpTVmFsdWVSZWdzKHJlZ1QyLCBy
ZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdU
NCksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbgogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC01NDIsMTMgKzU0MiwxMyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJl
c3VsdFJlZ3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOworICAgICAg
ICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2Rl
QmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIHJlc3VsdFJl
Z3MsIEludmFsaWRHUFJSZWcsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BS
KCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApAQCAtNTU4LDEzICs1NTgsMTMgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJP
d25lZEJ5Q29kZUJsb2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
ICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
fQpAQCAtNTc1LDcgKzU3NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQo
YmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZSwgcmVnVDEpOwpAQCAtNTgzLDEzICs1ODMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X2lkX2RpcmVjdChjb25zdAogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
SW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLCBK
U1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVn
LCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLCBKU1Zh
bHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwog
ICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpKTsKIH0KIApAQCAtNTk5LDEzICs1OTksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF9kaXJlY3QoYwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUs
IHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGlt
aXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZ2Vu
LnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3Byb2ZpbGVkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNjE0LDEwICs2MTQsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoYwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTYzMCwx
MyArNjMwLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIAog
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRP
bmx5KHJlZ1QwKSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJ
ZCk7CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9w
cm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1Qw
KSwgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZywgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spLCByZXN1bHRSZWdzKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRh
Z0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CiB9CiAKQEAgLTY0NiwxMyArNjQ2LDEz
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4KIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENhY2hlYWJs
ZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVC
bG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayht
X3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgCiAgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTY2Myw3ICs2NjMs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAg
ICAgZW1pdExvYWQodGhpc1ZSZWcsIHJlZ1Q0LCByZWdUMyk7CkBAIC02NzMsMTMgKzY3MywxMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvCiAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKICAgICBKSVRHZXRC
eUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRC
eUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3M6
OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgSW52YWxpZEdQ
UlJlZyk7CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3M6OnBh
eWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgSW52YWxpZEdQUlJl
Zyk7CiAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwogICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRTdG9yZShk
c3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKIH0KIApA
QCAtNjg5LDEzICs2ODksMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkV2l0aFRoaXM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlk
c1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0
QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1Q0LCByZWdUMyksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJl
c3VsdFZSZWcsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBnZW4uc3R1Yklu
Zm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1Qz
KSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICAgICAKICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzEwLDE1
ICs3MTAsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydQogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29k
ZS5tX2ZsYWdzLmlzRGlyZWN0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KSk7CiAgICAgCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdU
MCwgdmFsdWUsIHJlZ1QzLCByZWdUMik7CiAgICAgCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6
OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50
KSwKKyAgICAgICAgbV9wcm9maWxlZENvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3By
b2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBJbnZhbGlkR1BSUmVnLAogICAg
ICAgICByZWdUMSwgYnl0ZWNvZGUubV9mbGFncy5lY21hTW9kZSgpLCBkaXJlY3QgPyBQdXRLaW5k
OjpEaXJlY3QgOiBQdXRLaW5kOjpOb3REaXJlY3QpOwogICAgIApAQCAtNzM4LDcgKzczOCw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4o
dGhpcyk7CiAKQEAgLTc0OCw3ICs3NDgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X2lkKGNvbnN0IEluCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1tt
X3B1dEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAot
ICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICAg
ICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV9wcm9maWxlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRz
KCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiB9CkBAIC03NTgsMTQgKzc1OCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChj
b25zdCBJbnN0cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbkJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQo
YmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZSwgcmVnVDEpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAotICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVS
ZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFs
aWRHUFJSZWcpOworICAgICAgICBtX3Byb2ZpbGVkQ29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGlu
ZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNv
ZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1fcHJvZmlsZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25s
eShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEludmFsaWRHUFJSZWcpOwogICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKQEAgLTc3OSwxMyArNzc5LDEz
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnMKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9wcm9maWxlZENvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX3Byb2ZpbGVkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAKICAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNzk2LDcgKzc5
Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnUKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
cHJvZmlsZWRDb2RlQmxvY2spOwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHBy
b3BlcnR5LCByZWdUMywgcmVnVDIpOwpAQCAtODA0LDcgKzgwNCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2luX2J5X3ZhbChjb25zdCBJbnN0cnUKICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwocmVnVDAsIHByb2ZpbGUsIHJlZ1Q0KTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmln
aW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nl
c3NUeXBlOjpJbkJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIG1fcHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
QWNjZXNzVHlwZTo6SW5CeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBJbnZhbGlkR1BSUmVn
KTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKQEAgLTgxOSwxNCArODE5LDE0IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pbl9ieV92YWwoY29uc3QgSW4KIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQ29kZUJsb2NrKTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGU7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlWYWxz
W21faW5CeVZhbEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBwcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHByb2ZpbGUsIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogCiAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTgzNyw3ICs4MzcsNyBA
QCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGUoVmlydHVhbFJlZ2lzdGVyCiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0
eXBlLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG1f
cHJvZmlsZWRDb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVnczo6
cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBJbnZhbGlkR1BSUmVnKTsKICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKQEAgLTg1Myw3
ICs4NTMsNyBAQCB2b2lkIEpJVDo6ZW1pdEhhc1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpCiAgICAg
SklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlWYWxJbmRleCsrXTsK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24odHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSA/IG9wZXJhdGlv
bkhhc1ByaXZhdGVOYW1lT3B0aW1pemUgOiBvcGVyYXRpb25IYXNQcml2YXRlQnJhbmRPcHRpbWl6
ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5z
dHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlw
ZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDogb3Bl
cmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC04OTAsNyArODkw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZQogewogICAgIGlm
ICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgIHJldHVybjsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZh
ckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCkBAIC05MDYsNyArOTA2LDcgQEAgdm9pZCBKSVQ6
OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwpAQCAtOTE2LDExICs5MTYsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBzd2l0Y2ggKHJl
c29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Nj
b3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhy
ZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOworICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRT
Y29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1f
cHJvZmlsZWRDb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRT
Y29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
bG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3MobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExl
eGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwogICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0U3RvcmUoZHN0
LCByZWdUMSwgcmVnVDApOwpAQCAtOTMxLDcgKzkzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jl
c29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiAKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNl
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBK
U1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9j
ayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOworICAgICAgICAgICAgSlNTY29wZSogY29uc3Rh
bnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUs
IG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3Rh
bnRTY29wZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7CkBAIC0xMDM5LDcgKzEwMzksNyBAQCB2b2lkIEpJ
VDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
ayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CiAgICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKQEAgLTExNDYs
NyArMTE0Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAg
ICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCkBA
IC0xMTU2LDcgKzExNTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZy
b21TY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29w
ZSwgZHN0LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBv
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKQEAgLTEx
OTAsNyArMTE5MCw3IEBAIHZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXMK
IHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVj
b2RlLm1fc2NvcGU7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2Rl
KTsKQEAgLTEyMDIsNyArMTIwMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShj
b25zdCBJbnMKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBlbWl0
V3JpdGVCYXJyaWVyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hl
Y2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBp
bmplY3Rpb24uCiAgICAgICAgICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAg
ICAgICAgICAgIApAQCAtMTIxNyw3ICsxMjE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IElucwogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29w
ZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVz
b2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2Nv
cGUpOwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CkBAIC0xMzE4LDcgKzEzMTgsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0CiAgICAgICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3Bh
dGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAg
ICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZQotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Nj
b3BlLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0
aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzMzLDcgKzEzMzMsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uCiAgICAgZW1pdExvYWRQYXlsb2Fk
KGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1
bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikgKyBUYWdPZmZzZXQpLCByZXN1dGxSZWdzLnRhZ0dQUigpKTsKICAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgUGF5bG9hZE9mZnNldCksIHJlc3V0bFJlZ3Mu
cGF5bG9hZEdQUigpKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKSwgcmVzdXRsUmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgcmVzdXRsUmVncyk7CiAg
ICAgZW1pdFN0b3JlKGRzdCwgcmVzdXRsUmVncy50YWdHUFIoKSwgcmVzdXRsUmVncy5wYXlsb2Fk
R1BSKCkpOwogfQogCkBAIC0xMzU1LDcgKzEzNTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fYXJndW1lbnRzKGNvbnN0CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5MiArNDks
MTEzIEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnByb3Bl
cnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lR2V0QnlWYWxS
ZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5LCBwcm9wZXJ0eUdQUik7CiAKLSAgICBpZiAobWV0YWRhdGEubV9zZWVuSWRlbnRpZmllcnMu
Y291bnQoKSA+IE9wdGlvbnM6OmdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzKCkpIHsK
LSAgICAgICAgYXV0byBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7Cisg
ICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fc2VlbklkZW50
aWZpZXJzLmNvdW50KCkgPiBPcHRpb25zOjpnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVy
cygpKSB7CisgICAgICAgIGF1dG8gbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChiYXNlR1BSKTsK
KyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BS
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVy
YXRpb25HZXRCeVZhbCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSksIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQ
Uik7CisgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9u
R2V0QnlWYWwsIGRzdCwgc2NyYXRjaEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
Ci0gICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcHJvZmlsZSwg
cmVnVDIpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFz
ZSk7CisgICAgICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwgYmFz
ZUdQUiwgc2NyYXRjaEdQUik7CiAKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CiAKICAgICAgICAgSklU
R2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6
OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCByZXN1bHRSZWdzLCByZWdUMik7CisgICAgICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCByZXN1bHRSZWdzLCBzdHVi
SW5mb0dQUik7CisKICAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkK
ICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAg
ICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dD
YXNlKCk7CisKKyAgICAgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBt
X3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9
IEFjY2Vzc1R5cGU6OkdldEJ5VmFsOworICAgICAgICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHVi
SW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3Ry
dWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgICAgICBnZW4ubV91bmxpbmtlZFN0
dWJJbmZvID0gc3R1YkluZm87CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgICAgICByZXNl
dFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0
aXZlbHkgcmVzZXQgU1AKKworICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAgICBtX2dldEJ5
VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgfQotCiB9CiAKKyNpZiAhT1MoV0lORE9XUykKK3N0YXRp
YyBjb25zdGV4cHIgR1BSUmVnIHZpYWJsZUFyZ3VtZW50R1BSNCA9IEdQUkluZm86OmFyZ3VtZW50
R1BSNDsKK3N0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHZpYWJsZUFyZ3VtZW50R1BSNSA9IEdQUklu
Zm86OmFyZ3VtZW50R1BSNTsKKyNlbHNlCitzdGF0aWMgY29uc3RleHByIEdQUlJlZyB2aWFibGVB
cmd1bWVudEdQUjQgPSBHUFJJbmZvOjpub25BcmdHUFIwOworc3RhdGljIGNvbnN0ZXhwciBHUFJS
ZWcgdmlhYmxlQXJndW1lbnRHUFI1ID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKKyNlbmRpZgorCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgogdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxT
bG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKyAgICBpZiAo
IWhhc0FueVNsb3dDYXNlcyhpdGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCi0gICAgICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZhbEluZGV4KytdOworICAgIEpJ
VEdldEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5VmFsc1ttX2dldEJ5VmFsSW5kZXgrK107
CiAKLSAgICAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3Bl
cmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxlLCByZWdUMCwgcmVnVDEpOwor
ICAgIHN0YXRpY19hc3NlcnQoYXJndW1lbnRHUFIzICE9IEJhc2VsaW5lR2V0QnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5KTsKKyAgICBtb3ZlKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OmJhc2Us
IGFyZ3VtZW50R1BSMyk7CisgICAgbW92ZShCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eSwgdmlhYmxlQXJndW1lbnRHUFI0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50
R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudElu
ZGV4LCBhcmd1bWVudEdQUjEpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3Bjb2RlVHlwZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIGFy
Z3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzLCB2aWFibGVBcmd1
bWVudEdQUjQpOwogI2Vsc2UKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAg
dWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7Ci0gICAg
ICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5k
ZXgpOworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZz
ZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgo
Ynl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAKLSAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKLSAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIzOyAvLyBhcmcx
IGFyZzEgYWxyZWFkeSB1c2VkLgotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIg
PSBhcmd1bWVudEdQUjI7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1Qw
OwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7Ci0gICAgICAg
IHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKLQotICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwcm9maWxlKSwgcHJvZmlsZUdQUik7Ci0gICAgICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgICAgIENh
bGwgY2FsbDsKLSAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3Bl
cmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbCA9
IGFwcGVuZENhbGwob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk7Ci0gICAgICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFy
Z3VtZW50R1BSMzsgLy8gYXJnMSBhcmcxIGFscmVhZHkgdXNlZC4KKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb2ZpbGVHUFIgPSBhcmd1bWVudEdQUjI7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNl
R1BSID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOwor
ICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJNNjQoKSk7
CisgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eUdQUiA9PSBhcmd1bWVudEdQUjEpOworICAgIHN0
YXRpY19hc3NlcnQoQmFzZWxpbmVHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZSA9PSByZWdUMCk7Cisg
ICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eSA9PSBy
ZWdUMSk7CisKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wY29kZVR5cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBw
cm9maWxlR1BSKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKKworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogCi0gICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7Ci0gICAgfQorICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKQEAgLTE0OSw3ICsxNzAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
ICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAg
ICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0xNjAsOCArMTgxLDggQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFI1OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1Yklu
Zm9HUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0g
YXJndW1lbnRHUFIyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FS
TTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsK
IApAQCAtMTg3LDM0ICsyMDgsNDAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3ByaXZhdGVfbmFt
ZShjb25zdAogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEdQUlJlZyBiYXNlR1BSID0g
cmVnVDA7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpw
cm9wZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVHZXRC
eVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpT
VmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdCk7CisKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGJhc2VHUFIpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHksIHByb3BlcnR5R1BSKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BS
LCBiYXNlKTsKIAogICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0UHJpdmF0ZU5h
bWUsCi0gICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgcmVzdWx0UmVncywg
cmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAgICBhZGRTbG93Q2FzZSgpOwor
ICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6Okdl
dFByaXZhdGVOYW1lLAorICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0
ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIHJl
c3VsdFJlZ3MsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNj
ZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldFByaXZhdGVOYW1lOworICAgIHN0dWJJbmZvLT5ieXRl
Y29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3Rh
bnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5
cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1
YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBh
dGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRSZWdzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVz
dWx0UmVncyk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcml2YXRl
TmFtZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjIzLDkgKzI1MCwxMSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZShjCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShtZXRhZGF0
YSwgb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJndW1lbnRHUFIx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRH
UFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFy
Z3VtZW50R1BSMyk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlPGRlY2x0eXBlKG9wZXJh
dGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQ
UjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTIzNSwyNiArMjY0LDIwIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGMKICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjI7IC8vIGFyZzEgYWxyZWFkeSB1c2VkLgot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJv
cGVydHlHUFIgPSBCYXNlbGluZUdldEJ5VmFsUmVnaXN0ZXJzOjpwcm9wZXJ0eTsKICAgICBzdGF0
aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8ICFpc0FSTTY0KCkpOwogICAgIHN0
YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3Rh
bnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFt
ZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAg
IENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5l
SklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlv
bkdldFByaXZhdGVOYW1lT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5k
Q2FsbChvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVy
blZhbHVlR1BSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKQEAgLTI2NCw3ICsyODcsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0
IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVy
IGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAg
ICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCiAgICAgICAg
IGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CkBAIC0zMDAsMjEgKzMyMywyOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9zZXRfcHJpdmF0ZV9icmFuZChjb25zCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRQcml2YXRlQnJhbmQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJyYW5kID0g
Ynl0ZWNvZGUubV9icmFuZDsKLSAgICBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIEdQUlJl
ZyBicmFuZEdQUiA9IHJlZ1QxOworCisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFz
ZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBi
cmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpicmFuZDsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6
OnN0dWJJbmZvOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQUik7Ci0KICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQcml2YXRl
QnJhbmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6
QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleCht
X2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MoYnJhbmRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQ7CisgICAg
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3Rh
bnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENv
bnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4u
bV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxp
bmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAg
IGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQoZ2VuKTsK
IAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJhcnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1
ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJzIHJlZ2lzdGVycy4KQEAgLTMyNCwxNyAr
MzU0LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9wcml2YXRlX2JyYW5kKGNvbnMKICAgICBl
bWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3Nl
dF9wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CisgICAgVU5VU0VEX1BBUkFN
KGN1cnJlbnRJbnN0cnVjdGlvbik7CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAg
ICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFj
Y2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFu
ZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0
UHJpdmF0ZUJyYW5kT3B0aW1pemUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGJhc2VHUFIsIGJyYW5kR1BSKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldFByaXZhdGVCcmFuZD4oKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9icmFuZCwgYXJndW1lbnRHUFIzKTsKKyAg
ICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXpl
KT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dP
cGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFy
Z3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMy
X3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0zNDQsMjQg
KzM3OSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoCiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gYXJndW1lbnRHUFIyOyAvLyBhcmcx
IGFscmVhZHkgdXNlZC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQ
UlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0
ZXJzOjpicmFuZDsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRH
UFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlv
blRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1
bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFt
ZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGdl
bi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25TZXRQcml2YXRlQnJhbmRP
cHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvblNl
dFByaXZhdGVCcmFuZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwog
I2VuZGlmCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzcwLDMzICszOTksNDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY2hlY2tfcHJpdmF0ZV9icmFuZChjbwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBicmFuZCA9IGJ5dGVjb2RlLm1f
YnJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCByZWdUMSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gQmFzZWxpbmVQcml2YXRlQnJhbmRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29u
c3RleHByIEdQUlJlZyBicmFuZEdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5kUmVnaXN0ZXJzOjpi
cmFuZDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQcml2YXRl
QnJhbmRSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJyYW5kLCBicmFuZEdQ
Uik7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlKTsKIAogICAgIEpJVFBy
aXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJh
c2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQsIFJlZ2lzdGVyU2V0
OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKGJyYW5kR1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOwor
ICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6Q2hlY2tQcml2YXRlQnJhbmQ7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wcml2YXRlQnJhbmRBY2Nlc3Nlcy5hcHBlbmQo
Z2VuKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NoZWNrX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1ByaXZhdGVCcmFuZD4oKTsKKyAgICBV
TlVTRURfUEFSQU0oYnl0ZWNvZGUpOworCiAgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJh
dG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5k
ZXgrK107CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7
Ci0gICAgY29uc3RleHByIEdQUlJlZyBicmFuZEdQUiA9IHJlZ1QxOwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgYmFz
ZUdQUiwgYnJhbmRHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFy
Z3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2JyYW5k
LCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uQ2hl
Y2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgYXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0
aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4
Lm9mZnNldCgpOwpAQCAtNDA2LDI0ICs0NDksMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2No
ZWNrX3ByaXZhdGVfYnJhbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9
IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IHVzZWQuCi0gICAgY29uc3RleHByIEdQUlJl
ZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJl
Z1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHJpdmF0ZUJyYW5k
UmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNl
bGluZVByaXZhdGVCcmFuZFJlZ2lzdGVyczo6YnJhbmQ7CiAgICAgc3RhdGljX2Fzc2VydChiYXNl
R1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHBy
b3BlcnR5R1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlu
a2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3NhbWU8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2hlY2tQcml2
YXRlQnJhbmRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBGdW5jdGlvblRyYWl0czxkZWNsdHlw
ZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM+Ojp2YWx1
ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2
YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBv
cGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2Fs
bCA9IGFwcGVuZENhbGwob3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRPcHRpbWl6ZSk7CiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNDM1LDMwICs0NzIsNDMgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3A+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
Mik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHByb2ZpbGUpLCByZWdUMyk7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVy
czo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0
QnlWYWxSZWdpc3RlcnM6OnZhbHVlOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvZmlsZUdQUiA9
IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb2ZpbGU7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVn
VDAsIHJlZ1QzLCByZWdUNCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VH
UFIsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChieXRlY29kZSwg
YmFzZUdQUiwgcHJvZmlsZUdQUik7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRh
KGJ5dGVjb2RlLCBPcDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHByb2ZpbGVH
UFIpOwogCiAgICAgSklUUHV0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRCeVZhbCwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVn
VDQpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbiht
X2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5
cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpT
VmFsdWVSZWdzKHZhbHVlR1BSKSwgcHJvZmlsZUdQUiwgc3R1YkluZm9HUFIpOworCiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKICAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMp
OwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZFNsb3dDYXNlKCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PSBBY2Nlc3NUeXBlOjpQdXRCeVZhbDsKKyAgICBzdHViSW5mby0+cHV0S2luZCA9IHN0ZDo6aXNf
c2FtZV92PE9wLCBPcFB1dEJ5VmFsRGlyZWN0PiA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtpbmQ6
Ok5vdERpcmVjdDsKKyAgICBzdHViSW5mby0+ZWNtYU1vZGUgPSBlY21hTW9kZShieXRlY29kZSk7
CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklU
Q29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRk
KEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAg
ICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIp
OworICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0
byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRC
eVZhbHMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3
aXRob3V0IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC00NzQsMTUgKzUyNCwx
MiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZTsKICAgICBFQ01B
TW9kZSBlY21hTW9kZSA9IEVDTUFNb2RlOjpzdHJpY3QoKTsKLSAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSBudWxscHRyOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsK
ICAgICAgICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICAgICAgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAg
ICAgIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKLSAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgICAgIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAg
LTQ5OCw3ICs1NDUsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SQogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIC8vIFRoZXkgYXJlIGNvbmZp
Z3VyZWQgaW4gdGhlIGZhc3QgcGF0aCBhbmQgbm90IGNsb2JiZXJlZC4KLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IG9wZXJhdGlvblB1dEJ5
VmFsU3RyaWN0T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdE9wdGltaXplKSwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEs
IHJlZ1QyLCBnZW4uc3R1YkluZm8oKSwgcmVnVDMpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIGFyZ3VtZW50R1BS
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgYXJndW1lbnRHUFIyKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBhcmd1bWVudEdQUjMpOworICAgIGxv
YWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgdmlhYmxlQXJn
dW1lbnRHUFI0KTsKKyAgICBpZiAoaXNEaXJlY3QpCisgICAgICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCks
IE9wUHV0QnlWYWxEaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCB2aWFi
bGVBcmd1bWVudEdQUjUpOworICAgIGVsc2UKKyAgICAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50
b01ldGFkYXRhKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgT3BQdXRCeVZh
bDo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlQcm9maWxlKCksIHZpYWJsZUFyZ3VtZW50R1BSNSk7
CisgICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGlt
aXplKT4oQWRkcmVzcyh2aWFibGVBcmd1bWVudEdQUjQsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0LCB2aWFibGVBcmd1bWVudEdQ
UjUpOwogI2Vsc2UKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVj
b2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNTEyLDcgKzU2OCw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBjb25zdGV4cHIg
R1BSUmVnIHN0dWJJbmZvR1BSID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29k
ZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0
KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHVi
SW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBDYWxsIGNhbGw7CiAgICAgYXV0byBvcGVyYXRp
b24gPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZSA6IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemUpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9w
dGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6ZSk7CkBAIC01MjMsNyAr
NTc5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtNTMzLDE4ICs1ODksMjQgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6
QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAgY29u
c3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0g
cmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gcmVnVDQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcmVnVDM7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6
cHJvZmlsZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7
CisgICAgeworICAgICAgICBSZWdpc3RlclNldCB1c2VkKEJhc2VsaW5lUHV0QnlWYWxSZWdpc3Rl
cnM6OmJhc2UsIEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5LCBCYXNlbGluZVB1
dEJ5VmFsUmVnaXN0ZXJzOjp2YWx1ZSwgQmFzZWxpbmVQdXRCeVZhbFJlZ2lzdGVyczo6cHJvZmls
ZSk7CisgICAgICAgIEFTU0VSVCghdXNlZC5jb250YWlucyhyZWdUNCkpOworICAgICAgICBBU1NF
UlQoIXVzZWQuY29udGFpbnMocmVnVDUpKTsKKyAgICB9CisKIAogICAgIGppdC5zdG9yZTMyKGJ5
dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpKTsKICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7CkBAIC01NzAsMjAgKzYzMiwzMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0CiAgICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJhc2VHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZVB1dEJ5VmFsUmVnaXN0ZXJzOjpwcm9w
ZXJ0eTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0gQmFzZWxpbmVQdXRCeVZhbFJl
Z2lzdGVyczo6dmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2Vs
aW5lUHV0QnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCBwcm9wZXJ0eUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVH
UFIpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRQ
dXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMiksIEludmFsaWRHUFJSZWcsIHJlZ1Q0KTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwotICAgIGVsc2UKLSAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICAgICAgbnVs
bHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpQdXRQcml2YXRlTmFt
ZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIEludmFsaWRHUFJSZWcsIHN0dWJJbmZvR1BSKTsKKworICAgIFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAg
ICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OlB1dFByaXZhdGVOYW1lOworICAg
IHN0dWJJbmZvLT5wcml2YXRlRmllbGRQdXRLaW5kID0gYnl0ZWNvZGUubV9wdXRLaW5kOworICAg
IHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJVENvbnN0
YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2Vu
Lm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4OworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAg
ICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgLy8g
SUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEgYmFz
ZSBpcyBjZWxsLgpAQCAtNTk0LDggKzY2Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9wcml2
YXRlX25hbWUoY29uc3QKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dFByaXZhdGVOYW1lPigpOwotICAgIFByaXZhdGVGaWVsZFB1dEtpbmQg
cHV0S2luZCA9IGJ5dGVjb2RlLm1fcHV0S2luZDsKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudElu
c3RydWN0aW9uKTsKIAogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFs
c1ttX3B1dEJ5VmFsSW5kZXgrK107CiAKQEAgLTYwMywxMyArNjc1LDE1IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGMKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwogCi0gICAgYXV0byBvcGVyYXRpb24gPSBwdXRLaW5kLmlzRGVmaW5lKCkgPyBv
cGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGltaXplIDogb3BlcmF0aW9uUHV0
QnlWYWxTZXRQcml2YXRlRmllbGRPcHRpbWl6ZTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCi0gICAgLy8gVGhleSBhcmUgY29uZmlndXJlZCBpbiB0aGUgZmFzdCBwYXRoIGFuZCBub3Qg
Y2xvYmJlcmVkLgotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJlZ1QwOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlR1BSID0gcmVnVDI7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b24sIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgYmFzZUdQUiwg
cHJvcGVydHlHUFIsIHZhbHVlR1BSLCBnZW4uc3R1YkluZm8oKSwgVHJ1c3RlZEltbVB0cihudWxs
cHRyKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQ
cml2YXRlTmFtZT4oKTsKKworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgYXJndW1lbnRHUFIxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIGFyZ3VtZW50
R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBhcmd1
bWVudEdQUjMpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCwgdmlhYmxlQXJndW1lbnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBl
KG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0ZUZpZWxkT3B0aW1pemUpPihBZGRyZXNzKHZp
YWJsZUFyZ3VtZW50R1BSNCwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRH
UFIzLCB2aWFibGVBcmd1bWVudEdQUjQsIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwogI2Vsc2UK
ICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0g
bV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwpAQCAtNjIyLDE4ICs2OTYsMTIgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9wcml2YXRlX25hbWUoYwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNDsKIAogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAg
ICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCkBAIC02NDMsMTQgKzcxMSwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBq
aXQ7CiAKICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
CiAgICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gcmVn
VDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAg
Y29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lUHV0QnlWYWxSZWdpc3RlcnM6
OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZVB1dEJ5
VmFsUmVnaXN0ZXJzOjp2YWx1ZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
cmVnVDM7CiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q0Owog
CkBAIC02ODAsNyArNzQ4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChj
b25zdAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBy
ZWdUMiwgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTY4OSw3ICs3NTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNv
bnN0CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsK
ICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJl
Z1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTY5OSw3ICs3NjksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3Nl
dHRlcl9ieV9pCiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7
CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJl
Z1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcwOSw3ICs3ODAsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVz
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlWYWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDMs
IHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtNzE5LDcgKzc5MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFs
KGNvbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJl
Z1QxKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJl
Z1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCBy
ZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzI3LDIzICs4MDAsMzMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIGJhc2UpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
YmFzZUdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHJlc3VsdEdQUiA9IEJhc2VsaW5lRGVsQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZURlbEJ5SWRSZWdpc3RlcnM6
OnN0dWJJbmZvOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IEJhc2VsaW5lRGVs
QnlJZFJlZ2lzdGVyczo6c2NyYXRjaDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJh
c2UpOwogICAgIEpJVERlbEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlm
aWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIG51bGxwdHIs
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRp
Zmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZv
R1BSLCBzY3JhdGNoR1BSKTsKKworICAgIFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlw
ZSA9IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SUQ7CisgICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgg
PSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5m
b0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0
dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3Rh
bnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0
dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywg
c3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9k
ZWxCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
KHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
KTsKIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUtYmFy
cmllciBpZiBhIGJhc2UgaXMgY2VsbC4KICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1iYXJy
aWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVycyBy
ZWdpc3RlcnMuCkBAIC03NTksMTUgKzg0MiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVs
X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BEZWxCeUlkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2Vk
Q29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVERl
bEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZGVsQnlJZHNbbV9kZWxCeUlkSW5kZXgrK107CiAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJbW0zMihieXRl
Y29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGFyZ3VtZW50R1BSMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwor
ICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgYXJn
dW1lbnRHUFIxKTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5
SWRPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlD
b2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCksIFRydXN0ZWRJ
bW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTc4MSwyNCArODY2LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9k
ZWxfYnlfaWQoY29uc3QgSW4KICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJn
dW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQ
UjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BS
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMo
KSksIHByb3BlcnR5R1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRp
Zmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2Rl
QmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlLm1fZWNtYU1vZGUudmFsdWUoKSksIGVjbWFNb2RlR1BSKTsKICAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxs
OwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAg
ICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlJ
ZE9wdGltaXplOwotICAgIGVsc2UKLSAgICAgICAgY2FsbCA9IGFwcGVuZENhbGwob3BlcmF0aW9u
RGVsZXRlQnlJZE9wdGltaXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAg
IHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVHUFIgPT0gcmVnVDApOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3Mo
cmVnVDApKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDApKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtODA4LDcgKzg4OCw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0
aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9u
cyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAog
ICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJh
c2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTg0NSwyMiAr
OTI1LDMzIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHIKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QxLCBiYXNlKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBwcm9wZXJ0eSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6YmFz
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVEZWxCeVZhbFJl
Z2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBCYXNl
bGluZURlbEJ5VmFsUmVnaXN0ZXJzOjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IEJhc2VsaW5lRGVsQnlWYWxSZWdpc3RlcnM6OnN0dWJJbmZvOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eSwgcHJvcGVydHlHUFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChw
cm9wZXJ0eUdQUiwgcHJvcGVydHkpOworCiAgICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qx
KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIHJlZ1QzLCByZWdUMik7
Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgICAg
IG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRl
eCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUiwg
QmFzZWxpbmVEZWxCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaCk7CisKKyAgICBVbmxpbmtlZFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAg
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbDsKKyAgICBzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBv
b2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3Rh
bnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3Vu
bGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgYWRk
U2xvd0Nhc2UoKTsKICAgICBtX2RlbEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgYm94Qm9vbGVhbihyZXN1bHRHUFIsIEpT
VmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIAogICAgIC8vIFdlIHNob3VsZCBlbWl0IHdyaXRlLWJh
cnJpZXIgYXQgdGhlIGVuZCBvZiBzZXF1ZW5jZSBzaW5jZSB3cml0ZS1iYXJyaWVyIGNsb2JiZXJz
IHJlZ2lzdGVycy4KICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdy
aXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC04ODMsOSArOTc0LDExIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25EZWxldGVCeVZhbE9wdGltaXplLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIFRydXN0ZWRJbW0zMihi
eXRlY29kZS5tX2VjbWFNb2RlLnZhbHVlKCkpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgYXJndW1lbnRHUFIzKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Cisg
ICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1
bWVudEdQUjEpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlW
YWxPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zm
c2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBhcmd1bWVudEdQUjMsIFRydXN0ZWRJbW0zMihieXRlY29kZS5tX2VjbWFNb2RlLnZh
bHVlKCkpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTg5OSwyNCArOTky
LDE5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEkKICAgICBjb25z
dGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgZWNtYU1vZGVHUFIgPSBhcmd1bWVudEdQUjQ7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5t
X3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5LCBwcm9wZXJ0eUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGUubV9lY21hTW9kZS52YWx1ZSgpKSwgZWNtYU1vZGVHUFIpOwogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uRGVsZXRlQnlWYWxPcHRpbWl6ZTsK
LSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
T3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgc3RhdGljX2Fz
c2VydChyZXR1cm5WYWx1ZUdQUiA9PSByZWdUMCk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwog
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJl
cG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCkBAIC05MjYsNyArMTAxNCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91
dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdp
bmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENh
bGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJz
IGppdDsKIAogICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklU
KSkKICAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKQEAgLTk2MSwyMiArMTA0OSwzMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihiYXNlVlJlZywgcmVnVDApOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lR2V0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZv
R1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1
bHQpOwogCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7
Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VHUFIpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklU
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUlu
ZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgcmVzdWx0UmVncywgcmVn
VDEsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgICAgICBudWxs
cHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRSZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6
VHJ5R2V0QnlJZCk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBB
Y2Nlc3NUeXBlOjpUcnlHZXRCeUlkOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9i
eXRlY29kZUluZGV4OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRl
eCA9IG1fY29uc3RhbnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0
dWJJbmZvLCBzdHViSW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5k
ZXggPSBzdHViSW5mb0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5m
bzsKKworICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTk4NiwxNCArMTA4MywxNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5r
ZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFyZ3VtZW50R1BSMik7CisgICAgY2FsbE9wZXJh
dGlvbjxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpPihBZGRyZXNzKGFyZ3Vt
ZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVz
dWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5s
aW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0g
dGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKTsKQEAgLTEwMDMsMjYgKzExMDMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RyeV9nZXRfYnlfaWQoY29ucwogICAgIG1vdmUoSklUOjpUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gYXJndW1lbnRHUFIxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHJl
Z1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFJlZ2lz
dGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRH
UFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRy
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25UcnlHZXRC
eUlkT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUp
OwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBD
YWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJ
VCkpCi0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25U
cnlHZXRCeUlkT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChv
cGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVl
R1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xMDMwLDIyICsxMTI0LDMxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3Qo
Y29uc3QKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWREaXJlY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91
bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnN0
dWJJbmZvOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
YmFzZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIsIGJhc2VW
UmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVu
dGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwgQWNjZXNzVHlwZTo6R2V0QnlJZERpcmVjdCk7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93
UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIHJlc3VsdFJlZ3Ms
IHN0dWJJbmZvR1BSLCBBY2Nlc3NUeXBlOjpHZXRCeUlkRGlyZWN0KTsKKworICAgIFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5hZGQoKTsK
KyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q7Cisg
ICAgc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlSW5kZXg7CisgICAgSklUQ29u
c3RhbnRQb29sOjpDb25zdGFudCBzdHViSW5mb0luZGV4ID0gbV9jb25zdGFudFBvb2wuYWRkKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6U3RydWN0dXJlU3R1YkluZm8sIHN0dWJJbmZvKTsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7CisgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOworCisgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
ICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZXN1
bHRSZWdzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdz
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwogfQogCkBAIC0xMDU0
LDE2ICsxMTU3LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlk
RGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVu
dCkucmF3Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAg
bG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVu
dEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1
bWVudEdQUjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRp
b25HZXRCeUlkRGlyZWN0T3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29k
ZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZt
KCk7CiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CkBAIC0xMDczLDgzICsxMTc4LDYyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfZGlyZWN0KGMKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1
bWVudEdQUjE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29u
c3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpiYXNlOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgc3Rh
dGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKIAotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3Bl
cnR5R1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRD
b2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWREaXJlY3RPcHRpbWl6
ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsK
LSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWREaXJl
Y3RPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlv
bkdldEJ5SWREaXJlY3RPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
VlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZVZSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0
QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0g
QmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnNjcmF0Y2g7CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6cmVzdWx0KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIGJhc2VH
UFIpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlR1BSLCBiYXNlVlJlZyk7
CiAgICAgCiAgICAgaWYgKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYg
c2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEp1bXAgbm90QXJyYXlMZW5ndGhNb2Rl
ID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX21vZGVNZXRh
ZGF0YS5tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2Rl
OjpBcnJheUxlbmd0aCkpKTsKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJv
ZmlsZSwgcmVnVDEpOworICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRC
eUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5SWRNb2RlTWV0YWRh
dGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgSnVtcCBub3RBcnJheUxl
bmd0aE1vZGUgPSBicmFuY2gzMihOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBPcEdldEJ5SWQ6Ok1ldGFk
YXRhOjpvZmZzZXRPZk1vZGVNZXRhZGF0YSgpICsgR2V0QnlJZE1vZGVNZXRhZGF0YUFycmF5TGVu
Z3RoOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBiYXNlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgbm90QXJyYXlMZW5ndGhNb2RlLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLQogICAgIEpJVEdldEJ5SWRHZW5l
cmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENv
ZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hl
YWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2Nv
ZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3MocmVnVDApLCByZXN1bHRSZWdzLCByZWdUMSwg
QWNjZXNzVHlwZTo6R2V0QnlJZCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwot
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgbV9nZXRCeUlkcy5hcHBl
bmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRo
aXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKLQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QxLCB0aGlzVlJlZyk7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDApOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1f
dW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCByZXN1bHRS
ZWdzLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7CiAKLSAgICBKSVRHZXRCeUlk
V2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFz
ZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5
dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNv
ZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwgcmVzdWx0UmVncywgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dl
dEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7CisgICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKKyAgICBzdHViSW5mby0+Ynl0ZWNvZGVJ
bmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IHN0
dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29sOjpUeXBlOjpT
dHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9D
b25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZv
ID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgpOyAvLyBXZSBt
aWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQ
CisgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIHJl
c3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJl
Z3MpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7CiB9CiAKQEAgLTEx
NTgsMTYgKzEyNDIsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJ
bgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3
Qml0cygpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENv
bnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQ
UjIpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZTxkZWNsdHlwZShvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BS
MCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRl
bnQpLnJhd0JpdHMoKSk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWlu
dDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBAIC0xMTc3
LDI2ICsxMjYzLDU4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29uc3QgSW4K
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQUjE7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VH
UFIgPSBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OmJhc2U7CiAgICAgc3RhdGljX2Fzc2VydChi
YXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRHUFIzOwogCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGdlbi5zdHViSW5mbygpKSwgc3R1YkluZm9HUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2so
bV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOworICAgIGxvYWRD
b25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KS5y
YXdCaXRzKCkpLCBwcm9wZXJ0eUdQUik7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xv
d09wZXJhdGlvbiA9IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKLSAgICBlbHNlCi0gICAgICAg
IGNhbGwgPSBhcHBlbmRDYWxsKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRh
dGEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVn
LCByZXR1cm5WYWx1ZUdQUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKwordm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNv
ZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhp
c1ZhbHVlOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpiYXNlOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdGhpc0dQUiA9IEJhc2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVn
aXN0ZXJzOjp0aGlzVmFsdWU7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJh
c2VsaW5lR2V0QnlJZFdpdGhUaGlzUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MoQmFzZWxpbmVHZXRCeUlkV2l0aFRoaXNSZWdpc3Rl
cnM6OnJlc3VsdCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNl
R1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWUmVnLCB0aGlzR1BSKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzR1BSLCB0aGlzVlJlZyk7CisKKyAgICBKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
KyAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIHJlc3VsdFJlZ3MsIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh0aGlzR1BSKSwgc3R1YkluZm9HUFIpOworCisg
ICAgVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1Yklu
Zm9zLmFkZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJ
ZFdpdGhUaGlzOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4
OworICAgIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3Rh
bnRQb29sLmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHVi
SW5mbyk7CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5m
b0luZGV4OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdl
bi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNv
IHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwor
ICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZyk7CiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTEy
MDYsNyArMTMyNCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0
IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZH
L0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0
cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCi0g
ICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKICAgICAgICAgaml0LnRhZ1JldHVy
bkFkZHJlc3MoKTsKQEAgLTEyNDEsMTYgKzEzNTksMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklU
R2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRC
eUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhp
c09wdGltaXplLCByZXN1bHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlk
ZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIGFy
Z3VtZW50R1BSMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNW
YWx1ZSwgYXJndW1lbnRHUFIzKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGU8ZGVjbHR5
cGUob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUpPihieXRlY29kZSwgQWRkcmVzcyhh
cmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
IHJlc3VsdFZSZWcsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIsIGFy
Z3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNl
bHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEyNjAsMjggKzEzODEsMjIgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHBy
IEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMjsgLy8gYXJnMSBhbHJlYWR5IGluIHVz
ZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSByZWdUMDsKLSAgICBjb25zdGV4cHIg
R1BSUmVnIHRoaXNHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBC
YXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHRoaXNHUFIgPSBCYXNlbGluZUdldEJ5SWRXaXRoVGhpc1JlZ2lzdGVyczo6dGhpc1ZhbHVl
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAgICAg
c3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsKICAg
ICBzdGF0aWNfYXNzZXJ0KHRoaXNHUFIgPT0gYXJndW1lbnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZvR1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5
Q29kZUJsb2NrKG1fY29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0
dWJJbmZvR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ss
ICppZGVudCkucmF3Qml0cygpKSwgcHJvcGVydHlHUFIpOwogICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlz
T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25H
ZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQpAQCAtMTI5MSw3ICsxNDA2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQu
dGFnUmV0dXJuQWRkcmVzcygpOwpAQCAtMTMyOSwyMyArMTQ0NCwzOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVn
ID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVZSZWcgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIGJvb2wgZGlyZWN0ID0gYnl0ZWNvZGUubV9mbGFncy5pc0RpcmVj
dCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1
cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8g
dG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3Rl
cnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0
IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBm
cm9tIHRoaXMuCiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgcmVnVDAs
IHZhbHVlVlJlZywgcmVnVDEpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2Vs
aW5lUHV0QnlJZFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BS
ID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjp2YWx1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHN0dWJJbmZvR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mbzsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSBCYXNlbGluZVB1dEJ5SWRSZWdpc3RlcnM6OnNj
cmF0Y2g7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgYmFzZUdQUiwgdmFsdWVW
UmVnLCB2YWx1ZUdQUik7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VHUFIs
IGJhc2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2Nv
ZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4
KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KSwKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QzLCByZWdUMiwg
ZWNtYU1vZGUoYnl0ZWNvZGUpLAorICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHN0dWJJbmZvR1BSLCBzY3JhdGNoR1BSLCBlY21h
TW9kZShieXRlY29kZSksCiAgICAgICAgIGRpcmVjdCA/IFB1dEtpbmQ6OkRpcmVjdCA6IFB1dEtp
bmQ6Ok5vdERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUgPSBBY2Nlc3NUeXBlOjpQdXRCeUlkOworICAgIHN0dWJJbmZvLT5wdXRL
aW5kID0gZGlyZWN0ID8gUHV0S2luZDo6RGlyZWN0IDogUHV0S2luZDo6Tm90RGlyZWN0OworICAg
IHN0dWJJbmZvLT5lY21hTW9kZSA9IGVjbWFNb2RlKGJ5dGVjb2RlKTsKKyAgICBzdHViSW5mby0+
Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25zdGFudFBvb2w6OkNv
bnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdlbi5tX3VubGlua2Vk
U3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CisgICAgcmVzZXRTUCgp
OyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5
IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4p
OwogICAgIAogICAgIC8vIElDIGNhbiB3cml0ZSBuZXcgU3RydWN0dXJlIHdpdGhvdXQgd3JpdGUt
YmFycmllciBpZiBhIGJhc2UgaXMgY2VsbC4KQEAgLTEzNTksMTQgKzE0ODksMTggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIAogICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CiAKICNp
ZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywg
KmlkZW50KS5yYXdCaXRzKCkpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsK
KyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFy
Z3VtZW50R1BSMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVl
LCBhcmd1bWVudEdQUjIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCBhcmd1bWVudEdQUjMpOworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9u
UHV0QnlJZFN0cmljdE9wdGltaXplKT4oQWRkcmVzcyhhcmd1bWVudEdQUjEsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICpp
ZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTEz
NzYsMjUgKzE1MTAsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJ
bgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsg
Ly8gYXJnMSBhbHJlYWR5IGluIHVzZS4KLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlR1BSID0g
cmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7CisgICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZUdQUiA9IEJhc2VsaW5lUHV0QnlJZFJlZ2lzdGVyczo6dmFsdWU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gQmFzZWxpbmVQdXRCeUlkUmVnaXN0ZXJzOjpi
YXNlOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvcGVydHlHUFIgPSBhcmd1bWVudEdQUjQ7CiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlR1BSID09IGFyZ3VtZW50R1BSMCB8fCAhaXNBUk02NCgpKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlR1BSID09IGFyZ3VtZW50R1BSMSk7CiAKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5mb0dQUik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdCaXRzKCkpLCBwcm9wZXJ0eUdQ
Uik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4
LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX3VubGlua2VkQ29kZUJs
b2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfcHV0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBnZW4uc3R1
YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKTsKLSAgICBl
bHNlCi0gICAgICAgIGNhbGwgPSBhcHBlbmRDYWxsKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCkpOwog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMTQwNCw3ICsxNTMyLDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCiAgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsK
KyAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKQogICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwpAQCAt
MTQ0MSwyMCArMTU2OSwzMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0
cnVjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVJbkJ5SWRSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHByIEdQ
UlJlZyByZXN1bHRHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6cmVzdWx0OworICAgIGNv
bnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lzdGVyczo6c3R1
YkluZm87CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVn
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlR1BSKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZVZSZWcpOwogCiAgICAgSklU
SW5CeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2Vs
aW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2Rl
QmxvY2sobV9jb2RlQmxvY2ssICppZGVudCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCByZWdUMSk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAg
IGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgICAgIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93
bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9jaywgKmlkZW50KSwgSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgIFVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZvcy5h
ZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkluQnlJZDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZywgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTQ2MywxNCArMTYw
MiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zCiAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9jb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7CisgICAgbG9hZENvbnN0YW50KGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBhcmd1bWVudEdQUjEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQUjIpOworICAg
IGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpPihBZGRyZXNz
KGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwg
Q2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2Nr
KG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCkucmF3Qml0cygpKTsKICNlbHNlCiAgICAgVk0m
IHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE0ODAsMjggKzE2MjIsMjIgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2Rl
T2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBzdHVi
SW5mb0dQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBy
ZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlJZFJlZ2lz
dGVyczo6YmFzZTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gYXJndW1lbnRH
UFIzOwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlzQVJN
NjQoKSk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCBzdHViSW5m
b0dQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2NvZGVCbG9jaywgKmlkZW50KS5yYXdC
aXRzKCkpLCBwcm9wZXJ0eUdQUik7CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1
YkluZm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRy
KENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9j
ayhtX3VubGlua2VkQ29kZUJsb2NrLCAqaWRlbnQpLnJhd0JpdHMoKSksIHByb3BlcnR5R1BSKTsK
ICAgICAvLyBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvciB3aWxsIGRvIGV4
YWN0bHkgd2hhdCB3ZSBuZWVkLgogICAgIC8vIFNvLCB0aGVyZSdzIG5vIHBvaW50IGluIGNyZWF0
aW5nIGEgZHVwbGljYXRlIHRodW5rIGp1c3QgdG8gZ2l2ZSBpdCBhIGRpZmZlcmVudCBuYW1lLgog
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkluQnlJZE9w
dGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgQ2FsbCBj
YWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQot
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSW5CeUlk
T3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRpb25J
bkJ5SWRPcHRpbWl6ZSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTUxMCwyNSArMTY0NiwzMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSW5zdHJ1CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKHJlZ1QwLCBwcm9maWxlLCByZWdUMik7CisgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpiYXNlOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgcHJvcGVydHlHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnByb3BlcnR5Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
OjpyZXN1bHQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5C
eVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHByb3Bl
cnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7
CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGJ5dGVjb2RlLCBiYXNlR1BSLCBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gpOwogCiAgICAgSklUSW5CeVZhbEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCks
IEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAgICAg
ICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkluQnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3Bl
cnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgVW5s
aW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX3VubGlua2VkU3R1YkluZm9zLmFk
ZCgpOworICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5CeVZhbDsKKyAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKKyAgICBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IHN0dWJJbmZvSW5kZXggPSBtX2NvbnN0YW50UG9vbC5hZGQoSklU
Q29uc3RhbnRQb29sOjpUeXBlOjpTdHJ1Y3R1cmVTdHViSW5mbywgc3R1YkluZm8pOworICAgIGdl
bi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1YkluZm9JbmRleDsKKyAgICBn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87CisKKyAgICBnZW4uZ2VuZXJhdGVCYXNl
bGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Cisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luQnlWYWxzLmFwcGVuZChnZW4pOwogCi0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMTUzNywxNSArMTY4MSwxOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEluCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlWYWw+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1f
aW5CeVZhbHNbbV9pbkJ5VmFsSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlWYWxPcHRpbWl6ZSwgZHN0LCBUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCBwcm9maWxl
LCByZWdUMCwgcmVnVDEpOworICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3Vt
ZW50R1BSMSk7CisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBP
cEluQnlWYWw6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBhcmd1bWVudEdQUjIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBhcmd1bWVudEdQ
UjMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgdmlh
YmxlQXJndW1lbnRHUFI0KTsKKyAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbklu
QnlWYWxPcHRpbWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCBhcmd1bWVudEdQUjIsIGFyZ3VtZW50R1BSMywgdmlhYmxlQXJndW1lbnRHUFI0KTsKICNlbHNl
CiAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9
IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKQEAgLTE1NTYsNTkgKzE3MDMsNzAgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBJbgogCiAgICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IGFyZ3VtZW50R1BSMzsKICAgICBjb25zdGV4cHIgR1BSUmVnIHByb2Zp
bGVHUFIgPSBhcmd1bWVudEdQUjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVn
VDA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHJlZ1QxOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYmFzZUdQUiA9IEJhc2VsaW5lSW5CeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJz
Ojpwcm9wZXJ0eTsKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VHUFIgPT0gYXJndW1lbnRHUFIwIHx8
ICFpc0FSTTY0KCkpOwogICAgIHN0YXRpY19hc3NlcnQocHJvcGVydHlHUFIgPT0gYXJndW1lbnRH
UFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJbmZv
R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHJvZmlsZSksIHByb2ZpbGVHUFIpOworICAg
IGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1Yklu
Zm9HUFIpOworICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJ
bkJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAg
ICAgLy8gc2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yIHdpbGwgZG8gZXhh
Y3RseSB3aGF0IHdlIG5lZWQuCiAgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRp
bmcgYSBkdXBsaWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCiAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9w
dGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBDYWxs
IGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGdlbi5zdHViSW5mbygpLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25JbkJ5
VmFsT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxsID0gYXBwZW5kQ2FsbChvcGVyYXRp
b25JbkJ5VmFsT3B0aW1pemUpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIo
Y2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZShWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSwgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
T3JCcmFuZCwgQWNjZXNzVHlwZSB0eXBlKQogewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlPckJyYW5k
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6
OmJhc2U7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IEJhc2VsaW5lSW5CeVZh
bFJlZ2lzdGVyczo6cHJvcGVydHk7CisgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgPSBC
YXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHN0
dWJJbmZvR1BSID0gQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzOjpzdHViSW5mbzsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eU9yQnJhbmQsIHByb3BlcnR5R1BSKTsKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZUdQUiwgYmFzZSk7CiAKICAgICBKSVRJbkJ5VmFsR2VuZXJhdG9y
IGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3Jp
Z2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlw
ZSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBy
ZWdUMik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGlmICghSklUQ29k
ZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKCk7Cisg
ICAgICAgIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgdHlwZSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhiYXNl
R1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBz
dHViSW5mb0dQUik7CisKKyAgICBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
IG1fdW5saW5rZWRTdHViSW5mb3MuYWRkKCk7CisgICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSB0
eXBlOworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAg
IEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29s
LmFkZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7
CisgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4
OworICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5l
cmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZv
R1BSKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwogfQogCi12b2lkIEpJVDo6ZW1pdEhh
c1ByaXZhdGVTbG93KFZpcnR1YWxSZWdpc3RlciBkc3QsIEFjY2Vzc1R5cGUgdHlwZSkKK3ZvaWQg
SklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lz
dGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSB0eXBlKQogewot
ICAgIEFTU0VSVCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lIHx8IHR5cGUgPT0g
QWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHByb3BlcnR5KTsKKyAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUg
PT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgfHwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQ
cml2YXRlQnJhbmQpOwogCiAgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFs
c1ttX2luQnlWYWxJbmRleCsrXTsKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsK
IAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKHR5cGUgPT0gQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQ
cml2YXRlTmFtZU9wdGltaXplIDogb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUsIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1Yklu
Zm8oKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
CisgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4LCBh
cmd1bWVudEdQUjEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYXJndW1lbnRH
UFIyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCBhcmd1bWVudEdQUjMp
OworICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRp
bWl6ZSk+KEFkZHJlc3MoYXJndW1lbnRHUFIxLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZT
bG93T3BlcmF0aW9uKCkpLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVu
dEdQUjIsIGFyZ3VtZW50R1BSMyk7CiAjZWxzZQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAg
ICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CkBA
IC0xNjE4LDI3ICsxNzc2LDIxIEBAIHZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVh
bFJlZ2kKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBhcmd1bWVudEdQ
UjI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcmVnVDA7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eU9yQnJhbmRHUFIgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2VHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OmJhc2U7CisgICAgY29uc3RleHBy
IEdQUlJlZyBwcm9wZXJ0eU9yQnJhbmRHUFIgPSBCYXNlbGluZUluQnlWYWxSZWdpc3RlcnM6OnBy
b3BlcnR5OwogICAgIHN0YXRpY19hc3NlcnQoYmFzZUdQUiA9PSBhcmd1bWVudEdQUjAgfHwgIWlz
QVJNNjQoKSk7CiAgICAgc3RhdGljX2Fzc2VydChwcm9wZXJ0eU9yQnJhbmRHUFIgPT0gYXJndW1l
bnRHUFIxKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksIHN0dWJJ
bmZvR1BSKTsKKyAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNs
dHlwZShvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplKSwgZGVjbHR5cGUob3BlcmF0aW9u
R2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZSk+Ojp2YWx1ZSk7CiAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpLCBkZWNs
dHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OnZhbHVlKTsKICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIENhbGwg
Y2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkK
LSAgICAgICAgZ2VuLnN0dWJJbmZvKCktPm1fc2xvd09wZXJhdGlvbiA9IHR5cGUgPT0gQWNjZXNz
VHlwZTo6SGFzUHJpdmF0ZU5hbWUgPyBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplIDog
b3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemU7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
ID0gYXBwZW5kQ2FsbCh0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lID8gb3BlcmF0
aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZSA6IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGlt
aXplKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Y2FsbCk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xNjUyLDcgKzE4MDQsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVfbmFtZShjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzUHJp
dmF0ZU5hbWU+KCk7Ci0gICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBBY2Nl
c3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2Rl
Lm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fcHJvcGVydHksIEFjY2Vzc1R5cGU6
Okhhc1ByaXZhdGVOYW1lKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfYnJh
bmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTE2NjYsNDYgKzE4
MTgsNzQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19wcml2YXRlX2JyYW5kKAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEhhc1ByaXZhdGVCcmFuZD4oKTsKLSAgICBlbWl0SGFzUHJpdmF0ZVNsb3co
Ynl0ZWNvZGUubV9kc3QsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisgICAgZW1pdEhh
c1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1f
YnJhbmQsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKLXZvaWQgSklUOjplbWl0
VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3ZvaWQgSklU
OjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BS
UmVnIHNjcmF0Y2hHUFIpCiB7CiAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAg
ICAgICAgcmV0dXJuOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRk
cmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQo
KS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworCisg
ICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2Ny
YXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldh
dGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwg
QWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xv
c3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewotICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
ZXB0aDsgKytpKQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNl
dE9mTmV4dCgpKSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0K
IAorCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVz
b2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigp
OwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBlOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29k
ZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNv
bHZlVHlwZTsKLSAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRo
OworCisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOworCisgICAgSnVtcExp
c3Qgc2xvd0Nhc2U7CisKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlk
R1BSUmVnKSB7CisgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJl
ZykgeworICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CisgICAgICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgIH0KKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2Jq
ZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zm
c2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfTsKKwor
ICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKSB7CisgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMb2NhbFNjb3BlRGVwdGgoKSwgcmVnVDEpOworCisgICAg
ICAgIEFTU0VSVChzY29wZUdQUiA9PSByZWdUMCk7CisgICAgICAgIExhYmVsIGxvb3AgPSBsYWJl
bCgpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVn
VDApOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAganVt
cCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH07
CiAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewog
ICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRT
Y29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7
Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRy
ZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihj
b25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9j
aygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkuCisgICAgICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBsb2Fk
MzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmpl
Y3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE3MTMsMTY4ICsxODkzLDE2NSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgICAgIGNhc2UgR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
OgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRT
Y29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgLy8gSlNTY29wZTo6
Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkgZm9yIEdsb2JhbFZhciosCisgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIq
LgorICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CisgICAgICAgICAgICBkb1Zh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVn
VDApOworICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwg
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisg
ICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zm
c2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZl
Q2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IGRlcHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVu
dC5nZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1p
YzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29s
dmVkQ2xvc3VyZVZhcjoKKyAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5OgogICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBj
YXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMy
KCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29s
dmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNh
bFZhcik7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKKyAgICAg
ICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVudCgpLCByZWdUMCk7CisgICAgZWxzZSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgaWYg
KHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCBwcm9maWxlZFJlc29sdmVUeXBl
ID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgZW1pdENv
ZGUocHJvZmlsZWRSZXNvbHZlVHlwZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworCisgICAgICAgICAgICBKdW1w
TGlzdCBza2lwVG9FbmQ7CisgICAgICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpLCByZWdUMSk7
CisKKyAgICAgICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlKSB7CisgICAgICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QxLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgICAgICBlbWl0
Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOworICAgICAgICAgICAgICAgIG5vdENhc2UubGluayh0aGlzKTsKKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7CisgICAgICAgICAgICBlbWl0Q2Fz
ZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFy
KTsKKyAgICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OworICAgICAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKKyAgICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwogCi0gICAg
ICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHNr
aXBUb0VuZC5saW5rKHRoaXMpOworICAgICAgICB9CiAgICAgfQotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0K
LSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKLSAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZSk7CiAKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9Ci0jZWxzZSAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAorI2Vsc2UKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBSZXNvbHZlVHlw
ZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jaykubV9yZXNvbHZlVHlwZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAKICAg
ICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2Rl
T2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAg
QVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4
KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgLy8gSWYg
d2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxp
bmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIHJlc29sdmUgdHlwZS4KIAotICAg
IGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBpZiAo
cHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAorICAgICAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNh
bEVudmlyb25tZW50KCksIHJlZ1QwKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHRyZGlmZl90IG1l
dGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRh
dGEpOworICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJs
b2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CisKKyAgICAg
ICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAg
cmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHZtLCBDbG9zdXJlVmFyLCAi
QmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGUgQ2xvc3VyZVZhciIpOworICAgICAgICB9OwogCi0j
ZGVmaW5lIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBvcF9yZXNvbHZlX3Nj
b3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAgc3RhdGljIGNvbnN0IFRodW5r
R2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVf
VFlQRShSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyAgICAgICAgYXV0byBjbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrc0dlbmVyYXRvciA9IFtdIChWTSYgdm0pIHsKKyAgICAgICAgICAg
IHJldHVybiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyIpOwogICAgICAgICB9OwotI3VuZGVmIFJFU09MVkVf
U0NPUEVfR0VORVJBVE9SCisKKyAgICAgICAgYXV0byBnZW5lcmljUmVzb2x2ZVNjb3BlR2VuZXJh
dG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICAgICAgcmV0dXJuIEpJVDo6Z2VuZXJhdGVPcFJl
c29sdmVTY29wZVRodW5rKHZtLCBzdGQ6Om51bGxvcHQsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9z
Y29wZSBnZW5lcmljIik7CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBt
ZXRhZGF0YUdQUiA9IHJlZ1QyOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0g
cmVnVDA7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdU
NTsKIAogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CiAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsK
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9y
c1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOworICAgICAgICBpZiAocHJv
ZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgICAgICAgICAgY29kZSA9IHZtLmdl
dENUSVN0dWIoY2xvc3VyZVZhckdlbmVyYXRvcik7CisgICAgICAgIGVsc2UgaWYgKHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAg
ICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
c0dlbmVyYXRvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElT
dHViKGdlbmVyaWNSZXNvbHZlU2NvcGVHZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFy
Q2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSwg
c3RkOjpvcHRpb25hbDxSZXNvbHZlVHlwZT4gcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5r
TmFtZSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2Fu
IG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCiAgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorCisgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKKwogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1l
dGFkYXRhOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5j
b21pbmcKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5n
CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1QyOyAvLyBpbmNvbWluZwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsgLy8gaW5jb21pbmcKICAgICBj
b25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7IC8vIGluY29taW5nIC0g
cGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4KLSAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVj
dEdQUiA9IHJlZ1Q0OwogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZU9mZnNldEdQUik7Ci0gICAg
UkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZlVHlwZSkp
OwogCi0gICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7
CiAKLSAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFk
YXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0
YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BS
KTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlOwogCi0gICAgYXV0byBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxP
YmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNr
ID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0
R1BSID0gSW52YWxpZEdQUlJlZykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09
IEludmFsaWRHUFJSZWcpIHsKICAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0Owot
ICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgfQotICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxP
YmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0Ojpv
ZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0ds
b2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBv
aW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
ICAgICB9OwogCiAgICAgYXV0byBlbWl0UmVzb2x2ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOwotICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRh
LCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7Ci0KLSAgICAgICAgTGFiZWwgbG9vcCA9IGxh
YmVsKCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zm
c2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSks
IHJlZ1QxKTsKLSAgICAgICAgICAgIGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7Ci0gICAgICAg
IH0KLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzY29wZUdQ
UiA9PSByZWdUMCk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0
YWRhdGE6Om9mZnNldE9mTG9jYWxTY29wZURlcHRoKCkpLCByZWdUMSk7CisKKyAgICAgICAgTGFi
ZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVz
dDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgIGppdC5zdWIzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7
CisgICAgICAgIGRvbmUubGluaygmaml0KTsKICAgICB9OwogCiAgICAgYXV0byBlbWl0Q29kZSA9
IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKQEAgLTE4ODIsMTIgKzIwNTksMTEgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVC
bG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkuCi0gICAgICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKLSAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7Ci0gICAg
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFs
T2JqZWN0R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vw
b2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAg
ZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0
YWRhdGE6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpOworICAg
ICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgp
KSwgcmVnVDEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4OTcsMTEg
KzIwNzMsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAg
ICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFu
ZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBm
b3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0g
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUg
PT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwg
cmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xv
YmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpA
QCAtMTkwOSw3ICsyMDg1LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5h
bWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMTkx
OSw4MyArMjA5NSw0NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVU
eXBlKSksIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENv
ZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczogeworICAgIGlmIChyZXNvbHZlVHlwZSkgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVCgqcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCAqcmVzb2x2ZVR5cGUgPT0gQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBlbWl0Q29kZSgqcmVzb2x2ZVR5
cGUpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9y
ZXNvbHZlVHlwZSkpLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAg
ICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlJl
c29sdmVUeXBlKCkpLCByZWdUMSk7CiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsK
LSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwot
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OworICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkg
eworICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MSwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7CisgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAg
ICAgICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOworICAgICAgICB9OwogCi0gICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQorICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIpOworICAgICAgICBl
bWl0Q2FzZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxW
YXIpOworICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBz
a2lwVG9FbmQubGluaygmaml0KTsKICAgICB9CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7
CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZt
KCkuZ2V0Q1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOwotICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0
Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1Yihz
bG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
dGh1bmtOYW1lKTsKIH0KIAotI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1Io
cmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKLSAg
ICB7IFwKLSAgICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29w
ZShyZXNvbHZlVHlwZSkpIFwKLSAgICAgICAgICAgIHJldHVybiB7IH07IFwKLSAgICAgICAgSklU
IGppdCh2bSk7IFwKLSAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlw
ZSk7IFwKLSAgICB9Ci1GT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVf
R0VORVJBVE9SKQotI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgotCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Nj
b3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRo
aXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBi
ZWNhdXNlCiAgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2Jh
bE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgogICAg
IC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2Jh
bE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKICAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgotICAgIEpJVCBqaXQodm0pOworICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICAvLyBU
aGUgZmFzdCBwYXRoIGFscmVhZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUo
WDg2XzY0KQpAQCAtMjAwNCwxNyArMjE0MiwyMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgaml0LnB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBs
aW5rUmVnaXN0ZXIpOwogI2VuZGlmCiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gcmVnVDU7Ci0gICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0Zv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIGppdC5z
dG9yZTMyKGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBjb2Rl
QmxvY2tHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAgY29uc3RleHByIEdQUlJlZyBpbnN0cnVjdGlvbkdQ
UiA9IGFyZ3VtZW50R1BSMTsKIAorICAgIHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9m
ZnNldEdQUiAhPSBjb2RlQmxvY2tHUFIpOworICAgIHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRl
Y29kZU9mZnNldEdQUiAhPSBnbG9iYWxPYmplY3RHUFIpOworICAgIHN0YXRpY19hc3NlcnQoaW5j
b21pbmdCeXRlY29kZU9mZnNldEdQUiAhPSBpbnN0cnVjdGlvbkdQUik7CisKICAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7
CiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2lu
dGVyKCkpLCBpbnN0cnVjdGlvbkdQUik7Ci0gICAgaml0LmFkZFB0cihieXRlY29kZU9mZnNldEdQ
UiwgaW5zdHJ1Y3Rpb25HUFIpOworICAgIGppdC5hZGRQdHIoaW5jb21pbmdCeXRlY29kZU9mZnNl
dEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOwogCiAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBl
KG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lKT4oZ2xvYmFsT2JqZWN0R1BSLCBpbnN0
cnVjdGlvbkdQUik7CiAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKQEAgLTIwMzQs
NyArMjE3Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5k
bGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX3Jlc29sdmVf
c2NvcGUiKTsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyNlbmRpZiAv
LyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNs
b3QpCiB7CkBAIC0yMDY2LDU4ICsyMjA4LDc1IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZh
cihWaXJ0dWFsUmVnaXMKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVj
b2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dl
dFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0g
bWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3Qg
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOworICAg
IFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCBzY29wZUdQUik7CiAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgSnVtcExp
c3Qgc2xvd0Nhc2U7CisKKyAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlv
bkNoZWNrcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpT
R2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2lu
dFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Cisg
ICAgfTsKKyAgICAKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwg
c3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBz
aW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2Jh
bE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9y
IHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsKLSAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZz
ZXQgPSByZWdUMTsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CisgICAgICAg
ICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9u
J3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFk
ZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGlu
amVjdGlvbi4KKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0
RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KSk7CiAKICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZd
ICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIGJh
c2UsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAg
ICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJl
Z1QzKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
YnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0g
ICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBsb2Fk
UHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNl
dE9mT3BlcmFuZCgpLCByZWdUMSk7CisKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkg
ewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhh
bk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JF
cXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwogICAgICAg
ICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CiAgICAg
ICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBzaWdu
RXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUlu
ZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKworICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
MCk7CisgICAgICAgICAgICBuZWczMihyZWdUMSk7CisgICAgICAgICAgICBzaWduRXh0ZW5kMzJU
b1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwg
cmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2Fz
ZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4o
b3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90
KSwgcmVnVDApOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwg
cmVnVDApOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDApOwogICAg
ICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVj
ay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Cisg
ICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAg
ICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOworICAgICAgICAg
ICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRGcm9t
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDMpOworICAgICAgICAgICAg
c3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgICAgICBs
c2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHJlZ1QzKTsKKyAgICAgICAgICAgIGFkZFB0cihzY29w
ZUdQUiwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKKwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBNb2R1bGVWYXI6CkBAIC0yMTI3LDIxMSArMjI4NiwxODkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHByb2ZpbGVkUmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCBwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICBlbWl0Q29kZShwcm9maWxlZFJlc29sdmVU
eXBlKTsKKyAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQ
dXRJbmZvKCksIHJlZ1QwKTsKICAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAotICAgICAg
ICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwg
ZmFsc2UpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxW
YXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2Jh
bFZhci5saW5rKHRoaXMpOwogCi0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
ID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2Fs
VmFyLCB0cnVlKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7
Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1Qw
KTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisgICAgICAgIEp1bXAgbm90R2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMp
OwogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIEp1bXAgbm90R2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwogICAgICAg
ICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFBy
b3BlcnR5LCBmYWxzZSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKICAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwogICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKKyAg
ICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CiAgICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwogCiAg
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmso
dGhpcyk7CiAKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGp1bXAoKSk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZSk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29w
ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIGN1cnJlbnRJbnN0cnVj
dGlvbik7Ci19CiAKLSNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBhcmd1bWVudEdQUjAsIGluc3Ry
dWN0aW9uKTsKK30KIAorI2Vsc2UKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9
IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0
YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJl
c29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQ
dXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFT
U0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwot
ICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09
IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmlu
c3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworCisg
ICAgYXV0byBjbG9zdXJlVmFyR2VuZXJhdG9yID0gW10gKFZNJiB2bSkgeworICAgICAgICByZXR1
cm4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsodm0sIENsb3N1cmVWYXIsICJCYXNl
bGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CiAKLSAgICBjb25z
dGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7Ci0gICAgY29uc3RleHByIEdQUlJlZyBz
Y29wZUdQUiA9IHJlZ1Q2OworICAgIGF1dG8gY2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3NHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAgICAgIHJldHVybiBKSVQ6OmdlbmVyYXRl
T3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Ms
ICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGUgQ2xvc3VyZVZhciIpOworICAgIH07CisKKyAg
ICBhdXRvIGdlbmVyaWNHZXRGcm9tU2NvcGVHZW5lcmF0b3IgPSBbXSAoVk0mIHZtKSB7CisgICAg
ICAgIHJldHVybiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayh2bSwgc3RkOjpudWxs
b3B0LCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlIGdlbmVyaWMiKTsKKyAgICB9OworCisg
ICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gcmVnVDU7CiAKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyKSB7Ci0g
ICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNl
dEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNl
dCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxl
KGJ5dGVjb2RlKTsKIAotI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5
cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKLSAgICAgICAg
c3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKLSAgICAgICAgICAg
IEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCi0gICAgICAg
IH07Ci0jdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0
YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9m
ZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0
YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNv
ZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Ci0gICAgICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0pLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7Ci0gICAgfQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY29kZTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAg
ICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyR2VuZXJhdG9yKTsKKyAgICBlbHNl
IGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJU3R1YihjbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrc0dlbmVyYXRvcik7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJ
U3R1YihnZW5lcmljR2V0RnJvbVNjb3BlR2VuZXJhdG9yKTsKKworICAgIGVtaXROYWtlZE5lYXJD
YWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUs
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtLCBzdGQ6Om9wdGlv
bmFsPFJlc29sdmVUeXBlPiByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewog
ICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3Jr
IHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAogICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCiAgICAgdXNpbmcgTWV0YWRhdGEg
PSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKLSAg
ICBSRUxFQVNFX0FTU0VSVCh0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBl
KSk7Ci0KLSAgICB0YWdSZXR1cm5BZGRyZXNzKCk7Ci0KLSAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKLSAgICBh
ZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDQ7CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOwogCi0g
ICAgSnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAgIGF1dG8g
ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJf
dCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCkgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIG1ldGFkYXRhU3RydWN0dXJlT2Zmc2V0KSwgcmVnVDEpOwotICAgICAgICBtb3Zl
KHNjb3BlR1BSLCByZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRy
KFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDEpKTsKLSAgICB9OworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0
YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGppdC5hZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BS
KTsKIAotICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CisKKyAgICBhdXRvIGRv
VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsK
ICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9p
bnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRk
cmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMy
KElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9i
amVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0
OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9
OwogICAgIAotICAgIGF1dG8gZW1pdEdldFZhckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90IG9w
ZXJhbmQsIEdQUlJlZyByZWcpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBvcGVyYW5kKSwgcmVnKTsKLSAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7Ci0gICAgfTsKLQot
ICAgIGF1dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3Bl
cmFuZCwgR1BSUmVnIHJlZykgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IG9wZXJhbmQpLCByZWcpOwotICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKLSAgICB9OwotCi0g
ICAgYXV0byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcg
b3BlcmFuZEdQUikgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVn
aXN0ZXIpKTsKLSAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsK
LSAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxl
cygpKSwgcmVnVDApOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgYXV0
byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAg
ICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIsIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV9zdHJ1Y3R1cmUpKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5q
ZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0
aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVj
a2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0KLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYmFzZSA9IHJlZ1QwOwotICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSBy
ZWdUMDsKLSAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7Ci0gICAg
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKLQotICAgICAgICAgICAg
aml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAg
ICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAgICAgICAgICAvLyBTdHJ1Y3R1
cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0
dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVz
b2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAgICAgICAg
aml0LmxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSk7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MSkpOworCisgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQp
PihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVxdWFsLCBz
Y29wZUdQUiwgcmVnVDMpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5k
KSksIG9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMSk7CisKICAgICAgICAgICAgIGlm
IChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBi
cmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNl
dElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMp
OworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRl
clRoYW5PckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7
CisgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9m
TGluZSk7CisgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluaygmaml0KTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAg
ICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICBs
b2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDApOworICAgICAgICAgICAgaml0Lm5lZzMyKHJlZ1QxKTsKKyAgICAg
ICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgICAgICAgICAg
aml0LmxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZWdUMCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAg
ICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEds
b2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2lu
dGVyKE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihPQkpFQ1Rf
T0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGRvVmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZz
ZXRPZk9wZXJhbmQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDApLCByZWdUMCk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5icmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRh
dGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIHJlZ1QzKTsKLSAg
ICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CisgICAgICAgICAg
ICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRh
dGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOworICAgICAgICAgICAgc3RhdGljX2Fzc2Vy
dCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgICAgICBqaXQubHNoaWZ0NjQo
VHJ1c3RlZEltbTMyKDMpLCByZWdUMyk7CisgICAgICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BS
LCByZWdUMyk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKKwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqdW1wKCkpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTIzNDEsODYgKzI0NzgsNjMgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN3
aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZvKSksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIo
VHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29s
dmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAg
ICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAg
ICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRy
dWUpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgaWYgKHJlc29sdmVUeXBlKSB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCpyZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8ICpyZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIGVt
aXRDb2RlKCpyZXNvbHZlVHlwZSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tp
cFRvRW5kOwotICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX2dldFB1dEluZm8pKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5
cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZz
ZXRPZkdldFB1dEluZm8oKSksIHJlZ1QwKTsKKyAgICAgICAgaml0LmFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRv
IFQwCiAKLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CisgICAgICAg
IEp1bXAgbm90R2xvYmFsVmFyID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RHbG9iYWxWYXIubGlu
aygmaml0KTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBq
aXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAg
ICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKCZqaXQpOworCisgICAgICAg
IEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGppdC5icmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGlz
R2xvYmFsUHJvcGVydHkubGluaygmaml0KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVy
dHkpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisgICAg
ICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOwor
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsoJmppdCk7CiAKLSAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25zLmxpbmsoJmppdCk7CiAKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5q
dW1wKCkpOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZh
bHNlKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHNraXBUb0VuZC5saW5rKCZqaXQpOwogICAg
IH0KIAogICAgIHN0YXRpY19hc3NlcnQoVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0g
MSk7Ci0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNF
VE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisgICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJl
c3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmls
ZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAKLSAgICByZXQoKTsKKyAgICBqaXQucmV0KCk7
CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIHNsb3dDYXNlSGFuZGxlciA9IHZt
KCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKTsKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIu
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIo
c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFn
LCB0aHVua05hbWUpOwogfQogCi0jZGVmaW5lIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFU
T1IocmVzb2x2ZVR5cGUpIFwKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBc
Ci0gICAgeyBcCi0gICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BHZXRGcm9t
U2NvcGUocmVzb2x2ZVR5cGUpKSBcCi0gICAgICAgICAgICByZXR1cm4geyB9OyBcCi0gICAgICAg
IEpJVCBqaXQodm0pOyBcCi0gICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcEdldEZyb21TY29w
ZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3BlXyIgI3Jlc29s
dmVUeXBlKTsgXAotICAgIH0KLUZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVfR0VUX0ZST01f
U0NPUEVfR0VORVJBVE9SKQotI3VuZGVmIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IK
LQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0
ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxp
bmUgSklUIGJlY2F1c2UKICAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCiAgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAogICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCi0gICAgSklUIGppdCh2bSk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
I2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMjQy
OSwxOCArMjU0MywyNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAjZW5kaWYKIAogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRh
OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7Ci0gICAgaml0LnN0b3JlMzIoYnl0
ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcykpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAg
ICBqaXQuc3RvcmUzMihpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5zdHJ1
Y3Rpb25HUFIgPSBhcmd1bWVudEdQUjE7CisgICAgc3RhdGljX2Fzc2VydChpbmNvbWluZ0J5dGVj
b2RlT2Zmc2V0R1BSICE9IGNvZGVCbG9ja0dQUik7CisgICAgc3RhdGljX2Fzc2VydChpbmNvbWlu
Z0J5dGVjb2RlT2Zmc2V0R1BSICE9IGdsb2JhbE9iamVjdEdQUik7CisgICAgc3RhdGljX2Fzc2Vy
dChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGluc3RydWN0aW9uR1BSKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KG1ldGFkYXRhR1BSICE9IGNvZGVCbG9ja0dQUik7CisgICAgc3RhdGljX2Fzc2Vy
dChtZXRhZGF0YUdQUiAhPSBnbG9iYWxPYmplY3RHUFIpOworICAgIHN0YXRpY19hc3NlcnQobWV0
YWRhdGFHUFIgIT0gaW5zdHJ1Y3Rpb25HUFIpOwogCiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOwogICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoY29kZUJsb2Nr
R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgaW5zdHJ1
Y3Rpb25HUFIpOwotICAgIGppdC5hZGRQdHIoYnl0ZWNvZGVPZmZzZXRHUFIsIGluc3RydWN0aW9u
R1BSKTsKKyAgICBqaXQuYWRkUHRyKGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIsIGluc3RydWN0
aW9uR1BSKTsKIAogICAgIEFTU0VSVChSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
LmNvbnRhaW5zKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSk7CiAgICAgaml0Lm1vdmUobWV0
YWRhdGFHUFIsIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsgLy8gUHJlc2VydmUgbWV0YWRh
dGEgaW4gYSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXIuCkBAIC0yNDQ5LDcgKzI1NjksNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgQ2FsbCBvcGVyYXRpb24g
PSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBq
aXQuZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKIAotICAgIGppdC5zdG9yZTY0
KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVz
cyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgp
ICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICBqaXQubW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0
ZXIpOwogCiAjaWYgQ1BVKFg4Nl82NCkKQEAgLTI0NjksODggKzI1ODksNzggQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIHBhdGNoQnVmZmVyLmxpbmsoanVt
cFRvSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQ
dHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9nZXRfZnJvbV9zY29wZSIpOwogfQotI2VuZGlmIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlh
YmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Ci19
Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJl
c3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGly
ZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QxKTsKLSAgICBl
bWl0Tm90aWZ5V3JpdGUocmVnVDEpOwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVn
VDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0
Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJl
Z1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJs
ZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci19CisjZW5kaWYgLy8gIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdl
dFB1dEluZm8oYnl0ZWNvZGUpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0
SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRh
ZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKLSAgICBh
dXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVj
dExvYWRGb3JPcGVyYW5kKSB7CisgICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUs
IHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24g
c2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9i
YWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZv
ciB0aGUgdmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3Zl
cnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0
aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwg
cmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KKyAg
ICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0
YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKwogICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVk
TGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOwog
ICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIo
b3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgICAgICAgICAgbG9hZFB0
ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZP
cGVyYW5kKCksIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAg
ICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Ci0gICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNl
SW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAy
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJp
ZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6
CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNj
b3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAgaWYgKCFp
c0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwor
ICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKwor
ICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKKworICAgICAgICAgICAgaWYgKCFp
c0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUo
KSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3
YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAg
ICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9w
ZXJhbmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJh
bmRTbG90KSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1w
dHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdU
MSk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0g
ICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0
PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlh
YmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRh
Lm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50
U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisKKyAgICAgICAgICAgIGxvYWRQdHJG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0
Y2hwb2ludFNldCgpLCByZWdUMSk7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBv
aW50KHJlZ1QxKTsKKworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDEpOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworCisg
ICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBSZXNvbHZl
ZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRh
Lm1fd2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisKKyAgICAgICAgICAg
IGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9m
ZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQo
KSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgICAgICAg
ICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOworCiAgICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgpAQCAtMjU2NCw1OCArMjY3NCw1
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgIH0K
ICAgICB9OwogCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAg
ICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mg
OiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5
bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJl
YWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAgICAgICAgaXNHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDog
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgLy8g
SWYgYW55IGxpbmtlZCBDb2RlQmxvY2sgc2VlcyBDbG9zdXJlVmFyLyBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcywgdGhlbiB3ZSBjYW4gY29tcGlsZSB0aGluZ3MKKyAgICAvLyB0aGF0
IHdheSBmb3IgYWxsIENvZGVCbG9ja3MsIHNpbmNlIHdlJ3ZlIHByb3ZlbiB0aGF0IGlzIHRoZSB0
eXBlIHdlIHdpbGwgYmUuIElmIHdlJ3JlIGEgQ2xvc3VyZVZhciwKKyAgICAvLyBhbGwgQ29kZUJs
b2NrcyB3aWxsIGJlIENsb3N1cmVWYXIuIElmIHdlJ3JlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzLCB3ZSdyZSBhbHdheXMgQ2xvc3VyZVZhcgorICAgIC8vIGlmIHRoZSB2YXIgaW5q
ZWN0aW9uIHdhdGNocG9pbnQgaXNuJ3QgZmlyZWQuIElmIGl0IGlzIGZpcmVkLCB0aGVuIHdlIHRh
a2UgdGhlIHNsb3cgcGF0aCwgc28gaXQgZG9lc24ndAorICAgIC8vIG1hdHRlciB3aGF0IHR5cGUg
d2UgYXJlIGR5bmFtaWNhbGx5LgorICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1
cmVWYXIpCisgICAgICAgIGVtaXRDb2RlKENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2Zp
bGVkUmVzb2x2ZVR5cGUgPT0gUmVzb2x2ZWRDbG9zdXJlVmFyKQorICAgICAgICBlbWl0Q29kZShS
ZXNvbHZlZENsb3N1cmVWYXIpOworICAgIGVsc2UgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0g
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIGVtaXRDb2RlKENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBlbHNlIHsKICAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVn
VDApOworICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKICAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7CiAgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVy
dHkpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKIAorICAgICAgICBKdW1wIG5v
dEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOworICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFZhci5saW5rKHRoaXMpOworCisgICAg
ICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbi5saW5rKHRoaXMpOworCiAgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
ciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKIAogICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOwogICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CiAgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OwogCiAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CiAKICAgICAgICAgc2tpcFRvRW5kLmxp
bmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIH0K
IApAQCAtMjYyNCwxOCArMjcyOCwyMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBl
KCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgeworICAgIFJlc29sdmVUeXBl
IHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAgLy8gSWYgYW55IGxpbmtlZCBDb2RlQmxvY2sg
c2F3IGEgTW9kdWxlVmFyLCB0aGVuIGFsbCBsaW5rZWQgQ29kZUJsb2NrcyBhcmUgZ3VhcmFudGVl
ZAorICAgICAgICAvLyB0byBhbHNvIHNlZSBNb2R1bGVWYXIuCiAgICAgICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhy
b3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAgICAgICBz
bG93UGF0aENhbGwuY2FsbCgpOwogICAgIH0gZWxzZSB7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9u
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGFyZ3VtZW50R1BSMCwgY3VycmVudEluc3Ry
dWN0aW9uKTsKICNlbHNlCiAgICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgICAgIHVp
bnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAg
ICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4
KTsKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJ
bmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgQVNTRVJUKG1fdW5saW5rZWRD
b2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBh
cmd1bWVudEdQUjI7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRHUFIpOwpAQCAtMjY1Miw3ICsyNzU5LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFi
b3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KICAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9u
Z2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCiAgICAgLy8g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KLSAgICBKSVQgaml0KHZtKTsKKyAgICBDQ2FsbEhlbHBl
cnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVi
cCk7CkBAIC0yNzAxLDcgKzI4MDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1
bWVudHMoY29uCiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJl
Z1QwKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdl
T2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDAp
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDAp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjc1OSw3ICsyODY2
LDYgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcgogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1
bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CkBAIC0yNzY3LDcgKzI4NzMsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCBy
ZWdUMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZWdUMCk7Cisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIApAQCAtMjgyMyw3ICsyOTI5LDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0bwogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4o
KTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
IAogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIFZpcnR1
YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOwpAQCAtMjgzOSwxMSArMjk0NCwxNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgCiAgICAgR1BSUmVnIGJh
c2VHUFIgPSByZWdUMjsKIAogICAgIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIG1vZGUgc2V0
IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2UgaXQgaWYgd2UgcHJvZmlsZSBpdCBpbiB0
aGUgTExJbnQuCi0gICAgaWYgKG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhID09IEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgeworICAgIGlmIChieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKICAgICAgICAgR1BS
UmVnIGVudW1lcmF0b3JHUFIgPSByZWdUMzsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBy
ZWdUNDsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVtZXJh
dG9yR1BSKTsKICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25a
ZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Zmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigofkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3du
U3RydWN0dXJlTW9kZSkgJiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0aW9uTW9k
ZU1hc2spKSk7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQUik7
CisKKyAgICAgICAgbG9hZDhGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6
Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JNZXRhZGF0YSgpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgb3IzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1
Y3R1cmVNb2RlKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlOFRvTWV0YWRhdGEoc2NyYXRj
aEdQUiwgYnl0ZWNvZGUsIE9wRW51bWVyYXRvck5leHQ6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1l
cmF0b3JNZXRhZGF0YSgpKTsKKwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpLCBp
bmRleEdQUik7CiAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2gzMihOb3RFcXVh
bCwgaW5kZXhHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSkpOwogCkBAIC0yODgxLDc4ICsyOTkyLDg4IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0
b3JfbmV4dChjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOwotICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4
OwogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5
TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVy
YXRvcjsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAKICAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CiAKLSAgICBhdXRvIHJlc3VsdEdQUiA9IHJl
Z1QwOworICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9y
R2V0QnlWYWxSZWdpc3RlcnM6OnJlc3VsdDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIg
PSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6YmFzZTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHByb3BlcnR5R1BSID0gQmFzZWxpbmVFbnVtZXJhdG9yR2V0QnlWYWxSZWdpc3Rl
cnM6OnByb3BlcnR5OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgPSBCYXNlbGlu
ZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoMSA9IEJhc2VsaW5lRW51bWVyYXRvckdldEJ5VmFsUmVnaXN0ZXJzOjpzY3Jh
dGNoMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gQmFzZWxpbmVFbnVtZXJhdG9y
R2V0QnlWYWxSZWdpc3RlcnM6OnNjcmF0Y2gyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDMgPSBCYXNlbGluZUVudW1lcmF0b3JHZXRCeVZhbFJlZ2lzdGVyczo6c2NyYXRjaDM7CiAKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Bl
cnR5TmFtZSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUdQ
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCBzY3JhdGNoMyk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHByb3BlcnR5R1BSKTsKIAotICAgIG9y
OChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkp
OworICAgIGxvYWQ4RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEVudW1lcmF0b3JHZXRCeVZhbDo6
TWV0YWRhdGE6Om9mZnNldE9mRW51bWVyYXRvck1ldGFkYXRhKCksIHNjcmF0Y2gyKTsKKyAgICBv
cjMyKHNjcmF0Y2gzLCBzY3JhdGNoMik7CisgICAgc3RvcmU4VG9NZXRhZGF0YShzY3JhdGNoMiwg
Ynl0ZWNvZGUsIE9wRW51bWVyYXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJh
dG9yTWV0YWRhdGEoKSk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDAp
KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoYmFzZUdQUikpOwogICAgIC8vIFRo
aXMgaXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQgdmFsdWUuCi0gICAgSnVtcCBpc05vdE93blN0
cnVjdHVyZU1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0g
YnJhbmNoVGVzdDMyKE5vblplcm8sIHNjcmF0Y2gzLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2Vu
ZXJpY01vZGUpKTsKIAogICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDMpOwotICAgIEp1bXAgc3RydWN0
dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgc2NyYXRjaDEpOworICAgIGxvYWQz
MihBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gy
KTsKKyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0
Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0
cnVjdHVyZUlET2Zmc2V0KCkpKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgc2NyYXRjaDIpOwogICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0
aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGlu
ZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHJlZ1QzLCByZWdUMyk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDMsIFRp
bWVzRWlnaHQpLCByZXN1bHRHUFIpOwotCisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBBZGRyZXNzKHNjcmF0Y2gxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBzaWdu
RXh0ZW5kMzJUb1B0cihzY3JhdGNoMiwgc2NyYXRjaDIpOworICAgIGxvYWQ2NChCYXNlSW5kZXgo
YmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwogCiAg
ICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKICAgICBvdXRPZkxpbmVBY2Nlc3MubGlu
ayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAg
bmVnMzIocmVnVDMpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QzLCByZWdUMyk7CisgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJh
c2VHUFIpOworICAgIHN1YjMyKEFkZHJlc3Moc2NyYXRjaDEsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBuZWcz
MihzY3JhdGNoMik7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDIsIHNjcmF0Y2gyKTsK
ICAgICBjb25zdGV4cHIgaW50cHRyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gb2Zmc2V0SW5C
dXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpICogc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1Qz
LCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgIGxv
YWQ2NChCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmly
c3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7CiAgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwog
CiAgICAgc3RydWN0dXJlTWlzbWF0Y2gubGluayh0aGlzKTsKLSAgICBzdG9yZTgoVHJ1c3RlZElt
bTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1
Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSk7CisgICAgc3Rv
cmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNT
ZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgYnl0ZWNvZGUsIE9wRW51bWVy
YXRvckdldEJ5VmFsOjpNZXRhZGF0YTo6b2Zmc2V0T2ZFbnVtZXJhdG9yTWV0YWRhdGEoKSk7CiAK
ICAgICBpc05vdE93blN0cnVjdHVyZU1vZGUubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTm90SW5k
ZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKKyAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJy
YW5jaFRlc3QzMihaZXJvLCBzY3JhdGNoMywgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKICAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0
aGUgaW5kZXguCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHByb3BlcnR5R1BSKTsKIAogICAgIGlzTm90
SW5kZXhlZC5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgcHJvZmlsZSwgcmVnVDIpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChieXRlY29kZSwgYmFzZUdQUiwgc2NyYXRjaDEpOwogCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVnVDIpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkp
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBhZGRTbG93Q2FzZSgpOworICAgICAgICBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhw
cm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAg
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV91bmxpbmtlZFN0dWJJbmZv
cy5hZGQoKTsKKyAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5VmFs
OworICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZUluZGV4OworICAgIEpJ
VENvbnN0YW50UG9vbDo6Q29uc3RhbnQgc3R1YkluZm9JbmRleCA9IG1fY29uc3RhbnRQb29sLmFk
ZChKSVRDb25zdGFudFBvb2w6OlR5cGU6OlN0cnVjdHVyZVN0dWJJbmZvLCBzdHViSW5mbyk7Cisg
ICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXggPSBzdHViSW5mb0luZGV4Owor
ICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm8gPSBzdHViSW5mbzsKKworICAgIGdlbi5nZW5lcmF0
ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMsIHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BS
KTsKKyAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQg
dG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0
QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKQEAgLTI5NjEsMTAg
KzMwODIsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfCiAgICAg
Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yR2V0QnlWYWw+KCksIGl0ZXIpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlw
ZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9lbnVtZXJh
dG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVy
YWxDYXNlKQordGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlLCB0eXBlbmFtZSBTbG93UGF0aEZ1
bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBCeXRlY29kZSYgYnl0
ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQogewotICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcjsKQEAgLTI5NzMsNyArMzA5Myw5IEBAIHZvaWQgSklUOjplbWl0X2VudW1l
cmF0b3JfaGFzX3Byb3BlcnR5SW0KICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QwKTsKLSAgICBvcjgocmVnVDAsIEFic29sdXRl
QWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICBsb2FkOEZyb21N
ZXRhZGF0YShieXRlY29kZSwgQnl0ZWNvZGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkVudW1lcmF0b3JN
ZXRhZGF0YSgpLCByZWdUMSk7CisgICAgb3IzMihyZWdUMCwgcmVnVDEpOworICAgIHN0b3JlOFRv
TWV0YWRhdGEocmVnVDEsIGJ5dGVjb2RlLCBCeXRlY29kZTo6TWV0YWRhdGE6Om9mZnNldE9mRW51
bWVyYXRvck1ldGFkYXRhKCkpOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIo
WmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0
cnVjdHVyZU1vZGUpKSk7CiAKQEAgLTMwNjIsNiArMzE4NCwxMyBAQCB2b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcihKU0NlbGwqIG93bmVyCiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5s
aW5rKHRoaXMpOwogfQogCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihHUFJSZWcgb3duZXIp
Cit7CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2
bSgpLCBvd25lciwgc2VsZWN0U2NyYXRjaEdQUihvd25lcikpOworICAgIGNhbGxPcGVyYXRpb25O
b0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgb3du
ZXIpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsOSArMjM2
LDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnkoSgogICAgICAgICAg
ICAgaWYgKGlzSlNBcnJheShiYXNlQ2VsbCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAogICAgICAgICAgICAgICAgICAgICAm
JiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZUNlbGwKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5s
aW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJh
eSo+KGJhc2VDZWxsKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5lQWNjZXNzOjpp
c0NhY2hlYWJsZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2FzdDxKU0FycmF5
Kj4oYmFzZUNlbGwpKSkgewogCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29k
ZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChzdHViSW5mbywganND
YXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVy
YXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoY29kZUJs
b2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9w
dGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0
dWJJbmZvLmluaXRBcnJheUxlbmd0aChsb2NrZXIpOwpAQCAtMjQ5LDggKzI0OSw4IEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgICAgICBuZXdD
YXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkFycmF5
TGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpc0pTU3RyaW5n
KGJhc2VDZWxsKSkgewogICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9
PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6
aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoc3R1YkluZm8pKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTdHJpbmdM
ZW5ndGgoc3R1YkluZm8pOworICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6Omlz
Q2FjaGVhYmxlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8pKSB7CisgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbyk7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBh
dGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemlu
Z0dldEJ5RnVuY3Rpb24oa2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8u
aW5pdFN0cmluZ0xlbmd0aChsb2NrZXIpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHN0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEoKICAgICAgICAgICAgICAgICAmJiAhc2xvdC53
YXRjaHBvaW50U2V0KCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Q
cm94eSkgewotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSwg
c2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2Rl
SW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vzcyhjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAg
ICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6R2V0QnlTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElk
ZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2Uo
KSA9PSBiYXNlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdh
dGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpA
QCAtNzMxLDExICs3MzEsMTEgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0
QnkoSgogICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxh
Y2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAg
ICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlS
ZXBsYWNlKHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQorICAgICAgICAgICAgICAgICAg
ICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQogICAgICAgICAgICAgICAgICAgICAm
JiAhb2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAg
ICAgICAgICAgICAgJiYgIWlzUHJveHkpIHsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxp
bmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxvY2ss
IHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNlbGZQYXRjaCwgb2xkU3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHBy
b3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkp
OwpAQCAtMTEzMiw3ICsxMTMyLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
SW5CeSgKICAgICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZQogICAgICAg
ICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQogICAgICAgICAgICAgICAgICYmICFz
dHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewotICAgICAgICAgICAg
ICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxm
SW5BY2Nlc3Moc3R1YkluZm8sIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgYm9vbCBnZW5l
cmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZJbkFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5C
eVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2Uo
KSA9PSBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGlu
Z1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKQEAgLTE1
NTIsNyArMTU1Miw3IEBAIHN0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0kK
IAogdm9pZCB1bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7
Ci0gICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcg
Y2FsbCBhdCAiLCBjYWxsTGlua0luZm8uZmFzdFBhdGhTdGFydCgpKTsKKyAgICBkYXRhTG9nTG5J
ZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2luZyBDYWxsTGlua0luZm86ICIs
IFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOwogICAgIAogICAgIHJldmVydENhbGwodm0sIGNh
bGxMaW5rSW5mbywgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dl
ZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRPZmZsaW5lQXNtQ29uZmlnLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2ZmbGluZUFzbUNvbmZpZy5oCShyZXZpc2lvbiAyODMx
MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZsaW5lQXNtQ29uZmln
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw2ICsxNjksMTIgQEAKIAogI2RlZmluZSBPRkZMSU5F
X0FTTV9HSUdBQ0FHRV9FTkFCTEVEIEdJR0FDQUdFX0VOQUJMRUQKIAorI2lmIEVOQUJMRShKSVQp
CisjZGVmaW5lIE9GRkxJTkVfQVNNX0pJVCAxCisjZWxzZQorI2RlZmluZSBPRkZMSU5FX0FTTV9K
SVQgMAorI2VuZGlmCisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAjZGVmaW5lIE9GRkxJTkVf
QVNNX1dFQkFTU0VNQkxZIDEKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJCeXRlY29kZU9wZXJhbmRzRm9yQ2hlY2twb2ludC5o
IgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lk
ZVN0YXRlLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvbW1v
blNsb3dQYXRoc0lubGluZXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkVycm9y
SGFuZGxpbmdTY29wZS5oIgpAQCAtMzcwLDEzICszNzEsMjIgQEAgaW5saW5lIGJvb2wgaml0Q29t
cGlsZUFuZFNldEhldXJpc3RpY3MoVgogICAgIAogICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsVmFs
dWVQcm9maWxlUHJlZGljdGlvbnMoKTsKIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAh
PSBKSVRUeXBlOjpCYXNlbGluZUpJVCkgeworICAgICAgICBpZiAoUmVmUHRyPEJhc2VsaW5lSklU
Q29kZT4gYmFzZWxpbmVSZWYgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPm1fdW5s
aW5rZWRCYXNlbGluZUNvZGUpIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0dXBXaXRoVW5s
aW5rZWRCYXNlbGluZUNvZGUoYmFzZWxpbmVSZWYucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAg
ICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2sp
OworICAgICAgICAgICAgY29kZUJsb2NrLT5qaXROZXh0SW52b2NhdGlvbigpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoIWNvZGVCbG9jay0+
Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkgewogICAgICAgICBDT0RFQkxPQ0tfTE9HX0VW
RU5UKGNvZGVCbG9jaywgImRlbGF5SklUQ29tcGlsZSIsICgidGhyZXNob2xkIG5vdCByZWFjaGVk
LCBjb3VudGVyID0gIiwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICAg
ICAgZGF0YUxvZ0xuSWYoT3B0aW9uczo6dmVyYm9zZU9TUigpLCAiICAgIEpJVCB0aHJlc2hvbGQg
c2hvdWxkIGJlIGxpZnRlZC4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAK
LSAgICBKSVRXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdvcmtsaXN0OjplbnN1
cmVHbG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBKSVRDb21w
aWxhdGlvbktleShjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTW9kZTo6QmFzZWxpbmUpKTsKKyAg
ICBKSVRXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZSA9IEpJVFdvcmtsaXN0OjplbnN1cmVH
bG9iYWxXb3JrbGlzdCgpLmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtLCBKSVRDb21waWxh
dGlvbktleShjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uTW9k
ZTo6QmFzZWxpbmUpKTsKIAogICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBl
OjpCYXNlbGluZUpJVCkgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3NlT1NS
KCksICIgICAgQ29kZSB3YXMgYWxyZWFkeSBjb21waWxlZC4iKTsKQEAgLTQ2Niw4ICs0NzYsMTAg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgY29kZUJsb2Nr
LT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgewogICAgICAg
ICB1aW50cHRyX3QqIHB0ciA9IHZtLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihwYyk7CiAg
ICAgICAgICpwdHIgKz0gY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkubV9hY3RpdmVU
aHJlc2hvbGQ7Ci0gICAgICAgIGlmICgqcHRyID49IE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUlu
ZmluaXRlTG9vcHNMaW1pdCgpKQorICAgICAgICBpZiAoKnB0ciA+PSBPcHRpb25zOjplYXJseVJl
dHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkgeworICAgICAgICAgICAgY29kZUJsb2NrLT5l
bnN1cmVKSVREYXRhKENvbmN1cnJlbnRKU0xvY2tlcihjb2RlQmxvY2stPm1fbG9jaykpOyAvLyBX
ZSdyZSByZXR1cm5pbmcgdG8gdGhlIE9TUiBlbnRyeSBjb2RlIGhlcmUsIHdoaWNoIGV4cGVjdHMg
dGhhdCBtX2ppdERhdGEgaXMgbm90IG51bGwuCiAgICAgICAgICAgICBMTElOVF9SRVRVUk5fVFdP
KExMSW50OjpmdXp6ZXJSZXR1cm5FYXJseUZyb21Mb29wSGludEVudHJ5cG9pbnQoKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgY2FsbEZyYW1lLT50b3BPZkZyYW1lKCkpOworICAgICAgICB9
CiAgICAgfQogICAgIAogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDI4MzEz
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEyLDEwICsxMDEyLDYgQEAgc3RyaWN0RXF1YWxp
dHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBv
cGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBl
KQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QxXQotICAgICAgICBlbmQKLQog
ICAgICAgICBtZXRhZGF0YSh0MSwgdDIpCiAgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAg
ICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CkBAIC0xMDIz
LDcgKzEwMTksNyBAQCBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBvcGNvZGVTdHJ1Y3QsIGluCiAg
ICAgICAgICMgTWV0YWRhdGEgaW4gdDEsIHNyY0RzdCBpbiB0MgogICAgICAgICBpbnRlZ2VyT3Bl
cmF0aW9uKHQyLCAuc2xvdykKICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2Nmciwg
dDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJbnQpCisgICAg
ICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlSW50
LCB0MSwgdDIpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAtMTA4OSwyMiAr
MTA4NSwxOCBAQCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfbmVnYXRlLCBPcE5lZ2F0
ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAKLSAgICBt
YWNybyB1cGRhdGVBcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JoIHR5cGUsIE9wTmVnYXRl
OjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3Q1
XQotICAgIGVuZAotCiAgICAgbWV0YWRhdGEodDUsIHQwKQogICAgIGdldChtX29wZXJhbmQsIHQw
KQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5l
cSB0MSwgSW50MzJUYWcsIC5vcE5lZ2F0ZVNyY05vdEludAogICAgIGJ0aXogdDIsIDB4N2ZmZmZm
ZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQyCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFy
aXRoUHJvZmlsZUludCkKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJp
dGhQcm9maWxlSW50LCB0NSwgdDMpCiAgICAgcmV0dXJuIChJbnQzMlRhZywgdDIpCiAub3BOZWdh
dGVTcmNOb3RJbnQ6CiAgICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cKICAgICB4
b3JpIDB4ODAwMDAwMDAsIHQxCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51
bWJlcikKKyAgICB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxl
TnVtYmVyLCB0NSwgdDMpCiAgICAgcmV0dXJuKHQxLCB0MikKIAogLm9wTmVnYXRlU2xvdzoKQEAg
LTExMTUsMTAgKzExMDcsNiBAQCBlbmQpCiAKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bj
b2RlTmFtZSwgb3Bjb2RlU3RydWN0LCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJsZU9w
ZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2Rl
U3RydWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAg
ICAgICAgbWFjcm8gYXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmggdHlwZSwgJW9w
Y29kZVN0cnVjdCU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZSArIEJpbmFyeUFyaXRoUHJvZmls
ZTo6bV9iaXRzW3Q1XQotICAgICAgICBlbmQKLQogICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCiAg
ICAgICAgIGdldChtX3JocywgdDIpCiAgICAgICAgIGdldChtX2xocywgdDApCkBAIC0xMTI2LDcg
KzExMTQsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAg
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAg
IGJpbmVxIHQyLCBJbnQzMlRhZywgLm9wMU5vdEludAogICAgICAgICBiaW5lcSB0MywgSW50MzJU
YWcsIC5vcDJOb3RJbnQKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludEludCkK
KyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9m
aWxlSW50SW50LCB0NSwgdDIpCiAgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGludGVn
ZXJPcGVyYXRpb25BbmRTdG9yZSh0MywgdDEsIHQwLCAuc2xvdywgdDIpCiAgICAgICAgIGRpc3Bh
dGNoKCkKQEAgLTExMzYsMTIgKzExMjQsMTIgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShv
cGNvZGVOYW1lLCBvcAogICAgICAgICBiaWEgdDIsIExvd2VzdFRhZywgLnNsb3cKICAgICAgICAg
YmliIHQzLCBMb3dlc3RUYWcsIC5vcDFOb3RJbnRPcDJEb3VibGUKICAgICAgICAgYmluZXEgdDMs
IEludDMyVGFnLCAuc2xvdwotICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlTnVtYmVy
SW50KQorICAgICAgICB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bjb2RlU3RydWN0LCBBcml0
aFByb2ZpbGVOdW1iZXJJbnQsIHQ1LCB0NCkKICAgICAgICAgY2kyZHMgdDEsIGZ0MQogICAgICAg
ICBqbXAgLm9wMU5vdEludFJlYWR5CiAgICAgLm9wMU5vdEludE9wMkRvdWJsZToKICAgICAgICAg
ZmlpMmQgdDEsIHQzLCBmdDEKLSAgICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJl
ck51bWJlcikKKyAgICAgICAgdXBkYXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwg
QXJpdGhQcm9maWxlTnVtYmVyTnVtYmVyLCB0NSwgdDQpCiAgICAgLm9wMU5vdEludFJlYWR5Ogog
ICAgICAgICBnZXQobV9kc3QsIHQxKQogICAgICAgICBmaWkyZCB0MCwgdDIsIGZ0MApAQCAtMTE1
Myw3ICsxMTQxLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShvcGNvZGVOYW1lLCBvcAog
ICAgICAgICAjIEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQg
b3BlcmFuZCBpcyBkZWZpbml0ZWx5IG5vdC4KICAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAg
ICAgYmlhIHQzLCBMb3dlc3RUYWcsIC5zbG93Ci0gICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFBy
b2ZpbGVJbnROdW1iZXIpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVT
dHJ1Y3QsIEFyaXRoUHJvZmlsZUludE51bWJlciwgdDUsIHQ0KQogICAgICAgICBjaTJkcyB0MCwg
ZnQwCiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGRvdWJsZU9wZXJhdGlvbihm
dDEsIGZ0MCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5
KQpAQCAtNDMxLDI3ICs0MzEsNDcgQEAgbWFjcm8gY2FsbFRyYXBIYW5kbGVyKHRocm93SGFuZGxl
cikKICAgICBsb2FkaSBMTEludFJldHVyblBDW2Nmcl0sIFBDCiBlbmQKIAotbWFjcm8gY2hlY2tT
d2l0Y2hUb0pJVEZvckxvb3AoKQotICAgIGNoZWNrU3dpdGNoVG9KSVQoCi0gICAgICAgIDEsCi0g
ICAgICAgIG1hY3JvKCkKLSAgICAgICAgICAgIHN0b3JlUEMoKQotICAgICAgICAgICAgcHJlcGFy
ZVN0YXRlRm9yQ0NhbGwoKQotICAgICAgICAgICAgbW92ZSBjZnIsIGEwCi0gICAgICAgICAgICBt
b3ZlIFBDLCBhMQotICAgICAgICAgICAgY0NhbGwyKF9sbGludF9sb29wX29zcikKLSAgICAgICAg
ICAgIGJ0cHogcjAsIC5yZWNvdmVyCi0KLSAgICAgICAgICAgIG1vdmUgcjEsIHNwCi0gICAgICAg
ICAgICBpZiBBUk02NEUKLSAgICAgICAgICAgICAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhw
ciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChjb25zdGV4cHIgR2F0ZTo6bG9vcE9T
UkVudHJ5KSAqIFB0clNpemUsIGEyCi0gICAgICAgICAgICAgICAgam1wIFthMl0sIE5hdGl2ZVRv
SklUR2F0ZVB0clRhZyAjIEpTRW50cnlQdHJUYWcKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBqbXAgcjAsIEpTRW50cnlQdHJUYWcKLSAgICAgICAgICAgIGVuZAotICAgICAgICAu
cmVjb3ZlcjoKLSAgICAgICAgICAgIGxvYWRQQygpCi0gICAgICAgIGVuZCkKK2lmIEpJVAorICAg
IG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkKKyAgICAgICAgY2hlY2tTd2l0Y2hUb0pJ
VCgKKyAgICAgICAgICAgIDEsCisgICAgICAgICAgICBtYWNybygpCisgICAgICAgICAgICAgICAg
c3RvcmVQQygpCisgICAgICAgICAgICAgICAgcHJlcGFyZVN0YXRlRm9yQ0NhbGwoKQorICAgICAg
ICAgICAgICAgIG1vdmUgY2ZyLCBhMAorICAgICAgICAgICAgICAgIG1vdmUgUEMsIGExCisgICAg
ICAgICAgICAgICAgY0NhbGwyKF9sbGludF9sb29wX29zcikKKyAgICAgICAgICAgICAgICBidHB6
IHIwLCAucmVjb3ZlcgorICAgICAgICAgICAgICAgIG1vdmUgcjEsIHNwCisKKyAgICAgICAgICAg
ICAgICAjIEJhc2VsaW5lIHVzZXMgTExJbnQncyBQQiByZWdpc3RlciBmb3IgaXRzIEpJVCBjb25z
dGFudCBwb29sLgorICAgICAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgorICAg
ICAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9qaXREYXRhW1BCXSwgUEIKKyAgICAgICAg
ICAgICAgICBsb2FkcCBDb2RlQmxvY2s6OkpJVERhdGE6Om1faml0Q29uc3RhbnRQb29sW1BCXSwg
UEIKKworICAgICAgICAgICAgICAgIGlmIEFSTTY0RQorICAgICAgICAgICAgICAgICAgICBsZWFw
IEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmlnR2F0ZU1hcCArIChj
b25zdGV4cHIgR2F0ZTo6bG9vcE9TUkVudHJ5KSAqIFB0clNpemUsIGEyCisgICAgICAgICAgICAg
ICAgICAgIGptcCBbYTJdLCBOYXRpdmVUb0pJVEdhdGVQdHJUYWcgIyBKU0VudHJ5UHRyVGFnCisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBqbXAgcjAsIEpTRW50cnlQ
dHJUYWcKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC5yZWNvdmVyOgorICAgICAg
ICAgICAgICAgIGxvYWRQQygpCisgICAgICAgICAgICBlbmQpCisgICAgZW5kCitlbHNlCisgICAg
bWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQorICAgICAgICBjaGVja1N3aXRjaFRvSklU
KAorICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIG1hY3JvKCkKKyAgICAgICAgICAgICAgICBz
dG9yZVBDKCkKKyAgICAgICAgICAgICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCisgICAgICAg
ICAgICAgICAgbW92ZSBjZnIsIGEwCisgICAgICAgICAgICAgICAgbW92ZSBQQywgYTEKKyAgICAg
ICAgICAgICAgICBjQ2FsbDIoX2xsaW50X2xvb3Bfb3NyKQorICAgICAgICAgICAgICAgIGxvYWRQ
QygpCisgICAgICAgICAgICBlbmQpCisgICAgZW5kCiBlbmQKIAogbWFjcm8gY2FnZShiYXNlUHRy
LCBtYXNrLCBwdHIsIHNjcmF0Y2gpCkBAIC0xMDU2LDEwICsxMDc2LDYgQEAgc3RyaWN0RXF1YWxp
dHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChvcGNvZGVOYW1lLCBv
cGNvZGVTdHJ1Y3QsIGludGVnZXJPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF8lb3Bjb2RlTmFtZSUsIG9wY29kZVN0cnVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCByZXR1cm4pCi0gICAgICAgIG1hY3JvIHVwZGF0ZUFyaXRoUHJvZmlsZSh0eXBl
KQotICAgICAgICAgICAgb3JoIHR5cGUsICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGUgKyBVbmFyeUFyaXRoUHJvZmlsZTo6bV9iaXRzW3QyXQotICAgICAgICBlbmQKLQog
ICAgICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQx
CiAgICAgICAgIG1ldGFkYXRhKHQyLCB0MykKQEAgLTEwNjksNyArMTA4NSw3IEBAIG1hY3JvIHBy
ZU9wKG9wY29kZU5hbWUsIG9wY29kZVN0cnVjdCwgaW4KICAgICAgICAgaW50ZWdlck9wZXJhdGlv
bih0MSwgLnNsb3cpCiAgICAgICAgIG9ycSBudW1iZXJUYWcsIHQxCiAgICAgICAgIHN0b3JlcSB0
MSwgW2NmciwgdDAsIDhdCi0gICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJ
bnQpCisgICAgICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQ
cm9maWxlSW50LCB0MiwgdDMpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5zbG93OgpAQCAt
MTEzNCwxMSArMTE1MCw2IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX25lZ2F0
ZSwgT3BOZWdhdGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQotCi0gICAgbWFjcm8gdXBkYXRlQXJpdGhQcm9maWxlKHR5cGUpCi0gICAgICAgIG9yaCB0eXBl
LCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgVW5hcnlBcml0aFByb2ZpbGU6
Om1fYml0c1t0MV0KLSAgICBlbmQKLQogICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgIG1ldGFkYXRhKHQxLCB0MikKQEAg
LTExNDYsMTIgKzExNTcsMTIgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVn
YXRlLAogICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQz
CiAgICAgb3JxIG51bWJlclRhZywgdDMKLSAgICB1cGRhdGVBcml0aFByb2ZpbGUoQXJpdGhQcm9m
aWxlSW50KQorICAgIHVwZGF0ZVVuYXJ5QXJpdGhQcm9maWxlKE9wTmVnYXRlLCBBcml0aFByb2Zp
bGVJbnQsIHQxLCB0MikKICAgICByZXR1cm4odDMpCiAub3BOZWdhdGVOb3RJbnQ6CiAgICAgYnRx
eiB0MywgbnVtYmVyVGFnLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAwMDAw
MDAsIHQzCi0gICAgdXBkYXRlQXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlcikKKyAgICB1
cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShPcE5lZ2F0ZSwgQXJpdGhQcm9maWxlTnVtYmVyLCB0MSwg
dDIpCiAgICAgcmV0dXJuKHQzKQogCiAub3BOZWdhdGVTbG93OgpAQCAtMTE2NCwxMCArMTE3NSw2
IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUob3Bjb2RlTmFtZSwgb3AKICAgICBsbGludE9w
V2l0aE1ldGFkYXRhKG9wXyVvcGNvZGVOYW1lJSwgb3Bjb2RlU3RydWN0LCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQw
KQogCi0gICAgICAgIG1hY3JvIHByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaCB0eXBlLCAl
b3Bjb2RlU3RydWN0JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlICsgQmluYXJ5QXJpdGhQcm9m
aWxlOjptX2JpdHNbdDVdCi0gICAgICAgIGVuZAotCiAgICAgICAgIGdldChtX3JocywgdDApCiAg
ICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6
ZSwgdDAsIHQxKQpAQCAtMTE3Nyw3ICsxMTg0LDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9y
ZShvcGNvZGVOYW1lLCBvcAogICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2Vy
T3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKLSAgICAgICAgcHJvZmlsZShB
cml0aFByb2ZpbGVJbnRJbnQpCisgICAgICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNv
ZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUludEludCwgdDUsIHQyKQogICAgICAgICBkaXNwYXRjaCgp
CiAKICAgICAub3AxTm90SW50OgpAQCAtMTE4NywxMCArMTE5NCwxMCBAQCBtYWNybyBiaW5hcnlP
cEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAgICAgICAgIGJ0cXogdDEsIG51bWJlclRhZywg
LnNsb3cKICAgICAgICAgYWRkcSBudW1iZXJUYWcsIHQxCiAgICAgICAgIGZxMmQgdDEsIGZ0MQot
ICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKKyAgICAgICAgdXBkYXRl
QmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVyTnVtYmVy
LCB0NSwgdDIpCiAgICAgICAgIGptcCAub3AxTm90SW50UmVhZHkKICAgICAub3AxTm90SW50T3Ay
SW50OgotICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKKyAgICAgICAgdXBk
YXRlQmluYXJ5QXJpdGhQcm9maWxlKG9wY29kZVN0cnVjdCwgQXJpdGhQcm9maWxlTnVtYmVySW50
LCB0NSwgdDIpCiAgICAgICAgIGNpMmRzIHQxLCBmdDEKICAgICAub3AxTm90SW50UmVhZHk6CiAg
ICAgICAgIGdldChtX2RzdCwgdDIpCkBAIC0xMjA0LDkgKzEyMTEsOSBAQCBtYWNybyBiaW5hcnlP
cEN1c3RvbVN0b3JlKG9wY29kZU5hbWUsIG9wCiAKICAgICAub3AyTm90SW50OgogICAgICAgICAj
IEZpcnN0IG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhbiBpbnQsIHRoZSBzZWNvbmQgaXMgZGVmaW5p
dGVseSBub3QuCi0gICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIG51bWJl
clRhZywgLnNsb3cKLSAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnROdW1iZXIpCisgICAg
ICAgIHVwZGF0ZUJpbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIEFyaXRoUHJvZmlsZUlu
dE51bWJlciwgdDUsIHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBjaTJkcyB0
MCwgZnQwCiAgICAgICAgIGFkZHEgbnVtYmVyVGFnLCB0MQogICAgICAgICBmcTJkIHQxLCBmdDEK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20JKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTQyMCw3ICsx
NDIwLDggQEAgZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5jcmVtZW50LCBhY3Rpb24p
CiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgYmFkZGlzIGluY3JlbWVudCwgQ29k
ZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6
Om1fY291bnRlclt0MF0sIC5jb250aW51ZQorICAgIGxvYWRwIENvZGVCbG9jazo6bV9sbGludEV4
ZWN1dGVDb3VudGVyW3QwXSwgdDAKKyAgICBiYWRkaXMgaW5jcmVtZW50LCBCYXNlbGluZUV4ZWN1
dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAgIGFjdGlvbigpCiAgICAg
LmNvbnRpbnVlOgogZW5kCkBAIC0xNTAzLDcgKzE1MDQsOCBAQCBtYWNybyBwcm9sb2d1ZShjb2Rl
QmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgY29kZUJsb2NrR2V0dGVyKHQxKQogICAgIGNvZGVC
bG9ja1NldHRlcih0MSkKICAgICBpZiBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQotICAgICAg
ICBiYWRkaXMgNSwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4
ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MV0sIC5jb250aW51ZQorICAgICAgICBsb2FkcCBD
b2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlclt0MV0sIHQwCisgICAgICAgIGJhZGRpcyA1
LCBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQogICAg
ICAgICBpZiBKU1ZBTFVFNjQKICAgICAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAgICAgICAg
bW92ZSBQQywgYTEKQEAgLTE2MTcsMTQgKzE2MTksMTQgQEAgbWFjcm8gZnVuY3Rpb25Jbml0aWFs
aXphdGlvbihwcm9maWxlQXJnUwogICAgICMgb3B0aW1hbCB3YXkgZm9yIGFyY2hpdGVjdHVyZXMg
dGhhdCBoYXZlIG1vcmUgdGhhbiBmaXZlIHJlZ2lzdGVycyBhdmFpbGFibGUKICAgICAjIGZvciBh
cmJpdHJhcnkgdXNlIGluIHRoZSBpbnRlcnByZXRlci4KICAgICBsb2FkaSBDb2RlQmxvY2s6Om1f
bnVtUGFyYW1ldGVyc1t0MV0sIHQwCi0gICAgYWRkcCAtcHJvZmlsZUFyZ1NraXAsIHQwICMgVXNl
IGFkZGkgYmVjYXVzZSB0aGF0J3Mgd2hhdCBoYXMgdGhlIHBlZXBob2xlCisgICAgYWRkcCAtcHJv
ZmlsZUFyZ1NraXAsIHQwCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnBndGVxIHQwLCAwLCBvayBl
bmQpCiAgICAgYnRweiB0MCwgLmFyZ3VtZW50UHJvZmlsZURvbmUKICAgICBsb2FkcCBDb2RlQmxv
Y2s6Om1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzICsgRml4ZWRWZWN0b3I6Om1fc3RvcmFnZSArIFJl
ZkNvdW50ZWRBcnJheTo6bV9kYXRhW3QxXSwgdDMKICAgICBidHB6IHQzLCAuYXJndW1lbnRQcm9m
aWxlRG9uZSAjIFdoZW4gd2UgY2FuJ3QgSklULCB3ZSBkb24ndCBhbGxvY2F0ZSBhbnkgYXJndW1l
bnQgdmFsdWUgcHJvZmlsZXMuCiAgICAgbXVscCBzaXplb2YgVmFsdWVQcm9maWxlLCB0MCwgdDIg
IyBBYWFhYWhoaGghIE5lZWQgc3RyZW5ndGggcmVkdWN0aW9uIQogICAgIGxzaGlmdHAgMywgdDAg
IyBvZmZzZXQgb2YgbGFzdCBKU1ZhbHVlIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suCi0gICAgYWRk
cCB0MiwgdDMgIyBwb2ludGVyIHRvIGVuZCBvZiBWYWx1ZVByb2ZpbGUgYXJyYXkgaW4gQ29kZUJs
b2NrOjptX2FyZ3VtZW50VmFsdWVQcm9maWxlcy4KKyAgICBhZGRwIHQyLCB0MyAjIHBvaW50ZXIg
dG8gZW5kIG9mIFZhbHVlUHJvZmlsZSBhcnJheSBpbiB0aGUgdmFsdWUgcHJvZmlsZSBhcnJheS4K
IC5hcmd1bWVudFByb2ZpbGVMb29wOgogICAgIGlmIEpTVkFMVUU2NAogICAgICAgICBsb2FkcSBU
aGlzQXJndW1lbnRPZmZzZXQgLSA4ICsgcHJvZmlsZUFyZ1NraXAgKiA4W2NmciwgdDBdLCB0MgpA
QCAtMjU2Myw2ICsyNTY1LDE3IEBAIG1hY3JvIG5vdFN1cHBvcnRlZCgpCiAgICAgZW5kCiBlbmQK
IAorCittYWNybyB1cGRhdGVVbmFyeUFyaXRoUHJvZmlsZShvcGNvZGVTdHJ1Y3QsIHR5cGUsIG1l
dGFkYXRhLCB0ZW1wKQorICAgIGxvYWRwICVvcGNvZGVTdHJ1Y3QlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGVbbWV0YWRhdGFdLCB0ZW1wCisgICAgb3JoIHR5cGUsIFVuYXJ5QXJpdGhQcm9maWxl
OjptX2JpdHNbdGVtcF0KK2VuZAorCittYWNybyB1cGRhdGVCaW5hcnlBcml0aFByb2ZpbGUob3Bj
b2RlU3RydWN0LCB0eXBlLCBtZXRhZGF0YSwgdGVtcCkKKyAgICBsb2FkcCAlb3Bjb2RlU3RydWN0
JTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW21ldGFkYXRhXSwgdGVtcAorICAgIG9yaCB0eXBl
LCBCaW5hcnlBcml0aFByb2ZpbGU6Om1fYml0c1t0ZW1wXQorZW5kCisKIC8vIEZJWE1FOiBXZSBz
aG91bGQgbm90IG5lZWQgdGhlIFg4Nl82NF9XSU4gY29uZGl0aW9uIGhlcmUsIHNpbmNlIFdFQkFT
U0VNQkxZIHNob3VsZCBhbHJlYWR5IGJlIGZhbHNlIG9uIFdpbmRvd3MKIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MTYKIGlmIFdFQkFTU0VNQkxZIGFuZCBu
b3QgWDg2XzY0X1dJTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVh
YmxlSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlYWJsZUlkZW50aWZpZXIuaAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVhYmxlSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcigpID0g
ZGVmYXVsdDsKIAogICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVhdGVG
cm9tQ2VsbChKU0NlbGwqIGlkZW50aWZpZXIpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxl
SWRlbnRpZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2Nr
KiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBpbmxpbmUgQ2FjaGVhYmxlSWRlbnRp
ZmllciBjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrKiwgVW5p
cXVlZFN0cmluZ0ltcGwqKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4K
KyAgICBzdGF0aWMgaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7Cisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgc3RhdGljIGlubGluZSBD
YWNoZWFibGVJZGVudGlmaWVyIGNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhD
b2RlQmxvY2tUeXBlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAgICBzdGF0aWMgaW5saW5lIENh
Y2hlYWJsZUlkZW50aWZpZXIgY3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihVbmlxdWVkU3Ry
aW5nSW1wbCopOwogICAgIHN0YXRpYyBjb25zdGV4cHIgQ2FjaGVhYmxlSWRlbnRpZmllciBjcmVh
dGVGcm9tUmF3Qml0cyh1aW50cHRyX3QgcmF3Qml0cykgeyByZXR1cm4gQ2FjaGVhYmxlSWRlbnRp
ZmllcihyYXdCaXRzKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI4
MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlYWJsZUlkZW50aWZp
ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotaW5saW5lIENhY2hlYWJsZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJs
b2NrLCBjb25zdCBJZGVudGlmaWVyJiBpKQordGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5
cGU+CitpbmxpbmUgQ2FjaGVhYmxlSWRlbnRpZmllciBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVh
dGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2Nr
LCBjb25zdCBJZGVudGlmaWVyJiBpKQogewogICAgIHJldHVybiBjcmVhdGVGcm9tSWRlbnRpZmll
ck93bmVkQnlDb2RlQmxvY2soY29kZUJsb2NrLCBpLmltcGwoKSk7CiB9CiAKLWlubGluZSBDYWNo
ZWFibGVJZGVudGlmaWVyIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVy
T3duZWRCeUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgoraW5saW5lIENhY2hlYWJs
ZUlkZW50aWZpZXIgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25l
ZEJ5Q29kZUJsb2NrKENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrLT5oYXNJZGVu
dGlmaWVyKHVpZCkpOwogICAgIHJldHVybiBDYWNoZWFibGVJZGVudGlmaWVyKHVpZCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCShyZXZp
c2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJDYWNoZWRUeXBlcy5oIgogCisjaW5jbHVkZSAiQmFzZWxpbmVKSVRDb2Rl
LmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVDYWNoZUVy
cm9yLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCkBAIC0xOTE4LDYg
KzE5MTksOCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBudW1WYWx1ZVByb2ZpbGVzKCkgY29u
c3QgeyByZXR1cm4gbV9udW1WYWx1ZVByb2ZpbGVzOyB9CiAgICAgdW5zaWduZWQgbnVtQXJyYXlQ
cm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJyYXlQcm9maWxlczsgfQorICAgIHVuc2ln
bmVkIG51bUJpbmFyeUFyaXRoUHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX251bUJpbmFyeUFy
aXRoUHJvZmlsZXM7IH0KKyAgICB1bnNpZ25lZCBudW1VbmFyeUFyaXRoUHJvZmlsZXMoKSBjb25z
dCB7IHJldHVybiBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsgfQogCiBwcml2YXRlOgogICAgIFZp
cnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKQEAgLTE5NTIsNiArMTk1NSw4IEBAIHByaXZh
dGU6CiAKICAgICB1bnNpZ25lZCBtX251bVZhbHVlUHJvZmlsZXM7CiAgICAgdW5zaWduZWQgbV9u
dW1BcnJheVByb2ZpbGVzOworICAgIHVuc2lnbmVkIG1fbnVtQmluYXJ5QXJpdGhQcm9maWxlczsK
KyAgICB1bnNpZ25lZCBtX251bVVuYXJ5QXJpdGhQcm9maWxlczsKIAogICAgIENhY2hlZE1ldGFk
YXRhVGFibGUgbV9tZXRhZGF0YTsKIApAQCAtMjE2MCw2ICsyMTY1LDggQEAgQUxXQVlTX0lOTElO
RSBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZQogICAgICwgbV9yYXJlRGF0YShjYWNoZWRDb2Rl
QmxvY2sucmFyZURhdGEoZGVjb2RlcikpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZXMoY2FjaGVkQ29k
ZUJsb2NrLm51bVZhbHVlUHJvZmlsZXMoKSkKICAgICAsIG1fYXJyYXlQcm9maWxlcyhjYWNoZWRD
b2RlQmxvY2subnVtQXJyYXlQcm9maWxlcygpKQorICAgICwgbV9iaW5hcnlBcml0aFByb2ZpbGVz
KGNhY2hlZENvZGVCbG9jay5udW1CaW5hcnlBcml0aFByb2ZpbGVzKCkpCisgICAgLCBtX3VuYXJ5
QXJpdGhQcm9maWxlcyhjYWNoZWRDb2RlQmxvY2subnVtVW5hcnlBcml0aFByb2ZpbGVzKCkpCiB7
CiB9CiAKQEAgLTIzMzcsNiArMjM0NCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBDYWNoZWRDb2Rl
QmxvY2s8Q29kZUIKICAgICBtX2hhc0NoZWNrcG9pbnRzID0gY29kZUJsb2NrLm1faGFzQ2hlY2tw
b2ludHM7CiAgICAgbV9udW1WYWx1ZVByb2ZpbGVzID0gY29kZUJsb2NrLm1fdmFsdWVQcm9maWxl
cy5zaXplKCk7CiAgICAgbV9udW1BcnJheVByb2ZpbGVzID0gY29kZUJsb2NrLm1fYXJyYXlQcm9m
aWxlcy5zaXplKCk7CisgICAgbV9udW1CaW5hcnlBcml0aFByb2ZpbGVzID0gY29kZUJsb2NrLm1f
YmluYXJ5QXJpdGhQcm9maWxlcy5zaXplKCk7CisgICAgbV9udW1VbmFyeUFyaXRoUHJvZmlsZXMg
PSBjb2RlQmxvY2subV91bmFyeUFyaXRoUHJvZmlsZXMuc2l6ZSgpOwogCiAgICAgbV9tZXRhZGF0
YS5lbmNvZGUoZW5jb2RlciwgY29kZUJsb2NrLm1fbWV0YWRhdGEuZ2V0KCkpOwogICAgIG1fcmFy
ZURhdGEuZW5jb2RlKGVuY29kZXIsIGNvZGVCbG9jay5tX3JhcmVEYXRhLmdldCgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDcgKzQ4MCw3IEBAIEpTQ19E
RUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG8KICNpZiBFTkFCTEUoSklUKQogc3Rh
dGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRh
ZGF0YSYgbWV0YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAg
VW5hcnlBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsKKyAg
ICBVbmFyeUFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICptZXRhZGF0YS5tX2FyaXRoUHJvZmlsZTsK
ICAgICBwcm9maWxlLm9ic2VydmVBcmcob3BlcmFuZCk7CiAgICAgQVNTRVJUKHJlc3VsdC5pc051
bWJlcigpIHx8IHJlc3VsdC5pc0JpZ0ludCgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI4MzEz
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZSYXJlRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fcmFyZURhdGEpOyB9CiAgICAgc3RhdGljIGlubGlu
ZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBc1N0cmluZ0luUmFyZURhdGEoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoUmFyZURhdGEsIG1fYXNTdHJpbmcpOyB9CisgICAgc3RhdGljIGlubGluZSBwdHJk
aWZmX3Qgb2Zmc2V0T2ZDb2RlQmxvY2tGb3JDYWxsKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsgfQorICAgIHN0YXRpYyBp
bmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQ29kZUJsb2NrRm9yQ29uc3RydWN0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QpOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI4
MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MzQsOCArNDM0LDYgQEAgdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBl
bmRlbnRPcHRpb25zKAogICAgIE9wdGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpID0gZmFsc2U7CiAj
ZW5kaWYKIAotICAgIGlmICghaXNBUk02NCgpKQotICAgICAgICBPcHRpb25zOjp1c2VEYXRhSUMo
KSA9IGZhbHNlOwogICAgIGlmICghT3B0aW9uczo6dXNlRGF0YUlDKCkpCiAgICAgICAgIE9wdGlv
bnM6OnVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCgpID0gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjgzMTMxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzA5LDcgKzMwOSw2IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5
KCk7CiAgICAgdihJbnQzMiwgZXZhbFRocmVzaG9sZE11bHRpcGxpZXIsIDEwLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBtYXhpbXVtRXZhbENhY2hlYWJsZVNvdXJjZUxlbmd0
aCwgMjU2LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCi0gICAgdihCb29sLCByYW5kb21pemVF
eGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KEludDMyLCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
Rm9yQmFzZWxpbmUsIDEwMDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoSW50MzIsIG1heGlt
dW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHNGb3JVcHBlclRpZXJzLCA1MDAwMCwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgXApAQCAtNTMyLDYgKzUzMSw3IEBAIGJvb2wgY2FuVXNl
V2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgdihCb29sLCB1c2VEYXRhSUMsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZURhdGFJQ0luT3B0aW1pemluZ0pJVCwg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgdXNlRGF0YUlDU2hhcmluZywg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgdXNlQmFzZWxpbmVKSVRDb2Rl
U2hhcmluZywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIC8qIEZlYXR1cmUg
RmxhZ3MgKi9cCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ny
aXB0RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NyaXB0RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NjcmlwdEV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOTYsMTAgKzM5NiwxOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JF
eGVjdXRpCiAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlQnl0ZWNvZGUoKSkKICAgICAgICAgY29k
ZUJsb2NrLT52YWxpZGF0ZSgpOwogCi0gICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpCi0gICAg
ICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKLSAgICBlbHNlCi0gICAgICAgIHNldHVwSklUKHZt
LCBjb2RlQmxvY2spOworICAgIGJvb2wgaW5zdGFsbGVkVW5saW5rZWRCYXNlbGluZUNvZGUgPSBm
YWxzZTsKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChSZWZQdHI8QmFzZWxpbmVKSVRDb2RlPiBi
YXNlbGluZVJlZiA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV91bmxpbmtlZEJh
c2VsaW5lQ29kZSkgeworICAgICAgICBjb2RlQmxvY2stPnNldHVwV2l0aFVubGlua2VkQmFzZWxp
bmVDb2RlKGJhc2VsaW5lUmVmLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBpbnN0YWxsZWRV
bmxpbmtlZEJhc2VsaW5lQ29kZSA9IHRydWU7CisgICAgfQorI2VuZGlmCisgICAgaWYgKCFpbnN0
YWxsZWRVbmxpbmtlZEJhc2VsaW5lQ29kZSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dXNlTExJ
bnQoKSkKKyAgICAgICAgICAgIHNldHVwTExJbnQoY29kZUJsb2NrKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CisgICAgfQogCiAgICAgaW5zdGFs
bENvZGUodm0sIGNvZGVCbG9jaywgY29kZUJsb2NrLT5jb2RlVHlwZSgpLCBjb2RlQmxvY2stPnNw
ZWNpYWxpemF0aW9uS2luZCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21MTEludFRpZXJVcENvdW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTExJbnRUaWVyVXBDb3VudGVyLmgJKHJldmlzaW9uIDI4MzEzMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFRpZXJVcENvdW50ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFm
dGVyV2FybVVwKCkKICAgICB7CiAgICAgICAgIGlmIChPcHRpb25zOjp3YXNtTExJbnRUaWVyc1Vw
VG9CQlEoKSkKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRG
b3JCQlFPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3
VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvckJCUU9wdGltaXplQWZ0ZXJXYXJtVXAoKSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJl
c2hvbGRGb3JPTUdPcHRpbWl6ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICAgICAg
c2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplQWZ0ZXJXYXJt
VXAoKSk7CiAgICAgfQogCiAgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVh
Y2hlZCgpCkBAIC02NSw5ICs2NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wdGltaXplU29vbigp
CiAgICAgewogICAgICAgICBpZiAoT3B0aW9uczo6d2FzbUxMSW50VGllcnNVcFRvQkJRKCkpCi0g
ICAgICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yQkJRT3B0aW1p
emVTb29uKCksIG51bGxwdHIpOworICAgICAgICAgICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvckJCUU9wdGltaXplU29vbigpKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZvck9NR09wdGltaXplU29vbigp
LCBudWxscHRyKTsKKyAgICAgICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hv
bGRGb3JPTUdPcHRpbWl6ZVNvb24oKSk7CiAgICAgfQogCiAgICAgc3RydWN0IE9TUkVudHJ5RGF0
YSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaWVyVXBDb3Vu
dC5jcHAJKHJldmlzaW9uIDI4MzEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UaWVyVXBDb3VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogVGllclVwQ291bnQ6OlRpZXJVcENvdW50KCkK
IHsKLSAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVB
ZnRlcldhcm1VcCgpLCBudWxscHRyKTsKKyAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhy
ZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKIH0KIAogVGllclVwQ291bnQ6On5U
aWVyVXBDb3VudCgpID0gZGVmYXVsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UaWVyVXBDb3VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21UaWVyVXBDb3VudC5oCShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVGllclVwQ291bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyAr
NzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuIik7
Ci0gICAgICAgIHNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JPTUdPcHRpbWl6
ZUFmdGVyV2FybVVwKCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9u
czo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKICAgICB9CiAKICAgICBi
b29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKQEAgLTkwLDE0ICs5MCwx
NCBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nTG5JZihPcHRpb25zOjp2ZXJib3Nl
T1NSKCksIGZ1bmN0aW9uSW5kZXgsICI6IE9NRy1vcHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi4i
KTsKLSAgICAgICAgc2V0TmV3VGhyZXNob2xkKDAsIG51bGxwdHIpOworICAgICAgICBzZXROZXdU
aHJlc2hvbGQoMCk7CiAgICAgfQogCiAgICAgdm9pZCBvcHRpbWl6ZVNvb24odWludDMyX3QgZnVu
Y3Rpb25JbmRleCkKICAgICB7CiAgICAgICAgIGRhdGFMb2dMbklmKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSwgZnVuY3Rpb25JbmRleCwgIjogT01HLW9wdGltaXppbmcgc29vbi4iKTsKICAgICAgICAg
Ly8gRklYTUU6IE5lZWQgYWRqdXN0bWVudCBvbmNlIHdlIGdldCBtb3JlIGluZm9ybWF0aW9uIGFi
b3V0IHdhc20gZnVuY3Rpb25zLgotICAgICAgICBzZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhy
ZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCksIG51bGxwdHIpOworICAgICAgICBzZXROZXdUaHJl
c2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT01HT3B0aW1pemVTb29uKCkpOwogICAgIH0KIAog
ICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0
KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKSW5kZXg6
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA5LTI3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBw
bGUuY29tPgorCisgICAgICAgIEJ1aWxkIGFuIHVubGlua2VkIGJhc2VsaW5lIEpJVAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5MjIzCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS84MjMyMTc3Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2Ug
U3V6dWtpLgorCisgICAgICAgICogd3RmL0JhZy5oOgorICAgICAgICAqIHd0Zi9QYWNrZWQuaDoK
KyAgICAgICAgKFdURjo6UGFja2VkQWxpZ25lZFB0cjo6b3BlcmF0b3IqIGNvbnN0KToKKwogMjAy
MS0wOS0yNyAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyODMxMDIsIHIyODMxMDMgYW5kIHIyODMxMDQuCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9C
YWcuaAkocmV2aXNpb24gMjgzMTMxKQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDYgKzY2LDIwIEBAIHB1YmxpYzoKICAgICAgICAgb3RoZXIubV9oZWFkID0g
bnVsbHB0cjsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIEJhZyYgb3Bl
cmF0b3I9KEJhZzxULCBVPiYmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHVud3JhcHBlZEhl
YWQoKSA9PSBvdGhlci51bndyYXBwZWRIZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisKKyAgICAgICAgQmFnIGRlc3Ryb3k7CisgICAgICAgIGRlc3Ryb3kubV9oZWFkID0gdW53cmFw
cGVkSGVhZCgpOworICAgICAgICBtX2hlYWQgPSBvdGhlci51bndyYXBwZWRIZWFkKCk7CisgICAg
ICAgIG90aGVyLm1faGVhZCA9IG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAg
IH0KKwogICAgIH5CYWcoKQogICAgIHsKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL1BhY2tlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BhY2tlZC5oCShy
ZXZpc2lvbiAyODMxMzEpCisrKyBTb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTg2LDcgKzE4NiwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgVCogb3BlcmF0b3It
PigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9Ci0gICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyBy
ZXR1cm4gKmdldCgpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSA9IFQ+CisgICAgdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfdm9pZF92PFU+LCBVJj46OnR5cGUgb3BlcmF0
b3IqKCkgY29uc3QgeyByZXR1cm4gKmdldCgpOyB9CisKICAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFnZXQoKTsgfQogCiAgICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9y
IGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRl
Z2VyIHR5cGVzLgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gMjgzMTMxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDktMjcgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBh
cHBsZS5jb20+CisKKyAgICAgICAgQnVpbGQgYW4gdW5saW5rZWQgYmFzZWxpbmUgSklUCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjkyMjMKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzgyMzIxNzcyPgorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3Vr
ZSBTdXp1a2kuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzOgorCiAy
MDIxLTA5LTI3ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4MzEwMiwgcjI4MzEwMyBhbmQgcjI4MzEwNC4K
SW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkocmV2aXNpb24gMjgzMTMxKQorKysg
VG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtODYz
LDcgKzg2Myw3IEBAIGRlZiBydW5GVExOb0NKSVROb0FjY2Vzc0lubGluaW5nKCpvcHRpb24KIGVu
ZAogCiBkZWYgcnVuRlRMTm9DSklUU21hbGxQb29sKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlv
bnMpCi0gICAgcnVuKCJmdGwtbm8tY2ppdC1zbWFsbC1wb29sIiwgIi0taml0TWVtb3J5UmVzZXJ2
YXRpb25TaXplPTEwMjQwMCIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtc21hbGwtcG9v
bCIsICItLWppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZT0yMDI0MDAiLCAqKEZUTF9PUFRJT05TICsg
Tk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBk
ZWYgcnVuTm9DSklUKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC0xMTcxLDcgKzEx
NzEsNyBAQCBkZWYgZGVmYXVsdFJ1bk1vZHVsZXMobm9MTEludDogdHJ1ZSkKICAgICBydW4oImZ0
bC1uby1jaml0LW5vLWlubGluZS12YWxpZGF0ZS1tb2R1bGVzIiwgIi1tIiwgIi0tdmFsaWRhdGVH
cmFwaD10cnVlIiwgIi0tbWF4aW11bUlubGluaW5nRGVwdGg9MSIsICooRlRMX09QVElPTlMgKyBO
T19DSklUX09QVElPTlMpKQogICAgIHJ1bigiZnRsLWVhZ2VyLW1vZHVsZXMiLCAiLW0iLCAqKEZU
TF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUykpCiAgICAgcnVuKCJmdGwtZWFnZXItbm8tY2ppdC1t
b2R1bGVzIiwgIi1tIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5P
X0NKSVRfT1BUSU9OUyArIEVBR0VSX09QVElPTlMpKQotICAgIHJ1bigiZnRsLW5vLWNqaXQtc21h
bGwtcG9vbC1tb2R1bGVzIiwgIi1tIiwgIi0taml0TWVtb3J5UmVzZXJ2YXRpb25TaXplPTEwMjQw
MCIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQorICAgIHJ1bigiZnRsLW5vLWNq
aXQtc21hbGwtcG9vbC1tb2R1bGVzIiwgIi1tIiwgIi0taml0TWVtb3J5UmVzZXJ2YXRpb25TaXpl
PTIwMjQwMCIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQogZW5kCiAKIGRlZiBu
b05vTExJbnRSdW5Nb2R1bGVzCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>